ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5ZTczMQotLS0gL2Rldi9udWxsCisrKyBiL0FOTk9VTkNFCkBAIC0wLDAgKzEsNDczIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ub3VuY2luZyBuY3Vyc2VzIDUuNworCisgICBUaGUgIG5jdXJzZXMgIChuZXcgIGN1cnNlcykgIGxpYnJhcnkgIGlzICBhIGZyZWUgc29mdHdhcmUgZW11bGF0aW9uIG9mCisgICBjdXJzZXMgIGluICBTeXN0ZW0gIFYgIFJlbGVhc2UgNC4wLCBhbmQgbW9yZS4gSXQgdXNlcyB0ZXJtaW5mbyBmb3JtYXQsCisgICBzdXBwb3J0cyAgcGFkcyAgYW5kIGNvbG9yIGFuZCBtdWx0aXBsZSBoaWdobGlnaHRzIGFuZCBmb3JtcyBjaGFyYWN0ZXJzCisgICBhbmQgICBmdW5jdGlvbi1rZXkgICBtYXBwaW5nLCAgIGFuZCAgaGFzICBhbGwgIHRoZSAgb3RoZXIgIFNZU1YtY3Vyc2VzCisgICBlbmhhbmNlbWVudHMgb3ZlciBCU0QgY3Vyc2VzLgorCisgICBJbiAgbWlkLUp1bmUgIDE5OTUsICB0aGUgIG1haW50YWluZXIgb2YgNC40QlNEIGN1cnNlcyBkZWNsYXJlZCB0aGF0IGhlCisgICBjb25zaWRlcmVkICA0LjRCU0QgY3Vyc2VzIG9ic29sZXRlLCBhbmQgZW5jb3VyYWdlZCB0aGUga2VlcGVycyBvZiBVbml4CisgICByZWxlYXNlcyBzdWNoIGFzIEJTRC9PUywgRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHN3aXRjaCBvdmVyIHRvIG5jdXJzZXMuCisKKyAgIFRoZSBuY3Vyc2VzIGNvZGUgd2FzIGRldmVsb3BlZCB1bmRlciBHTlUvTGludXguIEl0IGhhcyBiZWVuIGluIHVzZSBmb3IKKyAgIHNvbWUgIHRpbWUgIHdpdGggIE9wZW5CU0QgYXMgdGhlIHN5c3RlbSBjdXJzZXMgbGlicmFyeSwgYW5kIG9uIEZyZWVCU0QKKyAgIGFuZCAgTmV0QlNEICBhcyAgYW4gIGV4dGVybmFsICBwYWNrYWdlLiAgSXQgIHNob3VsZCBwb3J0IGVhc2lseSB0byBhbnkKKyAgIEFOU0kvUE9TSVgtY29uZm9ybWluZyBVTklYLiBJdCBoYXMgZXZlbiBiZWVuIHBvcnRlZCB0byBPUy8yIFdhcnAhCisKKyAgIFRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgdGhlIGxpYnJhcnkgYW5kIHN1cHBvcnQgdXRpbGl0aWVzLCBpbmNsdWRpbmcKKyAgIGEgICB0ZXJtaW5mbyAgY29tcGlsZXIgIHRpYygxKSwgIGEgIGRlY29tcGlsZXIgIGluZm9jbXAoMSksICBjbGVhcigxKSwKKyAgIHRwdXQoMSksICB0c2V0KDEpLCAgYW5kICBhICB0ZXJtY2FwIGNvbnZlcnNpb24gdG9vbCBjYXB0b2luZm8oMSkuIEZ1bGwKKyAgIG1hbnVhbCBwYWdlcyBhcmUgcHJvdmlkZWQgZm9yIHRoZSBsaWJyYXJ5IGFuZCB0b29scy4KKworICAgVGhlICBuY3Vyc2VzICBkaXN0cmlidXRpb24gIGlzICBhdmFpbGFibGUgdmlhIGFub255bW91cyBGVFAgYXQgdGhlIEdOVQorICAgZGlzdHJpYnV0aW9uIHNpdGUgWzFdZnRwOi8vZnRwLmdudS5vcmcvZ251L25jdXJzZXMvIC4KKyAgIEl0IGlzIGFsc28gYXZhaWxhYmxlIGF0IFsyXWZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvIC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcworCisgICBUaGlzICByZWxlYXNlICBpcyAgZGVzaWduZWQgIHRvICBiZSB1cHdhcmQgY29tcGF0aWJsZSBmcm9tIG5jdXJzZXMgNS4wCisgICB0aHJvdWdoICAgNS42OyAgdmVyeSAgZmV3ICBhcHBsaWNhdGlvbnMgIHdpbGwgIHJlcXVpcmUgIHJlY29tcGlsYXRpb24sCisgICBkZXBlbmRpbmcgICBvbiAgdGhlICBwbGF0Zm9ybS4gIFRoZXNlICBhcmUgIHRoZSAgaGlnaGxpZ2h0cyAgZnJvbSAgdGhlCisgICBjaGFuZ2UtbG9nIHNpbmNlIG5jdXJzZXMgNS42IHJlbGVhc2UuCisKKyAgIEludGVyZmFjZSBjaGFuZ2VzOgorICAgICAqIGdlbmVyYXRlIGxpbmthYmxlIHN0dWJzIGZvciBzb21lIG1hY3JvczoKKyAgICAgICBnZXRhdHRycworCisgICBOZXcgZmVhdHVyZXMgYW5kIGltcHJvdmVtZW50czoKKyAgICAgKiBsaWJyYXJ5CisgICAgICAgICAgKyBuZXcgIGZsYXZvciAgb2YgIHRoZSAgbmN1cnNlcyAgbGlicmFyeSAgcHJvdmlkZXMgIHJ1ZGltZW50YXJ5CisgICAgICAgICAgICBzdXBwb3J0ICBmb3IgIFBPU0lYIHRocmVhZHMuIFNldmVyYWwgZnVuY3Rpb25zIGFyZSByZWVudHJhbnQsCisgICAgICAgICAgICBidXQgbW9zdCByZXF1aXJlIGVpdGhlciBhIHdpbmRvdy1sZXZlbCBvciBzY3JlZW4tbGV2ZWwgbXV0ZXguCisgICAgICAgICAgICAoVGhpcyAgaXMgIEFQSS1jb21wYXRpYmxlLCAgYnV0ICBub3QgIEFCSS1jb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICBub3JtYWwgbGlicmFyeSkuCisgICAgICAgICAgKyBhZGQgIE5DVVJTRVNfT1BBUVVFICBzeW1ib2wgIHRvICBjdXJzZXMuaCwgIHdpbGwgIHVzZSB0byBtYWtlCisgICAgICAgICAgICBzdHJ1Y3RzIG9wYXF1ZSBpbiBzZWxlY3RlZCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICArIGFkZCAgIE5DVVJTRVNfRVhUX0ZVTkNTICBhbmQgIE5DVVJTRVNfRVhUX0NPTE9SUyAgc3ltYm9scyAgdG8KKyAgICAgICAgICAgIGN1cnNlcy5oIHRvIG1ha2UgaXQgc2ltcGxlciB0byB0ZWxsIGlmIHRoZSBleHRlbmRlZCBmdW5jdGlvbnMKKyAgICAgICAgICAgIGFuZC9vciBjb2xvcnMgYXJlIGRlY2xhcmVkLgorICAgICAgICAgICsgYWRkIHdyZXNpemUoKSB0byBDKysgYmluZGluZworICAgICAgICAgICsgZWxpbWluYXRlIGZpeGVkLWJ1ZmZlciB2c3ByaW50ZigpIGNhbGxzIGluIEMrKyBiaW5kaW5nLgorICAgICAgICAgICsgYWRkICBzZXZlcmFsICBmdW5jdGlvbnMgdG8gQysrIGJpbmRpbmcgd2hpY2ggd3JhcCBDIGZ1bmN0aW9ucworICAgICAgICAgICAgdGhhdCBwYXNzIGEgV0lORE9XKiBwYXJhbWV0ZXIuCisgICAgICAgICAgKyBhZGFwdCBtb3VzZS1oYW5kbGluZyBjb2RlIGZyb20gbWVudSBsaWJyYXJ5IGluIGZvcm0tbGlicmFyeQorICAgICAgICAgICsgaW1wcm92ZSAgdHJhY2luZyAgZm9yICBmb3JtICBsaWJyYXJ5LCAgc2hvd2luZyBjcmVhdGVkIGZvcm1zLAorICAgICAgICAgICAgZmllbGRzLCBldGMuCisgICAgICAgICAgKyBtYWtlICROQ1VSU0VTX05PX1BBRERJTkcgZmVhdHVyZSB3b3JrIGZvciB0ZXJtY2FwIGludGVyZmFjZSAuCisgICAgICAgICAgKyBhZGQgIGNoZWNrICB0byAgdHJhY2UtZmlsZSAgb3BlbiwgIGlmICB0aGUgIGdpdmVuICBuYW1lICBpcyBhCisgICAgICAgICAgICBkaXJlY3RvcnksIGFkZCAiLmxvZyIgdG8gdGhlIG5hbWUgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICArIHNldmVyYWwgICBuZXcgICBtYW5wYWdlczogIGN1cnNfbGVnYWN5LjN4LCAgY3Vyc19tZW1sZWFrcy4zeCwKKyAgICAgICAgICAgIGN1cnNfb3BhcXVlLjN4IGFuZCBjdXJzX3RocmVhZHMuM3gKKyAgICAgKiBwcm9ncmFtczoKKyAgICAgICAgICArIG1vZGlmaWVkICB0aHJlZSAgdGVzdC1wcm9ncmFtcyAgdG8gIGRlbW9uc3RyYXRlIHRoZSB0aHJlYWRpbmcKKyAgICAgICAgICAgIHN1cHBvcnQgaW4gdGhpcyB2ZXJzaW9uOiBkaXR0bywgcmFpbiwgd29ybS4KKyAgICAgICAgICArIHNldmVyYWwgICAgbmV3ICAgIHRlc3QtcHJvZ3JhbXM6ICAgZGVtb19wYW5lbHMsICAgZG90c19tdmN1ciwKKyAgICAgICAgICAgIGluY2hfd2lkZSwgICAgaW5jaHMsICAgIGtleV9uYW1lLCAgICBrZXlfbmFtZXMsICAgc2F2ZXNjcmVlbiwKKyAgICAgICAgICAgIHNhdmVzY3JlZW4uc2ggICAgdGVzdF9hcnJheXMsICAgdGVzdF9nZXRfd3N0ciwgICB0ZXN0X2dldHN0ciwKKyAgICAgICAgICAgIHRlc3RfaW5zdHIsIHRlc3RfaW53c3RyIGFuZCB0ZXN0X29wYXF1ZS4KKyAgICAgICAgICArIGFkZCBhZGFjdXJzZXMtY29uZmlnIHRvIHRoZSBBZGE5NSBpbnN0YWxsLgorICAgICAgICAgICsgbW9kaWZ5ICB0aWMgIC1mIG9wdGlvbiB0byBmb3JtYXQgc3BhY2VzIGFzIFxzIHRvIHByZXZlbnQgdGhlbQorICAgICAgICAgICAgZnJvbSAgYmVpbmcgIGxvc3QgIHdoZW4gIHRoYXQgIGlzICByZWFkICBiYWNrICBpbiB1bmZvcm1hdHRlZAorICAgICAgICAgICAgc3RyaW5ncy4KKyAgICAgICAgICArIFRoZSB0YWNrIHByb2dyYW0gaXMgbm93IGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSBuY3Vyc2VzLgorICAgICAqIHRlcm1pbmFsIGRhdGFiYXNlCisgICAgICAgICAgKyBhZGRlZCBlbnRyaWVzOgorICAgICAgICAgICAgICAgbyBFdGVybS0yNTZjb2xvciwgRXRlcm0tODhjb2xvciBhbmQgcnh2dC04OGNvbG9yCisgICAgICAgICAgICAgICBvIGF0ZXJtCisgICAgICAgICAgICAgICBvIGtvbnNvbGUtMjU2Y29sb3IKKyAgICAgICAgICAgICAgIG8gbXJ4dnQKKyAgICAgICAgICAgICAgIG8gc2NyZWVuLm1sdGVybQorICAgICAgICAgICAgICAgbyBzY3JlZW4ucnh2dAorICAgICAgICAgICAgICAgbyB0ZXJhdGVybTQuNTkgIGlzIG5vdyB0aGUgcHJpbWFyeSBwcmltYXJ5IHRlcmF0ZXJtIGVudHJ5LAorICAgICAgICAgICAgICAgICByZW5hbWVkIG9yaWdpbmFsIHRvIHRlcmF0ZXJtMi4zCisgICAgICAgICAgICAgICBvIDl0ZXJtIHRlcm1pbmFsCisgICAgICAgICAgICAgICBvIE5ld2J1cnkgRGF0YSBlbnRyaWVzCisgICAgICAgICAgKyB1cGRhdGVkL2ltcHJvdmVkIGVudHJpZXM6CisgICAgICAgICAgICAgICBvIGdub21lIHRvIHZlcnNpb24gMi4yMi4zCisgICAgICAgICAgICAgICBvIGgxOSwgejEwMAorICAgICAgICAgICAgICAgbyBrb25zb2xlIHRvIHZlcnNpb24gMS42LjYKKyAgICAgICAgICAgICAgIG8gbWx0ZXJtLCBtbHRlcm0rcGNma2V5cworICAgICAgICAgICAgICAgbyB4dGVybSwgYW5kIGJ1aWxkaW5nLWJsb2NrcyBmb3IgZnVuY3Rpb24ta2V5cyB0byBbM114dGVybQorICAgICAgICAgICAgICAgICBwYXRjaCAjMjMwLgorCisgICBNYWpvciBidWcgZml4ZXM6CisgICAgICogYWRkICAgbG9naWMgICB0byAgIHRpYyAgZm9yICBjYW5jZWxsaW5nICBzdHJpbmdzICBpbiAgdXNlci1kZWZpbmVkCisgICAgICAgY2FwYWJpbGl0aWVzICh0aGlzIGlzIG5lZWRlZCBmb3IgY3VycmVudCBrb25zb2xlIHRlcm1pbmZvIGVudHJ5KS4KKyAgICAgKiBtb2RpZnkgIG1rLTFzdC5hd2sgIHNvIHRoZSBnZW5lcmF0ZWQgbWFrZWZpbGUgcnVsZXMgZm9yIGxpbmtpbmcgb3IKKyAgICAgICBpbnN0YWxsaW5nICBzaGFyZWQgIGxpYnJhcmllcyAgZG8gbm90IGZpcnN0IHJlbW92ZSB0aGUgbGlicmFyeSwgaW4KKyAgICAgICBjYXNlIGl0IGlzIGluIHVzZSwgZS5nLiwgbGlibmN1cnNlcy5zbyBieSAvYmluL3NoLgorICAgICAqIGNvcnJlY3QgY2hlY2sgZm9yIG5vdGltZW91dCgpIGluIHdnZXRjaCgpLgorICAgICAqIGZpeCBhIHNpZ24tZXh0ZW5zaW9uIGJ1ZyBpbiBpbmZvY21wJ3MgcmVwYWlyX2Fjc2MoKSBmdW5jdGlvbi4KKyAgICAgKiBjaGFuZ2Ugd2lubnN0cigpIHRvIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAgKiBtYWtlIEFkYTk1IGRlbW9fcGFuZWxzKCkgZXhhbXBsZSB3b3JrLgorICAgICAqIGZpeCBmb3IgYWRkaW5nIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorICAgICAqIGZpbGwgICBpbiAgIGV4dGVuZGVkLWNvbG9yICAgcGFpciAgIHRvICAgbWFrZSAgIGNvbG9ycyAgIHdvcmsgIGZvcgorICAgICAgIHdpZGUtY2hhcmFjdGVycyB1c2luZyBleHRlbmRlZC1jb2xvcnMuCisgICAgICogaW1wcm92ZSAgcmVmcmVzaCAgb2YgIHdpbmRvdyAgb24gIHRvcCAgb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMsCisgICAgICAgdGFraW5nICAgaW50byAgIGFjY291bnQgIHNwbGl0ICBjaGFyYWN0ZXJzICBvbiAgbGVmdC9yaWdodCAgd2luZG93CisgICAgICAgYm91bmRhcmllcy4KKyAgICAgKiBtb2RpZnkgIHdpbl93Y2huc3RyKCkgIHRvIGVuc3VyZSB0aGF0IG9ubHkgYSBiYXNlIGNlbGwgaXMgcmV0dXJuZWQKKyAgICAgICBmb3IgZWFjaCBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyLgorICAgICAqIGltcHJvdmUgd2FkZGNoKCkgYW5kIHdpbnNjaCgpIGhhbmRsaW5nIG9mIEVJTFNFUSBmcm9tIG1icnRvd2MoKSBieQorICAgICAgIHVzaW5nICB1bmN0cmwoKSAgdG8gIGRpc3BsYXkgIGlsbGVnYWwgIGJ5dGVzIHJhdGhlciB0aGFuIHRyeWluZyB0bworICAgICAgIGFwcGVuZCBmdXJ0aGVyIGJ5dGVzIHRvIG1ha2UgdXAgYSB2YWxpZCBzZXF1ZW5jZS4KKyAgICAgKiByZXN0b3JlIGN1cnNfc2V0KCkgc3RhdGUgYWZ0ZXIgZW5kd2luKCkvcmVmcmVzaCgpCisgICAgICogbW9kaWZ5ICBrZXluYW1lKCkgdG8gdXNlICJeWCIgZm9ybSBvbmx5IGlmIG1ldGEoKSBoYXMgYmVlbiBjYWxsZWQsCisgICAgICAgb3IgIGlmICBrZXluYW1lKCkgaXMgY2FsbGVkIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGN1cnNlcywgZS5nLiwgdmlhCisgICAgICAgaW5pdHNjcigpIG9yIG5ld3Rlcm0oKS4KKyAgICAgKiBtb2RpZnkgIHVuY3RybCgpIHRvIGNoZWNrIGNvZGVzIGluIDEyOC0yNTUgcmFuZ2UgdmVyc3VzIGlzcHJpbnQoKS4KKyAgICAgICBJZiAgdGhleSAgYXJlIG5vdCBwcmludGFibGUsIGFuZCBsb2NhbGUgd2FzIHNldCwgdXNlIGEgIk0tIiBvciAifiIKKyAgICAgICBzZXF1ZW5jZS4KKyAgICAgKiBpbXByb3ZlICByZXNpemV0ZXJtKCkgIGJ5ICBtb3ZpbmcgcmlwcGVkLW9mZiBsaW5lcywgYW5kIHJlcGFpbnRpbmcKKyAgICAgICB0aGUgc29mdC1rZXlzLgorICAgICAqIG1vZGlmeSAgZm9ybSAgbGlicmFyeSB0byBhY2NlcHQgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgbmV3bGluZQorICAgICAgIGluIHNldF9maWVsZF9idWZmZXIoKSwgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMuCisgICAgICogdXNlICBOQ1VSU0VTX01PVVNFX01BU0soKSBpbiBkZWZpbml0aW9uIG9mIEJVVFRPTl9SRUxFQVNFKCksIGV0Yy4sCisgICAgICAgdG8gICBtYWtlICAgdGhvc2UgICB3b3JrICAgcHJvcGVybHkgIHdpdGggIHRoZSAgLS1lbmFibGUtZXh0LW1vdXNlCisgICAgICAgY29uZmlndXJhdGlvbgorICAgICAqIGNvcnJlY3QgIHNvbWUgIGZ1bmN0aW9ucyAgaW4gQWRhOTUgYmluZGluZyB3aGljaCB3ZXJlIHVzaW5nIHJldHVybgorICAgICAgIHZhbHVlIGZyb20gQyB3aGVyZSBub25lIHdhcyByZXR1cm5lZC4KKyAgICAgKiByZXZpZXdlZC9maXhlZCBpc3N1ZXMgcmVwb3J0ZWQgYnkgQ292ZXJpdHkgYW5kIEtsb2N3b3JrIHRvb2xzLgorCisgICBQb3J0YWJpbGl0eToKKyAgICAgKiBjb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgICsgbmV3IG9wdGlvbnM6CisKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWJpZy1zdHJpbmdzCisgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCAgd2hldGhlciBzdGF0aWMgc3RyaW5nIHRhYmxlcyBhcmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgYXMgICBzaW5nbGUgICBsYXJnZSAgc3RyaW5ncyAgKHRvICBpbXByb3ZlICBzdGFydHVwCisgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UpLCBvciBhcyBhcnJheSBvZiBpbmRpdmlkdWFsIHN0cmluZ3MuCisKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlbGluaworICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgICB3aGV0aGVyICBzaGFyZWQgIGxpYnJhcmllcyAgYXJlICByZWxpbmtlZAorICAgICAgICAgICAgICAgICAgICAgIChkdXJpbmcgaW5zdGFsbCkgd2hlbiBycGF0aCBpcyBlbmFibGVkLgorCisgICAgICAgICAgICAgIC0tZGlzYWJsZS10aWMtZGVwZW5kcworICAgICAgICAgICAgICAgICAgICAgIG1ha2UgICBleHBsaWNpdCAgd2hldGhlciAgdGljICBsaWJyYXJ5ICBkZXBlbmRzICBvbgorICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMvbmN1cnNlc3cgbGlicmFyeS4KKworICAgICAgICAgICAgICAtLWVuYWJsZS1taXhlZC1jYXNlCisgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgICB0aGUgIGNvbmZpZ3VyZSAgc2NyaXB0J3MgIGNoZWNrICBpZiAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSAgIHN1cHBvcnRzICBtaXhlZC1jYXNlICBmaWxlbmFtZXMuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzICBvbmUgIHRvICBjb250cm9sICBob3cgdGhlIHRlcm1pbmFsIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgbWFwcyB0byB0aGUgZmlsZXN5c3RlbS4gRm9yIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90CisgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCAgIG1peGVkLWNhc2UsICB0aGUgIGxpYnJhcnkgIHVzZXMgIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgICAgMi1jaGFyYWN0ZXIgKGhleGFkZWNpbWFsKSBjb2RlcyBmb3IgdGhlIGxvd2VyLWxldmVsCisgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZpbGVzeXN0ZW0gdGVybWluZm8gZGF0YWJhc2UKKworICAgICAgICAgICAgICAtLWVuYWJsZS1yZWVudHJhbnQKKyAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgIGEgIGRpZmZlcmVudCAgZmxhdm9yIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgICAobmN1cnNlc3QpICB3aGljaCAgaW1wcm92ZXMgIHJlZW50cmFudCAgdXNlICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5ICBieSAgcmVkdWNpbmcgIGdsb2JhbCAgYW5kIHN0YXRpYyB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAoc2VlICB0aGUgICItLXdpdGgtcHRocmVhZCIgb3B0aW9uIGZvciB0aGUgdGhyZWFkZWQKKyAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0KS4KKworICAgICAgICAgICAgICAtLWVuYWJsZS13ZWFrLXN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAgICB1c2UgIHdlYWstc3ltYm9scyAgZm9yICBsaW5raW5nIHRvIHRoZSBQT1NJWCB0aHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LCAgYW5kICB1c2UgIHRoZSBzYW1lIHNvbmFtZSBmb3IgdGhlIG5jdXJzZXMKKyAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgIGxpYnJhcnkgIGFzIHRoZSBub3JtYWwgbGlicmFyeSAoY2F2ZWF0OiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBBQkkgaXMgZm9yIHRoZSB0aHJlYWRlZCBsaWJyYXJ5LCB3aGljaCBtYWtlcyBnbG9iYWwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhIGFjY2Vzc2VkIHZpYSBmdW5jdGlvbnMpLgorCisgICAgICAgICAgICAgIC0td2l0aC1wdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgIHdpdGggIHRoZSAgUE9TSVggdGhyZWFkIGxpYnJhcnkgKHRlc3RlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgQUlYLCAgIExpbnV4LCAgIEZyZWVCU0QsICAgT3BlbkJTRCwgIEhQVVgsICBJUklYNjQsCisgICAgICAgICAgICAgICAgICAgICAgU29sYXJpcywgVHJ1NjQpLgorCisgICAgICAgICAgICAgIC0td2l0aC10aWNsaWIKKyAgICAgICAgICAgICAgICAgICAgICBidWlsZC9pbnN0YWxsICAgdGhlICAgdGljLXN1cHBvcnQgIGZ1bmN0aW9ucyAgaW4gIGEKKyAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBsaWJyYXJ5CisKKyAgICAgICAgICArIGltcHJvdmVkIG9wdGlvbnM6CisKKyAgICAgICAgICAgICAgLS1lbmFibGUtZXh0LWNvbG9ycworICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIHRoZSB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLgorCisgICAgICAgICAgICAgIC0td2l0aC1jaHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgIG9wdGlvbiAgdmFsdWUgInVuc2lnbmVkIiBpcyBhbHdheXMgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgICB0eXBlICAgaW4gICBjdXJzZXMuaDsgICBkbyAgIHRoZSAgIHNhbWUgICBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbW1hc2stdC4KKworICAgICAgICAgICAgICAtLXdpdGgtZG1hbGxvYworICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLWZpeCBmb3IgcmVkZWZpbml0aW9uIG9mIHN0cm5kdXAuCisKKyAgICAgICAgICAgICAgLS13aXRoLWhhc2hlZC1kYgorICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdHMgIGEgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBpbnN0YWxsLXByZWZpeCBvZgorICAgICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gQmVya2VsZXkgRGF0YWJhc2UuCisKKyAgICAgICAgICAgICAgLS13aXRoLWhhc2hlZC1kYgorICAgICAgICAgICAgICAgICAgICAgIHRoZSAkTElCUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXMgdGhlIHNlYXJjaAorICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZGIgbGlicmFyeS4KKworICAgICAgICAgICAgICAtLXdpdGhvdXQtaGFzaGVkLWRiCisgICAgICAgICAgICAgICAgICAgICAgYXNzdW1lZCB3aGVuICItLWRpc2FibGUtZGF0YWJhc2UiIGlzIHVzZWQuCisKKyAgICAgKiBvdGhlciBjb25maWd1cmUvYnVpbGQgaXNzdWVzOgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIEx5bnhPUworICAgICAgICAgICsgbW9kaWZ5ICBzaGFyZWQtbGlicmFyeSAgcnVsZXMgIHRvICBhbGxvdyAgRnJlZUJTRCAgMy54IHRvIHVzZQorICAgICAgICAgICAgcnBhdGguCisgICAgICAgICAgKyBidWlsZC1maXggZm9yIEZyZWVCU0QgImNvbnRlbXBvcmFyeSIgVFRZIGludGVyZmFjZS4KKyAgICAgICAgICArIGJ1aWxkLWZpeGVzIGZvciBBSVggd2l0aCBsaWJ0b29sLgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIERhcndpbiBhbmQgbGlidG9vbC4KKyAgICAgICAgICArIG1vZGlmeSBCZU9TLXNwZWNpZmljIGlmZGVmJ3MgdG8gYnVpbGQgb24gSGFpa3UuCisgICAgICAgICAgKyBjb3JyZWN0ZWQgIGdjYyAgb3B0aW9ucyAgZm9yICBidWlsZGluZyAgc2hhcmVkICBsaWJyYXJpZXMgIG9uCisgICAgICAgICAgICBTb2xhcmlzIGFuZCBJUklYNjQuCisgICAgICAgICAgKyBjaGFuZ2UgIHNoYXJlZC1saWJyYXJ5ICBjb25maWd1cmF0aW9uIGZvciBPcGVuQlNELCBtYWtlIHJwYXRoCisgICAgICAgICAgICB3b3JrLgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIHVzaW5nIGxpYnV0ZjgsIGUuZy4sIG9uIE9wZW5CU0QgMy43CisgICAgICAgICAgKyBhZGQgICAiLWUiICBvcHRpb24gIGluICBuY3Vyc2VzL01ha2VmaWxlLmluICB3aGVuICBnZW5lcmF0aW5nCisgICAgICAgICAgICBzb3VyY2UtZmlsZXMgIHRvICBmb3JjZSBlYXJsaWVyIGV4aXQgaWYgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICBmYWlscyB1bmV4cGVjdGVkbHkuCisgICAgICAgICAgKyBhZGQgc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBmb3IgUU5YLgorICAgICAgICAgICsgY2hhbmdlICBkZWxpbWl0ZXIgIGluICBNS2xpYl9nZW4uc2ggZnJvbSAnJScgdG8gJ0AnLCB0byBhdm9pZAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uICBieSAgSUJNIHhsYyB0byAnIycgYXMgcGFydCBvZiBpdHMgZXh0ZW5zaW9ucyB0bworICAgICAgICAgICAgZGlncmFwaHMuCisgICAgICogbGlicmFyeToKKyAgICAgICAgICArIHJld3JpdGUgIHdyYXBwZXIgIGZvciAgd2NydG9tYigpLCAgbWFraW5nIGl0IHdvcmsgb24gU29sYXJpcy4KKyAgICAgICAgICAgIFRoaXMgIGlzICB1c2VkIGluIHRoZSBmb3JtIGxpYnJhcnkgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YKKyAgICAgICAgICAgIHRoZSBidWZmZXIgbmVlZGVkIGJ5IGZpZWxkX2J1ZmZlci4KKyAgICAgICAgICArIGFkZC91c2UgIGNvbmZpZ3VyZSAgc2NyaXB0ICBtYWNybyAgQ0ZfU0lHX0FUT01JQ19ULCAgdXNlICB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdHlwZSBmb3IgZGF0YSBtYW5pcHVsYXRlZCBieSBzaWduYWwgaGFuZGxlcnMuCisgICAgICAgICAgKyBzZXQgbG9jYWxlIGluIG1pc2MvbmN1cnNlcy1jb25maWcuaW4gc2luY2UgaXQgdXNlcyBhIHJhbmdlCisgICAgICAgICAgKyBkaXNhYmxlICBHUE0gIG1vdXNlICBzdXBwb3J0ICB3aGVuICAkVEVSTSAgZG9lcyBub3QgaGFwcGVuIHRvCisgICAgICAgICAgICBjb250YWluICAibGludXgiLCAgc2luY2UgIEdwbV9PcGVuKCkgIG5vICBsb25nZXIgIGxpbWl0cyAgaXRzCisgICAgICAgICAgICBhc3NlcnRpb24gIHRvICB0ZXJtaW5hbHMgIHRoYXQgIGl0IG1pZ2h0IGhhbmRsZSwgZS5nLiwgd2l0aGluCisgICAgICAgICAgICAic2NyZWVuIiBpbiB4dGVybS4KKyAgICAgICAgICArIHJlc2V0IG1vdXNlIGZpbGUtZGVzY3JpcHRvciB3aGVuIHVubG9hZGluZyBHUE0gbGlicmFyeS4KKyAgICAgKiB0ZXN0IHByb2dyYW1zOgorICAgICAgICAgICsgdXBkYXRlICB0ZXN0ICBwcm9ncmFtcyB0byBidWlsZC93b3JrIHdpdGggdmFyaW91cyBVTklYIGN1cnNlcworICAgICAgICAgICAgZm9yIGNvbXBhcmlzb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyBvZiBOY3Vyc2VzCisKKyAgIFRoZSBuY3Vyc2VzIHBhY2thZ2UgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIFNWcjQgKFN5c3RlbSBWIFJlbGVhc2UgNCkKKyAgIGN1cnNlczoKKyAgICAgKiBBbGwgIDI1NyAgb2YgIHRoZSAgU1ZyNCAgY2FsbHMgIGhhdmUgIGJlZW4gIGltcGxlbWVudGVkICAoYW5kICBhcmUKKyAgICAgICBkb2N1bWVudGVkKS4KKyAgICAgKiBGdWxsICBzdXBwb3J0IGZvciBTVnI0IGN1cnNlcyBmZWF0dXJlcyBpbmNsdWRpbmcga2V5Ym9hcmQgbWFwcGluZywKKyAgICAgICBjb2xvciwgICBmb3Jtcy1kcmF3aW5nICAgd2l0aCAgIEFDUyAgIGNoYXJhY3RlcnMsICAgYW5kICBhdXRvbWF0aWMKKyAgICAgICByZWNvZ25pdGlvbiBvZiBrZXlwYWQgYW5kIGZ1bmN0aW9uIGtleXMuCisgICAgICogQW4gIGVtdWxhdGlvbiAgb2YgIHRoZSAgU1ZyNCBwYW5lbHMgbGlicmFyeSwgc3VwcG9ydGluZyBhIHN0YWNrIG9mCisgICAgICAgd2luZG93cyB3aXRoIGJhY2tpbmcgc3RvcmUsIGlzIGluY2x1ZGVkLgorICAgICAqIEFuICBlbXVsYXRpb24gIG9mIHRoZSBTVnI0IG1lbnVzIGxpYnJhcnksIHN1cHBvcnRpbmcgYSB1bmlmb3JtIGJ1dAorICAgICAgIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgbWVudSBwcm9ncmFtbWluZywgaXMgaW5jbHVkZWQuCisgICAgICogQW4gIGVtdWxhdGlvbiBvZiB0aGUgU1ZyNCBmb3JtIGxpYnJhcnksIHN1cHBvcnRpbmcgZGF0YSBjb2xsZWN0aW9uCisgICAgICAgdGhyb3VnaCBvbi1zY3JlZW4gZm9ybXMsIGlzIGluY2x1ZGVkLgorICAgICAqIEJpbmFyeSAgIHRlcm1pbmZvICAgZW50cmllcyAgIGdlbmVyYXRlZCAgIGJ5ICB0aGUgIG5jdXJzZXMgIHRpYygxKQorICAgICAgIGltcGxlbWVudGF0aW9uICBhcmUgIGJpdC1mb3ItYml0LWNvbXBhdGlibGUgIHdpdGggdGhlIGVudHJ5IGZvcm1hdAorICAgICAgIFNWcjQgY3Vyc2VzIHVzZXMuCisgICAgICogVGhlIHV0aWxpdGllcyBoYXZlIG9wdGlvbnMgdG8gYWxsb3cgeW91IHRvIGZpbHRlciB0ZXJtaW5mbyBlbnRyaWVzCisgICAgICAgZm9yICB1c2UgIHdpdGggIGxlc3MgIGNhcGFibGUgY3Vyc2VzL3Rlcm1pbmZvIHZlcnNpb25zIHN1Y2ggYXMgdGhlCisgICAgICAgSFAvVVggYW5kIEFJWCBwb3J0cy4KKworICAgVGhlIG5jdXJzZXMgcGFja2FnZSBhbHNvIGhhcyBtYW55IHVzZWZ1bCBleHRlbnNpb25zIG92ZXIgU1ZyNDoKKyAgICAgKiBUaGUgIEFQSSAgaXMgOC1iaXQgY2xlYW4gYW5kIGJhc2UtbGV2ZWwgY29uZm9ybWFudCB3aXRoIHRoZSBYL09QRU4KKyAgICAgICBjdXJzZXMgIHNwZWNpZmljYXRpb24sIFhTSSBjdXJzZXMgKHRoYXQgaXMsIGl0IGltcGxlbWVudHMgYWxsIEJBU0UKKyAgICAgICBsZXZlbCAgZmVhdHVyZXMsICBhbmQgIG1vc3QgIEVYVEVOREVEICBmZWF0dXJlcykuIEl0IGluY2x1ZGVzIG1hbnkKKyAgICAgICBmdW5jdGlvbiBjYWxscyBub3Qgc3VwcG9ydGVkIHVuZGVyIFNWcjQgY3Vyc2VzIChidXQgcG9ydGFiaWxpdHkgb2YKKyAgICAgICBhbGwgY2FsbHMgaXMgZG9jdW1lbnRlZCBzbyB5b3UgY2FuIHVzZSB0aGUgU1ZyNCBzdWJzZXQgb25seSkuCisgICAgICogVW5saWtlICBTVnIzIGN1cnNlcywgbmN1cnNlcyBjYW4gd3JpdGUgdG8gdGhlIHJpZ2h0bW9zdC1ib3R0b21tb3N0CisgICAgICAgY29ybmVyICBvZiAgdGhlICBzY3JlZW4gIGlmICB5b3VyIHRlcm1pbmFsIGhhcyBhbiBpbnNlcnQtY2hhcmFjdGVyCisgICAgICAgY2FwYWJpbGl0eS4KKyAgICAgKiBBZGE5NSBhbmQgQysrIGJpbmRpbmdzLgorICAgICAqIFN1cHBvcnQgIGZvciBtb3VzZSBldmVudCByZXBvcnRpbmcgd2l0aCBYIFdpbmRvdyB4dGVybSBhbmQgRnJlZUJTRAorICAgICAgIGFuZCBPUy8yIGNvbnNvbGUgd2luZG93cy4KKyAgICAgKiBFeHRlbmRlZCBtb3VzZSBzdXBwb3J0IHZpYSBBbGVzc2FuZHJvIFJ1YmluaSdzIGdwbSBwYWNrYWdlLgorICAgICAqIFRoZSAgZnVuY3Rpb24gIHdyZXNpemUoKSAgYWxsb3dzIHlvdSB0byByZXNpemUgd2luZG93cywgcHJlc2VydmluZworICAgICAgIHRoZWlyIGRhdGEuCisgICAgICogVGhlIGZ1bmN0aW9uIHVzZV9kZWZhdWx0X2NvbG9ycygpIGFsbG93cyB5b3UgdG8gdXNlIHRoZSB0ZXJtaW5hbCdzCisgICAgICAgZGVmYXVsdCBjb2xvcnMgZm9yIHRoZSBkZWZhdWx0IGNvbG9yIHBhaXIsIGFjaGlldmluZyB0aGUgZWZmZWN0IG9mCisgICAgICAgdHJhbnNwYXJlbnQgY29sb3JzLgorICAgICAqIFRoZSBmdW5jdGlvbnMga2V5b2soKSBhbmQgZGVmaW5lX2tleSgpIGFsbG93IHlvdSB0byBiZXR0ZXIgY29udHJvbAorICAgICAgIHRoZSAgdXNlICBvZiBmdW5jdGlvbiBrZXlzLCBlLmcuLCBkaXNhYmxpbmcgdGhlIG5jdXJzZXMgS0VZX01PVVNFLAorICAgICAgIG9yICBieSAgZGVmaW5pbmcgIG1vcmUgdGhhbiBvbmUgY29udHJvbCBzZXF1ZW5jZSB0byBtYXAgdG8gYSBnaXZlbgorICAgICAgIGtleSBjb2RlLgorICAgICAqIFN1cHBvcnQgIGZvciAgMjU2LWNvbG9yICB0ZXJtaW5hbHMsICBzdWNoICBhcyAgbW9kZXJuICB4dGVybSwgd2hlbgorICAgICAgIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIC0tZW5hYmxlLWV4dC1jb2xvcnMgb3B0aW9uLgorICAgICAqIFN1cHBvcnQgZm9yIDE2LWNvbG9yIHRlcm1pbmFscywgc3VjaCBhcyBhaXh0ZXJtIGFuZCBtb2Rlcm4geHRlcm0uCisgICAgICogQmV0dGVyICBjdXJzb3ItbW92ZW1lbnQgIG9wdGltaXphdGlvbi4gIFRoZSBwYWNrYWdlIG5vdyBmZWF0dXJlcyBhCisgICAgICAgY3Vyc29yLWxvY2FsLW1vdmVtZW50IGNvbXB1dGF0aW9uIG1vcmUgZWZmaWNpZW50IHRoYW4gZWl0aGVyIEJTRCdzCisgICAgICAgb3IgU3lzdGVtIFYncy4KKyAgICAgKiBTdXBlciAgIGhhcmR3YXJlICAgc2Nyb2xsaW5nICAgc3VwcG9ydC4gICBUaGUgIHNjcmVlbi11cGRhdGUgIGNvZGUKKyAgICAgICBpbmNvcnBvcmF0ZXMgIGEgbm92ZWwsIHNpbXBsZSwgYW5kIGNoZWFwIGFsZ29yaXRobSB0aGF0IGVuYWJsZXMgaXQKKyAgICAgICB0byAgbWFrZSAgb3B0aW1hbCAgdXNlICBvZiBoYXJkd2FyZSBzY3JvbGxpbmcsIGxpbmUtaW5zZXJ0aW9uLCBhbmQKKyAgICAgICBsaW5lLWRlbGV0aW9uICBmb3IgIHNjcmVlbi1saW5lICBtb3ZlbWVudHMuIFRoaXMgYWxnb3JpdGhtIGlzIG1vcmUKKyAgICAgICBwb3dlcmZ1bCB0aGFuIHRoZSA0LjRCU0QgY3Vyc2VzIHF1aWNrY2goKSByb3V0aW5lLgorICAgICAqIFJlYWwgIHN1cHBvcnQgIGZvciAgdGVybWluYWxzICB3aXRoICB0aGUgIG1hZ2ljLWNvb2tpZSBnbGl0Y2guIFRoZQorICAgICAgIHNjcmVlbi11cGRhdGUgIGNvZGUgIHdpbGwgIHJlZnJhaW4gZnJvbSBkcmF3aW5nIGEgaGlnaGxpZ2h0IGlmIHRoZQorICAgICAgIG1hZ2ljLSAgIGNvb2tpZSAgdW5hdHRyaWJ1dGVkICBzcGFjZXMgIHJlcXVpcmVkICBqdXN0ICBiZWZvcmUgIHRoZQorICAgICAgIGJlZ2lubmluZyAgYW5kICBhZnRlciB0aGUgZW5kIHdvdWxkIHN0ZXAgb24gYSBub24tc3BhY2UgY2hhcmFjdGVyLgorICAgICAgIEl0ICB3aWxsICBhdXRvbWF0aWNhbGx5ICBzaGlmdCAgaGlnaGxpZ2h0IGJvdW5kYXJpZXMgd2hlbiBkb2luZyBzbworICAgICAgIHdvdWxkICBtYWtlIGl0IHBvc3NpYmxlIHRvIGRyYXcgdGhlIGhpZ2hsaWdodCB3aXRob3V0IGNoYW5naW5nIHRoZQorICAgICAgIHZpc3VhbCBhcHBlYXJhbmNlIG9mIHRoZSBzY3JlZW4uCisgICAgICogSXQgIGlzICBwb3NzaWJsZSB0byBnZW5lcmF0ZSB0aGUgbGlicmFyeSB3aXRoIGEgbGlzdCBvZiBwcmUtbG9hZGVkCisgICAgICAgZmFsbGJhY2sgIGVudHJpZXMgbGlua2VkIHRvIGl0IHNvIHRoYXQgaXQgY2FuIHNlcnZlIHRob3NlIHRlcm1pbmFsCisgICAgICAgdHlwZXMgIGV2ZW4gIHdoZW4gIG5vICB0ZXJtaW5mbyB0cmVlIG9yIHRlcm1jYXAgZmlsZSBpcyBhY2Nlc3NpYmxlCisgICAgICAgKHRoaXMgIG1heSAgYmUgdXNlZnVsIGZvciBzdXBwb3J0IG9mIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtcyB0aGF0CisgICAgICAgbXVzdCBydW4gaW4gc2luZ2xlLXVzZXIgbW9kZSkuCisgICAgICogVGhlIHRpYygxKS9jYXB0b2luZm8gdXRpbGl0eSBwcm92aWRlZCB3aXRoIG5jdXJzZXMgaGFzIHRoZSBhYmlsaXR5CisgICAgICAgdG8gIHRyYW5zbGF0ZSBtYW55IHRlcm1jYXBzIGZyb20gdGhlIFhFTklYLCBJQk0gYW5kIEFUJlQgZXh0ZW5zaW9uCisgICAgICAgc2V0cy4KKyAgICAgKiBBIEJTRC1saWtlIHRzZXQoMSkgdXRpbGl0eSBpcyBwcm92aWRlZC4KKyAgICAgKiBUaGUgbmN1cnNlcyBsaWJyYXJ5IGFuZCB1dGlsaXRpZXMgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYWQgdGVybWluZm8KKyAgICAgICBlbnRyaWVzICBmcm9tICAkSE9NRS8udGVybWluZm8gIGlmICBpdCBleGlzdHMsIGFuZCBjb21waWxlIHRvIHRoYXQKKyAgICAgICBkaXJlY3RvcnkgIGlmICBpdCAgZXhpc3RzICBhbmQgdGhlIHVzZXIgaGFzIG5vIHdyaXRlIGFjY2VzcyB0byB0aGUKKyAgICAgICBzeXN0ZW0gIGRpcmVjdG9yeS4gIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvIGhhdmUKKyAgICAgICBwZXJzb25hbCAgdGVybWluZm8gIGVudHJpZXMgd2l0aG91dCBnaXZpbmcgdXAgYWNjZXNzIHRvIHRoZSBzeXN0ZW0KKyAgICAgICB0ZXJtaW5mbyBkaXJlY3RvcnkuCisgICAgICogWW91ICBtYXkgIHNwZWNpZnkgIGEgIHBhdGggIG9mICBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGNvbXBpbGVkCisgICAgICAgZGVzY3JpcHRpb25zICB3aXRoICB0aGUgIGVudmlyb25tZW50ICB2YXJpYWJsZSBURVJNSU5GT19ESVJTICh0aGlzCisgICAgICAgZ2VuZXJhbGl6ZXMgIHRoZSAgZmVhdHVyZSAgcHJvdmlkZWQgYnkgVEVSTUlORk8gdW5kZXIgc3RvY2sgU3lzdGVtCisgICAgICAgVi4pCisgICAgICogSW4gIHRlcm1pbmZvICBzb3VyY2UgZmlsZXMsIHVzZSBjYXBhYmlsaXRpZXMgbWF5IHJlZmVyIG5vdCBqdXN0IHRvCisgICAgICAgb3RoZXIgZW50cmllcyBpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZSAoYXMgaW4gU3lzdGVtIFYpIGJ1dCBhbHNvIHRvCisgICAgICAgY29tcGlsZWQgIGVudHJpZXMgIGluICBlaXRoZXIgdGhlIHN5c3RlbSB0ZXJtaW5mbyBkaXJlY3Rvcnkgb3IgdGhlCisgICAgICAgdXNlcidzICRIT01FLy50ZXJtaW5mbyBkaXJlY3RvcnkuCisgICAgICogQSAgc2NyaXB0ICAoY2FwY29udmVydCkgIGlzICBwcm92aWRlZCB0byBoZWxwIEJTRCB1c2VycyB0cmFuc2l0aW9uCisgICAgICAgZnJvbSAgdGVybWNhcCB0byB0ZXJtaW5mby4gSXQgZ2F0aGVycyB0aGUgaW5mb3JtYXRpb24gaW4gYSBURVJNQ0FQCisgICAgICAgZW52aXJvbm1lbnQgIHZhcmlhYmxlICBhbmQvb3IgIGEgfi8udGVybWNhcCBsb2NhbCBlbnRyaWVzIGZpbGUgYW5kCisgICAgICAgY29udmVydHMgICBpdCAgIHRvICAgYW4gICBlcXVpdmFsZW50ICBsb2NhbCAgdGVybWluZm8gIHRyZWUgIHVuZGVyCisgICAgICAgJEhPTUUvLnRlcm1pbmZvLgorICAgICAqIEF1dG9tYXRpYyAgZmFsbGJhY2sgIHRvICB0aGUgIC9ldGMvdGVybWNhcCBmaWxlIGNhbiBiZSBjb21waWxlZCBpbgorICAgICAgIHdoZW4gIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBidWlsZCBhIHRlcm1pbmZvIHRyZWUuIFRoaXMgZmVhdHVyZSBpcworICAgICAgIG5laXRoZXIgIGZhc3QgIG5vciBjaGVhcCwgeW91IGRvbid0IHdhbnQgdG8gdXNlIGl0IHVubGVzcyB5b3UgaGF2ZQorICAgICAgIHRvLCBidXQgaXQncyB0aGVyZS4KKyAgICAgKiBUaGUgIHRhYmxlLW9mLWVudHJpZXMgIHV0aWxpdHkgIHRvZSBtYWtlcyBpdCBlYXN5IGZvciB1c2VycyB0byBzZWUKKyAgICAgICBleGFjdGx5IHdoYXQgdGVybWluYWwgdHlwZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLgorICAgICAqIFRoZSBsaWJyYXJ5IG1lZXRzIHRoZSBYU0kgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBtYWNybyBlbnRyeSBwb2ludAorICAgICAgIGhhdmUgIGEgIGNvcnJlc3BvbmRpbmcgIGZ1bmN0aW9uICB3aGljaCBtYXkgYmUgbGlua2VkIChhbmQgd2lsbCBiZQorICAgICAgIHByb3RvdHlwZS1jaGVja2VkKSAgaWYgIHRoZSAgbWFjcm8gIGRlZmluaXRpb24gIGlzICBkaXNhYmxlZCAgd2l0aAorICAgICAgICN1bmRlZi4KKyAgICAgKiBBbiAgSFRNTCAgIkludHJvZHVjdGlvbiAgdG8gIFByb2dyYW1taW5nICB3aXRoICBOQ1VSU0VTIiAgZG9jdW1lbnQKKyAgICAgICBwcm92aWRlcyAgYSAgbmFycmF0aXZlICBpbnRyb2R1Y3Rpb24gIHRvICB0aGUgIGN1cnNlcyAgcHJvZ3JhbW1pbmcKKyAgICAgICBpbnRlcmZhY2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgb2YgdGhlIFBhY2thZ2UKKworICAgTnVtZXJvdXMgYnVncyBwcmVzZW50IGluIGVhcmxpZXIgdmVyc2lvbnMgaGF2ZSBiZWVuIGZpeGVkOyB0aGUgbGlicmFyeQorICAgaXMgIGZhciAgbW9yZSAgcmVsaWFibGUgIHRoYW4gIGl0ICB1c2VkIHRvIGJlLiBCb3VuZHMgY2hlY2tpbmcgaW4gbWFueQorICAgYGRhbmdlcm91cycgIGVudHJ5IHBvaW50cyBoYXMgYmVlbiBpbXByb3ZlZC4gVGhlIGNvZGUgaXMgbm93IHR5cGUtc2FmZQorICAgYWNjb3JkaW5nICB0byBnY2MgLVdhbGwuIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNoZWNrZWQgZm9yIG1hbGxvYyBsZWFrcworICAgYW5kIGFyZW5hIGNvcnJ1cHRpb24gYnkgdGhlIFB1cmlmeSBtZW1vcnktYWxsb2NhdGlvbiB0ZXN0ZXIuCisKKyAgIFRoZSAgbmN1cnNlcyAgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMKKyAgIGluY2x1ZGluZyAodmVyc2lvbnMgc3RhcnRpbmcgd2l0aCB0aG9zZSBub3RlZCk6CisKKyAgIGNkaworICAgICAgICAgIEN1cnNlcyBEZXZlbG9wbWVudCBLaXQKKyAgICAgICAgICBbNF1odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLworICAgICAgICAgIFs1XWh0dHA6Ly93d3cudmV4dXMuY2EvcHJvZHVjdHMvQ0RLLworCisgICBkZWQKKyAgICAgICAgICBkaXJlY3RvcnktZWRpdG9yCisgICAgICAgICAgWzZdaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RlZC8KKworICAgZGlhbG9nCisgICAgICAgICAgdGhlICB1bmRlcmx5aW5nICBhcHBsaWNhdGlvbiB1c2VkIGluIFNsYWNrd2FyZSdzIHNldHVwLCBhbmQgdGhlCisgICAgICAgICAgYmFzaXMgZm9yIHNpbWlsYXIgYXBwbGljYXRpb25zIG9uIEdOVS9MaW51eC4KKyAgICAgICAgICBbN11odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlhbG9nLworCisgICBseW54CisgICAgICAgICAgdGhlIGNoYXJhY3Rlci1zY3JlZW4gV1dXIGJyb3dzZXIKKyAgICAgICAgICBbOF1odHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvCisKKyAgIE1pZG5pZ2h0IENvbW1hbmRlcgorICAgICAgICAgIGZpbGUgbWFuYWdlcgorICAgICAgICAgIFs5XWh0dHA6Ly93d3cuaWJpYmxpby5vcmcvbWMvCisKKyAgIG11dHQKKyAgICAgICAgICBtYWlsIHV0aWxpdHkKKyAgICAgICAgICBbMTBdaHR0cDovL3d3dy5tdXR0Lm9yZy8KKworICAgbmNmdHAKKyAgICAgICAgICBmaWxlLXRyYW5zZmVyIHV0aWxpdHkKKyAgICAgICAgICBbMTFdaHR0cDovL3d3dy5uY2Z0cC5jb20vCisKKyAgIG52aQorICAgICAgICAgIE5ldyB2aSB2ZXJzaW9ucyAxLjUwIGFyZSBhYmxlIHRvIHVzZSBuY3Vyc2VzIHZlcnNpb25zIDEuOS43IGFuZAorICAgICAgICAgIGxhdGVyLgorICAgICAgICAgIFsxMl1odHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvCisKKyAgIHBpbmZvCisgICAgICAgICAgTHlueC1saWtlIGluZm8gYnJvd3Nlci4KKyAgICAgICAgICBbMTNdaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9waW5mby8KKworICAgdGluCisgICAgICAgICAgbmV3c3JlYWRlciwgc3VwcG9ydGluZyBjb2xvciwgTUlNRSBbMTRdaHR0cDovL3d3dy50aW4ub3JnLworCisgICBhcyB3ZWxsIGFzIHNvbWUgdGhhdCB1c2UgbmN1cnNlcyBmb3IgdGhlIHRlcm1pbmZvIHN1cHBvcnQgYWxvbmU6CisKKyAgIG1pbmljb20KKyAgICAgICAgICB0ZXJtaW5hbCBlbXVsYXRvcgorICAgICAgICAgIFsxNV1odHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS8KKworICAgdmlsZQorICAgICAgICAgIHZpLWxpa2UtZW1hY3MKKyAgICAgICAgICBbMTZdaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3ZpbGUvCisKKyAgIFRoZSAgbmN1cnNlcyAgZGlzdHJpYnV0aW9uICBpbmNsdWRlcyAgYSAgc2VsZWN0aW9uICBvZiAgdGVzdCAgcHJvZ3JhbXMKKyAgIChpbmNsdWRpbmcgYSBmZXcgZ2FtZXMpLgorCitXaG8ncyBXaG8gYW5kIFdoYXQncyBXaGF0CisKKyAgIFpleWQgIEJlbi1IYWxpbSBzdGFydGVkIGl0IGZyb20gYSBwcmV2aW91cyBwYWNrYWdlIHBjdXJzZXMsIHdyaXR0ZW4gYnkKKyAgIFBhdmVsICBDdXJ0aXMuICBFcmljICBTLiBSYXltb25kIGNvbnRpbnVlZCBkZXZlbG9wbWVudC4gSvxyZ2VuIFBmZWlmZXIKKyAgIHdyb3RlICBtb3N0IG9mIHRoZSBmb3JtIGFuZCBtZW51IGxpYnJhcmllcy4gT25nb2luZyB3b3JrIGlzIGJlaW5nIGRvbmUKKyAgIGJ5ICBbMTddVGhvbWFzICBEaWNrZXkuICBUaG9tYXMgIERpY2tleSBhY3RzIGFzIHRoZSBtYWludGFpbmVyIGZvciB0aGUKKyAgIEZyZWUgIFNvZnR3YXJlICBGb3VuZGF0aW9uLCAgd2hpY2ggIGhvbGRzICB0aGUgIGNvcHlyaWdodCAgb24gbmN1cnNlcy4KKyAgIENvbnRhY3QgdGhlIGN1cnJlbnQgbWFpbnRhaW5lcnMgYXQgWzE4XWJ1Zy1uY3Vyc2VzQGdudS5vcmcuCisKKyAgIFRvICAgam9pbiAgIHRoZSAgIG5jdXJzZXMgICBtYWlsaW5nICAgbGlzdCwgICBwbGVhc2UgIHdyaXRlICBlbWFpbCAgdG8KKyAgIGJ1Zy1uY3Vyc2VzLXJlcXVlc3RAZ251Lm9yZyBjb250YWluaW5nIHRoZSBsaW5lOgorICAgICAgICAgICAgIHN1YnNjcmliZSA8bmFtZT5APGhvc3QuZG9tYWluPgorCisgICBUaGlzIGxpc3QgaXMgb3BlbiB0byBhbnlvbmUgaW50ZXJlc3RlZCBpbiBoZWxwaW5nIHdpdGggdGhlIGRldmVsb3BtZW50CisgICBhbmQgdGVzdGluZyBvZiB0aGlzIHBhY2thZ2UuCisKKyAgIEJldGEgIHZlcnNpb25zICBvZiBuY3Vyc2VzIGFuZCBwYXRjaGVzIHRvIHRoZSBjdXJyZW50IHJlbGVhc2UgYXJlIG1hZGUKKyAgIGF2YWlsYWJsZSBhdCBbMTldZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8gLgorCitGdXR1cmUgUGxhbnMKKworICAgICAqIEV4dGVuZGVkLWxldmVsICAgWFBHNCAgIGNvbmZvcm1hbmNlLCAgIHdpdGggICBpbnRlcm5hdGlvbmFsaXphdGlvbgorICAgICAgIHN1cHBvcnQuCisgICAgICogUG9ydHMgdG8gbW9yZSBzeXN0ZW1zLCBpbmNsdWRpbmcgRE9TIGFuZCBXaW5kb3dzLgorCisgICBXZSAgbmVlZCAgcGVvcGxlIHRvIGhlbHAgd2l0aCB0aGVzZSBwcm9qZWN0cy4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluCisgICB3b3JraW5nIG9uIHRoZW0sIHBsZWFzZSBqb2luIHRoZSBuY3Vyc2VzIGxpc3QuCisKK090aGVyIFJlbGF0ZWQgUmVzb3VyY2VzCisKKyAgIFRoZSAgZGlzdHJpYnV0aW9uICBwcm92aWRlcyAgYSAgbmV3ZXIgIHZlcnNpb24gIG9mIHRoZSB0ZXJtaW5mby1mb3JtYXQKKyAgIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGZpbGUgb25jZSBtYWludGFpbmVkIGJ5IFsyMF1FcmljIFJheW1vbmQgLiBVbmxpa2UKKyAgIHRoZSAgb2xkZXIgIHZlcnNpb24sIHRoZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBkYXRhIGFyZSBwcm92aWRlZCBpbiB0aGUKKyAgIHNhbWUgIGZpbGUsICBhbmQgcHJvdmlkZXMgc2V2ZXJhbCB1c2VyLWRlZmluYWJsZSBleHRlbnNpb25zIGJleW9uZCB0aGUKKyAgIFgvT3BlbiBzcGVjaWZpY2F0aW9uLgorCisgICBZb3UgIGNhbiAgZmluZCAgbG90cyAgb2YgIGluZm9ybWF0aW9uICBvbiAgdGVybWluYWwtcmVsYXRlZCB0b3BpY3Mgbm90CisgICBjb3ZlcmVkIGluIHRoZSB0ZXJtaW5mbyBmaWxlIGF0IFsyMV1SaWNoYXJkIFNodWZvcmQncyBhcmNoaXZlIC4KKworUmVmZXJlbmNlcworCisgICAxLiBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy8KKyAgIDIuIGZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvCisgICAzLiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0veHRlcm0ubG9nLmh0bWwjeHRlcm1fMjMwCisgICA0LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLworICAgNS4gaHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvCisgICA2LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGVkLworICAgNy4gaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpYWxvZy8KKyAgIDguIGh0dHA6Ly9seW54LmlzYy5vcmcvcmVsZWFzZS8KKyAgIDkuIGh0dHA6Ly93d3cuaWJpYmxpby5vcmcvbWMvCisgIDEwLiBodHRwOi8vd3d3Lm11dHQub3JnLworICAxMS4gaHR0cDovL3d3dy5uY2Z0cC5jb20vCisgIDEyLiBodHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvCisgIDEzLiBodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL3BpbmZvLworICAxNC4gaHR0cDovL3d3dy50aW4ub3JnLworICAxNS4gaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL21pbmljb20vCisgIDE2LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvdmlsZS8KKyAgMTcuIG1haWx0bzpkaWNrZXlAaW52aXNpYmxlLWlzbGFuZC5uZXQKKyAgMTguIG1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnCisgIDE5LiBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLworICAyMC4gaHR0cDovL3d3dy5jYXRiLm9yZy9+ZXNyL3Rlcm1pbmZvLworICAyMS4gaHR0cDovL3d3dy5jcy51dGsuZWR1L35zaHVmb3JkL3Rlcm1pbmFsX2luZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTA0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9BVVRIT1JTCkBAIC0wLDAgKzEsMzggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogQVVUSE9SUyx2IDEuMiAyMDA2LzEwLzI4IDIxOjQ0OjUyIHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlc2UgYXJlIHRoZSBwcmluY2lwYWwgYXV0aG9ycy9jb250cmlidXRvcnMgb2YgbmN1cnNlcyBzaW5jZSAxLjkuOWUsCitpbiBkZWNyZWFzaW5nIG9yZGVyIG9mIHRoZWlyIGNvbnRyaWJ1dGlvbjoKKworVEQJVGhvbWFzIEUuIERpY2tleQorSlBGCUp1ZXJnZW4gUGZlaWZlciAKK0VTUglFcmljIFMgUmF5bW9uZAorQVZMCUFsZXhhbmRlciBWIEx1a3lhbm92CitQQglQaGlsaXBwZSBCbGFpbgorU1YJU3ZlbiBWZXJkb29sYWVnZQpkaWZmIC0tZ2l0IGEvQWRhOTUvTWFrZWZpbGUuaW4gYi9BZGE5NS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTc0M2NmCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CisjCisjICBWZXJzaW9uIENvbnRyb2wKKyMgICRSZXZpc2lvbjogMS4xNSAkCisjCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK1NVQkRJUlMgICAgICAgICA9IEBBREFfU1VCRElSU0AKKworQ0ZfTUZMQUdTIAk9IEBjZl9jdl9tYWtlZmxhZ3NACitAU0VUX01BS0VACisKK2FsbCBcCitsaWJzIFwKK3NvdXJjZXMgXAoraW5zdGFsbCBcCitpbnN0YWxsLmxpYnMgXAordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5saWJzIDo6CisJZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gXAorCQkoY2QgJCRkIDsgJChNQUtFKSAkKENGX01GTEFHUykgJEApIDtcCisJZG9uZQorCitjbGVhbiBcCittb3N0bHljbGVhbiA6OgorCWZvciBkIGluICQoU1VCRElSUyk7IGRvIFwKKwkJKGNkICQkZCA7ICQoTUFLRSkgJChDRl9NRkxBR1MpICRAKSA7XAorCWRvbmUKKworZGlzdGNsZWFuIFwKK3JlYWxjbGVhbiA6OgorCWZvciBkIGluICQoU1VCRElSUyk7IGRvIFwKKwkJKGNkICQkZCA7ICQoTUFLRSkgJChDRl9NRkxBR1MpICRAKSA7XAorCWRvbmUKKwlybSAtZiBNYWtlZmlsZQorCitpbnN0YWxsLmRhdGEgOgorCUAKZGlmZiAtLWdpdCBhL0FkYTk1L1JFQURNRSBiL0FkYTk1L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTg0MjU5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvUkVBRE1FCkBAIC0wLDAgKzEsMzMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorCitUaGUgZG9jdW1lbnRhdGlvbiBpcyBwcm92aWRlZCBpbiBIVE1MIGZvcm1hdCBpbiB0aGUgLi9odG1sIAorc3ViZGlyZWN0b3J5LiBUaGUgbWFpbiBkb2N1bWVudCBpcyBuYW1lZCBpbmRleC5odG1sCisKZGlmZiAtLWdpdCBhL0FkYTk1L1RPRE8gYi9BZGE5NS9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzhhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9UT0RPCkBAIC0wLDAgKzEsNTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0xOTk5LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogVE9ETyx2IDEuNSAyMDA2LzA0LzIyIDIyOjIzOjIxIHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgSW50ZW5zaXZlIHRlc3RpbmcKKyAgICBQZXJoYXBzIHRoZSBkZWxpdmVyeSBvZiB0aGUgQmV0YSB3aWxsIGhlbHAgYSBiaXQuCisKKy0tICBEb2N1bWVudGF0aW9uCisgICAgTGlrZSBtb3N0IFdFQiBwYWdlczogdW5kZXIgY29udGludW91cyBjb25zdHJ1Y3Rpb24KKworLS0gIFN0eWxlIGNsZWFudXAKKyAgICAJCistLSAgQWx0ZXJuYXRlIGZ1bmN0aW9ucyBmb3IgcHJvY2VkdXJlcyB3aXRoIG91dCBwYXJhbXMKKyAgICBDb21mb3J0IHB1cnBvc2UKKworLS0gIFNhbXBsZSBwcm9ncmFtCisgICAgVW5kZXIgY29udGludW91cyBjb25zdHJ1Y3Rpb24gKGFuZCBpdCdzIG5vdCBhIFdFQiBwYWdlISEhKQorCistLSAgTWFrZSB0aGUgYmluZGluZyBvYmplY3RzIGEgc2hhcmVkIGxpYnJhcnkKKyAgICBUaGV5IGFyZSByYXRoZXIgbGFyZ2UsIHNvIGl0IHdvdWxkIG1ha2Ugc2Vuc2UsIG90aGVyd2lzZSBBZGE5NQorICAgIHdvdWxkIGxvb2sgdG9vIGxhcmdlLCBhbHRob3VnaCB0aGUgZ2VuZXJhdGVkIGNvZGUgaXMgYXMgY29tcGFjdAorICAgIGFzIEMgb3IgQysrLiBJJ2xsIHdhaXQgYSBiaXQgdW50aWwgdGhlIEdOQVQgcGVvcGxlIHByb3ZpZGUgc29tZQorICAgIGJldHRlciBzdXBwb3J0IHRvIGNvbnN0cnVjdCBzaGFyZWQgbGlicmFyaWVzLgorCistLSAgVGhpbmsgYWJvdXQgbW9yZSBpbmxpbmluZworCistLSAgQ2hlY2sgZm9yIG1lbW9yeSBsZWFrcy4KKyAgICBPaCBJIHdvdWxkIGxpa2UgaXQgc28gbXVjaCBpZiB0aGUgR05BVCBndXlzIHdvdWxkIHB1dCBhbiBvcHRpb25hbAorICAgIEdDIGludG8gdGhlaXIgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL01ha2VmaWxlLmluIGIvQWRhOTUvZ2VuL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTNiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0NzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorIworIyAgJElkOiBNYWtlZmlsZS5pbix2IDEuNjEgMjAwOC8xMC8wNCAyMjo1ODozMSB0b20gRXhwICQKKyMKKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorVEhJUwkJPSBNYWtlZmlsZQorCit4CQk9IEBQUk9HX0VYVEAKKwordG9wX3NyY2Rpcgk9IEB0b3Bfc3JjZGlyQAorREVTVERJUgkJPSBAREVTVERJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorCitBREFfSU5DTFVERQk9ICQoREVTVERJUilAQURBX0lOQ0xVREVACitBREFfT0JKRUNUUwk9ICQoREVTVERJUilAQURBX09CSkVDVFNACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX1BST0cJPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKKworQVdLCQk9IEBBV0tACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitIT1NUX0NDCQk9IEBCVUlMRF9DQ0AKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorCitDUFBGTEFHUwk9IEBBQ1BQRkxBR1NAIFwKKwkJICAtREhBVkVfQ09ORklHX0ggLUkkKHNyY2RpcikKKworQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENGTEFHUykKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworUkVMX1ZFUlNJT04JPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKK0xPQ0FMX0xJQkRJUgk9IEB0b3BfYnVpbGRkaXJAL2xpYgorCitMSU5LCQk9ICQoSE9TVF9DQykKK0xEX0ZMQUdTCT0gQExEX01PREVMQCAkKExPQ0FMX0xJQlMpIEBMREZMQUdTQCBATElCU0AgQExPQ0FMX0xERkxBR1MyQCAkKExERkxBR1MpIEBUSU5GT19BUkdTMkAKKworUkFOTElCCQk9IEBSQU5MSUJACisKK000CQk9IG00CitNNEZMQUdTCQk9IC1ETkNVUlNFU19FWFRfRlVOQ1M9QE5DVVJTRVNfRVhUX0ZVTkNTQAorCitBREFDVVJTRVNfQ09ORklHID0gYWRhY3Vyc2VzLWNvbmZpZworCitXUkFQUEVSCQk9IHNoICQodG9wX3NyY2RpcikvbWlzYy9zaGxpYgorR0VORVJBVEUJPSAuL2dlbiR4ICdAREZUX0FSR19TVUZGSVhAJworREVMX0FEQU1PREUJPSBzZWQgLWUgJy9eXC1cLVwgXCBcLVwqXC1cIGFkYVwgXC1cKlwtLiovZCcKKworR05BVEhUTUwJPSBgdHlwZSAtcCBnbmF0aHRtbCB8fCB0eXBlIC1wIGduYXRodG1sLnBsYAorR05BVEhQICAgICAgICAgID0gd3d3LmduYXQuY29tCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitBTElCICAgICAgICAgICAgPSBAY2ZfYWRhX3BhY2thZ2VACitBQkFTRQkJPSAkKEFMSUIpLWN1cnNlcworCitBREFfU1JDRElSCT0gLi4vc3JjCisKK0dFTl9GSUxFUzAgICAgICA9IEJhc2VfRGVmcworCitHRU5fRklMRVMxICAgICAgPSBBQ1NfTWFwICAgICAgICAgICAgICAgICAgICAgIAkJXAorCQkgIEFDX1JlcCAgICAgICAgICAgICAgICAgICAgICAgCQlcCisJCSAgQmFzZV9EZWZzCQkJICAgICAgICBcCisJCSAgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXRfUmVwICAJCVwKKwkJICBDb2xvcl9EZWZzICAgICAgICAgICAgICAgICAgIAkJXAorCQkgIEtleV9EZWZpbml0aW9ucyAgICAgICAgICAgICAgCQlcCisJCSAgTGlua2VyX09wdGlvbnMgICAgICAgICAgICAgICAJCVwKKwkJICBPbGRfS2V5cyAgICAgICAgICAgICAgICAgICAgIAkJXAorCQkgIFB1YmxpY19WYXJpYWJsZXMgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIFRyYWNlX0RlZnMJCQkJXAorCQkgIFZlcnNpb25fSW5mbwkJCQlcCisJCSAgV2luZG93X09mZnNldHMKKworR0VOX0ZJTEVTMiAgICAgID0gTWVudV9PcHRfUmVwICAgICAgICAJCSAgICAJXAorCQkgIE1lbnVfQmFzZV9EZWZzICAgICAgICAgICAgICAgCQlcCisJCSAgTWVudV9MaW5rZXJfT3B0aW9ucyAgICAgICAgICAJCVwKKwkJICBJdGVtX1JlcAorCitHRU5fRklMRVMzICAgICAgPSBGb3JtX09wdF9SZXAgICAgICAgICAgICAgICAgIAkJXAorCQkgIEZvcm1fQmFzZV9EZWZzICAgICAgICAgICAgICAgCQlcCisJCSAgRm9ybV9MaW5rZXJfT3B0aW9ucyAgICAgICAgICAJCVwKKwkJICBGaWVsZF9SZXAKKworR0VOX0ZJTEVTNCAgICAgID0gTW91c2VfQmFzZV9EZWZzICAgICAgICAgICAgICAJCVwKKwkJICBNb3VzZV9FdmVudF9SZXAJCQlcCisJCSAgTW91c2VfRXZlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgUGFuZWxfTGlua2VyX09wdGlvbnMKKworR0VOX0ZJTEVTNQk9IENodHlwZV9EZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIEV0aV9EZWZzCisKK0dFTl9UQVJHRVRTICAgICA9ICQoQURBX1NSQ0RJUikvJChBQkFTRSkuYWRzICAgICAgICAgCQkJXAorCQkgICQoQURBX1NSQ0RJUikvJChBQkFTRSkuYWRiICAgICAgICAgCQkJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWF1eC5hZHMgICAJCQlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktdHJhY2UuYWRzICAgCQkJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLW1lbnVzLmFkcyAgIAkJCVwKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS1mb3Jtcy5hZHMgICAJCQlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktbW91c2UuYWRzIAkJCVwKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS1wYW5lbHMuYWRzCQkJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcwlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzCVwKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFkcwkJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRzCisKK0dFTl9TUkMJCT0gJChzcmNkaXIpLyQoQUJBU0UpLmFkcy5tNAkJCQlcCisJCSAgJChzcmNkaXIpLyQoQUJBU0UpLmFkYi5tNAkJCQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1hdXguYWRzLm00IAkgIAkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktdHJhY2UuYWRzLm00IAkgIAkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktbWVudXMuYWRzLm00IAkgIAkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMuYWRzLm00ICAgCQkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktbW91c2UuYWRzLm00CQkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLmFkcy5tNAkJCVwKKwkgICAgICAgICAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNAlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzLm00CVwKKwkgICAgICAgICAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFkcy5tNAkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNAlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLmFkcy5tNAorCisKK2FsbCBcCitsaWJzIDoJJChHRU5fVEFSR0VUUykKKwlAZWNobyBtYWRlICRACisKK3NvdXJjZXM6CisKKyQoQURBX0lOQ0xVREUpIFwKKyQoQURBX09CSkVDVFMpIDoKKwlzaCAkKHRvcF9zcmNkaXIpL21rZGlycy5zaCAkQAorCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyA6OiAkKEFEQV9JTkNMVURFKQorCUBlY2hvIGluc3RhbGxpbmcgcGFja2FnZSAkKEFMSUIpIGluICQoQURBX0lOQ0xVREUpCisJQCQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQikqLmFkPycgJChBREFfU1JDRElSKSAkKEFEQV9JTkNMVURFKQorCUAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpWy0uXSouYWQ/JyAkKEFEQV9TUkNESVIpICQoQURBX0lOQ0xVREUpCisJQHRlc3QgJChzcmNkaXIpICE9IC4vICYmICQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQikqLmFkPycgJChzcmNkaXIpLy4uL3NyYyAkKEFEQV9JTkNMVURFKQorCUB0ZXN0ICQoc3JjZGlyKSAhPSAuLyAmJiAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpWy0uXSouYWQ/JyAkKHNyY2RpcikvLi4vc3JjICQoQURBX0lOQ0xVREUpCisKK2luc3RhbGwgXAoraW5zdGFsbC5saWJzIDo6ICQoQURBX09CSkVDVFMpCisJQGVjaG8gaW5zdGFsbGluZyBwYWNrYWdlICQoQUxJQikgaW4gJChBREFfT0JKRUNUUykKKwlALWNobW9kIGEtd3ggJChBREFfU1JDRElSKS8qLmFsaQorCUAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpKi5hbGknICQoQURBX1NSQ0RJUikgJChBREFfT0JKRUNUUykKKwlAJCh0b3Bfc3JjZGlyKS90YXItY29weS5zaCAnJChBTElCKVstLl0qLmFsaScgJChBREFfU1JDRElSKSAkKEFEQV9PQkpFQ1RTKQorCUAtY2htb2QgdSt4ICQoQURBX1NSQ0RJUikvKi5hbGkKKworaW5zdGFsbCBcCitpbnN0YWxsLmxpYnMgOjogJChERVNURElSKSQoYmluZGlyKSBhZGFjdXJzZXMtY29uZmlnCisJJChJTlNUQUxMX1BST0cpIGFkYWN1cnNlcy1jb25maWcgJChERVNURElSKSQoYmluZGlyKS8kKEFEQUNVUlNFU19DT05GSUcpCisKK3VuaW5zdGFsbCBcCit1bmluc3RhbGwubGlicyA6OgorCUBlY2hvIHJlbW92aW5nIHBhY2thZ2UgJChBTElCKSBmcm9tICQoQURBX0lOQ0xVREUpCisJLUBjZCAkKEFEQV9JTkNMVURFKSAmJiBybSAtZiAkKEFMSUIpWy0uXSoKKwordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5saWJzIDo6CisJQGVjaG8gcmVtb3ZpbmcgcGFja2FnZSAkKEFMSUIpIGZyb20gJChBREFfT0JKRUNUUykKKwktQGNkICQoQURBX09CSkVDVFMpICYmIHJtIC1mICQoQUxJQilbLS5dKgorCit1bmluc3RhbGwgXAordW5pbnN0YWxsLmxpYnMgOjoKKwktcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEFEQUNVUlNFU19DT05GSUcpCisKK2dlbiR4OglnZW4ubworCUBFQ0hPX0xJTktAICQoTElOSykgJChDRkxBR1NfTk9STUFMKSBnZW4ubyAkKExEX0ZMQUdTKSAtbyAkQAorCitnZW4ubzoJJChzcmNkaXIpL2dlbi5jCisJJChIT1NUX0NDKSAkKENGTEFHU19OT1JNQUwpIC1jIC1vICRAICQoc3JjZGlyKS9nZW4uYworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0X1JlcDogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEEiID4kQAorCitCYXNlX0RlZnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBCIiA+JEAKKworQ29sb3JfRGVmczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEMiID4kQAorCitXaW5kb3dfT2Zmc2V0czogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEQiID4kQAorCitLZXlfRGVmaW5pdGlvbnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBLIiA+JEAKKworTGlua2VyX09wdGlvbnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBMIiA+JEAKKworQUNTX01hcDogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIE0iID4kQAorCitPbGRfS2V5czogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIE8iID4kQAorCitQdWJsaWNfVmFyaWFibGVzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgUCIgPiRACisKK0FDX1JlcDogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIFIiID4kQAorCitWZXJzaW9uX0luZm86IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBWIiA+JEAKKworVHJhY2VfRGVmczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIFQiID4kQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK01lbnVfT3B0X1JlcDogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBNIFIiID4kQAorCitNZW51X0Jhc2VfRGVmczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBNIEIiID4kQAorCitNZW51X0xpbmtlcl9PcHRpb25zOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIE0gTCIgPiRACisKK0l0ZW1fUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIE0gSSIgPiRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworRm9ybV9PcHRfUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEYgUiIgPiRACisKK0Zvcm1fQmFzZV9EZWZzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEYgQiIgPiRACisKK0Zvcm1fTGlua2VyX09wdGlvbnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgRiBMIiA+JEAKKworRmllbGRfUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEYgSSIgPiRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTW91c2VfQmFzZV9EZWZzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIFAgQiIgPiRACisKK01vdXNlX0V2ZW50X1JlcDogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBQIE0iID4kQAorCitNb3VzZV9FdmVudHM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBFIiA+JEAKKworUGFuZWxfTGlua2VyX09wdGlvbnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgUCBMIiA+JEAKKworQ2h0eXBlX0RlZjogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBFIEMiID4kQAorCitFdGlfRGVmczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBFIEUiID4kQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoQURBX1NSQ0RJUikvJChBQkFTRSkuYWRzOiAJJChzcmNkaXIpLyQoQUJBU0UpLmFkcy5tNCBcCisJCQkJJChHRU5fRklMRVMxKSAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLmFkYjogCSQoc3JjZGlyKS8kKEFCQVNFKS5hZGIubTQgXAorCQkJCSQoR0VOX0ZJTEVTMSkgJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS5hZGIubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1hdXguYWRzOiAkKHNyY2RpcikvJChBQkFTRSktYXV4LmFkcy5tNCBcCisJCQkJJChHRU5fRklMRVM1KSAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLWF1eC5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS10cmFjZS5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZHMubTQgXAorCQkJCSQoR0VOX0ZJTEVTNSkgJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1tZW51cy5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy5hZHMubTQgXAorCQkJCSAgJChHRU5fRklMRVMyKSAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLmFkczogJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLmFkcy5tNCBcCisJCQkJICAkKEdFTl9GSUxFUzMpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSktbW91c2UuYWRzOiAkKHNyY2RpcikvJChBQkFTRSktbW91c2UuYWRzLm00IFwKKwkJCQkgICQoR0VOX0ZJTEVTNCkgJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS1tb3VzZS5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1wYW5lbHMuYWRzOiAkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLmFkcy5tNCBcCisJCQkJICAgJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRzOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMubTQgXAorCQkkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkczogXAorCQkkKHNyY2RpcikvJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzLm00IFwKKwkJJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHM6IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcy5tNCBcCisJCSQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRzOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZHMubTQgXAorCQkkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHM6IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMubTQgXAorCQkkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLmFkczogXAorCQkkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZHMubTQgXAorCQkkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKK2luc3RhbGwucHJvZ3MgOjoKKwordGFnczoKKwljdGFncyAqLltjaF0KKworQE1BS0VfVVBQRVJfVEFHU0BUQUdTOgorQE1BS0VfVVBQRVJfVEFHU0AJZXRhZ3MgKi5bY2hdCisKK21vc3RseWNsZWFuIDo6CisJLXJtIC1mIGEub3V0IGNvcmUgZ2VuJHggKi5vCisJLXJtIC1mICQoR0VOX0ZJTEVTMSkKKwktcm0gLWYgJChHRU5fRklMRVMyKQorCS1ybSAtZiAkKEdFTl9GSUxFUzMpCisJLXJtIC1mICQoR0VOX0ZJTEVTNCkKKwktcm0gLWYgJChHRU5fRklMRVM1KQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCS1ybSAtZiAkKEdFTl9UQVJHRVRTKSBpbnN0YWIudG1wICouYWRbYnNdICouaHRtbCAqLmFsaSAqLnRtcAorCitkaXN0Y2xlYW4gOjogY2xlYW4KKwktcm0gLWYgYWRhY3Vyc2VzLWNvbmZpZworCS1ybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKK0hUTUxfRElSID0gLi4vLi4vZG9jL2h0bWwvYWRhCisKK2luc3RhYi50bXAgOiB0YWJsZS5tNCAkKEdFTl9TUkMpCisJQHJtIC1mICRACisJQGZvciBmIGluICQoR0VOX1NSQykgOyBkbyBcCisJICAkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz10YWJsZS5tNCAkJGYgfCAkKERFTF9BREFNT0RFKSA+PiAkQCA7XAorCWRvbmU7CisKKyQoSFRNTF9ESVIpL3RhYmxlLmh0bWwgOiBpbnN0YWIudG1wCisJQC10b3VjaCAkQAorCUAtY2htb2QgK3cgJEAKKwlAZWNobyAnPCFET0NUWVBFIEhUTUwnICA+ICRACisJQGVjaG8gJ1BVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+JyA+PiAkQAorCUBlY2hvICc8SFRNTD4nID4+ICRACisJQGVjaG8gJzxIRUFEPicgPj4gJEAKKwlAZWNobyAnPFRJVExFPkNvcnJlc3BvbmRlbmNlIGJldHdlZW4gbmN1cnNlcyBDIGFuZCBBZGEgZnVuY3Rpb25zPC9USVRMRT4nID4+JEAKKwlAZWNobyAnPC9IRUFEPicgPj4gJEAKKwlAZWNobyAnPEJPRFk+JyA+PiAkQAorCUBlY2hvICc8SDE+Q29ycmVzcG9uZGVuY2UgYmV0d2VlbiBuY3Vyc2VzIEMgYW5kIEFkYSBmdW5jdGlvbnM8L0gxPicgPj4kQAorCUBlY2hvICc8SDI+U29ydGVkIGJ5IEMgZnVuY3Rpb24gbmFtZTwvSDI+JyA+PiRACisJQGVjaG8gJzxUQUJMRSBBTElHTj1DRU5URVIgQk9SREVSPicgPj4kQAorCUBlY2hvICc8VFIgQUxJR049TEVGVD4nID4+JEAKKwlAZWNobyAnPFRIPkMgbmFtZTwvVEg+PFRIPkFkYSBuYW1lPC9USD48VEg+bWFuIHBhZ2U8L1RIPjwvVFI+JyA+PiRACisJQHNvcnQgPCBpbnN0YWIudG1wID4+ICRACisJQGVjaG8gJzwvVEFCTEU+PC9CT0RZPjwvSFRNTD4nID4+JEAKKwlAcm0gLWYgaW5zdGFiLnRtcAorCithZGFodG1sOgorCUBmaW5kICQoSFRNTF9ESVIpIC10eXBlIGYgLWV4ZWMgcm0gLWYge30gXDsKKwlAbWtkaXIgLXAgJChIVE1MX0RJUikKKwljcCAtcCAuLi9zcmMvKi5hZFtzYl0gLiAmJiBjaG1vZCArdyAqLmFkW3NiXQorCWxuIC1zZiAuLi9zcmMvKi5hbGkgLgorCUBlY2hvICJGaWx0ZXJpbmcgZ2VuZXJhdGVkIGZpbGVzIgorCUBmb3IgZiBpbiAkKEdFTl9TUkMpOyBkbyBcCisJICAgaD1gYmFzZW5hbWUgJCRmYCA7XAorCSAgIGc9YGJhc2VuYW1lICQkZiAuYWRzLm00YCA7XAorCSAgIGlmIHRlc3QgIiQkZyIgIT0gIiQkaCIgOyB0aGVuIFwKKwkgICAgICAkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz1odG1sLm00ICQkZiB8ICQoREVMX0FEQU1PREUpID4gJCRnLmFkcyA7XAorCSAgICAgIGVjaG8gIi4uLiAkJGcuYWRzIiA7XAorCSAgIGZpIFwKKwlkb25lCisJQC1ybSAtZiAkKEhUTUxfRElSKS8kKEFMSUIpKi5odG0qCisJJChHTkFUSFRNTCkgLWQgLWYgJChBTElCKSouYWRzCisJZm9yIGYgaW4gaHRtbC8kKEFMSUIpKi5odG0qOyBkbyBcCisJICAgYT1gYmFzZW5hbWUgJCRmYCA7IFwKKwkgICBzZWQgLWUgJ3MvWW91IG1heSBhbHNvLipib2R5LiovLycgPCQkZiB8XAorCSAgIHNlZCAtZSAncyVHTkFUJTxBIEhSRUY9Imh0dHA6Ly8kKEdOQVRIUCkiPkdOQVQ8L0E+JWcnIHxcCisJICAgc2VkIC1lICdzJSZsdDtBIEhSRUYlPEEgSFJFRiVnJyB8XAorCSAgIHNlZCAtZSAncyUiJmd0OyUiPiVnJyB8XAorCSAgIHNlZCAtZSAncy8zWC8zeC9nJyB8XAorCSAgIHNlZCAtZSAncy8kJFwoW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h6MDEyMzQ1Njc4OV9dKjouKlwpXCQkL0BcMUAvJyB8XAorCSAgIHNlZCAtZSAncyUmbHQ7L0EmZ3Q7JTwvQT4lZycgPiAkJGEudG1wIDtcCisJICAgbXYgJCRhLnRtcCAkJGYgO1wKKwlkb25lCisJQHJtIC1mICouYWRbc2JdICouYWxpICoudG1wCisJQGZvciBmIGluIGZ1bmNzLmh0bSBtYWluLmh0bSA7IGRvIFwKKwkgIHNlZCAtZSAiXCU8QSBIUkVGPWZ1bmNzLyAuaHRtPlxbIFxdPC9BPiVkIiA8IGh0bWwvJCRmID4gJCRmIDtcCisJICBtdiAkJGYgaHRtbC8kJGYgO1wKKwlkb25lCisJQHJtIC1mICJodG1sL2Z1bmNzLyAuaHRtIgorCUBjcCAtcGRyZiBodG1sLyogJChIVE1MX0RJUikvCisJQHJtIC1yZiBodG1sCisKK2h0bWwgOiBhZGFodG1sICQoSFRNTF9ESVIpL3RhYmxlLmh0bWwKKwlAZWNobyBtYWRlICRACisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnLmluIGIvQWRhOTUvZ2VuL2FkYWN1cnNlcy1jb25maWcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4ZDg1YgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnLmluCkBAIC0wLDAgKzEsMzUgQEAKKyMhIC9iaW4vc2gKKyMgJElkOiBhZGFjdXJzZXMtY29uZmlnLmluLHYgMS4yIDIwMDcvMDQvMDcgMjE6MDY6NTAgdG9tIEV4cCAkCisjCisjIFRoaXMgc2NyaXB0IHdpbGwgcmV0dXJuIHRoZSBvcHRpb24gdG8gYWRkIHRvIGBnbmF0bWFrZScgZm9yIHVzaW5nCisjIEFkYUN1cnNlcy4KKyMKKworcHJlZml4PSJAcHJlZml4QCIKK2V4ZWNfcHJlZml4PSJAZXhlY19wcmVmaXhAIgorbGliZGlyPSJAbGliZGlyQCIKKworVkVSU0lPTj0iQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQC5ATkNVUlNFU19QQVRDSEAiCisKK0NGTEFHUz0iLUkkbGliZGlyL2FkYWN1cnNlcyAtTCRsaWJkaXIvYWRhY3Vyc2VzIgorTElCUz0iLUwkcHJlZml4L2xpYiAtbEFkYUN1cnNlcyIKKworY2FzZSAieCQxIiBpbgorICAgIHgtLXZlcnNpb24pCisgICAgICAgIGVjaG8gQWRhQ3Vyc2VzICRWRVJTSU9OCisgICAgICAgIDs7CisgICAgeC0tY2ZsYWdzKQorICAgICAgICBlY2hvICRDRkxBR1MKKyAgICAgICAgOzsKKyAgICB4LS1saWJzKQorICAgICAgICBlY2hvICRMSUJTCisgICAgICAgIDs7CisgICAgeCkKKyAgICAJIyBpZiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGdpdmUgd2hhdCBnbmF0bWFrZSBuZWVkcworICAgICAgICBlY2hvICRDRkxBR1MgLWxhcmdzICRMSUJTCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAnVXNhZ2U6IGFkYWN1cnNlcy1jb25maWcgWy0tdmVyc2lvbiB8IC0tY2ZsYWdzIHwgLS1saWJzXScgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL2dlbi5jIGIvQWRhOTUvZ2VuL2dlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZWE0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vZ2VuLmMKQEAgLTAsMCArMSwxNTIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgIFZlcnNpb24gQ29udHJvbAorICAgICRJZDogZ2VuLmMsdiAxLjQ5IDIwMDgvMTAvMDQgMjE6NTk6MzcgdG9tIEV4cCAkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgIFRoaXMgcHJvZ3JhbSBnZW5lcmF0ZXMgdmFyaW91cyByZWNvcmQgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIGZyb20gdGhlCisgIG5jdXJzZXMgaGVhZGVyIGZpbGUgZm9yIHRoZSBBZGE5NSBwYWNrYWdlcy4gRXNzZW50aWFsbHkgaXQgcHJvZHVjZXMKKyAgQWRhOTUgc291cmNlIG9uIHN0ZG91dCwgd2hpY2ggaXMgdGhlbiBtZXJnZWQgdXNpbmcgbTQgaW50byBhIHRlbXBsYXRlCisgIHRvIHByb2R1Y2UgdGhlIHJlYWwgc291cmNlLgorICAqLworCisjaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxtZW51Lmg+CisjaW5jbHVkZSA8Zm9ybS5oPgorCisjZGVmaW5lIFJFU19OQU1FICJSZXNlcnZlZCIKKworc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVsID0gIiI7CitzdGF0aWMgaW50IGxpdHRsZV9lbmRpYW4gPSAwOworCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICB1bnNpZ25lZCBsb25nIGF0dHI7CisgIH0KK25hbWVfYXR0cmlidXRlX3BhaXI7CisKK3N0YXRpYyBpbnQKK2ZpbmRfcG9zKGNoYXIgKnMsIHVuc2lnbmVkIGxlbiwgaW50ICpsb3csIGludCAqaGlnaCkKK3sKKyAgdW5zaWduZWQgaW50IGksIGo7CisgIGludCBsID0gMDsKKworICAqaGlnaCA9IC0xOworICAqbG93ID0gOCAqIGxlbjsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHMrKykKKyAgICB7CisgICAgICBpZiAoKnMpCisJeworCSAgZm9yIChqID0gMDsgaiA8IDggKiBzaXplb2YoY2hhcik7IGorKykKKworCSAgICB7CisJICAgICAgaWYgKCgobGl0dGxlX2VuZGlhbiAmJiAoKCpzKSAmIDB4MDEpKSB8fAorCQkgICAoIWxpdHRsZV9lbmRpYW4gJiYgKCgqcykgJiAweDgwKSkpKQorCQl7CisJCSAgaWYgKGwgPiAqaGlnaCkKKwkJICAgICpoaWdoID0gbDsKKwkJICBpZiAobCA8ICpsb3cpCisJCSAgICAqbG93ID0gbDsKKwkJfQorCSAgICAgIGwrKzsKKwkgICAgICBpZiAobGl0dGxlX2VuZGlhbikKKwkJKnMgPj49IDE7CisJICAgICAgZWxzZQorCQkqcyA8PD0gMTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlsICs9IDg7CisgICAgfQorICByZXR1cm4gKCpoaWdoID49IDAgJiYgKCpsb3cgPD0gKmhpZ2gpKSA/ICpsb3cgOiAtMTsKK30KKworLyoKKyAqIFRoaXMgaGVscGVyIHJvdXRpbmUgZ2VuZXJhdGVzIGEgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBhCisgKiByZWNvcmQgdHlwZSBkZWZpbmVkIGluIHRoZSBiaW5kaW5nLgorICogV2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIHJlY29yZCB0eXBlcyB3aGljaCBhcmUgb2YgMzIgb3IgMTYKKyAqIGJpdCBzaXplLCBpLmUuIHRoZXkgZml0IGludG8gYW4gKHUpaW50IG9yIGEgKHUpc2hvcnQuCisgKi8KK3N0YXRpYyB2b2lkCisgIGdlbl9yZXBzCisgIChjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyICogbmFwLAkvKiBhcnJheSBvZiBuYW1lX2F0dHJpYnV0ZV9wYWlyIHJlY29yZHMgKi8KKyAgIGNvbnN0IGNoYXIgKm5hbWUsCQkvKiBuYW1lIG9mIHRoZSByZXByZXNlbnRlZCByZWNvcmQgdHlwZSAgKi8KKyAgIGludCBsZW4sCQkJLyogc2l6ZSBvZiB0aGUgcmVjb3JkIGluIGJ5dGVzICAgICAgICAgICovCisgICBpbnQgYmlhcykKK3sKKyAgaW50IGksIG4sIGwsIGNudCA9IDAsIGxvdywgaGlnaDsKKyAgaW50IHdpZHRoID0gc3RybGVuKFJFU19OQU1FKSArIDM7CisgIHVuc2lnbmVkIGxvbmcgYTsKKyAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKKworICBhc3NlcnQobmFwICE9IE5VTEwpOworCisgIGZvciAoaSA9IDA7IG5hcFtpXS5uYW1lICE9IChjaGFyICopMDsgaSsrKQorICAgIHsKKyAgICAgIGNudCsrOworICAgICAgbCA9IHN0cmxlbihuYXBbaV0ubmFtZSk7CisgICAgICBpZiAobCA+IHdpZHRoKQorCXdpZHRoID0gbDsKKyAgICB9CisgIGFzc2VydCh3aWR0aCA+IDApOworCisgIHByaW50ZigiICAgdHlwZSAlcyBpc1xuIiwgbmFtZSk7CisgIHByaW50ZigiICAgICAgcmVjb3JkXG4iKTsKKyAgZm9yIChpID0gMDsgbmFwW2ldLm5hbWUgIT0gKGNoYXIgKikwOyBpKyspCisgICAgeworICAgICAgcHJpbnRmKCIgICAgICAgICAlLSpzIDogQm9vbGVhbjtcbiIsIHdpZHRoLCBuYXBbaV0ubmFtZSk7CisgICAgfQorICBwcmludGYoIiAgICAgIGVuZCByZWNvcmQ7XG4iKTsKKyAgcHJpbnRmKCIgICBwcmFnbWEgQ29udmVudGlvbiAoQywgJXMpO1xuXG4iLCBuYW1lKTsKKworICBwcmludGYoIiAgIGZvciAlcyB1c2VcbiIsIG5hbWUpOworICBwcmludGYoIiAgICAgIHJlY29yZFxuIik7CisKKyAgZm9yIChpID0gMDsgbmFwW2ldLm5hbWUgIT0gKGNoYXIgKikwOyBpKyspCisgICAgeworICAgICAgYSA9IG5hcFtpXS5hdHRyOworICAgICAgbWFzayB8PSBhOworICAgICAgbCA9IGZpbmRfcG9zKChjaGFyICopJmEsIHNpemVvZihhKSwgJmxvdywgJmhpZ2gpOworICAgICAgaWYgKGwgPj0gMCkKKwlwcmludGYoIiAgICAgICAgICUtKnMgYXQgMCByYW5nZSAlMmQgLi4gJTJkO1xuIiwgd2lkdGgsIG5hcFtpXS5uYW1lLAorCSAgICAgICBsb3cgLSBiaWFzLCBoaWdoIC0gYmlhcyk7CisgICAgfQorICBpID0gMTsKKyAgbiA9IGNudDsKKyAgcHJpbnRmKCIgICAgICBlbmQgcmVjb3JkO1xuIik7CisgIHByaW50ZigiICAgZm9yICVzJ1NpemUgdXNlICVkO1xuIiwgbmFtZSwgOCAqIGxlbik7CisgIHByaW50ZigiICAgLS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlXG4iKTsKKyAgcHJpbnRmKCIgICAtLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS4iKTsKK30KKworc3RhdGljIHZvaWQKK2NodHlwZV9yZXAoY29uc3QgY2hhciAqbmFtZSwgYXR0cl90IG1hc2spCit7CisgIGF0dHJfdCB4ID0gLTE7CisgIGF0dHJfdCB0ID0geCAmIG1hc2s7CisgIGludCBsb3csIGhpZ2g7CisgIGludCBsID0gZmluZF9wb3MoKGNoYXIgKikmdCwgc2l6ZW9mKHQpLCAmbG93LCAmaGlnaCk7CisKKyAgaWYgKGwgPj0gMCkKKyAgICBwcmludGYoIiAgICAgICAgICUtNXMgYXQgMCByYW5nZSAlMmQgLi4gJTJkO1xuIiwgbmFtZSwgbG93LCBoaWdoKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9jaHR5cGVfcmVwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHByaW50ZigiICAgZm9yICVzIHVzZVxuICAgICAgcmVjb3JkXG4iLCBuYW1lKTsKKyAgY2h0eXBlX3JlcCgiQ2giLCBBX0NIQVJURVhUKTsKKyAgY2h0eXBlX3JlcCgiQ29sb3IiLCBBX0NPTE9SKTsKKyAgY2h0eXBlX3JlcCgiQXR0ciIsIChBX0FUVFJJQlVURVMgJiB+QV9DT0xPUikpOworICBwcmludGYoIiAgICAgIGVuZCByZWNvcmQ7XG4gICBmb3IgJXMnU2l6ZSB1c2UgJWxkO1xuIiwKKwkgbmFtZSwgKGxvbmcpKDggKiBzaXplb2YoY2h0eXBlKSkpOworCisgIHByaW50ZigiICAgICAgLS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlXG4iKTsKKyAgcHJpbnRmKCIgICAgICAtLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS5cbiIpOworfQorCitzdGF0aWMgdm9pZAorbXJlcF9yZXAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcmVjKQoreworICBpbnQgbG93LCBoaWdoOworICBpbnQgbCA9IGZpbmRfcG9zKChjaGFyICopcmVjLCBzaXplb2YoTUVWRU5UKSwgJmxvdywgJmhpZ2gpOworCisgIGlmIChsID49IDApCisgICAgcHJpbnRmKCIgICAgICAgICAlLTdzIGF0IDAgcmFuZ2UgJTNkIC4uICUzZDtcbiIsIG5hbWUsIGxvdywgaGlnaCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5fbXJlcF9yZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgTUVWRU5UIHg7CisKKyAgcHJpbnRmKCIgICBmb3IgJXMgdXNlXG4gICAgICByZWNvcmRcbiIsIG5hbWUpOworCisgIG1lbXNldCgmeCwgMCwgc2l6ZW9mKHgpKTsKKyAgeC5pZCA9IC0xOworICBtcmVwX3JlcCgiSWQiLCAmeCk7CisKKyAgbWVtc2V0KCZ4LCAwLCBzaXplb2YoeCkpOworICB4LnggPSAtMTsKKyAgbXJlcF9yZXAoIlgiLCAmeCk7CisKKyAgbWVtc2V0KCZ4LCAwLCBzaXplb2YoeCkpOworICB4LnkgPSAtMTsKKyAgbXJlcF9yZXAoIlkiLCAmeCk7CisKKyAgbWVtc2V0KCZ4LCAwLCBzaXplb2YoeCkpOworICB4LnogPSAtMTsKKyAgbXJlcF9yZXAoIloiLCAmeCk7CisKKyAgbWVtc2V0KCZ4LCAwLCBzaXplb2YoeCkpOworICB4LmJzdGF0ZSA9IC0xOworICBtcmVwX3JlcCgiQnN0YXRlIiwgJngpOworCisgIHByaW50ZigiICAgICAgZW5kIHJlY29yZDtcbiIpOworICBwcmludGYoIiAgICAgIC0tICBQbGVhc2Ugbm90ZTogdGhpcyByZXAuIGNsYXVzZSBpcyBnZW5lcmF0ZWQgYW5kIG1heSBiZVxuIik7CisgIHByaW50ZigiICAgICAgLS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uXG4iKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9hdHRyX3NldChjb25zdCBjaGFyICpuYW1lKQoreworICAvKiBBbGwgb2YgdGhlIEFfeHh4IHN5bWJvbHMgYXJlIGRlZmluZWQgaW4gbmN1cnNlcywgYnV0IG5vdCBhbGwgYXJlIG5vbnplcm8KKyAgICogaWYgImNvbmZpZ3VyZSAtLWVuYWJsZS13aWRlYyIgaXMgc3BlY2lmaWVkLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgbmFwW10gPQorICB7CisjaWYgQV9TVEFORE9VVAorICAgIHsiU3RhbmRfT3V0IiwgQV9TVEFORE9VVH0sCisjZW5kaWYKKyNpZiBBX1VOREVSTElORQorICAgIHsiVW5kZXJfTGluZSIsIEFfVU5ERVJMSU5FfSwKKyNlbmRpZgorI2lmIEFfUkVWRVJTRQorICAgIHsiUmV2ZXJzZV9WaWRlbyIsIEFfUkVWRVJTRX0sCisjZW5kaWYKKyNpZiBBX0JMSU5LCisgICAgeyJCbGluayIsIEFfQkxJTkt9LAorI2VuZGlmCisjaWYgQV9ESU0KKyAgICB7IkRpbV9DaGFyYWN0ZXIiLCBBX0RJTX0sCisjZW5kaWYKKyNpZiBBX0JPTEQKKyAgICB7IkJvbGRfQ2hhcmFjdGVyIiwgQV9CT0xEfSwKKyNlbmRpZgorI2lmIEFfQUxUQ0hBUlNFVAorICAgIHsiQWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQiLCBBX0FMVENIQVJTRVR9LAorI2VuZGlmCisjaWYgQV9JTlZJUworICAgIHsiSW52aXNpYmxlX0NoYXJhY3RlciIsIEFfSU5WSVN9LAorI2VuZGlmCisjaWYgQV9QUk9URUNUCisgICAgeyJQcm90ZWN0ZWRfQ2hhcmFjdGVyIiwgQV9QUk9URUNUfSwKKyNlbmRpZgorI2lmIEFfSE9SSVpPTlRBTAorICAgIHsiSG9yaXpvbnRhbCIsIEFfSE9SSVpPTlRBTH0sCisjZW5kaWYKKyNpZiBBX0xFRlQKKyAgICB7IkxlZnQiLCBBX0xFRlR9LAorI2VuZGlmCisjaWYgQV9MT1cKKyAgICB7IkxvdyIsIEFfTE9XfSwKKyNlbmRpZgorI2lmIEFfUklHSFQKKyAgICB7IlJpZ2h0IiwgQV9SSUdIVH0sCisjZW5kaWYKKyNpZiBBX1RPUAorICAgIHsiVG9wIiwgQV9UT1B9LAorI2VuZGlmCisjaWYgQV9WRVJUSUNBTAorICAgIHsiVmVydGljYWwiLCBBX1ZFUlRJQ0FMfSwKKyNlbmRpZgorICAgIHsoY2hhciAqKTAsIDB9CisgIH07CisgIGNodHlwZSBhdHRyID0gQV9BVFRSSUJVVEVTICYgfkFfQ09MT1I7CisgIGludCBzdGFydCA9IC0xOworICBpbnQgbGVuID0gMDsKKyAgaW50IGksIHNldDsKKyAgZm9yIChpID0gMDsgaSA8IChpbnQpKDggKiBzaXplb2YoY2h0eXBlKSk7IGkrKykKKworICAgIHsKKyAgICAgIHNldCA9IGF0dHIgJiAxOworICAgICAgaWYgKHNldCkKKwl7CisJICBpZiAoc3RhcnQgPCAwKQorCSAgICBzdGFydCA9IGk7CisJICBpZiAoc3RhcnQgPj0gMCkKKwkgICAgeworCSAgICAgIGxlbisrOworCSAgICB9CisJfQorICAgICAgYXR0ciA9IGF0dHIgPj4gMTsKKyAgICB9CisgIGdlbl9yZXBzKG5hcCwgbmFtZSwgKGxlbiArIDcpIC8gOCwgbGl0dGxlX2VuZGlhbiA/IHN0YXJ0IDogMCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5fdHJhY2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgbmFwW10gPQorICB7CisgICAgeyJUaW1lcyIsIFRSQUNFX1RJTUVTfSwKKyAgICB7IlRwdXRzIiwgVFJBQ0VfVFBVVFN9LAorICAgIHsiVXBkYXRlIiwgVFJBQ0VfVVBEQVRFfSwKKyAgICB7IkN1cnNvcl9Nb3ZlIiwgVFJBQ0VfTU9WRX0sCisgICAgeyJDaGFyYWN0ZXJfT3V0cHV0IiwgVFJBQ0VfQ0hBUlBVVH0sCisgICAgeyJDYWxscyIsIFRSQUNFX0NBTExTfSwKKyAgICB7IlZpcnR1YWxfUHV0cyIsIFRSQUNFX1ZJUlRQVVR9LAorICAgIHsiSW5wdXRfRXZlbnRzIiwgVFJBQ0VfSUVWRU5UfSwKKyAgICB7IlRUWV9TdGF0ZSIsIFRSQUNFX0JJVFN9LAorICAgIHsiSW50ZXJuYWxfQ2FsbHMiLCBUUkFDRV9JQ0FMTFN9LAorICAgIHsiQ2hhcmFjdGVyX0NhbGxzIiwgVFJBQ0VfQ0NBTExTfSwKKyAgICB7IlRlcm1jYXBfVGVybUluZm8iLCBUUkFDRV9EQVRBQkFTRX0sCisgICAgeyhjaGFyICopMCwgMH0KKyAgfTsKKyAgZ2VuX3JlcHMobmFwLCBuYW1lLCBzaXplb2YoaW50KSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5fbWVudV9vcHRfcmVwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHN0YXRpYyBjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyIG5hcFtdID0KKyAgeworI2lmZGVmIE9fT05FVkFMVUUKKyAgICB7Ik9uZV9WYWx1ZWQiLCBPX09ORVZBTFVFfSwKKyNlbmRpZgorI2lmZGVmIE9fU0hPV0RFU0MKKyAgICB7IlNob3dfRGVzY3JpcHRpb25zIiwgT19TSE9XREVTQ30sCisjZW5kaWYKKyNpZmRlZiBPX1JPV01BSk9SCisgICAgeyJSb3dfTWFqb3JfT3JkZXIiLCBPX1JPV01BSk9SfSwKKyNlbmRpZgorI2lmZGVmIE9fSUdOT1JFQ0FTRQorICAgIHsiSWdub3JlX0Nhc2UiLCBPX0lHTk9SRUNBU0V9LAorI2VuZGlmCisjaWZkZWYgT19TSE9XTUFUQ0gKKyAgICB7IlNob3dfTWF0Y2hlcyIsIE9fU0hPV01BVENIfSwKKyNlbmRpZgorI2lmZGVmIE9fTk9OQ1lDTElDCisgICAgeyJOb25fQ3ljbGljIiwgT19OT05DWUNMSUN9LAorI2VuZGlmCisgICAgeyhjaGFyICopMCwgMH0KKyAgfTsKKyAgZ2VuX3JlcHMobmFwLCBuYW1lLCBzaXplb2YoaW50KSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5faXRlbV9vcHRfcmVwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHN0YXRpYyBjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyIG5hcFtdID0KKyAgeworI2lmZGVmIE9fU0VMRUNUQUJMRQorICAgIHsiU2VsZWN0YWJsZSIsIE9fU0VMRUNUQUJMRX0sCisjZW5kaWYKKyAgICB7KGNoYXIgKikwLCAwfQorICB9OworICBnZW5fcmVwcyhuYXAsIG5hbWUsIHNpemVvZihpbnQpLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9mb3JtX29wdF9yZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgbmFwW10gPQorICB7CisjaWZkZWYgT19OTF9PVkVSTE9BRAorICAgIHsiTkxfT3ZlcmxvYWQiLCBPX05MX09WRVJMT0FEfSwKKyNlbmRpZgorI2lmZGVmIE9fQlNfT1ZFUkxPQUQKKyAgICB7IkJTX092ZXJsb2FkIiwgT19CU19PVkVSTE9BRH0sCisjZW5kaWYKKyAgICB7KGNoYXIgKikwLCAwfQorICB9OworICBnZW5fcmVwcyhuYXAsIG5hbWUsIHNpemVvZihpbnQpLCAwKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIHRoZSBGaWVsZF9PcHRpb25fU2V0IHJlY29yZAorICovCitzdGF0aWMgdm9pZAorZ2VuX2ZpZWxkX29wdF9yZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgbmFwW10gPQorICB7CisjaWZkZWYgT19WSVNJQkxFCisgICAgeyJWaXNpYmxlIiwgT19WSVNJQkxFfSwKKyNlbmRpZgorI2lmZGVmIE9fQUNUSVZFCisgICAgeyJBY3RpdmUiLCBPX0FDVElWRX0sCisjZW5kaWYKKyNpZmRlZiBPX1BVQkxJQworICAgIHsiUHVibGljIiwgT19QVUJMSUN9LAorI2VuZGlmCisjaWZkZWYgT19FRElUCisgICAgeyJFZGl0IiwgT19FRElUfSwKKyNlbmRpZgorI2lmZGVmIE9fV1JBUAorICAgIHsiV3JhcCIsIE9fV1JBUH0sCisjZW5kaWYKKyNpZmRlZiBPX0JMQU5LCisgICAgeyJCbGFuayIsIE9fQkxBTkt9LAorI2VuZGlmCisjaWZkZWYgT19BVVRPU0tJUAorICAgIHsiQXV0b19Ta2lwIiwgT19BVVRPU0tJUH0sCisjZW5kaWYKKyNpZmRlZiBPX05VTExPSworICAgIHsiTnVsbF9PayIsIE9fTlVMTE9LfSwKKyNlbmRpZgorI2lmZGVmIE9fUEFTU09LCisgICAgeyJQYXNzX09rIiwgT19QQVNTT0t9LAorI2VuZGlmCisjaWZkZWYgT19TVEFUSUMKKyAgICB7IlN0YXRpYyIsIE9fU1RBVElDfSwKKyNlbmRpZgorICAgIHsoY2hhciAqKTAsIDB9CisgIH07CisgIGdlbl9yZXBzKG5hcCwgbmFtZSwgc2l6ZW9mKGludCksIDApOworfQorCisvKgorICogR2VuZXJhdGUgYSBzaW5nbGUga2V5IGNvZGUgY29uc3RhbnQgZGVmaW5pdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2tleWRlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHZhbHVlLCBpbnQgbW9kZSkKK3sKKyAgaWYgKG1vZGUgPT0gMCkJCS8qIEdlbmVyYXRlIHRoZSBuZXcgbmFtZSAqLworICAgIHByaW50ZigiICAgJS0zMHMgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlIDo9IDgjJTNvIztcbiIsIG5hbWUsIHZhbHVlKTsKKyAgZWxzZQorICAgIHsJCQkJLyogZ2VuZXJhdGUgdGhlIG9sZCBuYW1lLCBidXQgb25seSBpZiBpdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggdGhlIG9sZAorCQkJCSAqIG5hbWUgKEFkYTk1IGlzbid0IGNhc2Ugc2Vuc2l0aXZlISkKKwkJCQkgKi8KKyAgICAgIGNvbnN0IGNoYXIgKnMgPSBvbGRfbmFtZTsKKyAgICAgIGNvbnN0IGNoYXIgKnQgPSBuYW1lOworCisgICAgICB3aGlsZSAoKnMgJiYgKnQgJiYgKHRvdXBwZXIoKnMrKykgPT0gdG91cHBlcigqdCsrKSkpOworICAgICAgaWYgKCpzIHx8ICp0KQorCXByaW50ZigiICAgJS0xNnMgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgJXM7XG4iLCBvbGRfbmFtZSwgbmFtZSk7CisgICAgfQorfQorCisvKgorICogR2VuZXJhdGUgY29uc3RhbnRzIGZvciB0aGUga2V5IGNvZGVzLiBXaGVuIGNhbGxlZCB3aXRoIG1vZGU9PTAsIGEKKyAqIGNvbXBsZXRlIGxpc3Qgd2l0aCBuaWNlIGNvbnN0YW50IG5hbWVzIGluIHByb3BlciBjYXNpbmcgc3R5bGUgd2lsbAorICogYmUgZ2VuZXJhdGVkLiBPdGhlcndpc2UgYSBsaXN0IG9mIG9sZCAoaS5lLiBDLXN0eWxlKSBuYW1lcyB3aWxsIGJlCisgKiBnZW5lcmF0ZWQsIGdpdmVuIHRoYXQgdGhlIG5hbWUgd2Fzbid0IGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgIm5pY2UiCisgKiBsaXN0LgorICovCitzdGF0aWMgdm9pZAorZ2VuX2tleWRlZnMoaW50IG1vZGUpCit7CisgIGNoYXIgYnVmWzE2XTsKKyAgY2hhciBvYnVmWzE2XTsKKyAgaW50IGk7CisKKyNpZmRlZiBLRVlfQ09ERV9ZRVMKKyAga2V5ZGVmKCJLZXlfQ29kZV9ZZXMiLCAiS0VZX0NPREVfWUVTIiwgS0VZX0NPREVfWUVTLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9NSU4KKyAga2V5ZGVmKCJLZXlfTWluIiwgIktFWV9NSU4iLCBLRVlfTUlOLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9CUkVBSworICBrZXlkZWYoIktleV9CcmVhayIsICJLRVlfQlJFQUsiLCBLRVlfQlJFQUssIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0RPV04KKyAga2V5ZGVmKCJLZXlfQ3Vyc29yX0Rvd24iLCAiS0VZX0RPV04iLCBLRVlfRE9XTiwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfVVAKKyAga2V5ZGVmKCJLZXlfQ3Vyc29yX1VwIiwgIktFWV9VUCIsIEtFWV9VUCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfTEVGVAorICBrZXlkZWYoIktleV9DdXJzb3JfTGVmdCIsICJLRVlfTEVGVCIsIEtFWV9MRUZULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SSUdIVAorICBrZXlkZWYoIktleV9DdXJzb3JfUmlnaHQiLCAiS0VZX1JJR0hUIiwgS0VZX1JJR0hULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9IT01FCisgIGtleWRlZigiS2V5X0hvbWUiLCAiS0VZX0hPTUUiLCBLRVlfSE9NRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQkFDS1NQQUNFCisgIGtleWRlZigiS2V5X0JhY2tzcGFjZSIsICJLRVlfQkFDS1NQQUNFIiwgS0VZX0JBQ0tTUEFDRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRjAKKyAga2V5ZGVmKCJLZXlfRjAiLCAiS0VZX0YwIiwgS0VZX0YwLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9GCisgIGZvciAoaSA9IDE7IGkgPD0gMjQ7IGkrKykKKyAgICB7CisgICAgICBzcHJpbnRmKGJ1ZiwgIktleV9GJWQiLCBpKTsKKyAgICAgIHNwcmludGYob2J1ZiwgIktFWV9GJWQiLCBpKTsKKyAgICAgIGtleWRlZihidWYsIG9idWYsIEtFWV9GKGkpLCBtb2RlKTsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBLRVlfREwKKyAga2V5ZGVmKCJLZXlfRGVsZXRlX0xpbmUiLCAiS0VZX0RMIiwgS0VZX0RMLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9JTAorICBrZXlkZWYoIktleV9JbnNlcnRfTGluZSIsICJLRVlfSUwiLCBLRVlfSUwsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0RDCisgIGtleWRlZigiS2V5X0RlbGV0ZV9DaGFyIiwgIktFWV9EQyIsIEtFWV9EQywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfSUMKKyAga2V5ZGVmKCJLZXlfSW5zZXJ0X0NoYXIiLCAiS0VZX0lDIiwgS0VZX0lDLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9FSUMKKyAga2V5ZGVmKCJLZXlfRXhpdF9JbnNlcnRfTW9kZSIsICJLRVlfRUlDIiwgS0VZX0VJQywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQ0xFQVIKKyAga2V5ZGVmKCJLZXlfQ2xlYXJfU2NyZWVuIiwgIktFWV9DTEVBUiIsIEtFWV9DTEVBUiwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRU9TCisgIGtleWRlZigiS2V5X0NsZWFyX0VuZF9PZl9TY3JlZW4iLCAiS0VZX0VPUyIsIEtFWV9FT1MsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0VPTAorICBrZXlkZWYoIktleV9DbGVhcl9FbmRfT2ZfTGluZSIsICJLRVlfRU9MIiwgS0VZX0VPTCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0YKKyAga2V5ZGVmKCJLZXlfU2Nyb2xsXzFfRm9yd2FyZCIsICJLRVlfU0YiLCBLRVlfU0YsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NSCisgIGtleWRlZigiS2V5X1Njcm9sbF8xX0JhY2t3YXJkIiwgIktFWV9TUiIsIEtFWV9TUiwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfTlBBR0UKKyAga2V5ZGVmKCJLZXlfTmV4dF9QYWdlIiwgIktFWV9OUEFHRSIsIEtFWV9OUEFHRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUFBBR0UKKyAga2V5ZGVmKCJLZXlfUHJldmlvdXNfUGFnZSIsICJLRVlfUFBBR0UiLCBLRVlfUFBBR0UsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NUQUIKKyAga2V5ZGVmKCJLZXlfU2V0X1RhYiIsICJLRVlfU1RBQiIsIEtFWV9TVEFCLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DVEFCCisgIGtleWRlZigiS2V5X0NsZWFyX1RhYiIsICJLRVlfQ1RBQiIsIEtFWV9DVEFCLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DQVRBQgorICBrZXlkZWYoIktleV9DbGVhcl9BbGxfVGFicyIsICJLRVlfQ0FUQUIiLCBLRVlfQ0FUQUIsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0VOVEVSCisgIGtleWRlZigiS2V5X0VudGVyX09yX1NlbmQiLCAiS0VZX0VOVEVSIiwgS0VZX0VOVEVSLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TUkVTRVQKKyAga2V5ZGVmKCJLZXlfU29mdF9SZXNldCIsICJLRVlfU1JFU0VUIiwgS0VZX1NSRVNFVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVTRVQKKyAga2V5ZGVmKCJLZXlfUmVzZXQiLCAiS0VZX1JFU0VUIiwgS0VZX1JFU0VULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9QUklOVAorICBrZXlkZWYoIktleV9QcmludCIsICJLRVlfUFJJTlQiLCBLRVlfUFJJTlQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0xMCisgIGtleWRlZigiS2V5X0JvdHRvbSIsICJLRVlfTEwiLCBLRVlfTEwsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0ExCisgIGtleWRlZigiS2V5X1VwcGVyX0xlZnRfT2ZfS2V5cGFkIiwgIktFWV9BMSIsIEtFWV9BMSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQTMKKyAga2V5ZGVmKCJLZXlfVXBwZXJfUmlnaHRfT2ZfS2V5cGFkIiwgIktFWV9BMyIsIEtFWV9BMywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQjIKKyAga2V5ZGVmKCJLZXlfQ2VudGVyX09mX0tleXBhZCIsICJLRVlfQjIiLCBLRVlfQjIsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0MxCisgIGtleWRlZigiS2V5X0xvd2VyX0xlZnRfT2ZfS2V5cGFkIiwgIktFWV9DMSIsIEtFWV9DMSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQzMKKyAga2V5ZGVmKCJLZXlfTG93ZXJfUmlnaHRfT2ZfS2V5cGFkIiwgIktFWV9DMyIsIEtFWV9DMywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQlRBQgorICBrZXlkZWYoIktleV9CYWNrX1RhYiIsICJLRVlfQlRBQiIsIEtFWV9CVEFCLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9CRUcKKyAga2V5ZGVmKCJLZXlfQmVnaW5uaW5nIiwgIktFWV9CRUciLCBLRVlfQkVHLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DQU5DRUwKKyAga2V5ZGVmKCJLZXlfQ2FuY2VsIiwgIktFWV9DQU5DRUwiLCBLRVlfQ0FOQ0VMLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DTE9TRQorICBrZXlkZWYoIktleV9DbG9zZSIsICJLRVlfQ0xPU0UiLCBLRVlfQ0xPU0UsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0NPTU1BTkQKKyAga2V5ZGVmKCJLZXlfQ29tbWFuZCIsICJLRVlfQ09NTUFORCIsIEtFWV9DT01NQU5ELCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DT1BZCisgIGtleWRlZigiS2V5X0NvcHkiLCAiS0VZX0NPUFkiLCBLRVlfQ09QWSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQ1JFQVRFCisgIGtleWRlZigiS2V5X0NyZWF0ZSIsICJLRVlfQ1JFQVRFIiwgS0VZX0NSRUFURSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRU5ECisgIGtleWRlZigiS2V5X0VuZCIsICJLRVlfRU5EIiwgS0VZX0VORCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRVhJVAorICBrZXlkZWYoIktleV9FeGl0IiwgIktFWV9FWElUIiwgS0VZX0VYSVQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0ZJTkQKKyAga2V5ZGVmKCJLZXlfRmluZCIsICJLRVlfRklORCIsIEtFWV9GSU5ELCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9IRUxQCisgIGtleWRlZigiS2V5X0hlbHAiLCAiS0VZX0hFTFAiLCBLRVlfSEVMUCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfTUFSSworICBrZXlkZWYoIktleV9NYXJrIiwgIktFWV9NQVJLIiwgS0VZX01BUkssIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX01FU1NBR0UKKyAga2V5ZGVmKCJLZXlfTWVzc2FnZSIsICJLRVlfTUVTU0FHRSIsIEtFWV9NRVNTQUdFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9NT1ZFCisgIGtleWRlZigiS2V5X01vdmUiLCAiS0VZX01PVkUiLCBLRVlfTU9WRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfTkVYVAorICBrZXlkZWYoIktleV9OZXh0IiwgIktFWV9ORVhUIiwgS0VZX05FWFQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX09QRU4KKyAga2V5ZGVmKCJLZXlfT3BlbiIsICJLRVlfT1BFTiIsIEtFWV9PUEVOLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9PUFRJT05TCisgIGtleWRlZigiS2V5X09wdGlvbnMiLCAiS0VZX09QVElPTlMiLCBLRVlfT1BUSU9OUywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUFJFVklPVVMKKyAga2V5ZGVmKCJLZXlfUHJldmlvdXMiLCAiS0VZX1BSRVZJT1VTIiwgS0VZX1BSRVZJT1VTLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRURPCisgIGtleWRlZigiS2V5X1JlZG8iLCAiS0VZX1JFRE8iLCBLRVlfUkVETywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVGRVJFTkNFCisgIGtleWRlZigiS2V5X1JlZmVyZW5jZSIsICJLRVlfUkVGRVJFTkNFIiwgS0VZX1JFRkVSRU5DRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVGUkVTSAorICBrZXlkZWYoIktleV9SZWZyZXNoIiwgIktFWV9SRUZSRVNIIiwgS0VZX1JFRlJFU0gsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1JFUExBQ0UKKyAga2V5ZGVmKCJLZXlfUmVwbGFjZSIsICJLRVlfUkVQTEFDRSIsIEtFWV9SRVBMQUNFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNUQVJUCisgIGtleWRlZigiS2V5X1Jlc3RhcnQiLCAiS0VZX1JFU1RBUlQiLCBLRVlfUkVTVEFSVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVTVU1FCisgIGtleWRlZigiS2V5X1Jlc3VtZSIsICJLRVlfUkVTVU1FIiwgS0VZX1JFU1VNRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0FWRQorICBrZXlkZWYoIktleV9TYXZlIiwgIktFWV9TQVZFIiwgS0VZX1NBVkUsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NCRUcKKyAga2V5ZGVmKCJLZXlfU2hpZnRfQmVnaW4iLCAiS0VZX1NCRUciLCBLRVlfU0JFRywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0NBTkNFTAorICBrZXlkZWYoIktleV9TaGlmdF9DYW5jZWwiLCAiS0VZX1NDQU5DRUwiLCBLRVlfU0NBTkNFTCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0NPTU1BTkQKKyAga2V5ZGVmKCJLZXlfU2hpZnRfQ29tbWFuZCIsICJLRVlfU0NPTU1BTkQiLCBLRVlfU0NPTU1BTkQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NDT1BZCisgIGtleWRlZigiS2V5X1NoaWZ0X0NvcHkiLCAiS0VZX1NDT1BZIiwgS0VZX1NDT1BZLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TQ1JFQVRFCisgIGtleWRlZigiS2V5X1NoaWZ0X0NyZWF0ZSIsICJLRVlfU0NSRUFURSIsIEtFWV9TQ1JFQVRFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TREMKKyAga2V5ZGVmKCJLZXlfU2hpZnRfRGVsZXRlX0NoYXIiLCAiS0VZX1NEQyIsIEtFWV9TREMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NETAorICBrZXlkZWYoIktleV9TaGlmdF9EZWxldGVfTGluZSIsICJLRVlfU0RMIiwgS0VZX1NETCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0VMRUNUCisgIGtleWRlZigiS2V5X1NlbGVjdCIsICJLRVlfU0VMRUNUIiwgS0VZX1NFTEVDVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0VORAorICBrZXlkZWYoIktleV9TaGlmdF9FbmQiLCAiS0VZX1NFTkQiLCBLRVlfU0VORCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0VPTAorICBrZXlkZWYoIktleV9TaGlmdF9DbGVhcl9FbmRfT2ZfTGluZSIsICJLRVlfU0VPTCIsIEtFWV9TRU9MLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TRVhJVAorICBrZXlkZWYoIktleV9TaGlmdF9FeGl0IiwgIktFWV9TRVhJVCIsIEtFWV9TRVhJVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0ZJTkQKKyAga2V5ZGVmKCJLZXlfU2hpZnRfRmluZCIsICJLRVlfU0ZJTkQiLCBLRVlfU0ZJTkQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NIRUxQCisgIGtleWRlZigiS2V5X1NoaWZ0X0hlbHAiLCAiS0VZX1NIRUxQIiwgS0VZX1NIRUxQLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TSE9NRQorICBrZXlkZWYoIktleV9TaGlmdF9Ib21lIiwgIktFWV9TSE9NRSIsIEtFWV9TSE9NRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0lDCisgIGtleWRlZigiS2V5X1NoaWZ0X0luc2VydF9DaGFyIiwgIktFWV9TSUMiLCBLRVlfU0lDLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TTEVGVAorICBrZXlkZWYoIktleV9TaGlmdF9DdXJzb3JfTGVmdCIsICJLRVlfU0xFRlQiLCBLRVlfU0xFRlQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NNRVNTQUdFCisgIGtleWRlZigiS2V5X1NoaWZ0X01lc3NhZ2UiLCAiS0VZX1NNRVNTQUdFIiwgS0VZX1NNRVNTQUdFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TTU9WRQorICBrZXlkZWYoIktleV9TaGlmdF9Nb3ZlIiwgIktFWV9TTU9WRSIsIEtFWV9TTU9WRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU05FWFQKKyAga2V5ZGVmKCJLZXlfU2hpZnRfTmV4dF9QYWdlIiwgIktFWV9TTkVYVCIsIEtFWV9TTkVYVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU09QVElPTlMKKyAga2V5ZGVmKCJLZXlfU2hpZnRfT3B0aW9ucyIsICJLRVlfU09QVElPTlMiLCBLRVlfU09QVElPTlMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NQUkVWSU9VUworICBrZXlkZWYoIktleV9TaGlmdF9QcmV2aW91c19QYWdlIiwgIktFWV9TUFJFVklPVVMiLCBLRVlfU1BSRVZJT1VTLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TUFJJTlQKKyAga2V5ZGVmKCJLZXlfU2hpZnRfUHJpbnQiLCAiS0VZX1NQUklOVCIsIEtFWV9TUFJJTlQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NSRURPCisgIGtleWRlZigiS2V5X1NoaWZ0X1JlZG8iLCAiS0VZX1NSRURPIiwgS0VZX1NSRURPLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TUkVQTEFDRQorICBrZXlkZWYoIktleV9TaGlmdF9SZXBsYWNlIiwgIktFWV9TUkVQTEFDRSIsIEtFWV9TUkVQTEFDRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1JJR0hUCisgIGtleWRlZigiS2V5X1NoaWZ0X0N1cnNvcl9SaWdodCIsICJLRVlfU1JJR0hUIiwgS0VZX1NSSUdIVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1JTVU1FCisgIGtleWRlZigiS2V5X1NoaWZ0X1Jlc3VtZSIsICJLRVlfU1JTVU1FIiwgS0VZX1NSU1VNRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1NBVkUKKyAga2V5ZGVmKCJLZXlfU2hpZnRfU2F2ZSIsICJLRVlfU1NBVkUiLCBLRVlfU1NBVkUsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NTVVNQRU5ECisgIGtleWRlZigiS2V5X1NoaWZ0X1N1c3BlbmQiLCAiS0VZX1NTVVNQRU5EIiwgS0VZX1NTVVNQRU5ELCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TVU5ETworICBrZXlkZWYoIktleV9TaGlmdF9VbmRvIiwgIktFWV9TVU5ETyIsIEtFWV9TVU5ETywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1VTUEVORAorICBrZXlkZWYoIktleV9TdXNwZW5kIiwgIktFWV9TVVNQRU5EIiwgS0VZX1NVU1BFTkQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1VORE8KKyAga2V5ZGVmKCJLZXlfVW5kbyIsICJLRVlfVU5ETyIsIEtFWV9VTkRPLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9NT1VTRQorICBrZXlkZWYoIktleV9Nb3VzZSIsICJLRVlfTU9VU0UiLCBLRVlfTU9VU0UsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1JFU0laRQorICBrZXlkZWYoIktleV9SZXNpemUiLCAiS0VZX1JFU0laRSIsIEtFWV9SRVNJWkUsIG1vZGUpOworI2VuZGlmCit9CisKKy8qCisgKiBHZW5lcmF0ZSBhIGNvbnN0YW50IHdpdGggdGhlIGdpdmVuIG5hbWUuIFRoZSBzZWNvbmQgcGFyYW1ldGVyCisgKiBpcyBhIHJlZmVyZW5jZSB0byB0aGUgQUNTIGNoYXJhY3RlciBpbiB0aGUgYWNzX21hcFtdIGFycmF5IGFuZAorICogd2lsbCBiZSB0cmFuc2xhdGVkIGludG8gYW4gaW5kZXguCisgKi8KK3N0YXRpYyB2b2lkCithY3NfZGVmKGNvbnN0IGNoYXIgKm5hbWUsIGNodHlwZSAqYSkKK3sKKyAgaW50IGMgPSBhIC0gJmFjc19tYXBbMF07CisKKyAgcHJpbnRmKCIgICAlLTI0cyA6IGNvbnN0YW50IENoYXJhY3RlciA6PSAiLCBuYW1lKTsKKyAgaWYgKGlzcHJpbnQoYykgJiYgKGMgIT0gJ2AnKSkKKyAgICBwcmludGYoIiclYyc7XG4iLCBjKTsKKyAgZWxzZQorICAgIHByaW50ZigiQ2hhcmFjdGVyJ1ZhbCAoJWQpO1xuIiwgYyk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgY29uc3RhbnRzIGZvciB0aGUgQUNTIGNoYXJhY3RlcnMKKyAqLworc3RhdGljIHZvaWQKK2dlbl9hY3Modm9pZCkKK3sKKyAgcHJpbnRmKCIgICB0eXBlIENfQUNTX01hcCBpcyBhcnJheSAoQ2hhcmFjdGVyJ1ZhbCAoMCkgLi4gQ2hhcmFjdGVyJ1ZhbCAoMTI3KSlcbiIpOworICBwcmludGYoIiAgICAgICAgb2YgQXR0cmlidXRlZF9DaGFyYWN0ZXI7XG4iKTsKKyNpZiBVU0VfUkVFTlRSQU5UIHx8IEJST0tFTl9MSU5LRVIKKyAgcHJpbnRmKCIgICB0eXBlIENfQUNTX1B0ciBpcyBhY2Nlc3MgQ19BQ1NfTWFwO1xuIik7CisgIHByaW50ZigiICAgZnVuY3Rpb24gQUNTX01hcCByZXR1cm4gQ19BQ1NfUHRyO1xuIik7CisgIHByaW50ZigiICAgcHJhZ21hIEltcG9ydCAoQywgQUNTX01hcCwgXCJfbmNfYWNzX21hcFwiKTtcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIgICBBQ1NfTWFwIDogQ19BQ1NfTWFwO1xuIik7CisgIHByaW50ZigiICAgcHJhZ21hIEltcG9ydCAoQywgQUNTX01hcCwgXCJhY3NfbWFwXCIpO1xuIik7CisjZW5kaWYKKyAgcHJpbnRmKCIgICAtLVxuIik7CisgIHByaW50ZigiICAgLS1cbiIpOworICBwcmludGYoIiAgIC0tICBDb25zdGFudHMgZm9yIHNldmVyYWwgY2hhcmFjdGVycyBmcm9tIHRoZSBBbHRlcm5hdGUgQ2hhcmFjdGVyIFNldFxuIik7CisgIHByaW50ZigiICAgLS0gIFlvdSBtdXN0IHVzZSB0aGVzZSBjb25zdGFudHMgYXMgaW5kaWNlcyBpbnRvIHRoZSBBQ1NfTWFwIGFycmF5XG4iKTsKKyAgcHJpbnRmKCIgICAtLSAgdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZWQgY2hhcmFjdGVyIGF0IHJ1bnRpbWUuXG4iKTsKKyAgcHJpbnRmKCIgICAtLVxuIik7CisKKyNpZmRlZiBBQ1NfVUxDT1JORVIKKyAgYWNzX2RlZigiQUNTX1VwcGVyX0xlZnRfQ29ybmVyIiwgJkFDU19VTENPUk5FUik7CisjZW5kaWYKKyNpZmRlZiBBQ1NfTExDT1JORVIKKyAgYWNzX2RlZigiQUNTX0xvd2VyX0xlZnRfQ29ybmVyIiwgJkFDU19MTENPUk5FUik7CisjZW5kaWYKKyNpZmRlZiBBQ1NfVVJDT1JORVIKKyAgYWNzX2RlZigiQUNTX1VwcGVyX1JpZ2h0X0Nvcm5lciIsICZBQ1NfVVJDT1JORVIpOworI2VuZGlmCisjaWZkZWYgQUNTX0xSQ09STkVSCisgIGFjc19kZWYoIkFDU19Mb3dlcl9SaWdodF9Db3JuZXIiLCAmQUNTX0xSQ09STkVSKTsKKyNlbmRpZgorI2lmZGVmIEFDU19MVEVFCisgIGFjc19kZWYoIkFDU19MZWZ0X1RlZSIsICZBQ1NfTFRFRSk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfUlRFRQorICBhY3NfZGVmKCJBQ1NfUmlnaHRfVGVlIiwgJkFDU19SVEVFKTsKKyNlbmRpZgorI2lmZGVmIEFDU19CVEVFCisgIGFjc19kZWYoIkFDU19Cb3R0b21fVGVlIiwgJkFDU19CVEVFKTsKKyNlbmRpZgorI2lmZGVmIEFDU19UVEVFCisgIGFjc19kZWYoIkFDU19Ub3BfVGVlIiwgJkFDU19UVEVFKTsKKyNlbmRpZgorI2lmZGVmIEFDU19ITElORQorICBhY3NfZGVmKCJBQ1NfSG9yaXpvbnRhbF9MaW5lIiwgJkFDU19ITElORSk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfVkxJTkUKKyAgYWNzX2RlZigiQUNTX1ZlcnRpY2FsX0xpbmUiLCAmQUNTX1ZMSU5FKTsKKyNlbmRpZgorI2lmZGVmIEFDU19QTFVTCisgIGFjc19kZWYoIkFDU19QbHVzX1N5bWJvbCIsICZBQ1NfUExVUyk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfUzEKKyAgYWNzX2RlZigiQUNTX1NjYW5fTGluZV8xIiwgJkFDU19TMSk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfUzkKKyAgYWNzX2RlZigiQUNTX1NjYW5fTGluZV85IiwgJkFDU19TOSk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfRElBTU9ORAorICBhY3NfZGVmKCJBQ1NfRGlhbW9uZCIsICZBQ1NfRElBTU9ORCk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfQ0tCT0FSRAorICBhY3NfZGVmKCJBQ1NfQ2hlY2tlcl9Cb2FyZCIsICZBQ1NfQ0tCT0FSRCk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfREVHUkVFCisgIGFjc19kZWYoIkFDU19EZWdyZWUiLCAmQUNTX0RFR1JFRSk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfUExNSU5VUworICBhY3NfZGVmKCJBQ1NfUGx1c19NaW51cyIsICZBQ1NfUExNSU5VUyk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfQlVMTEVUCisgIGFjc19kZWYoIkFDU19CdWxsZXQiLCAmQUNTX0JVTExFVCk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfTEFSUk9XCisgIGFjc19kZWYoIkFDU19MZWZ0X0Fycm93IiwgJkFDU19MQVJST1cpOworI2VuZGlmCisjaWZkZWYgQUNTX1JBUlJPVworICBhY3NfZGVmKCJBQ1NfUmlnaHRfQXJyb3ciLCAmQUNTX1JBUlJPVyk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfREFSUk9XCisgIGFjc19kZWYoIkFDU19Eb3duX0Fycm93IiwgJkFDU19EQVJST1cpOworI2VuZGlmCisjaWZkZWYgQUNTX1VBUlJPVworICBhY3NfZGVmKCJBQ1NfVXBfQXJyb3ciLCAmQUNTX1VBUlJPVyk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfQk9BUkQKKyAgYWNzX2RlZigiQUNTX0JvYXJkX09mX1NxdWFyZXMiLCAmQUNTX0JPQVJEKTsKKyNlbmRpZgorI2lmZGVmIEFDU19MQU5URVJOCisgIGFjc19kZWYoIkFDU19MYW50ZXJuIiwgJkFDU19MQU5URVJOKTsKKyNlbmRpZgorI2lmZGVmIEFDU19CTE9DSworICBhY3NfZGVmKCJBQ1NfU29saWRfQmxvY2siLCAmQUNTX0JMT0NLKTsKKyNlbmRpZgorI2lmZGVmIEFDU19TMworICBhY3NfZGVmKCJBQ1NfU2Nhbl9MaW5lXzMiLCAmQUNTX1MzKTsKKyNlbmRpZgorI2lmZGVmIEFDU19TNworICBhY3NfZGVmKCJBQ1NfU2Nhbl9MaW5lXzciLCAmQUNTX1M3KTsKKyNlbmRpZgorI2lmZGVmIEFDU19MRVFVQUwKKyAgYWNzX2RlZigiQUNTX0xlc3NfT3JfRXF1YWwiLCAmQUNTX0xFUVVBTCk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfR0VRVUFMCisgIGFjc19kZWYoIkFDU19HcmVhdGVyX09yX0VxdWFsIiwgJkFDU19HRVFVQUwpOworI2VuZGlmCisjaWZkZWYgQUNTX1BJCisgIGFjc19kZWYoIkFDU19QSSIsICZBQ1NfUEkpOworI2VuZGlmCisjaWZkZWYgQUNTX05FUVVBTAorICBhY3NfZGVmKCJBQ1NfTm90X0VxdWFsIiwgJkFDU19ORVFVQUwpOworI2VuZGlmCisjaWZkZWYgQUNTX1NURVJMSU5HCisgIGFjc19kZWYoIkFDU19TdGVybGluZyIsICZBQ1NfU1RFUkxJTkcpOworI2VuZGlmCit9CisKKyNkZWZpbmUgR0VOX0VWRU5UKG5hbWUsdmFsdWUpIFwKKyAgIHByaW50ZigiICAgJS0yNXMgOiBjb25zdGFudCBFdmVudF9NYXNrIDo9IDgjJTAxMWxvIztcbiIsIFwKKyAgICAgICAgICAjbmFtZSwgdmFsdWUpCisKKyNkZWZpbmUgR0VOX01FVkVOVChuYW1lKSBcCisgICBwcmludGYoIiAgICUtMjVzIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSA4IyUwMTFsbyM7XG4iLCBcCisgICAgICAgICAgI25hbWUsIG5hbWUpCisKK3N0YXRpYyB2b2lkCitnZW5fbW91c2VfZXZlbnRzKHZvaWQpCit7CisgIG1tYXNrX3QgYWxsMSA9IDA7CisgIG1tYXNrX3QgYWxsMiA9IDA7CisgIG1tYXNrX3QgYWxsMyA9IDA7CisgIG1tYXNrX3QgYWxsNCA9IDA7CisKKyNpZmRlZiBCVVRUT04xX1JFTEVBU0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMV9SRUxFQVNFRCk7CisgIGFsbDEgfD0gQlVUVE9OMV9SRUxFQVNFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjFfUFJFU1NFRAorICBHRU5fTUVWRU5UKEJVVFRPTjFfUFJFU1NFRCk7CisgIGFsbDEgfD0gQlVUVE9OMV9QUkVTU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMV9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMV9DTElDS0VEKTsKKyAgYWxsMSB8PSBCVVRUT04xX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04xX0RPVUJMRV9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCk7CisgIGFsbDEgfD0gQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04xX1RSSVBMRV9DTElDS0VEKTsKKyAgYWxsMSB8PSBCVVRUT04xX1RSSVBMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMV9SRVNFUlZFRF9FVkVOVAorICBHRU5fTUVWRU5UKEJVVFRPTjFfUkVTRVJWRURfRVZFTlQpOworICBhbGwxIHw9IEJVVFRPTjFfUkVTRVJWRURfRVZFTlQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04yX1JFTEVBU0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMl9SRUxFQVNFRCk7CisgIGFsbDIgfD0gQlVUVE9OMl9SRUxFQVNFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjJfUFJFU1NFRAorICBHRU5fTUVWRU5UKEJVVFRPTjJfUFJFU1NFRCk7CisgIGFsbDIgfD0gQlVUVE9OMl9QUkVTU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMl9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMl9DTElDS0VEKTsKKyAgYWxsMiB8PSBCVVRUT04yX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04yX0RPVUJMRV9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCk7CisgIGFsbDIgfD0gQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjJfVFJJUExFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04yX1RSSVBMRV9DTElDS0VEKTsKKyAgYWxsMiB8PSBCVVRUT04yX1RSSVBMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMl9SRVNFUlZFRF9FVkVOVAorICBHRU5fTUVWRU5UKEJVVFRPTjJfUkVTRVJWRURfRVZFTlQpOworICBhbGwyIHw9IEJVVFRPTjJfUkVTRVJWRURfRVZFTlQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04zX1JFTEVBU0VECisgIEdFTl9NRVZFTlQoQlVUVE9OM19SRUxFQVNFRCk7CisgIGFsbDMgfD0gQlVUVE9OM19SRUxFQVNFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjNfUFJFU1NFRAorICBHRU5fTUVWRU5UKEJVVFRPTjNfUFJFU1NFRCk7CisgIGFsbDMgfD0gQlVUVE9OM19QUkVTU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OM19DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9OM19DTElDS0VEKTsKKyAgYWxsMyB8PSBCVVRUT04zX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04zX0RPVUJMRV9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRCk7CisgIGFsbDMgfD0gQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjNfVFJJUExFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04zX1RSSVBMRV9DTElDS0VEKTsKKyAgYWxsMyB8PSBCVVRUT04zX1RSSVBMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OM19SRVNFUlZFRF9FVkVOVAorICBHRU5fTUVWRU5UKEJVVFRPTjNfUkVTRVJWRURfRVZFTlQpOworICBhbGwzIHw9IEJVVFRPTjNfUkVTRVJWRURfRVZFTlQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT040X1JFTEVBU0VECisgIEdFTl9NRVZFTlQoQlVUVE9ONF9SRUxFQVNFRCk7CisgIGFsbDQgfD0gQlVUVE9ONF9SRUxFQVNFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjRfUFJFU1NFRAorICBHRU5fTUVWRU5UKEJVVFRPTjRfUFJFU1NFRCk7CisgIGFsbDQgfD0gQlVUVE9ONF9QUkVTU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9ONF9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9ONF9DTElDS0VEKTsKKyAgYWxsNCB8PSBCVVRUT040X0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT040X0RPVUJMRV9DTElDS0VECisgIEdFTl9NRVZFTlQoQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCk7CisgIGFsbDQgfD0gQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjRfVFJJUExFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT040X1RSSVBMRV9DTElDS0VEKTsKKyAgYWxsNCB8PSBCVVRUT040X1RSSVBMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9ONF9SRVNFUlZFRF9FVkVOVAorICBHRU5fTUVWRU5UKEJVVFRPTjRfUkVTRVJWRURfRVZFTlQpOworICBhbGw0IHw9IEJVVFRPTjRfUkVTRVJWRURfRVZFTlQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT05fQ1RSTAorICBHRU5fTUVWRU5UKEJVVFRPTl9DVFJMKTsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTl9TSElGVAorICBHRU5fTUVWRU5UKEJVVFRPTl9TSElGVCk7CisjZW5kaWYKKyNpZmRlZiBCVVRUT05fQUxUCisgIEdFTl9NRVZFTlQoQlVUVE9OX0FMVCk7CisjZW5kaWYKKyNpZmRlZiBSRVBPUlRfTU9VU0VfUE9TSVRJT04KKyAgR0VOX01FVkVOVChSRVBPUlRfTU9VU0VfUE9TSVRJT04pOworI2VuZGlmCisjaWZkZWYgQUxMX01PVVNFX0VWRU5UUworICBHRU5fTUVWRU5UKEFMTF9NT1VTRV9FVkVOVFMpOworI2VuZGlmCisKKyAgR0VOX0VWRU5UKEJVVFRPTjFfRVZFTlRTLCBhbGwxKTsKKyAgR0VOX0VWRU5UKEJVVFRPTjJfRVZFTlRTLCBhbGwyKTsKKyAgR0VOX0VWRU5UKEJVVFRPTjNfRVZFTlRTLCBhbGwzKTsKKyAgR0VOX0VWRU5UKEJVVFRPTjRfRVZFTlRTLCBhbGw0KTsKK30KKworc3RhdGljIHZvaWQKK3dyYXBfb25lX3Zhcihjb25zdCBjaGFyICpjX3ZhciwKKwkgICAgIGNvbnN0IGNoYXIgKmNfdHlwZSwKKwkgICAgIGNvbnN0IGNoYXIgKmFkYV9mdW5jLAorCSAgICAgY29uc3QgY2hhciAqYWRhX3R5cGUpCit7CisjaWYgVVNFX1JFRU5UUkFOVAorICAvKiBtdXN0IHdyYXAgdmFyaWFibGVzICovCisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIgICBmdW5jdGlvbiAlcyByZXR1cm4gJXNcbiIsIGFkYV9mdW5jLCBhZGFfdHlwZSk7CisgIHByaW50ZigiICAgaXNcbiIpOworICBwcmludGYoIiAgICAgIGZ1bmN0aW9uIFJlc3VsdCByZXR1cm4gJXM7XG4iLCBjX3R5cGUpOworICBwcmludGYoIiAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJlc3VsdCwgXCJfbmNfJXNcIik7XG4iLCBjX3Zhcik7CisgIHByaW50ZigiICAgYmVnaW5cbiIpOworICBpZiAoc3RyY21wKGNfdHlwZSwgYWRhX3R5cGUpKQorICAgIHByaW50ZigiICAgICAgcmV0dXJuICVzIChSZXN1bHQpO1xuIiwgYWRhX3R5cGUpOworICBlbHNlCisgICAgcHJpbnRmKCIgICAgICByZXR1cm4gUmVzdWx0O1xuIik7CisgIHByaW50ZigiICAgZW5kICVzO1xuIiwgYWRhX2Z1bmMpOworI2Vsc2UKKyAgLyogZ2xvYmFsIHZhcmlhYmxlcyBhcmUgcmVhbGx5IGdsb2JhbCAqLworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiICAgZnVuY3Rpb24gJXMgcmV0dXJuICVzXG4iLCBhZGFfZnVuYywgYWRhX3R5cGUpOworICBwcmludGYoIiAgIGlzXG4iKTsKKyAgcHJpbnRmKCIgICAgICBSZXN1bHQgOiAlcztcbiIsIGNfdHlwZSk7CisgIHByaW50ZigiICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVzdWx0LCBcIiVzXCIpO1xuIiwgY192YXIpOworICBwcmludGYoIiAgIGJlZ2luXG4iKTsKKyAgaWYgKHN0cmNtcChjX3R5cGUsIGFkYV90eXBlKSkKKyAgICBwcmludGYoIiAgICAgIHJldHVybiAlcyAoUmVzdWx0KTtcbiIsIGFkYV90eXBlKTsKKyAgZWxzZQorICAgIHByaW50ZigiICAgICAgcmV0dXJuIFJlc3VsdDtcbiIpOworICBwcmludGYoIiAgIGVuZCAlcztcbiIsIGFkYV9mdW5jKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIEdFTl9QVUJMSUNfVkFSKGNfdmFyLCBjX3R5cGUsIGFkYV9mdW5jLCBhZGFfdHlwZSkgXAorCXdyYXBfb25lX3ZhcigjY192YXIsICNjX3R5cGUsICNhZGFfZnVuYywgI2FkYV90eXBlKQorCitzdGF0aWMgdm9pZAorZ2VuX3B1YmxpY192YXJzKHZvaWQpCit7CisgIEdFTl9QVUJMSUNfVkFSKHN0ZHNjciwgV2luZG93LCBTdGFuZGFyZF9XaW5kb3csIFdpbmRvdyk7CisgIEdFTl9QVUJMSUNfVkFSKGN1cnNjciwgV2luZG93LCBDdXJyZW50X1dpbmRvdywgV2luZG93KTsKKyAgR0VOX1BVQkxJQ19WQVIoTElORVMsIENfSW50LCBMaW5lcywgTGluZV9Db3VudCk7CisgIEdFTl9QVUJMSUNfVkFSKENPTFMsIENfSW50LCBDb2x1bW5zLCBDb2x1bW5fQ291bnQpOworICBHRU5fUFVCTElDX1ZBUihUQUJTSVpFLCBDX0ludCwgVGFiX1NpemUsIE5hdHVyYWwpOworICBHRU5fUFVCTElDX1ZBUihDT0xPUlMsIENfSW50LCBOdW1iZXJfT2ZfQ29sb3JzLCBOYXR1cmFsKTsKKyAgR0VOX1BVQkxJQ19WQVIoQ09MT1JfUEFJUlMsIENfSW50LCBOdW1iZXJfT2ZfQ29sb3JfUGFpcnMsIE5hdHVyYWwpOworfQorCisvKgorICogT3V0cHV0IHNvbWUgY29tbWVudCBsaW5lcyBpbmRpY2F0aW5nIHRoYXQgdGhlIGZpbGUgaXMgZ2VuZXJhdGVkLgorICogVGhlIG5hbWUgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIG9mIHRoZSBmYWNpbGl0eSB0byBiZSB1c2VkIGluCisgKiB0aGUgY29tbWVudC4KKyAqLworc3RhdGljIHZvaWQKK3Byb2xvZ3VlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHByaW50ZigiLS0gICVzIGJpbmRpbmcuXG4iLCBuYW1lKTsKKyAgcHJpbnRmKCItLSAgVGhpcyBtb2R1bGUgaXMgZ2VuZXJhdGVkLiBQbGVhc2UgZG9uJ3QgY2hhbmdlIGl0IG1hbnVhbGx5IVxuIik7CisgIHByaW50ZigiLS0gIFJ1biB0aGUgZ2VuZXJhdG9yIGluc3RlYWQuXG4tLSAgfCIpOworCisgIHByaW50ZigiZGVmaW5lKGBNNF9CSVRfT1JERVInLGAlc19PcmRlcl9GaXJzdCcpIiwKKwkgbGl0dGxlX2VuZGlhbiA/ICJMb3ciIDogIkhpZ2giKTsKK30KKworLyoKKyAqIFdyaXRlIHRoZSBwcm9sb2d1ZSBmb3IgdGhlIGN1cnNlcyBmYWNpbGl0eSBhbmQgbWFrZSBzdXJlIHRoYXQKKyAqIEtFWV9NSU4gYW5kIEtFWV9NQVggYXJlIGRlZmluZWQgZm9yIHRoZSByZXN0IG9mIHRoaXMgc291cmNlLgorICovCitzdGF0aWMgdm9pZAorYmFzZWRlZnModm9pZCkKK3sKKyAgcHJvbG9ndWUoImN1cnNlcyIpOworI2lmbmRlZiBLRVlfTUFYCisjICBkZWZpbmUgS0VZX01BWCAwNzc3CisjZW5kaWYKKyAgcHJpbnRmKCJkZWZpbmUoYE00X0tFWV9NQVgnLGA4IyVvIycpIiwgS0VZX01BWCk7CisjaWZuZGVmIEtFWV9NSU4KKyMgIGRlZmluZSBLRVlfTUlOIDA0MDEKKyNlbmRpZgorICBpZiAoS0VZX01JTiA9PSAyNTYpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIHZhbHVlIGZvciBLRVlfTUlOOiAlZFxuIiwgS0VZX01JTik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgcHJpbnRmKCJkZWZpbmUoYE00X1NQRUNJQUxfRklSU1QnLGA4IyVvIycpIiwgS0VZX01JTiAtIDEpOworfQorCisvKgorICogV3JpdGUgb3V0IHRoZSBjb21tZW50IGxpbmVzIGZvciB0aGUgbWVudSBmYWNpbGl0eQorICovCitzdGF0aWMgdm9pZAorbWVudV9iYXNlZGVmcyh2b2lkKQoreworICBwcm9sb2d1ZSgibWVudSIpOworfQorCisvKgorICogV3JpdGUgb3V0IHRoZSBjb21tZW50IGxpbmVzIGZvciB0aGUgZm9ybSBmYWNpbGl0eQorICovCitzdGF0aWMgdm9pZAorZm9ybV9iYXNlZGVmcyh2b2lkKQoreworICBwcm9sb2d1ZSgiZm9ybSIpOworfQorCisvKgorICogV3JpdGUgb3V0IHRoZSBjb21tZW50IGxpbmVzIGZvciB0aGUgbW91c2UgZmFjaWxpdHkKKyAqLworc3RhdGljIHZvaWQKK21vdXNlX2Jhc2VkZWZzKHZvaWQpCit7CisgIHByb2xvZ3VlKCJtb3VzZSIpOworfQorCisvKgorICogV3JpdGUgdGhlIGRlZmluaXRpb24gb2YgYSBzaW5nbGUgY29sb3IKKyAqLworc3RhdGljIHZvaWQKK2NvbG9yX2RlZihjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCit7CisgIHByaW50ZigiICAgJS0xNnMgOiBjb25zdGFudCBDb2xvcl9OdW1iZXIgOj0gJWQ7XG4iLCBuYW1lLCB2YWx1ZSk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhbGwgY29sb3IgZGVmaW5pdGlvbnMKKyAqLworc3RhdGljIHZvaWQKK2dlbl9jb2xvcih2b2lkKQoreworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisgIGNvbG9yX2RlZigiRGVmYXVsdF9Db2xvciIsIC0xKTsKKyNlbmRpZgorI2lmZGVmIENPTE9SX0JMQUNLCisgIGNvbG9yX2RlZigiQmxhY2siLCBDT0xPUl9CTEFDSyk7CisjZW5kaWYKKyNpZmRlZiBDT0xPUl9SRUQKKyAgY29sb3JfZGVmKCJSZWQiLCBDT0xPUl9SRUQpOworI2VuZGlmCisjaWZkZWYgQ09MT1JfR1JFRU4KKyAgY29sb3JfZGVmKCJHcmVlbiIsIENPTE9SX0dSRUVOKTsKKyNlbmRpZgorI2lmZGVmIENPTE9SX1lFTExPVworICBjb2xvcl9kZWYoIlllbGxvdyIsIENPTE9SX1lFTExPVyk7CisjZW5kaWYKKyNpZmRlZiBDT0xPUl9CTFVFCisgIGNvbG9yX2RlZigiQmx1ZSIsIENPTE9SX0JMVUUpOworI2VuZGlmCisjaWZkZWYgQ09MT1JfTUFHRU5UQQorICBjb2xvcl9kZWYoIk1hZ2VudGEiLCBDT0xPUl9NQUdFTlRBKTsKKyNlbmRpZgorI2lmZGVmIENPTE9SX0NZQU4KKyAgY29sb3JfZGVmKCJDeWFuIiwgQ09MT1JfQ1lBTik7CisjZW5kaWYKKyNpZmRlZiBDT0xPUl9XSElURQorICBjb2xvcl9kZWYoIldoaXRlIiwgQ09MT1JfV0hJVEUpOworI2VuZGlmCit9CisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBiYXNlIGZhY2lsaXR5CisgKi8KK3N0YXRpYyB2b2lkCitnZW5fbGlua29wdHModm9pZCkKK3sKKyAgcHJpbnRmKCIgICBwcmFnbWEgTGlua2VyX09wdGlvbnMgKFwiLWxuY3Vyc2VzJXNcIik7XG4iLCBtb2RlbCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBtZW51IGZhY2lsaXR5CisgKi8KK3N0YXRpYyB2b2lkCitnZW5fbWVudV9saW5rb3B0cyh2b2lkKQoreworICBwcmludGYoIiAgIHByYWdtYSBMaW5rZXJfT3B0aW9ucyAoXCItbG1lbnUlc1wiKTtcbiIsIG1vZGVsKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlIGZvcm0gZmFjaWxpdHkKKyAqLworc3RhdGljIHZvaWQKK2dlbl9mb3JtX2xpbmtvcHRzKHZvaWQpCit7CisgIHByaW50ZigiICAgcHJhZ21hIExpbmtlcl9PcHRpb25zIChcIi1sZm9ybSVzXCIpO1xuIiwgbW9kZWwpOworfQorCisvKgorICogR2VuZXJhdGUgdGhlIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcGFuZWwgZmFjaWxpdHkKKyAqLworc3RhdGljIHZvaWQKK2dlbl9wYW5lbF9saW5rb3B0cyh2b2lkKQoreworICBwcmludGYoIiAgIHByYWdtYSBMaW5rZXJfT3B0aW9ucyAoXCItbHBhbmVsJXNcIik7XG4iLCBtb2RlbCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5fdmVyc2lvbl9pbmZvKHZvaWQpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyICp2MSA9CisgICIgICBOQ19NYWpvcl9WZXJzaW9uIDogY29uc3RhbnQgOj0gJWQ7IC0tICBNYWpvciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5XG4iOworICBzdGF0aWMgY29uc3QgY2hhciAqdjIgPQorICAiICAgTkNfTWlub3JfVmVyc2lvbiA6IGNvbnN0YW50IDo9ICVkOyAtLSAgTWlub3IgdmVyc2lvbiBvZiB0aGUgbGlicmFyeVxuIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnYzID0KKyAgIiAgIE5DX1ZlcnNpb24gOiBjb25zdGFudCBTdHJpbmcgOj0gJWMlZC4lZCVjOyAgLS0gIFZlcnNpb24gb2YgbGlicmFyeVxuIjsKKworICBwcmludGYodjEsIE5DVVJTRVNfVkVSU0lPTl9NQUpPUik7CisgIHByaW50Zih2MiwgTkNVUlNFU19WRVJTSU9OX01JTk9SKTsKKyAgcHJpbnRmKHYzLCAnIicsIE5DVVJTRVNfVkVSU0lPTl9NQUpPUiwgTkNVUlNFU19WRVJTSU9OX01JTk9SLCAnIicpOworfQorCitzdGF0aWMgaW50CitldGlfZ2VuKGNoYXIgKmJ1ZiwgaW50IGNvZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXRpbWluLCBpbnQgKmV0aW1heCkKK3sKKyAgc3ByaW50ZihidWYsICIgICBFXyUtMTZzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9ICVkO1xuIiwgbmFtZSwgY29kZSk7CisgIGlmIChjb2RlIDwgKmV0aW1pbikKKyAgICAqZXRpbWluID0gY29kZTsKKyAgaWYgKGNvZGUgPiAqZXRpbWF4KQorICAgICpldGltYXggPSBjb2RlOworICByZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5fb2Zmc2V0cyh2b2lkKQoreworICBjb25zdCBjaGFyICpzX2Jvb2wgPSAiIjsKKworICBpZiAoc2l6ZW9mKGJvb2wpID09IHNpemVvZihjaGFyKSkKKyAgICB7CisgICAgICBzX2Jvb2wgPSAiY2hhciI7CisgICAgfQorICBlbHNlIGlmIChzaXplb2YoYm9vbCkgPT0gc2l6ZW9mKHNob3J0KSkKKyAgICB7CisgICAgICBzX2Jvb2wgPSAic2hvcnQiOworICAgIH0KKyAgZWxzZSBpZiAoc2l6ZW9mKGJvb2wpID09IHNpemVvZihpbnQpKQorICAgIHsKKyAgICAgIHNfYm9vbCA9ICJpbnQiOworICAgIH0KKyAgcHJpbnRmKCIgICBTaXplb2YlLSpzIDogY29uc3RhbnQgTmF0dXJhbCA6PSAlMmxkOyAtLSAgJXNcbiIsCisJIDEyLCAiX2Jvb2wiLCAobG9uZylzaXplb2YoYm9vbCksICJib29sIik7CisKKyAgLyogSW4gbmN1cnNlcyBfbWF4eSBhbmQgX21heHggbmVlZHMgYW4gb2Zmc2V0IGZvciB0aGUgInB1YmxpYyIKKyAgICogdmFsdWUKKyAgICovCisgIHByaW50ZigiICAgT2Zmc2V0JS0qcyA6IGNvbnN0YW50IE5hdHVyYWwgOj0gJTJkOyAtLSAgJXNcbiIsCisJIDEyLCAiX1hZIiwgMSwgImludCIpOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiICAgdHlwZSBDdXJzZXNfQm9vbCBpcyBtb2QgMiAqKiBJbnRlcmZhY2VzLkMuJXMnU2l6ZTtcbiIsIHNfYm9vbCk7Cit9CisKKy8qCisgKiBtYWluKCkgZXhwZWN0cyB0d28gYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kbGluZSwgYm90aCBzaW5nbGUgY2hhcmFjdGVycy4KKyAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgZGVub3RlcyB0aGUgZmFjaWxpdHkgZm9yIHdoaWNoIHdlIGdlbmVyYXRlIG91dHB1dC4KKyAqIFBvc3NpYmxlIHZhbHVlcyBhcmUKKyAqICAgQiAtIEJhc2UKKyAqICAgTSAtIE1lbnVzCisgKiAgIEYgLSBGb3JtcworICogICBQIC0gUG9pbnRlciBEZXZpY2UgKE1vdXNlKQorICogICBFIC0gRVRJIGJhc2UgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGUgc2Vjb25kIGNoYXJhY3RlciB0aGVuIGRlbm90ZXMgdGhlIHNwZWNpZmljIG91dHB1dCB0aGF0IHNob3VsZCBiZQorICogZ2VuZXJhdGVkIGZvciB0aGUgc2VsZWN0ZWQgZmFjaWxpdHkuCisgKi8KK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBpbnQgeCA9IDB4MTIzNDU2Nzg7CisgIGNoYXIgKnMgPSAoY2hhciAqKSZ4OworCisgIGlmICgqcyA9PSAweDc4KQorICAgIGxpdHRsZV9lbmRpYW4gPSAxOworCisgIGlmIChhcmdjICE9IDQpCisgICAgZXhpdCgxKTsKKyAgbW9kZWwgPSAqKythcmd2OworCisgIHN3aXRjaCAoYXJndlsxXVswXSkKKyAgICB7CisgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlICdCJzoJCQkvKiBUaGUgQmFzZSBmYWNpbGl0eSAqLworICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQorCXsKKwljYXNlICdBJzoJCS8qIGNodHlwZSB0cmFuc2xhdGlvbiBpbnRvIEFkYTk1IHJlY29yZCB0eXBlICovCisJICBnZW5fYXR0cl9zZXQoIkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0Iik7CisJICBicmVhazsKKwljYXNlICdCJzoJCS8qIHdyaXRlIHNvbWUgaW5pdGlhbCBjb21tZW50IGxpbmVzICovCisJICBiYXNlZGVmcygpOworCSAgYnJlYWs7CisJY2FzZSAnQyc6CQkvKiBnZW5lcmF0ZSBjb2xvciBjb25zdGFudHMgKi8KKwkgIGdlbl9jb2xvcigpOworCSAgYnJlYWs7CisJY2FzZSAnRCc6CQkvKiBnZW5lcmF0ZSBkaXNwbGFjZW1lbnRzIG9mIGZpZWxkcyBpbiBXSU5ET1cgc3RydWN0LiAqLworCSAgZ2VuX29mZnNldHMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ0UnOgkJLyogZ2VuZXJhdGUgTW91c2UgRXZlbnQgY29kZXMgKi8KKwkgIGdlbl9tb3VzZV9ldmVudHMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ0snOgkJLyogdHJhbnNsYXRpb24gb2Yga2V5Y29kZXMgKi8KKwkgIGdlbl9rZXlkZWZzKDApOworCSAgYnJlYWs7CisJY2FzZSAnTCc6CQkvKiBnZW5lcmF0ZSB0aGUgTGlua2VyX09wdGlvbnMgcHJhZ21hICovCisJICBnZW5fbGlua29wdHMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ00nOgkJLyogZ2VuZXJhdGUgY29uc3RhbnRzIGZvciB0aGUgQUNTIGNoYXJhY3RlcnMgKi8KKwkgIGdlbl9hY3MoKTsKKwkgIGJyZWFrOworCWNhc2UgJ08nOgkJLyogZ2VuZXJhdGUgZGVmaW5pdGlvbnMgb2YgdGhlIG9sZCBrZXkgY29kZSBuYW1lcyAqLworCSAgZ2VuX2tleWRlZnMoMSk7CisJICBicmVhazsKKwljYXNlICdQJzoJCS8qIGdlbmVyYXRlIGRlZmluaXRpb25zIG9mIHRoZSBwdWJsaWMgdmFyaWFibGVzICovCisJICBnZW5fcHVibGljX3ZhcnMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ1InOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBBdHRyaWJ1dGVkIGNoYXJhY3RlciAqLworCSAgZ2VuX2NodHlwZV9yZXAoIkF0dHJpYnV0ZWRfQ2hhcmFjdGVyIik7CisJICBicmVhazsKKwljYXNlICdUJzoJCS8qIGdlbmVyYXRlIHRoZSBUcmFjZSBpbmZvICovCisJICBnZW5fdHJhY2UoIlRyYWNlX0F0dHJpYnV0ZV9TZXQiKTsKKwkgIGJyZWFrOworCWNhc2UgJ1YnOgkJLyogZ2VuZXJhdGUgdmVyc2lvbiBpbmZvICovCisJICBnZW5fdmVyc2lvbl9pbmZvKCk7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7CisgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlICdNJzoJCQkvKiBUaGUgTWVudSBmYWNpbGl0eSAqLworICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQorCXsKKwljYXNlICdSJzoJCS8qIGdlbmVyYXRlIHJlcHJlc2VudGF0aW9uIGNsYXVzZSBmb3IgTWVudV9PcHRpb25fU2V0ICovCisJICBnZW5fbWVudV9vcHRfcmVwKCJNZW51X09wdGlvbl9TZXQiKTsKKwkgIGJyZWFrOworCWNhc2UgJ0InOgkJLyogd3JpdGUgc29tZSBpbml0aWFsIGNvbW1lbnQgbGluZXMgKi8KKwkgIG1lbnVfYmFzZWRlZnMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ0wnOgkJLyogZ2VuZXJhdGUgdGhlIExpbmtlcl9PcHRpb25zIHByYWdtYSAqLworCSAgZ2VuX21lbnVfbGlua29wdHMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ0knOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBJdGVtX09wdGlvbl9TZXQgKi8KKwkgIGdlbl9pdGVtX29wdF9yZXAoIkl0ZW1fT3B0aW9uX1NldCIpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSAnRic6CQkJLyogVGhlIEZvcm0gZmFjaWxpdHkgKi8KKyAgICAgIHN3aXRjaCAoYXJndlsyXVswXSkKKwl7CisJY2FzZSAnUic6CQkvKiBnZW5lcmF0ZSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIEZvcm1fT3B0aW9uX1NldCAqLworCSAgZ2VuX2Zvcm1fb3B0X3JlcCgiRm9ybV9PcHRpb25fU2V0Iik7CisJICBicmVhazsKKwljYXNlICdCJzoJCS8qIHdyaXRlIHNvbWUgaW5pdGlhbCBjb21tZW50IGxpbmVzICovCisJICBmb3JtX2Jhc2VkZWZzKCk7CisJICBicmVhazsKKwljYXNlICdMJzoJCS8qIGdlbmVyYXRlIHRoZSBMaW5rZXJfT3B0aW9ucyBwcmFnbWEgKi8KKwkgIGdlbl9mb3JtX2xpbmtvcHRzKCk7CisJICBicmVhazsKKwljYXNlICdJJzoJCS8qIGdlbmVyYXRlIHJlcHJlc2VudGF0aW9uIGNsYXVzZSBmb3IgRmllbGRfT3B0aW9uX1NldCAqLworCSAgZ2VuX2ZpZWxkX29wdF9yZXAoIkZpZWxkX09wdGlvbl9TZXQiKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKyAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgJ1AnOgkJCS8qIFRoZSBQb2ludGVyKD1Nb3VzZSkgZmFjaWxpdHkgKi8KKyAgICAgIHN3aXRjaCAoYXJndlsyXVswXSkKKwl7CisJY2FzZSAnQic6CQkvKiB3cml0ZSBzb21lIGluaXRpYWwgY29tbWVudCBsaW5lcyAqLworCSAgbW91c2VfYmFzZWRlZnMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ00nOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBNb3VzZV9FdmVudCAqLworCSAgZ2VuX21yZXBfcmVwKCJNb3VzZV9FdmVudCIpOworCSAgYnJlYWs7CisJY2FzZSAnTCc6CQkvKiBnZW5lcmF0ZSB0aGUgTGlua2VyX09wdGlvbnMgcHJhZ21hICovCisJICBnZW5fcGFuZWxfbGlua29wdHMoKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKyAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgJ0UnOgkJCS8qIGNodHlwZSBzaXplIGRldGVjdGlvbiAqLworICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQorCXsKKwljYXNlICdDJzoKKwkgIHsKKwkgICAgY29uc3QgY2hhciAqZm10ID0gIiAgIHR5cGUgICAgQ19DaHR5cGUgICBpcyBuZXcgJXM7XG4iOworCSAgICBjb25zdCBjaGFyICphZm10ID0gIiAgIHR5cGUgICAgQ19BdHRyVHlwZSBpcyBuZXcgJXM7XG4iOworCisJICAgIGlmIChzaXplb2YoY2h0eXBlKSA9PSBzaXplb2YoaW50KSkKKwkgICAgICB7CisJCWlmIChzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZykpCisJCSAgICBwcmludGYoZm10LCAiQ19VTG9uZyIpOworCisJCWVsc2UKKwkJICBwcmludGYoZm10LCAiQ19VSW50Iik7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChzaXplb2YoY2h0eXBlKSA9PSBzaXplb2YobG9uZykpCisJICAgICAgeworCQlwcmludGYoZm10LCAiQ19VTG9uZyIpOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiRXJyb3JcbiIpOworCisJICAgIGlmIChzaXplb2YoYXR0cl90KSA9PSBzaXplb2YoaW50KSkKKwkgICAgICB7CisJCWlmIChzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZykpCisJCSAgICBwcmludGYoYWZtdCwgIkNfVUxvbmciKTsKKworCQllbHNlCisJCSAgcHJpbnRmKGFmbXQsICJDX1VJbnQiKTsKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKHNpemVvZihhdHRyX3QpID09IHNpemVvZihsb25nKSkKKwkgICAgICB7CisJCXByaW50ZihhZm10LCAiQ19VTG9uZyIpOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiRXJyb3JcbiIpOworCisJICAgIHByaW50ZigiZGVmaW5lKGBDRl9DVVJTRVNfT0snLGAlZCcpIiwgT0spOworCSAgICBwcmludGYoImRlZmluZShgQ0ZfQ1VSU0VTX0VSUicsYCVkJykiLCBFUlIpOworCSAgICBwcmludGYoImRlZmluZShgQ0ZfQ1VSU0VTX1RSVUUnLGAlZCcpIiwgVFJVRSk7CisJICAgIHByaW50ZigiZGVmaW5lKGBDRl9DVVJTRVNfRkFMU0UnLGAlZCcpIiwgRkFMU0UpOworCSAgfQorCSAgYnJlYWs7CisJY2FzZSAnRSc6CisJICB7CisJICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKDIwNDgpOworCSAgICBjaGFyICpwID0gYnVmOworCSAgICBpbnQgZXRpbWluID0gRV9PSzsKKwkgICAgaW50IGV0aW1heCA9IEVfT0s7CisKKwkgICAgaWYgKHApCisJICAgICAgeworCQlwICs9IGV0aV9nZW4ocCwgRV9PSywgIk9rIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX1NZU1RFTV9FUlJPUiwgIlN5c3RlbV9FcnJvciIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9CQURfQVJHVU1FTlQsICJCYWRfQXJndW1lbnQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfUE9TVEVELCAiUG9zdGVkIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX0NPTk5FQ1RFRCwgIkNvbm5lY3RlZCIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9CQURfU1RBVEUsICJCYWRfU3RhdGUiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfTk9fUk9PTSwgIk5vX1Jvb20iLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfTk9UX1BPU1RFRCwgIk5vdF9Qb3N0ZWQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfVU5LTk9XTl9DT01NQU5ELAorCQkJICAgICAiVW5rbm93bl9Db21tYW5kIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX05PX01BVENILCAiTm9fTWF0Y2giLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfTk9UX1NFTEVDVEFCTEUsCisJCQkgICAgICJOb3RfU2VsZWN0YWJsZSIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9OT1RfQ09OTkVDVEVELAorCQkJICAgICAiTm90X0Nvbm5lY3RlZCIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9SRVFVRVNUX0RFTklFRCwKKwkJCSAgICAgIlJlcXVlc3RfRGVuaWVkIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX0lOVkFMSURfRklFTEQsCisJCQkgICAgICJJbnZhbGlkX0ZpZWxkIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX0NVUlJFTlQsCisJCQkgICAgICJDdXJyZW50IiwgJmV0aW1pbiwgJmV0aW1heCk7CisJICAgICAgfQorCSAgICBwcmludGYoIiAgIHN1YnR5cGUgRXRpX0Vycm9yIGlzIENfSW50IHJhbmdlICVkIC4uICVkO1xuXG4iLAorCQkgICBldGltaW4sIGV0aW1heCk7CisJICAgIHByaW50ZihidWYpOworCSAgfQorCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSAnVic6CQkJLyogcGxhaW4gdmVyc2lvbiBkdW1wICovCisgICAgICB7CisJc3dpdGNoIChhcmd2WzJdWzBdKQorCSAgeworCSAgY2FzZSAnMSc6CQkvKiBtYWpvciB2ZXJzaW9uICovCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OX01BSk9SCisJICAgIHByaW50ZigiJWQiLCBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IpOworI2VuZGlmCisJICAgIGJyZWFrOworCSAgY2FzZSAnMic6CQkvKiBtaW5vciB2ZXJzaW9uICovCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OX01JTk9SCisJICAgIHByaW50ZigiJWQiLCBOQ1VSU0VTX1ZFUlNJT05fTUlOT1IpOworI2VuZGlmCisJICAgIGJyZWFrOworCSAgY2FzZSAnMyc6CQkvKiBwYXRjaCBsZXZlbCAqLworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSAorCSAgICBwcmludGYoIiVkIiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyNlbmRpZgorCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIGJyZWFrOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi9odG1sLm00IGIvQWRhOTUvZ2VuL2h0bWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmMjY1MwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi9odG1sLm00CkBAIC0wLDAgKzEsNDAgQEAKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorZG5sIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCitkbmwgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKK2RubCB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorZG5sIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCitkbmwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKK2RubCBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKK2RubCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKK2RubCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorZG5sIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCitkbmwgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorZG5sIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCitkbmwgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCitkbmwgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKK2RubCBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorZG5sIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubAorZG5sICRJZDogaHRtbC5tNCx2IDEuMyAyMDA3LzA5LzAxIDIzOjU5OjU5IHRvbSBFeHAgJAorZGVmaW5lKGBBTkNIT1JJRFgnLGAwJylkbmwKK2RlZmluZShgTUFOUEFHRScsYGRlZmluZShgTUFOUEcnLCQxKWRubAorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL01BTlBHLmh0bWwiPk1BTlBHPC9BPgorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKWRubAorZGVmaW5lKGBBTkNIT1InLGBkZWZpbmUoYEFOQ0hPUklEWCcsaW5jcihBTkNIT1JJRFgpKWRubAorYCMnMUEgTkFNRT0iQUZVYF8nQU5DSE9SSURYImAjJzJkbmwKK2RlZmluZShgQ0ZVTkFNRScsYCQxJylkZWZpbmUoYEFGVU5BTUUnLGAkMicpZG5sCit8JylkbmwKK2RlZmluZShgQUtBJyxgYEFLQSc6IDxBIEhSRUY9Ii4uL21hbi9NQU5QRy5odG1sIj5DRlVOQU1FPC9BPicpZG5sCitkZWZpbmUoYEFMSUFTJyxgYEFLQSc6ICQxJylkbmwKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi9ub3JtYWwubTQgYi9BZGE5NS9nZW4vbm9ybWFsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mjk5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vbm9ybWFsLm00CkBAIC0wLDAgKzEsMzcgQEAKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorZG5sIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCitkbmwgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKK2RubCB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorZG5sIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCitkbmwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKK2RubCBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKK2RubCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKK2RubCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorZG5sIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCitkbmwgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorZG5sIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCitkbmwgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCitkbmwgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKK2RubCBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorZG5sIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubAorZG5sICRJZDogbm9ybWFsLm00LHYgMS4yIDIwMDYvMDQvMjIgMjM6MTY6MTQgdG9tIEV4cCAkCitkZWZpbmUoYE1BTlBBR0UnLGBkZWZpbmUoYE1BTlBHJywkMSlkbmwKK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IE1hbiBwYWdlIE1BTlBHCisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpZG5sCitkZWZpbmUoYEFOQ0hPUicsYGRlZmluZShgQ0ZVTkFNRScsYCQxJylkZWZpbmUoYEFGVU5BTUUnLGAkMicpJ2RubAorfClkbmwKK2RlZmluZShgQUtBJyxgYEFLQSc6IENGVU5BTUUnKWRubAorZGVmaW5lKGBBTElBUycsYGBBS0EnOiAkMScpZG5sCmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGFibGUubTQgYi9BZGE5NS9nZW4vdGFibGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiMDAyNwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi90YWJsZS5tNApAQCAtMCwwICsxLDM1IEBACitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKK2RubCBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorZG5sICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCitkbmwgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKK2RubCBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorZG5sIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCitkbmwgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCitkbmwgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCitkbmwgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKK2RubCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorZG5sIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCitkbmwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKK2RubCBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorZG5sIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorZG5sIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCitkbmwgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKK2RubCBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwKK2RubCAkSWQ6IHRhYmxlLm00LHYgMS4yIDIwMDYvMDQvMjIgMjM6MTY6NDQgdG9tIEV4cCAkCitkZWZpbmUoYEFOQ0hPUklEWCcsYDAnKWRubAorZGVmaW5lKGBNQU5QQUdFJyxgZGVmaW5lKGBNQU5QRycsJDEpJylkbmwKK2RpdmVydCgtMSlkbmwKK2RlZmluZShgQU5DSE9SJyxgZGl2ZXJ0KDApZGVmaW5lKGBBTkNIT1JJRFgnLGluY3IoQU5DSE9SSURYKSlkbmwKKzxUUj48VEQ+JDE8L1REPjxURD48QSBIUkVGPSJIVE1MTkFNRWAjJ0FGVWBfJ0FOQ0hPUklEWCI+JDI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL01BTlBHLmh0bWwiPk1BTlBHPC9BPjwvVEQ+PC9UUj4KK2RpdmVydCgtMSknKQpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjOTM0OAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHMubTQKQEAgLTAsMCArMSwxMDUgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4ICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1ZGUoYEJhc2VfRGVmcycpCit3aXRoIFN5c3RlbTsKK3dpdGggSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOword2l0aCBVbmNoZWNrZWRfQ29udmVyc2lvbjsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eCBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXgpOworCisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworCisgICBzdWJ0eXBlIENfSW50ICAgICAgaXMgSW50ZXJmYWNlcy5DLmludDsKKyAgIHN1YnR5cGUgQ19TaG9ydCAgICBpcyBJbnRlcmZhY2VzLkMuc2hvcnQ7CisgICBzdWJ0eXBlIENfTG9uZ19JbnQgaXMgSW50ZXJmYWNlcy5DLmxvbmc7CisgICBzdWJ0eXBlIENfU2l6ZV9UICAgaXMgSW50ZXJmYWNlcy5DLnNpemVfdDsKKyAgIHN1YnR5cGUgQ19VSW50ICAgICBpcyBJbnRlcmZhY2VzLkMudW5zaWduZWQ7CisgICBzdWJ0eXBlIENfVUxvbmcgICAgaXMgSW50ZXJmYWNlcy5DLnVuc2lnbmVkX2xvbmc7CisgICBzdWJ0eXBlIENfQ2hhcl9QdHIgaXMgSW50ZXJmYWNlcy5DLlN0cmluZ3MuY2hhcnNfcHRyOworICAgdHlwZSAgICBDX1ZvaWRfUHRyIGlzIG5ldyBTeXN0ZW0uQWRkcmVzczsKK2luY2x1ZGUoYENodHlwZV9EZWYnKQorICAgLS0gIFRoaXMgaXMgaG93IHRob3NlIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiBuY3Vyc2VzLiBJIHNlZSB0aGVtIGFsc28KKyAgIC0tICBleGFjdGx5IGxpa2UgdGhpcyBpbiBhbGwgRVRJIGltcGxlbWVudGF0aW9ucyBJIGV2ZXIgdGVzdGVkLiBTbyBpdAorICAgLS0gIGNvdWxkIGJlIHRoYXQgdGhpcyBpcyBxdWl0ZSBnZW5lcmFsLCBidXQgcGxlYXNlIGNoZWNrIHdpdGggeW91ciBjdXJzZXMuCisgICAtLSAgVGhpcyBpcyBjcml0aWNhbCwgYmVjYXVzZSBjdXJzZXMgc29tZXRpbWUgbWl4ZXMgYm9vbGVhbiByZXR1cm5zIHdpdGgKKyAgIC0tICByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgorICAgQ3Vyc2VzX09rICAgIDogY29uc3RhbnQgQ19JbnQgOj0gQ0ZfQ1VSU0VTX09LOworICAgQ3Vyc2VzX0VyciAgIDogY29uc3RhbnQgQ19JbnQgOj0gQ0ZfQ1VSU0VTX0VSUjsKKworICAgQ3Vyc2VzX1RydWUgIDogY29uc3RhbnQgQ19JbnQgOj0gQ0ZfQ1VSU0VTX1RSVUU7CisgICBDdXJzZXNfRmFsc2UgOiBjb25zdGFudCBDX0ludCA6PSBDRl9DVVJTRVNfRkFMU0U7CisKKyAgIC0tICBFdGlfRXJyb3I6IHR5cGUgZm9yIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBtZW51IGFuZCBmb3JtIHN1YnN5c3RlbQoraW5jbHVkZShgRXRpX0RlZnMnKQorICAgcHJvY2VkdXJlIEV0aV9FeGNlcHRpb24gKENvZGUgOiBFdGlfRXJyb3IpOworICAgLS0gIERpc3BhdGNoIHRoZSBlcnJvciBjb2RlIGFuZCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uCisgICAtLQorICAgLS0KKyAgIC0tICBTb21lIGhlbHBlcnMKKyAgIGZ1bmN0aW9uIENodHlwZV9Ub19BdHRyQ2hhciBpcyBuZXcKKyAgICAgVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBDX0NodHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICBmdW5jdGlvbiBBdHRyQ2hhcl9Ub19DaHR5cGUgaXMgbmV3CisgICAgIFVuY2hlY2tlZF9Db252ZXJzaW9uIChTb3VyY2UgPT4gQXR0cmlidXRlZF9DaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgPT4gQ19DaHR5cGUpOworCisgICBmdW5jdGlvbiBBdHRyQ2hhcl9Ub19BdHRyVHlwZSBpcyBuZXcKKyAgICAgVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBBdHRyaWJ1dGVkX0NoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBDX0F0dHJUeXBlKTsKKworICAgZnVuY3Rpb24gQXR0clR5cGVfVG9fQXR0ckNoYXIgaXMgbmV3CisgICAgIFVuY2hlY2tlZF9Db252ZXJzaW9uIChTb3VyY2UgPT4gQ19BdHRyVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisKKyAgIHByb2NlZHVyZSBGaWxsX1N0cmluZyAoQ3AgIDogaW4gIGNoYXJzX3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZyk7CisgICAtLSAgRmlsbCB0aGUgU3RyIHBhcmFtZXRlciB3aXRoIHRoZSBzdHJpbmcgZGVub3RlZCBieSB0aGUgY2hhcnNfcHRyCisgICAtLSAgQy1TdHlsZSBzdHJpbmcuCisKKyAgIGZ1bmN0aW9uIEZpbGxfU3RyaW5nIChDcCA6IGNoYXJzX3B0cikgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBTYW1lIGJ1dCBhcyBmdW5jdGlvbi4KKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTk4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZHMubTQKQEAgLTAsMCArMSwyMzggQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMpOworICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKKyAgIHN1YnR5cGUgQ19JbnQgaXMgSW50ZXJmYWNlcy5DLmludDsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGR0eXBlLjN4JykKKworICAgdHlwZSBGaWVsZF9UeXBlIGlzIGFic3RyYWN0IHRhZ2dlZCBudWxsIHJlY29yZDsKKyAgIC0tICBBYnN0cmFjdCBiYXNlIHR5cGUgZm9yIGFsbCBmaWVsZCB0eXBlcy4gQSBjb25jcmV0ZSBmaWVsZCB0eXBlCisgICAtLSAgaXMgYW4gZXh0ZW5zaW9uIHRoYXQgYWRkcyBzb21lIGRhdGEgZWxlbWVudHMgZGVzY3JpYmluZyBmb3JtYXRzIG9yCisgICAtLSAgYm91bmRhcnkgdmFsdWVzIGZvciB0aGUgdHlwZSBhbmQgdmFsaWRhdGlvbiByb3V0aW5lcy4KKyAgIC0tICBGb3IgdGhlIGJ1aWx0aW4gbG93LWxldmVsIGZpZWxkdHlwZXMsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmVzIGFyZQorICAgLS0gIGFscmVhZHkgZGVmaW5lZCBieSB0aGUgbG93LWxldmVsIEMgbGlicmFyeS4KKyAgIC0tICBUaGUgYnVpbHRpbiB0eXBlcyBsaWtlIEFscGhhIG9yIEFscGhhTnVtZXJpYyBldGMuIGFyZSBkZWZpbmVkIGluCisgICAtLSAgY2hpbGQgcGFja2FnZXMgb2YgdGhpcyBwYWNrYWdlLiBZb3UgbWF5IHVzZSBvbmUgb2YgdGhlbSBhcyBleGFtcGxlCisgICAtLSAgaG93IHRvIGNyZWF0ZSB5b3Ugb3duIGNoaWxkIHBhY2thZ2VzIGZvciBsb3ctbGV2ZWwgZmllbGQgdHlwZXMgdGhhdAorICAgLS0gIHlvdSBtYXkgaGF2ZSBhbHJlYWR5IHdyaXR0ZW4gaW4gQy4KKworICAgdHlwZSBGaWVsZF9UeXBlX0FjY2VzcyBpcyBhY2Nlc3MgYWxsIEZpZWxkX1R5cGUnQ2xhc3M7CisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF90eXBlKCknLGBTZXRfVHlwZScpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCAgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsZF9UeXBlIDogaW4gRmllbGRfVHlwZSkgaXMgYWJzdHJhY3Q7CisgICAtLSAgQUtBCisgICAtLSAgQnV0OiB3ZSBoaWRlIHRoZSB2YXJhcmcgbWVjaGFuaXNtIG9mIHRoZSBDIGludGVyZmFjZS4gWW91IGFsd2F5cworICAgLS0gICAgICAgaGF2ZSB0byBwYXNzIGEgc2luZ2xlIEZpZWxkX1R5cGUgcGFyYW1ldGVyLgorCisgICAtLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gnKQorCisgICAtLSAgQU5DSE9SKGBmaWVsZF90eXBlKCknLGBHZXRfVHlwZScpCisgICBmdW5jdGlvbiBHZXRfVHlwZSAoRmxkIDogaW4gRmllbGQpIHJldHVybiBGaWVsZF9UeXBlX0FjY2VzczsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgZmllbGRfYXJnKCknKQorICAgLS0gIEluIEFkYTk1IHdlIGNhbiBjb21iaW5lIHRoZXNlLiBJZiB5b3UgdHJ5IHRvIHJldHJpZXZlIHRoZSBmaWVsZCB0eXBlCisgICAtLSAgdGhhdCBpcyBub3QgZGVmaW5lZCBhcyBleHRlbnNpb24gb2YgdGhlIGFic3RyYWN0IHRhZ2dlZCB0eXBlIGFib3ZlLAorICAgLS0gIHlvdSB3aWxsIHJhaXNlIGEgRm9ybV9FeGNlcHRpb24uCisgICAtLSAgVGhpcyBpcyBub3QgaW5saW5lZAorCisgICAtLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICB8IFByaXZhdGUgUGFydC4KKyAgIC0tICB8IE1vc3Qgb2YgdGhpcyBpcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNoaWxkIHBhY2thZ2VzLgorICAgLS0gIHwKK3ByaXZhdGUKKyAgIHR5cGUgTWFrZWFyZ19GdW5jdGlvbiBpcyBhY2Nlc3MKKyAgICAgZnVuY3Rpb24gKEFyZ3MgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIFN5c3RlbS5BZGRyZXNzOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE1ha2VhcmdfRnVuY3Rpb24pOworCisgICB0eXBlIENvcHlhcmdfRnVuY3Rpb24gaXMgYWNjZXNzCisgICAgIGZ1bmN0aW9uIChVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIFN5c3RlbS5BZGRyZXNzOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIENvcHlhcmdfRnVuY3Rpb24pOworCisgICB0eXBlIEZyZWVhcmdfRnVuY3Rpb24gaXMgYWNjZXNzCisgICAgIHByb2NlZHVyZSAoVXNyIDogU3lzdGVtLkFkZHJlc3MpOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEZyZWVhcmdfRnVuY3Rpb24pOworCisgICB0eXBlIEZpZWxkX0NoZWNrX0Z1bmN0aW9uIGlzIGFjY2VzcworICAgICBmdW5jdGlvbiAoRmxkIDogRmllbGQ7IFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRmllbGRfQ2hlY2tfRnVuY3Rpb24pOworCisgICB0eXBlIENoYXJfQ2hlY2tfRnVuY3Rpb24gaXMgYWNjZXNzCisgICAgIGZ1bmN0aW9uIChDaCA6IENfSW50OyBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIENoYXJfQ2hlY2tfRnVuY3Rpb24pOworCisgICB0eXBlIENob2ljZV9GdW5jdGlvbiBpcyBhY2Nlc3MKKyAgICAgZnVuY3Rpb24gKEZsZCA6IEZpZWxkOyBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIENob2ljZV9GdW5jdGlvbik7CisKKyAgIC0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwgVGhpcyBtdXN0IGJlIGluIHN5bmMgd2l0aCB0aGUgRklFTERUWVBFIHN0cnVjdHVyZSBpbiBmb3JtLmgKKyAgIC0tICB8CisgICB0eXBlIExvd19MZXZlbF9GaWVsZF9UeXBlIGlzCisgICAgICByZWNvcmQKKyAgICAgICAgIFN0YXR1cyA6ICAgICAgICAgICAgICBJbnRlcmZhY2VzLkMuc2hvcnQ7CisgICAgICAgICBSZWZfQ291bnQgOiAgICAgICAgICAgSW50ZXJmYWNlcy5DLmxvbmc7CisgICAgICAgICBMZWZ0LCBSaWdodCA6ICAgICAgICAgU3lzdGVtLkFkZHJlc3M7CisgICAgICAgICBNYWtlYXJnIDogICAgICAgICAgICAgTWFrZWFyZ19GdW5jdGlvbjsKKyAgICAgICAgIENvcHlhcmcgOiAgICAgICAgICAgICBDb3B5YXJnX0Z1bmN0aW9uOworICAgICAgICAgRnJlZWFyZyA6ICAgICAgICAgICAgIEZyZWVhcmdfRnVuY3Rpb247CisgICAgICAgICBGY2hlY2sgOiAgICAgICAgICAgICAgRmllbGRfQ2hlY2tfRnVuY3Rpb247CisgICAgICAgICBDY2hlY2sgOiAgICAgICAgICAgICAgQ2hhcl9DaGVja19GdW5jdGlvbjsKKyAgICAgICAgIE5leHQsIFByZXYgOiAgICAgICAgICBDaG9pY2VfRnVuY3Rpb247CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIExvd19MZXZlbF9GaWVsZF9UeXBlKTsKKyAgIHR5cGUgQ19GaWVsZF9UeXBlIGlzIGFjY2VzcyBhbGwgTG93X0xldmVsX0ZpZWxkX1R5cGU7CisKKyAgIE51bGxfRmllbGRfVHlwZSAgIDogY29uc3RhbnQgQ19GaWVsZF9UeXBlIDo9IG51bGw7CisKKyAgIC0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwgVGhpcyBmb3VyIGxvdy1sZXZlbCBmaWVsZHR5cGVzIGFyZSB0aGUgb25lcyBhc3NvY2lhdGVkIHdpdGgKKyAgIC0tICB8IGZpZWxkdHlwZXMgaGFuZGxlZCBieSB0aGlzIGJpbmRpbmcuIEFueSBvdGhlciBsb3ctbGV2ZWwgZmllbGR0eXBlCisgICAtLSAgfCB3aWxsIHJlc3VsdCBpbiBhIEZvcm1fRXhjZXB0aW9uIGlzIGZ1bmN0aW9uIEdldF9UeXBlLgorICAgLS0gIHwKKyAgIE1fR2VuZXJpY19UeXBlICAgOiBDX0ZpZWxkX1R5cGUgOj0gbnVsbDsKKyAgIE1fR2VuZXJpY19DaG9pY2UgOiBDX0ZpZWxkX1R5cGUgOj0gbnVsbDsKKyAgIE1fQnVpbHRpbl9Sb3V0ZXIgOiBDX0ZpZWxkX1R5cGUgOj0gbnVsbDsKKyAgIE1fQ2hvaWNlX1JvdXRlciAgOiBDX0ZpZWxkX1R5cGUgOj0gbnVsbDsKKworICAgLS0gIFR3byB3cmFwcGVyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhvc2UgbG93LWxldmVsIGZpZWxkdHlwZXMgZGVmaW5lZAorICAgLS0gIGluIHRoaXMgcGFja2FnZS4KKyAgIGZ1bmN0aW9uIENfQnVpbHRpbl9Sb3V0ZXIgcmV0dXJuIENfRmllbGRfVHlwZTsKKyAgIGZ1bmN0aW9uIENfQ2hvaWNlX1JvdXRlciAgcmV0dXJuIENfRmllbGRfVHlwZTsKKworICAgcHJvY2VkdXJlIFdyYXBfQnVpbHRpbiAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBGaWVsZF9UeXBlJ0NsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0IDogQ19GaWVsZF9UeXBlIDo9IENfQnVpbHRpbl9Sb3V0ZXIpOworICAgLS0gIFRoaXMgcHJvY2VkdXJlIGhhcyB0byBiZSBjYWxsZWQgYnkgdGhlIFNldF9GaWVsZF9UeXBlIGltcGxlbWVudGF0aW9uCisgICAtLSAgZm9yIGJ1aWx0aW4gbG93LWxldmVsIGZpZWxkdHlwZXMgdG8gcmVwbGFjZSBpdCBieSBhbiBBZGE5NQorICAgLS0gIGNvbmZvcm1hbnQgRmllbGRfVHlwZSBvYmplY3QuCisgICAtLSAgVGhlIHBhcmFtZXRlciBDZnQgbXVzdCBiZSBDX0J1aWx0aW5fUm91dGVyIGZvciByZWd1bGFyIGxvdy1sZXZlbAorICAgLS0gIGZpZWxkdHlwZXMgKGxpa2UgVFlQX0FMUEhBIG9yIFRZUF9BTE5VTSkgYW5kIENfQ2hvaWNlX1JvdXRlciBmb3IKKyAgIC0tICBsb3ctbGV2ZWwgZmllbGR0eXBlcyB3aXRjaCBjaG9pY2UgZnVuY3Rpb25zIChsaWtlIFRZUF9FTlVNKS4KKyAgIC0tICBBbnkgb3RoZXIgdmFsdWUgd2lsbCByYWlzZSBhIEZvcm1fRXhjZXB0aW9uLgorCisgICBmdW5jdGlvbiBNYWtlX0FyZyAoQXJncyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gU3lzdGVtLkFkZHJlc3M7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgTWFrZV9BcmcpOworICAgLS0gIFRoaXMgaXMgdGhlIE1ha2VhcmdfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKKyAgIC0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy4KKworICAgZnVuY3Rpb24gQ29weV9BcmcgKFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gU3lzdGVtLkFkZHJlc3M7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgQ29weV9BcmcpOworICAgLS0gIFRoaXMgaXMgdGhlIENvcHlhcmdfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKKyAgIC0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy4KKworICAgcHJvY2VkdXJlIEZyZWVfQXJnIChVc3IgOiBTeXN0ZW0uQWRkcmVzcyk7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRnJlZV9BcmcpOworICAgLS0gIFRoaXMgaXMgdGhlIEZyZWVhcmdfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKKyAgIC0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy4KKworICAgZnVuY3Rpb24gRmllbGRfQ2hlY2tfUm91dGVyIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBGaWVsZF9DaGVja19Sb3V0ZXIpOworICAgLS0gIFRoaXMgaXMgdGhlIEZpZWxkX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzCisgICAtLSAgaW50cm9kdWNlZCB0byB3cmFwIHRoZSBsb3ctbGV2ZWwgdHlwZXMgYnkgYSBGaWVsZF9UeXBlIGRlcml2ZWQKKyAgIC0tICB0eXBlLiBJdCByb3V0ZXMgdGhlIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93LWxldmVsIHZhbGlkYXRpb24KKyAgIC0tICBmdW5jdGlvbi4KKworICAgZnVuY3Rpb24gQ2hhcl9DaGVja19Sb3V0ZXIgKENoIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBDaGFyX0NoZWNrX1JvdXRlcik7CisgICAtLSAgVGhpcyBpcyB0aGUgQ2hhcl9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkCisgICAtLSAgdHlwZS4gSXQgcm91dGVzIHRoZSBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCB2YWxpZGF0aW9uCisgICAtLSAgZnVuY3Rpb24uCisKKyAgIGZ1bmN0aW9uIE5leHRfUm91dGVyIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE5leHRfUm91dGVyKTsKKyAgIC0tICBUaGlzIGlzIHRoZSBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKKyAgIC0tICBpbnRyb2R1Y2VkIHRvIHdyYXAgdGhlIGxvdy1sZXZlbCB0eXBlcyBieSBhIEZpZWxkX1R5cGUgZGVyaXZlZAorICAgLS0gIHR5cGUuIEl0IHJvdXRlcyB0aGUgY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgbmV4dF9jaG9pY2UKKyAgIC0tICBmdW5jdGlvbi4KKworICAgZnVuY3Rpb24gUHJldl9Sb3V0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgUHJldl9Sb3V0ZXIpOworICAgLS0gIFRoaXMgaXMgdGhlIENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkCisgICAtLSAgdHlwZS4gSXQgcm91dGVzIHRoZSBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCBwcmV2X2Nob2ljZQorICAgLS0gIGZ1bmN0aW9uLgorCisgICAtLSAgVGhpcyBpcyB0aGUgQXJndW1lbnQgc3RydWN0dXJlIG1haW50YWluZWQgYnkgYWxsIGxvdy1sZXZlbCBmaWVsZCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgYnkgdGhpcyBiaW5kaW5nLgorICAgdHlwZSBBcmd1bWVudCBpcyByZWNvcmQKKyAgICAgIFR5cCA6IEZpZWxkX1R5cGVfQWNjZXNzOyAgIC0tICB0aGUgRmllbGRfVHlwZSBjcmVhdGluZyB0aGlzIHJlY29yZAorICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3M7ICAgICAgLS0gIG9yaWdpbmFsIGFyZyBmb3IgYnVpbHRpbiBsb3ctbGV2ZWwgdHlwZXMKKyAgICAgIENmdCA6IENfRmllbGRfVHlwZTsgICAgICAgIC0tICB0aGUgb3JpZ2luYWwgbG93LWxldmVsIHR5cGUKKyAgIGVuZCByZWNvcmQ7CisgICB0eXBlIEFyZ3VtZW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIEFyZ3VtZW50OworCisgICAtLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICB8CisgICAtLSAgfCBTb21lIEltcG9ydHMgb2YgbGliZm9ybSByb3V0aW5lcyB0byBkZWFsIHdpdGggbG93LWxldmVsIGZpZWxkdHlwZXMuCisgICAtLSAgfAorICAgZnVuY3Rpb24gTmV3X0ZpZWxkdHlwZSAoRmNoZWNrIDogRmllbGRfQ2hlY2tfRnVuY3Rpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDY2hlY2sgOiBDaGFyX0NoZWNrX0Z1bmN0aW9uKQorICAgICByZXR1cm4gQ19GaWVsZF9UeXBlOworICAgcHJhZ21hIEltcG9ydCAoQywgTmV3X0ZpZWxkdHlwZSwgIm5ld19maWVsZHR5cGUiKTsKKworICAgZnVuY3Rpb24gU2V0X0ZpZWxkdHlwZV9BcmcgKENmdCA6IENfRmllbGRfVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWsgOiBNYWtlYXJnX0Z1bmN0aW9uIDo9IE1ha2VfQXJnJ0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3AgOiBDb3B5YXJnX0Z1bmN0aW9uIDo9IENvcHlfQXJnJ0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmUgOiBGcmVlYXJnX0Z1bmN0aW9uIDo9IEZyZWVfQXJnJ0FjY2VzcykKKyAgICAgcmV0dXJuIENfSW50OworICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkdHlwZV9BcmcsICJzZXRfZmllbGR0eXBlX2FyZyIpOworCisgICBmdW5jdGlvbiBTZXRfRmllbGR0eXBlX0Nob2ljZSAoQ2Z0IDogQ19GaWVsZF9UeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIFByZXYgOiBDaG9pY2VfRnVuY3Rpb24pCisgICAgIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZHR5cGVfQ2hvaWNlLCAic2V0X2ZpZWxkdHlwZV9jaG9pY2UiKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXM7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM5ODgzCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNApAQCAtMCwwICsxLDcwIEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGEgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTUgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWMKKyAgIHR5cGUgVXNlciBpcyBsaW1pdGVkIHByaXZhdGU7CisgICB0eXBlIFVzZXJfQWNjZXNzIGlzIGFjY2VzcyBVc2VyOworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGEpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9maWVsZF91c2VycHRyLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX3VzZXJwdHInLGBTZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Vc2VyX0RhdGEpOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRmxkICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgZmllbGRfdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQorICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoRmxkICA6IGluICBGaWVsZCkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgLS0gIEFLQQorICAgLS0gIFNhbWEgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0NDIwZAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcy5tNApAQCAtMCwwICsxLDcwIEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YSAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpYworICAgdHlwZSBVc2VyIGlzIGxpbWl0ZWQgcHJpdmF0ZTsKKyAgIHR5cGUgVXNlcl9BY2Nlc3MgaXMgYWNjZXNzIFVzZXI7CitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRm9ybV9Vc2VyX0RhdGEgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRm9ybV9Vc2VyX0RhdGEpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV91c2VycHRyLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fdXNlcnB0cicsYFNldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2Vzcyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfVXNlcl9EYXRhKTsKKworICAgLS0gIEFOQ0hPUihgZm9ybV91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRnJtICA6IGluICBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBmb3JtX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEZybSAgOiBpbiAgRm9ybSkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgLS0gIEFLQQorICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjc1ZWRiCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00CkBAIC0wLDAgKzEsNjk5IEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4yOSAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbmNsdWRlKGBGb3JtX0Jhc2VfRGVmcycpCit3aXRoIFN5c3RlbTsKK3dpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zKTsKK2luY2x1ZGUoYEZvcm1fTGlua2VyX09wdGlvbnMnKWRubAoraW5jbHVkZShgTGlua2VyX09wdGlvbnMnKQorICAgU3BhY2UgOiBDaGFyYWN0ZXIgcmVuYW1lcyBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xLlNwYWNlOworCisgICB0eXBlIEZpZWxkICAgICAgICBpcyBwcml2YXRlOworICAgdHlwZSBGb3JtICAgICAgICAgaXMgcHJpdmF0ZTsKKworICAgTnVsbF9GaWVsZCAgICAgICAgOiBjb25zdGFudCBGaWVsZDsKKyAgIE51bGxfRm9ybSAgICAgICAgIDogY29uc3RhbnQgRm9ybTsKKworICAgdHlwZSBGaWVsZF9KdXN0aWZpY2F0aW9uIGlzIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpZ2h0KTsKKworICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworaW5jbHVkZShgRmllbGRfUmVwJylEbmwKKworICAgcHJhZ21hIFdhcm5pbmdzIChPbik7CisKKyAgIGZ1bmN0aW9uIERlZmF1bHRfRmllbGRfT3B0aW9ucyByZXR1cm4gRmllbGRfT3B0aW9uX1NldDsKKyAgIC0tICBUaGUgaW5pdGlhbCBkZWZhdWx0cyBmb3IgdGhlIGZpZWxkIG9wdGlvbnMuCisgICBwcmFnbWEgSW5saW5lIChEZWZhdWx0X0ZpZWxkX09wdGlvbnMpOworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7CitpbmNsdWRlKGBGb3JtX09wdF9SZXAnKURubAorCisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgZnVuY3Rpb24gRGVmYXVsdF9Gb3JtX09wdGlvbnMgcmV0dXJuIEZvcm1fT3B0aW9uX1NldDsKKyAgIC0tICBUaGUgaW5pdGlhbCBkZWZhdWx0cyBmb3IgdGhlIGZvcm0gb3B0aW9ucy4KKyAgIHByYWdtYSBJbmxpbmUgKERlZmF1bHRfRm9ybV9PcHRpb25zKTsKKworICAgdHlwZSBCdWZmZXJfTnVtYmVyIGlzIG5ldyBOYXR1cmFsOworCisgICB0eXBlIEZpZWxkX0FycmF5IGlzIGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgYWxpYXNlZCBGaWVsZDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBGaWVsZF9BcnJheSk7CisKKyAgIHR5cGUgRmllbGRfQXJyYXlfQWNjZXNzIGlzIGFjY2VzcyBGaWVsZF9BcnJheTsKKworICAgcHJvY2VkdXJlIEZyZWUgKEZBICAgICAgICAgIDogaW4gb3V0IEZpZWxkX0FycmF5X0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICBGcmVlX0ZpZWxkcyA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgLS0gIFJlbGVhc2UgdGhlIG1lbW9yeSBmb3IgYW4gYWxsb2NhdGVkIGZpZWxkIGFycmF5CisgICAtLSAgSWYgRnJlZV9GaWVsZHMgaXMgVHJ1ZSwgY2FsbCBEZWxldGUoKSBmb3IgYWxsIHRoZSBmaWVsZHMgaW4KKyAgIC0tICB0aGUgYXJyYXkuCisKKyAgIHN1YnR5cGUgRm9ybV9SZXF1ZXN0X0NvZGUgaXMgS2V5X0NvZGUgcmFuZ2UgKEtleV9NYXggKyAxKSAuLiAoS2V5X01heCArIDU3KTsKKworICAgLS0gIFRoZSBwcmVmaXggRl8gc3RhbmRzIGZvciAiRm9ybSBSZXF1ZXN0IgorICAgRl9OZXh0X1BhZ2UgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTsKKyAgIEZfUHJldmlvdXNfUGFnZSAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDI7CisgICBGX0ZpcnN0X1BhZ2UgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzOworICAgRl9MYXN0X1BhZ2UgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDsKKworICAgRl9OZXh0X0ZpZWxkICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTsKKyAgIEZfUHJldmlvdXNfRmllbGQgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDY7CisgICBGX0ZpcnN0X0ZpZWxkICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA3OworICAgRl9MYXN0X0ZpZWxkICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgODsKKyAgIEZfU29ydGVkX05leHRfRmllbGQgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDk7CisgICBGX1NvcnRlZF9QcmV2aW91c19GaWVsZCAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxMDsKKyAgIEZfU29ydGVkX0ZpcnN0X0ZpZWxkICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDExOworICAgRl9Tb3J0ZWRfTGFzdF9GaWVsZCAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTI7CisgICBGX0xlZnRfRmllbGQgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxMzsKKyAgIEZfUmlnaHRfRmllbGQgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE0OworICAgRl9VcF9GaWVsZCAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTU7CisgICBGX0Rvd25fRmllbGQgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxNjsKKworICAgRl9OZXh0X0NoYXIgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTc7CisgICBGX1ByZXZpb3VzX0NoYXIgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxODsKKyAgIEZfTmV4dF9MaW5lICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE5OworICAgRl9QcmV2aW91c19MaW5lICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjA7CisgICBGX05leHRfV29yZCAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyMTsKKyAgIEZfUHJldmlvdXNfV29yZCAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDIyOworICAgRl9CZWdpbl9GaWVsZCAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjM7CisgICBGX0VuZF9GaWVsZCAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyNDsKKyAgIEZfQmVnaW5fTGluZSAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDI1OworICAgRl9FbmRfTGluZSAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjY7CisgICBGX0xlZnRfQ2hhciAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyNzsKKyAgIEZfUmlnaHRfQ2hhciAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDI4OworICAgRl9VcF9DaGFyICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjk7CisgICBGX0Rvd25fQ2hhciAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzMDsKKworICAgRl9OZXdfTGluZSAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMzE7CisgICBGX0luc2VydF9DaGFyICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzMjsKKyAgIEZfSW5zZXJ0X0xpbmUgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDMzOworICAgRl9EZWxldGVfQ2hhciAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMzQ7CisgICBGX0RlbGV0ZV9QcmV2aW91cyAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzNTsKKyAgIEZfRGVsZXRlX0xpbmUgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDM2OworICAgRl9EZWxldGVfV29yZCAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMzc7CisgICBGX0NsZWFyX0VPTCAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzODsKKyAgIEZfQ2xlYXJfRU9GICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDM5OworICAgRl9DbGVhcl9GaWVsZCAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDA7CisgICBGX092ZXJsYXlfTW9kZSAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0MTsKKyAgIEZfSW5zZXJ0X01vZGUgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDQyOworCisgICAtLSAgVmVydGljYWwgU2Nyb2xsaW5nCisgICBGX1Njcm9sbEZvcndhcmRfTGluZSAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0MzsKKyAgIEZfU2Nyb2xsQmFja3dhcmRfTGluZSAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDQ0OworICAgRl9TY3JvbGxGb3J3YXJkX1BhZ2UgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDU7CisgICBGX1Njcm9sbEJhY2t3YXJkX1BhZ2UgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0NjsKKyAgIEZfU2Nyb2xsRm9yd2FyZF9IYWxmUGFnZSAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDQ3OworICAgRl9TY3JvbGxCYWNrd2FyZF9IYWxmUGFnZSAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDg7CisKKyAgIC0tICBIb3Jpem9udGFsIFNjcm9sbGluZworICAgRl9IU2Nyb2xsRm9yd2FyZF9DaGFyICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDk7CisgICBGX0hTY3JvbGxCYWNrd2FyZF9DaGFyICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA1MDsKKyAgIEZfSFNjcm9sbEZvcndhcmRfTGluZSAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDUxOworICAgRl9IU2Nyb2xsQmFja3dhcmRfTGluZSAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTI7CisgICBGX0hTY3JvbGxGb3J3YXJkX0hhbGZMaW5lICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA1MzsKKyAgIEZfSFNjcm9sbEJhY2t3YXJkX0hhbGZMaW5lIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDU0OworCisgICBGX1ZhbGlkYXRlX0ZpZWxkICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA1NTsKKyAgIEZfTmV4dF9DaG9pY2UgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDU2OworICAgRl9QcmV2aW91c19DaG9pY2UgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTc7CisKKyAgIC0tICBGb3IgdGhvc2Ugd2hvIGxpa2UgdGhlIG9sZCAnQycgc3R5bGUgcmVxdWVzdCBuYW1lcworICAgUkVRX05FWFRfUEFHRSAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9OZXh0X1BhZ2U7CisgICBSRVFfUFJFVl9QQUdFICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ByZXZpb3VzX1BhZ2U7CisgICBSRVFfRklSU1RfUEFHRSAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0ZpcnN0X1BhZ2U7CisgICBSRVFfTEFTVF9QQUdFICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0xhc3RfUGFnZTsKKworICAgUkVRX05FWFRfRklFTEQgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9OZXh0X0ZpZWxkOworICAgUkVRX1BSRVZfRklFTEQgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9QcmV2aW91c19GaWVsZDsKKyAgIFJFUV9GSVJTVF9GSUVMRCAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRmlyc3RfRmllbGQ7CisgICBSRVFfTEFTVF9GSUVMRCAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0xhc3RfRmllbGQ7CisgICBSRVFfU05FWFRfRklFTEQgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1NvcnRlZF9OZXh0X0ZpZWxkOworICAgUkVRX1NQUkVWX0ZJRUxEICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9Tb3J0ZWRfUHJldmlvdXNfRmllbGQ7CisgICBSRVFfU0ZJUlNUX0ZJRUxEIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1NvcnRlZF9GaXJzdF9GaWVsZDsKKyAgIFJFUV9TTEFTVF9GSUVMRCAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU29ydGVkX0xhc3RfRmllbGQ7CisgICBSRVFfTEVGVF9GSUVMRCAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0xlZnRfRmllbGQ7CisgICBSRVFfUklHSFRfRklFTEQgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1JpZ2h0X0ZpZWxkOworICAgUkVRX1VQX0ZJRUxEICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9VcF9GaWVsZDsKKyAgIFJFUV9ET1dOX0ZJRUxEICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRG93bl9GaWVsZDsKKworICAgUkVRX05FWFRfQ0hBUiAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9OZXh0X0NoYXI7CisgICBSRVFfUFJFVl9DSEFSICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ByZXZpb3VzX0NoYXI7CisgICBSRVFfTkVYVF9MSU5FICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX05leHRfTGluZTsKKyAgIFJFUV9QUkVWX0xJTkUgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfUHJldmlvdXNfTGluZTsKKyAgIFJFUV9ORVhUX1dPUkQgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTmV4dF9Xb3JkOworICAgUkVRX1BSRVZfV09SRCAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9QcmV2aW91c19Xb3JkOworICAgUkVRX0JFR19GSUVMRCAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9CZWdpbl9GaWVsZDsKKyAgIFJFUV9FTkRfRklFTEQgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRW5kX0ZpZWxkOworICAgUkVRX0JFR19MSU5FICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9CZWdpbl9MaW5lOworICAgUkVRX0VORF9MSU5FICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9FbmRfTGluZTsKKyAgIFJFUV9MRUZUX0NIQVIgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTGVmdF9DaGFyOworICAgUkVRX1JJR0hUX0NIQVIgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9SaWdodF9DaGFyOworICAgUkVRX1VQX0NIQVIgICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9VcF9DaGFyOworICAgUkVRX0RPV05fQ0hBUiAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9Eb3duX0NoYXI7CisKKyAgIFJFUV9ORVdfTElORSAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTmV3X0xpbmU7CisgICBSRVFfSU5TX0NIQVIgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0luc2VydF9DaGFyOworICAgUkVRX0lOU19MSU5FICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9JbnNlcnRfTGluZTsKKyAgIFJFUV9ERUxfQ0hBUiAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRGVsZXRlX0NoYXI7CisgICBSRVFfREVMX1BSRVYgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0RlbGV0ZV9QcmV2aW91czsKKyAgIFJFUV9ERUxfTElORSAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRGVsZXRlX0xpbmU7CisgICBSRVFfREVMX1dPUkQgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0RlbGV0ZV9Xb3JkOworICAgUkVRX0NMUl9FT0wgICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9DbGVhcl9FT0w7CisgICBSRVFfQ0xSX0VPRiAgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0NsZWFyX0VPRjsKKyAgIFJFUV9DTFJfRklFTEQgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfQ2xlYXJfRmllbGQ7CisgICBSRVFfT1ZMX01PREUgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX092ZXJsYXlfTW9kZTsKKyAgIFJFUV9JTlNfTU9ERSAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfSW5zZXJ0X01vZGU7CisKKyAgIFJFUV9TQ1JfRkxJTkUgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU2Nyb2xsRm9yd2FyZF9MaW5lOworICAgUkVRX1NDUl9CTElORSAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9TY3JvbGxCYWNrd2FyZF9MaW5lOworICAgUkVRX1NDUl9GUEFHRSAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9TY3JvbGxGb3J3YXJkX1BhZ2U7CisgICBSRVFfU0NSX0JQQUdFICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1Njcm9sbEJhY2t3YXJkX1BhZ2U7CisgICBSRVFfU0NSX0ZIUEFHRSAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1Njcm9sbEZvcndhcmRfSGFsZlBhZ2U7CisgICBSRVFfU0NSX0JIUEFHRSAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1Njcm9sbEJhY2t3YXJkX0hhbGZQYWdlOworCisgICBSRVFfU0NSX0ZDSEFSICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0hTY3JvbGxGb3J3YXJkX0NoYXI7CisgICBSRVFfU0NSX0JDSEFSICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0hTY3JvbGxCYWNrd2FyZF9DaGFyOworICAgUkVRX1NDUl9IRkxJTkUgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9IU2Nyb2xsRm9yd2FyZF9MaW5lOworICAgUkVRX1NDUl9IQkxJTkUgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9IU2Nyb2xsQmFja3dhcmRfTGluZTsKKyAgIFJFUV9TQ1JfSEZIQUxGICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfSFNjcm9sbEZvcndhcmRfSGFsZkxpbmU7CisgICBSRVFfU0NSX0hCSEFMRiAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0hTY3JvbGxCYWNrd2FyZF9IYWxmTGluZTsKKworICAgUkVRX1ZBTElEQVRJT04gICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9WYWxpZGF0ZV9GaWVsZDsKKyAgIFJFUV9ORVhUX0NIT0lDRSAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTmV4dF9DaG9pY2U7CisgICBSRVFfUFJFVl9DSE9JQ0UgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ByZXZpb3VzX0Nob2ljZTsKKworICAgcHJvY2VkdXJlIFJlcXVlc3RfTmFtZSAoS2V5ICA6IGluIEZvcm1fUmVxdWVzdF9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpOworCisgICBmdW5jdGlvbiAgUmVxdWVzdF9OYW1lIChLZXkgOiBGb3JtX1JlcXVlc3RfQ29kZSkgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChSZXF1ZXN0X05hbWUpOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICBFeGNlcHRpb25zICAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICBGb3JtX0V4Y2VwdGlvbiA6IGV4Y2VwdGlvbjsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfbmV3LjN4JykKKworICAgLS0gIEFOQ0hPUihgbmV3X2ZpZWxkKCknLGBDcmVhdGUnKQorICAgZnVuY3Rpb24gQ3JlYXRlIChIZWlnaHQgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICBXaWR0aCAgICAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIFRvcCAgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIExlZnQgICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgT2ZmX1NjcmVlbiAgIDogTmF0dXJhbCA6PSAwOworICAgICAgICAgICAgICAgICAgICBNb3JlX0J1ZmZlcnMgOiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZDsKKyAgIC0tICBBS0EKKyAgIC0tICBBbiBvdmVybG9hZGVkIENyZWF0ZSBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmUuCisKKyAgIC0tICBBTkNIT1IoYG5ld19maWVsZCgpJyxgTmV3X0ZpZWxkJykKKyAgIGZ1bmN0aW9uIE5ld19GaWVsZCAoSGVpZ2h0ICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgV2lkdGggICAgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICBUb3AgICAgICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBMZWZ0ICAgICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIE9mZl9TY3JlZW4gICA6IE5hdHVyYWwgOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgTW9yZV9CdWZmZXJzIDogQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmllbGQgcmVuYW1lcyBDcmVhdGU7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChOZXdfRmllbGQpOworCisgICAtLSAgQU5DSE9SKGBmcmVlX2ZpZWxkKCknLGBEZWxldGUnKQorICAgcHJvY2VkdXJlIERlbGV0ZSAoRmxkIDogaW4gb3V0IEZpZWxkKTsKKyAgIC0tICBBS0EKKyAgIC0tICBSZXNldCBGbGQgdG8gTnVsbF9GaWVsZAorICAgLS0gIEFuIG92ZXJsb2FkZWQgRGVsZXRlIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZS4KKworICAgLS0gIEFOQ0hPUihgZHVwX2ZpZWxkKCknLGBEdXBsaWNhdGUnKQorICAgZnVuY3Rpb24gRHVwbGljYXRlIChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgIFRvcCAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBMZWZ0IDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gRmllbGQ7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChEdXBsaWNhdGUpOworCisgICAtLSAgQU5DSE9SKGBsaW5rX2ZpZWxkKCknLGBMaW5rJykKKyAgIGZ1bmN0aW9uIExpbmsgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgIFRvcCAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgTGVmdCA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIEZpZWxkOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoTGluayk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX2p1c3QuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfanVzdCgpJyxgU2V0X0p1c3RpZmljYXRpb24nKQorICAgcHJvY2VkdXJlIFNldF9KdXN0aWZpY2F0aW9uIChGbGQgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1c3QgOiBpbiBGaWVsZF9KdXN0aWZpY2F0aW9uIDo9IE5vbmUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0p1c3RpZmljYXRpb24pOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF9qdXN0KCknLGBHZXRfSnVzdGlmaWNhdGlvbicpCisgICBmdW5jdGlvbiBHZXRfSnVzdGlmaWNhdGlvbiAoRmxkIDogRmllbGQpIHJldHVybiBGaWVsZF9KdXN0aWZpY2F0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X0p1c3RpZmljYXRpb24pOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9maWVsZF9idWZmZXIuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfYnVmZmVyKCknLGBTZXRfQnVmZmVyJykKKyAgIHByb2NlZHVyZSBTZXRfQnVmZmVyCisgICAgIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgIEJ1ZmZlciA6IGluIEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdDsKKyAgICAgIFN0ciAgICA6IGluIFN0cmluZyk7CisgICAtLSAgQUtBCisgICAtLSAgTm90IGlubGluZWQKKworICAgLS0gIEFOQ0hPUihgZmllbGRfYnVmZmVyKCknLGBHZXRfQnVmZmVyJykKKyAgIHByb2NlZHVyZSBHZXRfQnVmZmVyCisgICAgIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgIEJ1ZmZlciA6IGluIEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdDsKKyAgICAgIFN0ciAgICA6IG91dCBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICBmdW5jdGlvbiBHZXRfQnVmZmVyCisgICAgIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgIEJ1ZmZlciA6IGluIEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdCkgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGJ1dCBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoR2V0X0J1ZmZlcik7CisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9zdGF0dXMoKScsYFNldF9TdGF0dXMnKQorICAgcHJvY2VkdXJlIFNldF9TdGF0dXMgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfU3RhdHVzKTsKKworICAgLS0gIEFOQ0hPUihgZmllbGRfc3RhdHVzKCknLGBDaGFuZ2VkJykKKyAgIGZ1bmN0aW9uIENoYW5nZWQgKEZsZCA6IEZpZWxkKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENoYW5nZWQpOworCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfbWF4KCknLGBTZXRfTWF4aW11bV9TaXplJykKKyAgIHByb2NlZHVyZSBTZXRfTWF4aW11bV9TaXplIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggOiBpbiBOYXR1cmFsIDo9IDApOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X01heGltdW1fU2l6ZSk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX29wdHMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfb3B0cygpJyxgU2V0X09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChGbGQgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGaWVsZF9PcHRpb25fU2V0KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBbiBvdmVybG9hZGVkIHZlcnNpb24gaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlCisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX29wdHNfb24oKScsYFN3aXRjaF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoRmxkICAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRmllbGRfT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGZpZWxkX29wdHNfb2ZmKCknKQorICAgLS0gIEFuIG92ZXJsb2FkZWQgdmVyc2lvbiBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmUKKworICAgLS0gIEFOQ0hPUihgZmllbGRfb3B0cygpJyxgR2V0X09wdGlvbnMnKQorICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChGbGQgICAgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEZpZWxkX09wdGlvbl9TZXQpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBmaWVsZF9vcHRzKCknLGBHZXRfT3B0aW9ucycpCisgICBmdW5jdGlvbiBHZXRfT3B0aW9ucyAoRmxkIDogRmllbGQgOj0gTnVsbF9GaWVsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRfT3B0aW9uX1NldDsKKyAgIC0tICBBS0EKKyAgIC0tICBBbiBvdmVybG9hZGVkIHZlcnNpb24gaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlCisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfZm9yZSgpJyxgU2V0X0ZvcmVncm91bmQnKQorICAgcHJvY2VkdXJlIFNldF9Gb3JlZ3JvdW5kCisgICAgIChGbGQgICA6IGluIEZpZWxkOworICAgICAgRm9yZSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRm9yZWdyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2ZvcmUoKScsYEZvcmVncm91bmQnKQorICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKEZsZCAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2ZvcmUoKScsYEZvcmVncm91bmQnKQorICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKEZsZCAgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRm9yZWdyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9iYWNrKCknLGBTZXRfQmFja2dyb3VuZCcpCisgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKKyAgICAgKEZsZCAgIDogaW4gRmllbGQ7CisgICAgICBCYWNrICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9CYWNrZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgZmllbGRfYmFjaygpJyxgQmFja2dyb3VuZCcpCisgICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoRmxkICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgZmllbGRfYmFjaygpJyxgQmFja2dyb3VuZCcpCisgICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoRmxkICAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChCYWNrZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX3BhZCgpJyxgU2V0X1BhZF9DaGFyYWN0ZXInKQorICAgcHJvY2VkdXJlIFNldF9QYWRfQ2hhcmFjdGVyIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogaW4gQ2hhcmFjdGVyIDo9IFNwYWNlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9QYWRfQ2hhcmFjdGVyKTsKKworICAgLS0gIEFOQ0hPUihgZmllbGRfcGFkKCknLGBQYWRfQ2hhcmFjdGVyJykKKyAgIHByb2NlZHVyZSBQYWRfQ2hhcmFjdGVyIChGbGQgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogb3V0IENoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChQYWRfQ2hhcmFjdGVyKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfaW5mby4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2luZm8oKScsYEluZm8nKQorICAgcHJvY2VkdXJlIEluZm8gKEZsZCAgICAgICAgICAgICAgICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICBMaW5lcyAgICAgICAgICAgICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW5zICAgICAgICAgICAgOiBvdXQgQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgIEZpcnN0X1JvdyAgICAgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIEZpcnN0X0NvbHVtbiAgICAgICA6IG91dCBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgT2ZmX1NjcmVlbiAgICAgICAgIDogb3V0IE5hdHVyYWw7CisgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbF9CdWZmZXJzIDogb3V0IEJ1ZmZlcl9OdW1iZXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSW5mbyk7CisKKyAgIC0tICBBTkNIT1IoYGR5bmFtaWNfZmllbGRfaW5mbygpJyxgRHluYW1pY19JbmZvJykKKyAgIHByb2NlZHVyZSBEeW5hbWljX0luZm8gKEZsZCAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4ICAgICA6IG91dCBOYXR1cmFsKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKER5bmFtaWNfSW5mbyk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX3dpbi4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9mb3JtX3dpbigpJyxgU2V0X1dpbmRvdycpCisgICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoRnJtIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fd2luKCknLGBHZXRfV2luZG93JykKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgKEZybSA6IEZvcm0pIHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fc3ViKCknLGBTZXRfU3ViX1dpbmRvdycpCisgICBwcm9jZWR1cmUgU2V0X1N1Yl9XaW5kb3cgKEZybSA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfU3ViX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fc3ViKCknLGBHZXRfU3ViX1dpbmRvdycpCisgICBmdW5jdGlvbiBHZXRfU3ViX1dpbmRvdyAoRnJtIDogRm9ybSkgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9TdWJfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgc2NhbGVfZm9ybSgpJyxgU2NhbGUnKQorICAgcHJvY2VkdXJlIFNjYWxlIChGcm0gICAgIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTY2FsZSk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2hvb2suM3gnKQorCisgICB0eXBlIEZvcm1fSG9va19GdW5jdGlvbiBpcyBhY2Nlc3MgcHJvY2VkdXJlIChGcm0gOiBpbiBGb3JtKTsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBGb3JtX0hvb2tfRnVuY3Rpb24pOworCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfaW5pdCgpJyxgU2V0X0ZpZWxkX0luaXRfSG9vaycpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX0luaXRfSG9vayAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfSW5pdF9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX3Rlcm0oKScsYFNldF9GaWVsZF9UZXJtX0hvb2snKQorICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UZXJtX0hvb2sgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1Rlcm1fSG9vayk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9mb3JtX2luaXQoKScsYFNldF9Gb3JtX0luaXRfSG9vaycpCisgICBwcm9jZWR1cmUgU2V0X0Zvcm1fSW5pdF9Ib29rIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0Zvcm1fSW5pdF9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fdGVybSgpJyxgU2V0X0Zvcm1fVGVybV9Ib29rJykKKyAgIHByb2NlZHVyZSBTZXRfRm9ybV9UZXJtX0hvb2sgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRm9ybV9UZXJtX0hvb2spOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF9pbml0KCknLGBHZXRfRmllbGRfSW5pdF9Ib29rJykKKyAgIGZ1bmN0aW9uIEdldF9GaWVsZF9Jbml0X0hvb2sgKEZybSA6IEZvcm0pIHJldHVybiBGb3JtX0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfRmllbGRfSW5pdF9Ib29rLCAiZmllbGRfaW5pdCIpOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF90ZXJtKCknLGBHZXRfRmllbGRfVGVybV9Ib29rJykKKyAgIGZ1bmN0aW9uIEdldF9GaWVsZF9UZXJtX0hvb2sgKEZybSA6IEZvcm0pIHJldHVybiBGb3JtX0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfRmllbGRfVGVybV9Ib29rLCAiZmllbGRfdGVybSIpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX2luaXQoKScsYEdldF9Gb3JtX0luaXRfSG9vaycpCisgICBmdW5jdGlvbiBHZXRfRm9ybV9Jbml0X0hvb2sgKEZybSA6IEZvcm0pIHJldHVybiBGb3JtX0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfRm9ybV9Jbml0X0hvb2ssICJmb3JtX2luaXQiKTsKKworICAgLS0gIEFOQ0hPUihgZm9ybV90ZXJtKCknLGBHZXRfRm9ybV9UZXJtX0hvb2snKQorICAgZnVuY3Rpb24gR2V0X0Zvcm1fVGVybV9Ib29rIChGcm0gOiBGb3JtKSByZXR1cm4gRm9ybV9Ib29rX0Z1bmN0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X0Zvcm1fVGVybV9Ib29rLCAiZm9ybV90ZXJtIik7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fZmllbGRzKCknLGBSZWRlZmluZScpCisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBGbGRzIDogaW4gRmllbGRfQXJyYXlfQWNjZXNzKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlZGVmaW5lKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fZmllbGRzKCknLGBTZXRfRmllbGRzJykKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRzIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbGRzIDogaW4gRmllbGRfQXJyYXlfQWNjZXNzKSByZW5hbWVzIFJlZGVmaW5lOworICAgLS0gIEFLQQorICAgLS0gIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZHMpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX2ZpZWxkcygpJyxgRmllbGRzJykKKyAgIGZ1bmN0aW9uIEZpZWxkcyAoRnJtICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICBJbmRleCA6IFBvc2l0aXZlKSByZXR1cm4gRmllbGQ7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChGaWVsZHMpOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF9jb3VudCgpJyxgRmllbGRfQ291bnQnKQorICAgZnVuY3Rpb24gRmllbGRfQ291bnQgKEZybSA6IEZvcm0pIHJldHVybiBOYXR1cmFsOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRmllbGRfQ291bnQpOworCisgICAtLSAgQU5DSE9SKGBtb3ZlX2ZpZWxkKCknLGBNb3ZlJykKKyAgIHByb2NlZHVyZSBNb3ZlIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChNb3ZlKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fbmV3LjN4JykKKworICAgLS0gIEFOQ0hPUihgbmV3X2Zvcm0oKScsYENyZWF0ZScpCisgICBmdW5jdGlvbiBDcmVhdGUgKEZpZWxkcyA6IEZpZWxkX0FycmF5X0FjY2VzcykgcmV0dXJuIEZvcm07CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDcmVhdGUpOworCisgICAtLSAgQU5DSE9SKGBuZXdfZm9ybSgpJyxgTmV3X0Zvcm0nKQorICAgZnVuY3Rpb24gTmV3X0Zvcm0gKEZpZWxkcyA6IEZpZWxkX0FycmF5X0FjY2VzcykgcmV0dXJuIEZvcm0KKyAgICAgcmVuYW1lcyBDcmVhdGU7CisgICAtLSAgQUtBCisgICAtLSAgcHJhZ21hIElubGluZSAoTmV3X0Zvcm0pOworCisgICAtLSAgQU5DSE9SKGBmcmVlX2Zvcm0oKScsYERlbGV0ZScpCisgICBwcm9jZWR1cmUgRGVsZXRlIChGcm0gOiBpbiBvdXQgRm9ybSk7CisgICAtLSAgQUtBCisgICAtLSAgUmVzZXQgRnJtIHRvIE51bGxfRm9ybQorICAgcHJhZ21hIElubGluZSAoRGVsZXRlKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fb3B0cy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9mb3JtX29wdHMoKScsYFNldF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoRnJtICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGb3JtX09wdGlvbl9TZXQpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X09wdGlvbnMpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX29wdHNfb24oKScsYFN3aXRjaF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoRnJtICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGb3JtX09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBmb3JtX29wdHNfb2ZmKCknKQorICAgcHJhZ21hIElubGluZSAoU3dpdGNoX09wdGlvbnMpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX29wdHMoKScsYEdldF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoRnJtICAgICA6IGluICBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEZvcm1fT3B0aW9uX1NldCk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGZvcm1fb3B0cygpJyxgR2V0X09wdGlvbnMnKQorICAgZnVuY3Rpb24gR2V0X09wdGlvbnMgKEZybSA6IEZvcm0gOj0gTnVsbF9Gb3JtKSByZXR1cm4gRm9ybV9PcHRpb25fU2V0OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X09wdGlvbnMpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9wb3N0LjN4JykKKworICAgLS0gIEFOQ0hPUihgcG9zdF9mb3JtKCknLGBQb3N0JykKKyAgIHByb2NlZHVyZSBQb3N0IChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICBQb3N0IDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgdW5wb3N0X2Zvcm0oKScpCisgICBwcmFnbWEgSW5saW5lIChQb3N0KTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fY3Vyc29yLjN4JykKKworICAgLS0gIEFOQ0hPUihgcG9zX2Zvcm1fY3Vyc29yKCknLGBQb3NpdGlvbl9DdXJzb3InKQorICAgcHJvY2VkdXJlIFBvc2l0aW9uX0N1cnNvciAoRnJtIDogRm9ybSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChQb3NpdGlvbl9DdXJzb3IpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9kYXRhLjN4JykKKworICAgLS0gIEFOQ0hPUihgZGF0YV9haGVhZCgpJyxgRGF0YV9BaGVhZCcpCisgICBmdW5jdGlvbiBEYXRhX0FoZWFkIChGcm0gOiBGb3JtKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKERhdGFfQWhlYWQpOworCisgICAtLSAgQU5DSE9SKGBkYXRhX2JlaGluZCgpJyxgRGF0YV9CZWhpbmQnKQorICAgZnVuY3Rpb24gRGF0YV9CZWhpbmQgKEZybSA6IEZvcm0pIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRGF0YV9CZWhpbmQpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9kcml2ZXIuM3gnKQorCisgICB0eXBlIERyaXZlcl9SZXN1bHQgaXMgKEZvcm1fT2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RfRGVuaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVbmtub3duX1JlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRfRmllbGQpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX2RyaXZlcigpJyxgRHJpdmVyJykKKyAgIGZ1bmN0aW9uIERyaXZlciAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgS2V5IDogS2V5X0NvZGUpIHJldHVybiBEcml2ZXJfUmVzdWx0OworICAgLS0gIEFLQQorICAgLS0gIERyaXZlciBub3QgaW5saW5lZAorCisgICAtLSAgTUFOUEFHRShgZm9ybV9wYWdlLjN4JykKKworICAgdHlwZSBQYWdlX051bWJlciBpcyBuZXcgTmF0dXJhbDsKKworICAgLS0gIEFOQ0hPUihgc2V0X2N1cnJlbnRfZmllbGQoKScsYFNldF9DdXJyZW50JykKKyAgIHByb2NlZHVyZSBTZXRfQ3VycmVudCAoRnJtIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxkIDogaW4gRmllbGQpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0N1cnJlbnQpOworCisgICAtLSAgQU5DSE9SKGBjdXJyZW50X2ZpZWxkKCknLGBDdXJyZW50JykKKyAgIGZ1bmN0aW9uIEN1cnJlbnQgKEZybSA6IGluIEZvcm0pIHJldHVybiBGaWVsZDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEN1cnJlbnQpOworCisgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9wYWdlKCknLGBTZXRfUGFnZScpCisgICBwcm9jZWR1cmUgU2V0X1BhZ2UgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBQYWdlIDogaW4gUGFnZV9OdW1iZXIgOj0gUGFnZV9OdW1iZXInRmlyc3QpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1BhZ2UpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX3BhZ2UoKScsYFBhZ2UnKQorICAgZnVuY3Rpb24gUGFnZSAoRnJtIDogRm9ybSkgcmV0dXJuIFBhZ2VfTnVtYmVyOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUGFnZSk7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2luZGV4KCknLGBHZXRfSW5kZXgnKQorICAgZnVuY3Rpb24gR2V0X0luZGV4IChGbGQgOiBGaWVsZCkgcmV0dXJuIFBvc2l0aXZlOworICAgLS0gIEFLQQorICAgLS0gIFBsZWFzZSBub3RlIHRoYXQgaW4gdGhpcyBiaW5kaW5nIHdlIHN0YXJ0IHRoZSBudW1iZXJpbmcgb2YgZmllbGRzCisgICAtLSAgd2l0aCAxLiBTbyB0aGlzIGlzIG51bWJlciBpcyBvbmUgbW9yZSB0aGFuIHlvdSBnZXQgZnJvbSB0aGUgbG93CisgICAtLSAgbGV2ZWwgY2FsbC4KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9JbmRleCk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX25ld19wYWdlLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X25ld19wYWdlKCknLGBTZXRfTmV3X1BhZ2UnKQorICAgcHJvY2VkdXJlIFNldF9OZXdfUGFnZSAoRmxkICAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ld19QYWdlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9OZXdfUGFnZSk7CisKKyAgIC0tICBBTkNIT1IoYG5ld19wYWdlKCknLGBJc19OZXdfUGFnZScpCisgICBmdW5jdGlvbiBJc19OZXdfUGFnZSAoRmxkIDogRmllbGQpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSXNfTmV3X1BhZ2UpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9yZXF1ZXN0bmFtZS4zeCcpCisgICAtLSAgTm90IEltcGxlbWVudGVkOiBmb3JtX3JlcXVlc3RfbmFtZSwgZm9ybV9yZXF1ZXN0X2J5X25hbWUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcml2YXRlCisgICB0eXBlIEZpZWxkIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICB0eXBlIEZvcm0gIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisKKyAgIE51bGxfRmllbGQgOiBjb25zdGFudCBGaWVsZCA6PSAwOworICAgTnVsbF9Gb3JtICA6IGNvbnN0YW50IEZvcm0gIDo9IDA7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjI0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQKQEAgLTAsMCArMSw3NSBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTYgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljCisgICB0eXBlIFVzZXIgaXMgbGltaXRlZCBwcml2YXRlOworICAgdHlwZSBVc2VyX0FjY2VzcyBpcyBhY2Nlc3MgVXNlcjsKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSk7CisKKyAgIC0tICBUaGUgYmluZGluZyB1c2VzIHRoZSBzYW1lIHVzZXIgcG9pbnRlciBmb3IgbWVudSBpdGVtcworICAgLS0gIGFzIHRoZSBsb3cgbGV2ZWwgQyBpbXBsZW1lbnRhdGlvbi4gU28geW91IGNhbiBzYWZlbHkKKyAgIC0tICByZWFkIG9yIHdyaXRlIHRoZSB1c2VyIHBvaW50ZXIgYWxzbyB3aXRoIHRoZSBDIHJvdXRpbmVzCisgICAtLQorICAgLS0gIE1BTlBBR0UoYG1pdGVtX3VzZXJwdHIuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfaXRlbV91c2VycHRyJyxgU2V0X1VzZXJfRGF0YScpCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoSXRtICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Vc2VyX0RhdGEpOworCisgICAtLSAgQU5DSE9SKGBpdGVtX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2Vzcyk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQorICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoSXRtICA6IGluICBJdGVtKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhOwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjE0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMubTQKQEAgLTAsMCArMSw3MCBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YSAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWMKKyAgIHR5cGUgVXNlciBpcyBsaW1pdGVkIHByaXZhdGU7CisgICB0eXBlIFVzZXJfQWNjZXNzIGlzIGFjY2VzcyBVc2VyOworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfdXNlcnB0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X3VzZXJwdHInLGBTZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1VzZXJfRGF0YSk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgbWVudV91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gIE1lbnUpIHJldHVybiBVc2VyX0FjY2VzczsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHMubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5OTNlMQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkcy5tNApAQCAtMCwwICsxLDYwNCBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudSAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMjcgJAorLS0gICREYXRlOiAyMDA3LzA1LzA1IDIwOjIwOjUyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZShgTWVudV9CYXNlX0RlZnMnKQord2l0aCBTeXN0ZW07Cit3aXRoIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cyBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cyk7CitpbmNsdWRlKGBNZW51X0xpbmtlcl9PcHRpb25zJylkbmwKK2luY2x1ZGUoYExpbmtlcl9PcHRpb25zJykKKyAgIFNwYWNlIDogQ2hhcmFjdGVyIHJlbmFtZXMgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMS5TcGFjZTsKKworICAgdHlwZSBJdGVtIGlzIHByaXZhdGU7CisgICB0eXBlIE1lbnUgaXMgcHJpdmF0ZTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgSW50ZXJmYWNlIGNvbnN0YW50cyAgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTnVsbF9JdGVtIDogY29uc3RhbnQgSXRlbTsKKyAgIE51bGxfTWVudSA6IGNvbnN0YW50IE1lbnU7CisKKyAgIHN1YnR5cGUgTWVudV9SZXF1ZXN0X0NvZGUgaXMgS2V5X0NvZGUKKyAgICAgcmFuZ2UgKEtleV9NYXggKyAxKSAuLiAoS2V5X01heCArIDE3KTsKKworICAgLS0gIFRoZSBwcmVmaXggTV8gc3RhbmRzIGZvciAiTWVudSBSZXF1ZXN0IgorICAgTV9MZWZ0X0l0ZW0gICAgICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTsKKyAgIE1fUmlnaHRfSXRlbSAgICAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDI7CisgICBNX1VwX0l0ZW0gICAgICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzOworICAgTV9Eb3duX0l0ZW0gICAgICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDsKKyAgIE1fU2Nyb2xsVXBfTGluZSAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDU7CisgICBNX1Njcm9sbERvd25fTGluZSA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA2OworICAgTV9TY3JvbGxEb3duX1BhZ2UgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNzsKKyAgIE1fU2Nyb2xsVXBfUGFnZSAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDg7CisgICBNX0ZpcnN0X0l0ZW0gICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA5OworICAgTV9MYXN0X0l0ZW0gICAgICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTA7CisgICBNX05leHRfSXRlbSAgICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxMTsKKyAgIE1fUHJldmlvdXNfSXRlbSAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDEyOworICAgTV9Ub2dnbGVfSXRlbSAgICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTM7CisgICBNX0NsZWFyX1BhdHRlcm4gICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxNDsKKyAgIE1fQmFja19QYXR0ZXJuICAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE1OworICAgTV9OZXh0X01hdGNoICAgICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTY7CisgICBNX1ByZXZpb3VzX01hdGNoICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxNzsKKworICAgLS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0aGUgb2xkICdDJyBuYW1lcyBmb3IgdGhlIHJlcXVlc3QgY29kZXMKKyAgIFJFUV9MRUZUX0lURU0gICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX0xlZnRfSXRlbTsKKyAgIFJFUV9SSUdIVF9JVEVNICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1JpZ2h0X0l0ZW07CisgICBSRVFfVVBfSVRFTSAgICAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9VcF9JdGVtOworICAgUkVRX0RPV05fSVRFTSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fRG93bl9JdGVtOworICAgUkVRX1NDUl9VTElORSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fU2Nyb2xsVXBfTGluZTsKKyAgIFJFUV9TQ1JfRExJTkUgICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1Njcm9sbERvd25fTGluZTsKKyAgIFJFUV9TQ1JfRFBBR0UgICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1Njcm9sbERvd25fUGFnZTsKKyAgIFJFUV9TQ1JfVVBBR0UgICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1Njcm9sbFVwX1BhZ2U7CisgICBSRVFfRklSU1RfSVRFTSAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9GaXJzdF9JdGVtOworICAgUkVRX0xBU1RfSVRFTSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fTGFzdF9JdGVtOworICAgUkVRX05FWFRfSVRFTSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fTmV4dF9JdGVtOworICAgUkVRX1BSRVZfSVRFTSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fUHJldmlvdXNfSXRlbTsKKyAgIFJFUV9UT0dHTEVfSVRFTSAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1RvZ2dsZV9JdGVtOworICAgUkVRX0NMRUFSX1BBVFRFUk4gOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fQ2xlYXJfUGF0dGVybjsKKyAgIFJFUV9CQUNLX1BBVFRFUk4gIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX0JhY2tfUGF0dGVybjsKKyAgIFJFUV9ORVhUX01BVENIICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX05leHRfTWF0Y2g7CisgICBSRVFfUFJFVl9NQVRDSCAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9QcmV2aW91c19NYXRjaDsKKworICAgcHJvY2VkdXJlIFJlcXVlc3RfTmFtZSAoS2V5ICA6IGluIE1lbnVfUmVxdWVzdF9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpOworCisgICBmdW5jdGlvbiAgUmVxdWVzdF9OYW1lIChLZXkgOiBNZW51X1JlcXVlc3RfQ29kZSkgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIEV4Y2VwdGlvbnMgIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgTWVudV9FeGNlcHRpb24gOiBleGNlcHRpb247CisgICAtLQorICAgLS0gIE1lbnUgb3B0aW9ucworICAgLS0KKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKK2luY2x1ZGUoYE1lbnVfT3B0X1JlcCcpZG5sCisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBmdW5jdGlvbiBEZWZhdWx0X01lbnVfT3B0aW9ucyByZXR1cm4gTWVudV9PcHRpb25fU2V0OworICAgLS0gIEluaXRpYWwgZGVmYXVsdCBvcHRpb25zIGZvciBhIG1lbnUuCisgICBwcmFnbWEgSW5saW5lIChEZWZhdWx0X01lbnVfT3B0aW9ucyk7CisgICAtLQorICAgLS0gIEl0ZW0gb3B0aW9ucworICAgLS0KKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKK2luY2x1ZGUoYEl0ZW1fUmVwJylkbmwKKworICAgcHJhZ21hIFdhcm5pbmdzIChPbik7CisKKyAgIGZ1bmN0aW9uIERlZmF1bHRfSXRlbV9PcHRpb25zIHJldHVybiBJdGVtX09wdGlvbl9TZXQ7CisgICAtLSAgSW5pdGlhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIGFuIGl0ZW0uCisgICBwcmFnbWEgSW5saW5lIChEZWZhdWx0X0l0ZW1fT3B0aW9ucyk7CisKKyAgIC0tCisgICAtLSAgSXRlbSBBcnJheQorICAgLS0KKyAgIHR5cGUgSXRlbV9BcnJheSBpcyBhcnJheSAoUG9zaXRpdmUgcmFuZ2UgPD4pIG9mIGFsaWFzZWQgSXRlbTsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBJdGVtX0FycmF5KTsKKworICAgdHlwZSBJdGVtX0FycmF5X0FjY2VzcyBpcyBhY2Nlc3MgSXRlbV9BcnJheTsKKworICAgcHJvY2VkdXJlIEZyZWUgKElBICAgICAgICAgOiBpbiBvdXQgSXRlbV9BcnJheV9BY2Nlc3M7CisgICAgICAgICAgICAgICAgICAgRnJlZV9JdGVtcyA6IEJvb2xlYW4gOj0gRmFsc2UpOworICAgLS0gIFJlbGVhc2UgdGhlIG1lbW9yeSBmb3IgYW4gYWxsb2NhdGVkIGl0ZW0gYXJyYXkKKyAgIC0tICBJZiBGcmVlX0l0ZW1zIGlzIFRydWUsIGNhbGwgRGVsZXRlKCkgZm9yIGFsbCB0aGUgaXRlbXMgaW4KKyAgIC0tICB0aGUgYXJyYXkuCisKKyAgIC0tICBNQU5QQUdFKGBtaXRlbV9uZXcuM3gnKQorCisgICAtLSAgQU5DSE9SKGBuZXdfaXRlbSgpJyxgQ3JlYXRlJykKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoTmFtZSAgICAgICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uIDogU3RyaW5nIDo9ICIiKSByZXR1cm4gSXRlbTsKKyAgIC0tICBBS0EKKyAgIC0tICBOb3QgaW5saW5lZC4KKworICAgLS0gIEFOQ0hPUihgbmV3X2l0ZW0oKScsYE5ld19JdGVtJykKKyAgIGZ1bmN0aW9uIE5ld19JdGVtIChOYW1lICAgICAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA6IFN0cmluZyA6PSAiIikgcmV0dXJuIEl0ZW0KKyAgICAgcmVuYW1lcyBDcmVhdGU7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGZyZWVfaXRlbSgpJyxgRGVsZXRlJykKKyAgIHByb2NlZHVyZSBEZWxldGUgKEl0bSA6IGluIG91dCBJdGVtKTsKKyAgIC0tICBBS0EKKyAgIC0tICBSZXNldHMgSXRtIHRvIE51bGxfSXRlbQorCisgICAtLSAgTUFOUEFHRShgbWl0ZW1fdmFsdWUuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfaXRlbV92YWx1ZSgpJyxgU2V0X1ZhbHVlJykKKyAgIHByb2NlZHVyZSBTZXRfVmFsdWUgKEl0bSAgIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9WYWx1ZSk7CisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fdmFsdWUoKScsYFZhbHVlJykKKyAgIGZ1bmN0aW9uIFZhbHVlIChJdG0gOiBJdGVtKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFZhbHVlKTsKKworICAgLS0gIE1BTlBBR0UoYG1pdGVtX3Zpc2libGUuM3gnKQorCisgICAtLSAgQU5DSE9SKGBpdGVtX3Zpc2libGUoKScsYFZpc2libGUnKQorICAgZnVuY3Rpb24gVmlzaWJsZSAoSXRtIDogSXRlbSkgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChWaXNpYmxlKTsKKworICAgLS0gIE1BTlBBR0UoYG1pdGVtX29wdHMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfaXRlbV9vcHRzKCknLGBTZXRfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEl0bSAgICAgOiBpbiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gSXRlbV9PcHRpb25fU2V0KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBbiBvdmVybG9hZGVkIFNldF9PcHRpb25zIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQorCisgICAtLSAgQU5DSE9SKGBpdGVtX29wdHNfb24oKScsYFN3aXRjaF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoSXRtICAgICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBJdGVtX09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBpdGVtX29wdHNfb2ZmKCknKQorICAgLS0gIEFuIG92ZXJsb2FkZWQgU3dpdGNoX09wdGlvbnMgaXMgZGVmaW5lZCBsYXRlci4KKyAgIC0tICBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmUKKworICAgLS0gIEFOQ0hPUihgaXRlbV9vcHRzKCknLGBHZXRfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEl0bSAgICAgOiBpbiAgSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBJdGVtX09wdGlvbl9TZXQpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBpdGVtX29wdHMoKScsYEdldF9PcHRpb25zJykKKyAgIGZ1bmN0aW9uIEdldF9PcHRpb25zIChJdG0gOiBJdGVtIDo9IE51bGxfSXRlbSkgcmV0dXJuIEl0ZW1fT3B0aW9uX1NldDsKKyAgIC0tICBBS0EKKyAgIC0tICBBbiBvdmVybG9hZGVkIEdldF9PcHRpb25zIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQorCisgICAtLSAgTUFOUEFHRShgbWl0ZW1fbmFtZS4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fbmFtZSgpJyxgTmFtZScpCisgICBwcm9jZWR1cmUgTmFtZSAoSXRtICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpOworICAgLS0gIEFLQQorICAgZnVuY3Rpb24gIE5hbWUgKEl0bSA6IEl0ZW0pIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisgICAtLSAgSW1wbGVtZW50ZWQgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKE5hbWUpOworCisgICAtLSAgQU5DSE9SKGBpdGVtX2Rlc2NyaXB0aW9uKCk7JyxgRGVzY3JpcHRpb24nKQorICAgcHJvY2VkdXJlIERlc2NyaXB0aW9uIChJdG0gICAgICAgICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uIDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIGZ1bmN0aW9uICBEZXNjcmlwdGlvbiAoSXRtIDogSXRlbSkgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKyAgIC0tICBJbXBsZW1lbnRlZCBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoRGVzY3JpcHRpb24pOworCisgICAtLSAgTUFOUEFHRShgbWl0ZW1fY3VycmVudC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9jdXJyZW50X2l0ZW0oKScsYFNldF9DdXJyZW50JykKKyAgIHByb2NlZHVyZSBTZXRfQ3VycmVudCAoTWVuIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSXRtIDogaW4gSXRlbSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfQ3VycmVudCk7CisKKyAgIC0tICBBTkNIT1IoYGN1cnJlbnRfaXRlbSgpJyxgQ3VycmVudCcpCisgICBmdW5jdGlvbiBDdXJyZW50IChNZW4gOiBNZW51KSByZXR1cm4gSXRlbTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEN1cnJlbnQpOworCisgICAtLSAgQU5DSE9SKGBzZXRfdG9wX3JvdygpJyxgU2V0X1RvcF9Sb3cnKQorICAgcHJvY2VkdXJlIFNldF9Ub3BfUm93IChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSA6IGluIExpbmVfUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1RvcF9Sb3cpOworCisgICAtLSAgQU5DSE9SKGB0b3Bfcm93KCknLGBUb3BfUm93JykKKyAgIGZ1bmN0aW9uIFRvcF9Sb3cgKE1lbiA6IE1lbnUpIHJldHVybiBMaW5lX1Bvc2l0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVG9wX1Jvdyk7CisKKyAgIC0tICBBTkNIT1IoYGl0ZW1faW5kZXgoKScsYEdldF9JbmRleCcpCisgICBmdW5jdGlvbiBHZXRfSW5kZXggKEl0bSA6IEl0ZW0pIHJldHVybiBQb3NpdGl2ZTsKKyAgIC0tICBBS0EKKyAgIC0tICBQbGVhc2Ugbm90ZSB0aGF0IGluIHRoaXMgYmluZGluZyB3ZSBzdGFydCB0aGUgbnVtYmVyaW5nIG9mIGl0ZW1zCisgICAtLSAgd2l0aCAxLiBTbyB0aGlzIGlzIG51bWJlciBpcyBvbmUgbW9yZSB0aGFuIHlvdSBnZXQgZnJvbSB0aGUgbG93CisgICAtLSAgbGV2ZWwgY2FsbC4KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9JbmRleCk7CisKKyAgIC0tICBNQU5QQUdFKGBtZW51X3Bvc3QuM3gnKQorCisgICAtLSAgQU5DSE9SKGBwb3N0X21lbnUoKScsYFBvc3QnKQorICAgcHJvY2VkdXJlIFBvc3QgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgIFBvc3QgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB1bnBvc3RfbWVudSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFBvc3QpOworCisgICAtLSAgTUFOUEFHRShgbWVudV9vcHRzLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfb3B0cygpJyxgU2V0X09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChNZW4gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIE1lbnVfT3B0aW9uX1NldCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfT3B0aW9ucyk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChNZW4gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIE1lbnVfT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG1lbnVfb3B0c19vZmYoKScpCisgICBwcmFnbWEgSW5saW5lIChTd2l0Y2hfT3B0aW9ucyk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfb3B0cygpJyxgR2V0X09wdGlvbnMnKQorICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChNZW4gICAgIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgTWVudV9PcHRpb25fU2V0KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgbWVudV9vcHRzKCknLGBHZXRfT3B0aW9ucycpCisgICBmdW5jdGlvbiBHZXRfT3B0aW9ucyAoTWVuIDogTWVudSA6PSBOdWxsX01lbnUpIHJldHVybiBNZW51X09wdGlvbl9TZXQ7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfT3B0aW9ucyk7CisKKyAgIC0tICBNQU5QQUdFKGBtZW51X3dpbi4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X3dpbigpJyxgU2V0X1dpbmRvdycpCisgICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoTWVuIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfd2luKCknLGBHZXRfV2luZG93JykKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgKE1lbiA6IE1lbnUpIHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfc3ViKCknLGBTZXRfU3ViX1dpbmRvdycpCisgICBwcm9jZWR1cmUgU2V0X1N1Yl9XaW5kb3cgKE1lbiA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfU3ViX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfc3ViKCknLGBHZXRfU3ViX1dpbmRvdycpCisgICBmdW5jdGlvbiBHZXRfU3ViX1dpbmRvdyAoTWVuIDogTWVudSkgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9TdWJfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgc2NhbGVfbWVudSgpJyxgU2NhbGUnKQorICAgcHJvY2VkdXJlIFNjYWxlIChNZW4gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTY2FsZSk7CisKKyAgIC0tICBNQU5QQUdFKGBtZW51X2N1cnNvci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHBvc19tZW51X2N1cnNvcigpJyxgUG9zaXRpb25fQ3Vyc29yJykKKyAgIHByb2NlZHVyZSBQb3NpdGlvbl9DdXJzb3IgKE1lbiA6IE1lbnUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUG9zaXRpb25fQ3Vyc29yKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfbWFyay4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X21hcmsoKScsYFNldF9NYXJrJykKKyAgIHByb2NlZHVyZSBTZXRfTWFyayAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIE1hcmsgOiBpbiBTdHJpbmcpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X01hcmspOworCisgICAtLSAgQU5DSE9SKGBtZW51X21hcmsoKScsYE1hcmsnKQorICAgcHJvY2VkdXJlIE1hcmsgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICBNYXJrIDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIGZ1bmN0aW9uICBNYXJrIChNZW4gOiBNZW51KSByZXR1cm4gU3RyaW5nOworICAgLS0gIEFLQQorICAgLS0gIEltcGxlbWVudGVkIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChNYXJrKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfYXR0cmlidXRlcy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X2ZvcmUoKScsYFNldF9Gb3JlZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBTZXRfRm9yZWdyb3VuZAorICAgICAoTWVuICAgOiBpbiBNZW51OworICAgICAgRm9yZSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRm9yZWdyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfZm9yZSgpJyxgRm9yZWdyb3VuZCcpCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYG1lbnVfZm9yZSgpJyxgRm9yZWdyb3VuZCcpCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEZvcmVncm91bmQpOworCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9iYWNrKCknLGBTZXRfQmFja2dyb3VuZCcpCisgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKKyAgICAgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgIEJhY2sgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0JhY2tncm91bmQpOworCisgICAtLSAgQU5DSE9SKGBtZW51X2JhY2soKScsYEJhY2tncm91bmQnKQorICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTkNIT1IoYG1lbnVfYmFjaygpJyxgQmFja2dyb3VuZCcpCisKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQmFja2dyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X2dyZXkoKScsYFNldF9HcmV5JykKKyAgIHByb2NlZHVyZSBTZXRfR3JleQorICAgICAoTWVuICAgOiBpbiBNZW51OworICAgICAgR3JleSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfR3JleSk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfZ3JleSgpJyxgR3JleScpCisgICBwcm9jZWR1cmUgR3JleSAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgIEdyZXkgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBtZW51X2dyZXkoKScsYEdyZXknKQorICAgcHJvY2VkdXJlIEdyZXkKKyAgICAgKE1lbiAgIDogaW4gIE1lbnU7CisgICAgICBHcmV5ICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR3JleSk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X3BhZCgpJyxgU2V0X1BhZF9DaGFyYWN0ZXInKQorICAgcHJvY2VkdXJlIFNldF9QYWRfQ2hhcmFjdGVyIChNZW4gOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBpbiBDaGFyYWN0ZXIgOj0gU3BhY2UpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1BhZF9DaGFyYWN0ZXIpOworCisgICAtLSAgQU5DSE9SKGBtZW51X3BhZCgpJyxgUGFkX0NoYXJhY3RlcicpCisgICBwcm9jZWR1cmUgUGFkX0NoYXJhY3RlciAoTWVuIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogb3V0IENoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChQYWRfQ2hhcmFjdGVyKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfc3BhY2luZy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X3NwYWNpbmcoKScsYFNldF9TcGFjaW5nJykKKyAgIHByb2NlZHVyZSBTZXRfU3BhY2luZyAoTWVuICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjciA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IGluIExpbmVfUG9zaXRpb24gICA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9TcGFjaW5nKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9zcGFjaW5nKCknLGBTcGFjaW5nJykKKyAgIHByb2NlZHVyZSBTcGFjaW5nIChNZW4gICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgRGVzY3IgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgIFJvdyAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNwYWNpbmcpOworCisgICAtLSAgTUFOUEFHRShgbWVudV9wYXR0ZXJuLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfcGF0dGVybigpJyxgU2V0X1BhdHRlcm4nKQorICAgZnVuY3Rpb24gU2V0X1BhdHRlcm4gKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgLS0gIFJldHVybiBUUlVFIGlmIHRoZSBwYXR0ZXJuIG1hdGNoZXMsIEZBTFNFIG90aGVyd2lzZQorICAgcHJhZ21hIElubGluZSAoU2V0X1BhdHRlcm4pOworCisgICAtLSAgQU5DSE9SKGBtZW51X3BhdHRlcm4oKScsYFBhdHRlcm4nKQorICAgcHJvY2VkdXJlIFBhdHRlcm4gKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICBUZXh0IDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChQYXR0ZXJuKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfZm9ybWF0LjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfZm9ybWF0KCknLGBTZXRfRm9ybWF0JykKKyAgIHByb2NlZHVyZSBTZXRfRm9ybWF0IChNZW4gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogaW4gTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogaW4gQ29sdW1uX0NvdW50KTsKKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6IDAgYXJndW1lbnQgZm9yIExpbmVzIG9yIENvbHVtbnM7CisgICAtLSAgaW5zdGVhZCB1c2UgRm9ybWF0IHRvIGdldCB0aGUgY3VycmVudCBzaXplcworICAgLS0gICAgICBUaGUgIGRlZmF1bHQgIGZvcm1hdCAgaXMgIDE2ICByb3dzLCAgMSAgY29sdW1uLiAgICBDYWxsaW5nCisgICAtLSAgICAgIHNldF9tZW51X2Zvcm1hdCAgd2l0aCBhIG51bGwgbWVudSBwb2ludGVyIHdpbGwgY2hhbmdlIHRoaXMKKyAgIC0tICAgICAgZGVmYXVsdC4gIEEgemVybyByb3cgb3IgY29sdW1uIGFyZ3VtZW50IHRvIHNldF9tZW51X2Zvcm1hdAorICAgLS0gICAgICBpcyAgaW50ZXJwcmV0ZWQgIGFzICBhICByZXF1ZXN0ICBub3QgdG8gY2hhbmdlIHRoZSBjdXJyZW50CisgICAtLSAgICAgIHZhbHVlLgorICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0Zvcm1hdCk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfZm9ybWF0KCknLGBGb3JtYXQnKQorICAgcHJvY2VkdXJlIEZvcm1hdCAoTWVuICAgICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRm9ybWF0KTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfaG9vay4zeCcpCisKKyAgIHR5cGUgTWVudV9Ib29rX0Z1bmN0aW9uIGlzIGFjY2VzcyBwcm9jZWR1cmUgKE1lbiA6IGluIE1lbnUpOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE1lbnVfSG9va19GdW5jdGlvbik7CisKKyAgIC0tICBBTkNIT1IoYHNldF9pdGVtX2luaXQoKScsYFNldF9JdGVtX0luaXRfSG9vaycpCisgICBwcm9jZWR1cmUgU2V0X0l0ZW1fSW5pdF9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0l0ZW1fSW5pdF9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2l0ZW1fdGVybSgpJyxgU2V0X0l0ZW1fVGVybV9Ib29rJykKKyAgIHByb2NlZHVyZSBTZXRfSXRlbV9UZXJtX0hvb2sgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfSXRlbV9UZXJtX0hvb2spOworCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9pbml0KCknLGBTZXRfTWVudV9Jbml0X0hvb2snKQorICAgcHJvY2VkdXJlIFNldF9NZW51X0luaXRfSG9vayAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gTWVudV9Ib29rX0Z1bmN0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9NZW51X0luaXRfSG9vayk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X3Rlcm0oKScsYFNldF9NZW51X1Rlcm1fSG9vaycpCisgICBwcm9jZWR1cmUgU2V0X01lbnVfVGVybV9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X01lbnVfVGVybV9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgaXRlbV9pbml0KCknLGBHZXRfSXRlbV9Jbml0X0hvb2snKQorICAgZnVuY3Rpb24gR2V0X0l0ZW1fSW5pdF9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X0l0ZW1fSW5pdF9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgaXRlbV90ZXJtKCknLGBHZXRfSXRlbV9UZXJtX0hvb2snKQorICAgZnVuY3Rpb24gR2V0X0l0ZW1fVGVybV9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X0l0ZW1fVGVybV9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9pbml0KCknLGBHZXRfTWVudV9Jbml0X0hvb2snKQorICAgZnVuY3Rpb24gR2V0X01lbnVfSW5pdF9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X01lbnVfSW5pdF9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV90ZXJtKCknLGBHZXRfTWVudV9UZXJtX0hvb2snKQorICAgZnVuY3Rpb24gR2V0X01lbnVfVGVybV9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X01lbnVfVGVybV9Ib29rKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfaXRlbXMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9pdGVtcygpJyxgUmVkZWZpbmUnKQorICAgcHJvY2VkdXJlIFJlZGVmaW5lIChNZW4gICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1zIDogaW4gSXRlbV9BcnJheV9BY2Nlc3MpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVkZWZpbmUpOworCisgICBwcm9jZWR1cmUgU2V0X0l0ZW1zIChNZW4gICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICBJdGVtcyA6IGluIEl0ZW1fQXJyYXlfQWNjZXNzKSByZW5hbWVzIFJlZGVmaW5lOworICAgLS0gIHByYWdtYSBJbmxpbmUgKFNldF9JdGVtcyk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfaXRlbXMoKScsYEl0ZW1zJykKKyAgIGZ1bmN0aW9uIEl0ZW1zIChNZW4gICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgSW5kZXggOiBQb3NpdGl2ZSkgcmV0dXJuIEl0ZW07CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJdGVtcyk7CisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fY291bnQoKScsYEl0ZW1fQ291bnQnKQorICAgZnVuY3Rpb24gSXRlbV9Db3VudCAoTWVuIDogTWVudSkgcmV0dXJuIE5hdHVyYWw7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJdGVtX0NvdW50KTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfbmV3LjN4JykKKworICAgLS0gIEFOQ0hPUihgbmV3X21lbnUoKScsYENyZWF0ZScpCisgICBmdW5jdGlvbiBDcmVhdGUgKEl0ZW1zIDogSXRlbV9BcnJheV9BY2Nlc3MpIHJldHVybiBNZW51OworICAgLS0gIEFLQQorICAgLS0gIE5vdCBpbmxpbmVkCisKKyAgIGZ1bmN0aW9uIE5ld19NZW51IChJdGVtcyA6IEl0ZW1fQXJyYXlfQWNjZXNzKSByZXR1cm4gTWVudSByZW5hbWVzIENyZWF0ZTsKKworICAgLS0gIEFOQ0hPUihgZnJlZV9tZW51KCknLGBEZWxldGUnKQorICAgcHJvY2VkdXJlIERlbGV0ZSAoTWVuIDogaW4gb3V0IE1lbnUpOworICAgLS0gIEFLQQorICAgLS0gIFJlc2V0IE1lbiB0byBOdWxsX01lbnUKKyAgIC0tICBOb3QgaW5saW5lZAorCisgICAtLSAgTUFOUEFHRShgbWVudV9kcml2ZXIuM3gnKQorCisgICB0eXBlIERyaXZlcl9SZXN1bHQgaXMgKE1lbnVfT2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RfRGVuaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVbmtub3duX1JlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vX01hdGNoKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9kcml2ZXIoKScsYERyaXZlcicpCisgICBmdW5jdGlvbiBEcml2ZXIgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgIEtleSA6IEtleV9Db2RlKSByZXR1cm4gRHJpdmVyX1Jlc3VsdDsKKyAgIC0tICBBS0EKKyAgIC0tICBEcml2ZXIgaXMgbm90IGlubGluZWQKKworICAgLS0gIEFOQ0hPUihgbWVudV9yZXF1ZXN0bmFtZS4zeCcpCisgICAtLSAgTm90IEltcGxlbWVudGVkOiBtZW51X3JlcXVlc3RfbmFtZSwgbWVudV9yZXF1ZXN0X2J5X25hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByaXZhdGUKKyAgIHR5cGUgSXRlbSAgIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICB0eXBlIE1lbnUgICBpcyBuZXcgU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworCisgICBOdWxsX0l0ZW0gOiBjb25zdGFudCBJdGVtIDo9IDA7CisgICBOdWxsX01lbnUgOiBjb25zdGFudCBNZW51IDo9IDA7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHMubTQKQEAgLTAsMCArMSwxODIgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKWRubAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjI3ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1ZGUoYE1vdXNlX0Jhc2VfRGVmcycpCit3aXRoIFN5c3RlbTsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfbW91c2UuM3gnKQorICAgLS0gIFBsZWFzZSBub3RlLCB0aGF0IGluIG5jdXJzZXMtMS45LjllIGRvY3VtZW50YXRpb24gbW91c2Ugc3VwcG9ydAorICAgLS0gIGlzIHN0aWxsIG1hcmtlZCBhcyBleHBlcmltZW50YWwuIFNvIGFsc28gdGhpcyBiaW5kaW5nIHdpbGwgY2hhbmdlCisgICAtLSAgaWYgdGhlIG5jdXJzZXMgbWV0aG9kcyBjaGFuZ2UuCisgICAtLQorICAgLS0gIG1vdXNlX3RyYWZvLCB3bW91c2VfdHJhZm8gYXJlIGltcGxlbWVudGVkIGFzIFRyYW5zZm9ybV9Db29yZGluYXRlcworICAgLS0gIGluIHRoZSBwYXJlbnQgcGFja2FnZS4KKyAgIC0tCisgICAtLSAgTm90IGltcGxlbWVudGVkOgorICAgLS0gIFJFUE9SVF9NT1VTRV9QT1NJVElPTiAoaS5lLiBhcyBhIHBhcmFtZXRlciB0byBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50CisgICAtLSAgb3IgU3RhcnRfTW91c2UpCisgICB0eXBlIEV2ZW50X01hc2sgaXMgcHJpdmF0ZTsKKyAgIE5vX0V2ZW50cyAgOiBjb25zdGFudCBFdmVudF9NYXNrOworICAgQWxsX0V2ZW50cyA6IGNvbnN0YW50IEV2ZW50X01hc2s7CisKKyAgIHR5cGUgTW91c2VfQnV0dG9uIGlzIChMZWZ0LCAgICAgLS0gYWthOiBCdXR0b24gMQorICAgICAgICAgICAgICAgICAgICAgICAgIE1pZGRsZSwgICAtLSBha2E6IEJ1dHRvbiAyCisgICAgICAgICAgICAgICAgICAgICAgICAgUmlnaHQsICAgIC0tIGFrYTogQnV0dG9uIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b240LCAgLS0gYWthOiBCdXR0b24gNAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wsICAtLSBDb250cm9sIEtleQorICAgICAgICAgICAgICAgICAgICAgICAgIFNoaWZ0LCAgICAtLSBTaGlmdCBLZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICBBbHQpOyAgICAgLS0gQUxUIEtleQorCisgICBzdWJ0eXBlIFJlYWxfQnV0dG9ucyAgaXMgTW91c2VfQnV0dG9uIHJhbmdlIExlZnQgLi4gQnV0dG9uNDsKKyAgIHN1YnR5cGUgTW9kaWZpZXJfS2V5cyBpcyBNb3VzZV9CdXR0b24gcmFuZ2UgQ29udHJvbCAuLiBBbHQ7CisKKyAgIHR5cGUgQnV0dG9uX1N0YXRlIGlzIChSZWxlYXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlX0NsaWNrZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJpcGxlX0NsaWNrZWQpOworCisgICB0eXBlIEJ1dHRvbl9TdGF0ZXMgaXMgYXJyYXkgKEJ1dHRvbl9TdGF0ZSkgb2YgQm9vbGVhbjsKKyAgIHByYWdtYSBQYWNrIChCdXR0b25fU3RhdGVzKTsKKworICAgQWxsX0NsaWNrcyA6IGNvbnN0YW50IEJ1dHRvbl9TdGF0ZXMgOj0gKENsaWNrZWQgLi4gVHJpcGxlX0NsaWNrZWQgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpOworICAgQWxsX1N0YXRlcyA6IGNvbnN0YW50IEJ1dHRvbl9TdGF0ZXMgOj0gKG90aGVycyA9PiBUcnVlKTsKKworICAgdHlwZSBNb3VzZV9FdmVudCBpcyBwcml2YXRlOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19tb3VzZS4zeCcpCisKKyAgIGZ1bmN0aW9uIEhhc19Nb3VzZSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBSZXR1cm4gdHJ1ZSBpZiBhIG1vdXNlIGRldmljZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KKworICAgcHJvY2VkdXJlIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQKKyAgICAgKEJ1dHRvbiA6IGluIE1vdXNlX0J1dHRvbjsKKyAgICAgIFN0YXRlICA6IGluIEJ1dHRvbl9TdGF0ZTsKKyAgICAgIE1hc2sgICA6IGluIG91dCBFdmVudF9NYXNrKTsKKyAgIC0tICBTdG9yZXMgdGhlIGV2ZW50IGRlc2NyaWJlZCBieSB0aGUgYnV0dG9uIGFuZCB0aGUgc3RhdGUgaW4gdGhlIG1hc2suCisgICAtLSAgQmVmb3JlIHlvdSBjYWxsIHRoaXMgdGhlIGZpcnN0IHRpbWUsIHlvdSBzaG91bGQgaW5pdCB0aGUgbWFzaworICAgLS0gIHdpdGggdGhlIEVtcHR5X01hc2sgY29uc3RhbnQKKyAgIHByYWdtYSBJbmxpbmUgKFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQpOworCisgICBwcm9jZWR1cmUgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHMKKyAgICAgKEJ1dHRvbiA6IGluIE1vdXNlX0J1dHRvbjsKKyAgICAgIFN0YXRlICA6IGluIEJ1dHRvbl9TdGF0ZXM7CisgICAgICBNYXNrICAgOiBpbiBvdXQgRXZlbnRfTWFzayk7CisgICAtLSAgUmVnaXN0ZXIgYWxsIGV2ZW50cyBkZXNjcmliZWQgYnkgdGhlIEJ1dHRvbiBhbmQgdGhlIFN0YXRlIGJpdG1hcC4KKyAgIC0tICBCZWZvcmUgeW91IGNhbGwgdGhpcyB0aGUgZmlyc3QgdGltZSwgeW91IHNob3VsZCBpbml0IHRoZSBtYXNrCisgICAtLSAgd2l0aCB0aGUgRW1wdHlfTWFzayBjb25zdGFudAorCisgICAtLSAgQU5DSE9SKGBtb3VzZW1hc2soKScsYFN0YXJ0X01vdXNlJykKKyAgIC0tICBUaGVyZSBpcyBvbmUgZGlmZmVyZW5jZSB0byBtb3VzbWFzaygpOiB3ZSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQorICAgLS0gIG9sZCBtYXNrLCB0aGF0IG1lYW5zIHRoZSBldmVudCBtYXNrIHZhbHVlIGJlZm9yZSB0aGlzIGNhbGwuCisgICAtLSAgTm90IEltcGxlbWVudGVkOiBUaGUgbGlicmFyeSB2ZXJzaW9uCisgICAtLSAgcmV0dXJucyBhIE1vdXNlX01hc2sgdGhhdCB0ZWxscyB3aGljaCBldmVudHMgYXJlIHJlcG9ydGVkLgorICAgZnVuY3Rpb24gU3RhcnRfTW91c2UgKE1hc2sgOiBFdmVudF9NYXNrIDo9IEFsbF9FdmVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV2ZW50X01hc2s7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTdGFydF9Nb3VzZSk7CisKKyAgIHByb2NlZHVyZSBFbmRfTW91c2UgKE1hc2sgOiBpbiBFdmVudF9NYXNrIDo9IE5vX0V2ZW50cyk7CisgICAtLSAgVGVybWluYXRlcyB0aGUgbW91c2UsIHJlc3RvcmVzIHRoZSBzcGVjaWZpZWQgZXZlbnQgbWFzaworICAgcHJhZ21hIElubGluZSAoRW5kX01vdXNlKTsKKworICAgLS0gIEFOQ0hPUihgZ2V0bW91c2UoKScsYEdldF9Nb3VzZScpCisgICBmdW5jdGlvbiBHZXRfTW91c2UgcmV0dXJuIE1vdXNlX0V2ZW50OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X01vdXNlKTsKKworICAgcHJvY2VkdXJlIEdldF9FdmVudCAoRXZlbnQgIDogaW4gIE1vdXNlX0V2ZW50OworICAgICAgICAgICAgICAgICAgICAgICAgWSAgICAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBYICAgICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIDogb3V0IE1vdXNlX0J1dHRvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICA6IG91dCBCdXR0b25fU3RhdGUpOworICAgLS0gICEhISBXYXJuaW5nOiBYIGFuZCBZIGFyZSBzY3JlZW4gY29vcmRpbmF0ZXMuIER1ZSB0byByaXBwZWQgb2YgbGluZXMgdGhleQorICAgLS0gIG1heSBub3QgYmUgaWRlbnRpY2FsIHRvIHdpbmRvdyBjb29yZGluYXRlcy4KKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IEdldF9FdmVudCBvbmx5IHJlcG9ydHMgb25lIGV2ZW50LCB0aGUgQyBsaWJyYXJ5CisgICAtLSAgdmVyc2lvbiBzdXBwb3J0cyBtdWx0aXBsZSBldmVudHMsIGUuZy4ge2NsaWNrLTEsIGNsaWNrLTN9CisgICBwcmFnbWEgSW5saW5lIChHZXRfRXZlbnQpOworCisgICAtLSAgQU5DSE9SKGB1bmdldG1vdXNlKCknLGBVbmdldF9Nb3VzZScpCisgICBwcm9jZWR1cmUgVW5nZXRfTW91c2UgKEV2ZW50IDogaW4gTW91c2VfRXZlbnQpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVW5nZXRfTW91c2UpOworCisgICAtLSAgQU5DSE9SKGB3ZW5jbG9zZSgpJyxgRW5jbG9zZWRfSW5fV2luZG93JykKKyAgIGZ1bmN0aW9uIEVuY2xvc2VkX0luX1dpbmRvdyAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgIDogTW91c2VfRXZlbnQpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgLS0gIEJ1dCA6IHVzZSBldmVudCBpbnN0ZWFkIG9mIHNjcmVlbiBjb29yZGluYXRlcy4KKyAgIHByYWdtYSBJbmxpbmUgKEVuY2xvc2VkX0luX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYG1vdXNlaW50ZXJ2YWwoKScsYE1vdXNlX0ludGVydmFsJykKKyAgIGZ1bmN0aW9uIE1vdXNlX0ludGVydmFsIChNc2VjIDogTmF0dXJhbCA6PSAyMDApIHJldHVybiBOYXR1cmFsOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoTW91c2VfSW50ZXJ2YWwpOworCitwcml2YXRlCisgICB0eXBlIEV2ZW50X01hc2sgaXMgbmV3IEludGVyZmFjZXMuQy51bnNpZ25lZF9sb25nOworCisgICB0eXBlIE1vdXNlX0V2ZW50IGlzCisgICAgICByZWNvcmQKKyAgICAgICAgIElkICAgICAgOiBJbnRlZ2VyIHJhbmdlIEludGVnZXIgKEludGVyZmFjZXMuQy5zaG9ydCdGaXJzdCkgLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgKEludGVyZmFjZXMuQy5zaG9ydCdMYXN0KTsKKyAgICAgICAgIFgsIFksIFogOiBJbnRlZ2VyIHJhbmdlIEludGVnZXIgKEludGVyZmFjZXMuQy5pbnQnRmlyc3QpIC4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIChJbnRlcmZhY2VzLkMuaW50J0xhc3QpOworICAgICAgICAgQnN0YXRlICA6IEV2ZW50X01hc2s7CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE1vdXNlX0V2ZW50KTsKKworaW5jbHVkZShgTW91c2VfRXZlbnRfUmVwJykKKyAgIEdlbmVyYXRpb25fQml0X09yZGVyIDogY29uc3RhbnQgU3lzdGVtLkJpdF9PcmRlciA6PSBTeXN0ZW0uTTRfQklUX09SREVSOworICAgLS0gIFRoaXMgY29uc3RhbnQgbWF5IGJlIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS4KKworaW5jbHVkZShgTW91c2VfRXZlbnRzJykKKyAgIE5vX0V2ZW50cyAgOiBjb25zdGFudCBFdmVudF9NYXNrIDo9IDA7CisgICBBbGxfRXZlbnRzIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSBBTExfTU9VU0VfRVZFTlRTOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkZWY5YgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzLm00CkBAIC0wLDAgKzEsNzAgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGEgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWMKKyAgIHR5cGUgVXNlciBpcyBsaW1pdGVkIHByaXZhdGU7CisgICB0eXBlIFVzZXJfQWNjZXNzIGlzIGFjY2VzcyBhbGwgVXNlcjsKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMuVXNlcl9EYXRhIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGEpOworCisgICAtLSAgTUFOUEFHRShgcGFuZWwuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfcGFuZWxfdXNlcnB0cicsYFNldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1VzZXJfRGF0YSk7CisKKyAgIC0tICBBTkNIT1IoYHBhbmVsX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gIFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBwYW5lbF91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gIFBhbmVsKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI3MjYwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkcy5tNApAQCAtMCwwICsxLDE0NyBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKWRubAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscyAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE5ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggU3lzdGVtOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscyk7CitpbmNsdWRlKGBQYW5lbF9MaW5rZXJfT3B0aW9ucycpZG5sCitpbmNsdWRlKGBMaW5rZXJfT3B0aW9ucycpCisgICB0eXBlIFBhbmVsIGlzIHByaXZhdGU7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIEludGVyZmFjZSBjb25zdGFudHMgIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE51bGxfUGFuZWwgOiBjb25zdGFudCBQYW5lbDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIEV4Y2VwdGlvbnMgICAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBQYW5lbF9FeGNlcHRpb24gOiBleGNlcHRpb247CisKKyAgIC0tICBNQU5QQUdFKGBwYW5lbC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYG5ld19wYW5lbCgpJyxgQ3JlYXRlJykKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoV2luIDogV2luZG93KSByZXR1cm4gUGFuZWw7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDcmVhdGUpOworCisgICAtLSAgQU5DSE9SKGBuZXdfcGFuZWwoKScsYE5ld19QYW5lbCcpCisgICBmdW5jdGlvbiBOZXdfUGFuZWwgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFBhbmVsIHJlbmFtZXMgQ3JlYXRlOworICAgLS0gIEFLQQorICAgLS0gIHByYWdtYSBJbmxpbmUgKE5ld19QYW5lbCk7CisKKyAgIC0tICBBTkNIT1IoYGJvdHRvbV9wYW5lbCgpJyxgQm90dG9tJykKKyAgIHByb2NlZHVyZSBCb3R0b20gKFBhbiA6IGluIFBhbmVsKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEJvdHRvbSk7CisKKyAgIC0tICBBTkNIT1IoYHRvcF9wYW5lbCgpJyxgVG9wJykKKyAgIHByb2NlZHVyZSBUb3AgKFBhbiA6IGluIFBhbmVsKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFRvcCk7CisKKyAgIC0tICBBTkNIT1IoYHNob3dfcGFuZWwoKScsYFNob3cnKQorICAgcHJvY2VkdXJlIFNob3cgKFBhbiA6IGluIFBhbmVsKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNob3cpOworCisgICAtLSAgQU5DSE9SKGB1cGRhdGVfcGFuZWxzKCknLGBVcGRhdGVfUGFuZWxzJykKKyAgIHByb2NlZHVyZSBVcGRhdGVfUGFuZWxzOworICAgLS0gIEFLQQorICAgcHJhZ21hIEltcG9ydCAoQywgVXBkYXRlX1BhbmVscywgInVwZGF0ZV9wYW5lbHMiKTsKKworICAgLS0gIEFOQ0hPUihgaGlkZV9wYW5lbCgpJyxgSGlkZScpCisgICBwcm9jZWR1cmUgSGlkZSAoUGFuIDogaW4gUGFuZWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSGlkZSk7CisKKyAgIC0tICBBTkNIT1IoYHBhbmVsX3dpbmRvdygpJyxgR2V0X1dpbmRvdycpCisgICBmdW5jdGlvbiBHZXRfV2luZG93IChQYW4gOiBQYW5lbCkgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBwYW5lbF93aW5kb3coKScsYFBhbmVsX1dpbmRvdycpCisgICBmdW5jdGlvbiBQYW5lbF9XaW5kb3cgKFBhbiA6IFBhbmVsKSByZXR1cm4gV2luZG93IHJlbmFtZXMgR2V0X1dpbmRvdzsKKyAgIC0tICBwcmFnbWEgSW5saW5lIChQYW5lbF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGByZXBsYWNlX3BhbmVsKCknLGBSZXBsYWNlJykKKyAgIHByb2NlZHVyZSBSZXBsYWNlIChQYW4gOiBpbiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVwbGFjZSk7CisKKyAgIC0tICBBTkNIT1IoYG1vdmVfcGFuZWwoKScsYE1vdmUnKQorICAgcHJvY2VkdXJlIE1vdmUgKFBhbiAgICA6IGluIFBhbmVsOworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE1vdmUpOworCisgICAtLSAgQU5DSE9SKGBwYW5lbF9oaWRkZW4oKScsYElzX0hpZGRlbicpCisgICBmdW5jdGlvbiBJc19IaWRkZW4gKFBhbiA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKElzX0hpZGRlbik7CisKKyAgIC0tICBBTkNIT1IoYHBhbmVsX2Fib3ZlKCknLGBBYm92ZScpCisgICBmdW5jdGlvbiBBYm92ZSAoUGFuIDogUGFuZWwpIHJldHVybiBQYW5lbDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEFib3ZlLCAicGFuZWxfYWJvdmUiKTsKKworICAgLS0gIEFOQ0hPUihgcGFuZWxfYmVsb3coKScsYEJlbG93JykKKyAgIGZ1bmN0aW9uIEJlbG93IChQYW4gOiBQYW5lbCkgcmV0dXJuIFBhbmVsOworICAgLS0gIEFLQQorICAgcHJhZ21hIEltcG9ydCAoQywgQmVsb3csICJwYW5lbF9iZWxvdyIpOworCisgICAtLSAgQU5DSE9SKGBkZWxfcGFuZWwoKScsYERlbGV0ZScpCisgICBwcm9jZWR1cmUgRGVsZXRlIChQYW4gOiBpbiBvdXQgUGFuZWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRGVsZXRlKTsKKworcHJpdmF0ZQorICAgICAgdHlwZSBQYW5lbCBpcyBuZXcgU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgICAgTnVsbF9QYW5lbCA6IGNvbnN0YW50IFBhbmVsIDo9IDA7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDYwMDRmCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzLm00CkBAIC0wLDAgKzEsNzggQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSk7CisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKK2luY2x1ZGUoYFRyYWNlX0RlZnMnKQorCisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgVHJhY2VfRGlzYWJsZSAgOiBjb25zdGFudCBUcmFjZV9BdHRyaWJ1dGVfU2V0IDo9IChvdGhlcnMgPT4gRmFsc2UpOworCisgICBUcmFjZV9PcmRpbmFyeSA6IGNvbnN0YW50IFRyYWNlX0F0dHJpYnV0ZV9TZXQgOj0KKyAgICAgKFRpbWVzICAgICAgICAgICAgPT4gVHJ1ZSwKKyAgICAgIFRwdXRzICAgICAgICAgICAgPT4gVHJ1ZSwKKyAgICAgIFVwZGF0ZSAgICAgICAgICAgPT4gVHJ1ZSwKKyAgICAgIEN1cnNvcl9Nb3ZlICAgICAgPT4gVHJ1ZSwKKyAgICAgIENoYXJhY3Rlcl9PdXRwdXQgPT4gVHJ1ZSwKKyAgICAgIG90aGVycyAgICAgICAgICAgPT4gRmFsc2UpOworICAgVHJhY2VfTWF4aW11bSA6IGNvbnN0YW50IFRyYWNlX0F0dHJpYnV0ZV9TZXQgOj0gKG90aGVycyA9PiBUcnVlKTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3RyYWNlLjN4JykKKworICAgLS0gIEFOQ0hPUihgdHJhY2UoKScsYFRyYWNlX29uJykKKyAgIHByb2NlZHVyZSBUcmFjZV9PbiAoeCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpOworICAgLS0gIFRoZSBkZWJ1Z2dpbmcgbGlicmFyeSBoYXMgdHJhY2UuCisKKyAgIC0tICBBTkNIT1IoYF90cmFjZWYoKScsYFRyYWNlX1B1dCcpCisgICBwcm9jZWR1cmUgVHJhY2VfUHV0IChzdHIgOiBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICBDdXJyZW50X1RyYWNlX1NldHRpbmcgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0OworICAgcHJhZ21hIEltcG9ydCAoQywgQ3VycmVudF9UcmFjZV9TZXR0aW5nLCAiX25jX3RyYWNpbmciKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2U7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGIubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkZGI5NgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYi5tNApAQCAtMCwwICsxLDI1MDIgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjUgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjMyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBTeXN0ZW07CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7Cit3aXRoIEludGVyZmFjZXMuQzsgICAgICAgICAgICAgICAgICB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgICAgICAgICAgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOword2l0aCBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsgICAgICAgdXNlIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOword2l0aCBBZGEuU3RyaW5ncy5GaXhlZDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMgaXMKKworICAgdXNlIEF1eDsKKyAgIHVzZSB0eXBlIFN5c3RlbS5CaXRfT3JkZXI7CisKKyAgIHBhY2thZ2UgQVNGIHJlbmFtZXMgQWRhLlN0cmluZ3MuRml4ZWQ7CisKKyAgIHR5cGUgY2h0eXBlX2FycmF5IGlzIGFycmF5IChzaXplX3QgcmFuZ2UgPD4pCisgICAgICBvZiBhbGlhc2VkIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIGNodHlwZV9hcnJheSk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gS2V5X05hbWUgKEtleSA6IGluIFJlYWxfS2V5X0NvZGUpIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBLZXluYW1lIChLIDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBLZXluYW1lLCAia2V5bmFtZSIpOworCisgICAgICBDaCA6IENoYXJhY3RlcjsKKyAgIGJlZ2luCisgICAgICBpZiBLZXkgPD0gQ2hhcmFjdGVyJ1BvcyAoQ2hhcmFjdGVyJ0xhc3QpIHRoZW4KKyAgICAgICAgIENoIDo9IENoYXJhY3RlcidWYWwgKEtleSk7CisgICAgICAgICBpZiBJc19Db250cm9sIChDaCkgdGhlbgorICAgICAgICAgICAgcmV0dXJuIFVuX0NvbnRyb2wgKEF0dHJpYnV0ZWRfQ2hhcmFjdGVyJyhDaCAgICA9PiBDaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICAgICBlbHNpZiBJc19HcmFwaGljIChDaCkgdGhlbgorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgUyA6IFN0cmluZyAoMSAuLiAxKTsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBTICgxKSA6PSBDaDsKKyAgICAgICAgICAgICAgIHJldHVybiBTOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAgZW5kIGlmOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZpbGxfU3RyaW5nIChLZXluYW1lIChDX0ludCAoS2V5KSkpOworICAgICAgZW5kIGlmOworICAgZW5kIEtleV9OYW1lOworCisgICBwcm9jZWR1cmUgS2V5X05hbWUgKEtleSAgOiBpbiAgUmVhbF9LZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpCisgICBpcworICAgYmVnaW4KKyAgICAgIEFTRi5Nb3ZlIChLZXlfTmFtZSAoS2V5KSwgTmFtZSk7CisgICBlbmQgS2V5X05hbWU7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEluaXRfU2NyZWVuCisgICBpcworICAgICAgZnVuY3Rpb24gSW5pdHNjciByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSW5pdHNjciwgImluaXRzY3IiKTsKKworICAgICAgVyA6IFdpbmRvdzsKKyAgIGJlZ2luCisgICAgICBXIDo9IEluaXRzY3I7CisgICAgICBpZiBXID0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbml0X1NjcmVlbjsKKworICAgcHJvY2VkdXJlIEVuZF9XaW5kb3dzCisgICBpcworICAgICAgZnVuY3Rpb24gRW5kd2luIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEVuZHdpbiwgImVuZHdpbiIpOworICAgYmVnaW4KKyAgICAgIGlmIEVuZHdpbiA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBFbmRfV2luZG93czsKKworICAgZnVuY3Rpb24gSXNfRW5kX1dpbmRvdyByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIElzZW5kd2luIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIElzZW5kd2luLCAiaXNlbmR3aW4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBJc2VuZHdpbiA9IEN1cnNlc19Cb29sX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIElzX0VuZF9XaW5kb3c7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBNb3ZlX0N1cnNvciAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdtb3ZlIChXaW4gICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ19JbnQKKyAgICAgICAgICAgICAgICAgICAgICkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV21vdmUsICJ3bW92ZSIpOworICAgYmVnaW4KKyAgICAgIGlmIFdtb3ZlIChXaW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIE1vdmVfQ3Vyc29yOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gV2FkZGNoIChXICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2FkZGNoLCAid2FkZGNoIik7CisgICBiZWdpbgorICAgICAgaWYgV2FkZGNoIChXaW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBBZGQ7CisKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBDaCAgOiBpbiBDaGFyYWN0ZXIpCisgICBpcworICAgYmVnaW4KKyAgICAgIEFkZCAoV2luLAorICAgICAgICAgICBBdHRyaWJ1dGVkX0NoYXJhY3RlcicoQ2ggICAgPT4gQ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICBlbmQgQWRkOworCisgICBwcm9jZWR1cmUgQWRkCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIENoICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIG12d2FkZGNoIChXICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBZICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIFggIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgbXZ3YWRkY2gsICJtdndhZGRjaCIpOworICAgYmVnaW4KKyAgICAgIGlmIG12d2FkZGNoIChXaW4sIENfSW50IChMaW5lKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoQ29sdW1uKSwKKyAgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQWRkOworCisgICBwcm9jZWR1cmUgQWRkCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIENoICAgICA6IGluIENoYXJhY3RlcikKKyAgIGlzCisgICBiZWdpbgorICAgICAgQWRkIChXaW4sCisgICAgICAgICAgIExpbmUsCisgICAgICAgICAgIENvbHVtbiwKKyAgICAgICAgICAgQXR0cmlidXRlZF9DaGFyYWN0ZXInKENoICAgID0+IENoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbykpOworICAgZW5kIEFkZDsKKworICAgcHJvY2VkdXJlIEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gV2VjaG9jaGFyIChXICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2VjaG9jaGFyLCAid2VjaG9jaGFyIik7CisgICBiZWdpbgorICAgICAgaWYgV2VjaG9jaGFyIChXaW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobzsKKworICAgcHJvY2VkdXJlIEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ2ggIDogaW4gQ2hhcmFjdGVyKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobworICAgICAgICAoV2luLAorICAgICAgICAgQXR0cmlidXRlZF9DaGFyYWN0ZXInKENoICAgID0+IENoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICBlbmQgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG87CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIENyZWF0ZSAoTnVtYmVyX09mX0xpbmVzICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOZXd3aW4gKE51bWJlcl9PZl9MaW5lcyAgICAgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENfSW50KSByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTmV3d2luLCAibmV3d2luIik7CisKKyAgICAgIFcgOiBXaW5kb3c7CisgICBiZWdpbgorICAgICAgVyA6PSBOZXd3aW4gKENfSW50IChOdW1iZXJfT2ZfTGluZXMpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChOdW1iZXJfT2ZfQ29sdW1ucyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpcnN0X0xpbmVfUG9zaXRpb24pLAorICAgICAgICAgICAgICAgICAgIENfSW50IChGaXJzdF9Db2x1bW5fUG9zaXRpb24pKTsKKyAgICAgIGlmIFcgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIFc7CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgRGVsZXRlIChXaW4gOiBpbiBvdXQgV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdkZWx3aW4gKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdkZWx3aW4sICJkZWx3aW4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBXZGVsd2luIChXaW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgV2luIDo9IE51bGxfV2luZG93OworICAgZW5kIERlbGV0ZTsKKworICAgZnVuY3Rpb24gU3ViX1dpbmRvdworICAgICAoV2luICAgICAgICAgICAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gU3Vid2luCisgICAgICAgIChXaW4gICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICAgICBOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBDX0ludDsKKyAgICAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENfSW50OworICAgICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogQ19JbnQ7CisgICAgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDX0ludCkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFN1YndpbiwgInN1YndpbiIpOworCisgICAgICBXIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gU3Vid2luIChXaW4sCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9MaW5lcyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9Db2x1bW5zKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRmlyc3RfTGluZV9Qb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpcnN0X0NvbHVtbl9Qb3NpdGlvbikpOworICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBTdWJfV2luZG93OworCisgICBmdW5jdGlvbiBEZXJpdmVkX1dpbmRvdworICAgICAoV2luICAgICAgICAgICAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gRGVyd2luCisgICAgICAgIChXaW4gICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICAgICBOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBDX0ludDsKKyAgICAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENfSW50OworICAgICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogQ19JbnQ7CisgICAgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDX0ludCkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlcndpbiwgImRlcndpbiIpOworCisgICAgICBXIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gRGVyd2luIChXaW4sCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9MaW5lcyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9Db2x1bW5zKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRmlyc3RfTGluZV9Qb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpcnN0X0NvbHVtbl9Qb3NpdGlvbikpOworICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBEZXJpdmVkX1dpbmRvdzsKKworICAgZnVuY3Rpb24gRHVwbGljYXRlIChXaW4gOiBXaW5kb3cpIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEdXB3aW4gKFdpbiA6IFdpbmRvdykgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIER1cHdpbiwgImR1cHdpbiIpOworCisgICAgICBXIDogY29uc3RhbnQgV2luZG93IDo9IER1cHdpbiAoV2luKTsKKyAgIGJlZ2luCisgICAgICBpZiBXID0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBXOworICAgZW5kIER1cGxpY2F0ZTsKKworICAgcHJvY2VkdXJlIE1vdmVfV2luZG93IChXaW4gICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNdndpbiAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNdndpbiwgIm12d2luIik7CisgICBiZWdpbgorICAgICAgaWYgTXZ3aW4gKFdpbiwgQ19JbnQgKExpbmUpLCBDX0ludCAoQ29sdW1uKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgTW92ZV9XaW5kb3c7CisKKyAgIHByb2NlZHVyZSBNb3ZlX0Rlcml2ZWRfV2luZG93IChXaW4gICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gTXZkZXJ3aW4gKFdpbiAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTXZkZXJ3aW4sICJtdmRlcndpbiIpOworICAgYmVnaW4KKyAgICAgIGlmIE12ZGVyd2luIChXaW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIE1vdmVfRGVyaXZlZF9XaW5kb3c7CisKKyAgIHByb2NlZHVyZSBTZXRfU3luY2hfTW9kZSAoV2luICA6IGluIFdpbmRvdyAgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTeW5jb2sgKFdpbiAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU3luY29rLCAic3luY29rIik7CisgICBiZWdpbgorICAgICAgaWYgU3luY29rIChXaW4sIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoTW9kZSkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU3luY2hfTW9kZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEFkZCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgIFN0ciA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpCisgICBpcworICAgICAgZnVuY3Rpb24gV2FkZG5zdHIgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgIExlbiA6IENfSW50IDo9IC0xKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYWRkbnN0ciwgIndhZGRuc3RyIik7CisKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gU3RyJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoU3RyLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBXYWRkbnN0ciAoV2luLCBUeHQsIENfSW50IChMZW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBBZGQ7CisKKyAgIHByb2NlZHVyZSBBZGQKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgU3RyICAgIDogaW4gU3RyaW5nOworICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKKyAgICAgIEFkZCAoV2luLCBTdHIsIExlbik7CisgICBlbmQgQWRkOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgQWRkCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgU3RyIDogaW4gQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICBMZW4gOiBpbiBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdhZGRjaG5zdHIgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNodHlwZV9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbiA6IENfSW50IDo9IC0xKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYWRkY2huc3RyLCAid2FkZGNobnN0ciIpOworCisgICAgICBUeHQgOiBjaHR5cGVfYXJyYXkgKDAgLi4gU3RyJ0xlbmd0aCk7CisgICBiZWdpbgorICAgICAgZm9yIExlbmd0aCBpbiAxIC4uIHNpemVfdCAoU3RyJ0xlbmd0aCkgbG9vcAorICAgICAgICAgVHh0IChMZW5ndGggLSAxKSA6PSBTdHIgKE5hdHVyYWwgKExlbmd0aCkpOworICAgICAgZW5kIGxvb3A7CisgICAgICBUeHQgKFN0cidMZW5ndGgpIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgaWYgV2FkZGNobnN0ciAoV2luLAorICAgICAgICAgICAgICAgICAgICAgVHh0LAorICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExlbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEFkZDsKKworICAgcHJvY2VkdXJlIEFkZAorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBTdHIgICAgOiBpbiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpCisgICBpcworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIExpbmUsIENvbHVtbik7CisgICAgICBBZGQgKFdpbiwgU3RyLCBMZW4pOworICAgZW5kIEFkZDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEJvcmRlcgorICAgICAoV2luICAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMZWZ0X1NpZGVfU3ltYm9sICAgICAgICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBSaWdodF9TaWRlX1N5bWJvbCAgICAgICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBUb3BfU2lkZV9TeW1ib2wgICAgICAgICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBCb3R0b21fU2lkZV9TeW1ib2wgICAgICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBVcHBlcl9MZWZ0X0Nvcm5lcl9TeW1ib2wgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBVcHBlcl9SaWdodF9Db3JuZXJfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBMb3dlcl9MZWZ0X0Nvcm5lcl9TeW1ib2wgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBMb3dlcl9SaWdodF9Db3JuZXJfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gV2JvcmRlciAoVyAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgTFMgIDogQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBSUyAgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRTICA6IENfQ2h0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgQlMgIDogQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBVTEMgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSQyA6IENfQ2h0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgTExDIDogQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBMUkMgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2JvcmRlciwgIndib3JkZXIiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXYm9yZGVyIChXaW4sCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKExlZnRfU2lkZV9TeW1ib2wpLAorICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChSaWdodF9TaWRlX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKFRvcF9TaWRlX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKEJvdHRvbV9TaWRlX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKFVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKFVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wpLAorICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChMb3dlcl9MZWZ0X0Nvcm5lcl9TeW1ib2wpLAorICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChMb3dlcl9SaWdodF9Db3JuZXJfU3ltYm9sKQorICAgICAgICAgICAgICAgICAgKSA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQm9yZGVyOworCisgICBwcm9jZWR1cmUgQm94CisgICAgIChXaW4gICAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBWZXJ0aWNhbF9TeW1ib2wgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgSG9yaXpvbnRhbF9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcikKKyAgIGlzCisgICBiZWdpbgorICAgICAgQm9yZGVyIChXaW4sCisgICAgICAgICAgICAgIFZlcnRpY2FsX1N5bWJvbCwgVmVydGljYWxfU3ltYm9sLAorICAgICAgICAgICAgICBIb3Jpem9udGFsX1N5bWJvbCwgSG9yaXpvbnRhbF9TeW1ib2wpOworICAgZW5kIEJveDsKKworICAgcHJvY2VkdXJlIEhvcml6b250YWxfTGluZQorICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZV9TaXplICAgOiBpbiBOYXR1cmFsOworICAgICAgTGluZV9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXaGxpbmUgKFcgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgQ2ggIDogQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgIExlbiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaGxpbmUsICJ3aGxpbmUiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXaGxpbmUgKFdpbiwKKyAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChMaW5lX1N5bWJvbCksCisgICAgICAgICAgICAgICAgIENfSW50IChMaW5lX1NpemUpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIb3Jpem9udGFsX0xpbmU7CisKKyAgIHByb2NlZHVyZSBWZXJ0aWNhbF9MaW5lCisgICAgIChXaW4gICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lX1NpemUgICA6IGluIE5hdHVyYWw7CisgICAgICBMaW5lX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFd2bGluZSAoVyAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFd2bGluZSwgInd2bGluZSIpOworICAgYmVnaW4KKyAgICAgIGlmIFd2bGluZSAoV2luLAorICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKExpbmVfU3ltYm9sKSwKKyAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVfU2l6ZSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFZlcnRpY2FsX0xpbmU7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gR2V0X0tleXN0cm9rZSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgcmV0dXJuIFJlYWxfS2V5X0NvZGUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXZ2V0Y2ggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdnZXRjaCwgIndnZXRjaCIpOworCisgICAgICBDIDogY29uc3RhbnQgQ19JbnQgOj0gV2dldGNoIChXaW4pOworICAgYmVnaW4KKyAgICAgIGlmIEMgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJldHVybiBLZXlfTm9uZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBSZWFsX0tleV9Db2RlIChDKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfS2V5c3Ryb2tlOworCisgICBwcm9jZWR1cmUgVW5kb19LZXlzdHJva2UgKEtleSA6IGluIFJlYWxfS2V5X0NvZGUpCisgICBpcworICAgICAgZnVuY3Rpb24gVW5nZXRjaCAoQ2ggOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVW5nZXRjaCwgInVuZ2V0Y2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBVbmdldGNoIChDX0ludCAoS2V5KSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgVW5kb19LZXlzdHJva2U7CisKKyAgIGZ1bmN0aW9uIEhhc19LZXkgKEtleSA6IFNwZWNpYWxfS2V5X0NvZGUpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSGFza2V5IChLZXkgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSGFza2V5LCAiaGFzX2tleSIpOworICAgYmVnaW4KKyAgICAgIGlmIEhhc2tleSAoQ19JbnQgKEtleSkpID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEhhc19LZXk7CisKKyAgIGZ1bmN0aW9uIElzX0Z1bmN0aW9uX0tleSAoS2V5IDogU3BlY2lhbF9LZXlfQ29kZSkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBMIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZSAgOj0gU3BlY2lhbF9LZXlfQ29kZSAoTmF0dXJhbCAoS2V5X0YwKSArCisgICAgICAgIE5hdHVyYWwgKEZ1bmN0aW9uX0tleV9OdW1iZXInTGFzdCkpOworICAgYmVnaW4KKyAgICAgIGlmIChLZXkgPj0gS2V5X0YwKSBhbmQgdGhlbiAoS2V5IDw9IEwpIHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZW5kIGlmOworICAgZW5kIElzX0Z1bmN0aW9uX0tleTsKKworICAgZnVuY3Rpb24gRnVuY3Rpb25fS2V5IChLZXkgOiBSZWFsX0tleV9Db2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25fS2V5X051bWJlcgorICAgaXMKKyAgIGJlZ2luCisgICAgICBpZiBJc19GdW5jdGlvbl9LZXkgKEtleSkgdGhlbgorICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uX0tleV9OdW1iZXIgKEtleSAtIEtleV9GMCk7CisgICAgICBlbHNlCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworICAgZW5kIEZ1bmN0aW9uX0tleTsKKworICAgZnVuY3Rpb24gRnVuY3Rpb25fS2V5X0NvZGUgKEtleSA6IEZ1bmN0aW9uX0tleV9OdW1iZXIpIHJldHVybiBSZWFsX0tleV9Db2RlCisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBSZWFsX0tleV9Db2RlIChOYXR1cmFsIChLZXlfRjApICsgTmF0dXJhbCAoS2V5KSk7CisgICBlbmQgRnVuY3Rpb25fS2V5X0NvZGU7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTdGFuZG91dCAoV2luIDogV2luZG93ICA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgIE9uICA6IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiB3c3RhbmRvdXQgKFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgd3N0YW5kb3V0LCAid3N0YW5kb3V0Iik7CisgICAgICBmdW5jdGlvbiB3c3RhbmRlbmQgKFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgd3N0YW5kZW5kLCAid3N0YW5kZW5kIik7CisKKyAgICAgIEVyciA6IENfSW50OworICAgYmVnaW4KKyAgICAgIGlmIE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSB3c3RhbmRvdXQgKFdpbik7CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gd3N0YW5kZW5kIChXaW4pOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFN0YW5kb3V0OworCisgICBwcm9jZWR1cmUgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQXR0ciA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIE9uICAgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gV2F0dHJvbiAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgQ19BdHRyIDogQ19BdHRyVHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2F0dHJvbiwgIndhdHRyX29uIik7CisgICAgICBmdW5jdGlvbiBXYXR0cm9mZiAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIENfQXR0ciA6IENfQXR0clR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhdHRyb2ZmLCAid2F0dHJfb2ZmIik7CisgICAgICAtLSAgSW4gQWRhIHdlIHVzZSB0aGUgT24gQm9vbGVhbiB0byBjb250cm9sIHdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8KKyAgICAgIC0tICBzd2l0Y2ggb24gb3Igb2ZmIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBzZXQuCisgICAgICBFcnIgOiBDX0ludDsKKyAgICAgIEFDICA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBBdHRyKTsKKyAgIGJlZ2luCisgICAgICBpZiBPbiB0aGVuCisgICAgICAgICBFcnIgOj0gV2F0dHJvbiAgKFdpbiwgQXR0ckNoYXJfVG9fQXR0clR5cGUgKEFDKSk7CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gV2F0dHJvZmYgKFdpbiwgQXR0ckNoYXJfVG9fQXR0clR5cGUgKEFDKSk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGU7CisKKyAgIHByb2NlZHVyZSBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMKKyAgICAgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICBpcworICAgICAgZnVuY3Rpb24gV2F0dHJzZXQgKFdpbiAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDX0F0dHIgOiBDX0F0dHJUeXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYXR0cnNldCwgIndhdHRyc2V0Iik7IC0tID8/PyB3YXR0cl9zZXQKKyAgIGJlZ2luCisgICAgICBpZiBXYXR0cnNldCAoV2luLAorICAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0F0dHJUeXBlIChBdHRyaWJ1dGVkX0NoYXJhY3RlcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQXR0cikpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM7CisKKyAgIGZ1bmN0aW9uIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdhdHRyZ2V0IChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgQXRyIDogYWNjZXNzIENfQXR0clR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogYWNjZXNzIENfU2hvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhdHRyZ2V0LCAid2F0dHJfZ2V0Iik7CisKKyAgICAgIEF0dHIgOiBhbGlhc2VkIENfQXR0clR5cGU7CisgICAgICBDb2wgIDogYWxpYXNlZCBDX1Nob3J0OworICAgICAgUmVzICA6IGNvbnN0YW50IENfSW50IDo9IFdhdHRyZ2V0IChXaW4sIEF0dHInQWNjZXNzLCBDb2wnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uTnVsbF9BZGRyZXNzKTsKKyAgICAgIENoICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDdXJzZXNfT2sgdGhlbgorICAgICAgICAgQ2ggOj0gQXR0clR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpOworICAgICAgICAgcmV0dXJuIENoLkF0dHI7CisgICAgICBlbHNlCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlOworCisgICBmdW5jdGlvbiBHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JfUGFpcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdhdHRyZ2V0IChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgQXRyIDogYWNjZXNzIENfQXR0clR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogYWNjZXNzIENfU2hvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhdHRyZ2V0LCAid2F0dHJfZ2V0Iik7CisKKyAgICAgIEF0dHIgOiBhbGlhc2VkIENfQXR0clR5cGU7CisgICAgICBDb2wgIDogYWxpYXNlZCBDX1Nob3J0OworICAgICAgUmVzICA6IGNvbnN0YW50IENfSW50IDo9IFdhdHRyZ2V0IChXaW4sIEF0dHInQWNjZXNzLCBDb2wnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uTnVsbF9BZGRyZXNzKTsKKyAgICAgIENoICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDdXJzZXNfT2sgdGhlbgorICAgICAgICAgQ2ggOj0gQXR0clR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpOworICAgICAgICAgcmV0dXJuIENoLkNvbG9yOworICAgICAgZWxzZQorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZTsKKworICAgcHJvY2VkdXJlIFNldF9Db2xvciAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBQYWlyIDogaW4gQ29sb3JfUGFpcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXc2V0X0NvbG9yIChXaW4gICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdHMgIDogQ19Wb2lkX1B0cikgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3NldF9Db2xvciwgIndjb2xvcl9zZXQiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXc2V0X0NvbG9yIChXaW4sCisgICAgICAgICAgICAgICAgICAgICBDX1Nob3J0IChQYWlyKSwKKyAgICAgICAgICAgICAgICAgICAgIENfVm9pZF9QdHIgKFN5c3RlbS5OdWxsX0FkZHJlc3MpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQ29sb3I7CisKKyAgIHByb2NlZHVyZSBDaGFuZ2VfQXR0cmlidXRlcworICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ291bnQgOiBpbiBJbnRlZ2VyIDo9IC0xOworICAgICAgQXR0ciAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXY2hnYXQgKFdpbiAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICBDbnQgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA6IENfQXR0clR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgT3B0cyAgOiBTeXN0ZW0uQWRkcmVzcyA6PSBTeXN0ZW0uTnVsbF9BZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXY2hnYXQsICJ3Y2hnYXQiKTsKKworICAgICAgQ2ggOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PQorICAgICAgICAoQ2ggPT4gQ2hhcmFjdGVyJ0ZpcnN0LCBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LCBBdHRyID0+IEF0dHIpOworICAgYmVnaW4KKyAgICAgIGlmIFdjaGdhdCAoV2luLCBDX0ludCAoQ291bnQpLCBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoQ2gpLAorICAgICAgICAgICAgICAgICBDX1Nob3J0IChDb2xvcikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIENoYW5nZV9BdHRyaWJ1dGVzOworCisgICBwcm9jZWR1cmUgQ2hhbmdlX0F0dHJpYnV0ZXMKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uIDo9IExpbmVfUG9zaXRpb24nRmlyc3Q7CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24gOj0gQ29sdW1uX1Bvc2l0aW9uJ0ZpcnN0OworICAgICAgQ291bnQgIDogaW4gSW50ZWdlciA6PSAtMTsKKyAgICAgIEF0dHIgICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yICA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKKyAgICAgIENoYW5nZV9BdHRyaWJ1dGVzIChXaW4sIENvdW50LCBBdHRyLCBDb2xvcik7CisgICBlbmQgQ2hhbmdlX0F0dHJpYnV0ZXM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBCZWVwCisgICBpcworICAgICAgZnVuY3Rpb24gQmVlcGVyIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEJlZXBlciwgImJlZXAiKTsKKyAgIGJlZ2luCisgICAgICBpZiBCZWVwZXIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQmVlcDsKKworICAgcHJvY2VkdXJlIEZsYXNoX1NjcmVlbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZsYXNoIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZsYXNoLCAiZmxhc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBGbGFzaCA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBGbGFzaF9TY3JlZW47CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfQ2JyZWFrX01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIENicmVhayByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDYnJlYWssICJjYnJlYWsiKTsKKyAgICAgIGZ1bmN0aW9uIE5vQ2JyZWFrIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vQ2JyZWFrLCAibm9jYnJlYWsiKTsKKworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgaWYgU3dpdGNoT24gdGhlbgorICAgICAgICAgRXJyIDo9IENicmVhazsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBOb0NicmVhazsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQ2JyZWFrX01vZGU7CisKKyAgIHByb2NlZHVyZSBTZXRfUmF3X01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFJhdyByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSYXcsICJyYXciKTsKKyAgICAgIGZ1bmN0aW9uIE5vUmF3IHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vUmF3LCAibm9yYXciKTsKKworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgaWYgU3dpdGNoT24gdGhlbgorICAgICAgICAgRXJyIDo9IFJhdzsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBOb1JhdzsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfUmF3X01vZGU7CisKKyAgIHByb2NlZHVyZSBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBFY2hvIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEVjaG8sICJlY2hvIik7CisgICAgICBmdW5jdGlvbiBOb0VjaG8gcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTm9FY2hvLCAibm9lY2hvIik7CisKKyAgICAgIEVyciA6IENfSW50OworICAgYmVnaW4KKyAgICAgIGlmIFN3aXRjaE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBFY2hvOworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IE5vRWNobzsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRWNob19Nb2RlOworCisgICBwcm9jZWR1cmUgU2V0X01ldGFfTW9kZSAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1ldGEgKFcgOiBXaW5kb3c7IE1vZGUgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWV0YSwgIm1ldGEiKTsKKyAgIGJlZ2luCisgICAgICBpZiBNZXRhIChXaW4sIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoU3dpdGNoT24pKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X01ldGFfTW9kZTsKKworICAgcHJvY2VkdXJlIFNldF9LZXlQYWRfTW9kZSAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gS2V5cGFkIChXIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEtleXBhZCwgImtleXBhZCIpOworICAgYmVnaW4KKyAgICAgIGlmIEtleXBhZCAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKFN3aXRjaE9uKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9LZXlQYWRfTW9kZTsKKworICAgZnVuY3Rpb24gR2V0X0tleVBhZF9Nb2RlIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIElzX0tleXBhZCAoVyA6IFdpbmRvdykgcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXNfS2V5cGFkLCAiaXNfa2V5cGFkIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIChJc19LZXlwYWQgKFdpbikgLz0gQ3Vyc2VzX0Jvb2xfRmFsc2UpOworICAgZW5kIEdldF9LZXlQYWRfTW9kZTsKKworICAgcHJvY2VkdXJlIEhhbGZfRGVsYXkgKEFtb3VudCA6IGluIEhhbGZfRGVsYXlfQW1vdW50KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEhhbGZkZWxheSAoQW1vdW50IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEhhbGZkZWxheSwgImhhbGZkZWxheSIpOworICAgYmVnaW4KKyAgICAgIGlmIEhhbGZkZWxheSAoQ19JbnQgKEFtb3VudCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEhhbGZfRGVsYXk7CisKKyAgIHByb2NlZHVyZSBTZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBJbnRyZmx1c2ggKFdpbiA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJbnRyZmx1c2gsICJpbnRyZmx1c2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBJbnRyZmx1c2ggKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChNb2RlKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZTsKKworICAgcHJvY2VkdXJlIFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZQorICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRmx1c2ggOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgcHJvY2VkdXJlIFFpZmx1c2g7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBRaWZsdXNoLCAicWlmbHVzaCIpOworICAgICAgcHJvY2VkdXJlIE5vX1FpZmx1c2g7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOb19RaWZsdXNoLCAibm9xaWZsdXNoIik7CisgICBiZWdpbgorICAgICAgaWYgV2luID0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEZsdXNoIHRoZW4KKyAgICAgICAgIFFpZmx1c2g7CisgICAgICBlbHNlCisgICAgICAgICBOb19RaWZsdXNoOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTsKKworICAgcHJvY2VkdXJlIFNldF9Ob0RlbGF5X01vZGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICBpcworICAgICAgZnVuY3Rpb24gTm9kZWxheSAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vZGVsYXksICJub2RlbGF5Iik7CisgICBiZWdpbgorICAgICAgaWYgTm9kZWxheSAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKE1vZGUpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X05vRGVsYXlfTW9kZTsKKworICAgcHJvY2VkdXJlIFNldF9UaW1lb3V0X01vZGUgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSAgIDogaW4gVGltZW91dF9Nb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIE5hdHVyYWwpCisgICBpcworICAgICAgcHJvY2VkdXJlIFd0aW1lb3V0IChXaW4gOiBXaW5kb3c7IEFtb3VudCA6IENfSW50KTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFd0aW1lb3V0LCAid3RpbWVvdXQiKTsKKworICAgICAgVGltZSA6IENfSW50OworICAgYmVnaW4KKyAgICAgIGNhc2UgTW9kZSBpcworICAgICAgICAgd2hlbiBCbG9ja2luZyAgICAgPT4gVGltZSA6PSAtMTsKKyAgICAgICAgIHdoZW4gTm9uX0Jsb2NraW5nID0+IFRpbWUgOj0gMDsKKyAgICAgICAgIHdoZW4gRGVsYXllZCAgICAgID0+CisgICAgICAgICAgICBpZiBBbW91bnQgPSAwIHRoZW4KKyAgICAgICAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBUaW1lIDo9IENfSW50IChBbW91bnQpOworICAgICAgZW5kIGNhc2U7CisgICAgICBXdGltZW91dCAoV2luLCBUaW1lKTsKKyAgIGVuZCBTZXRfVGltZW91dF9Nb2RlOworCisgICBwcm9jZWR1cmUgU2V0X0VzY2FwZV9UaW1lcl9Nb2RlCisgICAgIChXaW4gICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgVGltZXJfT2ZmIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOb3RpbWVvdXQgKFdpbiA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOb3RpbWVvdXQsICJub3RpbWVvdXQiKTsKKyAgIGJlZ2luCisgICAgICBpZiBOb3RpbWVvdXQgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChUaW1lcl9PZmYpKSkKKyAgICAgICAgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0VzY2FwZV9UaW1lcl9Nb2RlOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfTkxfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gTkwgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTkwsICJubCIpOworICAgICAgZnVuY3Rpb24gTm9OTCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOb05MLCAibm9ubCIpOworCisgICAgICBFcnIgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBpZiBTd2l0Y2hPbiB0aGVuCisgICAgICAgICBFcnIgOj0gTkw7CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gTm9OTDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTkxfTW9kZTsKKworICAgcHJvY2VkdXJlIENsZWFyX09uX05leHRfVXBkYXRlCisgICAgIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19DbGVhciA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBDbGVhcl9PayAoVyA6IFdpbmRvdzsgRmxhZyA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDbGVhcl9PaywgImNsZWFyb2siKTsKKyAgIGJlZ2luCisgICAgICBpZiBDbGVhcl9PayAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKERvX0NsZWFyKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIENsZWFyX09uX05leHRfVXBkYXRlOworCisgICBwcm9jZWR1cmUgVXNlX0luc2VydF9EZWxldGVfTGluZQorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0lkbCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBJRExfT2sgKFcgOiBXaW5kb3c7IEZsYWcgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSURMX09rLCAiaWRsb2siKTsKKyAgIGJlZ2luCisgICAgICBpZiBJRExfT2sgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChEb19JZGwpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgVXNlX0luc2VydF9EZWxldGVfTGluZTsKKworICAgcHJvY2VkdXJlIFVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcgorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0lkYyA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgSURDX09rIChXIDogV2luZG93OyBGbGFnIDogQ3Vyc2VzX0Jvb2wpOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSURDX09rLCAiaWRjb2siKTsKKyAgIGJlZ2luCisgICAgICBJRENfT2sgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChEb19JZGMpKSk7CisgICBlbmQgVXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyOworCisgICBwcm9jZWR1cmUgTGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZQorICAgICAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fTGVhdmUgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gTGVhdmVfT2sgKFcgOiBXaW5kb3c7IEZsYWcgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTGVhdmVfT2ssICJsZWF2ZW9rIik7CisgICBiZWdpbgorICAgICAgaWYgTGVhdmVfT2sgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChEb19MZWF2ZSkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlOworCisgICBwcm9jZWR1cmUgSW1tZWRpYXRlX1VwZGF0ZV9Nb2RlCisgICAgIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE1vZGUgOiBpbiBCb29sZWFuIDo9IEZhbHNlKQorICAgaXMKKyAgICAgIHByb2NlZHVyZSBJbW1lZG9rIChXaW4gOiBXaW5kb3c7IE1vZGUgOiBDdXJzZXNfQm9vbCk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJbW1lZG9rLCAiaW1tZWRvayIpOworICAgYmVnaW4KKyAgICAgIEltbWVkb2sgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChNb2RlKSkpOworICAgZW5kIEltbWVkaWF0ZV9VcGRhdGVfTW9kZTsKKworICAgcHJvY2VkdXJlIEFsbG93X1Njcm9sbGluZworICAgICAoV2luICA6IGluIFdpbmRvdyAgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICBpcworICAgICAgZnVuY3Rpb24gU2Nyb2xsb2sgKFdpbiA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTY3JvbGxvaywgInNjcm9sbG9rIik7CisgICBiZWdpbgorICAgICAgaWYgU2Nyb2xsb2sgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChNb2RlKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEFsbG93X1Njcm9sbGluZzsKKworICAgZnVuY3Rpb24gU2Nyb2xsaW5nX0FsbG93ZWQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBJc19TY3JvbGxfT2sgKFcgOiBXaW5kb3cpIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIElzX1Njcm9sbF9PaywgImlzX3Njcm9sbG9rIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIChJc19TY3JvbGxfT2sgKFdpbikgLz0gQ3Vyc2VzX0Jvb2xfRmFsc2UpOworICAgZW5kIFNjcm9sbGluZ19BbGxvd2VkOworCisgICBwcm9jZWR1cmUgU2V0X1Njcm9sbF9SZWdpb24KKyAgICAgKFdpbiAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFRvcF9MaW5lICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIEJvdHRvbV9MaW5lIDogaW4gTGluZV9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXc2V0c2NycmVnIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXc2V0c2NycmVnLCAid3NldHNjcnJlZyIpOworICAgYmVnaW4KKyAgICAgIGlmIFdzZXRzY3JyZWcgKFdpbiwgQ19JbnQgKFRvcF9MaW5lKSwgQ19JbnQgKEJvdHRvbV9MaW5lKSkKKyAgICAgICAgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1Njcm9sbF9SZWdpb247CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBVcGRhdGVfU2NyZWVuCisgICBpcworICAgICAgZnVuY3Rpb24gRG9fVXBkYXRlIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERvX1VwZGF0ZSwgImRvdXBkYXRlIik7CisgICBiZWdpbgorICAgICAgaWYgRG9fVXBkYXRlID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFVwZGF0ZV9TY3JlZW47CisKKyAgIHByb2NlZHVyZSBSZWZyZXNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdyZWZyZXNoIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXcmVmcmVzaCwgIndyZWZyZXNoIik7CisgICBiZWdpbgorICAgICAgaWYgV3JlZnJlc2ggKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVmcmVzaDsKKworICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gV25vdXRyZWZyZXNoIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXbm91dHJlZnJlc2gsICJ3bm91dHJlZnJlc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBXbm91dHJlZnJlc2ggKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKKworICAgcHJvY2VkdXJlIFJlZHJhdyAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBSZWRyYXd3aW4gKFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVkcmF3d2luLCAicmVkcmF3d2luIik7CisgICBiZWdpbgorICAgICAgaWYgUmVkcmF3d2luIChXaW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFJlZHJhdzsKKworICAgcHJvY2VkdXJlIFJlZHJhdworICAgICAoV2luICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBCZWdpbl9MaW5lIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIExpbmVfQ291bnQgOiBpbiBQb3NpdGl2ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXcmVkcmF3bG4gKFdpbiA6IFdpbmRvdzsgRmlyc3QgOiBDX0ludDsgQ250IDogQ19JbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdyZWRyYXdsbiwgIndyZWRyYXdsbiIpOworICAgYmVnaW4KKyAgICAgIGlmIFdyZWRyYXdsbiAoV2luLAorICAgICAgICAgICAgICAgICAgICBDX0ludCAoQmVnaW5fTGluZSksCisgICAgICAgICAgICAgICAgICAgIENfSW50IChMaW5lX0NvdW50KSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVkcmF3OworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBFcmFzZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXZXJhc2UgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdlcmFzZSwgIndlcmFzZSIpOworICAgYmVnaW4KKyAgICAgIGlmIFdlcmFzZSAoV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBFcmFzZTsKKworICAgcHJvY2VkdXJlIENsZWFyIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdjbGVhciAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2NsZWFyLCAid2NsZWFyIik7CisgICBiZWdpbgorICAgICAgaWYgV2NsZWFyIChXaW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIENsZWFyOworCisgICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbiAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXY2xlYXJib3QgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdjbGVhcmJvdCwgIndjbHJ0b2JvdCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdjbGVhcmJvdCAoV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuOworCisgICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gV2NsZWFyZW9sIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXY2xlYXJlb2wsICJ3Y2xydG9lb2wiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXY2xlYXJlb2wgKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfQmFja2dyb3VuZAorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIHByb2NlZHVyZSBXQmFja2dyb3VuZCAoVyA6IGluIFdpbmRvdzsgQ2ggOiBpbiBDX0NodHlwZSk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXQmFja2dyb3VuZCwgIndia2dkc2V0Iik7CisgICBiZWdpbgorICAgICAgV0JhY2tncm91bmQgKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgZW5kIFNldF9CYWNrZ3JvdW5kOworCisgICBwcm9jZWR1cmUgQ2hhbmdlX0JhY2tncm91bmQKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXQ2hhbmdlQmtnZCAoVyA6IFdpbmRvdzsgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV0NoYW5nZUJrZ2QsICJ3YmtnZCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdDaGFuZ2VCa2dkIChXaW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDaGFuZ2VfQmFja2dyb3VuZDsKKworICAgZnVuY3Rpb24gR2V0X0JhY2tncm91bmQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdnZXRia2dkIChXaW4gOiBXaW5kb3cpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdnZXRia2dkLCAiZ2V0YmtnZCIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaHR5cGVfVG9fQXR0ckNoYXIgKFdnZXRia2dkIChXaW4pKTsKKyAgIGVuZCBHZXRfQmFja2dyb3VuZDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIENoYW5nZV9MaW5lc19TdGF0dXMgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQgOiBpbiBQb3NpdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA6IGluIEJvb2xlYW4pCisgICBpcworICAgICAgZnVuY3Rpb24gV3RvdWNobG4gKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdGEgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDbnQgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGcgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3RvdWNobG4sICJ3dG91Y2hsbiIpOworICAgYmVnaW4KKyAgICAgIGlmIFd0b3VjaGxuIChXaW4sIENfSW50IChTdGFydCksIENfSW50IChDb3VudCksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEJvb2xlYW4nUG9zIChTdGF0ZSkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDaGFuZ2VfTGluZXNfU3RhdHVzOworCisgICBwcm9jZWR1cmUgVG91Y2ggKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBpcworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEdldF9TaXplIChXaW4sIFksIFgpOworICAgICAgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luLCAwLCBQb3NpdGl2ZSAoWSksIFRydWUpOworICAgZW5kIFRvdWNoOworCisgICBwcm9jZWR1cmUgVW50b3VjaCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBZIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgR2V0X1NpemUgKFdpbiwgWSwgWCk7CisgICAgICBDaGFuZ2VfTGluZXNfU3RhdHVzIChXaW4sIDAsIFBvc2l0aXZlIChZKSwgRmFsc2UpOworICAgZW5kIFVudG91Y2g7CisKKyAgIHByb2NlZHVyZSBUb3VjaCAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdGFydCA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIENvdW50IDogaW4gUG9zaXRpdmUpCisgICBpcworICAgYmVnaW4KKyAgICAgIENoYW5nZV9MaW5lc19TdGF0dXMgKFdpbiwgU3RhcnQsIENvdW50LCBUcnVlKTsKKyAgIGVuZCBUb3VjaDsKKworICAgZnVuY3Rpb24gSXNfVG91Y2hlZAorICAgICAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lIDogTGluZV9Qb3NpdGlvbikgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBXTGluZVRvdWNoZWQgKFcgOiBXaW5kb3c7IEwgOiBDX0ludCkgcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV0xpbmVUb3VjaGVkLCAiaXNfbGluZXRvdWNoZWQiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXTGluZVRvdWNoZWQgKFdpbiwgQ19JbnQgKExpbmUpKSA9IEN1cnNlc19Cb29sX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIElzX1RvdWNoZWQ7CisKKyAgIGZ1bmN0aW9uIElzX1RvdWNoZWQKKyAgICAgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gV1dpblRvdWNoZWQgKFcgOiBXaW5kb3cpIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdXaW5Ub3VjaGVkLCAiaXNfd2ludG91Y2hlZCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdXaW5Ub3VjaGVkIChXaW4pID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXNfVG91Y2hlZDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIENvcHkKKyAgICAgKFNvdXJjZV9XaW5kb3cgICAgICAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIE5vbl9EZXN0cnVjdGl2ZV9Nb2RlICAgICA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBDb3B5d2luIChTcmMgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBEc3QgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsYyA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgRHRyIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBEbGMgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIERiciA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgRHJjIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBOZG0gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ29weXdpbiwgImNvcHl3aW4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBDb3B5d2luIChTb3VyY2VfV2luZG93LAorICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25fV2luZG93LAorICAgICAgICAgICAgICAgICAgQ19JbnQgKFNvdXJjZV9Ub3BfUm93KSwKKyAgICAgICAgICAgICAgICAgIENfSW50IChTb3VyY2VfTGVmdF9Db2x1bW4pLAorICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX1RvcF9Sb3cpLAorICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX0xlZnRfQ29sdW1uKSwKKyAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9Cb3R0b21fUm93KSwKKyAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4pLAorICAgICAgICAgICAgICAgICAgQm9vbGVhbidQb3MgKE5vbl9EZXN0cnVjdGl2ZV9Nb2RlKQorICAgICAgICAgICAgICAgICkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQ29weTsKKworICAgcHJvY2VkdXJlIE92ZXJ3cml0ZQorICAgICAoU291cmNlX1dpbmRvdyAgICAgIDogaW4gV2luZG93OworICAgICAgRGVzdGluYXRpb25fV2luZG93IDogaW4gV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE92ZXJ3cml0ZSAoU3JjIDogV2luZG93OyBEc3QgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE92ZXJ3cml0ZSwgIm92ZXJ3cml0ZSIpOworICAgYmVnaW4KKyAgICAgIGlmIE92ZXJ3cml0ZSAoU291cmNlX1dpbmRvdywgRGVzdGluYXRpb25fV2luZG93KSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBPdmVyd3JpdGU7CisKKyAgIHByb2NlZHVyZSBPdmVybGF5CisgICAgIChTb3VyY2VfV2luZG93ICAgICAgOiBpbiBXaW5kb3c7CisgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBpbiBXaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gT3ZlcmxheSAoU3JjIDogV2luZG93OyBEc3QgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE92ZXJsYXksICJvdmVybGF5Iik7CisgICBiZWdpbgorICAgICAgaWYgT3ZlcmxheSAoU291cmNlX1dpbmRvdywgRGVzdGluYXRpb25fV2luZG93KSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBPdmVybGF5OworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBJbnNlcnRfRGVsZXRlX0xpbmVzCisgICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lcyA6IGluIEludGVnZXIgICAgICAgOj0gMSkgLS0gZGVmYXVsdCBpcyB0byBpbnNlcnQgb25lIGxpbmUgYWJvdmUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXaW5zZGVsbG4gKFcgOiBXaW5kb3c7IE4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2luc2RlbGxuLCAid2luc2RlbGxuIik7CisgICBiZWdpbgorICAgICAgaWYgV2luc2RlbGxuIChXaW4sIENfSW50IChMaW5lcykpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEluc2VydF9EZWxldGVfTGluZXM7CisKKyAgIHByb2NlZHVyZSBEZWxldGVfTGluZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICBiZWdpbgorICAgICAgSW5zZXJ0X0RlbGV0ZV9MaW5lcyAoV2luLCAtMSk7CisgICBlbmQgRGVsZXRlX0xpbmU7CisKKyAgIHByb2NlZHVyZSBJbnNlcnRfTGluZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICBiZWdpbgorICAgICAgSW5zZXJ0X0RlbGV0ZV9MaW5lcyAoV2luLCAxKTsKKyAgIGVuZCBJbnNlcnRfTGluZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgR2V0X1NpemUKKyAgICAgKFdpbiAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpCisgICBpcworICAgICAgZnVuY3Rpb24gR2V0TWF4WSAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0TWF4WSwgImdldG1heHkiKTsKKworICAgICAgZnVuY3Rpb24gR2V0TWF4WCAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0TWF4WCwgImdldG1heHgiKTsKKworICAgICAgWSA6IGNvbnN0YW50IENfSW50IDo9IEdldE1heFkgKFdpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDX0ludCAoT2Zmc2V0X1hZKTsKKyAgICAgIFggOiBjb25zdGFudCBDX0ludCA6PSBHZXRNYXhYIChXaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgQ19JbnQgKE9mZnNldF9YWSk7CisgICBiZWdpbgorICAgICAgTnVtYmVyX09mX0xpbmVzICAgOj0gTGluZV9Db3VudCAoWSk7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKFgpOworICAgZW5kIEdldF9TaXplOworCisgICBwcm9jZWR1cmUgR2V0X1dpbmRvd19Qb3NpdGlvbgorICAgICAoV2luICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFRvcF9MZWZ0X0xpbmUgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgVG9wX0xlZnRfQ29sdW1uIDogb3V0IENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRCZWdZIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRCZWdZLCAiZ2V0YmVneSIpOworCisgICAgICBmdW5jdGlvbiBHZXRCZWdYIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRCZWdYLCAiZ2V0YmVneCIpOworCisgICAgICBZIDogY29uc3RhbnQgQ19TaG9ydCA6PSBDX1Nob3J0IChHZXRCZWdZIChXaW4pKTsKKyAgICAgIFggOiBjb25zdGFudCBDX1Nob3J0IDo9IENfU2hvcnQgKEdldEJlZ1ggKFdpbikpOworICAgYmVnaW4KKyAgICAgIFRvcF9MZWZ0X0xpbmUgICA6PSBMaW5lX1Bvc2l0aW9uIChZKTsKKyAgICAgIFRvcF9MZWZ0X0NvbHVtbiA6PSBDb2x1bW5fUG9zaXRpb24gKFgpOworICAgZW5kIEdldF9XaW5kb3dfUG9zaXRpb247CisKKyAgIHByb2NlZHVyZSBHZXRfQ3Vyc29yX1Bvc2l0aW9uCisgICAgIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogb3V0IENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRDdXJZIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRDdXJZLCAiZ2V0Y3VyeSIpOworCisgICAgICBmdW5jdGlvbiBHZXRDdXJYIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRDdXJYLCAiZ2V0Y3VyeCIpOworCisgICAgICBZIDogY29uc3RhbnQgQ19TaG9ydCA6PSBDX1Nob3J0IChHZXRDdXJZIChXaW4pKTsKKyAgICAgIFggOiBjb25zdGFudCBDX1Nob3J0IDo9IENfU2hvcnQgKEdldEN1clggKFdpbikpOworICAgYmVnaW4KKyAgICAgIExpbmUgICA6PSBMaW5lX1Bvc2l0aW9uIChZKTsKKyAgICAgIENvbHVtbiA6PSBDb2x1bW5fUG9zaXRpb24gKFgpOworICAgZW5kIEdldF9DdXJzb3JfUG9zaXRpb247CisKKyAgIHByb2NlZHVyZSBHZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudAorICAgICAoV2luICAgICAgICAgICAgICAgIDogaW4gIFdpbmRvdzsKKyAgICAgIFRvcF9MZWZ0X0xpbmUgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgVG9wX0xlZnRfQ29sdW1uICAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIElzX05vdF9BX1N1YndpbmRvdyA6IG91dCBCb29sZWFuKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldFBhclkgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldFBhclksICJnZXRwYXJ5Iik7CisKKyAgICAgIGZ1bmN0aW9uIEdldFBhclggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldFBhclgsICJnZXRwYXJ4Iik7CisKKyAgICAgIFkgOiBjb25zdGFudCBDX0ludCA6PSBHZXRQYXJZIChXaW4pOworICAgICAgWCA6IGNvbnN0YW50IENfSW50IDo9IEdldFBhclggKFdpbik7CisgICBiZWdpbgorICAgICAgaWYgWSA9IC0xIHRoZW4KKyAgICAgICAgIFRvcF9MZWZ0X0xpbmUgICA6PSBMaW5lX1Bvc2l0aW9uJ0xhc3Q7CisgICAgICAgICBUb3BfTGVmdF9Db2x1bW4gOj0gQ29sdW1uX1Bvc2l0aW9uJ0xhc3Q7CisgICAgICAgICBJc19Ob3RfQV9TdWJ3aW5kb3cgOj0gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIFRvcF9MZWZ0X0xpbmUgICA6PSBMaW5lX1Bvc2l0aW9uIChZKTsKKyAgICAgICAgIFRvcF9MZWZ0X0NvbHVtbiA6PSBDb2x1bW5fUG9zaXRpb24gKFgpOworICAgICAgICAgSXNfTm90X0FfU3Vid2luZG93IDo9IEZhbHNlOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBOZXdfUGFkIChMaW5lcyAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBDb2x1bW5fQ291bnQpIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOZXdwYWQgKExpbmVzIDogQ19JbnQ7IENvbHVtbnMgOiBDX0ludCkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5ld3BhZCwgIm5ld3BhZCIpOworCisgICAgICBXIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gTmV3cGFkIChDX0ludCAoTGluZXMpLCBDX0ludCAoQ29sdW1ucykpOworICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBOZXdfUGFkOworCisgICBmdW5jdGlvbiBTdWJfUGFkCisgICAgIChQYWQgICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICBOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFN1YnBhZAorICAgICAgICAoUGFkICAgICAgICAgICAgICAgICAgIDogV2luZG93OworICAgICAgICAgTnVtYmVyX09mX0xpbmVzICAgICAgIDogQ19JbnQ7CisgICAgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDX0ludDsKKyAgICAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gICA6IENfSW50OworICAgICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ19JbnQpIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTdWJwYWQsICJzdWJwYWQiKTsKKworICAgICAgVyA6IFdpbmRvdzsKKyAgIGJlZ2luCisgICAgICBXIDo9IFN1YnBhZCAoUGFkLAorICAgICAgICAgICAgICAgICAgIENfSW50IChOdW1iZXJfT2ZfTGluZXMpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChOdW1iZXJfT2ZfQ29sdW1ucyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpcnN0X0xpbmVfUG9zaXRpb24pLAorICAgICAgICAgICAgICAgICAgIENfSW50IChGaXJzdF9Db2x1bW5fUG9zaXRpb24pKTsKKyAgICAgIGlmIFcgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIFc7CisgICBlbmQgU3ViX1BhZDsKKworICAgcHJvY2VkdXJlIFJlZnJlc2gKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBQcmVmcmVzaAorICAgICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogV2luZG93OworICAgICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogQ19JbnQ7CisgICAgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBDX0ludDsKKyAgICAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IENfSW50OworICAgICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogQ19JbnQ7CisgICAgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBDX0ludDsKKyAgICAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQcmVmcmVzaCwgInByZWZyZXNoIik7CisgICBiZWdpbgorICAgICAgaWYgUHJlZnJlc2ggKFBhZCwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoU291cmNlX1RvcF9Sb3cpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChTb3VyY2VfTGVmdF9Db2x1bW4pLAorICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9Ub3BfUm93KSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fTGVmdF9Db2x1bW4pLAorICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9Cb3R0b21fUm93KSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVmcmVzaDsKKworICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBQbm91dHJlZnJlc2gKKyAgICAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IENfSW50OworICAgICAgICAgU291cmNlX0xlZnRfQ29sdW1uICAgICAgIDogQ19JbnQ7CisgICAgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBDX0ludDsKKyAgICAgICAgIERlc3RpbmF0aW9uX0xlZnRfQ29sdW1uICA6IENfSW50OworICAgICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogQ19JbnQ7CisgICAgICAgICBEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUG5vdXRyZWZyZXNoLCAicG5vdXRyZWZyZXNoIik7CisgICBiZWdpbgorICAgICAgaWYgUG5vdXRyZWZyZXNoIChQYWQsCisgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChTb3VyY2VfVG9wX1JvdyksCisgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChTb3VyY2VfTGVmdF9Db2x1bW4pLAorICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fVG9wX1JvdyksCisgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiksCisgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9Cb3R0b21fUm93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CisKKyAgIHByb2NlZHVyZSBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdAorICAgICAoUGFkIDogaW4gV2luZG93OworICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gUGVjaG9jaGFyIChQYWQgOiBXaW5kb3c7IENoIDogQ19DaHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFBlY2hvY2hhciwgInBlY2hvY2hhciIpOworICAgYmVnaW4KKyAgICAgIGlmIFBlY2hvY2hhciAoUGFkLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ7CisKKyAgIHByb2NlZHVyZSBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdAorICAgICAoUGFkIDogaW4gV2luZG93OworICAgICAgQ2ggIDogaW4gQ2hhcmFjdGVyKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdAorICAgICAgICAoUGFkLAorICAgICAgICAgQXR0cmlidXRlZF9DaGFyYWN0ZXInKENoICAgID0+IENoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICBlbmQgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTY3JvbGwgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBBbW91bnQgOiBpbiBJbnRlZ2VyIDo9IDEpCisgICBpcworICAgICAgZnVuY3Rpb24gV3NjcmwgKFdpbiA6IFdpbmRvdzsgTiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXc2NybCwgIndzY3JsIik7CisKKyAgIGJlZ2luCisgICAgICBpZiBXc2NybCAoV2luLCBDX0ludCAoQW1vdW50KSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2Nyb2xsOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdkZWxjaCAoV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXZGVsY2gsICJ3ZGVsY2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBXZGVsY2ggKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgRGVsZXRlX0NoYXJhY3RlcjsKKworICAgcHJvY2VkdXJlIERlbGV0ZV9DaGFyYWN0ZXIKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE12d2RlbGNoIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGluIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE12d2RlbGNoLCAibXZ3ZGVsY2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBNdndkZWxjaCAoV2luLCBDX0ludCAoTGluZSksIENfSW50IChDb2x1bW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBEZWxldGVfQ2hhcmFjdGVyOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBQZWVrIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgICByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXIKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXaW5jaCAoV2luIDogV2luZG93KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaW5jaCwgIndpbmNoIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENodHlwZV9Ub19BdHRyQ2hhciAoV2luY2ggKFdpbikpOworICAgZW5kIFBlZWs7CisKKyAgIGZ1bmN0aW9uIFBlZWsKKyAgICAgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXIKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNdndpbmNoIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbCA6IENfSW50KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNdndpbmNoLCAibXZ3aW5jaCIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaHR5cGVfVG9fQXR0ckNoYXIgKE12d2luY2ggKFdpbiwgQ19JbnQgKExpbmUpLCBDX0ludCAoQ29sdW1uKSkpOworICAgZW5kIFBlZWs7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXaW5zY2ggKFdpbiA6IFdpbmRvdzsgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2luc2NoLCAid2luc2NoIik7CisgICBiZWdpbgorICAgICAgaWYgV2luc2NoIChXaW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbnNlcnQ7CisKKyAgIHByb2NlZHVyZSBJbnNlcnQKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgQ2ggICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gTXZ3aW5zY2ggKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTXZ3aW5zY2gsICJtdndpbnNjaCIpOworICAgYmVnaW4KKyAgICAgIGlmIE12d2luc2NoIChXaW4sCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmUpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChDb2x1bW4pLAorICAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbnNlcnQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBTdHIgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdpbnNuc3RyIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMZW4gOiBJbnRlZ2VyIDo9IC0xKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaW5zbnN0ciwgIndpbnNuc3RyIik7CisKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gU3RyJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoU3RyLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBXaW5zbnN0ciAoV2luLCBUeHQsIExlbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5zZXJ0OworCisgICBwcm9jZWR1cmUgSW5zZXJ0CisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IGluIFN0cmluZzsKKyAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpCisgICBpcworICAgICAgZnVuY3Rpb24gTXZ3aW5zbnN0ciAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciAgICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW4gICAgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTXZ3aW5zbnN0ciwgIm12d2luc25zdHIiKTsKKworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChTdHIsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIE12d2luc25zdHIgKFdpbiwgQ19JbnQgKExpbmUpLCBDX0ludCAoQ29sdW1uKSwgVHh0LCBDX0ludCAoTGVuKSkKKyAgICAgICAgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5zZXJ0OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUGVlayAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXaW5uc3RyIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdpbm5zdHIsICJ3aW5uc3RyIik7CisKKyAgICAgIE4gICA6IEludGVnZXIgOj0gTGVuOworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgICAgIENudCA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgaWYgTiA8IDAgdGhlbgorICAgICAgICAgTiA6PSBTdHInTGVuZ3RoOworICAgICAgZW5kIGlmOworICAgICAgaWYgTiA+IFN0cidMZW5ndGggdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFR4dCAoMCkgOj0gSW50ZXJmYWNlcy5DLmNoYXInRmlyc3Q7CisgICAgICBpZiBXaW5uc3RyIChXaW4sIFR4dCwgQ19JbnQgKE4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFRvX0FkYSAoVHh0LCBTdHIsIENudCwgVHJ1ZSk7CisgICAgICBpZiBDbnQgPCBTdHInTGVuZ3RoIHRoZW4KKyAgICAgICAgIFN0ciAoKFN0cidGaXJzdCArIENudCkgLi4gU3RyJ0xhc3QpIDo9IChvdGhlcnMgPT4gJyAnKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQZWVrOworCisgICBwcm9jZWR1cmUgUGVlaworICAgICAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluICBDb2x1bW5fUG9zaXRpb247CisgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nOworICAgICAgTGVuICAgIDogaW4gIEludGVnZXIgOj0gLTEpCisgICBpcworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIExpbmUsIENvbHVtbik7CisgICAgICBQZWVrIChXaW4sIFN0ciwgTGVuKTsKKyAgIGVuZCBQZWVrOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUGVlaworICAgICAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBTdHIgOiBvdXQgQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXaW5jaG5zdHIgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogY2h0eXBlX2FycmF5OyAgICAgICAgICAgICAtLSBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdpbmNobnN0ciwgIndpbmNobnN0ciIpOworCisgICAgICBOICAgOiBJbnRlZ2VyIDo9IExlbjsKKyAgICAgIFR4dCA6IGNvbnN0YW50IGNodHlwZV9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKQorICAgICAgICAgIDo9ICgwID0+IERlZmF1bHRfQ2hhcmFjdGVyKTsKKyAgICAgIENudCA6IE5hdHVyYWwgOj0gMDsKKyAgIGJlZ2luCisgICAgICBpZiBOIDwgMCB0aGVuCisgICAgICAgICBOIDo9IFN0cidMZW5ndGg7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBOID4gU3RyJ0xlbmd0aCB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworICAgICAgaWYgV2luY2huc3RyIChXaW4sIFR4dCwgQ19JbnQgKE4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGZvciBUbyBpbiBTdHInUmFuZ2UgbG9vcAorICAgICAgICAgZXhpdCB3aGVuIFR4dCAoc2l6ZV90IChDbnQpKSA9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgICAgU3RyIChUbykgOj0gVHh0IChzaXplX3QgKENudCkpOworICAgICAgICAgQ250IDo9IENudCArIDE7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIGlmIENudCA8IFN0cidMZW5ndGggdGhlbgorICAgICAgICAgU3RyICgoU3RyJ0ZpcnN0ICsgQ250KSAuLiBTdHInTGFzdCkgOj0KKyAgICAgICAgICAgKG90aGVycyA9PiAoQ2ggPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IE5vcm1hbF9WaWRlbykpOworICAgICAgZW5kIGlmOworICAgZW5kIFBlZWs7CisKKyAgIHByb2NlZHVyZSBQZWVrCisgICAgIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluICBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IG91dCBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpCisgICBpcworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIExpbmUsIENvbHVtbik7CisgICAgICBQZWVrIChXaW4sIFN0ciwgTGVuKTsKKyAgIGVuZCBQZWVrOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgR2V0IChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBTdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXZ2V0bnN0ciAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdnZXRuc3RyLCAid2dldG5zdHIiKTsKKworICAgICAgTiAgIDogSW50ZWdlciA6PSBMZW47CisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIFN0cidMZW5ndGgpOworICAgICAgQ250IDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBOIDwgMCB0aGVuCisgICAgICAgICBOIDo9IFN0cidMZW5ndGg7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBOID4gU3RyJ0xlbmd0aCB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworICAgICAgVHh0ICgwKSA6PSBJbnRlcmZhY2VzLkMuY2hhcidGaXJzdDsKKyAgICAgIGlmIFdnZXRuc3RyIChXaW4sIFR4dCwgQ19JbnQgKE4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFRvX0FkYSAoVHh0LCBTdHIsIENudCwgVHJ1ZSk7CisgICAgICBpZiBDbnQgPCBTdHInTGVuZ3RoIHRoZW4KKyAgICAgICAgIFN0ciAoKFN0cidGaXJzdCArIENudCkgLi4gU3RyJ0xhc3QpIDo9IChvdGhlcnMgPT4gJyAnKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXQ7CisKKyAgIHByb2NlZHVyZSBHZXQKKyAgICAgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgU3RyICAgIDogb3V0IFN0cmluZzsKKyAgICAgIExlbiAgICA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoV2luLCBMaW5lLCBDb2x1bW4pOworICAgICAgR2V0IChXaW4sIFN0ciwgTGVuKTsKKyAgIGVuZCBHZXQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBJbml0X1NvZnRfTGFiZWxfS2V5cworICAgICAoRm9ybWF0IDogaW4gU29mdF9MYWJlbF9LZXlfRm9ybWF0IDo9IFRocmVlX1R3b19UaHJlZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfSW5pdCAoRm10IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19Jbml0LCAic2xrX2luaXQiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfSW5pdCAoU29mdF9MYWJlbF9LZXlfRm9ybWF0J1BvcyAoRm9ybWF0KSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5pdF9Tb2Z0X0xhYmVsX0tleXM7CisKKyAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbXQgICA6IGluIExhYmVsX0p1c3RpZmljYXRpb24gOj0gTGVmdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfU2V0IChMYWJlbCA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgVHh0ICAgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgRm10ICAgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX1NldCwgInNsa19zZXQiKTsKKworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiBUZXh0J0xlbmd0aCk7CisgICAgICBMZW4gOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoVGV4dCwgVHh0LCBMZW4pOworICAgICAgaWYgU2xrX1NldCAoQ19JbnQgKExhYmVsKSwgVHh0LAorICAgICAgICAgICAgICAgICAgQ19JbnQgKExhYmVsX0p1c3RpZmljYXRpb24nUG9zIChGbXQpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1NvZnRfTGFiZWxfS2V5OworCisgICBwcm9jZWR1cmUgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXMKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfUmVmcmVzaCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfUmVmcmVzaCwgInNsa19yZWZyZXNoIik7CisgICBiZWdpbgorICAgICAgaWYgU2xrX1JlZnJlc2ggPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXM7CisKKyAgIHByb2NlZHVyZSBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19Ob3V0cmVmcmVzaCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfTm91dHJlZnJlc2gsICJzbGtfbm91dHJlZnJlc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfTm91dHJlZnJlc2ggPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisKKyAgIHByb2NlZHVyZSBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19MYWJlbCAoTGFiZWwgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19MYWJlbCwgInNsa19sYWJlbCIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChTbGtfTGFiZWwgKENfSW50IChMYWJlbCkpLCBUZXh0KTsKKyAgIGVuZCBHZXRfU29mdF9MYWJlbF9LZXk7CisKKyAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWwgOiBpbiBMYWJlbF9OdW1iZXIpIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfTGFiZWwgKExhYmVsIDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfTGFiZWwsICJzbGtfbGFiZWwiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKFNsa19MYWJlbCAoQ19JbnQgKExhYmVsKSkpOworICAgZW5kIEdldF9Tb2Z0X0xhYmVsX0tleTsKKworICAgcHJvY2VkdXJlIENsZWFyX1NvZnRfTGFiZWxfS2V5cworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19DbGVhciByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfQ2xlYXIsICJzbGtfY2xlYXIiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfQ2xlYXIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2xlYXJfU29mdF9MYWJlbF9LZXlzOworCisgICBwcm9jZWR1cmUgUmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXMKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfUmVzdG9yZSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfUmVzdG9yZSwgInNsa19yZXN0b3JlIik7CisgICBiZWdpbgorICAgICAgaWYgU2xrX1Jlc3RvcmUgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM7CisKKyAgIHByb2NlZHVyZSBUb3VjaF9Tb2Z0X0xhYmVsX0tleXMKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfVG91Y2ggcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX1RvdWNoLCAic2xrX3RvdWNoIik7CisgICBiZWdpbgorICAgICAgaWYgU2xrX1RvdWNoID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFRvdWNoX1NvZnRfTGFiZWxfS2V5czsKKworICAgcHJvY2VkdXJlIFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzCisgICAgIChBdHRyIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICBPbiAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyb24gKENoIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyb24sICJzbGtfYXR0cm9uIik7CisgICAgICBmdW5jdGlvbiBTbGtfQXR0cm9mZiAoQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0F0dHJvZmYsICJzbGtfYXR0cm9mZiIpOworCisgICAgICBFcnIgOiBDX0ludDsKKyAgICAgIENoICA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIGJlZ2luCisgICAgICBpZiBPbiB0aGVuCisgICAgICAgICBFcnIgOj0gU2xrX0F0dHJvbiAgKEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBTbGtfQXR0cm9mZiAoQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzOworCisgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMKKyAgICAgKEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICBpcworICAgICAgZnVuY3Rpb24gU2xrX0F0dHJzZXQgKENoIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyc2V0LCAic2xrX2F0dHJzZXQiKTsKKworICAgICAgQ2ggOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfQXR0cnNldCAoQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzOworCisgICBmdW5jdGlvbiBHZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyByZXR1cm4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfQXR0ciByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfQXR0ciwgInNsa19hdHRyIik7CisKKyAgICAgIEF0dHIgOiBjb25zdGFudCBDX0NodHlwZSA6PSBTbGtfQXR0cjsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2h0eXBlX1RvX0F0dHJDaGFyIChBdHRyKS5BdHRyOworICAgZW5kIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzOworCisgICBmdW5jdGlvbiBHZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyByZXR1cm4gQ29sb3JfUGFpcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyLCAic2xrX2F0dHIiKTsKKworICAgICAgQXR0ciA6IGNvbnN0YW50IENfQ2h0eXBlIDo9IFNsa19BdHRyOworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaHR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpLkNvbG9yOworICAgZW5kIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzOworCisgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yIChQYWlyIDogaW4gQ29sb3JfUGFpcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfQ29sb3IgKENvbG9yIDogaW4gQ19TaG9ydCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0NvbG9yLCAic2xrX2NvbG9yIik7CisgICBiZWdpbgorICAgICAgaWYgU2xrX0NvbG9yIChDX1Nob3J0IChQYWlyKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBFbmFibGVfS2V5IChLZXkgICAgOiBpbiBTcGVjaWFsX0tleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBLZXlvayAoS2V5Y29kZSA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgIE9uX09mZiAgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgS2V5b2ssICJrZXlvayIpOworICAgYmVnaW4KKyAgICAgIGlmIEtleW9rIChDX0ludCAoS2V5KSwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChFbmFibGUpKSkKKyAgICAgICAgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgRW5hYmxlX0tleTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIERlZmluZV9LZXkgKERlZmluaXRpb24gOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA6IGluIFNwZWNpYWxfS2V5X0NvZGUpCisgICBpcworICAgICAgZnVuY3Rpb24gRGVma2V5IChEZWYgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICBLZXkgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVma2V5LCAiZGVmaW5lX2tleSIpOworCisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIERlZmluaXRpb24nTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChEZWZpbml0aW9uLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBEZWZrZXkgKFR4dCwgQ19JbnQgKEtleSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIERlZmluZV9LZXk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBVbl9Db250cm9sIChDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFVuY3RybCAoQ2ggOiBDX0NodHlwZSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFVuY3RybCwgInVuY3RybCIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChVbmN0cmwgKEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSwgU3RyKTsKKyAgIGVuZCBVbl9Db250cm9sOworCisgICBmdW5jdGlvbiBVbl9Db250cm9sIChDaCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gVW5jdHJsIChDaCA6IENfQ2h0eXBlKSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVW5jdHJsLCAidW5jdHJsIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEZpbGxfU3RyaW5nIChVbmN0cmwgKEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSk7CisgICBlbmQgVW5fQ29udHJvbDsKKworICAgcHJvY2VkdXJlIERlbGF5X091dHB1dCAoTXNlY3MgOiBpbiBOYXR1cmFsKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIERlbGF5b3V0cHV0IChNc2VjcyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZWxheW91dHB1dCwgImRlbGF5X291dHB1dCIpOworICAgYmVnaW4KKyAgICAgIGlmIERlbGF5b3V0cHV0IChDX0ludCAoTXNlY3MpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBEZWxheV9PdXRwdXQ7CisKKyAgIHByb2NlZHVyZSBGbHVzaF9JbnB1dAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZsdXNoaW5wIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZsdXNoaW5wLCAiZmx1c2hpbnAiKTsKKyAgIGJlZ2luCisgICAgICBpZiBGbHVzaGlucCA9IEN1cnNlc19FcnIgdGhlbiAgLS0gZG9jdSBzYXlzIHRoYXQgbmV2ZXIgaGFwcGVucywgYnV0Li4uCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEZsdXNoX0lucHV0OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBCYXVkcmF0ZSByZXR1cm4gTmF0dXJhbAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEJhdWQgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQmF1ZCwgImJhdWRyYXRlIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE5hdHVyYWwgKEJhdWQpOworICAgZW5kIEJhdWRyYXRlOworCisgICBmdW5jdGlvbiBFcmFzZV9DaGFyYWN0ZXIgcmV0dXJuIENoYXJhY3RlcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEVyYXNlY2hhciByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBFcmFzZWNoYXIsICJlcmFzZWNoYXIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2hhcmFjdGVyJ1ZhbCAoRXJhc2VjaGFyKTsKKyAgIGVuZCBFcmFzZV9DaGFyYWN0ZXI7CisKKyAgIGZ1bmN0aW9uIEtpbGxfQ2hhcmFjdGVyIHJldHVybiBDaGFyYWN0ZXIKKyAgIGlzCisgICAgICBmdW5jdGlvbiBLaWxsY2hhciByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBLaWxsY2hhciwgImtpbGxjaGFyIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENoYXJhY3RlcidWYWwgKEtpbGxjaGFyKTsKKyAgIGVuZCBLaWxsX0NoYXJhY3RlcjsKKworICAgZnVuY3Rpb24gSGFzX0luc2VydF9DaGFyYWN0ZXIgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBIYXNfSWMgcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSGFzX0ljLCAiaGFzX2ljIik7CisgICBiZWdpbgorICAgICAgaWYgSGFzX0ljID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSGFzX0luc2VydF9DaGFyYWN0ZXI7CisKKyAgIGZ1bmN0aW9uIEhhc19JbnNlcnRfTGluZSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEhhc19JbCByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBIYXNfSWwsICJoYXNfaWwiKTsKKyAgIGJlZ2luCisgICAgICBpZiBIYXNfSWwgPSBDdXJzZXNfQm9vbF9GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIYXNfSW5zZXJ0X0xpbmU7CisKKyAgIGZ1bmN0aW9uIFN1cHBvcnRlZF9BdHRyaWJ1dGVzIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFRlcm1hdHRycyByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBUZXJtYXR0cnMsICJ0ZXJtYXR0cnMiKTsKKworICAgICAgQ2ggOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKFRlcm1hdHRycyk7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENoLkF0dHI7CisgICBlbmQgU3VwcG9ydGVkX0F0dHJpYnV0ZXM7CisKKyAgIHByb2NlZHVyZSBMb25nX05hbWUgKE5hbWUgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIExvbmduYW1lIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBMb25nbmFtZSwgImxvbmduYW1lIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKExvbmduYW1lLCBOYW1lKTsKKyAgIGVuZCBMb25nX05hbWU7CisKKyAgIGZ1bmN0aW9uIExvbmdfTmFtZSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gTG9uZ25hbWUgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIExvbmduYW1lLCAibG9uZ25hbWUiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKExvbmduYW1lKTsKKyAgIGVuZCBMb25nX05hbWU7CisKKyAgIHByb2NlZHVyZSBUZXJtaW5hbF9OYW1lIChOYW1lIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBUZXJtbmFtZSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVGVybW5hbWUsICJ0ZXJtbmFtZSIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChUZXJtbmFtZSwgTmFtZSk7CisgICBlbmQgVGVybWluYWxfTmFtZTsKKworICAgZnVuY3Rpb24gVGVybWluYWxfTmFtZSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gVGVybW5hbWUgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFRlcm1uYW1lLCAidGVybW5hbWUiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKFRlcm1uYW1lKTsKKyAgIGVuZCBUZXJtaW5hbF9OYW1lOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgSW5pdF9QYWlyIChQYWlyIDogaW4gUmVkZWZpbmFibGVfQ29sb3JfUGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBpbiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogaW4gQ29sb3JfTnVtYmVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEluaXRwYWlyIChQYWlyIDogQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogQ19TaG9ydCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSW5pdHBhaXIsICJpbml0X3BhaXIiKTsKKyAgIGJlZ2luCisgICAgICBpZiBJbnRlZ2VyIChQYWlyKSA+PSBOdW1iZXJfT2ZfQ29sb3JfUGFpcnMgdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEludGVnZXIgKEZvcmUpID49IE51bWJlcl9PZl9Db2xvcnMgb3IgZWxzZQorICAgICAgICAgSW50ZWdlciAoQmFjaykgPj0gTnVtYmVyX09mX0NvbG9ycyB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworICAgICAgaWYgSW5pdHBhaXIgKENfU2hvcnQgKFBhaXIpLCBDX1Nob3J0IChGb3JlKSwgQ19TaG9ydCAoQmFjaykpCisgICAgICAgID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEluaXRfUGFpcjsKKworICAgcHJvY2VkdXJlIFBhaXJfQ29udGVudCAoUGFpciA6IGluIENvbG9yX1BhaXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ29sb3JfTnVtYmVyKQorICAgaXMKKyAgICAgIHR5cGUgQ19TaG9ydF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX1Nob3J0OworICAgICAgZnVuY3Rpb24gUGFpcmNvbnRlbnQgKFBhaXIgOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZwICAgOiBDX1Nob3J0X0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcCAgIDogQ19TaG9ydF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFBhaXJjb250ZW50LCAicGFpcl9jb250ZW50Iik7CisKKyAgICAgIEYsIEIgOiBhbGlhc2VkIENfU2hvcnQ7CisgICBiZWdpbgorICAgICAgaWYgUGFpcmNvbnRlbnQgKENfU2hvcnQgKFBhaXIpLCBGJ0FjY2VzcywgQidBY2Nlc3MpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgRm9yZSA6PSBDb2xvcl9OdW1iZXIgKEYpOworICAgICAgICAgQmFjayA6PSBDb2xvcl9OdW1iZXIgKEIpOworICAgICAgZW5kIGlmOworICAgZW5kIFBhaXJfQ29udGVudDsKKworICAgZnVuY3Rpb24gSGFzX0NvbG9ycyByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEhhc2NvbG9ycyByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBIYXNjb2xvcnMsICJoYXNfY29sb3JzIik7CisgICBiZWdpbgorICAgICAgaWYgSGFzY29sb3JzID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSGFzX0NvbG9yczsKKworICAgcHJvY2VkdXJlIEluaXRfQ29sb3IgKENvbG9yIDogaW4gQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogaW4gUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWVuIDogaW4gUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWUgIDogaW4gUkdCX1ZhbHVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEluaXRjb2xvciAoQ29sICAgOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgICBSZWQgICA6IENfU2hvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWVuIDogQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZSAgOiBDX1Nob3J0KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJbml0Y29sb3IsICJpbml0X2NvbG9yIik7CisgICBiZWdpbgorICAgICAgaWYgSW5pdGNvbG9yIChDX1Nob3J0IChDb2xvciksIENfU2hvcnQgKFJlZCksIENfU2hvcnQgKEdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgQ19TaG9ydCAoQmx1ZSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEluaXRfQ29sb3I7CisKKyAgIGZ1bmN0aW9uIENhbl9DaGFuZ2VfQ29sb3IgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBDYW5jaGFuZ2Vjb2xvciByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDYW5jaGFuZ2Vjb2xvciwgImNhbl9jaGFuZ2VfY29sb3IiKTsKKyAgIGJlZ2luCisgICAgICBpZiBDYW5jaGFuZ2Vjb2xvciA9IEN1cnNlc19Cb29sX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIENhbl9DaGFuZ2VfQ29sb3I7CisKKyAgIHByb2NlZHVyZSBDb2xvcl9Db250ZW50IChDb2xvciA6IGluICBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVkICAgOiBvdXQgUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWVuIDogb3V0IFJHQl9WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbHVlICA6IG91dCBSR0JfVmFsdWUpCisgICBpcworICAgICAgdHlwZSBDX1Nob3J0X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfU2hvcnQ7CisKKyAgICAgIGZ1bmN0aW9uIENvbG9yY29udGVudCAoQ29sb3IgOiBDX1Nob3J0OyBSLCBHLCBCIDogQ19TaG9ydF9BY2Nlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENvbG9yY29udGVudCwgImNvbG9yX2NvbnRlbnQiKTsKKworICAgICAgUiwgRywgQiA6IGFsaWFzZWQgQ19TaG9ydDsKKyAgIGJlZ2luCisgICAgICBpZiBDb2xvcmNvbnRlbnQgKENfU2hvcnQgKENvbG9yKSwgUidBY2Nlc3MsIEcnQWNjZXNzLCBCJ0FjY2VzcykgPQorICAgICAgICBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICBSZWQgICA6PSBSR0JfVmFsdWUgKFIpOworICAgICAgICAgR3JlZW4gOj0gUkdCX1ZhbHVlIChHKTsKKyAgICAgICAgIEJsdWUgIDo9IFJHQl9WYWx1ZSAoQik7CisgICAgICBlbmQgaWY7CisgICBlbmQgQ29sb3JfQ29udGVudDsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2F2ZV9DdXJzZXNfTW9kZSAoTW9kZSA6IGluIEN1cnNlc19Nb2RlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIERlZl9Qcm9nX01vZGUgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVmX1Byb2dfTW9kZSwgImRlZl9wcm9nX21vZGUiKTsKKyAgICAgIGZ1bmN0aW9uIERlZl9TaGVsbF9Nb2RlIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlZl9TaGVsbF9Nb2RlLCAiZGVmX3NoZWxsX21vZGUiKTsKKworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgY2FzZSBNb2RlIGlzCisgICAgICAgICB3aGVuIEN1cnNlcyA9PiBFcnIgOj0gRGVmX1Byb2dfTW9kZTsKKyAgICAgICAgIHdoZW4gU2hlbGwgID0+IEVyciA6PSBEZWZfU2hlbGxfTW9kZTsKKyAgICAgIGVuZCBjYXNlOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNhdmVfQ3Vyc2VzX01vZGU7CisKKyAgIHByb2NlZHVyZSBSZXNldF9DdXJzZXNfTW9kZSAoTW9kZSA6IGluIEN1cnNlc19Nb2RlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFJlc2V0X1Byb2dfTW9kZSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXNldF9Qcm9nX01vZGUsICJyZXNldF9wcm9nX21vZGUiKTsKKyAgICAgIGZ1bmN0aW9uIFJlc2V0X1NoZWxsX01vZGUgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVzZXRfU2hlbGxfTW9kZSwgInJlc2V0X3NoZWxsX21vZGUiKTsKKworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgY2FzZSBNb2RlIGlzCisgICAgICAgICB3aGVuIEN1cnNlcyA9PiBFcnIgOj0gUmVzZXRfUHJvZ19Nb2RlOworICAgICAgICAgd2hlbiBTaGVsbCAgPT4gRXJyIDo9IFJlc2V0X1NoZWxsX01vZGU7CisgICAgICBlbmQgY2FzZTsKKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZXNldF9DdXJzZXNfTW9kZTsKKworICAgcHJvY2VkdXJlIFNhdmVfVGVybWluYWxfU3RhdGUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTYXZldHR5IHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNhdmV0dHksICJzYXZldHR5Iik7CisgICBiZWdpbgorICAgICAgaWYgU2F2ZXR0eSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTYXZlX1Rlcm1pbmFsX1N0YXRlOworCisgICBwcm9jZWR1cmUgUmVzZXRfVGVybWluYWxfU3RhdGUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBSZXNldHR5IHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJlc2V0dHksICJyZXNldHR5Iik7CisgICBiZWdpbgorICAgICAgaWYgUmVzZXR0eSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZXNldF9UZXJtaW5hbF9TdGF0ZTsKKworICAgcHJvY2VkdXJlIFJpcF9PZmZfTGluZXMgKExpbmVzIDogaW4gSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jICA6IGluIFN0ZHNjcl9Jbml0X1Byb2MpCisgICBpcworICAgICAgZnVuY3Rpb24gUmlwb2ZmbGluZSAoTGluZXMgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgIDogU3Rkc2NyX0luaXRfUHJvYykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmlwb2ZmbGluZSwgIl9uY19yaXBvZmZsaW5lIik7CisgICBiZWdpbgorICAgICAgaWYgUmlwb2ZmbGluZSAoQ19JbnQgKExpbmVzKSwgUHJvYykgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmlwX09mZl9MaW5lczsKKworICAgcHJvY2VkdXJlIFNldF9DdXJzb3JfVmlzaWJpbGl0eSAoVmlzaWJpbGl0eSA6IGluIG91dCBDdXJzb3JfVmlzaWJpbGl0eSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBDdXJzX1NldCAoQ3VycyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDdXJzX1NldCwgImN1cnNfc2V0Iik7CisKKyAgICAgIFJlcyA6IENfSW50OworICAgYmVnaW4KKyAgICAgIFJlcyA6PSBDdXJzX1NldCAoQ3Vyc29yX1Zpc2liaWxpdHknUG9zIChWaXNpYmlsaXR5KSk7CisgICAgICBpZiBSZXMgLz0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICBWaXNpYmlsaXR5IDo9IEN1cnNvcl9WaXNpYmlsaXR5J1ZhbCAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQ3Vyc29yX1Zpc2liaWxpdHk7CisKKyAgIHByb2NlZHVyZSBOYXBfTWlsbGlfU2Vjb25kcyAoTXMgOiBpbiBOYXR1cmFsKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE5hcG1zIChNcyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOYXBtcywgIm5hcG1zIik7CisgICBiZWdpbgorICAgICAgaWYgTmFwbXMgKENfSW50IChNcykpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIE5hcF9NaWxsaV9TZWNvbmRzOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbmNsdWRlKGBQdWJsaWNfVmFyaWFibGVzJykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFRyYW5zZm9ybV9Db29yZGluYXRlcworICAgICAoVyAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERpciAgICA6IGluIFRyYW5zZm9ybV9EaXJlY3Rpb24gOj0gRnJvbV9TY3JlZW4pCisgICBpcworICAgICAgdHlwZSBJbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CisgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm0gKFcgICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFksIFggOiBJbnRfQWNjZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICBEaXIgIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFRyYW5zZm9ybSwgIndtb3VzZV90cmFmbyIpOworCisgICAgICBYIDogYWxpYXNlZCBDX0ludCA6PSBDX0ludCAoQ29sdW1uKTsKKyAgICAgIFkgOiBhbGlhc2VkIENfSW50IDo9IENfSW50IChMaW5lKTsKKyAgICAgIEQgOiBDdXJzZXNfQm9vbCA6PSBDdXJzZXNfQm9vbF9GYWxzZTsKKyAgICAgIFIgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBpZiBEaXIgPSBUb19TY3JlZW4gdGhlbgorICAgICAgICAgRCA6PSAxOworICAgICAgZW5kIGlmOworICAgICAgUiA6PSBUcmFuc2Zvcm0gKFcsIFknQWNjZXNzLCBYJ0FjY2VzcywgRCk7CisgICAgICBpZiBSID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICBMaW5lICAgOj0gTGluZV9Qb3NpdGlvbiAoWSk7CisgICAgICAgICBDb2x1bW4gOj0gQ29sdW1uX1Bvc2l0aW9uIChYKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBUcmFuc2Zvcm1fQ29vcmRpbmF0ZXM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBVc2VfRGVmYXVsdF9Db2xvcnMgaXMKKyAgICAgIGZ1bmN0aW9uIENfVXNlX0RlZmF1bHRfQ29sb3JzIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfVXNlX0RlZmF1bHRfQ29sb3JzLCAidXNlX2RlZmF1bHRfY29sb3JzIik7CisgICAgICBFcnIgOiBjb25zdGFudCBDX0ludCA6PSBDX1VzZV9EZWZhdWx0X0NvbG9yczsKKyAgIGJlZ2luCisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgVXNlX0RlZmF1bHRfQ29sb3JzOworCisgICBwcm9jZWR1cmUgQXNzdW1lX0RlZmF1bHRfQ29sb3JzIChGb3JlIDogQ29sb3JfTnVtYmVyIDo9IERlZmF1bHRfQ29sb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogQ29sb3JfTnVtYmVyIDo9IERlZmF1bHRfQ29sb3IpCisgICBpcworICAgICAgZnVuY3Rpb24gQ19Bc3N1bWVfRGVmYXVsdF9Db2xvcnMgKEZvcmUgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfQXNzdW1lX0RlZmF1bHRfQ29sb3JzLCAiYXNzdW1lX2RlZmF1bHRfY29sb3JzIik7CisKKyAgICAgIEVyciA6IGNvbnN0YW50IENfSW50IDo9IENfQXNzdW1lX0RlZmF1bHRfQ29sb3JzIChDX0ludCAoRm9yZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKEJhY2spKTsKKyAgIGJlZ2luCisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQXNzdW1lX0RlZmF1bHRfQ29sb3JzOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBDdXJzZXNfVmVyc2lvbiByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gY3Vyc2VzX3ZlcnNpb25DIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBjdXJzZXNfdmVyc2lvbkMsICJjdXJzZXNfdmVyc2lvbiIpOworICAgICAgUmVzdWx0IDogY29uc3RhbnQgY2hhcnNfcHRyIDo9IGN1cnNlc192ZXJzaW9uQzsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKFJlc3VsdCk7CisgICBlbmQgQ3Vyc2VzX1ZlcnNpb247CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBDdXJzZXNfRnJlZV9BbGwgaXMKKyAgICAgIHByb2NlZHVyZSBjdXJzZXNfZnJlZWFsbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIGN1cnNlc19mcmVlYWxsLCAiX25jX2ZyZWVhbGwiKTsKKyAgIGJlZ2luCisgICAgICAtLSAgVXNlIHRoaXMgb25seSBmb3IgdGVzdGluZzogeW91IGNhbm5vdCB1c2UgY3Vyc2VzIGFmdGVyIGNhbGxpbmcgaXQsCisgICAgICAtLSAgc28gaXQgaGFzIHRvIGJlIHRoZSAibGFzdCIgdGhpbmcgZG9uZSBiZWZvcmUgZXhpdGluZyB0aGUgcHJvZ3JhbS4KKyAgICAgIC0tICBUaGlzIHdpbGwgbm90IHJlYWxseSBmcmVlIEFMTCBvZiBtZW1vcnkgdXNlZCBieSBjdXJzZXMuICBUaGF0IGlzCisgICAgICAtLSAgYmVjYXVzZSBpdCBjYW5ub3QgZnJlZSB0aGUgbWVtb3J5IHVzZWQgZm9yIHN0ZG91dCdzIHNldGJ1Zi4gIFRoZQorICAgICAgLS0gIF9uY19mcmVlX2FuZF9leGl0KCkgcHJvY2VkdXJlIGNhbiBkbyB0aGF0LCBidXQgaXQgY2FuIGJlIGludm9rZWQKKyAgICAgIC0tICBzYWZlbHkgb25seSBmcm9tIEMgLSBhbmQgYWdhaW4sIHRoYXQgb25seSBhcyB0aGUgImxhc3QiIHRoaW5nIGRvbmUKKyAgICAgIC0tICBiZWZvcmUgZXhpdGluZyB0aGUgcHJvZ3JhbS4KKyAgICAgIGN1cnNlc19mcmVlYWxsOworICAgZW5kIEN1cnNlc19GcmVlX0FsbDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gVXNlX0V4dGVuZGVkX05hbWVzIChFbmFibGUgOiBCb29sZWFuKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHVzZV9leHRlbmRlZF9uYW1lc0MgKGUgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdXNlX2V4dGVuZGVkX25hbWVzQywgInVzZV9leHRlbmRlZF9uYW1lcyIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PQorICAgICAgICAgdXNlX2V4dGVuZGVkX25hbWVzQyAoQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChFbmFibGUpKSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gQ19JbnQgKEN1cnNlc19Cb29sX0ZhbHNlKSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBVc2VfRXh0ZW5kZWRfTmFtZXM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTY3JlZW5fRHVtcF9Ub19GaWxlIChGaWxlbmFtZSA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBzY3JfZHVtcCAoZiA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHNjcl9kdW1wLCAic2NyX2R1bXAiKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gRmlsZW5hbWUnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChGaWxlbmFtZSwgVHh0LCBMZW5ndGgpOworICAgICAgaWYgQ3Vyc2VzX0VyciA9IHNjcl9kdW1wIChUeHQpIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2NyZWVuX0R1bXBfVG9fRmlsZTsKKworICAgcHJvY2VkdXJlIFNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gc2NyX3Jlc3RvcmUgKGYgOiBjaGFyX2FycmF5KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBzY3JfcmVzdG9yZSwgInNjcl9yZXN0b3JlIik7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIEZpbGVuYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoRmlsZW5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIEN1cnNlc19FcnIgPSBzY3JfcmVzdG9yZSAoVHh0KSAgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGU7CisKKyAgIHByb2NlZHVyZSBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHNjcl9pbml0IChmIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgc2NyX2luaXQsICJzY3JfaW5pdCIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBGaWxlbmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKEZpbGVuYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBDdXJzZXNfRXJyID0gc2NyX2luaXQgKFR4dCkgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGU7CisKKyAgIHByb2NlZHVyZSBTY3JlZW5fU2V0X0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHNjcl9zZXQgKGYgOiBjaGFyX2FycmF5KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBzY3Jfc2V0LCAic2NyX3NldCIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBGaWxlbmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKEZpbGVuYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBDdXJzZXNfRXJyID0gc2NyX3NldCAoVHh0KSB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNjcmVlbl9TZXRfRmlsZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFJlc2l6ZSAoV2luICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0xpbmVzICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0NvbHVtbnMgOiBDb2x1bW5fQ291bnQpIGlzCisgICAgICBmdW5jdGlvbiB3cmVzaXplICh3aW4gICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB3cmVzaXplKTsKKyAgIGJlZ2luCisgICAgICBpZiB3cmVzaXplIChXaW4sCisgICAgICAgICAgICAgICAgICBDX0ludCAoTnVtYmVyX09mX0xpbmVzKSwKKyAgICAgICAgICAgICAgICAgIENfSW50IChOdW1iZXJfT2ZfQ29sdW1ucykpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFJlc2l6ZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWJjNTVlCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzLm00CkBAIC0wLDAgKzEsMTU1OSBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjQxICQKKy0tICAkRGF0ZTogMjAwNy8wNS8wNSAyMDozMzo1MiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1ZGUoYEJhc2VfRGVmcycpCit3aXRoIFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzOword2l0aCBJbnRlcmZhY2VzLkM7ICAgLS0gIFdlIG5lZWQgdGhpcyBmb3Igc29tZSBhc3NlcnRpb25zLgorCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMpOworaW5jbHVkZShgTGlua2VyX09wdGlvbnMnKQoraW5jbHVkZShgVmVyc2lvbl9JbmZvJykKKyAgIHR5cGUgV2luZG93IGlzIHByaXZhdGU7CisgICBOdWxsX1dpbmRvdyA6IGNvbnN0YW50IFdpbmRvdzsKKworICAgdHlwZSBMaW5lX1Bvc2l0aW9uICAgaXMgbmV3IE5hdHVyYWw7IC0tICBsaW5lIGNvb3JkaW5hdGUKKyAgIHR5cGUgQ29sdW1uX1Bvc2l0aW9uIGlzIG5ldyBOYXR1cmFsOyAtLSAgY29sdW1uIGNvb3JkaW5hdGUKKworICAgc3VidHlwZSBMaW5lX0NvdW50ICAgaXMgTGluZV9Qb3NpdGlvbiAgIHJhbmdlIDEgLi4gTGluZV9Qb3NpdGlvbidMYXN0OworICAgLS0gIFR5cGUgdG8gY291bnQgbGluZXMuIFdlIGRvIG5vdCBhbGxvdyBudWxsIHdpbmRvd3MsIHNvIG11c3QgYmUgcG9zaXRpdmUKKyAgIHN1YnR5cGUgQ29sdW1uX0NvdW50IGlzIENvbHVtbl9Qb3NpdGlvbiByYW5nZSAxIC4uIENvbHVtbl9Qb3NpdGlvbidMYXN0OworICAgLS0gIFR5cGUgdG8gY291bnQgY29sdW1ucy4gV2UgZG8gbm90IGFsbG93IG51bGwgd2luZG93cywgc28gbXVzdCBiZSBwb3NpdGl2ZQorCisgICB0eXBlIEtleV9Db2RlIGlzIG5ldyBJbnRlZ2VyOworICAgLS0gIFRoYXQgaXMgYW55dGhpbmcgaW5jbHVkaW5nIHJlYWwgY2hhcmFjdGVycywgc3BlY2lhbCBrZXlzIGFuZCBsb2dpY2FsCisgICAtLSAgcmVxdWVzdCBjb2Rlcy4KKworICAgLS0gIEZJWE1FOiBUaGUgIi0xIiBzaG91bGQgYmUgQ3Vyc2VzX0VycgorICAgc3VidHlwZSBSZWFsX0tleV9Db2RlIGlzIEtleV9Db2RlIHJhbmdlIC0xIC4uIE00X0tFWV9NQVg7CisgICAtLSAgVGhpcyBhcmUgdGhlIGNvZGVzIHRoYXQgcG90ZW50aWFsbHkgcmVwcmVzZW50IGEgcmVhbCBrZXlzdHJva2UuCisgICAtLSAgTm90IGFsbCBjb2RlcyBtYXkgYmUgcG9zc2libGUgb24gYSBzcGVjaWZpYyB0ZXJtaW5hbC4gVG8gY2hlY2sgdGhlCisgICAtLSAgYXZhaWxhYmlsaXR5IG9mIGEgc3BlY2lhbCBrZXksIHRoZSBIYXNfS2V5IGZ1bmN0aW9uIGlzIHByb3ZpZGVkLgorCisgICBzdWJ0eXBlIFNwZWNpYWxfS2V5X0NvZGUgaXMgUmVhbF9LZXlfQ29kZQorICAgICByYW5nZSBNNF9TUEVDSUFMX0ZJUlNUIC4uIFJlYWxfS2V5X0NvZGUnTGFzdDsKKyAgIC0tICBUeXBlIGZvciBhIGZ1bmN0aW9uLSBvciBzcGVjaWFsIGtleSBudW1iZXIKKworICAgc3VidHlwZSBOb3JtYWxfS2V5X0NvZGUgaXMgUmVhbF9LZXlfQ29kZSByYW5nZQorICAgICBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInRmlyc3QpIC4uIENoYXJhY3RlcidQb3MgKENoYXJhY3RlcidMYXN0KTsKKyAgIC0tICBUaGlzIGFyZSB0aGUgY29kZXMgZm9yIHJlZ3VsYXIgKGluY2wuIG5vbi1ncmFwaGljYWwpIGNoYXJhY3RlcnMuCisKKyAgIC0tICBDb25zdGFudHMgZm9yIGZ1bmN0aW9uLSBhbmQgc3BlY2lhbCBrZXlzCisgICAtLQorICAgS2V5X05vbmUgICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZSA6PSBNNF9TUEVDSUFMX0ZJUlNUOworaW5jbHVkZShgS2V5X0RlZmluaXRpb25zJykKKyAgIEtleV9NYXggICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gU3BlY2lhbF9LZXlfQ29kZSdMYXN0OworCisgICBzdWJ0eXBlIFVzZXJfS2V5X0NvZGUgaXMgS2V5X0NvZGUKKyAgICAgcmFuZ2UgKEtleV9NYXggKyAxMjkpIC4uIEtleV9Db2RlJ0xhc3Q7CisgICAtLSAgVGhpcyBpcyByZXNlcnZlZCBmb3IgdXNlciBkZWZpbmVkIGtleSBjb2Rlcy4gVGhlIHJhbmdlIGJldHdlZW4gS2V5X01heAorICAgLS0gIGFuZCB0aGUgZmlyc3QgdXNlciBjb2RlIGlzIHJlc2VydmVkIGZvciBzdWJzeXN0ZW1zIGxpa2UgbWVudSBhbmQgZm9ybXMuCisKKyAgIC0tICBGb3IgdGhvc2Ugd2hvIGxpa2UgdG8gdXNlIHRoZSBvcmlnaW5hbCBrZXkgbmFtZXMgd2UgcHJvZHVjZSB0aGVtIHdlcmUKKyAgIC0tICB0aGV5IGRpZmZlciBmcm9tIHRoZSBvcmlnaW5hbC4gUGxlYXNlIG5vdGUgdGhhdCB0aGV5IG1heSBkaWZmZXIgaW4KKyAgIC0tICBsb3dlci91cHBlciBjYXNlLgoraW5jbHVkZShgT2xkX0tleXMnKWRubAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgdHlwZSBDb2xvcl9OdW1iZXIgaXMgcmFuZ2UgLTEgLi4gSW50ZWdlciAoSW50ZXJmYWNlcy5DLnNob3J0J0xhc3QpOworICAgZm9yIENvbG9yX051bWJlcidTaXplIHVzZSBJbnRlcmZhY2VzLkMuc2hvcnQnU2l6ZTsKKyAgIC0tICAobiljdXJzZXMgdXNlcyBhIHNob3J0IGZvciB0aGUgY29sb3IgaW5kZXgKKyAgIC0tICBUaGUgbW9kZWwgaXMsIHRoYXQgYSBDb2xvcl9OdW1iZXIgaXMgYW4gaW5kZXggaW50byBhbiBhcnJheSBvZgorICAgLS0gIChwb3RlbnRpYWxseSkgZGVmaW5hYmxlIGNvbG9ycy4gU29tZSBvZiB0aG9zZSBpbmRpY2VzIGFyZQorICAgLS0gIHByZWRlZmluZWQgKHNlZSBiZWxvdyksIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCByZWFsbHkgZXhpc3QuCisKK2luY2x1ZGUoYENvbG9yX0RlZnMnKQorICAgdHlwZSBSR0JfVmFsdWUgaXMgcmFuZ2UgMCAuLiBJbnRlZ2VyIChJbnRlcmZhY2VzLkMuc2hvcnQnTGFzdCk7CisgICBmb3IgUkdCX1ZhbHVlJ1NpemUgdXNlIEludGVyZmFjZXMuQy5zaG9ydCdTaXplOworICAgLS0gIFNvbWUgc3lzdGVtIG1heSBhbGxvdyB0byByZWRlZmluZSBhIGNvbG9yIGJ5IHNldHRpbmcgUkdCIHZhbHVlcy4KKworICAgdHlwZSBDb2xvcl9QYWlyIGlzIHJhbmdlIDAgLi4gMjU1OworICAgZm9yIENvbG9yX1BhaXInU2l6ZSB1c2UgODsKKyAgIHN1YnR5cGUgUmVkZWZpbmFibGVfQ29sb3JfUGFpciBpcyBDb2xvcl9QYWlyIHJhbmdlIDEgLi4gMjU1OworICAgLS0gIChuKWN1cnNlcyByZXNlcnZlcyAxIEJ5dGUgZm9yIHRoZSBjb2xvci1wYWlyIG51bWJlci4gQ29sb3IgUGFpciAwCisgICAtLSAgaXMgZml4ZWQgKEJsYWNrICYgV2hpdGUpLiBBIGNvbG9yIHBhaXIgaXMgc2ltcGx5IGEgY29tYmluYXRpb24gb2YKKyAgIC0tICB0d28gY29sb3JzIGRlc2NyaWJlZCBieSBDb2xvcl9OdW1iZXJzLCBvbmUgZm9yIHRoZSBmb3JlZ3JvdW5kIGFuZAorICAgLS0gIHRoZSBvdGhlciBmb3IgdGhlIGJhY2tncm91bmQKKworaW5jbHVkZShgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXRfUmVwJykKKyAgIC0tICAobiljdXJzZXMgdXNlcyBhbGwgYnV0IHRoZSBsb3dlc3QgMTYgQml0cyBmb3IgQXR0cmlidXRlcy4KKworICAgTm9ybWFsX1ZpZGVvIDogY29uc3RhbnQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gKG90aGVycyA9PiBGYWxzZSk7CisKKyAgIHR5cGUgQXR0cmlidXRlZF9DaGFyYWN0ZXIgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgQXR0ciAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgICAgIENvbG9yIDogQ29sb3JfUGFpcjsKKyAgICAgICAgIENoICAgIDogQ2hhcmFjdGVyOworICAgICAgZW5kIHJlY29yZDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgVGhpcyBpcyB0aGUgY291bnRlcnBhcnQgZm9yIHRoZSBjaHR5cGUgaW4gQy4KKworaW5jbHVkZShgQUNfUmVwJykKKyAgIERlZmF1bHRfQ2hhcmFjdGVyIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIKKyAgICAgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICBBdHRyICA9PiAob3RoZXJzID0+IEZhbHNlKSk7ICAtLSAgcHJlZWxhYm9yYXRhYmxlIE5vcm1hbF9WaWRlbworCisgICB0eXBlIEF0dHJpYnV0ZWRfU3RyaW5nIGlzIGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICBwcmFnbWEgUGFjayAoQXR0cmlidXRlZF9TdHJpbmcpOworICAgLS0gIEluIHRoaXMgYmluZGluZyB3ZSBhbGxvdyBzdHJpbmdzIG9mIGF0dHJpYnV0ZWQgY2hhcmFjdGVycy4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgRXhjZXB0aW9ucyAgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3Vyc2VzX0V4Y2VwdGlvbiAgICAgOiBleGNlcHRpb247CisgICBXcm9uZ19DdXJzZXNfVmVyc2lvbiA6IGV4Y2VwdGlvbjsKKworICAgLS0gIFRob3NlIGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCBieSB0aGUgRVRJIChFeHRlbmRlZCBUZXJtaW5hbCBJbnRlcmZhY2UpCisgICAtLSAgc3VicGFja2V0cyBmb3IgTWVudSBhbmQgRm9ybXMgaGFuZGxpbmcuCisgICAtLQorICAgRXRpX1N5c3RlbV9FcnJvciAgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9CYWRfQXJndW1lbnQgICAgOiBleGNlcHRpb247CisgICBFdGlfUG9zdGVkICAgICAgICAgIDogZXhjZXB0aW9uOworICAgRXRpX0Nvbm5lY3RlZCAgICAgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9CYWRfU3RhdGUgICAgICAgOiBleGNlcHRpb247CisgICBFdGlfTm9fUm9vbSAgICAgICAgIDogZXhjZXB0aW9uOworICAgRXRpX05vdF9Qb3N0ZWQgICAgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9Vbmtub3duX0NvbW1hbmQgOiBleGNlcHRpb247CisgICBFdGlfTm9fTWF0Y2ggICAgICAgIDogZXhjZXB0aW9uOworICAgRXRpX05vdF9TZWxlY3RhYmxlICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9Ob3RfQ29ubmVjdGVkICAgOiBleGNlcHRpb247CisgICBFdGlfUmVxdWVzdF9EZW5pZWQgIDogZXhjZXB0aW9uOworICAgRXRpX0ludmFsaWRfRmllbGQgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9DdXJyZW50ICAgICAgICAgOiBleGNlcHRpb247CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgRXh0ZXJuYWwgQyB2YXJpYWJsZXMKKyAgIC0tICBDb25jZXB0dWFsbHkgZXZlbiBpbiBDIHRoaXMgYXJlIGtpbmQgb2YgY29uc3RhbnRzLCBidXQgdGhleSBhcmUKKyAgIC0tICBpbml0aWFsaXplZCBhbmQgc29tZXRpbWVzIGNoYW5nZWQgYnkgdGhlIGxpYnJhcnkgcm91dGluZXMgYXQgcnVudGltZQorICAgLS0gIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0ZXJtaW5hbC4gSSBiZWxpZXZlIHRoZSBiZXN0IHdheSB0byBtb2RlbAorICAgLS0gIHRoaXMgaXMgdG8gdXNlIGZ1bmN0aW9ucy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIExpbmVzICAgICAgICAgICAgcmV0dXJuIExpbmVfQ291bnQ7CisgICBwcmFnbWEgSW5saW5lIChMaW5lcyk7CisKKyAgIGZ1bmN0aW9uIENvbHVtbnMgICAgICAgICAgcmV0dXJuIENvbHVtbl9Db3VudDsKKyAgIHByYWdtYSBJbmxpbmUgKENvbHVtbnMpOworCisgICBmdW5jdGlvbiBUYWJfU2l6ZSAgICAgICAgIHJldHVybiBOYXR1cmFsOworICAgcHJhZ21hIElubGluZSAoVGFiX1NpemUpOworCisgICBmdW5jdGlvbiBOdW1iZXJfT2ZfQ29sb3JzIHJldHVybiBOYXR1cmFsOworICAgcHJhZ21hIElubGluZSAoTnVtYmVyX09mX0NvbG9ycyk7CisKKyAgIGZ1bmN0aW9uIE51bWJlcl9PZl9Db2xvcl9QYWlycyByZXR1cm4gTmF0dXJhbDsKKyAgIHByYWdtYSBJbmxpbmUgKE51bWJlcl9PZl9Db2xvcl9QYWlycyk7CisKK2luY2x1ZGUoYEFDU19NYXAnKWRubAorCisgICAtLSAgTUFOUEFHRShgY3Vyc19pbml0c2NyLjN4JykKKyAgIC0tICB8IE5vdCBpbXBsZW1lbnRlZDogbmV3dGVybSwgc2V0X3Rlcm0sIGRlbHNjcmVlbgorCisgICAtLSAgQU5DSE9SKGBzdGRzY3InLGBTdGFuZGFyZF9XaW5kb3cnKQorICAgZnVuY3Rpb24gU3RhbmRhcmRfV2luZG93IHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTdGFuZGFyZF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBjdXJzY3InLGBDdXJyZW50X1dpbmRvdycpCisgICBmdW5jdGlvbiBDdXJyZW50X1dpbmRvdyByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ3VycmVudF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBpbml0c2NyKCknLGBJbml0X1NjcmVlbicpCisgICBwcm9jZWR1cmUgSW5pdF9TY3JlZW47CisKKyAgIC0tICBBTkNIT1IoYGluaXRzY3IoKScsYEluaXRfV2luZG93cycpCisgICBwcm9jZWR1cmUgSW5pdF9XaW5kb3dzIHJlbmFtZXMgSW5pdF9TY3JlZW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJbml0X1NjcmVlbik7CisgICAtLSAgcHJhZ21hIElubGluZSAoSW5pdF9XaW5kb3dzKTsKKworICAgLS0gIEFOQ0hPUihgZW5kd2luKCknLGBFbmRfV2luZG93cycpCisgICBwcm9jZWR1cmUgRW5kX1dpbmRvd3M7CisgICAtLSAgQUtBCisgICBwcm9jZWR1cmUgRW5kX1NjcmVlbiByZW5hbWVzIEVuZF9XaW5kb3dzOworICAgcHJhZ21hIElubGluZSAoRW5kX1dpbmRvd3MpOworICAgLS0gIHByYWdtYSBJbmxpbmUgKEVuZF9TY3JlZW4pOworCisgICAtLSAgQU5DSE9SKGBpc2VuZHdpbigpJyxgSXNfRW5kX1dpbmRvdycpCisgICBmdW5jdGlvbiBJc19FbmRfV2luZG93IHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSXNfRW5kX1dpbmRvdyk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX21vdmUuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3bW92ZSgpJyxgTW92ZV9DdXJzb3InKQorICAgcHJvY2VkdXJlIE1vdmVfQ3Vyc29yIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBtb3ZlKCknKQorICAgcHJhZ21hIElubGluZSAoTW92ZV9DdXJzb3IpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19hZGRjaC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdhZGRjaCgpJyxgQWRkJykKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6ICBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgQ2ggIDogIGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgYWRkY2goKScpCisKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6ICBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgQ2ggIDogIGluIENoYXJhY3Rlcik7CisgICAtLSAgQWRkIGEgc2luZ2xlIGNoYXJhY3RlciBhdCB0aGUgY3VycmVudCBsb2dpY2FsIGN1cnNvciBwb3NpdGlvbiB0bworICAgLS0gIHRoZSB3aW5kb3cuIFVzZSB0aGUgY3VycmVudCB3aW5kb3dzIGF0dHJpYnV0ZXMuCisKKyAgIC0tICBBTkNIT1IoYG12d2FkZGNoKCknLGBBZGQnKQorICAgcHJvY2VkdXJlIEFkZAorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBDaCAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12YWRkY2goKScpCisKKyAgIHByb2NlZHVyZSBBZGQKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgQ2ggICAgIDogaW4gQ2hhcmFjdGVyKTsKKyAgIC0tICBNb3ZlIHRvIHRoZSBwb3NpdGlvbiBhbmQgYWRkIGEgc2luZ2xlIGNoYXJhY3RlciBpbnRvIHRoZSB3aW5kb3cKKyAgIC0tICBUaGVyZSBhcmUgbW9yZSBBZGQgcm91dGluZXMsIHNvIHRoZSBJbmxpbmUgcHJhZ21hIGZvbGxvd3MgbGF0ZXIKKworICAgLS0gIEFOQ0hPUihgd2VjaG9jaGFyKCknLGBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobycpCisgICBwcm9jZWR1cmUgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8KKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGVjaG9jaGFyKCknKQorCisgICBwcm9jZWR1cmUgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8KKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBDaGFyYWN0ZXIpOworICAgLS0gIEFkZCBhIGNoYXJhY3RlciBhbmQgZG8gYW4gaW1tZWRpYXRlIHJlZnJlc2ggb2YgdGhlIHNjcmVlbi4KKyAgIHByYWdtYSBJbmxpbmUgKEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfd2luZG93LjN4JykKKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IHdjdXJzeW5jdXAKKworICAgLS0gIEFOQ0hPUihgbmV3d2luKCknLGBDcmVhdGUnKQorICAgZnVuY3Rpb24gQ3JlYXRlCisgICAgIChOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IERlZmF1bHQgTnVtYmVyX09mX0xpbmVzLCBOdW1iZXJfT2ZfQ29sdW1ucworICAgLS0gIHRoZSBDIHZlcnNpb24gbGV0cyB0aGVtIGJlIDAsIHNlZSB0aGUgbWFuIHBhZ2UuCisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDcmVhdGUpOworCisgICBmdW5jdGlvbiBOZXdfV2luZG93CisgICAgIChOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFdpbmRvdworICAgICByZW5hbWVzIENyZWF0ZTsKKyAgIC0tICBwcmFnbWEgSW5saW5lIChOZXdfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgZGVsd2luKCknLGBEZWxldGUnKQorICAgcHJvY2VkdXJlIERlbGV0ZSAoV2luIDogaW4gb3V0IFdpbmRvdyk7CisgICAtLSAgQUtBCisgICAtLSAgUmVzZXQgV2luIHRvIE51bGxfV2luZG93CisgICBwcmFnbWEgSW5saW5lIChEZWxldGUpOworCisgICAtLSAgQU5DSE9SKGBzdWJ3aW4oKScsYFN1Yl9XaW5kb3cnKQorICAgZnVuY3Rpb24gU3ViX1dpbmRvdworICAgICAoV2luICAgICAgICAgICAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU3ViX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYGRlcndpbigpJyxgRGVyaXZlZF9XaW5kb3cnKQorICAgZnVuY3Rpb24gRGVyaXZlZF9XaW5kb3cKKyAgICAgKFdpbiAgICAgICAgICAgICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKERlcml2ZWRfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgZHVwd2luKCknLGBEdXBsaWNhdGUnKQorICAgZnVuY3Rpb24gRHVwbGljYXRlIChXaW4gOiBXaW5kb3cpIHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChEdXBsaWNhdGUpOworCisgICAtLSAgQU5DSE9SKGBtdndpbigpJyxgTW92ZV9XaW5kb3cnKQorICAgcHJvY2VkdXJlIE1vdmVfV2luZG93IChXaW4gICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChNb3ZlX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYG12ZGVyd2luKCknLGBNb3ZlX0Rlcml2ZWRfV2luZG93JykKKyAgIHByb2NlZHVyZSBNb3ZlX0Rlcml2ZWRfV2luZG93IChXaW4gICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoTW92ZV9EZXJpdmVkX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYHdzeW5jdXAoKScsYFN5bmNocm9uaXplX1Vwd2FyZHMnKQorICAgcHJvY2VkdXJlIFN5bmNocm9uaXplX1Vwd2FyZHMgKFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBTeW5jaHJvbml6ZV9VcHdhcmRzLCAid3N5bmN1cCIpOworCisgICAtLSAgQU5DSE9SKGB3c3luY2Rvd24oKScsYFN5bmNocm9uaXplX0Rvd253YXJkcycpCisgICBwcm9jZWR1cmUgU3luY2hyb25pemVfRG93bndhcmRzIChXaW4gOiBpbiBXaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIEltcG9ydCAoQywgU3luY2hyb25pemVfRG93bndhcmRzLCAid3N5bmNkb3duIik7CisKKyAgIC0tICBBTkNIT1IoYHN5bmNvaygpJyxgU2V0X1N5bmNoX01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9TeW5jaF9Nb2RlIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1N5bmNoX01vZGUpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19hZGRzdHIuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3YWRkbnN0cigpJyxgQWRkJykKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBTdHIgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gOiBpbiBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgd2FkZHN0cigpJykKKyAgIC0tICBBTElBUyhgYWRkbnN0cigpJykKKyAgIC0tICBBTElBUyhgYWRkc3RyKCknKQorCisgICAtLSAgQU5DSE9SKGBtdndhZGRuc3RyKCknLGBBZGQnKQorICAgcHJvY2VkdXJlIEFkZCAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBTdHIgICAgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gICAgOiBpbiBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZ3YWRkc3RyKCknKQorICAgLS0gIEFMSUFTKGBtdmFkZG5zdHIoKScpCisgICAtLSAgQUxJQVMoYG12YWRkc3RyKCknKQorCisgICAtLSAgTUFOUEFHRShgY3Vyc19hZGRjaHN0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdhZGRjaG5zdHIoKScsYEFkZCcpCisgICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgU3RyIDogaW4gQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gOiBpbiBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgd2FkZGNoc3RyKCknKQorICAgLS0gIEFMSUFTKGBhZGRjaG5zdHIoKScpCisgICAtLSAgQUxJQVMoYGFkZGNoc3RyKCknKQorCisgICAtLSAgQU5DSE9SKGBtdndhZGRjaG5zdHIoKScsYEFkZCcpCisgICBwcm9jZWR1cmUgQWRkIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIFN0ciAgICA6IGluIEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12d2FkZGNoc3RyKCknKQorICAgLS0gIEFMSUFTKGBtdmFkZGNobnN0cigpJykKKyAgIC0tICBBTElBUyhgbXZhZGRjaHN0cigpJykKKyAgIHByYWdtYSBJbmxpbmUgKEFkZCk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2JvcmRlci4zeCcpCisgICAtLSAgfCBOb3QgaW1wbGVtZW50ZWQ6IG12aGxpbmUsICBtdndobGluZSwgbXZ2bGluZSwgbXZ3dmxpbmUKKyAgIC0tICB8IHVzZSBNb3ZlX0N1cnNvciB0aGVuIEhvcml6b250YWxfTGluZSBvciBWZXJ0aWNhbF9MaW5lCisKKyAgIC0tICBBTkNIT1IoYHdib3JkZXIoKScsYEJvcmRlcicpCisgICBwcm9jZWR1cmUgQm9yZGVyCisgICAgIChXaW4gICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExlZnRfU2lkZV9TeW1ib2wgICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFJpZ2h0X1NpZGVfU3ltYm9sICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFRvcF9TaWRlX1N5bWJvbCAgICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIEJvdHRvbV9TaWRlX1N5bWJvbCAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIExvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIExvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcgorICAgICApOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBib3JkZXIoKScpCisgICBwcmFnbWEgSW5saW5lIChCb3JkZXIpOworCisgICAtLSAgQU5DSE9SKGBib3goKScsYEJveCcpCisgICBwcm9jZWR1cmUgQm94CisgICAgIChXaW4gICAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBWZXJ0aWNhbF9TeW1ib2wgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgSG9yaXpvbnRhbF9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChCb3gpOworCisgICAtLSAgQU5DSE9SKGB3aGxpbmUoKScsYEhvcml6b250YWxfTGluZScpCisgICBwcm9jZWR1cmUgSG9yaXpvbnRhbF9MaW5lCisgICAgIChXaW4gICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lX1NpemUgICA6IGluIE5hdHVyYWw7CisgICAgICBMaW5lX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgaGxpbmUoKScpCisgICBwcmFnbWEgSW5saW5lIChIb3Jpem9udGFsX0xpbmUpOworCisgICAtLSAgQU5DSE9SKGB3dmxpbmUoKScsYFZlcnRpY2FsX0xpbmUnKQorICAgcHJvY2VkdXJlIFZlcnRpY2FsX0xpbmUKKyAgICAgKFdpbiAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVfU2l6ZSAgIDogaW4gTmF0dXJhbDsKKyAgICAgIExpbmVfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB2bGluZSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFZlcnRpY2FsX0xpbmUpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19nZXRjaC4zeCcpCisgICAtLSAgTm90IGltcGxlbWVudGVkOiBtdmdldGNoLCBtdndnZXRjaAorCisgICAtLSAgQU5DSE9SKGB3Z2V0Y2goKScsYEdldF9LZXlzdHJva2UnKQorICAgZnVuY3Rpb24gR2V0X0tleXN0cm9rZSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFsX0tleV9Db2RlOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBnZXRjaCgpJykKKyAgIC0tICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUga2V5Ym9hcmQgYW5kIGVjaG8gaXQgLSBpZiBlbmFibGVkIC0gdG8gdGhlCisgICAtLSAgd2luZG93LgorICAgLS0gIElmIGZvciBhbnkgcmVhc29uIChpLmUuIGEgdGltZW91dCkgd2UgY291bGRuJ3QgZ2V0IGEgY2hhcmFjdGVyIHRoZQorICAgLS0gIHJldHVybmVkIGtleWNvZGUgaXMgS2V5X05vbmUuCisgICBwcmFnbWEgSW5saW5lIChHZXRfS2V5c3Ryb2tlKTsKKworICAgLS0gIEFOQ0hPUihgdW5nZXRjaCgpJyxgVW5kb19LZXlzdHJva2UnKQorICAgcHJvY2VkdXJlIFVuZG9fS2V5c3Ryb2tlIChLZXkgOiBpbiBSZWFsX0tleV9Db2RlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFVuZG9fS2V5c3Ryb2tlKTsKKworICAgLS0gIEFOQ0hPUihgaGFzX2tleSgpJyxgSGFzX0tleScpCisgICBmdW5jdGlvbiBIYXNfS2V5IChLZXkgOiBTcGVjaWFsX0tleV9Db2RlKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEhhc19LZXkpOworCisgICAtLSAgfAorICAgLS0gIHwgU29tZSBoZWxwZXIgZnVuY3Rpb25zCisgICAtLSAgfAorICAgZnVuY3Rpb24gSXNfRnVuY3Rpb25fS2V5IChLZXkgOiBTcGVjaWFsX0tleV9Db2RlKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBSZXR1cm4gVHJ1ZSBpZiB0aGUgS2V5IGlzIGEgZnVuY3Rpb24ga2V5IChpLmUuIG9uZSBvZiBGMCAuLiBGNjMpCisgICBwcmFnbWEgSW5saW5lIChJc19GdW5jdGlvbl9LZXkpOworCisgICBzdWJ0eXBlIEZ1bmN0aW9uX0tleV9OdW1iZXIgaXMgSW50ZWdlciByYW5nZSAwIC4uIDYzOworICAgLS0gIChuKWN1cnNlcyBhbGxvd3MgZm9yIDY0IGZ1bmN0aW9uIGtleXMuCisKKyAgIGZ1bmN0aW9uIEZ1bmN0aW9uX0tleSAoS2V5IDogUmVhbF9LZXlfQ29kZSkgcmV0dXJuIEZ1bmN0aW9uX0tleV9OdW1iZXI7CisgICAtLSAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uIGtleS4gSWYgdGhlIGNvZGUgaXMgbm90IGEKKyAgIC0tICBmdW5jdGlvbiBrZXksIGEgQ09OU1RSQUlOVF9FUlJPUiB3aWxsIGJlIHJhaXNlZC4KKyAgIHByYWdtYSBJbmxpbmUgKEZ1bmN0aW9uX0tleSk7CisKKyAgIGZ1bmN0aW9uIEZ1bmN0aW9uX0tleV9Db2RlIChLZXkgOiBGdW5jdGlvbl9LZXlfTnVtYmVyKSByZXR1cm4gUmVhbF9LZXlfQ29kZTsKKyAgIC0tICBSZXR1cm4gdGhlIGtleSBjb2RlIGZvciBhIGdpdmVuIGZ1bmN0aW9uLWtleSBudW1iZXIuCisgICBwcmFnbWEgSW5saW5lIChGdW5jdGlvbl9LZXlfQ29kZSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2F0dHIuM3gnKQorICAgLS0gIHwgTm90IGltcGxlbWVudGVkIGF0dHJfb2ZmLCAgd2F0dHJfb2ZmLAorICAgLS0gIHwgIGF0dHJfb24sIHdhdHRyX29uLCBhdHRyX3NldCwgd2F0dHJfc2V0CisKKyAgIC0tICBQQUlSX05VTUJFUgorICAgLS0gIFBBSVJfTlVNQkVSKGMpIGlzIHRoZSBzYW1lIGFzIGMuQ29sb3IKKworICAgLS0gIEFOQ0hPUihgc3RhbmRvdXQoKScsYFN0YW5kb3V0JykKKyAgIHByb2NlZHVyZSBTdGFuZG91dCAoV2luIDogV2luZG93ICA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgIE9uICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUxJQVMoYHdzdGFuZG91dCgpJykKKyAgIC0tICBBTElBUyhgd3N0YW5kZW5kKCknKQorCisgICAtLSAgQU5DSE9SKGB3YXR0cm9uKCknLGBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZScpCisgICBwcm9jZWR1cmUgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQXR0ciA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIE9uICAgOiBpbiBCb29sZWFuIDo9IFRydWUpOyAtLSAgaWYgRmFsc2Ugd2Ugc3dpdGNoIE9mZi4KKyAgIC0tICBTd2l0Y2hlcyB0aG9zZSBBdHRyaWJ1dGVzIHNldCB0byB0cnVlIGluIHRoZSBsaXN0LgorICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3YXR0cm9mZigpJykKKyAgIC0tICBBTElBUyhgYXR0cm9uKCknKQorICAgLS0gIEFMSUFTKGBhdHRyb2ZmKCknKQorCisgICAtLSAgQU5DSE9SKGB3YXR0cnNldCgpJyxgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzJykKKyAgIHByb2NlZHVyZSBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMKKyAgICAgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBhdHRyc2V0KCknKQorICAgcHJhZ21hIElubGluZSAoU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzKTsKKworICAgLS0gIEFOQ0hPUihgd2F0dHJfZ2V0KCknLGBHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMnKQorICAgZnVuY3Rpb24gR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgYXR0cl9nZXQoKScpCisKKyAgIC0tICBBTkNIT1IoYHdhdHRyX2dldCgpJyxgR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUnKQorICAgZnVuY3Rpb24gR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBDb2xvcl9QYWlyOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUpOworCisgICAtLSAgQU5DSE9SKGB3Y29sb3Jfc2V0KCknLGBTZXRfQ29sb3InKQorICAgcHJvY2VkdXJlIFNldF9Db2xvciAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBQYWlyIDogaW4gQ29sb3JfUGFpcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGNvbG9yX3NldCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Db2xvcik7CisKKyAgIC0tICBBTkNIT1IoYHdjaGdhdCgpJyxgQ2hhbmdlX0F0dHJpYnV0ZXMnKQorICAgcHJvY2VkdXJlIENoYW5nZV9BdHRyaWJ1dGVzCisgICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDb3VudCA6IGluIEludGVnZXIgOj0gLTE7CisgICAgICBBdHRyICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgY2hnYXQoKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2NoZ2F0KCknLGBDaGFuZ2VfQXR0cmlidXRlcycpCisgICBwcm9jZWR1cmUgQ2hhbmdlX0F0dHJpYnV0ZXMKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uIDo9IExpbmVfUG9zaXRpb24nRmlyc3Q7CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24gOj0gQ29sdW1uX1Bvc2l0aW9uJ0ZpcnN0OworICAgICAgQ291bnQgIDogaW4gSW50ZWdlciA6PSAtMTsKKyAgICAgIEF0dHIgICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yICA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12Y2hnYXQoKScpCisgICBwcmFnbWEgSW5saW5lIChDaGFuZ2VfQXR0cmlidXRlcyk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2JlZXAuM3gnKQorCisgICAtLSAgQU5DSE9SKGBiZWVwKCknLGBCZWVwJykKKyAgIHByb2NlZHVyZSBCZWVwOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQmVlcCk7CisKKyAgIC0tICBBTkNIT1IoYGZsYXNoKCknLGBGbGFzaF9TY3JlZW4nKQorICAgcHJvY2VkdXJlIEZsYXNoX1NjcmVlbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEZsYXNoX1NjcmVlbik7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2lub3B0cy4zeCcpCisKKyAgIC0tICB8IE5vdCBpbXBsZW1lbnRlZCA6IHR5cGVhaGVhZAorICAgLS0KKyAgIC0tICBBTkNIT1IoYGNicmVhaygpJyxgU2V0X0NicmVha19Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfQ2JyZWFrX01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbm9jYnJlYWsoKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfQ2JyZWFrX01vZGUpOworCisgICAtLSAgQU5DSE9SKGByYXcoKScsYFNldF9SYXdfTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X1Jhd19Nb2RlIChTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG5vcmF3KCknKQorICAgcHJhZ21hIElubGluZSAoU2V0X1Jhd19Nb2RlKTsKKworICAgLS0gIEFOQ0hPUihgZWNobygpJyxgU2V0X0VjaG9fTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBub2VjaG8oKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfRWNob19Nb2RlKTsKKworICAgLS0gIEFOQ0hPUihgbWV0YSgpJyxgU2V0X01ldGFfTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X01ldGFfTW9kZSAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9NZXRhX01vZGUpOworCisgICAtLSAgQU5DSE9SKGBrZXlwYWQoKScsYFNldF9LZXlQYWRfTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X0tleVBhZF9Nb2RlIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfS2V5UGFkX01vZGUpOworCisgICBmdW5jdGlvbiBHZXRfS2V5UGFkX01vZGUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuOworICAgLS0gIFRoaXMgaGFzIG5vIHBlbmRhbnQgaW4gQy4gVGhlcmUgeW91J3ZlIHRvIGxvb2sgaW50byB0aGUgV0lORE9XUworICAgLS0gIHN0cnVjdHVyZSB0byBnZXQgdGhlIHZhbHVlLiBCYWQgcHJhY3RpY2UsIG5vdCByZXBlYXRlZCBpbiBBZGEuCisKKyAgIHR5cGUgSGFsZl9EZWxheV9BbW91bnQgaXMgcmFuZ2UgMSAuLiAyNTU7CisKKyAgIC0tICBBTkNIT1IoYGhhbGZkZWxheSgpJyxgSGFsZl9EZWxheScpCisgICBwcm9jZWR1cmUgSGFsZl9EZWxheSAoQW1vdW50IDogaW4gSGFsZl9EZWxheV9BbW91bnQpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSGFsZl9EZWxheSk7CisKKyAgIC0tICBBTkNIT1IoYGludHJmbHVzaCgpJyxgU2V0X0ZsdXNoX09uX0ludGVycnVwdF9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGUpOworCisgICAtLSAgQU5DSE9SKGBxaWZsdXNoKCknLGBTZXRfUXVldWVfSW50ZXJydXB0X01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZQorICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRmx1c2ggOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBub3FpZmx1c2goKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfUXVldWVfSW50ZXJydXB0X01vZGUpOworCisgICAtLSAgQU5DSE9SKGBub2RlbGF5KCknLGBTZXRfTm9EZWxheV9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfTm9EZWxheV9Nb2RlCisgICAgIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE1vZGUgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Ob0RlbGF5X01vZGUpOworCisgICB0eXBlIFRpbWVvdXRfTW9kZSBpcyAoQmxvY2tpbmcsIE5vbl9CbG9ja2luZywgRGVsYXllZCk7CisKKyAgIC0tICBBTkNIT1IoYHd0aW1lb3V0KCknLGBTZXRfVGltZW91dF9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfVGltZW91dF9Nb2RlIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgICA6IGluIFRpbWVvdXRfTW9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbW91bnQgOiBpbiBOYXR1cmFsKTsgLS0gIGluIE1pbGxpc2Vjb25kcworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB0aW1lb3V0KCknKQorICAgLS0gIEluc3RlYWQgb2Ygb3ZlcmxvYWRpbmcgdGhlIHNlbWFudGljIG9mIHRoZSBzaWduIG9mIGFtb3VudCwgd2UKKyAgIC0tICBpbnRyb2R1Y2UgdGhlIFRpbWVvdXRfTW9kZSBwYXJhbWV0ZXIuIFRoaXMgc2hvdWxkIGltcHJvdmUKKyAgIC0tICByZWFkYWJpbGl0eS4gRm9yIEJsb2NraW5nIGFuZCBOb25fQmxvY2tpbmcsIHRoZSBBbW91bnQgaXMgbm90CisgICAtLSAgZXZhbHVhdGVkLgorICAgLS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHByb2NlZHVyZS4KKworICAgLS0gIEFOQ0hPUihgbm90aW1lb3V0KCknLGBTZXRfRXNjYXBlX1RpbWVfTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X0VzY2FwZV9UaW1lcl9Nb2RlCisgICAgIChXaW4gICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgVGltZXJfT2ZmIDogaW4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRXNjYXBlX1RpbWVyX01vZGUpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19vdXRvcHRzLjN4JykKKworICAgLS0gIEFOQ0hPUihgbmwoKScsYFNldF9OTF9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfTkxfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBub25sKCknKQorICAgcHJhZ21hIElubGluZSAoU2V0X05MX01vZGUpOworCisgICAtLSAgQU5DSE9SKGBjbGVhcm9rKCknLGBDbGVhcl9Pbl9OZXh0X1VwZGF0ZScpCisgICBwcm9jZWR1cmUgQ2xlYXJfT25fTmV4dF9VcGRhdGUKKyAgICAgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0NsZWFyIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENsZWFyX09uX05leHRfVXBkYXRlKTsKKworICAgLS0gIEFOQ0hPUihgaWRsb2soKScsYFVzZV9JbnNlcnRfRGVsZXRlX0xpbmUnKQorICAgcHJvY2VkdXJlIFVzZV9JbnNlcnRfRGVsZXRlX0xpbmUKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19JZGwgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVXNlX0luc2VydF9EZWxldGVfTGluZSk7CisKKyAgIC0tICBBTkNIT1IoYGlkY29rKCknLGBVc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXInKQorICAgcHJvY2VkdXJlIFVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcgorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0lkYyA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChVc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXIpOworCisgICAtLSAgQU5DSE9SKGBsZWF2ZW9rKCknLGBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlJykKKyAgIHByb2NlZHVyZSBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlCisgICAgIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19MZWF2ZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlKTsKKworICAgLS0gIEFOQ0hPUihgaW1tZWRvaygpJyxgSW1tZWRpYXRlX1VwZGF0ZV9Nb2RlJykKKyAgIHByb2NlZHVyZSBJbW1lZGlhdGVfVXBkYXRlX01vZGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSW1tZWRpYXRlX1VwZGF0ZV9Nb2RlKTsKKworICAgLS0gIEFOQ0hPUihgc2Nyb2xsb2soKScsYEFsbG93X1Njcm9sbGluZycpCisgICBwcm9jZWR1cmUgQWxsb3dfU2Nyb2xsaW5nCisgICAgIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE1vZGUgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEFsbG93X1Njcm9sbGluZyk7CisKKyAgIGZ1bmN0aW9uIFNjcm9sbGluZ19BbGxvd2VkIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBUaGVyZSBpcyBubyBzdWNoIGZ1bmN0aW9uIGluIHRoZSBDIGludGVyZmFjZS4KKyAgIHByYWdtYSBJbmxpbmUgKFNjcm9sbGluZ19BbGxvd2VkKTsKKworICAgLS0gIEFOQ0hPUihgd3NldHNjcnJlZygpJyxgU2V0X1Njcm9sbF9SZWdpb24nKQorICAgcHJvY2VkdXJlIFNldF9TY3JvbGxfUmVnaW9uCisgICAgIChXaW4gICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBUb3BfTGluZSAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBCb3R0b21fTGluZSA6IGluIExpbmVfUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBzZXRzY3JyZWcoKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfU2Nyb2xsX1JlZ2lvbik7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3JlZnJlc2guM3gnKQorCisgICAtLSAgQU5DSE9SKGBkb3VwZGF0ZSgpJyxgVXBkYXRlX1NjcmVlbicpCisgICBwcm9jZWR1cmUgVXBkYXRlX1NjcmVlbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFVwZGF0ZV9TY3JlZW4pOworCisgICAtLSAgQU5DSE9SKGB3cmVmcmVzaCgpJyxgUmVmcmVzaCcpCisgICBwcm9jZWR1cmUgUmVmcmVzaCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICAtLSAgQUtBCisgICAtLSAgVGhlcmUgaXMgYW4gb3ZlcmxvYWRlZCBSZWZyZXNoIGZvciBQYWRzLgorICAgLS0gIFRoZSBJbmxpbmUgcHJhZ21hIGFwcGVhcnMgdGhlcmUKKyAgIC0tICBBTElBUyhgcmVmcmVzaCgpJykKKworICAgLS0gIEFOQ0hPUihgd25vdXRyZWZyZXNoKCknLGBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlJykKKyAgIHByb2NlZHVyZSBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBUaGVyZSBpcyBhbiBvdmVybG9hZGVkIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgZm9yIFBhZHMuCisgICAtLSAgVGhlIElubGluZSBwcmFnbWEgYXBwZWFycyB0aGVyZQorCisgICAtLSAgQU5DSE9SKGByZWRyYXd3aW4oKScsYFJlZHJhdycpCisgICBwcm9jZWR1cmUgUmVkcmF3IChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgd3JlZHJhd2xuKCknLGBSZWRyYXcnKQorICAgcHJvY2VkdXJlIFJlZHJhdyAoV2luICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBCZWdpbl9MaW5lIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIExpbmVfQ291bnQgOiBpbiBQb3NpdGl2ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChSZWRyYXcpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19jbGVhci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdlcmFzZSgpJyxgRXJhc2UnKQorICAgcHJvY2VkdXJlIEVyYXNlIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgZXJhc2UoKScpCisgICBwcmFnbWEgSW5saW5lIChFcmFzZSk7CisKKyAgIC0tICBBTkNIT1IoYHdjbGVhcigpJyxgQ2xlYXInKQorICAgcHJvY2VkdXJlIENsZWFyCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgY2xlYXIoKScpCisgICBwcmFnbWEgSW5saW5lIChDbGVhcik7CisKKyAgIC0tICBBTkNIT1IoYHdjbHJ0b2JvdCgpJyxgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbicpCisgICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbgorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGNscnRvYm90KCknKQorICAgcHJhZ21hIElubGluZSAoQ2xlYXJfVG9fRW5kX09mX1NjcmVlbik7CisKKyAgIC0tICBBTkNIT1IoYHdjbHJ0b2VvbCgpJyxgQ2xlYXJfVG9fRW5kX09mX0xpbmUnKQorICAgcHJvY2VkdXJlIENsZWFyX1RvX0VuZF9PZl9MaW5lCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgY2xydG9lb2woKScpCisgICBwcmFnbWEgSW5saW5lIChDbGVhcl9Ub19FbmRfT2ZfTGluZSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2JrZ2QuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3YmtnZHNldCgpJyxgU2V0X0JhY2tncm91bmQnKQorICAgLS0gIFRPRE86IHdlIGNvdWxkIGhhdmUgU2V0X0JhY2tncm91bmQoV2luZG93OyBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKKyAgIC0tICBiZWNhdXNlIGluIEMgaXQgaXMgY29tbW9uIHRvIHNlZSBia2dkc2V0KEFfQk9MRCkgb3IKKyAgIC0tICBia2dkc2V0KENPTE9SX1BBSVIobikpCisgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGJrZ2RzZXQoKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfQmFja2dyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYHdia2dkKCknLGBDaGFuZ2VfQmFja2dyb3VuZCcpCisgICBwcm9jZWR1cmUgQ2hhbmdlX0JhY2tncm91bmQKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGJrZ2QoKScpCisgICBwcmFnbWEgSW5saW5lIChDaGFuZ2VfQmFja2dyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYHdia2dkZ2V0KCknLGBHZXRfQmFja2dyb3VuZCcpCisgICAtLSAgPyB3YmtnZGdldCBpcyBub3QgbGlzdGVkIGluIGN1cnNfYmtnZCwgZ2V0YmtnZCBpcyB0aHBvdWdoLgorICAgZnVuY3Rpb24gR2V0X0JhY2tncm91bmQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgYmtnZGdldCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9CYWNrZ3JvdW5kKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfdG91Y2guM3gnKQorCisgICAtLSAgQU5DSE9SKGB1bnRvdWNod2luKCknLGBVbnRvdWNoJykKKyAgIHByb2NlZHVyZSBVbnRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFVudG91Y2gpOworCisgICAtLSAgQU5DSE9SKGB0b3VjaHdpbigpJyxgVG91Y2gnKQorICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgdG91Y2hsaW5lKCknLGBUb3VjaCcpCisgICBwcm9jZWR1cmUgVG91Y2ggKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgU3RhcnQgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBDb3VudCA6IGluIFBvc2l0aXZlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFRvdWNoKTsKKworICAgLS0gIEFOQ0hPUihgd3RvdWNobG4oKScsYENoYW5nZV9MaW5lX1N0YXR1cycpCisgICBwcm9jZWR1cmUgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudCA6IGluIFBvc2l0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIDogaW4gQm9vbGVhbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDaGFuZ2VfTGluZXNfU3RhdHVzKTsKKworICAgLS0gIEFOQ0hPUihgaXNfbGluZXRvdWNoZWQoKScsYElzX1RvdWNoZWQnKQorICAgZnVuY3Rpb24gSXNfVG91Y2hlZCAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBMaW5lIDogTGluZV9Qb3NpdGlvbikgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGlzX3dpbnRvdWNoZWQoKScsYElzX1RvdWNoZWQnKQorICAgZnVuY3Rpb24gSXNfVG91Y2hlZCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJc19Ub3VjaGVkKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfb3ZlcmxheS4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGNvcHl3aW4oKScsYENvcHknKQorICAgcHJvY2VkdXJlIENvcHkKKyAgICAgKFNvdXJjZV9XaW5kb3cgICAgICAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIE5vbl9EZXN0cnVjdGl2ZV9Nb2RlICAgICA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDb3B5KTsKKworICAgLS0gIEFOQ0hPUihgb3ZlcndyaXRlKCknLGBPdmVyd3JpdGUnKQorICAgcHJvY2VkdXJlIE92ZXJ3cml0ZSAoU291cmNlX1dpbmRvdyAgICAgIDogaW4gV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25fV2luZG93IDogaW4gV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE92ZXJ3cml0ZSk7CisKKyAgIC0tICBBTkNIT1IoYG92ZXJsYXkoKScsYE92ZXJsYXknKQorICAgcHJvY2VkdXJlIE92ZXJsYXkgKFNvdXJjZV9XaW5kb3cgICAgICA6IGluIFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBpbiBXaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoT3ZlcmxheSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2RlbGV0ZWxuLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2luc2RlbGxuKCknLGBJbnNlcnRfRGVsZXRlX0xpbmVzJykKKyAgIHByb2NlZHVyZSBJbnNlcnRfRGVsZXRlX0xpbmVzCisgICAgIChXaW4gICA6IGluIFdpbmRvdyAgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZXMgOiBpbiBJbnRlZ2VyIDo9IDEpOyAtLSAgZGVmYXVsdCBpcyB0byBpbnNlcnQgb25lIGxpbmUgYWJvdmUKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgaW5zZGVsbG4oKScpCisgICBwcmFnbWEgSW5saW5lIChJbnNlcnRfRGVsZXRlX0xpbmVzKTsKKworICAgLS0gIEFOQ0hPUihgd2RlbGV0ZWxuKCknLGBEZWxldGVfTGluZScpCisgICBwcm9jZWR1cmUgRGVsZXRlX0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBkZWxldGVsbigpJykKKyAgIHByYWdtYSBJbmxpbmUgKERlbGV0ZV9MaW5lKTsKKworICAgLS0gIEFOQ0hPUihgd2luc2VydGxuKCknLGBJbnNlcnRfTGluZScpCisgICBwcm9jZWR1cmUgSW5zZXJ0X0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBpbnNlcnRsbigpJykKKyAgIHByYWdtYSBJbmxpbmUgKEluc2VydF9MaW5lKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfZ2V0eXguM3gnKQorCisgICAtLSAgQU5DSE9SKGBnZXRtYXh5eCgpJyxgR2V0X1NpemUnKQorICAgcHJvY2VkdXJlIEdldF9TaXplCisgICAgIChXaW4gICAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBOdW1iZXJfT2ZfTGluZXMgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgTnVtYmVyX09mX0NvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9TaXplKTsKKworICAgLS0gIEFOQ0hPUihgZ2V0YmVneXgoKScsYEdldF9XaW5kb3dfUG9zaXRpb24nKQorICAgcHJvY2VkdXJlIEdldF9XaW5kb3dfUG9zaXRpb24KKyAgICAgKFdpbiAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBUb3BfTGVmdF9MaW5lICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgIFRvcF9MZWZ0X0NvbHVtbiA6IG91dCBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X1dpbmRvd19Qb3NpdGlvbik7CisKKyAgIC0tICBBTkNIT1IoYGdldHl4KCknLGBHZXRfQ3Vyc29yX1Bvc2l0aW9uJykKKyAgIHByb2NlZHVyZSBHZXRfQ3Vyc29yX1Bvc2l0aW9uCisgICAgIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfQ3Vyc29yX1Bvc2l0aW9uKTsKKworICAgLS0gIEFOQ0hPUihgZ2V0cGFyeXgoKScsYEdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50JykKKyAgIHByb2NlZHVyZSBHZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudAorICAgICAoV2luICAgICAgICAgICAgICAgIDogaW4gIFdpbmRvdzsKKyAgICAgIFRvcF9MZWZ0X0xpbmUgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgVG9wX0xlZnRfQ29sdW1uICAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIElzX05vdF9BX1N1YndpbmRvdyA6IG91dCBCb29sZWFuKTsKKyAgIC0tICBBS0EKKyAgIC0tICBJbnN0ZWFkIG9mIHBsYWNpbmcgLTEgaW4gdGhlIGNvb3JkaW5hdGVzIGFzIHJldHVybiwgd2UgdXNlIGEgYm9vbGVhbgorICAgLS0gIHRvIHJldHVybiB0aGUgaW5mbyB0aGF0IHRoZSB3aW5kb3cgaGFzIG5vIHBhcmVudC4KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfcGFkLjN4JykKKworICAgLS0gIEFOQ0hPUihgbmV3cGFkKCknLGBOZXdfUGFkJykKKyAgIGZ1bmN0aW9uIE5ld19QYWQgKExpbmVzICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE5ld19QYWQpOworCisgICAtLSAgQU5DSE9SKGBzdWJwYWQoKScsYFN1Yl9QYWQnKQorICAgZnVuY3Rpb24gU3ViX1BhZAorICAgICAoUGFkICAgICAgICAgICAgICAgICAgIDogV2luZG93OworICAgICAgTnVtYmVyX09mX0xpbmVzICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gICA6IExpbmVfUG9zaXRpb247CisgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTdWJfUGFkKTsKKworICAgLS0gIEFOQ0hPUihgcHJlZnJlc2goKScsYFJlZnJlc2gnKQorICAgcHJvY2VkdXJlIFJlZnJlc2gKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChSZWZyZXNoKTsKKworICAgLS0gIEFOQ0hPUihgcG5vdXRyZWZyZXNoKCknLGBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlJykKKyAgIHByb2NlZHVyZSBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlCisgICAgIChQYWQgICAgICAgICAgICAgICAgICAgICAgOiBpbiBXaW5kb3c7CisgICAgICBTb3VyY2VfVG9wX1JvdyAgICAgICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgU291cmNlX0xlZnRfQ29sdW1uICAgICAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fVG9wX1JvdyAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX0xlZnRfQ29sdW1uICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSk7CisKKyAgIC0tICBBTkNIT1IoYHBlY2hvY2hhcigpJyxgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQnKQorICAgcHJvY2VkdXJlIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0CisgICAgIChQYWQgOiBpbiBXaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisKKyAgIHByb2NlZHVyZSBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdAorICAgICAoUGFkIDogaW4gV2luZG93OworICAgICAgQ2ggIDogaW4gQ2hhcmFjdGVyKTsKKyAgIHByYWdtYSBJbmxpbmUgKEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfc2Nyb2xsLjN4JykKKworICAgLS0gIEFOQ0hPUihgd3NjcmwoKScsYFNjcm9sbCcpCisgICBwcm9jZWR1cmUgU2Nyb2xsIChXaW4gICAgOiBpbiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIEludGVnZXIgOj0gMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHNjcm9sbCgpJykKKyAgIC0tICBBTElBUyhgc2NybCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNjcm9sbCk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2RlbGNoLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2RlbGNoKCknLGBEZWxldGVfQ2hhcmFjdGVyJykKKyAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgZGVsY2goKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2RlbGNoKCknLGBEZWxldGVfQ2hhcmFjdGVyJykKKyAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12ZGVsY2goKScpCisgICBwcmFnbWEgSW5saW5lIChEZWxldGVfQ2hhcmFjdGVyKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfaW5jaC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdpbmNoKCknLGBQZWVrJykKKyAgIGZ1bmN0aW9uIFBlZWsgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgIC0tICBBTElBUyhgaW5jaCgpJykKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgbXZ3aW5jaCgpJyxgUGVlaycpCisgICBmdW5jdGlvbiBQZWVrCisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBtdmluY2goKScpCisgICAtLSAgTW9yZSBQZWVrJ3MgZm9sbG93LCBwcmFnbWEgSW5saW5lIGFwcGVhcnMgbGF0ZXIuCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2luc2NoLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2luc2NoKCknLGBJbnNlcnQnKQorICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgaW5zY2goKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2luc2NoKCknLGBJbnNlcnQnKQorICAgcHJvY2VkdXJlIEluc2VydCAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBDaCAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12aW5zY2goKScpCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2luc3N0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdpbnNuc3RyKCknLGBJbnNlcnQnKQorICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3aW5zc3RyKCknKQorICAgLS0gIEFMSUFTKGBpbnNuc3RyKCknKQorICAgLS0gIEFMSUFTKGBpbnNzdHIoKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2luc25zdHIoKScsYEluc2VydCcpCisgICBwcm9jZWR1cmUgSW5zZXJ0IChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIFN0ciAgICA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBtdndpbnNzdHIoKScpCisgICAtLSAgQUxJQVMoYG12aW5zbnN0cigpJykKKyAgIC0tICBBTElBUyhgbXZpbnNzdHIoKScpCisgICBwcmFnbWEgSW5saW5lIChJbnNlcnQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19pbnN0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdpbm5zdHIoKScsYFBlZWsnKQorICAgcHJvY2VkdXJlIFBlZWsgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3aW5zdHIoKScpCisgICAtLSAgQUxJQVMoYGlubnN0cigpJykKKyAgIC0tICBBTElBUyhgaW5zdHIoKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2lubnN0cigpJyxgUGVlaycpCisgICBwcm9jZWR1cmUgUGVlayAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nOworICAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZ3aW5zdHIoKScpCisgICAtLSAgQUxJQVMoYG12aW5uc3RyKCknKQorICAgLS0gIEFMSUFTKGBtdmluc3RyKCknKQorCisgICAtLSAgTUFOUEFHRShgY3Vyc19pbmNoc3RyLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2luY2huc3RyKCknLGBQZWVrJykKKyAgIHByb2NlZHVyZSBQZWVrIChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3aW5jaHN0cigpJykKKyAgIC0tICBBTElBUyhgaW5jaG5zdHIoKScpCisgICAtLSAgQUxJQVMoYGluY2hzdHIoKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2luY2huc3RyKCknLGBQZWVrJykKKyAgIHByb2NlZHVyZSBQZWVrIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIFN0ciAgICA6IG91dCBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICBMZW4gICAgOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12d2luY2hzdHIoKScpCisgICAtLSAgQUxJQVMoYG12aW5jaG5zdHIoKScpCisgICAtLSAgQUxJQVMoYG12aW5jaHN0cigpJykKKyAgIC0tICBXZSBkb24ndCBpbmxpbmUgdGhlIFBlZWsgcHJvY2VkdXJlcworCisgICAtLSAgTUFOUEFHRShgY3Vyc19nZXRzdHIuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3Z2V0bnN0cigpJyxgR2V0JykKKyAgIHByb2NlZHVyZSBHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgd2dldHN0cigpJykKKyAgIC0tICBBTElBUyhgZ2V0bnN0cigpJykKKyAgIC0tICBBTElBUyhgZ2V0c3RyKCknKQorICAgLS0gIGFjdHVhbGx5IGdldHN0ciBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhhdCByZXN1bHRzIGluIGJ1ZmZlcgorICAgLS0gIG92ZXJmbG93cy4KKworICAgLS0gIEFOQ0hPUihgbXZ3Z2V0bnN0cigpJyxgR2V0JykKKyAgIHByb2NlZHVyZSBHZXQgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgU3RyICAgIDogb3V0IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZ3Z2V0c3RyKCknKQorICAgLS0gIEFMSUFTKGBtdmdldG5zdHIoKScpCisgICAtLSAgQUxJQVMoYG12Z2V0c3RyKCknKQorICAgLS0gIEdldCBpcyBub3QgaW5saW5lZAorCisgICAtLSAgTUFOUEFHRShgY3Vyc19zbGsuM3gnKQorCisgICAtLSAgTm90IEltcGxlbWVudGVkOiBzbGtfYXR0cl9vbiwgc2xrX2F0dHJfb2ZmLCBzbGtfYXR0cl9zZXQKKworICAgdHlwZSBTb2Z0X0xhYmVsX0tleV9Gb3JtYXQgaXMgKFRocmVlX1R3b19UaHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3VyX0ZvdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENfU3R5bGUsICAgICAgICAgICAgICAtLSAgbmN1cnNlcyBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDX1N0eWxlX1dpdGhfSW5kZXgpOyAgLS0gICIKKyAgIHR5cGUgTGFiZWxfTnVtYmVyIGlzIG5ldyBQb3NpdGl2ZSByYW5nZSAxIC4uIDEyOworICAgdHlwZSBMYWJlbF9KdXN0aWZpY2F0aW9uIGlzIChMZWZ0LCBDZW50ZXJlZCwgUmlnaHQpOworCisgICAtLSAgQU5DSE9SKGBzbGtfaW5pdCgpJyxgSW5pdF9Tb2Z0X0xhYmVsX0tleXMnKQorICAgcHJvY2VkdXJlIEluaXRfU29mdF9MYWJlbF9LZXlzCisgICAgIChGb3JtYXQgOiBpbiBTb2Z0X0xhYmVsX0tleV9Gb3JtYXQgOj0gVGhyZWVfVHdvX1RocmVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEluaXRfU29mdF9MYWJlbF9LZXlzKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX3NldCgpJyxgU2V0X1NvZnRfTGFiZWxfS2V5JykKKyAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbXQgICA6IGluIExhYmVsX0p1c3RpZmljYXRpb24gOj0gTGVmdCk7CisgICAtLSAgQUtBCisgICAtLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcHJvY2VkdXJlCisKKyAgIC0tICBBTkNIT1IoYHNsa19yZWZyZXNoKCknLGBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5JykKKyAgIHByb2NlZHVyZSBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5czsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX25vdXRyZWZyZXNoKCknLGBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZScpCisgICBwcm9jZWR1cmUgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZSk7CisKKyAgIC0tICBBTkNIT1IoYHNsa19sYWJlbCgpJyxgR2V0X1NvZnRfTGFiZWxfS2V5JykKKyAgIHByb2NlZHVyZSBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgc2xrX2xhYmVsKCknLGBHZXRfU29mdF9MYWJlbF9LZXknKQorICAgZnVuY3Rpb24gR2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IGluIExhYmVsX051bWJlcikgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChHZXRfU29mdF9MYWJlbF9LZXkpOworCisgICAtLSAgQU5DSE9SKGBzbGtfY2xlYXIoKScsYENsZWFyX1NvZnRfTGFiZWxfS2V5cycpCisgICBwcm9jZWR1cmUgQ2xlYXJfU29mdF9MYWJlbF9LZXlzOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ2xlYXJfU29mdF9MYWJlbF9LZXlzKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX3Jlc3RvcmUoKScsYFJlc3RvcmVfU29mdF9MYWJlbF9LZXlzJykKKyAgIHByb2NlZHVyZSBSZXN0b3JlX1NvZnRfTGFiZWxfS2V5czsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlc3RvcmVfU29mdF9MYWJlbF9LZXlzKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX3RvdWNoKCknLGBUb3VjaF9Tb2Z0X0xhYmVsX0tleXMnKQorICAgcHJvY2VkdXJlIFRvdWNoX1NvZnRfTGFiZWxfS2V5czsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFRvdWNoX1NvZnRfTGFiZWxfS2V5cyk7CisKKyAgIC0tICBBTkNIT1IoYHNsa19hdHRyb24oKScsYFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzJykKKyAgIHByb2NlZHVyZSBTd2l0Y2hfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcworICAgICAoQXR0ciA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgT24gICA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHNsa19hdHRyb2ZmKCknKQorICAgcHJhZ21hIElubGluZSAoU3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfYXR0cnNldCgpJyxgU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMnKQorICAgcHJvY2VkdXJlIFNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzCisgICAgIChBdHRyICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX2F0dHIoKScsYEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzJykKKyAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgc2xrX2F0dHIoKScsYEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzJykKKyAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIHJldHVybiBDb2xvcl9QYWlyOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfY29sb3IoKScsYFNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcicpCisgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yIChQYWlyIDogaW4gQ29sb3JfUGFpcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfU29mdF9MYWJlbF9LZXlfQ29sb3IpOworCisgICAtLSAgTUFOUEFHRShga2V5Ym91bmQuM3gnKQorICAgLS0gIE5vdCBJbXBsZW1lbnRlZDoga2V5Ym91bmQKKworICAgLS0gIE1BTlBBR0UoYGtleW9rLjN4JykKKworICAgLS0gIEFOQ0hPUihga2V5b2soKScsYEVuYWJsZV9LZXknKQorICAgcHJvY2VkdXJlIEVuYWJsZV9LZXkgKEtleSAgICA6IGluIFNwZWNpYWxfS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEVuYWJsZV9LZXkpOworCisgICAtLSAgTUFOUEFHRShgZGVmaW5lX2tleS4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGRlZmluZV9rZXkoKScsYERlZmluZV9LZXknKQorICAgcHJvY2VkdXJlIERlZmluZV9LZXkgKERlZmluaXRpb24gOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA6IGluIFNwZWNpYWxfS2V5X0NvZGUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRGVmaW5lX0tleSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3V0aWwuM3gnKQorCisgICAtLSAgfCBOb3QgaW1wbGVtZW50ZWQgOiBmaWx0ZXIsIHVzZV9lbnYKKyAgIC0tICB8IHB1dHdpbiwgZ2V0d2luIGFyZSBpbiB0aGUgY2hpbGQgcGFja2FnZSBQdXRXaW4KKyAgIC0tCisKKyAgIC0tICBBTkNIT1IoYGtleW5hbWUoKScsYEtleV9OYW1lJykKKyAgIHByb2NlZHVyZSBLZXlfTmFtZSAoS2V5ICA6IGluICBSZWFsX0tleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisgICAtLSAgVGhlIGV4dGVybmFsIG5hbWUgZm9yIGEgcmVhbCBrZXlzdHJva2UuCisKKyAgIC0tICBBTkNIT1IoYGtleW5hbWUoKScsYEtleV9OYW1lJykKKyAgIGZ1bmN0aW9uIEtleV9OYW1lIChLZXkgIDogaW4gIFJlYWxfS2V5X0NvZGUpIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgLS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHJvdXRpbmUKKworICAgLS0gIEFOQ0hPUihgdW5jdHJsKCknLGBVbl9Db250cm9sJykKKyAgIHByb2NlZHVyZSBVbl9Db250cm9sIChDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgdW5jdHJsKCknLGBVbl9Db250cm9sJykKKyAgIGZ1bmN0aW9uIFVuX0NvbnRyb2wgKENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gU3RyaW5nOworICAgLS0gIEFLQQorICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKFVuX0NvbnRyb2wpOworCisgICAtLSAgQU5DSE9SKGBkZWxheV9vdXRwdXQoKScsYERlbGF5X091dHB1dCcpCisgICBwcm9jZWR1cmUgRGVsYXlfT3V0cHV0IChNc2VjcyA6IGluIE5hdHVyYWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRGVsYXlfT3V0cHV0KTsKKworICAgLS0gIEFOQ0hPUihgZmx1c2hpbnAoKScsYEZsdXNoX0lucHV0JykKKyAgIHByb2NlZHVyZSBGbHVzaF9JbnB1dDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEZsdXNoX0lucHV0KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfdGVybWF0dHJzLjN4JykKKworICAgLS0gIEFOQ0hPUihgYmF1ZHJhdGUoKScsYEJhdWRyYXRlJykKKyAgIGZ1bmN0aW9uIEJhdWRyYXRlIHJldHVybiBOYXR1cmFsOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQmF1ZHJhdGUpOworCisgICAtLSAgQU5DSE9SKGBlcmFzZWNoYXIoKScsYEVyYXNlX0NoYXJhY3RlcicpCisgICBmdW5jdGlvbiBFcmFzZV9DaGFyYWN0ZXIgcmV0dXJuIENoYXJhY3RlcjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEVyYXNlX0NoYXJhY3Rlcik7CisKKyAgIC0tICBBTkNIT1IoYGtpbGxjaGFyKCknLGBLaWxsX0NoYXJhY3RlcicpCisgICBmdW5jdGlvbiBLaWxsX0NoYXJhY3RlciByZXR1cm4gQ2hhcmFjdGVyOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoS2lsbF9DaGFyYWN0ZXIpOworCisgICAtLSAgQU5DSE9SKGBoYXNfaWMoKScsYEhhc19JbnNlcnRfQ2hhcmFjdGVyJykKKyAgIGZ1bmN0aW9uIEhhc19JbnNlcnRfQ2hhcmFjdGVyIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSGFzX0luc2VydF9DaGFyYWN0ZXIpOworCisgICAtLSAgQU5DSE9SKGBoYXNfaWwoKScsYEhhc19JbnNlcnRfTGluZScpCisgICBmdW5jdGlvbiBIYXNfSW5zZXJ0X0xpbmUgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChIYXNfSW5zZXJ0X0xpbmUpOworCisgICAtLSAgQU5DSE9SKGB0ZXJtYXR0cnMoKScsYFN1cHBvcnRlZF9BdHRyaWJ1dGVzJykKKyAgIGZ1bmN0aW9uIFN1cHBvcnRlZF9BdHRyaWJ1dGVzIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFN1cHBvcnRlZF9BdHRyaWJ1dGVzKTsKKworICAgLS0gIEFOQ0hPUihgbG9uZ25hbWUoKScsYExvbmdfTmFtZScpCisgICBwcm9jZWR1cmUgTG9uZ19OYW1lIChOYW1lIDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGxvbmduYW1lKCknLGBMb25nX05hbWUnKQorICAgZnVuY3Rpb24gTG9uZ19OYW1lIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoTG9uZ19OYW1lKTsKKworICAgLS0gIEFOQ0hPUihgdGVybW5hbWUoKScsYFRlcm1pbmFsX05hbWUnKQorICAgcHJvY2VkdXJlIFRlcm1pbmFsX05hbWUgKE5hbWUgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgdGVybW5hbWUoKScsYFRlcm1pbmFsX05hbWUnKQorICAgZnVuY3Rpb24gVGVybWluYWxfTmFtZSByZXR1cm4gU3RyaW5nOworICAgLS0gIEFLQQorICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKFRlcm1pbmFsX05hbWUpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19jb2xvci4zeCcpCisKKyAgIC0tICBDT0xPUl9QQUlSCisgICAtLSAgQ09MT1JfUEFJUihuKSBpbiBDIGlzIHRoZSBzYW1lIGFzCisgICAtLSAgQXR0cmlidXRlZF9DaGFyYWN0ZXIoQ2ggPT4gTnVsLCBDb2xvciA9PiBuLCBBdHRyID0+IE5vcm1hbF9WaWRlbykKKyAgIC0tICBJbiBDIHlvdSBvZnRlbiBzZWUgc29tZXRoaW5nIGxpa2UgYyA9IGMgfCBDT0xPUl9QQUlSKG4pOworICAgLS0gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjLkNvbG9yIDo9IG47CisKKyAgIC0tICBBTkNIT1IoYHN0YXJ0X2NvbG9yKCknLGBTdGFydF9Db2xvcicpCisgICBwcm9jZWR1cmUgU3RhcnRfQ29sb3I7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBTdGFydF9Db2xvciwgInN0YXJ0X2NvbG9yIik7CisKKyAgIC0tICBBTkNIT1IoYGluaXRfcGFpcigpJyxgSW5pdF9QYWlyJykKKyAgIHByb2NlZHVyZSBJbml0X1BhaXIgKFBhaXIgOiBpbiBSZWRlZmluYWJsZV9Db2xvcl9QYWlyOworICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IGluIENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBpbiBDb2xvcl9OdW1iZXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSW5pdF9QYWlyKTsKKworICAgLS0gIEFOQ0hPUihgcGFpcl9jb250ZW50KCknLGBQYWlyX0NvbnRlbnQnKQorICAgcHJvY2VkdXJlIFBhaXJfQ29udGVudCAoUGFpciA6IGluIENvbG9yX1BhaXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ29sb3JfTnVtYmVyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFBhaXJfQ29udGVudCk7CisKKyAgIC0tICBBTkNIT1IoYGhhc19jb2xvcnMoKScsYEhhc19Db2xvcnMnKQorICAgZnVuY3Rpb24gSGFzX0NvbG9ycyByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEhhc19Db2xvcnMpOworCisgICAtLSAgQU5DSE9SKGBpbml0X2NvbG9yKCknLGBJbml0X0NvbG9yJykKKyAgIHByb2NlZHVyZSBJbml0X0NvbG9yIChDb2xvciA6IGluIENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWQgICA6IGluIFJHQl9WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBHcmVlbiA6IGluIFJHQl9WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCbHVlICA6IGluIFJHQl9WYWx1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJbml0X0NvbG9yKTsKKworICAgLS0gIEFOQ0hPUihgY2FuX2NoYW5nZV9jb2xvcigpJyxgQ2FuX0NoYW5nZV9Db2xvcicpCisgICBmdW5jdGlvbiBDYW5fQ2hhbmdlX0NvbG9yIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ2FuX0NoYW5nZV9Db2xvcik7CisKKyAgIC0tICBBTkNIT1IoYGNvbG9yX2NvbnRlbnQoKScsYENvbG9yX0NvbnRlbnQnKQorICAgcHJvY2VkdXJlIENvbG9yX0NvbnRlbnQgKENvbG9yIDogaW4gIENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWQgICA6IG91dCBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlZW4gOiBvdXQgUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWUgIDogb3V0IFJHQl9WYWx1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDb2xvcl9Db250ZW50KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfa2VybmVsLjN4JykKKyAgIC0tICB8IE5vdCBpbXBsZW1lbnRlZDogZ2V0c3l4LCBzZXRzeXgKKyAgIC0tCisgICB0eXBlIEN1cnNlc19Nb2RlIGlzIChDdXJzZXMsIFNoZWxsKTsKKworICAgLS0gIEFOQ0hPUihgZGVmX3Byb2dfbW9kZSgpJyxgU2F2ZV9DdXJzZXNfTW9kZScpCisgICBwcm9jZWR1cmUgU2F2ZV9DdXJzZXNfTW9kZSAoTW9kZSA6IGluIEN1cnNlc19Nb2RlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgZGVmX3NoZWxsX21vZGUoKScpCisgICBwcmFnbWEgSW5saW5lIChTYXZlX0N1cnNlc19Nb2RlKTsKKworICAgLS0gIEFOQ0hPUihgcmVzZXRfcHJvZ19tb2RlKCknLGBSZXNldF9DdXJzZXNfTW9kZScpCisgICBwcm9jZWR1cmUgUmVzZXRfQ3Vyc2VzX01vZGUgKE1vZGUgOiBpbiBDdXJzZXNfTW9kZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHJlc2V0X3NoZWxsX21vZGUoKScpCisgICBwcmFnbWEgSW5saW5lIChSZXNldF9DdXJzZXNfTW9kZSk7CisKKyAgIC0tICBBTkNIT1IoYHNhdmV0dHkoKScsYFNhdmVfVGVybWluYWxfU3RhdGUnKQorICAgcHJvY2VkdXJlIFNhdmVfVGVybWluYWxfU3RhdGU7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTYXZlX1Rlcm1pbmFsX1N0YXRlKTsKKworICAgLS0gIEFOQ0hPUihgcmVzZXR0eSgpOycsYFJlc2V0X1Rlcm1pbmFsX1N0YXRlJykKKyAgIHByb2NlZHVyZSBSZXNldF9UZXJtaW5hbF9TdGF0ZTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlc2V0X1Rlcm1pbmFsX1N0YXRlKTsKKworICAgdHlwZSBTdGRzY3JfSW5pdF9Qcm9jIGlzIGFjY2VzcworICAgICAgZnVuY3Rpb24gKFdpbiAgICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXI7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgU3Rkc2NyX0luaXRfUHJvYyk7CisgICAtLSAgTi5CLjogdGhlIHJldHVybiB2YWx1ZSBpcyBhY3R1YWxseSBpZ25vcmVkLCBidXQgaXQgc2VlbXMgdG8gYmUKKyAgIC0tICAgICAgICBhIGdvb2QgcHJhY3RpY2UgdG8gcmV0dXJuIDAgaWYgeW91IHRoaW5rIGFsbCB3ZW50IGZpbmUKKyAgIC0tICAgICAgICBhbmQgLTEgb3RoZXJ3aXNlLgorCisgICAtLSAgQU5DSE9SKGByaXBvZmZsaW5lKCknLGBSaXBfT2ZmX0xpbmVzJykKKyAgIHByb2NlZHVyZSBSaXBfT2ZmX0xpbmVzIChMaW5lcyA6IGluIEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyAgOiBpbiBTdGRzY3JfSW5pdF9Qcm9jKTsKKyAgIC0tICBBS0EKKyAgIC0tICBOLkIuOiB0byBiZSBtb3JlIHByZWNpc2UsIHRoaXMgdXNlcyBhIG5jdXJzZXMgc3BlY2lmaWMgZW5oYW5jZW1lbnQgb2YKKyAgIC0tICAgICAgICByaXBvZmZsaW5lKCksIGluIHdoaWNoIHRoZSBMaW5lcyBhcmd1bWVudCBhYnNvbHV0ZSB2YWx1ZSBpcyB0aGUKKyAgIC0tICAgICAgICBudW1iZXIgb2YgbGluZXMgdG8gYmUgcmlwcGVkIG9mLiBUaGUgb2ZmaWNpYWwgcmlwb2ZmbGluZSgpIG9ubHkKKyAgIC0tICAgICAgICB1c2VzIHRoZSBzaWduIG9mIExpbmVzIHRvIHJpcCBvZiBhIHNpbmdsZSBsaW5lIGZyb20gYm90dG9tIG9yIHRvcC4KKyAgIHByYWdtYSBJbmxpbmUgKFJpcF9PZmZfTGluZXMpOworCisgICB0eXBlIEN1cnNvcl9WaXNpYmlsaXR5IGlzIChJbnZpc2libGUsIE5vcm1hbCwgVmVyeV9WaXNpYmxlKTsKKworICAgLS0gIEFOQ0hPUihgY3Vyc19zZXQoKScsYFNldF9DdXJzb3JfVmlzaWJpbGl0eScpCisgICBwcm9jZWR1cmUgU2V0X0N1cnNvcl9WaXNpYmlsaXR5IChWaXNpYmlsaXR5IDogaW4gb3V0IEN1cnNvcl9WaXNpYmlsaXR5KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9DdXJzb3JfVmlzaWJpbGl0eSk7CisKKyAgIC0tICBBTkNIT1IoYG5hcG1zKCknLGBOYXBfTWlsbGlfU2Vjb25kcycpCisgICBwcm9jZWR1cmUgTmFwX01pbGxpX1NlY29uZHMgKE1zIDogaW4gTmF0dXJhbCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChOYXBfTWlsbGlfU2Vjb25kcyk7CisKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBTb21lIHVzZWZ1bCBoZWxwZXJzLgorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIHR5cGUgVHJhbnNmb3JtX0RpcmVjdGlvbiBpcyAoRnJvbV9TY3JlZW4sIFRvX1NjcmVlbik7CisgICBwcm9jZWR1cmUgVHJhbnNmb3JtX0Nvb3JkaW5hdGVzCisgICAgIChXICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gb3V0IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGlyICAgIDogaW4gVHJhbnNmb3JtX0RpcmVjdGlvbiA6PSBGcm9tX1NjcmVlbik7CisgICAtLSAgVGhpcyBwcm9jZWR1cmUgdHJhbnNmb3JtcyBzY3JlZW4gY29vcmRpbmF0ZXMgaW50byBjb29yZGluYXRlcyByZWxhdGl2ZQorICAgLS0gIHRvIHRoZSB3aW5kb3cgYW5kIHZpY2UgdmVyc2EsIGRlcGVuZGluZyBvbiB0aGUgRGlyIHBhcmFtZXRlci4KKyAgIC0tICBTY3JlZW4gY29vcmRpbmF0ZXMgYXJlIHRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbnMgb24gdGhlIHBoeXNpY2FsIGRldmljZS4KKyAgIC0tICBBbiBDdXJzZXNfRXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIExpbmUgYW5kIENvbHVtbiBhcmUgbm90IGluIHRoZQorICAgLS0gIFdpbmRvdyBvciBpZiB5b3UgcGFzcyB0aGUgTnVsbF9XaW5kb3cgYXMgYXJndW1lbnQuCisgICAtLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcHJvY2VkdXJlCisKKyAgIC0tICBNQU5QQUdFKGBkZWZhdWx0X2NvbG9ycy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHVzZV9kZWZhdWx0X2NvbG9ycygpJyxgVXNlX0RlZmF1bHRfQ29sb3JzJykKKyAgIHByb2NlZHVyZSBVc2VfRGVmYXVsdF9Db2xvcnM7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChVc2VfRGVmYXVsdF9Db2xvcnMpOworCisgICAtLSAgQU5DSE9SKGBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKScsYEFzc3VtZV9EZWZhdWx0X0NvbG9ycycpCisgICBwcm9jZWR1cmUgQXNzdW1lX0RlZmF1bHRfQ29sb3JzIChGb3JlIDogQ29sb3JfTnVtYmVyIDo9IERlZmF1bHRfQ29sb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogQ29sb3JfTnVtYmVyIDo9IERlZmF1bHRfQ29sb3IpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQXNzdW1lX0RlZmF1bHRfQ29sb3JzKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfZXh0ZW5kLjN4JykKKworICAgLS0gIEFOQ0hPUihgY3Vyc2VzX3ZlcnNpb24oKScsYEN1cnNlc19WZXJzaW9uJykKKyAgIGZ1bmN0aW9uIEN1cnNlc19WZXJzaW9uIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYHVzZV9leHRlbmRlZF9uYW1lcygpJyxgVXNlX0V4dGVuZGVkX05hbWVzJykKKyAgIC0tICBUaGUgcmV0dXJudmFsdWUgaXMgdGhlIHByZXZpb3VzIHNldHRpbmcgb2YgdGhlIGZsYWcKKyAgIGZ1bmN0aW9uIFVzZV9FeHRlbmRlZF9OYW1lcyAoRW5hYmxlIDogQm9vbGVhbikgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3RyYWNlLjN4JykKKworICAgLS0gIEFOQ0hPUihgX25jX2ZyZWVhbGwoKScsYEN1cnNlc19GcmVlX0FsbCcpCisgICBwcm9jZWR1cmUgQ3Vyc2VzX0ZyZWVfQWxsOworICAgLS0gIEFLQQorCisgICAtLSAgTUFOUEFHRShgY3Vyc19zY3JfZHVtcC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNjcl9kdW1wKCknLGBTY3JlZW5fRHVtcF9Ub19GaWxlJykKKyAgIHByb2NlZHVyZSBTY3JlZW5fRHVtcF9Ub19GaWxlIChGaWxlbmFtZSA6IGluIFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYHNjcl9yZXN0b3JlKCknLGBTY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGUnKQorICAgcHJvY2VkdXJlIFNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBzY3JfaW5pdCgpJyxgU2NyZWVuX0luaXRfRnJvbV9GaWxlJykKKyAgIHByb2NlZHVyZSBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgc2NyX3NldCgpJyxgU2NyZWVuX1NldF9GaWxlJykKKyAgIHByb2NlZHVyZSBTY3JlZW5fU2V0X0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfcHJpbnQuM3gnKQorICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogIG1jcHJpbnQKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfcHJpbnR3LjN4JykKKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6IHByaW50dywgIHdwcmludHcsIG12cHJpbnR3LCBtdndwcmludHcsIHZ3cHJpbnR3LAorICAgLS0gICAgICAgICAgICAgICAgICAgdndfcHJpbnR3CisgICAtLSAgUGxlYXNlIHVzZSB0aGUgQWRhIHN0eWxlIFRleHRfSU8gY2hpbGQgcGFja2FnZXMgZm9yIGZvcm1hdHRlZAorICAgLS0gIHByaW50aW5nLiBJdCBkb2Vzbid0IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UgdG8gbWFwIHRoZSBwcmludGYgc3R5bGUKKyAgIC0tICBDIGZ1bmN0aW9ucyB0byBBZGEuCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3NjYW53LjN4JykKKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6IHNjYW53LCB3c2NhbncsIG12c2NhbncsIG12d3NjYW53LCB2d3NjYW53LCB2d19zY2FudworCisgICAtLSAgTUFOUEFHRShgcmVzaXpldGVybS4zeCcpCisgICAtLSAgTm90IEltcGxlbWVudGVkOiByZXNpemV0ZXJtCisKKyAgIC0tICBNQU5QQUdFKGB3cmVzaXplLjN4JykKKworICAgLS0gIEFOQ0hPUihgd3Jlc2l6ZSgpJyxgUmVzaXplJykKKyAgIHByb2NlZHVyZSBSZXNpemUgKFdpbiAgICAgICAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIE51bWJlcl9PZl9MaW5lcyAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgIE51bWJlcl9PZl9Db2x1bW5zIDogQ29sdW1uX0NvdW50KTsKKyAgIC0tICBBS0EKKworcHJpdmF0ZQorICAgdHlwZSBXaW5kb3cgaXMgbmV3IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgIE51bGxfV2luZG93IDogY29uc3RhbnQgV2luZG93IDo9IDA7CisKKyAgIC0tICBUaGUgbmV4dCBjb25zdGFudHMgYXJlIGdlbmVyYXRlZCBhbmQgbWF5IGJlIGRpZmZlcmVudCBvbiB5b3VyCisgICAtLSAgYXJjaGl0ZWN0dXJlLgorICAgLS0KK2luY2x1ZGUoYFdpbmRvd19PZmZzZXRzJylkbmwKKyAgIEN1cnNlc19Cb29sX0ZhbHNlIDogY29uc3RhbnQgQ3Vyc2VzX0Jvb2wgOj0gMDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL01ha2VmaWxlLmluIGIvQWRhOTUvc2FtcGxlcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWU3OGRmCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE1NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CisjCisjICAkSWQ6IE1ha2VmaWxlLmluLHYgMS4zNCAyMDA2LzEyLzE3IDE2OjQ1OjAyIHRvbSBFeHAgJAorIworLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK3gJCT0gQFBST0dfRVhUQAorCitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitsaWJkaXIJCT0gQGxpYmRpckAKK2luY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0FXSwkJPSBAQVdLQAorTE5fUwkJPSBATE5fU0AKKworQ0MJCT0gQENDQAorQ0ZMQUdTCQk9IEBDRkxBR1NACisKK0NQUEZMQUdTCT0gQEFDUFBGTEFHU0AgXAorCQkgIC1ESEFWRV9DT05GSUdfSCAtSSQoc3JjZGlyKQorCitDQ0ZMQUdTCQk9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorCitDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ0NfR19PUFRAIC1EVFJBQ0UKK0NGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKK0NGTEFHU19TSEFSRUQJPSAkKENDRkxBR1MpIEBDQ19TSEFSRURfT1BUU0AKKworQ0ZMQUdTX0RFRkFVTFQJPSAkKENGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK1JFTF9WRVJTSU9OCT0gQGNmX2N2X3JlbF92ZXJzaW9uQAorQUJJX1ZFUlNJT04JPSBAY2ZfY3ZfYWJpX3ZlcnNpb25ACitMT0NBTF9MSUJESVIJPSBAdG9wX2J1aWxkZGlyQC9saWIKKworTElOSwkJPSAkKENDKQorTERGTEFHUwkJPSBATERGTEFHU0AgQExEX01PREVMQCBATElCU0AKKworUkFOTElCCQk9IEBSQU5MSUJACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRhX3NyY2Rpcj0uLi9zcmMKKworTERfRkxBR1MgICAgID0gQExEX01PREVMQCAkKExPQ0FMX0xJQlMpIEBMREZMQUdTQCBATElCU0AgQExPQ0FMX0xERkxBR1MyQCAkKExERkxBR1MpCisKK0FEQSAgICAgICAgICA9IEBjZl9hZGFfY29tcGlsZXJACitBREFGTEFHUyAgICAgPSBAQURBRkxBR1NAIC1JJChzcmNkaXIpCisKK0FEQU1BS0UgICAgICA9IEBjZl9hZGFfbWFrZUAKK0FEQU1BS0VGTEFHUyA9IC1hIC1BJChzcmNkaXIpIC1BJChhZGFfc3JjZGlyKSAtQSQoc3JjZGlyKS8kKGFkYV9zcmNkaXIpCisKK0FMSUIgICAgICAgICA9IEBjZl9hZGFfcGFja2FnZUAKK0FCQVNFICAgICAgICA9ICQoQUxJQiktY3Vyc2VzCisKK0NBUkdTICAgICAgICA9LWNhcmdzICQoQURBRkxBR1MpCitMQVJHUyAgICAgICAgPS1sYXJncyBAVEVTVF9BUkcyQCAkKExEX0ZMQUdTKSAtbEFkYUN1cnNlcworIAorUFJPR1MgICAgICAgID0gdG91ciByYWluIG5jdXJzZXMgCisKK1RPVVJfT0JKUyAgICA9CXRvdXIubyBzYW1wbGUubyBzYW1wbGUtY3Vyc2VzX2RlbW8ubyBzYW1wbGUtZXhwbGFuYXRpb24ubyAJXAorCQlzYW1wbGUtZm9ybV9kZW1vLm8gc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLm8gCQlcCisJCXNhbXBsZS1oZWFkZXJfaGFuZGxlci5vIHNhbXBsZS1oZWxwZXJzLm8gCQkJXAorCQlzYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5vIHNhbXBsZS1tYW5pZmVzdC5vIHNhbXBsZS1tZW51X2RlbW8ubwlcCisJCXNhbXBsZS1tZW51X2RlbW8tYXV4Lm8gc2FtcGxlLXRleHRfaW9fZGVtby5vCQkJXAorCQlzYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5vIHNhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5vCVwKKwkJc2FtcGxlLWZvcm1fZGVtby1hdXgubyBzYW1wbGUtbXlfZmllbGRfdHlwZS5vCisKK1JBSU5fT0JKUyAgICA9CXJhaW4ubyBzdGF0dXMubworCitOQ1VSU0VTX09CSlMgPSBuY3Vyc2VzLm8gICAgICAgIAluY3Vyc2VzMi1nZXRjaF90ZXN0Lm8gXAorCW5jdXJzZXMyLWFjc19hbmRfc2Nyb2xsLm8gICAgICAgbmN1cnNlczItbS5vIFwKKwluY3Vyc2VzMi1hY3NfZGlzcGxheS5vICAgICAgICAgIG5jdXJzZXMyLW1lbnVfdGVzdC5vIFwKKwluY3Vyc2VzMi1hdHRyX3Rlc3QubyAgICAgICAgICAgIG5jdXJzZXMyLW92ZXJsYXBfdGVzdC5vIFwKKwluY3Vyc2VzMi1jb2xvcl9lZGl0Lm8gICAgICAgICAgIG5jdXJzZXMyLXNsa190ZXN0Lm8gXAorCW5jdXJzZXMyLWNvbG9yX3Rlc3QubyAgICAgICAgICAgbmN1cnNlczItdGVzdF9zZ3JfYXR0cmlidXRlcy5vIFwKKwluY3Vyc2VzMi1kZW1vX2Zvcm1zLm8gICAgICAgICAgIG5jdXJzZXMyLXRyYWNlX3NldC5vIFwKKwluY3Vyc2VzMi1kZW1vX3BhZC5vICAgICAgICAgICAgIG5jdXJzZXMyLXV0aWwubyBcCisJbmN1cnNlczItZGVtb19wYW5lbHMubyAgICAgICAgICBuY3Vyc2VzMi5vIFwKKwluY3Vyc2VzMi1mbHVzaGlucF90ZXN0Lm8KKworCithbGwgOjogIHRvdXIkeCByYWluJHggbmN1cnNlcyR4CisJQGVjaG8gbWFkZSAkQAorCitzb3VyY2VzIDoKKwlAZWNobyBtYWRlICRACisKK2xpYnMgXAoraW5zdGFsbCBcCitpbnN0YWxsLmxpYnMgOjoKKwlAZWNobyBtYWRlICRACisKK3VuaW5zdGFsbCBcCit1bmluc3RhbGwubGlicyA6OgorCUBlY2hvIG1hZGUgJEAKKworbmN1cnNlcyR4IDoKKwkkKEFEQU1BS0UpICQoQURBTUFLRUZMQUdTKSBuY3Vyc2VzICQoQ0FSR1MpICQoTEFSR1MpCisKK3RvdXIkeCA6CWV4cGxhaW4ubXNnCisJJChBREFNQUtFKSAkKEFEQU1BS0VGTEFHUykgdG91ciAkKENBUkdTKSAkKExBUkdTKQorCitleHBsYWluLm1zZzoJJChzcmNkaXIpL2V4cGxhaW4udHh0CisJY3AgJChzcmNkaXIpL2V4cGxhaW4udHh0ICRACisKK3JhaW4keCA6CisJJChBREFNQUtFKSAkKEFEQU1BS0VGTEFHUykgcmFpbiAkKENBUkdTKSAkKExBUkdTKQorCittb3N0bHljbGVhbjoKKwlAZWNobyBtYWRlICRACisKK2NsZWFuIDo6IG1vc3RseWNsZWFuCisJcm0gLWYgKi5vICouYWxpIGJfdCouKiAqLnMgJChQUk9HUykgYS5vdXQgY29yZSBiXypfdGVzdC5jICoueHJbYnNdIFwKKwlleHBsYWluLm1zZyB0cmFjZSBzY3JlZW5kdW1wIAorCitkaXN0Y2xlYW4gOjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisJQGVjaG8gbWFkZSAkQApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9SRUFETUUgYi9BZGE5NS9zYW1wbGVzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGYxNmFkCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9SRUFETUUKQEAgLTAsMCArMSwzNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUsdiAxLjIgMjAwNi8wNC8yMiAyMjoyNDoxMiB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGludGVudGlvbiBvZiB0aGUgZGVtbyBhdCB0aGlzIHBvaW50IGluIHRpbWUgaXMgbm90IHRvIGRlbW9uc3RyYXRlIGFsbAordGhlIGZlYXR1cmVzIG9mIChuKWN1cnNlcyBhbmQgaXRzIHN1YnN5c3RlbXMsIGJ1dCB0byBnaXZlIHNvbWUgc2FtcGxlCitzb3VyY2VzIGhvdyB0byB1c2UgdGhlIGJpbmRpbmcgYXQgYWxsLgorCitJZGVhbGx5IGluIHRoZSBmdXR1cmUgd2UgY2FuIGNvbWJpbmUgYm90aCBnb2Fscy4KZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvZXhwbGFpbi50eHQgYi9BZGE5NS9zYW1wbGVzL2V4cGxhaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGY2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL2V4cGxhaW4udHh0CkBAIC0wLDAgKzEsMTg2IEBACisjVkVSU0lPTgorVGhpcyBpcyBWZXJzaW9uIDAwLjkwLjAwIG9mIHRoZSBkZW1vIHBhY2thZ2UuCisjTUVOVUtFWVMKK0luIGEgbWVudSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIEtleXMgaW4gdGhlIHdob2xlIGFwcGxpY2F0aW9uOgorCisgICAtIENUUkwtWCAgICAgICAgZVhpdCB0aGUgbWVudQorICAgLSBDVFJMLU4gICAgICAgIEdvIHRvIG5leHQgaXRlbQorICAgLSBDVFJMLVAgICAgICAgIEdvIHRvIHByZXZpb3VzIGl0ZW0KKyAgIC0gQ1RSTC1VICAgICAgICBTY3JvbGwgdXAgb25lIGxpbmUKKyAgIC0gQ1RSTC1EICAgICAgICBTY3JvbGwgZG93biBvbmUgbGluZQorICAgLSBDVFJMLUYgICAgICAgIFNjcm9sbCBkb3duIG9uZSBwYWdlCisgICAtIFBBR0UgRE9XTiAgICAgU2Nyb2xsIGRvd24gb25lIHBhZ2UKKyAgIC0gUEFHRSBVUCAgICAgICBTY3JvbGwgYmFjayBvbmUgcGFnZQorICAgLSBDVFJMLUIgICAgICAgIFNjcm9sbCBiYWNrIG9uZSBwYWdlCisgICAtIENUUkwtWSAgICAgICAgQ2xlYXIgcGF0dGVybgorICAgLSBDVFJMLUggICAgICAgIERlbGV0ZSBsYXN0IGNoYXJhY3RlciBmcm9tIHBhdHRlcm4KKyAgIC0gQmFja3NwYWNlICAgICBEZWxldGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSBwYXR0ZXJuCisgICAtIENUUkwtQSAgICAgICAgTmV4dCBwYXR0ZXJuIG1hdGNoCisgICAtIENUUkwtRSAgICAgICAgUHJldmlvdXMgcGF0dGVybiBtYXRjaAorICAgLSBDVFJMLVQgICAgICAgIFRvZ2dsZSBpdGVtIGluIGEgbXVsdGktc2VsZWN0aW9uIG1lbnUKKyAgIC0gQ1Igb3IgTEYgICAgICBTZWxlY3QgYW4gaXRlbQorICAgLSBIT01FIEtleSAgICAgIEdvIHRvIHRoZSBmaXJzdCBpdGVtCisgICAtIEYzICAgICAgICAgICAgUXVpdCB0aGUgbWVudQorICAgLSBDdXJzb3IgRG93biAgIERvd24gb25lIGl0ZW0KKyAgIC0gQ3Vyc29yIFVwICAgICBVcCBvbmUgaXRlbQorICAgLSBDdXJzb3IgTGVmdCAgIExlZnQgb25lIGl0ZW0KKyAgIC0gQ3Vyc29yIFJpZ2h0ICBSaWdodCBvbmUgaXRlbQorICAgLSBFTkQgS2V5ICAgICAgIEdvIHRvIGxhc3QgaXRlbQorI0ZPUk1LRVlTCisgICAtIENUUkwtWAkgICBlWGl0IHRoZSBmb3JtICAgICAgICAgICAgICAgICAgIAorICAgLSBDVFJMLUYJICAgR28gZm9yd2FyZCB0byB0aGUgbmV4dCBmaWVsZAorICAgLSBDVFJMLUIJICAgR28gYmFja3dhcmQgdG8gdGhlIHByZXZpb3VzIGZpZWxkCisgICAtIENUUkwtTAkgICBHbyB0byB0aGUgZmllbGQgbGVmdCBvZiB0aGUgY3VycmVudCBvbmUgICAgICAgICAgIAorICAgLSBDVFJMLVIJICAgR28gdG8gdGhlIGZpZWxkIHJpZ2h0IG9mIHRoZSBjdXJyZW50IG9uZQorICAgLSBDVFJMLVUJICAgR28gdG8gdGhlIGZpZWxkIGFib3ZlIHRoZSBjdXJyZW50IG9uZSAgCisgICAtIENUUkwtRAkgICBHbyB0byB0aGUgZmllbGQgYmVsb3cgdGhlIGN1cnJlbnQgb25lICAgICAgICAgICAKKworICAgLSBDVFJMLVcJICAgR28gdG8gdGhlIG5leHQgd29yZCBpbiB0aGUgZmllbGQgICAgICAgICAgIAorICAgLSBDVFJMLVQJICAgR28gdG8gdGhlIHByZXZpb3VzIHdvcmQgaW4gdGhlIGZpZWxkCisKKyAgIC0gQ1RSTC1BCSAgIEdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpZWxkCisgICAtIENUUkwtRQkgICBHbyB0byB0aGUgZW5kIG9mIHRoZSBmaWVsZAorCisgICAtIENUUkwtSQkgICBJbnNlcnQgYSBibGFuayBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgIC0gQ1RSTC1PCSAgIEluc2VydCBhIGxpbmUKKyAgIC0gQ1RSTC1WCSAgIERlbGV0ZSBhIGNoYXJhY3RlciAgICAgICAgICAKKyAgIC0gQ1RSTC1ICSAgIERlbGV0ZSBwcmV2aW91cyBjaGFyYWN0ZXIgICAgIAorICAgLSBDVFJMLVkJICAgRGVsZXRlIGEgbGluZSAgICAgICAgICAKKyAgIC0gQ1RSTC1HCSAgIERlbGV0ZSBhIHdvcmQgICAgICAgICAgCisgICAtIENUUkwtSwkgICBDbGVhciB0byBlbmQgb2YgZmllbGQgICAgICAgICAgCisKKyAgIC0gQ1RSTC1OCSAgIE5leHQgY2hvaWNlIGluIGEgY2hvaWNlIGZpZWxkIChFbnVtZXJhdGlvbnMgZXRjLikgICAgICAgICAKKyAgIC0gQ1RSTC1QCSAgIFByZXZpb3VzIGNob2ljZSBpbiBhIGNob2ljZSBmaWVsZC4KKyNIRUxQCisjSEVMUEtFWVMKK1lvdSBtYXkgc2Nyb2xsIHdpdGggdGhlIEN1cnNvciBVcC9Eb3duIEtleXMuCitZb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGxlZCAnUXVpdCcuCisjSU5IRUxQCitZb3UgYXJlIGFscmVhZHkgaW4gdGhlIGhlbHAgc3lzdGVtLgorWW91IG1heSBsZWF2ZSB0aGUgaGVscCB3aXRoIHRoZSBGdW5jdGlvbiBLZXkgbGFiZWxsZWQgJ1F1aXQnLgorI01BSU4KK1RoaXMgaXMgdGhlIG1haW4gbWVudSBvZiB0aGUgc2FtcGxlIHByb2dyYW0gZm9yIHRoZSBuY3Vyc2VzIEFkYTk1CitiaW5kaW5nLiBUaGUgbWFpbiBpbnRlbnRpb24gb2YgdGhlIGRlbW8gaXMgbm90IHRvIGRlbW9uc3RhdGUgb3IKK3Rlc3QgYWxsIHRoZSBmZWF0dXJlcyBvZiBuY3Vyc2VzIGFuZCBpdCdzIHN1YnN5c3RlbXMsIGJ1dCB0byBwcm92aWRlCit0byB5b3Ugc29tZSBzYW1wbGUgY29kZSBob3cgdG8gdXNlIHRoZSBiaW5kaW5nIHdpdGggQWRhOTUuIAorCitZb3UgbWF5IHNlbGVjdCB0aGlzIG9wdGlvbnM6CisKKyAgICogTG9vayBhdCBzb21lIG5jdXJzZXMgY29yZSBmdW5jdGlvbnMKKyAgICogTG9vayBhdCBzb21lIGZlYXR1cmVzIG9mIHRoZSBtZW51IHN1YnN5c3RlbQorICAgKiBMb29rIGF0IHNvbWUgZmVhdHVyZXMgb2YgdGhlIGZvcm0gc3Vic3lzdGVtCisgICAqIExvb2sgYXQgdGhlIG91dHB1dCBvZiB0aGUgQWRhLlRleHRfSU8gbGlrZSBmdW5jdGlvbnMKKyAgICAgZm9yIG5jdXJzZXMuCisgICAKKyNNQUlOUEFECitZb3UgbWF5IHByZXNzIGF0IGFueSBwbGFjZSBpbiB0aGlzIGRlbW8gQ1RSTC1DLiBUaGlzIHdpbGwgZ2l2ZSB5b3UgYSBjb21tYW5kCit3aW5kb3cuIFlvdSBjYW4ganVzdCB0eXBlIGluIHRoZSBMYWJlbC1TdHJpbmcgb2YgYSBmdW5jdGlvbiBrZXksIHRoZW4gdGhpcwora2V5IHdpbGwgYmUgc2ltdWxhdGVkLiBUaGlzIHNob3VsZCBoZWxwIHlvdSB0byBydW4gdGhlIGFwcGxpY2F0aW9uIGV2ZW4gaWYKK3lvdSBydW4gaXQgb24gYSB0ZXJtaW5hbCB3aXRoIG5vIG9yIG9ubHkgYSBmZXcgZnVuY3Rpb24ga2V5cy4gV2l0aCBDVFJMLU4KK2FuZCBDVFJMLVAgeW91IG1heSBicm93c2UgdGhyb3VnaCB0aGUgcG9zc2libGUgdmFsdWVzIGluIHRoZSBjb21tYW5kIHdpbmRvdy4KKyNNRU5VMDAKK0hlcmUgd2UgZ2l2ZSB5b3UgYSBzZWxlY3Rpb24gb2YgdmFyaW91cyBtZW51IGRlbW9uc3RyYXRpb25zLgorI01FTlUtUEFEMDAKK1RoaXMgbWVudSBpdHNlbGYgaXMgYSBkZW1vIGZvciBhIHNpbmdsZSB2YWx1ZWQsIDEtY29sdW1uIG1lbnUgd2l0aAorZGVzY3JpcHRpb25zIGZvciB0aGUgaXRlbXMsIGEgbWFya2VyIGFuZCBhIHBhZGRpbmcgY2hhcmFjdGVyIGJldHdlZW4KK3RoZSBpdGVtIG5hbWUgYW5kIHRoZSBkZXNjcmlwdGlvbi4KKyNNRU5VMDEKK1RoaXMgaXMgYSBkZW1vIG9mIHRoZSBzb21lIG9mIHRoZSBtZW51IGxheW91dCBvcHRpb25zLiBPbmUgb2YgdGhlbQoraXMgdGhlIHNwYWNpbmcgZnVuY3Rpb25hbGl0eS4gSnVzdCBwcmVzcyB0aGUgS2V5IGxhYmVsbGVkICJGbGlwIiB0byAKK2ZsaXAgYmV0d2VlbiB0aGUgbm9uLXNwYWNlZCBhbmQgYSBzcGFjZWQgdmVyc2lvbiBvZiB0aGUgbWVudS4gUGxlYXNlCitub3RlIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuaXF1ZSBmb3IgbmN1cnNlcyBhbmQgaXMgbm90IGZvdW5kIAoraW4gdGhlIFNWcjQgbWVudSBpbXBsZW1lbnRhdGlvbi4gCisKK1RoaXMgaXMgYSBtZW51IHRoYXQgc29tZXRpbWVzIGRvZXNuJ3QgZml0IGludG8gaXQncyB3aW5kb3cgYW5kIAordGhlcmVmb3JlIGl0IGJlY29tZXMgYSBzY3JvbGwgbWVudS4gCisKK1lvdSBjYW4gYWxzbyBzZWUgaGVyZSB2ZXJ5IG5pY2VseSB0aGUgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbmFsaXR5CitvZiBtZW51cy4gVHlwZSBmb3IgZXhhbXBsZSBhICdKJyBhbmQgeW91IHdpbGwgYmUgcG9zaXRpb25lZCB0byB0aGUKK25leHQgaXRlbSBhZnRlciB0aGUgY3VycmVudCBzdGFydGluZyB3aXRoIGEgJ0onLiBBbnkgbW9yZSBjaGFyYWN0ZXJzCit5b3UgdHlwZSBpbiBtYWtlIHRoZSBwYXR0ZXJuIG1vcmUgc3BlY2lmaWMuIFdpdGggQ1RSTC1BIGFuZCBDVFJMLVoKKyhmb3IgbW9yZSBkZXRhaWxzIHByZXNzIHRoZSBLZXkgbGFiZWxsZWQgIktleXMiKSB5b3UgY2FuIGJyb3dzZQordGhyb3VnaCBhbGwgdGhlIGl0ZW1zIG1hdGNoaW5nIHRoZSBwYXR0ZXJuLgorCitZb3UgbWF5IGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBtZW51LiBKdXN0IHByZXNzIG9uZSBvZiB0aGUga2V5cworbGFiZWxsZWQgIjR4MSIsICI0eDIiIG9yICI0eDMiIHRvIGdldCBhIG1lbnUgd2l0aCB0aGF0IG1hbnkgcm93cworYW5kIGNvbHVtbnMuCisKK1dpdGggdGhlIEtleXMgIk8tUm93IiBvciAiTy1Db2wiICh0aGV5IG9jY3VweSB0aGUgc2FtZSBsYWJlbCBhbmQKK3N3aXRjaCBvbiBzZWxlY3Rpb24pIHlvdSBjYW4gY2hhbmdlIHRoZSBtYWpvciBvcmRlciBzY2hlbWUgZm9yIAordGhlIG1lbnUuIElmICJPLUNvbCIgaXMgdmlzaWJsZSwgdGhlIG1lbnUgaXMgY3VycmVudGx5IG1ham9yCitvcmRlcmVkIGJ5IHJvd3MsIHlvdSBjYW4gc3dpdGNoIHRvIG1ham9yIGNvbHVtbiBvcmRlciBieSBwcmVzc2luZwordGhlIGtleS4gSWYgIk8tUm93IiBpcyB2aXNpYmxlLCBpdCdzIGp1c3QgdGhlIHJldmVyc2Ugc2l0dWF0aW9uLgorVGhpcyBLZXkgaXMgbm90IHZpc2libGUgaW4gIjR4MSIgbGF5b3V0IG1vZGUsIGJlY2F1c2UgaW4gdGhpcyBjYXNlCit0aGUgZnVuY3Rpb25hbGl0eSBtYWtlcyBubyBzZW5zZS4KKworV2l0aCB0aGUgS2V5cyAiTXVsdGkiIG9yICJTaW5nbCIgKHRoZXkgb2NjdXB5IHRoZSBzYW1lIGxhYmVsIGFuZAorc3dpdGNoIG9uIHNlbGVjdGlvbikgeW91IGNhbiBjaGFuZ2Ugd2hldGhlciBvciBub3QgdGhlIG1lbnUgYWxsb3dzCittdWx0aXBsZSBvciBvbmx5IHNpbmdsZSBzZWxlY3Rpb24uCisKK1dpdGggdGhlIEtleXMgIitEZXNjIiBvciAiLURlc2MiICh0aGV5IG9jY3VweSB0aGUgc2FtZSBsYWJlbCBhbmQKK3N3aXRjaCBvbiBzZWxlY3Rpb24pIHlvdSBjYW4gY2hhbmdlIHdoZXRoZXIgb3Igbm90IHRoZSBkZXNjcmlwdGlvbnMKK2ZvciBlYWNoIGl0ZW0gc2hvdWxkIGJlIGRpc3BsYXllZC4gUGxlYXNlIG5vdCB0aGF0IHRoaXMga2V5IGlzCitub3QgdmlzaWJsZSBpbiB0aGUgIjR4MyIgbGF5b3V0IG1vZGUsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHRoZQorbWVudSB3b3VsZG4ndCBmaXQgb24gYSB0eXBpY2FsbCA4MHgyNCBzY3JlZW4uCisKK1dpdGggdGhlIEtleXMgIkRpc2FiIiBvciAiRW5hYiIgKHRoZXkgb2NjdXB5IHRoZSBzYW1lIGxhYmVsIGFuZAorc3dpdGNoIG9uIHNlbGVjdGlvbikgeW91IGNhbiBkaXMtIG9yIGVuYWJsZSB0aGUgc2VsZWN0YWJpbGl0eSBvZgordGhlIG1vbnRoIHdpdGggMzEgZGF5cy4KKyNNRU5VLVBBRDAxCitZb3UgbWF5IHByZXNzICJGbGlwIiB0byBzZWUgdGhlIGVmZmVjdCBvZiBuY3Vyc2VzIHVuaXF1ZSBtZW51LXNwYWNpbmcuCitUaGUgS2V5cyAiNHgxIiwgIjR4MiIgYW5kICI0eDMiIHdpbGwgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIG1lbnUuCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYSBzY3JvbGxpbmcgbWVudS4gWW91IG1heSBhbHNvIHBsYXkgd2l0aCB0aGUKK3BhdHRlcm4gbWF0Y2hpbmcgZnVuY3Rpb25hbGl0eSBvciB0cnkgdG8gY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIG1lbnUuCitGb3IgbW9yZSBkZXRhaWxzIHByZXNzIHRoZSBLZXkgbGFiZWxsZWQgIkhlbHAiLgorI0ZPUk0wMAorVGhpcyBpcyBhIGRlbW8gb2YgdGhlIGZvcm1zIHBhY2thZ2UuCisjRk9STS1QQUQwMAorUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRlbW8gaXMgZmFyIGZyb20gYmVpbmcgY29tcGxldGUuIEl0IHJlYWxseSBzaG93cworb25seSBhIHNtYWxsIHBhcnQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvcm1zIHBhY2thZ2UuIExldCdzIGhvcGUgCit0aGUgbmV4dCB2ZXJzaW9uIHdpbGwgaGF2ZSBhIHJpY2hlciBkZW1vIChZb3Ugd2FuJ3QgdG8gY29udHJpYnV0ZSA/KS4KKyNOT1RJTVBMCitTb3JyeSB0aGlzIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRlbW8gaXMgbm90IGltcGxlbWVudGVkIGF0IHRoZSBtb21lbnQuCitSZW1lbWJlciB0aGlzIGlzIGEgZnJlZXdhcmUgcHJvamVjdCwgc28gSSBjYW4gdXNlIG9ubHkgbXkgdmVyeSByYXJlCitmcmVlIHRpbWUgdG8gY29udGludWUgY29kaW5nLiBJZiB5b3Ugd291bGQgbGlrZSB0byBjb250cmlidXRlLCB5b3UKK2FyZSB2ZXJ5IHdlbGNvbWUgIQorI0NVUlNFUzAwCitUaGlzIGlzIGEgbWVudSB3aGVyZSB5b3UgY2FuIHNlbGVjdCBzb21lIGRpZmZlcmVudCBkZW1vcyBvZiB0aGUgbmN1cnNlcworZnVuY3Rpb25hbGl0eS4KKyNDVVJTRVMtUEFEMDAKK1BsZWFzZSBub3RlIHRoYXQgdGhpcyBkZW1vIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiBJdCByZWFsbHkgc2hvd3MKK29ubHkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjdXJzZXMgcGFja2FnZS4gTGV0J3MgaG9wZSAKK3RoZSBuZXh0IHZlcnNpb24gd2lsbCBoYXZlIGEgcmljaGVyIGRlbW8gKFlvdSB3YW4ndCB0byBjb250cmlidXRlID8pLgorI01PVVNFS0VZUworSW4gdGhpcyBkZW1vIHlvdSBtYXkgdXNlIHRoaXMga2V5czoKKworICAgLSBLZXkgbGFiZWxsZWQgIkhlbHAiICB0byBnZXQgYSBoZWxwCisgICAtIEtleSBsYWJlbGxlZCAiS2V5cyIgIGlzIHdoYXQgeW91IGFyZSByZWFkaW5nIG5vdworICAgLSBLZXkgbGFiZWxsZWQgIlF1aXQiICB0byBsZWF2ZSB0aGUgZGVtbworCitZb3UgbWF5IGNsaWNrIHRoZSBtb3VzZSBidXR0b25zIGF0IGFueSBsb2NhdGlvbiBhdCB0aGUgc2NyZWVuIGFuZCBsb29rCithdCB0aGUgcHJvdG9jb2wgd2luZG93ICEKKyNNT1VTRTAwCitBIHJhdGhlciBzaW1wbGUgdXNlIG9mIGEgbW91c2UgYXMgZGVtby4gSXQncyB0aGVyZSBqdXN0IHRvIHRlc3QgdGhlCitjb2RlIGFuZCB0byBwcm92aWRlIHRoZSBzYW1wbGUgc291cmNlLiAKKworSXQgbWlnaHQgYmUgb2YgaW50ZXJlc3QsIHRoYXQgdGhlIG91dHB1dCBpbnRvIHRoZSBwcm90b2NvbCB3aW5kb3cgaXMKK2RvbmUgYnkgdGhlIChuKWN1cnNlcyBUZXh0X0lPIHN1YnBhY2thZ2VzLiBFc3BlY2lhbGx5IHRoZSBvdXRwdXQgb2YKK3RoZSBidXR0b24gYW5kIHN0YXRlIG5hbWVzIGlzIGRvbmUgYnkgQWRzJ3MgZW51bWVyYXRpb24gSU8sIHdoaWNoIAorYWxsb3dzIHlvdSB0byBwcmludCB0aGUgbmFtZXMgb2YgZW51bWVyYXRpb24gbGl0ZXJhbHMuIFRoYXQncyByZWFsbHkKK25pY2UuCisjTU9VU0UtUEFEMDAKK1RoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBkZW1vIG9mIHRoZSBtb3VzZSBmZWF0dXJlcyBvZiBuY3Vyc2VzLiBJdCdzIHRoZXJlCitqdXN0IHRvIHRlc3Qgd2hldGhlciBvciBub3QgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgYmluZGluZyByZWFsbHkKK3dvcmtzIG9uIHRoZSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyAoc2VlbXMgc28pLgorI0FUVFJJQkRFTU8KK0FnYWluIHRoaXMgaXMgYSBtb3JlIHRoYW4gc2ltcGxlIGRlbW8gYW5kIGp1c3QgaGVyZSB0byBnaXZlIHlvdSB0aGUKK3NvdXJjZWNvZGUuCisjQVRUUklCS0VZUworWW91IG1heSBwcmVzcyBvbmUgb2YgdGhlIHRocmVlIHdlbGwga25vd24gc3RhbmRhcmQga2V5cyBvZiB0aGlzIGRlbW8uCisjQVRUUklCLVBBRDAwCitBZ2FpbiB0aGlzIGlzIGEgbW9yZSB0aGFuIHNpbXBsZSBkZW1vIGFuZCBqdXN0IGhlcmUgdG8gZ2l2ZSB5b3UgdGhlCitzb3VyY2Vjb2RlLiBGZWVsIGZyZWUgdG8gY29udHJpYnV0ZSBtb3JlLgorI1RFWFRJTworI1RFWFRJT0tFWVMKKyNURVhUSU8tUEFEMDAKKyNFTkQKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlcy5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjY1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMuYWRiCkBAIC0wLDAgKzEsNDcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIubTsgdXNlIG5jdXJzZXMyLm07Cit3aXRoIEdOQVQuT1NfTGliOyB1c2UgR05BVC5PU19MaWI7CisKK3Byb2NlZHVyZSBuY3Vyc2VzIGlzCitiZWdpbgorICAgT1NfRXhpdCAobWFpbik7CitlbmQgbmN1cnNlczsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfYW5kX3Njcm9sbC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiMmQ5MQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCkBAIC0wLDAgKzEsNzE2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjggJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ3OjQyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFdpbmRvd3MgYW5kIHNjcm9sbGluZyB0ZXN0ZXIuCistLSAgRGVtb25zdHJhdGUgd2luZG93cworCit3aXRoIEFkYS5TdHJpbmdzLkZpeGVkOword2l0aCBBZGEuU3RyaW5nczsKKword2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggbmN1cnNlczIuZ2VuZXJpY1B1dHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QdXRXaW47IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbjsKKword2l0aCBBZGEuU3RyZWFtcy5TdHJlYW1fSU87IHVzZSBBZGEuU3RyZWFtcy5TdHJlYW1fSU87Cit3aXRoIEFkYS5TdHJlYW1zOyB1c2UgQWRhLlN0cmVhbXM7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5hY3NfYW5kX3Njcm9sbCBpcworCisgICBNYWNyb19RdWl0ICAgOiBjb25zdGFudCBLZXlfQ29kZSA6PSBDaGFyYWN0ZXInUG9zICgnUScpIG1vZCAxNiMyMCM7CisgICBNYWNyb19Fc2NhcGUgOiBjb25zdGFudCBLZXlfQ29kZSA6PSBDaGFyYWN0ZXInUG9zICgnWycpIG1vZCAxNiMyMCM7CisKKyAgIFF1aXQgOiBjb25zdGFudCBLZXlfQ29kZSA6PSBDVFJMICgnUScpOworICAgRXNjYXBlIDogY29uc3RhbnQgS2V5X0NvZGUgOj0gQ1RSTCAoJ1snKTsKKworICAgQm90bGluZXMgOiBjb25zdGFudCBMaW5lX1Bvc2l0aW9uIDo9IDQ7CisKKyAgIHR5cGUgcGFpciBpcyByZWNvcmQKKyAgICAgIHkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgeCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgIGVuZCByZWNvcmQ7CisKKyAgIHR5cGUgRnJhbWU7CisgICB0eXBlIEZyYW1lQSBpcyBhY2Nlc3MgRnJhbWU7CisKKyAgIGYgOiBGaWxlX1R5cGU7CisgICBkdW1wZmlsZSA6IGNvbnN0YW50IFN0cmluZyA6PSAic2NyZWVuZHVtcCI7CisKKyAgIHByb2NlZHVyZSBPdXRlcmJveCAodWwsIGxyIDogcGFpcjsgb25vZmYgOiBCb29sZWFuKTsKKyAgIGZ1bmN0aW9uICBIYXZlS2V5UGFkICh3IDogV2luZG93KSByZXR1cm4gQm9vbGVhbjsKKyAgIGZ1bmN0aW9uICBIYXZlU2Nyb2xsICh3IDogV2luZG93KSByZXR1cm4gQm9vbGVhbjsKKyAgIHByb2NlZHVyZSBuZXd3aW5fbGVnZW5kIChjdXJwdyA6IFdpbmRvdyk7CisgICBwcm9jZWR1cmUgdHJhbnNpZW50IChjdXJwdyA6IFdpbmRvdzsgbXNnIDogU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBuZXd3aW5fcmVwb3J0ICh3aW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIHByb2NlZHVyZSBzZWxlY3RjZWxsICh1bGkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgIHVsaiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBscmkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgIGxyaiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwICAgOiBvdXQgcGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBiICAgOiBvdXQgQm9vbGVhbik7CisgICBmdW5jdGlvbiAgZ2V0d2luZG93IHJldHVybiBXaW5kb3c7CisgICBwcm9jZWR1cmUgbmV3d2luX21vdmUgKHdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHkgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHggIDogQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIGZ1bmN0aW9uIGRlbGV0ZV9mcmFtZWQgKGZwIDogRnJhbWVBOyBzaG93aXQgOiBCb29sZWFuKSByZXR1cm4gRnJhbWVBOworCisgICB1c2UgQWRhLlN0cmVhbXMuU3RyZWFtX0lPOworCisgICAtLSAgQSBsaW5rZWQgbGlzdAorICAgLS0gIEkgIHdpc2ggdGhlcmUgd2FzIGEgc3RhbmRhcmQgbGlicmFyeSBsaW5rZWQgbGlzdC4gT2ggd2VsbC4KKyAgIHR5cGUgRnJhbWUgaXMgcmVjb3JkCisgICAgICBuZXh0LCBsYXN0IDogRnJhbWVBOworICAgICAgZG9fc2Nyb2xsIDogQm9vbGVhbjsKKyAgICAgIGRvX2tleXBhZCA6IEJvb2xlYW47CisgICAgICB3aW5kIDogV2luZG93OworICAgZW5kIHJlY29yZDsKKworICAgY3VycmVudCA6IEZyYW1lQTsKKworICAgYyA6IEtleV9Db2RlOworCisgICBwcm9jZWR1cmUgT3V0ZXJib3ggKHVsLCBsciA6IHBhaXI7IG9ub2ZmIDogQm9vbGVhbikgaXMKKyAgIGJlZ2luCisgICAgICBpZiBvbm9mZiB0aGVuCisgICAgICAgICAtLSAgTm90ZSB0aGUgZml4IG9mIGFuIG9ic2N1cmUgYnVnCisgICAgICAgICAtLSAgdHJ5IG1ha2luZyBhIDF4MSBib3ggdGhlbiBlbmxhcmdpbmcgaXQsIHRoZSBpcyBhIGJsYW5rCisgICAgICAgICAtLSAgdXBwZXIgbGVmdCBjb3JuZXIhCisgICAgICAgICBBZGQgKExpbmUgPT4gdWwueSAtIDEsIENvbHVtbiA9PiB1bC54IC0gMSwKKyAgICAgICAgICAgICBDaCA9PiBBQ1NfTWFwIChBQ1NfVXBwZXJfTGVmdF9Db3JuZXIpKTsKKyAgICAgICAgIEFkZCAoTGluZSA9PiB1bC55IC0gMSwgQ29sdW1uID0+IGxyLnggKyAxLAorICAgICAgICAgICAgIENoID0+IEFDU19NYXAgKEFDU19VcHBlcl9SaWdodF9Db3JuZXIpKTsKKyAgICAgICAgIEFkZCAoTGluZSA9PiBsci55ICsgMSwgQ29sdW1uID0+IGxyLnggKyAxLAorICAgICAgICAgICAgIENoID0+IEFDU19NYXAgKEFDU19Mb3dlcl9SaWdodF9Db3JuZXIpKTsKKyAgICAgICAgIEFkZCAoTGluZSA9PiBsci55ICsgMSwgQ29sdW1uID0+IHVsLnggLSAxLAorICAgICAgICAgICAgIENoID0+IEFDU19NYXAgKEFDU19Mb3dlcl9MZWZ0X0Nvcm5lcikpOworCisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB1bC55IC0gMSwgQ29sdW1uID0+IHVsLngpOworICAgICAgICAgSG9yaXpvbnRhbF9MaW5lIChMaW5lX1N5bWJvbCA9PiBBQ1NfTWFwIChBQ1NfSG9yaXpvbnRhbF9MaW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnggLSB1bC54KSArIDEpOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gdWwueSwgQ29sdW1uID0+IHVsLnggLSAxKTsKKyAgICAgICAgIFZlcnRpY2FsX0xpbmUgKExpbmVfU3ltYm9sID0+IEFDU19NYXAgKEFDU19WZXJ0aWNhbF9MaW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbmVfU2l6ZSA9PiBJbnRlZ2VyIChsci55IC0gdWwueSkgKyAxKTsKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IGxyLnkgKyAxLCBDb2x1bW4gPT4gdWwueCk7CisgICAgICAgICBIb3Jpem9udGFsX0xpbmUgKExpbmVfU3ltYm9sID0+IEFDU19NYXAgKEFDU19Ib3Jpem9udGFsX0xpbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lX1NpemUgPT4gSW50ZWdlciAobHIueCAtIHVsLngpICsgMSk7CisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB1bC55LCBDb2x1bW4gPT4gbHIueCArIDEpOworICAgICAgICAgVmVydGljYWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQUNTX01hcCAoQUNTX1ZlcnRpY2FsX0xpbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnkgLSB1bC55KSArIDEpOworICAgICAgZWxzZQorICAgICAgICAgQWRkIChMaW5lID0+IHVsLnkgLSAxLCBDb2x1bW4gPT4gdWwueCAtIDEsIENoID0+ICcgJyk7CisgICAgICAgICBBZGQgKExpbmUgPT4gdWwueSAtIDEsIENvbHVtbiA9PiBsci54ICsgMSwgQ2ggPT4gJyAnKTsKKyAgICAgICAgIEFkZCAoTGluZSA9PiBsci55ICsgMSwgQ29sdW1uID0+IGxyLnggKyAxLCBDaCA9PiAnICcpOworICAgICAgICAgQWRkIChMaW5lID0+IGxyLnkgKyAxLCBDb2x1bW4gPT4gdWwueCAtIDEsIENoID0+ICcgJyk7CisKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHVsLnkgLSAxLCBDb2x1bW4gPT4gdWwueCk7CisgICAgICAgICBIb3Jpem9udGFsX0xpbmUgKExpbmVfU3ltYm9sID0+IEJsYW5rMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnggLSB1bC54KSArIDEpOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gdWwueSwgQ29sdW1uID0+IHVsLnggLSAxKTsKKyAgICAgICAgIFZlcnRpY2FsX0xpbmUgKExpbmVfU3ltYm9sID0+IEJsYW5rMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbmVfU2l6ZSA9PiBJbnRlZ2VyIChsci55IC0gdWwueSkgKyAxKTsKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IGxyLnkgKyAxLCBDb2x1bW4gPT4gdWwueCk7CisgICAgICAgICBIb3Jpem9udGFsX0xpbmUgKExpbmVfU3ltYm9sID0+IEJsYW5rMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnggLSB1bC54KSArIDEpOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gdWwueSwgQ29sdW1uID0+IGxyLnggKyAxKTsKKyAgICAgICAgIFZlcnRpY2FsX0xpbmUgKExpbmVfU3ltYm9sID0+IEJsYW5rMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbmVfU2l6ZSA9PiBJbnRlZ2VyIChsci55IC0gdWwueSkgKyAxKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBPdXRlcmJveDsKKworICAgZnVuY3Rpb24gSGF2ZUtleVBhZCAodyA6IFdpbmRvdykgcmV0dXJuIEJvb2xlYW4gaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gR2V0X0tleVBhZF9Nb2RlICh3KTsKKyAgIGV4Y2VwdGlvbgorICAgICAgd2hlbiBDdXJzZXNfRXhjZXB0aW9uID0+IHJldHVybiBGYWxzZTsKKyAgIGVuZCBIYXZlS2V5UGFkOworCisgICBmdW5jdGlvbiBIYXZlU2Nyb2xsICh3IDogV2luZG93KSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBTY3JvbGxpbmdfQWxsb3dlZCAodyk7CisgICBleGNlcHRpb24KKyAgICAgIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiByZXR1cm4gRmFsc2U7CisgICBlbmQgSGF2ZVNjcm9sbDsKKworICAgcHJvY2VkdXJlIG5ld3dpbl9sZWdlbmQgKGN1cnB3IDogV2luZG93KSBpcworCisgICAgICBwYWNrYWdlIHAgaXMgbmV3IGdlbmVyaWNQdXRzICgyMDApOworICAgICAgdXNlIHA7CisgICAgICB1c2UgcC5CUzsKKworICAgICAgdHlwZSBzdHJpbmdfYSBpcyBhY2Nlc3MgU3RyaW5nOworCisgICAgICB0eXBlIHJyciBpcyByZWNvcmQKKyAgICAgICAgIG1zZyA6IHN0cmluZ19hOworICAgICAgICAgY29kZSA6IEludGVnZXIgcmFuZ2UgMCAuLiAzOworICAgICAgZW5kIHJlY29yZDsKKworICAgICAgbGVnZW5kIDogY29uc3RhbnQgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBycnIgOj0KKyAgICAgICAgKAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeQyA9IGNyZWF0ZSB3aW5kb3ciKSwgMAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5OID0gbmV4dCB3aW5kb3ciKSwgMAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5QID0gcHJldmlvdXMgd2luZG93IiksIDAKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeRiA9IHNjcm9sbCBmb3J3YXJkIiksIDAKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeQiA9IHNjcm9sbCBiYWNrd2FyZCIpLCAwCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBuZXcgU3RyaW5nJygiXksgPSBrZXlwYWQoJXMpIiksIDEKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeUyA9IHNjcm9sbG9rKCVzKSIpLCAyCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBuZXcgU3RyaW5nJygiXlcgPSBzYXZlIHdpbmRvdyB0byBmaWxlIiksIDAKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeUiA9IHJlc3RvcmUgd2luZG93IiksIDAKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeWCA9IHJlc2l6ZSIpLCAwCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBuZXcgU3RyaW5nJygiXlElcyA9IGV4aXQiKSwgMworICAgICAgICAgICkKKyAgICAgICAgICk7CisKKyAgICAgIGJ1ZiA6IEJvdW5kZWRfU3RyaW5nOworICAgICAgZG9fa2V5cGFkIDogY29uc3RhbnQgQm9vbGVhbiA6PSBIYXZlS2V5UGFkIChjdXJwdyk7CisgICAgICBkb19zY3JvbGwgOiBjb25zdGFudCBCb29sZWFuIDo9IEhhdmVTY3JvbGwgKGN1cnB3KTsKKworICAgICAgcG9zIDogTmF0dXJhbDsKKworICAgICAgbXlwYWlyIDogcGFpcjsKKworICAgICAgdXNlIEFkYS5TdHJpbmdzLkZpeGVkOworCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSA0LCBDb2x1bW4gPT4gMCk7CisgICAgICBmb3IgbiBpbiBsZWdlbmQnUmFuZ2UgbG9vcAorICAgICAgICAgcG9zIDo9IEFkYS5TdHJpbmdzLkZpeGVkLkluZGV4IChTb3VyY2UgPT4gbGVnZW5kIChuKS5tc2cuYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuID0+ICIlcyIpOworICAgICAgICAgLS0gIGJ1ZiA6PSAob3RoZXJzID0+ICcgJyk7CisgICAgICAgICBidWYgOj0gVG9fQm91bmRlZF9TdHJpbmcgKGxlZ2VuZCAobikubXNnLmFsbCk7CisgICAgICAgICBjYXNlIGxlZ2VuZCAobikuY29kZSBpcworICAgICAgICAgICAgd2hlbiAwID0+IG51bGw7CisgICAgICAgICAgICB3aGVuIDEgPT4KKyAgICAgICAgICAgICAgIGlmIGRvX2tleXBhZCB0aGVuCisgICAgICAgICAgICAgICAgICBSZXBsYWNlX1NsaWNlIChidWYsIHBvcywgcG9zICsgMSwgInllcyIpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgUmVwbGFjZV9TbGljZSAoYnVmLCBwb3MsIHBvcyArIDEsICJubyIpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgd2hlbiAyID0+CisgICAgICAgICAgICAgICBpZiBkb19zY3JvbGwgdGhlbgorICAgICAgICAgICAgICAgICAgUmVwbGFjZV9TbGljZSAoYnVmLCBwb3MsIHBvcyArIDEsICJ5ZXMiKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIFJlcGxhY2VfU2xpY2UgKGJ1ZiwgcG9zLCBwb3MgKyAxLCAibm8iKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIHdoZW4gMyA9PgorICAgICAgICAgICAgICAgaWYgZG9fa2V5cGFkIHRoZW4KKyAgICAgICAgICAgICAgICAgIFJlcGxhY2VfU2xpY2UgKGJ1ZiwgcG9zLCBwb3MgKyAxLCAiL0VTQyIpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgUmVwbGFjZV9TbGljZSAoYnVmLCBwb3MsIHBvcyArIDEsICIiKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoTGluZSA9PiBteXBhaXIueSwgQ29sdW1uID0+IG15cGFpci54KTsKKyAgICAgICAgIGlmIENvbHVtbnMgPCBteXBhaXIueCArIDMgKyBDb2x1bW5fUG9zaXRpb24gKExlbmd0aCAoYnVmKSkgdGhlbgorICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgIGVsc2lmIG4gLz0gMSB0aGVuIC0tIG4gLz0gbGVnZW4nRmlyc3QKKyAgICAgICAgICAgIEFkZCAoU3RyID0+ICIsICIpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgbXlBZGQgKFN0ciA9PiBidWYpOworICAgICAgZW5kIGxvb3A7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgIGVuZCBuZXd3aW5fbGVnZW5kOworCisgICBwcm9jZWR1cmUgdHJhbnNpZW50IChjdXJwdyA6IFdpbmRvdzsgbXNnIDogU3RyaW5nKSBpcworICAgYmVnaW4KKyAgICAgIG5ld3dpbl9sZWdlbmQgKGN1cnB3KTsKKyAgICAgIGlmIG1zZyAvPSAiIiB0aGVuCisgICAgICAgICBBZGQgKExpbmUgPT4gTGluZXMgLSAxLCBDb2x1bW4gPT4gMCwgU3RyID0+IG1zZyk7CisgICAgICAgICBSZWZyZXNoOworICAgICAgICAgTmFwX01pbGxpX1NlY29uZHMgKDEwMDApOworICAgICAgZW5kIGlmOworCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lcyAtIDEsIENvbHVtbiA9PiAwKTsKKworICAgICAgaWYgSGF2ZUtleVBhZCAoY3VycHcpIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+ICJOb24tYXJyb3ciKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEFkZCAoU3RyID0+ICJBbGwgb3RoZXIiKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFkZCAoc3RyID0+ICIgY2hhcmFjdGVycyBhcmUgZWNob2VkLCB3aW5kb3cgc2hvdWxkICIpOworICAgICAgaWYgbm90IEhhdmVTY3JvbGwgKGN1cnB3KSB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiAibm90ICIpOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChzdHIgPT4gInNjcm9sbCIpOworCisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgIGVuZCB0cmFuc2llbnQ7CisKKyAgIHByb2NlZHVyZSBuZXd3aW5fcmVwb3J0ICh3aW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSBpcworICAgICAgeSA6IExpbmVfUG9zaXRpb247CisgICAgICB4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgdXNlIEludF9JTzsKKyAgICAgIHRtcDJhIDogU3RyaW5nICgxIC4uIDIpOworICAgICAgdG1wMmIgOiBTdHJpbmcgKDEgLi4gMik7CisgICBiZWdpbgorICAgICAgaWYgd2luIC89IFN0YW5kYXJkX1dpbmRvdyB0aGVuCisgICAgICAgICB0cmFuc2llbnQgKHdpbiwgIiIpOworICAgICAgZW5kIGlmOworICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAod2luLCB5LCB4KTsKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMSwgQ29sdW1uID0+IENvbHVtbnMgLSAxNyk7CisgICAgICBQdXQgKHRtcDJhLCBJbnRlZ2VyICh5KSk7CisgICAgICBQdXQgKHRtcDJiLCBJbnRlZ2VyICh4KSk7CisgICAgICBBZGQgKFN0ciA9PiAiWSA9ICIgJiB0bXAyYSAmICIgWCA9ICIgJiB0bXAyYik7CisgICAgICBpZiB3aW4gLz0gU3RhbmRhcmRfV2luZG93IHRoZW4KKyAgICAgICAgIFJlZnJlc2g7CisgICAgICBlbHNlCisgICAgICAgICBNb3ZlX0N1cnNvciAod2luLCB5LCB4KTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBuZXd3aW5fcmVwb3J0OworCisgICBwcm9jZWR1cmUgc2VsZWN0Y2VsbCAodWxpIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bGogOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgbHJpIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBscmogOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgcCAgIDogb3V0IHBhaXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgYiAgIDogb3V0IEJvb2xlYW4pIGlzCisgICAgICBjIDogS2V5X0NvZGU7CisgICAgICByZXMgOiBwYWlyOworICAgICAgaSA6IExpbmVfUG9zaXRpb24gOj0gMDsKKyAgICAgIGogOiBDb2x1bW5fUG9zaXRpb24gOj0gMDsKKyAgICAgIHNpIDogY29uc3RhbnQgTGluZV9Qb3NpdGlvbiA6PSBscmkgLSB1bGkgKyAxOworICAgICAgc2ogOiBjb25zdGFudCBDb2x1bW5fUG9zaXRpb24gOj0gbHJqIC0gdWxqICsgMTsKKyAgIGJlZ2luCisgICAgICByZXMueSA6PSB1bGk7CisgICAgICByZXMueCA6PSB1bGo7CisgICAgICBsb29wCisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB1bGkgKyBpLCBDb2x1bW4gPT4gdWxqICsgaik7CisgICAgICAgICBuZXd3aW5fcmVwb3J0OworCisgICAgICAgICBjIDo9IEdldGNoYXI7CisgICAgICAgICBjYXNlIGMgaXMKKyAgICAgICAgICAgIHdoZW4KKyAgICAgICAgICAgICAgTWFjcm9fUXVpdCAgIHwKKyAgICAgICAgICAgICAgTWFjcm9fRXNjYXBlID0+CisgICAgICAgICAgICAgICAtLSAgb24gdGhlIHNhbWUgbGluZSBtYWNybyBjYWxscyBpbnRlcmZlcmUgZHVlIHRvIHRoZSAjIGNvbW1lbnQKKyAgICAgICAgICAgICAgIC0tICB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIGtleXBhZCBvZmYgYWZmZWN0cyBhbGwgd2luZG93cy4KKyAgICAgICAgICAgICAgIC0tICB0cnkgcmVtb3ZpbmcgdGhlIEVTQ0FQRSBhbmQgc2VlIHdoYXQgaGFwcGVucy4KKyAgICAgICAgICAgICAgIGIgOj0gRmFsc2U7CisgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB3aGVuIEtFWV9VUCA9PgorICAgICAgICAgICAgICAgaSA6PSBpICsgc2kgLSAxOworICAgICAgICAgICAgICAgLS0gIHNhbWUgYXMgIGkgOj0gaSAtIDEgYmVjYXVzZSBvZiBNb2R1bHVzIGFyaXRoZXRpYywKKyAgICAgICAgICAgICAgIC0tICBvbiBMaW5lX1Bvc2l0aW9uLCB3aGljaCBpcyBhIE5hdHVyYWwKKyAgICAgICAgICAgICAgIC0tICB0aGUgQyB2ZXJzaW9uIHVzZXMgdGhpcyBmb3JtIHRvbywgaW50ZXJlc3RpbmdseS4KKyAgICAgICAgICAgIHdoZW4gS0VZX0RPV04gPT4KKyAgICAgICAgICAgICAgIGkgOj0gaSArIDE7CisgICAgICAgICAgICB3aGVuIEtFWV9MRUZUID0+CisgICAgICAgICAgICAgICBqIDo9IGogKyBzaiAtIDE7CisgICAgICAgICAgICB3aGVuIEtFWV9SSUdIVCA9PgorICAgICAgICAgICAgICAgaiA6PSBqICsgMTsKKyAgICAgICAgICAgIHdoZW4gS2V5X01vdXNlID0+CisgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICBldmVudCA6IE1vdXNlX0V2ZW50OworICAgICAgICAgICAgICAgICAgeSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICB4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgQnV0dG9uIDogTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgU3RhdGUgOiBCdXR0b25fU3RhdGU7CisKKyAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICBldmVudCA6PSBHZXRfTW91c2U7CisgICAgICAgICAgICAgICAgICBHZXRfRXZlbnQgKEV2ZW50ID0+IGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZID0+IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFggPT4geCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uID0+IEJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgID0+IFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgIGlmIHkgPiB1bGkgYW5kIHggPiB1bGogdGhlbgorICAgICAgICAgICAgICAgICAgICAgaSA6PSB5IC0gdWxpOworICAgICAgICAgICAgICAgICAgICAgaiA6PSB4IC0gdWxqOworICAgICAgICAgICAgICAgICAgICAgLS0gIHNhbWUgYXMgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgICAgICAgICAgIHJlcy55IDo9IHVsaSArIGk7CisgICAgICAgICAgICAgICAgICAgICByZXMueCA6PSB1bGogKyBqOworICAgICAgICAgICAgICAgICAgICAgcCA6PSByZXM7CisgICAgICAgICAgICAgICAgICAgICBiIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgICAgIHJlcy55IDo9IHVsaSArIGk7CisgICAgICAgICAgICAgICByZXMueCA6PSB1bGogKyBqOworICAgICAgICAgICAgICAgcCA6PSByZXM7CisgICAgICAgICAgICAgICBiIDo9IFRydWU7CisgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgIGkgOj0gaSBtb2Qgc2k7CisgICAgICAgICBqIDo9IGogbW9kIHNqOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgc2VsZWN0Y2VsbDsKKworICAgZnVuY3Rpb24gZ2V0d2luZG93IHJldHVybiBXaW5kb3cgaXMKKyAgICAgIHJ3aW5kb3cgOiBXaW5kb3c7CisgICAgICB1bCwgbHIgOiBwYWlyOworICAgICAgcmVzdWx0IDogQm9vbGVhbjsKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMCk7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIEFkZCAoU3RyID0+ICJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgY29ybmVyIDEiKTsKKyAgICAgIFJlZnJlc2g7CisgICAgICBzZWxlY3RjZWxsICgyLCAxLCBMaW5lcyAtIEJvdGxpbmVzIC0gMiwgQ29sdW1ucyAtIDIsIHVsLCByZXN1bHQpOworICAgICAgaWYgbm90IHJlc3VsdCB0aGVuCisgICAgICAgICByZXR1cm4gTnVsbF9XaW5kb3c7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKExpbmUgPT4gdWwueSAtIDEsIENvbHVtbiA9PiB1bC54IC0gMSwKKyAgICAgICAgICAgQ2ggPT4gQUNTX01hcCAoQUNTX1VwcGVyX0xlZnRfQ29ybmVyKSk7CisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMCk7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIEFkZCAoU3RyID0+ICJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgY29ybmVyIDIiKTsKKyAgICAgIFJlZnJlc2g7CisgICAgICBzZWxlY3RjZWxsICh1bC55LCB1bC54LCBMaW5lcyAtIEJvdGxpbmVzIC0gMiwgQ29sdW1ucyAtIDIsIGxyLCByZXN1bHQpOworICAgICAgaWYgbm90IHJlc3VsdCB0aGVuCisgICAgICAgICByZXR1cm4gTnVsbF9XaW5kb3c7CisgICAgICBlbmQgaWY7CisKKyAgICAgIHJ3aW5kb3cgOj0gU3ViX1dpbmRvdyAoTnVtYmVyX09mX0xpbmVzID0+IGxyLnkgLSB1bC55ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0NvbHVtbnMgPT4gbHIueCAtIHVsLnggKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uID0+IHVsLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA9PiB1bC54KTsKKworICAgICAgT3V0ZXJib3ggKHVsLCBsciwgVHJ1ZSk7CisgICAgICBSZWZyZXNoOworCisgICAgICBSZWZyZXNoIChyd2luZG93KTsKKworICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMCwgQ29sdW1uID0+IDApOworICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICByZXR1cm4gcndpbmRvdzsKKyAgIGVuZCBnZXR3aW5kb3c7CisKKyAgIHByb2NlZHVyZSBuZXd3aW5fbW92ZSAod2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBkeSAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICBkeCAgOiBDb2x1bW5fUG9zaXRpb24pIGlzCisgICAgICBjdXJfeSwgbWF4X3kgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgY3VyX3gsIG1heF94IDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEdldF9DdXJzb3JfUG9zaXRpb24gKHdpbiwgY3VyX3ksIGN1cl94KTsKKyAgICAgIEdldF9TaXplICh3aW4sIG1heF95LCBtYXhfeCk7CisgICAgICBjdXJfeCA6PSBDb2x1bW5fUG9zaXRpb24nTWluIChDb2x1bW5fUG9zaXRpb24nTWF4IChjdXJfeCArIGR4LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF94IC0gMSk7CisgICAgICBjdXJfeSA6PSBMaW5lX1Bvc2l0aW9uJ01pbiAoTGluZV9Qb3NpdGlvbidNYXggKGN1cl95ICsgZHksIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF95IC0gMSk7CisKKyAgICAgIE1vdmVfQ3Vyc29yICh3aW4sIExpbmUgPT4gY3VyX3ksIENvbHVtbiA9PiBjdXJfeCk7CisgICBlbmQgbmV3d2luX21vdmU7CisKKyAgIGZ1bmN0aW9uIGRlbGV0ZV9mcmFtZWQgKGZwIDogRnJhbWVBOyBzaG93aXQgOiBCb29sZWFuKSByZXR1cm4gRnJhbWVBIGlzCisgICAgICBucCA6IEZyYW1lQTsKKyAgIGJlZ2luCisgICAgICBmcC5sYXN0Lm5leHQgOj0gZnAubmV4dDsKKyAgICAgIGZwLm5leHQubGFzdCA6PSBmcC5sYXN0OworCisgICAgICBpZiBzaG93aXQgdGhlbgorICAgICAgICAgRXJhc2UgKGZwLndpbmQpOworICAgICAgICAgUmVmcmVzaCAoZnAud2luZCk7CisgICAgICBlbmQgaWY7CisgICAgICBEZWxldGUgKGZwLndpbmQpOworCisgICAgICBpZiBmcCA9IGZwLm5leHQgdGhlbgorICAgICAgICAgbnAgOj0gbnVsbDsKKyAgICAgIGVsc2UKKyAgICAgICAgIG5wIDo9IGZwLm5leHQ7CisgICAgICBlbmQgaWY7CisgICAgICAtLSAgVE9ETyBmcmVlKGZwKTsKKyAgICAgIHJldHVybiBucDsKKyAgIGVuZCBkZWxldGVfZnJhbWVkOworCisgICBNYXNrIDogRXZlbnRfTWFzayA6PSBOb19FdmVudHM7CisgICBNYXNrMiA6IEV2ZW50X01hc2s7CisKKyAgIHVzZXNjciA6IFdpbmRvdzsKKworYmVnaW4KKyAgIGlmIEhhc19Nb3VzZSB0aGVuCisgICAgICBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbiA9PiBMZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gQ2xpY2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2sgPT4gTWFzayk7CisgICAgICBNYXNrMiA6PSBTdGFydF9Nb3VzZSAoTWFzayk7CisgICBlbmQgaWY7CisgICBjIDo9IENUUkwgKCdDJyk7CisgICBTZXRfUmF3X01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgbG9vcAorICAgICAgdHJhbnNpZW50IChTdGFuZGFyZF9XaW5kb3csICIiKTsKKyAgICAgIGNhc2UgYyBpcworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnYycpIG1vZCAxNiMyMCMgPT4gLS0gIEN0cmwoJ2MnKQorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgbmV3dyA6IGNvbnN0YW50IEZyYW1lQSA6PSBuZXcgRnJhbWUnKG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxfV2luZG93KTsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBuZXd3LndpbmQgOj0gZ2V0d2luZG93OworICAgICAgICAgICAgICAgaWYgbmV3dy53aW5kID0gTnVsbF9XaW5kb3cgIHRoZW4KKyAgICAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICAgICAgICAtLSAgd2FzIGdvdG8gYnJlYWtvdXQ7IGhhIGhhIGhhCisgICAgICAgICAgICAgICBlbHNlCisKKyAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQgPSBudWxsICB0aGVuCisgICAgICAgICAgICAgICAgICAgICBuZXd3Lm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cubGFzdCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgbmV3dy5uZXh0IDo9IGN1cnJlbnQubmV4dDsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cubGFzdCA6PSBjdXJyZW50OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5sYXN0Lm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cubmV4dC5sYXN0IDo9IG5ld3c7CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICBjdXJyZW50IDo9IG5ld3c7CisKKyAgICAgICAgICAgICAgICAgIFNldF9LZXlQYWRfTW9kZSAoY3VycmVudC53aW5kLCBUcnVlKTsKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnQuZG9fa2V5cGFkIDo9IEhhdmVLZXlQYWQgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICBjdXJyZW50LmRvX3Njcm9sbCA6PSBIYXZlU2Nyb2xsIChjdXJyZW50LndpbmQpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnTicpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdOJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBjdXJyZW50IDo9IGN1cnJlbnQubmV4dDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ1AnKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnUCcpCisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgdGhlbgorICAgICAgICAgICAgICAgY3VycmVudCA6PSBjdXJyZW50Lmxhc3Q7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdGJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ0YnKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIGFuZCB0aGVuIEhhdmVTY3JvbGwgKGN1cnJlbnQud2luZCkgdGhlbgorICAgICAgICAgICAgICAgU2Nyb2xsIChjdXJyZW50LndpbmQsIDEpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnQicpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdCJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCBhbmQgdGhlbiBIYXZlU2Nyb2xsIChjdXJyZW50LndpbmQpIHRoZW4KKyAgICAgICAgICAgIC0tICBUaGUgQyB2ZXJzaW9uIG9mIFNjcm9sbCBtYXkgcmV0dXJuIEVSUiB3aGljaCBpcyBpZ25vcmVkCisgICAgICAgICAgICAtLSAgd2UgbmVlZCB0byBhdm9pZCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAtLSAgd2l0aCB0aGUgJ2FuZCBIYXZlU2Nyb2xsKGN1cnJlbnQud2luZCknCisgICAgICAgICAgICAgICBTY3JvbGwgKGN1cnJlbnQud2luZCwgLTEpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnSycpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdLJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBjdXJyZW50LmRvX2tleXBhZCA6PSBub3QgY3VycmVudC5kb19rZXlwYWQ7CisgICAgICAgICAgICAgICBTZXRfS2V5UGFkX01vZGUgKGN1cnJlbnQud2luZCwgY3VycmVudC5kb19rZXlwYWQpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUycpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdTJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBjdXJyZW50LmRvX3Njcm9sbCA6PSBub3QgY3VycmVudC5kb19zY3JvbGw7CisgICAgICAgICAgICAgICBBbGxvd19TY3JvbGxpbmcgKGN1cnJlbnQud2luZCwgY3VycmVudC5kb19zY3JvbGwpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnVycpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdXJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gY3VycmVudC5uZXh0IHRoZW4KKyAgICAgICAgICAgICAgIENyZWF0ZSAoZiwgTmFtZSA9PiBkdW1wZmlsZSk7IC0tIFRPRE8gZXJyb3IgY2hlY2tpbmcKKyAgICAgICAgICAgICAgIGlmIG5vdCBJc19PcGVuIChmKSB0aGVuCisgICAgICAgICAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgUHV0X1dpbmRvdyAoY3VycmVudC53aW5kLCBmKTsKKyAgICAgICAgICAgICAgIENsb3NlIChmKTsKKyAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gZGVsZXRlX2ZyYW1lZCAoY3VycmVudCwgVHJ1ZSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdSJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ1InKQorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgbmV3dyA6IEZyYW1lQSA6PSBuZXcgRnJhbWUnKG51bGwsIG51bGwsIEZhbHNlLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsX1dpbmRvdyk7CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgT3BlbiAoZiwgTW9kZSA9PiBJbl9GaWxlLCBOYW1lID0+IGR1bXBmaWxlKTsKKyAgICAgICAgICAgICAgIG5ld3cgOj0gbmV3IEZyYW1lJyhudWxsLCBudWxsLCBGYWxzZSwgRmFsc2UsIE51bGxfV2luZG93KTsKKworICAgICAgICAgICAgICAgbmV3dy5uZXh0IDo9IGN1cnJlbnQubmV4dDsKKyAgICAgICAgICAgICAgIG5ld3cubGFzdCA6PSBjdXJyZW50OworICAgICAgICAgICAgICAgbmV3dy5sYXN0Lm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgIG5ld3cubmV4dC5sYXN0IDo9IG5ld3c7CisKKyAgICAgICAgICAgICAgIG5ld3cud2luZCA6PSBHZXRfV2luZG93IChmKTsKKyAgICAgICAgICAgICAgIENsb3NlIChmKTsKKworICAgICAgICAgICAgICAgUmVmcmVzaCAobmV3dy53aW5kKTsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ1gnKSBtb2QgMTYjMjAjID0+IC0tICBDdHJsKCdYJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICB0bXAsIHVsLCBsciA6IHBhaXI7CisgICAgICAgICAgICAgICAgICBteCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIG15IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIHRtcGJvb2wgOiBCb29sZWFuOworICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKKyAgICAgICAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIlVzZSBhcnJvd3MgdG8gbW92ZSBjdXJzb3IsIGFueXRoaW5nIGVsc2UgIiAmCisgICAgICAgICAgICAgICAgICAgICAgICJ0byBtYXJrIG5ldyBjb3JuZXIiKTsKKyAgICAgICAgICAgICAgICAgIFJlZnJlc2g7CisKKyAgICAgICAgICAgICAgICAgIEdldF9XaW5kb3dfUG9zaXRpb24gKGN1cnJlbnQud2luZCwgdWwueSwgdWwueCk7CisKKyAgICAgICAgICAgICAgICAgIHNlbGVjdGNlbGwgKHVsLnksIHVsLngsIExpbmVzIC0gQm90bGluZXMgLSAyLCBDb2x1bW5zIC0gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgdG1wYm9vbCk7CisgICAgICAgICAgICAgICAgICBpZiBub3QgdG1wYm9vbCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAtLSAgdGhlIEMgdmVyc2lvbiBoYWQgYSBnb3RvLiBJIHJlZnVzZSBnb3Rvcy4KKyAgICAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBHZXRfU2l6ZSAoY3VycmVudC53aW5kLCBsci55LCBsci54KTsKKyAgICAgICAgICAgICAgICAgICAgIGxyLnkgOj0gbHIueSArIHVsLnkgLSAxOworICAgICAgICAgICAgICAgICAgICAgbHIueCA6PSBsci54ICsgdWwueCAtIDE7CisgICAgICAgICAgICAgICAgICAgICBPdXRlcmJveCAodWwsIGxyLCBGYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworCisgICAgICAgICAgICAgICAgICAgICBHZXRfU2l6ZSAoY3VycmVudC53aW5kLCBteSwgbXgpOworICAgICAgICAgICAgICAgICAgICAgaWYgbXkgPiB0bXAueSAtIHVsLnkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC53aW5kLCBsci55LCBsci54KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIHRtcC55IC0gdWwueSArIDEsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbiAoY3VycmVudC53aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIGxyLnksIGxyLngpOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgaWYgbXggPiB0bXAueCAtIHVsLnggdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gMCAuLiBteSAtIDEgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKGN1cnJlbnQud2luZCwgaSwgdG1wLnggLSB1bC54ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZSAoY3VycmVudC53aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAoY3VycmVudC53aW5kKTsKKworICAgICAgICAgICAgICAgICAgICAgbHIgOj0gdG1wOworICAgICAgICAgICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gcGFzc2VzIGludmFsaWQgYXJncyB0byByZXNpemUKKyAgICAgICAgICAgICAgICAgICAgIC0tICB3aGljaCByZXR1cm5zIGFuIEVSUi4gRm9yIEFkYSB3ZSBhdm9pZCB0aGUgZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAgaWYgbHIueSAvPSB1bC55IGFuZCBsci54IC89IHVsLnggdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgUmVzaXplIChjdXJyZW50LndpbmQsIGxyLnkgLSB1bC55ICsgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHIueCAtIHVsLnggKyAwKTsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgICAgICAgICAgR2V0X1dpbmRvd19Qb3NpdGlvbiAoY3VycmVudC53aW5kLCB1bC55LCB1bC54KTsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LndpbmQsIGxyLnksIGxyLngpOworICAgICAgICAgICAgICAgICAgICAgbHIueSA6PSBsci55ICsgdWwueSAtIDE7CisgICAgICAgICAgICAgICAgICAgICBsci54IDo9IGxyLnggKyB1bC54IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgIE91dGVyYm94ICh1bCwgbHIsIFRydWUpOworICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKKworICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAoY3VycmVudC53aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKKyAgICAgICAgICAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgICAgICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHdoZW4gS2V5X0YxMCAgPT4KKyAgICAgICAgICAgIGRlY2xhcmUgdG1wIDogcGFpcjsgdG1wYm9vbCA6IEJvb2xlYW47CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgLS0gIHVuZG9jdW1lbnRlZCAtLS0gdXNlIHRoaXMgdG8gdGVzdCBhcmVhIGNsZWFycworICAgICAgICAgICAgICAgc2VsZWN0Y2VsbCAoMCwgMCwgTGluZXMgLSAxLCBDb2x1bW5zIC0gMSwgdG1wLCB0bXBib29sKTsKKyAgICAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9TY3JlZW47CisgICAgICAgICAgICAgICBSZWZyZXNoOworICAgICAgICAgICAgZW5kOworICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1VwID0+CisgICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAtMSwgMCk7CisgICAgICAgICB3aGVuIEtleV9DdXJzb3JfRG93biAgPT4KKyAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LndpbmQsIDEsIDApOworICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0xlZnQgID0+CisgICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAwLCAtMSk7CisgICAgICAgICB3aGVuIEtleV9DdXJzb3JfUmlnaHQgID0+CisgICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAwLCAxKTsKKyAgICAgICAgIHdoZW4gS2V5X0JhY2tzcGFjZSB8IEtleV9EZWxldGVfQ2hhciAgPT4KKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIHkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgeCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgIHRtcCA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC53aW5kLCB5LCB4KTsKKyAgICAgICAgICAgICAgIC0tICB4IDo9IHggLSAxOworICAgICAgICAgICAgICAgLS0gIEkgZ290IHRyaWNrZWQgYnkgdGhlIC0xID0gTWF4X05hdHVyYWwgLSAxIHJlc3VsdAorICAgICAgICAgICAgICAgLS0gIHkgOj0geSAtIDE7CisgICAgICAgICAgICAgICBpZiBub3QgKHggPSAwIGFuZCB5ID0gMCkgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgeCA9IDAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgeSA6PSB5IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LndpbmQsIHRtcCwgeCk7CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICB4IDo9IHggLSAxOworICAgICAgICAgICAgICAgICAgRGVsZXRlX0NoYXJhY3RlciAoY3VycmVudC53aW5kLCB5LCB4KTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICAtLSAgVE9ETyBjID0gJ1xyJyA/CisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgdGhlbgorICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIEFkZCAoY3VycmVudC53aW5kLCBDaCA9PiBDb2RlX1RvX0NoYXIgKGMpKTsKKyAgICAgICAgICAgICAgIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgd2hlbiBDdXJzZXNfRXhjZXB0aW9uID0+IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAtLSAgdGhpcyBoYXBwZW5zIGlmIHdlIGFyZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIC0tICBsb3dlciByaWdodCBvZiBhIHdpbmRvdyBhbmQgYWRkIGEgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBjYXNlOworICAgICAgbmV3d2luX3JlcG9ydCAoY3VycmVudC53aW5kKTsKKyAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICB1c2VzY3IgOj0gY3VycmVudC53aW5kOworICAgICAgZWxzZQorICAgICAgICAgdXNlc2NyIDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFJlZnJlc2ggKHVzZXNjcik7CisgICAgICBjIDo9IEdldGNoYXIgKHVzZXNjcik7CisgICAgICBleGl0IHdoZW4gYyA9IFF1aXQgb3IgKGMgPSBFc2NhcGUgYW5kIEhhdmVLZXlQYWQgKHVzZXNjcikpOworICAgICAgLS0gIFRPRE8gd2hlbiBkb2VzIGMgPSBFUlIgaGFwcGVuPworICAgZW5kIGxvb3A7CisKKyAgIC0tICBUT0RPIHdoaWxlIGN1cnJlbnQgLz0gbnVsbCBsb29wCisgICAtLSAgY3VycmVudCA6PSBkZWxldGVfZnJhbWVkKGN1cnJlbnQsIEZhbHNlKTsKKyAgIC0tICBlbmQgbG9vcDsKKworICAgQWxsb3dfU2Nyb2xsaW5nIChNb2RlID0+IFRydWUpOworCisgICBFbmRfTW91c2UgKE1hc2syKTsKKyAgIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICBFcmFzZTsKKyAgIEVuZF9XaW5kb3dzOworCitlbmQgbmN1cnNlczIuYWNzX2FuZF9zY3JvbGw7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19hbmRfc2Nyb2xsLmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTQ4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19hbmRfc2Nyb2xsLmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIuYWNzX2FuZF9zY3JvbGw7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19kaXNwbGF5LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2Rpc3BsYXkuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWM2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19kaXNwbGF5LmFkYgpAQCAtMCwwICsxLDIzNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS42ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NzozNCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIG5jdXJzZXMyLmdlbmVyaWNQdXRzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKword2l0aCBBZGEuU3RyaW5ncy5VbmJvdW5kZWQ7Cit3aXRoIEFkYS5TdHJpbmdzLkZpeGVkOworCitwcm9jZWR1cmUgbmN1cnNlczIuYWNzX2Rpc3BsYXkgaXMKKyAgIHVzZSBJbnRfSU87CisKKyAgIHByb2NlZHVyZSBzaG93X3VwcGVyX2NoYXJzIChmaXJzdCA6IEludGVnZXIpOworICAgZnVuY3Rpb24gIHNob3dfMV9hY3MgKE4gICAgOiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA6ICBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyOworICAgcHJvY2VkdXJlIHNob3dfYWNzX2NoYXJzOworCisgICBwcm9jZWR1cmUgc2hvd191cHBlcl9jaGFycyAoZmlyc3QgOiBJbnRlZ2VyKSAgaXMKKyAgICAgIEMxIDogY29uc3RhbnQgQm9vbGVhbiA6PSAoZmlyc3QgPSAxMjgpOworICAgICAgbGFzdCA6IGNvbnN0YW50IEludGVnZXIgOj0gZmlyc3QgKyAzMTsKKyAgICAgIHBhY2thZ2UgcCBpcyBuZXcgbmN1cnNlczIuZ2VuZXJpY1B1dHMgKDIwMCk7CisgICAgICB1c2UgcDsKKyAgICAgIHVzZSBwLkJTOworICAgICAgdXNlIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKKworICAgICAgdG1wYSA6IFVuYm91bmRlZF9TdHJpbmc7CisgICAgICB0bXBiIDogQlMuQm91bmRlZF9TdHJpbmc7CisgICBiZWdpbgorICAgICAgRXJhc2U7CisgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAoQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMjApOworICAgICAgdG1wYSA6PSBUb19VbmJvdW5kZWRfU3RyaW5nICgiRGlzcGxheSBvZiAiKTsKKyAgICAgIGlmIEMxIHRoZW4KKyAgICAgICAgIHRtcGEgOj0gdG1wYSAmICJDMSI7CisgICAgICBlbHNlCisgICAgICAgICB0bXBhIDo9IHRtcGEgJiAiR1IiOworICAgICAgZW5kIGlmOworICAgICAgdG1wYSA6PSB0bXBhICYgIiBDaGFyYWN0ZXIgQ29kZXMgIjsKKyAgICAgIG15UHV0ICh0bXBiLCBmaXJzdCk7CisgICAgICBBcHBlbmQgKHRtcGEsIFRvX1N0cmluZyAodG1wYikpOworICAgICAgQXBwZW5kICh0bXBhLCAiIHRvICIpOworICAgICAgbXlQdXQgKHRtcGIsIGxhc3QpOworICAgICAgQXBwZW5kICh0bXBhLCBUb19TdHJpbmcgKHRtcGIpKTsKKyAgICAgIEFkZCAoU3RyID0+IFRvX1N0cmluZyAodG1wYSkpOworICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgICAgKE9uID0+IEZhbHNlLAorICAgICAgICAgQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBSZWZyZXNoOworCisgICAgICBmb3IgY29kZSBpbiBmaXJzdCAuLiBsYXN0IGxvb3AKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHJvdyA6IGNvbnN0YW50IExpbmVfUG9zaXRpb24KKyAgICAgICAgICAgICAgICA6PSBMaW5lX1Bvc2l0aW9uICg0ICsgKChjb2RlIC0gZmlyc3QpIG1vZCAxNikpOworICAgICAgICAgICAgY29sIDogY29uc3RhbnQgQ29sdW1uX1Bvc2l0aW9uCisgICAgICAgICAgICAgICAgOj0gQ29sdW1uX1Bvc2l0aW9uICgoKGNvZGUgLSBmaXJzdCkgLyAxNikgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciAoQ29sdW1ucykgLyAyKTsKKyAgICAgICAgICAgIHRtcDMgOiBTdHJpbmcgKDEgLi4gMyk7CisgICAgICAgICAgICB0bXB4IDogU3RyaW5nICgxIC4uIEludGVnZXIgKENvbHVtbnMgLyA0KSk7CisgICAgICAgICAgICByZXBseSA6IEtleV9Db2RlOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFB1dCAodG1wMywgY29kZSk7CisgICAgICAgICAgICBteVB1dCAodG1wYiwgY29kZSwgMTYpOworICAgICAgICAgICAgdG1wYSA6PSBUb19VbmJvdW5kZWRfU3RyaW5nICh0bXAzICYgIiAoIiAmIFRvX1N0cmluZyAodG1wYikgJiAnKScpOworCisgICAgICAgICAgICBBZGEuU3RyaW5ncy5GaXhlZC5Nb3ZlIChUb19TdHJpbmcgKHRtcGEpLCB0bXB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdGlmeSA9PiBBZGEuU3RyaW5ncy5SaWdodCk7CisgICAgICAgICAgICBBZGQgKExpbmUgPT4gcm93LCBDb2x1bW4gPT4gY29sLAorICAgICAgICAgICAgICAgICBTdHIgPT4gdG1weCAmICcgJyAmICc6JyAmICcgJyk7CisgICAgICAgICAgICBpZiBDMSB0aGVuCisgICAgICAgICAgICAgICBTZXRfTm9EZWxheV9Nb2RlIChNb2RlID0+IFRydWUpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8gKENoID0+IENvZGVfVG9fQ2hhciAoS2V5X0NvZGUgKGNvZGUpKSk7CisgICAgICAgICAgICAtLSAgVE9ETyBjaGVjayB0aGlzCisgICAgICAgICAgICBpZiBDMSB0aGVuCisgICAgICAgICAgICAgICByZXBseSA6PSBHZXRjaGFyOworICAgICAgICAgICAgICAgd2hpbGUgcmVwbHkgLz0gS2V5X05vbmUgbG9vcAorICAgICAgICAgICAgICAgICAgQWRkIChDaCA9PiBDb2RlX1RvX0NoYXIgKHJlcGx5KSk7CisgICAgICAgICAgICAgICAgICBOYXBfTWlsbGlfU2Vjb25kcyAoMTApOworICAgICAgICAgICAgICAgICAgcmVwbHkgOj0gR2V0Y2hhcjsKKyAgICAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgICAgU2V0X05vRGVsYXlfTW9kZSAoTW9kZSA9PiBGYWxzZSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQ7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBzaG93X3VwcGVyX2NoYXJzOworCisgICBmdW5jdGlvbiBzaG93XzFfYWNzIChOICAgIDogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIDogIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlciBpcworICAgICAgaGVpZ2h0IDogY29uc3RhbnQgSW50ZWdlciA6PSAxNjsKKyAgICAgIHJvdyA6IGNvbnN0YW50IExpbmVfUG9zaXRpb24gOj0gTGluZV9Qb3NpdGlvbiAoNCArIChOIG1vZCBoZWlnaHQpKTsKKyAgICAgIGNvbCA6IGNvbnN0YW50IENvbHVtbl9Qb3NpdGlvbiA6PSBDb2x1bW5fUG9zaXRpb24gKChOIC8gaGVpZ2h0KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIChDb2x1bW5zKSAvIDIpOworICAgICAgdG1weCA6IFN0cmluZyAoMSAuLiBJbnRlZ2VyIChDb2x1bW5zKSAvIDMpOworICAgYmVnaW4KKyAgICAgIEFkYS5TdHJpbmdzLkZpeGVkLk1vdmUgKG5hbWUsIHRtcHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0aWZ5ID0+IEFkYS5TdHJpbmdzLlJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJvcCA9PiBBZGEuU3RyaW5ncy5MZWZ0KTsKKyAgICAgIEFkZCAoTGluZSA9PiByb3csIENvbHVtbiA9PiBjb2wsIFN0ciA9PiB0bXB4ICYgJyAnICYgJzonICYgJyAnKTsKKyAgICAgIC0tICB3ZSBuZWVkIG1vcmUgcm9vbSB0aGFuIEMgYmVjYXVzZSBvdXIgaWRlbnRpZmllcnMgYXJlIGxvbmdlcgorICAgICAgLS0gIDIyIGNoYXJzIGFjdHVhbGx5CisgICAgICBBZGQgKENoID0+IGNvZGUpOworICAgICAgcmV0dXJuIE4gKyAxOworICAgZW5kIHNob3dfMV9hY3M7CisKKyAgIHByb2NlZHVyZSBzaG93X2Fjc19jaGFycyBpcworICAgICAgbiA6IEludGVnZXI7CisgICBiZWdpbgorICAgICAgRXJhc2U7CisgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAoQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gMCwgQ29sdW1uID0+IDIwLAorICAgICAgICAgICBTdHIgPT4gIkRpc3BsYXkgb2YgdGhlIEFDUyBDaGFyYWN0ZXIgU2V0Iik7CisgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoT24gPT4gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIFJlZnJlc2g7CisKKyAgICAgIC0tICB0aGUgZm9sbG93aW5nIGlzIHVzZWZ1bCB0byBnZW5lcmF0ZSB0aGUgYmVsb3cKKyAgICAgIC0tICBncmVwICdeWyBdKkFDU18nIC4uL3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkcyB8CisgICAgICAtLSAgYXdrICd7cHJpbnQgICJuIDo9IHNob3dfMV9hY3MobiwgXCIiJDEiXCIsIEFDU19NYXAoIiQxIikpOyJ9JworCisgICAgICBuIDo9IHNob3dfMV9hY3MgKDAsICJBQ1NfVXBwZXJfTGVmdF9Db3JuZXIiLAorICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfVXBwZXJfTGVmdF9Db3JuZXIpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Mb3dlcl9MZWZ0X0Nvcm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19Mb3dlcl9MZWZ0X0Nvcm5lcikpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1VwcGVyX1JpZ2h0X0Nvcm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19VcHBlcl9SaWdodF9Db3JuZXIpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Mb3dlcl9SaWdodF9Db3JuZXIiLAorICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfTG93ZXJfUmlnaHRfQ29ybmVyKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfTGVmdF9UZWUiLCBBQ1NfTWFwIChBQ1NfTGVmdF9UZWUpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19SaWdodF9UZWUiLCBBQ1NfTWFwIChBQ1NfUmlnaHRfVGVlKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfQm90dG9tX1RlZSIsIEFDU19NYXAgKEFDU19Cb3R0b21fVGVlKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfVG9wX1RlZSIsIEFDU19NYXAgKEFDU19Ub3BfVGVlKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfSG9yaXpvbnRhbF9MaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgQUNTX01hcCAoQUNTX0hvcml6b250YWxfTGluZSkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1ZlcnRpY2FsX0xpbmUiLCBBQ1NfTWFwIChBQ1NfVmVydGljYWxfTGluZSkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1BsdXNfU3ltYm9sIiwgQUNTX01hcCAoQUNTX1BsdXNfU3ltYm9sKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfU2Nhbl9MaW5lXzEiLCBBQ1NfTWFwIChBQ1NfU2Nhbl9MaW5lXzEpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19TY2FuX0xpbmVfOSIsIEFDU19NYXAgKEFDU19TY2FuX0xpbmVfOSkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0RpYW1vbmQiLCBBQ1NfTWFwIChBQ1NfRGlhbW9uZCkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0NoZWNrZXJfQm9hcmQiLCBBQ1NfTWFwIChBQ1NfQ2hlY2tlcl9Cb2FyZCkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0RlZ3JlZSIsIEFDU19NYXAgKEFDU19EZWdyZWUpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19QbHVzX01pbnVzIiwgQUNTX01hcCAoQUNTX1BsdXNfTWludXMpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19CdWxsZXQiLCBBQ1NfTWFwIChBQ1NfQnVsbGV0KSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfTGVmdF9BcnJvdyIsIEFDU19NYXAgKEFDU19MZWZ0X0Fycm93KSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfUmlnaHRfQXJyb3ciLCBBQ1NfTWFwIChBQ1NfUmlnaHRfQXJyb3cpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Eb3duX0Fycm93IiwgQUNTX01hcCAoQUNTX0Rvd25fQXJyb3cpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19VcF9BcnJvdyIsIEFDU19NYXAgKEFDU19VcF9BcnJvdykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0JvYXJkX09mX1NxdWFyZXMiLAorICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfQm9hcmRfT2ZfU3F1YXJlcykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0xhbnRlcm4iLCBBQ1NfTWFwIChBQ1NfTGFudGVybikpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1NvbGlkX0Jsb2NrIiwgQUNTX01hcCAoQUNTX1NvbGlkX0Jsb2NrKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfU2Nhbl9MaW5lXzMiLCBBQ1NfTWFwIChBQ1NfU2Nhbl9MaW5lXzMpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19TY2FuX0xpbmVfNyIsIEFDU19NYXAgKEFDU19TY2FuX0xpbmVfNykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0xlc3NfT3JfRXF1YWwiLCBBQ1NfTWFwIChBQ1NfTGVzc19Pcl9FcXVhbCkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0dyZWF0ZXJfT3JfRXF1YWwiLAorICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfR3JlYXRlcl9Pcl9FcXVhbCkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1BJIiwgQUNTX01hcCAoQUNTX1BJKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfTm90X0VxdWFsIiwgQUNTX01hcCAoQUNTX05vdF9FcXVhbCkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1N0ZXJsaW5nIiwgQUNTX01hcCAoQUNTX1N0ZXJsaW5nKSk7CisKKyAgICAgIGlmIG4gPSAwIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisgICBlbmQgc2hvd19hY3NfY2hhcnM7CisKKyAgIGMxIDogS2V5X0NvZGU7CisgICBjIDogQ2hhcmFjdGVyIDo9ICdhJzsKK2JlZ2luCisgICBsb29wCisgICAgICBjYXNlIGMgaXMKKyAgICAgICAgIHdoZW4gJ2EnID0+CisgICAgICAgICAgICBzaG93X2Fjc19jaGFyczsKKyAgICAgICAgIHdoZW4gJzAnIHwgJzEnIHwgJzInIHwgJzMnID0+CisgICAgICAgICAgICBzaG93X3VwcGVyX2NoYXJzIChjdG9pIChjKSAqIDMyICsgMTI4KTsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICBudWxsOworICAgICAgZW5kIGNhc2U7CisgICAgICBBZGQgKExpbmUgPT4gTGluZXMgLSAzLCBDb2x1bW4gPT4gMCwKKyAgICAgICAgICAgU3RyID0+ICJOb3RlOiBBTlNJIHRlcm1pbmFscyBtYXkgbm90IGRpc3BsYXkgQzEgY2hhcmFjdGVycy4iKTsKKyAgICAgIEFkZCAoTGluZSA9PiBMaW5lcyAtIDIsIENvbHVtbiA9PiAwLAorICAgICAgICAgICBTdHIgPT4gIlNlbGVjdDogYT1BQ1MsIDA9QzEsIDEsMiwzPUdSIGNoYXJhY3RlcnMsIHE9cXVpdCIpOworICAgICAgUmVmcmVzaDsKKyAgICAgIGMxIDo9IEdldGNoYXI7CisgICAgICBjIDo9IENvZGVfVG9fQ2hhciAoYzEpOworICAgICAgZXhpdCB3aGVuIGMgPSAncScgb3IgYyA9ICd4JzsKKyAgIGVuZCBsb29wOworICAgUGF1c2U7CisgICBFcmFzZTsKKyAgIEVuZF9XaW5kb3dzOworZW5kIG5jdXJzZXMyLmFjc19kaXNwbGF5OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfZGlzcGxheS5hZHMgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19kaXNwbGF5LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTYxNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfZGlzcGxheS5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLmFjc19kaXNwbGF5OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hdHRyX3Rlc3QuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hdHRyX3Rlc3QuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjcxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWF0dHJfdGVzdC5hZGIKQEAgLTAsMCArMSwzNjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6MjYgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbzsKK3VzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvOword2l0aCBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKK3dpdGggQWRhLlN0cmluZ3MuRml4ZWQ7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5hdHRyX3Rlc3QgaXMKKworICAgZnVuY3Rpb24gIHN1YnNldCAoc3VwZXIsIHN1YiA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gQm9vbGVhbjsKKyAgIGZ1bmN0aW9uICBpbnRlcnNlY3QgKGIsIGEgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkgcmV0dXJuIEJvb2xlYW47CisgICBmdW5jdGlvbiAgaGFzX0FfQ09MT1IgKGF0dHIgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIEJvb2xlYW47CisgICBmdW5jdGlvbiAgc2hvd19hdHRyIChyb3cgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgOiBOYXR1cmFsOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UgOiBCb29sZWFuKSByZXR1cm4gTGluZV9Qb3NpdGlvbjsKKyAgIHByb2NlZHVyZSBhdHRyX2dldGMgKHNraXAgOiBpbiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZnLCBiZyA6IGluIG91dCBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgOiBvdXQgQm9vbGVhbik7CisKKyAgIGZ1bmN0aW9uIHN1YnNldCAoc3VwZXIsIHN1YiA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGlmCisgICAgICAgIChzdXBlci5TdGFuZF9PdXQgb3Igbm90IHN1Yi5TdGFuZF9PdXQpIGFuZAorICAgICAgICAoc3VwZXIuVW5kZXJfTGluZSBvciBub3Qgc3ViLlVuZGVyX0xpbmUpIGFuZAorICAgICAgICAoc3VwZXIuUmV2ZXJzZV9WaWRlbyBvciBub3Qgc3ViLlJldmVyc2VfVmlkZW8pIGFuZAorICAgICAgICAoc3VwZXIuQmxpbmsgb3Igbm90IHN1Yi5CbGluaykgYW5kCisgICAgICAgIChzdXBlci5EaW1fQ2hhcmFjdGVyIG9yIG5vdCBzdWIuRGltX0NoYXJhY3RlcikgYW5kCisgICAgICAgIChzdXBlci5Cb2xkX0NoYXJhY3RlciBvciBub3Qgc3ViLkJvbGRfQ2hhcmFjdGVyKSBhbmQKKyAgICAgICAgKHN1cGVyLkFsdGVybmF0ZV9DaGFyYWN0ZXJfU2V0IG9yIG5vdCBzdWIuQWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQpIGFuZAorICAgICAgICAoc3VwZXIuSW52aXNpYmxlX0NoYXJhY3RlciBvciBub3Qgc3ViLkludmlzaWJsZV9DaGFyYWN0ZXIpIC0tIGFuZAorLS0gICAgICAoc3VwZXIuUHJvdGVjdGVkX0NoYXJhY3RlciBvciBub3Qgc3ViLlByb3RlY3RlZF9DaGFyYWN0ZXIpIGFuZAorLS0gICAgICAoc3VwZXIuSG9yaXpvbnRhbCBvciBub3Qgc3ViLkhvcml6b250YWwpIGFuZAorLS0gICAgICAoc3VwZXIuTGVmdCBvciBub3Qgc3ViLkxlZnQpIGFuZAorLS0gICAgICAoc3VwZXIuTG93IG9yIG5vdCBzdWIuTG93KSBhbmQKKy0tICAgICAgKHN1cGVyLlJpZ2h0IG9yIG5vdCBzdWIuUmlnaHQpIGFuZAorLS0gICAgICAoc3VwZXIuVG9wIG9yIG5vdCBzdWIuVG9wKSBhbmQKKy0tICAgICAgKHN1cGVyLlZlcnRpY2FsIG9yIG5vdCBzdWIuVmVydGljYWwpCisgICAgICB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBzdWJzZXQ7CisKKyAgIGZ1bmN0aW9uIGludGVyc2VjdCAoYiwgYSA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGlmCisgICAgICAgIChhLlN0YW5kX091dCBhbmQgYi5TdGFuZF9PdXQpIG9yCisgICAgICAgIChhLlVuZGVyX0xpbmUgYW5kIGIuVW5kZXJfTGluZSkgb3IKKyAgICAgICAgKGEuUmV2ZXJzZV9WaWRlbyBhbmQgYi5SZXZlcnNlX1ZpZGVvKSBvcgorICAgICAgICAoYS5CbGluayBhbmQgYi5CbGluaykgb3IKKyAgICAgICAgKGEuRGltX0NoYXJhY3RlciBhbmQgYi5EaW1fQ2hhcmFjdGVyKSBvcgorICAgICAgICAoYS5Cb2xkX0NoYXJhY3RlciBhbmQgYi5Cb2xkX0NoYXJhY3Rlcikgb3IKKyAgICAgICAgKGEuQWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQgYW5kIGIuQWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQpIG9yCisgICAgICAgIChhLkludmlzaWJsZV9DaGFyYWN0ZXIgYW5kIGIuSW52aXNpYmxlX0NoYXJhY3RlcikgLS0gb3IKKy0tICAgICAgKGEuUHJvdGVjdGVkX0NoYXJhY3RlciBhbmQgYi5Qcm90ZWN0ZWRfQ2hhcmFjdGVyKSBvcgorLS0gICAgICAoYS5Ib3Jpem9udGFsIGFuZCBiLkhvcml6b250YWwpIG9yCistLSAgICAgIChhLkxlZnQgYW5kIGIuTGVmdCkgb3IKKy0tICAgICAgKGEuTG93IGFuZCBiLkxvdykgb3IKKy0tICAgICAgKGEuUmlnaHQgYW5kIGIuUmlnaHQpIG9yCistLSAgICAgIChhLlRvcCBhbmQgYi5Ub3ApIG9yCistLSAgICAgIChhLlZlcnRpY2FsIGFuZCBiLlZlcnRpY2FsKQorICAgICAgdGhlbgorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgaW50ZXJzZWN0OworCisgICBmdW5jdGlvbiBoYXNfQV9DT0xPUiAoYXR0ciA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGlmIGF0dHIuQ29sb3IgLz0gQ29sb3JfUGFpciAoMCkgdGhlbgorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgaGFzX0FfQ09MT1I7CisKKyAgIC0tICBQcmludCBzb21lIHRleHQgd2l0aCBhdHRyaWJ1dGVzLgorICAgZnVuY3Rpb24gc2hvd19hdHRyIChyb3cgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA6IE5hdHVyYWw7CisgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgb25jZSA6IEJvb2xlYW4pIHJldHVybiBMaW5lX1Bvc2l0aW9uIGlzCisKKyAgICAgIGZ1bmN0aW9uIG1ha2VfcmVjb3JkIChuIDogSW50ZWdlcikgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgZnVuY3Rpb24gbWFrZV9yZWNvcmQgKG4gOiBJbnRlZ2VyKSByZXR1cm4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgaXMKKyAgICAgICAgIC0tICB1bnN1cHBvcnRlZCBtZWFucyB0cnVlCisgICAgICAgICBhIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gKG90aGVycyA9PiBGYWxzZSk7CisgICAgICAgICBtIDogSW50ZWdlcjsKKyAgICAgICAgIHJlc3QgOiBJbnRlZ2VyOworICAgICAgYmVnaW4KKyAgICAgICAgIC0tICBuY3YgaXMgYSBiaXRtYXAgd2l0aCB0aGVzZSBmaWVsZHMKKyAgICAgICAgIC0tICAgICAgICAgICAgICBBX1NUQU5ET1VULAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfVU5ERVJMSU5FLAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfUkVWRVJTRSwKKyAgICAgICAgIC0tICAgICAgICAgICAgICBBX0JMSU5LLAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfRElNLAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfQk9MRCwKKyAgICAgICAgIC0tICAgICAgICAgICAgICBBX0lOVklTLAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfUFJPVEVDVCwKKyAgICAgICAgIC0tICAgICAgICAgICAgICBBX0FMVENIQVJTRVQKKyAgICAgICAgIC0tICBJdCBtZWFucyBub19jb2xvcl92aWRlbywKKyAgICAgICAgIC0tICB2aWRlbyBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3QgYmUgdXNlZCB3aXRoIGNvbG9ycworICAgICAgICAgLS0gIHNlZSBtYW4gdGVybWluZm8uNQorICAgICAgICAgbSA6PSBuIG1vZCAyOworICAgICAgICAgcmVzdCA6PSBuIC8gMjsKKyAgICAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgICAgIGEuU3RhbmRfT3V0IDo9IFRydWU7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgICAgYS5VbmRlcl9MaW5lIDo9IFRydWU7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgICAgYS5SZXZlcnNlX1ZpZGVvIDo9IFRydWU7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgICAgYS5CbGluayA6PSBUcnVlOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgICAgIGEuQm9sZF9DaGFyYWN0ZXIgOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICAgICBhLkludmlzaWJsZV9DaGFyYWN0ZXIgOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICAgICBhLlByb3RlY3RlZF9DaGFyYWN0ZXIgOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICAgICBhLkFsdGVybmF0ZV9DaGFyYWN0ZXJfU2V0IDo9IFRydWU7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIHJldHVybiBhOworICAgICAgZW5kIG1ha2VfcmVjb3JkOworCisgICAgICBuY3YgOiBjb25zdGFudCBJbnRlZ2VyIDo9IEdldF9OdW1iZXIgKCJuY3YiKTsKKworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHJvdywgQ29sdW1uID0+IDgpOworICAgICAgQWRkIChTdHIgPT4gbmFtZSAmICIgbW9kZToiKTsKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHJvdywgQ29sdW1uID0+IDI0KTsKKyAgICAgIEFkZCAoQ2ggPT4gJ3wnKTsKKyAgICAgIGlmIHNraXAgLz0gMCB0aGVuCisgICAgICAgICAtLSAgcHJpbnR3KCIlKnMiLCBza2lwLCAiICIpCisgICAgICAgICBBZGQgKFN0ciA9PiBBZGEuU3RyaW5ncy5GaXhlZC4iKiIgKHNraXAsICcgJykpOworICAgICAgZW5kIGlmOworICAgICAgaWYgb25jZSB0aGVuCisgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoQXR0ciA9PiBhdHRyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoQXR0ciA9PiBhdHRyKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFkZCAoU3RyID0+ICJhYmNkZSBmZ2hpaiBrbG1ubyBwcXJzdCB1dnd4eSB6Iik7CisgICAgICBpZiBvbmNlIHRoZW4KKyAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChBdHRyID0+IGF0dHIsIE9uID0+IEZhbHNlKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIHNraXAgLz0gMCB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiBBZGEuU3RyaW5ncy5GaXhlZC4iKiIgKHNraXAsICcgJykpOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChDaCA9PiAnfCcpOworICAgICAgaWYgYXR0ciAvPSBOb3JtYWxfVmlkZW8gdGhlbgorICAgICAgICAgZGVjbGFyZSBiZWdpbgorICAgICAgICAgICAgaWYgbm90IHN1YnNldCAoc3VwZXIgPT4gU3VwcG9ydGVkX0F0dHJpYnV0ZXMsIHN1YiA9PiBhdHRyKSB0aGVuCisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIChOL0EpIik7CisgICAgICAgICAgICBlbHNpZiBuY3YgPiAwIGFuZCBoYXNfQV9DT0xPUiAoR2V0X0JhY2tncm91bmQpIHRoZW4KKyAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgIENvbG9yX1N1cHBvcnRlZF9BdHRyaWJ1dGVzIDoKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gbWFrZV9yZWNvcmQgKG5jdik7CisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgaWYgaW50ZXJzZWN0IChDb2xvcl9TdXBwb3J0ZWRfQXR0cmlidXRlcywgYXR0cikgdGhlbgorICAgICAgICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIiAoTkNWKSAiKTsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiByb3cgKyAyOworICAgZW5kIHNob3dfYXR0cjsKKworICAgcHJvY2VkdXJlIGF0dHJfZ2V0YyAoc2tpcCA6IGluIG91dCBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgZmcsIGJnIDogaW4gb3V0IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA6IG91dCBCb29sZWFuKSBpcworICAgICAgY2ggOiBjb25zdGFudCBLZXlfQ29kZSA6PSBHZXRjaGFyOworICAgICAgbmMgOiBjb25zdGFudCBDb2xvcl9OdW1iZXIgOj0gQ29sb3JfTnVtYmVyIChOdW1iZXJfT2ZfQ29sb3JzKTsKKyAgIGJlZ2luCisgICAgICByZXN1bHQgOj0gVHJ1ZTsKKyAgICAgIGlmIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nLklzX0RpZ2l0IChDaGFyYWN0ZXInVmFsIChjaCkpIHRoZW4KKyAgICAgICAgIHNraXAgOj0gY3RvaSAoQ29kZV9Ub19DaGFyIChjaCkpOworICAgICAgZWxzaWYgY2ggPSBDVFJMICgnTCcpIHRoZW4KKyAgICAgICAgIFRvdWNoOworICAgICAgICAgVG91Y2ggKEN1cnJlbnRfV2luZG93KTsKKyAgICAgICAgIFJlZnJlc2g7CisgICAgICBlbHNpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIGNhc2UgY2ggaXMKKyAgICAgICAgICAgIC0tICBOb3RlIHRoZSBtYXRoZW1hdGljYWwgZWxlZ2FuY2UgY29tcGFyZWQgdG8gdGhlIEMgdmVyc2lvbi4KKyAgICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ2YnKSA9PiBmZyA6PSAoZmcgKyAxKSBtb2QgbmM7CisgICAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdGJykgPT4gZmcgOj0gKGZnIC0gMSkgbW9kIG5jOworICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnYicpID0+IGJnIDo9IChiZyArIDEpIG1vZCBuYzsKKyAgICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0InKSA9PiBiZyA6PSAoYmcgLSAxKSBtb2QgbmM7CisgICAgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgICAgcmVzdWx0IDo9IEZhbHNlOworICAgICAgICAgZW5kIGNhc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXN1bHQgOj0gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgYXR0cl9nZXRjOworCisgICAtLSAgICAgIHBhaXJzIGNvdWxkIGJlIGRlZmluZWQgYXMgYXJyYXkgKCBDb2xvcl9OdW1iZXIoMCkgLi4gY29sb3JzIC0gMSkgb2YKKyAgIC0tICAgICAgYXJyYXkgKENvbG9yX051bWJlcigwKS4uIGNvbG9ycyAtIDEpIG9mIEJvb2xlYW47CisgICBwYWlycyA6IGFycmF5IChDb2xvcl9QYWlyJ1JhbmdlKSBvZiBCb29sZWFuIDo9IChvdGhlcnMgPT4gRmFsc2UpOworICAgZmcsIGJnIDogQ29sb3JfTnVtYmVyIDo9IEJsYWNrOyAtLSA9IDA7CisgICB4bWMgOiBjb25zdGFudCBJbnRlZ2VyIDo9IEdldF9OdW1iZXIgKCJ4bWMiKTsKKyAgIHNraXAgOiBJbnRlZ2VyIDo9IHhtYzsKKyAgIG4gOiBJbnRlZ2VyOworCisgICB1c2UgSW50X0lPOworCitiZWdpbgorICAgcGFpcnMgKDApIDo9IFRydWU7CisKKyAgIGlmIHNraXAgPCAwIHRoZW4KKyAgICAgIHNraXAgOj0gMDsKKyAgIGVuZCBpZjsKKyAgIG4gOj0gc2tpcDsKKworICAgbG9vcAorICAgICAgZGVjbGFyZQorICAgICAgICAgcm93IDogTGluZV9Qb3NpdGlvbiA6PSAyOworICAgICAgICAgbm9ybWFsIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gQmxhbmsyOworICAgICAgICAgLS0gID8/PworICAgICAgYmVnaW4KKyAgICAgICAgIC0tICByb3cgOj0gMjsgLS0gd2VpcmQsIHJvdyBpcyBzZXQgdG8gMCB3aXRob3V0IHRoaXMuCisgICAgICAgICAtLSAgVE9ETyBkZWxldGUgdGhlIGFib3ZlIGxpbmUsIGl0IHdhcyBhIGdkYiBxdWlyayB0aGF0IGNvbmZ1c2VkIG1lCisgICAgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgIGRlY2xhcmUgcGFpciA6IGNvbnN0YW50IENvbG9yX1BhaXIgOj0KKyAgICAgICAgICAgICAgQ29sb3JfUGFpciAoZmcgKiBDb2xvcl9OdW1iZXIgKE51bWJlcl9PZl9Db2xvcnMpICsgYmcpOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIC0tICBHbyB0aG91Z2ggZWFjaCBjb2xvciBwYWlyLiBBc3N1bWUgdGhhdCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAtLSAgUmVkZWZpbmFibGVfQ29sb3JfUGFpcnMgaXMgOCo4IHdpdGggcHJlZGVmaW5lZCBDb2xvcnMgMC4uNworICAgICAgICAgICAgICAgaWYgbm90IHBhaXJzIChwYWlyKSB0aGVuCisgICAgICAgICAgICAgICAgICBJbml0X1BhaXIgKHBhaXIsIGZnLCBiZyk7CisgICAgICAgICAgICAgICAgICBwYWlycyAocGFpcikgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIG5vcm1hbC5Db2xvciA6PSBwYWlyOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IG5vcm1hbCk7CisgICAgICAgICBFcmFzZTsKKworICAgICAgICAgQWRkIChMaW5lID0+IDAsIENvbHVtbiA9PiAyMCwKKyAgICAgICAgICAgICAgU3RyID0+ICJDaGFyYWN0ZXIgYXR0cmlidXRlIHRlc3QgZGlzcGxheSIpOworCisgICAgICAgICByb3cgOj0gc2hvd19hdHRyIChyb3csIG4sIChTdGFuZF9PdXQgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJTVEFORE9VVCIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFVkVSU0UiLCBUcnVlKTsKKyAgICAgICAgIHJvdyA6PSBzaG93X2F0dHIgKHJvdywgbiwgKEJvbGRfQ2hhcmFjdGVyID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9MRCIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoVW5kZXJfTGluZSA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOREVSTElORSIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoRGltX0NoYXJhY3RlciA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRJTSIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoQmxpbmsgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJCTElOSyIsIFRydWUpOworLS0gICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoUHJvdGVjdGVkX0NoYXJhY3RlciA9PiBUcnVlLAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSwgIlBST1RFQ1QiLCBUcnVlKTsKKyAgICAgICAgIHJvdyA6PSBzaG93X2F0dHIgKHJvdywgbiwgKEludmlzaWJsZV9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSksICJJTlZJU0lCTEUiLCBUcnVlKTsKKyAgICAgICAgIHJvdyA6PSBzaG93X2F0dHIgKHJvdywgbiwgTm9ybWFsX1ZpZGVvLCAiTk9STUFMIiwgRmFsc2UpOworCisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiByb3csIENvbHVtbiA9PiA4KTsKKyAgICAgICAgIGlmIHhtYyA+IC0xIHRoZW4KKyAgICAgICAgICAgIEFkZCAoU3RyID0+ICJUaGlzIHRlcm1pbmFsIGRvZXMgaGF2ZSB0aGUgbWFnaWMtY29va2llIGdsaXRjaCIpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgQWRkIChTdHIgPT4gIlRoaXMgdGVybWluYWwgZG9lcyBub3QgaGF2ZSB0aGUgbWFnaWMtY29va2llIGdsaXRjaCIpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gcm93ICsgMSwgQ29sdW1uID0+IDgpOworICAgICAgICAgQWRkIChTdHIgPT4gIkVudGVyIGEgZGlnaXQgdG8gc2V0IGdhcHMgb24gZWFjaCBzaWRlIG9mICIgJgorICAgICAgICAgICAgICAiZGlzcGxheWVkIGF0dHJpYnV0ZXMiKTsKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHJvdyArIDIsIENvbHVtbiA9PiA4KTsKKyAgICAgICAgIEFkZCAoU3RyID0+ICJeTCA9IHJlcGFpbnQiKTsKKyAgICAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgICAgZGVjbGFyZSB0bXAxIDogU3RyaW5nICgxIC4uIDEpOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICIuICBmL0YvYi9GIHRvZ2dsZSBjb2xvcnMgKCIpOworICAgICAgICAgICAgICAgUHV0ICh0bXAxLCBJbnRlZ2VyIChmZykpOworICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gdG1wMSk7CisgICAgICAgICAgICAgICBBZGQgKENoID0+ICcvJyk7CisgICAgICAgICAgICAgICBQdXQgKHRtcDEsIEludGVnZXIgKGJnKSk7CisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiB0bXAxKTsKKyAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gJyknKTsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIFJlZnJlc2g7CisgICAgICBlbmQ7CisKKyAgICAgIGRlY2xhcmUgcmVzdWx0IDogQm9vbGVhbjsgYmVnaW4KKyAgICAgICAgIGF0dHJfZ2V0YyAobiwgZmcsIGJnLCByZXN1bHQpOworICAgICAgICAgZXhpdCB3aGVuIG5vdCByZXN1bHQ7CisgICAgICBlbmQ7CisgICBlbmQgbG9vcDsKKworICAgU2V0X0JhY2tncm91bmQgKENoID0+IEJsYW5rMik7CisgICBFcmFzZTsKKyAgIEVuZF9XaW5kb3dzOworZW5kIG5jdXJzZXMyLmF0dHJfdGVzdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYXR0cl90ZXN0LmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYXR0cl90ZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM1MTQzCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hdHRyX3Rlc3QuYWRzCkBAIC0wLDAgKzEsNDIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIuYXR0cl90ZXN0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhMzVkZQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZGIKQEAgLTAsMCArMSwyNTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNSAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOword2l0aCBuY3Vyc2VzMi5nZW5lcmljUHV0czsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5jb2xvcl9lZGl0IGlzCisgICB1c2UgSW50X0lPOworCisgICB0eXBlIFJHQl9FbnVtIGlzIChSZWR4LCBHcmVlbngsIEJsdWV4KTsKKworICAgcHJvY2VkdXJlIGNoYW5nZV9jb2xvciAoY3VycmVudCA6IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkICAgOiBSR0JfRW51bTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2ViYXNlIDogQm9vbGVhbik7CisKKyAgIHByb2NlZHVyZSBjaGFuZ2VfY29sb3IgKGN1cnJlbnQgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCAgIDogUkdCX0VudW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlYmFzZSA6IEJvb2xlYW4pICBpcworICAgICAgcmVkLCBncmVlbiwgYmx1ZSA6IFJHQl9WYWx1ZTsKKyAgIGJlZ2luCisgICAgICBpZiB1c2ViYXNlIHRoZW4KKyAgICAgICAgIENvbG9yX0NvbnRlbnQgKGN1cnJlbnQsIHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgZWxzZQorICAgICAgICAgcmVkIDo9IDA7CisgICAgICAgICBncmVlbiA6PSAwOworICAgICAgICAgYmx1ZSA6PSAwOworICAgICAgZW5kIGlmOworCisgICAgICBjYXNlIGZpZWxkIGlzCisgICAgICAgICB3aGVuIFJlZHggPT4gcmVkIDo9ICByZWQgKyB2YWx1ZTsKKyAgICAgICAgIHdoZW4gR3JlZW54ID0+IGdyZWVuIDo9IGdyZWVuICsgdmFsdWU7CisgICAgICAgICB3aGVuIEJsdWV4ID0+IGJsdWUgOj0gYmx1ZSArIHZhbHVlOworICAgICAgZW5kIGNhc2U7CisKKyAgICAgIGRlY2xhcmUKKyAgICAgIGJlZ2luCisgICAgICAgICBJbml0X0NvbG9yIChjdXJyZW50LCByZWQsIGdyZWVuLCBibHVlKTsKKyAgICAgIGV4Y2VwdGlvbgorICAgICAgICAgd2hlbiBDdXJzZXNfRXhjZXB0aW9uID0+IEJlZXA7CisgICAgICBlbmQ7CisKKyAgIGVuZCBjaGFuZ2VfY29sb3I7CisKKyAgIHBhY2thZ2UgeCBpcyBuZXcgbmN1cnNlczIuZ2VuZXJpY1B1dHMgKDEwMCk7IHVzZSB4OworCisgICB0bXBiIDogeC5CUy5Cb3VuZGVkX1N0cmluZzsKKworICAgdG1wNCA6IFN0cmluZyAoMSAuLiA0KTsKKyAgIHRtcDYgOiBTdHJpbmcgKDEgLi4gNik7CisgICB0bXA4IDogU3RyaW5nICgxIC4uIDgpOworICAgLS0gIFRoaXMgd291bGQgYmUgZWFzaWVyIGlmIEFkYSBoYWQgYSBCb3VuZGVkX1N0cmluZworICAgLS0gIGRlZmluZWQgYXMgYSBjbGFzcyBpbnN0ZWFkIG9mIHRoZSBpbmZlcmlvciBnZW5lcmljIHBhY2thZ2UsCisgICAtLSAgdGhlbiBJIGNvdWxkIGRlZmluZSBQdXQsIEFkZCwgYW5kIEdldCBmb3IgdGhlbS4gQmxlY2guCisgICB2YWx1ZSA6IFJHQl9WYWx1ZSA6PSAwOworICAgcmVkLCBncmVlbiwgYmx1ZSA6IFJHQl9WYWx1ZTsKKyAgIG1heF9jb2xvcnMgOiBjb25zdGFudCBOYXR1cmFsIDo9IE51bWJlcl9PZl9Db2xvcnM7CisgICBjdXJyZW50IDogQ29sb3JfTnVtYmVyIDo9IDA7CisgICBmaWVsZCA6IFJHQl9FbnVtIDo9IFJlZHg7CisgICB0aGlzX2MgOiBLZXlfQ29kZSA6PSAwOworYmVnaW4KKyAgIFJlZnJlc2g7CisKKyAgIGZvciBpIGluIENvbG9yX051bWJlcicoMCkgLi4gQ29sb3JfTnVtYmVyIChOdW1iZXJfT2ZfQ29sb3JzKSBsb29wCisgICAgICBJbml0X1BhaXIgKENvbG9yX1BhaXIgKGkpLCBXaGl0ZSwgaSk7CisgICBlbmQgbG9vcDsKKworICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAyLCBDb2x1bW4gPT4gMCk7CisgICBBZGQgKFN0ciA9PiAiTnVtYmVyOiAiKTsKKyAgIG15UHV0ICh0bXBiLCBJbnRlZ2VyICh2YWx1ZSkpOworICAgbXlBZGQgKFN0ciA9PiB0bXBiKTsKKworICAgbG9vcAorCisgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoT24gPT4gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMjAsIFN0ciA9PiAiQ29sb3IgUkdCIFZhbHVlIEVkaXRpbmciKTsKKworICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKE9uID0+IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gKEJvbGRfQ2hhcmFjdGVyID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisKKyAgICAgIGZvciBpIGluIENvbG9yX051bWJlcicoMCkgLi4gQ29sb3JfTnVtYmVyIChOdW1iZXJfT2ZfQ29sb3JzKSBsb29wCisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAyICsgTGluZV9Qb3NpdGlvbiAoaSksIENvbHVtbiA9PiAwKTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIHRoZW4KKyAgICAgICAgICAgIEFkZCAoQ2ggPT4gJz4nKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFkZCAoQ2ggPT4gJyAnKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIC0tICBUT0RPIGlmIGkgPD0gY29sb3JfbmFtZXMnTWF4ICB0aGVuCisgICAgICAgICBQdXQgKHRtcDgsIEludGVnZXIgKGkpKTsKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoQ29sb3IgPT4gQ29sb3JfUGFpciAoaSkpOworICAgICAgICAgQWRkIChTdHIgPT4gIiAgICAgICAgIik7CisgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM7CisKKyAgICAgICAgIFJlZnJlc2g7CisKKyAgICAgICAgIENvbG9yX0NvbnRlbnQgKGksIHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgICAgQWRkIChTdHIgPT4gIiAgIFIgPSAiKTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIGFuZCBmaWVsZCA9IFJlZHggdGhlbgorICAgICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKE9uID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoU3RhbmRfT3V0ID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBQdXQgKHRtcDQsIEludGVnZXIgKHJlZCkpOworICAgICAgICAgQWRkIChTdHIgPT4gdG1wNCk7CisgICAgICAgICBpZiBjdXJyZW50ID0gaSBhbmQgZmllbGQgPSBSZWR4IHRoZW4KKyAgICAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIEFkZCAoU3RyID0+ICIgICBHID0gIik7CisgICAgICAgICBpZiBjdXJyZW50ID0gaSBhbmQgZmllbGQgPSAgR3JlZW54IHRoZW4KKyAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChPbiA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gKFN0YW5kX091dCA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgUHV0ICh0bXA0LCBJbnRlZ2VyIChncmVlbikpOworICAgICAgICAgQWRkIChTdHIgPT4gdG1wNCk7CisgICAgICAgICBpZiBjdXJyZW50ID0gaSBhbmQgZmllbGQgPSBHcmVlbnggdGhlbgorICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgQWRkIChTdHIgPT4gIiAgIEIgPSAiKTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIGFuZCBmaWVsZCA9IEJsdWV4IHRoZW4KKyAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChPbiA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gKFN0YW5kX091dCA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgUHV0ICh0bXA0LCBJbnRlZ2VyIChibHVlKSk7CisgICAgICAgICBBZGQgKFN0ciA9PiB0bXA0KTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIGFuZCBmaWVsZCA9IEJsdWV4IHRoZW4KKyAgICAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKKyAgICAgICAgIEFkZCAoY2ggPT4gJyknKTsKKyAgICAgIGVuZCBsb29wOworICAgICAgQWRkIChMaW5lID0+IExpbmVfUG9zaXRpb24gKE51bWJlcl9PZl9Db2xvcnMgKyAzKSwgQ29sdW1uID0+IDAsCisgICAgICAgICAgIFN0ciA9PiAiVXNlIHVwL2Rvd24gdG8gc2VsZWN0IGEgY29sb3IsIGxlZnQvcmlnaHQgdG8gY2hhbmdlICIgJgorICAgICAgICAgICAiZmllbGRzLiIpOworICAgICAgQWRkIChMaW5lID0+IExpbmVfUG9zaXRpb24gKE51bWJlcl9PZl9Db2xvcnMgKyA0KSwgQ29sdW1uID0+IDAsCisgICAgICAgICAgIFN0ciA9PiAiTW9kaWZ5IGZpZWxkIGJ5IHR5cGluZyBubm49LCBubm4tLCBvciBubm4rLiAgPyBmb3IgaGVscC4iKTsKKworICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMiArIExpbmVfUG9zaXRpb24gKGN1cnJlbnQpLCBDb2x1bW4gPT4gMCk7CisKKyAgICAgIHRoaXNfYyA6PSBHZXRjaGFyOworICAgICAgaWYgSXNfRGlnaXQgKHRoaXNfYykgdGhlbgorICAgICAgICAgdmFsdWUgOj0gMDsKKyAgICAgIGVuZCBpZjsKKworICAgICAgY2FzZSB0aGlzX2MgaXMKKyAgICAgICAgIHdoZW4gS0VZX1VQID0+CisgICAgICAgICAgICBjdXJyZW50IDo9IChjdXJyZW50IC0gMSkgbW9kIENvbG9yX051bWJlciAobWF4X2NvbG9ycyk7CisgICAgICAgICB3aGVuIEtFWV9ET1dOID0+CisgICAgICAgICAgICBjdXJyZW50IDo9IChjdXJyZW50ICsgMSkgbW9kIENvbG9yX051bWJlciAobWF4X2NvbG9ycyk7CisgICAgICAgICB3aGVuIEtFWV9SSUdIVCA9PgorICAgICAgICAgICAgZmllbGQgOj0gUkdCX0VudW0nVmFsICgoUkdCX0VudW0nUG9zIChmaWVsZCkgKyAxKSBtb2QgMyk7CisgICAgICAgICB3aGVuIEtFWV9MRUZUID0+CisgICAgICAgICAgICBmaWVsZCA6PSBSR0JfRW51bSdWYWwgKChSR0JfRW51bSdQb3MgKGZpZWxkKSAtIDEpIG1vZCAzKTsKKyAgICAgICAgIHdoZW4KKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzAnKSB8CisgICAgICAgICAgIENoYXJhY3RlcidQb3MgKCcxJykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnMicpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzMnKSB8CisgICAgICAgICAgIENoYXJhY3RlcidQb3MgKCc0JykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnNScpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzYnKSB8CisgICAgICAgICAgIENoYXJhY3RlcidQb3MgKCc3JykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnOCcpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzknKSAgPT4KKyAgICAgICAgICAgIHZhbHVlIDo9IHZhbHVlICogMTAgKyBSR0JfVmFsdWUgKGN0b2kgKENvZGVfVG9fQ2hhciAodGhpc19jKSkpOworCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCcrJykgPT4KKyAgICAgICAgICAgIGNoYW5nZV9jb2xvciAoY3VycmVudCwgZmllbGQsICB2YWx1ZSwgVHJ1ZSk7CisKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJy0nKSA9PgorICAgICAgICAgICAgY2hhbmdlX2NvbG9yIChjdXJyZW50LCBmaWVsZCwgLXZhbHVlLCBUcnVlKTsKKworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnPScpID0+CisgICAgICAgICAgICBjaGFuZ2VfY29sb3IgKGN1cnJlbnQsIGZpZWxkLCAgdmFsdWUsIEZhbHNlKTsKKworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnPycpID0+CisgICAgICAgICAgICBFcmFzZTsKKyAgICAgICAgICAgIFAgKCIgICAgICAgICAgICAgICAgICAgICAgUkdCIFZhbHVlIEVkaXRpbmcgSGVscCIpOworICAgICAgICAgICAgUCAoIiIpOworICAgICAgICAgICAgUCAoIllvdSBhcmUgaW4gdGhlIFJHQiB2YWx1ZSBlZGl0b3IuICBVc2UgdGhlIGFycm93IGtleXMgdG8gIiAmCisgICAgICAgICAgICAgICAic2VsZWN0IG9uZSBvZiIpOworICAgICAgICAgICAgUCAoInRoZSBmaWVsZHMgaW4gb25lIG9mIHRoZSBSR0IgdHJpcGxlcyBvZiB0aGUgY3VycmVudCBjb2xvcnM7IiAmCisgICAgICAgICAgICAgICAiIHRoZSBvbmUiKTsKKyAgICAgICAgICAgIFAgKCJjdXJyZW50bHkgc2VsZWN0ZWQgd2lsbCBiZSByZXZlcnNlLXZpZGVvIGhpZ2hsaWdodGVkLiIpOworICAgICAgICAgICAgUCAoIiIpOworICAgICAgICAgICAgUCAoIlRvIGNoYW5nZSBhIGZpZWxkLCBlbnRlciB0aGUgZGlnaXRzIG9mIHRoZSBuZXcgdmFsdWU7IHRoZXkiICYKKyAgICAgICAgICAgICAgICIgYXJlIGVjaG9lZCIpOworICAgICAgICAgICAgUCAoImFzIGVudGVyZWQuICBGaW5pc2ggYnkgdHlwaW5nIGA9Jy4gIFRoZSBjaGFuZ2Ugd2lsbCB0YWtlIiAmCisgICAgICAgICAgICAgICAiIGVmZmVjdCBpbnN0YW50bHkuIik7CisgICAgICAgICAgICBQICgiVG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBhIHZhbHVlLCB1c2UgdGhlIHNhbWUgcHJvY2VkdXJlLCIgJgorICAgICAgICAgICAgICAgIiBidXQgZmluaXNoIik7CisgICAgICAgICAgICBQICgid2l0aCBhIGArJyBvciBgLScuIik7CisgICAgICAgICAgICBQICgiIik7CisgICAgICAgICAgICBQICgiVG8gcXVpdCwgZG8gYHgnIG9yICdxJyIpOworCisgICAgICAgICAgICBQYXVzZTsKKyAgICAgICAgICAgIEVyYXNlOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgncScpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ3gnKSA9PgorICAgICAgICAgICAgbnVsbDsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICBCZWVwOworICAgICAgZW5kIGNhc2U7CisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lcyAtIDIsIENvbHVtbiA9PiAwKTsKKyAgICAgIFB1dCAodG1wNiwgSW50ZWdlciAodmFsdWUpKTsKKyAgICAgIEFkZCAoU3RyID0+ICJOdW1iZXI6ICIgJiB0bXA2KTsKKworICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICBleGl0IHdoZW4gdGhpc19jID0gQ2hhcmFjdGVyJ1BvcyAoJ3gnKSBvcgorICAgICAgICB0aGlzX2MgPSBDaGFyYWN0ZXInUG9zICgncScpOworICAgZW5kIGxvb3A7CisKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIuY29sb3JfZWRpdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZHMgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOGUzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5jb2xvcl9lZGl0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl90ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmNmM4MwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfdGVzdC5hZGIKQEAgLTAsMCArMSwxNjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMyAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6MTcgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBBZGEuU3RyaW5ncy5GaXhlZDsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmNvbG9yX3Rlc3QgaXMKKyAgIHVzZSBJbnRfSU87CisKKyAgIHByb2NlZHVyZSBzaG93X2NvbG9yX25hbWUgKHksIHggOiBJbnRlZ2VyOyBjb2xvciA6IEludGVnZXIpOworCisgICBjb2xvcl9uYW1lcyA6IGNvbnN0YW50IGFycmF5ICgwIC4uIDE1KSBvZiBTdHJpbmcgKDEgLi4gNykgOj0KKyAgICAgKAorICAgICAgImJsYWNrICAiLAorICAgICAgInJlZCAgICAiLAorICAgICAgImdyZWVuICAiLAorICAgICAgInllbGxvdyAiLAorICAgICAgImJsdWUgICAiLAorICAgICAgIm1hZ2VudGEiLAorICAgICAgImN5YW4gICAiLAorICAgICAgIndoaXRlICAiLAorICAgICAgIkJMQUNLICAiLAorICAgICAgIlJFRCAgICAiLAorICAgICAgIkdSRUVOICAiLAorICAgICAgIllFTExPVyAiLAorICAgICAgIkJMVUUgICAiLAorICAgICAgIk1BR0VOVEEiLAorICAgICAgIkNZQU4gICAiLAorICAgICAgIldISVRFICAiCisgICAgICApOworCisgICBwcm9jZWR1cmUgc2hvd19jb2xvcl9uYW1lICh5LCB4IDogSW50ZWdlcjsgY29sb3IgOiBJbnRlZ2VyKSBpcworICAgICAgdG1wNSA6IFN0cmluZyAoMSAuLiA1KTsKKyAgIGJlZ2luCisgICAgICBpZiBOdW1iZXJfT2ZfQ29sb3JzID4gOCB0aGVuCisKKyAgICAgICAgIFB1dCAodG1wNSwgY29sb3IpOworICAgICAgICAgQWRkIChMaW5lID0+IExpbmVfUG9zaXRpb24gKHkpLCBDb2x1bW4gPT4gQ29sdW1uX1Bvc2l0aW9uICh4KSwKKyAgICAgICAgICAgICAgU3RyID0+IHRtcDUpOworICAgICAgZWxzZQorICAgICAgICAgQWRkIChMaW5lID0+IExpbmVfUG9zaXRpb24gKHkpLCBDb2x1bW4gPT4gQ29sdW1uX1Bvc2l0aW9uICh4KSwKKyAgICAgICAgICAgICAgU3RyID0+IGNvbG9yX25hbWVzIChjb2xvcikpOworICAgICAgZW5kIGlmOworICAgZW5kIHNob3dfY29sb3JfbmFtZTsKKworICAgdG9wLCB3aWR0aCA6IEludGVnZXI7CisgICBoZWxsbyA6IFN0cmluZyAoMSAuLiA1KTsKKyAgIC0tICB0bXAzIDogU3RyaW5nICgxIC4uIDMpOworICAgLS0gIHRtcDIgOiBTdHJpbmcgKDEgLi4gMik7CisKK2JlZ2luCisgICBSZWZyZXNoOworICAgQWRkIChTdHIgPT4gIlRoZXJlIGFyZSAiKTsKKyAgIC0tICBQdXQodG1wMywgTnVtYmVyX09mX0NvbG9ycypOdW1iZXJfT2ZfQ29sb3JzKTsKKyAgIEFkZCAoU3RyID0+IEFkYS5TdHJpbmdzLkZpeGVkLlRyaW0gKEludGVnZXInSW1hZ2UgKE51bWJlcl9PZl9Db2xvcnMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0NvbG9ycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGEuU3RyaW5ncy5MZWZ0KSk7CisgICBBZGQgKFN0ciA9PiAiIGNvbG9yIHBhaXJzIik7CisgICBBZGQgKENoID0+IG5ld2wpOworCisgICBpZiBOdW1iZXJfT2ZfQ29sb3JzID4gOCB0aGVuCisgICAgICB3aWR0aCA6PSA0OworICAgZWxzZQorICAgICAgd2lkdGggOj0gODsKKyAgIGVuZCBpZjsKKworICAgaWYgTnVtYmVyX09mX0NvbG9ycyA+IDggdGhlbgorICAgICAgaGVsbG8gOj0gIlRlc3QgIjsKKyAgIGVsc2UKKyAgICAgIGhlbGxvIDo9ICJIZWxsbyI7CisgICBlbmQgaWY7CisKKyAgIGZvciBCcmlnaHQgaW4gQm9vbGVhbiBsb29wCisgICAgICBpZiBOdW1iZXJfT2ZfQ29sb3JzID4gOCB0aGVuCisgICAgICAgICB0b3AgOj0gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgIHRvcCA6PSBCb29sZWFuJ1BvcyAoQnJpZ2h0KSAqIChOdW1iZXJfT2ZfQ29sb3JzICsgMyk7CisgICAgICBlbmQgaWY7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuOworICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAodG9wKSArIDEsIENvbHVtbiA9PiAwKTsKKyAgICAgIC0tICBQdXQodG1wMiwgTnVtYmVyX09mX0NvbG9ycyk7CisgICAgICBBZGQgKFN0ciA9PiBBZGEuU3RyaW5ncy5GaXhlZC5UcmltIChJbnRlZ2VyJ0ltYWdlIChOdW1iZXJfT2ZfQ29sb3JzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYS5TdHJpbmdzLkxlZnQpKTsKKyAgICAgIEFkZCAoQ2ggPT4gJ3gnKTsKKyAgICAgIEFkZCAoU3RyID0+IEFkYS5TdHJpbmdzLkZpeGVkLlRyaW0gKEludGVnZXInSW1hZ2UgKE51bWJlcl9PZl9Db2xvcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhLlN0cmluZ3MuTGVmdCkpOworICAgICAgQWRkIChTdHIgPT4gIiAgbWF0cml4IG9mIGZvcmVncm91bmQvYmFja2dyb3VuZCBjb2xvcnMsIGJyaWdodCAqIik7CisgICAgICBpZiBCcmlnaHQgdGhlbgorICAgICAgICAgQWRkIChTdHIgPT4gIm9uIik7CisgICAgICBlbHNlCisgICAgICAgICBBZGQgKFN0ciA9PiAib2ZmIik7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKENoID0+ICcqJyk7CisKKyAgICAgIGZvciBpIGluIDAgLi4gTnVtYmVyX09mX0NvbG9ycyAtIDEgbG9vcAorICAgICAgICAgc2hvd19jb2xvcl9uYW1lICh0b3AgKyAyLCAoaSArIDEpICogd2lkdGgsIGkpOworICAgICAgZW5kIGxvb3A7CisgICAgICBmb3IgaSBpbiAwIC4uIE51bWJlcl9PZl9Db2xvcnMgLSAxIGxvb3AKKyAgICAgICAgIHNob3dfY29sb3JfbmFtZSAodG9wICsgMyArIGksIDAsIGkpOworICAgICAgZW5kIGxvb3A7CisgICAgICBmb3IgaSBpbiAxIC4uIE51bWJlcl9PZl9Db2xvcl9QYWlycyAtIDEgbG9vcAorICAgICAgICAgSW5pdF9QYWlyIChDb2xvcl9QYWlyIChpKSwgQ29sb3JfTnVtYmVyIChpIG1vZCBOdW1iZXJfT2ZfQ29sb3JzKSwKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JfTnVtYmVyIChpIC8gTnVtYmVyX09mX0NvbG9ycykpOworICAgICAgICAgLS0gIGF0dHJvbigoYXR0cl90KSBDT0xPUl9QQUlSKGkpKSAtLSBIdWg/CisgICAgICAgICBTZXRfQ29sb3IgKFBhaXIgPT4gQ29sb3JfUGFpciAoaSkpOworICAgICAgICAgaWYgQnJpZ2h0IHRoZW4KKyAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgQWRkIChMaW5lID0+IExpbmVfUG9zaXRpb24gKHRvcCArIDMgKyAoaSAvIE51bWJlcl9PZl9Db2xvcnMpKSwKKyAgICAgICAgICAgICAgQ29sdW1uID0+IENvbHVtbl9Qb3NpdGlvbiAoKGkgbW9kIE51bWJlcl9PZl9Db2xvcnMgKyAxKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKSwKKyAgICAgICAgICAgICAgU3RyID0+IGhlbGxvKTsKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKKyAgICAgIGVuZCBsb29wOworICAgICAgaWYgTnVtYmVyX09mX0NvbG9ycyA+IDggb3IgQnJpZ2h0IHRoZW4KKyAgICAgICAgIFBhdXNlOworICAgICAgZW5kIGlmOworICAgZW5kIGxvb3A7CisKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIuY29sb3JfdGVzdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfdGVzdC5hZHMgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX3Rlc3QuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjYzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX3Rlc3QuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5jb2xvcl90ZXN0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzN2FhMAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZGIKQEAgLTAsMCArMSw0OTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNSAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhOword2l0aCBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKK3dpdGggQWRhLlN0cmluZ3M7Cit3aXRoIEFkYS5TdHJpbmdzLkJvdW5kZWQ7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5kZW1vX2Zvcm1zIGlzCisgICBwYWNrYWdlIEJTIGlzIG5ldyBBZGEuU3RyaW5ncy5Cb3VuZGVkLkdlbmVyaWNfQm91bmRlZF9MZW5ndGggKDgwKTsKKworICAgdHlwZSBteXB0ciBpcyBhY2Nlc3MgSW50ZWdlcjsKKworICAgLS0gIFRoZSBDIHZlcnNpb24gc3RvcmVzIGEgcG9pbnRlciBpbiB0aGUgdXNlcnB0ciBhbmQKKyAgIC0tICBjb252ZXJ0cyBpdCBpbnRvIGEgbG9uZyBpbnRlZ2VyLgorICAgLS0gIFRoZSBjb3JyZWN0LCBidXQgaW5jb252ZW5pZW50ICB3YXkgdG8gZG8gaXQgaXMgdG8gdXNlIGEKKyAgIC0tICBwb2ludGVyIHRvIGxvbmcgYW5kIGtlZXAgdGhlIHBvaW50ZXIgY29uc3RhbnQuCisgICAtLSAgSXQganVzdCBhZGRzIG9uZSBtZW1vcnkgcGllY2UgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgKG5vdCBkb25lIGhlcmUpCisKKyAgIHBhY2thZ2UgU3RyaW5nRGF0YSBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGEgKEludGVnZXIsIG15cHRyKTsKKworICAgZnVuY3Rpb24gZWRpdF9zZWN1cmUgKG1lIDogRmllbGQ7IGNfaW4gOiBLZXlfQ29kZSkgcmV0dXJuIEtleV9Db2RlOworICAgZnVuY3Rpb24gZm9ybV92aXJ0dWFsaXplIChmIDogRm9ybTsgdyA6IFdpbmRvdykgcmV0dXJuIEtleV9Db2RlOworICAgZnVuY3Rpb24gbXlfZm9ybV9kcml2ZXIgKGYgOiBGb3JtOyBjIDogS2V5X0NvZGUpIHJldHVybiBCb29sZWFuOworICAgZnVuY3Rpb24gbWFrZV9sYWJlbCAoZnJvdyAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgZmNvbCAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA6IFN0cmluZykgcmV0dXJuIEZpZWxkOworICAgZnVuY3Rpb24gbWFrZV9maWVsZCAoZnJvdyAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjb2wgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgICA6IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xzICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmUgOiBCb29sZWFuKSByZXR1cm4gRmllbGQ7CisgICBwcm9jZWR1cmUgZGlzcGxheV9mb3JtIChmIDogRm9ybSk7CisgICBwcm9jZWR1cmUgZXJhc2VfZm9ybSAoZiA6IEZvcm0pOworCisgICAtLSAgcHJpbnRzICcqJyBpbnN0ZWFkIG9mIGNoYXJhY3RlcnMuCisgICAtLSAgTm90IHRoYXQgdGhpcyBrZWVwcyBhIGJ1ZyBmcm9tIHRoZSBDIHZlcnNpb246CisgICAtLSAgdHlwZSBpbiB0aGUgcHNhc3dvcmQgZmllbGQgdGhlbiBtb3ZlIG9mZiBhbmQgYmFjay4KKyAgIC0tICB0aGUgY3Vyc29yIGlzIGF0IHBvc2l0aW9uIG9uZSwgYnV0CisgICAtLSAgdGhpcyBhc3N1bWVzIGl0IGFzIGF0IHRoZSBlbmQgc28gdGV4dCBnZXRzIGFwcGVuZGVkIGluc3RlYWQKKyAgIC0tICBvZiBvdmVyd3RpdHRpbmcuCisgICBmdW5jdGlvbiBlZGl0X3NlY3VyZSAobWUgOiBGaWVsZDsgY19pbiA6IEtleV9Db2RlKSByZXR1cm4gS2V5X0NvZGUgaXMKKyAgICAgIHJvd3MsIGZyb3cgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgbnJvdyA6IE5hdHVyYWw7CisgICAgICBjb2xzLCBmY29sIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgbmJ1ZiA6IEJ1ZmZlcl9OdW1iZXI7CisgICAgICBjIDogS2V5X0NvZGUgOj0gY19pbjsKKyAgICAgIGMyIDogIENoYXJhY3RlcjsKKworICAgICAgdXNlIFN0cmluZ0RhdGE7CisgICBiZWdpbgorICAgICAgSW5mbyAobWUsIHJvd3MsIGNvbHMsIGZyb3csIGZjb2wsIG5yb3csIG5idWYpOworICAgICAgLS0gIFRPRE8gICAgICAgICBpZiByZXN1bHQgPSBGb3JtX09rIGFuZCBuYnVmID4gMCB0aGVuCisgICAgICAtLSAgQyB2ZXJzaW9uIGNoZWNrZWQgdGhlIHJldHVybiB2YWx1ZQorICAgICAgLS0gIG9mIEluZm8sIHRoZSBBZGEgYmluZGluZyB0aHJvd3MgYW4gZXhjZXB0aW9uIEkgdGhpbmsuCisgICAgICBpZiBuYnVmID4gMCB0aGVuCisgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICB0ZW1wIDogQlMuQm91bmRlZF9TdHJpbmc7CisgICAgICAgICAgICB0ZW1wcyA6IFN0cmluZyAoMSAuLiAxMCk7CisgICAgICAgICAgICAtLSAgVE9ETyBHZXRfQnVmZmVyIHBvdmlkZXMgbm8gaW5mb3JtYXRpb24gb24gdGhlIGZpZWxkIGxlbmd0aD8KKyAgICAgICAgICAgIGxlbiA6IG15cHRyOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEdldF9CdWZmZXIgKG1lLCAxLCBTdHIgPT4gdGVtcHMpOworICAgICAgICAgICAgLS0gIHN0cmNweSh0ZW1wLCBmaWVsZF9idWZmZXIobWUsIDEpKTsKKyAgICAgICAgICAgIEdldF9Vc2VyX0RhdGEgKG1lLCBsZW4pOworICAgICAgICAgICAgdGVtcCA6PSBCUy5Ub19Cb3VuZGVkX1N0cmluZyAodGVtcHMgKDEgLi4gbGVuLmFsbCkpOworICAgICAgICAgICAgaWYgYyA8PSBLZXlfTWF4IHRoZW4KKyAgICAgICAgICAgICAgIGMyIDo9IENvZGVfVG9fQ2hhciAoYyk7CisgICAgICAgICAgICAgICBpZiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZy5Jc19HcmFwaGljIChjMikgdGhlbgorICAgICAgICAgICAgICAgICAgQlMuQXBwZW5kICh0ZW1wLCBjMik7CisgICAgICAgICAgICAgICAgICBsZW4uYWxsIDo9IGxlbi5hbGwgKyAxOworICAgICAgICAgICAgICAgICAgU2V0X0J1ZmZlciAobWUsIDEsIEJTLlRvX1N0cmluZyAodGVtcCkpOworICAgICAgICAgICAgICAgICAgYyA6PSBDaGFyYWN0ZXInUG9zICgnKicpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgYyA6PSAwOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgY2FzZSBjIGlzCisgICAgICAgICAgICAgICAgICB3aGVuICBSRVFfQkVHX0ZJRUxEIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0NMUl9FT0YgfAorICAgICAgICAgICAgICAgICAgICBSRVFfQ0xSX0VPTCB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9ERUxfTElORSB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9ERUxfV09SRCB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9ET1dOX0NIQVIgfAorICAgICAgICAgICAgICAgICAgICBSRVFfRU5EX0ZJRUxEIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0lOU19DSEFSIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0lOU19MSU5FIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0xFRlRfQ0hBUiB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9ORVdfTElORSB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9ORVhUX1dPUkQgfAorICAgICAgICAgICAgICAgICAgICBSRVFfUFJFVl9XT1JEIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX1JJR0hUX0NIQVIgfAorICAgICAgICAgICAgICAgICAgICBSRVFfVVBfQ0hBUiA9PgorICAgICAgICAgICAgICAgICAgICAgYyA6PSAwOyAgICAgICAgIC0tIHdlIGRvbid0IHdhbnQgdG8gZG8gaW5saW5lIGVkaXRpbmcKKyAgICAgICAgICAgICAgICAgIHdoZW4gUkVRX0NMUl9GSUVMRCA9PgorICAgICAgICAgICAgICAgICAgICAgaWYgbGVuLmFsbCAvPSAwIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgOj0gQlMuVG9fQm91bmRlZF9TdHJpbmcgKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldF9CdWZmZXIgKG1lLCAxLCBCUy5Ub19TdHJpbmcgKHRlbXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbi5hbGwgOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgICAgICAgd2hlbiBSRVFfREVMX0NIQVIgfAorICAgICAgICAgICAgICAgICAgICBSRVFfREVMX1BSRVYgPT4KKyAgICAgICAgICAgICAgICAgICAgIGlmIGxlbi5hbGwgLz0gMCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBCUy5EZWxldGUgKHRlbXAsIEJTLkxlbmd0aCAodGVtcCksIEJTLkxlbmd0aCAodGVtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU2V0X0J1ZmZlciAobWUsIDEsIEJTLlRvX1N0cmluZyAodGVtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuLmFsbCA6PSBsZW4uYWxsIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IG51bGw7CisgICAgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBjOworICAgZW5kIGVkaXRfc2VjdXJlOworCisgICBtb2RlIDogS2V5X0NvZGUgOj0gUkVRX0lOU19NT0RFOworCisgICBmdW5jdGlvbiBmb3JtX3ZpcnR1YWxpemUgKGYgOiBGb3JtOyB3IDogV2luZG93KSByZXR1cm4gS2V5X0NvZGUgaXMKKyAgICAgIHR5cGUgbG9va3VwX3QgaXMgcmVjb3JkCisgICAgICAgICBjb2RlIDogS2V5X0NvZGU7CisgICAgICAgICByZXN1bHQgOiBLZXlfQ29kZTsKKyAgICAgICAgIC0tICBzaG91bGQgYmUgRm9ybV9SZXF1ZXN0X0NvZGUsIGJ1dCB3ZSBuZWVkIE1BWF9DT01NQU5EICsgMQorICAgICAgZW5kIHJlY29yZDsKKworICAgICAgbG9va3VwIDogY29uc3RhbnQgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBsb29rdXBfdCA6PQorICAgICAgICAoCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0EnKSBtb2QgMTYjMjAjLCBSRVFfTkVYVF9DSE9JQ0UKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdCJykgbW9kIDE2IzIwIywgUkVRX1BSRVZfV09SRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0MnKSBtb2QgMTYjMjAjLCBSRVFfQ0xSX0VPTAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0QnKSBtb2QgMTYjMjAjLCBSRVFfRE9XTl9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0UnKSBtb2QgMTYjMjAjLCBSRVFfRU5EX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnRicpIG1vZCAxNiMyMCMsIFJFUV9ORVhUX1BBR0UKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdHJykgbW9kIDE2IzIwIywgUkVRX0RFTF9XT1JECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnSCcpIG1vZCAxNiMyMCMsIFJFUV9ERUxfUFJFVgorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0knKSBtb2QgMTYjMjAjLCBSRVFfSU5TX0NIQVIKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdLJykgbW9kIDE2IzIwIywgUkVRX0NMUl9FT0YKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdMJykgbW9kIDE2IzIwIywgUkVRX0xFRlRfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdNJykgbW9kIDE2IzIwIywgUkVRX05FV19MSU5FCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnTicpIG1vZCAxNiMyMCMsIFJFUV9ORVhUX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnTycpIG1vZCAxNiMyMCMsIFJFUV9JTlNfTElORQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1AnKSBtb2QgMTYjMjAjLCBSRVFfUFJFVl9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1InKSBtb2QgMTYjMjAjLCBSRVFfUklHSFRfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdTJykgbW9kIDE2IzIwIywgUkVRX0JFR19GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1UnKSBtb2QgMTYjMjAjLCBSRVFfVVBfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdWJykgbW9kIDE2IzIwIywgUkVRX0RFTF9DSEFSCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnVycpIG1vZCAxNiMyMCMsIFJFUV9ORVhUX1dPUkQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdYJykgbW9kIDE2IzIwIywgUkVRX0NMUl9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1knKSBtb2QgMTYjMjAjLCBSRVFfREVMX0xJTkUKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdaJykgbW9kIDE2IzIwIywgUkVRX1BSRVZfQ0hPSUNFCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnWycpIG1vZCAxNiMyMCMsIC0tICBFU0NBUEUKKyAgICAgICAgICBGb3JtX1JlcXVlc3RfQ29kZSdMYXN0ICsgMQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgS2V5X0JhY2tzcGFjZSwgUkVRX0RFTF9QUkVWCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLRVlfRE9XTiwgUkVRX0RPV05fQ0hBUgorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgS2V5X0VuZCwgUkVRX0xBU1RfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtleV9Ib21lLCBSRVFfRklSU1RfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtFWV9MRUZULCBSRVFfTEVGVF9DSEFSCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLRVlfTEwsIFJFUV9MQVNUX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLZXlfTmV4dCwgUkVRX05FWFRfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtFWV9OUEFHRSwgUkVRX05FWFRfUEFHRQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgS0VZX1BQQUdFLCBSRVFfUFJFVl9QQUdFCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLZXlfUHJldmlvdXMsIFJFUV9QUkVWX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLRVlfUklHSFQsIFJFUV9SSUdIVF9DSEFSCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLRVlfVVAsIFJFUV9VUF9DSEFSCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnUScpIG1vZCAxNiMyMCMsIC0tICBRVUlUCisgICAgICAgICAgRm9ybV9SZXF1ZXN0X0NvZGUnTGFzdCArIDEgICAgICAtLSAgVE9ETyBNQVhfRk9STV9DT01NQU5EICsgMQorICAgICAgICAgICkKKyAgICAgICAgICk7CisKKyAgICAgIGMgOiBLZXlfQ29kZSA6PSBHZXRjaGFyICh3KTsKKyAgICAgIG1lIDogY29uc3RhbnQgRmllbGQgOj0gQ3VycmVudCAoZik7CisKKyAgIGJlZ2luCisgICAgICBpZiBjID0gQ2hhcmFjdGVyJ1BvcyAoJ10nKSBtb2QgMTYjMjAjIHRoZW4KKyAgICAgICAgIGlmIG1vZGUgPSBSRVFfSU5TX01PREUgdGhlbgorICAgICAgICAgICAgbW9kZSA6PSBSRVFfT1ZMX01PREU7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBtb2RlIDo9IFJFUV9JTlNfTU9ERTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGMgOj0gbW9kZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIGZvciBuIGluIGxvb2t1cCdSYW5nZSBsb29wCisgICAgICAgICAgICBpZiBsb29rdXAgKG4pLmNvZGUgPSBjIHRoZW4KKyAgICAgICAgICAgICAgIGMgOj0gbG9va3VwIChuKS5yZXN1bHQ7CisgICAgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICBlbmQgaWY7CisKKyAgICAgIC0tICBGb3JjZSB0aGUgZmllbGQgdGhhdCB0aGUgdXNlciBpcyB0eXBpbmcgaW50byB0byBiZSBpbiByZXZlcnNlIHZpZGVvLAorICAgICAgLS0gIHdoaWxlIHRoZSBvdGhlciBmaWVsZHMgYXJlIHNob3duIHVuZGVybGluZWQuCisgICAgICBpZiBjIDw9IEtleV9NYXggdGhlbgorICAgICAgICAgYyA6PSBlZGl0X3NlY3VyZSAobWUsIGMpOworICAgICAgICAgU2V0X0JhY2tncm91bmQgKG1lLCAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIGVsc2lmIGMgPD0gRm9ybV9SZXF1ZXN0X0NvZGUnTGFzdCB0aGVuCisgICAgICAgICBjIDo9IGVkaXRfc2VjdXJlIChtZSwgYyk7CisgICAgICAgICBTZXRfQmFja2dyb3VuZCAobWUsIChVbmRlcl9MaW5lID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIGM7CisgICBlbmQgZm9ybV92aXJ0dWFsaXplOworCisgICBmdW5jdGlvbiBteV9mb3JtX2RyaXZlciAoZiA6IEZvcm07IGMgOiBLZXlfQ29kZSkgcmV0dXJuIEJvb2xlYW4gaXMKKyAgICAgIGZsYWcgOiBjb25zdGFudCBEcml2ZXJfUmVzdWx0IDo9IERyaXZlciAoZiwgRl9WYWxpZGF0ZV9GaWVsZCk7CisgICBiZWdpbgorICAgICAgaWYgYyA9IEZvcm1fUmVxdWVzdF9Db2RlJ0xhc3QgKyAxCisgICAgICAgIGFuZCBmbGFnID0gRm9ybV9PayB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEJlZXA7CisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgbXlfZm9ybV9kcml2ZXI7CisKKyAgIGZ1bmN0aW9uIG1ha2VfbGFiZWwgKGZyb3cgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjb2wgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgOiBTdHJpbmcpIHJldHVybiBGaWVsZCBpcworICAgICAgZiA6IGNvbnN0YW50IEZpZWxkIDo9IENyZWF0ZSAoMSwgbGFiZWwnTGVuZ3RoLCBmcm93LCBmY29sLCAwLCAwKTsKKyAgICAgIG8gOiBGaWVsZF9PcHRpb25fU2V0IDo9IEdldF9PcHRpb25zIChmKTsKKyAgIGJlZ2luCisgICAgICBpZiBmIC89IE51bGxfRmllbGQgdGhlbgorICAgICAgICAgU2V0X0J1ZmZlciAoZiwgMCwgbGFiZWwpOworICAgICAgICAgby5BY3RpdmUgOj0gRmFsc2U7CisgICAgICAgICBTZXRfT3B0aW9ucyAoZiwgbyk7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gZjsKKyAgIGVuZCBtYWtlX2xhYmVsOworCisgICBmdW5jdGlvbiBtYWtlX2ZpZWxkIChmcm93ICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgZmNvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgcm93cyAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMgICA6IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSA6IEJvb2xlYW4pIHJldHVybiBGaWVsZCBpcworICAgICAgZiA6IEZpZWxkOworICAgICAgdXNlIFN0cmluZ0RhdGE7CisgICAgICBsZW4gOiBteXB0cjsKKyAgIGJlZ2luCisgICAgICBpZiBzZWN1cmUgdGhlbgorICAgICAgICAgZiA6PSBDcmVhdGUgKHJvd3MsIGNvbHMsIGZyb3csIGZjb2wsIDAsIDEpOworICAgICAgZWxzZQorICAgICAgICAgZiA6PSBDcmVhdGUgKHJvd3MsIGNvbHMsIGZyb3csIGZjb2wsIDAsIDApOworICAgICAgZW5kIGlmOworCisgICAgICBpZiBmIC89IE51bGxfRmllbGQgdGhlbgorICAgICAgICAgU2V0X0JhY2tncm91bmQgKGYsIChVbmRlcl9MaW5lID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgICAgbGVuIDo9IG5ldyBJbnRlZ2VyOworICAgICAgICAgbGVuLmFsbCA6PSAwOworICAgICAgICAgU2V0X1VzZXJfRGF0YSAoZiwgbGVuKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBmOworICAgZW5kIG1ha2VfZmllbGQ7CisKKyAgIHByb2NlZHVyZSBkaXNwbGF5X2Zvcm0gKGYgOiBGb3JtKSBpcworICAgICAgdyA6IFdpbmRvdzsKKyAgICAgIHJvd3MgOiBMaW5lX0NvdW50OworICAgICAgY29scyA6IENvbHVtbl9Db3VudDsKKyAgIGJlZ2luCisgICAgICBTY2FsZSAoZiwgcm93cywgY29scyk7CisKKyAgICAgIHcgOj0gTmV3X1dpbmRvdyAocm93cyArIDIsIGNvbHMgKyA0LCAwLCAwKTsKKyAgICAgIGlmIHcgLz0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgU2V0X1dpbmRvdyAoZiwgdyk7CisgICAgICAgICBTZXRfU3ViX1dpbmRvdyAoZiwgRGVyaXZlZF9XaW5kb3cgKHcsIHJvd3MsIGNvbHMsIDEsIDIpKTsKKyAgICAgICAgIEJveCAodyk7IC0tIDAsMAorICAgICAgICAgU2V0X0tleVBhZF9Nb2RlICh3LCBUcnVlKTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgLS0gIFRPRE8gaWYgUG9zdChmKSAvPSBGb3JtX09rIHRoZW4gaXQncyBhIHByb2NlZHVyZQorICAgICAgZGVjbGFyZQorICAgICAgYmVnaW4KKyAgICAgICAgIFBvc3QgKGYpOworICAgICAgZXhjZXB0aW9uCisgICAgICAgICB3aGVuCisgICAgICAgICAgIEV0aV9TeXN0ZW1fRXJyb3IgICAgfAorICAgICAgICAgICBFdGlfQmFkX0FyZ3VtZW50ICAgIHwKKyAgICAgICAgICAgRXRpX1Bvc3RlZCAgICAgICAgICB8CisgICAgICAgICAgIEV0aV9Db25uZWN0ZWQgICAgICAgfAorICAgICAgICAgICBFdGlfQmFkX1N0YXRlICAgICAgIHwKKyAgICAgICAgICAgRXRpX05vX1Jvb20gICAgICAgICB8CisgICAgICAgICAgIEV0aV9Ob3RfUG9zdGVkICAgICAgfAorICAgICAgICAgICBFdGlfVW5rbm93bl9Db21tYW5kIHwKKyAgICAgICAgICAgRXRpX05vX01hdGNoICAgICAgICB8CisgICAgICAgICAgIEV0aV9Ob3RfU2VsZWN0YWJsZSAgfAorICAgICAgICAgICBFdGlfTm90X0Nvbm5lY3RlZCAgIHwKKyAgICAgICAgICAgRXRpX1JlcXVlc3RfRGVuaWVkICB8CisgICAgICAgICAgIEV0aV9JbnZhbGlkX0ZpZWxkICAgfAorICAgICAgICAgICBFdGlfQ3VycmVudCAgICAgICAgID0+CisgICAgICAgICAgICBSZWZyZXNoICh3KTsKKyAgICAgIGVuZDsKKyAgICAgIC0tICBlbmQgaWY7CisgICBlbmQgZGlzcGxheV9mb3JtOworCisgICBwcm9jZWR1cmUgZXJhc2VfZm9ybSAoZiA6IEZvcm0pIGlzCisgICAgICB3IDogV2luZG93IDo9IEdldF9XaW5kb3cgKGYpOworICAgICAgcyA6IFdpbmRvdyA6PSBHZXRfU3ViX1dpbmRvdyAoZik7CisgICBiZWdpbgorICAgICAgUG9zdCAoZiwgRmFsc2UpOworICAgICAgRXJhc2UgKHcpOworICAgICAgUmVmcmVzaCAodyk7CisgICAgICBEZWxldGUgKHMpOworICAgICAgRGVsZXRlICh3KTsKKyAgIGVuZCBlcmFzZV9mb3JtOworCisgICBmaW5pc2hlZCA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICBmIDogY29uc3RhbnQgRmllbGRfQXJyYXlfQWNjZXNzIDo9IG5ldyBGaWVsZF9BcnJheSAoMSAuLiAxMik7CisgICBzZWN1cmUgOiBGaWVsZDsKKyAgIG15Zm9ybSA6IEZvcm07CisgICB3IDogV2luZG93OworICAgYyA6IEtleV9Db2RlOworICAgcmVzdWx0IDogRHJpdmVyX1Jlc3VsdDsKK2JlZ2luCisgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAxOCwgQ29sdW1uID0+IDApOworICAgQWRkIChTdHIgPT4gIkRlZmluZWQgZm9ybS10cmF2ZXJzYWwga2V5czogICBeUS9FU0MtIGV4aXQgZm9ybSIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJeTiAgIC0tIGdvIHRvIG5leHQgZmllbGQgICAgICAgXlAgIC0tIGdvIHRvIHByZXZpb3VzIGZpZWxkIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIkhvbWUgLS0gZ28gdG8gZmlyc3QgZmllbGQgICAgICBFbmQgLS0gZ28gdG8gbGFzdCBmaWVsZCIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJeTCAgIC0tIGdvIHRvIGZpZWxkIHRvIGxlZnQgICAgXlIgIC0tIGdvIHRvIGZpZWxkIHRvIHJpZ2h0Iik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5VICAgLS0gbW92ZSB1cHdhcmQgdG8gZmllbGQgICBeRCAgLS0gbW92ZSBkb3dud2FyZCB0byBmaWVsZCIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJeVyAgIC0tIGdvIHRvIG5leHQgd29yZCAgICAgICAgXkIgIC0tIGdvIHRvIHByZXZpb3VzIHdvcmQiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiXlMgICAtLSBnbyB0byBzdGFydCBvZiBmaWVsZCAgIF5FICAtLSBnbyB0byBlbmQgb2YgZmllbGQiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiXkggICAtLSBkZWxldGUgcHJldmlvdXMgY2hhciAgIF5ZICAtLSBkZWxldGUgbGluZSIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJeRyAgIC0tIGRlbGV0ZSBjdXJyZW50IHdvcmQgICAgXkMgIC0tIGNsZWFyIHRvIGVuZCBvZiBsaW5lIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5LICAgLS0gY2xlYXIgdG8gZW5kIG9mIGZpZWxkICBeWCAgLS0gY2xlYXIgZmllbGQiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiQXJyb3cga2V5cyBtb3ZlIHdpdGhpbiBhIGZpZWxkIGFzIHlvdSB3b3VsZCBleHBlY3QuIik7CisKKyAgIEFkZCAoTGluZSA9PiA0LCBDb2x1bW4gPT4gNTcsIFN0ciA9PiAiRm9ybXMgRW50cnkgVGVzdCIpOworCisgICBSZWZyZXNoOworCisgICAtLSAgZGVzY3JpYmUgdGhlIGZvcm0KKyAgIGYgKDEpIDo9IG1ha2VfbGFiZWwgKDAsIDE1LCAiU2FtcGxlIEZvcm0iKTsKKyAgIGYgKDIpIDo9IG1ha2VfbGFiZWwgKDIsIDAsICJMYXN0IE5hbWUiKTsKKyAgIGYgKDMpIDo9IG1ha2VfZmllbGQgKDMsIDAsIDEsIDE4LCBGYWxzZSk7CisgICBmICg0KSA6PSBtYWtlX2xhYmVsICgyLCAyMCwgIkZpcnN0IE5hbWUiKTsKKyAgIGYgKDUpIDo9IG1ha2VfZmllbGQgKDMsIDIwLCAxLCAxMiwgRmFsc2UpOworICAgZiAoNikgOj0gbWFrZV9sYWJlbCAoMiwgMzQsICJNaWRkbGUgTmFtZSIpOworICAgZiAoNykgOj0gbWFrZV9maWVsZCAoMywgMzQsIDEsIDEyLCBGYWxzZSk7CisgICBmICg4KSA6PSBtYWtlX2xhYmVsICg1LCAwLCAiQ29tbWVudHMiKTsKKyAgIGYgKDkpIDo9IG1ha2VfZmllbGQgKDYsIDAsIDQsIDQ2LCBGYWxzZSk7CisgICBmICgxMCkgOj0gbWFrZV9sYWJlbCAoNSwgMjAsICJQYXNzd29yZDoiKTsKKyAgIGYgKDExKSA6PSBtYWtlX2ZpZWxkICg1LCAzMCwgMSwgOSwgVHJ1ZSk7CisgICBzZWN1cmUgOj0gZiAoMTEpOworICAgZiAoMTIpIDo9IE51bGxfRmllbGQ7CisKKyAgIG15Zm9ybSA6PSBOZXdfRm9ybSAoZik7CisKKyAgIGRpc3BsYXlfZm9ybSAobXlmb3JtKTsKKworICAgdyA6PSBHZXRfV2luZG93IChteWZvcm0pOworICAgU2V0X1Jhd19Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsgICAgIC0tICBsZXRzIHVzIHJlYWQgXk0ncworICAgd2hpbGUgbm90IGZpbmlzaGVkIGxvb3AKKyAgICAgIGMgOj0gZm9ybV92aXJ0dWFsaXplIChteWZvcm0sIHcpOworICAgICAgcmVzdWx0IDo9IERyaXZlciAobXlmb3JtLCBjKTsKKyAgICAgIGNhc2UgcmVzdWx0IGlzCisgICAgICAgICB3aGVuIEZvcm1fT2sgPT4KKyAgICAgICAgICAgIEFkZCAoTGluZSA9PiA1LCBDb2x1bW4gPT4gNTcsIFN0ciA9PiBHZXRfQnVmZmVyIChzZWN1cmUsIDEpKTsKKyAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgICAgICAgUmVmcmVzaDsKKyAgICAgICAgIHdoZW4gVW5rbm93bl9SZXF1ZXN0ID0+CisgICAgICAgICAgICBmaW5pc2hlZCA6PSBteV9mb3JtX2RyaXZlciAobXlmb3JtLCBjKTsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICBCZWVwOworICAgICAgZW5kIGNhc2U7CisgICBlbmQgbG9vcDsKKworICAgZXJhc2VfZm9ybSAobXlmb3JtKTsKKworICAgLS0gIFRPRE8gRnJlZV9Gb3JtKG15Zm9ybSk7CisgICAtLSAgICAgZm9yIChjID0gMDsgZltjXSAhPSAwOyBjKyspIGZyZWVfZmllbGQoZltjXSk7CisgICBTZXRfUmF3X01vZGUgKFN3aXRjaE9uID0+IEZhbHNlKTsKKyAgIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKworZW5kIG5jdXJzZXMyLmRlbW9fZm9ybXM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWJhYTAxCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIuZGVtb19mb3JtczsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYWQuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyYjhiNwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYWQuYWRiCkBAIC0wLDAgKzEsNjc1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjcgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ3OjA2ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKword2l0aCBJbnRlcmZhY2VzLkM7Cit3aXRoIFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzOword2l0aCBTeXN0ZW0uQWRkcmVzc19Ub19BY2Nlc3NfQ29udmVyc2lvbnM7CisKK3dpdGggQWRhLlRleHRfSU87CistLSAgd2l0aCBBZGEuUmVhbF9UaW1lOyB1c2UgQWRhLlJlYWxfVGltZTsKKy0tICBUT0RPIGlzIHRoZXJlIGEgd2F5IHRvIHVzZSBSZWFsX1RpbWUgb3IgQWRhLkNhbGVuZGFyIGluIHBsYWNlIG9mCistLSAgZ2V0dGltZW9mZGF5PworCistLSAgRGVtb25zdHJhdGUgcGFkcy4KK3Byb2NlZHVyZSBuY3Vyc2VzMi5kZW1vX3BhZCBpcworCisgICB0eXBlIHRpbWVzdHJ1Y3QgaXMgcmVjb3JkCisgICAgICBzZWNvbmRzIDogSW50ZWdlcjsKKyAgICAgIG1pY3Jvc2Vjb25kcyA6IEludGVnZXI7CisgICBlbmQgcmVjb3JkOworCisgICB0eXBlIG15ZnVuYyBpcyBhY2Nlc3MgZnVuY3Rpb24gKHcgOiBXaW5kb3cpIHJldHVybiBLZXlfQ29kZTsKKworICAgZnVuY3Rpb24gIGdldHRpbWUgcmV0dXJuIHRpbWVzdHJ1Y3Q7CisgICBwcm9jZWR1cmUgZG9faF9saW5lICh5ICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB4ICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB0byA6IENvbHVtbl9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgZG9fdl9saW5lICh5ICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB4ICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB0byA6IExpbmVfUG9zaXRpb24pOworICAgZnVuY3Rpb24gIHBhZGdldGNoICh3aW4gOiBXaW5kb3cpIHJldHVybiBLZXlfQ29kZTsKKyAgIGZ1bmN0aW9uICBwYW5uZXJfbGVnZW5kIChsaW5lIDogTGluZV9Qb3NpdGlvbikgcmV0dXJuIEJvb2xlYW47CisgICBwcm9jZWR1cmUgcGFubmVyX2xlZ2VuZCAobGluZSA6IExpbmVfUG9zaXRpb24pOworICAgcHJvY2VkdXJlIHBhbm5lcl9oX2NsZWFudXAgKGZyb21feSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV94IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX3ggICA6IENvbHVtbl9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgcGFubmVyX3ZfY2xlYW51cCAoZnJvbV95IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3ggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9feSAgIDogTGluZV9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgcGFubmVyIChwYWQgICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICB0b3BfeHAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICB0b3BfeXAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgcG9ydHlwIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHBvcnR4cCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHBnZXRjICA6IG15ZnVuYyk7CisKKyAgIGZ1bmN0aW9uIGdldHRpbWUgcmV0dXJuIHRpbWVzdHJ1Y3QgaXMKKworICAgICAgcmV0dmFsIDogdGltZXN0cnVjdDsKKworICAgICAgdXNlIEludGVyZmFjZXMuQzsKKyAgICAgIHR5cGUgdGltZXZhbCBpcyByZWNvcmQKKyAgICAgICAgIHR2X3NlYyA6IGxvbmc7CisgICAgICAgICB0dl91c2VjIDogbG9uZzsKKyAgICAgIGVuZCByZWNvcmQ7CisgICAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgdGltZXZhbCk7CisKKyAgICAgIC0tICAgICAgVE9ETyAgICBmdW5jdGlvbiBmcm9tX3RpbWV2YWwgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbigKKyAgICAgIC0tICAgICAgICAgICAgICAgICAgdGltZXZhbF9hLCBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3MpOworICAgICAgLS0gIHNob3VsZCBJbnRlcmZhY2VzLkMuUG9pbnRlcnMgYmUgdXNlZCBoZXJlPworCisgICAgICBwYWNrYWdlIG15UCBpcyBuZXcgU3lzdGVtLkFkZHJlc3NfVG9fQWNjZXNzX0NvbnZlcnNpb25zICh0aW1ldmFsKTsKKyAgICAgIHVzZSBteVA7CisKKyAgICAgIHQgOiBjb25zdGFudCBPYmplY3RfUG9pbnRlciA6PSBuZXcgdGltZXZhbDsKKworICAgICAgZnVuY3Rpb24gZ2V0dGltZW9mZGF5CisgICAgICAgIChUUCA6IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgICAgICAgIFRaUCA6IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzcykgcmV0dXJuIGludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIGdldHRpbWVvZmRheSwgImdldHRpbWVvZmRheSIpOworICAgICAgdG1wIDogaW50OworICAgYmVnaW4KKyAgICAgIHRtcCA6PSBnZXR0aW1lb2ZkYXkgKFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLlRvX0ludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChteVAuVG9fQWRkcmVzcyAodCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuVG9fSW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG15UC5Ub19BZGRyZXNzIChudWxsKSkpOworICAgICAgaWYgdG1wIDwgMCB0aGVuCisgICAgICAgICByZXR2YWwuc2Vjb25kcyA6PSAwOworICAgICAgICAgcmV0dmFsLm1pY3Jvc2Vjb25kcyA6PSAwOworICAgICAgZWxzZQorICAgICAgICAgcmV0dmFsLnNlY29uZHMgOj0gSW50ZWdlciAodC50dl9zZWMpOworICAgICAgICAgcmV0dmFsLm1pY3Jvc2Vjb25kcyA6PSBJbnRlZ2VyICh0LnR2X3VzZWMpOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIHJldHZhbDsKKyAgIGVuZCBnZXR0aW1lOworCisgICAtLSAgaW4gQywgVGhlIGJlaGF2aW9yIG9mIG12aGxpbmUsIG12dmxpbmUgZm9yIG5lZ2F0aXZlL3plcm8gbGVuZ3RoIGlzCisgICAtLSAgdW5zcGVjaWZpZWQsIHRob3VnaCB3ZSBjYW4gcmVseSBvbiBuZWdhdGl2ZSB4L3kgdmFsdWVzIHRvIHN0b3AgdGhlCisgICAtLSAgbWFjcm8uIEV4Y2VwdCBBZGEgbWFrZXMgTGluZV9Qb3NpdGlvbigtMSkgPSBOYXR1cmFsIC0gMSBzbyBmb3JnZXQgaXQuCisgICBwcm9jZWR1cmUgZG9faF9saW5lICh5ICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB4ICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB0byA6IENvbHVtbl9Qb3NpdGlvbikgaXMKKyAgIGJlZ2luCisgICAgICBpZiB0byA+IHggdGhlbgorICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4geSwgQ29sdW1uID0+IHgpOworICAgICAgICAgSG9yaXpvbnRhbF9MaW5lIChMaW5lX1NpemUgPT4gTmF0dXJhbCAodG8gLSB4KSwgTGluZV9TeW1ib2wgPT4gYyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgZG9faF9saW5lOworCisgICBwcm9jZWR1cmUgZG9fdl9saW5lICh5ICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB4ICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB0byA6IExpbmVfUG9zaXRpb24pIGlzCisgICBiZWdpbgorICAgICAgaWYgdG8gPiB5IHRoZW4KKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHksIENvbHVtbiA9PiB4KTsKKyAgICAgICAgIFZlcnRpY2FsX0xpbmUgKExpbmVfU2l6ZSA9PiBOYXR1cmFsICh0byAtIHkpLCBMaW5lX1N5bWJvbCA9PiBjKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBkb192X2xpbmU7CisKKyAgIGZ1bmN0aW9uIHBhZGdldGNoICh3aW4gOiBXaW5kb3cpIHJldHVybiBLZXlfQ29kZSBpcworICAgICAgYyA6IEtleV9Db2RlOworICAgICAgYzIgOiBDaGFyYWN0ZXI7CisgICBiZWdpbgorICAgICAgYyA6PSBHZXRjaGFyICh3aW4pOworICAgICAgYzIgOj0gQ29kZV9Ub19DaGFyIChjKTsKKworICAgICAgY2FzZSBjMiBpcworICAgICAgICAgd2hlbiAnIScgPT4KKyAgICAgICAgICAgIFNoZWxsT3V0IChGYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gS2V5X1JlZnJlc2g7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidWYWwgKENoYXJhY3RlcidQb3MgKCdyJykgbW9kIDE2IzIwIykgPT4gLS0gIENUUkwoJ3InKQorICAgICAgICAgICAgRW5kX1dpbmRvd3M7CisgICAgICAgICAgICBSZWZyZXNoOworICAgICAgICAgICAgcmV0dXJuIEtleV9SZWZyZXNoOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInVmFsIChDaGFyYWN0ZXInUG9zICgnbCcpIG1vZCAxNiMyMCMpID0+IC0tICBDVFJMKCdsJykKKyAgICAgICAgICAgIHJldHVybiBLZXlfUmVmcmVzaDsKKyAgICAgICAgIHdoZW4gJ1UnID0+CisgICAgICAgICAgICByZXR1cm4gS2V5X0N1cnNvcl9VcDsKKyAgICAgICAgIHdoZW4gJ0QnID0+CisgICAgICAgICAgICByZXR1cm4gS2V5X0N1cnNvcl9Eb3duOworICAgICAgICAgd2hlbiAnUicgPT4KKyAgICAgICAgICAgIHJldHVybiBLZXlfQ3Vyc29yX1JpZ2h0OworICAgICAgICAgd2hlbiAnTCcgPT4KKyAgICAgICAgICAgIHJldHVybiBLZXlfQ3Vyc29yX0xlZnQ7CisgICAgICAgICB3aGVuICcrJyA9PgorICAgICAgICAgICAgcmV0dXJuIEtleV9JbnNlcnRfTGluZTsKKyAgICAgICAgIHdoZW4gJy0nID0+CisgICAgICAgICAgICByZXR1cm4gS2V5X0RlbGV0ZV9MaW5lOworICAgICAgICAgd2hlbiAnPicgPT4KKyAgICAgICAgICAgIHJldHVybiBLZXlfSW5zZXJ0X0NoYXI7CisgICAgICAgICB3aGVuICc8JyA9PgorICAgICAgICAgICAgcmV0dXJuIEtleV9EZWxldGVfQ2hhcjsKKyAgICAgICAgICAgIC0tICB3aGVuIEVSUj0+ICAgICAgICAgICAgICAgICAgIC8qIEZBTExUSFJVICovCisgICAgICAgICB3aGVuICdxJyA9PgorICAgICAgICAgICAgcmV0dXJuIChLZXlfRXhpdCk7CisgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgcmV0dXJuIChjKTsKKyAgICAgIGVuZCBjYXNlOworICAgZW5kIHBhZGdldGNoOworCisgICBzaG93X3Bhbm5lcl9sZWdlbmQgOiBCb29sZWFuIDo9IFRydWU7CisKKyAgIGZ1bmN0aW9uIHBhbm5lcl9sZWdlbmQgKGxpbmUgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgbGVnZW5kIDogY29uc3RhbnQgYXJyYXkgKDAgLi4gMykgb2YgU3RyaW5nICgxIC4uIDYxKSA6PQorICAgICAgICAoCisgICAgICAgICAiVXNlIGFycm93IGtleXMgKG9yIFUsRCxMLFIpIHRvIHBhbiwgcSB0byBxdWl0ICg/LHQscyBmbGFncykgICIsCisgICAgICAgICAiVXNlICEgdG8gc2hlbGwtb3V0LiAgVG9nZ2xlIGxlZ2VuZDo/LCB0aW1lcjp0LCBzY3JvbGwgbWFyazpzLiIsCisgICAgICAgICAiVXNlICssLSAob3IgaixrKSB0byBncm93L3NocmluayB0aGUgcGFubmVyIHZlcnRpY2FsbHkuICAgICAgICIsCisgICAgICAgICAiVXNlIDwsPiAob3IgaCxsKSB0byBncm93L3NocmluayB0aGUgcGFubmVyIGhvcml6b250YWxseS4gICAgICIpOworICAgICAgbGVnZW5kc2l6ZSA6IGNvbnN0YW50IDo9IDQ7CisKKyAgICAgIG4gOiBjb25zdGFudCBJbnRlZ2VyIDo9IGxlZ2VuZHNpemUgLSBJbnRlZ2VyIChMaW5lcyAtIGxpbmUpOworICAgYmVnaW4KKyAgICAgIGlmIGxpbmUgPCBMaW5lcyBhbmQgbiA+PSAwIHRoZW4KKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IGxpbmUsIENvbHVtbiA9PiAwKTsKKyAgICAgICAgIGlmIHNob3dfcGFubmVyX2xlZ2VuZCB0aGVuCisgICAgICAgICAgICBBZGQgKFN0ciA9PiBsZWdlbmQgKG4pKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgICAgcmV0dXJuIHNob3dfcGFubmVyX2xlZ2VuZDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBGYWxzZTsKKyAgIGVuZCBwYW5uZXJfbGVnZW5kOworCisgICBwcm9jZWR1cmUgcGFubmVyX2xlZ2VuZCAobGluZSA6IExpbmVfUG9zaXRpb24pIGlzCisgICBiZWdpbgorICAgICAgaWYgbm90IHBhbm5lcl9sZWdlbmQgKGxpbmUpIHRoZW4KKyAgICAgICAgIEJlZXA7CisgICAgICBlbmQgaWY7CisgICBlbmQgcGFubmVyX2xlZ2VuZDsKKworICAgcHJvY2VkdXJlIHBhbm5lcl9oX2NsZWFudXAgKGZyb21feSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV94IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX3ggICA6IENvbHVtbl9Qb3NpdGlvbikgaXMKKyAgIGJlZ2luCisgICAgICBpZiBub3QgcGFubmVyX2xlZ2VuZCAoZnJvbV95KSB0aGVuCisgICAgICAgICBkb19oX2xpbmUgKGZyb21feSwgZnJvbV94LCBCbGFuazIsIHRvX3gpOworICAgICAgZW5kIGlmOworICAgZW5kIHBhbm5lcl9oX2NsZWFudXA7CisKKyAgIHByb2NlZHVyZSBwYW5uZXJfdl9jbGVhbnVwIChmcm9tX3kgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21feCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b195ICAgOiBMaW5lX1Bvc2l0aW9uKSBpcworICAgYmVnaW4KKyAgICAgIGlmIG5vdCBwYW5uZXJfbGVnZW5kIChmcm9tX3kpIHRoZW4KKyAgICAgICAgIGRvX3ZfbGluZSAoZnJvbV95LCBmcm9tX3gsIEJsYW5rMiwgdG9feSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgcGFubmVyX3ZfY2xlYW51cDsKKworICAgcHJvY2VkdXJlIHBhbm5lciAocGFkICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgdG9wX3hwIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgdG9wX3lwIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHBvcnR5cCA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBwb3J0eHAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBwZ2V0YyAgOiBteWZ1bmMpIGlzCisKKyAgICAgIGZ1bmN0aW9uIGYgKHkgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIGZ1bmN0aW9uIGYgKHggOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBDb2x1bW5fUG9zaXRpb247CisgICAgICBmdW5jdGlvbiBncmVhdGVyICh5MSwgeTIgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gSW50ZWdlcjsKKyAgICAgIGZ1bmN0aW9uIGdyZWF0ZXIgKHgxLCB4MiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIEludGVnZXI7CisKKyAgICAgIHRvcF94IDogQ29sdW1uX1Bvc2l0aW9uIDo9IHRvcF94cDsKKyAgICAgIHRvcF95IDogTGluZV9Qb3NpdGlvbiA6PSB0b3BfeXA7CisgICAgICBwb3J0eSA6IExpbmVfUG9zaXRpb24gOj0gcG9ydHlwOworICAgICAgcG9ydHggOiBDb2x1bW5fUG9zaXRpb24gOj0gcG9ydHhwOworCisgICAgICAtLSAgZlt4XSByZXR1cm5zIG1heFt4IC0gMSwgMF0KKyAgICAgIGZ1bmN0aW9uIGYgKHkgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gTGluZV9Qb3NpdGlvbiBpcworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIHkgPiAwIHRoZW4KKyAgICAgICAgICAgIHJldHVybiB5IC0gMTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB5OyAtLSAwCisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgZjsKKworICAgICAgZnVuY3Rpb24gZiAoeCA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIENvbHVtbl9Qb3NpdGlvbiBpcworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIHggPiAwIHRoZW4KKyAgICAgICAgICAgIHJldHVybiB4IC0gMTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB4OyAtLSAwCisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgZjsKKworICAgICAgZnVuY3Rpb24gZ3JlYXRlciAoeTEsIHkyIDogTGluZV9Qb3NpdGlvbikgcmV0dXJuIEludGVnZXIgaXMKKyAgICAgIGJlZ2luCisgICAgICAgICBpZiB5MSA+IHkyIHRoZW4KKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgZ3JlYXRlcjsKKworICAgICAgZnVuY3Rpb24gZ3JlYXRlciAoeDEsIHgyIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gSW50ZWdlciBpcworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIHgxID4geDIgdGhlbgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBncmVhdGVyOworCisgICAgICBweW1heCA6IExpbmVfUG9zaXRpb247CisgICAgICBiYXNleSA6IExpbmVfUG9zaXRpb24gOj0gMDsKKyAgICAgIHB4bWF4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgYmFzZXggOiBDb2x1bW5fUG9zaXRpb24gOj0gMDsKKyAgICAgIGMgOiBLZXlfQ29kZTsKKyAgICAgIHNjcm9sbGVycyA6IEJvb2xlYW4gOj0gVHJ1ZTsKKyAgICAgIGJlZm9yZSwgYWZ0ZXIgOiB0aW1lc3RydWN0OworICAgICAgdGltaW5nIDogQm9vbGVhbiA6PSBUcnVlOworCisgICAgICBwYWNrYWdlIGZsb2F0aW8gaXMgbmV3IEFkYS5UZXh0X0lPLkZsb2F0X0lPIChMb25nX0Zsb2F0KTsKKyAgIGJlZ2luCisgICAgICBHZXRfU2l6ZSAocGFkLCBweW1heCwgcHhtYXgpOworICAgICAgQWxsb3dfU2Nyb2xsaW5nIChNb2RlID0+IEZhbHNlKTsgLS0gd2UgZG9uJ3Qgd2FudCBzdGRzY3IgdG8gc2Nyb2xsIQorCisgICAgICBjIDo9IEtleV9SZWZyZXNoOworICAgICAgbG9vcAorICAgICAgICAgLS0gIER1cmluZyBzaGVsbC1vdXQsIHRoZSB1c2VyIG1heSBoYXZlIHJlc2l6ZWQgdGhlIHdpbmRvdy4gIEFkanVzdAorICAgICAgICAgLS0gIHRoZSBwb3J0IHNpemUgb2YgdGhlIHBhZCB0byBhY2NvbW1vZGF0ZSB0aGlzLiAgTmN1cnNlcworICAgICAgICAgLS0gIGF1dG9tYXRpY2FsbHkgcmVzaXplcyBhbGwgb2YgdGhlIG5vcm1hbCB3aW5kb3dzIHRvIGZpdCBvbiB0aGUKKyAgICAgICAgIC0tICBuZXcgc2NyZWVuLgorICAgICAgICAgaWYgdG9wX3ggPiBDb2x1bW5zIHRoZW4KKyAgICAgICAgICAgIHRvcF94IDo9IENvbHVtbnM7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBpZiBwb3J0eCA+IENvbHVtbnMgdGhlbgorICAgICAgICAgICAgcG9ydHggOj0gQ29sdW1uczsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGlmIHRvcF95ID4gTGluZXMgdGhlbgorICAgICAgICAgICAgdG9wX3kgOj0gTGluZXM7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBpZiBwb3J0eSA+IExpbmVzIHRoZW4KKyAgICAgICAgICAgIHBvcnR5IDo9IExpbmVzOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBjYXNlIGMgaXMKKyAgICAgICAgICAgIHdoZW4gS2V5X1JlZnJlc2ggfCBDaGFyYWN0ZXInUG9zICgnPycpID0+CisgICAgICAgICAgICAgICBpZiBjID0gS2V5X1JlZnJlc2ggdGhlbgorICAgICAgICAgICAgICAgICAgRXJhc2U7CisgICAgICAgICAgICAgICBlbHNlIC0tICc/JworICAgICAgICAgICAgICAgICAgc2hvd19wYW5uZXJfbGVnZW5kIDo9IG5vdCBzaG93X3Bhbm5lcl9sZWdlbmQ7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDQpOworICAgICAgICAgICAgICAgcGFubmVyX2xlZ2VuZCAoTGluZXMgLSAzKTsKKyAgICAgICAgICAgICAgIHBhbm5lcl9sZWdlbmQgKExpbmVzIC0gMik7CisgICAgICAgICAgICAgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDEpOworICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgndCcpID0+CisgICAgICAgICAgICAgICB0aW1pbmcgOj0gbm90IHRpbWluZzsKKyAgICAgICAgICAgICAgIGlmIG5vdCB0aW1pbmcgdGhlbgorICAgICAgICAgICAgICAgICAgcGFubmVyX2xlZ2VuZCAoTGluZXMgLSAxKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ3MnKSA9PgorICAgICAgICAgICAgICAgc2Nyb2xsZXJzIDo9IG5vdCBzY3JvbGxlcnM7CisKKyAgICAgICAgICAgICAgIC0tICBNb3ZlIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHBhZCwga2VlcGluZyB0aGUKKyAgICAgICAgICAgICAgIC0tICBib3R0b20tcmlnaHQgY29ybmVyIGZpeGVkLgorICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnaCcpID0+CisgICAgICAgICAgICAgICAtLSAgaW5jcmVhc2UtY29sdW1uczogbW92ZSBsZWZ0IGVkZ2UgdG8gbGVmdAorICAgICAgICAgICAgICAgaWYgdG9wX3ggPSAwIHRoZW4KKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwYW5uZXJfdl9jbGVhbnVwICh0b3BfeSwgdG9wX3gsIHBvcnR5KTsKKyAgICAgICAgICAgICAgICAgIHRvcF94IDo9IHRvcF94IC0gMTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnaicpID0+CisgICAgICAgICAgICAgICAtLSAgZGVjcmVhc2UtbGluZXM6IG1vdmUgdG9wLWVkZ2UgZG93bgorICAgICAgICAgICAgICAgaWYgdG9wX3kgPj0gcG9ydHkgdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmIHRvcF95IC89IDAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgcGFubmVyX2hfY2xlYW51cCAodG9wX3kgLSAxLCBmICh0b3BfeCksIHBvcnR4KTsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIHRvcF95IDo9IHRvcF95ICsgMTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ2snKSA9PgorICAgICAgICAgICAgICAgLS0gIGluY3JlYXNlLWxpbmVzOiBtb3ZlIHRvcC1lZGdlIHVwCisgICAgICAgICAgICAgICBpZiB0b3BfeSA9IDAgdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHRvcF95IDo9IHRvcF95IC0gMTsKKyAgICAgICAgICAgICAgICAgIHBhbm5lcl9oX2NsZWFudXAgKHRvcF95LCB0b3BfeCwgcG9ydHgpOworICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdsJykgPT4KKyAgICAgICAgICAgICAgIC0tICBkZWNyZWFzZS1jb2x1bW5zOiBtb3ZlIGxlZnQtZWRnZSB0byByaWdodAorICAgICAgICAgICAgICAgaWYgdG9wX3ggPj0gcG9ydHggdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmIHRvcF94IC89IDAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgcGFubmVyX3ZfY2xlYW51cCAoZiAodG9wX3kpLCB0b3BfeCAtIDEsIHBvcnR5KTsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIHRvcF94IDo9IHRvcF94ICsgMTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgICAgLS0gIE1vdmUgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgdGhlIHBhZCwga2VlcGluZyB0aGUKKyAgICAgICAgICAgICAgIC0tICB0b3AtbGVmdCBjb3JuZXIgZml4ZWQuCisgICAgICAgICAgICB3aGVuIEtleV9JbnNlcnRfQ2hhciA9PgorICAgICAgICAgICAgICAgLS0gIGluY3JlYXNlLWNvbHVtbnM6IG1vdmUgcmlnaHQtZWRnZSB0byByaWdodAorICAgICAgICAgICAgICAgaWYgcG9ydHggPj0gcHhtYXggb3IgcG9ydHggPj0gQ29sdW1ucyB0aGVuCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgcGFubmVyX3ZfY2xlYW51cCAoZiAodG9wX3kpLCBwb3J0eCAtIDEsIHBvcnR5KTsKKyAgICAgICAgICAgICAgICAgIHBvcnR4IDo9IHBvcnR4ICsgMTsKKyAgICAgICAgICAgICAgICAgIC0tICBDIGhhZCArK3BvcnR4IGluc3RlYWQgb2YgcG9ydHgrKywgd2VpcmQuCisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICB3aGVuIEtleV9JbnNlcnRfTGluZSA9PgorICAgICAgICAgICAgICAgLS0gIGluY3JlYXNlLWxpbmVzOiBtb3ZlIGJvdHRvbS1lZGdlIGRvd24KKyAgICAgICAgICAgICAgIGlmIHBvcnR5ID49IHB5bWF4IG9yIHBvcnR5ID49IExpbmVzIHRoZW4KKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwYW5uZXJfaF9jbGVhbnVwIChwb3J0eSAtIDEsIGYgKHRvcF94KSwgcG9ydHgpOworICAgICAgICAgICAgICAgICAgcG9ydHkgOj0gcG9ydHkgKyAxOworICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICB3aGVuIEtleV9EZWxldGVfQ2hhciA9PgorICAgICAgICAgICAgICAgLS0gIGRlY3JlYXNlLWNvbHVtbnM6IG1vdmUgYm90dG9tIGVkZ2UgdXAKKyAgICAgICAgICAgICAgIGlmIHBvcnR4IDw9IHRvcF94IHRoZW4KKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwb3J0eCA6PSBwb3J0eCAtIDE7CisgICAgICAgICAgICAgICAgICBwYW5uZXJfdl9jbGVhbnVwIChmICh0b3BfeSksIHBvcnR4LCBwb3J0eSk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHdoZW4gS2V5X0RlbGV0ZV9MaW5lID0+CisgICAgICAgICAgICAgICAtLSAgZGVjcmVhc2UtbGluZXMKKyAgICAgICAgICAgICAgIGlmIHBvcnR5IDw9IHRvcF95IHRoZW4KKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwb3J0eSA6PSBwb3J0eSAtIDE7CisgICAgICAgICAgICAgICAgICBwYW5uZXJfaF9jbGVhbnVwIChwb3J0eSwgZiAodG9wX3gpLCBwb3J0eCk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfTGVmdCA9PgorICAgICAgICAgICAgICAgLS0gIHBhbiBsZWZ0d2FyZHMKKyAgICAgICAgICAgICAgIGlmIGJhc2V4ID4gMCB0aGVuCisgICAgICAgICAgICAgICAgICBiYXNleCA6PSBiYXNleCAtIDE7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1JpZ2h0ID0+CisgICAgICAgICAgICAgICAtLSAgcGFuIHJpZ2h0d2FyZHMKKyAgICAgICAgICAgICAgIC0tICBpZiAoYmFzZXggKyBwb3J0eCAtIChweW1heCA+IHBvcnR5KSA8IHB4bWF4KQorICAgICAgICAgICAgICAgaWYgYmFzZXggKyBwb3J0eCAtCisgICAgICAgICAgICAgICAgICAgQ29sdW1uX1Bvc2l0aW9uIChncmVhdGVyIChweW1heCwgcG9ydHkpKSA8IHB4bWF4IHRoZW4KKyAgICAgICAgICAgICAgICAgIC0tICBpZiBiYXNleCArIHBvcnR4ICA8IHB4bWF4IG9yCisgICAgICAgICAgICAgICAgICAtLSAgICAgIChweW1heCA+IHBvcnR5IGFuZCBiYXNleCArIHBvcnR4IC0gMSA8IHB4bWF4KSB0aGVuCisgICAgICAgICAgICAgICAgICBiYXNleCA6PSBiYXNleCArIDE7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgPT4KKyAgICAgICAgICAgICAgIC0tICBwYW4gdXB3YXJkcworICAgICAgICAgICAgICAgaWYgYmFzZXkgPiAwIHRoZW4KKyAgICAgICAgICAgICAgICAgIGJhc2V5IDo9IGJhc2V5IC0gMTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9Eb3duID0+CisgICAgICAgICAgICAgICAtLSAgcGFuIGRvd253YXJkcworICAgICAgICAgICAgICAgLS0gIHNhbWUgYXMgaWYgKGJhc2V5ICsgcG9ydHkgLSAocHhtYXggPiBwb3J0eCkgPCBweW1heCkKKyAgICAgICAgICAgICAgIGlmIGJhc2V5ICsgcG9ydHkgLQorICAgICAgICAgICAgICAgICAgIExpbmVfUG9zaXRpb24gKGdyZWF0ZXIgKHB4bWF4LCBwb3J0eCkpIDwgcHltYXggdGhlbgorICAgICAgICAgICAgICAgICAgLS0gIGlmIChiYXNleSArIHBvcnR5ICA8IHB5bWF4KSBvcgorICAgICAgICAgICAgICAgICAgLS0gICAgICAocHhtYXggPiBwb3J0eCBhbmQgYmFzZXkgKyBwb3J0eSAtIDEgPCBweW1heCkgdGhlbgorICAgICAgICAgICAgICAgICAgYmFzZXkgOj0gYmFzZXkgKyAxOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgd2hlbiAgQ2hhcmFjdGVyJ1BvcyAoJ0gnKSB8CisgICAgICAgICAgICAgIEtleV9Ib21lIHwKKyAgICAgICAgICAgICAgS2V5X0ZpbmQgPT4KKyAgICAgICAgICAgICAgIGJhc2V5IDo9IDA7CisKKyAgICAgICAgICAgIHdoZW4gICBDaGFyYWN0ZXInUG9zICgnRScpIHwKKyAgICAgICAgICAgICAgS2V5X0VuZCB8CisgICAgICAgICAgICAgIEtleV9TZWxlY3QgPT4KKyAgICAgICAgICAgICAgIGlmIHB5bWF4IDwgcG9ydHkgdGhlbgorICAgICAgICAgICAgICAgICAgYmFzZXkgOj0gMDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGJhc2V5IDo9IHB5bWF4IC0gcG9ydHk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgZW5kIGNhc2U7CisKKyAgICAgICAgIC0tICBtb3JlIHdyaXRpbmcgb2ZmIHRoZSBzY3JlZW4uCisgICAgICAgICAtLSAgSW50ZXJlc3RpbmdseSwgdGhlIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBpZgorICAgICAgICAgLS0gIHdlIHB1dCBhIGJsb2NrIGFyb3VuZCB0aGlzLgorICAgICAgICAgLS0gIGRlbGNhcmUgLS1iZWdpbgorICAgICAgICAgaWYgdG9wX3kgLz0gMCBhbmQgdG9wX3ggLz0gMCB0aGVuCisgICAgICAgICAgICBBZGQgKExpbmUgPT4gdG9wX3kgLSAxLCBDb2x1bW4gPT4gdG9wX3ggLSAxLAorICAgICAgICAgICAgICAgICBDaCA9PiBBQ1NfTWFwIChBQ1NfVXBwZXJfTGVmdF9Db3JuZXIpKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGlmIHRvcF94IC89IDAgdGhlbgorICAgICAgICAgICAgZG9fdl9saW5lICh0b3BfeSwgdG9wX3ggLSAxLCBBQ1NfTWFwIChBQ1NfVmVydGljYWxfTGluZSksIHBvcnR5KTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGlmIHRvcF95IC89IDAgdGhlbgorICAgICAgICAgICAgZG9faF9saW5lICh0b3BfeSAtIDEsIHRvcF94LCBBQ1NfTWFwIChBQ1NfSG9yaXpvbnRhbF9MaW5lKSwgcG9ydHgpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgLS0gIGV4Y2VwdGlvbiB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsgZW5kOworCisgICAgICAgICAtLSAgaW4gQyB3YXMgLi4uIHB4bWF4ID4gcG9ydHggLSAxCisgICAgICAgICBpZiBzY3JvbGxlcnMgYW5kIHB4bWF4ID49IHBvcnR4IHRoZW4KKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIGxlbmd0aCA6IGNvbnN0YW50IENvbHVtbl9Qb3NpdGlvbiA6PSBwb3J0eCAtIHRvcF94IC0gMTsKKyAgICAgICAgICAgICAgIGxvd2VuZCwgaGlnaGVuZCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAtLSAgSW5zdGVhZCBvZiB1c2luZyBmbG9hdHMsIEknbGwgdXNlIGludGVnZXJzIG9ubHkuCisgICAgICAgICAgICAgICBsb3dlbmQgOj0gdG9wX3ggKyAoYmFzZXggKiBsZW5ndGgpIC8gcHhtYXg7CisgICAgICAgICAgICAgICBoaWdoZW5kIDo9IHRvcF94ICsgKChiYXNleCArIGxlbmd0aCkgKiBsZW5ndGgpIC8gcHhtYXg7CisKKyAgICAgICAgICAgICAgIGRvX2hfbGluZSAocG9ydHkgLSAxLCB0b3BfeCwgQUNTX01hcCAoQUNTX0hvcml6b250YWxfTGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VuZCk7CisgICAgICAgICAgICAgICBpZiBoaWdoZW5kIDwgcG9ydHggdGhlbgorICAgICAgICAgICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgKEF0dHIgPT4gKFJldmVyc2VfVmlkZW8gPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgIE9uID0+IFRydWUpOworICAgICAgICAgICAgICAgICAgZG9faF9saW5lIChwb3J0eSAtIDEsIGxvd2VuZCwgQmxhbmsyLCBoaWdoZW5kICsgMSk7CisgICAgICAgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAoQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgT24gPT4gRmFsc2UpOworICAgICAgICAgICAgICAgICAgZG9faF9saW5lIChwb3J0eSAtIDEsIGhpZ2hlbmQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfSG9yaXpvbnRhbF9MaW5lKSwgcG9ydHgpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9faF9saW5lIChwb3J0eSAtIDEsIHRvcF94LCBBQ1NfTWFwIChBQ1NfSG9yaXpvbnRhbF9MaW5lKSwgcG9ydHgpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzY3JvbGxlcnMgYW5kIHB5bWF4ID49IHBvcnR5IHRoZW4KKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIGxlbmd0aCA6IGNvbnN0YW50IExpbmVfUG9zaXRpb24gOj0gcG9ydHkgLSB0b3BfeSAtIDE7CisgICAgICAgICAgICAgICBsb3dlbmQsIGhpZ2hlbmQgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIGxvd2VuZCA6PSB0b3BfeSArIChiYXNleSAqIGxlbmd0aCkgLyBweW1heDsKKyAgICAgICAgICAgICAgIGhpZ2hlbmQgOj0gdG9wX3kgKyAoKGJhc2V5ICsgbGVuZ3RoKSAqIGxlbmd0aCkgLyBweW1heDsKKworICAgICAgICAgICAgICAgZG9fdl9saW5lICh0b3BfeSwgcG9ydHggLSAxLCBBQ1NfTWFwIChBQ1NfVmVydGljYWxfTGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VuZCk7CisgICAgICAgICAgICAgICBpZiBoaWdoZW5kIDwgcG9ydHkgdGhlbgorICAgICAgICAgICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgKEF0dHIgPT4gKFJldmVyc2VfVmlkZW8gPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgIE9uID0+IFRydWUpOworICAgICAgICAgICAgICAgICAgZG9fdl9saW5lIChsb3dlbmQsIHBvcnR4IC0gMSwgQmxhbmsyLCBoaWdoZW5kICsgMSk7CisgICAgICAgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAoQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgT24gPT4gRmFsc2UpOworICAgICAgICAgICAgICAgICAgZG9fdl9saW5lIChoaWdoZW5kICsgMSwgcG9ydHggLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfVmVydGljYWxfTGluZSksIHBvcnR5KTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvX3ZfbGluZSAodG9wX3ksIHBvcnR4IC0gMSwgQUNTX01hcCAoQUNTX1ZlcnRpY2FsX0xpbmUpLCBwb3J0eSk7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHRvcF95IC89IDAgdGhlbgorICAgICAgICAgICAgQWRkIChMaW5lID0+IHRvcF95IC0gMSwgQ29sdW1uID0+IHBvcnR4IC0gMSwKKyAgICAgICAgICAgICAgICAgQ2ggPT4gQUNTX01hcCAoQUNTX1VwcGVyX1JpZ2h0X0Nvcm5lcikpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgaWYgdG9wX3ggLz0gMCB0aGVuCisgICAgICAgICAgICBBZGQgKExpbmUgPT4gcG9ydHkgLSAxLCBDb2x1bW4gPT4gdG9wX3ggLSAxLAorICAgICAgICAgICAgICAgICBDaCA9PiBBQ1NfTWFwIChBQ1NfTG93ZXJfTGVmdF9Db3JuZXIpKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAtLSAgSGVyZSBpcyBhbm90aGVyIHBsYWNlIHdoZXJlIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAtLSAgdG8gd3JpdGUgdG8gdGhlIGNvcm5lciBvZiB0aGUgc2NyZWVuLgorICAgICAgICAgICAgQWRkIChMaW5lID0+IHBvcnR5IC0gMSwgQ29sdW1uID0+IHBvcnR4IC0gMSwKKyAgICAgICAgICAgICAgICAgQ2ggPT4gQUNTX01hcCAoQUNTX0xvd2VyX1JpZ2h0X0Nvcm5lcikpOworICAgICAgICAgICAgZXhjZXB0aW9uCisgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKKyAgICAgICAgIGVuZDsKKworICAgICAgICAgYmVmb3JlIDo9IGdldHRpbWU7CisKKyAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CisKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIC0tICB0aGUgQyB2ZXJzaW9uIGFsbG93cyB0aGUgcGFuZWwgdG8gaGF2ZSBhIHplcm8gaGVpZ2h0CisgICAgICAgICAgICAtLSAgd2ljaCByYWlzZSB0aGUgZXhjZXB0aW9uCisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZQorICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICBwYWQsCisgICAgICAgICAgICAgICBiYXNleSwgYmFzZXgsCisgICAgICAgICAgICAgICB0b3BfeSwgdG9wX3gsCisgICAgICAgICAgICAgICBwb3J0eSAtIExpbmVfUG9zaXRpb24gKGdyZWF0ZXIgKHB4bWF4LCBwb3J0eCkpIC0gMSwKKyAgICAgICAgICAgICAgIHBvcnR4IC0gQ29sdW1uX1Bvc2l0aW9uIChncmVhdGVyIChweW1heCwgcG9ydHkpKSAtIDEpOworICAgICAgICAgICAgZXhjZXB0aW9uCisgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKKyAgICAgICAgIGVuZDsKKworICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKworICAgICAgICAgaWYgdGltaW5nIHRoZW4KKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIHMgOiBTdHJpbmcgKDEgLi4gNyk7CisgICAgICAgICAgICAgICBlbGFwc2VkIDogTG9uZ19GbG9hdDsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBhZnRlciA6PSBnZXR0aW1lOworICAgICAgICAgICAgICAgZWxhcHNlZCA6PSAoTG9uZ19GbG9hdCAoYWZ0ZXIuc2Vjb25kcyAtIGJlZm9yZS5zZWNvbmRzKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMb25nX0Zsb2F0IChhZnRlci5taWNyb3NlY29uZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGJlZm9yZS5taWNyb3NlY29uZHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvIDEuMGU2KTsKKyAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMSwgQ29sdW1uID0+IENvbHVtbnMgLSAyMCk7CisgICAgICAgICAgICAgICBmbG9hdGlvLlB1dCAocywgZWxhcHNlZCwgQWZ0ID0+IDMsIEV4cCA9PiAwKTsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+IHMpOworICAgICAgICAgICAgICAgUmVmcmVzaDsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgYyA6PSBwZ2V0YyAocGFkKTsKKyAgICAgICAgIGV4aXQgd2hlbiBjID0gS2V5X0V4aXQ7CisKKyAgICAgIGVuZCBsb29wOworCisgICAgICBBbGxvd19TY3JvbGxpbmcgKE1vZGUgPT4gVHJ1ZSk7CisKKyAgIGVuZCBwYW5uZXI7CisKKyAgIEdyaWRzaXplIDogY29uc3RhbnQgOj0gMzsKKyAgIEdyaWRjb3VudCA6IEludGVnZXIgOj0gMDsKKworICAgUGFkX0hpZ2ggOiBjb25zdGFudCBMaW5lX0NvdW50IDo9ICAyMDA7CisgICBQYWRfV2lkZSA6IGNvbnN0YW50IENvbHVtbl9Db3VudCA6PSAyMDA7CisgICBwYW5wYWQgOiBXaW5kb3cgOj0gTmV3X1BhZCAoUGFkX0hpZ2gsIFBhZF9XaWRlKTsKK2JlZ2luCisgICBpZiBwYW5wYWQgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICBDYW5ub3QgKCJjYW5ub3QgY3JlYXRlIHJlcXVlc3RlZCBwYWQiKTsKKyAgICAgIHJldHVybjsKKyAgIGVuZCBpZjsKKworICAgZm9yIGkgaW4gMCAuLiBQYWRfSGlnaCAtIDEgbG9vcAorICAgICAgZm9yIGogaW4gMCAuLiBQYWRfV2lkZSAtIDEgIGxvb3AKKyAgICAgICAgIGlmIGkgbW9kIEdyaWRzaXplID0gMCBhbmQgaiBtb2QgR3JpZHNpemUgPSAwIHRoZW4KKyAgICAgICAgICAgIGlmIGkgPSAwIG9yIGogPSAwIHRoZW4KKyAgICAgICAgICAgICAgIEFkZCAocGFucGFkLCAnKycpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgLS0gIGRlcGVuZHMgb24gQVNDSUk/CisgICAgICAgICAgICAgICBBZGQgKHBhbnBhZCwKKyAgICAgICAgICAgICAgICAgICAgQ2ggPT4gQ2hhcmFjdGVyJ1ZhbCAoQ2hhcmFjdGVyJ1BvcyAoJ0EnKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWRjb3VudCBtb2QgMjYpKTsKKyAgICAgICAgICAgICAgIEdyaWRjb3VudCA6PSBHcmlkY291bnQgKyAxOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZWxzaWYgaSBtb2QgR3JpZHNpemUgPSAwIHRoZW4KKyAgICAgICAgICAgIEFkZCAocGFucGFkLCAnLScpOworICAgICAgICAgZWxzaWYgaiBtb2QgR3JpZHNpemUgPSAwIHRoZW4KKyAgICAgICAgICAgIEFkZCAocGFucGFkLCAnfCcpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgLS0gIGhhbmRsZSB0aGUgd3JpdGUgdG8gdGhlIGxvd2VyIHJpZ2h0IGNvcm5lciBlcnJvcgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIEFkZCAocGFucGFkLCAnICcpOworICAgICAgICAgICAgICAgZXhjZXB0aW9uCisgICAgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIGxvb3A7CisgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDQpOworICAgcGFubmVyX2xlZ2VuZCAoTGluZXMgLSAzKTsKKyAgIHBhbm5lcl9sZWdlbmQgKExpbmVzIC0gMik7CisgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDEpOworCisgICBTZXRfS2V5UGFkX01vZGUgKHBhbnBhZCwgVHJ1ZSk7CisgICAtLSAgTWFrZSB0aGUgcGFkIChpbml0aWFsbHkpIG5hcnJvdyBlbm91Z2ggdGhhdCBhIHRyYWNlIGZpbGUgd29uJ3Qgd3JhcC4KKyAgIC0tICBXZSdsbCBzdGlsbCBiZSBhYmxlIHRvIHdpZGVuIGl0IGR1cmluZyBhIHRlc3QsIHNpbmNlIHRoYXQncyByZXF1aXJlZAorICAgLS0gIGZvciB0ZXN0aW5nIGJvdW5kYXJpZXMuCisKKyAgIHBhbm5lciAocGFucGFkLCAyLCAyLCBMaW5lcyAtIDUsIENvbHVtbnMgLSAxNSwgcGFkZ2V0Y2gnQWNjZXNzKTsKKworICAgRGVsZXRlIChwYW5wYWQpOworICAgRW5kX1dpbmRvd3M7IC0tICBIbW0sIEVyYXNlIGFmdGVyIEVuZF9XaW5kb3dzCisgICBFcmFzZTsKK2VuZCBuY3Vyc2VzMi5kZW1vX3BhZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYWQuYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5NjI2MwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYWQuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5kZW1vX3BhZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYW5lbHMuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1NThlZAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYW5lbHMuYWRiCkBAIC0wLDAgKzEsMzgyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjYgJAorLS0gICREYXRlOiAyMDA4LzA4LzMwIDIzOjM1OjAxICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YTsKKword2l0aCBuY3Vyc2VzMi5nZW5lcmljUHV0czsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmRlbW9fcGFuZWxzIChuYXBfbXNlY2kgOiBJbnRlZ2VyKSBpcworICAgdXNlIEludF9JTzsKKworICAgZnVuY3Rpb24gIG1rcGFuZWwgKGNvbG9yIDogQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgIHJvd3MgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICBjb2xzICA6IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICB0bHkgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgdGx4ICAgOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBQYW5lbDsKKyAgIHByb2NlZHVyZSBybXBhbmVsIChwYW4gOiBpbiBvdXQgUGFuZWwpOworICAgcHJvY2VkdXJlIHBmbHVzaDsKKyAgIHByb2NlZHVyZSB3YWl0X2Ffd2hpbGUgKG1zZWMgOiBJbnRlZ2VyKTsKKyAgIHByb2NlZHVyZSBzYXl3aGF0ICh0ZXh0IDogU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBmaWxsX3BhbmVsIChwYW4gOiBQYW5lbCk7CisKKyAgIG5hcF9tc2VjIDogSW50ZWdlciA6PSBuYXBfbXNlY2k7CisKKyAgIGZ1bmN0aW9uIG1rcGFuZWwgKGNvbG9yIDogQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgcm93cyAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgY29scyAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICB0bHkgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICB0bHggICA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFBhbmVsIGlzCisgICAgICB3aW4gOiBXaW5kb3c7CisgICAgICBwYW4gOiBQYW5lbCA6PSBOdWxsX1BhbmVsOworICAgYmVnaW4KKyAgICAgIHdpbiA6PSBOZXdfV2luZG93IChyb3dzLCBjb2xzLCB0bHksIHRseCk7CisgICAgICBpZiBOdWxsX1dpbmRvdyAvPSB3aW4gdGhlbgorICAgICAgICAgcGFuIDo9IE5ld19QYW5lbCAod2luKTsKKyAgICAgICAgIGlmIHBhbiA9IE51bGxfUGFuZWwgdGhlbgorICAgICAgICAgICAgRGVsZXRlICh3aW4pOworICAgICAgICAgZWxzaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBmZywgYmcgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgaWYgY29sb3IgPSBCbHVlIHRoZW4KKyAgICAgICAgICAgICAgICAgIGZnIDo9IFdoaXRlOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZmcgOj0gQmxhY2s7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBiZyA6PSBjb2xvcjsKKyAgICAgICAgICAgICAgIEluaXRfUGFpciAoQ29sb3JfUGFpciAoY29sb3IpLCBmZywgYmcpOworICAgICAgICAgICAgICAgU2V0X0JhY2tncm91bmQgKHdpbiwgKENoID0+ICcgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyIChjb2xvcikpKTsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kICh3aW4sIChDaCA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXIgKGNvbG9yKSkpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIHBhbjsKKyAgIGVuZCBta3BhbmVsOworCisgICBwcm9jZWR1cmUgcm1wYW5lbCAocGFuIDogaW4gb3V0IFBhbmVsKSBpcworICAgICAgd2luIDogV2luZG93IDo9IFBhbmVsX1dpbmRvdyAocGFuKTsKKyAgIGJlZ2luCisgICAgICBEZWxldGUgKHBhbik7CisgICAgICBEZWxldGUgKHdpbik7CisgICBlbmQgcm1wYW5lbDsKKworICAgcHJvY2VkdXJlIHBmbHVzaCBpcworICAgYmVnaW4KKyAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICAgICBVcGRhdGVfU2NyZWVuOworICAgZW5kIHBmbHVzaDsKKworICAgcHJvY2VkdXJlIHdhaXRfYV93aGlsZSAobXNlYyA6IEludGVnZXIpIGlzCisgICBiZWdpbgorICAgICAgLS0gIFRoZSBDIHZlcnNpb24gaGFkIHNvbWUgI2lmZGVmIGJsb2NrcyBoZXJlCisgICAgICBpZiBtc2VjID0gMSB0aGVuCisgICAgICAgICBHZXRjaGFyOworICAgICAgZWxzZQorICAgICAgICAgTmFwX01pbGxpX1NlY29uZHMgKG1zZWMpOworICAgICAgZW5kIGlmOworICAgZW5kIHdhaXRfYV93aGlsZTsKKworICAgcHJvY2VkdXJlIHNheXdoYXQgKHRleHQgOiBTdHJpbmcpIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAxLCBDb2x1bW4gPT4gMCk7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIEFkZCAoU3RyID0+IHRleHQpOworICAgZW5kIHNheXdoYXQ7CisKKyAgIC0tICBmcm9tIHNhbXBsZS1jdXJzZXNfZGVtby5hZGIKKyAgIHR5cGUgVXNlcl9EYXRhIGlzIG5ldyBTdHJpbmcgKDEgLi4gMik7CisgICB0eXBlIFVzZXJfRGF0YV9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBVc2VyX0RhdGE7CisgICBwYWNrYWdlIFBVRCBpcyBuZXcgUGFuZWxzLlVzZXJfRGF0YSAoVXNlcl9EYXRhLCBVc2VyX0RhdGFfQWNjZXNzKTsKKworICAgdXNlIFBVRDsKKworICAgcHJvY2VkdXJlIGZpbGxfcGFuZWwgKHBhbiA6IFBhbmVsKSBpcworICAgICAgd2luIDogY29uc3RhbnQgV2luZG93IDo9IFBhbmVsX1dpbmRvdyAocGFuKTsKKyAgICAgIG51bSA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBHZXRfVXNlcl9EYXRhIChwYW4pICgyKTsKKyAgICAgIHRtcDYgOiBTdHJpbmcgKDEgLi4gNikgOj0gIi1wYW54LSI7CisgICAgICBtYXh5IDogTGluZV9Db3VudDsKKyAgICAgIG1heHggOiBDb2x1bW5fQ291bnQ7CisKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAod2luLCAxLCAxKTsKKyAgICAgIHRtcDYgKDUpIDo9IG51bTsKKyAgICAgIEFkZCAod2luLCBTdHIgPT4gdG1wNik7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZSAod2luKTsKKyAgICAgIEJveCAod2luKTsKKyAgICAgIEdldF9TaXplICh3aW4sIG1heHksIG1heHgpOworICAgICAgZm9yIHkgaW4gMiAuLiBtYXh5IC0gMyBsb29wCisgICAgICAgICBmb3IgeCBpbiAxIC4uIG1heHggLSAzIGxvb3AKKyAgICAgICAgICAgIE1vdmVfQ3Vyc29yICh3aW4sIHksIHgpOworICAgICAgICAgICAgQWRkICh3aW4sIG51bSk7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBsb29wOworICAgZXhjZXB0aW9uCisgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKKyAgIGVuZCBmaWxsX3BhbmVsOworCisgICBtb2RzdHIgOiBjb25zdGFudCBhcnJheSAoMCAuLiA1KSBvZiBTdHJpbmcgKDEgLi4gNSkgOj0KKyAgICAgKCJ0ZXN0ICIsCisgICAgICAiVEVTVCAiLAorICAgICAgIigqKikgIiwKKyAgICAgICIqKCkqICIsCisgICAgICAiPC0tPiAiLAorICAgICAgIkxBU1QgIgorICAgICAgKTsKKworICAgcGFja2FnZSBwIGlzIG5ldyBuY3Vyc2VzMi5nZW5lcmljUHV0cyAoMTAyNCk7CisgICB1c2UgcDsKKyAgIHVzZSBwLkJTOworICAgLS0gIHRoZSBDIHZlcnNpb24gc2FpZCByZWdpc3RlciBpbnQgeSwgeDsKKyAgIHRtcGIgOiBCUy5Cb3VuZGVkX1N0cmluZzsKKworYmVnaW4KKyAgIFJlZnJlc2g7CisKKyAgIGZvciB5IGluIDAgLi4gSW50ZWdlciAoTGluZXMgLSAyKSBsb29wCisgICAgICBmb3IgeCBpbiAwIC4uIEludGVnZXIgKENvbHVtbnMgLSAxKSBsb29wCisgICAgICAgICBteVB1dCAodG1wYiwgKHkgKyB4KSBtb2QgMTApOworICAgICAgICAgbXlBZGQgKFN0ciA9PiB0bXBiKTsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIGxvb3A7CisgICBmb3IgeSBpbiAwIC4uIDQgbG9vcAorICAgICAgZGVjbGFyZQorICAgICAgICAgcDEsIHAyLCBwMywgcDQsIHA1IDogUGFuZWw7CisgICAgICAgICBVMSA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoInAxIik7CisgICAgICAgICBVMiA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoInAyIik7CisgICAgICAgICBVMyA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoInAzIik7CisgICAgICAgICBVNCA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoInA0Iik7CisgICAgICAgICBVNSA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoInA1Iik7CisKKyAgICAgIGJlZ2luCisgICAgICAgICBwMSA6PSBta3BhbmVsIChSZWQsIExpbmVzIC8gMiAtIDIsIENvbHVtbnMgLyA4ICsgMSwgMCwgMCk7CisgICAgICAgICBTZXRfVXNlcl9EYXRhIChwMSwgVTEpOworICAgICAgICAgcDIgOj0gbWtwYW5lbCAoR3JlZW4sIExpbmVzIC8gMiArIDEsIENvbHVtbnMgLyA3LCBMaW5lcyAvIDQsCisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIC8gMTApOworICAgICAgICAgU2V0X1VzZXJfRGF0YSAocDIsIFUyKTsKKyAgICAgICAgIHAzIDo9IG1rcGFuZWwgKFllbGxvdywgTGluZXMgLyA0LCBDb2x1bW5zIC8gMTAsIExpbmVzIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgLyA5KTsKKyAgICAgICAgIFNldF9Vc2VyX0RhdGEgKHAzLCBVMyk7CisgICAgICAgICBwNCA6PSBta3BhbmVsIChCbHVlLCBMaW5lcyAvIDIgLSAyLCBDb2x1bW5zIC8gOCwgIExpbmVzIC8gMiAtIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIC8gMyk7CisgICAgICAgICBTZXRfVXNlcl9EYXRhIChwNCwgVTQpOworICAgICAgICAgcDUgOj0gbWtwYW5lbCAoTWFnZW50YSwgTGluZXMgLyAyIC0gMiwgQ29sdW1ucyAvIDgsICBMaW5lcyAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIC8gMiAtIDIpOworICAgICAgICAgU2V0X1VzZXJfRGF0YSAocDUsIFU1KTsKKworICAgICAgICAgZmlsbF9wYW5lbCAocDEpOworICAgICAgICAgZmlsbF9wYW5lbCAocDIpOworICAgICAgICAgZmlsbF9wYW5lbCAocDMpOworICAgICAgICAgZmlsbF9wYW5lbCAocDQpOworICAgICAgICAgZmlsbF9wYW5lbCAocDUpOworICAgICAgICAgSGlkZSAocDQpOworICAgICAgICAgSGlkZSAocDUpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgc2F5d2hhdCAoInByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiaDMgczEgczIgczQgczU7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIE1vdmUgKHAxLCAwLCAwKTsKKyAgICAgICAgIEhpZGUgKHAzKTsKKyAgICAgICAgIFNob3cgKHAxKTsKKyAgICAgICAgIFNob3cgKHAyKTsKKyAgICAgICAgIFNob3cgKHA0KTsKKyAgICAgICAgIFNob3cgKHA1KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiczE7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFNob3cgKHAxKTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiczI7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFNob3cgKHAyKTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgibTI7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIE1vdmUgKHAyLCBMaW5lcyAvIDMgKyAxLCBDb2x1bW5zIC8gOCk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoInMzOyIpOworICAgICAgICAgU2hvdyAocDMpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJtMzsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgTW92ZSAocDMsIExpbmVzIC8gNCArIDEsIENvbHVtbnMgLyAxNSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoImIzOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBCb3R0b20gKHAzKTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiczQ7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFNob3cgKHA0KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiczU7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFNob3cgKHA1KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgidDM7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFRvcCAocDMpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJ0MTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgVG9wIChwMSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoInQyOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBUb3AgKHAyKTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgidDM7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFRvcCAocDMpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJ0NDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgVG9wIChwNCk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgZm9yIGl0bXAgaW4gIDAgLi4gIDUgbG9vcAorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgdzQgOiBjb25zdGFudCBXaW5kb3cgOj0gUGFuZWxfV2luZG93IChwNCk7CisgICAgICAgICAgICAgICB3NSA6IGNvbnN0YW50IFdpbmRvdyA6PSBQYW5lbF9XaW5kb3cgKHA1KTsKKyAgICAgICAgICAgIGJlZ2luCisKKyAgICAgICAgICAgICAgIHNheXdoYXQgKCJtNDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKHc0LCBMaW5lcyAvIDgsIDEpOworICAgICAgICAgICAgICAgQWRkICh3NCwgbW9kc3RyIChpdG1wKSk7CisgICAgICAgICAgICAgICBNb3ZlIChwNCwgTGluZXMgLyA2LCBDb2x1bW5fUG9zaXRpb24gKGl0bXApICogKENvbHVtbnMgLyA4KSk7CisgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAodzUsIExpbmVzIC8gNiwgMSk7CisgICAgICAgICAgICAgICBBZGQgKHc1LCBtb2RzdHIgKGl0bXApKTsKKyAgICAgICAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICAgICAgICBzYXl3aGF0ICgibTU7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yICh3NCwgTGluZXMgLyA2LCAxKTsKKyAgICAgICAgICAgICAgIEFkZCAodzQsIG1vZHN0ciAoaXRtcCkpOworICAgICAgICAgICAgICAgTW92ZSAocDUsIExpbmVzIC8gMyAtIDEsIChDb2x1bW5fUG9zaXRpb24gKGl0bXApICogMTApICsgNik7CisgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAodzUsIExpbmVzIC8gOCwgMSk7CisgICAgICAgICAgICAgICBBZGQgKHc1LCBtb2RzdHIgKGl0bXApKTsKKyAgICAgICAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGxvb3A7CisKKyAgICAgICAgIHNheXdoYXQgKCJtNDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgTW92ZSAocDQsIExpbmVzIC8gNiwgNiAqIChDb2x1bW5zIC8gOCkpOworICAgICAgICAgLS0gIE1vdmUocDQsIExpbmVzIC8gNiwgaXRtcCAqIChDb2x1bW5zIC8gOCkpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJ0NTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgVG9wIChwNSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoInQyOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBUb3AgKHAyKTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgidDE7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFRvcCAocDEpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJkMjsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgcm1wYW5lbCAocDIpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJoMzsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgSGlkZSAocDMpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJkMTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgcm1wYW5lbCAocDEpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJkNDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgcm1wYW5lbCAocDQpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJkNTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgcm1wYW5lbCAocDUpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisgICAgICAgICBpZiBuYXBfbXNlYyA9IDEgdGhlbgorICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5hcF9tc2VjIDo9IDEwMDsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgZW5kOworICAgZW5kIGxvb3A7CisKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CisKK2VuZCBuY3Vyc2VzMi5kZW1vX3BhbmVsczsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYW5lbHMuYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyODc4YwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYW5lbHMuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5kZW1vX3BhbmVscyAobmFwX21zZWNpIDogSW50ZWdlcik7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWZsdXNoaW5wX3Rlc3QuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1mbHVzaGlucF90ZXN0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE5OGUxCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1mbHVzaGlucF90ZXN0LmFkYgpAQCAtMCwwICsxLDEzNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5mbHVzaGlucF90ZXN0ICh3aW4gOiBXaW5kb3cpIGlzCisKKyAgIHByb2NlZHVyZSBDb250aW51ZSAod2luIDogV2luZG93KTsKKworICAgcHJvY2VkdXJlIENvbnRpbnVlICh3aW4gOiBXaW5kb3cpIGlzCisgICBiZWdpbgorICAgICAgU2V0X0VjaG9fTW9kZSAoRmFsc2UpOworICAgICAgTW92ZV9DdXJzb3IgKHdpbiwgMTAsIDEpOworICAgICAgQWRkICh3aW4sIDEwLCAxLCAiIFByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgIFJlZnJlc2ggKHdpbik7CisgICAgICBHZXRjaGFyICh3aW4pOworICAgZW5kIENvbnRpbnVlOworCisgICBoLCBieSwgc2ggOiBMaW5lX1Bvc2l0aW9uOworICAgdywgYngsIHN3IDogQ29sdW1uX1Bvc2l0aW9uOworCisgICBzdWJXaW4gOiBXaW5kb3c7CisKK2JlZ2luCisgICBDbGVhciAod2luKTsKKyAgIEdldF9TaXplICh3aW4sIGgsIHcpOworICAgR2V0X1dpbmRvd19Qb3NpdGlvbiAod2luLCBieSwgYngpOworICAgc3cgOj0gdyAvIDM7CisgICBzaCA6PSBoIC8gMzsKKyAgIHN1YldpbiA6PSBTdWJfV2luZG93ICh3aW4sIHNoLCBzdywgYnkgKyBoIC0gc2ggLSAyLCBieCArIHcgLSBzdyAtIDIpOworCisgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgIEluaXRfUGFpciAoMiwgQ3lhbiwgQmx1ZSk7CisgICAgICBDaGFuZ2VfQmFja2dyb3VuZCAoc3ViV2luLAorICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyJyhDaCA9PiAnICcsIENvbG9yID0+IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICBlbmQgaWY7CisKKyAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoc3ViV2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICBCb3ggKHN1Yldpbik7CisgICBBZGQgKHN1YldpbiwgMiwgMSwgIlRoaXMgaXMgYSBzdWJ3aW5kb3ciKTsKKyAgIFJlZnJlc2ggKHdpbik7CisKKyAgIFNldF9DYnJlYWtfTW9kZSAoVHJ1ZSk7CisgICBBZGQgKHdpbiwgMCwgMSwgIlRoaXMgaXMgYSB0ZXN0IG9mIHRoZSBmbHVzaGlucCgpIGNhbGwuIik7CisKKyAgIEFkZCAod2luLCAyLCAxLCAiVHlwZSByYW5kb20ga2V5cyBmb3IgNSBzZWNvbmRzLiIpOworICAgQWRkICh3aW4sIDMsIDEsCisgICAgICAgICJUaGVzZSBzaG91bGQgYmUgZGlzY2FyZGVkIChub3QgZWNob2VkKSBhZnRlciB0aGUgc3Vid2luZG93ICIgJgorICAgICAgICAiZ29lcyBhd2F5LiIpOworICAgUmVmcmVzaCAod2luKTsKKworICAgZm9yIGkgaW4gMCAuLiA0IGxvb3AKKyAgICAgIE1vdmVfQ3Vyc29yIChzdWJXaW4sIDEsIDEpOworICAgICAgQWRkIChzdWJXaW4sIFN0ciA9PiAiVGltZSA9ICIpOworICAgICAgQWRkIChzdWJXaW4sIFN0ciA9PiBJbnRlZ2VyJ0ltYWdlIChpKSk7CisgICAgICBSZWZyZXNoIChzdWJXaW4pOworICAgICAgTmFwX01pbGxpX1NlY29uZHMgKDEwMDApOworICAgICAgRmx1c2hfSW5wdXQ7CisgICBlbmQgbG9vcDsKKworICAgRGVsZXRlIChzdWJXaW4pOworICAgRXJhc2UgKHdpbik7CisgICBGbGFzaF9TY3JlZW47CisgICBSZWZyZXNoICh3aW4pOworICAgTmFwX01pbGxpX1NlY29uZHMgKDEwMDApOworCisgICBBZGQgKHdpbiwgMiwgMSwKKyAgICAgICAgU3RyID0+ICJJZiB5b3Ugd2VyZSBzdGlsbCB0eXBpbmcgd2hlbiB0aGUgd2luZG93IHRpbWVyIGV4cGlyZWQsIik7CisgICBBZGQgKHdpbiwgMywgMSwKKyAgICAgICAgIm9yIGVsc2UgeW91IHR5cGVkIG5vdGhpbmcgYXQgYWxsIHdoaWxlIGl0IHdhcyBydW5uaW5nLCIpOworICAgQWRkICh3aW4sIDQsIDEsCisgICAgICAgICJ0ZXN0IHdhcyBpbnZhbGlkLiAgWW91J2xsIHNlZSBnYXJiYWdlIG9yIG5vdGhpbmcgYXQgYWxsLiAiKTsKKyAgIEFkZCAod2luLCA2LCAxLCAiUHJlc3MgYSBrZXkiKTsKKyAgIE1vdmVfQ3Vyc29yICh3aW4sIDksIDEwKTsKKyAgIFJlZnJlc2ggKHdpbik7CisgICBTZXRfRWNob19Nb2RlIChUcnVlKTsKKyAgIEdldGNoYXIgKHdpbik7CisgICBGbHVzaF9JbnB1dDsKKyAgIEFkZCAod2luLCAxMiwgMCwKKyAgICAgICAgIklmIHlvdSBzZWUgYW55IGtleSBvdGhlciB0aGFuIHdoYXQgeW91IHR5cGVkLCBmbHVzaGlucCgpIGlzIGJyb2tlbi4iKTsKKyAgIENvbnRpbnVlICh3aW4pOworCisgICBNb3ZlX0N1cnNvciAod2luLCA5LCAxMCk7CisgICBEZWxldGVfQ2hhcmFjdGVyICh3aW4pOworICAgUmVmcmVzaCAod2luKTsKKyAgIE1vdmVfQ3Vyc29yICh3aW4sIDEyLCAwKTsKKyAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgQWRkICh3aW4sCisgICAgICAgICJXaGF0IHlvdSB0eXBlZCBzaG91bGQgbm93IGhhdmUgYmVlbiBkZWxldGVkOyBpZiBub3QsIHdkZWxjaCgpICIgJgorICAgICAgICAiZmFpbGVkLiIpOworICAgQ29udGludWUgKHdpbik7CisKKyAgIFNldF9DYnJlYWtfTW9kZSAoVHJ1ZSk7CisKK2VuZCBuY3Vyc2VzMi5mbHVzaGlucF90ZXN0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1mbHVzaGlucF90ZXN0LmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZmx1c2hpbnBfdGVzdC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3NmM5NAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZmx1c2hpbnBfdGVzdC5hZHMKQEAgLTAsMCArMSw0MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCitwcm9jZWR1cmUgbmN1cnNlczIuZmx1c2hpbnBfdGVzdCAod2luIDogVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5XaW5kb3cpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2E2NTgzCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZGIKQEAgLTAsMCArMSwxMTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMyAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6MTggJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgbmN1cnNlczIuZ2VuZXJpY1B1dHMgaXMKKworICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXZ2V0bnN0ciAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogaW50KSByZXR1cm4gaW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2dldG5zdHIsICJ3Z2V0bnN0ciIpOworCisgICAgICBOICAgICAgICA6IEludGVnZXIgOj0gTGVuOworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiBzaXplX3QgKE1heF9MZW5ndGgpKTsKKyAgICAgIHhTdHIgOiBTdHJpbmcgKDEgLi4gTWF4X0xlbmd0aCk7CisgICAgICBDbnQgOiBOYXR1cmFsOworICAgYmVnaW4KKyAgICAgIGlmIE4gPCAwIHRoZW4KKyAgICAgICAgIE4gOj0gTWF4X0xlbmd0aDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIE4gPiBNYXhfTGVuZ3RoIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisgICAgICBUeHQgKDApIDo9IEludGVyZmFjZXMuQy5jaGFyJ0ZpcnN0OworICAgICAgaWYgV2dldG5zdHIgKFdpbiwgVHh0LCBDX0ludCAoTikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgVG9fQWRhIChUeHQsIHhTdHIsIENudCwgVHJ1ZSk7CisgICAgICBTdHIgOj0gVG9fQm91bmRlZF9TdHJpbmcgKHhTdHIgKDEgLi4gQ250KSk7CisgICBlbmQgbXlHZXQ7CisKKyAgIHByb2NlZHVyZSBteVB1dCAoU3RyICA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgaSAgICA6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgIEJhc2UgOiBpbiAgICAgTnVtYmVyX0Jhc2UgOj0gMTApIGlzCisgICAgICBwYWNrYWdlIEludF9JTyBpcyBuZXcgSW50ZWdlcl9JTyAoSW50ZWdlcik7IHVzZSBJbnRfSU87CisgICAgICB0bXAgOiBTdHJpbmcgKDEgLi4gQlMuTWF4X0xlbmd0aCk7CisgICBiZWdpbgorICAgICAgUHV0ICh0bXAsIGksIEJhc2UpOworICAgICAgU3RyIDo9IFRvX0JvdW5kZWRfU3RyaW5nICh0bXApOworICAgICAgVHJpbSAoU3RyLCBBZGEuU3RyaW5ncy5UcmltX0VuZCcoQWRhLlN0cmluZ3MuTGVmdCkpOworICAgZW5kIG15UHV0OworCisgICBwcm9jZWR1cmUgbXlBZGQgKFN0ciA6IEJTLkJvdW5kZWRfU3RyaW5nKSBpcworICAgYmVnaW4KKyAgICAgIEFkZCAoU3RyID0+IFRvX1N0cmluZyAoU3RyKSk7CisgICBlbmQgbXlBZGQ7CisKKyAgIC0tICBmcm9tIG5jdXJzZXMtYXV4CisgICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGluICBjaGFyc19wdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZykKKyAgIGlzCisgICAgICAtLSAgRmlsbCB0aGUgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSB0aGUKKyAgICAgIC0tICBjaGFyc19wdHIuCisgICAgICAtLQorICAgICAgTGVuIDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBDcCAvPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICBMZW4gOj0gTmF0dXJhbCAoU3RybGVuIChDcCkpOworICAgICAgICAgaWYgTWF4X0xlbmd0aCA8IExlbiB0aGVuCisgICAgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgUyA6IFN0cmluZyAoMSAuLiBMZW4pOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFMgOj0gVmFsdWUgKENwKTsKKyAgICAgICAgICAgIFN0ciA6PSBUb19Cb3VuZGVkX1N0cmluZyAoUyk7CisgICAgICAgICBlbmQ7CisgICAgICBlbHNlCisgICAgICAgICBTdHIgOj0gTnVsbF9Cb3VuZGVkX1N0cmluZzsKKyAgICAgIGVuZCBpZjsKKworICAgZW5kIEZpbGxfU3RyaW5nOworCitlbmQgbmN1cnNlczIuZ2VuZXJpY1B1dHM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MTRhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkcwpAQCAtMCwwICsxLDcyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjIgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aXRoIEFkYS5UZXh0X0lPOyB1c2UgQWRhLlRleHRfSU87Cit3aXRoIEFkYS5TdHJpbmdzLkJvdW5kZWQ7Cit1c2UgQWRhLlN0cmluZ3MuQm91bmRlZDsKK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCitnZW5lcmljCisgICBNYXggOiBOYXR1cmFsOworICAgLS0gICB0eXBlIG15c3RyaW5nIGlzIHByaXZhdGU7CisgICAtLSAgIHR5cGUgbXlpbnQgaXMKK3BhY2thZ2UgbmN1cnNlczIuZ2VuZXJpY1B1dHMgaXMKKyAgIHBhY2thZ2UgQlMgaXMgbmV3CisgICAgIEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoTWF4KTsKKyAgIHVzZSBCUzsKKworICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBpbiAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5XaW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICA6PSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSk7CisKKyAgIHByb2NlZHVyZSBteVB1dCAoU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBpIDogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgQmFzZSA6IGluIE51bWJlcl9CYXNlIDo9IDEwKTsKKyAgIC0tICB0aGUgZGVmYXVsdCBzaG91bGQgYmUgQWRhLlRleHRfSU8uSW50ZWdlcl9JTy5EZWZhdWx0X0Jhc2UKKyAgIC0tICBidXQgRGVmYXVsdF9CYXNlIGlzIGhpZGRlbiBpbiB0aGUgZ2VuZXJpYyBzbyBkb2Vzbid0IGV4aXN0IQorICAgcHJvY2VkdXJlIG15QWRkIChTdHIgOiBCUy5Cb3VuZGVkX1N0cmluZyk7CisKKyAgIHByb2NlZHVyZSBGaWxsX1N0cmluZyAoQ3AgIDogaW4gIGNoYXJzX3B0cjsgU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nKTsKK2VuZCBuY3Vyc2VzMi5nZW5lcmljUHV0czsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2guYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhMDlmMwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2guYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBnZXRjaF90ZXN0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2hfdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyMzEyYwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2hfdGVzdC5hZGIKQEAgLTAsMCArMSwyNTQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNyAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6NTggJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQ2hhcmFjdGVyIGlucHV0IHRlc3QKKy0tICB0ZXN0IHRoZSBrZXlwYWQgZmVhdHVyZQorCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKK3dpdGggQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7Cit3aXRoIEFkYS5TdHJpbmdzLkJvdW5kZWQ7CisKK3dpdGggbmN1cnNlczIuZ2VuZXJpY1B1dHM7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5nZXRjaF90ZXN0IGlzCisgICB1c2UgSW50X0lPOworCisgICBmdW5jdGlvbiBtb3VzZV9kZWNvZGUgKGVwIDogTW91c2VfRXZlbnQpIHJldHVybiBTdHJpbmc7CisKKyAgIGZ1bmN0aW9uIG1vdXNlX2RlY29kZSAoZXAgOiBNb3VzZV9FdmVudCkgcmV0dXJuIFN0cmluZyBpcworICAgICAgWSAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIEJ1dHRvbiA6IE1vdXNlX0J1dHRvbjsKKyAgICAgIFN0YXRlICA6IEJ1dHRvbl9TdGF0ZTsKKyAgICAgIHBhY2thZ2UgQlMgaXMgbmV3IEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoMjAwKTsKKyAgICAgIHVzZSBCUzsKKyAgICAgIGJ1ZiA6IEJvdW5kZWRfU3RyaW5nIDo9IFRvX0JvdW5kZWRfU3RyaW5nICgiIik7CisgICBiZWdpbgorICAgICAgLS0gIE5vdGUgdGhhdCB0aGVzZSBiaW5kaW5ncyBkbyBub3QgYWxsb3cKKyAgICAgIC0tICB0d28gYnV0dG9uIHN0YXRlcywKKyAgICAgIC0tICBUaGUgQyB2ZXJzaW9uIGNhbiBwcmludCB7Y2xpY2stMSwgY2xpY2stM30gZm9yIGV4YW1wbGUuCisgICAgICAtLSAgVGhleSBhbHNvIGRvbid0IGhhdmUgdGhlICdpZCcgb3IgeiBjb29yZGluYXRlLgorICAgICAgR2V0X0V2ZW50IChlcCwgWSwgWCwgQnV0dG9uLCBTdGF0ZSk7CisKKyAgICAgIC0tICBUT0RPIEFwcGVuZCAoYnVmLCAiaWQgIik7IGZyb20gQyB2ZXJzaW9uCisgICAgICBBcHBlbmQgKGJ1ZiwgImF0ICgiKTsKKyAgICAgIEFwcGVuZCAoYnVmLCBDb2x1bW5fUG9zaXRpb24nSW1hZ2UgKFgpKTsKKyAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgIEFwcGVuZCAoYnVmLCBMaW5lX1Bvc2l0aW9uJ0ltYWdlIChZKSk7CisgICAgICBBcHBlbmQgKGJ1ZiwgIikgc3RhdGUiKTsKKyAgICAgIEFwcGVuZCAoYnVmLCBNb3VzZV9CdXR0b24nSW1hZ2UgKEJ1dHRvbikpOworCisgICAgICBBcHBlbmQgKGJ1ZiwgIiA9ICIpOworICAgICAgQXBwZW5kIChidWYsIEJ1dHRvbl9TdGF0ZSdJbWFnZSAoU3RhdGUpKTsKKyAgICAgIHJldHVybiBUb19TdHJpbmcgKGJ1Zik7CisgICBlbmQgbW91c2VfZGVjb2RlOworCisgICBidWYgOiBTdHJpbmcgKDEgLi4gMTAyNCk7IC0tICBUT0RPIHdhcyBCVUZTSVpFCisgICBuIDogSW50ZWdlcjsKKyAgIGMgOiBLZXlfQ29kZTsKKyAgIGJsb2NrZmxhZyA6IFRpbWVvdXRfTW9kZSA6PSBCbG9ja2luZzsKKyAgIGZpcnN0dGltZSA6IEJvb2xlYW4gOj0gVHJ1ZTsKKyAgIHRtcDIgIDogRXZlbnRfTWFzazsKKyAgIHRtcDYgOiBTdHJpbmcgKDEgLi4gNik7CisgICB0bXAyMCA6IFN0cmluZyAoMSAuLiAyMCk7CisgICB4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgeSA6IExpbmVfUG9zaXRpb247CisgICB0bXB4IDogSW50ZWdlcjsKKyAgIGluY291bnQgOiBJbnRlZ2VyIDo9IDA7CisKK2JlZ2luCisgICBSZWZyZXNoOworICAgdG1wMiA6PSBTdGFydF9Nb3VzZSAoQWxsX0V2ZW50cyk7CisgICBBZGQgKFN0ciA9PiAiRGVsYXkgaW4gMTB0aHMgb2YgYSBzZWNvbmQgKDxDUj4gZm9yIGJsb2NraW5nIGlucHV0KT8gIik7CisgICBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIEdldCAoU3RyID0+IGJ1Zik7CisKKyAgIFNldF9FY2hvX01vZGUgKFN3aXRjaE9uID0+IEZhbHNlKTsKKyAgIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA9PiBGYWxzZSk7CisKKyAgIGlmIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nLklzX0RpZ2l0IChidWYgKDEpKSB0aGVuCisgICAgICBHZXQgKEl0ZW0gPT4gbiwgRnJvbSA9PiBidWYsIExhc3QgPT4gdG1weCk7CisgICAgICBTZXRfVGltZW91dF9Nb2RlIChNb2RlID0+IERlbGF5ZWQsIEFtb3VudCA9PiBuICogMTAwKTsKKyAgICAgIGJsb2NrZmxhZyA6PSBEZWxheWVkOworICAgZW5kIGlmOworCisgICBjIDo9IENoYXJhY3RlcidQb3MgKCc/Jyk7CisgICBTZXRfUmF3X01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgbG9vcAorICAgICAgaWYgbm90IGZpcnN0dGltZSB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiAiS2V5IHByZXNzZWQ6ICIpOworICAgICAgICAgUHV0ICh0bXA2LCBJbnRlZ2VyIChjKSwgOCk7CisgICAgICAgICBBZGQgKFN0ciA9PiB0bXA2KTsKKyAgICAgICAgIEFkZCAoQ2ggPT4gJyAnKTsKKyAgICAgICAgIGlmIGMgPSBLZXlfTW91c2UgdGhlbgorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgZXZlbnQgOiBNb3VzZV9FdmVudDsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBldmVudCA6PSBHZXRfTW91c2U7CisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiS0VZX01PVVNFLCAiKTsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+IG1vdXNlX2RlY29kZSAoZXZlbnQpKTsKKyAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbHNpZiBjID49IEtleV9NaW4gdGhlbgorICAgICAgICAgICAgS2V5X05hbWUgKGMsIHRtcDIwKTsKKyAgICAgICAgICAgIEFkZCAoU3RyID0+IHRtcDIwKTsKKyAgICAgICAgICAgIC0tICBJIHVzZWQgdG1wIGFuZCBnb3QgYml0dGVuIGJ5IHRoZSBsZW5ndGggcHJvYmxlbTotPgorICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgIGVsc2lmIGMgPiAxNiM4MCMgdGhlbiAtLSAgVE9ETyBmaXgsIHVzZSBjb25zdGFudCBpZiBwb3NzaWJsZQorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgYzIgOiBjb25zdGFudCBDaGFyYWN0ZXIgOj0gQ2hhcmFjdGVyJ1ZhbCAoYyBtb2QgMTYjODAjKTsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBpZiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZy5Jc19HcmFwaGljIChjMikgdGhlbgorICAgICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIk0tIik7CisgICAgICAgICAgICAgICAgICBBZGQgKENoID0+IGMyKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICJNLSIpOworICAgICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gVW5fQ29udHJvbCAoKENoID0+IGMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiBOb3JtYWxfVmlkZW8pKSk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIChoaWdoLWhhbGYgY2hhcmFjdGVyKSIpOworICAgICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIGMyIDogY29uc3RhbnQgQ2hhcmFjdGVyIDo9IENoYXJhY3RlcidWYWwgKGMgbW9kIDE2IzgwIyk7CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgaWYgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmcuSXNfR3JhcGhpYyAoYzIpIHRoZW4KKyAgICAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gYzIpOworICAgICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIiAoQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcikiKTsKKyAgICAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiBVbl9Db250cm9sICgoQ2ggPT4gYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiBOb3JtYWxfVmlkZW8pKSk7CisgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIChBU0NJSSBjb250cm9sIGNoYXJhY3RlcikiKTsKKyAgICAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICAtLSAgVE9ETyBJIGFtIG5vdCBzdXJlIHdoeSB0aGlzIHdhcyBpbiB0aGUgQyB2ZXJzaW9uCisgICAgICAgICAtLSAgdGhlIGRlbGF5IHN0YXRlbWVudCBzY3JvbGwgYW55d2F5LgorICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoTGluZSA9PiB5LCBDb2x1bW4gPT4geCk7CisgICAgICAgICBpZiB5ID49IExpbmVzIC0gMSB0aGVuCisgICAgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMCk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgZmlyc3R0aW1lIDo9IEZhbHNlOworICAgICAgaWYgYyA9IENoYXJhY3RlcidQb3MgKCdnJykgdGhlbgorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgcGFja2FnZSBwIGlzIG5ldyBuY3Vyc2VzMi5nZW5lcmljUHV0cyAoMTAyNCk7CisgICAgICAgICAgICB1c2UgcDsKKyAgICAgICAgICAgIHVzZSBwLkJTOworICAgICAgICAgICAgdGltZWRvdXQgOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgICAgICAgYm91bmRlZGJ1ZiA6IEJvdW5kZWRfU3RyaW5nOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEFkZCAoU3RyID0+ICJnZXRzdHIgdGVzdDogIik7CisgICAgICAgICAgICBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgICAgICAgICAgIC0tICBOb3RlIHRoYXQgaWYgZGVsYXkgbW9kZSBpcyBzZXQKKyAgICAgICAgICAgIC0tICBHZXQgY2FuIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIC0tICBUaGUgQyB2ZXJzaW9uIHdvdWxkIHByaW50IHRoZSBzdHJpbmcgaXQgaGFkIHNvIGZhcgorICAgICAgICAgICAgLS0gIGFsc28gVE9ETyBnZXQgbG9uZ2VyIGxlbmd0aCBzdHJpbmcsIGxpa2UgdGhlIEMgdmVyc2lvbgorICAgICAgICAgICAgZGVjbGFyZSBiZWdpbgorICAgICAgICAgICAgICAgbXlHZXQgKFN0ciA9PiBib3VuZGVkYnVmKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4KKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICJUaW1lZCBvdXQuIik7CisgICAgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgICAgICAgdGltZWRvdXQgOj0gVHJ1ZTsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgIC0tICBub3RlIHRoYXQgdGhlIEFkYSBHZXQgd2lsbCBzdG9wIHJlYWRpbmcgYXQgMTAyNC4KKyAgICAgICAgICAgIGlmIG5vdCB0aW1lZG91dCB0aGVuCisgICAgICAgICAgICAgICBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA9PiBGYWxzZSk7CisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIEkgc2F3ICciKTsKKyAgICAgICAgICAgICAgIG15QWRkIChTdHIgPT4gYm91bmRlZGJ1Zik7CisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiJy4iKTsKKyAgICAgICAgICAgICAgIEFkZCAoY2ggPT4gbmV3bCk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQ7CisgICAgICBlbHNpZiBjID0gQ2hhcmFjdGVyJ1BvcyAoJ3MnKSB0aGVuCisgICAgICAgICBTaGVsbE91dCAoVHJ1ZSk7CisgICAgICBlbHNpZiBjID0gQ2hhcmFjdGVyJ1BvcyAoJ3gnKSBvciBjID0gQ2hhcmFjdGVyJ1BvcyAoJ3EnKSBvcgorICAgICAgICAoYyA9IEtleV9Ob25lIGFuZCBibG9ja2ZsYWcgPSBCbG9ja2luZykgdGhlbgorICAgICAgICAgZXhpdDsKKyAgICAgIGVsc2lmIGMgPSBDaGFyYWN0ZXInUG9zICgnPycpIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+ICJUeXBlIGFueSBrZXkgdG8gc2VlIGl0cyBrZXlwYWQgdmFsdWUuICBBbHNvOiIpOworICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgIEFkZCAoU3RyID0+ICJnIC0tIHRyaWdnZXJzIGEgZ2V0c3RyIHRlc3QiKTsKKyAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICBBZGQgKFN0ciA9PiAicyAtLSBzaGVsbCBvdXQiKTsKKyAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICBBZGQgKFN0ciA9PiAicSAtLSBxdWl0Iik7CisgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgQWRkIChTdHIgPT4gIj8gLS0gcmVwZWF0cyB0aGlzIGhlbHAgbWVzc2FnZSIpOworICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgbG9vcAorICAgICAgICAgYyA6PSBHZXRjaGFyOworICAgICAgICAgZXhpdCB3aGVuIGMgLz0gS2V5X05vbmU7CisgICAgICAgICBpZiBibG9ja2ZsYWcgLz0gQmxvY2tpbmcgdGhlbgorICAgICAgICAgICAgUHV0ICh0bXA2LCBpbmNvdW50KTsgLS0gIGFyZ2ggc3RyaW5nIGxlbmd0aCEKKyAgICAgICAgICAgIEFkZCAoU3RyID0+IHRtcDYpOworICAgICAgICAgICAgQWRkIChTdHIgPT4gIjogaW5wdXQgdGltZWQgb3V0Iik7CisgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgUHV0ICh0bXA2LCBpbmNvdW50KTsKKyAgICAgICAgICAgIEFkZCAoU3RyID0+IHRtcDYpOworICAgICAgICAgICAgQWRkIChTdHIgPT4gIjogaW5wdXQgZXJyb3IiKTsKKyAgICAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICAgICBleGl0OworICAgICAgICAgZW5kIGlmOworICAgICAgICAgaW5jb3VudCA6PSBpbmNvdW50ICsgMTsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIGxvb3A7CisKKyAgIEVuZF9Nb3VzZSAodG1wMik7CisgICBTZXRfVGltZW91dF9Nb2RlIChNb2RlID0+IEJsb2NraW5nLCBBbW91bnQgPT4gMCk7IC0tICBhbW91bnQgaXMgaWdub3JlZAorICAgU2V0X1Jhd19Nb2RlIChTd2l0Y2hPbiA9PiBGYWxzZSk7CisgICBTZXRfTkxfTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICBFcmFzZTsKKyAgIEVuZF9XaW5kb3dzOworZW5kIG5jdXJzZXMyLmdldGNoX3Rlc3Q7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGEwYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIuZ2V0Y2hfdGVzdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzhjNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRiCkBAIC0wLDAgKzEsMTYzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjcgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjQ0ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSAgR05VIGdldG9wdCBmdW5jdGlvbgorLS0gIGNvcHlyaWdodCBGcmVlIFNvZnR3YXJlIEZvdW5kdGlvbgorCit3aXRoIEFkYS5TdHJpbmdzLkZpeGVkOword2l0aCBBZGEuU3RyaW5ncy5Cb3VuZGVkOword2l0aCBBZGEuVGV4dF9JTzsgdXNlIEFkYS5UZXh0X0lPOworCitwYWNrYWdlIGJvZHkgbmN1cnNlczIuZ2V0b3B0IGlzCisKKyAgIG5leHRjaGFyIDogTmF0dXJhbCA6PSAwOworCisgICAtLSAgTmN1cnNlcyBkb2Vzbid0IHVzZSB0aGUgbm9uIG9wdGlvbiBlbGVtZW50cyBzbyB3ZSBhcmUgc3BhcmVkCisgICAtLSAgdGhlIGpvYiBvZiBjb21wdXRpbmcgdGhvc2UuCisKKyAgIC0tICBhbHNvIHRoZSB1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIG1vZGlmeSBhcmd2IG9yIGFyZ2MKKyAgIC0tICBEb2luZyBzbyBpcyBFcnJvbmVvdXMgZXhlY3V0aW9uLgorCisgICAtLSAgbG9uZ29wdGlvbnMgYXJlIG5vdCBoYW5kbGVkLgorCisgICBwcm9jZWR1cmUgUWdldG9wdCAocmV0dmFsIDogb3V0IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgYXJnYyA6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgYXJndiA6IHN0cmluZ2Z1bmM7CisgICAgICAgICAgICAgICAgICAgICAgICAtLSAgYXJndiB3aWxsIGJlIHRoZSBBcmd1bWVudCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICBvcHRzdHJpbmcgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgb3B0aW5kIDogaW4gb3V0IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAtLSAgaWdub3JlZCBmb3IgbmN1cnNlcywgbXVzdCBiZSBpbml0aWFsaXplZCB0byAxIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAtLSAgdGhlIGNhbGxlcgorICAgICAgICAgICAgICAgICAgICAgIE9wdGFyZyA6IG91dCBzdHJpbmdhCisgICAgICAgICAgICAgICAgICAgICAgICAtLSAgYSBnYXJiYWdlIGNvbGVjdG9yIHdvdWxkIGJlIHVzZWZ1bCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgKSBpcworCisgICAgICBwYWNrYWdlIEJTIGlzIG5ldyBBZGEuU3RyaW5ncy5Cb3VuZGVkLkdlbmVyaWNfQm91bmRlZF9MZW5ndGggKDIwMCk7CisgICAgICB1c2UgQlM7CisgICAgICBvcHRhcmd4IDogQm91bmRlZF9TdHJpbmc7CisgICBiZWdpbgorCisgICAgICBpZiBhcmdjIDwgb3B0aW5kIHRoZW4KKyAgICAgICAgIHJldHZhbCA6PSAtMTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgb3B0YXJneCA6PSBUb19Cb3VuZGVkX1N0cmluZyAoIiIpOworCisgICAgICBpZiBuZXh0Y2hhciA9IDAgdGhlbgorCisgICAgICAgICBpZiBhcmd2IChvcHRpbmQpID0gIi0tIiB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgdGhlIHJlc3QgYXJlIG5vbi1vcHRpb25zLCB3ZSBpZ25vcmUgdGhlbQorICAgICAgICAgICAgcmV0dmFsIDo9IC0xOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBhcmd2IChvcHRpbmQpKDEpIC89ICctJyBvciBhcmd2IChvcHRpbmQpJ0xlbmd0aCA9IDEgdGhlbgorICAgICAgICAgICAgb3B0aW5kIDo9IG9wdGluZCArIDE7CisgICAgICAgICAgICBPcHRhcmcgOj0gbmV3IFN0cmluZycoYXJndiAob3B0aW5kKSk7CisgICAgICAgICAgICByZXR2YWwgOj0gMTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgbmV4dGNoYXIgOj0gMjsgLS0gc2tpcCB0aGUgb25lIGh5cGhlbi4KKyAgICAgIGVuZCBpZjsKKworICAgICAgLS0gIExvb2sgYXQgYW5kIGhhbmRsZSB0aGUgbmV4dCBzaG9ydCBvcHRpb24tY2hhcmFjdGVyLgorICAgICAgZGVjbGFyZQorICAgICAgICAgYyA6IENoYXJhY3RlciA6PSBhcmd2IChvcHRpbmQpIChuZXh0Y2hhcik7CisgICAgICAgICB0ZW1wIDogY29uc3RhbnQgTmF0dXJhbCA6PQorICAgICAgICAgICBBZGEuU3RyaW5ncy5GaXhlZC5JbmRleCAob3B0c3RyaW5nLCBTdHJpbmcnKDEgPT4gYykpOworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIHRlbXAgPSAwIG9yIGMgPSAnOicgdGhlbgorICAgICAgICAgICAgUHV0X0xpbmUgKFN0YW5kYXJkX0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgIGFyZ3YgKG9wdGluZCkgJiAiOiBpbnZhbGlkIG9wdGlvbiAtLSAiICYgYyk7CisgICAgICAgICAgICBjIDo9ICc/JzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgb3B0c3RyaW5nICh0ZW1wICsgMSkgPSAnOicgdGhlbgorICAgICAgICAgICAgaWYgb3B0c3RyaW5nICh0ZW1wICsgMikgPSAnOicgdGhlbgorICAgICAgICAgICAgICAgLS0gIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgYWNjZXB0cyBhbiBhcmd1bWVudCBvcHRpb25hbGx5LgorICAgICAgICAgICAgICAgaWYgbmV4dGNoYXIgLz0gYXJndiAob3B0aW5kKSdMZW5ndGggdGhlbgorICAgICAgICAgICAgICAgICAgb3B0YXJneCA6PSBUb19Cb3VuZGVkX1N0cmluZworICAgICAgICAgICAgICAgICAgICAoYXJndiAob3B0aW5kKSAobmV4dGNoYXIgLi4gYXJndiAob3B0aW5kKSdMZW5ndGgpKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIE9wdGFyZyA6PSBudWxsOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgLS0gIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXJndW1lbnQuCisgICAgICAgICAgICAgICBpZiBuZXh0Y2hhciAvPSBhcmd2IChvcHRpbmQpJ0xlbmd0aCB0aGVuCisgICAgICAgICAgICAgICAgICBvcHRhcmd4IDo9IFRvX0JvdW5kZWRfU3RyaW5nCisgICAgICAgICAgICAgICAgICAgIChhcmd2IChvcHRpbmQpIChuZXh0Y2hhciAuLiBhcmd2IChvcHRpbmQpJ0xlbmd0aCkpOworICAgICAgICAgICAgICAgICAgb3B0aW5kIDo9IG9wdGluZCArIDE7CisgICAgICAgICAgICAgICBlbHNpZiBvcHRpbmQgPSBhcmdjIHRoZW4KKyAgICAgICAgICAgICAgICAgIFB1dF9MaW5lIChTdGFuZGFyZF9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2IChvcHRpbmQpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gIiAmIGMpOworICAgICAgICAgICAgICAgICAgaWYgb3B0c3RyaW5nIChvcHRzdHJpbmcnRmlyc3QpID0gJzonICB0aGVuCisgICAgICAgICAgICAgICAgICAgICBjIDo9ICc6JzsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIGMgOj0gJz8nOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgLS0gIGluY3JlbWVudCBpdCBhZ2FpbiB3aGVuIHRha2luZyBuZXh0IEFSR1YtZWx0IGFzIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgICAgb3B0aW5kIDo9IG9wdGluZCArIDE7CisgICAgICAgICAgICAgICAgICBvcHRhcmd4IDo9IFRvX0JvdW5kZWRfU3RyaW5nIChhcmd2IChvcHRpbmQpKTsKKyAgICAgICAgICAgICAgICAgIG9wdGluZCA6PSBvcHRpbmQgKyAxOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgbmV4dGNoYXIgOj0gMDsKKyAgICAgICAgIGVsc2UgLS0gbm8gYXJndW1lbnQgZm9yIHRoZSBvcHRpb24KKyAgICAgICAgICAgIGlmIG5leHRjaGFyID0gYXJndiAob3B0aW5kKSdMZW5ndGggdGhlbgorICAgICAgICAgICAgICAgb3B0aW5kIDo9IG9wdGluZCArIDE7CisgICAgICAgICAgICAgICBuZXh0Y2hhciA6PSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgbmV4dGNoYXIgOj0gbmV4dGNoYXIgKyAxOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICByZXR2YWwgOj0gQ2hhcmFjdGVyJ1BvcyAoYyk7CisgICAgICAgICBPcHRhcmcgOj0gbmV3IFN0cmluZycoVG9fU3RyaW5nIChvcHRhcmd4KSk7CisgICAgICAgICByZXR1cm47CisgICAgICBlbmQ7CisgICBlbmQgUWdldG9wdDsKKworZW5kIG5jdXJzZXMyLmdldG9wdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIzNTZlCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRzCkBAIC0wLDAgKzEsNjAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIG5jdXJzZXMyLmdldG9wdCBpcworCisgICB0eXBlIHN0cmluZ2EgaXMgYWNjZXNzIFN0cmluZzsKKworICAgdHlwZSBzdHJpbmdmdW5jIGlzIGFjY2VzcworICAgICBmdW5jdGlvbiAobiA6IFBvc2l0aXZlKSByZXR1cm4gU3RyaW5nOworCisgICBwcm9jZWR1cmUgUWdldG9wdCAocmV0dmFsICAgIDogb3V0IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgYXJnYyAgICAgIDogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICBhcmd2ICAgICAgOiBzdHJpbmdmdW5jOworICAgICAgICAgICAgICAgICAgICAgIG9wdHN0cmluZyA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBvcHRpbmQgICAgOiBpbiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICBpZ25vcmVkIGZvciBuY3Vyc2VzLCBtdXN0IGJlIGluaXRpYWxpemVkIHRvIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICBieSB0aGUgY2FsbGVyCisgICAgICAgICAgICAgICAgICAgICAgT3B0YXJnICAgIDogb3V0IHN0cmluZ2EKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICBhIGdhcmJhZ2UgY29sbGVjdG9yIHdvdWxkIGJlIHVzZWZ1bCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgKTsKKworZW5kIG5jdXJzZXMyLmdldG9wdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW0uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjA0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW0uYWRiCkBAIC0wLDAgKzEsNDQ4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjggJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ3OjUwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFRPRE8gdXNlIERlZmF1bHRfQ2hhcmFjdGVyIHdoZXJlIGFwcHJvcHJpYXRlCisKKy0tICBUaGlzIGlzIGFuIEFkYSB2ZXJzaW9uIG9mIG5jdXJzZXMKKy0tICBJIHRyYW5zbGF0ZWQgdGhpcyBiZWNhdXNlIGl0IHRlc3RzIHRoZSBtb3N0IGZlYXR1cmVzLgorCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZTsKKword2l0aCBBZGEuVGV4dF9JTzsgdXNlIEFkYS5UZXh0X0lPOworCit3aXRoIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CistLSAgd2l0aCBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKKword2l0aCBBZGEuQ29tbWFuZF9MaW5lOyB1c2UgQWRhLkNvbW1hbmRfTGluZTsKKword2l0aCBBZGEuU3RyaW5ncy5VbmJvdW5kZWQ7CisKK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIG5jdXJzZXMyLmdldGNoX3Rlc3Q7Cit3aXRoIG5jdXJzZXMyLmF0dHJfdGVzdDsKK3dpdGggbmN1cnNlczIuY29sb3JfdGVzdDsKK3dpdGggbmN1cnNlczIuZGVtb19wYW5lbHM7Cit3aXRoIG5jdXJzZXMyLmNvbG9yX2VkaXQ7Cit3aXRoIG5jdXJzZXMyLnNsa190ZXN0Oword2l0aCBuY3Vyc2VzMi5hY3NfZGlzcGxheTsKK3dpdGggbmN1cnNlczIuYWNzX2FuZF9zY3JvbGw7Cit3aXRoIG5jdXJzZXMyLmZsdXNoaW5wX3Rlc3Q7Cit3aXRoIG5jdXJzZXMyLnRlc3Rfc2dyX2F0dHJpYnV0ZXM7Cit3aXRoIG5jdXJzZXMyLm1lbnVfdGVzdDsKK3dpdGggbmN1cnNlczIuZGVtb19wYWQ7Cit3aXRoIG5jdXJzZXMyLmRlbW9fZm9ybXM7Cit3aXRoIG5jdXJzZXMyLm92ZXJsYXBfdGVzdDsKK3dpdGggbmN1cnNlczIudHJhY2Vfc2V0OworCit3aXRoIG5jdXJzZXMyLmdldG9wdDsgdXNlIG5jdXJzZXMyLmdldG9wdDsKKworcGFja2FnZSBib2R5IG5jdXJzZXMyLm0gaXMKKyAgIHVzZSBJbnRfSU87CisKKyAgIGZ1bmN0aW9uIFRvX3RyYWNlIChuIDogSW50ZWdlcikgcmV0dXJuIFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisgICBwcm9jZWR1cmUgdXNhZ2U7CisgICBwcm9jZWR1cmUgU2V0X1Rlcm1pbmFsX01vZGVzOworICAgZnVuY3Rpb24gRG9fU2luZ2xlX1Rlc3QgKGMgOiBDaGFyYWN0ZXIpIHJldHVybiBCb29sZWFuOworCisgICBmdW5jdGlvbiBUb190cmFjZSAobiA6IEludGVnZXIpIHJldHVybiBUcmFjZV9BdHRyaWJ1dGVfU2V0IGlzCisgICAgICBhIDogVHJhY2VfQXR0cmlidXRlX1NldCA6PSAob3RoZXJzID0+IEZhbHNlKTsKKyAgICAgIG0gOiBJbnRlZ2VyOworICAgICAgcmVzdCA6IEludGVnZXI7CisgICBiZWdpbgorICAgICAgbSA6PSBuICBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuVGltZXMgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gbiAvIDI7CisKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuVHB1dHMgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLlVwZGF0ZSA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuQ3Vyc29yX01vdmUgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLkNoYXJhY3Rlcl9PdXRwdXQgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLkNhbGxzIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5WaXJ0dWFsX1B1dHMgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLklucHV0X0V2ZW50cyA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuVFRZX1N0YXRlIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5JbnRlcm5hbF9DYWxscyA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuQ2hhcmFjdGVyX0NhbGxzIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5UZXJtY2FwX1Rlcm1JbmZvIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisKKyAgICAgIHJldHVybiBhOworICAgZW5kIFRvX3RyYWNlOworCisgICAtLSAgIHRoZXNlIGFyZSB0eXBlIFN0ZHNjcl9Jbml0X1Byb2M7CisKKyAgIGZ1bmN0aW9uIHJpcF9mb290ZXIgKAorICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXI7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgcmlwX2Zvb3Rlcik7CisKKyAgIGZ1bmN0aW9uIHJpcF9mb290ZXIgKAorICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXIgaXMKKyAgIGJlZ2luCisgICAgICBTZXRfQmFja2dyb3VuZCAoV2luLCAoQ2ggPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gKFJldmVyc2VfVmlkZW8gPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiAwKSk7CisgICAgICBFcmFzZSAoV2luKTsKKyAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIDAsIDApOworICAgICAgQWRkIChXaW4sICJmb290ZXI6IiAgJiBDb2x1bW5zJ0ltZyAmICIgY29sdW1ucyIpOworICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAoV2luKTsKKyAgICAgIHJldHVybiAwOyAtLSBDdXJzZXNfT0s7CisgICBlbmQgcmlwX2Zvb3RlcjsKKworICAgZnVuY3Rpb24gcmlwX2hlYWRlciAoCisgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlcjsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCByaXBfaGVhZGVyKTsKKworICAgZnVuY3Rpb24gcmlwX2hlYWRlciAoCisgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlciBpcworICAgYmVnaW4KKyAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4sIChDaCA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IDApKTsKKyAgICAgIEVyYXNlIChXaW4pOworICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgMCwgMCk7CisgICAgICBBZGQgKFdpbiwgImhlYWRlcjoiICAmIENvbHVtbnMnSW1nICYgIiBjb2x1bW5zIik7CisgICAgICAtLSAgJ0ltZyBpcyBhIEdOQVQgZXh0ZW50aW9uCisgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChXaW4pOworICAgICAgcmV0dXJuIDA7IC0tIEN1cnNlc19PSzsKKyAgIGVuZCByaXBfaGVhZGVyOworCisgICBwcm9jZWR1cmUgdXNhZ2UgaXMKKyAgICAgIC0tICB0eXBlIFN0cmluZ2EgaXMgYWNjZXNzIFN0cmluZzsKKyAgICAgIHVzZSBBZGEuU3RyaW5ncy5VbmJvdW5kZWQ7CisgICAgICAtLSAgdGJsIDogY29uc3RhbnQgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBTdHJpbmdhIDo9ICgKKyAgICAgIHRibCA6IGNvbnN0YW50IGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgVW5ib3VuZGVkX1N0cmluZworICAgICAgICA6PSAoCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiVXNhZ2U6IG5jdXJzZXMgW29wdGlvbnNdIiksCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiIiksCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiT3B0aW9uczoiKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCIgIC1hIGYsYiAgIHNldCBkZWZhdWx0LWNvbG9ycyAiICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoYXNzdW1lZCB3aGl0ZS1vbi1ibGFjaykiKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCIgIC1kICAgICAgIHVzZSBkZWZhdWx0LWNvbG9ycyBpZiB0ZXJtaW5hbCAiICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0cyB0aGVtIiksCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiICAtZSBmbXQgICBzcGVjaWZ5IGZvcm1hdCBmb3Igc29mdC1rZXlzICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgKGUpIiksCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiICAtZiAgICAgICByaXAtb2ZmIGZvb3RlciBsaW5lICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihjYW4gcmVwZWF0KSIpLAorICAgICAgICAgICAgVG9fVW5ib3VuZGVkX1N0cmluZyAoIiAgLWggICAgICAgcmlwLW9mZiBoZWFkZXIgbGluZSAiICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoY2FuIHJlcGVhdCkiKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCIgIC1zIG1zZWMgIHNwZWNpZnkgbm9taW5hbCB0aW1lIGZvciAiICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYW5lbC1kZW1vIChkZWZhdWx0OiAxLCB0byBob2xkKSIpLAorICAgICAgICAgICAgVG9fVW5ib3VuZGVkX1N0cmluZyAoIiAgLXQgbWFzayAgc3BlY2lmeSBkZWZhdWx0IHRyYWNlLWxldmVsICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihtYXkgdG9nZ2xlIHdpdGggXlQpIikKKyAgICAgICAgICAgICk7CisgICBiZWdpbgorICAgICAgZm9yIG4gaW4gdGJsJ1JhbmdlIGxvb3AKKyAgICAgICAgIFB1dF9MaW5lIChTdGFuZGFyZF9FcnJvciwgVG9fU3RyaW5nICh0YmwgKG4pKSk7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIC0tICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAtLSAgVE9ETyBzaG91bGQgd2UgdXNlIFNldF9FeGl0X1N0YXR1cyBhbmQgdGhyb3cgYW5kIGV4Y2VwdGlvbj8KKyAgIGVuZCB1c2FnZTsKKworICAgcHJvY2VkdXJlIFNldF9UZXJtaW5hbF9Nb2RlcyBpcyBiZWdpbgorICAgICAgU2V0X1Jhd19Nb2RlIChTd2l0Y2hPbiA9PiBGYWxzZSk7CisgICAgICBTZXRfQ2JyZWFrX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgICAgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gPT4gRmFsc2UpOworICAgICAgQWxsb3dfU2Nyb2xsaW5nIChNb2RlID0+IFRydWUpOworICAgICAgVXNlX0luc2VydF9EZWxldGVfTGluZSAoRG9fSWRsID0+IFRydWUpOworICAgICAgU2V0X0tleVBhZF9Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIGVuZCBTZXRfVGVybWluYWxfTW9kZXM7CisKKyAgIG5hcF9tc2VjIDogSW50ZWdlciA6PSAxOworCisgICBmdW5jdGlvbiBEb19TaW5nbGVfVGVzdCAoYyA6IENoYXJhY3RlcikgcmV0dXJuIEJvb2xlYW4gaXMKKyAgIGJlZ2luCisgICAgICBjYXNlIGMgaXMKKyAgICAgICAgIHdoZW4gJ2EnID0+CisgICAgICAgICAgICBnZXRjaF90ZXN0OworICAgICAgICAgd2hlbiAnYicgPT4KKyAgICAgICAgICAgIGF0dHJfdGVzdDsKKyAgICAgICAgIHdoZW4gJ2MnID0+CisgICAgICAgICAgICBpZiBub3QgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICAgICAgICBDYW5ub3QgKCJkb2VzIG5vdCBzdXBwb3J0IGNvbG9yLiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgY29sb3JfdGVzdDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHdoZW4gJ2QnID0+CisgICAgICAgICAgICBpZiBub3QgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICAgICAgICBDYW5ub3QgKCJkb2VzIG5vdCBzdXBwb3J0IGNvbG9yLiIpOworICAgICAgICAgICAgZWxzaWYgbm90IENhbl9DaGFuZ2VfQ29sb3IgdGhlbgorICAgICAgICAgICAgICAgQ2Fubm90ICgiaGFzIGhhcmR3aXJlZCBjb2xvciB2YWx1ZXMuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjb2xvcl9lZGl0OworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiAnZScgPT4KKyAgICAgICAgICAgIHNsa190ZXN0OworICAgICAgICAgd2hlbiAnZicgPT4KKyAgICAgICAgICAgIGFjc19kaXNwbGF5OworICAgICAgICAgd2hlbiAnbycgPT4KKyAgICAgICAgICAgIGRlbW9fcGFuZWxzIChuYXBfbXNlYyk7CisgICAgICAgICB3aGVuICdnJyA9PgorICAgICAgICAgICAgYWNzX2FuZF9zY3JvbGw7CisgICAgICAgICB3aGVuICdpJyA9PgorICAgICAgICAgICAgZmx1c2hpbnBfdGVzdCAoU3RhbmRhcmRfV2luZG93KTsKKyAgICAgICAgIHdoZW4gJ2snID0+CisgICAgICAgICAgICB0ZXN0X3Nncl9hdHRyaWJ1dGVzOworICAgICAgICAgd2hlbiAnbScgPT4KKyAgICAgICAgICAgIG1lbnVfdGVzdDsKKyAgICAgICAgIHdoZW4gJ3AnID0+CisgICAgICAgICAgICBkZW1vX3BhZDsKKyAgICAgICAgIHdoZW4gJ3InID0+CisgICAgICAgICAgICBkZW1vX2Zvcm1zOworICAgICAgICAgd2hlbiAncycgPT4KKyAgICAgICAgICAgIG92ZXJsYXBfdGVzdDsKKyAgICAgICAgIHdoZW4gJ3QnID0+CisgICAgICAgICAgICB0cmFjZV9zZXQ7CisgICAgICAgICB3aGVuICc/JyA9PgorICAgICAgICAgICAgbnVsbDsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+IHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBjYXNlOworICAgICAgcmV0dXJuIFRydWU7CisgICBlbmQgRG9fU2luZ2xlX1Rlc3Q7CisKKyAgIGNvbW1hbmQgOiBDaGFyYWN0ZXI7CisgICBteV9lX3BhcmFtIDogU29mdF9MYWJlbF9LZXlfRm9ybWF0IDo9IEZvdXJfRm91cjsKKyAgIGFzc3VtZWRfY29sb3JzIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgIGRlZmF1bHRfY29sb3JzIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgIGRlZmF1bHRfZmcgOiBDb2xvcl9OdW1iZXIgOj0gV2hpdGU7CisgICBkZWZhdWx0X2JnIDogQ29sb3JfTnVtYmVyIDo9IEJsYWNrOworICAgLS0gIG5hcF9tc2VjIHdhcyBhbiB1bnNpZ25lZCBsb25nIGludGVnZXIgaW4gdGhlIEMgdmVyc2lvbiwKKyAgIC0tICB5ZXQgbmFwbXMgb25seSB0YWtlcyBhbiBpbnQhCisKKyAgIGMgOiBJbnRlZ2VyOworICAgYzIgOiBDaGFyYWN0ZXI7CisgICBvcHRpbmQgOiBJbnRlZ2VyIDo9IDE7IC0tIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gb25lLgorICAgb3B0YXJnIDogZ2V0b3B0LnN0cmluZ2E7CisKKyAgIGxlbmd0aCA6IEludGVnZXI7CisgICB0bXBpIDogSW50ZWdlcjsKKworICAgcGFja2FnZSBteWlvIGlzIG5ldyBBZGEuVGV4dF9JTy5JbnRlZ2VyX0lPIChJbnRlZ2VyKTsKKyAgIHVzZSBteWlvOworCisgICBzYXZlX3RyYWNlIDogSW50ZWdlciA6PSAwOworICAgc2F2ZV90cmFjZV9zZXQgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0OworCisgICBmdW5jdGlvbiBtYWluIHJldHVybiBJbnRlZ2VyIGlzCisgICBiZWdpbgorICAgICAgbG9vcAorICAgICAgICAgUWdldG9wdCAoYywgQXJndW1lbnRfQ291bnQsIEFyZ3VtZW50J0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICJhOmRlOmZoczp0OiIsIG9wdGluZCwgb3B0YXJnKTsKKyAgICAgICAgIGV4aXQgd2hlbiBjID0gLTE7CisgICAgICAgICBjMiA6PSBDaGFyYWN0ZXInVmFsIChjKTsKKyAgICAgICAgIGNhc2UgYzIgaXMKKyAgICAgICAgICAgIHdoZW4gJ2EnID0+CisgICAgICAgICAgICAgICAtLSAgQWRhIGRvZXNuJ3QgaGF2ZSBzY2FuZiwgaXQgZG9lc24ndCBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgLS0gIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgICAgICAgICAgICAgYXNzdW1lZF9jb2xvcnMgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgIG15aW8uR2V0IChvcHRhcmcuYWxsLCBJbnRlZ2VyIChkZWZhdWx0X2ZnKSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgIG15aW8uR2V0IChvcHRhcmcuYWxsIChsZW5ndGggKyAyIC4uIG9wdGFyZy5hbGwnTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIChkZWZhdWx0X2JnKSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHdoZW4gJ2QnID0+CisgICAgICAgICAgICAgICBkZWZhdWx0X2NvbG9ycyA6PSBUcnVlOworICAgICAgICAgICAgd2hlbiAnZScgPT4KKyAgICAgICAgICAgICAgIG15aW8uR2V0IChvcHRhcmcuYWxsLCB0bXBpLCBsZW5ndGgpOworICAgICAgICAgICAgICAgaWYgdG1waSA+IDMgdGhlbgorICAgICAgICAgICAgICAgICAgdXNhZ2U7CisgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIG15X2VfcGFyYW0gOj0gU29mdF9MYWJlbF9LZXlfRm9ybWF0J1ZhbCAodG1waSk7CisgICAgICAgICAgICB3aGVuICdmJyA9PgorICAgICAgICAgICAgICAgUmlwX09mZl9MaW5lcyAoLTEsIHJpcF9mb290ZXInQWNjZXNzKTsKKyAgICAgICAgICAgIHdoZW4gJ2gnID0+CisgICAgICAgICAgICAgICBSaXBfT2ZmX0xpbmVzICgxLCByaXBfaGVhZGVyJ0FjY2Vzcyk7CisgICAgICAgICAgICB3aGVuICdzJyA9PgorICAgICAgICAgICAgICAgbXlpby5HZXQgKG9wdGFyZy5hbGwsIG5hcF9tc2VjLCBsZW5ndGgpOworICAgICAgICAgICAgd2hlbiAndCcgPT4KKyAgICAgICAgICAgICAgIG15aW8uR2V0IChvcHRhcmcuYWxsLCBzYXZlX3RyYWNlLCBsZW5ndGgpOworICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgICAgIHVzYWdlOworICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICBlbmQgY2FzZTsKKyAgICAgIGVuZCBsb29wOworCisgICAgICAtLSAgdGhlIEMgdmVyc2lvbiBoYWQgYSBidW5jaCBvZiBtYWNyb3MgaGVyZS4KKworICAgICAgLS0gICBpZiAoIWlzYXR0eShmaWxlbm8oc3RkaW4pKSkKKyAgICAgIC0tICAgaXNhdHR5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYXJkIEFkYSBzbyBza2lwIGl0LgorICAgICAgc2F2ZV90cmFjZV9zZXQgOj0gVG9fdHJhY2UgKHNhdmVfdHJhY2UpOworICAgICAgVHJhY2VfT24gKHNhdmVfdHJhY2Vfc2V0KTsKKworICAgICAgSW5pdF9Tb2Z0X0xhYmVsX0tleXMgKG15X2VfcGFyYW0pOworCisgICAgICBJbml0X1NjcmVlbjsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiAoQ2ggICAgPT4gQmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCkpOworCisgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIFN0YXJ0X0NvbG9yOworICAgICAgICAgaWYgZGVmYXVsdF9jb2xvcnMgdGhlbgorICAgICAgICAgICAgVXNlX0RlZmF1bHRfQ29sb3JzOworICAgICAgICAgZWxzaWYgYXNzdW1lZF9jb2xvcnMgdGhlbgorICAgICAgICAgICAgQXNzdW1lX0RlZmF1bHRfQ29sb3JzIChkZWZhdWx0X2ZnLCBkZWZhdWx0X2JnKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgU2V0X1Rlcm1pbmFsX01vZGVzOworICAgICAgU2F2ZV9DdXJzZXNfTW9kZSAoQ3Vyc2VzKTsKKworICAgICAgRW5kX1dpbmRvd3M7CisKKyAgICAgIC0tICBUT0RPIGFkZCBtYWNybyAjaWYgYmxvY2tzLgorICAgICAgUHV0X0xpbmUgKCJXZWxjb21lIHRvICIgJiBDdXJzZXNfVmVyc2lvbiAmICIuICBQcmVzcyA/IGZvciBoZWxwLiIpOworCisgICAgICBsb29wCisgICAgICAgICBQdXRfTGluZSAoIlRoaXMgaXMgdGhlIG5jdXJzZXMgbWFpbiBtZW51Iik7CisgICAgICAgICBQdXRfTGluZSAoImEgPSBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgdGVzdCIpOworICAgICAgICAgUHV0X0xpbmUgKCJiID0gY2hhcmFjdGVyIGF0dHJpYnV0ZSB0ZXN0Iik7CisgICAgICAgICBQdXRfTGluZSAoImMgPSBjb2xvciB0ZXN0IHBhdHRlcm4iKTsKKyAgICAgICAgIFB1dF9MaW5lICgiZCA9IGVkaXQgUkdCIGNvbG9yIHZhbHVlcyIpOworICAgICAgICAgUHV0X0xpbmUgKCJlID0gZXhlcmNpc2Ugc29mdCBrZXlzIik7CisgICAgICAgICBQdXRfTGluZSAoImYgPSBkaXNwbGF5IEFDUyBjaGFyYWN0ZXJzIik7CisgICAgICAgICBQdXRfTGluZSAoImcgPSBkaXNwbGF5IHdpbmRvd3MgYW5kIHNjcm9sbGluZyIpOworICAgICAgICAgUHV0X0xpbmUgKCJpID0gdGVzdCBvZiBmbHVzaGlucCgpIik7CisgICAgICAgICBQdXRfTGluZSAoImsgPSBkaXNwbGF5IGNoYXJhY3RlciBhdHRyaWJ1dGVzIik7CisgICAgICAgICBQdXRfTGluZSAoIm0gPSBtZW51IGNvZGUgdGVzdCIpOworICAgICAgICAgUHV0X0xpbmUgKCJvID0gZXhlcmNpc2UgcGFuZWxzIGxpYnJhcnkiKTsKKyAgICAgICAgIFB1dF9MaW5lICgicCA9IGV4ZXJjaXNlIHBhZCBmZWF0dXJlcyIpOworICAgICAgICAgUHV0X0xpbmUgKCJxID0gcXVpdCIpOworICAgICAgICAgUHV0X0xpbmUgKCJyID0gZXhlcmNpc2UgZm9ybXMgY29kZSIpOworICAgICAgICAgUHV0X0xpbmUgKCJzID0gb3ZlcmxhcHBpbmctcmVmcmVzaCB0ZXN0Iik7CisgICAgICAgICBQdXRfTGluZSAoInQgPSBzZXQgdHJhY2UgbGV2ZWwiKTsKKyAgICAgICAgIFB1dF9MaW5lICgiPyA9IHJlcGVhdCB0aGlzIGNvbW1hbmQgc3VtbWFyeSIpOworCisgICAgICAgICBQdXQgKCI+ICIpOworICAgICAgICAgRmx1c2g7CisKKyAgICAgICAgIGNvbW1hbmQgOj0gQWRhLkNoYXJhY3RlcnMuTGF0aW5fMS5OVUw7CisgICAgICAgICAtLSAgICAgICAgICAgICAgZ2V0X2lucHV0OgorICAgICAgICAgLS0gICAgICAgICAgICAgIGxvb3AKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIENoIDogQ2hhcmFjdGVyOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEdldCAoQ2gpOworICAgICAgICAgICAgLS0gIFRPRE8gaWYgcmVhZChjaCkgPD0gMAorICAgICAgICAgICAgLS0gIFRPRE8gYWRhIGRvZXNuJ3QgaGF2ZSBhbiBJc19TcGFjZSBmdW5jdGlvbgorICAgICAgICAgICAgY29tbWFuZCA6PSBDaDsKKyAgICAgICAgICAgIC0tICBUT0RPIGlmIGNoID0gJ1xuJyBvciAnXHInIGFyZSB0aGVzZSBpbiBBZGE/CisgICAgICAgICBlbmQ7CisgICAgICAgICAtLSAgICAgICAgICAgICAgZW5kIGxvb3AgZ2V0X2lucHV0OworCisgICAgICAgICBkZWNsYXJlCisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgRG9fU2luZ2xlX1Rlc3QgKGNvbW1hbmQpIHRoZW4KKyAgICAgICAgICAgICAgIEZsdXNoX0lucHV0OworICAgICAgICAgICAgICAgU2V0X1Rlcm1pbmFsX01vZGVzOworICAgICAgICAgICAgICAgUmVzZXRfQ3Vyc2VzX01vZGUgKEN1cnNlcyk7CisgICAgICAgICAgICAgICBDbGVhcjsKKyAgICAgICAgICAgICAgIFJlZnJlc2g7CisgICAgICAgICAgICAgICBFbmRfV2luZG93czsKKyAgICAgICAgICAgICAgIGlmIGNvbW1hbmQgPSAnPycgdGhlbgorICAgICAgICAgICAgICAgICAgUHV0X0xpbmUgKCJUaGlzIGlzIHRoZSBuY3Vyc2VzIGNhcGFiaWxpdHkgdGVzdGVyLiIpOworICAgICAgICAgICAgICAgICAgUHV0X0xpbmUgKCJZb3UgbWF5IHNlbGVjdCBhIHRlc3QgZnJvbSB0aGUgbWFpbiBtZW51IGJ5ICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBpbmcgdGhlIik7CisgICAgICAgICAgICAgICAgICBQdXRfTGluZSAoImtleSBsZXR0ZXIgb2YgdGhlIGNob2ljZSAodGhlIGxldHRlciB0byBsZWZ0ICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiB0aGUgPSkiKTsKKyAgICAgICAgICAgICAgICAgIFB1dF9MaW5lICgiYXQgdGhlID4gcHJvbXB0LiAgVGhlIGNvbW1hbmRzIGB4JyBvciBgcScgd2lsbCAiICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhpdC4iKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIC0tICBjb250aW51ZTsgLS13aHkgY29udGludWUgaW4gdGhlIEMgdmVyc2lvbj8KKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGV4Y2VwdGlvbgorICAgICAgICAgICAgd2hlbiBDdXJzZXNfRXhjZXB0aW9uID0+IEVuZF9XaW5kb3dzOworICAgICAgICAgZW5kOworCisgICAgICAgICBleGl0IHdoZW4gY29tbWFuZCA9ICdxJzsKKyAgICAgIGVuZCBsb29wOworICAgICAgQ3Vyc2VzX0ZyZWVfQWxsOworICAgICAgcmV0dXJuIDA7IC0tIFRPRE8gRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKKyAgIGVuZCBtYWluOworCitlbmQgbmN1cnNlczIubTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZHMgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW0uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMmQ4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW0uYWRzCkBAIC0wLDAgKzEsNDMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgbmN1cnNlczIubSBpcworICAgZnVuY3Rpb24gbWFpbiByZXR1cm4gSW50ZWdlcjsKK2VuZCBuY3Vyc2VzMi5tOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzQ4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZGIKQEAgLTAsMCArMSwxNjggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5tZW51X3Rlc3QgaXMKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGU7CisgICBwcm9jZWR1cmUgeEFkZCAobCA6IExpbmVfUG9zaXRpb247IGMgOiBDb2x1bW5fUG9zaXRpb247IHMgOiBTdHJpbmcpOworCisgICBmdW5jdGlvbiBtZW51X3ZpcnR1YWxpemUgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlIGlzCisgICBiZWdpbgorICAgICAgY2FzZSBjIGlzCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKG5ld2wpIHwgS2V5X0V4aXQgPT4KKyAgICAgICAgICAgIHJldHVybiBNZW51X1JlcXVlc3RfQ29kZSdMYXN0ICsgMTsgLS0gIE1BWF9DT01NQU5EPyBUT0RPCisgICAgICAgICB3aGVuICBDaGFyYWN0ZXInUG9zICgndScpICA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsVXBfTGluZTsKKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCdkJykgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1Njcm9sbERvd25fTGluZTsKKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCdiJykgfCAgS2V5X05leHRfUGFnZSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsVXBfUGFnZTsKKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCdmJykgfCAgS2V5X1ByZXZpb3VzX1BhZ2UgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1Njcm9sbERvd25fUGFnZTsKKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCduJykgfCAgS2V5X0N1cnNvcl9Eb3duID0+CisgICAgICAgICAgICByZXR1cm4gTV9OZXh0X0l0ZW07CisgICAgICAgICB3aGVuICBDaGFyYWN0ZXInUG9zICgncCcpIHwgIEtleV9DdXJzb3JfVXAgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1ByZXZpb3VzX0l0ZW07CisgICAgICAgICB3aGVuICBDaGFyYWN0ZXInUG9zICgnICcpID0+CisgICAgICAgICAgICByZXR1cm4gTV9Ub2dnbGVfSXRlbTsKKyAgICAgICAgIHdoZW4gIEtleV9Nb3VzZSA9PgorICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgZW5kIGNhc2U7CisgICBlbmQgbWVudV92aXJ0dWFsaXplOworCisgICBNRU5VX1kgOiBjb25zdGFudCBMaW5lX0NvdW50IDo9IDg7CisgICBNRU5VX1ggOiBjb25zdGFudCBDb2x1bW5fQ291bnQgOj0gODsKKworICAgdHlwZSBTdHJpbmdfQWNjZXNzIGlzIGFjY2VzcyBTdHJpbmc7CisKKyAgIGFuaW1hbHMgOiBjb25zdGFudCBhcnJheSAoUG9zaXRpdmUgcmFuZ2UgPD4pIG9mIFN0cmluZ19BY2Nlc3MgOj0KKyAgICAgKG5ldyBTdHJpbmcnKCJMaW9ucyIpLAorICAgICAgbmV3IFN0cmluZycoIlRpZ2VycyIpLAorICAgICAgbmV3IFN0cmluZycoIkJlYXJzIiksCisgICAgICBuZXcgU3RyaW5nJygiKE9oIG15ISkiKSwKKyAgICAgIG5ldyBTdHJpbmcnKCJOZXd0cyIpLAorICAgICAgbmV3IFN0cmluZycoIlBsYXR5cGkiKSwKKyAgICAgIG5ldyBTdHJpbmcnKCJMZW11cnMiKSk7CisKKyAgIGl0ZW1zX2EgOiBjb25zdGFudCBJdGVtX0FycmF5X0FjY2VzcyA6PQorICAgICAgbmV3IEl0ZW1fQXJyYXkgKDEgLi4gYW5pbWFscydMYXN0ICsgMSk7CisKKyAgIHRtcCA6IEV2ZW50X01hc2s7CisKKyAgIHByb2NlZHVyZSB4QWRkIChsIDogTGluZV9Qb3NpdGlvbjsgYyA6IENvbHVtbl9Qb3NpdGlvbjsgcyA6IFN0cmluZykgaXMKKyAgIGJlZ2luCisgICAgICBBZGQgKExpbmUgPT4gbCwgQ29sdW1uID0+IGMsIFN0ciA9PiBzKTsKKyAgIGVuZCB4QWRkOworCisgICBtcm93cyA6IExpbmVfQ291bnQ7CisgICBtY29scyA6IENvbHVtbl9Db3VudDsKKworICAgbWVudXdpbiA6IFdpbmRvdzsKKworICAgbSA6IE1lbnU7CisKKyAgIGMxIDogS2V5X0NvZGU7CisKKyAgIGMgOiBEcml2ZXJfUmVzdWx0OworICAgciA6IE1lbnVfUmVxdWVzdF9Db2RlOworYmVnaW4KKyAgIHRtcCA6PSBTdGFydF9Nb3VzZTsKKyAgIHhBZGQgKDAsIDAsICJUaGlzIGlzIHRoZSBtZW51IHRlc3Q6Iik7CisgICB4QWRkICgyLCAwLCAiICBVc2UgdXAgYW5kIGRvd24gYXJyb3cgdG8gbW92ZSB0aGUgc2VsZWN0IGJhci4iKTsKKyAgIHhBZGQgKDMsIDAsICIgICduJyBhbmQgJ3AnIGFjdCBsaWtlIGFycm93cy4iKTsKKyAgIHhBZGQgKDQsIDAsICIgICdiJyBhbmQgJ2YnIHNjcm9sbCB1cC9kb3duIChwYWdlKSwgJ3UnIGFuZCAnZCcgKGxpbmUpLiIpOworICAgeEFkZCAoNSwgMCwgIiAgUHJlc3MgcmV0dXJuIHRvIGV4aXQuIik7CisgICBSZWZyZXNoOworCisgICBmb3IgaSBpbiBhbmltYWxzJ1JhbmdlIGxvb3AKKyAgICAgIGl0ZW1zX2EgKGkpIDo9IE5ld19JdGVtIChhbmltYWxzIChpKS5hbGwpOworICAgZW5kIGxvb3A7CisgICBpdGVtc19hIChhbmltYWxzJ0xhc3QgKyAxKSA6PSBOdWxsX0l0ZW07CisKKyAgIG0gOj0gTmV3X01lbnUgKGl0ZW1zX2EpOworCisgICBTZXRfRm9ybWF0IChtLCBMaW5lX1Bvc2l0aW9uIChhbmltYWxzJ0xhc3QgKyAxKSAvIDIsIDEpOworICAgU2NhbGUgKG0sIG1yb3dzLCBtY29scyk7CisKKyAgIG1lbnV3aW4gOj0gQ3JlYXRlIChtcm93cyArIDIsIG1jb2xzICsgMiwgTUVOVV9ZLCBNRU5VX1gpOworICAgU2V0X1dpbmRvdyAobSwgbWVudXdpbik7CisgICBTZXRfS2V5UGFkX01vZGUgKG1lbnV3aW4sIFRydWUpOworICAgQm94IChtZW51d2luKTsgLS0gMCwwPworCisgICBTZXRfU3ViX1dpbmRvdyAobSwgRGVyaXZlZF9XaW5kb3cgKG1lbnV3aW4sIG1yb3dzLCBtY29scywgMSwgMSkpOworCisgICBQb3N0IChtKTsKKworICAgbG9vcAorICAgICAgYzEgOj0gR2V0Y2hhciAobWVudXdpbik7CisgICAgICByIDo9IG1lbnVfdmlydHVhbGl6ZSAoYzEpOworICAgICAgYyA6PSBEcml2ZXIgKG0sIHIpOworICAgICAgZXhpdCB3aGVuIGMgPSBVbmtub3duX1JlcXVlc3Q7IC0tIEVfVU5LTk9XTl9DT01NQU5EPworICAgICAgaWYgYyA9IFJlcXVlc3RfRGVuaWVkIHRoZW4KKyAgICAgICAgIEJlZXA7CisgICAgICBlbmQgaWY7CisgICAgICAtLSAgY29udGludWUgPworICAgZW5kIGxvb3A7CisKKyAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMiwgQ29sdW1uID0+IDApOworICAgQWRkIChTdHIgPT4gIllvdSBjaG9zZTogIik7CisgICBBZGQgKFN0ciA9PiBOYW1lIChDdXJyZW50IChtKSkpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIFBhdXNlOyAtLSB0aGUgQyB2ZXJzaW9uIGRpZG4ndCB1c2UgUGF1c2UsIGl0IHNwZWxsZWQgaXQgb3V0CisKKyAgIFBvc3QgKG0sIEZhbHNlKTsgLS0gIHVucG9zdCwgbm90IGNsZWFyIDotKAorICAgZGVjbGFyZSBiZWdpbgorICAgICAgRGVsZXRlIChtZW51d2luKTsKKyAgIGV4Y2VwdGlvbiB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsgZW5kOworICAgLS0gIG1lbnV3aW4gaGFzIGNoaWxkcmVuIHNvIHdpbGwgcmFpc2UgdGhlIGV4Y2VwdGlvbi4KKworICAgRGVsZXRlIChtKTsKKworICAgRW5kX01vdXNlICh0bXApOworZW5kIG5jdXJzZXMyLm1lbnVfdGVzdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2U1YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5tZW51X3Rlc3Q7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW92ZXJsYXBfdGVzdC5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW92ZXJsYXBfdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlOGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkYgpAQCAtMCwwICsxLDE1NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS40ICQKKy0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCistLSAgdGVzdCBlZmZlY3RzIG9mIG92ZXJsYXBwaW5nIHdpbmRvd3MKKworcHJvY2VkdXJlIG5jdXJzZXMyLm92ZXJsYXBfdGVzdCBpcworCisgICBwcm9jZWR1cmUgZmlsbHdpbiAod2luIDogV2luZG93OyBjaCA6IENoYXJhY3Rlcik7CisgICBwcm9jZWR1cmUgY3Jvc3N3aW4gKHdpbiA6IFdpbmRvdzsgY2ggOiBDaGFyYWN0ZXIpOworCisgICBwcm9jZWR1cmUgZmlsbHdpbiAod2luIDogV2luZG93OyBjaCA6IENoYXJhY3RlcikgaXMKKyAgICAgIHkxIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIHgxIDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEdldF9TaXplICh3aW4sIHkxLCB4MSk7CisgICAgICBmb3IgeSBpbiAwIC4uIHkxIC0gMSBsb29wCisgICAgICAgICBNb3ZlX0N1cnNvciAod2luLCB5LCAwKTsKKyAgICAgICAgIGZvciB4IGluIDAgLi4geDEgLSAxIGxvb3AKKyAgICAgICAgICAgIEFkZCAod2luLCBDaCA9PiBjaCk7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBsb29wOworICAgZXhjZXB0aW9uCisgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKKyAgICAgICAgIC0tICB3cml0ZSB0byBsb3dlciByaWdodCBjb3JuZXIKKyAgIGVuZCBmaWxsd2luOworCisgICBwcm9jZWR1cmUgY3Jvc3N3aW4gKHdpbiA6IFdpbmRvdzsgY2ggOiBDaGFyYWN0ZXIpIGlzCisgICAgICB5MSA6IExpbmVfUG9zaXRpb247CisgICAgICB4MSA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgIGJlZ2luCisgICAgICBHZXRfU2l6ZSAod2luLCB5MSwgeDEpOworICAgICAgZm9yIHkgaW4gMCAuLiB5MSAtIDEgbG9vcAorICAgICAgICAgZm9yIHggaW4gMCAuLiB4MSAtIDEgbG9vcAorICAgICAgICAgICAgaWYgKCh4ID4gKHgxIC0gMSkgLyAzKSBhbmQgKHggPD0gKDIgKiAoeDEgLSAxKSkgLyAzKSkKKyAgICAgICAgICAgICAgICBvciAoKCh5ID4gKHkxIC0gMSkgLyAzKSBhbmQgKHkgPD0gKDIgKiAoeTEgLSAxKSkgLyAzKSkpIHRoZW4KKyAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yICh3aW4sIHksIHgpOworICAgICAgICAgICAgICAgQWRkICh3aW4sIENoID0+IGNoKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgY3Jvc3N3aW47CisKKyAgIC0tICBJbiBhIDI0eDgwIHNjcmVlbiBsaWtlIHNvbWUgeHRlcm1zIGFyZSwgdGhlIGluc3RydWN0aW9ucyB3aWxsCisgICAtLSAgYmUgb3ZlcndyaXR0ZW4uCisgICBjaCA6IENoYXJhY3RlcjsKKyAgIHdpbjEgOiBXaW5kb3cgOj0gTmV3X1dpbmRvdyAoOSwgMjAsIDMsIDMpOworICAgd2luMiA6IFdpbmRvdyA6PSBOZXdfV2luZG93ICg5LCAyMCwgOSwgMTYpOworYmVnaW4KKyAgIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICBSZWZyZXNoOworICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMCwgQ29sdW1uID0+IDApOworICAgQWRkIChTdHIgPT4gIlRoaXMgdGVzdCBzaG93cyB0aGUgYmVoYXZpb3Igb2Ygd25vdXRyZWZyZXNoKCkgd2l0aCAiICYKKyAgICAgICAgInJlc3BlY3QgdG8iKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAidGhlIHNoYXJlZCByZWdpb24gb2YgdHdvIG92ZXJsYXBwaW5nIHdpbmRvd3MgQSBhbmQgQi4gIiYKKyAgICAgICAgIlRoZSBjcm9zcyIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJwYXR0ZXJuIGluIGVhY2ggd2luZG93IGRvZXMgbm90IG92ZXJsYXAgdGhlIG90aGVyLiIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKworICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMTgsIENvbHVtbiA9PiAwKTsKKyAgIEFkZCAoU3RyID0+ICJhID0gcmVmcmVzaCBBLCB0aGVuIEIsIHRoZW4gZG91cGRhdGUuIGIgPSByZWZyZXNoIEIsICIgJgorICAgICAgICAidGhlbiBBLCB0aGVuIGRvdXBkYXV0ZSIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJjID0gZmlsbCB3aW5kb3cgQSB3aXRoIGxldHRlciBBLiAgICAgIGQgPSBmaWxsIHdpbmRvdyBCICIgJgorICAgICAgICAid2l0aCBsZXR0ZXIgQi4iKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiZSA9IGNyb3NzIHBhdHRlcm4gaW4gd2luZG93IEEuICAgICAgICBmID0gY3Jvc3MgcGF0dGVybiAiICYKKyAgICAgICAgImluIHdpbmRvdyBCLiIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJnID0gY2xlYXIgd2luZG93IEEuICAgICAgICAgICAgICAgICAgIGggPSBjbGVhciB3aW5kb3cgQi4iKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiaSA9IG92ZXJ3cml0ZSBBIG9udG8gQi4gICAgICAgICAgICAgICBqID0gb3ZlcndyaXRlICIgJgorICAgICAgICAiQiBvbnRvIEEuIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5RL0VTQyA9IHRlcm1pbmF0ZSB0ZXN0LiIpOworCisgICBsb29wCisgICAgICBjaCA6PSBDb2RlX1RvX0NoYXIgKEdldGNoYXIpOworICAgICAgZXhpdCB3aGVuIGNoID0gQ1RSTCAoJ1EnKSBvciBjaCA9IENUUkwgKCdbJyk7IC0tICBRVUlUIG9yIEVTQ0FQRQorICAgICAgY2FzZSBjaCBpcworICAgICAgICAgd2hlbiAnYScgPT4gLS0gIHJlZnJlc2ggd2luZG93IEEgZmlyc3QsIHRoZW4gQgorICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAod2luMSk7CisgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlICh3aW4yKTsKKyAgICAgICAgICAgIFVwZGF0ZV9TY3JlZW47CisgICAgICAgICB3aGVuICdiJyA9PiAtLSAgcmVmcmVzaCB3aW5kb3cgQiBmaXJzdCwgdGhlbiBBCisgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlICh3aW4yKTsKKyAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKHdpbjEpOworICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgICAgICAgIHdoZW4gJ2MnID0+IC0tICBmaWxsIHdpbmRvdyBBIHNvIGl0J3MgdmlzaWJsZQorICAgICAgICAgICAgZmlsbHdpbiAod2luMSwgJ0EnKTsKKyAgICAgICAgIHdoZW4gJ2QnID0+IC0tICBmaWxsIHdpbmRvdyBCIHNvIGl0J3MgdmlzaWJsZQorICAgICAgICAgICAgZmlsbHdpbiAod2luMiwgJ0InKTsKKyAgICAgICAgIHdoZW4gJ2UnID0+IC0tICBjcm9zcyB0ZXN0IHBhdHRlcm4gaW4gd2luZG93IEEKKyAgICAgICAgICAgIGNyb3Nzd2luICh3aW4xLCAnQScpOworICAgICAgICAgd2hlbiAnZicgPT4gLS0gIGNyb3NzIHRlc3QgcGF0dGVybiBpbiB3aW5kb3cgQgorICAgICAgICAgICAgY3Jvc3N3aW4gKHdpbjIsICdCJyk7CisgICAgICAgICB3aGVuICdnJyA9PiAtLSAgY2xlYXIgd2luZG93IEEKKyAgICAgICAgICAgIENsZWFyICh3aW4xKTsKKyAgICAgICAgICAgIE1vdmVfQ3Vyc29yICh3aW4xLCAwLCAwKTsKKyAgICAgICAgIHdoZW4gJ2gnID0+IC0tICBjbGVhciB3aW5kb3cgQgorICAgICAgICAgICAgQ2xlYXIgKHdpbjIpOworICAgICAgICAgICAgTW92ZV9DdXJzb3IgKHdpbjIsIDAsIDApOworICAgICAgICAgd2hlbiAnaScgPT4gLS0gIG92ZXJ3cml0ZSBBIG9udG8gQgorICAgICAgICAgICAgT3ZlcndyaXRlICh3aW4xLCB3aW4yKTsKKyAgICAgICAgIHdoZW4gJ2onID0+IC0tICBvdmVyd3JpdGUgQiBvbnRvIEEKKyAgICAgICAgICAgIE92ZXJ3cml0ZSAod2luMiwgd2luMSk7CisgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOworICAgICAgZW5kIGNhc2U7CisgICBlbmQgbG9vcDsKKworICAgRGVsZXRlICh3aW4yKTsKKyAgIERlbGV0ZSAod2luMSk7CisgICBFcmFzZTsKKyAgIEVuZF9XaW5kb3dzOworZW5kIG5jdXJzZXMyLm92ZXJsYXBfdGVzdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTZlM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5vdmVybGFwX3Rlc3Q7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItc2xrX3Rlc3QuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZmVlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgpAQCAtMCwwICsxLDE3NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCit3aXRoIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKK3dpdGggSW50ZXJmYWNlcy5DOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcHJvY2VkdXJlIG5jdXJzZXMyLnNsa190ZXN0IGlzCisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLlVuYm91bmRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKworICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IEFkYS5TdHJpbmdzLlVuYm91bmRlZC5VbmJvdW5kZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICB1c2UgQWRhLlN0cmluZ3MuVW5ib3VuZGVkOworICAgICAgdXNlIEludGVyZmFjZXMuQzsKKyAgICAgIHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworICAgICAgZnVuY3Rpb24gV2dldG5zdHIgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgIExlbiA6IGludCkgcmV0dXJuIGludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdnZXRuc3RyLCAid2dldG5zdHIiKTsKKworICAgICAgLS0gIEZJWE1FOiBob3cgdG8gY29uc3RydWN0ICIoTGVuID4gMCkgPyBMZW4gOiA4MCI/CisgICAgICBBc2sgOiBjb25zdGFudCBJbnRlcmZhY2VzLkMuc2l6ZV90IDo9IEludGVyZmFjZXMuQy5zaXplX3QnVmFsIChMZW4gKyA4MCk7CisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIEFzayk7CisKKyAgIGJlZ2luCisgICAgICBUeHQgKDApIDo9IEludGVyZmFjZXMuQy5jaGFyJ0ZpcnN0OworICAgICAgaWYgV2dldG5zdHIgKFdpbiwgVHh0LCBUeHQnTGVuZ3RoKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFN0ciA6PSBUb19VbmJvdW5kZWRfU3RyaW5nIChUb19BZGEgKFR4dCwgVHJ1ZSkpOworICAgZW5kIG15R2V0OworCisgICB1c2UgSW50X0lPOworCisgICB1c2UgQWRhLlN0cmluZ3MuVW5ib3VuZGVkOworCisgICBjIDogS2V5X0NvZGU7CisgICBidWYgOiBVbmJvdW5kZWRfU3RyaW5nOworICAgYzIgOiBDaGFyYWN0ZXI7CisgICBmbXQgOiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IENlbnRlcmVkOworICAgdG1wIDogSW50ZWdlcjsKKworYmVnaW4KKyAgIGMgOj0gQ1RSTCAoJ2wnKTsKKyAgIGxvb3AKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKKyAgICAgIGMyIDo9IENvZGVfVG9fQ2hhciAoYyk7CisgICAgICBjYXNlIGMyIGlzCisgICAgICAgICB3aGVuIENoYXJhY3RlcidWYWwgKENoYXJhY3RlcidQb3MgKCdsJykgbW9kIDE2IzIwIykgPT4gLS0gIENUUkwoJ2wnKQorICAgICAgICAgICAgRXJhc2U7CisgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgICAgICAgIEFkZCAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMjAsCisgICAgICAgICAgICAgICAgIFN0ciA9PiAiU29mdCBLZXkgRXhlcmNpc2VyIik7CisgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoT24gPT4gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKworICAgICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMiwgQ29sdW1uID0+IDApOworICAgICAgICAgICAgUCAoIkF2YWlsYWJsZSBjb21tYW5kcyBhcmU6Iik7CisgICAgICAgICAgICBQICgiIik7CisgICAgICAgICAgICBQICgiXkwgICAgICAgICAtLSByZWZyZXNoIHNjcmVlbiIpOworICAgICAgICAgICAgUCAoImEgICAgICAgICAgLS0gYWN0aXZhdGUgb3IgcmVzdG9yZSBzb2Z0IGtleXMiKTsKKyAgICAgICAgICAgIFAgKCJkICAgICAgICAgIC0tIGRpc2FibGUgc29mdCBrZXlzIik7CisgICAgICAgICAgICBQICgiYyAgICAgICAgICAtLSBzZXQgY2VudGVyZWQgZm9ybWF0IGZvciBsYWJlbHMiKTsKKyAgICAgICAgICAgIFAgKCJsICAgICAgICAgIC0tIHNldCBsZWZ0LWp1c3RpZmllZCBmb3JtYXQgZm9yIGxhYmVscyIpOworICAgICAgICAgICAgUCAoInIgICAgICAgICAgLS0gc2V0IHJpZ2h0LWp1c3RpZmllZCBmb3JtYXQgZm9yIGxhYmVscyIpOworICAgICAgICAgICAgUCAoIlsxMjM0NTY3OF0gLS0gc2V0IGxhYmVsOyBsYWJlbHMgYXJlIG51bWJlcmVkIDEgdGhyb3VnaCA4Iik7CisgICAgICAgICAgICBQICgiZSAgICAgICAgICAtLSBlcmFzZSBzdGRzY3IgKHNob3VsZCBub3QgZXJhc2UgbGFiZWxzKSIpOworICAgICAgICAgICAgUCAoInMgICAgICAgICAgLS0gdGVzdCBzY3JvbGxpbmcgb2Ygc2hvcnRlbmVkIHNjcmVlbiIpOworICAgICAgICAgICAgUCAoIngsIHEgICAgICAgLS0gcmV0dXJuIHRvIG1haW4gbWVudSIpOworICAgICAgICAgICAgUCAoIiIpOworICAgICAgICAgICAgUCAoIk5vdGU6IGlmIGFjdGl2YXRpbmcgdGhlIHNvZnQga2V5cyBjYXVzZXMgeW91ciB0ZXJtaW5hbCB0byIpOworICAgICAgICAgICAgUCAoInNjcm9sbCB1cCBvbmUgbGluZSwgeW91ciB0ZXJtaW5hbCBhdXRvLXNjcm9sbHMgd2hlbiBhbnl0aGluZyIpOworICAgICAgICAgICAgUCAoImlzIHdyaXR0ZW4gdG8gdGhlIGxhc3Qgc2NyZWVuIHBvc2l0aW9uLiAgVGhlIG5jdXJzZXMgY29kZSIpOworICAgICAgICAgICAgUCAoImRvZXMgbm90IHlldCBoYW5kbGUgdGhpcyBncmFjZWZ1bGx5LiIpOworICAgICAgICAgICAgUmVmcmVzaDsKKyAgICAgICAgICAgIFJlc3RvcmVfU29mdF9MYWJlbF9LZXlzOworCisgICAgICAgICB3aGVuICdhJyA9PgorICAgICAgICAgICAgUmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM7CisgICAgICAgICB3aGVuICdlJyA9PgorICAgICAgICAgICAgQ2xlYXI7CisgICAgICAgICB3aGVuICdzJyA9PgorICAgICAgICAgICAgQWRkIChMaW5lID0+IDIwLCBDb2x1bW4gPT4gMCwKKyAgICAgICAgICAgICAgICBTdHIgPT4gIlByZXNzIFEgdG8gc3RvcCB0aGUgc2Nyb2xsaW5nLXRlc3Q6ICIpOworICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgYyA6PSBHZXRjaGFyOworICAgICAgICAgICAgICAgYzIgOj0gQ29kZV9Ub19DaGFyIChjKTsKKyAgICAgICAgICAgICAgIGV4aXQgd2hlbiBjMiA9ICdRJzsKKyAgICAgICAgICAgICAgIC0tICBjID0gRVJSPworICAgICAgICAgICAgICAgLS0gIFRPRE8gd2hlbiBjIGlzIG5vdCBhIGNoYXJhY3RlciAoYXJyb3cga2V5KQorICAgICAgICAgICAgICAgLS0gIHRoZSBiZWhhdmlvciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgQyB2ZXJzaW9uLgorICAgICAgICAgICAgICAgQWRkIChDaCA9PiBjMik7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIHdoZW4gJ2QnID0+CisgICAgICAgICAgICBDbGVhcl9Tb2Z0X0xhYmVsX0tleXM7CisgICAgICAgICB3aGVuICdsJyA9PgorICAgICAgICAgICAgZm10IDo9IExlZnQ7CisgICAgICAgICB3aGVuICdjJyA9PgorICAgICAgICAgICAgZm10IDo9IENlbnRlcmVkOworICAgICAgICAgd2hlbiAncicgPT4KKyAgICAgICAgICAgIGZtdCA6PSBSaWdodDsKKyAgICAgICAgIHdoZW4gJzEnIHwgJzInIHwgJzMnIHwgJzQnIHwgJzUnIHwgJzYnIHwgJzcnIHwgJzgnICA9PgorICAgICAgICAgICAgQWRkIChMaW5lID0+IDIwLCBDb2x1bW4gPT4gMCwKKyAgICAgICAgICAgICAgICAgU3RyID0+ICJQbGVhc2UgZW50ZXIgdGhlIGxhYmVsIHZhbHVlOiAiKTsKKyAgICAgICAgICAgIFNldF9FY2hvX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgICAgICAgICAgbXlHZXQgKFN0ciA9PiBidWYpOworICAgICAgICAgICAgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gPT4gRmFsc2UpOworICAgICAgICAgICAgdG1wIDo9IGN0b2kgKGMyKTsKKyAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWxfTnVtYmVyICh0bXApLCBUb19TdHJpbmcgKGJ1ZiksIGZtdCk7CisgICAgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5czsKKyAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDIwLCBDb2x1bW4gPT4gMCk7CisgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgICAgIHdoZW4gJ3gnIHwgJ3EnID0+CisgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gbmVlZGVkIGEgZ290bywgaGEgaGEKKyAgICAgICAgICAgIC0tICBicmVha3MgZXhpdCB0aGUgY2FzZSBub3QgdGhlIGxvb3AgYmVjYXVzZSBmYWxsLXRocm91aAorICAgICAgICAgICAgLS0gIGhhcHBlbnMgaW4gQyEKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICBCZWVwOworICAgICAgZW5kIGNhc2U7CisgICAgICBjIDo9IEdldGNoYXI7CisgICAgICAtLSAgVE9ETyBleGl0IHdoZW4gYyA9IEVPRgorICAgZW5kIGxvb3A7CisgICBFcmFzZTsKKyAgIEVuZF9XaW5kb3dzOworZW5kIG5jdXJzZXMyLnNsa190ZXN0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZHMgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWU5NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLnNsa190ZXN0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdGVzdF9zZ3JfYXR0cmlidXRlcy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0NDlhNAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdGVzdF9zZ3JfYXR0cmlidXRlcy5hZGIKQEAgLTAsMCArMSwxODUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKKworLS0gIEdyYXBoaWMtcmVuZGl0aW9uIHRlc3QgKGFkYXB0ZWQgZnJvbSB2dHRlc3QpCisKK3Byb2NlZHVyZSBuY3Vyc2VzMi50ZXN0X3Nncl9hdHRyaWJ1dGVzIGlzCisKKyAgIHByb2NlZHVyZSB4QWRkIChsIDogTGluZV9Qb3NpdGlvbjsgYyA6IENvbHVtbl9Qb3NpdGlvbjsgcyA6IFN0cmluZyk7CisKKyAgIHByb2NlZHVyZSB4QWRkIChsIDogTGluZV9Qb3NpdGlvbjsgYyA6IENvbHVtbl9Qb3NpdGlvbjsgcyA6IFN0cmluZykgaXMKKyAgIGJlZ2luCisgICAgICBBZGQgKExpbmUgPT4gbCwgQ29sdW1uID0+IGMsIFN0ciA9PiBzKTsKKyAgIGVuZCB4QWRkOworCisgICBub3JtYWwsIGN1cnJlbnQgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKK2JlZ2luCisgICBmb3IgcGFzcyBpbiByZXZlcnNlIEJvb2xlYW4gbG9vcAorICAgICAgaWYgcGFzcyB0aGVuCisgICAgICAgICBub3JtYWwgOj0gKENoID0+ICcgJywgQXR0ciA9PiBOb3JtYWxfVmlkZW8sIENvbG9yID0+IDApOworICAgICAgZWxzZQorICAgICAgICAgbm9ybWFsIDo9IChDaCA9PiAnICcsIEF0dHIgPT4KKyAgICAgICAgICAgICAgICAgICAgICAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLCBDb2xvciA9PiAwKTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgLS0gIFVzZSBub24tZGVmYXVsdCBjb2xvcnMgaWYgcG9zc2libGUgdG8gZXhlcmNpc2UgYmNlIGEgbGl0dGxlCisgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIEluaXRfUGFpciAoMSwgV2hpdGUsIEJsdWUpOworICAgICAgICAgbm9ybWFsLkNvbG9yIDo9IDE7CisgICAgICBlbmQgaWY7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gbm9ybWFsKTsKKyAgICAgIEVyYXNlOworICAgICAgeEFkZCAoMSwgMjAsICJHcmFwaGljIHJlbmRpdGlvbiB0ZXN0IHBhdHRlcm46Iik7CisKKyAgICAgIHhBZGQgKDQsIDEsICJ2YW5pbGxhIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyIDo9IG5vdCBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXI7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICg0LCA0MCwgImJvbGQiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuVW5kZXJfTGluZSA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICg2LCA2LCAidW5kZXJsaW5lIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyICA6PSBub3QgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyOworICAgICAgY3VycmVudC5BdHRyLlVuZGVyX0xpbmUgOj0gbm90IGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoNiwgNDUsICJib2xkIHVuZGVybGluZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5CbGluayA6PSBub3QgY3VycmVudC5BdHRyLkJsaW5rOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoOCwgMSwgImJsaW5rIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJsaW5rICA6PSBub3QgY3VycmVudC5BdHRyLkJsaW5rOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyIDo9IG5vdCBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXI7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICg4LCA0MCwgImJvbGQgYmxpbmsiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuVW5kZXJfTGluZSAgOj0gbm90IGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lOworICAgICAgY3VycmVudC5BdHRyLkJsaW5rIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxMCwgNiwgInVuZGVybGluZSBibGluayIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlciAgOj0gbm90IGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlcjsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lICA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgOj0gbm90IGN1cnJlbnQuQXR0ci5CbGluazsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDEwLCA0NSwgImJvbGQgdW5kZXJsaW5lIGJsaW5rIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW8gOj0gbm90IGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoMTIsIDEsICJuZWdhdGl2ZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlciAgOj0gbm90IGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlcjsKKyAgICAgIGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvIDo9IG5vdCBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbzsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDEyLCA0MCwgImJvbGQgbmVnYXRpdmUiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuVW5kZXJfTGluZSAgOj0gbm90IGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lOworICAgICAgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW8gOj0gbm90IGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoMTQsIDYsICJ1bmRlcmxpbmUgbmVnYXRpdmUiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXIgIDo9IG5vdCBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXI7CisgICAgICBjdXJyZW50LkF0dHIuVW5kZXJfTGluZSAgOj0gbm90IGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lOworICAgICAgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW8gOj0gbm90IGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoMTQsIDQ1LCAiYm9sZCB1bmRlcmxpbmUgbmVnYXRpdmUiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxNiwgMSwgImJsaW5rIG5lZ2F0aXZlIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyICA6PSBub3QgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyOworICAgICAgY3VycmVudC5BdHRyLkJsaW5rICA6PSBub3QgY3VycmVudC5BdHRyLkJsaW5rOworICAgICAgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW8gOj0gbm90IGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoMTYsIDQwLCAiYm9sZCBibGluayBuZWdhdGl2ZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lICA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxOCwgNiwgInVuZGVybGluZSBibGluayBuZWdhdGl2ZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlciAgOj0gbm90IGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlcjsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lICA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxOCwgNDUsICJib2xkIHVuZGVybGluZSBibGluayBuZWdhdGl2ZSIpOworCisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gbm9ybWFsKTsKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMiwgQ29sdW1uID0+IDEpOworICAgICAgaWYgcGFzcyB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiAiRGFyayIpOworICAgICAgZWxzZQorICAgICAgICAgQWRkIChTdHIgPT4gIkxpZ2h0Iik7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKFN0ciA9PiAiIGJhY2tncm91bmQuICIpOworICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICBQYXVzZTsKKyAgIGVuZCBsb29wOworCisgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gQmxhbmsyKTsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CisKK2VuZCBuY3Vyc2VzMi50ZXN0X3Nncl9hdHRyaWJ1dGVzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdGVzdF9zZ3JfYXR0cmlidXRlcy5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQxMTE4MAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdGVzdF9zZ3JfYXR0cmlidXRlcy5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLnRlc3Rfc2dyX2F0dHJpYnV0ZXM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyNzE2ZQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkYgpAQCAtMCwwICsxLDQ4MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzMi50cmFjZV9zZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NjoxOCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7CisKK3dpdGggQWRhLlN0cmluZ3MuQm91bmRlZDsKKworLS0gIGludGVyYWN0aXZlbHkgc2V0IHRoZSB0cmFjZSBsZXZlbAorCitwcm9jZWR1cmUgbmN1cnNlczIudHJhY2Vfc2V0IGlzCisKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGU7CisgICBmdW5jdGlvbiBzdWJzZXQgKHN1cGVyLCBzdWIgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gQm9vbGVhbjsKKyAgIGZ1bmN0aW9uIHRyYWNlX29yIChhLCBiIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisgICBmdW5jdGlvbiB0cmFjZV9udW0gKHRsZXZlbCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBTdHJpbmc7CisgICBmdW5jdGlvbiB0cmFjZXRyYWNlICh0bGV2ZWwgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gU3RyaW5nOworICAgZnVuY3Rpb24gcnVuX3RyYWNlX21lbnUgKG0gOiBNZW51OyBjb3VudCA6IEludGVnZXIpIHJldHVybiBCb29sZWFuOworCisgICBmdW5jdGlvbiBtZW51X3ZpcnR1YWxpemUgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlIGlzCisgICBiZWdpbgorICAgICAgY2FzZSBjIGlzCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKG5ld2wpIHwgS2V5X0V4aXQgPT4KKyAgICAgICAgICAgIHJldHVybiBNZW51X1JlcXVlc3RfQ29kZSdMYXN0ICsgMTsgLS0gIE1BWF9DT01NQU5EPyBUT0RPCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCd1JykgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1Njcm9sbFVwX0xpbmU7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdkJykgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1Njcm9sbERvd25fTGluZTsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ2InKSB8IEtleV9OZXh0X1BhZ2UgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1Njcm9sbFVwX1BhZ2U7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdmJykgfCBLZXlfUHJldmlvdXNfUGFnZSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsRG93bl9QYWdlOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnbicpIHwgS2V5X0N1cnNvcl9Eb3duID0+CisgICAgICAgICAgICByZXR1cm4gTV9OZXh0X0l0ZW07CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdwJykgfCBLZXlfQ3Vyc29yX1VwID0+CisgICAgICAgICAgICByZXR1cm4gTV9QcmV2aW91c19JdGVtOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnICcpID0+CisgICAgICAgICAgICByZXR1cm4gTV9Ub2dnbGVfSXRlbTsKKyAgICAgICAgIHdoZW4gS2V5X01vdXNlID0+CisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICBlbmQgY2FzZTsKKyAgIGVuZCBtZW51X3ZpcnR1YWxpemU7CisKKyAgIHR5cGUgc3RyaW5nX2EgaXMgYWNjZXNzIFN0cmluZzsKKyAgIHR5cGUgdGJsX2VudHJ5IGlzIHJlY29yZAorICAgICAgbmFtZSA6IHN0cmluZ19hOworICAgICAgbWFzayA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisgICBlbmQgcmVjb3JkOworCisgICB0X3RibCA6IGNvbnN0YW50IGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgdGJsX2VudHJ5IDo9CisgICAgICgKKyAgICAgIChuZXcgU3RyaW5nJygiRGlzYWJsZSIpLAorICAgICAgIFRyYWNlX0Rpc2FibGUpLAorICAgICAgKG5ldyBTdHJpbmcnKCJUaW1lcyIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFRpbWVzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJUcHV0cyIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFRwdXRzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJVcGRhdGUiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhVcGRhdGUgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIkN1cnNvcl9Nb3ZlIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ3Vyc29yX01vdmUgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIkNoYXJhY3Rlcl9PdXRwdXQiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDaGFyYWN0ZXJfT3V0cHV0ID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJPcmRpbmFyeSIpLAorICAgICAgIFRyYWNlX09yZGluYXJ5KSwKKyAgICAgIChuZXcgU3RyaW5nJygiQ2FsbHMiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDYWxscyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiVmlydHVhbF9QdXRzIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVmlydHVhbF9QdXRzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJJbnB1dF9FdmVudHMiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhJbnB1dF9FdmVudHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIlRUWV9TdGF0ZSIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFRUWV9TdGF0ZSA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiSW50ZXJuYWxfQ2FsbHMiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhJbnRlcm5hbF9DYWxscyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiQ2hhcmFjdGVyX0NhbGxzIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2hhcmFjdGVyX0NhbGxzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJUZXJtY2FwX1Rlcm1JbmZvIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVGVybWNhcF9UZXJtSW5mbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiTWF4aW1pdW0iKSwKKyAgICAgICBUcmFjZV9NYXhpbXVtKQorICAgICAgKTsKKworICAgcGFja2FnZSBCUyBpcyBuZXcgQWRhLlN0cmluZ3MuQm91bmRlZC5HZW5lcmljX0JvdW5kZWRfTGVuZ3RoICgzMDApOworCisgICBmdW5jdGlvbiBzdWJzZXQgKHN1cGVyLCBzdWIgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGlmCisgICAgICAgIChzdXBlci5UaW1lcyBvciBub3Qgc3ViLlRpbWVzKSBhbmQKKyAgICAgICAgKHN1cGVyLlRwdXRzIG9yIG5vdCBzdWIuVHB1dHMpIGFuZAorICAgICAgICAoc3VwZXIuVXBkYXRlIG9yIG5vdCBzdWIuVXBkYXRlKSBhbmQKKyAgICAgICAgKHN1cGVyLkN1cnNvcl9Nb3ZlIG9yIG5vdCBzdWIuQ3Vyc29yX01vdmUpIGFuZAorICAgICAgICAoc3VwZXIuQ2hhcmFjdGVyX091dHB1dCBvciBub3Qgc3ViLkNoYXJhY3Rlcl9PdXRwdXQpIGFuZAorICAgICAgICAoc3VwZXIuQ2FsbHMgb3Igbm90IHN1Yi5DYWxscykgYW5kCisgICAgICAgIChzdXBlci5WaXJ0dWFsX1B1dHMgb3Igbm90IHN1Yi5WaXJ0dWFsX1B1dHMpIGFuZAorICAgICAgICAoc3VwZXIuSW5wdXRfRXZlbnRzIG9yIG5vdCBzdWIuSW5wdXRfRXZlbnRzKSBhbmQKKyAgICAgICAgKHN1cGVyLlRUWV9TdGF0ZSBvciBub3Qgc3ViLlRUWV9TdGF0ZSkgYW5kCisgICAgICAgIChzdXBlci5JbnRlcm5hbF9DYWxscyBvciBub3Qgc3ViLkludGVybmFsX0NhbGxzKSBhbmQKKyAgICAgICAgKHN1cGVyLkNoYXJhY3Rlcl9DYWxscyBvciBub3Qgc3ViLkNoYXJhY3Rlcl9DYWxscykgYW5kCisgICAgICAgIChzdXBlci5UZXJtY2FwX1Rlcm1JbmZvIG9yIG5vdCBzdWIuVGVybWNhcF9UZXJtSW5mbykgYW5kCisgICAgICAgIFRydWUgdGhlbgorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgc3Vic2V0OworCisgICBmdW5jdGlvbiB0cmFjZV9vciAoYSwgYiA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBUcmFjZV9BdHRyaWJ1dGVfU2V0IGlzCisgICAgICByZXR2YWwgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0IDo9IFRyYWNlX0Rpc2FibGU7CisgICBiZWdpbgorICAgICAgcmV0dmFsLlRpbWVzIDo9IChhLlRpbWVzIG9yIGIuVGltZXMpOworICAgICAgcmV0dmFsLlRwdXRzIDo9IChhLlRwdXRzIG9yIGIuVHB1dHMpOworICAgICAgcmV0dmFsLlVwZGF0ZSA6PSAoYS5VcGRhdGUgb3IgYi5VcGRhdGUpOworICAgICAgcmV0dmFsLkN1cnNvcl9Nb3ZlIDo9IChhLkN1cnNvcl9Nb3ZlIG9yIGIuQ3Vyc29yX01vdmUpOworICAgICAgcmV0dmFsLkNoYXJhY3Rlcl9PdXRwdXQgOj0gKGEuQ2hhcmFjdGVyX091dHB1dCBvciBiLkNoYXJhY3Rlcl9PdXRwdXQpOworICAgICAgcmV0dmFsLkNhbGxzIDo9IChhLkNhbGxzIG9yIGIuQ2FsbHMpOworICAgICAgcmV0dmFsLlZpcnR1YWxfUHV0cyA6PSAoYS5WaXJ0dWFsX1B1dHMgb3IgYi5WaXJ0dWFsX1B1dHMpOworICAgICAgcmV0dmFsLklucHV0X0V2ZW50cyA6PSAoYS5JbnB1dF9FdmVudHMgb3IgYi5JbnB1dF9FdmVudHMpOworICAgICAgcmV0dmFsLlRUWV9TdGF0ZSA6PSAoYS5UVFlfU3RhdGUgb3IgYi5UVFlfU3RhdGUpOworICAgICAgcmV0dmFsLkludGVybmFsX0NhbGxzIDo9IChhLkludGVybmFsX0NhbGxzIG9yIGIuSW50ZXJuYWxfQ2FsbHMpOworICAgICAgcmV0dmFsLkNoYXJhY3Rlcl9DYWxscyA6PSAoYS5DaGFyYWN0ZXJfQ2FsbHMgb3IgYi5DaGFyYWN0ZXJfQ2FsbHMpOworICAgICAgcmV0dmFsLlRlcm1jYXBfVGVybUluZm8gOj0gKGEuVGVybWNhcF9UZXJtSW5mbyBvciBiLlRlcm1jYXBfVGVybUluZm8pOworCisgICAgICByZXR1cm4gcmV0dmFsOworICAgZW5kIHRyYWNlX29yOworCisgICAtLSAgUHJpbnQgdGhlIGhleGFkZWNpbWFsIHZhbHVlIG9mIHRoZSBtYXNrIHNvCisgICAtLSAgdXNlcnMgY2FuIHNldCBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgIGZ1bmN0aW9uIHRyYWNlX251bSAodGxldmVsIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFN0cmluZyBpcworICAgICAgcmVzdWx0IDogSW50ZWdlciA6PSAwOworICAgICAgbSA6IEludGVnZXIgOj0gMTsKKyAgIGJlZ2luCisKKyAgICAgIGlmIHRsZXZlbC5UaW1lcyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5UcHV0cyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5VcGRhdGUgdGhlbgorICAgICAgICAgcmVzdWx0IDo9IHJlc3VsdCArIG07CisgICAgICBlbmQgaWY7CisgICAgICBtIDo9IG0gKiAyOworCisgICAgICBpZiB0bGV2ZWwuQ3Vyc29yX01vdmUgdGhlbgorICAgICAgICAgcmVzdWx0IDo9IHJlc3VsdCArIG07CisgICAgICBlbmQgaWY7CisgICAgICBtIDo9IG0gKiAyOworCisgICAgICBpZiB0bGV2ZWwuQ2hhcmFjdGVyX091dHB1dCB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5DYWxscyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5WaXJ0dWFsX1B1dHMgdGhlbgorICAgICAgICAgcmVzdWx0IDo9IHJlc3VsdCArIG07CisgICAgICBlbmQgaWY7CisgICAgICBtIDo9IG0gKiAyOworCisgICAgICBpZiB0bGV2ZWwuSW5wdXRfRXZlbnRzIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLlRUWV9TdGF0ZSB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5JbnRlcm5hbF9DYWxscyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5DaGFyYWN0ZXJfQ2FsbHMgdGhlbgorICAgICAgICAgcmVzdWx0IDo9IHJlc3VsdCArIG07CisgICAgICBlbmQgaWY7CisgICAgICBtIDo9IG0gKiAyOworCisgICAgICBpZiB0bGV2ZWwuVGVybWNhcF9UZXJtSW5mbyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisgICAgICByZXR1cm4gcmVzdWx0J0ltZzsKKyAgIGVuZCB0cmFjZV9udW07CisKKyAgIGZ1bmN0aW9uIHRyYWNldHJhY2UgKHRsZXZlbCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBTdHJpbmcgaXMKKworICAgICAgdXNlIEJTOworICAgICAgYnVmIDogQm91bmRlZF9TdHJpbmcgOj0gVG9fQm91bmRlZF9TdHJpbmcgKCIiKTsKKyAgIGJlZ2luCisgICAgICAtLSAgVGhlIEMgdmVyc2lvbiBwcmludHMgdGhlIGhleGFkZWNpbWFsIHZhbHVlIG9mIHRoZSBtYXNrLCB3ZQorICAgICAgLS0gIHdvbid0IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHRoaXMgaXMgQWRhLgorCisgICAgICBpZiB0bGV2ZWwgPSBUcmFjZV9EaXNhYmxlIHRoZW4KKyAgICAgICAgIEFwcGVuZCAoYnVmLCAiVHJhY2VfRGlzYWJsZSIpOworICAgICAgZWxzZQorCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVGltZXMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJUaW1lcyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVHB1dHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJUcHV0cyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVXBkYXRlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVXBkYXRlIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDdXJzb3JfTW92ZSA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIkN1cnNvcl9Nb3ZlIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDaGFyYWN0ZXJfT3V0cHV0ID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiQ2hhcmFjdGVyX091dHB1dCIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfT3JkaW5hcnkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiT3JkaW5hcnkiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKENhbGxzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiQ2FsbHMiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFZpcnR1YWxfUHV0cyA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlZpcnR1YWxfUHV0cyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoSW5wdXRfRXZlbnRzID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiSW5wdXRfRXZlbnRzIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUVFlfU3RhdGUgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJUVFlfU3RhdGUiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKEludGVybmFsX0NhbGxzID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiSW50ZXJuYWxfQ2FsbHMiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKENoYXJhY3Rlcl9DYWxscyA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIkNoYXJhY3Rlcl9DYWxscyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVGVybWNhcF9UZXJtSW5mbyA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlRlcm1jYXBfVGVybUluZm8iKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX01heGltdW0pIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiTWF4aW1pdW0iKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgaWYgVG9fU3RyaW5nIChidWYpIChMZW5ndGggKGJ1ZikgLSAxKSA9ICcsJyB0aGVuCisgICAgICAgICBEZWxldGUgKGJ1ZiwgTGVuZ3RoIChidWYpIC0gMSwgTGVuZ3RoIChidWYpKTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgcmV0dXJuIFRvX1N0cmluZyAoYnVmKTsKKyAgIGVuZCB0cmFjZXRyYWNlOworCisgICBmdW5jdGlvbiBydW5fdHJhY2VfbWVudSAobSA6IE1lbnU7IGNvdW50IDogSW50ZWdlcikgcmV0dXJuIEJvb2xlYW4gaXMKKyAgICAgIGksIHAgOiBJdGVtOworICAgICAgY2hhbmdlZCA6IEJvb2xlYW47CisgICAgICBjLCB2IDogS2V5X0NvZGU7CisgICBiZWdpbgorICAgICAgbG9vcAorICAgICAgICAgY2hhbmdlZCA6PSAoY291bnQgLz0gMCk7CisgICAgICAgICBjIDo9IEdldGNoYXIgKEdldF9XaW5kb3cgKG0pKTsKKyAgICAgICAgIHYgOj0gbWVudV92aXJ0dWFsaXplIChjKTsKKyAgICAgICAgIGNhc2UgRHJpdmVyIChtLCB2KSBpcworICAgICAgICAgICAgd2hlbiBVbmtub3duX1JlcXVlc3QgPT4KKyAgICAgICAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICAgICBpIDo9IEN1cnJlbnQgKG0pOworICAgICAgICAgICAgICAgaWYgaSA9IE1lbnVzLkl0ZW1zIChtLCAxKSB0aGVuIC0tIHRoZSBmaXJzdCBpdGVtCisgICAgICAgICAgICAgICAgICBmb3IgbiBpbiB0X3RibCdGaXJzdCArIDEgLi4gdF90YmwnTGFzdCBsb29wCisgICAgICAgICAgICAgICAgICAgICBpZiBWYWx1ZSAoaSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0X1ZhbHVlIChpLCBGYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGZvciBuIGluIHRfdGJsJ0ZpcnN0ICsgMSAuLiB0X3RibCdMYXN0IGxvb3AKKyAgICAgICAgICAgICAgICAgICAgIHAgOj0gTWVudXMuSXRlbXMgKG0sIG4pOworICAgICAgICAgICAgICAgICAgICAgaWYgVmFsdWUgKHApIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldF9WYWx1ZSAoTWVudXMuSXRlbXMgKG0sIDEpLCBGYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBpZiBub3QgY2hhbmdlZCB0aGVuCisgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBjYXNlOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgcnVuX3RyYWNlX21lbnU7CisKKyAgIG5jX3RyYWNpbmcsIG1hc2sgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0OworICAgcHJhZ21hIEltcG9ydCAoQywgbmNfdHJhY2luZywgIl9uY190cmFjaW5nIik7CisgICBpdGVtc19hIDogY29uc3RhbnQgSXRlbV9BcnJheV9BY2Nlc3MgOj0KKyAgICAgbmV3IEl0ZW1fQXJyYXkgKHRfdGJsJ0ZpcnN0IC4uIHRfdGJsJ0xhc3QgKyAxKTsKKyAgIG1yb3dzIDogTGluZV9Db3VudDsKKyAgIG1jb2xzIDogQ29sdW1uX0NvdW50OworICAgbWVudXdpbiA6IFdpbmRvdzsKKyAgIG1lbnVfeSA6IGNvbnN0YW50IExpbmVfUG9zaXRpb24gOj0gODsKKyAgIG1lbnVfeCA6IGNvbnN0YW50IENvbHVtbl9Qb3NpdGlvbiA6PSA4OworICAgaXAgOiBJdGVtOworICAgbSA6IE1lbnU7CisgICBjb3VudCA6IEludGVnZXI7CisgICBuZXd0cmFjZSA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CitiZWdpbgorICAgQWRkIChMaW5lID0+IDAsIENvbHVtbiA9PiAwLCBTdHIgPT4gIkludGVyYWN0aXZlbHkgc2V0IHRyYWNlIGxldmVsOiIpOworICAgQWRkIChMaW5lID0+IDIsIENvbHVtbiA9PiAwLAorICAgICAgICBTdHIgPT4gIiAgUHJlc3Mgc3BhY2UgYmFyIHRvIHRvZ2dsZSBhIHNlbGVjdGlvbi4iKTsKKyAgIEFkZCAoTGluZSA9PiAzLCBDb2x1bW4gPT4gMCwKKyAgICAgICAgU3RyID0+ICIgIFVzZSB1cCBhbmQgZG93biBhcnJvdyB0byBtb3ZlIHRoZSBzZWxlY3QgYmFyLiIpOworICAgQWRkIChMaW5lID0+IDQsIENvbHVtbiA9PiAwLAorICAgICAgICBTdHIgPT4gIiAgUHJlc3MgcmV0dXJuIHRvIHNldCB0aGUgdHJhY2UgbGV2ZWwuIik7CisgICBBZGQgKExpbmUgPT4gNiwgQ29sdW1uID0+IDAsIFN0ciA9PiAiKEN1cnJlbnQgdHJhY2UgbGV2ZWwgaXMgIik7CisgICBBZGQgKFN0ciA9PiB0cmFjZXRyYWNlIChuY190cmFjaW5nKSAmICIgbnVtZXJpY2FsbHk6ICIgJgorICAgICAgICB0cmFjZV9udW0gKG5jX3RyYWNpbmcpKTsKKyAgIEFkZCAoQ2ggPT4gJyknKTsKKworICAgUmVmcmVzaDsKKworICAgZm9yIG4gaW4gdF90YmwnUmFuZ2UgbG9vcAorICAgICAgaXRlbXNfYSAobikgOj0gTmV3X0l0ZW0gKHRfdGJsIChuKS5uYW1lLmFsbCk7CisgICBlbmQgbG9vcDsKKyAgIGl0ZW1zX2EgKHRfdGJsJ0xhc3QgKyAxKSA6PSBOdWxsX0l0ZW07CisKKyAgIG0gOj0gTmV3X01lbnUgKGl0ZW1zX2EpOworCisgICBTZXRfRm9ybWF0IChtLCAxNiwgMik7CisgICBTY2FsZSAobSwgbXJvd3MsIG1jb2xzKTsKKworICAgU3dpdGNoX09wdGlvbnMgKG0sIChPbmVfVmFsdWVkID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksIE9uID0+IEZhbHNlKTsKKyAgIG1lbnV3aW4gOj0gTmV3X1dpbmRvdyAobXJvd3MgKyAyLCBtY29scyArIDIsIG1lbnVfeSwgbWVudV94KTsKKyAgIFNldF9XaW5kb3cgKG0sIG1lbnV3aW4pOworICAgU2V0X0tleVBhZF9Nb2RlIChtZW51d2luLCBTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIEJveCAobWVudXdpbik7CisKKyAgIFNldF9TdWJfV2luZG93IChtLCBEZXJpdmVkX1dpbmRvdyAobWVudXdpbiwgbXJvd3MsIG1jb2xzLCAxLCAxKSk7CisKKyAgIFBvc3QgKG0pOworCisgICBmb3IgbiBpbiB0X3RibCdSYW5nZSBsb29wCisgICAgICBpcCA6PSBJdGVtcyAobSwgbik7CisgICAgICBtYXNrIDo9IHRfdGJsIChuKS5tYXNrOworICAgICAgaWYgbWFzayA9IFRyYWNlX0Rpc2FibGUgdGhlbgorICAgICAgICAgU2V0X1ZhbHVlIChpcCwgbmNfdHJhY2luZyA9IFRyYWNlX0Rpc2FibGUpOworICAgICAgZWxzaWYgc3Vic2V0IChzdWIgPT4gbWFzaywgc3VwZXIgPT4gbmNfdHJhY2luZykgdGhlbgorICAgICAgICAgU2V0X1ZhbHVlIChpcCwgVHJ1ZSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgbG9vcDsKKworICAgY291bnQgOj0gMTsKKyAgIHdoaWxlIHJ1bl90cmFjZV9tZW51IChtLCBjb3VudCkgbG9vcAorICAgICAgY291bnQgOj0gY291bnQgKyAxOworICAgZW5kIGxvb3A7CisKKyAgIG5ld3RyYWNlIDo9IFRyYWNlX0Rpc2FibGU7CisgICBmb3IgbiBpbiB0X3RibCdSYW5nZSBsb29wCisgICAgICBpcCA6PSBJdGVtcyAobSwgbik7CisgICAgICBpZiBWYWx1ZSAoaXApIHRoZW4KKyAgICAgICAgIG1hc2sgOj0gdF90YmwgKG4pLm1hc2s7CisgICAgICAgICBuZXd0cmFjZSA6PSB0cmFjZV9vciAobmV3dHJhY2UsIG1hc2spOworICAgICAgZW5kIGlmOworICAgZW5kIGxvb3A7CisKKyAgIFRyYWNlX09uIChuZXd0cmFjZSk7CisgICBUcmFjZV9QdXQgKCJ0cmFjZSBsZXZlbCBpbnRlcmFjdGl2ZWx5IHNldCB0byAiICYKKyAgICAgICAgICAgICAgdHJhY2V0cmFjZSAobmNfdHJhY2luZykpOworCisgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lcyAtIDQsIENvbHVtbiA9PiAwKTsKKyAgIEFkZCAoU3RyID0+ICJUcmFjZSBsZXZlbCBpcyAiKTsKKyAgIEFkZCAoU3RyID0+IHRyYWNldHJhY2UgKG5jX3RyYWNpbmcpKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBQYXVzZTsgLS0gd2FzIGp1c3QgQWRkKCk7IEdldGNoYXIKKworICAgUG9zdCAobSwgRmFsc2UpOworICAgLS0gIG1lbnV3aW4gaGFzIHN1YndpbmRvd3MgSSB0aGluaywgd2hpY2ggbWFrZXMgYW4gZXJyb3IuCisgICBkZWNsYXJlIGJlZ2luCisgICAgICBEZWxldGUgKG1lbnV3aW4pOworICAgZXhjZXB0aW9uIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOyBlbmQ7CisKKyAgIC0tICBmcmVlX21lbnUobSk7CisgICAtLSAgZnJlZV9pdGVtKCkKK2VuZCBuY3Vyc2VzMi50cmFjZV9zZXQ7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZHMgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiZjhjYQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMyLnRyYWNlX3NldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIudHJhY2Vfc2V0OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlMzI3MgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZGIKQEAgLTAsMCArMSwxOTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlczIudXRpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNyAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTE6MjAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5UZXh0X0lPOyB1c2UgQWRhLlRleHRfSU87CisKK3ByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CitwcmFnbWEgV2FybmluZ3MgKE9uKTsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZTsKKword2l0aCBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOworCit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOworCit3aXRoIG5jdXJzZXMyLmdlbmVyaWNQdXRzOworCitwYWNrYWdlIGJvZHkgbmN1cnNlczIudXRpbCBpcworCisgICAtLSAgI2RlZmluZXMgZnJvbSBDCisgICAtLSAgI2RlZmluZSBDVFJMKHgpICAgICAgICAgKCh4KSAmIDB4MWYpCisgICBmdW5jdGlvbiBDVFJMIChjIDogQ2hhcmFjdGVyKSByZXR1cm4gS2V5X0NvZGUgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2hhcmFjdGVyJ1BvcyAoYykgbW9kIDE2IzIwIzsKKyAgICAgIC0tICB1c2VzIGEgcHJvcGVydHkgb2YgQVNDSUkKKyAgICAgIC0tICBBID0gMTYjNDEjOyBhID0gMTYjNjEjOyBeQSA9IDEgb3IgMTYjMSMKKyAgIGVuZCBDVFJMOworCisgICBmdW5jdGlvbiBDVFJMIChjIDogQ2hhcmFjdGVyKSByZXR1cm4gQ2hhcmFjdGVyIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIENoYXJhY3RlcidWYWwgKENoYXJhY3RlcidQb3MgKGMpIG1vZCAxNiMyMCMpOworICAgICAgLS0gIHVzZXMgYSBwcm9wZXJ0eSBvZiBBU0NJSQorICAgICAgLS0gIEEgPSAxNiM0MSM7IGEgPSAxNiM2MSM7IF5BID0gMSBvciAxNiMxIworICAgZW5kIENUUkw7CisKKyAgIHNhdmVfdHJhY2UgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0OworICAgLS0gIENvbW1vbiBmdW5jdGlvbiB0byBhbGxvdyBeVCB0byB0b2dnbGUgdHJhY2UtbW9kZSBpbiB0aGUgbWlkZGxlIG9mIGEgdGVzdAorICAgLS0gIHNvIHRoYXQgdHJhY2UtZmlsZXMgY2FuIGJlIG1hZGUgc21hbGxlci4KKyAgIGZ1bmN0aW9uIEdldGNoYXIgKHdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBLZXlfQ29kZSBpcworICAgICAgYyA6IEtleV9Db2RlOworICAgYmVnaW4KKyAgICAgIC0tICAjaWZkZWYgVFJBQ0UKKyAgICAgIGMgOj0gR2V0X0tleXN0cm9rZSAod2luKTsKKyAgICAgIHdoaWxlIGMgPSBDVFJMICgnVCcpIGxvb3AKKyAgICAgICAgIC0tICBpZiBfbmNfdHJhY2luZyAgaW4gQworICAgICAgICAgaWYgQ3VycmVudF9UcmFjZV9TZXR0aW5nIC89IFRyYWNlX0Rpc2FibGUgdGhlbgorICAgICAgICAgICAgc2F2ZV90cmFjZSA6PSBDdXJyZW50X1RyYWNlX1NldHRpbmc7CisgICAgICAgICAgICBUcmFjZV9QdXQgKCJUT0dHTEUtVFJBQ0lORyBPRkYiKTsKKyAgICAgICAgICAgIEN1cnJlbnRfVHJhY2VfU2V0dGluZyA6PSBUcmFjZV9EaXNhYmxlOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgQ3VycmVudF9UcmFjZV9TZXR0aW5nIDo9IHNhdmVfdHJhY2U7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBUcmFjZV9PbiAoQ3VycmVudF9UcmFjZV9TZXR0aW5nKTsKKyAgICAgICAgIGlmIEN1cnJlbnRfVHJhY2VfU2V0dGluZyAvPSBUcmFjZV9EaXNhYmxlIHRoZW4KKyAgICAgICAgICAgIFRyYWNlX1B1dCAoIlRPR0dMRS1UUkFDSU5HIE9OIik7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIC0tICAjZWxzZSBjIDo9IEdldF9LZXlzdHJva2U7CisgICAgICByZXR1cm4gYzsKKyAgIGVuZCBHZXRjaGFyOworCisgICBwcm9jZWR1cmUgR2V0Y2hhciAod2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgaXMKKyAgIGJlZ2luCisgICAgICBpZiBHZXRjaGFyICh3aW4pIDwgMCB0aGVuCisgICAgICAgICBCZWVwOworICAgICAgZW5kIGlmOworICAgZW5kIEdldGNoYXI7CisKKyAgIHByb2NlZHVyZSBQYXVzZSBpcworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMSwgQ29sdW1uID0+IDApOworICAgICAgQWRkIChTdHIgPT4gIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4gIik7CisgICAgICBHZXRjaGFyOworICAgZW5kIFBhdXNlOworCisgICBwcm9jZWR1cmUgQ2Fubm90IChzIDogU3RyaW5nKSBpcworICAgICAgdXNlIEludGVyZmFjZXMuQzsKKyAgICAgIHVzZSBJbnRlcmZhY2VzLkMuU3RyaW5nczsKKyAgICAgIHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKyAgICAgIGZ1bmN0aW9uIGdldGVudiAoeCA6IGNoYXJfYXJyYXkpICByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgZ2V0ZW52LCAiZ2V0ZW52Iik7CisgICAgICB0bXAxIDogY2hhcl9hcnJheSAoMCAuLiAxMCk7CisgICAgICBwYWNrYWdlIHAgaXMgbmV3IG5jdXJzZXMyLmdlbmVyaWNQdXRzICgxMDI0KTsKKyAgICAgIHVzZSBwOworICAgICAgdXNlIHAuQlM7CisKKyAgICAgIHRtcGIgOiBCUy5Cb3VuZGVkX1N0cmluZzsKKworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKCJURVJNIiwgdG1wMSwgTGVuZ3RoKTsKKyAgICAgIEZpbGxfU3RyaW5nIChnZXRlbnYgKHRtcDEpLCB0bXBiKTsKKyAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICBteUFkZCAoU3RyID0+ICJUaGlzICIgJiB0bXBiICYgIiB0ZXJtaW5hbCAiICYgcyk7CisgICAgICBQYXVzZTsKKyAgIGVuZCBDYW5ub3Q7CisKKyAgIHByb2NlZHVyZSBTaGVsbE91dCAobWVzc2FnZSA6IEJvb2xlYW4pIGlzCisgICAgICB1c2UgSW50ZXJmYWNlcy5DOworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiAxMCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICAgICBwcm9jZWR1cmUgc3lzdGVtICh4IDogY2hhcl9hcnJheSk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBzeXN0ZW0sICJzeXN0ZW0iKTsKKyAgIGJlZ2luCisgICAgICBUb19DICgic2giLCBUeHQsICBMZW5ndGgpOworICAgICAgaWYgbWVzc2FnZSB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiAiU2hlbGxpbmcgb3V0Li4uIik7CisgICAgICBlbmQgaWY7CisgICAgICBTYXZlX0N1cnNlc19Nb2RlIChNb2RlID0+IEN1cnNlcyk7CisgICAgICBFbmRfV2luZG93czsKKyAgICAgIHN5c3RlbSAoVHh0KTsKKyAgICAgIGlmIG1lc3NhZ2UgdGhlbgorICAgICAgICAgQWRkIChTdHIgPT4gInJldHVybmVkIGZyb20gc2hlbGxvdXQuIik7CisgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgZW5kIGlmOworICAgICAgUmVmcmVzaDsKKyAgIGVuZCBTaGVsbE91dDsKKworICAgZnVuY3Rpb24gSXNfRGlnaXQgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIEJvb2xlYW4gaXMKKyAgIGJlZ2luCisgICAgICBpZiBjID49IDE2IzEwMCMgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nLklzX0RpZ2l0IChDaGFyYWN0ZXInVmFsIChjKSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXNfRGlnaXQ7CisKKyAgIHByb2NlZHVyZSBQIChzIDogU3RyaW5nKSBpcworICAgYmVnaW4KKyAgICAgIEFkZCAoU3RyID0+IHMpOworICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIGVuZCBQOworCisgICBmdW5jdGlvbiBDb2RlX1RvX0NoYXIgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIENoYXJhY3RlciBpcworICAgYmVnaW4KKyAgICAgIGlmIGMgPiBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInTGFzdCkgdGhlbgorICAgICAgICAgcmV0dXJuIENoYXJhY3RlcidWYWwgKDApOworICAgICAgICAgLS0gIG1heWJlIHJhaXNlIGV4Y2VwdGlvbj8KKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBDaGFyYWN0ZXInVmFsIChjKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDb2RlX1RvX0NoYXI7CisKKyAgIC0tICBUaGlzIHdhcyB1bnRlc3RhYmxlIGR1ZSB0byBhIGJ1ZyBpbiBHTkFUICgzLjEycCkKKyAgIC0tICBIbW0sIHdoYXQgYnVnPyBJIGRvbid0IHJlbWVtYmVyLgorICAgZnVuY3Rpb24gY3RvaSAoYyA6IENoYXJhY3RlcikgcmV0dXJuIEludGVnZXIgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2hhcmFjdGVyJ1BvcyAoYykgLSBDaGFyYWN0ZXInUG9zICgnMCcpOworICAgZW5kIGN0b2k7CisKK2VuZCBuY3Vyc2VzMi51dGlsOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2NzQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZHMKQEAgLTAsMCArMSw3NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMyLnV0aWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4yICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKK3dpdGggQWRhLlRleHRfSU87CitwYWNrYWdlIG5jdXJzZXMyLnV0aWwgaXMKKworICAgQmxhbmsgOiBjb25zdGFudCBDaGFyYWN0ZXIgOj0gJyAnOworICAgQmxhbmsyIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0KKyAgICAgKENoID0+IEJsYW5rLCBBdHRyID0+IE5vcm1hbF9WaWRlbywgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCk7CisKKyAgIG5ld2wgOiBjb25zdGFudCBDaGFyYWN0ZXIgOj0gIENoYXJhY3RlcidWYWwgKDEwKTsKKworICAgZnVuY3Rpb24gQ1RSTCAoYyA6IENoYXJhY3RlcikgcmV0dXJuIEtleV9Db2RlOworCisgICBmdW5jdGlvbiBDVFJMIChjIDogQ2hhcmFjdGVyKSByZXR1cm4gQ2hhcmFjdGVyOworCisgICBmdW5jdGlvbiBHZXRjaGFyICh3aW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gS2V5X0NvZGU7CisKKyAgIHByb2NlZHVyZSBHZXRjaGFyICh3aW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKworICAgcHJvY2VkdXJlIFBhdXNlOworCisgICBwcm9jZWR1cmUgQ2Fubm90IChzIDogU3RyaW5nKTsKKworICAgcHJvY2VkdXJlIFNoZWxsT3V0IChtZXNzYWdlIDogQm9vbGVhbik7CisKKyAgIHBhY2thZ2UgSW50X0lPIGlzIG5ldyBBZGEuVGV4dF9JTy5JbnRlZ2VyX0lPIChJbnRlZ2VyKTsKKworICAgZnVuY3Rpb24gSXNfRGlnaXQgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIEJvb2xlYW47CisKKyAgIHByb2NlZHVyZSBQIChzIDogU3RyaW5nKTsKKworICAgZnVuY3Rpb24gQ29kZV9Ub19DaGFyIChjIDogS2V5X0NvZGUpIHJldHVybiBDaGFyYWN0ZXI7CisgICBmdW5jdGlvbiBjdG9pIChjIDogQ2hhcmFjdGVyKSByZXR1cm4gSW50ZWdlcjsKKworZW5kIG5jdXJzZXMyLnV0aWw7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLmFkcyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczIuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTAxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLmFkcwpAQCAtMCwwICsxLDQ0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3BhY2thZ2UgbmN1cnNlczIgaXMKKyAgIHByYWdtYSBQdXJlIChuY3Vyc2VzMik7CitlbmQgbmN1cnNlczI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3JhaW4uYWRiIGIvQWRhOTUvc2FtcGxlcy9yYWluLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjczMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9yYWluLmFkYgpAQCAtMCwwICsxLDE3OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBMYXVyZW50IFBhdXRldCA8cGF1dGV0QGduYXQuY29tPgorLS0gIE1vZGlmaWVkIGJ5OiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk3CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjggJAorLS0gICREYXRlOiAyMDA4LzA4LzMwIDIxOjM4OjA3ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOword2l0aCBBZGEuTnVtZXJpY3MuRmxvYXRfUmFuZG9tOyB1c2UgQWRhLk51bWVyaWNzLkZsb2F0X1JhbmRvbTsKK3dpdGggU3RhdHVzOyB1c2UgU3RhdHVzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKworcHJvY2VkdXJlIFJhaW4gaXMKKworICAgVmlzaWJpbGl0eSA6IEN1cnNvcl9WaXNpYmlsaXR5OworCisgICBzdWJ0eXBlIFhfUG9zaXRpb24gaXMgTGluZV9Qb3NpdGlvbjsKKyAgIHN1YnR5cGUgWV9Qb3NpdGlvbiBpcyBDb2x1bW5fUG9zaXRpb247CisKKyAgIFhwb3MgICAgOiBhcnJheSAoMSAuLiA1KSBvZiBYX1Bvc2l0aW9uOworICAgWXBvcyAgICA6IGFycmF5ICgxIC4uIDUpIG9mIFlfUG9zaXRpb247CisKKyAgIGRvbmUgOiBCb29sZWFuOworCisgICBjIDogS2V5X0NvZGU7CisKKyAgIE4gOiBJbnRlZ2VyOworCisgICBHIDogR2VuZXJhdG9yOworCisgICBNYXhfWCwgWCA6IFhfUG9zaXRpb247CisgICBNYXhfWSwgWSA6IFlfUG9zaXRpb247CisKKyAgIHByb2NlZHVyZSBOZXh0IChKIDogaW4gb3V0IEludGVnZXIpOworICAgcHJvY2VkdXJlIEN1cnNvciAoWCA6IFhfUG9zaXRpb247IFkgOiBZX1Bvc2l0aW9uKTsKKworICAgcHJvY2VkdXJlIE5leHQgKEogOiBpbiBvdXQgSW50ZWdlcikgaXMKKyAgIGJlZ2luCisgICAgICBpZiBKID0gNSB0aGVuCisgICAgICAgICBKIDo9IDE7CisgICAgICBlbHNlCisgICAgICAgICBKIDo9IEogKyAxOworICAgICAgZW5kIGlmOworICAgZW5kIE5leHQ7CisKKyAgIHByb2NlZHVyZSBDdXJzb3IgKFggOiBYX1Bvc2l0aW9uOyBZIDogWV9Qb3NpdGlvbikgaXMKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBYLCBDb2x1bW4gPT4gWSk7CisgICBlbmQgQ3Vyc29yOworICAgcHJhZ21hIElubGluZSAoQ3Vyc29yKTsKKworYmVnaW4KKworICAgSW5pdF9TY3JlZW47CisgICBTZXRfTkxfTW9kZTsKKyAgIFNldF9FY2hvX01vZGUgKEZhbHNlKTsKKworICAgVmlzaWJpbGl0eSA6PSBJbnZpc2libGU7CisgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFZpc2liaWxpdHkpOworICAgU2V0X1RpbWVvdXRfTW9kZSAoU3RhbmRhcmRfV2luZG93LCBOb25fQmxvY2tpbmcsIDApOworCisgICBNYXhfWCA6PSBMaW5lcyAtIDU7CisgICBNYXhfWSA6PSBDb2x1bW5zIC0gNTsKKworICAgZm9yIEkgaW4gWHBvcydSYW5nZSBsb29wCisgICAgICBYcG9zIChJKSA6PSBYX1Bvc2l0aW9uIChGbG9hdCAoTWF4X1gpICogUmFuZG9tIChHKSkgKyAyOworICAgICAgWXBvcyAoSSkgOj0gWV9Qb3NpdGlvbiAoRmxvYXQgKE1heF9ZKSAqIFJhbmRvbSAoRykpICsgMjsKKyAgIGVuZCBsb29wOworCisgICBOIDo9IDE7CisgICBkb25lIDo9IEZhbHNlOworICAgd2hpbGUgbm90IGRvbmUgYW5kIFByb2Nlc3MuQ29udGludWUgbG9vcAorCisgICAgICBYIDo9IFhfUG9zaXRpb24gKEZsb2F0IChNYXhfWCkgKiBSYW5kb20gKEcpKSArIDI7CisgICAgICBZIDo9IFlfUG9zaXRpb24gKEZsb2F0IChNYXhfWSkgKiBSYW5kb20gKEcpKSArIDI7CisKKyAgICAgIEN1cnNvciAoWCwgWSk7CisgICAgICBBZGQgKENoID0+ICcuJyk7CisKKyAgICAgIEN1cnNvciAoWHBvcyAoTiksIFlwb3MgKE4pKTsKKyAgICAgIEFkZCAoQ2ggPT4gJ28nKTsKKworICAgICAgLS0KKyAgICAgIE5leHQgKE4pOworICAgICAgQ3Vyc29yIChYcG9zIChOKSwgWXBvcyAoTikpOworICAgICAgQWRkIChDaCA9PiAnTycpOworCisgICAgICAtLQorICAgICAgTmV4dCAoTik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pIC0gMSwgWXBvcyAoTikpOworICAgICAgQWRkIChDaCA9PiAnLScpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSwgWXBvcyAoTikgLSAxKTsKKyAgICAgIEFkZCAoU3RyID0+ICJ8LnwiKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgKyAxLCBZcG9zIChOKSk7CisgICAgICBBZGQgKENoID0+ICctJyk7CisKKyAgICAgIC0tCisgICAgICBOZXh0IChOKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgLSAyLCBZcG9zIChOKSk7CisgICAgICBBZGQgKENoID0+ICctJyk7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pIC0gMSwgWXBvcyAoTikgLSAxKTsKKyAgICAgIEFkZCAoU3RyID0+ICIvXFwiKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTiksIFlwb3MgKE4pIC0gMik7CisgICAgICBBZGQgKFN0ciA9PiAifCBPIHwiKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgKyAxLCBZcG9zIChOKSAtIDEpOworICAgICAgQWRkIChTdHIgPT4gIlxcLyIpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSArIDIsIFlwb3MgKE4pKTsKKyAgICAgIEFkZCAoQ2ggPT4gJy0nKTsKKworICAgICAgLS0KKyAgICAgIE5leHQgKE4pOworICAgICAgQ3Vyc29yIChYcG9zIChOKSAtIDIsIFlwb3MgKE4pKTsKKyAgICAgIEFkZCAoQ2ggPT4gJyAnKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgLSAxLCBZcG9zIChOKSAtIDEpOworICAgICAgQWRkIChTdHIgPT4gIiAgICIpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSwgWXBvcyAoTikgLSAyKTsKKyAgICAgIEFkZCAoU3RyID0+ICIgICAgICIpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSArIDEsIFlwb3MgKE4pIC0gMSk7CisgICAgICBBZGQgKFN0ciA9PiAiICAgIik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pICsgMiwgWXBvcyAoTikpOworICAgICAgQWRkIChDaCA9PiAnICcpOworCisgICAgICBYcG9zIChOKSA6PSBYOworICAgICAgWXBvcyAoTikgOj0gWTsKKworICAgICAgYyA6PSBHZXRjaGFyOworICAgICAgY2FzZSBjIGlzCisgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdxJykgPT4gZG9uZSA6PSBUcnVlOworICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUScpID0+IGRvbmUgOj0gVHJ1ZTsKKyAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ3MnKSA9PiBTZXRfTm9EZWxheV9Nb2RlIChTdGFuZGFyZF9XaW5kb3csIEZhbHNlKTsKKyAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJyAnKSA9PiBTZXRfTm9EZWxheV9Nb2RlIChTdGFuZGFyZF9XaW5kb3csIFRydWUpOworICAgICAgd2hlbiBvdGhlcnMgPT4gbnVsbDsKKyAgICAgIGVuZCBjYXNlOworCisgICAgICBOYXBfTWlsbGlfU2Vjb25kcyAoNTApOworICAgZW5kIGxvb3A7CisKKyAgIFZpc2liaWxpdHkgOj0gTm9ybWFsOworICAgU2V0X0N1cnNvcl9WaXNpYmlsaXR5IChWaXNpYmlsaXR5KTsKKyAgIEVuZF9XaW5kb3dzOworICAgQ3Vyc2VzX0ZyZWVfQWxsOworCitlbmQgUmFpbjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvcmFpbi5hZHMgYi9BZGE5NS9zYW1wbGVzL3JhaW4uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3JhaW4uYWRzCkBAIC0wLDAgKzEsNDMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgTGF1cmVudCBQYXV0ZXQgPHBhdXRldEBnbmF0LmNvbT4KKy0tICBNb2RpZmllZCBieTogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NworLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS42ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCitwcm9jZWR1cmUgUmFpbjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLWF0dHJpYnV0ZXMuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5ZjM3ZAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLWF0dHJpYnV0ZXMuYWRiCkBAIC0wLDAgKzEsMTIyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyAgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOworCit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOyB1c2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlcyBpcworCisgICBwcm9jZWR1cmUgRGVtbworICAgaXMKKyAgICAgIFAgOiBQYW5lbCA6PSBDcmVhdGUgKFN0YW5kYXJkX1dpbmRvdyk7CisgICAgICBLIDogUmVhbF9LZXlfQ29kZTsKKyAgIGJlZ2luCisgICAgICBTZXRfTWV0YV9Nb2RlOworICAgICAgU2V0X0tleVBhZF9Nb2RlOworCisgICAgICBUb3AgKFApOworCisgICAgICBQdXNoX0Vudmlyb25tZW50ICgiQVRUUklCREVNTyIpOworICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICBOb3RlcGFkICgiQVRUUklCLVBBRDAwIik7CisKKyAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoQXR0ciA9PiAob3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gMSwgQ29sdW1uID0+IENvbHVtbnMgLyAyIC0gMTAsCisgICAgICAgICAgIFN0ciA9PiAiVGhpcyBpcyBOT1JNQUwiKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChTdGFuZF9PdXQgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgQWRkIChMaW5lID0+IDIsIENvbHVtbiA9PiBDb2x1bW5zIC8gMiAtIDEwLAorICAgICAgICAgICBTdHIgPT4gIlRoaXMgaXMgU3RhbmRfT3V0Iik7CisKKyAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoQXR0ciA9PiAoVW5kZXJfTGluZSA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gMywgQ29sdW1uID0+IENvbHVtbnMgLyAyIC0gMTAsCisgICAgICAgICAgIFN0ciA9PiAiVGhpcyBpcyBVbmRlcl9MaW5lIik7CisKKyAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gNCwgQ29sdW1uID0+IENvbHVtbnMgLyAyIC0gMTAsCisgICAgICAgICAgIFN0ciA9PiAiVGhpcyBpcyBSZXZlcnNlX1ZpZGVvIik7CisKKyAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoQXR0ciA9PiAoQmxpbmsgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgQWRkIChMaW5lID0+IDUsIENvbHVtbiA9PiBDb2x1bW5zIC8gMiAtIDEwLAorICAgICAgICAgICBTdHIgPT4gIlRoaXMgaXMgQmxpbmsiKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChEaW1fQ2hhcmFjdGVyID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiA2LCBDb2x1bW4gPT4gQ29sdW1ucyAvIDIgLSAxMCwKKyAgICAgICAgICAgU3RyID0+ICJUaGlzIGlzIERpbV9DaGFyYWN0ZXIiKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gNywgQ29sdW1uID0+IENvbHVtbnMgLyAyIC0gMTAsCisgICAgICAgICAgIFN0ciA9PiAiVGhpcyBpcyBCb2xkX0NoYXJhY3RlciIpOworCisgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworICAgICAgVXBkYXRlX1BhbmVsczsgVXBkYXRlX1NjcmVlbjsKKworICAgICAgbG9vcAorICAgICAgICAgSyA6PSBHZXRfS2V5OworICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgIGNhc2UgSyBpcworICAgICAgICAgICAgICAgd2hlbiBRVUlUX0NPREUgICAgID0+IGV4aXQ7CisgICAgICAgICAgICAgICB3aGVuIEhFTFBfQ09ERSAgICAgPT4gRXhwbGFpbl9Db250ZXh0OworICAgICAgICAgICAgICAgd2hlbiBFWFBMQUlOX0NPREUgID0+IEV4cGxhaW4gKCJBVFRSSUJLRVlTIik7CisgICAgICAgICAgICAgICB3aGVuIG90aGVycyAgICAgICAgPT4gbnVsbDsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgIENsZWFyOworICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKKyAgICAgIERlbGV0ZSAoUCk7CisgICAgICBVcGRhdGVfUGFuZWxzOyBVcGRhdGVfU2NyZWVuOworCisgICBlbmQgRGVtbzsKKworZW5kIFNhbXBsZS5DdXJzZXNfRGVtby5BdHRyaWJ1dGVzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDliNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5hZHMKQEAgLTAsMCArMSw0NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkN1cnNlc19EZW1vLkF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgU2FtcGxlLkN1cnNlc19EZW1vLkF0dHJpYnV0ZXMgaXMKKworICAgcHJvY2VkdXJlIERlbW87CisKK2VuZCBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlczsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLW1vdXNlLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLW1vdXNlLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA2ODVjCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tbW91c2UuYWRiCkBAIC0wLDAgKzEsMjIwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5DdXJzZXNfRGVtby5Nb3VzZSAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDg6MTkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPOworCit3aXRoIFNhbXBsZS5IZWxwZXJzOyB1c2UgU2FtcGxlLkhlbHBlcnM7Cit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKK3dpdGggU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOyB1c2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuQ3Vyc2VzX0RlbW8uTW91c2UgaXMKKworICAgcGFja2FnZSBJbnRfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPIChJbnRlZ2VyKTsKKyAgIHVzZSBJbnRfSU87CisKKyAgIHBhY2thZ2UgQnV0dG9uX0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gKE1vdXNlX0J1dHRvbik7CisgICB1c2UgQnV0dG9uX0lPOworCisgICBwYWNrYWdlIFN0YXRlX0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gKEJ1dHRvbl9TdGF0ZSk7CisgICB1c2UgU3RhdGVfSU87CisKKyAgIHByb2NlZHVyZSBEZW1vIGlzCisKKyAgICAgIHR5cGUgQ29udHJvbHMgaXMgYXJyYXkgKDEgLi4gMykgb2YgUGFuZWw7CisKKyAgICAgIEZyYW1lIDogV2luZG93OworICAgICAgTXNnICAgOiBXaW5kb3c7CisgICAgICBDdGwgICA6IENvbnRyb2xzOworICAgICAgUGFuICAgOiBQYW5lbDsKKyAgICAgIEsgICAgIDogUmVhbF9LZXlfQ29kZTsKKyAgICAgIFYgICAgIDogQ3Vyc29yX1Zpc2liaWxpdHkgOj0gSW52aXNpYmxlOworICAgICAgVyAgICAgOiBXaW5kb3c7CisgICAgICBOb3RlICA6IFdpbmRvdzsKKyAgICAgIE1zZ19MIDogY29uc3RhbnQgTGluZV9Db3VudCA6PSA4OworICAgICAgTGlucyAgOiBMaW5lX1Bvc2l0aW9uIDo9IExpbmVzOworICAgICAgQ29scyAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBNYXNrICA6IEV2ZW50X01hc2s7CisgICAgICBwcm9jZWR1cmUgU2hvd19Nb3VzZV9FdmVudDsKKworICAgICAgcHJvY2VkdXJlIFNob3dfTW91c2VfRXZlbnQKKyAgICAgIGlzCisgICAgICAgICBFdnQgICAgOiBjb25zdGFudCBNb3VzZV9FdmVudCA6PSBHZXRfTW91c2U7CisgICAgICAgICBZICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgWCAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgQnV0dG9uIDogTW91c2VfQnV0dG9uOworICAgICAgICAgU3RhdGUgIDogQnV0dG9uX1N0YXRlOworICAgICAgICAgVyAgICAgIDogV2luZG93OworICAgICAgYmVnaW4KKyAgICAgICAgIEdldF9FdmVudCAoRXZ0LCBZLCBYLCBCdXR0b24sIFN0YXRlKTsKKyAgICAgICAgIFB1dCAoTXNnLCAiRXZlbnQgYXQiKTsKKyAgICAgICAgIFB1dCAoTXNnLCAiICBYPSIpOyAgICBQdXQgKE1zZywgSW50ZWdlciAoWCksIDMpOworICAgICAgICAgUHV0IChNc2csICIsIFk9Iik7ICAgIFB1dCAoTXNnLCBJbnRlZ2VyIChZKSwgMyk7CisgICAgICAgICBQdXQgKE1zZywgIiwgQnRuPSIpOyAgUHV0IChNc2csIEJ1dHRvbiwgMTApOworICAgICAgICAgUHV0IChNc2csICIsIFN0YXQ9Iik7IFB1dCAoTXNnLCBTdGF0ZSwgMTUpOworICAgICAgICAgZm9yIEkgaW4gQ3RsJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgIFcgOj0gR2V0X1dpbmRvdyAoQ3RsIChJKSk7CisgICAgICAgICAgICBpZiBFbmNsb3NlZF9Jbl9XaW5kb3cgKFcsIEV2dCkgdGhlbgorICAgICAgICAgICAgICAgVHJhbnNmb3JtX0Nvb3JkaW5hdGVzIChXLCBZLCBYLCBGcm9tX1NjcmVlbik7CisgICAgICAgICAgICAgICBQdXQgKE1zZywgIixCb3goIik7CisgICAgICAgICAgICAgICBQdXQgKE1zZywgKEkpLCAxKTsgUHV0IChNc2csICIsIik7CisgICAgICAgICAgICAgICBQdXQgKE1zZywgSW50ZWdlciAoWSksIDEpOyBQdXQgKE1zZywgIiwiKTsKKyAgICAgICAgICAgICAgIFB1dCAoTXNnLCBJbnRlZ2VyIChYKSwgMSk7IFB1dCAoTXNnLCAiKSIpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICBOZXdfTGluZSAoTXNnKTsKKyAgICAgICAgIEZsdXNoIChNc2cpOworICAgICAgICAgVXBkYXRlX1BhbmVsczsgVXBkYXRlX1NjcmVlbjsKKyAgICAgIGVuZCBTaG93X01vdXNlX0V2ZW50OworCisgICBiZWdpbgorICAgICAgUHVzaF9FbnZpcm9ubWVudCAoIk1PVVNFMDAiKTsKKyAgICAgIE5vdGVwYWQgKCJNT1VTRS1QQUQwMCIpOworICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFYpOworCisgICAgICBOb3RlICA6PSBOb3RlcGFkX1dpbmRvdzsKKyAgICAgIGlmIE5vdGUgLz0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgR2V0X1dpbmRvd19Qb3NpdGlvbiAoTm90ZSwgTGlucywgQ29scyk7CisgICAgICBlbmQgaWY7CisgICAgICBGcmFtZSA6PSBDcmVhdGUgKE1zZ19MLCBDb2x1bW5zLCBMaW5zIC0gTXNnX0wsIDApOworICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoV2luID0+IEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIENoID0+IChDb2xvciA9PiBEZWZhdWx0X0NvbG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaCAgICA9PiAnICcpKTsKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoV2luICAgPT4gRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gRGVmYXVsdF9Db2xvcnMpOworICAgICAgICAgRXJhc2UgKEZyYW1lKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIE1zZyAgIDo9IERlcml2ZWRfV2luZG93IChGcmFtZSwgTXNnX0wgLSAyLCBDb2x1bW5zIC0gMiwgMSwgMSk7CisgICAgICBQYW4gICA6PSBDcmVhdGUgKEZyYW1lKTsKKworICAgICAgU2V0X01ldGFfTW9kZTsKKyAgICAgIFNldF9LZXlQYWRfTW9kZTsKKyAgICAgIE1hc2sgOj0gU3RhcnRfTW91c2U7CisKKyAgICAgIEJveCAoRnJhbWUpOworICAgICAgV2luZG93X1RpdGxlIChGcmFtZSwgIk1vdXNlIFByb3RvY29sIik7CisgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChGcmFtZSk7CisgICAgICBBbGxvd19TY3JvbGxpbmcgKE1zZywgVHJ1ZSk7CisKKyAgICAgIGRlY2xhcmUKKyAgICAgICAgIE1pZGRsZV9Db2x1bW4gOiBjb25zdGFudCBJbnRlZ2VyIDo9IEludGVnZXIgKENvbHVtbnMpIC8gMjsKKyAgICAgICAgIE1pZGRsZV9JbmRleCAgOiBjb25zdGFudCBOYXR1cmFsIDo9IEN0bCdGaXJzdCArIChDdGwnTGVuZ3RoIC8gMik7CisgICAgICAgICBXaWR0aCAgICAgICAgIDogY29uc3RhbnQgQ29sdW1uX0NvdW50IDo9IDU7CisgICAgICAgICBIZWlnaHQgICAgICAgIDogY29uc3RhbnQgTGluZV9Db3VudCAgIDo9IDM7CisgICAgICAgICBIYWxmICAgICAgICAgIDogY29uc3RhbnQgQ29sdW1uX0NvdW50IDo9IFdpZHRoIC8gMjsKKyAgICAgICAgIFNwYWNlICAgICAgICAgOiBjb25zdGFudCBDb2x1bW5fQ291bnQgOj0gMzsKKyAgICAgICAgIFBvc2l0aW9uICAgICAgOiBJbnRlZ2VyOworICAgICAgICAgVyAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgIGJlZ2luCisgICAgICAgICBmb3IgSSBpbiBDdGwnUmFuZ2UgbG9vcAorICAgICAgICAgICAgUG9zaXRpb24gOj0gKChJKSAtIEludGVnZXIgKE1pZGRsZV9JbmRleCkpICoKKyAgICAgICAgICAgICAgSW50ZWdlciAoSGFsZiArIFNwYWNlICsgV2lkdGgpICsgTWlkZGxlX0NvbHVtbjsKKyAgICAgICAgICAgIFcgOj0gQ3JlYXRlIChIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5fUG9zaXRpb24gKFBvc2l0aW9uKSk7CisgICAgICAgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4gPT4gVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaCA9PiAoQ29sb3IgPT4gTWVudV9CYWNrX0NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICAgID0+ICcgJykpOworICAgICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChXaW4gICA9PiBXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IE1lbnVfRm9yZV9Db2xvcik7CisgICAgICAgICAgICAgICBFcmFzZSAoVyk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBDdGwgKEkpIDo9IENyZWF0ZSAoVyk7CisgICAgICAgICAgICBCb3ggKFcpOworICAgICAgICAgICAgTW92ZV9DdXJzb3IgKFcsIDEsIEhhbGYpOworICAgICAgICAgICAgUHV0IChXLCAoSSksIDEpOworICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAoVyk7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZDsKKworICAgICAgVXBkYXRlX1BhbmVsczsgVXBkYXRlX1NjcmVlbjsKKworICAgICAgbG9vcAorICAgICAgICAgSyA6PSBHZXRfS2V5OworICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgIGNhc2UgSyBpcworICAgICAgICAgICAgICAgd2hlbiBRVUlUX0NPREUgICAgID0+IGV4aXQ7CisgICAgICAgICAgICAgICB3aGVuIEhFTFBfQ09ERSAgICAgPT4gRXhwbGFpbl9Db250ZXh0OworICAgICAgICAgICAgICAgd2hlbiBFWFBMQUlOX0NPREUgID0+IEV4cGxhaW4gKCJNT1VTRUtFWVMiKTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X01vdXNlICAgICA9PiBTaG93X01vdXNlX0V2ZW50OworICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgICAgICAgID0+IG51bGw7CisgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworCisgICAgICBmb3IgSSBpbiBDdGwnUmFuZ2UgbG9vcAorICAgICAgICAgVyA6PSBHZXRfV2luZG93IChDdGwgKEkpKTsKKyAgICAgICAgIENsZWFyIChXKTsKKyAgICAgICAgIERlbGV0ZSAoQ3RsIChJKSk7CisgICAgICAgICBEZWxldGUgKFcpOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIENsZWFyIChGcmFtZSk7CisgICAgICBEZWxldGUgKFBhbik7CisgICAgICBEZWxldGUgKE1zZyk7CisgICAgICBEZWxldGUgKEZyYW1lKTsKKworICAgICAgU2V0X0N1cnNvcl9WaXNpYmlsaXR5IChWKTsKKyAgICAgIEVuZF9Nb3VzZSAoTWFzayk7CisKKyAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgIFVwZGF0ZV9QYW5lbHM7IFVwZGF0ZV9TY3JlZW47CisKKyAgIGVuZCBEZW1vOworCitlbmQgU2FtcGxlLkN1cnNlc19EZW1vLk1vdXNlOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tbW91c2UuYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tbW91c2UuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzhkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5hZHMKQEAgLTAsMCArMSw0NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuQ3Vyc2VzX0RlbW8uTW91c2UgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgU2FtcGxlLkN1cnNlc19EZW1vLk1vdXNlIGlzCisKKyAgIHByb2NlZHVyZSBEZW1vOworCitlbmQgU2FtcGxlLkN1cnNlc19EZW1vLk1vdXNlOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGRhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZGIKQEAgLTAsMCArMSwxNDMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkN1cnNlc19EZW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE1ICQKKy0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOyAgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyAgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGE7CisKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuSGVscGVyczsgdXNlIFNhbXBsZS5IZWxwZXJzOword2l0aCBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7IHVzZSBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7CisKK3dpdGggU2FtcGxlLkV4cGxhbmF0aW9uOyB1c2UgU2FtcGxlLkV4cGxhbmF0aW9uOworCit3aXRoIFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlcjsKK3dpdGggU2FtcGxlLkN1cnNlc19EZW1vLk1vdXNlOword2l0aCBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlczsKKworcGFja2FnZSBib2R5IFNhbXBsZS5DdXJzZXNfRGVtbyBpcworCisgICB0eXBlIFVzZXJfRGF0YSBpcyBuZXcgSW50ZWdlcjsKKyAgIHR5cGUgVXNlcl9EYXRhX0FjY2VzcyBpcyBhY2Nlc3MgYWxsIFVzZXJfRGF0YTsKKyAgIHBhY2thZ2UgUFVEIGlzIG5ldyBQYW5lbHMuVXNlcl9EYXRhIChVc2VyX0RhdGEsIFVzZXJfRGF0YV9BY2Nlc3MpOworICAgLS0gIFdlIHVzZSBhYm92ZSBpbnN0YW50aWF0aW9uIG9mIHRoZSBnZW5lcmljIFVzZXJfRGF0YSBwYWNrYWdlIHRvCisgICAtLSAgZGVtb25zdHJhdGUgYW5kIHRlc3QgdGhlIHVzZSBvZiB0aGUgdXNlciBkYXRhIG1hZWNoYW5pc20uCisKKyAgIHByb2NlZHVyZSBEZW1vCisgICBpcworICAgICAgZnVuY3Rpb24gTXlfRHJpdmVyIChNIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICBQYW4gOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CisgICAgICBwYWNrYWdlIE1oIGlzIG5ldyBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgKE15X0RyaXZlcik7CisKKyAgICAgIEl0bSA6IEl0ZW1fQXJyYXlfQWNjZXNzIDo9IG5ldyBJdGVtX0FycmF5JworICAgICAgICAoTmV3X0l0ZW0gKCJBdHRyaWJ1dGVzIERlbW8iKSwKKyAgICAgICAgIE5ld19JdGVtICgiTW91c2UgRGVtbyIpLAorICAgICAgICAgTnVsbF9JdGVtKTsKKyAgICAgIE0gIDogTWVudSA6PSBOZXdfTWVudSAoSXRtKTsKKyAgICAgIFUxIDogY29uc3RhbnQgVXNlcl9EYXRhX0FjY2VzcyA6PSBuZXcgVXNlcl9EYXRhJyg0NzExKTsKKyAgICAgIFUyIDogVXNlcl9EYXRhX0FjY2VzczsKKworICAgICAgZnVuY3Rpb24gTXlfRHJpdmVyIChNIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICBQYW4gOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW4KKyAgICAgIGlzCisgICAgICAgICBJZHggOiBjb25zdGFudCBQb3NpdGl2ZSA6PSBHZXRfSW5kZXggKEN1cnJlbnQgKE0pKTsKKyAgICAgICAgIFJlc3VsdCA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICAgICBiZWdpbgorICAgICAgICAgUFVELlNldF9Vc2VyX0RhdGEgKFBhbiwgVTEpOyAtLSAgc2V0IHNvbWUgdXNlciBkYXRhLCBqdXN0IGZvciBmdW4KKyAgICAgICAgIGlmIEsgaW4gVXNlcl9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICBpZiBLID0gUVVJVCB0aGVuCisgICAgICAgICAgICAgICBSZXN1bHQgOj0gVHJ1ZTsKKyAgICAgICAgICAgIGVsc2lmIEsgPSBTRUxFQ1RfSVRFTSB0aGVuCisgICAgICAgICAgICAgICBpZiBJZHggaW4gSXRtJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgICAgIEhpZGUgKFBhbik7CisgICAgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgY2FzZSBJZHggaXMKKyAgICAgICAgICAgICAgICAgIHdoZW4gMSA9PiBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlcy5EZW1vOworICAgICAgICAgICAgICAgICAgd2hlbiAyID0+IFNhbXBsZS5DdXJzZXNfRGVtby5Nb3VzZS5EZW1vOworICAgICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gTm90X0ltcGxlbWVudGVkOworICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICAgICBpZiBJZHggaW4gSXRtJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgICAgIFRvcCAoUGFuKTsKKyAgICAgICAgICAgICAgICAgIFNob3cgKFBhbik7CisgICAgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIFBVRC5HZXRfVXNlcl9EYXRhIChQYW4sIFUyKTsgLS0gIGdldCB0aGUgdXNlciBkYXRhCisgICAgICAgICBwcmFnbWEgQXNzZXJ0IChVMS5hbGwgPSBVMi5hbGwgYW5kIHRoZW4gVTEgPSBVMik7CisgICAgICAgICByZXR1cm4gUmVzdWx0OworICAgICAgZW5kIE15X0RyaXZlcjsKKworICAgYmVnaW4KKworICAgICAgaWYgKDEgKyBJdGVtX0NvdW50IChNKSkgLz0gSXRtJ0xlbmd0aCB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworCisgICAgICBpZiBub3QgSGFzX01vdXNlIHRoZW4KKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIE8gOiBJdGVtX09wdGlvbl9TZXQ7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgR2V0X09wdGlvbnMgKEl0bSAoMiksIE8pOworICAgICAgICAgICAgTy5TZWxlY3RhYmxlIDo9IEZhbHNlOworICAgICAgICAgICAgU2V0X09wdGlvbnMgKEl0bSAoMiksIE8pOworICAgICAgICAgZW5kOworICAgICAgZW5kIGlmOworCisgICAgICBQdXNoX0Vudmlyb25tZW50ICgiQ1VSU0VTMDAiKTsKKyAgICAgIE5vdGVwYWQgKCJDVVJTRVMtUEFEMDAiKTsKKyAgICAgIERlZmF1bHRfTGFiZWxzOworICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisKKyAgICAgIE1oLkRyaXZlX01lIChNLCAiIERlbW8gIik7CisgICAgICBQb3BfRW52aXJvbm1lbnQ7CisKKyAgICAgIERlbGV0ZSAoTSk7CisgICAgICBGcmVlIChJdG0sIFRydWUpOworICAgZW5kIERlbW87CisKK2VuZCBTYW1wbGUuQ3Vyc2VzX0RlbW87CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YWQwZgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkcwpAQCAtMCwwICsxLDQ1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5DdXJzZXNfRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBTYW1wbGUuQ3Vyc2VzX0RlbW8gaXMKKworICAgcHJvY2VkdXJlIERlbW87CisKK2VuZCBTYW1wbGUuQ3Vyc2VzX0RlbW87CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhOGRlYgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkYgpAQCAtMCwwICsxLDQwOCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5FeHBsYW5hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMjAgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFBvb3IgbWFucyBoZWxwIHN5c3RlbS4gVGhpcyBzY2FucyBhIHNlcXVlbnRpYWwgZmlsZSBmb3Iga2V5IGxpbmVzIGFuZAorLS0gIHRoZW4gcmVhZHMgdGhlIGxpbmVzIHVwIHRvIHRoZSBuZXh0IGtleS4gVGhvc2UgbGluZXMgYXJlIHByZXNlbnRlZCBpbgorLS0gIGEgd2luZG93IGFzIGhlbHAgb3IgZXhwbGFuYXRpb24uCistLQord2l0aCBBZGEuVGV4dF9JTzsgdXNlIEFkYS5UZXh0X0lPOword2l0aCBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CisKK3dpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7IHVzZSBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7Cit3aXRoIFNhbXBsZS5IZWxwZXJzOyB1c2UgU2FtcGxlLkhlbHBlcnM7CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuRXhwbGFuYXRpb24gaXMKKworICAgSGVscF9LZXlzIDogY29uc3RhbnQgU3RyaW5nIDo9ICJIRUxQS0VZUyI7CisgICBJbl9IZWxwICAgOiBjb25zdGFudCBTdHJpbmcgOj0gIklOSEVMUCI7CisKKyAgIEZpbGVfTmFtZSA6IGNvbnN0YW50IFN0cmluZyA6PSAiZXhwbGFpbi5tc2ciOworICAgRiA6IEZpbGVfVHlwZTsKKworICAgdHlwZSBIZWxwX0xpbmU7CisgICB0eXBlIEhlbHBfTGluZV9BY2Nlc3MgaXMgYWNjZXNzIEhlbHBfTGluZTsKKyAgIHByYWdtYSBDb250cm9sbGVkIChIZWxwX0xpbmVfQWNjZXNzKTsKKyAgIHR5cGUgU3RyaW5nX0FjY2VzcyBpcyBhY2Nlc3MgU3RyaW5nOworICAgcHJhZ21hIENvbnRyb2xsZWQgKFN0cmluZ19BY2Nlc3MpOworCisgICB0eXBlIEhlbHBfTGluZSBpcworICAgICAgcmVjb3JkCisgICAgICAgICBQcmV2LCBOZXh0IDogSGVscF9MaW5lX0FjY2VzczsKKyAgICAgICAgIExpbmUgOiBTdHJpbmdfQWNjZXNzOworICAgICAgZW5kIHJlY29yZDsKKworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworCisgICBwcm9jZWR1cmUgUmVsZWFzZV9TdHJpbmcgaXMKKyAgICAgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uIChTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nX0FjY2Vzcyk7CisgICBwcm9jZWR1cmUgUmVsZWFzZV9IZWxwX0xpbmUgaXMKKyAgICAgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uIChIZWxwX0xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVscF9MaW5lX0FjY2Vzcyk7CisKKyAgIGZ1bmN0aW9uIFNlYXJjaCAoS2V5IDogU3RyaW5nKSByZXR1cm4gSGVscF9MaW5lX0FjY2VzczsKKyAgIHByb2NlZHVyZSBSZWxlYXNlX0hlbHAgKFJvb3QgOiBpbiBvdXQgSGVscF9MaW5lX0FjY2Vzcyk7CisKKyAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmcpCisgICBpcworICAgYmVnaW4KKyAgICAgIEV4cGxhaW4gKEtleSwgTnVsbF9XaW5kb3cpOworICAgZW5kIEV4cGxhaW47CisKKyAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgaXMKKyAgICAgIC0tICBSZXRyaWV2ZSB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXkgYW5kIGRpc3BsYXkgaXQgaW4gdGhpcworICAgICAgLS0gIHdpbmRvdy4gSWYgbm8gd2luZG93IGFyZ3VtZW50IGlzIHBhc3NlZCwgdGhlIHJvdXRpbmUgd2lsbCBjcmVhdGUKKyAgICAgIC0tICBhIHRlbXBvcmFyeSB3aW5kb3cgYW5kIHVzZSBpdC4KKworICAgICAgZnVuY3Rpb24gRmlsdGVyX0tleSByZXR1cm4gUmVhbF9LZXlfQ29kZTsKKyAgICAgIHByb2NlZHVyZSBVbmtub3duX0tleTsKKyAgICAgIHByb2NlZHVyZSBSZWRvOworICAgICAgcHJvY2VkdXJlIFRvX1dpbmRvdyAoQyAgIDogaW4gb3V0IEhlbHBfTGluZV9BY2Nlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgIE1vcmUgOiBpbiBvdXQgQm9vbGVhbik7CisKKyAgICAgIEZyYW1lIDogV2luZG93IDo9IE51bGxfV2luZG93OworCisgICAgICBXIDogV2luZG93IDo9IFdpbjsKKyAgICAgIEsgOiBSZWFsX0tleV9Db2RlOworICAgICAgUCA6IFBhbmVsOworCisgICAgICBIZWlnaHQgICA6IExpbmVfQ291bnQ7CisgICAgICBXaWR0aCAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgIEhlbHAgICAgIDogSGVscF9MaW5lX0FjY2VzcyA6PSBTZWFyY2ggKEtleSk7CisgICAgICBDdXJyZW50ICA6IEhlbHBfTGluZV9BY2Nlc3M7CisgICAgICBUb3BfTGluZSA6IEhlbHBfTGluZV9BY2Nlc3M7CisKKyAgICAgIEhhc19Nb3JlIDogQm9vbGVhbiA6PSBUcnVlOworCisgICAgICBwcm9jZWR1cmUgVW5rbm93bl9LZXkKKyAgICAgIGlzCisgICAgICBiZWdpbgorICAgICAgICAgQWRkIChXLCAiSGVscCBtZXNzYWdlIHdpdGggSUQgIik7CisgICAgICAgICBBZGQgKFcsIEtleSk7CisgICAgICAgICBBZGQgKFcsICIgbm90IGZvdW5kLiIpOworICAgICAgICAgQWRkIChXLCBDaGFyYWN0ZXInVmFsICgxMCkpOworICAgICAgICAgQWRkIChXLCAiUHJlc3MgdGhlIEZ1bmN0aW9uIGtleSBsYWJlbGxlZCAnUXVpdCcga2V5IHRvIGNvbnRpbnVlLiIpOworICAgICAgZW5kIFVua25vd25fS2V5OworCisgICAgICBwcm9jZWR1cmUgUmVkbworICAgICAgaXMKKyAgICAgICAgIEggOiBIZWxwX0xpbmVfQWNjZXNzIDo9IFRvcF9MaW5lOworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIFRvcF9MaW5lIC89IG51bGwgdGhlbgorICAgICAgICAgICAgZm9yIEwgaW4gMCAuLiAoSGVpZ2h0IC0gMSkgbG9vcAorICAgICAgICAgICAgICAgQWRkIChXLCBMLCAwLCBILkxpbmUuYWxsKTsKKyAgICAgICAgICAgICAgIGV4aXQgd2hlbiBILk5leHQgPSBudWxsOworICAgICAgICAgICAgICAgSCA6PSBILk5leHQ7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFVua25vd25fS2V5OworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIFJlZG87CisKKyAgICAgIGZ1bmN0aW9uIEZpbHRlcl9LZXkgcmV0dXJuIFJlYWxfS2V5X0NvZGUKKyAgICAgIGlzCisgICAgICAgICBLIDogUmVhbF9LZXlfQ29kZTsKKyAgICAgIGJlZ2luCisgICAgICAgICBsb29wCisgICAgICAgICAgICBLIDo9IEdldF9LZXkgKFcpOworICAgICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgIGNhc2UgSyBpcworICAgICAgICAgICAgICAgICAgd2hlbiBIRUxQX0NPREUgPT4KKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBGaW5kX0NvbnRleHQgKEluX0hlbHApIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFB1c2hfRW52aXJvbm1lbnQgKEluX0hlbHAsIEZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cGxhaW4gKEluX0hlbHAsIFcpOworICAgICAgICAgICAgICAgICAgICAgICAgUG9wX0Vudmlyb25tZW50OworICAgICAgICAgICAgICAgICAgICAgICAgUmVkbzsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIHdoZW4gRVhQTEFJTl9DT0RFID0+CisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgRmluZF9Db250ZXh0IChIZWxwX0tleXMpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFB1c2hfRW52aXJvbm1lbnQgKEhlbHBfS2V5cywgRmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgRXhwbGFpbiAoSGVscF9LZXlzLCBXKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZG87CisgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBleGl0OworICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICByZXR1cm4gSzsKKyAgICAgIGVuZCBGaWx0ZXJfS2V5OworCisgICAgICBwcm9jZWR1cmUgVG9fV2luZG93IChDICAgOiBpbiBvdXQgSGVscF9MaW5lX0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTW9yZSA6IGluIG91dCBCb29sZWFuKQorICAgICAgaXMKKyAgICAgICAgIEwgOiBMaW5lX1Bvc2l0aW9uIDo9IDA7CisgICAgICBiZWdpbgorICAgICAgICAgbG9vcAorICAgICAgICAgICAgQWRkIChXLCBMLCAwLCBDLkxpbmUuYWxsKTsKKyAgICAgICAgICAgIEwgOj0gTCArIDE7CisgICAgICAgICAgICBleGl0IHdoZW4gQy5OZXh0ID0gbnVsbCBvciBlbHNlIEwgPSBIZWlnaHQ7CisgICAgICAgICAgICBDIDo9IEMuTmV4dDsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgaWYgQy5OZXh0IC89IG51bGwgdGhlbgorICAgICAgICAgICAgcHJhZ21hIEFzc2VydCAoTCA9IEhlaWdodCk7CisgICAgICAgICAgICBNb3JlIDo9IFRydWU7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBNb3JlIDo9IEZhbHNlOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIFRvX1dpbmRvdzsKKworICAgYmVnaW4KKyAgICAgIGlmIFcgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICBQdXNoX0Vudmlyb25tZW50ICgiSEVMUCIpOworICAgICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICAgICBGcmFtZSA6PSBOZXdfV2luZG93IChMaW5lcyAtIDIsIENvbHVtbnMsIDAsIDApOworICAgICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICAgICBTZXRfQmFja2dyb3VuZCAoV2luID0+IEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICA9PiAoQ2ggICAgPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gSGVscF9Db2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbykpOworICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChXaW4gICA9PiBGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBIZWxwX0NvbG9yKTsKKyAgICAgICAgICAgIEVyYXNlIChGcmFtZSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBCb3ggKEZyYW1lKTsKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoRnJhbWUsIChSZXZlcnNlX1ZpZGVvID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzICAgICAgICA9PiBGYWxzZSkpOworICAgICAgICAgQWRkIChGcmFtZSwgTGluZXMgLSAzLCAyLCAiQ3Vyc29yIFVwL0Rvd24gc2Nyb2xscyIpOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChGcmFtZSk7IC0tIEJhY2sgdG8gZGVmYXVsdC4KKyAgICAgICAgIFdpbmRvd19UaXRsZSAoRnJhbWUsICJFeHBsYW5hdGlvbiIpOworICAgICAgICAgVyA6PSBEZXJpdmVkX1dpbmRvdyAoRnJhbWUsIExpbmVzIC0gNCwgQ29sdW1ucyAtIDIsIDEsIDEpOworICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAoRnJhbWUpOworICAgICAgICAgR2V0X1NpemUgKFcsIEhlaWdodCwgV2lkdGgpOworICAgICAgICAgU2V0X01ldGFfTW9kZSAoVyk7CisgICAgICAgICBTZXRfS2V5UGFkX01vZGUgKFcpOworICAgICAgICAgQWxsb3dfU2Nyb2xsaW5nIChXLCBUcnVlKTsKKyAgICAgICAgIFNldF9FY2hvX01vZGUgKEZhbHNlKTsKKyAgICAgICAgIFAgOj0gQ3JlYXRlIChGcmFtZSk7CisgICAgICAgICBUb3AgKFApOworICAgICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgIGVsc2UKKyAgICAgICAgIENsZWFyIChXKTsKKyAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKFcpOworICAgICAgZW5kIGlmOworCisgICAgICBDdXJyZW50IDo9IEhlbHA7IFRvcF9MaW5lIDo9IEhlbHA7CisKKyAgICAgIGlmIG51bGwgPSBIZWxwIHRoZW4KKyAgICAgICAgIFVua25vd25fS2V5OworICAgICAgICAgbG9vcAorICAgICAgICAgICAgSyA6PSBGaWx0ZXJfS2V5OworICAgICAgICAgICAgZXhpdCB3aGVuIEsgPSBRVUlUX0NPREU7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVsc2UKKyAgICAgICAgIFRvX1dpbmRvdyAoQ3VycmVudCwgSGFzX01vcmUpOworICAgICAgICAgaWYgSGFzX01vcmUgdGhlbgorICAgICAgICAgICAgLS0gIFRoaXMgbWVhbnMgdGhlcmUgYXJlIG1vcmUgbGluZXMgYXZhaWxhYmxlLCBzbyB3ZSBoYXZlIHRvIGdvCisgICAgICAgICAgICAtLSAgaW50byBhIHNjcm9sbCBtYW5hZ2VyLgorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgSyA6PSBGaWx0ZXJfS2V5OworICAgICAgICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgICAgIGNhc2UgSyBpcworICAgICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gPT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIEN1cnJlbnQuTmV4dCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChXLCBIZWlnaHQgLSAxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbCAoVywgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IDo9IEN1cnJlbnQuTmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvcF9MaW5lIDo9IFRvcF9MaW5lLk5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgKFcsIEN1cnJlbnQuTGluZS5hbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1VwID0+CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBUb3BfTGluZS5QcmV2IC89IG51bGwgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKFcsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsIChXLCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3BfTGluZSA6PSBUb3BfTGluZS5QcmV2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCA6PSBDdXJyZW50LlByZXY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgKFcsIFRvcF9MaW5lLkxpbmUuYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gUVVJVF9DT0RFID0+IGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOworICAgICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgIEsgOj0gRmlsdGVyX0tleTsKKyAgICAgICAgICAgICAgIGV4aXQgd2hlbiBLID0gUVVJVF9DT0RFOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisKKyAgICAgIENsZWFyIChXKTsKKworICAgICAgaWYgRnJhbWUgLz0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgQ2xlYXIgKEZyYW1lKTsKKyAgICAgICAgIERlbGV0ZSAoUCk7CisgICAgICAgICBEZWxldGUgKFcpOworICAgICAgICAgRGVsZXRlIChGcmFtZSk7CisgICAgICAgICBQb3BfRW52aXJvbm1lbnQ7CisgICAgICBlbmQgaWY7CisKKyAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICAgICBVcGRhdGVfU2NyZWVuOworCisgICAgICBSZWxlYXNlX0hlbHAgKEhlbHApOworCisgICBlbmQgRXhwbGFpbjsKKworICAgZnVuY3Rpb24gU2VhcmNoIChLZXkgOiBTdHJpbmcpIHJldHVybiBIZWxwX0xpbmVfQWNjZXNzCisgICBpcworICAgICAgTGFzdCAgICA6IE5hdHVyYWw7CisgICAgICBCdWZmZXIgIDogU3RyaW5nICgxIC4uIDI1Nik7CisgICAgICBSb290ICAgIDogSGVscF9MaW5lX0FjY2VzcyA6PSBudWxsOworICAgICAgQ3VycmVudCA6IEhlbHBfTGluZV9BY2Nlc3M7CisgICAgICBUYWlsICAgIDogSGVscF9MaW5lX0FjY2VzcyA6PSBudWxsOworCisgICAgICBmdW5jdGlvbiBOZXh0X0xpbmUgcmV0dXJuIEJvb2xlYW47CisKKyAgICAgIGZ1bmN0aW9uIE5leHRfTGluZSByZXR1cm4gQm9vbGVhbgorICAgICAgaXMKKyAgICAgICAgIEhfRW5kIDogY29uc3RhbnQgU3RyaW5nIDo9ICIjRU5EIjsKKyAgICAgIGJlZ2luCisgICAgICAgICBHZXRfTGluZSAoRiwgQnVmZmVyLCBMYXN0KTsKKyAgICAgICAgIGlmIExhc3QgPSBIX0VuZCdMZW5ndGggYW5kIHRoZW4gSF9FbmQgPSBCdWZmZXIgKDEgLi4gTGFzdCkgdGhlbgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgTmV4dF9MaW5lOworICAgYmVnaW4KKyAgICAgIFJlc2V0IChGKTsKKyAgICAgIE91dGVyIDoKKyAgICAgIGxvb3AKKyAgICAgICAgIGV4aXQgT3V0ZXIgd2hlbiBub3QgTmV4dF9MaW5lOworICAgICAgICAgaWYgTGFzdCA9ICgxICsgS2V5J0xlbmd0aCkgYW5kIHRoZW4gS2V5ID0gQnVmZmVyICgyIC4uIExhc3QpCisgICAgICAgICAgIGFuZCB0aGVuIEJ1ZmZlciAoMSkgPSAnIycgdGhlbgorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgZXhpdCB3aGVuIG5vdCBOZXh0X0xpbmU7CisgICAgICAgICAgICAgICBleGl0IHdoZW4gQnVmZmVyICgxKSA9ICcjJzsKKyAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gbmV3IEhlbHBfTGluZScobnVsbCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZycoQnVmZmVyICgxIC4uIExhc3QpKSk7CisgICAgICAgICAgICAgICBpZiBUYWlsID0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICAgICBSZWxlYXNlX0hlbHAgKFJvb3QpOworICAgICAgICAgICAgICAgICAgUm9vdCA6PSBDdXJyZW50OworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgVGFpbC5OZXh0IDo9IEN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICBDdXJyZW50LlByZXYgOj0gVGFpbDsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIFRhaWwgOj0gQ3VycmVudDsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgZXhpdCBPdXRlcjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wIE91dGVyOworICAgICAgcmV0dXJuIFJvb3Q7CisgICBlbmQgU2VhcmNoOworCisgICBwcm9jZWR1cmUgUmVsZWFzZV9IZWxwIChSb290IDogaW4gb3V0IEhlbHBfTGluZV9BY2Nlc3MpCisgICBpcworICAgICAgTmV4dCA6IEhlbHBfTGluZV9BY2Nlc3M7CisgICBiZWdpbgorICAgICAgbG9vcAorICAgICAgICAgZXhpdCB3aGVuIFJvb3QgPSBudWxsOworICAgICAgICAgTmV4dCA6PSBSb290Lk5leHQ7CisgICAgICAgICBSZWxlYXNlX1N0cmluZyAoUm9vdC5MaW5lKTsKKyAgICAgICAgIFJlbGVhc2VfSGVscF9MaW5lIChSb290KTsKKyAgICAgICAgIFJvb3QgOj0gTmV4dDsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIFJlbGVhc2VfSGVscDsKKworICAgcHJvY2VkdXJlIEV4cGxhaW5fQ29udGV4dAorICAgaXMKKyAgIGJlZ2luCisgICAgICBFeHBsYWluIChDb250ZXh0KTsKKyAgIGVuZCBFeHBsYWluX0NvbnRleHQ7CisKKyAgIHByb2NlZHVyZSBOb3RlcGFkIChLZXkgOiBpbiBTdHJpbmcpCisgICBpcworICAgICAgSCA6IGNvbnN0YW50IEhlbHBfTGluZV9BY2Nlc3MgOj0gU2VhcmNoIChLZXkpOworICAgICAgVCA6IEhlbHBfTGluZV9BY2Nlc3MgOj0gSDsKKyAgICAgIE4gOiBMaW5lX0NvdW50IDo9IDE7CisgICAgICBMIDogTGluZV9Qb3NpdGlvbiA6PSAwOworICAgICAgVyA6IFdpbmRvdzsKKyAgICAgIFAgOiBQYW5lbDsKKyAgIGJlZ2luCisgICAgICBpZiBIIC89IG51bGwgdGhlbgorICAgICAgICAgbG9vcAorICAgICAgICAgICAgVCA6PSBULk5leHQ7CisgICAgICAgICAgICBleGl0IHdoZW4gVCA9IG51bGw7CisgICAgICAgICAgICBOIDo9IE4gKyAxOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICBXIDo9IE5ld19XaW5kb3cgKE4gKyAyLCBDb2x1bW5zLCBMaW5lcyAtIE4gLSAyLCAwKTsKKyAgICAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgICAgU2V0X0JhY2tncm91bmQgKFdpbiA9PiBXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICA9PiAoQ2ggICAgPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gTm90ZXBhZF9Db2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbykpOworICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChXaW4gICA9PiBXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IE5vdGVwYWRfQ29sb3IpOworICAgICAgICAgICAgRXJhc2UgKFcpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgQm94IChXKTsKKyAgICAgICAgIFdpbmRvd19UaXRsZSAoVywgIk5vdGVwYWQiKTsKKyAgICAgICAgIFAgOj0gTmV3X1BhbmVsIChXKTsKKyAgICAgICAgIFQgOj0gSDsKKyAgICAgICAgIGxvb3AKKyAgICAgICAgICAgIEFkZCAoVywgTCArIDEsIDEsIFQuTGluZS5hbGwsIEludGVnZXIgKENvbHVtbnMgLSAyKSk7CisgICAgICAgICAgICBMIDo9IEwgKyAxOworICAgICAgICAgICAgVCA6PSBULk5leHQ7CisgICAgICAgICAgICBleGl0IHdoZW4gVCA9IG51bGw7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIFQgOj0gSDsKKyAgICAgICAgIFJlbGVhc2VfSGVscCAoVCk7CisgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChXKTsKKyAgICAgICAgIE5vdGVwYWRfVG9fQ29udGV4dCAoUCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgTm90ZXBhZDsKKworYmVnaW4KKyAgIE9wZW4gKEYsIEluX0ZpbGUsIEZpbGVfTmFtZSk7CitlbmQgU2FtcGxlLkV4cGxhbmF0aW9uOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjE3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMKQEAgLTAsMCArMSw1OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5FeHBsYW5hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgUG9vciBtYW5zIGhlbHAgc3lzdGVtLiBUaGlzIHNjYW5zIGEgc2VxdWVudGlhbCBmaWxlIGZvciBrZXkgbGluZXMgYW5kCistLSAgdGhlbiByZWFkcyB0aGUgbGluZXMgdXAgdG8gdGhlIG5leHQga2V5LiBUaG9zZSBsaW5lcyBhcmUgcHJlc2VudGVkIGluCistLSAgYSB3aW5kb3cgYXMgaGVscCBvciBleHBsYW5hdGlvbi4KKy0tCitwYWNrYWdlIFNhbXBsZS5FeHBsYW5hdGlvbiBpcworCisgICBwcm9jZWR1cmUgRXhwbGFpbiAoS2V5IDogaW4gU3RyaW5nKTsKKyAgIC0tICBSZXRyaWV2ZSB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXkgYW5kIGRpc3BsYXkgaXQuCisKKyAgIHByb2NlZHVyZSBFeHBsYWluX0NvbnRleHQ7CisgICAtLSAgRXhwbGFpbiB0aGUgY3VycmVudCBjb250ZXh0LgorCisgICBwcm9jZWR1cmUgTm90ZXBhZCAoS2V5IDogaW4gU3RyaW5nKTsKKyAgIC0tICBQdXQgYSBub3RlIG9uIHRoZSBzY3JlZW4gYW5kIG1haW50YWluIGl0IHdpdGggdGhlIGNvbnRleHQKKworICAgRXhwbGFuYXRpb25fTm90X0ZvdW5kIDogZXhjZXB0aW9uOworICAgRXhwbGFuYXRpb25fRXJyb3IgICAgIDogZXhjZXB0aW9uOworCitlbmQgU2FtcGxlLkV4cGxhbmF0aW9uOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5N2FkCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZGIKQEAgLTAsMCArMSwyNjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkZvcm1fRGVtby5BdXggICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsgdXNlIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CisKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuSGVscGVyczsgdXNlIFNhbXBsZS5IZWxwZXJzOword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuRm9ybV9EZW1vLkF1eCBpcworCisgICBwcm9jZWR1cmUgR2VvbWV0cnkgKEYgIDogaW4gIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIEwgIDogb3V0IExpbmVfQ291bnQ7ICAgICAgICAtLSBMaW5lcyB1c2VkIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIEMgIDogb3V0IENvbHVtbl9Db3VudDsgICAgICAtLSBDb2x1bW5zIHVzZWQgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgWSAgOiBvdXQgTGluZV9Qb3NpdGlvbjsgICAgIC0tIFByb3Bvc2VkIExpbmUgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgIC0tIFByb3Bvc2VkIENvbHVtbiBmb3IgbWVudQorICAgaXMKKyAgIGJlZ2luCisgICAgICBTY2FsZSAoRiwgTCwgQyk7CisKKyAgICAgIEwgOj0gTCArIDI7ICAtLSBjb3VudCBmb3IgZnJhbWUgYXQgdG9wIGFuZCBib3R0b20KKyAgICAgIEMgOj0gQyArIDI7ICAtLSAiCisKKyAgICAgIC0tICBDYWxjdWxhdGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIGF0IHRoZSBzY3JlZW4gY2VudGVyCisgICAgICBYIDo9IChDb2x1bW5zIC0gQykgLyAyOworICAgICAgWSA6PSAxOyAtLSBzdGFydCBhbHdheXMgaW4gbGluZSAxCisgICBlbmQgR2VvbWV0cnk7CisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoRiAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgTGluICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBDb2wgICA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFBhbmVsCisgICBpcworICAgICAgVywgUyA6IFdpbmRvdzsKKyAgICAgIEwgOiBMaW5lX0NvdW50OworICAgICAgQyA6IENvbHVtbl9Db3VudDsKKyAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFBhbiA6IFBhbmVsOworICAgYmVnaW4KKyAgICAgIEdlb21ldHJ5IChGLCBMLCBDLCBZLCBYKTsKKyAgICAgIFcgOj0gTmV3X1dpbmRvdyAoTCwgQywgTGluLCBDb2wpOworICAgICAgU2V0X01ldGFfTW9kZSAoVyk7CisgICAgICBTZXRfS2V5UGFkX01vZGUgKFcpOworICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoV2luID0+IFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggID0+IChDaCAgICA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBEZWZhdWx0X0NvbG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbykpOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChXaW4gPT4gVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gRGVmYXVsdF9Db2xvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbyk7CisgICAgICAgICBFcmFzZSAoVyk7CisgICAgICBlbmQgaWY7CisgICAgICBTIDo9IERlcml2ZWRfV2luZG93IChXLCBMIC0gMiwgQyAtIDIsIDEsIDEpOworICAgICAgU2V0X01ldGFfTW9kZSAoUyk7CisgICAgICBTZXRfS2V5UGFkX01vZGUgKFMpOworICAgICAgQm94IChXKTsKKyAgICAgIFNldF9XaW5kb3cgKEYsIFcpOworICAgICAgU2V0X1N1Yl9XaW5kb3cgKEYsIFMpOworICAgICAgaWYgVGl0bGUnTGVuZ3RoID4gMCB0aGVuCisgICAgICAgICBXaW5kb3dfVGl0bGUgKFcsIFRpdGxlKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFBhbiA6PSBOZXdfUGFuZWwgKFcpOworICAgICAgUG9zdCAoRik7CisgICAgICByZXR1cm4gUGFuOworICAgZW5kIENyZWF0ZTsKKworICAgcHJvY2VkdXJlIERlc3Ryb3kgKEYgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgIFAgOiBpbiBvdXQgUGFuZWwpCisgICBpcworICAgICAgVywgUyA6IFdpbmRvdzsKKyAgIGJlZ2luCisgICAgICBXIDo9IEdldF9XaW5kb3cgKEYpOworICAgICAgUyA6PSBHZXRfU3ViX1dpbmRvdyAoRik7CisgICAgICBQb3N0IChGLCBGYWxzZSk7CisgICAgICBFcmFzZSAoVyk7CisgICAgICBEZWxldGUgKFApOworICAgICAgU2V0X1dpbmRvdyAoRiwgTnVsbF9XaW5kb3cpOworICAgICAgU2V0X1N1Yl9XaW5kb3cgKEYsIE51bGxfV2luZG93KTsKKyAgICAgIERlbGV0ZSAoUyk7CisgICAgICBEZWxldGUgKFcpOworICAgICAgVXBkYXRlX1BhbmVsczsKKyAgIGVuZCBEZXN0cm95OworCisgICBmdW5jdGlvbiBHZXRfUmVxdWVzdCAoRiAgICAgICAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgIFAgICAgICAgICAgIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlX0NSTEYgOiBCb29sZWFuIDo9IFRydWUpIHJldHVybiBLZXlfQ29kZQorICAgaXMKKyAgICAgIFcgIDogY29uc3RhbnQgV2luZG93IDo9IEdldF9XaW5kb3cgKEYpOworICAgICAgSyAgOiBSZWFsX0tleV9Db2RlOworICAgICAgQ2ggOiBDaGFyYWN0ZXI7CisgICBiZWdpbgorICAgICAgVG9wIChQKTsKKyAgICAgIGxvb3AKKyAgICAgICAgIEsgOj0gR2V0X0tleSAoVyk7CisgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICB3aGVuIEhFTFBfQ09ERSAgICAgICAgICAgICA9PiBFeHBsYWluX0NvbnRleHQ7CisgICAgICAgICAgICAgICB3aGVuIEVYUExBSU5fQ09ERSAgICAgICAgICA9PiBFeHBsYWluICgiRk9STUtFWVMiKTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0hvbWUgICAgICAgICAgICAgID0+IHJldHVybiBGX0ZpcnN0X0ZpZWxkOworICAgICAgICAgICAgICAgd2hlbiBLZXlfRW5kICAgICAgICAgICAgICAgPT4gcmV0dXJuIEZfTGFzdF9GaWVsZDsKKyAgICAgICAgICAgICAgIHdoZW4gUVVJVF9DT0RFICAgICAgICAgICAgID0+IHJldHVybiBRVUlUOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gICAgICAgPT4gcmV0dXJuIEZfRG93bl9DaGFyOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1VwICAgICAgICAgPT4gcmV0dXJuIEZfVXBfQ2hhcjsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9MZWZ0ICAgICAgID0+IHJldHVybiBGX1ByZXZpb3VzX0NoYXI7CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfUmlnaHQgICAgICA9PiByZXR1cm4gRl9OZXh0X0NoYXI7CisgICAgICAgICAgICAgICB3aGVuIEtleV9OZXh0X1BhZ2UgICAgICAgICA9PiByZXR1cm4gRl9OZXh0X1BhZ2U7CisgICAgICAgICAgICAgICB3aGVuIEtleV9QcmV2aW91c19QYWdlICAgICA9PiByZXR1cm4gRl9QcmV2aW91c19QYWdlOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQmFja3NwYWNlICAgICAgICAgPT4gcmV0dXJuIEZfRGVsZXRlX1ByZXZpb3VzOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQ2xlYXJfU2NyZWVuICAgICAgPT4gcmV0dXJuIEZfQ2xlYXJfRmllbGQ7CisgICAgICAgICAgICAgICB3aGVuIEtleV9DbGVhcl9FbmRfT2ZfTGluZSA9PiByZXR1cm4gRl9DbGVhcl9FT0Y7CisgICAgICAgICAgICAgICB3aGVuIG90aGVycyAgICAgICAgICAgICAgICA9PiByZXR1cm4gSzsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZWxzaWYgSyBpbiBOb3JtYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgQ2ggOj0gQ2hhcmFjdGVyJ1ZhbCAoSyk7CisgICAgICAgICAgICBjYXNlIENoIGlzCisgICAgICAgICAgICAgICB3aGVuIENBTiA9PiByZXR1cm4gUVVJVDsgICAgICAgICAgICAgICAgICAtLSBDVFJMLVgKKworICAgICAgICAgICAgICAgd2hlbiBBQ0sgPT4gcmV0dXJuIEZfTmV4dF9GaWVsZDsgICAgICAgICAgLS0gQ1RSTC1GCisgICAgICAgICAgICAgICB3aGVuIFNUWCA9PiByZXR1cm4gRl9QcmV2aW91c19GaWVsZDsgICAgICAtLSBDVFJMLUIKKyAgICAgICAgICAgICAgIHdoZW4gRkYgID0+IHJldHVybiBGX0xlZnRfRmllbGQ7ICAgICAgICAgIC0tIENUUkwtTAorICAgICAgICAgICAgICAgd2hlbiBEQzIgPT4gcmV0dXJuIEZfUmlnaHRfRmllbGQ7ICAgICAgICAgLS0gQ1RSTC1SCisgICAgICAgICAgICAgICB3aGVuIE5BSyA9PiByZXR1cm4gRl9VcF9GaWVsZDsgICAgICAgICAgICAtLSBDVFJMLVUKKyAgICAgICAgICAgICAgIHdoZW4gRU9UID0+IHJldHVybiBGX0Rvd25fRmllbGQ7ICAgICAgICAgIC0tIENUUkwtRAorCisgICAgICAgICAgICAgICB3aGVuIEVUQiA9PiByZXR1cm4gRl9OZXh0X1dvcmQ7ICAgICAgICAgICAtLSBDVFJMLVcKKyAgICAgICAgICAgICAgIHdoZW4gREM0ID0+IHJldHVybiBGX1ByZXZpb3VzX1dvcmQ7ICAgICAgIC0tIENUUkwtVAorCisgICAgICAgICAgICAgICB3aGVuIFNPSCA9PiByZXR1cm4gRl9CZWdpbl9GaWVsZDsgICAgICAgICAtLSBDVFJMLUEKKyAgICAgICAgICAgICAgIHdoZW4gRU5RID0+IHJldHVybiBGX0VuZF9GaWVsZDsgICAgICAgICAgIC0tIENUUkwtRQorCisgICAgICAgICAgICAgICB3aGVuIEhUICA9PiByZXR1cm4gRl9JbnNlcnRfQ2hhcjsgICAgICAgICAtLSBDVFJMLUkKKyAgICAgICAgICAgICAgIHdoZW4gU0kgID0+IHJldHVybiBGX0luc2VydF9MaW5lOyAgICAgICAgIC0tIENUUkwtTworICAgICAgICAgICAgICAgd2hlbiBTWU4gPT4gcmV0dXJuIEZfRGVsZXRlX0NoYXI7ICAgICAgICAgLS0gQ1RSTC1WCisgICAgICAgICAgICAgICB3aGVuIEJTICA9PiByZXR1cm4gRl9EZWxldGVfUHJldmlvdXM7ICAgICAtLSBDVFJMLUgKKyAgICAgICAgICAgICAgIHdoZW4gRU0gID0+IHJldHVybiBGX0RlbGV0ZV9MaW5lOyAgICAgICAgIC0tIENUUkwtWQorICAgICAgICAgICAgICAgd2hlbiBCRUwgPT4gcmV0dXJuIEZfRGVsZXRlX1dvcmQ7ICAgICAgICAgLS0gQ1RSTC1HCisgICAgICAgICAgICAgICB3aGVuIFZUICA9PiByZXR1cm4gRl9DbGVhcl9FT0Y7ICAgICAgICAgICAtLSBDVFJMLUsKKworICAgICAgICAgICAgICAgd2hlbiBTTyAgPT4gcmV0dXJuIEZfTmV4dF9DaG9pY2U7ICAgICAgICAgLS0gQ1RSTC1OCisgICAgICAgICAgICAgICB3aGVuIERMRSA9PiByZXR1cm4gRl9QcmV2aW91c19DaG9pY2U7ICAgICAtLSBDVFJMLVAKKworICAgICAgICAgICAgICAgd2hlbiBDUiB8IExGICA9PgorICAgICAgICAgICAgICAgICAgaWYgSGFuZGxlX0NSTEYgdGhlbgorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZfTmV3X0xpbmU7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSzsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IHJldHVybiBLOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gSzsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIEdldF9SZXF1ZXN0OworCisgICBmdW5jdGlvbiBNYWtlIChUb3AgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBMZWZ0ICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgIDogU3RyaW5nKSByZXR1cm4gRmllbGQKKyAgIGlzCisgICAgICBGbGQgOiBGaWVsZDsKKyAgICAgIEMgOiBjb25zdGFudCBDb2x1bW5fQ291bnQgOj0gQ29sdW1uX0NvdW50IChUZXh0J0xlbmd0aCk7CisgICBiZWdpbgorICAgICAgRmxkIDo9IE5ld19GaWVsZCAoMSwgQywgVG9wLCBMZWZ0KTsKKyAgICAgIFNldF9CdWZmZXIgKEZsZCwgMCwgVGV4dCk7CisgICAgICBTd2l0Y2hfT3B0aW9ucyAoRmxkLCAoQWN0aXZlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksIEZhbHNlKTsKKyAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgU2V0X0JhY2tncm91bmQgKEZsZCA9PiBGbGQsIENvbG9yID0+IERlZmF1bHRfQ29sb3JzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBGbGQ7CisgICBlbmQgTWFrZTsKKworICAgZnVuY3Rpb24gTWFrZSAgKEhlaWdodCAgICAgIDogTGluZV9Db3VudCA6PSAxOworICAgICAgICAgICAgICAgICAgIFdpZHRoICAgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgIFRvcCAgICAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBMZWZ0ICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBPZmZfU2NyZWVuICA6IE5hdHVyYWwgOj0gMCkgcmV0dXJuIEZpZWxkCisgICBpcworICAgICAgRmxkIDogY29uc3RhbnQgRmllbGQgOj0gTmV3X0ZpZWxkIChIZWlnaHQsIFdpZHRoLCBUb3AsIExlZnQsIE9mZl9TY3JlZW4pOworICAgYmVnaW4KKyAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgU2V0X0ZvcmVncm91bmQgKEZsZCA9PiBGbGQsIENvbG9yID0+IEZvcm1fRm9yZV9Db2xvcik7CisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoRmxkID0+IEZsZCwgQ29sb3IgPT4gRm9ybV9CYWNrX0NvbG9yKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChGbGQsIChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEZsZDsKKyAgIGVuZCBNYWtlOworCisgICBmdW5jdGlvbiBEZWZhdWx0X0RyaXZlciAoRiA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgUCA9IE51bGxfUGFuZWwgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgaWYgSyBpbiBVc2VyX0tleV9Db2RlJ1JhbmdlIGFuZCB0aGVuIEsgPSBRVUlUIHRoZW4KKyAgICAgICAgIGlmIERyaXZlciAoRiwgRl9WYWxpZGF0ZV9GaWVsZCkgPSBGb3JtX09rICB0aGVuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBGYWxzZTsKKyAgIGVuZCBEZWZhdWx0X0RyaXZlcjsKKworICAgZnVuY3Rpb24gQ291bnRfQWN0aXZlIChGIDogRm9ybSkgcmV0dXJuIE5hdHVyYWwKKyAgIGlzCisgICAgICBOIDogTmF0dXJhbCA6PSAwOworICAgICAgTyA6IEZpZWxkX09wdGlvbl9TZXQ7CisgICAgICBIIDogY29uc3RhbnQgTmF0dXJhbCA6PSBGaWVsZF9Db3VudCAoRik7CisgICBiZWdpbgorICAgICAgaWYgSCA+IDAgdGhlbgorICAgICAgICAgZm9yIEkgaW4gMSAuLiBIIGxvb3AKKyAgICAgICAgICAgIEdldF9PcHRpb25zIChGaWVsZHMgKEYsIEkpLCBPKTsKKyAgICAgICAgICAgIGlmIE8uQWN0aXZlIHRoZW4KKyAgICAgICAgICAgICAgIE4gOj0gTiArIDE7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBOOworICAgZW5kIENvdW50X0FjdGl2ZTsKKworZW5kIFNhbXBsZS5Gb3JtX0RlbW8uQXV4OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzE3ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZHMKQEAgLTAsMCArMSw5MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRm9ybV9EZW1vLkF1eCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsgIHVzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKKworcGFja2FnZSBTYW1wbGUuRm9ybV9EZW1vLkF1eCBpcworCisgICBwcm9jZWR1cmUgR2VvbWV0cnkgKEYgIDogaW4gIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIEwgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgIEMgIDogb3V0IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgWSAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBDYWxjdWxhdGUgdGhlIGdlb21ldHJ5IGZvciBhIHBhbmVsIGJlZWluZyBhYmxlIHRvIGJlIHVzZWQgdG8gZGlzcGxheQorICAgLS0gIHRoZSBtZW51LgorCisgICBmdW5jdGlvbiBDcmVhdGUgKEYgICAgIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIExpbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBQYW5lbDsKKyAgIC0tICBDcmVhdGUgYSBwYW5lbCBkZWNvcmF0ZWQgd2l0aCBhIGZyYW1lIGFuZCB0aGUgdGl0bGUgYXQgdGhlIHNwZWNpZmllZAorICAgLS0gIHBvc2l0aW9uLiBUaGUgZGltZW5zaW9uIG9mIHRoZSBwYW5lbCBpcyBkZXJpdmVkIGZyb20gdGhlIG1lbnVzIGxheW91dC4KKworICAgcHJvY2VkdXJlIERlc3Ryb3kgKEYgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgIFAgOiBpbiBvdXQgUGFuZWwpOworICAgLS0gIERlc3Ryb3kgYWxsIHRoZSB3aW5kb3dpbmcgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZW51IGFuZAorICAgLS0gIHBhbmVsLgorCisgICBmdW5jdGlvbiBHZXRfUmVxdWVzdCAoRiAgICAgICAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgIFAgICAgICAgICAgIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlX0NSTEYgOiBCb29sZWFuIDo9IFRydWUpIHJldHVybiBLZXlfQ29kZTsKKyAgIC0tICBDZW50cmFsaXplZCByZXF1ZXN0IGRyaXZlciBmb3IgYWxsIG1lbnVzIGluIHRoaXMgc2FtcGxlLiBUaGlzCisgICAtLSAgZ2l2ZXMgdXMgYSBjb21tb24ga2V5IGJpbmRpbmcgZm9yIGFsbCBtZW51cy4KKworICAgZnVuY3Rpb24gTWFrZSAoVG9wICAgICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgTGVmdCAgICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBUZXh0ICAgICAgICA6IFN0cmluZykgcmV0dXJuIEZpZWxkOworICAgLS0gIGNyZWF0ZSBhIGxhYmVsCisKKyAgIGZ1bmN0aW9uIE1ha2UgIChIZWlnaHQgICAgICA6IExpbmVfQ291bnQgOj0gMTsKKyAgICAgICAgICAgICAgICAgICBXaWR0aCAgICAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICBUb3AgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgTGVmdCAgICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgT2ZmX1NjcmVlbiAgOiBOYXR1cmFsIDo9IDApIHJldHVybiBGaWVsZDsKKyAgIC0tICBjcmVhdGUgYSBlZGl0YWJsZSBmaWVsZAorCisgICBmdW5jdGlvbiBEZWZhdWx0X0RyaXZlciAoRiA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CisKKyAgIGZ1bmN0aW9uIENvdW50X0FjdGl2ZSAoRiA6IEZvcm0pIHJldHVybiBOYXR1cmFsOworICAgLS0gIENvdW50IHRoZSBudW1iZXIgb2YgYWN0aXZlIGZpZWxkcyBpbiB0aGUgZm9ybQorCitlbmQgU2FtcGxlLkZvcm1fRGVtby5BdXg7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlODZmNwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkYgpAQCAtMCwwICsxLDk4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFNhbXBsZS5Gb3JtX0RlbW8uQXV4OworCitwYWNrYWdlIGJvZHkgU2FtcGxlLkZvcm1fRGVtby5IYW5kbGVyIGlzCisKKyAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgU2FtcGxlLkZvcm1fRGVtby5BdXg7CisKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIGlzCisgICAgICBMIDogTGluZV9Db3VudDsKKyAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CisgICAgICBZIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgQXV4Lkdlb21ldHJ5IChGLCBMLCBDLCBZLCBYKTsKKyAgICAgIERyaXZlX01lIChGLCBZLCBYLCBUaXRsZSk7CisgICBlbmQgRHJpdmVfTWU7CisKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIGlzCisgICAgICBQYW4gOiBQYW5lbCA6PSBBdXguQ3JlYXRlIChGLCBUaXRsZSwgTGluLCBDb2wpOworICAgICAgViAgIDogQ3Vyc29yX1Zpc2liaWxpdHkgOj0gTm9ybWFsOworICAgICAgSGFuZGxlX0NSTEYgOiBCb29sZWFuIDo9IFRydWU7CisKKyAgIGJlZ2luCisgICAgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFYpOworICAgICAgaWYgQXV4LkNvdW50X0FjdGl2ZSAoRikgPSAxIHRoZW4KKyAgICAgICAgIEhhbmRsZV9DUkxGIDo9IEZhbHNlOworICAgICAgZW5kIGlmOworICAgICAgbG9vcAorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgSyA6IGNvbnN0YW50IEtleV9Db2RlIDo9IEF1eC5HZXRfUmVxdWVzdCAoRiwgUGFuLCBIYW5kbGVfQ1JMRik7CisgICAgICAgICAgICBSIDogRHJpdmVyX1Jlc3VsdDsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoSyA9IDEzIG9yIGVsc2UgSyA9IDEwKSBhbmQgdGhlbiBub3QgSGFuZGxlX0NSTEYgdGhlbgorICAgICAgICAgICAgICAgUiA6PSBVbmtub3duX1JlcXVlc3Q7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBSIDo9IERyaXZlciAoRiwgSyk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBjYXNlIFIgaXMKKyAgICAgICAgICAgICAgIHdoZW4gRm9ybV9PayA9PiBudWxsOworICAgICAgICAgICAgICAgd2hlbiBVbmtub3duX1JlcXVlc3QgPT4KKyAgICAgICAgICAgICAgICAgIGlmIE15X0RyaXZlciAoRiwgSywgUGFuKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gQmVlcDsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZW5kOworICAgICAgZW5kIGxvb3A7CisgICAgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFYpOworICAgICAgQXV4LkRlc3Ryb3kgKEYsIFBhbik7CisgICBlbmQgRHJpdmVfTWU7CisKK2VuZCBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1NjQxMgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkcwpAQCAtMCwwICsxLDY0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7CisKK2dlbmVyaWMKKyAgIHdpdGggZnVuY3Rpb24gIE15X0RyaXZlciAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyAgIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbiA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKK3BhY2thZ2UgU2FtcGxlLkZvcm1fRGVtby5IYW5kbGVyIGlzCisKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIik7CisgICAtLSAgUG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIGdpdmVuIHBvaW50IGFuZCBkcml2ZSBpdC4KKworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIC0tICBDZW50ZXIgbWVudSBhbmQgZHJpdmUgaXQuCisKK2VuZCBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZhNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkYgpAQCAtMCwwICsxLDEzMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkZvcm1fRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTUgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhOword2l0aCBTYW1wbGUuTXlfRmllbGRfVHlwZTsgdXNlIFNhbXBsZS5NeV9GaWVsZF9UeXBlOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247Cit3aXRoIFNhbXBsZS5Gb3JtX0RlbW8uQXV4OyB1c2UgU2FtcGxlLkZvcm1fRGVtby5BdXg7Cit3aXRoIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsgdXNlIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKK3dpdGggU2FtcGxlLkZvcm1fRGVtby5IYW5kbGVyOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkOworCitwYWNrYWdlIGJvZHkgU2FtcGxlLkZvcm1fRGVtbyBpcworCisgICB0eXBlIFVzZXJfRGF0YSBpcworICAgICAgcmVjb3JkCisgICAgICAgICBEYXRhIDogSW50ZWdlcjsKKyAgICAgIGVuZCByZWNvcmQ7CisgICB0eXBlIFVzZXJfQWNjZXNzIGlzIGFjY2VzcyBVc2VyX0RhdGE7CisKKyAgIHBhY2thZ2UgRmxkX1UgaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhIChVc2VyX0RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyX0FjY2Vzcyk7CisKKyAgIHR5cGUgV2Vla2RheSBpcyAoU3VuZGF5LCBNb25kYXksIFR1ZXNkYXksIFdlZG5lc2RheSwgVGh1cnNkYXksCisgICAgICAgICAgICAgICAgICAgIEZyaWRheSwgU2F0dXJkYXkpOworCisgICBwYWNrYWdlIFdlZWtkYXlfRW51bSBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbi5BZGEgKFdlZWtkYXkpOworCisgICBFbnVtX0ZpZWxkIDogY29uc3RhbnQgRW51bWVyYXRpb25fRmllbGQgOj0KKyAgICAgV2Vla2RheV9FbnVtLkNyZWF0ZTsKKworICAgcHJvY2VkdXJlIERlbW8KKyAgIGlzCisKKyAgICAgIE1mdCA6IGNvbnN0YW50IE15X0RhdGEgOj0gKENoID0+ICdYJyk7CisKKyAgICAgIEZBIDogRmllbGRfQXJyYXlfQWNjZXNzIDo9IG5ldyBGaWVsZF9BcnJheScKKyAgICAgICAgKE1ha2UgKDAsIDE0LCAiU2FtcGxlIEVudHJ5IEZvcm0iKSwKKyAgICAgICAgIE1ha2UgKDIsIDAsICAiV2Vla2RheUVudW1lcmF0aW9uIiksCisgICAgICAgICBNYWtlICgyLCAyMCwgIk51bWVyaWMgMS0xMCIpLAorICAgICAgICAgTWFrZSAoMiwgMzQsICJPbmx5ICdYJyIpLAorICAgICAgICAgTWFrZSAoNSwgMCwgIk11bHRpcGxlIExpbmVzIG9mZnNjcmVlbihTY3JvbGwpIiksCisgICAgICAgICBNYWtlIChXaWR0aCA9PiAxOCwgVG9wID0+IDMsIExlZnQgPT4gIDApLAorICAgICAgICAgTWFrZSAoV2lkdGggPT4gMTIsIFRvcCA9PiAzLCBMZWZ0ID0+IDIwKSwKKyAgICAgICAgIE1ha2UgKFdpZHRoID0+IDEyLCBUb3AgPT4gMywgTGVmdCA9PiAzNCksCisgICAgICAgICBNYWtlIChXaWR0aCA9PiA0NiwgVG9wID0+IDYsIExlZnQgPT4gMCwgSGVpZ2h0ID0+IDQsIE9mZl9TY3JlZW4gPT4gMiksCisgICAgICAgICBOdWxsX0ZpZWxkCisgICAgICAgICApOworCisgICAgICBGcm0gOiBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZvcm0gOj0gQ3JlYXRlIChGQSk7CisKKyAgICAgIElfRiA6IGNvbnN0YW50IEludGVnZXJfRmllbGQgOj0gKFByZWNpc2lvbiAgID0+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3dlcl9MaW1pdCA9PiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBwZXJfTGltaXQgPT4gMTApOworCisgICAgICBGMSwgRjIgOiBVc2VyX0FjY2VzczsKKworICAgICAgcGFja2FnZSBGaCBpcyBuZXcgU2FtcGxlLkZvcm1fRGVtby5IYW5kbGVyIChEZWZhdWx0X0RyaXZlcik7CisKKyAgIGJlZ2luCisgICAgICBQdXNoX0Vudmlyb25tZW50ICgiRk9STTAwIik7CisgICAgICBOb3RlcGFkICgiRk9STS1QQUQwMCIpOworICAgICAgRGVmYXVsdF9MYWJlbHM7CisKKyAgICAgIFNldF9GaWVsZF9UeXBlIChGQSAoNiksIEVudW1fRmllbGQpOworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBICg3KSwgSV9GKTsKKyAgICAgIFNldF9GaWVsZF9UeXBlIChGQSAoOCksIE1mdCk7CisKKyAgICAgIEYxIDo9IG5ldyBVc2VyX0RhdGEnKERhdGEgPT4gNDcxMSk7CisgICAgICBGbGRfVS5TZXRfVXNlcl9EYXRhIChGQSAoMSksIEYxKTsKKworICAgICAgRmguRHJpdmVfTWUgKEZybSk7CisKKyAgICAgIEZsZF9VLkdldF9Vc2VyX0RhdGEgKEZBICgxKSwgRjIpOworICAgICAgcHJhZ21hIEFzc2VydCAoRjEgPSBGMik7CisgICAgICBwcmFnbWEgQXNzZXJ0IChGMS5EYXRhID0gRjIuRGF0YSk7CisKKyAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgIERlbGV0ZSAoRnJtKTsKKworICAgICAgRnJlZSAoRkEsIFRydWUpOworICAgZW5kIERlbW87CisKK2VuZCBTYW1wbGUuRm9ybV9EZW1vOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzM2Y1NwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby5hZHMKQEAgLTAsMCArMSw0NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkZvcm1fRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgU2FtcGxlLkZvcm1fRGVtbyBpcworCisgICBwcm9jZWR1cmUgRGVtbzsKKworZW5kIFNhbXBsZS5Gb3JtX0RlbW87CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwZTRhNAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkYgpAQCAtMCwwICsxLDIxNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmcgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTMgJAorLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgIFNhbXBsZS5NYW5pZmVzdDsKKworLS0gIFRoaXMgcGFja2FnZSBpbXBsZW1lbnRzIGEgc2ltcGxlIHN0YWNrIG9mIGZ1bmN0aW9uIGtleSBsYWJlbCBlbnZpcm9ubWVudHMuCistLQorcGFja2FnZSBib2R5IFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZyBpcworCisgICBNYXhfTGFiZWxfTGVuZ3RoIDogY29uc3RhbnQgUG9zaXRpdmUgOj0gODsKKyAgIE51bWJlcl9PZl9LZXlzICAgOiBMYWJlbF9OdW1iZXIgOj0gTGFiZWxfTnVtYmVyJ0xhc3Q7CisgICBKdXN0aWZpY2F0aW9uICAgIDogTGFiZWxfSnVzdGlmaWNhdGlvbiA6PSBMZWZ0OworCisgICBzdWJ0eXBlIExhYmVsIGlzIFN0cmluZyAoMSAuLiBNYXhfTGFiZWxfTGVuZ3RoKTsKKyAgIHR5cGUgTGFiZWxfQXJyYXkgaXMgYXJyYXkgKExhYmVsX051bWJlciByYW5nZSA8Pikgb2YgTGFiZWw7CisKKyAgIHR5cGUgS2V5X0Vudmlyb25tZW50IChOIDogTGFiZWxfTnVtYmVyIDo9IExhYmVsX051bWJlcidMYXN0KTsKKyAgIHR5cGUgRW52X1B0ciBpcyBhY2Nlc3MgS2V5X0Vudmlyb25tZW50OworICAgcHJhZ21hIENvbnRyb2xsZWQgKEVudl9QdHIpOworCisgICB0eXBlIFN0cmluZ19BY2Nlc3MgaXMgYWNjZXNzIFN0cmluZzsKKyAgIHByYWdtYSBDb250cm9sbGVkIChTdHJpbmdfQWNjZXNzKTsKKworICAgQWN0aXZlX0NvbnRleHQgOiBTdHJpbmdfQWNjZXNzIDo9IG5ldyBTdHJpbmcnKCJNQUlOIik7CisgICBBY3RpdmVfTm90ZXBhZCA6IFBhbmVsIDo9IE51bGxfUGFuZWw7CisKKyAgIHR5cGUgS2V5X0Vudmlyb25tZW50ICAoTiA6IExhYmVsX051bWJlciA6PSBMYWJlbF9OdW1iZXInTGFzdCkgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgUHJldiAgICA6IEVudl9QdHI7CisgICAgICAgICBIZWxwICAgIDogU3RyaW5nX0FjY2VzczsKKyAgICAgICAgIE5vdGVwYWQgOiBQYW5lbDsKKyAgICAgICAgIExhYmVscyAgOiBMYWJlbF9BcnJheSAoMSAuLiBOKTsKKyAgICAgIGVuZCByZWNvcmQ7CisKKyAgIHByb2NlZHVyZSBSZWxlYXNlX1N0cmluZyBpcworICAgICBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24gKFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdfQWNjZXNzKTsKKworICAgcHJvY2VkdXJlIFJlbGVhc2VfRW52aXJvbm1lbnQgaXMKKyAgICAgIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbiAoS2V5X0Vudmlyb25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZfUHRyKTsKKworICAgVG9wX09mX1N0YWNrIDogRW52X1B0ciA6PSBudWxsOworCisgICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBpbiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgUCA6IGNvbnN0YW50IEVudl9QdHIgOj0gbmV3IEtleV9FbnZpcm9ubWVudCAoTnVtYmVyX09mX0tleXMpOworICAgYmVnaW4KKyAgICAgIC0tICBTdG9yZSB0aGUgY3VycmVudCBsYWJlbHMgaW4gdGhlIGVudmlyb25tZW50CisgICAgICBmb3IgSSBpbiAxIC4uIE51bWJlcl9PZl9LZXlzIGxvb3AKKyAgICAgICAgIEdldF9Tb2Z0X0xhYmVsX0tleSAoSSwgUC5MYWJlbHMgKEkpKTsKKyAgICAgICAgIGlmIFJlc2V0IHRoZW4KKyAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoSSwgIiAiKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgICAgUC5QcmV2IDo9IFRvcF9PZl9TdGFjazsKKyAgICAgIC0tICBub3cgc3RvcmUgYWN0aXZlIGhlbHAgY29udGV4dCBhbmQgbm90ZXBhZAorICAgICAgUC5IZWxwIDo9IEFjdGl2ZV9Db250ZXh0OworICAgICAgUC5Ob3RlcGFkIDo9IEFjdGl2ZV9Ob3RlcGFkOworICAgICAgLS0gIFRoZSBub3RlcGFkIG11c3Qgbm93IHZhbmlzaCBhbmQgdGhlIG5ldyBub3RlcGFkIGlzIGVtcHR5LgorICAgICAgaWYgUC5Ob3RlcGFkIC89IE51bGxfUGFuZWwgdGhlbgorICAgICAgICAgSGlkZSAoUC5Ob3RlcGFkKTsKKyAgICAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICAgICBlbmQgaWY7CisgICAgICBBY3RpdmVfTm90ZXBhZCA6PSBOdWxsX1BhbmVsOworICAgICAgQWN0aXZlX0NvbnRleHQgOj0gbmV3IFN0cmluZycoS2V5KTsKKworICAgICAgVG9wX09mX1N0YWNrIDo9IFA7CisgICAgICBpZiBSZXNldCB0aGVuCisgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQdXNoX0Vudmlyb25tZW50OworCisgICBwcm9jZWR1cmUgUG9wX0Vudmlyb25tZW50CisgICBpcworICAgICAgUCA6IEVudl9QdHIgOj0gVG9wX09mX1N0YWNrOworICAgYmVnaW4KKyAgICAgIGlmIFRvcF9PZl9TdGFjayA9IG51bGwgdGhlbgorICAgICAgICAgcmFpc2UgRnVuY3Rpb25fS2V5X1N0YWNrX0Vycm9yOworICAgICAgZWxzZQorICAgICAgICAgZm9yIEkgaW4gMSAuLiBOdW1iZXJfT2ZfS2V5cyBsb29wCisgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksIFAuTGFiZWxzIChJKSwgSnVzdGlmaWNhdGlvbik7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIHByYWdtYSBBc3NlcnQgKEFjdGl2ZV9Db250ZXh0IC89IG51bGwpOworICAgICAgICAgUmVsZWFzZV9TdHJpbmcgKEFjdGl2ZV9Db250ZXh0KTsKKyAgICAgICAgIEFjdGl2ZV9Db250ZXh0IDo9IFAuSGVscDsKKyAgICAgICAgIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlOworICAgICAgICAgTm90ZXBhZF9Ub19Db250ZXh0IChQLk5vdGVwYWQpOworICAgICAgICAgVG9wX09mX1N0YWNrIDo9IFAuUHJldjsKKyAgICAgICAgIFJlbGVhc2VfRW52aXJvbm1lbnQgKFApOworICAgICAgZW5kIGlmOworICAgZW5kIFBvcF9FbnZpcm9ubWVudDsKKworICAgZnVuY3Rpb24gQ29udGV4dCByZXR1cm4gU3RyaW5nCisgICBpcworICAgYmVnaW4KKyAgICAgIGlmIEFjdGl2ZV9Db250ZXh0IC89IG51bGwgdGhlbgorICAgICAgICAgcmV0dXJuIEFjdGl2ZV9Db250ZXh0LmFsbDsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDb250ZXh0OworCisgICBmdW5jdGlvbiBGaW5kX0NvbnRleHQgKEtleSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBQIDogRW52X1B0ciA6PSBUb3BfT2ZfU3RhY2s7CisgICBiZWdpbgorICAgICAgaWYgQWN0aXZlX0NvbnRleHQuYWxsID0gS2V5IHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgbG9vcAorICAgICAgICAgICAgZXhpdCB3aGVuIFAgPSBudWxsOworICAgICAgICAgICAgaWYgUC5IZWxwLmFsbCA9IEtleSB0aGVuCisgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIFAgOj0gUC5QcmV2OworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgRmluZF9Db250ZXh0OworCisgICBwcm9jZWR1cmUgTm90ZXBhZF9Ub19Db250ZXh0IChQYW4gOiBpbiBQYW5lbCkKKyAgIGlzCisgICAgICBXIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIGlmIEFjdGl2ZV9Ob3RlcGFkIC89IE51bGxfUGFuZWwgdGhlbgorICAgICAgICAgVyA6PSBHZXRfV2luZG93IChBY3RpdmVfTm90ZXBhZCk7CisgICAgICAgICBDbGVhciAoVyk7CisgICAgICAgICBEZWxldGUgKEFjdGl2ZV9Ob3RlcGFkKTsKKyAgICAgICAgIERlbGV0ZSAoVyk7CisgICAgICBlbmQgaWY7CisgICAgICBBY3RpdmVfTm90ZXBhZCA6PSBQYW47CisgICAgICBpZiBQYW4gLz0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICBUb3AgIChQYW4pOworICAgICAgZW5kIGlmOworICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgIFVwZGF0ZV9TY3JlZW47CisgICBlbmQgTm90ZXBhZF9Ub19Db250ZXh0OworCisgICBwcm9jZWR1cmUgSW5pdGlhbGl6ZSAoTW9kZSA6IFNvZnRfTGFiZWxfS2V5X0Zvcm1hdCA6PSBQQ19TdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IDogTGFiZWxfSnVzdGlmaWNhdGlvbiA6PSBMZWZ0KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBjYXNlIE1vZGUgaXMKKyAgICAgICAgIHdoZW4gUENfU3R5bGUgLi4gUENfU3R5bGVfV2l0aF9JbmRleAorICAgICAgICAgICA9PiBOdW1iZXJfT2ZfS2V5cyA6PSAxMjsKKyAgICAgICAgIHdoZW4gb3RoZXJzCisgICAgICAgICAgID0+IE51bWJlcl9PZl9LZXlzIDo9IDg7CisgICAgICBlbmQgY2FzZTsKKyAgICAgIEluaXRfU29mdF9MYWJlbF9LZXlzIChNb2RlKTsKKyAgICAgIEp1c3RpZmljYXRpb24gOj0gSnVzdDsKKyAgIGVuZCBJbml0aWFsaXplOworCisgICBwcm9jZWR1cmUgRGVmYXVsdF9MYWJlbHMKKyAgIGlzCisgICBiZWdpbgorICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5IChGS0VZX1FVSVQsICJRdWl0Iik7CisgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEZLRVlfSEVMUCwgIkhlbHAiKTsKKyAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoRktFWV9FWFBMQUlOLCAiS2V5cyIpOworICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisgICBlbmQgRGVmYXVsdF9MYWJlbHM7CisKKyAgIGZ1bmN0aW9uIE5vdGVwYWRfV2luZG93IHJldHVybiBXaW5kb3cKKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgQWN0aXZlX05vdGVwYWQgLz0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICByZXR1cm4gR2V0X1dpbmRvdyAoQWN0aXZlX05vdGVwYWQpOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIE51bGxfV2luZG93OworICAgICAgZW5kIGlmOworICAgZW5kIE5vdGVwYWRfV2luZG93OworCitlbmQgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGY2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZHMKQEAgLTAsMCArMSw4MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmcgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CisKKy0tICBUaGlzIHBhY2thZ2UgaW1wbGVtZW50cyBhIHNpbXBsZSBzdGFjayBvZiBmdW5jdGlvbiBrZXkgbGFiZWwgZW52aXJvbm1lbnRzLgorLS0KK3BhY2thZ2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nIGlzCisKKyAgIHByb2NlZHVyZSBQdXNoX0Vudmlyb25tZW50IChLZXkgICA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgUHVzaCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBrZXlzIG9uIGFuIGludGVybmFsCisgICAtLSAgc3RhY2suIElmIHRoZSByZXNldCBmbGFnIGlzIHRydWUsIGFsbCBsYWJlbHMgYXJlIHJlc2V0IHdoaWxlCisgICAtLSAgcHVzaGVkLCBzbyB0aGUgbmV3IGVudmlyb25tZW50IGNhbiBhc3N1bWUgYSB0YWJ1bGEgcmFzYS4KKyAgIC0tICBUaGUgS2V5IGRlZmluZXMgdGhlIG5ldyBIZWxwIENvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcKKyAgIC0tICBFbnZpcm9ubWVudC4gVGhpcyBzYXZlcyBhbHNvIHRoZSBjdXJyZW50bHkgYWN0aXZlIE5vdGVwYWQuCisKKyAgIHByb2NlZHVyZSBQb3BfRW52aXJvbm1lbnQ7CisgICAtLSAgUG9wIHRoZSBEZWZpbml0aW9ucyBmcm9tIHRoZSBzdGFjayBhbmQgbWFrZSB0aGVtIHRoZSBjdXJyZW50IG9uZXMuCisgICAtLSAgVGhpcyBhbHNvIHJlc3RvcmVzIHRoZSBIZWxwIGNvbnRleHQgYW5kIHRoZSBwcmV2aW91cyBOb3RlcGFkLgorCisgICBwcm9jZWR1cmUgSW5pdGlhbGl6ZSAoTW9kZSA6IFNvZnRfTGFiZWxfS2V5X0Zvcm1hdCA6PSBQQ19TdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IDogTGFiZWxfSnVzdGlmaWNhdGlvbiA6PSBMZWZ0KTsKKyAgIC0tICBJbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudAorCisgICBmdW5jdGlvbiBDb250ZXh0IHJldHVybiBTdHJpbmc7CisgICAtLSAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRleHQgaWRlbnRpdGZpZXIKKworICAgZnVuY3Rpb24gRmluZF9Db250ZXh0IChLZXkgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuOworICAgLS0gIExvb2sgZm9yIGEgY29udGV4dCwgcmV0dXJuIHRydWUgaWYgaXQgaXMgaW4gdGhlIHN0YWNrLAorICAgLS0gIGZhbHNlIG90aGVyd2lzZS4KKworICAgcHJvY2VkdXJlIE5vdGVwYWRfVG9fQ29udGV4dCAoUGFuIDogaW4gUGFuZWwpOworICAgLS0gIEFkZCBhIHBhbmVsIHJlcHJlc2VudGluZyBhIG5vdGVwYWQgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4KKworICAgRnVuY3Rpb25fS2V5X1N0YWNrX0Vycm9yIDogZXhjZXB0aW9uOworCisgICBwcm9jZWR1cmUgRGVmYXVsdF9MYWJlbHM7CisgICAtLSAgU2V0IHRoZSBkZWZhdWx0IGxhYmVscyB1c2VkIGluIGFsbCBlbnZpcm9ubWVudHMKKworICAgZnVuY3Rpb24gTm90ZXBhZF9XaW5kb3cgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBSZXR1cm4gdGhlIGN1cnJlbnQgbm90ZXBhZCB3aW5kb3cgb3IgTnVsbF9XaW5kb3cgaWYgdGhlcmUgaXMgbm9uZS4KKworZW5kIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTk4ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRiCkBAIC0wLDAgKzEsMTgwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5IZWFkZXJfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5DYWxlbmRhcjsgdXNlIEFkYS5DYWxlbmRhcjsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU87Cit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKKworLS0gIFRoaXMgcGFja2FnZSBoYW5kbGVzIHRoZSBwYWludGluZyBvZiB0aGUgaGVhZGVyIGxpbmUgb2YgdGhlIHNjcmVlbi4KKy0tCitwYWNrYWdlIGJvZHkgU2FtcGxlLkhlYWRlcl9IYW5kbGVyIGlzCisKKyAgIHBhY2thZ2UgSW50X0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTyAoSW50ZWdlcik7CisgICB1c2UgSW50X0lPOworCisgICBIZWFkZXJfV2luZG93IDogV2luZG93IDo9IE51bGxfV2luZG93OworCisgICBEaXNwbGF5X0hvdXIgIDogSW50ZWdlciA6PSAtMTsgLS0gaG91ciBsYXN0IGRpc3BsYXllZAorICAgRGlzcGxheV9NaW4gICA6IEludGVnZXIgOj0gLTE7IC0tIG1pbnV0ZSBsYXN0IGRpc3BsYXllZAorICAgRGlzcGxheV9EYXkgICA6IEludGVnZXIgOj0gLTE7IC0tIGRheSBsYXN0IGRpc3BsYXllZAorICAgRGlzcGxheV9Nb250aCA6IEludGVnZXIgOj0gLTE7IC0tIG1vbnRoIGxhc3QgZGlzcGxheWVkCisKKyAgIC0tICBUaGlzIGlzIHRoZSByb3V0aW5lIGhhbmRlZCBvdmVyIHRvIHRoZSBjdXJzZXMgbGlicmFyeSB0byBiZSBjYWxsZWQKKyAgIC0tICBhcyBpbml0aWFsaXphdGlvbiByb3V0aW5lIHdoZW4gcmlwcGluZyBvZiB0aGUgaGVhZGVyIGxpbmVzIGZyb20KKyAgIC0tICB0aGUgc2NyZWVuLiBUaGlzIHJvdXRpbmUgbXVzdCBmb2xsb3cgQyBjb252ZW50aW9ucy4KKyAgIGZ1bmN0aW9uIEluaXRfSGVhZGVyX1dpbmRvdyAoV2luICAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXI7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgSW5pdF9IZWFkZXJfV2luZG93KTsKKworICAgcHJvY2VkdXJlIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChEb19VcGRhdGUgOiBpbiBCb29sZWFuKTsKKworICAgLS0gIFRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgSW5pdF9TY3JlZW4uIEl0IHN0ZWFscyB0d28KKyAgIC0tICBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbi4KKyAgIHByb2NlZHVyZSBJbml0X0hlYWRlcl9IYW5kbGVyCisgICBpcworICAgYmVnaW4KKyAgICAgIFJpcF9PZmZfTGluZXMgKDIsIEluaXRfSGVhZGVyX1dpbmRvdydBY2Nlc3MpOworICAgZW5kIEluaXRfSGVhZGVyX0hhbmRsZXI7CisKKyAgIHByb2NlZHVyZSBOX091dCAoTiA6IGluIEludGVnZXIpOworCisgICAtLSAgRW1pdCBhIHR3byBkaWdpdCBudW1iZXIgYW5kIGVuc3VyZSB0aGF0IGEgbGVhZGluZyB6ZXJvIGlzIGdlbmVyYXRlZCBpZgorICAgLS0gIG5lY2Vzc2FyeS4KKyAgIHByb2NlZHVyZSBOX091dCAoTiA6IGluIEludGVnZXIpCisgICBpcworICAgYmVnaW4KKyAgICAgIGlmIE4gPCAxMCB0aGVuCisgICAgICAgICBBZGQgKEhlYWRlcl9XaW5kb3csICcwJyk7CisgICAgICAgICBQdXQgKEhlYWRlcl9XaW5kb3csIE4sIDEpOworICAgICAgZWxzZQorICAgICAgICAgUHV0IChIZWFkZXJfV2luZG93LCBOLCAyKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBOX091dDsKKworICAgLS0gIFBhaW50IHRoZSBoZWFkZXIgd2luZG93LiBUaGUgaW5wdXQgcGFyYW1ldGVyIGlzIGEgZmxhZyBpbmRpY2F0aW5nCisgICAtLSAgd2hldGhlciBvciBub3QgdGhlIHNjcmVlbiBzaG91bGQgYmUgdXBkYXRlZCBwaHlzaWNhbGx5IGFmdGVyIHBhaW50aW5nLgorICAgcHJvY2VkdXJlIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChEb19VcGRhdGUgOiBpbiBCb29sZWFuKQorICAgaXMKKyAgICAgIHR5cGUgTW9udGhfTmFtZV9BcnJheSBpcworICAgICAgICAgYXJyYXkgKE1vbnRoX051bWJlcidGaXJzdCAuLiBNb250aF9OdW1iZXInTGFzdCkgb2YgU3RyaW5nICgxIC4uIDkpOworCisgICAgICBNb250aF9OYW1lcyA6IGNvbnN0YW50IE1vbnRoX05hbWVfQXJyYXkgOj0KKyAgICAgICAgKCJKYW51YXJ5ICAiLAorICAgICAgICAgIkZlYnJ1YXJ5ICIsCisgICAgICAgICAiTWFyY2ggICAgIiwKKyAgICAgICAgICJBcHJpbCAgICAiLAorICAgICAgICAgIk1heSAgICAgICIsCisgICAgICAgICAiSnVuZSAgICAgIiwKKyAgICAgICAgICJKdWx5ICAgICAiLAorICAgICAgICAgIkF1Z3VzdCAgICIsCisgICAgICAgICAiU2VwdGVtYmVyIiwKKyAgICAgICAgICJPY3RvYmVyICAiLAorICAgICAgICAgIk5vdmVtYmVyICIsCisgICAgICAgICAiRGVjZW1iZXIgIik7CisKKyAgICAgIE5vdyAgICA6IGNvbnN0YW50IFRpbWUgICAgICAgICA6PSBDbG9jazsKKyAgICAgIFNlYyAgICA6IGNvbnN0YW50IEludGVnZXIgICAgICA6PSBJbnRlZ2VyIChTZWNvbmRzIChOb3cpKTsKKyAgICAgIEhvdXIgICA6IGNvbnN0YW50IEludGVnZXIgICAgICA6PSBTZWMgLyAzNjAwOworICAgICAgTWludXRlIDogY29uc3RhbnQgSW50ZWdlciAgICAgIDo9IChTZWMgLSBIb3VyICogMzYwMCkgLyA2MDsKKyAgICAgIE1vbiAgICA6IGNvbnN0YW50IE1vbnRoX051bWJlciA6PSBNb250aCAoTm93KTsKKyAgICAgIEQgICAgICA6IGNvbnN0YW50IERheV9OdW1iZXIgICA6PSBEYXkgKE5vdyk7CisgICBiZWdpbgorICAgICAgaWYgSGVhZGVyX1dpbmRvdyAvPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICBpZiBNaW51dGUgLz0gRGlzcGxheV9NaW4gb3IgZWxzZSBIb3VyIC89IERpc3BsYXlfSG91cgorICAgICAgICAgICBvciBlbHNlIERpc3BsYXlfRGF5IC89IEQgb3IgZWxzZSBEaXNwbGF5X01vbnRoIC89IE1vbiB0aGVuCisgICAgICAgICAgICBNb3ZlX0N1cnNvciAoSGVhZGVyX1dpbmRvdywgMCwgMCk7CisgICAgICAgICAgICBOX091dCAoRCk7IEFkZCAoSGVhZGVyX1dpbmRvdywgJy4nKTsKKyAgICAgICAgICAgIEFkZCAoSGVhZGVyX1dpbmRvdywgTW9udGhfTmFtZXMgKE1vbikpOworICAgICAgICAgICAgTW92ZV9DdXJzb3IgKEhlYWRlcl9XaW5kb3csIDEsIDApOworICAgICAgICAgICAgTl9PdXQgKEhvdXIpOyBBZGQgKEhlYWRlcl9XaW5kb3csICc6Jyk7CisgICAgICAgICAgICBOX091dCAoTWludXRlKTsKKyAgICAgICAgICAgIERpc3BsYXlfTWluICAgOj0gTWludXRlOworICAgICAgICAgICAgRGlzcGxheV9Ib3VyICA6PSBIb3VyOworICAgICAgICAgICAgRGlzcGxheV9Nb250aCA6PSBNb247CisgICAgICAgICAgICBEaXNwbGF5X0RheSAgIDo9IEQ7CisgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChIZWFkZXJfV2luZG93KTsKKyAgICAgICAgICAgIGlmIERvX1VwZGF0ZSB0aGVuCisgICAgICAgICAgICAgICBVcGRhdGVfU2NyZWVuOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgZW5kIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93OworCisgICAtLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBpbiB0aGUga2V5Ym9hcmQgaW5wdXQgdGltZW91dCBoYW5kbGVyLiBTbyBpdCB3aWxsCisgICAtLSAgcGVyaW9kaWNhbGx5IHVwZGF0ZSB0aGUgaGVhZGVyIGxpbmUgb2YgdGhlIHNjcmVlbi4KKyAgIHByb2NlZHVyZSBVcGRhdGVfSGVhZGVyX1dpbmRvdworICAgaXMKKyAgIGJlZ2luCisgICAgICBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoVHJ1ZSk7CisgICBlbmQgVXBkYXRlX0hlYWRlcl9XaW5kb3c7CisKKyAgIGZ1bmN0aW9uIEluaXRfSGVhZGVyX1dpbmRvdyAoV2luICAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXIKKyAgIGlzCisgICAgICBUaXRsZSAgOiBjb25zdGFudCBTdHJpbmcgOj0gIkFkYSA5NSBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlIjsKKyAgICAgIFBvcyAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgIGJlZ2luCisgICAgICBIZWFkZXJfV2luZG93IDo9IFdpbjsKKyAgICAgIGlmIFdpbiAvPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4gPT4gV2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICA9PiAoQ2ggICAgPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gSGVhZGVyX0NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKFdpbiAgID0+IFdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBIZWFkZXJfQ29sb3IpOworICAgICAgICAgICAgRXJhc2UgKFdpbik7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlIChXaW4sIFRydWUpOworICAgICAgICAgUG9zIDo9IENvbHVtbnMgLSBDb2x1bW5fUG9zaXRpb24gKFRpdGxlJ0xlbmd0aCk7CisgICAgICAgICBBZGQgKFdpbiwgMCwgUG9zIC8gMiwgVGl0bGUpOworICAgICAgICAgLS0gIEluIHRoaXMgcGhhc2Ugd2UgbXVzdCBub3QgYWxsb3cgYSBwaHlzaWNhbCB1cGRhdGUsIGJlY2F1c2UKKyAgICAgICAgIC0tICBuY3Vyc2VzIGlzbrR0IHByb3Blcmx5IGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRmFsc2UpOworICAgICAgICAgcmV0dXJuIDA7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gLTE7CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5pdF9IZWFkZXJfV2luZG93OworCitlbmQgU2FtcGxlLkhlYWRlcl9IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGEwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZHMKQEAgLTAsMCArMSw1MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuSGVhZGVyX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKKy0tICBUaGlzIHBhY2thZ2UgaGFuZGxlcyB0aGUgcGFpbnRpbmcgb2YgdGhlIGhlYWRlciBsaW5lIG9mIHRoZSBzY3JlZW4uCistLQorcGFja2FnZSBTYW1wbGUuSGVhZGVyX0hhbmRsZXIgaXMKKworICAgcHJvY2VkdXJlIEluaXRfSGVhZGVyX0hhbmRsZXI7CisgICAtLSAgSW5pdGlhbGl6ZSB0aGUgaGFuZGxlciBmb3IgdGhlIGhlYWRlcmxpbmVzLgorCisgICBwcm9jZWR1cmUgVXBkYXRlX0hlYWRlcl9XaW5kb3c7CisgICAtLSAgVXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgaGVhZGVyIHdpbmRvdworCitlbmQgU2FtcGxlLkhlYWRlcl9IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQ4NTNlCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKQEAgLTAsMCArMSw2OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5IZWxwZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTIgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ4OjA4ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKKy0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pYW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKKy0tICB0aGlzIGV4YW1wbGUuCistLQorcGFja2FnZSBib2R5IFNhbXBsZS5IZWxwZXJzIGlzCisKKyAgIHByb2NlZHVyZSBXaW5kb3dfVGl0bGUgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcpCisgICBpcworICAgICAgSGVpZ2h0IDogTGluZV9Db3VudDsKKyAgICAgIFdpZHRoICA6IENvbHVtbl9Db3VudDsKKyAgICAgIFBvcyAgICA6IENvbHVtbl9Qb3NpdGlvbiA6PSAwOworICAgYmVnaW4KKyAgICAgIEdldF9TaXplIChXaW4sIEhlaWdodCwgV2lkdGgpOworICAgICAgaWYgVGl0bGUnTGVuZ3RoIDwgV2lkdGggdGhlbgorICAgICAgICAgUG9zIDo9IChXaWR0aCAtIFRpdGxlJ0xlbmd0aCkgLyAyOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChXaW4sIDAsIFBvcywgVGl0bGUpOworICAgZW5kIFdpbmRvd19UaXRsZTsKKworICAgcHJvY2VkdXJlIE5vdF9JbXBsZW1lbnRlZCBpcworICAgYmVnaW4KKyAgICAgIEV4cGxhaW4gKCJOT1RJTVBMIik7CisgICBlbmQgTm90X0ltcGxlbWVudGVkOworCitlbmQgU2FtcGxlLkhlbHBlcnM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzhlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkcwpAQCAtMCwwICsxLDU0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkhlbHBlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKworLS0gIFRoaXMgcGFja2FnZSBjb250YWlucyBzb21lIGNvbnZlbmlhbnQgaGVscGVyIHJvdXRpbmVzIHVzZWQgdGhyb3VnaG91dAorLS0gIHRoaXMgZXhhbXBsZS4KKy0tCitwYWNrYWdlIFNhbXBsZS5IZWxwZXJzIGlzCisKKyAgIHByb2NlZHVyZSBXaW5kb3dfVGl0bGUgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcpOworICAgLS0gIFB1dCBhIHRpdGxlIHN0cmluZyBpbnRvIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB3aW5kb3cKKworICAgcHJvY2VkdXJlIE5vdF9JbXBsZW1lbnRlZDsKKworZW5kIFNhbXBsZS5IZWxwZXJzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGFjMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKQEAgLTAsMCArMSwxOTQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLktleWJvYXJkX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlN0cmluZ3M7IHVzZSBBZGEuU3RyaW5nczsKK3dpdGggQWRhLlN0cmluZ3MuRml4ZWQ7IHVzZSBBZGEuU3RyaW5ncy5GaXhlZDsKK3dpdGggQWRhLlN0cmluZ3MuTWFwcy5Db25zdGFudHM7IHVzZSBBZGEuU3RyaW5ncy5NYXBzLkNvbnN0YW50czsKK3dpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsgdXNlIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7Cit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOyB1c2UgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb247Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb247CisKK3dpdGggU2FtcGxlLkhlYWRlcl9IYW5kbGVyOyB1c2UgU2FtcGxlLkhlYWRlcl9IYW5kbGVyOword2l0aCBTYW1wbGUuRm9ybV9EZW1vLkF1eDsgdXNlIFNhbXBsZS5Gb3JtX0RlbW8uQXV4Oword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlcjsKKworLS0gIFRoaXMgcGFja2FnZSBjb250YWlucyBhIGNlbnRyYWxpemVkIGtleWJvYXJkIGhhbmRsZXIgdXNlZCB0aHJvdWdob3V0CistLSAgdGhpcyBleGFtcGxlLiBUaGUgaGFuZGxlciBlc3RhYmxpc2hlcyBhIHRpbWVvdXQgbWVjaGFuaXNtIHRoYXQgcHJvdmlkZXMKKy0tICBwZXJpb2RpY2FsIHVwZGF0ZXMgb2YgdGhlIGNvbW1vbiBoZWFkZXIgbGluZXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUuCistLQorCitwYWNrYWdlIGJvZHkgU2FtcGxlLktleWJvYXJkX0hhbmRsZXIgaXMKKworICAgSW5fQ29tbWFuZCA6IEJvb2xlYW4gOj0gRmFsc2U7CisKKyAgIGZ1bmN0aW9uIEdldF9LZXkgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBSZWFsX0tleV9Db2RlCisgICBpcworICAgICAgSyA6IFJlYWxfS2V5X0NvZGU7CisKKyAgICAgIGZ1bmN0aW9uIENvbW1hbmQgcmV0dXJuIFJlYWxfS2V5X0NvZGU7CisKKyAgICAgIGZ1bmN0aW9uIENvbW1hbmQgcmV0dXJuIFJlYWxfS2V5X0NvZGUKKyAgICAgIGlzCisgICAgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKEYgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CisgICAgICAgICBwYWNrYWdlIEZoIGlzIG5ldyBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXIgKE15X0RyaXZlcik7CisKKyAgICAgICAgIHR5cGUgTGFiZWxfQXJyYXkgaXMgYXJyYXkgKExhYmVsX051bWJlcikgb2YgU3RyaW5nICgxIC4uIDgpOworCisgICAgICAgICBMYWJlbHMgOiBMYWJlbF9BcnJheTsKKworICAgICAgICAgRkEgOiBGaWVsZF9BcnJheV9BY2Nlc3MgOj0gbmV3IEZpZWxkX0FycmF5JworICAgICAgICAgICAoTWFrZSAoMCwgMCwgIkNvbW1hbmQ6IiksCisgICAgICAgICAgICBNYWtlIChUb3AgPT4gMCwgTGVmdCA9PiA5LCBXaWR0aCA9PiBDb2x1bW5zIC0gMTEpLAorICAgICAgICAgICAgTnVsbF9GaWVsZCk7CisKKyAgICAgICAgIEsgIDogUmVhbF9LZXlfQ29kZSA6PSBLZXlfTm9uZTsKKyAgICAgICAgIE4gIDogTmF0dXJhbCA6PSAwOworCisgICAgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKEYgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW4KKyAgICAgICAgIGlzCisgICAgICAgICAgICBDaCA6IENoYXJhY3RlcjsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiBQID0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBpZiBDIGluIFVzZXJfS2V5X0NvZGUnUmFuZ2UgYW5kIHRoZW4gQyA9IFFVSVQgdGhlbgorICAgICAgICAgICAgICAgaWYgRHJpdmVyIChGLCBGX1ZhbGlkYXRlX0ZpZWxkKSA9IEZvcm1fT2sgIHRoZW4KKyAgICAgICAgICAgICAgICAgIEsgOj0gS2V5X05vbmU7CisgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVsc2lmIEMgaW4gTm9ybWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgIENoIDo9IENoYXJhY3RlcidWYWwgKEMpOworICAgICAgICAgICAgICAgaWYgQ2ggPSBMRiBvciBlbHNlIENoID0gQ1IgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgRHJpdmVyIChGLCBGX1ZhbGlkYXRlX0ZpZWxkKSA9IEZvcm1fT2sgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciA6IFN0cmluZyAoMSAuLiBQb3NpdGl2ZSAoQ29sdW1ucyAtIDExKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDbWRjIDogU3RyaW5nICgxIC4uIDgpOworICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldF9CdWZmZXIgKEZsZCA9PiBGQSAoMiksIFN0ciA9PiBCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgVHJpbSAoQnVmZmVyLCBMZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIEJ1ZmZlciAoMSkgLz0gJyAnIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENtZGMgOj0gVG9fVXBwZXIgKEJ1ZmZlciAoQ21kYydSYW5nZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIEkgaW4gTGFiZWxzJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIENtZGMgPSBMYWJlbHMgKEkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgOj0gRnVuY3Rpb25fS2V5X0NvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZ1bmN0aW9uX0tleV9OdW1iZXIgKEkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgICAgZW5kIE15X0RyaXZlcjsKKworICAgICAgYmVnaW4KKyAgICAgICAgIEluX0NvbW1hbmQgOj0gVHJ1ZTsKKyAgICAgICAgIGZvciBJIGluIExhYmVsX051bWJlcidSYW5nZSBsb29wCisgICAgICAgICAgICBHZXRfU29mdF9MYWJlbF9LZXkgKEksIExhYmVscyAoSSkpOworICAgICAgICAgICAgVHJpbSAoTGFiZWxzIChJKSwgTGVmdCk7CisgICAgICAgICAgICBUcmFuc2xhdGUgKExhYmVscyAoSSksIFVwcGVyX0Nhc2VfTWFwKTsKKyAgICAgICAgICAgIGlmIExhYmVscyAoSSkgKDEpIC89ICcgJyB0aGVuCisgICAgICAgICAgICAgICBOIDo9IE4gKyAxOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICBpZiBOID4gMCB0aGVuIC0tICBzb21lIGxhYmVscyB3ZXJlIHJlYWxseSBzZXQKKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIEVudW1fSW5mbyAgICA6IEVudW1lcmF0aW9uX0luZm8gKE4pOworICAgICAgICAgICAgICAgRW51bV9GaWVsZCAgIDogRW51bWVyYXRpb25fRmllbGQ7CisgICAgICAgICAgICAgICBKIDogUG9zaXRpdmUgOj0gRW51bV9JbmZvLk5hbWVzJ0ZpcnN0OworCisgICAgICAgICAgICAgICBGcm0gOiBGb3JtIDo9IENyZWF0ZSAoRkEpOworCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgZm9yIEkgaW4gTGFiZWxfTnVtYmVyJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgICAgICAgIGlmIExhYmVscyAoSSkgKDEpIC89ICcgJyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBFbnVtX0luZm8uTmFtZXMgKEopIDo9IG5ldyBTdHJpbmcnKExhYmVscyAoSSkpOworICAgICAgICAgICAgICAgICAgICAgSiA6PSBKICsgMTsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgICAgRW51bV9GaWVsZCA6PSBDcmVhdGUgKEVudW1fSW5mbywgVHJ1ZSk7CisgICAgICAgICAgICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDIpLCBFbnVtX0ZpZWxkKTsKKyAgICAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChGQSAoMiksIE5vcm1hbF9WaWRlbyk7CisKKyAgICAgICAgICAgICAgIEZoLkRyaXZlX01lIChGcm0sIExpbmVzIC0gMywgMCk7CisgICAgICAgICAgICAgICBEZWxldGUgKEZybSk7CisgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOyBVcGRhdGVfU2NyZWVuOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgRnJlZSAoRkEsIFRydWUpOworICAgICAgICAgSW5fQ29tbWFuZCA6PSBGYWxzZTsKKyAgICAgICAgIHJldHVybiBLOworICAgICAgZW5kIENvbW1hbmQ7CisKKyAgIGJlZ2luCisgICAgICBTZXRfVGltZW91dF9Nb2RlIChXaW4sIERlbGF5ZWQsIDMwMDAwKTsKKyAgICAgIGxvb3AKKyAgICAgICAgIEsgOj0gR2V0X0tleXN0cm9rZSAoV2luKTsKKyAgICAgICAgIGlmIEsgPSBLZXlfTm9uZSB0aGVuICAtLSBhIHRpbWVvdXQgb2NjdXJlZAorICAgICAgICAgICAgVXBkYXRlX0hlYWRlcl9XaW5kb3c7CisgICAgICAgICBlbHNpZiBLID0gMyBhbmQgdGhlbiBub3QgSW5fQ29tbWFuZCAgdGhlbiAgLS0gQ1RSTC1DCisgICAgICAgICAgICBLIDo9IENvbW1hbmQ7CisgICAgICAgICAgICBleGl0IHdoZW4gSyAvPSBLZXlfTm9uZTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIHJldHVybiBLOworICAgZW5kIEdldF9LZXk7CisKKyAgIHByb2NlZHVyZSBJbml0X0tleWJvYXJkX0hhbmRsZXIgaXMKKyAgIGJlZ2luCisgICAgICBudWxsOworICAgZW5kIEluaXRfS2V5Ym9hcmRfSGFuZGxlcjsKKworZW5kIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzViMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZHMKQEAgLTAsMCArMSw1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKKy0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgYSBjZW50cmFsaXplZCBrZXlib2FyZCBoYW5kbGVyIHVzZWQgdGhyb3VnaG91dAorLS0gIHRoaXMgZXhhbXBsZS4gVGhlIGhhbmRsZXIgZXN0YWJsaXNoZXMgYSB0aW1lb3V0IG1lY2hhbmlzbSB0aGF0IHByb3ZpZGVzCistLSAgcGVyaW9kaWNhbCB1cGRhdGVzIG9mIHRoZSBjb21tb24gaGVhZGVyIGxpbmVzIHVzZWQgaW4gdGhpcyBleGFtcGxlLgorLS0KK3BhY2thZ2UgU2FtcGxlLktleWJvYXJkX0hhbmRsZXIgaXMKKworICAgZnVuY3Rpb24gR2V0X0tleSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIFJlYWxfS2V5X0NvZGU7CisgICAtLSAgVGhlIGNlbnRyYWwgcm91dGluZSBmb3IgaGFuZGxpbmcga2V5c3Ryb2tlcy4KKworICAgcHJvY2VkdXJlIEluaXRfS2V5Ym9hcmRfSGFuZGxlcjsKKyAgIC0tICBJbml0aWFsaXplIHRoZSBrZXlib2FyZAorCitlbmQgU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tYW5pZmVzdC5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tYW5pZmVzdC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3NmM0YwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1hbmlmZXN0LmFkcwpAQCAtMCwwICsxLDY3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuTWFuaWZlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKK3BhY2thZ2UgU2FtcGxlLk1hbmlmZXN0IGlzCisKKyAgIFFVSVQgICAgICAgICA6IGNvbnN0YW50IFVzZXJfS2V5X0NvZGUgICAgOj0gVXNlcl9LZXlfQ29kZSdGaXJzdDsKKyAgIFNFTEVDVF9JVEVNICA6IGNvbnN0YW50IFVzZXJfS2V5X0NvZGUgICAgOj0gUVVJVCArIDE7CisKKyAgIEZLRVlfSEVMUCAgICA6IGNvbnN0YW50IExhYmVsX051bWJlciAgICAgOj0gMTsKKyAgIEhFTFBfQ09ERSAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUgOj0gS2V5X0YxOworICAgRktFWV9FWFBMQUlOIDogY29uc3RhbnQgTGFiZWxfTnVtYmVyICAgICA6PSAyOworICAgRVhQTEFJTl9DT0RFIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZSA6PSBLZXlfRjI7CisgICBGS0VZX1FVSVQgICAgOiBjb25zdGFudCBMYWJlbF9OdW1iZXIgICAgIDo9IDM7CisgICBRVUlUX0NPREUgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlIDo9IEtleV9GMzsKKworICAgTWVudV9NYXJrZXIgOiBjb25zdGFudCBTdHJpbmcgOj0gIj0+ICI7CisKKyAgIERlZmF1bHRfQ29sb3JzICA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gMTsKKyAgIE1lbnVfRm9yZV9Db2xvciA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gMjsKKyAgIE1lbnVfQmFja19Db2xvciA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gMzsKKyAgIE1lbnVfR3JleV9Db2xvciA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gNDsKKyAgIEZvcm1fRm9yZV9Db2xvciA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gNTsKKyAgIEZvcm1fQmFja19Db2xvciA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gNjsKKyAgIE5vdGVwYWRfQ29sb3IgICA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gNzsKKyAgIEhlbHBfQ29sb3IgICAgICA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gODsKKyAgIEhlYWRlcl9Db2xvciAgICA6IGNvbnN0YW50IFJlZGVmaW5hYmxlX0NvbG9yX1BhaXIgOj0gOTsKKworZW5kIFNhbXBsZS5NYW5pZmVzdDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliMjM3YwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRiCkBAIC0wLDAgKzEsMjA0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NZW51X0RlbW8uQXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7IHVzZSBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOworCit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggU2FtcGxlLkhlbHBlcnM7IHVzZSBTYW1wbGUuSGVscGVyczsKK3dpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKK3dpdGggU2FtcGxlLkV4cGxhbmF0aW9uOyB1c2UgU2FtcGxlLkV4cGxhbmF0aW9uOworCitwYWNrYWdlIGJvZHkgU2FtcGxlLk1lbnVfRGVtby5BdXggaXMKKworICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFggIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgRnkgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgRnggOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKKworICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OyAgICAgICAgLS0gTGluZXMgdXNlZCBmb3IgbWVudQorICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247ICAgICAtLSBQcm9wb3NlZCBMaW5lIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIFggIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsgICAtLSBQcm9wb3NlZCBDb2x1bW4gZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgRnkgOiBvdXQgTGluZV9Qb3NpdGlvbjsgICAgIC0tIFZlcnRpY2FsIGlubmVyIGZyYW1lCisgICAgICAgICAgICAgICAgICAgICAgIEZ4IDogb3V0IENvbHVtbl9Qb3NpdGlvbikgICAtLSBIb3Jpei4gaW5uZXIgZnJhbWUKKyAgIGlzCisgICAgICBTcGNfRGVzYyA6IENvbHVtbl9Qb3NpdGlvbjsgLS0gc3BhY2VzIGJldHdlZW4gZGVzY3JpcHRpb24gYW5kIGl0ZW0KKyAgIGJlZ2luCisgICAgICBTZXRfTWFyayAoTSwgTWVudV9NYXJrZXIpOworCisgICAgICBTcGFjaW5nIChNLCBTcGNfRGVzYywgRnksIEZ4KTsKKyAgICAgIFNjYWxlIChNLCBMLCBDKTsKKworICAgICAgRnggOj0gRnggKyBDb2x1bW5fUG9zaXRpb24gKEZ5IC0gMSk7IC0tIGxvb2tzIGEgYml0IG5pY2VyCisKKyAgICAgIEwgOj0gTCArIDIgKiBGeTsgIC0tIGNvdW50IGZvciBmcmFtZSBhdCB0b3AgYW5kIGJvdHRvbQorICAgICAgQyA6PSBDICsgMiAqIEZ4OyAgLS0gIgorCisgICAgICAtLSAgQ2FsY3VsYXRlIGhvcml6b250YWwgY29vcmRpbmF0ZSBhdCB0aGUgc2NyZWVuIGNlbnRlcgorICAgICAgWCA6PSAoQ29sdW1ucyAtIEMpIC8gMjsKKyAgICAgIFkgOj0gMTsgIC0tIGFsd2F5cyBzdGFydGluIGxpbmUgMQorCisgICBlbmQgR2VvbWV0cnk7CisKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMIDogb3V0IExpbmVfQ291bnQ7ICAgICAgICAtLSBMaW5lcyB1c2VkIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIEMgOiBvdXQgQ29sdW1uX0NvdW50OyAgICAgIC0tIENvbHVtbnMgdXNlZCBmb3IgbWVudQorICAgICAgICAgICAgICAgICAgICAgICBZIDogb3V0IExpbmVfUG9zaXRpb247ICAgICAtLSBQcm9wb3NlZCBMaW5lIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIFggIDogb3V0IENvbHVtbl9Qb3NpdGlvbikgIC0tIFByb3Bvc2VkIENvbHVtbiBmb3IgbWVudQorICAgaXMKKyAgICAgIEZ5IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEZ4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEdlb21ldHJ5IChNLCBMLCBDLCBZLCBYLCBGeSwgRngpOworICAgZW5kIEdlb21ldHJ5OworCisgICBmdW5jdGlvbiBDcmVhdGUgKE0gICAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIExpbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBQYW5lbAorICAgaXMKKyAgICAgIFcsIFMgOiBXaW5kb3c7CisgICAgICBMIDogTGluZV9Db3VudDsKKyAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CisgICAgICBZLCBGeSA6IExpbmVfUG9zaXRpb247CisgICAgICBYLCBGeCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFBhbiA6IFBhbmVsOworICAgYmVnaW4KKyAgICAgIEdlb21ldHJ5IChNLCBMLCBDLCBZLCBYLCBGeSwgRngpOworICAgICAgVyA6PSBOZXdfV2luZG93IChMLCBDLCBMaW4sIENvbCk7CisgICAgICBTZXRfTWV0YV9Nb2RlIChXKTsKKyAgICAgIFNldF9LZXlQYWRfTW9kZSAoVyk7CisgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4gPT4gVywKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaCAgPT4gKENoICAgID0+ICcgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IE1lbnVfQmFja19Db2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbykpOworICAgICAgICAgU2V0X0ZvcmVncm91bmQgKE1lbiA9PiBNLCBDb2xvciA9PiBNZW51X0ZvcmVfQ29sb3IpOworICAgICAgICAgU2V0X0JhY2tncm91bmQgKE1lbiA9PiBNLCBDb2xvciA9PiBNZW51X0JhY2tfQ29sb3IpOworICAgICAgICAgU2V0X0dyZXkgKE1lbiA9PiBNLCBDb2xvciA9PiBNZW51X0dyZXlfQ29sb3IpOworICAgICAgICAgRXJhc2UgKFcpOworICAgICAgZW5kIGlmOworICAgICAgUyA6PSBEZXJpdmVkX1dpbmRvdyAoVywgTCAtIEZ5LCBDIC0gRngsIEZ5LCBGeCk7CisgICAgICBTZXRfTWV0YV9Nb2RlIChTKTsKKyAgICAgIFNldF9LZXlQYWRfTW9kZSAoUyk7CisgICAgICBCb3ggKFcpOworICAgICAgU2V0X1dpbmRvdyAoTSwgVyk7CisgICAgICBTZXRfU3ViX1dpbmRvdyAoTSwgUyk7CisgICAgICBpZiBUaXRsZSdMZW5ndGggPiAwIHRoZW4KKyAgICAgICAgIFdpbmRvd19UaXRsZSAoVywgVGl0bGUpOworICAgICAgZW5kIGlmOworICAgICAgUGFuIDo9IE5ld19QYW5lbCAoVyk7CisgICAgICBQb3N0IChNKTsKKyAgICAgIHJldHVybiBQYW47CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgRGVzdHJveSAoTSA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgUCA6IGluIG91dCBQYW5lbCkKKyAgIGlzCisgICAgICBXLCBTIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gR2V0X1dpbmRvdyAoTSk7CisgICAgICBTIDo9IEdldF9TdWJfV2luZG93IChNKTsKKyAgICAgIFBvc3QgKE0sIEZhbHNlKTsKKyAgICAgIEVyYXNlIChXKTsKKyAgICAgIERlbGV0ZSAoUCk7CisgICAgICBTZXRfV2luZG93IChNLCBOdWxsX1dpbmRvdyk7CisgICAgICBTZXRfU3ViX1dpbmRvdyAoTSwgTnVsbF9XaW5kb3cpOworICAgICAgRGVsZXRlIChTKTsKKyAgICAgIERlbGV0ZSAoVyk7CisgICAgICBVcGRhdGVfUGFuZWxzOworICAgZW5kIERlc3Ryb3k7CisKKyAgIGZ1bmN0aW9uIEdldF9SZXF1ZXN0IChNIDogTWVudTsgUCA6IFBhbmVsKSByZXR1cm4gS2V5X0NvZGUKKyAgIGlzCisgICAgICBXICA6IGNvbnN0YW50IFdpbmRvdyA6PSBHZXRfV2luZG93IChNKTsKKyAgICAgIEsgIDogUmVhbF9LZXlfQ29kZTsKKyAgICAgIENoIDogQ2hhcmFjdGVyOworICAgYmVnaW4KKyAgICAgIFRvcCAoUCk7CisgICAgICBsb29wCisgICAgICAgICBLIDo9IEdldF9LZXkgKFcpOworICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgIGNhc2UgSyBpcworICAgICAgICAgICAgICAgd2hlbiBIRUxQX0NPREUgICAgICAgICAgID0+IEV4cGxhaW5fQ29udGV4dDsKKyAgICAgICAgICAgICAgIHdoZW4gRVhQTEFJTl9DT0RFICAgICAgICA9PiBFeHBsYWluICgiTUVOVUtFWVMiKTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0hvbWUgICAgICAgICAgICA9PiByZXR1cm4gUkVRX0ZJUlNUX0lURU07CisgICAgICAgICAgICAgICB3aGVuIFFVSVRfQ09ERSAgICAgICAgICAgPT4gcmV0dXJuIFFVSVQ7CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfRG93biAgICAgPT4gcmV0dXJuIFJFUV9ET1dOX0lURU07CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgICAgICAgPT4gcmV0dXJuIFJFUV9VUF9JVEVNOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0xlZnQgICAgID0+IHJldHVybiBSRVFfTEVGVF9JVEVNOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1JpZ2h0ICAgID0+IHJldHVybiBSRVFfUklHSFRfSVRFTTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0VuZCAgICAgICAgICAgICA9PiByZXR1cm4gUkVRX0xBU1RfSVRFTTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0JhY2tzcGFjZSAgICAgICA9PiByZXR1cm4gUkVRX0JBQ0tfUEFUVEVSTjsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X05leHRfUGFnZSAgICAgICA9PiByZXR1cm4gUkVRX1NDUl9EUEFHRTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X1ByZXZpb3VzX1BhZ2UgICA9PiByZXR1cm4gUkVRX1NDUl9VUEFHRTsKKyAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzICAgICAgICAgICAgICA9PiByZXR1cm4gSzsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZWxzaWYgSyBpbiBOb3JtYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgQ2ggOj0gQ2hhcmFjdGVyJ1ZhbCAoSyk7CisgICAgICAgICAgICBjYXNlIENoIGlzCisgICAgICAgICAgICAgICB3aGVuIENBTiA9PiByZXR1cm4gUVVJVDsgICAgICAgICAgICAgICAgICAtLSAgQ1RSTC1YCisgICAgICAgICAgICAgICB3aGVuIFNPICA9PiByZXR1cm4gUkVRX05FWFRfSVRFTTsgICAgICAgICAtLSAgQ1RSTC1OCisgICAgICAgICAgICAgICB3aGVuIERMRSA9PiByZXR1cm4gUkVRX1BSRVZfSVRFTTsgICAgICAgICAtLSAgQ1RSTC1QCisgICAgICAgICAgICAgICB3aGVuIE5BSyA9PiByZXR1cm4gUkVRX1NDUl9VTElORTsgICAgICAgICAtLSAgQ1RSTC1VCisgICAgICAgICAgICAgICB3aGVuIEVPVCA9PiByZXR1cm4gUkVRX1NDUl9ETElORTsgICAgICAgICAtLSAgQ1RSTC1ECisgICAgICAgICAgICAgICB3aGVuIEFDSyA9PiByZXR1cm4gUkVRX1NDUl9EUEFHRTsgICAgICAgICAtLSAgQ1RSTC1GCisgICAgICAgICAgICAgICB3aGVuIFNUWCA9PiByZXR1cm4gUkVRX1NDUl9VUEFHRTsgICAgICAgICAtLSAgQ1RSTC1CCisgICAgICAgICAgICAgICB3aGVuIEVNICA9PiByZXR1cm4gUkVRX0NMRUFSX1BBVFRFUk47ICAgICAtLSAgQ1RSTC1ZCisgICAgICAgICAgICAgICB3aGVuIEJTICA9PiByZXR1cm4gUkVRX0JBQ0tfUEFUVEVSTjsgICAgICAtLSAgQ1RSTC1ICisgICAgICAgICAgICAgICB3aGVuIFNPSCA9PiByZXR1cm4gUkVRX05FWFRfTUFUQ0g7ICAgICAgICAtLSAgQ1RSTC1BCisgICAgICAgICAgICAgICB3aGVuIEVOUSA9PiByZXR1cm4gUkVRX1BSRVZfTUFUQ0g7ICAgICAgICAtLSAgQ1RSTC1FCisgICAgICAgICAgICAgICB3aGVuIERDNCA9PiByZXR1cm4gUkVRX1RPR0dMRV9JVEVNOyAgICAgICAtLSAgQ1RSTC1UCisKKyAgICAgICAgICAgICAgIHdoZW4gQ1IgfCBMRiAgPT4gcmV0dXJuIFNFTEVDVF9JVEVNOworICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgICA9PiByZXR1cm4gSzsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEs7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBHZXRfUmVxdWVzdDsKKworZW5kIFNhbXBsZS5NZW51X0RlbW8uQXV4OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRlMzhlCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKQEAgLTAsMCArMSw3MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuTWVudV9EZW1vLkF1eCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOworCitwYWNrYWdlIFNhbXBsZS5NZW51X0RlbW8uQXV4IGlzCisKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgTCAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgQyAgOiBvdXQgQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICBZICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBYICA6IG91dCBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIENhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgZm9yIGEgcGFuZWwgYmVlaW5nIGFibGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5CisgICAtLSAgdGhlIG1lbnUuCisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgTGluICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBDb2wgICA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFBhbmVsOworICAgLS0gIENyZWF0ZSBhIHBhbmVsIGRlY29yYXRlZCB3aXRoIGEgZnJhbWUgYW5kIHRoZSB0aXRsZSBhdCB0aGUgc3BlY2lmaWVkCisgICAtLSAgcG9zaXRpb24uIFRoZSBkaW1lbnNpb24gb2YgdGhlIHBhbmVsIGlzIGRlcml2ZWQgZnJvbSB0aGUgbWVudXMgbGF5b3V0LgorCisgICBwcm9jZWR1cmUgRGVzdHJveSAoTSA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgUCA6IGluIG91dCBQYW5lbCk7CisgICAtLSAgRGVzdHJveSBhbGwgdGhlIHdpbmRvd2luZyBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lbnUgYW5kCisgICAtLSAgcGFuZWwuCisKKyAgIGZ1bmN0aW9uIEdldF9SZXF1ZXN0IChNIDogTWVudTsgUCA6IFBhbmVsKSByZXR1cm4gS2V5X0NvZGU7CisgICAtLSAgQ2VudHJhbGl6ZWQgcmVxdWVzdCBkcml2ZXIgZm9yIGFsbCBtZW51cyBpbiB0aGlzIHNhbXBsZS4gVGhpcworICAgLS0gIGdpdmVzIHVzIGEgY29tbW9uIGtleSBiaW5kaW5nIGZvciBhbGwgbWVudXMuCisKK2VuZCBTYW1wbGUuTWVudV9EZW1vLkF1eDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc0N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRiCkBAIC0wLDAgKzEsMTA4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xNSAkCistLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFNhbXBsZS5NZW51X0RlbW8uQXV4Oword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7ICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKKworcGFja2FnZSBib2R5IFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciBpcworCisgICBwYWNrYWdlIEF1eCByZW5hbWVzIFNhbXBsZS5NZW51X0RlbW8uQXV4OworCisgICBwcm9jZWR1cmUgRHJpdmVfTWUgKE0gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpCisgICBpcworICAgICAgTCA6IExpbmVfQ291bnQ7CisgICAgICBDIDogQ29sdW1uX0NvdW50OworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEF1eC5HZW9tZXRyeSAoTSwgTCwgQywgWSwgWCk7CisgICAgICBEcml2ZV9NZSAoTSwgWSwgWCwgVGl0bGUpOworICAgZW5kIERyaXZlX01lOworCisgICBwcm9jZWR1cmUgRHJpdmVfTWUgKE0gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgTGluICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpCisgICBpcworICAgICAgTWFzayA6IEV2ZW50X01hc2sgOj0gTm9fRXZlbnRzOworICAgICAgT2xkICA6IEV2ZW50X01hc2s7CisgICAgICBQYW4gIDogUGFuZWwgOj0gQXV4LkNyZWF0ZSAoTSwgVGl0bGUsIExpbiwgQ29sKTsKKyAgICAgIFYgICAgOiBDdXJzb3JfVmlzaWJpbGl0eSA6PSBJbnZpc2libGU7CisgICBiZWdpbgorICAgICAgLS0gIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gQ2xpY2tzIHdpdGggdGhlIGxlZnQgYnV0dG9uCisgICAgICBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50cyAoTGVmdCwgQWxsX0NsaWNrcywgTWFzayk7CisgICAgICBPbGQgOj0gU3RhcnRfTW91c2UgKE1hc2spOworICAgICAgU2V0X0N1cnNvcl9WaXNpYmlsaXR5IChWKTsKKyAgICAgIGxvb3AKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIEsgOiBLZXlfQ29kZSA6PSBBdXguR2V0X1JlcXVlc3QgKE0sIFBhbik7CisgICAgICAgICAgICBSIDogY29uc3RhbnQgRHJpdmVyX1Jlc3VsdCA6PSBEcml2ZXIgKE0sIEspOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGNhc2UgUiBpcworICAgICAgICAgICAgICAgd2hlbiBNZW51X09rID0+IG51bGw7CisgICAgICAgICAgICAgICB3aGVuIFVua25vd25fUmVxdWVzdCA9PgorICAgICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgICAgSSA6IGNvbnN0YW50IEl0ZW0gOj0gQ3VycmVudCAoTSk7CisgICAgICAgICAgICAgICAgICAgICBPIDogSXRlbV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIGlmIEsgPSBLZXlfTW91c2UgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgSyA6PSBTRUxFQ1RfSVRFTTsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChJLCBPKTsKKyAgICAgICAgICAgICAgICAgICAgIGlmIEsgPSBTRUxFQ1RfSVRFTSBhbmQgdGhlbiBub3QgTy5TZWxlY3RhYmxlIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBNeV9Ecml2ZXIgKE0sIEssIFBhbikgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IEJlZXA7CisgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgIGVuZDsKKyAgICAgIGVuZCBsb29wOworICAgICAgRW5kX01vdXNlIChPbGQpOworICAgICAgQXV4LkRlc3Ryb3kgKE0sIFBhbik7CisgICBlbmQgRHJpdmVfTWU7CisKK2VuZCBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4MmY5ZgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcwpAQCAtMCwwICsxLDY0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7CisKK2dlbmVyaWMKKyAgIHdpdGggZnVuY3Rpb24gIE15X0RyaXZlciAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyAgIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbiA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKK3BhY2thZ2UgU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyIGlzCisKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIik7CisgICAtLSAgUG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIGdpdmVuIHBvaW50IGFuZCBkcml2ZSBpdC4KKworICAgcHJvY2VkdXJlIERyaXZlX01lIChNICAgICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIC0tICBDZW50ZXIgbWVudSBhbmQgZHJpdmUgaXQuCisKK2VuZCBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY0Njc0Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYgpAQCAtMCwwICsxLDM5NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NZW51X0RlbW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTggJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ4OjMwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGE7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuSXRlbV9Vc2VyX0RhdGE7CisKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7IHVzZSBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7Cit3aXRoIFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlcjsKK3dpdGggU2FtcGxlLkhlbHBlcnM7IHVzZSBTYW1wbGUuSGVscGVyczsKK3dpdGggU2FtcGxlLkV4cGxhbmF0aW9uOyB1c2UgU2FtcGxlLkV4cGxhbmF0aW9uOworCitwYWNrYWdlIGJvZHkgU2FtcGxlLk1lbnVfRGVtbyBpcworCisgICBwYWNrYWdlIFNwYWNpbmdfRGVtbyBpcworICAgICAgcHJvY2VkdXJlIFNwYWNpbmdfVGVzdDsKKyAgIGVuZCBTcGFjaW5nX0RlbW87CisKKyAgIHBhY2thZ2UgYm9keSBTcGFjaW5nX0RlbW8gaXMKKworICAgICAgcHJvY2VkdXJlIFNwYWNpbmdfVGVzdAorICAgICAgaXMKKyAgICAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoTSA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKKworICAgICAgICAgcHJvY2VkdXJlIFNldF9PcHRpb25fS2V5OworICAgICAgICAgcHJvY2VkdXJlIFNldF9TZWxlY3RfS2V5OworICAgICAgICAgcHJvY2VkdXJlIFNldF9EZXNjcmlwdGlvbl9LZXk7CisgICAgICAgICBwcm9jZWR1cmUgU2V0X0hpZGVfS2V5OworCisgICAgICAgICBwYWNrYWdlIE1oIGlzIG5ldyBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgKE15X0RyaXZlcik7CisKKyAgICAgICAgIEkgOiBJdGVtX0FycmF5X0FjY2VzcyA6PSBuZXcgSXRlbV9BcnJheScKKyAgICAgICAgICAgKE5ld19JdGVtICgiSmFudWFyeSIsICAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiRmVicnVhcnkiLCAgIjI4LzI5IERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiTWFyY2giLCAgICAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiQXByaWwiLCAgICAgIjMwIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiTWF5IiwgICAgICAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiSnVuZSIsICAgICAgIjMwIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiSnVseSIsICAgICAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiQXVndXN0IiwgICAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiU2VwdGVtYmVyIiwgIjMwIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiT2N0b2JlciIsICAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiTm92ZW1iZXIiLCAgIjMwIERheXMiKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiRGVjZW1iZXIiLCAgIjMxIERheXMiKSwKKyAgICAgICAgICAgIE51bGxfSXRlbSk7CisKKyAgICAgICAgIE0gOiBNZW51ICAgOj0gTmV3X01lbnUgKEkpOworICAgICAgICAgRmxpcF9TdGF0ZSA6IEJvb2xlYW4gOj0gVHJ1ZTsKKyAgICAgICAgIEhpZGVfTG9uZyAgOiBCb29sZWFuIDo9IEZhbHNlOworCisgICAgICAgICB0eXBlIEZvcm1hdF9Db2RlIGlzIChGb3VyX0J5XzEsIEZvdXJfQnlfMiwgRm91cl9CeV8zKTsKKyAgICAgICAgIHR5cGUgT3BlcmF0aW9ucyAgaXMgKEZsaXAsIFJlb3JkZXIsIFJlZm9ybWF0LCBSZXNlbGVjdCwgRGVzY3JpYmUpOworCisgICAgICAgICB0eXBlIENoYW5nZSBpcyBhcnJheSAoT3BlcmF0aW9ucykgb2YgQm9vbGVhbjsKKyAgICAgICAgIHByYWdtYSBQYWNrIChDaGFuZ2UpOworICAgICAgICAgTm9fQ2hhbmdlIDogY29uc3RhbnQgQ2hhbmdlIDo9IENoYW5nZScob3RoZXJzID0+IEZhbHNlKTsKKworICAgICAgICAgQ3VycmVudF9Gb3JtYXQgOiBGb3JtYXRfQ29kZSA6PSBGb3VyX0J5XzE7CisgICAgICAgICBUb19DaGFuZ2UgOiBDaGFuZ2UgOj0gTm9fQ2hhbmdlOworCisgICAgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKE0gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW4KKyAgICAgICAgIGlzCisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgTSA9IE51bGxfTWVudSB0aGVuCisgICAgICAgICAgICAgICByYWlzZSBNZW51X0V4Y2VwdGlvbjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGlmIFAgPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIFRvX0NoYW5nZSA6PSBOb19DaGFuZ2U7CisgICAgICAgICAgICBpZiBLIGluIFVzZXJfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgaWYgSyA9IFFVSVQgdGhlbgorICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GNCA9PgorICAgICAgICAgICAgICAgICAgICAgVG9fQ2hhbmdlIChGbGlwKSA6PSBUcnVlOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GNSA9PgorICAgICAgICAgICAgICAgICAgICAgVG9fQ2hhbmdlIChSZWZvcm1hdCkgIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICBDdXJyZW50X0Zvcm1hdCA6PSBGb3VyX0J5XzE7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHdoZW4gS2V5X0Y2ID0+CisgICAgICAgICAgICAgICAgICAgICBUb19DaGFuZ2UgKFJlZm9ybWF0KSAgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRfRm9ybWF0IDo9IEZvdXJfQnlfMjsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfRjcgPT4KKyAgICAgICAgICAgICAgICAgICAgIFRvX0NoYW5nZSAoUmVmb3JtYXQpICA6PSBUcnVlOworICAgICAgICAgICAgICAgICAgICAgQ3VycmVudF9Gb3JtYXQgOj0gRm91cl9CeV8zOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GOCA9PgorICAgICAgICAgICAgICAgICAgICAgVG9fQ2hhbmdlIChSZW9yZGVyKSA6PSBUcnVlOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GOSA9PgorICAgICAgICAgICAgICAgICAgICAgVG9fQ2hhbmdlIChSZXNlbGVjdCkgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfRjEwID0+CisgICAgICAgICAgICAgICAgICAgICBpZiBDdXJyZW50X0Zvcm1hdCAvPSBGb3VyX0J5XzMgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgVG9fQ2hhbmdlIChEZXNjcmliZSkgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfRjExID0+CisgICAgICAgICAgICAgICAgICAgICBIaWRlX0xvbmcgOj0gbm90IEhpZGVfTG9uZzsKKyAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIE8gOiBJdGVtX09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIEogaW4gSSdSYW5nZSBsb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRfT3B0aW9ucyAoSSAoSiksIE8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTy5TZWxlY3RhYmxlIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBIaWRlX0xvbmcgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIDEgfCAzIHwgNSB8IDcgfCA4IHwgMTAgfCAxMiA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTy5TZWxlY3RhYmxlIDo9IEZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0X09wdGlvbnMgKEkgKEopLCBPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gbnVsbDsKKyAgICAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgICAgZW5kIE15X0RyaXZlcjsKKworICAgICAgICAgcHJvY2VkdXJlIFNldF9PcHRpb25fS2V5CisgICAgICAgICBpcworICAgICAgICAgICAgTyA6IE1lbnVfT3B0aW9uX1NldDsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiBDdXJyZW50X0Zvcm1hdCA9IEZvdXJfQnlfMSB0aGVuCisgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDgsICIiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChNLCBPKTsKKyAgICAgICAgICAgICAgIGlmIE8uUm93X01ham9yX09yZGVyIHRoZW4KKyAgICAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoOCwgIk8tQ29sIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDgsICJPLVJvdyIpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisgICAgICAgICBlbmQgU2V0X09wdGlvbl9LZXk7CisKKyAgICAgICAgIHByb2NlZHVyZSBTZXRfU2VsZWN0X0tleQorICAgICAgICAgaXMKKyAgICAgICAgICAgIE8gOiBNZW51X09wdGlvbl9TZXQ7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgR2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgaWYgTy5PbmVfVmFsdWVkIHRoZW4KKyAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoOSwgIk11bHRpIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDksICJTaW5nbCIpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisgICAgICAgICBlbmQgU2V0X1NlbGVjdF9LZXk7CisKKyAgICAgICAgIHByb2NlZHVyZSBTZXRfRGVzY3JpcHRpb25fS2V5CisgICAgICAgICBpcworICAgICAgICAgICAgTyA6IE1lbnVfT3B0aW9uX1NldDsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiBDdXJyZW50X0Zvcm1hdCA9IEZvdXJfQnlfMyB0aGVuCisgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDEwLCAiIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBHZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICAgICBpZiBPLlNob3dfRGVzY3JpcHRpb25zIHRoZW4KKyAgICAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoMTAsICItRGVzYyIpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICgxMCwgIitEZXNjIik7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgICAgICAgIGVuZCBTZXRfRGVzY3JpcHRpb25fS2V5OworCisgICAgICAgICBwcm9jZWR1cmUgU2V0X0hpZGVfS2V5CisgICAgICAgICBpcworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIEhpZGVfTG9uZyB0aGVuCisgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDExLCAiRW5hYiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICgxMSwgIkRpc2FiIik7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgICAgICAgIGVuZCBTZXRfSGlkZV9LZXk7CisKKyAgICAgIGJlZ2luCisgICAgICAgICBQdXNoX0Vudmlyb25tZW50ICgiTUVOVTAxIik7CisgICAgICAgICBOb3RlcGFkICgiTUVOVS1QQUQwMSIpOworICAgICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDQsICJGbGlwIik7CisgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDUsICI0eDEiKTsKKyAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoNiwgIjR4MiIpOworICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICg3LCAiNHgzIik7CisgICAgICAgICBTZXRfT3B0aW9uX0tleTsKKyAgICAgICAgIFNldF9TZWxlY3RfS2V5OworICAgICAgICAgU2V0X0Rlc2NyaXB0aW9uX0tleTsKKyAgICAgICAgIFNldF9IaWRlX0tleTsKKworICAgICAgICAgU2V0X0Zvcm1hdCAoTSwgNCwgMSk7CisgICAgICAgICBsb29wCisgICAgICAgICAgICBNaC5Ecml2ZV9NZSAoTSk7CisgICAgICAgICAgICBleGl0IHdoZW4gVG9fQ2hhbmdlID0gTm9fQ2hhbmdlOworICAgICAgICAgICAgaWYgVG9fQ2hhbmdlIChGbGlwKSB0aGVuCisgICAgICAgICAgICAgICBpZiBGbGlwX1N0YXRlIHRoZW4KKyAgICAgICAgICAgICAgICAgIEZsaXBfU3RhdGUgOj0gRmFsc2U7CisgICAgICAgICAgICAgICAgICBTZXRfU3BhY2luZyAoTSwgMywgMiwgMCk7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBGbGlwX1N0YXRlIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICBTZXRfU3BhY2luZyAoTSk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbHNpZiBUb19DaGFuZ2UgKFJlZm9ybWF0KSB0aGVuCisgICAgICAgICAgICAgICBjYXNlIEN1cnJlbnRfRm9ybWF0IGlzCisgICAgICAgICAgICAgICAgICB3aGVuIEZvdXJfQnlfMSA9PiBTZXRfRm9ybWF0IChNLCA0LCAxKTsKKyAgICAgICAgICAgICAgICAgIHdoZW4gRm91cl9CeV8yID0+IFNldF9Gb3JtYXQgKE0sIDQsIDIpOworICAgICAgICAgICAgICAgICAgd2hlbiBGb3VyX0J5XzMgPT4KKyAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIE8gOiBNZW51X09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgICAgICAgTy5TaG93X0Rlc2NyaXB0aW9ucyA6PSBGYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldF9PcHRpb25zIChNLCBPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldF9Gb3JtYXQgKE0sIDQsIDMpOworICAgICAgICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICAgICBTZXRfT3B0aW9uX0tleTsKKyAgICAgICAgICAgICAgIFNldF9EZXNjcmlwdGlvbl9LZXk7CisgICAgICAgICAgICBlbHNpZiBUb19DaGFuZ2UgKFJlb3JkZXIpIHRoZW4KKyAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgIE8gOiBNZW51X09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgTy5Sb3dfTWFqb3JfT3JkZXIgOj0gbm90IE8uUm93X01ham9yX09yZGVyOworICAgICAgICAgICAgICAgICAgU2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgU2V0X09wdGlvbl9LZXk7CisgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICBlbHNpZiBUb19DaGFuZ2UgKFJlc2VsZWN0KSB0aGVuCisgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICBPIDogTWVudV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChNLCBPKTsKKyAgICAgICAgICAgICAgICAgIE8uT25lX1ZhbHVlZCA6PSBub3QgTy5PbmVfVmFsdWVkOworICAgICAgICAgICAgICAgICAgU2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgU2V0X1NlbGVjdF9LZXk7CisgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICBlbHNpZiBUb19DaGFuZ2UgKERlc2NyaWJlKSB0aGVuCisgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICBPIDogTWVudV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChNLCBPKTsKKyAgICAgICAgICAgICAgICAgIE8uU2hvd19EZXNjcmlwdGlvbnMgOj0gbm90IE8uU2hvd19EZXNjcmlwdGlvbnM7CisgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICAgICAgICBTZXRfRGVzY3JpcHRpb25fS2V5OworICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgbnVsbDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgU2V0X1NwYWNpbmcgKE0pOworCisgICAgICAgICBQb3BfRW52aXJvbm1lbnQ7CisgICAgICAgICBwcmFnbWEgQXNzZXJ0IChHZXRfSW5kZXggKEl0ZW1zIChNLCAxKSkgPSBHZXRfSW5kZXggKEkgKDEpKSk7CisgICAgICAgICBEZWxldGUgKE0pOworICAgICAgICAgRnJlZSAoSSwgVHJ1ZSk7CisgICAgICBlbmQgU3BhY2luZ19UZXN0OworICAgZW5kIFNwYWNpbmdfRGVtbzsKKworICAgcHJvY2VkdXJlIERlbW8KKyAgIGlzCisgICAgICAtLSAgV2UgdXNlIHRoaXMgZGF0YXR5cGUgb25seSB0byB0ZXN0IHRoZSBpbnN0YW50aWF0aW9uIG9mCisgICAgICAtLSAgdGhlIE1lbnVfVXNlcl9EYXRhIGdlbmVyaWMgcGFja2FnZS4gTm8gZnVuY3Rpb25hbGl0eQorICAgICAgLS0gIGJlaGluZCBpdC4KKyAgICAgIHR5cGUgVXNlcl9EYXRhIGlzIG5ldyBJbnRlZ2VyOworICAgICAgdHlwZSBVc2VyX0RhdGFfQWNjZXNzIGlzIGFjY2VzcyBVc2VyX0RhdGE7CisKKyAgICAgIC0tICBUaG9zZSBwYWNrYWdlcyBhcmUgb25seSBpbnN0YW50aWF0ZWQgdG8gdGVzdCB0aGUgdXNhYmlsaXR5LgorICAgICAgLS0gIE5vIHJlYWwgZnVuY3Rpb25hbGl0eSBpcyBzaG93biBpbiB0aGUgZGVtby4KKyAgICAgIHBhY2thZ2UgTVVEIGlzIG5ldyBNZW51X1VzZXJfRGF0YSAoVXNlcl9EYXRhLCBVc2VyX0RhdGFfQWNjZXNzKTsKKyAgICAgIHBhY2thZ2UgSVVEIGlzIG5ldyBJdGVtX1VzZXJfRGF0YSAoVXNlcl9EYXRhLCBVc2VyX0RhdGFfQWNjZXNzKTsKKworICAgICAgZnVuY3Rpb24gTXlfRHJpdmVyIChNIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICBQIDogUGFuZWwpIHJldHVybiBCb29sZWFuOworCisgICAgICBwYWNrYWdlIE1oIGlzIG5ldyBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgKE15X0RyaXZlcik7CisKKyAgICAgIEl0bSA6IEl0ZW1fQXJyYXlfQWNjZXNzIDo9IG5ldyBJdGVtX0FycmF5JworICAgICAgICAoTmV3X0l0ZW0gKCJNZW51IExheW91dCBPcHRpb25zIiksCisgICAgICAgICBOZXdfSXRlbSAoIkRlbW8gb2YgSG9vayBmdW5jdGlvbnMiKSwKKyAgICAgICAgIE51bGxfSXRlbSk7CisgICAgICBNIDogTWVudSA6PSBOZXdfTWVudSAoSXRtKTsKKworICAgICAgVTEgOiBjb25zdGFudCBVc2VyX0RhdGFfQWNjZXNzIDo9IG5ldyBVc2VyX0RhdGEnKDQ3MTEpOworICAgICAgVTIgOiBVc2VyX0RhdGFfQWNjZXNzOworICAgICAgVTMgOiBjb25zdGFudCBVc2VyX0RhdGFfQWNjZXNzIDo9IG5ldyBVc2VyX0RhdGEnKDQ3MTIpOworICAgICAgVTQgOiBVc2VyX0RhdGFfQWNjZXNzOworCisgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKE0gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW4KKyAgICAgIGlzCisgICAgICAgICBJZHggICA6IGNvbnN0YW50IFBvc2l0aXZlIDo9IEdldF9JbmRleCAoQ3VycmVudCAoTSkpOworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIEsgaW4gVXNlcl9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICBpZiBLID0gUVVJVCB0aGVuCisgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgIGVsc2lmIEsgPSBTRUxFQ1RfSVRFTSB0aGVuCisgICAgICAgICAgICAgICBpZiBJZHggaW4gSXRtJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgICAgIEhpZGUgKFApOworICAgICAgICAgICAgICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGNhc2UgSWR4IGlzCisgICAgICAgICAgICAgICAgICB3aGVuIDEgPT4gU3BhY2luZ19EZW1vLlNwYWNpbmdfVGVzdDsKKyAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IE5vdF9JbXBsZW1lbnRlZDsKKyAgICAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgICAgICAgaWYgSWR4IGluIEl0bSdSYW5nZSB0aGVuCisgICAgICAgICAgICAgICAgICBUb3AgKFApOworICAgICAgICAgICAgICAgICAgU2hvdyAoUCk7CisgICAgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBNeV9Ecml2ZXI7CisgICBiZWdpbgorICAgICAgUHVzaF9FbnZpcm9ubWVudCAoIk1FTlUwMCIpOworICAgICAgTm90ZXBhZCAoIk1FTlUtUEFEMDAiKTsKKyAgICAgIERlZmF1bHRfTGFiZWxzOworICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisgICAgICBTZXRfUGFkX0NoYXJhY3RlciAoTSwgJ3wnKTsKKworICAgICAgTVVELlNldF9Vc2VyX0RhdGEgKE0sIFUxKTsKKyAgICAgIElVRC5TZXRfVXNlcl9EYXRhIChJdG0gKDEpLCBVMyk7CisKKyAgICAgIE1oLkRyaXZlX01lIChNKTsKKworICAgICAgTVVELkdldF9Vc2VyX0RhdGEgKE0sIFUyKTsKKyAgICAgIHByYWdtYSBBc3NlcnQgKFUxID0gVTIgYW5kIFUxLmFsbCA9IDQ3MTEpOworCisgICAgICBJVUQuR2V0X1VzZXJfRGF0YSAoSXRtICgxKSwgVTQpOworICAgICAgcHJhZ21hIEFzc2VydCAoVTMgPSBVNCBhbmQgVTMuYWxsID0gNDcxMik7CisKKyAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgIERlbGV0ZSAoTSk7CisgICAgICBGcmVlIChJdG0sIFRydWUpOworICAgZW5kIERlbW87CisKK2VuZCBTYW1wbGUuTWVudV9EZW1vOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3MWFmYwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby5hZHMKQEAgLTAsMCArMSw0NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NZW51X0RlbW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgU2FtcGxlLk1lbnVfRGVtbyBpcworCisgICBwcm9jZWR1cmUgRGVtbzsKKworZW5kIFNhbXBsZS5NZW51X0RlbW87CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1teV9maWVsZF90eXBlLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZDZmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1teV9maWVsZF90eXBlLmFkYgpAQCAtMCwwICsxLDY4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLk15X0ZpZWxkX1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6NTggJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tICBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgdXNlciBkZWZpbmVkIGZpZWxkIHR5cGUuIEl0IGFjY2VwdHMgb25seSBhCistLSAgZGVmaW5lZCBjaGFyYWN0ZXIgYXMgaW5wdXQgaW50byB0aGUgZmllbGQuCistLQorcGFja2FnZSBib2R5IFNhbXBsZS5NeV9GaWVsZF9UeXBlIGlzCisKKyAgIC0tICBUaGF0J3Mgc2ltcGxlLiBUaGVyZSBhcmUgbWluaW1hbCBmaWVsZCB2YWxpZGl0eSBjaGVja3MuCisgICBmdW5jdGlvbiBGaWVsZF9DaGVjayAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogTXlfRGF0YSkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgRmxkID0gTnVsbF9GaWVsZCBvciBUeXAuQ2ggPSBDaGFyYWN0ZXInVmFsICgwKSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gVHJ1ZTsKKyAgIGVuZCBGaWVsZF9DaGVjazsKKworICAgLS0gIENoZWNrIGV4YWN0bHkgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KKyAgIGZ1bmN0aW9uIENoYXJhY3Rlcl9DaGVjayAoQ2ggIDogQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBNeV9EYXRhKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIEMgOiBjb25zdGFudCBDaGFyYWN0ZXIgOj0gVHlwLkNoOworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaCA9IEM7CisgICBlbmQgQ2hhcmFjdGVyX0NoZWNrOworCitlbmQgU2FtcGxlLk15X0ZpZWxkX1R5cGU7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1teV9maWVsZF90eXBlLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjM2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1teV9maWVsZF90eXBlLmFkcwpAQCAtMCwwICsxLDYxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLk15X0ZpZWxkX1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlcjsKK3VzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXI7CisKKy0tICBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgdXNlciBkZWZpbmVkIGZpZWxkIHR5cGUuIEl0IGFjY2VwdHMgb25seSBhCistLSAgZGVmaW5lZCBjaGFyYWN0ZXIgYXMgaW5wdXQgaW50byB0aGUgZmllbGQuCistLQorcGFja2FnZSBTYW1wbGUuTXlfRmllbGRfVHlwZSBpcworCisgICB0eXBlIE15X0RhdGEgaXMgbmV3IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIHdpdGgKKyAgICAgIHJlY29yZAorICAgICAgICBDaCA6IENoYXJhY3RlcjsKKyAgICAgIGVuZCByZWNvcmQ7CisKKyAgIGZ1bmN0aW9uIEZpZWxkX0NoZWNrIChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgVHlwICA6IE15X0RhdGEpIHJldHVybiBCb29sZWFuOworCisgICBmdW5jdGlvbiBDaGFyYWN0ZXJfQ2hlY2sgKENoICA6IENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogTXlfRGF0YSkgcmV0dXJuIEJvb2xlYW47CisKK2VuZCBTYW1wbGUuTXlfRmllbGRfVHlwZTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMzg1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRiCkBAIC0wLDAgKzEsMTgxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5UZXh0X0lPX0RlbW8gICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5OdW1lcmljcy5HZW5lcmljX0VsZW1lbnRhcnlfRnVuY3Rpb25zOword2l0aCBBZGEuTnVtZXJpY3MuQ29tcGxleF9UeXBlczsKK3VzZSAgQWRhLk51bWVyaWNzLkNvbXBsZXhfVHlwZXM7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTzsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uTW9kdWxhcl9JTzsKKword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsgdXNlIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKK3dpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKK3dpdGggU2FtcGxlLkV4cGxhbmF0aW9uOyB1c2UgU2FtcGxlLkV4cGxhbmF0aW9uOworCitwYWNrYWdlIGJvZHkgU2FtcGxlLlRleHRfSU9fRGVtbyBpcworCisgICB0eXBlIFdlZWtkYXkgaXMgKFN1bmRheSwKKyAgICAgICAgICAgICAgICAgICAgTW9uZGF5LAorICAgICAgICAgICAgICAgICAgICBUdWVzZGF5LAorICAgICAgICAgICAgICAgICAgICBXZWRuZXNkYXksCisgICAgICAgICAgICAgICAgICAgIFRodXJzZGF5LAorICAgICAgICAgICAgICAgICAgICBGcmlkYXksCisgICAgICAgICAgICAgICAgICAgIFNhdHVyZGF5KTsKKworICAgdHlwZSBGaXggaXMgZGVsdGEgMC4xIHJhbmdlIDAuMCAuLiA0LjA7CisgICB0eXBlIERlYyBpcyBkZWx0YSAwLjAxIGRpZ2l0cyA1IHJhbmdlIDAuMCAuLiA0LjA7CisgICB0eXBlIE1kIGlzIG1vZCA1OworCisgICBwYWNrYWdlIE1hdGggaXMgbmV3CisgICAgIEFkYS5OdW1lcmljcy5HZW5lcmljX0VsZW1lbnRhcnlfRnVuY3Rpb25zIChGbG9hdCk7CisKKyAgIHBhY2thZ2UgSW50X0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTyAoSW50ZWdlcik7CisgICB1c2UgSW50X0lPOworCisgICBwYWNrYWdlIFJlYWxfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTyAoRmxvYXQpOworICAgdXNlIFJlYWxfSU87CisKKyAgIHBhY2thZ2UgRW51bV9JTyBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPIChXZWVrZGF5KTsKKyAgIHVzZSBFbnVtX0lPOworCisgICBwYWNrYWdlIENfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPIChBZGEuTnVtZXJpY3MuQ29tcGxleF9UeXBlcyk7CisgICB1c2UgQ19JTzsKKworICAgcGFja2FnZSBGX0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU8gKEZpeCk7CisgICB1c2UgRl9JTzsKKworICAgcGFja2FnZSBEX0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRGVjaW1hbF9JTyAoRGVjKTsKKyAgIHVzZSBEX0lPOworCisgICBwYWNrYWdlIE1fSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPIChNZCk7CisgICB1c2UgTV9JTzsKKworICAgcHJvY2VkdXJlIERlbW8KKyAgIGlzCisgICAgICBXIDogV2luZG93OworICAgICAgUCA6IFBhbmVsIDo9IENyZWF0ZSAoU3RhbmRhcmRfV2luZG93KTsKKyAgICAgIEsgOiBSZWFsX0tleV9Db2RlOworICAgICAgSW0gOiBjb25zdGFudCBDb21wbGV4IDo9ICgwLjAsIDEuMCk7CisgICAgICBGeCA6IGNvbnN0YW50IERlYyA6PSAzLjE0OworICAgICAgRGMgOiBjb25zdGFudCBEZWMgOj0gMi43MjsKKyAgICAgIEwgOiBNZDsKKworICAgYmVnaW4KKyAgICAgIFB1c2hfRW52aXJvbm1lbnQgKCJURVhUSU8iKTsKKyAgICAgIERlZmF1bHRfTGFiZWxzOworICAgICAgTm90ZXBhZCAoIlRFWFRJTy1QQUQwMCIpOworCisgICAgICBTZXRfRWNob19Nb2RlIChGYWxzZSk7CisgICAgICBTZXRfTWV0YV9Nb2RlOworICAgICAgU2V0X0tleVBhZF9Nb2RlOworICAgICAgVyA6PSBTdWJfV2luZG93IChTdGFuZGFyZF9XaW5kb3csIExpbmVzIC0gMiwgQ29sdW1ucyAtIDIsIDEsIDEpOworICAgICAgQm94OworICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKKyAgICAgIFNldF9NZXRhX01vZGUgKFcpOworICAgICAgU2V0X0tleVBhZF9Nb2RlIChXKTsKKyAgICAgIEltbWVkaWF0ZV9VcGRhdGVfTW9kZSAoVywgVHJ1ZSk7CisKKyAgICAgIFNldF9XaW5kb3cgKFcpOworCisgICAgICBmb3IgSSBpbiAxIC4uIDEwIGxvb3AKKyAgICAgICAgIFB1dCAoIlNxdWFyZSByb290IG9mICIpOworICAgICAgICAgUHV0IChJdGVtID0+IEksIFdpZHRoID0+IDUpOworICAgICAgICAgUHV0ICgiIGlzICIpOworICAgICAgICAgUHV0IChJdGVtID0+IE1hdGguU3FydCAoRmxvYXQgKEkpKSwgRXhwID0+IDAsIEFmdCA9PiA3KTsKKyAgICAgICAgIE5ld19MaW5lOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIGZvciBXIGluIFdlZWtkYXkgbG9vcAorICAgICAgICAgUHV0IChJdGVtID0+IFcpOyBQdXQgKCcgJyk7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIE5ld19MaW5lOworCisgICAgICBMIDo9IE1kJ0ZpcnN0OworICAgICAgZm9yIEkgaW4gMSAuLiAyIGxvb3AKKyAgICAgICAgIGZvciBKIGluIE1kJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgIFB1dCAoTCk7IFB1dCAoJyAnKTsKKyAgICAgICAgICAgIEwgOj0gTCArIDE7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBsb29wOworICAgICAgTmV3X0xpbmU7CisKKyAgICAgIFB1dCAoSW0pOyBOZXdfTGluZTsKKyAgICAgIFB1dCAoRngpOyBOZXdfTGluZTsKKyAgICAgIFB1dCAoRGMpOyBOZXdfTGluZTsKKworICAgICAgbG9vcAorICAgICAgICAgSyA6PSBHZXRfS2V5OworICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgIGNhc2UgSyBpcworICAgICAgICAgICAgICAgd2hlbiBRVUlUX0NPREUgICAgID0+IGV4aXQ7CisgICAgICAgICAgICAgICB3aGVuIEhFTFBfQ09ERSAgICAgPT4gRXhwbGFpbl9Db250ZXh0OworICAgICAgICAgICAgICAgd2hlbiBFWFBMQUlOX0NPREUgID0+IEV4cGxhaW4gKCJURVhUSU9LRVlTIik7CisgICAgICAgICAgICAgICB3aGVuIG90aGVycyAgICAgICAgPT4gbnVsbDsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIFNldF9XaW5kb3cgKE51bGxfV2luZG93KTsKKyAgICAgIEVyYXNlOyBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworICAgICAgRGVsZXRlIChQKTsKKyAgICAgIERlbGV0ZSAoVyk7CisKKyAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgIGVuZCBEZW1vOworCitlbmQgU2FtcGxlLlRleHRfSU9fRGVtbzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRzCkBAIC0wLDAgKzEsNDUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLlRleHRfSU9fRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFNhbXBsZS5UZXh0X0lPX0RlbW8gaXMKKworICAgcHJvY2VkdXJlIERlbW87CisKK2VuZCBTYW1wbGUuVGV4dF9JT19EZW1vOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ODAzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZGIKQEAgLTAsMCArMSwyMjAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE3ICQKKy0tICAkRGF0ZTogMjAwOC8wOS8yNyAxNDo0Mjo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGV4dF9JTzsKKword2l0aCBBZGEuRXhjZXB0aW9uczsgdXNlIEFkYS5FeGNlcHRpb25zOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YTsKKword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsgdXNlIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKK3dpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKK3dpdGggU2FtcGxlLkhlYWRlcl9IYW5kbGVyOyB1c2UgU2FtcGxlLkhlYWRlcl9IYW5kbGVyOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3dpdGggU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyOword2l0aCBTYW1wbGUuQ3Vyc2VzX0RlbW87Cit3aXRoIFNhbXBsZS5Gb3JtX0RlbW87Cit3aXRoIFNhbXBsZS5NZW51X0RlbW87Cit3aXRoIFNhbXBsZS5UZXh0X0lPX0RlbW87CisKK3dpdGggR05BVC5PU19MaWI7CisKK3BhY2thZ2UgYm9keSBTYW1wbGUgaXMKKworICAgdHlwZSBVc2VyX0RhdGEgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgRGF0YSA6IEludGVnZXI7CisgICAgICBlbmQgcmVjb3JkOworICAgdHlwZSBVc2VyX0FjY2VzcyBpcyBhY2Nlc3MgVXNlcl9EYXRhOworCisgICBwYWNrYWdlIFVkIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhCisgICAgIChVc2VyX0RhdGEsIFVzZXJfQWNjZXNzKTsKKworICAgcGFja2FnZSBJZCBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YQorICAgICAoVXNlcl9EYXRhLCBVc2VyX0FjY2Vzcyk7CisKKyAgIHByb2NlZHVyZSBXaG93IGlzCisgICAgICBwcm9jZWR1cmUgTWFpbl9NZW51OworICAgICAgcHJvY2VkdXJlIE1haW5fTWVudQorICAgICAgaXMKKyAgICAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoTSA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuOworCisgICAgICAgICBwYWNrYWdlIE1oIGlzIG5ldyBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgKE15X0RyaXZlcik7CisKKyAgICAgICAgIEkgOiBJdGVtX0FycmF5X0FjY2VzcyA6PSBuZXcgSXRlbV9BcnJheScKKyAgICAgICAgICAgKE5ld19JdGVtICgiQ3Vyc2VzIENvcmUgRGVtbyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJNZW51IERlbW8iKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiRm9ybSBEZW1vIiksCisgICAgICAgICAgICBOZXdfSXRlbSAoIlRleHQgSU8gRGVtbyIpLAorICAgICAgICAgICAgTnVsbF9JdGVtKTsKKworICAgICAgICAgTSA6IE1lbnUgOj0gTmV3X01lbnUgKEkpOworCisgICAgICAgICBEMSwgRDIgOiBVc2VyX0FjY2VzczsKKyAgICAgICAgIEkxLCBJMiA6IFVzZXJfQWNjZXNzOworCisgICAgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKE0gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbiA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbgorICAgICAgICAgaXMKKyAgICAgICAgICAgIElkeCA6IGNvbnN0YW50IFBvc2l0aXZlIDo9IEdldF9JbmRleCAoQ3VycmVudCAoTSkpOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIEsgaW4gVXNlcl9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICAgICBpZiBLID0gUVVJVCB0aGVuCisgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgIGVsc2lmIEsgPSBTRUxFQ1RfSVRFTSB0aGVuCisgICAgICAgICAgICAgICAgICBpZiBJZHggPD0gNCB0aGVuCisgICAgICAgICAgICAgICAgICAgICBIaWRlIChQYW4pOworICAgICAgICAgICAgICAgICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgSWR4IGlzCisgICAgICAgICAgICAgICAgICAgICB3aGVuIDEgPT4gU2FtcGxlLkN1cnNlc19EZW1vLkRlbW87CisgICAgICAgICAgICAgICAgICAgICB3aGVuIDIgPT4gU2FtcGxlLk1lbnVfRGVtby5EZW1vOworICAgICAgICAgICAgICAgICAgICAgd2hlbiAzID0+IFNhbXBsZS5Gb3JtX0RlbW8uRGVtbzsKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gNCA9PiBTYW1wbGUuVGV4dF9JT19EZW1vLkRlbW87CisgICAgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOworICAgICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICAgICAgICBpZiBJZHggPD0gNCB0aGVuCisgICAgICAgICAgICAgICAgICAgICBUb3AgKFBhbik7CisgICAgICAgICAgICAgICAgICAgICBTaG93IChQYW4pOworICAgICAgICAgICAgICAgICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZV9TY3JlZW47CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICBlbmQgTXlfRHJpdmVyOworCisgICAgICBiZWdpbgorCisgICAgICAgICBpZiAoMSArIEl0ZW1fQ291bnQgKE0pKSAvPSBJJ0xlbmd0aCB0aGVuCisgICAgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBEMSA6PSBuZXcgVXNlcl9EYXRhJyhEYXRhID0+IDQ3MTEpOworICAgICAgICAgVWQuU2V0X1VzZXJfRGF0YSAoTSwgRDEpOworCisgICAgICAgICBJMSA6PSBuZXcgVXNlcl9EYXRhJyhEYXRhID0+IDExNzQpOworICAgICAgICAgSWQuU2V0X1VzZXJfRGF0YSAoSSAoMSksIEkxKTsKKworICAgICAgICAgU2V0X1NwYWNpbmcgKE1lbiA9PiBNLCBSb3cgPT4gMik7CisKKyAgICAgICAgIERlZmF1bHRfTGFiZWxzOworICAgICAgICAgTm90ZXBhZCAoIk1BSU5QQUQiKTsKKworICAgICAgICAgTWguRHJpdmVfTWUgKE0sICIgRGVtbyAiKTsKKworICAgICAgICAgVWQuR2V0X1VzZXJfRGF0YSAoTSwgRDIpOworICAgICAgICAgcHJhZ21hIEFzc2VydCAoRDEgPSBEMik7CisgICAgICAgICBwcmFnbWEgQXNzZXJ0IChEMS5EYXRhID0gRDIuRGF0YSk7CisKKyAgICAgICAgIElkLkdldF9Vc2VyX0RhdGEgKEkgKDEpLCBJMik7CisgICAgICAgICBwcmFnbWEgQXNzZXJ0IChJMSA9IEkyKTsKKyAgICAgICAgIHByYWdtYSBBc3NlcnQgKEkxLkRhdGEgPSBJMi5EYXRhKTsKKworICAgICAgICAgRGVsZXRlIChNKTsKKyAgICAgICAgIEZyZWUgKEksIFRydWUpOworICAgICAgZW5kIE1haW5fTWVudTsKKworICAgYmVnaW4KKyAgICAgIEluaXRpYWxpemUgKFBDX1N0eWxlX1dpdGhfSW5kZXgpOworICAgICAgSW5pdF9IZWFkZXJfSGFuZGxlcjsKKyAgICAgIEluaXRfU2NyZWVuOworCisgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIFN0YXJ0X0NvbG9yOworCisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gRGVmYXVsdF9Db2xvcnMsICBGb3JlID0+IEJsYWNrLCAgIEJhY2sgPT4gV2hpdGUpOworICAgICAgICAgSW5pdF9QYWlyIChQYWlyID0+IE1lbnVfQmFja19Db2xvciwgRm9yZSA9PiBCbGFjaywgICBCYWNrID0+IEN5YW4pOworICAgICAgICAgSW5pdF9QYWlyIChQYWlyID0+IE1lbnVfRm9yZV9Db2xvciwgRm9yZSA9PiBSZWQsICAgICBCYWNrID0+IEN5YW4pOworICAgICAgICAgSW5pdF9QYWlyIChQYWlyID0+IE1lbnVfR3JleV9Db2xvciwgRm9yZSA9PiBXaGl0ZSwgICBCYWNrID0+IEN5YW4pOworICAgICAgICAgSW5pdF9QYWlyIChQYWlyID0+IE5vdGVwYWRfQ29sb3IsICAgRm9yZSA9PiBCbGFjaywgICBCYWNrID0+IFllbGxvdyk7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gSGVscF9Db2xvciwgICAgICBGb3JlID0+IEJsdWUsICAgIEJhY2sgPT4gQ3lhbik7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gRm9ybV9CYWNrX0NvbG9yLCBGb3JlID0+IEJsYWNrLCAgIEJhY2sgPT4gQ3lhbik7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gRm9ybV9Gb3JlX0NvbG9yLCBGb3JlID0+IFJlZCwgICAgIEJhY2sgPT4gQ3lhbik7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gSGVhZGVyX0NvbG9yLCAgICBGb3JlID0+IEJsYWNrLCAgIEJhY2sgPT4gR3JlZW4pOworCisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gKENvbG9yID0+IERlZmF1bHRfQ29sb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICAgID0+ICcgJykpOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IERlZmF1bHRfQ29sb3JzKTsKKyAgICAgICAgIEVyYXNlOworCisgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyAoQ29sb3IgPT4gSGVhZGVyX0NvbG9yKTsKKyAgICAgICAgIC0tICBUaGlzIHByb3BhZ2F0ZXMgdGhlIGF0dHJpYnV0ZXMgdG8gdGhlIGxhYmVsIHdpbmRvdworICAgICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXM7CisgICAgICBlbmQgaWY7CisKKyAgICAgIEluaXRfS2V5Ym9hcmRfSGFuZGxlcjsKKworICAgICAgU2V0X0VjaG9fTW9kZSAoRmFsc2UpOworICAgICAgU2V0X1Jhd19Nb2RlOworICAgICAgU2V0X01ldGFfTW9kZTsKKyAgICAgIFNldF9LZXlQYWRfTW9kZTsKKworICAgICAgLS0gIEluaXRpYWxpemUgdGhlIEZ1bmN0aW9uIEtleSBFbnZpcm9ubWVudAorICAgICAgLS0gIFdlIGhhdmUgc29tZSBmaXhlZCBrZXkgdGhyb3VnaG91dCB0aGlzIHNhbXBsZQorICAgICAgTWFpbl9NZW51OworICAgICAgRW5kX1dpbmRvd3M7CisgICAgICBDdXJzZXNfRnJlZV9BbGw7CisKKyAgIGV4Y2VwdGlvbgorICAgICAgd2hlbiBFdmVudCA6IG90aGVycyA9PgorICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5FbmRfV2luZG93czsKKyAgICAgICAgIFRleHRfSU8uUHV0ICgiRXhjZXB0aW9uOiAiKTsKKyAgICAgICAgIFRleHRfSU8uUHV0IChFeGNlcHRpb25fTmFtZSAoRXZlbnQpKTsKKyAgICAgICAgIFRleHRfSU8uTmV3X0xpbmU7CisgICAgICAgICBHTkFULk9TX0xpYi5PU19FeGl0ICgxKTsKKworICAgZW5kIFdob3c7CisKK2VuZCBTYW1wbGU7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNjQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkcwpAQCAtMCwwICsxLDQzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBTYW1wbGUgaXMKKyAgIHByb2NlZHVyZSBXaG93OworZW5kIFNhbXBsZTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkYiBiL0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjU4MTMxCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy9zdGF0dXMuYWRiCkBAIC0wLDAgKzEsNTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgTGF1cmVudCBQYXV0ZXQgPHBhdXRldEBnbmF0LmNvbT4KKy0tICBNb2RpZmllZCBieTogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NworLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFRoaXMgcGFja2FnZSBoYXMgYmVlbiBjb250cmlidXRlZCBieSBMYXVyZW50IFBhdXRldCA8cGF1dGV0QGduYXQuY29tPiAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KK3BhY2thZ2UgYm9keSBTdGF0dXMgaXMKKworICAgcHJvdGVjdGVkIGJvZHkgUHJvY2VzcyBpcworICAgICAgcHJvY2VkdXJlIFN0b3AgaXMKKyAgICAgIGJlZ2luCisgICAgICAgICBEb25lIDo9IFRydWU7CisgICAgICBlbmQgU3RvcDsKKyAgICAgIGZ1bmN0aW9uIENvbnRpbnVlIHJldHVybiBCb29sZWFuIGlzCisgICAgICBiZWdpbgorICAgICAgICAgcmV0dXJuIG5vdCBEb25lOworICAgICAgZW5kIENvbnRpbnVlOworICAgZW5kIFByb2Nlc3M7CisKK2VuZCBTdGF0dXM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3N0YXR1cy5hZHMgYi9BZGE5NS9zYW1wbGVzL3N0YXR1cy5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTllM2VlOAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkcwpAQCAtMCwwICsxLDYwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIExhdXJlbnQgUGF1dGV0IDxwYXV0ZXRAZ25hdC5jb20+CistLSAgTW9kaWZpZWQgYnk6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBUaGlzIHBhY2thZ2UgaGFzIGJlZW4gY29udHJpYnV0ZWQgYnkgTGF1cmVudCBQYXV0ZXQgPHBhdXRldEBnbmF0LmNvbT4gICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCit3aXRoIEFkYS5JbnRlcnJ1cHRzLk5hbWVzOworCitwYWNrYWdlIFN0YXR1cyBpcworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7ICAtLSAgdGhlIG5leHQgcHJhZ21hIGV4aXN0cyBzaW5jZSAzLjExcAorICAgcHJhZ21hIFVucmVzZXJ2ZV9BbGxfSW50ZXJydXB0czsKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBwcm90ZWN0ZWQgUHJvY2VzcyBpcworICAgICAgcHJvY2VkdXJlIFN0b3A7CisgICAgICBmdW5jdGlvbiBDb250aW51ZSByZXR1cm4gQm9vbGVhbjsKKyAgICAgIHByYWdtYSBBdHRhY2hfSGFuZGxlciAoU3RvcCwgQWRhLkludGVycnVwdHMuTmFtZXMuU0lHSU5UKTsKKyAgIHByaXZhdGUKKyAgICAgIERvbmUgOiBCb29sZWFuIDo9IEZhbHNlOworICAgZW5kIFByb2Nlc3M7CisKK2VuZCBTdGF0dXM7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3RvdXIuYWRiIGIvQWRhOTUvc2FtcGxlcy90b3VyLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2M5MWMxCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc2FtcGxlcy90b3VyLmFkYgpAQCAtMCwwICsxLDQ2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBTYW1wbGU7IHVzZSBTYW1wbGU7CisKK3Byb2NlZHVyZSBUb3VyIGlzCitiZWdpbgorICAgV2hvdzsKK2VuZCBUb3VyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy90b3VyLmFkcyBiL0FkYTk1L3NhbXBsZXMvdG91ci5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4ODE2OQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NhbXBsZXMvdG91ci5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG91ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBUb3VyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL01ha2VmaWxlLmluIGIvQWRhOTUvc3JjL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDcyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwzODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorIworIyAgJElkOiBNYWtlZmlsZS5pbix2IDEuMzEgMjAwNy8wOS8xNSAxODoyMjoyNCB0b20gRXhwICQKKyMKKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorVEhJUwkJPSBNYWtlZmlsZQorCitNT0RFTAkJPSAuLi8uLi9AREZUX09CSl9TVUJESVJACitERVNURElSCQk9IEBERVNURElSQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorQURBX0lOQ0xVREUJPSBAQURBX0lOQ0xVREVACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBUgkJPSBAQVJACitBUl9PUFRTCQk9IEBBUl9PUFRTQAorQVdLCQk9IEBBV0tACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitDRkxBR1MJCT0gQENGTEFHU0AKKworQ1BQRkxBR1MJPSBAQUNQUEZMQUdTQCBcCisJCSAgLURIQVZFX0NPTkZJR19IIC1JJChzcmNkaXIpCisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworTElOSwkJPSAkKENDKQorTERGTEFHUwkJPSBATERGTEFHU0AgQExEX01PREVMQCBATElCU0AKKworUkFOTElCCQk9IEBSQU5MSUJACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQURBICAgICAgICAgICAgID0gQGNmX2FkYV9jb21waWxlckAKK0FEQVBSRVAJCT0gZ25hdHByZXAKK0FEQUZMQUdTICAgICAgICA9IEBBREFGTEFHU0AgLUkuIC1JJChzcmNkaXIpCisKK0FEQU1BS0UgICAgICAgICA9IEBjZl9hZGFfbWFrZUAKK0FEQU1BS0VGTEFHUyAgICA9IAorCitDQVJHUyAgICAgICAgICAgPSAtY2FyZ3MgJChBREFGTEFHUykKK0xBUkdTICAgICAgICAgICA9CisKK0FMSUIgICAgICAgICAgICA9IEBjZl9hZGFfcGFja2FnZUAKK0FCQVNFICAgICAgICAgICA9ICQoQUxJQiktY3Vyc2VzCisKK0xJQkFMSVM9JChBTElCKS5hbGkgICAgICAgICAgICAgIAkJCVwKKwkkKEFCQVNFKS1hdXguYWxpICAgICAgICAgCQkJXAorCSQoQUJBU0UpLmFsaSAgICAgICAgICAgICAJCSAgICAgICAgXAorCSQoQUJBU0UpLXRlcm1pbmZvLmFsaQkJCQlcCisJJChBQkFTRSktdGVybWNhcC5hbGkJCQkJXAorCSQoQUJBU0UpLXB1dHdpbi5hbGkJCQkJXAorCSQoQUJBU0UpLXRyYWNlLmFsaQkJCQlcCisJJChBQkFTRSktbW91c2UuYWxpICAgICAgIAkJCVwKKwkkKEFCQVNFKS1wYW5lbHMuYWxpICAgICAgCQkJXAorCSQoQUJBU0UpLW1lbnVzLmFsaSAgICAgICAJCQlcCisJJChBQkFTRSktZm9ybXMuYWxpICAgICAgIAkJCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hbGkJICAgICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFsaSAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFsaSAgICAgXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFsaSAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hbGkgICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hbGkgICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFsaSAgICAgIFwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWxpICAgICBcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hbGkJICAgICAgCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hbGkgICAgIAlcCisJJChBQkFTRSktdGV4dF9pby5hbGkgICAgIAkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWF1eC5hbGkKKworIyBBZGEgTGlicmFyeSBmaWxlcyBmb3IgZ2VuZXJpYyBwYWNrYWdlcy4gU2luY2UgZ25hdCAzLjEwIHRoZXkgYXJlCisjIGFsc28gY29tcGlsZWQKK0dFTkFMSVM9JChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWxpCQlcCisJJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWxpCQlcCisJJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWxpCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFsaQkJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hbGkJXAorCSQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWxpCQkJXAorCSQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hbGkJCQlcCisJJChBQkFTRSktdGV4dF9pby1mbG9hdF9pby5hbGkJCQlcCisJJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5hbGkJCQlcCisJJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFsaQkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFsaQkJXAorCSQoQUJBU0UpLXRleHRfaW8tbW9kdWxhcl9pby5hbGkJCQlcCisJJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLmFsaQorCitMSUJPQkpTPSQoQUxJQikubyAgICAgICAgICAgICAgICAJCQlcCisJJChBQkFTRSktYXV4Lm8gICAgICAgICAgIAkJCVwKKwkkKEFCQVNFKS5vICAgICAgICAgICAgICAgCQkJXAorCSQoQUJBU0UpLXRlcm1pbmZvLm8JCQkJXAorCSQoQUJBU0UpLXRlcm1jYXAubwkJCQlcCisJJChBQkFTRSktcHV0d2luLm8JCQkJXAorCSQoQUJBU0UpLXRyYWNlLm8JCQkJXAorCSQoQUJBU0UpLW1vdXNlLm8gICAgICAgICAJCQlcCisJJChBQkFTRSktcGFuZWxzLm8gICAgICAgIAkJCVwKKwkkKEFCQVNFKS1tZW51cy5vICAgICAgICAgCQkJXAorCSQoQUJBU0UpLWZvcm1zLm8gICAgICAgICAJCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMubyAgICAgIAkJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLm8gICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5vCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5vICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMubyAgICAgCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAubyAgICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLm8JXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5vCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLm8gCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UubyAJXAorCSQoQUJBU0UpLXRleHRfaW8ubyAgICAgICAJCQlcCisJJChBQkFTRSktdGV4dF9pby1hdXgubworCisjIEFkYSBvYmplY3QgZmlsZXMgZm9yIGdlbmVyaWMgcGFja2FnZXMuIFNpbmNlIGduYXQgMy4xMCB0aGV5IGFyZQorIyBhbHNvIGNvbXBpbGVkCitHRU5PQkpTPSQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLm8JCQlcCisJJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEubwkJCVwKKwkkKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5vCQkJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5vCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLm8JXAorCSQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEubwkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWludGVnZXJfaW8ubwkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLm8JCQlcCisJJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5vCQkJXAorCSQoQUJBU0UpLXRleHRfaW8tZGVjaW1hbF9pby5vCQkJXAorCSQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8ubwkJXAorCSQoQUJBU0UpLXRleHRfaW8tbW9kdWxhcl9pby5vCQkJXAorCSQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5vCisKKworYWxsIDo6ICBsaWJBZGFDdXJzZXMuYQorCUBlY2hvIGRvbmUKKworbGliQWRhQ3Vyc2VzLmEgOjogZG90b3VjaCAkKExJQk9CSlMpIEBjZl9nZW5lcmljX29iamVjdHNACisJJChBUikgJChBUl9PUFRTKSAkQCAkKExJQk9CSlMpIEBjZl9nZW5lcmljX29iamVjdHNACisKK2RvdG91Y2ggOgorCUBzaCAtYyAnZm9yIGYgaW4gJChMSUJBTElTKSAkKEdFTkFMSVMpOyBkbyB0ZXN0IC1mICQkZiB8fCB0b3VjaCAkJGY7IGRvbmUnCisKK3NvdXJjZXMgOgorCUBlY2hvIG1hZGUgJEAKKworbGlicyBcCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyBcCit1bmluc3RhbGwgXAordW5pbnN0YWxsLmxpYnMgOjoKKwlAZWNobyBtYWRlICRACisKK2dlbmVyaWNzOiAkKEdFTkFMSVMpCisJQGVjaG8gbWFkZSAkQAorCittb3N0bHljbGVhbiA6OgorCXJtIC1mICoubyAqLmFsaSBiX3QqLiogKi5zICQoUFJPR1MpIGEub3V0IGNvcmUgYl8qX3Rlc3QuYyAqLnhyW2JzXSAqLmEKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwlybSAtZiAkKExJQkFMSVMpICQoR0VOQUxJUykgJChMSUJPQkpTKSAkKEdFTk9CSlMpICQoQUJBU0UpLXRyYWNlLmFkYgorCitkaXN0Y2xlYW4gOjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKK0JBU0VERVBTPSQoQUJBU0UpLmFkcyAkKEFCQVNFKS1hdXguYWRzICQoQUJBU0UpLmFkYgorCiskKEFMSUIpLm86ICQoc3JjZGlyKS8kKEFMSUIpLmFkcworCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBTElCKS5hZHMKKworCiskKEFCQVNFKS1hdXgubzogJChzcmNkaXIpLyQoQUJBU0UpLWF1eC5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWF1eC5hZGIKKworCiskKEFCQVNFKS5vOiAkKEFCQVNFKS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChBQkFTRSkuYWRiCisKKworJChBQkFTRSktdGVybWluZm8ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGVybWluZm8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRlcm1pbmZvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGVybWluZm8uYWRiCisKKworJChBQkFTRSktdGVybWNhcC5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXJtY2FwLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXJtY2FwLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGVybWNhcC5hZGIKKworCiskKEFCQVNFKS1wdXR3aW4ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktcHV0d2luLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1wdXR3aW4uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1wdXR3aW4uYWRiCisKKworJChBQkFTRSktdHJhY2UuYWRiIDogJChzcmNkaXIpLyQoQUJBU0UpLXRyYWNlLmFkYl9wCisJcm0gLWYgJEAKKwkkKEFEQVBSRVApIC1EQURBX1RSQUNFPUBBREFfVFJBQ0VAIC1EUFJBR01BX1VOUkVGPUBQUkFHTUFfVU5SRUZAICQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZGJfcCAkQAorCiskKEFCQVNFKS10cmFjZS5vOiBcCisJCSQoQUJBU0UpLXRyYWNlLmFkcyBcCisJCSQoQUJBU0UpLXRyYWNlLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKEFCQVNFKS10cmFjZS5hZGIKKworCiskKEFCQVNFKS1tb3VzZS5vOiBcCisJCSQoQUJBU0UpLW1vdXNlLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1tb3VzZS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1vdXNlLmFkYgorCisKKyQoQUJBU0UpLXBhbmVscy5vOiBcCisJCSQoQUJBU0UpLXBhbmVscy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLmFkYgorCisKKyQoQUJBU0UpLW1lbnVzLm86IFwKKwkJJChBQkFTRSktbWVudXMuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktbWVudXMuYWRiCisKKworJChBQkFTRSktZm9ybXMubzogXAorCQkkKEFCQVNFKS1mb3Jtcy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMubzogXAorCQkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiCisKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiCisKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiCisKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiCisKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiCisKKyQoQUJBU0UpLXRleHRfaW8ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8uYWRiCisKKyQoQUJBU0UpLXRleHRfaW8tYXV4Lm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tYXV4LmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWF1eC5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tYXV4LmFkYgorCiskKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5vOiBcCisJCSQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYgorCiskKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5vOiBcCisJCSQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5vOiBcCisJCSQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEubzogXAorCQkkKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYgorCiskKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLm86IFwKKwkJJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRiCisKKyQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWludGVnZXJfaW8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hZGIKKworJChBQkFTRSktdGV4dF9pby1mbG9hdF9pby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1mbG9hdF9pby5hZGIKKworJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5hZGIKKworJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZGVjaW1hbF9pby5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFkYgorCiskKEFCQVNFKS10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYgorCiskKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1tb2R1bGFyX2lvLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiCisKKyQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5hZGIKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMmU4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiCkBAIC0wLDAgKzEsMTE2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4ICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXggaXMKKyAgIC0tCisgICAtLSAgU29tZSBoZWxwZXJzCisgICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGluICBjaGFyc19wdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBTdHJpbmcpCisgICBpcworICAgICAgLS0gIEZpbGwgdGhlIHN0cmluZyB3aXRoIHRoZSBjaGFyYWN0ZXJzIHJlZmVyZW5jZWQgYnkgdGhlCisgICAgICAtLSAgY2hhcnNfcHRyLgorICAgICAgLS0KKyAgICAgIExlbiA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgaWYgQ3AgLz0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgTGVuIDo9IE5hdHVyYWwgKFN0cmxlbiAoQ3ApKTsKKyAgICAgICAgIGlmIFN0cidMZW5ndGggPCBMZW4gdGhlbgorICAgICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIFMgOiBTdHJpbmcgKDEgLi4gTGVuKTsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBTIDo9IFZhbHVlIChDcCk7CisgICAgICAgICAgICBTdHIgKFN0cidGaXJzdCAuLiAoU3RyJ0ZpcnN0ICsgTGVuIC0gMSkpIDo9IFMgKFMnUmFuZ2UpOworICAgICAgICAgZW5kOworICAgICAgZWxzZQorICAgICAgICAgTGVuIDo9IDA7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGlmIExlbiA8IFN0cidMZW5ndGggdGhlbgorICAgICAgICAgU3RyICgoU3RyJ0ZpcnN0ICsgTGVuKSAuLiBTdHInTGFzdCkgOj0gKG90aGVycyA9PiAnICcpOworICAgICAgZW5kIGlmOworCisgICBlbmQgRmlsbF9TdHJpbmc7CisKKyAgIGZ1bmN0aW9uIEZpbGxfU3RyaW5nIChDcCA6IGNoYXJzX3B0cikgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIExlbiA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgaWYgQ3AgLz0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgTGVuIDo9IE5hdHVyYWwgKFN0cmxlbiAoQ3ApKTsKKyAgICAgICAgIGlmIExlbiA9IDAgdGhlbgorICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgUyA6IFN0cmluZyAoMSAuLiBMZW4pOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIEZpbGxfU3RyaW5nIChDcCwgUyk7CisgICAgICAgICAgICAgICByZXR1cm4gUzsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBGaWxsX1N0cmluZzsKKworICAgcHJvY2VkdXJlIEV0aV9FeGNlcHRpb24gKENvZGUgOiBFdGlfRXJyb3IpCisgICBpcworICAgYmVnaW4KKyAgICAgIGNhc2UgQ29kZSBpcworICAgICAgICAgd2hlbiBFX09rICAgICAgICAgICAgICA9PiBudWxsOworICAgICAgICAgd2hlbiBFX1N5c3RlbV9FcnJvciAgICA9PiByYWlzZSBFdGlfU3lzdGVtX0Vycm9yOworICAgICAgICAgd2hlbiBFX0JhZF9Bcmd1bWVudCAgICA9PiByYWlzZSBFdGlfQmFkX0FyZ3VtZW50OworICAgICAgICAgd2hlbiBFX1Bvc3RlZCAgICAgICAgICA9PiByYWlzZSBFdGlfUG9zdGVkOworICAgICAgICAgd2hlbiBFX0Nvbm5lY3RlZCAgICAgICA9PiByYWlzZSBFdGlfQ29ubmVjdGVkOworICAgICAgICAgd2hlbiBFX0JhZF9TdGF0ZSAgICAgICA9PiByYWlzZSBFdGlfQmFkX1N0YXRlOworICAgICAgICAgd2hlbiBFX05vX1Jvb20gICAgICAgICA9PiByYWlzZSBFdGlfTm9fUm9vbTsKKyAgICAgICAgIHdoZW4gRV9Ob3RfUG9zdGVkICAgICAgPT4gcmFpc2UgRXRpX05vdF9Qb3N0ZWQ7CisgICAgICAgICB3aGVuIEVfVW5rbm93bl9Db21tYW5kID0+IHJhaXNlIEV0aV9Vbmtub3duX0NvbW1hbmQ7CisgICAgICAgICB3aGVuIEVfTm9fTWF0Y2ggICAgICAgID0+IHJhaXNlIEV0aV9Ob19NYXRjaDsKKyAgICAgICAgIHdoZW4gRV9Ob3RfU2VsZWN0YWJsZSAgPT4gcmFpc2UgRXRpX05vdF9TZWxlY3RhYmxlOworICAgICAgICAgd2hlbiBFX05vdF9Db25uZWN0ZWQgICA9PiByYWlzZSBFdGlfTm90X0Nvbm5lY3RlZDsKKyAgICAgICAgIHdoZW4gRV9SZXF1ZXN0X0RlbmllZCAgPT4gcmFpc2UgRXRpX1JlcXVlc3RfRGVuaWVkOworICAgICAgICAgd2hlbiBFX0ludmFsaWRfRmllbGQgICA9PiByYWlzZSBFdGlfSW52YWxpZF9GaWVsZDsKKyAgICAgICAgIHdoZW4gRV9DdXJyZW50ICAgICAgICAgPT4gcmFpc2UgRXRpX0N1cnJlbnQ7CisgICAgICBlbmQgY2FzZTsKKyAgIGVuZCBFdGlfRXhjZXB0aW9uOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzN2NlNgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYgpAQCAtMCwwICsxLDY2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MjUgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhIGlzCisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEFscGhhX0ZpZWxkKQorICAgaXMKKyAgICAgIENfQWxwaGFfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfQWxwaGFfRmllbGRfVHlwZSwgIlRZUEVfQUxQSEEiKTsKKworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfQWxwaGFfRmllbGRfVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgUmVzIDo9IFNldF9GbGRfVHlwZSAoQXJnMSA9PiBDX0ludCAoVHlwLk1pbmltdW1fRmllbGRfV2lkdGgpKTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICAgICBXcmFwX0J1aWx0aW4gKEZsZCwgVHlwKTsKKyAgIGVuZCBTZXRfRmllbGRfVHlwZTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGE7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwYjc5ZAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkcwpAQCAtMCwwICsxLDUzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEpOworCisgICB0eXBlIEFscGhhX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlCisgICAgIHdpdGggcmVjb3JkCisgICAgICAgIE1pbmltdW1fRmllbGRfV2lkdGggOiBOYXR1cmFsIDo9IDA7CisgICAgIGVuZCByZWNvcmQ7CisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEFscGhhX0ZpZWxkKTsKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGE7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzNjYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYgpAQCAtMCwwICsxLDY2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MTUgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYyBpcworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBBbHBoYU51bWVyaWNfRmllbGQpCisgICBpcworICAgICAgQ19BbHBoYU51bWVyaWNfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfQWxwaGFOdW1lcmljX0ZpZWxkX1R5cGUsICJUWVBFX0FMTlVNIik7CisKKyAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0FscGhhTnVtZXJpY19GaWVsZF9UeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IENfSW50IChUeXAuTWluaW11bV9GaWVsZF9XaWR0aCkpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYU51bWVyaWM7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjIxOTUwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkcwpAQCAtMCwwICsxLDU0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlCisgICAgIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYyk7CisKKyAgIHR5cGUgQWxwaGFOdW1lcmljX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlCisgICAgIHdpdGggcmVjb3JkCisgICAgICAgIE1pbmltdW1fRmllbGRfV2lkdGggOiBOYXR1cmFsIDo9IDA7CisgICAgIGVuZCByZWNvcmQ7CisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEFscGhhTnVtZXJpY19GaWVsZCk7CisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZWFmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiCkBAIC0wLDAgKzEsODEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOyB1c2UgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSBpcworCisgICBmdW5jdGlvbiBDcmVhdGUgKFNldCAgICAgICAgICAgIDogVHlwZV9TZXQgOj0gTWl4ZWRfQ2FzZTsKKyAgICAgICAgICAgICAgICAgICAgQ2FzZV9TZW5zaXRpdmUgOiBCb29sZWFuICA6PSBGYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgTXVzdF9CZV9VbmlxdWUgOiBCb29sZWFuICA6PSBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVudW1lcmF0aW9uX0ZpZWxkCisgICBpcworICAgICAgSSA6IEVudW1lcmF0aW9uX0luZm8gKFQnUG9zIChUJ0xhc3QpIC0gVCdQb3MgKFQnRmlyc3QpICsgMSk7CisgICAgICBKIDogUG9zaXRpdmUgOj0gMTsKKyAgIGJlZ2luCisgICAgICBJLkNhc2VfU2Vuc2l0aXZlIDo9IENhc2VfU2Vuc2l0aXZlOworICAgICAgSS5NYXRjaF9NdXN0X0JlX1VuaXF1ZSA6PSBNdXN0X0JlX1VuaXF1ZTsKKworICAgICAgZm9yIEUgaW4gVCdSYW5nZSBsb29wCisgICAgICAgICBJLk5hbWVzIChKKSA6PSBuZXcgU3RyaW5nJyhUJ0ltYWdlIChFKSk7CisgICAgICAgICAtLSAgVGhlIEltYWdlIGF0dHJpYnV0ZSBkZWZhdWx0cyB0byB1cHBlciBjYXNlLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZQorICAgICAgICAgLS0gIG9ubHkgdGhlIG90aGVyIG9uZXMuLi4KKyAgICAgICAgIGlmIFNldCAvPSBVcHBlcl9DYXNlIHRoZW4KKyAgICAgICAgICAgIEkuTmFtZXMgKEopLmFsbCA6PSBUb19Mb3dlciAoSS5OYW1lcyAoSikuYWxsKTsKKyAgICAgICAgICAgIGlmIFNldCA9IE1peGVkX0Nhc2UgdGhlbgorICAgICAgICAgICAgICAgSS5OYW1lcyAoSikoSS5OYW1lcyAoSikuYWxsJ0ZpcnN0KSA6PQorICAgICAgICAgICAgICAgICBUb19VcHBlciAoSS5OYW1lcyAoSikoSS5OYW1lcyAoSikuYWxsJ0ZpcnN0KSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBKIDo9IEogKyAxOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIHJldHVybiBDcmVhdGUgKEksIFRydWUpOworICAgZW5kIENyZWF0ZTsKKworICAgZnVuY3Rpb24gVmFsdWUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgIEJ1ZiA6IEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdCkgcmV0dXJuIFQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFQnVmFsdWUgKEdldF9CdWZmZXIgKEZsZCwgQnVmKSk7CisgICBlbmQgVmFsdWU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmFkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRzCkBAIC0wLDAgKzEsNTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbmVyaWMKKyAgIHR5cGUgVCBpcyAoPD4pOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlCisgICAgIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSk7CisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoU2V0ICAgICAgICAgICAgOiBUeXBlX1NldCA6PSBNaXhlZF9DYXNlOworICAgICAgICAgICAgICAgICAgICBDYXNlX1NlbnNpdGl2ZSA6IEJvb2xlYW4gIDo9IEZhbHNlOworICAgICAgICAgICAgICAgICAgICBNdXN0X0JlX1VuaXF1ZSA6IEJvb2xlYW4gIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW51bWVyYXRpb25fRmllbGQ7CisKKyAgIGZ1bmN0aW9uIFZhbHVlIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICBCdWYgOiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpIHJldHVybiBUOworICAgLS0gIFRyYW5zbGF0ZSB0aGUgY29udGVudCBvZiB0aGUgZmllbGRzIGJ1ZmZlciAtIGluZGljYXRlZCBieSB0aGUKKyAgIC0tICBidWZmZXIgbnVtYmVyIC0gaW50byBhbiBlbnVtZXJhdGlvbiB2YWx1ZS4gSWYgdGhlIGJ1ZmZlciBpcyBlbXB0eQorICAgLS0gIG9yIHRoZSBjb250ZW50IGlzIGludmFsaWQsIGEgQ29uc3RyYWludF9FcnJvciBpcyByYWlzZXMuCisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmUyMGYyCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiCkBAIC0wLDAgKzEsMTE5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24gICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuNyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247Cit3aXRoIEludGVyZmFjZXMuQzsgdXNlIEludGVyZmFjZXMuQzsKK3dpdGggSW50ZXJmYWNlcy5DLlN0cmluZ3M7IHVzZSBJbnRlcmZhY2VzLkMuU3RyaW5nczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24gaXMKKworICAgZnVuY3Rpb24gQ3JlYXRlIChJbmZvICAgICAgICAgICAgICAgOiBFbnVtZXJhdGlvbl9JbmZvOworICAgICAgICAgICAgICAgICAgICBBdXRvX1JlbGVhc2VfTmFtZXMgOiBCb29sZWFuIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW51bWVyYXRpb25fRmllbGQKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgUmVsZWFzZV9TdHJpbmcgaXMKKyAgICAgICAgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uIChTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nX0FjY2Vzcyk7CisgICAgICBFIDogRW51bWVyYXRpb25fRmllbGQ7CisgICAgICBMIDogY29uc3RhbnQgc2l6ZV90IDo9IDEgKyBzaXplX3QgKEluZm8uQyk7CisgICAgICBTIDogU3RyaW5nX0FjY2VzczsKKyAgIGJlZ2luCisgICAgICBFLkNhc2VfU2Vuc2l0aXZlICAgICAgIDo9IEluZm8uQ2FzZV9TZW5zaXRpdmU7CisgICAgICBFLk1hdGNoX011c3RfQmVfVW5pcXVlIDo9IEluZm8uTWF0Y2hfTXVzdF9CZV9VbmlxdWU7CisgICAgICBFLkFyciA6PSBuZXcgY2hhcnNfcHRyX2FycmF5IChzaXplX3QgKDEpIC4uIEwpOworICAgICAgZm9yIEkgaW4gMSAuLiBQb3NpdGl2ZSAoTCAtIDEpIGxvb3AKKyAgICAgICAgIGlmIEluZm8uTmFtZXMgKEkpID0gbnVsbCB0aGVuCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIEUuQXJyIChzaXplX3QgKEkpKSA6PSBOZXdfU3RyaW5nIChJbmZvLk5hbWVzIChJKS5hbGwpOworICAgICAgICAgaWYgQXV0b19SZWxlYXNlX05hbWVzIHRoZW4KKyAgICAgICAgICAgIFMgOj0gSW5mby5OYW1lcyAoSSk7CisgICAgICAgICAgICBSZWxlYXNlX1N0cmluZyAoUyk7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIEUuQXJyIChMKSA6PSBOdWxsX1B0cjsKKyAgICAgIHJldHVybiBFOworICAgZW5kIENyZWF0ZTsKKworICAgcHJvY2VkdXJlIFJlbGVhc2UgKEVudW0gOiBpbiBvdXQgRW51bWVyYXRpb25fRmllbGQpCisgICBpcworICAgICAgSSA6IHNpemVfdCA6PSAwOworICAgICAgUCA6IGNoYXJzX3B0cjsKKyAgIGJlZ2luCisgICAgICBsb29wCisgICAgICAgICBQIDo9IEVudW0uQXJyIChJKTsKKyAgICAgICAgIGV4aXQgd2hlbiBQID0gTnVsbF9QdHI7CisgICAgICAgICBGcmVlIChQKTsKKyAgICAgICAgIEVudW0uQXJyIChJKSA6PSBOdWxsX1B0cjsKKyAgICAgICAgIEkgOj0gSSArIDE7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIEVudW0uQXJyIDo9IG51bGw7CisgICBlbmQgUmVsZWFzZTsKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gRW51bWVyYXRpb25fRmllbGQpCisgICBpcworICAgICAgQ19FbnVtX1R5cGUgOiBDX0ZpZWxkX1R5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0VudW1fVHlwZSwgIlRZUEVfRU5VTSIpOworCisgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19FbnVtX1R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBjaGFyc19wdHJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgaWYgVHlwLkFyciA9IG51bGwgdGhlbgorICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IFR5cC5BcnIuYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA9PiBDX0ludCAoQm9vbGVhbidQb3MgKFR5cC5DYXNlX1NlbnNpdGl2ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA9PiBDX0ludCAoQm9vbGVhbidQb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUeXAuTWF0Y2hfTXVzdF9CZV9VbmlxdWUpKSk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCwgQ19DaG9pY2VfUm91dGVyKTsKKyAgIGVuZCBTZXRfRmllbGRfVHlwZTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb247CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3ZTQxMQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkcwpAQCAtMCwwICsxLDk4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24gaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUKKyAgICAgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24pOworCisgICB0eXBlIFN0cmluZ19BY2Nlc3MgaXMgYWNjZXNzIFN0cmluZzsKKworICAgLS0gIFR5cGVfU2V0IGlzIHVzZWQgYnkgdGhlIGNoaWxkIHBhY2thZ2UgQWRhCisgICB0eXBlIFR5cGVfU2V0IGlzIChMb3dlcl9DYXNlLCBVcHBlcl9DYXNlLCBNaXhlZF9DYXNlKTsKKworICAgdHlwZSBFbnVtX0FycmF5IGlzIGFycmF5IChQb3NpdGl2ZSByYW5nZSA8PikKKyAgICAgb2YgU3RyaW5nX0FjY2VzczsKKworICAgdHlwZSBFbnVtZXJhdGlvbl9JbmZvIChDIDogUG9zaXRpdmUpIGlzCisgICAgICByZWNvcmQKKyAgICAgICAgIE5hbWVzICAgICAgICAgICAgICAgIDogRW51bV9BcnJheSAoMSAuLiBDKTsKKyAgICAgICAgIENhc2VfU2Vuc2l0aXZlICAgICAgIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgICAgIE1hdGNoX011c3RfQmVfVW5pcXVlIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgIGVuZCByZWNvcmQ7CisKKyAgIHR5cGUgRW51bWVyYXRpb25fRmllbGQgaXMgbmV3IEZpZWxkX1R5cGUgd2l0aCBwcml2YXRlOworCisgICBmdW5jdGlvbiBDcmVhdGUgKEluZm8gOiBFbnVtZXJhdGlvbl9JbmZvOworICAgICAgICAgICAgICAgICAgICBBdXRvX1JlbGVhc2VfTmFtZXMgOiBCb29sZWFuIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW51bWVyYXRpb25fRmllbGQ7CisgICAtLSAgTWFrZSBhbiBmaWVsZHR5cGUgZnJvbSB0aGUgaW5mby4gRW51bWVyYXRpb25zIGFyZSBzcGVjaWFsLCBiZWNhdXNlCisgICAtLSAgdGhleSBub3JtYWxseSBkb24ndCBjb3B5IHRoZSBlbnVtIHZhbHVlcyBpbnRvIGEgcHJpdmF0ZSBzdG9yZSwgc28KKyAgIC0tICB3ZSBoYXZlIHRvIGNhcmUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgaW5mbyB3ZSBwcm92aWRlLgorICAgLS0gIFRoZSBBdXRvX1JlbGVhc2VfTmFtZXMgZmxhZyBtYXkgYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHJlbGVhc2VzCisgICAtLSAgdGhlIHN0cmluZ3MgaW4gdGhlIE5hbWVzIGFycmF5IG9mIHRoZSBFbnVtZXJhdGlvbl9JbmZvLgorCisgICBmdW5jdGlvbiBNYWtlX0VudW1lcmF0aW9uX1R5cGUgKEluZm8gOiBFbnVtZXJhdGlvbl9JbmZvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvX1JlbGVhc2VfTmFtZXMgOiBCb29sZWFuIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW51bWVyYXRpb25fRmllbGQgcmVuYW1lcyBDcmVhdGU7CisKKyAgIHByb2NlZHVyZSBSZWxlYXNlIChFbnVtIDogaW4gb3V0IEVudW1lcmF0aW9uX0ZpZWxkKTsKKyAgIC0tICBCdXQgd2UgbWF5IHdhbnQgdG8gcmVsZWFzZSB0aGUgZmllbGQgdG8gcmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZAorICAgLS0gIGJ5IGl0IGludGVybmFsbHkuIEFmdGVyIHRoYXQgdGhlIEVudW1lcmF0aW9uIGZpZWxkIGlzIG5vIGxvbmdlciB1c2FibGUuCisKKyAgIC0tICBUaGUgbmV4dCB0eXBlIGRlZmludGlvbnMgYXJlIGFsbCBuY3Vyc2VzIGV4dGVuc2lvbnMuIFRoZXkgYXJlIHR5cGljYWxseQorICAgLS0gIG5vdCBhdmFpbGFibGUgaW4gb3RoZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucy4KKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gRW51bWVyYXRpb25fRmllbGQpOworICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCitwcml2YXRlCisgICB0eXBlIENQQV9BY2Nlc3MgaXMgYWNjZXNzIEludGVyZmFjZXMuQy5TdHJpbmdzLmNoYXJzX3B0cl9hcnJheTsKKworICAgdHlwZSBFbnVtZXJhdGlvbl9GaWVsZCBpcyBuZXcgRmllbGRfVHlwZSB3aXRoCisgICAgICByZWNvcmQKKyAgICAgICAgIENhc2VfU2Vuc2l0aXZlICAgICAgIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgICAgIE1hdGNoX011c3RfQmVfVW5pcXVlIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgICAgIEFyciAgICAgICAgICAgICAgICAgIDogQ1BBX0FjY2VzcyA6PSBudWxsOworICAgICAgZW5kIHJlY29yZDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb247CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNjZjNAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYgpAQCAtMCwwICsxLDcwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JbnRGaWVsZCAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MDYgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkIGlzCisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEludGVnZXJfRmllbGQpCisgICBpcworICAgICAgQ19JbnRlZ2VyX0ZpZWxkX1R5cGUgOiBDX0ZpZWxkX1R5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0ludGVnZXJfRmllbGRfVHlwZSwgIlRZUEVfSU5URUdFUiIpOworCisgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19JbnRlZ2VyX0ZpZWxkX1R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA6IENfTG9uZ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgOiBDX0xvbmdfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgUmVzIDo9IFNldF9GbGRfVHlwZSAoQXJnMSA9PiBDX0ludCAoVHlwLlByZWNpc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyID0+IENfTG9uZ19JbnQgKFR5cC5Mb3dlcl9MaW1pdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczID0+IENfTG9uZ19JbnQgKFR5cC5VcHBlcl9MaW1pdCkpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JbnRGaWVsZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjg1Y2EyCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzCkBAIC0wLDAgKzEsNTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JbnRGaWVsZCBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JbnRGaWVsZCk7CisKKyAgIHR5cGUgSW50ZWdlcl9GaWVsZCBpcyBuZXcgRmllbGRfVHlwZSB3aXRoCisgICAgICByZWNvcmQKKyAgICAgICAgIFByZWNpc2lvbiAgIDogTmF0dXJhbDsKKyAgICAgICAgIExvd2VyX0xpbWl0IDogSW50ZWdlcjsKKyAgICAgICAgIFVwcGVyX0xpbWl0IDogSW50ZWdlcjsKKyAgICAgIGVuZCByZWNvcmQ7CisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEludGVnZXJfRmllbGQpOworICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JbnRGaWVsZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkN2M1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiCkBAIC0wLDAgKzEsNjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0OTo0NyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzIGlzCisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEludGVybmV0X1Y0X0FkZHJlc3NfRmllbGQpCisgICBpcworICAgICAgQ19JUFY0X0ZpZWxkX1R5cGUgOiBDX0ZpZWxkX1R5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0lQVjRfRmllbGRfVHlwZSwgIlRZUEVfSVBWNCIpOworCisgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19JUFY0X0ZpZWxkX1R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3M7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDBhZWYwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkcwpAQCAtMCwwICsxLDUxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlCisgICAgIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLklQVjRfQWRkcmVzcyk7CisKKyAgIHR5cGUgSW50ZXJuZXRfVjRfQWRkcmVzc19GaWVsZCBpcyBuZXcgRmllbGRfVHlwZSB3aXRoIG51bGwgcmVjb3JkOworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBJbnRlcm5ldF9WNF9BZGRyZXNzX0ZpZWxkKTsKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWY4NDg5Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIKQEAgLTAsMCArMSw3MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYyAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0OTo1NyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljIGlzCisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIE51bWVyaWNfRmllbGQpCisgICBpcworICAgICAgdHlwZSBEb3VibGUgaXMgbmV3IEludGVyZmFjZXMuQy5kb3VibGU7CisKKyAgICAgIENfTnVtZXJpY19GaWVsZF9UeXBlIDogQ19GaWVsZF9UeXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19OdW1lcmljX0ZpZWxkX1R5cGUsICJUWVBFX05VTUVSSUMiKTsKKworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfTnVtZXJpY19GaWVsZF9UeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgOiBEb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgOiBEb3VibGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IENfSW50IChUeXAuUHJlY2lzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgPT4gRG91YmxlIChUeXAuTG93ZXJfTGltaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA9PiBEb3VibGUgKFR5cC5VcHBlcl9MaW1pdCkpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjExYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHMKQEAgLTAsMCArMSw1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLk51bWVyaWMgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLk51bWVyaWMgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYyk7CisKKyAgIHR5cGUgTnVtZXJpY19GaWVsZCBpcyBuZXcgRmllbGRfVHlwZSB3aXRoCisgICAgICByZWNvcmQKKyAgICAgICAgIFByZWNpc2lvbiAgIDogTmF0dXJhbDsKKyAgICAgICAgIExvd2VyX0xpbWl0IDogRmxvYXQ7CisgICAgICAgICBVcHBlcl9MaW1pdCA6IEZsb2F0OworICAgICAgZW5kIHJlY29yZDsKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gTnVtZXJpY19GaWVsZCk7CisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLk51bWVyaWM7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ5ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYgpAQCAtMCwwICsxLDcxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5SZWdFeHAgaXMKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkKQorICAgaXMKKyAgICAgIHR5cGUgQ2hhcl9QdHIgaXMgYWNjZXNzIGFsbCBJbnRlcmZhY2VzLkMuY2hhcjsKKworICAgICAgQ19SZWdleHBfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfUmVnZXhwX0ZpZWxkX1R5cGUsICJUWVBFX1JFR0VYUCIpOworCisgICAgICBmdW5jdGlvbiBTZXRfRnR5cCAoRiAgICA6IEZpZWxkIDo9IEZsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfUmVnZXhwX0ZpZWxkX1R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IENoYXJfUHRyKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRnR5cCwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gVHlwLlJlZ3VsYXJfRXhwcmVzc2lvbi5hbGwnTGVuZ3RoKTsKKyAgICAgIExlbiA6IHNpemVfdDsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBUb19DIChUeXAuUmVndWxhcl9FeHByZXNzaW9uLmFsbCwgVHh0LCBMZW4pOworICAgICAgUmVzIDo9IFNldF9GdHlwIChBcmcxID0+IFR4dCAoVHh0J0ZpcnN0KSdBY2Nlc3MpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5SZWdFeHA7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQ1MWFiCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkcwpAQCAtMCwwICsxLDU1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cCAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cCk7CisKKyAgIHR5cGUgU3RyaW5nX0FjY2VzcyBpcyBhY2Nlc3MgU3RyaW5nOworCisgICB0eXBlIFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCBpcyBuZXcgRmllbGRfVHlwZSB3aXRoCisgICAgICByZWNvcmQKKyAgICAgICAgIFJlZ3VsYXJfRXhwcmVzc2lvbiA6IFN0cmluZ19BY2Nlc3M7CisgICAgICBlbmQgcmVjb3JkOworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBSZWd1bGFyX0V4cHJlc3Npb25fRmllbGQpOworICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5SZWdFeHA7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2YTQyYwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYgpAQCAtMCwwICsxLDExMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIuQ2hvaWNlICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE1ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0ODo1OCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSBpcworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7CisgICBmdW5jdGlvbiBUb19Bcmd1bWVudF9BY2Nlc3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgorICAgICAoU3lzdGVtLkFkZHJlc3MsIEFyZ3VtZW50X0FjY2Vzcyk7CisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgZnVuY3Rpb24gR2VuZXJpY19OZXh0IChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgaXMKKyAgICAgIFJlc3VsdCA6IEJvb2xlYW47CisgICAgICBVZGYgICAgOiBjb25zdGFudCBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3MgOj0KKyAgICAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzCisgICAgICAgIChUb19Bcmd1bWVudF9BY2Nlc3MgKFVzcikuVHlwKTsKKyAgIGJlZ2luCisgICAgICBSZXN1bHQgOj0gTmV4dCAoRmxkLCBVZGYuYWxsKTsKKyAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgZW5kIEdlbmVyaWNfTmV4dDsKKworICAgZnVuY3Rpb24gR2VuZXJpY19QcmV2IChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgaXMKKyAgICAgIFJlc3VsdCA6IEJvb2xlYW47CisgICAgICBVZGYgICAgOiBjb25zdGFudCBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3MgOj0KKyAgICAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzCisgICAgICAgIChUb19Bcmd1bWVudF9BY2Nlc3MgKFVzcikuVHlwKTsKKyAgIGJlZ2luCisgICAgICBSZXN1bHQgOj0gUHJldmlvdXMgKEZsZCwgVWRmLmFsbCk7CisgICAgICByZXR1cm4gQ19JbnQgKEJvb2xlYW4nUG9zIChSZXN1bHQpKTsKKyAgIGVuZCBHZW5lcmljX1ByZXY7CisKKyAgIC0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0KKyAgIGZ1bmN0aW9uIENfR2VuZXJpY19DaG9pY2UgcmV0dXJuIENfRmllbGRfVHlwZQorICAgaXMKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgICAgIFQgICA6IENfRmllbGRfVHlwZTsKKyAgIGJlZ2luCisgICAgICBpZiBNX0dlbmVyaWNfQ2hvaWNlID0gTnVsbF9GaWVsZF9UeXBlIHRoZW4KKyAgICAgICAgIFQgOj0gTmV3X0ZpZWxkdHlwZSAoR2VuZXJpY19GaWVsZF9DaGVjaydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNfQ2hhcl9DaGVjaydBY2Nlc3MpOworICAgICAgICAgaWYgVCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0FyZyAoVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5X0FyZydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVfQXJnJ0FjY2Vzcyk7CisgICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICBSZXMgOj0gU2V0X0ZpZWxkdHlwZV9DaG9pY2UgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNfTmV4dCdBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNfUHJldidBY2Nlc3MpOworICAgICAgICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIE1fR2VuZXJpY19DaG9pY2UgOj0gVDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHByYWdtYSBBc3NlcnQgKE1fR2VuZXJpY19DaG9pY2UgLz0gTnVsbF9GaWVsZF9UeXBlKTsKKyAgICAgIHJldHVybiBNX0dlbmVyaWNfQ2hvaWNlOworICAgZW5kIENfR2VuZXJpY19DaG9pY2U7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIuQ2hvaWNlOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjlmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMKQEAgLTAsMCArMSw5NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0OToyMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlci5DaG9pY2UgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUKKyAgICAgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlci5DaG9pY2UpOworCisgICBzdWJ0eXBlIENfSW50IGlzIEludGVyZmFjZXMuQy5pbnQ7CisKKyAgIHR5cGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2UgaXMgYWJzdHJhY3QgbmV3CisgICAgIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIHdpdGggbnVsbCByZWNvcmQ7CisgICAtLSAgVGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgbWVjaGFuaXNtIHdlIHVzZSB0byBjcmVhdGUgZmllbGQgdHlwZXMgaW4KKyAgIC0tICBBZGE5NSB0aGF0IGFsbG93IHRoZSBwcmV2L25leHQgbWVjaGFuaXNtLiBZb3Ugc2hvdWxkIHlvdXIgb3duIHR5cGUKKyAgIC0tICBkZXJpdmUgZnJvbSB0aGlzIG9uZSBhbmQgaW1wbGVtZW50IHRoZSBGaWVsZF9DaGVjaywgQ2hhcmFjdGVyX0NoZWNrCisgICAtLSAgTmV4dCBhbmQgUHJldmlvdXMgZnVuY3Rpb25zIGZvciB5b3VyIG93biB0eXBlLgorCisgICB0eXBlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzcyBpcyBhY2Nlc3MgYWxsCisgICAgIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlJ0NsYXNzOworCisgICBmdW5jdGlvbiBOZXh0CisgICAgIChGbGQgOiBGaWVsZDsKKyAgICAgIFR5cCA6IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlKSByZXR1cm4gQm9vbGVhbgorICAgICAgaXMgYWJzdHJhY3Q7CisgICAtLSAgSWYgVHJ1ZSBpcyByZXR1cm5lZCwgdGhlIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgYSBuZXh0CisgICAtLSAgdmFsdWUgaW50byB0aGUgZmllbGRzIGJ1ZmZlci4KKworICAgZnVuY3Rpb24gUHJldmlvdXMKKyAgICAgKEZsZCA6IEZpZWxkOworICAgICAgVHlwIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2UpIHJldHVybiBCb29sZWFuCisgICAgICBpcyBhYnN0cmFjdDsKKyAgIC0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhIHByZXZpb3VzCisgICAtLSAgdmFsdWUgaW50byB0aGUgZmllbGRzIGJ1ZmZlci4KKworICAgLS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgfCBQcml2YXRlIFBhcnQuCisgICAtLSAgfAorcHJpdmF0ZQorICAgZnVuY3Rpb24gQ19HZW5lcmljX0Nob2ljZSByZXR1cm4gQ19GaWVsZF9UeXBlOworCisgICBmdW5jdGlvbiBHZW5lcmljX05leHQgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEdlbmVyaWNfTmV4dCk7CisgICAtLSAgVGhpcyBpcyB0aGUgZ2VuZXJpYyBuZXh0IENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGUKKyAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0ZXMuIEl0IHJvdXRlcworICAgLS0gIHRoZSBjYWxsIHRvIHRoZSBOZXh0IGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KKworICAgZnVuY3Rpb24gR2VuZXJpY19QcmV2IChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBHZW5lcmljX1ByZXYpOworICAgLS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgcHJldiBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlCisgICAtLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXMKKyAgIC0tICB0aGUgY2FsbCB0byB0aGUgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0eXBlLgorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0YzEzNgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiCkBAIC0wLDAgKzEsMTMzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTUgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjI4ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIgaXMKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUpCisgICBpcworICAgICAgZnVuY3Rpb24gQWxsb2NhdGVfQXJnIChUIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUnQ2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmd1bWVudF9BY2Nlc3M7CisKKyAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0dlbmVyaWNfVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IEFyZ3VtZW50X0FjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworCisgICAgICBmdW5jdGlvbiBBbGxvY2F0ZV9BcmcgKFQgOiBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSdDbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFyZ3VtZW50X0FjY2VzcworICAgICAgaXMKKyAgICAgICAgIFB0ciA6IGNvbnN0YW50IEZpZWxkX1R5cGVfQWNjZXNzCisgICAgICAgICAgICAgOj0gbmV3IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlJ0NsYXNzJyhUKTsKKyAgICAgIGJlZ2luCisgICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50JyhVc3IgPT4gU3lzdGVtLk51bGxfQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA9PiBQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgPT4gTnVsbF9GaWVsZF9UeXBlKTsKKyAgICAgIGVuZCBBbGxvY2F0ZV9Bcmc7CisKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IEFsbG9jYXRlX0FyZyAoVHlwKSk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7CisgICBmdW5jdGlvbiBUb19Bcmd1bWVudF9BY2Nlc3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgorICAgICAoU3lzdGVtLkFkZHJlc3MsIEFyZ3VtZW50X0FjY2Vzcyk7CisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgZnVuY3Rpb24gR2VuZXJpY19GaWVsZF9DaGVjayAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICBpcworICAgICAgUmVzdWx0IDogQm9vbGVhbjsKKyAgICAgIFVkZiAgICA6IGNvbnN0YW50IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzcyA6PQorICAgICAgICBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3MgKFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKS5UeXApOworICAgYmVnaW4KKyAgICAgIFJlc3VsdCA6PSBGaWVsZF9DaGVjayAoRmxkLCBVZGYuYWxsKTsKKyAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgZW5kIEdlbmVyaWNfRmllbGRfQ2hlY2s7CisKKyAgIGZ1bmN0aW9uIEdlbmVyaWNfQ2hhcl9DaGVjayAoQ2ggIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgIGlzCisgICAgICBSZXN1bHQgOiBCb29sZWFuOworICAgICAgVWRmICAgIDogY29uc3RhbnQgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzIDo9CisgICAgICAgIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzcyAoVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpLlR5cCk7CisgICBiZWdpbgorICAgICAgUmVzdWx0IDo9IENoYXJhY3Rlcl9DaGVjayAoQ2hhcmFjdGVyJ1ZhbCAoQ2gpLCBVZGYuYWxsKTsKKyAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgZW5kIEdlbmVyaWNfQ2hhcl9DaGVjazsKKworICAgLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLQorICAgZnVuY3Rpb24gQ19HZW5lcmljX1R5cGUgcmV0dXJuIENfRmllbGRfVHlwZQorICAgaXMKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgICAgIFQgICA6IENfRmllbGRfVHlwZTsKKyAgIGJlZ2luCisgICAgICBpZiBNX0dlbmVyaWNfVHlwZSA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICBUIDo9IE5ld19GaWVsZHR5cGUgKEdlbmVyaWNfRmllbGRfQ2hlY2snQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmljX0NoYXJfQ2hlY2snQWNjZXNzKTsKKyAgICAgICAgIGlmIFQgPSBOdWxsX0ZpZWxkX1R5cGUgdGhlbgorICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBSZXMgOj0gU2V0X0ZpZWxkdHlwZV9BcmcgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VfQXJnJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlX0FyZydBY2Nlc3MpOworICAgICAgICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIE1fR2VuZXJpY19UeXBlIDo9IFQ7CisgICAgICBlbmQgaWY7CisgICAgICBwcmFnbWEgQXNzZXJ0IChNX0dlbmVyaWNfVHlwZSAvPSBOdWxsX0ZpZWxkX1R5cGUpOworICAgICAgcmV0dXJuIE1fR2VuZXJpY19UeXBlOworICAgZW5kIENfR2VuZXJpY19UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VjNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMKQEAgLTAsMCArMSw5NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlciAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0OTozOCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlciBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyKTsKKyAgIHN1YnR5cGUgQ19JbnQgaXMgSW50ZXJmYWNlcy5DLmludDsKKworICAgdHlwZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBpcyBhYnN0cmFjdCBuZXcgRmllbGRfVHlwZSB3aXRoIG51bGwgcmVjb3JkOworICAgLS0gIFRoaXMgaXMgdGhlIHJvb3Qgb2YgdGhlIG1lY2hhbmlzbSB3ZSB1c2UgdG8gY3JlYXRlIGZpZWxkIHR5cGVzIGluCisgICAtLSAgQWRhOTUuIFlvdSBzaG91bGQgeW91ciBvd24gdHlwZSBkZXJpdmUgZnJvbSB0aGlzIG9uZSBhbmQgaW1wbGVtZW50CisgICAtLSAgdGhlIEZpZWxkX0NoZWNrIGFuZCBDaGFyYWN0ZXJfQ2hlY2sgZnVuY3Rpb25zIGZvciB5b3VyIG93biB0eXBlLgorCisgICB0eXBlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzcyBpcyBhY2Nlc3MgYWxsCisgICAgIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlJ0NsYXNzOworCisgICBmdW5jdGlvbiBGaWVsZF9DaGVjaworICAgICAoRmxkIDogRmllbGQ7CisgICAgICBUeXAgOiBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSkgcmV0dXJuIEJvb2xlYW4KKyAgICAgIGlzIGFic3RyYWN0OworICAgLS0gIElmIFRydWUgaXMgcmV0dXJuZWQsIHRoZSBmaWVsZCBpcyBjb25zaWRlcmVkIHZhbGlkLCBvdGhlcndpc2UgaXQgaXMKKyAgIC0tICBpbnZhbGlkLgorCisgICBmdW5jdGlvbiBDaGFyYWN0ZXJfQ2hlY2sKKyAgICAgKENoICA6IENoYXJhY3RlcjsKKyAgICAgIFR5cCA6IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlKSByZXR1cm4gQm9vbGVhbgorICAgICAgaXMgYWJzdHJhY3Q7CisgICAtLSAgSWYgVHJ1ZSBpcyByZXR1cm5lZCwgdGhlIGNoYXJhY3RlciBpcyBjb25zaWRlcmVkIGFzIHZhbGlkIGZvciB0aGUKKyAgIC0tICBmaWVsZCwgb3RoZXJ3aXNlIGFzIGludmFsaWQuCisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlKTsKKyAgIC0tICBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgdHlwZXMgZGVyaXZlZCBmcm9tIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlLgorICAgLS0gIE5vIG5lZWQgdG8gcmVpbXBsZW1lbnQgaXQgZm9yIHlvdXIgZGVyaXZlZCB0eXBlLgorCisgICAtLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICB8IFByaXZhdGUgUGFydC4KKyAgIC0tICB8IFVzZWQgYnkgdGhlIENob2ljZSBjaGlsZCBwYWNrYWdlLgorcHJpdmF0ZQorICAgZnVuY3Rpb24gQ19HZW5lcmljX1R5cGUgICByZXR1cm4gQ19GaWVsZF9UeXBlOworCisgICBmdW5jdGlvbiBHZW5lcmljX0ZpZWxkX0NoZWNrIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgR2VuZXJpY19GaWVsZF9DaGVjayk7CisgICAtLSAgVGhpcyBpcyB0aGUgZ2VuZXJpYyBGaWVsZF9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGUKKyAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0ZXMuIEl0IHJvdXRlcworICAgLS0gIHRoZSBjYWxsIHRvIHRoZSBGaWVsZF9DaGVjayBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHR5cGUuCisKKyAgIGZ1bmN0aW9uIEdlbmVyaWNfQ2hhcl9DaGVjayAoQ2ggIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgR2VuZXJpY19DaGFyX0NoZWNrKTsKKyAgIC0tICBUaGlzIGlzIHRoZSBnZW5lcmljIENoYXJfQ2hlY2tfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlCisgICAtLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXMKKyAgIC0tICB0aGUgY2FsbCB0byB0aGUgQ2hhcmFjdGVyX0NoZWNrIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlcjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjgxYzgwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiCkBAIC0wLDAgKzEsMjk2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMjAgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjUwOjMzICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Oword2l0aCBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKK3dpdGggQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOworLS0gIHwKKy0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkdHlwZS4zeAorLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tICB8CitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcyBpcworCisgICB1c2UgdHlwZSBTeXN0ZW0uQWRkcmVzczsKKworICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworICAgZnVuY3Rpb24gVG9fQXJndW1lbnRfQWNjZXNzIGlzIG5ldyBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24KKyAgICAgKFN5c3RlbS5BZGRyZXNzLCBBcmd1bWVudF9BY2Nlc3MpOworICAgcHJhZ21hIFdhcm5pbmdzIChPbik7CisKKyAgIGZ1bmN0aW9uIEdldF9GaWVsZHR5cGUgKEYgOiBGaWVsZCkgcmV0dXJuIENfRmllbGRfVHlwZTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9GaWVsZHR5cGUsICJmaWVsZF90eXBlIik7CisKKyAgIGZ1bmN0aW9uIEdldF9BcmcgKEYgOiBGaWVsZCkgcmV0dXJuIFN5c3RlbS5BZGRyZXNzOworICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X0FyZywgImZpZWxkX2FyZyIpOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfVHlwZSAoRmxkIDogaW4gRmllbGQpIHJldHVybiBGaWVsZF9UeXBlX0FjY2VzcworICAgaXMKKyAgICAgIExvd19MZXZlbCA6IGNvbnN0YW50IENfRmllbGRfVHlwZSA6PSBHZXRfRmllbGR0eXBlIChGbGQpOworICAgICAgQXJnIDogQXJndW1lbnRfQWNjZXNzOworICAgYmVnaW4KKyAgICAgIGlmIExvd19MZXZlbCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIGVsc2UKKyAgICAgICAgIGlmIExvd19MZXZlbCA9IE1fQnVpbHRpbl9Sb3V0ZXIgb3IgZWxzZQorICAgICAgICAgICBMb3dfTGV2ZWwgPSBNX0dlbmVyaWNfVHlwZSBvciBlbHNlCisgICAgICAgICAgIExvd19MZXZlbCA9IE1fQ2hvaWNlX1JvdXRlciBvciBlbHNlCisgICAgICAgICAgIExvd19MZXZlbCA9IE1fR2VuZXJpY19DaG9pY2UgdGhlbgorICAgICAgICAgICAgQXJnIDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoR2V0X0FyZyAoRmxkKSk7CisgICAgICAgICAgICBpZiBBcmcgPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgcmV0dXJuIEFyZy5UeXA7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfVHlwZTsKKworICAgZnVuY3Rpb24gTWFrZV9BcmcgKEFyZ3MgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIFN5c3RlbS5BZGRyZXNzCisgICBpcworICAgICAgLS0gIEFjdHVhbGx5IGFyZ3MgaXMgYSBkb3VibGUgaW5kaXJlY3RlZCBwb2ludGVyIHRvIHRoZSBhcmd1bWVudHMKKyAgICAgIC0tICBvZiBhIEMgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gSW4gdGhlb3J5IGl0IGlzIG5vdyBxdWl0ZQorICAgICAgLS0gIGNvbXBsaWNhdGVkIHRvIHdyaXRlIHBvcnRhYmxlIHJvdXRpbmUgdGhhdCByZWFkcyB0aGUgYXJndW1lbnRzLAorICAgICAgLS0gIGJlY2F1c2Ugb25lIGhhcyB0byBrbm93IHRoZSBncm93dGggZGlyZWN0aW9uIG9mIHRoZSBzdGFjayBhbmQKKyAgICAgIC0tICB0aGUgc2l6ZXMgb2YgdGhlIGluZGl2aWR1YWwgYXJndW1lbnRzLgorICAgICAgLS0gIEZvcnR1bmF0ZWx5IHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IGFyZ3VtZW50ICgjMCksCisgICAgICAtLSAgd2Uga25vdyBpdHMgc2l6ZSBhbmQgZm9yIHRoZSBmaXJzdCBhcmcgd2UgZG9uJ3QgY2FyZSBhYm91dAorICAgICAgLS0gIGludG8gd2hpY2ggc3RhY2sgZGlyZWN0aW9uIHdlIGhhdmUgdG8gcHJvY2VlZC4gV2Ugc2ltcGx5CisgICAgICAtLSAgcmVzb2x2ZSB0aGUgZG91YmxlIGluZGlyZWN0aW9uIGFuZCB0aGF0cyBpdC4KKyAgICAgIHR5cGUgViBpcyBhY2Nlc3MgYWxsIFN5c3RlbS5BZGRyZXNzOworICAgICAgZnVuY3Rpb24gVG9fQWNjZXNzIGlzIG5ldyBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKFN5c3RlbS5BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBUb19BY2Nlc3MgKFRvX0FjY2VzcyAoQXJncykuYWxsKS5hbGw7CisgICBlbmQgTWFrZV9Bcmc7CisKKyAgIGZ1bmN0aW9uIENvcHlfQXJnIChVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIFN5c3RlbS5BZGRyZXNzCisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBVc3I7CisgICBlbmQgQ29weV9Bcmc7CisKKyAgIHByb2NlZHVyZSBGcmVlX0FyZyAoVXNyIDogaW4gU3lzdGVtLkFkZHJlc3MpCisgICBpcworICAgICAgcHJvY2VkdXJlIEZyZWVfVHlwZSBpcyBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KKyAgICAgICAgKEZpZWxkX1R5cGUnQ2xhc3MsIEZpZWxkX1R5cGVfQWNjZXNzKTsKKyAgICAgIHByb2NlZHVyZSBGcmVlYXJncyBpcyBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KKyAgICAgICAgKEFyZ3VtZW50LCBBcmd1bWVudF9BY2Nlc3MpOworCisgICAgICBUb19CZV9GcmVlIDogQXJndW1lbnRfQWNjZXNzIDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKTsKKyAgICAgIExvd19MZXZlbCAgOiBDX0ZpZWxkX1R5cGU7CisgICBiZWdpbgorICAgICAgaWYgVG9fQmVfRnJlZSAvPSBudWxsIHRoZW4KKyAgICAgICAgIGlmIFRvX0JlX0ZyZWUuVXNyIC89IFN5c3RlbS5OdWxsX0FkZHJlc3MgdGhlbgorICAgICAgICAgICAgTG93X0xldmVsIDo9IFRvX0JlX0ZyZWUuQ2Z0OworICAgICAgICAgICAgaWYgTG93X0xldmVsLkZyZWVhcmcgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBMb3dfTGV2ZWwuRnJlZWFyZyAoVG9fQmVfRnJlZS5Vc3IpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgaWYgVG9fQmVfRnJlZS5UeXAgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICBGcmVlX1R5cGUgKFRvX0JlX0ZyZWUuVHlwKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIEZyZWVhcmdzIChUb19CZV9GcmVlKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBGcmVlX0FyZzsKKworICAgcHJvY2VkdXJlIFdyYXBfQnVpbHRpbiAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBGaWVsZF9UeXBlJ0NsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0IDogQ19GaWVsZF9UeXBlIDo9IENfQnVpbHRpbl9Sb3V0ZXIpCisgICBpcworICAgICAgVXNyX0FyZyAgIDogY29uc3RhbnQgU3lzdGVtLkFkZHJlc3MgOj0gR2V0X0FyZyAoRmxkKTsKKyAgICAgIExvd19MZXZlbCA6IGNvbnN0YW50IENfRmllbGRfVHlwZSA6PSBHZXRfRmllbGR0eXBlIChGbGQpOworICAgICAgQXJnIDogQXJndW1lbnRfQWNjZXNzOworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZiAgIDogQ19GaWVsZF9UeXBlIDo9IENmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IEFyZ3VtZW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKExvd19MZXZlbCAvPSBOdWxsX0ZpZWxkX1R5cGUpOworICAgICAgaWYgQ2Z0IC89IENfQnVpbHRpbl9Sb3V0ZXIgYW5kIHRoZW4gQ2Z0IC89IENfQ2hvaWNlX1JvdXRlciB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIEFyZyA6PSBuZXcgQXJndW1lbnQnKFVzciA9PiBTeXN0ZW0uTnVsbF9BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwID0+IG5ldyBGaWVsZF9UeXBlJ0NsYXNzJyhUeXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ID0+IEdldF9GaWVsZHR5cGUgKEZsZCkpOworICAgICAgICAgaWYgVXNyX0FyZyAvPSBTeXN0ZW0uTnVsbF9BZGRyZXNzIHRoZW4KKyAgICAgICAgICAgIGlmIExvd19MZXZlbC5Db3B5YXJnIC89IG51bGwgdGhlbgorICAgICAgICAgICAgICAgQXJnLlVzciA6PSBMb3dfTGV2ZWwuQ29weWFyZyAoVXNyX0FyZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBBcmcuVXNyIDo9IFVzcl9Bcmc7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQXJnKTsKKyAgICAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICBlbmQgV3JhcF9CdWlsdGluOworCisgICBmdW5jdGlvbiBGaWVsZF9DaGVja19Sb3V0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICBpcworICAgICAgQXJnICA6IGNvbnN0YW50IEFyZ3VtZW50X0FjY2VzcyA6PSBUb19Bcmd1bWVudF9BY2Nlc3MgKFVzcik7CisgICBiZWdpbgorICAgICAgcHJhZ21hIEFzc2VydCAoQXJnIC89IG51bGwgYW5kIHRoZW4gQXJnLkNmdCAvPSBOdWxsX0ZpZWxkX1R5cGUKKyAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIEFyZy5UeXAgLz0gbnVsbCk7CisgICAgICBpZiBBcmcuQ2Z0LkZjaGVjayAvPSBudWxsIHRoZW4KKyAgICAgICAgIHJldHVybiBBcmcuQ2Z0LkZjaGVjayAoRmxkLCBBcmcuVXNyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAxOworICAgICAgZW5kIGlmOworICAgZW5kIEZpZWxkX0NoZWNrX1JvdXRlcjsKKworICAgZnVuY3Rpb24gQ2hhcl9DaGVja19Sb3V0ZXIgKENoICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgIGlzCisgICAgICBBcmcgIDogY29uc3RhbnQgQXJndW1lbnRfQWNjZXNzIDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKTsKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQorICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKKyAgICAgIGlmIEFyZy5DZnQuQ2NoZWNrIC89IG51bGwgdGhlbgorICAgICAgICAgcmV0dXJuIEFyZy5DZnQuQ2NoZWNrIChDaCwgQXJnLlVzcik7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDaGFyX0NoZWNrX1JvdXRlcjsKKworICAgZnVuY3Rpb24gTmV4dF9Sb3V0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgIGlzCisgICAgICBBcmcgIDogY29uc3RhbnQgQXJndW1lbnRfQWNjZXNzIDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKTsKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQorICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKKyAgICAgIGlmIEFyZy5DZnQuTmV4dCAvPSBudWxsIHRoZW4KKyAgICAgICAgIHJldHVybiBBcmcuQ2Z0Lk5leHQgKEZsZCwgQXJnLlVzcik7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBOZXh0X1JvdXRlcjsKKworICAgZnVuY3Rpb24gUHJldl9Sb3V0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgIGlzCisgICAgICBBcmcgIDogY29uc3RhbnQgQXJndW1lbnRfQWNjZXNzIDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKTsKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQorICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKKyAgICAgIGlmIEFyZy5DZnQuUHJldiAvPSBudWxsIHRoZW4KKyAgICAgICAgIHJldHVybiBBcmcuQ2Z0LlByZXYgKEZsZCwgQXJnLlVzcik7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQcmV2X1JvdXRlcjsKKworICAgLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLQorICAgZnVuY3Rpb24gQ19CdWlsdGluX1JvdXRlciByZXR1cm4gQ19GaWVsZF9UeXBlCisgICBpcworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgICAgVCAgIDogQ19GaWVsZF9UeXBlOworICAgYmVnaW4KKyAgICAgIGlmIE1fQnVpbHRpbl9Sb3V0ZXIgPSBOdWxsX0ZpZWxkX1R5cGUgdGhlbgorICAgICAgICAgVCA6PSBOZXdfRmllbGR0eXBlIChGaWVsZF9DaGVja19Sb3V0ZXInQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyX0NoZWNrX1JvdXRlcidBY2Nlc3MpOworICAgICAgICAgaWYgVCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0FyZyAoVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5X0FyZydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVfQXJnJ0FjY2Vzcyk7CisgICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgTV9CdWlsdGluX1JvdXRlciA6PSBUOworICAgICAgZW5kIGlmOworICAgICAgcHJhZ21hIEFzc2VydCAoTV9CdWlsdGluX1JvdXRlciAvPSBOdWxsX0ZpZWxkX1R5cGUpOworICAgICAgcmV0dXJuIE1fQnVpbHRpbl9Sb3V0ZXI7CisgICBlbmQgQ19CdWlsdGluX1JvdXRlcjsKKworICAgLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLQorICAgZnVuY3Rpb24gQ19DaG9pY2VfUm91dGVyIHJldHVybiBDX0ZpZWxkX1R5cGUKKyAgIGlzCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICAgICBUICAgOiBDX0ZpZWxkX1R5cGU7CisgICBiZWdpbgorICAgICAgaWYgTV9DaG9pY2VfUm91dGVyID0gTnVsbF9GaWVsZF9UeXBlIHRoZW4KKyAgICAgICAgIFQgOj0gTmV3X0ZpZWxkdHlwZSAoRmllbGRfQ2hlY2tfUm91dGVyJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcl9DaGVja19Sb3V0ZXInQWNjZXNzKTsKKyAgICAgICAgIGlmIFQgPSBOdWxsX0ZpZWxkX1R5cGUgdGhlbgorICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBSZXMgOj0gU2V0X0ZpZWxkdHlwZV9BcmcgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VfQXJnJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlX0FyZydBY2Nlc3MpOworICAgICAgICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgUmVzIDo9IFNldF9GaWVsZHR5cGVfQ2hvaWNlIChULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0X1JvdXRlcidBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZfUm91dGVyJ0FjY2Vzcyk7CisgICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgTV9DaG9pY2VfUm91dGVyIDo9IFQ7CisgICAgICBlbmQgaWY7CisgICAgICBwcmFnbWEgQXNzZXJ0IChNX0Nob2ljZV9Sb3V0ZXIgLz0gTnVsbF9GaWVsZF9UeXBlKTsKKyAgICAgIHJldHVybiBNX0Nob2ljZV9Sb3V0ZXI7CisgICBlbmQgQ19DaG9pY2VfUm91dGVyOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlczsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2ViZTUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRiCkBAIC0wLDAgKzEsODUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKKy0tICB8CistLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF91c2VycHRyLjN4CistLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gIHwKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSBpcworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKKworICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZsZCAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX1VzZXJwdHIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFVzZXJfQWNjZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfVXNlcnB0ciwgInNldF9maWVsZF91c2VycHRyIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfVXNlcnB0ciAoRmxkLCBEYXRhKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Vc2VyX0RhdGE7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gIEZpZWxkKSByZXR1cm4gVXNlcl9BY2Nlc3MKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9Vc2VycHRyIChGbGQgOiBGaWVsZCkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfVXNlcnB0ciwgImZpZWxkX3VzZXJwdHIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmllbGRfVXNlcnB0ciAoRmxkKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRmxkICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBEYXRhIDo9IEdldF9Vc2VyX0RhdGEgKEZsZCk7CisgICBlbmQgR2V0X1VzZXJfRGF0YTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzY3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGIKQEAgLTAsMCArMSw4NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZvcm1fVXNlcl9EYXRhICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIHwKKy0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSAgfCBtYW4gcGFnZSBmb3JtX191c2VycHRyLjN4CistLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gIHwKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRm9ybV9Vc2VyX0RhdGEgaXMKKworICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKKworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2VzcykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9Vc2VycHRyIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBVc2VyX0FjY2VzcykgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Gb3JtX1VzZXJwdHIsICJzZXRfZm9ybV91c2VycHRyIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRm9ybV9Vc2VycHRyIChGcm0sIERhdGEpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Vc2VyX0RhdGE7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChGcm0gIDogaW4gIEZvcm0pIHJldHVybiBVc2VyX0FjY2VzcworICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZvcm1fVXNlcnB0ciAoRnJtIDogRm9ybSkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRm9ybV9Vc2VycHRyLCAiZm9ybV91c2VycHRyIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEZvcm1fVXNlcnB0ciAoRnJtKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRnJtICA6IGluICBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpCisgICBpcworICAgYmVnaW4KKyAgICAgIERhdGEgOj0gR2V0X1VzZXJfRGF0YSAoRnJtKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjAxZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiCkBAIC0wLDAgKzEsMTE2MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjI2ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDo0NCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247Cit3aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKword2l0aCBJbnRlcmZhY2VzLkM7IHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Cit3aXRoIEludGVyZmFjZXMuQy5Qb2ludGVyczsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMgaXMKKworICAgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCisgICB0eXBlIENfRmllbGRfQXJyYXkgaXMgYXJyYXkgKE5hdHVyYWwgcmFuZ2UgPD4pIG9mIGFsaWFzZWQgRmllbGQ7CisgICBwYWNrYWdlIEZfQXJyYXkgaXMgbmV3CisgICAgIEludGVyZmFjZXMuQy5Qb2ludGVycyAoTmF0dXJhbCwgRmllbGQsIENfRmllbGRfQXJyYXksIE51bGxfRmllbGQpOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICBzdWJ0eXBlIGNoYXJzX3B0ciBpcyBJbnRlcmZhY2VzLkMuU3RyaW5ncy5jaGFyc19wdHI7CisKKyAgIGZ1bmN0aW9uIEZPU18yX0NJbnQgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoRmllbGRfT3B0aW9uX1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCk7CisKKyAgIGZ1bmN0aW9uIENJbnRfMl9GT1MgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoQ19JbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRfT3B0aW9uX1NldCk7CisKKyAgIGZ1bmN0aW9uIEZybU9TXzJfQ0ludCBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChGb3JtX09wdGlvbl9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQpOworCisgICBmdW5jdGlvbiBDSW50XzJfRnJtT1MgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoQ19JbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybV9PcHRpb25fU2V0KTsKKworICAgcHJvY2VkdXJlIFJlcXVlc3RfTmFtZSAoS2V5ICA6IGluIEZvcm1fUmVxdWVzdF9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGb3JtX1JlcXVlc3RfTmFtZSAoS2V5IDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX1JlcXVlc3RfTmFtZSwgImZvcm1fcmVxdWVzdF9uYW1lIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKEZvcm1fUmVxdWVzdF9OYW1lIChDX0ludCAoS2V5KSksIE5hbWUpOworICAgZW5kIFJlcXVlc3RfTmFtZTsKKworICAgZnVuY3Rpb24gUmVxdWVzdF9OYW1lIChLZXkgOiBGb3JtX1JlcXVlc3RfQ29kZSkgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZvcm1fUmVxdWVzdF9OYW1lIChLZXkgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fUmVxdWVzdF9OYW1lLCAiZm9ybV9yZXF1ZXN0X25hbWUiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKEZvcm1fUmVxdWVzdF9OYW1lIChDX0ludCAoS2V5KSkpOworICAgZW5kIFJlcXVlc3RfTmFtZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX25ldy4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoSGVpZ2h0ICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgV2lkdGggICAgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICBUb3AgICAgICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBMZWZ0ICAgICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIE9mZl9TY3JlZW4gICA6IE5hdHVyYWwgOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgTW9yZV9CdWZmZXJzIDogQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmllbGQKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOZXdmaWVsZCAoSCwgVywgVCwgTCwgTywgTSA6IENfSW50KSByZXR1cm4gRmllbGQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOZXdmaWVsZCwgIm5ld19maWVsZCIpOworICAgICAgRmxkIDogY29uc3RhbnQgRmllbGQgOj0gTmV3ZmllbGQgKENfSW50IChIZWlnaHQpLCBDX0ludCAoV2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChUb3ApLCBDX0ludCAoTGVmdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKE9mZl9TY3JlZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChNb3JlX0J1ZmZlcnMpKTsKKyAgIGJlZ2luCisgICAgICBpZiBGbGQgPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEZsZDsKKyAgIGVuZCBDcmVhdGU7CistLSAgfAorLS0gIHwKKy0tICB8CisgICBwcm9jZWR1cmUgRGVsZXRlIChGbGQgOiBpbiBvdXQgRmllbGQpCisgICBpcworICAgICAgZnVuY3Rpb24gRnJlZV9GaWVsZCAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZyZWVfRmllbGQsICJmcmVlX2ZpZWxkIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gRnJlZV9GaWVsZCAoRmxkKTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICAgICBGbGQgOj0gTnVsbF9GaWVsZDsKKyAgIGVuZCBEZWxldGU7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBEdXBsaWNhdGUgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgVG9wICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIExlZnQgOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBGaWVsZAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIER1cF9GaWVsZCAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBUb3AgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIExlZnQgOiBDX0ludCkgcmV0dXJuIEZpZWxkOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRHVwX0ZpZWxkLCAiZHVwX2ZpZWxkIik7CisKKyAgICAgIEYgOiBjb25zdGFudCBGaWVsZCA6PSBEdXBfRmllbGQgKEZsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChUb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExlZnQpKTsKKyAgIGJlZ2luCisgICAgICBpZiBGID0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBGOworICAgZW5kIER1cGxpY2F0ZTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIExpbmsgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgIFRvcCAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgTGVmdCA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIEZpZWxkCisgICBpcworICAgICAgZnVuY3Rpb24gTG5rX0ZpZWxkIChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFRvcCAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGVmdCA6IENfSW50KSByZXR1cm4gRmllbGQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBMbmtfRmllbGQsICJsaW5rX2ZpZWxkIik7CisKKyAgICAgIEYgOiBjb25zdGFudCBGaWVsZCA6PSBMbmtfRmllbGQgKEZsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChUb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExlZnQpKTsKKyAgIGJlZ2luCisgICAgICBpZiBGID0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBGOworICAgZW5kIExpbms7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfanVzdC4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfSnVzdGlmaWNhdGlvbiAoRmxkICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IDogaW4gRmllbGRfSnVzdGlmaWNhdGlvbiA6PSBOb25lKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9KdXN0IChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfSnVzdCwgInNldF9maWVsZF9qdXN0Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PQorICAgICAgICBTZXRfRmllbGRfSnVzdCAoRmxkLAorICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpZWxkX0p1c3RpZmljYXRpb24nUG9zIChKdXN0KSkpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0p1c3RpZmljYXRpb247CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfSnVzdGlmaWNhdGlvbiAoRmxkIDogRmllbGQpIHJldHVybiBGaWVsZF9KdXN0aWZpY2F0aW9uCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfSnVzdCAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0p1c3QsICJmaWVsZF9qdXN0Iik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEZpZWxkX0p1c3RpZmljYXRpb24nVmFsIChGaWVsZF9KdXN0IChGbGQpKTsKKyAgIGVuZCBHZXRfSnVzdGlmaWNhdGlvbjsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9idWZmZXIuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0J1ZmZlcgorICAgICAoRmxkICAgIDogaW4gRmllbGQ7CisgICAgICBCdWZmZXIgOiBpbiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3Q7CisgICAgICBTdHIgICAgOiBpbiBTdHJpbmcpCisgICBpcworICAgICAgdHlwZSBDaGFyX1B0ciBpcyBhY2Nlc3MgYWxsIEludGVyZmFjZXMuQy5jaGFyOworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9CdWZmZXIgKEZsZCAgICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmbnVtIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTICAgICAgOiBDaGFyX1B0cikKKyAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9CdWZmZXIsICJzZXRfZmllbGRfYnVmZmVyIik7CisKKyAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gU3RyJ0xlbmd0aCk7CisgICAgICBMZW4gOiBzaXplX3Q7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgVG9fQyAoU3RyLCBUeHQsIExlbik7CisgICAgICBSZXMgOj0gU2V0X0ZsZF9CdWZmZXIgKEZsZCwgQ19JbnQgKEJ1ZmZlciksIFR4dCAoVHh0J0ZpcnN0KSdBY2Nlc3MpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQnVmZmVyOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIEdldF9CdWZmZXIKKyAgICAgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OworICAgICAgU3RyICAgIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9CdWZmZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCICAgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0J1ZmZlciwgImZpZWxkX2J1ZmZlciIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChGaWVsZF9CdWZmZXIgKEZsZCwgQ19JbnQgKEJ1ZmZlcikpLCBTdHIpOworICAgZW5kIEdldF9CdWZmZXI7CisKKyAgIGZ1bmN0aW9uIEdldF9CdWZmZXIKKyAgICAgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0KSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfQnVmZmVyIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiAgIDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGaWVsZF9CdWZmZXIsICJmaWVsZF9idWZmZXIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKEZpZWxkX0J1ZmZlciAoRmxkLCBDX0ludCAoQnVmZmVyKSkpOworICAgZW5kIEdldF9CdWZmZXI7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X1N0YXR1cyAoRmxkICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GbGRfU3RhdHVzIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdCAgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9TdGF0dXMsICJzZXRfZmllbGRfc3RhdHVzIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmxkX1N0YXR1cyAoRmxkLCBCb29sZWFuJ1BvcyAoU3RhdHVzKSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1N0YXR1czsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIENoYW5nZWQgKEZsZCA6IEZpZWxkKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX1N0YXR1cyAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX1N0YXR1cywgImZpZWxkX3N0YXR1cyIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBGaWVsZF9TdGF0dXMgKEZsZCk7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIENoYW5nZWQ7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X01heGltdW1fU2l6ZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4IDogaW4gTmF0dXJhbCA6PSAwKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9NYXggKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSAgIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9NYXgsICJzZXRfbWF4X2ZpZWxkIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfTWF4IChGbGQsIENfSW50IChNYXgpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9NYXhpbXVtX1NpemU7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfb3B0cy4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoRmxkICAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRmllbGRfT3B0aW9uX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfT3B0cyAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9PcHRzLCAic2V0X2ZpZWxkX29wdHMiKTsKKworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gRk9TXzJfQ0ludCAoT3B0aW9ucyk7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgUmVzIDo9IFNldF9GaWVsZF9PcHRzIChGbGQsIE9wdCk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9PcHRpb25zOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGbGQgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGaWVsZF9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX09wdHNfT24gKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX09wdHNfT24sICJmaWVsZF9vcHRzX29uIik7CisgICAgICBmdW5jdGlvbiBGaWVsZF9PcHRzX09mZiAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX09wdHNfT2ZmLCAiZmllbGRfb3B0c19vZmYiKTsKKworICAgICAgRXJyIDogRXRpX0Vycm9yOworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gRk9TXzJfQ0ludCAoT3B0aW9ucyk7CisgICBiZWdpbgorICAgICAgaWYgT24gdGhlbgorICAgICAgICAgRXJyIDo9IEZpZWxkX09wdHNfT24gKEZsZCwgT3B0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBGaWVsZF9PcHRzX09mZiAoRmxkLCBPcHQpOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoRXJyKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTd2l0Y2hfT3B0aW9uczsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoRmxkICAgICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBGaWVsZF9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX09wdHMgKEZsZCA6IEZpZWxkKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGaWVsZF9PcHRzLCAiZmllbGRfb3B0cyIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBGaWVsZF9PcHRzIChGbGQpOworICAgYmVnaW4KKyAgICAgIE9wdGlvbnMgOj0gQ0ludF8yX0ZPUyAoUmVzKTsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9PcHRpb25zIChGbGQgOiBGaWVsZCA6PSBOdWxsX0ZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZF9PcHRpb25fU2V0CisgICBpcworICAgICAgRm9zIDogRmllbGRfT3B0aW9uX1NldDsKKyAgIGJlZ2luCisgICAgICBHZXRfT3B0aW9ucyAoRmxkLCBGb3MpOworICAgICAgcmV0dXJuIEZvczsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9Gb3JlZ3JvdW5kCisgICAgIChGbGQgICA6IGluIEZpZWxkOworICAgICAgRm9yZSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfRm9yZSAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX0ZvcmUsICJzZXRfZmllbGRfZm9yZSIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEZvcmUpOworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9CisgICAgICAgIFNldF9GaWVsZF9Gb3JlIChGbGQsIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRm9yZWdyb3VuZDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChGbGQgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfRm9yZSAoRmxkIDogRmllbGQpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0ZvcmUsICJmaWVsZF9mb3JlIik7CisgICBiZWdpbgorICAgICAgRm9yZSA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0ZvcmUgKEZsZCkpLkF0dHI7CisgICBlbmQgRm9yZWdyb3VuZDsKKworICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKEZsZCAgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfRm9yZSAoRmxkIDogRmllbGQpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0ZvcmUsICJmaWVsZF9mb3JlIik7CisgICBiZWdpbgorICAgICAgRm9yZSAgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChGaWVsZF9Gb3JlIChGbGQpKS5BdHRyOworICAgICAgQ29sb3IgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChGaWVsZF9Gb3JlIChGbGQpKS5Db2xvcjsKKyAgIGVuZCBGb3JlZ3JvdW5kOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kCisgICAgIChGbGQgICA6IGluIEZpZWxkOworICAgICAgQmFjayAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfQmFjayAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX0JhY2ssICJzZXRfZmllbGRfYmFjayIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEJhY2spOworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9CisgICAgICAgIFNldF9GaWVsZF9CYWNrIChGbGQsIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQmFja2dyb3VuZDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfQmFjayAoRmxkIDogRmllbGQpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0JhY2ssICJmaWVsZF9iYWNrIik7CisgICBiZWdpbgorICAgICAgQmFjayA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0JhY2sgKEZsZCkpLkF0dHI7CisgICBlbmQgQmFja2dyb3VuZDsKKworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKEZsZCAgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfQmFjayAoRmxkIDogRmllbGQpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0JhY2ssICJmaWVsZF9iYWNrIik7CisgICBiZWdpbgorICAgICAgQmFjayAgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChGaWVsZF9CYWNrIChGbGQpKS5BdHRyOworICAgICAgQ29sb3IgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChGaWVsZF9CYWNrIChGbGQpKS5Db2xvcjsKKyAgIGVuZCBCYWNrZ3JvdW5kOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9QYWRfQ2hhcmFjdGVyIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogaW4gQ2hhcmFjdGVyIDo9IFNwYWNlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9QYWQgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9QYWQsICJzZXRfZmllbGRfcGFkIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfUGFkIChGbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKENoYXJhY3RlcidQb3MgKFBhZCkpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9QYWRfQ2hhcmFjdGVyOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFBhZF9DaGFyYWN0ZXIgKEZsZCA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBvdXQgQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX1BhZCAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX1BhZCwgImZpZWxkX3BhZCIpOworICAgYmVnaW4KKyAgICAgIFBhZCA6PSBDaGFyYWN0ZXInVmFsIChGaWVsZF9QYWQgKEZsZCkpOworICAgZW5kIFBhZF9DaGFyYWN0ZXI7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfaW5mby4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBJbmZvIChGbGQgICAgICAgICAgICAgICAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgTGluZXMgICAgICAgICAgICAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgQ29sdW1ucyAgICAgICAgICAgIDogb3V0IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICBGaXJzdF9Sb3cgICAgICAgICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBGaXJzdF9Db2x1bW4gICAgICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIE9mZl9TY3JlZW4gICAgICAgICA6IG91dCBOYXR1cmFsOworICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxfQnVmZmVycyA6IG91dCBCdWZmZXJfTnVtYmVyKQorICAgaXMKKyAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CisgICAgICBmdW5jdGlvbiBGbGRfSW5mbyAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgTCwgQywgRnIsIEZjLCBPcywgQWIgOiBDX0ludF9BY2Nlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmxkX0luZm8sICJmaWVsZF9pbmZvIik7CisKKyAgICAgIEwsIEMsIEZyLCBGYywgT3MsIEFiIDogYWxpYXNlZCBDX0ludDsKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBGbGRfSW5mbyAoRmxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMJ0FjY2VzcywgQydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyJ0FjY2VzcywgRmMnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcydBY2Nlc3MsIEFiJ0FjY2Vzcyk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIExpbmVzICAgICAgICAgICAgICA6PSBMaW5lX0NvdW50IChMKTsKKyAgICAgICAgIENvbHVtbnMgICAgICAgICAgICA6PSBDb2x1bW5fQ291bnQgKEMpOworICAgICAgICAgRmlyc3RfUm93ICAgICAgICAgIDo9IExpbmVfUG9zaXRpb24gKEZyKTsKKyAgICAgICAgIEZpcnN0X0NvbHVtbiAgICAgICA6PSBDb2x1bW5fUG9zaXRpb24gKEZjKTsKKyAgICAgICAgIE9mZl9TY3JlZW4gICAgICAgICA6PSBOYXR1cmFsIChPcyk7CisgICAgICAgICBBZGRpdGlvbmFsX0J1ZmZlcnMgOj0gQnVmZmVyX051bWJlciAoQWIpOworICAgICAgZW5kIGlmOworICAgZW5kIEluZm87CistLSAgfAorLS0gIHwKKy0tICB8CisgICBwcm9jZWR1cmUgRHluYW1pY19JbmZvIChGbGQgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogb3V0IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCAgICAgOiBvdXQgTmF0dXJhbCkKKyAgIGlzCisgICAgICB0eXBlIENfSW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfSW50OworICAgICAgZnVuY3Rpb24gRHluX0luZm8gKEZsZCA6IEZpZWxkOyBMLCBDLCBNIDogQ19JbnRfQWNjZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEeW5fSW5mbywgImR5bmFtaWNfZmllbGRfaW5mbyIpOworCisgICAgICBMLCBDLCBNIDogYWxpYXNlZCBDX0ludDsKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBEeW5fSW5mbyAoRmxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMJ0FjY2VzcywgQydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0nQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZWxzZQorICAgICAgICAgTGluZXMgICA6PSBMaW5lX0NvdW50IChMKTsKKyAgICAgICAgIENvbHVtbnMgOj0gQ29sdW1uX0NvdW50IChDKTsKKyAgICAgICAgIE1heCAgICAgOj0gTmF0dXJhbCAoTSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgRHluYW1pY19JbmZvOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX3dpbi4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfV2luZG93IChGcm0gOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9XaW4gKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fV2luLCAic2V0X2Zvcm1fd2luIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRm9ybV9XaW4gKEZybSwgV2luKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfV2luZG93OworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAoRnJtIDogRm9ybSkgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZvcm1fV2luIChGcm0gOiBGb3JtKSByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRm9ybV9XaW4sICJmb3JtX3dpbiIpOworCisgICAgICBXIDogY29uc3RhbnQgV2luZG93IDo9IEZvcm1fV2luIChGcm0pOworICAgYmVnaW4KKyAgICAgIHJldHVybiBXOworICAgZW5kIEdldF9XaW5kb3c7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X1N1Yl9XaW5kb3cgKEZybSA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9TdWIgKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fU3ViLCAic2V0X2Zvcm1fc3ViIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRm9ybV9TdWIgKEZybSwgV2luKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU3ViX1dpbmRvdzsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9TdWJfV2luZG93IChGcm0gOiBGb3JtKSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gRm9ybV9TdWIgKEZybSA6IEZvcm0pIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX1N1YiwgImZvcm1fc3ViIik7CisKKyAgICAgIFcgOiBjb25zdGFudCBXaW5kb3cgOj0gRm9ybV9TdWIgKEZybSk7CisgICBiZWdpbgorICAgICAgcmV0dXJuIFc7CisgICBlbmQgR2V0X1N1Yl9XaW5kb3c7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2NhbGUgKEZybSAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KQorICAgaXMKKyAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CisgICAgICBmdW5jdGlvbiBNX1NjYWxlIChGcm0gOiBGb3JtOyBZcCwgWHAgOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fU2NhbGUsICJzY2FsZV9mb3JtIik7CisKKyAgICAgIFgsIFkgOiBhbGlhc2VkIENfSW50OworICAgICAgUmVzICA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBNX1NjYWxlIChGcm0sIFknQWNjZXNzLCBYJ0FjY2Vzcyk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIExpbmVzIDo9IExpbmVfQ291bnQgKFkpOworICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKFgpOworICAgZW5kIFNjYWxlOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBtZW51X2hvb2suM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX0luaXRfSG9vayAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfSW5pdCAoRnJtICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX0luaXQsICJzZXRfZmllbGRfaW5pdCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0ZpZWxkX0luaXQgKEZybSwgUHJvYyk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0ZpZWxkX0luaXRfSG9vazsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVGVybV9Ib29rIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9UZXJtIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfVGVybSwgInNldF9maWVsZF90ZXJtIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfVGVybSAoRnJtLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9GaWVsZF9UZXJtX0hvb2s7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0Zvcm1fSW5pdF9Ib29rIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0Zvcm1fSW5pdCAoRnJtICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRm9ybV9Jbml0LCAic2V0X2Zvcm1faW5pdCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0Zvcm1fSW5pdCAoRnJtLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRm9ybV9Jbml0X0hvb2s7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0Zvcm1fVGVybV9Ib29rIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0Zvcm1fVGVybSAoRnJtICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRm9ybV9UZXJtLCAic2V0X2Zvcm1fdGVybSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0Zvcm1fVGVybSAoRnJtLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Gb3JtX1Rlcm1fSG9vazsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZHMuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBGbGRzIDogaW4gRmllbGRfQXJyYXlfQWNjZXNzKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Gcm1fRmllbGRzIChGcm0gICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZybV9GaWVsZHMsICJzZXRfZm9ybV9maWVsZHMiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEZsZHMgKEZsZHMnTGFzdCkgPSBOdWxsX0ZpZWxkKTsKKyAgICAgIGlmIEZsZHMgKEZsZHMnTGFzdCkgLz0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIFJlcyA6PSBTZXRfRnJtX0ZpZWxkcyAoRnJtLCBGbGRzIChGbGRzJ0ZpcnN0KSdBZGRyZXNzKTsKKyAgICAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgZW5kIFJlZGVmaW5lOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gRmllbGRzIChGcm0gICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgIEluZGV4IDogUG9zaXRpdmUpIHJldHVybiBGaWVsZAorICAgaXMKKyAgICAgIHVzZSBGX0FycmF5OworCisgICAgICBmdW5jdGlvbiBDX0ZpZWxkcyAoRnJtIDogRm9ybSkgcmV0dXJuIFBvaW50ZXI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0ZpZWxkcywgImZvcm1fZmllbGRzIik7CisKKyAgICAgIFAgOiBQb2ludGVyIDo9IENfRmllbGRzIChGcm0pOworICAgYmVnaW4KKyAgICAgIGlmIFAgPSBudWxsIG9yIGVsc2UgSW5kZXggPiBGaWVsZF9Db3VudCAoRnJtKSB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIFAgOj0gUCArIHB0cmRpZmZfdCAoQ19JbnQgKEluZGV4KSAtIDEpOworICAgICAgICAgcmV0dXJuIFAuYWxsOworICAgICAgZW5kIGlmOworICAgZW5kIEZpZWxkczsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEZpZWxkX0NvdW50IChGcm0gOiBGb3JtKSByZXR1cm4gTmF0dXJhbAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIENvdW50IChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDb3VudCwgImZpZWxkX2NvdW50Iik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE5hdHVyYWwgKENvdW50IChGcm0pKTsKKyAgIGVuZCBGaWVsZF9Db3VudDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBNb3ZlIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNb3ZlIChGbGQgOiBGaWVsZDsgTCwgQyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNb3ZlLCAibW92ZV9maWVsZCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gTW92ZSAoRmxkLCBDX0ludCAoTGluZSksIENfSW50IChDb2x1bW4pKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIE1vdmU7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fbmV3LjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gQ3JlYXRlIChGaWVsZHMgOiBGaWVsZF9BcnJheV9BY2Nlc3MpIHJldHVybiBGb3JtCisgICBpcworICAgICAgZnVuY3Rpb24gTmV3Rm9ybSAoRmllbGRzIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBGb3JtOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTmV3Rm9ybSwgIm5ld19mb3JtIik7CisKKyAgICAgIE0gICA6IEZvcm07CisgICBiZWdpbgorICAgICAgcHJhZ21hIEFzc2VydCAoRmllbGRzIChGaWVsZHMnTGFzdCkgPSBOdWxsX0ZpZWxkKTsKKyAgICAgIGlmIEZpZWxkcyAoRmllbGRzJ0xhc3QpIC89IE51bGxfRmllbGQgdGhlbgorICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICBNIDo9IE5ld0Zvcm0gKEZpZWxkcyAoRmllbGRzJ0ZpcnN0KSdBZGRyZXNzKTsKKyAgICAgICAgIGlmIE0gPSBOdWxsX0Zvcm0gdGhlbgorICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICByZXR1cm4gTTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDcmVhdGU7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgRGVsZXRlIChGcm0gOiBpbiBvdXQgRm9ybSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGcmVlIChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGcmVlLCAiZnJlZV9mb3JtIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBGcmVlIChGcm0pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICAgICBGcm0gOj0gTnVsbF9Gb3JtOworICAgZW5kIERlbGV0ZTsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9vcHRzLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChGcm0gICAgIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZvcm1fT3B0aW9uX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9PcHRzIChGcm0gOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Gb3JtX09wdHMsICJzZXRfZm9ybV9vcHRzIik7CisKKyAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IEZybU9TXzJfQ0ludCAoT3B0aW9ucyk7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgUmVzIDo9IFNldF9Gb3JtX09wdHMgKEZybSwgT3B0KTsKKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9PcHRpb25zOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGcm0gICAgIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZvcm1fT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGb3JtX09wdHNfT24gKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX09wdHNfT24sICJmb3JtX29wdHNfb24iKTsKKyAgICAgIGZ1bmN0aW9uIEZvcm1fT3B0c19PZmYgKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRm9ybV9PcHRzX09mZiwgImZvcm1fb3B0c19vZmYiKTsKKworICAgICAgRXJyIDogRXRpX0Vycm9yOworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gRnJtT1NfMl9DSW50IChPcHRpb25zKTsKKyAgIGJlZ2luCisgICAgICBpZiBPbiB0aGVuCisgICAgICAgICBFcnIgOj0gRm9ybV9PcHRzX09uIChGcm0sIE9wdCk7CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gRm9ybV9PcHRzX09mZiAoRnJtLCBPcHQpOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoRXJyKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTd2l0Y2hfT3B0aW9uczsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoRnJtICAgICA6IGluICBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEZvcm1fT3B0aW9uX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGb3JtX09wdHMgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fT3B0cywgImZvcm1fb3B0cyIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBGb3JtX09wdHMgKEZybSk7CisgICBiZWdpbgorICAgICAgT3B0aW9ucyA6PSBDSW50XzJfRnJtT1MgKFJlcyk7CisgICBlbmQgR2V0X09wdGlvbnM7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfT3B0aW9ucyAoRnJtIDogRm9ybSA6PSBOdWxsX0Zvcm0pIHJldHVybiBGb3JtX09wdGlvbl9TZXQKKyAgIGlzCisgICAgICBGb3MgOiBGb3JtX09wdGlvbl9TZXQ7CisgICBiZWdpbgorICAgICAgR2V0X09wdGlvbnMgKEZybSwgRm9zKTsKKyAgICAgIHJldHVybiBGb3M7CisgICBlbmQgR2V0X09wdGlvbnM7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fcG9zdC4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBQb3N0IChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICBQb3N0IDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1fUG9zdCAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTV9Qb3N0LCAicG9zdF9mb3JtIik7CisgICAgICBmdW5jdGlvbiBNX1VucG9zdCAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTV9VbnBvc3QsICJ1bnBvc3RfZm9ybSIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgaWYgUG9zdCB0aGVuCisgICAgICAgICBSZXMgOj0gTV9Qb3N0IChGcm0pOworICAgICAgZWxzZQorICAgICAgICAgUmVzIDo9IE1fVW5wb3N0IChGcm0pOworICAgICAgZW5kIGlmOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQb3N0OworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2N1cnNvci4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBQb3NpdGlvbl9DdXJzb3IgKEZybSA6IEZvcm0pCisgICBpcworICAgICAgZnVuY3Rpb24gUG9zX0Zvcm1fQ3Vyc29yIChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQb3NfRm9ybV9DdXJzb3IsICJwb3NfZm9ybV9jdXJzb3IiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFBvc19Gb3JtX0N1cnNvciAoRnJtKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQb3NpdGlvbl9DdXJzb3I7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fZGF0YS4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIERhdGFfQWhlYWQgKEZybSA6IEZvcm0pIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gQWhlYWQgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEFoZWFkLCAiZGF0YV9haGVhZCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBBaGVhZCAoRnJtKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgRGF0YV9BaGVhZDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIERhdGFfQmVoaW5kIChGcm0gOiBGb3JtKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEJlaGluZCAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQmVoaW5kLCAiZGF0YV9iZWhpbmQiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gQmVoaW5kIChGcm0pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBEYXRhX0JlaGluZDsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9kcml2ZXIuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBEcml2ZXIgKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgIEtleSA6IEtleV9Db2RlKSByZXR1cm4gRHJpdmVyX1Jlc3VsdAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZybV9Ecml2ZXIgKEZybSA6IEZvcm07IEtleSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGcm1fRHJpdmVyLCAiZm9ybV9kcml2ZXIiKTsKKworICAgICAgUiA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBGcm1fRHJpdmVyIChGcm0sIENfSW50IChLZXkpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSIC89IEVfT2sgdGhlbgorICAgICAgICAgaWYgUiA9IEVfVW5rbm93bl9Db21tYW5kIHRoZW4KKyAgICAgICAgICAgIHJldHVybiBVbmtub3duX1JlcXVlc3Q7CisgICAgICAgICBlbHNpZiBSID0gRV9JbnZhbGlkX0ZpZWxkIHRoZW4KKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlkX0ZpZWxkOworICAgICAgICAgZWxzaWYgUiA9IEVfUmVxdWVzdF9EZW5pZWQgdGhlbgorICAgICAgICAgICAgcmV0dXJuIFJlcXVlc3RfRGVuaWVkOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUik7CisgICAgICAgICAgICByZXR1cm4gRm9ybV9PazsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGb3JtX09rOworICAgICAgZW5kIGlmOworICAgZW5kIERyaXZlcjsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9wYWdlLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChGcm0gOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICBGbGQgOiBpbiBGaWVsZCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfQ3VycmVudF9GbGQgKEZybSA6IEZvcm07IEZsZCA6IEZpZWxkKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfQ3VycmVudF9GbGQsICJzZXRfY3VycmVudF9maWVsZCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0N1cnJlbnRfRmxkIChGcm0sIEZsZCk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfQ3VycmVudDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEN1cnJlbnQgKEZybSA6IGluIEZvcm0pIHJldHVybiBGaWVsZAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEN1cnJlbnRfRmxkIChGcm0gOiBGb3JtKSByZXR1cm4gRmllbGQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDdXJyZW50X0ZsZCwgImN1cnJlbnRfZmllbGQiKTsKKworICAgICAgRmxkIDogY29uc3RhbnQgRmllbGQgOj0gQ3VycmVudF9GbGQgKEZybSk7CisgICBiZWdpbgorICAgICAgaWYgRmxkID0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBGbGQ7CisgICBlbmQgQ3VycmVudDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfUGFnZSAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgOiBpbiBQYWdlX051bWJlciA6PSBQYWdlX051bWJlcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRnJtX1BhZ2UgKEZybSA6IEZvcm07IFBnIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Gcm1fUGFnZSwgInNldF9mb3JtX3BhZ2UiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gcm1fUGFnZSAoRnJtLCBDX0ludCAoUGFnZSkpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1BhZ2U7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBQYWdlIChGcm0gOiBGb3JtKSByZXR1cm4gUGFnZV9OdW1iZXIKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRfUGFnZSAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X1BhZ2UsICJmb3JtX3BhZ2UiKTsKKworICAgICAgUCA6IGNvbnN0YW50IENfSW50IDo9IEdldF9QYWdlIChGcm0pOworICAgYmVnaW4KKyAgICAgIGlmIFAgPCAwIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFBhZ2VfTnVtYmVyIChQKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQYWdlOworCisgICBmdW5jdGlvbiBHZXRfSW5kZXggKEZsZCA6IEZpZWxkKSByZXR1cm4gUG9zaXRpdmUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRfRmllbGRpbmRleCAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9GaWVsZGluZGV4LCAiZmllbGRfaW5kZXgiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gR2V0X0ZpZWxkaW5kZXggKEZsZCk7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBQb3NpdGl2ZSAoTmF0dXJhbCAoUmVzKSArIFBvc2l0aXZlJ0ZpcnN0KTsKKyAgIGVuZCBHZXRfSW5kZXg7CisKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9uZXdfcGFnZS4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfTmV3X1BhZ2UgKEZsZCAgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXdfUGFnZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfUGFnZSAoRmxkIDogRmllbGQ7IEZsZyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfUGFnZSwgInNldF9uZXdfcGFnZSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X1BhZ2UgKEZsZCwgQm9vbGVhbidQb3MgKE5ld19QYWdlKSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTmV3X1BhZ2U7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBJc19OZXdfUGFnZSAoRmxkIDogRmllbGQpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSXNfTmV3IChGbGQgOiBGaWVsZCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXNfTmV3LCAibmV3X3BhZ2UiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gSXNfTmV3IChGbGQpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJc19OZXdfUGFnZTsKKworICAgcHJvY2VkdXJlIEZyZWUgKEZBICAgICAgICAgIDogaW4gb3V0IEZpZWxkX0FycmF5X0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICBGcmVlX0ZpZWxkcyA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICBpcworICAgICAgcHJvY2VkdXJlIFJlbGVhc2UgaXMgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCisgICAgICAgIChGaWVsZF9BcnJheSwgRmllbGRfQXJyYXlfQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBGQSAvPSBudWxsIGFuZCB0aGVuIEZyZWVfRmllbGRzIHRoZW4KKyAgICAgICAgIGZvciBJIGluIEZBJ0ZpcnN0IC4uIChGQSdMYXN0IC0gMSkgbG9vcAorICAgICAgICAgICAgaWYgRkEgKEkpIC89IE51bGxfRmllbGQgdGhlbgorICAgICAgICAgICAgICAgRGVsZXRlIChGQSAoSSkpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICBlbmQgaWY7CisgICAgICBSZWxlYXNlIChGQSk7CisgICBlbmQgRnJlZTsKKworICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgZnVuY3Rpb24gRGVmYXVsdF9GaWVsZF9PcHRpb25zIHJldHVybiBGaWVsZF9PcHRpb25fU2V0CisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBHZXRfT3B0aW9ucyAoTnVsbF9GaWVsZCk7CisgICBlbmQgRGVmYXVsdF9GaWVsZF9PcHRpb25zOworCisgICBmdW5jdGlvbiBEZWZhdWx0X0Zvcm1fT3B0aW9ucyByZXR1cm4gRm9ybV9PcHRpb25fU2V0CisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBHZXRfT3B0aW9ucyAoTnVsbF9Gb3JtKTsKKyAgIGVuZCBEZWZhdWx0X0Zvcm1fT3B0aW9uczsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNWQzMwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYgpAQCAtMCwwICsxLDc3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEludGVyZmFjZXMuQzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuSXRlbV9Vc2VyX0RhdGEgaXMKKworICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKKworICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEl0bSAgOiBpbiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2VzcykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfSXRlbV9Vc2VycHRyIChJdG0gIDogSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgOiBVc2VyX0FjY2VzcykgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9JdGVtX1VzZXJwdHIsICJzZXRfaXRlbV91c2VycHRyIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfSXRlbV9Vc2VycHRyIChJdG0sIERhdGEpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Vc2VyX0RhdGE7CisKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEl0bSAgOiBpbiAgSXRlbSkgcmV0dXJuIFVzZXJfQWNjZXNzCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9Vc2VycHRyIChJdG0gOiBJdGVtKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtX1VzZXJwdHIsICJpdGVtX3VzZXJwdHIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gSXRlbV9Vc2VycHRyIChJdG0pOworICAgZW5kIEdldF9Vc2VyX0RhdGE7CisKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2VzcykKKyAgIGlzCisgICBiZWdpbgorICAgICAgRGF0YSA6PSBHZXRfVXNlcl9EYXRhIChJdG0pOworICAgZW5kIEdldF9Vc2VyX0RhdGE7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjllODYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGIKQEAgLTAsMCArMSw3NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGEgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YSBpcworCisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X1VzZXJwdHIgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IFVzZXJfQWNjZXNzKSAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfVXNlcnB0ciwgInNldF9tZW51X3VzZXJwdHIiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X1VzZXJwdHIgKE1lbiwgRGF0YSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1VzZXJfRGF0YTsKKworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoTWVuICA6IGluICBNZW51KSByZXR1cm4gVXNlcl9BY2Nlc3MKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X1VzZXJwdHIgKE1lbiA6IE1lbnUpIHJldHVybiBVc2VyX0FjY2VzczsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfVXNlcnB0ciwgIm1lbnVfdXNlcnB0ciIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBNZW51X1VzZXJwdHIgKE1lbik7CisgICBlbmQgR2V0X1VzZXJfRGF0YTsKKworICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBEYXRhIDo9IEdldF9Vc2VyX0RhdGEgKE1lbik7CisgICBlbmQgR2V0X1VzZXJfRGF0YTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyNGM3NAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYgpAQCAtMCwwICsxLDEwMjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cyAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4yNiAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6NTggJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCit3aXRoIEludGVyZmFjZXMuQzsgdXNlIEludGVyZmFjZXMuQzsKK3dpdGggSW50ZXJmYWNlcy5DLlN0cmluZ3M7IHVzZSBJbnRlcmZhY2VzLkMuU3RyaW5nczsKK3dpdGggSW50ZXJmYWNlcy5DLlBvaW50ZXJzOworCit3aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMgaXMKKworICAgdHlwZSBDX0l0ZW1fQXJyYXkgaXMgYXJyYXkgKE5hdHVyYWwgcmFuZ2UgPD4pIG9mIGFsaWFzZWQgSXRlbTsKKyAgIHBhY2thZ2UgSV9BcnJheSBpcyBuZXcKKyAgICAgSW50ZXJmYWNlcy5DLlBvaW50ZXJzIChOYXR1cmFsLCBJdGVtLCBDX0l0ZW1fQXJyYXksIE51bGxfSXRlbSk7CisKKyAgIHVzZSB0eXBlIFN5c3RlbS5CaXRfT3JkZXI7CisgICBzdWJ0eXBlIGNoYXJzX3B0ciBpcyBJbnRlcmZhY2VzLkMuU3RyaW5ncy5jaGFyc19wdHI7CisKKyAgIGZ1bmN0aW9uIE1PU18yX0NJbnQgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoTWVudV9PcHRpb25fU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50KTsKKworICAgZnVuY3Rpb24gQ0ludF8yX01PUyBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChDX0ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW51X09wdGlvbl9TZXQpOworCisgICBmdW5jdGlvbiBJT1NfMl9DSW50IGlzIG5ldworICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKEl0ZW1fT3B0aW9uX1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCk7CisKKyAgIGZ1bmN0aW9uIENJbnRfMl9JT1MgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoQ19JbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbV9PcHRpb25fU2V0KTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUmVxdWVzdF9OYW1lIChLZXkgIDogaW4gTWVudV9SZXF1ZXN0X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBSZXF1ZXN0X05hbWUgKEtleSA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVxdWVzdF9OYW1lLCAibWVudV9yZXF1ZXN0X25hbWUiKTsKKyAgIGJlZ2luCisgICAgICBGaWxsX1N0cmluZyAoUmVxdWVzdF9OYW1lIChDX0ludCAoS2V5KSksIE5hbWUpOworICAgZW5kIFJlcXVlc3RfTmFtZTsKKworICAgZnVuY3Rpb24gUmVxdWVzdF9OYW1lIChLZXkgOiBNZW51X1JlcXVlc3RfQ29kZSkgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFJlcXVlc3RfTmFtZSAoS2V5IDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXF1ZXN0X05hbWUsICJtZW51X3JlcXVlc3RfbmFtZSIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoUmVxdWVzdF9OYW1lIChDX0ludCAoS2V5KSkpOworICAgZW5kIFJlcXVlc3RfTmFtZTsKKworICAgZnVuY3Rpb24gQ3JlYXRlIChOYW1lICAgICAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gOiBTdHJpbmcgOj0gIiIpIHJldHVybiBJdGVtCisgICBpcworICAgICAgdHlwZSBDaGFyX1B0ciBpcyBhY2Nlc3MgYWxsIEludGVyZmFjZXMuQy5jaGFyOworICAgICAgZnVuY3Rpb24gTmV3aXRlbSAoTmFtZSwgRGVzYyA6IENoYXJfUHRyKSByZXR1cm4gSXRlbTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5ld2l0ZW0sICJuZXdfaXRlbSIpOworCisgICAgICB0eXBlIE5hbWVfU3RyaW5nIGlzIG5ldyBjaGFyX2FycmF5ICgwIC4uIE5hbWUnTGVuZ3RoKTsKKyAgICAgIHR5cGUgTmFtZV9TdHJpbmdfUHRyIGlzIGFjY2VzcyBOYW1lX1N0cmluZzsKKyAgICAgIHByYWdtYSBDb250cm9sbGVkIChOYW1lX1N0cmluZ19QdHIpOworCisgICAgICB0eXBlIERlc2NfU3RyaW5nIGlzIG5ldyBjaGFyX2FycmF5ICgwIC4uIERlc2NyaXB0aW9uJ0xlbmd0aCk7CisgICAgICB0eXBlIERlc2NfU3RyaW5nX1B0ciBpcyBhY2Nlc3MgRGVzY19TdHJpbmc7CisgICAgICBwcmFnbWEgQ29udHJvbGxlZCAoRGVzY19TdHJpbmdfUHRyKTsKKworICAgICAgTmFtZV9TdHIgOiBjb25zdGFudCBOYW1lX1N0cmluZ19QdHIgOj0gbmV3IE5hbWVfU3RyaW5nOworICAgICAgRGVzY19TdHIgOiBjb25zdGFudCBEZXNjX1N0cmluZ19QdHIgOj0gbmV3IERlc2NfU3RyaW5nOworICAgICAgTmFtZV9MZW4sIERlc2NfTGVuIDogc2l6ZV90OworICAgICAgUmVzdWx0IDogSXRlbTsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBOYW1lX1N0ci5hbGwsIE5hbWVfTGVuKTsKKyAgICAgIFRvX0MgKERlc2NyaXB0aW9uLCBEZXNjX1N0ci5hbGwsIERlc2NfTGVuKTsKKyAgICAgIFJlc3VsdCA6PSBOZXdpdGVtIChOYW1lX1N0ci5hbGwgKE5hbWVfU3RyLmFsbCdGaXJzdCknQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NfU3RyLmFsbCAoRGVzY19TdHIuYWxsJ0ZpcnN0KSdBY2Nlc3MpOworICAgICAgaWYgUmVzdWx0ID0gTnVsbF9JdGVtIHRoZW4KKyAgICAgICAgIHJhaXNlIEV0aV9TeXN0ZW1fRXJyb3I7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gUmVzdWx0OworICAgZW5kIENyZWF0ZTsKKworICAgcHJvY2VkdXJlIERlbGV0ZSAoSXRtIDogaW4gb3V0IEl0ZW0pCisgICBpcworICAgICAgZnVuY3Rpb24gRGVzY25hbWUgKEl0bSAgOiBJdGVtKSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVzY25hbWUsICJpdGVtX2Rlc2NyaXB0aW9uIik7CisgICAgICBmdW5jdGlvbiBJdGVtbmFtZSAoSXRtICA6IEl0ZW0pIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtbmFtZSwgIml0ZW1fbmFtZSIpOworCisgICAgICBmdW5jdGlvbiBGcmVlaXRlbSAoSXRtIDogSXRlbSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRnJlZWl0ZW0sICJmcmVlX2l0ZW0iKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgICAgUHRyIDogY2hhcnNfcHRyOworICAgYmVnaW4KKyAgICAgIFB0ciA6PSBEZXNjbmFtZSAoSXRtKTsKKyAgICAgIGlmIFB0ciAvPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICBJbnRlcmZhY2VzLkMuU3RyaW5ncy5GcmVlIChQdHIpOworICAgICAgZW5kIGlmOworICAgICAgUHRyIDo9IEl0ZW1uYW1lIChJdG0pOworICAgICAgaWYgUHRyIC89IE51bGxfUHRyIHRoZW4KKyAgICAgICAgIEludGVyZmFjZXMuQy5TdHJpbmdzLkZyZWUgKFB0cik7CisgICAgICBlbmQgaWY7CisgICAgICBSZXMgOj0gRnJlZWl0ZW0gKEl0bSk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgSXRtIDo9IE51bGxfSXRlbTsKKyAgIGVuZCBEZWxldGU7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2V0X1ZhbHVlIChJdG0gICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfSXRlbV9WYWwgKEl0bSA6IEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfSXRlbV9WYWwsICJzZXRfaXRlbV92YWx1ZSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0l0ZW1fVmFsIChJdG0sIEJvb2xlYW4nUG9zIChWYWx1ZSkpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9WYWx1ZTsKKworICAgZnVuY3Rpb24gVmFsdWUgKEl0bSA6IEl0ZW0pIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9WYWwgKEl0bSA6IEl0ZW0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fVmFsLCAiaXRlbV92YWx1ZSIpOworICAgYmVnaW4KKyAgICAgIGlmIEl0ZW1fVmFsIChJdG0pID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIFZhbHVlOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBWaXNpYmxlIChJdG0gOiBJdGVtKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEl0ZW1fVmlzIChJdG0gOiBJdGVtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtX1ZpcywgIml0ZW1fdmlzaWJsZSIpOworICAgYmVnaW4KKyAgICAgIGlmIEl0ZW1fVmlzIChJdG0pID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIFZpc2libGU7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEl0bSAgICAgOiBpbiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gSXRlbV9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9JdGVtX09wdHMgKEl0bSA6IEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0l0ZW1fT3B0cywgInNldF9pdGVtX29wdHMiKTsKKworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gSU9TXzJfQ0ludCAoT3B0aW9ucyk7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgUmVzIDo9IFNldF9JdGVtX09wdHMgKEl0bSwgT3B0KTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X09wdGlvbnM7CisKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoSXRtICAgICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBJdGVtX09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9PcHRzX09uIChJdG0gOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9PcHRzX09uLCAiaXRlbV9vcHRzX29uIik7CisgICAgICBmdW5jdGlvbiBJdGVtX09wdHNfT2ZmIChJdG0gOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fT3B0c19PZmYsICJpdGVtX29wdHNfb2ZmIik7CisKKyAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IElPU18yX0NJbnQgKE9wdGlvbnMpOworICAgICAgRXJyIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIGlmIE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBJdGVtX09wdHNfT24gKEl0bSwgT3B0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBJdGVtX09wdHNfT2ZmIChJdG0sIE9wdCk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChFcnIpOworICAgICAgZW5kIGlmOworICAgZW5kIFN3aXRjaF9PcHRpb25zOworCisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEl0bSAgICAgOiBpbiAgSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBJdGVtX09wdGlvbl9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9PcHRzIChJdG0gOiBJdGVtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtX09wdHMsICJpdGVtX29wdHMiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gSXRlbV9PcHRzIChJdG0pOworICAgYmVnaW4KKyAgICAgIE9wdGlvbnMgOj0gQ0ludF8yX0lPUyAoUmVzKTsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKworICAgZnVuY3Rpb24gR2V0X09wdGlvbnMgKEl0bSA6IEl0ZW0gOj0gTnVsbF9JdGVtKSByZXR1cm4gSXRlbV9PcHRpb25fU2V0CisgICBpcworICAgICAgSW9zIDogSXRlbV9PcHRpb25fU2V0OworICAgYmVnaW4KKyAgICAgIEdldF9PcHRpb25zIChJdG0sIElvcyk7CisgICAgICByZXR1cm4gSW9zOworICAgZW5kIEdldF9PcHRpb25zOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIE5hbWUgKEl0bSAgOiBpbiBJdGVtOworICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEl0ZW1uYW1lIChJdG0gOiBJdGVtKSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbW5hbWUsICJpdGVtX25hbWUiKTsKKyAgIGJlZ2luCisgICAgICBGaWxsX1N0cmluZyAoSXRlbW5hbWUgKEl0bSksIE5hbWUpOworICAgZW5kIE5hbWU7CisKKyAgIGZ1bmN0aW9uIE5hbWUgKEl0bSA6IGluIEl0ZW0pIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBJdGVtbmFtZSAoSXRtIDogSXRlbSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1uYW1lLCAiaXRlbV9uYW1lIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEZpbGxfU3RyaW5nIChJdGVtbmFtZSAoSXRtKSk7CisgICBlbmQgTmFtZTsKKworICAgcHJvY2VkdXJlIERlc2NyaXB0aW9uIChJdG0gICAgICAgICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEZXNjbmFtZSAoSXRtICA6IEl0ZW0pIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZXNjbmFtZSwgIml0ZW1fZGVzY3JpcHRpb24iKTsKKyAgIGJlZ2luCisgICAgICBGaWxsX1N0cmluZyAoRGVzY25hbWUgKEl0bSksIERlc2NyaXB0aW9uKTsKKyAgIGVuZCBEZXNjcmlwdGlvbjsKKworICAgZnVuY3Rpb24gRGVzY3JpcHRpb24gKEl0bSA6IGluIEl0ZW0pIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEZXNjbmFtZSAoSXRtICA6IEl0ZW0pIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZXNjbmFtZSwgIml0ZW1fZGVzY3JpcHRpb24iKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKERlc2NuYW1lIChJdG0pKTsKKyAgIGVuZCBEZXNjcmlwdGlvbjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfQ3VycmVudCAoTWVuIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSXRtIDogaW4gSXRlbSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfQ3Vycl9JdGVtIChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRtIDogSXRlbSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0N1cnJfSXRlbSwgInNldF9jdXJyZW50X2l0ZW0iKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9DdXJyX0l0ZW0gKE1lbiwgSXRtKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9DdXJyZW50OworCisgICBmdW5jdGlvbiBDdXJyZW50IChNZW4gOiBNZW51KSByZXR1cm4gSXRlbQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEN1cnJfSXRlbSAoTWVuIDogTWVudSkgcmV0dXJuIEl0ZW07CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDdXJyX0l0ZW0sICJjdXJyZW50X2l0ZW0iKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgSXRlbSA6PSBDdXJyX0l0ZW0gKE1lbik7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gTnVsbF9JdGVtIHRoZW4KKyAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIFJlczsKKyAgIGVuZCBDdXJyZW50OworCisgICBwcm9jZWR1cmUgU2V0X1RvcF9Sb3cgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lIDogaW4gTGluZV9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfVG9wcm93IChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X1RvcHJvdywgInNldF90b3Bfcm93Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfVG9wcm93IChNZW4sIENfSW50IChMaW5lKSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1RvcF9Sb3c7CisKKyAgIGZ1bmN0aW9uIFRvcF9Sb3cgKE1lbiA6IE1lbnUpIHJldHVybiBMaW5lX1Bvc2l0aW9uCisgICBpcworICAgICAgZnVuY3Rpb24gVG9wcm93IChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBUb3Byb3csICJ0b3Bfcm93Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IFRvcHJvdyAoTWVuKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIExpbmVfUG9zaXRpb24gKFJlcyk7CisgICBlbmQgVG9wX1JvdzsKKworICAgZnVuY3Rpb24gR2V0X0luZGV4IChJdG0gOiBJdGVtKSByZXR1cm4gUG9zaXRpdmUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRfSXRlbWluZGV4IChJdG0gOiBJdGVtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfSXRlbWluZGV4LCAiaXRlbV9pbmRleCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBHZXRfSXRlbWluZGV4IChJdG0pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgTWVudV9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gUG9zaXRpdmUgKE5hdHVyYWwgKFJlcykgKyBQb3NpdGl2ZSdGaXJzdCk7CisgICBlbmQgR2V0X0luZGV4OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFBvc3QgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgIFBvc3QgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gTV9Qb3N0IChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNX1Bvc3QsICJwb3N0X21lbnUiKTsKKyAgICAgIGZ1bmN0aW9uIE1fVW5wb3N0IChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNX1VucG9zdCwgInVucG9zdF9tZW51Iik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBpZiBQb3N0IHRoZW4KKyAgICAgICAgIFJlcyA6PSBNX1Bvc3QgKE1lbik7CisgICAgICBlbHNlCisgICAgICAgICBSZXMgOj0gTV9VbnBvc3QgKE1lbik7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFBvc3Q7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gTWVudV9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X09wdHMgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfT3B0cywgInNldF9tZW51X29wdHMiKTsKKworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gTU9TXzJfQ0ludCAoT3B0aW9ucyk7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgUmVzIDo9IFNldF9NZW51X09wdHMgKE1lbiwgT3B0KTsKKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9PcHRpb25zOworCisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gTWVudV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfT3B0c19PbiAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfT3B0c19PbiwgIm1lbnVfb3B0c19vbiIpOworICAgICAgZnVuY3Rpb24gTWVudV9PcHRzX09mZiAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X09wdHNfT2ZmLCAibWVudV9vcHRzX29mZiIpOworCisgICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBNT1NfMl9DSW50IChPcHRpb25zKTsKKyAgICAgIEVyciA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBpZiBPbiB0aGVuCisgICAgICAgICBFcnIgOj0gTWVudV9PcHRzX09uICAoTWVuLCBPcHQpOworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IE1lbnVfT3B0c19PZmYgKE1lbiwgT3B0KTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKEVycik7CisgICAgICBlbmQgaWY7CisgICBlbmQgU3dpdGNoX09wdGlvbnM7CisKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoTWVuICAgICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgTWVudV9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfT3B0cyAoTWVuIDogTWVudSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9PcHRzLCAibWVudV9vcHRzIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IE1lbnVfT3B0cyAoTWVuKTsKKyAgIGJlZ2luCisgICAgICBPcHRpb25zIDo9IENJbnRfMl9NT1MgKFJlcyk7CisgICBlbmQgR2V0X09wdGlvbnM7CisKKyAgIGZ1bmN0aW9uIEdldF9PcHRpb25zIChNZW4gOiBNZW51IDo9IE51bGxfTWVudSkgcmV0dXJuIE1lbnVfT3B0aW9uX1NldAorICAgaXMKKyAgICAgIE1vcyA6IE1lbnVfT3B0aW9uX1NldDsKKyAgIGJlZ2luCisgICAgICBHZXRfT3B0aW9ucyAoTWVuLCBNb3MpOworICAgICAgcmV0dXJuIE1vczsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfV2luZG93IChNZW4gOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfTWVudV9XaW4gKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfV2luLCAic2V0X21lbnVfd2luIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9XaW4gKE1lbiwgV2luKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfV2luZG93OworCisgICBmdW5jdGlvbiBHZXRfV2luZG93IChNZW4gOiBNZW51KSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9XaW4gKE1lbiA6IE1lbnUpIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X1dpbiwgIm1lbnVfd2luIik7CisKKyAgICAgIFcgOiBjb25zdGFudCBXaW5kb3cgOj0gTWVudV9XaW4gKE1lbik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIFc7CisgICBlbmQgR2V0X1dpbmRvdzsKKworICAgcHJvY2VkdXJlIFNldF9TdWJfV2luZG93IChNZW4gOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfU3ViIChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X1N1YiwgInNldF9tZW51X3N1YiIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfU3ViIChNZW4sIFdpbik7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1N1Yl9XaW5kb3c7CisKKyAgIGZ1bmN0aW9uIEdldF9TdWJfV2luZG93IChNZW4gOiBNZW51KSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9TdWIgKE1lbiA6IE1lbnUpIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X1N1YiwgIm1lbnVfc3ViIik7CisKKyAgICAgIFcgOiBjb25zdGFudCBXaW5kb3cgOj0gTWVudV9TdWIgKE1lbik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIFc7CisgICBlbmQgR2V0X1N1Yl9XaW5kb3c7CisKKyAgIHByb2NlZHVyZSBTY2FsZSAoTWVuICAgICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpCisgICBpcworICAgICAgdHlwZSBDX0ludF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIE1fU2NhbGUgKE1lbiAgICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICBZcCwgWHAgOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fU2NhbGUsICJzY2FsZV9tZW51Iik7CisKKyAgICAgIFgsIFkgOiBhbGlhc2VkIENfSW50OworICAgICAgUmVzICA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBNX1NjYWxlIChNZW4sIFknQWNjZXNzLCBYJ0FjY2Vzcyk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIExpbmVzIDo9IExpbmVfQ291bnQgKFkpOworICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKFgpOworICAgZW5kIFNjYWxlOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFBvc2l0aW9uX0N1cnNvciAoTWVuIDogTWVudSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBQb3NfTWVudV9DdXJzb3IgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFBvc19NZW51X0N1cnNvciwgInBvc19tZW51X2N1cnNvciIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gUG9zX01lbnVfQ3Vyc29yIChNZW4pOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFBvc2l0aW9uX0N1cnNvcjsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9NYXJrIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CisgICAgICBmdW5jdGlvbiBTZXRfTWFyayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IENoYXJfUHRyKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWFyaywgInNldF9tZW51X21hcmsiKTsKKworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiBNYXJrJ0xlbmd0aCk7CisgICAgICBMZW4gOiBzaXplX3Q7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgVG9fQyAoTWFyaywgVHh0LCBMZW4pOworICAgICAgUmVzIDo9IFNldF9NYXJrIChNZW4sIFR4dCAoVHh0J0ZpcnN0KSdBY2Nlc3MpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTWFyazsKKworICAgcHJvY2VkdXJlIE1hcmsgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICBNYXJrIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRfTWVudV9NYXJrIChNZW4gOiBNZW51KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X01lbnVfTWFyaywgIm1lbnVfbWFyayIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChHZXRfTWVudV9NYXJrIChNZW4pLCBNYXJrKTsKKyAgIGVuZCBNYXJrOworCisgICBmdW5jdGlvbiBNYXJrIChNZW4gOiBNZW51KSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gR2V0X01lbnVfTWFyayAoTWVuIDogTWVudSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9NZW51X01hcmssICJtZW51X21hcmsiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKEdldF9NZW51X01hcmsgKE1lbikpOworICAgZW5kIE1hcms7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfRm9yZWdyb3VuZAorICAgICAoTWVuICAgOiBpbiBNZW51OworICAgICAgRm9yZSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfTWVudV9Gb3JlIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfRm9yZSwgInNldF9tZW51X2ZvcmUiKTsKKworICAgICAgQ2ggOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBGb3JlKTsKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9Gb3JlIChNZW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRm9yZWdyb3VuZDsKKworICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfRm9yZSAoTWVuIDogTWVudSkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9Gb3JlLCAibWVudV9mb3JlIik7CisgICBiZWdpbgorICAgICAgRm9yZSA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfRm9yZSAoTWVuKSkuQXR0cjsKKyAgIGVuZCBGb3JlZ3JvdW5kOworCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfRm9yZSAoTWVuIDogTWVudSkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9Gb3JlLCAibWVudV9mb3JlIik7CisgICBiZWdpbgorICAgICAgRm9yZSAgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0ZvcmUgKE1lbikpLkF0dHI7CisgICAgICBDb2xvciA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfRm9yZSAoTWVuKSkuQ29sb3I7CisgICBlbmQgRm9yZWdyb3VuZDsKKworICAgcHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kCisgICAgIChNZW4gICA6IGluIE1lbnU7CisgICAgICBCYWNrICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X0JhY2sgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9CYWNrLCAic2V0X21lbnVfYmFjayIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEJhY2spOworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X0JhY2sgKE1lbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9CYWNrZ3JvdW5kOworCisgICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9CYWNrIChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0JhY2ssICJtZW51X2JhY2siKTsKKyAgIGJlZ2luCisgICAgICBCYWNrIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9CYWNrIChNZW4pKS5BdHRyOworICAgZW5kIEJhY2tncm91bmQ7CisKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9CYWNrIChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0JhY2ssICJtZW51X2JhY2siKTsKKyAgIGJlZ2luCisgICAgICBCYWNrICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfQmFjayAoTWVuKSkuQXR0cjsKKyAgICAgIENvbG9yIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9CYWNrIChNZW4pKS5Db2xvcjsKKyAgIGVuZCBCYWNrZ3JvdW5kOworCisgICBwcm9jZWR1cmUgU2V0X0dyZXkgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgR3JleSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X0dyZXkgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9HcmV5LCAic2V0X21lbnVfZ3JleSIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEdyZXkpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfR3JleSAoTWVuLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0dyZXk7CisKKyAgIHByb2NlZHVyZSBHcmV5IChNZW4gIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgR3JleSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X0dyZXkgKE1lbiA6IE1lbnUpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfR3JleSwgIm1lbnVfZ3JleSIpOworICAgYmVnaW4KKyAgICAgIEdyZXkgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0dyZXkgKE1lbikpLkF0dHI7CisgICBlbmQgR3JleTsKKworICAgcHJvY2VkdXJlIEdyZXkgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICBHcmV5IDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9HcmV5IChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0dyZXksICJtZW51X2dyZXkiKTsKKyAgIGJlZ2luCisgICAgICBHcmV5ICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfR3JleSAoTWVuKSkuQXR0cjsKKyAgICAgIENvbG9yIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9HcmV5IChNZW4pKS5Db2xvcjsKKyAgIGVuZCBHcmV5OworCisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKE1lbiA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IGluIENoYXJhY3RlciA6PSBTcGFjZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfTWVudV9QYWQgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9QYWQsICJzZXRfbWVudV9wYWQiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X1BhZCAoTWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKENoYXJhY3RlcidQb3MgKFBhZCkpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9QYWRfQ2hhcmFjdGVyOworCisgICBwcm9jZWR1cmUgUGFkX0NoYXJhY3RlciAoTWVuIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogb3V0IENoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X1BhZCAoTWVuIDogTWVudSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9QYWQsICJtZW51X3BhZCIpOworICAgYmVnaW4KKyAgICAgIFBhZCA6PSBDaGFyYWN0ZXInVmFsIChNZW51X1BhZCAoTWVuKSk7CisgICBlbmQgUGFkX0NoYXJhY3RlcjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfU3BhY2luZyAoTWVuICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjciA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IGluIExpbmVfUG9zaXRpb24gICA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9TcGFjaW5nIChNZW4gICAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBELCBSLCBDIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9TcGFjaW5nLCAic2V0X21lbnVfc3BhY2luZyIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X1NwYWNpbmcgKE1lbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc2NyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFJvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDb2wpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9TcGFjaW5nOworCisgICBwcm9jZWR1cmUgU3BhY2luZyAoTWVuICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgIERlc2NyIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICB0eXBlIENfSW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfSW50OworICAgICAgZnVuY3Rpb24gR2V0X1NwYWNpbmcgKE1lbiAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQsIFIsIEMgOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9TcGFjaW5nLCAibWVudV9zcGFjaW5nIik7CisKKyAgICAgIEQsIFIsIEMgOiBhbGlhc2VkIENfSW50OworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IEdldF9TcGFjaW5nIChNZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQydBY2Nlc3MpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbHNlCisgICAgICAgICBEZXNjciA6PSBDb2x1bW5fUG9zaXRpb24gKEQpOworICAgICAgICAgUm93ICAgOj0gTGluZV9Qb3NpdGlvbiAoUik7CisgICAgICAgICBDb2wgICA6PSBDb2x1bW5fUG9zaXRpb24gKEMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNwYWNpbmc7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBTZXRfUGF0dGVybiAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CisgICAgICBmdW5jdGlvbiBTZXRfUGF0dGVybiAoTWVuICAgICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybiA6IENoYXJfUHRyKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfUGF0dGVybiwgInNldF9tZW51X3BhdHRlcm4iKTsKKworICAgICAgUyAgIDogY2hhcl9hcnJheSAoMCAuLiBUZXh0J0xlbmd0aCk7CisgICAgICBMICAgOiBzaXplX3Q7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgVG9fQyAoVGV4dCwgUywgTCk7CisgICAgICBSZXMgOj0gU2V0X1BhdHRlcm4gKE1lbiwgUyAoUydGaXJzdCknQWNjZXNzKTsKKyAgICAgIGNhc2UgUmVzIGlzCisgICAgICAgICB3aGVuIEVfTm9fTWF0Y2ggPT4gcmV0dXJuIEZhbHNlOworICAgICAgICAgd2hlbiBFX09rICAgICAgID0+IHJldHVybiBUcnVlOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgY2FzZTsKKyAgIGVuZCBTZXRfUGF0dGVybjsKKworICAgcHJvY2VkdXJlIFBhdHRlcm4gKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICBUZXh0IDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRfUGF0dGVybiAoTWVuIDogTWVudSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9QYXR0ZXJuLCAibWVudV9wYXR0ZXJuIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKEdldF9QYXR0ZXJuIChNZW4pLCBUZXh0KTsKKyAgIGVuZCBQYXR0ZXJuOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9Gb3JtYXQgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBpbiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBpbiBDb2x1bW5fQ291bnQpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfRm10IChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X0ZtdCwgInNldF9tZW51X2Zvcm1hdCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfRm10IChNZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoTGluZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKENvbHVtbnMpKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRm9ybWF0OworCisgICBwcm9jZWR1cmUgRm9ybWF0IChNZW4gICAgIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCkKKyAgIGlzCisgICAgICB0eXBlIENfSW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfSW50OworICAgICAgZnVuY3Rpb24gTWVudV9GbXQgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIFksIFggOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfRm10LCAibWVudV9mb3JtYXQiKTsKKworICAgICAgTCwgQyA6IGFsaWFzZWQgQ19JbnQ7CisgICAgICBSZXMgIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IE1lbnVfRm10IChNZW4sIEwnQWNjZXNzLCBDJ0FjY2Vzcyk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIExpbmVzICAgOj0gTGluZV9Db3VudCAoTCk7CisgICAgICAgICBDb2x1bW5zIDo9IENvbHVtbl9Db3VudCAoQyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgRm9ybWF0OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9JdGVtX0luaXRfSG9vayAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gTWVudV9Ib29rX0Z1bmN0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9JdGVtX0luaXQgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0l0ZW1fSW5pdCwgInNldF9pdGVtX2luaXQiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9JdGVtX0luaXQgKE1lbiwgUHJvYyk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0l0ZW1fSW5pdF9Ib29rOworCisgICBwcm9jZWR1cmUgU2V0X0l0ZW1fVGVybV9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0l0ZW1fVGVybSAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfSXRlbV9UZXJtLCAic2V0X2l0ZW1fdGVybSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0l0ZW1fVGVybSAoTWVuLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9JdGVtX1Rlcm1fSG9vazsKKworICAgcHJvY2VkdXJlIFNldF9NZW51X0luaXRfSG9vayAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gTWVudV9Ib29rX0Z1bmN0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X0luaXQgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfSW5pdCwgInNldF9tZW51X2luaXQiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X0luaXQgKE1lbiwgUHJvYyk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X01lbnVfSW5pdF9Ib29rOworCisgICBwcm9jZWR1cmUgU2V0X01lbnVfVGVybV9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfVGVybSAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9UZXJtLCAic2V0X21lbnVfdGVybSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfVGVybSAoTWVuLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9NZW51X1Rlcm1fSG9vazsKKworICAgZnVuY3Rpb24gR2V0X0l0ZW1fSW5pdF9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9Jbml0IChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9Jbml0LCAiaXRlbV9pbml0Iik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEl0ZW1fSW5pdCAoTWVuKTsKKyAgIGVuZCBHZXRfSXRlbV9Jbml0X0hvb2s7CisKKyAgIGZ1bmN0aW9uIEdldF9JdGVtX1Rlcm1fSG9vayAoTWVuIDogTWVudSkgcmV0dXJuIE1lbnVfSG9va19GdW5jdGlvbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEl0ZW1fVGVybSAoTWVuIDogTWVudSkgcmV0dXJuIE1lbnVfSG9va19GdW5jdGlvbjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fVGVybSwgIml0ZW1fdGVybSIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBJdGVtX1Rlcm0gKE1lbik7CisgICBlbmQgR2V0X0l0ZW1fVGVybV9Ib29rOworCisgICBmdW5jdGlvbiBHZXRfTWVudV9Jbml0X0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb24KKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X0luaXQgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0luaXQsICJtZW51X2luaXQiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTWVudV9Jbml0IChNZW4pOworICAgZW5kIEdldF9NZW51X0luaXRfSG9vazsKKworICAgZnVuY3Rpb24gR2V0X01lbnVfVGVybV9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9UZXJtIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9UZXJtLCAibWVudV90ZXJtIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE1lbnVfVGVybSAoTWVuKTsKKyAgIGVuZCBHZXRfTWVudV9UZXJtX0hvb2s7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBpbiBJdGVtX0FycmF5X0FjY2VzcykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfSXRlbXMgKE1lbiAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0l0ZW1zLCAic2V0X21lbnVfaXRlbXMiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEl0ZW1zIChJdGVtcydMYXN0KSA9IE51bGxfSXRlbSk7CisgICAgICBpZiBJdGVtcyAoSXRlbXMnTGFzdCkgLz0gTnVsbF9JdGVtIHRoZW4KKyAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgUmVzIDo9IFNldF9JdGVtcyAoTWVuLCBJdGVtcy5hbGwnQWRkcmVzcyk7CisgICAgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWRlZmluZTsKKworICAgZnVuY3Rpb24gSXRlbV9Db3VudCAoTWVuIDogTWVudSkgcmV0dXJuIE5hdHVyYWwKKyAgIGlzCisgICAgICBmdW5jdGlvbiBDb3VudCAoTWVuIDogTWVudSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ291bnQsICJpdGVtX2NvdW50Iik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE5hdHVyYWwgKENvdW50IChNZW4pKTsKKyAgIGVuZCBJdGVtX0NvdW50OworCisgICBmdW5jdGlvbiBJdGVtcyAoTWVuICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgIEluZGV4IDogUG9zaXRpdmUpIHJldHVybiBJdGVtCisgICBpcworICAgICAgdXNlIElfQXJyYXk7CisKKyAgICAgIGZ1bmN0aW9uIENfTWl0ZW1zIChNZW4gOiBNZW51KSByZXR1cm4gUG9pbnRlcjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfTWl0ZW1zLCAibWVudV9pdGVtcyIpOworCisgICAgICBQIDogUG9pbnRlciA6PSBDX01pdGVtcyAoTWVuKTsKKyAgIGJlZ2luCisgICAgICBpZiBQID0gbnVsbCBvciBlbHNlIEluZGV4ID4gSXRlbV9Db3VudCAoTWVuKSB0aGVuCisgICAgICAgICByYWlzZSBNZW51X0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIFAgOj0gUCArIHB0cmRpZmZfdCAoQ19JbnQgKEluZGV4KSAtIDEpOworICAgICAgICAgcmV0dXJuIFAuYWxsOworICAgICAgZW5kIGlmOworICAgZW5kIEl0ZW1zOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBDcmVhdGUgKEl0ZW1zIDogSXRlbV9BcnJheV9BY2Nlc3MpIHJldHVybiBNZW51CisgICBpcworICAgICAgZnVuY3Rpb24gTmV3bWVudSAoSXRlbXMgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIE1lbnU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOZXdtZW51LCAibmV3X21lbnUiKTsKKworICAgICAgTSAgIDogTWVudTsKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChJdGVtcyAoSXRlbXMnTGFzdCkgPSBOdWxsX0l0ZW0pOworICAgICAgaWYgSXRlbXMgKEl0ZW1zJ0xhc3QpIC89IE51bGxfSXRlbSB0aGVuCisgICAgICAgICByYWlzZSBNZW51X0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIE0gOj0gTmV3bWVudSAoSXRlbXMuYWxsJ0FkZHJlc3MpOworICAgICAgICAgaWYgTSA9IE51bGxfTWVudSB0aGVuCisgICAgICAgICAgICByYWlzZSBNZW51X0V4Y2VwdGlvbjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHJldHVybiBNOworICAgICAgZW5kIGlmOworICAgZW5kIENyZWF0ZTsKKworICAgcHJvY2VkdXJlIERlbGV0ZSAoTWVuIDogaW4gb3V0IE1lbnUpCisgICBpcworICAgICAgZnVuY3Rpb24gRnJlZSAoTWVuIDogTWVudSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRnJlZSwgImZyZWVfbWVudSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gRnJlZSAoTWVuKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgTWVuIDo9IE51bGxfTWVudTsKKyAgIGVuZCBEZWxldGU7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gRHJpdmVyIChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICBLZXkgOiBLZXlfQ29kZSkgcmV0dXJuIERyaXZlcl9SZXN1bHQKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEcml2ZXIgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIEtleSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEcml2ZXIsICJtZW51X2RyaXZlciIpOworCisgICAgICBSIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IERyaXZlciAoTWVuLCBDX0ludCAoS2V5KSk7CisgICBiZWdpbgorICAgICAgaWYgUiAvPSBFX09rIHRoZW4KKyAgICAgICAgIGNhc2UgUiBpcworICAgICAgICAgICAgd2hlbiBFX1Vua25vd25fQ29tbWFuZCAgPT4gcmV0dXJuIFVua25vd25fUmVxdWVzdDsKKyAgICAgICAgICAgIHdoZW4gRV9Ob19NYXRjaCAgICAgICAgID0+IHJldHVybiBOb19NYXRjaDsKKyAgICAgICAgICAgIHdoZW4gRV9SZXF1ZXN0X0RlbmllZCB8CisgICAgICAgICAgICAgICAgIEVfTm90X1NlbGVjdGFibGUgICA9PiByZXR1cm4gUmVxdWVzdF9EZW5pZWQ7CisgICAgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUik7CisgICAgICAgICBlbmQgY2FzZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBNZW51X09rOworICAgZW5kIERyaXZlcjsKKworICAgcHJvY2VkdXJlIEZyZWUgKElBICAgICAgICAgOiBpbiBvdXQgSXRlbV9BcnJheV9BY2Nlc3M7CisgICAgICAgICAgICAgICAgICAgRnJlZV9JdGVtcyA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICBpcworICAgICAgcHJvY2VkdXJlIFJlbGVhc2UgaXMgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCisgICAgICAgIChJdGVtX0FycmF5LCBJdGVtX0FycmF5X0FjY2Vzcyk7CisgICBiZWdpbgorICAgICAgaWYgSUEgLz0gbnVsbCBhbmQgdGhlbiBGcmVlX0l0ZW1zIHRoZW4KKyAgICAgICAgIGZvciBJIGluIElBJ0ZpcnN0IC4uIChJQSdMYXN0IC0gMSkgbG9vcAorICAgICAgICAgICAgaWYgSUEgKEkpIC89IE51bGxfSXRlbSB0aGVuCisgICAgICAgICAgICAgICBEZWxldGUgKElBIChJKSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFJlbGVhc2UgKElBKTsKKyAgIGVuZCBGcmVlOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBEZWZhdWx0X01lbnVfT3B0aW9ucyByZXR1cm4gTWVudV9PcHRpb25fU2V0CisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBHZXRfT3B0aW9ucyAoTnVsbF9NZW51KTsKKyAgIGVuZCBEZWZhdWx0X01lbnVfT3B0aW9uczsKKworICAgZnVuY3Rpb24gRGVmYXVsdF9JdGVtX09wdGlvbnMgcmV0dXJuIEl0ZW1fT3B0aW9uX1NldAorICAgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gR2V0X09wdGlvbnMgKE51bGxfSXRlbSk7CisgICBlbmQgRGVmYXVsdF9JdGVtX09wdGlvbnM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNGM2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGIKQEAgLTAsMCArMSwyMTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4yMiAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTE6MTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7Cit3aXRoIEludGVyZmFjZXMuQzsgdXNlIEludGVyZmFjZXMuQzsKK3VzZSBJbnRlcmZhY2VzOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZSBpcworCisgICB1c2UgdHlwZSBTeXN0ZW0uQml0X09yZGVyOworCisgICBmdW5jdGlvbiBIYXNfTW91c2UgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBNb3VzZV9BdmFpbCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNb3VzZV9BdmFpbCwgIl9uY19oYXNfbW91c2UiKTsKKyAgIGJlZ2luCisgICAgICBpZiBIYXNfS2V5IChLZXlfTW91c2UpIG9yIGVsc2UgTW91c2VfQXZhaWwgLz0gMCB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIYXNfTW91c2U7CisKKyAgIGZ1bmN0aW9uIEdldF9Nb3VzZSByZXR1cm4gTW91c2VfRXZlbnQKKyAgIGlzCisgICAgICB0eXBlIEV2ZW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIE1vdXNlX0V2ZW50OworCisgICAgICBmdW5jdGlvbiBHZXRtb3VzZSAoRXYgOiBFdmVudF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldG1vdXNlLCAiZ2V0bW91c2UiKTsKKworICAgICAgRXZlbnQgOiBhbGlhc2VkIE1vdXNlX0V2ZW50OworICAgYmVnaW4KKyAgICAgIGlmIEdldG1vdXNlIChFdmVudCdBY2Nlc3MpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEV2ZW50OworICAgZW5kIEdldF9Nb3VzZTsKKworICAgcHJvY2VkdXJlIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQgKEJ1dHRvbiA6IGluIE1vdXNlX0J1dHRvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBpbiBCdXR0b25fU3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFzayAgIDogaW4gb3V0IEV2ZW50X01hc2spCisgICBpcworICAgICAgQnV0dG9uX05yIDogY29uc3RhbnQgTmF0dXJhbCA6PSBNb3VzZV9CdXR0b24nUG9zIChCdXR0b24pOworICAgICAgU3RhdGVfTnIgIDogY29uc3RhbnQgTmF0dXJhbCA6PSBCdXR0b25fU3RhdGUnUG9zIChTdGF0ZSk7CisgICBiZWdpbgorICAgICAgaWYgQnV0dG9uIGluIE1vZGlmaWVyX0tleXMgYW5kIHRoZW4gU3RhdGUgLz0gUHJlc3NlZCB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgaWYgQnV0dG9uIGluIFJlYWxfQnV0dG9ucyB0aGVuCisgICAgICAgICAgICBNYXNrIDo9IE1hc2sgb3IgKCgyICoqICg2ICogQnV0dG9uX05yKSkgKiogU3RhdGVfTnIpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgTWFzayA6PSBNYXNrIG9yIChCVVRUT05fQ1RSTCAqKiAoQnV0dG9uX05yIC0gNCkpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgZW5kIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQ7CisKKyAgIHByb2NlZHVyZSBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50cyAoQnV0dG9uIDogaW4gTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBpbiBCdXR0b25fU3RhdGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrICAgOiBpbiBvdXQgRXZlbnRfTWFzaykKKyAgIGlzCisgICBiZWdpbgorICAgICAgZm9yIFMgaW4gQnV0dG9uX1N0YXRlcydSYW5nZSBsb29wCisgICAgICAgICBpZiBTdGF0ZSAoUykgdGhlbgorICAgICAgICAgICAgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudCAoQnV0dG9uLCBTLCBNYXNrKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnRzOworCisgICBmdW5jdGlvbiBTdGFydF9Nb3VzZSAoTWFzayA6IEV2ZW50X01hc2sgOj0gQWxsX0V2ZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXZlbnRfTWFzaworICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1NYXNrIChNIDogRXZlbnRfTWFzazsKKyAgICAgICAgICAgICAgICAgICAgICBPIDogYWNjZXNzIEV2ZW50X01hc2spIHJldHVybiBFdmVudF9NYXNrOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTU1hc2ssICJtb3VzZW1hc2siKTsKKyAgICAgIFIgICA6IEV2ZW50X01hc2s7CisgICAgICBPbGQgOiBhbGlhc2VkIEV2ZW50X01hc2s7CisgICBiZWdpbgorICAgICAgUiA6PSBNTWFzayAoTWFzaywgT2xkJ0FjY2Vzcyk7CisgICAgICBpZiBSID0gTm9fRXZlbnRzIHRoZW4KKyAgICAgICAgIEJlZXA7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gT2xkOworICAgZW5kIFN0YXJ0X01vdXNlOworCisgICBwcm9jZWR1cmUgRW5kX01vdXNlIChNYXNrIDogaW4gRXZlbnRfTWFzayA6PSBOb19FdmVudHMpCisgICBpcworICAgYmVnaW4KKyAgICAgIGlmIE1hc2sgLz0gTm9fRXZlbnRzIHRoZW4KKyAgICAgICAgIEJlZXA7CisgICAgICBlbmQgaWY7CisgICBlbmQgRW5kX01vdXNlOworCisgICBwcm9jZWR1cmUgRGlzcGF0Y2hfRXZlbnQgKE1hc2sgICA6IGluICBFdmVudF9NYXNrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gOiBvdXQgTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBvdXQgQnV0dG9uX1N0YXRlKTsKKworICAgcHJvY2VkdXJlIERpc3BhdGNoX0V2ZW50IChNYXNrICAgOiBpbiAgRXZlbnRfTWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIDogb3V0IE1vdXNlX0J1dHRvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgIDogb3V0IEJ1dHRvbl9TdGF0ZSkgaXMKKyAgICAgIEwgOiBFdmVudF9NYXNrOworICAgYmVnaW4KKyAgICAgIEJ1dHRvbiA6PSBBbHQ7ICAtLSAgcHJlc2V0IHRvIG5vbiByZWFsIGJ1dHRvbjsKKyAgICAgIGlmIChNYXNrIGFuZCBCVVRUT04xX0VWRU5UUykgLz0gMCB0aGVuCisgICAgICAgICBCdXR0b24gOj0gTGVmdDsKKyAgICAgIGVsc2lmIChNYXNrIGFuZCBCVVRUT04yX0VWRU5UUykgLz0gMCB0aGVuCisgICAgICAgICBCdXR0b24gOj0gTWlkZGxlOworICAgICAgZWxzaWYgKE1hc2sgYW5kIEJVVFRPTjNfRVZFTlRTKSAvPSAwIHRoZW4KKyAgICAgICAgIEJ1dHRvbiA6PSBSaWdodDsKKyAgICAgIGVsc2lmIChNYXNrIGFuZCBCVVRUT040X0VWRU5UUykgLz0gMCB0aGVuCisgICAgICAgICBCdXR0b24gOj0gQnV0dG9uNDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEJ1dHRvbiBpbiBSZWFsX0J1dHRvbnMgdGhlbgorICAgICAgICAgTCA6PSAyICoqICg2ICogTW91c2VfQnV0dG9uJ1BvcyAoQnV0dG9uKSk7CisgICAgICAgICBmb3IgSSBpbiBCdXR0b25fU3RhdGUnUmFuZ2UgbG9vcAorICAgICAgICAgICAgaWYgKE1hc2sgYW5kIEwpIC89IDAgdGhlbgorICAgICAgICAgICAgICAgU3RhdGUgOj0gSTsKKyAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBMIDo9IDIgKiBMOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICBlbHNlCisgICAgICAgICBTdGF0ZSA6PSBQcmVzc2VkOworICAgICAgICAgaWYgKE1hc2sgYW5kIEJVVFRPTl9DVFJMKSAvPSAwIHRoZW4KKyAgICAgICAgICAgIEJ1dHRvbiA6PSBDb250cm9sOworICAgICAgICAgZWxzaWYgKE1hc2sgYW5kIEJVVFRPTl9TSElGVCkgLz0gMCB0aGVuCisgICAgICAgICAgICBCdXR0b24gOj0gU2hpZnQ7CisgICAgICAgICBlbHNpZiAoTWFzayBhbmQgQlVUVE9OX0FMVCkgLz0gMCB0aGVuCisgICAgICAgICAgICBCdXR0b24gOj0gQWx0OworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgZW5kIERpc3BhdGNoX0V2ZW50OworCisgICBwcm9jZWR1cmUgR2V0X0V2ZW50IChFdmVudCAgOiBpbiAgTW91c2VfRXZlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFggICAgICA6IG91dCBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gOiBvdXQgTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgIDogb3V0IEJ1dHRvbl9TdGF0ZSkKKyAgIGlzCisgICAgICBNYXNrICA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gRXZlbnQuQnN0YXRlOworICAgYmVnaW4KKyAgICAgIFggOj0gQ29sdW1uX1Bvc2l0aW9uIChFdmVudC5YKTsKKyAgICAgIFkgOj0gTGluZV9Qb3NpdGlvbiAgIChFdmVudC5ZKTsKKyAgICAgIERpc3BhdGNoX0V2ZW50IChNYXNrLCBCdXR0b24sIFN0YXRlKTsKKyAgIGVuZCBHZXRfRXZlbnQ7CisKKyAgIHByb2NlZHVyZSBVbmdldF9Nb3VzZSAoRXZlbnQgOiBpbiBNb3VzZV9FdmVudCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBVbmdldG1vdXNlIChFdiA6IE1vdXNlX0V2ZW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBVbmdldG1vdXNlLCAidW5nZXRtb3VzZSIpOworICAgYmVnaW4KKyAgICAgIGlmIFVuZ2V0bW91c2UgKEV2ZW50KSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBVbmdldF9Nb3VzZTsKKworICAgZnVuY3Rpb24gRW5jbG9zZWRfSW5fV2luZG93IChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudCAgOiBNb3VzZV9FdmVudCkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBXZW5jbG9zZSAoV2luIDogV2luZG93OyBZIDogQ19JbnQ7IFggOiBDX0ludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXZW5jbG9zZSwgIndlbmNsb3NlIik7CisgICBiZWdpbgorICAgICAgaWYgV2VuY2xvc2UgKFdpbiwgQ19JbnQgKEV2ZW50LlkpLCBDX0ludCAoRXZlbnQuWCkpCisgICAgICAgID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgRW5jbG9zZWRfSW5fV2luZG93OworCisgICBmdW5jdGlvbiBNb3VzZV9JbnRlcnZhbCAoTXNlYyA6IE5hdHVyYWwgOj0gMjAwKSByZXR1cm4gTmF0dXJhbAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1vdXNlaW50ZXJ2YWwgKE1zZWMgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTW91c2VpbnRlcnZhbCwgIm1vdXNlaW50ZXJ2YWwiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTmF0dXJhbCAoTW91c2VpbnRlcnZhbCAoQ19JbnQgKE1zZWMpKSk7CisgICBlbmQgTW91c2VfSW50ZXJ2YWw7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFlZmFlCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZGIKQEAgLTAsMCArMSw3OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMuVXNlcl9EYXRhICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBJbnRlcmZhY2VzLkM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMuVXNlcl9EYXRhIGlzCisKKyAgIHVzZSB0eXBlIEludGVyZmFjZXMuQy5pbnQ7CisKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9QYW5lbF9Vc2VycHRyIChQYW4gIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA6IFVzZXJfQWNjZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfUGFuZWxfVXNlcnB0ciwgInNldF9wYW5lbF91c2VycHRyIik7CisgICBiZWdpbgorICAgICAgaWYgU2V0X1BhbmVsX1VzZXJwdHIgKFBhbiwgRGF0YSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfVXNlcl9EYXRhOworCisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gIFBhbmVsKSByZXR1cm4gVXNlcl9BY2Nlc3MKKyAgIGlzCisgICAgICBmdW5jdGlvbiBQYW5lbF9Vc2VycHRyIChQYW4gOiBQYW5lbCkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUGFuZWxfVXNlcnB0ciwgInBhbmVsX3VzZXJwdHIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gUGFuZWxfVXNlcnB0ciAoUGFuKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoUGFuICA6IGluICBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBEYXRhIDo9IEdldF9Vc2VyX0RhdGEgKFBhbik7CisgICBlbmQgR2V0X1VzZXJfRGF0YTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTE4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiCkBAIC0wLDAgKzEsMTY1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTMgJAorLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Oword2l0aCBJbnRlcmZhY2VzLkM7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscyBpcworCisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworCisgICBmdW5jdGlvbiBDcmVhdGUgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFBhbmVsCisgICBpcworICAgICAgZnVuY3Rpb24gTmV3cGFuZWwgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFBhbmVsOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTmV3cGFuZWwsICJuZXdfcGFuZWwiKTsKKworICAgICAgUGFuIDogUGFuZWw7CisgICBiZWdpbgorICAgICAgUGFuIDo9IE5ld3BhbmVsIChXaW4pOworICAgICAgaWYgUGFuID0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gUGFuOworICAgZW5kIENyZWF0ZTsKKworICAgcHJvY2VkdXJlIEJvdHRvbSAoUGFuIDogaW4gUGFuZWwpCisgICBpcworICAgICAgZnVuY3Rpb24gQm90dG9tcGFuZWwgKFBhbiA6IFBhbmVsKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBCb3R0b21wYW5lbCwgImJvdHRvbV9wYW5lbCIpOworICAgYmVnaW4KKyAgICAgIGlmIEJvdHRvbXBhbmVsIChQYW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQm90dG9tOworCisgICBwcm9jZWR1cmUgVG9wIChQYW4gOiBpbiBQYW5lbCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBUb3BwYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFRvcHBhbmVsLCAidG9wX3BhbmVsIik7CisgICBiZWdpbgorICAgICAgaWYgVG9wcGFuZWwgKFBhbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBUb3A7CisKKyAgIHByb2NlZHVyZSBTaG93IChQYW4gOiBpbiBQYW5lbCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTaG93cGFuZWwgKFBhbiA6IFBhbmVsKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTaG93cGFuZWwsICJzaG93X3BhbmVsIik7CisgICBiZWdpbgorICAgICAgaWYgU2hvd3BhbmVsIChQYW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2hvdzsKKworICAgcHJvY2VkdXJlIEhpZGUgKFBhbiA6IGluIFBhbmVsKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEhpZGVwYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEhpZGVwYW5lbCwgImhpZGVfcGFuZWwiKTsKKyAgIGJlZ2luCisgICAgICBpZiBIaWRlcGFuZWwgKFBhbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIaWRlOworCisgICBmdW5jdGlvbiBHZXRfV2luZG93IChQYW4gOiBQYW5lbCkgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFBhbmVsX1dpbiAoUGFuIDogUGFuZWwpIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQYW5lbF9XaW4sICJwYW5lbF93aW5kb3ciKTsKKworICAgICAgV2luIDogY29uc3RhbnQgV2luZG93IDo9IFBhbmVsX1dpbiAoUGFuKTsKKyAgIGJlZ2luCisgICAgICBpZiBXaW4gPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gV2luOworICAgZW5kIEdldF9XaW5kb3c7CisKKyAgIHByb2NlZHVyZSBSZXBsYWNlIChQYW4gOiBpbiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gUmVwbGFjZV9QYW4gKFBhbiA6IFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVwbGFjZV9QYW4sICJyZXBsYWNlX3BhbmVsIik7CisgICBiZWdpbgorICAgICAgaWYgUmVwbGFjZV9QYW4gKFBhbiwgV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFJlcGxhY2U7CisKKyAgIHByb2NlZHVyZSBNb3ZlIChQYW4gICAgOiBpbiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNb3ZlIChQYW4gICAgOiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1vdmUsICJtb3ZlX3BhbmVsIik7CisgICBiZWdpbgorICAgICAgaWYgTW92ZSAoUGFuLCBDX0ludCAoTGluZSksIENfSW50IChDb2x1bW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIE1vdmU7CisKKyAgIGZ1bmN0aW9uIElzX0hpZGRlbiAoUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gUGFuZWxfSGlkZGVuIChQYW4gOiBQYW5lbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUGFuZWxfSGlkZGVuLCAicGFuZWxfaGlkZGVuIik7CisgICBiZWdpbgorICAgICAgaWYgUGFuZWxfSGlkZGVuIChQYW4pID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIElzX0hpZGRlbjsKKworICAgcHJvY2VkdXJlIERlbGV0ZSAoUGFuIDogaW4gb3V0IFBhbmVsKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIERlbF9QYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlbF9QYW5lbCwgImRlbF9wYW5lbCIpOworICAgYmVnaW4KKyAgICAgIGlmIERlbF9QYW5lbCAoUGFuKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgUGFuIDo9IE51bGxfUGFuZWw7CisgICBlbmQgRGVsZXRlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODZjZDZiCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkYgpAQCAtMCwwICsxLDc3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbiAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCisKK3dpdGggQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkNfU3RyZWFtczsKK3dpdGggSW50ZXJmYWNlcy5DX1N0cmVhbXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbiBpcworCisgICBwYWNrYWdlIElDUyByZW5hbWVzIEludGVyZmFjZXMuQ19TdHJlYW1zOworICAgcGFja2FnZSBBQ1MgcmVuYW1lcyBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uQ19TdHJlYW1zOworICAgdXNlIHR5cGUgQ19JbnQ7CisKKyAgIHByb2NlZHVyZSBQdXRfV2luZG93IChXaW4gIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgOiBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uRmlsZV9UeXBlKSBpcworICAgICAgZnVuY3Rpb24gcHV0d2luIChXaW4gOiBXaW5kb3c7IGYgOiBJQ1MuRklMRXMpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHB1dHdpbiwgInB1dHdpbiIpOworCisgICAgICBSIDogY29uc3RhbnQgQ19JbnQgOj0gcHV0d2luIChXaW4sIEFDUy5DX1N0cmVhbSAoRmlsZSkpOworICAgYmVnaW4KKyAgICAgIGlmIFIgLz0gQ3Vyc2VzX09rIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUHV0X1dpbmRvdzsKKworICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAoRmlsZSA6IEFkYS5TdHJlYW1zLlN0cmVhbV9JTy5GaWxlX1R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2luZG93IGlzCisgICAgICBmdW5jdGlvbiBnZXR3aW4gKGYgOiBJQ1MuRklMRXMpIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBnZXR3aW4sICJnZXR3aW4iKTsKKworICAgICAgVyA6IGNvbnN0YW50IFdpbmRvdyA6PSBnZXR3aW4gKEFDUy5DX1N0cmVhbSAoRmlsZSkpOworICAgYmVnaW4KKyAgICAgIGlmIFcgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFc7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X1dpbmRvdzsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwMmJkYwotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHMKQEAgLTAsMCArMSw1MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QdXRXaW4gICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjMgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorCit3aXRoIEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbiBpcworCisgICBwcm9jZWR1cmUgUHV0X1dpbmRvdyAoV2luICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlIDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSk7CisKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgKEZpbGUgIDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSkgcmV0dXJuIFdpbmRvdzsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDNjNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIKQEAgLTAsMCArMSwxNjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWNhcCAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwIGlzCisKKyAgIGZ1bmN0aW9uIEdldF9FbnRyeSAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiB0Z2V0ZW50IChuYW1lIDogY2hhcl9hcnJheTsgdmFsIDogY2hhcl9hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRnZXRlbnQsICJ0Z2V0ZW50Iik7CisgICAgICBOYW1lVHh0IDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggIDogc2l6ZV90OworICAgICAgaWdub3JlZCA6IGNvbnN0YW50IGNoYXJfYXJyYXkgKDAgLi4gMCkgOj0gKDAgPT4gbnVsKTsKKyAgICAgIHJlc3VsdCAgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBOYW1lVHh0LCBMZW5ndGgpOworICAgICAgcmVzdWx0IDo9IHRnZXRlbnQgKGNoYXJfYXJyYXkgKGlnbm9yZWQpLCBOYW1lVHh0KTsKKyAgICAgIGlmIHJlc3VsdCA9IC0xIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gQm9vbGVhbidWYWwgKHJlc3VsdCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X0VudHJ5OworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIEdldF9GbGFnIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHRnZXRmbGFnIChpZCA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRnZXRmbGFnLCAidGdldGZsYWciKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIHRnZXRmbGFnIChUeHQpID0gMCB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfRmxhZzsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgR2V0X051bWJlciAoTmFtZSAgIDogaW4gIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgOiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgOiBvdXQgQm9vbGVhbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiB0Z2V0bnVtIChpZCA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRnZXRudW0sICJ0Z2V0bnVtIik7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIE5hbWUnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBWYWx1ZSA6PSBJbnRlZ2VyICh0Z2V0bnVtIChUeHQpKTsKKyAgICAgIGlmIFZhbHVlID0gLTEgdGhlbgorICAgICAgICAgUmVzdWx0IDo9IEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgUmVzdWx0IDo9ICBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9OdW1iZXI7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEdldF9TdHJpbmcgKE5hbWUgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgOiBvdXQgU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCA6IG91dCBCb29sZWFuKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHRnZXRzdHIgKGlkICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgOiBjaGFyX2FycmF5KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGdldHN0ciwgInRnZXRzdHIiKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgICAgVHh0MiAgIDogY2hhcnNfcHRyOworICAgICAgdHlwZSB0IGlzIG5ldyBjaGFyX2FycmF5ICgwIC4uIDEwMjQpOyAtLSAgZG9lcyBpdCBuZWVkIHRvIGJlIDEwMjQ/CisgICAgICBSZXR1cm5fQnVmZmVyIDogY29uc3RhbnQgdCA6PSAob3RoZXJzID0+IG51bCk7CisgICBiZWdpbgorICAgICAgVG9fQyAoTmFtZSwgVHh0LCBMZW5ndGgpOworICAgICAgVHh0MiA6PSB0Z2V0c3RyIChUeHQsIGNoYXJfYXJyYXkgKFJldHVybl9CdWZmZXIpKTsKKyAgICAgIGlmIFR4dDIgPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICBSZXN1bHQgOj0gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICBWYWx1ZSA6PSBGaWxsX1N0cmluZyAoVHh0Mik7CisgICAgICAgICBSZXN1bHQgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfU3RyaW5nOworCisgICBmdW5jdGlvbiBHZXRfU3RyaW5nIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHRnZXRzdHIgKElkICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgOiBjaGFyX2FycmF5KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGdldHN0ciwgInRnZXRzdHIiKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgICAgVHh0MiAgIDogY2hhcnNfcHRyOworICAgICAgdHlwZSB0IGlzIG5ldyBjaGFyX2FycmF5ICgwIC4uIDEwMjQpOyAtLSAgZG9lcyBpdCBuZWVkIHRvIGJlIDEwMjQ/CisgICAgICBQaG9ueV9UeHQgOiBjb25zdGFudCB0IDo9IChvdGhlcnMgPT4gbnVsKTsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBUeHQyIDo9IHRnZXRzdHIgKFR4dCwgY2hhcl9hcnJheSAoUGhvbnlfVHh0KSk7CisgICAgICBpZiBUeHQyID0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X1N0cmluZzsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBUR290byAoQ2FwIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgIENvbCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBSb3cgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gVGVybWNhcF9TdHJpbmcgaXMKKyAgICAgIGZ1bmN0aW9uIHRnb3RvIChjYXAgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgIGNvbCA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgIHJvdyA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGdvdG8pOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBDYXAnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChDYXAsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIHJldHVybiBUZXJtY2FwX1N0cmluZyAoRmlsbF9TdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRnb3RvIChUeHQsIENfSW50IChDb2wpLCBDX0ludCAoUm93KSkpKTsKKyAgIGVuZCBUR290bzsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWNhcDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwMTM5NgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzCkBAIC0wLDAgKzEsODAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1jYXAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWNhcCBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwKTsKKworICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IE1hbiBwYWdlIGN1cnNfdGVybWNhcC4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6ICB0cHV0cyAoc2VlIGN1cnNfdGVybWluZm8pCisKKyAgIHR5cGUgVGVybWNhcF9TdHJpbmcgaXMgbmV3IFN0cmluZzsKKworICAgLS0gIHwKKyAgIGZ1bmN0aW9uIFRHb3RvIChDYXAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgQ29sIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIFJvdyA6IExpbmVfUG9zaXRpb24pIHJldHVybiBUZXJtY2FwX1N0cmluZzsKKyAgIC0tICBBS0E6IHRnb3RvKCkKKworICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9FbnRyeSAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBOiB0Z2V0ZW50KCkKKworICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9GbGFnIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0E6IHRnZXRmbGFnKCkKKworICAgLS0gIHwKKyAgIHByb2NlZHVyZSBHZXRfTnVtYmVyIChOYW1lICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgIDogb3V0IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IDogb3V0IEJvb2xlYW4pOworICAgLS0gIEFLQTogdGdldG51bSgpCisKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgR2V0X1N0cmluZyAoTmFtZSAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICA6IG91dCBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IDogb3V0IEJvb2xlYW4pOworICAgZnVuY3Rpb24gR2V0X1N0cmluZyAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgUmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgZm91bmQuCisgICAtLSAgQUtBOiB0Z2V0c3RyKCkKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWNhcDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2ZiZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiCkBAIC0wLDAgKzEsMTYxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuNSAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOword2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvIGlzCisKKyAgIGZ1bmN0aW9uIElzX01pbnVzT25lX1BvaW50ZXIgKFAgOiBpbiBjaGFyc19wdHIpIHJldHVybiBCb29sZWFuOworCisgICBmdW5jdGlvbiBJc19NaW51c09uZV9Qb2ludGVyIChQIDogaW4gY2hhcnNfcHRyKSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgdHlwZSBXZWlyZF9BZGRyZXNzIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICAgICBJbnZhbGlkX1BvaW50ZXIgOiBjb25zdGFudCBXZWlyZF9BZGRyZXNzIDo9IC0xOworICAgICAgZnVuY3Rpb24gVG9fV2VpcmQgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgorICAgICAgICAoU291cmNlID0+IGNoYXJzX3B0ciwgVGFyZ2V0ID0+IFdlaXJkX0FkZHJlc3MpOworICAgYmVnaW4KKyAgICAgIGlmIFRvX1dlaXJkIChQKSA9IEludmFsaWRfUG9pbnRlciB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJc19NaW51c09uZV9Qb2ludGVyOworICAgcHJhZ21hIElubGluZSAoSXNfTWludXNPbmVfUG9pbnRlcik7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gR2V0X0ZsYWcgKE5hbWUgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gdGlnZXRmbGFnIChpZCA6IGNoYXJfYXJyYXkpIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRpZ2V0ZmxhZyk7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIE5hbWUnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiB0aWdldGZsYWcgKFR4dCkgPSBDdXJzZXNfQm9vbCAoQ3Vyc2VzX1RydWUpIHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9GbGFnOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBHZXRfU3RyaW5nIChOYW1lICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgIDogb3V0IFRlcm1pbmZvX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgOiBvdXQgQm9vbGVhbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiB0aWdldHN0ciAoaWQgOiBjaGFyX2FycmF5KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGlnZXRzdHIsICJ0aWdldHN0ciIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICAgICBUeHQyIDogY2hhcnNfcHRyOworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIFR4dDIgOj0gdGlnZXRzdHIgKFR4dCk7CisgICAgICBpZiBUeHQyID0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgUmVzdWx0IDo9IEZhbHNlOworICAgICAgZWxzaWYgSXNfTWludXNPbmVfUG9pbnRlciAoVHh0MikgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIFZhbHVlICA6PSBUZXJtaW5mb19TdHJpbmcgKEZpbGxfU3RyaW5nIChUeHQyKSk7CisgICAgICAgICBSZXN1bHQgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfU3RyaW5nOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIEhhc19TdHJpbmcgKE5hbWUgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gdGlnZXRzdHIgKGlkIDogY2hhcl9hcnJheSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRpZ2V0c3RyLCAidGlnZXRzdHIiKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgICAgVHh0MiA6IGNoYXJzX3B0cjsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBUeHQyIDo9IHRpZ2V0c3RyIChUeHQpOworICAgICAgaWYgVHh0MiA9IE51bGxfUHRyIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2lmIElzX01pbnVzT25lX1BvaW50ZXIgKFR4dDIpIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIYXNfU3RyaW5nOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIEdldF9OdW1iZXIgKE5hbWUgOiBTdHJpbmcpIHJldHVybiBJbnRlZ2VyIGlzCisgICAgICBmdW5jdGlvbiB0aWdldHN0ciAocyA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRpZ2V0c3RyKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIHJldHVybiBJbnRlZ2VyICh0aWdldHN0ciAoVHh0KSk7CisgICBlbmQgR2V0X051bWJlcjsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUHV0X1N0cmluZyAoU3RyICAgIDogVGVybWluZm9fU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmNudCA6IE5hdHVyYWwgOj0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwdXRjICAgOiBwdXRjdHlwZSA6PSBudWxsKSBpcworICAgICAgZnVuY3Rpb24gdHB1dHMgKHN0ciAgICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgYWZmY250IDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgcHV0YyAgIDogcHV0Y3R5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIHB1dHAgKHN0ciA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRwdXRzKTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHB1dHApOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgICAgIEVyciA6IENfSW50OworICAgYmVnaW4KKyAgICAgIFRvX0MgKFN0cmluZyAoU3RyKSwgVHh0LCBMZW5ndGgpOworICAgICAgaWYgcHV0YyA9IG51bGwgdGhlbgorICAgICAgICAgRXJyIDo9IHB1dHAgKFR4dCk7CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gdHB1dHMgKFR4dCwgQ19JbnQgKGFmZmNudCksIHB1dGMpOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFB1dF9TdHJpbmc7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzliZjEKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHMKQEAgLTAsMCArMSw4MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjMgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpdGggSW50ZXJmYWNlcy5DOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8gaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8pOworCisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgTWFuIHBhZ2UgY3Vyc190ZXJtaW5mby4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6ICBzZXR1cHRlcm0sIHNldHRlcm0sIHNldF9jdXJ0ZXJtLCBkZWxfY3VydGVybSwKKyAgIC0tICAgICAgICAgICAgICAgICAgICByZXN0YXJ0dGVybSwgdHBhcm0sIHB1dHAsIHZpZHB1dHMsICB2aWRhdHRyLAorICAgLS0gICAgICAgICAgICAgICAgICAgIG12Y3VyCisKKyAgIHR5cGUgVGVybWluZm9fU3RyaW5nIGlzIG5ldyBTdHJpbmc7CisKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgR2V0X1N0cmluZyAoTmFtZSAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICA6IG91dCBUZXJtaW5mb19TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IDogb3V0IEJvb2xlYW4pOworICAgZnVuY3Rpb24gSGFzX1N0cmluZyAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBOiB0aWdldHN0cigpCisKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfRmxhZyAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBOiB0aWdldGZsYWcoKQorCisgICAtLSAgfAorICAgZnVuY3Rpb24gR2V0X051bWJlciAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEludGVnZXI7CisgICAtLSAgQUtBOiB0aWdldG51bSgpCisKKyAgIHR5cGUgcHV0Y3R5cGUgaXMgYWNjZXNzIGZ1bmN0aW9uIChjIDogSW50ZXJmYWNlcy5DLmludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcmZhY2VzLkMuaW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIHB1dGN0eXBlKTsKKworICAgLS0gIHwKKyAgIHByb2NlZHVyZSBQdXRfU3RyaW5nIChTdHIgICAgOiBUZXJtaW5mb19TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgYWZmY250IDogTmF0dXJhbCA6PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIHB1dGMgICA6IHB1dGN0eXBlIDo9IG51bGwpOworICAgLS0gIEFLQTogdHB1dHMoKQorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmI0ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiCkBAIC0wLDAgKzEsMTI4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXggICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTIgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXggaXMKKworICAgcHJvY2VkdXJlIFB1dF9CdWYKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdzsKKyAgICAgIEJ1ZiAgICA6IGluIFN0cmluZzsKKyAgICAgIFdpZHRoICA6IGluIEZpZWxkOworICAgICAgU2lnbmFsIDogaW4gQm9vbGVhbiA6PSBUcnVlOworICAgICAgTGp1c3QgIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBMICAgOiBGaWVsZDsKKyAgICAgIExlbiA6IEZpZWxkOworICAgICAgVyAgIDogRmllbGQgOj0gV2lkdGg7CisgICAgICBMQyAgOiBMaW5lX0NvdW50OworICAgICAgQ0MgIDogQ29sdW1uX0NvdW50OworICAgICAgWSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggICA6IENvbHVtbl9Qb3NpdGlvbjsKKworICAgICAgcHJvY2VkdXJlIE91dHB1dCAoRnJvbSwgVG8gOiBGaWVsZCk7CisKKyAgICAgIHByb2NlZHVyZSBPdXRwdXQgKEZyb20sIFRvIDogRmllbGQpCisgICAgICBpcworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIExlbiA+IDAgdGhlbgorICAgICAgICAgICAgaWYgVyA9IDAgdGhlbgorICAgICAgICAgICAgICAgVyA6PSBMZW47CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBpZiBMZW4gPiBXIHRoZW4KKyAgICAgICAgICAgICAgIC0tICBMUk0gQTEwLjYgKDcpIHNheXMgdGhpcworICAgICAgICAgICAgICAgVyA6PSBMZW47CisgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHByYWdtYSBBc3NlcnQgKExlbiA8PSBXKTsKKyAgICAgICAgICAgIEdldF9TaXplIChXaW4sIExDLCBDQyk7CisgICAgICAgICAgICBpZiBDb2x1bW5fQ291bnQgKExlbikgPiBDQyB0aGVuCisgICAgICAgICAgICAgICBpZiBTaWduYWwgdGhlbgorICAgICAgICAgICAgICAgICAgcmFpc2UgTGF5b3V0X0Vycm9yOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgaWYgTGVuIDwgVyBhbmQgdGhlbiBub3QgTGp1c3QgdGhlbgorICAgICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgICAgRmlsbGVyIDogY29uc3RhbnQgU3RyaW5nICgxIC4uIChXIC0gTGVuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgOj0gKG90aGVycyA9PiAnICcpOworICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIFB1dCAoV2luLCBGaWxsZXIpOworICAgICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZLCBYKTsKKyAgICAgICAgICAgICAgIGlmIChYICsgQ29sdW1uX1Bvc2l0aW9uIChMZW4pKSA+IENDIHRoZW4KKyAgICAgICAgICAgICAgICAgIE5ld19MaW5lIChXaW4pOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgUHV0IChXaW4sIEJ1ZiAoRnJvbSAuLiBUbykpOworICAgICAgICAgICAgICAgaWYgTGVuIDwgVyBhbmQgdGhlbiBManVzdCB0aGVuCisgICAgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICAgICBGaWxsZXIgOiBjb25zdGFudCBTdHJpbmcgKDEgLi4gKFcgLSBMZW4pKQorICAgICAgICAgICAgICAgICAgICAgICA6PSAob3RoZXJzID0+ICcgJyk7CisgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgUHV0IChXaW4sIEZpbGxlcik7CisgICAgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgT3V0cHV0OworCisgICBiZWdpbgorICAgICAgcHJhZ21hIEFzc2VydCAoV2luIC89IE51bGxfV2luZG93KTsKKyAgICAgIGlmIExqdXN0IHRoZW4KKyAgICAgICAgIEwgOj0gMTsKKyAgICAgICAgIGZvciBJIGluIDEgLi4gQnVmJ0xlbmd0aCBsb29wCisgICAgICAgICAgICBleGl0IHdoZW4gQnVmIChMKSA9ICcgJzsKKyAgICAgICAgICAgIEwgOj0gTCArIDE7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIExlbiA6PSBMIC0gMTsKKyAgICAgICAgIE91dHB1dCAoMSwgTGVuKTsKKyAgICAgIGVsc2UgIC0tIGlucHV0IGJ1ZmZlciBpcyBub3QgbGVmdCBqdXN0aWZpZWQKKyAgICAgICAgIEwgOj0gQnVmJ0xlbmd0aDsKKyAgICAgICAgIGZvciBJIGluIDEgLi4gQnVmJ0xlbmd0aCBsb29wCisgICAgICAgICAgICBleGl0IHdoZW4gQnVmIChMKSA9ICcgJzsKKyAgICAgICAgICAgIEwgOj0gTCAtIDE7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIExlbiA6PSBCdWYnTGVuZ3RoIC0gTDsKKyAgICAgICAgIE91dHB1dCAoTCArIDEsIEJ1ZidMZW5ndGgpOworICAgICAgZW5kIGlmOworICAgZW5kIFB1dF9CdWY7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOGE5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHMKQEAgLTAsMCArMSw1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4ICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEzICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByaXZhdGUgcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4IGlzCisgICAtLSAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoQXV4KTsKKworICAgLS0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSB0aGUgVGV4dF9JTyBvdXRwdXQgcm91dGluZXMgZm9yIG51bWVyaWMKKyAgIC0tICBhbmQgZW51bWVyYXRpb24gdHlwZXMuCisgICAtLQorICAgcHJvY2VkdXJlIFB1dF9CdWYKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdzsgICAgICAgICAgICAgICAtLSBUaGUgb3V0cHV0IHdpbmRvdworICAgICAgQnVmICAgIDogaW4gU3RyaW5nOyAgICAgICAgICAgICAgIC0tIFRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgdGV4dAorICAgICAgV2lkdGggIDogaW4gRmllbGQ7ICAgICAgICAgICAgICAgIC0tIFRoZSB3aWR0aCBvZiB0aGUgb3V0cHV0IGZpZWxkCisgICAgICBTaWduYWwgOiBpbiBCb29sZWFuIDo9IFRydWU7ICAgICAgLS0gSWYgdHJ1ZSwgd2UgcmFpc2UgTGF5b3V0X0Vycm9yCisgICAgICBManVzdCAgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsgICAgLS0gVGhlIEJ1ZiBpcyBsZWZ0IGp1c3RpZmllZAorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTg3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQ29tcGxleF9JTyAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkNvbXBsZXhfSU8gaXMKKworICAgcGFja2FnZSBGSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTyAoQ29tcGxleF9UeXBlcy5SZWFsJ0Jhc2UpOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gIDogaW4gV2luZG93OworICAgICAgSXRlbSA6IGluIENvbXBsZXg7CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKFdpbiwgJygnKTsKKyAgICAgIEZJTy5QdXQgKFdpbiwgSXRlbS5SZSwgRm9yZSwgQWZ0LCBFeHApOworICAgICAgUHV0IChXaW4sICcsJyk7CisgICAgICBGSU8uUHV0IChXaW4sIEl0ZW0uSW0sIEZvcmUsIEFmdCwgRXhwKTsKKyAgICAgIFB1dCAoV2luLCAnKScpOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSA6IGluIENvbXBsZXg7CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIEZvcmUsIEFmdCwgRXhwKTsKKyAgIGVuZCBQdXQ7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQ29tcGxleF9JTzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2ViM2MKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzCkBAIC0wLDAgKzEsNzAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQ29tcGxleF9JTyAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLk51bWVyaWNzLkdlbmVyaWNfQ29tcGxleF9UeXBlczsKKworZ2VuZXJpYworICAgd2l0aCBwYWNrYWdlIENvbXBsZXhfVHlwZXMgaXMgbmV3IEFkYS5OdW1lcmljcy5HZW5lcmljX0NvbXBsZXhfVHlwZXMgKDw+KTsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQ29tcGxleF9JTyBpcworCisgICB1c2UgQ29tcGxleF9UeXBlczsKKworICAgRGVmYXVsdF9Gb3JlIDogRmllbGQgOj0gMjsKKyAgIERlZmF1bHRfQWZ0ICA6IEZpZWxkIDo9IFJlYWwnRGlnaXRzIC0gMTsKKyAgIERlZmF1bHRfRXhwICA6IEZpZWxkIDo9IDM7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gQ29tcGxleDsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtIDogaW4gQ29tcGxleDsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworCitwcml2YXRlCisgICBwcmFnbWEgSW5saW5lIChQdXQpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkNvbXBsZXhfSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA2OGEwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYgpAQCAtMCwwICsxLDc1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU8gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5UZXh0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU8gaXMKKworICAgcGFja2FnZSBBdXggcmVuYW1lcyBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworICAgcGFja2FnZSBESU8gaXMgbmV3IEFkYS5UZXh0X0lPLkRlY2ltYWxfSU8gKE51bSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCkKKyAgIGlzCisgICAgICBCdWYgOiBTdHJpbmcgKDEgLi4gRmllbGQnTGFzdCk7CisgICAgICBMZW4gOiBGaWVsZCA6PSBGb3JlICsgMSArIEFmdDsKKyAgIGJlZ2luCisgICAgICBpZiBFeHAgPiAwIHRoZW4KKyAgICAgICAgIExlbiA6PSBMZW4gKyAxICsgRXhwOworICAgICAgZW5kIGlmOworICAgICAgRElPLlB1dCAoQnVmLCBJdGVtLCBBZnQsIEV4cCk7CisgICAgICBBdXguUHV0X0J1ZiAoV2luLCBCdWYsIExlbiwgRmFsc2UpOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKSBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOworICAgZW5kIFB1dDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2ZmU3NQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHMKQEAgLTAsMCArMSw2NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuZXJpYworICAgdHlwZSBOdW0gaXMgZGVsdGEgPD4gZGlnaXRzIDw+OworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPIGlzCisKKyAgIERlZmF1bHRfRm9yZSA6IEZpZWxkIDo9IE51bSdGb3JlOworICAgRGVmYXVsdF9BZnQgIDogRmllbGQgOj0gTnVtJ0FmdDsKKyAgIERlZmF1bHRfRXhwICA6IEZpZWxkIDo9IDA7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisKK3ByaXZhdGUKKyAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRGVjaW1hbF9JTzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4ODczYQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiCkBAIC0wLDAgKzEsODAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlRleHRfSU87Cit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOyB1c2UgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gaXMKKworICAgcGFja2FnZSBBdXggcmVuYW1lcyBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworICAgcGFja2FnZSBFSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkVudW1lcmF0aW9uX0lPIChFbnVtKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtICA6IGluIEVudW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBTZXQgICA6IGluIFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZykKKyAgIGlzCisgICAgICBCdWYgIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOworICAgICAgVHNldCA6IEFkYS5UZXh0X0lPLlR5cGVfU2V0OworICAgYmVnaW4KKyAgICAgIGlmIFNldCAvPSBNaXhlZF9DYXNlIHRoZW4KKyAgICAgICAgIFRzZXQgOj0gQWRhLlRleHRfSU8uVHlwZV9TZXQnVmFsIChUeXBlX1NldCdQb3MgKFNldCkpOworICAgICAgZWxzZQorICAgICAgICAgVHNldCA6PSBBZGEuVGV4dF9JTy5Mb3dlcl9DYXNlOworICAgICAgZW5kIGlmOworICAgICAgRUlPLlB1dCAoQnVmLCBJdGVtLCBUc2V0KTsKKyAgICAgIGlmIFNldCA9IE1peGVkX0Nhc2UgdGhlbgorICAgICAgICAgQnVmIChCdWYnRmlyc3QpIDo9IFRvX1VwcGVyIChCdWYgKEJ1ZidGaXJzdCkpOworICAgICAgZW5kIGlmOworICAgICAgQXV4LlB1dF9CdWYgKFdpbiwgQnVmLCBXaWR0aCwgVHJ1ZSwgVHJ1ZSk7CisgICBlbmQgUHV0OworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtICA6IGluIEVudW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBTZXQgICA6IGluIFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZykKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtLCBXaWR0aCwgU2V0KTsKKyAgIGVuZCBQdXQ7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjFkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkcwpAQCAtMCwwICsxLDYzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5lcmljCisgICB0eXBlIEVudW0gaXMgKDw+KTsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gaXMKKworICAgRGVmYXVsdF9XaWR0aCA6IEZpZWxkIDo9IDA7CisgICBEZWZhdWx0X1NldHRpbmcgOiBUeXBlX1NldCA6PSBNaXhlZF9DYXNlOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gIDogaW4gRW51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIFNldCAgIDogaW4gVHlwZV9TZXQgOj0gRGVmYXVsdF9TZXR0aW5nKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBFbnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgU2V0ICAgOiBpbiBUeXBlX1NldCA6PSBEZWZhdWx0X1NldHRpbmcpOworCitwcml2YXRlCisgICBwcmFnbWEgSW5saW5lIChQdXQpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRmMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZGIKQEAgLTAsMCArMSw3NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU8gICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVGV4dF9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyBpcworCisgICBwYWNrYWdlIEF1eCByZW5hbWVzIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisgICBwYWNrYWdlIEZJWElPIGlzIG5ldyBBZGEuVGV4dF9JTy5GaXhlZF9JTyAoTnVtKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgaXMKKyAgICAgIEJ1ZiA6IFN0cmluZyAoMSAuLiBGaWVsZCdMYXN0KTsKKyAgICAgIExlbiA6IEZpZWxkIDo9IEZvcmUgKyAxICsgQWZ0OworICAgYmVnaW4KKyAgICAgIGlmIEV4cCA+IDAgdGhlbgorICAgICAgICAgTGVuIDo9IExlbiArIDEgKyBFeHA7CisgICAgICBlbmQgaWY7CisgICAgICBGSVhJTy5QdXQgKEJ1ZiwgSXRlbSwgQWZ0LCBFeHApOworICAgICAgQXV4LlB1dF9CdWYgKFdpbiwgQnVmLCBMZW4sIEZhbHNlKTsKKyAgIGVuZCBQdXQ7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCkgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIEZvcmUsIEFmdCwgRXhwKTsKKyAgIGVuZCBQdXQ7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGIxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkcwpAQCAtMCwwICsxLDY2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5lcmljCisgICB0eXBlIE51bSBpcyBkZWx0YSA8PjsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU8gaXMKKworICAgRGVmYXVsdF9Gb3JlIDogRmllbGQgOj0gTnVtJ0ZvcmU7CisgICBEZWZhdWx0X0FmdCAgOiBGaWVsZCA6PSBOdW0nQWZ0OworICAgRGVmYXVsdF9FeHAgIDogRmllbGQgOj0gMDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKworcHJpdmF0ZQorICAgcHJhZ21hIElubGluZSAoUHV0KTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkMjYxYgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRiCkBAIC0wLDAgKzEsNzYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlRleHRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU8gaXMKKworICAgcGFja2FnZSBBdXggcmVuYW1lcyBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworICAgcGFja2FnZSBGSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkZsb2F0X0lPIChOdW0pOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gIDogaW4gV2luZG93OworICAgICAgSXRlbSA6IGluIE51bTsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICBpcworICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOworICAgICAgTGVuIDogRmllbGQgOj0gRm9yZSArIDEgKyBBZnQ7CisgICBiZWdpbgorICAgICAgaWYgRXhwID4gMCB0aGVuCisgICAgICAgICBMZW4gOj0gTGVuICsgMSArIEV4cDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEZJTy5QdXQgKEJ1ZiwgSXRlbSwgQWZ0LCBFeHApOworICAgICAgQXV4LlB1dF9CdWYgKFdpbiwgQnVmLCBMZW4sIEZhbHNlKTsKKyAgIGVuZCBQdXQ7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIEZvcmUsIEFmdCwgRXhwKTsKKyAgIGVuZCBQdXQ7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTY1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkcwpAQCAtMCwwICsxLDY2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTyAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5lcmljCisgICB0eXBlIE51bSBpcyBkaWdpdHMgPD47CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPIGlzCisKKyAgIERlZmF1bHRfRm9yZSA6IEZpZWxkIDo9IDI7CisgICBEZWZhdWx0X0FmdCAgOiBGaWVsZCA6PSBOdW0nRGlnaXRzIC0gMTsKKyAgIERlZmF1bHRfRXhwICA6IEZpZWxkIDo9IDM7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisKK3ByaXZhdGUKKyAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjk0ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYgpAQCAtMCwwICsxLDcwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU8gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5UZXh0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU8gaXMKKworICAgcGFja2FnZSBBdXggcmVuYW1lcyBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworICAgcGFja2FnZSBJSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkludGVnZXJfSU8gKE51bSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKKyAgIGlzCisgICAgICBCdWYgOiBTdHJpbmcgKDEgLi4gRmllbGQnTGFzdCk7CisgICBiZWdpbgorICAgICAgSUlPLlB1dCAoQnVmLCBJdGVtLCBCYXNlKTsKKyAgICAgIEF1eC5QdXRfQnVmIChXaW4sIEJ1ZiwgV2lkdGgpOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtLCBXaWR0aCwgQmFzZSk7CisgICBlbmQgUHV0OworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGIxNjlhCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkcwpAQCAtMCwwICsxLDYzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU8gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5lcmljCisgICB0eXBlIE51bSBpcyByYW5nZSA8PjsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTyBpcworCisgICBEZWZhdWx0X1dpZHRoIDogRmllbGQgOj0gTnVtJ1dpZHRoOworICAgRGVmYXVsdF9CYXNlICA6IE51bWJlcl9CYXNlIDo9IDEwOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gIDogaW4gTnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtICA6IGluIE51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogaW4gTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKTsKKworcHJpdmF0ZQorICAgcHJhZ21hIElubGluZSAoUHV0KTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjMWQ0YQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZGIKQEAgLTAsMCArMSw3MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVGV4dF9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPIGlzCisKKyAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKKyAgIHBhY2thZ2UgTUlPIGlzIG5ldyBBZGEuVGV4dF9JTy5Nb2R1bGFyX0lPIChOdW0pOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gIDogaW4gTnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpCisgICBpcworICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOworICAgYmVnaW4KKyAgICAgIE1JTy5QdXQgKEJ1ZiwgSXRlbSwgQmFzZSk7CisgICAgICBBdXguUHV0X0J1ZiAoV2luLCBCdWYsIFdpZHRoKTsKKyAgIGVuZCBQdXQ7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gTnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpCisgICBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgV2lkdGgsIEJhc2UpOworICAgZW5kIFB1dDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4NzA2ZgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHMKQEAgLTAsMCArMSw2MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuZXJpYworICAgdHlwZSBOdW0gaXMgbW9kIDw+OworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPIGlzCisKKyAgIERlZmF1bHRfV2lkdGggOiBGaWVsZCA6PSBOdW0nV2lkdGg7CisgICBEZWZhdWx0X0Jhc2UgIDogTnVtYmVyX0Jhc2UgOj0gMTA7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gTnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpOworCitwcml2YXRlCisgICBwcmFnbWEgSW5saW5lIChQdXQpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU87CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWIxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkYgpAQCAtMCwwICsxLDMzNyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTyAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE4ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8gaXMKKworICAgRGVmYXVsdF9XaW5kb3cgOiBXaW5kb3cgOj0gTnVsbF9XaW5kb3c7CisKKyAgIHByb2NlZHVyZSBTZXRfV2luZG93IChXaW4gOiBpbiBXaW5kb3cpCisgICBpcworICAgYmVnaW4KKyAgICAgIERlZmF1bHRfV2luZG93IDo9IFdpbjsKKyAgIGVuZCBTZXRfV2luZG93OworCisgICBmdW5jdGlvbiBHZXRfV2luZG93IHJldHVybiBXaW5kb3cKKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgRGVmYXVsdF9XaW5kb3cgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByZXR1cm4gU3RhbmRhcmRfV2luZG93OworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIERlZmF1bHRfV2luZG93OworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9XaW5kb3c7CisgICBwcmFnbWEgSW5saW5lIChHZXRfV2luZG93KTsKKworICAgcHJvY2VkdXJlIEZsdXNoIChXaW4gOiBpbiBXaW5kb3cpCisgICBpcworICAgYmVnaW4KKyAgICAgIFJlZnJlc2ggKFdpbik7CisgICBlbmQgRmx1c2g7CisKKyAgIHByb2NlZHVyZSBGbHVzaAorICAgaXMKKyAgIGJlZ2luCisgICAgICBGbHVzaCAoR2V0X1dpbmRvdyk7CisgICBlbmQgRmx1c2g7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTcGVjaWZpY2F0aW9uIG9mIGxpbmUgYW5kIHBhZ2UgbGVuZ3RocyAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgLS0gIFRoZXJlIGFyZSBubyBzZXQgcm91dGluZXMgaW4gdGhpcyBwYWNrYWdlLiBJIGFzc3VtZSwgdGhhdCB5b3UgYWxsb2NhdGUKKyAgIC0tICB0aGUgd2luZG93IHdpdGggYW4gYXBwcm9wcmlhdGUgc2l6ZS4KKyAgIC0tICBBIHNjcm9sbC13aW5kb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gcGFnZSB3aXRoIHVuYm91bmRlZCBwYWdlIGxlbmd0aCwKKyAgIC0tICBpLmUuIGl0IHJldHVybnMgdGhlIGNvbnZlbnRpb25hbCAwIGFzIHBhZ2UgbGVuZ3RoLgorCisgICBmdW5jdGlvbiBMaW5lX0xlbmd0aCAoV2luIDogaW4gV2luZG93KSByZXR1cm4gQ291bnQKKyAgIGlzCisgICAgICBOX0xpbmVzIDogTGluZV9Db3VudDsKKyAgICAgIE5fQ29scyAgOiBDb2x1bW5fQ291bnQ7CisgICBiZWdpbgorICAgICAgR2V0X1NpemUgKFdpbiwgTl9MaW5lcywgTl9Db2xzKTsKKyAgICAgIC0tICBpZiBOYXR1cmFsIChOX0NvbHMpID4gTmF0dXJhbCAoQ291bnQnTGFzdCkgdGhlbgorICAgICAgLS0gICAgIHJhaXNlIExheW91dF9FcnJvcjsKKyAgICAgIC0tICBlbmQgaWY7CisgICAgICByZXR1cm4gQ291bnQgKE5fQ29scyk7CisgICBlbmQgTGluZV9MZW5ndGg7CisKKyAgIGZ1bmN0aW9uIExpbmVfTGVuZ3RoIHJldHVybiBDb3VudAorICAgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTGluZV9MZW5ndGggKEdldF9XaW5kb3cpOworICAgZW5kIExpbmVfTGVuZ3RoOworCisgICBmdW5jdGlvbiBQYWdlX0xlbmd0aCAoV2luIDogaW4gV2luZG93KSByZXR1cm4gQ291bnQKKyAgIGlzCisgICAgICBOX0xpbmVzIDogTGluZV9Db3VudDsKKyAgICAgIE5fQ29scyAgOiBDb2x1bW5fQ291bnQ7CisgICBiZWdpbgorICAgICAgaWYgU2Nyb2xsaW5nX0FsbG93ZWQgKFdpbikgdGhlbgorICAgICAgICAgcmV0dXJuIDA7CisgICAgICBlbHNlCisgICAgICAgICBHZXRfU2l6ZSAoV2luLCBOX0xpbmVzLCBOX0NvbHMpOworICAgICAgICAgLS0gIGlmIE5hdHVyYWwgKE5fTGluZXMpID4gTmF0dXJhbCAoQ291bnQnTGFzdCkgdGhlbgorICAgICAgICAgLS0gICAgIHJhaXNlIExheW91dF9FcnJvcjsKKyAgICAgICAgIC0tICBlbmQgaWY7CisgICAgICAgICByZXR1cm4gQ291bnQgKE5fTGluZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFBhZ2VfTGVuZ3RoOworCisgICBmdW5jdGlvbiBQYWdlX0xlbmd0aCByZXR1cm4gQ291bnQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFBhZ2VfTGVuZ3RoIChHZXRfV2luZG93KTsKKyAgIGVuZCBQYWdlX0xlbmd0aDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDb2x1bW4sIExpbmUsIGFuZCBQYWdlIENvbnRyb2wgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIE5ld19MaW5lIChXaW4gOiBpbiBXaW5kb3c7IFNwYWNpbmcgOiBpbiBQb3NpdGl2ZV9Db3VudCA6PSAxKQorICAgaXMKKyAgICAgIFBfU2l6ZSA6IGNvbnN0YW50IENvdW50IDo9IFBhZ2VfTGVuZ3RoIChXaW4pOworICAgYmVnaW4KKyAgICAgIGlmIG5vdCBTcGFjaW5nJ1ZhbGlkIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGZvciBJIGluIDEgLi4gU3BhY2luZyBsb29wCisgICAgICAgICBpZiBQX1NpemUgPiAwIGFuZCB0aGVuIExpbmUgKFdpbikgPj0gUF9TaXplIHRoZW4KKyAgICAgICAgICAgIE5ld19QYWdlIChXaW4pOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgQWRkIChXaW4sIEFTQ0lJLkxGKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIE5ld19MaW5lOworCisgICBwcm9jZWR1cmUgTmV3X0xpbmUgKFNwYWNpbmcgOiBpbiBQb3NpdGl2ZV9Db3VudCA6PSAxKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBOZXdfTGluZSAoR2V0X1dpbmRvdywgU3BhY2luZyk7CisgICBlbmQgTmV3X0xpbmU7CisKKyAgIHByb2NlZHVyZSBOZXdfUGFnZSAoV2luIDogaW4gV2luZG93KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBDbGVhciAoV2luKTsKKyAgIGVuZCBOZXdfUGFnZTsKKworICAgcHJvY2VkdXJlIE5ld19QYWdlCisgICBpcworICAgYmVnaW4KKyAgICAgIE5ld19QYWdlIChHZXRfV2luZG93KTsKKyAgIGVuZCBOZXdfUGFnZTsKKworICAgcHJvY2VkdXJlIFNldF9Db2wgKFdpbiA6IGluIFdpbmRvdzsgIFRvIDogaW4gUG9zaXRpdmVfQ291bnQpCisgICBpcworICAgICAgWSAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWDEgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBYMiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIE4gIDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBub3QgVG8nVmFsaWQgdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZLCBYMSk7CisgICAgICBOICA6PSBOYXR1cmFsIChUbyk7IE4gOj0gTiAtIDE7CisgICAgICBYMiA6PSBDb2x1bW5fUG9zaXRpb24gKE4pOworICAgICAgaWYgWDEgPiBYMiB0aGVuCisgICAgICAgICBOZXdfTGluZSAoV2luLCAxKTsKKyAgICAgICAgIFgxIDo9IDA7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBYMSA8IFgyIHRoZW4KKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIEZpbGxlciA6IGNvbnN0YW50IFN0cmluZyAoSW50ZWdlciAoWDEpIC4uIChJbnRlZ2VyIChYMikgLSAxKSkKKyAgICAgICAgICAgICAgOj0gKG90aGVycyA9PiAnICcpOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFB1dCAoV2luLCBGaWxsZXIpOworICAgICAgICAgZW5kOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Db2w7CisKKyAgIHByb2NlZHVyZSBTZXRfQ29sIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBTZXRfQ29sIChHZXRfV2luZG93LCBUbyk7CisgICBlbmQgU2V0X0NvbDsKKworICAgcHJvY2VkdXJlIFNldF9MaW5lIChXaW4gOiBpbiBXaW5kb3c7IFRvIDogaW4gUG9zaXRpdmVfQ291bnQpCisgICBpcworICAgICAgWTEgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWTIgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBOICA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgaWYgbm90IFRvJ1ZhbGlkIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisKKyAgICAgIEdldF9DdXJzb3JfUG9zaXRpb24gKFdpbiwgWTEsIFgpOworICAgICAgTiAgOj0gTmF0dXJhbCAoVG8pOyBOIDo9IE4gLSAxOworICAgICAgWTIgOj0gTGluZV9Qb3NpdGlvbiAoTik7CisgICAgICBpZiBZMiA8IFkxIHRoZW4KKyAgICAgICAgIE5ld19QYWdlIChXaW4pOworICAgICAgICAgWTEgOj0gMDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIFkxIDwgWTIgdGhlbgorICAgICAgICAgTmV3X0xpbmUgKFdpbiwgUG9zaXRpdmVfQ291bnQgKFkyIC0gWTEpKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTGluZTsKKworICAgcHJvY2VkdXJlIFNldF9MaW5lIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBTZXRfTGluZSAoR2V0X1dpbmRvdywgVG8pOworICAgZW5kIFNldF9MaW5lOworCisgICBmdW5jdGlvbiBDb2wgKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50CisgICBpcworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTiA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZLCBYKTsKKyAgICAgIE4gOj0gTmF0dXJhbCAoWCk7IE4gOj0gTiArIDE7CisgICAgICAtLSAgaWYgTiA+IE5hdHVyYWwgKENvdW50J0xhc3QpIHRoZW4KKyAgICAgIC0tICAgICByYWlzZSBMYXlvdXRfRXJyb3I7CisgICAgICAtLSAgZW5kIGlmOworICAgICAgcmV0dXJuIFBvc2l0aXZlX0NvdW50IChOKTsKKyAgIGVuZCBDb2w7CisKKyAgIGZ1bmN0aW9uIENvbCByZXR1cm4gUG9zaXRpdmVfQ291bnQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIENvbCAoR2V0X1dpbmRvdyk7CisgICBlbmQgQ29sOworCisgICBmdW5jdGlvbiBMaW5lIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBQb3NpdGl2ZV9Db3VudAorICAgaXMKKyAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIE4gOiBOYXR1cmFsOworICAgYmVnaW4KKyAgICAgIEdldF9DdXJzb3JfUG9zaXRpb24gKFdpbiwgWSwgWCk7CisgICAgICBOIDo9IE5hdHVyYWwgKFkpOyBOIDo9IE4gKyAxOworICAgICAgLS0gIGlmIE4gPiBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuCisgICAgICAtLSAgICAgcmFpc2UgTGF5b3V0X0Vycm9yOworICAgICAgLS0gIGVuZCBpZjsKKyAgICAgIHJldHVybiBQb3NpdGl2ZV9Db3VudCAoTik7CisgICBlbmQgTGluZTsKKworICAgZnVuY3Rpb24gTGluZSByZXR1cm4gUG9zaXRpdmVfQ291bnQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIExpbmUgKEdldF9XaW5kb3cpOworICAgZW5kIExpbmU7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDaGFyYWN0ZXJzIE91dHB1dCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFB1dCAoV2luICA6IGluIFdpbmRvdzsgSXRlbSA6IGluIENoYXJhY3RlcikKKyAgIGlzCisgICAgICBQX1NpemUgOiBjb25zdGFudCBDb3VudCA6PSBQYWdlX0xlbmd0aCAoV2luKTsKKyAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIEwgOiBMaW5lX0NvdW50OworICAgICAgQyA6IENvbHVtbl9Db3VudDsKKyAgIGJlZ2luCisgICAgICBpZiBQX1NpemUgPiAwIHRoZW4KKyAgICAgICAgIEdldF9DdXJzb3JfUG9zaXRpb24gKFdpbiwgWSwgWCk7CisgICAgICAgICBHZXRfU2l6ZSAoV2luLCBMLCBDKTsKKyAgICAgICAgIGlmIChZICsgMSkgPSBMIGFuZCB0aGVuIChYICsgMSkgPSBDIHRoZW4KKyAgICAgICAgICAgIE5ld19QYWdlIChXaW4pOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChXaW4sIEl0ZW0pOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dCAoSXRlbSA6IGluIENoYXJhY3RlcikKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtKTsKKyAgIGVuZCBQdXQ7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTdHJpbmdzLU91dHB1dCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFB1dCAoV2luICA6IGluIFdpbmRvdzsgSXRlbSA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICBQX1NpemUgOiBjb25zdGFudCBDb3VudCA6PSBQYWdlX0xlbmd0aCAoV2luKTsKKyAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIEwgOiBMaW5lX0NvdW50OworICAgICAgQyA6IENvbHVtbl9Db3VudDsKKyAgIGJlZ2luCisgICAgICBpZiBQX1NpemUgPiAwIHRoZW4KKyAgICAgICAgIEdldF9DdXJzb3JfUG9zaXRpb24gKFdpbiwgWSwgWCk7CisgICAgICAgICBHZXRfU2l6ZSAoV2luLCBMLCBDKTsKKyAgICAgICAgIGlmIChZICsgMSkgPSBMIGFuZCB0aGVuIChYICsgMSArIEl0ZW0nTGVuZ3RoKSA+PSBDIHRoZW4KKyAgICAgICAgICAgIE5ld19QYWdlIChXaW4pOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChXaW4sIEl0ZW0pOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dCAoSXRlbSA6IGluIFN0cmluZykKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtKTsKKyAgIGVuZCBQdXQ7CisKKyAgIHByb2NlZHVyZSBQdXRfTGluZQorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBTdHJpbmcpCisgICBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoV2luLCBJdGVtKTsKKyAgICAgIE5ld19MaW5lIChXaW4sIDEpOworICAgZW5kIFB1dF9MaW5lOworCisgICBwcm9jZWR1cmUgUHV0X0xpbmUKKyAgICAgKEl0ZW0gOiBpbiBTdHJpbmcpCisgICBpcworICAgYmVnaW4KKyAgICAgIFB1dF9MaW5lIChHZXRfV2luZG93LCBJdGVtKTsKKyAgIGVuZCBQdXRfTGluZTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2YzQ4YQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzCkBAIC0wLDAgKzEsMTM2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTMgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5UZXh0X0lPOword2l0aCBBZGEuSU9fRXhjZXB0aW9uczsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8gaXMKKworICAgdXNlIHR5cGUgQWRhLlRleHRfSU8uQ291bnQ7CisgICBzdWJ0eXBlIENvdW50IGlzIEFkYS5UZXh0X0lPLkNvdW50OworICAgc3VidHlwZSBQb3NpdGl2ZV9Db3VudCBpcyBDb3VudCByYW5nZSAxIC4uIENvdW50J0xhc3Q7CisKKyAgIHN1YnR5cGUgRmllbGQgaXMgQWRhLlRleHRfSU8uRmllbGQ7CisgICBzdWJ0eXBlIE51bWJlcl9CYXNlIGlzIEludGVnZXIgcmFuZ2UgMiAuLiAxNjsKKworICAgdHlwZSBUeXBlX1NldCBpcyAoTG93ZXJfQ2FzZSwgVXBwZXJfQ2FzZSwgTWl4ZWRfQ2FzZSk7CisKKyAgIC0tICBGb3IgbW9zdCBvZiB0aGUgcm91dGluZXMgeW91IHdpbGwgc2VlIGEgdmVyc2lvbiB3aXRob3V0IGEgV2luZG93CisgICAtLSAgdHlwZSBwYXJhbWV0ZXIuIFRoZXkgd2lsbCBvcGVyYXRlIG9uIGEgZGVmYXVsdCB3aW5kb3csIHdoaWNoIGNhbgorICAgLS0gIGJlIHNldCBieSB0aGUgdXNlci4gSXQgaXMgaW5pdGlhbGx5IGVxdWFsIHRvIFN0YW5kYXJkX1dpbmRvdy4KKworICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgU2V0IFdpbiBhcyB0aGUgZGVmYXVsdCB3aW5kb3cKKworICAgZnVuY3Rpb24gR2V0X1dpbmRvdyByZXR1cm4gV2luZG93OworICAgLS0gIEdldCB0aGUgY3VycmVudCBkZWZhdWx0IHdpbmRvdworCisgICBwcm9jZWR1cmUgRmx1c2ggKFdpbiA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgRmx1c2g7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTcGVjaWZpY2F0aW9uIG9mIGxpbmUgYW5kIHBhZ2UgbGVuZ3RocyAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgLS0gIFRoZXJlIGFyZSBubyBzZXQgcm91dGluZXMgaW4gdGhpcyBwYWNrYWdlLiBJIGFzc3VtZSwgdGhhdCB5b3UgYWxsb2NhdGUKKyAgIC0tICB0aGUgd2luZG93IHdpdGggYW4gYXBwcm9wcmlhdGUgc2l6ZS4KKyAgIC0tICBBIHNjcm9sbC13aW5kb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gcGFnZSB3aXRoIHVuYm91bmRlZCBwYWdlIGxlbmd0aCwKKyAgIC0tICBpLmUuIGl0IHJldHVybnMgdGhlIGNvbnZlbnRpb25hbCAwIGFzIHBhZ2UgbGVuZ3RoLgorCisgICBmdW5jdGlvbiBMaW5lX0xlbmd0aCAoV2luIDogaW4gV2luZG93KSByZXR1cm4gQ291bnQ7CisgICBmdW5jdGlvbiBMaW5lX0xlbmd0aCByZXR1cm4gQ291bnQ7CisKKyAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBDb3VudDsKKyAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIHJldHVybiBDb3VudDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDb2x1bW4sIExpbmUsIGFuZCBQYWdlIENvbnRyb2wgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIE5ld19MaW5lIChXaW4gOiBpbiBXaW5kb3c7IFNwYWNpbmcgOiBpbiBQb3NpdGl2ZV9Db3VudCA6PSAxKTsKKyAgIHByb2NlZHVyZSBOZXdfTGluZSAoU3BhY2luZyA6IGluIFBvc2l0aXZlX0NvdW50IDo9IDEpOworCisgICBwcm9jZWR1cmUgTmV3X1BhZ2UgKFdpbiA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgTmV3X1BhZ2U7CisKKyAgIHByb2NlZHVyZSBTZXRfQ29sIChXaW4gOiBpbiBXaW5kb3c7ICBUbyA6IGluIFBvc2l0aXZlX0NvdW50KTsKKyAgIHByb2NlZHVyZSBTZXRfQ29sIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KTsKKworICAgcHJvY2VkdXJlIFNldF9MaW5lIChXaW4gOiBpbiBXaW5kb3c7IFRvIDogaW4gUG9zaXRpdmVfQ291bnQpOworICAgcHJvY2VkdXJlIFNldF9MaW5lIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KTsKKworICAgZnVuY3Rpb24gQ29sIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBQb3NpdGl2ZV9Db3VudDsKKyAgIGZ1bmN0aW9uIENvbCByZXR1cm4gUG9zaXRpdmVfQ291bnQ7CisKKyAgIGZ1bmN0aW9uIExpbmUgKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50OworICAgZnVuY3Rpb24gTGluZSByZXR1cm4gUG9zaXRpdmVfQ291bnQ7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDaGFyYWN0ZXJzLU91dHB1dCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFB1dCAoV2luICA6IGluIFdpbmRvdzsgSXRlbSA6IGluIENoYXJhY3Rlcik7CisgICBwcm9jZWR1cmUgUHV0IChJdGVtIDogaW4gQ2hhcmFjdGVyKTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFN0cmluZ3MtT3V0cHV0IC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogaW4gV2luZG93OyBJdGVtIDogaW4gU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBQdXQgKEl0ZW0gOiBpbiBTdHJpbmcpOworCisgICBwcm9jZWR1cmUgUHV0X0xpbmUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gU3RyaW5nKTsKKworICAgcHJvY2VkdXJlIFB1dF9MaW5lCisgICAgIChJdGVtIDogaW4gU3RyaW5nKTsKKworICAgLS0gIEV4Y2VwdGlvbnMKKworICAgU3RhdHVzX0Vycm9yIDogZXhjZXB0aW9uIHJlbmFtZXMgQWRhLklPX0V4Y2VwdGlvbnMuU3RhdHVzX0Vycm9yOworICAgTW9kZV9FcnJvciAgIDogZXhjZXB0aW9uIHJlbmFtZXMgQWRhLklPX0V4Y2VwdGlvbnMuTW9kZV9FcnJvcjsKKyAgIE5hbWVfRXJyb3IgICA6IGV4Y2VwdGlvbiByZW5hbWVzIEFkYS5JT19FeGNlcHRpb25zLk5hbWVfRXJyb3I7CisgICBVc2VfRXJyb3IgICAgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5Vc2VfRXJyb3I7CisgICBEZXZpY2VfRXJyb3IgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5EZXZpY2VfRXJyb3I7CisgICBFbmRfRXJyb3IgICAgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5FbmRfRXJyb3I7CisgICBEYXRhX0Vycm9yICAgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5EYXRhX0Vycm9yOworICAgTGF5b3V0X0Vycm9yIDogZXhjZXB0aW9uIHJlbmFtZXMgQWRhLklPX0V4Y2VwdGlvbnMuTGF5b3V0X0Vycm9yOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRiX3AgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZGJfcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDc0NTRhCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRiX3AKQEAgLTAsMCArMSw5NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjUgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaWYgQURBX1RSQUNFIHRoZW4KK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Oword2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CisjZW5kIGlmOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSBpcworCisjaWYgQURBX1RSQUNFIHRoZW4KKyAgIHR5cGUgQ19UcmFjZVR5cGUgaXMgbmV3IENfVUludDsKKworICAgZnVuY3Rpb24gVHJhY2VBZGFfVG9fVHJhY2VDIGlzIG5ldworICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBUcmFjZV9BdHRyaWJ1dGVfU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBDX1RyYWNlVHlwZSk7CisKKyAgIHByb2NlZHVyZSBUcmFjZV9PbiAoeCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIGlzCisgICAgICBwcm9jZWR1cmUgdHJhY2VDICh5IDogQ19UcmFjZVR5cGUpOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdHJhY2VDLCAidHJhY2UiKTsKKyAgIGJlZ2luCisgICAgICB0cmFjZUMgKFRyYWNlQWRhX1RvX1RyYWNlQyAoeCkpOworICAgZW5kIFRyYWNlX09uOworCisgICAtLSAgNzUuICgxMikgQSBDIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzIGNhbgorICAgLS0gICAgICBjb3JyZXNwb25kIHRvIHNldmVyYWwgQWRhIHN1YnByb2dyYW1zLCB0YWtpbmcgdmFyaW91cyBzcGVjaWZpYworICAgLS0gICAgICBudW1iZXJzIGFuZCB0eXBlcyBvZiBwYXJhbWV0ZXJzLgorCisgICBwcm9jZWR1cmUgVHJhY2VfUHV0IChzdHIgOiBTdHJpbmcpIGlzCisgICAgICBwcm9jZWR1cmUgdHJhY2VmIChmb3JtYXQgOiBjaGFyX2FycmF5OyBzIDogY2hhcl9hcnJheSk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0cmFjZWYsICJfdHJhY2VmIik7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIHN0cidMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgICAgZm9ybWF0c3RyIDogY29uc3RhbnQgU3RyaW5nIDo9ICIlcyIgJiAgQVNDSUkuTnVsOworICAgICAgZm9ybWF0dHh0IDogY2hhcl9hcnJheSAoMCAuLiBmb3JtYXRzdHInTGVuZ3RoKTsKKyAgIGJlZ2luCisgICAgICBUb19DIChmb3JtYXRzdHIsIGZvcm1hdHR4dCwgTGVuZ3RoKTsKKyAgICAgIFRvX0MgKHN0ciwgVHh0LCBMZW5ndGgpOworICAgICAgdHJhY2VmIChmb3JtYXR0eHQsIFR4dCk7CisgICBlbmQgVHJhY2VfUHV0OworI2Vsc2UKKyAgIHByb2NlZHVyZSBUcmFjZV9PbiAoeCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIGlzCisjaWYgUFJBR01BX1VOUkVGCisgICBwcmFnbWEgVW5yZWZlcmVuY2VkICh4KTsKKyNlbmQgaWY7CisgICBiZWdpbgorICAgICAgbnVsbDsKKyAgIGVuZCBUcmFjZV9PbjsKKworICAgcHJvY2VkdXJlIFRyYWNlX1B1dCAoc3RyIDogU3RyaW5nKSBpcworI2lmIFBSQUdNQV9VTlJFRgorICAgcHJhZ21hIFVucmVmZXJlbmNlZCAoc3RyKTsKKyNlbmQgaWY7CisgICBiZWdpbgorICAgICAgbnVsbDsKKyAgIGVuZCBUcmFjZV9QdXQ7CisjZW5kIGlmOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhYWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UuYWRzCkBAIC0wLDAgKzEsNDcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZSBpcworICAgcHJhZ21hIFB1cmUgKFRlcm1pbmFsX0ludGVyZmFjZSk7CistLQorLS0gIEV2ZXJ5dGhpbmcgaXMgaW4gdGhlIGNoaWxkIHVuaXRzCistLQorZW5kIFRlcm1pbmFsX0ludGVyZmFjZTsKZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiN2RjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9JTlNUQUxMCkBAIC0wLDAgKzEsMTc0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBJTlNUQUxMLHYgMS4xMzUgMjAwOC8xMS8wMiAyMToxMzo1MSB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgIEhvdyB0byBpbnN0YWxsIE5jdXJzZXMvVGVybWluZm8gb24geW91ciBzeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiBSRUFEIEFMTCBPRiBUSElTIEZJTEUgQkVGT1JFIFlPVSBUUlkgVE8gSU5TVEFMTCBOQ1VSU0VTLiAqCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1lvdSBzaG91bGQgYmUgcmVhZGluZyB0aGUgZmlsZSBJTlNUQUxMIGluIGEgZGlyZWN0b3J5IGNhbGxlZCBuY3Vyc2VzLWQuZCwgd2hlcmUKK2QuZCBpcyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlci4gIFRoZXJlIHNob3VsZCBiZSBzZXZlcmFsIHN1YmRpcmVjdG9yaWVzLAoraW5jbHVkaW5nIGBjKysnLCBgZm9ybScsIGBtYW4nLCBgbWVudScsICdtaXNjJywgYG5jdXJzZXMnLCBgcGFuZWwnLCBgcHJvZ3MnLAorYW5kIGB0ZXN0Jy4gIFNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIGEgcm9hZG1hcCB0byB0aGUgcGFja2FnZS4KKworSWYgeW91IGFyZSBhIExpbnV4IG9yIEZyZWVCU0Qgb3IgTmV0QlNEIGRpc3RyaWJ1dGlvbiBpbnRlZ3JhdG9yIG9yIHBhY2thZ2VyLAorcGxlYXNlIHJlYWQgYW5kIGFjdCBvbiB0aGUgc2VjdGlvbiB0aXRsZWQgSUYgWU9VIEFSRSBBIFNZU1RFTSBJTlRFR1JBVE9SCitiZWxvdy4KKworSWYgeW91IGFyZSBjb252ZXJ0aW5nIGZyb20gQlNEIGN1cnNlcyBhbmQgZG8gbm90IGhhdmUgcm9vdCBhY2Nlc3MsIGJlIHN1cmUKK3RvIHJlYWQgdGhlIEJTRCBDT05WRVJTSU9OIE5PVEVTIHNlY3Rpb24gYmVsb3cuCisKK0lmIHlvdSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucyB1c2luZyBncG0gd2l0aCBuY3Vyc2VzLAorcmVhZCB0aGUgVVNJTkcgTkNVUlNFUyBXSVRIIEdQTSBzZWN0aW9uIGJlbG93LgorCitJZiB5b3UgYXJlIHJ1bm5pbmcgb3ZlciB0aGUgQW5kcmV3IEZpbGUgU3lzdGVtIHNlZSB0aGUgbm90ZSBiZWxvdyBvbgorVVNJTkcgTkNVUlNFUyBXSVRIIEFGUy4KKworSWYgeW91IGFyZSBjcm9zcy1jb21waWxpbmcsIHNlZSB0aGUgbm90ZSBiZWxvdyBvbiBCVUlMRElORyBOQ1VSU0VTIFdJVEggQQorQ1JPU1MtQ09NUElMRVIuCisKK0lmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBBZGE5NSBiaW5kaW5nLCBnbyB0byB0aGUgQWRhOTUgZGlyZWN0b3J5IGFuZAorZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgdGhlcmUuICBUaGUgQWRhOTUgYmluZGluZyBpcyBub3QgY292ZXJlZCBiZWxvdy4KKworSWYgeW91IGFyZSB1c2luZyBhbnl0aGluZyBidXQgKGEpIExpbnV4LCBvciAoYikgb25lIG9mIHRoZSA0LjRCU0QtYmFzZWQKK2kzODYgVW5peGVzLCBnbyByZWFkIHRoZSBQb3J0YWJpbGl0eSBzZWN0aW9uIGluIHRoZSBUTy1ETyBmaWxlIGJlZm9yZSB5b3UKK2RvIGFueXRoaW5nIGVsc2UuCisKKworUkVRVUlSRU1FTlRTOgorLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyB0byBidWlsZCBhbmQgaW5zdGFsbCBuY3Vyc2VzIHVuZGVyIFVOSVg6CisKKwkqIEFOU0kgQyBjb21waWxlciAgKGdjYywgZm9yIGluc3RhbmNlKQorCSogc2ggICAgICAgICAgICAgICAoYmFzaCB3aWxsIGRvKQorCSogYXdrICAgICAgICAgICAgICAobWF3ayBvciBnYXdrIHdpbGwgZG8pCisJKiBzZWQKKwkqIEJTRCBvciBTeXN0ZW0gViBzdHlsZSBpbnN0YWxsIChhIHNjcmlwdCBpcyBlbmNsb3NlZCkKKworTmN1cnNlcyBoYXMgYmVlbiBhbHNvIGJ1aWx0IGluIHRoZSBPUy8yIEVNWCBlbnZpcm9ubWVudC4KKworCitJTlNUQUxMQVRJT04gUFJPQ0VEVVJFOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiAgRmlyc3QsIGRlY2lkZSB3aGV0aGVyIHlvdSB3YW50IG5jdXJzZXMgdG8gcmVwbGFjZSB5b3VyIGV4aXN0aW5nIGxpYnJhcnkgKGluCisgICAgd2hpY2ggY2FzZSB5b3UnbGwgbmVlZCBzdXBlci11c2VyIHByaXZpbGVnZXMpIG9yIGJlIGluc3RhbGxlZCBpbiBwYXJhbGxlbAorICAgIHdpdGggaXQuCisKKyAgICBUaGUgLS1wcmVmaXggb3B0aW9uIHRvIGNvbmZpZ3VyZSBjaGFuZ2VzIHRoZSByb290IGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZworICAgIG5jdXJzZXMuICBUaGUgZGVmYXVsdCBpcyBub3JtYWxseSBpbiBzdWJkaXJlY3RvcmllcyBvZiAvdXNyL2xvY2FsLCBleGNlcHQKKyAgICBmb3Igc3lzdGVtcyB3aGVyZSBuY3Vyc2VzIGlzIG5vcm1hbGx5IGluc3RhbGxlZCBhcyBhIHN5c3RlbSBsaWJyYXJ5LCBlLmcuLAorICAgIExpbnV4LCB0aGUgdmFyaW91cyBCU0Qgc3lzdGVtcyBhbmQgQ3lnd2luLiAgVXNlIC0tcHJlZml4PS91c3IgdG8gcmVwbGFjZQorICAgIHlvdXIgZGVmYXVsdCBjdXJzZXMgZGlzdHJpYnV0aW9uLgorCisgICAgVGhlIHBhY2thZ2UgZ2V0cyBpbnN0YWxsZWQgYmVuZWF0aCB0aGUgLS1wcmVmaXggZGlyZWN0b3J5IGFzIGZvbGxvd3M6CisKKyAgICBJbiAkKHByZWZpeCkvYmluOiAgICAgICAgICB0aWMsIGluZm9jbXAsIGNhcHRvaW5mbywgdHNldCwKKwkJCQlyZXNldCwgY2xlYXIsIHRwdXQsIHRvZQorICAgIEluICQocHJlZml4KS9saWI6ICAgICAgICAgIGxpYm5jdXJzZXMqLiogbGliY3Vyc2VzLmEKKyAgICBJbiAkKHByZWZpeCkvc2hhcmUvdGVybWluZm86IGNvbXBpbGVkIHRlcm1pbmFsIGRlc2NyaXB0aW9ucworICAgIEluICQocHJlZml4KS9pbmNsdWRlOiAgICAgIEMgaGVhZGVyIGZpbGVzCisgICAgVW5kZXIgJChwcmVmaXgpL21hbjogICAgICAgdGhlIG1hbnVhbCBwYWdlcworCisgICAgTm90ZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGF0dGVtcHRzIHRvIGxvY2F0ZSBwcmV2aW91cyBpbnN0YWxsYXRpb24gb2YKKyAgICBuY3Vyc2VzLCBhbmQgd2lsbCBzZXQgdGhlIGRlZmF1bHQgcHJlZml4IGFjY29yZGluZyB0byB3aGVyZSBpdCBmaW5kcyB0aGUKKyAgICBuY3Vyc2VzIGhlYWRlcnMuCisKKyAgICBEbyBub3QgdXNlIGNvbW1hbmRzIHN1Y2ggYXMKKworICAgIAltYWtlIGluc3RhbGwgcHJlZml4PVhYWAorCisgICAgdG8gY2hhbmdlIHRoZSBwcmVmaXggYWZ0ZXIgY29uZmlndXJhdGlvbiwgc2luY2UgdGhlIHByZWZpeCB2YWx1ZSBpcyB1c2VkCisgICAgZm9yIHNvbWUgYWJzb2x1dGUgcGF0aG5hbWVzIHN1Y2ggYXMgVEVSTUlORk8uICBJbnN0ZWFkIGRvIHRoaXMKKworICAgIAltYWtlIGluc3RhbGwgREVTVERJUj1YWFgKKworICAgIFNlZSBhbHNvIHRoZSBkaXNjdXNzaW9uIG9mIC0td2l0aC1pbnN0YWxsLXByZWZpeC4KKworMi4gIFR5cGUgYC4vY29uZmlndXJlJyBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uIHRvCisgICAgY29uZmlndXJlIG5jdXJzZXMgZm9yIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBhbmQgY3JlYXRlIHRoZSBNYWtlZmlsZXMuCisgICAgQmVzaWRlcyAtLXByZWZpeCwgdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBjdXN0b21pemUKKyAgICB0aGUgaW5zdGFsbGF0aW9uOyB1c2UgYC4vY29uZmlndXJlIC0taGVscCcgdG8gbGlzdCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuCisKKyAgICBJZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCwgcmVhZCB0aGUgUE9SVEFCSUxJVFkgc2VjdGlvbiBpbgorICAgIHRoZSBmaWxlIG5jdXJzZXMvUkVBRE1FIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbgorICAgIGZpbGUgZm9yIHlvdXIgc3lzdGVtLgorCisgICAgVGhlIGBjb25maWd1cmUnIHNjcmlwdCBnZW5lcmF0ZXMgbWFrZWZpbGUgcnVsZXMgZm9yIG9uZSBvciBtb3JlIG9iamVjdAorICAgIG1vZGVscyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBsaWJyYXJpZXM6CisKKwlsaWJuY3Vyc2VzLmEgKG5vcm1hbCkKKworCWxpYmN1cnNlcy5hIChub3JtYWwsIGEgbGluayB0byBsaWJuY3Vyc2VzLmEpCisJCVRoaXMgZ2V0cyBsZWZ0IG91dCBpZiB5b3UgY29uZmlndXJlIHdpdGggLS1kaXNhYmxlLW92ZXJ3cml0ZS4KKworCWxpYm5jdXJzZXMuc28gKHNoYXJlZCkKKworCWxpYm5jdXJzZXNfZy5hIChkZWJ1ZykKKworCWxpYm5jdXJzZXNfcC5hIChwcm9maWxlKQorCisJbGlibmN1cnNlcy5sYSAobGlidG9vbCkKKworICAgIElmIHlvdSBjb25maWd1cmUgdXNpbmcgdGhlIC0tZW5hYmxlLXdpZGVjIG9wdGlvbiwgYSAidyIgaXMgYXBwZW5kZWQgdG8gdGhlCisgICAgbGlicmFyeSBuYW1lcyAoZS5nLiwgbGlibmN1cnNlc3cuYSksIGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcmllcyBzdXBwb3J0CisgICAgd2lkZS1jaGFyYWN0ZXJzLCBlLmcuLCB2aWEgYSBVVEYtOCBsb2NhbGUuICBUaGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMKKyAgICBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBub24td2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbjsgd2lkZS1jaGFyYWN0ZXIKKyAgICBmZWF0dXJlcyBhcmUgcHJvdmlkZWQgYnkgaWZkZWYncyBpbiB0aGUgaGVhZGVyIGZpbGVzLiAgVGhlIHdpZGUtY2hhcmFjdGVyCisgICAgbGlicmFyeSBpbnRlcmZhY2VzIGFyZSBub3QgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCB0aGUgbm9uLXdpZGUtY2hhcmFjdGVyCisgICAgdmVyc2lvbi4gIEJ1aWxkaW5nIGFuZCBydW5uaW5nIHRoZSB3aWRlLWNoYXJhY3RlciBjb2RlIHJlbGllcyBvbiBhIGZhaXJseQorICAgIHJlY2VudCBpbXBsZW1lbnRhdGlvbiBvZiBsaWJpY29udi4gIFdlIGhhdmUgYnVpbHQgdGhpcyBjb25maWd1cmF0aW9uIG9uCisgICAgTGludXggdXNpbmcgbGliaWNvbnYsIHNvbWV0aW1lcyByZXF1aXJpbmcgbGlidXRmOC4KKworICAgIElmIHlvdSBjb25maWd1cmUgdXNpbmcgdGhlIC0td2l0aC1wdGhyZWFkIG9wdGlvbiwgYSAidCIgaXMgYXBwZW5kZWQgdG8KKyAgICB0aGUgbGlicmFyeSBuYW1lcyAoZS5nLiwgbGlibmN1cnNlc3QuYSwgbGlibmN1cnNlc3R3LmEpLgorCisgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSBtb2RlbHMsIHRoZSBub3JtYWwgYW5kIGRlYnVnIGxpYnJhcmllcyB3aWxsIGJlCisgICAgY29uZmlndXJlZC4gIFR5cGluZyBgY29uZmlndXJlJyB3aXRoIG5vIGFyZ3VtZW50cyBpcyBlcXVpdmFsZW50IHRvOgorCisJLi9jb25maWd1cmUgLS13aXRoLW5vcm1hbCAtLXdpdGgtZGVidWcgLS1lbmFibGUtb3ZlcndyaXRlCisKKyAgICBUeXBpbmcKKworCS4vY29uZmlndXJlIC0td2l0aC1zaGFyZWQKKworICAgIG1ha2VzIHRoZSBzaGFyZWQgbGlicmFyaWVzIHRoZSBkZWZhdWx0LCByZXN1bHRpbmcgaW4KKworCS4vY29uZmlndXJlIC0td2l0aC1zaGFyZWQgLS13aXRoLW5vcm1hbCAtLXdpdGgtZGVidWcgLS1lbmFibGUtb3ZlcndyaXRlCisKKyAgICBJZiB5b3Ugd2FudCBvbmx5IHNoYXJlZCBsaWJyYXJpZXMsIHR5cGUKKworCS4vY29uZmlndXJlIC0td2l0aC1zaGFyZWQgLS13aXRob3V0LW5vcm1hbCAtLXdpdGhvdXQtZGVidWcKKworICAgIFJ1bGVzIGZvciBnZW5lcmF0aW5nIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGhpZ2hseSBkZXBlbmRlbnQgdXBvbiB0aGUgY2hvaWNlCisgICAgb2YgaG9zdCBzeXN0ZW0gYW5kIGNvbXBpbGVyLiAgV2UndmUgYmVlbiB0ZXN0aW5nIHNoYXJlZCBsaWJyYXJpZXMgb24gTGludXgKKyAgICBhbmQgU3VuT1Mgd2l0aCBnY2MsIGJ1dCBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSB0byBtYWtlIHNoYXJlZCBsaWJyYXJpZXMKKyAgICB3b3JrIG9uIG90aGVyIHN5c3RlbXMuCisKKyAgICBJZiB5b3UgaGF2ZSBsaWJ0b29sIGluc3RhbGxlZCwgeW91IGNhbiB0eXBlCisKKwkuL2NvbmZpZ3VyZSAtLXdpdGgtbGlidG9vbAorCisgICAgdG8gZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIHN0YXRpYyBhbmQvb3Igc2hhcmVkIGxpYnJhcmllcyBmb3IgeW91cgorICAgIHBsYXRmb3JtIHVzaW5nIGxpYnRvb2wuCisKKyAgICBZb3UgY2FuIG1ha2UgY3Vyc2VzIGFuZCB0ZXJtaW5mbyBmYWxsIGJhY2sgdG8gYW4gZXhpc3RpbmcgZmlsZSBvZiB0ZXJtY2FwCisgICAgZGVmaW5pdGlvbnMgYnkgY29uZmlndXJpbmcgd2l0aCAtLWVuYWJsZS10ZXJtY2FwLiAgSWYgeW91IGRvIHRoaXMsIHRoZQorICAgIGxpYnJhcnkgd2lsbCBzZWFyY2ggL2V0Yy90ZXJtY2FwIGJlZm9yZSB0aGUgdGVybWluZm8gZGF0YWJhc2UsIGFuZCB3aWxsCisgICAgYWxzbyBpbnRlcnByZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlLiAgU2VlIHRoZQorICAgIHNlY3Rpb24gQlNEIENPTlZFUlNJT04gTk9URVMgYmVsb3cuCisKKzMuICBUeXBlIGBtYWtlJy4gIElnbm9yZSBhbnkgd2FybmluZ3MsIG5vIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBwcm9kdWNlZC4KKyAgICBUaGlzIHNob3VsZCBjb21waWxlIHRoZSBuY3Vyc2VzIGxpYnJhcnksIHRoZSB0ZXJtaW5mbyBjb21waWxlciB0aWMoMSksCisgICAgY2FwdG9pbmZvKDEpLCBpbmZvY21wKDEpLCB0b2UoMSksIGNsZWFyKDEpIHRzZXQoMSksIHJlc2V0KDEpLCBhbmQgdHB1dCgxKQorICAgIHByb2dyYW1zIChzZWUgdGhlIG1hbnVhbCBwYWdlcyBmb3IgZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGV5IGRvKSwgc29tZSB0ZXN0CisgICAgcHJvZ3JhbXMsIGFuZCB0aGUgcGFuZWxzLCBtZW51cywgYW5kIGZvcm1zIGxpYnJhcmllcy4KKworNC4gIFJ1biBuY3Vyc2VzIGFuZCBzZXZlcmFsIG90aGVyIHRlc3QgcHJvZ3JhbXMgaW4gdGhlIHRlc3QgZGlyZWN0b3J5IHRvCisgICAgdmVyaWZ5IHRoYXQgbmN1cnNlcyBmdW5jdGlvbnMgY29ycmVjdGx5IGJlZm9yZSBkb2luZyBhbiBpbnN0YWxsIHRoYXQKKyAgICBtYXkgb3ZlcndyaXRlIHN5c3RlbSBmaWxlcy4gIFJlYWQgdGhlIGZpbGUgdGVzdC9SRUFETUUgZm9yIGRldGFpbHMgb24KKyAgICB0aGUgdGVzdCBwcm9ncmFtcy4KKworICAgIE5PVEU6IFlvdSBtdXN0IGhhdmUgaW5zdGFsbGVkIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSwgb3Igc2V0IHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlICRURVJNSU5GTyB0byBwb2ludCB0byBhIFNWcjQtY29tcGF0aWJsZSB0ZXJtaW5mbworICAgIGRhdGFiYXNlIGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0IHByb2dyYW1zLiAgTm90IGFsbCB2ZW5kb3JzJyB0ZXJtaW5mbworICAgIGRhdGFiYXNlcyBhcmUgU1ZyNC1jb21wYXRpYmxlLCBidXQgbW9zdCBzZWVtIHRvIGJlLiAgRXhjZXB0aW9ucyBpbmNsdWRlCisgICAgREVDJ3MgRGlnaXRhbCBVbml4IChmb3JtZXJseSBrbm93biBhcyBPU0YvMSkuCisKKyAgICBJZiB5b3UgcnVuIHRoZSB0ZXN0IHByb2dyYW1zIFdJVEhPVVQgaW5zdGFsbGluZyB0ZXJtaW5mbywgbmN1cnNlcyBtYXkKKyAgICByZWFkIHRoZSB0ZXJtY2FwIGZpbGUgYW5kIGNhY2hlIHRoYXQgaW4gJEhPTUUvLnRlcm1pbmZvLCB3aGljaCB3aWxsCisgICAgdGhlcmVhZnRlciBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHRlcm1pbmZvIGRhdGFiYXNlLiAgU2VlIHRoZSBjb21tZW50cworICAgIG9uICItLWVuYWJsZS1nZXRjYXAtY2FjaGUiLCB0byBzZWUgd2h5IHRoaXMgaXMgYSBCYWQgVGhpbmcuCisKKyAgICBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgbmN1cnNlcyB0byB1c2Ugb3RoZXIgdGVybWluZm8gZGF0YWJhc2UgZm9ybWF0cy4KKyAgICBBIGZldyBhcmUgcHJvdmlkZWQgYXMgZXhhbXBsZXMgaW4gdGhlIGluY2x1ZGUtZGlyZWN0b3J5IChzZWUgLS13aXRoLWNhcHMpLgorCisgICAgVGhlIG5jdXJzZXMgcHJvZ3JhbSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8gdGVzdCB0aGUgbmN1cnNlcyBsaWJyYXJ5LgorICAgIFlvdSBjYW4gdXNlIGl0IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JlZW4gaGlnaGxpZ2h0cyB3b3JrIGNvcnJlY3RseSwgdGhhdAorICAgIGN1cnNvciBhZGRyZXNzaW5nIGFuZCB3aW5kb3cgc2Nyb2xsaW5nIHdvcmtzIE9LLCBldGMuCisKKzUuICBPbmNlIHlvdSd2ZSB0ZXN0ZWQsIHlvdSBjYW4gdHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIGxpYnJhcmllcywKKyAgICB0aGUgcHJvZ3JhbXMsIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBhbmQgdGhlIG1hbnVhbCBwYWdlcy4gIEFsdGVybmF0ZWx5LCB5b3UKKyAgICBjYW4gdHlwZSBgbWFrZSBpbnN0YWxsJyBpbiBlYWNoIGRpcmVjdG9yeSB5b3Ugd2FudCB0byBpbnN0YWxsLiAgSW4gdGhlCisgICAgdG9wLWxldmVsIGRpcmVjdG9yeSwgeW91IGNhbiBkbyBhIHBhcnRpYWwgaW5zdGFsbCB1c2luZyB0aGVzZSBjb21tYW5kczoKKworCSdtYWtlIGluc3RhbGwucHJvZ3MnICAgIGluc3RhbGxzIHRpYywgaW5mb2NtcCwgZXRjLi4uCisJJ21ha2UgaW5zdGFsbC5pbmNsdWRlcycgaW5zdGFsbHMgdGhlIGhlYWRlcnMuCisJJ21ha2UgaW5zdGFsbC5saWJzJyAgICAgaW5zdGFsbHMgdGhlIGxpYnJhcmllcyAoYW5kIHRoZSBoZWFkZXJzKS4KKwknbWFrZSBpbnN0YWxsLmRhdGEnICAgICBpbnN0YWxscyB0aGUgdGVybWluZm8gZGF0YS4gKE5vdGU6IGB0aWMnIG11c3QKKwkJCQliZSBpbnN0YWxsZWQgYmVmb3JlIHRoZSB0ZXJtaW5mbyBkYXRhIGNhbiBiZQorCQkJCWNvbXBpbGVkKS4KKwknbWFrZSBpbnN0YWxsLm1hbicgICAgICBpbnN0YWxscyB0aGUgbWFudWFsIHBhZ2VzLgorCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyAgICAgQ0FWRUFUIEVNUFRPUjogYGluc3RhbGwuZGF0YScgcnVuIGFzIHJvb3Qgd2lsbCBOVUtFIGFueSBleGlzdGluZyAgICAgIworICAjICB0ZXJtaW5mbyBkYXRhYmFzZS4gSWYgeW91IGhhdmUgYW55IGN1c3RvbSBvciB1bnVzdWFsIGVudHJpZXMgU0FWRSB0aGVtICAjCisgICMgIGJlZm9yZSB5b3UgaW5zdGFsbCBuY3Vyc2VzLiAgSSBoYXZlIGEgZmlsZSBjYWxsZWQgdGVybWluZm8uY3VzdG9tIGZvciAgICMKKyAgIyAgdGhpcyBwdXJwb3NlLiAgRG9uJ3QgZm9yZ2V0IHRvIHJ1biB0aWMgb24gdGhlIGZpbGUgb25jZSB5b3UncmUgZG9uZS4gICAgIworICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBUaGUgdGVybWluZm8oNSkgbWFudWFsIHBhZ2UgbXVzdCBiZSBwcmVwcm9jZXNzZWQgd2l0aCB0YmwoMSkgYmVmb3JlCisgICAgYmVpbmcgZm9ybWF0dGVkIGJ5IG5yb2ZmKDEpLiAgTW9kZXJuIG1hbigxKSBpbXBsZW1lbnRhdGlvbnMgdGVuZCB0byBkbworICAgIHRoaXMgYnkgZGVmYXVsdCwgYnV0IHlvdSBtYXkgd2FudCB0byBsb29rIGF0IHlvdXIgdmVyc2lvbidzIG1hbnVhbCBwYWdlCisgICAgdG8gYmUgc3VyZS4gIFlvdSBtYXkgYWxzbyBpbnN0YWxsIHRoZSBtYW51YWwgcGFnZXMgYWZ0ZXIgcHJlcHJvY2Vzc2luZworICAgIHdpdGggdGJsKDEpIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLW1hbnBhZ2UtdGJsLgorCisgICAgSWYgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBhIGN1cnNlcyBsaWJyYXJ5IHRoYXQgeW91IG5lZWQgdG8ga2VlcCB1c2luZworICAgIHlvdSdsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gaXQgYW5kIG5jdXJzZXMuICBTZWUgdGhlIGRpc2N1c3Npb24gb2YKKyAgICAtLWRpc2FibGUtb3ZlcndyaXRlLiAgSWYgbmN1cnNlcyBpcyBpbnN0YWxsZWQgb3V0c2lkZSB0aGUgc3RhbmRhcmQKKyAgICBkaXJlY3RvcmllcyAoL3Vzci9pbmNsdWRlIGFuZCAvdXNyL2xpYikgdGhlbiBhbGwgeW91ciB1c2VycyB3aWxsIG5lZWQgdG8KKyAgICB1c2UgdGhlIC1JIG9wdGlvbiB0byBjb21waWxlIHByb2dyYW1zIGFuZCAtTCB0byBsaW5rIHRoZW0uCisKKyAgICBJZiB5b3UgaGF2ZSBhbm90aGVyIGN1cnNlcyBpbnN0YWxsZWQgaW4geW91ciBzeXN0ZW0gYW5kIHlvdSBhY2NpZGVudGFsbHkKKyAgICBjb21waWxlIHVzaW5nIGl0cyBjdXJzZXMuaCB5b3UnbGwgZW5kIHVwIHdpdGggYSBsYXJnZSBudW1iZXIgb2YKKyAgICB1bmRlZmluZWQgc3ltYm9scyBhdCBsaW5rIHRpbWUuCisKKyAgICBJRiBZT1UgRE8gTk9UIEhBVkUgUk9PVDogQ2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgYHByb2dzJyBzdWJkaXJlY3RvcnkKKyAgICBhbmQgcnVuIHRoZSBgY2FwY29udmVydCcgc2NyaXB0LiAgVGhpcyBzY3JpcHQgd2lsbCBkZWR1Y2UgdmFyaW91cyB0aGluZ3MKKyAgICBhYm91dCB5b3VyIGVudmlyb25tZW50IGFuZCB1c2UgdGhlbSB0byBidWlsZCB5b3UgYSBwcml2YXRlIHRlcm1pbmZvIHRyZWUsCisgICAgc28geW91IGNhbiB1c2UgbmN1cnNlcyBhcHBsaWNhdGlvbnMuCisKKyAgICBJZiBtb3JlIHRoYW4gb25lIHVzZXIgYXQgeW91ciBzaXRlIGRvZXMgdGhpcywgdGhlIHNwYWNlIGZvciB0aGUgZHVwbGljYXRlCisgICAgdHJlZXMgaXMgd2FzdGVkLiAgVHJ5IHRvIGdldCB5b3VyIHNpdGUgYWRtaW5pc3RyYXRvcnMgdG8gaW5zdGFsbCBhIHN5c3RlbS0KKyAgICB3aWRlIHRlcm1pbmZvIHRyZWUgaW5zdGVhZC4KKworICAgIFNlZSB0aGUgQlNEIENPTlZFUlNJT04gTk9URVMgc2VjdGlvbiBiZWxvdyBmb3IgYSBmZXcgbW9yZSBkZXRhaWxzLgorCis2LiAgVGhlIGMrKyBkaXJlY3RvcnkgaGFzIEMrKyBjbGFzc2VzIHRoYXQgYXJlIGJ1aWx0IG9uIHRvcCBvZiBuY3Vyc2VzIGFuZAorICAgIHBhbmVscy4gIFlvdSBtdXN0IGhhdmUgYysrIChhbmQgaXRzIGxpYnJhcmllcykgaW5zdGFsbGVkIGJlZm9yZSB5b3UgY2FuCisgICAgY29tcGlsZSBhbmQgcnVuIHRoZSBkZW1vLgorCisgICAgVXNlIC0td2l0aG91dC1jeHgtYmluZGluZyB0byB0ZWxsIGNvbmZpZ3VyZSB0byBub3QgYnVpbGQgdGhlIEMrKyBiaW5kaW5ncworICAgIGFuZCBkZW1vLgorCisgICAgSWYgeW91IGRvIG5vdCBoYXZlIEMrKywgeW91IG11c3QgdXNlIHRoZSAtLXdpdGhvdXQtY3h4IG9wdGlvbiB0byB0ZWxsCisgICAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gbm90IGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mICdib29sJworICAgIHdoaWNoIG1heSBiZSBzdXBwb3J0ZWQgYnkgQysrLiAgSUYgWU9VIFVTRSBUSElTIE9QVElPTiwgQkUgQURWSVNFRCBUSEFUCisgICAgWU9VIE1BWSBOT1QgQkUgQUJMRSBUTyBDT01QSUxFIChPUiBSVU4pIE5DVVJTRVMgQVBQTElDQVRJT05TIFdJVEggQysrLgorCisKK1NVTU1BUlkgT0YgQ09ORklHVVJFIE9QVElPTlM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgY29uZmlndXJlIHNjcmlwdCBwcm92aWRlcyBhIHNob3J0IGxpc3Qgb2YgaXRzIG9wdGlvbnMgd2hlbiB5b3UgdHlwZQorCisJLi9jb25maWd1cmUgLS1oZWxwCisKKyAgICBUaGUgLS1oZWxwIGFuZCBzZXZlcmFsIG9wdGlvbnMgYXJlIGNvbW1vbiB0byBhbGwgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUKKyAgICBnZW5lcmF0ZWQgd2l0aCBhdXRvY29uZi4gIFRob3NlIGFyZSBhbGwgbGlzdGVkIGJlZm9yZSB0aGUgbGluZQorCisJLS1lbmFibGUgYW5kIC0td2l0aCBvcHRpb25zIHJlY29nbml6ZWQ6CisKKyAgICBUaGUgb3RoZXIgb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlLiAgV2UgbGlzdCB0aGVtIGluIGFscGhhYmV0aWMKKyAgICBvcmRlci4KKworICAgIC0tZGlzYWJsZS1hc3N1bWVkLWNvbG9yCisJV2l0aCBuY3Vyc2VzIDUuMSwgd2UgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiwgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkKKwl3aGljaCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHNwZWNpZnkgd2hhdCB0aGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGFuZAorCWJhY2tncm91bmQgY29sb3IgYXJlIGFzc3VtZWQgdG8gYmUuICBNb3N0IGNvbG9yIGFwcGxpY2F0aW9ucyB1c2UKKwlmdWxsLXNjcmVlbiBjb2xvcjsgYnV0IGEgZmV3IGRvIG5vdCBjb2xvciB0aGUgYmFja2dyb3VuZC4gIFdoaWxlIHRoZQorCWFzc3VtZWQgdmFsdWVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGludm9raW5nIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpLAorCXlvdSBtYXkgZmluZCBpdCB1c2VmdWwgdG8gc2V0IHRoZSBhc3N1bWVkIHZhbHVlcyB0byB0aGUgcHJlLTUuMQorCWNvbnZlbnRpb24sIHVzaW5nIHRoaXMgY29uZmlndXJlIG9wdGlvbi4KKworICAgIC0tZGlzYWJsZS1iaWctY29yZQorCUFzc3VtZSBtYWNoaW5lIGhhcyBsaXR0bGUgbWVtb3J5LiAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXR0ZW1wdHMgdG8KKwlkZXRlcm1pbmUgaWYgeW91ciBtYWNoaW5lIGhhcyBlbm91Z2ggbWVtb3J5IChhYm91dCA2TWIpIHRvIGNvbXBpbGUgdGhlCisJdGVybWluZm8gZGF0YWJhc2Ugd2l0aG91dCB3cml0aW5nIHBvcnRpb25zIHRvIGRpc2suICBTb21lIGFsbG9jYXRvcnMKKwlyZXR1cm4gZGVjZXB0aXZlIHJlc3VsdHMsIHNvIHlvdSBtYXkgaGF2ZSB0byBvdmVycmlkZSB0aGUgY29uZmlndXJlCisJc2NyaXB0LiAgT3IgeW91IG1heSBiZSBidWlsZGluZyB0aWMgZm9yIGEgc21hbGxlciBtYWNoaW5lLgorCisgICAgLS1kaXNhYmxlLWJpZy1zdHJpbmdzCisJRGlzYWJsZSBjb21waWxlLXRpbWUgb3B0aW1pemF0aW9uIG9mIHByZWRlZmluZWQgdGFibGVzIHdoaWNoIHB1dHMKKwlhbGwgb2YgdGhlaXIgc3RyaW5ncyBpbnRvIGEgdmVyeSBsb25nIHN0cmluZywgdG8gcmVkdWNlIHJlbG9jYXRpb24KKwlvdmVyaGVhZC4KKworICAgIC0tZGlzYWJsZS1kYXRhYmFzZQorCVVzZSBvbmx5IGJ1aWx0LWluIGRhdGEuICBUaGUgbmN1cnNlcyBsaWJyYXJpZXMgbm9ybWFsbHkgcmVhZCB0ZXJtaW5mbworCWFuZCB0ZXJtY2FwIGRhdGEgZnJvbSBkaXNrLiAgWW91IGNhbiBjb25maWd1cmUgbmN1cnNlcyB0byBoYXZlIGEKKwlidWlsdC1pbiBkYXRhYmFzZSwgYWthICJmYWxsYmFjayIgZW50cmllcy4gIEVtYmVkZGVkIGFwcGxpY2F0aW9ucyBtYXkKKwloYXZlIG5vIG5lZWQgZm9yIGFuIGV4dGVybmFsIGRhdGFiYXNlLiAgU29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlCisJcHJvZ3JhbXMgYXJlIHVzZWZ1bCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIGUuZy4sIHJlc2V0IGFuZCB0cHV0IHZlcnN1cworCWluZm9jbXAgYW5kIHRpYy4KKworICAgIC0tZGlzYWJsZS1leHQtZnVuY3MKKwlEaXNhYmxlIGZ1bmN0aW9uLWV4dGVuc2lvbnMuICBDb25maWd1cmUgbmN1cnNlcyB3aXRob3V0IHRoZSBmdW5jdGlvbnMKKwl0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGJ5IFhTSS4gIFNlZSBuY3Vyc2VzL21vZHVsZXMgZm9yIHRoZSBleGFjdAorCWxpc3Qgb2YgbGlicmFyeSBtb2R1bGVzIHRoYXQgd291bGQgYmUgc3VwcHJlc3NlZC4KKworICAgIC0tZGlzYWJsZS1oYXNobWFwCisJQ29tcGlsZSB3aXRob3V0IGhhc2htYXAgc2Nyb2xsaW5nLW9wdGltaXphdGlvbiBjb2RlLiAgVGhpcyBhbGdvcml0aG0gaXMKKwl0aGUgZGVmYXVsdC4KKworICAgIC0tZGlzYWJsZS1ob21lLXRlcm1pbmZvCisJVGhlICRIT01FLy50ZXJtaW5mbyBkaXJlY3RvcnkgaXMgbm9ybWFsbHkgYWRkZWQgdG8gbmN1cnNlcycgc2VhcmNoCisJbGlzdCBmb3IgcmVhZGluZy93cml0aW5nIHRlcm1pbmZvIGVudHJpZXMsIHNpbmNlIHRoYXQgZGlyZWN0b3J5IGlzCisJbW9yZSBsaWtlbHkgd3JpdGFibGUgdGhhbiB0aGUgc3lzdGVtIHRlcm1pbmZvIGRhdGFiYXNlLiAgVXNlIHRoaXMKKwlvcHRpb24gdG8gZGlzYWJsZSB0aGUgZmVhdHVyZSBhbHRvZ2V0aGVyLgorCisgICAgLS1kaXNhYmxlLWxhcmdlZmlsZQorCURpc2FibGUgY29tcGlsZXIgZmxhZ3MgbmVlZGVkIHRvIHVzZSBsYXJnZS1maWxlIGludGVyZmFjZXMuCisKKyAgICAtLWRpc2FibGUtbGVha3MKKwlGb3IgdGVzdGluZywgY29tcGlsZS1pbiBjb2RlIHRoYXQgZnJlZXMgbWVtb3J5IHRoYXQgbm9ybWFsbHkgd291bGQgbm90CisJYmUgZnJlZWQsIHRvIHNpbXBsaWZ5IGFuYWx5c2lzIG9mIG1lbW9yeS1sZWFrcy4KKworCUFueSBpbXBsZW1lbnRhdGlvbiBvZiBjdXJzZXMgbXVzdCBub3QgZnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aAorCWEgc2NyZWVuLCBzaW5jZSAoZXZlbiBhZnRlciBjYWxsaW5nIGVuZHdpbigpKSwgaXQgbXVzdCBiZSBhdmFpbGFibGUKKwlmb3IgdXNlIGluIHRoZSBuZXh0IGNhbGwgdG8gcmVmcmVzaCgpLiAgVGhlcmUgYXJlIGFsc28gY2h1bmtzIG9mCisJbWVtb3J5IGhlbGQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBUaGF0IG1ha2VzIGl0IGhhcmQgdG8gYW5hbHl6ZQorCWN1cnNlcyBhcHBsaWNhdGlvbnMgZm9yIG1lbW9yeSBsZWFrcy4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGJ1aWxkCisJYSBkZWJ1Z2dpbmcgdmVyc2lvbiBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5IHdoaWNoIGZyZWVzIHRob3NlIGNodW5rcworCXdoaWNoIGl0IGNhbiwgYW5kIHByb3ZpZGVzIHRoZSBfbmNfZnJlZV9hbmRfZXhpdCgpIGZ1bmN0aW9uIHRvIGZyZWUKKwl0aGUgcmVtYWluZGVyIG9uIGV4aXQuICBUaGUgbmN1cnNlcyB1dGlsaXR5IGFuZCB0ZXN0IHByb2dyYW1zIHVzZSB0aGlzCisJZmVhdHVyZSwgZS5nLiwgdmlhIHRoZSBFeGl0UHJvZ3JhbSgpIG1hY3JvLgorCisgICAgLS1kaXNhYmxlLWxwNjQKKwlUaGUgaGVhZGVyIGZpbGVzIHdpbGwgaWdub3JlIHVzZSBvZiB0aGUgX0xQNjQgc3ltYm9sIHRvIG1ha2UgY2h0eXBlCisJYW5kIG1tYXNrX3QgdHlwZXMgMzIgYml0cyAodGhleSBtYXkgYmUgbG9uZyBvbiA2NC1iaXQgaG9zdHMsIGZvcgorCWNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciByZWxlYXNlcykuCisKKwlOT1RFOiB0aGlzIGlzIHBvdGVudGlhbGx5IGFuIEFCSSBjaGFuZ2UsIGRlcGVuZGluZyBvbiBleGlzdGluZworCXBhY2thZ2VzLiAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzICJkaXNhYmxlZCIgZm9yIG5jdXJzZXMKKwlBQkkgNSwgYW5kICJlbmFibGVkIiBmb3IgQUJJIDYuCisKKyAgICAtLWRpc2FibGUtbWFjcm9zCisJRm9yIHRlc3RpbmcsIHVzZSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gbWFjcm9zLiAgVGhlIHByb2dyYW0gd2lsbCBydW4KKwltb3JlIHNsb3dseSwgYnV0IGl0IGlzIHNpbXBsZXIgdG8gZGVidWcuICBUaGlzIGRlZmluZXMgTkNVUlNFU19OT01BQ1JPUworCWF0IGJ1aWxkIHRpbWUuICBTZWUgYWxzbyB0aGUgLS1lbmFibGUtZXhwYW5kZWQgb3B0aW9uLgorCisgICAgLS1kaXNhYmxlLW92ZXJ3cml0ZQorCUlmIHlvdSBhcmUgaW5zdGFsbGluZyBuY3Vyc2VzIG9uIGEgc3lzdGVtIHdoaWNoIGNvbnRhaW5zIGFub3RoZXIKKwlkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIGN1cnNlcywgb3Igd2hpY2ggY291bGQgYmUgY29uZnVzZWQgYnkgdGhlIGxvYWRlcgorCWZvciBhbm90aGVyIHZlcnNpb24sIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBsZWF2ZSBvdXQgdGhlIGxpbmsgdG8KKwktbGN1cnNlcy4gIFRoZSBuY3Vyc2VzIGxpYnJhcnkgaXMgYWx3YXlzIGF2YWlsYWJsZSBhcyAtbG5jdXJzZXMuCisJRGlzYWJsaW5nIG92ZXJ3cml0ZSBhbHNvIGNhdXNlcyB0aGUgbmN1cnNlcyBoZWFkZXIgZmlsZXMgdG8gYmUKKwlpbnN0YWxsZWQgaW50byBhIHN1YmRpcmVjdG9yeSwgZS5nLiwgL3Vzci9sb2NhbC9pbmNsdWRlL25jdXJzZXMsCisJcmF0aGVyIHRoYW4gdGhlIGluY2x1ZGUgZGlyZWN0b3J5LiAgVGhpcyBtYWtlcyBpdCBzaW1wbGVyIHRvIGF2b2lkCisJY29tcGlsZS10aW1lIGNvbmZsaWN0cyB3aXRoIG90aGVyIHZlcnNpb25zIG9mIGN1cnNlcy5oCisKKyAgICAtLWRpc2FibGUtcmVsaW5rCisJSWYgLS1lbmFibGUtcnBhdGggaXMgZ2l2ZW4sIHRoZSBnZW5lcmF0ZWQgbWFrZWZpbGVzIG5vcm1hbGx5IHdpbGwKKwlyZWJ1aWxkIHRoZSBsaWJyYXJpZXMgZHVyaW5nIGluc3RhbGwuICBVc2UgdGhpcyBvcHRpb24gdG8gc2ltcGx5CisJY29weSB3aGF0ZXZlciB0aGUgbGlua2VkIHByb2R1Y2VkLgorCisJVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiAtLWVuYWJsZS1ycGF0aCBpcyBub3QgZ2l2ZW4uCisKKyAgICAtLWRpc2FibGUtcm9vdC1lbnZpcm9uCisJQ29tcGlsZSB3aXRoIGVudmlyb25tZW50IHJlc3RyaWN0aW9uLCBzbyBjZXJ0YWluIGVudmlyb25tZW50IHZhcmlhYmxlcworCWFyZSBub3QgYXZhaWxhYmxlIHdoZW4gcnVubmluZyBhcyByb290LCBvciB2aWEgYSBzZXR1aWQvc2V0Z2lkCisJYXBwbGljYXRpb24uICBUaGVzZSBhcmUgKGZvciBleGFtcGxlICRURVJNSU5GTykgdGhvc2UgdGhhdCBhbGxvdyB0aGUKKwlzZWFyY2ggcGF0aCBmb3IgdGhlIHRlcm1pbmZvIG9yIHRlcm1jYXAgZW50cnkgdG8gYmUgY3VzdG9taXplZC4KKworICAgIC0tZGlzYWJsZS1zY3JvbGwtaGludHMKKwlDb21waWxlIHdpdGhvdXQgc2Nyb2xsLWhpbnRzIGNvZGUuICBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIHdoZW4KKwloYXNobWFwIHNjcm9sbGluZyBpcyBjb25maWd1cmVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KKworICAgIC0tZGlzYWJsZS10aWMtZGVwZW5kcworCVdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcywgbm9ybWFsbHkgdGhlIHRpYyBsaWJyYXJ5IGlzIGxpbmtlZCB0bworCWRlcGVuZCB1cG9uIHRoZSBuY3Vyc2VzIGxpYnJhcnkgKGFuZCBpbiB0dXJuLCBvbiB0aGUgdGVybS1saWJyYXJ5IGlmCisJdGhlIC0td2l0aC10ZXJtbGliIG9wdGlvbiB3YXMgZ2l2ZW4pLiAgVGhlIHRpYy0gYW5kIHRlcm0tbGlicmFyaWVzCisJQUJJIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgLS1lbmFibGUtd2lkZWMgb3B0aW9uLiBTb21lIHBhY2thZ2VycyBoYXZlCisJdXNlZCB0aGlzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxpYnJhcnkgZmlsZXMgd2hpY2ggYXJlIHBhY2thZ2VkCisJYnkgdXNpbmcgb25seSBvbmUgY29weSBvZiB0aG9zZSBsaWJyYXJpZXMuICBUbyBtYWtlIHRoaXMgd29yayBwcm9wZXJseSwKKwl0aGUgdGljIGxpYnJhcnkgbXVzdCBiZSBidWlsdCB3aXRob3V0IGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gdGhlCisJbmN1cnNlcyAob3IgbmN1cnNlc3cpIGxpYnJhcnkuICBVc2UgdGhpcyBjb25maWd1cmUgb3B0aW9uIHRvIGRvIHRoYXQuCisJRm9yIGV4YW1wbGUKKwkJY29uZmlndXJlIC0td2l0aC10aWNsaWIgLS13aXRoLXNoYXJlZCAtLWRpc2FibGUtdGljLWRlcGVuZHMKKworICAgIC0tZGlzYWJsZS10cGFybS12YXJhcmdzCisJUG9ydGFibGUgcHJvZ3JhbXMgc2hvdWxkIGNhbGwgdHBhcm0oKSB1c2luZyB0aGUgZml4ZWQtbGVuZ3RoIHBhcmFtZXRlcgorCWxpc3QgZG9jdW1lbnRlZCBpbiBYL09wZW4uICBuY3Vyc2VzIHByb3ZpZGVzIHZhcmFyZ3Mgc3VwcG9ydCBmb3IgdGhpcworCWZ1bmN0aW9uLiAgVXNlIC0tZGlzYWJsZS10cGFybS12YXJhcmdzIHRvIGRpc2FibGUgdGhpcyBzdXBwb3J0LgorCisgICAgLS1lbmFibGUtYXNzZXJ0aW9ucworCUZvciB0ZXN0aW5nLCBjb21waWxlLWluIGFzc2VydGlvbiBjb2RlLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGEgZmV3CisJcGxhY2VzIHdoZXJlIG5jdXJzZXMgY2Fubm90IGVhc2lseSByZWNvdmVyIGJ5IHJldHVybmluZyBhbiBlcnJvciBjb2RlLgorCisgICAgLS1lbmFibGUtYnJva2VuX2xpbmtlcgorCUEgZmV3IHBsYXRmb3JtcyBoYXZlIHdoYXQgd2UgY29uc2lkZXIgYSBicm9rZW4gbGlua2VyOiAgaXQgY2Fubm90IGxpbmsKKwlvYmplY3RzIGZyb20gYW4gYXJjaGl2ZSBzb2xlbHkgYnkgcmVmZXJyaW5nIHRvIGRhdGEgb2JqZWN0cyBpbiB0aG9zZQorCWZpbGVzLCBidXQgcmVxdWlyZXMgYSBmdW5jdGlvbiByZWZlcmVuY2UuICBUaGlzIGNvbmZpZ3VyZSBvcHRpb24KKwljaGFuZ2VzIHNldmVyYWwgZGF0YSByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucyB0byB3b3JrIGFyb3VuZCB0aGlzCisJcHJvYmxlbS4KKworCU5PVEU6ICBXaXRoIG5jdXJzZXMgNS4xLCB0aGlzIG1heSBub3QgYmUgbmVjZXNzYXJ5LCBzaW5jZSB3ZSBhcmUKKwl0b2xkIHRoYXQgc29tZSBsaW5rZXJzIGludGVycHJldCB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGFzIGEKKwlkaWZmZXJlbnQgdHlwZSBvZiByZWZlcmVuY2Ugd2hpY2ggYmVoYXZlcyBhcyBkZXNjcmliZWQgYWJvdmUuICBXZSBoYXZlCisJZXhwbGljaXRseSBpbml0aWFsaXplZCBhbGwgb2YgdGhlIGdsb2JhbCBkYXRhIHRvIHdvcmsgYXJvdW5kIHRoZQorCXByb2JsZW0uCisKKyAgICAtLWVuYWJsZS1ic2RwYWQKKwlSZWNvZ25pemUgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nLiAgU29tZSBhbmNpZW50IEJTRCBwcm9ncmFtcyAoc3VjaCBhcworCW5ldGhhY2spIGNhbGwgdHB1dHMoIjUwIikgdG8gaW1wbGVtZW50IGRlbGF5cy4KKworICAgIC0tZW5hYmxlLWNvbG9yZmdiZworCUNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgJENPTE9SRkdCRyBjb2RlLiAgVGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZQorCWlzIHNldCBieSBzb21lIHRlcm1pbmFsIGVtdWxhdG9ycyBhcyBhIGhpbnQgdG8gYXBwbGljYXRpb25zLCBieQorCWFkdmVydGlzaW5nIHRoZSBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzLiAgRHVyaW5nCisJaW5pdGlhbGl6YXRpb24sIG5jdXJzZXMgc2V0cyBjb2xvciBwYWlyIDAgdG8gbWF0Y2ggdGhpcy4KKworICAgIC0tZW5hYmxlLWNvbnN0CisJVGhlIGN1cnNlcyBpbnRlcmZhY2UgYXMgZG9jdW1lbnRlZCBpbiBYU0kgaXMgcmF0aGVyIG9sZCwgaW4gZmFjdAorCWluY2x1ZGluZyBmZWF0dXJlcyB0aGF0IHByZWNlZGUgQU5TSSBDLiAgVGhlIHByb3RvdHlwZXMgZ2VuZXJhbGx5IGRvCisJbm90IG1ha2UgZWZmZWN0aXZlIHVzZSBvZiAiY29uc3QiLiAgV2hlbiB1c2luZyBzdHJpY3RlciBjb21waWxlcnMgKG9yCisJZ2NjIHdpdGggYXBwcm9wcmlhdGUgd2FybmluZ3MpLCB5b3UgbWF5IHNlZSB3YXJuaW5ncyBhYm91dCB0aGUgbWlzbWF0Y2gKKwliZXR3ZWVuIGNvbnN0IGFuZCBub24tY29uc3QgZGF0YS4gIFdlIHByb3ZpZGUgYSBjb25maWd1cmUgb3B0aW9uIHdoaWNoCisJY2hhbmdlcyB0aGUgaW50ZXJmYWNlcyB0byB1c2UgY29uc3QgLSBxdWlldGluZyB0aGVzZSB3YXJuaW5ncyBhbmQKKwlyZWZsZWN0aW5nIHRoZSBhY3R1YWwgdXNlIG9mIHRoZSBwYXJhbWV0ZXJzIG1vcmUgY2xvc2VseS4gIFRoZSBuY3Vyc2VzCisJbGlicmFyeSB1c2VzIHRoZSBzeW1ib2wgTkNVUlNFU19DT05TVCBmb3IgdGhlc2UgaW5zdGFuY2VzIG9mIGNvbnN0LAorCWFuZCBpZiB5b3UgaGF2ZSBhc2tlZCBmb3IgY29tcGlsZXIgd2FybmluZ3MsIHdpbGwgYWRkIGdjYydzIGNvbnN0LXF1YWwKKwl3YXJuaW5nLiAgVGhlcmUgd2lsbCBzdGlsbCBiZSB3YXJuaW5ncyBkdWUgdG8gc3VidGxlIGluY29uc2lzdGVuY2llcworCWluIHRoZSBpbnRlcmZhY2UsIGJ1dCBhdCBhIGxvd2VyIGxldmVsLgorCisJTk9URTogIGNvbmZpZ3VyaW5nIG5jdXJzZXMgd2l0aCB0aGlzIG9wdGlvbiBtYXkgZGV0cmFjdCBmcm9tIHRoZQorCXBvcnRhYmlsaXR5IG9mIHlvdXIgYXBwbGljYXRpb25zIGJ5IGVuY291cmFnaW5nIHlvdSB0byB1c2UgY29uc3QgaW4KKwlwbGFjZXMgd2hlcmUgdGhlIFhTSSBjdXJzZXMgaW50ZXJmYWNlIHdvdWxkIG5vdCBhbGxvdyB0aGVtLiAgU2ltaWxhcgorCWlzc3VlcyBhcmlzZSB3aGVuIHBvcnRpbmcgdG8gU1ZyNCBjdXJzZXMsIHdoaWNoIHVzZXMgY29uc3QgaW4gZXZlbgorCWZld2VyIHBsYWNlcy4KKworICAgIC0tZW5hYmxlLWVjaG8KKwlVc2UgdGhlIG9wdGlvbiAtLWRpc2FibGUtZWNobyB0byBtYWtlIHRoZSBidWlsZC1sb2cgbGVzcyB2ZXJib3NlIGJ5CisJc3VwcHJlc3NpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGNvbXBpbGUgYW5kIGxpbmsgY29tbWFuZHMuICBUaGlzIG1ha2VzCisJaXQgZWFzaWVyIHRvIHNlZSB0aGUgY29tcGlsZXIgd2FybmluZ3MuICAoWW91IGNhbiBhbHdheXMgdXNlICJtYWtlIC1uIgorCXRvIHNlZSB0aGUgb3B0aW9ucyB0aGF0IGFyZSB1c2VkKS4KKworICAgIC0tZW5hYmxlLWV4cGFuZGVkCisJRm9yIHRlc3RpbmcsIGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgY2VydGFpbiBtYWNyb3MgdG8gbWFrZSB0aGVtIHZpc2libGUKKwlhcyBzdWNoIHRvIHRoZSBkZWJ1Z2dlci4gIFNlZSBhbHNvIHRoZSAtLWRpc2FibGUtbWFjcm9zIG9wdGlvbi4KKworICAgIC0tZW5hYmxlLWV4dC1jb2xvcnMKKwlFeHRlbmQgdGhlIGNjaGFyX3Qgc3RydWN0dXJlIHRvIGFsbG93IG1vcmUgdGhhbiAxNiBjb2xvcnMgdG8gYmUKKwllbmNvZGVkLiAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gdGhlIHdpZGUtY2hhcmFjdGVyICgtLWVuYWJsZS13aWRlYykKKwljb25maWd1cmF0aW9uLgorCisJTk9URTogIHVzaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSBsaWJyYXJpZXMgd2hpY2ggYXJlIG5vdCBiaW5hcnktCisJY29tcGF0aWJsZSB3aXRoIGxpYm5jdXJzZXN3IDUuNC4gIE5vbmUgb2YgdGhlIGludGVyZmFjZXMgY2hhbmdlLCBidXQKKwlhcHBsaWNhdGlvbnMgd2hpY2ggaGF2ZSBhbiBhcnJheSBvZiBjY2hhcl90J3MgbXVzdCBiZSByZWNvbXBpbGVkLgorCisgICAgLS1lbmFibGUtZXh0LW1vdXNlCisJTW9kaWZ5IHRoZSBlbmNvZGluZyBvZiBtb3VzZSBzdGF0ZSB0byBtYWtlIHJvb20gZm9yIGEgNXRoIG1vdXNlIGJ1dHRvbi4KKwlUaGF0IGFsbG93cyBvbmUgdG8gdXNlIG5jdXJzZXMgd2l0aCBhIHdoZWVsIG1vdXNlIHdpdGggeHRlcm0gb3IKKwlzaW1pbGFyIFggdGVybWluYWwgZW11bGF0b3JzLgorCisJTk9URTogIHVzaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSBsaWJyYXJpZXMgd2hpY2ggYXJlIG5vdCBiaW5hcnktCisJY29tcGF0aWJsZSB3aXRoIGxpYm5jdXJzZXN3IDUuNC4gIE5vbmUgb2YgdGhlIGludGVyZmFjZXMgY2hhbmdlLCBidXQKKwlhcHBsaWNhdGlvbnMgd2hpY2ggaGF2ZSBtb3VzZSBtYXNrIG1tYXNrX3QncyBtdXN0IGJlIHJlY29tcGlsZWQuCisKKyAgICAtLWVuYWJsZS1nZXRjYXAKKwlVc2UgdGhlIDQuNEJTRCBnZXRjYXAgY29kZSBpZiBhdmFpbGFibGUsIG9yIGEgYnVuZGxlZCB2ZXJzaW9uIG9mIGl0IHRvCisJZmV0Y2ggdGVybWNhcCBlbnRyaWVzLiAgRW50cmllcyByZWFkIGluIHRoaXMgd2F5IGNhbm5vdCB1c2UgKG1ha2UKKwljcm9zcy1yZWZlcmVuY2VzIHRvKSB0aGUgdGVybWluZm8gdHJlZSwgYnV0IGl0IGlzIGZhc3RlciB0aGFuIHJlYWRpbmcKKwkvZXRjL3Rlcm1jYXAuCisKKwlJZiBjb25maWd1cmVkIGZvciBvbmUgb2YgdGhlICpCU0Qgc3lzdGVtcywgdGhpcyBhdXRvbWF0aWNhbGx5IHVzZXMKKwl0aGUgaGFzaGVkIGRhdGFiYXNlIHN5c3RlbSBwcm9kdWNlZCB1c2luZyBjYXBfbWtkYiBvciBzaW1pbGFyIHRvb2xzLgorCUluIHRoYXQgY2FzZSwgdGhlcmUgaXMgbm8gYWR2YW50YWdlIGluIHVzaW5nIHRoZSAtLWVuYWJsZS1nZXRjYXAtY2FjaGUKKwlvcHRpb24uCisKKwlTZWUgYWxzbyB0aGUgLS13aXRoLWhhc2hlZC1kYiBvcHRpb24uCisKKyAgICAtLWVuYWJsZS1nZXRjYXAtY2FjaGUKKwlDYWNoZSB0cmFuc2xhdGVkIHRlcm1jYXBzIHVuZGVyIHRoZSBkaXJlY3RvcnkgJEhPTUUvLnRlcm1pbmZvCisKKwlOT1RFOiAgdGhpcyBzb3VuZHMgZ29vZCAtIGl0IG1ha2VzIG5jdXJzZXMgcnVuIGZhc3RlciB0aGUgc2Vjb25kIHRpbWUuCisJQnV0IGxvb2sgd2hlcmUgdGhlIGRhdGEgY29tZXMgZnJvbSAtIGFuIC9ldGMvdGVybWNhcCBjb250YWluaW5nIGxvdHMgb2YKKwllbnRyaWVzIHRoYXQgYXJlIG5vdCB1cCB0byBkYXRlLiAgSWYgeW91IGNvbmZpZ3VyZSB3aXRoIHRoaXMgb3B0aW9uIGFuZAorCWZvcmdldCB0byBpbnN0YWxsIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBiZWZvcmUgcnVubmluZyBhbiBuY3Vyc2VzCisJYXBwbGljYXRpb24sIHlvdSB3aWxsIGVuZCB1cCB3aXRoIGEgaGlkZGVuIHRlcm1pbmZvIGRhdGFiYXNlIHRoYXQKKwlnZW5lcmFsbHkgZG9lcyBub3Qgc3VwcG9ydCBjb2xvciBhbmQgd2lsbCBtaXNzIHNvbWUgZnVuY3Rpb24ga2V5cy4KKworICAgIC0tZW5hYmxlLWhhcmQtdGFicworCUNvbXBpbGUtaW4gY3Vyc29yLW9wdGltaXphdGlvbiBjb2RlIHRoYXQgdXNlcyBoYXJkLXRhYnMuICBXZSB3b3VsZCBtYWtlCisJdGhpcyBhIHN0YW5kYXJkIGZlYXR1cmUgZXhjZXB0IGZvciB0aGUgY29uY2VybiB0aGF0IHRoZSB0ZXJtaW5mbyBlbnRyeQorCW1heSBub3QgYmUgYWNjdXJhdGUsIG9yIHRoYXQgeW91ciBzdHR5IHNldHRpbmdzIGhhdmUgZGlzYWJsZWQgdGhlIHVzZQorCW9mIHRhYnMuCisKKyAgICAtLWVuYWJsZS1taXhlZC1jYXNlCisJQ29udHJvbHMgd2hldGhlciB0aGUgZmlsZXN5c3RlbSBvbiB3aGljaCB0aGUgdGVybWluZm8gZGF0YWJhc2UgcmVzaWRlcworCXN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzIChub3JtYWwgZm9yIFVOSVgsIGJ1dCBub3Qgb24gb3RoZXIKKwlzeXN0ZW1zKS4gIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIG9wdGlvbiwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKwljaGVja3MgdGhlIGN1cnJlbnQgZmlsZXN5c3RlbS4KKworICAgIC0tZW5hYmxlLW5vLXBhZGRpbmcKKwlDb21waWxlLWluIHN1cHBvcnQgZm9yIHRoZSAkTkNVUlNFU19OT19QQURESU5HIGVudmlyb25tZW50IHZhcmlhYmxlLAorCXdoaWNoIGFsbG93cyB5b3UgdG8gc3VwcHJlc3MgdGhlIGVmZmVjdCBvZiBub24tbWFuZGF0b3J5IHBhZGRpbmcgaW4KKwl0ZXJtaW5mbyBlbnRyaWVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCwgdW5sZXNzIHlvdSBoYXZlIGRpc2FibGVkIHRoZQorCWV4dGVuZGVkIGZ1bmN0aW9ucy4KKworICAgIC0tZW5hYmxlLXJlZW50cmFudAorCUNvbXBpbGUgZXhwZXJpbWVudGFsIGNvbmZpZ3VyYXRpb24gd2hpY2ggaW1wcm92ZXMgcmVlbnRyYW50IHVzZSBvZiB0aGUKKwlsaWJyYXJ5IGJ5IHJlZHVjaW5nIGdsb2JhbCBhbmQgc3RhdGljIHZhcmlhYmxlcy4gIFRoaXMgb3B0aW9uIGlzIGFsc28KKwlzZXQgaWYgLS13aXRoLXB0aHJlYWQgaXMgdXNlZC4KKworICAgIC0tZW5hYmxlLXJwYXRoCisJVXNlIHJwYXRoIG9wdGlvbiB3aGVuIGdlbmVyYXRpbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kICh3aXRoIHNvbWUKKwlyZXN0cmljdGlvbnMpIHdoZW4gbGlua2luZyB0aGUgY29ycmVzcG9uZGluZyBwcm9ncmFtcy4gIFRoaXMgb3JpZ2luYWxseQorCShpbiAxOTk3KSBhcHBsaWVkIG1haW5seSB0byBzeXN0ZW1zIHVzaW5nIHRoZSBHTlUgbGlua2VyIChyZWFkIHRoZQorCW1hbnBhZ2UpLgorCisJTW9yZSByZWNlbnRseSBpdCBpcyB1c2VmdWwgZm9yIHN5c3RlbXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgdHJlYXRtZW50CisJc2hhcmVkIGxpYnJhcmllcyBpbiAidW51c3VhbCIgbG9jYXRpb25zLiAgVGhlICJzeXN0ZW0iIGxpYnJhcmllcyByZXNpZGUKKwlpbiBkaXJlY3RvcmllcyB3aGljaCBhcmUgb24gdGhlIGxvYWRlcidzIGRlZmF1bHQgc2VhcmNoLXBhdGguICBXaGlsZQorCXlvdSBtYXkgYmUgYWJsZSB0byB1c2Ugd29ya2Fyb3VuZHMgc3VjaCBhcyB0aGUgJExEX0xJQlJBUllfUEFUSAorCWVudmlyb25tZW50IHZhcmlhYmxlLCB0aGV5IGRvIG5vdCB3b3JrIHdpdGggc2V0dWlkIGFwcGxpY2F0aW9ucyBzaW5jZQorCXRoZSBMRF9MSUJSQVJZX1BBVEggdmFyaWFibGUgd291bGQgYmUgdW5zZXQgaW4gdGhhdCBzaXR1YXRpb24uCisKKwlUaGlzIG9wdGlvbiBkb2VzIG5vdCBhcHBseSB0byAtLXdpdGgtbGlidG9vbCwgc2luY2UgbGlidG9vbCBtYWtlcworCWV4dHJhIGFzc3VtcHRpb25zIGFib3V0IHJwYXRoLgorCisgICAgLS1lbmFibGUtc2FmZS1zcHJpbnRmCisJQ29tcGlsZSB3aXRoIGV4cGVyaW1lbnRhbCBzYWZlLXNwcmludGYgY29kZS4gIFlvdSBtYXkgY29uc2lkZXIgdXNpbmcKKwl0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgbmN1cnNlcyBmb3IgYSBzeXN0ZW0gdGhhdCBoYXMgbmVpdGhlcgorCXZzbnByaW50ZigpIG9yIHZzcHJpbnRmKCkuICBJdCBpcyBzbG93LCBob3dldmVyLgorCisgICAgLS1lbmFibGUtc2lnd2luY2gKKwlDb21waWxlIHN1cHBvcnQgZm9yIG5jdXJzZXMnIFNJR1dJTkNIIGhhbmRsZXIuICBJZiB5b3VyIGFwcGxpY2F0aW9uIGhhcworCWl0cyBvd24gU0lHV0lOQ0ggaGFuZGxlciwgbmN1cnNlcyB3aWxsIG5vdCB1c2UgaXRzIG93bi4gIFRoZSBuY3Vyc2VzCisJaGFuZGxlciBjYXVzZXMgd2dldGNoKCkgdG8gcmV0dXJuIEtFWV9SRVNJWkUgd2hlbiB0aGUgc2NyZWVuLXNpemUKKwljaGFuZ2VzLiAgVGhpcyBvcHRpb24gaXMgdGhlIGRlZmF1bHQsIHVubGVzcyB5b3UgaGF2ZSBkaXNhYmxlZCB0aGUKKwlleHRlbmRlZCBmdW5jdGlvbnMuCisKKyAgICAtLWVuYWJsZS1zaWduZWQtY2hhcgorCVRoZSB0ZXJtLmggaGVhZGVyIGRlY2xhcmVzIGEgQm9vbGVhbnNbXSBhcnJheSB0eXBlZCAiY2hhciIuICBCdXQgaXQKKwlzdG9yZXMgc2lnbmVkIHZhbHVlcyB0aGVyZSBhbmQgImNoYXIiIGlzIG5vdCBuZWNlc3NhcmlseSBzaWduZWQuCisJU29tZSBwYWNrYWdlcnMgY2hvb3NlIHRvIGFsdGVyIHRoZSB0eXBlIG9mIEJvb2xlYW5zW10gdGhvdWdoIHRoaXMKKwlpcyBub3Qgc3RyaWN0bHkgY29tcGF0aWJsZS4gIFRoaXMgb3B0aW9uIGFsbG93cyBvbmUgdG8gaW1wbGVtZW50IHRoaXMKKwlhbHRlcmF0aW9uIHdpdGhvdXQgcGF0Y2hpbmcgdGhlIHNvdXJjZSBjb2RlLgorCisgICAgLS1lbmFibGUtc3ltbGlua3MKKwlJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBzeW1ib2xpYyBsaW5rcywgbWFrZSB0aWMgdXNlIHN5bWJvbGljIGxpbmtzCisJcmF0aGVyIHRoYW4gaGFyZCBsaW5rcyB0byBzYXZlIGRpc2tzcGFjZSB3aGVuIHdyaXRpbmcgYWxpYXNlcyBpbiB0aGUKKwl0ZXJtaW5mbyBkYXRhYmFzZS4KKworICAgIC0tZW5hYmxlLXRjYXAtbmFtZXMKKwlDb21waWxlLWluIHN1cHBvcnQgZm9yIHVzZXItZGVmaW5hYmxlIHRlcm1pbmFsIGNhcGFiaWxpdGllcy4gIFVzZSB0aGUKKwkteCBvcHRpb24gb2YgdGljIGFuZCBpbmZvY21wIHRvIHRyZWF0IHVucmVjb2duaXplZCB0ZXJtaW5hbAorCWNhcGFiaWxpdGllcyBhcyB1c2VyLWRlZmluZWQgc3RyaW5ncy4gIFRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0LAorCXVubGVzcyB5b3UgaGF2ZSBkaXNhYmxlZCB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25zLgorCisgICAgLS1lbmFibGUtdGVybWNhcAorCUNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgcmVhZGluZyB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgZnJvbSB0ZXJtY2FwIGlmIG5vCisJbWF0Y2ggaXMgZm91bmQgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlLiAgU2VlIGFsc28gdGhlIC0tZW5hYmxlLWdldGNhcAorCWFuZCAtLWVuYWJsZS1nZXRjYXAtY2FjaGUgb3B0aW9ucy4KKworICAgIC0tZW5hYmxlLXdhcm5pbmdzCisJVHVybiBvbiBHQ0MgY29tcGlsZXIgd2FybmluZ3MuICBUaGVyZSBzaG91bGQgYmUgb25seSBhIGZldy4KKworICAgIC0tZW5hYmxlLXdlYWstc3ltYm9scworCUlmIHRoZSAtLXdpdGgtcHRocmVhZCBvcHRpb24gaXMgc2V0LCBjaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMKKwl3ZWFrLXN5bWJvbHMuICBJZiBpdCBkb2VzLCB0aGVuIG5hbWUgdGhlIHRocmVhZC1jYXBhYmxlIGxpYnJhcnkgd2l0aG91dAorCXRoZSAidCIgKGxpYm5jdXJzZXMgcmF0aGVyIHRoYW4gbGlibmN1cnNlc3QpLCBhbmQgcHJvdmlkZSBmb3IKKwlkeW5hbWljYWxseSBsb2FkaW5nIHRoZSBwdGhyZWFkcyBlbnRyeXBvaW50cyBhdCBydW50aW1lLiAgVGhpcyBhbGxvd3MKKwlvbmUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbGlicmFyeSBmaWxlcyBmb3IgbmN1cnNlcy4KKworICAgIC0tZW5hYmxlLXdnZXRjaC1ldmVudHMKKwlDb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHdnZXRjaC1ldmVudHMgY29kZS4gIFNlZSBuY3Vyc2VzL1JFQURNRS5JWgorCisgICAgLS1lbmFibGUtd2lkZWMKKwlDb21waWxlIHdpdGggd2lkZS1jaGFyYWN0ZXIgY29kZS4gIFRoaXMgbWFrZXMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZgorCXRoZSBsaWJyYXJpZXMgKGUuZy4sIGxpYm5jdXJzZXN3LnNvKSwgd2hpY2ggc3RvcmVzIGNoYXJhY3RlcnMgYXMKKwl3aWRlLWNoYXJhY3RlcnMsCisKKwlOT1RFOiBhcHBsaWNhdGlvbnMgY29tcGlsZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gYXJlIG5vdCBjb21wYXRpYmxlCisJd2l0aCB0aG9zZSBidWlsdCBmb3IgOC1iaXQgY2hhcmFjdGVycy4gIFlvdSBjYW5ub3Qgc2ltcGx5IG1ha2UgYQorCXN5bWJvbGljIGxpbmsgdG8gZXF1YXRlIGxpYm5jdXJzZXMuc28gd2l0aCBsaWJuY3Vyc2Vzdy5zbworCisJTk9URTogdGhlIEFkYTk1IGJpbmRpbmcgbWF5IGJlIGJ1aWx0IGFnYWluc3QgZWl0aGVyIHZlcnNpb24gb2YgdGhlIHRoZQorCW5jdXJzZXMgbGlicmFyeSwgYnV0IHlvdSBtdXN0IGRlY2lkZSB3aGljaDogIHRoZSBiaW5kaW5nIGluc3RhbGxzIHRoZQorCXNhbWUgc2V0IG9mIGZpbGVzIGZvciBlaXRoZXIgdmVyc2lvbi4gIEN1cnJlbnRseSAoMjAwMi82LzIyKSBpdCBkb2VzCisJbm90IHVzZSB0aGUgZXh0ZW5kZWQgZmVhdHVyZXMgZnJvbSB0aGUgd2lkZS1jaGFyYWN0ZXIgY29kZSwgc28gaXQgaXMKKwlwcm9iYWJseSBiZXR0ZXIgdG8gbm90IGluc3RhbGwgdGhlIGJpbmRpbmcgZm9yIHRoYXQgY29uZmlndXJhdGlvbi4KKworICAgIC0tZW5hYmxlLXhtYy1nbGl0Y2gKKwlDb21waWxlLWluIHN1cHBvcnQgZXhwZXJpbWVudGFsIHhtYyAobWFnaWMgY29va2llKSBjb2RlLgorCisgICAgLS13aXRoLWFiaS12ZXJzaW9uPU5VTQorCU92ZXJyaWRlIHRoZSBBQkkgdmVyc2lvbiwgd2hpY2ggaXMgdXNlZCBpbiBzaGFyZWQgbGlicmFyeSBmaWxlbmFtZXMuCisJTm9ybWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcmVsZWFzZSB2ZXJzaW9uOyBzb21lIHBvcnRzIGhhdmUKKwlzcGVjaWFsIHJlcXVpcmVtZW50cyBmb3IgY29tcGF0aWJpbGl0eS4KKworCVRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCBsaW5raW5nIHdpdGggbGlidG9vbCwgd2hpY2ggdXNlcyB0aGUKKwlyZWxlYXNlIG1ham9yL21pbm9yIG51bWJlcnMuCisKKyAgICAtLXdpdGgtYWRhLWNvbXBpbGVyPUNNRAorCVNwZWNpZnkgdGhlIEFkYTk1IGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHQgImduYXRtYWtlIikKKworICAgIC0td2l0aC1hZGEtaW5jbHVkZT1ESVIKKwlUZWxsIHdoZXJlIHRvIGluc3RhbGwgdGhlIEFkYSBpbmNsdWRlcyAoZGVmYXVsdDoKKwlQUkVGSVgvbGliL2FkYS9hZGFpbmNsdWRlKQorCisgICAgLS13aXRoLWFkYS1vYmplY3RzPURJUgorCVRlbGwgd2hlcmUgdG8gaW5zdGFsbCB0aGUgQWRhIG9iamVjdHMgKGRlZmF1bHQ6ICBQUkVGSVgvbGliL2FkYS9hZGFsaWIpCisKKyAgICAtLXdpdGgtYm9vbD1UWVBFCisJSWYgLS13aXRob3V0LWN4eCBpcyBzcGVjaWZpZWQsIG92ZXJyaWRlIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSAiYm9vbCIKKwlkZWNsYXJlZCBpbiBjdXJzZXMuaCAobm9ybWFsbHkgdGhlIHR5cGUgaXMgYXV0b21hdGljYWxseSBjaG9zZW4gdG8KKwljb3JyZXNwb25kIHdpdGggdGhhdCBpbiA8c3RkYm9vbC5oPiwgb3IgZGVmYXVsdHMgdG8gcGxhdGZvcm0tc3BlY2lmaWMKKwlzaXplcykuCisKKyAgICAtLXdpdGgtYnVpbGQtY2M9WFhYCisJSWYgY3Jvc3MtY29tcGlsaW5nLCBzcGVjaWZ5IGEgaG9zdCBDIGNvbXBpbGVyLCB3aGljaCBpcyBuZWVkZWQgdG8KKwljb21waWxlIGEgZmV3IHV0aWxpdGllcyB3aGljaCBnZW5lcmF0ZSBzb3VyY2UgbW9kdWxlcyBmb3IgbmN1cnNlcy4KKwlJZiB5b3UgZG8gbm90IGdpdmUgdGhpcyBvcHRpb24sIHRoZSBjb25maWd1cmUgc2NyaXB0IGNoZWNrcyBpZiB0aGUKKwkkQlVJTERfQ0MgdmFyaWFibGUgaXMgc2V0LCBhbmQgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIGdjYyBvciBjYy4KKworICAgIC0td2l0aC1idWlsZC1jZmxhZ3M9WFhYCisJSWYgY3Jvc3MtY29tcGlsaW5nLCBzcGVjaWZ5IHRoZSBob3N0IEMgY29tcGlsZXItZmxhZ3MuICBZb3UgbWlnaHQgbmVlZAorCXRvIGRvIHRoaXMgaWYgdGhlIHRhcmdldCBjb21waWxlciBoYXMgdW51c3VhbCBmbGFncyB3aGljaCBjb25mdXNlIHRoZQorCWhvc3QgY29tcGlsZXIuCisKKwlZb3UgY2FuIGFsc28gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkQlVJTERfQ0ZMQUdTIHJhdGhlciB0aGFuCisJdXNlIHRoaXMgb3B0aW9uLgorCisgICAgLS13aXRoLWJ1aWxkLWNwcGZsYWdzPVhYWAorCUlmIGNyb3NzLWNvbXBpbGluZywgc3BlY2lmeSB0aGUgaG9zdCBDIHByZXByb2Nlc3Nvci1mbGFncy4gIFlvdSBtaWdodAorCW5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgdGFyZ2V0IGNvbXBpbGVyIGhhcyB1bnVzdWFsIGZsYWdzIHdoaWNoIGNvbmZ1c2UKKwl0aGUgaG9zdCBjb21waWxlci4KKworCVlvdSBjYW4gYWxzbyBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICRCVUlMRF9DUFBGTEFHUyByYXRoZXIgdGhhbgorCXVzZSB0aGlzIG9wdGlvbi4KKworICAgIC0td2l0aC1idWlsZC1sZGZsYWdzPVhYWAorCUlmIGNyb3NzLWNvbXBpbGluZywgc3BlY2lmeSB0aGUgaG9zdCBsaW5rZXItZmxhZ3MuICBZb3UgbWlnaHQgbmVlZCB0bworCWRvIHRoaXMgaWYgdGhlIHRhcmdldCBsaW5rZXIgaGFzIHVudXN1YWwgZmxhZ3Mgd2hpY2ggY29uZnVzZSB0aGUgaG9zdAorCWNvbXBpbGVyLgorCisJWW91IGNhbiBhbHNvIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJEJVSUxEX0xERkxBR1MgcmF0aGVyIHRoYW4KKwl1c2UgdGhpcyBvcHRpb24uCisKKyAgICAtLXdpdGgtYnVpbGQtbGlicz1YWFgKKwlJZiBjcm9zcy1jb21waWxpbmcsIHRoZSBob3N0IGxpYnJhcmllcy4gIFlvdSBtaWdodCBuZWVkIHRvIGRvIHRoaXMgaWYKKwl0aGUgdGFyZ2V0IGVudmlyb25tZW50IHJlcXVpcmVzIHVudXN1YWwgbGlicmFyaWVzLgorCisJWW91IGNhbiBhbHNvIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJEJVSUxEX0xJQlMgcmF0aGVyIHRoYW4KKwl1c2UgdGhpcyBvcHRpb24uCisKKyAgICAtLXdpdGgtY2Fwcz1YWFgKKwlTcGVjaWZ5IGFuIGFsdGVybmF0ZSB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMgZmlsZSwgd2hpY2ggbWFrZXMgdGhlCisJY29uZmlndXJlIHNjcmlwdCBsb29rIGZvciAiaW5jbHVkZS9DYXBzLlhYWCIuICBBIGZldyBzeXN0ZW1zLCBlLmcuLAorCUFJWCA0LnggdXNlIHRoZSBzYW1lIG92ZXJhbGwgZmlsZS1mb3JtYXQgYXMgbmN1cnNlcyBmb3IgdGVybWluZm8KKwlkYXRhLCBidXQgdXNlIGRpZmZlcmVudCBhbGlnbm1lbnRzIHdpdGhpbiB0aGUgdGFibGVzIHRvIHN1cHBvcnQKKwlsZWdhY3kgYXBwbGljYXRpb25zLiAgRm9yIHRob3NlIHN5c3RlbXMsIHlvdSBjYW4gY29uZmlndXJlIG5jdXJzZXMKKwl0byB1c2UgYSB0ZXJtaW5mbyBkYXRhYmFzZSB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG5hdGl2ZQorCWFwcGxpY2F0aW9ucy4KKworICAgIC0td2l0aC1jaHR5cGU9VFlQRQorCU92ZXJyaWRlIHR5cGUgb2YgY2h0eXBlLCB3aGljaCBzdG9yZXMgdGhlIHZpZGVvIGF0dHJpYnV0ZXMgYW5kIChpZgorCS0tZW5hYmxlLXdpZGVjIGlzIG5vdCBnaXZlbikgYSBjaGFyYWN0ZXIuICBQcmlvciB0byBuY3Vyc2VzIDUuNSwgdGhpcworCXdhcyBhbHdheXMgdW5zaWduZWQgbG9uZywgYnV0IHdpdGggbmN1cnNlcyA1LjUsIGl0IG1heSBiZSB1bnNpZ25lZC4KKwlVc2UgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIDY0LWJpdAorCWV4ZWN1dGFibGVzLgorCisgICAgLS13aXRoLWRhdGFiYXNlPVhYWAorCVNwZWNpZnkgdGhlIHRlcm1pbmZvIHNvdXJjZSBmaWxlIHRvIGluc3RhbGwuICBVc3VhbGx5IHlvdSB3aWxsIHdpc2gKKwl0byBpbnN0YWxsIG5jdXJzZXMnIGRlZmF1bHQgKG1pc2MvdGVybWluZm8uc3JjKS4gIENlcnRhaW4gc3lzdGVtcworCWhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMsIGUuZywgT1MvMiBFTVggaGFzIGEgY3VzdG9taXplZCB0ZXJtaW5mbworCXNvdXJjZSBmaWxlLgorCisgICAgLS13aXRoLWRibWFsbG9jCisJRm9yIHRlc3RpbmcsIGNvbXBpbGUgYW5kIGxpbmsgd2l0aCBDb25vciBDYWhpbGwncyBkYm1hbGxvYyBsaWJyYXJ5LgorCVRoaXMgYWxzbyBzZXRzIHRoZSAtLWRpc2FibGUtbGVha3Mgb3B0aW9uLgorCisgICAgLS13aXRoLWRlYnVnCisJR2VuZXJhdGUgZGVidWctbGlicmFyaWVzIChkZWZhdWx0KS4gIFRoZXNlIGFyZSBuYW1lZCBieSBhZGRpbmcgIl9nIgorCXRvIHRoZSByb290LCBlLmcuLCBsaWJuY3Vyc2VzX2cuYQorCisgICAgLS13aXRoLWRlZmF1bHQtdGVybWluZm8tZGlyPVhYWAorCVNwZWNpZnkgdGhlIGRlZmF1bHQgdGVybWluZm8gZGF0YWJhc2UgZGlyZWN0b3J5LiAgVGhpcyBpcyBub3JtYWxseQorCURBVEFESVIvdGVybWluZm8sIGUuZy4sIC91c3Ivc2hhcmUvdGVybWluZm8uCisKKyAgICAtLXdpdGgtZG1hbGxvYworCUZvciB0ZXN0aW5nLCBjb21waWxlIGFuZCBsaW5rIHdpdGggR3JheSBXYXRzb24ncyBkbWFsbG9jIGxpYnJhcnkuCisJVGhpcyBhbHNvIHNldHMgdGhlIC0tZGlzYWJsZS1sZWFrcyBvcHRpb24uCisKKyAgICAtLXdpdGgtZmFsbGJhY2tzPVhYWAorCVNwZWNpZnkgYSBsaXN0IG9mIGZhbGxiYWNrIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyB3aGljaCB3aWxsIGJlCisJY29tcGlsZWQgaW50byB0aGUgbmN1cnNlcyBsaWJyYXJ5LiAgU2VlIENPTkZJR1VSSU5HIEZBTExCQUNLIEVOVFJJRVMuCisKKyAgICAtLXdpdGgtZ3BtCisJdXNlIEFsZXNzYW5kcm8gUnViaW5pJ3MgR1BNIGxpYnJhcnkgdG8gcHJvdmlkZSBtb3VzZSBzdXBwb3J0IG9uIHRoZQorCUxpbnV4IGNvbnNvbGUuICBQcmlvciB0byBuY3Vyc2VzIDUuNSwgdGhpcyBpbnRyb2R1Y2VkIGEgZGVwZW5kZW5jeSBvbgorCXRoZSBHUE0gbGlicmFyeS4KKwkKKwlDdXJyZW50bHkgbmN1cnNlcyB1c2VzIHRoZSBkbHN5bSgpIGZ1bmN0aW9uIHRvIGJpbmQgdG8gdGhlIGxpYnJhcnkgYXQKKwlydW50aW1lLCBzbyBpdCBpcyBvbmx5IG5lY2Vzc2FyeSB0aGF0IHRoZSBsaWJyYXJ5IGJlIHByZXNlbnQgd2hlbgorCW5jdXJzZXMgaXMgYnVpbHQsIHRvIG9idGFpbiB0aGUgZmlsZW5hbWUgKG9yIHNvbmFtZSkgdXNlZCBpbiB0aGUKKwljb3JyZXNwb25kaW5nIGRsb3BlbigpIGNhbGwuICBJZiB5b3UgZ2l2ZSBhIHZhbHVlIGZvciB0aGlzIG9wdGlvbiwKKwllLmcuLAorCisJCS0td2l0aC1ncG09JEhPTUUvdG1wL3Rlc3QtZ3BtLnNvCisKKwl0aGF0IG92ZXJyaWRlcyB0aGUgY29uZmlndXJlIGNoZWNrIGZvciB0aGUgc29uYW1lLgorCisJU2VlIGFsc28gLS13aXRob3V0LWRsc3ltCisKKyAgICAtLXdpdGgtaGFzaGVkLWRiWz1YWFhdCisJVXNlIGEgaGFzaGVkIGRhdGFiYXNlIGZvciBzdG9yaW5nIHRlcm1pbmZvIGRhdGEgcmF0aGVyIHRoYW4gc3RvcmluZworCWVhY2ggY29tcGlsZWQgZW50cnkgaW4gYSBzZXBhcmF0ZSBiaW5hcnkgZmlsZSB3aXRoaW4gYSBkaXJlY3RvcnkKKwl0cmVlLgorCQorCUluIHBhcnRpY3VsYXIsIHRoaXMgdXNlcyB0aGUgQmVya2VsZXkgZGF0YWJhc2UgMS44LjUgaW50ZXJmYWNlLCBhcworCXByb3ZpZGVkIGJ5IHRoYXQgYW5kIGl0cyBzdWNjZXNzb3JzIGRiIDIsIDMsIGFuZCA0LiAgVGhlIGFjdHVhbAorCWludGVyZmFjZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQgaW4gdGhlIHN1Y2Nlc3NvciB2ZXJzaW9ucyBvZiB0aGUKKwlCZXJrZWxleSBkYXRhYmFzZS4gIFRoZSBkYXRhYmFzZSBzaG91bGQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdXNpbmcKKwkiLS1lbmFibGUtY29tcGF0MTg1Ii4KKworCUlmIHlvdSB1c2UgdGhpcyBvcHRpb24gZm9yIGNvbmZpZ3VyaW5nIG5jdXJzZXMsIHRpYyB3aWxsIG9ubHkgYmUgYWJsZQorCXRvIHdyaXRlIGVudHJpZXMgaW4gdGhlIGhhc2hlZCBkYXRhYmFzZS4gIGluZm9jbXAgY2FuIHN0aWxsIHJlYWQKKwllbnRyaWVzIGZyb20gYSBkaXJlY3RvcnkgdHJlZSBhcyB3ZWxsIGFzIHJlYWRpbmcgZW50cmllcyBmcm9tIHRoZQorCWhhc2hlZCBkYXRhYmFzZS4gIFRvIGRvIHRoaXMsIGluZm9jbXAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSAkVEVSTUlORk8KKwl2YXJpYWJsZSBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgb3IgYSBmaWxlLCBhbmQgcmVhZHMgdGhlIGRpcmVjdG9yeS10cmVlCisJb3IgaGFzaGVkIGRhdGFiYXNlIHJlc3BlY3RpdmVseS4KKworCVlvdSBjYW5ub3QgaGF2ZSBhIGRpcmVjdG9yeSBjb250YWluaW5nIGJvdGggaGFzaGVkLWRhdGFiYXNlIGFuZAorCWZpbGVzeXN0ZW0tYmFzZWQgdGVybWluZm8gZW50cmllcy4KKworCVVzZSB0aGUgcGFyYW1ldGVyIHZhbHVlIHRvIGdpdmUgdGhlIGluc3RhbGwtcHJlZml4IHVzZWQgZm9yIHRoZQorCWRhdGJhc2UsIGUuZy4sCisJCS0td2l0aC1oYXNoZWQtZGI9L3Vzci9sb2NhbC9CaWdCYXNlCisJdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBpbmNsdWRlLSBhbmQgbGliLWRpcmVjdG9yaWVzIHVuZGVyIHRoZQorCWdpdmVuIGRpcmVjdG9yeS4KKworCVNlZSBhbHNvIHRoZSAtLWVuYWJsZS1nZXRjYXAgb3B0aW9uLgorCisgICAgLS13aXRoLWluc3RhbGwtcHJlZml4PVhYWAorCUFsbG93cyB5b3UgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgbG9jYXRpb24gZm9yIGluc3RhbGxpbmcgbmN1cnNlcworCWFmdGVyIGJ1aWxkaW5nIGl0LiAgVGhlIHZhbHVlIHlvdSBzcGVjaWZ5IGlzIHByZXBlbmRlZCB0byB0aGUgInJlYWwiCisJaW5zdGFsbCBsb2NhdGlvbi4gIFRoaXMgc2ltcGxpZmllcyBtYWtpbmcgYmluYXJ5IHBhY2thZ2VzLiAgVGhlCisJbWFrZWZpbGUgdmFyaWFibGUgREVTVERJUiBpcyBzZXQgYnkgdGhpcyBvcHRpb24uICBJdCBpcyBhbHNvIHBvc3NpYmxlCisJdG8gdXNlCisJCW1ha2UgaW5zdGFsbCBERVNURElSPVhYWAorCXNpbmNlIHRoZSBtYWtlZmlsZXMgcGFzcyB0aGF0IHZhcmlhYmxlIHRvIHN1Ym9yZGluYXRlIG1ha2VzLgorCisJTk9URTogIGEgZmV3IHN5c3RlbXMgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIGZpeGVkIHBhdGhuYW1lczsgdGhpcworCW9wdGlvbiBwcm9iYWJseSB3aWxsIG5vdCB3b3JrIGZvciB0aG9zZSBjb25maWd1cmF0aW9ucy4KKworICAgICAtLXdpdGgtbGlidG9vbFs9WFhYXQorCUdlbmVyYXRlIGxpYnJhcmllcyB3aXRoIGxpYnRvb2wuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgdGhlbiBpdAorCW92ZXJyaWRlcyBhbGwgb3RoZXIgbGlicmFyeSBtb2RlbCBzcGVjaWZpY2F0aW9ucy4gIE5vdGUgdGhhdCBsaWJ0b29sCisJbXVzdCBhbHJlYWR5IGJlIGluc3RhbGxlZCwgdXNlcyBtYWtlZmlsZSBydWxlcyBkZXBlbmRlbnQgb24gR05VIG1ha2UsCisJYW5kIGRvZXMgbm90IHByb21pc2UgdG8gZm9sbG93IHRoZSB2ZXJzaW9uIG51bWJlcmluZyBjb252ZW50aW9uIG9mCisJb3RoZXIgc2hhcmVkIGxpYnJhcmllcyBvbiB5b3VyIHN5c3RlbS4gIEhvd2V2ZXIsIGlmIHRoZSAtLXdpdGgtc2hhcmVkCisJb3B0aW9uIGRvZXMgbm90IHN1Y2NlZWQsIHlvdSBtYXkgZ2V0IGJldHRlciByZXN1bHRzIHdpdGggdGhpcyBvcHRpb24uCisKKwlJZiBhIHBhcmFtZXRlciB2YWx1ZSBpcyBnaXZlbiwgaXQgbXVzdCBiZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUKKwlwYXJ0aWN1bGFyIHZlcnNpb24gb2YgbGlidG9vbCwgZS5nLiwKKwkJL3Vzci9iaW4vbGlidG9vbC0xLjIuMworCisJSXQgaXMgcG9zc2libGUgdG8gcmVidWlsZCB0aGUgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgdGhlIGF1dG9tYWtlCisJbWFjcm9zIGZvciBsaWJ0b29sLCBlLmcuLCBBQ19QUk9HX0xJQlRPT0wuICBTZWUgdGhlIGNvbW1lbnRzIGluCisJYWNsb2NhbC5tNCBmb3IgQ0ZfUFJPR19MSUJUT09MLCBhbmQgZW5zdXJlIHRoYXQgeW91IGJ1aWxkIGNvbmZpZ3VyZQorCXVzaW5nIHRoZSBhcHByb3ByaWF0ZSBwYXRjaCBmb3IgYXV0b2NvbmYgZnJvbQorCQlodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvCisKKyAgICAtLXdpdGgtbWFucGFnZS1hbGlhc2VzCisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB5b3Ugd2lzaCB0byBjcmVhdGUgZW50cmllcyBpbiB0aGUKKwltYW4tZGlyZWN0b3J5IGZvciBhbGlhc2VzIHRvIG1hbnBhZ2VzIHdoaWNoIGxpc3QgdGhlbSwgZS5nLiwgdGhlCisJZnVuY3Rpb25zIGluIHRoZSBwYW5lbCBtYW5wYWdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4gIFlvdSBjYW4gZGlzYWJsZQorCWl0IGlmIHlvdXIgbWFuIHByb2dyYW0gZG9lcyB0aGlzLiAgWW91IGNhbiBhbHNvIGRpc2FibGUKKwktLXdpdGgtbWFucGFnZS1zeW1saW5rcyB0byBpbnN0YWxsIGZpbGVzIGNvbnRhaW5pbmcgYSAiLnNvIiBjb21tYW5kCisJcmF0aGVyIHRoYW4gc3ltYm9saWMgbGlua3MuCisKKyAgICAtLXdpdGgtbWFucGFnZS1mb3JtYXQ9WFhYCisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCBob3cgeW91IHdvdWxkIGxpa2UgdG8gaW5zdGFsbCBtYW4tcGFnZXMuICBUaGUKKwlvcHRpb24gdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlc2U6ICBnemlwLCBjb21wcmVzcywgQlNESSwgbm9ybWFsLAorCWZvcm1hdHRlZC4gIElmIHlvdSBkbyBub3QgZ2l2ZSB0aGlzIG9wdGlvbiwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKwlhdHRlbXB0cyB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGNhc2UuCisKKyAgICAtLXdpdGgtbWFucGFnZS1yZW5hbWVzPVhYWAorCVRlbGwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCB5b3Ugd2lzaCB0byByZW5hbWUgdGhlIG1hbnBhZ2VzIHdoaWxlCisJaW5zdGFsbGluZy4gIEN1cnJlbnRseSB0aGUgb25seSBkaXN0cmlidXRpb24gd2hpY2ggZG9lcyB0aGlzIGlzCisJdGhlIExpbnV4IERlYmlhbi4gIFRoZSBvcHRpb24gdmFsdWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgZmlsZQorCXRoYXQgbGlzdHMgdGhlIHJlbmFtZWQgZmlsZXMsIGUuZy4sICRzcmNkaXIvbWFuL21hbl9kYi5yZW5hbWVzCisKKyAgICAtLXdpdGgtbWFucGFnZS1zeW1saW5rcworCVRlbGwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCB5b3Ugd2lzaCB0byBtYWtlIHN5bWJvbGljIGxpbmtzIGluIHRoZQorCW1hbi1kaXJlY3RvcnkgZm9yIGFsaWFzZXMgdG8gdGhlIG1hbi1wYWdlcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQsIGJ1dAorCWNhbiBiZSBkaXNhYmxlZCBmb3Igc3lzdGVtcyB0aGF0IHByb3ZpZGUgdGhpcyBhdXRvbWF0aWNhbGx5LiAgRG9pbmcKKwl0aGlzIG9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcyB3aWxsIHJlc3VsdCBpbgorCWNvcHlpbmcgdGhlIG1hbi1wYWdlIGZvciBlYWNoIGFsaWFzLgorCisgICAgLS13aXRoLW1hbnBhZ2UtdGJsCisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB0aGF0IHlvdSB3aXRoIHRvIHByZXByb2Nlc3MgdGhlIG1hbnBhZ2VzCisJYnkgcnVubmluZyB0aGVtIHRocm91Z2ggdGJsIHRvIGdlbmVyYXRlIHRhYmxlcyB1bmRlcnN0YW5kYWJsZSBieQorCW5yb2ZmLgorCisgICAgLS13aXRoLW1tYXNrLXQ9VFlQRQorCU92ZXJyaWRlIHR5cGUgb2YgbW1hc2tfdCwgd2hpY2ggc3RvcmVzIHRoZSBtb3VzZSBtYXNrLiAgUHJpb3IgdG8KKwluY3Vyc2VzIDUuNSwgdGhpcyB3YXMgYWx3YXlzIHVuc2lnbmVkIGxvbmcsIGJ1dCB3aXRoIG5jdXJzZXMgNS41LCBpdAorCW1heSBiZSB1bnNpZ25lZC4gIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZCB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5CisJd2l0aCA2NC1iaXQgZXhlY3V0YWJsZXMuCisKKyAgICAtLXdpdGgtbm9ybWFsCisJR2VuZXJhdGUgbm9ybWFsIChpLmUuLCBzdGF0aWMpIGxpYnJhcmllcyAoZGVmYXVsdCkuCisKKwlOb3RlOiAgb24gTGludXgsIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIEdQTQorCWxpYnJhcnkgdmlhIHRoZSBkbHN5bSgpIGZ1bmN0aW9uIGNhbGwuICBVc2UgLS13aXRob3V0LWRsc3ltIHRvIGRpc2FibGUKKwl0aGlzIGZlYXR1cmUsIG9yIC0td2l0aG91dC1ncG0sIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSB3aXNoIHRvIHVzZQorCUdQTS4KKworICAgIC0td2l0aC1vc3BlZWQ9VFlQRQorCU92ZXJyaWRlIHR5cGUgb2Ygb3NwZWVkIHZhcmlhYmxlLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSB0ZXJtY2FwCisJY29tcGF0aWJpbGl0eSBpbnRlcmZhY2UuICBJbiB0ZXJtY2FwLCB0aGlzIGlzIGEgJ3Nob3J0Jywgd2hpY2ggd29ya3MKKwlmb3IgYSB3aWRlIHJhbmdlIG9mIGJhdWRyYXRlcyBiZWNhdXNlIG9zcGVlZCBpcyBub3QgdGhlIGFjdHVhbCBzcGVlZAorCWJ1dCB0aGUgZW5jb2RlZCB2YWx1ZSwgZS5nLiwgQjk2MDAgd291bGQgYmUgYSBzbWFsbCBudW1iZXIgc3VjaCBhcyAxMy4KKwlIb3dldmVyIHRoZSBlbmNvZGluZyBzY2hlbWUgb3JpZ2luYWxseSBhbGxvd2VkIGZvciB2YWx1ZXMgIm9ubHkiIHVwIHRvCisJMzg0MDBiZC4gIEEgbmV3ZXIgc2V0IG9mIGRlZmluaXRpb25zIHBhc3QgMzg0MDBiZCBpcyBub3QgZW5jb2RlZCBhcworCWNvbXBhY3RseSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIGZpdCBpbnRvIGEgc2hvcnQgKHNlZSB0aGUgZnVuY3Rpb24KKwljZmdldG9zcGVlZCgpLCB3aGljaCByZXR1cm5zIGEgc3BlZWRfdCBmb3IgdGhpcyByZWFzb24pLiAgSW4gcHJhY3RpY2UsCisJYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZWQga25vd2xlZGdlIG9mIHRoZSBvc3BlZWQgdmFyaWFibGUsIGkuZS4sCisJdGhvc2UgdXNpbmcgdGVybWNhcCwgZG8gbm90IHVzZSB0aGUgaGlnaGVyIHNwZWVkcy4gIFlvdXIgYXBwbGljYXRpb24KKwkob3Igc3lzdGVtLCBpbiBnZW5lcmFsKSBtYXkgb3IgbWF5IG5vdC4KKworICAgIC0td2l0aC1wcm9maWxlCisJR2VuZXJhdGUgcHJvZmlsZS1saWJyYXJpZXMgVGhlc2UgYXJlIG5hbWVkIGJ5IGFkZGluZyAiX3AiIHRvIHRoZSByb290LAorCWUuZy4sIGxpYm5jdXJzZXNfcC5hCisKKyAgICAtLXdpdGgtcHRocmVhZAorCUxpbmsgd2l0aCBQT1NJWCB0aHJlYWRzLCBzZXQgLS1lbmFibGUtcmVlbnRyYW50LiAgVGhlIHVzZV93aW5kb3coKSBhbmQKKwl1c2Vfc2NyZWVuKCkgZnVuY3Rpb25zIHdpbGwgdXNlIG11dGV4J3MsIGFsbG93aW5nIHJ1ZGltZW50YXJ5IHN1cHBvcnQKKwlmb3IgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisKKyAgICAtLXdpdGgtcmNzLWlkcworCUNvbXBpbGUtaW4gUkNTIGlkZW50aWZpZXJzLiAgTW9zdCBvZiB0aGUgQyBmaWxlcyBoYXZlIGFuIGlkZW50aWZpZXIuCisKKyAgICAtLXdpdGgtcmVsLXZlcnNpb249TlVNCisJT3ZlcnJpZGUgdGhlIHJlbGVhc2UgdmVyc2lvbiwgd2hpY2ggbWF5IGJlIHVzZWQgaW4gc2hhcmVkIGxpYnJhcnkKKwlmaWxlbmFtZXMuICBUaGlzIGNvbnNpc3RzIG9mIGEgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVyIHNlcGFyYXRlZAorCWJ5ICIuIi4gIE5vcm1hbGx5IHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBpcyB0aGUgc2FtZSBhcyB0aGUgQUJJCisJdmVyc2lvbjsgc29tZSBwb3J0cyBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciBjb21wYXRpYmlsaXR5LgorCisgICAgLS13aXRoLXNoYXJlZAorCUdlbmVyYXRlIHNoYXJlZC1saWJyYXJpZXMuICBUaGUgbmFtZXMgZ2l2ZW4gZGVwZW5kIG9uIHRoZSBzeXN0ZW0gZm9yCisJd2hpY2ggeW91IGFyZSBidWlsZGluZywgdHlwaWNhbGx5IHVzaW5nIGEgIi5zbyIgc3VmZml4LCBhbG9uZyB3aXRoCisJc3ltYm9saWMgbGlua3MgdGhhdCByZWZlciB0byB0aGUgcmVsZWFzZSB2ZXJzaW9uLgorCisJTk9URTogIFVubGVzcyB5b3Ugb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnkgc2V0dGluZyB0aGUgJENGTEFHUworCWVudmlyb25tZW50IHZhcmlhYmxlLCB0aGVzZSB3aWxsIG5vdCBiZSBidWlsdCB3aXRoIHRoZSAtZyBkZWJ1Z2dpbmcKKwlvcHRpb24uCisKKwlOT1RFOiBGb3Igc29tZSBjb25maWd1cmF0aW9ucywgZS5nLiwgaW5zdGFsbGluZyBhIG5ldyB2ZXJzaW9uIG9mCisJbmN1cnNlcyBzaGFyZWQgbGlicmFyaWVzIG9uIGEgbWFjaGluZSB3aGljaCBhbHJlYWR5IGhhcyBuY3Vyc2VzCisJc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSBlbmNvdW50ZXIgcHJvYmxlbXMgd2l0aCB0aGUgbGlua2VyLgorCUZvciBleGFtcGxlLCBpdCBtYXkgcHJldmVudCB5b3UgZnJvbSBydW5uaW5nICB0aGUgYnVpbGQgdHJlZSdzCisJY29weSBvZiB0aWMgKGZvciBpbnN0YWxsaW5nIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSkgYmVjYXVzZSBpdAorCWxvYWRzIHRoZSBzeXN0ZW0ncyBjb3B5IG9mIHRoZSBuY3Vyc2VzIHNoYXJlZCBsaWJyYXJpZXMuICBJbiB0aGF0CisJY2FzZSwgdXNpbmcgdGhlIG1pc2Mvc2hsaWIgc2NyaXB0IG1heSBiZSBoZWxwZnVsLCBzaW5jZSBpdCBzZXRzCisJJExEX0xJQlJBUllfUEFUSCB0byBwb2ludCB0byB0aGUgYnVpbGQgdHJlZSwgZS5nLiwKKwkJLi9taXNjL3NobGliIG1ha2UgaW5zdGFsbCAJCisKKyAgICAtLXdpdGgtc2hsaWItdmVyc2lvbj1YWFgKKwlTcGVjaWZ5IHdoZXRoZXIgdG8gdXNlIHRoZSByZWxlYXNlIG9yIEFCSSB2ZXJzaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzLgorCVRoaXMgaXMgbm9ybWFsbHkgY2hvc2VuIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHR5cGUgb2Ygc3lzdGVtCisJd2hpY2ggeW91IGFyZSBidWlsZGluZyBvbi4gIFdlIHVzZSBpdCBmb3IgdGVzdGluZyB0aGUgY29uZmlndXJlIHNjcmlwdC4KKworICAgIC0td2l0aC1zeXNtb3VzZQorCXVzZSBGcmVlQlNEIHN5c21vdXNlIGludGVyZmFjZSBwcm92aWRlIG1vdXNlIHN1cHBvcnQgb24gdGhlIGNvbnNvbGUuCisKKyAgICAtLXdpdGgtc3lzdGVtLXR5cGU9WFhYCisJRm9yIHRlc3RpbmcsIG92ZXJyaWRlIHRoZSBkZXJpdmVkIGhvc3Qgc3lzdGVtLXR5cGUgd2hpY2ggaXMgdXNlZCB0bworCWRlY2lkZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbGlua2VyIGNvbW1hbmRzIHVzZWQgdG8gYnVpbGQgc2hhcmVkCisJbGlicmFyaWVzLiAgVGhpcyBpcyBub3JtYWxseSBjaG9zZW4gYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgdHlwZSBvZgorCXN5c3RlbSB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIG9uLiAgV2UgdXNlIGl0IGZvciB0ZXN0aW5nIHRoZSBjb25maWd1cmUKKwlzY3JpcHQuCisKKyAgICAtLXdpdGgtdGVybWluZm8tZGlycz1YWFgKKwlTcGVjaWZ5IGEgc2VhcmNoLWxpc3Qgb2YgdGVybWluZm8gZGlyZWN0b3JpZXMgd2hpY2ggd2lsbCBiZSBjb21waWxlZAorCWludG8gdGhlIG5jdXJzZXMgbGlicmFyeSAoZGVmYXVsdDogREFUQURJUi90ZXJtaW5mbykKKworICAgIC0td2l0aC10ZXJtbGliWz1YWFhdCisJV2hlbiBidWlsZGluZyB0aGUgbmN1cnNlcyBsaWJyYXJ5LCBvcmdhbml6ZSB0aGlzIGFzIHR3byBwYXJ0czogIHRoZQorCWN1cnNlcyBsaWJyYXJ5IChsaWJuY3Vyc2VzKSBhbmQgdGhlIGxvdy1sZXZlbCB0ZXJtaW5mbyBsaWJyYXJ5CisJKGxpYnRpbmZvKS4gIFRoaXMgaXMgZG9uZSB0byBhY2NvbW1vZGF0ZSBhcHBsaWNhdGlvbnMgdGhhdCB1c2Ugb25seQorCXRoZSBsYXR0ZXIuICBUaGUgdGVybWluZm8gbGlicmFyeSBpcyBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHRoZSB0b3RhbC4KKworCUlmIGFuIG9wdGlvbiB2YWx1ZSBpcyBnaXZlbiwgdGhhdCBvdmVycmlkZXMgdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmZvCisJbGlicmFyeS4gIEZvciBpbnN0YW5jZSwgaWYgdGhlIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24gaXMgYnVpbHQsIHRoZQorCXRlcm1pbmZvIGxpYnJhcnkgd291bGQgYmUgbmFtZWQgbGlidGluZm93LiAgQnV0IHRoZSBsaWJ0aW5mb3cgaW50ZXJmYWNlCisJaXMgdXB3YXJkIGNvbXBhdGlibGUgZnJvbSBsaWJ0aW5mbywgc28gaXQgd291bGQgYmUgcG9zc2libGUgdG8gb3ZlcmxheQorCWxpYnRpbmZvLnNvIHdpdGggYSAid2lkZSIgdmVyc2lvbiBvZiBsaWJ0aW5mb3cuc28gYnkgcmVuYW1pbmcgaXQgd2l0aAorCXRoaXMgb3B0aW9uLgorCisgICAgLS13aXRoLXRlcm1wYXRoPVhYWAorCVNwZWNpZnkgYSBzZWFyY2gtbGlzdCBvZiB0ZXJtY2FwIGZpbGVzIHdoaWNoIHdpbGwgYmUgY29tcGlsZWQgaW50byB0aGUKKwluY3Vyc2VzIGxpYnJhcnkgKGRlZmF1bHQ6ICAvZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXApCisKKyAgICAtLXdpdGgtdGljbGliWz1YWFhdCisJV2hlbiBidWlsZGluZyB0aGUgbmN1cnNlcyBsaWJyYXJ5LCBidWlsZCBhIHNlcGFyYXRlIGxpYnJhcnkgZm9yCisJdGhlIG1vZHVsZXMgdGhhdCBhcmUgdXNlZCBvbmx5IGJ5IHRoZSB1dGlsaXR5IHByb2dyYW1zLiAgTm9ybWFsbHkKKwl0aG9zZSB3b3VsZCBiZSBidW5kbGVkIHdpdGggdGhlIHRlcm1saWIgb3IgbmN1cnNlcyBsaWJyYXJpZXMuCisKKwlJZiBhbiBvcHRpb24gdmFsdWUgaXMgZ2l2ZW4sIHRoYXQgb3ZlcnJpZGVzIHRoZSBuYW1lIG9mIHRoZSB0aWMKKwlsaWJyYXJ5LiAgQXMgaW4gdGVybWxpYiwgdGhlcmUgaXMgbm8gQUJJIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKKwkid2lkZSIgbGlidGljdy5zbyBhbmQgbGlidGljLnNvCisKKwlOT1RFOiBPdmVycmlkaW5nIHRoZSBuYW1lIG9mIHRoZSB0aWMgbGlicmFyeSBtYXkgYmUgdXNlZnVsIGlmIHlvdSBhcmUKKwlhbHNvIHVzaW5nIHRoZSAtLXdpdGgtdGVybWxpYiBvcHRpb24gdG8gcmVuYW1lIGxpYnRpbmZvLiAgSWYgeW91IGFyZQorCW5vdCBkb2luZyB0aGF0LCByZW5hbWluZyB0aGUgdGljIGxpYnJhcnkgY2FuIHJlc3VsdCBpbiBjb25mbGljdGluZworCWxpYnJhcnkgZGVwZW5kZW5jaWVzIGZvciB0aWMgYW5kIG90aGVyIHByb2dyYW1zIGJ1aWx0IHdpdGggdGhlIHRpYworCWxpYnJhcnkuCisKKyAgICAtLXdpdGgtdHJhY2UKKwlDb25maWd1cmUgdGhlIHRyYWNlKCkgZnVuY3Rpb24gYXMgcGFydCBvZiB0aGUgYWxsIG1vZGVscyBvZiB0aGUgbmN1cnNlcworCWxpYnJhcnkuICBOb3JtYWxseSBpdCBpcyBwYXJ0IG9mIHRoZSBkZWJ1ZyAobGlibmN1cnNlc19nKSBsaWJyYXJ5IG9ubHkuCisKKyAgICAtLXdpdGgtdmFsZ3JpbmQKKwlGb3IgdGVzdGluZywgY29tcGlsZSB3aXRoIGRlYnVnIG9wdGlvbi4KKwlUaGlzIGFsc28gc2V0cyB0aGUgLS1kaXNhYmxlLWxlYWtzIG9wdGlvbi4KKworICAgIC0td2l0aG91dC1hZGEKKwlTdXBwcmVzcyB0aGUgY29uZmlndXJlIHNjcmlwdCdzIGNoZWNrIGZvciBBZGE5NSwgZG8gbm90IGJ1aWxkIHRoZQorCUFkYTk1IGJpbmRpbmcgYW5kIHJlbGF0ZWQgZGVtby4KKworICAgIC0td2l0aG91dC1jdXJzZXMtaAorCURvbid0IGluc3RhbGwgdGhlIG5jdXJzZXMgaGVhZGVyIHdpdGggdGhlIG5hbWUgImN1cnNlcy5oIi4gIFJhdGhlciwKKwlpbnN0YWxsIGFzICJuY3Vyc2VzLmgiIGFuZCBtb2RpZnkgdGhlIGluc3RhbGxlZCBoZWFkZXJzIGFuZCBtYW5wYWdlcworCWFjY29yZGluZ2x5LgorCisgICAgLS13aXRob3V0LWN4eAorCVhTSSBjdXJzZXMgZGVjbGFyZXMgImJvb2wiIGFzIHBhcnQgb2YgdGhlIGludGVyZmFjZS4gIEMrKyBhbHNvIGRlY2xhcmVzCisJImJvb2wiLiAgTmVpdGhlciBzcGVjaWZpZXMgdGhlIHNpemUgYW5kIHR5cGUgb2YgYm9vbGVhbnMsIGJ1dCBib3RoCisJaW5zaXN0IG9uIHRoZSBzYW1lIG5hbWUuICBXZSBjaG9zZSB0byBhY2NvbW1vZGF0ZSB0aGlzIGJ5IG1ha2luZyB0aGUKKwljb25maWd1cmUgc2NyaXB0IGNoZWNrIGZvciB0aGUgc2l6ZSBhbmQgdHlwZSAoZS5nLiwgdW5zaWduZWQgb3Igc2lnbmVkKQorCXRoYXQgeW91ciBDKysgY29tcGlsZXIgdXNlcyBmb3IgYm9vbGVhbnMuICBJZiB5b3UgZG8gbm90IHdpc2ggdG8gdXNlCisJbmN1cnNlcyB3aXRoIEMrKywgdXNlIHRoaXMgb3B0aW9uIHRvIHRlbGwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gbm90CisJYWRqdXN0IG5jdXJzZXMgYm9vbCB0byBtYXRjaCBDKysuCisKKyAgICAtLXdpdGhvdXQtY3h4LWJpbmRpbmcKKwlTdXBwcmVzcyB0aGUgY29uZmlndXJlIHNjcmlwdCdzIGNoZWNrIGZvciBDKyssIGRvIG5vdCBidWlsZCB0aGUKKwlDKysgYmluZGluZyBhbmQgcmVsYXRlZCBkZW1vLgorCisgICAgLS13aXRob3V0LWRldmVsb3AKKwlEaXNhYmxlIGRldmVsb3BtZW50IG9wdGlvbnMuICBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhvc2UgdGhhdCBjaGFuZ2UKKwl0aGUgaW50ZXJmYWNlLCBzdWNoIGFzIC0tZW5hYmxlLXdpZGVjLgorCisgICAgLS13aXRob3V0LWRsc3ltCisJRG8gbm90IHVzZSBkbHN5bSgpIHRvIGxvYWQgR1BNIGR5bmFtaWNhbGx5LgorCisgICAgLS13aXRob3V0LXByb2dzCisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBzdXBwcmVzcyB0aGUgYnVpbGQgb2YgbmN1cnNlcycgYXBwbGljYXRpb24KKwlwcm9ncmFtcyAoZS5nLiwgdGljKS4gIFRoZSB0ZXN0IGFwcGxpY2F0aW9ucyB3aWxsIHN0aWxsIGJlIGJ1aWx0IGlmIHlvdQorCXR5cGUgIm1ha2UiLCB0aG91Z2ggbm90IGlmIHlvdSBzaW1wbHkgZG8gIm1ha2UgaW5zdGFsbCIuCisKKyAgICAtLXdpdGhvdXQteHRlcm0tbmV3CisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgInh0ZXJtLW9sZCIgZm9yIHRoZSBlbnRyeSB1c2VkIGluCisJdGhlIHRlcm1pbmZvIGRhdGFiYXNlLiAgVGhpcyB3aWxsIHdvcmsgd2l0aCB2YXJpYXRpb25zIHN1Y2ggYXMKKwlYMTFSNSBhbmQgWDExUjYgeHRlcm0uCisKKworQ09NUEFUSUJJTElUWSBXSVRIIE9MREVSIFZFUlNJT05TIE9GIE5DVVJTRVM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgQmVjYXVzZSBuY3Vyc2VzIGltcGxlbWVudHMgdGhlIFgvT3BlbiBDdXJzZXMgU3BlY2lmaWNhdGlvbiwgaXRzIGludGVyZmFjZQorICAgIGlzIGZhaXJseSBzdGFibGUuICBUaGF0IGRvZXMgbm90IG1lYW4gdGhlIGludGVyZmFjZSBkb2VzIG5vdCBjaGFuZ2UuCisgICAgQ2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgZG9jdW1lbnRlZCBpbnRlcmZhY2VzIHdoZW4gd2UgZmluZCBkaWZmZXJlbmNlcworICAgIGJldHdlZW4gbmN1cnNlcyBhbmQgWC9PcGVuIG9yIGltcGxlbWVudGF0aW9ucyB3aGljaCB0aGV5IGNlcnRpZnkgKHN1Y2ggYXMKKyAgICBTb2xhcmlzKS4gIFdlIGFkZCBleHRlbnNpb25zIHRvIHRob3NlIGludGVyZmFjZXMgdG8gc29sdmUgcHJvYmxlbXMgbm90CisgICAgYWRkcmVzc2VkIGJ5IHRoZSBvcmlnaW5hbCBjdXJzZXMgZGVzaWduLCBidXQgdGhvc2UgbXVzdCBub3QgY29uZmxpY3Qgd2l0aAorICAgIHRoZSBYL09wZW4gZG9jdW1lbnRhdGlvbi4KKworICAgIEhlcmUgYXJlIHNvbWUgb2YgdGhlIG1ham9yIGludGVyZmFjZSBjaGFuZ2VzLCBhbmQgcmVsYXRlZCBwcm9ibGVtcyB3aGljaAorICAgIHlvdSBtYXkgZW5jb3VudGVyIHdoZW4gYnVpbGRpbmcgYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YKKyAgICBuY3Vyc2VzOgorCisgICAgNS43IChOb3ZlbWJlciAyLCAyMDA4KQorCUludGVyZmFjZSBjaGFuZ2VzOgorCisJKyBnZW5lcmF0ZSBsaW5rYWJsZSBzdHVicyBmb3Igc29tZSBtYWNyb3M6CisJCWdldGF0dHJzCisKKwkrIEFkZCBuZXcgbGlicmFyeSBjb25maWd1cmF0aW9uIGZvciB0aWMtbGlicmFyeSAodGhlIG5vbi1jdXJzZXMgcG9ydGlvbgorCSAgb2YgdGhlIG5jdXJzZXMgbGlicmFyeSB1c2VkIGZvciB0aGUgdGljIHByb2dyYW0gYXMgd2VsbCBhcyBzb21lCisJICBvdGhlcnMgc3VjaCBhcyB0YWNrLiAgVGhlcmUgaXMgbm8gQVBJIGNoYW5nZSwgYnV0IG1ha2VmaWxlcyB3b3VsZCBiZQorCSAgY2hhbmdlZCB0byB1c2UgdGhlIHRpYy1saWJyYXJ5IGJ1aWx0IHNlcGFyYXRlbHkuCisJICAKKwkgIHRhY2ssIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSBuY3Vyc2VzLCB1c2VzIHNvbWUgb2YgdGhlIGludGVybmFsCisJICBfbmNfWFhYIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGRlY2xhcmVkIGluIHRoZSB0aWMuaCBoZWFkZXIgZmlsZS4KKworCSAgVGhlIHJlYXNvbiBmb3IgcHJvdmlkaW5nIHRoaXMgc2VwYXJhdGUgbGlicmFyeSBpcyB0aGF0IG5vbmUgb2YgdGhlCisJICBmdW5jdGlvbnMgaW4gaXQgYXJlIHN1aXRhYmxlIGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisKKwkrIEFkZCBuZXcgbGlicmFyeSBjb25maWd1cmF0aW9uIChuY3Vyc2VzdCwgbmN1cnNlc3d0KSB3aGljaCBwcm92aWRlcworCSAgcnVkaW1lbnRhcnkgc3VwcG9ydCBmb3IgUE9TSVggdGhyZWFkcy4gIFRoaXMgaW50cm9kdWNlcyBvcGFxdWUKKwkgIGFjY2VzcyBmdW5jdGlvbnMgdG8gdGhlIFdJTkRPVyBzdHJ1Y3R1cmUgYW5kIGFkZHMgYSBwYXJhbWV0ZXIgdG8KKwkgIHNldmVyYWwgaW50ZXJuYWwgZnVuY3Rpb25zLgorCisJKyBtb3ZlIG1vc3QgaW50ZXJuYWwgdmFyaWFibGVzIChleGNlcHQgdGljLWxpYnJhcnkpIGludG8gZGF0YSBibG9ja3MKKwkgIF9uY19nbG9iYWxzIGFuZCBfbmNfcHJlc2NyZWVuIHRvIHNpbXBsaWZ5IGFuYWx5c2lzLiAgVGhvc2Ugd2VyZQorCSAgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgYnV0IHNpbmNlIHRoZXkgd2VyZSBub3QgcGFydCBvZiB0aGUgZG9jdW1lbnRlZAorCSAgQVBJLCB0aGVyZSBpcyBubyBBQkkgY2hhbmdlLgorCisJKyBjaGFuZ2VkIHN0YXRpYyB0YWJsZXMgb2Ygc3RyaW5ncyB0byBiZSBpbmRpY2VzIGludG8gbG9uZyBzdHJpbmdzLCB0bworCSAgaW1wcm92ZSBzdGFydHVwIHBlcmZvcm1hbmNlLiAgVGhpcyBjaGFuZ2VzIHBhcmFtZXRlciBsaXN0cyBmb3Igc29tZQorCSAgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucy4KKworCUFkZGVkIGV4dGVuc2lvbnM6CisKKwkrIGFkZCBOQ1VSU0VTX09QQVFVRSBkZWZpbml0aW9uIGluIGN1cnNlcy5oIHRvIGNvbnRyb2wgd2hldGhlciBpbnRlcm5hbAorCSAgZGV0YWlscyBvZiB0aGUgV0lORE9XIHN0cnVjdHVyZSBhcmUgdmlzaWJsZSB0byBhbiBhcHBsaWNhdGlvbi4gIFRoaXMKKwkgIGlzIGFsd2F5cyBkZWZpbmVkIHdoZW4gdGhlIHRocmVhZGVkIGxpYnJhcnkgaXMgYnVpbHQsIGFuZCBpcyBvcHRpb25hbAorCSAgb3RoZXJ3aXNlLiAgTmV3IGZ1bmN0aW9ucyBmb3IgdGhpczogIGlzX2NsZWFyZWQsIGlzX2lkY29rLCBpc19pZGxvaywKKwkgIGlzX2ltbWVkb2ssIGlzX2tleXBhZCwgaXNfbGVhdmVvaywgaXNfbm9kZWxheSwgaXNfbm90aW1lb3V0LAorCSAgaXNfc2Nyb2xsb2ssIGlzX3N5bmNvaywgd2dldHBhcmVudCBhbmQgd2dldHNjcnJlZy4KKworCSsgdGhlIHRocmVhZGVkIGxpYnJhcnkgKG5jdXJzZXN0KSBhbHNvIGRpc2FsbG93cyBkaXJlY3QgdXBkYXRpbmcgb2YKKwkgIGdsb2JhbCBjdXJzZXMtbGV2ZWwgdmFyaWFibGVzLCBwcm92aWRpbmcgZnVuY3Rpb25zICh2aWEgbWFjcm9zKSBmb3IKKwkgIG9idGFpbmluZyB0aGVpciB2YWx1ZS4gIEEgZmV3IG9mIHRob3NlIHZhcmlhYmxlcyBjYW4gYmUgbW9kaWZpZWQgYnkKKwkgIHRoZSBhcHBsaWNhdGlvbiwgdXNpbmcgbmV3IGZ1bmN0aW9uczogIHNldF9lc2NkZWxheSwgc2V0X3RhYnNpemUKKworCSsgYWRkZWQgZnVuY3Rpb25zIHVzZV93aW5kb3coKSBhbmQgdXNlX3NjcmVlbigpIHdoaWNoIHdyYXAgYSBtdXRleAorCSAgKGlmIHRocmVhZGluZyBpcyBjb25maWd1cmVkKSBhcm91bmQgYSBjYWxsIHRvIGEgdXNlci1zdXBwbGllZAorCSAgZnVuY3Rpb24uCisKKwlBZGRlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19nZXRfYWxpYXNfdGFibGUKKwkJX25jX2dldF9zY3JlZW5zaXplCisJCV9uY19rZXluYW1lCisJCV9uY19zY3JlZW5fb2YKKwkJX25jX3NldF9ub19wYWRkaW5nCisJCV9uY190cmFjZWNoYXIKKwkJX25jX3RyYWNlbW91c2UKKwkJX25jX3VuY3RybAorCQlfbmNfdW5nZXRjaAorCisJCVRoZXNlIGFyZSB1c2VkIGZvciBsZWFrLXRlc3RpbmcsIGFuZCBhcmUgc3R1YnMgZm9yCisJCUFCSSBjb21wYXRpYmlsaXR5IHdoZW4gbmN1cnNlcyBpcyBub3QgY29uZmlndXJlZCBmb3IgdGhhdAorCQl1c2luZyB0aGUgLS1kaXNhYmxlLWxlYWtzIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9uOgorCisJCV9uY19mcmVlX2FuZF9leGl0CisJCV9uY19sZWFrc190aW5mbworCisJUmVtb3ZlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCW5vbmUKKworCU1vZGlmaWVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2ZpZm9fZHVtcAorCQlfbmNfZmluZF9lbnRyeQorCQlfbmNfaGFuZGxlX3NpZ3dpbmNoCisJCV9uY19pbml0X2tleXRyeQorCQlfbmNfa2V5cGFkCisJCV9uY19sb2NhbGVfYnJlYWtzX2FjcworCQlfbmNfdGltZWRfd2FpdAorCQlfbmNfdXBkYXRlX3NjcmVlbnNpemUKKworCQlVc2UgbmV3IHR5cGVkZWYgVFJJRVMgdG8gcmVwbGFjZSAic3RydWN0IHRyaWVzIjoKKworCQlfbmNfYWRkX3RvX3RyeQorCQlfbmNfZXhwYW5kX3RyeQorCQlfbmNfcmVtb3ZlX2tleQorCQlfbmNfcmVtb3ZlX3N0cmluZworCQlfbmNfdHJhY2VfdHJpZXMKKworICAgIDUuNiAoRGVjZW1iZXIgMTcsIDIwMDYpCisJSW50ZXJmYWNlIGNoYW5nZXM6CisKKwkrIGdlbmVyYXRlIGxpbmthYmxlIHN0dWJzIGZvciBzb21lIG1hY3JvczoKKworCSAgZ2V0YmVneCwgZ2V0YmVneSwgZ2V0Y3VyeCwgZ2V0Y3VyeSwgZ2V0bWF4eCwgZ2V0bWF4eSwgZ2V0cGFyeCwKKwkgIGdldHBhcnksIGdldHBhcnksCisKKwkgIGFuZCAoZm9yIGxpYm5jdXJzZXN3KQorCisJICB3Z2V0Ymtncm5kCisKKwlBZGRlZCBleHRlbnNpb25zOgorCQlub2ZpbHRlcigpCisJCXVzZV9sZWdhY3lfY29kaW5nKCkKKworCUFkZGVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2ZpcnN0X2RiCisJCV9uY19nZXRfc291cmNlCisJCV9uY19oYW5kbGVfc2lnd2luY2gKKwkJX25jX2lzX2Fic19wYXRoCisJCV9uY19pc19kaXJfcGF0aAorCQlfbmNfaXNfZmlsZV9wYXRoCisJCV9uY19rZWVwX3RpY19kaXIKKwkJX25jX2tlZXBfdGljX2RpcgorCQlfbmNfbGFzdF9kYgorCQlfbmNfbmV4dF9kYgorCQlfbmNfcmVhZF90ZXJtdHlwZQorCQlfbmNfdGljX2RpcgorCisJCUFsc28gKGlmIHVzaW5nIHRoZSBoYXNoZWQgZGF0YWJhc2UgY29uZmlndXJhdGlvbik6CisKKwkJX25jX2RiX2Nsb3NlCisJCV9uY19kYl9maXJzdAorCQlfbmNfZGJfZ2V0CisJCV9uY19kYl9oYXZlX2RhdGEKKwkJX25jX2RiX2hhdmVfaW5kZXgKKwkJX25jX2RiX25leHQKKwkJX25jX2RiX29wZW4KKwkJX25jX2RiX3B1dAorCisJCW90aGVyd2lzZQorCisJCV9uY19oYXNoZWRfZGIKKworCVJlbW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlub25lCisKKwlNb2RpZmllZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19hZGRfdG9fdHJ5CisJCV9uY19kb19jb2xvcgorCQlfbmNfZXhwYW5kX3RyeQorCQlfbmNfcmVtb3ZlX2tleQorCQlfbmNfc2V0dXBzY3JlZW4KKworICAgIDUuNSAoT2N0b2JlciAxMCwgMjAwNSkKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgdGVybWluZm8gaW5zdGFsbHMgInh0ZXJtLW5ldyIgYXMgInh0ZXJtIiBlbnRyeSByYXRoZXIgdGhhbgorCSAgInh0ZXJtLW9sZCIgKGFrYSB4dGVybS1yNikuCisKKwkrIHRlcm1pbmZvIGRhdGEgaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSB0aWMgLXggb3B0aW9uIChmZXcgc3lzdGVtcworCSAgc3RpbGwgdXNlIG5jdXJzZXMgNC4yKS4KKworCSsgbW9kaWZ5IEMrKyBiaW5kaW5nIHRvIHdvcmsgd2l0aCBuZXdlciBDKysgY29tcGlsZXJzIGJ5IHByb3ZpZGluZworCSAgaW5pdGlhbGl6ZXJzIGFuZCB1c2luZyBtb2Rlcm4gY2FzdHMuICBPbGQtc3R5bGUgaGVhZGVyIG5hbWVzIGFyZQorCSAgc3RpbGwgdXNlZCBpbiB0aGlzIHJlbGVhc2UgdG8gYWxsb3cgY29tcGlsaW5nIHdpdGggbm90LXNvLW9sZAorCSAgY29tcGlsZXJzLgorCisJKyBmb3JtIGFuZCBtZW51IGxpYnJhcmllcyBub3cgd29yayB3aXRoIHdpZGUtY2hhcmFjdGVyIGRhdGEuIAorCSAgQXBwbGljYXRpb25zIHdoaWNoIGJ5cGFzc2VkIHRoZSBmb3JtIGxpYnJhcnkgYW5kIG1hbmlwdWxhdGVkIHRoZQorCSAgRklFTEQuYnVmIGRhdGEgZGlyZWN0bHkgd2lsbCBub3Qgd29yayBwcm9wZXJseSB3aXRoIGxpYmZvcm13LCBzaW5jZQorCSAgdGhhdCBubyBsb25nZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGNoYXIuICBUaGUgc2V0X2ZpZWxkX2J1ZmZlcigpCisJICBhbmQgZmllbGRfYnVmZmVyKCkgZnVuY3Rpb25zIHRyYW5zbGF0ZSB0by9mcm9tIHRoZSBhY3R1YWwgZmllbGQKKwkgIGRhdGEuCisKKwkrIGNoYW5nZSBTUC0+X2N1cnJlbnRfYXR0ciB0byBhIHBvaW50ZXIsIGFkanVzdCBpZmRlZidzIHRvIGVuc3VyZSB0aGF0CisJICBsaWJ0aW5mby5zbyBhbmQgbGlidGluZm93LnNvIGhhdmUgdGhlIHNhbWUgQUJJLiAgVGhlIHJlYXNvbiBmb3IgdGhpcworCSAgaXMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIHVwcGVyLWxldmVsCisJICBuY3Vyc2VzIGxpYnJhcnkgaGFzIGEgZGlmZmVyZW50IHNpemUgaW4gZWFjaCBtb2RlbC4KKworCSsgd2lubnN0cigpIG5vdyByZXR1cm5zIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3RyaW5ncyBmb3IgdGhlCisJICB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLgorCisJKyBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSBubyBsb25nZXIgcmVxdWlyZXMgdGhhdCB1c2VfZGVmYXVsdF9jb2xvcnMoKQorCSAgYmUgY2FsbGVkIGZpcnN0LgorCisJKyBkYXRhX2FoZWFkKCkgbm93IHdvcmtzIHdpdGggd2lkZS1jaGFyYWN0ZXJzLgorCisJKyBzbGtfc2V0KCkgYW5kIHNsa193c2V0KCkgbm93IGFjY2VwdCBhbmQgc3RvcmUgbXVsdGlieXRlIG9yCisJICBtdWx0aWNvbHVtbiBjaGFyYWN0ZXJzLgorCisJKyBzdGFydF9jb2xvcigpIG5vdyByZXR1cm5zIE9LIGlmIGNvbG9ycyBoYXZlIGFscmVhZHkgYmVlbiBzdGFydGVkLgorCSAgc3RhcnRfY29sb3IoKSBhbHNvIHJldHVybnMgRVJSIGlmIGl0IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuCisKKwkrIHBhaXJfY29udGVudCgpIG5vdyByZXR1cm5zIC0xIGZvciBjb25zaXN0ZW5jeSB3aXRoIGluaXRfcGFpcigpIGlmIGl0CisJICBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdC1jb2xvci4KKworCSsgdW5jdHJsKCkgbm93IHJldHVybnMgbnVsbCBpZiBpdHMgcGFyYW1ldGVyIGRvZXMgbm90IGNvcnJlc3BvbmQKKwkgIHRvIGFuIHVuc2lnbmVkIGNoYXIuCisKKwlBZGRlZCBleHRlbnNpb25zOgorCQlFeHBlcmltZW50YWwgbW91c2UgdmVyc2lvbiAyIHN1cHBvcnRzIHdoZWVsIG1pY2Ugd2l0aCBidXR0b25zCisJCTQgYW5kIDUuICBUaGlzIHJlcXVpcmVzIEFCSSA2IGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGVuY29kaW5nCisJCW9mIG1vdXNlIGV2ZW50cy4KKworCQlFeHBlcmltZW50YWwgZXh0ZW5kZWQgY29sb3JzIGFsbG93cyBlbmNvZGluZyBvZiAyNTYgZm9yZWdyb3VuZAorCQlhbmQgYmFja2dyb3VuZCBjb2xvcnMsIGUuZy4sIHdpdGggdGhlIHh0ZXJtLTI1NmNvbG9yIG9yCisJCXh0ZXJtLTg4Y29sb3IgdGVybWluZm8gZW50cmllcy4gIFRoaXMgcmVxdWlyZXMgQUJJIDYgYmVjYXVzZQorCQlpdCBjaGFuZ2VzIHRoZSBzaXplIG9mIGNjaGFyX3QuCisKKwlBZGRlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19jaGVja190ZXJtdHlwZTIKKwkJX25jX3Jlc29sdmVfdXNlczIKKwkJX25jX3JldHJhY2VfY3B0cgorCQlfbmNfcmV0cmFjZV9jdm9pZF9wdHIKKwkJX25jX3JldHJhY2Vfdm9pZF9wdHIKKwkJX25jX3NldHVwX3Rlcm0KKworCVJlbW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlub25lCisKKwlNb2RpZmllZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19pbnNlcnRfY2gKKwkJX25jX3NhdmVfc3RyCisJCV9uY190cmFuc19zdHJpbmcKKworICAgIDUuNCAoRmVicnVhcnkgOCwgMjAwNCkKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgYWRkIHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIGZvciBYL09wZW4gY3Vyc2VzIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQuCisJICBUaGVzZSBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIGxpYnJhcnkgaXMgY29uZmlndXJlZCB1c2luZyB0aGUKKwkgIC0tZW5hYmxlLXdpZGVjIG9wdGlvbi4KKwkJcGVjaG9fd2NoYXIoKQorCQlzbGtfd3NldCgpCisKKwkrIHdyaXRlIGdldHl4KCkgYW5kIHJlbGF0ZWQgMi1yZXR1cm4gbWFjcm9zIGluIHRlcm1zIG9mIGdldGN1cnkoKSwKKwkgIGdldGN1cngoKSwgZXRjLgorCisJKyBzaW1wbGlmeSBpZmRlZiBmb3IgYm9vbCBkZWNsYXJhdGlvbiBpbiBjdXJzZXMuaAorCisJKyBtb2RpZnkgaWZkZWYncyBpbiBjdXJzZXMuaCB0aGF0IGRpc2FibGVkIHVzZSBvZiBfX2F0dHJpYnV0ZV9fKCkgZm9yCisJICBnKyssIHNpbmNlIHJlY2VudCB2ZXJzaW9ucyBpbXBsZW1lbnQgdGhlIGNhc2VzIHdoaWNoIG5jdXJzZXMgdXNlcy4KKworCSsgY2hhbmdlIHNvbWUgaW50ZXJmYWNlcyB0byB1c2UgY29uc3Q6CisJCWRlZmluZV9rZXkoKQorCQltdnByaW50dygpCisJCW12d3ByaW50dygpCisJCXByaW50dygpCisJCXZ3X3ByaW50dygpCisJCXdpbnNuc3RyKCkKKwkJd3ByaW50dygpCisKKwlBZGRlZCBleHRlbnNpb25zOgorCQlrZXlfZGVmaW5lZCgpCisKKwlBZGRlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19nZXRfbG9jYWxlKCkKKwkJX25jX2luc2VydF9jaCgpCisJCV9uY19pc19jaGFyYWJsZSgpCXdpZGUKKwkJX25jX2xvY2FsZV9icmVha3NfYWNzKCkKKwkJX25jX3BhdGhsYXN0KCkKKwkJX25jX3RvX2NoYXIoKQkJd2lkZQorCQlfbmNfdG9fd2lkZWNoYXIoKQl3aWRlCisJCV9uY190cGFybV9hbmFseXplKCkKKwkJX25jX3RyYWNlX2J1ZmNhdCgpCWRlYnVnCisJCV9uY191bmljb2RlX2xvY2FsZSgpCisKKwlSZW1vdmVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX291dHN0cigpCisJCV9uY19zaWdhY3Rpb24oKQorCisJTW9kaWZpZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlfbmNfcmVtb3ZlX3N0cmluZygpCisJCV9uY19yZXRyYWNlX2NodHlwZSgpCisKKyAgICA1LjMgKE9jdG9iZXIgMTIsIDIwMDIpCisJSW50ZXJmYWNlIGNoYW5nZXM6CisKKwkrIGNoYW5nZSB0eXBlIGZvciBib29sIHVzZWQgaW4gaGVhZGVycyB0byBOQ1VSU0VTX0JPT0wsIHdoaWNoIHVzdWFsbHkKKwkgIGlzIHRoZSBzYW1lIGFzIHRoZSBjb21waWxlcidzIGRlZmluaXRpb24gZm9yICdib29sJy4KKworCSsgYWRkIGFsbCBidXQgdHdvIGZ1bmN0aW9ucyBmb3IgWC9PcGVuIGN1cnNlcyB3aWRlLWNoYXJhY3RlciBzdXBwb3J0LgorCSAgVGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBsaWJyYXJ5IGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlCisJICAtLWVuYWJsZS13aWRlYyBvcHRpb24uICBNaXNzaW5nIGZ1bmN0aW9ucyBhcmUKKwkJcGVjaG9fd2NoYXIoKQorCQlzbGtfd3NldCgpCisKKwkrIGFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAkTkNVUlNFU19BU1NVTUVEX0NPTE9SUyB0byBtb2RpZnkgdGhlCisJICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSBleHRlbnNpb24uCisKKwlBZGRlZCBleHRlbnNpb25zOgorCQlpc190ZXJtX3Jlc2l6ZWQoKQorCQlyZXNpemVfdGVybSgpCisKKwlBZGRlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19hbHRjaGFyc2V0X25hbWUoKQlkZWJ1ZworCQlfbmNfcmVzZXRfY29sb3JzKCkKKwkJX25jX3JldHJhY2VfYm9vbCgpCWRlYnVnCisJCV9uY19yZXRyYWNlX3Vuc2lnbmVkKCkJZGVidWcKKwkJX25jX3Jvb3RuYW1lKCkKKwkJX25jX3RyYWNlX3R0eW1vZGUoKQlkZWJ1ZworCQlfbmNfdmFyYXJncygpCQlkZWJ1ZworCQlfbmNfdmlzYnVmbigpCQlkZWJ1ZworCQlfbmNfd2dldGNoKCkKKworCVJlbW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlfbmNfYmFja2dyb3VuZCgpCisKKwlNb2RpZmllZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19mcmVlYWxsKCkJCWRlYnVnCisKKyAgICA1LjIgKE9jdG9iZXIgMjEsIDIwMDApCisJSW50ZXJmYWNlIGNoYW5nZXM6CisKKwkrIHJldmVydCB0ZXJtY2FwIG9zcGVlZCB2YXJpYWJsZSB0byAnc2hvcnQnIChzZWUgZGlzY3Vzc2lvbiBvZiB0aGUKKwkgIC0td2l0aC1vc3BlZWQgY29uZmlndXJlIG9wdGlvbikuCisKKyAgICA1LjEgKEp1bHkgOCwgMjAwMCkKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgbWFkZSB0aGUgZXh0ZW5kZWQgdGVybWluYWwgY2FwYWJpbGl0aWVzCisJICAoY29uZmlndXJlIC0tZW5hYmxlLXRjYXAtbmFtZXMpIGEgc3RhbmRhcmQgZmVhdHVyZS4gIFRoaXMgc2hvdWxkCisJICBiZSB0cmFuc3BhcmVudCB0byBhcHBsaWNhdGlvbnMgdGhhdCBkbyBub3QgcmVxdWlyZSBpdC4KKworCSsgcmVtb3ZlZCB0aGUgdHJhY2UoKSBmdW5jdGlvbiBhbmQgcmVsYXRlZCB0cmFjZSBzdXBwb3J0IGZyb20gdGhlCisJICBwcm9kdWN0aW9uIGxpYnJhcnkuCisKKwkrIG1vZGlmaWVkIGN1cnNlcy5oLmluLCB1bmRlZidpbmcgc29tZSBzeW1ib2xzIHRvIGF2b2lkIGNvbmZsaWN0CisJICB3aXRoIEMrKyBTVEwuCisKKwlBZGRlZCBleHRlbnNpb25zOiAgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkuCisKKyAgICA1LjAgKE9jdG9iZXIgMjMsIDE5OTkpCisJSW50ZXJmYWNlIGNoYW5nZXM6CisKKwkrIGltcGxlbWVudGVkIHRoZSB3Y29sb3Jfc2V0KCkgYW5kIHNsa19jb2xvcigpIGZ1bmN0aW9ucy4KKworCSsgbW92ZSBtYWNybyB3aW5jaCB0byBhIGZ1bmN0aW9uLCB0byBoaWRlIGRldGFpbHMgb2Ygc3RydWN0IGxkYXQKKworCSsgY29ycmVjdGVkIHByb3RvdHlwZXMgZm9yIHNsa18qIGZ1bmN0aW9ucywgdXNpbmcgY2h0eXBlIHJhdGhlciB0aGFuCisJICBhdHRyX3QuCisKKwkrIHRoZSBzbGtfYXR0cl97c2V0LG9mZixvbn0gZnVuY3Rpb25zIG5lZWQgYW4gYWRkaXRpb25hbCB2b2lkKgorCSAgcGFyYW1ldGVyIGFjY29yZGluZyB0byBYU0kuCisKKwkrIG1vZGlmaWVkIHNldmVyYWwgcHJvdG90eXBlcyB0byBjb3JyZXNwb25kIHdpdGggMTk5NyB2ZXJzaW9uIG9mIFgvT3BlbgorCSAgQ3Vyc2VzOiAgW3ddYXR0cl9nZXQoKSwgW3ddYXR0cl9zZXQoKSwgYm9yZGVyX3NldCgpIGhhdmUgZGlmZmVyZW50CisJICBwYXJhbWV0ZXJzLiAgU29tZSBmdW5jdGlvbnMgd2VyZSByZW5hbWVkIG9yIG1pc3NwZWxsZWQ6CisJICBlcmFzZV93Y2hhcigpLCBpbl93Y2hudHIoKSwgbXZpbl93Y2hudHIoKS4gIFNvbWUgZGV2ZWxvcGVycyBoYXZlIHVzZWQKKwkgIGF0dHJfZ2V0KCkuCisKKwlBZGRlZCBleHRlbnNpb25zOiAga2V5Ym91bmQoKSwgY3Vyc2VzX3ZlcnNpb24oKS4KKworCVRlcm1pbmZvIGRhdGFiYXNlIGNoYW5nZXM6CisKKwkrIGNoYW5nZSB0cmFuc2xhdGlvbiBmb3IgdGVybWNhcCAncnMnIHRvIHRlcm1pbmZvICdyczInLCB3aGljaCBpcworCSAgdGhlIGRvY3VtZW50ZWQgZXF1aXZhbGVudCwgcmF0aGVyIHRoYW4gJ3JzMScuCisKKwlUaGUgcHJvYmxlbXMgYXJlIHN1YnRsZXIgaW4gcmVjZW50IHJlbGVhc2VzLgorCisJYSkgVGhpcyByZWxlYXNlIHByb3ZpZGVzIHVzZXJzIHdpdGggdGhlIGFiaWxpdHkgdG8gZGVmaW5lIHRoZWlyIG93bgorCSAgIHRlcm1pbmFsIGNhcGFiaWxpdHkgZXh0ZW5zaW9ucywgbGlrZSB0ZXJtY2FwLiAgVG8gYWNjb21wbGlzaCB0aGlzLAorCSAgIHdlIHJlZGVzaWduZWQgdGhlIFRFUk1UWVBFIHN0cnVjdCAoaW4gdGVybS5oKS4gIFZlcnkgZmV3CisJICAgYXBwbGljYXRpb25zIHVzZSB0aGlzIHN0cnVjdC4gIFRoZXkgbXVzdCBiZSByZWNvbXBpbGVkIHRvIHdvcmsgd2l0aAorCSAgIHRoZSA1LjAgbGlicmFyeS4KKworCWEpIElmIHlvdSB1c2UgdGhlIGV4dGVuZGVkIHRlcm1pbmZvIG5hbWVzIChpLmUuLCB5b3UgdXNlZCBjb25maWd1cmUKKwkgICAtLWVuYWJsZS10Y2FwLW5hbWVzKSwgdGhlIHJlc3VsdGluZyB0ZXJtaW5mbyBkYXRhYmFzZSBjYW4gaGF2ZSBzb21lCisJICAgZW50cmllcyB3aGljaCBhcmUgbm90IHJlYWRhYmxlIGJ5IG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMuICBUaGlzCisJICAgaXMgYSBidWcgaW4gdGhlIG9sZGVyIHZlcnNpb25zOgorCisJICAgKyB0aGUgdGVybWluZm8gZGF0YWJhc2Ugc3RvcmVzIGJvb2xlYW5zLCBudW1iZXJzIGFuZCBzdHJpbmdzIGluCisJICAgICBhcnJheXMuICBUaGUgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgYXJyYXlzIGFyZQorCSAgICAgc3BlY2lmaWVkIGJ5IFgvT3Blbi4gIG5jdXJzZXMgcmVjb2duaXplcyBhIG51bWJlciBvZiBvYnNvbGV0ZSBhbmQKKwkgICAgIGV4dGVuZGVkIG5hbWVzIHdoaWNoIGFyZSBzdG9yZWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQKKwkgICAgIGVudHJpZXMuCisKKwkgICArIGEgY2hhbmdlIHRvIHJlYWRfZW50cnkuYyBpbiA5NTEwMDEgbWFkZSB0aGUgbGlicmFyeSBkbyBhbiBsc2VlaygpCisJICAgICBjYWxsIGluY29ycmVjdGx5IHNraXBwaW5nIGRhdGEgd2hpY2ggaXMgYWxyZWFkeSByZWFkIGZyb20gdGhlCisJICAgICBzdHJpbmcgYXJyYXkuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlCisJICAgICB0ZXJtaW5mbyBkYXRhIGZpbGUgaXMgZ3JlYXRlciB0aGFuIFNUUkNPVU5ULCB0aGUgbnVtYmVyIG9mCisJICAgICBzcGVjaWZpZWQgYW5kIG9ic29sZXRlIG9yIGV4dGVuZGVkIHN0cmluZ3MuCisKKwkgICArIGFzIHBhcnQgb2YgYWxpZ25tZW50IHdpdGggdGhlIFgvT3BlbiBmaW5hbCBzcGVjaWZpY2F0aW9uLCBpbiB0aGUKKwkgICAgIDk5MDEwOSBwYXRjaCB3ZSBhZGRlZCB0d28gbmV3IHRlcm1pbmZvIGNhcGFiaWxpdGllczoKKwkgICAgIHNldF9hX2F0dHJpYnV0ZXMgYW5kIHNldF9wZ2xlbl9pbmNoKS4gIFRoaXMgbWFrZXMgdGhlIGluZGljZXMgZm9yCisJICAgICB0aGUgb2Jzb2xldGUgYW5kIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBzaGlmdCB1cCBieSAyLgorCisJICAgKyB0aGUgbGFzdCB0d28gY2FwYWJpbGl0aWVzIGluIHRoZSBvYnNvbGV0ZS9leHRlbmRlZCBsaXN0IGFyZSBtZW11CisJICAgICBhbmQgbWVtbCwgd2hpY2ggYXJlIGZvdW5kIGluIG1vc3QgdGVybWluZm8gZGVzY3JpcHRpb25zIGZvciB4dGVybS4KKworCSAgICAgV2hlbiB0cnlpbmcgdG8gcmVhZCB0aGlzIHRlcm1pbmZvIGVudHJ5LCB0aGUgc3B1cmlvdXMgbHNlZWsoKQorCSAgICAgY2F1c2VzIHRoZSBsaWJyYXJ5IHRvIGF0dGVtcHQgdG8gcmVhZCB0aGUgZmluYWwgcG9ydGlvbiBvZiB0aGUKKwkgICAgIHRlcm1pbmZvIGRhdGEgKHRoZSB0ZXh0IG9mIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzKSA0IGNoYXJhY3RlcnMKKwkgICAgIHBhc3QgaXRzIHN0YXJ0aW5nIHBvaW50LCBhbmQgcmVhZHMgNCBjaGFyYWN0ZXJzIHRvbyBmZXcuICBUaGUKKwkgICAgIGxpYnJhcnkgcmVqZWN0cyB0aGUgZGF0YSwgYW5kIGFwcGxpY2F0aW9ucyBhcmUgdW5hYmxlIHRvCisJICAgICBpbml0aWFsaXplIHRoYXQgdGVybWluYWwgdHlwZS4KKworCSAgIEZJWDogcmVtb3ZlIG1lbXUgYW5kIG1lbWwgZnJvbSB0aGUgeHRlcm0gZGVzY3JpcHRpb24uICBUaGV5IGFyZQorCSAgIG9ic29sZXRlLCBub3QgdXNlZCBieSBuY3Vyc2VzLiAgKEl0IGFwcGVhcnMgdGhhdCB0aGUgZmVhdHVyZSB3YXMKKwkgICBhZGRlZCB0byB4dGVybSB0byBtYWtlIGl0IG1vcmUgbGlrZSBocHRlcm0pLgorCisJICAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHlvdSBkbyBub3QgdXNlIHRoZSAteCBvcHRpb24gb2YgdGljIHRvCisJICAgY3JlYXRlIGEgdGVybWluZm8gZGF0YWJhc2Ugd2l0aCBleHRlbmRlZCBuYW1lcy4gIE5vdGUgdGhhdCB0aGUKKwkgICB1c2VyLWRlZmluZWQgdGVybWluYWwgY2FwYWJpbGl0aWVzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpcyBidWcsCisJICAgc2luY2UgdGhleSBhcmUgc3RvcmVkIGluIGEgdGFibGUgYWZ0ZXIgdGhlIG9sZGVyIHRlcm1pbmZvIGRhdGEgZW5kcywKKwkgICBhbmQgYXJlIGludmlzaWJsZSB0byB0aGUgb2xkZXIgbGlicmFyaWVzLgorCisJYykgU29tZSBkZXZlbG9wZXJzIGRpZCBub3Qgd2lzaCB0byB1c2UgdGhlIEMrKyBiaW5kaW5nLCBhbmQgdXNlZCB0aGUKKwkgICBjb25maWd1cmUgLS13aXRob3V0LWN4eCBvcHRpb24uICBUaGlzIGNhdXNlcyBwcm9ibGVtcyBpZiBzb21lb25lCisJICAgdXNlcyB0aGUgbmN1cnNlcyBsaWJyYXJ5IGZyb20gQysrIGJlY2F1c2UgdGhhdCBjb25maWd1cmUgdGVzdAorCSAgIGRldGVybWluZXMgdGhlIHR5cGUgZm9yIEMrKydzIGJvb2wgYW5kIG1ha2VzIG5jdXJzZXMgbWF0Y2ggaXQsIHNpbmNlCisJICAgYm90aCBDKysgYW5kIGN1cnNlcyBhcmUgc3BlY2lmaWVkIHRvIGRlY2xhcmUgYm9vbC4gIENhbGxpbmcgbmN1cnNlcworCSAgIGZ1bmN0aW9ucyB3aXRoIHRoZSBpbmNvcnJlY3QgdHlwZSBmb3IgYm9vbCB3aWxsIGNhdXNlIGV4ZWN1dGlvbgorCSAgIGVycm9ycy4gIEluIDUuMCB3ZSBhZGRlZCBhIGNvbmZpZ3VyZSBvcHRpb24gIi0td2l0aG91dC1jeHgtYmluZGluZyIKKwkgICB3aGljaCBjb250cm9scyB3aGV0aGVyIHRoZSBiaW5kaW5nIGl0c2VsZiBpcyBidWlsdCBhbmQgaW5zdGFsbGVkLgorCisgICAgNC4yIChNYXJjaCAyLCAxOTk4KQorCUludGVyZmFjZSBjaGFuZ2VzOgorCisJKyBjb3JyZWN0IHByb3RvdHlwZSBmb3IgdGVybWF0dHJzKCkgYXMgcGVyIFhQRzQgdmVyc2lvbiAyLgorCisJKyBhZGQgcGxhY2Vob2xkZXIgcHJvdG90eXBlcyBmb3IgY29sb3Jfc2V0KCksIGVyYXNld2NoYXIoKSwKKwkgIHRlcm1fYXR0cnMoKSwgd2NvbG9yX3NldCgpIGFzIHBlciBYUEc0IHZlcnNpb24gMi4KKworCSsgYWRkIG1hY3JvcyBnZXRjdXJbeHldIGdldGJlZ1t4eV0gZ2V0cGFyW3h5XSwgd2hpY2ggYXJlIGRlZmluZWQgaW4KKwkgIFNWcjQgaGVhZGVycy4KKworCU5ldyBleHRlbnNpb25zOiBrZXlvaygpIGFuZCBkZWZpbmVfa2V5KCkuCisKKwlUZXJtaW5mbyBkYXRhYmFzZSBjaGFuZ2VzOgorCisJKyBjb3JyZWN0ZWQgZGVmaW5pdGlvbiBpbiBjdXJzZXMuaCBmb3IgQUNTX0xBTlRFUk4sIHdoaWNoIHdhcyAnSScKKwkgIHJhdGhlciB0aGFuICdpJy4KKworICAgIDQuMSAoTWF5IDE1LCAxOTk3KQorCisJV2UgYWRkZWQgdGhlc2UgZXh0ZW5zaW9uczogIHVzZV9kZWZhdWx0X2NvbG9ycygpLiAgQWxzbyBhZGRlZAorCWNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtY29uc3QsIHRvIHN1cHBvcnQgdGhlIHVzZSBvZiBjb25zdCB3aGVyZQorCVgvT3BlbiBzaG91bGQgaGF2ZSwgYnV0IGRpZCBub3QsIHNwZWNpZnkuCisKKwlUaGUgdGVybWluZm8gZGF0YWJhc2UgY29udGVudCBjaGFuZ2VkIHRoZSByZXByZXNlbnRhdGlvbiBvZiBjb2xvciBmb3IKKwltb3N0IGVudHJpZXMgdGhhdCB1c2UgQU5TSSBjb2xvcnMuICBTVnI0IGN1cnNlcyB0cmVhdHMgdGhlIHNldGFmL3NldGFiCisJYW5kIHNldGYvc2V0YiBjYXBhYmlsaXRpZXMgZGlmZmVyZW50bHksIGludGVyY2hhbmdpbmcgdGhlIHJlZC9ibHVlCisJY29sb3JzIGluIHRoZSBsYXR0ZXIuCisKKyAgICA0LjAgKERlY2VtYmVyIDI0LCAxOTk2KQorCisJV2UgYnVtcGVkIHRvIHZlcnNpb24gNC4wIGJlY2F1c2UgdGhlIG5ld2x5IHJlbGVhc2VkIGR5bmFtaWMgbG9hZGVyCisJKGxkLnNvLjEuOC41KSBvbiBMaW51eCBkaWQgbm90IGxvYWQgc2hhcmVkIGxpYnJhcmllcyB3aG9zZSBBQkkgYW5kIFJFTAorCXZlcnNpb25zIHdlcmUgaW5jb25zaXN0ZW50LiAgQXQgdGhhdCBwb2ludCwgbmN1cnNlcyBBQkkgd2FzIDMuNCBhbmQgdGhlCisJUkVMIHdhcyAxLjkuOWcsIHNvIHdlIG1hZGUgdGhlbSBjb25zaXN0ZW50LgorCisgICAgMS45LjlnIChEZWNlbWJlciAxLCAxOTk2KQorCisJVGhpcyBmaXhlZCBtb3N0IG9mIHRoZSBwcm9ibGVtcyB3aXRoIDEuOS45ZSwgYW5kIG1hZGUgdGhlc2UgaW50ZXJmYWNlCisJY2hhbmdlczoKKworCSsgcmVtb3ZlIHRwYXJhbSgpLCB3aGljaCBoYWQgYmVlbiBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisJICBzb21lIHRlcm1jYXAuICB0cGFybSgpIGlzIHN0YW5kYXJkLCBhbmQgZG9lcyBub3QgY29uZmxpY3Qgd2l0aAorCSAgYXBwbGljYXRpb24ncyBmYWxsYmFjayBmb3IgbWlzc2luZyB0cGFyYW0oKS4KKworCSsgdHVybiBvZmYgaGFyZHdhcmUgZWNobyBpbiBpbml0c2NyKCkuICBUaGlzIGNoYW5nZXMgdGhlIHNlbnNlIG9mIHRoZQorCSAgZWNobygpIGZ1bmN0aW9uLCB3aGljaCB3YXMgaW5pdGlhbGl6ZWQgdG8gZWNob2luZyByYXRoZXIgdGhhbgorCSAgbm9uZWNob2luZyAodGhlIGxhdHRlciBpcyBzcGVjaWZpZWQpLiAgVGhlcmUgd2VyZSBzZXZlcmFsIG90aGVyCisJICBjb3JyZWN0aW9ucyB0byB0aGUgdGVybWluYWwgSS9PIHNldHRpbmdzIHdoaWNoIGNhdXNlIGFwcGxpY2F0aW9ucyB0bworCSAgYmVoYXZlIGRpZmZlcmVudGx5LgorCisJKyBpbXBsZW1lbnRlZCBzZXZlcmFsIGZ1bmN0aW9ucyAoc3VjaCBhcyBhdHRyX29uKCkpIHdoaWNoIHdlcmUKKwkgIGF2YWlsYWJsZSBvbmx5IGFzIG1hY3Jvcy4KKworCSsgY29ycmVjdGVkIHNldmVyYWwgdHlwb3MgaW4gY3Vyc2VzLmguaW4gKGkuZS4sIHRoZSBtdlhYWFggbWFjcm9zKS4KKworCSsgY29ycmVjdGVkIHByb3RvdHlwZXMgZm9yIGRlbGF5X291dHB1dCgpLAorCSAgaGFzX2NvbG9yLCBpbW1lZG9rKCkgYW5kIGlkY29rKCkuCisKKwkrIGNvcnJlY3RlZCBtaXNzcGVsbGVkIGdldGJrZ2QoKS4gIFNvbWUgYXBwbGljYXRpb25zIHVzZWQgdGhlCisJICBtaXNzcGVsbGVkIG5hbWUuCisKKwkrIGFkZGVkIF95b2Zmc2V0IHRvIFdJTkRPVy4gIFRoZSBzaXplIG9mIFdJTkRPVyBkb2VzIG5vdCBpbXBhY3QKKwkgIGFwcGxpY2F0aW9ucywgc2luY2UgdGhleSB1c2Ugb25seSBwb2ludGVycyB0byBXSU5ET1cgc3RydWN0cy4KKworCVRoZXNlIGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZToKKworCSsgcmVtb3ZlZCBib29sZWFuICdnZXRtJyB3aGljaCB3YXMgYXZhaWxhYmxlIGFzIGFuIGV4dGVuZGVkIG5hbWUuCisKKwlXZSBhZGRlZCB0aGVzZSBleHRlbnNpb25zOiB3cmVzaXplKCksIHJlc2l6ZXRlcm0oKSwgaGFzX2tleSgpIGFuZAorCW1jcHJpbnQoKS4KKworICAgIDEuOS45ZSAoTWFyY2ggMjQsIDE5OTYpCisKKwlub3QgcmVjb21tZW5kZWQgKGEgbGFzdC1taW51dGUvdW50ZXN0ZWQgY2hhbmdlIGxlZnQgdGhlIGZvcm1zIGFuZAorCW1lbnVzIGxpYnJhcmllcyB1bnVzYWJsZSBzaW5jZSB0aGV5IGRvIG5vdCByZXBhaW50IHRoZSBzY3JlZW4pLgorCUZvcmVncm91bmQvYmFja2dyb3VuZCBjb2xvcnMgYXJlIGNvbWJpbmVkIGluY29ycmVjdGx5LCB3b3JraW5nIHByb3Blcmx5CisJb25seSBvbiBhIGJsYWNrIGJhY2tncm91bmQuICBXaGVuIHRoaXMgd2FzIHJlbGVhc2VkLCB0aGUgWC9PcGVuCisJc3BlY2lmaWNhdGlvbiB3YXMgYXZhaWxhYmxlIG9ubHkgaW4gZHJhZnQgZm9ybS4KKworCVNvbWUgYXBwbGljYXRpb25zIChzdWNoIGFzIGx4ZGlhbG9nKSB3ZXJlICJmaXhlZCIgdG8gd29yayB3aXRoIHRoZQorCWluY29ycmVjdCBjb2xvciBzY2hlbWUuCisKKworSUYgWU9VIEFSRSBBIFNZU1RFTSBJTlRFR1JBVE9SOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBDb25maWd1cmF0aW9uIGFuZCBJbnN0YWxsYXRpb246CisKKyAgICAJT24gcGxhdGZvcm1zIHdoZXJlIG5jdXJzZXMgaXMgYXNzdW1lZCB0byBiZSBpbnN0YWxsZWQgaW4gL3Vzci9saWIsCisJdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNlcyAiL3VzciIgYXMgYSBkZWZhdWx0OgorCisJCUxpbnV4LCBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsIEN5Z3dpbgorCisJRm9yIG90aGVyIHBsYXRmb3JtcywgdGhlIGRlZmF1bHQgaXMgIi91c3IvbG9jYWwiLiAgU2VlIHRoZSBkaXNjdXNzaW9uCisJb2YgdGhlICItLWRpc2FibGUtb3ZlcndyaXRlIiBvcHRpb24uCisKKwlUaGUgbG9jYXRpb24gb2YgdGhlIHRlcm1pbmZvIGlzIHNldCBpbmRpcmVjdGx5IGJ5IHRoZSAiLS1kYXRhZGlyIgorCWNvbmZpZ3VyZSBvcHRpb24sIGUuZy4sIC91c3Ivc2hhcmUvdGVybWluZm8sIGdpdmVuIGEgZGF0YWRpciBvZgorCS91c3Ivc2hhcmUuICBZb3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyBpZiB5b3UgYXJlIGluc3RhbGxpbmcKKwluY3Vyc2VzIGxpYnJhcmllcyBpbiBub25zdGFuZGFyZCBsb2NhdGlvbnMsIGJ1dCB3aXNoIHRvIHNoYXJlIHRoZQorCXRlcm1pbmZvIGRhdGFiYXNlLgorCisJTm9ybWFsbHkgdGhlIG5jdXJzZXMgbGlicmFyeSBpcyBjb25maWd1cmVkIGluIGEgcHVyZS10ZXJtaW5mbyBtb2RlOworCXRoYXQgaXMsIHdpdGggdGhlIC0tZGlzYWJsZS10ZXJtY2FwIG9wdGlvbi4gIFRoaXMgbWFrZXMgdGhlIG5jdXJzZXMKKwlsaWJyYXJ5IHNtYWxsZXIgYW5kIGZhc3Rlci4gIFRoZSBuY3Vyc2VzIGxpYnJhcnkgaW5jbHVkZXMgYSB0ZXJtY2FwCisJZW11bGF0aW9uIHRoYXQgcXVlcmllcyB0aGUgdGVybWluZm8gZGF0YWJhc2UsIHNvIGV2ZW4gYXBwbGljYXRpb25zIHRoYXQKKwl1c2UgcmF3IHRlcm1jYXAgdG8gcXVlcnkgdGVybWluYWwgY2hhcmFjdGVyaXN0aWNzIHdpbGwgd2luIChwcm92aWRpbmcKKwl5b3UgcmVjb21waWxlIGFuZCByZWxpbmsgdGhlbSEpLgorCisJSWYgeW91IG11c3QgY29uZmlndXJlIHdpdGggdGVybWNhcCBmYWxsYmFjayBlbmFibGVkLCB5b3UgbWF5IGFsc28gd2lzaAorCXRvIHVzZSB0aGUgLS1lbmFibGUtZ2V0Y2FwIG9wdGlvbi4gIFRoaXMgc3BlZWRzIHVwIHRlcm1jYXAtYmFzZWQKKwlzdGFydHVwcywgYXQgdGhlIGV4cGVuc2Ugb2Ygbm90IGFsbG93aW5nIHBlcnNvbmFsIHRlcm1jYXAgZW50cmllcyB0bworCXJlZmVyZW5jZSB0aGUgdGVybWluZm8gdHJlZS4gIFNlZSBjb21tZW50cyBpbgorCW5jdXJzZXMvdGluZm8vcmVhZF90ZXJtY2FwLmMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworCU5vdGUgdGhhdCBpZiB5b3UgaGF2ZSAkVEVSTUNBUCBzZXQsIG5jdXJzZXMgd2lsbCB1c2UgdGhhdCB2YWx1ZQorCXRvIGxvY2F0ZSB0ZXJtY2FwIGRhdGEuICBJbiBwYXJ0aWN1bGFyLCBydW5uaW5nIGZyb20geHRlcm0gd2lsbAorCXNldCAkVEVSTUNBUCB0byB0aGUgY29udGVudHMgb2YgdGhlIHh0ZXJtJ3MgdGVybWNhcCBlbnRyeS4KKwlJZiBuY3Vyc2VzIHNlZXMgdGhhdCwgaXQgd2lsbCBub3QgZXhhbWluZSAvZXRjL3Rlcm1jYXAuCisKKyAgICBLZXlib2FyZCBNYXBwaW5nOgorCisJVGhlIHRlcm1pbmZvIGZpbGUgYXNzdW1lcyB0aGF0IFNoaWZ0LVRhYiBnZW5lcmF0ZXMgXEVbWiAodGhlIEVDTUEtNDgKKwlyZXZlcnNlLXRhYnVsYXRpb24gc2VxdWVuY2UpIHJhdGhlciB0aGFuIF5JLiAgSGVyZSBhcmUgdGhlIGxvYWRrZXlzIC1kCisJbWFwcGluZ3MgdGhhdCB3aWxsIHNldCB0aGlzIHVwOgorCisJCWtleWNvZGUJIDE1ID0gVGFiCSAgICAgIFRhYgorCQkJYWx0ICAgICBrZXljb2RlICAxNSA9IE1ldGFfVGFiCisJCQlzaGlmdAlrZXljb2RlICAxNSA9IEYyNgorCQlzdHJpbmcgRjI2ID0iXDAzM1taIgorCisgICAgTmFtaW5nIHRoZSBDb25zb2xlIFRlcm1pbmFsCisKKwlJbiB2YXJpb3VzIHN5c3RlbXMgdGhlcmUgaGFzIGJlZW4gYSBwcmFjdGljZSBvZiBkZXNpZ25hdGluZyB0aGUgc3lzdGVtCisJY29uc29sZSBkcml2ZXIgdHlwZSBhcyBgY29uc29sZScuICBQbGVhc2UgZG8gbm90IGRvIHRoaXMhICBJdAorCWNvbXBsaWNhdGVzIHBlb3BsZXMnIGxpdmVzLCBiZWNhdXNlIGl0IGNhbiBtZWFuIHRoYXQgc2V2ZXJhbCBkaWZmZXJlbnQKKwl0ZXJtaW5mbyBlbnRyaWVzIGZyb20gZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zIGFsbCBsb2dpY2FsbHkgd2FudCB0bworCWJlIGNhbGxlZCBgY29uc29sZScuCisKKwlQbGVhc2UgcGljayBhIG5hbWUgdW5pcXVlIHRvIHlvdXIgY29uc29sZSBkcml2ZXIgYW5kIHNldCB0aGF0IHVwCisJaW4gdGhlIC9ldGMvaW5pdHRhYiB0YWJsZSBvciBsb2NhbCBlcXVpdmFsZW50LiAgU2VuZCB0aGUgZW50cnkgdG8gdGhlCisJdGVybWluZm8gbWFpbnRhaW5lciAobGlzdGVkIGluIHRoZSBtaXNjL3Rlcm1pbmZvIGZpbGUpIHRvIGJlIGluY2x1ZGVkCisJaW4gdGhlIHRlcm1pbmZvIGZpbGUsIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBTZWUgdGhlCisJdGVybSg3KSBtYW51YWwgcGFnZSBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIG9uCisJY29udmVudGlvbnMgZm9yIGNob29zaW5nIHR5cGUgbmFtZXMuCisKKwlIZXJlIGFyZSBzb21lIHJlY29tbWVuZGVkIHByaW1hcnkgY29uc29sZSBuYW1lczoKKworCQlsaW51eAktLSBMaW51eCBjb25zb2xlIGRyaXZlcgorCQlmcmVlYnNkCS0tIEZyZWVCU0QKKwkJbmV0YnNkCS0tIE5ldEJTRAorCQlic2RvcwktLSBCU0QvT1MKKworCUlmIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGludGVncmF0aW5nIG5jdXJzZXMgZm9yIG9uZSBvZiB0aGVzZQorCWRpc3RyaWJ1dGlvbiwgcGxlYXNlIGVpdGhlciB1c2UgdGhlIHJlY29tbWVuZGVkIG5hbWUgb3IgZ2V0IGJhY2sKKwl0byB1cyBleHBsYWluaW5nIHdoeSB5b3UgZG9uJ3Qgd2FudCB0bywgc28gd2UgY2FuIHdvcmsgb3V0IG5vbWVuY2xhdHVyZQorCXRoYXQgd2lsbCBtYWtlIHVzZXJzJyBsaXZlcyBlYXNpZXIgcmF0aGVyIHRoYW4gaGFyZGVyLgorCisKK1JFQ0VOVCBYVEVSTSBWRVJTSU9OUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIHRlcm1pbmZvIGRhdGFiYXNlIGZpbGUgaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBhc3N1bWVzIHlvdQorCWFyZSBydW5uaW5nIGEgbW9kZXJuIHh0ZXJtIGJhc2VkIG9uIFhGcmVlODYgKGkuZS4sIHh0ZXJtLW5ldykuICBUaGUKKwllYXJsaWVyIFgxMVI2IGVudHJ5ICh4dGVybS1yNikgYW5kIFgxMVI1IGVudHJ5ICh4dGVybS1yNSkgaXMgcHJvdmlkZWQKKwlhcyB3ZWxsLiAgU2VlIHRoZSAtLXdpdGhvdXQteHRlcm0tbmV3IGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9uIGlmIHlvdQorCWFyZSB1bmFibGUgdG8gdXBkYXRlIHlvdXIgc3lzdGVtLgorCisKK0NPTkZJR1VSSU5HIEZBTExCQUNLIEVOVFJJRVM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlJbiBvcmRlciB0byBzdXBwb3J0IG9wZXJhdGlvbiBvZiBuY3Vyc2VzIHByb2dyYW1zIGJlZm9yZSB0aGUgdGVybWluZm8KKwl0cmVlIGlzIGFjY2Vzc2libGUgKHRoYXQgaXMsIGluIHNpbmdsZS11c2VyIG1vZGUgb3IgYXQgT1MgaW5zdGFsbGF0aW9uCisJdGltZSkgdGhlIG5jdXJzZXMgbGlicmFyeSBjYW4gYmUgY29tcGlsZWQgdG8gaW5jbHVkZSBhbiBhcnJheSBvZgorCXByZS1mZXRjaGVkIGZhbGxiYWNrIGVudHJpZXMuICBUaGlzIG11c3QgYmUgZG9uZSBvbiBhIG1hY2hpbmUgd2hpY2gKKwloYXMgbmN1cnNlcycgaW5mb2NtcCBhbmQgdGVybWluZm8gZGF0YWJhc2UgaW5zdGFsbGVkLgorCisJVGhlc2UgZW50cmllcyBhcmUgY2hlY2tlZCBieSBzZXR1cHRlcm0oKSBvbmx5IHdoZW4gdGhlIGNvbnZlbnRpb25hbAorCWZldGNoZXMgZnJvbSB0aGUgdGVybWluZm8gdHJlZSBhbmQgdGhlIHRlcm1jYXAgZmFsbGJhY2sgKGlmIGNvbmZpZ3VyZWQpCisJaGF2ZSBiZWVuIHRyaWVkIGFuZCBmYWlsZWQuICBUaHVzLCB0aGUgcHJlc2VuY2Ugb2YgYSBmYWxsYmFjayB3aWxsIG5vdAorCXNoYWRvdyBtb2RpZmljYXRpb25zIHRvIHRoZSBvbi1kaXNrIGVudHJ5IGZvciB0aGUgc2FtZSB0eXBlLCB3aGVuIHRoYXQKKwllbnRyeSBpcyBhY2Nlc3NpYmxlLgorCisJQnkgZGVmYXVsdCwgdGhlcmUgYXJlIG5vIGVudHJpZXMgb24gdGhlIGZhbGxiYWNrIGxpc3QuICBBZnRlciB5b3UgaGF2ZQorCWJ1aWx0IHRoZSBuY3Vyc2VzIHN1aXRlIGZvciB0aGUgZmlyc3QgdGltZSwgeW91IGNhbiBjaGFuZ2UgdGhlIGxpc3QKKwkodGhlIHByb2Nlc3MgbmVlZHMgaW5mb2NtcCgxKSkuICBUbyBkbyBzbywgdXNlIHRoZSBzY3JpcHQKKwluY3Vyc2VzL3RpbmZvL01LZmFsbGJhY2suc2guICBBIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9uCisJLS13aXRoLWZhbGxiYWNrcyBkb2VzIHRoaXMgKGl0IGFjY2VwdHMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUKKwluYW1lcyB5b3Ugd2lzaCwgYW5kIGRvZXMgbm90IHJlcXVpcmUgYSByZWJ1aWxkKS4KKworCUlmIHlvdSB3YW50ZWQgKHNheSkgdG8gaGF2ZSBsaW51eCwgdnQxMDAsIGFuZCB4dGVybSBmYWxsYmFja3MsIHlvdQorCXdvdWxkIHVzZSB0aGUgY29tbWFuZHMKKworCQljZCBuY3Vyc2VzOworCQl0aW5mby9NS2ZhbGxiYWNrLnNoIGxpbnV4IHZ0MTAwIHh0ZXJtID5mYWxsYmFjay5jCisKKwlUaGVuIGp1c3QgcmVidWlsZCBhbmQgcmVpbnN0YWxsIHRoZSBsaWJyYXJ5IGFzIHlvdSB3b3VsZCBub3JtYWxseS4KKwlZb3UgY2FuIHJlc3RvcmUgdGhlIGRlZmF1bHQgZW1wdHkgZmFsbGJhY2sgbGlzdCB3aXRoCisKKwkJdGluZm8vTUtmYWxsYmFjay5zaCA+ZmFsbGJhY2suYworCisJVGhlIG92ZXJoZWFkIGZvciBhbiBlbXB0eSBmYWxsYmFjayBsaXN0IGlzIG9uZSB0cml2aWFsIHN0dWIgZnVuY3Rpb24uCisJQW55IG5vbi1lbXB0eSBmYWxsYmFjayBsaXN0IGlzIGNvbnN0LWVkIGFuZCB0aGVyZWZvcmUgbGl2ZXMgaW4gc2hhcmFibGUKKwl0ZXh0IHNwYWNlLiAgWW91IGNhbiBsb29rIGF0IHRoZSBjb21tZW50IHRyYWlsaW5nIGVhY2ggaW5pdGlhbGl6ZXIgaW4KKwl0aGUgZ2VuZXJhdGVkIG5jdXJzZXMvZmFsbGJhY2suYyBmaWxlIHRvIHNlZSB0aGUgY29yZSBjb3N0IG9mIHRoZQorCWZhbGxiYWNrcy4gIEEgZ29vZCBydWxlIG9mIHRodW1iIGZvciBtb2Rlcm4gdnQxMDAtbGlrZSBlbnRyaWVzIGlzIHRoYXQKKwllYWNoIG9uZSB3aWxsIGNvc3QgYWJvdXQgMi41SyBvZiB0ZXh0IHNwYWNlLgorCisKK0JTRCBDT05WRVJTSU9OIE5PVEVTOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUlmIHlvdSBuZWVkIHRvIHN1cHBvcnQgcmVhbGx5IGFuY2llbnQgQlNEIHByb2dyYW1zLCB5b3UgcHJvYmFibHkKKwl3YW50IHRvIGNvbmZpZ3VyZSB3aXRoIHRoZSAtLWVuYWJsZS1ic2RwYWQgb3B0aW9uLiAgV2hhdCB0aGlzIGRvZXMKKwlpcyBlbmFibGUgY29kZSBpbiB0cHV0cygpIHRoYXQgcmVjb2duaXplcyBhIG51bWVyaWMgcHJlZml4IG9uIGEKKwljYXBhYmlsaXR5IGFzIGEgcmVxdWVzdCBmb3IgdGhhdCBtdWNoIHRyYWlsaW5nIHBhZGRpbmcgaW4gbWlsbGlzZWNvbmRzLgorCVRoZXJlIGFyZSBvbGQgQlNEIHByb2dyYW1zIHRoYXQgZG8gdGhpbmdzIGxpa2UgdHB1dHMoIjUwIikuCisKKwkoSWYgeW91IGFyZSBkaXN0cmlidXRpbmcgbmN1cnNlcyBhcyBhIHN1cHBvcnQtbGlicmFyeSBjb21wb25lbnQgb2YKKwlhbiBhcHBsaWNhdGlvbiB5b3UgcHJvYmFibHkgd2FudCB0byBwdXQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24KKwlpbiB0aGUgcGFja2FnZSBSRUFETUUgZmlsZS4pCisKKwlUaGUgZm9sbG93aW5nIG5vdGUgYXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgbmN1cnNlcyB3aXRoCisJLS1lbmFibGUtdGVybWNhcC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDVVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYXJlIGluc3RhbGxpbmcgdGhpcyBhcHBsaWNhdGlvbiBwcml2YXRlbHkgKGVpdGhlciBiZWNhdXNlIHlvdQoraGF2ZSBubyByb290IGFjY2VzcyBvciB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCBpdCBiZWZvcmUgZG9pbmcgYSByb290CitpbnN0YWxsYXRpb24pLCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgZGV0YWlscyB5b3UgbmVlZCB0byBiZSBhd2FyZSBvZi4KK1RoZXkgaGF2ZSB0byBkbyB3aXRoIHRoZSBuY3Vyc2VzIGxpYnJhcnksIHdoaWNoIHVzZXMgdGVybWluZm8gcmF0aGVyCit0aGFuIHRlcm1jYXAgZm9yIGRlc2NyaWJpbmcgdGVybWluYWwgY2hhcmFjdGVyaXN0aWNzLgorCitUaG91Z2ggdGhlIG5jdXJzZXMgbGlicmFyeSBpcyB0ZXJtaW5mby1iYXNlZCwgaXQgd2lsbCBpbnRlcnByZXQgeW91cgorVEVSTUNBUCB2YXJpYWJsZSAoaWYgcHJlc2VudCksIGFueSBsb2NhbCB0ZXJtY2FwIGZpbGVzIHlvdSByZWZlcmVuY2UKK3Rocm91Z2ggaXQsIGFuZCB0aGUgc3lzdGVtIHRlcm1jYXAgZmlsZS4gIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGF2b2lkCitzbG93aW5nIGRvd24geW91ciBhcHBsaWNhdGlvbiBzdGFydHVwLCBpdCB3aWxsIG9ubHkgZG8gdGhpcyBvbmNlIHBlcgordGVybWluYWwgdHlwZSEKKworVGhlIGZpcnN0IHRpbWUgeW91IGxvYWQgYSBnaXZlbiB0ZXJtaW5hbCB0eXBlIGZyb20geW91ciB0ZXJtY2FwCitkYXRhYmFzZSwgdGhlIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gY29kZSB3aWxsIGF1dG9tYXRpY2FsbHkgd3JpdGUgaXQKK2luIHRlcm1pbmZvIGZvcm1hdCB0byBhIHN1YmRpcmVjdG9yeSB1bmRlciAkSE9NRS8udGVybWluZm8uICBBZnRlcgordGhhdCwgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgd2lsbCBmaW5kIGl0IHRoZXJlIGFuZCBkbyBhIChtdWNoCitmYXN0ZXIpIHRlcm1pbmZvIGZldGNoLgorCitVc3VhbGx5LCBhbGwgdGhpcyBtZWFucyBpcyB0aGF0IHlvdXIgaG9tZSBkaXJlY3Rvcnkgd2lsbCBzaWxlbnRseSBncm93CithbiBpbnZpc2libGUgLnRlcm1pbmZvIHN1YmRpcmVjdG9yeSB3aGljaCB3aWxsIGdldCBmaWxsZWQgaW4gd2l0aAordGVybWluZm8gZGVzY3JpcHRpb25zIG9mIHRlcm1pbmFsIHR5cGVzIGFzIHlvdSBpbnZva2UgdGhlbS4gIElmIGFueW9uZQorZXZlciBpbnN0YWxscyBhIGdsb2JhbCB0ZXJtaW5mbyB0cmVlIG9uIHlvdXIgc3lzdGVtLCB0aGlzIHdpbGwgcXVpZXRseQorc3RvcCBoYXBwZW5pbmcgYW5kIHlvdXIgJEhPTUUvLnRlcm1pbmZvIHdpbGwgYmVjb21lIHJlZHVuZGFudC4KKworVGhlIG9iamVjdGl2ZSBvZiBhbGwgdGhpcyBsb2dpYyBpcyB0byBtYWtlIGNvbnZlcnRpbmcgZnJvbSBCU0QgdGVybWNhcAorYXMgcGFpbmxlc3MgYXMgcG9zc2libGUgd2l0aG91dCBzbG93aW5nIGRvd24geW91ciBhcHBsaWNhdGlvbiAodGVybWNhcAorY29tcGlsYXRpb24gaXMgZXhwZW5zaXZlKS4KKworSWYgeW91IGRvbid0IGhhdmUgYSBURVJNQ0FQIHZhcmlhYmxlIG9yIGN1c3RvbSBwZXJzb25hbCB0ZXJtY2FwIGZpbGUsCit5b3UgY2FuIHNraXAgdGhlIHJlc3Qgb2YgdGhpcyBkaXNzZXJ0YXRpb24uCisKK0lmIHlvdSAqZG8qIGhhdmUgYSBURVJNQ0FQIHZhcmlhYmxlIGFuZC9vciBhIGN1c3RvbSBwZXJzb25hbCB0ZXJtY2FwIGZpbGUKK3RoYXQgZGVmaW5lcyBhIHRlcm1pbmFsIHR5cGUsIHRoYXQgZGVmaW5pdGlvbiB3aWxsIHN0b3AgYmVpbmcgdmlzaWJsZQordG8gdGhpcyBhcHBsaWNhdGlvbiBhZnRlciB0aGUgZmlyc3QgdGltZSB5b3UgcnVuIGl0LCBiZWNhdXNlIGl0IHdpbGwKK2luc3RlYWQgc2VlIHRoZSB0ZXJtaW5mbyBlbnRyeSB0aGF0IGl0IHdyb3RlIHRvICRIT01FL3Rlcm1pbmZvIHRoZQorZmlyc3QgdGltZSBhcm91bmQuCisKK1N1YnNlcXVlbnRseSwgZWRpdGluZyB0aGUgVEVSTUNBUCB2YXJpYWJsZSBvciBwZXJzb25hbCBURVJNQ0FQIGZpbGUKK3dpbGwgaGF2ZSBubyBlZmZlY3QgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHJlbW92ZSB0aGUgdGVybWluZm8gZW50cnkKK3VuZGVyICRIT01FL3Rlcm1pbmZvLiAgSWYgeW91IGRvIHRoYXQsIHRoZSBlbnRyeSB3aWxsIGJlIHJlY29tcGlsZWQKK2Zyb20geW91ciB0ZXJtY2FwIHJlc291cmNlcyB0aGUgbmV4dCB0aW1lIGl0IGlzIGludm9rZWQuCisKK1RvIGF2b2lkIHRoZXNlIGNvbXBsaWNhdGlvbnMsIHVzZSBpbmZvY21wKDEpIGFuZCB0aWMoMSkgdG8gZWRpdCB0aGUKK3Rlcm1pbmZvIGRpcmVjdG9yeSBkaXJlY3RseS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDVVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVU0lORyBOQ1VSU0VTIFdJVEggQUZTOgorCUFGUyB0cmVhdHMgZWFjaCBkaXJlY3RvcnkgYXMgYSBzZXBhcmF0ZSBsb2dpY2FsIGZpbGVzeXN0ZW0sIHlvdQorCWNhbid0IGhhcmQtbGluayBhY3Jvc3MgdGhlbS4gIFRoZSAtLWVuYWJsZS1zeW1saW5rcyBvcHRpb24gY29wZXMKKwl3aXRoIHRoaXMgYnkgbWFraW5nIHRpYyB1c2Ugc3ltYm9saWMgbGlua3MuCisKK1VTSU5HIE5DVVJTRVMgV0lUSCBHUE06CisJTmN1cnNlcyA0LjEgYW5kIHVwIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBHUE0gKEdlbmVyYWwgUHVycG9zZQorCU1vdXNlKSB3aGljaCBpcyB1c2VkIG9uIExpbnV4IGNvbnNvbGUuICBCZSBhd2FyZSB0aGF0IEdQTSBpcyBjb21tb25seQorCWluc3RhbGxlZCBhcyBhIHNoYXJlZCBsaWJyYXJ5IHdoaWNoIGNvbnRhaW5zIGEgd3JhcHBlciBmb3IgdGhlIGN1cnNlcworCXdnZXRjaCgpIGZ1bmN0aW9uIChsaWJjdXJzZXMubykuICBTb21lIGludGVncmF0b3JzIGhhdmUgc2ltcGxpZmllZAorCWxpbmtpbmcgYXBwbGljYXRpb25zIGJ5IGNvbWJpbmluZyBhbGwgb3IgcGFydCBvZiBsaWJjdXJzZXMuc28gaW50byB0aGUKKwlsaWJncG0uc28gZmlsZSwgcHJvZHVjaW5nIHN5bWJvbCBjb25mbGljdHMgd2l0aCBuY3Vyc2VzIChzcGVjaWZpY2FsbHkKKwl0aGUgd2dldGNoIGZ1bmN0aW9uKS4gIFRoaXMgd2FzIG9yaWdpbmFsbHkgdGhlIEJTRCBjdXJzZXMsIGJ1dAorCWdlbmVyYWxseSB3aGF0ZXZlciBjdXJzZXMgbGlicmFyeSBleGlzdHMgb24gdGhlIHN5c3RlbS4KKworCVlvdSBtYXkgYmUgYWJsZSB0byB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnkgbGlua2luZyBhcyBmb2xsb3dzOgorCisJCWNjIC1vIGZvbyBmb28ubyAtbG5jdXJzZXMgLWxncG0gLWxuY3Vyc2VzCisKKwlidXQgdGhlIGxpbmtlciBtYXkgbm90IGNvb3BlcmF0ZSwgcHJvZHVjaW5nIG15c3RlcmlvdXMgZXJyb3JzLgorCVNlZSB0aGUgRkFRLCBhcyB3ZWxsIGFzIHRoZSBkaXNjdXNzaW9uIHVuZGVyIHRoZSAtLXdpdGgtZ3BtIG9wdGlvbjoKKworCWh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL25jdXJzZXMuZmFxLmh0bWwjdXNpbmdfZ3BtX2xpYgorCitCVUlMRElORyBOQ1VSU0VTIFdJVEggQSBDUk9TUy1DT01QSUxFUgorCU5jdXJzZXMgY2FuIGJlIGJ1aWx0IHdpdGggYSBjcm9zcy1jb21waWxlci4gIFNvbWUgcGFydHMgbXVzdCBiZSBidWlsdAorCXdpdGggdGhlIGhvc3QncyBjb21waWxlciBzaW5jZSB0aGV5IGFyZSB1c2VkIGZvciBidWlsZGluZyBwcm9ncmFtcworCShlLmcuLCBuY3Vyc2VzL21ha2VfaGFzaCBhbmQgbmN1cnNlcy9tYWtlX2tleXMpIHRoYXQgZ2VuZXJhdGUgdGFibGVzCisJdGhhdCBhcmUgY29tcGlsZWQgaW50byB0aGUgbmN1cnNlcyBsaWJyYXJ5LiAgVGhlIGVzc2VudGlhbCB0aGluZyB0byBkbworCWlzIHNldCB0aGUgQlVJTERfQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8geW91ciBob3N0J3MgY29tcGlsZXIsIGFuZAorCXJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCBjb25maWd1cmluZyBmb3IgdGhlIGNyb3NzLWNvbXBpbGVyLgorCisJVGhlIGNvbmZpZ3VyZSBvcHRpb25zIC0td2l0aC1idWlsZC1jYywgZXRjLiwgYXJlIHByb3ZpZGVkIHRvIG1ha2UgdGhpcworCXNpbXBsZXIuICBTaW5jZSBtYWtlX2hhc2ggYW5kIG1ha2Vfa2V5cyB1c2Ugb25seSBBTlNJIEMgZmVhdHVyZXMsIGl0CisJaXMgbm9ybWFsbHkgbm90IG5lY2Vzc2FyeSB0byBwcm92aWRlIHRoZSBvdGhlciBvcHRpb25zIHN1Y2ggYXMKKwktLXdpdGgtYnVpbGQtbGlicywgYnV0IHRoZXkgYXJlIHByb3ZpZGVkIGZvciBjb21wbGV0ZW5lc3MuCisKKwlOb3RlIHRoYXQgYWxsIG9mIHRoZSBnZW5lcmF0ZWQgc291cmNlLWZpbGVzIHdoaWNoIGFyZSBwYXJ0IG9mIG5jdXJzZXMKKwl3aWxsIGJlIG1hZGUgaWYgeW91IHVzZQorCisJCW1ha2Ugc291cmNlcworCisJVGhpcyB3b3VsZCBiZSB1c2VmdWwgaW4gcG9ydGluZyB0byBhbiBlbnZpcm9ubWVudCB3aGljaCBoYXMgbGl0dGxlCisJc3VwcG9ydCBmb3IgdGhlIHRvb2xzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNvdXJjZXMsIGUuZy4sIHNlZCwgYXdrIGFuZAorCUJvdXJuZS1zaGVsbC4KKworCVdoZW4gbmN1cnNlcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3Jvc3MtY29tcGlsZWQsIHlvdSBtYXkgd2FudCB0byB1c2UKKwkibWFrZSBpbnN0YWxsIiAod2l0aCBhIHN1aXRhYmxlIHRhcmdldCBkaXJlY3RvcnkpIHRvIGNvbnN0cnVjdCBhbgorCWluc3RhbGwgdHJlZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgKGFzIHdpdGggdGhlIC0td2l0aC1mYWxsYmFja3MKKwlvcHRpb24pLCBuY3Vyc2VzIHVzZXMgdGhlIGRldmVsb3BtZW50IHBsYXRmb3JtJ3MgdGljIHRvIGRvIHRoZQorCSJtYWtlIGluc3RhbGwuZGF0YSIgcG9ydGlvbi4KKworQlVHUzoKKwlTZW5kIGFueSBmZWVkYmFjayB0byB0aGUgbmN1cnNlcyBtYWlsaW5nIGxpc3QgYXQKKwlidWctbmN1cnNlc0BnbnUub3JnLiBUbyBzdWJzY3JpYmUgc2VuZCBtYWlsIHRvCisJYnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnIHdpdGggYm9keSB0aGF0IHJlYWRzOgorCXN1YnNjcmliZSBuY3Vyc2VzIDx5b3VyLWVtYWlsLWFkZHJlc3MtaGVyZT4KKworCVRoZSBIYWNrZXIncyBHdWlkZSBpbiB0aGUgZG9jIGRpcmVjdG9yeSBpbmNsdWRlcyBzb21lIGd1aWRlbGluZXMKKwlvbiBob3cgdG8gcmVwb3J0IGJ1Z3MgaW4gd2F5cyB0aGF0IHdpbGwgZ2V0IHRoZW0gZml4ZWQgbW9zdCBxdWlja2x5LgorCistLSB2aWxlOnR4dG1vZGUKZGlmZiAtLWdpdCBhL01BTklGRVNUIGIvTUFOSUZFU1QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzODcxZgotLS0gL2Rldi9udWxsCisrKyBiL01BTklGRVNUCkBAIC0wLDAgKzEsMTAyOSBAQAorLi9BTk5PVU5DRQorLi9BVVRIT1JTCisuL0FkYTk1L01ha2VmaWxlLmluCisuL0FkYTk1L1JFQURNRQorLi9BZGE5NS9UT0RPCisuL0FkYTk1L2dlbi9NYWtlZmlsZS5pbgorLi9BZGE5NS9nZW4vYWRhY3Vyc2VzLWNvbmZpZy5pbgorLi9BZGE5NS9nZW4vZ2VuLmMKKy4vQWRhOTUvZ2VuL2h0bWwubTQKKy4vQWRhOTUvZ2VuL25vcm1hbC5tNAorLi9BZGE5NS9nZW4vdGFibGUubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZHMubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGIubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzLm00CisuL0FkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4KKy4vQWRhOTUvc2FtcGxlcy9SRUFETUUKKy4vQWRhOTUvc2FtcGxlcy9leHBsYWluLnR4dAorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2Rpc3BsYXkuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2Rpc3BsYXkuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYXR0cl90ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWF0dHJfdGVzdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfdGVzdC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl90ZXN0LmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1mbHVzaGlucF90ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWZsdXNoaW5wX3Rlc3QuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2guYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2hfdGVzdC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldG9wdC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tLmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW92ZXJsYXBfdGVzdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRlc3Rfc2dyX2F0dHJpYnV0ZXMuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXV0aWwuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczIuYWRzCisuL0FkYTk1L3NhbXBsZXMvcmFpbi5hZGIKKy4vQWRhOTUvc2FtcGxlcy9yYWluLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tbW91c2UuYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWFuaWZlc3QuYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtdGV4dF9pb19kZW1vLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUuYWRzCisuL0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkYgorLi9BZGE5NS9zYW1wbGVzL3N0YXR1cy5hZHMKKy4vQWRhOTUvc2FtcGxlcy90b3VyLmFkYgorLi9BZGE5NS9zYW1wbGVzL3RvdXIuYWRzCisuL0FkYTk1L3NyYy9NYWtlZmlsZS5pbgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRiX3AKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS5hZHMKKy4vSU5TVEFMTAorLi9NQU5JRkVTVAorLi9NYWtlZmlsZS5pbgorLi9NYWtlZmlsZS5vczIKKy4vTkVXUworLi9SRUFETUUKKy4vUkVBRE1FLmVteAorLi9UTy1ETworLi9hY2xvY2FsLm00CisuL2Fubm91bmNlLmh0bWwuaW4KKy4vYysrL01ha2VmaWxlLmluCisuL2MrKy9ORVdTCisuL2MrKy9QUk9CTEVNUworLi9jKysvUkVBRE1FLWZpcnN0CisuL2MrKy9jdXJzZXNhcHAuY2MKKy4vYysrL2N1cnNlc2FwcC5oCisuL2MrKy9jdXJzZXNmLmNjCisuL2MrKy9jdXJzZXNmLmgKKy4vYysrL2N1cnNlc20uY2MKKy4vYysrL2N1cnNlc20uaAorLi9jKysvY3Vyc2VzbWFpbi5jYworLi9jKysvY3Vyc2VzcC5jYworLi9jKysvY3Vyc2VzcC5oCisuL2MrKy9jdXJzZXNwYWQuY2MKKy4vYysrL2N1cnNlc3cuY2MKKy4vYysrL2N1cnNlc3cuaAorLi9jKysvY3Vyc3Nsay5jYworLi9jKysvY3Vyc3Nsay5oCisuL2MrKy9kZW1vLmNjCisuL2MrKy9lZGl0X2NmZy5zaAorLi9jKysvZXRpcC5oLmluCisuL2MrKy9oZWFkZXJzCisuL2MrKy9pbnRlcm5hbC5oCisuL2MrKy9tb2R1bGVzCisuL2NvbmZpZy5ndWVzcworLi9jb25maWcuc3ViCisuL2NvbmZpZ3VyZQorLi9jb25maWd1cmUuaW4KKy4vY29udmVydF9jb25maWd1cmUucGwKKy4vZGlzdC5taworLi9kb2MvaGFja2d1aWRlLmRvYworLi9kb2MvaHRtbC9BZGE5NS5odG1sCisuL2RvYy9odG1sL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uaHRtbAorLi9kb2MvaHRtbC9hZGEvZmlsZXMuaHRtCisuL2RvYy9odG1sL2FkYS9maWxlcy9ULmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9BLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvQi5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0MuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9ELmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvRS5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0YuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9HLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvSC5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0kuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9LLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvTC5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL00uaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9OLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvTy5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL1AuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9RLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvUi5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL1MuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9ULmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvVS5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL1YuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9XLmh0bQorLi9kb2MvaHRtbC9hZGEvaW5kZXguaHRtCisuL2RvYy9odG1sL2FkYS9tYWluLmh0bQorLi9kb2MvaHRtbC9hZGEvdGFibGUuaHRtbAorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYW5ub3VuY2UuaHRtbAorLi9kb2MvaHRtbC9oYWNrZ3VpZGUuaHRtbAorLi9kb2MvaHRtbC9pbmRleC5odG1sCisuL2RvYy9odG1sL21hbi9jYXB0b2luZm8uMW0uaHRtbAorLi9kb2MvaHRtbC9tYW4vY2xlYXIuMS5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2FkZF93Y2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfYWRkY2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2FkZHdzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfYmVlcC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2JrZ2QuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19ia2dybmQuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfY2xlYXIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19jb2xvci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19leHRlbmQuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRfd2NoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3dzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRjY2hhci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfZ2V0eXguM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2hzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfaW5jaHN0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd2NoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfaW5zX3dzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNjaC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luc3N0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luc3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfaW53c3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfbGVnYWN5LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfbW91c2UuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19tb3ZlLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfb3BhcXVlLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19wYWQuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19wcmludC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3ByaW50dy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19zY2Fudy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfc2Nyb2xsLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfc2xrLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfdGVybWNhcC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3Rlcm1pbmZvLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfdGhyZWFkcy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfdHJhY2UuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc191dGlsLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2RlZmluZV9rZXkuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2N1cnNvci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2RhdGEuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9kcml2ZXIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkdHlwZS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2hvb2suM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9uZXcuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX29wdHMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fcG9zdC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX3dpbi4zeC5odG1sCisuL2RvYy9odG1sL21hbi9pbmRleC5odG1sCisuL2RvYy9odG1sL21hbi9pbmZvY21wLjFtLmh0bWwKKy4vZG9jL2h0bWwvbWFuL2luZm90b2NhcC4xbS5odG1sCisuL2RvYy9odG1sL21hbi9rZXlfZGVmaW5lZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9rZXlib3VuZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9rZXlvay4zeC5odG1sCisuL2RvYy9odG1sL21hbi9sZWdhY3lfY29kaW5nLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfY3Vyc29yLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfZHJpdmVyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfaG9vay4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X2l0ZW1zLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfbWFyay4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X25ldy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X29wdHMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfcG9zdC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfc3BhY2luZy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV93aW4uM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWl0ZW1fY3VycmVudC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21pdGVtX25ldy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWl0ZW1fdmlzaWJsZS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9uY3Vyc2VzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL3BhbmVsLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL3Jlc2l6ZXRlcm0uM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vdGVybS41Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL3Rlcm0uNy5odG1sCisuL2RvYy9odG1sL21hbi90ZXJtaW5mby41Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL3RpYy4xbS5odG1sCisuL2RvYy9odG1sL21hbi90b2UuMW0uaHRtbAorLi9kb2MvaHRtbC9tYW4vdHB1dC4xLmh0bWwKKy4vZG9jL2h0bWwvbWFuL3RzZXQuMS5odG1sCisuL2RvYy9odG1sL21hbi93cmVzaXplLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbmN1cnNlcy1pbnRyby5odG1sCisuL2RvYy9uY3Vyc2VzLWludHJvLmRvYworLi9mb3JtL01ha2VmaWxlLmluCisuL2Zvcm0vUkVBRC5NRQorLi9mb3JtL2ZfdHJhY2UuYworLi9mb3JtL2ZsZF9hcmcuYworLi9mb3JtL2ZsZF9hdHRyLmMKKy4vZm9ybS9mbGRfY3VycmVudC5jCisuL2Zvcm0vZmxkX2RlZi5jCisuL2Zvcm0vZmxkX2R1cC5jCisuL2Zvcm0vZmxkX2Z0Y2hvaWNlLmMKKy4vZm9ybS9mbGRfZnRsaW5rLmMKKy4vZm9ybS9mbGRfaW5mby5jCisuL2Zvcm0vZmxkX2p1c3QuYworLi9mb3JtL2ZsZF9saW5rLmMKKy4vZm9ybS9mbGRfbWF4LmMKKy4vZm9ybS9mbGRfbW92ZS5jCisuL2Zvcm0vZmxkX25ld2Z0eXAuYworLi9mb3JtL2ZsZF9vcHRzLmMKKy4vZm9ybS9mbGRfcGFkLmMKKy4vZm9ybS9mbGRfcGFnZS5jCisuL2Zvcm0vZmxkX3N0YXQuYworLi9mb3JtL2ZsZF90eXBlLmMKKy4vZm9ybS9mbGRfdXNlci5jCisuL2Zvcm0vZm9ybS5oCisuL2Zvcm0vZm9ybS5wcml2LmgKKy4vZm9ybS9mcm1fY3Vyc29yLmMKKy4vZm9ybS9mcm1fZGF0YS5jCisuL2Zvcm0vZnJtX2RlZi5jCisuL2Zvcm0vZnJtX2RyaXZlci5jCisuL2Zvcm0vZnJtX2hvb2suYworLi9mb3JtL2ZybV9vcHRzLmMKKy4vZm9ybS9mcm1fcGFnZS5jCisuL2Zvcm0vZnJtX3Bvc3QuYworLi9mb3JtL2ZybV9yZXFfbmFtZS5jCisuL2Zvcm0vZnJtX3NjYWxlLmMKKy4vZm9ybS9mcm1fc3ViLmMKKy4vZm9ybS9mcm1fdXNlci5jCisuL2Zvcm0vZnJtX3dpbi5jCisuL2Zvcm0vZnR5X2FsbnVtLmMKKy4vZm9ybS9mdHlfYWxwaGEuYworLi9mb3JtL2Z0eV9lbnVtLmMKKy4vZm9ybS9mdHlfaW50LmMKKy4vZm9ybS9mdHlfaXB2NC5jCisuL2Zvcm0vZnR5X251bS5jCisuL2Zvcm0vZnR5X3JlZ2V4LmMKKy4vZm9ybS9oZWFkZXJzCisuL2Zvcm0vbGxpYi1sZm9ybQorLi9mb3JtL2xsaWItbGZvcm13CisuL2Zvcm0vbW9kdWxlcworLi9pbmNsdWRlL0NhcHMKKy4vaW5jbHVkZS9DYXBzLmFpeDQKKy4vaW5jbHVkZS9DYXBzLmhwdXgxMQorLi9pbmNsdWRlL0NhcHMua2V5cworLi9pbmNsdWRlL0NhcHMub3NmMXI1CisuL2luY2x1ZGUvQ2Fwcy51d2luCisuL2luY2x1ZGUvTUtoYXNoc2l6ZS5zaAorLi9pbmNsdWRlL01La2V5X2RlZnMuc2gKKy4vaW5jbHVkZS9NS25jdXJzZXNfZGVmLnNoCisuL2luY2x1ZGUvTUtwYXJhbWV0cml6ZWQuc2gKKy4vaW5jbHVkZS9NS3Rlcm0uaC5hd2suaW4KKy4vaW5jbHVkZS9NYWtlZmlsZS5pbgorLi9pbmNsdWRlL2NhcGRlZmF1bHRzLmMKKy4vaW5jbHVkZS9jdXJzZXMuaC5pbgorLi9pbmNsdWRlL2N1cnNlcy50YWlsCisuL2luY2x1ZGUvY3Vyc2VzLndpZGUKKy4vaW5jbHVkZS9lZGl0X2NmZy5zaAorLi9pbmNsdWRlL2hhc2hlZF9kYi5oCisuL2luY2x1ZGUvaGVhZGVycworLi9pbmNsdWRlL25jX2FsbG9jLmgKKy4vaW5jbHVkZS9uY19wYW5lbC5oCisuL2luY2x1ZGUvbmNfdHBhcm0uaAorLi9pbmNsdWRlL25jdXJzZXNfY2ZnLmhpbgorLi9pbmNsdWRlL25jdXJzZXNfZGVmcworLi9pbmNsdWRlL25jdXJzZXNfZGxsLmgKKy4vaW5jbHVkZS90ZXJtX2VudHJ5LmgKKy4vaW5jbHVkZS90ZXJtY2FwLmguaW4KKy4vaW5jbHVkZS90aWMuaAorLi9pbmNsdWRlL3VuY3RybC5oLmluCisuL2luc3RhbGwtc2gKKy4vbWFuL01LdGVybWluZm8uc2gKKy4vbWFuL01ha2VmaWxlLmluCisuL21hbi9jYXB0b2luZm8uMW0KKy4vbWFuL2NsZWFyLjEKKy4vbWFuL2N1cnNfYWRkX3djaC4zeAorLi9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4CisuL21hbi9jdXJzX2FkZGNoLjN4CisuL21hbi9jdXJzX2FkZGNoc3RyLjN4CisuL21hbi9jdXJzX2FkZHN0ci4zeAorLi9tYW4vY3Vyc19hZGR3c3RyLjN4CisuL21hbi9jdXJzX2F0dHIuM3gKKy4vbWFuL2N1cnNfYmVlcC4zeAorLi9tYW4vY3Vyc19ia2dkLjN4CisuL21hbi9jdXJzX2JrZ3JuZC4zeAorLi9tYW4vY3Vyc19ib3JkZXIuM3gKKy4vbWFuL2N1cnNfYm9yZGVyX3NldC4zeAorLi9tYW4vY3Vyc19jbGVhci4zeAorLi9tYW4vY3Vyc19jb2xvci4zeAorLi9tYW4vY3Vyc19kZWxjaC4zeAorLi9tYW4vY3Vyc19kZWxldGVsbi4zeAorLi9tYW4vY3Vyc19leHRlbmQuM3gKKy4vbWFuL2N1cnNfZ2V0X3djaC4zeAorLi9tYW4vY3Vyc19nZXRfd3N0ci4zeAorLi9tYW4vY3Vyc19nZXRjY2hhci4zeAorLi9tYW4vY3Vyc19nZXRjaC4zeAorLi9tYW4vY3Vyc19nZXRzdHIuM3gKKy4vbWFuL2N1cnNfZ2V0eXguM3gKKy4vbWFuL2N1cnNfaW5fd2NoLjN4CisuL21hbi9jdXJzX2luX3djaHN0ci4zeAorLi9tYW4vY3Vyc19pbmNoLjN4CisuL21hbi9jdXJzX2luY2hzdHIuM3gKKy4vbWFuL2N1cnNfaW5pdHNjci4zeAorLi9tYW4vY3Vyc19pbm9wdHMuM3gKKy4vbWFuL2N1cnNfaW5zX3djaC4zeAorLi9tYW4vY3Vyc19pbnNfd3N0ci4zeAorLi9tYW4vY3Vyc19pbnNjaC4zeAorLi9tYW4vY3Vyc19pbnNzdHIuM3gKKy4vbWFuL2N1cnNfaW5zdHIuM3gKKy4vbWFuL2N1cnNfaW53c3RyLjN4CisuL21hbi9jdXJzX2tlcm5lbC4zeAorLi9tYW4vY3Vyc19sZWdhY3kuM3gKKy4vbWFuL2N1cnNfbWVtbGVha3MuM3gKKy4vbWFuL2N1cnNfbW91c2UuM3gKKy4vbWFuL2N1cnNfbW92ZS4zeAorLi9tYW4vY3Vyc19vcGFxdWUuM3gKKy4vbWFuL2N1cnNfb3V0b3B0cy4zeAorLi9tYW4vY3Vyc19vdmVybGF5LjN4CisuL21hbi9jdXJzX3BhZC4zeAorLi9tYW4vY3Vyc19wcmludC4zeAorLi9tYW4vY3Vyc19wcmludHcuM3gKKy4vbWFuL2N1cnNfcmVmcmVzaC4zeAorLi9tYW4vY3Vyc19zY2Fudy4zeAorLi9tYW4vY3Vyc19zY3JfZHVtcC4zeAorLi9tYW4vY3Vyc19zY3JvbGwuM3gKKy4vbWFuL2N1cnNfc2xrLjN4CisuL21hbi9jdXJzX3Rlcm1hdHRycy4zeAorLi9tYW4vY3Vyc190ZXJtY2FwLjN4CisuL21hbi9jdXJzX3Rlcm1pbmZvLjN4CisuL21hbi9jdXJzX3RocmVhZHMuM3gKKy4vbWFuL2N1cnNfdG91Y2guM3gKKy4vbWFuL2N1cnNfdHJhY2UuM3gKKy4vbWFuL2N1cnNfdXRpbC4zeAorLi9tYW4vY3Vyc193aW5kb3cuM3gKKy4vbWFuL2RlZmF1bHRfY29sb3JzLjN4CisuL21hbi9kZWZpbmVfa2V5LjN4CisuL21hbi9mb3JtLjN4CisuL21hbi9mb3JtX2N1cnNvci4zeAorLi9tYW4vZm9ybV9kYXRhLjN4CisuL21hbi9mb3JtX2RyaXZlci4zeAorLi9tYW4vZm9ybV9maWVsZC4zeAorLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4CisuL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeAorLi9tYW4vZm9ybV9maWVsZF9pbmZvLjN4CisuL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3gKKy4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4CisuL21hbi9mb3JtX2ZpZWxkX29wdHMuM3gKKy4vbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeAorLi9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4CisuL21hbi9mb3JtX2ZpZWxkdHlwZS4zeAorLi9tYW4vZm9ybV9ob29rLjN4CisuL21hbi9mb3JtX25ldy4zeAorLi9tYW4vZm9ybV9uZXdfcGFnZS4zeAorLi9tYW4vZm9ybV9vcHRzLjN4CisuL21hbi9mb3JtX3BhZ2UuM3gKKy4vbWFuL2Zvcm1fcG9zdC4zeAorLi9tYW4vZm9ybV9yZXF1ZXN0bmFtZS4zeAorLi9tYW4vZm9ybV91c2VycHRyLjN4CisuL21hbi9mb3JtX3dpbi4zeAorLi9tYW4vaW5mb2NtcC4xbQorLi9tYW4vaW5mb3RvY2FwLjFtCisuL21hbi9rZXlfZGVmaW5lZC4zeAorLi9tYW4va2V5Ym91bmQuM3gKKy4vbWFuL2tleW9rLjN4CisuL21hbi9sZWdhY3lfY29kaW5nLjN4CisuL21hbi9tYWtlX3NlZC5zaAorLi9tYW4vbWFuX2RiLnJlbmFtZXMKKy4vbWFuL21hbmxpbmtzLnNlZAorLi9tYW4vbWVudS4zeAorLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4CisuL21hbi9tZW51X2N1cnNvci4zeAorLi9tYW4vbWVudV9kcml2ZXIuM3gKKy4vbWFuL21lbnVfZm9ybWF0LjN4CisuL21hbi9tZW51X2hvb2suM3gKKy4vbWFuL21lbnVfaXRlbXMuM3gKKy4vbWFuL21lbnVfbWFyay4zeAorLi9tYW4vbWVudV9uZXcuM3gKKy4vbWFuL21lbnVfb3B0cy4zeAorLi9tYW4vbWVudV9wYXR0ZXJuLjN4CisuL21hbi9tZW51X3Bvc3QuM3gKKy4vbWFuL21lbnVfcmVxdWVzdG5hbWUuM3gKKy4vbWFuL21lbnVfc3BhY2luZy4zeAorLi9tYW4vbWVudV91c2VycHRyLjN4CisuL21hbi9tZW51X3dpbi4zeAorLi9tYW4vbWl0ZW1fY3VycmVudC4zeAorLi9tYW4vbWl0ZW1fbmFtZS4zeAorLi9tYW4vbWl0ZW1fbmV3LjN4CisuL21hbi9taXRlbV9vcHRzLjN4CisuL21hbi9taXRlbV91c2VycHRyLjN4CisuL21hbi9taXRlbV92YWx1ZS4zeAorLi9tYW4vbWl0ZW1fdmlzaWJsZS4zeAorLi9tYW4vbmN1cnNlcy4zeAorLi9tYW4vcGFuZWwuM3gKKy4vbWFuL3Jlc2l6ZXRlcm0uM3gKKy4vbWFuL3Rlcm0uNQorLi9tYW4vdGVybS43CisuL21hbi90ZXJtaW5mby5oZWFkCisuL21hbi90ZXJtaW5mby50YWlsCisuL21hbi90aWMuMW0KKy4vbWFuL3RvZS4xbQorLi9tYW4vdHB1dC4xCisuL21hbi90c2V0LjEKKy4vbWFuL3dyZXNpemUuM3gKKy4vbWVudS9NYWtlZmlsZS5pbgorLi9tZW51L1JFQUQuTUUKKy4vbWVudS9ldGkuaAorLi9tZW51L2hlYWRlcnMKKy4vbWVudS9sbGliLWxtZW51CisuL21lbnUvbGxpYi1sbWVudXcKKy4vbWVudS9tX2F0dHJpYnMuYworLi9tZW51L21fY3Vyc29yLmMKKy4vbWVudS9tX2RyaXZlci5jCisuL21lbnUvbV9mb3JtYXQuYworLi9tZW51L21fZ2xvYmFsLmMKKy4vbWVudS9tX2hvb2suYworLi9tZW51L21faXRlbV9jdXIuYworLi9tZW51L21faXRlbV9uYW0uYworLi9tZW51L21faXRlbV9uZXcuYworLi9tZW51L21faXRlbV9vcHQuYworLi9tZW51L21faXRlbV90b3AuYworLi9tZW51L21faXRlbV91c2UuYworLi9tZW51L21faXRlbV92YWwuYworLi9tZW51L21faXRlbV92aXMuYworLi9tZW51L21faXRlbXMuYworLi9tZW51L21fbmV3LmMKKy4vbWVudS9tX29wdHMuYworLi9tZW51L21fcGFkLmMKKy4vbWVudS9tX3BhdHRlcm4uYworLi9tZW51L21fcG9zdC5jCisuL21lbnUvbV9yZXFfbmFtZS5jCisuL21lbnUvbV9zY2FsZS5jCisuL21lbnUvbV9zcGFjaW5nLmMKKy4vbWVudS9tX3N1Yi5jCisuL21lbnUvbV90cmFjZS5jCisuL21lbnUvbV91c2VycHRyLmMKKy4vbWVudS9tX3dpbi5jCisuL21lbnUvbWVudS5oCisuL21lbnUvbWVudS5wcml2LmgKKy4vbWVudS9tZl9jb21tb24uaAorLi9tZW51L21vZHVsZXMKKy4vbWlzYy9NYWtlZmlsZS5pbgorLi9taXNjL2Noa2RlZi5jbWQKKy4vbWlzYy9jbGVhbnRpYy5jbWQKKy4vbWlzYy9jbXBkZWYuY21kCisuL21pc2MvY3NvcnQKKy4vbWlzYy9lbXguc3JjCisuL21pc2MvZm9ybS5kZWYKKy4vbWlzYy9mb3JtLnJlZgorLi9taXNjL2dlbl9lZGl0LnNoCisuL21pc2MvanBmLWluZGVudAorLi9taXNjL21ha2VkZWYuY21kCisuL21pc2MvbWFrZWxsaWIKKy4vbWlzYy9tZW51LmRlZgorLi9taXNjL21lbnUucmVmCisuL21pc2MvbmN1LWluZGVudAorLi9taXNjL25jdXJzZXMtY29uZmlnLmluCisuL21pc2MvbmN1cnNlcy5kZWYKKy4vbWlzYy9uY3Vyc2VzLnJlZgorLi9taXNjL25jdXJzZXMuc3VwcAorLi9taXNjL3BhbmVsLmRlZgorLi9taXNjL3BhbmVsLnJlZgorLi9taXNjL3J1bl90aWMuaW4KKy4vbWlzYy9zaGxpYgorLi9taXNjL3RhYnNldC9zdGQKKy4vbWlzYy90YWJzZXQvc3RkY3J0CisuL21pc2MvdGFic2V0L3Z0MTAwCisuL21pc2MvdGFic2V0L3Z0MzAwCisuL21pc2MvdGRsaW50CisuL21pc2MvdGVybWluZm8uc3JjCisuL21rLTB0aC5hd2sKKy4vbWstMXN0LmF3aworLi9tay0ybmQuYXdrCisuL21rLWhkci5hd2sKKy4vbWtkaXJzLnNoCisuL25jdXJzZXMvTWFrZWZpbGUuaW4KKy4vbmN1cnNlcy9SRUFETUUKKy4vbmN1cnNlcy9SRUFETUUuSVoKKy4vbmN1cnNlcy9TaWdBY3Rpb24uaAorLi9uY3Vyc2VzL2Jhc2UvTUtrZXluYW1lLmF3aworLi9uY3Vyc2VzL2Jhc2UvTUtsaWJfZ2VuLnNoCisuL25jdXJzZXMvYmFzZS9NS3VuY3RybC5hd2sKKy4vbmN1cnNlcy9iYXNlL1JFQURNRQorLi9uY3Vyc2VzL2Jhc2UvZGVmaW5lX2tleS5jCisuL25jdXJzZXMvYmFzZS9rZXlfZGVmaW5lZC5jCisuL25jdXJzZXMvYmFzZS9rZXlib3VuZC5jCisuL25jdXJzZXMvYmFzZS9rZXlvay5jCisuL25jdXJzZXMvYmFzZS9sZWdhY3lfY29kaW5nLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9hZGRjaC5jCisuL25jdXJzZXMvYmFzZS9saWJfYWRkc3RyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9iZWVwLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9ia2dkLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9ib3guYworLi9uY3Vyc2VzL2Jhc2UvbGliX2NoZ2F0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9jbGVhci5jCisuL25jdXJzZXMvYmFzZS9saWJfY2xlYXJvay5jCisuL25jdXJzZXMvYmFzZS9saWJfY2xyYm90LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9jbHJlb2wuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2NvbG9yLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9jb2xvcnNldC5jCisuL25jdXJzZXMvYmFzZS9saWJfZGVsY2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX2RlbHdpbi5jCisuL25jdXJzZXMvYmFzZS9saWJfZGZ0X2ZnYmcuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2VjaG8uYworLi9uY3Vyc2VzL2Jhc2UvbGliX2VuZHdpbi5jCisuL25jdXJzZXMvYmFzZS9saWJfZXJhc2UuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2ZsYXNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9mcmVlYWxsLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9nZXRjaC5jCisuL25jdXJzZXMvYmFzZS9saWJfZ2V0c3RyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9obGluZS5jCisuL25jdXJzZXMvYmFzZS9saWJfaW1tZWRvay5jCisuL25jdXJzZXMvYmFzZS9saWJfaW5jaHN0ci5jCisuL25jdXJzZXMvYmFzZS9saWJfaW5pdHNjci5jCisuL25jdXJzZXMvYmFzZS9saWJfaW5zY2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX2luc2RlbC5jCisuL25jdXJzZXMvYmFzZS9saWJfaW5zbnN0ci5jCisuL25jdXJzZXMvYmFzZS9saWJfaW5zdHIuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2lzZW5kd2luLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9sZWF2ZW9rLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9tb3VzZS5jCisuL25jdXJzZXMvYmFzZS9saWJfbW92ZS5jCisuL25jdXJzZXMvYmFzZS9saWJfbXZ3aW4uYworLi9uY3Vyc2VzL2Jhc2UvbGliX25ld3Rlcm0uYworLi9uY3Vyc2VzL2Jhc2UvbGliX25ld3dpbi5jCisuL25jdXJzZXMvYmFzZS9saWJfbmwuYworLi9uY3Vyc2VzL2Jhc2UvbGliX292ZXJsYXkuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3BhZC5jCisuL25jdXJzZXMvYmFzZS9saWJfcHJpbnR3LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9yZWRyYXdsbi5jCisuL25jdXJzZXMvYmFzZS9saWJfcmVmcmVzaC5jCisuL25jdXJzZXMvYmFzZS9saWJfcmVzdGFydC5jCisuL25jdXJzZXMvYmFzZS9saWJfc2NhbncuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3NjcmVlbi5jCisuL25jdXJzZXMvYmFzZS9saWJfc2Nyb2xsLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zY3JvbGxvay5jCisuL25jdXJzZXMvYmFzZS9saWJfc2NycmVnLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zZXRfdGVybS5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJfc2V0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvZi5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyb24uYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cnNldC5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrYXR0ci5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrY2xlYXIuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2NvbG9yLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGtpbml0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGtsYWIuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3JlZnIuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3NldC5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrdG91Y2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX3RvdWNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl91bmdldGNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl92bGluZS5jCisuL25jdXJzZXMvYmFzZS9saWJfd2F0dHJvZmYuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3dhdHRyb24uYworLi9uY3Vyc2VzL2Jhc2UvbGliX3dpbmNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl93aW5kb3cuYworLi9uY3Vyc2VzL2Jhc2UvbWVtbW92ZS5jCisuL25jdXJzZXMvYmFzZS9uY19wYW5lbC5jCisuL25jdXJzZXMvYmFzZS9yZXNpemV0ZXJtLmMKKy4vbmN1cnNlcy9iYXNlL3NhZmVfc3ByaW50Zi5jCisuL25jdXJzZXMvYmFzZS9zaWdhY3Rpb24uYworLi9uY3Vyc2VzL2Jhc2UvdHJpZXMuYworLi9uY3Vyc2VzL2Jhc2UvdXNlX3dpbmRvdy5jCisuL25jdXJzZXMvYmFzZS92ZXJzaW9uLmMKKy4vbmN1cnNlcy9iYXNlL3Zzc2NhbmYuYworLi9uY3Vyc2VzL2Jhc2Uvd3Jlc2l6ZS5jCisuL25jdXJzZXMvY3Vyc2VzLnByaXYuaAorLi9uY3Vyc2VzL2ZpZm9fZGVmcy5oCisuL25jdXJzZXMvbGxpYi1sbmN1cnNlcworLi9uY3Vyc2VzL2xsaWItbG5jdXJzZXN0CisuL25jdXJzZXMvbGxpYi1sbmN1cnNlc3cKKy4vbmN1cnNlcy9tb2R1bGVzCisuL25jdXJzZXMvdGluZm8vTUtjYXB0YWIuYXdrCisuL25jdXJzZXMvdGluZm8vTUtjYXB0YWIuc2gKKy4vbmN1cnNlcy90aW5mby9NS2NvZGVzLmF3aworLi9uY3Vyc2VzL3RpbmZvL01LZmFsbGJhY2suc2gKKy4vbmN1cnNlcy90aW5mby9NS2tleXNfbGlzdC5zaAorLi9uY3Vyc2VzL3RpbmZvL01LbmFtZXMuYXdrCisuL25jdXJzZXMvdGluZm8vUkVBRE1FCisuL25jdXJzZXMvdGluZm8vYWNjZXNzLmMKKy4vbmN1cnNlcy90aW5mby9hZGRfdHJpZXMuYworLi9uY3Vyc2VzL3RpbmZvL2FsbG9jX2VudHJ5LmMKKy4vbmN1cnNlcy90aW5mby9hbGxvY190dHlwZS5jCisuL25jdXJzZXMvdGluZm8vY2FwdG9pbmZvLmMKKy4vbmN1cnNlcy90aW5mby9jb21wX2Vycm9yLmMKKy4vbmN1cnNlcy90aW5mby9jb21wX2V4cGFuZC5jCisuL25jdXJzZXMvdGluZm8vY29tcF9oYXNoLmMKKy4vbmN1cnNlcy90aW5mby9jb21wX3BhcnNlLmMKKy4vbmN1cnNlcy90aW5mby9jb21wX3NjYW4uYworLi9uY3Vyc2VzL3RpbmZvL2RiX2l0ZXJhdG9yLmMKKy4vbmN1cnNlcy90aW5mby9kb2FsbG9jLmMKKy4vbmN1cnNlcy90aW5mby9lbnRyaWVzLmMKKy4vbmN1cnNlcy90aW5mby9mcmVlX3R0eXBlLmMKKy4vbmN1cnNlcy90aW5mby9nZXRlbnZfbnVtLmMKKy4vbmN1cnNlcy90aW5mby9oYXNoZWRfZGIuYworLi9uY3Vyc2VzL3RpbmZvL2hvbWVfdGVybWluZm8uYworLi9uY3Vyc2VzL3RpbmZvL2luaXRfa2V5dHJ5LmMKKy4vbmN1cnNlcy90aW5mby9saWJfYWNzLmMKKy4vbmN1cnNlcy90aW5mby9saWJfYmF1ZHJhdGUuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9jdXJfdGVybS5jCisuL25jdXJzZXMvdGluZm8vbGliX2RhdGEuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9oYXNfY2FwLmMKKy4vbmN1cnNlcy90aW5mby9saWJfa2VybmVsLmMKKy4vbmN1cnNlcy90aW5mby9saWJfbG9uZ25hbWUuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9uYXBtcy5jCisuL25jdXJzZXMvdGluZm8vbGliX29wdGlvbnMuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9wcmludC5jCisuL25jdXJzZXMvdGluZm8vbGliX3Jhdy5jCisuL25jdXJzZXMvdGluZm8vbGliX3NldHVwLmMKKy4vbmN1cnNlcy90aW5mby9saWJfdGVybWNhcC5jCisuL25jdXJzZXMvdGluZm8vbGliX3Rlcm1uYW1lLmMKKy4vbmN1cnNlcy90aW5mby9saWJfdGdvdG8uYworLi9uY3Vyc2VzL3RpbmZvL2xpYl90aS5jCisuL25jdXJzZXMvdGluZm8vbGliX3RwYXJtLmMKKy4vbmN1cnNlcy90aW5mby9saWJfdHB1dHMuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl90dHlmbGFncy5jCisuL25jdXJzZXMvdGluZm8vbWFrZV9rZXlzLmMKKy4vbmN1cnNlcy90aW5mby9uYW1lX21hdGNoLmMKKy4vbmN1cnNlcy90aW5mby9wYXJzZV9lbnRyeS5jCisuL25jdXJzZXMvdGluZm8vcmVhZF9lbnRyeS5jCisuL25jdXJzZXMvdGluZm8vcmVhZF90ZXJtY2FwLmMKKy4vbmN1cnNlcy90aW5mby9zZXRidWYuYworLi9uY3Vyc2VzL3RpbmZvL3N0cmluZ3MuYworLi9uY3Vyc2VzL3RpbmZvL3RyaW1fc2dyMC5jCisuL25jdXJzZXMvdGluZm8vdXNlX3NjcmVlbi5jCisuL25jdXJzZXMvdGluZm8vd3JpdGVfZW50cnkuYworLi9uY3Vyc2VzL3RyYWNlL1JFQURNRQorLi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZS5jCisuL25jdXJzZXMvdHJhY2UvbGliX3RyYWNlYXRyLmMKKy4vbmN1cnNlcy90cmFjZS9saWJfdHJhY2ViaXRzLmMKKy4vbmN1cnNlcy90cmFjZS9saWJfdHJhY2VjaHIuYworLi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWRtcC5jCisuL25jdXJzZXMvdHJhY2UvbGliX3RyYWNlbXNlLmMKKy4vbmN1cnNlcy90cmFjZS90cmFjZV9idWYuYworLi9uY3Vyc2VzL3RyYWNlL3RyYWNlX3RyaWVzLmMKKy4vbmN1cnNlcy90cmFjZS90cmFjZV94bmFtZXMuYworLi9uY3Vyc2VzL3RyYWNlL3ZhcmFyZ3MuYworLi9uY3Vyc2VzL3RyYWNlL3Zpc2J1Zi5jCisuL25jdXJzZXMvdHR5L01LZXhwYW5kZWQuc2gKKy4vbmN1cnNlcy90dHkvaGFyZHNjcm9sbC5jCisuL25jdXJzZXMvdHR5L2hhc2htYXAuYworLi9uY3Vyc2VzL3R0eS9saWJfbXZjdXIuYworLi9uY3Vyc2VzL3R0eS9saWJfdHN0cC5jCisuL25jdXJzZXMvdHR5L2xpYl90d2FpdC5jCisuL25jdXJzZXMvdHR5L2xpYl92aWRhdHRyLmMKKy4vbmN1cnNlcy90dHkvdHR5X2Rpc3BsYXkuaAorLi9uY3Vyc2VzL3R0eS90dHlfaW5wdXQuaAorLi9uY3Vyc2VzL3R0eS90dHlfdXBkYXRlLmMKKy4vbmN1cnNlcy93aWRlY2hhci9jaGFyYWJsZS5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2FkZF93Y2guYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9ib3hfc2V0LmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfY2NoYXIuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9lcmFzZXdjaGFyLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfZ2V0X3djaC5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2dldF93c3RyLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfaGxpbmVfc2V0LmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfaW5fd2NoLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfaW5fd2NobnN0ci5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2luc193Y2guYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbndzdHIuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9rZXlfbmFtZS5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX3BlY2hvX3djaGFyLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfc2xrX3dzZXQuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl91bmdldF93Y2guYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl92aWRfYXR0ci5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX3ZsaW5lX3NldC5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX3dhY3MuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl93dW5jdHJsLmMKKy4vcGFuZWwvTWFrZWZpbGUuaW4KKy4vcGFuZWwvaGVhZGVycworLi9wYW5lbC9sbGliLWxwYW5lbAorLi9wYW5lbC9sbGliLWxwYW5lbHcKKy4vcGFuZWwvbW9kdWxlcworLi9wYW5lbC9wX2Fib3ZlLmMKKy4vcGFuZWwvcF9iZWxvdy5jCisuL3BhbmVsL3BfYm90dG9tLmMKKy4vcGFuZWwvcF9kZWxldGUuYworLi9wYW5lbC9wX2hpZGRlbi5jCisuL3BhbmVsL3BfaGlkZS5jCisuL3BhbmVsL3BfbW92ZS5jCisuL3BhbmVsL3BfbmV3LmMKKy4vcGFuZWwvcF9yZXBsYWNlLmMKKy4vcGFuZWwvcF9zaG93LmMKKy4vcGFuZWwvcF90b3AuYworLi9wYW5lbC9wX3VwZGF0ZS5jCisuL3BhbmVsL3BfdXNlci5jCisuL3BhbmVsL3Bfd2luLmMKKy4vcGFuZWwvcGFuZWwuYworLi9wYW5lbC9wYW5lbC5oCisuL3BhbmVsL3BhbmVsLnByaXYuaAorLi9wcm9ncy9NS3Rlcm1zb3J0LnNoCisuL3Byb2dzL01ha2VmaWxlLmluCisuL3Byb2dzL2NhcGNvbnZlcnQKKy4vcHJvZ3MvY2xlYXIuYworLi9wcm9ncy9jbGVhci5zaAorLi9wcm9ncy9kdW1wX2VudHJ5LmMKKy4vcHJvZ3MvZHVtcF9lbnRyeS5oCisuL3Byb2dzL2luZm9jbXAuYworLi9wcm9ncy9tb2R1bGVzCisuL3Byb2dzL3Byb2dzLnByaXYuaAorLi9wcm9ncy90aWMuYworLi9wcm9ncy90b2UuYworLi9wcm9ncy90cHV0LmMKKy4vcHJvZ3MvdHNldC5jCisuL3Rhci1jb3B5LnNoCisuL3Rlc3QvTWFrZWZpbGUuaW4KKy4vdGVzdC9SRUFETUUKKy4vdGVzdC9hY2xvY2FsLm00CisuL3Rlc3QvYmFja2dyb3VuZC5jCisuL3Rlc3QvYmx1ZS5jCisuL3Rlc3QvYnMuNgorLi90ZXN0L2JzLmMKKy4vdGVzdC9idWxnYXJpYW4tdXRmOC50eHQKKy4vdGVzdC9jYXJkZmlsZS5jCisuL3Rlc3QvY2FyZGZpbGUuZGF0CisuL3Rlc3QvY2hnYXQuYworLi90ZXN0L2NvbG9yX3NldC5jCisuL3Rlc3QvY29uZmlndXJlCisuL3Rlc3QvY29uZmlndXJlLmluCisuL3Rlc3QvZGVtb19hbHRrZXlzLmMKKy4vdGVzdC9kZW1vX2RlZmtleS5jCisuL3Rlc3QvZGVtb19mb3Jtcy5jCisuL3Rlc3QvZGVtb19rZXlvay5jCisuL3Rlc3QvZGVtb19tZW51cy5jCisuL3Rlc3QvZGVtb19wYW5lbHMuYworLi90ZXN0L2RlbW9fdGVybWNhcC5jCisuL3Rlc3QvZGl0dG8uYworLi90ZXN0L2RvdHMuYworLi90ZXN0L2RvdHNfbXZjdXIuYworLi90ZXN0L2VjaG9jaGFyLmMKKy4vdGVzdC9lZGl0X2ZpZWxkLmMKKy4vdGVzdC9lZGl0X2ZpZWxkLmgKKy4vdGVzdC9maWx0ZXIuYworLi90ZXN0L2ZpcmV3b3JrLmMKKy4vdGVzdC9maXJzdGxhc3QuYworLi90ZXN0L2ZvbGRrZXlzLmMKKy4vdGVzdC9nZGMuNgorLi90ZXN0L2dkYy5jCisuL3Rlc3QvaGFub2kuYworLi90ZXN0L2hhc2h0ZXN0LmMKKy4vdGVzdC9pbmNoX3dpZGUuYworLi90ZXN0L2luY2hzLmMKKy4vdGVzdC9pbnNfd2lkZS5jCisuL3Rlc3QvaW5zZXJ0cy5jCisuL3Rlc3Qva2V5X25hbWVzLmMKKy4vdGVzdC9rZXluYW1lcy5jCisuL3Rlc3Qva25pZ2h0LmMKKy4vdGVzdC9saW51eC1jb2xvci5kYXQKKy4vdGVzdC9saXN0dXNlZC5zaAorLi90ZXN0L2xydGVzdC5jCisuL3Rlc3QvbWstdGVzdC5hd2sKKy4vdGVzdC9tb2R1bGVzCisuL3Rlc3QvbW92ZXdpbmRvdy5jCisuL3Rlc3QvbmN1cnNlcy5jCisuL3Rlc3QvbmN1cnNlc190c3QuaGluCisuL3Rlc3QvbmV3ZGVtby5jCisuL3Rlc3QvcHJvZ3JhbXMKKy4vdGVzdC9yYWlscm9hZC5jCisuL3Rlc3QvcmFpbi5jCisuL3Rlc3QvcmVkcmF3LmMKKy4vdGVzdC9zYXZlc2NyZWVuLmMKKy4vdGVzdC9zYXZlc2NyZWVuLnNoCisuL3Rlc3QvdGNsb2NrLmMKKy4vdGVzdC90ZXN0LnByaXYuaAorLi90ZXN0L3Rlc3RfYXJyYXlzLmMKKy4vdGVzdC90ZXN0X2dldF93c3RyLmMKKy4vdGVzdC90ZXN0X2dldHN0ci5jCisuL3Rlc3QvdGVzdF9pbnN0ci5jCisuL3Rlc3QvdGVzdF9pbndzdHIuYworLi90ZXN0L3Rlc3Rfb3BhcXVlLmMKKy4vdGVzdC90ZXN0YWRkY2guYworLi90ZXN0L3Rlc3RjdXJzLmMKKy4vdGVzdC90ZXN0c2NhbncuYworLi90ZXN0L3RyYWNlbXVuY2gKKy4vdGVzdC92aWV3LmMKKy4vdGVzdC93aWRlY2hhcnMtdXRmOC50eHQKKy4vdGVzdC93b3JtLmMKKy4vdGVzdC94bWFzLmMKKy4vdGVzdC94dGVybS0xNmNvbG9yLmRhdAorLi90ZXN0L3h0ZXJtLTg4Y29sb3IuZGF0CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGNkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDk3IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjI0IDIwMDUvMDEvMjkgMTk6MzA6MDYgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NiwxOTk3CisjCisjIE1hc3RlciBNYWtlZmlsZSBmb3IgbmN1cnNlcyBsaWJyYXJ5LgorCitTSEVMTCA9IC9iaW4vc2gKKworREVTVERJUj1AREVTVERJUkAKK0NGX01GTEFHUyA9IEBjZl9jdl9tYWtlZmxhZ3NAIERFU1RESVI9IiQoREVTVERJUikiCisKK0BTRVRfTUFLRUAKKworTkNVUlNFU19NQUpPUgk9IEBOQ1VSU0VTX01BSk9SQAorTkNVUlNFU19NSU5PUgk9IEBOQ1VSU0VTX01JTk9SQAorTkNVUlNFU19QQVRDSAk9IEBOQ1VSU0VTX1BBVENIQAorCitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorCitiaW5kaXIJCT0gQGJpbmRpckAKK3RpY2RpcgkJPSBAVEVSTUlORk9ACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACitsaWJkaXIJCT0gQGxpYmRpckAKK21hbmRpcgkJPSBAbWFuZGlyQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKKworRElSU19UT19NQUtFCT0gQERJUlNfVE9fTUFLRUAKKworYWxsIDo6CSQoRElSU19UT19NQUtFKQorCiskKERJUlNfVE9fTUFLRSkgOgorCW1rZGlyICRACisKK3ByZWluc3RhbGwgOgorCUAgZWNobyAnJworCUAgZWNobyAnKiogQ29uZmlndXJhdGlvbiBzdW1tYXJ5IGZvciBOQ1VSU0VTICQoTkNVUlNFU19NQUpPUikuJChOQ1VSU0VTX01JTk9SKSAkKE5DVVJTRVNfUEFUQ0gpOicKKwlAIGVjaG8gJycKKwlAIGVjaG8gJyAgICAgZXh0ZW5kZWQgZnVuY3M6ICdgdGVzdCBATkNVUlNFU19FWFRfRlVOQ1NAICE9IDAgJiYgZWNobyB5ZXMgfHwgZWNobyBub2AKKwlAIGVjaG8gJyAgICAgeHRlcm0gdGVybWluZm86ICdAV0hJQ0hfWFRFUk1ACisJQCBlY2hvICcnCisJQCBlY2hvICcgICAgICBiaW4gZGlyZWN0b3J5OiAnJChiaW5kaXIpCisJQCBlY2hvICcgICAgICBsaWIgZGlyZWN0b3J5OiAnJChsaWJkaXIpCisJQCBlY2hvICcgIGluY2x1ZGUgZGlyZWN0b3J5OiAnJChpbmNsdWRlZGlyKQorCUAgZWNobyAnICAgICAgbWFuIGRpcmVjdG9yeTogJyQobWFuZGlyKQorQE1BS0VfVEVSTUlORk9ACUAgZWNobyAnIHRlcm1pbmZvIGRpcmVjdG9yeTogJyQodGljZGlyKQorCUAgZWNobyAnJworCUAgdGVzdCAiJChpbmNsdWRlZGlyKSIgPSAiJChwcmVmaXgpL2luY2x1ZGUiIHx8IFwKKwkJZWNobyAnKiogSW5jbHVkZS1kaXJlY3RvcnkgaXMgbm90IGluIGEgc3RhbmRhcmQgbG9jYXRpb24nCisJQCB0ZXN0ICEgLWYgJChpbmNsdWRlZGlyKS90ZXJtY2FwLmggfHwgXAorCQlmZ3JlcCBOQ1VSU0VTX1ZFUlNJT04gJChpbmNsdWRlZGlyKS90ZXJtY2FwLmggPi9kZXYvbnVsbCB8fCBcCisJCWVjaG8gJyoqIFdpbGwgb3ZlcndyaXRlIG5vbi1uY3Vyc2VzIHRlcm1jYXAuaCcKKwlAIHRlc3QgISAtZiAkKGluY2x1ZGVkaXIpL2N1cnNlcy5oIHx8IFwKKwkJZmdyZXAgTkNVUlNFU19WRVJTSU9OICQoaW5jbHVkZWRpcikvY3Vyc2VzLmggPi9kZXYvbnVsbCB8fCBcCisJCWVjaG8gJyoqIFdpbGwgb3ZlcndyaXRlIG5vbi1uY3Vyc2VzIGN1cnNlcy5oJworCisjIFB1dCB0aGUgY29tbW9uIHJ1bGVzIGhlcmUgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGNvbnN0cnVjdCB0aGUgbGlzdCBvZgorIyBkaXJlY3RvcmllcyB0byB2aXNpdC4KK2FsbCBcCitjbGVhbiBcCitkaXN0Y2xlYW4gXAorbW9zdGx5Y2xlYW4gXAorcmVhbGNsZWFuIFwKK2RlcGVuZCBcCitzb3VyY2VzIFwKK3RhZ3MgXAordW5pbnN0YWxsIFwKK2luc3RhbGwgOjoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLm9zMiBiL01ha2VmaWxlLm9zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ0NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUub3MyCkBAIC0wLDAgKzEsMjU5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBNYWtlZmlsZS5vczIsdiAxLjExIDIwMDYvMDQvMjIgMjE6NDY6MTcgdG9tIEV4cCAkCisjCisjIFdyYXBwZXIgTWFrZWZpbGUgZm9yIG5jdXJzZXMgbGlicmFyeSB1bmRlciBPUy8yLgorIyBBdXRob3I6ICBKdWFuIEpvc2UgR2FyY2lhIFJpcG9sbCA8d29ybUBhcnJha2lzLmVzPi4KKyMgV2VicGFnZTogaHR0cDovL3d3dy5hcnJha2lzLmVzL353b3JtLworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTm90ZXMgKGZyb20gSSBaYWtoYXJldmljaCkKKyMgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgSSBjb3VsZCBidWlsZCB0aGUgbGlicmFyeSB3aXRoIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgY29tbWFuZHM6CisjCisjICAgdG91Y2ggTWFrZWZpbGUKKyMgICBtYWtlIC1mIE1ha2VmaWxlLm9zMiBjb25maWcKKyMgICBtYWtlIC1mIE1ha2VmaWxlLm9zMiBDQz1nY2MgSE9TVENDPWdjYyBDWFg9Z2NjCisjCisjIElnbm9yaW5nIHRoZSBmb2xsb3dpbmcgZXJyb3JzOgorIyAgIEludmFsaWQgY29uZmlndXJhdGlvbiBgb3MyJy4uLgorIyAgIC4uLiBhY19tYWtldGVtcD0ibWFrZSI6IG5vdCBmb3VuZAorIyAgIC4uLiBzeW50YXggZXJyb3I6IGBkb25lJyB1bmV4cGVjdGVkCisjICAgTm8gcnVsZSB0byBtYWtlIHRhcmdldCBgbGliL25jdXJzZXM0LmRsbCcKKyMKKyMgWW91IG1heSBuZWVkIHRvIHJ1bgorIworIyAgIHJtIG1ha2UuZGVmcworIyAgIG1ha2UgLWYgTWFrZWZpbGUub3MyIG1ha2UuZGVmcworIworIyBpZiB0aGUgYnVpbGQgb2YgbWlzYy9wYW5lbC5kZWYgZmFpbHMuCisjCisjIElmIHlvdSBkbyBub3QgaGF2ZSBwZXJsLCB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGZhaWwuICBVc2UgYXV0b2NvbmYgdG8KKyMgZ2VuZXJhdGUgdGhlIEVNWC1zcGVjaWZpYyBjb25maWd1cmUgc2NyaXB0IChzZWUgUkVBRE1FLmVteCksIGFuZCBydW4gdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcy4gIFRoZW4sIHJ1bgorIworIyAgIG1ha2UgLWYgTWFrZWZpbGUub3MyIG1ha2UuZGxscworIworIyBOb3RlcyAoZnJvbSBKIEogRyBSaXBvbGwpCisjIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgVGhlIGBtYWtlLmRlZnMnIHJ1bGUgY3JlYXRlcyB0aGUgbmV3ICcuZGVmJyBmaWxlcyBhbmQgb3V0cHV0cyBhIGRpYWdub3N0aWMKKyMgYWJvdXQgc3ltYm9scyB0aGF0IGRpc2FwcGVhciBmcm9tIG9uZSByZWxlYXNlIHRvIHRoZSBvdGhlciwgYXMgd2VsbCBhcworIyBjaGVja3MgYWJvdXQgdGhlIG5ldyAnLmRlZicgY29uc2lzdGVuY3kuICBJZiB0aGVyZSB3ZXJlIG5vIHByb2JsZW1zLCB0aGUKKyMgbWFpbnRhaW5lciBpcyBmcmVlIHRvIHJlcGxhY2UgdGhlIGAucmVmJyBmaWxlcyB3aXRoIHRoZSBuZXdlciBvbmVzIHVzaW5nIHRoZQorIyBgc2F2ZS5kZWZzJyBydWxlLiAgU28sIHRoZSBvbmx5IHRvdWdoIHdvcmsgaXMgZW5zdXJpbmcgdGhhdCB0aGUgc3ltYm9scyB0aGF0CisjIGRpc2FwcGVhciBhcmUgbm90IGVzc2VudGlhbC4KKyMKKyMgSSBmaXJzdCB0aG91Z2h0IGFib3V0IGtpbGxpbmcgJ19uY18qJyBzeW1ib2xzLCBidXQgaXQgc2VlbXMgdGhhdCBzb21lIG9mCisjIHRoZW0gLS1fbmNfcGFuZWxfaG9vaywgX25jX2FkYSosIGV0Yy0tIGFyZSBuZWVkZWQgb3V0c2lkZSBuY3Vyc2VzLmRsbC4gCisjIEhvd2V2ZXIsIHRoZSB3aG9sZSBzaXplIG9mIHRoZSBleHBvcnQgdGFibGUgd2lsbCBub3QgYmUgbGFyZ2VyIHRoYW4gMWsgb3IKKyMgc28uCisjCisjIFtpbnN0YWxsYXRpb25dCisjCisjIFRoZSB3YXkgdGhpbmdzIGFyZSBoYW5kbGVkIGluIG1pc2MvTWFrZWZpbGUgaXMgbm90IHdlbGwgc3VpdGVkIGZvciBPUy8yLAorIyB3aGVyZSBvbmx5IGVteC5zcmMgaXMgbmVlZGVkLiAgVGh1cywgSSd2ZSB3cml0dGVuIGEgZmV3IHdyYXBwZXIgcnVsZXMgaW4KKyMgTWFrZWZpbGUub3MyIHRoYXQgaGFuZGxlIGluc3RhbGxhdGlvbi9kZWluc3RhbGxhdGlvbi4KKyMKKyMgW2Rpc3RyaWJ1dGlvbl0KKyMKKyMgVGhlcmUncyBhbHNvIGEgbmV3IHJ1bGUgdGhhdCBjb25maWd1cmVzIGFuZCBidWlsZHMgYSBzb3J0IG9mIGJpbmFyeQorIyBkaXN0cmlidXRpb24sIG11Y2ggbGlrZSB0aGUgb25lIEkgcHJlcGFyZWQgZm9yIDEuOS45ZS4gIEl0J3MgYG9zMmRpc3QnLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYWxsIDo6IGNvbmZpZworCisjIFRoaXMgaXMgZm9yIGNvbmZpZ3VyaW5nCisKKyMgV2hhdCBpcyBhIHVzZWZ1bCB2YWx1ZSBmb3IgdGhpcz8KK0NPTkZJR19PUFRTCT0gLS1lbmFibGUtdGVybWNhcAorV1dXR0VUCQk9IGx5bnggLXNvdXJjZQorTVZfRgkJPSBtdiAtZgorRExMX0xOX09QVFMJPSAtWmNydGRsbCAtWmRsbCAtWm9tZiAtWm10CisKK2NvbmZpZzogY29uZmlnLmNhY2hlCisKK2NvbmZpZy5jYWNoZTogY29uZmlndXJlLmNtZCBjb25maWd1cmUKKwktJChNVl9GKSAkQCAkQC5yZWYKKwljb25maWd1cmUuY21kICQoQ09ORklHX09QVFMpCisKK2NvbmZpZ3VyZS5jbWQ6IGNvbmZpZ3VyZSBjb252ZXJ0X2NvbmZpZ3VyZS5wbAorCXBlcmwgY29udmVydF9jb25maWd1cmUucGwgY29uZmlndXJlID4gJEAKKworY29udmVydF9jb25maWd1cmUucGw6CisJJChXV1dHRVQpIGZ0cDovL2Z0cC5tYXRoLm9oaW8tc3RhdGUuZWR1L3B1Yi91c2Vycy9pbHlhL29zMi8kQCA+ICRACisKK2luc3RhbGwgOjoKKwllY2hvICoqKgorCWVjaG8gKioqIERvIG5vdCB1c2UgdGhpcyBjb21tYW5kLiBVc2UgaW5zdGFsbC5vczIgaW5zdGVhZC4KKwllY2hvICoqKgorCWV4aXQgMgorCitpbnN0YWxsLm9zMiA6IGluc3RhbGwuZW14ZGF0YSBpbnN0YWxsLmxpYnMgaW5zdGFsbC5wcm9ncworCitpbmNsdWRlIC4vTWFrZWZpbGUKKworYWxsIDo6IG1ha2UuZGxscworCisjCisjIERMTHMgYW5kIHRoYXQgc3R1ZmYKKyMKKworTElCUkFSSUVTID0gbmN1cnNlcyBmb3JtIG1lbnUgcGFuZWwKKworRExMX1RBRyA9ICQoTkNVUlNFU19NQUpPUikKK0xJQl9UQUcgPSBfcworCitETExfUk9PVFMgPSAkKGFkZHN1ZmZpeCAkKERMTF9UQUcpLCAkKExJQlJBUklFUykpCitETExTID0gJChhZGRzdWZmaXggLmRsbCwgJChhZGRwcmVmaXggLi9saWIvLCAkKERMTF9ST09UUykpKQorCitMSUJfUk9PVFMgPSAkKGFkZHN1ZmZpeCAkKExJQl9UQUcpLCAkKExJQlJBUklFUykpCitMSUJTID0gJChhZGRzdWZmaXggLmxpYiwgJChhZGRwcmVmaXggLi9saWIvLCAkKExJQl9ST09UUykpKQorCitMSUJTX0FPVVQgPSAkKGFkZHN1ZmZpeCAuYSwgJChhZGRwcmVmaXggLi9saWIvLCAkKExJQl9ST09UUykpKQorCitERUZTID0gJChhZGRzdWZmaXggLmRlZiwgJChhZGRwcmVmaXggLi9taXNjLywgJChMSUJSQVJJRVMpKSkKKworRExMX1NJR05BVFVSRSA9IE5DdXJzZXMtJChOQ1VSU0VTX01BSk9SKS0kKE5DVVJTRVNfTUlOT1IpLSQoTkNVUlNFU19QQVRDSCkKKworLi9saWIvJSQoTElCX1RBRykubGliIDogLi9taXNjLyUuZGVmCisJZW14aW1wIC1vICRAICQ8CisKKy4vbGliLyUkKExJQl9UQUcpLmEgOiAuL21pc2MvJS5kZWYKKwllbXhpbXAgLW8gJEAgJDwKKworLi9saWIvJSQoRExMX1RBRykuZGxsIDogLi9saWIvJS5hCisJZW14b21mIC1vIC4vbGliLyQqJChETExfVEFHKS5saWIgJDwKKwlpZiBbICIkKiIgPSAibmN1cnNlcyIgXTsgdGhlbiBcCisJCWdjYyAkKExERkxBR1MpICQoRExMX0xOX09QVFMpIC4vbGliLyQqJChETExfVEFHKS5saWIgXAorCQkJCS4vbWlzYy8kKi5kZWYgLW8gJEA7IFwKKwllbHNlIFwKKwkJZ2NjICQoTERGTEFHUykgJChETExfTE5fT1BUUykgLi9saWIvJCokKERMTF9UQUcpLmxpYiBcCisJCQkJLi9saWIvbmN1cnNlcyQoTElCX1RBRykubGliIC4vbWlzYy8kKi5kZWYgLW8gJEA7IFwKKwlmaQorCS1ybSAtZiAuL2xpYi8kKiQoRExMX1RBRykubGliCisKK21ha2UuZGxscyA6ICQoREVGUykgJChMSUJTKSAkKERMTFMpICQoTElCU19BT1VUKQorCiskKERFRlMpIDogbWFrZS5kZWZzCisKK0xJQkRJUgk9ICQoREVTVERJUikkKGxpYmRpcikKKyQoTElCRElSKSA6CisJbWtkaXIgLXAgJEAKKworaW5zdGFsbC5saWJzIDo6ICQoTElCUykgJChETExTKSAkKExJQkRJUikKKwlAZm9yIGkgaW4gJChETExfUk9PVFMpOyBkbyBcCisJZWNobyBpbnN0YWxsaW5nIC4vbGliLyQkaS5kbGwgYXMgJChMSUJESVIpLyQkaS5kbGw7IFwKKwkkKElOU1RBTExfREFUQSkgLi9saWIvJCRpLmRsbCAkKExJQkRJUikvJCRpLmRsbDsgZG9uZQorCUBmb3IgaSBpbiAkKExJQl9ST09UUyk7IGRvIFwKKwllY2hvIGluc3RhbGxpbmcgLi9saWIvJCRpLmxpYiBhcyAkKExJQkRJUikvJCRpLmxpYjsgXAorCSQoSU5TVEFMTF9EQVRBKSAuL2xpYi8kJGkubGliICQoTElCRElSKS8kJGkubGliOyBkb25lCisKK3VuaW5zdGFsbC5saWJzIDo6CisJLUBmb3IgaSBpbiAkKERMTF9ST09UUyk7IGRvIFwKKwllY2hvIHVuaW5zdGFsbGluZyAkKExJQkRJUikvJCRpLmRsbDsgXAorCXJtIC1mICQoTElCRElSKS8kJGkuZGxsOyBkb25lCisJLUBmb3IgaSBpbiAkKExJQl9ST09UUyk7IGRvIFwKKwllY2hvIHVuaW5zdGFsbGluZyAkKExJQkRJUikvJCRpLmxpYjsgXAorCXJtIC1mICQoTElCRElSKS8kJGkubGliOyBkb25lCisKK21ha2UuZGVmcyA6CisJZm9yIGkgaW4gJChMSUJSQVJJRVMpOyBkbyBcCisJZWNobyBMSUJSQVJZICQke2l9JChETExfVEFHKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4gLi9taXNjLyQkaS5kZWY7IFwKKwllY2hvIERFU0NSSVBUSU9OIFwiJChETExfU0lHTkFUVVJFKSwgbW9kdWxlICQkaVwiID4+IC4vbWlzYy8kJGkuZGVmOyBcCisJZWNobyBDT0RFIExPQURPTkNBTEwgPj4gLi9taXNjLyQkaS5kZWY7IFwKKwllY2hvIERBVEEgTE9BRE9OQ0FMTCBOT05TSEFSRUQgTVVMVElQTEUgPj4gLi9taXNjLyQkaS5kZWY7IFwKKwllY2hvIEVYUE9SVFMgPj4gLi9taXNjLyQkaS5kZWY7IFwKKwllY2hvIENyZWF0aW5nICQkaS5kZWY7IFwKKwkoY21kIC9DICIuXFxtaXNjXFxtYWtlZGVmLmNtZCAuL2xpYi8kJGkuYSAuL21pc2MvJCRpLnJlZiA+PiAuL21pc2MvJCRpLmRlZiIgXAorCSAmJiBjbWQgL0MgIi5cXG1pc2NcXGNoa2RlZi5jbWQgLi9taXNjLyQkaS5kZWYiKSBcCisJfHwgZXhpdCAxOyBcCisJZG9uZQorCXRvdWNoIG1ha2UuZGVmcworCitzYXZlLmRlZnMgOgorCWZvciBpIGluICQoTElCUkFSSUVTKTsgZG8gXAorCXRlc3QgLWYgLi9taXNjLyQkaS5kZWYgJiYgY3AgLi9taXNjLyQkaS5kZWYgLi9taXNjLyQkaS5yZWY7IFwKKwlkb25lCisKK2NsZWFuIFwKK29zMmNsZWFuIDo6CisJLXJtIC1mICQoRExMUykgJChMSUJTKQorCityZWFsY2xlYW4gOjoKKwktcm0gLWYgJChhZGRwcmVmaXggLi9taXNjLywgJChhZGRzdWZmaXggLmRlZiwgJChMSUJSQVJJRVMpKSkKKworIworIyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIG1pc2MvTWFrZWZpbGUKKyMKKworVElDRElSID0gJChERVNURElSKSQoZGF0YWRpcikvdGVybWluZm8KK1RBQlNFVERJUiA9ICQoREVTVERJUikkKGRhdGFkaXIpL3RhYnNldAorCiskKFRJQ0RJUikgOgorCW1rZGlyIC1wICRACisKK2luc3RhbGwgXAoraW5zdGFsbC5lbXhkYXRhIDo6ICQoVElDRElSKQorCS1Acm0gLWZyICQoVElDRElSKS8qCisJZWNobyBCdWlsZGluZyB0ZXJtaW5mbyBkYXRhYmFzZSwgcGxlYXNlIHdhaXQuLi4KKwlzZXQgVEVSTUlORk89JChUSUNESVIpOyAuL3Byb2dzL3RpYyAuL21pc2MvZW14LnNyYworCWVjaG8gSW5zdGFsbGluZyB0aGUgdGVybWluZm8gY2xlYW5lciBhbmQgdGhlIHNvdXJjZXMuLi4KKwljcCAuL21pc2MvZW14LnNyYyAuL21pc2MvY2xlYW50aWMuY21kICQoVElDRElSKQorCS4vbWlzYy9jbGVhbnRpYy5jbWQgJChUSUNESVIpCisKK3VuaW5zdGFsbCBcCit1bmluc3RhbGwuZW14ZGF0YSA6OgorCS1jZCAkKFRJQ0RJUikgJiYgcm0gLXJmICoKKwktY2QgJChUQUJTRVRESVIpICYmIHJtIC1yZiAqCisKKyMKKyMgVGhpcyBpcyBmb3IgcHJlcGFyaW5nIGJpbmFyeSBkaXN0cmlidXRpb25zCisjCisKK09TMk5BTUU9bmN1cnNlcy0kKE5DVVJTRVNfTUFKT1IpLiQoTkNVUlNFU19NSU5PUiktZW14CisKKyMKKyMgRklYTUU6IHRoaXMgYXNzdW1lcyB0aGF0IHdlIGNhbiByZXJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCwgY2hhbmdpbmcgb25seQorIyB0aGUgaW5zdGFsbC1wcmVmaXguICBUaGF0IG1lYW5zIHdlIGNhbm5vdCBwcm92aWRlICJpbnRlcmVzdGluZyIgb3B0aW9ucworIyB3aGVuIGJ1aWxkaW5nLgorIworb3MyZGlzdCA6CisJJChNQUtFKSAtZiBNYWtlZmlsZS5vczIgb3MyY2xlYW4KKwkuL2NvbmZpZ3VyZSAtLXdpdGhvdXQtZGVidWcgLS13aXRoLWluc3RhbGwtcHJlZml4PWBwd2R8c2VkIC1lICdzQF4uOkBAJ2AvJChPUzJOQU1FKQorCSQoTUFLRSkgLWYgTWFrZWZpbGUub3MyICQoQ0ZfTUZMQUdTKSBpbnN0YWxsLm9zMgorCS1ybSAtZiAkKE9TMk5BTUUpLnppcAorCWVjaG8gTkN1cnNlcy0kKE5DVVJTRVNfTUFKT1IpLiQoTkNVUlNFU19NSU5PUiktJChOQ1VSU0VTX1BBVENIKSBmb3IgZW14ID4gJChPUzJOQU1FKS9GSUxFX0lELkRJWgorCWVjaG8gQmluYXJ5IHJlbGVhc2UuID4+ICQoT1MyTkFNRSkvRklMRV9JRC5ESVoKKwl6aXAgLXIgJChPUzJOQU1FKS56aXAgLi8kKE9TMk5BTUUpCisKK2NsZWFuIFwKK29zMmNsZWFuIDo6CisJLXJtIC1yZiAkKE9TMk5BTUUpCisJLXJtIC1mICQoT1MyTkFNRSkuemlwCisKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NDQ1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9ORVdTCkBAIC0wLDAgKzEsODgwMyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBORVdTLHYgMS4xMzIwIDIwMDgvMTEvMDIgMDA6NTY6MjIgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBsb2cgb2YgY2hhbmdlcyB0aGF0IG5jdXJzZXMgaGFzIGdvbmUgdGhyb3VnaCBzaW5jZSBaZXlkIHN0YXJ0ZWQKK3dvcmtpbmcgd2l0aCBQYXZlbCBDdXJ0aXMnIG9yaWdpbmFsIHdvcmssIHBjdXJzZXMsIGluIDE5OTIuCisKK0NoYW5nZXMgdGhyb3VnaCAxLjkuOWUgYXJlIHJlY29yZGVkIGJ5IFpleWQgTSBCZW4tSGFsaW0uCitDaGFuZ2VzIHNpbmNlIDEuOS45ZSBhcmUgcmVjb3JkZWQgYnkgVGhvbWFzIEUgRGlja2V5LgorCitDb250cmlidXRvcnMgaW5jbHVkZSB0aG9zZSB3aG8gaGF2ZSBwcm92aWRlZCBwYXRjaGVzIChldmVuIHNtYWxsIG9uZXMpLCBhcyB3ZWxsCithcyB0aG9zZSB3aG8gcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gKGJ1ZyByZXBvcnRzLCBhbmFseXNlcykuICBDaGFuZ2VzIHdpdGgKK25vIGNpdGVkIGF1dGhvciBhcmUgdGhlIHdvcmsgb2YgVGhvbWFzIEUgRGlja2V5IChURCkuCisKK0EgZmV3IGNvbnRyaWJ1dG9ycyBhcmUgZ2l2ZW4gaW4gdGhpcyBmaWxlIGJ5IHRoZWlyIGluaXRpYWxzLgorVGhleSBlYWNoIGFjY291bnQgZm9yIG9uZSBwZXJjZW50IG9yIG1vcmUgb2YgdGhlIGNoYW5nZXMgc2luY2UgMS45LjllLgorU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZ1bGwgbmFtZXMuCisKK0NoYW5nZXMgdGhyb3VnaCAxLjkuOWUgZGlkIG5vdCBjcmVkaXQgYWxsIGNvbnRyaWJ1dGlvbnM7CitpdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIHRoaXMgaW5mb3JtYXRpb24uCisKKzIwMDgxMTAyIDUuNyByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKworMjAwODEwMjUKKwkrIGFkZCBhIG1hbnBhZ2UgdG8gZGlzY3VzcyBtZW1vcnkgbGVha3MuCisJKyBhZGQgc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBmb3IgUU5YIChvdGhlciB0aGFuIGxpYnRvb2wsIHdoaWNoCisJICBkb2VzIG5vdCB3b3JrIHdlbGwgb24gdGhhdCBwbGF0Zm9ybSkuCisJKyBidWlsZC1maXggZm9yIFFOWCBDKysgYmluZGluZy4KKworMjAwODEwMTgKKwkrIGJ1aWxkLWZpeGVzIGZvciBPUy8yIEVNWC4KKwkrIG1vZGlmeSBmb3JtIGxpYnJhcnkgdG8gYWNjZXB0IGNvbnRyb2wgY2hhcmFjdGVycyBzdWNoIGFzIG5ld2xpbmUKKwkgIGluIHNldF9maWVsZF9idWZmZXIoKSwgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMgKHJlcG9ydCBieQorCSAgTml0IEtoYWlyKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGFzc3VtZSAtLXdpdGhvdXQtaGFzaGVkLWRiIHdoZW4KKwkgIC0tZGlzYWJsZS1kYXRhYmFzZSBpcyB1c2VkLgorCSsgYWRkICItZSIgb3B0aW9uIGluIG5jdXJzZXMvTWFrZWZpbGUuaW4gd2hlbiBnZW5lcmF0aW5nIHNvdXJjZS1maWxlcworCSAgdG8gZm9yY2UgZWFybGllciBleGl0IGlmIHRoZSBidWlsZCBlbnZpcm9ubWVudCBmYWlscyB1bmV4cGVjdGVkbHkKKwkgIChwcm9tcHRlZCBieSBwYXRjaCBieSBBZHJpYW4gQnVuaykuCisJKyBjaGFuZ2UgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgQ0ZfVVRGOF9MSUIsIGltcHJvdmVkIHZhcmlhbnQgb2YKKwkgIENGX0xJQlVURjguCisKKzIwMDgxMDEyCisJKyBhZGQgdGVyYXRlcm00LjU5IHRlcm1pbmZvIGVudHJ5LCB1c2UgdGhhdCBhcyBwcmltYXJ5IHRlcmF0ZXJtIGVudHJ5LCByZW5hbWUKKwkgIG9yaWdpbmFsIHRvIHRlcmF0ZXJtMi4zIC1URAorCSsgdXBkYXRlICJnbm9tZSIgdGVybWluZm8gdG8gMi4yMi4zIC1URAorCSsgdXBkYXRlICJrb25zb2xlIiB0ZXJtaW5mbyB0byAxLjYuNiwgbmVlZHMgdG9kYXkncyBmaXggZm9yIHRpYyAtVEQKKwkrIGFkZCAiYXRlcm0iIHRlcm1pbmZvIC1URAorCSsgYWRkICJsaW51eDIuNi4yNiIgdGVybWluZm8gLVRECisJKyBhZGQgbG9naWMgdG8gdGljIGZvciBjYW5jZWxsaW5nIHN0cmluZ3MgaW4gdXNlci1kZWZpbmVkIGNhcGFiaWxpdGllcywKKwkgIG92ZXJsb29rZWQgdGlsIG5vdy4KKworMjAwODEwMTEKKwkrIHVwZGF0ZSBodG1sIGRvY3VtZW50YXRpb24uCisJKyBhZGQgLW0gYW5kIC1zIG9wdGlvbnMgdG8gdGVzdC9rZXluYW1lcy5jIGFuZCB0ZXN0L2tleV9uYW1lcy5jIHRvIHRlc3QKKwkgIHRoZSBtZXRhKCkgZnVuY3Rpb24gd2l0aCBrZXluYW1lKCkgb3Iga2V5X25hbWUoKSwgcmVzcGVjdGl2ZWx5LgorCSsgY29ycmVjdCByZXR1cm4gdmFsdWUgb2Yga2V5X25hbWUoKSBvbiBlcnJvcjsgaXQgaXMgbnVsbC4KKwkrIGRvY3VtZW50IHNvbWUgdW5yZXNvbHZlZCBpc3N1ZXMgZm9yIHJwYXRoIGFuZCBwdGhyZWFkcyBpbiBUTy1ETy4KKwkrIGZpeCBhIG1pc3NpbmcgcHJvdG90eXBlIGZvciBpb2N0bCgpIG9uIE9wZW5CU0QgaW4gdHNldC5jCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtdGljLWRlcGVuZHMgdG8gbWFrZSBleHBsaWNpdCB3aGV0aGVyCisJICB0aWMgbGlicmFyeSBkZXBlbmRzIG9uIG5jdXJzZXMvbmN1cnNlc3cgbGlicmFyeSwgYW1lbmRzIGNoYW5nZSBmcm9tCisJICAyMDA4MDgyMyAocHJvbXB0ZWQgYnkgRGViaWFuICM1MDE0MjEpLgorCisyMDA4MTAwNAorCSsgc29tZSBidWlsZC1maXhlcyBmb3IgY29uZmlndXJlIC0tZGlzYWJsZS1leHQtZnVuY3MgKGluY29tcGxldGUsIGJ1dAorCSAgd29ya3MgZm9yIEMvQysrIHBhcnRzKS4KKwkrIGltcHJvdmUgY29uZmlndXJlLWNoZWNrIGZvciBhd2tzIHVuYWJsZSB0byBoYW5kbGUgbGFyZ2Ugc3RyaW5ncywgZS5nLgorCSAgQUlYIDUuMSB3aG9zZSBhd2sgc2lsZW50bHkgZ2l2ZXMgdXAgb24gbGFyZ2UgcHJpbnRmJ3MuCisKKzIwMDgwOTI3CisJKyBmaXggYnVpbGQgZm9yIC0td2l0aC1kbWFsbG9jIGJ5IHdvcmthcm91bmQgZm9yIHJlZGVmaW5pdGlvbiBvZgorCSAgc3RybmR1cCBiZXR3ZWVuIHN0cmluZy5oIGFuZCBkbWFsbG9jLmgKKwkrIGZpeCBidWlsZCBmb3IgLS1kaXNhYmxlLXNpZ3dpbmNoCisJKyBhZGQgZW52aXJvbm1lbnQgdmFyaWFibGUgTkNVUlNFU19HUE1fVEVSTVMgdG8gYWxsb3cgb3ZlcnJpZGUgdG8gdXNlCisJICBHUE0gb24gdGVybWluYWxzIG90aGVyIHRoYW4gImxpbnV4IiwgZXRjLgorCSsgZGlzYWJsZSBHUE0gbW91c2Ugc3VwcG9ydCB3aGVuICRURVJNIGRvZXMgbm90IGhhcHBlbiB0byBjb250YWluCisJICAibGludXgiLCBzaW5jZSBHcG1fT3BlbigpIG5vIGxvbmdlciBsaW1pdHMgaXRzIGFzc2VydGlvbiB0byB0ZXJtaW5hbHMKKwkgIHRoYXQgaXQgbWlnaHQgaGFuZGxlLCBlLmcuLCB3aXRoaW4gInNjcmVlbiIgaW4geHRlcm0uCisJKyByZXNldCBtb3VzZSBmaWxlLWRlc2NyaXB0b3Igd2hlbiB1bmxvYWRpbmcgR1BNIGxpYnJhcnkgKHJlcG9ydCBieQorCSAgTWlyb3NsYXYgTGljaHZhcikuCisJKyBmaXggYnVpbGQgZm9yIC0tZGlzYWJsZS1sZWFrcyAtLWVuYWJsZS13aWRlYyAtLXdpdGgtdGVybWxpYgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgdXNlIGltcHJvdmVkIGluaXRpYWxpemF0aW9uIGZvciBzb2Z0LWxhYmVsIGtleXMgaW4gQWRhOTUgc2FtcGxlIGNvZGUuCisJKyBkaXNjYXJkIGludGVybmFsIHN5bWJvbCBfbmNfc2xrX2Zvcm1hdCAodW51c2VkIHNpbmNlIDIwMDgwMTEyKS4KKwkrIG1vdmUgY2FsbCBvZiBzbGtfcGFpbnRfaW5mbygpIGZyb20gX25jX3Nsa19pbml0aWFsaXplKCkgdG8KKwkgIHNsa19pbnRlcm5fcmVmcmVzaCgpLCBpbXByb3ZpbmcgaW5pdGlhbGl6YXRpb24uCisKKzIwMDgwOTI1CisJKyBmaXggYnVnIGluIG1vdXNlIGNvZGUgZm9yIEdQTSBmcm9tIDIwMDgwOTIwIGNoYW5nZXMgKHJlcG9ydGVkIGluCisJICBEZWJpYW4gIzUwMDEwMywgYWxzbyBNaXJvc2xhdiBMaWNodmFyKS4KKworMjAwODA5MjAKKwkrIGZpeCBzaGFyZWQtbGlicmFyeSBydWxlcyBmb3IgY3lnd2luIHdpdGggdGljLSBhbmQgdGluZm8tbGlicmFyaWVzLgorCSsgZml4IGEgbWVtb3J5IGxlYWsgd2hlbiBmYWlsdXJlIHRvIGNvbm5lY3QgdG8gR1BNLgorCSsgY29ycmVjdCBjaGVjayBmb3Igbm90aW1lb3V0KCkgaW4gd2dldGNoKCkgKHJlcG9ydCBvbiBsaW51eC5yZWRoYXQKKwkgIG5ld3Nncm91cCBieSBGdXJ0aXZlQmVydGllKS4KKwkrIGFkZCBhbiBleGFtcGxlIHdhcm5pbmctc3VwcHJlc3Npb24gZmlsZSBmb3IgdmFsZ3JpbmQsCisJICBtaXNjL25jdXJzZXMuc3VwcCAoYmFzZWQgb24gZXhhbXBsZSBmcm9tIFJldWJlbiBUaG9tYXMpCisKKzIwMDgwOTEzCisJKyBjaGFuZ2Ugc2hhcmVkLWxpYnJhcnkgY29uZmlndXJhdGlvbiBmb3IgT3BlbkJTRCwgbWFrZSBycGF0aCB3b3JrLgorCSsgYnVpbGQtZml4ZXMgZm9yIHVzaW5nIGxpYnV0ZjgsIGUuZy4sIG9uIE9wZW5CU0QgMy43CisKKzIwMDgwOTA3CisJKyBjb3JyZWN0ZWQgZml4IGZvciAtLWVuYWJsZS13ZWFrLXN5bWJvbHMgKHJlcG9ydCBieSBGcmVkZXJpYyBMIFcKKwkgIE1ldW5pZXIpLgorCisyMDA4MDkwNgorCSsgY29ycmVjdGVkIGdjYyBvcHRpb25zIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIG9uIElSSVg2NC4KKwkrIGFkZCBjb25maWd1cmUgY2hlY2sgZm9yIGF3ayBwcm9ncmFtcyB1bmFibGUgdG8gaGFuZGxlIGJpZy1zdHJpbmdzLAorCSAgdXNlIHRoYXQgdG8gaW1wcm92ZSB0aGUgZGVmYXVsdCBmb3IgLS1lbmFibGUtYmlnLXN0cmluZ3Mgb3B0aW9uLgorCSsgbWFrZWZpbGUtZml4ZXMgZm9yIC0tZW5hYmxlLXdlYWstc3ltYm9scyAocmVwb3J0IGJ5IEZyZWRlcmljIEwgVworCSAgTWV1bmllcikuCisJKyB1cGRhdGUgdGVzdC9jb25maWd1cmUgc2NyaXB0LgorCSsgYWRhcHQgaWZkZWYncyBmcm9tIGxpYnJhcnkgdG8gbWFrZSB0ZXN0L3ZpZXcuYyBidWlsZCB3aGVuIG1icnRvd2MoKQorCSAgaXMgdW5hdmFpbGFibGUsIGUuZy4sIHdpdGggSFBVWCAxMC4yMC4KKwkrIGFkZCBjb25maWd1cmUgY2hlY2sgZm9yIHdjc3J0b21icywgbWJzcnRvd2NzLCB3aGljaCBhcmUgdXNlZCBpbgorCSAgdGVzdC9uY3Vyc2VzLmMsIGFuZCB1c2Ugd2NzdG9tYnMsIG1ic3Rvd2NzIGluc3RlYWQgaWYgYXZhaWxhYmxlLAorCSAgZml4aW5nIGJ1aWxkIG9mIG5jdXJzZXcgZm9yIEhQVVggMTEuMDAKKworMjAwODA4MzAKKwkrIGZpeGVzIHRvIG1ha2UgQWRhOTUgZGVtb19wYW5lbHMoKSBleGFtcGxlIHdvcmsuCisJKyBtb2RpZnkgQWRhOTUgJ3JhaW4nIHRlc3QgcHJvZ3JhbSB0byBhY2NlcHQga2V5Ym9hcmQgY29tbWFuZHMgbGlrZSB0aGUKKwkgIEMtdmVyc2lvbi4KKwkrIG1vZGlmeSBCZU9TLXNwZWNpZmljIGlmZGVmJ3MgdG8gYnVpbGQgb24gSGFpa3UgKHBhdGNoIGJ5IFNjb3R0CisJICBNY2NyZWFyeSkuCisJKyBhZGQgY29uZmlndXJlLWNoZWNrIHRvIHNlZSBpZiB0aGUgc3RkIG5hbWVzcGFjZSBpcyBsZWdhbCBmb3IgY2VycgorCSAgYW5kIGVuZGwsIHRvIGZpeCBhIGJ1aWxkIGlzc3VlIHdpdGggVHJ1NjQuCisJKyBjb25zaXN0ZW50bHkgdXNlIE5DVVJTRVNfQk9PTCBpbiBsaWJfZ2VuLmMKKwkrIGZpbHRlciAjbGluZSdzIGZyb20gbGliX2dlbi5jCisJKyBjaGFuZ2UgZGVsaW1pdGVyIGluIE1LbGliX2dlbi5zaCBmcm9tICclJyB0byAnQCcsIHRvIGF2b2lkCisJICBzdWJzdGl0dXRpb24gYnkgSUJNIHhsYyB0byAnIycgYXMgcGFydCBvZiBpdHMgZXh0ZW5zaW9ucyB0byBkaWdyYXBocy4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgZnJvbQorCQlodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9jb25maWcKKwkgIChjYXZlYXQgLSBpdHMgbWFpbnRhaW5lciByZW1vdmVkIHN1cHBvcnQgZm9yIG9sZGVyIExpbnV4IHN5c3RlbXMpLgorCisyMDA4MDgyMworCSsgbW9kaWZ5IGNvbmZpZ3VyZSBjaGVjayBmb3IgcHRocmVhZCBsaWJyYXJ5IHRvIHdvcmsgd2l0aCBPU0YvMSA1LjEsCisJICB3aGljaCB1c2VzICNkZWZpbmUncyB0byBhc3NvY2lhdGUgaXRzIGhlYWRlciBhbmQgbGlicmFyeS4KKwkrIHVzZSBwdGhyZWFkX211dGV4YXR0cl9pbml0KCkgZm9yIGluaXRpYWxpemluZyBwdGhyZWFkX211dGV4YXR0cl90LAorCSAgbWFrZXMgdGhyZWFkZWQgY29kZSB3b3JrIG9uIEhQVVggMTEuMjMKKwkrIGZpeCBhIGJ1ZyBpbiBkZW1vX21lbnVzIGluIGZyZWVpbmcgbWVudXMgKGNmOiAyMDA4MDgwNCkuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGljIGxpYnJhcnkgaXMgdXNlZCAoYW5kCisJICBwb3NzaWJseSByZW5hbWVkKSB0byByZW1vdmUgaXRzIGRlcGVuZGVuY3kgdXBvbiBuY3Vyc2VzL25jdXJzZXcKKwkgIGxpYnJhcnkgKHBhdGNoIGJ5IERyIFdlcm5lciBGaW5rKS4KKwkrIGNvcnJlY3QgbWFucGFnZSBmb3IgbWVudV9mb3JlKCkgd2hpY2ggZ2F2ZSB3cm9uZyBkZWZhdWx0IGZvcgorCSAgdGhlIGF0dHJpYnV0ZSB1c2VkIHRvIGRpc3BsYXkgYSBzZWxlY3RlZCBlbnRyeSAocmVwb3J0IGJ5IE1pa2UgR3JhbikuCisJKyBhZGQgRXRlcm0tMjU2Y29sb3IsIEV0ZXJtLTg4Y29sb3IgYW5kIHJ4dnQtODhjb2xvciAocHJvbXB0ZWQgYnkKKwkgIERlYmlhbiAjNDk1ODE1KSAtVEQKKworMjAwODA4MTYKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXdlYWstc3ltYm9scyB0byB0dXJuIG9uIG5ldyBmZWF0dXJlLgorCSsgYWRkIGNvbmZpZ3VyZS1jaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mIHdlYWsgc3ltYm9scy4KKwkrIG1vZGlmeSBsaW5rYWdlIHdpdGggcHRocmVhZCBsaWJyYXJ5IHRvIHVzZSB3ZWFrIHN5bWJvbHMgc28gdGhhdAorCSAgYXBwbGljYXRpb25zIG5vdCBsaW5rZWQgdG8gdGhhdCBsaWJyYXJ5IHdpbGwgbm90IHVzZSB0aGUgbXV0ZXhlcywKKwkgIGV0Yy4gIFRoaXMgcmVsaWVzIG9uIGdjYywgYW5kIG1heSBiZSBwbGF0Zm9ybS1zcGVjaWZpYyAocGF0Y2ggYnkgRHIKKwkgIFdlcm5lciBGaW5rKS4KKwkrIGFkZCBub3RlIHRvIElOU1RBTEwgdG8gZG9jdW1lbnQgbGltaXRhdGlvbiBvZiByZW5hbWluZyBvZiB0aWMgbGlicmFyeQorCSAgdXNpbmcgdGhlIC0td2l0aC10aWNsaWIgY29uZmlndXJlIG9wdGlvbiAocmVwb3J0IGJ5IERyIFdlcm5lciBGaW5rKS4KKwkrIGRvY3VtZW50IChpbiBtYW5wYWdlKSB3aHkgdHB1dHMgZG9lcyBub3QgZGV0ZWN0IEkvTyBlcnJvcnMgKHByb21wdGVkCisJICBieSBjb21tZW50cyBieSBTYW11ZWwgVGhpYmF1bHQpLgorCSsgZml4IHJlbWFpbmluZyB3YXJuaW5ncyBmcm9tIEtsb2N3b3JrIHJlcG9ydC4KKworMjAwODA4MDQKKwkrIG1vZGlmeSBfbmNfcGFuZWxob29rKCkgZGF0YSB0byBhY2NvdW50IGZvciBhIHBlcm1hbmVudCBtZW1vcnkgbGVhay4KKwkrIGZpeCBtZW1vcnkgbGVha3MgaW4gdGVzdC9kZW1vX21lbnVzCisJKyBmaXggbW9zdCB3YXJuaW5ncyBmcm9tIEtsb2N3b3JrIHRvb2wgKHJlcG9ydCBieSBMYXJyeSBaaG91KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IENGX1hPUEVOX1NPVVJDRSBtYWNybyB0byBhZGQgY2FzZSBmb3IKKwkgICJkcmFnb25mbHkiIGZyb20geHRlcm0gIzIzNiBjaGFuZ2VzLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgLS13aXRoLWhhc2hlZC1kYiB0byBsZXQgJExJQlMgb3ZlcnJpZGUgdGhlCisJICBzZWFyY2ggZm9yIHRoZSBkYiBsaWJyYXJ5IChwcm9tcHRlZCBieSByZXBvcnQgYnkgU2Ftc29uIFBpZXJyZSkuCisKKzIwMDgwNzI2CisJKyBidWlsZC1maXhlcyBmb3IgZ2NjIDQuMy4xIChjaGFuZ2VzIHRvIGduYXQgIndhcm5pbmdzIiwgYW5kIEMgaW5saW5pbmcKKwkgIHRocmVzaG9sZHMpLgorCisyMDA4MDcxMworCSsgYnVpbGQtZml4IChyZXBvcnRzIGJ5IENocmlzdGlhbiBFYmVydCwgRnVuZGEgV2FuZykuCisKKzIwMDgwNzEyCisJKyBjb21waWxlci13YXJuaW5nIGZpeGVzIGZvciBTb2xhcmlzLgorCisyMDA4MDcwNQorCSsgdXNlIE5DVVJTRVNfTU9VU0VfTUFTSygpIGluIGRlZmluaXRpb24gb2YgQlVUVE9OX1JFTEVBU0UoKSwgZXRjLiwgdG8KKwkgIG1ha2UgdGhvc2Ugd29yayBwcm9wZXJseSB3aXRoIHRoZSAiLS1lbmFibGUtZXh0LW1vdXNlIiBjb25maWd1cmF0aW9uCisJICAoY2Y6IDIwMDUwMjA1KS4KKwkrIGltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBidWlsZC1jYyBvcHRpb25zIGluIElOU1RBTEwuCisJKyB3b3JrLWFyb3VuZCBhIGJ1ZyBpbiBnY2MgNC4yLjQgb24gQUlYLCB3aGljaCBkb2VzIG5vdCBwYXNzIHRoZQorCSAgLXN0YXRpYy8tZHluYW1pYyBmbGFncyBwcm9wZXJseSB0byBsaW5rZXIsIGNhdXNpbmcgdGVzdC9icyB0bworCSAgbm90IGxpbmsuCisKKzIwMDgwNjI4CisJKyBjb3JyZWN0IHNvbWUgaWZkZWYncyBuZWVkZWQgZm9yIHRoZSBicm9rZW4tbGlua2VyIGNvbmZpZ3VyYXRpb24uCisJKyBtYWtlIGRlYnVnZ2luZyBsaWJyYXJ5J3MgJEJBVURSQVRFIGZlYXR1cmUgd29yayBmb3IgdGVybWNhcAorCSAgaW50ZXJmYWNlLgorCSsgbWFrZSAkTkNVUlNFU19OT19QQURESU5HIGZlYXR1cmUgd29yayBmb3IgdGVybWNhcCBpbnRlcmZhY2UgKHByb21wdGVkCisJICBieSBjb21tZW50IG9uIEZyZWVCU0QgbWFpbGluZyBsaXN0KS4KKwkrIGFkZCBzY3JlZW4ubWx0ZXJtIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgaW1wcm92ZSBtbHRlcm0gYW5kIG1sdGVybStwY2ZrZXlzIHRlcm1pbmZvIGVudHJpZXMgLVRECisKKzIwMDgwNjIxCisJKyByZWdlbmVyYXRlZCBodG1sIGRvY3VtZW50YXRpb24uCisJKyBleHBhbmQgbWFucGFnZSBkZXNjcmlwdGlvbiBvZiBwYXJhbWV0ZXJzIGZvciBmb3JtX2RyaXZlcigpIGFuZAorCSAgbWVudV9kcml2ZXIoKSAocHJvbXB0ZWQgYnkgZGlzY3Vzc2lvbiB3aXRoIEFkYW0gU3ByYWdnKS4KKwkrIGFkZCBudWxsLXBvaW50ZXIgY2hlY2tzIGZvciBjdXJfdGVybSBpbiBiYXVkcmF0ZSgpIGFuZAorCSAgZGVmX3NoZWxsX21vZGUoKSwgZGVmX3Byb2dfbW9kZSgpCisJKyBmaXggc29tZSBtZW1vcnkgbGVha3MgaW4gZGVsc2NyZWVuKCkgYW5kIHdpZGUgYWNzLgorCisyMDA4MDYxNAorCSsgbW9kaWZ5IHRlc3QvZGl0dG8uYyB0byBpbGx1c3RyYXRlIG11bHRpLXRocmVhZGVkIHVzZV9zY3JlZW4oKS4KKwkrIGNoYW5nZSBDQ19TSEFSRURfT1BUUyBmcm9tIC1LUElDIHRvIC14Y29kZT1waWMzMiBmb3IgU29sYXJpcy4KKwkrIGFkZCAiLXNoYXJlZCIgb3B0aW9uIHRvIE1LX1NIQVJFRF9MSUIgZm9yIGdjYyBvbiBTb2xhcmlzIChyZXBvcnQKKwkgIGJ5IFBvb3IgWW9yaWNrKS4KKworMjAwODA2MDcKKwkrIGZpbmlzaCBjaGFuZ2VzIHRvIHdnZXRjaCgpLCBtYWtpbmcgaXQgc3dpdGNoIGFzIG5lZWRlZCB0byB0aGUKKwkgIHdpbmRvdydzIGFjdHVhbCBzY3JlZW4gd2hlbiBjYWxsaW5nIHdyZWZyZXNoKCkgYW5kIHdnZXRuc3RyKCkuICBUaGF0CisJICBhbGxvd3Mgd2dldGNoKCkgdG8gZ2V0IHVzZWQgY29uY3VycmVudGx5IGluIGRpZmZlcmVudCB0aHJlYWRzIHdpdGgKKwkgIHNvbWUgbWlub3IgcmVzdHJpY3Rpb25zLCBlLmcuLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBkZWxldGUgYQorCSAgd2luZG93IHdoaWNoIGlzIGJlaW5nIHVzZWQgaW4gYSB3Z2V0Y2goKS4KKwkrIHNpbXBsaWZ5IG11dGV4J3MsIGNvbWJpbmluZyB0aGUgd2luZG93LSBhbmQgc2NyZWVuLW11dGV4J3MuCisKKzIwMDgwNTMxCisJKyBtb2RpZnkgd2dldGNoKCkgdG8gdXNlIHRoZSBzY3JlZW4gd2hpY2ggY29ycmVzcG9uZHMgdG8gaXRzIHdpbmRvdworCSAgcGFyYW1ldGVyIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gU1A7IHNvbWUgZGVwZW5kZW50IGZ1bmN0aW9ucyBzdGlsbAorCSAgdXNlIFNQIGludGVybmFsbHkuCisJKyBmYWN0b3Igb3V0IG1vc3QgdXNlIG9mIFNQIGluIGxpYl9tb3VzZS5jLCB1c2luZyBwYXJhbWV0ZXIuCisJKyBhZGQgaW50ZXJuYWwgX25jX2tleW5hbWUoKSwgcmVwbGFjaW5nIGtleW5hbWUoKSB0byBhc3NvY2lhdGUgd2l0aCBhCisJICBwYXJ0aWN1bGFyIFNDUkVFTiByYXRoZXIgdGhhbiB0aGUgZ2xvYmFsIFNQLgorCSsgYWRkIGludGVybmFsIF9uY191bmN0cmwoKSwgcmVwbGFjaW5nIHVuY3RybCgpIHRvIGFzc29jaWF0ZSB3aXRoIGEKKwkgIHBhcnRpY3VsYXIgU0NSRUVOIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgU1AuCisJKyBhZGQgaW50ZXJuYWwgX25jX3RyYWNlbW91c2UoKSwgcmVwbGFjaW5nIF90cmFjZW1vdXNlKCkgdG8gZWxpbWluYXRlCisJICBpdHMgYXNzb2NpYXRlZCBnbG9iYWwgYnVmZmVyIF9uY19nbG9iYWxzLnRyYWNlbXNlX2J1ZiBub3cgaW4gU0NSRUVOLgorCSsgYWRkIGludGVybmFsIF9uY190cmFjZWNoYXIoKSwgcmVwbGFjaW5nIF90cmFjZWNoYXIoKSB0byB1c2UgU0NSRUVOIGluCisJICBwcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgX25jX2dsb2JhbHMudHJhY2VjaHJfYnVmIGJ1ZmZlci4KKworMjAwODA1MjQKKwkrIG1vZGlmeSBfbmNfa2V5cGFkKCkgdG8gbWFrZSBpdCBzd2l0Y2ggdGVtcG9yYXJpbHkgYXMgbmVlZGVkIHRvIHRoZQorCSAgc2NyZWVuIHdoaWNoIG11c3QgYmUgdXBkYXRlZC4KKwkrIHdyYXAgY3VyX3Rlcm0gdmFyaWFibGUgdG8gaGVscCBtYWtlIF9uY19rZXltYXAoKSB0aHJlYWQtc2FmZSwgYW5kCisJICBhbHdheXMgc2V0IHRoZSBzY3JlZW4ncyBjb3B5IG9mIHRoaXMgdmFyaWFibGUgaW4gc2V0X2N1cnRlcm0oKS4KKwkrIHJlc3RvcmUgY3Vyc19zZXQoKSBzdGF0ZSBhZnRlciBlbmR3aW4oKS9yZWZyZXNoKCkgKHJlcG9ydC9wYXRjaAorCSAgTWlyb3NsYXYgTGljaHZhcikKKworMjAwODA1MTcKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIG5vdGUgdGhhdCAtLWVuYWJsZS1leHQtY29sb3JzIGFuZAorCSAgLS1lbmFibGUtZXh0LW1vdXNlIGFyZSBub3QgZXhwZXJpbWVudGFsLCBidXQgZXh0ZW5zaW9ucyBmcm9tCisJICB0aGUgbmN1cnNlcyBBQkkgNS4KKwkrIGNvcnJlY3RlZCBtYW5wYWdlIGRlc2NyaXB0aW9uIG9mIHNldGNjaGFyKCkgKGRpc2N1c3Npb24gd2l0aAorCSAgRW1hbnVlbGUgR2lhcXVpbnRhKS4KKwkrIGZpeCBmb3IgYWRkaW5nIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCisJICAocmVwb3J0L3BhdGNoIGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCisyMDA4MDUwMworCSsgbW9kaWZ5IHNjcmVlbi4qIHRlcm1pbmZvIGVudHJpZXMgdXNpbmcgbmV3IHNjcmVlbitma2V5cyB0byBmaXgKKwkgIG92ZXJyaWRkZW4ga2V5cyBpbiBzY3JlZW4ucnh2dCAoRGViaWFuICM0NzgwOTQpIC1URAorCSsgbW9kaWZ5IGludGVybmFsIGludGVyZmFjZXMgdG8gcmVkdWNlIHdnZXRjaCgpJ3MgZGVwZW5kZW5jeSBvbiB0aGUKKwkgIGdsb2JhbCBTUC4KKwkrIHNpbXBsaWZ5IHNvbWUgbG9vcHMgd2l0aCBtYWNyb3MgZWFjaF9zY3JlZW4oKSwgZWFjaF93aW5kb3coKSBhbmQKKwkgIGVhY2hfcmlwb2ZmKCkuCisKKzIwMDgwNDI2CisJKyBjb250aW51ZSBtb2RpZnlpbmcgdGVzdC9kaXR0by5jIHRvd2FyZCBtYWtpbmcgaXQgZGVtb25zdHJhdGUKKwkgIG11bHRpdGhyZWFkZWQgdXNlX3NjcmVlbigpLCB1c2luZyBmaWZvcyB0byBwYXNzIGRhdGEgYmV0d2VlbiBzY3JlZW5zLgorCSsgZml4IHR5cG8gaW4gZm9ybS4zeCAocmVwb3J0IGJ5IE1pa2UgR3JhbikuCisKKzIwMDgwNDE5CisJKyBhZGQgc2NyZWVuLnJ4dnQgdGVybWluZm8gZW50cnkgLVRECisJKyBtb2RpZnkgdGljIC1mIG9wdGlvbiB0byBmb3JtYXQgc3BhY2VzIGFzIFxzIHRvIHByZXZlbnQgdGhlbSBmcm9tCisJICBiZWluZyBsb3N0IHdoZW4gdGhhdCBpcyByZWFkIGJhY2sgaW4gdW5mb3JtYXR0ZWQgc3RyaW5ncy4KKwkrIGltcHJvdmUgdGVzdC9kaXR0by5jLCB1c2luZyBhICJ0YWxrIi1zdHlsZSBsYXlvdXQuCisKKzIwMDgwNDEyCisJKyBjaGFuZ2UgdGVzdC9kaXR0by5jIHRvIHVzZSBvcGVucHR5KCkgYW5kIHh0ZXJtLgorCSsgYWRkIGxvY2tzIGZvciBjb3B5d2luKCksIGR1cHdpbigpLCBvdmVybGFwKCksIG92ZXJsYXkoKSBvbiB0aGVpcgorCSAgd2luZG93IHBhcmFtZXRlcnMuCisJKyBhZGQgbG9ja3MgZm9yIGluaXRzY3IoKSBhbmQgbmV3dGVybSgpIG9uIHVwZGF0ZXMgdG8gdGhlIFNDUkVFTgorCSAgcG9pbnRlci4KKwkrIGZpbmlzaCB0YWJsZSBpbiBjdXJzX3RocmVhZC4zeCBtYW5wYWdlLgorCisyMDA4MDQwNQorCSsgYmVnaW4gdGFibGUgaW4gY3Vyc190aHJlYWQuM3ggbWFucGFnZSBkZXNjcmliaW5nIHRoZSBzY29wZSBvZiBkYXRhCisJICB1c2VkIGJ5IGVhY2ggZnVuY3Rpb24gKG9yIHN5bWJvbCkgZm9yIHRocmVhZGluZyBhbmFseXNpcy4KKwkrIGFkZCBudWxsLXBvaW50ZXIgY2hlY2tzIHRvIHNldHN5eCgpIGFuZCBnZXRzeXgoKSAocHJvbXB0ZWQgYnkKKwkgIGRpc2N1c3Npb24gYnkgTWFydGluIHYuIExvd2lzIGFuZCBKZXJvZW4gUnVpZ3JvayB2YW4gZGVyIFdlcnZlbiBvbgorCSAgcHl0aG9uLWRldjIgbWFpbGluZyBsaXN0KS4KKworMjAwODAzMjkKKwkrIGFkZCBudWxsLXBvaW50ZXIgY2hlY2tzIGluIHNldF90ZXJtKCkgYW5kIGRlbHNjcmVlbigpLgorCSsgbW92ZSBfbmNfd2luZG93cyBpbnRvIF9uY19nbG9iYWxzLCBzaW5jZSB3aW5kb3dzIGNhbiBiZSBwYWRzLCB3aGljaAorCSAgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNjcmVlbi4KKwkrIGNoYW5nZSB1c2Vfc2NyZWVuKCkgdG8gcGFzcyB0aGUgU0NSRUVOKiBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4KKwkgIHN0ZHNjciB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisJKyBmb3JjZSBsaWJ0b29sIHRvIHVzZSB0YWcgZm9yICdDQycgaW4gY2FzZSBpdCBkb2VzIG5vdCBkZXRlY3QgdGhpcywKKwkgIGUuZy4sIG9uIGFpeCB3aGVuIHVzaW5nIENDPXBvd2VycGMtaWJtLWFpeDUuMy4wLjAtZ2NjCisJICAocmVwb3J0L3BhdGNoIGJ5IE1pY2hhZWwgSGF1YmVud2FsbG5lcikuCisJKyBvdmVycmlkZSBPQkpFWFQgdG8gImxvIiB3aGVuIGJ1aWxkaW5nIHdpdGggbGlidG9vbCwgdG8gd29yayBvbgorCSAgcGxhdGZvcm1zIHN1Y2ggYXMgQUlYIHdoZXJlIGxpYnRvb2wgbWF5IHVzZSBhIGRpZmZlcmVudCBzdWZmaXggZm9yCisJICB0aGUgb2JqZWN0IGZpbGVzIHRoYW4gIi5vIiAocmVwb3J0L3BhdGNoIGJ5IE1pY2hhZWwgSGF1YmVud2FsbG5lcikuCisJKyBhZGQgY29uZmlndXJlIC0td2l0aC1wdGhyZWFkIG9wdGlvbiwgZm9yIGJ1aWxkaW5nIHdpdGggdGhlIFBPU0lYCisJICB0aHJlYWQgbGlicmFyeS4KKworMjAwODAzMjIKKwkrIGZpbGwgaW4gZXh0ZW5kZWQtY29sb3IgcGFpciB0d28gbW9yZSBwbGFjZXMgaW4gd2JrZ3JuZHNldCgpIGFuZAorCSAgd2FkZGNoX25vc3luYygpIChwcm9tcHRlZCBieSBTZWRlbm8ncyBwYXRjaCkuCisJKyBmaWxsIGluIGV4dGVuZGVkLWNvbG9yIHBhaXIgaW4gX25jX2J1aWxkX3djaCgpIHRvIG1ha2UgY29sb3JzIHdvcmsKKwkgIGZvciB3aWRlLWNoYXJhY3RlcnMgdXNpbmcgZXh0ZW5kZWQtY29sb3JzIChwYXRjaCBieSBBbGVqYW5kcm8gUgorCSAgU2VkZW5vKS4KKwkrIGFkZCB4L1ggdG9nZ2xlcyB0byBuY3Vyc2VzLmMgQyBjb2xvciB0ZXN0IHRvIHRlc3QvZGVtbworCSAgd2lkZS1jaGFyYWN0ZXJzIHdpdGggZXh0ZW5kZWQtY29sb3JzLgorCSsgYWRkIGEvQSB0b2dnbGVzIHRvIG5jdXJzZXMuYyBjL0MgY29sb3IgdGVzdHMuCisJKyBtb2RpZnkgdGVzdC9kaXR0by5jIHRvIHVzZSB1c2Vfc2NyZWVuKCkuCisJKyBmaW5pc2ggbW9kaWZ5aW5nIHRlc3QvcmFpbi5jIHRvIGRlbW9uc3RyYXRlIHRocmVhZHMuCisKKzIwMDgwMzA4CisJKyBzdGFydCBtb2RpZnlpbmcgdGVzdC9yYWluLmMgZm9yIHRocmVhZGluZyBkZW1vLgorCSsgbW9kaWZ5IHRlc3QvbmN1cnNlcy5jIHRvIG1ha2UgJ2YnIHRlc3QgYWNjZXB0IHRoZSBmL0YvYi9GLzwvPiB0b2dnbGVzCisJICB0aGF0IHRoZSAnRicgYWNjZXB0cy4KKwkrIG1vZGlmeSB0ZXN0L3dvcm0uYyB0byBzaG93IHRyYWlsIGluIHJldmVyc2UtdmlkZW8gd2hlbiBvdGhlciB0aHJlYWRzCisJICBhcmUgd29ya2luZyBjb25jdXJyZW50bHkuCisJKyBmaXggYSBkZWFkbG9jayBmcm9tIGltcHJvcGVyIG5lc3Rpbmcgb2YgbXV0ZXhlcyBmb3Igd2luZG93bGlzdCBhbmQKKwkgIHdpbmRvdy4KKworMjAwODAzMDEKKwkrIGZpeGVzIGZyb20gMjAwODAyMjMgcmVzb2x2ZWQgaXNzdWUgd2l0aCBtdXRleGVzOyBjaGFuZ2UgdG8gdXNlCisJICByZWN1cnNpdmUgbXV0ZXhlcyB0byBmaXggbWVtb3J5IGxlYWsgaW4gZGVsd2luKCkgYXMgY2FsbGVkIGZyb20KKwkgIF9uY19mcmVlX2FuZF9leGl0KCkuCisKKzIwMDgwMjIzCisJKyBmaXggYSBzaXplLWRpZmZlcmVuY2UgaW4gX25jX2dsb2JhbHMgd2hpY2ggY2F1c2VkIGhhbmdpbmcgb2YgbXV0ZXgKKwkgIGxvY2svdW5sb2NrIHdoZW4gdGVybWxpYiB3YXMgYnVpbHQgc2VwYXJhdGVseS4KKworMjAwODAyMTYKKwkrIGF2b2lkIHVzaW5nIG5hbm9zbGVlcCgpIGluIHRocmVhZGVkIGNvbmZpZ3VyYXRpb24gc2luY2UgdGhhdCBvZnRlbgorCSAgaXMgaW1wbGVtZW50ZWQgdG8gc3VzcGVuZCB0aGUgZW50aXJlIHByb2Nlc3MuCisKKzIwMDgwMjA5CisJKyB1cGRhdGUgdGVzdCBwcm9ncmFtcyB0byBidWlsZC93b3JrIHdpdGggdmFyaW91cyBVTklYIGN1cnNlcyBmb3IKKwkgIGNvbXBhcmlzb25zLiAgVGhpcyB3YXMgdG8gcmVpbnZlc3RpZ2F0ZSBzdGF0ZW1lbnQgaW4gWC9PcGVuIGN1cnNlcworCSAgdGhhdCBpbnNuc3RyIGFuZCB3aW5zbnN0ciBwZXJmb3JtIHdyYXBwaW5nLiAgTm9uZSBvZiB0aGUgVW5peC1icmFuZGVkCisJICBpbXBsZW1lbnRhdGlvbnMgZG8gdGhpcywgYXMgbm90ZWQgaW4gbWFucGFnZSAoY2Y6IDIwMDQwMjI4KS4KKworMjAwODAyMDMKKwkrIG1vZGlmeSBfbmNfc2V0dXBzY3JlZW4oKSB0byBzZXQgdGhlIGxlZ2FjeS1jb2RpbmcgdmFsdWUgdGhlIHNhbWUKKwkgIGZvciBib3RoIG5hcnJvdy93aWRlIG1vZGVscy4gIEl0IGhhZCBiZWVuIHNldCBvbmx5IGZvciB3aWRlIG1vZGVsLAorCSAgYnV0IGlzIG5lZWRlZCB0byBtYWtlIHVuY3RybCgpIHdvcmsgd2l0aCBsb2NhbGUgaW4gdGhlIG5hcnJvdyBtb2RlbC4KKwkrIGltcHJvdmUgd2FkZGNoKCkgYW5kIHdpbnNjaCgpIGhhbmRsaW5nIG9mIEVJTFNFUSBmcm9tIG1icnRvd2MoKSBieQorCSAgdXNpbmcgdW5jdHJsKCkgdG8gZGlzcGxheSBpbGxlZ2FsIGJ5dGVzIHJhdGhlciB0aGFuIHRyeWluZyB0byBhcHBlbmQKKwkgIGZ1cnRoZXIgYnl0ZXMgdG8gbWFrZSB1cCBhIHZhbGlkIHNlcXVlbmNlIChyZXBvcnRlZCBieSBBbmRyZXkgQQorCSAgQ2hlcm5vdikuCisJKyBtb2RpZnkgdW5jdHJsKCkgdG8gY2hlY2sgY29kZXMgaW4gMTI4LTI1NSByYW5nZSB2ZXJzdXMgaXNwcmludCgpLgorCSAgSWYgdGhleSBhcmUgbm90IHByaW50YWJsZSwgYW5kIGxvY2FsZSB3YXMgc2V0LCB1c2UgYSAiTS0iIG9yICJ+IgorCSAgc2VxdWVuY2UuCisKKzIwMDgwMTI2CisJKyBpbXByb3ZlIHRocmVhZGluZyBpbiB0ZXN0L3dvcm0uYyAod3JhcCByZWZyZXNoIGNhbGxzLCBhbmQgS0VZX1JFU0laRQorCSAgaGFuZGxpbmcpLiAgTm93IGl0IGhhbmdzIGluIG5hcG1zKCksIG5vIG1hdHRlciB3aGV0aGVyIG5hbm9zbGVlcCgpCisJICBvciBwb2xsKCkgb3Igc2VsZWN0KCkgYXJlIHVzZWQgb24gTGludXguCisKKzIwMDgwMTE5CisJKyBmaXhlcyB0byBidWlsZCB3aXRoIC0tZGlzYWJsZS1leHQtZnVuY3MKKwkrIGFkZCBtYW5wYWdlIGZvciB1c2Vfd2luZG93IGFuZCB1c2Vfc2NyZWVuLgorCSsgYWRkIHNldF90YWJzaXplKCkgYW5kIHNldF9lc2NkZWxheSgpIGZ1bmN0aW9ucy4KKworMjAwODAxMTIKKwkrIHJlbW92ZSByZWN1cnNpdmUtbXV0ZXggZGVmaW5pdGlvbnMsIGZpbmlzaCB0aHJlYWRpbmcgZGVtbyBmb3Igd29ybS5jCisJKyByZW1vdmUgYSByZWR1bmRhbnQgYWRqdXN0bWVudCBvZiBsaW5lcyBpbiByZXNpemV0ZXJtLmMncworCSAgYWRqdXN0X3dpbmRvdygpIHdoaWNoIGNhdXNlZCBvY2Nhc2lvbmFsIG1pc2FkanVzdG1lbnQgb2Ygc3Rkc2NyIHdoZW4KKwkgIHNvZnRrZXlzIHdlcmUgdXNlZC4KKworMjAwODAxMDUKKwkrIHNldmVyYWwgaW1wcm92ZW1lbnRzIHRvIHRlcm1pbmZvIGVudHJpZXMgYmFzZWQgb24geHRlcm0gIzIzMCAtVEQKKwkrIG1vZGlmeSBNS2xpYl9nZW4uc2ggdG8gaGFuZGxlIGtleW5hbWUva2V5X25hbWUgcHJvdG90eXBlcywgc28gdGhlCisJICAibGlua190ZXN0IiBidWlsZHMgcHJvcGVybHkuCisJKyBmaXggZm9yIHRvZSBjb21tYW5kLWxpbmUgb3B0aW9ucyAtdS8tVSB0byBlbnN1cmUgZmlsZW5hbWUgaXMgZ2l2ZW4uCisJKyBmaXggYWxsb2NhdGlvbi1zaXplIGZvciBjb21tYW5kLWxpbmUgcGFyc2luZyBpbiBpbmZvY21wIGZyb20gMjAwNzA3MjgKKwkgIChyZXBvcnQgYnkgTWlyb3NsYXYgTGljaHZhcikKKwkrIGltcHJvdmUgcmVzaXpldGVybSgpIGJ5IG1vdmluZyByaXBwZWQtb2ZmIGxpbmVzLCBhbmQgcmVwYWludGluZyB0aGUKKwkgIHNvZnQta2V5cyAocmVwb3J0IGJ5IEthdGFyaW5hIE1hY2hhbGtvdmEpCisJKyBhZGQgY2xhcmlmaWNhdGlvbiBpbiB3Y2xlYXIncyBtYW5wYWdlIG5vdGluZyB0aGF0IHRoZSBzY3JlZW4gd2lsbCBiZQorCSAgY2xlYXJlZCBldmVuIGlmIGEgc3Vid2luZG93IGlzIGNsZWFyZWQgKHByb21wdGVkIGJ5IENocmlzdGVyIEVuZm9ycworCSAgcXVlc3Rpb24pLgorCSsgY2hhbmdlIHRlc3QvbmN1cnNlcy5jIHNvZnQta2V5IHRlc3RzIHRvIHdvcmsgd2l0aCBLRVlfUkVTSVpFLgorCisyMDA3MTIyMgorCSsgY29udGludWUgaW1wbGVtZW50aW5nIHN1cHBvcnQgZm9yIHRocmVhZGluZyBkZW1vIGJ5IGFkZGluZyBtdXRleAorCSAgZm9yIGRlbHdpbigpLgorCisyMDA3MTIxNQorCSsgYWRkIHNldmVyYWwgZnVuY3Rpb25zIHRvIEMrKyBiaW5kaW5nIHdoaWNoIHdyYXAgQyBmdW5jdGlvbnMgdGhhdAorCSAgcGFzcyBhIFdJTkRPVyogcGFyYW1ldGVyIChyZXF1ZXN0IGJ5IENocmlzIExlZSkuCisKKzIwMDcxMjAxCisJKyBhZGQgbm90ZSBhYm91dCBjb25maWd1cmUgb3B0aW9ucyBuZWVkZWQgZm9yIEJlcmtlbGV5IGRhdGFiYXNlIHRvIHRoZQorCSAgSU5TVEFMTCBmaWxlLgorCSsgaW1wcm92ZSBjaGVja3MgZm9yIHZlcnNpb24gb2YgQmVya2VsZXkgZGF0YWJhc2UgbGlicmFyaWVzLgorCSsgYW1lbmQgZml4IGZvciBycGF0aCB0byBub3QgbW9kaWZ5IExERkxBR1MgaWYgdGhlIHBsYXRmb3JtIGhhcyBubworCSAgYXBwbGljYWJsZSB0cmFuc2Zvcm1hdGlvbiAocmVwb3J0IGJ5IENocmlzdGlhbiBFYmVydCwgY2Y6IDIwMDcxMTI0KS4KKworMjAwNzExMjQKKwkrIG1vZGlmeSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1oYXNoZWQtZGIgdG8gYWNjZXB0IGEgcGFyYW1ldGVyIHdoaWNoCisJICBpcyB0aGUgaW5zdGFsbC1wcmVmaXggb2YgYSBnaXZlbiBCZXJrZWxleSBEYXRhYmFzZSAocHJvbXB0ZWQgYnkKKwkgIHBpZXJyZTRkMiBjb21tZW50cykuCisJKyByZXdyaXRlIHdyYXBwZXIgZm9yIHdjcnRvbWIoKSwgbWFraW5nIGl0IHdvcmsgb24gU29sYXJpcy4gIFRoaXMgaXMKKwkgIHVzZWQgaW4gdGhlIGZvcm0gbGlicmFyeSB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIG5lZWRlZAorCSAgYnkgZmllbGRfYnVmZmVyIChyZXBvcnQgYnkgQWxmcmVkIEZ1bmcpLgorCSsgcmVtb3ZlIHVubmVlZGVkIHdpbmRvdy1wYXJhbWV0ZXIgZnJvbSBDKysgYmluZGluZyBmb3Igd3Jlc2l6ZSAocmVwb3J0CisJICBieSBDaHJpcyBMZWUpLgorCisyMDA3MTExNworCSsgbW9kaWZ5IHRoZSBzdXBwb3J0IGZvciBmaWxlc3lzdGVtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBtaXhlZC1jYXNlIHRvCisJICBnZW5lcmF0ZSAyLWNoYXJhY3RlciAoaGV4YWRlY2ltYWwpIGNvZGVzIGZvciB0aGUgbG93ZXItbGV2ZWwgb2YgdGhlCisJICBmaWxlc3lzdGVtIHRlcm1pbmZvIGRhdGFiYXNlIChyZXF1ZXN0IGJ5IE1pY2hhaWwgVmlkaWFzc292KS4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLW1peGVkLWNhc2UsIHRvIGFsbG93IG92ZXJyaWRpbmcgdGhlCisJICBjb25maWd1cmUgc2NyaXB0J3MgY2hlY2sgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgbWl4ZWQtY2FzZQorCSAgZmlsZW5hbWVzLgorCSsgYWRkIHdyZXNpemUoKSB0byBDKysgYmluZGluZyAocmVxdWVzdCBieSBDaHJpcyBMZWUpLgorCSsgZGVmaW5lIE5DVVJTRVNfRVhUX0ZVTkNTIGFuZCBOQ1VSU0VTX0VYVF9DT0xPUlMgaW4gY3Vyc2VzLmggdG8gbWFrZQorCSAgaXQgc2ltcGxlciB0byB0ZWxsIGlmIHRoZSBleHRlbmRlZCBmdW5jdGlvbnMgYW5kL29yIGNvbG9ycyBhcmUKKwkgIGRlY2xhcmVkLgorCisyMDA3MTEwMworCSsgdXBkYXRlIG1lbW9yeS1sZWFrIGNoZWNrcyBmb3IgY2hhbmdlcyB0byBuYW1lcy5jIGFuZCBjb2Rlcy5jCisJKyBjb3JyZWN0IGFjc2Mgc3RyaW5ncyBpbiBoMTksIHoxMDAgKHBhdGNoIGJ5IEJlbmphbWluIEMgVyBTaXR0bGVyKS4KKworMjAwNzEwMjAKKwkrIGNvbnRpbnVlIGltcGxlbWVudGluZyBzdXBwb3J0IGZvciB0aHJlYWRpbmcgZGVtbyBieSBhZGRpbmcgbXV0ZXgKKwkgIGZvciB1c2Vfd2luZG93KCkuCisJKyBhZGQgbXJ4dnQgdGVybWluZm8gZW50cnksIGFkZC9maXggeHRlcm0gYnVpbGRpbmcgYmxvY2tzIGZvciBtb2RpZmllZAorCSAgY3Vyc29yIGtleXMgLVRECisJKyBjb21waWxlIHdpdGggRnJlZUJTRCAiY29udGVtcG9yYXJ5IiBUVFkgaW50ZXJmYWNlIChwYXRjaCBieQorCSAgUm9uZy1FbiBGYW4pLgorCisyMDA3MTAxMworCSsgbW9kaWZ5IG1ha2VmaWxlIHJ1bGVzIHRvIGFsbG93IGNsZWFyLCB0cHV0IGFuZCB0c2V0IHRvIGJlIGJ1aWx0CisJICB3aXRob3V0IGxpYnRpYy4gIFRoZSBvdGhlciBwcm9ncmFtcyAoaW5mb2NtcCwgdGljIGFuZCB0b2UpIHJlbHkgb24KKwkgIHRoYXQgbGlicmFyeS4KKwkrIGFkZC9tb2RpZnkgbnVsbC1wb2ludGVyIGNoZWNrcyBpbiBzZXZlcmFsIGZ1bmN0aW9ucyBmb3IgU1AgYW5kL29yCisJICB0aGUgV0lORE9XKiBwYXJhbWV0ZXIgKHJlcG9ydCBieSBUaG9yYmVuIEtydWVnZXIpLgorCSsgZml4ZXMgZm9yIGZpZWxkX2J1ZmZlcigpIGluIGZvcm13IGxpYnJhcnkgKHNlZSBSZWRoYXQgQnVnemlsbGEKKwkgICMzMTAwNzEsIHBhdGNoZXMgYnkgTWlyb3NsYXYgTGljaHZhcikuCisJKyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIE5DVVJTRVNfQ0hBUl9FUSBjb2RlIChwYXRjaCBieSBNaXJvc2xhdgorCSAgTGljaHZhcikuCisJKyB1cGRhdGUvaW1wcm92ZSBtbHRlcm0gYW5kIHJ4dnQgdGVybWluZm8gZW50cmllcywgZS5nLiwgZm9yCisJICB0aGUgbW9kaWZpZWQgY3Vyc29yLSBhbmQga2V5cGFkLWtleXMgLVRECisKKzIwMDcxMDA2CisJKyBhZGQgY29kZSB0byBjdXJzZXMucHJpdi5oIGlmZGVmJ2Qgd2l0aCBOQ1VSU0VTX0NIQVJfRVEsIHdoaWNoCisJICBjaGFuZ2VzIHRoZSBDaGFyRXEoKSBtYWNybyB0byBhbiBpbmxpbmUgZnVuY3Rpb24gdG8gYWxsb3cgY29tcGFyaW5nCisJICBjY2hhcl90IHN0cnVjdCdzIHdpdGhvdXQgY29tcGFyaW5nIGdhcHMgaW4gYSBwb3NzaWJseSB1bnBhY2tlZAorCSAgbWVtb3J5IGxheW91dCAocmVwb3J0IGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCisyMDA3MDkyOQorCSsgYWRkIG5ldyBmdW5jdGlvbnMgdG8gbGliX3RyYWNlLmMgdG8gc2V0dXAgbXV0ZXgncyBmb3IgdGhlIF90cmFjZWYoKQorCSAgY2FsbHMgd2l0aGluIHRoZSBuY3Vyc2VzIGxpYnJhcnkuCisJKyBmb3IgdGhlIHJlZW50cmFudCBtb2RlbCwgbW92ZSBfbmNfdHB1dHNfdHJhY2UgYW5kIF9uY19vdXRjaGFycyBpbnRvCisJICB0aGUgU0NSRUVOLgorCSsgc3RhcnQgbW9kaWZ5aW5nIHRlc3Qvd29ybS5jIHRvIHByb3ZpZGUgdGhyZWFkaW5nIGRlbW8gKGluY29tcGxldGUpLgorCSsgc2VwYXJhdGVkIGlmZGVmJ3MgZm9yIHNvbWUgQlNELXJlbGF0ZWQgc3ltYm9scyBpbiB0c2V0LmMsIHRvIG1ha2UKKwkgIGl0IGNvbXBpbGUgb24gTHlueE9TIChyZXBvcnQgYnkgR3JlZyBHZW1tZXIpLgorMjAwNzA5MTUKKwkrIG1vZGlmeSBBZGE5NS9nZW4vTWFrZWZpbGUgdG8gdXNlIHNobGliIHNjcmlwdCwgdG8gc2ltcGxpZnkgYnVpbGRpbmcKKwkgIHNoYXJlZC1saWJyYXJ5IGNvbmZpZ3VyYXRpb24gb24gcGxhdGZvcm1zIGxhY2tpbmcgcnBhdGggc3VwcG9ydC4KKwkrIGJ1aWxkLWZpeCBmb3IgQWRhOTUvc3JjL01ha2VmaWxlIHRvIHJlZmxlY3QgY2hhbmdlZCBkZXBlbmRlbmN5IGZvcgorCSAgdGhlIHRlcm1pbmFsLWludGVyZmFjZS1jdXJzZXMtYXV4LmFkYiBmaWxlIHdoaWNoIGlzIG5vdyBnZW5lcmF0ZWQuCisJKyByZXN0cnVjdHVyaW5nIHRlc3Qvd29ybS5jLCBmb3IgdXNlX3dpbmRvdygpIGV4YW1wbGUuCisKKzIwMDcwOTA4CisJKyBhZGQgdXNlX3dpbmRvdygpIGFuZCB1c2Vfc2NyZWVuKCkgZnVuY3Rpb25zLCB0byBkZXZlbG9wIGludG8gc3VwcG9ydAorCSAgZm9yIHRocmVhZGVkIGxpYnJhcnkgKGluY29tcGxldGUpLgorCSsgZml4IHR5cG9zIGluIG1hbi9jdXJzX29wYXF1ZS4zeCB3aGljaCBrZXB0IHRoZSBpbnN0YWxsIHNjcmlwdCBmcm9tCisJICBjcmVhdGluZyBzeW1ib2xpYyBsaW5rcyB0byB0d28gYWxpYXNlcyBjcmVhdGVkIGluIDIwMDcwODE4IChyZXBvcnQgYnkKKwkgIFJvbmctRW4gRmFuKS4KKworMjAwNzA5MDEKKwkrIHJlbW92ZSBhIHNwdXJpb3VzIG5ld2xpbmUgZnJvbSBvdXRwdXQgb2YgaHRtbC5tNCwgd2hpY2ggY2F1c2VkIGxpbmtzCisJICBmb3IgQWRhOTUgaHRtbCB0byBiZSBpbmNvcnJlY3QgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQgdXNpbmcgbTQuCisJKyBzdGFydCBpbnZlc3RpZ2F0aW5nIG11dGV4J3MgZm9yIFNDUkVFTiBtYW5pcHVsYXRpb24gKGluY29tcGxldGUpLgorCSsgbWlub3IgY2xlYW51cCBvZiBjb2Rlcy5jL25hbWVzLmMgZm9yIC0tZW5hYmxlLWNvbnN0CisJKyBleHBhbmQvcmV2aXNlICJSb3V0aW5lIGFuZCBBcmd1bWVudCBOYW1lcyIgc2VjdGlvbiBvZiBuY3Vyc2VzIG1hbnBhZ2UKKwkgIHRvIGFkZHJlc3MgcmVwb3J0IGJ5IERhdmlkIEdpdmVucyBpbiBuZXdzZ3JvdXAgZGlzY3Vzc2lvbi4KKwkrIGZpeCBpbnRlcmFjdGlvbiBiZXR3ZWVuIC0td2l0aG91dC1wcm9ncy8tLXdpdGgtdGVybWNhcCBjb25maWd1cmUKKwkgIG9wdGlvbnMgKHJlcG9ydCBieSBNaWNoYWlsIFZpZGlhc3NvdikuCisJKyBmaXggdHlwbyBpbiAiLS1kaXNhYmxlLXJlbGluayIgb3B0aW9uIChyZXBvcnQgYnkgTWljaGFpbCBWaWRpYXNzb3YpLgorCisyMDA3MDgyNQorCSsgZml4IGEgc2lnbi1leHRlbnNpb24gYnVnIGluIGluZm9jbXAncyByZXBhaXJfYWNzYygpIGZ1bmN0aW9uCisJICAoY2Y6IDk3MTAwNCkuCisJKyBmaXggb2xkIGNvbmZpZ3VyZSBzY3JpcHQgYnVnIHdoaWNoIHByZXZlbnRlZCAiLS1kaXNhYmxlLXdhcm5pbmdzIgorCSAgb3B0aW9uIGZyb20gd29ya2luZyAocGF0Y2ggYnkgTWlrZSBGcnlzaW5nZXIpLgorCisyMDA3MDgxOAorCSsgYWRkIDl0ZXJtIHRlcm1pbmFsIGRlc2NyaXB0aW9uIChyZXF1ZXN0IGJ5IEp1aGFwZWtrYSBUb2x2YW5lbikgLVRECisJKyBtb2RpZnkgY29tcF9oYXNoLmMncyBzdHJpbmcgb3V0cHV0IHRvIGF2b2lkIG1pc2ludGVycHJldGluZyBhIG51bGwKKwkgICJcMCIgZm9sbG93ZWQgYnkgYSBkaWdpdC4KKwkrIG1vZGlmeSBNS25hbWVzLmF3ayBhbmQgTUtjb2Rlcy5hd2sgdG8gc3VwcG9ydCBiaWctc3RyaW5ncy4KKwkgIFRoaXMgb25seSBhcHBsaWVzIHRvIHRoZSBjYXNlcyAoYnJva2VuIGxpbmtlciwgcmVlbnRyYW50KSB3aGVyZQorCSAgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXlzIGFyZSBhY2Nlc3NlZCB2aWEgd3JhcHBlciBmdW5jdGlvbnMuCisJKyBzcGxpdCBNS25hbWVzLmF3ayBpbnRvIHR3byBzY3JpcHRzLCBlbGltaW5hdGluZyB0aGUgc2hlbGwgcmVkaXJlY3Rpb24KKwkgIHdoaWNoIGNvbXBsaWNhdGVkIHRoZSBtYWtlIHByb2Nlc3MgYW5kIGFsc28gdGhlIGJvZ3VzIHRpbWVzdGFtcCBmaWxlCisJICB3aGljaCB3YXMgaW50cm9kdWNlZCB0byBmaXggIm1ha2UgLWoiLgorCSsgYWRkIHRlc3QvdGVzdF9vcGFxdWUuYywgdGVzdC90ZXN0X2FycmF5cy5jCisJKyBhZGQgd2dldHNjcnJlZygpIGFuZCB3Z2V0cGFyZW50KCkgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IG1heSBuZWVkIGl0CisJICB3aGVuIE5DVVJTRVNfT1BBUVVFIGlzIGRlZmluZWQgKHByb21wdGVkIGJ5IEJyeWFuIENocmlzdCkuCisKKzIwMDcwODEyCisJKyBhbWVuZCB0cmVhdG1lbnQgb2YgaW5mb2NtcCAiLXIiIG9wdGlvbiB0byByZXRhaW4gdGhlIDEwMjMtYnl0ZSBsaW1pdAorCSAgdW5sZXNzICItVCIgaXMgZ2l2ZW4gKGNmOiA5ODEwMTcpLgorCSsgbW9kaWZ5IGNvbXBfY2FwdGFiLmMgZ2VuZXJhdGlvbiB0byB1c2UgYmlnLXN0cmluZ3MuCisJKyBtYWtlIF9uY19jYXBhbGlhc190YWJsZSBhbmQgX25jX2luZm9hbGlhc190YWJsZSBwcml2YXRlIGFjY2Vzc2VkIHZpYQorCSAgX25jX2dldF9hbGlhc190YWJsZSgpIHNpbmNlIHRoZSB0YWJsZXMgYXJlIHVzZWQgb25seSB3aXRoaW4gdGhlIHRpYworCSAgbGlicmFyeS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHNraXAgSW50ZWwgY29tcGlsZXIgaW4gQ0ZfQ19JTkxJTkUuCisJKyBtYWtlIF9uY19pbmZvX2hhc2hfdGFibGUgYW5kIF9uY19jYXBfaGFzaF90YWJsZSBwcml2YXRlIGFjY2Vzc2VkIHZpYQorCSAgX25jX2dldF9oYXNoX3RhYmxlKCkgc2luY2UgdGhlIHRhYmxlcyBhcmUgdXNlZCBvbmx5IHdpdGhpbiB0aGUgdGljCisJICBsaWJyYXJ5LgorCisyMDA3MDcyOAorCSsgbWFrZSBfbmNfY2FwYWxpYXNfdGFibGUgYW5kIF9uY19pbmZvYWxpYXNfdGFibGUgcHJpdmF0ZSwgYWNjZXNzZWQgdmlhCisJICBfbmNfZ2V0X2FsaWFzX3RhYmxlKCkgc2luY2UgdGhleSBhcmUgdXNlZCBvbmx5IGJ5IHBhcnNlX2VudHJ5LmMKKwkrIG1ha2UgX25jX2tleV9uYW1lcyBwcml2YXRlIHNpbmNlIGl0IGlzIHVzZWQgb25seSBieSBsaWJfa2V5bmFtZS5jCisJKyBhZGQgLS1kaXNhYmxlLWJpZy1zdHJpbmdzIGNvbmZpZ3VyZSBvcHRpb24gdG8gY29udHJvbCB3aGV0aGVyCisJICB1bmN0cmwuYyBpcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIGJpZy1zdHJpbmcgb3B0aW1pemF0aW9uIC0gd2hpY2ggbWF5CisJICB1c2Ugc3RyaW5ncyBsb25nZXIgdGhhbiBzdXBwb3J0ZWQgYnkgYSBnaXZlbiBjb21waWxlci4KKwkrIHJlZHVjZSByZWxvY2F0aW9uIHRhYmxlcyBmb3IgdGljLCBpbmZvY21wIGJ5IGNoYW5naW5nIHR5cGUgb2YKKwkgIGludGVybmFsIGhhc2ggdGFibGVzIHRvIHNob3J0LCBhbmQgbWFrZSB0aG9zZSBwcml2YXRlIHN5bWJvbHMuCisJKyBlbGltaW5hdGUgbGFyZ2UgZml4ZWQgYXJyYXlzIGZyb20gcHJvZ3MvaW5mb2NtcC5jCisKKzIwMDcwNzIxCisJKyBjaGFuZ2Ugd2lubnN0cigpIHRvIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSAoY2Y6IDk3MDMxNSkuCisJKyBhZGQgdGVzdC90ZXN0X2dldF93c3RyLmMKKwkrIGFkZCB0ZXN0L3Rlc3RfZ2V0c3RyLmMKKwkrIGFkZCB0ZXN0L3Rlc3RfaW53c3RyLmMKKwkrIGFkZCB0ZXN0L3Rlc3RfaW5zdHIuYworCisyMDA3MDcxNgorCSsgcmVzdG9yZSBhIGNhbGwgdG8gb2J0YWluIHNjcmVlbi1zaXplIGluIF9uY19zZXR1cHRlcm0oKSwgd2hpY2gKKwkgIGlzIHVzZWQgaW4gdHB1dCBhbmQgb3RoZXIgbm9uLXNjcmVlbiBhcHBsaWNhdGlvbnMgdmlhIHNldHVwdGVybSgpCisJICAoRGViaWFuICM0MzMzNTcsIHJlcG9ydGVkIGJ5IEZsb3JlbnQgQmF5bGUsIENocmlzdGlhbiBPaG0sCisJICBjZjogMjAwNzAzMTApLgorCisyMDA3MDcxNAorCSsgYWRkIHRlc3Qvc2F2ZXNjcmVlbi5jIHRlc3QtcHJvZ3JhbQorCSsgYWRkIGNoZWNrIHRvIHRyYWNlLWZpbGUgb3BlbiwgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYSBkaXJlY3RvcnksIGFkZAorCSAgIi5sb2ciIHRvIHRoZSBuYW1lIGFuZCB0cnkgYWdhaW4uCisJKyBhZGQga29uc29sZS0yNTZjb2xvciBlbnRyeSAtVEQKKwkrIGFkZCBleHRyYSBnY2Mgd2FybmluZyBvcHRpb25zIGZyb20geHRlcm0uCisJKyBtaW5vciBmaXhlcyBmb3IgbmN1cnNlcy9oYXNobWFwIHRlc3QtcHJvZ3JhbS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHF1aWV0IGMrKyBidWlsZCB3aXRoIGxpYnRvb2wgd2hlbiB0aGUKKwkgIC0tZGlzYWJsZS1lY2hvIG9wdGlvbiBpcyB1c2VkLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gZGlzYWJsZSBhZGE5NSBpZiBsaWJ0b29sIGlzIHNlbGVjdGVkLAorCSAgd3JpdGluZyBhIHdhcm5pbmcgbWVzc2FnZSAoYWRkcmVzc2VzIEZyZWVCU0QgcG9ydHMvMTE0NDkzKS4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKworMjAwNzA3MDcKKwkrIGFkZCBjb250aW51b3VzLW1vdmUgIk0iIHRvIGRlbW9fcGFuZWxzIHRvIGhlbHAgdGVzdCByZWZyZXNoIGNoYW5nZXMuCisJKyBpbXByb3ZlIGZpeCBmb3IgcmVmcmVzaCBvZiB3aW5kb3cgb24gdG9wIG9mIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzLAorCSAgdGFraW5nIGludG8gYWNjb3VudCBzb21lIHNwbGl0IGNoYXJhY3RlcnMgb24gbGVmdC9yaWdodCB3aW5kb3cKKwkgIGJvdW5kYXJpZXMuCisKKzIwMDcwNjMwCisJKyBhZGQgIndpZGVjIiByb3cgdG8gX3RyYWNlZHVtcCgpIG91dHB1dCB0byBoZWxwIGRpYWdub3NlIHJlbWFpbmluZworCSAgcHJvYmxlbXMgd2l0aCBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycy4KKwkrIHBhcnRpYWwgZml4IGZvciByZWZyZXNoIG9mIHdpbmRvdyBvbiB0b3Agb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMKKwkgIHdoaWNoIGFyZSBwYXJ0bHkgb3ZlcndyaXR0ZW4gKHJlcG9ydCBieSBTYWRydWwgSCBDaG93ZGh1cnkpLgorCSsgaWdub3JlIEFfQ0hBUlRFWFQgYml0cyBpbiB2aWRhdHRyKCkgYW5kIHZpZF9hdHRyKCksIGluIGNhc2UKKwkgIG11bHRpLWNvbHVtbiBleHRlbnNpb24gYml0cyBhcmUgcGFzc2VkIHRoZXJlLgorCSsgYWRkIHNldGxvY2FsZSgpIGNhbGwgdG8gZGVtb19wYW5lbHMuYywgbmVlZGVkIGZvciB3aWRlLWNoYXJhY3RlcnMuCisJKyBhZGQgc29tZSBvdXRwdXQgZmxhZ3MgdG8gX25jX3RyYWNlX3R0eW1vZGUgdG8gaGVscCBkaWFnbm9zZSBhIGJ1ZworCSAgcmVwb3J0IGJ5IExhcnJ5IFZpcmRlbiwgaS5lLiwgT05MQ1IsIE9DUk5MLCBPTk9DUiBhbmQgT05MUkVULAorCisyMDA3MDYyMworCSsgYWRkIHRlc3QvZGVtb19wYW5lbHMuYworCSsgaW1wbGVtZW50IG9wYXF1ZSB2ZXJzaW9uIG9mIHNldHN5eCgpIGFuZCBnZXRzeXgoKS4KKworMjAwNzA2MTIKKwkrIGNvcnJlY3RlZCB4dGVybStwY2YyIHRlcm1pbmZvIG1vZGlmaWVycyBmb3IgRjEtRjQsIHRvIG1hdGNoIHh0ZXJtCisJICAjMjI2IC1URAorCSsgc3BsaXQtb3V0IGtleV9uYW1lKCkgZnJvbSBNS2tleW5hbWUuYXdrIHNpbmNlIGl0IG5vdyBkZXBlbmRzIHVwb24KKwkgIHd1bmN0cmwoKSB3aGljaCBpcyBub3QgaW4gbGlidGluZm8gKHJlcG9ydCBieSBSb25nLUVuIEZhbikuCisKKzIwMDcwNjA5CisJKyBhZGQgdGVzdC9rZXlfbmFtZS5jCisJKyBhZGQgc3Rkc2NyIGNhc2VzIHRvIHRlc3QvaW5jaHMuYyBhbmQgdGVzdC9pbmNoX3dpZGUuYworCSsgdXBkYXRlIHRlc3QvY29uZmlndXJlCisJKyBjb3JyZWN0IGZvcm1hdHRpbmcgb2YgREVMICgweDdmKSBpbiBfbmNfdmlzY2hhcigpLgorCSsgbnVsbC10ZXJtaW5hdGUgcmVzdWx0IG9mIHd1bmN0cmwoKS4KKwkrIGFkZCBudWxsLXBvaW50ZXIgY2hlY2sgaW4ga2V5X25hbWUoKSAocmVwb3J0IGJ5IEFuZHJlYXMgS3Jlbm5tYWlyLAorCSAgY2Y6IDIwMDIwOTAxKS4KKworMjAwNzA2MDIKKwkrIGFkYXB0IG1vdXNlLWhhbmRsaW5nIGNvZGUgZnJvbSBtZW51IGxpYnJhcnkgaW4gZm9ybS1saWJyYXJ5CisJICAoZGlzY3Vzc2lvbiB3aXRoIENsaXZlIE5pY29sc29uKS4KKwkrIGFkZCBhIG1vZGlmaWNhdGlvbiBvZiB0ZXN0L2RvdHMuYywgaS5lLiwgdGVzdC9kb3RzX212Y3VyLmMgdG8KKwkgIGlsbHVzdHJhdGUgaG93IHRvIHVzZSBtdmN1cigpLgorCSsgbW9kaWZ5IHdpZGUtY2hhcmFjdGVyIGZsYXZvciBvZiBTZXRBdHRyKCkgdG8gcHJlc2VydmUgdGhlCisJICBXaWRlY0V4dCgpIHZhbHVlIHN0b3JlZCBpbiB0aGUgLmF0dHIgZmllbGQsIGUuZy4sIGluIGNhc2UgaXQKKwkgIGlzIG92ZXJ3cml0dGVuIGJ5IGNoZ2F0IChyZXBvcnQgYnkgQWxla3NpIFRvcmhhbW8pLgorCSsgY29ycmVjdCBidWZmZXItc2l6ZSBmb3IgX25jX3Zpc3didWYybigpIChyZXBvcnQgYnkgQWxla3NpIFRvcmhhbW8pLgorCSsgYnVpbGQtZml4ZXMgZm9yIFNvbGFyaXMgMi42IGFuZCAyLjcgKHBhdGNoIGJ5IFBldGVyIE8nR29ybWFuKS4KKworMjAwNzA1MjYKKwkrIG1vZGlmeSBrZXluYW1lKCkgdG8gdXNlICJeWCIgZm9ybSBvbmx5IGlmIG1ldGEoKSBoYXMgYmVlbiBjYWxsZWQsIG9yCisJICBpZiBrZXluYW1lKCkgaXMgY2FsbGVkIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGN1cnNlcywgZS5nLiwgdmlhCisJICBpbml0c2NyKCkgb3IgbmV3dGVybSgpIChwcm9tcHRlZCBieSBMaW51eEJhc2UgIzE2MDQpLgorCSsgZG9jdW1lbnQgc29tZSBwb3J0YWJpbGl0eSBpc3N1ZXMgaW4gbWFuL2N1cnNfdXRpbC4zeAorCSsgYWRkIGEgc2hhZG93IGNvcHkgb2YgVFRZIGJ1ZmZlciB0byBfbmNfcHJlc2NyZWVuIHRvIGZpeCBhcHBsaWNhdGlvbnMKKwkgIGJyb2tlbiBieSBtb3ZpbmcgdGhhdCBkYXRhIGludG8gU0NSRUVOIChjZjogMjAwNjEyMzApLgorCisyMDA3MDUxMgorCSsgYWRkICdPJyAod2lkZS1jaGFyYWN0ZXIgcGFuZWwgdGVzdCkgaW4gbmN1cnNlcy5jIHRvIGRlbW9uc3RyYXRlIGEKKwkgIHByb2JsZW0gcmVwb3J0ZWQgYnkgU2FkcnVsIEggQ2hvd2RodXJ5IHdpdGggcmVwYWludGluZyBwYXJ0cyBvZgorCSAgYSBmdWxsd2lkdGggY2VsbC4KKwkrIG1vZGlmeSBzbGtfaW5pdCgpIHNvIHRoYXQgaWYgdGhlcmUgYXJlIHByZWNlZGluZyBjYWxscyB0bworCSAgcmlwb2ZmbGluZSgpLCB0aG9zZSBhZmZlY3QgdGhlIGF2YWlsYWJsZSBsaW5lcyBmb3Igc29mdC1rZXlzIChhZGFwdGVkCisJICBmcm9tIHBhdGNoIGJ5IENsaXZlIE5pY29sc29uKS4KKwkrIGRvY3VtZW50IHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzIGluIG1hbi9jdXJzX2dldHl4LjN4CisKKzIwMDcwNTA1CisJKyBmaXggYSBidWcgaW4gQWRhOTUvc2FtcGxlcy9uY3Vyc2VzIHdoaWNoIGNhdXNlZCBhIHZhcmlhYmxlIHRvCisJICBiZWNvbWUgdW5pbml0aWFsaXplZCBpbiB0aGUgImIiIHRlc3QuCisJKyBmaXggQWRhOTUvZ2VuL01ha2VmaWxlLmluIGFkYWh0bWwgcnVsZSB0byBhY2NvdW50IGZvciByZWNlbnQKKwkgIG1vdmVtZW50IG9mIGZpbGVzLCBmaXggYSBmZXcgaW5jb3JyZWN0IG1hbnBhZ2UgcmVmZXJlbmNlcyBpbiB0aGUKKwkgIGdlbmVyYXRlZCBodG1sLgorCSsgYWRkIEFkYTk1IGJpbmRpbmcgdG8gX25jX2ZyZWVhbGwoKSBhcyBDdXJzZXNfRnJlZV9BbGwgdG8gaGVscCB3aXRoCisJICBtZW1vcnktY2hlY2tpbmcuCisJKyBjb3JyZWN0IHNvbWUgZnVuY3Rpb25zIGluIEFkYTk1IGJpbmRpbmcgd2hpY2ggd2VyZSB1c2luZyByZXR1cm4gdmFsdWUKKwkgIGZyb20gQyB3aGVyZSBub25lIHdhcyByZXR1cm5lZDogIGlkY29rKCksIGltbWVkb2soKSBhbmQgd3RpbWVvdXQoKS4KKwkrIGFtZW5kIHJlY2VudCBjaGFuZ2VzIGZvciBBZGE5NSBiaW5kaW5nIHRvIG1ha2UgaXQgYnVpbGQgd2l0aAorCSAgQ3lnd2luJ3MgbGlua2VyLCBlLmcuLCB3aXRoIGNvbmZpZ3VyZSBvcHRpb25zCisJCS0tZW5hYmxlLWJyb2tlbi1saW5rZXIgLS13aXRoLXRpY2xpYgorCisyMDA3MDQyOAorCSsgYWRkIGEgY29uZmlndXJlIGNoZWNrIGZvciBnY2MncyBvcHRpb25zIGZvciBpbmxpbmluZywgdXNlIHRoYXQgdG8KKwkgIHF1aWV0IGEgd2FybmluZyBtZXNzYWdlIHdoZXJlIGdjYydzIGRlZmF1bHQgYmVoYXZpb3IgY2hhbmdlZCBmcm9tCisJICAzLnggdG8gNC54LgorCSsgaW1wcm92ZSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiBjaGVja2luZyBpZiBHUE0gaXMgbGlua2VkIHRvIGN1cnNlcworCSAgbGlicmFyeSBieSBub3Qgd2FybmluZyBpZiBpdHMgdXNlIG9mICJ3Z2V0Y2giIGlzIHZpYSBhIHdlYWsgc3ltYm9sLgorCSsgYWRkIGxvYWRlciBvcHRpb25zIHdoZW4gYnVpbGRpbmcgd2l0aCBzdGF0aWMgbGlicmFyaWVzIHRvIGVuc3VyZSB0aGF0CisJICBhbiBpbnN0YWxsZWQgc2hhcmVkIGxpYnJhcnkgZm9yIG5jdXJzZXMgZG9lcyBub3QgY29uZmxpY3QuICBUaGlzIGlzCisJICByZXBvcnRlZCBhcyBwcm9ibGVtIHdpdGggVHJ1NjQsIGJ1dCBjb3VsZCBhZmZlY3Qgb3RoZXIgcGxhdGZvcm1zCisJICAocmVwb3J0IE1hcnRpbiBNb2tyZWpzLCBhbmFseXNpcyBieSBUaW0gTW9vbmV5KS4KKwkrIGZpeCBidWlsZCBvbiBjeWd3aW4gYWZ0ZXIgcmVjZW50IHRpY2xpYi90ZXJtbGliIGNoYW5nZXMsIGkuZS4sCisJICArIGFkanVzdCBUSU5GT19TVUZGSVggdmFsdWUgdG8gd29yayB3aXRoIGN5Z3dpbidzIGRsbCBuYW1pbmcKKwkgICsgcmV2ZXJ0IGEgY2hhbmdlIGZyb20gMjAwNzAzMDMgd2hpY2ggY29tbWVudGVkIG91dCBkZXBlbmRlbmN5IG9mCisJICAgIFNITElCX0xJU1QgaW4gZm9ybS9tZW51L3BhbmVsL2MrKyBsaWJyYXJpZXMuCisJKyBmaXggaW5pdGlhbGl6YXRpb24gb2Ygcmlwb2ZmIHN0YWNrIHBvaW50ZXIgKGNmOiAyMDA3MDQyMSkuCisKKzIwMDcwNDIxCisJKyBtb3ZlIG1vc3Qgc3RhdGljIHZhcmlhYmxlcyBpbnRvIHN0cnVjdHVyZXMgX25jX2dsb2JhbHMgYW5kCisJICBfbmNfcHJlc2NyZWVuLCB0byBzaW1wbGlmeSBzdG9yYWdlLgorCSsgYWRkL3VzZSBjb25maWd1cmUgc2NyaXB0IG1hY3JvIENGX1NJR19BVE9NSUNfVCwgdXNlIHRoZSBjb3JyZXNwb25kaW5nCisJICB0eXBlIGZvciBkYXRhIG1hbmlwdWxhdGVkIGJ5IHNpZ25hbCBoYW5kbGVycyAocHJvbXB0ZWQgYnkgY29tbWVudHMKKwkgIGluIG1haWxpbmcub3BlbmJzZC5idWdzIG5ld3Nncm91cCkuCisJKyBtb2RpZnkgQ0ZfV0lUSF9MSUJUT09MIHRvIGFsbG93IG9uZSB0byBwYXNzIG9wdGlvbnMgc3VjaCBhcyAtc3RhdGljCisJICB0byB0aGUgbGlidG9vbCBjcmVhdGUtIGFuZCBsaW5rLW9wZXJhdGlvbnMuCisKKzIwMDcwNDE0CisJKyBmaXggd2hpdGVzcGFjZSBpbiBjdXJzX29wYXF1ZS4zeCB3aGljaCBjYXVzZWQgYSBzcHVyaW91cyAnOycgaW4KKwkgIHRoZSBpbnN0YWxsZWQgYWxpYXNlcyAocmVwb3J0IGJ5IFBldGVyIFNhbnRvcm8pLgorCSsgZml4IGNvbmZpZ3VyZSBzY3JpcHQgdG8gbm90IHRyeSB0byBnZW5lcmF0ZSBhZGFjdXJzZXMtY29uZmlnIHdoZW4KKwkgIEFkYTk1IHRyZWUgaXMgbm90IGJ1aWx0LgorCisyMDA3MDQwNworCSsgYWRkIG1hbi9jdXJzX2xlZ2FjeS4zeCwgbWFuL2N1cnNfb3BhcXVlLjN4CisJKyBmaXggYWNzX21hcCBiaW5kaW5nIGZvciBBZGE5NSB3aGVuIC0tZW5hYmxlLXJlZW50cmFudCBpcyB1c2VkLgorCSsgYWRkIGFkYWN1cnNlcy1jb25maWcgdG8gdGhlIEFkYTk1IGluc3RhbGwsIGJhc2VkIG9uIHZlcnNpb24gZnJvbQorCSAgRnJlZUJTRCBwb3J0LCBpbiB0dXJuIGJ5IEp1ZXJnZW4gUGZlaWZlciBpbiAyMDAwIChwcm9tcHRlZCBieQorCSAgY29tbWVudCBvbiBjb21wLmxhbmcuYWRhIG5ld3Nncm91cCkuCisJKyBmaXggaW5jbHVkZXMgaW4gYysrIGJpbmRpbmcgdG8gYnVpbGQgd2l0aCBJbnRlbCBjb21waWxlcgorCSAgKGNmOiAyMDA2MTIwOSkuCisJKyB1cGRhdGUgaW5zdGFsbCBydWxlIGluIEFkYTk1IHRvIHVzZSBta2RpcnMuc2gKKwk+IG90aGVyIGZpeGVzIHByb21wdGVkIGJ5IGluc3BlY3Rpb24gZm9yIENvdmVyaXR5IHJlcG9ydDoKKwkrIG1vZGlmeSBpZmRlZidzIGZvciBjKysgYmluZGluZyB0byB1c2UgdHJ5L2NhdGNoL3Rocm93IHN0YXRlbWVudHMKKwkrIGFkZCBhIG51bGwtcG9pbnRlciBjaGVjayBpbiB0YWNrL2Fuc2kuYyByZXF1ZXN0X2Nmc3MoKQorCSsgZml4IGEgbWVtb3J5IGxlYWsgaW4gbmN1cnNlcy9iYXNlL3dyZXNpemUuYworCSsgY29ycmVjdGVkIGNoZWNrIGZvciB2YWxpZCBtZW11L21lbWwgY2FwYWJpbGl0aWVzIGluCisJICBwcm9ncy9kdW1wX2VudHJ5LmMgd2hlbiBoYW5kbGluZyBWX0hQVVggY2FzZS4KKwk+IGZpeGVzIGJhc2VkIG9uIENvdmVyaXR5IHJlcG9ydDoKKwkrIHJlbW92ZSBkZWFkIGNvZGUgaW4gdGVzdC9icy5jCisJKyByZW1vdmUgZGVhZCBjb2RlIGluIHRlc3QvZGVtb19kZWZrZXkuYworCSsgcmVtb3ZlIGFuIHVudXNlZCBhc3NpZ25tZW50IGluIHByb2dzL2luZm9jbXAuYworCSsgZml4IGEgbGltaXQgY2hlY2sgaW4gdGFjay9hbnNpLmMgdG9vbHNfY2hhcnNldCgpCisJKyBmaXggdGFjay9hbnNpLmMgdG9vbHNfc3RhdHVzKCkgdG8gcGVyZm9ybSB0aGUgVlQzMjAvVlQ0MjAKKwkgIHRlc3RzIGluIHJlcXVlc3RfY2ZzcygpLiAgVGhlIGZ1bmN0aW9uIGhhZCBleGl0ZWQgdG9vIHNvb24uCisJKyBmaXggYSBtZW1vcnkgbGVhayBpbiB0aWMuYydzIG1ha2VfbmFtZWxpc3QoKQorCSsgZml4IGEgY291cGxlIG9mIHBsYWNlcyBpbiB0YWNrL291dHB1dC5jIHdoaWNoIGRpZCBub3QgY2hlY2sgZm9yIEVPRi4KKwkrIGZpeCBhIGxvb3AtY29uZGl0aW9uIGluIHRlc3QvYnMuYworCSsgYWRkIGluZGV4IGNoZWNrcyBpbiBsaWJfY29sb3IuYyBmb3IgY29sb3IgcGFsZXR0ZXMKKwkrIGFkZCBpbmRleCBjaGVja3MgaW4gcHJvZ3MvZHVtcF9lbnRyeS5jIGZvciB2ZXJzaW9uX2ZpbHRlcigpIGhhbmRsaW5nCisJICBvZiBWX0JTRCBjYXNlLgorCSsgZml4IGEgcG9zc2libGUgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvcHl3aW4oKQorCSsgZml4IGEgcG9zc2libGUgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIHdhZGRjaG5zdHIoKQorCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGluIF9uY19leHBhbmRfdHJ5KCkKKwkrIGFkZCBhIG51bGwtcG9pbnRlciBjaGVjayBpbiB0aWMuYydzIG1ha2VfbmFtZWxpc3QoKQorCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGluIF9uY19leHBhbmRfdHJ5KCkKKwkrIGFkZCBudWxsLXBvaW50ZXIgY2hlY2tzIGluIHRlc3QvY2FyZGZpbGUuYworCSsgZml4IGEgZG91YmxlLWZyZWUgaW4gbmN1cnNlcy90aW5mby90cmltX3NncjAuYworCSsgZml4IGEgZG91YmxlLWZyZWUgaW4gbmN1cnNlcy9iYXNlL3dyZXNpemUuYworCSsgYWRkIHRyeS9jYXRjaCBibG9jayB0byBjKysvY3Vyc2VzbWFpbi5jYworCisyMDA3MDMzMQorCSsgbW9kaWZ5IEFkYTk1IGJpbmRpbmcgdG8gYnVpbGQgd2l0aCAtLWVuYWJsZS1yZWVudHJhbnQgYnkgd3JhcHBpbmcKKwkgIGdsb2JhbCB2YXJpYWJsZXMgKGJ1ZzogYWNzX21hcCBkb2VzIG5vdCB5ZXQgd29yaykuCisJKyBtb2RpZnkgQWRhOTUgYmluZGluZyB0byB1c2UgdGhlIG5ldyBhY2Nlc3MtZnVuY3Rpb25zLCBhbGxvd2luZyBpdAorCSAgdG8gYnVpbGQvcnVuIHdoZW4gTkNVUlNFU19PUEFRVUUgaXMgc2V0LgorCSsgYWRkIGFjY2Vzcy1mdW5jdGlvbnMgYW5kIG1hY3JvcyB0byByZXR1cm4gcHJvcGVydGllcyBvZiB0aGUgV0lORE9XCisJICBzdHJ1Y3R1cmUsIGUuZy4sIHdoZW4gTkNVUlNFU19PUEFRVUUgaXMgc2V0LgorCSsgaW1wcm92ZWQgaW5zdGFsbC1zaCdzIHF1b3RpbmcuCisJKyB1c2UgbWtkaXJzLnNoIHJhdGhlciB0aGFuIG1raW5zdGFsbGRpcnMsIGUuZy4sIHRvIHVzZSBmaXhlcyBmcm9tCisJICBvdGhlciBwcm9ncmFtcy4KKworMjAwNzAzMjQKKwkrIGVsaW1pbmF0ZSBwYXJ0IG9mIHRoZSBkaXJlY3QgdXNlIG9mIFdJTkRPVyBkYXRhIGZyb20gQWRhOTUgaW50ZXJmYWNlLgorCSsgZml4IHN1YnN0aXR1dGlvbnMgZm9yIHRlcm1saWIgZmlsZW5hbWUgdG8gbWFrZSBjb25maWd1cmUgb3B0aW9uCisJICAtLWVuYWJsZS1yZWVudHJhbnQgd29yayB3aXRoIC0td2l0aC10ZXJtbGliLgorCSsgY2hhbmdlIGEgY29uc3RydWN0b3IgZm9yIE5DdXJzZXNXaW5kb3cgdG8gYWxsb3cgY29tcGlsaW5nIHdpdGgKKwkgIE5DVVJTRVNfT1BBUVVFIHNldCwgc2luY2Ugd2UgY2Fubm90IHBhc3MgYSByZWZlcmVuY2UgdG8KKwkgIGFuIG9wYXF1ZSBwb2ludGVyLgorCisyMDA3MDMxNworCSsgaWdub3JlIC0td2l0aC1jaHR5cGU9dW5zaWduZWQgc2luY2UgdW5zaWduZWQgaXMgYWx3YXlzIGFkZGVkIHRvCisJICB0aGUgdHlwZSBpbiBjdXJzZXMuaDsgZG8gdGhlIHNhbWUgZm9yIC0td2l0aC1tbWFzay10LgorCSsgY2hhbmdlIHdhcm5pbmcgcmVnYXJkaW5nIC0tZW5hYmxlLWV4dC1jb2xvcnMgYW5kIHdpZGUtY2hhcmFjdGVyCisJICBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBhbiBlcnJvci4KKwkrIHR3ZWFrIGVycm9yIG1lc3NhZ2UgaW4gQ0ZfV0lUSF9MSUJUT09MIHRvIGRpc3Rpbmd1aXNoIG90aGVyIHByb2dyYW1zCisJICBzdWNoIGFzIERhcndpbidzIGxpYnRvb2wgcHJvZ3JhbSAocmVwb3J0IGJ5IE1pY2hhaWwgVmlkaWFzc292KQorCSsgbW9kaWZ5IGVkaXRfbWFuLnNoIHRvIGFsbG93IGZvciBtdWx0aXBsZSBzdWJzdGl0dXRpb25zIHBlciBsaW5lLgorCSsgc2V0IGxvY2FsZSBpbiBtaXNjL25jdXJzZXMtY29uZmlnLmluIHNpbmNlIGl0IHVzZXMgYSByYW5nZQorCSsgY2hhbmdlIHBlcm1pc3Npb25zIGxpYm5jdXJzZXMrKy5hIGluc3RhbGwgKHJlcG9ydCBieSBNaWNoYWlsCisJICBWaWRpYXNzb3YpLgorCSsgY29ycmVjdGVkIGxlbmd0aCBvZiB0ZW1wb3JhcnkgYnVmZmVyIGluIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24KKwkgIG9mIHNldF9maWVsZF9idWZmZXIoKSAocmVsYXRlZCB0byByZXBvcnQgYnkgQnJ5YW4gQ2hyaXN0KS4KKworMjAwNzAzMTEKKwkrIGZpeCBtay0xc3QuYXdrIHNjcmlwdCBpbnN0YWxsX3NobGliKCkgZnVuY3Rpb24sIGJyb2tlbiBpbiAyMDA3MDIyNAorCSAgY2hhbmdlcyBmb3IgY3lnd2luIChyZXBvcnQgYnkgIE1pY2hhaWwgVmlkaWFzc292KS4KKworMjAwNzAzMTAKKwkrIGluY3JlYXNlIHNpemUgb2YgYXJyYXkgaW4gX25jX3Zpc2J1ZjJuKCkgdG8gbWFrZSAidGljIC12IiB3b3JrCisJICBwcm9wZXJseSBpbiBpdHMgc2ltaWxhcl9zZ3IoKSBmdW5jdGlvbiAocmVwb3J0L2FuYWx5c2lzIGJ5IFBldGVyCisJICBTYW50b3JvKS4KKwkrIGFkZCAtLWVuYWJsZS1yZWVudHJhbnQgY29uZmlndXJlIG9wdGlvbiBmb3Igb25nb2luZyBjaGFuZ2VzIHRvCisJICBpbXBsZW1lbnQgYSByZWVudHJhbnQgdmVyc2lvbiBvZiBuY3Vyc2VzOgorCSAgKyBsaWJyYXJpZXMgYXJlIHN1ZmZpeGVkIHdpdGggInQiCisJICArIHdyYXAgc2V2ZXJhbCBnbG9iYWwgdmFyaWFibGVzIChjdXJzY3IsIG5ld3Njciwgc3Rkc2NyLCB0dHl0eXBlLAorCSAgICBDT0xPUlMsIENPTE9SX1BBSVJTLCBDT0xTLCBFU0NERUxBWSwgTElORVMgYW5kIFRBQlNJWkUpIGFzCisJICAgIGZ1bmN0aW9ucyByZXR1cm5pbmcgdmFsdWVzIHN0b3JlZCBpbiBTQ1JFRU4gb3IgY3VyX3Rlcm0uCisJICArIG1vdmUgc29tZSBpbml0aWFsaXphdGlvbiAoTElORVMsIENPTFMpIGZyb20gbGliX3NldHVwLmMsCisJICAgIGkuZS4sIHNldHVwdGVybSgpIHRvIF9uY19zZXR1cHNjcmVlbigpLCBpLmUuLCBuZXd0ZXJtKCkuCisKKzIwMDcwMzAzCisJKyByZWdlbmVyYXRlZCBodG1sIGRvY3VtZW50YXRpb24uCisJKyBhZGQgTkNVUlNFU19PUEFRVUUgc3ltYm9sIHRvIGN1cnNlcy5oLCB3aWxsIHVzZSB0byBtYWtlIHN0cnVjdHMKKwkgIG9wYXF1ZSBpbiBzZWxlY3RlZCBjb25maWd1cmF0aW9ucy4KKwkrIG1vdmUgdGhlIGNodW5rIGluIGxpYl9hY3MuYyB3aGljaCByZXNldHMgYWNzIGNhcGFiaWxpdGllcyB3aGVuCisJICBydW5uaW5nIG9uIGEgdGVybWluYWwgd2hvc2UgbG9jYWxlIGludGVyZmVyZXMgd2l0aCB0aG9zZSBpbnRvCisJICBfbmNfc2V0dXBzY3JlZW4oKSwgc28gdGhlIGxpYnRpbmZvL2xpYnRpbmZvdyBmaWxlcyBjYW4gYmUgbWFkZQorCSAgaWRlbnRpY2FsIChyZXF1ZXN0ZWQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisJKyBkbyBub3QgdXNlIGNvbmZpZ3VyZSB2YXJpYWJsZSBTSExJQl9MSUJTIGZvciBidWlsZGluZyBsaWJyYXJpZXMKKwkgIG91dHNpZGUgdGhlIG5jdXJzZXMgZGlyZWN0b3J5LCBzaW5jZSB0aGF0IHN5bWJvbCBpcyBjdXN0b21pemVkCisJICBvbmx5IGZvciB0aGF0IGRpcmVjdG9yeSwgYW5kIHVzaW5nIGl0IGludHJvZHVjZXMgYW4gdW5uZWVkZWQKKwkgIGRlcGVuZGVuY3kgb24gbGliZGwgKHJlcXVlc3RlZCBieSBNaXJvc2xhdiBMaWNodmFyKS4KKwkrIG1vZGlmeSBtay0xc3QuYXdrIHNvIHRoZSBnZW5lcmF0ZWQgbWFrZWZpbGUgcnVsZXMgZm9yIGxpbmtpbmcgb3IKKwkgIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcmllcyBkbyBub3QgZmlyc3QgcmVtb3ZlIHRoZSBsaWJyYXJ5LCBpbgorCSAgY2FzZSBpdCBpcyBpbiB1c2UsIGUuZy4sIGxpYm5jdXJzZXMuc28gYnkgL2Jpbi9zaCAocmVwb3J0IGJ5IEplZmYKKwkgIENodWEpLgorCSsgcmV2aXNlZCBzZWN0aW9uICJVc2luZyBOQ1VSU0VTIHVuZGVyIFhURVJNIiBpbiBuY3Vyc2VzLWludHJvLmh0bWwKKwkgIChwcm9tcHRlZCBieSBuZXdzZ3JvdXAgY29tbWVudCBieSBOaWNrIEd1ZW50aGVyKS4KKworMjAwNzAyMjQKKwkrIGNoYW5nZSBpbnRlcm5hbCByZXR1cm4gY29kZXMgb2YgX25jX3dnZXRjaCgpIHRvIGNoZWNrIGZvciBjYXNlcworCSAgd2hlcmUgS0VZX0NPREVfWUVTIHNob3VsZCBiZSByZXR1cm5lZCwgZS5nLiwgaWYgYSBLRVlfUkVTSVpFIHdhcworCSAgdW5nZXRjaCdkLCBhbmQgcmVhZCBieSB3Z2V0X3djaCgpLgorCSsgZml4IHN0YXRpYy1saWJyYXJ5IGJ1aWxkIGJyb2tlbiBpbiAyMDA3MDIxNyBjaGFuZ2VzIHRvIHJlbW92ZSAiLWxkbCIKKwkgIChyZXBvcnQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisJKyBjaGFuZ2UgbWFrZWZpbGUvc2NyaXB0cyBmb3IgY3lnd2luIHRvIGFsbG93IGJ1aWxkaW5nIHRlcm1saWIuCisJKyB1c2UgRm9ybV9Ib29rIGluIG1hbnBhZ2VzIHRvIG1hdGNoIGZvcm0uaAorCSsgdXNlIE1lbnVfSG9vayBpbiBtYW5wYWdlcywgYXMgd2VsbCBhcyBhIGZldyBwbGFjZXMgaW4gbWVudS5oCisJKyBjb3JyZWN0IGZvcm0tIGFuZCBtZW51LW1hbnBhZ2VzIHRvIHVzZSBzcGVjaWZpYyBGaWVsZF9PcHRpb25zLAorCSAgTWVudV9PcHRpb25zIGFuZCBJdGVtX09wdGlvbnMgdHlwZXMuCisJKyBjb3JyZWN0IHByb3RvdHlwZSBmb3IgX3RyYWNlY2hhcigpIGluIG1hbnBhZ2UgKGNmOiAyMDAxMTIyOSkuCisJKyBjb3JyZWN0IHByb3RvdHlwZSBmb3Igd3VuY3RybCgpIGluIG1hbnBhZ2UuCisKKzIwMDcwMjE3CisJKyBmaXhlcyBmb3IgJChUSUNTX0xJU1QpIGluIG5jdXJzZXMvTWFrZWZpbGUgKHJlcG9ydCBieSBNaXJvc2xhdgorCSAgTGljaHZhcikuCisJKyBtb2RpZnkgcmVsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gYXBwbHkgb25seSB3aGVuIHJwYXRoIGlzCisJICBlbmFibGVkLCBhbmQgYWRkIC0tZGlzYWJsZS1yZWxpbmsgb3B0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisJICBkaXNhYmxlIHRoZSBmZWF0dXJlIGFsdG9nZXRoZXIgKHJlcG9ydHMgYnkgTWljaGFpbCBWaWRpYXNzb3YsCisJICBBZGFtIEogUmljaHRlcikuCisJKyBmaXggLS13aXRoLXRlcm1saWIgb3B0aW9uIGZvciB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLCBzdHJpcHBpbmcKKwkgIHRoZSAidyIgc3VmZml4IGluIG9uZSBwbGFjZSAocmVwb3J0IGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCSsgcmVtb3ZlICItbGRsIiBmcm9tIHNvbWUgbGlicmFyeSBsaXN0cyB0byByZWR1Y2UgZGVwZW5kZW5jaWVzIGluCisJICBwcm9ncmFtcyAocmVwb3J0IGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCSsgY29ycmVjdCBkZXNjcmlwdGlvbiBvZiAtLWVuYWJsZS1zaWduZWQtY2hhciBpbiBjb25maWd1cmUgLS1oZWxwCisJICAocmVwb3J0IGJ5IE1pY2hhaWwgVmlkaWFzc292KS4KKwkrIGFkZCBwYXR0ZXJuIGZvciBHTlUva0ZyZWVCU0QgY29uZmlndXJhdGlvbiB0byBDRl9YT1BFTl9TT1VSQ0UsCisJICB3aGljaCBtYXRjaGVzIGFuIGVhcmxpZXIgY2hhbmdlIHRvIENGX1NIQVJFRF9PUFRTLCBmcm9tIHh0ZXJtICMyMjQKKwkgIGZpeGVzLgorCSsgcmVtb3ZlICIke0RFU1RESVJ9IiBmcm9tIC1pbnN0YWxsX25hbWUgb3B0aW9uIHVzZWQgZm9yIGxpbmtpbmcKKwkgIHNoYXJlZCBsaWJyYXJpZXMgb24gRGFyd2luIChyZXBvcnQgYnkgTWljaGFpbCBWaWRpYXNzb3YpLgorCisyMDA3MDIxMAorCSsgYWRkIHRlc3QvaW5jaHMuYywgdGVzdC9pbmNoX3dpZGUuYywgdG8gdGVzdCB3aW5fd2NobnN0cigpLgorCSsgcmVtb3ZlIGxpYmRsIGZyb20gbGlicmFyeSBsaXN0IGZvciB0ZXJtbGliIChyZXBvcnQgYnkgTWlyb3NsYXYKKwkgIExpY2h2YXIpLgorCSsgZml4IGNvbmZpZ3VyZS5pbiB0byBhbGxvdyAtLXdpdGhvdXQtcHJvZ3MgLS13aXRoLXRlcm1saWIgKHBhdGNoIGJ5CisJICBNaXJvc2xhdiBMaWNodmFyKS4KKwkrIG1vZGlmeSB3aW5fd2NobnN0cigpIHRvIGVuc3VyZSB0aGF0IG9ubHkgYSBiYXNlIGNlbGwgaXMgcmV0dXJuZWQKKwkgIGZvciBlYWNoIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIgKHByb21wdGVkIGJ5IHJlcG9ydCBieSBXZWkgS29uZworCSAgcmVnYXJkaW5nIGNoYW5nZSBpbiBtdndpbl93Y2goKSBjZjogMjAwNDEwMjMpLgorCisyMDA3MDIwMworCSsgbW9kaWZ5IGZpeF93Y2huc3RyKCkgaW4gZm9ybSBsaWJyYXJ5IHRvIHN0cmlwIGF0dHJpYnV0ZXMgKGFuZCBjb2xvcikKKwkgIGZyb20gdGhlIGNjaGFyX3QgYXJyYXkgKGZpZWxkIGNlbGxzKSByZWFkIGZyb20gYSBmaWVsZCdzIHdpbmRvdy4KKwkgIE90aGVyd2lzZSwgd2hlbiBjb3B5aW5nIHRoZSBmaWVsZCBjZWxscyBiYWNrIHRvIHRoZSB3aW5kb3csIHRoZQorCSAgYXNzb2NpYXRlZCBjb2xvciBvdmVycmlkZXMgdGhlIGZpZWxkJ3MgYmFja2dyb3VuZCBjb2xvciAocmVwb3J0IGJ5CisJICBSaWNhcmRvIENhbnR1KS4KKwkrIGltcHJvdmUgdHJhY2luZyBmb3IgZm9ybSBsaWJyYXJ5LCBzaG93aW5nIGNyZWF0ZWQgZm9ybXMsIGZpZWxkcywgZXRjLgorCSsgaWdub3JlIC0tZW5hYmxlLXJwYXRoIGNvbmZpZ3VyZSBvcHRpb24gaWYgLS13aXRoLXNoYXJlZCB3YXMgb21pdHRlZC4KKwkrIGFkZCBfbmNfbGVha3NfdGluZm8oKSwgX25jX2ZyZWVfdGljKCksIF9uY19mcmVlX3RpbmZvKCkgZW50cnlwb2ludHMKKwkgIHRvIGFsbG93IGxlYWstY2hlY2tpbmcgd2hlbiBib3RoIHRpYy0gYW5kIHRpbmZvLWxpYnJhcmllcyBhcmUgYnVpbHQuCisJKyBkcm9wIENGX0NQUF9WU0NBTl9GVU5DIG1hY3JvIGZyb20gY29uZmlndXJlIHNjcmlwdCwgc2luY2UgQysrIGJpbmRpbmcKKwkgIG5vIGxvbmdlciByZWxpZXMgb24gaXQuCisJKyBkaXNhbGxvdyBjb21iaW5pbmcgY29uZmlndXJlIHNjcmlwdCBvcHRpb25zIC0td2l0aC10aWNsaWIgYW5kCisJICAtLWVuYWJsZS10ZXJtY2FwIChyZXBvcnQgYnkgUm9uZy1FbiBGYW4pLgorCSsgcmVtb3ZlIHRhY2sgZnJvbSBuY3Vyc2VzIHRyZWUuCisKKzIwMDcwMTI4CisJKyBmaXggdHlwbyBpbiBjb25maWd1cmUgc2NyaXB0IHRoYXQgYnJva2UgLS13aXRoLXRlcm1saWIgb3B0aW9uCisJICAocmVwb3J0IGJ5IFJvbmctRW4gRmFuKS4KKworMjAwNzAxMjcKKwkrIGltcHJvdmUgZml4IGZvciBGcmVlQlNEIGdudS85ODk3NSwgdG8gYWxsb3cgZm9yIG51bGwgcG9pbnRlciBwYXNzZWQKKwkgIHRvIHRnZXRlbnQoKSAocmVwb3J0IGJ5IFJvbmctZW4gRmFuKS4KKwkrIHVwZGF0ZSB0YWNrL0hJU1RPUlkgYW5kIHRhY2svUkVBRE1FIHRvIHRlbGwgaG93IHRvIGJ1aWxkIGl0IGFmdGVyCisJICBpdCBpcyByZW1vdmVkIGZyb20gdGhlIG5jdXJzZXMgdHJlZS4KKwkrIGZpeCBjb25maWd1cmUgY2hlY2sgZm9yIGxpYnRvb2wncyB2ZXJzaW9uIHRvIHRyaW0gYmxhbmsgbGluZXMKKwkgIChyZXBvcnQgYnkgc2NpLWZpQGh1c2guYWkpLgorCSsgcmV2aWV3L2VsaW1pbmF0ZSBvdGhlciBvcmlnaW5hbC1maWxlIGFydGlmYWN0cyBpbiBjdXJzZXN3LmNjLCBtYWtpbmcKKwkgIGl0cyBsaWNlbnNlIGNvbnNpc3RlbnQgd2l0aCBuY3Vyc2VzLgorCSsgdXNlIG5jdXJzZXMgdndfc2NhbncoKSByYXRoZXIgdGhhbiByZWFkaW5nIGludG8gYSBmaXhlZCBidWZmZXIgaW4KKwkgIHRoZSBjKysgYmluZGluZyBmb3Igc2NhbncoKSBtZXRob2RzIChwcm9tcHRlZCBieSByZXBvcnQgYnkgTnVubyBEaWFzKS4KKwkrIGVsaW1pbmF0ZSBmaXhlZC1idWZmZXIgdnNwcmludGYoKSBjYWxscyBpbiBjKysgYmluZGluZy4KKworMjAwNzAxMjAKKwkrIGFkZCBfbmNfbGVha3NfdGljKCkgdG8gc2VwYXJhdGUgbGVhay1jaGVja2luZyBvZiB0aWMgbGlicmFyeSBmcm9tCisJICB0ZXJtL25jdXJzZXMgbGlicmFyaWVzLCBhbmQgdGhlcmVieSBlbGltaW5hdGUgYSBsaWJyYXJ5IGRlcGVuZGVuY3kuCisJKyBmaXggdGVzdC9tay10ZXN0LmF3ayB0byBpZ25vcmUgYmxhbmsgbGluZXMuCisJKyBjb3JyZWN0IHBhdGhzIGluIGluY2x1ZGUvaGVhZGVycywgZm9yIC0tc3JjZGlyIChwYXRjaCBieSBNaXJvc2xhdgorCSAgTGljaHZhcikuCisKKzIwMDcwMTEzCisJKyBhZGQgYSBicmVhay1zdGF0ZW1lbnQgaW4gbWlzYy9zaGxpYiB0byBlbnN1cmUgdGhhdCBpdCBleGl0cyBvbiB0aGUKKwkgIF9maXJzdF8gbWF0Y2hlZCBkaXJlY3RvcnkgKHJlcG9ydCBieSBQYXVsIE5vdmFrKS4KKwkrIGFkZCB0YWNrL2NvbmZpZ3VyZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYnVpbGQgdGFjayBvdXRzaWRlIHRoZQorCSAgbmN1cnNlcyBidWlsZC10cmVlLgorCSsgYWRkIC0td2l0aC10aWNsaWIgb3B0aW9uLCB0byBidWlsZC9pbnN0YWxsIHRoZSB0aWMtc3VwcG9ydCBmdW5jdGlvbnMKKwkgIGluIGEgc2VwYXJhdGUgbGlicmFyeSAoc3VnZ2VzdGVkIGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCisyMDA3MDEwNgorCSsgY2hhbmdlIE1LdW5jdHJsLmF3ayB0byByZWR1Y2UgcmVsb2NhdGlvbiB0YWJsZSBmb3IgdW5jdHJsLm8KKwkrIGNoYW5nZSBNS2tleW5hbWUuYXdrIHRvIHJlZHVjZSByZWxvY2F0aW9uIHRhYmxlIGZvciBrZXluYW1lLm8KKwkgIChwYXRjaCBieSBNaXJvc2xhdiBMaWNodmFyKS4KKworMjAwNjEyMzAKKwkrIG1vZGlmeSBjb25maWd1cmUgY2hlY2sgZm9yIGxpYnRvb2wncyB2ZXJzaW9uIHRvIHRyaW0gYmxhbmsgbGluZXMKKwkgIChyZXBvcnQgYnkgc2NpLWZpQGh1c2guYWkpLgorCSsgbW9kaWZ5IHNvbWUgbW9kdWxlcyB0byBhbGxvdyB0aGVtIHRvIGJlIHJlZW50cmFudCBpZiBfUkVFTlRSQU5UIGlzCisJICBkZWZpbmVkOiBsaWJfYmF1ZHJhdGUuYywgcmVzaXpldGVybS5jIChsb2NhbCBkYXRhIG9ubHkpCisJKyBlbGltaW5hdGUgc3RhdGljIGRhdGEgZnJvbSBzb21lIG1vZHVsZXM6IGFkZF90cmllcy5jLCBoYXJkc2Nyb2xsLmMsCisJICBsaWJfdHR5ZmxhZ3MuYywgbGliX3R3YWl0LmMKKwkrIGltcHJvdmUgbWFucGFnZSBpbnN0YWxsIHRvIGFkZCBhbGlhc2VzIGZvciB0aGUgdHJhbnNmb3JtZWQgcHJvZ3JhbQorCSAgbmFtZXMsIGUuZy4sIGZyb20gLS1wcm9ncmFtLXByZWZpeC4KKwkrIHVzZWQgbGlua2xpbnQgdG8gdmVyaWZ5IGxpbmtzIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24sIG1hZGUgZml4ZXMKKwkgIHRvIG1hbnBhZ2VzIGFzIG5lZWRlZC4KKwkrIGZpeCBhIHR5cG8gaW4gY3Vyc19tb3VzZS4zeCAocmVwb3J0IGJ5IFdpbGxpYW0gTWNCcmluZSkuCisJKyBmaXggaW5zdGFsbC1ydWxlIGZvciBuY3Vyc2VzNS1jb25maWcgdG8gbWFrZSB0aGUgYmluLWRpcmVjdG9yeS4KKworMjAwNjEyMjMKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIG9taXQgdGhlIHRpYyAodGVybWluZm8gY29tcGlsZXIpIHN1cHBvcnQKKwkgIGZyb20gbmN1cnNlcyBsaWJyYXJ5IGlmIC0td2l0aG91dC1wcm9ncyBvcHRpb24gaXMgZ2l2ZW4uCisJKyBtb2RpZnkgaW5zdGFsbCBydWxlIGZvciBuY3Vyc2VzNS1jb25maWcgdG8gZG8gdGhpcyB2aWEgImluc3RhbGwubGlicyIKKwkrIG1vZGlmeSBzaGFyZWQtbGlicmFyeSBydWxlcyB0byBhbGxvdyBGcmVlQlNEIDMueCB0byB1c2UgcnBhdGguCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisKKzIwMDYxMjE3IDUuNiByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKworMjAwNjEyMTcKKwkrIGFkZCBpZmRlZidzIGZvciA8d2N0eXBlLmg+IGZvciBIUFVYLCB3aGljaCBoYXMgdGhlIGNvcnJlc3BvbmRpbmcKKwkgIGRlZmluaXRpb25zIGluIDx3Y2hhci5oPi4KKwkrIHJldmVydCB0aGUgdmFfY29weSgpIGNoYW5nZSBmcm9tIDIwMDYxMjAyLCBzaW5jZSBpdCB3YXMgbmVpdGhlcgorCSAgY29ycmVjdCBub3IgcG9ydGFibGUuCisJKyBhZGQgJChMT0NBTF9MSUJTKSBkZWZpbml0aW9uIHRvIHByb2dzL01ha2VmaWxlLmluLCBuZWVkZWQgZm9yCisJICBycGF0aCBvbiBTb2xhcmlzLgorCSsgaWdub3JlIHdpZGUtYWNzIGxpbmUtZHJhd2luZyBjaGFyYWN0ZXJzIHRoYXQgd2N3aWR0aCgpIGNsYWltcyBhcmUKKwkgIG5vdCBvbmUtY29sdW1uLiAgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIFNvbGFyaXMnIGJyb2tlbiBsb2NhbGUKKwkgIHN1cHBvcnQuCisKKzIwMDYxMjE2CisJKyBtb2RpZnkgY29uZmlndXJlIC0td2l0aC1ncG0gb3B0aW9uIHRvIGFsbG93IGl0IHRvIGFjY2VwdCBhIHBhcmFtZXRlciwKKwkgIGkuZS4sIHRoZSBuYW1lIG9mIHRoZSBkeW5hbWljIEdQTSBsaWJyYXJ5IHRvIGxvYWQgdmlhIGRsb3BlbigpCisJICAocmVxdWVzdGVkIGJ5IEJyeWFuIEhlbmRlcnNvbikuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtdmFsZ3JpbmQsIGNoYW5nZXMgZnJvbSB2aWxlLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgQUNfVFJZX1JVTiBhbmQgQUNfVFJZX0xJTksgY2hlY2tzIHRvIHVzZQorCSAgJ3JldHVybicgaW4gcHJlZmVyZW5jZSB0byAnZXhpdCgpJy4KKworMjAwNjEyMDkKKwkrIGNoYW5nZSBkZWZhdWx0IGZvciAtLXdpdGgtZGV2ZWxvcCBiYWNrIHRvICJubyIuCisJKyBhZGQgWFRBQlMgdG8gdHJhY2luZyBvZiBUVFkgYml0cy4KKwkrIHVwZGF0ZWQgYXV0b2NvbmYgcGF0Y2ggdG8gaWZkZWYtb3V0IHRoZSBtaXNmZWF0dXJlIHdoaWNoIGRlY2xhcmVzCisJICBleGl0KCkgZm9yIGNvbmZpZ3VyZSB0ZXN0cy4gIFRoaXMgZml4ZXMgYSByZWRlZmluaXRpb24gd2FybmluZyBvbgorCSAgU29sYXJpcy4KKwkrIHVzZSAke0NDfSByYXRoZXIgdGhhbiAke0xEfSBpbiBzaGFyZWQgbGlicmFyeSBydWxlcyBmb3IgSVJJWDY0LAorCSAgU29sYXJpcyB0byBoZWxwIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIHNlY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IKKwkgIGV4dHJhIGxpbmthZ2UgcmVxdWlyZW1lbnRzLCBlLmcuLCBvZiBDKysgYXBwbGljYXRpb25zIChwcm9tcHRlZCBieQorCSAgY29tbWVudCBieSBDYXNwZXIgRGlrIGluIG5ld3Nncm91cCkuCisJKyByZW5hbWUgIiR0YXJnZXQiIGluIENGX01BTl9QQUdFUyB0byBtYWtlIGl0IGVhc2llciB0byBkaXN0aW5ndWlzaAorCSAgZnJvbSB0aGUgYXV0b2NvbmYgcHJlZGVmaW5lZCBzeW1ib2wuICBUaGVyZSB3YXMgbm8gY29uZmxpY3QsCisJICBzaW5jZSAiJHRhcmdldCIgd2FzIHVzZWQgb25seSBpbiB0aGUgZ2VuZXJhdGVkIGVkaXRfbWFuLnNoIGZpbGUsCisJICBidXQgU3VTRSdzIHJwbSBwYWNrYWdlIGNvbnRhaW5zIGEgcGF0Y2guCisKKzIwMDYxMjAyCisJKyB1cGRhdGUgbWFuL3Rlcm0uNSB0byByZWZsZWN0IGV4dGVuZGVkIHRlcm1pbmZvIHN1cHBvcnQgYW5kIGhhc2hlZAorCSAgZGF0YWJhc2UgY29uZmlndXJhdGlvbi4KKwkrIHVwZGF0ZXMgZm9yIHRlc3QvY29uZmlndXJlIHNjcmlwdC4KKwkrIGFkYXB0ZWQgZnJvbSBTdVNFIHJwbSBwYWNrYWdlOgorCSAgKyByZW1vdmUgbG9uZy1vYnNvbGV0ZSB3b3JrYXJvdW5kIGZvciBicm9rZW4tbGlua2VyIHdoaWNoIGRlY2xhcmVkCisJICAgIGN1cl90ZXJtIGluIHRpYy5jCisJICArIGltcHJvdmUgZXJyb3IgcmVjb3ZlcnkgaW4gUFVUQygpIG1hY3JvIHdoZW4gd2NydG9tYigpIGRvZXMgbm90CisJICAgIHJldHVybiB1c2FibGUgcmVzdWx0cyBmb3IgYW4gOC1iaXQgY2hhcmFjdGVyLgorCSsgcGF0Y2hlcyBmcm9tIHJwbSBwYWNrYWdlIChTdVNFKToKKwkgICsgdXNlIHZhX2NvcHkoKSBpbiBleHRyYSB2YXJhcmdzIG1hbmlwdWxhdGlvbiBmb3IgdHJhY2luZyB2ZXJzaW9uCisJICAgIG9mIHByaW50dywgZXRjLgorCSAgKyB1c2UgYSB2YV9saXN0IHJhdGhlciB0aGFuIGEgbnVsbCBpbiBfbmNfZnJlZWFsbCgpJ3MgY2FsbCB0bworCSAgICBfbmNfcHJpbnRmX3N0cmluZygpLgorCSsgYWRkIHNvbWUgc2VlLWFsc28gcmVmZXJlbmNlcyBpbiBtYW5wYWdlcyB0byBzaG93IHJlbGF0ZWQKKwkgIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyAoc3VnZ2VzdGVkIGJ5IENsYXVzIEZpc2NoZXIpLgorCisyMDA2MTEyNQorCSsgYWRkIGEgY2hlY2sgaW4gbGliX2NvbG9yLmMgdG8gZW5zdXJlIGNhbGxlciBkb2VzIG5vdCBpbmNyZWFzZSBDT0xPUlMKKwkgIGFib3ZlIG1heF9jb2xvcnMsIHdoaWNoIGlzIHVzZWQgYXMgYW4gYXJyYXkgaW5kZXggKGRpc2N1c3Npb24gd2l0aAorCSAgU2ltb24gU2FzYnVyZykuCisJKyBhZGQgaWZkZWYncyBhbGxvd2luZyBuY3Vyc2VzIHRvIGJlIGJ1aWx0IHdpdGggdHBhcm0oKSB1c2luZyBlaXRoZXIKKwkgIHZhcmFyZ3MgKHRoZSBleGlzdGluZyBzdGF0dXMpLCBvciB1c2luZyBhIGZpeGVkLXBhcmFtZXRlciBsaXN0ICh0bworCSAgbWF0Y2ggWC9PcGVuKS4KKworMjAwNjExMDQKKwkrIGZpeCByZWRyYXdpbmcgb2Ygd2luZG93cyBvdGhlciB0aGFuIHN0ZHNjciB1c2luZyB3cmVkcmF3bG4oKSBieQorCSAgdG91Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcm93cyBpbiBjdXJzY3IgKGRpc2N1c3Npb24gd2l0aCBEYW4KKwkgIEdvb2tpbikuCisJKyBhZGQgdGVzdC9yZWRyYXcuYworCSsgYWRkIHRlc3QvZWNob2NoYXIuYworCSsgcmV2aWV3L2NsZWFudXAgbWFucGFnZSBkZXNjcmlwdGlvbnMgb2YgZXJyb3ItcmV0dXJucyBmb3IgZm9ybS0gYW5kCisJICBtZW51LWxpYnJhcmllcyAocHJvbXB0ZWQgYnkgRnJlZUJTRCBkb2NzLzQ2MTk2KS4KKworMjAwNjEwMjgKKwkrIGFkZCBBVVRIT1JTIGZpbGUgLVRECisJKyBvbWl0IHRoZSAtRCBvcHRpb25zIGZyb20gb3V0cHV0IG9mIHRoZSBuZXcgY29uZmlnIHNjcmlwdCAtLWNmbGFncworCSAgb3B0aW9uIChzdWdnZXN0ZWQgYnkgUmFsZiBTIEVuZ2Vsc2NoYWxsKS4KKwkrIG1ha2UgTkNVUlNFU19JTkxJTkUgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgaW4gY3Vyc2VzLmgKKworMjAwNjEwMjEKKwkrIHJldmVydCBjaGFuZ2UgdG8gYWNjb21tb2RhdGUgYmFzaCAzLjIsIHNpbmNlIHRoYXQgYnJlYWtzIG90aGVyCisJICBwbGF0Zm9ybXMsIGUuZy4sIFNvbGFyaXMuCisJKyBtaW5vciBmaXhlcyB0byBORVdTIGZpbGUgdG8gc2ltcGxpZnkgc2NyaXB0aW5nIHRvIG9idGFpbiBsaXN0IG9mCisJICBjb250cmlidXRvcnMuCisJKyBpbXByb3ZlIHNvbWUgc2hhcmVkLWxpYnJhcnkgY29uZmlndXJlIHNjcmlwdGluZyBmb3IgTGludXgsIEZyZWVCU0QKKwkgIGFuZCBOZXRCU0QgdG8gbWFrZSAiLS13aXRoLXNobGliLXZlcnNpb24iIHdvcmsuCisJKyBjaGFuZ2UgY29uZmlndXJlLXNjcmlwdCBydWxlcyBmb3IgRnJlZUJTRCBzaGFyZWQgbGlicmFyaWVzIHRvIGFsbG93CisJICBmb3IgcnBhdGggc3VwcG9ydCBpbiB2ZXJzaW9ucyBwYXN0IDMuCisJKyB1c2UgJChERVNURElSKSBpbiBtYWtlZmlsZSBydWxlcyBmb3IgaW5zdGFsbGluZy91bmluc3RhbGxpbmcgdGhlCisJICBwYWNrYWdlIGNvbmZpZyBzY3JpcHQgKHJlcG9ydHMvcGF0Y2hlcyBieSBDaHJpc3RpYW4gV2llc2UsCisJICBSYWxmIFMgRW5nZWxzY2hhbGwpLgorCSsgZml4IGEgd2FybmluZyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBmb3IgTmV0QlNEIDIuMCwgd29ya2luZyBhcm91bmQKKwkgIHNwdXJpb3VzIGJsYW5rcyBlbWJlZGRlZCBpbiBpdHMgJHtNQUtFRkxBR1N9IHN5bWJvbC4KKwkrIGNoYW5nZSB0ZXN0L01ha2VmaWxlIHRvIHNpbXBsaWZ5IGluc3RhbGxpbmcgdGVzdCBwcm9ncmFtcyBpbiBhCisJICBkaWZmZXJlbnQgZGlyZWN0b3J5IHdoZW4gLS1lbmFibGUtcnBhdGggaXMgdXNlZC4KKworMjAwNjEwMTQKKwkrIHdvcmsgYXJvdW5kIGJ1ZyBpbiBiYXNoIDMuMiBieSBhZGRpbmcgZXh0cmEgcXVvdGVzIChKaW0gR2lmZm9yZCkuCisJKyBhZGQvaW5zdGFsbCBhIHBhY2thZ2UgY29uZmlnIHNjcmlwdCwgZS5nLiwgIm5jdXJzZXM1LWNvbmZpZyIgb3IKKwkgICJuY3Vyc2VzdzUtY29uZmlnIiwgYWNjb3JkaW5nIHRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKworMjAwNjEwMDcKKwkrIGFkZCBzZXZlcmFsIEdOVSBTY3JlZW4gdGVybWluZm8gdmFyaWF0aW9ucyB3aXRoIDE2LSBhbmQgMjU2LWNvbG9ycywKKwkgIGFuZCBzdGF0dXMgbGluZSAoQWxhaW4gQmVuY2gpLgorCSsgY2hhbmdlIHRoZSB3YXkgc2hhcmVkIGxpYnJhcmllcyAob3RoZXIgdGhhbiBsaWJ0b29sKSBhcmUgaW5zdGFsbGVkLgorCSAgUmF0aGVyIHRoYW4gY29weWluZyB0aGUgYnVpbGQtdHJlZSdzIGxpYnJhcmllcywgbGluayB0aGUgc2hhcmVkCisJICBvYmplY3RzIGludG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5LiAgVGhpcyBtYWtlcyB0aGUgLS13aXRoLXJwYXRoCisJICBvcHRpb24gd29yayBleGNlcHQgd2l0aCAkKERFU1RESVIpIChjZjogMjAwMDA5MzApLgorCisyMDA2MDkzMAorCSsgZml4IGlmZGVmIGluIGMrKy9pbnRlcm5hbC5oIGZvciBRTlggNi4xCisJKyB0ZXN0LWNvbXBpbGVkIHdpdGggKG9sZCkgZWdjcy0xLjEuMiwgbW9kaWZpZWQgY29uZmlndXJlIHNjcmlwdCB0bworCSAgbm90IHVuc2V0IHRoZSAkQ1hYIGFuZCByZWxhdGVkIHZhcmlhYmxlcyB3aGljaCB3b3VsZCBwcmV2ZW50IHRoaXMuCisJKyBmaXggYSBmZXcgdGVybWluZm8uc3JjIHR5cG9zIGV4cG9zZWQgYnkgaW1wcm92bWVudHMgdG8gIi1mIiBvcHRpb24uCisJKyBpbXByb3ZlIGluZm9jbXAvdGljICItZiIgb3B0aW9uIGZvcm1hdHRpbmcuCisKKzIwMDYwOTIzCisJKyBtYWtlIC0tZGlzYWJsZS1sYXJnZWZpbGUgb3B0aW9uIHdvcmsgKHJlcG9ydCBieSBUaG9tYXMgTSBPdHQpLgorCSsgdXBkYXRlZCBodG1sIGRvY3VtZW50YXRpb24uCisJKyBhZGQga2EyLCBrYjEsIGtiMywga2MyIHRvIHZ0MjIwLWtleXBhZCBhcyBhbiBleHRlbnNpb24gLVRECisJKyBtaW5vciBpbXByb3ZlbWVudHMgdG8gcnh2dCtwY2ZrZXlzIC1URAorCisyMDA2MDkxNgorCSsgbW92ZSBzdGF0aWMgZGF0YSBmcm9tIGxpYl9tb3VzZS5jIGludG8gU0NSRUVOIHN0cnVjdC4KKwkrIGltcHJvdmUgaWZkZWYncyBmb3IgX1BPU0lYX1ZESVNBQkxFIGluIHRzZXQgdG8gd29yayB3aXRoIE1hYyBPUyBYCisJICAocmVwb3J0IGJ5IE1pY2hhaWwgVmlkaWFzc292KS4KKwkrIG1vZGlmeSBDRl9QQVRIX1NZTlRBWCB0byBlbnN1cmUgaXQgdXNlcyB0aGUgcmVzdWx0IGZyb20gLS1wcmVmaXgKKwkgIG9wdGlvbiAoZnJvbSBseW54IGNoYW5nZXMpIC1URAorCSsgYWRhcHQgQUNfUFJPR19FR1JFUCBjaGVjaywgbm90aW5nIHRoYXQgdGhpcyBpcyBsaWtlbHkgdG8gYmUgYW5vdGhlcgorCSAgcGxhY2UgYWdncmF2YXRlZCBieSBQT1NJWExZX0NPUlJFQ1QuCisJKyBtb2RpZnkgY29uZmlndXJlIGNoZWNrIGZvciBhd2sgdG8gZW5zdXJlIHRoYXQgaXQgaXMgZm91bmQgKHByb21wdGVkCisJICBieSByZXBvcnQgYnkgQ2hyaXN0b3BoZXIgUGFya2VyKS4KKwkrIHVwZGF0ZSBjb25maWcuc3ViCisKKzIwMDYwOTA5CisJKyBhZGQga29uLCBrb24yIGFuZCBqZmJ0ZXJtIHRlcm1pbmZvIGVudHJ5IChyZXF1ZXN0IGJ5IFRpbGwgTWFhcykgLVRECisJKyByZW1vdmUgaW52aXMgY2FwYWJpbGl0eSBmcm9tIGtsb25lK3NnciwgbWFpbmx5IHVzZWQgYnkgbGludXggZW50cnksCisJICBzaW5jZSBpdCBkb2VzIG5vdCByZWFsbHkgZG8gdGhpcyAtVEQKKworMjAwNjA5MDMKKwkrIGNvcnJlY3QgbG9naWMgaW4gd2FkZF93Y2goKSBhbmQgd2VjaG9fd2NoKCksIHdoaWNoIGRpZCBub3QgZ3VhcmQKKwkgIGFnYWluc3QgcGFzc2luZyB0aGUgbXVsdGktY29sdW1uIGF0dHJpYnV0ZSBpbnRvIGEgY2FsbCBvbiB3YWRkY2goKSwKKwkgIGUuZy4sIHVzaW5nIGRhdGEgcmV0dXJuZWQgYnkgd2luX3djaCgpIChjZjogMjAwNDEwMjMpCisJICAocmVwb3J0IGJ5IFNhZHJ1bCBIIENob3dkaHVyeSkuCisKKzIwMDYwOTAyCisJKyBmaXgga3Rlcm0ncyBhY3NjIHN0cmluZyAtVEQKKwkrIGZpeCBmb3IgY2hhbmdlIHRvIHRpYy9pbmZvY21wIGluIDIwMDYwODE5IHRvIGVuc3VyZSBubyBibGFuayBpcworCSAgZW1iZWRkZWQgaW50byBhIHRlcm1jYXAgZGVzY3JpcHRpb24uCisJKyB3b3JrYXJvdW5kIGZvciAyMDA1MDgwNiBpZmRlZidzIGNoYW5nZSB0byBhbGxvdyB2aXNidWYuYyB0byBjb21waWxlCisJICB3aGVuIHVzaW5nIC0td2l0aC10ZXJtbGliIC0td2l0aC10cmFjZSBvcHRpb25zLgorCSsgaW1wcm92ZSB0Z2V0c3RyKCkgYnkgbWFraW5nIHRoZSByZXR1cm4gdmFsdWUgcG9pbnQgaW50byB0aGUgdXNlcidzCisJICBidWZmZXIsIGlmIHByb3ZpZGVkIChwYXRjaCBieSBNaXJvc2xhdiBMaWNodmFyIChzZWUgUmVkaGF0IEJ1Z3ppbGxhCisJICAjMjAyNDgwKSkuCisJKyBjb3JyZWN0IGxpYnJhcmllcyBuZWVkZWQgZm9yIGZvbGRrZXlzIChyZXBvcnQgYnkgU3RhbmlzbGF2IElldmxldikKKworMjAwNjA4MjYKKwkrIGFkZCB0ZXJtaW5mbyBlbnRyaWVzIGZvciB4ZmNlIHRlcm1pbmFsICh4ZmNlKSBhbmQgbXVsdGkgZ25vbWUKKwkgIHRlcm1pbmFsIChtZ3QpIC1URAorCSsgYWRkIHRlc3QvZm9sZGtleXMuYworCisyMDA2MDgxOQorCSsgbW9kaWZ5IHRpYyBhbmQgaW5mb2NtcCB0byBhdm9pZCB3cml0aW5nIHRyYWlsaW5nIGJsYW5rcyBvbiB0ZXJtaW5mbworCSAgc291cmNlIG91dHB1dCAoRGViaWFuICMzNzg3ODMpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gZW5zdXJlIHRoYXQgaWYgdGhlIEMgY29tcGlsZXIgaXMgdXNlZAorCSAgcmF0aGVyIHRoYW4gdGhlIGxvYWRlciBpbiBtYWtpbmcgc2hhcmVkIGxpYnJhcmllcywgdGhlICQoQ0ZMQUdTKQorCSAgdmFyaWFibGUgaXMgYWxzbyB1c2VkIChSZWRoYXQgQnVnemlsbGEgIzE5OTM2OSkuCisJKyBwb3J0IGhhc2hlZC1kYiBjb2RlIHRvIGRiMiBhbmQgZGIzLgorCSsgZml4IGEgYnVnIGluIHRnZXRlbnQoKSBmcm9tIDIwMDYwNjI1IGFuZCAyMDA2MDcxNSBjaGFuZ2VzCisJICAocGF0Y2gvYW5hbHlzaXMgYnkgTWlyb3NsYXYgTGljaHZhciAoc2VlIFJlZGhhdCBCdWd6aWxsYSAjMjAyNDgwKSkuCisKKzIwMDYwODA1CisJKyB1cGRhdGVkIHh0ZXJtIGZ1bmN0aW9uLWtleXMgdGVybWluZm8gdG8gbWF0Y2ggeHRlcm0gIzIxNiAtVEQKKwkrIGFkZCBjb25maWd1cmUgLS13aXRoLWhhc2hlZC1kYiBvcHRpb24gKHRlc3RlZCBvbmx5IHdpdGggRnJlZUJTRCA2LjAsCisJICBlLmcuLCB0aGUgZGIgMS44LjUgaW50ZXJmYWNlKS4KKworMjAwNjA3MjkKKwkrIG1vZGlmeSB0b2UgdG8gYWNjZXNzIHRlcm1jYXAgZGF0YSwgZS5nLiwgdmlhIGNnZXRlbnQoKSBmdW5jdGlvbnMsCisJICBvciBhcyBhIHRleHQgZmlsZSBpZiB0aG9zZSBhcmUgbm90IGF2YWlsYWJsZS4KKwkrIHVzZSBfbmNfYmFzZW5hbWUoKSBpbiB0c2V0IHRvIGltcHJvdmUgJFNIRUxMIGNoZWNrIGZvciBjc2gvc2guCisJKyBtb2RpZnkgX25jX3JlYWRfZW50cnkoKSBhbmQgX25jX3JlYWRfdGVybWNhcF9lbnRyeSgpIHNvIGluZm9jbXAsCisJICBjYW4gYWNjZXNzIHRlcm1jYXAgZGF0YSB3aGVuIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBpcyBkaXNhYmxlZC4KKworMjAwNjA3MjIKKwkrIHdpZGVuIHRoZSB0ZXN0IGZvciB4dGVybSBrbW91cyBhIGxpdHRsZSB0byBhbGxvdyBmb3Igb3RoZXIgc3RyaW5ncworCSAgdGhhbiBcRVtNLCBlLmcuLCBmb3IgeHRlcm0tc2NvIGZ1bmN0aW9uYWxpdHkgaW4geHRlcm0uCisJKyB1cGRhdGUgeHRlcm0tcmVsYXRlZCB0ZXJtaW5mbyBlbnRyaWVzIHRvIG1hdGNoIHh0ZXJtIHBhdGNoICMyMTYgLVRECisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisKKzIwMDYwNzE1CisJKyBmaXggZm9yIGluc3RhbGwtcnVsZSBpbiBBZGE5NSB0byBhZGQgdGVybWluYWxfaW50ZXJmYWNlLmFkcworCSAgYW5kIHRlcm1pbmFsX2ludGVyZmFjZS5hbGkgKGFub255bW91cyBwb3N0aW5nIGluIGNvbXAubGFuZy5hZGEpLgorCSsgY29ycmVjdGlvbiB0byBtYW5wYWdlIGZvciBnZXRjY2hhcigpIChyZXBvcnQgYnkgV2lsbGlhbSBNY0JyaW5lKS4KKwkrIGFkZCB0ZXN0L2NoZ2F0LmMKKwkrIG1vZGlmeSB3Y2hnYXQoKSB0byBtYXJrIHVwZGF0ZWQgY2VsbHMgYXMgY2hhbmdlZCBzbyBhIHJlZnJlc2ggd2lsbAorCSAgcmVwYWludCB0aG9zZSBjZWxscyAoY29tbWVudHMgYnkgU2FkcnVsIEggQ2hvd2RodXJ5IGFuZCBXaWxsaWFtCisJICBNY0JyaW5lKS4KKwkrIHNwbGl0IHVwIGRlcGVuZGVuY3kgb2YgbmFtZXMuYyBhbmQgY29kZXMuYyBpbiBuY3Vyc2VzL01ha2VmaWxlIHRvCisJICB3b3JrIHdpdGggcGFyYWxsZWwgbWFrZSAocmVwb3J0L2FuYWx5c2lzIGJ5IEpvc2VwaCBTIE15ZXJzKS4KKwkrIHN1cHByZXNzIGEgd2FybmluZyBtZXNzYWdlICh3aGljaCBpcyBpZ25vcmVkKSBmb3Igc3lzdGVtcyB3aXRob3V0CisJICBhbiBsZGNvbmZpZyBwcm9ncmFtIChwYXRjaCBieSBKdXN0aW4gSGliYml0cykuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCAtLWRpc2FibGUtc3ltbGlua3Mgb3B0aW9uIHRvIGFsbG93IG9uZSB0bworCSAgZGlzYWJsZSBzeW1saW5rKCkgaW4gdGljIGV2ZW4gd2hlbiBsaW5rKCkgZG9lcyBub3Qgd29yayAocmVwb3J0IGJ5CisJICBOaWdlbCBIb3JuZSkuCisJKyBtb2RpZnkgTUtmYWxsYmFjay5zaCB0byB1c2UgdGljIC14IHdoZW4gY29uc3RydWN0aW5nIGZhbGxiYWNrIHRhYmxlcworCSAgdG8gYWxsb3cgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIHRvIGJlIHJldHJpZXZlZCBmcm9tIGEgZmFsbGJhY2sgZW50cnkuCisJKyBpbXByb3ZlIGxlYWstY2hlY2tpbmcgbG9naWMgaW4gdGdldGVudCgpIGZyb20gMjAwNjA2MjUgdG8gZW5zdXJlIHRoYXQKKwkgIGl0IGRvZXMgbm90IGZyZWUgdGhlIGN1cnJlbnQgc2NyZWVuIChyZXBvcnQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisKKzIwMDYwNzA4CisJKyBhZGQgYSBjaGVjayBmb3IgX1BPU0lYX1ZESVNBQkxFIGluIHRzZXQgKE5ldEJTRCAjMzM5MTYpLgorCSsgY29ycmVjdCBfbmNfZnJlZV9lbnRyaWVzKCkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHVzZWQgZm9yIG1lbW9yeSBsZWFrCisJICBjaGVja2luZyBvZiB0aWMuCisKKzIwMDYwNzAxCisJKyByZXZlcnQgYSBtaW5vciBjaGFuZ2UgZm9yIG1hZ2ljLWNvb2tpZSBzdXBwb3J0IGZyb20gMjAwNjA1MTMsIHdoaWNoCisJICBjYXVzZWQgdW5leHBlY3RlZCByZXNldCBvZiBhdHRyaWJ1dGVzLCBlLmcuLCB3aGVuIHJlc2l6aW5nIHRlc3QvdmlldworCSAgaW4gY29sb3IgbW9kZS4KKwkrIG5vdGUgaW4gY2xlYXIgbWFucGFnZSB0aGF0IHRoZSBwcm9ncmFtIGlnbm9yZXMgY29tbWFuZC1saW5lCisJICBwYXJhbWV0ZXJzIChwcm9tcHRlZCBieSBEZWJpYW4gIzM3MTg1NSkuCisJKyBmaXhlcyB0byBtYWtlIGxpYl9nZW4uYyBidWlsZCBwcm9wZXJseSB3aXRoIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyZQorCSAgLS1kaXNhYmxlLW1hY3JvcyBvcHRpb24gYW5kIE5DVVJTRVNfTk9NQUNST1MgKGNmOiAgMjAwNjA1MjcpCisJKyB1cGRhdGUvY29ycmVjdCBzZXZlcmFsIHRlcm1pbmZvIGVudHJpZXMgLVRECisJKyBhZGQgc29tZSBub3RlcyByZWdhcmRpbmcgY29weXJpZ2h0IHRvIHRlcm1pbmZvLnNyYyAtVEQKKworMjAwNjA2MjUKKwkrIGZpeGVzIHRvIGJ1aWxkIEFkYTk1IGJpbmRpbmcgd2l0aCBnbmF0LTQuMS4wCisJKyBtb2RpZnkgcmVhZF90ZXJtdHlwZSgpIHNvIHRoZSB0ZXJtX25hbWVzIGRhdGEgaXMgYWx3YXlzIGFsbG9jYXRlZCBhcworCSAgcGFydCBvZiB0aGUgc3RyX3RhYmxlLCBhIGJldHRlciBmaXggZm9yIGEgbWVtb3J5IGxlYWsgKGNmOiAyMDAzMDgwOSkuCisJKyByZWR1Y2UgbWVtb3J5IGxlYWtzIGluIHJlcGVhdGVkIGNhbGxzIHRvIHRnZXRlbnQoKSBieSByZW1lbWJlcmluZyB0aGUKKwkgIGxhc3QgVEVSTUlOQUwqIHZhbHVlIGFsbG9jYXRlZCB0byBob2xkIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgYW5kCisJICBmcmVlaW5nIHRoYXQgaWYgdGhlIHRnZXRlbnQoKSByZXN1bHQgYnVmZmVyIGlzIHRoZSBzYW1lIGFzIHRoZQorCSAgcHJldmlvdXMgY2FsbCAocmVwb3J0IGJ5ICJNYXR0IiBmb3IgRnJlZUJTRCBnbnUvOTg5NzUpLgorCSsgbW9kaWZ5IHRhY2sgdG8gdGVzdCBleHRlbmRlZCBjYXBhYmlsaXR5IGZ1bmN0aW9uLWtleSBzdHJpbmdzLgorCSsgaW1wcm92ZWQgZ25vbWUgdGVybWluZm8gZW50cnkgKEdlblRvbyAjMTIyNTY2KS4KKwkrIGltcHJvdmVkIHh0ZXJtLTI1NmNvbG9yIHRlcm1pbmZvIGVudHJ5IChwYXRjaCBieSBBbGFpbiBCZW5jaCkuCisKKzIwMDYwNjE3CisJKyBmaXggdHdvIHNtYWxsIG1lbW9yeSBsZWFrcyByZWxhdGVkIHRvIHJlcGVhdGVkIHRnZXRlbnQoKSBjYWxscworCSAgd2l0aCBURVJNPXNjcmVlbiAocmVwb3J0IGJ5ICJNYXR0IiBmb3IgRnJlZUJTRCBnbnUvOTg5NzUpLgorCSsgYWRkIC0tZW5hYmxlLXNpZ25lZC1jaGFyIHRvIHNpbXBsaWZ5IERlYmlhbiBwYWNrYWdlLgorCSsgcmVkdWNlIG5hbWUtcG9sbHV0aW9uIGluIHRlcm0uaCBieSByZW1vdmluZyAjZGVmaW5lJ3MgZm9yIEhBVkVfeHh4CisJICBzeW1ib2xzLgorCSsgY29ycmVjdCB0eXBvIGluIGN1cnNfdGVybWluZm8uM3ggKERlYmlhbiAjMzY5MTY4KS4KKworMjAwNjA2MDMKKwkrIGVuYWJsZSB0aGUgbW91c2UgaW4gdGVzdC9tb3Zld2luZG93LmMKKwkrIGltcHJvdmUgYSBsaW1pdC1jaGVjayBpbiBmcm1fZGVmLmMgKEpvaG4gSGVhc2xleSkuCisJKyBtaW5vciBjb3B5cmlnaHQgZml4ZXMuCisJKyBjaGFuZ2UgY29uZmlndXJlIHNjcmlwdCB0byBwcm9kdWNlIHRlc3QvTWFrZWZpbGUgZnJvbSBkYXRhIGZpbGUuCisKKzIwMDYwNTI3CisJKyBhZGQgYSBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXdnZXRjaC1ldmVudHMgdG8gZW5hYmxlCisJICBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMsIGFuZCBjb3JyZWN0IHRoZSBhc3NvY2lhdGVkIGxvb3AtbG9naWMgaW4KKwkgIGxpYl90d2FpdC5jIChyZXBvcnQgYnkgQmVybmQgSmVuZHJpc3NlaykuCisJKyByZW1vdmUgaW5jbHVkZS9ub21hY3Jvcy5oIGZyb20gYnVpbGQsIHNpbmNlIHRoZSBpZmRlZiBmb3IKKwkgIE5DVVJTRVNfTk9NQUNST1MgbWFrZXMgdGhhdCBvYnNvbGV0ZS4KKwkrIGFkZCBlbnRyeXBvaW50cyBmb3Igc29tZSBmdW5jdGlvbnMgd2hpY2ggd2VyZSBvbmx5IHByb3ZpZGVkIGFzIG1hY3JvcworCSAgdG8gbWFrZSBOQ1VSU0VTX05PTUFDUk9TIGlmZGVmIHdvcmsgcHJvcGVybHk6ICBnZXRjdXJ4KCksIGdldGN1cnkoKSwKKwkgIGdldGJlZ3goKSwgZ2V0YmVneSgpLCBnZXRtYXh4KCksIGdldG1heHkoKSwgZ2V0cGFyeCgpIGFuZCBnZXRwYXJ5KCksCisJICB3Z2V0Ymtncm5kKCkuCisJKyBwcm92aWRlIGlmZGVmIGZvciBOQ1VSU0VTX05PTUFDUk9TIHdoaWNoIHN1cHByZXNzZXMgbW9zdCBtYWNybworCSAgZGVmaW5pdGlvbnMgZnJvbSBjdXJzZXMuaCwgaS5lLiwgd2hlcmUgYSBtYWNybyBpcyBkZWZpbmVkIHRvIG92ZXJyaWRlCisJICBhIGZ1bmN0aW9uIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuICBBbGxvd2luZyBhIGRldmVsb3BlciB0byBzdXBwcmVzcworCSAgdGhlc2UgZGVmaW5pdGlvbnMgY2FuIHNpbXBsaWZ5IHNvbWUgYXBwbGljYXRpb24gKGRpc2N1c3Npb24gd2l0aAorCSAgU3RhbmlzbGF2IElldmxldikuCisJKyBpbXByb3ZlIGRlc2NyaXB0aW9uIG9mIG1lbXUvbWVtbCBpbiB0ZXJtaW5mbyBtYW5wYWdlLgorCisyMDA2MDUyMAorCSsgaWYgbXNnciBpcyBmYWxzZSwgcmVzZXQgdmlkZW8gYXR0cmlidXRlcyB3aGVuIGRvaW5nIGFuIGF1dG9tYXJnaW4KKwkgIHdyYXAgdG8gdGhlIG5leHQgbGluZS4gIFRoaXMgbWFrZXMgdGhlIG5jdXJzZXMgJ2snIHRlc3Qgd29yayBwcm9wZXJseQorCSAgZm9yIGhwdGVybS4KKwkrIGNvcnJlY3QgY2FjaGluZyBvZiBrZXluYW1lKCksIHdoaWNoIHdhcyB1c2luZyBvbmx5IGhhbGYgb2YgaXRzIHRhYmxlLgorCSsgbWlub3IgZml4ZXMgdG8gbWVtb3J5LWxlYWsgY2hlY2tpbmcuCisJKyBtYWtlIFNDUkVFTi5fYWNzX21hcCBhbmQgU0NSRUVOLl9zY3JlZW5fYWNzX21hcCBwb2ludGVycyByYXRoZXIgdGhhbgorCSAgYXJyYXlzLCBtYWtpbmcgQUNTX0xFTiBsZXNzIHZpc2libGUgdG8gYXBwbGljYXRpb25zIChzdWdnZXN0ZWQgYnkKKwkgIFN0YW5pc2xhdiBJZXZsZXYpLgorCSsgbW92ZSBjaHVuayBpbiBTQ1JFRU4gaWZkZWYnZCBmb3IgVVNFX1dJREVDX1NVUFBPUlQgdG8gdGhlIGVuZCwgc28KKwkgIF9zY3JlZW5fYWNzX21hcCB3aWxsIGhhdmUgdGhlIHNhbWUgb2Zmc2V0IGluIGJvdGggbmN1cnNlcy9uY3Vyc2VzdywKKwkgIG1ha2luZyB0aGUgY29ycmVzcG9uZGluZyB0aW5mby90aW5mb3cgbGlicmFyaWVzIGJpbmFyeS1jb21wYXRpYmxlCisJICAoY2Y6IDIwMDQxMDE2LCByZXBvcnQgYnkgU3RhbmlzbGF2IElldmxldikuCisKKzIwMDYwNTEzCisJKyBpbXByb3ZlIGRlYnVnLXRyYWNpbmcgZm9yIEVtaXRSYW5nZSgpLgorCSsgY2hhbmdlIGRlZmF1bHQgZm9yIC0td2l0aC1kZXZlbG9wIHRvICJ5ZXMiLiAgQWRkIE5DVVJTRVNfTk9fSEFSRF9UQUJTCisJICBhbmQgTkNVUlNFU19OT19NQUdJQ19DT09LSUUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGFsbG93IHJ1bnRpbWUKKwkgIHN1cHByZXNzaW9uIG9mIHRoZSByZWxhdGVkIGhhcmQtdGFicyBhbmQgeG1jLWdsaXRjaCBmZWF0dXJlcy4KKwkrIGFkZCBuY3Vyc2VzIHZlcnNpb24gbnVtYmVyIHRvIHRvcC1sZXZlbCBtYW5wYWdlcywgZS5nLiwgbmN1cnNlcywgdGljLAorCSAgaW5mb2NtcCwgdGVybWluZm8gYXMgd2VsbCBhcyBmb3JtLCBtZW51LCBwYW5lbC4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwkrIG1vZGlmeSBuY3Vyc2VzLmMgdG8gd29yayBhcm91bmQgYSBidWcgaW4gTmV0QlNEIDMuMCBjdXJzZXMKKwkgIChmaWVsZF9idWZmZXIgcmV0dXJuaW5nIG51bGwgZm9yIGEgdmFsaWQgZmllbGQpLiAgVGhlICdyJyB0ZXN0CisJICBhcHBlYXJzIHRvIG5vdCB3b3JrIHdpdGggdGhhdCBjb25maWd1cmF0aW9uIHNpbmNlIHRoZSBuZXdfZmllbGR0eXBlKCkKKwkgIGZ1bmN0aW9uIGlzIGJyb2tlbiBpbiB0aGF0IGltcGxlbWVudGF0aW9uLgorCisyMDA2MDUwNgorCSsgYWRkIGhwdGVybS1jb2xvciB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIGZpeGVzIHRvIGNvbXBpbGUgdGVzdC1wcm9ncmFtcyB3aXRoIEhQVVggMTEuMjMKKworMjAwNjA0MjIKKwkrIGFkZCBjb3B5cmlnaHQgbm90aWNlcyB0byBmaWxlcyBvdGhlciB0aGFuIHRob3NlIHRoYXQgYXJlIGdlbmVyYXRlZCwKKwkgIGRhdGEgb3IgYWRhcHRlZCBmcm9tIHBkY3Vyc2VzIChyZXBvcnRzIGJ5IFdpbGxpYW0gTWNCcmluZSwgRGF2aWQKKwkgIFRheWxvcikuCisJKyBpbXByb3ZlIHJlbmRlcmluZyBvbiBocHRlcm0gYnkgbm90IHJlc2V0dGluZyBhdHRyaWJ1dGVzIGF0IHRoZSBlbmQKKwkgIG9mIGRvdXBkYXRlKCkgaWYgdGhlIHRlcm1pbmFsIGhhcyB0aGUgbWFnaWMtY29va2llIGZlYXR1cmUgKHJlcG9ydAorCSAgYnkgQmVybmQgUmlla2UpLgorCSsgYWRkIDI1NmNvbG9yIHZhcmlhbnRzIG9mIHRlcm1pbmZvIGVudHJpZXMgZm9yIHByb2dyYW1zIHdoaWNoIGFyZQorCSAgcmVwb3J0ZWQgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZSAtVEQKKworMjAwNjA0MTYKKwkrIGZpeCB0eXBvIGluIGNoYW5nZSB0byBOZXdDaGFyKCkgbWFjcm8gZnJvbSAyMDA2MDMxMSBjaGFuZ2VzLCB3aGljaAorCSAgYnJva2UgdGFiLWV4cGFuc2lvbiAocmVwb3J0IGJ5IEZyZWRlcmljIEwgVyBNZXVuaWVyKS4KKworMjAwNjA0MTUKKwkrIGRvY3VtZW50IC1VIG9wdGlvbiBvZiB0aWMgYW5kIGluZm9jbXAuCisJKyBtb2RpZnkgdGljL2luZm9jbXAgdG8gc3VwcHJlc3Mgc21hY3Mvcm1hY3Mgd2hlbiBhY3NjIGlzIHN1cHByZXNzZWQKKwkgIGR1ZSB0byBzaXplIGxpbWl0LCBlLmcuLCBjb252ZXJ0aW5nIHRvIHRlcm1jYXAgZm9ybWF0LiAgQWxzbworCSAgc3VwcHJlc3MgdGhlbSBpZiB0aGUgb3V0cHV0IGZvcm1hdCBkb2VzIG5vdCBjb250YWluIGFjc2MgYW5kIGl0CisJICB3YXMgbm90IFZUMTAwLWxpa2UsIGkuZS4sIGEgb25lLW9uZSBtYXBwaW5nIChOb3ZlbGwgIzE2MzcxNSkuCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIHRvIGVuc3VyZSB0aGF0IFNJR1dJTkNIIGlzIGRlZmluZWQgb24gcGxhdGZvcm1zCisJICBzdWNoIGFzIE9TIFggd2hpY2ggZXhjbHVkZSB0aGF0IHdoZW4gX1hPUEVOX1NPVVJDRSwgZXRjLiwgYXJlCisJICBkZWZpbmVkIChyZXBvcnQgYnkgTmljaG9sYXMgQ29sZSkKKworMjAwNjA0MDgKKwkrIG1vZGlmeSB3cml0ZV9vYmplY3QoKSB0byBub3Qgd3JpdGUgY29pbmNpZGVudGFsIGV4dGVuc2lvbnMgb2YgYW4KKwkgIGVudHJ5IG1hZGUgZHVlIHRvIGl0IGJlaW5nIHJlZmVyZW5jZWQgaW4gYSB1c2U9IGNsYXVzZSAocmVwb3J0IGJ5CisJICBBbGFpbiBCZW5jaCkuCisJKyBhbm90aGVyIGZpeCBmb3IgaW5mb2NtcCAtaSBvcHRpb24sIHdoaWNoIGRpZCBub3QgZW5zdXJlIHRoYXQgc29tZQorCSAgZXNjYXBlIHNlcXVlbmNlcyBoYWQgY29tcGFyYWJsZSBwcmVmaXhlcyAocmVwb3J0IGJ5IEFsYWluIEJlbmNoKS4KKworMjAwNjA0MDEKKwkrIGltcHJvdmUgZGlzY3Vzc2lvbiBvZiBpbml0L3Jlc2V0IGluIHRlcm1pbmZvIGFuZCB0cHV0IG1hbnBhZ2VzCisJICAocmVwb3J0IGJ5IEFsYWluIEJlbmNoKS4KKwkrIHVzZSBpczMgc3RyaW5nIGZvciBhIGZhbGxiYWNrIG9mIHJzMyBpbiB0aGUgcmVzZXQgcHJvZ3JhbTsgaXQgd2FzCisJICB1c2luZyBpczIgKHJlcG9ydCBieSBBbGFpbiBCZW5jaCkuCisJKyBjb3JyZWN0IGxvZ2ljIGZvciBpbmZvY21wIC1pIG9wdGlvbiwgd2hpY2ggZGlkIG5vdCBhY2NvdW50IGZvcgorCSAgbXVsdGlwbGUgZGlnaXRzIGluIGEgcGFyYW1ldGVyIChjZjogMjAwNDA4MjgpIChyZXBvcnQgYnkgQWxhaW4KKwkgIEJlbmNoKS4KKwkrIG1vdmUgX25jX2hhbmRsZV9zaWd3aW5jaCgpIHRvIGxpYl9zZXR1cC5jIHRvIG1ha2UgLS13aXRoLXRlcm1saWIKKwkgIG9wdGlvbiB3b3JrIGFmdGVyIDIwMDYwMTE0IGNoYW5nZXMgKHJlcG9ydCBieSBBcmthZGl1c3ogTWlza2lld2ljeikuCisJKyBhZGQgY29weXJpZ2h0IG5vdGljZXMgdG8gdGVzdC1wcm9ncmFtcyBhcyBuZWVkZWQgKHJlcG9ydCBieSBXaWxsaWFtCisJICBNY0JyaW5lKS4KKworMjAwNjAzMTgKKwkrIG1vZGlmeSBuY3Vyc2VzLmMgJ0YnIHRlc3QgdG8gY29tYmluZSB0aGUgd2lkZS1jaGFyYWN0ZXJzIHdpdGggY29sb3IKKwkgIGFuZC9vciB2aWRlbyBhdHRyaWJ1dGVzLgorCSsgbW9kaWZ5IHRlc3QvbmN1cnNlcyB0byB1c2UgQ1RML1Egb3IgRVNDIGNvbnNpc3RlbnRseSBmb3IgZXhpdGluZworCSAgYSB0ZXN0LXNjcmVlbiAoc29tZSBjb21tYW5kcyB1c2VkICd4JyBvciAncScpLgorCisyMDA2MDMxMgorCSsgZml4IGFuIG9mZi1ieS1vbmUgaW4gdGhlIHNjcm9sbGluZy1yZWdpb24gY2hhbmdlIChjZl8gMjAwNjAzMTEpLgorCisyMDA2MDMxMQorCSsgYWRkIGNoZWNrcyBpbiB3YWRkY2huc3RyKCkgYW5kIHdhZGRfd2NobnN0cigpIHRvIHN0b3AgY29weWluZyB3aGVuCisJICBhIG51bGwgY2hhcmFjdGVyIGlzIGZvdW5kIChyZXBvcnQgYnkgSWdvciBCb2dvbWF6b3YpLgorCSsgbW9kaWZ5IHByb2dzL01ha2VmaWxlLmluIHRvIG1ha2UgInRwdXQgaW5pdCIgd29yayBwcm9wZXJseSB3aXRoCisJICBjeWd3aW4sIGkuZS4sIGRvIG5vdCBwYXNzIGEgIi5leGUiIGluIHRoZSByZWZlcmVuY2Ugc3RyaW5nIHVzZWQKKwkgIGluIGNoZWNrX2FsaWFzZXMgKHJlcG9ydCBieSBTYW11ZWwgVGhpYmF1bHQpLgorCSsgYWRkIHNvbWUgY2hlY2tzIHRvIGVuc3VyZSBjdXJyZW50IHBvc2l0aW9uIGlzIHdpdGhpbiBzY3JvbGxpbmcKKwkgIHJlZ2lvbiBiZWZvcmUgc2Nyb2xsaW5nIG9uIGEgbmV3IGxpbmUgKHJlcG9ydCBieSBEYW4gR29va2luKS4KKwkrIGNoYW5nZSBzb21lIE5ld0NoYXIoKSB1c2FnZSB0byBzdGF0aWMgdmFyaWFibGVzIHRvIHdvcmsgYXJvdW5kCisJICBzdGFjayBnYXJiYWdlIGludHJvZHVjZWQgd2hlbiBjY2hhcl90IGlzIG5vdCBwYWNrZWQgKFJlZGhhdCAjMTgyMDI0KS4KKworMjAwNjAyMjUKKwkrIHdvcmthcm91bmRzIHRvIGJ1aWxkIHRlc3QvbW92ZXdpbmRvdyB3aXRoIFBEY3Vyc2VzIDIuNy4KKwkrIGZpeCBmb3IgbnN0ZXJtLTE2Y29sb3IgZW50cnkgKHBhdGNoIGJ5IEFsYWluIEJlbmNoKS4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIGluZm9jbXAgbWFucGFnZSAoRGViaWFuICMzNTQyODEpLgorCisyMDA2MDIxOAorCSsgYWRkIG5zdGVybS0xNmNvbG9yIGVudHJ5IC1URAorCSsgdXBkYXRlZCBtbHRlcm0gdGVybWluZm8gZW50cnkgLVRECisJKyByZW1vdmUgOTcwOTEzIGZlYXR1cmUgZm9yIGNvcHlpbmcgc3Vid2luZG93cyBhcyB0aGV5IGFyZSBtb3ZlZCBpbgorCSAgbXZ3aW4oKSAoZGlzY3Vzc2lvbiB3aXRoIEJyeWFuIENocmlzdCkuCisJKyBtb2RpZnkgdGVzdC9kZW1vX21lbnVzLmMgdG8gZGVtb25zdHJhdGUgbW92aW5nIGEgbWVudSAoYm90aCB0aGUKKwkgIHdpbmRvdyBhbmQgc3Vid2luZG93KSB1c2luZyBzaGlmdGVkIGN1cnNvci1rZXlzLgorCSsgc3RhcnQgaW1wbGVtZW50aW5nIHJlY3Vyc2l2ZSBtdndpbigpIGluIG1vdmV3aW5kb3cuYyAoaW5jb21wbGV0ZSkuCisJKyBhZGQgYSBmYWxsYmFjayBkZWZpbml0aW9uIGZvciBHQ0NfUFJJTlRGTElLRSgpIGluIHRlc3QucHJpdi5oLAorCSAgZm9yIG1vdmV3aW5kb3cuYyAocmVwb3J0IGJ5IFdpbGxpYW0gTWNCcmluZSkuCisJKyBhZGQgaGVscC1tZXNzYWdlIHRvIHRlc3QvbW92ZXdpbmRvdy5jCisKKzIwMDYwMjExCisJKyBhZGQgdGVzdC9tb3Zld2luZG93LmMsIHRvIHRlc3QgbXZkZXJ3aW4oKS4KKwkrIGZpeCBuY3Vyc2VzIHNvZnQta2V5IHRlc3Qgc28gY29sb3IgY2hhbmdlcyBhcmUgc2hvd24gaW1tZWRpYXRlbHkKKwkgIHJhdGhlciB0aGFuIGRlbGF5ZWQuCisJKyBtb2RpZnkgbmN1cnNlcyBzb2Z0LWtleSB0ZXN0IHRvIGhpZGUgdGhlIGtleXMgd2hlbiBleGl0aW5nIHRoZSB0ZXN0CisJICBzY3JlZW4uCisJKyBmaXhlcyB0byBidWlsZCB0ZXN0IHByb2dyYW1zIHdpdGggUERDdXJzZXMgMi43LCBlLmcuLCBpdHMgaGVhZGVycworCSAgcmVseSBvbiBhdXRvY29uZiBzeW1ib2xzLCBhbmQgaXQgZGVjbGFyZXMgc3R1YnMgZm9yIG5vbmZ1bmN0aW9uYWwKKwkgIHRlcm1pbmZvIGFuZCB0ZXJtY2FwIGVudHJ5cG9pbnRzLgorCisyMDA2MDIwNAorCSsgaW1wcm92ZWQgdGVzdC9jb25maWd1cmUgdG8gYnVpbGQgdGVzdC9uY3Vyc2VzIG9uIEhQVVggMTEgdXNpbmcgdGhlCisJICB2ZW5kb3IgY3Vyc2VzLgorCSsgZG9jdW1lbnRlZCBBTFRFUk5BVEUgQ09ORklHVVJBVElPTlMgaW4gdGhlIG5jdXJzZXMgbWFucGFnZSwgZm9yIHRoZQorCSAgYmVuZWZpdCBvZiBkZXZlbG9wZXJzIHdobyBkbyBub3QgcmVhZCBJTlNUQUxMLgorCisyMDA2MDEyOAorCSsgY29ycmVjdCBmb3JtIGxpYnJhcnkgV2luZG93X1RvX0J1ZmZlcigpIGNoYW5nZSAoY2Y6ICAyMDA0MDUxNiksIHdoaWNoCisJICBzaG91bGQgaWdub3JlIHRoZSB2aWRlbyBhdHRyaWJ1dGVzIChyZXBvcnQgYnkgUmljYXJkbyBDYW50dSkuCisKKzIwMDYwMTIxCisJKyBtaW5vciBmaXhlcyB0byB4bWMtZ2xpdGNoIGV4cGVyaW1lbnRhbCBjb2RlOgorCSAgKyBzdXBwcmVzcyBsaW5lLWRyYXdpbmcKKwkgICsgaW1wbGVtZW50IG1heF9hdHRyaWJ1dGVzCisJICB0ZXN0ZWQgd2l0aCB4dGVybS4KKwkrIG1pbm9yIGZpeGVzIGZvciB0aGUgZGF0YWJhc2UgaXRlcmF0b3IuCisJKyBmaXggc29tZSBidWZmZXIgbGltaXRzIGluIGMrKyBkZW1vIChjb21tZW50IGJ5IEZhbGsgSHVlZmZuZXIgaW4KKwkgIERlYmlhbiAjMzQ4MTE3KS4KKworMjAwNjAxMTQKKwkrIGFkZCB0b2UgLWEgb3B0aW9uLCB0byBzaG93IGFsbCBkYXRhYmFzZXMuICBUaGlzIHVzZXMgbmV3IHByaXZhdGUKKwkgIGludGVyZmFjZXMgaW4gdGhlIG5jdXJzZXMgbGlicmFyeSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YKKwkgIGRhdGFiYXNlcy4KKwkrIGZpeCB0b2UgZnJvbSAyMDAwMDkwOSBjaGFuZ2VzIHdoaWNoIG1hZGUgaXQgbm90IGxvb2sgYXQKKwkgICRIT01FLy50ZXJtaW5mbworCSsgbWFrZSB0b2UncyAtdiBvcHRpb24gcGFyYW1ldGVyIG9wdGlvbmFsIGFzIHBlciBtYW5wYWdlLgorCSsgaW1wcm92ZSBTSUdXSU5DSCBoYW5kbGluZyBieSBwb3N0cG9uaW5nIGl0cyBlZmZlY3QgZHVyaW5nIG5ld3Rlcm0oKSwKKwkgIGV0Yy4sIHdoZW4gYWxsb2NhdGluZyBzY3JlZW5zLgorCisyMDA2MDExMQorCSsgbW9kaWZ5IHdnZXRuc3RyKCkgdG8gcmV0dXJuIEtFWV9SRVNJWkUgaWYgYSBzaWd3aW5jaCBvY2N1cnMuICBVc2UKKwkgIHRoaXMgaW4gdGVzdC9maWx0ZXIuYworCSsgZml4IGFuIGVycm9yIGluIGZpbHRlcigpIG1vZGlmaWNhdGlvbiB3aGljaCBjYXVzZWQgc29tZSBhcHBsaWNhdGlvbnMKKwkgIHRvIGZhaWwuCisKKzIwMDYwMTA3CisJKyBjaGVjayBpZiBmaWx0ZXIoKSB3YXMgY2FsbGVkIHdoZW4gZ2V0dGluZyB0aGUgc2NyZWVuc2l6ZS4gIEtlZXAgaXQKKwkgIGF0IDEgaWYgc28gKGJhc2VkIG9uIFJlZGhhdCAjMTc0NDk4KS4KKwkrIGFkZCBleHRlbnNpb24gbm9maWx0ZXIoKS4KKwkrIHJlZmluZWQgdGhlIHdvcmthcm91bmQgZm9yIEFDUyBtYXBwaW5nLgorCSsgbWFrZSBpZmRlZidzIGNvbnNpc3RlbnQgaW4gY3Vyc2VzLmggZm9yIHRoZSBleHRlbmRlZCBjb2xvcnMgc28gdGhlCisJICBoZWFkZXIgZmlsZSBjYW4gYmUgdXNlZCBmb3IgdGhlIG5vcm1hbCBjdXJzZXMgbGlicmFyeS4gIFRoZSBoZWFkZXIKKwkgIGZpbGUgaW5zdGFsbGVkIGZvciBleHRlbmRlZCBjb2xvcnMgaXMgYSB2YXJpYXRpb24gb2YgdGhlCisJICB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uIChyZXBvcnQgYnkgRnJlZGVyaWMgTCBXIE1ldW5pZXIpLgorCisyMDA1MTIzMQorCSsgYWRkIGEgd29ya2Fyb3VuZCB0byBBQ1MgbWFwcGluZyB0byBhbGxvdyBhcHBsaWNhdGlvbnMgc3VjaCBhcworCSAgdGVzdC9ibHVlLmMgdG8gdXNlIHRoZSAiUEMgUk9NIiBjaGFyYWN0ZXJzIGJ5IG1hc2tpbmcgdGhlbSB3aXRoCisJICBBX0FMVENIQVJTRVQuICBUaGlzIHdvcmtlZCB1cCB0aWwgNS41LCBidXQgd2FzIGxvc3QgaW4gdGhlIHJldmlzaW9uCisJICBvZiBsZWdhY3kgY29kaW5nIChyZXBvcnQgYnkgTWljaGFlbCBEZXV0c2NobWFubikuCisJKyBhZGQgYSBudWxsLXBvaW50ZXIgY2hlY2sgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24gb2YKKwkgIGNhbGN1bGF0ZV9hY3R1YWxfd2lkdGgoKSAocmVwb3J0IGJ5IFZpY3RvciBKdWxpZW4pLgorCSsgaW1wcm92ZSB0ZXN0L25jdXJzZXMgJ2QnIChjb2xvci1lZGl0KSB0ZXN0IGJ5IGFsbG93aW5nIHRoZSBSR0IKKwkgIHZhbHVlcyB0byBiZSBzZXQgaW5kZXBlbmRlbnRseSAocGF0Y2ggYnkgV2lsbGlhbSBNY0JyaW5lKS4KKwkrIG1vZGlmeSB0ZXN0L2NvbmZpZ3VyZSBzY3JpcHQgdG8gYWxsb3cgYnVpbGRpbmcgdGVzdCBwcm9ncmFtcyB3aXRoCisJICBQREN1cnNlcy9YMTEuCisJKyBtb2RpZmllZCB0ZXN0IHByb2dyYW1zIHRvIGFsbG93IHNvbWUgdG8gd29yayB3aXRoIE5ldEJTRCBjdXJzZXMuCisJICBTZXZlcmFsIGRvIG5vdCBiZWNhdXNlIE5ldEJTRCBjdXJzZXMgaW1wbGVtZW50cyBhIHN1YnNldCBvZiBYL09wZW4KKwkgIGN1cnNlcywgYW5kIGFsc28gbGFja3MgbXVjaCBvZiBTVnI0IGFkZGl0aW9ucy4gIEJ1dCBpdCdzIGVub3VnaCBmb3IKKwkgIGNvbXBhcmlzb24uCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViCisKKzIwMDUxMjI0CisJKyB1c2UgQlNELXNwZWNpZmljIGZpeCBmb3IgcmV0dXJuLXZhbHVlIGZyb20gY2dldGVudCgpIGZyb20gQ1ZTIHdoZXJlCisJICBhbiB1bmtub3duIHRlcm1pbmFsIHR5cGUgd291bGQgYmUgcmVwb3J0ZCBhcyAiZGF0YWJhc2Ugbm90IGZvdW5kIi4KKwkrIG1ha2UgdGdldGVudCgpIHJldHVybiBjb2RlIG1vcmUgcmVhZGFibGUgdXNpbmcgbmV3IHN5bWJvbHMKKwkgIFRHRVRFTlRfWUVTLCBldGMuCisJKyByZW1vdmUgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgInRjdGVzdCIgcHJvZ3JhbS4KKwkrIHJlbW92ZSBURVNUUFJPR1MgZnJvbSBwcm9ncy9NYWtlZmlsZS5pbiAoaXQgd2FzIHJlZmVycmluZyB0byBjb2RlCisJICB0aGF0IHdhcyBuZXZlciBidWlsdCBpbiB0aGF0IGRpcmVjdG9yeSkuCisJKyB0eXBvcyBpbiBjdXJzX2FkZGNoc3RyLjN4LCBzb21lIGRvYyBmaWxlcyAobm90aWNlZCBpbiBPcGVuQlNEIENWUykuCisKKzIwMDUxMjE3CisJKyBhZGQgdXNlX2xlZ2FjeV9jb2RpbmcoKSBmdW5jdGlvbiB0byBzdXBwb3J0IGx5bngncyBmb250LXN3aXRjaGluZworCSAgZmVhdHVyZS4KKwkrIGZpeCBmb3JtYXR0aW5nIGluIGN1cnNfdGVybWNhcC4zeCAocmVwb3J0IGJ5IE1pa2UgRnJ5c2luZ2VyKS4KKwkrIG1vZGlmeSBNS2xpYl9nZW4uc2ggdG8gY2hhbmdlIHByZXByb2Nlc3Nvci1leHBhbmRlZCBfQm9vbCBiYWNrIHRvCisJICBib29sLgorCisyMDA1MTIxMAorCSsgZXh0ZW5kIHRlc3QvbmN1cnNlcy5jICdzJyAob3ZlcmxheSB3aW5kb3cpIHRlc3QgdG8gZXhlcmNpc2Ugb3ZlcmxheSgpLAorCSAgb3ZlcndyaXRlKCkgYW5kIGNvcHl3aW4oKSB3aXRoIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgY29sb3JzIGFuZAorCSAgYXR0cmlidXRlcyAoaW5jbHVkaW5nIGJhY2tncm91bmQgY29sb3IpIHRvIG1ha2UgaXQgZWFzeSB0byBzZWUgdGhlCisJICBlZmZlY3Qgb2YgdGhlIGRpZmZlcmVudCBmdW5jdGlvbnMuCisJKyBjb3JyZWN0aW9ucyB0byBtZW51L21fZ2xvYmFsLmMgZm9yIHdpZGUtY2hhcmFjdGVycyAocmVwb3J0IGJ5CisJICBWaWN0b3IgSnVsaWVuKS4KKworMjAwNTEyMDMKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aG91dC1kbHN5bSwgYWxsb3dpbmcgZGV2ZWxvcGVycyB0bworCSAgY29uZmlndXJlIEdQTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgZGxzeW0oKSAoZGlzY3Vzc2lvbiB3aXRoIE1pY2hhZWwKKwkgIFNldHplcikuCisJKyBmaXggd2luc19ud3N0cigpLCB3aGljaCBkaWQgbm90IGhhbmRsZSBzaW5nbGUtY29sdW1uIG5vbi04Yml0IGNvZGVzCisJICAoRGViaWFuICMzNDE2NjEpLgorCisyMDA1MTEyNgorCSsgbW92ZSBwcm90b3R5cGVzIGZvciB3aWRlLWNoYXJhY3RlciB0cmFjZSBmdW5jdGlvbnMgZnJvbSBjdXJzZXMudGFpbAorCSAgdG8gY3Vyc2VzLndpZGUgdG8gYXZvaWQgYWNjaWRlbnRhbCByZWZlcmVuY2UgdG8gdGhvc2UgaWYKKwkgIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZCB3aXRob3V0IGVuc3VyaW5nIHRoYXQgPHdjaGFyLmg+IGlzCisJICBpbmNsdWRlZC4KKwkrIGFkZC91c2UgTkNVUlNFU19JTkxJTkUgZGVmaW5pdGlvbi4KKwkrIGNoYW5nZSBzb21lIGludGVybmFsIGZ1bmN0aW9ucyB0byB1c2UgaW50L3Vuc2lnbmVkIHJhdGhlciB0aGFuIHRoZQorCSAgc2hvcnQgZXF1aXZhbGVudHMuCisKKzIwMDUxMTE5CisJKyByZW1vdmUgYSByZWR1bmRhbnQgY2hlY2sgaW4gbGliX2NvbG9yLmMgKERlYmlhbiAjMzM1NjU1KS4KKwkrIHVzZSBsZCdzIC1zZWFyY2hfcGF0aHNfZmlyc3Qgb3B0aW9uIG9uIERhcndpbiB0byB3b3JrIGFyb3VuZCBvZGQKKwkgIHNlYXJjaCBydWxlcyBvbiB0aGF0IHBsYXRmb3JtIChyZXBvcnQgYnkgQ2hyaXN0aWFuIEdlbm5lcmF0LCBhbmFseXNpcworCSAgYnkgQW5kcmVhIEdvdm9uaSkuCisJKyByZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBEYXJ3aW4gaW4gQ0ZfWE9QRU5fU09VUkNFIGNvbmZpZ3VyZSBtYWNyby4KKwkrIGlnbm9yZSBFSU5UUiBpbiB0Y2dldGF0dHIvdGNzZXRhdHRyIGNhbGxzIChEZWJpYW4gIzMzOTUxOCkuCisJKyBmaXggc2V2ZXJhbCBidWdzIGluIHRlc3QvYnMuYyAocGF0Y2ggYnkgU3RlcGhlbiBMaW5kaG9sbSkuCisKKzIwMDUxMTEyCisJKyBvdGhlciBtaW5vciBmaXhlcyB0byBjeWd3aW4gYmFzZWQgb24gdGFjayAtVEQKKwkrIGNvcnJlY3Qgc21hY3MgaW4gY3lnd2luIChEZWJpYW4gIzMzODIzNCwgcmVwb3J0IGJ5IEJhdXJ6aGFuCisJICBJc21hZ3Vsb3YsIHdobyBub3RlZCB0aGF0IGl0IHdhcyBmaXhlZCBpbiBDeWd3aW4pLgorCisyMDA1MTAyOQorCSsgYWRkIHNoaWZ0ZWQgdXAvZG93biBhcnJvdyBjb2RlcyB0byB4dGVybS1uZXcgYXMga2luZC9rcmkgc3RyaW5ncyAtVEQKKwkrIG1vZGlmeSB3Ymtncm5kKCkgdG8gYXZvaWQgY2xlYXJpbmcgdGhlIEFfQ0hBUlRFWFQgYXR0cmlidXRlIGJpdHMKKwkgIHNpbmNlIHRob3NlIHJlY29yZCB0aGUgc3RhdGUgb2YgbXVsdGljb2x1bW4gY2hhcmFjdGVycyAoRGViaWFuCisJICAjMzE2NjYzKS4KKwkrIG1vZGlmeSB3ZXJhc2UgdG8gY2xlYXIgbXVsdGljb2x1bW4gY2hhcmFjdGVycyB0aGF0IGV4dGVuZCBpbnRvCisJICBhIGRlcml2ZWQgd2luZG93IChEZWJpYW4gIzMxNjY2MykuCisKKzIwMDUxMDIyCisJKyBtb3ZlIGFzc2lnbm1lbnQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSBFU0NERUxBWSBmcm9tIGluaXRzY3IoKQorCSAgZG93biB0byBuZXd0ZXJtKCkgc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGFmZmVjdHMgdGltZW91dHMgZm9yCisJICB0ZXJtaW5hbHMgb3BlbmVkIHdpdGggbmV3dGVybSgpIGFzIHdlbGwuCisJKyBmaXggYSBtZW1vcnkgbGVhayBpbiBrZXluYW1lKCkuCisJKyBhZGQgdGVzdC9kZW1vX2FsdGtleXMuYworCSsgbW9kaWZ5IHRlc3QvZGVtb19kZWZrZXkuYyB0byBleGl0IGZyb20gbG9vcCB2aWEgJ3EnIHRvIGFsbG93CisJICBsZWFrLWNoZWNraW5nLCBhcyB3ZWxsIGFzIGZpeCBhIGJ1ZmZlciBzaXplIGluIHdpbm5zdHIoKSBjYWxsLgorCisyMDA1MTAxNQorCSsgY29ycmVjdCBvcmRlciBvZiB1c2UtY2xhdXNlcyBpbiByeHZ0LWJhc2ljIGVudHJ5IHdoaWNoIG1hZGUgY29kZXMgZm9yCisJICBmMS1mNCB2dDEwMC1zdHlsZSByYXRoZXIgdGhhbiB2dDIyMC1zdHlsZSAocmVwb3J0IGJ5IEdhYm9yIFogUGFwcCkuCisJKyBzdXBwcmVzcyBjb25maWd1cmUgY2hlY2sgZm9yIGduYXRtYWtlIGlmIEFkYTk1L01ha2VmaWxlLmluIGlzIG5vdAorCSAgZm91bmQuCisJKyBjb3JyZWN0IGEgdHlwbyBpbiBjb25maWd1cmUgLS13aXRoLWJvb2wgb3B0aW9uIGZvciB0aGUgY2FzZSB3aGVyZQorCSAgLS13aXRob3V0LWN4eCBpcyB1c2VkIChyZXBvcnQgYnkgRGFuaWVsIEphY29ib3dpdHopLgorCSsgYWRkIGEgbm90ZSB0byBJTlNUQUxMJ3MgZGlzY3Vzc2lvbiBvZiAtLXdpdGgtbm9ybWFsLCBwb2ludGluZyBvdXQKKwkgIHRoYXQgb25lIG1heSB3aXNoIHRvIHVzZSAtLXdpdGhvdXQtZ3BtIHRvIGVuc3VyZSBhIGNvbXBsZXRlbHkKKwkgIHN0YXRpYyBsaW5rIChwcm9tcHRlZCBieSByZXBvcnQgYnkgRmVsaXggdm9uIExlaXRuZXIpLgorCisyMDA1MTAxMCA1LjUgcmVsZWFzZSBmb3IgdXBsb2FkIHRvIGZ0cC5nbnUub3JnCisKKzIwMDUxMDA4CisJKyBkb2N1bWVudCBpbiBkZW1vX2Zvcm1zLmMgc29tZSBwb3J0YWJpbGl0eSBpc3N1ZXMuCisKKzIwMDUxMDAxCisJKyBkb2N1bWVudCBzaWRlLWVmZmVjdCBvZiB3ZXJhc2UoKSB3aGljaCBzZXRzIHRoZSBjdXJzb3IgcG9zaXRpb24uCisJKyBzYXZlL3Jlc3RvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gZm9ybSBmaWVsZCBlZGl0aW5nIHRvIG1ha2UKKwkgIG92ZXJsYXkgbW9kZSB3b3JrLgorCisyMDA1MDkyNAorCSsgY29ycmVjdCBoZWFkZXIgZGVwZW5kZW5jaWVzIGluIHByb2dzLCBhbGxvd2luZyBwYXJhbGxlbCBtYWtlIChyZXBvcnQKKwkgIGJ5IERhbmllbCBKYWNvYm93aXR6KS4KKwkrIG1vZGlmeSBDRl9CVUlMRF9DQyB0byBlbnN1cmUgdGhhdCBwcmUtc2V0dGluZyAkQlVJTERfQ0Mgb3ZlcnJpZGVzCisJICB0aGUgY29uZmlndXJlIGNoZWNrIGZvciAtLXdpdGgtYnVpbGQtY2MgKHJlcG9ydCBieSBEYW5pZWwgSmFjb2Jvd2l0eikuCisJKyBtb2RpZnkgQ0ZfQ0ZHX0RFRkFVTFRTIHRvIG5vdCB1c2UgL3VzciBhcyB0aGUgZGVmYXVsdCBwcmVmaXggZm9yCisJICBOZXRCU0QuCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIGZyb20KKwkJaHR0cDovL3N1YnZlcnNpb25zLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzL2NvbmZpZy9jb25maWcvCisKKzIwMDUwOTE3CisJKyBtb2RpZnkgc2VkIGV4cHJlc3Npb24gd2hpY2ggY29tcHV0ZXMgcGF0aCBmb3IgL3Vzci9saWIvdGVybWluZm8KKwkgIHN5bWJvbGljIGxpbmsgaW4gaW5zdGFsbCB0byBlbnN1cmUgdGhhdCBpdCBkb2VzIG5vdCBjaGFuZ2UgdW5leHBlY3RlZAorCSAgbGV2ZWxzIG9mIHRoZSBwYXRoIChHZW50b28gIzQyMzM2KS4KKwkrIG1vZGlmeSBkZWZhdWx0IGZvciAtLWRpc2FibGUtbHA2NCBjb25maWd1cmUgb3B0aW9uIHRvIHJlZHVjZSBpbXBhY3QKKwkgIG9uIGV4aXN0aW5nIDY0LWJpdCBidWlsZHMuICBFbmFibGluZyB0aGUgX0xQNjQgb3B0aW9uIG1heSBjaGFuZ2UgdGhlCisJICBzaXplIG9mIGNodHlwZSBhbmQgbW1hc2tfdC4gIEhvd2V2ZXIsIGZvciBBQkkgNiwgaXQgaXMgZW5hYmxlZCBieQorCSAgZGVmYXVsdCAocmVwb3J0IGJ5IE1pa2UgRnJ5c2luZ2VyKS4KKwkrIGFkZCBjb25maWd1cmUgc2NyaXB0IGNoZWNrIGZvciAtLWVuYWJsZS1leHQtbW91c2UsIGJ1bXAgQUJJIHRvIDYgYnkKKwkgIGRlZmF1bHQgaWYgaXQgaXMgdXNlZC4KKwkrIGltcHJvdmUgY29uZmlndXJlIHNjcmlwdCBsb2dpYyBmb3IgYnVtcGluZyBBQkkgdG8gb21pdCB0aGlzIGlmIHRoZQorCSAgLS13aXRoLWFiaS12ZXJzaW9uIG9wdGlvbiB3YXMgdXNlZC4KKwkrIHVwZGF0ZSBhZGRyZXNzIGZvciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4gdGFjaydzIHNvdXJjZS4KKwkrIGNvcnJlY3Qgd2luc193Y2goKSwgd2hpY2ggd2FzIG5vdCBtYXJraW5nIHRoZSBmaWxsZXItY2VsbHMgb2YKKwkgIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzIChjZjogIDIwMDQxMDIzKS4KKworMjAwNTA5MTAKKwkrIG1vZGlmeSBtb3VzZSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgdGhhdCBHcG1fT3BlbigpIGlzIGNhbGxlZCBvbmx5CisJICBvbmNlLiAgT3RoZXJ3aXNlIEdQTSBnZXRzIGNvbmZ1c2VkIGluIGl0cyBpbml0aWFsaXphdGlvbiBvZiBzaWduYWwKKwkgIGhhbmRsZXJzIChEZWJpYW4gIzMyNjcwOSkuCisKKzIwMDUwOTAzCisJKyBtb2RpZnkgbG9naWMgZm9yIGJhY2tzcGFjaW5nIGluIGEgbXVsdGlsaW5lIGZvcm0gZmllbGQgdG8gZW5zdXJlIHRoYXQKKwkgIGl0IHdvcmtzIGV2ZW4gd2hlbiB0aGUgcHJlY2VkaW5nIGxpbmUgaXMgZnVsbCAocmVwb3J0IGJ5IEZyYW5rIHZhbgorCSAgVnVndCkuCisJKyByZW1vdmUgY29tbWVudCBhYm91dCBCVUdTIHNlY3Rpb24gb2YgbmN1cnNlcyBtYW5wYWdlIChEZWJpYW4gIzMyNTQ4MSkKKworMjAwNTA4MjcKKwkrIGRvY3VtZW50IHNvbWUgd29ya2Fyb3VuZHMgZm9yIHNoYXJlZCBhbmQgbGlidG9vbCBsaWJyYXJ5CisJICBjb25maWd1cmF0aW9ucyBpbiBJTlNUQUxMIChzZWUgLS13aXRoLXNoYXJlZCBhbmQgLS13aXRoLWxpYnRvb2wpLgorCSsgbW9kaWZ5IENGX0dDQ19WRVJTSU9OIGFuZCBDRl9HWFhfVkVSU0lPTiBtYWNyb3MgdG8gYWNjb21tb2RhdGUKKwkgIGNyb3NzLWNvbXBpbGVycyB3aGljaCBlbWl0IHRoZSBwbGF0Zm9ybSBuYW1lIGluIHRoZWlyIHZlcnNpb24KKwkgIG1lc3NhZ2UsIGUuZy4sCisJCWFybS1zYTExMDAtbGludXgtZ251LWcrKyAoR0NDKSA0LjAuMQorCSAgKHJlcG9ydCBieSBGcmFuayB2YW4gVnVndCkuCisKKzIwMDUwODIwCisJKyBzdGFydCB1cGRhdGluZyBkb2N1bWVudGF0aW9uIGZvciB1cGNvbWluZyA1LjUgcmVsZWFzZS4KKwkrIGZpeCB0byBtYWtlIGxpYnRvb2wgIGFuZCBsaWJ0aW5mbyB3b3JrIHRvZ2V0aGVyIGFnYWluIChjZjogMjAwNTAxMjIpLgorCSsgZml4ZXMgdG8gYWxsb3cgYnVpbGRpbmcgdHJhY2VzIGludG8gbGlidGluZm8KKwkrIGFkZCBkZWJ1ZyB0cmFjZSB0byB0aWMgdGhhdCBzaG93cyBpZi9ob3cgbmN1cnNlcyB3aWxsIHdyaXRlIHRvIHRoZQorCSAgbG93ZXIgY29ybmVyIG9mIGEgdGVybWluYWwncyBzY3JlZW4uCisJKyB1cGRhdGUgbGxpYi1sKiBmaWxlcy4KKworMjAwNTA4MTMKKwkrIG1vZGlmeSBpbml0aWFsaXplcnMgaW4gYysrIGJpbmRpbmcgdG8gYnVpbGQgd2l0aCBvbGQgdmVyc2lvbnMgb2YgZysrLgorCSsgaW1wcm92ZSBzcGVjaWFsIGNhc2UgZm9yIDIwMDUwMTE1IHJlcGFpbnRpbmcgZml4LCBlbnN1cmluZyB0aGF0IGlmCisJICB0aGUgZmlyc3QgY2hhbmdlZCBjZWxsIGlzIG5vdCBhIGNoYXJhY3RlciB0aGF0IHRoZSByYW5nZSB0byBiZQorCSAgcmVwYWludGVkIGlzIGFkanVzdGVkIHRvIHN0YXJ0IGF0IGEgY2hhcmFjdGVyJ3MgYmVnaW5uaW5nIChEZWJpYW4KKwkgICMzMTY2NjMpLgorCisyMDA1MDgwNgorCSsgZml4ZXMgdG8gYnVpbGQgb24gUU5YIDYuMQorCSsgaW1wcm92ZSBjb25maWd1cmUgc2NyaXB0IGNoZWNrcyBmb3IgSW50ZWwgOS4wIGNvbXBpbGVyLgorCSsgcmVtb3ZlICNpbmNsdWRlJ3MgZm9yIGxpYmMuaCAob2Jzb2xldGUpLgorCSsgYWRqdXN0IGlmZGVmJ3MgaW4gY3Vyc2VzLnByaXYuaCBzbyB0aGF0IHdoZW4gY3Jvc3MtY29tcGlsaW5nIHRvCisJICBwcm9kdWNlIGNvbXBfaGFzaCBhbmQgbWFrZV9rZXlzLCBubyBkZXBlbmRlbmN5IG9uIHdjaGFyLmggaXMgbmVlZGVkLgorCSAgVGhhdCBzaW1wbGlmaWVzIHRoZSBidWlsZC1jcHBmbGFncyAocmVwb3J0IGJ5IEZyYW5rIHZhbiBWdWd0KS4KKwkrIG1vdmUgbW9kdWxlcyByZWxhdGVkIHRvIGtleS1iaW5kaW5nIGludG8gbGlidGluZm8gdG8gZml4IGxpbmthZ2UKKwkgIHByb2JsZW0gY2F1c2VkIGJ5IDIwMDUwNDMwIGNoYW5nZXMgdG8gTUtrZXluYW1lLnNoIChyZXBvcnQgYnkKKwkgIEtvbnN0YW50aW4gQW5kcmVldikuCisKKzIwMDUwNzIzCisJKyB1cGRhdGVzL2ZpeGVzIGZvciBjb25maWd1cmUgc2NyaXB0IG1hY3JvcyBmcm9tIHZpbGUgLVRECisJKyBtYWtlIHByaXNtOSdzIHNnciBzdHJpbmcgYWdyZWUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdGVybWluZm8gLVRECisJKyBtYWtlIHZ0MjIwJ3Mgc2dyMCBzdHJpbmcgY29uc2lzdGVudCB3aXRoIHNnciBzdHJpbmcsIGRvIHRoaXMgZm9yCisJICBzZXZlcmFsIHJlbGF0ZWQgY2FzZXMgLVRECisJKyBpbXByb3ZlIHRyYW5zbGF0aW9uIHRvIHRlcm1jYXAgYnkgZmlsdGVyaW5nIHRoZSAnbWUnIChzZ3IwKSBzdHJpbmdzCisJICBhcyBpbiB0aGUgcnVudGltZSBjYWxsIHRvIHRnZXRlbnQoKSAocHJvbXB0ZWQgYnkgYSBkaXNjdXNzaW9uIHdpdGgKKwkgIFRob21hcyBLbGF1c25lcikuCisJKyBpbXByb3ZlIHRpYyBjaGVjayBmb3Igc2dyMCB2ZXJzdXMgc2dyKDApLCB0byBoZWxwIGVuc3VyZSB0aGF0IHNncjAKKwkgIHJlc2V0cyBsaW5lLWRyYXdpbmcuCisKKzIwMDUwNzE2CisJKyBmaXggc3BlY2lhbCBjYXNlcyBmb3IgdHJpbW1pbmcgc2dyMCBmb3IgaHVyZCBhbmQgdnQyMjAgKERlYmlhbgorCSAgIzMxODYyMSkuCisJKyBzcGxpdC1vdXQgX25jX3RyaW1fc2dyMCgpIGZyb20gbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRnZXRlbnQoKSwgdG8KKwkgIGFsbG93IGl0IHRvIGJlIHVzZWQgYnkgdGljIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bnRpbWUKKwkgIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBtYWRlIHRvIHNncjAgZm9yIHRlcm1jYXAgYXBwbGljYXRpb25zLgorCSsgbW9kaWZ5IG1ha2Vfc2VkLnNoIHRvIG1ha2UgdGhlIGdyb3VwLW5hbWUgaW4gdGhlIE5BTUUgc2VjdGlvbiBvZgorCSAgZm9ybS9tZW51IGxpYnJhcnkgbWFucGFnZSBhZ3JlZSB3aXRoIHRoZSBUSVRMRSBzdHJpbmcgd2hlbiByZW5hbWluZworCSAgaXMgZG9uZSBmb3IgRGViaWFuIChEZWJpYW4gIzc4ODY2KS4KKworMjAwNTA3MDIKKwkrIG1vZGlmeSBwYXJhbWV0ZXIgdHlwZSBpbiBjKysgYmluZGluZyBmb3IgaW5zY2goKSBhbmQgbXZ3aW5zY2goKSB0bworCSAgYmUgY29uc2lzdGVudCB3aXRoIHVuZGVybHlpbmcgbmN1cnNlcyBsaWJyYXJ5ICh3YXMgY2hhciwgaXMgY2h0eXBlKS4KKwkrIG1vZGlmeSB0cmVhdG1lbnQgb2YgSW50ZWwgY29tcGlsZXIgdG8gYWxsb3cgX0dOVV9TT1VSQ0UgdG8gYmUgZGVmaW5lZAorCSAgb24gTGludXguCisJKyBpbXByb3ZlIGNvbmZpZ3VyZSBjaGVjayBmb3IgbmFub3NsZWVwKCksIGNoZWNraW5nIHRoYXQgaXQgd29ya3Mgc2luY2UKKwkgIHNvbWUgb2xkZXIgc3lzdGVtcyBzdWNoIGFzIEFJWCA0LjMgaGF2ZSBhIG5vbndvcmtpbmcgdmVyc2lvbi4KKworMjAwNTA2MjUKKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgZnJvbQorCQlodHRwOi8vc3VidmVyc2lvbnMuZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvY29uZmlnL2NvbmZpZy8KKwkrIG1vZGlmeSBtaXNjL3NobGliIHRvIHdvcmsgaW4gdGVzdC1kaXJlY3RvcnkuCisJKyBzdXBwcmVzcyAkc3VmZml4IGluIG1pc2MvcnVuX3RpYy5zaCB3aGVuIGNyb3NzLWNvbXBpbGluZy4gIFRoaXMKKwkgIGFsbG93cyBjcm9zcy1jb21waWxlcyB0byB1c2UgdGhlIGhvc3QncyB0aWMgcHJvZ3JhbSB0byBoYW5kbGUgdGhlCisJICAibWFrZSBpbnN0YWxsLmRhdGEiIHN0ZXAuCisJKyBpbXByb3ZlIGRlc2NyaXB0aW9uIG9mICRMSU5FUyBhbmQgJENPTFVNTlMgdmFyaWFibGVzIGluIG1hbnBhZ2VzCisJICAocHJvbXB0ZWQgYnkgcmVwb3J0IGJ5IERhdmUgVWxyaWNrKS4KKwkrIGltcHJvdmUgZGVzY3JpcHRpb24gb2YgY3Jvc3MtY29tcGlsaW5nIGluIElOU1RBTEwKKwkrIGFkZCBOQ1VSU0VTLVByb2dyYW1taW5nLUhPV1RPLmh0bWwgYnkgUHJhZGVlcCBQYWRhbGEKKwkgIChzZWUgaHR0cDovL3RsZHAub3JnL0hPV1RPL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8vKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIG9idGFpbiBzb25hbWUgZm9yIEdQTSBsaWJyYXJ5IChkaXNjdXNzaW9uCisJICB3aXRoIERhbmllbCBKYWNvYm93aXR6KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHNvIHRoYXQgLS13aXRoLWNodHlwZSBvcHRpb24gd2lsbCBzdGlsbAorCSAgY29tcHV0ZSB0aGUgdW5zaWduZWQgbGl0ZXJhbHMgc3VmZml4IGZvciBjb25zdGFudHMgaW4gY3Vyc2VzLmgKKwkgIChyZXBvcnQgYnkgRGFuaWVsIEphY29ib3dpdHo6CisJKyBwYXRjaGVzIGZyb20gRGFuaWVsIEphY29ib3dpdHo6CisJICArIHRoZSBtYW5fZGIucmVuYW1lcyBlbnRyeSBmb3IgdGFjay4xIHdhcyBiYWNrd2FyZHMuCisJICArIHRhY2suMSBoYWQgc29tZSAxbSdzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiAxTSdzLgorCSAgKyB0aGUgc2VjdGlvbiBmb3IgY3Vyc19pbndzdHIuMyB3YXMgd3JvbmcuCisKKzIwMDUwNjE5CisJKyBjb3JyZWN0aW9uIHRvIC0td2l0aC1jaHR5cGUgb3B0aW9uIChyZXBvcnQgYnkgRGFuaWVsIEphY29ib3dpdHopLgorCisyMDA1MDYxOAorCSsgbW92ZSBidWlsZC10aW1lIGVkaXRfbWFuLnNoIGFuZCBlZGl0X21hbi5zZWQgc2NyaXB0cyB0byB0b3AgZGlyZWN0b3J5CisJICB0byBzaW1wbGlmeSByZXVzaW5nIHRoZW0gZm9yIHJlbmFtaW5nIHRhY2sncyBtYW5wYWdlIChwcm9tcHRlZCBieSBhCisJICByZXZpZXcgb2YgRGViaWFuIHBhY2thZ2UpLgorCSsgcmV2ZXJ0IG1pbm9yIG9wdGltaXphdGlvbiBmcm9tIDIwMDQxMDMwIChEZWJpYW4gIzMxMzYwOSkuCisJKyBsaWJ0b29sLXNwZWNpZmljIGZpeGVzLCB0ZXN0ZWQgd2l0aCBsaWJ0b29sIDEuNC4zLCAxLjUuMCwgMS41LjYsCisJICAxLjUuMTAgYW5kIDEuNS4xOCAoYWxsIHdvcmsgZXhjZXB0IGFzIG5vdGVkIHByZXZpb3VzbHkgZm9yIHRoZSBjKysKKwkgIGluc3RhbGwgdXNpbmcgbGlidG9vbCAxLjUuMCk6CisJICArIG1vZGlmeSB0aGUgY2xlYW4tcnVsZSBpbiBjKysvTWFrZWZpbGUuaW4gdG8gd29yayB3aXRoIElSSVg2NCBtYWtlCisJICAgIHByb2dyYW0uCisJICArIHVzZSAkKExJQlRPT0xfVU5JTlNUQUxMKSBzeW1ib2wsIG92ZXJsb29rZWQgaW4gMjAwMzA4MzAKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9ucyAtLXdpdGgtY2h0eXBlIGFuZCAtLXdpdGgtbW1hc2stdCwgdG8gYWxsb3cKKwkgIG92ZXJyaWRpbmcgb2YgdGhlIG5vbi1MUDY0IG1vZGVsJ3MgdXNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIHR5cGVzLgorCSsgcmV2aXNlIHRlc3QgZm9yIHNpemUgb2YgY2h0eXBlIChhbmQgbW1hc2tfdCksIHdoaWNoIGFsd2F5cyByZXR1cm5lZAorCSAgImxvbmciIGR1ZSB0byBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIChyZXBvcnQgYnkgRGFuaWVsIEphY29ib3dpdHopLgorCisyMDA1MDYxMQorCSsgY2hhbmdlIF90cmFjZWYncyB0aGF0IHVzZWQgIiVwIiBmb3JtYXQgZm9yIHZhX2xpc3QgdmFsdWVzIHRvIGlnbm9yZQorCSAgdGhhdCwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgdGhvc2UgYXJlIG5vdCBwb2ludGVycy4KKwkrIGZpeGVzIGZvciBsb25nLWZvcm1hdHMgaW4gcHJpbnRmJ3MgZHVlIHRvIGxhcmdlZmlsZSBzdXBwb3J0LgorCisyMDA1MDYwNAorCSsgZml4ZXMgZm9yIHRlcm1jYXAgc3VwcG9ydDoKKwkgICsgcmVzZXQgcG9pbnRlciB0byBfbmNfY3Vycl90b2tlbi50a19uYW1lIHdoZW4gdGhlIGlucHV0IHN0cmVhbSBpcworCSAgICBjbG9zZWQsIHdoaWNoIGNvdWxkIHBvaW50IHRvIGZyZWUgbWVtb3J5IChjZjogMjAwMzAyMTUpLgorCSAgKyBkZWxpbmsgVEVSTVRZUEUgZGF0YSB3aGljaCBpcyB1c2VkIGJ5IHRoZSB0ZXJtY2FwIHJlYWRlciwgc28gdGhhdAorCSAgICBleHRlbmRlZCBuYW1lcyBkYXRhIHdpbGwgYmUgZnJlZWQgY29uc2lzdGVudGx5LgorCSAgKyBmcmVlIHBvaW50ZXIgdG8gVEVSTVRZUEUgZGF0YSBpbiBfbmNfZnJlZV90ZXJtdHlwZSgpIHJhdGhlciB0aGFuCisJICAgIGl0cyBjYWxsZXJzLgorCSAgKyBhZGQgc29tZSBlbnRyeXBvaW50cyBmb3IgZnJlZWluZyBwZXJtYW5lbnRseSBhbGxvY2F0ZWQgZGF0YSB2aWEKKwkgICAgX25jX2ZyZWVhbGwoKSB3aGVuIE5PX0xFQUtTIGlzIGRlZmluZWQuCisJKyBhbWVuZCAyMDA0MTAzMCBjaGFuZ2UgdG8gX25jX2RvX2NvbG9yIHRvIGVuc3VyZSB0aGF0IG9wdGltaXphdGlvbiBpcworCSAgYXBwbGllZCBvbmx5IHdoZW4gdGhlIHRlcm1pbmFsIHN1cHBvcnRzIGJhY2tfY29sb3JfZXJhc2UgKGJjZSkuCisKKzIwMDUwNTI4CisJKyBhZGQgc3VuLWNvbG9yIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgY29ycmVjdCBhIG1pc3NpbmcgYXNzaWdubWVudCBpbiBjKysgYmluZGluZydzIG1ldGhvZAorCSAgTkN1cnNlc1BhbmVsOjpVc2VyUG9pbnRlcigpIGZyb20gMjAwNTA0MDkgY2hhbmdlcy4KKwkrIGltcHJvdmUgY29uZmlndXJlIGNoZWNrIGZvciBsYXJnZS1maWxlcywgYWRkaW5nIGNoZWNrIGZvciBkaXJlbnQ2NAorCSAgZnJvbSB2aWxlIC1URAorCSsgbWlub3IgY2hhbmdlIHRvIGNvbmZpZ3VyZSBzY3JpcHQgdG8gaW1wcm92ZSBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlCisJICBBZGE5NSB0cmVlLgorCisyMDA1MDUxNQorCSsgZG9jdW1lbnQgZXJyb3IgY29uZGl0aW9ucyBmb3IgbmN1cnNlcyBsaWJyYXJ5IGZ1bmN0aW9ucyAocmVwb3J0IGJ5CisJICBTdGFuaXNsYXYgSWV2bGV2KS4KKwkrIHJlZ2VuZXJhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbiBmb3IgYWRhIGJpbmRpbmcuCisJICBzZWUgZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9wYXRjaGVzL2duYXRodG1sCisKKzIwMDUwNTA3CisJKyByZWdlbmVyYXRlZCBodG1sIGRvY3VtZW50YXRpb24gZm9yIG1hbnBhZ2VzLgorCSsgYWRkICQoQlVJTERfRVhFRVhUKSBzdWZmaXggdG8gaW52b2NhdGlvbiBvZiBtYWtlX2tleXMgaW4KKwkgIG5jdXJzZXMvTWFrZWZpbGUgKEdlbnRvbyAjODk3NzIpLgorCSsgbW9kaWZ5IGMrKy9kZW1vLmNjIHRvIGJ1aWxkIHdpdGggZysrIC1mbm8taW1wbGljaXQtdGVtcGxhdGVzIG9wdGlvbgorCSAgKHBhdGNoIGJ5IE1pa2UgRnJ5c2luZ2VyKS4KKwkrIG1vZGlmeSB0aWMgdG8gZmlsdGVyIG91dCBsb25nIGV4dGVuZGVkIG5hbWVzIHdoZW4gdHJhbnNsYXRpbmcgdG8KKwkgIHRlcm1jYXAgZm9ybWF0LiAgT25seSB0d28gY2hhcmFjdGVycyBhcmUgcGVybWlzc2libGUgZm9yIHRlcm1jYXAKKwkgIGNhcGFiaWxpdHkgbmFtZXMuCisKKzIwMDUwNDMwCisJKyBtb2RpZnkgdGVybWluZm8gZW50cmllcyB4dGVybS1uZXcgYW5kIHJ4dnQgdG8gYWRkIHN0cmluZ3MgZm9yCisJICBzaGlmdC0sIGNvbnRyb2wtY3Vyc29yIGtleXMuCisJKyB3b3JrYXJvdW5kIHRvIGFsbG93IGMrKyBiaW5kaW5nIHRvIGNvbXBpbGUgd2l0aCBnKysgMi45NS4zLCB3aGljaAorCSAgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRpY19jYXN0PD4gKHBhdGNoIGJ5IEplZmYgQ2h1YSkuCisJKyBtb2RpZnkgaW5pdGlhbGl6YXRpb24gb2Yga2V5IGxvb2t1cCB0YWJsZSBzbyB0aGF0IGlmIGFuIGV4dGVuZGVkCisJICBjYXBhYmlsaXR5ICh0aWMgLXgpIHN0cmluZyBpcyBkZWZpbmVkLCBhbmQgaXRzIG5hbWUgYmVnaW5zIHdpdGggJ2snLAorCSAgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHRyZWF0ZWQgYXMgYSBrZXkuCisJKyBtb2RpZnkgdGVzdC9rZXluYW1lcy5jIHRvIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgb2YgZXh0ZW5kZWQKKwkgIGtleSBuYW1lcywgZS5nLiwgdmlhIGRlZmluZV9rZXkoKSwgb3IgdmlhICJ0aWMgLXgiLgorCSsgYWRkIHRlc3QvZGVtb190ZXJtY2FwLmMgdG8gc2hvdyB0aGUgY29udGVudHMgb2YgZ2l2ZW4gZW50cnkgdmlhIHRoZQorCSAgdGVybWNhcCBpbnRlcmZhY2UuCisKKzIwMDUwNDIzCisJKyBtaW5vciBmaXhlcyBmb3IgdnQxMDAvdnQ1MiBlbnRyaWVzIC1URAorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtbGFyZ2VmaWxlCisJKyBjb3JyZWN0ZWQgbGlicmFyaWVzIHVzZWQgdG8gYnVpbGQgQWRhOTUvZ2VuL2dlbiwgZm91bmQgaW4gdGVzdGluZworCSAgZ2NjIDQuMC4wLgorCisyMDA1MDQxNgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2sgZm9yIF9YT1BFTl9TT1VSQ0UsIGRpc2FibGUgdGhhdCBvbgorCSAgRGFyd2luIHdob3NlIGhlYWRlciBmaWxlcyBoYXZlIHByb2JsZW1zIChwYXRjaCBieSBDaHJpcyBadWJyenlja2kpLgorCSsgbW9kaWZ5IGZvcm0gbGlicmFyeSBJc19QcmludGFibGVfU3RyaW5nKCkgdG8gdXNlIGlzd3ByaW50KCkgcmF0aGVyCisJICB0aGFuIHdjd2lkdGgoKSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBjaGFyYWN0ZXIgaXMgcHJpbnRhYmxlLiAgVGhlCisJICBsYXR0ZXIgY2F1c2VkIGl0IHRvIHJlamVjdCBtZW51IGl0ZW1zIGNvbnRhaW5pbmcgbm9uLXNwYWNpbmcKKwkgIGNoYXJhY3RlcnMuCisJKyBtb2RpZnkgbmN1cnNlcyB0ZXN0IHByb2dyYW0ncyBGLXRlc3QgdG8gaGFuZGxlIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMKKwkgIGJ5IGNvbWJpbmluZyB0aGVtIHdpdGggYSByZXZlcnNlLXZpZGVvIGJsYW5rLgorCSsgcmV2aWV3L2ZpeCBzZXZlcmFsIGdjYyAtV2NvbnZlcnNpb24gd2FybmluZ3MuCisKKzIwMDUwNDA5CisJKyBjb3JyZWN0IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbV9kcml2ZXIoKSBmb3IgbW91c2UtY2xpY2tzIHVzZWQgdG8KKwkgIHBvc2l0aW9uIHRoZSBtb3VzZSB0byBhIHBhcnRpY3VsYXIgaXRlbS4KKwkrIGltcGxlbWVudCB0ZXN0L2RlbW9fbWVudXMuYworCSsgYWRkIHNvbWUgY2hlY2tzIGluIGxpYl9tb3VzZSB0byBlbnN1cmUgU1AgaXMgc2V0LgorCSsgbW9kaWZ5IEMrKyBiaW5kaW5nIHRvIG1ha2UgMjAwNTA0MDMgY2hhbmdlcyB3b3JrIHdpdGggdGhlIGNvbmZpZ3VyZQorCSAgLS1lbmFibGUtY29uc3Qgb3B0aW9uLgorCisyMDA1MDQwMworCSsgbW9kaWZ5IHN0YXJ0X2NvbG9yKCkgdG8gcmV0dXJuIEVSUiBpZiBpdCBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5LgorCSsgYWRkcmVzcyBnKysgY29tcGlsZXIgd2FybmluZ3MgaW4gQysrIGJpbmRpbmcgYnkgYWRkaW5nIGV4cGxpY2l0CisJICBtZW1iZXIgaW5pdGlhbGl6YXRpb24sIGFzc2lnbm1lbnQgb3BlcmF0b3JzIGFuZCBjb3B5IGNvbnN0cnVjdG9ycy4KKwkgIE1vc3Qgb2YgdGhlIGNoYW5nZXMgc2ltcGx5IHByZXNlcnZlIHRoZSBleGlzdGluZyBzZW1hbnRpY3Mgb2YgdGhlCisJICBiaW5kaW5nLCB3aGljaCBjYW4gbGVhayBtZW1vcnksIGV0Yy4sIGJ1dCBieSBtYWtpbmcgdGhlc2UgZmVhdHVyZXMKKwkgIHZpc2libGUsIGl0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBpbXByb3ZpbmcgdGhlIGJpbmRpbmcuCisJKyBpbXByb3ZlIEMrKyBiaW5kaW5nIHVzaW5nIHN0YXRpY19jYXN0LCBldGMuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCAtLWVuYWJsZS13YXJuaW5ncyB0byBhZGQgb3B0aW9ucyB0byBnKysgdG8KKwkgIGNvcnJlc3BvbmQgdG8gdGhlIGdjYyAtLWVuYWJsZS13YXJuaW5ncy4KKwkrIG1vZGlmeSBDKysgYmluZGluZyB0byB1c2Ugc29tZSBDIGludGVybmFsIGZ1bmN0aW9ucyB0byBtYWtlIGl0CisJICBjb21waWxlIHByb3Blcmx5IG9uIFNvbGFyaXMgKGFuZCBvdGhlciBwbGF0Zm9ybXMpLgorCisyMDA1MDMyNworCSsgYW1lbmQgY2hhbmdlIGZyb20gMjAwNTAzMjAgdG8gbGltaXQgaXQgdG8gY29uZmlndXJhdGlvbnMgd2l0aCBhCisJICB2YWxpZCBsb2NhbGUuCisJKyBmaXggYSBidWcgaW50cm9kdWNlZCBpbiAyMDA1MDMyMCB3aGljaCBicm9rZSB0aGUgdHJhbnNsYXRpb24gb2YKKwkgIG5vbnByaW50aW5nIGNoYXJhY3RlcnMgdG8gdXBhcnJvdyBmb3JtIChyZXBvcnQgYnkgVGFrYWhhc2hpIFRhbW90c3UpLgorCisyMDA1MDMyNgorCSsgYWRkIGlmZGVmJ3MgZm9yIF9MUDY0IGluIGN1cnNlcy5oIHRvIGF2b2lkIHVzaW5nIHdhc3RlZnVsIDY0LWJpdHMgZm9yCisJICBjaHR5cGUgYW5kIG1tYXNrX3QsIGJ1dCBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtbHA2NCBpbiBjYXNlCisJICBhbnlvbmUgdXNlZCB0aGF0IGNvbmZpZ3VyYXRpb24uCisJKyB1cGRhdGUgbWlzYy9zaGxpYiBzY3JpcHQgdG8gYWNjb3VudCBmb3IgTWFjIE9TIFggKHJlcG9ydCBieSBNaWNoYWlsCisJICBWaWRpYXNzb3YpLgorCSsgY29ycmVjdCBjb21wYXJpc29uIGZvciB3cmFwcGluZyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbgorCSAgd2FkZGNoX2xpdGVyYWwoKSAocmVwb3J0IGJ5IFRha2FoYXNoaSBUYW1vdHN1KS4KKworMjAwNTAzMjAKKwkrIGFkZCAtYyBhbmQgLXcgb3B0aW9ucyB0byB0c2V0IHRvIGFsbG93IHVzZXIgdG8gc3VwcHJlc3MgbmN1cnNlcycKKwkgIHJlc2l6aW5nIG9mIHRoZSB0ZXJtaW5hbCBlbXVsYXRvciB3aW5kb3cgaW4gdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSBpdAorCSAgaXMgbm90IGFibGUgdG8gZGV0ZWN0IHRoZSB0cnVlIHNpemUgKHJlcG9ydCBieSBXaW4gRGVsdmF1eCwgRGViaWFuCisJICAjMzAwNDE5KS4KKwkrIG1vZGlmeSB3YWRkY2hfbm9zeW5jKCkgdG8gYWNjb3VudCBmb3IgbG9jYWxlIHpuX0NILkdCSywgd2hpY2ggdXNlcworCSAgY29kZXMgMTI4LTE1OSBhcyBwYXJ0IG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIChyZXBvcnQgYnkgV2FuZworCSAgV2VuUnVpLCBEZWJpYW4gIzMwMDUxMikuCisKKzIwMDUwMzE5CisJKyBtb2RpZnkgbmN1cnNlcy5jICdkJyB0ZXN0IHRvIG1ha2UgaXQgd29yayB3aXRoIDg4LWNvbG9yCisJICBjb25maWd1cmF0aW9uLCBpLmUuLCBieSBpbXBsZW1lbnRpbmcgc2Nyb2xsaW5nLgorCSsgaW1wcm92ZSBzY3JvbGxpbmcgaW4gbmN1cnNlcy5jICdjJyBhbmQgJ0MnIHRlc3RzLCBlLmcuLCBmb3IgODgtY29sb3IKKwkgIGNvbmZpZ3VyYXRpb24uCisKKzIwMDUwMzEyCisJKyBjaGFuZ2UgdHJhY2VtdW5jaCB0byB1c2Ugc3RyaWN0IGNoZWNraW5nLgorCSsgbW9kaWZ5IG5jdXJzZXMuYyAncCcgdGVzdCB0byB0ZXN0IGxpbmUtZHJhd2luZyB3aXRoaW4gYSBwYWQuCisJKyBpbXBsZW1lbnQgZW52aXJvbm1lbnQgdmFyaWFibGUgTkNVUlNFU19OT19VVEY4X0FDUyB0byBzdXBwb3J0CisJICBtaXNjZWxsYW5lb3VzIHRlcm1pbmFsIGVtdWxhdG9ycyB3aGljaCBpZ25vcmUgYWx0ZXJuYXRlIGNoYXJhY3RlcgorCSAgc2V0IGVzY2FwZSBzZXF1ZW5jZXMgd2hlbiBpbiBVVEYtOCBtb2RlLgorCisyMDA1MDMwNQorCSsgY2hhbmdlIE5DdXJzZXNXaW5kb3c6OmVycl9oYW5kbGVyKCkgdG8gYSB2aXJ0dWFsIGZ1bmN0aW9uIChyZXF1ZXN0IGJ5CisJICBTdGV2ZSBCZWFsKS4KKwkrIG1vZGlmeSBmdHlfaW50LmMgYW5kIGZ0eV9udW0uYyB0byBoYW5kbGUgd2lkZSBjaGFyYWN0ZXJzIChyZXBvcnQgYnkKKwkgIFdvbGZnYW5nIEd1dGphaHIpLgorCSsgYWRhcHQgZml4IGZvciBmdHlfYWxwaGEuYyB0byBmdHlfYWxudW0uYywgd2hpY2ggYWxzbyBoYW5kbGVkIG5vcm1hbAorCSAgYW5kIHdpZGUgY2hhcmFjdGVycyBpbmNvbnNpc3RlbnRseSAocmVwb3J0IGJ5IFdvbGZnYW5nIEd1dGphaHIpLgorCSsgdXBkYXRlIGxsaWItKiBmaWxlcyB0byByZWZsZWN0IGludGVybmFsIGludGVyZmFjZSBhZGRpdGlvbnMvY2hhbmdlcy4KKworMjAwNTAyMjYKKwkrIGltcHJvdmUgdGVzdC9jb25maWd1cmUgc2NyaXB0LCBhZGRpbmcgdGVzdHMgZm9yIF9YT1BFTl9TT1VSQ0UsIGV0Yy4sCisJICBmcm9tIGx5bnguCisJKyBhZGQgYWl4dGVybS0xNmNvbG9yIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgbW9kaWZpZWQgeHRlcm0tbmV3IHRlcm1pbmZvIGVudHJ5IHRvIHdvcmsgd2l0aCB0Z2V0ZW50KCkgY2hhbmdlcyAtVEQKKwkrIGV4dGVuZGVkIGNoYW5nZXMgaW4gdGdldGVudCgpIGZyb20gMjAwNDA3MTAgdG8gYWxsb3cgdGhlIHN1YnN0cmluZyBvZgorCSAgc2dyMCB3aGljaCBtYXRjaGVzIHJtYWNzIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNncjAgc3RyaW5nCisJICAocmVxdWVzdCBieSBUaG9tYXMgV29sZmYpLiAgV29sZmYgc2F5cyB0aGUgdmlzdWFsIGVmZmVjdCBpbgorCSAgY29tYmluYXRpb24gd2l0aCBwcmUtMjAwNDA3MTAgbmN1cnNlcyBpcyBpbXByb3ZlZC4KKwkrIGZpeCBvZmYtYnktb25lIGluIHdpbm5zdHIoKSBjYWxsIHdoaWNoIGNhdXNlZCBmb3JtIGZpZWxkIHZhbGlkYXRpb24KKwkgIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIHRvIGlnbm9yZSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBmaWVsZC4KKwkrIGNvcnJlY3QgbG9naWMgaW4gd2luc2NoKCkgZm9yIGluc2VydGluZyBtdWx0aWJ5dGUgc3RyaW5nczsgdGhlIGNvZGUKKwkgIHdvdWxkIGNsZWFyIGNlbGxzIGFmdGVyIHRoZSBpbnNlcnRpb24gcmF0aGVyIHRoYW4gcHVzaCB0aGVtIHRvIHRoZQorCSAgcmlnaHQgKGNmOiAyMDA0MDIyOCkuCisJKyBmaXggYW4gaW5jb25zaXN0ZW5jeSBpbiBDaGVja19BbHBoYV9GaWVsZCgpIGJldHdlZW4gbm9ybWFsIGFuZCB3aWRlCisJICBjaGFyYWN0ZXIgbG9naWMgKHJlcG9ydCBieSBXb2xmZ2FuZyBHdXRqYWhyKS4KKworMjAwNTAyMTkKKwkrIGZpeCBhIGJ1ZyBpbiBlZGl0aW5nIHdpZGUtY2hhcmFjdGVycyBpbiBmb3JtIGxpYnJhcnk6IGRlbGV0aW5nIGEKKwkgIG5vbndpZGUgY2hhcmFjdGVyIG1vZGlmaWVkIHRoZSBwcmV2aW91cyB3aWRlLWNoYXJhY3Rlci4KKwkrIHVwZGF0ZSBtYW5wYWdlIHRvIGRlc2NyaWJlIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiAyLgorCSsgY29ycmVjdCBtYW5wYWdlIGRlc2NyaXB0aW9uIG9mIG1vdXNlaW50ZXJ2YWwoKSAoRGViaWFuICMyODA2ODcpLgorCSsgYWRkIGEgbm90ZSB0byBkZWZhdWx0X2NvbG9ycy4zeCBleHBsYWluaW5nIHdoeSB0aGlzIGV4dGVuc2lvbiB3YXMKKwkgIGFkZGVkIChEZWJpYW4gIzI5NTA4MykuCisJKyBhZGQgdHJhY2VzIHRvIHBhbmVsIGxpYnJhcnkuCisKKzIwMDUwMjEyCisJKyBpbXByb3ZlIGVkaXRpbmcgb2Ygd2lkZS1jaGFyYWN0ZXJzIGluIGZvcm0gbGlicmFyeTogIGxlZnQvcmlnaHQKKwkgIGN1cnNvciBtb3ZlbWVudCwgYW5kIHNpbmdsZS1jaGFyYWN0ZXIgZGVsZXRpb25zIHdvcmsgcHJvcGVybHkuCisJKyBkaXNhYmxlIEdQTSBtb3VzZSBzdXBwb3J0IHdoZW4gJFRFUk0gaGFwcGVucyB0byBiZSBwcmVmaXhlZCB3aXRoCisJICAieHRlcm0iLiAgR3BtX09wZW4oKSB3b3VsZCBvdGhlcndpc2UgYXNzZXJ0IHRoYXQgaXQgY2FuIGRlYWwgd2l0aAorCSAgbW91c2UgZXZlbnRzIGluIHRoaXMgY2FzZS4KKwkrIG1vZGlmeSBHUE0gbW91c2Ugc3VwcG9ydCBzbyBpdCBjbG9zZXMgdGhlIHNlcnZlciBjb25uZWN0aW9uIHdoZW4KKwkgIHRoZSBjYWxsZXIgZGlzYWJsZXMgdGhlIG1vdXNlIChyZXBvcnQgYnkgU3RhbmlzbGF2IElldmxldikuCisKKzIwMDUwMjA1CisJKyBhZGQgdHJhY2VzIGZvciBjYWxsYmFjayBmdW5jdGlvbnMgaW4gZm9ybSBsaWJyYXJ5LgorCSsgYWRkIGV4cGVyaW1lbnRhbCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWV4dC1tb3VzZSwgd2hpY2ggZGVmaW5lcworCSAgTkNVUlNFU19NT1VTRV9WRVJTSU9OIDIsIGFuZCBtb2RpZmllcyB0aGUgZW5jb2Rpbmcgb2YgbW91c2UgZXZlbnRzIHRvCisJICBzdXBwb3J0IHdoZWVsIG1pY2UsIHdoaWNoIG1heSB0cmFuc21pdCBidXR0b25zIDQgYW5kIDUuICBUaGlzIHdvcmtzCisJICB3aXRoIHh0ZXJtIGFuZCBzaW1pbGFyIFggdGVybWluYWwgZW11bGF0b3JzIChwcm9tcHRlZCBieSBxdWVzdGlvbiBieQorCSAgQW5kcmVhcyBIZW5uaW5nc3NvbiwgdGhpcyBpcyBhbHNvIHJlbGF0ZWQgdG8gRGViaWFuICMyMzA5OTApLgorCSsgaW1wcm92ZSBjb25maWd1cmUgbWFjcm9zIENGX1hPUEVOX1NPVVJDRSBhbmQgQ0ZfUE9TSVhfQ19TT1VSQ0UgdG8KKwkgIGF2b2lkIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyBvbiBjeWd3aW4uCisKKzIwMDUwMTI5CisJKyBtZXJnZSByZW1haW5pbmcgZGV2ZWxvcG1lbnQgY2hhbmdlcyBmb3IgZXh0ZW5kZWQgY29sb3JzIChtb3N0bHkKKwkgIGNvbXBsZXRlLCBkb2VzIG5vdCBhcHBlYXIgdG8gYnJlYWsgb3RoZXIgY29uZmlndXJhdGlvbnMpLgorCSsgYWRkIHh0ZXJtLTg4Y29sb3IuZGF0IChwYXJ0IG9mIGV4dGVuZGVkIGNvbG9ycyB0ZXN0aW5nKS4KKwkrIGltcHJvdmUgX3RyYWNlZHVtcCgpIGhhbmRsaW5nIG9mIGNvbG9yIHBhaXJzIHBhc3QgOTYuCisJKyBtb2RpZnkgcmV0dXJuLXZhbHVlIGZyb20gc3RhcnRfY29sb3IoKSB0byByZXR1cm4gT0sgaWYgY29sb3JzIGhhdmUKKwkgIGFscmVhZHkgYmVlbiBzdGFydGVkLgorCSsgbW9kaWZ5IGN1cnNfY29sb3IuM3ggbGlzdCBlcnJvciBjb25kaXRpb25zIGZvciBpbml0X3BhaXIoKSwKKwkgIHBhaXJfY29udGVudCgpIGFuZCBjb2xvcl9jb250ZW50KCkuCisJKyBtb2RpZnkgcGFpcl9jb250ZW50KCkgdG8gcmV0dXJuIC0xIGZvciBjb25zaXN0ZW5jeSB3aXRoIGluaXRfcGFpcigpCisJICBpZiBpdCBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdC1jb2xvci4KKwkrIGNoYW5nZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBkZWZhdWx0LWNvbG9yIHRvIGFsbG93IGFwcGxpY2F0aW9uCisJICB0byB1c2UgY29sb3IgbnVtYmVyIDI1NS4gIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSB0b3RhbCBudW1iZXIgb2YKKwkgIGNvbG9yIHBhaXJzIHdoaWNoIGFyZSBhbGxvd2VkLgorCSsgYWRkIGEgdG9wLWxldmVsIHRhZ3MgcnVsZS4KKworMjAwNTAxMjIKKwkrIGFkZCBhIG51bGwtcG9pbnRlciBjaGVjayBpbiB3Z2V0Y2goKSBpbiBjYXNlIGl0IGlzIGNhbGxlZCB3aXRob3V0CisJICBmaXJzdCBjYWxsaW5nIGluaXRzY3IoKS4KKwkrIGFkZCBzb21lIG51bGwtcG9pbnRlciBjaGVja3MgZm9yIFNQLCB3aGljaCBpcyBub3Qgc2V0IGJ5IGxpYnRpbmZvLgorCSsgbW9kaWZ5IG1pc2Mvc2hsaWIgdG8gZW5zdXJlIHRoYXQgYWJzb2x1dGUgcGF0aG5hbWVzIGFyZSB1c2VkLgorCSsgbW9kaWZ5IHRlc3QvTWFrZWZpbGUuaW4sIGV0Yy4sIHRvIGxpbmsgdGVzdCBwcm9ncmFtcyBvbmx5IGFnYWluc3QgdGhlCisJICBsaWJyYXJpZXMgbmVlZGVkLCBlLmcuLCBvbWl0IGZvcm0vbWVudS9wYW5lbCBsaWJyYXJ5IGZvciB0aGUgb25lcworCSAgdGhhdCBhcmUgY3Vyc2VzLXNwZWNpZmljLgorCSsgY2hhbmdlIFNQLT5fY3VycmVudF9hdHRyIHRvIGEgcG9pbnRlciwgYWRqdXN0IGlmZGVmJ3MgdG8gZW5zdXJlIHRoYXQKKwkgIGxpYnRpbmZvLnNvIGFuZCBsaWJ0aW5mb3cuc28gaGF2ZSB0aGUgc2FtZSBBQkkuICBUaGUgcmVhc29uIGZvciB0aGlzCisJICBpcyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgd2hpY2ggYmVsb25ncyB0byB0aGUgdXBwZXItbGV2ZWwKKwkgIG5jdXJzZXMgbGlicmFyeSBoYXMgYSBkaWZmZXJlbnQgc2l6ZSBpbiBlYWNoIG1vZGVsIChyZXBvcnQgYnkKKwkgIFN0YW5pc2xhdiBJZXZsZXYpLgorCisyMDA1MDExNQorCSsgbWlub3IgZml4ZXMgdG8gYWxsb3cgdGVzdC1jb21waWxlcyB3aXRoIGcrKy4KKwkrIGNvcnJlY3QgY29sdW1uIHZhbHVlIHNob3duIGluIHRpYydzIHdhcm5pbmdzLCB3aGljaCBkaWQgbm90IGFjY291bnQKKwkgIGZvciBsZWFkaW5nIHdoaXRlc3BhY2UuCisJKyBhZGQgYSBjaGVjayBpbiBfbmNfdHJhbnNfc3RyaW5nKCkgZm9yIGltcHJvcGVybHkgZW5kZWQgc3RyaW5ncywgaS5lLiwKKwkgIHdoZXJlIGEgZm9sbG93aW5nIGxpbmUgYmVnaW5zIGluIGNvbHVtbiAxLgorCSsgbW9kaWZ5IF9uY19zYXZlX3N0cigpIHRvIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBidWZmZXIgb3ZlcmZsb3cuCisJKyBpbXByb3ZlIHJlcGFpbnRpbmcgd2hpbGUgc2Nyb2xsaW5nIHdpZGUtY2hhcmFjdGVyIGRhdGEgKEV1bmdreXUgU29uZykuCisKKzIwMDUwMTA4CisJKyBtZXJnZSBzb21lIGRldmVsb3BtZW50IGNoYW5nZXMgdG8gZXh0ZW5kIGNvbG9yIGNhcGFiaWxpdGllcy4KKworMjAwNTAxMDEKKwkrIG1lcmdlIHNvbWUgZGV2ZWxvcG1lbnQgY2hhbmdlcyB0byBleHRlbmQgY29sb3IgY2FwYWJpbGl0aWVzLgorCSsgZml4IG1hbnBhZ2UgdHlwbyAoRnJlZUJTRCByZXBvcnQgZG9jcy83NTU0NCkuCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJPiBwYXRjaGVzIGZvciBjb25maWd1cmUgc2NyaXB0IChBbGJlcnQgQ2hpbi1BLVlvdW5nKToKKwkrIGltcHJvdmVkIGZpeCB0byBtYWtlIG1ic3RhdGVfdCByZWNvZ25pemVkIG9uIEhQVVggMTFpIChjZjoKKwkgIDIwMDMwNzA1KSwgbWFraW5nIHZzc2NhbmYoKSBwcm90b3R5cGUgdmlzaWJsZSBvbiBJUklYNjQuICBUZXN0ZWQgZm9yCisJICBvbiBIUC1VWCAxMWksIFNvbGFyaXMgNywgOCwgOSwgQUlYIDQuMy4zLCA1LjIsIFRydTY0IFVOSVggNC4wRCwgNS4xLAorCSAgSVJJWDY0IDYuNSwgUmVkaGF0IExpbnV4IDcuMSwgOSwgYW5kIFJIRUwgMi4xLCAzLjAuCisJKyBwcmludCB0aGUgcmVzdWx0IG9mIHRoZSAtLWRpc2FibGUtaG9tZS10ZXJtaW5mbyBvcHRpb24uCisJKyB1c2UgLXJwYXRoIHdoZW4gY29tcGlsaW5nIHdpdGggU0dJIEMgY29tcGlsZXIuCisKKzIwMDQxMjI1CisJKyBhZGQgdHJhY2UgY2FsbHMgdG8gcmVtYWluaW5nIHB1YmxpYyBmdW5jdGlvbnMgaW4gZm9ybSBhbmQgbWVudQorCSAgbGlicmFyaWVzLgorCSsgZml4IGNoZWNrIGZvciBudW1lcmljIGRpZ2l0cyBpbiB0ZXN0L25jdXJzZXMuYyAnYicgYW5kICdCJyB0ZXN0cy4KKwkrIGZpeCB0eXBvIGluIHRlc3QvbmN1cnNlcy5jICdjJyB0ZXN0IGZyb20gMjAwNDEyMTguCisKKzIwMDQxMjE4CisJKyByZXZpc2UgdGVzdC9uY3Vyc2VzLmMgJ2MnIGNvbG9yIHRlc3QgdG8gaW1wcm92ZSB1c2UgZm9yIHh0ZXJtLTg4Y29sb3IKKwkgIGFuZCB4dGVybS0yNTZjb2xvciwgYWRkZWQgJ0MnIHRlc3QgdXNpbmcgdGhlIHdpZGUtY2hhcmFjdGVyIGNvbG9yX3NldAorCSAgYW5kIGF0dHJfc2V0IGZ1bmN0aW9ucy4KKworMjAwNDEyMTEKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHdvcmsgd2l0aCBJbnRlbCBjb21waWxlci4KKwkrIGZpeCBhbiBsaW1pdC1jaGVjayBpbiB3YWRkX3djaG5zdHIoKSB3aGljaCBjYXVzZWQgbGFiZWxzIGluIHRoZQorCSAgZm9ybXMtZGVtbyB0byBiZSBvbmUgY2hhcmFjdGVyIHNob3J0LgorCSsgZml4IHR5cG8gaW4gY3Vyc19hZGRjaHN0ci4zeCAoSmFyZWQgWWFub3ZpY2gpLgorCSsgYWRkIHRyYWNlIGNhbGxzIHRvIG1vc3QgZnVuY3Rpb25zIGluIGZvcm0gYW5kIG1lbnUgbGlicmFyaWVzLgorCSsgdXBkYXRlIHdvcmtpbmctcG9zaXRpb24gZm9yIGFkZGluZyB3aWRlLWNoYXJhY3RlcnMgd2hlbiB3aW5kb3cgaXMKKwkgIHNjcm9sbGVkIChwcm9tcHRlZCBieSByZWxhdGVkIHJlcG9ydCBieSBFdW5na3l1IFNvbmcpLgorCisyMDA0MTIwNAorCSsgcmVwbGFjZSBzb21lIHJlZmVyZW5jZXMgb24gTGludXggdG8gd2NydG9tYigpIHdoaWNoIHVzZSBpdCB0byBvYnRhaW4KKwkgIHRoZSBsZW5ndGggb2YgYSBtdWx0aWJ5dGUgc3RyaW5nIHdpdGggX25jX3djcnRvbWIsIHNpbmNlIHdjcnRvbWIoKSBpcworCSAgYnJva2VuIGluIGdsaWJjIChzZWUgRGViaWFuICMyODQyNjApLgorCSsgY29ycmVjdGVkIGxlbmd0aC1jb21wdXRhdGlvbiBpbiB3aWRlLWNoYXJhY3RlciBzdXBwb3J0IGZvcgorCSAgZmllbGRfYnVmZmVyKCkuCisJKyBzb21lIGZpeGVzIHRvIGZybV9kcml2ZXIuYyB0byBhbGxvdyBpdCB0byBhY2NlcHQgbXVsdGlieXRlIGlucHV0LgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gd29yayB3aXRoIEludGVsIDguMCBjb21waWxlci4KKworMjAwNDExMjcKKwkrIGFtZW5kIGNoYW5nZSB0byBzZXR1cHRlcm0oKSBpbiAyMDAzMDQwNSB3aGljaCB3b3VsZCByZXVzZSB0aGUgdmFsdWUKKwkgIG9mIGN1cl90ZXJtIGlmIHRoZSBzYW1lIG91dHB1dCB3YXMgc2VsZWN0ZWQuICBUaGlzIG5vdyByZXVzZXMgaXQgb25seQorCSAgd2hlbiBzZXR1cHRlcm0oKSBpcyBjYWxsZWQgZnJvbSB0Z2V0ZW50KCksIHdoaWNoIGhhcyBubyBub3Rpb24gb2YKKwkgIHNlcGFyYXRlIFNDUkVFTnMuICBOb3RlIHRoYXQgdGdldGVudCgpIG11c3QgYmUgY2FsbGVkIGFmdGVyIGluaXRzY3IoKQorCSAgb3IgbmV3dGVybSgpIHRvIHVzZSB0aGlzIGZlYXR1cmUgKFJlZGhhdCBCdWd6aWxsYSAjMTQwMzI2KS4KKwkrIGFkZCBhIGNoZWNrIGluIENGX0JVSUxEX0NDIG1hY3JvIHRvIGVuc3VyZSB0aGF0IGRldmVsb3BlciBoYXMgZ2l2ZW4KKwkgIHRoZSAtLXdpdGgtYnVpbGQtY2Mgb3B0aW9uIHdoZW4gY3Jvc3MtY29tcGlsaW5nIChyZXBvcnQgYnkgQWxleGFuZHJlCisJICBDYW1wbykuCisJKyBpbXByb3ZlZCBjb25maWd1cmUgc2NyaXB0IGNoZWNrcyBmb3IgX1hPUEVOX1NPVVJDRSBhbmQKKwkgIF9QT1NJWF9DX1NPVVJDRSAoZml4IGZvciBJUklYIDUuMyBmcm9tIEdlb3JnIFNjaHdhcnosIF9QT1NJWF9DX1NPVVJDRQorCSAgdXBkYXRlcyBmcm9tIGx5bngpLgorCSsgY29zbWV0aWMgZml4IHRvIHRlc3QvZ2RjLmMgdG8gcmVjb2xvciB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJveAorCSAgZm9yIGNvbnNpc3RlbmN5IChjb21tZW50IGJ5IERhbiBOZWxzb24pLgorCisyMDA0MTEyMAorCSsgdXBkYXRlIHdzdnQyNSB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIG1vZGlmeSB0ZXN0L2luc193aWRlLmMgdG8gdGVzdCBhbGwgZmxhdm9ycyBvZiBpbnNfd3N0cigpLgorCSsgaWdub3JlIGZpbGxlci1jZWxscyBpbiB3YWRkX3djaG5zdHIoKSB3aGVuIGFkZGluZyBhIGNjaGFyX3QgYXJyYXkKKwkgIHdoaWNoIGNvbnNpc3RzIG9mIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzLCBzaW5jZSB0aGlzIGZ1bmN0aW9uCisJICBjb25zdHJ1Y3RzIHRoZW0gKGNmOiAyMDA0MTAyMykuCisJKyBtb2RpZnkgd2lubnN0cigpIHRvIHJldHVybiBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN0cmluZ3MgZm9yIHRoZQorCSAgd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbi4KKworMjAwNDExMDYKKwkrIGZpeGVzIHRvIG1ha2Ugc2xrX3NldCgpIGFuZCBzbGtfd3NldCgpIGFjY2VwdCBhbmQgc3RvcmUgbXVsdGlieXRlCisJICBvciBtdWx0aWNvbHVtbiBjaGFyYWN0ZXJzLgorCisyMDA0MTAzMAorCSsgaW1wcm92ZSBjb2xvciBvcHRpbWl6YXRpb24gYSBsaXR0bGUgYnkgbWFraW5nIF9uY19kb19jb2xvcigpIGNoZWNrCisJICBpZiB0aGUgb2xkL25ldyBwYWlycyBhcmUgZXF1aXZhbGVudCB0byB0aGUgZGVmYXVsdCBwYWlyIDAuCisJKyBtb2RpZnkgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkgdG8gbm90IHJlcXVpcmUgdGhhdAorCSAgdXNlX2RlZmF1bHRfY29sb3JzKCkgYmUgY2FsbGVkIGZpcnN0LgorCisyMDA0MTAyMworCSsgbW9kaWZ5IHRlcm1fYXR0cnMoKSB0byB1c2UgdGVybWF0dHJzKCksIGFkZCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcworCSAgc3VjaCBhcyBlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUgZm9yIFdBX0hPUklaT05UQUwgdG8gdGVybV9hdHRycygpLgorCSsgYWRkIGxvZ2ljIGluIHdhZGRjaF9saXRlcmFsKCkgdG8gY2xlYXIgb3JwaGFuZWQgY2VsbHMgd2hlbiBvbmUKKwkgIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIgcGFydGx5IG92ZXJ3cml0ZXMgYW5vdGhlci4KKwkrIGltcHJvdmVkIGxvZ2ljIGZvciBjbGVhcmluZyBjZWxscyB3aGVuIGEgbXVsdGktY29sdW1uIGNoYXJhY3RlcgorCSAgbXVzdCBiZSB3cmFwcGVkIHRvIGEgbmV3IGxpbmUuCisJKyByZXZpc2Ugc3RvcmFnZSBvZiBjZWxscyBmb3IgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMgdG8gY29ycmVjdCBhCisJICBwcm9ibGVtIHdpdGggcmVwYWludGluZy4gIEluIHRoZSBvbGQgc2NoZW1lLCBpdCB3YXMgcG9zc2libGUgZm9yCisJICBkb3VwZGF0ZSgpIHRvIGRlY2lkZSB0aGF0IG9ubHkgcGFydCBvZiBhIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIKKwkgIHNob3VsZCBiZSByZXBhaW50ZWQgc2luY2UgdGhlIGZpbGxlciBjZWxscyBzdG9yZWQgb25seSBhbiBhdHRyaWJ1dGUKKwkgIHRvIGRlbm90ZSB0aGVtIGFzIGZpbGxlcnMsIHJhdGhlciB0aGFuIHRoZSBjaGFyYWN0ZXIgdmFsdWUgYW5kIHRoZQorCSAgYXR0cmlidXRlLgorCisyMDA0MTAxNgorCSsgbWlub3IgZml4ZXMgZm9yIHRyYWNlcy4KKwkrIGFkZCBTUC0+X3NjcmVlbl9hY3NfbWFwW10sIHVzZWQgdG8gZW5zdXJlIHRoYXQgbWFwcGluZyBvZiBtaXNzaW5nCisJICBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycyBpcyBoYW5kbGVkIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIEFDU19EQVJST1cKKwkgIGlzIGFic2VudCBmcm9tIHh0ZXJtLW5ldywgYW5kIGl0IHdhcyBjb2luY2lkZW50YWxseSBkaXNwbGF5ZWQgdGhlCisJICBzYW1lIGFzIEFDU19CVEVFLgorCisyMDA0MTAwOQorCSsgYW1lbmQgMjAwMjEyMjEgd29ya2Fyb3VuZCBmb3IgYnJva2VuIGFjcyB0byByZXNldCB0aGUgc2dyLCBybWFjcworCSAgYW5kIHNtYWNzIHN0cmluZ3MgYXMgd2VsbC4gIEFsc28gbW9kaWZ5IHRoZSBjaGVjayBmb3Igc2NyZWVuJ3MKKwkgIGxpbWl0YXRpb25zIGluIHRoYXQgYXJlYSB0byBhbGxvdyB0aGUgbXVsdGktY2hhcmFjdGVyIHNoaWZ0LWluCisJICBhbmQgc2hpZnQtb3V0IHdoaWNoIHNlZW0gdG8gd29yay4KKwkrIGNoYW5nZSBHUE0gaW5pdGlhbGl6YXRpb24sIHVzaW5nIGRsIGxpYnJhcnkgdG8gbG9hZCBpdCBkeW5hbWljYWxseQorCSAgYXQgcnVudGltZSAoRGViaWFuICMxMTA1ODYpLgorCisyMDA0MTAwMgorCSsgY29ycmVjdCBsb2dpYyBmb3IgY29sb3IgcGFpciBpbiBzZXRjY2hhcigpIGFuZCBnZXRjY2hhcigpIChwYXRjaCBieQorCSAgTWFyY2luICdRcmN6YWsnIEtvd2FsY3p5aykuCisJKyBhZGQgdC9UIGNvbW1hbmRzIHRvIG5jdXJzZXMgYi9CIHRlc3RzIHRvIGFsbG93IGEgZGlmZmVyZW50IGNvbG9yIHRvCisJICBiZSB0ZXN0ZWQgZm9yIHRoZSBhdHRyc2V0IHBhcnQgb2YgdGhlIHRlc3QgdGhhbiBpcyB1c2VkIGluIHRoZQorCSAgYmFja2dyb3VuZCBjb2xvci4KKworMjAwNDA5MjUKKwkrIGZpeCB0byBtYWtlIHNldGNjaGFyKCkgdG8gd29yayB3aGVuIGl0cyB3Y2hhcl90KiBwYXJhbWV0ZXIgaXMKKwkgIHBvaW50aW5nIHRvIGEgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIG1vcmUgZGF0YSB0aGFuIGNhbiBiZSBjb252ZXJ0ZWQuCisJKyBtb2RpZnkgd2dldF93c3RyKCkgYW5kIGV4YW1wbGUgaW4gbmN1cnNlcy5jIHRvIHdvcmsgaWYgd2NoYXJfdCBhbmQKKwkgIHdpbnRfdCBhcmUgZGlmZmVyZW50IHNpemVzIChyZXBvcnQgYnkgTWFyY2luICdRcmN6YWsnIEtvd2FsY3p5aykuCisKKzIwMDQwOTE4CisJKyByZW1vdmUgY2hlY2sgaW4gd2dldF93Y2goKSBhZGRlZCB0byBmaXggYW4gaW5maW5pdGUgbG9vcCwgYXBwZWFycyB0bworCSAgaGF2ZSBiZWVuIHdvcmtpbmcgYXJvdW5kIGEgdHJhbnNpdG9yeSBnbGliYyBidWcsIGFuZCBpbnRlcmZlcmVzCisJICB3aXRoIG5vcm1hbCBvcGVyYXRpb24gKHJlcG9ydCBieSBNYXJjaW4gJ1FyY3phaycgS293YWxjenlrKS4KKwkrIGNvcnJlY3Qgd2FkZF93Y2goKSBhbmQgd2VjaG9fd2NoKCksIHdoaWNoIGRpZCBub3QgcGFzcyB0aGUgcmVuZGl0aW9uCisJICBpbmZvcm1hdGlvbiAocmVwb3J0IGJ5IE1hcmNpbiAnUXJjemFrJyBLb3dhbGN6eWspLgorCSsgZml4IGFjbG9jYWwubTQgc28gdGhhdCB0aGUgd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbiBvZiBuY3Vyc2VzIGdldHMKKwkgIGNvbXBpbGVkIGFzIGxpYm5jdXJzZXN3LjUuZHlsaWIsIGluc3RlYWQgb2YgbGlibmN1cnNlcy41dy5keWxpYgorCSAgKGFkYXB0ZWQgZnJvbSBwYXRjaCBieSBKYW1lcyBKIFJhbXNleSkuCisJKyBjaGFuZ2UgY29uZmlndXJlIHNjcmlwdCBmb3IgLS13aXRoLWNhcHMgb3B0aW9uIHRvIGluZGljYXRlIHRoYXQgaXQKKwkgIGlzIG5vIGxvbmdlciBleHBlcmltZW50YWwuCisJKyBjaGFuZ2UgY29uZmlndXJlIHNjcmlwdCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgLS1lbmFibGUtd2lkZWMgaGFzCisJICBub3QgYmVlbiAiZXhwZXJpbWVudGFsIiBzaW5jZSA1LjMgKHJlcG9ydCBieSBCcnVubyBMdXN0b3NhKS4KKworMjAwNDA5MTEKKwkrIGFkZCAnQicgdGVzdCB0byBuY3Vyc2VzLmMsIHRvIGV4ZXJjaXNlIHNvbWUgd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zLgorCisyMDA0MDgyOAorCSsgbW9kaWZ5IGluZm9jbXAgLWkgb3B0aW9uIHRvIG1hdGNoIDgtYml0IGNvbnRyb2xzIGFnYWluc3QgaXRzIHRhYmxlCisJICBlbnRyaWVzLCBlLmcuLCBzbyBpdCBjYW4gYW5hbHl6ZSB0aGUgeHRlcm0tOGJpdCBlbnRyeS4KKwkrIGFkZCBtb3JwaG9zIHRlcm1pbmZvIGVudHJ5LCBpbXByb3ZlIGFtaWdhLThiaXQgZW50cnkgKFBhdmVsIEZlZGluKS4KKwkrIGNvcnJlY3QgdHJhbnNsYXRpb24gb2YgIiUlIiBpbiB0ZXJtaW5mbyBmb3JtYXQgdG8gdGVybWNhcCwgZS5nLiwKKwkgIHVzaW5nICJ0aWMgLUMiIChSZWRoYXQgQnVnemlsbGEgIzEzMDkyMSkuCisJKyBtb2RpZmllZCBjb25maWd1cmUgc2NyaXB0IENGX1hPUEVOX1NPVVJDRSBtYWNybyB0byBlbnN1cmUgdGhhdCBpZgorCSAgaXQgZGVmaW5lcyBfUE9TSVhfQ19TT1VSQ0UsIHRoYXQgaXQgZGVmaW5lcyBpdCB0byBhIHNwZWNpZmljIHZhbHVlCisJICAoY29tcC5vcy5zdHJhdHVzIG5ld3Nncm91cCBjb21tZW50KS4KKworMjAwNDA4MjEKKwkrIGZpeGVzIHRvIGJ1aWxkIHdpdGggQWRhOTUgYmluZGluZyB3aXRoIGduYXQgMy40IChhbGwgd2FybmluZ3MgYXJlCisJICBmYXRhbCwgYW5kIGduYXQgZG9lcyBub3QgZm9sbG93IHRoZSBndWlkZWxpbmVzIGZvciBwcmFnbWFzKS4KKwkgIEhvd2V2ZXIgdGhhdCBkaWQgZmluZCBhIGNvZGluZyBlcnJvciBpbiBBc3N1bWVfRGVmYXVsdF9Db2xvcnMoKS4KKwkrIG1vZGlmeSBzZXZlcmFsIHRlcm1pbmZvIGVudHJpZXMgdG8gZW5zdXJlIHh0ZXJtIG1vdXNlIGFuZCBjdXJzb3IKKwkgIHZpc2liaWxpdHkgYXJlIHJlc2V0IGluIHJzMiBzdHJpbmc6ICBodXJkLCBwdXR0eSwgZ25vbWUsCisJICBrb25zb2xlLWJhc2UsIG1sdGVybSwgRXRlcm0sIHNjcmVlbiAoRGViaWFuICMyNjU3ODQsICM1NTYzNykuICBUaGUKKwkgIHh0ZXJtIGVudHJpZXMgYXJlIGxlZnQgYWxvbmUgLSBvbGQgb25lcyBmb3IgY29tcGF0aWJpbGl0eSwgYW5kIHRoZQorCSAgbmV3IG9uZXMgZG8gbm90IHJlcXVpcmUgdGhpcyBjaGFuZ2UuIC1URAorCisyMDA0MDgxNAorCSsgZmFrZSBhIFNJR1dJTkNIIGluIG5ld3Rlcm0oKSB0byBhY2NvbW1vZGF0ZSBidWdneSB0ZXJtaW5hbCBlbXVsYXRvcnMKKwkgIGFuZCB3aW5kb3cgbWFuYWdlcnMgKERlYmlhbiAjMjY1NjMxKS4KKwk+IHRlcm1pbmZvIHVwZGF0ZXMgLVRECisJKyByZW1vdmUgZGNoL2RjaDEgZnJvbSByeHZ0IGJlY2F1c2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5jb25zaXN0ZW50bHkKKwkgIHdpdGggdGhlIGNvbW1vbiB1c2FnZSBvZiBiY2UvZWNoCisJKyByZW1vdmUga2hvbWUgZnJvbSB2dDIyMCAodnQyMjAncyBoYXZlIG5vIGhvbWUga2V5KQorCSsgYWRkIHJ4dnQrcGNma2V5cworCisyMDA0MDgwNworCSsgbW9kaWZ5IHRlc3QvbmN1cnNlcy5jICdiJyB0ZXN0LCBhZGRpbmcgdi9WIHRvZ2dsZXMgdG8gY3ljbGUgdGhyb3VnaAorCSAgY29tYmluYXRpb25zIG9mIHZpZGVvIGF0dHJpYnV0ZXMgc28gdGhhdCBmb3IgaW5zdGFuY2UgYm9sZCBhbmQKKwkgIHVuZGVybGluZSBjYW4gYmUgdGVzdGVkLiAgVGhpcyBtYWRlIHRoZSBsZWdlbmQgdG9vIGNyb3dkZWQsIGFkZGVkCisJICBhIGhlbHAgd2luZG93IGFzIHdlbGwuCisJKyBtb2RpZnkgdGVzdC9uY3Vyc2VzLmMgJ2InIHRlc3QgdG8gY3ljbGUgdGhyb3VnaCBkZWZhdWx0IGNvbG9ycyBpZgorCSAgdGhlIC1kIG9wdGlvbiBpcyBzZXQuCisJKyB1cGRhdGUgcHV0dHkgdGVybWluZm8gZW50cnkgKFJvYmVydCBkZSBCYXRoKS4KKworMjAwNDA3MzEKKwkrIG1vZGlmeSB0ZXN0L2NhcmRmaWxlLmMgdG8gYWxsb3cgaXQgdG8gcmVhZCBtb3JlIGRhdGEgdGhhbiBjYW4gYmUKKwkgIGRpc3BsYXllZC4KKwkrIGNvcnJlY3QgbG9naWMgaW4gcmVzaXpldGVybS5jIHdoaWNoIGtlcHQgaXQgZnJvbSBwcm9jZXNzaW5nIGFsbAorCSAgbGV2ZWxzIG9mIHdpbmRvdyBoaWVyYXJjaHkgKHJlcG9ydHMgYnkgRm9sa2VydCB2YW4gSGV1c2RlbiwKKwkgIENocmlzIFNoYXJlKS4KKworMjAwNDA3MjQKKwkrIG1vZGlmeSAidGljIC1jdiIgdG8gaWdub3JlIGRlbGF5cyB3aGVuIGNvbXBhcmluZyBzdHJpbmdzLiAgQWxzbworCSAgbW9kaWZ5IGl0IHRvIGlnbm9yZSBhIGNhbmNlbGVkIHNnciBzdHJpbmcsIGUuZy4sIGZvciB0ZXJtaW5hbHMgd2hpY2gKKwkgIGNhbm5vdCBwcm9wZXJseSBjb21iaW5lIGF0dHJpYnV0ZXMgaW4gb25lIGNvbnRyb2wgc2VxdWVuY2UuCisJKyBjb3JyZWN0aW9ucyBmb3IgZ25vbWUgYW5kIGtvbnNvbGUgZW50cmllcyAoUmVkaGF0IEJ1Z3ppbGxhICMxMjI4MTUsCisJICBwYXRjaCBieSBIYW5zIGRlIEdvZWRlKQorCT4gdGVybWluZm8gdXBkYXRlcyAtVEQKKwkrIG1ha2UgbmNzYS1tIHJtYWNzL3NtYWNzIGNvbnNpc3RlbnQgd2l0aCBzZ3IKKwkrIGFkZCBzZ3IsIHJjL3NjIGFuZCBlY2ggdG8gc3lzY29ucyBlbnRyaWVzCisJKyBhZGQgZnVuY3Rpb24ta2V5cyB0byBkZWNhbnNpCisJKyBhZGQgc2dyIHRvIG10ZXJtLWFuc2kKKwkrIGFkZCBzZ3IsIGNpdmlzLCBjbm9ybSB0byBlbXUKKwkrIGNvcnJlY3Qvc2ltcGxpZnkgY3VwIGluIGFkZHJpbmZvCisKKzIwMDQwNzE3CisJPiB0ZXJtaW5mbyB1cGRhdGVzIC1URAorCSsgYWRkIHh0ZXJtLXBjLWZrZXlzCisJKyByZXZpZXcvdXBkYXRlIGdub21lIGFuZCBnbm9tZS1yaDkwIGVudHJpZXMgKHByb21wdGVkIGJ5IFJlZGhhdAorCSAgQnVnemlsbGEgIzEyMjgxNSkuCisJKyByZXZpZXcvdXBkYXRlIGtvbnNvbGUgZW50cmllcworCSsgYWRkIHNnciwgY29ycmVjdCBzZ3IwIGZvciBrdGVybSBhbmQgbWx0ZXJtCisJKyBjb3JyZWN0IHRzbCBzdHJpbmcgaW4ga3Rlcm0KKworMjAwNDA3MTEKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aG91dC14dGVybS1uZXcKKworMjAwNDA3MTAKKwkrIGFkZCBjaGVjayBpbiB3Z2V0X3djaCgpIGZvciBwcmludGFibGUgYnl0ZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgYQorCSAgbXVsdGlieXRlIGNoYXJhY3Rlci4KKwkrIG1vZGlmeSB3YWRkX3djaG5zdHIoKSB0byByZW5kZXIgdGV4dCB1c2luZyB3aW5kb3cncyBiYWNrZ3JvdW5kCisJICBhdHRyaWJ1dGVzLgorCSsgaW1wcm92ZSB0aWMncyBjaGVjayB0byBjb21wYXJlIHNnciBhbmQgc2dyMC4KKwkrIGZpeCBjKysgZGlyZWN0b3J5J3MgLmNjLmkgcnVsZS4KKwkrIG1vZGlmeSBsb2dpYyBpbiB0Z2V0ZW50KCkgd2hpY2ggYWRqdXN0cyB0aGUgdGVybWNhcCAibWUiIHN0cmluZworCSAgdG8gd29yayB3aXRoIElTTy0yMDIyIHN0cmluZyB1c2VkIGluIHh0ZXJtLW5ldyAoY2Y6IDIwMDEwOTA4KS4KKwkrIG1vZGlmeSB0aWMncyBjaGVjayBmb3IgY29uZmxpY3RpbmcgZnVuY3Rpb24ga2V5cyB0byBvbWl0IHRoYXQgaWYKKwkgIGNvbnZlcnRpbmcgdGVybWNhcCB0byB0ZXJtY2FwIGZvcm1hdC4KKwkrIGFkZCAtVSBvcHRpb24gdG8gdGljIGFuZCBpbmZvY21wLgorCSsgYWRkIHJtYW0vc21hbSB0byBsaW51eCB0ZXJtaW5mbyBlbnRyeSAoVHJldm9yIFZhbiBCcmVtZW4pCisJPiB0ZXJtaW5mbyB1cGRhdGVzIC1URAorCSsgbWlub3IgZml4ZXMgZm9yIGVtdQorCSsgYWRkIGVtdS0yMjAKKwkrIGNoYW5nZSB3eXNlIGFjc2Mgc3RyaW5ncyB0byB1c2UgJ2knIG1hcCByYXRoZXIgdGhhbiAnSScKKwkrIGZpeGVzIGZvciBhdmF0YXIwCisJKyBmaXhlcyBmb3IgdnAzYSsKKworMjAwNDA3MDMKKwkrIHVzZSB0aWMgLXggdG8gaW5zdGFsbCB0ZXJtaW5mbyBkYXRhYmFzZSAtVEQKKwkrIGFkZCAteCB0byBpbmZvY21wJ3MgdXNhZ2UgbWVzc2FnZS4KKwkrIGNvcnJlY3QgZmllbGQgdXNlZCBmb3IgY29tcGFyaW5nIE9fUk9XTUFKT1IgaW4gc2V0X21lbnVfZm9ybWF0KCkKKwkgIChyZXBvcnQvcGF0Y2ggYnkgVG9ueSBMaSkuCisJKyBmaXggYSBtaXNzaW5nIG51bCBjaGVjayBpbiBzZXRfZmllbGRfYnVmZmVyKCkgZnJvbSAyMDA0MDUwOCBjaGFuZ2VzLgorCT4gdGVybWluZm8gdXBkYXRlcyAtVEQKKwkgICsgbWFrZSB4dGVybS14Zjg2LXY0MyBkZXJpdmVkIGZyb20geHRlcm0teGY4Ni12NDAgcmF0aGVyIHRoYW4KKwkgICAgeHRlcm0tYmFzaWMgLVRECisJICArIGFsaWduIHdpdGggeHRlcm0gcGF0Y2ggIzE5MidzIHVzZSBvZiB4dGVybS1uZXcgLVRECisJICArIHVwZGF0ZSB4dGVybS1uZXcgYW5kIHh0ZXJtLThiaXQgZm9yIGN2dmlzL2Nub3JtIHN0cmluZ3MgLVRECisJICArIG1ha2UgeHRlcm0tbmV3IHRoZSBkZWZhdWx0ICJ4dGVybSIgZW50cnkgLVRECisKKzIwMDQwNjI2CisJKyBjb3JyZWN0IEJVSUxEX0NQUEZMQUdTIHN1YnN0aXR1dGlvbiBpbiBuY3Vyc2VzL01ha2VmaWxlLmluLCB0byBhbGxvdworCSAgY3Jvc3MtY29tcGlsaW5nIGZyb20gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgdHJlZSAocmVwb3J0L3BhdGNoIGJ5CisJICBEYW4gRW5nZWwpLgorCSsgbW9kaWZ5IGlzX3Rlcm1fcmVzaXplZCgpIHRvIGVuc3VyZSB0aGF0IHdpbmRvdyBzaXplcyBhcmUgbm9uemVybywKKwkgIGFzIGRvY3VtZW50ZWQgaW4gdGhlIG1hbnBhZ2UgKHJlcG9ydCBieSBJYW4gQ29sbGllcikuCisJKyBtb2RpZnkgQ0ZfWE9QRU5fU09VUkNFIGNvbmZpZ3VyZSBtYWNybyB0byBtYWtlIEh1cmQgcG9ydCBidWlsZAorCSAgKERlYmlhbiAjMjQ5MjE0LCByZXBvcnQvcGF0Y2ggYnkgSmVmZiBCYWlsZXkpLgorCSsgY29uZmlndXJlLXNjcmlwdCBtb2RzIGZyb20geHRlcm0sIGUuZy4sIHVwZGF0ZXMgdG8gQ0ZfQUREX0NGTEFHUworCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YgorCT4gdGVybWluZm8gdXBkYXRlcyAtVEQKKwkgICsgYWRkIG1sdGVybQorCSAgKyBhZGQgeHRlcm0teGY4Ni12NDQKKwkgICsgbW9kaWZ5IHh0ZXJtLW5ldyBha2EgeHRlcm0teGZyZWU4NiB0byBhY2NvbW1vZGF0ZSBsdWl0LCB3aGljaAorCSAgICByZWxpZXMgb24gRzEgYmVpbmcgdXNlZCB2aWEgYW4gSVNPLTIwMjIgZXNjYXBlIHNlcXVlbmNlIChyZXBvcnQgYnkKKwkgICAgSnVsaXVzeiBDaHJvYm9jemVrKQorCSAgKyBhZGQgJ2h1cmQnIGVudHJ5CisKKzIwMDQwNjE5CisJKyByZWNvbnNpZGVyZWQgd2luc25zdHIoKSwgZGVjaWRlZCBhZnRlciBjb21wYXJpbmcgb3RoZXIKKwkgIGltcGxlbWVudGF0aW9ucyB0aGF0IHdyYXBwaW5nIGlzIGFuIFgvT3BlbiBkb2N1bWVudGF0aW9uIGVycm9yLgorCSsgbW9kaWZ5IHRlc3QvaW5zZXJ0cy5jIHRvIHRlc3QgYWxsIGZsYXZvcnMgb2YgaW5zc3RyKCkuCisKKzIwMDQwNjA1CisJKyBhZGQgc2V0bG9jYWxlKCkgY2FsbHMgdG8gYSBmZXcgdGVzdCBwcm9ncmFtcyB3aGljaCBtYXkgcmVxdWlyZSBpdDoKKwkgIGRlbW9fZm9ybXMuYywgZmlsdGVyLmMsIGluc193aWRlLmMsIGluc2VydHMuYworCSsgY29ycmVjdCBhIGZldyBtaXNzcGVsbGVkIGZ1bmN0aW9uIG5hbWVzIGluIG5jdXJzZXMtaW50cm8uaHRtbCAocmVwb3J0CisJICBieSBUb255IExpKS4KKwkrIGNvcnJlY3QgaW50ZXJuYWwgbmFtZSBvZiBrZXlfZGVmaW5lZCgpIG1hbnBhZ2UsIHdoaWNoIGNvbmZsaWN0ZWQgd2l0aAorCSAgZGVmaW5lX2tleSgpLgorCisyMDA0MDUyOQorCSsgY29ycmVjdCBzaXplIG9mIGludGVybmFsIHBhZCB1c2VkIGZvciBob2xkaW5nIHdpZGUtY2hhcmFjdGVyCisJICBmaWVsZF9idWZmZXIoKSByZXN1bHRzLgorCSsgbW9kaWZ5IGRhdGFfYWhlYWQoKSB0byB3b3JrIHdpdGggd2lkZS1jaGFyYWN0ZXJzLgorCisyMDA0MDUyMgorCSsgaW1wcm92ZSBkZXNjcmlwdGlvbiBvZiB0ZXJtaW5mbyBpZi10aGVuLWVsc2UgZXhwcmVzc2lvbnMgKHN1Z2dlc3RlZAorCSAgYnkgQXJuZSBUaG9tYXNzZW4pLgorCSsgaW1wcm92ZSB0ZXN0L25jdXJzZXMuYyAnZCcgdGVzdCwgYWxsb3cgaXQgdG8gdXNlIGV4dGVybmFsIGZpbGUgZm9yCisJICBpbml0aWFsIHBhbGV0dGUgKGFkZGVkIHh0ZXJtLTE2Y29sb3IuZGF0IGFuZCBsaW51eC1jb2xvci5kYXQpLCBhbmQKKwkgIHJlc2V0IGNvbG9ycyB0byB0aGUgaW5pdGlhbCBwYWxldHRlIHdoZW4gc3RhcnRpbmcvZW5kaW5nIHRoZSB0ZXN0LgorCSsgY2hhbmdlIGxpbWl0LWNoZWNrIGluIGluaXRfY29sb3IoKSB0byBhbGxvdyByL2cvYiBjb21wb25lbnQgdG8KKwkgIHJlYWNoIDEwMDAgKGNmOiAyMDAyMDkyOCkuCisKKzIwMDQwNTE2CisJKyBtb2RpZnkgZm9ybSBsaWJyYXJ5IHRvIHVzZSBjY2hhcl90J3MgcmF0aGVyIHRoYW4gY2hhcidzIGluIHRoZQorCSAgd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbiBmb3Igc3RvcmluZyBkYXRhIGZvciBmaWVsZCBidWZmZXJzLgorCSsgY29ycmVjdCBsb2dpYyBvZiB3aW5fd2NobnN0cigpLCB3aGljaCBkaWQgbm90IHdvcmsgZm9yIG1vcmUgdGhhbgorCSAgb25lIGNlbGwuCisKKzIwMDQwNTA4CisJKyByZXBsYWNlIG1lbXNldC9tZW1jcHkgdXNhZ2UgaW4gZm9ybSBsaWJyYXJ5IHdpdGggZm9yLWxvb3BzIHRvCisJICBzaW1wbGlmeSBjaGFuZ2luZyB0aGUgZGF0YXR5cGUgb2YgRklFTEQuYnVmLCBwYXJ0IG9mIHdpZGUtY2hhcmFjdGVyCisJICBjaGFuZ2VzLgorCSsgZml4IHNvbWUgaW5jb25zaXN0ZW50IHVzZSBvZiAjaWYvI2lmZGVmIChyZXBvcnQgYnkgQWxhaW4gR3VpYmVydCkuCisKKzIwMDQwNTAxCisJKyBtb2RpZnkgbWVudSBsaWJyYXJ5IHRvIGFjY291bnQgZm9yIGFjdHVhbCBudW1iZXIgb2YgY29sdW1ucyB1c2VkIGJ5CisJICBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN0cmluZ3MsIGluIHRoZSB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uCisJICAoYWRhcHRlZCBmcm9tIHBhdGNoIGJ5IFBoaWxpcHAgVG9tc2ljaCkuCisJKyBhZGQgIi14IiBvcHRpb24gdG8gaW5mb2NtcCBsaWtlIHRpYydzICIteCIsIGZvciB1c2UgaW4gIi1GIgorCSAgY29tcGFyaXNvbnMuICBUaGlzIG1vZGlmaWVzIGluZm9jbXAgdG8gb25seSByZXBvcnQgZXh0ZW5kZWQKKwkgIGNhcGFiaWxpdGllcyBpZiB0aGUgLXggb3B0aW9uIGlzIGdpdmVuLCBtYWtpbmcgdGhpcyBtb3JlIGNvbnNpc3RlbnQKKwkgIHdpdGggdGljLiAgU29tZSBzY3JpcHRzIG1heSBicmVhaywgc2luY2UgaW5mb2NtcCBwcmV2aW91cyBnYXZlIHRoaXMKKwkgIGluZm9ybWF0aW9uIHdpdGhvdXQgYW4gb3B0aW9uLgorCSsgbW9kaWZ5IHRlcm1jYXAtcGFyc2luZyB0byByZXRhaW4gMi1jaGFyYWN0ZXIgYWxpYXNlcyBhdCB0aGUgYmVnaW5uaW5nCisJICBvZiBhbiBlbnRyeSBpZiB0aGUgIi14IiBvcHRpb24gaXMgdXNlZCBpbiB0aWMuCisKKzIwMDQwNDI0CisJKyBtaW5vciBjb21waWxlci13YXJuaW5nIGFuZCB0ZXN0LXByb2dyYW0gZml4ZXMuCisKKzIwMDQwNDE3CisJKyBtb2RpZnkgdGljJ3MgbWlzc2luZy1zZ3Igd2FybmluZyB0byBhcHBseSB0byB0ZXJtaW5mbyBvbmx5LgorCSsgZnJlZSBzb21lIG1lbW9yeSBsZWFrcyBpbiB0aWMuCisJKyByZW1vdmUgY2hlY2sgaW4gcG9zdF9tZW51KCkgdGhhdCBwcmV2ZW50ZWQgbWVudXMgZnJvbSBleHRlbmRpbmcKKwkgIGJleW9uZCB0aGUgc2NyZWVuIChyZXF1ZXN0IGJ5IE1heCBKLiBXZXJuZXIpLgorCSsgcmVtb3ZlIGNoZWNrIGluIG5ld3dpbigpIHRoYXQgcHJldmVudHMgYWxsb2NhdGluZyB3aW5kb3dzCisJICB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIHNjcmVlbi4gIFNvbGFyaXMgY3Vyc2VzIGRvZXMgdGhpcy4KKwkrIGFkZCBpZmRlZiBpbiB0ZXN0L2NvbG9yX3NldC5jIHRvIGFsbG93IGl0IHRvIGNvbXBpbGUgd2l0aCBvbGRlcgorCSAgY3Vyc2VzLgorCSsgYWRkIG5hcG1zKCkgY2FsbHMgdG8gdGVzdC9kb3RzLmMgdG8gbWFrZSBpdCBub3QgYmUgYSBDUFUgaG9nLgorCisyMDA0MDQwMworCSsgbW9kaWZ5IHVuY3RybCgpIHRvIHJldHVybiBudWxsIGlmIGl0cyBwYXJhbWV0ZXIgZG9lcyBub3QgY29ycmVzcG9uZAorCSAgdG8gYW4gdW5zaWduZWQgY2hhci4KKwkrIGFkZCBzb21lIGxpbWl0LWNoZWNrcyB0byBndWFyZCBpc3ByaW50KCksIGV0Yy4sIGZyb20gYmVpbmcgdXNlZCBvbgorCSAgdmFsdWVzIHRoYXQgZG8gbm90IGZpdCBpbnRvIGFuIHVuc2lnbmVkIGNoYXIgKHJlcG9ydCBieSBTYW1pIEZhcmluKS4KKworMjAwNDAzMjgKKwkrIGZpeCBhIHR5cG8gaW4gdGhlIF9uY19nZXRfbG9jYWxlKCkgY2hhbmdlLgorCisyMDA0MDMyNworCSsgbW9kaWZ5IF9uY19nZXRfbG9jYWxlKCkgdG8gdXNlIHNldGxvY2FsZSgpIHRvIHF1ZXJ5IHRoZSBwcm9ncmFtJ3MKKwkgIGN1cnJlbnQgbG9jYWxlIHJhdGhlciB0aGFuIHVzaW5nIGdldGVudigpLiAgVGhpcyBmaXhlcyBhIGNhc2UgaW4gdGluCisJICB3aGljaCByZWxpZXMgb24gbGVnYWN5IHRyZWF0bWVudCBvZiA4LWJpdCBjaGFyYWN0ZXJzIHdoZW4gdGhlIGxvY2FsZQorCSAgaXMgbm90IGluaXRpYWxpemVkIChyZXBvcnRlZCBieSBVcnMgSmFuc2VuKS4KKwkrIGFkZCBzZ3Igc3RyaW5nIHRvIHNjcmVlbidzIGFuZCByeHZ0J3MgdGVybWluZm8gZW50cmllcyAtVEQuCisJKyBhZGQgYSBjaGVjayBpbiB0aWMgZm9yIHRlcm1pbmZvIGVudHJpZXMgaGF2aW5nIGFuIHNncjAgYnV0IG5vIHNncgorCSAgc3RyaW5nLiAgVGhpcyBjb25mdXNlcyBUcnU2NCBhbmQgSFBVWCBjdXJzZXMgd2hlbiBjb21iaW5lZCB3aXRoCisJICBjb2xvciwgZS5nLiwgbWFraW5nIHRoZW0gbGVhdmUgbGluZS1kcmF3aW5nIGNoYXJhY3RlcnMgaW4gb2RkIHBsYWNlcy4KKwkrIGNvcnJlY3QgY2FzdHMgdXNlZCBpbiBBQlNFTlRfQk9PTEVBTiwgQ0FOQ0VMTEVEX0JPT0xFQU4sIG1hdGNoZXMgdGhlCisJICBvcmlnaW5hbCBkZWZpbml0aW9ucyB1c2VkIGluIERlYmlhbiBwYWNrYWdlIHRvIGZpeCBQb3dlclBDIGJ1ZyBiZWZvcmUKKwkgIDIwMDMwODAyIChEZWJpYW4gIzIzNzYyOSkuCisKKzIwMDQwMzIwCisJKyBtb2RpZnkgUHV0QXR0ckNoYXIoKSBhbmQgUFVUQygpIG1hY3JvIHRvIGltcHJvdmUgdXNlIG9mCisJICBBX0FMVENIQVJTRVQgYXR0cmlidXRlIHRvIHByZXZlbnQgbGluZS1kcmF3aW5nIGNoYXJhY3RlcnMgZnJvbQorCSAgYmVpbmcgbG9zdCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBsb2NhbGUgd291bGQgb3RoZXJ3aXNlIHRyZWF0IHRoZQorCSAgcmF3IGRhdGEgYXMgbm9ucHJpbnRhYmxlIChEZWJpYW4gIzIyNzg3OSkuCisKKzIwMDQwMzEzCisJKyBmaXggYSByZWRlZmluaXRpb24gb2YgQ1RSTCgpIG1hY3JvIGluIHRlc3Qvdmlldy5jIGZvciBBSVggNS4yIChyZXBvcnQKKwkgIGJ5IEppbSBJZGxlKS4KKwkrIHJlbW92ZSAiLlBQIiBhZnRlciAiLlNIIE5BTUUiIGluIGEgZmV3IG1hbnBhZ2VzOyB0aGlzIGNvbmZ1c2VzCisJICBzb21lIGFwcm9wb3Mgc2NyaXB0IChEZWJpYW4gIzIzNzgzMSkuCisKKzIwMDQwMzA2CisJKyBtb2RpZnkgbmN1cnNlcy5jICdyJyB0ZXN0IHNvIGVkaXRpbmcgY29tbWFuZHMsIGxpa2UgaW5zZXJ0ZWQgdGV4dCwKKwkgIHNldCB0aGUgZmllbGQgYmFja2dyb3VuZCwgYW5kIHRoZSBzdGF0ZSBvZiBpbnNlcnQvb3ZlcmxheSBlZGl0aW5nCisJICBtb2RlIGlzIHNob3duIGluIHRoYXQgdGVzdC4KKwkrIGNoYW5nZSBzeW50YXggb2YgZHVtbXkgdGFyZ2V0cyBpbiBBZGE5NSBtYWtlZmlsZXMgdG8gd29yayB3aXRoIHBtYWtlLgorCSsgY29ycmVjdCBsb2dpYyBpbiB0ZXN0L25jdXJzZXMuYyAnYicgZm9yIG5vbmNvbG9yIHRlcm1pbmFscyB3aGljaAorCSAgZGlkIG5vdCByZWNvZ25pemUgYSBxdWl0LWNvbW1hbmQgKGNmOiAyMDAzMDQxOSkuCisKKzIwMDQwMjI4CisJKyBtb2RpZnkgX25jX2luc2VydF9jaCgpIHRvIGFsbG93IGZvciBpdHMgaW5wdXQgdG8gYmUgcGFydCBvZiBhCisJICBtdWx0aWJ5dGUgc3RyaW5nLgorCSsgc3BsaXQgb3V0IGxpYl9pbnNuc3RyLmMsIHRvIHByZXBhcmUgdG8gcmV3cml0ZSBpdC4gIFgvT3BlbiBzdGF0ZXMKKwkgIHRoYXQgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB3cmFwcGluZywgdW5saWtlIGFsbCBvZiB0aGUgb3RoZXIKKwkgIGluc2VydC1mdW5jdGlvbnMuICBDdXJyZW50bHkgaXQgZG9lcyBub3Qgd3JhcC4KKwkrIGNoZWNrIGZvciBubF9sYW5naW5mbyhDT0RFU0VUKSwgdXNlIGl0IGlmIGF2YWlsYWJsZSAocmVwb3J0IGJ5CisJICBTdGFuaXNsYXYgSWV2bGV2KS4KKwkrIHNwbGl0LW91dCBDRl9CVUlMRF9DQyBtYWNybywgYWN0dWFsbHkgZGlkIHRoaXMgZm9yIGx5bnggZmlyc3QuCisJKyBmaXhlcyBmb3IgY29uZmlndXJlIHNjcmlwdCBDRl9XSVRIX0RCTUFMTE9DIGFuZCBDRl9XSVRIX0RNQUxMT0MsCisJICB3aGljaCBoYXBwZW5lZCB0byB3b3JrIHdpdGggYmFzaCwgYnV0IG5vdCB3aXRoIEJvdXJuZSBzaGVsbCAocmVwb3J0CisJICBieSBNYXJjbyBkJ0l0cmkgdmlhIHRpbi1kZXYpLgorCisyMDA0MDIyMQorCSsgc29tZSBjaGFuZ2VzIHRvIGFkYXB0IHRoZSBmb3JtIGxpYnJhcnkgdG8gd2lkZSBjaGFyYWN0ZXJzLCBpbmNvbXBsZXRlCisJICAocmVxdWVzdCBieSBNaWtlIEF1YnVyeSkuCisJKyBhZGQgc3ltYm9sIHRvIGN1cnNlcy5oIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN1cHByZXNzIGluY2x1ZGUgb2YKKwkgIHN0ZGJvb2wuaCwgZS5nLiwKKwkgIAkjZGVmaW5lIE5DVVJTRVNfRU5BQkxFX1NUREJPT0xfSCAwCisJCSNpbmNsdWRlIDxjdXJzZXMuaD4KKwkgIChkaXNjdXNzaW9uIG9uIFhGcmVlODYgbWFpbGluZyBsaXN0KS4KKworMjAwNDAyMTQKKwkrIG1vZGlmeSBjb25maWd1cmUgLS13aXRoLXRlcm1saWIgb3B0aW9uIHRvIGFjY2VwdCBhIHZhbHVlIHdoaWNoIHNldHMKKwkgIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5mbyBsaWJyYXJ5LiAgVGhpcyB3b3VsZCBhbGxvdyBhIHBhY2thZ2VyIHRvCisJICBidWlsZCBsaWJ0aW5mb3cuc28gcmVuYW1lZCB0byBjb2luY2lkZSB3aXRoIGxpYnRpbmZvLnNvIChkaXNjdXNzaW9uCisJICB3aXRoIFN0YW5pc2xhdiBJZXZsZXYpLgorCSsgaW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIC0td2l0aC1pbnN0YWxsLXByZWZpeCwgLS1wcmVmaXggYW5kCisJICAkKERFU1RESVIpIGluIElOU1RBTEwgKHByb21wdGVkIGJ5IGRpc2N1c3Npb24gd2l0aCBQYXVsIExldykuCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGlmIHRoZSBjb21waWxlciBjYW4gdXNlIC1jIC1vIG9wdGlvbnMgdG8gcmVuYW1lCisJICBpdHMgb3V0cHV0IGZpbGUsIHVzZSB0aGF0IHRvIG9taXQgdGhlICdjZCcgY29tbWFuZCB3aGljaCB3YXMgdXNlZCB0bworCSAgZW5zdXJlIG9iamVjdCBmaWxlcyBhcmUgY3JlYXRlZCBpbiBhIHNlcGFyYXRlIHN0YWdpbmcgZGlyZWN0b3J5CisJICAocHJvbXB0ZWQgYnkgY29tbWVudHMgYnkgSm9obm55IFdlemVsLCBNYXJ0aW4gTW9rcmVqcykuCisKKzIwMDQwMjA4IDUuNCByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKwkrIHVwZGF0ZSBUTy1ETy4KKworMjAwNDAyMDcgcHJlLXJlbGVhc2UKKwkrIG1pbm9yIGZpeGVzIHRvIF9uY190cGFybV9hbmFseXplKCksIGkuZS4sIGRvIG5vdCBjb3VudCAlaSBhcyBhIHBhcmFtLAorCSAgYW5kIGRvIG5vdCBjb3VudCAlZCBpZiBpdCBmb2xsb3dzIGEgJXAuCisJKyBjb3JyZWN0IGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiBoYW5kbGluZyBvZiBjb2RlcyBpbiB0aGUgMTI4LTI1NQorCSAgcmFuZ2UsIGUuZy4sIGFzIGlsbHVzdHJhdGVkIGJ5IHRlc3QvbmN1cnNlcy5jIGYvRiB0ZXN0cy4gIEluIFBPU0lYCisJICBsb2NhbGUsIHRoZSBsYXR0ZXIgZGlkIG5vdCBzaG93IHByaW50YWJsZSByZXN1bHRzLCB3aGlsZSB0aGUgZm9ybWVyCisJICBkaWQuCisJKyBtb2RpZnkgTUtsaWJfZ2VuLnNoIHRvIGNvbXBlbnNhdGUgZm9yIGJyb2tlbiBDIHByZXByb2Nlc3NvciBvbiBNYWMKKwkgIE9TIFgsIHdoaWNoIGFsdGVycyAiJSUiIHRvICIlICUgIiAocmVwb3J0IGJ5IFJvYmVydCBTaW1tcywgZml4CisJICB2ZXJpZmllZCBieSBTY290dCBDb3JzY2FkZGVuKS4KKworMjAwNDAxMzEgcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSBTQ1JFRU4gc3RydWN0IHRvIGFsaWduIGl0IGJldHdlZW4gbm9ybWFsL3dpZGUgY3Vyc2VzIGZsYXZvcnMKKwkgIHRvIHNpbXBsaWZ5IGZ1dHVyZSBjaGFuZ2VzIHRvIGJ1aWxkIGEgc2luZ2xlIHZlcnNpb24gb2YgbGlidGluZm8KKwkgIChwYXRjaCBieSBTdGFuaXNsYXYgSWV2bGV2KS4KKwkrIGRvY3VtZW50IGhhbmRsaW5nIG9mIGNhcnJpYWdlIHJldHVybiBieSBhZGRjaCgpIGluIG1hbnBhZ2UuCisJKyBkb2N1bWVudCBzcGVjaWFsIGZlYXR1cmVzIG9mIHVuY3RybCgpIGluIG1hbnBhZ2UuCisJKyBkb2N1bWVudGVkIGludGVyZmFjZSBjaGFuZ2VzIGluIElOU1RBTEwuCisJKyBjb3JyZWN0ZWQgY29udHJvbC1jaGFyIHRlc3QgaW4gbGliX2FkZGNoLmMgdG8gYWNjb3VudCBmb3IgbG9jYWxlCisJICAoRGViaWFuICMyMzAzMzUsIGNmOiA5NzEyMDYpLgorCSsgdXBkYXRlZCB0ZXN0L2NvbmZpZ3VyZS5pbiB0byB1c2UgQUNfRVhFRVhUIGFuZCBBQ19PQkpFWFQuCisJKyBmaXhlcyB0byBjb21waWxlIEFkYTk1IGJpbmRpbmcgd2l0aCBEZWJpYW4gZ25hdCAzLjE1cC00IHBhY2thZ2UuCisJKyBtaW5vciBjb25maWd1cmUtc2NyaXB0IGZpeGVzIGZvciBvbGRlciBwb3J0cywgZS5nLiwgQmVPUyBSNC41LgorCisyMDA0MDEyNSBwcmUtcmVsZWFzZQorCSsgYW1lbmQgY2hhbmdlIHRvIFB1dEF0dHJDaGFyKCkgZnJvbSAyMDAzMDYxNCB3aGljaCBjb21wdXRlZCB0aGUgbnVtYmVyCisJICBvZiBjZWxscyBmb3IgYSBwb3NzaWJseSBtdWx0aS1jZWxsIGNoYXJhY3Rlci4gIFRoZSAyMDAzMDYxNCBjaGFuZ2UKKwkgIGZvcmNlZCB0aGUgY2VsbCB0byBhIGJsYW5rIGlmIHRoZSByZXN1bHQgZnJvbSB3Y3dpZHRoKCkgd2FzIG5vdAorCSAgZ3JlYXRlciB0aGFuIHplcm8uICBIb3dldmVyLCB3Y3dpZHRoKCkgY2FsbGVkIGZvciBwYXJhbWV0ZXJzIGluIHRoZQorCSAgcmFuZ2UgMTI4LTI1NSBjYW4gZ2l2ZSB0aGlzIHJldHVybiB2YWx1ZS4gIFRoZSBsb2dpYyBub3cgc2ltcGx5CisJICBlbnN1cmVzIHRoYXQgdGhlIG51bWJlciBvZiBjZWxscyBpcyBncmVhdGVyIHRoYW4gemVybyB3aXRob3V0CisJICBtb2RpZnlpbmcgdGhlIGRpc3BsYXllZCB2YWx1ZS4KKworMjAwNDAxMjQgcHJlLXJlbGVhc2UKKwkrIGxvb2tlZCBnb29kIGZvciA1LjQgcmVsZWFzZSBmb3IgdXBsb2FkIHRvIGZ0cC5nbnUub3JnIChidXQgc2VlIGFib3ZlKQorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2sgZm9yIHJhbmxpYiB0byB1c2UgQUNfQ0hFQ0tfVE9PTCwgc2luY2UKKwkgIHRoYXQgd29ya3MgYmV0dGVyIGZvciBjcm9zcy1jb21waWxpbmcuCisKKzIwMDQwMTE3IHByZS1yZWxlYXNlCisJKyBtb2RpZnkgbGliX2dldF93Y2guYyB0byBwcmVmZXIgbWJsZW4vbWJ0b3djIG92ZXIgbWJybGVuL21icnRvd2MgdG8KKwkgIHdvcmsgYXJvdW5kIGNvcmUgZHVtcCBpbiBTb2xhcmlzIDgncyBsb2NhbGUgc3VwcG9ydCwgZS5nLiwgZm9yCisJICB6aF9DTi5HQjE4MDMwIChyZXBvcnQgYnkgU2FyYXZhbmFuIEJlbGxhbikuCisJKyBhZGQgaW5jbHVkZXMgZm9yIDxzdGRhcmcuaD4gYW5kIDxzdGRpby5oPiBpbiBjb25maWd1cmUgc2NyaXB0IG1hY3JvCisJICB0byBtYWtlIDx3Y2hhci5oPiBjaGVjayB3b3JrIHdpdGggVHJ1NjQgNC4wZC4KKwkrIGFkZCB0ZXJtaW5mbyBlbnRyeSBmb3IgVS9XaW4gLVRECisJKyBhZGQgdGVybWluZm8gZW50cmllcyBmb3IgU0ZVIGFrYSBJbnRlcml4IGFrYSBPcGVuTlQgKEZlZGVyaWNvCisJICBCaWFuY2hpKS4KKwkrIG1vZGlmeSB0cHV0J3MgZXJyb3IgbWVzc2FnZXMgdG8gcHJlZml4IHRoZW0gd2l0aCB0aGUgcHJvZ3JhbSBuYW1lCisJICAocmVwb3J0IGJ5IFZpbmNlbnQgTGVmZXZyZSwgcGF0Y2ggYnkgRGFuaWVsIEphY29ib3dpdHogKHNlZSBEZWJpYW4KKwkgICMyMjc1ODYpKS4KKwkrIGNvcnJlY3QgYSBwbGFjZSBpbiB0YWNrIHdoZXJlIGV4aXRfc3RhbmRvdXRfbW9kZSB3YXMgdXNlZCBpbnN0ZWFkIG9mCisJICBleGl0X2F0dHJpYnV0ZV9tb2RlIChwYXRjaCBieSBKb2NoZW4gVm9zcyAoc2VlIERlYmlhbiAjMjI0NDQzKSkuCisJKyBtb2RpZnkgYysrL2N1cnNlc2YuaCB0byB1c2UgY29uc3QgaW4gdGhlIEVudW1lcmF0aW9uX0ZpZWxkIG1ldGhvZC4KKwkrIHJlbW92ZSBhbiBhbWJpZ3VvdXMgKGFjdHVhbGx5IHJlZHVuZGFudCkgbWV0aG9kIGZyb20gYysrL2N1cnNlc2YuaAorCSsgbWFrZSAkSE9NRS8udGVybWluZm8gdXBkYXRlIG9wdGlvbmFsIChzdWdnZXN0ZWQgYnkgU3RhbmlzbGF2IElldmxldikuCisJKyBpbXByb3ZlIHNlZCBzY3JpcHQgd2hpY2ggZXh0cmFjdHMgbGlidG9vbCdzIHZlcnNpb24gaW4gdGhlCisJICBDRl9XSVRIX0xJQlRPT0wgbWFjcm8uCisJKyBhZGQgaWZkZWYnZCBjYWxsIHRvIEFDX1BST0dfTElCVE9PTCB0byBDRl9XSVRIX0xJQlRPT0wgbWFjcm8gKHRvCisJICBzaW1wbGlmeSBsb2NhbCBwYXRjaCBmb3IgQWxiZXJ0IENoaW4tQS1Zb3VuZykuLgorCSsgYWRkICQoQ1hYRkxBR1MpIHRvIGxpbmsgY29tbWFuZCBpbiBjKysvTWFrZWZpbGUuaW4gKGFkYXB0ZWQgZnJvbQorCSAgcGF0Y2ggYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuLgorCSsgZml4IGEgbWlzc2luZyBzdWJzdGl0dXRpb24gaW4gY29uZmlndXJlLmluIGZvciAiJHRhcmdldCIgbmVlZGVkIGZvcgorCSAgSFBVWCAuc28vLnNsIGNhc2UuCisJKyByZXN5bmMgQ0ZfWE9QRU5fU09VUkNFIGNvbmZpZ3VyZSBtYWNybyB3aXRoIGx5bng7IGZpeGVzIElSSVg2NCBhbmQKKwkgIE5ldEJTRCAxLjYgY29uZmxpY3RzIHdpdGggX1hPUEVOX1NPVVJDRS4KKwkrIG1ha2UgY2hlY2sgZm9yIHN0ZGJvb2wuaCBtb3JlIHNwZWNpZmljLCB0byBlbnN1cmUgdGhhdCBpbmNsdWRpbmcgaXQKKwkgIHdpbGwgYWN0dWFsbHkgZGVmaW5lL2RlY2xhcmUgYm9vbCBmb3IgdGhlIGNvbmZpZ3VyZWQgY29tcGlsZXIuCisJKyByZXdyaXRlIGlmZGVmJ3MgaW4gY3Vyc2VzLmggcmVsYXRpbmcgTkNVUlNFU19CT09MIGFuZCBib29sLiAgVGhlCisJICBpbnRlbnRpb24gb2YgdGhhdCBpcyB0byAjZGVmaW5lIE5DVVJTRVNfQk9PTCBhcyBib29sIHdoZW4gdGhlCisJICBjb21waWxlciBkZWNsYXJlcyBib29sLCBhbmQgdG8gI2RlZmluZSBib29sIGFzIE5DVVJTRVNfQk9PTCB3aGVuIGl0CisJICBkb2VzIG5vdCAocmVwb3J0ZWQgYnkgSmltIEdpZmZvcmQsIFNhbSBWYXJzaGF2Y2hpaywgY2Y6IDIwMDMxMjEzKS4KKworMjAwNDAxMTAgcHJlLXJlbGVhc2UKKwkrIGNoYW5nZSBtaW5vciB2ZXJzaW9uIHRvIDQsIGkuZS4sIG5jdXJzZXMgNS40CisJKyByZXZpc2VkL2ltcHJvdmVkIHRlcm1pbmZvIGVudHJpZXMgZm9yIHR2aTkxMmIsIHR2aTkyMGIgKEJlbmphbWluIEMgVworCSAgU2l0dGxlcikuCisJKyBzaW1wbGlmaWVkIG5jdXJzZXMvYmFzZS92ZXJzaW9uLmMgYnkgZGVmaW5pbmcgdGhlIHJlc3VsdCBmcm9tIHRoZQorCSAgY29uZmlndXJlIHNjcmlwdCByYXRoZXIgdGhhbiB1c2luZyBzcHJpbnRmIChzdWdnZXN0ZWQgYnkgU3RhbmlzbGF2CisJICBJZXZsZXYpLgorCSsgcmVtb3ZlIG9ic29sZXRlIGNhc3RzIGZyb20gYysrL2N1cnNlc3cuaCAocmVwb3J0ZWQgYnkgU3RhbmlzbGF2CisJICBJZXZsZXYpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCB3aGVuIGNvbmZpZ3VyaW5nIGZvciB0ZXJtbGliLCBwcm9ncmFtcworCSAgc3VjaCBhcyB0aWMgYXJlIG5vdCBsaW5rZWQgd2l0aCB0aGUgdXBwZXItbGV2ZWwgbmN1cnNlcyBsaWJyYXJ5CisJICAoc3VnZ2VzdGVkIGJ5IFN0YW5pc2xhdiBJZXZsZXYpLgorCSsgbW92ZSB2ZXJzaW9uLmMgZnJvbSBuY3Vyc2VzL2Jhc2UgdG8gbmN1cnNlcy90aW5mbyB0byBhbGxvdyBsaW5raW5nCisJICBvZiB0aWMsIGV0Yy4sIHVzaW5nIGxpYnRpbmZvIChzdWdnZXN0ZWQgYnkgU3RhbmlzbGF2IElldmxldikuCisKKzIwMDQwMTAzCisJKyBhZGp1c3QgLUQncyB0byBidWlsZCBuY3Vyc2VzdyBvbiBPcGVuQlNELgorCSsgbW9kaWZ5IENGX1BST0dfRVhUIHRvIG1ha2UgT1MvMiBidWlsZCB3aXRoIEVYRUVYVC4KKwkrIGFkZCBwZWNob193Y2hhcigpLgorCSsgcmVtb3ZlIDx3Y3R5cGUuaD4gaW5jbHVkZSBmcm9tIGxpYl9zbGtfd3NldC5jIHdoaWNoIGlzIG5vdCBuZWVkZWQgKG9yCisJICBhdmFpbGFibGUpIG9uIG9sZGVyIHBsYXRmb3Jtcy4KKworMjAwMzEyMjcKKwkrIGFkZCAtRCdzIHRvIGJ1aWxkIG5jdXJzZXcgb24gRnJlZUJTRCA1LjEuCisJKyBtb2RpZnkgc2hhcmVkIGxpYnJhcnkgY29uZmlndXJhdGlvbiBmb3IgRnJlZUJTRCA0LngvNS54IHRvIGFkZCB0aGUKKwkgIHNvbmFtZSBpbmZvcm1hdGlvbiAocmVxdWVzdCBieSBNYXJjIEdsaXNzZSkuCisJKyBtb2RpZnkgX25jX3JlYWRfdGljX2VudHJ5KCkgdG8gbm90IHVzZSBNQVhfQUxJQVMsIGJ1dCBQQVRIX01BWCBvbmx5CisJICBmb3IgbGltaXRpbmcgdGhlIGxlbmd0aCBvZiBhIGZpbGVuYW1lIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZS4KKwkrIG1vZGlmeSB0ZXJtbmFtZSgpIHRvIHJldHVybiB0aGUgdGVybWluYWwgbmFtZSB1c2VkIGJ5IHNldHVwdGVybSgpCisJICByYXRoZXIgdGhhbiAkVEVSTSwgd2l0aG91dCB0cnVuY2F0aW5nIHRvIDE0IGNoYXJhY3RlcnMgYXMgZG9jdW1lbnRlZAorCSAgYnkgWC9PcGVuIChyZXBvcnQgYnkgU3RhbmlzbGF2IElldmxldiwgY2Y6ICA5NzA3MTkpLgorCSsgcmUtYWRkIGRlZmluaXRpb24gZm9yIF9CU0RfVFlQRVMsIGxvc3QgaW4gbWVyZ2UgKGNmOiAyMDAzMTIwNikuCisKKzIwMDMxMjIwCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtbWFucGFnZS1mb3JtYXQ9Y2F0b25seSB0byBhZGRyZXNzCisJICBiZWhhdmlvciBvZiBCU0RJLCBhbGxvdyBpbnN0YWxsIG9mIG1hbitjYXQgZmlsZXMgb24gTmV0QlNELCB3aG9zZQorCSAgYmVoYXZpb3IgaGFzIGRpdmVyZ2VkIGJ5IHJlcXVpcmluZyBib3RoIHRvIGJlIHByZXNlbnQuCisJKyByZW1vdmUgbGVhZGluZyBibGFua3MgZnJvbSBjb21tZW50LWxpbmVzIGluIG1hbmxpbmtzLnNlZCBzY3JpcHQgdG8KKwkgIHdvcmsgd2l0aCBUcnU2NCA0LjBkLgorCSsgYWRkIHNjcmVlbi5saW51eCB0ZXJtaW5mbyBlbnRyeSAoZGlzY3Vzc2lvbiBvbiBtdXR0LXVzZXJzIG1haWxpbmcKKwkgIGxpc3QpLgorCisyMDAzMTIxMworCSsgYWRkIGEgY2hlY2sgZm9yIHRpYyB0byBmbGFnIG1pc3NpbmcgYmFja3NsYXNoZXMgZm9yIHRlcm1jYXAKKwkgIGNvbnRpbnVhdGlvbiBsaW5lcy4gIG5jdXJzZXMgcmVhZHMgdGhlIHdob2xlIGVudHJ5LCBidXQgdGVybWNhcAorCSAgYXBwbGljYXRpb25zIGRvIG5vdC4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uICItLXdpdGgtbWFucGFnZS1hbGlhc2VzIiBleHRlbmRpbmcKKwkgICItLXdpdGgtbWFucGFnZS1hbGlhc2VzIiB0byBwcm92aWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyAiLnNvIgorCSAgZmlsZXMgcmF0aGVyIHRoYW4gc3ltYm9saWMgbGlua3MgZm9yIG1hbnBhZ2UgYWxpYXNlcy4KKwkrIGFkZCBib29sIGRlZmluaXRpb24gaW4gaW5jbHVkZS9jdXJzZXMuaC5pbiBmb3IgY29uZmlndXJhdGlvbnMgd2l0aCBubworCSAgdXNhYmxlIEMrKyBjb21waWxlciAoY2Y6IDIwMDMwNjA3KS4KKwkrIGZpeCBwYXRobmFtZSBvZiBTaWdBY3Rpb24uaCBmb3IgYnVpbGRpbmcgd2l0aCAtLXNyY2RpciAocmVwb3J0ZWQgYnkKKwkgIE1pa2UgQ2FzdGxlKS4KKworMjAwMzEyMDYKKwkrIGZvbGRlZCBuY3Vyc2VzL2Jhc2Uvc2lnYWN0aW9uLmMgaW50byBpbmNsdWRlcyBvZiBuY3Vyc2VzL1NpZ0FjdGlvbi5oLAorCSAgc2luY2UgdGhhdCBoZWFkZXIgaXMgdXNlZCBvbmx5IHdpdGhpbiBuY3Vyc2VzL3R0eS9saWJfdHN0cC5jLCBmb3IKKwkgIG5vbi1QT1NJWCBzeXN0ZW1zIChkaXNjdXNzaW9uIHdpdGggU3RhbmlzbGF2IElldmxldikuCisJKyByZW1vdmUgb2Jzb2xldGUgX25jX291dHN0cigpIGZ1bmN0aW9uIChyZXBvcnQgYnkgU3RhbmlzbGF2IElldmxldgorCSAgPGluZ2VyQGFsdGxpbnV4Lm9yZz4pLgorCSsgYWRkIHRlc3QvYmFja2dyb3VuZC5jIGFuZCB0ZXN0L2NvbG9yX3NldC5jCisJKyBtb2RpZnkgY29sb3Jfc2V0KCkgZnVuY3Rpb24gdG8gd29yayB3aXRoIGNvbG9yIHBhaXIgMCAocmVwb3J0IGJ5CisJICBHZW9yZ2UgQW5kcmVvdSA8Z2JhbmRyZW9AdGVtLnVvYy5ncj4pLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLXRyYWNlLCBzaW5jZSBkZWZpbmluZyBUUkFDRSBzZWVtcyB0b28KKwkgIGF3a3dhcmQgZm9yIHNvbWUgY2FzZXMuCisJKyByZW1vdmUgYSBjYWxsIHRvIF9uY19mcmVlX3Rlcm10eXBlKCkgZnJvbSByZWFkX3Rlcm10eXBlKCksIHNpbmNlIHRoZQorCSAgY29ycmVzcG9uZGluZyBidWZmZXIgY29udGVudHMgd2VyZSBhbHJlYWR5IHplcm9lZCBieSBhIG1lbXNldCAoY2Y6CisJICAyMDAwMDEwMSkuCisJKyBpbXByb3ZlIGNvbmZpZ3VyZSBjaGVjayBmb3IgX1hPUEVOX1NPVVJDRSBhbmQgcmVsYXRlZCBkZWZpbml0aW9ucywKKwkgIGFkZGluZyBzcGVjaWFsIGNhc2VzIGZvciBTb2xhcmlzJyBfX0VYVEVOU0lPTlNfXyBhbmQgRnJlZUJTRCdzCisJICBfX0JTRF9UWVBFUyAocmVwb3J0cyBieSBNYXJjIEdsaXNzZSA8bWFyYy5nbGlzc2VAbm9ybWFsZXN1cC5vcmc+KS4KKwkrIHNtYWxsIGZpeGVzIHRvIGNvbXBpbGUgb24gU29sYXJpcyBhbmQgSVJJWDY0IHVzaW5nIGNjLgorCSsgY29ycmVjdCB0eXBvIGluIGNoZWNrIGZvciBwcmUtUE9TSVggc29ydCBvcHRpb25zIGluIE1La2V5X2RlZnMuc2gKKwkgIChjZjogMjAwMzExMDEpLgorCisyMDAzMTEyOQorCSsgbW9kaWZ5IF9uY19nZXR0aW1lKCkgdG8gYXZvaWQgYSBwcm9ibGVtIHdpdGggYXJpdGhtZXRpYyBvbiB1bnNpZ25lZAorCSAgdmFsdWVzIChQaGlsaXBwZSBCbGFpbikuCisJKyBpbXByb3ZlIHRoZSBuYW5vc2xlZXAoKSBsb2dpYyBpbiBuYXBtcygpIGJ5IGNoZWNraW5nIGZvciBFSU5UUiBhbmQKKwkgIHJlc3RhcnRpbmcgKFBoaWxpcHBlIEJsYWluKS4KKwkrIGNvcnJlY3QgZXhwcmVzc2lvbiBmb3IgIiVEIiBpbiBsaWJfdGdvdG8uYyAoSnVoYSBKYXJ2aQorCSAgPG1vb3pAd2VsaG8uY29tPikuCisKKzIwMDMxMTIyCisJKyBhZGQgbGludXgtdnQgdGVybWluZm8gZW50cnkgKEFuZHJleSBWIEx1a3lhbm92IDxsYW5kQGxvbmcueWFyLnJ1PikuCisJKyBhbGxvdyAiXHwiIGVzY2FwZSBpbiB0ZXJtaW5mbzsgdGljIHNob3VsZCBub3Qgd2FybiBhYm91dCB0aGlzLgorCSsgc2F2ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgdHJhY2UtZmlsZSB0aGUgZmlyc3QgdGltZSBpdCBpcyBvcGVuZWQsCisJICB0byBhdm9pZCBjcmVhdGluZyBpdCBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgaWYgdGhlIGFwcGxpY2F0aW9uCisJICBvcGVucyBhbmQgY2xvc2VzIGl0IHdoaWxlIGNoYW5naW5nIGl0cyB3b3JraW5nIGRpcmVjdG9yeS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHByb3ZpZGUgYSBub24tZW1wdHkgZGVmYXVsdCBmb3IKKwkgICRCUk9LRU5fTElOS0VSCisKKzIwMDMxMTA4CisJKyBhZGQgREpHUFAgdG8gc3BlY2lhbCBjYXNlIG9mIERPUy1zdHlsZSBkcml2ZSBsZXR0ZXJzIHBvdGVudGlhbGx5CisJICBhcHBlYXJpbmcgaW4gVEVSTUNBUCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwkrIGZpeCBzb21lIHNwZWxsaW5nIGluIGNvbW1lbnRzIChyZXBvcnRzIGJ5IEphc29uIE1jSW50eXJlLCBKb25hdGhvbgorCSAgR3JheSkuCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisKKzIwMDMxMTAxCisJKyBmaXggYSBtZW1vcnkgbGVhayBpbiBlcnJvci1yZXR1cm4gZnJvbSBzZXR1cHRlcm0oKSAocmVwb3J0IGJ5CisJICBTdGFuaXNsYXYgSWV2bGV2IDxpbmdlckBhbHRsaW51eC5vcmc+KS4KKwkrIHVzZSBFWEVFWFQgYW5kIE9CSkVYVCBjb25zaXN0ZW50bHkgaW4gbWFrZWZpbGVzLgorCSsgYW1lbmQgZml4ZXMgZm9yIGNyb3NzLWNvbXBpbGluZyB0byB1c2Ugc2VwYXJhdGUgZXhlY3V0YWJsZS1zdWZmaXgKKwkgIEJVSUxEX0VYRUVYVCAoY2Y6IDIwMDMxMDE4KS4KKwkrIG1vZGlmeSBNS2tleV9kZWZzLnNoIHRvIGNoZWNrIGZvciBzb3J0IHV0aWxpdHkgdGhhdCBkb2VzIG5vdAorCSAgcmVjb2duaXplIGtleSBvcHRpb25zLCBlLmcuLCBidXN5Ym94IChyZXBvcnQgYnkgUGV0ZXIgUyBNYXppbmdlcgorCSAgPHBzLm1AZ214Lm5ldD4pLgorCSsgZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIF9uY19pbmZvdG9jYXAoKSAoZm91bmQgYnkKKwkgIERhdmlkIEtyYXVzZSB1c2luZyBzb21lIG9mIHRoZSBuZXcgbWFsbG9jIGRlYnVnZ2luZyBmZWF0dXJlcworCSAgdW5kZXIgT3BlbkJTRCwgcGF0Y2ggYnkgVGVkIFVuYW5nc3QpLgorCSsgbW9kaWZ5IENGX0xJQl9TVUZGSVggZm9yIEl0YW5pdW0gcmVsZWFzZXMgb2YgSFAtVVgsIHdoaWNoIHVzZSBhCisJICAiLnNvIiBzdWZmaXggKHBhdGNoIGJ5IEpvbmF0aGFuIFdhcmQgPEpvbmF0aGFuLldhcmRAaHAuY29tPikuCisKKzIwMDMxMDI1CisJKyB1cGRhdGUgdGVybWluZm8gZm9yIHh0ZXJtLXhmcmVlODYgLVRECisJKyBhZGQgY2hlY2sgZm9yIG11bHRpcGxlICJ0Yz0iIGNsYXVzZXMgaW4gYSB0ZXJtY2FwIHRvIHRpYy4KKwkrIGNoZWNrIGZvciBtaXNzaW5nIG9wL29jIGluIHRpYy4KKwkrIGNvcnJlY3QgX25jX3Jlc29sdmVfdXNlcygpIGFuZCBfbmNfbWVyZ2VfZW50cnkoKSB0byBhbGxvdyBpbmZvY21wIGFuZAorCSAgdGljIHRvIHNob3cgY2FuY2VsbGVkIGNhcGFiaWxpdGllcy4gIFRoZXNlIGZ1bmN0aW9ucyB3ZXJlIGlnbm9yaW5nCisJICB0aGUgc3RhdGUgb2YgdGhlIHRhcmdldCBlbnRyeSwgd2hpY2ggc2hvdWxkIGJlIHVudG91Y2hlZCBpZiBjYW5jZWxsZWQuCisJKyBjb3JyZWN0IGNvbW1lbnQgaW4gdGFjay9vdXRwdXQuYyAoRGViaWFuICMyMTU4MDYpLgorCSsgYWRkIHNvbWUgbnVsbC1wb2ludGVyIGNoZWNrcyB0byBsaWJfb3B0aW9ucy5jIChyZXBvcnQgYnkgTWljaGFlbAorCSAgQmllbmlhKS4KKwkrIHJlZ2VuZXJhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbi4KKwkrIGNvcnJlY3Rpb24gdG8gdGFyLWNvcHkuc2gsIHJlbW92ZSBhIHRyYXAgY29tbWFuZCB0aGF0IHJlc3VsdGVkIGluCisJICBsZWF2aW5nIHRlbXBvcmFyeSBmaWxlcyAoY2Y6IDIwMDMwNTEwKS4KKwkrIHJlbW92ZSBjb250YWN0L21haW50YWluZXIgYWRkcmVzc2VzIGZvciBKdWVyZ2VuIFBmZWlmZXIgKGhpcyByZXF1ZXN0KS4KKworMjAwMzEwMTgKKwkrIHVwZGF0ZWQgdGVzdC9jb25maWd1cmUgdG8gcmVmbGVjdCBjaGFuZ2VzIGZvciBsaWJ0b29sIChjZjogMjAwMzA4MzApLgorCSsgZml4IHNldmVyYWwgcGxhY2VzIGluIHRhY2svcGFkLmMgd2hpY2ggdGVzdGVkIGFuZCB1c2VkIHRoZSBwYXJhbWV0ZXItCisJICBhbmQgcGFyYW1ldGVybGVzcyBzdHJpbmdzIGluY29uc2lzdGVudGx5LCBpLmUuLCBpbiBwYWRfcmluKCksCisJICBwYWRfaWwoKSwgcGFkX2luZG4oKSBhbmQgcGFkX2RsKCkgKERlYmlhbiAjMjE1ODA1KS4KKwkrIG1pbm9yIGZpeGVzIGZvciBjb25maWd1cmUgc2NyaXB0IGFuZCBtYWtlZmlsZXMgdG8gY2xlYW51cCBleGVjdXRhYmxlcworCSAgZ2VuZXJhdGVkIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciBESkdQUC4KKwkrIG1vZGlmeSBpbmZvY21wIHRvIG9taXQgY2hlY2sgZm9yICRURVJNIGZvciBvcGVyYXRpb25zIHRoYXQgZG8gbm90CisJICByZXF1aXJlIGl0LCBlLmcuLCAiaW5mb2NtcCAtZSIgdXNlZCB0byBidWlsZCBmYWxsYmFjayBsaXN0IChyZXBvcnQgYnkKKwkgIEtvYmxpbmdlciBFZ21vbnQpLgorCisyMDAzMTAwNAorCSsgYWRkIHRlcm1pbmZvIGVudHJpZXMgZm9yIERKR1BQLgorCSsgdXBkYXRlZCBub3RlIGFib3V0IG1haW50YWluZXIgaW4gbmN1cnNlcy1pbnRyby5odG1sCisKKzIwMDMwOTI3CisJKyB1cGRhdGUgdGVybWluZm8gZW50cmllcyBmb3IgZ25vbWUgdGVybWluYWwuCisJKyBtb2RpZnkgdGFjayB0byByZXNldCBjb2xvcnMgYWZ0ZXIgZWFjaCBjb2xvciB0ZXN0LCBjb3JyZWN0IGEgcGxhY2UKKwkgIHdoZXJlIGV4aXRfc3RhbmRvdXRfbW9kZSB3YXMgdXNlZCBpbnN0ZWFkIG9mIGV4aXRfYXR0cmlidXRlX21vZGUuCisJKyBpbXByb3ZlIHRhY2sncyBiY2UgdGVzdCBieSBtYWtpbmcgaXQgc2V0IGNvbG9ycyBvdGhlciB0aGFuIGJsYWNrCisJICBvbiB3aGl0ZS4KKwkrIHBsdWcgYSBwb3RlbnRpYWwgcmVjdXJzaW9uIGJldHdlZW4gbmFwbXMoKSBhbmQgX25jX3RpbWVkX3dhaXQoKQorCSAgKHJlcG9ydCBieSBQaGlsaXBwZSBCbGFpbikuCisKKzIwMDMwOTIwCisJKyBhZGQgLS13aXRoLXJlbC12ZXJzaW9uIG9wdGlvbiB0byBhbGxvdyB3b3JrYXJvdW5kIHRvIGFsbG93IG1ha2luZworCSAgbGlidG9vbCBvbiBEYXJ3aW4gZ2VuZXJhdGUgdGhlICJzYW1lIiBsaWJyYXJ5IG5hbWVzIGFzIHdpdGggdGhlCisJICAtLXdpdGgtc2hhcmVkIG9wdGlvbi4gIFRoZSBEYXJ3aW4gbGQgcHJvZ3JhbSBkb2VzIG5vdCB3b3JrIHdlbGwKKwkgIHdpdGggYSB6ZXJvIGFzIHRoZSBtaW5vci12ZXJzaW9uIHZhbHVlIChyZXF1ZXN0IGJ5IENocmlzIFp1YnJ6eWNraSkuCisJKyBtb2RpZnkgQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FUyBtYWNybyB0byB3b3JrIHdpdGggY3Jvc3MtY29tcGlsaW5nLgorCSsgbW9kaWZ5IHRhY2sgdG8gYWxsb3cgaXQgdG8gcnVuIGZyb20gZmFsbGJhY2sgdGVybWluZm8gZGF0YS4KKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgaW1wcm92ZSBQdXRSYW5nZSgpIGJ5IGFkanVzdGluZyBjYWxsIHRvIEVtaXRSYW5nZSgpIGFuZCBjb3JyZXNwb25kaW5nCisJICByZXR1cm4tdmFsdWUgdG8gbm90IGVtaXQgdW5jaGFuZ2VkIGNoYXJhY3RlcnMgb24gdGhlIGVuZCBvZiB0aGUKKwkgIHJhbmdlLgorCSsgaW1wcm92ZSBhIGNoZWNrIGZvciBjaGFuZ2VkLWF0dHJpYnV0ZSBieSBleGl0aW5nIGEgbG9vcCB3aGVuIHRoZQorCSAgY2hhbmdlIGlzIGZvdW5kLgorCSsgaW1wcm92ZSBsb2dpYyBpbiBUcmFuc2Zvcm1MaW5lKCksIGVsaW1pbmF0aW5nIGEgZHVwbGljYXRlZCBjb21wYXJpc29uCisJICBpbiB0aGUgY2xyX2JvbCBsb2dpYy4KKworMjAwMzA5MTMKKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgaW4gbmN1cnNlcy90dHkvbGliX212Y3VyLmMsCisJICBtb3ZlIHRoZSBsYWJlbCAnbm9ubG9jYWwnIGp1c3QgYmVmb3JlIHRoZSBzZWNvbmQgZ2V0dGltZW9mZGF5KCkgdG8KKwkgIGJlIGFibGUgdG8gY29tcHV0ZSB0aGUgZGlmZiB0aW1lIHdoZW4gJ2dvdG8gbm9ubG9jYWwnIHVzZWQuCisJICBSZW5hbWUgJ21zZWMnIHRvICdtaWNyb3NlYycgaW4gdGhlIGRlYnVnLW1lc3NhZ2UuCisJKyBpbiBuY3Vyc2VzL3R0eS9saWJfbXZjdXIuYywKKwkgIFVzZSBfbmNfb3V0Y2goKSBpbiBjYXJyaWFnZSByZXR1cm4vbmV3bGluZSBtb3ZlbWVudCBpbnN0ZWFkIG9mCisJICBwdXRjaGFyKCkgd2hpY2ggZ29lcyB0byBzdGRvdXQuICBNb3ZlIHRlc3QgZm9yIHhvbGQ+MCBvdXQgb2YgbG9vcC4KKwkrIGluIG5jdXJzZXMvdGluZm8vc2V0YnVmLmMsCisJICBTZXQgdGhlIGZsYWcgU1AtPl9idWZmZXJlZCBhdCB0aGUgZW5kIG9mIG9wZXJhdGlvbnMgd2hlbiBhbGwgaGFzIGJlZW4KKwkgIHN1Y2Nlc3NmdWwgKHR5cGVNYWxsb2MgY2FuIGZhaWwpLgorCSsgc2ltcGxpZnkgTkNfQlVGRkVSRUQgbWFjcm8gYnkgbW92aW5nIGNoZWNrIGluc2lkZSBfbmNfc2V0YnVmKCkuCisKKzIwMDMwOTA2CisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhdm9pZCB1c2luZyAiaGVhZCAtMSIsIHdoaWNoIGRvZXMgbm90CisJICB3b3JrIGlmIFBPU0lYTFlfQ09SUkVDVCAoc2ljKSBpcyBzZXQuCisJKyBtb2RpZnkgcnVuX3RpYy5pbiB0byBhdm9pZCB1c2luZyB3cm9uZyBzaGFyZWQgbGlicmFyaWVzIHdoZW4KKwkgIGNyb3NzLWNvbXBpbGluZyAoRGFuIEtlZ2VsKS4KKworMjAwMzA4MzAKKwkrIGFsdGVyIGNvbmZpZ3VyZSBzY3JpcHQgaGVscCBtZXNzYWdlIHRvIG1ha2UgaXQgY2xlYXJlciB0aGF0CisJICAtLXdpdGgtYnVpbGQtY2MgZG9lcyBub3Qgc3BlY2lmeSBhIGNyb3NzLWNvbXBpbGVyIChzdWdnZXN0ZWQgYnkgRGFuCisJICBLZWdlbCA8ZGFua0BrZWdlbC5jb20+KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGFjY29tbW9kYXRlIGxpYnRvb2wgMS41LCBhcyB3ZWxsIGFzIGFkZCBhbgorCSAgcGFyYW1ldGVyIHRvIHRoZSAiLS13aXRoLWxpYnRvb2wiIG9wdGlvbiB3aGljaCBjYW4gc3BlY2lmeSB0aGUKKwkgIHBhdGhuYW1lIG9mIGxpYnRvb2wgKHJlcG9ydCBieSBDaHJpcyBadWJyenlja2kpLiAgV2Ugbm90ZSB0aGF0CisJICBsaWJ0b29sIDEuNSBoYXMgbW9yZSB0aGFuIG9uZSBidWcgaW4gaXRzIEMrKyBzdXBwb3J0LCBzbyBpdCBpcyBub3QKKwkgIGFibGUgdG8gaW5zdGFsbCBsaWJuY3Vyc2VzKyssIGZvciBpbnN0YW5jZSwgaWYgJERFU1RESVIgb3IgdGhlIG9wdGlvbgorCSAgLS13aXRoLWluc3RhbGwtcHJlZml4IGlzIHVzZWQuCisKKzIwMDMwODIzCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIG1vdmUgYXNzaWdubWVudHMgdG8gU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wgaW50byBvbmxpbmVfbXZjdXIoKS4KKwkrIG1ha2UgYmF1ZHJhdGUgY29tcHV0YXRpb24gaW4gZGVsYXlfb3V0cHV0KCkgY29uc2lzdGVudCB3aXRoIHRoZQorCSAgYXNzdW1wdGlvbiBpbiBfbmNfbXZjdXJfaW5pdCgpLCBpLmUuLCBhIGJ5dGUgaXMgOSBiaXRzLgorCisyMDAzMDgxNgorCSsgbW9kaWZ5IGxvZ2ljIGluIHdhZGRjaF9saXRlcmFsKCkgdG8gdGFrZSBpbnRvIGFjY291bnQgemhfVFcuQmlnNQorCSAgd2hvc2UgbXVsdGlieXRlIHNlcXVlbmNlcyBtYXkgY29udGFpbiAicHJpbnRhYmxlIiBjaGFyYWN0ZXJzLCBlLmcuLAorCSAgYSAiZyIgaW4gdGhlIHNlcXVlbmNlICJcMjQ3ZyIgKERlYmlhbiAjMjA0ODg5LCBjZjogMjAwMzA2MjEpLgorCSsgaW1wcm92ZSBzdG9yYWdlIHVzZWQgYnkgX25jX3NhZmVfc3RyY3B5KCkgYnkgZW5zdXJpbmcgdGhhdCB0aGUgc2l6ZQorCSAgaXMgcmVzZXQgYmFzZWQgb24gdGhlIGluaXRpYWxpemF0aW9uIGNhbGwsIGluIGNhc2UgaXQgd2VyZSBjYWxsZWQKKwkgIGFmdGVyIG90aGVyIHN0cmNweS9zdHJjYXQgY2FsbHMgKHJlcG9ydCBieSBQaGlsaXBwZSBCbGFpbikuCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIHJlbW92ZSBhbiB1bnVzZWQgaWZkZWYgZm9yIFJFQUxfQVRUUiAmIFdBTlRfQ0hBUgorCSsgY29ycmVjdCBhIHBsYWNlIHdoZXJlIF9jdXBfY29zdCB3YXMgdXNlZCByYXRoZXIgdGhhbiBfY3V1X2Nvc3QKKworMjAwMzA4MDkKKwkrIGZpeCBhIHNtYWxsIG1lbW9yeSBsZWFrIGluIF9uY19mcmVlX3Rlcm10eXBlKCkuCisJKyBjbG9zZSB0cmFjZS1maWxlIGlmIHRyYWNlKCkgaXMgY2FsbGVkIHdpdGggYSB6ZXJvIHBhcmFtZXRlci4KKwkrIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3Igc29mdC1rZXkgc3RyaW5ncywgaW4gZGVsc2NyZWVuKCkuCisJKyBmaXggYW4gYWxsb2NhdGlvbiBzaXplIGluIHNhZmVfc3ByaW50Zi5jIGZvciB0aGUgIioiIGZvcm1hdCBjb2RlLgorCSsgY29ycmVjdCBzYWZlX3NwcmludGYuYyB0byBub3QgcmV0dXJuIGEgbnVsbCBwb2ludGVyIGlmIHRoZSBmb3JtYXQKKwkgIGhhcHBlbnMgdG8gYmUgYW4gZW1wdHkgc3RyaW5nLiAgVGhpcyBhcHBsaWVzIHRvIHRoZSAiY29uZmlndXJlCisJICAtLWVuYWJsZS1zYWZlLXNwcmludGYiIG9wdGlvbiAoUmVkaGF0ICMxMDE0ODYpLgorCisyMDAzMDgwMgorCSsgbW9kaWZ5IGNhc3RzIHVzZWQgZm9yIEFCU0VOVF9CT09MRUFOIGFuZCBDQU5DRUxMRURfQk9PTEVBTiAocmVwb3J0IGJ5CisJICBEYW5pZWwgSmFjb2Jvd2l0eikuCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIGNoYW5nZSBwYWRkaW5nIGZvciBjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiB0byBub3QgYmUgcHJvcG9ydGlvbmFsIHRvCisJICB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsLXJlZ2lvbi4KKwkrIGNvcnJlY3QgZXJyb3ItcmV0dXJuIGluIF9uY19zYWZlX3N0cmNhdCgpLgorCisyMDAzMDcyNgorCSsgY29ycmVjdCBsaW1pdC1jaGVja3MgaW4gX25jX3Njcm9sbF93aW5kb3coKSAocmVwb3J0IGFuZCB0ZXN0LWNhc2UgYnkKKwkgIFRob21hcyBHcmFmIDxncmFmQGRtcy5hdD4gY2Y6IDIwMDExMDIwKS4KKwkrIHJlLW9yZGVyIGNvbmZpZ3VyZSBjaGVja3MgZm9yIF9YT1BFTl9TT1VSQ0UgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aAorCSAgX0dOVV9TT1VSQ0UgY2hlY2suCisKKzIwMDMwNzE5CisJKyB1c2UgY2xyX2VvbCBpbiBwcmVmZXJlbmNlIHRvIGJsYW5rcyBmb3IgYmNlIHRlcm1pbmFscywgc28gc2VsZWN0IGFuZAorCSAgcGFzdGUgd2lsbCBoYXZlIGZld2VyIHRyYWlsaW5nIGJsYW5rcywgZS5nLiwgd2hlbiB1c2luZyB4dGVybQorCSAgKHJlcXVlc3QgYnkgVmluY2VudCBMZWZldnJlKS4KKwkrIGNvcnJlY3QgcHJvdG90eXBlIGZvciB3dW5jdHJsKCkgaW4gbWFucGFnZS4KKwkrIGFkZCBjb25maWd1cmUgLS13aXRoLWFiaS12ZXJzaW9uIG9wdGlvbiAoZGlzY3Vzc2lvbiB3aXRoIENoYXJsZXMKKwkgIFdpbHNvbikuCisJPiBjeWd3aW4gY2hhbmdlcyBmcm9tIENoYXJsZXMgV2lsc29uOgorCSAgKyBhY2xvY2FsLm00OiBvbiBjeWd3aW4sIHVzZSBhdXRvZGV0ZWN0ZWQgcHJlZml4IGZvciBpbXBvcnQKKwkgICAgYW5kIHN0YXRpYyBsaWIsIGJ1dCB1c2UgImN5ZyIgZm9yIERMTC4KKwkgICsgaW5jbHVkZS9uY3Vyc2VzX2RsbC5oOiBjb3JyZWN0IHRoZSBjb21tZW50cyB0byByZWZsZWN0IGN1cnJlbnQKKwkgICAgc3RhdHVzIG9mIGN5Z3dpbi9taW5ndyBwb3J0LiAgRml4IGNvbXBpbGVyIHdhcm5pbmcuCisJICArIG1pc2MvcnVuX3RpYy5pbjogZW5zdXJlIHRoYXQgdGljLmV4ZSBjYW4gZmluZCB0aGUgdW5pbnN0YWxsZWQKKwkgICAgRExMLCBieSBhZGRpbmcgdGhlIGxpYi1kaXJlY3RvcnkgdG8gdGhlIFBBVEggdmFyaWFibGUuCisJICArIG1pc2MvdGVybWluZm8uc3JjIChueHRlcm18eHRlcm0tY29sb3IpOiBtYWtlIHh0ZXJtLWNvbG9yCisJICAgIHByaW1hcnkgaW5zdGVhZCBvZiBueHRlcm0sIHRvIG1hdGNoIFhGcmVlODYncyB4dGVybS50ZXJtaW5mbworCSAgICB1c2FnZSBhbmQgdG8gcHJldmVudCBjaXJjdWxhciBsaW5rcy4KKwkgICAgKHJ4dnQpOiBhZGQgYWRkaXRpb25hbCBjb2RlcyBmcm9tIHJ4dnQub3JnLgorCSAgICAocnh2dC1jb2xvcik6IG5ldyBhbGlhcworCSAgICAocnh2dC14cG0pOiBuZXcgYWxpYXMKKwkgICAgKHJ4dnQtY3lnd2luKTogbGlrZSByeHZ0LCBidXQgd2l0aCBzcGVjaWFsIGFjc2MgY29kZXMuCisJICAgIChyeHZ0LWN5Z3dpbi1uYXRpdmUpOiBkaXR0by4gIHJ4dnQgbWF5IGJlIHJ1biB1bmRlciBYV2luZG93cywgb3IKKwkgICAgd2l0aCBhICJuYXRpdmUiIE1TV2luIEdVSS4JRWFjaCB0YWtlcyBkaWZmZXJlbnQgYWNzYyBjb2RlcywKKwkgICAgd2hpY2ggYXJlIGJvdGggZGlmZmVyZW50IGZyb20gdGhlICJub3JtYWwiIHJ4dnQncyBhY3NjLgorCSAgICAoY3lnd2luKTogY3lnd2luLWluLWNtZC5leGUgd2luZG93LgkgTG90cyBvZiBmaXhlcy4KKwkgICAgKGN5Z3dpbkRCRyk6IGRpdHRvLgorCSAgKyBtay0xc3QuYXdrOiB1c2UgImN5ZyIgZm9yIHRoZSBETEwgcHJlZml4LCBidXQgImxpYiIgZm9yIGltcG9ydAorCSAgICBhbmQgc3RhdGljIGxpYnMuCisKKzIwMDMwNzEyCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJKyBhZGQgdHJpcGxlcyBmb3IgY29uZmlndXJpbmcgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZSBEZWJpYW4KKwkgIEdOVS9GcmVlQlNEIHBhY2thZ2VzIChwYXRjaCBieSBSb2JlcnQgTWlsbGFuIDx6ZXJhdHVsMkB3YW5hZG9vLmVzPikuCisKKzIwMDMwNzA1CisJKyBtb2RpZnkgQ0ZfR0NDX1dBUk5JTkdTIHNvIGl0IG9ubHkgYXBwbGllcyB0byBnY2MsIG5vdCBnKysuICBTb21lCisJICBwbGF0Zm9ybXMgaGF2ZSBpbnN0YWxsZWQgZysrIGFsb25nIHdpdGggdGhlIG5hdGl2ZSBDIGNvbXBpbGVyLCB3aGljaAorCSAgd291bGQgbm90IGFjY2VwdCBnY2Mgd2FybmluZyBvcHRpb25zLgorCSsgYWRkIC1EX1hPUEVOX1NPVVJDRT01MDAgd2hlbiBjb25maWd1cmluZyB3aXRoIC0tZW5hYmxlLXdpZGVjLCB0bworCSAgZ2V0IG1ic3RhdGVfdCBkZWNsYXJhdGlvbiBvbiBIUFVYIDExLjExIChyZXBvcnQgYnkgRGF2aWQgRWxsZW1lbnQpLgorCSsgYWRkIF9uY19wYXRobGFzdCgpIHRvIGdldCByaWQgb2YgY2FzdHMgaW4gX25jX2Jhc2VuYW1lKCkgY2FsbHMuCisJKyBjb3JyZWN0IGEgc2lnbi1leHRlbnNpb24gaW4gd2FkZF93Y2goKSBhbmQgd2VjaG9fd2NoYXIoKSBmcm9tCisJICAyMDAzMDYyOCAocmVwb3J0IGJ5IFRvbW9oaXJvIEt1Ym90YSkuCisJKyB3b3JrIGFyb3VuZCBvbWlzc2lvbiBvZiBidG93YygpIGFuZCB3Y3RvYigpIGZyb20gd2lkZS1jaGFyYWN0ZXIKKwkgIHN1cHBvcnQgKHNpYykgaW4gTmV0QlNEIDEuNiB1c2luZyBtYnRvd2MoKSBhbmQgd2N0b21iKCkgKHJlcG9ydCBieQorCSAgR2Fib3IgWiBQYXBwKS4KKwkrIGFkZCBwb3J0YWJpbGl0eSBub3RlIHRvIGN1cnNfZ2V0X3dzdHIuM3ggKERlYmlhbiAjMTk5OTU3KS4KKworMjAwMzA2MjgKKwkrIHJld3JpdGUgd2FkZF93Y2goKSBhbmQgd2VjaG9fd2NoYXIoKSB0byBjYWxsIHdhZGRjaCgpIGFuZCB3ZWNob2NoYXIoKQorCSAgcmVzcGVjdGl2ZWx5LCB0byBhdm9pZCBjYWxsaW5nIHdhZGRjaF9ub2VjaG8oKSB3aXRoIHdpZGUtY2hhcmFjdGVyCisJICBkYXRhLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIGFzc3VtZXMgaXRzIGlucHV0IGlzIDgtYml0IGRhdGEuCisJICBTaW1pbGFybHksIG1vZGlmeSB3YWRkbndzdHIoKSB0byBjYWxsIHdhZGRfd2NoKCkuCisJKyByZW1vdmUgbG9naWMgZnJvbSB3YWRkbnN0cigpIHdoaWNoIHRyYW5zZm9ybWVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKwkgIHN0cmluZ3MgaW50byB3aWRlLWNoYXJhY3RlcnMuICBSZXdyaXRlIG9mIHdhZGRjaF9saXRlcmFsKCkgZnJvbQorCSAgMjAwMzA2MjEgYXNzdW1lcyBpdHMgaW5wdXQgaXMgcmF3IG11bHRpYnl0ZSBkYXRhIHJhdGhlciB0aGFuIHdpZGUKKwkgIGNoYXJhY3RlcnMgKHJlcG9ydCBieSBUb21vaGlybyBLdWJvdGEpLgorCisyMDAzMDYyMQorCSsgd3JpdGUgZ2V0eXgoKSBhbmQgcmVsYXRlZCAyLXJldHVybiBtYWNyb3MgaW4gdGVybXMgb2YgZ2V0Y3VyeSgpLAorCSAgZ2V0Y3VyeCgpLCBldGMuCisJKyBtb2RpZnkgd2FkZGNoX2xpdGVyYWwoKSBpbiBjYXNlIGFuIGFwcGxpY2F0aW9uIHBhc3NlcyBieXRlcyBvZiBhCisJICBtdWx0aWJ5dGUgY2hhcmFjdGVyIGRpcmVjdGx5IHRvIHdhZGRjaCgpLiAgSW4gdGhpcyBjYXNlLCB3YWRkY2goKQorCSAgbXVzdCByZWFzc2VtYmxlIHRoZSBieXRlcyBpbnRvIGEgd2lkZS1jaGFyYWN0ZXIgKHJlcG9ydCBieSBUb21vaGlybworCSAgS3Vib3RhIDxrdWJvdGFAZGViaWFuLm9yZz4pLgorCisyMDAzMDYxNAorCSsgbW9kaWZ5IHdhZGRjaF9saXRlcmFsKCkgaW4gY2FzZSBhIG11bHRpYnl0ZSB2YWx1ZSBvY2N1cGllcyBtb3JlIHRoYW4KKwkgIHR3byBjZWxscy4KKwkrIG1vZGlmeSBQdXRBdHRyQ2hhcigpIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXIgY2VsbHMgdGhhdAorCSAgYXJlIHVzZWQgaW4gbXVsdGlieXRlIHZhbHVlcy4gIFRoaXMgZml4ZXMgYSBwcm9ibGVtIGRpc3BsYXlpbmcKKwkgIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXJzIChyZXBvcnQvdGVzdCBieSBNaXRzdXJ1IENoaW5lbgorCSAgPG1jaGluZW5AeWFtYXRvLmlibS5jb20+KS4KKwkrIGFkZCBhIG51bGwtcG9pbnRlciBjaGVjayBmb3IgcmVzdWx0IG9mIGtleW5hbWUoKSBpbiBfdHJhY2VjaGFyKCkKKwkrIG1vZGlmeSBfdHJhY2VjaGFyKCkgdG8gd29yayBhcm91bmQgZ2xpYmMgc3ByaW50ZiBidWcuCisKKzIwMDMwNjA3CisJKyBhZGQgYSBjYWxsIHRvIHNldGxvY2FsZSgpIGluIGN1cnNlc21haW4uY2MsIG1ha2luZyBkZW1vIGRpc3BsYXkKKwkgIHByb3Blcmx5IGluIGEgVVRGLTggbG9jYWxlLgorCSsgYWRkIGEgZmFsbGJhY2sgZGVmaW5pdGlvbiBpbiBjdXJzZXMucHJpdi5oIGZvciBNQl9MRU5fTUFYIChwcm9tcHRlZAorCSAgYnkgZGlzY3Vzc2lvbiB3aXRoIEdhYm9yIFogUGFwcCkuCisJKyB1c2UgbWFjcm9zIE5DVVJTRVNfQUNTKCkgYW5kIE5DVVJTRVNfV0FDUygpIHRvIGhpZGUgY2FzdCBuZWVkZWQgdG8KKwkgIGFwcGVhc2UgLVdjaGFyLXN1YnNjcmlwdCB3aXRoIGcrKyAzLjMgKERlYmlhbiAjMTk1NzMyKS4KKwkrIGZpeCBhIHJlZGVmaW5pdGlvbiBvZiAkUkFOTElCIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHdoZW4gbGlidG9vbAorCSAgaXMgdXNlZCwgd2hpY2ggYnJva2UgY29uZmlndXJlIG9uIE1hYyBPUyBYIChyZXBvcnQgYnkgQ2hyaXMgWnVicnp5Y2tpCisJICA8YmVyZW5AbWFjLmNvbT4pLgorCSsgc2ltcGxpZnkgaWZkZWYgZm9yIGJvb2wgZGVjbGFyYXRpb24gaW4gY3Vyc2VzLmguaW4gKHN1Z2dlc3RlZCBieQorCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyByZW1vdmUgY29uZmlndXJlIHNjcmlwdCBjaGVjayB0byBhbGxvdyAtV2NvbnZlcnNpb24gZm9yIG9sZGVyCisJICB2ZXJzaW9ucyBvZiBnY2MgKHN1Z2dlc3RlZCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKworMjAwMzA1MzEKKwkrIHJlZ2VuZXJhdGVkIGh0bWwgbWFucGFnZXMuCisJKyBtb2RpZnkgaWZkZWYncyBpbiBjdXJzZXMuaC5pbiB0aGF0IGRpc2FibGVkIHVzZSBvZiBfX2F0dHJpYnV0ZV9fKCkKKwkgIGZvciBnKyssIHNpbmNlIHJlY2VudCB2ZXJzaW9ucyBpbXBsZW1lbnQgdGhlIGNhc2VzIHdoaWNoIG5jdXJzZXMgdXNlcworCSAgKERlYmlhbiAjMTk1MjMwKS4KKwkrIG1vZGlmeSBfbmNfZ2V0X3Rva2VuKCkgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBhbiBlbnRyeSBoYXMgbm8KKwkgIGRlc2NyaXB0aW9uLCBhbmQgY2FwYWJpbGl0aWVzIGJlZ2luIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGVudHJ5CisJICBuYW1lLgorCSsgZml4IGEgdHlwbyBpbiBuY3Vyc2VzX2RsbC5oIHJlcG9ydGVkIGJ5IGdjYyAzLjMuCisJKyBhZGQgYW4gZW50cnkgZm9yIGtleV9kZWZpbmVkLjN4IHRvIG1hbl9kYi5yZW5hbWVzLgorCisyMDAzMDUyNAorCSsgbW9kaWZ5IHNldGNjaGFyKCkgdG8gYWxsb3cgY29udmVydGluZyBjb250cm9sIGNoYXJhY3RlcnMgdG8gY29tcGxleAorCSAgY2hhcmFjdGVycyAocmVwb3J0L3Rlc3QgYnkgTWl0c3VydSBDaGluZW4gPG1jaGluZW5AeWFtYXRvLmlibS5jb20+KS4KKwkrIGFkZCB0a3Rlcm0gZW50cnkgLVRECisJKyBtb2RpZnkgcGFyc2VfZW50cnkuYyB0byBhbGxvdyBhIHRlcm1pbmZvIGVudHJ5IHdpdGggYSBsZWFkaW5nCisJICAyLWNoYXJhY3RlciBuYW1lIChyZXBvcnQgYnkgRG9uIExpYmVzKS4KKwkrIGNvcnJlY3RlZCBhY3NjIGluIHNjcmVlbi50ZXJhdGVybSwgd2hpY2ggcmVxdWlyZXMgYSBQQy1zdHlsZSBtYXBwaW5nLgorCSsgZml4IHRyYWNlIHN0YXRlbWVudHMgaW4gcmVhZF9lbnRyeS5jIHRvIHVzZSBsc2VlaygpIHJhdGhlciB0aGFuCisJICB0ZWxsKCkuCisJKyBmaXggc2lnbmVkL3Vuc2lnbmVkIHdhcm5pbmdzIGZyb20gU3VuJ3MgY29tcGlsZXIgKGdjYyBzaG91bGQgZ2l2ZQorCSAgdGhlc2Ugd2FybmluZ3MsIGJ1dCBpdCBpcyB1bnByZWRpY3RhYmxlKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIG9taXQgLVdpbmxpbmUgZm9yIGdjYyAzLjMsIHNpbmNlIHRoYXQKKwkgIGZlYXR1cmUgaXMgYnJva2VuLgorCSsgbW9kaWZ5IG1hbmxpbmtzLnNlZCB0byBhZGQgYSBmZXcgZnVuY3Rpb25zIHRoYXQgd2VyZSBvdmVybG9va2VkIHNpbmNlCisJICB0aGV5IHJldHVybiBmdW5jdGlvbiBwb2ludGVyczogIGZpZWxkX2luaXQsIGZpZWxkX3Rlcm0sIGZvcm1faW5pdCwKKwkgIGZvcm1fdGVybSwgaXRlbV9pbml0LCBpdGVtX3Rlcm0sIG1lbnVfaW5pdCBhbmQgbWVudV90ZXJtLgorCisyMDAzMDUxNworCSsgcHJldmVudCByZWN1cnNpb24gaW4gd2dldGNoKCkgdmlhIHdnZXRuc3RyKCkgaWYgdGhlIGNvbm5lY3Rpb24gY2Fubm90CisJICBiZSBzd2l0Y2hlZCBiZXR3ZWVuIGNvb2tlZC9yYXcgbW9kZXMgYmVjYXVzZSBpdCBpcyBub3QgYSBUVFkgKHJlcG9ydAorCSAgYnkgV29sZmdhbmcgR3V0amFociA8Z3V0d0BrbmFwcC5jb20+KS4KKwkrIGNoYW5nZSBwYXJhbWV0ZXIgb2YgZGVmaW5lX2tleSgpIGFuZCBrZXlfZGVmaW5lZCgpIHRvIGNvbnN0IChwcm9tcHRlZAorCSAgYnkgRGViaWFuICMxOTI4NjApLgorCSsgYWRkIGEgY2hlY2sgaW4gdGVzdC9jb25maWd1cmUgZm9yIG5jdXJzZXMgZXh0ZW5zaW9ucywgc2luY2UgdGhlcmUKKwkgIGFyZSBzb21lIG9sZGVyIHZlcnNpb25zLCBldGMuLCB3aGljaCB3b3VsZCBub3QgY29tcGlsZSB3aXRoIHRoZQorCSAgY3VycmVudCB0ZXN0IHByb2dyYW1zLgorCSsgY29ycmVjdGVkIGRlbW8gaW4gdGVzdC9uY3Vyc2VzLmMgb2Ygd2dldG5fd3N0cigpLCB3aGljaCBkaWQgbm90CisJICBjb252ZXJ0IHdjaGFyX3Qgc3RyaW5nIHRvIG11bHRpYnl0ZSBmb3JtIGJlZm9yZSBwcmludGluZyBpdC4KKwkrIGNvcnJlY3Rpb25zIHRvIGxpYl9nZXRfd3N0ci5jOgorCSAgKyBudWxsLXRlcm1pbmF0ZSBidWZmZXIgcGFzc2VkIHRvIHNldGNjaGFyKCksIHdoaWNoIG9jY2FzaW9uYWxseQorCSAgICBmYWlsZWQuCisJICArIG1hcCBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBlcmFzZS0gYW5kIGtpbGwtY2hhcmFjdGVycyBpbnRvCisJICAgIGtleS1jb2RlcyBzbyB0aG9zZSB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQgZXZlbiBpZiB0aGV5IGFyZSBub3QKKwkgICAgbWVudGlvbmVkIGluIHRoZSB0ZXJtaW5mby4KKwkrIG1vZGlmeSBQVVRDKCkgYW5kIENoYXJhYmxlKCkgbWFjcm9zIHRvIG1ha2Ugd2lkZS1jaGFyYWN0ZXIgbGluZQorCSAgZHJhd2luZyB3b3JrIGZvciBQT1NJWCBsb2NhbGUgb24gTGludXggY29uc29sZSAoY2Y6IDIwMDIxMjIxKS4KKworMjAwMzA1MTAKKwkrIG1ha2UgdHlwb2dyYXBoeSBmb3IgcHJvZ3JhbSBvcHRpb25zIGluIG1hbnBhZ2VzIGNvbnNpc3RlbnQgKHJlcG9ydAorCSAgYnkgTWlsb3NsYXYgVHJtYWMgPG1pdHJAdm9sbnkuY3o+KS4KKwkrIGNvcnJlY3QgZGVwZW5kZW5jaWVzIGluIEFkYTk1L3NyYy9NYWtlZmlsZS5pbiwgc28gdGhlIGJ1aWxkcyB3aXRoCisJICAiLS1zcmNkaXIiIHdvcmsgKHJlcG9ydCBieSBXYXJyZW4gTCBEb2RnZSkuCisJKyBjb3JyZWN0IG1pc3NpbmcgZGVmaW5pdGlvbiBvZiAkKENDKSBpbiBBZGE5NS9nZW4vTWFrZWZpbGUuaW4KKwkgIChyZXBvcnRlZCBieSBXYXJyZW4gTCBEb2RnZSA8d2FycmVuZEBtZGhvc3QuY3NlLnRlay5jb20+KS4KKwkrIGZpeCB0eXBvcyBhbmQgd2hpdGVzcGFjZSBpbiBtYW5wYWdlcyAocGF0Y2ggYnkgSmFzb24gTWNJbnR5cmUKKwkgIDxqbWNAcHJpb3Jpcy5taW5pLnB3LmVkdS5wbD4pLgorCisyMDAzMDUwMworCSsgZml4IGZvcm1fZHJpdmVyKCkgY2FzZXMgZm9yIFJFUV9DTFJfRU9GLCBSRVFfQ0xSX0VPTCwgUkVRX0RFTF9DSEFSLAorCSAgUkVRX0RFTF9QUkVWIGFuZCBSRVFfTkVXX0xJTkUsIHdoaWNoIGRpZCBub3QgZW5zdXJlIHRoZSBjdXJzb3Igd2FzIGF0CisJICB0aGUgZWRpdGluZyBwb3NpdGlvbiBiZWZvcmUgbWFraW5nIG1vZGlmaWNhdGlvbnMuCisJKyBhZGQgdGVzdC9kZW1vX2Zvcm1zIGFuZCBhc3NvY2lhdGVkIHRlc3QvZWRpdF9maWVsZC5jIGRlbW9zLgorCSsgbW9kaWZ5IHRlc3QvY29uZmlndXJlLmluIHRvIHVzZSB0ZXN0L21vZHVsZXMgZm9yIHRoZSBsaXN0IG9mIG9iamVjdHMKKwkgIHRvIGNvbXBpbGUgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGxpc3Qgb2YgcHJvZ3JhbXMuCisKKzIwMDMwNDE5CisJKyBtb2RpZnkgbG9naWMgb2YgYWNzYyB0byB1c2UgdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBpZiBubyBtYXBwaW5nIGlzCisJICBkZWZpbmVkLCBub3RpbmcgdGhhdCBTb2xhcmlzIGRvZXMgdGhpcy4KKwkrIG1vZGlmeSBuY3Vyc2VzICdiJyB0ZXN0IHRvIGF2b2lkIHVzaW5nIHRoZSBhY3NfbWFwW10gYXJyYXkgc2luY2UKKwkgIDIwMDIxMjMxIGNoYW5nZXMgaXQgdG8gbm8gbG9uZ2VyIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSB0aGUgYWNzYworCSAgc3RyaW5nLgorCSsgbW9kaWZ5IG1ha2VmaWxlIHJ1bGVzIGluIGMrKywgcHJvZ3MsIHRhY2sgYW5kIHRlc3QgdG8gZW5zdXJlIHRoYXQKKwkgIHRoZSBjb21waWxlciBmbGFncyAoZS5nLiwgJENGTEFHUyBvciAkQ0NGTEFHUykgYXJlIHVzZWQgaW4gdGhlIGxpbmsKKwkgIGNvbW1hbmQgKHJlcG9ydCBieSBKb3NlIEx1aXMgUmljbyBCb3RlbGxhIDxpbmZvcm1hdGljYUBzZXJwaXMuY29tPikuCisJKyBtb2RpZnkgc29mdC1rZXkgaW5pdGlhbGl6YXRpb24gdG8gdXNlIEFfUkVWRVJTRSBpZiBBX1NUQU5ET1VUIHdvdWxkCisJICBub3QgYmUgc2hvd24gd2hlbiBjb2xvcnMgYXJlIHVzZWQsIGkuZS4sIGlmIG5jdiMxIGlzIHNldCBpbiB0aGUKKwkgIHRlcm1pbmZvIGFzIGlzIGRvbmUgaW4gInNjcmVlbiIuCisKKzIwMDMwNDEyCisJKyBhZGQgYSB0ZXN0IGZvciBzbGtfY29sb3IoKSwgaW4gbmN1cnNlcy5jCisJKyBmaXggc29tZSBpc3N1ZXMgcmVwb3J0ZWQgYnkgdmFsZ3JpbmQgaW4gdGhlIHNsa19zZXQoKSBhbmQgc2xrX3dzZXQoKQorCSAgY29kZSwgZnJvbSByZWNlbnQgcmV3cml0ZS4KKwkrIG1vZGlmeSBuY3Vyc2VzICdFJyB0ZXN0IHRvIHVzZSBzaG93IHByZXZpb3VzIGxhYmVsIHZpYSBzbGtfbGFiZWwoKSwKKwkgIGFzIGluICdlJyB0ZXN0LgorCSsgbW9kaWZ5IHdpZGUtY2hhcmFjdGVyIHZlcnNpb25zIG9mIE5ld0NoYXIoKSwgTmV3Q2hhcjIoKSBtYWNyb3MgdG8KKwkgIGVuc3VyZSB0aGF0IHRoZSB3aG9sZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQuCisKKzIwMDMwNDA1CisJKyBtb2RpZnkgc2V0dXB0ZXJtKCkgdG8gY2hlY2sgaWYgdGhlIHRlcm1pbmZvIGFuZCB0ZXJtaW5hbC1tb2RlcyBoYXZlCisJICBhbHJlYWR5IGJlZW4gcmVhZC4gIFRoaXMgZW5zdXJlcyB0aGF0IGl0IGRvZXMgbm90IHJlaW52b2tlCisJICBkZWZfcHJvZ19tb2RlKCkgd2hlbiBhbiBhcHBsaWNhdGlvbiBjYWxscyBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uLAorCSAgc3VjaCBhcyB0Z2V0ZW50KCkgYW5kIGluaXRzY3IoKSAocmVwb3J0IGJ5IE9sYWYgQnVkZGVuaGFnZW4pLgorCisyMDAzMDMyOQorCSsgYWRkICdFJyB0ZXN0IHRvIG5jdXJzZXMuYywgdG8gZXhlcmNpc2Ugc2xrX3dzZXQoKS4KKwkrIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2FycmlhZ2UtcmV0dXJuIGluIHdnZXRuX3dzdHIoKSwgdXNlZCBpbiBkZW1vIG9mCisJICBzbGtfd3NldCgpLgorCSsgZmlyc3QgZHJhZnQgb2Ygc2xrX3dzZXQoKSBmdW5jdGlvbi4KKworMjAwMzAzMjIKKwkrIGltcHJvdmVkIHdhcm5pbmdzIGluIHRpYyB3aGVuIHN1cHByZXNzaW5nIGl0ZW1zIHRvIGZpdCBpbiB0ZXJtY2FwJ3MKKwkgIDEwMjMtYnl0ZSBsaW1pdC4KKwkrIGJ1aWx0IGEgbGlzdCBpbiB0ZXN0L1JFQURNRSBzaG93aW5nIHdoaWNoIGV4dGVybmFscyBhcmUgYmVpbmcgdXNlZAorCSAgYnkgZWl0aGVyIHByb2dyYW1zIGluIHRoZSB0ZXN0LWRpcmVjdG9yeSBvciB2aWEgaW50ZXJuYWwgbGlicmFyeQorCSAgY2FsbHMuCisJKyBhZGp1c3QgaW5jbHVkZS1vcHRpb25zIGluIENGX0VUSVBfREVGSU5FUyB0byBhdm9pZCBtaXNzaW5nCisJICBuY3Vyc2VzX2RsbC5oLCBmaXhpbmcgc3BlY2lhbCBkZWZpbml0aW9ucyB0aGF0IG1heSBiZSBuZWVkZWQgZm9yCisJICBldGlwLmggKHJlcG9ydGVkIGJ5IEdyZWcgU2NoYWZlciA8Z3NjaGFmZXJAemlwLmNvbS5hdT4pLgorCisyMDAzMDMxNQorCSsgbWlub3IgZml4ZXMgZm9yIGNhcmRmaWxlLmMsIHRvIG1ha2UgaXQgd3JpdGUgdGhlIHVwZGF0ZWQgZmllbGRzIHRvCisJICBhIGZpbGUgd2hlbiBeVyBpcyBnaXZlbi4KKwkrIGFkZC91c2UgX25jX3RyYWNlX2J1ZmNhdCgpIHRvIGVsaW1pbmF0ZSBzb21lIGZpeGVkIGJ1ZmZlciBsaW1pdHMgaW4KKwkgIHRyYWNlIGNvZGUuCisKKzIwMDMwMzA4CisJKyBjb3JyZWN0IGEgY2FzZSBpbiBfbmNfcmVtb3ZlX3N0cmluZygpLCB1c2VkIGJ5IGRlZmluZV9rZXkoKSwgdG8gYXZvaWQKKwkgIGluZmluaXRlIGxvb3AgaWYgdGhlIGdpdmVuIHN0cmluZyBoYXBwZW5zIHRvIGJlIGEgc3Vic3RyaW5nIG9mIG90aGVyCisJICBzdHJpbmdzIHdoaWNoIGFyZSBhc3NpZ25lZCB0byBrZXlzIChyZXBvcnQgYnkgSm9obiBNY0N1dGNoYW4pLgorCSsgYWRkIGtleV9kZWZpbmVkKCkgZnVuY3Rpb24sIHRvIHRlbGwgd2hpY2gga2V5Y29kZSBhIHN0cmluZyBpcyBib3VuZAorCSAgdG8gKGRpc2N1c3Npb24gd2l0aCBKb2huIE1jQ3V0Y2hhbiA8dHRiQHRlbnRhY2xlLmRocy5vcmc+KS4KKwkrIGNvcnJlY3Qga2V5Ym91bmQoKSwgd2hpY2ggcmVwb3J0ZWQgZGVmaW5pdGlvbnMgaW4gdGhlIHdyb25nIHRhYmxlLAorCSAgaS5lLiwgdGhlIGxpc3Qgb2YgZGVmaW5pdGlvbnMgd2hpY2ggYXJlIGRpc2FibGVkIGJ5IGtleW9rKCkuCisJKyBtb2RpZnkgZGVtb19rZXlkZWYuYyB0byBzaG93IHRoZSBkZXRhaWxzIGl0IGNoYW5nZXMsIGFuZCB0byBjaGVjaworCSAgZm9yIGVycm9ycy4KKworMjAwMzAzMDEKKwkrIHJlc3RydWN0dXJlZCB0ZXN0L2NvbmZpZ3VyZSBzY3JpcHQsIG1ha2UgaXQgd29yayBmb3IgbGlibmN1cnNlc3cuCisJKyBhZGQgZGVzY3JpcHRpb24gb2YgbGlua19maWVsZHR5cGUoKSB0byBtYW5wYWdlIChyZXBvcnQgYnkKKwkgIEwgRGVlIEhvbHRzY2xhdyA8ZGVlQHN1bmJlbHRzb2Z0LmNvbT4pLgorCisyMDAzMDIyMgorCSsgY29ycmVjdGVkIGlmZGVmJ3MgcmVsYXRpbmcgdG8gY29uZmlndXJlIGNoZWNrIGZvciB3Y2hhcl90LCBldGMuCisJKyBpZiB0aGUgb3V0cHV0IGlzIGEgc29ja2V0IG9yIG90aGVyIG5vbi10dHkgZGV2aWNlLCB1c2UgMSBtaWxsaXNlY29uZAorCSAgZm9yIHRoZSBjb3N0IGluIG12Y3VyOyBwcmV2aW91c2x5IGl0IHdhcyA5IG1pbGxpc2Vjb25kcyBiZWNhdXNlIHRoZQorCSAgYmF1ZHJhdGUgd2FzIG5vdCBrbm93bi4KKwkrIGluIF9uY19nZXRfdHR5X21vZGUoKSwgaW5pdGlhbGl6ZSB0aGUgVFRZIGJ1ZmZlciBvbiBlcnJvciwgc2luY2UKKwkgIGdsaWJjIGNvcGllcyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhhdCBjYXNlLCBhcyBub3RlZCBieSB2YWxncmluZC4KKwkrIG1vZGlmeSB0cHV0IHRvIHVzZSB0aGUgc2FtZSBwYXJhbWV0ZXIgYW5hbHlzaXMgYXMgdHBhcm0oKSBkb2VzLCB0bworCSAgcHJvdmlkZSBmb3IgdXNlci1kZWZpbmVkIHN0cmluZ3MsIGUuZy4sIGZvciB4dGVybSB0aXRsZSwgYQorCSAgY29ycmVzcG9uZGluZyBjYXBhYmlsaXR5IG1pZ2h0IGJlCisJCXRpdGxlPVxFXTI7JXAxJXNeRywKKwkrIG1vZGlmeSBNS2xpYl9nZW4uc2ggdG8gYXZvaWQgcGFzc2luZyAiIyIgdG9rZW5zIHRocm91Z2ggdGhlIEMKKwkgIHByZXByb2Nlc3Nvci4gIFRoaXMgd29ya3MgYXJvdW5kIE1hYyBPUyBYJ3MgcHJlcHJvY2Vzc29yLCB3aGljaAorCSAgaW5zaXN0cyBvbiBhZGRpbmcgYSBibGFuayBvbiBlYWNoIHNpZGUgb2YgdGhlIHRva2VuIChyZXBvcnQvYW5hbHlzaXMKKwkgIGJ5IEtldmluIE11cnBoeSA8bXVycGh5QGdlbm9tZS5jaG9wLmVkdT4pLgorCisyMDAzMDIxNQorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3Igd2NoYXJfdCBhbmQgd2ludF90IHR5cGVzLCByYXRoZXIgdGhhbiByZWx5CisJICBvbiBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuICBBbHNvIHdvcmsgYXJvdW5kIGZvciBnY2MgZml4aW5jbHVkZQorCSAgYnVnIHdoaWNoIGNyZWF0ZXMgYSBzaGFkb3cgY29weSBvZiBjdXJzZXMuaCBpZiBpdCBzZWVzIHRoZXNlIHN5bWJvbHMKKwkgIGFwcGFyZW50bHkgdHlwZWRlZidkLgorCSsgaWYgZGF0YWJhc2UgaXMgZGlzYWJsZWQsIGRvIG5vdCBnZW5lcmF0ZSBydW5fdGljLnNoCisJKyBtaW5vciBmaXhlcyBmb3IgbWVtb3J5LWxlYWsgY2hlY2tpbmcgd2hlbiB0ZXJtY2FwIGlzIHJlYWQuCisKKzIwMDMwMjA4CisJKyBhZGQgY2hlY2tpbmcgaW4gdGljIGZvciBpbmNvbXBsZXRlIGxpbmUtZHJhd2luZyBjaGFyYWN0ZXIgbWFwcGluZy4KKwkrIHVwZGF0ZSBjb25maWd1cmUgc2NyaXB0IHRvIHJlZmxlY3QgZml4IGZvciBBQ19QUk9HX0dDQ19UUkFESVRJT05BTCwKKwkgIHdoaWNoIGlzIGJyb2tlbiBpbiBhdXRvY29uZiAyLjV4IGZvciBNYWMgT1MgWCAxMC4yLjMgKHJlcG9ydCBieQorCSAgR2VyYmVuIFdpZXJkYSA8U2hlcmxvY2tAcm5hLm5sPikuCisJKyBtYWtlIHJldHVybiB2YWx1ZSBmcm9tIF9uY19wcmludGZfc3RyaW5nKCkgY29uc2lzdGVudC4gIEJlZm9yZSwKKwkgIGRlcGVuZGluZyBvbiB3aGV0aGVyIC0tZW5hYmxlLXNhZmUtc3ByaW50ZiB3YXMgdXNlZCwgaXQgbWlnaHQgbm90IGJlCisJICBjYWNoZWQgZm9yIHJlYWxsb2NhdGluZy4KKworMjAwMzAyMDEKKwkrIG1pbm9yIGZpeGVzIGZvciBtZW1vcnktbGVhayBjaGVja2luZyBpbiBsaWJfdHBhcm0uYywgaGFyZHNjcm9sbC5jCisJKyBjb3JyZWN0IGEgcG90ZW50aWFsbHktdW5pbml0aWFsaXplZCB2YWx1ZSBpZiBfcmVhZF90ZXJtdHlwZSgpIGRvZXMKKwkgIG5vdCByZWFkIGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZCAocmVwb3J0IGJ5IFdvbGZnYW5nIFJvaGRld2FsZAorCSAgPHdyNkB1bmkuZGU+KS4KKwkrIGNvcnJlY3Qgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgdGhlIGFjbG9jYWwubTQgbWFjcm9zIHJlbGllZCBvbiBjYWNoZQorCSAgdmFyaWFibGUgbmFtZXMgd2hpY2ggd2VyZSBpbmNvbXBhdGlibGUgKGFzIHVzdWFsKSBiZXR3ZWVuIGF1dG9jb25mCisJICAyLjEzIGFuZCAyLjV4LCBjYXVzaW5nIHRoZSB0ZXN0IGZvciBicm9rZW4tbGlua2VyIHRvIGdpdmUgaW5jb3JyZWN0CisJICByZXN1bHRzIChyZXBvcnRzIGJ5IEdlcmJlbiBXaWVyZGEgPFNoZXJsb2NrQHJuYS5ubD4gYW5kIFRob21hcyBFc3NlcgorCSAgPHRlQGRicy51bmktaGFubm92ZXIuZGU+KS4KKwkrIGRvIG5vdCB0cnkgdG8gb3BlbiBncG0gbW91c2UgZHJpdmVyIGlmIHN0YW5kYXJkIG91dHB1dCBpcyBub3QgYSB0dHk7CisJICB0aGUgZ3BtIGxpYnJhcnkgZG9lcyBub3QgbWFrZSB0aGlzIGNoZWNrIChidWcgcmVwb3J0IGZvciBkaWFsb2cKKwkgIGJ5IERhdmlkIE9saXZlaXJhIDxkYXZpZG9saXZlaXJhQGRldmVsb3AucHJvem9uZS53cz4pLgorCisyMDAzMDEyNQorCSsgbW9kaWZpZWQgZW14LnNyYyB0byBjb3JyZXNwb25kIG1vcmUgY2xvc2VseSB0byB0ZXJtaW5mby5zcmMsIGFkZGVkCisJICBlbXgtYmFzZSB0byB0aGUgbGF0dGVyIC1URAorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gZm9yIEZyZWVCU0Qgc3lzbW91c2UsIC0td2l0aC1zeXNtb3VzZSwgYW5kCisJICBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhhdCBpbiBsaWJfbW91c2UuYywgbGliX2dldGNoLmMKKworMjAwMzAxMTgKKwkrIHJldmVydCAyMDAzMDEwNSBjaGFuZ2UgdG8gY2FuX2NsZWFyX3dpdGgoKSwgZG9lcyBub3Qgd29yayBmb3IgdGhlCisJICBjYXNlIHdoZXJlIHRoZSB1cGRhdGUgaXMgbWFkZSBvbiBjZWxscyB3aGljaCBhcmUgYmxhbmtzIHdpdGgKKwkgIGF0dHJpYnV0ZXMsIGUuZy4sIHJldmVyc2UuCisJKyBpbXByb3ZlIGlmZGVmJ3MgdG8gZ3VhcmQgYWdhaW5zdCByZWRlZmluaXRpb24gb2Ygd2NoYXJfdCBhbmQgd2ludF90CisJICBpbiBjdXJzZXMuaCAocmVwb3J0IGJ5IFVycyBKYW5zZW4pLgorCisyMDAzMDExMQorCSsgaW1wcm92ZSBtdmN1cigpIGJ5IGNoZWNraW5nIGlmIGl0IGlzIHNhZmUgdG8gbW92ZSB3aGVuIHZpZGVvCisJICBhdHRyaWJ1dGVzIGFyZSBzZXQgKG1zZ3IpLCBhbmQgaWYgbm90LCByZXNldC9yZXN0b3JlIGF0dHJpYnV0ZXMKKwkgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHJhdGhlciB0aGFuIGRvaW5nIGl0IHNlcGFyYXRlbHkgaW4gdGhlIEdvVG8oKQorCSAgZnVuY3Rpb24gaW4gdHR5X3VwZGF0ZS5jIChzdWdnZXN0ZWQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgYWRkIGEgbWVzc2FnZSBpbiBydW5fdGljLmluIHRvIGV4cGxhaW4gbW9yZSBjbGVhcmx5IHdoYXQgZG9lcyBub3QKKwkgIHdvcmsgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgZm9yIC91c3IvbGliL3Rlcm1pbmZvCisJICBvbiBPUy8yIGFuZCBvdGhlciBwbGF0Zm9ybXMgd2l0aCBubyBzeW1ib2xpYyBsaW5rcyAocmVwb3J0IGJ5IEpvaG4KKwkgIFBvbHRlcmFrKS4KKwkrIGNoYW5nZSBzZXZlcmFsIHNlZCBzY3JpcHRzIHRvIGF2b2lkIHVzaW5nICJcKyIgc2luY2UgaXQgaXMgbm90IGEgQlJFCisJICAoYmFzaWMgcmVndWxhciBleHByZXNzaW9uKS4gIE9uZSBpbnN0YW5jZSBjYXVzZWQgdGVybWluZm8uNSB0byBiZQorCSAgbWlzZm9ybWF0dGVkIG9uIEZyZWVCU0QgKHJlcG9ydCBieSBLYXp1byBIb3Jpa2F3YQorCSAgPGhvcmlrYXdhQEZyZWVCU0Qub3JnPiAoc2VlIEZyZWVCU0QgZG9jcy80NjcwOSkpLgorCSsgY29ycmVjdCBtaXNzcGVsbGVkICd3aW50X3QnIGluIGN1cnNfZ2V0X3djaC4zeCAoTWljaGFlbCBFbGtpbnMpLgorCisyMDAzMDEwNQorCSsgaW1wcm92ZSBkZXNjcmlwdGlvbiBvZiB0ZXJtaW5mbyBvcGVyYXRvcnMsIGVzcGVjaWFsbHkgc3RhdGljL2R5bmFtaWMKKwkgIHZhcmlhYmxlcyAoY29tbWVudHMgYnkgTWFyayBJIE1hbm5pbmcgSVYgPG1hcms0dGhAZWFydGhsaW5rLm5ldD4pLgorCSsgZGVtb25zdHJhdGUgdXNlIG9mIEZJRUxEVFlQRSBieSBtb2RpZnlpbmcgdGVzdC9uY3Vyc2VzICdyJyB0ZXN0IHRvCisJICB1c2UgdGhlIHByZWRlZmluZWQgVFlQRV9BTFBIQSBmaWVsZC10eXBlLCBhbmQgYnkgZGVmaW5pbmcgYQorCSAgc3BlY2lhbGl6ZWQgdHlwZSBmb3IgdGhlIG1pZGRsZSBpbml0aWFsL25hbWUuCisJKyBmaXggTUt0ZXJtaW5mby5zaCwgYW5vdGhlciB3b3JrYXJvdW5kIGZvciBQT1NJWExZX0NPUlJFQ1QgbWlzZmVhdHVyZQorCSAgb2Ygc2VkIDQuMAorCT4gcGF0Y2ggYnkgUGhpbGlwcGUgQmxhaW46CisJKyBvcHRpbWl6ZSBjYW5fY2xlYXJfd2l0aCgpIGEgbGl0dGxlIGJ5IHRlc3RpbmcgZmlyc3QgaWYgdGhlIHBhcmFtZXRlcgorCSAgaXMgaW5kZWVkIGEgImJsYW5rIi4KKwkrIHNpbXBsaWZ5IENsckJvdHRvbSgpIGEgbGl0dGxlIGJ5IGFsbG93aW5nIGl0IHRvIHVzZSBjbHJfZW9zIHRvIGNsZWFyCisJICBzZWN0aW9ucyBhcyBzbWFsbCBhcyBvbmUgbGluZS4KKwkrIGltcHJvdmUgQ2xyVG9FT0woKSBieSBjaGVja2luZyBpZiBjbHJfZW9zIGlzIGF2YWlsYWJsZSBiZWZvcmUgdHJ5aW5nCisJICB0byB1c2UgaXQuCisJKyB1c2UgdHB1dHMoKSByYXRoZXIgdGhhbiBwdXRwKCkgaW4gYSBmZXcgY2FzZXMgaW4gdHR5X3VwZGF0ZS5jIHNpbmNlCisJICB0aGUgY29ycmVzcG9uZGluZyBkZWxheXMgYXJlIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzCisJICBhZmZlY3RlZDogcmVwZWF0X2NoYXIsIGNscl9lb3MsIGNoYW5nZV9zY3JvbGxfcmVnaW9uLgorCisyMDAyMTIzMQorCSsgcmV3cml0ZSBvZiBsaWJfYWNzLmMgY29uZmxpY3RzIHdpdGggY29weWluZyBvZiBTQ1JFRU4gYWNzX21hcCB0by9mcm9tCisJICBnbG9iYWwgYWNzX21hcFtdIGFycmF5OyByZW1vdmVkIHRoZSBsaW5lcyB0aGF0IGRpZCB0aGUgY29weWluZy4KKworMjAwMjEyMjgKKwkrIGNoYW5nZSBzb21lIG92ZXJsb29rZWQgdHB1dHMoKSBjYWxscyBpbiBzY3JvbGxpbmcgY29kZSB0byB1c2UgcHV0cCgpCisJICAocmVwb3J0IGJ5IFBoaWxpcHBlIEJsYWluKS4KKwkrIG1vZGlmeSBsaWJfZ2V0Y2guYyB0byBhdm9pZCByZWN1cnNpb24gdmlhIHdnZXRuc3RyKCkgd2hlbiB0aGUgaW5wdXQKKwkgIGlzIG5vdCBhIHR0eSBhbmQgY29uc2VxdWVudGx5IG1vZGUtY2hhbmdlcyBkbyBub3Qgd29yayAocmVwb3J0IGJ5CisJICA8Ui5DaGFtYmVybGluQHF1ZXJpeC5jb20+KS4KKwkrIHJld3JvdGUgbGliX2Fjcy5jIHRvIGFsbG93IFB1dEF0dHJDaGFyKCkgdG8gZGVjaWRlIGhvdyB0byByZW5kZXIKKwkgIGFsdGVybmF0ZS1jaGFyYWN0ZXJzLCBpLmUuLCB0byB3b3JrIHdpdGggTGludXggY29uc29sZSBhbmQgVVRGLTgKKwkgIGxvY2FsZS4KKwkrIGNvcnJlY3QgbGluZS9jb2x1bW4gcmVmZXJlbmNlIGluIGFkanVzdF93aW5kb3coKSwgbmVlZGVkIHRvIG1ha2UKKwkgIHNwZWNpYWwgd2luZG93cyBzdWNoIGFzIGN1cnNjciB0cmFjayBwcm9wZXJseSB3aGVuIHJlc2l6aW5nIChyZXBvcnQKKwkgIGJ5IEx1Y2FzIEdvbnplIDxsZ29uemVAcGFuaXguY29tPikuCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIGNvcnJlY3QgdGhlIHZhbHVlIHVzZWQgZm9yIGJsYW5rIGluIENsckJvdHRvbSgpIChicm9rZW4gaW4gMjAwMDA3MDgpLgorCSsgY29ycmVjdCBhbiBvZmYtYnktb25lIGluIEdvVG8oKSBwYXJhbWV0ZXIgaW4gX25jX3Njcm9sbG4oKS4KKworMjAwMjEyMjEKKwkrIGNoYW5nZSBzZXZlcmFsIHRwdXRzKCkgY2FsbHMgaW4gc2Nyb2xsaW5nIGNvZGUgdG8gdXNlIHB1dHAoKSwgdG8KKwkgIGVuYWJsZSBwYWRkaW5nIHdoaWNoIG1heSBiZSBuZWVkZWQgZm9yIHNvbWUgdGVybWluYWxzIChwYXRjaCBieQorCSAgUGhpbGlwcGUgQmxhaW4pLgorCSsgdXNlICclJyBhcyBzZWQgc3Vic3RpdHV0ZSBkZWxpbWl0ZXIgaW4gcnVuX3RpYyBzY3JpcHQgdG8gYXZvaWQKKwkgIHByb2JsZW1zIHdpdGggcGF0aG5hbWUgZGVsaW1pdGVycyBzdWNoIGFzICc6JyBhbmQgJ0AnIChyZXBvcnQgYnkgSm9obgorCSAgUG9sdGVyYWspLgorCSsgaW1wbGVtZW50IGEgd29ya2Fyb3VuZCBzbyB0aGF0IGxpbmUtZHJhd2luZyB3b3JrcyB3aXRoIHNjcmVlbidzCisJICBjcmlwcGxlZCBVVEYtOCBzdXBwb3J0ICh0ZXN0ZWQgd2l0aCAzLjkuMTMpLiAgVGhpcyBvbmx5IHdvcmtzIHdpdGgKKwkgIHRoZSB3aWRlLWNoYXJhY3RlciBzdXBwb3J0ICgtLWVuYWJsZS13aWRlYyk7IHRoZSBub3JtYWwgbGlicmFyeSB3aWxsCisJICBzaW1wbHkgc3VwcHJlc3MgbGluZS1kcmF3aW5nIHdoZW4gcnVubmluZyBpbiBhIFVURi04IGxvY2FsZSBpbiBzY3JlZW4uCisKKzIwMDIxMjE0CisJKyBhbGxvdyBCVUlMRF9DQyBhbmQgcmVsYXRlZCBjb25maWd1cmUgc2NyaXB0IHZhcmlhYmxlcyB0byBiZQorCSAgb3ZlcnJpZGRlbiBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKwkrIG1ha2UgYnVpbGQtdG9vbHMgdmFyaWFibGVzIGluIG5jdXJzZXMvTWFrZWZpbGUuaW4gY29uc2lzdGVudCB3aXRoCisJICB0aGUgY29uZmlndXJlIHNjcmlwdCB2YXJpYWJsZXMgKHJlcG9ydCBieSBNYWNpZWogVyBSb3p5Y2tpKS4KKwkrIG1vZGlmeSBuY3Vyc2VzL21vZHVsZXMgdG8gYWxsb3cKKwkJY29uZmlndXJlIC0tZGlzYWJsZS1sZWFrcyAtLWRpc2FibGUtZXh0LWZ1bmNzCisJICB0byBidWlsZCAocmVwb3J0IGJ5IEdhcnkgU2FtdWVsc29uKS4KKwkrIGZpeCBhIGZldyBwbGFjZXMgaW4gY29uZmlndXJlLmluIHdoaWNoIGxhY2tlZCBxdW90ZXMgKHJlcG9ydCBieQorCSAgR2FyeSBTYW11ZWxzb24gPGdhcnkuc2FtdWVsc29uQHZlcml6b24uY29tPikuCisJKyBjb3JyZWN0IGhhbmRsaW5nIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIHdhZGRjaF9saXRlcmFsKCkgd2hpY2gKKwkgIGZvcmNlIHdyYXBwaW5nIGJlY2F1c2UgdGhleSBhcmUgc3RhcnRlZCB0b28gbGF0ZSBvbiB0aGUgbGluZSAocmVwb3J0CisJICBieSBTYW0gVmFyc2hhdmNoaWspLgorCSsgc21hbGwgZml4IGZvciBDRl9HTkFUX1ZFUlNJT04gdG8gaWdub3JlIHRoZSBoZWxwLW1lc3NhZ2Ugd2hpY2gKKwkgIGduYXRtYWtlIGFkZHMgdG8gaXRzIHZlcnNpb24tbWVzc2FnZS4KKwk+IE1hY2llaiBXIFJvenlja2kgPG1hY3JvQGRzMi5wZy5nZGEucGw+OgorCSsgdXNlIEFDX0NIRUNLX1RPT0wgdG8gZ2V0IHByb3BlciB2YWx1ZXMgZm9yIEFSIGFuZCBMRCBmb3IgY3Jvc3MKKwkgIGNvbXBpbGluZy4KKwkrIHVzZSAkY3Jvc3NfY29tcGlsaW5nIHZhcmlhYmxlIGluIGNvbmZpZ3VyZSBzY3JpcHQgcmF0aGVyIHRoYW4KKwkgIGNvbXBhcmluZyAkaG9zdF9hbGlhcyBhbmQgJHRhcmdldCBhbGlhcywgc2luY2UgImhvc3QiIGlzCisJICB0cmFkaXRpb25hbGx5IG1pc3VzZWQgaW4gYXV0b2NvbmYgdG8gcmVmZXIgdG8gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKwkrIGNoYW5nZSBjb25maWd1cmUgLS1oZWxwIG1lc3NhZ2UgdG8gdXNlICJidWlsZCIgcmF0aGVyIHRoYW4gImhvc3QiCisJICB3aGVuIHJlZmVycmluZyB0byB0aGUgLS13aXRoLWJ1aWxkLVhYWCBvcHRpb25zLgorCisyMDAyMTIwNgorCSsgbW9kaWZ5IENGX0dOQVRfVkVSU0lPTiB0byBwcmludCBnbmF0bWFrZSdzIHZlcnNpb24sIGFuZCB0byBhbGxvdyBmb3IKKwkgIHBvc3NpYmxlIGduYXQgdmVyc2lvbnMgc3VjaCBhcyAzLjIgKHJlcG9ydCBieSBDaHJpcyBMaW5nYXJkCisJICA8Y2hyaXNAc3RvY2t3aXRoLmNvLnVrPikuCisJKyBtb2RpZnkgI2RlZmluZSdzIGZvciBDS0lMTCBhbmQgb3RoZXIgZGVmYXVsdCBjb250cm9sIGNoYXJhY3RlcnMgaW4KKwkgIHRzZXQgdG8gdXNlIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHZhbHVlcyBpZiB0aGV5IGFyZSBkZWZpbmVkLgorCSsgY29ycmVjdCBpbnRlcmNoYW5nZWQgZGVmYXVsdHMgZm9yIGtpbGwgYW5kIGludGVycnVwdCBjaGFyYWN0ZXJzCisJICBpbiB0c2V0LCB3aGljaCBjYXVzZWQgaXQgdG8gcmVwb3J0IHVubmVjZXNzYXJpbHkgKERlYmlhbiAjMTcxNTgzKS4KKwkrIHJlcGFpciBjaGVjayBmb3IgbWlzc2luZyBDKysgY29tcGlsZXIsIHdoaWNoIGlzIGJyb2tlbiBpbiBhdXRvY29uZgorCSAgMi41eCBieSBoYXJkY29kaW5nIGl0IHRvIGcrKyAocmVwb3J0IGJ5IE1hcnRpbiBNb2tyZWpzKS4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgKDIwMDItMTEtMzApCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBza2lwIC0td2l0aC1zaGFyZWQsIGV0Yy4sIHdoZW4gdGhlCisJICAtLXdpdGgtbGlidG9vbCBvcHRpb24gaXMgZ2l2ZW4sIHNpbmNlIHRoZXkgd291bGQgYmUgaWdub3JlZCBhbnl3YXkuCisJKyBmaXggdG8gYWxsb3cgImNvbmZpZ3VyZSAtLXdpdGgtbGlidG9vbCAtLXdpdGgtdGVybWxpYiIgdG8gYnVpbGQuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBzaG93IHZlcnNpb24gbnVtYmVyIG9mIGxpYnRvb2wsIHRvIGhlbHAKKwkgIHdpdGggYnVnIHJlcG9ydHMuICBsaWJ0b29sIHN0aWxsIGdldHMgY29uZnVzZWQgaWYgdGhlIGluc3RhbGxlZAorCSAgbmN1cnNlcyBsaWJyYXJpZXMgYXJlIG9sZCwgc2luY2UgaXQgaWdub3JlcyB0aGUgLUwgb3B0aW9ucyBhdCBzb21lCisJICBwb2ludCAodGVzdGVkIHdpdGggbGlidG9vbCAxLjMuMyBhbmQgMS40LjMpLgorCSsgcmVvcmRlciBjb25maWd1cmUgc2NyaXB0J3MgdXBkYXRpbmcgb2YgJENQUEZMQUdTIGFuZCAkQ0ZMQUdTIHRvCisJICBwcmV2ZW50IC1JIG9wdGlvbnMgaW4gdGhlIHVzZXIncyBlbnZpcm9ubWVudCBmcm9tIGludHJvZHVjaW5nCisJICBjb25mbGljdHMgd2l0aCB0aGUgYnVpbGQgLUkgb3B0aW9ucyAobWF5IGJlIHJlbGF0ZWQgdG8gcmVwb3J0cyBieQorCSAgUGF0cmljayBBc2ggYW5kIEdlb3JnZSBHb2ZmZSkuCisJKyByZW5hbWUgdGVzdC9kZWZpbmVfa2V5LmMgdG8gdGVzdC9kZW1vX2RlZmtleS5jLCB0ZXN0L2tleW9rLmMgdG8KKwkgIHRlc3QvZGVtb19rZXlvay5jIHRvIGFsbG93IGJ1aWxkaW5nIHRoZXNlIHdpdGggbGlidG9vbC4KKworMjAwMjExMjMKKwkrIGFkZCBleGFtcGxlIHByb2dyYW0gdGVzdC9kZWZpbmVfa2V5LmMgZm9yIGRlZmluZV9rZXkoKS4KKwkrIGFkZCBleGFtcGxlIHByb2dyYW0gdGVzdC9rZXlvay5jIGZvciBrZXlvaygpLgorCSsgYWRkIGV4YW1wbGUgcHJvZ3JhbSB0ZXN0L2luc193aWRlLmMgZm9yIHdpbnNfd2NoKCkgYW5kIHdpbnNfd3N0cigpLgorCSsgbW9kaWZ5IHdpbnNfd2NoKCkgYW5kIHdpbnNfd3N0cigpIHRvIGludGVycHJldCB0YWJzIGJ5IHVzaW5nIHRoZQorCSAgd2luc2NoKCkgaW50ZXJuYWwgZnVuY3Rpb24uCisJKyBtb2RpZnkgc2V0Y2NoYXIoKSB0byBhbGxvdyBmb3Igd2NoYXJfdCBpbnB1dCBzdHJpbmdzIHRoYXQgaGF2ZQorCSAgbW9yZSB0aGFuIG9uZSBzcGFjaW5nIGNoYXJhY3Rlci4KKworMjAwMjExMTYKKwkrIGZpeCBhIGJvdW5kYXJ5IGNoZWNrIGluIGxpYl9pbnNjaC5jIChwYXRjaCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyBjaGFuZ2UgdHlwZSBmb3IgKnByaW50dyBmdW5jdGlvbnMgZnJvbSBOQ1VSU0VTX0NPTlNUIHRvIGNvbnN0CisJICAocHJvbXB0ZWQgYnkgY29tbWVudCBieSBQZWRybyBQYWxob3RvIE1hdG9zIDxwbHBtQG1lZ2EuaXN0LnV0bC5wdD4sCisJICBidXQgcmVhbGx5IGZyb20gYSBub3RlIG9uIFgvT3BlbidzIHdlYnNpdGUgc3RhdGluZyB0aGF0IGVpdGhlciBpcworCSAgYWNjZXB0YWJsZSwgYW5kIHRoZSBsYXR0ZXIgd2lsbCBiZSB1c2VkIGluIGEgZnV0dXJlIHJldmlzaW9uKS4KKwkrIGFkZCB4dGVybS0xMDAyLCB4dGVybS0xMDAzIHRlcm1pbmZvIGVudHJpZXMgdG8gZGVtb25zdHJhdGUgY2hhbmdlcyBpbgorCSAgbGliX21vdXNlLmMgKDIwMDIxMDI2KSAtVEQKKwkrIGFkZCBzY3JlZW4tYmNlLCBzY3JlZW4tcyBlbnRyaWVzIGZyb20gc2NyZWVuIDMuOS4xMyAocmVwb3J0IGJ5CisJICBBZGFtIExhenVyIDx6YWxAZGViaWFuLm9yZz4pIC1URAorCSsgYWRkIG10ZXJtIHRlcm1pbmZvIGVudHJpZXMgLVRECisKKzIwMDIxMTA5CisJKyBzcGxpdC1vdXQgdXNlZnVsIGZyYWdtZW50cyBpbiB0ZXJtaW5mbyBmb3IgdnQxMDAgYW5kIHZ0MjIwIG51bWVyaWMKKwkgIGtleXBhZCwgaS5lLiwgdnQxMDAra2V5cGFkLCB2dDEwMCtwZmtleXMsIHZ0MTAwK2Zua2V5cyBhbmQKKwkgIHZ0MjIwK2tleXBhZC4gIFRoZSBsYXN0IGFzIGVtYmVkZGVkIGluIHZhcmlvdXMgZW50cmllcyBoYWQga2EzIGFuZAorCSAga2IyIGludGVyY2hhbmdlZCAocmVwb3J0L2Rpc2N1c3Npb24gd2l0aCBMZW9uYXJkIGRlbiBPdHRvbGFuZGVyCisJICA8bGVvbmFyZGpvQGhldG5ldC5ubD4pLgorCSsgYWRkIGNoZWNrIGluIHRpYyBmb3Iga2V5cGFkcyBjb25zaXN0ZW50IHdpdGggdnQxMDAgbGF5b3V0LgorCSsgaW1wcm92ZSBjaGVja3MgaW4gdGljIGZvciBjb2xvciBjYXBhYmlsaXRpZXMKKworMjAwMjExMDIKKwkrIGNoZWNrIGZvciBtaXNzaW5nL2VtcHR5L2lsbGVnYWwgdGVybWluZm8gbmFtZSBpbiBfbmNfcmVhZF9lbnRyeSgpCisJICAocmVwb3J0IGJ5IE1hcnRpbiBNb2tyZWpzLCB3aGVyZSAkVEVSTSB3YXMgc2V0IHRvIGFuIGVtcHR5IHN0cmluZykuCisJKyByZXdyb3RlIGxpYl9pbnNjaC5jLCBjb21iaW5pbmcgaXQgd2l0aCBsaWJfaW5zc3RyLmMgc28gYm90aCBoYW5kbGUKKwkgIHRhYiBhbmQgb3RoZXIgY29udHJvbCBjaGFyYWN0ZXJzIGNvbnNpc3RlbnRseSAocmVwb3J0IGJ5IFBoaWxpcHBlCisJICBCbGFpbikuCisJKyByZW1vdmUgYW4gI3VuZGVmIGZvciBLRVlfRVZFTlQgZnJvbSBjdXJzZXMudGFpbCB1c2VkIGluIHRoZQorCSAgZXhwZXJpbWVudGFsIE5DVVJTRVNfV0dFVENIX0VWRU5UUyBmZWF0dXJlLiAgVGhlICN1bmRlZiBjb25mdXNlcworCSAgZHBrZydzIGJ1aWxkIHNjcmlwdCAoRGViaWFuICMxNjU4OTcpLgorCSsgZml4IE1LbGliX2dlbi5zaCwgd29ya2luZyBhcm91bmQgdGhlIGlyb25pY2FsbHkgbmFtZWQgUE9TSVhMWV9DT1JSRUNUCisJICBmZWF0dXJlIG9mIEdOVSBzZWQgNC4wIChyZXBvcnRlZCBieSBFcnZpbiBOZW1ldGggPGFpcndpbkBpbmYuYm1lLmh1PikuCisKKzIwMDIxMDI2CisJKyBpbXBsZW1lbnQgbG9naWMgaW4gbGliX21vdXNlLmMgdG8gaGFuZGxlIHBvc2l0aW9uIHJlcG9ydHMgd2hpY2ggYXJlCisJICBnZW5lcmF0ZWQgd2hlbiBYRnJlZTg2IHh0ZXJtIGlzIGluaXRpYWxpemVkIHdpdGggcHJpdmF0ZSBtb2RlcyAxMDAyCisJICBvciAxMDAzLiAgVGhlc2UgYXJlIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyB0aGUKKwkgIFJFUE9SVF9NT1VTRV9QT1NJVElPTiBtYXNrLCB3aGljaCB3YXMgbm90IGltcGxlbWVudGVkLiAgVGVzdGVkIGJvdGgKKwkgIHdpdGggbmN1cnNlcyAnYScgbWVudSAocHJvbXB0ZWQgYnkgZGlzY3Vzc2lvbiB3aXRoIExhcnJ5IFJpZWRlbAorCSAgPExhcnJ5QFJpZWRlbC5vcmc+KS4KKwkrIG1vZGlmeSBsaWJfbW91c2UuYyB0byBsb29rIGZvciAiWE0iIHRlcm1pbmZvIHN0cmluZywgd2hpY2ggYWxsb3dzCisJICBvbmUgdG8gb3ZlcnJpZGUgdGhlIGVzY2FwZSBzZXF1ZW5jZSB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIG1vdXNlCisJICBtb2RlLiAgSW4gcGFydGljdWxhciB0aGlzIHdvcmtzIGZvciBYRnJlZTg2IHh0ZXJtIHByaXZhdGUgbW9kZXMKKwkgIDEwMDIgYW5kIDEwMDMuICBJZiAiWE0iIGlzIG1pc3NpbmcgKG5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4dGVuZGVkCisJICBuYW1lKSwgbGliX21vdXNlIHVzZXMgdGhlIGNvbnZlbnRpb25hbCBwcml2YXRlIG1vZGUgMTAwMC4KKwkrIGNvcnJlY3QgTk9UX0xPQ0FMKCkgbWFjcm8gaW4gbGliX212Y3VyLmMgdG8gcmVmZXIgdG8gc2NyZWVuX2NvbHVtbnMKKwkgIHdoZXJlIGl0IHVzZWQgc2NyZWVuX2xpbmVzIChyZXBvcnQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgY29ycmVjdCBtYWtlZmlsZSBydWxlcyBmb3IgdGhlIGNhc2Ugd2hlbiBib3RoIC0td2l0aC1saWJ0b29sIGFuZAorCSAgLS13aXRoLWdwbSBhcmUgZ2l2ZW4gKHJlcG9ydCBieSBNciBFX1QgPHRyb2xsQGxvZ2kubmV0LmF1PikuCisJKyBhZGQgbm90ZSB0byB0ZXJtaW5mbyBtYW5wYWdlIHJlZ2FyZGluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbgorCSAgc2V0YWYvc2V0YWIgYW5kIHNldGYvc2V0YiBjYXBhYmlsaXRpZXMgKHJlcG9ydCBieSBQYXZlbCBSb3NraW4pLgorCisyMDAyMTAxOQorCSsgcmVtb3ZlIHJlZHVuZGFudCBpbml0aWFsaXphdGlvbiBvZiBUQUJTSVpFIGluIG5ld3Rlcm0oKSwgc2luY2UgaXQgaXMKKwkgIGFscmVhZHkgZG9uZSBpbiBzZXR1cHRlcm0oKSAocmVwb3J0IGJ5IFBoaWxpcHBlIEJsYWluKS4KKwkrIGFkZCB0ZXN0L2luc2VydHMuYywgdG8gdGVzdCB3aW5uc3RyKCkgYW5kIHdpbnNjaCgpLgorCSsgcmVwbGFjZSAnc29ydCcgaW4gZGlzdC5tayB3aXRoIHNjcmlwdCB0aGF0IHNldHMgbG9jYWxlIHRvIFBPU0lYLgorCSsgdXBkYXRlIFVSTHMgaW4gYW5ub3VuY2UuaHRtbC5pbiAocGF0Y2ggYnkgRnJlZGVyaWMgTCBXIE1ldW5pZXIpLgorCSsgcmVtb3ZlIGdsaWJjIGFkZC1vbiBmaWxlcywgd2hpY2ggYXJlIG5vIGxvbmdlciBuZWVkZWQgKHJlcG9ydCBieQorCSAgRnJlZGVyaWMgTCBXIE1ldW5pZXIpLgorCisyMDAyMTAxMiA1LjMgcmVsZWFzZSBmb3IgdXBsb2FkIHRvIGZ0cC5nbnUub3JnCisJKyBtb2RpZnkgaWZkZWYncyBpbiBldGlwLmguaW4gdG8gYWxsb3cgdGhlIGV0aXAuaCBoZWFkZXIgdG8gY29tcGlsZQorCSAgd2l0aCBnY2MgMy4yIChwYXRjaCBieSBEaW1pdGFyIFpoZWtvdiA8amltbXlAaXMtdm4uYmc+KS4KKwkrIGFkZCBsb2dpYyB0byBzZXR1cHRlcm0oKSB0byBtYWtlIGl0IGxpa2UgaW5pdHNjcigpIGFuZCBuZXd0ZXJtKCksCisJICBieSBjaGVja2luZyBmb3IgJE5DVVJTRVNfVFJBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGVuYWJsaW5nCisJICB0aGUgZGVidWcgdHJhY2UgaW4gdGhhdCBjYXNlLgorCSsgbW9kaWZ5IHNldHVwdGVybSgpIHRvIGVuc3VyZSB0aGF0IGl0IGluaXRpYWxpemVzIHRoZSBiYXVkcmF0ZSwgZm9yCisJICBhcHBsaWNhdGlvbnMgc3VjaCBhcyB0cHV0IChyZXBvcnQgYnkgRnJhbmsgSGVuaWdtYW4pLgorCSsgbW9kaWZ5IGRlZmluaXRpb24gb2YgYml0cyB1c2VkIGZvciBjb21tYW5kLWxpbmUgYW5kIGxpYnJhcnkgZGVidWcKKwkgIHRyYWNlcyB0byBhdm9pZCBvdmVybGFwLCB1c2luZyBuZXcgZGVmaW5pdGlvbiBUUkFDRV9TSElGVCB0byByZWxhdGUKKwkgIHRoZSB0d28uCisJKyBkb2N1bWVudCB0cHV0J3MgaW50ZXJwcmV0YXRpb24gb2YgcGFyYW1ldGVyaXplZCBzdHJpbmdzIGFjY29yZGluZyB0bworCSAgd2hldGhlciBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgZXRjLiAoZGlzY3Vzc2lvbiB3aXRoIFJvYmVydCBEZSBCYXRoKS4KKworMjAwMjEwMDUgcHJlLXJlbGVhc2UKKwkrIGNvcnJlY3Qgd2lubndzdHIoKSB0byBhY2NvdW50IGZvciBub24tY2hhcmFjdGVyIGNlbGxzIGdlbmVyYXRlZCB3aGVuCisJICBhIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXIgaXMgYWRkZWQgKHJlcG9ydCBieSBNaWNoYWVsIEJpZW5pYQorCSAgPG1pY2hhZWxAdm9ybG9uLnBpbmcuZGU+KS4KKwkrIG1vZGlmeSBfbmNfdmlzd2J1ZjJuKCkgdG8gcHJvdmlkZSBiZXR0ZXIgcmVzdWx0cyB1c2luZyB3Y3RvbWIoKS4KKwkrIGNvcnJlY3QgbG9naWMgaW4gX25jX3ZhcmFyZ3MoKSB3aGljaCBicm9rZSB0cmFjaW5nIG9mIHBhcmFtZXRlcnMgZm9yCisJICBmb3JtYXRzIHN1Y2ggYXMgIiUuKnMiLgorCSsgY29ycmVjdCBzY2FsZSBmYWN0b3IgaW4gbGludXgtYyBhbmQgbGludXgtYy1uYyB0ZXJtaW5mbyBlbnRyaWVzCisJICAocmVwb3J0IEZsb3lkIERhdmlkc29uKS4KKwkrIGNoYW5nZSB0aWMgLUEgb3B0aW9uIHRvIC10LCBhZGQgdGhlIHNhbWUgb3B0aW9uIHRvIGluZm9jbXAgZm9yCisJICBjb25zaXN0ZW5jeS4KKwkrIGNvcnJlY3QgIiVjIiBpbXBsZW1lbnRhdGlvbiBpbiBsaWJfdHBhcm0uYywgd2hpY2ggZGlkIG5vdCBtYXAgYSBudWxsCisJICBjaGFyYWN0ZXIgdG8gYSAxMjggKGNmOiA5ODA2MjApIChwYXRjaCBieSBGcmFuayBIZW5pZ21hbgorCSAgPGZqaGVuaWdtYW5AbXVkLmNnbC51d2F0ZXJsb28uY2E+KS4KKworMjAwMjA5MjggcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSBNS2tleV9kZWZzLnNoIHRvIGNoZWNrIGZvciBQT1NJWCBzb3J0IC1rIG9wdGlvbiwgdXNlIHRoYXQgaWYKKwkgIGl0IGlzIGZvdW5kLCB0byBhY2NvbW1vZGF0ZSBuZXdlciB1dGlsaXR5IHdoaWNoIGRyb3BwZWQgdGhlCisJICBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yICtudW1iZXIgb3B0aW9ucyAocmVwb3J0ZWQgYnkgQW5kcmV5IEEKKwkgIENoZXJub3YpLgorCSsgbW9kaWZ5IGxpbnV4IHRlcm1pbmZvIGVudHJ5IHRvIHVzZSBjb2xvciBwYWxldHRlIGZlYXR1cmUgZnJvbQorCSAgbGludXgtYy1uYyBlbnRyeSAoY29tbWVudHMgYnkgVG9tYXN6IFdhc2lhayBhbmQgRmxveWQgRGF2aWRzb24pLgorCSsgcmVzdG9yZSBvcmlnaW5hbCBjb2xvciBkZWZpbml0aW9ucyBpbiBlbmR3aW4oKSBpZiBpbml0X2NvbG9yKCkgd2FzCisJICB1c2VkLCBhbmQgcmVzdW1lIHRob3NlIGNvbG9ycyBvbiB0aGUgbmV4dCBkb3VwZGF0ZSgpIG9yIHJlZnJlc2goKQorCSAgKHJlcG9ydCBieSBUb21hc3ogV2FzaWFrIDx0andhc2lha0Brb21wdXRvbS5jb20ucGw+KS4KKwkrIGltcHJvdmUgZGVidWctdHJhY2VzIGJ5IG1vZGlmeWluZyBNS2xpYl9nZW4uc2ggdG8gZ2VuZXJhdGUgY2FsbHMKKwkgIHRvIHJldHVybkJvb2woKSBhbmQgcmV0dXJuQXR0cigpLgorCSsgYWRkL3VzZSBfbmNfdmlzYnVmbigpIGFuZCBfbmNfdmlzd2J1Zm4oKSB0byBsaW1pdCB0aGUgZGVidWcgdHJhY2UKKwkgIG9mIHdhZGRuc3RyKCkgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHRvIG1hdGNoIHRoZSBwYXJhbWV0ZXJzIGFzIHVzZWQuCisJKyBhZGQvdXNlIF9uY19yZXRyYWNlX2Jvb2woKSBhbmQgX25jX3JldHJhY2VfdW5zaWduZWQoKS4KKwkrIGNvcnJlY3QgdHlwZSB1c2VkIGJ5IF9uY19yZXRyYWNlX2NodHlwZSgpLgorCSsgYWRkIGRlYnVnIHRyYWNlcyB0byBzb21lIGZ1bmN0aW9ucyBpbiBsaWJfbW91c2UuYworCSsgbW9kaWZ5IGxpYl9hZGRjaC5jIHRvIGhhbmRsZSBub24tc3BhY2luZyBjaGFyYWN0ZXJzLgorCSsgY29ycmVjdCBwYXJhbWV0ZXIgb2YgUmVtQXR0cigpIGluIGxpYl9ia2dkLmMsIHdoaWNoIGNhdXNlZCB0aGUgYysrCisJICBkZW1vJ3MgYm94ZXMgdG8gbG9zZSB0aGUgQV9BTFRDSEFSU0VUIGZsYWcgKGJyb2tlbiBpbiAyMDAyMDYyOSkuCisJKyBjb3JyZWN0IHdpZHRoIGNvbXB1dGVkIGluIF90cmFjZWR1bXAoKSwgd2hpY2ggZGlkIG5vdCBhY2NvdW50IGZvcgorCSAgdGhlIGF0dHJpYnV0ZXMgKGJyb2tlbiBpbiAyMDAxMDYwMikuCisJKyBtb2RpZnkgdGVzdC90cmFjZW11bmNoIHRvIHJlcGxhY2UgYWRkcmVzc2VzIGZvciB3aW5kb3dzIG90aGVyIHRoYW4KKwkgIGN1cnNjciwgbmV3c2NyIGFuZCBzdGRzY3Igd2l0aCB3aW5kb3cwLCB3aW5kb3cxLCBldGMuCisKKzIwMDIwOTIxIHByZS1yZWxlYXNlCisJKyByZWRpZCBmaXggZm9yIGVkaXRfbWFuLnNlZCBwYXRoLgorCSsgd29ya2Fyb3VuZCBmb3IgQ3lnd2luIGJ1ZyB3aGljaCBtYWtlcyBzdWJwcm9jZXNzIHdyaXRlcyB0byBzdGRvdXQKKwkgIHJlc3VsdCBpbiBjb3JlIGR1bXAuCisJKyBkb2N1bWVudGVkIGdldGJlZ3goKSwgZXRjLgorCSsgbWlub3IgZml4ZXMgdG8gY29uZmlndXJlIHNjcmlwdCB0byB1c2UgJyUnIGNvbnNpc3RlbnRseSBhcyBhIHNlZAorCSAgZGVsaW1pdGVyIHJhdGhlciB0aGFuICdAJy4KKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgYWRkIGNoZWNrIGluIGxpYl9vdmVybGF5LmMgdG8gZW5zdXJlIHRoYXQgdGhlIHdpbmRvd3MgdG8gYmUgbWVyZ2VkCisJICBhY3R1YWxseSBvdmVybGFwLCBhbmQgaW4gY29weXdpbigpLCBsaW1pdCB0aGUgYXJlYSB0byBiZSB0b3VjaGVkCisJICB0byB0aGUgbGluZXMgZ2l2ZW4gZm9yIHRoZSBkZXN0aW5hdGlvbiB3aW5kb3cuCisKKzIwMDIwOTE0IHByZS1yZWxlYXNlCisJKyBtb2RpZmllZCBjdXJzZXMuaCBzbyB0aGF0IGlmIHRoZSB3aWRlLWNoYXJhY3RlciB2ZXJzaW9uIGlzIGluc3RhbGxlZAorCSAgb3ZlcndyaXRpbmcgL3Vzci9pbmNsdWRlL2N1cnNlcy5oLCBhbmQgaWYgaXQgcmVsaWVkIG9uIGxpYnV0ZjguaCwKKwkgIHRoZW4gYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoYXQgaGVhZGVyIGZvciB3aWRlLWNoYXJhY3RlciBzdXBwb3J0CisJICBtdXN0IGRlZmluZSBIQVZFX0xJQlVURjhfSC4KKwkrIG1vZGlmeSBwdXR3aW4oKSwgZ2V0d2luKCkgYW5kIGR1cHdpbigpIHRvIGFsbG93IHRoZW0gdG8gb3BlcmF0ZSBvbgorCSAgcGFkcyAocmVxdWVzdCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyBjb3JyZWN0IGF0dHJpYnV0ZS1tZXJnaW5nIGluIHdib3JkZXIoKSwgYnJva2VuIGluIDIwMDIwMjE2IChyZXBvcnQKKwkgIGJ5IFRvbWFzeiBXYXNpYWsgPHRqd2FzaWFrQGdydWJhc2VrLmtvbXB1dG9tLmNvbS5wbD4pLgorCT4gcGF0Y2ggYnkgUGhpbGlwcGUgQmxhaW46CisJKyBjb3JyZWN0ZWQgcG9wLWNvdW50cyBpbiB0cGFyYW1faW50ZXJuYWwoKSB0byAnIScgYW5kICd+JyBjYXNlcy4KKwkrIHVzZSBzaXplb2YoTkNVUlNFU19DSF9UKSBpbiBvbmUgcGxhY2UgdGhhdCB1c2VkIHNpemVvZihjaHR5cGUpLgorCSsgcmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcyBmcm9tIG12Y3VyIHRlc3QtZHJpdmVyLgorCisyMDAyMDkwNyBwcmUtcmVsZWFzZQorCSsgY2hhbmdlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gYWxsb3cgaW5zdGFsbCBvZiB3aWRlYy1jaGFyYWN0ZXIKKwkgIChuY3Vyc2VzdykgaGVhZGVycyB0byBvdmVyd3JpdGUgbm9ybWFsIChuY3Vyc2VzKSBoZWFkZXJzLCBzaW5jZSB0aGUKKwkgIGxhdHRlciBpcyBhIGNvbXBhdGlibGUgc3Vic2V0IG9mIHRoZSBmb3JtZXIuCisJKyBmaXggcGF0aCBvZiBlZGl0X21hbi5zZWQgaW4gY29uZmlndXJlIHNjcmlwdCwgbmVlZGVkIHRvIHJlZ2VuZXJhdGUKKwkgIGh0bWwgbWFucGFnZXMgb24gRGViaWFuLgorCSsgZml4IG1pc21hdGNoZWQgZW51bXMgaW4gdnNzY2FuZi5jLCB3aGljaCBjYXVzZWQgd2FybmluZyBvbiBTb2xhcmlzLgorCSsgdXBkYXRlIFJFQURNRS5lbXggdG8gcmVmbGVjdCBjdXJyZW50IHBhdGNoIHVzZWQgZm9yIGF1dG9jb25mLgorCSsgY2hhbmdlIHdlYi0gYW5kIGZ0cC1zaXRlIHRvIGludmlzaWJsZS1pc2xhbmQubmV0CisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIGNoYW5nZSBjYXNlIGZvciAnUCcgaW4gdHBhcmFtX2ludGVybmFsKCkgdG8gaW5kaWNhdGUgdGhhdCBpdCBwb3BzCisJICBhIHZhcmlhYmxlIGZyb20gdGhlIHN0YWNrLgorCSsgY29ycmVjdCBzZW5zZSBvZiBwcmVjaXNpb24gYW5kIHdpZHRoIGluIHBhcnNlX2Zvcm1hdCgpLCB0byBhdm9pZAorCSAgY29uZnVzaW9uLgorCSsgbW9kaWZ5IGxpYl90cGFybS5jLCBhYnNvcmIgcmVhbGx5X2dldF9zcGFjZSgpIGludG8gZ2V0X3NwYWNlKCkuCisJKyBtb2RpZnkgZ2V0d2luKCkgYW5kIGR1cHdpbigpIHRvIGNvcHkgdGhlIF9ub3RpbWVvdXQsIF9pZGxvayBhbmQKKwkgIF9pZGNvayB3aW5kb3cgZmllbGRzLgorCSsgYmV0dGVyIGZpeCBmb3IgX25jX3NldF90eXBlKCksIHVzaW5nIHR5cGVNYWxsb2MoKS4KKworMjAwMjA5MDEgcHJlLXJlbGVhc2UKKwkrIGNoYW5nZSBtaW5vciB2ZXJzaW9uIHRvIDMsIGkuZS4sIG5jdXJzZXMgNS4zCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJKyByZXRlc3QgYnVpbGQgd2l0aCBlYWNoIGNvbmZpZ3VyZSBvcHRpb247IG1pbm9yIGlmZGVmIGZpeGVzLgorCSsgbWFrZSBrZXluYW1lKCkgcmV0dXJuIGEgbnVsbCBwb2ludGVyIHJhdGhlciB0aGFuICJVTktOT1dOIFNUUklORyIgdG8KKwkgIG1hdGNoIFhTSS4KKwkrIG1vZGlmeSBoYW5kbGluZyBvZiB3aWRlIGxpbmUtZHJhd2luZyBjaGFyYWN0ZXIgZnVuY3Rpb25zIHRvIHVzZSB0aGUKKwkgIG5vcm1hbCBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycyB3aGVuIG5vdCBpbiBVVEYtOCBsb2NhbGUuCisJKyBhZGQgY2hlY2svZml4IHRvIGNvbXBfcGFyc2UuYyB0byBzdXBwcmVzcyB3YXJuaW5nIGFib3V0IG1pc3NpbmcgYWNzYworCSAgc3RyaW5nLiAgVGhpcyBoYXBwZW5zIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIHJhdyB0ZXJtY2FwIGluZm9ybWF0aW9uCisJICBpcyBwcm9jZXNzZWQ7IHRpYyBhbHJlYWR5IGRvZXMgdGhpcyBhbmQgb3RoZXIgY2hlY2tzLgorCSsgbW9kaWZ5IHRpYydzIGNoZWNrIGZvciBpY2gvaWNoMSB2ZXJzdXMgcm1pci9zbWlyIHRvIG9ubHkgd2FybiBhYm91dAorCSAgaWNoMSwgdG8gbWF0Y2ggeHRlcm0gcGF0Y2ggIzcwIG5vdGVzLgorCSsgbW92ZWQgaW5mb3JtYXRpb24gZm9yIHJpcHBlZC1vZmYgbGluZXMgaW50byBTQ1JFRU4gc3RydWN0IHRvIGFsbG93CisJICB1c2UgaW4gcmVzaXpldGVybSgpLgorCSsgYWRkIGV4cGVyaW1lbnRhbCB3Z2V0Y2hfZXZlbnRzKCksIGlmZGVmJ2Qgd2l0aCBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKwkgIChhZGFwdGVkIGZyb20gcGF0Y2ggYnkgSWx5YSBaYWtoYXJldmljaCAtIHNlZSBuY3Vyc2VzL1JFQURNRS5JWikuCisJKyBhbWVuZCBjaGVjayBpbiBrZ2V0Y2goKSBmcm9tIDIwMDIwODI0IHRvIGxvb2sgb25seSBmb3IgZnVuY3Rpb24ta2V5cywKKwkgIG90aGVyd2lzZSBlc2NhcGUgc2VxdWVuY2VzIGFyZSBub3QgcmVzb2x2ZWQgcHJvcGVybHkuCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIHJlbW92ZWQgcmVkdW5kYW50IGFzc2lnbm1lbnQgdG8gU1AtPl9jaGVja2ZkIGZyb20gbmV3dGVybSgpLgorCSsgY2hlY2sgcmV0dXJuLXZhbHVlIG9mIHNldHVwdGVybSgpIGluIHJlc3RhcnR0ZXJtKCkuCisJKyB1c2Ugc2l6ZW9mKE5DVVJTRVNfQ0hfVCkgaW4gYSBmZXcgcGxhY2VzIHRoYXQgdXNlZCBzaXplb2YoY2h0eXBlKS4KKwkrIHByZXZlbnQgZHVwd2luKCkgZnJvbSBkdXBsaWNhdGluZyBhIHBhZC4KKwkrIHByZXZlbnQgcHV0d2luKCkgZnJvbSB3cml0aW5nIGEgcGFkLgorCSsgdXNlIHR5cGVSZWFsbG9jKCkgb3IgdHlwZU1hbGxvYygpIGluIHByZWZlcmVuY2UgdG8gZGlyZWN0IGNhbGxzIG9uCisJICBfbmNfZG9hbGxvYygpLgorCisyMDAyMDgyNAorCSsgYWRkIGEgY2hlY2sgaW4ga2dldGNoKCkgZm9yIGNvb2tlZCBjaGFyYWN0ZXJzIGluIHRoZSBmaWZvIHRvIGF2b2lkCisJICBjYWxsaW5nIGZpZm9fcHVzaCgpIHdoZW4gYSBLRVlfUkVTSVpFIGlzIGF2YWlsYWJsZSAocmVwb3J0L2FuYWx5c2lzCisJICBieSBTYW0gVmFyc2hhdmNoaWsgPG1yc2FtQGNvdXJpZXItbXRhLmNvbT4pLgorCSsgZml4IGFuIG92ZXJsb29rZWQgY2FzZSBmb3IgYnVnemlsbGEgIzY4MTk5IChQaGlsaXBwZSBCbGFpbikuCisJKyBlbnN1cmUgY2xlYXJlcnIoKSBpcyBjYWxsZWQgYmVmb3JlIHVzaW5nIGZlcnJvcigpIGUuZy4sIGluCisJICBsaWJfc2NyZWVuLmMgKHJlcG9ydCBieSBQaGlsaXBwZSBCbGFpbikuCisKKzIwMDIwODE3CisJKyBtb2RpZnkgbGliX3NjcmVlbi5jIGFuZCBsaWJfbmV3d2luLmMgdG8gbWFpbnRhaW4gdGhlIFNDUkVFTi1zcGVjaWZpYworCSAgcG9pbnRlcnMgZm9yIGN1cnNjci9zdGRzY3IvbmV3c2NyIHdoZW4gc2NyX3NhdmUoKSBhbmQgc2NyX3Jlc3RvcmUoKQorCSAgbW9kaWZ5IHRoZSBnbG9iYWwgY3Vyc2NyL3N0ZHNjci9uZXdzY3IgdmFyaWFibGVzLiAgRml4ZXMgUmVkaGF0CisJICBidWd6aWxsYSAjNjgxOTkgZGF0ZWQgMjAwMi0wNy0wNy4KKwkrIGFkZCBjaGVja3MgZm9yIG51bGwgcG9pbnRlciBpbiBjYWxscyB0byB0cGFybSgpIGFuZCB0Z290bygpIGJhc2VkIG9uCisJICBGcmVlQlNEIGJ1ZyByZXBvcnQuICBJZiBuY3Vyc2VzIHdlcmUgYnVpbHQgd2l0aCB0ZXJtY2FwIHN1cHBvcnQsIGFuZAorCSAgdGhlIGZpcnN0IGNhbGwgdG8gdGdvdG8oKSB3ZXJlIGEgemVyby1sZW5ndGggc3RyaW5nLCB0aGUgcmVzdWx0IHdvdWxkCisJICBiZSBhIG51bGwgcG9pbnRlciwgd2hpY2ggd2FzIG5vdCBoYW5kbGVkIHByb3Blcmx5LgorCSsgY29ycmVjdCBhIHR5cG8gaW4gdGVybWluZm8uaGVhZCwgd2hpY2ggZ2F2ZSB0aGUgb2N0YWwgY29kZSBmb3IgY29sb24KKwkgIHJhdGhlciB0aGFuIGNvbW1hLgorCSsgcmVtb3ZlIHRoZSAidGljIC11IiBvcHRpb24gZnJvbSAyMDAyMDgxMCwgc2luY2UgaXQgZGlkIG5vdCBhY2NvdW50CisJICBmb3IgbmVzdGVkICJ0Yz0iIGNsYXVzZXMsIGFuZCB3aGVuIHRoYXQgd2FzIGFkZHJlc3NlZCwgd2FzIHN0aWxsCisJICB1bnNhdGlzZmFjdG9yeS4KKworMjAwMjA4MTAKKwkrIGFkZCB0aWMgLUEgb3B0aW9uIHRvIHN1cHByZXNzIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgY29tbWVudGVkIG91dAorCSAgd2hlbiB0cmFuc2xhdGluZyB0byB0ZXJtY2FwLgorCSsgYWRkIHRpYyAtdSBvcHRpb24gdG8gcHJvdmlkZSBvbGRlciBiZWhhdmlvciBvZiAidGM9IiBjbGF1c2VzLgorCSsgbW9kaWZpZWQgdGljIHRvIGV4cGFuZCBhbGwgYnV0IHRoZSBmaW5hbCAidGM9IiBjbGF1c2UgaW4gYSB0ZXJtY2FwCisJICBlbnRyeSwgdG8gYWNjb21tb2RhdGUgdGVybWNhcCBsaWJyYXJpZXMgd2hpY2ggZG8gbm90IGhhbmRsZSBtdWx0aXBsZQorCSAgdGMgY2xhdXNlcy4KKwkrIGNvcnJlY3QgdHlwbyBpbiBjdXJzX2lub3B0cy4zeCByZWdhcmRpbmcgQ1M4L0NTNyB1c2FnZSAocmVwb3J0IGJ5CisJICBQaGlsaXBwZSBCbGFpbikuCisJKyByZW1vdmUgYSBjb3VwbGUgb2YgcmVkdW5kYW50IHVzZXMgb2YgQV9BVFRSSUJVVEVTIGluIGV4cHJlc3Npb25zCisJICB1c2luZyBBdHRyT2YoKSwgd2hpY2ggYWxyZWFkeSBpbmNvcnBvcmF0ZXMgdGhhdCBtYXNrIChyZXBvcnQgYnkKKwkgIFBoaWxpcHBlIEJsYWluKS4KKwkrIGRvY3VtZW50IFRBQlNJWkUgdmFyaWFibGUuCisJKyBhZGQgTkNVUlNFU19BU1NVTUVEX0NPTE9SUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdG8gYWxsb3cgdXNlcnMgdG8KKwkgIG92ZXJyaWRlIGNvbXBpbGVkLWluIGRlZmF1bHQgYmxhY2stb24td2hpdGUgYXNzdW1wdGlvbiB1c2VkIGluCisJICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKS4KKwkrIGNvcnJlY3QgYW4gb2ZmLWJ5LW9uZSBjb21wYXJpc29uIGFnYWluc3QgbWF4X2NvbG9ycyBpbiBDT0xPUkZHQkcKKwkgIGxvZ2ljLgorCSsgY29ycmVjdCBhIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3VuZCBieSB2YWxncmluZCAocmVwb3J0ZWQgYnkKKwkgIE9sYWYgQnVkZGVuaGFnZW4gPG9sYWZCdWRkZW5oYWdlbkB3ZWIuZGU+KS4KKwkrIG1vZGlmaWVkIHdyZXNpemUoKSB0byBlbnN1cmUgdGhhdCBhIGZhaWxlZCByZWFsbG9jIHdpbGwgbm90IGNvcnJ1cHQKKwkgIHRoZSB3aW5kb3cgc3RydWN0dXJlLCBhbmQgdG8gbWFrZSBzdWJ3aW5kb3dzIGZpdCB3aXRoaW4gdGhlIHJlc2l6ZWQKKwkgIHdpbmRvdyAoY29tcGxldGVzIERlYmlhbiAjODc2NzgsICMxMDE2OTkpCisKKzIwMDIwODAzCisJKyBmaXggYW4gb2ZmLWJ5LW9uZSBpbiBsaWJfcGFkLmMgY2hlY2sgZm9yIGxpbWl0cyBvZiBwYWQgKHBhdGNoIGJ5CisJICBQaGlsaXBwZSBCbGFpbikuCisJKyByZXZpc2UgbG9naWMgZm9yIEJlT1MgaW4gbGliX3R3YWl0LmMgYWx0ZXJlZCBpbiAyMDAxMTAxMyB0byByZXN0b3JlCisJICBsb2dpYyB1c2VkIGJ5IGxpYl9nZXRjaC5jJ3Mgc3VwcG9ydCBmb3IgR1BNIG9yIEVNWCBtb3VzZSAocmVwb3J0IGJ5CisJICBQaGlsaXBwZSBCbGFpbikKKwkrIHJlbW92ZSBOQ1VSU0VTX0NPTlNUIGZyb20gc2V2ZXJhbCBwcm90b3R5cGVzIGluIGN1cnNlcy53aWRlLCB0byBtYWtlCisJICB0aGUgLS1lbmFibGUtY29uc3QgLS1lbmFibGUtd2lkZWMgY29uZmlndXJlIG9wdGlvbnMgdG8gd29yayB0b2dldGhlcgorCSAgKHJlcG9ydCBieSBHZW9yZ2UgR29mZmUgPGdyZ29mZmVAeWFob28uY29tPikuCisKKzIwMDIwNzI3CisJKyBmaW5pc2ggbm8tbGVhayBjaGVja2luZyBpbiBjYXJkZmlsZS5jLCB1c2luZyB0aGlzIGZvciB0ZXN0aW5nIGNoYW5nZXMKKwkgIHRvIHJlc2l6ZXRlcm0oKS4KKwkrIHNpbXBsaWZ5IF9uY19mcmVlYWxsKCkgdXNpbmcgZGVsc2NyZWVuKCkuCisKKzIwMDIwNzIwCisJKyBjaGVjayBlcnJvci1yZXR1cm4gZnJvbSBfbmNfc2V0X3R0eV9tb2RlKCkgaW4gX25jX2luaXRzY3IoKSBhbmQKKwkgIHJlc2V0X3Byb2dfbW9kZSgpIChyZXBvcnQvcGF0Y2ggYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgcmVnZW5lcmF0ZSBjb25maWd1cmUgdXNpbmcgcGF0Y2ggZm9yIGF1dG9jb25mIDIuNTIsIHRvIGFkZHJlc3MKKwkgIHByb2JsZW0gd2l0aCBpZGVudGlmeWluZyBDKysgYm9vbCB0eXBlLgorCSsgY29ycmVjdC9pbXByb3ZlIGxvZ2ljIHRvIHByb2R1Y2UgYW4gZXhpdCBzdGF0dXMgZm9yIGVycm9ycyBpbiB0cHV0LAorCSAgd2hpY2ggZGlkIG5vdCBleGl0IHdpdGggYW4gZXJyb3Igd2hlbiB0b2xkIHRvIHB1dCBhIHN0cmluZyBub3QgaW4gdGhlCisJICBjdXJyZW50IHRlcm1pbmZvIGVudHJ5IChyZXBvcnQgYnkgRGF2aWQgR29tZXogPGRhdmlkQHBsZXlhZGVzLm5ldD4pLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgQUNfT1VUUFVUKCkgY2FsbCB0byB3b3JrIGFyb3VuZCBkZWZlY3QgaW4KKwkgIGF1dG9jb25mIDIuNTIgd2hpY2ggYWRkcyBhbiBpZmRlZidkIGluY2x1ZGUgdG8gdGhlIGdlbmVyYXRlZAorCSAgY29uZmlndXJlIGRlZmluaXRpb25zLgorCSsgcmVtb3ZlIGZzdGF0KCkgY2hlY2sgZnJvbSBzY3JfaW5pdCgpLCB3aGljaCBhbHNvIGZpeGVzIGEgbWlzc2luZworCSAgaW5jbHVkZSBmb3IgPHN5cy9zdGF0Lmg+IGZyb20gMjAwMjA3MTMgKHJlcG9ydGVkIGJ5IERhdmlkIEVsbGVtZW50LAorCSAgZml4IHN1Z2dlc3RlZCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyB1cGRhdGUgY3Vyc19zY2Fudy4zeCBtYW5wYWdlIHRvIG5vdGUgdGhhdCBYU0kgY3Vyc2VzIGRpZmZlcnMgZnJvbQorCSAgU1ZyNCBjdXJzZXM6IHJldHVybi12YWx1ZXMgYXJlIGluY29tcGF0aWJsZS4KKwkrIGNvcnJlY3Qgc2V2ZXJhbCBwcm90b3R5cGVzIGluIG1hbnBhZ2VzIHdoaWNoIHVzZWQgY29uc3QKKwkgIGluY29uc2lzdGVudGx5IHdpdGggdGhlIGN1cnNlcy5oIGZpbGUsIGFuZCByZW1vdmVkIHNwdXJpb3VzIGNvbnN0J3MKKwkgIGluIGEgZmV3IHBsYWNlcyBmcm9tIGN1cnNlcy5oLCBlLmcuLCBmb3Igd2JrZ2QoKSAocmVwb3J0IGJ5IEdsZW5uCisJICBNYXluYXJkIDxnbGVubkB6ZXd0Lm9yZz4pLgorCSsgY2hhbmdlIGludGVybmFsIHR5cGUgdXNlZCBieSB0cGFybSgpIHRvIGxvbmcsIHRvIHdvcmsgd2l0aCBMUDY0IG1vZGVsLgorCSsgbW9kaWZ5IG5jX2FsbG9jLmggdG8gYWxsb3cgYnVpbGRpbmcgd2l0aCBnKyssIGZvciB0ZXN0aW5nLgorCisyMDAyMDcxMworCSsgYWRkIHJlc2l6ZS1oYW5kbGluZyB0byBjYXJkZmlsZS5jIHRlc3QgcHJvZ3JhbS4KKwkrIGFsdGVyZWQgcmVzaXpldGVybSgpIHRvIGF2b2lkIGhhdmluZyBpdCBmYWlsIHdoZW4gYSBjaGlsZCB3aW5kb3cKKwkgIGNhbm5vdCBiZSByZXNpemVkIGJlY2F1c2UgaXQgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXRzIHBhcmVudC4gIChNb3JlCisJICB3b3JrIG11c3QgYmUgZG9uZSBvbiB0aGlzLCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggdG8gaW50ZWdyYXRlKS4KKwkrIGltcHJvdmUgYSBsaW1pdC1jaGVjayBpbiBsaWJfcmVmcmVzaC5jCisJKyByZW1vdmUgY2hlY2sgaW4gbGliX3NjcmVlbi5jIHJlbGF0aW5nIGR1bXB0aW1lIHRvIGZpbGUncyBtb2RpZmljYXRpb24KKwkgIHRpbWVzLCBzaW5jZSB0aGF0IHdvdWxkIG5vdCBuZWNlc3NhcmlseSB3b3JrIGZvciByZW1vdGVseSBtb3VudGVkCisJICBmaWxlc3lzdGVtcy4KKwkrIG1vZGlmeSBscnRlc3QgdG8gc2ltcGxpZnkgZGVidWdnaW5nIGNoYW5nZXMgdG8gcmVzaXpldGVybSwgZS5nLiwKKwkgIHQvVCBjb21tYW5kcyB0byBlbmFibGUvZGlzYWJsZSB0cmFjaW5nLgorCSsgdXBkYXRlZCBzdGF0dXMgb2YgbXVsdGlieXRlIHN1cHBvcnQgaW4gVE8tRE8uCisJKyB1cGRhdGUgY29udGFjdCBpbmZvIGluIHNvdXJjZS1maWxlcyAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworMjAwMjA3MDYKKwkrIGFkZCBDYXBzLmhwdXgxMSwgYXMgYW4gZXhhbXBsZS4KKwkrIG1vZGlmeSB2ZXJzaW9uX2ZpbHRlcigpLCB1c2VkIHRvIGltcGxlbWVudCAtUiBvcHRpb24gZm9yIHRpYyBhbmQKKwkgIGluZm9jbXAsIHRvIHVzZSBjb21wdXRlZCBhcnJheSBvZmZzZXRzIGJhc2VkIG9uIHRoZSBDYXBzLiogZmlsZSB3aGljaAorCSAgaXMgYWN0dWFsbHkgY29uZmlndXJlZCwgcmF0aGVyIHRoYW4gY29uc3RhbnRzIHdoaWNoIGNvcnJlc3BvbmQgdG8KKwkgIHRoZSBDYXBzIGZpbGUuCisJKyByZW9yZ2FuaXplZCBsaWJfcmF3LmMgdG8gYXZvaWQgdXBkYXRpbmcgU1AgYW5kIGN1cl90ZXJtIHN0YXRlIGlmIHRoZQorCSAgZnVuY3Rpb25zIGZhaWwgKHJlcG9ydGVkIGJ5IFBoaWxpcHBlIEJsYWluKS4KKwkrIGFkZCAtV3VuZGVmIHRvIGdjYyB3YXJuaW5ncywgYWRqdXN0IGEgZmV3IGlmZGVmJ3MgdG8gYWNjb21tb2RhdGUgZ2NjLgorCisyMDAyMDYyOQorCSsgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIHNldGNjaGFyKCkgaW4gbmN1cnNlcy5jIChjZjogMjAwMjA0MDYpLgorCSsgc2V0IGxvY2FsZSBpbiBtb3N0IHRlc3QgcHJvZ3JhbXMgKHZpZXcuYyBhbmQgbmN1cnNlcy5jIHdlcmUgdGhlCisJICBvbmx5IG9uZXMpLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWJ1aWxkLWNwcGZsYWdzIChyZXBvcnQgYnkgTWFrc2ltIEEKKwkgIE5pa3VsaW4gPE0uQS5OaWt1bGluQGlucC5uc2suc3U+KS4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIHdpZGUtY2hhcmFjdGVyIGxvZ2ljIGZvciBsaWJfYmtnbmQuYyAoUGhpbGlwcGUKKwkgIEJsYWluKS4KKwkrIG1vZGlmeSBsaWJfd2Fjcy5jIHRvIG5vdCBjYW5jZWwgdGhlIGFjc2MsIHNtYWNzLCBybWFjcyBzdHJpbmdzIHdoZW4KKwkgIGluIFVURi04IGxvY2FsZS4gIFdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyB1c2UgVW5pY29kZSB2YWx1ZXMsIHdoaWxlCisJICBuYXJyb3ctY2hhcmFjdGVyIGZ1bmN0aW9ucyB1c2UgdGhlIHRlcm1pbmZvIGRhdGEuCisJKyBmaXggYSBjb3VwbGUgb2YgcGxhY2VzIGluIEFkYTk1L3NhbXBsZXMgd2hpY2ggZGlkIG5vdCBjb21waWxlIHdpdGgKKwkgIGduYXQgMy4xNAorCSsgbW9kaWZ5IG1raW5zdGFsbGRpcnMgc28gdGhlIERPUy1wYXRobmFtZSBjYXNlIGlzIGxvY2FsZS1pbmRlcGVuZGVudC4KKwkrIGZpeCBsb2NhbGUgcHJvYmxlbSBpbiBNS2xpYl9nZW4uc2ggYnkgZm9yY2luZyByZWxhdGVkIHZhcmlhYmxlcyB0bworCSAgUE9TSVggKEMpLCB1c2luZyBzYW1lIGFwcHJvYWNoIGFzIGF1dG9jb25mIChzZXQgdmFyaWFibGVzIG9ubHkgaWYKKwkgIHRoZXkgd2VyZSBzZXQgYmVmb3JlKS4gIFVwZGF0ZSBNS3Rlcm1pbmZvLnNoIGFuZCBNS3Rlcm1zb3J0LnNoIHRvCisJICBtYXRjaC4KKworMjAwMjA2MjIKKwkrIGFkZCBjaGFyc2V0IHRvIGdlbmVyYXRlZCBodG1sLgorCSsgYWRkIG12dGVybSBlbnRyeSwgYWRhcHRlZCBmcm9tIGEgRnJlZUJTRCBidWctcmVwb3J0IGJ5IERhbmllbCBSdWR5CisJICA8ZGNydWR5QHBhY2JlbGwubmV0PiAtVEQKKwkrIGFkZCByeHZ0LTE2Y29sb3IsIGlibSsxNmNvbG9yIGVudHJpZXMgLVRECisJKyBtb2RpZnkgY2hlY2sgaW4gLS1kaXNhYmxlLW92ZXJ3cml0ZSBvcHRpb24gc28gdGhhdCBpdCBpcyB1c2VkIGJ5CisJICBkZWZhdWx0IHVubGVzcyB0aGUgLS1wcmVmaXgvJHByZWZpeCB2YWx1ZSBpcyBub3QgL3VzciwgaW4gYXR0ZW1wdCB0bworCSAgd29yayBhcm91bmQgcGFja2FnZXJzLCBlLmcuLCBmb3IgU3VuJ3MgZnJlZXdhcmUsIHdobyBkbyBub3QgcmVhZCB0aGUKKwkgIElOU1RBTEwgbm90ZXMuCisKKzIwMDIwNjE1CisJKyBtb2RpZnkgd2dldGNoKCkgdG8gYWxsb3cgcmV0dXJuaW5nIHVuZ2V0Y2gnZCBLRVlfUkVTSVpFIGFzIGEgZnVuY3Rpb24KKwkgIGtleSBjb2RlIGluIGdldF93Y2goKS4KKwkrIGV4dGVuZGVkIHJlc2l6ZS1oYW5kbGluZyBpbiB0ZXN0L25jdXJzZXMgJ2EnIG1lbnUgdG8gdGhlIGVudGlyZQorCSAgc3RhY2sgb2Ygd2luZG93cyBjcmVhdGVkIHdpdGggJ3cnIGNvbW1hbmRzLgorCSsgaW1wcm92ZSAkQ09MT1JGR0JHIGZlYXR1cmUgYnkgaW50ZXJwcmV0aW5nIGFuIG91dC1vZi1yYW5nZSBjb2xvcgorCSAgdmFsdWUgYXMgYW4gU0dSIDM5IG9yIDQ5LCBmb3IgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIHJlc3BlY3RpdmVseS4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIGNvbmZpZ3VyZSAtLWVuYWJsZS1jb2xvcmZnYmcgb3B0aW9uLCBhbmQgbW92ZSBpdAorCSAgdG8gdGhlIGV4cGVyaW1lbnRhbCBzZWN0aW9uIChjZjogMjAwMTEyMDgpLgorCisyMDAyMDYwMQorCSsgYWRkIGxvZ2ljIHRvIGR1bXBfZW50cnkuYyB0byByZW1vdmUgZnVuY3Rpb24ta2V5IGRlZmluaXRpb25zIHRoYXQgZG8KKwkgIG5vdCBmaXQgaW50byB0aGUgMTAyMy1ieXRlIGxpbWl0IGZvciBnZW5lcmF0ZWQgdGVybWNhcHMuICBUaGlzIG1ha2VzCisJICBoZHMyMDAgZml0LgorCSsgbW9yZSBpbXByb3ZlbWVudHMgdG8gdGljJ3Mgd2FybmluZ3MsIGluY2x1ZGluZyBsb2dpYyB0byBpZ25vcmUKKwkgIGRpZmZlcmVuY2VzIGJldHdlZW4gZGVsYXkgdmFsdWVzIGluIHNnciBzdHJpbmdzLgorCSsgbW92ZSBkZWZpbml0aW9uIG9mIEtFWV9SRVNJWkUgaW50byBNS2tleWRlZnMuc2ggc2NyaXB0LCB0bworCSAgYWNjb21tb2RhdGUgQ2Fwcy5vc2YxcjUgd2hpY2ggaW50cm9kdWNlZCBhIGNvbmZsaWN0aW5nIGRlZmluaXRpb24uCisKKzIwMDIwNTI1CisJKyBhZGQgc2ltcGxlIHJlc2l6ZS1oYW5kbGluZyBpbiB0ZXN0L25jdXJzZXMuYyAnYScgbWVudS4KKwkrIGZpeGVzIGluIGtleW5hbWUoKSBhbmQgX3RyYWNlY2hhcigpIHRvIGhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMuCisJKyBtYWtlIHRpYydzIHdhcm5pbmdzIGFib3V0IG1pc21hdGNoZXMgaW4gc2dyIHN0cmluZ3MgZWFzaWVyIHRvIGZvbGxvdy4KKwkrIGNvcnJlY3QgdGljIGNoZWNrcyBmb3IgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gc21nYnAgYW5kIHNtZ2xwLgorCSsgaW1wcm92ZSBzY29hbnNpIHRlcm1pbmZvIGVudHJ5LCBhbmQgYWRkIHNjb2Fuc2ktbmV3IGVudHJ5IC1URAorCSsgYWRkIHBjdnQyNS1jb2xvciB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIGFkZCBrZjEzLWtmNDggc3RyaW5ncyB0byBjb25zMjV3IHRlcm1pbmZvIGVudHJ5IChyZXBvcnRlZCBieSBTdGVwaGVuCisJICBIdXJkIDxkZXVjZUBsb3JkbGVnYWN5Lm9yZz4gaW4gbmV3c2dyb3VwIGx1Y2t5LmZyZWVic2QuYnVncykgLVRECisJKyBhZGQgZW50cnlwb2ludCBfbmNfdHJhY2VfdHR5bW9kZSgpLCB1c2UgdGhpcyB0byBkaXN0aW5ndWlzaCB0aGUKKwkgIE90dHliIGFuZCBOdHR5YiBtZW1iZXJzIG9mIHRlcm1pbmFsIChha2EgY3VyX3Rlcm0pLCBmb3IgdHJhY2luZy4KKworMjAwMjA1MjMKKwkrIGNvcnJlY3QgYW5kIHNpbXBsaWZ5IGxvZ2ljIGZvciBsaWJfcGFkLmMgY2hhbmdlIGluIDIwMDIwNTE4IChyZXBvcnRlZAorCSAgYnkgTWlrZSBDYXN0bGUpLgorCisyMDAyMDUxOAorCSsgZml4IGxpYl9wYWQuYyBmb3IgY2FzZSBvZiBkcmF3aW5nIGEgZG91YmxlLXdpZHRoIGNoYXJhY3RlciB3aGljaAorCSAgZmFsbHMgb2ZmIHRoZSBsZWZ0IG1hcmdpbiBvZiB0aGUgcGFkIChwYXRjaCBieSBLcmlhbmcgTGVyZHN1d2FuYWtpagorCSAgPGxlcmRzdXdhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4pCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byB3b3JrIGFyb3VuZCBicm9rZW4gZ2NjIDMuMSAiLS12ZXJzaW9uIgorCSAgb3B0aW9uLCB3aGljaCBhZGRzIHVubmVjZXNzYXJ5IHRyYXNoIHRvIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24uCisJKyBhZGp1c3QgaWZkZWYncyBpbiBjYXNlIFNJR1dJTkNIIGlzIG5vdCBkZWZpbmVkLCBlLmcuLCB3aXRoIERKR1BQCisJICAocmVwb3J0ZWQgYnkgQmVuIERlY2tlciA8ZGVja2VyYmVuQGZyZWVuZXQuZGU+KS4KKworMjAwMjA1MTEKKwkrIGltcGxlbWVudCB2aWRfcHV0cygpLCB2aWRfYXR0cigpLCB0ZXJtX2F0dHJzKCkgYmFzZWQgb24gdGhlIG5hcnJvdy0KKwkgIGNoYXJhY3RlciB2ZXJzaW9ucyBhcyB3ZWxsLgorCSsgaW1wbGVtZW50IGVyYXNld2NoYXIoKSwga2lsbHdjaGFyKCkgYmFzZWQgb24gZXJhc2VjaGFyKCkgYW5kCisJICBraWxsY2hhcigpLgorCSsgbW9kaWZ5IGVyYXNlY2hhcigpIGFuZCBraWxsY2hhcigpIHRvIHJldHVybiBFUlIgaWYgdGhlIHZhbHVlIHdhcworCSAgVkRJU0FCTEUuCisJKyBjb3JyZWN0IGEgYnVnIGluIHdyZXNpemUoKSBpbiBoYW5kbGluZyBzdWJ3aW5kb3dzIChiYXNlZCBvbiBwYXRjaCBieQorCSAgUm9nZXIgR2FtbWFucyA8cmdhbW1hbnNAY29tcHV0ZXItc3VyZ2VyeS5jby51az4sIHJlcG9ydCBieSBTY290dCBCZWNrCisJICA8c2NvdHRAZ29zc2FtZXItdGhyZWFkcy5jb20+KS4KKwkrIGltcHJvdmUgdGVzdC90Y2xvY2suYyBieSBtYWtpbmcgdGhlIHNlY29uZC1oYW5kIHVwZGF0ZSBtb3JlIG9mdGVuCisJICBpZiBnZXR0aW1lb2ZkYXkoKSBpcyBhdmFpbGFibGUuCisKKzIwMDIwNDI5CisJKyB3b3JrYXJvdW5kIGZvciBTb2xhcmlzIHNlZCB3aXRoIE1LbGliX2dlbi5zaCAocmVwb3J0ZWQgYnkgQW5keQorCSAgVHNvdWxhZHplIDxhbmR5dEBteXBvaW50cy5jb20+KS4KKworMjAwMjA0MjcKKwkrIGNvcnJlY3QgcmV0dXJuLXZhbHVlIGZyb20gZ2V0Y2NoYXIoKSwgbWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aAorCSAgU29sYXJpcyBhbmQgVHJ1NjQuCisJKyByZW9yZGVyIGxvb3BzIHRoYXQgZ2VuZXJhdGUgbWFrZWZpbGUgcnVsZXMgZm9yIGRpZmZlcmVudCBtb2RlbHMgdnMKKwkgIHN1YnNldHMgc28gY29uZmlndXJlIC0td2l0aC10ZXJtbGliIHdvcmtzIGFnYWluLiAgVGhpcyB3YXMgYnJva2VuIGJ5CisJICBsb2dpYyBhZGRlZCB0byBhdm9pZCBkdXBsaWNhdGUgcnVsZXMgaW4gY2hhbmdlcyB0byBhY2NvbW1vZGF0ZSBjeWd3aW4KKwkgIGRsbCdzIChyZXBvcnRlZCBieSBHZW9yZ2UuUi5Hb2ZmZUBzZWFnYXRlLmNvbSkuCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisKKzIwMDIwNDIxCisJKyBtb2RpZnkgaWZkZWYncyBpbiB3cml0ZV9lbnRyeS5jIHRvIGFsbG93IHVzZSBvZiBzeW1ib2xpYyBsaW5rcyBvbgorCSAgcGxhdGZvcm1zIHdpdGggbm8gaGFyZCBsaW5rcywgZS5nLiwgQmVPUy4KKwkrIG1vZGlmeSBhIGZldyBpbmNsdWRlcyB0byBhbGxvdyBjb21waWxlIHdpdGggQmVPUywgd2hpY2ggaGFzIHN0ZGJvb2wuaAorCSAgd2l0aCBhIGNvbmZsaWN0aW5nIGRlZmluaXRpb24gZm9yICdib29sJyB2ZXJzdXMgaXRzIE9TLmggZGVmaW5pdGlvbi4KKwkrIGFtZW5kIE1LbGliX2dlbi5zaCB0byB3b3JrIHdpdGggZ2F3aywgd2hpY2ggZGVmaW5lcyAnZnVuYycgYXMgYW4KKwkgIGFsaWFzIGZvciAnZnVuY3Rpb24nLgorCisyMDAyMDQyMAorCSsgY29ycmVjdCBmb3JtIG9mIHByb3RvdHlwZSBmb3Igcmlwb2ZmbGluZSgpLgorCSsgbW9kaWZ5IE1LbGliX2dlbi5zaCB0byB0ZXN0IHRoYXQgYWxsIGZ1bmN0aW9ucyBtYXJrZWQgYXMgaW1wbGVtZW50ZWQKKwkgIGNhbiBiZSBsaW5rZWQuCisKKzIwMDIwNDEzCisJKyBhZGQgbWFucGFnZXM6IGN1cnNfZ2V0X3dzdHIuM3gsIGN1cnNfaW5fd2Noc3RyLjN4CisJKyBpbXBsZW1lbnQgd2dldG5fd3N0cigpLgorCSsgaW1wbGVtZW50IHdpbl93Y2huc3RyKCkuCisJKyByZW1vdmUgcmVkZWZpbml0aW9uIG9mIHVuZ2V0X3djaCgpIGluIGxpYl9nZW4uYyAocmVwb3J0ZWQgYnkKKwkgIEp1bmdzaGlrIFNoaW4gPGpzaGluQGp0YW4uY29tPikuCisKKzIwMDIwNDA2CisJKyBtb2RpZmllZCBzZXZlcmFsIG9mIHRoZSB0ZXN0IHByb2dyYW1zIHRvIGFsbG93IHRoZW0gdG8gY29tcGlsZSB3aXRoCisJICB2ZW5kb3IgY3Vyc2VzIGltcGxlbWVudGF0aW9ucywgZS5nLiwgU29sYXJpcywgQUlYIC1URAorCisyMDAyMDMyMworCSsgbW9kaWZpZWQgdGVzdC9jb25maWd1cmUgdG8gYWxsb3cgY29uZmlndXJpbmcgYWdhaW5zdCBuY3Vyc2Vzdy4KKwkrIGNoYW5nZSBXQUNTX3h4eCBkZWZpbml0aW9uIHRvIHVzZSBhZGRyZXNzLCB0byB3b3JrIGxpa2UgVHJ1NjQgY3Vyc2VzLgorCisyMDAyMDMxNworCSsgYWRkICdlJyBhbmQgJ20nIHRvZ2dsZXMgdG8gJ2EnLCAnQScgdGVzdHMgaW4gbmN1cnNlcy5jIHRvIGRlbW9uc3RyYXRlCisJICBlZmZlY3Qgb2YgZWNoby9ub2VjaG8gYW5kIG1ldGEgbW9kZXMuCisJKyBhZGQgJ0EnIHRlc3QgdG8gbmN1cnNlcy5jIHRvIGRlbW9uc3RyYXRlIHdnZXRfd2NoKCkgYW5kIHJlbGF0ZWQKKwkgIGZ1bmN0aW9ucy4KKwkrIGFkZCBtYW5wYWdlOiBjdXJzX2dldF93Y2guM3gKKwkrIGltcGxlbWVudCB1bmdldF93Y2goKS4KKwkrIGltcGxlbWVudCB3Z2V0X3djaCgpLgorCisyMDAyMDMxMAorCSsgcmVnZW5lcmF0ZWQgaHRtbCBtYW5wYWdlcy4KKwkrIGFkZCBtYW5wYWdlczogY3Vyc19pbl93Y2guM3gsIGN1cnNfaW5zX3djaC4zeCwgY3Vyc19pbnNfd3N0ci4zeAorCSsgaW1wbGVtZW50IHdpbnNfd2NoKCkuCisJKyBpbXBsZW1lbnQgd2luX3djaCgpLgorCSsgaW1wbGVtZW50IHdpbnNfbndzdHIoKSwgd2luc193c3RyKCkuCisKKzIwMDIwMzA5CisJKyBhZGQgbWFucGFnZXM6IGN1cnNfYWRkd3N0ci4zeCwgY3Vyc193aW53c3RyLjN4CisJKyBpbXBsZW1lbnQgd2lubndzdHIoKSwgd2lud3N0cigpLgorCisyMDAyMDIyMworCSsgYWRkIG1hbnBhZ2VzOiBjdXJzX2FkZF93Y2hzdHIuM3gsIGN1cnNfYmtncm5kLjN4CisJKyBkb2N1bWVudCB3dW5jdHJsLCBrZXlfbmFtZS4KKwkrIGltcGxlbWVudCBrZXlfbmFtZSgpLgorCSsgcmVtb3ZlIGNvbnN0J3MgaW4gbGliX2JveC5jIGluY29ycmVjdGx5IGxlZnRvdmVyIGFmdGVyIHNwbGl0dGluZyBvZmYKKwkgIGxpYl9ib3hfc2V0LmMKKwkrIHVwZGF0ZSBsbGliLWxuY3Vyc2VzLCBsbGliLW5jdXJzZXN3LCBmaXggY29uZmlndXJlIHNjcmlwdCByZWxhdGVkIHRvCisJICB0aGVzZS4KKworMjAwMjAyMTgKKwkrIHJlbW92ZSBxdW90ZXMgb24gIlNZTk9QU0lTIiBpbiBtYW4vY3Vyc19ib3hfc2V0LjN4LCB3aGljaCByZXN1bHRlZAorCSAgaW4gc3B1cmlvdXMgc3ltbGlua3Mgb24gaW5zdGFsbC4KKworMjAwMjAyMTYKKwkrIGltcGxlbWVudCB3aGxpbmVfc2V0KCksIHd2bGluZV9zZXQoKSwgYWRkIG1hbnBhZ2UgY3Vyc19ib3JkZXJfc2V0LgorCSsgYWRkIHN1YnRlc3QgJ2InIHRvICdGJyBhbmQgJ2YnIGluIG5jdXJzZXMuYyB0byBkZW1vbnN0cmF0ZSB1c2Ugb2YKKwkgIGJveCgpIGFuZCBib3hfc2V0KCkgZnVuY3Rpb25zLgorCSsgYWRkIHN1YnRlc3QgJ3UnIHRvICdGJyBpbiBuY3Vyc2VzLmMsIHRvIGRlbW9uc3RyYXRlIHVzZSBvZiBhZGRzdHIoKQorCSAgZ2l2ZW4gVVRGLTggc3RyaW5nIGVxdWl2YWxlbnRzIG9mIFdBQ1NfeHh4IHN5bWJvbHMuCisJKyBtaW5vciBmaXhlcyB0byBzZXZlcmFsIG1hbnBhZ2VzIGJhc2VkIG9uIGdyb2ZmIC13dyBvdXRwdXQuCisJKyBhZGQgZGVzY3JpcHRpb25zIG9mIGV4dGVybmFsIHZhcmlhYmxlcyBvZiB0ZXJtY2FwIGludGVyZmFjZSB0bworCSAgdGhlIG1hbnBhZ2UgKHJlcG9ydCBieSBCcnVjZSBFdmFucyA8YmRlQHpldGEub3JnLmF1PikuCisJPiBwYXRjaGVzIGJ5IEJlcm5oYXJkIFJvc2Vua3JhZW56ZXI6CisJKyBjb3JyZWN0IGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWJvb2wsIHdoaWNoIHdhcyBleGVjdXRlZCBhcworCSAgLS13aXRoLW9zcGVlZC4KKwkrIGFkZCBxdW90ZXMgZm9yIHBhcmFtZXRlcnMgb2YgLS13aXRoLWJvb2wgYW5kIC0td2l0aC1vc3BlZWQgY29uZmlndXJlCisJICBvcHRpb25zLgorCT4gcGF0Y2ggYnkgU3ZlbiBWZXJkb29sYWVnZSAocmVwb3J0IGJ5IEdlcmhhcmQgSGFlcmluZworCSAgPGhhZXJpbmdfbGludXhAZ214LmRlPik6CisJKyBjb3JyZWN0IHR5cG9zIGluIGRlZmluaXRpb25zIG9mIHNldmVyYWwgd2lkZS1jaGFyYWN0ZXIgbWFjcm9zOgorCSAgd2FkZHdzdHIsIHdnZXRia2dybmQsIG12YWRkd3N0ciwgbXZ3YWRkX3djaG5zdHIsIG12d2FkZF93Y2huc3RyLAorCSAgbXZ3YWRkd3N0ci4KKwkrIHBhc3MgJChDUFBGTEFHUykgdG8gTUtsaWJfZ2VuLnNoLCB0aGVyZWJ5IGZpeGluZyBhIG1pc3NpbmcgZGVmaW5pdGlvbgorCSAgb2YgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgZS5nLiwgb24gU29sYXJpcworCisyMDAyMDIwOQorCSsgaW1wbGVtZW50IHdpZGUtYWNzIGNoYXJhY3RlcnMgZm9yIFVURi04IGxvY2FsZXMuICBXaGVuIGluIFVURi04CisJICBsb2NhbGUsIGlnbm9yZSBuYXJyb3cgdmVyc2lvbiBvZiBhY3MuICBBZGQgJ0YnIHRlc3QgdG8gdGVzdC9uY3Vyc2VzLmMKKwkgIHRvIGRlbW9uc3RyYXRlLgorCSsgY29ycmVjdCBwcm90b3R5cGUgaW4ga2V5Ym91bmQgbWFucGFnZSAobm90ZWQgZnJvbSBhIERlYmlhbiBtYWlsaW5nCisJICBsaXN0IGl0ZW0pLgorCisyMDAyMDIwMgorCSsgYWRkIHNldmVyYWwgY2FzZXMgdG8gdGhlIHdzY2FudygpIGV4YW1wbGUgaW4gdGVzdGN1cnMuYywgc2hvd2luZyB0aGUKKwkgIGZvcm1hdC4KKwkrIGltcGxlbWVudCBhIHNpbXBsZSB2c3NjYW5mKCkgZmFsbGJhY2sgZnVuY3Rpb24gd2hpY2ggdXNlcyB0aGUgJW4KKwkgIGNvbnZlcnNpb24gdG8gaGVscCBwYXJzZSB0aGUgaW5wdXQgZGF0YSAocHJvbXB0ZWQgYnkgZGlzY3Vzc2lvbiB3aXRoCisJICBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIG1vZGlmeSBtay0xc3QuYXdrIGFuZCB0ZXN0L01ha2VmaWxlLmluIHRvIGFkZCAkKExERkxBR1MpIHdoZW4gbWFraW5nCisJICBzaGFyZWQgbGlicmFyaWVzLCBhbmQgdG8gdXNlICQoQ0ZMQUdTKSB3aGVuIGxpbmtpbmcgdGVzdCBwcm9ncmFtcworCSAgKHBhdGNoIGJ5IEFsYmVydCBDaGluLUEtWW91bmcpLgorCSsgYWRkIGEgY2FsbCB0byBfbmNfa2V5cGFkKCkgaW4ga2V5cGFkKCkgdG8gYWNjb21tb2RhdGUgYXBwbGljYXRpb25zCisJICBzdWNoIGFzIG52aSwgd2hpY2ggdXNlIGN1cnNlcyBmb3Igb3V0cHV0IGJ1dCBub3QgZm9yIGlucHV0IChmaXhlcworCSAgRGViaWFuICMxMzEyNjMsIGNmOiAyMDAxMTIxNSkuCisJKyBhZGQgZW50cnlwb2ludHMgdG8gcmVzaXpldGVybS5jIHdoaWNoIHByb3ZpZGUgYmV0dGVyIGNvbnRyb2wgb3ZlciB0aGUKKwkgIHByb2Nlc3M6ICBpc190ZXJtX3Jlc2l6ZWQoKSBhbmQgcmVzaXplX3Rlcm0oKS4gIFRoZSBsYXR0ZXIgcmVzdG9yZXMKKwkgIHRoZSBvcmlnaW5hbCBkZXNpZ24gb2YgcmVzaXpldGVybSgpIGJlZm9yZSBLRVlfUkVTSVpFIHdhcyBhZGRlZCBpbgorCSAgOTcwOTA2LiAgRG8gdGhpcyB0byBhY2NvbW1vZGF0ZSAyMDAxMDkyMiBjaGFuZ2VzIHRvIHZpZXcuYywgYnV0IGFsbG93CisJICBmb3IgcHJvZ3JhbXMgd2l0aCB0aGVpciBvd24gc2lnd2luY2ggaGFuZGxlciwgc3VjaCBhcyBseW54IChyZXBvcnRlZAorCSAgYnkgUnVzc2VsbCBSdWJ5IDxydXNzQG1hdGgub3JzdC5lZHU+KS4KKworMjAwMjAxMjcKKwkrIGZpeCBhIHR5cG8gaW4gY2hhbmdlIHRvIG1rLTFzdC5hd2ssIHdoaWNoIGJyb2tlIHRoZSBzaGFyZWQtbGlicmFyeQorCSAgbWFrZWZpbGUgcnVsZXMgKHJlcG9ydGVkIGJ5IE1hcnRpbiBNb2tyZWpzKS4KKworMjAwMjAxMjYKKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwkrIGZpbmlzaCBjaGFuZ2VzIG5lZWRlZCB0byBidWlsZCBkbGwncyBvbiBjeWd3aW4uCisJKyBmaXggYSB0eXBvIGluIG12d2NoYXQoKSBtYWNybyAocmVwb3J0ZWQgYnkgQ3kgPHlhbUBob21lcm93Lm5ldCkuCisKKzIwMDIwMTE5CisJKyBhZGQgY2FzZSBpbiBsaWJfYmF1ZHJhdGUuYyBmb3IgQjkyMTYwMCAocGF0Y2ggYnkgQW5kcmV5IEEgQ2hlcm5vdikuCisJKyBjb3JyZWN0IG1pc3Npbmcgc2VkLWVkaXRpbmcgc3RhZ2UgaW4gbWFucGFnZSBpbnN0YWxscyB3aGljaCBpcyB1c2VkCisJICB0byByZW5hbWUgbWFucGFnZXMsIGJyb2tlbiBpbiAyMDAxMDMyNCBmaXggZm9yIERlYmlhbiAjODk5MzkgKERlYmlhbgorCSAgIzc4ODY2KS4KKwkrIHJlbW92ZSAtTCQobGliZGlyKSBmcm9tIGxpbmtlciBmbGFncywgcHJvYmFibHkgbm90IG5lZWRlZCBhbnkgbW9yZQorCSAgc2luY2UgSFBVWCBpcyBoYW5kbGVkIHByb3Blcmx5IChyZXBvcnRlZCBieSBOaWliZSBZdXRha2EKKwkgIDxnbmlpYmVAbTE3bi5vcmc+KS4KKwkrIGFkZCBjb25maWd1cmUgY2hlY2sgZm9yIG1ic3RhdGVfdCwgbmVlZGVkIGZvciB3aWRlLWNoYXJhY3RlcgorCSAgY29uZmlndXJhdGlvbi4gIE9uIHNvbWUgcGxhdGZvcm1zIHdlIG11c3QgaW5jbHVkZSA8d2NoYXIuaD4gdG8KKwkgIGRlZmluZSB0aGlzIChyZXBvcnRlZCBieSBEYW5pZWwgSmFjb2Jvd2l0eikuCisJKyBpbmNvcnBvcmF0ZSBzb21lIG9mIHRoZSBjaGFuZ2VzIG5lZWRlZCB0byBidWlsZCBkbGwncyBvbiBjeWd3aW4uCisKKzIwMDIwMTEyYQorCSsgd29ya2Fyb3VuZCBmb3IgYXdrIGRpZCBub3Qgd29yayB3aXRoIG1hd2ssIGFkanVzdGVkIHNoZWxsIHNjcmlwdC4KKworMjAwMjAxMTIKKwkrIGFkZCBDYXBzLm9zZjFyNSwgYXMgYW4gZXhhbXBsZS4KKwkrIG1vZGlmeSBiZWhhdmlvciBvZiBjYW5fY2xlYXJfd2l0aCgpIHNvIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gaXMKKwkgIHJ1bm5pbmcgaW4gYSBub24tYmNlIHRlcm1pbmFscyB3aXRoIGRlZmF1bHQgY29sb3JzIGVuYWJsZWQsIGl0CisJICByZXR1cm5zIHRydWUsIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNlbGVjdC9wYXN0ZSB0ZXh0IHdpdGhvdXQgcGlja2luZworCSAgdXAgZXh0cmFuZW91cyB0cmFpbGluZyBibGFua3MgKGFkYXB0ZWQgZnJvbSBwYXRjaCBieSBEYW5pZWwKKwkgIEphY29ib3dpdHogPGRtaitAYW5kcmV3LmNtdS5lZHU+KS4KKwkrIG1vZGlmeSBnZW5lcmF0ZWQgY3Vyc2VzLmggdG8gaWZkZWYtb3V0IHByb3RvdHlwZXMgZm9yIGV4dGVuc2lvbnMgaWYKKwkgIHRoZXkgYXJlIGRpc2FibGVkLCBhbmQgdG8gZGVmaW5lIGN1cnNlc192ZXJzaW9uKCkgYXMgYSBzdHJpbmcgaW4gdGhhdAorCSAgY2FzZS4gIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIHByb2dyYW1zIHN1Y2ggYXMgdGljIGJ1aWxkIGluIHRoYXQKKwkgIGNvbmZpZ3VyYXRpb24uCisJKyBtb2RpZmllZCBnZW5lcmF0ZWQgaGVhZGVycy5zaCB0byByZW1vdmUgYSBnemlwJ2QgdmVyc2lvbiBvZiB0aGUKKwkgIHRhcmdldCBmaWxlIGlmIGl0IGV4aXN0cywgaW4gY2FzZSBub24tZ3ppcCdkIG1hbnBhZ2VzIGFyZSBpbnN0YWxsZWQKKwkgIGludG8gYSBkaXJlY3Rvcnkgd2hlcmUgZ3ppcCdkIG9uZXMgZXhpc3QuICBJbiB0aGF0IGNhc2UsIHRoZSBsYXR0ZXIKKwkgIHdvdWxkIGJlIGZvdW5kLgorCSsgY29ycmVjdGVkIGEgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIHNpZ25hbCBoYW5kbGVycyBmcm9tIDIwMDEwOTIyCisJICBjaGFuZ2VzLgorCSsgY2xhcmlmaWVkIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcyBpbiB0ZXJtaW5mby5zcmMgKHJlcG9ydCBieSBKb2huIEgKKwkgIER1Qm9pcyBJSUkgPHNwY2VjZHRAYXJtb3J5LmNvbT4pLgorCT4gc2V2ZXJhbCBmaXhlcyBmcm9tIFJvYmVydCBKb29wOgorCSsgZG8gbm90IHVzZSAiLXYiIG9wdGlvbiBvZiBhd2sgaW4gTUtrZXlfZGVmcy5zaCBiZWNhdXNlIGl0IGRvZXMgbm90CisJICB3b3JrIHdpdGggU3VuT1MgbmF3ay4KKwkrIG1vZGlmeSBkZWZpbml0aW9ucyBmb3IgbGlidXRmOCBpbiBjdXJzZXMuaCB0byBhdm9pZCByZWRlZmluaXRpb24KKwkgIHdhcm5pbmdzIGZvciBtYmxlbgorCSsgcXVvdGVkIHJlZmVyZW5jZXMgdG8gY29tcGlsZXIgaW4gc2hlbGwgY29tbWFuZCBpbiBtaXNjL01ha2VmaWxlLCBpbgorCSAgY2FzZSBpdCB1c2VzIG11bHRpcGxlIHRva2Vucy4KKworMjAwMTEyMjkKKwkrIHJlc3RvcmUgc3BlY2lhbCBjYXNlIGZyb20gMjAwMTA5MjIgY2hhbmdlcyB0byBvbWl0IFNBX1JFU1RBUlQgd2hlbgorCSAgc2V0dGluZyB1cCBTSUdXSU5DSCBoYW5kbGVyLCB3aGljaCBpcyBuZWVkZWQgdG8gYWxsb3cgd2dldGNoKCkgdG8gYmUKKwkgIGludGVycnVwdGVkIGJ5IHRoYXQgc2lnbmFsLgorCSsgdXBkYXRlIGNvbmZpZ3VyZSBtYWNybyBDRl9XSVRIX1BBVEhMSVNULCB0byBvbWl0IHNvbWUgZG91YmxlIHF1b3RlcworCSAgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mIDIuNTIKKwkrIHJldmVydCBjb25maWd1cmUgc2NyaXB0IHRvIGF1dG9jb25mIDIuMTMgcGF0Y2hlZCB3aXRoCisJCWF1dG9jb25mLTIuMTMtMTk5OTAxMTcucGF0Y2guZ3ogKG9yIGxhdGVyKQorCSAgZnJvbQorCQlmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8KKwkgIGJlY2F1c2UgYXV0b2NvbmYgMi41MiBtYWNybyBBQ19QUk9HX0FXSyBkb2VzIG5vdCB3b3JrIG9uIEhQVVggMTEuMAorCSAgKHJlcG9ydCBieSBEYXZpZCBFbGxlbWVudCA8ZWxsZW1lbnRAc2RkLmhwLmNvbT4pLiAgVGhpcyBhbHNvIGZpeGVzIGEKKwkgIGRpZmZlcmVudCBwcm9ibGVtIGNvbmZpZ3VyaW5nIHdpdGggTWFjIE9TIFggKHJlcG9ydGVkIGJ5IE1hcmMgU21pdGgKKwkgIDxtYXJjLmEuc21pdGhAaG9tZS5jb20+KS4KKworMjAwMTEyMjIKKwkrIG1vZGlmeSBpbmNsdWRlL2VkaXRfY2ZnLmggdG8gZWxpbWluYXRlIEJST0tFTl9MSU5LRVIgc3ltYm9sIGZyb20KKwkgIHRlcm0uaAorCSsgbW92ZSBwcm90b3R5cGUgZm9yIF9uY192c3NjYW5mKCkgaW50byBjdXJzZXMuaC5pbiB0byBvbWl0CisJICBIQVZFX1ZTU0NBTkYgc3ltYm9sIGZyb20gY3Vyc2VzLmgsIHdoaWNoIHdhcyBkZXBlbmRlbnQgdXBvbiB0aGUKKwkgIG5jdXJzZXNfY2ZnLmggZmlsZSB3aGljaCBpcyBub3QgaW5zdGFsbGVkLgorCSsgdXNlIEFDU19MRU4gcmF0aGVyIHRoYW4gU0laRU9GKGFjc19tYXApIGluIHRyYWNlIGNvZGUgb2YgbGliX2Fjcy5jLAorCSAgdG8gd29yayB3aXRoIGJyb2tlbiBsaW5rZXIgY29uZmlndXJhdGlvbiwgZS5nLiwgY3lnd2luIChyZXBvcnQgYnkKKwkgIFJvYmVydCBKb29wIDxyakByYWluYm93LmluLWJlcmxpbi5kZT4pLgorCSsgbWFrZSBuYXBtcygpIGNhbGwgX25jX3RpbWVkX3dhaXQoKSByYXRoZXIgdGhhbiBwb2xsKCkgb3Igc2VsZWN0KCksCisJICB0byB3b3JrIGFyb3VuZCBicm9rZW4gaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIG9uIGN5Z3dpbi4KKworMjAwMTEyMTgKKwkrIGRyb3AgY29uZmlndXJlIG1hY3JvIENGX1dJREVDX1NISUZULCBzaW5jZSB0aGF0IHdhcyByZW5kZXJlZCBvYnNvbGV0ZQorCSAgYnkgU3ZlbiBWZXJkb29sYWVnZSdzIHJld3JpdGUgb2Ygd2lkZS1jaGFyYWN0ZXIgc3VwcG9ydC4gIFRoaXMgbWFrZXMKKwkgIGxpYm5jdXJzZXN3IGluY29tcGF0aWJsZSBhZ2FpbiwgYnV0IG1ha2VzIHRoZSBoZWFkZXIgZmlsZXMgYWxtb3N0IHRoZQorCSAgc2FtZSBhcyBpbiB0aGUgbmFycm93LWNoYXJhY3RlciBjb25maWd1cmF0aW9uLgorCSsgc2ltcGxpZnkgZGVmaW5pdGlvbnMgdGhhdCBjb21iaW5lIHdpZGUvbmFycm93IHZlcnNpb25zIG9mIGJrZ2QsIGV0Yy4sCisJICB0byBlbGltaW5hdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd2lkZS9uYXJyb3cgdmVyc2lvbnMgb2YgY3Vyc2VzLmgKKwkrIGNvcnJlY3QgdHlwbyBpbiBjb25maWd1cmUgbWFjcm8gQ0ZfRlVOQ19WU1NDQU5GCisJKyBjb3JyZWN0IGxvY2F0aW9uIG9mIGNhbGwgdG8gX25jX2tleXBhZCgpIGZyb20gMjAwMTEyMTUgY2hhbmdlcyB3aGljaAorCSAgcHJldmVudGVkIGtleXBhZCgpIGZyb20gYmVpbmcgZGlzYWJsZWQgKHJlcG9ydGVkIGJ5IExhcnMgSGVja2luZykuCisKKzIwMDExMjE1CisJKyByZXdyb3RlIG5jdXJzZXMgJ2EnIHRlc3QgdG8gZXhlcmNpc2Ugd2dldGNoKCkgYW5kIGtleXBhZCgpIGZ1bmN0aW9ucworCSAgYmV0dGVyLCBlLmcuLCBieSBhZGRpbmcgYSAndycgY29tbWFuZCB0byBjcmVhdGUgbmV3IHdpbmRvd3Mgd2hpY2gKKwkgIG1heSBoYXZlIGRpZmZlcmVudCBrZXlwYWQoKSBzZXR0aW5ncy4KKwkrIGNvcnJlY3RlZCBsb2dpYyBvZiBrZXlwYWQoKSBieSBhZGRpbmcgaW50ZXJuYWwgc2NyZWVuIHN0YXRlIHRvIHRyYWNrCisJICB3aGV0aGVyIHRoZSB0ZXJtaW5hbCdzIGtleXBhZC1tb2RlIGhhcyBiZWVuIHNldC4gIFVzZSB0aGlzIGluCisJICB3Z2V0Y2goKSB0byB1cGRhdGUgdGhlIGtleXBhZC1tb2RlIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZQorCSAgYXNzb2NpYXRlZCB3aW5kb3cncyBrZXlwYWQtbW9kZSBoYXMgYmVlbiBzZXQgd2l0aCBrZXlwYWQoKS4gIFRoaXMKKwkgIGNvcnJlY3RzIGEgcmVsYXRlZCBwcm9ibGVtIHJlc3RvcmluZyB0ZXJtaW5hbCBzdGF0ZSBhZnRlciBoYW5kbGluZworCSAgU0lHVFNUUCAocmVwb3J0ZWQgYnkgTWlrZSBDYXN0bGUpLgorCSsgcmVnZW5lcmF0ZSBjb25maWd1cmUgdXNpbmcgcGF0Y2ggZm9yIGF1dG9jb25mIDIuNTIKKwkJYXV0b2NvbmYtMi41Mi1wYXRjaC5negorCSAgYXQKKwkJZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViIGZyb20KKwkJaHR0cDovL3N1YnZlcnNpb25zLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzL2NvbmZpZy9jb25maWcvCisJKyBtaW5vciBjaGFuZ2VzIHRvIHF1b3RpbmcgaW4gY29uZmlndXJlIHNjcmlwdCB0byBhbGxvdyBpdCB0byB3b3JrCisJICB3aXRoIGF1dG9jb25mIDIuNTIKKworMjAwMTEyMDgKKwkrIG1vZGlmeSBmaW5hbCBjaGVja3MgaW4gbGliX3NldHVwLmMgZm9yIGxpbmUgYW5kIGNvbCB2YWx1ZXMsIG1ha2luZworCSAgdGhlbSBpbmRlcGVuZGVudC4KKwkrIG1vZGlmeSBhY3NfbWFwW10gaWYgY29uZmlndXJlIC0tYnJva2VuLWxpbmtlciBpcyBzcGVjaWZpZWQsIHRvIG1ha2UKKwkgIGl0IHVzZSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGFuIGFycmF5IChwcm9tcHRlZCBieSBhbiBpbmNvcnJlY3QKKwkgIGltcGxlbWVudGF0aW9uIGluIGN5Z3dpbiBwYWNrYWdlKS4KKwkrIGNvcnJlY3Qgc3BlbGxpbmcgb2YgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1jb2xvcmZnYmcsIHdoaWNoCisJICBoYXBwZW5lZCB0byB3b3JrIGlmIC0td2l0aC1kZXZlbG9wIHdhcyBzZXQgKG5vdGVkIGluIGN5Z3dpbiBwYWNrYWdlCisJICBmb3IgbmN1cnNlcykuCisJKyBtb2RpZnkgaWZkZWYgZm9yIGdlbmVyaWNlcnJvcigpIHRvIGNvbXBpbGUgd2l0aCBTVU5Xc3BybyBTdW4gV29ya1Nob3AKKwkgIDYgdXBkYXRlIDEgQysrIDUuMiAocGF0Y2ggYnkgU3VsbGl2YW4gTiBCZWNrIDxzYmVja0BjaXNlLnVmbC5lZHU+KS4KKwkrIGFkZCBjb25maWd1cmUgY2hlY2tzIHRvIHNlZSBpZiBuY3Vyc2VzJyBmYWxsYmFjayB2c3NjYW5mKCkgd2lsbAorCSAgY29tcGlsZSBlaXRoZXIgb2YgdGhlIHNwZWNpYWwgY2FzZXMgZm9yIEZJTEUgc3RydWN0cywgYW5kIGlmIG5vdCwKKwkgIGZvcmNlIGl0IHRvIHRoZSBjYXNlIHdoaWNoIHNpbXBseSByZXR1cm5zIGFuIGVycm9yIChyZXBvcnQgYnkKKwkgIFN1bGxpdmFuIE4gQmVjayA8c2JlY2tAY2lzZS51ZmwuZWR1PiBpbmRpY2F0ZXMgdGhhdCBTb2xhcmlzIDggd2l0aAorCSAgNjQtYml0cyBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8gRklMRSdzIGZpZWxkcykuCisJKyBtb2RpZnkgaWZkZWYncyBmb3IgYysrL2N1cnNlc3cuY2MgdG8gdXNlIHRoZSBmYWxsYmFjayB2c3NjYW5mKCkgaW4KKwkgIHRoZSBuY3Vyc2VzIGxpYnJhcnkgaWYgbm8gYmV0dGVyIHN1YnN0aXR1dGUgZm9yIHRoaXMgY2FuIGJlIGZvdW5kCisJICBpbiB0aGUgQysrIHJ1bnRpbWUuCisJKyBtb2RpZnkgdGhlIGJ1aWxkIHRvIG5hbWUgZHluYW1pYyBsaWJyYXJpZXMgYWNjb3JkaW5nIHRvIHRoZQorCSAgY29udmVudGlvbiB1c2VkIG9uIE9TIFggYW5kIERhcndpbi4gIFJhdGhlciB0aGFuIHNvbWV0aGluZyBsaWtlCisJICBsaWJuY3Vyc2VzLmR5bGliLjUuMiwgRGFyd2luIHdvdWxkIG5hbWUgaXQgbGlibmN1cnNlcy4gIDUuZHlsaWIuCisJICBUaGVyZSBhcmUgYSBmZXcgYWRkaXRpb25hbCBtaW5vciBmaXhlcywgc3VjaCBhcyBzZXR0aW5nIHRoZSBsaWJyYXJ5CisJICB2ZXJzaW9uIGFuZCBjb21wYXRpYmlsaXR5IHZlcnNpb24gbnVtYmVycyAocGF0Y2ggYnkgSmFzb24gRXZhbnMKKwkgIDxqZXZhbnNAYXBwbGUuY29tPikuCisJKyB1c2UgJ3NoJyB0byBydW4gbWtpbnN0YWxsZGlycywgdG8gd29yayBhcm91bmQgcHJvYmxlbXMgd2l0aCBidWdneQorCSAgdmVyc2lvbnMgb2YgJ21ha2UnIG9uIE9TLzIgKHJlcG9ydCBieSBKb2huIFBvbHRlcmFrIDxqcEBleXVwLm9yZz4pLgorCSsgY29ycmVjdCB0eXBvIGluIG1hbnBhZ2UgZGVzY3JpcHRpb24gb2YgY3Vyc19zZXQoKSAoRGViaWFuICMxMjE1NDgpLgorCSsgcmVwbGFjZSB0aGUgY29uZmlndXJlIHNjcmlwdCBleGlzdGVuY2UtY2hlY2sgZm9yIG1rc3RlbXAoKSBieSBvbmUKKwkgIHRoYXQgY2hlY2tzIGlmIHRoZSBmdW5jdGlvbiB3b3JrcywgbmVlZGVkIGZvciBvbGRlciBnbGliYyBhbmQKKwkgIEFtaWdhT1MuCisKKzIwMDExMjAxCisJKyBtb2RpZnkgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGZhbGxiYWNrcy5jIHRvIGNvbXBpbGUgYSB0ZW1wb3JhcnkKKwkgIGNvcHkgb2YgdGhlIHRlcm1pbmZvIHNvdXJjZSBpbiBjYXNlIHRoZSBob3N0IGRvZXMgbm90IGNvbnRhaW4gYWxsIG9mCisJICB0aGUgZW50cmllcyByZXF1ZXN0ZWQgZm9yIGZhbGxiYWNrcyAocmVxdWVzdCBieSBHcmVnIFJvZWxvZnMpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYWNjb21tb2RhdGUgc3lzdGVtcyBzdWNoIGFzIE1hYyBPUyBYIHdob3NlCisJICA8c3RkYm9vbC5oPiBoZWFkZXIgZGVmaW5lcyBhICdib29sJyB0eXBlIGluY29uc2lzdGVudCB3aXRoIG5jdXJzZXMsCisJICB3aGljaCBub3JtYWxseSBtYWtlcyAnYm9vbCcgY29uc2lzdGVudCB3aXRoIEMrKy4gIEluY2x1ZGUgPHN0ZGJvb2wuaD4KKwkgIGZyb20gY3Vyc2VzLmggdG8gZm9yY2UgY29uc2lzdGVudCB1c2FnZSwgZGVmaW5lIGEgbmV3IHR5cGUKKwkgIE5DVVJTRVNfQk9PTCBhbmQgcmVsYXRlZCB0aGF0IHRvIHRoZSBleHBvcnRlZCAnYm9vbCcgYXMgZWl0aGVyIGEKKwkgIHR5cGVkZWYgb3IgZGVmaW5pdGlvbiwgYWNjb3JkaW5nIHRvIHdoZXRoZXIgPHN0ZGJvb2wuaD4gaXMgcHJlc2VudAorCSAgKGJhc2VkIG9uIGEgYnVnIHJlcG9ydCBmb3IgdGluIDEuNS45IGJ5IEFhcm9uIEFkYW1zIDxhZGFtc2FAbWFjLmNvbT4pLgorCisyMDAxMTEyNAorCSsgYWRkZWQvdXBkYXRlZCB0ZXJtaW5mbyBlbnRyaWVzIGZvciBNJCB0ZWxuZXQgYW5kIEtERSBrb25zb2xlIC1URAorCisyMDAxMTExNworCSsgdXBkYXRlZC9leHBhbmRlZCBBcHBsZV9UZXJtaW5hbCBhbmQgRGFyd2luIFBvd2VyUEMgdGVybWluZm8gZW50cmllcworCSAgKEJlbmphbWluIEMgVyBTaXR0bGVyKS4KKwkrIGFkZCBwdXR0eSB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIGlmIGNvbmZpZ3VyaW5nIGZvciB3aWRlLWN1cnNlcywgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHNpbmNlCisJICB0aGlzIG1heSBub3Qgb3RoZXJ3aXNlIGJlIGRlZmluZWQgdG8gbWFrZSB0ZXN0L3ZpZXcuYyBjb21waWxlLgorCisyMDAxMTExMAorCSsgcmV2aWV3L2NvcnJlY3Qgc2V2ZXJhbCBtaXNzaW5nL2dlbmVyYXRlZCBpdGVtcyBpbiBjdXJzZXMud2lkZSwgc29ydGVkCisJICB0aGUgbGlzdHMgdG8gbWFrZSBzdWJzZXF1ZW50IGRpZmYncyBlYXNpZXIgdG8gdHJhY2suCisKKzIwMDExMTAzCisJKyBhZGQgbWFudWFsIHBhZ2VzIGZvciBhZGRfd2NoKCksIGVjaG9fd2NoYXIoKSwgZ2V0Y2NoYXIoKSwKKwkgIG12YWRkX3djaCgpLCBtdndhZGRfd2NoKCksIHNldGNjaGFyKCksIHdhZGRfd2NoKCkgYW5kIHdlY2hvX3djaGFyKCkuCisJKyBpbXBsZW1lbnQgd2VjaG9fd2NoYXIoKQorCSsgbW9kaWZ5IF90cmFjZWR1bXAoKSB0byBoYW5kbGUgd2lkZS1jaGFyYWN0ZXJzIGJ5IG1hcHBpbmcgdGhlbSB0byAnPycKKwkgIGFuZCBjb250cm9sLWNoYXJhY3RlcnMgdG8gJy4nLCB0byBtYWtlIHRoZSB0cmFjZSBmaWxlIHJlYWRhYmxlLiAgQWxzbworCSAgZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciB1c2VkIGJ5IF90cmFjZWR1bXAoKSBmb3IgZm9ybWF0dGluZworCSAgdGhlIHJlc3VsdHMuCisJKyBtb2RpZnkgVF9DQUxMRUQvVF9SRVRVUk4gbWFjcm9zIHRvIGVhc2UgYmFsYW5jaW5nIGNhbGwvcmV0dXJuIGxpbmVzCisJICBpbiBhIHRyYWNlIGJ5IHVzaW5nIGN1cmx5IGJyYWNlcy4KKwkrIGltcGxlbWVudCBfbmNfdmlzY2J1ZigpLCBmb3IgdHJhY2luZyBjY2hhcl90IGFycmF5cy4KKwkrIGNvcnJlY3QgdHJhY2UtY2FsbHMgaW4gc2V0Y2NoYXIoKSBhbmQgZ2V0Y2NoYXIoKSBmdW5jdGlvbnMsIHdoaWNoCisJICB0cmFjZWQgdGhlIHJldHVybiB2YWx1ZXMgYnV0IG5vdCB0aGUgZW50cnkgdG8gZWFjaCBmdW5jdGlvbi4KKwkrIGNvcnJlY3QgdXNhZ2UgbWVzc2FnZSBpbiB0ZXN0L3ZpZXcuYywgd2hpY2ggc3RpbGwgbWVudGlvbmVkIC11IGZsYWcuCisKKzIwMDExMDI3CisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhbGxvdyBidWlsZGluZyB3aXRoIHRlcm1jYXAgb25seSwgb3Igd2l0aAorCSAgZmFsbGJhY2tzIG9ubHkuICBJbiB0aGlzIGNhc2UsIHdlIGRvIG5vdCBidWlsZCB0aWMgYW5kIHRvZS4KKwkrIGFkZCBjb25maWd1cmUgLS13aXRoLXRlcm1wYXRoIG9wdGlvbiwgdG8gb3ZlcnJpZGUgZGVmYXVsdCBURVJNUEFUSAorCSAgdmFsdWUgb2YgL2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwLgorCSsgY29zbWV0aWMgY2hhbmdlIHRvIHRhY2s6IG1ha2UgbWVudSBkZXNjcmlwdGlvbnMgYWdyZWUgd2l0aCBtZW51CisJICB0aXRsZXMuCisKKzIwMDExMDIwCisJKyByZXdyb3RlIGxpbWl0LWNoZWNrcyBpbiB3c2NybCgpIGFuZCBhc3NvY2lhdGVkIF9uY19zY3JvbGxfd2luZG93KCksCisJICB0byBlbnN1cmUgdGhhdCBpZiB0aGUgcGFyYW1ldGVyIG9mIHdzY3JsKCkgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YKKwkgIHRoZSBzY3JvbGxpbmcgcmVnaW9uLCB0aGVuIHRoZSBzY3JvbGxpbmcgcmVnaW9uIHdpbGwgYmUgY2xlYXJlZAorCSAgKHJlcG9ydCBieSBCZW4gS29obGVuIDxiY2tvaGxlbkB5YWhvby5jb20+KS4KKwkrIGFkZCB0cmFjZS92YXJhcmdzLmMsIHVzaW5nIHRoaXMgdG8gdHJhY2UgcGFyYW1ldGVycyBpbiBsaWJfcHJpbnR3LmMKKwkrIGltcGxlbWVudCBfdHJhY2VjY2hhcl90MigpIGFuZCBfdHJhY2VjY2hhcl90KCkuCisJKyBzcGxpdC1vdXQgdHJhY2UvdmlzYnVmLmMKKwkrIGNvcnJlY3QgdHlwbyBpbiBsaWJfcHJpbnR3LmMgY2hhbmdlcyBmcm9tIDIwMDEwOTIyIChyZXBvcnQgYnkgTWlrZQorCSAgQ2FzdGxlKS4KKworMjAwMTEwMTMKKwkrIG1vZGlmeSBydW5fdGljLnNoIHRvIGNoZWNrIGlmIHRoZSBidWlsZCBpcyBhIGNyb3NzLWNvbXBpbGUuICBJbiB0aGF0CisJICBjYXNlLCBkbyBub3QgdXNlIHRoZSBidWlsZCdzIHRpYyB0byBpbnN0YWxsIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZQorCSAgKHJlcG9ydCBieSBSYWZhZWwgUm9kcmlndWV6IFZlbGlsbGEgPHJydkB0aWQuZXM+KS4KKwkrIG1vZGlmeSBtb3VzZSBjbGljayByZXNvbHV0aW9uIHNvIHRoYXQgbW91c2VpbnRlcnZhbCgtMSkgd2lsbCBkaXNhYmxlCisJICBpdCwgZS5nLiwgdG8gaGFuZGxlIHRvdWNoc2NyZWVucyB2aWEgYSBzbG93IGNvbm5lY3Rpb24gKHJlcXVlc3QgYnkKKwkgIEJ5cm9uIFN0YW5vc3playA8Z2FuZGFsZkB3aW5kcy5vcmc+KS4KKwkrIGNvcnJlY3QgbW91c2VpbnRlcnZhbCgpIGRlZmF1bHQgdmFsdWUgc2hvd24gaW4gY3Vyc19tb3VzZS4zeAorCSsgcmVtb3ZlIGNvbmZsaWN0aW5nIGRlZmluaXRpb24gb2YgbW91c2VfdHJhZm8oKSAocmVwb3J0ZWQgYnkgTGFycworCSAgSGVja2luZywgdXNpbmcgZ2NjIDIuOTUuMykuCisKKzIwMDExMDAxCisJKyBzaW1wbGVyIGZpeCBmb3Igc2lnbmFsX25hbWUoKSwgdG8gcmVwbGFjZSB0aGUgb25lIG92ZXJsb29rZWQgaW4KKwkgIDIwMDEwOTI5IChyZXBvcnRlZCBieSBMYXJyeSBWaXJkZW4pLgorCisyMDAxMDkyOQorCSsgYWRkIC1pIG9wdGlvbiB0byB2aWV3LmMsIHRvIHRlc3QgbmN1cnNlcycgY2hlY2sgZm9yIG5vbi1kZWZhdWx0CisJICBzaWduYWwgaGFuZGxlciBmb3IgU0lHSU5ULCBldGMuCisJKyBhZGQgY2FzZXMgZm9yIHNoYXJlZC1saWJyYXJpZXMgb24gRGFyd2luL09TIFggKHBhdGNoIGJ5IFJvYiBCcmF1bgorCSAgPGJicmF1bkBzeW5hY2submV0PikuCisJKyBtb2RpZnkgdHNldCB0byByZXN0b3JlIG9yaWdpbmFsIEkvTyBtb2RlcyBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKwkgIEFsc28gbW9kaWZ5IHRvIHVzZSBidWZmZXJlZCBzdGRlcnIgY29uc2lzdGVudGx5IHJhdGhlciB0aGFuIG1peGluZworCSAgd2l0aCB3cml0ZSgpLgorCSsgY2hhbmdlIHNpZ25hbF9uYW1lKCkgZnVuY3Rpb24gdG8gdXNlIGlmLXRoZW4tZWxzZSByYXRoZXIgdGhhbiBjYXNlCisJICBzdGF0ZW1lbnQsIHNpbmNlIHNpZ25hbC12YWx1ZXMgYXJlbid0IHJlYWxseSBpbnRlZ2VycyAocmVwb3J0ZWQgYnkKKwkgIExhcnJ5IFZpcmRlbikuCisJKyBhZGQgbGltaXQgY2hlY2tzIGluIHdyZWRyYXdsbigpLCBmaXhpbmcgYSBwcm9ibGVtIHdoZXJlIGx5bnggd2FzCisJICByZXBhaW50aW5nIGEgcGFkIHdoaWNoIHdhcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBzY3JlZW4uCisKKzIwMDEwOTIyCisJKyBmaXg6ICBQdXRSYW5nZSgpIHdhcyBjb3VudGluZyB0aGUgc2Vjb25kIHBhcnQgb2YgYSB3aWRlIGNoYXJhY3RlciBhcworCSAgcGFydCBvZiBhIHJ1biwgcmVzdWx0aW5nIGluIGEgY3Vyc29yIHBvc2l0aW9uIHRoYXQgd2FzIG9uZSB0b28gZmFyCisJICAocGF0Y2ggYnkgU3ZlbiBWZXJkb29sYWVnZSkuCisJKyBtb2RpZnkgcmVzaXpldGVybSgpIHRvIG5vdCBxdWV1ZSBhIEtFWV9SRVNJWkUgaWYgdGhlcmUgd2FzIG5vCisJICBTSUdXSU5DSCwgdGhlcmVieSBzZXBhcmF0aW5nIHRoZSB0d28gc3R5bGVzIG9mIFNJR1dJTkNIIGhhbmRsaW5nCisJICBpbiB0ZXN0L3ZpZXcuYworCSsgc2ltcGxpZmllZCBsaWJfdHN0cC5jLCBtb2RpZnkgaXQgdG8gdXNlIFNBX1JFU1RBUlQgZmxhZyBmb3IgU0lHV0lOQ0guCisJKyBlbGltaW5hdGUgc2V2ZXJhbCBzdGF0aWMgYnVmZmVycyBpbiB0aGUgdGVybWluZm8gY29tcGlsZXIsIHVzaW5nCisJICBhbGxvY2F0ZWQgYnVmZmVycy4KKwkrIG1vZGlmeSBNS2tleW5hbWUuYXdrIHNvIHRoYXQga2V5bmFtZSgpIGRvZXMgbm90IHN0b3JlIGl0cyByZXN1bHQgaW50bworCSAgYSBzdGF0aWMgYnVmZmVyIHRoYXQgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgY2FsbC4KKwkrIHJlb3JnYW5pemUgdGhlIG91dHB1dCBvZiBpbmZvY21wIC1FIGFuZCAtZSBvcHRpb25zIHRvIGNvbXBpbGUgY2xlYW5seQorCSAgd2l0aCBnY2MgLVd3cml0ZS1zdHJpbmdzIHdhcm5pbmdzLgorCSsgcmVtb3ZlIHJlZGVmaW5pdGlvbiBvZiBjaGdhdC93Y2hnYXQvbXZ3Y2hnYXQgZnJvbSBjdXJzZXMud2lkZQorCisyMDAxMDkxNQorCSsgYWRkIGxhYmVsIHRvIHRlc3Qvdmlldy5jLCBzaG93aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXN0IGtleSBvciBzaWduYWwKKwkgIHRoYXQgbWFkZSB0aGUgc2NyZWVuIHJlcGFpbnQsIHRvIG1ha2UgaXQgY2xlYXJlciB3aGVuIGEgc2lnd2luY2gKKwkgIGRvZXMgdGhpcy4KKwkrIHVzZSBFeGl0UHJvZ3JhbSgpIGNvbnNpc3RlbnRseSBpbiB0aGUgdGVzdC1wcm9ncmFtcyB0byBtYWtlIGl0CisJICBzaW1wbGVyIHRvIHRlc3QgbGVha3Mgd2l0aCBkbWFsbG9jLCBldGMuCisJKyBtb3ZlIGhhc2h0YWIgc3RhdGljIGRhdGEgb3V0IG9mIGhhc2htYXAuYyBpbnRvIFNDUkVFTiBzdHJ1Y3QuCisJKyBtYWtlIE5PX0xFQUsgY29kZSBjb21waWxlIHdpdGggcmV2aXNlZCBXSU5ET1dMSVNUIHN0cnVjdHMuCisKKzIwMDEwOTA4CisJKyBtb2RpZnkgdGdldGVudCgpIHRvIGNoZWNrIGlmIGV4aXRfYXR0cmlidXRlX21vZGUgcmVzZXRzIHRoZSBhbHRlcm5hdGUKKwkgIGNoYXJhY3RlciBzZXQsIGFuZCBpZiBzbywgYXR0ZW1wdCB0byBhZGp1c3QgdGhlIGNvcHkgb2YgdGhlIHRlcm1jYXAKKwkgICJtZSIgc3RyaW5nIHdoaWNoIGl0IHdpbGwgcmV0dXJuIHRvIGVsaW1pbmF0ZSB0aGF0IHBhcnQuICBJbgorCSAgcGFydGljdWxhciwgJ3NjcmVlbicgd291bGQgbG9zZSB0cmFjayBvZiBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycworCSAgKHJlcG9ydCBieSBGcmVkZXJpYyBMIFcgTWV1bmllciA8MEBwZXJ2YWxpZHVzLm5ldD4sIGFuYWx5c2lzIGJ5CisJICBNaWNoYWVsIFNjaHJvZWRlcikuCisKKzIwMDEwOTAxCisJKyBzcGVjaWZ5IERPQ1RZUEUgaW4gaHRtbCBtYW5wYWdlcy4KKwkrIGFkZCBtaXNzaW5nIG1hY3JvcyBmb3Igc2V2ZXJhbCAiZ2VuZXJhdGVkIiBmdW5jdGlvbnM6ICBhdHRyX2dldCgpLAorCSAgYXR0cl9vZmYoKSwgYXR0cl9vbigpLCBhdHRyX3NldCgpLCBjaGdhdCgpLCBtdmNoZ2F0KCksIG12d2NoZ2F0KCkgYW5kCisJICBtb3VzZV90cmFmbygpLgorCSsgbW9kaWZ5IHZpZXcuYyB0byBhZ3JlZSB3aXRoIG5vbi1leHBlcmltZW50YWwgc3RhdHVzIG9mIG5jdXJzZXMnCisJICBzaWd3aW5jaCBoYW5kbGVyOgorCSAgKyBjaGFuZ2UgdGhlIHNlbnNlIG9mIHRoZSAtciBvcHRpb24sIG1ha2luZyBpdCBkZWZhdWx0IHRvIG5jdXJzZXMnCisJICAgIHNpZ3dpbmNoIGhhbmRsZXIuCisJICArIGFkZCBhIG5vdGUgZXhwbGFpbmluZyB3aGF0IGZ1bmN0aW9ucyBhcmUgdW5zYWZlIGluIGEgc2lnbmFsCisJICAgIGhhbmRsZXIuCisJICArIGFkZCBhIC1jIG9wdGlvbiwgdG8gc2V0IGNvbG9yIGRpc3BsYXksIGZvciB0ZXN0aW5nLgorCSsgdW5zZXQgJGRhdGEgdmFyaWFibGUgaW4gTUt0ZXJtaW5mby5zaCBzY3JpcHQsIHRvIGFkZHJlc3MgcG90ZW50aWFsCisJICBpbmZpbml0ZSBsb29wIGlmIHNoZWxsIG1hbGZ1bmN0aW9uIChyZXBvcnQgYnkgU2FtdWVsIE1pa2VzCisJICA8c21pa2VzQGN1YmFuZS5jb20+LCBmb3IgYmFzaCAyLjA1LjAgb24gYSBMaW51eCAyLjAuMzYgc3lzdGVtKS4KKwkrIGNoYW5nZSBrYnMgaW4gbWFjaCB0ZXJtaW5mbyBlbnRyaWVzIHRvIF4/ICAoTWFyY3VzIEJyaW5rbWFubgorCSAgPE1hcmN1cy5Ccmlua21hbm5AcnVoci11bmktYm9jaHVtLmRlPikuCisJKyBjb3JyZWN0IGxvZ2ljIGZvciBDT0xPUkZHQkcgZW52aXJvbm1lbnQgdmFyaWFibGU6IGlmIHJ4dnQgaXMgY29tcGlsZWQKKwkgIHdpdGggeHBtIHN1cHBvcnQsIHRoZSB2YXJpYWJsZSBoYXMgdGhyZWUgZmllbGRzLCBtYWtpbmcgaXQgc2xpZ2h0bHkKKwkgIGluY29tcGF0aWJsZSB3aXRoIGl0c2VsZi4gIEluIGVpdGhlciBjYXNlLCB0aGUgYmFja2dyb3VuZCBjb2xvciBpcworCSAgdGhlIGxhc3QgZmllbGQuCisKKzIwMDEwODI1CisJKyBtb3ZlIGNhbGxzIHRvIGRlZl9zaGVsbF9tb2RlKCkgYW5kIGRlZl9wcm9nX21vZGUoKSBiZWZvcmUgbG9vcCB3aXRoCisJICBjYWxsYmFja3MgaW4gbGliX3NldF90ZXJtLmMsIHNpbmNlIHRoZSBjKysgZGVtbyBvdGhlcndpc2UgaW5pdGlhbGl6ZWQKKwkgIHRoZSB0dHkgbW9kZXMgYmVmb3JlIHNhdmluZyB0aGVtIChwYXRjaCBieSBKb2huIERhdmlkIEFuZ2xpbgorCSAgPGRhdmVAaGlhdWx5MS5oaWEubnJjLmNhPikuCisJKyBkdXBsaWNhdGUgbG9naWMgdXNlZCB0byBpbml0aWFsaXplIHRyYWNlIGluIG5ld3Rlcm0oKSwgaW4gaW5pdHNjcigpCisJICB0byBhdm9pZCBjb25mdXNpbmcgdHJhY2Ugb2YgaW5pdHNjcigpLgorCSsgc2ltcGxpZnkgYWxsb2NhdGlvbiBvZiBXSU5ET1cgYW5kIFdJTkRPV0xJU1Qgc3RydWN0cyBieSBtYWtpbmcgdGhlCisJICBmaXJzdCBhIHBhcnQgb2YgdGhlIHNlY29uZCByYXRoZXIgdGhhbiBzdG9yaW5nIGEgcG9pbnRlci4gIFRoaXMgc2F2ZXMKKwkgIGEgY2FsbCB0byBtYWxsb2MgZm9yIGVhY2ggd2luZG93IChkaXNjdXNzaW9uIHdpdGggUGhpbGlwcGUgQmxhaW4pLgorCSsgcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSAndXNlZF9uY3YnIGZyb20gbGliX3ZpZGF0dHIuYyAoUGhpbGlwcGUKKwkgIEJsYWluKS4KKwkrIG1vZGlmeSBjKysvTWFrZWZpbGUuaW4gdG8gYWNjb21tb2RhdGUgYXJjaGl2ZSBwcm9ncmFtcyB0aGF0IGFyZQorCSAgZGlmZmVyZW50IGZvciBDKysgdGhhbiBmb3IgQywgYW5kIGFkZCBjYXNlcyBmb3IgdmVuZG9yJ3MgQysrCisJICBjb21waWxlcnMgb24gU29sYXJpcyBhbmQgSVJJWCAocmVwb3J0IGJ5IEFsYmVydCBDaGluLUEtWW91bmcpLgorCSsgY29ycmVjdCBtYW5wYWdlIGRlc2NyaXB0aW9uIG9mIGNyaXRlcmlhIGZvciBkZWNpZGluZyBpZiB0aGUgdGVybWluYWwKKwkgIHN1cHBvcnRzIHh0ZXJtIG1vdXNlIGNvbnRyb2xzLgorCSsgYWRkIHNldmVyYWwgY29uZmlndXJlIHNjcmlwdCBvcHRpb25zIHRvIGFpZCB3aXRoIGNyb3NzLWNvbXBpbGluZzoKKwkgIC0td2l0aC1idWlsZC1jYywgLS13aXRoLWJ1aWxkLWNmbGFncywgLS13aXRoLWJ1aWxkLWxkZmxhZ3MsIGFuZAorCSAgLS13aXRoLWJ1aWxkLWxpYnMgKHJlcXVlc3QgYnkgR3JlZyBSb2Vsb2ZzKS4KKwkrIGNoYW5nZSBjcml0ZXJpYSBmb3IgZGVjaWRpbmcgaWYgY29uZmlndXJlIGlzIGNyb3NzLWNvbXBpbGluZyBmcm9tCisJICBob3N0L2J1aWxkIG1pc21hdGNoIHRvIGhvc3QvdGFyZ2V0IG1pc21hdGNoIChyZXF1ZXN0IGJ5IEdyZWcgUm9lbG9mcworCSAgPGdyZWcucm9lbG9mc0BwaGlsaXBzLmNvbT4pLgorCSsgY29ycmVjdCBsb2dpYyBmb3IgaW5mb2NtcCAtZSBhbmQgLUUgb3B0aW9ucyB3aGljaCB3cml0ZXMgdGhlIGRhdGEgZm9yCisJICB0aGUgZXh0X05hbWVzW10gYXJyYXkuICBUaGlzIGlzIG5lZWRlZCBpZiBvbmUgY29uc3RydWN0cyBhIGZhbGxiYWNrCisJICB0YWJsZSBmb3IgYSB0ZXJtaW5mbyBlbnRyeSB3aGljaCB1c2VzIGV4dGVuZGVkIHRlcm1jYXAgbmFtZXMsIGUuZy4sCisJICBBWCBpbiBhIGNvbG9yIHh0ZXJtLgorCSsgZml4IHVuZGVmaW5lZCBOQ1VSU0VTX1BBVEhTRVAgd2hlbiBjb25maWd1cmUgLS1kaXNhYmxlLWRhdGFiYXNlCisJICBvcHRpb24gaXMgZ2l2ZW4uCisKKzIwMDEwODExCisJKyBmaXggZm9yIFZBTElEX0JPT0xFQU4oKSBtYWNybyB3aGVuIGNoYXIgaXMgbm90IHNpZ25lZC4KKwkrIG1vZGlmeSAnY2xlYW4nIHJ1bGUgZm9yIEMrKyBiaW5kaW5nIHRvIHdvcmsgd2l0aCBTdW4gY29tcGlsZXIsIHdoaWNoCisJICBjYWNoZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgb2JqZWN0cy4KKwkrIGFkZGVkIGxsaWItbmN1cnNlc3cuCisKKzIwMDEwODA0CisJKyBhZGQgQ2Fwcy5rZXlzIGV4YW1wbGUgZm9yIGV4cGVyaW1lbnRhbCBleHRlbmRlZCBmdW5jdGlvbiBrZXlzCisJICAoYWRhcHRlZCBmcm9tIGEgcGF0Y2ggYnkgSWx5YSBaYWtoYXJldmljaCkuCisJKyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlcyBvZiB2aWRwdXRzKCkgYW5kIHZpZGF0dHIoKSB0byBhZ3JlZSB3aXRoCisJICBoZWFkZXIgZmlsZXMgKHJlcG9ydCBieSBXaWxsaWFtIFAgU2V0emVyKS4KKwkrIGZpeCB0eXBvcyBpbiBzZXZlcmFsIG1hbi1wYWdlcyAocGF0Y2ggYnkgV2lsbGlhbSBQIFNldHplcikuCisJKyByZW1vdmUgdW5uZWVkZWQgaWZkZWYgZm9yIF9fR05VR19fIGluIENGX0NQUF9WU0NBTl9GVU5DIGNvbmZpZ3VyZQorCSAgbWFjcm8sIHdoaWNoIG1hZGUgbmN1cnNlcyBDKysgYmluZGluZyBmYWlsIHRvIGJ1aWxkIHdpdGggb3RoZXIKKwkgIEMrKyBjb21waWxlcnMgc3VjaCBhcyBIUFVYIDExLnggKHJlcG9ydCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIHdvcmthcm91bmQgZm9yIGJ1ZyBpbiBIUFVYIDExLnggQyBjb21waWxlcjogYWRkIGEgYmxhbmsgYWZ0ZXIKKwkgIE5DVVJTRVNfRVhQT1JUIG1hY3JvIGluIGZvcm0uaCAocmVwb3J0IGJ5IEFsYmVydCBDaGluLUEtWW91bmcpCisJKyBpZ25vcmUgYmxhbmsgbGluZXMgaW4gQ2FwcyogZmlsZXMgaW4gTUtrZXlfZGVmcy5zaCBzY3JpcHQgKHJlcG9ydCBieQorCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBjb3JyZWN0IGRlZmluaXRpb24gb2Yga2V5X2VuZCBpbiBDYXBzLmFpeDQsIHdoaWNoIGxlZnQgS0VZX0VORAorCSAgdW5kZWZpbmVkIChyZXBvcnQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyByZW1vdmUgYSBRTlgtc3BlY2lmaWMgZmFsbGJhY2sgcHJvdG90eXBlIGZvciB2c3NjYW5mKCksIHdoaWNoIGlzCisJICBvYnNvbGV0ZSB3aXRoIFFOWCBSVFAuCisJKyByZXZpZXcvZml4IHNvbWUgb2YgdGhlIFQoKSBhbmQgVFIoKSBtYWNybyBjYWxscywgaGF2aW5nIG5vdGljZWQgdGhhdAorCSAgdGhlcmUgd2FzIG5vIGRhdGEgZm9yIGRlbHdpbigpIGluIGEgdHJhY2Ugb2YgZGlhbG9nIGJlY2F1c2UgdGhlcmUgd2FzCisJICBubyByZXR1cm5Wb2lkIGNhbGwgZm9yIHd0aW1lb3V0KCkuICBBbHNvLCB0cmFjZXMgaW4gbGliX3R3YWl0LmMgYXJlCisJICBub3cgc2VsZWN0ZWQgdW5kZXIgVFJBQ0VfSUVWRU5UIHJhdGhlciB0aGFuIFRSQUNFX0NBTExTLgorCisyMDAxMDcyOAorCSsgYWRkIGEgX25jX2FjY2VzcygpIGNoZWNrIGJlZm9yZSBvcGVuaW5nIGZpbGVzIGxpc3RlZCB2aWEgJFRFUk1QQVRILgorCSsgdXNpbmcgbW9kaWZpZWQgbWFuMmh0bWwsIHJlZ2VuZXJhdGUgc29tZSBvZiB0aGUgaHRtbCBtYW5wYWdlcyB0byBmaXgKKwkgIGJyb2tlbiBIUkVGJ3Mgd2hlcmUgdGhlIGxpbmsgd2FzIGh5cGhlbmF0ZWQuCisKKzIwMDEwNzIxCisJKyBhZGQgc29tZSBsaW1pdC9wb2ludGVyIGNoZWNrcyB0byAtUyBvcHRpb24gb2YgdHB1dHMuCisJKyB1cGRhdGVkL2V4cGFuZGVkIEFwcGxlX1Rlcm1pbmFsIGFuZCBEYXJ3aW4gUG93ZXJQQyB0ZXJtaW5mbyBlbnRyaWVzCisJICAoQmVuamFtaW4gQyBXIFNpdHRsZXIpLgorCSsgYWRkIGEgbm90ZSBpbiBjdXJzX3Rlcm1jYXAuM3ggcmVnYXJkaW5nIGEgZGVmZWN0IGluIHRoZSBYU0kKKwkgIGRlc2NyaXB0aW9uIG9mIHRnZXRlbnQgKGJhc2VkIG9uIGEgZGlzY3Vzc2lvbiB3aXRoIFVycyBKYW5zZW4KKwkgIHJlZ2FyZGluZyB0aGUgSFBVWCAxMS54IGltcGxlbWVudGF0aW9uLCB3aG9zZSB0ZXJtY2FwIGludGVyZmFjZSBpcworCSAgbm90IGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB0ZXJtY2FwIHByb2dyYW1zKS4KKwkrIG1vZGlmeSBtYW5odG1sIHJ1bGUgaW4gZGlzdC5tayB0byBwcmVzZXJ2ZSBjb3B5cmlnaHQgbm90aWNlIG9uIHRoZQorCSAgZ2VuZXJhdGVkIGZpbGVzLCBhcyB3ZWxsIGFzIHRvIGFkZHJlc3MgSFRNTCBzdHlsZSBpc3N1ZXMgcmVwb3J0ZWQgYnkKKwkgIHRpZHkgYW5kIHdlYmxpbnQuICBSZWdlbmVyYXRlZC91cGRhdGVkIGNvcnJlc3BvbmRpbmcgaHRtbCBmaWxlcy4KKwkrIGNvbW1lbnQgb3V0IHVzZSBvZiBQcm90ZWN0ZWRfQ2hhcmFjdGVyIGFuZCByZWxhdGVkIHJhcmVseSB1c2VkCisJICBhdHRyaWJ1dGVzIGluIG5jdXJzZXMgQWRhOTUgdGVzdC9kZW1vIHRvIGNvbXBpbGUgd2l0aCB3aWRlLWNoYXJhY3RlcgorCSAgY29uZmlndXJhdGlvbi4KKworMjAwMTA3MTQKKwkrIGltcGxlbWVudCBhIHNpbXBsZSBleGFtcGxlIGluIEMrKyBkZW1vIHRvIHRlc3Qgc2NhbncoKS4KKwkrIGNvcnJlY3RlZCBzdGRpbyBmdW5jdGlvbiB1c2VkIHRvIGltcGxlbWVudCBzY2FudygpIGluIGN1cnNlc3cuY2MKKwkrIGNvcnJlY3QgZGVmaW5pdGlvbiBvZiBSZW1BdHRyKCkgbWFjcm8gZnJvbSAyMDAxMDYwMiBjaGFuZ2VzLCB3aGljaAorCSAgY2F1c2VkIEMrKyBTaWxseURlbW8gdG8gbm90IHNob3cgbGluZS1kcmF3aW5nIGNoYXJhY3RlcnMuCisJKyBtb2RpZnkgQysrIGJpbmRpbmcsIGFkZGluZyBnZXRLZXkoKSB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2VyCisJICB0byBzdWJzdGl0dXRlIGZ1bmN0aW9ucyBvdGhlciB0aGFuIGdldGNoKCkgZm9yIGtleWJvYXJkIHByb2Nlc3NpbmcKKwkgIG9mIGZvcm1zIGFuZCBtZW51cyAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworMjAwMTA3MDcKKwkrIGZpeCBzb21lIG9mIHRoZSB0cmFjZSBjYWxscyB3aGljaCBuZWVkZWQgbW9kaWZpY2F0aW9uIHRvIHdvcmsgd2l0aAorCSAgbmV3IHdpZGUtY2hhcmFjdGVyIHN0cnVjdHVyZXMuCisJKyBtb2RpZnkgbWFnaWMtY29va2llIGNvZGUgaW4gdHR5X3VwZGF0ZS5jIHRvIGNvbXBpbGUgd2l0aCBuZXcKKwkgIHdpZGUtY2hhcmFjdGVyIHN0cnVjdHVyZXMgKHJlcG9ydCBieSA8R2VvcmdlLlIuR29mZmVAc2VhZ2F0ZS5jb20+KS4KKwkrIGVuc3VyZSB0aGF0IF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZCBpbiBjdXJzZXMucHJpdi5oIGlmCisJICBjb21waWxpbmcgZm9yIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisJKyBtYWtlIGFkZHduc3RyKCkgaGFuZGxlIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMgKHBhdGNoIGJ5IFN2ZW4KKwkgIFZlcmRvb2xhZWdlKS4KKworMjAwMTA2MzAKKwkrIGFkZCBjb25maWd1cmUgY2hlY2sgdG8gZGVmaW5lIF9HTlVfU09VUkNFLCBuZWVkZWQgdG8gcHJvcCB1cCBnbGliYworCSAgaGVhZGVyIGZpbGVzLgorCSsgc3BsaXQtb3V0IGluY2x1ZGUvY3Vyc2VzLndpZGUgdG8gc29sdmUgc3B1cmlvdXMgcmVkZWZpbml0aW9ucyBjYXVzZWQKKwkgIGJ5IGRlZmluaW5nIF9HTlVfU09VUkNFLCBhbmQgbW92ZSBpbmNsdWRlcyBmb3IgPHNpZ25hbC5oPiBiZWZvcmUKKwkgIDxjdXJzZXMuaD4gdG8gd29yayBhcm91bmQgbWlzZGVmaW5pdGlvbiBvZiBFUlIgaW4gZ2xpYmMgMi4xLjMgaGVhZGVyCisJICBmaWxlLgorCSsgZXh0ZW5kZWQgb3NwZWVkIGNoYW5nZSB0byBOZXRCU0QgYW5kIE9wZW5CU0QgLVRECisJKyBtb2RpZnkgbG9naWMgaW4gbGliX2JhdWRyYXRlLmMgZm9yIG9zcGVlZCwgZm9yIEZyZWVCU0QgdG8gbWFrZSBpdAorCSAgd29yayBwcm9wZXJseSBmb3IgdGVybWNhcCBhcHBsaWNhdGlvbnMgKHBhdGNoIGJ5IEFuZHJleSBBIENoZXJub3YpLgorCisyMDAxMDYyMworCSsgY29ycmVjdCBhbiBvdmVybG9va2VkIENoYXJPZi9VQ2hhciBpbnN0YW5jZSAocmVwb3J0cyBieSBFdWdlbmUgTGVlCisJICA8ZXVnZW5lQGFuaW1lLm5ldD4sIFN2ZW4gVmVyZG9vbGFlZ2UpLgorCSsgY29ycmVjdCB1bm5lZWRlZCBpZmRlZiBmb3Igd3VuY3RybCgpIChyZXBvcnRlZCBieSBTdmVuIFZlcmRvb2xhZWdlKQorCisyMDAxMDYxOAorCSsgY2hhbmdlIG92ZXJsb29rZWQgc2V2ZXJhbCBDaGFyT2YvVUNoYXIgaW5zdGFuY2VzLgorCT4gc2V2ZXJhbCBwYXRjaGVzIGZyb20gU3ZlbiBWZXJkb29sYWVnZToKKwkrIGNvcnJlY3QgYSB0eXBvIGluIHd1bmN0cmwoKSwgd2hpY2ggbWFkZSBpdCBhcHBlYXIgdGhhdCBib3R3YygpIHdhcworCSAgbmVlZGVkIChubyBzdWNoIGZ1bmN0aW9uOiB1c2UgYnRvd2MoKSkuCisJKyByZWltcGxlbWVudCB3aWRlLWNoYXJhY3RlciBkZW1vIGluIHRlc3Qvdmlldy5jLCB1c2luZyBuZXcgZnVuY3Rpb25zLgorCSsgaW1wbGVtZW50IGdldGNjaGFyKCksIHNldGNjaGFyKCksIHdhZGRfd2NobnN0cigpIGFuZCByZWxhdGVkIG1hY3Jvcy4KKwkrIGZpeCBhIHN5bnRheCBwcm9ibGVtIHdpdGggZG8vaWYvd2hpbGUgaW4gUFVUQyBtYWNybyAoY3Vyc2VzLnByaXYuaCkuCisKKzIwMDEwNjE2CisJKyBhZGQgcGFyZW50aGVzZXMgaW4gbWFjcm9zIGZvciBtYWxsb2MgaW4gdGVzdC5wcml2LmgsIGZpeGVzIGFuCisJICBleHByZXNzaW9uIGluIHZpZXcuYyAocmVwb3J0IGJ5IFdvbGZnYW5nIEd1dGphaHIgPGd1dHdAa25hcHAuY28uYXQ+KS4KKwkrIGFkZCBDYXBzLnV3aW4sIGFzIGFuIGV4YW1wbGUuCisJKyBjaGFuZ2UgdGhlIHdheSBjdXJzZXMuaCBpcyBnZW5lcmF0ZWQsIG1ha2luZyB0aGUgbGlzdCBvZiBmdW5jdGlvbgorCSAga2V5IGRlZmluaXRpb25zIGV4dHJhY3RlZCBmcm9tIHRoZSBDYXBzIGZpbGUuCisJKyBhZGQgI3VuZGVmJ3MgYmVmb3JlIHBvc3NpYmxlIHJlZGVmaW5pdGlvbiBvZiBFUlIgYW5kIE9LIGluIGN1cnNlcy5oCisJKyBtb2RpZnkgbG9naWMgaW4gdGljLCB0b2UsIHRwdXQgYW5kIHRzZXQgd2hpY2ggY2hlY2tzIGZvciBiYXNlbmFtZSBvZgorCSAgYXJndlswXSB0byB3b3JrIHByb3Blcmx5IG9uIHN5c3RlbXMgc3VjaCBhcyBPUy8yIHdoaWNoIGhhdmUKKwkgIGNhc2UtaW5kZXBlbmRlbnQgZmlsZW5hbWVzIGFuZC9vciBwcm9ncmFtIHN1ZmZpeGVzLCBlLmcuLCAiLmV4dCIuCisKKzIwMDEwNjA5CisJKyBhZGQgYSBjb25maWd1cmUgY2hlY2ssIGlmIC0tZW5hYmxlLXdpZGVjIGlzIHNwZWNpZmllZCwgZm9yIHB1dHdjKCksCisJICB3aGljaCBtYXkgYmUgaW4gbGlidXRmOC4KKwkrIHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5IHRleHQgZnJvbSBjdXJzX2V4dGVuZC4zeCBhbmQKKwkgIGRlZmF1bHRfY29sb3JzLjN4IHdoaWNoIGNhdXNlZCBtYW4tZGIgdG8gbWFrZSBpbmNvcnJlY3Qgc3ltYm9saWMKKwkgIGxpbmtzIChEZWJpYW4gYnVnIHJlcG9ydCAjOTk1NTApLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBpZiBjYXN0IGZvciBfSU9fdmFfbGlzdCBpcyBuZWVkZWQgdG8gY29tcGlsZQorCSAgQysrIHZzY2FuIGNvZGUgKERlYmlhbiBidWcgcmVwb3J0ICM5Nzk0NSkuCisJPiBzZXZlcmFsIHBhdGNoZXMgZnJvbSBTdmVuIFZlcmRvb2xhZWdlOgorCSsgY29ycmVjdCBjb2RlIHRoYXQgdXNlZCBub24tc3RhbmRhcmQgYXV0by1pbml0aWFsaXphdGlvbiBvZiBhIHN0cnVjdCwKKwkgIHdoaWNoIGdjYyBhbGxvd3MgKHJlcG9ydCBieSBMYXJyeSBWaXJkZW4pLgorCSsgdXNlIHB1dHdjKCkgaW4gUFVUQygpIG1hY3JvLgorCSsgbWFrZSBhZGRzdHIoKSB3b3JrIGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBjb2Rlc2V0IGlzCisJICBub24tc3RhdGVmdWwgKGVnLiBVVEYtOCksIGFzIHdlbGwgYXMgc3RhdGVmdWwgY29kZXNldHMuCisKKzIwMDEwNjAzCisJKyBjb3JyZWN0IGxvb3AgZXhwcmVzc2lvbiBpbiBORVhUX0NIQVIgbWFjcm8gZm9yIGxpYl9hZGRzdHIuYyBjaGFuZ2VzCisJICBmcm9tIDIwMDEwNjAyIChyZXBvcnQgYnkgTWlrZSBDYXN0bGUpLgorCisyMDAxMDYwMgorCSsgbW9kaWZ5IG12Y3VyKCkgdG8gYXZvaWQgZW1pdHRpbmcgbmV3bGluZSBjaGFyYWN0ZXJzIHdoZW4gbm9ubCgpIG1vZGUKKwkgIGlzIHNldC4gIE5vcm1hbGx5IHRoaXMgaXMgbm90IGEgcHJvYmxlbSBzaW5jZSB0aGUgYWN0dWFsIHRlcm1pbmFsCisJICBtb2RlIGlzIHNldCB0byBzdXBwcmVzcyBubC9jcmxmIHRyYW5zbGF0aW9ucywgaG93ZXZlciBpdCBpcyB1c2VmdWwgdG8KKwkgIGFsbG93IHRoZSBjYWxsZXIgdG8gbWFuaXB1bGF0ZSB0aGUgdGVybWluYWwgbW9kZSB0byBhdm9pZCBzdGFpcmNhc2luZworCSAgZWZmZWN0cyBhZnRlciBzcGF3bmluZyBhIHByb2Nlc3Mgd2hpY2ggd3JpdGVzIG1lc3NhZ2VzIChmb3IgbHlueAorCSAgMi44LjQpIC1URAorCT4gc2V2ZXJhbCBwYXRjaGVzIGZyb20gU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9Aa290bmV0Lm9yZz46CisJKyByZW1vdmUgcmVkdW5kYW50IHR5cGUtY29udmVyc2lvbiBpbiBmaWZvX3B1c2goKQorCSsgY29ycmVjdCBkZWZpbml0aW9uIG9mIGFkZHdzdHIoKSBtYWNybyBpbiBjdXJzZXMuaC5pbgorCSsgcmVtb3ZlIF9uY191dGY4X291dGNoKCkKKwkrIHJlbmFtZSBtb3N0IGV4aXN0aW5nIHVzZXMgb2YgQ2hhck9mKCkgdG8gVUNoYXIoKSwgZS5nLiwgd2hlcmUgaXQgaXMKKwkgIHVzZWQgdG8gcHJldmVudCBzaWduLWV4dGVuc2lvbiBpbiBjdHlwZSBtYWNyb3MuCisJKyBjaGFuZ2Ugc29tZSBjaHR5cGUncyB0byBhdHRyX3QncyB3aGVyZSB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZXMKKwkgIGFyZSB1c2VkIHRvIG1hbmlwdWxhdGUgYXR0cmlidXRlcy4KKwkrIFVwZGF0ZUF0dHIoKSB3YXMgYXBwbGllZCB0byBib3RoIGF0dHJpYnV0ZXMgKGF0dHJfdCkgYW5kIGNoYXJhY3RlcnMKKwkgIChjaHR5cGUpLiAgTW9kaWZ5IG1hY3JvIGFuZCBjYWxscyB0byBpdCB0byBtYWtlIHRoZXNlIGRpc3RpbmN0LgorCSsgYWRkIENoYXJFcSgpIG1hY3JvLCB1c2UgaW4gcGxhY2VzIHdoZXJlIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24KKwkgIGltcGxlbWVudGF0aW9uIHVzZXMgYSBzdHJ1Y3QgZm9yIGNjaGFyX3QuCisJKyBtb3ZlZCBzdHJ1Y3QgbGRhdCBpbnRvIGN1cnNlcy5wcml2LmgsIHRvIGhpZGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKwkrIGNoYW5nZSBDaGFyT2YoKSBtYWNybyB0byB1c2UgaXQgZm9yIG1hc2tpbmcgQV9DSEFSVEVYVCBkYXRhIGZyb20KKwkgIGNodHlwZSdzLgorCSsgYWRkIEwoKSBtYWNybyB0byBjdXJzZXMucHJpdi5oLCBmb3IgbG9uZy1jaGFyYWN0ZXIgbGl0ZXJhbHMuCisJKyByZXBsYWNlIHNldmVyYWwgYXNzaWdubWVudHMgZnJvbSBzdHJ1Y3QgbGRhdCBlbnRyaWVzIHRvIGNodHlwZSBvcgorCSAgY2hhciB2YWx1ZXMgd2l0aCBjb21iaW5hdGlvbnMgb2YgQ2hhck9mKCkgYW5kIEF0dHJPZigpIG1hY3Jvcy4KKwkrIGFkZC91c2UgaW50ZXJtZWRpYXRlIENoQXR0ck9mKCkgYW5kIENoQ2hhck9mKCkgbWFjcm9zIHdoZXJlIHdlIGtub3cKKwkgIHdlIGFyZSB1c2luZyBjaHR5cGUgZGF0YS4KKwkrIGFkZC91c2UgbG93bGV2ZWwgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBtYWNyb3MgQWRkQXR0cigpLCBSZW1BdHRyKCkKKwkgIGFuZCBTZXRBdHRyKCkuCisJKyBhZGQvdXNlIFNldENoYXIoKSBtYWNybywgdG8gY2hhbmdlIGEgY2NoYXJfdCBiYXNlZCBvbiBhIGNoYXJhY3RlciBhbmQKKwkgIGF0dHJpYnV0ZXMuCisJKyBjb252ZXJ0IG1vc3QgaW50ZXJuYWwgdXNlIG9mIGNodHlwZSB0byBOQ1VSU0VTX0NIX1QsIHRvIHNpbXBsaWZ5IHVzZQorCSAgb2YgY2NoYXJfdCBmb3Igd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbi4gIFNpbWlsYXJseSwgdXNlIEFSR19DSF9UCisJICB3aGVyZSBhIHBvaW50ZXIgd291bGQgYmUgbW9yZSB1c2VmdWwuCisJKyBhZGQgc3R1YnMgZm9yIHRyYWNpbmcgY2NoYXJfdCB2YWx1ZXMuCisJKyBhZGQvdXNlIG1hY3JvIElTQkxBTksoKQorCSsgYWRkL3VzZSBjb25zdHJ1Y3RvcnMgZm9yIGNjaGFyX3QnczogTmV3Q2hhcigpLCBOZXdDaGFyMigpLgorCSsgYWRkL3VzZSBtYWNyb3MgQ0hSRUYoKSwgQ0hERVJFRigpLCBBdHRyT2ZEKCksIENoYXJPZkQoKSB0byBmYWNpbGl0YXRlCisJICBwYXNzaW5nIGNjaGFyX3QncyBieSBhZGRyZXNzLgorCSsgYWRkL3VzZSBQVVRDX0RBVEEsIFBVVEMoKSBtYWNyb3MuCisJKyBmb3Igd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbiwgbW92ZSB0aGUgd2luZG93IGJhY2tncm91bmQgZGF0YSB0bworCSAgdGhlIGVuZCBvZiB0aGUgV0lORE9XIHN0cnVjdCBzbyB0aGF0IHdoZXRoZXIgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorCSAgaXMgZGVmaW5lZCBvciBub3QsIHRoZSBvZmZzZXRzIGluIHRoZSBzdHJ1Y3Qgd2lsbCBub3QgY2hhbmdlLgorCSsgbW9kaWZ5IGFkZGNoKCkgdG8gd29yayB3aXRoIHdpZGUtY2hhcmFjdGVycy4KKwkrIG1hcmsgc2V2ZXJhbCB3aWRlLWNoYXJhY3RlciBmdW5jdGlvbnMgYXMgZ2VuZXJhdGVkIGluIGN1cnNlcy5oLmluCisJKyBpbXBsZW1lbnQgd3VuY3RybCgpLCB3YWRkX3djaCgpLCB3Ymtncm5kc2V0KCksIHdia2dybmQoKSwKKwkgIHdib3JkZXJfc2V0KCkgYW5kIHdhZGRud3N0cigpLgorCisyMDAxMDUyNgorCSsgYWRkIGV4cGVyaW1lbnRhbCAtLXdpdGgtY2Fwcz1YWFggb3B0aW9uIHRvIGN1c3RvbWl6ZSB0byBzaW1pbGFyCisJICB0ZXJtaW5mbyBkYXRhYmFzZSBmb3JtYXRzIHN1Y2ggYXMgQUlYIDQueAorCSsgYWRkIENhcHMuYWl4NCBhcyBhbiBleGFtcGxlLgorCSsgbW9kaWZ5IENhcHMgdG8gYWRkIGNvbHVtbnMgZm9yIHRoZSB0aGUgS0VZX3h4eCBzeW1ib2xzLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSAtLXdpdGgtd2lkZWMgdG8gc3VwcHJlc3Mgb3ZlcndyaXRlIG9mIGxpYmN1cnNlcy5zbworCSAgYW5kIGN1cnNlcy5oCisJKyBhZGQgY2hlY2tzIHRvIHRvZS5jIHRvIGF2b2lkIGJlaW5nIGNvbmZ1c2VkIGJ5IGZpbGVzIGFuZCBkaXJlY3RvcmllcworCSAgd2hlcmUgd2Ugd291bGQgZXhwZWN0IHRoZSByZXZlcnNlLCBlLmcuLCBzb3VyY2UtZmlsZXMgaW4gdGhlCisJICB0b3AtbGV2ZWwgdGVybWluZm8gbGV2ZWxzIGFzIGlzIHRoZSBjYXNlIGZvciBBSVguCisKKzIwMDEwNTE5CisJKyBhZGQgdG9wLWxldmVsICdkZXBlbmQnIHJ1bGUgZm9yIHRoZSBDIHNvdXJjZXMsIGFzc3VtaW5nIHRoYXQgdGhlCisJICBtYWtlZGVwZW5kIHByb2dyYW0gaXMgYXZhaWxhYmxlLiAgQXMgYSBzaWRlLWVmZmVjdCwgdGhpcyBtYWtlcworCSAgdGhlIGdlbmVyYXRlZCBzb3VyY2VzLCBhcyBpbiAibWFrZSBzb3VyY2VzIiAocHJvbXB0ZWQgYnkgYSByZXBvcnQKKwkgIGJ5IE1pa2UgQ2FzdGxlIHRoYXQgIm1ha2UgLWoiIGZhaWxzIGJlY2F1c2UgdGhlIHJlc3VsdGluZyBwYXJhbGxlbAorCSAgcHJvY2Vzc2VzIHJhY2UgdG8gZ2VuZXJhdGUgbmN1cnNlcy9uYW1lcy5jKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHNvIHRoYXQgLS1kaXNhYmxlLW92ZXJ3cml0ZSBvcHRpb24ncyBhY3Rpb24KKwkgIHRvIGFkZCBhIHN5bWJvbGljIGxpbmsgZm9yIGxpYmN1cnNlcyBhcHBsaWVzIHRvIHRoZSBzdGF0aWMgbGlicmFyeSBhcworCSAgd2VsbCBhcyB0aGUgc2hhcmVkIGxpYnJhcnkgd2hlbiBib3RoIGFyZSBjb25maWd1cmVkIChyZXBvcnQgYnkgRmVsaXgKKwkgIE5hdHRlciA8Zi5uYXR0ZXJAbmRoLm5ldD4pLgorCSsgYWRkIEVMS1MgdGVybWluZm8gZW50cmllcyAoRmVkZXJpY28gQmlhbmNoaQorCSAgPGJpYW5jaGlAd3d3LmFydGUudW5pcGkuaXQ+KQorCSsgYWRkIHU2IChDU1IpIHRvIEV0ZXJtIChNaWNoYWVsIEplbm5pbmdzKS4KKworMjAwMTA1MTIKKwkrIG1vZGlmeSB0ZXN0L25jdXJzZXMuYyB0byB3b3JrIHdpdGggeHRlcm0tMjU2Y29sb3IsIHdoaWNoIGhhcyBmZXdlcgorCSAgY29sb3IgcGFpcnMgdGhhbiBjb2xvcnMqY29sb3JzIChyZXBvcnQgYnkgRGF2aWQgRWxsZW1lbnQKKwkgIDxlbGxlbWVudEBzZGQuaHAuY29tPikuCisKKzIwMDEwNTA1CisJKyBjb3JyZWN0ZWQgc2NyZWVuLnh0ZXJtLXhmcmVlODYgZW50cnkuCisJKyB1cGRhdGUgY29tbWVudCBpbiBDYXBzIHJlZ2FyZGluZyBJQk0gKEFJWCkgZnVuY3Rpb24ta2V5IGRlZmluaXRpb25zLgorCisyMDAxMDQyMQorCSsgbW9kaWZ5IGMrKy9NYWtlZmlsZS5pbiB0byBsaW5rIHdpdGggbGlibmN1cnNlcysrdy5hIHdoZW4gY29uZmlndXJlZAorCSAgZm9yIHdpZGUtY2hhcmFjdGVycyAocGF0Y2ggYnkgU3ZlbiBWZXJkb29sYWVnZSkuCisJKyBhZGQgY2hlY2sgaW4gX25jX3RyYWNlX2J1ZigpIHRvIHJlZnJhaW4gZnJvbSBmcmVlaW5nIGEgbnVsbCBwb2ludGVyLgorCSsgaW1wcm92ZSBDRl9QUk9HX0lOU1RBTEwgbWFjcm8gdXNpbmcgQ0ZfRElSTkFNRS4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgZnJvbSBhdXRvY29uZiAyLjQ5ZSAoYWxwaGEpLgorCisyMDAxMDQxNAorCSsgYWRkIHNlY29uZGFyeSBjaGVjayBpbiB0aWMuYywgc2ltaWxhcl9zZ3IoKSB0byBzZWUgaWYgdGhlIHJlYXNvbgorCSAgZm9yIG1pc21hdGNoIHdhcyB0aGF0IHRoZSBpbmRpdmlkdWFsIGNhcGFiaWxpdGllcyB1c2VkIGEgdGltZS1kZWxheQorCSAgd2hpbGUgc2dyIGRpZCBub3QuICBVc2VkIHRoaXMgdG8gY2xlYW51cCBtaXNtYXRjaGVzLCBlLmcuLCBpbiB2dDEwMCwKKwkgIGFuZCByZW1vdmUgdGltZS1kZWxheSBmcm9tIEFwcGxlX1Rlcm1pbmFsIGVudHJpZXMuCisJKyBhZGQgQXBwbGVfVGVybWluYWwgdGVybWluZm8gZW50cmllcyAoQmVuamFtaW4gQyBXIFNpdHRsZXIKKwkgIDxic2l0dGxlckBpbmFtZS5jb20+KS4KKwkrIGNvcnJlY3QgZGVmaW5pdGlvbnMgb2Ygc2hpZnRlZCBlZGl0aW5nIGtleXMgZm9yIHh0ZXJtLXhmcmVlODYgLVRECisJKyBmaXggYSBidWcgaW4gdGVzdC9icy5jIGZyb20gMjAwMTA0MDcgKHBhdGNoIGJ5IEVyaWsgU2lncmEpLgorCSsgcHJldmVudCByZWxhdGl2ZV9tb3ZlKCkgZnJvbSBkb2luZyBhbiBvdmVyd3JpdGUgaWYgaXQgZGV0ZWN0cyA4LWJpdAorCSAgY2hhcmFjdGVycyB3aGVuIGNvbmZpZ3VyZWQgZm9yIFVURi04IChyZXBvcnRlZCBieSBTdmVuIFZlcmRvb2xhZWdlCisJICA8c2tpbW9Aa290bmV0Lm9yZz4pLgorCisyMDAxMDQwNworCSsgYWRkIGNvbmZpZ3VyZSBjaGVja3MgZm9yIHN0cnN0cmVhbS5oIHZzY2FuIGZ1bmN0aW9uLCBhbmQgc2ltaWxhcgorCSAgc3RkaW8tYmFzZWQgZnVuY3Rpb24gd2hpY2ggbWF5IGJlIHVzZWQgaW4gQysrIGJpbmRpbmcgZm9yIGdjYyAzLjAKKwkgIChyZXBvcnRzIGJ5IEdlb3JnZSBHb2ZmZSwgTGFycyBIZWNraW5nLCBNaWtlIENhc3RsZSkuCisJKyByZXdyaXRlIHBhcnRzIG9mIGNvbmZpZ3VyZS5pbiB3aGljaCB1c2VkIGNoYW5nZXF1b3RlKCkuICBUaGF0IGZlYXR1cmUKKwkgIGlzIGJyb2tlbiBpbiB0aGUgbGF0ZXN0IGF1dG9jb25mIGFscGhhcyAoZS5nLiwgMi40OWQpLgorCSsgYWRkIGEgbWlzc2luZyBwYXRobmFtZSBmb3IgbmN1cnNlc19kbGwuaCwgbmVlZGVkIHdoZW4gYnVpbGRpbmcgaW4KKwkgIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIHNvdXJjZSB0cmVlIChwYXRjaCBieSBTdmVuIFZlcmRvb2xhZWdlCisJICA8c2tpbW9Aa290bmV0Lm9yZz4pLgorCT4gZml4IDIgYnVncyBpbiB0ZXN0L2JzLmMgRXJpayBTaWdyYSA8c2lncmFAaG9tZS5zZT46CisJKyBubyBzaGlwcyB3ZXJlIGV2ZXIgcGxhY2VkIGluIHRoZSBsYXN0IHJvdyBvciBpbiB0aGUgbGFzdCBjb2x1bW4uCisJICBUaGlzIG1hZGUgdGhlIGdhbWUgdmVyeSBlYXN5IHRvIHdpbiwgYmVjYXVzZSB5b3UgbmV2ZXIgaGFkIHRvIHdhc3RlCisJICBhbnkgc2hvdHMgdGhlcmUsIGJ1dCB0aGUgY29tcHV0ZXIgZGlkLgorCSsgdGhlIHNxdWFyZXMgYXJvdW5kIGEgc3Vua2VuIHNoaXAgdGhhdCBiZWxvbmdlZCB0byB0aGUgcGxheWVyIHdlcmUgbm90CisJICBkaXNwbGF5ZWQgYXMgYWxyZWFkeSBoaXQgYnkgdGhlIGNvbXB1dGVyLCBsaWtlIGl0IGRvZXMgZm9yIHRoZQorCSAgcGxheWVyLgorCisyMDAxMDMzMQorCSsgYWRkIHNvbWUgZXhhbXBsZXMgb2YgY3VzdG9taXppbmcgc2NyZWVuJ3MgdGVybWluZm86CisJICBzY3JlZW4ueHRlcm0teGZyZWU4Niwgc2NyZWVuLnh0ZXJtLXI2LCBzY3JlZW4udGVyYXRlcm0gLVRECisJKyBtb2RpZnkgc2NyZWVuJ3MgdGVybWluZm8gZW50cnkgdG8gbWF0Y2ggdGhlIGtob21lL2tlbmQgaW4gc2NyZWVuCisJICAzLjA5LjA4IChEZWJpYW4gYnVnIHJlcG9ydCAjOTIyMTUpLgorCSsgY29ycmVjdCBhIG1lbW9yeSBsZWFrIGluIGZvcm1zIGxpYnJhcnkgKHJlcG9ydCBieSBTdGVmYW4gVm9ndG5lcgorCSAgPHN0ZWZhbkB2b2d0bmVyLmRlPikgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisKKzIwMDEwMzI0CisJKyBjaGFuZ2Ugc3ltYm9scyB1c2VkIHRvIGd1YXJkIGFnYWluc3QgcmVwZWF0ZWQgaW5jbHVkZXMgdG8gYmVnaW4KKwkgIGNvbnNpc3RlbnRseSB3aXRoICJOQ1VSU0VTXyIgcmF0aGVyIHRoYW4gYSBsZWFkaW5nIHVuZGVyc2NvcmUuICBUaGVyZQorCSAgYXJlIG90aGVyIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGVzIHdoaWNoIGJlZ2luIHdpdGggYQorCSAgbGVhZGluZyB1bmRlcnNjb3JlLCBidXQgdGhleSBhcmUgcGFydCBvZiB0aGUgbGVnYWN5IGludGVyZmFjZS4KKwkrIHJlb3JkZXIgaW5jbHVkZXMgaW4gYysrIGJpbmRpbmcgc28gdGhhdCByY3MgaWRlbnRpZmllcnMgY2FuIGJlCisJICBjb21waWxlZC1pbi4KKwkrIGFkZCAuY2MuaWkgcnVsZSB0byBjKysgbWFrZWZpbGUsIHRvIGdldCBwcmVwcm9jZXNzb3Igb3V0cHV0IGZvcgorCSAgZGVidWdnaW5nLgorCSsgY29ycmVjdCBjb25maWd1cmUgc2NyaXB0IGhhbmRsaW5nIG9mIEBrZXl3b3JkQCBzdWJzdGl0dXRpb25zIHdoZW4gdGhlCisJICAtLXdpdGgtbWFucGFnZS1yZW5hbWVzIG9wdGlvbiBpcyBnaXZlbiAoY2Y6ICAyMDAwMDcxNSwgZml4ZXMgRGViaWFuCisJICBidWcgIzg5OTM5KS4KKwkrIHJlcG9ydCBzdGFjayB1bmRlcmZsb3cvb3ZlcmZsb3cgaW4gdHBhcm0oKSB3aGVuIHRpYyAtY3Ygb3B0aW9uIGlzCisJICBnaXZlbi4KKwkrIHJlbW92ZSBzcHVyaW91cyAiJXwiIG9wZXJhdG9yIGZyb20geHRlcm0teGZyZWU4NiB0ZXJtaW5mbyBlbnRyeSwKKwkgIChyZXBvcnRlZCBieSBBZGFtIENvc3RlbGxvIDxhbWNAY3MuYmVya2VsZXkuZWR1PiwgRGViaWFuIGJ1ZyAjODkyMjIpLgorCisyMDAxMDMxMAorCSsgY2xlYW51cCBvZiBuZXdkZW1vLmMsIGZpeGluZyBzb21lIGFtYmlndW91cyBleHByZXNzaW9ucyBub3RlZCBieSBnY2MKKwkgIDIuOTUuMiwgYW5kIGNvcnJlY3Rpbmcgc29tZSBjb25mbGljdGluZyBjb2xvciBwYWlyIGluaXRpYWxpemF0aW9ucy4KKwkrIGFkZCBtaXNzaW5nIGNvcHlyaWdodCBub3RpY2UgZm9yIGN1cnNlc3cuaAorCSsgcmV2aWV3LCBtYWtlIG1pbm9yIGZpeGVzIGZvciB1c2Ugb2YgJzo6JyBmb3IgcmVmZXJyaW5nIHRvIEMtbGFuZ3VhZ2UKKwkgIGludGVyZmFjZSBmcm9tIEMrKyBiaW5kaW5nLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBjaGVjayBmb3IgZysrIGxpYnJhcnkgc2xpZ2h0bHkgdG8gYWNjb21tb2RhdGUKKwkgIG5vbnN0YW5kYXJkIHZlcnNpb24gbnVtYmVyLCBlLmcuLCA8dmVuZG9yPi0yLjcgKHJlcG9ydCBieSBSb25hbGQgSG8KKwkgIDxyaG9AbWlwb3MyLmludGVsLmNvbT4pLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgYysrIDxzc3RyZWFtPiBoZWFkZXIsIHJlcGxhY2UgaGFyZGNvZGVkCisJICBpZmRlZi4KKwkrIHdvcmthcm91bmQgZm9yIHByZS1yZWxlYXNlIG9mIGdjYyAzLjAgbGlic3RkYysrLCB3aGljaCBoYXMgZHJvcHBlZAorCSAgdnNjYW4gZnJvbSBzdHJzdHJlYW1idWYgdG8gZm9sbG93IHN0YW5kYXJkLCB1c2Ugd3JhcHBlciBmb3IgQyB2c2NhbmYKKwkgIGluc3RlYWQgKHJlcG9ydCBieSBHZW9yZ2UgR29mZmUgPGdyZ29mZmVAZXhjaXRlLmNvbT4gYW5kIE1hdHQgVGFnZ2FydAorCSAgPHRhZ2dhcnRAY2FybWVuLmZjLmhwLmNvbT4sIGZpeGVzIERlYmlhbiAuCisKKzIwMDEwMzAzCisJKyBtb2RpZnkgaW50ZXJmYWNlIG9mIF9uY19nZXRfdG9rZW4oKSB0byBwYXNzICdzaWxlbnQnIHBhcmFtZXRlciB0byBpdCwKKwkgIHRvIG1ha2UgcXVpZXRlciBsb2FkaW5nIG9mIC9ldGMvdGVybWNhcCAocGF0Y2ggYnkgVG9kZCBDIE1pbGxlcikuCisJKyBjb3JyZWN0IGEgZmV3IHR5cG9zIGluIGN1cnNfc2xrLjN4IGFuZCBjdXJzX291dG9wdHMuM3ggbWFucGFnZXMKKwkgIChwYXRjaCBieSBUb2RkIEMgTWlsbGVyKS4KKworMjAwMTAyMjQKKwkrIGNvbXBpbGVyLXdhcm5pbmcgZml4ZXMgKHJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZSkuCisKKzIwMDEwMjEwCisJKyBtb2RpZnkgc2NyZWVuIHRlcm1pbmZvIGVudHJ5IHRvIHVzZSBuZXcgMy45LjggZmVhdHVyZSBhbGxvd2luZyB4dGVybQorCSAgbW91c2UgY29udHJvbHMgLVRECisKKzIwMDEwMjAzCisJKyBicm9hZGVuIHBhdHRlcm5zIHVzZWQgdG8gbWF0Y2ggT1MvMiBFTVggaW4gY29uZmlndXJlIHNjcmlwdCB0byBjb3ZlcgorCSAgdmFyaWFudCB1c2VkIGluIG5ld2VyIGNvbmZpZy5ndWVzcy9jb25maWcuc3ViCisJKyByZW1vdmUgY2hhbmdlcXVvdGUoKSBjYWxscyBmcm9tIGNvbmZpZ3VyZSBzY3JpcHQsIHNpbmNlIHRoaXMgZmVhdHVyZQorCSAgaXMgYnJva2VuIGluIHRoZSBhdXRvY29uZiAyLjQ5YyBhbHBoYSwgbWFpbnRhaW5lcnMgZGVjbGluZSB0byBmaXguCisJKyByZW1vdmUgbWFjcm8gY2FsbFB1dENoYXIoKSBmcm9tIHR0eV91cGRhdGUuYywgc2luY2UgdGhpcyBpcyBubyBsb25nZXIKKwkgIG5lZWRlZCAocmVwb3J0ZWQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGluIHRpYy5jIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBpbnB1dAorCSAgZmlsZSBpcyByZWFsbHkgZW1wdHkuICBNb2RpZnkgdGhlIG5leHRfY2hhcigpIGZ1bmN0aW9uIGluIGNvbXBfc2Nhbi5jCisJICB0byBhbGxvdyBhcmJpdHJhcmlseSBsb25nIGxpbmVzLCBhbmQgaW5jaWRlbnRhbGx5IHN1cHBseSBhIG5ld2xpbmUgdG8KKwkgIGZpbGVzIHRoYXQgZG8gbm90IGVuZCBpbiBhIG5ld2xpbmUuICBUaGVzZSBjaGFuZ2VzIGltcHJvdmUgdGljJ3MKKwkgIHJlY292ZXJ5IGZyb20gYXR0ZW1wdHMgdG8gcmVhZCBiaW5hcnkgZmlsZXMsIGUuZy4sIGl0cyBvdXRwdXQgZnJvbQorCSAgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIChyZXBvcnRlZCBieSBCZXJuaGFyZCBSb3NlbmtyYWVuemVyKS4KKworMjAwMTAxMjcKKwkrIHJldmVydCBjaGFuZ2UgdG8gYysrL2RlbW8uY2MgZnJvbSAyMDAwMTIwOSwgd2hpY2ggY2hhbmdlZCBkZWZpbml0aW9uCisJICBvZiBtYWluKCkgYXBwYXJlbnRseSB0byBhY2NvbW1vZGF0ZSBjeWd3aW4gbGlua2VyLCBidXQgYnJva2UgdGhlIGRlbW8KKwkgIHByb2dyYW0uCisJKyB3b3JrYXJvdW5kIGZvciBicm9rZW4gZWdjcyAyLjkxLjY2IHdoaWNoIGNhbGxzIG1lbWJlciBmdW5jdGlvbnMKKwkgIChpLmUuLCBsaW5lcygpIGFuZCBjb2xvcnMoKSBvZiBOQ3Vyc2VzV2luZG93IGJlZm9yZSBjYWxsaW5nIGl0cworCSAgY29uc3RydWN0b3IuICBBZGQgY2FsbHMgdG8gaW5pdGlhbGl6ZSgpIGluIGEgZmV3IGNvbnN0cnVjdG9ycyB3aGljaAorCSAgZGlkIG5vdCBkbyB0aGlzIGFscmVhZHkuCisJKyB1c2UgdGhlIEdOQVQgcHJlcHJvY2Vzc29yIHRvIG1ha2UgdGhlIG5lY2Vzc2FyeSBzd2l0Y2ggYmV0d2VlbiBUUkFDRQorCSAgYW5kIE5PX1RSQUNFIGNvbmZpZ3VyYXRpb25zIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCT4gcGF0Y2hlcyBieSBCZXJuaGFyZCBSb3NlbmtyYWVuemVyOgorCSsgbW9kaWZ5IGt0ZXJtIHRlcm1pbmZvIGVudHJ5IHRvIHVzZSBTQ1Mgc2VxdWVuY2UgdG8gc3VwcG9ydCBhbHRlcm5hdGUKKwkgIGNoYXJhY3RlciBzZXQgKGl0IGRvZXMgbm90IHdvcmsgd2l0aCBTSS9TTykuCisJKyAtLXdpdGgtb3NwZWVkPXNvbWV0aGluZyBkaWRuJ3Qgd29yay4gIGNvbmZpZ3VyZS5pbiBjaGVja2VkIGZvciBhCisJICAkZW5hYmxldmFsIHdoZXJlIGl0IHNob3VsZCBjaGVjayBmb3IgJHdpdGh2YWwuICBBbHNvLAorCSAgbmN1cnNlcy9sbGliLWxuY3Vyc2VzIHN0aWxsIGhhZCBhIGhhcmRjb2RlZCBzaG9ydC4KKworMjAwMTAxMTQKKwkrIGNvcnJlY3Rpb24gdG8gbXkgbWVyZ2Ugb2YgVG9tIFJpZGRsZSdzIHBhdGNoIHRoYXQgYnJva2UgdGljIGluIHNvbWUKKwkgIGNvbmRpdGlvbnMgKHJlcG9ydGVkIGJ5IEVub2NoIFdleGxlciA8ZW5vY2hAd2V4bGVyLmNvLmlsPikgLVRECisKKzIwMDEwMTEzCisJKyBtb2RpZnkgdmlldy5jIHRvIHRlc3QgaGFsZmRlbGF5KCkuICBMaWtlIG90aGVyIHRlc3RzLCB0aGlzIHJlY29nbml6ZXMKKwkgIHRoZSAncycgYW5kIHNwYWNlIGNvbW1hbmRzIGZvciBzdG9wcGluZy9zdGFydGluZyBwb2xsZWQgaW5wdXQsIHNob3dzCisJICBhIGZyZWVydW5uaW5nIGNsb2NrIGluIHRoZSBoZWFkZXIuICBJZiBnaXZlbiBhIHBhcmFtZXRlciB0byAncycsIHRoYXQKKwkgIG1ha2VzIHZpZXcuYyB1c2UgaGFsZmRlbGF5KCkgd2l0aCB0aGF0IHBhcmFtZXRlciByYXRoZXIgdGhhbgorCSAgbm9kZWxheSgpLgorCSsgZml4IHRvIGFsbG93IGNvbXBpbGUgd2l0aCB0aGUgZXhwZXJpbWVudGFsIGNvbmZpZ3VyZSBvcHRpb24KKwkgIC0tZGlzYWJsZS1oYXNobWFwLgorCSsgbW9kaWZ5IHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSB0byBhdm9pZCBvdmVyd3JpdGluZyBrZXlfYmFja3NwYWNlLAorCSAga2V5X2xlZnQsIGtleV9kb3duIHdoZW4gcHJvY2Vzc2luZyBhIG5vbi1iYXNlIGVudHJ5IChyZXBvcnQvcGF0Y2ggYnkKKwkgIFRvbSBSaWRkbGUpLgorCSsgbW9kaWZ5IF9uY193cmFwX2VudHJ5KCksIGFkZGluZyBvcHRpb24gdG8gcmVhbGxvY2F0ZSB0aGUgc3RyaW5nCisJICB0YWJsZSwgbmVlZGVkIGluIF9uY19tZXJnZV9lbnRyeSgpIHdoZW4gbWVyZ2luZyB0ZXJtY2FwIGVudHJpZXMuCisJICAoYWRhcHRlZCBmcm9tIHJlcG9ydC9wYXRjaCBieSBUb20gUmlkZGxlIDxmdHJAb3JhY29tLmNvbT4pLgorCSsgbW9kaWZ5IGEgZmV3IGNvbmZpZ3VyZSBzY3JpcHQgbWFjcm9zIHRvIGtlZXAgJENGTEFHUyB1c2VkIG9ubHkgZm9yCisJICBjb21waWxlciBvcHRpb25zLCBwcmVwcm9jZXNzb3Igb3B0aW9ucyBpbiAkQ1BQRkxBR1MuCisKKzIwMDAxMjMwCisJKyBjb3JyZWN0IG1hcmtlciBwb3NpdGlvbnMgaW4gbHJ0ZXN0LmMgYWZ0ZXIgcmVjZWl2aW5nIGEgc2lnd2luY2guCisJKyBmaXggaWZkZWYncyBpbiBuY3Vyc2VzLmMgdG8gYnVpbGQgYWdhaW5zdCBwcmUtNS4yIGZvciB0ZXN0aW5nLgorCSsgZml4ZXMgdG8gdGNsb2NrIGZvciByZXNpemluZyBiZWhhdmlvciwgcmVkdW5kYW50IGNvbXB1dGF0aW9uIChyZXBvcnQKKwkgIGFuZCBwYXRjaCBieSBBIE0gS3VjaGxpbmcgPGFrdWNobGluQG1lbXMtZXhjaGFuZ2Uub3JnPikuCisKKzIwMDAxMjE2CisJKyBpbXByb3ZlZCBzY29hbnNpIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgYW5kIG1ha2VmaWxlIGluIEFkYTk1L3NyYyB0byBjb21waWxlIGEgc3R1YgorCSAgZm9yIHRoZSB0cmFjZSBmdW5jdGlvbnMgd2hlbiBuY3Vyc2VzIGRvZXMgbm90IHByb3ZpZGUgdGhvc2UuCisKKzIwMDAxMjA5CisJKyBhZGQgbmN1cnNlc19kbGwuaCBhbmQgcmVsYXRlZCBkZWZpbml0aW9ucyB0byBzdXBwb3J0IGdlbmVyYXRpbmcgRExMJ3MKKwkgIHdpdGggY3lnd2luIChhZGFwdGVkIGZyb20gYSBwYXRjaCBieSBDaGFybGVzIFdpbHNvbgorCSAgPGN3aWxzb25AZWNlLmdhdGVjaC5lZHU+LCBjaGFuZ2VkIE5DVVJTRVNfRVhQT1JUIG1hY3JvIHRvIG1ha2UgaXQKKwkgIHdvcmsgd2l0aCAnaW5kZW50JykgLVRECisKKzIwMDAxMjAyCisJKyBjb3JyZWN0IHByb3RvdHlwZXMgZm9yIHNvbWUgZnVuY3Rpb25zIGluIGN1cnNfdGVybWNhcC4zeCwgbWF0Y2hpbmcKKwkgIHRlcm1jYXAuaCwgd2hpY2ggbWF0Y2hlcyBYL09wZW4uCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBhIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgQWRhIGVuaGFuY2VtZW50cyBzZW50IGluIGJ5ICJILgorCSAgTmFub3NlY29uZCIsIGFrYSBFdWdlbmUgViBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4uICBUaGlzCisJICBwYXRjaCBpbmNsdWRlcworCSAgLSBzbWFsbCBmaXhlcyB0byB0aGUgZXhpc3RpbmcgbmN1cnNlcyBiaW5kaW5nCisJICAtIGFkZGl0aW9uIG9mIHNvbWUgbW9yZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIHRvIHRoZSBiaW5kaW5nLCBpbmNsdWRpbmcKKwkgICAgdGVybWNhcCBhbmQgdGVybWluZm8gZnVuY3Rpb25zCisJICAtIEFuIEFkYSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgIm5jdXJzZXMiIHRlc3QgYXBwbGljYXRpb24gb3JpZ2luYWxseQorCSAgICB3cml0dGVuIGluIEMuCisKKzIwMDAxMTI1CisJKyBtb2RpZnkgbG9naWMgaW4gbGliX3NldHVwLmMgdG8gYWxsb3cgZWl0aGVyIGxpbmVzIG9yIGNvbHVtbnMgdmFsdWUKKwkgIGZyb20gdGVybWluZm8gdG8gYmUgdXNlZCBpZiB0aGUgc2NyZWVuIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQKKwkgIGR5bmFtaWNhbGx5IHJhdGhlciB0aGFuIHJlcXVpcmluZyBib3RoIChwYXRjaCBieSBFaHVkIEthcm5pCisJICA8ZWh1ZEB1bml4LnNpbW9ud2llc2VsLmNvLmlsPikuCisJKyBhZGQgY2hlY2sgaW4gbGliX3Rnb3RvLmMncyBpc190ZXJtY2FwKCkgZnVuY3Rpb24gdG8gcmVqZWN0IG51bGwgb3IKKwkgIGVtcHR5IHN0cmluZ3MgKHJlcG9ydGVkIGJ5IFZhbGVudGluIE5lY2hheWV2IDxuZXRjaEBuZXRjaC5raWV2LnVhPiB0bworCSAgZnJlZWJzZC1idWdzKS4KKwkrIGFkZCBkZWZpbml0aW9uIGZyb20gY29uZmlndXJlIHNjcmlwdCB0aGF0IGRlbm90ZXMgdGhlIHBhdGgtc2VwYXJhdG9yLAorCSAgd2hpY2ggaXMgbm9ybWFsbHkgYSBjb2xvbi4gIFRoZSBwYXRoLXNlcGFyYXRvciBpcyBhIHNlbWljb2xvbiBvbgorCSAgT1MvMiBFTVggYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBtYXkgdXNlIGEgY29sb24gd2l0aGluIHBhdGhuYW1lcy4KKwkrIGFsdGVyIGxvZ2ljIHRvIHNldCBkZWZhdWx0IGZvciAtLWRpc2FibGUtb3ZlcndyaXRlIG9wdGlvbiB0byBzZXQgaXQKKwkgIHRvICd5ZXMnIGlmIHRoZSAtLXByZWZpeC8kcHJlZml4IHZhbHVlIGlzIG5vdCAvdXNyL2xvY2FsLCB0aGVyZWJ5CisJICBhY2NvbW1vZGF0aW5nIHRoZSBtb3N0IGNvbW1vbiBjYXVzZSBvZiBwcm9ibGVtczogZ2NjJ3Mgbm9uc3RhbmRhcmQKKwkgIHNlYXJjaCBydWxlcy4gIE90aGVyIGxvY2F0aW9ucyBzdWNoIGFzIC91c3IvbG9jYWwvbmN1cnNlcyB3aWxsCisJICBkZWZhdWx0IHRvIG92ZXJ3cml0aW5nIChyZXBvcnQgYnkgTGFycyBIZWNraW5nIDxsaGVja2luZ0BubXJjLmllPikuCisKKzIwMDAxMTE4CisJKyBtb2RpZnkgZGVmYXVsdCBmb3IgLS1kaXNhYmxlLW92ZXJ3cml0ZSBjb25maWd1cmUgb3B0aW9uIHRvIGRpc2FibGUKKwkgIGlmIHRoZSAtLXByZWZpeCBvciAkcHJlZml4IHZhbHVlIGlzIG5vdCAvdXNyLgorCSsgYWRkIGN5Z3dpbiB0byBzeXN0ZW1zIGZvciB3aGljaCBuY3Vyc2VzIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IGludG8KKwkgIC91c3IgcmF0aGVyIHRoYW4gL3Vzci9sb2NhbC4KKworMjAwMDExMTEKKwkrIG1pbm9yIG9wdGltaXphdGlvbiBpbiBjb21wX2Vycm9yLmMgYW5kIGxpYl90ZXJtbmFtZS5jLCB1c2luZworCSAgc3RybmNhdCgpIHRvIHJlcGxhY2Ugc3RybmNweSgpIChwYXRjaCBieSBTb2xhciBEZXNpZ25lcikuCisJKyBhZGQgYSB1c2VfdGVybWluZm9fdmFycygpIGNoZWNrIGZvciAkSE9NRS8udGVybWNhcCwgYW5kIGNoZWNrIGZvcgorCSAgZ2V0ZXVpZCgpIHRvIHVzZV90ZXJtaW5mb192YXJzKCkgKHBhdGNoIGJ5IFNvbGFyIERlc2lnbmVyCisJICA8c29sYXJAZmFsc2UuY29tPikuCisJKyBpbXByb3ZlZCBjeWd3aW4gdGVybWluZm8gZW50cnksIGJhc2VkIG9uIHBhdGNoIGJ5CisJICA8ZXJuaWVfYm95ZEB5YWhvby5jb20+LgorCSsgbW9kaWZ5IF9uY193cml0ZV9lbnRyeSgpIHRvIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCBsaW5raW5nCisJICBhbGlhc2VzIG9uIGEgZmlsZXN5c3RlbSB0aGF0IGlnbm9yZXMgY2FzZSB3b3VsZCBub3Qgc3VjY2VlZCBiZWNhdXNlCisJICB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIgb25seSBieSBjYXNlLCBlLmcuLCBOQ1IyNjBWVDMwMFdQUDAKKwkgIG9uIGN5Z3dpbiAocmVwb3J0IGJ5IE5laWwgWmFuZWxsYSkuCisJKyBmaXggYSB0eXBvIGluIHRoZSBjdXJzX2RlbGV0ZWxuLjN4IG1hbiBwYWdlIChwYXRjaCBieSBCZXJuaGFyZAorCSAgUm9zZW5rcmFlbnplciA8YmVyb0ByZWRoYXQuZGU+KS4KKworMjAwMDExMDQKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1vc3BlZWQgdG8gYXNzaXN0IHBhY2thZ2VycyBpbiB0cmFuc2l0aW9uCisJICB0byA1LjMgY2hhbmdlIHRvIG9zcGVlZCB0eXBlLgorCSsgYWRkL3VzZSBDaGFyT2YoKSBtYWNybyB0byBzdXBwcmVzcyBzaWduLWV4dGVuc2lvbiBvZiBjaGFyIHR5cGUgb24KKwkgIHBsYXRmb3JtcyB3aGVyZSB0aGlzIGlzIGEgcHJvYmxlbSBpbiBjdHlwZSBtYWNyb3MsIGUuZy4sIFNvbGFyaXMuCisJKyBjaGFuZ2UgdHJhY2Ugb3V0cHV0IHRvIGJpbmFyeSBmb3JtYXQuCisJKyBjb3JyZWN0IGEgbWlzc2luZyBxdW90ZSBhZGp1c3RtZW50IGluIENGX1BBVEhfU1lOVEFYIGF1dG9jb25mCisJICBtYWNybywgZm9yIE9TLzIgRU1YIGNvbmZpZ3VyYXRpb24uCisJKyByZWFycmFuZ2UgYSBmZXcgY29uZmlndXJlIG1hY3JvcywgbW92aW5nIHByZXByb2Nlc3NvciBvcHRpb25zIHRvCisJICAkQ1BQRkxBR1MgKGEgbm93LW9ic29sZXRlIHZlcnNpb24gb2YgYXV0b2NvbmYgZGlkIG5vdCBjb25zaXN0ZW50bHkKKwkgIHVzZSAkQ1BQRkxBR1MgaW4gYm90aCB0aGUgY29tcGlsZSBhbmQgcHJlcHJvY2Vzc29yIGNoZWNrcykuCisJKyBhZGQgYSBjaGVjayBpbiByZWxhdGl2ZV9tb3ZlKCkgdG8gZ3VhcmQgYWdhaW5zdCBidWZmZXIgb3ZlcmZsb3cgaW4KKwkgIHRoZSBvdmVyd3JpdGUgbG9naWMuCisKKzIwMDAxMDI4CisJKyBhZGQgbWVzc2FnZSB0byBjb25maWd1cmUgc2NyaXB0IHNob3dpbmcgZysrIHZlcnNpb24uCisJKyByZXN5bmMgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJKyBtb2RpZnkgbGliX2RlbHdpbi5jLCBtYWtpbmcgaXQgcmV0dXJuIEVSUiBpZiB0aGUgd2luZG93IGRpZCBub3QgZXhpc3QKKwkgIChzdWdnZXN0ZWQgYnkgTmVpbCBaYW5lbGxhKS4KKwkrIGFkZCBjYXNlcyBmb3IgRnJlZUJTRCAzLjEgdG8gdGRsaW50IGFuZCBtYWtlbGxpYiBzY3JpcHRzLCB1c2VkIHRoaXMKKwkgIHRvIHRlc3QvcmV2aWV3IG5jdXJzZXMgbGlicmFyeS4gIChXb3VsZCB1c2UgbGNsaW50LCBidXQgaXQgZG9lc24ndAorCSAgd29yaykuCisJKyByZW9yZ2FuaXplZCBrbmlnaHQuYyB0byBhdm9pZCBmb3J3YXJkIHJlZmVyZW5jZXMuICBDb3JyZWN0IHNjcmVlbgorCSAgdXBkYXRlcyB3aGVuIGJhY2t0cmFja2luZywgZXNwZWNpYWxseSB0byB0aGUgZmlyc3QgY2VsbC4gIEFkZCBGL0IvYQorCSAgY29tbWFuZHMuCisKKzIwMDAxMDIxIDUuMiByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKwkrIHVwZGF0ZSBnZW5lcmF0ZWQgaHRtbCBmaWxlcyBmcm9tIG1hbnBhZ2VzLgorCSsgbW9kaWZ5IGRpc3QubWsgdG8gdXNlIGVkaXRfbWFuLnNoIHRvIHN1YnN0aXR1dGUgYXV0b2NvbmYnZCB2YXJpYWJsZXMKKwkgIGluIGh0bWwgbWFucGFnZXMuCisJKyBmaXggYW4gdW5pbml0aWFsaXplZCBwb2ludGVyIGluIHJlYWRfdGVybWNhcC5jIChyZXBvcnQgYnkgVG9kZCBDCisJICBNaWxsZXIsIGZyb20gcmVwb3J0L3BhdGNoIGJ5IFBoaWxpcCBHdWVudGhlciA8Z3VlbnRoZXJAZ2FjLmVkdT4pLgorCSsgY29ycmVjdCBoZWxwLW1lc3NhZ2UgYW5kIGFycmF5IGxpbWl0IGluIGtuaWdodC5jIChwYXRjaCBieSBCcmlhbgorCSAgUmFpdGVyIDxicmVhZGJveEBtdXBwZXRsYWJzLmNvbT4pLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgZml4IHRvIGF2b2lkIHdhcm5pbmcgYnkgR05BVC0zLjEzcCBhYm91dCB1c2Ugb2YgaW5jb25zaXN0ZW50IGNhc2luZworCSAgZm9yIHNvbWUgaWRlbnRpZmllcnMgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQgcGFja2FnZS4KKwkrIGNvc21ldGljIGNoYW5nZSB0byBmb3Jtcy9mdHlfZW51bS5jCisKKzIwMDAxMDE0CisJKyBjb3JyZWN0IGFuIG9mZi1ieS1vbmUgcG9zaXRpb24gaW4gdGVzdC9yYWlscm9hZC5jIHdoaWNoIGNvdWxkIGNhdXNlCisJICB3cmFwcGluZyBhdCB0aGUgcmlnaHQgbWFyZ2luLgorCSsgdGVzdC9yZXBhaXIgc29tZSBpc3N1ZXMgd2l0aCBsaWJ0b29sIGNvbmZpZ3VyYXRpb24uICBNYWtlCisJICAtLWRpc2FibGUtZWNobyBmb3JjZSBsaWJ0b29sIC0tc2lsZW50LiAgKExpYnRvb2wgZG9lcyBub3Qgd29yayBmb3IKKwkgIE9TLzIgRU1YLCB3b3JrcyBwYXJ0bHkgZm9yIFNDTyAtIGxpYnRvb2wgaXMgc3RpbGwgdmVyeSBzcGVjaWZpYyB0bworCSAgZ2NjKS4KKwkrIGNoYW5nZSBkZWZhdWx0IG9mIC0td2l0aC1tYW5wYWdlLXRibCB0byAibm8iLCBzaW5jZSBmb3IgbW9zdCBvZiB0aGUKKwkgIHBsYXRmb3JtcyB3aGljaCBkbyBoYXZlIHRibCBpbnN0YWxsZWQsIHRoZSBzeXN0ZW0gIm1hbiIgcHJvZ3JhbQorCSAgdW5kZXJzdGFuZHMgaG93IHRvIHJ1biB0YmwgYXV0b21hdGljYWxseS4KKwkrIG1pbm9yIGltcHJvdmVtZW50IHRvIGZvcmNlX2JhcigpIGluIGNvbXBfcGFyc2UuYyAoQmVybmhhcmQKKwkgIFJvc2Vua3JhZW56ZXIgPGJlcm9AcmVkaGF0LmRlPikuCisJKyBtb2RpZnkgbGliX3RwYXJtLmMgdG8gdXNlIGdldF9zcGFjZSgpIGJlZm9yZSB3cml0aW5nIHRlcm1pbmF0aW5nCisJICBudWxsIGNoYXJhY3RlciwgYm90aCBmb3IgY29uc2lzdGVuY3kgYXMgd2VsbCBhcyB0byBlbnN1cmUgdGhhdCBpZgorCSAgc2F2ZV9jaGFyKCkgd2FzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUsIHRoYXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkKKwkgIGlzIGVub3VnaCAocGF0Y2ggYnkgU2VyZ2VpIEl2YW5vdikuCisJKyBhZGQgbm90ZSBhYm91dCB0ZXJtY2FwIE1MIGNhcGFiaWxpdHkgd2hpY2ggaXMgZHVwbGljYXRlZCBiZXR3ZWVuIHR3bworCSAgZGlmZmVyZW50IGNhcGFiaWxpdGllczogIHNtZ2wgYW5kIHNtZ2xyIChyZXBvcnRlZCBieSBTZXJnZWkgSXZhbm92CisJICA8c3ZpdmFub3ZAcGRtaS5yYXMucnU+KS4KKwkrIGNvcnJlY3QgcGFyYW1ldGVyIGNvdW50cyBpbiBpbmNsdWRlL0NhcHMgZm9yIGRjbGsgYXMgd2VsbCBhcyBzb21lCisJICBwcmludGVyLXNwZWNpZmljIGNhcGFiaWxpdGllczogY3NubSwgZGVmYywgc2NzLCBzY3NkLCBzbWd0cCwgc21nbHAuCisJPiBwYXRjaCBieSBKb2hubnkgQyBMYW0gPGxhbWpAc3RhdC5jbXUuZWR1PjoKKwkrIGFkZCBzdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIGxpYnRvb2wgKGFwcGFyZW50bHkgdmVyc2lvbiAxLjMuNSwKKwkgIHNpbmNlIG9sZCB2ZXJzaW9ucyBkbyBub3QgaGFuZGxlIC1MLi4vbGliKSwgdXNpbmcgbmV3IGNvbmZpZ3VyZQorCSAgb3B0aW9uIC0td2l0aC1saWJ0b29sLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLW1hbnBhZ2UtdGJsLCB3aGljaCBjYXVzZXMgdGhlIG1hbnBhZ2VzIHRvCisJICBiZSBwcmVwcm9jZXNzZWQgYnkgdGJsKDEpIHByaW9yIHRvIGluc3RhbGxhdGlvbiwKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aG91dC1jdXJzZXMtaCwgd2hpY2ggY2F1c2VzIHRoZQorCSAgaW5zdGFsbGF0aW9uIHByb2Nlc3MgdG8gaW5zdGFsbCBjdXJzZXMuaCBhcyBuY3Vyc2VzLmggYW5kIG1ha2UKKwkgIGFwcHJvcHJpYXRlIGNoYW5nZXMgdG8gaGVhZGVycyBhbmQgbWFucGFnZXMuCisKKzIwMDAxMDA5CisJKyBjb3JyZWN0IG9yZGVyIG9mIG9wdGlvbnMvcGFyYW1ldGVycyBpbiBydW5fdGljLmluIGludm9jYXRpb24gb2YgdGljLAorCSAgd2hpY2ggZGlkIG5vdCB3b3JrIHdpdGggc3RhbmRhcmQgZ2V0b3B0KCkgKHJlcG9ydGVkIGJ5IEV0aGFuCisJICBCdXR0ZXJmaWVsZCA8cHJpbXVzQHZlcmlzLm9yZz4pLgorCSsgY29ycmVjdCBsb2dpYyBmb3IgJ3JldmVyc2UnIHZhcmlhYmxlIGluIGxpYl92aWRhdHRyLmMsIHdoaWNoIHdhcworCSAgc2V0dGluZyBpdCB0cnVlIHdpdGhvdXQgY2hlY2tpbmcgaWYgbmV3bW9kZSBoYWQgQV9SRVZFUlNFIHNldCwgZS5nLiwKKwkgIHVzaW5nICRURVJNPWFuc2kgb24gT1MvMiBFTVggKHNlZSAyMDAwMDkxNykuCisJPiBwYXRjaCBieSBUb2RkIEMgTWlsbGVyOgorCSsgYWRkIGEgZmV3IG1pc3NpbmcgdXNlX3Rlcm1pbmZvX3ZhcnMoKSBhbmQgZml4ZXMgdXAgX25jX3RnZXRlbnQoKS4KKwkgIFByZXZpb3VzbHksIF9uY19jZ2V0c2V0KCkgd291bGQgc3RpbGwgZ2V0IGNhbGxlZCBvbiBjcCBzbyB0aGUKKwkgIHNpbXBsZXN0IHRoaW5nIGlzIHRvIHNldCBjcCB0byBOVUxMIGlmICF1c2VfdGVybWluZm9fdmFycygpLgorCSsgYWRkZWQgY2hlY2tzIGZvciBhbiBlbXB0eSAkSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwk+IHBhdGNoZXMgZm9yIE9TLzIgRU1YIChJbHlhIFpha2hhcmV2aWNoKToKKwkrIG1vZGlmeSBjb252ZXJ0X2NvbmZpZ3VyZS5wbCB0byBzdXBwb3J0IElOU1RBTEwuICBDaGFuZ2UgY29tcGlsZXIKKwkgIG9wdGlvbnMgaW4gdGhhdCBzY3JpcHQgdG8gdXNlIG11bHRpdGhyZWFkaW5nLCBuZWVkZWQgZm9yIHRoZSBtb3VzZS4KKwkrIG1vZGlmeSBPUy8yIG1vdXNlIHN1cHBvcnQsIHJldHJ5aW5nIGFzIGEgMi1idXR0b24gbW91c2UgaWYgY29kZSBmYWlscworCSAgdG8gc2V0IHVwIGEgMy1idXR0b24gbW91c2UuCisJKyBpbXByb3ZlIGNvZGUgZm9yIE9TLzIgbW91c2Ugc3VwcG9ydCwgdXNpbmcgX25jX3RpbWVkX3dhaXQoKSB0bworCSAgcmVwbGFjZSBzZWxlY3QoKSBjYWxsLgorCisyMDAwMTAwNworCSsgY2hhbmdlIHR5cGUgb2Ygb3NwZWVkIHZhcmlhYmxlIGJhY2sgdG8gc2hvcnQgdG8gbWF0Y2ggaXRzIHVzZSBpbgorCSAgbGVnYWN5IGFwcGxpY2F0aW9ucyAocmVwb3J0ZWQgYnkgQW5kcmV5IEEgQ2hlcm5vdikuCisJKyBhZGQgY2FzZSB0byBjb25maWd1cmUgc2NyaXB0IGZvciAtLWVuYWJsZS1ycGF0aCBvbiBJUklYIChwYXRjaCBieQorCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBtaW5vciBmaXggdG8gcG9zaXRpb25fY2hlY2soKSBmdW5jdGlvbiwgdG8gZW5zdXJlIGl0IGdldHMgdGhlIHdob2xlCisJICBjdXJzb3IgcmVwb3J0IGJlZm9yZSBkZWNvZGluZy4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZGlzYWJsZS1hc3N1bWVkLWNvbG9yLCB0byBhbGxvdyBwcmUtNS4xCisJICBjb252ZW50aW9uIG9mIGRlZmF1bHQgY29sb3JzIHVzZWQgZm9yIGNvbG9yLXBhaXIgMCB0byBiZSBjb25maWd1cmVkCisJICAoc2VlIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpKS4KKwkrIHJlbmFtZSBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWhhc2htYXAgLS1kaXNhYmxlLWhhc2htYXAsIGFuZAorCSAgcmVvcmRlciB0aGUgY29uZmlndXJlIG9wdGlvbnMsIHNwbGl0dGluZyB0aGUgZXhwZXJpbWVudGFsIGFuZAorCSAgZGV2ZWxvcG1lbnQKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZGlzYWJsZS1yb290LWVudmlyb24sIHdoaWNoIHRlbGxzIG5jdXJzZXMgdG8KKwkgIGRpc3JlZ2FyZCAkVEVSTUlORk8gYW5kIHNpbWlsYXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlmIHRoZSBjdXJyZW50CisJICB1c2VyIGlzIHJvb3QsIG9yIHJ1bm5pbmcgc2V0dWlkL3NldGdpZCAoYmFzZWQgb24gZGlzY3Vzc2lvbiB3aXRoCisJICBzZXZlcmFsIHBlb3BsZSkuCisJKyBtb2RpZmllZCBtaXNjL3J1bl90aWMuaW4gdG8gdXNlIHRpYyAtbywgdG8gZWxpbWluYXRlIGRlcGVuZGVuY3kgb24KKwkgICRURVJNSU5GTyB2YXJpYWJsZSBmb3IgaW5zdGFsbHMuCisJKyBhZGQgdGFibGUgZW50cnkgZm9yIHBsYWJfbm9ybSB0byB0cHV0LCBzbyBpdCBwYXNzZXMgaW4gc3RyaW5ncworCSAgZm9yIHRoYXQgY2FwYWJpbGl0eS4KKwkrIG1vZGlmeSBwYXJzZV9mb3JtYXQoKSBpbiBsaWJfdHBhcm0uYyB0byBpZ25vcmUgcHJlY2lzaW9uIGlmIGl0IGlzCisJICBsb25nZXIgdGhhbiAxMDAwMCAocmVwb3J0IGJ5IEpvdWtvIFB5bm5vbmVuKS4KKwkrIHJld3JvdGUgbGltaXQgY2hlY2tzIGluIGxpYl9tdmN1ci5jIHVzaW5nIG5ldyBmdW5jdGlvbnMKKwkgIF9uY19zYWZlX3N0cmNhdCgpLCBldGMuICBNYWRlIG90aGVyIHJlbGF0ZWQgY2hhbmdlcyB0byBjaGVjayBsZW5ndGhzCisJICB1c2VkIGZvciBzdHJjYXQvc3RyY3B5IChyZXBvcnQgYnkgSm91a28gUHlubm9uZW4KKwkgIDxqb3Vrb0Bzb2x1dGlvbnMuZmk+KS4KKworMjAwMDA5MzAKKwkrIG1vZGlmeSBzZXZlcmFsIGRlc2NyaXB0aW9ucywgaW5jbHVkaW5nIHRob3NlIGZvciBzZXRhZiwgc2V0YWIsIGluCisJICBpbmNsdWRlL0NhcHMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZW50cmllcyBhcmUgcGFyYW1ldGVyaXplZC4gIFRoaXMKKwkgIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gdGVsbCB3aGljaCBzdHJpbmdzIGFyZSB0cmFuc2xhdGVkIHdoZW4KKwkgIGNvbnZlcnRpbmcgdG8gdGVybWNhcC4gIEZpeGVzIGEgcHJvYmxlbSB3aGVyZSB0aGUgZ2VuZXJhdGVkIHRlcm1jYXAKKwkgIHdvdWxkIGNvbnRhaW4gYSBzcHVyaW91cyAiJXAxIiBmb3IgdGhlIHRlcm1pbmZvICIlcDElZCIuCisJKyBtb2RpZnkgbGQgLXJwYXRoIG9wdGlvbnMgKGUuZy4sIExpbnV4LCBhbmQgU29sYXJpcykgdG8gdXNlIGFuCisJICBhYnNvbHV0ZSBwYXRobmFtZSBmb3IgdGhlIGJ1aWxkIHRyZWUncyBsaWIgZGlyZWN0b3J5IChwcm9tcHRlZCBieQorCSAgZGlzY3Vzc2lvbiB3aXRoIEFsYmVydCBDaGluLUEtWW91bmcpLgorCSsgbW9kaWZ5ICJtYWtlIGluc3RhbGwubWFuIiBhbmQgIm1ha2UgdW5pbnN0YWxsLm1hbiIgdG8gaW5jbHVkZSB0YWNrJ3MKKwkgIG1hbi1wYWdlLgorCSsgdmFyaW91cyBmaXhlcyBmb3IgaW5zdGFsbCBzY3JpcHRzIHVzZWQgdG8gc3VwcG9ydCBjb25maWd1cmUgLS1zcmNkaXIKKwkgIGFuZCAtLXdpdGgtaW5zdGFsbC1wcmVmaXggKHJlcG9ydGVkIGJ5IE1hdHRoZXcgQ2xhcmtlCisJICA8TWF0dGhld19DbGFya2VAbWluZGxpbmsuYmMuY2E+KS4KKwkrIG1ha2UgY29uZmlndXJlIHNjcmlwdCBjaGVja3Mgb24gdmFyaWFibGVzICRHQ0MgYW5kICRHWFggY29uc2lzdGVudGx5CisJICBjb21wYXJlIGFnYWluc3QgJ3llcycgcmF0aGVyIHRoYW4gdGVzdCBpZiB0aGV5IGFyZSBub25udWxsLCBzaW5jZQorCSAgZWl0aGVyIG1heSBiZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbmFtZSBvZiB0aGUgQyBvciBDKysgY29tcGlsZXIKKwkgIChyZXBvcnQvcGF0Y2ggYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisKKzIwMDAwOTIzCisJKyBtb2RpZnkgcnMyIGNhcGFiaWxpdHkgaW4geHRlcm0tcjYgYW5kIHNpbWlsYXIgd2hlcmUgY3Vyc29yCisJICBzYXZlL3Jlc3RvcmUgYnJhY2tldGVkIHRoZSBzZXF1ZW5jZSBmb3IgcmVzZXR0aW5nIHZpZGVvIGF0dHJpYnV0ZXMuCisJICBUaGUgY3Vyc29yIHJlc3RvcmUgd291bGQgdW5kbyB0aGF0IChyZXBvcnQgYnkgSm9obiBIYXdraW5zb24KKwkgIDxqaGF3a0BNSVQuRURVPiAoc2VlIE5ldEJTRCBtaXNjLzExMDUyKSkuCisJKyB1c2luZyBwYXJhbWV0ZXIgY2hlY2sgYWRkZWQgdG8gdGljLCBjb3JyZWN0ZWQgMjcgdHlwb3MgaW4KKwkgIHRlcm1pbmZvLnNyYyAtVEQKKwkrIG1vZGlmeSB0aWMgdG8gdmVyaWZ5IHRoYXQgaXRzIGlucHV0cyBhcmUgcmVhbGx5IGZpbGVzLCBpbiBjYXNlCisJICBzb21lb25lIHRyaWVzIHRvIHJlYWQgYSBkaXJlY3RvcnkgKG9yIC9kZXYvemVybykuCisJKyBhZGQgYSBjaGVjayBmb3IgZW1wdHkgYnVmZmVycyByZXR1cm5lZCBieSBmZ2V0cygpIGluIGNvbXBfc2Nhbi5jCisJICBuZXh0X2NoYXIoKSBmdW5jdGlvbiwgaW4gY2FzZSB0aWMgaXMgcnVuIG9uIGEgbm9uLXRleHQgZmlsZSAoZml4ZXMKKwkgIGEgY29yZSBkdW1wIHJlcG9ydGVkIGJ5IEFhcm9uIENhbXBiZWxsIDxhYXJvbkBjcy5kYWwuY2E+KS4KKwkrIGFkZCB0byByYWlscm9hZC5jIHNvbWUgY29kZSBleGVyY2lzaW5nIHRnb3RvKCksIHByb3ZpZGluZyBhbgorCSAgYWx0ZXJuYXRlIGZvcm0gb2YgZGlzcGxheSBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgY3Vyc29yIGFkZHJlc3NpbmcuCisJKyBzcGxpdC1vdXQgdGdvdG8oKSBhZ2FpbiwgdGhpcyB0aW1lIGludG8gbmV3IGZpbGUgbGliX3Rnb3RvLmMsIGFuZAorCSAgaW1wbGVtZW50IGEgY29udmVudGlvbmFsIEJTRC1zdHlsZSB0Z290bygpIHdoaWNoIGlzIHVzZWQgaWYgdGhlCisJICBjYXBhYmlsaXR5IHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRlcm1pbmZvLXN0eWxlIHBhZGRpbmcgb3IKKwkgIHBhcmFtZXRlcnMgKHJlcXVlc3RlZCBieSBBbmRyZXkgQSBDaGVybm92KS4KKwkrIGFkZCBjaGVjayB0byB0aWMgd2hpY2ggcmVwb3J0cyBjYXBhYmlsaXRpZXMgdGhhdCBkbyBub3QgcmVmZXJlbmNlCisJICB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMuCisJKyBhZGQgZXJyb3IgY2hlY2tpbmcgdG8gaW5mb2NtcCdzIC12IGFuZCAtbSBvcHRpb25zIHRvIGVuc3VyZSB0aGF0CisJICB0aGUgb3B0aW9uIHZhbHVlIGlzIGluZGVlZCBhIG51bWJlci4KKwkrIHNvbWUgY2xlYW51cCBvZiBsb2dpYyBpbiBfbmNfc2lnbmFsX2hhbmRsZXIoKSB0byB2ZXJpZnkgaWYgU0lHV0lOQ0gKKwkgIGhhbmRsZXIgaXMgc2V0dXAuICBTZXBhcmF0ZWQgdGhlIG9sZC9uZXcgc2lnYWN0aW9uIGRhdGEgZm9yIFNJR1RTVFAKKwkgIGZyb20gdGhlIG90aGVyIHNpZ25hbHMuCisKKzIwMDAwOTE3CisJKyBhZGQgUzAsIEUwIGV4dGVuc2lvbnMgdG8gc2NyZWVuJ3MgdGVybWluZm8gZW50cnksIHdoaWNoIGlzIGFub3RoZXIKKwkgIHdheSB0byBzb2x2ZSB0aGUgbWlzY29uZmlndXJhdGlvbiBpc3N1ZSAtVEQKKwkrIGNvbXBsZXRlZCBzcGVjaWFsIGNhc2UgZm9yIHRnb3RvIGZyb20gMjAwMDA5MTYKKworMjAwMDA5MTYKKwkrIHVwZGF0ZSB4dGVybSB0ZXJtaW5mbyBlbnRyaWVzIHRvIG1hdGNoIFhGcmVlODYgeHRlcm0gcGF0Y2ggIzE0NiAtVEQKKwkrIGFkZCBNYXRyaXggT3JiaXRhbCB0ZXJtaW5mbyBlbnRyaWVzIChmcm9tIEVyaWMgWiBBeWVycworCSAgPGVyaWNAYWxlLm9yZz4pLgorCSsgYWRkIHNwZWNpYWwgY2FzZSB0byBsaWJfdHBhcm0uYyB0byBhbGxvdyAnc2NyZWVuJyBwcm9ncmFtIHRvIHVzZSBhCisJICB0ZXJtY2FwLXN0eWxlIHBhcmFtZXRlciAiJS4iIHRvIHRnb3RvKCkgZm9yIHN3aXRjaGluZyBjaGFyYWN0ZXIgc2V0cy4KKwkrIHVzZSBMTl9TIHN1YnN0aXR1dGlvbiBpbiBydW5fdGljLmluLCB0byB3b3JrIG9uIE9TLzIgRU1YIHdoaWNoIGhhcworCSAgbm8gc3ltYm9saWMgbGlua3MuCisJKyB1cGRhdGVkIG5vdGVzIGluIFJFQURNRS5lbXggcmVnYXJkaW5nIGF1dG9jb25mIHBhdGNoZXMuCisJKyByZXBsYWNlIGEgbG9va3VwIHRhYmxlIGluIGxpYl92aWRhdHRyLmMgdXNlZCB0byBkZWNvZGUgbm9fY29sb3JfdmlkZW8KKwkgIHdpdGggYSBsb2dpYyBleHByZXNzaW9uIChzdWdnZXN0ZWQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgYWRkIGEvQSB0b2dnbGUgdG8gbmN1cnNlcy5jICdiJyB0ZXN0LCB3aGljaCBjbGVhcnMvc2V0cyBhbHRlcm5hdGUKKwkgIGNoYXJhY3RlciBzZXQgYXR0cmlidXRlIGZyb20gdGhlIGRpc3BsYXllZCB0ZXh0LgorCSsgY29ycmVjdCBpbmVxdWFsaXR5IGluIHBhcmFtZXRlciBhbmFseXNpcyBvZiByZXdyaXR0ZW4gbGliX3RwYXJtLmMKKwkgIHdoaWNoIGhhZCB0aGUgZWZmZWN0IG9mIGlnbm9yaW5nIHA5IGluIHNldF9hdHRyaWJ1dGVzIChzZ3IpLCBicmVha2luZworCSAgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKHJlcG9ydGVkIGJ5IFBpb3RyIE1hamthIDxjaGFydmVsQGxpbmsucGw+KS4KKwkrIGNvcnJlY3QgaWZkZWYnaW5nIGZvciBHQ0NfUFJJTlRGLCBHQ0NfU0NBTkYgd2hpY2ggd291bGQgbm90IGNvbXBpbGUKKwkgIHdpdGggU3VuIFdvcmtTaG9wIGNvbXBpbGVycyBzaW5jZSB0aGVzZSB0b2tlbnMgd2VyZSBlbXB0eSAoY2Y6CisJICAyMDAwMDkwMiwgcmVwb3J0ZWQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisKKzIwMDAwOTA5CisJKyBjb3JyZWN0IGFuIHVuaW5pdGlhbGl6ZWQgcGFyYW1ldGVyIHRvIG9wZW5fdGVtcGZpbGUoKSBpbiB0aWMuYyB3aGljaAorCSAgbWFkZSAidGljIC1JIiBnaXZlIGFuIGFtYmlndW91cyBlcnJvciBtZXNzYWdlIGFib3V0IHRtcG5hbS4KKwkrIGFkZCBzcGVjaWFsIGNhc2UgaW4gbGliX3ZpZGF0dHIuYyB0byByZXNldCB1bmRlcmxpbmUgYW5kIHN0YW5kb3V0IGZvcgorCSAgZGV2aWNlcyB0aGF0IGhhdmUgbm8gc2dyMCBkZWZpbmVkIChwYXRjaCBieSBEb24gTGV3aXMKKwkgIDxEb24uTGV3aXNAdHNjLnRkay5jb20+KS4gIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGJvbGQKKwkgIG1vZGUsIHNpbmNlIHRoZXJlIGlzIG5vIGV4aXQtYm9sZC1tb2RlIGNhcGFiaWxpdHkuCisJKyBpbXByb3ZlZCBwYXRjaCBmb3IgTWFrZV9FbnVtX1R5cGUgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBtb2RpZnkgdHBhcm0gdG8gZGlzYWxsb3cgYXJpdGhtZXRpYyBvbiBzdHJpbmdzLCBhbmFseXplIHRoZSB2YXJhcmdzCisJICBsaXN0IHRvIHJlYWQgc3RyaW5ncyBhcyBzdHJpbmdzIGFuZCBudW1iZXJzIGFzIG51bWJlcnMuCisJKyBtb2RpZnkgdHBhcm0ncyBpbnRlcm5hbCBmdW5jdGlvbiBzcG9wKCkgdG8gdHJlYXQgYSBudWxsIHBvaW50ZXIgYXMKKwkgIGFuIGVtcHR5IHN0cmluZy4KKwkrIG1vZGlmeSB0cHV0IHByb2dyYW0gc28gaXQgY2FuIGJlIHJlbmFtZWQgb3IgaW52b2tlZCB2aWEgYSBsaW5rIGFzCisJICAncmVzZXQnIG9yICdpbml0JywgcHJvZHVjaW5nIHRoZSBzYW1lIGVmZmVjdCBhcyAndHB1dCByZXNldCcgb3IgJ3RwdXQKKwkgIGluaXQnLgorCSsgYWRkIHByaXZhdGUgZW50cnlwb2ludCBfbmNfYmFzZW5hbWUoKSwgdXNlIHRvIGNvbnNvbGlkYXRlIHJlbGF0ZWQKKwkgIGNvZGUgaW4gcHJvZ3MsIGFzIHdlbGwgYXMgYWNjb21tb2RhdGluZyBPUy8yIEVNWCBwYXRobmFtZXMuCisJKyByZW1vdmUgTkNVUlNFU19DT05TVCBsaW5lIGZyb20gZWRpdF9jZmcuc2ggdG8gY29tcGVuc2F0ZSBmb3IgaXRzCisJICByZW1vdmFsIChleGNlcHQgdmlhIEFDX1NVQlNUKSBmcm9tIGNvbmZpZ3VyZS5pbiwgbWFraW5nCisJICAtLWVuYWJsZS1jb25zdCB3b3JrIGFnYWluIChyZXBvcnRlZCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCSsgcmVnZW4nZCBjb25maWd1cmUgdG8gcGljayB1cCAiaHB1eCoiIGNoYW5nZSBmcm9tIDIwMDAwOTAyLgorCisyMDAwMDkwMgorCSsgbW9kaWZ5IHRzZXQuYyB0byBjaGVjayBmb3IgdHJhbnNmb3JtZWQgInJlc2V0IiBwcm9ncmFtIG5hbWUsIGlmIGFueS4KKwkrIGFkZCBhIGNoZWNrIGZvciBudWxsIHBvaW50ZXIgaW4gTWFrZV9FbnVtX1R5cGUoKSAocmVwb3J0ZWQgYnkgU3RldmVuCisJICBXIE9yciA8c3RldmVvQHdvcmxkLnN0ZC5jb20+KS4KKwkrIGNoYW5nZSBmdW5jdGlvbnMgX25jX3BhcnNlX2VudHJ5KCkgYW5kIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSB0byBhdm9pZAorCSAgdXNpbmcgc3RydG9rKCksIGJlY2F1c2UgaXQgaXMgbm9uLXJlZW50cmFudCAocmVwb3J0ZWQgYnkgQW5kcmV5IEEKKwkgIENoZXJub3YgPGFjaGVAbmFndWFsLnBwLnJ1PikuCisJKyByZW1vdmUgImhwdXgxMC4qIiBjYXNlIGZyb20gQ0ZfU0hBUkVEX09QVFMgY29uZmlndXJlIHNjcmlwdCBtYWNyby4KKwkgIFRoaXMgZGlmZmVyZWQgZnJvbSB0aGUgImhwdXgqIiBjYXNlIGJ5IHVzaW5nIHJldmVyc2VkIHN5bWJvbGljCisJICBsaW5rcywgd2hpY2ggbWFkZSB0aGUgNS4xIHZlcnNpb24gbm90IG1hdGNoIHRoZSBjb25maWd1cmF0aW9uIG9mCisJICA1LjAgc2hhcmVkIGxpYnJhcmllcyAocmVwb3J0ZWQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBjb3JyZWN0IGEgZGVwZW5kZW5jeSBpbiBBZGE5NS9zcmMvTWFrZWZpbGUuaW4gd2hpY2ggcHJldmVudGVkCisJICBidWlsZGluZyB3aXRoIGNvbmZpZ3VyZSAtLXNyY2RpciAocGF0Y2ggYnkgSCBOYW5vc2Vjb25kCisJICA8YWxkb21lbEBpeC5uZXRjb20uY29tPikuCisJKyBtb2RpZnkgaWZkZWYncyBpbiBjdXJzZXMuaC5pbiB0byBhdm9pZCB3YXJuaW5nIGlmIEdDQ19QUklOVEYgb3IKKwkgIEdDQ19TQ0FORiB3YXMgbm90IHByZXZpb3VzbHkgZGVmaW5lZCAocmVwb3J0ZWQgYnkgUGF2ZWwgUm9za2luCisJICA8cHJvc2tpQGdudS5vcmc+KS4KKwkrIGFkZCBNS25jdXJzZXNfZGVmLnNoIHRvIGdlbmVyYXRlIGZhbGxiYWNrIGRlZmluaXRpb25zIGZvcgorCSAgbmN1cnNlc19jZmcuaCwgdG8gcXVpZXQgZ2NjIC1XdW5kZWYgd2FybmluZ3MsIG1vZGlmaWVkIGlmZGVmJ3MgaW4KKwkgIGNvZGUgdG8gY29uc2lzdGVudGx5IHVzZSAiI2lmIiByYXRoZXIgdGhhbiAiI2lmZGVmIi4KKworMjAwMDA4MjYKKwkrIGFkZCBRTlggcWFuc2kgZW50cmllcyB0byB0ZXJtaW5mbyAtVEQKKwkrIGFkZCBvczIgZW50cnkgdG8gbWlzYy9lbXguc3JjICg8am1jb29wckB3ZWJtYWlsLmJtaS5uZXQ+KS4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1kYXRhYmFzZSB0byBhbGxvdyBzcGVjaWZ5aW5nIGEgZGlmZmVyZW50CisJICB0ZXJtaW5mbyBzb3VyY2UtZmlsZSB0byBpbnN0YWxsLiAgT24gT1MvMiBFTVgsIHRoaXMgZGVmYXVsdHMgdG8KKwkgIG1pc2MvZW14LnNyYworCSsgY2hhbmdlIG1pc2MvcnVuX3RpYy5zaCB0byBkZXJpdmUgaXQgZnJvbSBtaXNjL3J1bl90aWMuaW4sIHRvIHNpbXBsaWZ5CisJICBzZXR0aW5nIC5leGUgZXh0ZW5zaW9uIG9uIE9TLzIgRU1YLgorCSsgYWRkIC5leGUgZXh0ZW5zaW9uIGluIEFkYTk1L2dlbi9NYWtlZmlsZS5pbiwKKwkgIEFkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4sIGZvciBPUy8yIEVNWCAocmVwb3J0ZWQgYnkKKwkgIDxqbWNvb3ByQHdlYm1haWwuYm1pLm5ldD4pLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgT1MvMiBFTVgpIHdoaWNoIGRvIG5vdAorCSAgZGlzdGluZ3Vpc2ggYmV0d2VlbiB1cHBlci9sb3dlcmNhc2UgZmlsZW5hbWVzLCB1c2UgdGhpcyB0byBmaXggdGFncworCSAgcnVsZXMgaW4gbWFrZWZpbGVzLgorCSsgaW5pdGlhbGl6ZSBmZHNbXSBhcnJheSB0byAwJ3MgaW4gX25jX3RpbWVkX3dhaXQoKTsgYXBwYXJlbnRseSBwb2xsKCkKKwkgIG9ubHkgc2V0cyB0aGUgcmV2ZW50cyBtZW1iZXJzIG9mIHRoYXQgYXJyYXkgd2hlbiB0aGVyZSBpcyBhY3Rpdml0eQorCSAgY29ycmVzcG9uZGluZyB0byB0aGUgcmVsYXRlZCBmaWxlIChyZXBvcnQgYnkgR2xlbm4gQ29vcGVyCisJICA8Z2Nvb3BlckBxYW50YXMuY29tLmF1PiwgdXNpbmcgUHVyaWZ5IG9uIFNvbGFyaXMgNS42KS4KKwkrIGNoYW5nZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBBQ19DQU5PTklDQUxfU1lTVEVNIHJhdGhlciB0aGFuCisJICBBQ19DQU5PTklDQUxfSE9TVCwgd2hpY2ggbWVhbnMgdGhhdCBjb25maWd1cmUgLS10YXJnZXQgd2lsbCBzZXQKKwkgIGEgZGVmYXVsdCBwcm9ncmFtLXByZWZpeC4KKwkrIGFkZCBub3RlIG9uIGNyb3NzLWNvbXBpbGluZyB0byBJTlNUQUxMICh3aGljaCBkb2VzIG5vdCByZWx5IG9uIHRoZQorCSAgQUNfQ0FOT05JQ0FMXyogbWFjcm9zKS4KKworMjAwMDA4MTkKKwkrIGFkZCBjYXNlcyBmb3IgRU1YIE9TLzIgdG8gY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJKyBuZXcgdmVyc2lvbiBvZiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgZnJvbSBseW54IDIuOC40ZGV2LjcKKwkrIGFkZCBkZWZpbml0aW9ucyB2aWEgdHJhbnNmb3JtLmggdG8gYWxsb3cgdGljIGFuZCB0cHV0IHRvIGNoZWNrIGZvcgorCSAgdGhlIHRyYW5zZm9ybWVkIGFsaWFzZXMgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIGluZm90b2NhcCwgZXRjLgorCSsgc2ltcGxpZnkgdHJhbnNmb3JtLWV4cHJlc3Npb25zIGluIHByb2dzL01ha2VmaWxlLmluLCBtYWtlIHRoZQorCSAgdW5pbnN0YWxsIHJ1bGUgd29yayBmb3IgdHJhbnNmb3JtZWQgcHJvZ3JhbSBuYW1lcy4KKwkrIGNoYW5nZSBzeW1ib2wgdXNlZCBieSAtLWluc3RhbGwtcHJlZml4IGNvbmZpZ3VyZSBvcHRpb24gZnJvbQorCSAgSU5TVEFMTF9QUkVGSVggdG8gREVTVERJUiAodGhlIGxhdHRlciBoYXMgYmVjb21lIGNvbW1vbiB1c2FnZQorCSAgYWx0aG91Z2ggdGhlIG5hbWUgaXMgbWlzbGVhZGluZykuCisJKyBtb2RpZnkgcHJvZ3JhbXMgdG8gdXNlIGN1cnNlc192ZXJzaW9uKCkgc3RyaW5nIHRvIHJlcG9ydCB0aGUgdmVyc2lvbgorCSAgb2YgbmN1cnNlcyB3aXRoIHdoaWNoIHRoZXkgYXJlIGNvbXBpbGVkIHJhdGhlciB0aGFuIHRoZQorCSAgTkNVUlNFU19WRVJTSU9OIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwYXRjaCBsZXZlbCBpbgorCSAgYWRkaXRpb24gdG8gdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMuCisKKzIwMDAwODEyCisJKyBtb2RpZnkgQ0ZfTUFOX1BBR0VTIGNvbmZpZ3VyZSBtYWNybyB0byBtYWtlIHRyYW5zZm9ybWVkIHByb2dyYW0gbmFtZXMKKwkgIGEgcGFyYW1ldGVyIHRvIHRoYXQgbWFjcm8gcmF0aGVyIHRoYW4gZW1iZWRkaW5nIHRoZW0gaW4gdGhlIG1hY3JvLgorCSsgbmV3ZXIgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViIChyZWZlcmVuY2UgdmVyc2lvbiB1c2VkIGluIGx5bngKKwkgIDIuOC40ZGV2LjcpLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWRlZmF1bHQtdGVybWluZm8tZGlyPURJUiB0byBhbGxvdworCSAgc3BlY2lmeWluZyB0aGUgZGVmYXVsdCB0ZXJtaW5mbyBkYXRhYmFzZSBkaXJlY3RvcnkgKHJlcXVlc3QgYnkgQWxiZXJ0CisJICBDaGluLUEtWW91bmcpLgorCSsgbWlub3IgdXBkYXRlcyBmb3IgdGVybWluZm8uc3JjIGZyb20gRnJlZUJTRCB0ZXJtY2FwIGNoYW5nZS1oaXN0b3J5LgorCSsgY29ycmVjdCBub3RlcyBpbiBSRUFETUUgYW5kIElOU1RBTEwgcmVnYXJkaW5nIGRvY3VtZW50YXRpb24gZmlsZXMKKwkgIHRoYXQgd2VyZSBtb3ZlZCBmcm9tIG1pc2MgZGlyZWN0b3J5IHRvIGRvYyAocmVwb3J0IGJ5IFJpY2ggS3VsYXdpZWMKKwkgIDxyc2tAZ3NwLm9yZz4pLgorCSsgY2hhbmdlIG1vc3QgcmVtYWluaW5nIHVucXVvdGVkIHBhcmFtZXRlcnMgb2YgJ3Rlc3QnIGluIGNvbmZpZ3VyZQorCSAgc2NyaXB0IHRvIHVzZSBxdW90ZXMsIGZvciBpbnN0YW5jZSBmaXhpbmcgYSBwcm9ibGVtIGluIHRoZQorCSAgLS1kaXNhYmxlLWRhdGFiYXNlIG9wdGlvbiAocmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIE1vbmRydXAKKwkgIDxzY2FuY21AYmlvYmFzZS5kaz4pLgorCSsgbWlub3IgYWRqdXN0bWVudHMgdG8gd29yayBhcm91bmQgc29tZSBvZiB0aGUgaW5jb21wYXRpYmlsaXRpZXMvYnVncworCSAgaW4gYXV0b2NvbmYgMi4yOWEgYWxwaGEuCisJKyBhZGQgLUkvdXNyL2xvY2FsL2luY2x1ZGUgd2hlbiAtLXdpdGgtbmN1cnNlcyBvcHRpb24gaXMgdXNlZCBpbgorCSAgdGVzdC9jb25maWd1cmUgc2NyaXB0LgorCSsgY29ycmVjdCBsb2dpYyBpbiBhZGp1c3RfY2FuY2VscygpLCB3aGljaCBkaWQgbm90IGNoZWNrIGJvdGgKKwkgIGFsdGVybmF0aXZlcyB3aGVuIHJlY2xhc3NpZnlpbmcgYW4gZXh0ZW5kZWQgbmFtZSBiZXR3ZWVuIGJvb2xlYW4sCisJICBudW1iZXIgYW5kIHN0cmluZywgY2F1c2luZyBhbiBpbmZpbml0ZSBsb29wIGluIHRpYy4KKworMjAwMDA3MzAKKwkrIGNvcnJlY3QgYSBtaXNzaW5nIGJhY2tzbGFzaCBpbiBjdXJzZXMucHJpdi5oCisKKzIwMDAwNzI5CisJKyBjaGFuZ2UgaGFuZGxpbmcgb2Ygbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbiBpbiB0dHlfdXBkYXRlLmMgdG8gY2xlYXIKKwkgIHRleHQgYWZ0ZXIgaXQgaXMgc2hpZnRlZCBpbiByYXRoZXIgdGhhbiBiZWZvcmUgc2hpZnRpbmcgb3V0LiAgQWxzbworCSAgY29ycmVjdCByb3cgY29tcHV0YXRpb24gKHJlcG9ydGVkIGJ5IFJ1ZWRpZ2VyIEt1aGxtYW5uCisJICA8dWNrNEByei51bmkta2FybHNydWhlLmRlPikuCisJKyBhZGQvdXNlIG5ldyB0cmFjZSBmdW5jdGlvbiB0byBkaXNwbGF5IGNodHlwZSB2YWx1ZXMgZnJvbSB3aW5jaCgpIGFuZAorCSAgZ2V0YmtnZCgpLgorCSsgYWRkIHRyYWNlIG1hc2sgVFJBQ0VfQVRUUlMsIGFsdGVyIHNldmVyYWwgZXhpc3RpbmcgX3RyYWNlZiBjYWxscyB0aGF0CisJICB0cmFjZSBhdHRyaWJ1dGUgY2hhbmdlcyB1bmRlciBUUkFDRV9DQUxMUyB0byB1c2UgdGhpcy4KKwkrIG1vZGlmeSBNS2xpYl9nZW4uc2ggc28gdGhhdCBmdW5jdGlvbnMgcmV0dXJuaW5nIGNodHlwZSB3aWxsIGNhbGwKKwkgIHJldHVybkNoYXIoKS4KKwkrIGFkZCByZXR1cm5DaGFyKCkgdHJhY2UsIGZvciBmdW5jdGlvbnMgcmV0dXJuaW5nIGNodHlwZS4KKwkrIGNoYW5nZSBpbmRlbnQucHJvIHRvIGxpbmUgdXAgcGFyZW50aGVzaXMuCisKKzIwMDAwNzIyCisJKyBmaXggYSBoZWFwIHByb2JsZW0gd2l0aCB0aGUgYysrIGJpbmRpbmcgKHJlcG9ydCBieQorCSAgPGFsZXhhbmRlcl9saWJlcnNvbkBuaW5ld2VzdC5jb20+LCBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCSsgbWlub3IgYWRqdXN0bWVudCB0byBDbHJUb0VPTCgpIHRvIGhhbmRsZSBhbiBvdXQtb2YtYm91bmRzIHBhcmFtZXRlci4KKwkrIG1vZGlmeSB0aGUgY2hlY2sgZm9yIGJpZy1jb3JlIHRvIGZvcmNlIGEgY291cGxlIG9mIG1lbW9yeSBhY2Nlc3NlcywKKwkgIHdoaWNoIG1heSB3b3JrIGFzIG5lZWRlZCBmb3Igb2xkZXIvbGVzcy1jYXBhYmxlIG1hY2hpbmVzIChpZiBub3QsCisJICB0aGVyZSdzIHN0aWxsIHRoZSBleHBsaWNpdCBjb25maWd1cmUgb3B0aW9uKS4KKwk+IGZpeGVzIGJhc2VkIG9uIGRpZmYncyBmb3IgQW1pZ2EgYW5kIEJlT1MgZm91bmQgYXQKKwkgIGh0dHA6Ly93d3cubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlL35rdWhsbWFubi9jcm9zcy9uY3Vyc2VzLworCSsgYWx0ZXIgZGVmaW5pdGlvbiBvZiBOQ1VSU0VTX0NPTlNUIHRvIG1ha2UgaXQgbm9uLWVtcHR5LgorCSsgYWRkIGFtaWdhLXZuYyB0ZXJtaW5mbyBlbnRyeS4KKwkrIHJlZGVmaW5lICdURVhUJyBpbiBtZW51LmggZm9yIEFNSUdBLCBzaW5jZSBpdCBpcyByZXBvcnRlZCB0byBoYXZlCisJICBhbiAodW5zcGVjaWZpZWQpIHN5bWJvbCBjb25mbGljdC4KKwkrIHJlcGxhY2VkIGNhc2Utc3RhdGVtZW50IGluIF9uY190cmFjZWJpdHMoKSBmb3IgQ1NJWkUgd2l0aCBhIHRhYmxlIHRvCisJICBzaW1wbGlmeSB3b3JraW5nIGFyb3VuZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkZWZpbmUgcmFuZG9tCisJICBjb21iaW5hdGlvbnMgb2YgdGhlIHJlbGF0ZWQgbWFjcm9zIHRvIHplcm8uCisJKyBtb2RpZnkgY29uZmlndXJlIHRlc3QgZm9yIHRjZ2V0YXR0cigpIHRvIGFsbG93IGZvciBvbGQKKwkgIGltcGxlbWVudGF0aW9ucywgZS5nLiwgb24gQmVPUywgd2hpY2ggb25seSBkZWZpbmVkIGl0IGFzIGEgbWFjcm8uCisJPiBwYXRjaGVzIGJ5IEJydW5vIEhhaWJsZToKKwkrIHdoZW4gY2hlY2tpbmcgTENfQUxML0xDX0NUWVBFL0xBTkcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBVVEYtOAorCSAgbG9jYWxlLCBpZ25vcmUgdGhvc2Ugd2hpY2ggYXJlIHNldCB0byBhbiBlbXB0eSB2YWx1ZSwgYXMgcGVyIFNVU1YyLgorCSsgZW5jb2RlIDB4RkZGRCBpbiBVVEYtOCB3aXRoIDMgYnl0ZXMsIG5vdCAyLgorCSsgbW9kaWZ5IF9uY191dGY4X291dGNoKCkgdG8gYXZvaWQgc2lnbi1leHRlbnNpb24gd2hlbiBjaGVja2luZyBmb3IKKwkgIG91dC1vZi1yYW5nZSB2YWx1ZS4KKworMjAwMDA3MTUKKwkrIGNvcnJlY3QgbWFubGlua3Muc2VkIHNjcmlwdCB0byBhdm9pZCB1c2luZyBFUkUgIlwrIiwgd2hpY2ggaXMgbm90CisJICB1bmRlcnN0b29kIGJ5IG9sZGVyIHZlcnNpb25zIG9mIHNlZCAocGF0Y2ggYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBpbXBsZW1lbnQgY29uZmlndXJlIHNjcmlwdCBvcHRpb25zIHRoYXQgdHJhbnNmb3JtIGluc3RhbGxlZCBwcm9ncmFtCisJICBuYW1lcywgZS5nLiwgLS1wcm9ncmFtLXByZWZpeCwgaW5jbHVkaW5nIHRoZSBtYW5wYWdlIG5hbWVzIGFuZCBjcm9zcworCSAgcmVmZXJlbmNlcyAocGF0Y2ggYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPikuCisJKyBjb3JyZWN0IHNldmVyYWwgbWlzbWF0Y2hlcyBiZXR3ZWVuIG1hbnBhZ2UgZmlsZW5hbWUgYW5kICIuVEgiCisJICBkaXJlY3RpdmVzLCByZW5hbWluZyBkZnRfZmdiZy4zeCB0byBkZWZhdWx0X2NvbG9ycy4zeCBhbmQKKwkgIG1lbnVfYXR0cmlicy4zeCB0byBtZW51X2F0dHJpYnV0ZXMuM3ggKHJlcG9ydCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIGNvcnJlY3QgbWlzc2luZyBpbmNsdWRlcyBmb3IgPHN0cmluZy5oPiBpbiBzZXZlcmFsIHBsYWNlcywgaW5jbHVkaW5nCisJICB0aGUgQysrIGJpbmRpbmcuICBUaGlzIGlzIG5vdCBub3RlZCBieSBnY2MgdW5sZXNzIHdlIHVzZSB0aGUKKwkgIC1mbm8tYnVpbHRpbiBvcHRpb24gKHJlcG9ydGVkIGJ5IElnb3IgU2NoZWluIDxpZ29yQHR4Yy5jb20+KS4KKwkrIG1vZGlmaWVkIHByb2dzL3RzZXQuYyBhbmQgdGFjay9zeXNkZXAuYyB0byBidWlsZCB3aXRoIHNndHR5YgorCSAgaW50ZXJmYWNlIGlmIG5laXRoZXIgdGVybWlvIG9yIHRlcm1pb3MgaXMgYXZhaWxhYmxlLiAgVGVzdGVkIHRoaXMKKwkgIHdpdGggRnJlZUJTRCAyLjEuNSAod2hpY2ggZG9lcyBoYXZlIHRlcm1pb3MgLSBidXQgdGhlIHNndHR5YiBkb2VzCisJICB3b3JrKS4KKworMjAwMDA3MDggNS4xIHJlbGVhc2UgZm9yIHVwbG9hZCB0byBmdHAuZ251Lm9yZworCSsgZG9jdW1lbnQgY29uZmlndXJlIG9wdGlvbnMgaW4gSU5TVEFMTC4KKwkrIGFkZCBtYW4tcGFnZSBmb3IgbmN1cnNlcyB0cmFjZSBmdW5jdGlvbnMuCisJKyBjb3JyZWN0IHJldHVybiB2YWx1ZSBzaG93biBpbiBjdXJzX3RvdWNoLjN4IGZvciBpc19saW5ldG91Y2hlZCgpIGFuZAorCSAgaXNfd2ludG91Y2hlZCgpLCBpbiBjdXJzX2luaXRzY3IuM3ggZm9yIGlzZW5kd2luKCksIGFuZCBpbgorCSAgY3Vyc190ZXJtYXR0ci4zeCBmb3IgaGFzX2ljKCkgYW5kIGhhc19pbCgpLgorCSsgYWRkIHByb3RvdHlwZXMgZm9yIHRvdWNobGluZSgpIGFuZCB0b3VjaHdpbigpLCBhZGRpbmcgdGhlbSB0byB0aGUKKwkgIGxpc3Qgb2YgZ2VuZXJhdGVkIGZ1bmN0aW9ucy4KKwkrIG1vZGlmeSBmaWZvX3B1c2goKSB0byBwdXQgRVJSIGludG8gdGhlIGZpZm8ganVzdCBsaWtlIG90aGVyIHZhbHVlcyB0bworCSAgcmV0dXJuIGZyb20gd2dldGNoKCkuICBJdCB3YXMgcmV0dXJuaW5nIHdpdGhvdXQgZG9pbmcgdGhhdCwgbWFraW5nCisJICBlbmQtb2YtZmlsZSBjb25kaXRpb24gaW5jb3JyZWN0bHkgcmV0dXJuIGEgMCAocmVwb3J0ZWQgYnkgVG9kZCBDCisJICBNaWxsZXIpLgorCSsgdW5jb21tZW50IENDX1NIQVJFRF9PUFRTIGZvciBwcm9ncyBhbmQgdGFjayAoc2VlIDk3MTExNSksIHNpbmNlIHRoZXkKKwkgIGFyZSBuZWVkZWQgZm9yIFNDTyBPcGVuU2VydmVyLgorCSsgbW92ZSBfbmNfZGlzYWJsZV9wZXJpb2QgZnJvbSBmcmVlX3R0eXBlLmMgdG8gY29tcF9zY2FuLmMgdG8gYXBwZWFzZQorCSAgZHluYW1pYyBsb2FkZXJzIG9uIFNDTyBhbmQgSVJJWDY0LgorCSsgYWRkICItYSIgb3B0aW9uIHRvIHRlc3QvbmN1cnNlcy5jIHRvIGludm9rZSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKQorCSAgZm9yIHRlc3RpbmcuCisJKyBjb3JyZWN0IGFzc2lnbm1lbnQgaW4gYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkgd2hpY2ggdGVsbHMgbmN1cnNlcworCSAgd2hldGhlciB0byB1c2UgZGVmYXVsdCBjb2xvcnMsIG9yIHRoZSBhc3N1bWVkIG9uZXMgKHJlcG9ydGVkIGJ5IEdhcnkKKwkgIEZ1bmNrIDxnYXJ5QEludHJlcGlkLkNvbT4pLgorCSsgcmV2aWV3L2NvcnJlY3QgbG9naWMgaW4gbWstMXN0LmF3ayBmb3IgbWFraW5nIHN5bWJvbGljIGxpbmtzIGZvcgorCSAgc2hhcmVkIGxpYnJhcmllcywgaW4gcGFydGljdWxhciBmb3IgRnJlZUJTRCwgZXRjLgorCSsgcmVnZW5lcmF0ZSBtaXNjLyouZGVmIGZpbGVzIGZvciBPUy8yIEVNWCBkbGwncy4KKwkrIGNvcnJlY3QgcXVvdGluZyBvZiB2YWx1ZXMgZm9yIENDX1NIQVJFRF9PUFRTIGluIGFjbG9jYWwubTQgZm9yCisJICBjYXNlcyBvcGVuYnNkMiosIG9wZW5ic2QqLCBmcmVlYnNkKiBhbmQgbmV0YnNkKiAocGF0Y2ggYnkgUGV0ZXIKKwkgIFdlbW0pIChlcnIgaW4gMjAwMDA2MTApLgorCSsgbWlub3IgdXBkYXRlcyB0byByZWxlYXNlIG5vdGVzLCBhcyB3ZWxsIGFzIGFkZGluZy91cGRhdGluZyBVUkxzIGZvcgorCSAgZXhhbXBsZXMgY2l0ZWQgaW4gYW5ub3VuY2UuaHRtbAorCT4gc2V2ZXJhbCBmaXhlcyBmcm9tIFBoaWxpcHBlIEJsYWluIDxwaGlsaXBwZS5ibGFpbjJAZnJlZXNiZWUuZnI+OgorCSsgY29ycmVjdCBwbGFjZW1lbnQgb2YgaWZkZWYgZm9yIE5DVVJTRVNfWE5BTUVTIGluIGZ1bmN0aW9uCisJICBfbmNfZnJlZV90ZXJtdHlwZSgpLCBmaXhlcyBhIG1lbW9yeSBsZWFrLgorCSsgYWRkIGEgY2FsbCB0byBfbmNfc3luY2hvb2soKSB0byB0aGUgZW5kIG9mIGZ1bmN0aW9uIHdobGluZSgpIGxpa2UKKwkgIHRoYXQgaW4gd3ZsaW5lKCkgKGRpZmZlcmVuY2Ugd2FzIGluIDEuOS40KS4KKwkrIG1ha2UgQ2xlYXJTY3JlZW4oKSBhIGxpdHRsZSBmYXN0ZXIgYnkgbW92aW5nIHR3byBpbnN0YW5jZXMgb2YKKwkgIFVwZGF0ZUF0dHIoKSBvdXQgb2YgZm9yLWxvb3BzLgorCSsgc2ltcGxpZnkgQ2xyQm90dG9tKCkgYnkgZWxpbWluYXRpbmcgdGhlIHRzdExpbmUgZGF0YSwgdXNpbmcgZm9yLWxvb3BzCisJICAoY2Y6IDk2MDQyOCkuCisKKzIwMDAwNzAxIHByZS1yZWxlYXNlCisJKyBjaGFuZ2UgbWlub3IgdmVyc2lvbiB0byAxLCBpLmUuLCBuY3Vyc2VzIDUuMQorCSsgYWRkIGV4cGVyaW1lbnRhbCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWNvbG9yZmdiZyB0byBjaGVjayBmb3IKKwkgICRDT0xPUlRFUk0gdmFyaWFibGUgYXMgc2V0IGJ5IHJ4dnQvYXRlcm0vRXRlcm0uCisJKyBhZGQgRXRlcm0gdGVybWluZm8gZW50cnkgKE1pY2hhZWwgSmVubmluZ3MgPG1lakB2YWxpbnV4LmNvbT4pLgorCSsgbW9kaWZ5IG1hbmxpbmtzLnNlZCB0byBwaWNrIGFsaWFzZXMgZnJvbSB0aGUgU1lOT1BTSVMgc2VjdGlvbiwgYW5kCisJICBzZXZlcmFsIG1hbnBhZ2VzIHNvIG1hbmxpbmtzLnNlZCBjYW4gZmluZCBhbGlhc2VzIGZvciBjcmVhdGluZworCSAgc3ltYm9saWMgbGlua3MuCisJKyBhZGQgZXhwbGFuYXRpb24gdG8gcnVuX3RpYy5zaCByZWdhcmRpbmcgZXh0ZW5kZWQgdGVybWluYWwKKwkgIGNhcGFiaWxpdGllcy4KKwkrIGNoYW5nZSBtZXNzYWdlIGZvcm1hdCBmb3IgZWRpdF9jZmcuc2gsIHNpbmNlIHNvbWUgcGVvcGxlIGludGVycHJldAorCSAgaXQgYXMgYSB3YXJuaW5nLgorCSsgY29ycmVjdCB1bmVzY2FwZWQgJyQnIGluIHN5c3Y1dXc3Knx1bml4X3N2KiBydWxlIGZvciBDRl9TSEFSRURfT1BUUworCSAgY29uZmlndXJlIG1hY3JvIChyZXBvcnQgYnkgVGhhbmggTWEgPFRoYW5oLk1hQGNhc2ktcnVzY28uY29tPikuCisJKyBjb3JyZWN0IGxvZ2ljIGluIGxpYl90d2FpdC5jIGFzIHVzZWQgYnkgbGliX21vdXNlLmMgZm9yIEdQTSBtb3VzZQorCSAgc3VwcG9ydCB3aGVuIHBvbGwoKSBpcyB1c2VkIHJhdGhlciB0aGFuIHNlbGVjdCgpIChwcm9tcHRlZCBieQorCSAgZGlzY3Vzc2lvbiB3aXRoIERhdmlkIEFsbGVuIDxEQWxsZW4yNEBhb2wuY29tPikuCisKKzIwMDAwNjI0IHByZS1yZWxlYXNlCisJKyBtb2RpZnkgVHJhbnNmb3JtTGluZSgpIHRvIGNoZWNrIGZvciBjZWxscyB3aXRoIGRpZmZlcmVudCBjb2xvciBwYWlycworCSAgdGhhdCBoYXBwZW4gdG8gcmVuZGVyIHRoZSBzYW1lIGRpc3BsYXkgY29sb3JzLgorCSsgYXBwbHkgJE5DVVJTRVNfTk9fUEFERElORyB0byBjb3N0LWNvbXB1dGF0aW9uIGluIG12Y3VyKCkuCisJKyBpbXByb3ZlIGNvc3QgY29tcHV0YXRpb24gaW4gUHV0UmFuZ2UoKSBieSBhY2NvdW50aW5nIGZvciB0aGUgdXNlCisJICBvZiBwYXJtX3JpZ2h0X2N1cnNvciBpbiBtdmN1cigpLgorCSsgY29ycmVjdCBjb3N0IGNvbXB1dGF0aW9uIGluIEVtaXRSYW5nZSgpLCB3aGljaCB3YXMgbm90IHVzaW5nIHRoZQorCSAgbm9ybWFsaXplZCB2YWx1ZSBmb3IgY3Vyc29yX2FkZHJlc3MuCisJKyBuZXdlciBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgKHJlZmVyZW5jZSB2ZXJzaW9uIHVzZWQgaW4gVElOIDEuNS42KS4KKworMjAwMDA2MTcKKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgKHJlZmVyZW5jZSB2ZXJzaW9uIHVzZWQgaW4gUENSRSAzLjIpLgorCSsgcmVzeW5jIGNoYW5nZXMgdG8gZ25hdGh0bWwgYWdhaW5zdCB2ZXJzaW9uIDEuMjIsIHJlZ2VuZXJhdGVkIGh0bWwKKwkgIGZpbGVzIHVuZGVyIGRvYy9odG1sL2FkYSB1c2luZyB0aGlzICgxLjIyLjEuMSkuCisJKyByZWdlbmVyYXRlZCBodG1sIGZpbGVzIHVuZGVyIGRvYy9odG1sL21hbiBhZnRlciBjb3JyZWN0aW5nIHRvcCBhbmQKKwkgIGJvdHRvbSBtYXJnaW4gb3B0aW9ucyBmb3IgbWFuMmh0bWwgaW4gZGlzdC5taworCSsgbWlub3IgZml4ZXMgdG8gdGVzdCBwcm9ncmFtcyBuY3Vyc2VzICdpJyBhbmQgdGVzdGN1cnMgcHJvZ3JhbSB0byBtYWtlCisJICB0aGUgc3Vid2luZG93J3MgYmFja2dyb3VuZCBjb2xvciBjb3ZlciB0aGUgc3Vid2luZG93LgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgc28gQUNfTVNHX0VSUk9SIGlzIHRlbXBvcmFyaWx5IGRlZmluZWQgdG8gYQorCSAgd2FybmluZyBpbiBBQ19QUk9HX0NYWCB0byBtYWtlIGl0IHJlY292ZXIgZnJvbSBhIG1pc3NpbmcgQysrIGNvbXBpbGVyCisJICB3aXRob3V0IHJlcXVpcmluZyB1c2VyIHRvIGFkZCAtLXdpdGhvdXQtY3h4IG9wdGlvbiAoYWRhcHRlZCBmcm9tCisJICBjb21tZW50IGJ5IEFraW0gRGVtYWlsbGUgPGFraW1AZXBpdGEuZnI+IHRvIGF1dG9jb25mIG1haWxpbmcgbGlzdCkuCisJKyBtb2RpZnkgaGVhZGVycy5zaCB0byBhdm9pZCBjcmVhdGluZyB0ZW1wb3JhcnkgZmlsZXMgaW4gdGhlIGJ1aWxkCisJICBkaXJlY3Rvcnkgd2hlbiBpbnN0YWxsaW5nIGhlYWRlcnMgKHJlcG9ydGVkIGJ5IFNlcmdlaSBQb2tyb3Zza3kKKwkgIDxwb2tAbmJzcC5uc2suc3U+KQorCisyMDAwMDYxMAorCSsgcmVnZW5lcmF0ZWQgdGhlIGh0bWwgZmlsZXMgdW5kZXIgZG9jL2h0bWwvYWRhL2ZpbGVzIGFuZAorCSAgZG9jL2h0bWwvYWRhL2Z1bmNzIHdpdGggYSBzbGlnaHRseS1pbXByb3ZlZCBnbmF0aHRtbC4KKwkrIGFkZCBrbW91cyBjYXBhYmlsaXR5IHRvIGxpbnV4IHRlcm1pbmZvIGVudHJ5IHRvIGFsbG93IGl0IHRvIHVzZQorCSAgeHRlcm0tc3R5bGUgZXZlbnRzIHByb3ZpZGVkIGJ5IGdwbSBwYXRjaCBieSBKb2VyZyBTY2hvZW4uCisJKyBtYWtlIHRoZSBjb25maWd1cmUgbWFjcm8gQ0ZfU0hBUkVEX09QVFMgYSBsaXR0bGUgc21hcnRlciBieSB0ZXN0aW5nCisJICBpZiAtZlBJQyBpcyBzdXBwb3J0ZWQgYnkgZ2NjIHJhdGhlciB0aGFuIC1mcGljLiAgVGhlIGZvcm1lciBvcHRpb24KKwkgIGFsbG93cyBsYXJnZXIgc3ltYm9sIHRhYmxlcy4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgKHBhdGNoZXMgYnkKKwkgIEtldmluIEJ1ZXR0bmVyIDxrZXZAcHJpbWVuZXQuY29tPiAoZm9yIGVsZjY0X2lhNjQpLAorCSAgQmVybmQgS3VlbW1lcmxlbiA8Ymt1ZW1tZXJAbWV2aXMuZGU+IChmb3IgTWFjT1MgWCkpLgorCSsgYWRkIHdhcm5pbmcgZm9yICd0aWMgLWN2JyBhYm91dCB1c2Ugb2YgJ14/JyBpbiB0ZXJtaW5mbyBzb3VyY2UsIHdoaWNoCisJICBpcyBhbiBleHRlbnNpb24uCisKKzIwMDAwNTI3CisJKyBtb2RpZnkgZWNobygpIGJlaGF2aW9yIG9mIGdldGNoKCkgdG8gbWF0Y2ggU29sYXJpcyBjdXJzZXMgZm9yCisJICBjYXJyaWFnZSByZXR1cm4gYW5kIGJhY2tzcGFjZSAocmVwb3J0ZWQgYnkgTmVpbCBaYW5lbGxhKS4KKwkrIGNoYW5nZSBfbmNfZmx1c2goKSB0byBhIGZ1bmN0aW9uLgorCSsgbW9kaWZ5IGRlbHNjcmVlbigpIHRvIGNoZWNrIGlmIHRoZSBvdXRwdXQgc3RyZWFtIGhhcyBiZWVuIGNsb3NlZCwgYW5kCisJICBpZiBzbywgZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBmb3Igc2V0YnVmICh0aGlzIHByb3ZpZGVzIGFuCisJICBuY3Vyc2VzLXNwZWNpZmljIHdheSB0byBhdm9pZCBhIG1lbW9yeSBsZWFrIHdoZW4gcmVwZWF0ZWRseSBjYWxsaW5nCisJICBuZXd0ZXJtIHJlcG9ydGVkIGJ5IENoaXBwIEMgPGF0XzFAemRuZXRvbmVib3guY29tPikuCisJKyBjb3JyZWN0IHR5cG8gaW4gY3Vyc19nZXRjaC4zeCBtYW5wYWdlIHJlZ2FyZGluZyBub2VjaG8gKHJlcG9ydGVkIGJ5CisJICBEYXZpZCBNYWxvbmUgPGR3bWFsb25lQG1hdGhzLnRjZC5pZT4pLgorCSsgYWRkIGEgIm1ha2UgbGlicyIgcnVsZS4KKwkrIG1ha2UgdGhlIEFkYTk1IGludGVyZmFjZSBidWlsZCB3aXRoIGNvbmZpZ3VyZSAtLWVuYWJsZS13aWRlYy4KKwkrIGlmIHRoZSBjb25maWd1cmUgLS1lbmFibGUtd2lkZWMgb3B0aW9uIGlzIGdpdmVuLCBhcHBlbmQgJ3cnIHRvIG5hbWVzCisJICBvZiB0aGUgZ2VuZXJhdGVkIGxpYnJhcmllcyAoZS5nLiwgbGlibmN1cnNlc3cuc28pIHRvIGF2b2lkIGNvbmZsaWN0CisJICB3aXRoIGV4aXN0aW5nIG5jdXJzZXMgbGlicmFyaWVzLgorCisyMDAwMDUyMAorCSsgbW9kaWZ5IHZpZXcuYyB0byBtYWtlIGEgcnVkaW1lbnRhcnkgdmlld2VyIG9mIFVURi04IHRleHQgaWYgbmN1cnNlcworCSAgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBleHBlcmltZW50YWwgd2lkZS1jaGFyYWN0ZXIgc3VwcG9ydC4KKwkrIGFkZCBhIHNpbXBsZSBVVEYtOCBvdXRwdXQgZHJpdmVyIHRvIHRoZSBleHBlcmltZW50YWwgd2lkZS1jaGFyYWN0ZXIKKwkgIHN1cHBvcnQuICBJZiBhbnkgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMQ19BTEwsIExDX0NUWVBFIG9yCisJICBMQU5HIGNvbnRhaW4gdGhlIHN0cmluZyAiVVRGLTgiLCB0aGlzIGRyaXZlciB3aWxsIGJlIHVzZWQgdG8KKwkgIHRyYW5zbGF0ZSB0aGUgb3V0cHV0IHRvIFVURi04LiAgVGhpcyB3b3JrcyB3aXRoIFhGcmVlODYgeHRlcm0uCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhbGxvdyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIG9uIEJlT1MKKwkgIChmcm9tIGEgcGF0Y2ggYnkgVmFsZXJpeSBFIFVzaGFrb3YpLgorCSsgbW9kaWZ5IGxpYl9hZGRjaC5jIHRvIGFsbG93IHJlcGVhdGVkIHVwZGF0ZSB0byB0aGUgbG93ZXItcmlnaHQKKwkgIGNvcm5lciwgcmF0aGVyIHRoYW4gZGlzcGxheWluZyBvbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgd3JpdHRlbiB1bnRpbAorCSAgdGhlIGN1cnNvciBpcyBtb3ZlZC4gIFJlY2VudCB2ZXJzaW9ucyBvZiBTVnI0IGN1cnNlcyBjYW4gdXBkYXRlIHRoZQorCSAgbG93ZXItcmlnaHQgY29ybmVyLCBhbmQgYmVoYXZlIHRoaXMgd2F5IChyZXBvcnRlZCBieSBOZWlsIFphbmVsbGEpLgorCSsgYWRkIGEgbGltaXQtY2hlY2sgaW4gX25jX2RvX2NvbG9yKCksIHRvIGF2b2lkIHVzaW5nIGludmFsaWQgY29sb3IKKwkgIHBhaXIgdmFsdWUgKHJlcG9ydCBieSBCcmVuZGFuIE8nRGVhIDxib2RAY29tcHVzb2wuY29tLmF1PikuCisKKzIwMDAwNTEzCisJKyB0aGUgdGFjayBwcm9ncmFtIGtub3dzIGhvdyB0byB1c2Ugc21jdXAgYW5kIHJtY3VwIGJ1dCB0aGUgInNob3cgY2FwcworCSAgdGhhdCBjYW4gYmUgdGVzdGVkIiBmZWF0dXJlIGRpZCBub3QgcmVmbGVjdCB0aGlzIGtub3dsZWRnZS4gIENvcnJlY3QKKwkgIHRoZSBkaXNwbGF5IGluIHRoZSBtZW51IHRhY2svdGVzdC9lZGl0L2MgKHBhdGNoIGJ5IERhbmllbCBXZWF2ZXIpLgorCSsgeHRlcm0tMTZjb2xvciBkb2VzIGFsbG93IGJvbGQrY29sb3JzLCByZW1vdmVkIG5jdiMzMiBmcm9tIHRoYXQKKwkgIHRlcm1pbmZvIGVudHJ5LgorCisyMDAwMDUwNgorCSsgY29ycmVjdCBhc3NpZ25tZW50IHRvIFNQLT5faGFzX3Nncl8zOV80OSBpbiBsaWJfZGZ0X2ZnYmcuYywgd2hpY2gKKwkgIGJyb2tlIGNoZWNrIGZvciBzY3JlZW4ncyBBWCBjYXBhYmlsaXR5IChyZXBvcnRlZCBieSBWYWxlcml5IEUgVXNoYWtvdgorCSAgPHV3ZUBwdGMuc3BidS5ydT4pLgorCSsgY2hhbmdlIG1hbjJodG1sIHJ1bGUgaW4gZGlzdC5tayB0byB3b3JrYXJvdW5kIGJ1ZyBpbiBzb21lCisJICBtYW4tcHJvZ3JhbXMgdGhhdCBpZ25vcmVzIGxvY2FsZSB3aGVuIHJlbmRlcmluZyBoeXBoZW5hdGlvbi4KKwkrIGNoYW5nZSB3ZWItIGFuZCBmdHAtc2l0ZSB0byBkaWNrZXkuaGlzLmNvbQorCisyMDAwMDQyOQorCSsgbW92ZSBfbmNfY3Vycl90b2tlbiBmcm9tIHBhcnNlX2VudHJ5LmMgdG8gY29tcF9zY2FuLmMsIHRvIHdvcmsgYXJvdW5kCisJICBwcm9ibGVtIGxpbmtpbmcgdGFjayBvbiBNYWNPUyBYIERQMy4KKwkrIGluY2x1ZGUgPHN5cy90aW1lLmg+IGluIGxpYl9uYXBtcy5jIHRvIGNvbXBpbGUgb24gTWFjT1MgWCBEUDMKKwkgIChyZXBvcnRlZCBieSBHZXJiZW4gV2llcmRhIDx3aWVyZGFAaG9sbWVzLm5sPikuCisJKyBtb2RpZnkgbGliX3ZpZGF0dHIuYyB0byBjaGVjayBmb3IgbmN2IGZpeGVzIHdoZW4gcGFpci0wIGlzIG5vdAorCSAgZGVmYXVsdCBjb2xvcnMuCisJKyBhZGQgLWQgb3B0aW9uIHRvIG5jdXJzZXMuYywgdG8gdHVybiBvbiBkZWZhdWx0LWNvbG9ycyBmb3IgdGVzdGluZy4KKwkrIGFkZCBhIGNoZWNrIHRvIF9uY19tYWtlbmV3KCkgdG8gZW5zdXJlIHRoYXQgbmV3d2luKCkgYW5kIG5ld3BhZCgpCisJICBjYWxscyBkbyBub3Qgc2lsZW50bHkgZmFpbCBieSBwYXNzaW5nIHRvby1sYXJnZSBsaW1pdHMuCisJKyBhZGQgc3ltYm9sIE5DVVJTRVNfU0laRV9UIHRvIHVzZSByYXRoZXIgdGhhbiBleHBsaWNpdCAnc2hvcnQnIGZvcgorCSAgaW50ZXJuYWwgd2luZG93IGFuZCBwYWQgc2l6ZXMuICBOb3RlIHRoYXQgc2luY2UgdGhpcyBpcyB2aXNpYmxlIGluCisJICB0aGUgV0lORE9XIHN0cnVjdCwgaXQgd291bGQgYmUgYW4gQUJJIGNoYW5nZSB0byBtYWtlIHRoaXMgYW4gJ2ludCcKKwkgIChwcm9tcHRlZCBieSBhIHF1ZXN0aW9uIGJ5IEJhc3RpYW4gVHJvbXBldHRlcgorCSAgPGJ0cm9tcGV0dGVyQGZpcmVtYWlsLmRlPiwgd2hvIGF0dGVtcHRlZCB0byBjcmVhdGUgYSA5NjAwMC1saW5lIHBhZCkuCisKKzIwMDAwNDIyCisJKyBhZGQgbWd0ZXJtIHRlcm1pbmZvIGVudHJ5IGZyb20gTmV0QlNELCBtaW5vciBhZGp1c3RtZW50cyB0byBzdW4tc3M1LAorCSAgYWl4dGVybSBlbnRyaWVzIC1URAorCSsgbW9kaWZ5IHRhY2svYW5zaS5jIHRvIG1ha2UgaXQgbW9yZSB0b2xlcmFudCBvZiBiYWQgQU5TSSByZXBsaWVzLiAgQW4KKwkgIGV4YW1wbGUgb2YgYW4gaWxsZWdhbCBBTlNJIHJlc29uc2UgY2FuIGJlIGZvdW5kIHVzaW5nIE1pY3Jvc29mdCdzCisJICBUZWxuZXQgY2xpZW50LiAgQSBjb3JyZWN0IGRpc3BsYXkgY2FuIGJlIGZvdW5kIHVzaW5nIGEgVlQtNHh4CisJICB0ZXJtaW5hbCBvciBYRnJlZTg2IHh0ZXJtIHdpdGg6CisJCVhUZXJtKlZUMTAwKmRlY1Rlcm1pbmFsSUQ6ICA0NTAKKwkgIChwYXRjaCBieSBEYW5pZWwgV2VhdmVyKS4KKwkrIG1vZGlmeSBnZGMuYyB0byByZWNvZ25pemUgJ3EnIGZvciBxdWl0LCAncycgZm9yIHNpbmdsZS1zdGVwIGFuZCAnICcKKwkgIGZvciByZXN1bWUuICBBZGQgJy1uJyBvcHRpb24gdG8gZm9yY2UgZ2RjJ3Mgc3RhbmRhcmQgaW5wdXQgdG8KKwkgIC9kZXYvbnVsbCwgdG8gYm90aCBpbGx1c3RyYXRlIHRoZSB1c2Ugb2YgbmV3dGVybSgpIGZvciBzcGVjaWZ5aW5nCisJICBhbHRlcm5hdGUgaW5wdXRzIGFzIHdlbGwgYXMgZm9yIHRlc3Rpbmcgc2lnbmFsIGhhbmRsaW5nLgorCSsgbWlub3IgZml4IGZvciBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1tYW5wYWdlLXN5bWxpbmtzLCBmb3IgdGFyZ2V0CisJICBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gYSBwZXJpb2QgKCcuJykgKHJlcG9ydGVkIGJ5IExhcnJ5IFZpcmRlbikuCisKKzIwMDAwNDE1CisJKyBtaW5vciBhZGRpdGlvbnMgdG8gYmV0ZXJtIGVudHJ5IChmZWVkYmFjayBmcm9tIFJpY28gVHVkb3IpIC1URAorCSsgY29ycmVjdGlvbnMvdXBkYXRlcyBmb3Igc29tZSBJQk0gdGVybWluZm8gZW50cmllcyAtVEQKKwkrIG1vZGlmeSBfbmNfc2NyZWVuX3dyYXAoKSBzbyB0aGF0IHdoZW4gZXhpdGluZyBjdXJzZXMgbW9kZSB3aXRoCisJICBub24tZGVmYXVsdCBjb2xvcnMsIHRoZSBsYXN0IGxpbmUgb24gdGhlIHNjcmVlbiB3aWxsIGJlIGNsZWFyZWQgdG8KKwkgIHRoZSBzY3JlZW4ncyBkZWZhdWx0IGNvbG9ycyAocmVxdWVzdCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBtb2RpZnkgbmN1cnNlcy5jICdyJyBleGFtcGxlIHRvIHNldCBub25sKCksIGFsbG93aW5nIGNvbnRyb2wvTSB0byBiZQorCSAgcmVhZCBmb3IgZGVtb25zdHJhdGluZyB0aGUgUkVRX05FV19MSU5FIG9wZXJhdGlvbiAocHJvbXB0ZWQgYnkgYQorCSAgcXVlc3Rpb24gYnkgVG9ueSBMIEtlaXRoIDx0bGtlaXRoQGtlaXRoY29uc3VsdGluZy5jb20+KS4KKwkrIG1vZGlmeSBuY3Vyc2VzLmMgJ3InIGV4YW1wbGUgb2YgZmllbGRfaW5mbygpIHRvIHdvcmsgb24gU29sYXJpcyAyLjcsCisJICBkb2N1bWVudGVkIGV4dGVuc2lvbiBvZiBuY3Vyc2VzIHdoaWNoIGFsbG93cyBhIHplcm8gcG9pbnRlci4KKwkrIG1vZGlmeSBmbXRfY29tcGxleCgpIHRvIGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyBpbiBjYXNlIG9mIGV4Y2VzcworCSAgcmVjdXJzaW9uLCBhbmQgdG8gcmVjb2duaXplICIlZSU/IiBhcyBhIHN5bm9ueW0gZm9yIGVsc2UtaWYsIHdoaWNoCisJICBtZWFucyB0aGF0IGl0IHdpbGwgbm90IHJlY3VyIGZvciB0aGF0IHNwZWNpYWwgY2FzZS4KKwkrIGFkZCBsb2dpYyB0byBzdXBwb3J0ICRURVJNQ0FQIHZhcmlhYmxlIGluIGNhc2UgdGhlIFVTRV9HRVRDQVAgc3ltYm9sCisJICBpcyBkZWZpbmVkIChwYXRjaCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIG1vZGlmeSBvbmUgb2YgdGhlIG00IGZpbGVzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEFkYTk1IHNvdXJjZXMsCisJICB0byBhdm9pZCB1c2luZyB0aGUgdG9rZW4gInN5bWJvbHMiIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCisyMDAwMDQwOAorCSsgYWRkIHRlcm1pbmZvIGVudHJpZXMgYnNkb3MtcGMtbSwgYnNkb3MtcGMtbW9ubyAoSmVmZnJleSBDIEhvbmlnKQorCSsgY29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiB0ZXJtaW5mbyBlbnRyeSBuYW1lOiAgYnEzMDAtcnYgd2FzIGdpdmVuIGFzCisJICBiZzMwMC1ydiBpbiBlc3IncyB2ZXJzaW9uLgorCSsgbW9kaWZ5IHJlZHJhd3dpbigpIG1hY3JvIHNvIGl0cyBwYXJhbWV0ZXIgaXMgZnVsbHkgcGFyZW50aGVzaXplZAorCSAgKGZpeGVzIERlYmlhbiBidWcgcmVwb3J0ICM2MTA4OCkuCisJKyBjb3JyZWN0IGZvcm1hdHRpbmcgZXJyb3IgaW4gZHVtcF9lbnRyeSgpIHdoaWNoIHNldCBpbmNvcnJlY3QgY29sdW1uCisJICB2YWx1ZSB3aGVuIG5vIG5ld2xpbmUgdHJpbW1pbmcgd2FzIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFuIGVudHJ5LAorCSAgYmVmb3JlIGFwcGVuZGluZyAidXNlPSIgY2xhdXNlcyAoY2Y6IDk2MDQwNikuCisKKzIwMDAwNDAxCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtbWFucGFnZS1zeW1saW5rcworCSsgY2hhbmdlIHVuY3RybCgpIHRvIHJlbmRlciBDMSBjaGFyYWN0ZXJzICgxMjgtMTU5KSBhcyB+QCwgfkEsIGV0Yy4KKwkrIGNoYW5nZSBtYWtlZmlsZXMgc28gdHJhY2UoKSBmdW5jdGlvbiBpcyBwcm92aWRlZCBvbmx5IGlmIFRSQUNFIGlzCisJICBkZWZpbmVkLCBlLmcuLCBpbiB0aGUgZGVidWcgbGlicmFyeS4gIE1vZGlmeSByZWxhdGVkIGNhbGxzIHRvCisJICBfdHJhY2VjaGFyKCkgdG8gdXNlIHVuY3RybCgpIGluc3RlYWQuCisKKzIwMDAwMzI1CisJKyBhZGQgc2NyZWVuJ3MgQVggY2FwYWJpbGl0eSAoZm9yIEVDTUEgU0dSIDM5IGFuZCA0OSkgdG8gYXBwbGljYWJsZQorCSAgdGVybWluZm8gZW50cmllcywgdXNlIHByZXNlbmNlIG9mIHRoaXMgYXMgYSBjaGVjayBmb3IgYSBzbWFsbAorCSAgaW1wcm92ZW1lbnQgaW4gc2V0dGluZyBkZWZhdWx0IGNvbG9ycy4KKwkrIGltcHJvdmUgbG9naWMgaW4gX25jX2RvX2NvbG9yKCkgaW1wbGVtZW50aW5nIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpCisJICBieSBwYXNzaW5nIGluIHByZXZpb3VzIGNvbG9yIHBhaXIgaW5mbyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGNhbGwgdG8KKwkgIHNldF9vcmlnaW5hbF9jb2xvcnMoKS4gIChQYXJ0IG9mIHRoaXMgaXMgZnJvbSBhIHBhdGNoIGJ5IEFsZXhhbmRlcgorCSAgViBMdWt5YW5vdikuCisJKyBtb2RpZnkgd2FybmluZyBpbiBfbmNfdHJhbnNfc3RyaW5nKCkgYWJvdXQgYSBwb3NzaWJseSB0b28tbG9uZyBzdHJpbmcKKwkgIHRvIGRvIHRoaXMgb25jZSBvbmx5IHJhdGhlciB0aGFuIGZvciBlYWNoIGNoYXJhY3RlciBwYXN0IHRoZQorCSAgdGhyZXNob2xkICg2MDApLiAgQ2hhbmdlIGludGVyZmFjZSBvZiBfbmNfdHJhbnNfc3RyaW5nKCkgdG8gYWxsb3cKKwkgIGNoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cuCisJKyBjb3JyZWN0IHVzZSBvZiBtZW1zZXQgaW4gX25jX3JlYWRfZW50cnlfc291cmNlKCkgdG8gaW5pdGlhbGl6ZSBFTlRSWQorCSAgc3RydWN0IGVhY2ggdGltZSBiZWZvcmUgcmVhZGluZyBuZXcgZGF0YSBpbnRvIGl0LCByYXRoZXIgdGhhbiBvbmNlCisJICBwZXIgbG9vcCAoY2Y6ICA5OTAzMDEpLiAgVGhpcyBhZmZlY3RzIG11bHRpLWVudHJ5IGluLWNvcmUgb3BlcmF0aW9ucworCSAgc3VjaCBhcyAiaW5mb2NtcCAtRmEiLgorCisyMDAwMDMxOQorCSsgcmVtb3ZlIGEgc3B1cmlvdXMgcG9pbnRlciBpbmNyZW1lbnQgaW4gX25jX2luZm90b2NhcCgpIGNoYW5nZXMgZnJvbQorCSAgMjAwMDAzMTEuICBBZGQgY2hlY2sgZm9yICcuJyBpbiBmb3JtYXQgb2YgbnVtYmVyLCBzaW5jZSB0aGF0IGFsc28KKwkgIGlzIG5vdCBwZXJtaXR0ZWQgaW4gdGVybWNhcC4KKwkrIGNvcnJlY3QgdHlwbyBpbiByeHZ0LWJhc2ljIHRlcm1pbmZvIGZyb20gdGVtcG9yYXJ5IGNoYW5nZSBtYWRlIHdoaWxlCisJICBpbnRlZ3JhdGluZyAyMDAwMDMxOC4KKworMjAwMDAzMTgKKwkrIHJldmVydCBwYXJ0IG9mIHRoZSB2dDIyMCBjaGFuZ2UgKHJlcXVlc3QgYnkgVG9kZCBDIE1pbGxlcikuCisJKyBhZGQgYW5zaS0qIHRlcm1pbmZvIGVudHJpZXMgZnJvbSBFU1IncyB2ZXJzaW9uLgorCSsgYWRkIC1hIG9wdGlvbiB0byB0aWMgYW5kIGluZm9jbXAsIHdoaWNoIHJldGFpbnMgY29tbWVudGVkLW91dAorCSAgY2FwYWJpbGl0aWVzIGR1cmluZyBzb3VyY2UgdHJhbnNsYXRpb24vY29tcGFyaXNvbiwgZS5nLiwgY2FwdG9pbmZvCisJICBhbmQgaW5mb3RvY2FwLgorCSsgbW9kaWZ5IGNhcmRmaWxlLmMgdG8gZGlzcGxheSBhbiBlbXB0eSBjYXJkIGlmIG5vIGlucHV0IGRhdGEgZmlsZSBpcworCSAgZm91bmQsIGZpeGVzIGEgY29yZSBkdW1wIGluIHRoYXQgY2FzZSAocmVwb3J0ZWQgYnkgQnJ1bm8gSGFpYmxlKS4KKwkrIGNvcnJlY3QgYnJhY2tldGluZyBpbiBDRl9NQVRIX0xJQiBjb25maWd1cmUgbWFjcm8sIHdoaWNoIGdhdmUgd3JvbmcKKwkgIHJlc3VsdCBmb3IgT1MvMiBFTVguCisJKyBzdXBwbHkgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciBfbmNfcmVzb2x2ZV91c2VzKCkgY2FsbCBpbgorCSAgcmVhZF90ZXJtY2FwLmMsIG92ZXJsb29rZWQgaW4gMjAwMDAzMTEgKHJlcG9ydGVkIGJ5IFRvZGQgQyBNaWxsZXIpLgorCT4gcGF0Y2hlcyBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBpbG9nLmZyPjoKKwkrIGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcgaW4gZnR5X2VudW0uYworCSsgY29ycmVjdCBMSUJfUFJFRklYIGV4cHJlc3Npb24gZm9yIERFUFNfQ1VSU0VTIGluIHByb2dzLCB0YWNrCisJICBtYWtlZmlsZXMsIHdoaWNoIHJlc3VsdGVkIGluIHJlZHVuZGFudCBsaW5raW5nIChjZjogMjAwMDAxMjIpLgorCisyMDAwMDMxMQorCSsgbWFrZSBpZmRlZidzIGZvciBCUk9LRU5fTElOS0VSIGNvbnNpc3RlbnQgKHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXIpLgorCSsgaW1wcm92ZWQgdGFjay9SRUFETUUgKHBhdGNoIGJ5IERhbmllbCBXZWF2ZXIpLgorCSsgbW9kaWZ5IHRwdXQuYyB0byBlbnN1cmUgdGhhdCB1bnNwZWNpZmllZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8KKwkgIHRwYXJtKCkgYXMgMCdzLgorCSsgYWRkIGEgZmV3IGNoZWNrcyBpbiBpbmZvY21wIHRvIGd1YXJkIGFnYWluc3QgYnVmZmVyIG92ZXJmbG93IHdoZW4KKwkgIGRpc3BsYXlpbmcgc3RyaW5nIGNhcGFiaWxpdGllcy4KKwkrIGFkZCBjaGVjayBmb3IgemVyby11c2VzIGluIGluZm9jbXAncyBmaWxlX2NvbXBhcmlzb24oKSBmdW5jdGlvbgorCSAgYmVmb3JlIGNhbGxpbmcgX25jX2FsaWduX3Rlcm10eXBlKCkuICBPdGhlcndpc2Ugb25lIHBhcmFtZXRlciBpcworCSAgaW5kZXhlZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHVzZXMtYXJyYXkuCisJKyBhZGQgYW4gb3B0aW9uIC1xIHRvIGluZm9jbXAgdG8gc3BlY2lmeSB0aGUgbGVzcyB2ZXJib3NlIG91dHB1dCwKKwkgIGtlZXBpbmcgdGhlIGV4aXN0aW5nIGZvcm1hdCBhcyB0aGUgZGVmYXVsdCwgdGhvdWdoIG5vdCByZXRhaW5pbmcgdGhlCisJICBwcmV2aW91cyBiZWhhdmlvciB0aGF0IG1hZGUgdGhlIC1GIG9wdGlvbiBjb21wYXJlIGVhY2ggZW50cnkgdG8KKwkgIGl0c2VsZi4KKwkrIGFkYXB0ZWQgcGF0Y2ggYnkgRVNSIHRvIG1ha2UgaW5mb2NtcCAtRiBsZXNzIHZlcmJvc2UgLVRECisJICAodGhlIHN1Ym1pdHRlZCBwYXRjaCB3YXMgdW51c2FibGUgYmVjYXVzZSBpdCBkaWQgbm90IGNvbXBpbGUKKwkgIHByb3Blcmx5KQorCSAgKyBtb2RpZnkgd3JpdGVfZW50cnkuYyB0byBlbnN1cmUgdGhhdCBhYnNlbnQgb3IgY2FuY2VsbGVkIGJvb2xlYW5zCisJICAgIGFyZSB3cml0dGVuIGFzIEZBTFNFLCBmb3IgY29uc2lzdGVuY3kgd2l0aCBpbmZvY21wIHdoaWNoIG5vdworCSAgICBhc3N1bWVzIHRoaXMuICBOb3RlIHRoYXQgZm9yIHRoZSBzbWFsbC1jb3JlIGNvbmZpZ3VyYXRpb24sIHRpYworCSAgICBtYXkgbm90IHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0IGFzIGJlZm9yZS4KKwkgICsgY2hhbmdlIHNvbWUgcHJpdmF0ZSBsaWJyYXJ5IGludGVyZmFjZXMgdXNlZCBieSBpbmZvY21wLCBlLmcuLAorCSAgICBfbmNfcmVzb2x2ZV91c2VzKCkuCisJICArIGFkZCBhIGNoZWNrIGluIF9uY19pbmZvdG9jYXAoKSB0byBlbnN1cmUgdGhhdCBjbS1zdHlsZSBjYXBhYmlsaXRpZXMKKwkgICAgYWNjZXB0IG9ubHkgJWQgY29kZXMgd2hlbiBjb252ZXJ0aW5nIHRoZSBmb3JtYXQgZnJvbSB0ZXJtaW5mbyB0bworCSAgICB0ZXJtY2FwLgorCSAgKyBtb2RpZnkgRU5UUlkgc3RydWN0IHRvIHNlcGFyYXRlIHRoZSBkYXRhIGluICdwYXJlbnQnIGludG8gdGhlIG5hbWUKKwkgICAgYW5kIGxpbmsgdmFsdWVzICh0aGUgb3JpZ2luYWwgaWRlYSB0byBtZXJnZSBib3RoIGludG8gJ3BhcmVudCcgd2FzCisJICAgIG5vdCBnb29kKS4KKwkgICsgZGlzY2FyZCByZXBhaXJfYWNzYyh0dGVybSk7CisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBkcm9wIHN1cHBvcnQgZm9yIGduYXQgMy4xMAorCSsgbW92ZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgaHRtbCBmaWxlcyB1bmRlciAuL2RvYyBkaXJlY3RvcnksCisJICBhZGRpbmcgbWFrZWZpbGUgcnVsZXMgZm9yIHRoaXMgdG8gZGlzdC5taworCisyMDAwMDMwNAorCSsgY29ycmVjdCBjb25mbGljdGluZyB1c2Ugb2YgdHBhcm0oKSBpbiAyMDAwMDIyNiBjaGFuZ2UgdG8gdGljLCB3aGljaAorCSAgbWFkZSBpdCBjaGVjayBvbmx5IG9uZSBlbnRyeSBhdCBhIHRpbWUuCisJKyBmaXggZXJyb3JzIGluIG5jdXJzZXMtaW50cm8uaHRtbCBhbmQgaGFja2d1aWRlLmh0bWwgc2hvd24gYnkgRGF2ZQorCSAgUmFnZ2V0dCdzIHRpZHkuCisJKyBtYWtlIHRoZSBleGFtcGxlIGluIG5jdXJzZXMtaW50cm8uaHRtbCBkbyBzb21ldGhpbmcgcGxhdXNpYmxlLCBhbmQKKwkgIGNvcnJlY3RlZCBtaXNsZWFkaW5nIGNvbW1lbnQgKHJlcG9ydGVkIGJ5IE5laWwgWmFuZWxsYSkuCisJKyBtb2RpZnkgcG5vdXRyZWZyZXNoKCkgdG8gc2V0IG5ld3Njci0+X2xlYXZlb2sgYXMgd25vdXRyZWZyZXNoKCkgZG9lcywKKwkgIHRvIGZpeCBhIGNhc2Ugd2hlcmUgdGhlIGN1cnNvciBwb3NpdGlvbiB3YXMgbm90IHVwZGF0ZWQgYXMgaW4KKwkgIFNvbGFyaXMgIChwYXRjaCBieSBEYXZpZCBNb3NiZXJnZXIgPGRhdmlkbUBocGwuaHAuY29tPikuCisJKyBhZGQgYSBsaW1pdC1jaGVjayBmb3Igd3Jlc2l6ZSgpIHRvIGVuc3VyZSB0aGF0IGEgc3Vid2luZG93IGRvZXMgbm90CisJICBhZGRyZXNzIG91dCBvZiBib3VuZHMuCisJKyBjb3JyZWN0IG9mZnNldHMgdXNlZCBmb3Igc3Vid2luZG93cyBpbiB3cmVzaXplKCkgKHBhdGNoIGJ5IE1pY2hhZWwKKwkgIEFuZHJlcyA8bWFAc3VzZS5kZT4pLgorCSsgcmVnZW5lcmF0ZSBodG1sJ2l6ZWQgbWFudWFsIHBhZ2VzIHdpdGggbWFuMmh0bWwgMy4wLjEgKHBhdGNoIGJ5CisJICBKdWVyZ2VuIFBmZWlmZXIpLiAgVGhpcyBnZW5lcmF0ZWQgYSBmaWxlIHdpdGggYSBzcGFjZSBpbiBpdHMgbmFtZSwKKwkgIHdoaWNoIEkgcmVtb3ZlZC4KKwkrIGZpeCBhIGZldyBzcGVsbGluZyBlcnJvcnMgaW4gdGFjay4KKwkrIG1vZGlmeSB0YWNrL01ha2VmaWxlLmluIHRvIG1hdGNoIGxpbmtlciBvcHRpb25zIG9mIHByb2dzL01ha2VmaWxlLmluOworCSAgb3RoZXJ3aXNlIGl0IGRvZXMgbm90IGJ1aWxkIHByb3Blcmx5IGZvciBvbGRlciBIUFVYIHNoYXJlZCBsaWJyYXJ5CisJICBjb25maWd1cmF0aW9ucy4KKwkrIGFkZCBzZXZlcmFsIHRlcm1pbmZvIGVudHJpZXMgZnJvbSBlc3IncyAiMTEuMCIuCisKKzIwMDAwMjI2CisJKyBtYWtlICd0cHV0IGZsYXNoJyB3b3JrIHByb3Blcmx5IGZvciB4dGVybSBieSBmbHVzaGluZyBvdXRwdXQgaW4KKwkgIGRlbGF5X291dHB1dCgpIHdoZW4gdXNpbmcgbmFwbXMoKSwgYW5kIG1vZGlmeWluZyB4dGVybSdzIHRlcm1pbmZvIHRvCisJICBzcGVjaWZ5IG5vIHBhZGRpbmcgY2hhcmFjdGVyLiAgT3RoZXJ3aXNlLCB4dGVybSdzIHJlcG9ydGVkIGJhdWQgcmF0ZQorCSAgY2FuIG1pc2xlYWQgbmN1cnNlcyBpbnRvIHByb2R1Y2luZyB0b28gZmV3IHBhZGRpbmcgY2hhcmFjdGVycworCSAgKERlYmlhbiAjNTg1MzApLgorCSsgYWRkIGEgY2hlY2sgdG8gdGljIGZvciBjb25zaXN0ZW5jeSBiZXR3ZWVuIHNnciBhbmQgdGhlIHNlcGFyYXRlCisJICBjYXBhYmlsaXRpZXMgc3VjaCBhcyBzbXNvLCB1c2UgdGhpcyB0byBjaGVjay9jb3JyZWN0IHNldmVyYWwKKwkgIHRlcm1pbmZvIGVudHJpZXMgKERlYmlhbiAjNTg1MzApLgorCSsgYWRkIGEgY2hlY2sgdG8gdGljIGlmIGN2dmlzIGlzIHRoZSBzYW1lIGFzIGNub3JtLCBhZGp1c3RlZCBzZXZlcmFsCisJICB0ZXJtaW5mbyBlbnRyaWVzIHRvIHJlbW92ZSB0aGUgY29uZmxpY3QgKERlYmlhbiAjNTg1MzApLgorCSsgY29ycmVjdCBwcm90b3R5cGUgc2hvd24gaW4gYXR0cl9zZXQoKS93YXR0cl9zZXQoKSBtYW5wYWdlcyAoZml4ZXMKKwkgIERlYmlhbiAjNTM5NjIpLgorCSsgbWlub3IgY2xhcmlmaWNhdGlvbiBmb3IgY3Vyc19zZXQoKSBhbmQgbGVhdmVvaygpIG1hbnBhZ2VzLgorCSsgdXNlIG1rc3RlbXAoKSBmb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGZpbGUgZm9yIHRpYydzIHByb2Nlc3Npbmcgb2YKKwkgICRURVJNQ0FQIGNvbnRlbnRzIChmaXhlcyBEZWJpYW4gIzU2NDY1KS4KKwkrIGNvcnJlY3QgdHdvIGVycm9ycyBmcm9tIGludGVncmF0aW5nIEFsZXhhbmRlcidzIGNoYW5nZXM6ICBkaWQgbm90CisJICBoYW5kbGUgdGhlIG5vbi1iY2UgY2FzZSBwcm9wZXJseSBpbiBjYW5fZXJhc2Vfd2l0aCgpIChub3RlZCBieQorCSAgQWxleGFuZGVyKSwgYW5kIGxlZnQgZmcvYmcgdW5pbml0aWFsaXplZCBpbiB0aGUgcGFpci16ZXJvIGNhc2Ugb2YKKwkgIF9uY19kb19jb2xvcigpIChyZXBvcnRlZCBieSBEciBXZXJuZXIgRmluayA8d2VybmVyQHN1c2UuZGU+IGFuZAorCSAgSXNtYWVsIENvcmRlaXJvIDxpc21hZWxAY29yZGVpcm8uY29tPikuCisKKzIwMDAwMjE5CisJKyBzdG9yZSBkZWZhdWx0LWNvbG9yIGNvZGUgY29uc2lzdGVudGx5IGFzIENfTUFTSywgZXZlbiBpZiBnaXZlbiBhcworCSAgLTEgZm9yIGNvbnZlbmllbmNlIChhZGFwdGVkIGZyb20gcGF0Y2hlcyBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92OgorCSsgY2hhbmdlIGNhbl9jbGVhcl93aXRoKCkgbWFjcm8gdG8gYWNjb21tb2RhdGUgbG9naWMgZm9yCisJICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSwgbWFraW5nIG1vc3Qgb2YgdGhlIEZJTExfQkNFIGxvZ2ljCisJICB1bm5lY2Vzc2FyeS4gIE1hZGUgY2FuX2NsZWFyX3dpdGgoKSBhbiBpbmxpbmUgZnVuY3Rpb24gdG8gbWFrZSBpdAorCSAgc2ltcGxlciB0byByZWFkLgorCisyMDAwMDIxMgorCSsgY29ycmVjdGVkIGZvcm0gb2YgcmVjZW50IGNvcHlyaWdodCBkYXRlcy4KKwkrIG1pbm9yIGNvcnJlY3Rpb25zIHRvIHh0ZXJtLXhmODYtdjMzMyB0ZXJtaW5mbyBlbnRyeSAtVEQKKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYgTHVreWFub3Y6CisJKyByZXdvcmRlZCBkZnRfZmdiZy4zeCB0byBhdm9pZCBhc3N1bWluZyB0aGF0IHRoZSB0ZXJtaW5hbCdzIGRlZmF1bHQKKwkgIGNvbG9ycyBhcmUgd2hpdGUgb24gYmxhY2suCisJKyBmaXggaW5pdGlhbGl6YXRpb24gb2YgdHN0TGluZSBzbyB0aGF0IGl0IGlzIGZpbGxlZCB3aXRoIGN1cnJlbnQgYmxhbmsKKwkgIGNoYXJhY3RlciBpbiBhbnkgY2FzZS4gIFByZXZpb3VzbHkgaXQgd2FzIHBvc3NpYmxlIHRvIGhhdmUgaXQgZmlsbGVkCisJICB3aXRoIG9sZCBibGFuay4gIFRoZSB3cm9uZyBvdmVyLW9wdGltaXphdGlvbiB3YXMgaW50cm9kdWNlZCBpbiA5OTEwMDIKKwkgIHBhdGNoLiAgKGl0IGlzIG5vdCB2ZXJ5IGNyaXRpY2FsIGFzIHRoZSBvbmx5IGJhZCBlZmZlY3QgaXMgbm90IHVzaW5nCisJICBjbHJfZW9zIGZvciBjbGVhcmluZyBpZiBibGFuayBoYXMgY2hhbmdlZCkuCisKKzIwMDAwMjA1CisJKyBtaW5vciBjb3JyZWN0aW9ucy91cGRhdGVzIHRvIHNldmVyYWwgdGVybWluZm8gZW50cmllczogcnh2dC1iYXNpYywKKwkgIHZ0NTIwLCB2dDUyNSwgaWJtNTE1MSwgeHRlcm0teGY4Ni12NDAgLVRECisJKyBtb2RpZnkgaWZkZWYncyBmb3IgcG9sbCgpIHRvIGFsbG93IGl0IHRvIHVzZSA8c3lzL3BvbGwuaD4sIHRoZXJlYnkKKwkgIGFsbG93aW5nIHBvbGwoKSB0byBiZSB1c2VkIG9uIExpbnV4LgorCSsgYWRkIENGX0ZVTkNfUE9MTCBtYWNybyB0byBjaGVjayBpZiBwb2xsKCkgaXMgYWJsZSB0byBzZWxlY3QgZnJvbQorCSAgc3RhbmRhcmQgaW5wdXQuICBJZiBub3Qgd2Ugd2lsbCBub3QgdXNlIGl0LCBwcmVmZXJyaW5nIHNlbGVjdCgpCisJICAoYWRhcHRlZCBmcm9tIHBhdGNoIGJ5IE1pY2hhZWwgUGFrb3ZpYyA8bXBha292aWNAZmRuLmNvbT4pLgorCSsgdXBkYXRlIENGX1NIQVJFRF9PUFRTIG1hY3JvIGZvciBTQ08gVW5peHdhcmUgNy4xIHRvIGFsbG93IGJ1aWxkaW5nCisJICBzaGFyZWQgbGlicmFyaWVzIChyZXBvcnRlZC90ZXN0ZWQgYnkgVGhhbmggPHRoYW5obWFAbWVkaWFvbmUubmV0PikuCisJKyBvdmVycmlkZSAkTEFOR1VBR0UgaW4gYnVpbGQgdG8gYXZvaWQgaW5jb3JyZWN0IG9yZGVyaW5nIG9mIGtleW5hbWVzLgorCSsgY29ycmVjdCBDRl9NQVRIX0xJQiBwYXJhbWV0ZXIsIG11c3QgYmUgc2luKHgpLCBub3Qgc3FydCh4KS4KKworMjAwMDAxMjIKKwkrIHJlc3luYyBDRl9DSEVDS19FUlJOTyBhbmQgQ0ZfTElCX1BSRUZJWCBtYWNyb3MgZnJvbSB0aW4gYW5kIHh0ZXJtIC1URAorCSsgbW9kaWZ5IENGX01BVEhfTElCIGNvbmZpZ3VyZSBtYWNybyB0byBwYXJhbWV0ZXJpemUgdGhlIHRlc3QgZnVuY3Rpb24KKwkgIHVzZWQsIGZvciByZXVzZSBpbiBkaWFsb2cgYW5kIHNpbWlsYXIgcGFja2FnZXMuCisJKyBjb3JyZWN0IHRlc3RzIGZvciBmaWxlLWRlc2NyaXB0b3JzIGluIE9TLzIgRU1YIG1vdXNlIHN1cHBvcnQuICBBCisJICBuZWdhdGl2ZSB2YWx1ZSBjb3VsZCBiZSB1c2VkIGJ5IEZEX1NFVCwgY2F1c2luZyB0aGUgc2VsZWN0KCkgY2FsbAorCSAgdG8gd2FpdCBpbmRlZmluaXRlbHkuCisKKzIwMDAwMTE1CisJKyBhZGRpdGlvbmFsIGZpeGVzIGZvciBub24tYmNlIHRlcm1pbmFscyAoaGFuZGxpbmcgb2YgZGVsZXRlX2NoYXJhY3RlcikKKwkgIHRvIHdvcmsgd2hlbiBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSBpcyBub3Qgc3BlY2lmaWVkLgorCSsgbW9kaWZ5IHdhcm5pbmcgbWVzc2FnZSBmcm9tIF9uY19wYXJzZV9lbnRyeSgpIHJlZ2FyZGluZyBleHRlbmRlZAorCSAgY2FwYWJpbGl0eSBuYW1lcyB0byBwcmludCBvbmx5IGlmIHRpYy9pbmZvY21wL3RvZSBoYXZlIHRoZSAtdiBmbGFnCisJICBzZXQsIGFuZCBub3QgYXQgYWxsIGluIG9yZGluYXJ5IHVzZXIgYXBwbGljYXRpb25zLiAgT3RoZXJ3aXNlLCB0aGlzCisJICB3YXJuaW5nIHdvdWxkIGJlIHNob3duIGZvciBzY3JlZW4ncyBleHRlbmRlZCBjYXBhYmlsaXRpZXMgaW4gcHJvZ3JhbXMKKwkgIHRoYXQgdXNlIHRoZSB0ZXJtY2FwIGludGVyZmFjZSAocmVwb3J0ZWQgYnkgVG9kZCBDIE1pbGxlcikuCisJKyBtb2RpZnkgdXNlIG9mIF9uY190cmFjaW5nIGZyb20gcHJvZ3JhbXMgc3VjaCBhcyB0aWMgc28gdGhlaXIgZGVidWcKKwkgIGxldmVsIGlzIG5vdCBpbiB0aGUgc2FtZSByYW5nZSBhcyB2YWx1ZXMgc2V0IGJ5IHRyYWNlKCkgZnVuY3Rpb24uCisJKyBzbWFsbCBwYW5lbCBoZWFkZXIgY2xlYW51cCAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGFkZCAncmFpbHJvYWQnIGRlbW8gZm9yIHRlcm1jYXAgaW50ZXJmYWNlLgorCSsgbW9kaWZ5ICd0aWMnIHRvIHdyaXRlIGl0cyB1c2FnZSBtZXNzYWdlIHRvIHN0ZGVyciAocGF0Y2ggYnkgVG9kZCBDCisJICBNaWxsZXIpLgorCisyMDAwMDEwOAorCSsgYWRkIHByb3RvdHlwZSBmb3IgZXJhc2UoKSB0byBjdXJzZXMuaC5pbiwgbmVlZGVkIHRvIG1ha2UgdGVzdAorCSAgcHJvZ3JhbXMgYnVpbGQgd2l0aCBjKysvZysrLgorCSsgYWRkIC5jLmkgYW5kIC5jLmggc3VmZml4IHJ1bGVzIHRvIGdlbmVyYXRlZCBtYWtlZmlsZXMsIGZvciBkZWJ1Z2dpbmcuCisJKyBjb3JyZWN0IGluc3RhbGwgcnVsZSBmb3IgdGFjay4xOyBpdCBhc3N1bWVkIHRoYXQgZmlsZSB3YXMgaW4gdGhlCisJICBjdXJyZW50IGRpcmVjdG9yeSAocmVwb3J0ZWQgYnkgTWlrZSBDYXN0bGUgPGRhbGdvZGFAaXgubmV0Y29tLmNvbT4pLgorCSsgbW9kaWZ5IHRlcm1pbmZvL3Rlcm1jYXAgdHJhbnNsYXRpb24gdG8gc3VwcHJlc3MgYWNzYyBiZWZvcmUgdHJ5aW5nCisJICBzZ3IgaWYgdGhlIGVudHJ5IHdvdWxkIGJlIHRvbyBsYXJnZSAocGF0Y2ggYnkgVG9kZCBDIE1pbGxlcikuCisJKyBkb2N1bWVudCBhIHNwZWNpYWwgY2FzZSBvZiBpbmNvbXBhdGlibGl0eSBiZXR3ZWVuIG5jdXJzZXMgNC4yIGFuZAorCSAgNS4wLCBhZGQgYSBzZWN0aW9uIGZvciB0aGlzIGluIElOU1RBTEwuCisJKyBhZGQgVFJBQ0VfREFUQUJBU0UgZmxhZyBmb3IgdHJhY2UoKS4KKworMjAwMDAxMDEKKwkrIHVwZGF0ZSBtYWNoLCBhZGQgbWFjaC1jb2xvciB0ZXJtaW5mbyBlbnRyaWVzIGJhc2VkIG9uIERlYmlhbiBkaWZmcworCSAgZm9yIG5jdXJzZXMgNS4wIC1URAorCSsgYWRkIGVudHJpZXMgZm9yIHh0ZXJtLWhwLCB4dGVybS12dDIyMCwgeHRlcm0tdnQ1MiBhbmQgeHRlcm0tbm9hcHAKKwkgIHRlcm1pbmZvIGVudHJpZXMgLVRECisJKyBjaGFuZ2UgT1RycyBjYXBhYmlsaXRpZXMgdG8gcnMyIGluIHRlcm1pbmZvLnNyYyAtVEQKKwkrIGFkZCBvYnNvbGV0ZSBhbmQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIHRvICdzY3JlZW4nIHRlcm1pbmZvIC1URAorCSsgY29ycmVjdGVkIGNvbnZlcnNpb24gZnJvbSB0ZXJtaW5mbyByczIgdG8gdGVybWNhcCBycyAoY2Y6IDk4MDcwNCkKKwkrIG1ha2UgY29udmVyc2lvbiB0byB0ZXJtY2FwIHVnICh1bmRlcmxpbmUgZ2xpdGNoKSBtb3JlIGNvbnNpc3RlbnRseQorCSAgYXBwbGllZC4KKwkrIGZpeCBvdXQtb2Ytc2NvcGUgdXNlIG9mICdwZXJzb25hbFtdJyBidWZmZXIgaW4gJ3RvZScgKHRoaXMgZXJyb3IKKwkgIHdhcyBpbiB0aGUgb3JpZ2luYWwgcHJlLTEuOS43IHZlcnNpb24sIHdoZW4gJEhPTUUvLnRlcm1pbmZvIHdhcworCSAgaW50cm9kdWNlZCkuCisJKyBtb2RpZnkgJ3RvZScgdG8gaWdub3JlIHRlcm1pbmZvIGRpcmVjdG9yaWVzIHRvIHdoaWNoIGl0IGhhcyBubworCSAgcGVybWlzc2lvbnMuCisJKyBtb2RpZnkgcmVhZF90ZXJtdHlwZSgpLCBmaXhpbmcgJ3RvZScsIHdoaWNoIGNvdWxkIGR1bXAgY29yZSB3aGVuIGl0CisJICBmb3VuZCBhbiBpbmNvbXBsZXRlIGVudHJ5IHN1Y2ggYXMgImR1bWIiIGJlY2F1c2UgaXQgZGlkIG5vdAorCSAgaW5pdGlhbGl6ZSBpdHMgYnVmZmVyIGZvciBfbmNfcmVhZF9maWxlX2VudHJ5KCkuCisJKyB1c2UgLWZQSUMgcmF0aGVyIHRoYW4gLWZwaWMgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gTGludXgsIG5vdAorCSAgbmVlZGVkIGZvciBpMzg2IGJ1dCBzb21lIHBvcnRzIChmcm9tIERlYmlhbiBkaWZmcyBmb3IgNS4wKSAtVEQKKwkrIHVzZSBleHBsaWNpdCBWQUxJRF9OVU1FUklDKCkgY2hlY2tzIGluIGEgZmV3IHBsYWNlcyB0aGF0IGhhZCBiZWVuCisJICBvdmVybG9va2VkLCBhbmQgYWRkIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgaW5pdF90YWJzIGlzIG5vbnplcm8sCisJICB0byBhdm9pZCBkaXZpZGUtYnktemVybyAocmVwb3J0ZWQgYnkgVG9kZCBDIE1pbGxlcikuCisJKyBtaW5vciBmaXggZm9yIENGX0FOU0lfQ0NfQ0hFQ0sgY29uZmlndXJlIG1hY3JvLCBmb3IgSFBVWCAxMC54IChmcm9tCisJICB0aW4pIC1URAorCisxOTk5MTIxOAorCSsgcmVvcmRlciB0ZXN0cyBkdXJpbmcgbW91c2UgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgZm9yIGdwbSB0byBydW4gaW4KKwkgIHh0ZXJtLCBvciBmb3IgeHRlcm0gdG8gYmUgdXNlZCB1bmRlciBPUy8yIEVNWC4gIEFsc28gZHJvcCB0ZXN0IGZvcgorCSAgJERJU1BMQVkgaW4gZmF2b3Igb2Yga21vdXM9XEVbTSBvciAkVEVSTSBjb250YWluaW5nICJ4dGVybSIgKHJlcG9ydAorCSAgYnkgQ2hyaXN0aWFuIFdlaXNnZXJiZXIgPG5hZGR5QG1pcHMucmhlaW4tbmVja2FyLmRlPikuCisJKyBtb2RpZnkgcmF3KCkgYW5kIG5vcmF3KCkgdG8gY2xlYXIvcmVzdG9yZSBJRVhURU4gZmxhZyB3aGljaCBhZmZlY3RzCisJICBzdHR5IGxuZXh0IG9uIHN5c3RlbXMgc3VjaCBhcyBGcmVlQlNEIChyZXBvcnQgYnkgQnJ1Y2UgRXZhbnMKKwkgIDxiZGVAemV0YS5vcmcuYXU+LCB2aWEgSmFzb24gRXZhbnMgPGphc29uZUBjYW5vbndhcmUuY29tPikuCisJKyBmaXggYSBwb3RlbnRpYWwgKGJ1dCB1bmxpa2VseSkgYnVmZmVyIG92ZXJmbG93IGluIGZhaWxlZCgpIGZ1bmN0aW9uCisJICBvZiB0c2V0LmMgKHJlcG9ydGVkIGJ5IFRvZGQgQyBNaWxsZXIpLgorCSsgYWRkIG1hbnVhbC1wYWdlIGZvciBuY3Vyc2VzIGV4dGVuc2lvbnMsIGRvY3VtZW50ZWQgY3Vyc2VzX3ZlcnNpb24oKSwKKwkgIHVzZV9leHRlbmRlZF9uYW1lcygpLgorCisxOTk5MTIxMQorCSsgdHJlYXQgYXMgdW50cmFuc2xhdGFibGUgdG8gdGVybWNhcCB0aG9zZSB0ZXJtaW5mbyBzdHJpbmdzIHdoaWNoCisJICBjb250YWluIG5vbi1kZWNpbWFsIGZvcm1hdHRpbmcsIGUuZy4sIGhleGFkZWNpbWFsIG9yIG9jdGFsLgorCSsgY29ycmVjdCBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcyB0aGF0IGNhbm5vdCBiZSB0cmFuc2xhdGVkIHRvCisJICB0ZXJtY2FwLCB3aGljaCBkaWQgbm90IGNoZWNrIGlmIGEgY29sb24gbXVzdCBiZSBlc2NhcGVkLgorCSsgY29ycmVjdCB0ZXJtY2FwIHRyYW5zbGF0aW9uIGZvciAiJT4iIGFuZCAiJSsiLCB3aGljaCBkaWQgbm90IGNoZWNrCisJICBpZiBhIGNvbG9uIG11c3QgYmUgZXNjYXBlZCwgZm9yIGluc3RhbmNlLgorCSsgdXNlIHNhdmVfc3RyaW5nL3NhdmVfY2hhciBmb3IgX25jX2NhcHRvaW5mbygpIHRvIGVsaW1pbmF0ZSBmaXhlZAorCSAgYnVmZmVyIChvcmlnaW5hbGx5IGZvciBfbmNfaW5mb3RvY2FwKCkgaW4gOTYwMzAxIC1URCkuCisJKyBjb3JyZWN0IGV4cHJlc3Npb24gdXNlZCBmb3IgdGVybWluZm8gZXF1aXZhbGVudCBvZiB0ZXJtY2FwICVCLAorCSAgYWRqdXN0IHJlZ2VudDEwMCBlbnRyeSB3aGljaCB1c2VzIHRoaXMuCisJKyBzb21lIGNsZWFudXAgYW5kIGNvbW1lbnRpbmcgb2YgYWQgaG9jIGNhc2VzIGluIF9uY19pbmZvdG9jYXAoKS4KKwkrIGVsaW1pbmF0ZSBhIGZpeGVkLWJ1ZmZlciBpbiB0aWMsIHVzZWQgZm9yIHRyYW5zbGF0aW5nIGNvbW1lbnRzLgorCSsgYWRkIG1hbnBhZ2UgZm9yIGluZm90b2NhcAorCisxOTk5MTIwNAorCSsgYWRkIGt2dCBhbmQgZ25vbWUgdGVybWluZm8gZW50cmllcyAtVEQKKwkrIGNvcnJlY3QgdHJhbnNsYXRpb24gb2YgIiUlIiBieSBpbmZvdG9jYXAsIHdoaWNoIHdhcyBlbWl0dGVkIGFzICIlIi4KKwkrIGFkZCAib2Jzb2xldGUiIHRlcm1jYXAgc3RyaW5ncyB0byB0ZXJtaW5mby5zcmMKKwkrIG1vZGlmeSBpbmZvY21wIHRvIGRlZmF1bHQgdG8gc2hvd2luZyBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgcmF0aGVyCisJICB0aGFuIHRlcm1pbmZvIG9ubHkuCisJKyBtb2RpZnkgd3JpdGVfZW50cnkuYyBzbyB0aGF0IGlmIGV4dGVuZGVkIG5hbWVzIChpLmUuLCBjb25maWd1cmUKKwkgIC0tZW5hYmxlLXRjYXAtbmFtZXMpIGFyZSBhY3RpdmUsIHRoZW4gdGljIHdpbGwgYWxzbyB3cml0ZSAib2Jzb2xldGUiCisJICBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgdGVybWluZm8gc291cmNlLgorCSsgbW9kaWZ5IHRpYyBzbyB0aGF0IHdoZW4gcnVubmluZyBhcyBjYXB0b2luZm8gb3IgaW5mb3RvY2FwLCBpdAorCSAgaW5pdGlhbGl6ZXMgdGhlIG91dHB1dCBmb3JtYXQgYXMgaW4gLUMgYW5kIC1JIG9wdGlvbnMsIHJlc3BlY3RpdmVseS4KKwkrIGltcHJvdmUgaW5mb2NtcCBhbmQgdGljIC1mIG9wdGlvbiBieSBzcGxpdHRpbmcgbG9uZyBzdHJpbmdzIHRoYXQgZG8KKwkgIG5vdCBoYXZlIGlmLXRoZW4tZWxzZSBjb25zdHJ1Y3QsIGJ1dCBkbyBoYXZlIHBhcmFtZXRlcnMsIGUuZy4sIHRoZQorCSAgaW5pdGMgZm9yIHh0ZXJtLTg4Y29sb3IuCisJKyByZWZpbmUgTUt0ZXJtc29ydC5zaCBzbGlnaHRseSBieSB1c2luZyBib29sIGZvciB0aGUgKl9mcm9tX3Rlcm1jYXAKKwkgIGFycmF5cy4KKworMTk5OTExMjcKKwkrIGFkZGl0aW9uYWwgZml4ZXMgZm9yIG5vbi1iY2UgdGVybWluYWxzIChoYW5kbGluZyBvZiBjbGVhcl9zY3JlZW4sCisJICBjbHJfZW9sLCBjbHJfZW9zLCBzY3JvbGxpbmcpIHRvIHdvcmsgd2hlbiBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSBpcworCSAgbm90IHNwZWNpZmllZC4KKwkrIHNldmVyYWwgc21hbGwgY2hhbmdlcyB0byB4dGVybSB0ZXJtaW5mbyBlbnRyaWVzIC1URC4KKwkrIG1vdmUgbG9naWMgZm9yIF9uY193aW5kb3dzIGluIGxpYl9mcmVlYWxsLmMgaW5zaWRlIGNoZWNrIGZvciBub25udWxsCisJICBTUCwgc2luY2UgaXQgaXMgcGFydCBvZiB0aGF0IHN0cnVjdC4KKwkrIHJlbW92ZSBvYnNvbGV0ZSBzaGxpYi12ZXJzaW9ucywgd2hpY2ggd2FzIHVuaW50ZW50aW9uYWxseSByZS1hZGRlZAorCSAgaW4gOTcwOTI3LgorCSsgbW9kaWZ5IGluZm9jbXAgLWUsIC1FIG9wdGlvbnMgdG8gZW5zdXJlIHRoYXQgZ2VuZXJhdGVkIGZhbGxiYWNrLmMKKwkgIHR5cGUgZm9yIEJvb2xlYW5zIGFncmVlcyB3aXRoIHRlcm0uaCAocmVwb3J0ZWQgYnkgRXJpYyBOb3J1bQorCSAgPGVyaWNAY2xzLnVzYXNrLmNhPikuCisJKyBjb3JyZWN0IGNvbmZpZ3VyZSBzY3JpcHQncyB1c2Ugb2YgJExJQl9QUkVGSVgsIHdoaWNoIGRpZCBub3Qgd29yaworCSAgZm9yIGluc3RhbGxpbmcgdGhlIGMrKyBkaXJlY3RvcnkgaWYgJGxpYmRpciBkaWQgbm90IGVuZCB3aXRoICIvbGliIgorCSAgKHJlcG9ydGVkIGJ5IEh1eSBMZSA8aHV5bGVAdWdjcy5jYWx0ZWNoLmVkdT4pLgorCSsgbW9kaWZ5IGluZm9jbXAgc28gLUwgYW5kIC1mIG9wdGlvbnMgd29yayB0b2dldGhlci4KKwkrIG1vZGlmeSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgU1AtPl9jb2xvcl90YWJsZVtdIGluIHN0YXJ0X2NvbG9yKCkgc28KKwkgIHRoYXQgY29sb3JfY29udGVudCgpIHdpbGwgcmV0dXJuIHVzYWJsZSB2YWx1ZXMgZm9yIENPTE9SUyBncmVhdGVyCisJICB0aGFuIDguCisJKyBtb2RpZnkgbmN1cnNlcyAnZCcgdGVzdCBpbiBjYXNlIENPTE9SUyBpcyBncmVhdGVyIHRoYW4gMTYsIGUuZy4sIGZvcgorCSAgeHRlcm0tODhjb2xvciwgdG8gbGltaXQgdGhlIGRpc3BsYXllZC9jb21wdXRlZCBjb2xvcnMgdG8gMTYuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBzaW1wbGlmeSBjb2Rpbmcgb2YgdGhlIHBhbmVsIGxpYnJhcnkgYWNjb3JkaW5nIHRvIHN1Z2dlc3Rpb25zIGJ5CisJICBQaGlsaXBwZSBCbGFpbi4KKwkrIGltcHJvdmUgbWFjcm8gY29kaW5nIGZvciBhIGZldyBtYWNyb3MgaW4gY3Vyc2VzLnByaXYuaAorCisxOTk5MTExMworCSsgbW9kaWZ5IHRyZWF0bWVudCBvZiBjb2xvciBwYWlyIDAgc28gdGhhdCBpZiBuY3Vyc2VzIGlzIGNvbmZpZ3VyZWQKKwkgIHRvIHN1cHBvcnQgZGVmYXVsdCBjb2xvcnMsIGFuZCB0aGV5IGFyZSBub3QgYWN0aXZlLCB0aGVuIG5jdXJzZXMKKwkgIHdpbGwgc2V0IHRoYXQgZXhwbGljaXRseSwgbm90IHJlbHlpbmcgb24gb3JpZ19jb2xvcnMgb3Igb3JpZ19wYWlyLgorCSsgYWRkIG5ldyBleHRlbnNpb24sIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpIHRvIHByb3ZpZGUgYmV0dGVyIGNvbnRyb2wKKwkgIG92ZXIgdGhlIHVzZSBvZiBkZWZhdWx0IGNvbG9ycy4KKwkrIG1vZGlmeSB0ZXN0IHByb2dyYW1zIHRvIHVzZSBtb3JlLXNwZWNpZmljIGlmZGVmJ3MgZm9yIGV4aXN0ZW5jZSBvZgorCSAgd3Jlc2l6ZSgpLCByZXNpemV0ZXJtKCkgYW5kIHVzZV9kZWZhdWx0X2NvbG9ycygpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYWRkIHNwZWNpZmljIGlmZGVmJ3MgZm9yIHNvbWUgZnVuY3Rpb25zCisJICB0aGF0IGFyZSBpbmNsdWRlZCB3aGVuIC0tZW5hYmxlLWV4dC1mdW5jcyBpcyBpbiBlZmZlY3QsIHNvIHRoZWlyCisJICBleGlzdGVuY2UgY2FuIGJlIGlmZGVmJ2QgaW4gdGhlIHRlc3QgcHJvZ3JhbXMuCisJKyByZW9yZGVyIHNvbWUgY29uZmlndXJlIG9wdGlvbnMsIG1vdmluZyB0aG9zZSBleHRlbnNpb25zIHRoYXQgaGF2ZQorCSAgZXZvbHZlZCBmcm9tIGV4cGVyaW1lbnRhbCBzdGF0dXMgaW50byBhIG5ldyBzZWN0aW9uLgorCSsgY2hhbmdlIGNvbmZpZ3VyZSAtLWVuYWJsZS10Y2FwLW5hbWVzIHRvIGVuYWJsZSB0aGlzIGJ5IGRlZmF1bHQuCisKKzE5OTkxMTA2CisJKyBpbnN0YWxsIHRhY2sncyBtYW5wYWdlIChyZXBvcnRlZCBieSBSb2JlcnQgV2VpbmVyCisJICA8cm9iZXJ0QHByb2dwbHVzLmNvbT4pCisJKyBjb3JyZWN0IHdvcm0uYydzIGhhbmRsaW5nIG9mIEtFWV9SRVNJWkUgKHBhdGNoIGJ5IEZyYW5rIEhlY2tlbmJhY2gpLgorCSsgbW9kaWZ5IGN1cnNlcy5oLmluLCB1bmRlZidpbmcgc29tZSBzeW1ib2xzIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggQysrCisJICBTVEwgKHJlcG9ydGVkIGJ5IE1hdHQgR2VyYXNzaW1vZmYgPG1nZXJhc0B0aWNvbi5uZXQ+KQorCisxOTk5MTAzMAorCSsgbW9kaWZ5IGxpbnV4IHRlcm1pbmZvIGVudHJ5IHRvIGluZGljYXRlIHRoYXQgZGltIGRvZXMgbm90IG1peCB3aXRoCisJICBjb2xvciAocmVwb3J0ZWQgYnkgS2xhdXMgV2VpZGUgPGt3ZWlkZUBlbnRlcmFjdC5jb20+KS4KKwkrIGNvcnJlY3Qgc2V2ZXJhbCB0eXBvcyBpbiB0ZXJtaW5mbyBlbnRyaWVzIHJlbGF0ZWQgdG8gbWlzc2luZyAnWycKKwkgIGluIENTSSdzIC1URAorCSsgZml4IHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgaW4gYysrIGJpbmRpbmcgKHJlcG9ydGVkIGJ5IFRpbQorCSAgTW9vbmV5IGZvciBhbHBoYWV2NTYtZGVjLW9zZjQuMGYKKwkrIHJlbmFtZSBwYXJhbWV0ZXIgb2YgX25jX2ZyZWVfZW50cmllcygpIHRvIGFjY29tbW9kYXRlIGxpbnQuCisJKyBjb3JyZWN0IGxpbnQgcnVsZSBmb3IgdGFjaywgdXNlZCBpbmNvcnJlY3QgbGlzdCBvZiBzb3VyY2UgZmlsZXMuCisJKyBhZGQgY2FzZSB0byBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgZm9yIFJoYXBzb2R5LgorCSsgaW1wcm92ZSBjb25maWd1cmUgdGVzdHMgZm9yIGxpYmcrKyBhbmQgbGlic3RkYysrIGJ5IG9taXR0aW5nIHRoZQorCSAgbWF0aCBsaWJyYXJ5ICh3aGljaCBpcyBtaXNzaW5nIG9uIFJoYXBzb2R5KSwgYW5kIGltcHJvdmVkIHRlc3QgZm9yCisJICB0aGUgbWF0aCBsaWJyYXJ5IGl0c2VsZiAoYWRhcHRlZCBmcm9tIHBhdGggYnkgTmVsc29uIEguIEYuIEJlZWJlKS4KKwkrIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0byB6ZXJvIHNldmVyYWwgZGF0YSBpdGVtcyB3aGljaCB3ZXJlCisJICBpbXBsaWNpdGx5IGluaXRpYWxpemVkLCBlLmcuLCBjdXJfdGVybS4gIElmIG5vdCBleHBsaWNpdGx5CisJICBpbml0aWFsaXplZCwgdGhlaXIgc3RvcmFnZSB0eXBlIGlzIEMgKGNvbW1vbiksIGFuZCBjYXVzZXMgcHJvYmxlbXMKKwkgIGxpbmtpbmcgb24gUmhhcHNvZHkgNS41IHVzaW5nIGdjYyAyLjcuMi4xIChyZXBvcnRlZCBieSBOZWxzb24gSC4gRi4KKwkgIEJlZWJlKS4KKwkrIG1vZGlmeSBBZGE5NSBiaW5kaW5nIHRvIG5vdCBpbmNsdWRlIHRoZSBsaW5rZXIgb3B0aW9uIGZvciBBZGEKKwkgIGJpbmRpbmdzIGluIHRoZSBBZGEgaGVhZGVycywgYnV0IGluIHRoZSBNYWtlZmlsZXMgaW5zdGVhZCAocGF0Y2ggYnkKKwkgIEp1ZXJnZW4gUGZlaWZlcikuCisKKzE5OTkxMDIzIDUuMCByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKwkrIGVmZmVjdGl2ZSB3aXRoIHJlbGVhc2Ugb2YgNS4wLCBjaGFuZ2UgTkNVUlNFU19WRVJTSU9OX1BBVENIIHRvCisJICA0LWRpZ2l0IHllYXIuCisJKyBhZGQgZnVuY3Rpb24gY3Vyc2VzX3ZlcnNpb24oKSwgdG8gcmV0dXJuIG5jdXJzZXMgbGlicmFyeSB2ZXJzaW9uCisJICAocmVxdWVzdCBieSBCb2IgdmFuIGRlciBQb2VsKS4KKwkrIHJlbW92ZSBybWFtLCBzbWFtIGZyb20gY3lnd2luIHRlcm1pbmZvIGVudHJ5LgorCSsgbW9kaWZ5IEZyZWVCU0QgY29uczI1IHRlcm1pbmZvIGVudHJ5IHRvIGFkZCBjbm9ybSBhbmQgY3Z2aXMsIGFzIHdlbGwKKwkgIGFzIHVwZGF0ZSBuY3YgdG8gaW5kaWNhdGUgdGhhdCAnZGltJyBjb25mbGljdHMgd2l0aCBjb2xvcnMuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byB1c2Ugc3ltYm9saWMgbGlua3MgZm9yIEZyZWVCU0Qgc2hhcmVkCisJICBsaWJyYXJpZXMgYnkgZGVmYXVsdC4KKwkrIGNvcnJlY3QgcmFuZigpIGZ1bmN0aW9uIGluIHJhaW4gYW5kIHdvcm0gcHJvZ3JhbXMgdG8gZW5zdXJlIGl0IGRvZXMKKwkgIG5vdCByZXR1cm4gMS4wCisJKyBoaWRlIHRoZSBjdXJzb3IgaW4gaGFub2kuYyBpZiBpdCBpcyBydW5uaW5nIGF1dG9tYXRpY2FsbHkuCisJKyBhbWVuZCBscnRlc3QuYyB0byBhY2NvdW50IGZvciBvcHRpbWl6YXRpb25zIHRoYXQgZXhwbG9pdCBtYXJnaW4KKwkgIHdyYXBwaW5nLgorCSsgYWRkIGEgc2ltcGxlIHRlcm1pbmZvIGRlbW8sIGRvdHMuYworCSsgbW9kaWZ5IFNJR0lOVC9TSUdRVUlUIGhhbmRsZXIgdG8gc2V0IGEgZmxhZyB1c2VkIGluIF9uY19vdXRjaCgpIHRvCisJICB0ZWxsIGl0IHRvIHVzZSB3cml0ZSgpIHJhdGhlciB0aGFuIHB1dGMoKSwgc2luY2UgdGhlIGxhdHRlciBpcyBub3QKKwkgIHNhZmUgaW4gYSBzaWduYWwgaGFuZGxlciBhY2NvcmRpbmcgdG8gUE9TSVguCisJKyBhZGQvdXNlIGludGVybmFsIG1hY3JvcyBfbmNfZmx1c2goKSBhbmQgTkNfT1VUUFVUIHRvIGhpZGUgZGV0YWlscworCSAgb2Ygb3V0cHV0LWZpbGUgcG9pbnRlciBpbiBuY3Vyc2VzIGxpYnJhcnkuCisJKyB1bmNvbW1lbnQgQ0NfU0hBUkVEX09QVFMgKHNlZSA5NzExMTUpLCBzaW5jZSB0aGV5IGFyZSBuZWVkZWQgZm9yIFNDTworCSAgT3BlblNlcnZlci4KKwkrIGNvcnJlY3QgQ0NfU0hBUkVEX09QVFMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgZm9yIFNDTworCSAgT3BlblNlcnZlci4KKwkrIHJlbW92ZSB1c2xlZXAoKSBmcm9tIGFsdGVybmF0aXZlcyBpbiBuYXBtcygpLCBzaW5jZSBpdCBtYXkgaW50ZXJhY3QKKwkgIHdpdGggYWxhcm0oKSwgY2F1c2luZyBhIHByb2Nlc3MgdG8gYmUgaW50ZXJydXB0ZWQgYnkgU0lHQUxSTSAod2l0aAorCSAgYWR2aWNlIGZyb20gQmVsYSBMdWJraW4pLgorCSsgbW9kaWZ5IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00IHRvIGJ1aWxkL3dvcmsgd2l0aAorCSAgR05BVCAzLjEwIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCSsgcmVtb3ZlIHBhcnQgb2YgQ0ZfR1BQX0xJQlJBUlkgY29uZmlndXJlLXNjcmlwdCBtYWNybywgd2hpY2ggZGlkIG5vdAorCSAgd29yayB3aXRoIGdjYyAyLjcuMi4zCisJKyBtaW5vciBmaXggdG8gdGVzdC90Y2xvY2suYyB0byBhdm9pZCBiZWVwaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBzZWNvbmQKKwkrIGFkZCAncycgYW5kICcgJyBkZWNvZGluZyB0byB0ZXN0L3JhaW4uYworCis5OTEwMTYJcHJlLXJlbGVhc2UKKwkrIGNvcnJlY3RlZCBCZU9TIGNvZGUgZm9yIGxpYl90d2FpdC5jLCBtYWtpbmcgbm9kZWxheSgpIGZ1bmN0aW9uIHdvcmsuCisKKzk5MTAwOQlwcmUtcmVsZWFzZQorCSsgY29ycmVjdCBuY3Vyc2VzJyB2YWx1ZSBmb3IgY3Vyc29yLWNvbHVtbiBpbiBQdXRDaGFyTFIoKSwgd2hpY2ggd2FzCisJICBvZmYtYnktb25lIGluIG9uZSBjYXNlIChwYXRjaCBieSBJbHlhIFpha2hhcmV2aWNoKS4KKwkrIGZpeCBzb21lIG1pbm9yIGVycm9ycyBpbiBwb3NpdGlvbl9jaGVjaygpIGRlYnVnZ2luZyBjb2RlLCBmb3VuZCB3aGlsZQorCSAgdXNpbmcgdGhpcyB0byB2YWxpZGF0ZSB0aGUgUHV0Q2hhckxSKCkgcGF0Y2guCisJKyBtb2RpZnkgZmlyZXdvcmssIGxydGVzdCwgd29ybSBleGFtcGxlcyB0byBiZSByZXNpemFibGUsIGFuZCB0bworCSAgcmVjb2duaXplICdxJyBmb3IgcXVpdCwgJ3MnIGZvciBzaW5nbGUtc3RlcCBhbmQgJyAnIGZvciByZXN1bWUuCisJKyByZXN0b3JlIHJldmVydGVkIGNoYW5nZSB0byAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMubTQsCisJICBhZGQgYSBub3RlIG9uIGJ1aWxkaW5nIHdpdGggZ25hdCAzLjEwcCB0byBBZGE5NS9UT0RPLgorCSsgYWRkIGEgY29weSBvZiB0aGUgc3RhbmRhbG9uZSBjb25maWd1cmUgc2NyaXB0IGZvciB0aGUgdGVzdC1kaXJlY3RvcnkKKwkgIHRvIHNpbXBsaWZ5IHRlc3Rpbmcgb24gU0NPIGFuZCBTb2xhcmlzLgorCis5OTEwMDIJcHJlLXJlbGVhc2UKKwkrIG1pbm9yIGZpeGVzIGZvciBfbmNfbXNlY19jb3N0KCksIGNvbG9yX2NvbnRlbnQoKSwgcGFpcl9jb250ZW50KCksCisJICBfbmNfZnJlZXdpbigpLCBDbHJCb3R0b20oKSBhbmQgb25zY3JlZW5fbXZjdXIoKSAoYW5hbHlzaXMgYnkgUGhpbGlwcGUKKwkgIEJsYWluLCBjb21tZW50cyBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBzaW1wbGlmeSBkZWZpbml0aW9uIG9mIFBBTkVMIGFuZCBlbGltaW5hdGUgaW50ZXJuYWwgZnVuY3Rpb25zCisJICBfbmNfY2FsY3VsYXRlX29ic2N1cmUoKSwgX25jX2ZyZWVfb2JzY3VyZSgpIGFuZCBfbmNfb3ZlcnJpZGUoKSwKKwkgIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIsIGFuYWx5c2lzIGJ5IFBoaWxpcHBlIEJsYWluCisJICA8YmxlZHBAdm9pbGEuZnI+KSkuCisJKyBjaGFuZ2UgcmVuYW1pbmcgb2YgZGZ0X2ZnYmcuM3ggdG8gdXNlX2RlZmF1bHRfY29sb3JzLjNuY3Vyc2VzIGluCisJICBtYW5fZGIucmVuYW1lcywgc2luY2UgRGViaWFuIGlzIG5vdCBjb25jZXJuZWQgd2l0aCAxNC1jaGFyYWN0ZXIKKwkgIGZpbGVuYW1lIGxpbWl0YXRpb24gKERlYmlhbiBidWcgcmVwb3J0IGJ5IEpvc2lwIFJvZGluCisJICA8am95QGNpYmFsaWEuZ2t2ay5ocj4pLgorCSsgY29ycmVjdGVkIHNjb2Fuc2kgdGVybWluZm8gZW50cnkgYnkgdGVzdGluZyB3aXRoIHNjb3Rlcm0gYW5kIGNvbnNvbGUuCisJKyByZXZlcnQgY2hhbmdlIGZyb20gOTkwNjE0IHRvIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00LAorCSAgc2luY2UgdGhpcyBkb2VzIG5vdCB3b3JrIGZvciBnbmF0IDMuMTBwCisJKyBtb2RpZnkgdGNsb2NrIGV4YW1wbGUgdG8gYmUgcmVzaXphYmxlIChpZiBuY3Vyc2VzJyBzaWd3aW5jaCBoYW5kbGVyCisJICBpcyB1c2VkKSwgYW5kIGluIGNvbG9yLgorCSsgdXNlICQoQ0MpIHJhdGhlciB0aGFuICdnY2MnIGluIE1LX1NIQVJFRF9MSUIgc3ltYm9scywgdXNlZCBmb3IgTGludXgKKwkgIHNoYXJlZCBsaWJyYXJ5IHJ1bGVzLgorCis5OTA5MjUJcHJlLXJlbGVhc2UKKwkrIGFkZCBuZXdlciBOZXRCU0QgY29uc29sZSB0ZXJtaW5mbyBlbnRyaWVzCisJKyBhZGQgYW1pZ2EtOGJpdCB0ZXJtaW5mbyBlbnRyeSAoZnJvbSBIZW5uaW5nICdGYXJvdWwnIFBldGVycworCSAgPEZhcm91bEBiZXlvbmQua24tYnJlbWVuLmRlPikKKwkrIHJlbW92ZSAtbGN1cnNlcyAtbHRlcm1jYXAgZnJvbSBjb25maWd1cmUgc2NyaXB0J3MgY2hlY2sgZm9yIHRoZSBncG0KKwkgIGxpYnJhcnksIHNpbmNlIHRoZXkgYXJlIG5vdCByZWFsbHkgbmVjZXNzYXJ5IChhIHByb3Blcmx5IGNvbmZpZ3VyZWQKKwkgIGdwbSBsaWJyYXJ5IGhhcyBubyBkZXBlbmRlbmN5IG9uIGFueSBjdXJzZXMgbGlicmFyeSksIGFuZCBpZiB0aGUKKwkgIGN1cnNlcyBsaWJyYXJ5IGlzIG5vdCBpbnN0YWxsZWQsIHRoaXMgd291bGQgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKwkrIG1vZGlmeSB0aWMncyAtQyBvcHRpb24gc28gdGhhdCB0ZXJtaW5mbyAidXNlPSIgY2xhdXNlcyBhcmUgdHJhbnNsYXRlZAorCSAgdG8gInRjPSIgY2xhdXNlcyBldmVuIHdoZW4gcnVubmluZyBpdCBhcyBjYXB0b2luZm8uCisJKyBtb2RpZnkgQ0ZfU1REQ1BQX0xJQlJBUlkgY29uZmlndXJlIG1hY3JvIHRvIHBlcmZvcm0gaXRzIGNoZWNrIG9ubHkKKwkgIGZvciBHTlUgQysrLCBzaW5jZSB0aGF0IGxpYnJhcnkgY29uZmxpY3RzIHdpdGggU0dJJ3MgbGliQyBvbiBJUklYLTYuMgorCSsgbW9kaWZ5IENGX1NIQVJFRF9PUFRTIGNvbmZpZ3VyZSBtYWNybyB0byBzdXBwb3J0IGJ1aWxkIG9uIE5ldEJTRCB3aXRoCisJICBFTEYgbGlicmFyaWVzIChwYXRjaCBieSBCZXJuZCBFcm5lc3RpIDxiZXJuZEBhcnJlc3VtLmlua2EuZGU+KS4KKwkrIGNvcnJlY3QgYSBwcm9ibGVtIGluIGxpYnBhbmVsLCB3aGVyZSB0aGUgX25jX3RvcF9wYW5lbCB2YXJpYWJsZSB3YXMKKwkgIG5vdCBzZXQgcHJvcGVybHkgd2hlbiBib3R0b21fcGFuZWwoKSBpcyBjYWxsZWQgdG8gaGlkZSBhIHBhbmVsIHdoaWNoCisJICBpcyB0aGUgb25seSBvbmUgb24gdGhlIHN0YWNrIChyZXBvcnQvYW5hbHlzaXMgYnkgTWljaGFlbCBBbmRyZXMKKwkgIDxtYUBzdXNlLmRlPiwgcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTkwOTE4CXByZS1yZWxlYXNlCisJKyBhZGQgYWNzYyBzdHJpbmcgdG8gSFAgNzAwOTIgdGVybWluZm8gZW50cnkgKHBhdGNoIGJ5IEpvZXJnIFd1bnNjaAorCSAgPGpAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPikuCisJKyBhZGQgdG9wLWxldmVsIHVuaW5zdGFsbC5kYXRhIGFuZCB1bmluc3RhbGwubWFuIG1ha2VmaWxlIHJ1bGVzLgorCSsgY29ycmVjdCBsb2dpYyBvZiBDRl9MSU5LX0ZVTkNTIGNvbmZpZ3VyZSBzY3JpcHQsIGZyb20gQmVPUyBjaGFuZ2VzIHNvCisJICB0aGF0IGhhcmQtbGlua3Mgd29yayBvbiBVbml4IGFnYWluLgorCSsgY2hhbmdlIGRlZmF1bHQgdmFsdWUgb2YgY2ZfY3ZfYnVpbHRpbl9ib29sIHRvIDEgKHN1Z2dlc3RlZCBieQorCSAgSmVyZW15IEJ1aGxlciksIG1ha2luZyBpdCBsZXNzIGxpa2VseSB0aGF0IGEgY29uZmxpY3RpbmcgZGVjbGFyYXRpb24KKwkgIG9mIGJvb2wgd2lsbCBiZSBzZWVuIHdoZW4gY29tcGlsaW5nIHdpdGggQysrLgorCis5OTA5MTEJcHJlLXJlbGVhc2UKKwkrIGltcHJvdmVkIGNvbmZpZ3VyZSBjaGVja3MgZm9yIGJ1aWx0aW4uaAorCSsgbWlub3IgY2hhbmdlcyB0byBDKysgYmluZGluZyAocmVtb3ZlIHN0YXRpYyBpbml0aWFsaXphdGlvbnMsIGFuZCBtYWtlCisJICBjb25maWd1cmUtdGVzdCBmb3IgcGFyYW1ldGVyIGluaXRpYWxpemF0aW9ucykgZm9yIGZlYXR1cmVzIG5vdAorCSAgYWxsb3dlZCBieSB2ZW5kb3IncyBDKysgY29tcGlsZXJzIChyZXBvcnRlZCBieSBNYXJ0aW4gTW9rcmVqcywgdGhpcworCSAgYXBwbGllcyB0byBTR0ksIHRob3VnaCBJIGZvdW5kIFNDTyBoYXMgdGhlIHNhbWUgY2hhcmFjdGVyaXN0aWNzKS4KKwkrIGNvcnJlY3RlZCBxdW90aW5nIG9mIEVUSVBfeHh4IGRlZmluaXRpb25zIHdoaWNoIHN1cHBvcnQgb2xkIHZlcnNpb25zCisJICBvZiBnKyssIGUuZy4sIHRob3NlIHVzaW5nIC1sZysrCisJKyByZW1vdmUgJ0wnIGNvZGUgZnJvbSBzYWZlX3NwcmludGYuYywgc2luY2UgJ2xvbmcgZG91YmxlJyBpcyBub3QKKwkgIHdpZGVseSBwb3J0YWJsZS4gIHNhZmVfc3ByaW50Zi5jIGlzIGV4cGVyaW1lbnRhbCwgaG93ZXZlciwgYW5kCisJICBleGlzdHMgbWFpbmx5IGFzIGEgZmFsbGJhY2sgZm9yIHN5c3RlbXMgd2l0aG91dCBzbnByaW50ZiAocmVwb3J0ZWQKKwkgIGJ5IE1hcnRpbiBNb2tyZWpzIDxtbW9rcmVqc0BuYXR1ci5jdW5pLmN6PiwgZm9yIElSSVggNi4yKQorCSsgbW9kaWZ5IGRlZmluaXRpb24gb2YgX25jX3RpbmZvX2ZrZXlzIGluIGJyb2tlbi1saW5rZXIgY29uZmlndXJhdGlvbgorCSAgc28gdGhhdCBpdCBpcyBub3QgdW5uZWNlc3NhcmlseSBtYWRlIGV4dGVybiAoSmVmZnJleSBDIEhvbmlnKS4KKworOTkwOTA0CXByZS1yZWxlYXNlCisJKyBtb3ZlIGRlZmluaXRpb24gZm9yIGJ1aWx0aW4uaCBpbiBjb25maWd1cmUgdGVzdHMgdG8gc3BlY2lmaWMgY2hlY2sKKwkgIGZvciBsaWJnKyssIHNpbmNlIHF0IHVzZXMgdGhlIHNhbWUgZmlsZW5hbWUgaW5jb21wYXRpYmx5LgorCSsgY29ycmVjdCBsb2dpYyBvZiBsaWJfdGVybWNhcC5jIHRnZXRzdHIgZnVuY3Rpb24sIHdoaWNoIGRpZCBub3QgY29weQorCSAgdGhlIHJlc3VsdCB0byB0aGUgYnVmZmVyIHBhcmFtZXRlci4gIFRlc3Rpbmcgc2hvd3MgU29sYXJpcyBkb2VzCisJICB1cGRhdGUgdGhpcywgdGhvdWdoIG9mIGNvdXJzZSB0Z2V0ZW50J3MgYnVmZmVyIGlzIHVudG91Y2hlZCAocmVwb3J0ZWQKKwkgIGluIFBldGVyIEVkd2FyZHMgPHBldGVyLmVkd2FyZHNAaXJlbGFuZC5jb20+IGluCisJICBtcGMubGlzdHMuZnJlZWJzZC5jdXJyZW50IG5ld3Nncm91cC4KKwkrIGNvcnJlY3RlZCBiZXRlcm0gdGVybWluZm8gZW50cnksIHdoaWNoIGxpc3RzIHNvbWUgY2FwYWJpbGl0aWVzIHdoaWNoCisJICBhcmUgbm90IGFjdHVhbGx5IHByb3ZpZGVkIGJ5IHRoZSBCZU9TIFRlcm1pbmFsLgorCSsgYWRkIHNwZWNpYWwgbG9naWMgdG8gcmVwbGFjZSBzZWxlY3QoKSBjYWxscyBvbiBCZU9TLCB3aG9zZSBzZWxlY3QoKQorCSAgZnVuY3Rpb24gd29ya3Mgb25seSBmb3Igc29ja2V0cy4KKwkrIGNvcnJlY3QgbWlzc2luZyBlc2NhcGUgaW4gbWt0ZXJtLmguYXdrLmluLCB3aGljaCBjYXVzZWQgcGFydAorCSAgb2YgdGhlIGNvcHlyaWdodCBub3RpY2VkIHRvIGJlIG9taXR0ZWQgKHJlcG9ydGVkIGJ5IFBldGVyCisJICBXZW1tIDxwZXRlckBuZXRwbGV4LmNvbS5hdT4pLgorCT4gc2V2ZXJhbCBzbWFsbCBjaGFuZ2VzIHRvIG1ha2UgdGhlIGMrKyBiaW5kaW5nIGFuZCBkZW1vIHdvcmsgb24gT1MvMgorCSAgRU1YIChyZWxhdGVkIHRvIGEgY2xlYW4gcmVpbnN0YWxsIG9mIEVNWCk6CisJKyBjb3JyZWN0IGxpYnJhcnktcHJlZml4IGZvciBjKysgYmluZGluZzsgbm9uZSBpcyBuZWVkZWQuCisJKyBhZGQgJHggc3VmZml4IHRvIG1ha2VfaGFzaCBhbmQgbWFrZV9rZXlzIHNvICdtYWtlIGRpc3RjbGVhbicgd29ya3MuCisJKyBjb3JyZWN0IG1pc3NpbmcgJHggc3VmZml4IGZvciB0YWNrLCBjKysgZGVtbyBleGVjdXRhYmxlcy4KKwkrIHNwbGl0IENGX0NYWF9MSUJSQVJZIGludG8gQ0ZfR1BQX0xJQlJBUlkgKGZvciAtbGcrKykgYW5kCisJICBDRl9TVERDUFBfTElCUkFSWSAoZm9yIC1sc3RkYysrKQorCis5OTA4MjgJcHJlLXJlbGVhc2UKKwkrIGFkZCBjeWd3aW4gdGVybWluZm8gZW50cnkgLVRECisJKyBtb2RpZnkgQ0ZfUFJPR19FWFQgY29uZmlndXJlIG1hY3JvIHRvIHNldCAuZXhlIGV4dGVuc2lvbiBmb3IgY3lnd2luLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRob3V0LWN4eC1iaW5kaW5nLCBtb2RpZnlpbmcgdGhlIGV4aXN0aW5nCisJICAtLXdpdGhvdXQtY3h4IG9wdGlvbiB0byBjaGVjayBvbmx5IGZvciB0aGUgQysrIGNvbXBpbGVyCisJICBjaGFyYWN0ZXJpc3RpY3MuICBXaGV0aGVyIG9yIG5vdCB0aGUgQysrIGJpbmRpbmcgaXMgbmVlZGVkLCB0aGUKKwkgIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2tzIGZvciB0aGUgc2l6ZS90eXBlIG9mIGJvb2wsIHRvIG1ha2UgbmN1cnNlcworCSAgbWF0Y2guICBPdGhlcndpc2UgQysrIGFwcGxpY2F0aW9ucyBjYW5ub3QgdXNlIG5jdXJzZXMuCisKKzk5MDgyMQlwcmUtcmVsZWFzZQorCSsgdXBkYXRlZCBjb25maWd1cmUgbWFjcm9zIENGX01BS0VGTEFHUywgQ0ZfQ0hFQ0tfRVJSTk8KKwkrIG1pbm9yIGNvcnJlY3Rpb25zIHRvIGJldGVybSB0ZXJtaW5mbyBlbnRyeS4KKwkrIG1vZGlmeSBsaWJfc2V0dXAuYyB0byByZWplY3QgdmFsdWVzIG9mICRURVJNIHdoaWNoIGhhdmUgYSAnLycgaW4KKwkgIHRoZW0uCisJKyBhZGQgaWZkZWYncyB0byBndWFyZCBhZ2FpbnN0IENTNSwgQ1M2LCBDUzcsIENTOCBiZWluZyB6ZXJvLCBhcyBtb3JlCisJICB0aGFuIG9uZSBpcyBvbiBCZU9TLiAgVGhhdCB3b3VsZCBicmVhayBhIHN3aXRjaCBzdGF0ZW1lbnQuCisJKyBhZGQgY29uZmlndXJlIG1hY3JvIENGX0xJTktfRlVOQ1MgdG8gZGV0ZWN0IGFuZCB3b3JrIGFyb3VuZCBCZU9TJ3MKKwkgIG5vbmZ1bmN0aW9uYWwgbGluaygpLgorCSsgaW1wcm92ZWQgY29uZmlndXJlIG1hY3JvcyBDRl9CT09MX0RFQ0wgYW5kIENGX0JPT0xfU0laRSB0byBkZXRlY3QKKwkgIEJlT1MncyBib29sLCB3aGljaCBpcyBkZWNsYXJlZCBhcyBhbiB1bnNpZ25lZCBjaGFyLgorCis5OTA4MTQJcHJlLXJlbGVhc2UKKwkrIGFkZCBtcy12dDEwMCB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIG1pbm9yIGZpeGVzIGZvciBtaXNjL2VteC5zcmMsIGJhc2VkIG9uIHRlc3Rpbmcgd2l0aCB0YWNrLgorCSsgbWlub3IgZml4IGZvciB0ZXN0L25jdXJzZXMuYywgdGVzdCAnYScsIGluIGNhc2UgbmN2IGlzIG5vdCBzZXQuCisKKzk5MDczMQlwcmUtcmVsZWFzZQorCSsgbWlub3IgY29ycmVjdGlvbiBmb3IgJ3NjcmVlbicgdGVybWluZm8gZW50cnkuCisJKyBjbGFyaWZ5IGRlc2NyaXB0aW9uIG9mIGVycnJldCB2YWx1ZXMgZm9yIHNldHVwdGVybSBpbiBtYW5wYWdlLgorCSsgbW9kaWZ5IHRwdXQgdG8gYWxsb3cgaXQgdG8gZW1pdCBjYXBhYmlsaXRpZXMgZm9yIGhhcmRjb3B5IHRlcm1pbmFscworCSAgKHBhdGNoIGJ5IEdvcmFuIFVkZGVib3JnIDxnb2VyYW5AdWRkZWJvcmcucHAuc2U+KS4KKwkrIG1vZGlmeSB0aGUgJ28nIChwYW5lbCkgdGVzdCBpbiBuY3Vyc2VzLmMgdG8gc2hvdyB0aGUgcGFuZWxzIGluIGNvbG9yCisJICBvciBhdCBsZWFzdCBpbiBib2xkLCB0byB0ZXN0IEp1ZXJnZW4ncyBjaGFuZ2UgdG8gd3JlZnJlc2goKS4KKwk+IHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgRml4ZXMgYSBwcm9ibGVtIHVzaW5nIHdia2dkc2V0KCkgd2l0aCBwYW5lbHMuICBJdCBoYXMgYWN0dWFsbHkKKwkgIG5vdGhpbmcgdG8gd2l0aCBwYW5lbHMgYnV0IGlzIGEgcHJvYmxlbSBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YKKwkgIHdyZWZyZXNoKCkuICBXaGVuZXZlciBhIHdpbmRvdyBjaGFuZ2VzIGl0cyBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSB0bworCSAgc29tZXRoaW5nIGRpZmZlcmVudCB0aGFuIG5ld3NjcidzIGJhY2tncm91bmQgYXR0cmlidXRlLCB0aGUgd2hvbGUKKwkgIHdpbmRvdyBpcyB0b3VjaGVkIHRvIGZvcmNlIGEgY29weSB0byBuZXdzY3IuICBUaGlzIGlzIGFuIHVud2FudGVkCisJICBzaWRlLWVmZmVjdCBvZiB3cmVmcmVzaCgpIGFuZCBpdCBpcyBhY3R1YWxseSBub3QgbmVjZXNzYXJ5LiAgQQorCSAgY2hhbmdlZCBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSBhZmZlY3RzIG9ubHkgZnVydGhlciBvdXRwdXRzIG9mCisJICBiYWNrZ3JvdW5kIGl0IGRvZXNuJ3QgbWVhbiBhbnl0aGluZyB0byB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAgd2luZG93LiAgU28gdGhlcmUgaXMgbm8gbmVlZCB0byBmb3JjZSBhIGNvcHkuICAocmVwb3J0ZWQgYnkgRnJhbmsKKwkgIEhlY2tlbmJhY2ggPGZyYW5rQGctbi11LmRlPikuCisJKyBhbiB1cHdhcmQgY29tcGF0aWJsZSBlbmhhbmNlbWVudCBvZiB0aGUgTkN1cnNlc1BhZCBjbGFzcyBpbiB0aGUgQysrCisJICBiaW5kaW5nLiAgSXQgYWxsb3dzIG9uZSB0byBhZGQgYSAidmlld3BvcnQiIHdpbmRvdyB0byBhIHBhZCBhbmQgdGhlbgorCSAgdG8gdXNlIHBhbm5pbmcgdG8gdmlldyB0aGUgcGFkIHRocm91Z2ggdGhlIHZpZXdwb3J0IHdpbmRvdy4KKworOTkwNzI0CXByZS1yZWxlYXNlCisJKyBzdXBwcmVzcyBhIGNhbGwgdG8gZGVmX3Byb2dfbW9kZSgpIGluIHRoZSBTSUdUU1RQIGhhbmRsZXIgaWYgdGhlCisJICBzaWduYWwgd2FzIHJlY2VpdmVkIHdoaWxlIG5vdCBpbiBjdXJzZXMgbW9kZSwgZS5nLiwgZW5kd2luKCkgd2FzCisJICBjYWxsZWQgaW4gcHJlcGFyYXRpb24gZm9yIHNwYXduaW5nIGEgc2hlbGwgY29tbWFuZCAocmVwb3J0ZWQgYnkgRnJhbmsKKwkgIEhlY2tlbmJhY2ggPGZyYW5rQGctbi11LmRlPikKKwkrIGNvcnJlY3RlZC9lbmhhbmNlZCB4dGVybS1yNSwgeHRlcm0rc2wsIHh0ZXJtK3NsLXR3bSB0ZXJtaW5mbyBlbnRyaWVzLgorCSsgY2hhbmdlIHRlc3QgZm9yIHh0ZXJtIG1vdXNlIGNhcGFiaWxpdHk6ICBpdCBub3cgY2hlY2tzIG9ubHkgaWYgdGhlCisJICB1c2VyJ3MgJERJU1BMQVkgdmFyaWFibGUgaXMgc2V0IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGttb3VzCisJICBjYXBhYmlsaXR5IGJlaW5nIHByZXNlbnQgaW4gdGhlIHRlcm1pbmZvLiAgQmVmb3JlLCBpdCBjaGVja2VkIGlmIGFueQorCSAgb2YgInh0ZXJtIiwgInJ4dnQiIG9yICJrdGVybSIgd2VyZSBzdWJzdHJpbmdzIG9mIHRoZSB0ZXJtaW5hbCBuYW1lLgorCSAgSG93ZXZlciwgc29tZSBlbXVsYXRvcnMgd2hpY2ggYXJlIGluY29tcGF0aWJsZSB3aXRoIHh0ZXJtIGluIG90aGVyCisJICB3YXlzIGRvIHN1cHBvcnQgdGhlIHh0ZXJtIG1vdXNlIGNhcGFiaWxpdHkuCisJKyByZXZpZXdlZCBhbmQgbWFkZSBtaW5vciBjaGFuZ2VzIGluIG5jdXJzZXMgdG8gcXVpZXQgZysrIHdhcm5pbmdzCisJICBhYm91dCBzaGFkb3dlZCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gIGcrKyBpbmNvcnJlY3RseSB3YXJucworCSAgYWJvdXQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVjYXVzZSBpdCBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudAorCSAgc2hvcnQtY2lyY3VpdCBleHByZXNzaW9uIGV2YWx1YXRpb24uCisJKyBjaGFuZ2UgbmN1cnNlcyAnYicgdGVzdCB0byBzdGFydCBpbiBjb2xvciBwYWlyIDAgYW5kIHRvIHNob3cgaW4gdGhlCisJICByaWdodCBtYXJnaW4gdGhvc2UgYXR0cmlidXRlcyB3aGljaCBhcmUgc3VwcHJlc3NlZCBieSBub19jb2xvcl92aWRlbywKKwkgIGkuZS4sICIoTkNWKSIuCisJKyBtb2RpZnkgaWZkZWYncyBpbiBjdXJzZXMuaCBzbyB0aGF0IF9fYXR0cmlidXRlX18gaXMgbm90IHJlZGVmaW5lZAorCSAgd2hlbiBjb21waWxpbmcgd2l0aCBnKyssIGJ1dCBpbnN0ZWFkIGRpc2FibGVkIHRoZSBtYWNyb3MgZGVyaXZlZCBmb3IKKwkgIF9fYXR0cmlidXRlX18gc2luY2UgZysrIGRvZXMgbm90IGNvbnNpc3RlbnRseSByZWNvZ25pemUgdGhlIHNhbWUKKwkgIGtleXdvcmRzIGFzIGdjYyAocmVwb3J0ZWQgYnkgU3RlcGhhbiBLIFppdHogPHppdHpAZXJmLm5ldD4pLgorCSsgdXBkYXRlIGRlcGVuZGVuY2llcyBmb3IgdGVybS5oIGluIG5jdXJzZXMvbW9kdWxlcyAocmVwb3J0ZWQgYnkKKwkgIElseWEgWmFraGFyZXZpY2gpLgorCis5OTA3MTAJcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSB0aGUgZm9ybSBkZW1vIGluIG5jdXJzZXMuYyB0byBpbGx1c3RyYXRlIGhvdyB0byBtYW5pcHVsYXRlIHRoZQorCSAgZmllbGQgYXBwZWFyYW5jZSwgZS5nLCBmb3IgaGlnaGxpZ2h0aW5nIG9yIHRyYW5zbGF0aW5nIHRoZSBmaWVsZAorCSAgY29udGVudHMuCisJKyBjb3JyZWN0IGxvZ2ljIGluIHdyaXRlX2VudHJ5IGZyb20gc3BsaXQtb3V0IG9mIGhvbWVfdGVybWluZm8gaW4KKwkgIDk4MDkxOSwgd2hpY2ggcHJldmVudGVkIHVwZGF0ZSBvZiAkSE9NRS8udGVybWluZm8gKHJlcG9ydGVkIGJ5IFBoaWxpcAorCSAgU3BlbmNlciA8cHNwZW5jZXJAZmllbGRzLnV0b3JvbnRvLmNhPikuCisKKzk5MDcwMwlwcmUtcmVsZWFzZQorCSsgbW9kaWZ5IGxpbnV4IHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIG1ha2UgdXNlIG9mIGtlcm5lbCAyLjIueCBtb2RzCisJICB0aGF0IHN1cHBvcnQgY3Vyc29yIHN0eWxlLCBlLmcuLCB0byBpbXBsZW1lbnQgY3Z2aXMgKHBhdGNoIGJ5IEZyYW5rCisJICBIZWNrZW5iYWNoIDxmcmFua0BnLW4tdS5kZT4pCisJKyBhZGQgc3BlY2lhbC1jYXNlIGluIHNldHVwdGVybSB0byByZXRhaW4gcHJldmlvdXNseS1zYXZlZCB0ZXJtaW5hbAorCSAgc2V0dGluZ3MgaW4gY3VyX3Rlcm0sIHdoaWNoIGhhcHBlbnMgd2hlbiBjdXJzZXMgYW5kIHRlcm1jYXAgY2FsbHMgYXJlCisJICBtaXhlZCAoZnJvbSByZXBvcnQgYnkgQmpvcm4gSGVsZ2FhcyA8aGVsZ2Fhc0BkaGMubmV0PikuCisJKyBzdXBwcmVzcyBpbml0aWFsaXphdGlvbiBvZiBrZXktdHJpZXMgaW4gX25jX2tleXBhZCgpIGlmIHdlIGFyZSBvbmx5CisJICBkaXNhYmxpbmcga2V5cGFkIG1vZGUsIGUuZy4sIGluIGVuZHdpbigpIGNhbGxlZCB3aGVuIGtleXBhZCgpIHdhcworCSAgbm90LgorCSsgbW9kaWZ5IHRoZSBBZGE5NSBtYWtlZmlsZSB0byBlbnN1cmUgdGhhdCBhbHdheXMgdGhlIEFkYSBmaWxlcyBmcm9tCisJICB0aGUgZGV2ZWxvcG1lbnQgdHJlZSBhcmUgdXNlZCBmb3IgYnVpbGRpbmcgYW5kIG5vdCB0aGUgZXZlbnR1YWxseQorCSAgaW5zdGFsbGVkIG9uZXMgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisKKzk5MDYyNglwcmUtcmVsZWFzZQorCSsgdXNlIFRUWSBkZWZpbml0aW9uIGluIHRhY2svc3lzZGVwLmMgcmF0aGVyIHRoYW4gc3RydWN0IHRlcm1pb3MKKwkgIChyZXBvcnRlZCBieSBQaGlsaXBwZSBEZSBNdXl0ZXIpLgorCSsgYWRkIGEgZmFsbGJhY2sgZm9yIHN0cnN0ciwgdXNlZCBpbiBsaWJfbXZjdXIuYyBhbmQgdGFjay9lZGl0LmMsCisJICBub3QgcHJlc2VudCBvbiBzeXNWNjggKHJlcG9ydGVkIGJ5IFBoaWxpcHBlIERlIE11eXRlcikuCisJKyBjb3JyZWN0IGRlZmluaXRpb24gaW4gY29tcF9oYXNoLmMgdG8gYnVpbGQgd2l0aCBjb25maWd1cmUKKwkgIC0td2l0aC1yY3MtaWRzIG9wdGlvbi4KKworOTkwNjE5CXByZS1yZWxlYXNlCisJKyBtb2RpZmllZCBpZmRlZidzIGZvciBzaWdhY3Rpb24gYW5kIHNpZ3ZlYyB0byBlbnN1cmUgd2UgZG8gbm90IHRyeSB0bworCSAgaGFuZGxlIFNJR1RTVFAgaWYgbmVpdGhlciBpcyBhdmFpbGFibGUgKGZyb20gcmVwb3J0IGJ5IFBoaWxpcHBlIERlCisJICBNdXl0ZXIpLgorCT4gcGF0Y2ggYnkgUGhpbGlwcGUgRGUgTXV5dGVyOgorCSsgaW4gdGljLmMsIHVzZSBgdW5saW5rJyBpZiBgcmVtb3ZlJyBpcyBub3QgYXZhaWxhYmxlLgorCSsgdXNlIG9ubHkgYHVuc2lnbmVkJyBhcyBmYWxsYmFjayB2YWx1ZSBmb3IgYHNwZWVkX3QnLiAgU29tZSBmaWxlcyB1c2VkCisJICBgc2hvcnQnIGluc3RlYWQuCisKKzk5MDYxNglwcmUtcmVsZWFzZQorCSsgZml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MgaW4gdGFjay4KKwkrIGFkZCBhIGNoZWNrIGZvciBwcmVkZWZpbmVkIGJvb2wgdHlwZSBpbiBDQywgYmFzZWQgb24gcmVwb3J0IHRoYXQKKwkgIEJlT1MgcHJlZGVmaW5lcyBhIGJvb2wgdHlwZS4KKwkrIGNvcnJlY3QgbG9naWMgZm9yIGluZm9jbXAgLWUgb3B0aW9uLCBpLmUuLCB0aGUgY29uZmlndXJlCisJICAtLXdpdGgtZmFsbGJhY2tzIG9wdGlvbiwgd2hpY2ggSSdkIG5vdCB1cGRhdGVkIHdoZW4gaW1wbGVtZW50aW5nCisJICBleHRlbmRlZCBuYW1lcyAoY2Y6ICA5OTAzMDEpLiAgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgIi1FIgorCSAgb3B0aW9uIHRvIGluZm9jbXAgLVRECisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBpbnRyb2R1Y2UgdGhlIHByaXZhdGUgdHlwZSBDdXJzZXNfQm9vbCBpbiB0aGUgQWRhOTUgYmluZGluZworCSAgaW1wbGVtZW50YXRpb24uICBUaGlzIGlzIHRvIGNsZWFybHkgcmVwcmVzZW50IHRoZSB1c2Ugb2YgImJvb2wiIGFsc28KKwkgIGluIHRoZSBiaW5kaW5nLiAgSXQgc2hvdWxkIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZS4KKwkrIGltcHJvdmUgdGhlIG1hbiBwYWdlIGZvciBmaWVsZF9idWZmZXIoKSB0byB0ZWxsIHRoZSBwZW9wbGUsIHRoYXQgdGhlCisJICB3aG9sZSBidWZmZXIgaW5jbHVkaW5nIGxlYWRpbmcvdHJhaWxpbmcgc3BhY2VzIGlzIHJldHVybmVkLiAgVGhpcyBpcworCSAgYSBjb21tb24gc291cmNlIG9mIGNvbmZ1c2lvbiwgc28gaXQncyBiZXR0ZXIgdG8gZG9jdW1lbnQgaXQgY2xlYXJseS4KKworOTkwNjE0CXByZS1yZWxlYXNlCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyB1c2UgcHJhZ21hIFByZUVsYWJvcmF0ZSBpbiBzZXZlcmFsIHBsYWNlcy4KKwkrIGNoYW5nZSBhIGZldyBTeXN0ZW0uQWRkcmVzcyB1c2VzIHRvIG1vcmUgc3BlY2lmaWMgdHlwZXMuCisJKyBjaGFuZ2UgaW50ZXJmYWNlIHZlcnNpb24tbnVtYmVyIHRvIDEuMAorCSsgcmVnZW5lcmF0ZSBBZGE5NSBIVE1MIGZpbGVzLgorCis5OTA2MTIJcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSBsaWJfZW5kd2luLmMgdG8gYXZvaWQgY2FsbGluZyByZXNldF9zaGVsbF9tb2RlKCksIHJldHVybiBFUlIKKwkgIGlmIGl0IGFwcGVhcnMgdGhhdCBjdXJzZXMgd2FzIG5ldmVyIGluaXRpYWxpemVkLCBlLmcuLCBieSBpbml0c2NyKCkuCisJICBGb3IgaW5zdGFuY2UsIHRoaXMgZ3VhcmRzIGFnYWluc3Qgc2V0dGluZyB0aGUgdGVybWluYWwgbW9kZXMgdG8KKwkgIHN0cmFuZ2UgdmFsdWVzIGlmIGVuZHdpbigpIGlzIGNhbGxlZCBhZnRlciBzZXR1cHRlcm0oKS4gIEluIHRoZSBzYW1lCisJICBjb250ZXh0LCBTb2xhcmlzIGN1cnNlcyB3aWxsIGR1bXAgY29yZS4KKwkrIG1vZGlmeSBsb2dpYyB0aGF0IGF2b2lkcyBhIGNvbmZsaWN0IGluIGxpYl92aWRhdHRyLmMgYmV0d2VlbiBzZ3IwIGFuZAorCSAgZXF1aXZhbGVudCB2YWx1ZXMgaW4gcm1zbyBvciBybXVsIGJ5IGVuc3VyaW5nIHdlIGRvIG5vdCBtb2RpZnkgdGhlCisJICBkYXRhIHdoaWNoIHdvdWxkIGJlIHJldHVybmVkIGJ5IHRoZSB0ZXJtaW5mbyBvciB0ZXJtY2FwIGludGVyZmFjZXMKKwkgIChyZXBvcnRlZCBieSBCcmFkIFBlcGVycyA8YnJhZEBsaW51eGNhbmFkYS5jb20+LCBjZjogIDk2MDcwNikuCisJKyBhZGQgYSBudWxsLXBvaW50ZXIgY2hlY2sgZm9yIFNQIGluIGxpYl92aWRhdHRyLmMgdG8gbG9naWMgdGhhdCBjaGVja3MKKwkgIGZvciBtYWdpYyBjb29raWVzLgorCSsgaW1wcm92ZSBmYWxsYmFjayBkZWNsYXJhdGlvbiBvZiAnYm9vbCcgd2hlbiB0aGUgLS13aXRob3V0LWN4eCBvcHRpb24KKwkgIGlzIGdpdmVuLCBieSB1c2luZyBhICdjaGFyJyBvbiBpMzg2IGFuZCByZWxhdGVkIGhvc3RzIChwcm9tcHRlZCBieQorCSAgZGlzY3Vzc2lvbiB3aXRoIEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKworOTkwNjA1CXByZS1yZWxlYXNlCisJKyBpbmNsdWRlIHRpbWUuaCBpbiBsaWJfbmFwbXMuYyBpZiBuYW5vc2xlZXAgaXMgdXNlZCAocGF0Y2ggYnkKKwkgIFIgTGluZHNheSBUb2RkIDx0b2RkckBycGkuZWR1PikuCisJKyBhZGQgYW4gIiN1bmRlZiBib29sIiB0byBjdXJzZXMuaCwgaW4gY2FzZSBzb21lb25lIHRyaWVzIHRvIGRlZmluZSBpdCwKKwkgIGUuZy4sIHBlcmwuCisJKyBhZGQgY2hlY2sgdG8gdHBhcm0gdG8gZ3VhcmQgYWdhaW5zdCBkaXZpZGUgYnkgemVybyAocmVwb3J0ZWQgYnkgQWFyb24KKwkgIENhbXBiZWxsIDxhYXJvbkB1Zy5jcy5kYWwuY2E+KS4KKworOTkwNTE2CXByZS1yZWxlYXNlCisJKyBtaW5vciBmaXggdG8gYnVpbGQgdGFjayBvbiBDTElYIChtaXNtYXRjaGVkIGNvbnN0KS4KKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGNoYW5nZSBKdWVyZ2VuJ3Mgb2xkIGVtYWlsIGFkZHJlc3Mgd2l0aCBuZXcgb25lIGluIHRoZSBmaWxlcyB3aGVyZSBpdAorCSAgaXMgcmVmZXJlbmNlZC4gIFRoZSBBZGE5NSBIVE1MIHBhZ2VzIGFyZSByZWdlbmVyYXRlZC4KKwkrIHVwZGF0ZSBNQU5JRkVTVCB0byBsaXN0IHRoZSB0YWNrIGZpbGVzLgorCis5OTA1MDkJcHJlLXJlbGVhc2UKKwkrIG1pbm9yIGZpeGVzIHRvIG1ha2UgJ3RhY2snIGJ1aWxkL2xpbmsgb24gTmVYVCAocmVwb3J0ZWQgYnkgRnJhbmNpc2NvCisJICBBLiBUb21laSBUb3JyZXMpLgorCis5OTA0MTcJcHJlLXJlbGVhc2UKKwkrIGFkZCAndGFjaycgcHJvZ3JhbSAod2hpY2ggaXMgR1BMJ2QpLCB1cGRhdGluZyBpdCB0byB3b3JrIHdpdGggdGhlCisJICBtb2RpZmllZCBURVJNVFlQRSBzdHJ1Y3QgYW5kIG1ha2luZyBhIGZpeCB0byBzdXBwb3J0IHNldGFmL3NldGFiCisJICBjYXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgdGhlIHRhY2sgcHJvZ3JhbSBpcyBub3QgcGFydCBvZiB0aGUKKwkgIG5jdXJzZXMgbGlicmFyaWVzLCBidXQgYW4gYXBwbGljYXRpb24gd2hpY2ggY2FuIGJlIGRpc3RyaWJ1dGVkIHdpdGgKKwkgIG5jdXJzZXMuICBUaGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIGlnbm9yZSB0aGUgZGlyZWN0b3J5IGlmIGl0IGlzCisJICBvbWl0dGVkLCBob3dldmVyLgorCSsgbW9kaWZ5IGdwbSBtb3VzZSBzdXBwb3J0IHNvIHRoYXQgYnV0dG9ucyAyIGFuZCAzIGFyZSB1c2VkIGZvcgorCSAgc2VsZWN0L3Bhc3RlIG9ubHkgd2hlbiBzaGlmdCBrZXkgaXMgcHJlc3NlZCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlCisJICBmb3IgdXNlIGJ5IGFuIGFwcGxpY2F0aW9uIChwYXRjaCBieSBLbGF1cyBXZWlkZSkuCisJKyBhZGQgY29tcGxldGUgbGlzdCBvZiBmdW5jdGlvbiBrZXlzIHRvIHNjb2Fuc2kgdGVybWluZm8gZW50cnkgLSBURAorCis5OTA0MTAJcHJlLXJlbGVhc2UKKwkrIGFkZCBhIHNpbXBsZSB0ZXN0IHByb2dyYW0gY2FyZGZpbGUuYyB0byBpbGx1c3RyYXRlIGhvdyB0byByZWFkIGZvcm0KKwkgIGZpZWxkcywgYW5kIHNob3dpbmcgZm9ybXMgd2l0aGluIHBhbmVscy4KKwkrIGNoYW5nZSBzaGFyZWQtbGlicmFyeSB2ZXJzaW9uaW5nIGZvciB0aGUgSHVyZCB0byBiZSBsaWtlIExpbnV4IHJhdGhlcgorCSAgdGhhbiAqQlNEIChwYXRjaCBieSBNYXJrIEtldHRlbmlzIDxrZXR0ZW5pc0B3aW5zLnV2YS5ubD4pLgorCSsgYWRkIGxpbnV4LWxhdCB0ZXJtaW5mbyBlbnRyeS4KKwkrIGJhY2stb3V0IF9uY19hY2Nlc3MgY2hlY2sgaW4gcmVhZF90ZXJtY2FwLmMgKGJvdGggaW5jb3JyZWN0IGFuZAorCSAgdW5uZWNlc3NhcnksIGV4Y2VwdCB0byBndWFyZCBhZ2FpbnN0IGEgc21hbGwgd2luZG93IHdoZXJlIHRoZSBmaWxlJ3MKKwkgIG93bmVyc2hpcCBtYXkgY2hhbmdlKS4KKworOTkwNDAzCXByZS1yZWxlYXNlCisJKyByZW1vdmUgY29uZmxpY3RpbmcgX25jX2ZyZWVfdGVybXR5cGUoKSBmdW5jdGlvbiBmcm9tIHRlc3QgbW9kdWxlCisJICBsaWJfZnJlZWFsbC5jCisJKyB1c2UgX25jX2FjY2VzcyBjaGVjayBpbiByZWFkX3Rlcm1jYXAuYyBmb3IgdGVybXBhdGhzW10gYXJyYXkgKG5vdGVkCisJICBieSBKZXJlbXkgQnVobGVyLCBpbmRpY2F0aW5nIHRoYXQgQWxhbiBDb3ggbWFkZSBhIHNpbWlsYXIgcGF0Y2gpLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgbW9kaWZ5IG1lbnUgY3JlYXRpb24gdG8gbm90IGluaGVyaXQgc3RhdHVzIGZsYWcgZnJvbSB0aGUgZGVmYXVsdCBtZW51CisJICB3aGljaCBzYXlzIHRoYXQgdGhlIGFzc29jaWF0ZWQgbWFya2VyIHN0cmluZyBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kCisJICBzaG91bGQgYmUgZnJlZWQgKGJ1ZyByZXBvcnRlZCBieSBNYXJlayBQYWxpd29kYSIKKwkgIDxwYWxpd29kYUBra2kubmV0LnBsPikKKworOTkwMzI3CXByZS1yZWxlYXNlIChhbHBoYS5nbnUub3JnOi9nbnUvbmN1cnNlcy01LjAtYmV0YTEudGFyLmd6KQorCSsgbWlub3IgZml4ZXMgdG8geHRlcm0teGZyZWU4NiB0ZXJtaW5mbyBlbnRyeSAtIFRELgorCSsgc3BsaXQgdXAgYW4gZXhwcmVzc2lvbiBpbiBjb25maWd1cmUgc2NyaXB0IGNoZWNrIGZvciBsZGNvbmZpZyB0bworCSAgd29ya2Fyb3VuZCBsaW1pdGF0aW9uIG9mIEJTRC9PUyBzaCAocmVwb3J0ZWQgYnkgSmVmZiBIYWFzCisJICA8am1oQG1haWwubXNlbi5jb20+KS4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIG1hbi9mb3JtX2hvb2suM3ggKFRvZGQgQyBNaWxsZXIpLgorCis5OTAzMTgJcHJlLXJlbGVhc2UKKwkrIHBhcmVudGhlc2l6ZSBhbmQgdW5kZWYgJ2luZGV4JyBzeW1ib2wgaW4gYysrIGJpbmRpbmcgYW5kIGRlbW8sIHRvCisJICBhY2NvbW1vZGF0ZSBpdHMgZGVmaW5pdGlvbiBvbiBOZVhUIChyZXBvcnRlZCBieSBGcmFuY2lzY28gQS4gVG9tZWkKKwkgIFRvcnJlcykuCisJKyBhZGQgc2lnaXNtZW1iZXIoKSB0byBiYXNlL3NpZ2FjdGlvbi5jIGNvbXBhdGliaWxpdHkgdG8gbGluayBvbiBOZVhUCisJICAocmVwb3J0ZWQgYnkgRnJhbmNpc2NvIEEuIFRvbWVpIFRvcnJlcykuCisJKyBmdXJ0aGVyIHJlZmluZW1lbnRzIHRvIGluZXF1YWxpdHkgaW4gaGFzaG1hcC5jIHRvIGNvdmVyIGEgY2FzZSB3aXRoCisJICBeVSBpbiBudmkgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKworOTkwMzE2CXByZS1yZWxlYXNlCisJKyBhZGQgZmFsbGJhY2sgZGVmaW5pdGlvbiBmb3IgZ2V0Y3dkLCB0byBsaW5rIG9uIE5lWFQuCisJKyBhZGQgYSBjb3B5IG9mIGN1cl90ZXJtIHRvIHRpYy5jIHRvIG1ha2UgaXQgbGluayBwcm9wZXJseSBvbiBOZVhUCisJICAocmVwb3J0ZWQgYnkgRnJhbmNpc2NvIEEuIFRvbWVpIFRvcnJlcykuCisJKyBjaGFuZ2UgaW5lcXVhbGl0eSBpbiBoYXNobWFwLmMgd2hpY2ggY2hlY2tzIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBieQorCSAgYSBjaHVuayBzbyB0aGF0IF5EIGNvbW1hbmQgaW4gbnZpIChzY3JvbGxzIDEvMiBzY3JlZW4pIHdpbGwgdXNlCisJICBzY3JvbGxpbmcgbG9naWMgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92LCByZXBvcnRlZCBieSBKZWZmcmV5CisJICBDIEhvbmlnKS4KKworOTkwMzE0CXByZS1yZWxlYXNlCisJKyBtb2RpZnkgbGliX2NvbG9yLmMgdG8gaGFuZGxlIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBjdXJzY3IKKwkgIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIG1hZGUgb2Jzb2xldGUgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIHVwZGF0ZSBCU0QvT1MgY29uc29sZSB0ZXJtaW5mbyBlbnRyaWVzIHRvIHVzZSBrbG9uZStzZ3IgYW5kCisJICBrbG9uZStjb2xvciAocGF0Y2ggYnkgSmVmZnJleSBDIEhvbmlnKS4KKwkrIHVwZGF0ZSBnbGliYyBhZGRvbiBjb25maWd1cmUgc2NyaXB0IGZvciBleHRlbmRlZCBjYXBhYmlsaXRpZXMuCisJKyBjb3JyZWN0IGEgY291cGxlIG9mIHdhcm5pbmdzIGluIHRoZSAtLWVuYWJsZS1jb25zdCBjb25maWd1cmF0aW9uLgorCSsgbWFrZSBjb21wX2hhc2ggYnVpbGQgcHJvcGVybHkgd2l0aCBfbmNfc3RyZHVwKCksIG9uIE5lWFQgKHJlcG9ydGVkIGJ5CisJICBGcmFuY2lzY28gQS4gVG9tZWkgVG9ycmVzIDxmcmFuY2lzY28udG9tZWlAY3dpeC5jb20+KS4KKworOTkwMzEzCXByZS1yZWxlYXNlCisJKyBjb3JyZWN0IHR5cG9zIGluIGxpbnV4LWMgaW5pdGMgc3RyaW5nIC0gVEQKKwkrIGFkZCAnY3J0JyB0ZXJtaW5mbyBlbnRyeSwgdXBkYXRlIHh0ZXJtLXhmcmVlODYgZW50cnkgLSBURAorCSsgcmVtb3ZlIGEgc3B1cmlvdXMgYXJndW1lbnQgdG8gdHBhcm0oKSBpbiBsaWJfc2tscmVmci5jIChwYXRjaCBieQorCSAgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCis5OTAzMDcJcHJlLXJlbGVhc2UKKwkrIGJhY2stb3V0IGNoYW5nZSB0byB3Z2V0Y2ggYmVjYXVzZSBpdCBjYXVzZXMgYSBwcm9ibGVtIHdpdGggXloKKwkgIGhhbmRsaW5nIGluIGx5bnggKHJlcG9ydGVkIGJ5IEtpbSBEZVZhdWdobikuCisKKzk5MDMwNglwcmUtcmVsZWFzZQorCSsgYWRkIC1HIG9wdGlvbiB0byB0aWMgYW5kIGluZm9jbXAsIHRvIHJldmVyc2UgdGhlIC1nIG9wdGlvbi4KKwkrIHJlY29kZSBmdW5jdGlvbnMgaW4gbmFtZV9tYXRjaC5jIHRvIGF2b2lkIHVzZSBvZiBzdHJuY3B5LCB3aGljaAorCSAgY2F1c2VkIGEgNC1mb2xkIHNsb3dkb3duIGluIHRpYyAoY2Y6IDk4MDUzMCkuCisJKyBjb3JyZWN0IGEgZmV3IHdhcm5pbmdzIGFib3V0IHNpZ24tZXh0ZW5zaW9uIGluIHJlY2VudCBjaGFuZ2VzLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgZml4ZXMgc3VnZ2VzdGVkIGJ5IEplZmYgQnJhZGJ1cnkgPGppYnJhZGJ1cnlAbHVjZW50LmNvbT46CisJICArIGltcHJvdmVkIHBhcmFtZXRlciBjaGVja2luZyBpbiBuZXdfZmllbGR0eXBlKCkuCisJICArIGZpeGVkIGEgdHlwbyBpbiB3Z2V0Y2goKSB0aW1lb3V0IGhhbmRsaW5nLgorCSAgKyBhbGxvdyBzbGtfaW5pdCgpIHRvIGJlIGNhbGxlZCBwZXIgbmV3dGVybSBjYWxsLiAgVGhlIGludGVybmFsIFNMSworCSAgICBzdGF0ZSBpcyBzdG9yZWQgaW4gdGhlIFNDUkVFTiBzdHJ1Y3QgYWZ0ZXIgZXZlcnkgbmV3dGVybSgpIGFuZCB0aGVuCisJICAgIHJlc2V0IGZvciB0aGUgbmV4dCBuZXd0ZXJtLgorCSAgKyBmaXggdGhlIHByb2JsZW0gdGhhdCBhIHNsa19yZWZyZXNoKCkgcmVmcmVzaGVzIHN0ZHNjciBpZiB0aGUKKwkgICAgdGVybWluYWwgaGFzIHRydWUgU0xLcy4KKwkrIHVwZGF0ZSBIVE1MIGRvY3VtZW50YXRpb24gZm9yIEFkYSBiaW5kaW5nLgorCis5OTAzMDEJcHJlLXJlbGVhc2UKKwkrIHJlbW92ZSAnYm9vbCcgY2FzdHMgZnJvbSBkZWZpbml0aW9ucyBvZiBUUlVFL0ZBTFNFIHNvIHRoYXQgc3RhdGVtZW50cworCSAgc3VjaCBhcyAiI2lmIFRSVUUiIHdvcmsuICBUaGlzIHdhcyBvcmlnaW5hbGx5IGRvbmUgdG8gYWxsb3cgZm9yIGEgQysrCisJICBjb21waWxlciB3aGljaCB3b3VsZCB3YXJuIG9mIGltcGxpY2l0IGNvbnZlcnNpb25zIGJldHdlZW4gZW51bSBhbmQKKwkgIGludCwgYnV0IGlzIG5vdCBuZWVkZWQgZm9yIGcrKyAocmVwb3J0ZWQgYnkgS2ltIERlVmF1Z2huKS4KKwkrIGFkZCB1c2VfZXh0ZW5kZWRfbmFtZXMoKSBmdW5jdGlvbiB0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gc3VwcHJlc3MKKwkgIHJlYWQgb2YgdGhlIGV4dGVuZGVkIGNhcGFiaWxpdGllcy4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXRjYXAtbmFtZXMgdG8gc3VwcG9ydCBsb2dpYyB3aGljaAorCSAgYWxsb3dzIG5jdXJzZXMnIHRpYyB0byBkZWZpbmUgbmV3IChpLmUuLCBleHRlbmRlZCkgdGVybWluYWwKKwkgIGNhcGFiaWxpdGllcy4gIFRoaXMgaXMgYWN0aXZhdGVkIGJ5IHRoZSB0aWMgLXggc3dpdGNoLiAgVGhlIGluZm9jbXAKKwkgIHByb2dyYW0gYXV0b21hdGljYWxseSBzaG93cyBvciBjb21wYXJlcyBleHRlbmRlZCBjYXBhYmlsaXRpZXMuCisJICBOb3RlOiAgVGhpcyBjaGFuZ2VzIHRoZSBTdHJpbmdzIGFuZCBzaW1pbGFyIGFycmF5cyBpbiB0aGUgVEVSTVRZUEUKKwkgIHN0cnVjdCBzbyB0aGF0IGFwcGxpY2F0aW9ucyB3aGljaCBtYW5pcHVsYXRlIGl0IG11c3QgYmUgcmVjb21waWxlZC4KKwkrIHVzZSBtYWNyb3MgdHlwZU1hbGxvYywgdHlwZUNhbGxvYyBhbmQgdHlwZVJlYWxsb2MgY29uc2lzdGVudGx5CisJICB0aHJvdWdob3V0IG5jdXJzZXMgbGlicmFyeS4KKwkrIGFkZCBfbmNfc3RyZHVwKCkgdG8gZG9hbGxvYy5jLgorCSsgbW9kaWZ5IGRlZmluZV9rZXkoKSB0byBhbGxvdyBtdWx0aXBsZSBzdHJpbmdzIHRvIGJlIGJvdW5kIHRvIHRoZQorCSAgc2FtZSBrZXljb2RlLgorCSsgY29ycmVjdCBsb2dpYyBlcnJvciBpbiBfbmNfcmVtb3ZlX3N0cmluZywgZnJvbSA5OTAyMjAuCisJPiBwYXRjaCBmb3IgQWRhOTUgYmluZGluZyAoSnVlcmdlbiBQZmVpZmVyKToKKwkrIHJlZ2VuZXJhdGUgc29tZSBvZiB0aGUgaHRtbCBkb2N1bWVudGF0aW9uCisJKyBtaW5vciBjbGVhbnVwIGluIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiCisKKzk5MDIyMAlwcmUtcmVsZWFzZQorCSsgcmVzb2x2ZSBhbWJpZ3VpdHkgb2Yga2VuZC9rbGwva3NsdCBhbmQga2hvbWUva2ZuZC9raWNoMSBzdHJpbmdzIGluCisJICB4dGVybSBhbmQgbmNzYSB0ZXJtaW5mbyBlbnRyaWVzIGJ5IHJlbW92aW5nIHRoZSB1bm5lZWRlZCBvbmVzLiAgTm90ZQorCSAgdGhhdCBzb21lIGVudHJpZXMgd2lsbCByZXR1cm4ga2VuZCAmIGtob21lIHZlcnN1cyBrc2x0IGFuZCBrZm5kLCBmb3IKKwkgIFBDLXN0eWxlIGtleWJvYXJkcyB2ZXJzdXMgc3RyaWN0IHZ0MjIwIGNvbXBhdGlibGl0eSAtIFRECisJKyBhZGQgZnVuY3Rpb24ga2V5Ym91bmQoKSwgd2hpY2ggcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBhc3NvY2lhdGVkIHdpdGgKKwkgIGEgZ2l2ZW4ga2V5Y29kZS4KKwkrIG1vZGlmeSBkZWZpbmVfa2V5KCkgdG8gdW5kZWZpbmUgdGhlIGdpdmVuIHN0cmluZyB3aGVuIG5vIGtleWNvZGUgaXMKKwkgIGdpdmVuLgorCSsgbW9kaWZ5IGtleW9rKCkgc28gaXQgd29ya3MgcHJvcGVybHkgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzdHJpbmcKKwkgIGRlZmluZWQgZm9yIGEga2V5Y29kZS4KKwkrIGFkZCBjaGVjayB0byB0aWMgdG8gd2FybiBhYm91dCB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgdGhhdCBjb250YWluCisJICBtb3JlIHRoYW4gb25lIGtleSBhc3NpZ25lZCB0byB0aGUgc2FtZSBzdHJpbmcuICBUaGlzIGlzIHNob3duIG9ubHkgaWYKKwkgIHRoZSB2ZXJib3NlICgtdikgb3B0aW9uIGlzIGdpdmVuLiAgTW92ZWQgcmVsYXRlZCBsb2dpYyAodGljIC12KSBmcm9tCisJICBjb21wX3BhcnNlLmMgaW50byB0aGUgdGljIHByb2dyYW0uCisJKyBhZGQvdXNlIF9uY190cmFjZV90cmllcygpIHRvIHNob3cgdGhlIGZ1bmN0aW9uIGtleXMgdGhhdCB3aWxsIGJlCisJICByZWNvZ25pemVkLgorCSsgcmVuYW1lIGluaXRfYWNzIHRvIF9uY19pbml0X2FjcyAocmVxdWVzdCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJPiBwYXRjaCBmb3IgQWRhOTUgYmluZGluZyAoSnVlcmdlbiBQZmVpZmVyKToKKwkrIHJlbW92ZSBhbGwgdGhlICpfYWRhYmluZC5jIGZyb20gbmN1cnNlcywgbWVudSBhbmQgZm9ybSBwcm9qZWN0cy4KKwkgIFRob3NlIGxpdHRsZSBoZWxwZXIgcm91dGluZXMgaGF2ZSBhbGwgYmVlbiBpbXBsZW1lbnRlZCBpbiBBZGEgYW5kIGFyZQorCSAgbm8gbG9uZ2VyIHJlcXVpcmVkLgorCSsgVGhlIG9wdGlvbiBoYW5kbGluZyByb3V0aW5lcyBpbiBtZW51IGFuZCBmb3JtIGhhdmUgYmVlbiBtYWRlIG1vcmUKKwkgIHNhdmUuICBUaGV5IG5vdyBtYWtlIHN1cmUgdGhhdCB0aGUgdW51c2VkIGJpdHMgaW4gb3B0aW9ucyBhcmUgYWx3YXlzCisJICB6ZXJvLgorCSsgbW9kaWZ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0bworCSAgKyB1c2UgZ25hdG1ha2UgYXMgZGVmYXVsdCBjb21waWxlciBuYW1lLiAgVGhpcyBpcyBhIHNhZmVyIGNob2ljZSB0aGFuCisJICAgIGdjYywgYmVjYXVzZSBzb21lIEdOQVQgaW1wbGVtZW50YXRpb25zIHVzZSBvdGhlciBuYW1lcyBmb3IgdGhlCisJICAgIGNvbXBpbGVyZHJpdmVyIHRvIGF2b2lkIGNvbmZsaWN0cy4KKwkgICsgdXNlIG5ldyBkZWZhdWx0IGluc3RhbGxhdGlvbiBsb2NhdGlvbnMgZm9yIHRoZSBBZGEgZmlsZXMgYWNjb3JkaW5nCisJICAgIHRvIHRoZSBwcm9wb3NlZCBHTlUgQWRhIGZpbGVzeXN0ZW0gc3RhbmRhcmQgKGZvciBMaW51eCkuCisJKyBzaW1wbGlmeSB0aGUgTWFrZWZpbGVzIGZvciB0aGUgQWRhIGJpbmRpbmcKKwkrIHJlbmFtZSBhZGFfaW5jbHVkZSBkaXJlY3RvcnkgdG8gc3JjLgorCis5OTAyMTMKKwkrIGVuYWJsZSBzaWd3aW5jaCBoYW5kbGVyIGJ5IGRlZmF1bHQuCisJKyBkaXNhYmxlIGxvZ2ljIHRoYXQgYWxsb3dzIHNldGJ1ZiB0byBiZSB0dXJuZWQgb2ZmL29uLCBiZWNhdXNlIHNvbWUKKwkgIGltcGxlbWVudGF0aW9ucyB3aWxsIG92ZXJydW4gdGhlIGJ1ZmZlciBhZnRlciBpdCBoYXMgYmVlbiBkaXNhYmxlZAorCSAgb25jZS4KKworOTkwMjA2CisJKyBzdXBwcmVzcyBzYy9yYyBjYXBhYmlsaXRpZXMgZnJvbSB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBpZiB0aGV5IGFwcGVhcgorCSAgaW4gc21jdXAvcm1jdXAuICBUaGlzIGFmZmVjdHMgb25seSBzY3JvbGxpbmcgb3B0aW1pemF0aW9uLCB0byBmaXggYQorCSAgcHJvYmxlbSByZXBvcnRlZCBieSBzZXZlcmFsIHBlb3BsZSB3aXRoIHh0ZXJtJ3MgYWx0ZXJuYXRlIHNjcmVlbiwKKwkgIHRob3VnaCB0aGUgcHJvYmxlbSBpcyBtb3JlIGdlbmVyYWwuCisJPiBwYXRjaCBmb3IgQWRhOTUgYmluZGluZyAoSnVlcmdlbiBQZmVpZmVyKToKKwkrIHJlbW92ZWQgYWxsIHByYWdtYSBQcmVlbGFib3JhdGUoKSBzdHVmZiwgYmVjYXVzZSB0aGUganVzdCByZWxlYXNlZAorCSAgZ25hdC0zLjExcCBjb21wbGFpbnMgb24gc29tZSBjb25zdHJ1Y3RzLgorCSsgZml4ZWQgc29tZSB1cHBlci9sb3dlciBjYXNlIG5vdGF0aW9ucyBiZWNhdXNlIGduYXQtMy4xMXAgZm91bmQKKwkgIGluY29uc2lzdGVudCB1c2UuCisJKyB1c2VkIGEgbmV3IG1ldGhvZCB0byBnZW5lcmF0ZSB0aGUgSFRNTCBkb2N1bWVudGF0aW9uIG9mIHRoZSBBZGE5NQorCSAgYmluZGluZy4gIFRoaXMgaW52YWxpZGF0ZXMgbmVhcmx5IHRoZSB3aG9sZSAuL0FkYTk1L2h0bWwgc3VidHJlZS4KKwkgIE5lYXJseSBhbGwgY3VycmVudCBmaWxlcyBpbiB0aGlzIHN1YnRyZWUgYXJlIHJlbW92ZWQKKworOTkwMTMwCisJKyBjYWNoZSBsYXN0IHJlc3VsdCBmcm9tIF9uY19iYXVkcmF0ZSwgZm9yIHBlcmZvcm1hbmNlIChzdWdnZXN0ZWQgYnkKKwkgIEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIG1vZGlmeSBDbHJVcGRhdGUoKSBmdW5jdGlvbiB0byB3b3JrYXJvdW5kIGEgcHJvYmxlbSBpbiBudmksIHdoaWNoCisJICB1c2VzIHJlZHJhd3dpbiBpbiBTSUdUU1RQIGhhbmRsaW5nLiAgSmVmZnJleSBDIEhvbmlnIHJlcG9ydGVkIHRoYXQKKwkgIG5jdXJzZXMgcmVwYWludGVkIHRoZSBzY3JlZW4gd2l0aCBudWxscyBiZWZvcmUgcmVzdW1pbmcgbm9ybWFsCisJICBvcGVyYXRpb24gKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIGdlbmVyYWxpemUgaXNfeHRlcm0oKSBmdW5jdGlvbiBhIGxpdHRsZSBieSBsZXR0aW5nIHh0ZXJtL3J4dnQva3Rlcm0KKwkgIGJlIGFueSBzdWJzdHJpbmcgcmF0aGVyIHRoYW4gdGhlIHByZWZpeC4KKwkrIG1vZGlmeSBsaWJfZGF0YS5jIHRvIGluaXRpYWxpemUgU1AuICBTb21lIGxpbmtlcnMsIGUuZy4sIElCTSdzLCB3aWxsCisJICBub3QgbGluayBhIG1vZHVsZSBpZiB0aGUgb25seSBzeW1ib2xzIGV4cG9ydGVkIGZyb20gdGhlIG1vZHVsZSBhcmUKKwkgIHVuaW5pdGlhbGl6ZWQgb25lcyAocGF0Y2ggYnkgSWx5YSBaYWtoYXJldmljaCkuICBJbHlhIHNheXMgdGhhdCBoZQorCSAgaGFzIHNlZW4gbWVzc2FnZXMgY2xhaW1pbmcgdGhpcyBiZWhhdmlvciBjb25mb3JtcyB0byB0aGUgc3RhbmRhcmQuKQorCSsgbW92ZSBjYWxsIG9uIF9uY19zaWduYWxfaGFuZGxlciBwYXN0IF9uY19pbml0c2NyLCB0byBhdm9pZCBhIHNtYWxsCisJICB3aW5kb3cgd2hlcmUgTnR0eWIgaGFzbid0IHlldCBiZWVuIGZpbGxlZCAocmVwb3J0ZWQgYnkgS2xhdXMgV2VpZGUpLgorCSsgbW9kaWZ5IGxpYl90c3RwLmMgdG8gYmxvY2sgU0lHVFRPVSB3aGVuIGhhbmRsaW5nIFNJR1RTVFAsIGZpeGVzIGEKKwkgIHByb2JsZW0gd2hlcmUgbmN1cnNlcyBhcHBsaWNhdGlvbnMgd2hpY2ggd2VyZSBydW4gdmlhIGEgc2hlbGwgc2NyaXB0CisJICB3b3VsZCBoYW5nIHdoZW4gZ2l2ZW4gYSBeWi4gIEFsc28sIGNoZWNrIGlmIHRoZSB0ZXJtaW5hbCdzIHByb2Nlc3MKKwkgIGdyb3VwIGlzIGNvbnNpc3RlbnQsIGkuZS4sIGEgc2hlbGwgaGFzIG5vdCB0YWtlbiBvd25lcnNoaXAgb2YgaXQsCisJICBiZWZvcmUgZGVjaWRpbmcgdG8gc2F2ZSB0aGUgY3VycmVudCB0ZXJtaW5hbCBzZXR0aW5ncyBpbiB0aGUgU0lHVFNUUAorCSAgaGFuZGxlciAocGF0Y2ggYnkgS2xhdXMgV2VpZGUpLgorCSsgY29ycmVjdCBzcGVsbGluZyBvZiBBQ1NfIG5hbWVzIGluIGN1cnNfYm9yZGVyLjN4IChyZXBvcnRlZCBieSBCb2IgdmFuCisJICBkZXIgUG9lbCA8YnZkcG9lbEBrb290ZW5heS5jb20+KS4KKwkrIGNvcnJlY3QgYSBjb3VwbGUgb2YgdHlwb3MgaW4gdGhlIG1hY3JvcyBzdXBwb3J0aW5nIHRoZSBjb25maWd1cmUKKwkgIC0td2l0aC1zaGxpYi12ZXJzaW9uIG9wdGlvbi4KKworOTkwMTIzCisJKyBtb2RpZnkgZnR5X3JlZ2V4LmMgdG8gY29tcGlsZSBvbiBIQVZFX1JFR0VYUFJfSF9GVU5DUyBtYWNoaW5lIChwYXRjaAorCSAgYnkgS2ltaW8gSXNoaWkgPGlzaGlpQGNzbC5zb255LmNvLmpwPikuCisJKyByZW5hbWUgQlNESSBjb25zb2xlIHRlcm1pbmZvIGVudHJpZXM6ICBic2RvcyB0byBic2Rvcy1wYy1ub2JvbGQsIGFuZAorCSAgYnNkb3MtYm9sZCB0byBic2Rvcy1wYyAocGF0Y2ggYnkgSmVmZnJleSBDIEhvbmlnKS4KKwkrIG1vZGlmeSB0cHV0IHRvIGFjY2VwdCB0ZXJtY2FwIG5hbWVzIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRlcm1pbmZvCisJICBuYW1lcyAocGF0Y2ggYnkgSmVmZnJleSBDIEhvbmlnKS4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIHRlcm0uNyAoVG9kZCBDIE1pbGxlcikuCisJKyBhZGQgY29uZmlndXJlIC0td2l0aC1zaGxpYi12ZXJzaW9uIG9wdGlvbiB0byBhbGxvdyBpbnN0YWxsaW5nIHNoYXJlZAorCSAgbGlicmFyaWVzIG5hbWVkIGFjY29yZGluZyB0byByZWxlYXNlIG9yIEFCSSB2ZXJzaW9ucy4gIFRoaXMKKwkgIHBhcmFtZXRlcml6ZXMgc29tZSBleGlzdGluZyBsb2dpYyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCwgYW5kIGlzCisJICBpbnRlbmRlZCBmb3IgY29tcGF0aWJsaXR5IHVwZ3JhZGVzIG9uIERpZ2l0YWwgVW5peCwgd2hpY2ggdXNlZAorCSAgdmVyc2lvbmVkIGxpYnJhcmllcyBpbiBuY3Vyc2VzIDQuMiwgYnV0IG5vIGxvbmdlciBkb2VzIChjZjogIDk4MDQyNSkuCisJKyByZXN5bmMgY29uZmlndXJlIHNjcmlwdCBhZ2FpbnN0IGF1dG9jb25mIDIuMTMgKyBwYXRjaGVzCisJKyBtaW5vciBpbXByb3ZlbWVudHMgZm9yIHRlcmF0ZXJtIHRlcm1pbmZvIGVudHJ5IGJhc2VkIG9uIHRoZSBwcm9ncmFtJ3MKKwkgIHNvdXJjZSBkaXN0cmlidXRpb24uCisKKzk5MDExNgorCSsgY2hhbmdlIGRlZmF1bHQgZm9yIGNvbmZpZ3VyZSAtLWVuYWJsZS1iaWctY29yZSB0byBhc3N1bWUgbWFjaGluZXMgZG8KKwkgIGhhdmUgZW5vdWdoIG1lbW9yeSB0byByZXNvbHZlIHRlcm1pbmZvLnNyYyBpbi1tZW1vcnkuCisJKyBjb3JyZWN0IG5hbWUgb2YgbmN1cnNlcyBsaWJyYXJ5IGluIFRFU1RfQVJHUyB3aGVuIGNvbmZpZ3VyaW5nIHdpdGgKKwkgIGRlYnVnIGxpYnJhcnkuCisJKyBtaW5vciBmaXhlcyB0byBjb21waWxlIG5jdXJzZXMgbGlicmFyeSB3aXRoIGJyb2tlbi1saW5rZXIgd2l0aCBnKysuCisJKyBhZGQgLS1lbmFibGUtYnJva2VuLWxpbmtlciBjb25maWd1cmUgb3B0aW9uLCBkZWZhdWx0IHRvIGVudmlyb25tZW50CisJICB2YXJpYWJsZSAkQlJPS0VOX0xJTktFUiAocmVxdWVzdCBieSBKZWZmcmV5IEMgSG9uaWcpLgorCSsgY2hhbmdlIGtleV9uYW1lc1tdIGFycmF5IHRvIHN0YXRpYyBzaW5jZSBpdCBpcyBub3QgcGFydCBvZiB0aGUgY3Vyc2VzCisJICBpbnRlcmZhY2UgKHJlcG9ydGVkIGJ5IEplZmZyZXkgQyBIb25pZyA8amNoQGJzZGkuY29tPikuCisKKzk5MDExMAorCSsgYWRkIFRlcmEgVGVybSB0ZXJtaW5mbyBlbnRyeSAtIFRECisKKzk5MDEwOQorCSsgcmV2aWV3ZWQvY29ycmVjdGVkIG1hY3JvcyBpbiBjdXJzZXMuaCBhcyBwZXIgWFNJIGRvY3VtZW50LgorCSsgcHJvdmlkZSBzdXBwb3J0IGZvciB0ZXJtY2FwIFBDIHZhcmlhYmxlIGJ5IGNvcHlpbmcgaXQgZnJvbSB0ZXJtaW5mbworCSAgZGF0YSBhbmQgdXNpbmcgaXQgYXMgdGhlIHBhZGRpbmcgY2hhcmFjdGVyIGluIHRwdXRzIChyZXBvcnRlZCBieQorCSAgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgY29ycmVjdGVkIGlyaXMtYW5zaSBhbmQgaXJpcy1hbnNpLWFwIHRlcm1pbmZvIGVudHJpZXMgZm9yIGtlbnQgYW5kCisJICBrZjkta2YxMiBjYXBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIGtjYnQuCisJKyBkb2N1bWVudCB0aGUgbW91c2UgaGFuZGxpbmcgbWVjaGFuaXNtIGluIG1lbnVfZHJpdmVyIGFuZCBtYWtlIGEgc21hbGwKKwkgIGNoYW5nZSBpbiBtZW51X2RyaXZlcidzIHJldHVybiBjb2RlcyB0byBwcm92aWRlIG1vcmUgY29uc2lzdGVuY3kKKwkgIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCSsgYWRkIGZhbGxiYWNrIGRlZmluaXRpb24gZm9yIE5DVVJTRVNfQ09OU1QgdG8gdGVybWNhcC5oLmluIChyZXBvcnRlZAorCSAgYnkgVWNoaXlhbWEgWWFzdXNoaSA8dWNoQG5vcC5vci5qcD4pLgorCSsgbW92ZSBsaWJfcmVzdGFydC5jIHRvIG5jdXJzZXMvYmFzZSwgc2luY2UgaXQgdXNlcyBjdXJzZXMgZnVuY3Rpb25zCisJICBkaXJlY3RseSwgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgdXNlZCBpbiBsaWJ0aW5mby5zbworCSsgcmVuYW1lIG1pY3JvX2NoYXJfc2l6ZSB0byBtaWNyb19jb2xfc2l6ZSwgYWRkaW5nICNkZWZpbmUgdG8gcmV0YWluCisJICBvbGQgbmFtZS4KKwkrIGFkZCBzZXRfYV9hdHRyaWJ1dGVzIGFuZCBzZXRfcGdsZW5faW5jaCB0byB0ZXJtaW5mbyBzdHJ1Y3R1cmUsIGFzIHBlcgorCSAgWFNJIGFuZCBTb2xhcmlzIDIuNS4KKwkrIG1pbm9yIG1ha2VmaWxlIGZpbGVzIHRvIGJ1aWxkIG5jdXJzZXMgdGVzdF9wcm9ncworCSsgdXBkYXRlIGh0bWwgZmlsZXMgaW4gbWlzYyBkaXJlY3RvcnkgdG8gcmVmbGVjdCBjaGFuZ2VzIHNpbmNlIDQuMgorCis5OTAxMDIKKwkrIGRpc2FibGUgc2Nyb2xsIGhpbnRzIHdoZW4gaGFzaG1hcCBpcyBlbmFibGVkIChwYXRjaCBieSBBbGV4YW5kZXIKKwkgIFYgTHVreWFub3YpLgorCSsgbW92ZSBsb2dpYyBmb3IgdGljJ3MgdmVyaWZ5IG9mIC1lIG9wdGlvbiB2ZXJzdXMgLUkgYW5kIC1DIHNvIHRoYXQgdGhlCisJICB0ZXJtaW5mbyBkYXRhIGlzIG5vdCBwcm9jZXNzZWQgaWYgd2UgY2Fubm90IGhhbmRsZSAtZSAocmVwb3J0ZWQgYnkKKwkgIFN0ZXZlbiBTY2h3YXJ0eiA8c3RldmVzQHVuaXRyZW5kcy5jb20+LgorCSsgYWRkIHRlc3QtZHJpdmVyIHRyYWNlcyB0byB0ZXJtaW5mbyBhbmQgdGVybWNhcCBmdW5jdGlvbnMuCisJKyBwcm92aWRlIHN1cHBvcnQgZm9yIHRlcm1jYXAgb3NwZWVkIHZhcmlhYmxlIGJ5IGNvcHlpbmcgaXQgZnJvbSB0aGUKKwkgIGludGVybmFsIGN1cl90ZXJtIG1lbWJlciwgYW5kIHVzaW5nIG9zcGVlZCBhcyB0aGUgYmF1ZHJhdGUgcmVmZXJlbmNlCisJICBmb3IgdGhlIGRlbGF5X291dHB1dCBhbmQgdHB1dHMgZnVuY3Rpb25zLiAgSWYgYW4gYXBwbGljYXRpb24gZG9lcyBub3QKKwkgIHNldCBvc3BlZWQsIHRoZSBsaWJyYXJ5IGJlaGF2ZXMgYXMgYmVmb3JlLCBleGNlcHQgdGhhdCBfbmNfdGltZWRfd2FpdAorCSAgaXMgbm8gbG9uZ2VyIHVzZWQsIG9yIG5lZWRlZCwgc2luY2Ugb3NwZWVkIGFsd2F5cyBoYXMgYSB2YWx1ZS4gIEJ1dAorCSAgdGhlIGFwcGxpY2F0aW9uIGNhbiBtb2RpZnkgb3NwZWVkIHRvIGFkanVzdCB0aGUgb3V0cHV0IG9mIHBhZGRpbmcKKwkgIGNoYXJhY3RlcnMgKHByb21wdGVkIGJ5IGEgYnVnIHJlcG9ydCBmb3Igc2NyZWVuIDMuNy42IGFuZCBlbWFpbCBmcm9tCisJICBNaWNoYWVsIFNjaHJvZWRlciA8TWljaGFlbC5TY2hyb2VkZXJAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+KS4KKwkrIHJlbW92ZWQgc29tZSB1bnVzZWQgaWZkZWYncyBhcyBwYXJ0IG9mIEFsZXhhbmRlcidzIHJlc3RydWN0dXJpbmcuCisJKyByZXZpZXdlZC91cGRhdGVkIGN1cnNlcy5oLCB0ZXJtLmggYWdhaW5zdCBYL09wZW4gQ3Vyc2VzIElzc3VlIDQKKwkgIFZlcnNpb24gMi4gIFRoaXMgaW5jbHVkZXMgbWFraW5nIHNvbWUgcGFyYW1ldGVycyBOQ1VSU0VTX0NPTlNUCisJICByYXRoZXIgdGhhbiBjb25zdCwgZS5nLiwgaW4gdGVybWNhcC5oLgorCSsgY2hhbmdlIGxpbnV4IHRlcm1pbmZvIGVudHJ5IHRvIHVzZSBuY3YjMiwgc2luY2UgdW5kZXJsaW5lIGRvZXMgbm90CisJICB3b3JrIHdpdGggY29sb3IKKworOTgxMjI2CisJKyBtaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGZvciBjdXJzZXMuaCB0byBtYXRjaCBYU0kuCisJKyBjaGFuZ2UgLS1lbmFibGUtbm8tcGFkZGluZyBjb25maWd1cmUgb3B0aW9uIHRvIGJlIG5vcm1hbGx5IGVuYWJsZWQuCisJKyBhZGQgc2VjdGlvbiB0byBuY3Vyc2VzIG1hbnBhZ2UgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwkrIGludmVzdGlnYXRlZCBEZWJpYW4gYnVnIHJlcG9ydCB0aGF0IHBlcnRhaW5zIHRvIHNjcmVlbiAzLjcuNC8zLjcuNgorCSAgY2hhbmdlcywgZm91bmQgbm8gc2lnbiBvZiBwcm9ibGVtcyBvbiBMaW51eCAob3Igb24gU3VuT1MsIFNvbGFyaXMpCisJICBydW5uaW5nIHNjcmVlbiBidWlsdCB3aXRoIG5jdXJzZXMuCisJKyBjaGVjayBpZiB0bXBfZnAgaXMgb3BlbmVkIGluIHRpYy5jIGJlZm9yZSBjbG9zaW5nIGl0IChwYXRjaCBieSBQYXZlbAorCSAgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4pLgorCSsgY29ycmVjdCBzZXZlcmFsIGZvbnQgc3BlY2lmaWNhdGlvbiB0eXBvcyBpbiBtYW4tcGFnZXMuCisKKzk4MTIyMAorCSsgY29ycmVjdCBkZWZhdWx0IHZhbHVlIGZvciBCVUlMRF9DQyAocmVwb3J0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKworOTgxMjE5CisJKyBtb2RpZnkgX25jX3NldF93cml0ZWRpcigpIHRvIHNldCBhIGZsYWcgaW4gX25jX3RpY19kaXIoKSB0byBwcmV2ZW50CisJICBpdCBmcm9tIGNoYW5naW5nIHRoZSB0ZXJtaW5mbyBkaXJlY3RvcnkgYWZ0ZXIgY2hkaXInaW5nIHRvIGl0LgorCSAgT3RoZXJ3aXNlLCBhIHJlbGF0aXZlIHBhdGggaW4gJFRFUk1JTkZPIHdvdWxkIGNvbmZ1c2UgdGljIChwcm9tcHRlZAorCSAgYnkgYSBEZWJpYW4gYnVnIHJlcG9ydCkuCisJKyBjb3JyZWN0L3VwZGF0ZSBuY3NhIHRlcm1pbmZvIGVudHJ5IChyZXBvcnQgYnkgTGFycnkgVmlyZGVuKS4KKwkrIHVwZGF0ZSB4dGVybS14ZnJlZTg2IHRlcm1pbmZvIHRvIGN1cnJlbnQgKHBhdGNoIDkwKSwgc21jdXIvcm1jdXIKKwkgIGNoYW5nZXMKKwkrIGFkZCBNYXRoZXcgVmVybm9uJ3MgbWFjaCBjb25zb2xlIGVudHJpZXMgdG8gdGVybWluZm8uc3JjCisJKyBtb3JlIGNoYW5nZXMsIG1vdmluZyBmdW5jdGlvbnMsIGFzIHBhcnQgb2YgQWxleGFuZGVyJ3MgcmVzdHJ1Y3R1cmluZy4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IGZvciBHTlUvSHVyZCBzaGFyZS1saWJyYXJ5IHN1cHBvcnQsIGludHJvZHVjZQorCSAgQlVJTERfQ0MgdmFyaWFibGUgZm9yIGNyb3NzIGNvbXBpbGluZyAocGF0Y2ggYnkgVWNoaXlhbWEgWWFzdXNoaQorCSAgPHVjaEBub3Aub3IuanA+KQorCis5ODEyMTIKKwkrIGFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBOQ1VSU0VTX05PX1NFVEJVRiB0byBhbGxvdyBkaXNhYmxpbmcgdGhlCisJICBzZXRidWYgZmVhdHVyZSwgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJKyBjb3JyZWN0IGlmZGVmJ3MgZm9yIHRlcm1jYXAuaCB2ZXJzdXMgdGVybS5oIHRoYXQgc3VwcHJlc3MgcmVkdW5kYW50CisJICBkZWNsYXJhdGlvbnMgb2YgcHJvdG90eXBlcyAocmVwb3J0ZWQgYnkgSC5KLkx1KS4KKwkrIG1vZGlmeSBNYWtlZmlsZS5vczIgdG8gYWRkIGxpbmtlciBmbGFncyB3aGljaCBhbGxvdyBtdWx0aXBsZSBjb3BpZXMKKwkgIG9mIGFuIGFwcGxpY2F0aW9uIHRvIGNvZXhpc3QgKHJlcG9ydGVkIGJ5IElseWEgWmFraGFyZXZpY2gpLgorCSsgdXBkYXRlIE1ha2VmaWxlLmdsaWJjIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCBuY3Vyc2VzCisJICBidWlsZHMgYXMgYSBnbGliYyBhZGQtb24gd2l0aCB0aGUgbmV3IGRpcmVjdG9yeSBjb25maWd1cmF0aW9uCisJICAocmVwb3J0ZWQgYnkgSC5KLkx1KS4KKworOTgxMjA1CisJKyBtb2RpZnkgZ2VuX3JlcHMoKSBmdW5jdGlvbiBpbiBnZW4uYyB0byB3b3JrIHByb3Blcmx5IG9uIFN1bk9TCisJICAoc3BhcmMpLCB3aGljaCBpcyBhIGxlZnQtdG8tcmlnaHQgYXJjaGl0ZWN0dXJlLgorCSsgbW9kaWZ5IHJlbGF0aXZlX21vdmUgYW5kIHRwdXRzIHRvIGF2b2lkIGFuIGludGVyYWN0aW9uIHdpdGggdGhlCisJICBCU0Qtc3R5bGUgcGFkZGluZy4gIFRoZSByZWxhdGl2ZV9tb3ZlIGZ1bmN0aW9uIGNvdWxkIHByb2R1Y2UgYSBzdHJpbmcKKwkgIHRvIHJlcGxhY2Ugb24gdGhlIHNjcmVlbiB3aGljaCBiZWdhbiB3aXRoIGEgbnVtZXJpYyBjaGFyYWN0ZXIsIHdoaWNoCisJICB3YXMgdGhlbiBpbnRlcnByZXRlZCBieSB0cHV0cyBhcyBwYWRkaW5nLiAgTm93IHJlbGF0aXZlX21vdmUgd2lsbCBub3QKKwkgIGdlbmVyYXRlIGEgc3RyaW5nIHdpdGggYSBsZWFkaW5nIGRpZ2l0IGluIHRoYXQgY2FzZSAob3ZlcndyaXRlKS4KKwkgIEFsc28sIHRwdXRzIHdpbGwgb25seSBpbnRlcnByZXQgcGFkZGluZyBpZiB0aGUgc3RyaW5nIGJlZ2lucyB3aXRoIGEKKwkgIGRpZ2l0OyBhcyBjb2RlZCBpdCBwZXJtaXR0ZWQgYSBzdHJpbmcgdG8gYmVnaW4gd2l0aCBhIGRlY2ltYWwgcG9pbnQKKwkgIG9yIGFzdGVyaXNrIChyZXBvcnRlZCBieSBMYXJyeSBWaXJkZW4pLgorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmaXggYSB0eXBvIGluIG1fZHJpdmVyLmMgbW91c2UgaGFuZGxpbmcgYW5kIGltcHJvdmVzIHRoZSBlcnJvcgorCSAgaGFuZGxpbmcuCisJKyBmaXggYnJva2VuIG1vdXNlIGhhbmRsaW5nIGluIHRoZSBBZGE5NSBiaW5kaW5nCisJKyBtYWtlIHRoZSBBZGE5NSBzYW1wbGUgYXBwbGljYXRpb24gbWVudXMgd29yayB3aXRoIHRoZSBuZXcgbWVudSBtb3VzZQorCSAgc3VwcG9ydAorCSsgaW1wcm92ZSB0aGUgbW91c2UgaGFuZGxpbmcgaW50cm9kdWNlZCBieSBJbHlhOyBpdCBub3cgaGFuZGxlcyBtZW51cworCSAgd2l0aCBzcGFjaW5nLgorCSsgcmVwYWlyIGEgbWlub3IgYnVnIGluIHRoZSBtZW51X2RyaXZlciBjb2RlIGRpc2NvdmVyZWQgZHVyaW5nIHRoaXMKKwkgIHJld29yay4KKwkrIGFkZCBuZXcgZnVuY3Rpb24gd21vdXNlX3RyYWZvKCkgdG8gaGlkZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mCisJICBfeW9mZnNldCBtZW1iZXIgb2YgV0lORE9XIHN0cnVjdCBuZWVkZWQgZm9yIG1vdXNlIGNvb3JkaW5hdGUKKwkgIHRyYW5zZm9ybWF0aW9uLgorCis5ODExMjgKKwkrIG1vZGlmeSBBZGE5NS9nZW4vZ2VuLmMgdG8gYXZvaWQgdXNpbmcgcmV0dXJuLXZhbHVlIG9mIHNwcmludGYsIHNpbmNlCisJICBzb21lIG9sZGVyIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgU3VuT1MgNC54KSByZXR1cm4gdGhlIGJ1ZmZlcgorCSAgYWRkcmVzcyByYXRoZXIgdGhhbiBpdHMgbGVuZ3RoLgorCT4gcGF0Y2ggYnkgUmljayBPaG5lbXVzOgorCSsgbW9kaWZ5IGRlbW8uY2MgdG8gZ2V0IGl0IHRvIGNvbXBpbGUgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBlZ2NzLgorCSsgdHJpbSBhIHNwYWNlIHRoYXQgYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZSB0YWJsZSBwcmVwcm9jZXNzb3IgbGluZXMKKwkgICgnXCIgdCkuICBUaGlzIHNwYWNlIHByZXZlbnRzIHNvbWUgdmVyc2lvbnMgb2YgbWFuIGZyb20gZGlzcGxheWluZworCSAgdGhlIHBhZ2VzIC0gY2hhbmdlZCB0byByZW1vdmUgYWxsIHRyYWlsaW5nIHdoaXRlc3BhY2UgKFREKQorCSsgZmluYWxseSwgJ21ha2UgY2xlYW4nIGRvZXMgbm90IHJlbW92ZSBwYW5lbCBvYmplY3RzLgorCT4gcGF0Y2hlcyBieSBJbHlhIFpha2hhcmV2aWNoOgorCSsgYWxsb3cgcmVtYXBwaW5nIG9mIE9TLzIgbW91c2UgYnV0dG9ucyB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZQorCSAgTU9VU0VfQlVUVE9OU18xMjMgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSAxMzIuCisJKyBhZGQgbW91c2Ugc3VwcG9ydCB0byBuY3Vyc2VzIG1lbnVzLgorCis5ODExMjEKKwkrIG1vZGlmeSBtaXNjL21ha2VkZWYuY21kIHRvIHJlcG9ydCBvbGQtc3R5bGUgLmRlZiBmaWxlIHN5bWJvbHMsIGFuZCB0bworCSAgZ2VuZXJhdGUgdGhlIC5kZWYgZmlsZXMgc29ydGVkIGJ5IGluY3JlYXNpbmcgbmFtZXMgcmF0aGVyIHRoYW4gdGhlCisJICByZXZlcnNlLgorCSsgYWRkIG1pc2MvKi5yZWYgd2hpY2ggYXJlIEouSi5HLlJpcG9sbCdzIGRsbCBkZWZpbml0aW9uIGZpbGVzIChyZW5hbWVkCisJICBmcm9tIG1pc2MvKi5vbGQpLCBhbmQgdXBkYXRlZCBiYXNlZCBvbiB0aGUgZW50cnlwb2ludCBjb2RpbmcgaGUgdXNlZAorCSAgZm9yIGFuIG9sZGVyIHZlcnNpb24gb2YgbmN1cnNlcy4KKwkrIGFkZCBSRUFETUUuZW14LCB0byBkb2N1bWVudCBob3cgdG8gYnVpbGQgb24gT1MvMiBFTVguCisJKyB1cGRhdGVzIGZvciBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgZnJvbSBMeW54CisJPiBwYXRjaGVzIGJ5IElseWEgWmFraGFyZXZpY2g6CisJKyBtaW5vciBmaXhlcyBmb3IgbW91c2UgaGFuZGxpbmcgbW9kZToKKwkgIGEpIERvIG5vdCBpbml0aWFsaXplIG1vdXNlIGlmIHRoZSByZXF1ZXN0IGlzIHRvIGhhdmUgbm8gbW91c2U7CisJICBiKSBBbGxvdyBzd2l0Y2hpbmcgb2YgT1MvMiBWSU8gbW91c2Ugb24gYW5kIG9mZi4KKwkrIG1vZGlmeSBNYWtlZmlsZS5vczIgdG8gc3VwcG9ydCBhbHRlcm5hdGl2ZSBtZWFucyBvZiBnZW5lcmF0aW5nCisJICBjb25maWd1cmUgc2NyaXB0LCBieSB0cmFuc2xhdGluZyBVbml4IHNjcmlwdCB3aXRoIFBlcmwuCisJPiBwYXRjaGVzIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIFVwZGF0ZXMgTUFOSUZFU1QgdG8gcmVmbGVjdCBjaGFuZ2VzIGluIHNvdXJjZSBzdHJ1Y3R1cmUKKwkrIEVsaW1pbmF0ZXMgYSBwcm9ibGVtIGludHJvZHVjZWQgd2l0aCBteSBsYXN0IHBhdGNoIGZvciB0aGUgQysrCisJICBiaW5kaW5nIGluIHRoZSBwYW5lbHMgY29kZS4gIEl0IHJlbW92ZXMgdGhlIHVwZGF0ZSgpIGNhbGwgZG9uZSBpbiB0aGUKKwkgIHBhbmVsIGRlc3RydWN0b3IuCisJKyBDaGFuZ2VzIGluIHRoZSBBZGE5NSBiaW5kaW5nIHRvIGJldHRlciBzdXBwb3J0IHN5c3RlbXMgd2hlcmUKKwkgIHNpemVvZihjaHR5cGUpIT1zaXplb2YoaW50KSAoZS5nLiAgREVDIEFscGhhKS4KKworOTgxMTE0CisJKyBtb2RpZnkgaW5zdGFsbC1zY3JpcHQgZm9yIG1hbnBhZ2VzIHRvIHNraXAgb3ZlciAub3JpZyBhbmQgLnJlaiBmaWxlcworCSAgKHJlcXVlc3QgYnkgTGFycnkgVmlyZGVuKS4KKwk+IHBhdGNoZXMvZGlzY3Vzc2lvbiBieSBBbGV4YW5kZXIgViBMdWt5YW5vdjoKKwkrIG1vdmUgYmFzZS1saWJyYXJ5IHNvdXJjZXMgaW50byBuY3Vyc2VzL2Jhc2UgYW5kIHR0eSAoc2VyaWFsIHRlcm1pbmFsKQorCSAgc291cmNlcyBpbnRvIG5jdXJzZXMvdHR5LCBhcyBwYXJ0IG9mIEFsZXhhbmRlciBWIEx1a3lhbm92J3MgcHJvcG9zZWQKKwkgIGNoYW5nZXMgdG8gbmN1cnNlcyBsaWJyYXJ5LgorCSsgY29weSBfdHJhY2Vtb3VzZSgpIGludG8gbmN1cnNlcy5jIHNvIHRoYXQgbGliX3RyYWNlbXNlLmMgbmVlZCBub3QKKwkgIGJlIGxpbmtlZCBpbnRvIHRoZSBub3JtYWwgbmN1cnNlcyBsaWJyYXJ5LgorCSsgbW92ZSBtYWNybyB3aW5jaCB0byBhIGZ1bmN0aW9uLCB0byBoaWRlIGRldGFpbHMgb2Ygc3RydWN0IGxkYXQKKwk+IHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgZml4IGEgcG90ZW50aWFsIGNvbXBpbGUgcHJvYmxlbSBpbiBjdXJzZXN3LmNjCisJKyBzb21lIEFkYTk1IGNvc21ldGljcworCSsgZml4IGEgZ2VuLmMgcHJvYmxlbSB3aGVuIGNvbXBpbGluZyBvbiA2NC1CaXQgbWFjaGluZXMKKwkrIGZpeCBBZGE5NS9nZW4vTWFrZWZpbGUuaW4gIi1MIiBsaW5rZXIgc3dpdGNoCisJKyBtb2RpZnkgQWRhOTUgbWFrZWZpbGVzIHRvIHVzZSB0aGUgSU5TVEFMTF9QUkVGSVggc2V0dGluZy4KKworOTgxMTA3CisJKyBpZmRlZidkIG91dCBsaWJfZnJlZWFsbC5jIHdoZW4gbm90IGNvbmZpZ3VyZWQuCisJKyByZW5hbWUgX3RyYWNlYml0cygpIHRvIF9uY190cmFjZWJpdHMoKS4KKwkrIG1vdmUgdGVybWluZm8tbGlicmFyeSBzb3VyY2VzIGludG8gbmN1cnNlcy90aW5mbywgYW5kIHRyYWNlLXN1cHBvcnQKKwkgIGZ1bmN0aW9ucyBpbnRvIG5jdXJzZXMvdHJhY2UgYXMgcGFydCBvZiBBbGV4YW5kZXIgViBMdWt5YW5vdidzCisJICBwcm9wb3NlZCBjaGFuZ2VzIHRvIG5jdXJzZXMgbGlicmFyeS4KKwkrIG1vZGlmeSBnZW5lcmF0ZWQgdGVybS5oIHRvIGFsd2F5cyBzcGVjaWZ5IGl0cyBvd24gZGVmaW5pdGlvbnMgZm9yCisJICBIQVZFX1RFUk1JT1NfSCwgZXRjLiwgdG8gZ3VhcmQgYWdhaW5zdCBpbmNsdXNpb24gYnkgcHJvZ3JhbXMgd2l0aAorCSAgYnJva2VuIGNvbmZpZ3VyZSBzY3JpcHRzLgorCis5ODEwMzEKKwkrIG1vZGlmeSB0ZXJtaW5mbyBwYXJzaW5nIHRvIGFjY2VwdCBvY3RhbCBhbmQgaGV4YWRlY2ltYWwgY29uc3RhbnRzLAorCSAgbGlrZSBTb2xhcmlzLgorCSsgcmVtb3ZlIGFuIGF1dG9jb25mIDIuMTAgYXJ0aWZhY3QgZnJvbSB0aGUgY29uZmlndXJlIHNjcmlwdCdzIGNoZWNrCisJICBmb3IgIi1nIiBjb21waWxlciBvcHRpb25zLiAgKFRob3VnaCBoYXJtbGVzcywgdGhpcyBjb25mdXNlZCBzb21lb25lCisJICBhdCBEZWJpYW4sIHdobyByZWNlbnRseSBpc3N1ZWQgYSBwYXRjaCB0aGF0IHJlc3VsdHMgaW4gdGhlIG9wcG9zaXRlCisJICBlZmZlY3QpLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWFkYS1jb21waWxlciB0byBhY2NvbW1vZGF0ZSBpbnN0YWxsYXRpb25zCisJICB0aGF0IGRvIG5vdCB1c2UgZ2NjIGFzIHRoZSBkcml2ZXIgZm9yIEdOQVQgKHBhdGNoIGJ5IEp1ZXJnZW4KKwkgIFBmZWlmZXIpLgorCis5ODEwMTcKKwkrIGVuc3VyZSAuL21hbiBleGlzdHMgaW4gY29uZmlndXJlIHNjcmlwdCwgbmVlZGVkIHdoZW4gY29uZmlndXJpbmcKKwkgIHdpdGggLS1zcmNkaXIgb3B0aW9uLgorCSsgbW9kaWZ5IGluZm9jbXAgIi1yIiBvcHRpb24gdG8gcmVtb3ZlIGxpbWl0IG9uIGZvcm1hdHRlZCB0ZXJtY2FwCisJICBvdXRwdXQsIHdoaWNoIG1ha2VzIGl0IG1vcmUgbGlrZSBTb2xhcmlzJyB2ZXJzaW9uLgorCSsgbW9kaWZ5IGNhcHRvaW5mbyB0byB0cmVhdCBuby1hcmd1bWVudCBjYXNlIG1vcmUgbGlrZSBTb2xhcmlzJworCSAgdmVyc2lvbiwgd2hpY2ggdXNlcyB0aGUgY29udGVudHMgb2YgJFRFUk1DQVAgYXMgdGhlIGVudHJ5IHRvIGZvcm1hdC4KKwkrIG1vZGlmeSBtay0ybmQuYXdrIHRvIGhhbmRsZSBzdWJkaXJlY3RvcmllcywgZS5nLiwgbmN1cnNlcy90dHkKKwkgIChwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisKKzk4MTAxMAorCSsgbW9kaWZ5IC0td2l0aC10ZXJtaW5mby1kaXJzIG9wdGlvbiBzbyB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZQorCSAgJHtkYXRhZGlyfSB2YWx1ZSwgdW5sZXNzICRURVJNSU5GT19ESVJTIGlzIGFscmVhZHkgc2V0LiAgVGhpcyBnZXRzCisJICByaWQgb2YgYSBoYXJkY29kZWQgbGlzdCBvZiBjYW5kaWRhdGUgZGlyZWN0b3JpZXMgaW4gdGhlIGNvbmZpZ3VyZQorCSAgc2NyaXB0LgorCSsgYWRkIHNvbWUgZXJyb3ItY2hlY2tpbmcgdG8gX25jX3JlYWRfZmlsZV9lbnRyeSgpIHRvIGVuc3VyZSB0aGF0CisJICBzdHJpbmdzIGFyZSBwcm9wZXJseSB0ZXJtaW5hdGVkIChUb2RkIEMgTWlsbGVyKS4KKwkrIHJlbmFtZSBtYW5wYWdlIGZpbGUgY3Vyc19zY3JfZG1wLjN4IHRvIGN1cnNfc2NyX2R1bXAuM3gsIHRvCisJICBjb3JyZXNwb25kIHdpdGggY29udGVudHMgKHJlcG9ydGVkIGJ5IE5laWwgWmFuZWxsYQorCSAgPG56YW5lbGxhQGNzLm11bi5jYT4pLgorCSsgcmVtb3ZlIHJlZHVuZGFudCBjb25maWd1cmUgY2hlY2sgZm9yIEMrKyB3aGljaCBkaWQgbm90IHdvcmsgd2hlbiAkQ1hYCisJICB3YXMgc3BlY2lmaWVkIHdpdGggYSBmdWxsIHBhdGhuYW1lIChyZXBvcnRlZCBieSBBbmRyZWFzIEphZWdlcikuCisJKyBjb3JyZWN0ZWQgYmNvcHkvbWVtbW92ZSBjaGVjazsgdGhlIG1hY3JvIHdhcyBub3Qgc3RhbmRhbG9uZS4KKworOTgxMDAzCisJKyByZW1vdmUgdW5uZWNlc3NhcnkgcG9ydGlvbiBvZiBPUy8yIEVNWCBtb3VzZSBjaGFuZ2UgZnJvbQorCSAgY2hlY2tfcGVuZGluZygpIChyZXBvcnRlZCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisKKzk4MDkyNgorCSsgaW1wbGVtZW50IG1vdXNlIHN1cHBvcnQgZm9yIE9TLzIgRU1YIChhZGFwdGVkIGZyb20gcGF0Y2ggYWdhaW5zdAorCSAgNC4yKD8pIGJ5IElseWEgWmFraGFyZXZpY2gpLgorCSsgYWRkIGNvbmZpZ3VyZS1jaGVjayBmb3IgYmNvcHkvbWVtbW92ZSwgZm9yIDk4MDkxOSBjaGFuZ2VzIHRvIGhhc2htYXAuCisJKyBtZXJnZSBEYXRhIEdlbmVyYWwgdGVybWluZm8gZnJvbSBIYXN1ZmluIDxoYXN1ZmluQHZpZG5ldC5uZXQ+IC0gVEQKKwkrIG1lcmdlIEFJWCAzLjIuNSB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgZm9yIElCTSB0ZXJtaW5hbHMsIHJlcGxhY2VzCisJICBzb21lIG9sZGVyIGVudHJpZXMgLSBURAorCSsgbW9kaWZ5IHRpYyB0byBjb21waWxlIGludG8gJSdjaGFyJyBmb3JtIGluIHByZWZlcmVuY2UgdG8gJXtudW1iZXJ9LAorCSAgc2luY2UgdGhhdCBpcyBhIGxpdHRsZSBtb3JlIGVmZmljaWVudC4KKwkrIG1pbm9yIGNvcnJlY3Rpb24gdG8gaW5mb2NtcCB0byBhdm9pZCBkaXNwbGF5aW5nICJkaWZmZXJlbmNlIiBiZXR3ZWVuCisJICB0d28gY2FwYWJpbGl0aWVzIHRoYXQgYXJlIHJlbmRlcmVkIGluIGVxdWl2YWxlbnQgZm9ybXMuCisJKyBhZGQgLWcgb3B0aW9uIHRvIHRpYy9pbmZvY21wIHRvIGZvcmNlIGNoYXJhY3RlciBjb25zdGFudHMgdG8gYmUKKwkgIGRpc3BsYXllZCBpbiBxdW90ZWQgZm9ybS4gIE90aGVyd2lzZSB0aGVpciBkZWNpbWFsIHZhbHVlcyBhcmUgc2hvd24uCisJKyBtb2RpZnkgc2V0dXB0ZXJtIHNvIHRoYXQgY2FuY2VsbGVkIHN0cmluZ3MgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMKKwkgIGFic2VudCBzdHJpbmdzLCBjYW5jZWxsZWQgYW5kIGFic2VudCBib29sZWFucyBmYWxzZSAoZG9lcyBub3QgYWZmZWN0CisJICB0aWMsIGluZm9jbXApLgorCSsgbW9kaWZ5IHRpYywgaW5mb2NtcCB0byBkaXNjYXJkIHJlZHVuZGFudCBpMywgcjMgc3RyaW5ncyB3aGVuIG91dHB1dAorCSAgdG8gdGVybWNhcCBmb3JtYXQuCisJPiBwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdjoKKwkrIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgdHBhcm0sIG5vdyBpdCB0YWtlcyAxOSUgaW5zdGVhZCBvZiAyNSUgd2hlbgorCSAgcHJvZmlsaW5nIHdvcm0uCisJKyByZW5hbWUgbWF4bGVuL21pbmxlbiB0byBwcmVjL3dpZHRoIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCisJKyB1c2UgZm9ybWF0IHN0cmluZyBmb3IgcHJpbnRpbmcgc3RyaW5ncy4KKwkrIHVzZSBsZW4gYXJndW1lbnQgY29ycmVjdGx5IGluIHNhdmVfdGV4dCwgYW5kIHBhc3MgaXQgdG8gc2F2ZV9udW1iZXIuCisKKzk4MDkxOQorCSsgbWFrZSB0ZXN0X3Byb2dzIGNvbXBpbGUgKGJ1dCBoYXNobWFwIGRvZXMgbm90IGZ1bmN0aW9uKS4KKwkrIGNvcnJlY3QgTkNfQlVGRkVSRUQgbWFjcm8sIHVzZWQgaW4gbGliX212Y3VyIHRlc3QtZHJpdmVyLCBtb2RpZnkKKwkgIGFzc29jaWF0ZWQgbG9naWMgdG8gYXZvaWQgZnJlZWluZyB0aGUgU1AtPl9zZXRidWYgZGF0YS4KKwkrIGFkZCBtb2R1bGVzIGhvbWVfdGVybWluZm8gYW5kIGdldGVudl9udW0gdG8gbGlidGluZm8uCisJKyBtb3ZlIHdyaXRlX2VudHJ5IHRvIGxpYnRpbmZvLCB0byB3b3JrIHdpdGggdGVybWNhcCBjYWNoaW5nLgorCSsgbWlub3IgZml4ZXMgdG8gYmx1ZS5jIHRvIGJ1aWxkIHdpdGggYXRhYy4KKwkrIHJlbW92ZSBzb2Z0c2Nyb2xsLmMgbW9kdWxlOyBubyBsb25nZXIgbmVlZGVkIGZvciB0ZXN0aW5nLgorCT4gcGF0Y2hlcyBieSBUb2RkIEMgTWlsbGVyOgorCSsgdXNlIHN0cnRvbCgzKSBpbnN0ZWFkIG9mIGF0b2koMykgd2hlbiBwYXJzaW5nIGVudiB2YXJpYWJsZXMgc28gd2UgY2FuCisJICBkZXRlY3QgYSBib2d1cyAobm9uLW51bWVyaWMpIHZhbHVlLgorCSsgY2hlY2sgZm9yIHRlcm1pbmFsIG5hbWVzID4gTUFYX05BTUVfU0laRSBpbiBhIGZldyBtb3JlIHBsYWNlcyB3aGVuCisJICBkZWFsaW5nIHdpdGggZW52IHZhcmlhYmxlcyBhZ2Fpbi4KKwkrIGZpeCBhIE1BWF9OQU1FX1NJWkUgdGhhdCBzaG91bGQgYmUgTUFYX05BTUVfU0laRSsxCisJKyB1c2Ugc2l6ZW9mIGluc3RlYWQgb2Ygc3RybGVuKDMpIG9uIFBSSVZBVEVfSU5GTyBzaW5jZSBpdCBpcyBhIGZpeGVkCisJICBzdHJpbmcgI2RlZmluZSAoY29tcGlsZSB0aW1lIHZzIHJ1bnRpbWUpLgorCSsgd2hlbiBzZXR0aW5nIGVycm5vIHRvIEVOT01FTSwgc2V0IGl0IHJpZ2h0IGJlZm9yZSB0aGUgcmV0dXJuLCBub3QKKwkgIGJlZm9yZSBjb2RlIHRoYXQgY291bGQsIHBvc3NpYmx5LCBzZXQgZXJybm8gdG8gYSBkaWZmZXJlbnQgdmFsdWUuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92OgorCSsgdXNlIGRlZmF1bHQgYmFja2dyb3VuZCBpbiB1cGRhdGVfY29zdF9mcm9tX2JsYW5rKCkKKwkrIGRpc2FibGUgc2Nyb2xsLWhpbnRzIHdoZW4gaGFzaG1hcCBpcyBjb25maWd1cmVkLgorCSsgaW1wcm92ZSBpbnRlZ3JhdGlvbiBvZiBoYXNobWFwIHNjcm9sbGluZyBjb2RlLCBieSBhZGRpbmcgb2xkaGFzaCBhbmQKKwkgIG5ld2hhc2ggZGF0YSB0byBTUCBzdHJ1Y3QuCisJKyBpbnZva2UgZGVsX2N1cnRlcm0gZnJvbSBkZWxzY3JlZW4uCisJKyBtb2RpZnkgZGVsX2N1cnRlcm0gdG8gc2V0IGN1cl90ZXJtIHRvIG51bGwgaWYgaXQgbWF0Y2hlcyB0aGUKKwkgIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIHdoaWNoIGlzIGRlbGV0ZWQuCisJKyBtb2RpZnkgbGliX2RvdXBkYXRlIHRvIHByZWZlciBwYXJtX2ljaCB0byB0aGUgZW50ZXJfaW5zZXJ0X21vZGUgYW5kCisJICBleGl0X2luc2VydF9tb2RlIGNvbWJpbmF0aW9uLCBhZGp1c3RpbmcgSW5zQ2hhckNvc3QgdG8gY2hlY2sKKwkgIGVudGVyX2luc2VydF9tb2RlLCBleGl0X2luc2VydF9tb2RlIGFuZCBpbnNlcnRfcGFkZGluZy4gIEFkZAorCSAgaW5zZXJ0X3BhZGRpbmcgaW4gaW5zZXJ0IG1vZGUgYWZ0ZXIgZWFjaCBjaGFyLiAgVGhpcyBhZGRzIG5ldyBjb3N0cworCSAgdG8gdGhlIFNQIHN0cnVjdC4KKworOTgwOTEyCisJKyBtb2RpZnkgdGVzdC1kcml2ZXIgaW4gbGliX212Y3VyLnMgdG8gdXNlIF9uY19zZXRidWZmZXIsIGZvcgorCSAgY29uc2lzdGVudCB0cmVhdG1lbnQuCisJKyBtb2RpZnkgbmN1cnNlcyB0byByZXN0b3JlIG91dHB1dCB0byB1bmJ1ZmZlcmVkIG9uIGVuZHdpbiwgYW5kIHJlc3VtZQorCSAgYnVmZmVyaW5nIGluIHJlZnJlc2ggKHNlZSBsaWJfc2V0X3Rlcm0uYyBhbmQgTkNfQlVGRkVSRUQgbWFjcm8pLgorCSsgY29ycmVjdGVkIEhUTUwgdmVyc2lvbiBudW1iZXJzIChhY2NvcmRpbmcgdG8gdGhlIFczQyB2YWxpZGF0b3IsIHRoZXkKKwkgIG5ldmVyIHdlcmUgSFRNTCAyLjAtY29tcGxpYW50LCBidXQgYXJlIGFjY2VwdGFibGUgMy4wKS4KKworOTgwOTA1CisJKyBtb2RpZnkgTUt0ZXJtaW5mby5zaCB0byBnZW5lcmF0ZSB0ZXJtaW5mby41IHdpdGggdGFibGVzIHNvcnRlZCBieQorCSAgY2FwYWJpbGl0eSBuYW1lLCBhcyBpbiBTVnI0LgorCSsgbW9kaWZpZWQgdGVybS5oLCB0ZXJtY2FwLmggaGVhZGVycyB0byBhdm9pZCByZWR1bmRhbnQgZGVjbGFyYXRpb25zLgorCSsgY2hhbmdlICd1X2ludCcgdHlwZSBpbiB0c2V0LmMgdG8gdW5zaWduZWQsIG1ha2luZyB0aGlzIGNvbXBpbGUgb24KKwkgIFNlcXVlbnQgUFJYIDQuMSAocmVwb3J0ZWQgYnkgTWljaGFlbCBTdGVycmV0dCA8bXN0ZXJyZXRAY29hdC5jb20+KS4KKworOTgwODI5CisJKyBjb3JyZWN0aW9ucyB0byBtYWlsaW5nIGFkZHJlc3NlcywgYW5kIG1vdmluZyB0aGUgbWFnaWMgbGluZSB0aGF0CisJICBjYXVzZXMgdGhlIG1hbiBwcm9ncmFtIHRvIGludm9rZSB0YmwgdG8gdGhlIGZpcnN0IGxpbmUgb2YgZWFjaAorCSAgbWFucGFnZSAocGF0Y2ggYnkgUmljayBPaG5lbXVzIDxyaWNrQGVjb21wY29uLmNvbT4pLgorCSsgYWRkIE1ha2VmaWxlLm9zMiBhbmQgc3VwcG9ydGluZyBzY3JpcHRzIHRvIGdlbmVyYXRlIGRsbCdzIG9uIE9TLzIgRU1YCisJICAoZnJvbSBKLkouRy5SaXBvbGwsIHdpdGggZnVydGhlciBpbnRlZ3JhdGlvbiBieSBURCkuCisJKyBjb3JyZWN0IGEgdHlwbyBpbiBpY2w2NDA0IHRlcm1pbmZvIGVudHJ5LgorCSsgYWRkIHh0ZXJtbSBhbmQgeHRlcm1jIHRlcm1pbmZvIGVudHJpZXMuCisJPiBmcm9tIGVzcidzIHRlcm1pbmZvIHZlcnNpb246CisJKyBBZGRlZCBGcmFuY2VzY28gUG90b3J0aSdzIHR1bmVkIFd5c2UgOTkgZW50cmllcy4KKwkrIGR0dGVybSBlbmFjcyAoZnJvbSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBBZGQgbmNzYS1ucywgbmNzYS1tLW5zIGFuZCBuY3NhLW0gZW50cmllcyBmcm9tIGVzciB2ZXJzaW9uLgorCis5ODA4MjIKKwkrIGRvY3VtZW50IEFUJlQgYWNzIGNoYXJhY3RlcnMgaW4gdGVybWluZm8uNSBtYW5wYWdlLgorCSsgdXNlIEVNWCBfc2Nyc2l6ZSgpIGZ1bmN0aW9uIGlmIHRlcm1pbmZvIGFuZCBlbnZpcm9ubWVudCBkbyBub3QKKwkgIGRlY2xhcmUgdGhlIHNjcmVlbiBzaXplIChyZXBvcnRlZCBieSBJbHlhIFpha2hhcmV2aWNoCisJICA8aWx5YUBtYXRoLm9oaW8tc3RhdGUuZWR1PikuCisJKyByZW1vdmUgc3B1cmlvdXMgJ1wnIGNoYXJhY3RlcnMgZnJvbSBldGVybSBhbmQgb3Nib3JuZSB0ZXJtaW5mbworCSAgZW50cmllcyAocHJvbXB0ZWQgYnkgYW4gb2xkIERlYmlhbiBidWcgcmVwb3J0KS4KKwkrIGNvcnJlY3QgcmV2ZXJzZWQgbWFsbG9jL3JlYWxsb2MgY2FsbHMgaW4gX25jX2RvYWxsb2MgKHJlcG9ydGVkIGJ5CisJICBIYW5zLUpvYWNoaW0gV2lkbWFpZXIgPGhqd2lkbWFpQGZveGJvcm8uY29tPikuCisJKyBjb3JyZWN0IG1pc3BsYWNlZCBwYXJlbnRoZXNpcyB3aGljaCBjYXVzZWQgZmlsZS1kZXNjcmlwdG9yIGZyb20KKwkgIG9wZW5pbmcgdGVybWNhcCB0byBiZSBsb3N0LCBmcm9tIDk4MDcyNSBjaGFuZ2VzIChyZXBvcnRlZCBieSBBbmRyZWFzCisJICBKYWVnZXIpLgorCis5ODA4MTUKKwkrIG1vZGlmeSBsaWJfc2V0dXAuYyB0byBlbGltaW5hdGUgdW5uZWVkZWQgaW5jbHVkZSBvZiA8c3lzL2lvY3RsLmg+CisJICB3aGVuIHRlcm1pb3MgaXMgbm90IHVzZWQgKHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXIpLgorCSsgYWRkIGZ1bmN0aW9uIF9uY19kb2FsbG9jLCB0byBlbnN1cmUgdGhhdCBmYWlsZWQgcmVhbGxvYyBjYWxscyBkbyBub3QKKwkgIGxlYWsgbWVtb3J5IChyZXBvcnRlZCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIGltcHJvdmVkIG5jc2EtdGVsbmV0IHRlcm1pbmZvIGVudHJ5LgorCis5ODA4MDkKKwkrIGNvcnJlY3QgbWlzc2luZyBicmFjZXMgYXJvdW5kIGEgdHJhY2Ugc3RhdGVtZW50IGluIHJlYWRfZW50cnkuYywKKwkgIGZyb20gOTgwODA4IChyZXBvcnRlZCBieSBLaW0gRGVWYXVnaG4gPGtpbWR2QGJlc3QuY29tPiBhbmQgTGl2aXUKKwkgIERhaWEpLgorCis5ODA4MDgKKwkrIGZpeCBtaXNzaW5nIGluY2x1ZGUgPGVycm5vLmg+IGluIGRpdHRvLmMgKHJlcG9ydGVkIGJ5IEJlcm5oYXJkCisJICBSb3NlbmtyYWVuemVyIDxiZXJvQGs1LnN1Y2tzLmV1Lm9yZz4pCisJKyBhZGQgTkNTQSB0ZWxuZXQgdGVybWluZm8gZW50cmllcyBmcm9tIEZyYW5jZXNjbyBQb3RvcnRpCisJICA8Ri5Qb3RvcnRpQGNudWNlLmNuci5pdD4sIGZyb20gRGViaWFuIGJ1ZyByZXBvcnRzLgorCSsgbWFrZSBoYW5kbGluZyBvZiAkTElORVMgYW5kICRDT0xVTU5TIHZhcmlhYmxlcyBtb3JlIGNvbXBhdGlibGUgd2l0aAorCSAgU29sYXJpcyBieSBhbGxvd2luZyB0aGVtIHRvIGluZGl2aWR1YWxseSBvdmVycmlkZSB0aGUgd2luZG93IHNpemUKKwkgIGFzIG9idGFpbmVkIHZpYSBpb2N0bC4KKworOTgwODAxCisJKyBtb2RpZnkgbGliX3ZpZGF0dHIuYyB0byBhbGxvdyBmb3IgdGVybWluYWwgdHlwZXMgKGUuZy4sIHh0ZXJtLWNvbG9yKQorCSAgd2hpY2ggbWF5IHJlc2V0IGFsbCBhdHRyaWJ1dGVzIGluIHRoZSAnb3AnIGNhcGFiaWxpdHksIHNvIHRoYXQgY29sb3JzCisJICBhcmUgc2V0IGJlZm9yZSB0dXJuaW5nIG9uIGJvbGQgYW5kIG90aGVyIGF0dHJpYnV0ZXMsIGJ1dCBzdGlsbCBhZnRlcgorCSAgdHVybmluZyBhdHRyaWJ1dGVzIG9mZi4KKwkrIGFkZCAnZGl0dG8uYycgdG8gdGVzdCBkaXJlY3RvcnkgdG8gaWxsdXN0cmF0ZSB1c2Ugb2YgbmV3dGVybSBmb3IKKwkgIGluaXRpYWxpemluZyBtdWx0aXBsZSBzY3JlZW5zLgorCSsgbW9kaWZ5IF9uY193cml0ZV9lbnRyeSgpIHRvIHJlY292ZXIgZnJvbSBmYWlsZWQgYXR0ZW1wdCB0byBsaW5rIGFsaWFzCisJICBmb3IgYSB0ZXJtaW5mbyBvbiBhIGZpbGVzeXN0ZW0gd2hpY2ggZG9lcyBub3QgcHJlc2VydmUgY2hhcmFjdGVyIGNhc2UKKwkgIChyZXBvcnRlZCBieSBQZXRlciBMIEpvcmRhbiA8UEpvcmRhbkBjaGxhLnVzYy5lZHU+KS4KKworOTgwNzI1CisJKyB1cGRhdGVkIHZlcnNpb25zIG9mIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiBiYXNlZCBvbiBhdXRvbWFrZSAxLjMKKwkrIGNoYW5nZSBuYW1lLWNvbXBhcmlzb25zIGluIGxpYl90ZXJtY2FwIHRvIGNvbXBhcmUgbm8gbW9yZSB0aGFuIDIKKwkgIGNoYXJhY3RlcnMgKGdsZWFuZWQgZnJvbSBEZWJpYW4gZGlzdHJpYnV0aW9uIG9mIDEuOS45Zy04LjgsIHZlcmlmaWVkCisJICB3aXRoIFNvbGFyaXMgY3Vyc2VzKS4KKwkrIGZpeCB0eXBvIGluIGN1cnNfaW5zc3RyLjN4IChwYXRjaCBieSBUb2RkIEMgTWlsbGVyKQorCSsgdXNlICdhY2Nlc3MoKScgdG8gY2hlY2sgaWYgbmN1cnNlcyBsaWJyYXJ5IHNob3VsZCBiZSBwZXJtaXR0ZWQgdG8KKwkgIG9wZW4gb3IgbW9kaWZ5IGZpbGVzIHdpdGggZm9wZW4vb3Blbi9saW5rL3VubGluay9yZW1vdmUgY2FsbHMsIGluCisJICBjYXNlIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgaW4gc2V0dWlkIG1vZGUgKHJlcXVlc3QgYnkKKwkgIENyaXN0aWFuIEdhZnRvbiA8Z2FmdG9uQHJlZGhhdC5jb20+LCByZXNwb25kaW5nIHRvIER1bmNhbiBTaW1wc29uCisJICA8ZHBzQGlvLnN0YXJnYXRlLmNvLnVrPikuCisJKyBhcm0xMDAgdGVybWluZm8gZW50cmllcyBmcm9tIERhdmUgTWlsbGVuIDxkbWlsbEBnbG9iYWxuZXQuY28udWs+KS4KKwkrIHFueHQyIGFuZCBtaW5pdGVsIHRlcm1pbmZvIGVudHJpZXMgZnJvbSBlc3IncyB2ZXJzaW9uLgorCis5ODA3MTgKKwkrIHVzZSAtUiBvcHRpb24gd2l0aCBsZGNvbmZpZyBvbiBGcmVlQlNEIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHJlc2V0cworCSAgdGhlIHNlYXJjaCBwYXRoIHRvIC91c3IvbGliIChyZXBvcnRlZCBieSBEYW4gTmVsc29uKS4KKwkrIGFkZCAtc29uYW1lIG9wdGlvbiB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgb24gT3BlbkJTRCAyLngKKwkgIChyZXF1ZXN0IGJ5IFFpbmdMb25nKS4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9ucyAtLXdpdGgtbWFucGFnZS1mb3JtYXQgYW5kCisJICAtLXdpdGgtbWFucGFnZS1yZW5hbWVzIChyZXF1ZXN0IGJ5IFFpbmdMb25nKS4KKwkrIGNvcnJlY3QgY29udmVyc2lvbiBvZiBDQU5DRUxMRURfTlVNRVJJQyBpbiB3cml0ZV9vYmplY3QoKSwgd2hpY2ggd2FzCisJICBvbWl0dGluZyB0aGUgaGlnaC1vcmRlciBieXRlLCBwcm9kdWNpbmcgYSAyNTQgaW4gdGhlIGNvbXBpbGVkCisJICB0ZXJtaW5mby4KKwkrIG1vZGlmeSByZXR1cm4tdmFsdWVzIG9mIHRnZXRmbGFnLCB0Z2V0bnVtLCB0Z2V0c3RyLCB0aWdldGZsYWcsCisJICB0aWdldG51bSBhbmQgdGlnZXRzdHIgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMgKGdsZWFuZWQgZnJvbQorCSAgRGViaWFuIGRpc3RyaWJ1dGlvbiBvZiAxLjkuOWctOC44KS4KKwkrIG1vZGlmeSBfbmNfc3lzZXJyX2Fib3J0IHRvIGFib3J0IG9ubHkgd2hlbiBjb21waWxlZCBmb3IgZGVidWdnaW5nLAorCSAgb3RoZXJ3aXNlIHNpbXBseSBleGl0IHdpdGggYW4gZXJyb3IuCisKKzk4MDcxMQorCSsgbW9kaWZ5IEFkYTk1ICdnZW4nIHByb2dyYW0gdG8gdXNlIGFwcHJvcHJpYXRlIGxpYnJhcnkgc3VmZml4IChlLmcuLAorCSAgIl9nIiBmb3IgYSBkZWJ1ZyBidWlsZCkuCisJKyB1cGRhdGUgQWRhOTUgJ21ha2UgY2xlYW4nIHJ1bGUgdG8gaW5jbHVkZSBnZW5lcmljcyAuYWxpIGZpbGVzCisJKyBhZGQgYSBjb25maWd1cmUgdGVzdCB0byBlbnN1cmUgdGhhdCBpZiBHTkFUIGlzIGZvdW5kLCB0aGF0IGl0IGNhbgorCSAgY29tcGlsZS9saW5rIHdvcmtpbmcgQWRhOTUgcHJvZ3JhbS4KKwkrIGZsdXNoIG91dHB1dCBpbiBiZWVwIGFuZCBmbGFzaCBmdW5jdGlvbnMsIGZpeGluZyBhIHByb2JsZW0gd2l0aAorCSAgZ2V0c3RyIChwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikKKwkrIGZpeCBlZ2NzIDEuMC4yIHdhcm5pbmcgZm9yIGV0aXAuaCAocGF0Y2ggYnkgQ2hyaXMgSm9obnMpLgorCSsgY29ycmVjdCBpZmRlZi9icmFjZSBuZXN0aW5nIGluIGxpYl9zcHJpbnRmLmMgKHBhdGNoIGJ5IEJlcm5oYXJkCisJICBSb3NlbmtyYWVuemVyIDxiZXJvQFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4pLgorCSsgY29ycmVjdCB0eXBvIGluIHdhdHRyX2dldCBtYWNybyBmcm9tIDk4MDUwOSBmaXhlcyAocGF0Y2ggYnkgRGFuCisJICBOZWxzb24pLgorCis5ODA3MDQKKwkrIG1lcmdlIGNoYW5nZXMgZnJvbSBjdXJyZW50IFhGcmVlODYgeHRlcm0gdGVybWluZm8gZGVzY3JpcHRpb25zLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gJy0td2l0aG91dC1hZGEnLgorCSsgYWRkIGEgc21hcnQtZGVmYXVsdCBmb3IgdGVybWNhcCAnYWMnIHRvIHRlcm1pbmZvICdhY3NfY2hhcnMnIHdoaWNoCisJICBjb3JyZXNwb25kcyB0byB2dDEwMC4KKwkrIGNoYW5nZSB0cmFuc2xhdGlvbiBmb3IgdGVybWNhcCAncnMnIHRvIHRlcm1pbmZvICdyczInLCB3aGljaCBpcworCSAgdGhlIGRvY3VtZW50ZWQgZXF1aXZhbGVudCwgcmF0aGVyIHRoYW4gJ3JzMScuCisKKzk4MDYyNworCSsgc2xvdyAnd29ybScgZG93biBhIGxpdHRsZSwgZm9yIHZlcnkgZmFzdCBtYWNoaW5lcy4KKwkrIGNvcnJlY3RlZCBmaXJzdGNoYXIvbGFzdGNoYXIgY29tcHV0YXRpb24gaW4gbGliX2hsaW5lLmMKKwkrIHNpbXBsaWZ5IHNvbWUgZXhwcmVzc2lvbnMgd2l0aCBDSEFOR0VEX0NFTEwsIENIQU5HRURfUkFOR0UgYW5kCisJICBDSEFOR0VEX1RPX0VPTCBtYWNyb3MuCisJKyBtb2RpZnkgaW5pdF9wYWlyIHNvIHRoYXQgaWYgYSBjb2xvci1wYWlyIGlzIHJlaW5pdGlhbGl6ZWQsIHdlIHdpbGwKKwkgIHJlcGFpbnQgdGhlIGFyZWFzIG9mIHRoZSBzY3JlZW4gd2hvc2UgY29sb3IgY2hhbmdlcywgbGlrZSBTVnI0IGN1cnNlcworCSAgKHJlcG9ydGVkIGJ5IENocmlzdGlhbiBNYXVyZXIgPG1hdXJlckBpbmYuZnUtYmVybGluLmRlPikuCisJKyBtb2RpZnkgZ2V0c3l4L3NldHN5eCBtYWNyb3MgdG8gY29tcGx5IHdpdGggU1ZyNCBtYW4tcGFnZSB3aGljaAorCSAgc2F5cyB0aGF0IGxlYXZlb2soKSBhZmZlY3RzIHRoZWlyIGJlaGF2aW9yIChyZXBvcnQgYnkgRGFycnlsIE1pbGVzLAorCSAgcGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCis5ODA2MjAKKwkrIHJldmlldyB0ZXJtaW5mby41IGFnYWluc3QgU29sYXJpcyAyLjYgY3Vyc2VzIHZlcnNpb24sIGNvcnJlY3RlZAorCSAgc2V2ZXJhbCBtaW5vciBlcnJvcnMvb21pc3Npb25zLgorCSsgaW1wbGVtZW50IHRwYXJtICVsIGZvcm1hdC4KKwkrIGltcGxlbWVudCB0cGFybSBwcmludGYtc3R5bGUgd2lkdGggYW5kIHByZWNpc2lvbiBmb3IgJXMsICVkLCAleCwgJW8KKwkgIGFzIHBlciBYU0kuCisJKyBpbXBsZW1lbnQgdHBhcm0gZHluYW1pYyB2YXJpYWJsZXMgKHJlcG9ydGVkIGJ5IFhpYW9kYW4gVGFuZykuCisKKzk4MDYxMworCSsgdXBkYXRlIG1hbi1wYWdlIGZvciBmb3Igd2F0dHJfc2V0LCB3YXR0cl9nZXQgKGNmOiAgOTgwNTA5KQorCSsgY29ycmVjdCBsaW1pdHMgaW4gaGFzaHRlc3QsIHdoaWNoIHdvdWxkIGNhdXNlIG5vbnByaW50aW5nIGNoYXJhY3RlcnMKKwkgIHRvIGJlIHdyaXR0ZW4gdG8gbGFyZ2Ugc2NyZWVucy4KKwkrIGNvcnJlY3QgY29uZmlndXJlIHNjcmlwdCwgd2hlbiAtLXdpdGhvdXQtY3h4IHdhcyBzcGVjaWZpZWQ6ICB0aGUKKwkgIHdyb25nIHZhcmlhYmxlIHdhcyB1c2VkIGZvciBjZl9jdl90eXBlX29mX2Jvb2wuICBDb21waWxlcnMgdXAgdG8gZ2NjCisJICAyLjggdG9sZXJhdGVkIHRoZSBtaXNzaW5nICdpbnQnLgorCSsgcmVtb3ZlIHRoZSBoYXJkY29kZWQgbmFtZSAiZ2NjIiBmb3IgdGhlIEdOVSBBZGEgY29tcGlsZXIuICBUaGUKKwkgIGNvbXBpbGVyJ3MgbmFtZSBtaWdodCBiZSBzb21ldGhpbmcgbGlrZSAiZWdjcyIgKHBhdGNoIGJ5IEp1ZXJnZW4KKwkgIFBmZWlmZXIpLgorCSsgY29ycmVjdCBjdXJzX2FkZGNoLjN4LCB3aGljaCBpbXBsaWVkIHRoYXQgZWNob2NoYXIgY291bGQgZGlyZWN0bHkKKwkgIGRpc3BsYXkgY29udHJvbCBjaGFyYWN0ZXJzIChwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBmaXggdHlwb3MgaW4gbmN1cnNlcy1pbnRyby5odG1sIChwYXRjaCBieSBTaWRpayBJc2FuaQorCSAgPGlzYW5pQGNmaHQuaGF3YWlpLmVkdT4pCisKKzk4MDYwNgorCSsgYWRkIGNvbmZpZ3VyZSB0ZXN0IGZvciBjb25mbGljdGluZyB1c2Ugb2YgZXhjZXB0aW9uIGluIG1hdGguaCBhbmQKKwkgIG90aGVyIGhlYWRlcnMuCisJKyBtaW5vciBvcHRpbWl6YXRpb24gdG8gJ2hhc2goKScgZnVuY3Rpb24gaW4gaGFzaG1hcC5jLCByZWR1Y2VzIGl0cworCSAgdGltZSBieSAxMCUuCisJKyBjb3JyZWN0IGZvcm0gb2YgTERfU0hBUkVEX09QVFMgZm9yIEhQLVVYIDEwLnggKHBhdGNoIGJ5IFRpbSBNb29uZXkpLgorCSsgZml4IG1pc3NpbmcgcXVvdGVzIGZvciAncHJpbnQnIGluIE1LdW5jdHJsLmF3ayBzY3JpcHQgKHJlcG9ydGVkIGJ5CisJICBNaWhhaSBCdWRpdSA8bWloYWliQGdzNDEuc3AuY3MuY211LmVkdT4pLgorCT4gcGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3Y6CisJKyBjb3JyZWN0IHByb2JsZW0gb24gU29sYXJpcyAod2l0aCBwb2xsKCkgZnVuY3Rpb24pIHdoZXJlIGdldGNoIGNvdWxkCisJICBoYW5nIGluZGVmaW5pdGVseSBldmVuIGlmIHRpbWVvdXQoeCkgd2FzIGNhbGxlZC4gIFRoaXMgdHVybmVkIG91dCB0bworCSAgYmUgYmVjYXVzZSBtaWxsaXNlY29uZHMgd2FzIG5vdCB1cGRhdGVkIGJlZm9yZSAnZ290byByZXRyeScgaW4KKwkgIF9uY190aW1lZF93YWl0LgorCSsgc2ltcGxpZmllZCB0aGUgZnVuY3Rpb24gX25jX3RpbWVkX3dhaXQgYW5kIGZpeGVkIGFub3RoZXIgYnVnLCB3aGljaAorCSAgd2FzIHRoZSBhc3N1bXB0aW9uIG9mICFHT09EX1NFTEVDVCAmJiBIQVZFX0dFVFRJTUVPRkRBWSBpbiAqdGltZWxlZnQKKwkgIGFzc2lnbm1lbnQuCisJKyByZW1vdmVkIHRoZSBjeWNsZSBvbiBFSU5UUiwgYXMgaXQgc2VlbXMgdG8gYmUgdXNlbGVzcy4KKworOTgwNTMwCisJKyBhZGQgbWFrZWZpbGUtcnVsZSBmb3IgdGVzdC9rZXluYW1lcworCSsgbW9kaWZ5IHJ1bl90aWMuc2ggYW5kIHNobGliIHRvIGVuc3VyZSB0aGF0IHVzZXIncyAucHJvZmlsZSBkb2VzIG5vdAorCSAgb3ZlcnJpZGUgdGhlICRQQVRIIHVzZWQgdG8gcnVuIHRpYyAocGF0Y2ggYnkgVGltIE1vb25leSkuCisJKyByZXN0b3JlIExEX1NIQVJFRF9PUFRTIHRvICQoTERfU0hBUkVEX0ZMQUdTKSB3aGVuIGxpbmtpbmcgcHJvZ3JhbXMsCisJICBuZWVkZWQgZm9yIEhQLVVYIHNoYXJlZC1saWJyYXJ5IHBhdGggKHJlY29tbWVuZGVkIGJ5IFRpbSBNb29uZXkpLgorCSsgcmVtb3ZlIHNwZWNpYWwgY2FzZSBvZiBIUC1VWCAtTCBvcHRpb25zLCB1c2UgK2Igb3B0aW9ucyB0byBlbWJlZAorCSAgJChsaWJkaXIpIGluIHRoZSBzaGFyZWQgbGlicmFyaWVzIChyZWNvbW1lbmRlZCBieSBUaW0gTW9vbmV5KS4KKwkrIGFkZCBjaGVja3MgZm9yIHNvbWUgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93cyBhbmQgdW5jaGVja2VkCisJICBtYWxsb2MvcmVhbGxvYy9jYWxsb2Mvc3RyZHVwIHJldHVybiB2YWx1ZXMgKHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXIKKwkgIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPikKKworOTgwNTIzCisJKyBjb3JyZWN0IG1heHgvbWF4eSBleHByZXNzaW9uIGZvciBudW1fY29sdW1ucy9udW1fbGluZXMgaW4gZGVyd2luCisJICAocGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgYWRkIC91c3Ivc2hhcmUvbGliL3Rlcm1pbmZvIGFuZCAvdXNyL2xpYi90ZXJtaW5mbyBhcyBjb21wYXRpYmlsdHkKKwkgIGZhbGxiYWNrcyB0byBfbmNfcmVhZF9lbnRyeSgpLCBhbG9uZyB3aXRoIC0td2l0aC10ZXJtaW5mby1kaXJzCisJICBjb25maWd1cmUgb3B0aW9uIChzdWdnZXN0ZWQgYnkgTWlrZSBIb3BraXJrKS4KKwkrIG1vZGlmeSBjb25maWcuZ3Vlc3MgdG8gcmVjb2duaXplIFVuaXh3YXJlIDIuMSBhbmQgNyAocGF0Y2ggYnkgTWlrZQorCSAgSG9wa2lyayA8aG9wc0BzY28uY29tPikuCisJKyBzdXBwcmVzcyBkZWZpbml0aW9uIG9mIENDX1NIQVJFRF9PUFRTIGluIExERkxBR1NfU0hBUkVEIGluIGMrKworCSAgTWFrZWZpbGUuaW4sIHNpbmNlIHRoaXMgY29uZmxpY3RzIHdoZW4gZysrIGlzIHVzZWQgd2l0aCBIUC1VWAorCSAgY29tcGlsZXIgKHJlcG9ydGVkIGJ5IFRpbSBNb29uZXkpLgorCSsgcGFyZW50aGVzaXplICdzdHJjcHknIGNhbGxzIGluIGMrKyBiaW5kaW5nIHRvIHdvcmthcm91bmQgcmVkZWZpbml0aW9uCisJICBpbiBzb21lIEMrKyBpbXBsZW1lbnRhdGlvbnMgKHJlcG9ydGVkIGJ5IHNldmVyYWwgcGVvcGxlIHJ1bm5pbmcKKwkgIGVnY3Mgd2l0aCBnbGliYyAyLjAuOTMsIGFuYWx5c2lzIGJ5IEFuZHJlYXMgSmFlZ2VyLgorCis5ODA1MTYKKwkrIG1vZGlmeSB3cml0ZV9lbnRyeS5jIHNvIHRoYXQgaXQgd2lsbCBub3QgYXR0ZW1wdCB0byBsaW5rIGFsaWFzZXMKKwkgIHdpdGggZW1iZWRkZWQgJy8nLCBidXQgZ2l2ZSBvbmx5IGEgd2FybmluZy4KKwkrIHB1dCAtTCQobGliZGlyKSBmaXJzdCB3aGVuIGxpbmtpbmcgcHJvZ3JhbXMsIGV4Y2VwdCBmb3IgSFAtVVguCisJKyBtb2RpZnkgY29tcF9zY2FuLmMgdG8gaGFuZGxlIFNWcjQgdGVybWluZm8gZGVzY3JpcHRpb24gZm9yIGF0dDQ3NywKKwkgIHdoaWNoIGNvbnRhaW5zIGEgY29sb24gaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gc3VwcG9ydCBTQ08gb3NyNS4wLjUgc2hhcmVkIGxpYnJhcmllcywKKwkgIGZyb20gY29tcC51bml4LnNjby5wcm9ncmFtbWVyIG5ld3Nncm91cCBpdGVtIChNaWtlIEhvcGtpcmspLgorCSsgZWxpbWluYXRlIGV4dHJhIEdvVG8gY2FsbCBpbiBsaWJfZG91cGRhdGUuYyAocGF0Y2ggYnkgQWxleGFuZGVyIFYuCisJICBMdWt5YW5vdikuCisJKyBtaW5vciBhZGp1c3RtZW50cyBvZiBjb25zdC9OQ1VSU0VTX0NPTlNUIGZyb20gSVJJWCBjb21waWxlLgorCSsgYWRkIHVwZGF0ZXMgYmFzZWQgb24gZXNyJ3MgOTgwNTA5IHZlcnNpb24gb2YgdGVybWluZm8uc3JjLgorCis5ODA1MDkKKwkrIGNvcnJlY3QgbWFjcm9zIGZvciB3YXR0cl9zZXQsIHdhdHRyX2dldCwgc2VwYXJhdGUgd2F0dHJzZXQgbWFjcm8gZnJvbQorCSAgdGhlc2UgdG8gcHJlc2VydmUgYmVoYXZpb3IgdGhhdCBhbGxvd3MgYXR0cmlidXRlcyB0byBiZSBjb21iaW5lZCB3aXRoCisJICBjb2xvciBwYWlyIG51bWJlcnMuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1uby1wYWRkaW5nLCB0byBhbGxvdyBlbnZpcm9ubWVudAorCSAgdmFyaWFibGUgJE5DVVJTRVNfTk9fUEFERElORyB0byBlbGltaW5hdGUgbm9uLW1hbmRhdG9yeSBwYWRkaW5nLAorCSAgdGhlcmVieSBtYWtpbmcgdGVybWluYWwgZW11bGF0b3JzIChlLmcuLCBmb3IgdnQxMDApIGEgbGl0dGxlIG1vcmUKKwkgIGVmZmljaWVudCAocmVxdWVzdCBieSBEYW5pZWwgRWlzZW5idWQgPGVpc2VuYnVkQGNzLnN3YXJ0aG1vcmUuZWR1PikuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBlbWJlZCBBQkkgaW4gc2hhcmVkIGxpYnJhcmllcyBmb3IgSFAtVVgKKwkgIDEwLnggKGRldGFpbGVkIHJlcXVlc3QgYnkgVGltIE1vb25leSkuCisJKyBhZGQgdGVzdC9leGFtcGxlIG9mIHRoZSAnZmlsdGVyKCknIGZ1bmN0aW9uLgorCSsgYWRkIG54dGVybSBhbmQgeHRlcm0tY29sb3IgdGVybWluZm8gZGVzY3JpcHRpb24gKHJlcXVlc3QgYnkgQ3Jpc3RpYW4KKwkgIEdhZnRvbiA8Z2FmdG9uQHJlZGhhdC5jb20+KS4KKwkrIG1vZGlmeSByeHZ0IHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIGNsZWFyIGFsdGVybmF0ZSBzY3JlZW4gYmVmb3JlCisJICBzd2l0Y2hpbmcgYmFjayB0byBub3JtYWwgc2NyZWVuLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFwcGxpY2F0aW9ucworCSAgd2hpY2ggdXNlIHh0ZXJtIChyZXBvcnRlZCBieSBNYW5vaiBLYXNpY2hhaW51bGEgPG1hbm9qa0Bpby5jb20+KS4KKwkrIG1vZGlmeSBsaW51eCB0ZXJtaW5mbyBkZXNjcmlwdGlvbiB0byByZXNldCBjb2xvciBwYWxldHRlIChyZXBvcnRlZAorCSAgYnkgVGVsZm9yZCBUZW5keXMgPHRlbGZvcmRAZW5nLnV0cy5lZHUuYXU+KS4KKwkrIGNvcnJlY3Rpb24gdG8gZG91cGRhdGUsIGZvciBjYXNlIHdoZXJlIHRlcm1pbmFsIGRvZXMgbm90IHN1cHBvcnQKKwkgIGluc2VydC9kZWxldGUgY2hhcmFjdGVyLiAgVGhlIGxvZ2ljIGRpZCBub3QgY2hlY2sgdGhhdCB0aGVyZSB3YXMgYQorCSAgZGlmZmVyZW5jZSBpbiBhbGlnbm1lbnQgb2YgY2hhbmdlcyB0byBvbGQvbmV3IHNjcmVlbnMgYmVmb3JlCisJICByZXBhaW50aW5nIHRoZSB3aG9sZSBub24tYmxhbmsgcG9ydGlvbiBvZiB0aGUgbGluZS4gIE1vZGlmaWVkIHRvIGZhbGwKKwkgIHRocm91Z2ggaW50byBsb2dpYyB0aGF0IHJlZHVjZXMgYnkgdGhlIHBvcnRpb24gd2hpY2ggZG9lcyBub3QgZGlmZmVyCisJICAocmVwb3J0ZWQgYnkgRGFuaWVsIEVpc2VuYnVkIDxlaXNlbmJ1ZEBjcy5zd2FydGhtb3JlLmVkdT4pLgorCSsgbWlub3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgdG8gd25vdXRyZWZyZXNoIGJ5IG1vdmluZyBzb21lCisJICBjb21wYXJpc29ucyBvdXQgb2YgaW5uZXIgbG9vcC4KKworOTgwNDI1CisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBzdWJzdGl0dXRlIE5DVVJTRVNfQ09OU1QgaW4gY3Vyc2VzLmgKKwkrIHVwZGF0ZWQgdGVybWluZm8gZW50cmllcyBmb3IgeHRlcm0teGY4Ni12NDAsIHh0ZXJtLTE2Y29sb3IsCisJICB4dGVybS04Yml0IHRvIGNvcnJlc3BvbmQgdG8gWEZyZWU4NiAzLjlBZy4KKwkrIHJlbW92ZSByZXN0cmljdGlvbiB0aGF0IGZvcmNlcyBuY3Vyc2VzIHRvIHVzZSBzZXRhZi9zZXRhYiBpZiB0aGUKKwkgIG51bWJlciBvZiBjb2xvcnMgaXMgZ3JlYXRlciB0aGFuIDguICAoc2VlIDk3MDUyNCBmb3IgeHRlcm0tMTZjb2xvcikuCisJKyBjaGFuZ2Ugb3JkZXIgb2YgLUwgb3B0aW9ucyAoc28gdGhhdCAkKGxpYmRpcikgaXMgc2VhcmNoZWQgZmlyc3QpIHdoZW4KKwkgIGxpbmtpbmcgdGljIGFuZCBvdGhlciBwcm9ncmFtcywgdG8gd29ya2Fyb3VuZCBIUCdzIGxpbmtlci4KKwkgIE90aGVyd2lzZSwgdGhlIC1MLi4vbGliIGlzIGVtYmVkZGVkIHdoZW4gbGlua2luZyBhZ2FpbnN0IHNoYXJlZAorCSAgbGlicmFyaWVzIGFuZCB0aGUgaW5zdGFsbGVkIHByb2dyYW0gZG9lcyBub3QgcnVuIChyZXBvcnRlZCBieSBSYWxmCisJICBIaWxkZWJyYW5kdCkuCisJKyBtb2RpZnkgY29uZmlndXJhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIERpZ2l0YWwgVW5peCBzbyB0aGF0CisJICB2ZXJzaW9uaW5nIGlzIGVtYmVkZGVkIGluIHRoZSBsaWJyYXJ5LCByYXRoZXIgdGhhbiBpbXBsaWVkIGJ5CisJICBsaW5rcyAocGF0Y2ggYnkgVGltIE1vb25leSkuCisKKzk4MDQxOAorCSsgbW9kaWZ5IGV0aXAuaCB0byBhdm9pZCBjb25mbGljdCB3aXRoIG1hdGguaCBvbiBIUC1VWCA5LjAzIHdpdGggZ2NjCisJICAyLjguMSB3aGljaCByZWRlZmluZXMgJ2V4Y2VwdGlvbicgKHJlcG9ydGVkIGJ5IFJhbGYgSGlsZGVicmFuZHQKKwkgIDxSLkhpbGRlYnJhbmR0QHR1LWJzLmRlPikuCisJKyBjb3JyZWN0IGNvbmZpZ3VyZSB0ZXN0cyBpbiBDRl9TSEFSRURfT1BUUyB3aGljaCB1c2VkICRDQyB2YWx1ZSB0bworCSAgY2hlY2sgZm9yIGdjYywgcmF0aGVyIHRoYW4gYXV0b2NvbmYncyAkR0NDIHZhbHVlLiAgVGhpcyBkaWQgbm90CisJICB3b3JrIHByb3Blcmx5IGlmIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBjb21waWxlciB3ZXJlIGdpdmVuCisJICAocmVwb3J0ZWQgYnkgTWljaGFlbCBZb3VudCA8eW91bnRAY3NmLkNvbG9yYWRvLmVkdT4pLgorCSsgcmV2aXNlIGNoZWNrIGZvciBjb21waWxlciBvcHRpb25zIHRvIGZvcmNlIEFOU0kgbW9kZSBzaW5jZSByZXBlYXRpbmcKKwkgIGFuIG9wdGlvbiBzdWNoIGFzIC1BYSBjYXVzZXMgSFAncyBjb21waWxlciB0byBmYWlsIG9uIGl0cyBvd24gaGVhZGVycworCSAgKHJlcG9ydGVkIGJ5IENsaW50IE9sc2VuIDxvbHNlbmNAaWNoaXBzLmludGVsLmNvbT4pLgorCis5ODA0MTEKKwkrIGlmZGVmJ2QgaGFzX2tleSgpIGFuZCBtY3ByaW50KCkgYXMgZXh0ZW5kZWQgZnVuY3Rpb25zLgorCSsgbW9kaWZpZWQgc2V2ZXJhbCBwcm90b3R5cGVzIHRvIGNvcnJlc3BvbmQgd2l0aCAxOTk3IHZlcnNpb24gb2YKKwkgIFgvT3BlbiBDdXJzZXMgKGFmZmVjdHMgQUJJIHNpbmNlIGRldmVsb3BlcnMgaGF2ZSB1c2VkIGF0dHJfZ2V0KS4KKwkrIHJlbW92ZSBzcHVyaW91cyB0cmFpbGluZyBibGFua3MgaW4gZ2xpYmMgYWRkb24tc2NyaXB0cyAocGF0Y2ggYnkKKwkgIEguSi5MdSkuCisJKyBpbnNlcnQgYSBmZXcgYnJhY2VzIGF0IGxvY2F0aW9ucyB3aGVyZSBnY2MtMi44LnggYXNrcyB0byB1c2UgdGhlbSB0bworCSAgYXZvaWQgYW1iaWdvdXMgZWxzZSdzLCB1c2UgLWZwaWMgcmF0aGVyIHRoYW4gLWZQSUMgZm9yIExpbnV4IChwYXRjaAorCSAgYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTgwNDA0CisJKyBzcGxpdCBTSExJQl9MSVNUIGludG8gU0hMSUJfRElSUy9TSExJQl9MSVNUIHRvIGtlZXAgLUwgb3B0aW9ucworCSAgYmVmb3JlIC1sIHRvIGFjY29tbW9kYXRlIFNvbGFyaXMnIGxpbmtlciAocmVwb3J0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKworOTgwMzI4CisJKyBtb2RpZnkgbGliX2NvbG9yLmMgdG8gZWxpbWluYXRlIGRlcGVuZGVuY3kgb24gb3JpZ19jb2xvcnMgYW5kCisJICBvcmlnX3BhaXIsIHNpbmNlIFNWcjQgY3Vyc2VzIGRvZXMgbm90IHJlcXVpcmUgdGhlc2UgZWl0aGVyLCBidXQKKwkgIHVzZXMgdGhlbSB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KKwkrIGFkZCBkZXRhaWxlZCB1c2FnZS1tZXNzYWdlIHRvIGluZm9jbXAuCisJKyBjb3JyZWN0IGEgdHlwbyBpbiBhdHQ2Mzg2IGVudHJ5IChhICIlPyIgd2hpY2ggd2FzICI/IikuCisJKyBhZGQgLWYgb3B0aW9uIHRvIGluZm9jbXAgYW5kIHRpYywgd2hpY2ggZm9ybWF0cyB0aGUgdGVybWluZm8KKwkgIGlmL3RoZW4vZWxzZS9lbmRpZiBzbyB0aGF0IHRoZXkgYXJlIHJlYWRhYmxlICh3aXRoIG5ld2xpbmVzIGFuZAorCSAgdGFicykuCisJKyBmaXhlcyBmb3IgZ2xpYmMgYWRkb24gc2NyaXB0cyAocGF0Y2ggYnkgSC5KLkx1KS4KKworOTgwMzIxCisJKyByZXZpc2UgY29uZmlndXJlIG1hY3JvIENGX1NQRUVEX1RZUEUgc28gdGhhdCB0ZXJtY2FwLmggaGFzIHNwZWVkX3QKKwkgIGRlY2xhcmVkIChmcm9tIEFkYW0gSiBSaWNodGVyIDxhZGFtQHlnZ2RyYXNpbC5jb20+KQorCSsgcmVtb3ZlIHNwdXJpb3VzIGN1cnNfc2V0KCkgY2FsbCBmcm9tIGxlYXZlb2soKSAoSiBUIENvbmtsaW4pLgorCSsgY29ycmVjdGVkIGhhbmRsaW5nIGxlYXZlb2soKSBpbiBkb3VwZGF0ZSgpIChwYXRjaCBieSBBbGV4YW5kZXIgVi4KKwkgIEx1a3lhbm92KS4KKwkrIGltcHJvdmVkIHZlcnNpb24gb2Ygd3JlZHJhd2xuIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgY29ycmVjdCBjKysvTWFrZWZpbGUuaW4gc28gaW5zdGFsbCB0YXJnZXQgZG8gbm90IGhhdmUgZW1iZWRkZWQgLi4vbGliCisJICB0byBjb25mdXNlIGl0IChwYXRjaCBieSBUaG9tYXMgR3JhZiA8Z3JhZkBlc3NpLmZyPikuCisJKyBhZGQgd2FybmluZyB0byBwcmVpbnN0YWxsIHJ1bGUgd2hpY2ggY2hlY2tzIGlmIHRoZSBpbnN0YWxsZXIgd291bGQKKwkgIG92ZXJ3cml0ZSBhIGN1cnNlcy5oIG9yIHRlcm1jYXAuaCB0aGF0IGlzIG5vdCBkZXJpdmVkIGZyb20gbmN1cnNlcy4KKwkgIChUaGUgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbiBmb3IgZGV2ZWxvcGVycyB3aG8gbmVlZCBib3RoIGlzIHRvCisJICB1c2UgLS1kaXNhYmxlLW92ZXJ3cml0ZSkuCisJKyBtb2RpZnkgcHJlaW5zdGFsbCBydWxlIGluIHRvcC1sZXZlbCBNYWtlZmlsZSB0byBhdm9pZCBpbXBsaWNpdAorCSAgdXNlIG9mICdzaCcsIHRvIGFjY29tbW9kYXRlIFVsdHJpeCA0LjQgKHJlcG9ydGVkIGJ5IEpvYW8gUGFsaG90bworCSAgTWF0b3MgPGptYXRvc0BtYXRoLmlzdC51dGwucHQ+LCBwYXRjaCBieSBUaG9tYXMgRXNzZXIKKwkgIDx0ZUBpbmZvcm1hdGlrLnVuaS1oYW5ub3Zlci5kZT4pCisJKyByZWZpbmUgaWZkZWYncyBmb3IgVFJBQ0Ugc28gdGhhdCBsaWJuY3Vyc2VzIGhhcyBmZXdlciBkZXBlbmRlbmNpZXMKKwkgIG9uIGxpYnRpbmZvIHdoZW4gVFJBQ0UgaXMgZGlzYWJsZWQuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBzbyB0aGF0IGlmIHRoZSAtLXdpdGgtdGVybWxpYiBvcHRpb24gaXMgdXNlZAorCSAgdG8gZ2VuZXJhdGUgYSBzZXBhcmF0ZSB0ZXJtaW5mbyBsaWJyYXJ5LCB3ZSBjaGFpbiBpdCB0byB0aGUgbmN1cnNlcworCSAgbGlicmFyeSB3aXRoIGEgIi1sIiBvcHRpb24gKHJlcG9ydGVkIGJ5IERhcnJ5bCBNaWxlcyBhbmQgSWFuIFQuCisJICBaaW1tZXJtYW4pLgorCis5ODAzMTQKKwkrIGNvcnJlY3QgbGltaXRzIGFuZCB3aW5kb3cgaW4gd3JlZHJhd2xuIGZ1bmN0aW9uIChyZXBvcnRlZC9hbmFseXNpcyBieQorCSAgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGNvcnJlY3Qgc2VkIGV4cHJlc3Npb24gaW4gY29uZmlndXJlIHNjcmlwdCBmb3IgLS13aXRoLWZhbGxiYWNrCisJICBvcHRpb24gKHBhdGNoIGJ5IEplc3NlIFRoaWxvKS4KKwkrIGNvcnJlY3Qgc29tZSBwbGFjZXMgaW4gY29uZmlndXJlIHNjcmlwdCB3aGVyZSAkZW5hYmxldmFsIHdhcyB1c2VkCisJICByYXRoZXIgdGhhbiAkd2l0aHZhbCAocGF0Y2ggYnkgRGFycnlsIE1pbGVzIDxkbG1AZzdsZWQuZGVtb24uY28udWs+KS4KKwkrIG1vZGlmeSBzb21lIG1hbi1wYWdlcyBzbyBubyAnLicgb3IgJy4uJyBmYWxscyBiZXR3ZWVuIFRIIGFuZCBTSAorCSAgbWFjcm9zLCB0byBhY2NvbW1vZGF0ZSBtYW5fZGIgcHJvZ3JhbSAocmVwb3J0ZWQgYnkgSWFuIFQuIFppbW1lcm1hbgorCSAgPGl0ekByYWh1bC5uZXQ+KS4KKwkrIHRlcm1pbmZvLnNyYyAxMC4yLjEgZG93bmxvYWRlZCBmcm9tIEVTUidzIHdlYnBhZ2UgKEVTUikuCisJPiBzZXZlcmFsIGNoYW5nZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgYWRkIGNvcHlyaWdodCBub3RpY2VzIChhbmQgcmNzIGlkJ3MpIG9uIHJlbWFpbmluZyBtYW4tcGFnZXMuCisJKyBjb3JyZWN0ZWQgcHJvdG90eXBlcyBmb3Igc2xrXyogZnVuY3Rpb25zLCB1c2luZyBjaHR5cGUgcmF0aGVyIHRoYW4KKwkgIGF0dHJfdC4KKwkrIGltcGxlbWVudGVkIHRoZSB3Y29sb3Jfc2V0KCkgYW5kIHNsa19jb2xvcigpIGZ1bmN0aW9ucworCSsgdGhlIHNsa19hdHRyX3tzZXQsb2ZmLG9ufSBmdW5jdGlvbnMgbmVlZCBhbiBhZGRpdGlvbmFsIHZvaWQqCisJICBwYXJhbWV0ZXIgYWNjb3JkaW5nIHRvIFhTSS4KKwkrIGZpeCB0aGUgQysrIGFuZCBBZGE5NSBiaW5kaW5nIGFzIHdlbGwgYXMgdGhlIG1hbiBwYWdlcyB0bworCSAgcmVmbGVjdCBhYm92ZSBlbmhhbmNlbWVudHMuCisKKzk4MDMwNworCSsgdXNlICdzdGF0KCknIHJhdGhlciB0aGFuICdhY2Nlc3MoKScgaW4gdG9lLmMgdG8gY2hlY2sgZm9yIHRoZQorCSAgZXhpc3RlbmNlIG9mICRIT01FLy50ZXJtaW5mbywgc2luY2UgaXQgbWF5IGJlIGEgZmlsZS4KKwkrIHN1cHByZXNzIGNvbmZpZ3VyZSBDRl9DWFhfTElCUkFSWSBjaGVjayBpZiB3ZSBhcmUgbm90IHVzaW5nIGcrKworCSAgMi43LngsIHNpbmNlIHRoaXMgaXMgbm90IG5lZWRlZCB3aXRoIGcrKyAyLjggb3IgZWdjcyAocGF0Y2ggYnkKKwkgIEp1ZXJnZW4gUGZlaWZlcikuCisJKyB0dXJuIG9uIGhhc2htYXAgc2Nyb2xsaW5nIGNvZGUgYnkgZGVmYXVsdCwgaW50ZW5kIHRvIHJlbWVkeSBkZWZlY3RzCisJICBieSA0LjMgcmVsZWFzZS4KKwkrIG1pbm9yIGNvcnJlY3Rpb25zIHRvIHRlcm1pbmZvLnNyYyBjaGFuZ2Vsb2cuCisKKzk4MDMwMgk0LjIgcmVsZWFzZSBmb3IgdXBsb2FkIHRvIHByZXAuYWkubWl0LmVkdQorCSsgY29ycmVjdCBGbG9yaWFuJ3MgZW1haWwgYWRkcmVzcyBpbiBuY3Vyc2VzLWludHJvLmh0bWwKKwkrIHRlcm1pbmZvLnNyYyAxMC4yLjAgKEVTUikuCisKKzk4MDIyOAlwcmUtcmVsZWFzZQorCSsgYWRkIGxpbnV4LWtvaThyIHJlcGxhY2UgbGludXgta29pOCwgd2hpY2ggaXMgbm90IEtPSTggKHBhdGNoIGJ5CisJICBRaW5nTG9uZyA8cWluZ2xvbmdAQm9saXptLmloZXAuc3U+KS4KKwkrIG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBhZGQgc2V0bG9jYWxlKCkgY2FsbCB0byBuY3Vyc2VzLmMgKHJlcG9ydGVkIGJ5IENsYWVzIEcuIExpbmRibGFkCisJICA8Y2xhZXNnQGFsZ29uZXQuc2U+KS4KKwkrIGNvcnJlY3Qgc2lnbi1leHRlbnNpb24gaW4gbGliX2luc3N0ci5jIChyZXBvcnRlZCBieSBTb3RpcmlzCisJICBWYXNzaWxvcG91bG9zIDxzdmFzQGxlb24ubnJjcHMuYXJpYWRuZS10LmdyPikKKworOTgwMjIxCXByZS1yZWxlYXNlCisJKyByZWdlbmVyYXRlZCBzb21lIGRvY3VtZW50YXRpb24gb3Zlcmxvb2tlZCBpbiA5ODAyMTQgcGF0Y2gKKwkgIChuY3Vyc2VzLWludHJvLmRvYywgY3Vyc19vdXRvcHRzLjN4Lmh0bWwpCisJKyBtaW5vciBpZmRlZiBjaGFuZ2UgdG8gQysrIGJpbmRpbmcgdG8gd29yayB3aXRoIGdjYyAyLjguMCAocGF0Y2ggYnkKKwkgIEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjaGFuZ2UgbWFpbnRhaW5lcidzIG1haWxpbmcgYWRkcmVzcyB0byBmbG9yaWFuQGdudS5vcmcsIGNoYW5nZQorCSAgdGVudGF0aXZlIG1haWxpbmcgbGlzdCBhZGRyZXNzIHRvIGJ1Zy1uY3Vyc2VzLXJlcXVlc3RAZ251Lm9yZyAocGF0Y2gKKwkgIGJ5IEZsb3JpYW4gTGEgUm9jaGUpLgorCSsgYWRkIGRlZmluaXRpb24gb2YgJChSRUxfVkVSU0lPTikgdG8gYysrL01ha2VmaWxlLmluIChyZXBvcnRlZCBieSBHcmFuCisJICBIYXNzZSA8Z2hAcmFkaXRleC5zZT4pLgorCSsgcmVzdG9yZSB2ZXJzaW9uIG51bWJlcnMgdG8gQWRhOTUgYmluZGluZywgYWNjaWRlbnRhbGx5IGRlbGV0ZWQgYnkKKwkgIGNvcHlyaWdodCBwYXRjaCAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTgwMjE0CXByZS1yZWxlYXNlCisJKyByZW1vdmUgbmN1cnNlcy5sc20gZnJvbSBNQU5JRkVTVCBzbyB0aGF0IGl0IHdvbid0IGJlIHVzZWQgaW4gRlNGCisJICBkaXN0cmlidXRpb25zLCB0aG91Z2ggaXQgaXMgcmV0YWluZWQgaW4gZGV2ZWxvcG1lbnQuCisJKyBjb3JyZWN0IHNjYWxpbmcgb2YgbWlsbGlzZWNvbmRzIHRvIG5hbm9zZWNvbmRzIGluIGxpYl9uYXBtcy5jIChwYXRjaAorCSAgYnkgSmVyZW15IEJ1aGxlcikuCisJKyB1cGRhdGUgbWFpbGluZy1saXN0IGluZm9ybWF0aW9uIChidWctbmN1cnNlc0BnbnUub3JnKS4KKwkrIHVwZGF0ZSBhbm5vdW5jZW1lbnQgZm9yIHVwY29taW5nIDQuMiByZWxlYXNlLgorCSsgbW9kaWZ5IC1sbSB0ZXN0IHRvIGNoZWNrIGZvciAnc2luKCknIHJhdGhlciB0aGFuICdmbG9vcigpJworCSsgcmVtb3ZlIHNwdXJpb3VzIGNvbW1hcyBmcm9tIHRlcm1pbmZvLnNyYyBkZXNjcmlwdGlvbnMuCisJKyBjaGFuZ2UgY29weXJpZ2h0IG5vdGljZXMgdG8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKKzk4MDIwNworCSsgbWlub3IgZml4ZXMgZm9yIGF1dG9jb25mIG1hY3JvcyBDRl9FUlJOTywgQ0ZfSEVMUF9NRVNTQUdFIGFuZAorCSAgQ0ZfU0laRUNIQU5HRQorCSsgbW9kaWZ5IE1ha2VmaWxlLmdsaWJjIHNvIHRoYXQgJChvYmpwZngpIGlzIGRlZmluZWQgKEguSi5MdSkuCisJKyBpZmRlZi1vdXQgdHJ1ZS1yZXR1cm4gZnJvbSBfbmNfbW91c2VfaW5saW5lKCkgd2hpY2ggZGVwZW5kcyBvbgorCSAgbWVyZ2Ugb2YgUU5YIHBhdGNoIChwZW5kaW5nIDQuMiByZWxlYXNlKS4KKwk+IHBhdGNoIHRvIHNwbGl0IG9mZiBzZWxkb20tdXNlZCBtb2R1bGVzIGluIG5jdXJzZXMgKEogVCBDb25rbGluKToKKwkgIFRoaXMgcmVkdWNlcyBzaXplIGJ5IHVwIHRvIDIuNmtiLgorCSsgbW92ZSBmdW5jdGlvbmFsaXR5IG9mIF9uY191c2xlZXAgaW50byBuYXBtcywgYWRkIGNvbmZpZ3VyYXRpb24gY2FzZQorCSAgZm9yIG5hbm9zbGVlcCgpLgorCSsgbW92ZWQgd2NoZ2F0KCkgZnJvbSBsaWJfYWRkY2guYyB0byBsaWJfY2hnYXQuYworCSsgbW92ZWQgY2xlYXJvaygpLCBpbW1lZG9rKCksIGxlYXZlb2soKSwgYW5kIHNjcm9sbG9rKCkgZnJvbQorCSAgbGliX29wdGlvbnMuYyB0byBsaWJfY2xlYXJvay5jLCBsaWJfaW1tZWRvay5jLCBsaWJfbGVhdmVvay5jIGFuZAorCSAgbGliX3Njcm9sbG9rLmMuCisJKyBtb3ZlZCBuYXBtcygpIGZyb20gbGliX2tlcm5lbC5jIHRvIGxpYl9uYXBtcy5jCisJKyBtb3ZlZCBlY2hvKCkgYW5kIG5vZWNobygpIGZyb20gbGliX3Jhdy5jIHRvIGxpYl9lY2hvLmMKKwkrIG1vdmVkIG5sKCkgYW5kIG5vbmwoKSBmcm9tIGxpYl9yYXcuYyB0byBsaWJfbmwuYworCis5ODAxMzEKKwkrIGNvcnJlY3RlZCBjb252ZXJzaW9uIGluIHRjbG9jay5jIChjZjogOTcxMDE4KS4KKwkrIHVwZGF0ZXMgdG8gTWFrZWZpbGUuZ2xpYmMgYW5kIGFzc29jaWF0ZWQgTGludXggY29uZmlndXJlIHNjcmlwdAorCSAgKHBhdGNoIGJ5IEguSi5MdSkuCisJKyB3b3JrYXJvdW5kIGEgcXVvdGluZyBwcm9ibGVtIG9uIFN1bk9TIHdpdGggdGFyLWNvcHkuc2gKKwkrIGNvcnJlY3QgaW5pdF9wYWlyKCkgY2FsbHMgaW4gd29ybS5jIHRvIHdvcmsgd2hlbiB1c2VfZGVmYXVsdF9jb2xvcnMoKQorCSAgaXMgbm90IGF2YWlsYWJsZS4KKwkrIGluY2x1ZGUgPHN5cy90eXBlcy5oPiBpbiBDRl9TWVNfVElNRV9TRUxFQ1QgdG8gd29yayB3aXRoIEZyZWVCU0QKKwkgIDIuMS41CisJKyBhZGQgbmN2IGNhcGFiaWxpdHkgdG8gRnJlZUJTRCBjb25zb2xlIChjb25zMjV3KSwgbWFraW5nIHJldmVyc2UKKwkgIHdvcmsgd2l0aCBjb2xvci4KKwkrIGNvcnJlY3Qgc2Vuc2Ugb2YgY29uZmlndXJlLXRlc3QgZm9yIHN5cy90aW1lLmggaW5jbHVzaW9uIHdpdGgKKwkgIHN5cy9zZWxlY3QuaAorCSsgZml4ZXMgZm9yIEFkYTk1L2FkYV9pbmNsdWRlL01ha2VmaWxlLmluIHRvIHdvcmsgd2l0aCAtLXNyY2RpciBvcHRpb24uCisJKyByZW1vdmUgdW51c2VkL29ic29sZXRlIHRlc3QtcHJvZ3JhbSBydWxlcyBmcm9tIHByb2dzL01ha2VmaWxlLmluCisJICAodGhlIHJ1bGVzIGluIG5jdXJzZXMvTWFrZWZpbGUuaW4gd29yaykuCisJKyByZW1vdmUgc2hhcmVkLWxpYnJhcnkgbG9hZGVyIGZsYWdzIGZyb20gdGVzdC9NYWtlZmlsZS5pbiwgZXRjLgorCSsgc2ltcGxpZnkgdGVzdC9jb25maWd1cmUuaW4gdXNpbmcgbmV3IHZlcnNpb24gb2YgYXV0b2NvbmYgdG8gY3JlYXRlCisJICB0ZXN0L25jdXJzZXNfY2ZnLmgKKwkrIHN1cHByZXNzIHN1ZmZpeCBydWxlcyBpbiB0ZXN0L01ha2VmaWxlLmluLCBwcm92aWRlIGV4cGxpY2l0CisJICBkZXBlbmRlbmN5IHRvIHdvcmsgd2l0aCAtLXNyY2RpciBvcHRpb24gYW5kIGxlc3MgY2FwYWJsZSAnbWFrZScKKwkgIHByb2dyYW1zLgorCT4gYWRhcHRlZCBmcm9tIHBhdGNoIGZvciBRTlggYnkgWGlhb2RhbiBUYW5nOgorCSsgaW5pdGlhbGl6ZSAlUCBhbmQgJWcgdmFyaWFibGVzIHNldC91c2VkIGluIHRwYXJtLCBhbmQgYWxzbyBlbnN1cmUKKwkgIHRoYXQgZW1wdHkgc3RyaW5ncyBkb24ndCByZXR1cm4gYSBudWxsIHJlc3VsdCBmcm9tIHRwYXJhbV9pbnRlcm5hbAorCSsgYWRkIFFOWC1zcGVjaWZpYyBwcm90b3R5cGUgZm9yIHZzc2NhbmYoKQorCSsgbW92ZSBpbml0aWFsaXphdGlvbiBvZiBTUC0+X2tleXRyeSBmcm9tIGluaXRfa2V5dHJ5KCkgdG8gbmV3dGVybSgpIHRvCisJICBhdm9pZCByZXNldHRpbmcgaXQgdmlhIGEga2V5b2soKSBjYWxsIGJ5IG1vdXNlX2FjdGl2YXRlKCkuCisJKyByZW9yZ2FuaXplZCBzb21lIGZ1bmN0aW9ucyBpbiBsaWJfbW91c2UoKSB0byB1c2UgY2FzZS1zdGF0ZW1lbnRzLgorCSsgcmVtb3ZlIHNnciBzdHJpbmcgZnJvbSBxbnggdGVybWluZm8gZW50cnkgc2luY2UgaXQgaXMgcmVwb3J0ZWQgdG8KKwkgIHR1cm4gb2ZmIGF0dHJpYnV0ZXMgaW5jb25zaXN0ZW50bHkuCisKKzk4MDEyNAorCSsgYWRkIGYvRi9iL0IgY29tbWFuZHMgdG8gbmN1cnNlcyAnYicgdGVzdCB0byB0b2dnbGUgY29sb3JzLCBwcm92aWRpbmcKKwkgIHRlc3QgZm9yIG5vX2NvbG9yX3ZpZGVvLgorCSsgYWRqdXN0ZWQgZW14LnNyYyB0byB1c2Ugbm9fY29sb3JfdmlkZW8sIG5vdyB3b3JrcyB3aXRoIG5jdXJzZXMgJ2InCisJICBhbmQgJ2snIHRlc3RzLgorCSsgaW1wbGVtZW50IG5vX2NvbG9yX3ZpZGVvIGF0dHJpYnV0ZSwgYW5kIGFzIGEgc3BlY2lhbCBjYXNlLCByZXZlcnNlCisJICBjb2xvcnMgd2hlbiB0aGUgcmV2ZXJzZSBhdHRyaWJ1dGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggY29sb3IuCisJKyBjaGVjayBmb3IgZW1wdHkgc3RyaW5nIGluICRURVJNIHZhcmlhYmxlIChyZXBvcnRlZCBieSBCcmV0dCBNaWNoYWVscworCSAgPGJyZXR0QHh5bGFuLmNvbT4pLgorCT4gZnJvbSByZXBvcnRzIGJ5IEZyZWQgRmlzaDoKKwkrIGFkZCBjb25maWd1cmUtdGVzdCBmb3IgaXNhc2NpaQorCSsgYWRkIGNvbmZpZ3VyZS10ZXN0IGZvciAtbG0gbGlicmFyeS4KKwkrIG1vZGlmeSBDRl9CT09MX1NJWkUgdG8gY2hlY2sgaWYgQysrIGJvb2wgdHlwZXMgYXJlIHVuc2lnbmVkLgorCT4gcGF0Y2hlcyBieSBKLkouRy5SaXBvbGwKKwkrIGFkZCBjb25maWd1cmUvbWFrZWZpbGUgdmFyaWFibGVzIHRvIHN1cHBvcnQgLmV4ZSBleHRlbnNpb24gb24KKwkgIE9TLzIgRU1YIChyZXF1aXJlcyBhZGRpdGlvbmFsIGF1dG9jb25mIHBhdGNoZXMpLgorCSsgZXhwbGljaXRseSBpbml0aWFsaXplIHZhcmlhYmxlcyBpbiBsaWJfZGF0YS5jIHRvIGFwcGVhc2UgT1MvMiBsaW5rZXIKKwk+IHBhdGNoZXMgYnkgRnJlZCBGaXNoIDxmbmZAbmluZW1vb25zLmNvbT4KKwkrIG1pc2MvTWFrZWZpbGUuaW4gKGluc3RhbGwuZGF0YSk6ICBBdm9pZCB0cnlpbmcgdG8gaW5zdGFsbCB0aGUgQ1ZTCisJICBkaXJlY3RvcnkuCisJKyBhY2xvY2FsLm00IChpbnN0YWxsLmluY2x1ZGVzKTogIFJlbW92ZSBmaWxlcyBpbiB0aGUgaW5jbHVkZSBkaXJlY3RvcnkKKwkgIHdoZXJlIHdlIGFyZSBnb2luZyB0byBpbnN0YWxsIG5ldyBvbmVzLCBub3QgdGhlIG9yaWdpbmFsIHNvdXJjZQorCSAgZmlsZXMuCisJKyBtaXNjL3Rlcm1pbmZvLnNyYzogIEFkZCBlbnRyeSBmb3IgImJldGVybSIsIGRlcml2ZWQgZnJvbSB0ZXJtY2FwCisJICBkaXN0cmlidXRlZCB3aXRoIEJlT1MgUFIyIHVzaW5nIGNhcHRvaW5mby4KKwkrIGFjbG9jYWwubTQ6IFdyYXAgJGNmX2N2X3R5cGVfb2ZfYm9vbCB3aXRoIHF1b3RlcyAoY29udGFpbnMgc3BhY2UpCisJKyBhY2xvY2FsLm00OiBBc3N1bWUgYm9vbCB0eXBlcyBhcmUgdW5zaWduZWQuCisJKyBwcm9ncy9pbmZvY21wLmM6IHdvcmthcm91bmQgbXdjYyAzMmsgZnVuY3Rpb24gZGF0YSBsaW1pdAorCis5ODAxMTcKKwkrIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gb2YgY29sb3ItcGFpciAoY2Y6IDk3MDUyNCkgaW4geG1hcy5jLCB3aGljaAorCSAgd2FzIHVzaW5nIG9ubHkgb25lIGNvbG9yLXBhaXIgZm9yIGFsbCBjb2xvcnMgKHJlcG9ydGVkIGJ5CisJICBKLkouRy5SaXBvbGwpLgorCSsgYWRkIG11bHRpdGhyZWFkIG9wdGlvbnMgZm9yIG9iamVjdHMgYnVpbGQgb24gRU1YLCBmb3IgY29tcGF0aWJpbGl0eQorCSAgd2l0aCBYRnJlZTg2LgorCSsgc3BsaXQgdXAgYW4gZXhwcmVzc2lvbiBpbiBNS2xpYl9nZW4uc2ggdG8gd29yayBhcm91bmQgYSBwcm9ibGVtIG9uCisJICBPUy8yIEVNWCwgd2l0aCAnYXNoJyAocGF0Y2ggYnkgSi5KLkcuUmlwb2xsKS4KKwkrIGNoYW5nZSB0ZXJtaW5mbyBlbnRyaWVzIHh0ZXJtICh4dGVybS14Zjg2LXY0MCksIHh0ZXJtLThiaXQgcnMxIHRvIHVzZQorCSAgaGFyZCByZXNldC4KKwkrIHJlbmFtZSB0ZXJtaW5mbyBlbnRyeSB4dGVybS14Zjg2LXYzOXQgdG8geHRlcm0teGY4Ni12NDAKKwkrIHJlbW92ZSBib2xkL3VuZGVybGluZSBmcm9tIHN1biBjb25zb2xlIGVudHJpZXMgc2luY2UgdGhleSdyZSBub3QKKwkgIGltcGxlbWVudGVkLgorCSsgY29ycmVjdCBfdHJhY2VmIGNhbGxzIGluIF90cmFjZWR1bXAoKSwgd2hpY2ggZGlkIG5vdCBzZXBhcmF0ZSBmb3JtYXQKKwkgIGZyb20gcGFyYW1ldGVycy4KKwkrIGNvcnJlY3QgZ2V0b3B0IHN0cmluZyBmb3IgdGljICItbyIgb3B0aW9uLCBhbmQgYWRkIGl0IHRvIG1hbi1wYWdlCisJICBzeW5vcHNpcyAocmVwb3J0ZWQgYnkgRGFycmVuIEhpZWJlcnQgPGRhcnJlbkBobWkuY29tPikuCisJKyBjb3JyZWN0IHR5cG8gaW4gcGFuZWwvTWFrZWZpbGUuaW4sIHJldmVyc2VkIGlmLXN0YXRlbWVudCBpbiBzY3JvbGxpbmcKKwkgIG9wdGltaXphdGlvbiAoQWxleGFuZGVyIFYuICBMdWt5YW5vdikuCisJKyB0ZXN0IGZvciAncmVtb3ZlKCknLCB1c2UgJ3VubGluaygpIGlmIG5vdCBmb3VuZCAocGF0Y2ggYnkgUGhpbGlwcGUgRGUKKwkgIE11eXRlciA8cGhkbUBtYWNxZWwuYmU+KS4KKwk+IHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgSW1wcm92ZSBhIGZlYXR1cmUgb2YgdGhlIGZvcm1zIGRyaXZlci4gIEZvciBpbnZpc2libGUgZmllbGRzCisJICAoT19WSVNJQkxFIG9mZikgb25seSB0aGUgY29udGVudHMgYnV0IG5vdCB0aGUgYXR0cmlidXRlcyBhcmUgY2xlYXJlZC4KKwkgIFdlIG5vdyBjbGVhciBib3RoLiAgKFJlcG9ydGVkIGJ5IEphdmllciBLb2hhbgorCSAgPGprb2hhbkBhZGFuLmZjZWlhLnVuci5lZHUuYXI+KQorCSsgVGhlIG1hbiBwYWdlIGZvcm1fZmllbGRfb3B0cy4zeCBtYWtlcyBub3cgY2xlYXIsIHRoYXQgaW52aXNpYmxlCisJICBmaWVsZHMgYXJlIGFsc28gYWx3YXlzIGluYWN0aXZlLgorCSsgYWRqdXN0IGlmZGVmJ3MgdG8gY29tcGlsZSB0aGUgQysrIGJpbmRpbmcgd2l0aCB0aGUganVzdCByZWxlYXNlZAorCSAgZ2NjLTIuOC4wIGMrKyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmV3IEMrKyBsaWJyYXJpZXMuCisKKzk4MDExMAorCSsgY29ycmVjdCAiPyIgY29tbWFuZCBpbiBuY3Vyc2VzLmM7IGl0IHdhcyBwZXJmb3JtaW5nIG5vbi1zY3JlZW4gd3JpdGVzCisJICB3aGlsZSB0aGUgcHJvZ3JhbSB3YXMgaW4gc2NyZWVuIG1vZGUuICAoSXQgIndvcmtlZCIgaW4gMS45LjllIGJlY2F1c2UKKwkgIHRoYXQgdmVyc2lvbiBzZXRzIE9QT1NUIGFuZCBPQ1JOTCBpbmNvcnJlY3RseSkuCisJKyByZXR1cm4gZXJyb3IgZnJvbSBmdW5jdGlvbnMgaW4gbGliX2tlcm5lbCwgbGliX3JhdyBhbmQgbGliX3RpIGlmCisJICBjdXJfdGVybSBpcyBudWxsLCBvciBpZiB1bmRlcmx5aW5nIEkvTyBmYWlscy4KKwkrIGFtZW5kIGNoYW5nZSB0byB0cHV0cygpIHNvIHRoYXQgaXQgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yIGlmCisJICBjdXJfdGVybSBpcyBudWxsLCBzaW5jZSBzb21lIGFwcGxpY2F0aW9ucyBkZXBlbmQgb24gYmVpbmcgYWJsZSB0byB1c2UKKwkgIHRwdXRzIHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSB0ZXJtaW5hbCAocmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEouCisJICBSb2JpbnNvbiA8aW5meW5pdHlAY3liZXJoaWdod2F5Lm5ldD4pLgorCis5ODAxMDMKKwkrIGFkZCBhIGNvcHkgb2YgZW14LnNyYyBmcm9tIEouSi5HLlJpcG9sbCdzIE9TLzIgRU1YIHZlcnNpb24gb2YgbmN1cnNlcworCSAgMS45LjllLCB0b2dldGhlciB3aXRoIGZpeGVzL2FkZGl0aW9ucyBmb3IgdGhlICJhbnNpIiB0ZXJtaW5hbCB0eXBlLgorCSsgYWRkIHRpYyBjaGVjayBmb3Igc2F2ZS9yZXN0b3JlIGN1cnNvciBpZiBjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiBpcworCSAgZGVmaW5lZCAocmVmZXJlbmNlOiBPJ1JlaWxseSBib29rKS4KKwkrIG1vZGlmeSByZWFkX3Rlcm1jYXAuYyB0byBoYW5kbGUgRU1YLXN0eWxlIHBhdGhuYW1lcyAocmVwb3J0ZWQgYnkKKwkgIEouSi5HLlJpcG9sbCkuCisJKyBtb2RpZnkgbGliX3Jhdy5jIHRvIHVzZSBFTVgncyBzZXRtb2RlIChwYXRjaCBmcm9tIEouSi5HLlJpcG9sbCkuCisJICBSaXBvbGwgc2F5cyBFTVgncyBjdXJzZXMgZG9lcyB0aGlzLgorCSsgbW9kaWZ5IF9uY190aWNfZXhwYW5kKCkgdG8gZ2VuZXJhdGUgXDAgcmF0aGVyIHRoYW4gXDIwMC4KKwkrIG1vdmUvcmV2aXNlICdleHBhbmQoKScgZnJvbSBkdW1wX2VudHJ5LmMgdG8gbmN1cnNlcyBsaWJyYXJ5IGFzCisJICBfbmNfdGljX2V4cGFuZCgpLCBmb3IgdXNlIGJ5IHRhY2suCisJKyBkZWNvZGUgXGEgYXMgXDAwNyBmb3IgdGVybWluZm8sIGFzIHBlciBYU0kuCisJKyBjb3JyZWN0IHRyYW5zbGF0aW9uIG9mIHRlcm1pbmZvICJeQCIsIHRvIFwyMDAsIGxpa2UgXDAuCisJKyBtb2RpZnkgbmV4dF9jaGFyKCkgdG8gdHJlYXQgPGNyPjxsZj4gdGhlIHNhbWUgYXMgPG5ld2xpbmU+LCBmb3IKKwkgIGNyb3NzLXBsYXRmb3JtIGNvbXBhdGliaWxpdHkuCisJKyB1c2UgbmV3IHZlcnNpb24gb2YgYXV0b2NvbmYgKDk3MTIzMCkgdG8gd29yayBhcm91bmQgbGltaXRlZAorCSAgZW52aXJvbm1lbnQgb24gQ0xJWCwgZHVlIHRvIHRoZSB3YXkgYXV0b2NvbmYgYnVpbGRzIC0taGVscCBtZXNzYWdlLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgY2hlY2sgdGhhdCB0aGUgQWRhOTUgYmluZGluZyBydW5zIGFnYWluc3QgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZgorCSAgbmN1cnNlcy4KKwkrIGluc2VydCBjb25zdGFudHMgYWJvdXQgdGhlIGxpYnJhcnkgdmVyc2lvbiBpbnRvIHRoZSBtYWluIHNwZWMtZmlsZSBvZgorCSAgdGhlIEFkYTk1IGJpbmRpbmcuCisKKzk3MTIyNworCSsgbW9kaWZ5IG9wZW4vZm9wZW4gY2FsbHMgdG8gdXNlIGJpbmFyeSBtb2RlLCBuZWVkZWQgZm9yIEVNWC4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHdvcmsgd2l0aCBhdXRvY29uZiAyLjEwIG1vZHMgZm9yIE9TLzIKKwkgIEVNWCAoZnJvbSBKLkouRy5SaXBvbGwpLgorCSsgZ2VuZXJhdGVkIG5jdXJzZXNfY2ZnLmggd2l0aCBwYXRjaCAoOTcxMjIyKSB0byBhdXRvY29uZiAyLjEyIHdoaWNoCisJICBieXBhc3NlcyBsaW1pdGVkIHNlZCBidWZmZXIgbGVuZ3RoLgorCT4gc2V2ZXJhbCBjaGFuZ2VzIGZyb20gSnVhbiBKb3NlIEdhcmNpYSBSaXBvbGwgPHdvcm1AYXJyYWtpcy5lcz4KKwkgIChKLkouRy5SaXBvbGwpIHRvIHN1cHBvcnQgT1MvMiBFTVg6CisJKyBhZGQgYSBfc2Nyb2xsaW5nIGZsYWcgdG8gU1AsIHRvIHNldCB3aGVuIHdlIGVuY291bnRlciBhIHRlcm1pbmFsCisJICB0aGF0IHNpbXBseSBjYW5ub3Qgc2Nyb2xsLgorCSsgY29ycmVjdGVkIGxvZ2ljIGluIF9uY19hZGRfdG9fdHJ5KCksIGJ5IGVuc3VyaW5nIHRoYXQgc3RyaW5ncyB3aXRoCisJICBlbWJlZGRlZCBcMjAwIGNoYXJhY3RlcnMgYXJlIG1hdGNoZWQuCisJKyBkb24ndCBhc3N1bWUgdGhlIGhvc3QgaGFzICdsaW5rKCknIGZ1bmN0aW9uLCBmb3IgbGlua2luZyB0ZXJtaW5mbworCSAgZW50cmllcy4KKworOTcxMjIwCisJKyBpZiB0aGVyZSdzIG5vIGlvY3RsJ3MgdG8gc3VwcG9ydCBzaWd3aW5jaCBoYW5kbGVyLCBkaXNhYmxlIGl0LgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1kaXNhYmxlLWV4dC1mdW5jcyB0byByZW1vdmUgdGhlIGV4dGVuZGVkCisJICBmdW5jdGlvbnMgZnJvbSB0aGUgYnVpbGQuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtdGVybWxpYiB0byBnZW5lcmF0ZSB0aGUgdGVybWluZm8KKwkgIGZ1bmN0aW9ucyBhcyBhIHNlcGFyYXRlIGxpYnJhcnkuCisJKyBhZGQgJ3NvdXJjZXMnIHJ1bGUgdG8gZmFjaWxpdGF0ZSBjcm9zcy1jb21waWxpbmcuCisJKyByZXZpZXcvZml4IG9yZGVyIG9mIG1vc3RseWNsZWFuL2NsZWFuL2Rpc3RjbGVhbiBydWxlcy4KKwkrIG1vZGlmeSBpbnN0YWxsLXJ1bGUgZm9yIGhlYWRlcnMgdG8gZmlyc3QgcmVtb3ZlIG9sZCBoZWFkZXIsIGluCisJICBjYXNlIHRoZXJlIHdhcyBhIHN5bWJvbGljIGxpbmsgdGhhdCBjb25mdXNlcyB0aGUgaW5zdGFsbCBzY3JpcHQuCisJKyBjb3JyZWN0ZWQgc3Vic3RpdHV0aW9uIGZvciBOQ1VSU0VTX0NPTlNUIGluIHRlcm0uaCAoY2Y6IDk3MTEwOCkKKwkrIGFkZCBudWxsIHBvaW50ZXIgY2hlY2tzIGluIHdub3V0cmVmcmVzaCgpLCBvdmVybGFwKCkgKHBhdGNoIGJ5CisJICBYaWFvZGFuIFRhbmcgPHh0YW5nQHFueC5jb20+KQorCSsgY29ycmVjdCB0cHV0cygpLCB3aGljaCBjb3VsZCBkZXJlZmVyZW5jZSBhIG51bGwgY3VyX3Rlcm0gaWYgaW52b2tlZAorCSAgYmVmb3JlIHRlcm1pbmFsIGlzIGluaXRpYWxpemVkIChwYXRjaCBieSBDaHJpc3RvcGhlciBTZWF3b29kCisJICA8Y2xzQHNlYXdvb2Qub3JnPikKKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIG1ha2VzIGJldHRlciB1c2Ugb2YgInByYWdtYSBJbmxpbmUiIGluIHRoZSBBZGE5NSBiaW5kaW5nCisJKyByZXN5bmNocm9uaXplcyB0aGUgZ2VuZXJhdGVkIGh0bWwgbWFucGFnZXMKKworOTcxMjEzCisJKyBhZGRpdGlvbmFsIGZpeGVzIGZvciBtYW4tcGFnZXMgc2VjdGlvbi1yZWZlcmVuY2VzCisJKyBhZGQgKGZvciBkZWJ1Z2dpbmcpIGEgY2hlY2sgZm9yIGljaC9pY2gxIGNvbmZsaWN0IHdpdGggc21pci9ybWlyCisJICB0byB0aWMsIGV0Yy4KKwkrIHJlbW92ZSBocGEvdnBhIGZyb20gcnh2dCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZXkgYXJlIG5vdAorCSAgaW1wbGVtZW50ZWQgY29ycmVjdGx5LCBhZGRlZCBzZ3IwLgorCSsgY2hhbmdlIG5jdXJzZXMgJ3MnIHRvIHVzZSByYXcgbW9kZSwgc28gXlEgd29ya3MgKHJlcG9ydGVkIGJ5IFJ1ZG9sZgorCSAgTGVpdGdlYiA8bGVpdGdlYkBsZWxhbmQuc3RhbmZvcmQuZWR1PikKKworOTcxMjA2CisJKyBtb2RpZnkgcHJvdGVjdGlvbiB3aGVuIGluc3RhbGxpbmcgbGlicmFyaWVzIHRvIChub3JtYWxseSkgbm90CisJICBleGVjdXRhYmxlLiAgSFAtVVggc2hhcmVkIGxpYnJhcmllcyBhcmUgYW4gZXhjZXB0aW9uLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgJ3RhY2snLgorCSsgaW1wbGVtZW50IHNjcmlwdCBmb3IgcmVuYW1pbmcgc2VjdGlvbi1yZWZlcmVuY2VzIGluIG1hbi1wYWdlIGluc3RhbGwsCisJICBmb3IgRGViaWFuIGNvbmZpZ3VyYXRpb24uCisJKyBhZGQgdmFsaWRpdHktY2hlY2sgZm9yIFNQIGluIHRyYWNlIGNvZGUgaW4gYmF1ZHJhdGUoKSAocmVwb3J0ZWQgYnkKKwkgIERhbmllbCBXZWF2ZXIpLgorCT4gcGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92IChmaXhlcyB0byBtYXRjaCBzb2wyNSBjdXJzZXMpCisJKyBtb2RpZnkgJ292ZXJsYXkoKScgc28gdGhhdCBjb3B5IGFwcGxpZXMgdGFyZ2V0IHdpbmRvdyBiYWNrZ3JvdW5kIHRvCisJICBjaGFyYWN0ZXJzLgorCSsgY29ycmVjdCAnbXZ3aW4oKScgc28gdGhhdCBpdCBkb2VzIG5vdCBjbGVhciB0aGUgcHJldmlvdXMgbG9jYXRpb25zLgorCSsgY29ycmVjdCBsaWJfYWNzLmMgc28gdGhhdCA4LWJpdCBjaGFyYWN0ZXIgaXMgbm90IHNpZ24gZXhwYW5kZWQgaW4KKwkgIGNhc2Ugb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIGNodHlwZS4KKwkrIGNvcnJlY3QgY29udHJvbC1jaGFyIHRlc3QgaW4gbGliX2FkZGNoLmMgZm9yIHVzZSB3aXRoIHdpZGUgY2hhcnMKKwkrIHVzZSBhdHRyaWJ1dGUgaW4gdGhlIGNodHlwZSB3aGVuIGFkZGluZyBhIGNvbnRyb2wgY2hhcmFjdGVyIGluCisJICBsaWJfYWRkY2guYyBjb250cm9sIGNoYXIgd2FzIGFkZGVkIHdpdGggY3VycmVudCBhdHRyaWJ1dGUKKworOTcxMTI5CisJKyBzYXZlL3Jlc3RvcmUgZXJybm8gaW4gX3RyYWNlZigpIGZ1bmN0aW9uCisJKyBjaGFuZ2UgdHJlYXRtZW50IG9mIGluaXRpYWxpemVfY29sb3IgdG8gdXNlIGEgcmFuZ2Ugb2YgMC4uMTAwMAorCSAgKHJlY29tbWVuZGVkIGJ5IERhbmllbCBXZWF2ZXIpLgorCSsgc2V0IHVtYXNrIGluIG1raW5zdGFsbGRpcnMsIGZpeGluZyBwcm9ibGVtcyByZXBvcnRlZCBieSB1c2VycyB3aG8KKwkgIGhhdmUgc2V0IHJvb3QncyB1bWFzayB0byAwNzcuCisJKyBjb3JyZWN0IGJ1ZyBpbiB0aWMgdGhhdCBjYXVzZWQgY2FwYWJpbGl0aWVzIHRvIGJlIHJlcHJpbnRlZCBhdCB0aGUKKwkgIGVuZCBvZiBvdXRwdXQgd2hlbiB0aGV5IGhhZCBlbWJlZGRlZCBjb21tZW50cy4KKwkrIHJld3JvdGUgd3JlZHJhd2xuIHRvIGNvcnJlc3BvbmQgdG8gWFNJLCBhbmQgc3BsaXQtb3V0IHNpbmNlIGl0IGlzCisJICBub3Qgb2Z0ZW4gdXNlZCAoZnJvbSByZXBvcnQgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92LCA5NzA4MjUpCisJKyByZXdyb3RlIERhbiBOZWxzb24ncyBjaGFuZ2UgdG8gbWFrZSBpdCBwb3J0YWJsZSwgYXMgd2VsbCBhcyB0bworCSAgY29ycmVjdCBsb2dpYyBmb3IgaGFuZGxpbmcgYmFja3NsYXNoZXMuCisJKyBhZGQgY29kZSB0byBfbmNfdGdldGVudCgpIHRvIG1ha2UgaXQgd29yayBtb3JlIGxpa2UgYSByZWFsIHRnZXRlbnQoKS4KKwkgIEl0IHJlbW92ZXMgYWxsIGVtcHR5IGZpZWxkcywgYW5kIHJlbW92ZXMgYWxsIGJ1dCB0aGUgZmlyc3QgaW4gYSBncm91cAorCSAgb2YgZHVwbGljYXRlIGNhcHMuICBUaGUgY29kZSB3YXMgcHVsbGVkIGZyb20gdGhlIEJTRCBsaWJ0ZXJtY2FwIGNvZGUKKwkgIGluIHRlcm1jYXAuYyAocGF0Y2ggYnkgRGFuIE5lbHNvbiA8ZG5lbHNvbkBlbXNwaG9uZS5jb20+CisJKyBkb24ndCBpbmNsdWRlIC0tZW5hYmxlLXdpZGVjIGluIHRoZSAtLXdpdGgtZGV2ZWxvcCBjb25maWd1cmUgb3B0aW9uLAorCSAgc2luY2UgaXQgaXMgbm90IGJpbmFyeS1jb21wYXRpYmxlIHdpdGggNC4xIChub3RlZCBieSBBbGV4YW5kZXIgVi4KKwkgIEx1a3lhbm92KQorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgZnVydGhlciBpbXByb3ZlbWVudHMgb2YgdGhlIHVzYWdlIG9mIGVsYWJvcmF0aW9uIHByYWdtYXMgaW4gdGhlIEFkYTk1CisJICBiaW5kaW5nCisJKyBlbmhhbmNlZCBBZGE5NSBzYW1wbGUgdG8gdXNlIHRoZSB1c2VyX2RhdGEgbWVjaGFuaXNtIGZvciBwYW5lbHMuCisJKyBhIGZpeCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHRvIG1ha2UgZ25hdC0zLjEwIHRoZSByZXF1aXJlZAorCSAgdmVyc2lvbi4KKwkrIHJlc3luYyBvZiB0aGUgaHRtbCB2ZXJzaW9uIG9mIHRoZSBtYW5wYWdlcworCis5NzExMjIKKwk+IGZpeGVzL3VwZGF0ZXMgZm9yIHRlcm1pbmZvLnNyYzoKKwkrIGFkZCB2dDIyMC1qcywgcGlsb3QsIHJiY29tbSwgZGF0YXBvaW50IGVudHJpZXMgZnJvbSBlc3IncyAyNy1qdW4tOTcKKwkgIHZlcnNpb24uCisJKyBhZGQgaGRzMjAwIGRlc2NyaXB0aW9uIChXYWx0ZXIgU2tvcnNraSkKKwkrIGFkZCBFTVggMC45YiBkZXNjcmlwdGlvbnMKKwkrIGNvcnJlY3Qgcm1zby9zbXNvIGNhcGFiaWxpdGllcyBpbiB3eTMwLW1jIGFuZCB3eTUwLW1jIChEYW5pZWwgV2VhdmVyKQorCSsgcmVuYW1lIHhocHRlcm0gYmFjayB0byBocHRlcm0uCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBJbXByb3ZlcyB0aGUgdXNhZ2Ugb2YgZWxhYm9yYXRpb24gcHJhZ21hcyBmb3IgdGhlIEFkYTk1IGJpbmRpbmcuCisJKyBBZGRzIGEgdHJhbnNsYXRpb24gb2YgdGhlIHRlc3QvcmFpbi5jIGludG8gQWRhOTUgdG8gdGhlIHNhbXBsZXMuCisJICBUaGlzIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9qZWN0IGJ5IExhdXJlbnQgUGF1dGV0CisJICAocGF1dGV0QGduYXQuY29tKQorCis5NzExMTUKKwkrIGluY3JlYXNlIE1BWF9OQU1FX1NJWkUgdG8gNTEyIHRvIGhhbmRsZSBleHRyZW1lbHkgbG9uZyBhbGlhcyBsaXN0CisJICBpbiBIUC1VWCB0ZXJtaW5mby4KKwkrIGNvcnJlY3Rpb24gJiBzaW1wbGlmaWNhdGlvbiBvZiBkZWxheSBjb21wdXRhdGlvbiBpbiB0cHV0cywgYmFzZWQgb24KKwkgIGNvbW1lbnRzIGZyb20gRGFuaWVsIFdlYXZlci4KKwkrIHJlcGxhY2UgdGVzdCBmb3IgU0NPIHdpdGggbW9yZSBwcmVjaXNlIGhlYWRlciB0ZXN0cy4KKwkrIGFkZCBjb25maWd1cmUgdGVzdCBmb3IgdW5zaWduZWQgbGl0ZXJhbHMsIHVzZSBpbiBOQ1VSU0VTX0JJVFMgbWFjcm8uCisJKyBjb21tZW50LW91dCB0aGUgLVBJQywgZXRjLiwgZmxhZ3MgZnJvbSBjKyssIHByb2dzIGFuZCB0ZXN0IG1ha2VmaWxlcworCSAgc2luY2UgdGhleSBwcm9iYWJseSBhcmUgbm90IG5lZWRlZCwgYW5kIGFyZSBsZXNzIGVmZmljaWVudCAobm90ZWQgYnkKKwkgIEp1ZXJnZW4gRmx1aykKKwkrIGFkZCAtTCQobGliZGlyKSB0byBsb2FkZXIgb3B0aW9ucywgYWZ0ZXIgLUwuLi9saWIgc28gdGhhdCBsb2FkZXJzCisJICB0aGF0IHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgdGVuZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcgaWYKKwkgIHRoZSBwcm9ncmFtcyBhcmUgbW92ZWQgYXJvdW5kIGFmdGVyIGluc3RhbGxpbmcgdGhlbSAoc3VnZ2VzdGVkIGJ5CisJICBKdWVyZ2VuIEZsdWspLgorCSsgYWRkIC1SIG9wdGlvbiB0byBsb2FkZXIgb3B0aW9ucyBmb3IgcHJvZ3JhbXMgZm9yIFNvbGFyaXMgaWYgdGhlCisJICAtLWVuYWJsZS1ycGF0aCBvcHRpb24gaXMgc3BlY2lmaWVkIGZvciB0aGUgbGlicmFyaWVzLgorCis5NzExMTIKKwkrIGNvcnJlY3QgaW5zdGFsbGVkIGZpbGVuYW1lIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uICpCU0QgKHJlcG9ydGVkIGJ5CisJICBKdWVyZ2VuIEZsdWspLgorCis5NzExMDgKKwkrIGNsZWFudXAgbG9naWMgZm9yIGRlY2lkaW5nIHdoZW4gdHB1dHMoKSBzaG91bGQgY2FsbCBkZWxheV9vdXRwdXQoKSwKKwkgIGJhc2VkIG9uIGNvbW1lbnRzIGZyb20gRGFuaWVsIFdlYXZlci4KKwkrIG1vZGlmaWVkIHRwdXRzKCkgdG8gYXZvaWQgdXNlIG9mIGZsb2F0LgorCSsgY29ycmVjdCB1c2Ugb2YgdHJhaWxwYWQgaW4gdHB1dHMoKSwgd2hpY2ggdXNlZCB0aGUgd3JvbmcgdmFyaWFibGUKKwkgIGluIGNhbGwgdG8gZGVsYXlfb3V0cHV0KCkuCisJKyBjb3JyZWN0IGludmVydGVkIGV4cHJlc3Npb24gZm9yIG51bGwtY291bnQgaW4gZGVsYXlfb3V0cHV0KCkKKwkgIChhbmFseXNpcyBieSBEYW5pZWwgV2VhdmVyKS4KKwkrIGFwcGx5IC0tZW5hYmxlLXJwYXRoIG9wdGlvbiB0byBTb2xhcmlzIChyZXF1ZXN0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKwkrIGNvcnJlY3Qgc3Vic3RpdHV0aW9uIG9mIEVYVFJBX0NGTEFHUyBmb3IgZ2NjIDIuNi4zCisJKyBjb3JyZWN0IGNoZWNrIGZvciBlcnJvci1yZXR1cm4gYnkgX25jX3RnZXRlbnQoKSwgd2hpY2ggcmV0dXJucyAwCisJICBmb3Igc3VjY2Vzcy4KKwkrIGFkZCBjb25maWd1cmUgdGVzdCBmb3IgQlNEIDQuNCBjZ2V0ZW50KCkgZnVuY3Rpb24sIG1vZGlmeQorCSAgcmVhZF90ZXJtY2FwLmMgdG8gdXNlIHRoZSBob3N0J3MgdmVyc2lvbiBvZiB0aGF0IGlmIGZvdW5kLCB1c2luZyB0aGUKKwkgIHRlcm1pbmFsIGRhdGFiYXNlIG9uIEZyZWVCU0QgKHJlcG9ydGVkIGJ5IFBldGVyIFdlbW0pLgorCSsgYWRkIHU4LCB1OSBzdHJpbmdzIHRvIHN1bi1pbCBkZXNjcmlwdGlvbiBmb3IgRGFuaWVsIFdlYXZlci4KKwkrIHVzZSBOQ1VSU0VTX0NPTlNUIGluIHBhbmVsJ3MgdXNlci1wb2ludGVyLgorCSsgbW9kaWZ5IGVkaXRfY2ZnLnNoIGFuZCBNS3Rlcm0uaC5hd2suaW4gdG8gc3Vic3RpdHV0ZSBOQ1VSU0VTX0NPTlNUCisJICBzbyB0aGF0IHdpbGwgd29yayBvbiBOZVhULgorCSsgdXNlIF9uY19zZXRfc2NyZWVuKCkgcmF0aGVyIHRoYW4gYXNzaWdubWVudHMgdG8gU1AgdG8gZml4IHBvcnQgdG8KKwkgIE5lWFQgKHJlcG9ydGVkIGJ5IEZyYW5jaXNjbyBBLiBUb21laSBUb3JyZXMpLgorCis5NzExMDEKKwkrIGZvcmNlIG1hbmRhdG9yeSBwYWRkaW5nIGluIGJlbGwgYW5kIGZsYXNoX3NjcmVlbiwgYXMgc3BlY2lmaWVkIGluCisJICBYU0kuCisJKyBkb24ndCBhbGxvdyBwYWRkaW5nX2JhdWRfcmF0ZSB0byBvdmVycmlkZSBtYW5kYXRvcnkgZGVsYXlzIChyZXBvcnRlZAorCSAgYnkgRGFuaWVsIFdlYXZlcikuCisJKyBtb2RpZnkgZGVsYXlfb3V0cHV0KCkgdG8gdXNlIF9uY190aW1lZF93YWl0KCkgaWYgbm8gYmF1ZHJhdGUgaGFzIGJlZW4KKwkgIGRlZmluZWQsIG9yIGlmIHRoZSBjdXJfdGVybSBwb2ludGVyIGlzIG5vdCBpbml0aWFsaXplZC4gIFhTSSB0cmVhdHMKKwkgIHRoaXMgYXMgdW5zcGVjaWZpZWQuICAocmVxdWVzdGVkIGJ5IERhbmllbCBXZWF2ZXIpLgorCSsgY2hhbmdlIGdldGNhcC1jYWNoZSBpZmRlZidzIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBjaGRpci9ta2RpcgorCSAgd2hlbiB0aGF0IGZlYXR1cmUgaXMgbm90IGNvbmZpZ3VyZWQuCisJKyByZW1vdmUgX25jX2Vycl9hYm9ydCgpIGNhbGxzIHdoZW4gd3JpdGVfZW50cnkuYyBmaW5kcyBhIGRpcmVjdG9yeSBidXQKKwkgIGNhbm5vdCB3cml0ZSB0byBpdCwgZS5nLiwgd2hlbiB0cmFuc2xhdGluZyBwYXJ0L2FsbCBvZiAvZXRjL3Rlcm1jYXAKKwkgIChyZXBvcnRlZCBieSBBbmRyZWFzIEphZWdlciA8YWpAYXJ0aHVyLnJoZWluLW5lY2thci5kZT4pLgorCSAgKHRoaXMgZGF0ZXMgYmFjayB0byA5NTExMDIsIGluIDEuOS43YSkuCisJKyBtaW5vciBpZmRlZiBmaXhlcyB0byBjb21waWxlIHdpdGggYXRhYyBhbmQgZ2xpYmMgMi4wLjVjCisJKyBhZGQgY2hlY2sgZm9yIC1sZ2VuIHdoZW4gY29uZmlndXJpbmcgcmVnZXhwci5oCisJKyBtb2RpZnkgU29sYXJpcyBzaGFyZWQtbGlicmFyeSBvcHRpb24gIi1kIHkiIHRvICItZHkiIHRvIHdvcmthcm91bmQKKwkgIGluY29tcGF0aWJpbGl0eSBvZiBnY2MgMi43LjIgdnMgdmVuZG9yJ3MgdG9vbHMuCisKKzk3MTAyNgorCSsgY29ycmVjdCBpZmRlZidzIGZvciBzdHJ1Y3Qgd2luc2l6ZSB2cyBzdHJ1Y3QgdHR5c2l6ZSBpbiBsaWJfc2V0dXAuYworCSAgdG8gY29tcGlsZSBvbiBTQ08uCisJKyByZW1vdmUgZGFuZ2xpbmcgYmFja3NsYXNoIGluIHBhbmVsL01ha2VmaWxlLmluCisJKyBtb2RpZnkgTUtrZXluYW1lLmF3ayB0byB3b3JrIHdpdGggU0NPJ3MgbmF3aywgd2hpY2ggZHVtcHMgY29yZSBpbiB0aGUKKwkgIGxlbmd0aCgpIGZ1bmN0aW9uLgorCSsgY29ycmVjdCBsZW5ndGggb2YgYWxsb2NhdGlvbiBpbiBfbmNfYWRkX3RvX3RyeSgpLCB0byBhbGxvdyBmb3IKKwkgIHRyYWlsaW5nIG51bGwuCisJKyBjb3JyZWN0IGxvZ2ljIGluIF9uY19yZW1vdmVfa2V5KCksIHdoaWNoIHdhcyBkaXNjYXJkaW5nIHRvbyBtYW55CisJICBub2RlcyAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KQorCis5NzEwMjUKKwkrIGFkZCBkZWZpbml0aW9uIGZvciAkKFJFTF9WRVJTSU9OKSB0byB0ZXN0L01ha2VmaWxlLmluLCBzbyAqQlNECisJICBzaGFyZWQgbGlicmFyaWVzIGxpbmsgcHJvcGVybHkgKHNlZSA5NzA1MjQpLgorCSsgbW9kaWZ5IExpbnV4IHNoYXJlZC1saWJyYXJ5IGdlbmVyYXRpb24gdG8gaW5jbHVkZSBsaWJyYXJ5CisJICBkZXBlbmRlbmNpZXMgKGUuZy4sIC1sbmN1cnNlcyBhbmQgLWxncG0pIGluIHRoZSBmb3JtcywgbWVudSBhbmQKKwkgIHBhbmVsIGxpYnJhcmllcyAoc3VnZ2VzdGVkIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHJhdGhlcgorCSAgdGhhbiB1bmFtZSwgd2hpY2ggaXMgdW5yZWxpYWJsZSBvbiBzb21lIHN5c3RlbXMuCisJKyB1cGRhdGVkIE1ha2VmaWxlLmdsaWJjLCB0ZXN0LWJ1aWx0IHdpdGggZ2xpYmMgMi4wLjVjCisJKyBtb2RpZnkga2V5bmFtZSgpIHRvIHJldHVybiB2YWx1ZXMgY29uc2lzdGVudCB3aXRoIFNWcjQgY3Vyc2VzIChwYXRjaAorCSAgYnkgSnVlcmdlbiBGbHVrKS4KKwk+IGNoYW5nZXMgcmVxdWVzdGVkIGJ5IERhbmllbCBXZWF2ZXI6CisJKyBtb2RpZnkgZGVsYXlfb3V0cHV0KCkgc28gdGhhdCBpdCB1c2VzIHRoZSBzYW1lIG91dHB1dCBmdW5jdGlvbiBhcworCSAgdHB1dHMoKSBpZiBjYWxsZWQgZnJvbSB0aGF0IGZ1bmN0aW9uLgorCSsgbW92ZSBfYmF1ZHJhdGUgZnJvbSBTQ1JFRU4gdG8gVEVSTUlOQUwgc28gdGhhdCBsb3ctbGV2ZWwgdXNlIG9mCisJICB0cHV0cyB3b3JrcyB3aGVuIFNQIGlzIG5vdCBzZXQuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmYWN0b3IgbGliX21lbnUgYW5kIGxpYl9mb3JtIGludG8gc21hbGxlciBtb2R1bGVzCisJKyBjbGVhbiB1cCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gcGFuZWwgYW5kIFNDUkVFTgorCSsgbWlub3IgY2hhbmdlcyB0byB0aGUgQWRhOTUgbW91c2Ugc3VwcG9ydCBpbXBsZW1lbmF0aW9uCisJKyBtaW5vciBidWdmaXggaW4gQysrIGJpbmRpbmcgdG8gcmlwb2ZmIHdpbmRvd3MKKwkrIGZpeCBhIGZldyBBZGE5NSBodG1sIGRvY3VtZW50YXRpb24gcGFnZXMKKworOTcxMDE4CisJKyBzcGxpdC1vdXQgbGliX3VuZ2V0Y2guYywgbWFrZSBydW50aW1lIGxpbmsgdG8gcmVzaXpldGVybSgpIHRvCisJICBkZWNvdXBsZSB0aG9zZSBtb2R1bGVzIGZyb20gbGliX3Jlc3RhcnQuYworCSsgYWRkIHh0ZXJtLXhmODYtdjM5dCBkZXNjcmlwdGlvbiB0byB0ZXJtaW5mby5zcmMKKwkrIHJlc2V0IFNQLT5fZW5kd2luIGluIGxpYl90c3RwLmMgY2xlYW51cCgpIGZ1bmN0aW9uIGFmdGVyIGNhbGxpbmcKKwkgIGVuZHdpbigpIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlcGFpbnRpbmcgaWYgdGhlIGFwcGxpY2F0aW9uIGhhcworCSAgZXN0YWJsaXNoZWQgYW4gYXRleGl0IGZ1bmN0aW9uLCBldGMuICBFbmNvdW50ZXJlZCB0aGlzIHByb2JsZW0gaW4KKwkgIHRoZSBjKysgZGVtbywgd2hvc2UgZGVzdHJ1Y3RvcnMgcmVwYWludCB0aGUgc2NyZWVuLgorCSsgY29tYmluZSBfbmNfZ2V0X3NjcmVlbnNpemUoKSBhbmQgcmVzaXpldGVybSgpIGNhbGxzIGFzIG5ldyBmdW5jdGlvbgorCSAgX25jX3VwZGF0ZV9zY3JlZW5zaXplKCkuCisJKyBtaW5vciBmaXhlcyB0byBhbGxvdyBjb21waWxlIHdpdGggZysrIChzdWdnZXN0ZWQgYnkgTmVsc29uIEguIEYuCisJICBCZWViZSkuCisJKyBpbXBsZW1lbnQgaW5zdGFsbC1ydWxlcyBmb3IgQWRhOTUgbWFrZWZpbGVzLgorCSsgdXNlIHNjcmVlbl9saW5lcyBvciBNQVhMSU5FUyBhcyBuZWVkZWQgd2hlcmUgTElORVMgd2FzIGNvZGVkLAorCSAgYXMgd2VsbCBhcyBzY3JlZW5fY29sdW1ucyBmb3IgQ09MUywgaW4gdGhlIG5jdXJzZXMgbGlicmFyeS4KKwk+IHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIG1vZGlmeSBsb2dpYyBmb3IgcmlwcGVkLW9mZiBsaW5lcyB0byBoYW5kbGUgc2V2ZXJhbCBTQ1JFRU5zLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgZmFjdG9ycyBsaWJfc2xrLmMgaW50byBzb21lIHNtYWxsZXIgbW9kdWxlcworCSsgZmFjdG9ycyBwYW5lbC5jIGludG8gc29tZSBzbWFsbGVyIG1vZHVsZXMKKwkrIHB1dHMgdGhlIHN0YXRpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwYW5lbCBzdGFjayBpbnRvIHRoZQorCSAgU0NSRUVOIHN0cnVjdHVyZSB0byBhbGxvdyBkaWZmZXJlbnQgcGFuZWwgc3RhY2tzIG9uIGRpZmZlcmVudAorCSAgc2NyZWVucy4KKwkrIHByZWxpbWluYXJ5IGZpeCBmb3IgYW4gZXJyb3IgYWRqdXN0aW5nIExJTkVTIHRvIGFjY291bnQgZm9yCisJICByaXBwZWQtb2ZmIGxpbmVzLgorCis5NzEwMTEKKwkrIG1vdmUgX25jX21heF9jbGlja19pbnRlcnZhbCBhbmQgb3RoZXIgbW91c2UgaW50ZXJmYWNlIGl0ZW1zIHRvIFNDUkVFTgorCSAgc3RydWN0IHNvIHRoYXQgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIHRlcm1pbmFsLCBhbmQgYWxzbworCSAgc2F2ZSBtZW1vcnkgd2hlbiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgbmVlZCBhIG1vdXNlIChyb3VnaGx5IDNrIHZzCisJICAwLjVrIG9uIExpbnV4KS4KKwkrIG1vZGlmeSBtb3VzZWludGVydmFsKCkgc28gdGhhdCBhIG5lZ2F0aXZlIHBhcmFtZXRlciBxdWVyaWVzIHRoZQorCSAgY2xpY2staW50ZXJ2YWwgd2l0aG91dCBtb2RpZnlpbmcgaXQuCisJKyBtb2RpZnkgbmN1cnNlcyAnaScgdGVzdCB0byB3b3JrIHdpdGggbmN1cnNlcycgYXBwYXJlbnQgZXh0ZW5zaW9uIGZyb20KKwkgIFNWcjQsIGkuZS4sIGFsbG93cyBub2NicmVhaytub2VjaG8gKGFuYWx5c2lzIGJ5IEFsZXhhbmRlciBWLgorCSAgTHVreWFub3YpLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0td2l0aC1hZGEtaW5jbHVkZXMgYW5kIC0td2l0aC1hZGEtb2JqZWN0cywKKwkgIHRvIGRyaXZlIEFkYTk1IGJpbmRpbmcgaW5zdGFsbCAobm90IHlldCBpbXBsZW1lbnRlZCkuCisJKyBpbnN0YWxsIEMrKyBiaW5kaW5nIGFzIC1sbmN1cnNlcysrIGFuZCBhc3NvY2lhdGVkIGhlYWRlcnMgd2l0aCB0aGUKKwkgIG90aGVyIG5jdXJzZXMgaGVhZGVycy4KKwkrIGZpeCBoZWFkZXIgdW5pbnN0YWxsIGlmIGNvbmZpZ3VyZSAtLXNyY2RpciBpcyB1c2VkLgorCT4gbWlub3IgaW50ZXJmYWNlIGNoYW5nZXMgdG8gc3VwcG9ydCAndGFjaycgcHJvZ3JhbSAtVEQKKwkgIChyZXF1ZXN0IGJ5IERhbmllbCBXZWF2ZXIgPGRhbndAem55eC5jb20+KS4KKwkrIGV4cG9ydCBmdW5jdGlvbnMgX25jX3RyYW5zX3N0cmluZygpIGFuZCBfbmNfbXNlY19jb3N0KCkuCisJKyBhZGQgdmFyaWFibGUgX25jX251bGxzX3NlbnQsIHRvIHJlY29yZCB0aGUgbnVtYmVyIG9mIHBhZGRpbmcKKwkgIGNoYXJhY3RlcnMgb3V0cHV0IGluIGRlbGF5X291dHB1dCgpLgorCSsgbW92ZSB0ZXN0cyBmb3IgZ2VuZXJpY190eXBlIGFuZCBoYXJkX2NvcHkgdGVybWluYWxzIGluIHNldHVwdGVybSgpCisJICB0byB0aGUgZW5kIG9mIHRoYXQgZnVuY3Rpb24gc28gdGhhdCB0aGUgbGlicmFyeSB3aWxsIHN0aWxsIGJlCisJICBpbml0aWFsaXplZCwgdGhvdWdoIG5vdCBnZW5lcmFsbHkgdXNlZnVsIGZvciBjdXJzZXMgcHJvZ3JhbXMuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIG1vZGlmeSBDbHJCb3R0b20oKSB0byBhdm9pZCB1c2luZyBjbHJfZW9zIGlmIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUKKwkgIHRvIGVyYXNlLgorCSsgdHlwbyBpbiBjb25maWd1cmUgLS1oZWxwLgorCT4gcGF0Y2ggYnkgSiBUIENvbmtsaW4gKHdpdGggbWlub3IgcmVzeW5jIGFnYWluc3QgSnVlcmdlbidzIGNoYW5nZXMpCisJKyBzcGxpdC1vdXQgbGliX2ZsYXNoLmMgZnJvbSBsaWJfYmVlcC5jCisJKyBzcGxpdC1vdXQgbGliX2hsaW5lLmMgYW5kIGxpYl92bGluZS5jIGZyb20gbGliX2JveC5jCisJKyBzcGxpdC1vdXQgbGliX3dhdHRyb24uYywgbGliX3dhdHRyb2ZmLmMgZnJvbSBsaWJfYWRkY2guYworCis5NzEwMDUKKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGNvcnJlY3Qgc291cmNlL3RhcmdldCBvZiBjKysvZWRpdF9jZmcuc2gKKworOTcxMDA0CisJKyBhZGQgY29sb3IsIG1vdXNlIHN1cHBvcnQgdG8ga3Rlcm0gdGVybWluZm8gZW50cnkuCisJKyBtb2RpZnkgbGliX21vdXNlLmMgdG8gcmVjb2duaXplIHJ4dnQsIGt0ZXJtLCBjb2xvcl94dGVybSBhbHNvIGFzCisJICBwcm92aWRpbmcgInh0ZXJtIi1zdHlsZSBtb3VzZS4KKwkrIHVwZGF0ZWQgcnh2dCdzIHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIGNvcnJlc3BvbmQgdG8gMi4yMWIsIHdpdGgKKwkgIGZpeGVzIGZvciB0aGUgYWNzYyAodGhlIGJveDEgY2FwYWJpbGl0eSBpcyBpbmNvcnJlY3QsIGVjaDEgZG9lcyBub3QKKwkgIHdvcmspLgorCSsgZml4IGxvZ2ljIGluIHBhcnNlX2VudHJ5LmMgdGhhdCBkaXNjYXJkZWQgYWNzYyB3aGVuICdzeW50aGVzaXppbmcnCisJICBhbiBlbnRyeSBmcm9tIGVxdWl2YWxlbnRzIGluIFhFTklYIG9yIEFJWC4gIFRoaXMgbGV0cyBuY3Vyc2VzIGhhbmRsZQorCSAgdGhlIGRpc3RyaWJ1dGlvbiBjb3B5IG9mIHJ4dnQncyB0ZXJtaW5mby4KKwkrIG1vZGlmeSBhY3NjIGNhcGFiaWxpdHkgZm9yIGxpbnV4IGFuZCBsaW51eC1rb2k4IHRlcm1pbmZvIGRlc2NyaXB0aW9ucworCSAgKGZyb20gUGF2ZWwgUm9za2luIDxwYXZlbEBhYnNvbHV0ZS5zcGIuc3U+KS4KKwkrIGNvcnJlY3RlZCBkZWZpbml0aW9uIGluIGN1cnNlcy5oIGZvciBBQ1NfTEFOVEVSTiwgd2hpY2ggd2FzICdJJworCSAgcmF0aGVyIHRoYW4gJ2knIChzZWUgOTcwODAyKS4KKwkrIHVwZGF0ZWQgdGVybWluZm8uc3JjIHdpdGggcmVmb3JtYXR0ZWQgYWNzYyBlbnRyaWVzLCBhbmQgcmVwYWlyZWQgdGhlCisJICB0cmFzaGVkIGVudHJpZXMgd2l0aCBzcHVyaW91cyAnXCcgY2hhcmFjdGVycyB0aGF0IHRoaXMgZXhwb3NlZC4KKwkrIGFkZCBsb2dpYyB0byBkdW1wX2VudHJ5LmMgdG8gcmVmb3JtYXQgYWNzYyBlbnRyaWVzIGludG8gY2Fub25pY2FsCisJICBmb3JtIChzb3J0ZWQsIHVuaXF1ZSBtYXBwaW5nKS4KKwkrIGFkZCBjb25maWd1cmUgc2NyaXB0IHRvIGdlbmVyYXRlIGMrKy9ldGlwLmgKKwkrIGFkZCBjb25maWd1cmUgLS13aXRoLWRldmVsb3Agb3B0aW9uLCB0byBlbmFibGUgYnkgZGVmYXVsdCBtb3N0IG9mIHRoZQorCSAgZXhwZXJpbWVudGFsIG9wdGlvbnMgKHJlcXVlc3RlZCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgcmVuYW1lICdkZWluc3RhbGwnIHRvICd1bmluc3RhbGwnLCBmb2xsb3dpbmcgR05VIGNvbnZlbnRpb24KKwkgIChzdWdnZXN0ZWQgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92OgorCSsgbW9kaWZ5IHRhY3RpY3MgMiBhbmQgNSBpbiBvbnNjcmVlbl9tdmN1cigpLCB0byBhbGxvdyB0aGVtIG9uIHRoZSBsYXN0CisJICBsaW5lIG9mIHRoZSBzY3JlZW4sIHNpbmNlIGNhcnJpYWdlIHJldHVybiB3aWxsIG5vdCBjYXVzZSBhIG5ld2xpbmUuCisJKyByZW1vdmUgY2xhdXNlIGZyb20gUHV0Q2hhckxSKCkgdGhhdCB3b3VsZCB0cnkgdG8gdXNlCisJICBlYXRfbmV3bGluZV9nbGl0Y2ggc2luY2UgdGhhdCBhcHBhcmVudGx5IGRvZXMgbm90IHdvcmsgb24gc29tZQorCSAgdGVybWluYWxzIChlLmcuLCBNJCB0ZWxuZXQpLgorCSsgY29ycmVjdCBhIGxpbWl0IGNoZWNrIGluIHNjcm9sbF9jc3JfYmFja3dhcmQoKQorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBhZGRzIGR1bW15IGltcGxlbWVudGF0aW9ucyBvZiBtZXRob2RzIGFib3ZlKCkgYW5kIGJlbG93KCkgdG8gdGhlCisJICBOQ3Vyc2VzUGFuZWwgY2xhc3MuCisJKyBmaXhlcyBtaXNzaW5nIHJldHVybmNvZGUgaW4gTkN1cnNlc1dpbmRvdzo6cmlwb2ZmbGluZSgpCisJKyBmaXhlcyBtaXNzaW5nIHJldHVybmNvZGUgaW4gVGVzdEFwcGxpY2F0aW9uOjpydW4oKSBpbiBkZW1vLmNjCisJKyBXZSBzaG91bGQgYXQgbGVhc3QgZ2l2ZSBhIGNvbW1lbnQgaW4gZXRpcC5oIHdoeSBpdCBpcyBjdXJyZW50bHkgYQorCSAgcHJvYmxlbSB0byBpbnN0YWxsIHRoZSBDKysgYmluZGluZyBzb21ld2hlcmUKKwkrIG1ha2VzIHRoZSBXSU5ET1cqIGFyZ3VtZW50IG9mIHdlbmNsb3NlKCkgYSBjb25zdC4KKwkrIG1vZGlmaWVzIHNldmVyYWwgb2YgdGhlIHJvdXRpbmVzIGluIGxpYl9hZGFiaW5kLmMgdG8gdXNlIGEgY29uc3QKKwkgIFdJTkRPVyogYXJndW1lbnQuCisKKzk3MDkyNworCSsgYWRkICdkZWluc3RhbGwnIHJ1bGVzLgorCSsgdXNlIGV4cGxpY2l0IGFzc2lnbm1lbnRzIGluIGNvbmZpZ3VyZSAtLXdpdGhvdXQtcHJvZ3Mgb3B0aW9uIHRvCisJICB3b3JrIGFyb3VuZCBhdXRvY29uZiBidWcgd2hpY2ggZG9lc24ndCBhbHdheXMgc2V0ICR3aXRodmFsLgorCSsgY2hlY2sgZm9yIGxkY29uZmlnLCBkb24ndCB0cnkgdG8gcnVuIGl0IGlmIG5vdCBmb3VuZC4KKwkrIGltcGxlbWVudCBzaW1wbGUvdW5vcHRpbWl6ZWQgY2FzZSBpbiBsaWJfZG91cGRhdGUuYyB0byBoYW5kbGUKKwkgIGRpc3BsYXkgd2l0aCBtYWdpYyBjb29raWUgZ2xpdGNoLCB0ZXN0ZWQgd2l0aCBuY3Vyc2VzLmMgcHJvZ3JhbS4KKwkrIGNvcnJlY3QgbWlzc2luZyBfdHJhY2VmIGluIGdldG1vdXNlKCksIHRvIGJhbGFuY2UgdGhlIHJldHVybkNvZGUKKwkgIG1hY3JvLgorCSsgc2ltcGxpZnkgc2hvd19hdHRyKCkgaW4gbmN1cnNlcy5jIHVzaW5nIHRlcm1hdHRycygpLgorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBwcm92aWRlcyBtaXNzaW5nIGlubGluZXMgZm9yIG12d1todl1saW5lIGluIGN1cnNlc3cuaCBvZiB0aGUgQysrCisJICBiaW5kaW5nCisJKyBmaXhlcyBhIHR5cG8gaW4gYSBjb21tZW50IG9mIGZybV9kcml2ZXIuYworCSsgRW5oYW5jZXMgQWRhOTUgTWFrZWZpbGVzIHRvIGZ1bGZpbGwgdGhlIHJlcXVpcmVtZW50IG9mIEdOQVQtMy4xMCB0aGF0CisJICBnZW5lcmljcyBzaG91bGQgYmUgY29tcGlsZWQuICBQcm9wZXIgZml4ZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKwkgIHNjcmlwdHMgYXJlIGFsc28gcHJvdmlkZWQuCisKKzk3MDkyMAorCSsgc2V2ZXJhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IChyZXF1ZXN0ZWQgYnkgV2FyZAorCSAgSG9ybmVyKToKKwkgICsgYWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0td2l0aG91dC1wcm9ncywgdG8gc3VwcHJlc3MgdGhlIGJ1aWxkIG9mIHRoZQorCSAgICB1dGlsaXR5IHByb2dyYW1zLCBlLmcuLCBmb3IgY3Jvc3MtY29tcGlsaW5nLgorCSAgKyBhZGQgJChIT1NUQ0NGTEFHUykgYW5kICQoSE9TVExERkxBR1MpIHN5bWJvbHMgdG8gbmN1cnNlcworCSAgICBNYWtlZmlsZS5pbiwgdG8gc2ltcGxpZnkgc2V0dXAgZm9yIGNyb3NzIGNvbXBpbGluZy4KKwkgICsgYWRkIGxvZ2ljIGluIGNvbmZpZ3VyZSBzY3JpcHQgdG8gcmVjb2duaXplICItLXRhcmdldD12eHdvcmtzIiwgYW5kCisJICAgIGdlbmVyYXRlIGxvYWQvaW5zdGFsbCBhY3Rpb25zIGZvciBWeFdvcmtzIG9iamVjdHMuCisJKyBtb3ZlIHR5cGVkZWYgZm9yIHNpZ2FjdGlvbl90IGludG8gU2lnQWN0aW9uLmggdG8gd29yayBhcm91bmQgcHJvYmxlbQorCSAgZ2VuZXJhdGluZyBsaW50IGxpYnJhcnkuCisJKyBtb2RpZnkgZnR5X3JlZ2V4LmMgdG8gcmVmbGVjdCByZW5hbWluZyBvZiBpZmRlZidzIGZvciByZWd1bGFyCisJICBleHByZXNzaW9ucy4KKwkrIHNpbXBsaWZ5IGlmZGVmIGluIGxpYl9zZXR1cC5jIGZvciBUSU9DR1dJTlNaIHNpbmNlIHRoYXQgc3ltYm9sIG1heQorCSAgcmVzaWRlIGluIDxzeXMvaW9jdGwuaD4uCisJKyBtZXJnZSB0ZXN0Y3Vycy5jIHdpdGggdmVyc2lvbiBmcm9tIFBEQ3Vyc2VzIDIuMywgY2xhcmlmeWluZyBzb21lIG9mCisJICB0aGUgbW9yZSBvYnNjdXJlIHRlc3RzLCB3aGljaCByZWx5IHVwb24gY29sb3IuCisJKyB1c2UgbWFjcm9zIGdldGJlZ3l4KCkgYW5kIGdldG1heHl4KCkgaW4gbmV3ZGVtby5jIGFuZCB0ZXN0Y3Vycy5jCisJKyBtb2RpZnkgbmN1cnNlcy5jIHRvIHVzZSBnZXRiZWd5eCgpIGFuZCBnZXRtYXh5eCgpIG1hY3JvcyB0byBjb3ZlciB1cAorCSAgaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZSB3cnQgU1ZyNCBjdXJzZXMsIGFsbG93ICdzJyB0ZXN0IHRvIHdvcmsuCisJKyBhZGQgbWlzc2luZyBlbmR3aW4oKSB0byB0ZXN0c2NhbncuYyBwcm9ncmFtIChyZXBvcnRlZCBieSBGYXVzdG8KKwkgIFNhcG9yaXRvIDxmYXVzYXBAaXRiLml0PikuCisJKyBmaXhlcy91cGRhdGVzIGZvciBNYWtlZmlsZS5nbGliYyBhbmQgcmVsYXRlZCBmaWxlcyB1bmRlciBzeXNkZXBzCisJICAocGF0Y2ggYnkgSC5KLkx1KS4KKwk+IHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgYWRkIGNoZWNrcyBmb3IgbnVsbCBwb2ludGVycywgZXNwZWNpYWxseSBXSU5ET1cncyB0aHJvdWdob3V0IHRoZQorCSAgbmN1cnNlcyBsaWJyYXJ5LgorCSsgc29sdmUgYSBwcm9ibGVtIHdpdGggd3JvbmcgY2FsY3VsYXRpb24gb2YgcGFuZWwgb3ZlcmxhcHBpbmcgKHJlcG9ydGVkCisJICBieSBXYXJkIEhvcm5lcik6CisJICArIG1ha2Ugc3VyZSB0aGF0IGEgcGFuZWwncyB3aW5kb3cgaXNuJ3QgYSBwYWQuCisJICArIGRvIG1vcmUgZXJyb3IgY2hlY2tpbmcgaW4gbW9kdWxlIGxpYl90b3VjaC5jCisJKyBtaXNzaW5nIGZpbGVzIGZvciBBZGE5NSBiaW5kaW5nIGZyb20gdGhlIGxhc3QgcGF0Y2gKKwkrIHN5bmNoLiBvZiBnZW5lcmF0ZWQgaHRtbCBwYWdlcyAoUkNTLUlkJ3Mgd2VyZSB3cm9uZyBpbiBodG1sIGZpbGVzKQorCSsgc3VwcG9ydCBmb3IgS2V5X1Jlc2l6ZSBpbiBBZGEgYmluZGluZworCSsgY2hhbmdlZCBkb2N1bWVudGF0aW9uIHN0eWxlIGluIC4vYysrL2N1cnNlc20uaAorCT4gcGF0Y2hlcyBieSBBbGV4YW5kZXIgVi4gTHVreWFub3Y6CisJKyB1bmRvIGF0dGVtcHQgdG8gZG8gcmVjdXJzaXZlIGlubGluaW5nIGZvciBQdXRDaGFyKCksIG5vdGluZyB0aGF0IGl0CisJICBkaWQgbm90IGltcHJvdmUgdGltaW5nIG1lYXN1cmFibHksIGJ1dCBpbmZsYXRlZCB0aGUgc2l6ZSBvZgorCSAgbGliX2RvdXBkYXRlLm8KKworOTcwOTEzCisJKyBtb2RpZnkgcmFpbi5jIHRvIHVzZSBjb2xvci4KKwkrIGNvcnJlY3Qgc2Nyb2xsX2Nzcl9iYWNrd2FyZCgpIHRvIG1hdGNoIHNjcm9sbF9jc3JfZm9yd2FyZCgpLgorCSsgbWlub3IgYWRqdXN0bWVudCB0byBsbGliLWxuY3Vyc2VzLCB0byB3b3JrIHdpdGggU29sYXJpcyAyLjUuMQorCSsgbWlub3IgZml4ZXMgdG8gc3lzZGVwcy91bml4L3N5c3YvbGludXgvY29uZmlndXJlIHRvIHJlZmxlY3QgcmVuYW1pbmcKKwkgIG9mIGNvbmZpZ3VyZSBjYWNoZSB2YXJpYWJsZXMgaW4gOTcwOTA2LgorCSsgY29ycmVjdCBsb2dpYyBpbnZvbHZpbmcgY2hhbmdlcyB0byBPX1ZJU0lCTEUgb3B0aW9uIGluCisJICBTeW5jaHJvbml6ZV9PcHRpb25zIGZ1bmN0aW9uIGluIGZybV9kcml2ZXIuYyAoVG9ueSBIb2ZmbWFubgorCSAgPFRvbnkuSG9mZm1hbm5AaGlhLm5yYy5jYT4pCisJKyBhZGQgJChIT1NUQ0MpIHN5bWJvbCB0byBuY3Vyc2VzIE1ha2VmaWxlLmluLCB0byBzaW1wbGlmeSBzZXR1cCBmb3IKKwkgIGNyb3NzIGNvbXBpbGluZyAoc3VnZ2VzdGVkIGJ5IENocmlzIEpvaG5zKS4KKwkrIG1vZGlmeSBpZmRlZiBpbiBsaWJfc2V0dXAuYyB0byBvbmx5IGluY2x1ZGUgPHN5cy9pb2N0bC5oPiBpZiB3ZSBjYW4KKwkgIHVzZSBpdCB0byBzdXBwb3J0IHNjcmVlbi1zaXplIGNhbGN1bGF0aW9uIChyZXBvcnRlZCBieSBDaHJpcyBKb2hucykuCisJKyAjdW5kZWYgdW5jdHJsIHRvIGF2b2lkIHN5bWJvbCBjb25mbGljdCBpbiBwb3J0IHRvIFJURU1TIChyZXBvcnRlZCBieQorCSAgQ2hyaXMgSm9obnMgPGNqb2huc0BwbGVzc2V5LmNvbS5hdT4pCisJPiBwYXRjaGVzIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIHNpbXBsaWZpZWQsIG1hZGUgbWlub3IgY29ycmVjdGlvbnMgdG8gQWRhOTUgYmluZGluZyB0byBmb3JtCisJICBmaWVsZHR5cGUuCisJKyBUaGUgQysrIGJpbmRpbmcgaGFzIGJlZW4gZW5oYW5jZWQ6CisJICArIEltcHJvdmUgTkN1cnNlc1dpbmRvdyBjbGFzczogIGFkZGVkIGFkZGl0aW9uYWwgbWV0aG9kcyB0byBjb3ZlcgorCSAgICBtb3JlIG5jdXJzZXMgZnVuY3Rpb25hbGl0eS4gIE1ha2UgcmVmcmVzaCgpIGFuZCBub3V0cmVmcmVzaCgpCisJICAgIHZpcnR1YWwgbWVtYmVycyB0byBhbGxvdyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gaW4gdGhlCisJICAgIE5DdXJzZXNQYW5lbCBjbGFzcy4KKwkgICsgQ0FVVElPTjogIGNoYW5nZWQgb3JkZXIgb2YgcGFyYW1ldGVycyBpbiB2bGluZSgpIGFuZCBobGluZSgpIG9mCisJICAgIE5DdXJzZXNXaW5kb3cgY2xhc3MuCisJICArIE1ha2UgcmVmcmVzaCgpIGluIE5DdXJzZXNQYW5lbCBub24tc3RhdGljLCBpdCBpcyBub3cgYQorCSAgICByZWltcGxlbWVudGF0aW9uIG9mIHJlZnJlc2goKSBpbiB0aGUgYmFzZSBjbGFzcy4gIEFkZGVkCisJICAgIG5vdXRyZWZyZXNoKCkgdG8gTkN1cnNlc1BhbmVsLgorCSAgKyBBZGRlZCBOQ3Vyc2VzRm9ybSBhbmQgcmVsYXRlZCBjbGFzc2VzIHRvIHN1cHBvcnQgbGliZm9ybQorCSAgICBmdW5jdGlvbmFsaXR5LgorCSAgKyBNb3ZlZCBtb3N0IG9mIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCBzdHVmZiBmcm9tIGN1cnNlc3cuaCB0byBldGlwLmgKKwkgICsgQWRkZWQgTkN1cnNlc0FwcGxpY2F0aW9uIGNsYXNzIHRvIHN1cHBvcnQgZWFzeSBjb25maWd1cmF0aW9uIG9mCisJICAgIG1lbnUgYW5kIGZvcm1zIHJlbGF0ZWQgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIHJpcHBlZCBvZiB0aXRsZSBsaW5lcworCSAgICBhbmQgU29mdC1MYWJlbC1LZXlzIGZvciBhbiBhcHBsaWNhdGlvbi4KKwkgICsgU3VwcG9ydCBvZiBBdXRvLUNsZWFudXAgZm9yIGEgbWVudSdzIGZpZWxkbGlzdC4KKwkgICsgQ2hhbmdlIG9mIHJldHVybiB0eXBlIGZvciBjdXJyZW50X2l0ZW0oKSBhbmQgb3BlcmF0b3JbXSBmb3IgbWVudXMuCisJICArIEVuaGFuY2VkIGRlbW8uCisJKyBGaXhlZCBhIGJ1ZyBpbiBmb3JtL2ZsZF9kZWYuYzogIHRha2UgaW50byBhY2NvdW50IHRoYXQgY29weWFyZyBhbmQKKwkgIGZyZWVhcmcgZm9yIGEgZmllbGR0eXBlIG1heSBiZSBOVUxMLCBtYWtlYXJnIG11c3Qgbm90IGJlIE5VTEwKKwkrIEZpeGVkIGEgYnVnIGluIGZvcm0vZmxkX3R5cGUuYzogIGluIHNldF9maWVsZHR5cGVfYXJnKCkgbWFrZWFyZyBtdXN0CisJICBub3QgYmUgTlVMTCwgY29weWFyZyBhbmQgZnJlZWFyZyBtYXkgYmUgTlVMTC4KKwkrIEZpeGVkIGEgYnVnIGluIGZvcm0vZnJtX2RlZi5jOiAgQWxsb3cgRGlzY29ubmVjdF9GaWVsZHMoKSBpZiBpdCBpcworCSAgYWxyZWFkeSBkaXNjb25uZWN0ZWQuCisJKyBFbmhhbmNlIGZvcm0vZnJtX2RyaXZlci5jOiAgQWxsb3cgZ3Jvd3RoIG9mIGR5bmFtaWMgZmllbGRzIGFsc28gb24KKwkgIG5hdmlnYXRpb24gcmVxdWVzdHMuCisJKyBGaXhlZCBhIGJ1ZyBpbiBmb3JtL2Z0eV9lbnVtLmM6ICB3cm9uZyBwb3NpdGlvbiBvZiBwb3N0aW5jcmVtZW50IGluCisJICBjYXNlLWluc2Vuc2l0aXZhIGNvbXBhcmlzaW9uIHJvdXRpbmUuCisJKyBFbmhhbmNlZCBmb3JtL2xpYl9hZGFiaW5kLmMgd2l0aCBmdW5jdGlvbiBfbmNfZ2V0X2ZpZWxkKCkgdG8gZ2V0IGEKKwkgIGZvcm1zIGZpZWxkIGJ5IGluZGV4LgorCSsgRW5oYW5jZWQgbWVudS9tX2FkYWJpbmQuYyB3aXRoIGZ1bmN0aW9uIF9uY19nZXRfaXRlbSgpIHRvIGdldCBhIG1lbnVzCisJICBpdGVtIGJ5IGluZGV4LgorCSsgRml4ZWQgaW4gY3Vyc2VzLmguaW46ICBtYWtlIGNodHlwZSBhcmd1bWVudCBmb3IgcGVjaG9jaGFyKCkgY29uc3RhbnQuCisJICBNYXJrIHdia2dkc2V0KCkgYXMgaW1wbGVtZW50ZWQsIHJlbW92ZSB3YmtnZHNldCBtYWNybywgYmVjYXVzZSBpdCB3YXMKKwkgIGJyb2tlbiAoZGlkbid0IGhhbmRsZSBjb2xvcnMgY29ycmVjdGx5KS4KKwkrIEVuaGFuY2VkIGxpYl9tb3VzZS5jOiBhZGRlZCBfbmNfaGFzX21vdXNlKCkgZnVuY3Rpb24KKwkrIEFkZGVkIF9uY19oYXNfbW91c2UoKSBwcm90b3R5cGUgdG8gY3Vyc2VzLnByaXYuaAorCSsgTW9kaWZpZWQgbGliX2JrZ2QuYzogIGhvcGVmdWxseSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIHdia2dkc2V0KCk7CisJICBzdHJlYW1saW5lZCBpbXBsZW1lbnRhdGlvbiBvZiB3YmtnZCgpCisJKyBNb2RpZmllZCBsaWJfbXZ3aW4uYzogIERpc2FibGUgbW92ZSBvZiBhIHBhZC4gIEltcGxlbWVudCAoY29zdGx5KQorCSAgbW92ZSBvZiBzdWJ3aW5kb3dzLiAgRml4ZWQgdXBkYXRlIGJlaGF2aW9yIG9mIG1vdmVtZW50cyBvZiByZWd1bGFyCisJICB3aW5kb3dzLgorCSsgRml4ZWQgbGliX3BhZC5jOiAgbWFrZSBjaHR5cGUgYXJndW1lbnQgb2YgcGVjaG9jaGFyKCkgY29uc3QuCisJKyBGaXhlZCBsaWJfd2luZG93LmM6ICBkdXB3aW4oKSBpcyBub3QoISkgaW4gZXZlcnkgYml0IGEgcmVhbGx5IGNsb25lCisJICBvZiB0aGUgb3JpZ2luYWwuICBTdWJ3aW5kb3dzIGJlY29tZSByZWd1bGFyIHdpbmRvd3MgYnkgZG9pbmcgYQorCSAgZHVwd2luKCkuCisJKyBJbXByb3ZlZCBtYW5wYWdlIGZvcm1fZmllbGR0eXBlLjN4CisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIHNpbXBsaWZ5IHRoZSBQdXRDaGFyKCkgaGFuZGxpbmcgb2YgZXhpdF9hbV9tb2RlLCBiZWNhdXNlIHdlIGFscmVhZHkKKwkgIGtub3cgdGhhdCBhdXRvX3JpZ2h0X21hcmdpbiBpcyB0cnVlLgorCSsgYWRkIGEgY2hlY2sgaW4gUHV0Q2hhcigpIGZvciBhYmlsaXR5IHRvIGluc2VydCB0byB0aGUgY2FzZSBvZgorCSAgc2hpZnRpbmcgY2hhcmFjdGVyIHRvIExSIGNvcm5lci4KKwkrIGluIHRlcm1pbmFsIGluaXRpYWxpemF0aW9uIGJ5IF9uY19zY3JlZW5fcmVzdW1lKCksIG1ha2Ugc3VyZSB0aGF0CisJICB0ZXJtaW5hbCByaWdodCBtYXJnaW4gbW9kZSBpcyBrbm93bi4KKwkrIG1vdmUgbG9naWMgdGhhdCBpbnZva2VzIHRvdWNobGluZSgpLCBvciBkb2VzIHRoZSBlcXVpdmFsZW50LCBpbnRvCisJICBfbmNfc2Nyb2xsX3dpbmRvdygpLgorCSsgbW9kaWZ5IHNjcm9sbGluZyBsb2dpYyB1c2Ugb2YgaW5zZXJ0L2RlbGV0ZSBsaW5lIGNhcGFiaWxpdHksIGFzc3VtaW5nCisJICB0aGF0IHRoZXkgYWZmZWN0IHRoZSBzY3JlZW4gY29udGVudHMgb25seSB3aXRoaW4gdGhlIGN1cnJlbnQKKwkgIHNjcm9sbGluZyByZWdpb24uCisJKyBtb2RpZnkgcmFpbi5jIHRvIGRlbW9uc3RyYXRlIFNJR1dJTkNIIGhhbmRsZXIuCisJKyByZW1vdmUgbG9naWMgZnJvbSBnZXRjaCgpIHRoYXQgd291bGQgcmV0dXJuIGFuIEVSUiBpZiB0aGUgYXBwbGljYXRpb24KKwkgIGNhbGxlZCBnZXRjaCgpIHdoZW4gdGhlIGN1cnNvciB3YXMgYXQgdGhlIGxvd2VyLXJpZ2h0IGNvcm5lciBvZiB0aGUKKwkgIHBoeXNpY2FsIHNjcmVlbiwgYW5kIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBoYXZlIGluc2VydC1jaGFyYWN0ZXIKKwkgIGFiaWxpdHkuCisJKyBjaGFuZ2Ugdmlldy5jIHNvIHRoYXQgaXQgYnJlYWtzIG91dCBvZiBnZXRjaCgpIGxvb3AgaWYgYSBLRVlfUkVTSVpFCisJICBpcyByZWFkLCBhbmQgbW9kaWZ5IGxvZ2ljIGluIGdldGNoKCkgc28gdGhpcyBmaXggd2lsbCB5aWVsZCB0aGUKKwkgIGRlc2lyZWQgYmVoYXZpb3IsIGkuZS4sIHRoZSBzY3JlZW4gaXMgcmVwYWludGVkIGF1dG9tYXRpY2FsbHkgd2hlbgorCSAgdGhlIHRlcm1pbmFsIHdpbmRvdyBpcyByZXNpemVkLgorCis5NzA5MDYKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXNpZ3dpbmNoCisJKyBtb2RpZnkgdmlldy5jIHRvIHRlc3QgS0VZX1JFU0laRSBsb2dpYywgd2l0aCAiLXIiIG9wdGlvbi4KKwkrIG1vZGlmeSB0ZXN0Y3Vycy5jIHRvIGVsaW1pbmF0ZSBtaXNsZWFkaW5nIGRpc3BsYXkgd3J0IGN1cnNvciB0eXBlCisJICBieSB0ZXN0aW5nIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBjbm9ybSwgY2l2aXMsIGN2dmlzLgorCSsgc2V2ZXJhbCBmaXhlcyBmb3IgbTY4ay9OZVhUIDQuMCwgdG8gYnJpbmcgY3VyX3Rlcm0sIF9uY19jdXJyX2xpbmUgYW5kCisJICBfbmNfY3Vycl9jb2wgdmFyaWFibGVzIGludG8gbGlua2VkIHByb2dyYW1zOiAgbW92ZSB0aGVzZSB2YXJpYWJsZXMsCisJICBtYWtpbmcgbmV3IG1vZHVsZXMgbGliX2N1cl90ZXJtIGFuZCB0cmFjZV9idWYgKHJlcG9ydGVkIGJ5IEZyYW5jaXNjbworCSAgQWxiZXJ0byBUb21laSBUb3JyZXMgPGZhdG9tZWlAc2FuZGJ1cmcudW5tLmVkdT4pLgorCT4gcGF0Y2hlcyBieSBBbGV4YW5kZXIgVi4gTHVreWFub3Y6CisJKyBhZGQgcHNldWRvLWZ1bmN0aW9ua2V5IEtFWV9SRVNJWkUgd2hpY2ggaXMgcmV0dXJuZWQgYnkgZ2V0Y2goKSB3aGVuCisJICB0aGUgU0lHV0lOQ0ggaGFuZGxlciBoYXMgYmVlbiBjYWxsZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bworCSAgZG91cGRhdGUoKS4KKwkrIG1vZGlmeSBsaWJfdHdhaXQuYyB0byBoaWRlIEVJTlRSIG9ubHkgaWYgSElERV9FSU5UUiBpcyBkZWZpbmVkLgorCSsgYWRkIFNJR1dJTkNIIGhhbmRsZXIgdG8gbmN1cnNlcyBsaWJyYXJ5IHdoaWNoIGlzIHVzZWQgaWYgdGhlcmUgaXMgbm8KKwkgIGFwcGxpY2F0aW9uIFNJR1dJTkNIIGhhbmRsZXIgaW4gZWZmZWN0IHdoZW4gdGhlIHNjcmVlbiBpcworCSAgaW5pdGlhbGl6ZWQuCisJKyBtYWtlIGxpbmtlZCBsaXN0IG9mIGFsbCBTQ1JFRU4gc3RydWN0dXJlcy4KKwkrIG1vdmUgY3Vyc2VzLmggaW5jbHVkZSBiZWZvcmUgZGVmaW5pdGlvbiBvZiBTQ1JFRU4gdG8gdXNlIHR5cGVzIGluCisJICB0aGF0IHN0cnVjdHVyZS4KKwkrIGNvcnJlY3Rpb24gdG8gZW5zdXJlIHRoYXQgd2dldHN0ciB1c2VzIG9ubHkgYSBuZXdsaW5lIHRvIGZvcmNlIGEKKwkgIHNjcm9sbCAoOTcwODMxKS4KKworOTcwODMxCisJKyBhZGQgZXhwZXJpbWVudGFsIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtc2FmZS1zcHJpbnRmOyB0aGUgbm9ybWFsCisJICBtb2RlIG5vdyBhbGxvY2F0ZXMgYSBidWZmZXIgYXMgbGFyZ2UgYXMgdGhlIHNjcmVlbiBmb3IgdGhlCisJICBsaWJfcHJpbnR3LmMgZnVuY3Rpb25zLgorCSsgbW9kaWZ5IHdnZXRjaCB0byByZWZyZXNoIHNjcmVlbiB3aGVuIHJlYWRpbmcgdW5nZXRjaCdkIGNoYXJhY3RlcnMsCisJICBzaW5jZSB0aGUgYXBwbGljYXRpb24gbWF5IHJlcXVpcmUgdGhpcyAtIFNWcjQgZG9lcyB0aGlzLgorCSsgcmVmaW5lIHRyZWF0bWVudCBvZiBuZXdsaW5lIGluIHdnZXRzdHIgdG8gZWNobyBvbmx5IHdoZW4gdGhpcyB3b3VsZAorCSAgZm9yY2UgdGhlIHNjcmVlbiB0byBzY3JvbGwuCisKKzk3MDgzMAorCSsgcmVtb3ZlIG92ZXJyaWRlIGluIHdnZXRzdHIoKSB0aGF0IGZvcmNlcyBrZXlwYWQoKSwgc2luY2UgU1ZyNCBkb2VzCisJICBub3QgZG8gdGhpcy4KKwkrIGNvcnJlY3QgeS1yZWZlcmVuY2UgZm9yIGVyYXN1cmUgaW4gd2dldHN0cigpIHdoZW4gYSB3cmFwIGZvcmNlcyBhCisJICBzY3JvbGwuCisJKyBjb3JyZWN0IHgtcG9zaXRpb24gaW4gd2FkZGNoKCkgYWZ0ZXIgYSB3cmFwIGZvcmNlcyBhIHNjcm9sbC4KKwkrIGVjaG8gbmV3bGluZSBpbiB3Z2V0c3RyKCksIG1ha2luZyB0ZXN0c2NhbncuYyBzY3JvbGwgcHJvcGVybHkgd2hlbgorCSAgc2NhbncgaXMgZG9uZS4KKwkrIG1vZGlmeSB2d3NjYW53KCkgdG8gYXZvaWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdy4KKwkrIHJld3JvdGUgbGliX3ByaW50dy5jIHRvIGVsaW1pbmF0ZSBmaXhlZC1idWZmZXIgbGltaXRzLgorCT4gcGF0Y2hlcyBieSBBbGV4YW5kZXIgVi4gTHVreWFub3Y6CisJKyBjb3JyZWN0IGFuIGVycm9yIGluIGhhbmRsaW5nIGNvb2tlZCBtb2RlIGluIHdnZXRjaCgpOyBwcm9jZXNzaW5nCisJICB3YXMgaW4gdGhlIHdyb25nIG9yZGVyLgorCSsgc2ltcGxpZmllZCBsb2dpYyBpbiB3Z2V0Y2goKSB0aGF0IGhhbmRsZXMgYmFja3NwYWNlLCBldGMuLCBieSB1c2luZworCSAgd2VjaG9jaGFyKCkuCisJKyBjb3JyZWN0IHdlY2hvY2hhcigpIHNvIHRoYXQgaXQgaW50ZXJwcmV0cyB0aGUgb3V0cHV0IGNoYXJhY3RlciBhcworCSAgaW4gd2FkZGNoKCkuCisJKyBtb2RpZnkgcGVjaG9jaGFyKCkgdG8gdXNlIHByZWZyZXNoKCkgcmF0aGVyIHRoYW4gZG91cGRhdGUoKSwgc2luY2UKKwkgIHRoZSBsYXR0ZXIgZG9lcyBub3QgZ3VhcmFudGVlIGltbWVkaWF0ZSByZWZyZXNoIG9mIHRoZSBwYWQuCisJKyBtb2RpZnkgcGVjaG9jaGFyKCkgc28gdGhhdCBpZiBjYWxsZWQgd2l0aCBhIG5vbi1wYWQgV0lORE9XLCB3aWxsCisJICBpbnZva2Ugd2VjaG9jaGFyKCkgaW5zdGVhZC4KKwkrIG1vZGlmeSBmaWZvIGluZGljZXMgdG8gYWxsb3cgZmlmbyB0byBiZSBsb25nZXIgdGhhbiAxMjcgYnl0ZXMuCisKKzk3MDgyMworCSsgYWRkIHh0ZXJtLThiaXQgdG8gdGVybWluZm8uc3JjCisJKyBtb3ZlZCBsb2dpYyBmb3IgU1AtPl9maWZvaG9sZCBpbnNpZGUgY2hlY2tfcGVuZGluZygpIHRvIG1ha2UgaXQKKwkgIHdvcmsgcHJvcGVybHkgd2hlbiB3ZSBhZGQgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4KKwkrIGVuc3VyZSB0aGF0IGJvb2wgZnVuY3Rpb25zIHJldHVybiBvbmx5IFRSVUUgb3IgRkFMU0UsIGFuZCBUUlVFL0ZBTFNFCisJICBhcmUgYXNzaWduZWQgdG8gYm9vbCB2YWx1ZXMgKHBhdGNoIGJ5IEguSi5MdSkuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIHNldmVyYWwgZml4ZXMgdG8gZ2V0Y2g6CisJICAxLiAgU2VwYXJhdGUgY29va2VkIGFuZCByYXcga2V5cyBpbiBmaWZvCisJICAyLiAgRml4IHRoZSBjYXNlIG9mIHVuZ2V0Y2gnZWQgS0VZX01PVVNFCisJICAzLiAgd3JhcCB0aGUgY29kZSBmb3IgaGlkaW5nIEVJTlRSIHdpdGggaWZkZWYgSElERV9FSU5UUgorCSAgNC4gIGNvcnJlY3RseSBoYW5kbGUgaW5wdXQgZXJyb3JzIChpLmUuLCBFSU5UUikgd2l0aG91dCBsb3NzIG9mIHJhdworCSAgICAgIGtleXMKKwkgIDUuICByZWNvZ25pemUgRVNDIEtFWV9MRUZUIGFuZCBzaW1pbGFyCisJICA2LiAgY29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSBvZiByZWNlaXB0aW9uIG9mIEtFWV9NT1VTRSBmcm9tIGdwbQorCSsgY29ycmVjdCBvZmYtYnktb25lIGluZGV4aW5nIGVycm9yIGluIF9uY19tb3VzZV9wYXJzZSgpLCB0aGF0IGNhdXNlZAorCSAgc2luZ2xlIG1vdXNlIGV2ZW50cyAocHJlc3MvcmVsZWFzZSkgdG8gYmUgaWdub3JlZCBpbiBmYXZvciBvZgorCSAgY29tcG9zZWQgZXZlbnRzIChjbGljaykuICBJbXByb3ZlcyBvbiBhIGZpeCBmcm9tIGludGVncmF0aW5nIGdwbQorCSAgc3VwcG9ydCBpbiA5NjEyMjkuCisJKyBhZGQgYW5vdGhlciBjYWxsIHRvIGNoZWNrX3BlbmRpbmcsIGJlZm9yZSBzY3JvbGxpbmcsIGZvcgorCSAgbGluZS1icmVha291dCBvcHRpbWl6YXRpb24KKwkrIGltcHJvdmUgaGFzaG1hcC5jIGJ5CisJICAxLiAgZml4ZWQgbG9vcCBjb25kaXRpb24gaW4gZ3Jvd19odW5rcygpCisJICAyLiAgbm90IG1hcmtpbmcgbGluZXMgd2l0aCBvZmZzZXQgMAorCSAgMy4gIGZpeGVkIGNvbmRpdGlvbiBvZiAndG9vIGZhcicgY3JpdGVyaWEsIHRodXMgb25lLWxpbmUgaHVua3MgYXJlCisJICBpZ25vcmVkIGFuZCB0d28gbGluZXMgaW50ZXJjaGFuZ2VkIHdvbid0IHBhc3MuCisJKyByZXdyb3RlL3NpbXBsaWZpZWQgX25jX3Njcm9sbF9vcHRpbWl6ZSgpIGJ5IHNlcGFyYXRpbmcgaW50byB0d28KKwkgIHBhc3NlcywgZm9yd2FyZC9iYWNrd2FyZCwgbG9va2luZyBmb3IgY2h1bmtzIG1vdmluZyBvbmx5IGluIHRoZSBnaXZlbgorCSAgZGlyZWN0aW9uLgorCSsgbW92ZSBsb2dpYyB0aGF0IGVtaXRzIHNncjAgd2hlbiBpbml0aWFsaXppbmcgdGhlIHNjcmVlbiB0bworCSAgX25jX3NjcmVlbl9pbml0KCksIG5vdyBpbnZva2VkIGZyb20gbmV3dGVybS4KKwkrIG1vdmUgY3Vyc29yLW1vdmVtZW50IGNsZWFudXAgZnJvbSBlbmR3aW4oKSBpbnRvIF9uY19tdmN1cl93cmFwKCkKKwkgIGZ1bmN0aW9uIGFuZCBzY3JlZW4gY2xlYW51cCAoaS5lLiwgY29sb3IpIGludG8gX25jX3NjcmVlbl93cmFwKCkKKwkgIGZ1bmN0aW9uLgorCSsgYWRkIG5ldyBmdW5jdGlvbnMgX25jX3NjcmVlbl9pbml0KCksIF9uY19zY3JlZW5fcmVzdW1lKCkgYW5kCisJICBfbmNfc2NyZWVuX3dyYXAoKS4KKwkrIHJlbmFtZSBfbmNfbXZjdXJfc2Nyb2xsbigpIHRvIF9uY19zY3JvbGxuKCkuCisJKyBhZGQgYSBjb3B5IG9mIGFjc19tYXBbXSB0byB0aGUgU0NSRUVOIHN0cnVjdHVyZSwgd2hlcmUgaXQgY2FuIGJlCisJICBzdG9yZWQvcmV0cmlldmVkIHZpYSBzZXRfdGVybSgpLgorCSsgbW92ZSB2YXJpYWJsZXMgX25jX2lkY29rLCBfbmNfaWRsb2ssIF9uY193aW5kb3dzIGludG8gdGhlIFNDUkVFTgorCSAgc3RydWN0dXJlLgorCis5NzA4MTYKKwkrIGltcGxlbWVudCBleHBlcmltZW50YWwgX25jX3BlcmZvcm1fc2Nyb2xsKCkuCisJKyBtb2RpZnkgbmV3dGVybSAoYWN0dWFsbHkgX25jX3NldHVwc2NyZWVuKCkpIHRvIGVtaXQgYW4gc2dyMCB3aGVuCisJICBpbml0aWFsaXppbmcgdGhlIHNjcmVlbiwgYXMgZG9lcyBTVnI0IChyZXBvcnRlZCBieSBBbGV4YW5kZXIgVi4KKwkgIEx1a3lhbm92KS4KKwkrIGFkZGVkIHRlc3RfcHJvZ3MgcnVsZSB0byBuY3Vyc2VzL01ha2VmaWxlLgorCSsgbW9kaWZ5IHRlc3QvY29uZmlndXJlLmluIHRvIGNoZWNrIGlmIGluaXRzY3IgaXMgYWxyZWFkeSBpbiAkTElCUworCSAgYmVmb3JlIGxvb2tpbmcgZm9yIChuKWN1cnNlcyBsaWJyYXJ5LgorCSsgY29ycmVjdCB2ZXJzaW9uLW51bWJlciBpbiBjb25maWd1cmUgc2NyaXB0IGZvciBPU0YxIHNoYXJlZC1saWJyYXJ5CisJICBvcHRpb25zIChwYXRjaCBieSBUaW0gTW9vbmV5KS4KKwkrIGFkZCAtRE5ERUJVRyB0byBDUFBGTEFHUyBmb3IgLS1lbmFibGUtYXNzZXJ0aW9ucyAoYXMgSnVlcmdlbgorCSAgb3JpZ2luYWxseSBwYXRjaGVkKSBzaW5jZSB0aGUgYysrIGRlbW8gZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5CisJICBpbmNsdWRlIG5jdXJzZXNfY2ZnLmgKKwkrIHN1cHBseSBkZWZhdWx0IHZhbHVlIGZvciAtLWVuYWJsZS1hc3NlcnRpb25zIG9wdGlvbiBpbiBjb25maWd1cmUKKwkgIHNjcmlwdCAocmVwb3J0ZWQgYnkgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PikuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIGNvcnJlY3Qvc2ltcGxpZnkgbG9naWMgb2Ygd2VyYXNlKCksIHdjbHJ0b2VvbCgpIGFuZCB3Y2xyYm90KCkuICBTZWUKKwkgIGV4YW1wbGUgZmlyc3RsYXN0LmMKKwkrIG9wdGltaXplIHdhZGRjaF9saXRlcmFsKCkgYW5kIHdhZGRjaF9ub3N5bmMoKSBieSBmYWN0b3Jpbmcgb3V0CisJICBjb21tb24gc3ViZXhwcmVzc2lvbnMuCisJKyBjb3JyZWN0IHNlbnNlIG9mIE5ERUJVRyBpZmRlZiBmb3IgQ0hFQ0tfUE9TSVRJT04gbWFjcm8uCisJKyBjb3JyZWN0aW9ucyB0byByZW5kZXJfY2hhcigpLCB0byBtYWtlIGhhbmRsaW5nIG9mIGNvbG9yZWQgYmxhbmtzCisJICBtYXRjaCBTVnI0IGN1cnNlcywgYXMgd2VsbCBhcyB0byBjb3JyZWN0IGEgYnVnIHRoYXQgeG9yJ2Qgc3BhY2UKKwkgIGFnYWluc3QgdGhlIGJhY2tncm91bmQgY2hhcmFjdGVyLgorCSsgcmVwbGFjZWQgaGFzaCBmdW5jdGlvbiB3aXRoIGEgZmFzdGVyIG9uZSAodGltZWQgaXQpCisJKyByZXdyb3RlIHRoZSBoYXNobWFwIGFsZ29yaXRobSB0byBiZSBvbmUtcGFzcywgdGhpcyBhdm9pZHMgbXVsdGlwbGUKKwkgIGNvc3RfZWZmZWN0aXZlKCkgY2FsbHMgb24gdGhlIHNhbWUgbGluZXMuCisJKyBtb2RpZmllZCBjb3N0X2VmZmVjdGl2ZSgpIHNvIGl0IGlzIG5vdyBzbGlnaHRseSBtb3JlIHByZWNpc2UuCisJPiBwYXRjaGVzIGZvciBnbGliYyBpbnRlZ3JhdGlvbiAoSC5KLkx1KToKKwkrIGFkZCBtb2R1bGVzIGRlZmluZV9rZXksIGtleW9rLCBuYW1lX21hdGNoLCB0cmllcworCSsgYWRkIG1ha2VmaWxlIHJ1bGVzIGZvciBzb21lIG9mIHRoZSB1bml0IHRlc3RzIGluIG5jdXJzZXMgKG12Y3VyLAorCSAgY2FwdG9pbmZvLCBoYXJkc2Nyb2xsLCBoYXNobWFwKS4KKwkrIHVwZGF0ZSBMaW51eCBjb25maWd1cmUtc2NyaXB0IGZvciB3aWRlLWNoYXJhY3RlciBkZWZpbml0aW9ucy4KKworOTcwODA5CisJKyBtb2RpZnkgX3RyYWNlYml0cygpIHRvIHNob3cgdGhlIGNoYXJhY3RlciBzaXplIChlLmcuLCBDUzgpLgorCSsgbW9kaWZ5IHRwYXJtKCkgdG8gZW1pdCAnXDIwMCcgd2hlcmUgdGhlIGdlbmVyYXRlZCBzdHJpbmcgd291bGQgaGF2ZSBhCisJICBudWxsIChyZXBvcnRlZCBieSBGcm9tOiAgSWFuIERhbGwgPElhbi5EYWxsQGRzdG8uZGVmZW5jZS5nb3YuYXU+IGZvcgorCSAgdGVybWluYWwgdHlwZSBuY3I3OTAwKS4KKwkrIG1vZGlmeSBpbnN0YWxsIHByb2Nlc3Mgc28gdGhhdCBsZGNvbmZpZyBpcyBub3QgaW52b2tlZCBpZiB0aGUKKwkgIHBhY2thZ2UgaXMgYnVpbHQgd2l0aCBhbiBpbnN0YWxsLXByZWZpeC4KKwkrIGNvcnJlY3QgdGVzdCBwcm9ncmFtIGZvciBjaHR5cGUgc2l6ZSAocmVwb3J0ZWQgYnkgVGltIE1vb25leSkuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtc2Nyb2xsLWhpbnRzLCB1c2luZyB0aGlzIHRvIGlmZGVmIHRoZQorCSAgbG9naWMgdGhhdCBjb21wdXRlcyBpbmRpY2VzIGZvciBfbmNfc2Nyb2xsX29wdGltaXplKCkuCisJKyBhZGQgbW9kdWxlIG5jdXJzZXMvc29mdHNjcm9sbC5jLCB0byBwZXJmb3JtIHNpbmdsZS1zdGFnZSBjb21wdXRhdGlvbgorCSAgb2Ygc2Nyb2xsIGluZGljZXMgdXNlZCBpbiBfbmNfc2Nyb2xsX29wdGltaXplKCkuICBUaGlzIGlzIGZhc3RlciB0aGFuCisJICB0aGUgZXhpc3Rpbmcgc2Nyb2xsaW5nIGFsZ29yaXRobSwgYnV0IHRlbmRzIHRvIG1ha2UgdG9vLXNtYWxsIGh1bmtzLgorCSsgZWxpbWluYXRlIGZpeGVkIGJ1ZmZlciBzaXplIGluIF9uY19saW5lZHVtcCgpLgorCSsgbWlub3IgZml4ZXMgdG8gbGliX2RvdXBkYXRlLmMgdG8gYWRkIHRyYWRlb2ZmIGJldHdlZW4gY2xyX2VvbCAoZWwpCisJICBhbmQgY2xyX2JvbCAoZWwxKSwgcmVmaW5lIGxvZ2ljIGluIENsclVwZGF0ZSgpIGFuZCBDbHJCb3R0b20oKSAocGF0Y2gKKwkgIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBhZGQgdGVzdC90ZXN0YWRkY2guYywgZnJvbSBhIHBlbmRpbmcgcGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92LgorCSsgY29ycmVjdCBwcm9jZXNzaW5nIG9mICJjb25maWd1cmUgLS1lbmFibGUtYXNzZXJ0aW9ucyIgb3B0aW9uIChwYXRjaAorCSAgYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTcwODAyCisJKyBhZGQgJy1zJyAoc2luZ2xlLXN0ZXApIG9wdGlvbiB0b28gdGVzdC9oYXNodGVzdC5jLCBjb3JyZWN0IGFuIGVycm9yCisJICBpbiBsb29wIGxpbWl0IGZvciAnLWYnIChmb290ZXIgb3B0aW9uKSwgdG9nZ2xlIHNjcm9sbG9rKCkgd2hlbgorCSAgd3JpdGluZyBmb290ZXIgdG8gYXZvaWQgd3JhcCBhdCBsb3dlci1yaWdodCBjb3JuZXIuCisJKyBjb3JyZWN0IGJlaGF2aW9yIG9mIGNscnRvZW9sKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgd3JhcHBpbmcgY3Vyc29yLAorCSAgd2hpY2ggd2FzIG5vdCBjbGVhcmluZyB0aGUgbGluZSBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uIChyZXBvcnRlZCBieQorCSAgTGl2aXUgRGFpYSA8ZGFpYUBzdG9pbG93LmltYXIucm8+KS4KKwkrIGNvcnJlY3RlZCBtYXBwaW5nIGZvciBBQ1NfTEFOVEVSTiwgd2hpY2ggd2FzICdJJyByYXRoZXIgdGhhbiAnaScKKwkgIChyZXBvcnRlZCBieSBLbGF1cyBXZWlkZSA8a3dlaWRlQHRlemNhdC5jb20+KS4KKwkrIG1hbnkgY29ycmVjdGlvbnMgdG8gbWFrZSBwcm9ncy9jYXBjb252ZXJ0IHdvcmssIGFzIHdlbGwgYXMgbWFrZSBpdAorCSAgcmVhc29uYWJseSBwb3J0YWJsZSBhbmQgaW50ZWdyYXRlZCB3aXRoIG5jdXJzZXMgNC4xIChyZXBvcnRlZCBieSBEYXZlCisJICBGdXJzdGVuYXUgPGRmQHJhdmluZS5iaW5hcnkubmV0PikuCisKKzk3MDcyNgorCSsgYWRkIGZsYWcgU1AtPl9maWZvaG9sZCwgY29ycmVzcG9uZGluZyBsb2dpYyB0byBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mCisJICB0aGUgbGluZSBicmVha291dCBsb2dpYyBzbyB0aGF0IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCByZWFkCisJICBpbnB1dCwgcmVmcmVzaGVzIHdpbGwgbm90IGJlIHN0b3BwZWQsIGJ1dCBvbmx5IHNsb3dlZC4KKwkrIGdlbmVyYXRlIHNsa19hdHRyX29mZigpLCBzbGtfYXR0cl9vbigpLCBzbGtfYXR0cl9zZXQoKSwgdmlkX2F0dHIoKSwKKwkgIGlmZGVmJ2QgZm9yIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQsIHNpbmNlIG5jdXJzZXMnIFdBX3h4eCBhdHRyaWJ1dGUKKwkgIG1hc2tzIGFyZSBpZGVudGljYWwgd2l0aCB0aGUgQV94eHggbWFza3MuCisJKyBtb2RpZnkgTUtsaWJfZ2VuLnNoIHRvIGdlbmVyYXRlIGlmZGVmJ2QgZnVuY3Rpb25zIHRvIHN1cHBvcnQgb3B0aW9uYWwKKwkgIGNvbmZpZ3VyYXRpb24gb2Ygd2lkZS1jaGFyYWN0ZXJzLgorCSsgbW9kaWZ5IHRzZXQgdG8gYmVoYXZlIG1vcmUgbGlrZSBTVnI0J3MgdHNldCwgd2hpY2ggZG9lcyBub3QgbW9kaWZ5CisJICB0aGUgc2V0dGluZ3Mgb2YgaW50ciwgcXVpdCBvciBlcmFzZSB1bmxlc3MgdGhleSBhcmUgZ2l2ZW4gYXMgY29tbWFuZAorCSAgb3B0aW9ucyAocmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlIDxiZWViZUBtYXRoLnV0YWguZWR1PikuCisJKyBtb2RpZnkgdHNldCB0byBsb29rIGluIC9ldGMvdHR5cyBvciAvZXRjL3R0eXR5cGUgaWYgdGhlIGNvbmZpZ3VyYXRpb24KKwkgIGRvZXMgbm90IGhhdmUgZ2V0dHR5bmFtKCkuCisJKyBleHRlbmQgYmF1ZHJhdGUgdGFibGUgaW4gdHNldC5jIHRvIG1hdGNoIGJhdWRyYXRlKCkgZnVuY3Rpb24uCisJKyBhZGQgdGFibGUgZW50cmllcyBmb3IgMjMwNDAwIGFuZCA0NjA4MDAgYmQgdG8gYmF1ZHJhdGUoKSBmdW5jdGlvbi4KKwkrIGltcHJvdmUgYnJlYWtvdXQgbG9naWMgYnkgYWxsb3dpbmcgaXQgYmVmb3JlIHRoZSBmaXJzdCBsaW5lIHVwZGF0ZWQsCisJICB3aGljaCBpcyB3aGF0IFNWcjQgY3Vyc2VzIGRvZXMgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBjb3JyZWN0IGluaXRpYWxpemF0aW9uIG9mIHZjb3N0IGluIHJlbGF0aXZlX21vdmUoKSwgZm9yIGN1cnNvci1kb3duCisJICBjYXNlIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCT4gbml0cyBnbGVhbmVkIGZyb20gRGViaWFuIGRpc3RyaWJ1dGlvbiBvZiAxLjkuOWctMzoKKwkrIGluc3RhbGwgc3ltYm9saWMgbGluayBmb3IgaW50b3RvY2FwLgorCSsgcmVmZXJlbmNlIGxpYmMgZGlyZWN0bHkgd2hlbiBtYWtpbmcgc2hhcmVkIGxpYnJhcmllcy4KKwkrIGNvcnJlY3QgcmVuYW1pbmcgb2YgY3Vyc19zY3JfZG1wLjN4IGluIG1hbl9kYi5yZW5hbWVzLgorCSsgZ3VhcmQgdGdldGZsYWcoKSBhbmQgb3RoZXIgdGVybWNhcCBmdW5jdGlvbnMgYWdhaW5zdCBudWxsIGN1cl90ZXJtCisJICBwb2ludGVyLgorCis5NzA3MTkKKwkrIGNvcnJlY3RlZCBpbml0aWFsIHN0YXRlIG9mIHNvZnR3YXJlIGVjaG8gKGVycm9yIGluIDk3MDQwNSwgcmVwb3J0ZWQKKwkgIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyByZXZpZXdlZC9hZGRlZCBtZXNzYWdlcyB0byBjb25maWd1cmUgc2NyaXB0LCBzbyB0aGF0IGFsbCBub24tdGVzdAorCSAgb3B0aW9ucyBzaG91bGQgYmUgYWNjb21wYW5pZWQgYnkgYSBtZXNzYWdlLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgbG9uZyBmaWxlbmFtZXMsIHVzaW5nIHRoaXMgdG8gZGV0ZXJtaW5lIGlmCisJICBpdCBpcyBzYWZlIHRvIGFsbG93IGxvbmcgYWxpYXNlcyBmb3IgdGVybWluYWwgZGVzY3JpcHRpb25zIGFzIGRvZXMKKwkgIFNWcjQuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbnMgZm9yIHdpZGVjICh3aWRlIGNoYXJhY3RlciksIGhhc2htYXAgKGJvdGgKKwkgIGV4cGVyaW1lbnRhbCkuCisJPiBwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3Y6CisJKyBoYXNobWFwLmMgLSBpbXByb3ZlZCBieSBoZXVyaXN0aWMsIHNvIHRoYXQgc2Nyb2xsIHRlc3Qgd29ya3MgbXVjaAorCSAgYmV0dGVyIHdoZW4gY3NyIGlzIG5vdCBhdmFpbGFibGUuCisJKyBoYXJkc2Nyb2xsLmMgLSBwYXRjaGVkIHNvIHRoYXQgaXQgY29udGludWVzIHRvIHNjcm9sbCBvdGhlciBjaHVua3MKKwkgIGFmdGVyIGZhaWx1cmUgdG8gc2Nyb2xsIG9uZS4KKwkrIGxpYl9kb3VwZGF0ZS5jIC0gX25jX212Y3VyX3Njcm9sbG4gZXh0ZW5kZWQgdG8gaGFuZGxlIG1vcmUgY2FzZXM7IGNzcgorCSAgaXMgYXZvaWRlZCBhcyBpdCBpcyByZWxhdGl2ZSBjb3N0bHkuICBGaXhlZCB3cm9uZyBjb29yZGluYXRlcyBpbiBvbmUKKwkgIGNhc2UgYW5kIHdyb25nIHN0cmluZyBpbiBUUkFDRS4KKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIG1vZGlmeSBDKysgYmluZGluZyB0byBjb21waWxlIG9uIEFJWCA0Lnggd2l0aCB0aGUgSUJNIEMtU0VUKysKKwkgIGNvbXBpbGVyLgorCis5NzA3MTIKKwkrIHJlbW92ZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBmcm9tIGt0ZXJtIHRlcm1pbmZvIGVudHJ5OyBpdCB1c2VzIHRoZQorCSAgc2hpZnQtb3V0IGNvbnRyb2wgZm9yIGEgcHVycG9zZSBpbmNvbXBhdGlibGUgd2l0aCBjdXJzZXMsIGkuZS4sIGZvbnQKKwkgIHN3aXRjaGluZy4KKwkrIGRpc2VudGFuZ2xlICd4dGVybScgdGVybWluZm8gZW50cnkgZnJvbSBzb21lIGRlcml2ZWQgZW50cmllcyB0aGF0CisJICBzaG91bGQgYmUgYmFzZWQgb24geHRlcm0tcjYgaW5zdGVhZC4KKwkrIGFkZCBjYnQgdG8geHRlcm0teGY4Ni14djMyIHRlcm1pbmZvIGVudHJ5OyBJIGFkZGVkIHRoZSBlbXVsYXRpb24gZm9yCisJICBYRnJlZTg2IDMuMS4yRiwgYnV0IG92ZXJsb29rZWQgaXRzIHVzZSBpbiB0ZXJtaW5mbyB0aGVuIC0gVC5EaWNrZXkuCisJKyBjb3JyZWN0IGxvZ2ljIGluIGxpYl9tdmN1ci5jIHRoYXQgdXNlcyBiYWNrX3RhYi4KKworOTcwNzA2CisJKyBjb3JyZWN0IGNoYW5nZSBmcm9tIDk3MDYyOCB0byBDbHJVcGRhdGUoKSBpbiBsaWJfZG91cGRhdGUuYyBzbyB0aGF0CisJICBjb250ZW50cyBvZiBjdXJzY3IgYXJlIHNhdmVkIGluIG5ld3NjciBiZWZvcmUgY2xlYXJpbmcgdGhlIHNjcmVlbi4KKwkgIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgcmVwYWludGluZyB3b3JrIHdpdGggdGhlIHByZXNlbnQgbG9naWMgb2YKKwkgIFRyYW5zZm9ybUxpbmUoKS4KKwkrIHVzZSBuYXBtcygpIHJhdGhlciB0aGFuIHNsZWVwKCkgaW4gdHNldC5jIHRvIGF2b2lkIGludGVycnVwdGluZyBJL08uCisKKzk3MDcwNQorCSsgYWRkIGxpbWl0IGNoZWNrcyB0byBfbmNfcmVhZF9maWxlX2VudHJ5KCkgdG8gZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdworCSAgb2YgYnVmZmVyIHdoZW4gcmVhZGluZyBpbmNvbXBhdGlibGUgdGVybWluZm8gZm9ybWF0LCBlLmcsIGZyb20gT1NGLzEuCisJKyBjb3JyZWN0IHNvbWUgbG9vcC12YXJpYWJsZSBlcnJvcnMgaW4geG1jIHN1cHBvcnQgaW4gbGliX2RvdXBkYXRlLmMKKwkrIG1vZGlmeSBuY3Vyc2VzICdiJyB0ZXN0IHRvIGFkZCBnYXBzLCBzcGVjaWZpZWQgYnkgdXNlciwgdG8gYWxsb3cKKwkgIGludmVzdGlnYXRpb24gb2YgaW50ZXJhY3Rpb24gd2l0aCB4bWMgKG1hZ2ljIGNvb2tpZSkgY29kZS4KKwkrIGNvcnJlY3QgdHlwbyBpbiA5NzA1MjQgbW9kcyB0byB4bWFzLmMsIGhhZCBvbWl0dGVkIGVtcHR5IHBhcmFtZXRlcgorCSAgbGlzdCBmcm9tIGhhc19jb2xvcnMoKSwgd2hpY2ggZ2NjIGlnbm9yZXMsIGJ1dCBTVnI0IGRvZXMgbm90CisJICAocmVwb3J0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKwkrIGNvcnJlY3Qgcm1zbyBjYXBhYmlsaXR5IGluIHd5NTAtbWMgZGVzY3JpcHRpb24uCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAiLS1lbmFibGUtaGFyZC10YWJzIiwgcmVuYW1lZCBUQUJTX09LIGlmZGVmIHRvCisJICBVU0VfSEFSRF9UQUJTLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgQWRkIGJpbmRpbmdzIGZvciBrZXlvaygpIGFuZCBkZWZpbmVfa2V5KCkgdG8gdGhlIEFkYTk1IHBhY2thZ2VzLgorCSsgSW1wcm92ZSBtYW4gcGFnZXMgbWVudV9wb3N0LjN4IGFuZCBtZW51X2Zvcm1hdC4zeAorCSsgRml4IHRoZSBIVE1MIHBhZ2VzIGluIHRoZSBBZGE5NS9odG1sIGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBhYm92ZQorCSAgY2hhbmdlcy4KKworOTcwNjI4CisJKyBtb2RpZnkgY2hhbmdlIGZyb20gOTcwMTAxIHRvIENsclVwZGF0ZSgpIGluIGxpYl9kb3VwZGF0ZS5jIHNvIHRoYXQKKwkgIHBlbmRpbmcgY2hhbmdlcyB0byBib3RoIGN1cnNjciBhbmQgbmV3c2NyIGFyZSBmbHVzaGVkIHByb3Blcmx5LgorCSAgVGhpcyBmaXhlcyBhIGNhc2Ugd2hlcmUgdGhlIGZpcnN0IHNjcm9sbGluZyBvcGVyYXRpb24gaW4gbnZpIHdvdWxkCisJICBjYXVzZSB0aGUgc2NyZWVuIHRvIGJlIGNsZWFyZWQgdW5uZWNlc3NhcmlseSBhbmQgcmVwYWludGVkIGJlZm9yZQorCSAgZG9pbmcgdGhlIGluZGV4aW5nLCBpLmUuLCBieSByZXBlYXRlZGx5IHByZXNzaW5nICdqJyAocmVwb3J0ZWQgYnkKKwkgIEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0IGVycm9yIGluIHRyYW5zX3N0cmluZygpIHdoaWNoIGFkZGVkIGVtYmVkZGVkIG5ld2xpbmVzIGluIGEKKwkgIHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIHRoZSBzdG9yZWQgc3RyaW5ncy4KKwkrIHJlbW92ZSBzcHVyaW91cyBuZXdsaW5lcyBmcm9tIHNnciBpbiB3eXNlNTAgKGFuZCBzZXZlcmFsIG90aGVyKQorCSAgdGVybWluZm8gZGVzY3JpcHRpb25zLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gZm9yIGV4cGVyaW1lbnRhbCB4bWMgKG1hZ2ljIGNvb2tpZSkgY29kZSwKKwkgICItLWVuYWJsZS14bWMtZ2xpdGNoIi4gIFdoZW4gZGlzYWJsZWQgKHRoZSBkZWZhdWx0KSwgYXR0cmlidXRlcyB0aGF0CisJICB3b3VsZCBzdG9yZSBhIG1hZ2ljIGNvb2tpZSBhcmUgc3VwcHJlc3NlZCBpbiB2aWRwdXRzKCkuICBUaGUgbWFnaWMKKwkgIGNvb2tpZSBjb2RlIGlzIGZhciBmcm9tIHdvcmthYmxlIGF0IHRoaXMgc3RhZ2U7IHRoZSBjb25maWd1cmF0aW9uCisJICBvcHRpb24gaXMgYSBzdG9wZ2FwLgorCSsgbW92ZSBfbmNfaW5pdHNjcigpIGZyb20gbGliX2luaXRzY3IuYyB0byBsaWJfbmV3dGVybS5jCisJKyBjb3JyZWN0IHBhdGggZm9yIGludm9raW5nIG1ha2Vfa2V5cyAoYSBtaXNzaW5nICIuLyIpLgorCis5NzA2MjEKKwkrIGNvcnJlY3Qgc2lnbi1leHRlbnNpb24gcHJvYmxlbSB3aXRoICJpbmZvY21wIC1lIiwgd2hpY2ggY29ycnVwdGVkCisJICBhY3NjIHZhbHVlcyBjb21wdXRlZCBmb3IgbGludXggZmFsbGJhY2sgZGF0YS4KKwkrIGNvcnJlY3QgZGVwZW5kZW5jeSBvbiBuY3Vyc2VzL25hbWVzLmMgKGEgbWlzc2luZyAiLi8iKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSAnJiYnIGV2ZW4gZm9yIGNkJ2luZyB0byBleGlzdGluZworCSAgZGlyZWN0b3JpZXMgdG8gd29yayBhcm91bmQgYnJva2VuIHNoZWxsIGludGVycHJldGVycy4KKwkrIGNvcnJlY3QgYSBsb29wLWxpbWl0IGluIF9uY19oYXNoX21hcCgpIChwYXRjaCBieSBBbGV4YW5kZXIgVi4KKwkgIEx1a3lhbm92KS4KKworOTcwNjE1CisJKyByZXN0b3JlIGxvZ2ljIGluIF9uY19zY3JvbGxfb3B0aW1pemUoKSB3aGljaCBtYXJrcyBhcyB0b3VjaGVkIHRoZQorCSAgbGluZXMgaW4gY3Vyc2NyIHRoYXQgYXJlIHNoaWZ0ZWQuCisJKyBhZGQgbmV3IHV0aWxpdHkgJ21ha2Vfa2V5cycgdG8gY29tcHV0ZSBrZXlzLnRyaWVzIGFzIGEgdGFibGUgcmF0aGVyCisJICB0aGFuIGEgc2VyaWVzIG9mIGZ1bmN0aW9uIGNhbGxzLgorCSsgY29ycmVjdCBpbmNsdWRlLWRlcGVuZGVuY3kgZm9yIHRpYy5oIHVzZWQgYnkgbmFtZV9tYXRjaAorCSsgcmVtb3ZlZCBidWZmZXItYWxsb2NhdGlvbiBmb3IgbmFtZSBhbmQgZGVzY3JpcHRpb24gZnJvbSBtX2l0ZW1fbmV3LmMsCisJICBzaW5jZSB0aGlzIG1pZ2h0IHJlc3VsdCBpbiBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFNWcjQuICBBbHNvIGZpeGVkCisJICB0aGUgY29ycmVzcG9uZGluZyBBZGE5NSBiaW5kaW5nIG1vZHVsZSAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyLAorCSAgcmVwb3J0IGJ5IEF2ZXJ5IFBlbm5hcnVuIDxhcGVud2FyckBmb3huZXQubmV0PikKKwkrIHJlbW92ZWQgdGhlIG1lY2hhbmlzbSB0byB0aW1lc3RhbXAgdGhlIGdlbmVyYXRlZCBBZGE5NSBzb3VyY2VzLiAgVGhpcworCSAgcmVzdWx0ZWQgYWx3YXlzIGluIGdlbmVyYXRpbmcgcGF0Y2hlcyBmb3IgdGhlIEhUTUwgZG9jLCBldmVuIHdoZW4KKwkgIG5vdGhpbmcgcmVhbGx5IGNoYW5nZWQgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBpbXByb3ZlIG1hbiBwYWdlIG1pdGVtX25ldy4zeCAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTcwNjE0CisJKyByZW1vdmUgZWNoIGNhcGFiaWxpdHkgZnJvbSByeHZ0IGRlc2NyaXB0aW9uIGJlY2F1c2UgaXQgZG9lcyBub3Qgd29yay4KKwkrIGFkZCBtaXNzaW5nIGNhc2UgbG9naWMgZm9yIGluZm9jbXAgLUkgb3B0aW9uIChyZXBvcnRlZCBieSBMb3JlbnpvIE0uCisJICBDYXR1Y2NpIDxsb3JlbnpvQGFyZ29uLnJvbWEyLmluZm4uaXQ+KQorCSsgY29ycmVjdCBvbGQgYnVnIGluIHBub3V0cmVmcmVzaCgpIHVubWFza2VkIGJ5IGZpeCBpbiA5NzA1MzE7IHRoaXMKKwkgIGNhdXNlZCBnbGl0Y2hlcyBpbiB0aGUgbmN1cnNlcyAncCcgdGVzdCBzaW5jZSB0aGUgYXJlYSBvdXRzaWRlIHRoZQorCSAgcGFkIHdhcyBub3QgY29tcGFyZWQgd2hlbiBzZXR0aW5nIHVwIGluZGljZXMgZm9yIF9uY19zY3JvbGxfb3B0aW1pemUuCisJKyByZXdyb3RlIHRyYWNlYml0cygpIHRvIHdvcmthcm91bmQgbWlzZGVmaW5pdGlvbiBvZiBUT1NUT1Agb24gVWx0cml4CisJICA0LjQsIGFzIHdlbGwgYXMgdG8gZWxpbWluYXRlIGZpeGVkLXNpemUgYnVmZmVyIChyZXBvcnRlZCBieSBDaHJpcworCSAgVGFubmVyIDx0YW5uZXJjQGFlY2wuY2E+KQorCSsgY29ycmVjdCBwcm90b3R5cGUgZm9yIHRlcm1hdHRycygpIGFzIHBlciBYUEc0IHZlcnNpb24gMi4KKwkrIGFkZCBwbGFjZWhvbGRlciBwcm90b3R5cGVzIGZvciBjb2xvcl9zZXQoKSwgZXJhc2V3Y2hhcigpLAorCSAgdGVybV9hdHRycygpLCB3Y29sb3Jfc2V0KCkgYXMgcGVyIFhQRzQgdmVyc2lvbiAyLgorCSsgY29ycmVjdCBhdHRyaWJ1dGlvbiBmb3IgcHJvZ3MvcHJvZ3MucHJpdi5oIGFuZCBsaWJfdHdhaXQuYworCSsgaW1wcm92ZSBsaW5lLWJyZWFrb3V0IGxvZ2ljIGJ5IGNoZWNraW5nIGJhc2VkIG9uIGNoYW5nZWQgbGluZXMgcmF0aGVyCisJICB0aGFuIHRvdGFsIGxpbmVzIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgY29ycmVjdCBsb29wIGxpbWl0cyBmb3IgdGFibGUtbG9va3VwIG9mIGVudW1lcmF0ZWQgdmFsdWUgaW4gZm9ybQorCSAgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBpbXByb3ZlIHRocmVzaGhvbGQgY29tcHV0YXRpb24gZm9yIGRldGVybWluaW5nIHdoZW4gdG8gY2FsbCBDbHJUb0VPTAorCSAgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisKKzk3MDUzMQorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1kaXNhYmxlLWRhdGFiYXNlIHRvIGZvcmNlIHRoZSBsaWJyYXJ5IHRvCisJICB1c2Ugb25seSB0aGUgZmFsbGJhY2sgZGF0YS4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1mYWxsYmFja3MsIHRvIHNwZWNpZnkgbGlzdCBvZiBmYWxsYmFjaworCSAgdGVybWluYWwgZGVzY3JpcHRpb25zLgorCSsgYWRkIGEgc3ltYm9saWMgbGluayBmb3IgbmN1cnNlcy5oIGR1cmluZyBpbnN0YWxsOyB0b28gbWFueSBwcm9ncmFtcworCSAgc3RpbGwgYXNzdW1lIHRoZXJlJ3MgYW4gbmN1cnNlcy5oCisJKyBhZGQgbmV3IHRlcm1pbmZvLnNyYyBlbnRyeSBmb3IgeHRlcm0teGY4Ni12MzMuCisJKyByZXN0b3JlIHRlcm1pbmZvLnNyYyBlbnRyeSBmb3IgZW11IHRvIHVzaW5nIHNldGYvc2V0Yiwgc2luY2UgaXQgaXMKKwkgIG5vdCwgYWZ0ZXIgYWxsLCBnZW5lcmF0aW5nIEFOU0kgc2VxdWVuY2VzLiAgQ29ycmVjdGVkIG1pc3NpbmcgY29tbWEKKwkgIHRoYXQgY2F1c2VkIHNldGYvc2V0YiBlbnRyaWVzIHRvIG1lcmdlLgorCSsgbW9kaWZ5IG1vdXNlbWFzaygpIHRvIHVzZSBrZXlvaygpIHRvIGVuYWJsZS9kaXNhYmxlIEtFWV9NT1VTRSwgc28KKwkgIHRoYXQgYXBwbGljYXRpb25zIGNhbiBkaXNhYmxlIG5jdXJzZXMnIG1vdXNlIGFuZCBzdXBwbHkgdGhlaXIgb3duCisJICBoYW5kbGVyLgorCSsgYWRkIGV4dGVuc2lvbnMga2V5b2soKSBhbmQgZGVmaW5lX2tleSgpLiAgVGhlc2UgYXJlIGRlc2lnbmVkIHRvIGFsbG93CisJICB0aGUgdXNlcidzIGFwcGxpY2F0aW9uIGJldHRlciBjb250cm9sIG92ZXIgdGhlIHVzZSBvZiBmdW5jdGlvbiBrZXlzLAorCSAgZS5nLiwgZGlzYWJsaW5nIHRoZSBuY3Vyc2VzIEtFWV9NT1VTRS4gIChUaGUgZGVmaW5lX2tleSBpZGVhIHdhcyBmcm9tCisJICBhIG1haWxpbmctbGlzdCB0aHJlYWQgc3RhcnRlZCBieSBLZW5uZXRoIEFsYmFub3dza2kKKwkgIDxramFoZHNAa2phaGRzLmNvbT4gTm92JzE5OTUpLgorCSsgcmVzdG9yZSBvcmlnaW5hbCBiZWhhdmlvciBpbiBuY3Vyc2VzICdnJyB0ZXN0LCBpLmUuLCBleHBsaWNpdGx5CisJICBzZXQgdGhlIGtleXBhZCBtb2RlIHJhdGhlciB0aGFuIHVzZSB0aGUgZGVmYXVsdCwgc2luY2UgaXQgY29uZnVzZXMKKwkgIHBlb3BsZS4KKwkrIHJld3JvdGUgdGhlIG5ld2RlbW8gYmFubmVyIHNvIGl0J3MgcmVhZGFibGUgKHJlcG9ydGVkIGJ5IEh1Z2gKKwkgIERhbmllbCkuCisJKyB0aWR5IHVwIGV4aXQgZnJvbSBoYXNodGVzdCAocmVwb3J0ZWQgYnkgSHVnaCBEYW5pZWwpLgorCSsgcmVzdG9yZSBjaGVjayBmb3IgXlEgaW4gbmN1cnNlcyAnZycgdGVzdCBicm9rZW4gaW4gOTcwNTEwIChyZXBvcnRlZAorCSAgYnkgSHVnaCBEYW5pZWwpCisJKyBjb3JyZWN0IHRwdXQgcHJvZ3JhbSwgY2hlY2tpbmcgcmV0dXJuLXZhbHVlIG9mIHNldHVwdGVybSAocGF0Y2ggYnkKKwkgIEZsb3JpYW4gTGEgUm9jaGUpLgorCSsgY29ycmVjdCBsb2dpYyBpbiBwbm91dHJlZnJlc2goKSBhbmQgcGVjaG9jaGFyKCkgZnVuY3Rpb25zIChyZXBvcnRlZAorCSAgYnkgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi51c2MuZWR1PikuICBUaGUgY29tcHV0YXRpb24KKwkgIG9mICd3aWRlJyBkYXRlIHRvIGVyaWMncyAjMjgzICgxLjkuOSksIGFuZCB0aGUgcGVjaG9jaGFyIGJ1ZyB0byB0aGUKKwkgIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uICgxLjkuNikuCisJKyBjb3JyZWN0IHR5cG8gaW4gdnQxMDItdyB0ZXJtaW5mby5zcmMgZW50cnkgKHBhdGNoIGJ5IFJvYmVydCBXdWVzdAorCSAgPHJ3dWVzdEBzaXJlLnZ0LmNvbT4pCisJKyBtb3ZlIGNhbGxzIG9mIF9uY19iYWNrZ3JvdW5kKCkgb3V0IG9mIHZhcmlvdXMgbG9vcHMsIGFzIGl0cyByZXR1cm4KKwkgIHZhbHVlIHdpbGwgYmUgdGhlIHNhbWUgZm9yIHRoZSB3aG9sZSB3aW5kb3cgYmVpbmcgb3BlcmF0ZWQgb24gKHBhdGNoCisJICBieSBKIFQgQ29ua2xpbikuCisJKyBhZGQgbWFjcm9zIGdldGN1clt4eV0gZ2V0YmVnW3h5XSBnZXRwYXJbeHldLCB3aGljaCBhcmUgZGVmaW5lZCBpbgorCSAgU1ZyNCBoZWFkZXJzIChwYXRjaCBieSBKIFQgQ29ua2xpbiA8anRjQE5ldEJTRC5PUkc+KQorCSsgbW9kaWZ5IGdsaWJjIGFkZG9uLWNvbmZpZ3VyZSBzY3JpcHRzIChwYXRjaCBieSBILkouTHUpLgorCSsgY29ycmVjdCBhIGJ1ZyBpbiBoYXNobWFwLmM6IHRoZSBzaXplIHVzZWQgZm9yIGNsZWFyaW5nIHRoZSBoYXNobWFwCisJICB0YWJsZSB3YXMgaW5jb3JyZWN0LCBjYXVzaW5nIHN0YWNrIGNvcnJ1cHRpb24gZm9yIGxhcmdlIHZhbHVlcyBvZgorCSAgTElORVMsIGUuZy4sID5NQVhMSU5FUy8yIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgZXJpYydzIHRlcm1pbmZvIDkuMTMuMjMgJiA5LjEzLjI0IGNoYW5nZXM6IHJlcGxhY2VkIG1pbml0ZWwtMiBlbnRyeSwKKwkgIGFkZGVkIE1HUiwgYW5zaS1udCAobm90ZTogdGhlIGNoYW5nZXMgZGVzY3JpYmVkIGZvciA5LjEzLjI0IGhhdmUgbm90CisJICBiZWVuIGFwcGxpZWQpLgorCT4gc2V2ZXJhbCBjaGFuZ2VzIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGNvcnJlY3QgYSBtaXNzaW5nIGVycm9yLXJldHVybiBpbiBmb3JtX2RyaXZlci5jIHdoZW4gd3JhcHBpbmcgb2YgYQorCSAgZmllbGQgaXMgbm90IHBvc3NpYmxlLgorCSsgY29ycmVjdCBsb2dpYyBpbiBmb3JtX2RyaXZlci5jIGZvciBjb25maWd1cmF0aW9ucyB0aGF0IGRvIG5vdCBoYXZlCisJICBtZW1jY3B5KCkgKHJlcG9ydGVkIGJ5IFNpZGlrIElzYW5pIDxpc2FuaUBjZmh0Lmhhd2FpaS5lZHU+KQorCSsgY2hhbmdlIHNldmVyYWwgYysrIGJpbmRpbmcgZnVuY3Rpb25zIHRvIGlubGluZS4KKwkrIG1vZGlmeSBjKysgbWVudSBiaW5kaW5nIHRvIGluaGVyaXQgZnJvbSBwYW5lbHMsIGZvciBwcm9wZXIKKwkgIGluaXRpYWxpemF0aW9uLgorCSsgY29ycmVjdCBmcmVlaW5nIG9mIG1lbnUgaXRlbXMgaW4gYysrIGJpbmRpbmcuCisJKyBtb2RpZnkgYysrIGJpbmRpbmcgdG8gcmVmbGVjdCByZW1vdmFsIG9mIGNvbnN0IGZyb20gdXNlciBkYXRhIHBvaW50ZXIKKwkgIGluIGZvcm1zL21lbnVzIGxpYnJhcmllcy4KKworOTcwNTI0CisJKyBhZGQgZGVzY3JpcHRpb24gb2YgeHRlcm0tMTZjb2xvci4KKwkrIG1vZGlmeSBuYW1lIG9mIHNoYXJlZC1saWJyYXJ5IG9uICpCU0QgdG8gZW5kIHdpdGggJChSRUxfVkVSU0lPTikKKwkgIHJhdGhlciB0aGFuICQoQUJJX1ZFUlNJT04pIHRvIG1hdGNoIGFjdHVhbCBjb252ZW50aW9uIG9uIEZyZWVCU0QKKwkgIChjZjogOTYwNzEzKS4KKwkrIGFkZCBPcGVuQlNEIHRvIHNoYXJlZC1saWJyYXJ5IGNhc2UsIHNhbWUgYXMgTmV0QlNEIGFuZCBGcmVlQlNECisJICAocmVwb3J0ZWQgYnkgSHVnaCBEYW5pZWwgPGh1Z2hAcmF0LnRvYWQuY29tPikuCisJKyBjb3JyZWN0ZWQgaW5jbHVkZS1kZXBlbmRlbmN5IGluIG1lbnUvTWFrZWZpbGUgc28gdGhhdCAibWFrZSBpbnN0YWxsIgorCSAgd29ya3MgcHJvcGVybHkgdy9vIGZpcnN0IGRvaW5nICJtYWtlIi4KKwkrIGFkZCBmYWxsYmFjayBkZWZpbml0aW9uIGZvciBpc2FzY2lpLCB1c2VkIGluIGluZm9jbXAuCisJKyBtb2RpZnkgeG1hcyB0byB1c2UgY29sb3IsIGFuZCB0byBleGl0IHJpZ2h0IGF3YXkgd2hlbiBhIGtleSBpcworCSAgcHJlc3NlZC4KKwkrIG1vZGlmeSBnZGMgc28gdGhhdCB0aGUgc2Nyb2xsZWQgZGlnaXRzIGZ1bmN0aW9uIGFzIGRlc2NyaWJlZCAodGhlcmUKKwkgIHdhcyBubyB0aW1lIGRlbGF5IGJldHdlZW4gdGhlIHN0YWdlcywgYW5kIHRoZSBkaWdpdHMgb3Zlcndyb3RlIHRoZQorCSAgYm91bmRpbmcgYm94IHdpdGhvdXQgdGlkeWluZyB1cCkuCisJKyBtb2RpZnkgbGliX2NvbG9yLmMgdG8gdXNlIHNldGFmL3NldGFiIG9ubHkgZm9yIHRoZSBBTlNJIGNvbG9yIGNvZGVzCisJICAwIHRocm91Z2ggNy4gIFVzaW5nIDE2IGNvbG9ycyByZXF1aXJlcyBzZXRmL3NldGIuCisJKyBtb2RpZnkgbmN1cnNlcyAnYycgdGVzdCB0byB3b3JrIHdpdGggMTYgY29sb3JzLCBhcyB3ZWxsIGFzIHRoZSBub3JtYWwKKwkgIDggY29sb3JzLgorCSsgcmVtb3ZlIGNvbnN0IHF1YWxpZmllciBmcm9tIHVzZXIgZGF0YSBwb2ludGVyIGluIGZvcm1zIGFuZCBtZW51cworCSAgbGlicmFyaWVzIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCSsgcmV3cm90ZSAnd2FkZGNobnN0cigpJyB0byBhdm9pZCB1c2luZyB0aGUgX25jX3dhZGRjaF9ub3N5bmMoKQorCSAgZnVuY3Rpb24sIHRoZXJlYnkgbm90IGludGVycHJldGluZyB0YWJzLCBldGMuLCBhcyBwZXIgc3BlYyAocGF0Y2ggYnkKKwkgIEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisKKzk3MDUxNworCSsgc3VwcHJlc3MgY2hlY2sgZm9yIHByZS1leGlzdGluZyBuY3Vyc2VzIGhlYWRlciBpZiB0aGUgLS1wcmVmaXgKKwkgIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbnMgIi0td2l0aC1zeXN0ZW0tdHlwZSIgYW5kCisJICAiLS13aXRoLXN5c3RlbS1yZWxlYXNlIiB0byBhc3Npc3QgaW4gY2hlY2tpbmcgdGhlIGdlbmVyYXRlZAorCSAgbWFrZWZpbGVzLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gIi0tZW5hYmxlLXJwYXRoIiB0byBhbGxvdyBpbnN0YWxsZXJzIHRvIHNwZWNpZnkKKwkgIHRoYXQgcHJvZ3JhbXMgbGlua2VkIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcyB3aWxsIGhhdmUgdGhlaXIgbGlicmFyeQorCSAgcGF0aCBlbWJlZGRlZCwgYWxsb3dpbmcgaW5zdGFsbHMgaW50byBub25zdGFuZGFyZCBsb2NhdGlvbnMuCisJKyBhZGQgZmxhZ3MgdG8gT1NGMSBzaGFyZWQtbGlicmFyeSBvcHRpb25zIHRvIHNwZWNpZnkgdmVyc2lvbiBhbmQKKwkgIHN5bWJvbCBmaWxlIChwYXRjaCBieSBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lk5vRGFrLmVkdT4pCisJKyBhZGQgbWlzc2luZyBkZWZpbml0aW9uIGZvciBBQklfVkVSU0lPTiB0byBjKysvTWFrZWZpbGUuaW4gKHJlcG9ydGVkCisJICBieSBTYXRvc2hpIEFkYWNoaSA8YWRhY2hpQHdpc2RvbS5hYS5hcC50aXRlY2guYWMuanA+KS4KKwkrIG1vZGlmeSBsaW5rIGZsYWdzIHRvIGFjY29tbW9kYXRlIEhQLVVYIGxpbmtlciB3aGljaCBlbWJlZHMgYWJzb2x1dGUKKwkgIHBhdGhuYW1lcyBpbiBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBzaGFyZWQgbGlicmFyaWVzIChyZXBvcnRlZCBieQorCSAgSmFzb24gRXZhbnMgPGphc29uZUBtcmMudWlkYWhvLmVkdT4sIHNvbHZlZCBieSBBbGFuIFNodXRrbworCSAgPGF0c0BodWJlcnQud3VzdGwuZWR1PikuCisJKyBkcm9wIHVubmVjZXNzYXJ5IGNoZWNrIGZvciBhdHRyaWJ1dGUtY2hhbmdlIGluIG9uc2NyZWVuX212Y3VyKCkgc2luY2UKKwkgIG12Y3VyKCkgaXMgdGhlIG9ubHkgY2FsbGVyIHdpdGhpbiB0aGUgbGlicmFyeSwgYW5kIHRoYXQgY2hlY2sgaW4gdHVybgorCSAgaXMgZXhlcmNpc2VkIG9ubHkgZnJvbSBsaWJfZG91cGRhdGUuYyAocGF0Y2ggYnkgQWxleGFuZGVyIFYuCisJICBMdWt5YW5vdikuCisJKyBhZGQgJ2JsYW5rJyBwYXJhbWV0ZXIgdG8gX25jX3Njcm9sbF93aW5kb3coKSBzbyBfbmNfbXZjdXJfc2Nyb2xsbigpCisJICBjYW4gdXNlIHRoZSBiYWNrZ3JvdW5kIG9mIHN0ZHNjciBhcyBhIHBhcmFtZXRlciB0byB0aGF0IGZ1bmN0aW9uCisJICAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIG1vdmVkIF9uY19tdmN1cl9zY3JvbGxuKCkgZnJvbSBsaWJfbXZjdXIuYyB0byBsaWJfZG91cGRhdGUuYywgdG8gdXNlCisJICB0aGUgbGF0dGVyJ3MgaW50ZXJuYWwgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeQorCSAgY3Vyc29yIHNhdmUvcmVzdG9yZSBvcGVyYXRpb25zIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgb21pdCBwYXJhbWV0ZXIgb2YgQ2xyVXBkYXRlKCksIHNpbmNlIGl0IGlzIGNhbGxlZCBvbmx5IGZvciBuZXdzY3IsCisJICBmdXJ0aGVyIG9wdGltaXplZC9yZWR1Y2VkIGJ5IHVzaW5nIENsZWFyU2NyZWVuKCkgYW5kIFRyYW5zZm9ybUxpbmUoKQorCSAgdG8gZ2V0IHJpZCBvZiBkdXBsaWNhdGUgY29kZSAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIG1vZGlmeSBzY3JvbGxpbmcgYWxnb3JpdGhtIGluIF9uY19zY3JvbGxfb3B0aW1pemUoKSB0byByZWplY3QgaHVua3MKKwkgIHRoYXQgYXJlIHNtYWxsZXIgdGhhbiB0aGUgZGlzdGFuY2UgdG8gYmUgbW92ZWQgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLgorCSAgTHVreWFub3YpLgorCSsgY29ycmVjdCBhIHBsYWNlIHdoZXJlIHRoZSBwYW5lbCBsaWJyYXJ5IHdhcyBub3QgaWZkZWYnZCBpbiBuY3Vyc2VzLmMKKwkgIChKdWVyZ2VuIFBmZWlmZXIpCisJKyBkb2N1bWVudGF0aW9uIGZpeGVzIChKdWVyZ2VuIFBmZWlmZXIpCisKKzk3MDUxNQk0LjEgcmVsZWFzZSBmb3IgdXBsb2FkIHRvIHByZXAuYWkubWl0LmVkdQorCSsgcmUtdGFnIGNoYW5nZXMgc2luY2UgOTcwNTA1IGFzIDQuMSByZWxlYXNlLgorCis5NzA1MTAKKwkrIG1vZGlmeSBuY3Vyc2VzICdnJyB0ZXN0IHRvIGFsbG93IG1vdXNlIGlucHV0CisJKyBtb2RpZnkgZGVmYXVsdCB4dGVybSBkZXNjcmlwdGlvbiB0byBpbmNsdWRlIG1vdXNlLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYWRkIC1Xd3JpdGUtc3RyaW5ncyBpZiBnY2Mgd2FybmluZ3MgYXJlCisJICBlbmFibGVkIHdoaWxlIGNvbmZpZ3VyaW5nIC0tZW5hYmxlLWNvbnN0IChhbmQgZml4ZWQgcmVsYXRlZAorCSAgd2FybmluZ3MpLgorCSsgYWRkIHRvZ2dsZSwgc3RhdHVzIGRpc3BsYXkgZm9yIGtleXBhZCBtb2RlIHRvIG5jdXJzZXMgJ2cnIHRlc3QgdG8KKwkgIHZlcmlmeSB0aGF0IGtleXBhZCBhbmQgc2Nyb2xsb2sgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgd2luZG93CisJICBkdXJpbmcgYSBjYWxsIHRvIG5ld3dpbi4KKwkrIGNvcnJlY3Rpb24gdG8gTUtleHBhbmRlZC5zaCB0byBtYWtlIGl0IHdvcmsgd2hlbiBjb25maWd1cmUgLS1zcmNkaXIKKwkgIGlzIHVzZWQgKHJlcG9ydGVkIGJ5IEguSi5MdSkuCisJKyByZXZpc2UgdGVzdCBmb3IgYm9vbC10eXBlLCBlbnN1cmluZyB0aGF0IGl0IGNoZWNrcyBpZiBidWlsdGluLmggaXMKKwkgIGF2YWlsYWJsZSBiZWZvcmUgaW5jbHVkaW5nIGl0LCBhZGRpbmcgdGVzdCBmb3Igc2l6ZW9mKGJvb2wpIGVxdWFsCisJICB0byBzaXplb2Yoc2hvcnQpLCBhbmQgd2FybmluZyB1c2VyIGlmIHRoZSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkCisJICAocmVwb3J0ZWQgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGFkZCBmaWxlcyB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gb2YgbmN1cnNlcyBhcyBhbiBhZGQtb24gbGlicmFyeQorCSAgZm9yIEdOVSBsaWJjIChwYXRjaCBieSBILkouTHUgPGhqbEBsdWNvbi5vcmc+KQorCis5NzA1MDYKKwkrIGNvcnJlY3QgYnVmZmVyIG92ZXJydW4gaW4gbGliX3RyYWNlYXRyLmMKKwkrIG1vZGlmeSBjaGFuZ2UgdG8gbGliX3ZpZGF0dHIuYyB0byBhdm9pZCByZWR1bmRhbnQgb3JpZ19wYWlyLgorCSsgdHVybiBvbiAnZWNobygpJyBpbiBoYW5vaS5jLCBzaW5jZSBpdCBpcyBpbml0aWFsbHkgb2ZmLgorCSsgcmVuYW1lIGxvY2FsICdlcnJubycgdmFyaWFibGUgaW4gZXRpcC5oIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggZ2xvYmFsCisJICAoSC5KLkx1KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGNhY2hlIExELCBBUiwgQVJfT1BUUyAocGF0Y2ggYnkgSC5KLkx1CisJICA8aGpsQGx1Y29uLm9yZz4pCisKKzk3MDUwNQk0LjEgcHJlLXJlbGVhc2UKKwkrIHJlZ2VuZXJhdGUgdGhlIG1pc2MgZGlyZWN0b3J5IGh0bWwgZHVtcHMgd2l0aG91dCB0aGUgbGluayBsaXN0LCB3aGljaAorCSAgaXMgbm90IHVzZWZ1bC4KKwkrIGNvcnJlY3QgZGVwZW5kZW5jeSBpbiBmb3JtIGRpcmVjdG9yeSBtYWtlZmlsZSB3aGljaCBjYXVzZWQKKwkgIHVubmVjZXNzYXJ5IHJlY29tcGlsZXMuCisJKyBjb3JyZWN0IHN1YnN0aXR1dGlvbiBmb3IgQUJJX1ZFUlNJT04gaW4gdGVzdC1tYWtlZmlsZQorCSsgbW9kaWZ5IGluc3RhbGwgcnVsZXMgZm9yIHNoYXJlZC1saWJyYXJ5IHRhcmdldHMgdG8gcmVtb3ZlIHRoZSB0YXJnZXQKKwkgIGJlZm9yZSBpbnN0YWxsaW5nLCBzaW5jZSBzb21lIGluc3RhbGwgcHJvZ3JhbXMgZG8gbm90IHByb3Blcmx5IGhhbmRsZQorCSAgb3ZlcndyaXRlIG9mIHN5bWJvbGljIGxpbmtzLgorCSsgY2hhbmdlIG9yZGVyIG9mIHRvcC1sZXZlbCB0YXJnZXRzIHNvIHRoYXQgJ2luY2x1ZGUnIGltbWVkaWF0ZQorCSAgcHJlY2VkZXMgdGhlICduY3Vyc2VzJyBkaXJlY3RvcnksIHJlZHVjaW5nIHRoZSB0aW1lIGJldHdlZW4gbmV3CisJICBoZWFkZXJzIGFuZCBuZXcgbGlicmFyaWVzIChyZXF1ZXN0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKwkrIG1vZGlmeSBsaWJfdmlkYXR0ci5jIHNvIHRoYXQgY29sb3JzIGFyZSB0dXJuZWQgb2ZmIG9ubHkgYmVmb3JlCisJICBtb2RpZnlpbmcgb3RoZXIgYXR0cmlidXRlcywgdHVybmVkIG9uIGFmdGVyIG90aGVycy4gIFRoaXMgbWFrZXMgdGhlCisJICBoYW5vaS5jIHByb2dyYW0gZGlzcGxheSBjb3JyZWN0bHkgb24gRnJlZUJTRCBjb25zb2xlLgorCSsgbW9kaWZ5IGRlYnVnIGNvZGUgaW4gcGFuZWwgbGlicmFyeSB0byBwcmludCB1c2VyLWRhdGEgYWRkcmVzc2VzCisJICByYXRoZXIgdGhhbiB0aGUgc3RyaW5ncyB3aGljaCB0aGV5IChtYXkpIHBvaW50IHRvLgorCSsgYWRkIGNoZWNrIHRvIGVuc3VyZSB0aGF0IEMrKyBiaW5kaW5nIGFuZCBkZW1vIGFyZSBub3QgYnVpbHQgd2l0aCBnKysKKwkgIHZlcnNpb25zIGJlbG93IDIuNywgc2luY2UgdGhlIGJpbmRpbmcgdXNlcyB0ZW1wbGF0ZXMuCisJKyBtb2RpZnkgYysrIGJpbmRpbmcgYW5kIGRlbW8gdG8gYnVpbGQgYW5kIHJ1biB3aXRoIFNHSSdzIGMrKyBjb21waWxlci4KKwkgIChJdCBhbHNvIGNvbXBpbGVzIHdpdGggdGhlIFN1biBTcGFyY1dvcmtzIGNvbXBpbGVyLCBidXQgdGhlIGRlbW8gZG9lcworCSAgbm90IGxpbmssIGR1ZSB0byBhIHZ0YmwgcHJvYmxlbSkuCisJKyBjb3JyZWN0aW9ucyB0byBkZW1vLmNjLCB0byBmaXggb3V0LW9mLXNjb3BlIHZhcmlhYmxlcyAoSnVlcmdlbgorCSAgUGZlaWZlcikuCisKKzk3MDUwMworCSsgY29ycmVjdCBtZW1vcnkgbGVhayBpbiBfbmNfdHJhY2VfYnVmKCkuCisJKyBhZGQgY29uZmlndXJlIHRlc3QgZm9yIHJlZ2V4cHIuaCwgZm9yIFVuaXh3YXJlIDEueC4KKwkrIGNvcnJlY3QgbWlzc2luZyAiLi8iIHByZWZpeGluZyBuYW1lcyBvZiBnZW5lcmF0ZWQgZmlsZXMgaW4gbmN1cnNlcworCSAgZGlyZWN0b3J5LgorCSsgdXNlIHNpbmdsZS1xdW90ZXMgaW4gY29uZmlndXJlIHNjcmlwdHMgYXNzaWdubWVudHMgZm9yIE1LX1NIQVJFRF9MSUIKKwkgIHRvIHdvcmthcm91bmQgc2hlbGwgYnVnIG9uIEZyZWVCU0QgMi4xLjUKKwkrIHJlbW92ZSB0YWJzIGZyb20gaW50ZXJtZWRpYXRlICNkZWZpbmUncyBmb3IgR0NDX1BSSU5URiwgR0NDX1NDQU5GCisJICB0aGF0IGNhdXNlZCBpbmNvcnJlY3QgcmVzdWx0IGluIG5jdXJzZXNfY2ZnLmgKKwkrIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gaW4gbGliX3RyYWNlLmMsIHdoaWNoIG9taXR0ZWQgdmVyc2lvbiBpbmZvLgorCSsgcmVtb3ZlIGVjaCwgZWwxIGF0dHJpYnV0ZXMgZnJvbSBjb25zMjV3IGRlc2NyaXB0aW9uOyB0aGV5IGFwcGVhciB0bworCSAgbWFsZnVuY3Rpb24gaW4gRnJlZUJTRCAyLjEuNQorCSsgY29ycmVjdCBjb2xvciBhdHRyaWJ1dGVzIGluIHRlcm1pbmZvLnNyYyBhbmQgbGliX2NvbG9yLmMgdG8gbWF0Y2gKKwkgIFNWcjQgYmVoYXZpb3IgYnkgaW50ZXJjaGFuZ2luZyBjb2RlcyAxLDQsIDMsNiBpbiB0aGUgc2V0Zi9zZXRiCisJICBjYXBhYmlsaXRpZXMuCisJKyB1c2UgY3Vyc19zZXQoKSByYXRoZXIgdGhhbiBjaGVja3MgdmlhIHRpZ2V0c3RyKCkgZm9yIHRlc3QgcHJvZ3JhbXMKKwkgIHRoYXQgaGlkZSB0aGUgY3Vyc29yOiBmaXJld29yaywgcmFpbiwgd29ybS4KKwkrIGVuc3VyZSB0aGF0IGlmIHRoZSB0ZXJtaW5hbCBsYWNrcyBjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiwgcGFybV9pbmRleAorCSAgYW5kIHBhcm1fcmluZGV4IGFyZSB1c2VkIG9ubHkgdG8gc2Nyb2xsIHRoZSB3aG9sZSBzY3JlZW4gKHBhdGNoIGJ5CisJICBQZXRlciBXZW1tKS4KKwkrIGNvcnJlY3QgY3Vyc19zZXQoKSBsb2dpYywgd2hpY2ggZGlkIG5vdCByZXR1cm4gRVJSIGlmIHRoZSByZXF1ZXN0ZWQKKwkgIGF0dHJpYnV0ZXMgZGlkIG5vdCBleGlzdCwgbm9yIGRpZCBpdCBhc3N1bWUgYW4gdW5rbm93biBpbml0aWFsIHN0YXRlCisJICBmb3IgdGhlIGN1cnNvciAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGNvbWJpbmUgSURjVHJhbnNmb3JtTGluZSBhbmQgTm9JRGNUcmFuc2Zvcm1MaW5lIHRvIG5ldyBUcmFuc2Zvcm1MaW5lCisJICBmdW5jdGlvbiBpbiBsaWJfZG91cGRhdGUuYyAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGNvcnJlY3QgaGFzaG1hcC5jLCB3aGljaCBkaWQgbm90IHVwZGF0ZSBpbmRleCBpbmZvcm1hdGlvbiAocGF0Y2ggYnkKKwkgIEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBmaXhlcyBmb3IgQysrIGJpbmRpbmcgYW5kIGRlbW8gKHNlZSBjKysvTkVXUykgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0IGluZGV4IGluIGxpYl9pbnN0ci5jIChKdWVyZ2VuIFBmZWlmZXIpLgorCSsgY29ycmVjdCB0eXBvIGluIDk3MDQyNiBwYXRjaCBmcm9tIFRvbSdzIGNsZWFudXAgb2YgbGliX292ZXJsYXkuYworCSAgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisKKzk3MDQyNgorCSsgY29ycmVjdGVkIGNvc3QgY29tcHV0YXRpb24gaW4gUHV0UmFuZ2UoKSwgd2hpY2ggd2FzIHVzaW5nCisJICBtaWxsaXNlY29uZHMgY29tcGFyZWQgdG8gY2hhcmFjdGVycyBieSBhZGRpbmcgdHdvIG5ldyBtZW1iZXJzIHRvIHRoZQorCSAgU0NSRUVOIHN0cnVjdCwgX2hwYV9jaF9jb3N0IGFuZCBfY3VwX2NoX2Nvc3QuCisJKyBkcm9wIG5jdXJzZXMvbGliX3VuY3RybC5jLCBhZGQgbmN1cnNlcy9NS3VuY3RybC5hd2sgdG8gZ2VuZXJhdGUgYQorCSAgY29uc3QgYXJyYXkgb2Ygc3RyaW5ncyAoc3VnZ2VzdGVkIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuICBUaGUKKwkgIG9yaWdpbmFsIHN1Z2dlc3Rpb24gaW4gOTcwMTE4IHVzZWQgYSBwZXJsIHNjcmlwdC4KKwkrIHJld3JvdGUgbmN1cnNlcyAnYicgdGVzdCB0byBiZXR0ZXIgZXhlcmNpc2UgbWFnaWMtY29va2llICh4bWMpLCBhcworCSAgd2VsbCBhcyBub3RpbmcgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBhIHRlcm1pbmFsLgorCSsgdHJhY2UgdGhlIGNvbXB1dGF0aW9uIG9mIGNvc3QgdmFsdWVzIGluIGxpYl9tdmN1ci5jCisJKyBtb2RpZnkgX25jX3Zpc2J1ZigpIHRvIHVzZSBvY3RhbCByYXRoZXIgdGhhbiBoZXgsIGNvcnJlY3RlZCBzaWduCisJICBleHRlbnNpb24gYnVnIGluIHRoYXQgZnVuY3Rpb24gdGhhdCBjYXVzZWQgYnVmZmVyIG92ZXJmbG93LgorCSsgbW9kaWZ5IHRyYWNlIGluIGxpYl9hY3MuYyB0byB1c2UgX25jX3Zpc2J1ZigpLgorCSsgc3VwcHJlc3MgdHJhY2Ugd2l0aGluIF90cmFjZWF0dHIyKCkuCisJKyBjb3JyZWN0IGxvZ2ljIG9mIF90cmFjZWNodHlwZTIoKSwgd2hpY2ggZGlkIG5vdCBhY2NvdW50IGZvciByZXBlYXRzCisJICBvciByZWRlZmluaXRpb24gd2l0aGluIGFuIGFjc2Mgc3RyaW5nLgorCSsgbW9kaWZ5IGRlYnVnLWxpYnJhcnkgdmVyc2lvbiBiYXVkcmF0ZSgpIHRvIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCSAgJEJBVURSQVRFIHRvIG92ZXJyaWRlIHNwZWVkIGNvbXB1dGF0aW9uLiAgVGhpcyBpcyBuZWVkZWQgZm9yCisJICByZWdyZXNzaW9uIHRlc3RpbmcuCisJKyBjb3JyZWN0IHByb2JsZW1zIHNob3duIGJ5ICJ3ZWJsaW50IC1wZWRhbnRpYyIuCisJKyB1cGRhdGUgbWFpbGluZy1saXN0IGluZm9ybWF0aW9uIChub3cgbmN1cnNlc0Bic2RpLmNvbSkuCisKKzk3MDQxOQorCSsgSW1wcm92ZSBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3ggbWFucGFnZSB0byBiZXR0ZXIgZGVzY3JpYmUgdGhlCisJICBwcmVjaXNpb24gcGFyYW1ldGVyIGZvciBUWVBFX05VTUVSSUMgYW5kIFRZUEVfSU5URUdFUi4gIFByb3ZpZGUgbW9yZQorCSAgcHJlY2lzZSBpbmZvcm1hdGlvbiBob3cgdGhlIHJhbmdlIGNoZWNraW5nIGNhbiBiZSBhdm9pZGVkLiAgKHBhdGNoIGJ5CisJICBKdWVyZ2VuIFBmZWlmZXIsIHJlcG9ydGVkIGJ5IEJyeWFuIEhlbmRlcnNvbikKKwkrIGNoYW5nZSB0eXBlIG9mIG1pbi9tYXggdmFsdWUgb2YgZm9ybSB0eXBlcyBUWVBFX0lOVEVHRVIgdG8gbG9uZyB0bworCSAgbWF0Y2ggU1ZyNCBkb2N1bWVudGF0aW9uLgorCSsgc2V0IHRoZSBmb3JtIHdpbmRvdyB0byBzdGRzY3IgaW4gc2V0X2Zvcm1fd2luKCkgc28gdGhhdCBmb3JtX3dpbigpCisJICB3b24ndCByZXR1cm4gbnVsbCAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyLCByZXBvcnRlZCBieSBCcnlhbgorCSAgSGVuZGVyc29uIDxicnlhbmhAZ2lyYWZmZS5uZXRnYXRlLm5ldD4pLgorCis5NzA0MTIKKwkrIGNvcnJlY3RlZCBpZmRlZidpbmcgb2YgaW5saW5lIChjZjogOTcwMzIxKSBmb3IgVFJBQ0UgdnMgQysrLgorCSsgY29ycmVjdGVkIHRvZ2dsZV9hdHRyX29mZigpIG1hY3JvIChwYXRjaCBieSBBbmRyaWVzIEJyb3V3ZXIpLgorCSsgbW9kaWZ5IHRyZWF0bWVudCBvZiBlbXB0eSB0b2tlbiBpbiAkTUFOUEFUSCB0byAvdXNyL21hbiAocmVwb3J0ZWQgYnkKKwkgIDxBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sPikKKwkrIG1vZGlmeSB0cmFjZXMgdGhhdCByZWNvcmQgZnVuY3Rpb25zLWNhbGxlZCBzbyB0aGF0IGNodHlwZSBhbmQgYXR0cl90CisJICB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBzeW1ib2xpY2FsbHksIHRvIHNpbXBsaWZ5IHJldXNlIG9mIGdlbmVyYXRlZAorCSAgdGVzdC1zY3JpcHRzIG9uIFNWcjQgcmVncmVzc2lvbiB0ZXN0aW5nLgorCSsgYWRkIG5ldyB0cmFjZSBmdW5jdGlvbnMgX3RyYWNlYXR0cjIoKSBhbmQgX3RyYWNlY2h0eXBlMigpCisKKzk3MDQwNQorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtY29uc3QsIHRvIHN1cHBvcnQgdGhlIHVzZSBvZiAnY29uc3QnCisJICB3aGVyZSBYU0kgc2hvdWxkIGhhdmUsIGJ1dCBkaWQgbm90LCBzcGVjaWZ5LiAgVGhpcyBkZWZpbmVzCisJICBOQ1VSU0VTX0NPTlNULCB3aGljaCBpcyBhbiBlbXB0eSB0b2tlbiBvdGhlcndpc2UsIGZvciBzdHJpY3QKKwkgIGNvbXBhdGliaWxpdHkuCisJKyBtYWtlIHByb2Nlc3Npbmcgb2YgY29uZmlndXJlIG9wdGlvbnMgbW9yZSB2ZXJib3NlIGJ5IGVjaG9pbmcgdGhlCisJICAtLWVuYWJsZS8tLXdpdGggdmFsdWVzLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtYmlnLWNvcmUKKwkrIHNldCBpbml0aWFsIHN0YXRlIG9mIHNvZnR3YXJlIGVjaG8gb2ZmIGFzIHBlciBYU0kuCisJKyBjaGVjayBmb3IgQysrIGJ1aWx0aW4uaCBoZWFkZXIKKwkrIGNvcnJlY3QgY29tcHV0YXRpb24gb2YgYWJzb2x1dGUtcGF0aCBmb3IgJElOU1RBTEwgdGhhdCBkcm9wcGVkICItYyIKKwkgIHBhcmFtZXRlciBmcm9tIHRoZSBleHByZXNzaW9uLgorCSsgcmVuYW1lIGNvbmZpZy5oIHRvIG5jdXJzZXNfY2ZnLmggdG8gYXZvaWQgbmFtaW5nLWNvbmZsaWN0IHdoZW4KKwkgIG5jdXJzZXMgaXMgaW50ZWdyYXRlZCBpbnRvIGxhcmdlciBzeXN0ZW1zIChhZGFwdGVkIGZyb20gZGlmZnMgYnkKKwkgIEguSi5MdSBmb3IgbGliYykuCisJKyBjb3JyZWN0IGluZXF1YWxpdHkgaW4gbGliX2RvdXBkYXRlLmMgdGhhdCBjYXVzZWQgYSBzaW5nbGUtY2hhciB0byBub3QKKwkgIGJlIHVwZGF0ZWQgd2hlbiB0aGUgY2hhciBvbiB0aGUgcmlnaHQtbWFyZ2luIHdhcyBub3QgYmxhbmssIGlkY29rKCkKKwkgIHdhcyB0cnVlIChwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdiAoaW4gOTcwMTI0KSwgcmVwb3J0ZWQKKwkgIGJ5IEtyaWFuZyBMZXJkc3V3YW5ha2lqIDxsZXJkc3V3YUBzY2YtZnMudXNjLmVkdT4gaW4gOTcwMzI5KS4KKwkrIG1vZGlmeSAnY2xlYW4nIHJ1bGUgaW4gaW5jbHVkZS9NYWtlZmlsZSBzbyB0aGF0IGZpbGVzIGNyZWF0ZWQgYnkKKwkgIGNvbmZpZ3VyZSBzY3JpcHQgYXJlIHJlbW92ZWQgaW4gJ2Rpc3RjbGVhbicgcnVsZSBpbnN0ZWFkLgorCis5NzAzMjgKKwkrIGNvcnJlY3QgYXJyYXkgbGltaXQgaW4gdHBhcmFtX2ludGVybmFsKCksIGFkZCBjYXNlIHRvIGludGVycHJldCAiJXgiCisJICAocGF0Y2ggYnkgQW5kcmVhcyBTY2h3YWIpCisJKyByZXdyb3RlIG51bWJlci1wYXJzaW5nIGluIG5jdXJzZXMuYyAnZCcgdGVzdDsgaXQgZGlkIG5vdCByZXNldCB0aGUKKwkgIHZhbHVlIHByb3Blcmx5IHdoZW4gbm9uLW51bWVyaWMgY2hhcmFjdGVycyB3ZXJlIGdpdmVuIChyZXBvcnRlZCBieQorCSAgQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4pCisKKzk3MDMyMQorCSsgbW92ZSBkZWZpbml0aW9uIG9mIF9fSU5URVJOQUxfQ0FQU19WSVNJQkxFIGJlZm9yZSBpbmNsdWRlIGZvcgorCSAgcHJvZ3MucHJpdi5oIChwYXRjaCBieSBEYXZpZCBNYWNLZW56aWUpLgorCSsgYWRkIGNvbmZpZ3VyYXRpb24gc3VtbWFyeSwgcmVvcmRlcmVkIGNoZWNrIGZvciBkZWZhdWx0IGluY2x1ZGUKKwkgIGRpcmVjdG9yeSB0byBiZXR0ZXIgYWNjb21tb2RhdGUgYSBjYXNlIHdoZXJlIGluc3RhbGxlciBpcyBjb25maWd1cmluZworCSAgYSBzZWNvbmQgY29weSBvZiBuY3Vyc2VzIChyZXBvcnRlZCBieSBLbGF1cyBXZWlkZQorCSAgPGt3ZWlkZUB0ZXpjYXQuY29tPikKKwkrIG1vdmVkIHRoZSAjZGVmaW5lIGZvciAnaW5saW5lJyBhcyBhbiBlbXB0eSB0b2tlbiBmcm9tIHRoZQorCSAgJChDRkxBR1NfREVCVUcpIHN5bWJvbCBpbnRvIGNvbmZpZy5oLCB0byBhdm9pZCByZWRlZmluaXRpb24gd2FybmluZworCSAgKHJlcG9ydGVkIGJ5IFdhcmQgSG9ybmVyKS4KKwkrIG1vZGlmeSB0ZXN0IGZvciBib29sIGJ1aWx0aW4gdHlwZSB0byB1c2UgJ3Vuc2lnbmVkJyByYXRoZXIgdGhhbgorCSAgJ3Vua25vd24nIHdoZW4gY3Jvc3MtY29tcGlsaW5nIChyZXBvcnRlZCBieSBXYXJkIEhvcm5lcikuCisKKzk3MDMxNQorCSsgYWRkIGhlYWRlciBkZXBlbmRlbmNpZXMgc28gdGhhdCAibWFrZSBpbnN0YWxsLmxpYnMiIHdpbGwgc3VjY2VlZAorCSAgZXZlbiBpZiAibWFrZSBhbGwiIGlzIG5vdCBkb25lIGZpcnN0LgorCSsgbW92ZWQgc29tZSBtYWNyb3MgZnJvbSBsaWJfZG91cGRhdGUuYyB0byBjdXJzZXMucHJpdi5oIHRvIHVzZSBpbgorCSAgZXhwYW5kZWQgZnVuY3Rpb25zIHdpdGggQVRBQy4KKwkrIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gb2YgbGliX2luc3RyLmM7IGJvdGggWFNJIGFuZCBTVnI0IGFncmVlIHRoYXQKKwkgIHRoZSB3aW5uc3RyIGZ1bmN0aW9ucyBjYW4gcmV0dXJuIG1vcmUgY2hhcmFjdGVycyB0aGFuIHdpbGwgZml0IG9uIG9uZQorCSAgbGluZS4KKworOTcwMzA4CisJKyBtb2RpZnkgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGxpYl9nZW4uYyB0byBzdXBwb3J0IHRyYWNlcyBvZiBjYWxsZWQgJgorCSAgcmV0dXJuLgorCSsgYWRkIG5ldyBjb25maWd1cmUgb3B0aW9uICItLWRpc2FibGUtbWFjcm9zIiwgZm9yIHRlc3RpbmcgY2FsbHMgd2l0aGluCisJICBsaWJfZ2VuLmMKKwkrIGNvcnJlY3RlZCBsb2dpYyB0aGF0IHNjcmVlbnMgbGV2ZWwtY2hlY2tpbmcgb2YgY2FsbGVkL3JldHVybiB0cmFjZXMuCisKKzk3MDMwMQorCSsgdXNlIG5ldyBjb25maWd1cmUgbWFjcm8gTkNfU1VCU1QgdG8gcmVwbGFjZSBBQ19QQVRIX1BST0csIGJldHRlcgorCSAgYWRkcmVzc2luZyByZXF1ZXN0IGJ5IFdhcmQgSG9ybmVyLgorCSsgY2hlY2sgZm9yIGNyb3NzLWNvbXBpbGluZyBiZWZvcmUgdHJ5aW5nIHRvIGludm9rZSB0aGUgYXV0b2NvbmYKKwkgIEFDX0ZVTkNfU0VUVkJVRl9SRVZFUlNFRCBtYWNybyAocmVwb3J0ZWQgYnkgV2FyZCBIb3JuZXIpCisJKyBjb3JyZWN0L3NpbXBsaWZ5IGxvb3AgaW4gX25jX3Zpc2J1ZigpLCA5NzAyMDEgY2hhbmdlcyBvbWl0dGVkCisJICBhIHBvaW50ZXItaW5jcmVtZW50LgorCSsgZWxpbWluYXRlIG9ic29sZXRlIHN5bWJvbCBTSEFSRURfQUJJIGZyb20gZGlzdC5tayAobm90ZWQgYnkKKwkgIEZsb3JpYW4gTGEgUm9jaGUpLgorCis5NzAyMTUKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWV4cGFuZGVkLCB0b2dldGhlciB3aXRoIGNvZGUgdGhhdAorCSAgaW1wbGVtZW50cyBhbiBleHBhbmRlZCBmb3JtIG9mIGNlcnRhaW4gY29tcGxleCBtYWNyb3MsIGZvciB0ZXN0aW5nCisJICB3aXRoIEFUQUMuCisJKyBkaXNhYmxlIENIRUNLX1BPU0lUSU9OIHVubGVzcyAtLXdpdGgtYXNzZXJ0aW9ucyBpcyBjb25maWd1cmVkCisJICAoQWxleGFuZGVyIFYgTHVreWFub3YgcG9pbnRlZCBvdXQgdGhhdCB0aGlzIGlzIHJlZHVuZGFudCkuCisJKyB1c2Uga2V5bmFtZSgpIHRvIHNob3cgdHJhY2VkIGNodHlwZSB2YWx1ZXMgd2hlcmUgYXBwbGljYWJsZSByYXRoZXIKKwkgIHRoYW4gX3RyYWNlY2hhcigpLCB3aGljaCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHRvIDgtYml0cy4KKwkrIG1pbm9yIGZpeGVzIHRvIFRSQUNFX0lDQUxMUywgYWRkZWQgVF9DUkVBVEUsIFRSQUNFX0NDQUxMUyBtYWNyb3MuCisJKyBtb2RpZnkgbWFrZWZpbGVzIGluIHByb2dzIGFuZCB0ZXN0IGRpcmVjdG9yaWVzIHRvIGF2b2lkIHVzaW5nIEMKKwkgIHByZXByb2Nlc3NvciBvcHRpb25zIG9uIGxpbmsgY29tbWFuZHMgKHJlcG9ydGVkIGJ5IFdhcmQgSG9ybmVyKQorCSsgY29ycmVjdCBpZmRlZi9pbmNsdWRlLW9yZGVyIGZvciBuY19hbGxvYy5oIHZzIGxpYl9mcmVlYWxsLmMgKHJlcG9ydGVkCisJICBieSBXYXJkIEhvcm5lcikKKwkrIG1vZGlmeSBpZmRlZidzIHRvIHVzZSBjb25maWd1cmUtZGVmaW5lZCBzeW1ib2xzIGNvbnNpc3RlbnRseQorCSAgKHJlcG9ydGVkIGJ5IFdhcmQgSG9ybmVyKQorCSsgYWRkL3VzZSBuZXcgbWFrZWZpbGUgc3ltYm9scyBBUiwgQVJfT1BUUyBhbmQgTEQgdG8gYXNzaXN0IGluIG5vbi1VTklYCisJICBwb3J0cyAocmVwb3J0ZWQgYnkgV2FyZCBIb3JuZXIgPHdob3JuZXJAdHNpLXRlbHN5cy5jb20+KQorCSsgcmVuYW1lIHN0cnVjdCB0cnkgdG8gc3RydWN0IHRyaWVzLCB0byBhdm9pZCBuYW1lIGNvbmZsaWN0IHdpdGggQysrCisJICAocmVwb3J0ZWQgYnkgR2FyeSBKb2huc29uKS4KKwkrIG1vZGlmeSB3b3JtLmMgdG8gaGlkZSBjdXJzb3Igd2hpbGUgcnVubmluZy4KKwkrIGFkZCAtV2Nhc3QtcXVhbCB0byBnY2Mgd2FybmluZ3MsIGZpeCBhY2NvcmRpbmdseS4KKwkrIHVzZSBQdXRDaGFyIHJhdGhlciB0aGFuIFB1dEF0dHJDaGFyIGluIENsclRvRU9MIHRvIHByb3Blcmx5IGhhbmRsZQorCSAgd3JhcHBpbmcgKEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIGNvcnJlY3Qgc3B1cmlvdXMgZWNob2luZyBvZiBpbnB1dCBpbiBoYW5vaS5jIGZyb20gZXJpYydzICMyOTEgJiAjMjkyCisJICBwYXRjaGVzIChyZXBvcnRlZCBieSBWZXJub24gQy4gSG94aWUgPHZlcm5AemVicmEuYWxwaGFjZGMuY29tPikuCisJKyBleHRlbmQgSVJJWCBjb25maWd1cmF0aW9uIHRvIElSSVg2NAorCSsgc3VwcGx5IG1pc3NpbmcgaW5zdGFsbC5saWJzIHJ1bGUgbmVlZGVkIGFmdGVyIHJlc3RydWN0dXJpbmcKKwkgIHRlc3QvTWFrZWZpbGUuaW4KKworOTcwMjA4CisJKyBtb2RpZnkgIm1ha2UgbW9zdGx5Y2xlYW4iIHRvIGxlYXZlIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHNvdXJjZQorCSAgaW4gdGhlIG5jdXJzZXMgZGlyZWN0b3J5LCBmb3IgdXNlIGluIGNyb3NzLWNvbXBpbGVzLgorCSsgYXV0b2dlbmVyYXRlZCBvYmplY3QtZGVwZW5kZW5jaWVzIGZvciB0ZXN0IGRpcmVjdG9yeQorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLXJjcy1pZHMKKwkrIG1vZGlmeSBjb25maWd1cmF0aW9uIHNjcmlwdHMgdG8gZ2VuZXJhdGUgbWFqb3IvbWlub3IvcGF0Y2ggdmVyc2lvbnMKKwkgIChzdWdnZXN0ZWQgYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgc3VwcGx5IG1pc3NpbmcgdmFfZW5kJ3MgaW4gbGliX3NjYW53LmMKKwkrIHVzZSBzdHJlYW0gSS9PIGZvciB0cmFjZS1vdXRwdXQsIHRvIGVsaW1pbmF0ZSBmaXhlZC1zaXplIGJ1ZmZlcgorCSsgYWRkIFRSQUNFX0lDQUxMUyBkZWZpbml0aW9uL3N1cHBvcnQgdG8gbGliX3RyYWNlLmMKKwkrIG1vZGlmeSBBZGE5NSBiaW5kaW5nIHRvIHdvcmsgd2l0aCBHTkFUIDMuMDkgKEp1ZXJnZW4gUGZlaWZlcikuCisKKzk3MDIwMQorCSsgYWRkL21vZGlmeSB0cmFjZXMgZm9yIGNhbGxlZC9yZXR1cm4gdmFsdWVzIHRvIHNpbXBsaWZ5IGV4dHJhY3Rpb24KKwkgIGZvciB0ZXN0IHNjcmlwdHMuCisJKyBjaGFuZ2VkIF9uY192aXNidWYgdG8gcXVvdGUgaXRzIHJlc3VsdCwgYW5kIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlCisJICB0aGUgcmV0dXJuZWQgYnVmZmVyLgorCSsgaW52b2tlIGxkY29uZmlnIGFmdGVyIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcnkKKwkrIG1vZGlmeSBpbnN0YWxsIHNvIHRoYXQgb3ZlcndyaXRlIGFwcGxpZXMgdG8gc2hhcmVkIGxpYnJhcnkgLWxjdXJzZXMKKwkgIGluIHByZWZlcmVuY2UgdG8gc3RhdGljIGxpYnJhcnkgKHJlcG9ydGVkIGJ5IFpleWQgTSBCZW4tSGFsaW0gOTYwOTI4KS4KKwkrIGNvcnJlY3QgbWlzc2luZyAnOycgaW4gOTYxMjIxIG1vZCB0byBvdmVyd3JpdGUgb3B0aW9uYWwgdXNlIG9mICQoTE5fUykKKwkgIHN5bWJvbC4KKwkrIGZpeGVzIHRvIGFsbG93ICJtYWtlIGluc3RhbGwiIHRvIHdvcmsgd2l0aG91dCBmaXJzdCBkb2luZyBhICJtYWtlCisJICBhbGwiIChzdWdnZXN0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKworOTcwMTI1CisJKyBjb3JyZWN0IG9yZGVyIG9mICNpZmRlZiBmb3IgVEFCU19PSy4KKwkrIGluc3RydW1lbnRlZCB0b2UuYyB0byB0ZXN0IG1lbW9yeS1sZWFrcy4KKwkrIGNvcnJlY3QgbWVtb3J5LWRlYWxsb2NhdGlvbiBpbiB0b2UuYyAocGF0Y2ggYnkgSmVzc2UgVGhpbG8pLgorCSsgaW5jbHVkZSA8c3lzL3R5cGVzLmg+IGluIGNvbmZpZ3VyYXRpb24gdGVzdCBmb3IgcmVnZXguaCAocGF0Y2ggYnkKKwkgIEFuZHJlYXMgU2Nod2FiKQorCSsgbWFrZSBpbmZvY21wIHJlY29nbml6ZSAtSSBvcHRpb24sIGZvciBTVnI0IGNvbXBhdGliaWxpdHkgKHJlcG9ydGVkIGJ5CisJICBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPikKKworOTcwMTE4CisJKyBhZGQgZXh0ZW5zaW9uICd1c2VfZGVmYXVsdF9jb2xvcnMoKScsIG1vZGlmaWVkIHRlc3QgYXBwbGljYXRpb25zIHRoYXQKKwkgIHVzZSBkZWZhdWx0IGJhY2tncm91bmQgKGZpcmV3b3JrLCBnZGMsIGhhbm9pLCBrbmlnaHQsIHdvcm0pIHRvCisJICBkZW1vbnN0cmF0ZS4KKwkrIGNvcnJlY3Qgc29tZSBsaW1pdCBjaGVja3MgaW4gbGliX2RvdXBkYXRlLmMgZXhwb3NlZCB3aGlsZSBydW5uaW5nCisJICB3b3JtLgorCSsgdXNlIHR5cGVDYWxsb2MgbWFjcm8gZm9yIHJlYWRhYmlsaXR5LgorCSsgYWRkL3VzZSBkZWZpbml0aW9uIGZvciBDT05TVCB0byBhY2NvbW1vZGF0ZSB0ZXN0aW5nIHdpdGggU29sYXJpcworCSAgKFNWcjQpIGN1cnNlcywgd2hpY2ggZG9lc24ndCB1c2UgJ2NvbnN0JyBpbiBpdHMgcHJvdG90eXBlcy4KKwkrIG1vZGlmeSBpZmRlZidzIGluIHRlc3QvaGFzaHRlc3QuYyBhbmQgdGVzdC92aWV3LmMgdG8gY29tcGlsZSB3aXRoCisJICBTb2xhcmlzIGN1cnNlcy4KKwkrIG1vZGlmeSBfdHJhY2VkdW1wKCkgdG8gcGFkIHBhZCBjb2xvcnMgJiBhdHRycyBsaW5lcyB0byBtYXRjaCBjaGFuZ2UKKwkgIGluIDk3MDEwMSBzaG93aW5nIGZpcnN0L2xhc3QgY2hhbmdlcy4KKwkrIGNvcnJlY3RlZCBsb2NhdGlvbiBvZiB0ZXJtaW5hdGluZyBudWxsIG9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBmb3JtcworCSAgZmllbGRzIChwYXRjaCBieSBQZXIgRm9yZWJ5KS4KKworOTcwMTExCisJKyBhZGRlZCBoZWFkZXJzIHRvIG1ha2Ugdmlldy5jIGNvbXBpbGUgb24gU0NPIHdpdGggdGhlIHJlc2l6ZXRlcm0oKQorCSAgY29kZSAoaS5lLiwgc3RydWN0IHdpbnNpemUpIC0gdGhvdWdoIHRoaXMgY29tcGlsZXMsIEkgZG9uJ3QgaGF2ZSBhCisJICBzdWl0YWJsZSB0ZXN0IGNvbmZpZ3VyYXRpb24gc2luY2UgU0lHV0lOQ0ggZG9lc24ndCBwYXNzIG15IG5ldHdvcmsgdG8KKwkgIHRoYXQgbWFjaGluZSAtIFQuRGlja2V5LgorCSsgdXBkYXRlIHRlc3QvY29uZmlndXJlLmluIHRvIHN1cHBseSBzb21lIGRlZmF1bHQgc3Vic3RpdHV0aW9ucy4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGFkZCAtbG5jdXJzZXMgYWZ0ZXIgLWxncG0gdG8gZml4IHByb2JsZW0KKwkgIGxpbmtpbmcgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzLgorCSsgYWRkIGEgbWlzc2luZyBub3JhdygpIHRvIHRlc3QvbmN1cnNlcy5jIChwbGFjZXMgbm90ZWQgYnkgSmVyZW15CisJICBCdWhsZXIpCisJKyBhZGQgYSBtaXNzaW5nIHdjbGVhcigpIHRvIHRlc3QvdGVzdGN1cnMuYyAocGF0Y2ggYnkgSmVyZW15IEJ1aGxlcgorCSAgPGpidWhsZXJAY3Mud2FzaGluZ3Rvbi5lZHU+KQorCSsgbW9kaWZ5IGhlYWRlcnMgdG8gYWNjb21tb2RhdGUgY29tcGlsZXJzIHRoYXQgZG9uJ3QgYWxsb3cgZHVwbGljYXRlCisJICAiI2RlZmluZSIgbGluZXMgZm9yIE5DVVJTRVNfVkVSU0lPTiAocmVwb3J0ZWQgYnkgTGFycnkgVy4gVmlyZGVuCisJICA8bHZpcmRlbkBjYXMub3JnPikKKwkrIGZpeCBmb3JtYXR0aW5nIGdsaXRjaCBpbiBjdXJzX2dldGNoLjN4IChwYXRjaCBieSBKZXNzZSBUaGlsbykuCisJKyBtb2RpZnkgbGliX2RvdXBkYXRlIHRvIG1ha2UgZWwsIGVsMSBhbmQgZWQgb3B0aW1pemF0aW9uIHVzZSB0aGUKKwkgIGNhbl9jbGVhcl93aXRoIG1hY3JvLCBhbmQgY2hhbmdlIEVtaXRSYW5nZSB0byBhbGxvdyBsZWF2aW5nIGN1cnNvciBhdAorCSAgdGhlIG1pZGRsZSBvZiBpbnRlcnZhbCwgcmF0aGVyIHRoYW4gYWx3YXlzIGF0IHRoZSBlbmQgKHBhdGNoIGJ5CisJICBBbGV4YW5kZXIgViBMdWt5YW5vdikuICBUaGlzIHdhcyBvcmlnaW5hbGx5IDk2MDkyOSwgcmVzeW5jIDk3MDEwNi4KKworOTcwMTA0CisJKyB3b3JrYXJvdW5kIGRlZmVjdCBpbiBhdXRvY29uZiAyLjEyICh3aGljaCB0ZXJtaW5hdGVzIGNvbmZpZ3VyYXRpb24KKwkgIGlmIG5vIEMrKyBjb21waWxlciBpcyBmb3VuZCkgYnkgYWRkaW5nIGFuIG9wdGlvbiAtLXdpdGhvdXQtY3h4LgorCSsgbW9kaWZ5IHNldmVyYWwgbWFuLXBhZ2VzIHRvIHVzZSB0YmwsIHdoZXJlIC5uZi8uZmkgd2FzIHVzZWQgKHJlcG9ydGVkCisJICBieSBKZXNzZSBUaGlsbykuCisJKyBjb3JyZWN0IGZvbnQtY29kZXMgaW4gc29tZSBtYW4tcGFnZXMgKHBhdGNoIGJ5IEplc3NlIFRoaWxvCisJICA8SmVzc2UuVGhpbG9AcG9ib3guY29tPikKKwkrIHVzZSBjb25maWd1cmUgc2NyaXB0J3Mga25vd2xlZGdlIG9mIGV4aXN0ZW5jZSBvZiBnKysgbGlicmFyeSBmb3IgdGhlCisJICBjKysgTWFrZWZpbGUgKHJlcG9ydGVkIGJ5IFBhdWwgSmFja3NvbikuCisJKyBjb3JyZWN0IG1pc2xlYWRpbmcgZGVzY3JpcHRpb24gb2YgLS1kYXRhZGlyIGNvbmZpZ3VyYXRpb24gb3B0aW9uCisJICAocmVwb3J0ZWQgYnkgUGF1bCBKYWNrc29uIDxwakBzYW0uZW5nci5zZ2kuY29tPikKKworOTcwMTAxCisJKyBzZXZlcmFsIGNvcnJlY3Rpb25zIHRvIF9uY19tdmN1cl9zY3JvbGxuKCksIHByb21wdGVkIGJ5IGEgYnVnIHJlcG9ydAorCSAgZnJvbSBQZXRlciBXZW1tOgorCT4gdGhlIGxvZ2ljIGZvciBub25fZGVzdF9zY3JvbGxfcmVnaW9uIHdhcyBpbnRlcmNoYW5nZWQgYmV0d2VlbiB0aGUKKwkgIGZvcndhcmQgJiByZXZlcnNlIHNjcm9sbGluZyBjYXNlcy4KKwk+IG11bHRpcGxlIHJldHVybnMgZnJvbSB0aGUgZnVuY3Rpb24gYWxsb3dlZCBjZXJ0YWluIGNvbmRpdGlvbnMgdG8gZG8KKwkgIHBhcnQgb2YgYW4gb3BlcmF0aW9uIGJlZm9yZSBkaXNjb3ZlcmluZyB0aGF0IGl0IGNvdWxkbid0IGJlCisJICBjb21wbGV0ZWQsIHJldHVybmluZyBhbiBlcnJvciB3aXRob3V0IHJlc3RvcmluZyB0aGUgY3Vyc29yLgorCT4gc29tZSByZXR1cm5zIHdlcmUgRVJSLCB3aGVyZSB0aGUgZnVuY3Rpb24gaGFkIGNvbXBsZXRlZCB0aGUKKwkgIG9wZXJhdGlvbiwgYmVjYXVzZSB0aGUgaW5zZXJ0L2RlbGV0ZSBsaW5lIGxvZ2ljIHdhcyBpbXByb3Blcmx5CisJICB0ZXN0ZWQgKHRoaXMgd2FzIHByb2JhYmx5IHRoZSBjYXNlIFBldGVyIHNhdykuCisJPiBjb250cmFyeSB0byBjb21tZW50cywgc29tZSBzY3JvbGxpbmcgY2FzZXMgd2VyZSB0ZXN0ZWQgYWZ0ZXIgdGhlCisJICBpbnNlcnQvZGVsZXRlIGxpbmUgbWV0aG9kLgorCSsgbW9kaWZ5IF90cmFjZWR1bXAoKSB0byBzaG93IGZpcnN0L2xhc3QgY2hhbmdlcy4KKwkrIG1vZGlmeSBwYXJhbSBvZiBDbHJVcGRhdGUoKSBpbiBsaWJfZG91cGRhdGUuYyB0byAnbmV3c2NyJywgZml4ZXMKKwkgIHJlZnJlc2ggcHJvYmxlbSAocmVwb3J0ZWQgYnkgUGV0ZXIgV2VtbSkgdGhhdCBjYXVzZWQgbnZpIHRvIG5vdCBzaG93CisJICByZXN1bHQgb2YgIjpyICFscyIgdW50aWwgYSBeTCB3YXMgdHlwZWQuCisKKzk2MTIyOQkoaW50ZXJuYWwgYWxwaGEpCisJKyBjb3JyZWN0IHNvbWUgb2YgdGhlIHdyaXRhYmxlLXN0cmluZ3Mgd2FybmluZ3MgKHJlcG9ydGVkIGJ5IEdhcnkKKwkgIEpvaG5zb24gPGdqb2huc29uQHNlYXNvbi5jb20+KS4gIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSByZW1haW5pbmcgb25lcworCSAgYXJlIHBhcnQgb2YgdGhlIFhTSSBzcGVjaWZpY2F0aW9uLCBhbmQgY2FuJ3QgYmUgImZpeGVkIi4KKwkrIGltcHJvdmUgaW5jbHVkZS1kZXBlbmRlbmNpZXMgaW4gZm9ybSwgbWVudSwgcGFuZWwgZGlyZWN0b3JpZXMuCisJKyBjb3JyZWN0IGxvZ2ljIG9mIGRlbGF5X291dHB1dCgpLCB3aGljaCB3b3VsZCByZXR1cm4gZWFybHkgaWYKKwkgIHRoZXJlIGlzIGRhdGEgb24gc3RkaW4uCisJKyBtb2RpZnkgaW50ZXJmYWNlICYgbG9naWMgb2YgX25jX3RpbWVkX3dhaXQoKSB0byBzdXBwb3J0IDIgZmlsZQorCSAgZGVzY3JpcHRvcnMsIG5lZWRlZCBmb3IgR1BNLgorCSsgaW50ZWdyYXRlIHBhdGNoIGJ5IEFuZHJldyBLdWNobGluZyA8YW1rQG1hZ25ldC5jb20+IGZvciBHUE0gKG1vdXNlKQorCSAgc3VwcG9ydCwgY29ycmVjdGluZyBsb2dpYyBpbiB3Z2V0Y2goKSBhbmQgX25jX21vdXNlX3BhcnNlKCkgd2hpY2gKKwkgIHByZXZlbnRlZCBwYXRjaCBmcm9tIHdvcmtpbmcgcHJvcGVybHkgLVRECisJKyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHBhbmVsIGFsZ29yaXRobSAoSnVlcmdlbiBQZmVpZmVyIDk2MTIwMykuCisJKyBzdHJpcCBSQ1MgaWQncyBmcm9tIGdlbmVyYXRlZCAuaHRtbCBmaWxlcyBpbiBBZGE5NSBzdWJ0cmVlLgorCSsgcmVzeW5jIHdpdGggZ2VuZXJhdGVkIC5odG1sIGZpbGVzIChKdWVyZ2VuIFBmZWlmZXIgOTYxMjIzKS4KKwkrIHRlcm1pbmZvLnNyYyAxMC4xLjAgKEVTUikuCisKKzk2MTIyNAk0LjAgcmVsZWFzZQorCSsgcmVsZWFzZSBhcyA0LjAgdG8gYWNjb21tb2RhdGUgTGludXggbGQuc28uMS44LjUKKwkrIGNvcnJlY3Qgc3ludGF4L3NwZWxsaW5nLCByZWdlbmVyYXRlZCAuZG9jIGZpbGVzIGZyb20gLmh0bWwgdXNpbmcKKwkgIGx5bnggMi41CisJKyByZWZpbmVkIGZvcm1zL21lbnVzIG1ha2VmaWxlcyAoSnVlcmdlbiBQZmVpZmVyIDk2MTIyMykuCisKKzk2MTIyMQktIHNuYXBzaG90CisJKyByZW1vdmUgbG9naWMgaW4gcmVhZF9lbnRyeS5jIHRoYXQgYXR0ZW1wdHMgdG8gcmVmaW5lIGVycm5vIGJ5IHVzaW5nCisJICAnYWNjZXNzKCknIGZvciB0aGUgZGlyZWN0b3J5IChmcm9tIHBhdGNoIGJ5IEZsb3JpYW4gTGEgUm9jaGUpLgorCSsgY29ycmVjdCBjb25maWd1cmUgdGVzdC9zdWJzdGl0dXRpb24gdGhhdCBpbmhpYml0cyBnZW5lcmF0aW5nCisJICBpbmNsdWRlLXBhdGggdG8gL3Vzci9pbmNsdWRlIGlmIGdjYyBpcyB1c2VkIChyZXBvcnRlZCBieSBGbG9yaWFuIExhCisJICBSb2NoZSkuCisJKyBtb2RpZnkgc2V0dXB0ZXJtKCkgdG8gYWxsb2NhdGUgbmV3IFRFUk1JTkFMIGZvciBlYWNoIGNhbGwsIGp1c3QgYXMKKwkgIHNvbGFyaXMnIGN1cnNlcyBkb2VzIChBbGV4YW5kZXIgViBMdWt5YW5vdiA5NjA4MjkpLgorCSsgY29ycmVjdGVkIG1lbW9yeSBsZWFrcyBpbiByZWFkX2VudHJ5LmMKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9ucyAtLXdpdGgtZGJtYWxsb2MsIC0td2l0aC1kbWFsbG9jLCBhbmQKKwkgIC0tZGlzYWJsZS1sZWFrcywgdGVzdGVkIGJ5IGluc3RydW1lbnRpbmcgaW5mb2NtcCwgbmN1cnNlcyBwcm9ncmFtcy4KKwkrIG1vdmUgI2luY2x1ZGUncyBmb3Igc3RkbGliLmggYW5kIHN0cmluZy5oIHRvICoucHJpdi5oIHRvIGFjY29tbW9kYXRlCisJICB1c2Ugb2YgZGJtYWxsb2MuCisJKyBtb2RpZnkgdXNlIG9mICQoTE5fUykgdG8gZm9sbG93IHJlY29tbWVuZGF0aW9uIGluIGF1dG9jb25mIDIuMTIsCisJICBpLmUuLCBzZXQgY3VycmVudCBkaXJlY3RvcnkgYmVmb3JlIGxpbmtpbmcuCisJKyBzcGxpdC1vdXQgcGFuZWwucHJpdi5oLCBpbXByb3ZlIGRlcGVuZGVuY2llcyBmb3IgZm9ybXMsIG1lbnVzCisJICAoSnVlcmdlbiBQZmVpZmVyIDk2MTIwNCkuCisJKyBtb2RpZnkgX25jX2ZyZWV3aW4oKSB0byByZXNldCBnbG9iYWxzIGN1cnNjci9uZXdzY3Ivc3Rkc2NyIHdoZW4KKwkgIGZyZWVpbmcgdGhlIGNvcnJlc3BvbmRpbmcgV0lORE9XIChmb3VuZCB1c2luZyBQdXJpZnkpLgorCSsgbW9kaWZ5IGRlbHdpbigpIHRvIHJldHVybiBFUlIgaWYgdGhlIHdpbmRvdyB0byBiZSBkZWxldGVkIGhhcworCSAgc3Vid2luZG93cywgbmVlZGVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgcmVzaXpldGVybSgpIChmb3VuZCB1c2luZworCSAgUHVyaWZ5KS4gIFRlc3RlZCBhbmQgZm91bmQgdGhhdCBTVnI0IGN1cnNlcyBiZWhhdmVzIHRoaXMgd2F5LgorCSsgaW1wbGVtZW50IGxvZ2ljIGZvciBfbmNfZnJlZWFsbCgpLCBicmluZ2luZyBzdHViIHVwIHRvIGRhdGUuCisKKzk2MTIxNQorCSsgbW9kaWZ5IHdia2dkKCkgc28gdGhhdCBpdCBkb2Vzbid0IHNldCBudWxscyBpbiB0aGUgcmVuZGVyZWQgdGV4dCwKKwkgIGV2ZW4gaWYgaXRzIGFyZ3VtZW50IGRvZXNuJ3Qgc3BlY2lmeSBhIGNoYXJhY3RlciAoZml4ZXMgdGVzdCBjYXNlIGJ5CisJICBKdWVyZ2VuIFBmZWlmZXIgZm9yIGJ1Zy1yZXBvcnQpLgorCSsgc2V0IHdpbmRvdy1hdHRyaWJ1dGVzIGluIHdia2dkKCksIHRvIHNpbXBsaWZ5IGNvbXBhcmlzb24gYWdhaW5zdAorCSAgU29sYXJpcyBjdXJzZXMsIHdoaWNoIGRvZXMgdGhpcy4KKworOTYxMjE0CS0gc25hcHNob3QKKwkrIHJlcGxhY2UgbW9zdCBjb25zdGFudHMgaW4gbmN1cnNlcyAnbycgdGVzdCBieSBleHByZXNzaW9ucywgbWFraW5nIGl0CisJICB3b3JrIHdpdGggd2lkZXIgcmFuZ2Ugb2Ygc2NyZWVuIHNpemVzLgorCSsgYWRkIG9wdGlvbnMgdG8gbmN1cnNlcy5jIHRvIHNwZWNpZnkgJ2UnIHRlc3Qgc29mdGtleSBmb3JtYXQsIGFuZCB0aGUKKwkgIG51bWJlciBvZiBoZWFkZXIvZm9vdGVyIGxpbmVzIHRvIHJpcC1vZmYuCisJKyBhZGQgXlIgKHJlcGFpbnQgYWZ0ZXIgcmVzaXplKSwgXkwgKHJlZnJlc2gpIGNvbW1hbmRzIHRvIG5jdXJzZXMgJ3AnCisJICB0ZXN0LgorCSsgYWRkIHNoZWxsLW91dCAoISkgY29tbWFuZCB0byBuY3Vyc2VzICdwJyB0ZXN0IHRvIGFsbG93IHRlc3Qgb2YKKwkgIHJlc2l6ZSBiZXR3ZWVuIGVuZHdpbi9yZWZyZXNoLgorCSsgY29ycmVjdCBsaW5lLXdyYXAgY2FzZSBpbiBtdmN1cigpIGJ5IGVtaXR0aW5nIGNhcnJpYWdlIHJldHVybiwKKwkgIG92ZXJsb29rZWQgaW4gOTYwOTI4LCBidXQgbmVlZGVkIGR1ZSB0byBTVnI0IGNvbXBhdGliaWxpdHkgY2hhbmdlcyB0bworCSAgdGVybWluYWwgbW9kZXMgaW4gOTYwOTA3LgorCSsgY29ycmVjdCBsb2dpYyBpbiB3cmVzaXplIHRoYXQgY2F1c2VzIG5ldyBsaW5lcyB0byBiZSBhbGxvY2F0ZWQsCisJICBicm9rZW4gZm9yIHRoZSBzcGVjaWFsIGNhc2Ugb2YgaW5jcmVhc2luZyByb3dzIG9ubHkgaW4gOTYwOTA3J3MgZml4CisJICBmb3Igc3Vid2luZG93cy4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGdlbmVyYXRlICQoTERGTEFHUykgd2l0aCAtTCBhbmQgLWwgb3B0aW9ucworCSAgaW4gcHJlZmVyZW5jZSB0byBleHBsaWNpdCBsaWJyYXJ5IGZpbGVuYW1lcy4gIChOT1RFOiB0aGlzIG1heQorCSAgcmVxdWlyZSBmdXJ0aGVyIGFtZW5kaW5nLCBzaW5jZSBJIHZhZ3VlbHkgcmVjYWxsIGEgZHluYW1pYyBsb2FkZXIKKwkgIHRoYXQgZGlkIG5vdCB3b3JrIHByb3Blcmx5IHdpdGhvdXQgdGhlIGZ1bGwgbmFtZXMsIGJ1dCBpdCBzaG91bGQgYmUKKwkgIGhhbmRsZWQgYXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlLCBzaW5jZSBzb21lIGxpbmtlcnMgZG8gYnVsaworCSAgaW5jbHVzaW9uIG9mIGxpYnJhcmllcyB3aGVuIGdpdmVuIHRoZSBmdWxsIG5hbWUgLSBULkRpY2tleSkuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhbGxvdyB1c2VyLXN1cHBsaWVkICRDRkxBR1MgdG8gc2V0IHRoZQorCSAgZGVidWctb3B0aW9uIGluIGFsbCBsaWJyYXJpZXMgKHJlcXVlc3RlZCBieSBsb3RzIG9mIHBlb3BsZSkgLVRECisJKyB1c2UgcmV0dXJuIGNvbnNpc3RlbnRseSBmcm9tIG1haW4oKSwgcmF0aGVyIHRoYW4gZXhpdCAocmVwb3J0ZWQgYnkKKwkgIEZsb3JpYW4gTGEgUm9jaGUpLgorCSsgYWRkIC0tZW5hYmxlLWdldGNhcC1jYWNoZSBvcHRpb24gdG8gY29uZmlndXJlLCBub3JtYWxseSBkaXNhYmxlZAorCSAgKHJlcXVlc3RlZCBieSBGbG9yaWFuIExhIFJvY2hlKS4KKwkrIG1ha2UgY29uZmlndXJlIHRlc3QgZm9yIGdldHRpbWVvZmRheSgpIGFuZCBwb3NzaWJseSAtbGJzZCBtb3JlCisJICBlZmZpY2llbnQgKHJlcXVlc3RlZCBieSBGbG9yaWFuIExhIFJvY2hlIDxmbG9yaWFuQGtub3JrZS5zYWFyLmRlPikKKwkrIG1pbm9yIGFkanVzdG1lbnRzIHRvIEFkYTk1IGJpbmRpbmcgKHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyKQorCSsgY29ycmVjdCBhdHRyaWJ1dGVzIGFmdGVyIGVtaXR0aW5nIG9yaWdfcGFpciBpbiBsaWJfdmlkYXR0ci5jIChwYXRjaAorCSAgYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCis5NjEyMDgKKwkrIGNvcnJlY3RlZCBSRUFETUUgd3J0IEFkYTk1IChKdWVyZ2VuIFBmZWlmZXIpCisKKzk2MTIwNwktIHNuYXBzaG90CisJKyBpbnRlZ3JhdGUgcmVzaXpldGVybSgpIGludG8gZG91cGRhdGUoKSwgc28gdGhhdCBpZiBzY3JlZW4gc2l6ZQorCSAgY2hhbmdlcyBiZXR3ZWVuIGVuZHdpbi9yZWZyZXNoLCBuY3Vyc2VzIHdpbGwgcmVzaXplIHdpbmRvd3MgdG8gZml0CisJICAodGhpcyBuZWVkcyBhZGRpdGlvbmFsIHRlc3Rpbmcgd2l0aCBwYWRzIGFuZCBzb2Z0a2V5cykuCisJKyBhZGQsIGZvciBtZW1vcnktbGVhayB0ZXN0aW5nLCBfbmNfZnJlZWFsbCgpIGVudHJ5cG9pbnQgdG8gZnJlZSBhbGwKKwkgIGRhdGEgdXNlZCBpbiBuY3Vyc2VzIGxpYnJhcnkuCisJKyBpbml0aWFsaXplIF9uY19pZGNvaywgX25jX2lkbG9rIHN0YXRpY2FsbHkgdG8gcmVzb2x2ZSBkaXNjcmVwYW5jeQorCSAgYmV0d2VlbiBpbml0c2NyKCkgYW5kIG5ld3dpbigpIGluaXRpYWxpemF0aW9uIChyZXBvcnRlZCBieQorCSAgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgdGVzdCBidWlsdCBWRVJTSU9OPTQuMCwgU0hBUkVEX0FCST00IHdpdGggTGludXggbGQuc28uMS44LjUKKwkgIChzZXQgYmV0YSB2ZXJzaW9ucyB0byB0aG9zZSB2YWx1ZXMgLS0gTk9URSB0aGF0IHN1YnNlcXVlbnQgcHJlLTQuMAorCSAgYmV0YSBtYXkgbm90IGJlIGludGVyY2hhbmdlYWJsZSkuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byB3b3JrIHdpdGggYXV0b2NvbmYgMi4xMgorCis5NjExMzAJMS45LjlnIHJlbGVhc2UKKwkrIGFkZCBjb3B5cmlnaHQgbm90aWNlcyB0byBjb25maWd1cmF0aW9uIHNjcmlwdHMgKHdyaXR0ZW4gYnkgVGhvbWFzCisJICBEaWNrZXkpLgorCis5NjExMjcKKwk+IHBhdGNoLCBtb3N0bHkgZm9yIHBhbmVsIChKdWVyZ2VuIFBmZWlmZXIpOgorCSsgY29zbWV0aWMgaW1wcm92ZW1lbnQgZm9yIGEgZmV3IHJvdXRpbmVzIGluIHRoZSBuY3Vyc2VzIGNvcmUgbGlicmFyeQorCSAgdG8gYXZvaWQgd2FybmluZyBtZXNzYWdlcy4KKwkrIHRoZSBwYW5lbCBvdmVybGFwIGRldGVjdGlvbiB3YXMgYnJva2VuCisJKyB0aGUgcGFuZWxfd2luZG93KCkgZnVuY3Rpb24gd2FzIG5vdCBmb29sLXByb29mLgorCSsgU29tZSBpbmxpbmluZy4uLgorCSsgQ29zbWV0aWMgY2hhbmdlcyAoYWxzbyB0byBhdm9pZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gY29tcGlsaW5nIHdpdGgKKwkgIC1EVFJBQ0UpLgorCis5NjExMjYKKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGVsaW1pbmF0ZXMgd2FybmluZyBtZXNzYWdlcyBmb3IgdGhlIGNvbXBpbGUgb2YgbGliZm9ybS4KKwkrIGluc2VydHMgUGVyIEZvcmVieSdzIG5ldyBmaWVsZCB0eXBlIFRZUEVfSVBWNCBpbnRvIGxpYmZvcm0uCisJKyBVcGRhdGVzIG1hbiBwYWdlIGFuZCB0aGUgQWRhOTUgYmluZGluZyB0byByZWZsZWN0IHRoaXMuCisJKyBJbXByb3ZlcyBpbmxpbmluZyBpbiBsaWJtZW51IGFuZCBsaWJmb3JtLgorCis5NjExMjAKKwkrIGltcHJvdmUgdGhlIHVzZSBvZiB0aGUgImNvbnN0IiBxdWFsaWZpZXIgaW4gdGhlCisJICBwYW5lbCBsaWJyYXJ5IChKdWVyZ2VuIFBmZWlmZXIpCisJKyBjaGFuZ2Ugc2V0X3BhbmVsX3VzZXJwdHIoKSBhbmQgcGFuZWxfdXNlcnB0cigpIHRvIHVzZSB2b2lkKgorCSAgKEp1ZXJnZW4gUGZlaWZlcikKKworOTYxMTE5CisJKyBjaGFuZ2UgQUJJIHRvIDMuNAorCSsgcGFja2FnZSB3aXRoIDk2MTExOSB2ZXJzaW9uIG9mIEFkYTk1IGJpbmRpbmcgKGZpeGVzIGZvciBnbmF0LTMuMDcpLgorCSAgKEp1ZXJnZW4gUGZlaWZlcikKKwkrIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0ZHNjciBwc2V1ZG8gcGFuZWwgaW4gcGFuZWwgbGlicmFyeQorCSAgKEp1ZXJnZW4gUGZlaWZlcikKKwkrIHVzZSBNT0RVTEVfSUQgKHJjcyBrZXl3b3JkcykgaW4gZm9ybXMgYW5kIG1lbnVzIGxpYnJhcmllcyAoSnVlcmdlbgorCSAgUGZlaWZlcikuCisJPiBwYXRjaCAjMzI0IChFU1IpOgorCSsgdHlwbyBpbiBjdXJzX3Rlcm1jYXAgbWFuIHBhZ2UgKHJlcG9ydGVkIGJ5IEhlbmRyaWsgUmVpY2hlbAorCSAgPDEwNjA2NS4yMzQ0QGNvbXB1c2VydmUuY29tPikKKwkrIGNoYW5nZSBkZWZhdWx0IHh0ZXJtIGVudHJ5IHRvIHh0ZXJtLXI2LgorCSsgYWRkIGVudHJ5IGZvciBjb2xvcl94dGVybQorCis5NjExMTYJLSBzbmFwc2hvdAorCSsgbGludCBmb3VuZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IGhhZCBvbmx5ICNkZWZpbmUgaW1wbGVtZW50YXRpb25zCisJICAoZS5nLiwgYXR0cl9vZmYpLCBtb2RpZmllZCBjdXJzZXMuaC5pbiB0byBnZW5lcmF0ZSB0aGVtIGFzIHBlciBYU0kKKwkgIEN1cnNlcyByZXF1aXJlbWVudCB0aGF0IGV2ZXJ5IG1hY3JvIGJlIGF2YWlsYWJsZSBhcyBhIGZ1bmN0aW9uLgorCSsgYWRkIGNoZWNrIGluIGluZm9jbXAuYyB0byBndWFyZCBhZ2FpbnN0IHN0cmluZyBjb21wYXJlIG9mCisJICBDQU5DRUxMRURfU1RSSU5HIHZhbHVlcy4KKwkrIG1vZGlmeSBmaXJld29yay5jLCByYWluLmMgdG8gaGlkZSBjdXJzb3Igd2hpbGUgcnVubmluZy4KKwkrIGNvcnJlY3QgbWlzc2luZyB2YV9lbmQgaW4gbGliX3RwYXJtLmMKKwkrIG1vZGlmeSBoYW5vaS5jIHRvIHdvcmsgb24gbm9uLWNvbG9yIHRlcm1pbmFscywgYW5kIHRvIHVzZSB0aW1pbmcKKwkgIGRlbGF5cyB3aGVuIGluIGF1dG9wbGF5IG1vZGUuCisJKyBjb3JyZWN0ICdlY2hvY2hhcigpJyB0byByZWZyZXNoIGltbWVkaWF0ZWx5IChyZXBvcnRlZCBieSBBZHJpYW4KKwkgIEdhcnNpZGUgPDk0YWpnMkBlbmcuY2FtLmFjLnVrPikKKwk+IHBhdGNoICMzMjIgKEVTUik6CisJKyByZW9yZ2FuaXplIHRlcm1pbmZvLnNyYyBlbnRyaWVzIGZvciB4dGVybS4KKworOTYxMTA5CS0gc25hcHNob3QKKwkrIGNvcnJlY3RlZCBlcnJvciBpbiBsaW5lLWJyZWFrb3V0IGxvZ2ljIChsaWJfZG91cGRhdGUuYykKKwkrIG1vZGlmaWVkIG5ld2RlbW8gdG8gdXNlIHdnZXRjaCh3aW4pIHJhdGhlciB0aGFuIGdldGNoKCkgdG8gZWxpbWluYXRlCisJICBhIHNwdXJpb3VzIGNsZWFyLXNjcmVlbi4KKwkrIGNvcnJlY3RlZCBpZmRlZidzIGZvciAncG9sbCgpJyBjb25maWd1cmF0aW9uLgorCSsgYWRkZWQgbW9kdWxlcyB0byBuY3Vyc2VzLCBmb3JtLCBtZW51IGZvciBBZGE5NSBiaW5kaW5nIChKdWVyZ2VuCisJICBQZmVpZmVyKS4KKwkrIG1vZGlmeSBzZXRfZmllbGRfYnVmZmVyKCkgdG8gYWxsb3cgYXNzaWdubWVudCBvZiBzdHJpbmcgbG9uZ2VyIHRoYW4KKwkgIHRoZSBpbml0aWFsIGJ1ZmZlciBsZW5ndGgsIGFuZCB0byByZXR1cm4gdGhlIGNvbXBsZXRlIHN0cmluZyByYXRoZXIKKwkgIHRoYW4gb25seSB0aGUgaW5pdGlhbCBzaXplIChKdWVyZ2VuIFBmZWlmZXIgYW5kIFBlciBGb3JlYnkKKwkgIDxwZXJmQGVmZC5sdGguc2U+KS4KKworOTYxMTAyCS0gc25hcHNob3QKKwkrIGNvbmZpZ3VyZSBmb3IgJ3BvbGwoKScgaW4gcHJlZmVyZW5jZSB0byAnc2VsZWN0KCknLCBzaW5jZSBvbGRlcgorCSAgc3lzdGVtcyBhcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSBhIGJyb2tlbiAnc2VsZWN0KCknLgorCSsgbW9kaWZpZWQgcmVuZGVyX2NoYXIoKSB0byBhdm9pZCBPUidpbmcgY29sb3JzLgorCSsgbWlub3IgZml4ZXMgdG8gdGVzdGN1cnMuYywgbmV3ZGVtby5jIHRlc3QgcHJvZ3JhbXM6IGlmZGVmJ2Qgb3V0IHRoZQorCSAgcmVzaXplIHRlc3QsIHVzZSB3YmtnZCBhbmQgY29ycmVjdGVkIGJveCgpIHBhcmFtZXRlcnMuCisJKyBtYWtlIGZsdXNoaW5wKCkgdGVzdCB3b3JrIGluIG5jdXJzZXMuYyBieSB1c2luZyBuYXBtcygpIGluc3RlYWQgb2YKKwkgIHNsZWVwKCkuCisJKyB1bmRvIEVTUidzIGNoYW5nZXMgdG8geHRlcm0teDExcjYgKGl0IG5vIGxvbmdlciBtYXRjaGVkIHRoZSBYMTFSNi4xCisJICBkaXN0cmlidXRpb24sIGFzIHN0YXRlZCkKKwkrIHRlcm1pbmZvIDkuMTMuMTggcmVzeW5jIChFU1IpCisJKyBjaGVjayBmb3IgZ2V0ZW52KCJIT01FIikgcmV0dXJuaW5nIG51bGwgKEVTUikuCisJKyBjaGFuZ2UgYnVmZmVyIHVzZWQgdG8gZGVjb2RlIHh0ZXJtLW1vdXNlIGNvbW1hbmRzIHRvIHVuc2lnbmVkIHRvCisJICBoYW5kbGUgZGlzcGxheXMgd2lkZXIgdGhhbiAxMjggY2hhcnMgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0IHR5cG8gY3Vyc19vdXRvcHRzLjN4IChKdWVyZ2VuIFBmZWlmZXIpLgorCSsgY29ycmVjdCBsaW1pdC1jaGVja2luZyBpbiB3ZW5jbG9zZSgpIChKdWVyZ2VuIFBmZWlmZXIpLgorCSsgY29ycmVjdGlvbiB0byBQZXRlciBXZW1tJ3MgbmV3d2luIGNoYW5nZSAoVGhvbWFzIEZlaHIKKwkgIDxmZWhyQHN1c2UuZGU+KS4KKwkrIGNvcnJlY3Rpb25zIHRvIGxvZ2ljIHRoYXQgY29tYmluZXMgY29sb3JzIGFuZCBhdHRyaWJ1dGVzOyB0aGV5IG11c3QKKwkgIG5vdCBiZSBPUidkIChKdWVyZ2VuIFBmZWlmZXIsIGV4dGVuZGluZyBmcm9tIHJlcG9ydC9wYXRjaCBieSBSaWNrCisJICBNYXJzaGFsbCkuCisKKzk2MTAyNgktIHNuYXBzaG90CisJKyByZXNldCBmbGFncyBpbiAnZ2V0d2luKCknIHRoYXQgbWlnaHQgY2F1c2UgcmVmcmVzaCB0byBhdHRlbXB0IHRvCisJICBtYW5pcHVsYXRlIHRoZSBub24tZXhpc3RlbnQgcGFyZW50IG9mIGEgd2luZG93IHRoYXQgaXMgcmVhZCBmcm9tIGEKKwkgIGZpbGUgKGxpYl9zY3JlZW4uYykuCisJKyByZXN0cnVjdHVyZSBfbmNfdGltZWRfd2FpdCgpIHRvIGxvZyBtb3JlIGluZm9ybWF0aW9uLCBhbmQgdG8gdHJ5IHRvCisJICByZWNvdmVyIGZyb20gYmFkbHktYmVoYXZlZCAnc2VsZWN0KCknIGNhbGxzIChzdGlsbCB0ZXN0aW5nIHRoaXMpLgorCSsgbW92ZSBkZWZpbmUgZm9yIEdPT0RfU0VMRUNUIGludG8gY29uZmlndXJlIHNjcmlwdC4KKwkrIGNvcnJlY3RlZCBleHRyYSAnXCcgY2hhcmFjdGVyIGluc2VydGVkIGJlZm9yZSAnLCcgaW4gY29tcF9zY2FuLmMKKwkrIGNvcnJlY3RlZCBleHBhbnNpb24gb2YgJS1mb3JtYXQgY2hhcmFjdGVycyBpbiBkdW1wX2VudHJ5LmM7IHNvbWUgd2VyZQorCSAgcmVuZGVyZWQgYXMgb2N0YWwgY29uc3RhbnRzLgorCSsgbW9kaWZ5IGR1bXBfZW50cnkuYyB0byBtYWtlIHRlcm1pbmZvIG91dHB1dCBtb3JlIHJlYWRhYmxlIGFuZCBsaWtlCisJICBTVnI0LCBieSB1c2luZyAiXHMiIGZvciBzcGFjZXMgKGxlYWRpbmcvdHJhaWxpbmcgb25seSksICJcLCIgZm9yCisJICBjb21tYSwgIlxeIiBhbmQgIlw6IiBhcyB3ZWxsLgorCSsgY29ycmVjdGVkIHNvbWUgbWVtb3J5IGxlYWtzIGluIG5jdXJzZXMuYywgYW5kIGEgbWlub3IgbG9naWMgZXJyb3IKKwkgIGluIHRoZSB0b3AtbGV2ZWwgY29tbWFuZC1wYXJzZXIuCisJKyBjb3JyZWN0aW9uIGZvciBsYWJlbCBmb3JtYXQgNCAoUEMgc3R5bGUgd2l0aCBpbmZvIGxpbmUpLCBhCisJICBzbGtfY2xlYXIoKSwgc2xrX3Jlc3RvcmUoKSBzZXF1ZW5jZSBkaWRuJ3QgcmVkcmF3IHRoZSBpbmZvIGxpbmUKKwkgIChKdWVyZ2VuIFBmZWlmZXIpLgorCSsgbW9kaWZpZWQgdGhlIHNsayB3aW5kb3cgKGlmIHNpbXVsYXRlZCkgdG8gaW5oZXJpdCB0aGUgYmFja2dyb3VuZCBhbmQKKwkgIGRlZmF1bHQgY2hhcmFjdGVyIGF0dHJpYnV0ZXMgZnJvbSBzdGRzY3IgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0ZWQgbGltaXQtY2hlY2sgaW4gc2V0X3RvcF9yb3cgKEp1ZXJnZW4gUGZlaWZlcikuCisKKzk2MTAxOQktIHNuYXBzaG90CisJKyBjb3JyZWN0IGxvb3AtbGltaXQgaW4gd25vdXRyZWZyZXNoKCksIGJ1ZyBleHBvc2VkIGR1cmluZyBwaXBlLXRlc3RpbmcKKwkgIGhhZCAnLmxhc3RjaGFyJyBlbnRyeSBvbmUgYmV5b25kICcuX21heHgnLgorCSsgbW9kaWZ5IG5jdXJzZXMgdGVzdC1wcm9ncmFtIHRvIHdvcmsgd2l0aCBkYXRhIHBpcGVkIHRvIGl0LgorCSsgY29ycmVjdGVkIHBhdGhuYW1lIGNvbXB1dGF0aW9uIGluIHJ1bl90aWMuc2gsIHJlbW92aW5nIGV4dHJhICIuLi8iCisJICAocmVwb3J0ZWQgYnkgVGltIE1vb25leSkuCisJKyBtb2RpZmllZCBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBwcmV2aW91cyBpbnN0YWxsJ3MgbG9jYXRpb24gZm9yCisJICBjdXJzZXMuaAorCSsgYWRkZWQgTmV0QlNEIGFuZCBGcmVlQlNEIHRvIHBsYXRmb3JtcyB0aGF0IHVzZSAtLXByZWZpeD0vdXNyIGFzCisJICBhIGRlZmF1bHQuCisKKzk2MTAxMworCSsgcmV2aXNlZCB4dGVybSB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgdG8gcmVmbGVjdCB0aGUgc2V2ZXJhbCB2ZXJzaW9ucworCSAgdGhhdCBhcmUgYXZhaWxhYmxlLgorCSsgY29ycmVjdGVkIGEgcG9pbnRlciByZWZlcmVuY2UgaW4gZHVtcF9lbnRyeS5jIHRoYXQgZGlkbid0IHRlc3QgaWYKKwkgIHRoZSBwb2ludGVyIHdhcyAtMS4KKworOTYxMDA1CS0gc25hcHNob3QKKwkrIGNvcnJlY3QgX25jX212Y3VyX3Njcm9sbG4gZm9yIHRlcm1pbmFscyB3L28gc2Nyb2xsaW5nIHJlZ2lvbi4KKwkrIGFkZCAteCBvcHRpb24gdG8gaGFzaHRlc3QgdG8gY29udHJvbCB3aGV0aGVyIGl0IGFsbG93cyB3cml0ZXMgdG8gdGhlCisJICBsb3dlci1yaWdodCBjb3JuZXIuCisJKyBpZmRlZidkIChOQ1VSU0VTX1RFU1QpIHRoZSBsb2dpYyBmb3IgX25jX29wdGltaXplX2VuYWJsZSB0byBtYWtlIGl0CisJICBzaW1wbGVyIHRvIGNvbnN0cnVjdCB0ZXN0cyAoZm9yIGRvdWJsZS1jaGVjayBvZiBfbmNfaGFzaF9tYXAgdGVzdHMpLgorCSsgY29ycmVjdCBpZmRlZidzIGZvciBjKysgaW4gY3Vyc2VzLmgKKwkrIGNoYW5nZSBkZWZhdWx0IHh0ZXJtIHR5cGUgdG8geHRlcm0teDExcjYuCisJKyBjb3JyZWN0IHF1b3RpbmcgaW4gY29uZmlndXJlIHRoYXQgbWFkZSBtYW4tcGFnZXMgaW5zdGFsbGVkIHdpdGgKKwkgICRkYXRhZGlyIGluc3RlYWQgb2YgYWN0dWFsIHRlcm1pbmZvIHBhdGguCisJKyBjb3JyZWN0IHdoaXRlc3BhY2UgaW4gaW5jbHVkZS9DYXBzLCB3aGljaCBjYXVzZWQga2YxMSwgY2xyX2VvbCBhbmQKKwkgIGNscl9lbmQgdG8gYmUgb21pdHRlZCBmcm9tIHRlcm1pbmZvLjUKKwkrIGZpeCBtZW1vcnkgbGVha3MgaW4gZGVsc2NyZWVuKCkgKGFkYXB0ZWQgZnJvbSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBpbXByb3ZlIGFwcGVhcmFuY2Ugb2YgbWFya2VyIGluIG11bHRpLXNlbGVjdGlvbiBtZW51IChKdWVyZ2VuCisJICBQZmVpZmVyKQorCSsgZml4IGJlaGF2aW9yIGZvciBmb3JtcyB3aXRoIGFsbCBmaWVsZHMgaW5hY3RpdmUgKEp1ZXJnZW4gUGZlaWZlcikKKwkrIGRvY3VtZW50ICdmaWVsZF9pbmRleCgpJyAoSnVlcmdlbiBQZmVpZmVyKQorCT4gcGF0Y2ggIzMyMSAoRVNSKToKKwkrIGFkZCBzb21lIG1vcmUgWEVOSVgga2V5Y2FwIHRyYW5zbGF0aW9ucyB0byBpbmNsdWRlL0NhcHMuCisJKyBtb2RpZnkgbmV3d2luIHRvIHNldCBpbml0aWFsIHN0YXRlIG9mIGVhY2ggbGluZSB0byAndG91Y2hlZCcKKwkgIChmcm9tIHBhdGNoIGJ5IFBldGVyIFdlbW0gPHBldGVyQHNwaW5uZXIuZGlhbGl4LmNvbT4pCisJKyBpbiBTRVRfVFRZLCByZXBsYWNlIFRDU0FOT1cgd2l0aCBUQ1NBRFJBSU4gKEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKworOTYwOTI4CS0gc25hcHNob3QKKwkrIGlmZGVmJ2Qgb3V0IF9uY19oYXNoX21hcCAoc3RpbGwgc2xvd2VyKQorCSsgYWRkIGdyYXBoaWMgY2hhcmFjdGVycyB0byB2dDUyIGRlc2NyaXB0aW9uLgorCSsgdXNlIFB1dEF0dHJDaGFyIGluIENsclRvRU9MIHRvIGVuc3VyZSBwcm9wZXIgYmFja2dyb3VuZCwgcG9zaXRpb24uCisJKyBzaW1wbGlmeS9jb3JyZWN0IGxvZ2ljIGluICdtdmN1cigpJyB0aGF0IGRvZXMgd3JhcHBpbmc7IGl0IHdhcworCSAgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHcvbyBhY3R1YWxseSBtb3ZpbmcgdGhlIGN1cnNvciwgd2hpY2ggYnJva2UKKwkgIHJlbGF0aXZlIG1vdmVzLgorCSsgZW5zdXJlIHRoYXQgJ2RvdXBkYXRlKCknIHNldHMgdGhlIC5vbGRpbmRleCB2YWx1ZXMgYmFjayB0byBhIHNhbmUKKwkgIHN0YXRlOyB0aGlzIHdhcyBjYXVzaW5nIGEgc3B1cmlvdXMgcmVmcmVzaCBpbiBuY3Vyc2VzICdyJy4KKwkrIGFkZCBsb2dpYyB0byBjb25maWd1cmUgKGZyb20gdmlsZSkgdG8gZ3VhcmQgYWdhaW5zdCBidWlsZGVycyB3aG8KKwkgIGRvbid0IHJlbW92ZSBjb25maWcuY2FjaGUgJiBjb25maWcuc3RhdHVzIHdoZW4gZG9pbmcgbmV3IGJ1aWxkcyAtVEQKKwkrIGNvcnJlY3RlZCBsb2dpYyBmb3IgJ3JlcGVhdF9jaGFyJyBpbiBFbWl0UmFuZ2UgKGNmOiBlcmljICMzMTcpLCB3aGljaAorCSAgZGlkIG5vdCBmb2xsb3cgdGhlIDItcGFyYW1ldGVyIHNjaGVtZSBzcGVjaWZpZWQgaW4gWFNJLgorCSsgY29ycmVjdGVkIGxvZ2ljIG9mIHdyZWZyZXNoLCB3bm91dHJlZnJlc2ggYnJva2VuIGluICMzMTksIG1ha2luZworCSAgY2xlYXJvayB3b3JrIHByb3Blcmx5IChyZXBvcnQgYnkgTWljaGFlbCBFbGtpbnMpLgorCSsgY29ycmVjdGVkIHByb2JsZW0gd2l0aCBlbmR3aW4gaW50cm9kdWNlZCBieSAjMzE0IChyZW1vdmluZyB0aGUKKwkgIHNjcm9sbGluZy1yZWdpb24gcmVzZXQpIHRoYXQgYnJva2UgbmN1cnNlcy5jIHRlc3RzLgorCSsgY29ycmVjdGVkIG9yZGVyIG9mIGFyZ3MgaW4gQUNfQ0hFQ0tfTElCIChmcm9tIHJlcG9ydCBieSBBbWkgRmlzY2htYW4KKwkgIDxmaXNjaG1hbkBtYXRoLnVjbGEuZWR1PikuCisJKyBjb3JyZWN0ZWQgZm9ybWF0dGluZyBvZiB0ZXJtaW5mby41IHRhYmxlcyAoSnVlcmdlbiBFaGxpbmcpCisJPiBwYXRjaCAzMjAgKEVTUik6CisJKyBjaGFuZ2UgQUJJIHRvIDMuMworCSsgZW1pdCBhIGNhcnJpYWdlLXJldHVybiBpbiAnZW5kd2luKCknIHRvIHdvcmthcm91bmQgYSBrZXJuZWwgYnVnIGluCisJICBCU0RJLiAgKHJlcXVlc3RlZCBieSBNaWtlIEthcmVscyA8a2FyZWxzQHJlZHJvY2suYnNkaS5jb20+KQorCSsgcmV2ZXJzZSB0aGUgZGVmYXVsdCBvIGNvbmZpZ3VyZSAtLWVuYWJsZS10ZXJtY2FwIChjb25zZW5zdXMpLgorCT4gcGF0Y2ggMzE5IChFU1IpOgorCSsgbW9kaWZpZWQgbG9naWMgZm9yIGNsZWFyb2sgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIChmcm9tIHJlcG9ydCBieQorCSAgTWljaGFlbCBFbGtpbnMpIC0gdW50ZXN0ZWQKKwk+IHBhdGNoIDMxOCAoRVNSKToKKwkrIGNvcnJlY3Rpb24gdG8gIzMxNy4KKwk+IHBhdGNoIDMxNyAoRVNSKToKKwkrIHJlLWFkZCBfbmNfaGFzaF9tYXAKKwkrIG1vZGlmeSBFbWl0UmFuZ2UgdG8gbWFpbnRhaW4gcG9zaXRpb24gYXMgcGVyIG9yaWdpbmFsIGRlc2lnbi4KKwkrIGFkZCBoYXNodGVzdC5jLCBwcm9ncmFtIHRvIHRpbWUgdGhlIGhhc2htYXAgb3B0aW1pemF0aW9uLgorCT4gcGF0Y2ggMzE2IChFU1IpOgorCSsgYWRkIGxvZ2ljIHRvIGRlYWwgd2l0aCBtYWdpYy1jb29raWUgKGhvdyB3YXMgdGhpcyB0ZXN0ZWQ/KQorCSAgKGxpYl9kb3VwZGF0ZS5jKS4KKwkrIGFkZCBuY3Vyc2VzLmMgZHJpdmVyIGZvciBtYWdpYy1jb29raWUsIHNvbWUgZml4ZXMgdG8gbmN1cnNlcy5jCisJPiBwYXRjaCAzMTUgKEVTUik6CisJKyBtZXJnZWQgQWxleGFuZGVyIFYgTHVreWFub3YncyBwYXRjaCB0byB1c2UgZWNoIGFuZCByZXAgLSB1bnRlc3RlZAorCSAgKGxpYl9kb3VwZGF0ZS5jKS4KKwkrIG1vZGlmaWVkIGhhbmRsaW5nIG9mIGludGVycnVwdGVkIHN5c3RlbSBjYWxscyAtIHVudGVzdGVkCisJICAobGliX2dldGNoLmMsIGxpYl90d2FpdC5jKS4KKwkrIG5ldyBmdW5jdGlvbiBfbmNfbXZjdXJfcmVzdW1lKCkKKwkrIGZpeCByZXR1cm4gdmFsdWUgZm9yICdvdmVybGF5KCknLCAnb3ZlcndyaXRlKCknCisKKzk2MDkxNAktIHNuYXBzaG90CisJKyBpbXBsZW1lbnQgc3Vid2luZG93LWxvZ2ljIGluIHdyZXNpemUsIG1pbm9yIGZpeGVzIHRvIG5jdXJzZXMgJ2cnCisJICB0ZXN0LgorCSsgY29ycmVjdGVkIGJyYWNrZXRpbmcgb2YgZmFsbGJhY2suYyAocmVwb3J0ZWQvc3VnZ2VzdGVkIGZpeCBieSBKdWVyZ2VuCisJICBFaGxpbmcgPGVoQGVjbGlwc2UuYWJhbGwuZGU+KS4KKwkrIHVwZGF0ZSB4dGVybS1jb2xvciB0byByZWZsZWN0IFhGcmVlODYgMy4xLjNHIHJlbGVhc2UuCisJKyBjb3JyZWN0IGJyb2tlbiBkdHRlcm0gZGVzY3JpcHRpb24gZnJvbSAjMzE0IHBhdGNoIChlLmcuLCBzcHVyaW91cworCSAgbmV3bGluZS4gIFRoZSAncGFpcnMnIGNoYW5nZSBtaWdodCB3b3JrLCBidXQgbm8gb25lJ3MgdGVzdGVkIGl0CisJICBlaXRoZXIgOy0pCisJKyBjbGFyaWZ5IHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYnVpbHRpbiBmb3JtIGZpZWxkdHlwZXMgKEp1ZXJnZW4KKwkgIFBmZWlmZXIpCisJPiBwYXRjaCAzMTQgKEVTUik6CisJKyByZXNldCBzY3JvbGwgcmVnaW9uIG9uIHN0YXJ0dXAgcmF0aGVyIHRoYW4gYXQgd3JhcHVwIHRpbWUKKwkgIChlbmhhbmNlbWVudCBzdWdnZXN0ZWQgYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgbWFrZSBzdG9yYWdlIG9mIHBhbGV0dGUgdGFibGVzIGFuZCB0aGVpciBzaXplIGNvdW50cyBwZXItc2NyZWVuIGZvcgorCSAgbXVsdGktdGVybWluYWwgYXBwbGljYXRpb25zIChzdWdnZXN0ZWQgYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgSW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nIGZvciBpbmZvdG9jYXAgdHJhbnNsYXRpb24gZXJyb3JzLgorCSsgVXBkYXRlIHRlcm1pbmZvLnNyYyB0byA5LjEzLjE0LgorCis5NjA5MDcJLSBzbmFwc2hvdAorCSsgcmV3cm90ZSB3Z2V0c3RyIHRvIG1ha2UgaXQgZXJhc2UgY29udHJvbCBjaGFycyBhbmQgYWxzbyBmaXggYm9ndXMgdXNlCisJICBvZiBfbmNfb3V0c3RyIHdoaWNoIGNhdXNlZCB0aGUgZGlzcGxheSB0byBub3Qgd3JhcCBwcm9wZXJseSAoZGlzcGxheQorCSAgcHJvYmxlbSByZXBvcnRlZCBieSBKb2huIE0uIEZsaW5jaGJhdWdoIDxnbHluaXNAbmV0cmF4Lm5ldD4pCisJKyBtb2RpZnkgbmN1cnNlcyAnZicgdGVzdCB0byBhY2NvbW1vZGF0ZSB0ZXJtaW5hbCByZXNwb25zZXMgdG8gQzEgY29kZXMKKwkgIChhbmQgc3BsaXQgdXAgdGhpcyBzY3JlZW4gdG8gYWNjb21tb2RhdGUgbm9uLUFOU0kgdGVybWluYWxzKS4KKwkrIHRlc3QgZW50ZXJfaW5zZXJ0X21vZGUgYW5kIGV4aXRfaW5zZXJ0X21vZGUgaW4gaGFzX2ljKCkuCisJKyByZW1vdmVkIGJvZ3VzIGxvZ2ljIGluIG12Y3VyIHRoYXQgYXNzdW1lcyBubC9ub25sIHNldCBvdXRwdXQgbW9kZXMKKwkgIChYU0kgc2F5cyB0aGV5IGFyZSBpbnB1dCBtb2RlczsgU1ZyNCBpbXBsZW1lbnRzIHRoaXMpLgorCSsgYWRkZWQgbWFjcm9zIFNFVF9UVFksIEdFVF9UVFkgdG8gdGVybS5oCisJKyBjb3JyZWN0IGdldHN0cigpIGxvZ2ljIHRoYXQgYWx0ZXJlZCB0ZXJtaW5hbCBtb2RlcyB3L28gcmVzdG9yaW5nLgorCSsgZGlzYWJsZSBJQ1JOTCwgZXRjLiwgZHVyaW5nIGluaXRpYWxpemF0aW9uIHRvIG1hdGNoIFNWcjQsIHJlbW92aW5nCisJICB0aGUgY29ycmVzcG9uZGluZyBsb2dpYyBmcm9tIHJhdywgY2JyZWFrLCBldGMuCisJKyBkaXNhYmxlIE9OTENSIGR1cmluZyBpbml0aWFsaXphdGlvbiwgdG8gbWF0Y2ggU1ZyNCAodGhpcyBpcyBuZWVkZWQKKwkgIGZvciBjdXJzb3Igb3B0aW1pemF0aW9uIHdoZW4gdGhlIGN1cnNvci1kb3duIGlzIGEgbmV3bGluZSkuCisJKyByZXBsYWNlZCBFU1IncyBpbWl0YXRpb24gb2Ygd3Jlc2l6ZSB3aXRoIG15IG9yaWdpbmFsIChoaXMgZGlkbid0CisJICB3b3JrKS4KKworOTYwODMxCS0gc25hcHNob3QKKwkrIG1lbW9yeSBsZWFrcyAoQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIG1vZGlmaWVkIHBub3V0cmVmcmVzaCgpIHRvIGJlIG1vcmUgdG9sZXJhbnQgb2YgdG9vLWxhcmdlIHNjcmVlbgorCSAgc2l6ZSAocmVwb3J0ZWQgYnkgTWljaGFlbCBFbGtpbnMpLgorCSsgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXJtaW5mbyBmaWxlcyB3aXRoIG5vIHN0cmluZ3MgKFBoaWxpcHBlIERlCisJICBNdXl0ZXIpCisJKyBjb3JyZWN0ICJ0aWMgLXMiIHRvIHRha2UgaW50byBhY2NvdW50IC1JLCAtQyBvcHRpb25zLgorCSsgbW9kaWZ5IG5jdXJzZXMgJ2YnIHRlc3QgdG8gbm90IHByaW50IGNvZGVzIDgwIHRocm91Z2ggOUYsIHNpbmNlIHRoZXkKKwkgIGFyZSBjb25zaWRlcmVkIGNvbnRyb2wgY29kZXMgYnkgQU5TSSB0ZXJtaW5hbHMuCisKKzk2MDgyNAktIHNuYXBzaG90CisJKyBjb3JyZWN0IHNwZWVkIHZhcmlhYmxlLXR5cGUgaW4gJ3RnZXRlbnQoKScgKHJlcG9ydGVkIGJ5IFBldGVyIFdlbW0pCisJKyBtYWtlICItLWVuYWJsZS1nZXRjYXAiIGNvbmZpZ3VyYXRpb24tb3B0aW9uIHdvcmsgKHJlcG9ydGVkIGJ5CisJICBQZXRlciBXZW1tIDxwZXRlckBzcGlubmVyLkRJQUxpeC5DT00+KQorCis5NjA4MjAKKwkrIGNvcnJlY3QgZXJyIGluIDk2MDgxNyB0aGF0IGNoYW5nZWQgcmV0dXJuLXZhbHVlIG9mIHRpZ2V0ZmxhZygpCisJICAocmVwb3J0ZWQgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIG1vZGlmeSBpbmZvY21wIHRvIHVzZSBsaWJyYXJ5IGRlZmF1bHQgc2VhcmNoLXBhdGggZm9yIHRlcm1pbmZvCisJICBkaXJlY3RvcnkgKEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisKKzk2MDgxNwktIHNuYXBzaG90CisJKyBjb3JyZWN0ZWQgYW4gZXJyIGluIG12Y3VyIHRoYXQgYnJva2UgcmVzaXppbmctYmVoYXZpb3IuCisJKyBjb3JyZWN0IGZhbGwtdGhydSBiZWhhdmlvciBvZiBfbmNfcmVhZF9lbnRyeSgpLCB3aGljaCB3YXMgbm90IGZpbmRpbmcKKwkgIGRlc2NyaXB0aW9ucyB0aGF0IGV4aXN0ZWQgaW4gZGlyZWN0b3JpZXMgcGFzdCB0aGUgZmlyc3Qgb25lIHNlYXJjaGVkCisJICAocmVwb3J0ZWQgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KQorCSsgY29ycmVjdGVkIHR5cG8gaW4gZHR0ZXJtIGRlc2NyaXB0aW9uLgorCT4gcGF0Y2ggMzEzIChFU1IpOgorCSsgYWRkIGR0dGVybSBkZXNjcmlwdGlvbgorCSsgY2xhcmlmeSBuY3Vyc2VzICdpJyB0ZXN0IChkcm9wIHZzY2FuZiBzdWJ0ZXN0KQorCis5NjA4MTAJLSBzbmFwc2hvdAorCSsgY29ycmVjdCBubCgpL25vbmwoKSB0byB3b3JrIGFzIHBlciBTVnI0ICYgWFNJLgorCSsgbWlub3IgZml4ZXMgdG8gbmN1cnNlcy5jICh1c2UgJ25vcmF3KCknLCBtdnNjYW53IHJldHVybi1jb2RlKQorCSsgcmVmaW5lIGNvbmZpZ3VyZS10ZXN0IGZvciAtZyBvcHRpb24gKFRpbSBNb29uZXkpLgorCSsgY29ycmVjdCBpbnRlcmFjdGlvbiBiZXR3ZWVuIE9fQkxBTksgYW5kIE5FV19MSU5FIHJlcXVlc3QgaW4gZm9ybQorCSAgbGlicmFyeSAoSnVlcmdlbiBQZmVpZmVyKQorCis5NjA4MDQKKwkrIHJldmlzZWQgZml4IHRvIHRwYXJtOyBwcmV2aW91cyBmaXggcmV2ZXJzZWQgcGFyYW1ldGVyIG9yZGVyLgorCT4gcGF0Y2ggMzEyIChFU1IpOgorCSAgY29ycmVjdCB0ZXJtaW5mby5zcmMgY29ycnVwdGVkIGJ5ICMzMTAKKwk+IHBhdGNoIDMxMSAoRVNSKToKKwkrIGZpeCBpZGxvaygpIGFuZCBpZGNvaygpIGFuZCB0aGUgZGVmYXVsdCBvZiB0aGUgaWRsb2sgc3dpdGNoLgorCis5NjA4MDMJLSBzbmFwc2hvdAorCSsgY29ycmVjdGVkIHRwYXJtIHRvIGhhbmRsZSBjYXBhYmlsaXR5IHN0cmluZ3Mgd2l0aG91dCBleHBsaWNpdCBwb3AKKwkgIChyZXBvcnRlZCBieSBXaWxsaWFtIFAgU2V0emVyKQorCSsgYWRkIGZhbGxiYWNrIGRlZiBmb3IgR0NDX05PUkVUVVJOLCBHQ0NfVU5VU0VEIGZvciB0ZXJtY2FwIHVzZXJzCisJICAocmVwb3J0ZWQgYnkgVGltIE1vb25leSkuCisJPiBwYXRjaCAzMTAgKEVTUik6CisJKyBkb2N1bWVudGF0aW9uIGFuZCBwcm90b3R5cGluZyBlcnJvcnMgZm9yIGhhc19jb2xvciwgaW1tZWRvayBhbmQgaWRjb2sKKwkgIChyZXBvcnRlZCBieSBXaWxsaWFtIFAgU2V0emVyIDx3c2V0emVyQHBhbXMubmNzdS5lZHU+KQorCSsgdXBkYXRlZCBxbnggdGVybWluZm8gZW50cnkgKGJ5IE1pY2hhZWwgSHVudGVyKQorCis5NjA3MzAKKwkrIGVsaW1pbmF0ZSBxdW90ZWQgaW5jbHVkZXMgaW4gbmN1cnNlcyBzdWJkaXJlY3RvcnksIGVuc3VyZSBjb25maWcuaAorCSAgaXMgaW5jbHVkZWQgZmlyc3QuCisJKyBuZXd0ZXJtIGluaXRpYWxpemVzIHRlcm1pbmFsIHNldHRpbmdzIHRoZSBzYW1lIGFzIGluaXRzY3IgKHJlcG9ydGVkCisJICBieSBUaW0gTW9vbmV5KS4KKworOTYwNzI3CS0gc25hcHNob3QKKwkrIGNhbGwgY2JyZWFrKCkgaW4gaW5pdHNjcigpLCBhcyBwZXIgWFNJICYgU1ZyNC4KKwkrIHR1cm4gb2ZmIGhhcmR3YXJlIGVjaG8gaW4gaW5pdHNjcigpIGFzIHBlciBYU0kgJiBTVnI0CisJPiBwYXRjaCAzMDkgKEVTUik6CisJKyB0ZXJtaW5mbyBjaGFuZ2VzICg5LjMuMTApLCBmcm9tIEJSTAorCSsgYWRkIG1vcmUgY2hlY2tzIHRvIHRlcm1pbmZvIHBhcnNlci4KKwkrIGFkZCBtb3JlIHN5bWJvbHMgdG8gaW5mb2NtcC4KKworOTYwNzIwCS0gc25hcHNob3QKKwkrIHNhdmUgcHJldmlvdXMtYXR0cmlidXRlIGluIGxpYl92aWRhdHRyLmMgaWYgU1AgaXMgbnVsbCAocmVwb3J0ZWQgYnkKKwkgIEp1ZXJnZW4gRmx1ayA8bG91aXNAZGFjaGF1Lm1hcmNvLmRlPikKKwkrIGNvcnJlY3RlZCBjYWxscyBvbiBfbmNfcmVuZGVyIHNvIHRoYXQgYmFja2dyb3VuZCBjaGFyYWN0ZXIgaXMgc2V0CisJICBhcyBwZXIgWFNJLgorCSsgY29ycmVjdGVkIHdia2dkc2V0IG1hY3JvIChYU0kgYWxsb3dzIGJhY2tncm91bmQgY2hhcmFjdGVyIHRvIGJlCisJICBudWxsKSwgYW5kIHRlc3RzIHRoYXQgdXNlIGl0LgorCSsgbW9yZSBjb3JyZWN0aW9ucyB0byB0ZXJtaW5mbyAoeHRlcm0gJiByeHZ0KQorCSsgdW5kaWQgY2hhbmdlIHRvIG1jcHJpbnQgcHJvdG90eXBlIChjYW5ub3QgdXNlIHNpemVfdCBpbiBjdXJzZXMuaAorCSAgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgZGVjbGFyZSBpdCBpbiB0aGUgaGVhZGVycyB0aGF0IHdlIGNhbiBzYWZlbHkKKwkgIGluY2x1ZGUgdGhlcmVpbikuCisJKyBtb3ZlIHRoZSBpZmRlZnMgZm9yIGVycm5vIGludG8gY3Vyc2VzLnByaXYuaAorCT4gcGF0Y2ggMzA4IChFU1IpOgorCSsgdGVybWluZm8gY2hhbmdlcyAoOS4zLjgpCisJKyBtb2RpZmllZCBsb2dpYyBvZiBlcnJvci1yZXBvcnRpbmcgaW4gdGVybWluZm8gcGFyc2VyCisKKzk2MDcxMwktIHNuYXBzaG90CisJKyBhbHdheXMgY2hlY2sgZm9yIDxzeXMvYnNkdHlwZXMuaD4gc2luY2UgSVNDIG5lZWRzIGl0IHRvIGRlY2xhcmUKKwkgIGZkX3NldCAoSnVlcmdlbiBQZmVpZmVyKQorCSsgaW5zdGFsbCBzaGFyZWQtbGlicmFyaWVzIG9uIE5ldEJTRC9GcmVlQlNEIHdpdGggQUJJLXZlcnNpb24gKHJlcG9ydGVkCisJICBieSBKdWVyZ2VuIFBmZWlmZXIsIE1pa2UgTG9uZykKKwkrIGFkZCBMT0NBTF9MREZMQUdTMiBzeW1ib2wgKEp1ZXJnZW4gUGZlaWZlcikKKwkrIGNvcnJlY3RlZCBwcm90b3R5cGUgZm9yIGRlbGF5X291dHB1dCgpIC0tIGJ1bXAgQUJJIHRvIDMuMgorCSsgdGVybWluZm8gcGF0Y2hlcyAjMzA2LzMwNyAoRVNSKS4KKwkrIG1vdmVkIGxvZ2ljIHRoYXQgZmlsdGVycyBvdXQgcm11bCBhbmQgcm1zbyBmcm9tIHNldHVwdGVybSB0byBuZXd0ZXJtCisJICB3aGVyZSBpdCBpcyBsZXNzIGxpa2VseSB0byBpbnRlcmZlcmUgd2l0aCB0ZXJtY2FwIGFwcGxpY2F0aW9ucy4KKworOTYwNzA3CisJKyByb2xsYmFjayBFU1IncyAjMzA1IGNoYW5nZSB0byB0ZXJtaW5mby5zcmMgKGl0IGJyZWFrcyBleGlzdGluZworCSAgYXBwbGljYXRpb25zLCBlLmcuLCAnbGVzcyAyOTAnKS4KKwkrIGNvcnJlY3QgcGF0aCBvZiBlZGl0X21hbi5zaCwgYW5kIGZpeCB0eXBvIHRoYXQgbWFkZSBhbGwgbWFuLXBhZ2VzCisJICBwcmVmb3JtYXR0ZWQuCisJKyByZXN0b3JlIG1hbi9tZW51X3JlcXVlc3RuYW1lLjN4IG9taXR0ZWQgaW4gWmV5ZCdzIHJlc3luYyAob29wcykuCisJKyBhdXRvLWNvbmZpZ3VyZSB0aGUgR0NDX1BSSU5URkxJS0UvR0NDX1NDQU5GTElLRSBtYWNyb3MgKHJlcG9ydGVkIGJ5CisJICBQaGlsaXBwZSBEZSBNdXl0ZXIpLgorCis5NjA3MDYJLSBzbmFwc2hvdAorCSsgbWFrZSBsaWJfdmlkYXR0ci5jIG1vcmUgcmVhZGFibGUgdXNpbmcgbWFjcm9zLgorCSsgZmlsdGVyIG91dCBybXVsLCBybXNvIHRoYXQgY29uZmxpY3Qgd2l0aCBzZ3IwIHdoZW4gcmVhZGluZyB0ZXJtaW5hbAorCSAgZGVzY3JpcHRpb25zLgorCSsgYWRkZWQgc2FuaXR5LWNoZWNraW5nIG9mIHZhcmlvdXMgcGFpcmVkIHN0cmluZyBhdHRyaWJ1dGVzIChFU1IpLgorCSsgd29yayBhcm91bmQgYXV0b2NvbmYgYnVnLCBmb3JjZSAkSU5TVEFMTCB0byBhYnNvbHV0ZSBwYXRoCisJICAocmVwb3J0ZWQgYnkgWmV5ZCkuCisJKyBtb2RpZnkgbWFuLXBhZ2UgaW5zdGFsbCBmb3IgQlNESSB0byBpbnN0YWxsIHByZWZvcm1hdHRlZCAuMCBmaWxlcworCSAgKHJlcG9ydGVkIGJ5IERhdmlkIE1hY0tlbnppZSkuCisJKyBhZGQvdXNlIGdjYyBfX2F0dHJpYnV0ZV9fIGZvciBwcmludGYgYW5kIHNjYW5mIGluIGN1cnNlcy5oCisJKyBhZGRlZCBTR1IgYXR0cmlidXRlcyB0ZXN0LWNhc2UgdG8gbmN1cnNlcworCSsgcmV2aXNlZCBuY3Vyc2VzICd0JyBsb2dpYyB0byBzaG93IHRyYWNlLWRpc2FibGUgZWZmZWN0IGluIHRoZSBtZW51LgorCSsgdXNlIGdldG9wdCBpbiBuY3Vyc2VzIHByb2dyYW0gdG8gcHJvY2VzcyAtcyBhbmQgLXQgb3B0aW9ucy4KKwkrIG1ha2UgbmN1cnNlcyAncCcgbGVnZW5kIHRvZ2dsZSB3aXRoICc/JworCSsgZGlzYWJsZSBzY3JvbGxvayBkdXJpbmcgdGhlIG5jdXJzZXMgJ3AnIHRlc3Q7IGlmIGl0IGlzIGVuYWJsZWQgdGhlCisJICBzdGRzY3Igd2lsbCBzY3JvbGwgd2hlbiBwdXR0aW5nIHRoZSBib3gtY29ybmVycyBpbiB0aGUgbG93ZXItcmlnaHQKKwkgIG9mIHRoZSBzY3JlZW4uCisKKzk2MDYyOQktIHNuYXBzaG90CisJKyBjaGVjayByZXR1cm4gY29kZSBvZiBfbmNfbXZjdXJfc2Nyb2xsbigpIGluIF9uY19zY3JvbGxfb3B0aW1pemUoKSBmb3IKKwkgIHRlcm1pbmFscyB3aXRoIG5vIHNjcm9sbGluZy1zdXBwb3J0IChyZXBvcnRlZCBieSBOaWtvbGF5IFNoYWRyaW4KKwkgIDxxdWVlbkBxaC5taXJlYS5hYy5ydT4pCisJKyBhZGRlZCBeUyBzY3JvbGxvay10b2dnbGUgdG8gbmN1cnNlcyAnZycgdGVzdC4KKwkrIGFkZGVkIF5UIHRyYWNlLXRvZ2dsZSB0byBuY3Vyc2VzIHRlc3RzLgorCSsgbW9kaWZpZWQgbmN1cnNlcyB0ZXN0IHByb2dyYW0gdG8gdXNlIF5RIG9yIEVTQyBjb25zaXN0ZW50bHkgZm9yCisJICB0ZXJtaW5hdGluZyB0ZXN0cyAocmF0aGVyIHRoYW4gXkQpLCBhbmQgdG8gdXNlIGNvbnRyb2wga2V5cyByYXRoZXIKKwkgIHRoYW4gZnVuY3Rpb24ga2V5cyBpbiAnZycgdGVzdC4KKwkrIGNvcnJlY3RlZCBtaXNwbGFjZWQgd2NscnRvZW9sIGNhbGxzIGluIGFkZGNoIHRvIGFjY29tbW9kYXRlIHdyYXBwaW5nCisJICAocmVwb3J0ZWQgYnkgUGhpbGlwcGUgRGUgTXV5dGVyKS4KKwkrIG1vZGlmeSBsaWJfZG91cGRhdGUuYyB0byB1c2UgZWZmZWN0aXZlIGNvc3RzIHRvIHRyYWRlb2ZmIGJldHdlZW4KKwkgIGRlbGV0ZS1jaGFyYWN0ZXIvaW5zZXJ0LWNoYXJhY3RlciB2cyBub3JtYWwgdXBkYXRpbmcgKHJlcG9ydGVkIGJ5CisJICBEYXZpZCBNYWNLZW56aWUpLgorCSsgY29tcHV0ZSBlZmZlY3RpdmUgY29zdHMgZm9yIHNjcmVlbiB1cGRhdGUgb3BlcmF0aW9ucyAoZS5nLiwgY2xyX2VvcywKKwkgIGRlbGV0ZV9jaGFyYWN0ZXIpLgorCSsgY29ycmVjdGVkIGVycm9yIGluIGtuaWdodC5jIGV4cG9zZWQgYnkgd3JhcCBmaXhlcyBpbiA5NjA2MjI7IHRoZQorCSAgbXNnd2luIG5lZWRlZCBzY3JvbGxvayBzZXQuCisJKyBjb3JyZWN0ZWQgbGFzdCBjaGFuZ2UgdG8gSURjVHJhbnNmb3JtTGluZSBsb2dpYyB0byBhdm9pZCBjb25mbGljdAorCSAgYmV0d2VlbiBQdXRSYW5nZSBhbmQgSW5zU3RyCisJKyBtb2RpZmllZCBydW5fdGljLnNoIHRvIG5vdCB1c2UgL3Vzci90bXAgKHJlcG9ydGVkIGJ5IERhdmlkCisJICBNYWNLZW56aWUpLCBhbmQgZnVydGhlciByZXZpc2VkIGl0IGFuZCBhY2xvY2FsLm00IHRvIHVzZSAkVE1QRElSIGlmCisJICBzZXQuCisJKyBjb3JyZWN0ZWQgb2ZmLWJ5LW9uZSBpbiBSb29tRm9yIGNhbGwgaW4gcmVhZF9lbnRyeS5jCisKKzk2MDYyMgktIHNuYXBzaG90CisJKyBtb2RpZmllZCBsb2dpYyB0aGF0IHdyYXBzIGN1cnNvciBpbiBhZGRjaCB0byBmb2xsb3cgdGhlIFhTSSBzcGVjLAorCSAgKGltcGxlbWVudGVkIGluIFNWcjQpIHdoaWNoIHN0YXRlcyB0aGF0IHRoZSBjdXJzb3IgcG9zaXRpb24gaXMKKwkgIHVwZGF0ZWQgd2hlbiB3cmFwcGluZy4gIFJlbmFtZWQgX05FRURfV1JBUCB0byBfV1JBUFBFRCB0byByZWZsZWN0IHRoZQorCSAgYWN0dWFsIHNlbWFudGljcy4KKwkrIGFkZGVkIC1zIG9wdGlvbiB0byB0aWMsIHRvIHByb3ZpZGUgYmV0dGVyIGRpYWdub3N0aWNzIGluIHJ1bl90aWMuc2gKKwkrIGltcHJvdmVkIGVycm9yLXJlY292ZXJ5IGZvciB0YWJzZXQgaW5zdGFsbC4KKwkrIGNoYW5nZSBBQkkgdG8gMy4xIChkcm9wcGVkIHRwYXJhbSwgY29ycmVjdGVkIGdldGJrZ2QoKSwgYWRkZWQKKwkgIF95b2Zmc2V0IHRvIFdJTkRPVykuCisJKyBtb2RpZmllZCBpbml0aWFsaXphdGlvbiBvZiBTUC0+X29mcCBzbyB0aGF0IGluaXRfYWNzKCkgaXMgY2FsbGVkIHdpdGgKKwkgIHRoZSAicmlnaHQiIGZpbGUgcG9pbnRlciAocmVwb3J0ZWQgYnkgUmljayBNYXJzaGFsbCA8cmptQG5sYy5uZXQuYXU+CisJKyBkb2N1bWVudGF0aW9uIGZpeGVzIChKdWVyZ2VuIFBmZWlmZXIpLgorCSsgY29ycmVjdGVkLCB1c2luZyBuZXcgU0NSRUVOIGFuZCBXSU5ET1cgbWVtYmVycywgdGhlIGJlaGF2aW9yIG9mCisJICBuY3Vyc2VzIGlmIG9uZSB1c2VzIHJpcG9mZmxpbmUoKSB0byByZW1vdmUgYSBsaW5lIGZyb20gdGhlIHRvcCBvZiB0aGUKKwkgIHNjcmVlbiAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIG1vZGlmaWVkIGF1dG9jb25mIHNjcmlwdHMgdG8gcHJlcGFyZSBmb3IgQWRhOTUgKEdOQVQpIGJpbmRpbmcgdG8KKwkgIG5jdXJzZXMgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBpbmNvcnJlY3QgYnVmZmVyLXNpemUgaW4gX25jX3JlYWRfZW50cnksIHJlcG9ydGVkIGJ5IEVTUi4KKworOTYwNjE3CisJKyBjb3JyZWN0ZWQgdHdvIGxvZ2ljIGVycm9ycyBpbiByZWFkX2VudHJ5LmMsIHdyaXRlX2VudHJ5LmMgKGNhbGxlZCBieQorCSAgdGljLCB0aGUgd3JpdGUvcmVhZCBvZiB0ZXJtaW5mbyBlbnRyaWVzIHVzZWQgaW5jb25zaXN0ZW50IHJ1bGVzIGZvcgorCSAgbG9jYXRpbmcgdGhlIGVudHJpZXM7IHRoZSAkVEVSTUlORk9fRElSUyBjb2RlIHdvdWxkIGZpbmQgb25seSB0aGUKKwkgIGZpcnN0IGVudHJ5IGluIGEgbGlzdCkuCisJKyByZWZpbmVkIHBhdGhuYW1lIGNvbXB1dGF0aW9uIGluIHJ1bl90aWMuc2ggYW5kIHNobGliLgorCSsgY29ycmVjdGVkIGluaXRpYWxpemF0aW9uIG9mICRJUCBpbiBtaXNjL3J1bl90aWMuc2gKKworOTYwNjE1CS0gc25hcHNob3QKKwkrIGlmZGVmJ2Qgb3V0IF9uY19oYXNoX21hcCgpIGNhbGwgYmVjYXVzZSBpdCBkb2VzIG5vdCBpbXByb3ZlIHNwZWVkLgorCSsgZGlzcGxheSB2ZXJzaW9uIG9mIGdjYyBpZiBjb25maWd1cmUgc2NyaXB0IGlkZW50aWZpZXMgaXQuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgL3VzciBhcyBMaW51eCdzIGRlZmF1bHQgcHJlZml4LgorCSsgbW9kaWZ5IHJ1bl90aWMuc2ggdG8gdXNlIHNobGliIHNjcmlwdCwgZml4ZXMgc29tZSBwcm9ibGVtcyBpbnN0YWxsaW5nCisJICB3aXRoIGEgc2hhcmVkLWxpYnJhcnkgY29uZmlndXJhdGlvbi4KKwkrIGFkanVzdGVkIGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCBpdCBkb2Vzbid0IHJ1biB0ZXN0cyB3aXRoIHRoZQorCSAgd2FybmluZ3MgdHVybmVkIG9uLCB3aGljaCBtYWtlcyBjb25maWcubG9nIGhhcmQgdG8gcmVhZC4KKwkrIGFkZGVkICdsaW50JyBydWxlIHRvIHRvcC1sZXZlbCBNYWtlZmlsZS4KKwkrIGFkZGVkIGNvbmZpZ3VyZSBvcHRpb24gJy0td2l0aC1pbnN0YWxsLXByZWZpeCcgZm9yIHVzZSBieSBzeXN0ZW0KKwkgIGJ1aWxkZXJzIHRvIGluc3RhbGwgaW50byBzdGFnaW5nIGxvY2F0aW9ucyAocmVxdWVzdGVkIGJ5CisJICBDaGFybGVzIExldmVydCA8Y2hhcmxlc0Bjb21tLnBvbHltdGwuY2E+KS4KKwkrIGNvcnJlY3RlZCBhdXRvY29uZmlndXJlIGZvciBEZWJpYW4gbWFuIHByb2dyYW07IGl0J3Mgbm90IGluc3RhbGxlZAorCSAgYXMgIm1hbl9kYiIuCisJKyBzZXQgbm9lY2hvIGluICd3b3JtJzsgaXQgd2FzIGlmZGVmJ2QgZm9yIGRlYnVnIG9ubHkKKwkrIHVwZGF0ZWQgdGVzdC9jb25maWd1cmUuaW4gZm9yIHRpbWluZy1kaXNwbGF5IGluIG5jdXJzZXMgJ3AnIHRlc3QKKwkrIGNvcnJlY3RlZCBtaXNzcGVsbGVkICdnZXRia2dkKCknLgorCSsgY29ycmVjdGVkIHdia2dkc2V0IHRvIHdvcmsgbGlrZSBvYnNlcnZlZCBzeXZyNCAoc2V0cyBBX0NIQVJURVhUIHBhcnQKKwkgIHRvIGJsYW5rIGlmIG5vIGNoYXJhY3RlciBnaXZlbiwgY29waWVzIGF0dHJpYnV0ZXMgdG8gd2luZG93J3MKKwkgIGF0dHJpYnV0ZXMpLgorCSsgbW9kaWZpZWQgbGliX2RvdXBkYXRlLmMgdG8gdXNlIGxvd2VyLWxldmVsIFNQJ3MgY3VycmVudF9hdHRyIHN0YXRlCisJICBpbnN0ZWFkIG9mIGN1cnNjcidzIHN0YXRlLCBzaW5jZSBpdCBpcyByZWR1bmRhbnQuCisJKyBjb3JyZWN0aW9uIHRvIElEY1RyYW5zZm9ybUxpbmUgbG9naWMgd2hpY2ggY29udHJvbHMgd2hlcmUgSW5zU3RyIGlzCisJICBpbnZva2VkIChyZWZpbmVkIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwk+IHBhdGNoIDMwMyAoRVNSKToKKwkrIGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBDaHJpcyBUb3JlaydzIGhhc2ggZnVuY3Rpb24gX25jX2hhc2hfbWFwKCkuCisJKyBiZXR0ZXIgZml4IGZvciBudmkgcmVmcmVzaC1idWcgKFJpY2sgTWFyc2hhbGwpCisJKyBmaXggZm9yIGJ1ZyBpbiBoYW5kbGluZyBvZiBpbnRlcnJ1cHRlZCBrZXlzdHJva2Ugd2FpdHMsCisJICAoV2VybmVyIEZsZWNrKS4KKworOTYwNjAxCS0gc25hcHNob3QKKwkrIGF1dG8tY29uZmlndXJlIG1hbi1wYWdlIGNvbXByZXNzaW9uLWZvcm1hdCBhbmQgcmVuYW1lcyBmb3IgRGViaWFuLgorCSsgY29ycmVjdGVkIHNldmVyYWwgdHlwb3MgaW4gY3Vyc2VzLmguaW4gKGkuZS4sIHRoZSBtdlhYWFggbWFjcm9zKS4KKwkrIHJlLW9yZGVyIGN1cnNlcy5wcml2LmggZm9yIGxpbnQuCisJKyBhZGRlZCBydWxlcyBmb3IgbGludGxpYiwgbGludAorCSsgY29ycmVjdGVkIGlmZGVmIGZvciBCUk9LRU5fTElOS0VSIGluIE1LbmFtZXMuYXdrLmluCisJKyBjb3JyZWN0ZWQgbWlzc2luZyBJTlNUQUxMX0RBVEEgaW4gbWlzYy9NYWtlZmlsZS5pbgorCSsgZmx1c2ggb3V0cHV0IHdoZW4gY2hhbmdpbmcgY3Vyc29yLXZpc2liaWxpdHkgKFJpY2sgTWFyc2hhbGwpCisJKyBmaXggYSBtaW5vciBidWcgaW4gdGhlIF9uY19yaXBvZmYoKSByb3V0aW5lIGFuZCBpbXByb3ZlIGVycm9yCisJICBjaGVja2luZyB3aGVuIGNyZWF0aW5nIHRoZSBsYWJlbCB3aW5kb3cgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBlbmhhbmNlbWVudCB0byB0aGUgY29udHJvbCBvdmVyIHRoZSBuZXcgUEMtc3R5bGUgc29mdCBrZXkgZm9ybWF0LgorCSAgYWxsb3cgY2FsbGVyIG5vdyB0byBzZWxlY3Qgd2hldGhlciBvciBub3Qgb25lIHdhbnRzIHRvIGhhdmUKKwkgIHRoZSBpbmRleC1saW5lOyBzZWUgY3Vyc19zbGsuM3ggZm9yIGRvY3VtZW50YXRpb24gKEp1ZXJnZW4gUGZlaWZlcikuCisJKyB0eXBvcywgZG9uJ3QgdXNlIGlubGluZSB3aXRoIC1nIChQaGlsaXBwZSBEZSBNdXl0ZXIpCisJKyBmaXhlcyBmb3IgbWVudXMgJiB3YXR0ci0sIHNsay1mdW5jdGlvbnMgKEp1ZXJnZW4gUGZlaWZlcikKKworOTYwNTI2CS0gc25hcHNob3QKKwkrIHJlbW92ZWQgLS13aXRoLXRpY2RpciBvcHRpb24gYWx0b2dldGhlciwgbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoCisJICBleGlzdGluZyBhcHBsaWNhdGlvbnMgdmlhIHN5bWJvbGljIGxpbmsgaW4gcnVuX3RpYy5zaAorCSsgcGF0Y2ggZm9yIHRlcm1pby5oLCBzaWduYWwgKFBoaWxpcHBlIERlIE11eXRlcikKKwkrIGF1dG8tY29uZmlndXJlIGdjYyB3YXJuaW5nIG9wdGlvbnMgcmF0aGVyIHRoYW4gaW5mZXIgZnJvbSB2ZXJzaW9uLgorCSsgYXV0by1jb25maWd1cmUgX19hdHRyaWJ1dGVfXyBmb3IgZGlmZmVyZW50IGdjYyB2ZXJzaW9ucy4KKwkrIGNvcnJlY3RlZCBzcGVjaWFsIHVzZSBvZiBjbGVhcm9rKCkgaW4gaGFyZHNjcm9sbC5jIGJ5IHJlc2V0dGluZyBmbGFnCisJICBpbiB3cmVmcmVzaCgpLgorCSsgaW5jbHVkZSBzdGRsaWIuaCBiZWZvcmUgZGVmcyBmb3IgRVhJVF9TVUNDRVNTLCBmb3IgT1NGLzEuCisJKyBpbmNsdWRlIHN5cy90eXBlcy5oIGluIGNhc2Ugc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBzaXplX3QuCisJKyBmaXhlcyBmb3IgbWFrZWZpbGUgKFRpbSBNb29uZXkpCisJKyBmaXhlcyBmb3IgbWVudXMgJiBmb3JtcyAoSnVlcmdlbiBQZmVpZmVyKQorCis5NjA1MTgJLSBzbmFwc2hvdAorCSsgcmV2aXNlZCBuY3Vyc2VzLmMgcGFubmVyIHRlc3QsIGxldCBwYWQgYWJ1dCBhbGwgNCBzaWRlcyBvZiBzY3JlZW4uCisJKyByZWZpbmVkIGNhc2UgaW4gbGliX2RvdXBkYXRlLmMgZm9yIENsclRvRU9MKCkuCisJKyBjb3JyZWN0ZWQgcHJpb3IgY2hhbmdlIGZvciBQdXRSYW5nZSAoQWxleGFuZGVyIFYgTHVreWFub3YKKwkgIDxsYXZAeWFycy5mcmVlLm5ldD4pLgorCSsgYXV0b2NvbmYgbW9kcyAoVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5Ob0Rhay5lZHU+KS4KKwkrIGxvY2FsZSBmaXggZm9yIGZvcm1zIChQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZGVtdXl0QHVsYi5hYy5iZT4pCisJKyByZW5hbWVkICItLXdpdGgtZGF0YWRpciIgb3B0aW9uIHRvICItLXdpdGgtdGljZGlyIiB0byBhdm9pZAorCSAgY29uZnVzaW9uLCBhbmQgbWFkZSB0aGlzIGNoZWNrIGZvciB0aGUgL3Vzci9saWIvdGVybWluZm8gcHJlLWV4aXN0aW5nCisJICBkaXJlY3RvcnkuCisJPiBwYXRjaGVzIDI5OS0zMDEgKEVTUik6CisJKyBhZGRlZCBoYXNobWFwLmMKKwkrIG1vZHMgdG8gdHJhY2luZywgZXNwZWNpYWxseSBmb3IgQUNTIGNoYXJzLgorCSsgY29ycmVjdGVkIG9mZi1ieS1vbmUgaW4gSURDdHJhbnNmb3JtLgorCSsgY29ycmVjdGVkIGludGVybWl0dGVudCBtb3VzZSBidWcgYnkgdXNpbmcgcmV0dXJuLXZhbHVlIGZyb20gcmVhZCgpLgorCSsgbW9kcyB0byBwYXJzZV9lbnRyeS5jLCBmb3Igc21hcnRlciBkZWZhdWx0cy4KKworOTYwNTEyCisJKyB1c2UgZ2V0b3B0IGluICd0aWMnOyBhZGRlZCAtTCBvcHRpb24gYW5kIG1vZGlmaWVkIC1lIG9wdGlvbiB0byBhbGxvdworCSAgbGlzdCBmcm9tIGEgZmlsZS4KKworOTYwNTExCisJKyBkb24ndCB1c2UgZml4ZWQgYnVmZmVyLXNpemUgaW4gdHBhcm0oKS4KKwkrIG1vZGlmaWVkIHRpYyB0byBjcmVhdGUgdGVybWluZm8gZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisJKyBhZGRlZCAtVCBvcHRpb25zIHRvIHRpYyBhbmQgaW5mb2NtcCAoZm9yIHRlc3RpbmcvYW5hbHlzaXMpCisJKyByZWZpbmVkIHRoZSBsZW5ndGggY3JpdGVyaWEgZm9yIHRlcm1jYXAgYW5kIHRlcm1pbmZvCisJKyBvcHRpbWl6ZSBsaWJfZG91cGRhdGUgd2l0aCBtZW1jcHksIFB1dFJhbmdlCisJPiBwYXRjaGVzIDI5NywgMjk4IChFU1IpOgorCSsgaW1wbGVtZW50IFRFUk1JTkZPX0RJUlMsIGFuZCAtbyBvcHRpb24gb2YgdGljCisJKyBhZGRlZCBUUkFDRV9JRVZFTlQKKwkrIHJlbW92ZWQgYm9vbGVhbiB2ZXJzaW9uIG9mICdnZXRtJworCSsgYWRkZWQgbGliX3ByaW50LmMgKGZvciBSaWNrIE1hcnNoYWxsKQorCSsgYWRkZWQgaGFzX2tleSgpCisJKyBhZGRlZCAndCcgdG8gbmN1cnNlcy5jIHRlc3QuCisJKyBtb3ZlZCBkZWxheV9vdXRwdXQoKSB0byBsaWJfdHB1dHMuYworCSsgcmVtb3ZlZCB0cGFyYW0oKSAod2FzIGFkZGVkIGluIDEuOS45LCBidXQgY29uZmxpY3RzIHdpdGggZW1hY3MgYW5kCisJICBpcyBub3QgcGFydCBvZiBYL09wZW4gQ3Vyc2VzKS4KKwkrIG1pc2MgY3Vyc29yICYgb3B0aW1pemF0aW9uIGZpeGVzLgorCis5NjA1MDQJLSBzbmFwc2hvdAorCSsgbW9kaWZpZWQgbmN1cnNlcyAncCcgdGVzdCB0byBhbGxvdyBmdWxsLXNjcmVlbiByYW5nZSBmb3IgcGFubmVyIHNpemUuCisJKyBmaXhlcyBmb3IgbG9jYWxlIChQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG1AbGFiYXV0bzEudWxiLmFjLmJlPikKKwkrIGRvbid0IHVzZSBmaXhlZCBidWZmZXItc2l6ZSBpbiBmbXRfZW50cnkoKS4KKwkrIGFkZGVkIHVzYWdlLW1lc3NhZ2UgdG8gJ2luZm9jbXAnLgorCSsgbW9kaWZpZWQgaW5zdGFsbC5pbmNsdWRlcyBydWxlcyB0byBwcmVwZW5kIHN1YmRpcmVjdG9yeS1uYW1lIHRvCisJICAiI2luY2x1ZGUiIGlmIG5lZWRlZC4KKworOTYwNDMwCisJKyBwcm90ZWN0IHdyZWZyZXNoLCB3bm91dHJlZnJlc2ggZnJvbSBpbnZvY2F0aW9uIHdpdGggcGFkIGFyZ3VtZW50LgorCSsgY29ycmVjdGVkIGRlZmF1bHQgQ0NGTEFHUyBpbiB0ZXN0L01ha2VmaWxlLgorCis5NjA0MjgJLSBzbmFwc2hvdAorCSsgaW1wbGVtZW50ZWQgbG9naWMgdG8gc3VwcG9ydCB0ZXJtaW5hbHMgd2l0aCBiYWNrZ3JvdW5kIGNvbG9yIGVyYXNlCisJICAoZS5nLiwgcnh2dCBhbmQgdGhlIG5ld2VyIGNvbG9yIHh0ZXJtKS4KKwkrIGltcHJvdmVkIHNjcmVlbiB1cGRhdGUgbG9naWMgKG9mZi1ieS1vbmUgbG9naWMgZXJyb3I7IHVzZSBjbHJfZW9zIGlmCisJICBwb3NzaWJsZSkKKworOTYwNDI2CS0gc25hcHNob3QKKwkrIGNoYW5nZSBuY3Vyc2VzICdhJyB0ZXN0IHRvIHJ1biBpbiByYXcgbW9kZS4KKwkrIG1ha2UgVElPQ0dXSU5TWiBjb25maWd1cmUgdGVzdCBsZXNzIHN0cmluZ2VudCwgaW4gY2FzZSB1c2VyCisJICBjb25maWd1cmVzIHZpYSB0ZXJtaW5hbCB0aGF0IGNhbm5vdCBnZXQgc2NyZWVuIHNpemUuCisJPiBwYXRjaGVzIDI5NSwgMjk2IChFU1IpOgorCSsgbmV3ICItZSIgb3B0aW9uIG9mIHRpYy4KKwkrIGZpeCBmb3IgImluZm9jbXAgLWUiLgorCSsgcmVzdG9yZSB3b3JraW5nLWRpcmVjdG9yeSBpbiByZWFkX3Rlcm1jYXAuYworCSsgc3BsaXQgbGliX2tlcm5lbC5jLCBsaWJfc2V0dXAuYyBhbmQgbmFtZXMuYyBpbiBvcmRlciB0byByZWR1Y2UKKwkgIG92ZXJoZWFkIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBvbmx5IHRlcm1jYXAgZmVhdHVyZXMuCisKKzk2MDQxOAktIHNuYXBzaG90CisJKyB1c2UgYXV0b2NvbmYgMi45CisJKyBmaXggZm9yIEFJWCAzLjIuNSAobXVzdCBkZWZpbmUgX1BPU0lYX1NPVVJDRSB0byBnZXQgdGVybWlvcyBzdHJ1Y3QKKwkgIGRlZmluaXRpb25zIHZpYSA8dGVybWlvcy5oPiwgbW9kaWZpZWQgbWFjcm9zIGluIGxpYl9yYXcuYyB0byBhdm9pZAorCSAgSyZSLXN0eWxlIHN1YnN0aXR1dGlvbikKKwk+IHBhdGNoZXMgMjkzLCAyOTQgKEVTUik6CisJKyBtb2RzIHRvIHdnZXRjaCgpIGluIGNvb2tlZCBtb2RlCisJKyBjb3JyZWN0ZWQgYXNrdXNlcigpIGxvZ2ljIGluIHRzZXQKKwkrIGNvcnJlY3QgaW50ZXJhY3Rpb24gb2YgZW5kd2luKCkgd2l0aCBtb3VzZSBwcm9jZXNzaW5nCisJKyBhZGRlZCB0cmFjZSBzdXBwb3J0IGZvciBUVFkgZmxhZ3MKKworOTYwNDA2CisJKyBmaXhlcyBmb3IgTmVYVCwgSVNDIGFuZCBIUFVYIGF1dG8tY29uZmlndXJlCisJKyBhdXRvZ2VuZXJhdGUgZGV2ZWxvcG1lbnQgaGVhZGVyLWRlcGVuZGVuY2llcyAoY29uZmlnLmgsICoucHJpdi5oKQorCSsgY29ycmVjdGVkIHNpbmdsZS1jb2x1bW4gZm9ybWF0dGluZyBvZiAidXNlPSIgKGUuZy4sIGluIHRpYykKKwkrIG1vZGlmeSB0aWMgdG8gcmVhZCBmdWxsIHRlcm1pbmZvLW5hbWVzCisJKyBjb3JyZWN0ZWQgZGl2aWRlLWJ5LXplcm8gdGhhdCBjYXVzZWQgaGFuZyAob3Igd29yc2UpIHdoZW4gcmVkaXJlY3RpbmcKKwkgIG91dHB1dAorCSsgbW9kaWZ5IHRpYyB0byBnZW5lcmF0ZSBkaXJlY3RvcmllcyBvbmx5IGFzLW5lZWRlZCAoYW5kIGNvcnJlY3RlZAorCSAgaW5zdGFuY2Ugb2YgdXNlIG9mIGRhdGEgZnJvbSBmdW5jdGlvbiB0aGF0IGhhZCBhbHJlYWR5IHJldHVybmVkKS4KKworIyMjIG5jdXJzZXMtMS45LjhhIC0+IDEuOS45ZQorCisqIGZpeGVkIGJyb2tlbiB3c3luY3VwKCkvd3lzbmNkb3duKCksIGFzIGEgcmVzdWx0IHdub3V0cmVmcmVzaCgpIG5vdyBoYXMKKyAgY29weS1jaGFuZ2VkLWxpbmVzIGJlaGF2aW9yLgorKiBhZGRlZCBhbmQgZG9jdW1lbnRlZCB3cmVzaXplKCkgZnVuY3Rpb24uCisqIG1vcmUgZml4ZXMgdG8gTE9XRVItUklHSFQgY29ybmVyIGhhbmRsaW5nLgorKiBjaGFuZ2VkIHRoZSBsaW5lLWJyZWFrb3V0IG9wdGltaXphdGlvbiBjb2RlIHRvIGFsbG93IHNvbWUgbGluZXMgdG8gYmUKKyAgZW1pdHRlZCBiZWZvcmUgdGhlIGZpcnN0IGNoZWNrLgorKiBhZGRlZCBvcHRpb24gZm9yIHRpYyB0byB1c2Ugc3ltYm9saWMgaW5zdGVhZCBvZiBoYXJkIGxpbmtzIChmb3IgQUZTKQorKiBmaXggdG8gcmVzdG9yZSBhdXRvLXdyYXAgbW9kZS4KKyogdHJhY2UgbGV2ZWwgY2FuIGJlIGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUuCisqIGJldHRlciBoYW5kbGluZyBvZiBOVUxzIGluIHRlcm1pbmFsIGRlc2NyaXB0aW9ucy4KKyogaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9ic2VydmVkIFNWUjQgYmVoYXZpb3IuCisqIHRoZSByZWZyZXNoIGJlaGF2aW9yIG9mIG92ZXItbGFwcGluZyB3aW5kb3dzIGlzIG5vdyBtb3JlIGVmZmljaWVudCBhbmQKKyAgYmVoYXZlcyBsaWtlIFNWUjQuCisqIHVzZSBhdXRvY29uZiAyLjcsIHdoaWNoIHJlc3VsdHMgaW4gYSB3b3JraW5nIHNldHVwIGZvciBTQ08gNS4wLgorKiBzdXBwb3J0IGZvciBFU0NERUxBWS4KKyogc21hbGwgZml4ZXMgZm9yIG1lbnUvZm9ybSBjb2RlLgorKiB0aGUgdGVzdCBkaXJlY3RvcnkgaGFzIGl0cyBvd24gY29uZmlndXJlLgorKiBmaXhlcyB0byBwYWRzIHdoZW4gb3B0aW1pemluZyBzY3JvbGxpbmcuCisqIGZpeGVkIHNldmVyYWwgb2ZmLWJ5LW9uZSBidWdzLgorKiBmaXhlcyBmb3IgdGVybWNhcC0+dGVybWluZm8gdHJhbnNsYXRpb247IGxlc3MgcmVzdHJpY3Rpb25zIG1vcmUgY29ycmVjdAorICBiZWhhdmlvci4KKworIyMjIG5jdXJzZXMtMS45LjcgLT4gMS45LjhhCisKKyogdGVhY2ggaW5mb2NtcCAtaSB0byByZWNvZ25pemUgRUNNQSBoaWdobGlnaHQgc2VxdWVuY2VzCisqIGluZm9jbXAgbm93IGR1bXBzIGFsbCBTVnI0IHRlcm1jYXBzIChub3QganVzdCB0aGUgU1ZyNCBvbmVzKSBvbiAtQworKiBzdXBwb3J0IGluZm9jbXAgLVJCU0QuCisqIHNhdGlzZnkgWFNJIEN1cnNlcyByZXF1aXJlbWVudCB0aGF0IGV2ZXJ5IG1hY3JvIGJlIGF2YWlsYWJsZSBhcyBhIGZ1bmN0aW9uLgorKiBUaGlzIHJlcHJlc2VudHMgdGhlIGxhc3QgYmlnIGNoYW5nZSB0byB0aGUgcHVibGljIGludGVyZmFjZSBvZiBuY3Vyc2VzLiBUaGUKKyAgQUJJX1ZFUlNJT04gaGFzIG5vdyBiZWVuIHNldCBhdCAzLjAgYW5kIHNob3VsZCBzdGF5IHRoZXJlIGJhcnJpbmcgYW55IGdyZWF0CisgIGNhdGFzdHJvcGhpZXMgb3IgYWN0cyBvZiBHb2QuCisqIFRoZSBDKysgaGFzIGJlZW4gY2xlYW5lZCB1cCBpbiByZWFjdGlvbiB0byB0aGUgY2hhbmdlcyB0byBzYXRpc2Z5IFhTSSdzCisgIHJlcXVpcmVtZW50cy4KKyogbGlibmN1cnNlcyBub3cgZ2V0cyBsaW5rZWQgdG8gbGliY3Vyc2VzIHRvIGhlbHAgc2VhbWxlc3MgZW11bGF0aW9uCisgIChyZXBsYWNlbWVudCkgb2YgYSB2ZW5kb3IncyBjdXJzZXMuIC0tZGlzYWJsZS1vdmVyd3JpdGUgdHVybnMgdGhpcyBiZWhhdmlvcgorICBvZmYuCisKKyMjIyBuY3Vyc2VzLTEuOS42IC0+IDEuOS43CisKKyogY29ycmVjdGVkIHJldHVybiB2YWx1ZXMgb2Ygc2V0dXB0ZXJtKCkKKyogRml4ZWQgc29tZSBidWdzIGluIHRwdXQgKGl0IGRvZXMgcGFkZGluZyBub3cpCisqIGZpeGVkIGEgYnVnIGluIHRpYyB0aGF0IG1hZGUgaXQgZG8gdGhlIHdyb25nIHRoaW5nIG9uIGVudHJpZXMgd2l0aCBtb3JlIHRoYW4KKyAgb25lIGB1c2UnIGNhcGFiaWxpdHkuCisqIGNvcnJlY3RlZCB0aGUgc2NyZWVuLXNpemUgY2FsY3VsYXRpb24gYXQgc3RhcnR1cCB0aW1lIHRvIGFsdGVyIHRoZQorICBudW1lcmljIGNhcGFiaWxpdGllcyBhcyBwZXIgU1ZyNCwgbm90IGp1c3QgTElORVMgYW5kIENPTFMuCisqIHRvZSgxKSBpbnRyb2R1Y2VkOyBkb2VzIHdoYXQgaW5mb2NtcCAtVCB1c2VkIHRvLgorKiB0aWMoMSkgY2FuIG5vdyB0cmFuc2xhdGUgQUlYIGJveDEgYW5kIGZvbnRbMDEyM10gY2FwYWJpbGl0aWVzLgorKiB0aWMgdXNlcyBtdWNoIGxlc3MgY29yZSwgdGhlIGRvdGljLnNoIGtsdWdlIGNhbiBnbyBhd2F5IG5vdy4KKyogZml4IHJlYWRfZW50cnkoKSBhbmQgd3JpdGVfZW50cnkoKSB0byBwYXNzIHRocm91Z2ggY2FuY2VsbGVkIGNhcGFiaWxpdGllcyBPSy4KKyogQWRkICRIT01FLy50ZXJtaW5mbyBhcyBzb3VyY2UvdGFyZ2V0IGRpcmVjdG9yeSBmb3IgdGVybWluZm8gZW50cmllcy4KKyogdGVybWNhcCBjb21waWxhdGlvbiBub3cgYXV0b21hdGljYWxseSBkdW1wcyBhbiBlbnRyeSB0byAkSE9NRS8udGVybWluZm8uCisqIGFkZGVkIC1oIG9wdGlvbiB0byB0b2UoMSkuCisqIGFkZGVkIC1SIG9wdGlvbiB0byB0aWMoMSkgYW5kIGluZm9jbXAoMSkuCisqIGFkZGVkIGZhbGxiYWNrLWVudHJ5LWxpc3QgZmVhdHVyZS4KKyogYWRkZWQgLWkgb3B0aW9uIHRvIGluZm9jbXAoMSkuCisqIGRvIGEgYmV0dGVyIGpvYiBhdCBkZXRlY3RpbmcgaWYgd2UncmUgb24gU0NPLgorCisjIyMgbmN1cnNlcy0xLjkuNSAtPiAxLjkuNgorCisqIGhhbmRsaW5nIG9mIFRFUk1DQVAgZW52aXJvbm1lbnQgdmFyaWFibGVzIG5vdyB3b3JrcyBjb3JyZWN0bHkuCisqIHZhcmlvdXMgY2hhbmdlcyB0byBzaG9ydGVuIHRlcm1jYXAgdHJhbnNsYXRpb25zIHRvIGxlc3MgdGhhdCAxMDI0IGNoYXJzLgorKiB0c2V0KDEpIGFkZGVkCisqIG1vdXNlIHN1cHBvcnQgZm9yIHh0ZXJtLgorKiBtb3N0IGRhdGEgdGFibGVzIGFyZSBub3cgY29uc3QgYW5kIGFjY29yZGluZ2x5IGxpdmUgaW4gc2hhcmVhYmxlIHRleHQgc3BhY2UuCisqIE9iZXkgdGhlIFhQRzQvU1ZyNCBwcmFjdGljZSB0aGF0IGVjaG8oKSBpcyBpbml0YWxseSBvZmYuCisqIHRpYyBpcyBtdWNoIGJldHRlciBhdCB0cmFuc2xhdGluZyBYRU5JWCBhbmQgQUlYIHRlcm1jYXAgZW50cmllcyBub3cuCisqIHRpYyBjYW4gaW50ZXJwcmV0IGtvIGNhcGFiaWxpdGllcyBub3cuCisqIGludGVncmF0ZWQgSnVlcmdlbiBQZmVpZmVyJ3MgZm9ybXMgbGlicmFyeS4KKyogdGF1Z2h0IHdyaXRlX2VudHJ5KCkgaG93IG5vdCB0byB3cml0ZSBtb3JlIHRoYW4gaXQgbmVlZHMgdG87IHRoaXMgY2hhbmdlCisgIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIHRlcm1pbmZvIHRyZWUgYnkgYSBmdWxsIDI2JSEKKyogaW5mb2NtcCAtVCBvcHRpb24gYWRkZWQuCisqIGJldHRlciB3YXJuaW5ncyBhYm91dCBoaXN0b3JpY2FsIHRpYyBxdWlya3MgZnJvbSB0aWMuCisKKyMjIyBuY3Vyc2VzIDEuOS40IC0+IDEuOS41CisKKyogbWVudXMgbGlicmFyeSBpcyBub3cgaW5jbHVkZWQgd2l0aCBkb2N1bWVudGF0aW9uLgorKiBsaWJfbXZjdXIgaGFzIGJlZW4gY2FyZWZ1bGx5IHByb2ZpbGVkIGFuZCB0dW5lZC4KKyogRml4ZWQgYSBeWi1oYW5kbGluZyBidWcgdGhhdCB3YXMgdGFua2luZyBseW54KDEpLgorKiBISiBMdSdzIHBhdGNoZXMgZm9yIEVMRiBzaGFyZWQgbGlicmFyaWVzIHVuZGVyIExpbnV4CisqIHRlcm1pbmZvLnNyYyA5LjguMgorKiB0d2Vha3MgZm9yIGNvbXBpbGluZyBpbiBzZXBlcmF0ZSBkaXJlY3Rvcmllcy4KKyogVGhvbWFzIERpY2tleSdzIHBhdGNoZXMgdG8gc3VwcG9ydCBOZVhUJ3MgYnJhaW4tZGVhZCBsaW5rZXIKKyogRXJpYyBSYXltb25kJ3MgcGF0Y2hlcyB0byBmaXggcHJvYmxlbXMgd2l0aCBsb25nIHRlcm1jYXAgZW50cmllcy4KKyogbW9yZSBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIHVuZGVyIFN1bk9TIGFuZCBJUklYLgorCisjIyMgbmN1cnNlcyAxLjkuMyAtPiAxLjkuNAorCisqIGZpeGVkIGFuIHVuZGVmaW5lZC1vcmRlci1vZi1ldmFsdWF0aW9uIGJ1ZyBpbiBsaWJfYWNzLmMKKyogc3lzdGVtYXRpY2FsbHkgZ2F2ZSBub24tQVBJIHB1YmxpYyBmdW5jdGlvbnMgYW5kIGRhdGEgYW4gX25jXyBwcmVmaXguCisqIGludGVncmF0ZWQgSnVlcmdlbiBQZmVpZmVyJ3MgbWVudSBjb2RlIGludG8gdGhlIGRpc3RyaWJ1dGlvbi4KKyogdG90YWxseSByZXdyb3RlIHRoZSBrbmlnaHQgdGVzdCBnYW1lJ3MgaW50ZXJmYWNlCisKKyMjIyBuY3Vyc2VzIDEuOS4yYyAtPiAxLjkuMworCisqIGZpeGVkIHRoZSBURVJNQ0FQX0ZJTEUgU3VwcG9ydC4KKyogZml4ZWQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gc2Nyb2xsaW5nIGNvZGUKKyogYWRkZWQgdHJhY2VtdW5jaCB0byB0aGUgdGVzdCB0b29scworKiB0b29rIHN0ZXBzIHRvIGN1dCB0aGUgcnVubmluZyB0aW1lIG9mIG1ha2UgaW5zdGFsbC5kYXRhCisKKyMjIyBuY3Vyc2VzIDEuOS4yYyAtPiAxLjkuMmQKKworKiByZXZpc2VkICdjb25maWd1cmUnIHNjcmlwdCB0byBwcm9kdWNlIGxpYnJhcmllcyBmb3Igbm9ybWFsLCBkZWJ1ZywKKyAgcHJvZmlsZSBhbmQgc2hhcmVkIG9iamVjdCBtb2RlbHMuCisKKyMjIyBuY3Vyc2VzIDEuOS4xIC0+IDEuOS4yCisKKyogdXNlICdhdXRvY29uZicgdG8gaW1wbGVtZW50ICdjb25maWd1cmUnIHNjcmlwdC4KKyogcGFuZWxzIHN1cHBvcnQgYWRkZWQKKyogdGljIG5vdyBjaGVja3MgZm9yIGV4Y2Vzc2l2ZWx5IGxvbmcgdGVybWNhcCBlbnRyaWVzIHdoZW4gZG9pbmcgdHJhbnNsYXRpb24KKyogZmlyc3QgY3V0IGF0IGVsaW1pbmF0aW5nIG5hbWVzcGFjZSBwb2xsdXRpb24uCisKKyMjIyBuY3Vyc2VzIDEuOC45IC0+IDEuOQorCisqIGNsZWFudXAgZ2NjIHdhcm5pbmdzIGZvciB0aGUgZm9sbG93aW5nOiB1c2Ugc2l6ZV90IHdoZXJlICdpbnQnIGlzIG5vdAorICBhcHByb3ByaWF0ZSwgZml4ZWQgc29tZSBzaGFkb3dlZCB2YXJpYWJsZXMsIGNoYW5nZSBhdHRyX3QgdG8gY29tcGF0aWJsZSB3aXRoCisgIGNodHlwZSwgdXNlIGF0dHJfdCBpbiBzb21lIHBsYWNlcyB3aGVyZSBpdCB3YXMgY29uZnVzZWQgd2l0aCAnaW50Jy4KKyogdXNlIGNodHlwZS9hdHRyX3QgY2FzdHMgYXMgYXBwcm9wcmlhdGUgdG8gZW5zdXJlIHBvcnRhYmlsaXR5IG9mIG1hc2tpbmcKKyAgb3BlcmF0aW9ucy4KKyogYWRkZWQtYmFjayB3YWRkY2huc3RyKCkgdG8gbGliX2FkZHN0ci5jIChpdCBoYWQgYmVlbiBkZWxldGVkKS4KKyogc3VwcGxpZWQgbWlzc2luZyBwcm90b3R5cGVzIGluIGN1cnNlcy5oCisqIGluY2x1ZGUgPHRlcm1jYXAuaD4gaW4gbGliX3Rlcm1jYXAuYyB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdG90eXBlcworICBhcmUgY29uc2lzdGVudCAodGhleSB3ZXJlbid0KS4KKyogY29ycmVjdGVkIHByb3RvdHlwZSBvZiB0cHV0cyBpbiA8dGVybWNhcC5oPgorKiByZXdyb3RlIHZhcmFyZ3MgcGFyc2luZyBpbiBsaWJfdHBhcm0uYyAodG8gYXZvaWQgcmVmZXJlbmNpbmcgbWVtb3J5CisgIHRoYXQgbWF5IGJlIG91dCBvZiBib3VuZHMgb24gdGhlIHN0YWNrKSAtLSBQdXJpZnkgZm91bmQgdGhpcy4KKyogZW5zdXJlIHRoYXQgVFJBQ0UgaXMgZGVmaW5lZCBpbiBsaWJfdHJhY2UuYyAodG8gc29sdmUgcHJvdG90eXBlCisgIHdhcm5pbmdzIGZyb20gZ2NjKS4KKyogY29ycmVjdGVkIHNjcm9sbGluZy1yZWdpb24gc2l6ZSBpbiAnbXZjdXJfd3JhcCgpJworKiBtb3JlIHNwZWxsaW5nIGZpeGVzCisqIHVzZSAnY2FsbG9jKCknIHRvIGFsbG9jYXRlIFdJTkRPVyBzdHJ1Y3QgaW4gbGliX25ld3dpbi5jIChQdXJpZnkpLgorKiBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgU1AtPl9vZnAgaW4gbGliX3NldF90ZXJtLmMgKG90aGVyd2lzZSBTdW5PUyBkdW1wcworICBjb3JlIGluIGluaXRfYWNzKCkpLgorKiBpbmNsdWRlIDxlcnJuby5oPiBpbiB3cml0ZV9lbnRyeS5jIChtb3N0ICJicmFpbmRlYWQiIGluY2x1ZGVzIGRlY2xhcmUgZXJybm8KKyAgaW4gdGhhdCBmaWxlKS4KKworIyMjIG5jdXJzZXMgMS44LjggLT4gMS44LjkKKworKiBjb21waWxlIChtb3N0bHkpIGNsZWFuIHdpdGggZ2NjIDIuNS44IC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdjb252ZXJzaW9uIGFuZCB1c2luZyBfX2F0dHJpYnV0ZV9fIHRvIGZsdXNoIG91dAorICBub24tcG9ydGFibGUgdXNlIG9mICIleCIgZm9yIHBvaW50ZXJzLCBvciBmb3IgY2h0eXBlIGRhdGEgKHdoaWNoIGlzIGRlY2xhcmVkCisgIGFzIGEgbG9uZykuCisqIG1vZGlmaWVkIGRvdXBkYXRlIHRvIGVuc3VyZSB0aGF0IHR5cGFoZWFkIHdhcyB0dXJuZWQgb24gYmVmb3JlIGF0dGVtcHRpbmcKKyAgc2VsZWN0LWNhbGwgKG90aGVyd2lzZSwgc29tZSBpbXBsZW1lbnRhdGlvbnMgaGFuZykuCisqIGFkZGVkIHRyYWNlIG1hc2sgVFJBQ0VfRklGTywgdXNlIHRoaXMgaW4gbGliX2dldGNoLmMgdG8gYWxsb3cgZmluZXIKKyAgcmVzb2x1dGlvbiBvZiB0cmFjZXMuCisqIGltcHJvdmVkIGJvdW5kcyBjaGVja2luZyBvbiBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9ucy4KKyogdGhlIGRhdGEgZGlyZWN0b3J5IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBuZXcgbWFzdGVyIHRlcm1pbmZvIGZpbGUuCisqIC1GIGZpbGUtY29tcGFyaXNvbiBvcHRpb24gYWRkZWQgdG8gaW5mb2NtcC4KKyogY29tcGF0aWJpbGl0eSB3aXRoIFhTSSBDdXJzZXMgaXMgbm93IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBiYWdlcy4KKyogd3N5bmN1cC93c3luY2Rvd24gZnVuY3Rpb25zIGFyZSByZWxpYWJsZSBub3c7IHN1YndpbmRvdyBjb2RlIGluIGdlbmVyYWwKKyAgaXMgbXVjaCBsZXNzIGZsYWt5LgorKiBjYXBhYmlsaXRpZXMgfm1zZ3IsIHRpbGRlX2dsaXRjaCwgaW5zZXJ0X3BhZGRpbmcsIGdlbmVyaWNfdHlwZSwgbm9fcGFkX2NoYXIsCisgIG1lbW9yeV9hYm92ZSwgbWVtb3J5X2JlbG93LCBhbmQgaGFyZF9jb3B5IGFyZSBub3cgdXNlZCBwcm9wZXJseS4KKyogY3Vyc29yLW1vdmVtZW50IG9wdGltaXphdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWx5IHJld3JpdHRlbi4KKyogdmVydGljYWwtbW92ZW1lbnQgb3B0aW1pemF0aW9uIG5vdyB1c2VzIGhhcmR3YXJlIHNjcm9sbGluZywgaWwsIGRsLgorCisjIyMgbmN1cnNlcyAxLjguNyAtPiAxLjguOAorKiB1bnRpYyBubyBsb25nZXIgZXhpc3RzLCBpbmZvY21wIHJlcGxhY2VzIGl0LgorKiB0aWMgY2FuIHVuZGVyc3RhbmQgdGVybWNhcCBub3csIGVzcGVjaWFsbHkgaWYgaXQgaXMgY2FsbGVkIGNhcHRvaW5mby4KKyogVGhlIExpbnV4IFN0YW5kYXJkIENvbnNvbGUgdGVybWluZm8gZW50cnkgaXMgY2FsbGVkIGxpbnV4IGluc2VhZCBvZiBjb25zb2xlLgorICBJdCBhbHNvIHVzZXMgdGhlIGtlcm5lbCdzIG5ldyBtZXRob2Qgb2YgY2hhbmdpbmcgY2hhcnNldHMuCisqIGluaXRzY3IoKSB3aWxsIEVYSVQgdXBvbiBlcnJvciAoYXMgdGhlIGRvY3Mgc2F5KSBUaGlzIHdpbCBtb3N0bHkgaGFwcGVuIGlmCisgIHlvdSB0cnkgdG8gcnVuIG9uIGFuIHVuZGVmaW5lZCB0ZXJtaW5hbC4KKyogSSBjYW4gZ2V0IHRoaW5ncyBydW5uaW5nIG9uIEFJWCBidXQgdGljIGNhbid0IGNvbXBpbGUgdGVybWluZm8uIEkgaGF2ZSB0bworICBjb21waWxlIGVudHJpZXMgb24gYW5vdGhlciBtYWNoaW5lLiBWb2x1bnRlZXJzIHRvIGh1bnQgdGhpcyBidWcgYXJlIHdlbGNvbWUuCisqIHdia2dkKCkgYW5kIHdia2dkc2V0KCkgY2FuIGJlIHVzZWQgdG8gc2V0IGEgd2luZG93cyBiYWNrZ3JvdW5kIHRvIGNvbG9yLgorICB3Y2xlYXIoKS93ZXJhc2UoKSBETyBOT1QgdXNlIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB0byBjbGVhciB0aGUgc2NyZWVuLgorICBUaGlzIGlzIHRoZSB3YXkgU1ZSNCBjdXJzZXMgd29ya3MuIFBEQ3Vyc2VzIDIuMSBpcyBicm9rZW4gaW4gdGhpcyByZXNwZWN0LAorICB0aG91Z2ggUERDdXJzZXMgMi4yIGhhcyBiZWVuIGZpeGVkLgorKiBjbGVhbmVkIHVwIHRoZSB0ZXN0LyBkaXJlY3RvcnkuCisqIHRlc3Qvd29ybSB3aWxsIHNlZ2ZhdWx0IGFmdGVyIHF1aXRlIGEgd2hpbGUuCisqIG1hbnkgc3BlbGxpbmcgY29ycmVjdGlvbnMgY291cnRlc3kgb2YgVGhvbWFzIEUuIERpY2tleQorCisjIyMgbmN1cnNlcyAxLjguNiAtPiAxLjguNworKiBjbGVhbmVkIHVwIHByb2dyYW1zIGluIHRlc3QvIGRpcmVjdG9yeS4KKyogZml4ZWQgd2JrZ2RzZXQoKSBtYWNyby4KKyogbW9kaWZpZWQgZ2V0c3RyKCkgdG8gc3RvcCBpdCBmcm9tIGFkdmFuY2luZyBjdXJzb3IgaW4gbm9lY2hvIG1vZGUuCisqIG1vZGlmaWVkIGxpbnV4IHRlcm1pbmZvIGVudHJ5IHRvIHdvcmsgd2l0aCB0aGUgbGF0ZXN0IGtlcm5lbCB0byBnZXQKKyAgdGhlIGNvcnJlY3QgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQuCisqIGFsc28gYWRkZWQgYSBsaW51eC1tb25vIGVudHJ5IGZvciB0aG9zZSBydW5uaW5nIG9uIG1vbm9jaHJvbWUgc2NyZWVucy4KKyogY2hhbmdlZCBpbml0c2NyKCkgc28gdGhhdCBpdCBiZWhhdmVzIGxpa2UgdGhlIG1hbiBwYWdlIHNheXMgaXQgZG9lcy4KKyAgdGhpcyBmaXhlcyB0aGUgcHJvYmxlbSB3aXRoIHByb2dyYW1zIGluIHRlc3QvIGNyYXNoaW5nIHdpdGggU0lHU0VWIGlmCisgIGEgdGVybWluYWwgaXMgdW5kZWZpbmVkLgorKiBtb2RpZmllZCBhZGRjaCgpIHRvIGF2b2lkIHVzaW5nIGFueSB0ZXJtLmggI2RlZmluZSdzCisqIHJlbW92ZWQgZHVwbGljYXRlIHRnb3RvKCkgaW4gbGliX3RwYXJtLmMKKyogbW9kaWZpZWQgZHVtcF9lbnRyeS5jIHNvIHRoYXQgaW5mb2NtcCBkZWFscyBjb3JyZWN0bHkgd2l0aCAnLCcgaW4gYWNzYworKiBtb2RpZmllZCBkZWx3aW4oKSB0byBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0aW5nIHN1YndpbmRvd3MuCisqIGZpeGVkIE1ha2VmaWxlLmRpc3QgdG8gc3RvcCBpbnN0YWxsaW5nIGFuIGVtcHR5IGN1cnNlcy5oCisqIGZpeGVkIGEgY291cGxlIG9mIG91dC1vZi1kYXRlIG5vdGVzIGluIG1hbiBwYWdlcy4KKworIyMjIG5jdXJzZXMgMS44LjUgLT4gMS44LjYKKyogSW1wbGVtZW50ZWQgd2JrZ2QoKSwgYmtnZCgpLCBia2dkc2V0KCksIGFuZCB3YmtnZHNldCgpLgorKiBUaGUgaGFuZGxpbmcgb2YgYXR0cmlidXRlcyBoYXMgYmVlbiBpbXByb3ZlZCBhbmQgbm93IGRvZXMgbm90IHR1cm4gb2ZmIGNvbG9yCisgIGlmIG90aGVyIGF0dHJpYnV0ZXMgYXJlIHR1cm5lZCBvZmYuCisqIHNjcm9sbGluZyBjb2RlIGlzIGltcHJvdmVkLiBTY3JvbGxpbmcgaW4gc3Vid2luZG93cyBpcyBzdGlsbCBicm9rZW4uCisqIEZpeGVzIHRvIHNldmVyYWwgYnVncyB0aGF0IG1hbmlmZXN0IHRoZW0gb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gTGludXguCisqIFRoZSBkZWZhdWx0IHRvIG1ldGEgbm93IGRlcGVuZHMgb24gdGhlIHN0YXR1cyBvZiB0aGUgdGVybWluYWwgd2hlbiBuY3Vyc2VzCisgIGlzIHN0YXJ0ZWQuCisqIFRoZSBpbnRlcmZhY2UgdG8gdGhlIHRyYWNpbmcgZmFjaWxpdHkgaGFzIGNoYW5nZWQuICBJbnN0ZWFkIG9mIHRoZSBwYWlyIG9mCisgIGZ1bmN0aW9ucyB0cmFjZW9uKCkgYW5kIHRyYWNlb2ZmKCksIHRoZXJlIGlzIGp1c3Qgb25lIGZ1bmN0aW9uIHRyYWNlKCkgd2hpY2gKKyAgdGFrZXMgYSB0cmFjZSBtYXNrIGFyZ3VtZW50LiAgVGhlIHRyYWNlIG1hc2tzLCBkZWZpbmVkIGluIGN1cnNlcy5oLCBhcmUKKyAgYXMgZm9sbG93czoKKworCSNkZWZpbmUgVFJBQ0VfRElTQUJMRSAgIDB4MDAgICAgLyogdHVybiBvZmYgdHJhY2luZyAqLworCSNkZWZpbmUgVFJBQ0VfT1JESU5BUlkgIDB4MDEgICAgLyogb3JkaW5hcnkgdHJhY2UgbW9kZSAqLworCSNkZWZpbmUgVFJBQ0VfQ0hBUlBVVCAgIDB4MDIgICAgLyogYWxzbyB0cmFjZSBhbGwgY2hhcmFjdGVyIG91dHB1dHMgKi8KKwkjZGVmaW5lIFRSQUNFX01BWElNVU0gICAweDBmICAgIC8qIG1heGltdW0gdHJhY2UgbGV2ZWwgKi8KKworICBNb3JlIHRyYWNlIG1hc2tzIG1heSBiZSBhZGRlZCwgb3IgdGhlc2UgbWF5IGJlIGNoYW5nZWQsIGluIGZ1dHVyZSByZWxlYXNlcy4KKyogVGhlIHBhZCBjb2RlIGhhcyBiZWVuIGltcHJvdmVkIGFuZCB0aGUgcGFkIHRlc3QgY29kZSBpbiB0ZXN0L25jdXJzZXMuYyBoYXMKKyAgYmVlbiBpbXByb3ZlZC4KKyogVGhlIHByb3RvdHlwZSBhbnNpIGVudHJ5IGhhcyBiZWVuIGNoYW5nZWQgdG8gd29yayB3aXRoIGEgd2lkZXIgdmFyaWV0eQorICBvZiBlbXVsYXRvcnMuCisqIEZpeCB0byB0aGUgcHJvdG90eXBlIGFuc2kgZW50cnkgdGhhdCBlbmFibGVzIGl0IHRvIHdvcmsgd2l0aCBQQyBlbXVsYXRvcnMKKyAgdGhhdCB0cmVhdCB0cmFpbGluZyAiO20iIGluIGEgaGlnaGxpZ2h0IHNlcXVlbmNlIGFzICI7MG0iOyB0aGlzIGRvZXNuJ3QKKyAgYnJlYWsgb3BlcmF0aW9uIHdpdGggYW55IGVtdWxhdG9ycy4KKyogVGhlcmUgYXJlIG5vdyB3b3JraW5nIGluZm9jbXAsIGNhcHRvaW5mbywgdHB1dCwgYW5kIHRjbGVhciB1dGlsaXRpZXMuCisqIHRpYyBjYW4gbm93IGNvbXBpbGUgZW50cmllcyBpbiB0ZXJtY2FwIHN5bnRheC4KKyogQ29yZS1kdW1wIGJ1ZyBpbiBwbm91dHJlZnJlc2ggZml4ZWQuCisqIFdlIG5vdyByZWNvZ25pemUgYW5kIGNvbXBpbGUgYWxsIHRoZSBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMgaW4gUm9zcworICBSaWRnZSdzIG15dGluZm8gcGFja2FnZSAocmVuZGVyaW5nIGl0IG9ic29sZXRlKS4KKyogR2VuZXJhbCBjbGVhbnVwIGFuZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cy4KKyogRml4ZXMgYW5kIGFkZGl0aW9ucyB0byB0aGUgaW5zdGFsbGF0aW9uLWRvY3VtZW50YXRpb24gZmlsZXMuCisqIFRha2UgY3Vyc29yIHRvIG5vcm1hbCBtb2RlIG9uIGVuZHdpbi4KKworIyMjIG5jdXJzZXMgMS44LjQgLT4gMS44LjUKKyogc2VyaW91cyBidWdzIGluIHVwZGF0aW5nIHNjcmVlbiB3aGljaCBjYXVzZWQgZXJyYXRpYyBub24tZGlzcGxheSwKKyAgZml4ZWQuCisqIGZpeGVkIGluaXRpYWxpemF0aW9uIGZvciBnZXRjaCgpIHJlbGF0ZWQgdmFyaWFibGUgd2hpY2ggY2F1c2UKKyAgdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorKiBmaXhlZCBhbm90aGVyIGRvdXBkYXRlIGJ1ZyB3aGljaCBvbmx5IGFwcGVhcmVkIGlmIHlvdSBoYXZlCisgIHBhcm1fY2hhci4KKyogaW1wbGVtZW50ZWQgcmVkcmF3bG4oKSBhbmQgcmVkcmF3d2luKCkuCisqIGltcGxlbWVudGVkIHdpbnNuc3RyKCkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorKiBjbGVhbmVkIHVwIGluc2VydGxuKCkgYW5kIGRlbGV0ZWxuKCkgYW5kIGltcGxlbWVudGVkICh3KWluc2RlbG4oKS4KKyogY2hhbmdlZCBNYWtlZmlsZS5kaXN0IHNvIHRoYXQgaW5zdGFsbGF0aW9uIG9mIG1hbiBwYWdlcyB3aWxsCisgIHRha2Ugbm90ZSBvZiB0aGUgdGVybWluZm8gZGlyZWN0b3J5LgorKiBmaXhlZCBDb25maWd1cmUgKHJlbW92ZWQgdGhlIG15c3RlcmlvdXMgJ1gnKS4KKyogRXJpYyBTLiBSYXltb25kIGZpeGVkIHRoZSBzY3JpcHQuKiBmaWxlcyBzbyB0aGF0IHRoZXkgd29yayB3aXRoCisgIHN0b2NrIGF3ay4KKworIyMjIyBuY3Vyc2VzIDEuOC4zIC0+IDEuOC40ICMjIyMgIyMjIworKiBmaXhlZCBidWcgaW4gcmVmcmVzaGluZyB0aGUgc2NyZWVuIGFmdGVyIHJldHVybiBmcm9tIHNoZWxsX21vZGUuCisgIFRoZXJlIGFyZSBzdGlsbCBwcm9ibGVtcyBidXQgdGhleSBkb24ndCBtYW5pZmVzdCB0aGVtc2VsdmVzIG9uCisgIG15IG1hY2hpbmUgKExpbnV4IDAuOTkuMTRmKS4KKyogYWRkZWQgd2dldG5zdHIoKSBhbmQgbW9kaWZpZWQgdGhpbmdzIGFjY29yZGluZ2x5LgorKiBmaXhlZCB0aGUgc2NyaXB0LnNyYyBzY3JpcHQudGVzdCB0byB3b3JrIHdpdGggYXdrIG5vdCBqdXN0IGdhd2suCisqIENvbmZpZ3VyZSBjYW4gbm93IHRha2UgYW4gYXJndW1lbnQgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisqIGFkZGVkIHRlc3QvbmN1cnNlcy5jIHdoaWNoIHJlcGxhY2VzIHNldmVyYWwgb3RoZXIgcHJvZ3JhbXMgYW5kCisgIHBlcmZvcm1zIG1vcmUgdGVzdGluZy4KK1tUaGFua3MgdG8gRXJpYyBTIFJheW1vbmQgZm9yIHRoZSBsYXN0IDRdCisqIG1vcmUgZml4ZXMgdG8gbGliX292ZXJsYXkuYyBhbmQgYWRkZWQgdGVzdC9vdmVyLmMgdG8gaWxsdXN0cmF0ZQorICBob3cgaXQgd29ya3MuCisqIGZpeGVkIHVuZ2V0Y2goKSB0byB0YWtlIGludCBpbnN0ZWFkIG9mIGNoLgorKiBmaXhlcyB0byBjdXJlIHdnZXRjaCgpIGlmIGZsdXNoaW5wKCkgaXMgY2FsbGVkLgorCitPbmUgbm90ZSBJIGZvcmdvdCB0byBtZW50aW9uIGluIDEuOC4zIGlzIHRoYXQgdHJhY2luZyBpcyBvZmYgYnkKK2RlZmF1bHQgc3RhcnRpbmcgaW4gdGhlIHZlcnNpb24uIElmIHlvdSB3YW50IHRyYWNpbmcgb3V0cHV0LCBwdXQKK3RyYWNlb24oKTsgaW4geW91ciBjb2RlIGFuZCBsaW5rIHdpdGggLWxkY3Vyc2VzLgorCisjIyMjIG5jdXJzZXMgMS44LjIgLT4gbmN1cnNlcyAxLjguMyAjIyMjICMjIyMKK01BSk9SIENIQU5HRVM6CisxKSBUaGUgb3JkZXIgb2YgY2FwYWJpbGl0aWVzIGhhcyBiZWVuIGNoYW5nZWQgaW4gb3JkZXIgdG8gYWNoaWV2ZQorYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBTVlI0IHRlcm1pbmZvIGRhdGFiYXNlLiBUaGlzIGhhcyB0aGUKK3VuZm9ydHVuYXRlIGVmZmVjdCBvZiBicmVha2luZyBhcHBsaWNhdGlvbiBjdXJyZW50bHkgbGlua2VkIHdpdGgKK25jdXJzZXMuIFRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yLCByZWNvbXBpbGUgYWxsIHN1Y2ggcHJvZ3JhbXMuCitNb3N0IHByb2dyYW1zIHVzaW5nIGNvbG9yIG9yIG5ld2VyIGNhcGFiaWxpdGllcyB3aWxsIGJyZWFrLCBvdGhlcnMKK3dpbGwgcHJvYmFibHkgY29udGludWUgdG8gd29yayBvay4KKworMikgUGF2ZWwgQ3VydGlzIGhhcyByZW5vdW5jZWQgaGlzIGNvcHlyaWdodCB0byB0aGUgcHVibGljIGRvbWFpbi4KK1RoaXMgbWVhbnMgdGhhdCBoaXMgb3JpZ2luYWwgc291cmNlcyAocG9zdGVkIHRvIGNvbXAuc291cmNlcy51bml4LAordm9sdW1lIDEpIGFyZSBub3cgaW4gdGhlIHB1YmxpYyBkb21haW4uICBUaGUgY3VycmVudCBzb3VyY2VzIGFyZQorTk9UIGluIHRoZSBwdWJsaWMgZG9tYWluLCB0aGV5IGFyZSBjb3B5cmlnaHRlZCBieSBtZS4gIEknbQorZW50ZXJ0YWluaW5nIGlkZWFzIG9uIHdoYXQgdGhlIG5ldyB0ZXJtcyBuY3Vyc2VzIGlzIHJlbGVhc2VkIHVuZGVyLgorCiszKSBFcmljIFMuIFJheW1vbmQgaGFzIHN1cHBsaWVkIGEgY29tcGxldGUgc2V0IG9mIG1hbiBwYWdlcyBmb3IKK25jdXJzZXMgaW4gP3JvZmYgZm9ybWF0LiBUaGV5IHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIG1vc3Qgb2YgdGhlCitjdXJyZW50IGRvY3MuIEJvdGggc2V0cyBhcmUgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCitPdGhlciBjaGFuZ2VzIGFuZCBub3RlcyBmcm9tIDEuOC4yIGluY2x1ZGU6CisqIFNJR1NFR1YgZHVyaW5nIHNjcm9sbGluZyBubyBsb25nZXIgb2NjdXJzLgorKiBPdGhlciBwcm9ibGVtcyB3aXRoIHNjcm9sbGluZyBhbmQgdXNlIG9mIGlkbCBoYXZlIGJlZW4gY29ycmVjdGVkLgorKiBsaWJfZ2V0Y2guYyBoYXMgYmVlbiByZS13cml0dGVuIGFuZCBzaG91bGQgcGVyZm9ybSBmbGF3bGVzc2x5LgorICBwbGVhc2UgdXNlIHRlc3QvZ2V0Y2guYyBhbmQgYW55IG90aGVyIHByb2dyYW1zIHRvIHRlc3QgdGhpcy4KKyogcmlwb2ZmbGluZSgpIGlzIGltcGxlbWVudGVkIChUaGFua3MgdG8gRXJpYykgYW5kIHNsa18gZnVuY3Rpb25zCisgIGNoYW5nZWQgYWNjb3JkaW5nbHkuCisqIEkndmUgYWRkZWQgc3VwcG9ydCBmb3IgdGVybWluYWxzIHRoYXQgc2Nyb2xsIGlmIHlvdSB3cml0ZSBpbiB0aGUKKyAgYm90dG9tLXJpZ2h0IGNvcm5lci4KKyogZml4ZWQgbW9yZSBidWdzIGluIHBhZHMgY29kZS4gSWYgYW55Ym9keSBoYXMgYSBwcm9ncmFtIHRoYXQgdXNlcworICBwYWRzIEknZCBsb3ZlIGEgY29weS4KKyogY29ycmVjdCBoYW5kbGluZyBmb3IgdGVybWluYWwgd2l0aCBiYWNrX2NvbG9yX2VyYXNlIGNhcGFiaWxpdHkKKyAgKHN1Y2ggYXMgTGludXggY29uc29sZSwgYW5kIG1vc3QgUEMgdGVybWluYWxzKQorKiBeWiBoYW5kbGluZyBhcHBhcmVudGx5IGRpZG4ndCB3b3JrIChJIHNob3VsZCBuZXZlciB0cnVzdCBjb2RlCisgIHNlbnQgbWUgdG8gbWUgd2l0aG91dCBleHRlbnNpdmUgdGVzdGluZykuIEl0IG5vdyBzZWVtcyB0byBiZQorICBmaXhlZC4gTGV0IG1lIGtub3cgaWYgeW91IGhhdmUgcHJvYmxlbXMuCisqIEkndmUgYWRkZWQgc3VwcG9ydCBmb3IgQXBvbGxvIGFuZCBOZVhULCBidXQgaXQgbWF5IHN0aWxsIGJlCisgIGluY29tcGxldGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGxhY2sgb2YgUE9TSVgKKyAgZmVhdHVyZXMuCisqIHNjcm9sbGluZyBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgb24gdGVybWluYWxzIHdpdGggaWRsCisgIGNhcGFiaWxpdGllcy4gUGxlYXNlIHNlZSBzcmMvbGliX3Njcm9sbC5jIGZvciBtb3JlIG5vdGVzLgorKiBUaGUgbGluZSBkcmF3aW5nIHJvdXRpbmVzIHdlcmUgb2Zmc2V0IGJ5IDEgYXQgYm90aCBlbmRzLiBUaGlzCisgIGlzIG5vdyBmaXhlZC4KKyogYWRkZWQgYSBmZXcgbWlzc2luZyBwcm90b3R5cGVzIGFuZCBtYWNyb3MgKGUuZy4gc2V0dGVybSgpKQorKiBmaXhlZCBjb2RlIGluIHNyYy9saWJfb3ZlcmxheS5jIHdoaWNoIHVzZWQgdG8gY3Jhc2guCisqIGFkZGVkIGEgZmV3IG1vcmUgcHJvZ3JhbXMgaW4gdGVzdC8gVGhlIG9uZXMgZnJvbSB0aGUgUERDdXJzZXMKKyAgcGFja2FnZSBhcmUgdXNlZnVsLCBlc3BlY2lhbGx5IGlmIHlvdSBoYXZlIFNWUjQgcHJvcGVyLiBJJ20KKyAgaW50ZXJlc3RlZCBpbiB0aGUgcmVzdWx0cyB5b3UgZ2V0IG9uIHN1Y2ggYSBzeXN0ZW1zIChFcmljPyA7LSkuCisgIFRoZXkgYWxyZWFkeSBleHBvc2VkIGNlcnRhaW4gYnVncyBpbiBuY3Vyc2VzLgorKiBTZWUgc3JjL1JFQURNRSBmb3IgcG9ydGluZyBub3Rlcy4KKyogVGhlIEMrKyBjb2RlIHNob3VsZCByZWFsbHkgcmVwbGFjZSBuY3Vyc2VzLmggaW5zdGVhZCBvZiB3b3JraW5nCisgIGFyb3VuZCBpdC4gSXQgc2hvdWxkIGF2b2lkIG5hbWUtc3BhY2UgY2xhc2hlcyB3aXRoIG50ZXJtLmggKHVzZQorICByb3dzIGluc3RlYWQgb2YgbGluZXMsIGV0Yy4pCisqIFRoZSBDKysgc2hvdWxkIGNvbXBpbGUgb2suIEkndmUgYWRkZWQgZXhwbGljaXQgcnVsZXMgdG8gdGhlCisgIE1ha2VmaWxlIGJlY2F1c2Ugbm8gQysrIGRlZmF1bHRzIGFyZSBkb2N1bWVudGVkIG9uIHRoZSBzdW5zLgorKiBUaGUgZG9jcyBzYXkgdGhhdCBlY2hvKCkgYW5kIG5vY2JyZWFrKCkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKyAgQXQgdGhlIG1vbWVudCBuY3Vyc2VzIHdpbGwgc3dpdGNoIHRvIGNicmVhaygpIGlmIHRoZSBjYXNlIGFib3ZlCisgIG9jY3Vycy4gU2hvdWxkIGl0IGNvbnRpbnVlIHRvIGRvIHNvPyBIb3cgYWJvdXQgZWNobygpIGFuZCBub3JhdygpPworKiBQREN1cnNlcyBzZWVtIHRvIGFzc3VtZSB0aGF0IHdjbGVhcigpIHdpbGwgdXNlIGN1cnJlbnQgYXR0cmlidXRlCisgIHdoZW4gY2xlYXJpbmcgdGhlIHNjcmVlbi4gQWNjb3JkaW5nIHRvIEVyaWMgdGhpcyBpcyBub3QgdGhlIGNhc2UKKyAgd2l0aCBTVlI0LgorKiBJIGhhdmUgZGlzY292ZXJlZCwgdG8gbXkgY2hhZ3JpbiwgU3VuT1MgNC54IChhbmQgcHJvYmFibHkgb3RoZXIgc3lzdGVtcykKKyAgKiBkb2Vzbid0IGhhdmUgdnNzY2FuZiBhbmQgR29kIGtub3dzIHdoYXQgZWxzZSEgIEkndmUgd2lsbCBkbyBhIHZzc2NhbmYoKS4KKyogSSd2ZSBhbHNvIGZvdW5kIG91dCB0aGF0IHRoZSBzcmMvc2NyaXB0LiogcmVseSBvbiBnYXdrIGFuZCB3aWxsIG5vdAorICB3b3JrIHdpdGggc3RvY2sgYXdrIG9yIGV2ZW4gd2l0aCBuYXdrLiBBbnkgY2hhbmdlcyBhcmUgd2VsY29tZS4KKyogTGludXggaXMgbW9yZSB0b2xlcmFudCBvZiBOVUxMIGRlcmVmZXJlbmNlcyB0aGFuIG1vc3Qgc3lzdGVtcy4gVGhpcworICBmYWN0IHdhcyBleHBvc2VkIGJ5IGhhbm9pLgorKiBuY3Vyc2VzIHN0aWxsIHNlZW1zIGluZWZmaWNpZW50IGluIGRyYXdpbmcgdGhlIHNjcmVlbiBvbiBhIHNlcmlhbAorICBsaW5rIGJldHdlZW4gTGludXggYW5kIHN1bnMuIFRoZSBwYWRkaW5nIG1heSBiZSB0aGUgY3VscHJpdC4KKyogVGhlcmUgc2VlbXMgdG8gYmUgb25lIGxpbmdlcmluZyBwcm9ibGVtIHdpdGggZG91cGRhdGUoKSBhZnRlciBzaGVsbGluZworICBvdXQuIERlc3BpdGUgdGhlIGZhY3QgdGhlIGl0IGlzIHNlbmRpbmcgb3V0IHRoZSBjb3JyZWN0IGluZm9ybWF0aW9uCisgIHRvIHRoZSB0ZXJtaW5hbCwgbm90aGluZyB0YWtlcyBlZmZlY3QgdW50aWwgeW91IHByZXNzIF5MIG9yIGFub3RoZXIKKyAgcmVmcmVzaCB0YWtlcyBwbGFjZS4gQW5kIHllcywgb3V0cHV0IGRvZXMgZ2V0IGZsdXNoZWQuCisKKyMjIyMgbmN1cnNlcyAxLjguMSAtPiBuY3Vyc2VzIDEuOC4yICMjIyMgTm92IDI4LCAxOTkzICMjIyMKKworKiBhZGRlZCBzdXBwb3J0IGZvciBTVlI0IGFuZCBCU0RJJ3MgQlNELzM4Ni4KKyogbWFqb3IgdXBkYXRlIGFuZCBmaXggdG8gc2Nyb2xsaW5nIHJvdXRpbmUuCisqIE1PUkUgZml4ZXMgdG8gc3R1ZmYgaW4gbGliX2dldGNoLmMuCisqIGNsZWFuZWQtdXAgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBjYW4gbm93IGdlbmVyYXRlCisJQ29uZmlnLiogZmlsZXMgdGhyb3VnaCBhbiBhd2sgc2NyaXB0LgorKiBjaGFuZ2VkIHNldHVwdGVybSgpIHNvIGl0IGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UsCisJYWRkIGFkZGVkIHNldF9jdXJ0ZXJtKCksIGRlbF9jdXJ0ZXJtKCkuCisqIGEgZmV3IG1pbm9yIGNsZWFudXBzLgorKiBhZGRlZCBtb3JlIHByb3RvdHlwZXMgaW4gY3Vyc2VzLmgKKworIyMjIyBuY3Vyc2VzIDEuOCAtPiBuY3Vyc2VzIDEuOC4xICMjIyMgTm92IDQsIDE5OTMgIyMjIworCisqIGFkZGVkIHN1cHBvcnQgZm9yIE5lWFRTdGVwIDMuMAorKiBhZGRlZCB0ZXJtY2FwIGVtdWxhdGlvbiAobm90IHdlbGwgdGVzdGVkKS4KKyogbW9yZSBjb21wbGV0ZSBDKysgaW50ZXJmYWNlIHRvIG5jdXJzZXMuCisqIGZpeGVkIG92ZXJsYXkoKSwgb3ZlcndyaXRlKCksIGFuZCBhZGRlZCBjb3B5d2luKCkuCisqIGEgY291cGxlIG9mIGJ1ZyBmaXhlcy4KKyogYSBmZXcgY29kZSBjbGVhbnVwcy4KKworIyMjIyBuY3Vyc2VzIDAuNy4yLzAuNy4zIC0+IG5jdXJzZXMgMS44ICMjIyMgQXVnIDMxLCAxOTkzICMjIyMKKworKiBUaGUgYW5ub3lpbmcgbWVzc2FnZSAiY2FuJ3Qgb3BlbiBmaWxlLiIgd2FzIGR1ZSB0byBtaXNzaW5nCisgIHRlcm1pbmZvIGVudHJ5IGZvciB0aGUgdXNlZCB0ZXJtaW5hbC4gSXQgaGFzIG5vdyBiZWVuCisgIHJlcGxhY2VkIGJ5IGEgaG9wZWZ1bGx5IG1vcmUgaGVscGZ1bCBtZXNzYWdlLgorKiBQcm9ibGVtcyB3aXRoIHJ1bm5pbmcgb24gc2VyaWFsIGxpbmVzIGFyZSBub3cgZml4ZWQuCisqIEFkZGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIFN1bk9TLCBMaW51eCwgSFAvVVgsIFVsdHJpeCwKKyAgMzg2YnNkL0JTREkgKGlmIHlvdSBoYXZlIG90aGVycyBzZW5kJ2VtIHRvIG1lKQorKiBDbGVhbmVyIE1ha2VmaWxlLgorKiBUaGUgZG9jdW1lbnRhdGlvbiBpbiBtYW51YWwuZG9jIGlzIG5vdyBtb3JlIHVwdG9kYXRlLgorKiB1cGRhdGUgb3B0aW1pemF0aW9uIGFuZCBzdXBwb3J0IGZvciBocCB0ZXJtaW5hbHMsIGFuZCAzODZic2QKKyAgY29uc29sZSBkcml2ZXIocykuCisqIG12Y3VyIG9wdGltaXphdGlvbiBmb3IgdGVybWluYWxzIHdpdGhvdXQgY3Vyc29yIGFkZHJlc3NpbmcKKyAgKGRvZXNuJ3Qgd29yayBvbiBMaW51eCkKKyogaWYgY3Vyc29yIG1vdmVkIHNpbmNlIGxhc3QgdXBkYXRlLCBnZXRjaCgpIHdpbGwgcmVmcmVzaCB0aGUKKyAgc2NyZWVuIGJlZm9yZSB3b3JraW5nLgorKiBnZXRjaCgpICYgYWxhcm0oKSBjYW4gbm93IGxpdmUgdG9nZXRoZXIuIGluIDAuNy4zIGEgc2lnbmFsCisgIGludGVycnVwdGVkIGdldGNoKCkgKGJ1ZyBvciBmZWF0dXJlPykgbm93IHRoZSBnZXRjaCBpcworICByZXN0YXJ0ZWQuCisqIHNjYW53KCkgZXQgYWxsIHdlcmUgc2ljaywgbm93IGZpeGVkLgorKiBzdXBwb3J0IGZvciA4LWJpdCBpbnB1dCAodXNlIG1ldGEoKSkuCisqIGFkZGVkIGRlZmF1bHQgc2NyZWVuIHNpemUgdG8gYWxsIHRlcm1pbmZvcy4KKyogYWRkZWQgYysrIE5jdXJzZXN3IGNsYXNzLgorKiBzZXZlcmFsIG1pbm9yIGJ1ZyBmaXhlcy4KKworIyMjIyBuY3Vyc2VzIDAuNy4yIC0+IG5jdXJzZXMgMC43LjMgIyMjIyBNYXkgMjcsIDE5OTMgIyMjIworCisqIENvbmZpZyBmaWxlIHRvIGNvcGUgd2l0aCBkaWZmZXJlbnQgcGxhdGZvcm1zICgzODZCU0QsIEJTREksIFVsdHJpeCwgU3VuT1MpCisqIG1vcmUgZml4ZXMgdG8gbGliX2dldGNoLmMKKyogY2hhbmdlcyByZWxhdGVkIHRvIENvbmZpZworCisjIyMjIG5jdXJzZXMgMC43IC0+IG5jdXJzZXMgMC43LjIgIyMjIyBNYXkgMjIsIDE5OTMgIyMjIworCisqIGRvY3MgdXBkYXRlZCBzbGlnaHRseSAoY29sb3IgdXNhZ2UgaXMgbm93IGRvY3VtZW50ZWQpLgorKiB5ZXQgYW5vdGhlciBmaXggZm9yIGdldGNoKCksIHRoaXMgb25lIGZpeGVzIHByb2JsZW1zIHdpdGggRVNDIGJlaW5nIHN3YWxsb3dlZAorICBpZiBhbm90aGVyIGNoYXJhY3RlciBpcyB0eXBlZCBiZWZvcmUgdGhlIDEgc2Vjb25kIHRpbWVvdXQuCisqIEhvcGVmdWxseSwgYWRkc3RyKCkgYW5kIGFkZGNoKCkgYXJlIDgtYml0IGNsZWFuLgorKiBmaXhlZCBsaWJfdHBhcm0uYyB0byB1c2Ugc3RkYXJnLmggKHNob3VsZCBydW4gb24gc3VucyBub3cpCisqIG9yZGVyIG9mIGNhcGFiaWxpdGllcyBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhhdCBzcGVjaWZpZWQgaW4gU1lTVgorICB0aGlzIHdpbGwgYWxsb3cgZm9yIGJpbmFyeS1jb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgdGVybWluZm8gZGJzLgorKiBhZGRlZCBoYWxmZGVsYXkoKQorKiBmaXhlZCBwcm9ibGVtcyB3aXRoIGFzY19pbml0KCkKKyogYWRkZWQgQV9QUk9URUNUIGFuZCBBX0lOVklTCisqIGNsZWFuZWQgdXAgdmlkcHV0cygpCisqIGdlbmVyYWwgY2xlYW51cCBvZiB0aGUgY29kZQorKiBtb3JlIGF0dGVudGlvbiB0byBwb3J0YWJpbGl0eSB0byBvdGhlciBzeXN0ZW1zCisqIGFkZGVkIHRlcm1pbmZvcyBmb3IgaHA3MDA5MiAod29udCB3b3JrIHVudGlsIGNoYW5nZXMgdG8gbGliX3VwZGF0ZS5jIGFyZQorICBtYWRlKSBhbmQgMzg2QlNEIHBjdnQgZHJpdmVycy4KKworVGhhbmtzIHRvIEhlbGxtdXRoIE1pY2hhZWxpcyBmb3IgaGlzIGhlbHAuCitvcHRpbWl6YXRpb24gY29kZSBpcyBzbGF0ZWQgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsIHN0YXkgdHVuZWQhCisKKyMjIyMgbmN1cnNlcyAwLjYvMC42MSAtPiBuY3Vyc2VzIDAuNyAjIyMjIEFwcmlsIDEsIDE5OTMKK1BsZWFzZSBub3RlIHRoYXQgdGhlIG5leHQgcmVsZWFzZSB3aWxsIGJlIGNhbGxlZCAxLjguIElmIHlvdSB3YW50IHRvIGtub3cgYWJvdXQKK3RoZSByYXRpb25hbGUgZHJvcCBtZSBhIGxpbmUuCisKK0luY2x1ZGVkIGFyZSBzZXZlcmFsIHRlc3QgcHJvZ3JhbXMgaW4gdGVzdC8uCitJJ3ZlIHNwbGl0IHVwIHRoZSBwYW5lbHMgbGlicmFyeSwgcmV2ZXJzaSwgdGV0cmlzLCBzb2tvYmFuLiBUaGV5IGFyZSBub3cKK2F2YWlsYWJsZSBzZXBhcmF0ZWx5IGZyb20gbmV0Y29tLmNvbTpwdWIvem1iZW5oYWwvCisKKyogY29sb3IgYW5kIEFDUyBzdXBwb3J0IGlzIG5vdyBmdWxseSBjb21wYXRpYmxlIHdpdGggU1lTViBhdCB0aGUgdGVybWluZm8KKyAgbGV2ZWwuCisqIENhcGFiaWxpdGllcyBub3cgaW5jbHVkZXMgYXMgbWFueSBTWVNWIGNhcHMgSSBjb3VsZCBmaW5kLgorKiB0aWdldGZsYWcsdGlnZXRudW0sdGlnZXRzdHIgZnVuY3Rpb25zIGFkZGVkLgorKiBib29sbmFtZXMsIGJvb2xmbmFtZXMsIGJvb2xjb2RlcyBudW1uYW1lcywgbnVtZm5hbWVzLCBudW1jb2RlcywKKyAgc3RybmFtZXMsIHN0cmZuYW1lcywgc3RyY29kZXMgYXJyYXlzIGFyZSBub3cgYWRkZWQuCisqIGtleW5hbWUoKSBpcyBhZGRlZC4KKyogQWxsIGZ1bmN0aW9uIGtleXMgY2FuIGJlIGRlZmluZWQgaW4gdGVybWluZm8gZW50cmllcy4KKyogZml4ZWQgbGluX3RwYXJtLmMgdG8gYmVoYXZlIHByb3Blcmx5LgorKiB0ZXJtaW5mbyBlbnRyaWVzIGZvciB2dCogYW5kIHh0ZXJtIGFyZSBpbmNsdWRlZCAoaW1wcm92ZW1lbnRzIGFyZSB3ZWxjb21lKQorKiBtb3JlIGF1dG9tYXRpb24gaW4gaGFuZGxpbmcgY2FwcyBhbmQga2V5cy4KKyogaW5jbHVkZWQgZml4ZXMgZnJvbSAwLjYuMQorKiBhZGRlZCBhIGZldyBtb3JlIG1pc3NpbmcgZnVuY3Rpb25zLgorKiBmaXhlZCBhIGNvdXBsZSBvZiBtaW5vciBidWdzLgorKiB1cGRhdGVkIGRvY3MgSlVTVCBhIGxpdHRsZSAoc3RpbGwgbWlsZXMgYmVoaW5kIGluIGRvY3VtZW50aW5nIHRoZSBuZXdlcgorCWZlYXR1cmVzKS4KKworIyMjIyBuY3Vyc2VzIDAuNiAtPiBuY3Vyc2VzIDAuNjEgIyMjIworCisxKSBJbmNsdWRlZCB0aGUgbWlzc2luZyBkYXRhL2NvbnNvbGUuCisKKzIpIGFsbG93IGF0dHJpYnV0ZXMgd2hlbiBkcmF3aW5nIGJveGVzLgorCiszKSBjb3JyZWN0ZWQgdXNhZ2Ugb2Ygd2luLT5fZGVsYXkgdmFsdWUuCisKKzQpIGZpeGVkIGEgYnVnIGluIGxpYl9nZXRjaC5jLiBpZiBpdCBkaWRuJ3QgcmVjb2duaXplIGEgc2VxdWVuY2UgaXQgd291bGQKKwlzaW1wbHkgcmV0dXJuIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc2VxdWVuY2UuIFRoZSBjb3JyZWN0CisJYmVoYXZpb3IgaXMgdG8gcmV0dXJuIHRoZSBlbnRpcmUgc2VxdWVuY2Ugb25lIGNoYXJhY3RlciBhdCBhIHRpbWUuCisKKyMjIyMgbmN1cnNlczAuNSAtPiBuY3Vyc2VzMC42ICMjIyMgTWFyY2ggMSwgMTk5MyAjIyMjCisqIHJlbW92ZWQgX251bWNobmdkIGZyb20gc3RydWN0IF93aW5fc3QgYW5kIG1hZGUgYXBwcm9wcmlhdGUgY2hhbmdlcy4KKyogcmV3cml0dGVuIGtnZXRjaCgpIHRvIHJlbW92ZSBwcm9ibGVtcyB3aXRoIGludGVyYWN0aW9uIGJldHdlZW4gYWxhcm0gYW5kCisgIHJlYWQoKS4gSXQgY2F1c2VkIFNJR1NFR1YgZXZlcnkgbm93IGFuZCB0aGVuLgorKiBmaXhlZCBhIGJ1ZyB0aGF0IG1pc2NvdW50ZWQgdGhlIG51bWJlcnMgb2YgY29sdW1ucyB3aGVuIHVwZGF0aW5nLgorICAoaW4gbGliX2RvdXBkYXRlLmMoQ2xyVXBkYXRlKCkgLS0gaXRlcmF0ZSB0byBjb2x1bW5zIG5vdCBjb2x1bW5zLTEpCisqIGZpeGVkIGEgYnVnIHRoYXQgY2F1c2UgdGhlIGxvd2VyLXJpZ2h0IGNvcm5lciB0byBiZSBpbmNvcnJlY3QuCisgIChpbiBsaWJfZG91cGRhdGUuYyhwdXRDaGFyKCkgLS0gY2hlY2sgYWdhaW5zdCBjb2x1bW5zIG5vdCBjb2x1bW5zLTEpCisqIG1hZGUgcmVzaXplKCkgYW5kIGNsZWFudXAoKSBzdGF0aWMgdG8gbGliX25ld3Rlcm0uYworKiBhZGRlZCBub3RpbWVvdXQoKS4KKyogYWRkZWQgdGltZW91dCgpIGRlZmluZSBpbiBjdXJzZXMuaAorKiBhZGRlZCBtb3JlIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIGZpeGVkIG5hcG1zLgorKiBhZGRlZCB1c2VfZW52KCkuCisqIG1vdmVkIHNjcmVlbiBzaXplIGRldGVjdGlvbiB0byBsaWJfc2V0dXAuYy4KKyogZml4ZWQgbmV3dGVybSgpIHRvIGNvbmZpcm0gdG8gcHJvdG90eXBlLgorKiByZW1vdmVkIFNJR1dJTkNIIHN1cHBvcnQgYXMgU1lTViBkb2VzIG5vdCBkZWZpbmUgaXRzIHNlbWFudGljcy4KKyogY2xlYW5lZC11cCBsaWJfdG91Y2guYworKiBhZGRlZCB3YWRkbnN0cigpIGFuZCByZWxhdGl2ZXMuCisqIGFkZGVkIHNsa18qIHN1cHBvcnQuCisqIGZpeGVkIGEgYnVnIGluIHdkZWxldGVsbigpLgorKiBhZGRlZCBQQU5FTCBsaWJyYXJ5LgorKiBtb2RpZmllZCBNYWtlZmlsZSBmb3Igc21vb3RoZXIgaW5zdGFsbGF0aW9uLgorKiB0ZXJtaW5mby5oIGlzIHJlYWxseSB0ZXJtLmgKKworIyMjIyBuY3Vyc2VzIDAuNCAtPiBuY3Vyc2VzIDAuNSAjIyMjIEZlYiAxNCwgMTk5MyAjIyMjCisqIGNoYW5nZWQgX3dpbl9zdCBzdHJ1Y3R1cmUgdG8gYWxsb3cgc3VwcG9ydCBmb3IgbWlzc2luZyBmdW5jdGlvbmFsaXR5LgorKiBBZGRpdGlvbiBvZiB0ZXJtaW5mbyBzdXBwb3J0IGZvciBhbGwgS0VZXyouCisqIFN1cHBvcnQgZm9yIG5vZGVsYXkoKSwgdGltZW91dCgpLCBub3RpbWVvdXQoKS4KKyogZml4ZWQgYSBidWcgd2l0aCB0aGUga2V5cGFkIGNoYXIgcmVhZGluZyB0aGF0IGRpZCBub3QgcmV0dXJuIEVTQyB1bnRpbAorICBhbm90aGVyIGtleSBpcyBwcmVzc2VkLgorKiBubCBtYXBwaW5nIG5vIGxvbmdlciBvY2N1ciBvbiBvdXRwdXQgKGFzIHNob3VsZCBiZSkKKyAgZml4ZWQgYnVnICdcbicgbm8gY2F1c2luZyBhIExGLgorKiBmaXhlZCBidWcgdGhhdCByZXNldCB0ZXJtaW5hbCBjb2xvcnMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIHVzZSBjb2xvcgorICBvciBub3QuCisqIEJldHRlciBzdXBwb3J0IGZvciBBQ1MgKG5vdCBxdWl0ZSBjb21wbGV0ZSkuCisqIGZpeGVkIGJ1ZyBpbiB3dmxpbmUoKS4KKyogYWRkZWQgY3Vyc19zZXQoKS4KKyogY2hhbmdlZCBmcm9tIHNpZ25hbCgpIHRvIHNpZ2FjdGlvbigpLgorKiByZS1pbmNsdWRlZCB0aGUgY29udGVudHMgb2YgaW1wb3J0YW50LnBhdGNoIGludG8gc291cmNlLgorCisjIyMjIG5jdXJzZXMgMC4zIC0+IG5jdXJzZXMgMC40ICMjIyMgRmViIDMsIDE5OTMgIyMjIworKiBBZGRpdGlvbiBvZiBtb3JlIEtFWV8qIGRlZmluaXRpb25zLgorKiBBZGRpdGlvbiBvZiBmdW5jdGlvbiBwcm90b3R5cGVzLgorKiBBZGRpdGlvbiBvZiBzZXZlcmFsIG1pc3NpbmcgZnVuY3Rpb25zLgorKiBObyBtb3JlIGNyYXNoZXMgaWYgc2NyZWVuIHNpemUgaXMgdW5kZWZpbmVkICh1c2UgU0lHV0lOQ0ggaGFuZGxlcikuCisqIGFkZGVkIGEgaGFuZGxlciB0byBjbGVhbnVwIGFmdGVyIFNJR1NFR1YgKGhvcGVmdWxseSBuZXZlciBuZWVkZWQpLgorKiBjaGFuZ2VkIFNSQ0RJUiBmcm9tIC9ldGMvdGVybSB0byAvdXNyL2xpYi90ZXJtaW5mby4KKyogcmVuYW1lZCBjb21waWxlL2R1bXAgdG8gdGljL3VudGljLgorKiBOZXcgc2Nyb2xsaW5nIGNvZGUuCisqIGZpeGVkIGJ1ZyB0aGF0IHJldmVyc2VkIHRoZSBzZW5zZSBvZiBubCgpIGFuZCBub25sKCkuCisKKyMjIyMgbmN1cnNlcyAwLjIgLT4gbmN1cnNlcyAwLjMgIyMjIyBKYW4gMjAsIDE5OTMgIyMjIworKiBtb3JlIHN1cHBvcnQgZm9yIGNvbG9yIGFuZCBncmFwaGljcyBzZWUgdGVzdC8gZm9yIGV4YW1wbGVzLgorKiBmaXhlZCB2YXJpb3VzIGZpbGVzIHRvIGFsbG93IGNvcnJlY3QgdXBkYXRlIGFmdGVyIHNoZWxsaW5nIG91dC4KKyogbW9yZSBmaXhlcyBmb3IgdXBkYXRlcy4KKyogbm8gbW9yZSBjb3JlIGR1bXBzIGlmIHlvdSBkb24ndCBoYXZlIGEgdGVybWluZm8gZW50cnkuCisqIHN1cHBvcnQgZm9yIExJTkVTIGFuZCBDT0xVTU5TIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyogc3VwcG9ydCBmb3IgU0lHV0lOQ0ggc2lnbmFsLgorKiBhZGRlZCBhIGhhbmRsZXIgZm9yIFNJR0lOVCBmb3IgY2xlYW4gZXhpdHMuCisKKyMjIyMgbmN1cnNlcyAwLjEgLT4gbmN1cnNlcyAwLjIgIyMjIyBBdWcgMTQsIDE5OTIgIyMjIworKiBzdXBwb3J0IGZvciBjb2xvci4KKyogc3VwcG9ydCBmb3IgUEMgZ3JhcGhpYyBjaGFyYWN0ZXJzLgorKiBsaWJfdHJhY2UuYyB1cGRhdGVkIHRvIHVzZSBzdGRhcmcuaCBhbmQgdnByaW50ZiByb3V0aW5lcy4KKyogYWRkZWQgZ2RjLmMgKEdyZWF0IERpZ2l0YWwgQ2xvY2spIGFzIGFuIGV4YW1wbGUgb2YgdXNpbmcgY29sb3IuCisKKyMjIyMgbmN1cnNlcyAtPiBuY3Vyc2VzIDAuMSAjIyMjIEp1bCAzMSwgMTk5MiAjIyMjCisqIHJlcGxhY2luZyBzZ3R0eSBzdHVmZiBieSB0ZXJtaW9zIHN0dWZmLgorKiBBTlNJZmljYXRpb24gb2Ygc29tZSBmdW5jdGlvbnMuCisqIERpc2FibGluZyBjb3N0IGFuYWx5c2lzICdjYXVzZSBpdCdzIGluY29ycmVjdC4KKyogQSBxdWljayBoYWNrIGZvciBhIHRlcm1pbmZvIGVudHJ5LgorCistLSB2aWxlOnR4dG1vZGU6CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiYzM4NQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDIxMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUsdiAxLjIzIDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCVJFQURNRSBmaWxlIGZvciB0aGUgbmN1cnNlcyBwYWNrYWdlCisKK1NlZSB0aGUgZmlsZSBBTk5PVU5DRSBmb3IgYSBzdW1tYXJ5IG9mIG5jdXJzZXMgZmVhdHVyZXMgYW5kIHBvcnRzLgorU2VlIHRoZSBmaWxlIElOU1RBTEwgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYnVpbGQgYW5kIGluc3RhbGwgbmN1cnNlcy4KK1NlZSB0aGUgZmlsZSBORVdTIGZvciBhIHJlbGVhc2UgaGlzdG9yeSBhbmQgYnVnLWZpeCBub3Rlcy4KK1NlZSB0aGUgZmlsZSBUTy1ETyBmb3IgdGhpbmdzIHRoYXQgc3RpbGwgbmVlZCBkb2luZywgaW5jbHVkaW5nIGtub3duIGJ1Z3MuCisKK0Jyb3dzZSB0aGUgZmlsZSBtaXNjL25jdXJzZXMtaW50cm8uaHRtbCBmb3IgbmFycmF0aXZlIGRlc2NyaXB0aW9ucyBvZiBob3cKK3RvIHVzZSBuY3Vyc2VzIGFuZCB0aGUgcGFuZWwsIG1lbnUsIGFuZCBmb3JtIGxpYnJhcmllcy4KKyAKK0Jyb3dzZSB0aGUgZmlsZSBkb2MvaHRtbC9oYWNrZ3VpZGUuaHRtbCBmb3IgYSB0b3VyIG9mIHRoZSBwYWNrYWdlIGludGVybmFscy4KKworUk9BRE1BUCBBTkQgUEFDS0FHRSBPVkVSVklFVzoKKworWW91IHNob3VsZCBiZSByZWFkaW5nIHRoaXMgZmlsZSBpbiBhIGRpcmVjdG9yeSBjYWxsZWQ6ICBuY3Vyc2VzLWQuZCwgd2hlcmUgZC5kCitpcyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciAoc2VlIHRoZSBkaXN0Lm1rIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgZm9yCit0aGF0KS4gIFRoZXJlIHNob3VsZCBiZSBhIG51bWJlciBvZiBzdWJkaXJlY3RvcmllcywgaW5jbHVkaW5nIGBjKysnLCBgZm9ybScsCitgbWFuJywgYG1lbnUnLCBgbWlzYycsIGBuY3Vyc2VzJywgYHBhbmVsJywgYHByb2dzJywgYHRlc3QnLCAndGFjaycgYW5kIGBBZGE5NScuIAorKFRoZSAndGFjaycgcHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSkuCisKK0EgZnVsbCBidWlsZC9pbnN0YWxsIG9mIHRoaXMgcGFja2FnZSB0eXBpY2FsbHkgaW5zdGFsbHMgc2V2ZXJhbCBsaWJyYXJpZXMsIGEKK2hhbmRmdWwgb2YgdXRpbGl0aWVzLCBhbmQgYSBkYXRhYmFzZSBoaWVyYXJjaHkuICBIZXJlIGlzIGFuIGludmVudG9yeSBvZiB0aGUKK3BpZWNlczoKKworVGhlIGxpYnJhcmllcyBhcmU6CisKKwlsaWJuY3Vyc2VzLmEgICAgICAgKG5vcm1hbCkKKwlsaWJuY3Vyc2VzLnNvICAgICAgKHNoYXJlZCkKKwlsaWJuY3Vyc2VzX2cuYSAgICAgKGRlYnVnIGFuZCB0cmFjZSBjb2RlIGVuYWJsZWQpCisJbGlibmN1cnNlc19wLmEgICAgIChwcm9maWxpbmcgZW5hYmxlZCkKKworCWxpYnBhbmVsLmEgICAgICAgICAobm9ybWFsKQorCWxpYnBhbmVsLnNvICAgICAgICAoc2hhcmVkKQorCWxpYnBhbmVsX2cuYSAgICAgICAoZGVidWcgYW5kIHRyYWNlIGNvZGUgZW5hYmxlZCkKKworCWxpYm1lbnUuYSAgICAgICAgICAobm9ybWFsKQorCWxpYm1lbnUuc28gICAgICAgICAoc2hhcmVkKQorCWxpYm1lbnVfZy5hICAgICAgICAoZGVidWcgZW5hYmxlZCkKKworCWxpYmZvcm0uYSAgICAgICAgICAobm9ybWFsKQorCWxpYmZvcm0uc28gICAgICAgICAoc2hhcmVkKQorCWxpYmZvcm1fZy5hICAgICAgICAoZGVidWcgZW5hYmxlZCkKKworSWYgeW91IGNvbmZpZ3VyZSB1c2luZyB0aGUgLS1lbmFibGUtd2lkZWMgb3B0aW9uLCBhICJ3IiBpcyBhcHBlbmRlZCB0byB0aGUKK2xpYnJhcnkgbmFtZXMgKGUuZy4sIGxpYm5jdXJzZXN3LmEpLCBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJpZXMgc3VwcG9ydAord2lkZS1jaGFyYWN0ZXJzLCBlLmcuLCB2aWEgYSBVVEYtOCBsb2NhbGUuICBUaGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMKK2FyZSBjb21wYXRpYmxlIHdpdGggdGhlIG5vbi13aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uOyB3aWRlLWNoYXJhY3RlcgorZmVhdHVyZXMgYXJlIHByb3ZpZGVkIGJ5IGlmZGVmJ3MgaW4gdGhlIGhlYWRlciBmaWxlcy4gIFRoZSB3aWRlLWNoYXJhY3RlcgorbGlicmFyeSBpbnRlcmZhY2VzIGFyZSBub3QgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCB0aGUgbm9uLXdpZGUtY2hhcmFjdGVyCit2ZXJzaW9uLgorCitUaGUgbmN1cnNlcyBsaWJyYXJpZXMgaW1wbGVtZW50IHRoZSBjdXJzZXMgQVBJLiAgVGhlIHBhbmVsLCBtZW51IGFuZCBmb3JtcworbGlicmFyaWVzIGltcGxlbWVudCBjbG9uZXMgb2YgdGhlIFNWcjQgcGFuZWwsIG1lbnUgYW5kIGZvcm1zIEFQSXMuICBUaGUgc291cmNlCitjb2RlIGZvciB0aGVzZSBsaXZlcyBpbiB0aGUgYG5jdXJzZXMnLCBgcGFuZWwnLCBgbWVudScsIGFuZCBgZm9ybScgZGlyZWN0b3JpZXMKK3Jlc3BlY3RpdmVseS4KKworSW4gdGhlIGBjKysnIGRpcmVjdG9yeSwgeW91J2xsIGZpbmQgY29kZSB0aGF0IGRlZmluZXMgYW4gaW50ZXJmYWNlIHRvIHRoZQorY3Vyc2VzLCBmb3JtcywgbWVudXMgYW5kIHBhbmVscyBsaWJyYXJ5IHBhY2thZ2VkIGFzIEMrKyBjbGFzc2VzLCBhbmQgYSBkZW1vIHByb2dyYW0gaW4gQysrCit0byB0ZXN0IGl0LiAgVGhlc2UgY2xhc3MgZGVmaW5pdGlvbiBtb2R1bGVzIGFyZSBub3QgaW5zdGFsbGVkIGJ5IHRoZSAnbWFrZQoraW5zdGFsbC5saWJzJyBydWxlIGFzIGxpYm5jdXJzZXMrKy4KKworSW4gdGhlIGBBZGE5NScgZGlyZWN0b3J5LCB5b3UnbGwgZmluZCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGZvciBhbgorQWRhOTUgYmluZGluZyBvZiB0aGUgY3Vyc2VzIEFQSSwgdG8gYmUgdXNlZCB3aXRoIHRoZSBHTkFUIGNvbXBpbGVyLgorVGhpcyBiaW5kaW5nIGlzIGJ1aWx0IGJ5IGEgbm9ybWFsIHRvcC1sZXZlbCBgbWFrZScgaWYgY29uZmlndXJlIGRldGVjdHMKK2FuIHVzYWJsZSB2ZXJzaW9uIG9mIEdOQVQgKDMuMTEgb3IgYWJvdmUpLiBJdCBpcyBub3QgaW5zdGFsbGVkIGF1dG9tYXRpY2FsbHkuCitTZWUgdGhlIEFkYTk1IGRpcmVjdG9yeSBmb3IgbW9yZSBidWlsZCBhbmQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBhbmQKK2ZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBiaW5kaW5nLgorCitUbyBkbyBpdHMgam9iLCB0aGUgbmN1cnNlcyBjb2RlIG5lZWRzIHlvdXIgdGVybWluYWwgdHlwZSB0byBiZSBzZXQgaW4gdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNIChub3JtYWxseSBzZXQgYnkgeW91ciBPUzsgdW5kZXIgVU5JWCwgZ2V0dHkoMSkKK3R5cGljYWxseSBkb2VzIHRoaXMsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHlvdXIgLnByb2ZpbGUpOyBhbmQsIGl0IG5lZWRzIGEKK2RhdGFiYXNlIG9mIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyBpbiB3aGljaCB0byBsb29rIHVwIHlvdXIgdGVybWluYWwgdHlwZSdzCitjYXBhYmlsaXRpZXMuCisKK0luIG9sZGVyIChWNy9CU0QpIHZlcnNpb25zIG9mIGN1cnNlcywgdGhlIGRhdGFiYXNlIHdhcyBhIGZsYXQgdGV4dCBmaWxlLAorL2V0Yy90ZXJtY2FwOyBpbiBuZXdlciAoVVNHL1VTTCkgdmVyc2lvbnMsIHRoZSBkYXRhYmFzZSBpcyBhIGhpZXJhcmNoeSBvZgorZmFzdC1sb2FkaW5nIGJpbmFyeSBkZXNjcmlwdGlvbiBibG9ja3MgdW5kZXIgL3Vzci9saWIvdGVybWluZm8uICBUaGVzZSBiaW5hcnkKK2Jsb2NrcyBhcmUgY29tcGlsZWQgZnJvbSBhbiBpbXByb3ZlZCBlZGl0YWJsZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGNhbGxlZAorYHRlcm1pbmZvJyBmb3JtYXQgKGRvY3VtZW50ZWQgaW4gbWFuL3Rlcm1pbmZvLjUpLiAgVGhlIG5jdXJzZXMgbGlicmFyeSBjYW4gdXNlCitlaXRoZXIgL2V0Yy90ZXJtY2FwIG9yIHRoZSBjb21waWxlZCBiaW5hcnkgdGVybWluZm8gYmxvY2tzLCBidXQgcHJlZmVycyB0aGUKK3NlY29uZCBmb3JtLgorCitJbiB0aGUgYG1pc2MnIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSB0ZXh0IGZpbGUgdGVybWluZm8uc3JjLCBpbiBlZGl0YWJsZQordGVybWluZm8gZm9ybWF0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGVybWluZm8gYmluYXJpZXMgKHRoYXQncword2hhdCBtYWtlIGluc3RhbGwuZGF0YSBkb2VzKS4gIElmIHRoZSBwYWNrYWdlIHdhcyBidWlsdCB3aXRoIHRoZQorLS1lbmFibGUtdGVybWNhcCBvcHRpb24gZW5hYmxlZCwgYW5kIHRoZSBuY3Vyc2VzIGxpYnJhcnkgY2Fubm90IGZpbmQgYSB0ZXJtaW5mbworZGVzY3JpcHRpb24gZm9yIHlvdXIgdGVybWluYWwsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSB0ZXJtY2FwIGZpbGUgc3VwcGxpZWQKK3dpdGggeW91ciBzeXN0ZW0gKHdoaWNoIHRoZSBuY3Vyc2VzIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGxlYXZlcyBzdHJpY3RseQorYWxvbmUpLgorCitUaGUgdXRpbGl0aWVzIGFyZSBhcyBmb2xsb3dzOgorCisJdGljICAgICAgICAgICAgIC0tIHRlcm1pbmZvIHNvdXJjZSB0byBiaW5hcnkgY29tcGlsZXIKKwlpbmZvY21wICAgICAgICAgLS0gdGVybWluZm8gYmluYXJ5IHRvIHNvdXJjZSBkZWNvbXBpbGVyL2NvbXBhcmF0b3IKKwljbGVhciAgICAgICAgICAgLS0gZW1pdHMgY2xlYXItc2NyZWVuIGZvciBjdXJyZW50IHRlcm1pbmFsCisJdHB1dCAgICAgICAgICAgIC0tIHNoZWxsLXNjcmlwdCBhY2Nlc3MgdG8gdGVybWluYWwgY2FwYWJpbGl0aWVzLgorCXRvZQkJLS0gdGFibGUgb2YgZW50cmllcyB1dGlsaXR5CisJdHNldCAgICAgICAgICAgIC0tIHRlcm1pbmFsLWluaXRpYWxpemF0aW9uIHV0aWxpdHkKKworVGhlIGZpcnN0IHR3byAodGljIGFuZCBpbmZvY21wKSBhcmUgdXNlZCBmb3IgbWFuaXB1bGF0aW5nIHRlcm1pbmZvCitkZXNjcmlwdGlvbnM7IHRoZSBuZXh0IHR3byAoY2xlYXIgYW5kIHRwdXQpIGFyZSBmb3IgdXNlIGluIHNoZWxsIHNjcmlwdHMuICBUaGUKK2xhc3QgKHRzZXQpIGlzIHByb3ZpZGVkIGZvciA0LjRCU0QgY29tcGF0aWJpbGl0eS4gIFRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG9mCit0aGVzZSBsaXZlcyBpbiB0aGUgYHByb2dzJyBkaXJlY3RvcnkuCisKK0RldGFpbGVkIGRvY3VtZW50YXRpb24gZm9yIGFsbCBsaWJyYXJpZXMgYW5kIHV0aWxpdGllcyBjYW4gYmUgZm91bmQgaW4gdGhlCitgbWFuJyBhbmQgYGRvYycgZGlyZWN0b3JpZXMuICBBbiBIVE1MIGludHJvZHVjdGlvbiB0byBuY3Vyc2VzLCBwYW5lbHMsIGFuZAorbWVudXMgcHJvZ3JhbW1pbmcgbGl2ZXMgaW4gdGhlIGBkb2MvaHRtbCcgZGlyZWN0b3J5LiAgTWFucGFnZXMgaW4gSFRNTCBmb3JtYXQKK2FyZSB1bmRlciBgZG9jL2h0bWwvbWFuJy4KKworVGhlIGB0ZXN0JyBkaXJlY3RvcnkgY29udGFpbnMgcHJvZ3JhbXMgdGhhdCBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgb3IKK2RlbW9uc3RyYXRlIHRoZSBmdW5jdGlvbnMgb2YgdGhlIG5jdXJzZXMgbGlicmFyaWVzLiAgU2VlIHRlc3QvUkVBRE1FIGZvcgorZGVzY3JpcHRpb25zIG9mIHRoZXNlIHByb2dyYW1zLiAgTm90YWJseSwgdGhlIGBuY3Vyc2VzJyB1dGlsaXR5IGlzIGRlc2lnbmVkIHRvCitoZWxwIHlvdSBzeXN0ZW1hdGljYWxseSBleGVyY2lzZSB0aGUgbGlicmFyeSBmdW5jdGlvbnMuCisKK0FVVEhPUlM6CisKK1BhdmVsIEN1cnRpczogCisJd3JvdGUgdGhlIG9yaWdpbmFsIG5jdXJzZXMKKworWmV5ZCBNLiBCZW4tSGFsaW06CisJcG9ydCBvZiBvcmlnaW5hbCB0byBMaW51eCBhbmQgbWFueSBlbmhhbmNlbWVudHMuCisKK1Rob21hcyBEaWNrZXkgKG1haW50YWluZXIgZm9yIDEuOS45ZyB0aHJvdWdoIDQuMSwgcmVzdW1pbmcgd2l0aCBGU0YncyA1LjApOgorCWNvbmZpZ3VyYXRpb24gc2NyaXB0cywgcG9ydGluZywgbW9kcyB0byBhZGhlcmUgdG8gWFNJIEN1cnNlcyBpbiB0aGUKKwlhcmVhcyBvZiBiYWNrZ3JvdW5kIGNvbG9yLCB0ZXJtaW5hbCBtb2Rlcy4gIEFsc28gbWVtb3J5IGxlYWsgdGVzdGluZywKKwl0aGUgd3Jlc2l6ZSwgZGVmYXVsdCBjb2xvcnMgYW5kIGtleSBkZWZpbml0aW9uIGV4dGVuc2lvbnMgYW5kIG51bWVyb3VzCisJYnVnIGZpeGVzIChtb3JlIHRoYW4gaGFsZiBvZiB0aG9zZSBlbnVtZXJhdGVkIGluIE5FV1MgYmVnaW5uaW5nIHdpdGgKKwl0aGUgaW50ZXJuYWwgcmVsZWFzZSAxLjguOSkuCisKK0Zsb3JpYW4gTGEgUm9jaGUgKG9mZmljaWFsIG1haW50YWluZXIgZm9yIEZTRidzIG5jdXJzZXMgNC4yKQorCUJlZ2lubmluZyB3aXRoIHJlbGVhc2UgNC4yLCBuY3Vyc2VzIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVC1zdHlsZQorCWxpY2Vuc2UuCisKK0VyaWMgUy4gUmF5bW9uZDoKKwl0aGUgbWFuIHBhZ2VzLCBpbmZvY21wKDEpLCB0cHV0KDEpLCBjbGVhcigxKSwgY2FwdG9pbmZvKDEpLCB0c2V0KDEpLAorCXRvZSgxKSwgbW9zdCBvZiB0aWMoMSksIHRyYWNlIGxldmVscywgdGhlIEhUTUwgaW50cm8sIHdnZXRuc3RyKCkgYW5kCisJbWFueSBvdGhlciBlbnRyeSBwb2ludHMsIHRoZSBjdXJzb3ItbW92ZW1lbnQgb3B0aW1pemF0aW9uLCB0aGUKKwlzY3JvbGwtcGFjayBvcHRpbWl6ZXIgZm9yIHZlcnRpY2FsIG1vdGlvbnMsIHRoZSBtb3VzZSBpbnRlcmZhY2UgYW5kCisJeHRlcm0gbW91c2Ugc3VwcG9ydCwgYW5kIHRoZSBuY3Vyc2VzIHRlc3QgcHJvZ3JhbS4KKworSnVlcmdlbiBQZmVpZmVyCisJVGhlIG1lbnUgYW5kIGZvcm0gbGlicmFyaWVzLCBDKysgYmluZGluZ3MgZm9yIG5jdXJzZXMsIG1lbnVzLCBmb3JtcyBhbmQKKwlwYW5lbHMsIGFzIHdlbGwgYXMgdGhlIEFkYTk1IGJpbmRpbmcuICBPbmdvaW5nIHN1cHBvcnQgZm9yIHBhbmVsLgorCitDT05UUklCVVRPUlM6CisKK0FsZXhhbmRlciBWLiBMdWt5YW5vdgorCWZvciBudW1lcm91cyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvIHRoZSBvcHRpbWl6YXRpb24gbG9naWMuCisKK0RhdmlkIE1hY0tlbnppZQorCWZvciBmaXJzdC1jbGFzcyBidWctY2hhc2luZyBhbmQgbWV0aG9kaWNhbCB0ZXN0aW5nLgorCitSb3NzIFJpZGdlCisJZm9yIHRoZSBjb2RlIHRoYXQgaGFja3MgdGVybWNhcCBwYXJhbWV0ZXJpemVkIHN0cmluZ3MgaW50byB0ZXJtaW5mby4KKworV2FycmVuIFR1Y2tlciBhbmQgR2VyaGFyZCBGdWVybmtyYW56LAorCWZvciB3cml0aW5nIGFuZCBzZW5kaW5nIHRoZSBwYW5lbCBsaWJyYXJ5LgorCitIZWxsbXV0aCBNaWNoYWVsaXMsCisJZm9yIG1hbnkgcGF0Y2hlcyBhbmQgdGVzdGluZyB0aGUgb3B0aW1pemF0aW9uIGNvZGUuCisKK0VyaWMgTmV3dG9uLCBVbHJpY2ggRHJlcHBlciwgYW5kIEFuYXRvbHkgSXZhc3l1azoKKwl0aGUgQysrIGNvZGUuCisKK0pvbmF0aGFuIFJvc3MsCisJZm9yIGxlc3NvbnMgaW4gdXNpbmcgc2VkLgorCitLZWl0aCBCb3N0aWMgKG1haW50YWluZXIgb2YgNC40QlNEIGN1cnNlcykKKwlmb3IgaGVscCwgY3JpdGljaXNtLCBjb21tZW50cywgYnVnLWZpbmRpbmcsIGFuZCBiZWluZyB3aWxsaW5nIHRvCisJZGVlcC1zaXggQlNEIGN1cnNlcyBmb3IgdGhpcyBvbmUgd2hlbiBpdCBncmV3IHVwLgorCitSaWNoYXJkIFN0YWxsbWFuLAorCWZvciBoaXMgY29tbWl0bWVudCB0byBtYWtpbmcgbmN1cnNlcyBmcmVlIHNvZnR3YXJlLgorCitDb3VudGxlc3Mgb3RoZXIgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgYnkgcmVwb3J0aW5nIGJ1Z3MsIHNlbmRpbmcgZml4ZXMsCitzdWdnZXN0aW5nIGltcHJvdmVtZW50cywgYW5kIGdlbmVyYWxseSB3aGluaW5nIGFib3V0IG5jdXJzZXMgOi0pCisKK0JVR1M6CisJU2VlIHRoZSBJTlNUQUxMIGZpbGUgZm9yIGJ1ZyBhbmQgZGV2ZWxvcGVyLWxpc3QgYWRkcmVzc2VzLgorCVRoZSBIYWNrZXIncyBHdWlkZSBpbiB0aGUgZG9jIGRpcmVjdG9yeSBpbmNsdWRlcyBzb21lIGd1aWRlbGluZXMKKwlvbiBob3cgdG8gcmVwb3J0IGJ1Z3MgaW4gd2F5cyB0aGF0IHdpbGwgZ2V0IHRoZW0gZml4ZWQgbW9zdCBxdWlja2x5LgpkaWZmIC0tZ2l0IGEvUkVBRE1FLmVteCBiL1JFQURNRS5lbXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwNDgxNgotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5lbXgKQEAgLTAsMCArMSw3MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUuZW14LHYgMS44IDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLSBBdXRob3I6IFRob21hcyBEaWNrZXkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBidWlsZCBuY3Vyc2VzIG9uIE9TLzIgaW4gdGhlIEVNWCBlbnZpcm9ubWVudC4gIEJ1dCB5b3UgbXVzdCBidWlsZCBhbmQKK2FjcXVpcmUgdG9vbHMuICBOb3QgYWxsIG9mIHRoZSB0b29scyBkaXN0cmlidXRlZCB3aXRoIEVNWCB3b3JrIHByb3Blcmx5LCBhbmQKK3NvbWUgYWRkaXRpb25hbCBvbmVzIGFyZSByZXF1aXJlZC4KKworRmlyc3QsIHRoZSBjb25maWd1cmUgc2NyaXB0IGRpc3RyaWJ1dGVkIHdpdGggbmN1cnNlcyB3aWxsIG5vdCBydW4gYXMtaXMgaW4gRU1YLiAKK1lvdSBjYW4gZ2VuZXJhdGUgYSBuZXcgb25lIGlmIHlvdSBoYXZlIGF1dG9jb25mIGJ1aWx0IGZvciBFTVguICBZb3Ugd2lsbCBuZWVkCit0aGUgRU1YIGRldmVsb3BtZW50IHRvb2xzLCBvZiBjb3Vyc2UuICBHZXQgdGhlc2UgcHJvZ3JhbXMgdG8gc3RhcnQ6CisKKwlHTlUgbTQgcHJvZ3JhbSAodmVyc2lvbiAxLjQpCisJR05VIGF1dG9jb25mICh2ZXJzaW9uIDIuMTMpLgorCUdOVSBwYXRjaCAodmVyc2lvbiAyLjUpCisKK0FwcGx5IHRoZSBhdXRvY29uZiBwYXRjaGVzIGZyb20KKworCWh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZgorCWZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mCisKK1RoZXNlIGFyZSBvcmRlcmVkIGJ5IGRhdGU6CisKKwlhdXRvY29uZi0yLjEzLTIwMDMwOTI3LnBhdGNoLmd6CisJYXV0b2NvbmYtMi4xMy0yMDAzMDkyNy1lbXgucGF0Y2guZ3oKKworSSBidWlsdCBteSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgbmN1cnNlcyB1c2luZyBFTVggMC45YyBhdCB0aGUgZW5kIG9mCisxOTk3LiAgTXVjaCBvZiB0aGUgRU1YIHBhdGNoIGZvciBhdXRvY29uZiB3YXMgZG9uZSBvcmlnaW5hbGx5IGJ5IEouSi5HLlJpcG9sbCwKK3VzaW5nIGEgc2ltaWxhciBlbnZpcm9ubWVudCAoaGUgcHJlZmVycyB1c2luZyB0aGUgJ2FzaCcgc2hlbGwpLiAgTmV3ZXIgdmVyc2lvbnMKK21heSBmaXggdGhlc2UgcHJvYmxlbXM6CisKKwkrIFRoZSBwZGtzaCBwcm9ncmFtIGRpc3RyaWJ1dGVkIGF0IEhvYmJlcyBhbmQgTGVvICh3aXRoIGEgMTk5NiBkYXRlKSBpcworCSAgZGVmZWN0aXZlLiAgSXQgZG9lcyBub3QgcHJvY2VzcyAiaGVyZSBkb2N1bWVudHMiIGNvcnJlY3RseSAod2hpY2gKKwkgIHJlbmRlcnMgaXQgdXNlbGVzcyBmb3IgcnVubmluZyB0aGUgYXV0b2NvbmYgc2NyaXB0KS4gIEkgYnVpbHQgbXkgb3duCisJICBjb3B5IG9mIHBka3NoIDUuMi4xMywgd2hpY2ggZG9lcyBoYXZlIHRoZSBidWcgY29ycmVjdGVkIChkb2N1bWVudGVkCisJICBpbiB0aGUgY2hhbmdlIGxvZyBmb3IgcGRrc2gpLgorCisJKyBJIGFsc28gYnVpbHQgZnJvbSBzb3VyY2VzIChiZWNhdXNlIHRoZSBkaXN0cmlidXRlZCBiaW5hcmllcyBkaWQgbm90CisJICB3b3JrKSB0aGUgY21wLCBkaWZmIHByb2dyYW1zLgorCSAgCisJICBPdGhlciByZXF1aXJlZCB1dGlsaXRpZXMgc3VjaCBhcyBhciwgY2F0LCBjaG1vZCwgY3AsIGdhd2ssIGdyZXAsIG12LAorCSAgbHMsIHJtLCBta2Rpciwgc2VkLCBzb3J0IGFuZCB0ciB3b3JrZWQuCisKK09uY2UgeW91IGhhdmUgYXV0b2NvbmYgcGF0Y2hlZCBhbmQgaW5zdGFsbGVkLCBydW4gJ2F1dG9jb25mJyBmcm9tIHRoZSB0b3AtbGV2ZWwKK2RpcmVjdG9yeSBvZiBuY3Vyc2VzIHRvIGdlbmVyYXRlIHRoZSBFTVgtc3BlY2lmaWMgY29uZmlndXJlIHNjcmlwdC4KZGlmZiAtLWdpdCBhL1RPLURPIGIvVE8tRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0N2QwMgotLS0gL2Rldi9udWxsCisrKyBiL1RPLURPCkBAIC0wLDAgKzEsMjEyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFRPLURPLHYgMS41MSAyMDA4LzEwLzExIDE5OjIyOjI3IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTSE9SVC1URVJNIFRPLURPIElURU1TOgorCitLbm93biBQcm9ibGVtczoKKworKyBsaWJ0b29sIGRvZXMgbm90IHdvcmsgd2l0aCBHTkFULgorCisrIFRoZSBzY3JlZW4gb3B0aW1pemF0aW9uIGhhcyBiZWVuIHRlc3RlZCBvbmx5IGluIGFuIGFkIGhvYyBtYW5uZXIuICBXZSBzaG91bGQKKyAgZGV2ZWxvcCBhIGdvb2Qgc2V0IG9mIHJlZ3Jlc3Npb24gdGVzdHMgdG8gY292ZXIgbGliX2RvdXBkYXRlLmMgYW5kCisgIGxpYl9tdmN1ci5jLgorCisrIE1hZ2ljIGNvb2tpZSBzdXBwb3J0IChmb3Igbm9uemVybyB4bWMgdmFsdWVzKSBkb2VzIG5vdCB3b3JrLCBzaW5jZSB0aGUgbG9naWMKKyAgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgcmVmcmVzaC4gIEFsc28sIHRoZSBpbml0aWFsIG9wdGltaXplIGRvZXMgbm90CisgIGFkanVzdCB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVuIGEgY29va2llIGlzIGVtaXR0ZWQuCisKKysgU2Nyb2xsaW5nIG9wdGltaXphdGlvbiBoYXMgaG9sZXM6ICBmb3IgZXhhbXBsZSwgaXQgZm9yY2VzIHJlcGFpbnRzIG9mIHRoZQorICBzY3JlZW4gYmV0d2VlbiBjYWxscyB0byByZWZyZXNoKCkuCisKKysgU1ZyNCB1c2VzIHNsaWdodGx5IGRpZmZlcmVudCBydWxlcyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiBzb2Z0a2V5cyBhcmUgc2hvd24uIAorICBGb3IgZXhhbXBsZSwgdGhleSBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVmb3JlIHRoZSBuY3Vyc2VzICdlJyB0ZXN0CisgIGFjdGl2YXRlcyB0aGVtKSwgYW5kIGEgdG91Y2h3aW4gY2FuIGFwcGFyZW50bHkgYWxzbyBmb3JjZSB0aGVtIHRvIGJlCisgIGRpc3BsYXllZC4KKworKyBUaGUgY29kZSBkZXBhcnRzIGZyb20gcGVyZmVjdCA4LWJpdCBjbGVhbm5lc3MgaW4gb25lIHJlc3BlY3Q7IHlvdSBjYW5ub3QKKyAgc3BlY2lmeSBhIGNoYXJhY3RlciBcMjAwIGFzIHBhcnQgb2YgYSBjYXBhYmlsaXR5IHN0cmluZywgYmVjYXVzZSB0aGUKKyAgdGVybWluZm8gbGlicmFyeSBpbnRlcnByZXRzIFwyMDAgYXMgYSByZXF1ZXN0IHRvIGVtYmVkIE5VTCAoXDAwMCkgYXQgdGhhdAorICBwb2ludC4gIFRoaXMgaXMgYSBsZWdhY3kgdGVybWluZm8gcHJvcGVydHkgd2UgY2FuJ3QgbWVzcyB3aXRoLgorCisrIFRoZSB3aW5kb3cgY2xhc3NlcyBkZWZpbmVkIGluIHRoZSBjKysgc3ViZGlyZWN0b3J5IG5lZWQgZG9jdW1lbnRhdGlvbi4gIFNvbWUKKyAgQysrIHByb2dyYW1tZXIgY291bGQgZWFybiBhIGxvdCBvZiBnb29kIGthcm1hIGJ5IGRvaW5nIHRoaXMuLi4KKworKyB2aWRfYXR0cigpIHNob3VsZCBzdXBwb3J0IHRoZSBzZXRfYV9hdHRyaWJ1dGVzIChzZ3IxKSBzdHJpbmcsIGJ1dCBkb2VzIG5vdC4gCisgIFRoZXJlIGFwcGVhciB0byBiZSBubyB0ZXJtaW5hbHMgdGhhdCByZXF1aXJlIHRoYXQgZnVuY3Rpb25hbGl0eS4KKworKyB0aGUgY29uZmlndXJlIC0tZGlzYWJsZS1leHQtZnVuY3Mgb3B0aW9uIGRvZXMgbm90IHdvcmsgZm9yIEFkYTk1IHRyZWUuCisKKysgdGhlIC0td2l0aC1wdGhyZWFkIGNvbmZpZ3VyYXRpb24gYnVpbGRzIGZvciBDeWd3aW4sIGJ1dCBkb2VzIG5vdCB3b3JrCisgIHByb3Blcmx5ICh0ZXN0L3dvcm0uYyBzaG93cyBhbGwgb2YgdGhlIHdvcm1zIGluIHRoZSBzYW1lIGxvY2F0aW9uKS4KKworKyB0aGUgLS1lbmFibGUtcnBhdGggY29uZmlndXJlIG9wdGlvbiBidWlsZHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHBsYXRmb3JtczsKKyAgaG93ZXZlciBjb21iaW5pbmcgaXQgd2l0aCAtLXdpdGgtdGljbGliIGFuZCAtLXdpdGgtdGVybWxpYiBkb2VzIG5vdCBhbHdheXMKKyAgcHJvZHVjZSBsaWJyYXJpZXMgdGhhdCBjYW4gYmUgcnVuIHdpdGhvdXQgc2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgIEJ1aWxkaW5nIHRob3NlIHdpdGggbGlidG9vbCBkb2VzIG5vdCB3b3JrIGVpdGhlci4gIChUaGlzIGlzIGEgcHJvYmxlbSB3aXRoCisgIHRoZSBCU0QgcGxhdGZvcm1zKS4KKworUG9ydGFiaWxpdHkgKG9yIGxhY2sgdGhlcmVvZik6CisKKysgVXNlcnMgb2Ygb2xkZXIgU3lzdGVtIFYgVU5JWGVzIChidXQgbm90IFNvbGFyaXMsIGFuZCBwcm9iYWJseSBub3QgU1ZyNCkgbWF5CisgIHRyaXAgb3ZlciBhIGtub3duIHByb2JsZW0gd2l0aCB0aGUgc2lnbmFsLWhhbmRsaW5nIGNvZGUgd2hpY2ggY2F1c2VzIGFicnVwdAorICB0ZXJtaW5hdGlvbiBvZiBuY3Vyc2VzIGFwcGxpY2F0aW9ucyBmb2xsb3dpbmcgcmVzdW1lIGZyb20gYSBeWiBzdXNwZW5kICh0aGlzCisgIHByb2JsZW0gd2FzIGZpcnN0IHNlZW4gcnVubmluZyBseW54KS4gIFlvdSB3aWxsIG5vdCBzZWUgdGhpcyBwcm9ibGVtIGlmIHlvdQorICBhcmUgcnVubmluZyBMaW51eCBvciBvbmUgb2YgdGhlIDQuNEJTRCBkZXJpdmF0aXZlcyBsaWtlIEZyZWVCU0QsIE5ldEJTRCwgb3IKKyAgQlNESS4gIEZvciBkZXRhaWxzLCBzZWUgdGhlIGFuYWx5c2lzIGluIHRoZSBoZWFkZXIgY29tbWVudCBvZgorICBuY3Vyc2VzL3R0eS9saWJfdHN0cC5jIC4KKworKyBJbiB0aGVvcnksIHZ3cHJpbnR3IGFuZCB2d3NjYW5mIGFyZSBzdXBwb3NlZCB0byB1c2UgdGhlIG9sZGVyIHZhcmFyZ3MuaAorICBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIHZhcmlhZGljIGFyZ3VtZW50IGxpc3RzIChhbmQgYXJlIGRlcHJlY2F0ZWQgYnkgWC9PcGVuCisgIGZvciB0aGF0IHJlYXNvbikuICBMaW51eCBkb2Vzbid0IGhhdmUgdmFyYXJncy5oLCBpdCBoYXMgdGhlIG5ld2VyCisgIFgvT3Blbi1zdGFuZGFyZCBzdGRhcmdzLmggZXF1aXZhbGVudC4gIFNvIHRoZXNlIGZ1bmN0aW9ucyB1c2Ugc3RkYXJncworICBpbnN0ZWFkLiAgVGhpcyBpcyB1bmxpa2VseSB0byBiZSBhIHByb2JsZW0gdW5sZXNzIHlvdSdyZSBidWlsZGluZyBuY3Vyc2VzIG9uCisgIGEgU3lzdGVtIFYgb2xkIGVub3VnaCB0byBvbmx5IGhhdmUgdmFyYXJncy5oLiAgKFNvbGFyaXMgMi41LjEgdXNlZCB0aGUKKyAgc3RkYXJnLmggYmluZGluZyBhcyB3ZWxsKS4KKworKyBJZiB5b3UncmUgdXNpbmcgYSBCU0QgZWFybGllciB0aGFuIDQuNEJTRCwgb3IgYSBMaW51eCBvbGQgZW5vdWdoIG5vdCB0byBoYXZlCisgIGEgbmF0aXZlIHZzc2NhbmYoMykgaW4gaXRzIGxpYnJhcnksIHZ3c2NhbncoKSB3aWxsIG5vdCB3b3JrLiAgWW91IGxvc2UuICAoSXQKKyAgc2hvdWxkIHdvcmsgb24gYW55IFN5c3RlbSBWLCBob3dldmVyKS4gIElmIHlvdSB3YW50IHRvIGZpeCB0aGlzLCBhZGQgYW4KKyAgaW1wbGVtZW50YXRpb24gdG8gbmN1cnNlcy92c3NjYW5mLmMuCisKKysgVGhlIEMrKyBiaW5kaW5nIGZhaWxzIHRvIGJ1aWxkIHdpdGggYSBmZXcgQysrIGNvbXBpbGVycy4KKworKyB0ZXJtaW5mby41IGRvZXMgbm90IGZvcm1hdCB3aXRoIHRoZSBTdW5PUyAoYW5kIG1vc3Qgb3RoZXIgcGxhdGZvcm0ncykgdGJsCisgIHV0aWxpdHkgYmVjYXVzZSBpdCByZWxpZXMgb24gYSBkaXZlcnNpb24gZm9yIGVhY2ggdGFibGUgZW50cnkuICBHZXQgdGhlCisgIGdyb2ZmIHBhY2thZ2UuCisKK1VudGVzdGVkIGZlYXR1cmVzOgorCisrIFRoZSBjb2RlIGZvciB0aGUgSFAgY29sb3IgbW9kZWwgdXNpbmcgc2V0X2NvbG9yX3BhaXIgaXMgdW50ZXN0ZWQuCisKKysgVGhlIGNvZGUgZm9yIGhhbmRsaW5nIHNvZnQgbGFiZWxzIG9uIGEgdGVybWluYWwgdHlwZSB3aXRoIGJ1aWx0LWluIHN1cHBvcnQKKyAgZm9yIHRoZW0gKG51bV9sYWJlbHMgPiAwLCBsYWJlbF9oZWlnaHQsIGxhYmVsX3dpZHRoLCBsYWJlbF9mb3JtYXQsIGxhYmVsX29mZiwKKyAgbGFiZWxfb24sIHBsYWJfbm9ybSwgbGFiX2YqKSBoYXMgbm90IGJlZW4gdGVzdGVkLiAgVGhlIGxhYmVsX2Zvcm1hdCBhbmQKKyAgbGFiX2YqIGNhcGFiaWxpdGllcyBhcmVuJ3QgcHJlc2VudGx5IHVzZWQuCisKK0xPTkdFUi1URVJNIFRPLURPIElURU1TOgorCisxLiBFeHRlbmRlZCBDT1NFIGNvbmZvcm1hbmNlCisKK1RoZXJlIGlzIGFuIFhQRzQgc3RhbmRhcmQgcmVsZWFzZWQgaW4gMTk5NiB3aGljaCBkZXNjcmliZXMgYSBzdXBlcnNldAorb2YgdGhlIFNWcjQgQVBJLiAgVGhlIGxpYnJhcnkgaXMgQkFTRSBjb25mb3JtYW50IHdpdGggdGhpcyBzdGFuZGFyZC4KK1dlIHdvdWxkIGxpa2UgdG8gbWFrZSBuY3Vyc2VzIGZ1bGx5IGNvbmZvcm1hbnQgYXQgdGhlIEVYVEVOREVEIGxldmVsCitzdXBwb3J0aW5nIGludGVybmF0aW9uYWxpemF0aW9uLgorCisyLiBET1MgcG9ydAorCitPbmx5IGEgZmV3IG9mIHRoZSBmaWxlcyBpbiB0aGUgbGlicmFyeSBkZXBlbmQgb24gdGhlIHRlcm1pbmZvIGZvcm1hdC4KK0l0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmdXJ0aGVyIGtlcm5lbGl6ZSB0aGUgcGFja2FnZSwgdGhlbiByZXdyaXRlIAorYSBzbWFsbCBudW1iZXIgb2YgY29yZSBmaWxlcyB0byBwcm9kdWNlIGEgZnVuY3Rpb25hbGx5LWNvbXBhdGlibGUKK3BvcnQgdGhhdCB3b3VsZCBkbyB1cGRhdGVzIHRvIGEgbWVtb3J5LW1hcHBlZCBzY3JlZW4gYXJlYS4gIFRoZSBmaXJzdAorcmVzdWx0IG9mIHRoaXMgd291bGQgYmUgYSBET1MgcG9ydC4KKworMy4gWCBwb3J0CisKK0l0IHdvdWxkIGJlIG5pY2UgaWYgbmN1cnNlcyBjb3VsZCByZWNvZ25pemUgd2hlbiBpdCB3YXMgcnVubmluZyB1bmRlciBYIGFuZAorbWFpbnRhaW4gaXRzIG93biB3aW5kb3cuICBXaXRoIHRoaXMgZmVhdHVyZSwgYWxsIG5jdXJzZXMgcHJvZ3JhbXMgd291bGQKK2F1dG9tYXRpY2FsbHkgYmVjb21lIFggcHJvZ3JhbXMuICBUaGUgY2hhbGxlbmdlIGlzIHRvIGhhbmRsZSByZXNpemUgZXZlbnRzCitwcm9wZXJseS4KKworNC4gVW51c2VkIGNhcGFiaWxpdGllcworCitUaGUgY3VycmVudGx5IHVudXNlZCBjYXBhYmlsaXRpZXMgZmFsbCBuYXR1cmFsbHkgaW50byBzZXZlcmFsIGdyb3VwczoKKworQS4gU3RhdHVzLWxpbmUgY2FwYWJpbGl0aWVzOgorCisJQm9vbGVhbnM6IGhhc19zdGF0dXNfbGluZSwgc3RhdHVzX2xpbmVfZXNjX29rLgorCU51bWVyaWNzOiB3aWR0aF9zdGF0dXNfbGluZS4KKwlTdHJpbmdzOiBkaXNfc3RhdHVzX2xpbmUsIGZyb21fc3RhdHVzX2xpbmUsIHRvX3N0YXR1c19saW5lLgorCitTeXN0ZW0gViBSZWxlYXNlIDEgY3Vyc2VzIG1hZGUgbm8gdXNlIG9mIHRoZXNlIGF0IGFsbC4gIFNWcjQncyB1c2UsIGlmCithbnksIGlzIHVua25vd24uICBGcm9tIHRoZSBBVCZUIHRlcm1jYXAgZmlsZSBpdCBsb29rcyBsaWtlIGN1cnNlcywgaW4gZ2VuZXJhbCwKK3Nob3VsZG4ndCB1c2UgdGhlbTsgdGVybWluYWwgdmFyaWFudHMgd2l0aCBzdGF0dXMgbGluZXMgaGF2ZSB0aGVpciBsaW5lIGNvdW50CitkZWNyZW1lbnRlZCBieSAxLCBzdWdnZXN0aW5nIHRoYXQgY3Vyc2VzIGlzIHN1cHBvc2VkIHRvIGxlYXZlIHRoZSBzdGF0dXMgbGluZQorYWxvbmUuCisKK0IuIFByaW50ZXIgY2FwYWJpbGl0aWVzOgorCisJQm9vbGVhbjogY29sX2FkZHJfZ2xpdGNoLCBjcl9jYW5jZWxzX21pY3JvX21vZGUsIGhhc19wcmludF93aGVlbCwKKwkJcm93X2FkZHJfZ2xpdGNoLCBzZW1pX2F1dG9fcmlnaHRfbWFyZ2luLCBjcGlfY2hhbmdlc19yZXMsCisJCWxwaV9jaGFuZ2VzX3Jlcy4KKwlOdW1lcmljOiBidWZmZXJfY2FwYWNpdHksIGRvdF9ob3J6X3NwYWNpbmcsIGRvdF92ZXJ0X3NwYWNpbmcsCisJCW1heF9taWNyb19hZGRyZXNzLCBtYXhfbWljcm9fanVtcCwgbWljcm9fY29sX3NpemUsCisJCW1pY3JvX2xpbmVfc2l6ZSwgbnVtYmVyX29mX3BpbnMsIG91dHB1dF9yZXNfY2hhciwKKwkJb3V0cHV0X3Jlc19saW5lLCBvdXRwdXRfcmVzX2hvcnpfaW5jaCwgcHJpbnRfcmF0ZSwKKwkJd2lkZV9jaGFyX3NpemUsIGJpdF9pbWFnZV9lbnR3aW5pbmcsIGJpdF9pbWFnZV90eXBlLgorCVN0cmluZzogZG93bl9oYWxmX2xpbmUsIGZvcm1fZmVlZCwgdXBfaGFsZl9saW5lLCBzZXRfbGVmdF9tYXJnaW4sCisJCXNldF9yaWdodF9tYXJnaW4sIGNsZWFyX21hcmdpbnMsIGNoYW5nZV9jaGFyX3BpdGNoCisJCS4uLiBzZXRfcGFnZV9sZW5ndGggKGFsbCB0aGUgU1ZyNCBwcmludGVyIGNhcHMpLAorCitDdXJzZXMgZG9lc24ndCB1c2UgdGhlc2UuCisKK0MuIFByaW50ZXItY29udHJvbCBjYXBhYmlsaXRpZXM6CisKKwlCb29sZWFuOiBwcnRyX3NpbGVudC4KKwlTdHJpbmdzOiBwcmludF9zY3JlZW4sIHBydHJfb24sIHBydHJfb2ZmLCBwcnRyX25vbi4KKworQ3Vyc2VzIGRvZXNuJ3QgdXNlIHRoZXNlLgorCitELiBEaWFsZXIgc3RyaW5nczoKKworCVN0cmluZ3M6IGhhbmd1cCwgZGlhbF9waG9uZSwgcXVpY2tfZGlhbCwgdG9uZSwgcHVsc2UsIGZsYXNoX2hvb2ssCisJCWZpeGVkX3BhdXNlLCB3YWl0X3RvbmUuCisKK0N1cnNlcyBkb2Vzbid0IHVzZSB0aGVzZS4KKworRS4gV2luZG93IGFuZCB2aXJ0dWFsLXRlcm1pbmFsIGNhcGFiaWxpdGllczoKKworCU51bWVyaWNzOiBtYXhpbXVtX3dpbmRvd3MsIHZpcnR1YWxfdGVybWluYWwuCisJU3RyaW5nczogcmVxX2Zvcl9pbnB1dCwgY3JlYXRlX3dpbmRvdywgZ290b193aW5kb3csIHNldF93aW5kb3cuCisKK1RoZXNlIHNlZW0gdG8gYmUgZm9zc2lscyBmcm9tIHNvbWUgQVQmVCBleHBlcmltZW50cyBvbiBjaGFyYWN0ZXItYmFzZWQKK3dpbmRvdyBzeXN0ZW1zIHRoYXQgbmV2ZXIgZXNjYXBlZCB0aGUgbGFiLiAgVGhlIHZpcnR1YWxfdGVybWluYWwgY2FwIGhhZAorc29tZXRoaW5nIHRvIGRvIHdpdGggYnVpbGRpbmcgdGVybWluYWwgZW11bGF0aW9ucyBpbnRvIHR0eSBsaW5lIGRpc2NpcGxpbmVzLgorCitGLiBVbnVzZWQgVkRUIGNhcGFiaWxpdGllczoKKworCUJvb2xlYW5zOiBlcmFzZV9vdmVyc3RyaWtlLCBoYXNfbWV0YV9rZXksIGluc2VydF9udWxsX2dsaXRjaCwKKwkJbW92ZV9pbnNlcnQsIGRlc3RfdGFic19tYWdpY19zbXNvLCB0cmFuc3BhcmVudF91bmRlcmxpbmUsCisJCW5lZWRzX3hvbl94b2ZmLCBoYXJkX2N1cnNvci4KKwlOdW1lcmljczogbGluZXNfb2ZfbWVtb3J5LCBidXR0b25zLgorCVN0cmluZ3M6IHBrZXlfa2V5LCBwa2V5X2xvY2FsLCBwa2V5X3htaXQsIHVuZGVybGluZV9jaGFyLCAKKwkJZW50ZXJfeG9uX21vZGUsCWV4aXRfeG9uX21vZGUsIHhvbl9jaGFyYWN0ZXIsIHhvZmZfY2hhcmFjdGVyLCAKKwkJZGlzcGxheV9jbG9jaywgcmVtb3ZlX2Nsb2NrLCB1c2VyWzAtNV0sIGRpc3BsYXlfcGNfY2hhciwKKwkJZW50ZXJfc2NhbmNvZGVfbW9kZSwgZXhpdF9zY2FuY29kZV9tb2RlLCBwY190ZXJtX29wdGlvbnMsIAorCQlzY2FuY29kZV9lc2NhcGUsIGFsdF9zY2FuY29kZV9lc2MuCisKK1RoZXNlIGFyZSB0aGUgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZXMgZm9yIG5jdXJzZXMuICBOb3RlczoKKworCWkpIG5jdXJzZXMgZG9lc24ndCBuZWVkIG1vdmVfaW5zZXJ0OyBpdCBuZXZlciB1c2VzIGN1cC9ocGEvdnBhIHdoaWxlCisJCWluc2VydF9tb2RlIGlzIG9uLgorCisJaWkpIFdlIHByb2JhYmx5IGRvbid0IGNhcmUgYWJvdXQgZGVzdF90YWJzX21hZ2ljX3Ntc287IG9ubHkKKwkJVGVsZXJheXMgdXNlZCBpdCBhbmQgdGhleSdyZSBhbGwgbG9uZyBvYnNvbGV0ZS4KKworLS0gdmlsZTp0eHRtb2RlCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhlODE4Ci0tLSAvZGV2L251bGwKKysrIGIvYWNsb2NhbC5tNApAQCAtMCwwICsxLDU2MjQgQEAKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorZG5sIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCitkbmwgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKK2RubCB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorZG5sIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCitkbmwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKK2RubCBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKK2RubCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKK2RubCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorZG5sIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCitkbmwgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorZG5sIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCitkbmwgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCitkbmwgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKK2RubCBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorZG5sIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubAorZG5sIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk1LW9uCitkbmwKK2RubCAkSWQ6IGFjbG9jYWwubTQsdiAxLjQ3MCAyMDA4LzEwLzI1IDIyOjE1OjMyIHRvbSBFeHAgJAorZG5sIE1hY3JvcyB1c2VkIGluIE5DVVJTRVMgYXV0by1jb25maWd1cmF0aW9uIHNjcmlwdC4KK2RubAorZG5sIFRoZXNlIG1hY3JvcyBhcmUgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IGZyb20gTkNVUlNFUy4gIFRoZSBjb3B5cmlnaHQgb24KK2RubCB0aGlzIGZpbGUgYXBwbGllcyB0byB0aGUgYWdncmVnYXRpb24gb2YgbWFjcm9zIGFuZCBkb2VzIG5vdCBhZmZlY3QgdXNlIG9mCitkbmwgdGhlc2UgbWFjcm9zIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KK2RubAorZG5sIFNlZSBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQU1fTEFOR0lORk9fQ09ERVNFVCB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDIvMTAvMjcgMjM6MjE6NDIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgSW5zZXJ0ZWQgYXMgcmVxdWVzdGVkIGJ5IGdldHRleHQgMC4xMC40MAorZG5sIEZpbGUgZnJvbSAvdXNyL3NoYXJlL2FjbG9jYWwKK2RubCBjb2Rlc2V0Lm00CitkbmwgPT09PT09PT09PT09PT09PT09PT0KK2RubCBzZXJpYWwgQU0xCitkbmwKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAorICAgICAgW2NoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7XSwKKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKKyAgICBdKQorICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS5dKQorICBmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BREFfSU5DTFVERV9ESVJTIHZlcnNpb246IDUgdXBkYXRlZDogMjAwNi8xMC8xNCAxNToyMzoxNQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgaW5jbHVkZS1vcHRpb25zIGZvciB0aGUgQyBwcm9ncmFtcyBpbiB0aGUgQWRhOTUKK2RubCBiaW5kaW5nLgorQUNfREVGVU4oW0NGX0FEQV9JTkNMVURFX0RJUlNdLAorWworQUNQUEZMQUdTPSItSS4gLUkuLi8uLi9pbmNsdWRlICRBQ1BQRkxBR1MiCitpZiB0ZXN0ICIkc3JjZGlyIiAhPSAiLiI7IHRoZW4KKwlBQ1BQRkxBR1M9Ii1JXCR7c3JjZGlyfS8uLi8uLi9pbmNsdWRlICRBQ1BQRkxBR1MiCitmaQoraWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJQUNQUEZMQUdTPSIkQUNQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCitlbGlmIHRlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIjsgdGhlbgorCWlmIHRlc3QgIiRpbmNsdWRlZGlyIiA9ICcke3ByZWZpeH0vaW5jbHVkZScgOyB0aGVuCisJCWlmIHRlc3QgJHByZWZpeCAhPSAvdXNyIDsgdGhlbgorCQkJQUNQUEZMQUdTPSIkQUNQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCisJCWZpCisJZWxzZQorCQlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwlmaQorZmkKK0FDX1NVQlNUKEFDUFBGTEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0NGTEFHUyB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMDQvMDQvMjUgMTc6NDg6MzAKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ29weSBub24tcHJlcHJvY2Vzc29yIGZsYWdzIHRvICRDRkxBR1MsIHByZXByb2Nlc3NvciBmbGFncyB0byAkQ1BQRkxBR1MKK2RubCBUaGUgc2Vjb25kIHBhcmFtZXRlciBpZiBnaXZlbiBtYWtlcyB0aGlzIG1hY3JvIHZlcmJvc2UuCitkbmwKK2RubCBQdXQgYW55IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0aGF0IHVzZSBxdW90ZWQgc3RyaW5ncyBpbiAkRVhUUkFfQ1BQRkxBR1MsCitkbmwgdG8gc2ltcGxpZnkgdXNlIG9mICRDUFBGTEFHUyBpbiBjb21waWxlciBjaGVja3MsIGV0Yy4sIHRoYXQgYXJlIGVhc2lseQorZG5sIGNvbmZ1c2VkIGJ5IHRoZSBxdW90ZXMgKHdoaWNoIHJlcXVpcmUgYmFja3NsYXNoZXMgdG8ga2VlcCB0aGVtIHVzYWJsZSkuCitBQ19ERUZVTihbQ0ZfQUREX0NGTEFHU10sCitbCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICQxCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtbXj1dXSo9J1wnJ1wiW1teIl1dKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW1teIl1dKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCWlmZWxzZSgkMiwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyldKQorCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCWlmZWxzZSgkMiwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MpXSkKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwlpZmVsc2UoJDIsLCxbQ0ZfVkVSQk9TRShhZGQgdG8gXCRFWFRSQV9DUFBGTEFHUyAkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzKV0pCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworQUNfU1VCU1QoRVhUUkFfQ1BQRkxBR1MpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0lOQ0RJUiB2ZXJzaW9uOiA5IHVwZGF0ZWQ6IDIwMDgvMDIvMDkgMTM6MTU6MzQKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQWRkIGFuIGluY2x1ZGUtZGlyZWN0b3J5IHRvICRDUFBGTEFHUy4gIERvbid0IGFkZCAvdXNyL2luY2x1ZGUsIHNpbmNlIGl0J3MKK2RubCByZWR1bmRhbnQuICBXZSBkb24ndCBub3JtYWxseSBuZWVkIHRvIGFkZCAtSS91c3IvbG9jYWwvaW5jbHVkZSBmb3IgZ2NjLAorZG5sIGJ1dCBvbGQgdmVyc2lvbnMgKGFuZCBzb21lIG1pc2luc3RhbGxlZCBvbmVzKSBuZWVkIHRoYXQuICBUbyBtYWtlIHRoaW5ncworZG5sIHdvcnNlLCBnY2MgMy54IG1heSBnaXZlIGVycm9yIG1lc3NhZ2VzIGlmIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGlzIGFkZGVkIHRvCitkbmwgdGhlIGluY2x1ZGUtcGF0aCkuCitBQ19ERUZVTihbQ0ZfQUREX0lOQ0RJUl0sCitbCitpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICQxCisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPl0sCisJCQkJICBbcHJpbnRmKCJIZWxsbyIpXSwKKwkJCQkgIFtdLAorCQkJCSAgW2NmX2hhdmVfaW5jZGlyPXllc10pCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIENGX1ZFUkJPU0UoYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCkKKwkJICBpZmVsc2UoJDIsLENQUEZMQUdTLCQyKT0iLUkkY2ZfYWRkX2luY2RpciAkaWZlbHNlKCQyLCxDUFBGTEFHUyxbJF0kMikiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0xJQkRJUiB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDgvMDIvMDkgMTM6MTU6MzQKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwJQWRkcyB0byB0aGUgbGlicmFyeS1wYXRoCitkbmwKK2RubAlTb21lIG1hY2hpbmVzIGhhdmUgdHJvdWJsZSB3aXRoIG11bHRpcGxlIC1MIG9wdGlvbnMuCitkbmwKK2RubCAkMSBpcyB0aGUgKGxpc3Qgb2YpIGRpcmVjdG9yeShzKSB0byBhZGQKK2RubCAkMiBpcyB0aGUgb3B0aW9uYWwgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gdXBkYXRlIChkZWZhdWx0IExERkxBR1MpCitkbmwKK0FDX0RFRlVOKFtDRl9BRERfTElCRElSXSwKK1sKK2lmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9saWJkaXIgaW4gJDEKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIENGX1ZFUkJPU0UoYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCkKKyAgICAgICAgaWZlbHNlKCQyLCxMREZMQUdTLCQyKT0iLUwkY2ZfYWRkX2xpYmRpciAkaWZlbHNlKCQyLCxMREZMQUdTLFskXSQyKSIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX1NVQkRJUl9QQVRIIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNy8wNy8yOSAxMDoxMjo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEFwcGVuZCB0byBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGhlYWRlci9saWItZmlsZQorZG5sCSQxID0gdGhlIHZhcmlhYmxlIHRvIHJldHVybiBhcyByZXN1bHQKK2RubAkkMiA9IHRoZSBwYWNrYWdlIG5hbWUKK2RubAkkMyA9IHRoZSBzdWJkaXJlY3RvcnksIGUuZy4sIGJpbiwgaW5jbHVkZSBvciBsaWIKK2RubCAkNCA9IHRoZSBkaXJlY3RvcnkgdW5kZXIgd2hpY2ggd2Ugd2lsbCB0ZXN0IGZvciBzdWJkaXJlY3RvcmllcworZG5sICQ1ID0gYSBkaXJlY3RvcnkgdGhhdCB3ZSBkbyBub3Qgd2FudCAkNCB0byBtYXRjaAorQUNfREVGVU4oW0NGX0FERF9TVUJESVJfUEFUSF0sCitbCit0ZXN0ICIkNCIgIT0gIiQ1IiAmJiBcCit0ZXN0IC1kICIkNCIgJiYgXAoraWZlbHNlKFskNV0sTk9ORSwsWyh0ZXN0ICQ1ID0gTk9ORSB8fCB0ZXN0IC1kICQ1KSAmJl0pIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciAkMy1kaXJlY3RvcmllcyB1bmRlciAkNCIKKwl0ZXN0IC1kICQ0LyQzICYmICAgICAgICAgICQxPSJbJF0kMSAkNC8kMyIKKwl0ZXN0IC1kICQ0LyQzLyQyICYmICAgICAgICQxPSJbJF0kMSAkNC8kMy8kMiIKKwl0ZXN0IC1kICQ0LyQzLyQyLyQzICYmICAgICQxPSJbJF0kMSAkNC8kMy8kMi8kMyIKKwl0ZXN0IC1kICQ0LyQyLyQzICYmICAgICAgICQxPSJbJF0kMSAkNC8kMi8kMyIKKwl0ZXN0IC1kICQ0LyQyLyQzLyQyICYmICAgICQxPSJbJF0kMSAkNC8kMi8kMy8kMiIKK30KK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQU5TSV9DQ19DSEVDSyB2ZXJzaW9uOiA5IHVwZGF0ZWQ6IDIwMDEvMTIvMzAgMTc6NTM6MzQKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBpcyBhZGFwdGVkIGZyb20gdGhlIG1hY3JvcyAnZnBfUFJPR19DQ19TVERDJyBhbmQgJ2ZwX0NfUFJPVE9UWVBFUycKK2RubCBpbiB0aGUgc2hhcnV0aWxzIDQuMiBkaXN0cmlidXRpb24uCitBQ19ERUZVTihbQ0ZfQU5TSV9DQ19DSEVDS10sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgJHtDQy1jY30gb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMsIGNmX2N2X2Fuc2lfY2MsWworY2ZfY3ZfYW5zaV9jYz1ubworY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisjIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAorIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCisjIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCisjIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKKyMgSFAtVVgJCQktQWEgLURfSFBVWF9TT1VSQ0UKKyMgU1ZSNAkJCS1YYworIyBVbml4V2FyZSAxLjIJCShjYW5ub3QgdXNlIC1YYywgc2luY2UgQU5TSS9QT1NJWCBjbGFzaGVzKQorZm9yIGNmX2FyZyBpbiAiLURDQ19IQVNfUFJPVE9TIiBcCisJIiIgXAorCS1xbGFuZ2x2bD1hbnNpIFwKKwktc3RkMSBcCisJLUFlIFwKKwkiLUFhIC1EX0hQVVhfU09VUkNFIiBcCisJLVhjCitkbworCUNGX0FERF9DRkxBR1MoJGNmX2FyZykKKwlBQ19UUllfQ09NUElMRSgKK1sKKyNpZm5kZWYgQ0NfSEFTX1BST1RPUworI2lmICFkZWZpbmVkKF9fU1REQ19fKSB8fCAoX19TVERDX18gIT0gMSkKK2Nob2tlIG1lCisjZW5kaWYKKyNlbmRpZgorXSxbCisJaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CisJc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CisJc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307XSwKKwlbY2ZfY3ZfYW5zaV9jYz0iJGNmX2FyZyI7IGJyZWFrXSkKK2RvbmUKK0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorXSkKKworaWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiICE9ICJubyI7IHRoZW4KK2lmIHRlc3QgIi4kY2ZfY3ZfYW5zaV9jYyIgIT0gIi4tRENDX0hBU19QUk9UT1MiOyB0aGVuCisJQ0ZfQUREX0NGTEFHUygkY2ZfY3ZfYW5zaV9jYykKK2Vsc2UKKwlBQ19ERUZJTkUoQ0NfSEFTX1BST1RPUykKK2ZpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BTlNJX0NDX1JFUUQgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA4LzAzLzIzIDE0OjQ4OjU0CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgRm9yIHByb2dyYW1zIHRoYXQgbXVzdCB1c2UgYW4gQU5TSSBjb21waWxlciwgb2J0YWluIGNvbXBpbGVyIG9wdGlvbnMgdGhhdAorZG5sIHdpbGwgbWFrZSBpdCByZWNvZ25pemUgcHJvdG90eXBlcy4gIFdlJ2xsIGRvIHByZXByb2Nlc3NvciBjaGVja3MgaW4gb3RoZXIKK2RubCBtYWNyb3MsIHNpbmNlIHRvb2xzIHN1Y2ggYXMgdW5wcm90byBjYW4gZmFrZSBwcm90b3R5cGVzLCBidXQgb25seSBwYXJ0IG9mCitkbmwgdGhlIHByZXByb2Nlc3Nvci4KK0FDX0RFRlVOKFtDRl9BTlNJX0NDX1JFUURdLAorW0FDX1JFUVVJUkUoW0NGX0FOU0lfQ0NfQ0hFQ0tdKQoraWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiID0gIm5vIjsgdGhlbgorCUFDX01TR19FUlJPUigKK1tZb3VyIGNvbXBpbGVyIGRvZXMgbm90IGFwcGVhciB0byByZWNvZ25pemUgcHJvdG90eXBlcy4KK1lvdSBoYXZlIHRoZSBmb2xsb3dpbmcgY2hvaWNlczoKKwlhLiBhZGp1c3QgeW91ciBjb21waWxlciBvcHRpb25zCisJYi4gZ2V0IGFuIHVwLXRvLWRhdGUgY29tcGlsZXIKKwljLiB1c2UgYSB3cmFwcGVyIHN1Y2ggYXMgdW5wcm90b10pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BV0tfQklHX1BSSU5URiB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDgvMTAvMDQgMTc6MTY6MTgKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIGF3ayBjYW4gaGFuZGxlIGJpZyBzdHJpbmdzIHVzaW5nIHByaW50Zi4gIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YKK2RubCBhd2sgY2hva2Ugb24gbGFyZ2Ugc3RyaW5ncyBwYXNzZWQgdmlhICIlcyIuCitkbmwKK2RubCAkMSA9IGRlc2lyZWQgc3RyaW5nIHNpemUKK2RubCAkMiA9IHZhcmlhYmxlIHRvIHNldCB3aXRoIHJlc3VsdAorQUNfREVGVU4oW0NGX0FXS19CSUdfUFJJTlRGXSwKK1sKKyAgICBjYXNlIHgkQVdLIGluICModmkKKyAgICB4KQorICAgICAgICBldmFsICQyPW5vCisgICAgICAgIDs7CisgICAgKikgIyh2aQorICAgICAgICBpZiAoICR7QVdLfSAnQkVHSU4geyB4eCA9ICJ4Ijsgd2hpbGUgKGxlbmd0aCh4eCkgPCAkMSkgeyB4eCA9IHh4ICJ4IjsgfTsgcHJpbnRmKCIlc1xuIiwgeHgpOyB9JyBcCisgICAgICAgICAgICB8ICRBV0sgJ3sgcHJpbnRmICIlZFxuIiwgbGVuZ3RoKFskXTApOyB9JyB8ICRBV0sgJ0JFR0lOIHsgZXFscz0wOyByZWNzPTA7IH0geyByZWNzKys7IGlmIChbJF0wID09IDEyMDAwKSBlcWxzKys7IH0gRU5EIHsgaWYgKHJlY3MgIT0gMSB8fCBlcWxzICE9IDEpIGV4aXQgMTsgfScgMj4vZGV2L251bGwgPi9kZXYvbnVsbCApIDsgdGhlbgorICAgICAgICAgICAgZXZhbCAkMj15ZXMKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZhbCAkMj1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQk9PTF9ERUNMIHZlcnNpb246IDggdXBkYXRlZDogMjAwNC8wMS8zMCAxNTo1MToxOAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIFRlc3QgaWYgJ2Jvb2wnIGlzIGEgYnVpbHRpbiB0eXBlIGluIHRoZSBjb25maWd1cmVkIEMrKyBjb21waWxlci4gIFNvbWUKK2RubCBvbGRlciBjb21waWxlcnMgKGUuZy4sIGdjYyAyLjUuOCkgZG9uJ3Qgc3VwcG9ydCAnYm9vbCcgZGlyZWN0bHk7IGdjYworZG5sIDIuNi4zIGRvZXMsIGluIGFudGljaXBhdGlvbiBvZiB0aGUgQU5TSSBDKysgc3RhbmRhcmQuCitkbmwKK2RubCBUcmVhdCB0aGUgY29uZmlndXJhdGlvbi12YXJpYWJsZSBzcGVjaWFsbHkgaGVyZSwgc2luY2Ugd2UncmUgZGlyZWN0bHkKK2RubCBzdWJzdGl0dXRpbmcgaXRzIHZhbHVlIChpLmUuLCAxLzApLgorZG5sCitkbmwgJDEgaXMgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW4sIGlmIG5vdCAkY3ZfY3ZfYnVpbHRpbl9ib29sCitBQ19ERUZVTihbQ0ZfQk9PTF9ERUNMXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiB3ZSBzaG91bGQgaW5jbHVkZSBzdGRib29sLmgpCisKK0FDX0NBQ0hFX1ZBTChjZl9jdl9oZWFkZXJfc3RkYm9vbF9oLFsKKwlBQ19UUllfQ09NUElMRShbXSxbYm9vbCBmb28gPSBmYWxzZV0sCisJCVtjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTBdLAorCQlbQUNfVFJZX0NPTVBJTEUoWworI2lmbmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorXSxbYm9vbCBmb28gPSBmYWxzZV0sCisJCQlbY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaD0xXSwKKwkJCVtjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTBdKV0pXSkKKworaWYgdGVzdCAiJGNmX2N2X2hlYWRlcl9zdGRib29sX2giID0gMQordGhlbglBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIGJ1aWx0aW4gYm9vbCB0eXBlXSkKKworQUNfQ0FDSEVfVkFMKGlmZWxzZSgkMSwsY2ZfY3ZfYnVpbHRpbl9ib29sLFskMV0pLFsKKwlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK10sW2Jvb2wgeCA9IGZhbHNlXSwKKwkJW2lmZWxzZSgkMSwsY2ZfY3ZfYnVpbHRpbl9ib29sLFskMV0pPTFdLAorCQlbaWZlbHNlKCQxLCxjZl9jdl9idWlsdGluX2Jvb2wsWyQxXSk9MF0pCisJXSkKKworaWYgdGVzdCAiJGlmZWxzZSgkMSwsY2ZfY3ZfYnVpbHRpbl9ib29sLFskMV0pIiA9IDEKK3RoZW4JQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCUFDX01TR19SRVNVTFQobm8pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9CT09MX1NJWkUgdmVyc2lvbjogMTIgdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIFRlc3QgZm9yIHRoZSBzaXplIG9mICdib29sJyBpbiB0aGUgY29uZmlndXJlZCBDKysgY29tcGlsZXIgKGUuZy4sIGEgdHlwZSkuCitkbmwgRG9uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGJvb2wuaCwgc2luY2UgaXQncyBiZWVuIGRlcHJlY2F0ZWQuCitkbmwKK2RubCBJZiB0aGUgY3VycmVudCBjb21waWxlciBpcyBDIHJhdGhlciB0aGFuIEMrKywgd2UgZ2V0IHRoZSBib29sIGRlZmluaXRpb24KK2RubCBmcm9tIDxzdGRib29sLmg+LgorQUNfREVGVU4oW0NGX0JPT0xfU0laRV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzaXplIG9mIGJvb2xdKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3R5cGVfb2ZfYm9vbCxbCisJcm0gLWYgY2ZfdGVzdC5vdXQKKwlBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKworI2lmZGVmIEhBVkVfR1hYX0JVSUxUSU5fSAorI2luY2x1ZGUgPGcrKy9idWlsdGluLmg+CisjZWxpZiBIQVZFX0dQUF9CVUlMVElOX0gKKyNpbmNsdWRlIDxncHAvYnVpbHRpbi5oPgorI2VsaWYgSEFWRV9CVUlMVElOX0gKKyNpbmNsdWRlIDxidWlsdGluLmg+CisjZW5kaWYKKworI2Vsc2UKKworI2lmICRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKKyNlbmRpZgorCittYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCJjZl90ZXN0Lm91dCIsICJ3Iik7CisJaWYgKGZwICE9IDApIHsKKwkJYm9vbCB4ID0gdHJ1ZTsKKwkJaWYgKChib29sKSgteCkgPj0gMCkKKwkJCWZwdXRzKCJ1bnNpZ25lZCAiLCBmcCk7CisJCWlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKGludCkpICAgICAgIGZwdXRzKCJpbnQiLCAgZnApOworCQllbHNlIGlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKGNoYXIpKSBmcHV0cygiY2hhciIsIGZwKTsKKwkJZWxzZSBpZiAoc2l6ZW9mKHgpID09IHNpemVvZihzaG9ydCkpZnB1dHMoInNob3J0IixmcCk7CisJCWVsc2UgaWYgKHNpemVvZih4KSA9PSBzaXplb2YobG9uZykpIGZwdXRzKCJsb25nIiwgZnApOworCQlmY2xvc2UoZnApOworCX0KKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorCQldLAorCQlbY2ZfY3ZfdHlwZV9vZl9ib29sPWBjYXQgY2ZfdGVzdC5vdXRgCisJCSBpZiB0ZXN0IC16ICIkY2ZfY3ZfdHlwZV9vZl9ib29sIjsgdGhlbgorCQkgICBjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bgorCQkgZmldLAorCQlbY2ZfY3ZfdHlwZV9vZl9ib29sPXVua25vd25dLAorCQlbY2ZfY3ZfdHlwZV9vZl9ib29sPXVua25vd25dKQorCV0pCisJcm0gLWYgY2ZfdGVzdC5vdXQKK0FDX01TR19SRVNVTFQoJGNmX2N2X3R5cGVfb2ZfYm9vbCkKK2lmIHRlc3QgIiRjZl9jdl90eXBlX29mX2Jvb2wiID0gdW5rbm93biA7IHRoZW4KKwljYXNlIC4kTkNVUlNFU19CT09MIGluICModmkKKwkuYXV0b3wuKSBOQ1VSU0VTX0JPT0w9dW5zaWduZWQ7OworCWVzYWMKKwlBQ19NU0dfV0FSTihBc3N1bWluZyAkTkNVUlNFU19CT09MIGZvciB0eXBlIG9mIGJvb2wpCisJY2ZfY3ZfdHlwZV9vZl9ib29sPSROQ1VSU0VTX0JPT0wKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0JVSUxEX0NDIHZlcnNpb246IDYgdXBkYXRlZDogMjAwNi8xMC8xNCAxNToyMzoxNQorZG5sIC0tLS0tLS0tLS0tCitkbmwgSWYgd2UncmUgY3Jvc3MtY29tcGlsaW5nLCBhbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgdG9vbHMgYW5kIHRoZWlyCitkbmwgb3B0aW9ucy4gIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIG9yaWVudGVkIHRvd2FyZCBpZGVudGlmeWluZyB0aGUgaG9zdAorZG5sIGNvbXBpbGVyLCBldGMuLCBidXQgd2UgbmVlZCBhIGJ1aWxkIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHBhcnRzIG9mIHRoZQorZG5sIHNvdXJjZS4KK2RubAorZG5sICQxID0gZGVmYXVsdCBmb3IgJENQUEZMQUdTCitkbmwgJDIgPSBkZWZhdWx0IGZvciAkTElCUworQUNfREVGVU4oW0NGX0JVSUxEX0NDXSxbCitBQ19SRVFVSVJFKFtDRl9QUk9HX0VYVF0pCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKworCSMgZGVmYXVsdHMgdGhhdCB3ZSBtaWdodCB3YW50IHRvIG92ZXJyaWRlCisJOiAke0JVSUxEX0NGTEFHUzo9Jyd9CisJOiAke0JVSUxEX0NQUEZMQUdTOj0naWZlbHNlKFskMV0sLCxbJDFdKSd9CisJOiAke0JVSUxEX0xERkxBR1M6PScnfQorCTogJHtCVUlMRF9MSUJTOj0naWZlbHNlKFskMl0sLCxbJDJdKSd9CisJOiAke0JVSUxEX0VYRUVYVDo9JyR4J30KKwk6ICR7QlVJTERfT0JKRVhUOj0nbyd9CisKKwlBQ19BUkdfV0lUSChidWlsZC1jYywKKwkJWyAgLS13aXRoLWJ1aWxkLWNjPVhYWCAgICAgdGhlIGJ1aWxkIEMgY29tcGlsZXIgKCRCVUlMRF9DQyldLAorCQlbQlVJTERfQ0M9IiR3aXRodmFsIl0sCisJCVtBQ19DSEVDS19QUk9HUyhCVUlMRF9DQywgZ2NjIGNjIGNsKV0pCisJQUNfTVNHX0NIRUNLSU5HKGZvciBuYXRpdmUgYnVpbGQgQyBjb21waWxlcikKKwlBQ19NU0dfUkVTVUxUKCRCVUlMRF9DQykKKworCUFDX01TR19DSEVDS0lORyhmb3IgbmF0aXZlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yKQorCUFDX0FSR19XSVRIKGJ1aWxkLWNwcCwKKwkJWyAgLS13aXRoLWJ1aWxkLWNwcD1YWFggICAgdGhlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yICgkQlVJTERfQ1BQKV0sCisJCVtCVUlMRF9DUFA9IiR3aXRodmFsIl0sCisJCVtCVUlMRF9DUFA9JyR7QlVJTERfQ0N9IC1FJ10pCisJQUNfTVNHX1JFU1VMVCgkQlVJTERfQ1BQKQorCisJQUNfTVNHX0NIRUNLSU5HKGZvciBuYXRpdmUgYnVpbGQgQyBmbGFncykKKwlBQ19BUkdfV0lUSChidWlsZC1jZmxhZ3MsCisJCVsgIC0td2l0aC1idWlsZC1jZmxhZ3M9WFhYIHRoZSBidWlsZCBDIGNvbXBpbGVyLWZsYWdzICgkQlVJTERfQ0ZMQUdTKV0sCisJCVtCVUlMRF9DRkxBR1M9IiR3aXRodmFsIl0pCisJQUNfTVNHX1JFU1VMVCgkQlVJTERfQ0ZMQUdTKQorCisJQUNfTVNHX0NIRUNLSU5HKGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3ItZmxhZ3MpCisJQUNfQVJHX1dJVEgoYnVpbGQtY3BwZmxhZ3MsCisJCVsgIC0td2l0aC1idWlsZC1jcHBmbGFncz1YWFggdGhlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yLWZsYWdzICgkQlVJTERfQ1BQRkxBR1MpXSwKKwkJW0JVSUxEX0NQUEZMQUdTPSIkd2l0aHZhbCJdKQorCUFDX01TR19SRVNVTFQoJEJVSUxEX0NQUEZMQUdTKQorCisJQUNfTVNHX0NIRUNLSU5HKGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWZsYWdzKQorCUFDX0FSR19XSVRIKGJ1aWxkLWxkZmxhZ3MsCisJCVsgIC0td2l0aC1idWlsZC1sZGZsYWdzPVhYWCB0aGUgYnVpbGQgbGlua2VyLWZsYWdzICgkQlVJTERfTERGTEFHUyldLAorCQlbQlVJTERfTERGTEFHUz0iJHdpdGh2YWwiXSkKKwlBQ19NU0dfUkVTVUxUKCRCVUlMRF9MREZMQUdTKQorCisJQUNfTVNHX0NIRUNLSU5HKGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWxpYnJhcmllcykKKwlBQ19BUkdfV0lUSChidWlsZC1saWJzLAorCQlbICAtLXdpdGgtYnVpbGQtbGlicz1YWFggICB0aGUgYnVpbGQgbGlicmFyaWVzICgke0JVSUxEX0xJQlN9KV0sCisJCVtCVUlMRF9MSUJTPSIkd2l0aHZhbCJdKQorCUFDX01TR19SRVNVTFQoJEJVSUxEX0xJQlMpCisKKwkjIHRoaXMgYXNzdW1lcyB3ZSdyZSBvbiBVbml4LgorCUJVSUxEX0VYRUVYVD0KKwlCVUlMRF9PQkpFWFQ9bworCisJOiAke0JVSUxEX0NDOj0nJHtDQ30nfQorCisJaWYgKCB0ZXN0ICIkQlVJTERfQ0MiID0gIiRDQyIgfHwgdGVzdCAiJEJVSUxEX0NDIiA9ICcke0NDfScgKSA7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKFtDcm9zcy1idWlsZCByZXF1aXJlcyB0d28gY29tcGlsZXJzLgorVXNlIC0td2l0aC1idWlsZC1jYyB0byBzcGVjaWZ5IHRoZSBuYXRpdmUgY29tcGlsZXIuXSkKKwlmaQorCitlbHNlCisJOiAke0JVSUxEX0NDOj0nJHtDQ30nfQorCTogJHtCVUlMRF9DUFA6PScke0NQUH0nfQorCTogJHtCVUlMRF9DRkxBR1M6PScke0NGTEFHU30nfQorCTogJHtCVUlMRF9DUFBGTEFHUzo9JyR7Q1BQRkxBR1N9J30KKwk6ICR7QlVJTERfTERGTEFHUzo9JyR7TERGTEFHU30nfQorCTogJHtCVUlMRF9MSUJTOj0nJHtMSUJTfSd9CisJOiAke0JVSUxEX0VYRUVYVDo9JyR4J30KKwk6ICR7QlVJTERfT0JKRVhUOj0nbyd9CitmaQorCitBQ19TVUJTVChCVUlMRF9DQykKK0FDX1NVQlNUKEJVSUxEX0NQUCkKK0FDX1NVQlNUKEJVSUxEX0NGTEFHUykKK0FDX1NVQlNUKEJVSUxEX0NQUEZMQUdTKQorQUNfU1VCU1QoQlVJTERfTERGTEFHUykKK0FDX1NVQlNUKEJVSUxEX0xJQlMpCitBQ19TVUJTVChCVUlMRF9FWEVFWFQpCitBQ19TVUJTVChCVUlMRF9PQkpFWFQpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NGR19ERUZBVUxUUyB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMDUvMDkvMjQgMTY6MTU6MDAKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbnRvIHdoaWNoIHdlJ2xsIGluc3RhbGwgbmN1cnNlcy4gIFRoaXMKK2RubCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlcidzIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgVGhlcmUncyB0d28gaXRlbXMgdG8KK2RubCBsb29rIGZvcjoKK2RubAkxLiB0aGUgcHJlZml4IChlLmcuLCAvdXNyKQorZG5sCTIuIHRoZSBoZWFkZXIgZmlsZXMgKGUuZy4sIC91c3IvaW5jbHVkZS9uY3Vyc2VzKQorZG5sIFdlJ2xsIGxvb2sgZm9yIGEgcHJldmlvdXMgaW5zdGFsbGF0aW9uIG9mIG5jdXJzZXMgYW5kIHVzZSB0aGUgc2FtZSBkZWZhdWx0cy4KK2RubAorZG5sIFdlIGRvbid0IHVzZSBBQ19QUkVGSVhfREVGQVVMVCwgYmVjYXVzZSBpdCBnZXRzIGV2YWx1YXRlZCB0b28gc29vbiwgYW5kCitkbmwgd2UgZG9uJ3QgdXNlIEFDX1BSRUZJWF9QUk9HUkFNLCBiZWNhdXNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaCBuY3Vyc2VzJ3MKK2RubCBwcm9ncmFtcyBmcm9tIGEgdmVuZG9yJ3MuCitBQ19ERUZVTihbQ0ZfQ0ZHX0RFRkFVTFRTXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3IgcHJlZml4KQoraWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIiA7IHRoZW4KKwljYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluCisJCSMgbm9uLXZlbmRvciBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb25mbGljdAorCW9wZW5ic2QqfGZyZWVic2QqfGxpbnV4KnxjeWd3aW4qfGsqYnNkKi1nbnUpCisJCXByZWZpeD0vdXNyCisJCTs7CisJKikJcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorCQk7OworCWVzYWMKK2ZpCitBQ19NU0dfUkVTVUxUKCRwcmVmaXgpCisKK2lmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSIgOyB0aGVuCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGRlZmF1bHQgaW5jbHVkZS1kaXJlY3RvcnkpCit0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAxPiZBQ19GRF9NU0cKK2ZvciBjZl9zeW1ib2wgaW4gXAorCSRpbmNsdWRlZGlyIFwKKwkkaW5jbHVkZWRpci9uY3Vyc2VzIFwKKwkkcHJlZml4L2luY2x1ZGUgXAorCSRwcmVmaXgvaW5jbHVkZS9uY3Vyc2VzIFwKKwkvdXNyL2xvY2FsL2luY2x1ZGUgXAorCS91c3IvbG9jYWwvaW5jbHVkZS9uY3Vyc2VzIFwKKwkvdXNyL2luY2x1ZGUgXAorCS91c3IvaW5jbHVkZS9uY3Vyc2VzCitkbworCWNmX2Rpcj1gZXZhbCBlY2hvICRjZl9zeW1ib2xgCisJaWYgdGVzdCAtZiAkY2ZfZGlyL2N1cnNlcy5oIDsgdGhlbgorCWlmICggZmdyZXAgTkNVUlNFU19WRVJTSU9OICRjZl9kaXIvY3Vyc2VzLmggMj4mMSA+L2Rldi9udWxsICkgOyB0aGVuCisJCWluY2x1ZGVkaXI9IiRjZl9zeW1ib2wiCisJCXRlc3QgLW4gIiR2ZXJib3NlIiAgJiYgZWNobyAkYWNfbiAiCWZvdW5kICIgMT4mQUNfRkRfTVNHCisJCWJyZWFrCisJZmkKKwlmaQorCXRlc3QgLW4gIiR2ZXJib3NlIiAgJiYgZWNobyAiCXRlc3RlZCAkY2ZfZGlyIiAxPiZBQ19GRF9NU0cKK2RvbmUKK0FDX01TR19SRVNVTFQoJGluY2x1ZGVkaXIpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DR0VURU5UIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMC8wOC8xMiAyMzoxODo1MgorZG5sIC0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgdGVybWluYWwtY2FwYWJpbGl0eSBkYXRhYmFzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZS4gIElmIG5vdCwKK2RubCBuY3Vyc2VzIGhhcyBhIG11Y2gtcmVkdWNlZCB2ZXJzaW9uLgorQUNfREVGVU4oW0NGX0NHRVRFTlRdLFsKK0FDX01TR19DSEVDS0lORyhmb3IgdGVybWluYWwtY2FwYWJpbGl0eSBkYXRhYmFzZSBmdW5jdGlvbnMpCitBQ19DQUNIRV9WQUwoY2ZfY3ZfY2dldGVudCxbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkbGliLmg+XSxbCisJY2hhciB0ZW1wWzEyOF07CisJY2hhciAqYnVmID0gdGVtcDsKKwljaGFyICpkYl9hcnJheSA9IHRlbXA7CisJY2dldGVudCgmYnVmLCAvKiBpbnQgKiwgKi8gJmRiX2FycmF5LCAidnQxMDAiKTsKKwljZ2V0Y2FwKGJ1ZiwgInRjIiwgJz0nKTsKKwljZ2V0bWF0Y2goYnVmLCAidGMiKTsKKwldLAorCVtjZl9jdl9jZ2V0ZW50PXllc10sCisJW2NmX2N2X2NnZXRlbnQ9bm9dKQorXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X2NnZXRlbnQpCit0ZXN0ICIkY2ZfY3ZfY2dldGVudCIgPSB5ZXMgJiYgQUNfREVGSU5FKEhBVkVfQlNEX0NHRVRFTlQpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NIRUNLX0NBQ0hFIHZlcnNpb246IDExIHVwZGF0ZWQ6IDIwMDgvMDMvMjMgMTQ6NDU6NTkKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHdlJ3JlIGFjY2lkZW50YWxseSB1c2luZyBhIGNhY2hlIGZyb20gYSBkaWZmZXJlbnQgbWFjaGluZS4KK2RubCBEZXJpdmUgdGhlIHN5c3RlbSBuYW1lLCBhcyBhIGNoZWNrIGZvciByZXVzaW5nIHRoZSBhdXRvY29uZiBjYWNoZS4KK2RubAorZG5sIElmIHdlJ3ZlIHBhY2thZ2VkIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiwgcnVuIHRoYXQgKHNpbmNlIGl0IGRvZXMgYQorZG5sIGJldHRlciBqb2IgdGhhbiB1bmFtZSkuICBOb3JtYWxseSB3ZSdsbCB1c2UgQUNfQ0FOT05JQ0FMX0hPU1QsIGJ1dCBhbGxvdworZG5sIGFuIGV4dHJhIHBhcmFtZXRlciB0aGF0IHdlIG1heSBvdmVycmlkZSwgZS5nLiwgZm9yIEFDX0NBTk9OSUNBTF9TWVNURU0KK2RubCB3aGljaCBpcyB1c2VmdWwgaW4gY3Jvc3MtY29tcGlsZXMuCitkbmwKK2RubCBOb3RlOiB3ZSB3b3VsZCB1c2UgJGFjX2NvbmZpZ19zdWIsIGJ1dCB0aGF0IGlzIG9uZSBvZiB0aGUgcGxhY2VzIHdoZXJlCitkbmwgYXV0b2NvbmYgMi41eCBicm9rZSBjb21wYXRpYmlsaXR5IHdpdGggYXV0b2NvbmYgMi4xMworQUNfREVGVU4oW0NGX0NIRUNLX0NBQ0hFXSwKK1sKK2lmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuZ3Vlc3MgfHwgdGVzdCAtZiAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MgOyB0aGVuCisJaWZlbHNlKFskMV0sLFtBQ19DQU5PTklDQUxfSE9TVF0sWyQxXSkKKwlzeXN0ZW1fbmFtZT0iJGhvc3Rfb3MiCitlbHNlCisJc3lzdGVtX25hbWU9ImAodW5hbWUgLXMgLXIpIDI+L2Rldi9udWxsYCIKKwlpZiB0ZXN0IC16ICIkc3lzdGVtX25hbWUiIDsgdGhlbgorCQlzeXN0ZW1fbmFtZT0iYChob3N0bmFtZSkgMj4vZGV2L251bGxgIgorCWZpCitmaQordGVzdCAtbiAiJHN5c3RlbV9uYW1lIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoU1lTVEVNX05BTUUsIiRzeXN0ZW1fbmFtZSIpCitBQ19DQUNIRV9WQUwoY2ZfY3Zfc3lzdGVtX25hbWUsW2NmX2N2X3N5c3RlbV9uYW1lPSIkc3lzdGVtX25hbWUiXSkKKwordGVzdCAteiAiJHN5c3RlbV9uYW1lIiAmJiBzeXN0ZW1fbmFtZT0iJGNmX2N2X3N5c3RlbV9uYW1lIgordGVzdCAtbiAiJGNmX2N2X3N5c3RlbV9uYW1lIiAmJiBBQ19NU0dfUkVTVUxUKENvbmZpZ3VyaW5nIGZvciAkY2ZfY3Zfc3lzdGVtX25hbWUpCisKK2lmIHRlc3QgIi4kc3lzdGVtX25hbWUiICE9ICIuJGNmX2N2X3N5c3RlbV9uYW1lIiA7IHRoZW4KKwlBQ19NU0dfUkVTVUxUKENhY2hlZCBzeXN0ZW0gbmFtZSAoJHN5c3RlbV9uYW1lKSBkb2VzIG5vdCBhZ3JlZSB3aXRoIGFjdHVhbCAoJGNmX2N2X3N5c3RlbV9uYW1lKSkKKwlBQ19NU0dfRVJST1IoIlBsZWFzZSByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCB0cnkgYWdhaW4uIikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NIRUNLX0VSUk5PIHZlcnNpb246IDEwIHVwZGF0ZWQ6IDIwMDgvMDgvMjIgMTY6MzM6MjIKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBkYXRhIHRoYXQgaXMgdXN1YWxseSBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gb3IgPGVycm5vLmg+LCBlLmcuLAorZG5sIHRoZSAnZXJybm8nIHZhcmlhYmxlLiAgRGVmaW5lIGEgREVDTF94eHggc3ltYm9sIGlmIHdlIG11c3QgZGVjbGFyZSBpdAorZG5sIG91cnNlbHZlcy4KK2RubAorZG5sICQxID0gdGhlIG5hbWUgdG8gY2hlY2sKK2RubCAkMiA9IHRoZSBhc3N1bWVkIHR5cGUKK0FDX0RFRlVOKFtDRl9DSEVDS19FUlJOT10sCitbCitBQ19DQUNIRV9DSEVDSyhpZiBleHRlcm5hbCAkMSBpcyBkZWNsYXJlZCwgY2ZfY3ZfZGNsXyQxLFsKKyAgICBBQ19UUllfQ09NUElMRShbCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPiBdLAorICAgIGlmZWxzZSgkMiwsaW50LCQyKSB4ID0gKGlmZWxzZSgkMiwsaW50LCQyKSkgJDEsCisgICAgW2NmX2N2X2RjbF8kMT15ZXNdLAorICAgIFtjZl9jdl9kY2xfJDE9bm9dKQorXSkKKworaWYgdGVzdCAiJGNmX2N2X2RjbF8kMSIgPSBubyA7IHRoZW4KKyAgICBDRl9VUFBFUihjZl9yZXN1bHQsZGVjbF8kMSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoJGNmX3Jlc3VsdCkKK2ZpCisKKyMgSXQncyBwb3NzaWJsZSAoZm9yIG5lYXItVU5JWCBjbG9uZXMpIHRoYXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdAorQ0ZfQ0hFQ0tfRVhURVJOX0RBVEEoJDEsaWZlbHNlKCQyLCxpbnQsJDIpKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DSEVDS19FWFRFUk5fREFUQSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDEvMTIvMzAgMTg6MDM6MjMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBleGlzdGVuY2Ugb2YgZXh0ZXJuYWwgZGF0YSBpbiB0aGUgY3VycmVudCBzZXQgb2YgbGlicmFyaWVzLiAgSWYKK2RubCB3ZSBjYW4gbW9kaWZ5IGl0LCBpdCdzIHJlYWwgZW5vdWdoLgorZG5sICQxID0gdGhlIG5hbWUgdG8gY2hlY2sKK2RubCAkMiA9IGl0cyB0eXBlCitBQ19ERUZVTihbQ0ZfQ0hFQ0tfRVhURVJOX0RBVEFdLAorWworQUNfQ0FDSEVfQ0hFQ0soaWYgZXh0ZXJuYWwgJDEgZXhpc3RzLCBjZl9jdl9oYXZlXyQxLFsKKyAgICBBQ19UUllfTElOSyhbCisjdW5kZWYgJDEKK2V4dGVybiAkMiAkMTsKK10sCisgICAgWyQxID0gMl0sCisgICAgW2NmX2N2X2hhdmVfJDE9eWVzXSwKKyAgICBbY2ZfY3ZfaGF2ZV8kMT1ub10pCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfaGF2ZV8kMSIgPSB5ZXMgOyB0aGVuCisgICAgQ0ZfVVBQRVIoY2ZfcmVzdWx0LGhhdmVfJDEpCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKCRjZl9yZXN1bHQpCitmaQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NIRUNLX0dQTV9XR0VUQ0ggdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA3LzA0LzI4IDE0OjM4OjA2CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIEdQTSBpcyBhbHJlYWR5IGxpbmtlZCB3aXRoIGN1cnNlcy4gIElmIHNvIC0gYW5kIGlmIHRoZSBsaW5rYWdlCitkbmwgaXMgbm90ICJ3ZWFrIiAtIHdhcm4gYWJvdXQgdGhpcyBiZWNhdXNlIGl0IGNhbiBjcmVhdGUgcHJvYmxlbXMgbGlua2luZworZG5sIGFwcGxpY2F0aW9ucyB3aXRoIG5jdXJzZXMuCitBQ19ERUZVTihbQ0ZfQ0hFQ0tfR1BNX1dHRVRDSF0sWworQUNfQ0hFQ0tfTElCKGdwbSxHcG1fV2dldGNoLFsKKworQUNfQ0FDSEVfQ0hFQ0soaWYgR1BNIGlzIHdlYWtseSBib3VuZCB0byBjdXJzZXMgbGlicmFyeSwgY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCxbCitjZl9jdl9jaGVja19ncG1fd2dldGNoPXVua25vd24KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllcyA7IHRoZW4KKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8Z3BtLmg+CitpbnQgbWFpbigpCit7CisJR3BtX1dnZXRjaCgpOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CitDRl9FT0YKKworCWNmX3NhdmVfTElCUz0iJExJQlMiCisJIyBUaGlzIG9ubHkgd29ya3MgaWYgd2UgY2FuIGxvb2sgYXQgdGhlIHN5bWJvbCB0YWJsZS4gIElmIGEgc2hhcmVkCisJIyBsaWJyYXJ5IGlzIHN0cmlwcGVkIGZvciBpbnN0YWxsLCB3ZSBjYW5ub3QgdXNlIHRoYXQuICBTbyB3ZSdyZSBmb3JjZWQKKwkjIHRvIHJlbHkgb24gdGhlIHN0YXRpYyBsaWJyYXJ5LCBub3RpbmcgdGhhdCBzb21lIHBhY2thZ2VycyBtYXkgbm90CisJIyBpbmNsdWRlIGl0LgorCUxJQlM9Ii1zdGF0aWMgLWxncG0gLWR5bmFtaWMgJExJQlMiCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgOyB0aGVuCisJCWlmIEFDX1RSWV9FVkFMKGFjX2xpbmspIDsgdGhlbgorCQkJY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaD1gbm0gY29uZnRlc3QkYWNfZXhlZXh0IHwgZWdyZXAgJ1w8d2dldGNoXD4nIHwgZWdyZXAgJ1w8W1t2VndXXV1cPidgCisJCQl0ZXN0IC1uICIkY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCIgJiYgY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaD15ZXMKKwkJCXRlc3QgLXogIiRjZl9jdl9jaGVja19ncG1fd2dldGNoIiAmJiBjZl9jdl9jaGVja19ncG1fd2dldGNoPW5vCisJCWZpCisJZmkKKwlybSAtZiBjb25mdGVzdCoKKwlMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKK10pCisKK2lmIHRlc3QgIiRjZl9jdl9jaGVja19ncG1fd2dldGNoIiAhPSB5ZXMgOyB0aGVuCisJQUNfTVNHX1dBUk4oR1BNIGxpYnJhcnkgaXMgYWxyZWFkeSBsaW5rZWQgd2l0aCBjdXJzZXMgLSByZWFkIHRoZSBGQVEpCitmaQorXSldKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NQUF9QQVJBTV9JTklUIHZlcnNpb246IDQgdXBkYXRlZDogMjAwMS8wNC8wNyAyMjozMToxOAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIEMrKyBjb21waWxlciBhY2NlcHRzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24uICBUaGlzCitkbmwgaXMgYSBsYXRlIGZlYXR1cmUgZm9yIHRoZSBzdGFuZGFyZCBhbmQgaXMgbm90IGluIHNvbWUgcmVjZW50IGNvbXBpbGVycworZG5sICgxOTk5LzkvMTEpLgorQUNfREVGVU4oW0NGX0NQUF9QQVJBTV9JTklUXSwKK1sKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCitBQ19DQUNIRV9DSEVDSyhpZiAkQ1hYIGFjY2VwdHMgcGFyYW1ldGVyIGluaXRpYWxpemF0aW9uLGNmX2N2X2NwcF9wYXJhbV9pbml0LFsKKwlBQ19MQU5HX1NBVkUKKwlBQ19MQU5HX0NQTFVTUExVUworCUFDX1RSWV9SVU4oWworY2xhc3MgVEVTVCB7Citwcml2YXRlOgorCWludCB2YWx1ZTsKK3B1YmxpYzoKKwlURVNUKGludCB4ID0gMSk7CisJflRFU1QoKTsKK307CisKK1RFU1Q6OlRFU1QoaW50IHggPSAxKQkvLyBzb21lIGNvbXBpbGVycyBkbyBub3QgbGlrZSBzZWNvbmQgaW5pdGlhbGl6ZXIKK3sKKwl2YWx1ZSA9IHg7Cit9Cit2b2lkIG1haW4oKSB7IH0KK10sCisJW2NmX2N2X2NwcF9wYXJhbV9pbml0PXllc10sCisJW2NmX2N2X2NwcF9wYXJhbV9pbml0PW5vXSwKKwlbY2ZfY3ZfY3BwX3BhcmFtX2luaXQ9dW5rbm93bl0pCisJQUNfTEFOR19SRVNUT1JFCitdKQorZmkKK3Rlc3QgIiRjZl9jdl9jcHBfcGFyYW1faW5pdCIgPSB5ZXMgJiYgQUNfREVGSU5FKENQUF9IQVNfUEFSQU1fSU5JVCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1BQX1NUQVRJQ19DQVNUIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8wNy8yMyAxNjo1Mjo0MworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBDKysgY29tcGlsZXIgYWNjZXB0cyBzdGF0aWNfY2FzdCBpbiBnZW5lcmljcy4gIFRoaXMgYXBwZWFycyB0bworZG5sIG5vdCBiZSBzdXBwb3J0ZWQgaW4gZysrIGJlZm9yZSAzLjAKK0FDX0RFRlVOKFtDRl9DUFBfU1RBVElDX0NBU1RdLAorWworaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKworQUNfQ0FDSEVfQ0hFQ0soaWYgJENYWCBhY2NlcHRzIHN0YXRpY19jYXN0LGNmX2N2X2NwcF9zdGF0aWNfY2FzdCxbCisJQUNfTEFOR19TQVZFCisJQUNfTEFOR19DUExVU1BMVVMKKworCUFDX1RSWV9DT01QSUxFKFsKK2NsYXNzIE5DdXJzZXNQYW5lbAoreworcHVibGljOgorICBOQ3Vyc2VzUGFuZWwoaW50IG5saW5lcywKKwkgICAgICAgaW50IG5jb2xzLAorCSAgICAgICBpbnQgYmVnaW5feSA9IDAsCisJICAgICAgIGludCBiZWdpbl94ID0gMCkKKyAgeworICB9CisKKyAgfk5DdXJzZXNQYW5lbCgpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkN1cnNlc1VzZXJQYW5lbCA6IHB1YmxpYyBOQ3Vyc2VzUGFuZWwKK3sKK3B1YmxpYzoKKyAgTkN1cnNlc1VzZXJQYW5lbCAoaW50IG5saW5lcywKKwkJICAgIGludCBuY29scywKKwkJICAgIGludCBiZWdpbl95ID0gMCwKKwkJICAgIGludCBiZWdpbl94ID0gMCwKKwkJICAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBzdGF0aWNfY2FzdDxUKj4oMCkpCisgICAgOiBOQ3Vyc2VzUGFuZWwgKG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpCisgIHsKKyAgfTsKKyAgTkN1cnNlc1VzZXJQYW5lbChjb25zdCBUKiBwX1VzZXJEYXRhID0gc3RhdGljX2Nhc3Q8VCo+KDApKSA6IE5DdXJzZXNQYW5lbCgpCisgIHsKKyAgfTsKKworICB2aXJ0dWFsIH5OQ3Vyc2VzVXNlclBhbmVsKCkge307Cit9OworXSxbCisJY29uc3QgY2hhciogcF9Vc2VyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPigwKV0sCisJW2NmX2N2X2NwcF9zdGF0aWNfY2FzdD15ZXNdLAorCVtjZl9jdl9jcHBfc3RhdGljX2Nhc3Q9bm9dKQorCisJQUNfTEFOR19SRVNUT1JFCitdKQorCitmaQorCit0ZXN0ICIkY2ZfY3ZfY3BwX3N0YXRpY19jYXN0IiA9IHllcyAmJiBBQ19ERUZJTkUoQ1BQX0hBU19TVEFUSUNfQ0FTVCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ19JTkxJTkUgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA3LzA4LzExIDE0OjA5OjUwCitkbmwgLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgQyBjb21waWxlciBzdXBwb3J0cyAiaW5saW5lIi4KK2RubCAkMSBpcyB0aGUgbmFtZSBvZiBhIHNoZWxsIHZhcmlhYmxlIHRvIHNldCBpZiBpbmxpbmUgaXMgc3VwcG9ydGVkCitkbmwgJDIgaXMgdGhlIHRocmVzaG9sZCBmb3IgZ2NjIDQueCdzIG9wdGlvbiBjb250cm9sbGluZyBtYXhpbXVtIGlubGluZSBzaXplCitBQ19ERUZVTihbQ0ZfQ19JTkxJTkVdLFsKK0FDX0NfSU5MSU5FCiskMT0KK2lmIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gOyB0aGVuCisgICQxPWlubGluZQorICBpZiB0ZXN0ICIkSU5URUxfQ09NUElMRVIiID0geWVzCisgIHRoZW4KKyAgICA6CisgIGVsaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKyAgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKGlmIGdjYyBzdXBwb3J0cyBvcHRpb25zIHRvIHR1bmUgaW5saW5pbmcsY2ZfY3ZfZ2NjX2lubGluZSxbCisgICAgICBjZl9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLS1wYXJhbSBtYXgtaW5saW5lLWluc25zLXNpbmdsZT0kMiIKKyAgICAgIEFDX1RSWV9DT01QSUxFKFtpbmxpbmUgaW50IGZvbyh2b2lkKSB7IHJldHVybiAxOyB9XSwKKyAgICAgIFske2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59IGZvbygpXSwKKyAgICAgIFtjZl9jdl9nY2NfaW5saW5lPXllc10sCisgICAgICBbY2ZfY3ZfZ2NjX2lubGluZT1ub10pCisgICAgICBDRkxBR1M9JGNmX3NhdmVfQ0ZMQUdTCisgICAgXSkKKyAgICBpZiB0ZXN0ICIkY2ZfY3ZfZ2NjX2lubGluZSIgPSB5ZXMgOyB0aGVuCisgICAgICAgIENGX0FERF9DRkxBR1MoWy0tcGFyYW0gbWF4LWlubGluZS1pbnNucy1zaW5nbGU9JDJdKQorICAgIGZpCisgIGZpCitmaQorQUNfU1VCU1QoJDEpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0RJUk5BTUUgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDAyLzEyLzIxIDE5OjI1OjUyCitkbmwgLS0tLS0tLS0tLQorZG5sICJkaXJuYW1lIiBpcyBub3QgcG9ydGFibGUsIHNvIHdlIGZha2UgaXQgd2l0aCBhIHNoZWxsIHNjcmlwdC4KK0FDX0RFRlVOKFtDRl9ESVJOQU1FXSxbJDE9YGVjaG8gJDIgfCBzZWQgLWUgJ3MlL1tbXi9dXSokJSUnYF0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRElSU19UT19NQUtFIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMi8wMi8yMyAyMDozODozMQorZG5sIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0NGX0RJUlNfVE9fTUFLRV0sCitbCitESVJTX1RPX01BS0U9ImxpYiIKK2ZvciBjZl9pdGVtIGluICRjZl9saXN0X21vZGVscworZG8KKwlDRl9PQkpfU1VCRElSKCRjZl9pdGVtLGNmX3N1YmRpcikKKwlmb3IgY2ZfaXRlbTIgaW4gJERJUlNfVE9fTUFLRQorCWRvCisJCXRlc3QgJGNmX2l0ZW0yID0gJGNmX3N1YmRpciAmJiBicmVhaworCWRvbmUKKwl0ZXN0ICIuJGNmX2l0ZW0yIiAhPSAiLiRjZl9zdWJkaXIiICYmIERJUlNfVE9fTUFLRT0iJERJUlNfVE9fTUFLRSAkY2Zfc3ViZGlyIgorZG9uZQorZm9yIGNmX2RpciBpbiAkRElSU19UT19NQUtFCitkbworCXRlc3QgISAtZCAkY2ZfZGlyICYmIG1rZGlyICRjZl9kaXIKK2RvbmUKK0FDX1NVQlNUKERJUlNfVE9fTUFLRSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRElTQUJMRV9MRUFLUyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTU6MTA6NDIKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29tYmluZSBuby1sZWFrIGNoZWNrcyB3aXRoIHRoZSBsaWJyYXJpZXMgb3IgdG9vbHMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlCitkbmwgY2hlY2tzLgorQUNfREVGVU4oW0NGX0RJU0FCTEVfTEVBS1NdLFsKKworQUNfUkVRVUlSRShbQ0ZfV0lUSF9ETUFMTE9DXSkKK0FDX1JFUVVJUkUoW0NGX1dJVEhfREJNQUxMT0NdKQorQUNfUkVRVUlSRShbQ0ZfV0lUSF9WQUxHUklORF0pCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBwZXJmb3JtIG1lbW9yeS1sZWFrIHRlc3RpbmcpCitBQ19BUkdfRU5BQkxFKGxlYWtzLAorCVsgIC0tZGlzYWJsZS1sZWFrcyAgICAgICAgIHRlc3Q6IGZyZWUgcGVybWFuZW50IG1lbW9yeSwgYW5hbHl6ZSBsZWFrc10sCisJW3dpdGhfbm9fbGVha3M9eWVzXSwKKwk6ICR7d2l0aF9ub19sZWFrczo9bm99KQorQUNfTVNHX1JFU1VMVCgkd2l0aF9ub19sZWFrcykKKworaWYgdGVzdCAiJHdpdGhfbm9fbGVha3MiID0geWVzIDsgdGhlbgorCUFDX0RFRklORShOT19MRUFLUykKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0VOQUJMRV9SUEFUSCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDgvMDkvMTMgMTA6MjI6MzAKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgcnBhdGggb3B0aW9uIHNob3VsZCBiZSB1c2VkLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlCitkbmwgY2ZfY3ZfbGRfcnBhdGggaWYgc28uCitBQ19ERUZVTihbQ0ZfRU5BQkxFX1JQQVRIXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiBycGF0aCBvcHRpb24gc2hvdWxkIGJlIHVzZWQpCitBQ19BUkdfRU5BQkxFKHJwYXRoLAorWyAgLS1lbmFibGUtcnBhdGggICAgICAgICAgdXNlIHJwYXRoIG9wdGlvbiB3aGVuIGdlbmVyYXRpbmcgc2hhcmVkIGxpYnJhcmllc10sCitbY2ZfY3ZfbGRfcnBhdGg9JGVuYWJsZXZhbF0sCitbY2ZfY3ZfbGRfcnBhdGg9bm9dKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfbGRfcnBhdGgpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0VSUk5PIHZlcnNpb246IDUgdXBkYXRlZDogMTk5Ny8xMS8zMCAxMjo0NDozOQorZG5sIC0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgJ2Vycm5vJyBpcyBkZWNsYXJlZCBpbiA8ZXJybm8uaD4KK0FDX0RFRlVOKFtDRl9FUlJOT10sCitbCitDRl9DSEVDS19FUlJOTyhlcnJubykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRVRJUF9ERUZJTkVTIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMy8wMy8yMiAxOToxMzo0MworZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIFRlc3QgZm9yIGNvbmZsaWN0aW5nIGRlZmluaXRpb25zIG9mIGV4Y2VwdGlvbiBpbiBnY2MgMi44LjAsIGV0Yy4sIGJldHdlZW4KK2RubCBtYXRoLmggYW5kIGJ1aWx0aW4uaCwgb25seSBmb3IgbmN1cnNlcworQUNfREVGVU4oW0NGX0VUSVBfREVGSU5FU10sCitbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHNwZWNpYWwgZGVmaW5lcyBuZWVkZWQgZm9yIGV0aXAuaCkKK2NmX3NhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKK2NmX3Jlc3VsdD0ibm9uZSIKK2ZvciBjZl9tYXRoIGluICIiIE1BVEhfSAorZG8KK2ZvciBjZl9leGNwIGluICIiIE1BVEhfRVhDRVBUSU9OCitkbworCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyAtSSR7c3JjZGlyfS9jKysgLUkke3NyY2Rpcn0vbWVudSAtSSR7c3JjZGlyfS9pbmNsdWRlIgorCXRlc3QgLW4gIiRjZl9tYXRoIiAmJiBDWFhGTEFHUz0iJENYWEZMQUdTIC1ERVRJUF9ORUVEU18ke2NmX21hdGh9IgorCXRlc3QgLW4gIiRjZl9leGNwIiAmJiBDWFhGTEFHUz0iJENYWEZMQUdTIC1ERVRJUF9ORUVEU18ke2NmX2V4Y3B9IgorQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPGV0aXAuaC5pbj4KK10sW10sWworCXRlc3QgLW4gIiRjZl9tYXRoIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoRVRJUF9ORUVEU18ke2NmX21hdGh9KQorCXRlc3QgLW4gIiRjZl9leGNwIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoRVRJUF9ORUVEU18ke2NmX2V4Y3B9KQorCWNmX3Jlc3VsdD0iJGNmX21hdGggJGNmX2V4Y3AiCisJYnJlYWsKK10sW10pCitkb25lCitkb25lCitBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCitDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MiCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZJTkRfTElOS0FHRSB2ZXJzaW9uOiAxMiB1cGRhdGVkOiAyMDA3LzA3LzI5IDIwOjEzOjUzCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCBhIGxpYnJhcnkgKHNwZWNpZmljYWxseSB0aGUgbGlua2FnZSB1c2VkIGluIHRoZSBjb2RlIGZyYWdtZW50KSwKK2RubCBzZWFyY2hpbmcgZm9yIGl0IGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBsaWJyYXJ5IHBhdGguCitkbmwgU2VlIGFsc28gQ0ZfQUREX1NFQVJDSFBBVEguCitkbmwKK2RubCBQYXJhbWV0ZXJzICg0LW9uIGFyZSBvcHRpb25hbCk6CitkbmwgICAgICQxID0gaGVhZGVycyBmb3IgbGlicmFyeSBlbnRyeXBvaW50CitkbmwgICAgICQyID0gY29kZSBmcmFnbWVudCBmb3IgbGlicmFyeSBlbnRyeXBvaW50CitkbmwgICAgICQzID0gdGhlIGxpYnJhcnkgbmFtZSB3aXRob3V0IHRoZSAiLWwiIG9wdGlvbiBvciAiLnNvIiBzdWZmaXguCitkbmwgICAgICQ0ID0gYWN0aW9uIHRvIHBlcmZvcm0gaWYgc3VjY2Vzc2Z1bCAoZGVmYXVsdDogdXBkYXRlIENQUEZMQUdTLCBldGMpCitkbmwgICAgICQ1ID0gYWN0aW9uIHRvIHBlcmZvcm0gaWYgbm90IHN1Y2Nlc3NmdWwKK2RubCAgICAgJDYgPSBtb2R1bGUgbmFtZSwgaWYgbm90IHRoZSBzYW1lIGFzIHRoZSBsaWJyYXJ5IG5hbWUKK2RubCAgICAgJDcgPSBleHRyYSBsaWJyYXJpZXMKK2RubAorZG5sIFNldHMgdGhlc2UgdmFyaWFibGVzOgorZG5sICAgICAkY2ZfY3ZfZmluZF9saW5rYWdlXyQzIC0geWVzL25vIGFjY29yZGluZyB0byB3aGV0aGVyIGxpbmthZ2UgaXMgZm91bmQKK2RubCAgICAgJGNmX2N2X2hlYWRlcl9wYXRoXyQzIC0gaW5jbHVkZS1kaXJlY3RvcnkgaWYgbmVlZGVkCitkbmwgICAgICRjZl9jdl9saWJyYXJ5X3BhdGhfJDMgLSBsaWJyYXJ5LWRpcmVjdG9yeSBpZiBuZWVkZWQKK2RubCAgICAgJGNmX2N2X2xpYnJhcnlfZmlsZV8kMyAtIGxpYnJhcnktZmlsZSBpZiBuZWVkZWQsIGUuZy4sIC1sJDMKK0FDX0RFRlVOKFtDRl9GSU5EX0xJTktBR0VdLFsKKworIyBJZiB0aGUgbGlua2FnZSBpcyBub3QgYWxyZWFkeSBpbiB0aGUgJENQUEZMQUdTLyRMREZMQUdTIGNvbmZpZ3VyYXRpb24sIHRoZXNlCisjIHdpbGwgYmUgc2V0IG9uIGNvbXBsZXRpb24gb2YgdGhlIEFDX1RSWV9MSU5LIGJlbG93LgorY2ZfY3ZfaGVhZGVyX3BhdGhfJDM9CitjZl9jdl9saWJyYXJ5X3BhdGhfJDM9CisKK0NGX01TR19MT0coW1N0YXJ0aW5nIFtGSU5EX0xJTktBR0VdKCQzLCQ2KV0pCisKK0FDX1RSWV9MSU5LKFskMV0sWyQyXSwKKyAgICBjZl9jdl9maW5kX2xpbmthZ2VfJDM9eWVzLFsKKyAgICBjZl9jdl9maW5kX2xpbmthZ2VfJDM9bm8KKworICAgIENGX01TR19MT0coW1NlYXJjaGluZyBmb3IgaGVhZGVycyBpbiBbRklORF9MSU5LQUdFXSgkMywkNildKQorCisgICAgY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIGNmX3Rlc3RfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworICAgIENGX0hFQURFUl9QQVRIKGNmX3NlYXJjaCxpZmVsc2UoWyQ2XSwsWyQzXSxbJDZdKSkKKyAgICBmb3IgY2ZfY3ZfaGVhZGVyX3BhdGhfJDMgaW4gJGNmX3NlYXJjaAorICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICRjZl9jdl9oZWFkZXJfcGF0aF8kMyA7IHRoZW4KKyAgICAgICAgQ0ZfVkVSQk9TRSguLi4gdGVzdGluZyAkY2ZfY3ZfaGVhZGVyX3BhdGhfJDMpCisgICAgICAgIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyAtSSRjZl9jdl9oZWFkZXJfcGF0aF8kMyIKKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyQxXSxbJDJdLFsKKyAgICAgICAgICAgIENGX1ZFUkJPU0UoLi4uIGZvdW5kICQzIGhlYWRlcnMgaW4gJGNmX2N2X2hlYWRlcl9wYXRoXyQzKQorICAgICAgICAgICAgY2ZfY3ZfZmluZF9saW5rYWdlXyQzPW1heWJlCisgICAgICAgICAgICBjZl90ZXN0X0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBicmVha10sWworICAgICAgICAgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgICAgICAgICAgXSkKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGNmX2N2X2ZpbmRfbGlua2FnZV8kMyIgPSBtYXliZSA7IHRoZW4KKworICAgICAgQ0ZfTVNHX0xPRyhbU2VhcmNoaW5nIGZvciAkMyBsaWJyYXJ5IGluIFtGSU5EX0xJTktBR0VdKCQzLCQ2KV0pCisKKyAgICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBjZl9zYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCisgICAgICBpZmVsc2UoWyQ2XSwsLFsKKyAgICAgICAgQ1BQRkxBR1M9IiRjZl90ZXN0X0NQUEZMQUdTIgorICAgICAgICBMSUJTPSItbCQzICQ3ICRjZl9zYXZlX0xJQlMiCisgICAgICAgIEFDX1RSWV9MSU5LKFskMV0sWyQyXSxbCisgICAgICAgICAgICBDRl9WRVJCT1NFKC4uLiBmb3VuZCAkMyBsaWJyYXJ5IGluIHN5c3RlbSkKKyAgICAgICAgICAgIGNmX2N2X2ZpbmRfbGlua2FnZV8kMz15ZXNdKQorICAgICAgICAgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgICAgICAgICAgTElCUz0iJGNmX3NhdmVfTElCUyIKKyAgICAgICAgICAgIF0pCisKKyAgICAgIGlmIHRlc3QgIiRjZl9jdl9maW5kX2xpbmthZ2VfJDMiICE9IHllcyA7IHRoZW4KKyAgICAgICAgQ0ZfTElCUkFSWV9QQVRIKGNmX3NlYXJjaCwkMykKKyAgICAgICAgZm9yIGNmX2N2X2xpYnJhcnlfcGF0aF8kMyBpbiAkY2Zfc2VhcmNoCisgICAgICAgIGRvCisgICAgICAgICAgaWYgdGVzdCAtZCAkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzIDsgdGhlbgorICAgICAgICAgICAgQ0ZfVkVSQk9TRSguLi4gdGVzdGluZyAkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzKQorICAgICAgICAgICAgQ1BQRkxBR1M9IiRjZl90ZXN0X0NQUEZMQUdTIgorICAgICAgICAgICAgTElCUz0iLWwkMyAkNyAkY2Zfc2F2ZV9MSUJTIgorICAgICAgICAgICAgTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyAtTCRjZl9jdl9saWJyYXJ5X3BhdGhfJDMiCisgICAgICAgICAgICBBQ19UUllfTElOSyhbJDFdLFskMl0sWworICAgICAgICAgICAgICAgIENGX1ZFUkJPU0UoLi4uIGZvdW5kICQzIGxpYnJhcnkgaW4gJGNmX2N2X2xpYnJhcnlfcGF0aF8kMykKKyAgICAgICAgICAgICAgICBjZl9jdl9maW5kX2xpbmthZ2VfJDM9eWVzCisgICAgICAgICAgICAgICAgY2ZfY3ZfbGlicmFyeV9maWxlXyQzPSItbCQzIgorICAgICAgICAgICAgICAgIGJyZWFrXSxbCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgICAgICAgICAgICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisgICAgICAgICAgICAgICAgTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyIKKyAgICAgICAgICAgICAgICBdKQorICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgTElCUz0iJGNmX3NhdmVfTElCUyIKKyAgICAgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgICAgICBMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIgorICAgICAgZmkKKworICAgIGVsc2UKKyAgICAgIGNmX2N2X2ZpbmRfbGlua2FnZV8kMz1ubworICAgIGZpCisgICAgXSwkNykKKworaWYgdGVzdCAiJGNmX2N2X2ZpbmRfbGlua2FnZV8kMyIgPSB5ZXMgOyB0aGVuCitpZmVsc2UoWyQ0XSwsWworICBDRl9BRERfSU5DRElSKCRjZl9jdl9oZWFkZXJfcGF0aF8kMykKKyAgQ0ZfQUREX0xJQkRJUigkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzKQorICBMSUJTPSItbCQzICRMSUJTIgorXSxbJDRdKQorZWxzZQoraWZlbHNlKFskNV0sLEFDX01TR19XQVJOKENhbm5vdCBmaW5kICQzIGxpYnJhcnkpLFskNV0pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX0RMU1lNIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNC8wNi8xNiAyMDo1Mjo0NQorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGZvciBkbHN5bSgpIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBsaWJkbC4KK2RubAorZG5sIFNldHMKK2RubAkkY2ZfaGF2ZV9kbHN5bQorZG5sCSRjZl9oYXZlX2xpYmRsCitBQ19ERUZVTihbQ0ZfRlVOQ19ETFNZTV0sWworY2ZfaGF2ZV9kbHN5bT1ubworQUNfQ0hFQ0tfRlVOQyhkbHN5bSxjZl9oYXZlX2Rsc3ltPXllcyxbCisKK2NmX2hhdmVfbGliZGw9bm8KK0FDX0NIRUNLX0xJQihkbCxkbHN5bSxbCisJY2ZfaGF2ZV9kbHN5bT15ZXMKKwljZl9oYXZlX2xpYmRsPXllc10pXSkKKworaWYgdGVzdCAiJGNmX2hhdmVfZGxzeW0iID0geWVzIDsgdGhlbgorCXRlc3QgIiRjZl9oYXZlX2xpYmRsIiA9IHllcyAmJiBMSUJTPSItbGRsICRMSUJTIgorCisJQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgYWJsZSB0byBsaW5rIHRvIGRsKigpIGZ1bmN0aW9ucykKKwlBQ19UUllfTElOSyhbI2luY2x1ZGUgPGRsZmNuLmg+XSxbCisJCXZvaWQgKm9iajsKKwkJaWYgKChvYmogPSBkbG9wZW4oImZpbGVuYW1lIiwgMCkpICE9IDApIHsKKwkJCWlmIChkbHN5bShvYmosICJzeW1ib2xuYW1lIikgPT0gMCkgeworCQkJZGxjbG9zZShvYmopOworCQkJfQorCQl9XSxbCisJCUFDX0RFRklORShIQVZFX0xJQkRMKV0sWworCQlBQ19NU0dfRVJST1IoQ2Fubm90IGxpbmsgdGVzdCBwcm9ncmFtIGZvciBsaWJkbCldKQorCUFDX01TR19SRVNVTFQob2spCitlbHNlCisJQUNfTVNHX0VSUk9SKENhbm5vdCBmaW5kIGRsc3ltIGZ1bmN0aW9uKQorZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRlVOQ19NRU1NT1ZFIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBtZW1tb3ZlLCBvciBhIGJjb3B5IHRoYXQgY2FuIGhhbmRsZSBvdmVybGFwcGluZyBjb3B5LiAgSWYgbmVpdGhlcgorZG5sIGlzIGZvdW5kLCBhZGQgb3VyIG93biB2ZXJzaW9uIG9mIG1lbW1vdmUgdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cy4KK0FDX0RFRlVOKFtDRl9GVU5DX01FTU1PVkVdLAorWworQUNfQ0hFQ0tfRlVOQyhtZW1tb3ZlLCxbCitBQ19DSEVDS19GVU5DKGJjb3B5LFsKKwlBQ19DQUNIRV9DSEVDSyhpZiBiY29weSBkb2VzIG92ZXJsYXBwaW5nIG1vdmVzLGNmX2N2X2dvb2RfYmNvcHksWworCQlBQ19UUllfUlVOKFsKK2ludCBtYWluKCkgeworCXN0YXRpYyBjaGFyIGRhdGFbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV3d3h5eiI7CisJY2hhciB0ZW1wWzQwXTsKKwliY29weShkYXRhLCB0ZW1wLCBzaXplb2YoZGF0YSkpOworCWJjb3B5KHRlbXArMTAsIHRlbXAsIDE1KTsKKwliY29weSh0ZW1wKzUsIHRlbXArMTUsIDEwKTsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59IChzdHJjbXAodGVtcCwgImtsbW5vcHFyc3R1d3d4eXBxcnN0dXd3eHl6IikpOworfQorCQldLAorCQlbY2ZfY3ZfZ29vZF9iY29weT15ZXNdLAorCQlbY2ZfY3ZfZ29vZF9iY29weT1ub10sCisJCVtjZl9jdl9nb29kX2Jjb3B5PXVua25vd25dKQorCQldKQorCV0sW2NmX2N2X2dvb2RfYmNvcHk9bm9dKQorCWlmIHRlc3QgIiRjZl9jdl9nb29kX2Jjb3B5IiA9IHllcyA7IHRoZW4KKwkJQUNfREVGSU5FKFVTRV9PS19CQ09QWSkKKwllbHNlCisJCUFDX0RFRklORShVU0VfTVlfTUVNTU9WRSkKKwlmaQorXSldKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZVTkNfTkFOT1NMRUVQIHZlcnNpb246IDMgdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiB3b3JrYWJsZSBuYW5vc2xlZXAoKSBmdW5jdGlvbi4gIFNvbWUgc3lzdGVtcywgZS5nLiwKK2RubCBBSVggNC54LCBwcm92aWRlIGEgbm9uLXdvcmtpbmcgdmVyc2lvbi4KK0FDX0RFRlVOKFtDRl9GVU5DX05BTk9TTEVFUF0sWworQUNfQ0FDSEVfQ0hFQ0soaWYgbmFub3NsZWVwIHJlYWxseSB3b3JrcyxjZl9jdl9mdW5jX25hbm9zbGVlcCxbCitBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCitpbnQgbWFpbigpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgdHMxLCB0czI7CisJaW50IGNvZGU7CisJdHMxLnR2X3NlYyAgPSAwOworCXRzMS50dl9uc2VjID0gNzUwMDAwMDAwOworCXRzMi50dl9zZWMgID0gMDsKKwl0czIudHZfbnNlYyA9IDA7CisJZXJybm8gPSAwOworCWNvZGUgPSBuYW5vc2xlZXAoJnRzMSwgJnRzMik7IC8qIG9uIGZhaWx1cmUgZXJybm8gaXMgRU5PU1lTLiAqLworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oY29kZSAhPSAwKTsKK30KK10sCisJW2NmX2N2X2Z1bmNfbmFub3NsZWVwPXllc10sCisJW2NmX2N2X2Z1bmNfbmFub3NsZWVwPW5vXSwKKwlbY2ZfY3ZfZnVuY19uYW5vc2xlZXA9dW5rbm93bl0pXSkKKwordGVzdCAiJGNmX2N2X2Z1bmNfbmFub3NsZWVwIiA9ICJ5ZXMiICYmIEFDX0RFRklORShIQVZFX05BTk9TTEVFUCkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRlVOQ19PUEVOUFRZIHZlcnNpb246IDIgdXBkYXRlZDogMjAwOC8wNC8xMiAxOTo0OTowMQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBvcGVucHR5KCkgZnVuY3Rpb24sIGFsb25nIHdpdGggPHB0eS5oPiBoZWFkZXIuICBJdCBtYXkgbmVlZCB0aGUKK2RubCAidXRpbCIgbGlicmFyeSBhcyB3ZWxsLgorQUNfREVGVU4oW0NGX0ZVTkNfT1BFTlBUWV0sCitbCitBQ19DSEVDS19MSUIodXRpbCxvcGVucHR5LGNmX2N2X2xpYl91dGlsPXllcyxjZl9jdl9saWJfdXRpbD1ubykKK0FDX0NBQ0hFX0NIRUNLKGZvciBvcGVucHR5IGhlYWRlcixjZl9jdl9mdW5jX29wZW5wdHksWworICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgdGVzdCAkY2ZfY3ZfbGliX3V0aWwgPSB5ZXMgJiYgTElCUz0iLWx1dGlsICRMSUJTIgorICAgIGZvciBjZl9oZWFkZXIgaW4gcHR5LmggbGlidXRpbC5oIHV0aWwuaAorICAgIGRvCisgICAgQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitdLFsKKyAgICBpbnQgeCA9IG9wZW5wdHkoKGludCAqKTAsIChpbnQgKikwLCAoY2hhciAqKTAsCisgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0ZXJtaW9zICopMCwgKHN0cnVjdCB3aW5zaXplICopMCk7CitdLFsKKyAgICAgICAgY2ZfY3ZfZnVuY19vcGVucHR5PSRjZl9oZWFkZXIKKyAgICAgICAgYnJlYWsKK10sWworICAgICAgICBjZl9jdl9mdW5jX29wZW5wdHk9bm8KK10pCisgICAgZG9uZQorICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX1BPTEwgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA2LzEyLzE2IDEyOjMzOjMwCitkbmwgLS0tLS0tLS0tLS0tCitkbmwgU2VlIGlmIHRoZSBwb2xsIGZ1bmN0aW9uIHJlYWxseSB3b3Jrcy4gIFNvbWUgcGxhdGZvcm1zIGhhdmUgcG9sbCgpLCBidXQKK2RubCBpdCBkb2VzIG5vdCB3b3JrIGZvciB0ZXJtaW5hbHMgb3IgZmlsZXMuCitBQ19ERUZVTihbQ0ZfRlVOQ19QT0xMXSxbCitBQ19DQUNIRV9DSEVDSyhpZiBwb2xsIHJlYWxseSB3b3JrcyxjZl9jdl93b3JraW5nX3BvbGwsWworQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1BPTExfSAorI2luY2x1ZGUgPHBvbGwuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbmRpZgoraW50IG1haW4oKSB7CisJc3RydWN0IHBvbGxmZCBteWZkczsKKwlpbnQgcmV0OworCisJbXlmZHMuZmQgPSAwOworCW15ZmRzLmV2ZW50cyA9IFBPTExJTjsKKworCXJldCA9IHBvbGwoJm15ZmRzLCAxLCAxMDApOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmV0ICE9IDApOworfV0sCisJW2NmX2N2X3dvcmtpbmdfcG9sbD15ZXNdLAorCVtjZl9jdl93b3JraW5nX3BvbGw9bm9dLAorCVtjZl9jdl93b3JraW5nX3BvbGw9dW5rbm93bl0pXSkKK3Rlc3QgIiRjZl9jdl93b3JraW5nX3BvbGwiID0gInllcyIgJiYgQUNfREVGSU5FKEhBVkVfV09SS0lOR19QT0xMKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX1RFUk1JT1MgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDAwLzA3LzIyIDIzOjM3OjI0CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgU29tZSBvbGQvYnJva2VuIHZhcmlhdGlvbnMgZGVmaW5lIHRjZ2V0YXR0cigpIG9ubHkgYXMgYSBtYWNybyBpbgorZG5sIHRlcm1pbyhzKS5oCitBQ19ERUZVTihbQ0ZfRlVOQ19URVJNSU9TXSxbCitBQ19SRVFVSVJFKFtDRl9TVFJVQ1RfVEVSTUlPU10pCitBQ19DQUNIRV9DSEVDSyhmb3IgdGNnZXRhdHRyLCBjZl9jdl9oYXZlX3RjZ2V0YXR0cixbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZGVmaW5lIFRUWSBzdHJ1Y3QgdGVybWlvcworI2Vsc2UKKyNpZmRlZiBIQVZFX1RFUk1JT19ICisjaW5jbHVkZSA8dGVybWlvLmg+CisjZGVmaW5lIFRUWSBzdHJ1Y3QgdGVybWlvCisjZW5kaWYKKyNlbmRpZgorXSxbCitUVFkgZm9vOwordGNnZXRhdHRyKDEsICZmb28pO10sCitbY2ZfY3ZfaGF2ZV90Y2dldGF0dHI9eWVzXSwKK1tjZl9jdl9oYXZlX3RjZ2V0YXR0cj1ub10pXSkKK3Rlc3QgIiRjZl9jdl9oYXZlX3RjZ2V0YXR0ciIgPSB5ZXMgJiYgQUNfREVGSU5FKEhBVkVfVENHRVRBVFRSKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX1ZTU0NBTkYgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAxLzEyLzE5IDAwOjUwOjEwCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIHZzc2NhbmYoKSBmdW5jdGlvbiwgd2hpY2ggaXMgaW4gYzl4IGJ1dCBnZW5lcmFsbHkgbm90IGluIGVhcmxpZXIKK2RubCB2ZXJzaW9ucyBvZiBDLiAgSXQgaXMgaW4gdGhlIEdOVSBDIGxpYnJhcnksIGFuZCBjYW4gb2Z0ZW4gYmUgc2ltdWxhdGVkIGJ5Citkbmwgb3RoZXIgZnVuY3Rpb25zLgorQUNfREVGVU4oW0NGX0ZVTkNfVlNTQ0FORl0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgdnNzY2FuZiBmdW5jdGlvbiBvciB3b3JrYXJvdW5kLGNmX2N2X2Z1bmNfdnNzY2FuZixbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD5dLFsKKwl2YV9saXN0IGFwOworCXZzc2NhbmYoImZyb20iLCAiJWQiLCBhcCldLFtjZl9jdl9mdW5jX3Zzc2NhbmY9dnNzY2FuZl0sWworQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+XSxbCisgICAgRklMRSBzdHJidWY7CisgICAgY2hhciAqc3RyID0gImZyb20iOworCisgICAgc3RyYnVmLl9mbGFnID0gX0lPUkVBRDsKKyAgICBzdHJidWYuX3B0ciA9IHN0cmJ1Zi5fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAgICBzdHJidWYuX2NudCA9IHN0cmxlbihzdHIpOworICAgIHN0cmJ1Zi5fZmlsZSA9IF9ORklMRTsKKyAgICByZXR1cm4gKHZmc2NhbmYoJnN0cmJ1ZiwgIiVkIiwgYXApKV0sW2NmX2N2X2Z1bmNfdnNzY2FuZj12ZnNjYW5mXSxbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD5dLFsKKyAgICBGSUxFIHN0cmJ1ZjsKKyAgICBjaGFyICpzdHIgPSAiZnJvbSI7CisKKyAgICBzdHJidWYuX2ZsYWcgPSBfSU9SRUFEOworICAgIHN0cmJ1Zi5fcHRyID0gc3RyYnVmLl9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKikgc3RyOworICAgIHN0cmJ1Zi5fY250ID0gc3RybGVuKHN0cik7CisgICAgc3RyYnVmLl9maWxlID0gX05GSUxFOworICAgIHJldHVybiAoX2Rvc2Nhbigmc3RyYnVmLCAiJWQiLCBhcCkpXSxbY2ZfY3ZfZnVuY192c3NjYW5mPV9kb3NjYW5dLFsKK2NmX2N2X2Z1bmNfdnNzY2FuZj1ub10pXSldKV0pCisKK2Nhc2UgJGNmX2N2X2Z1bmNfdnNzY2FuZiBpbiAjKHZpCit2c3NjYW5mKSBBQ19ERUZJTkUoSEFWRV9WU1NDQU5GKTs7ICModmkKK3Zmc2NhbmYpIEFDX0RFRklORShIQVZFX1ZGU0NBTkYpOzsgIyh2aQorX2Rvc2NhbikgQUNfREVGSU5FKEhBVkVfX0RPU0NBTik7OworZXNhYworCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dDQ19BVFRSSUJVVEVTIHZlcnNpb246IDExIHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRlc3QgZm9yIGF2YWlsYWJpbGl0eSBvZiB1c2VmdWwgZ2NjIF9fYXR0cmlidXRlX18gZGlyZWN0aXZlcyB0byBxdWlldAorZG5sIGNvbXBpbGVyIHdhcm5pbmdzLiAgVGhvdWdoIHVzZWZ1bCwgbm90IGFsbCBhcmUgc3VwcG9ydGVkIC0tIGFuZCBjb250cmFyeQorZG5sIHRvIGRvY3VtZW50YXRpb24sIHVucmVjb2duaXplZCBkaXJlY3RpdmVzIGNhdXNlIG9sZGVyIGNvbXBpbGVycyB0byBiYXJmLgorQUNfREVGVU4oW0NGX0dDQ19BVFRSSUJVVEVTXSwKK1sKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCitjYXQgPiBjb25mdGVzdC5pIDw8RU9GCisjaWZuZGVmIEdDQ19QUklOVEYKKyNkZWZpbmUgR0NDX1BSSU5URiAwCisjZW5kaWYKKyNpZm5kZWYgR0NDX1NDQU5GCisjZGVmaW5lIEdDQ19TQ0FORiAwCisjZW5kaWYKKyNpZm5kZWYgR0NDX05PUkVUVVJOCisjZGVmaW5lIEdDQ19OT1JFVFVSTiAvKiBub3RoaW5nICovCisjZW5kaWYKKyNpZm5kZWYgR0NDX1VOVVNFRAorI2RlZmluZSBHQ0NfVU5VU0VEIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorRU9GCitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorCUFDX0NIRUNLSU5HKFtmb3IgJENDIF9fYXR0cmlidXRlX18gZGlyZWN0aXZlc10pCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSBfX29saW5lX18gIiR7YXNfbWUtY29uZmlndXJlfSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaSIKKyNpZglHQ0NfUFJJTlRGCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgLypub3RoaW5nKi8KKyNlbmRpZgorI2lmCUdDQ19TQ0FORgorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgLypub3RoaW5nKi8KKyNlbmRpZgorZXh0ZXJuIHZvaWQgd293KGNoYXIgKiwuLi4pIEdDQ19TQ0FORkxJS0UoMSwyKTsKK2V4dGVybiB2b2lkIG9vcHMoY2hhciAqLC4uLikgR0NDX1BSSU5URkxJS0UoMSwyKSBHQ0NfTk9SRVRVUk47CitleHRlcm4gdm9pZCBmb28odm9pZCkgR0NDX05PUkVUVVJOOworaW50IG1haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltbXV0gR0NDX1VOVVNFRCkgeyByZXR1cm4gMDsgfQorRU9GCisJZm9yIGNmX2F0dHJpYnV0ZSBpbiBzY2FuZiBwcmludGYgdW51c2VkIG5vcmV0dXJuCisJZG8KKwkJQ0ZfVVBQRVIoY2ZfQVRUUklCVVRFLCRjZl9hdHRyaWJ1dGUpCisJCWNmX2RpcmVjdGl2ZT0iX19hdHRyaWJ1dGVfXygoJGNmX2F0dHJpYnV0ZSkpIgorCQllY2hvICJjaGVja2luZyBmb3IgJENDICRjZl9kaXJlY3RpdmUiIDE+JkFDX0ZEX0NDCisJCWNhc2UgJGNmX2F0dHJpYnV0ZSBpbgorCQlzY2FuZnxwcmludGYpCisJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAxCitFT0YKKwkJCTs7CisJCSopCisJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAkY2ZfZGlyZWN0aXZlCitFT0YKKwkJCTs7CisJCWVzYWMKKwkJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiAkY2ZfYXR0cmlidXRlKQorCQkJY2F0IGNvbmZ0ZXN0LmggPj5jb25mZGVmcy5oCisJCWZpCisJZG9uZQorZWxzZQorCWZncmVwIGRlZmluZSBjb25mdGVzdC5pID4+Y29uZmRlZnMuaAorZmkKK3JtIC1yZiBjb25mdGVzdCoKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dDQ19WRVJTSU9OIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNS8wOC8yNyAwOTo1Mzo0MgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCB2ZXJzaW9uIG9mIGdjYworQUNfREVGVU4oW0NGX0dDQ19WRVJTSU9OXSxbCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKK0dDQ19WRVJTSU9OPW5vbmUKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCUFDX01TR19DSEVDS0lORyh2ZXJzaW9uIG9mICRDQykKKwlHQ0NfVkVSU0lPTj0iYCR7Q0N9IC0tdmVyc2lvbnwgc2VkIC1lICcyLCRkJyAtZSAncy9eLiooR0NDKSAvLycgLWUgJ3MvXltbXjAtOS5dXSovLycgLWUgJ3MvW1teMC05Ll1dLiovLydgIgorCXRlc3QgLXogIiRHQ0NfVkVSU0lPTiIgJiYgR0NDX1ZFUlNJT049dW5rbm93bgorCUFDX01TR19SRVNVTFQoJEdDQ19WRVJTSU9OKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR0NDX1dBUk5JTkdTIHZlcnNpb246IDIzIHVwZGF0ZWQ6IDIwMDgvMDcvMjYgMTc6NTQ6MDIKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdXNlZnVsIHdhcm5pbmcgb3B0aW9ucy4gIFRoZXJlJ3MgYSBmZXcgdGhhdAorZG5sIHdlIGRvbid0IHVzZSwgc2ltcGx5IGJlY2F1c2UgdGhleSdyZSB0b28gbm9pc3k6CitkbmwKK2RubAktV2NvbnZlcnNpb24gKHVzZWZ1bCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBnY2MsIGJ1dCBub3QgaW4gZ2NjIDIuNy54KQorZG5sCS1XcmVkdW5kYW50LWRlY2xzIChzeXN0ZW0gaGVhZGVycyBtYWtlIHRoaXMgdG9vIG5vaXN5KQorZG5sCS1XdHJhZGl0aW9uYWwgKGNvbWJpbmVzIHRvbyBtYW55IHVucmVsYXRlZCBtZXNzYWdlcywgb25seSBhIGZldyB1c2VmdWwpCitkbmwJLVd3cml0ZS1zdHJpbmdzICh0b28gbm9pc3ksIGJ1dCBzaG91bGQgcmV2aWV3IG9jY2FzaW9uYWxseSkuICBUaGlzCitkbmwJCWlzIGVuYWJsZWQgZm9yIG5jdXJzZXMgdXNpbmcgIi0tZW5hYmxlLWNvbnN0Ii4KK2RubAktcGVkYW50aWMKK2RubAorZG5sIFBhcmFtZXRlcjoKK2RubAkkMSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIGdjYyB3YXJuaW5nIGZsYWdzIHRoYXQgYSBwYXJ0aWN1bGFyCitkbmwJCWFwcGxpY2F0aW9uIG1pZ2h0IHdhbnQgdG8gdXNlLCBlLmcuLCAibm8tdW51c2VkIiBmb3IKK2RubAkJLVduby11bnVzZWQKK2RubCBTcGVjaWFsOgorZG5sCUlmICR3aXRoX2V4dF9jb25zdCBpcyAieWVzIiwgYWRkIGEgY2hlY2sgZm9yIC1Xd3JpdGUtc3RyaW5ncworZG5sCitBQ19ERUZVTihbQ0ZfR0NDX1dBUk5JTkdTXSwKK1sKK0FDX1JFUVVJUkUoW0NGX0dDQ19WRVJTSU9OXSkKK0NGX0lOVEVMX0NPTVBJTEVSKEdDQyxJTlRFTF9DT01QSUxFUixDRkxBR1MpCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiJHthc19tZS1jb25maWd1cmV9IgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbW11dKSB7IHJldHVybiAoYXJndltbYXJnYy0xXV0gPT0gMCkgOyB9CitFT0YKKworaWYgdGVzdCAiJElOVEVMX0NPTVBJTEVSIiA9IHllcwordGhlbgorIyBUaGUgIi13ZFhYWCIgb3B0aW9ucyBzdXBwcmVzcyB3YXJuaW5nczoKKyMgcmVtYXJrICMxNDE5OiBleHRlcm5hbCBkZWNsYXJhdGlvbiBpbiBwcmltYXJ5IHNvdXJjZSBmaWxlCisjIHJlbWFyayAjMTY4MjogaW1wbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjgzOiBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODQ6IGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIHNhbWUtc2l6ZWQgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTkzOiB6ZXJvIHVzZWQgZm9yIHVuZGVmaW5lZCBwcmVwcm9jZXNzaW5nIGlkZW50aWZpZXIKKyMgcmVtYXJrICM1OTM6IHZhcmlhYmxlICJjdXJzX3NiX2xlZnRfYXJyb3ciIHdhcyBzZXQgYnV0IG5ldmVyIHVzZWQKKyMgcmVtYXJrICM4MTA6IGNvbnZlcnNpb24gZnJvbSAiaW50IiB0byAiRGltZW5zaW9uPXt1bnNpZ25lZCBzaG9ydH0iIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKyMgcmVtYXJrICM4Njk6IHBhcmFtZXRlciAidHciIHdhcyBuZXZlciByZWZlcmVuY2VkCisjIHJlbWFyayAjOTgxOiBvcGVyYW5kcyBhcmUgZXZhbHVhdGVkIGluIHVuc3BlY2lmaWVkIG9yZGVyCisjIHdhcm5pbmcgIzI2OTogaW52YWxpZCBmb3JtYXQgc3RyaW5nIGNvbnZlcnNpb24KKworCUFDX0NIRUNLSU5HKFtmb3IgJENDIHdhcm5pbmcgb3B0aW9uc10pCisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItV2FsbCIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJd2QxNDE5IFwKKwkJd2QxNjgyIFwKKwkJd2QxNjgzIFwKKwkJd2QxNjg0IFwKKwkJd2QxOTMgXAorCQl3ZDI3OSBcCisJCXdkNTkzIFwKKwkJd2Q4MTAgXAorCQl3ZDg2OSBcCisJCXdkOTgxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiAtJGNmX29wdCkKKwkJCUVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisKK2VsaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKwlBQ19DSEVDS0lORyhbZm9yICRDQyB3YXJuaW5nIG9wdGlvbnNdKQorCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUVYVFJBX0NGTEFHUz0iLVcgLVdhbGwiCisJY2Zfd2Fybl9DT05TVD0iIgorCXRlc3QgIiR3aXRoX2V4dF9jb25zdCIgPSB5ZXMgJiYgY2Zfd2Fybl9DT05TVD0iV3dyaXRlLXN0cmluZ3MiCisJZm9yIGNmX29wdCBpbiBcCisJCVdiYWQtZnVuY3Rpb24tY2FzdCBcCisJCVdjYXN0LWFsaWduIFwKKwkJV2Nhc3QtcXVhbCBcCisJCVdpbmxpbmUgXAorCQlXbWlzc2luZy1kZWNsYXJhdGlvbnMgXAorCQlXbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJV25lc3RlZC1leHRlcm5zIFwKKwkJV3BvaW50ZXItYXJpdGggXAorCQlXc2hhZG93IFwKKwkJV3N0cmljdC1wcm90b3R5cGVzIFwKKwkJV3VuZGVmICRjZl93YXJuX0NPTlNUICQxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiAtJGNmX29wdCkKKwkJCWNhc2UgJGNmX29wdCBpbiAjKHZpCisJCQlXY2FzdC1xdWFsKSAjKHZpCisJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRFhUU1RSSU5HREVGSU5FUyIKKwkJCQk7OworCQkJV2lubGluZSkgIyh2aQorCQkJCWNhc2UgJEdDQ19WRVJTSU9OIGluCisJCQkJW1szNF1dLiopCisJCQkJCUNGX1ZFUkJPU0UoZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTikKKwkJCQkJY29udGludWU7OworCQkJCWVzYWMKKwkJCQk7OworCQkJZXNhYworCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworQUNfU1VCU1QoRVhUUkFfQ0ZMQUdTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTkFUX1RSWV9MSU5LIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNC8wOC8yMSAxOTowMjowOAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgdGhhdCBhIHRlc3QgcHJvZ3JhbSBjb21waWxlcy9saW5rcyB3aXRoIEdOQVQuCitkbmwgJGNmX2FkYV9tYWtlIGlzIHNldCB0byB0aGUgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzL2xpbmtzCitkbmwgJEFEQUZMQUdTIG1heSBiZSBzZXQgdG8gdGhlIEdOQVQgZmxhZ3MuCitkbmwKK2RubCAkMSBpcyB0aGUgdGV4dCBvZiB0aGUgc3BlYworZG5sICQyIGlzIHRoZSB0ZXh0IG9mIHRoZSBib2R5CitkbmwgJDMgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBzdWNjZXNzZnVsCitkbmwgJDQgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBub3Qgc3VjY2Vzc2Z1bAorQUNfREVGVU4oW0NGX0dOQVRfVFJZX0xJTktdLAorWworcm0gLWYgY29uZnRlc3QqCitjYXQgPj5jb25mdGVzdC5hZHMgPDxDRl9FT0YKKyQxCitDRl9FT0YKK2NhdCA+PmNvbmZ0ZXN0LmFkYiA8PENGX0VPRgorJDIKK0NGX0VPRgoraWYgKCAkY2ZfYWRhX21ha2UgJEFEQUZMQUdTIGNvbmZ0ZXN0IDE+JkFDX0ZEX0NDIDI+JjEgKSA7IHRoZW4KK2lmZWxzZSgkMywsICAgICAgOixbICAgICAgJDNdKQoraWZlbHNlKCQ0LCwsW2Vsc2UKKyAgICQ0XSkKK2ZpCitybSAtZiBjb25mdGVzdCoKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR05BVF9UUllfUlVOIHZlcnNpb246IDMgdXBkYXRlZDogMjAwNC8wOC8yMSAxOTowMjowOAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSB0aGF0IGEgdGVzdCBwcm9ncmFtIGNvbXBpbGVzIGFuZCBydW5zIHdpdGggR05BVAorZG5sICRjZl9hZGFfbWFrZSBpcyBzZXQgdG8gdGhlIHByb2dyYW0gdGhhdCBjb21waWxlcy9saW5rcworZG5sICRBREFGTEFHUyBtYXkgYmUgc2V0IHRvIHRoZSBHTkFUIGZsYWdzLgorZG5sCitkbmwgJDEgaXMgdGhlIHRleHQgb2YgdGhlIHNwZWMKK2RubCAkMiBpcyB0aGUgdGV4dCBvZiB0aGUgYm9keQorZG5sICQzIGlzIHRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgaWYgc3VjY2Vzc2Z1bAorZG5sICQ0IGlzIHRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgaWYgbm90IHN1Y2Nlc3NmdWwKK0FDX0RFRlVOKFtDRl9HTkFUX1RSWV9SVU5dLAorWworcm0gLWYgY29uZnRlc3QqCitjYXQgPj5jb25mdGVzdC5hZHMgPDxDRl9FT0YKKyQxCitDRl9FT0YKK2NhdCA+PmNvbmZ0ZXN0LmFkYiA8PENGX0VPRgorJDIKK0NGX0VPRgoraWYgKCAkY2ZfYWRhX21ha2UgJEFEQUZMQUdTIGNvbmZ0ZXN0IDE+JkFDX0ZEX0NDIDI+JjEgKSA7IHRoZW4KKyAgIGlmICggLi9jb25mdGVzdCAxPiZBQ19GRF9DQyAyPiYxICkgOyB0aGVuCitpZmVsc2UoJDMsLCAgICAgIDosWyAgICAgICQzXSkKK2lmZWxzZSgkNCwsLFsgICBlbHNlCisgICAgICAkNF0pCisgICBmaQoraWZlbHNlKCQ0LCwsW2Vsc2UKKyAgICQ0XSkKK2ZpCitybSAtZiBjb25mdGVzdCoKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR05BVF9WRVJTSU9OIHZlcnNpb246IDEyIHVwZGF0ZWQ6IDIwMDYvMTAvMTQgMTU6MjM6MTUKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgdmVyc2lvbiBvZiBHTkFULgorQUNfREVGVU4oW0NGX0dOQVRfVkVSU0lPTl0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGduYXQgdmVyc2lvbikKK2NmX2duYXRfdmVyc2lvbj1gJHtjZl9hZGFfbWFrZS1nbmF0bWFrZX0gLXYgMj4mMSB8IGdyZXAgJ1tbMC05XV0uW1swLTldXVtbMC05XV0qJyB8XAorICBzZWQgLWUgJzIsJGQnIC1lICdzL1tbXjAtOSBcLl1dLy9nJyAtZSAncy9eW1sgXV0qLy8nIC1lICdzLyAuKi8vJ2AKK0FDX01TR19SRVNVTFQoJGNmX2duYXRfdmVyc2lvbikKKworY2FzZSAkY2ZfZ25hdF92ZXJzaW9uIGluCisgIDMuMVtbMS05XV0qfDMuW1syLTldXSp8W1s0LTldXS4qKQorICAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllcworICAgIDs7CisgICopIGVjaG8gVW5zdXBwb3J0ZWQgR05BVCB2ZXJzaW9uICRjZl9nbmF0X3ZlcnNpb24uIFJlcXVpcmVkIGlzIDMuMTEgb3IgYmV0dGVyLiBEaXNhYmxpbmcgQWRhOTUgYmluZGluZy4KKyAgICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm8KKyAgICAgOzsKK2VzYWMKK2Nhc2UgJGNmX2duYXRfdmVyc2lvbiBpbgorICAzLltbMS05XV0qfFtbNC05XV0uKikKKyAgICAgIGNmX2NvbXBpbGVfZ2VuZXJpY3M9Z2VuZXJpY3MKKyAgICAgIGNmX2dlbmVyaWNfb2JqZWN0cz0iXCR7R0VOT0JKU30iCisgICAgICA7OworICAqKSAgY2ZfY29tcGlsZV9nZW5lcmljcz0KKyAgICAgIGNmX2dlbmVyaWNfb2JqZWN0cz0KKyAgICAgIDs7Citlc2FjCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dOVV9TT1VSQ0UgdmVyc2lvbjogNiB1cGRhdGVkOiAyMDA1LzA3LzA5IDEzOjIzOjA3CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFIHRvIGdldCBhIHJlYXNvbmFibGUgdmFsdWUgZm9yCitkbmwgX1hPUEVOX1NPVVJDRSwgdXBvbiB3aGljaCBtYW55IFBPU0lYIGRlZmluaXRpb25zIGRlcGVuZC4gIFRoaXMgaXMgYSBkZWZlY3QKK2RubCAob3IgbWlzZmVhdHVyZSkgb2YgZ2xpYmMyLCB3aGljaCBicmVha3MgcG9ydGFiaWxpdHkgb2YgbWFueSBhcHBsaWNhdGlvbnMsCitkbmwgc2luY2UgaXQgaXMgaW50ZXJ3b3ZlbiB3aXRoIEdOVSBleHRlbnNpb25zLgorZG5sCitkbmwgV2VsbCwgeWVzIHdlIGNvdWxkIHdvcmsgYXJvdW5kIGl0Li4uCitBQ19ERUZVTihbQ0ZfR05VX1NPVVJDRV0sCitbCitBQ19DQUNIRV9DSEVDSyhpZiB3ZSBtdXN0IGRlZmluZSBfR05VX1NPVVJDRSxjZl9jdl9nbnVfc291cmNlLFsKK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X2dudV9zb3VyY2U9bm9dLAorCVtjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKKwkgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl9nbnVfc291cmNlPW5vXSwKKwlbY2ZfY3ZfZ251X3NvdXJjZT15ZXNdKQorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKwldKQorXSkKK3Rlc3QgIiRjZl9jdl9nbnVfc291cmNlIiA9IHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0dOVV9TT1VSQ0UiCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dQUF9MSUJSQVJZIHZlcnNpb246IDggdXBkYXRlZDogMjAwMy8wMi8wMiAwMTo0MTo0NgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgSWYgd2UncmUgdHJ5aW5nIHRvIHVzZSBnKyssIHRlc3QgaWYgbGliZysrIGlzIGluc3RhbGxlZCAoYSByYXRoZXIgY29tbW9uCitkbmwgcHJvYmxlbSA6LSkuICBJZiB3ZSBoYXZlIHRoZSBjb21waWxlciBidXQgbm8gbGlicmFyeSwgd2UnbGwgYmUgYWJsZSB0bworZG5sIGNvbmZpZ3VyZSwgYnV0IHdvbid0IGJlIGFibGUgdG8gYnVpbGQgdGhlIGMrKyBkZW1vIHByb2dyYW0uCitBQ19ERUZVTihbQ0ZfR1BQX0xJQlJBUlldLAorWworY2ZfY3h4X2xpYnJhcnk9dW5rbm93bgorY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorb3MyKikgIyh2aQorCWNmX2dwcF9saWJuYW1lPWdwcAorCTs7CisqKQorCWNmX2dwcF9saWJuYW1lPWcrKworCTs7Citlc2FjCitpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbZm9yIGxpYiRjZl9ncHBfbGlibmFtZV0pCisJY2Zfc2F2ZT0iJExJQlMiCisJTElCUz0iJExJQlMgLWwkY2ZfZ3BwX2xpYm5hbWUiCisJQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPCRjZl9ncHBfbGlibmFtZS9idWlsdGluLmg+CisJXSwKKwlbdHdvX2FyZ19lcnJvcl9oYW5kbGVyX3QgZm9vMiA9IGxpYl9lcnJvcl9oYW5kbGVyXSwKKwlbY2ZfY3h4X2xpYnJhcnk9eWVzCisJIENYWExJQlM9IiRDWFhMSUJTIC1sJGNmX2dwcF9saWJuYW1lIgorCSBpZiB0ZXN0ICIkY2ZfZ3BwX2xpYm5hbWUiID0gY3BwIDsgdGhlbgorCSAgICBBQ19ERUZJTkUoSEFWRV9HUFBfQlVJTFRJTl9IKQorCSBlbHNlCisJICAgIEFDX0RFRklORShIQVZFX0dYWF9CVUlMVElOX0gpCisJIGZpXSwKKwlbQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPGJ1aWx0aW4uaD4KKwldLAorCVt0d29fYXJnX2Vycm9yX2hhbmRsZXJfdCBmb28yID0gbGliX2Vycm9yX2hhbmRsZXJdLAorCVtjZl9jeHhfbGlicmFyeT15ZXMKKwkgQ1hYTElCUz0iJENYWExJQlMgLWwkY2ZfZ3BwX2xpYm5hbWUiCisJIEFDX0RFRklORShIQVZFX0JVSUxUSU5fSCldLAorCVtjZl9jeHhfbGlicmFyeT1ub10pXSkKKwlMSUJTPSIkY2Zfc2F2ZSIKKwlBQ19NU0dfUkVTVUxUKCRjZl9jeHhfbGlicmFyeSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dYWF9WRVJTSU9OIHZlcnNpb246IDUgdXBkYXRlZDogMjAwNS8wOC8yNyAwOTo1Mzo0MgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIHZlcnNpb24gb2YgZysrCitBQ19ERUZVTihbQ0ZfR1hYX1ZFUlNJT05dLFsKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ1BQXSkKK0dYWF9WRVJTSU9OPW5vbmUKK2lmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKHZlcnNpb24gb2YgZysrKQorCUdYWF9WRVJTSU9OPSJgJHtDWFgtZysrfSAtLXZlcnNpb258IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQykgLy8nIC1lICdzL15bW14wLTkuXV0qLy8nIC1lICdzL1tbXjAtOS5dXS4qLy8nYCIKKwl0ZXN0IC16ICIkR1hYX1ZFUlNJT04iICYmIEdYWF9WRVJTSU9OPXVua25vd24KKwlBQ19NU0dfUkVTVUxUKCRHWFhfVkVSU0lPTikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dYWF9XQVJOSU5HUyB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDUvMDgvMTMgMTQ6NTQ6MzgKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdXNlZnVsIHdhcm5pbmcgb3B0aW9ucy4KK2RubAorZG5sIE1vc3Qgb2YgZ2NjJ3Mgb3B0aW9ucyBhcHBseSB0byBnKyssIGV4Y2VwdDoKK2RubAktV2JhZC1mdW5jdGlvbi1jYXN0CitkbmwJLVdtaXNzaW5nLWRlY2xhcmF0aW9ucworZG5sCS1XbmVzdGVkLWV4dGVybnMKK2RubAorZG5sIE9taXQgYSBmZXcgKGZvciBub3cpOgorZG5sCS1XaW5saW5lCitkbmwKK2RubCBQYXJhbWV0ZXI6CitkbmwJJDEgaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBnKysgd2FybmluZyBmbGFncyB0aGF0IGEgcGFydGljdWxhcgorZG5sCQlhcHBsaWNhdGlvbiBtaWdodCB3YW50IHRvIHVzZSwgZS5nLiwgIm5vLXVudXNlZCIgZm9yCitkbmwJCS1Xbm8tdW51c2VkCitkbmwgU3BlY2lhbDoKK2RubAlJZiAkd2l0aF9leHRfY29uc3QgaXMgInllcyIsIGFkZCBhIGNoZWNrIGZvciAtV3dyaXRlLXN0cmluZ3MKK2RubAorQUNfREVGVU4oW0NGX0dYWF9XQVJOSU5HU10sCitbCisKK0NGX0lOVEVMX0NPTVBJTEVSKEdYWCxJTlRFTF9DUExVU1BMVVMsQ1hYRkxBR1MpCisKK0FDX1JFUVVJUkUoW0NGX0dYWF9WRVJTSU9OXSkKKworQUNfTEFOR19TQVZFCitBQ19MQU5HX0NQTFVTUExVUworCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W1tdXSkgeyByZXR1cm4gKGFyZ3ZbW2FyZ2MtMV1dID09IDApIDsgfQorRU9GCisKK2lmIHRlc3QgIiRJTlRFTF9DUExVU1BMVVMiID0geWVzCit0aGVuCisjIFRoZSAiLXdkWFhYIiBvcHRpb25zIHN1cHByZXNzIHdhcm5pbmdzOgorIyByZW1hcmsgIzE0MTk6IGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKKyMgcmVtYXJrICMxNjgyOiBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODM6IGV4cGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4NDogY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxOTM6IHplcm8gdXNlZCBmb3IgdW5kZWZpbmVkIHByZXByb2Nlc3NpbmcgaWRlbnRpZmllcgorIyByZW1hcmsgIzU5MzogdmFyaWFibGUgImN1cnNfc2JfbGVmdF9hcnJvdyIgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorIyByZW1hcmsgIzgxMDogY29udmVyc2lvbiBmcm9tICJpbnQiIHRvICJEaW1lbnNpb249e3Vuc2lnbmVkIHNob3J0fSIgbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworIyByZW1hcmsgIzg2OTogcGFyYW1ldGVyICJ0dyIgd2FzIG5ldmVyIHJlZmVyZW5jZWQKKyMgcmVtYXJrICM5ODE6IG9wZXJhbmRzIGFyZSBldmFsdWF0ZWQgaW4gdW5zcGVjaWZpZWQgb3JkZXIKKyMgd2FybmluZyAjMjY5OiBpbnZhbGlkIGZvcm1hdCBzdHJpbmcgY29udmVyc2lvbgorCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0Mgd2FybmluZyBvcHRpb25zXSkKKwljZl9zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisJRVhUUkFfQ1hYRkxBR1M9Ii1XYWxsIgorCWZvciBjZl9vcHQgaW4gXAorCQl3ZDE0MTkgXAorCQl3ZDE2ODIgXAorCQl3ZDE2ODMgXAorCQl3ZDE2ODQgXAorCQl3ZDE5MyBcCisJCXdkMjc5IFwKKwkJd2Q1OTMgXAorCQl3ZDgxMCBcCisJCXdkODY5IFwKKwkJd2Q5ODEKKwlkbworCQlDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MgJEVYVFJBX0NYWEZMQUdTIC0kY2Zfb3B0IgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIC0kY2Zfb3B0KQorCQkJRVhUUkFfQ1hYRkxBR1M9IiRFWFRSQV9DWFhGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ1hYRkxBR1M9IiRjZl9zYXZlX0NYWEZMQUdTIgorCitlbGlmIHRlc3QgIiRHWFgiID0geWVzCit0aGVuCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ1hYIHdhcm5pbmcgb3B0aW9uc10pCisJY2Zfc2F2ZV9DWFhGTEFHUz0iJENYWEZMQUdTIgorCUVYVFJBX0NYWEZMQUdTPSItVyAtV2FsbCIKKwljZl9neHhfZXh0cmFfd2FybmluZ3M9IiIKKwl0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzICYmIGNmX2d4eF9leHRyYV93YXJuaW5ncz0iV3dyaXRlLXN0cmluZ3MiCisJY2FzZSAiJEdDQ19WRVJTSU9OIiBpbgorCVtbMS0yXV0uKikKKwkJOzsKKwkqKQorCQljZl9neHhfZXh0cmFfd2FybmluZ3M9IiRjZl9neHhfZXh0cmFfd2FybmluZ3MgV2VmZmMrKyIKKwkJOzsKKwllc2FjCisJZm9yIGNmX29wdCBpbiBcCisJCVdhYmkgXAorCQlmYWJpLXZlcnNpb249MCBcCisJCVdvdmVybG9hZGVkLXZpcnR1YWwgXAorCQlXc2lnbi1wcm9tbyBcCisJCVdzeW50aCBcCisJCVdvbGQtc3R5bGUtY2FzdCBcCisJCVdjYXN0LWFsaWduIFwKKwkJV2Nhc3QtcXVhbCBcCisJCVdtaXNzaW5nLXByb3RvdHlwZXMgXAorCQlXcG9pbnRlci1hcml0aCBcCisJCVdzaGFkb3cgXAorCQlXc3RyaWN0LXByb3RvdHlwZXMgXAorCQlXdW5kZWYgJGNmX2d4eF9leHRyYV93YXJuaW5ncyAkMQorCWRvCisJCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyAkRVhUUkFfQ1hYRkxBR1MgLVdlcnJvciAtJGNmX29wdCIKKwkJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiAtJGNmX29wdCkKKwkJCUVYVFJBX0NYWEZMQUdTPSIkRVhUUkFfQ1hYRkxBR1MgLSRjZl9vcHQiCisJCWVsc2UKKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiBubyAtJGNmX29wdCkKKwkJZmkKKwlkb25lCisJQ1hYRkxBR1M9IiRjZl9zYXZlX0NYWEZMQUdTIgorZmkKKworcm0gLWYgY29uZnRlc3QqCitBQ19MQU5HX1JFU1RPUkUKK0FDX1NVQlNUKEVYVFJBX0NYWEZMQUdTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9IQVNIRURfREIgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA3LzExLzI0IDE3OjQzOjM3CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgYW4gaW5zdGFuY2Ugb2YgdGhlIEJlcmtlbGV5IGhhc2hlZCBkYXRhYmFzZS4KK2RubAorZG5sICQxID0gb3B0aW9uYWwgcGFyYW1ldGVyLCB0byBzcGVjaWZ5IGluc3RhbGwtcHJlZml4IGZvciB0aGUgZGF0YWJhc2UuCitBQ19ERUZVTihbQ0ZfSEFTSEVEX0RCXSwKK1sKK2lmZWxzZShbJDFdLCwsWworY2FzZSAkMSBpbiAjKHZpCit5ZXN8KmFibGUqKSAjKHZpCisgICAgOzsKKyopCisgICAgaWYgdGVzdCAtZCAiJDEiIDsgdGhlbgorICAgICAgICBDRl9BRERfSU5DRElSKCQxL2luY2x1ZGUpCisgICAgICAgIENGX0FERF9MSUJESVIoJDEvbGliKQorICAgIGZpCitlc2FjCitdKQorQUNfQ0hFQ0tfSEVBREVSKGRiLmgsWworQ0ZfSEFTSEVEX0RCX1ZFUlNJT04KK2lmIHRlc3QgIiRjZl9jdl9oYXNoZWRfZGJfdmVyc2lvbiIgPSB1bmtub3duIDsgdGhlbgorCUFDX01TR19FUlJPUihDYW5ub3QgZGV0ZXJtaW5lIHZlcnNpb24gb2YgZGIpCitlbHNlCisJQ0ZfSEFTSEVEX0RCX0xJQlMKKwlpZiB0ZXN0ICIkY2ZfY3ZfaGFzaGVkX2RiX2xpYnMiID0gdW5rbm93biA7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKENhbm5vdCBkZXRlcm1pbmUgbGlicmFyeSBmb3IgZGIpCisJZWxpZiB0ZXN0ICIkY2ZfY3ZfaGFzaGVkX2RiX2xpYnMiICE9IGRlZmF1bHQgOyB0aGVuCisJCUxJQlM9Ii1sJGNmX2N2X2hhc2hlZF9kYl9saWJzICRMSUJTIgorCWZpCitmaQorXSxbCisJQUNfTVNHX0VSUk9SKENhbm5vdCBmaW5kIGRiLmgpCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9IQVNIRURfREJfTElCUyB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDgvMDgvMDQgMDY6MTg6MDYKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIEdpdmVuIHRoYXQgd2UgaGF2ZSB0aGUgaGVhZGVyIGFuZCB2ZXJzaW9uIGZvciBoYXNoZWQgZGF0YWJhc2UsIGZpbmQgdGhlCitkbmwgbGlicmFyeSBpbmZvcm1hdGlvbi4KK0FDX0RFRlVOKFtDRl9IQVNIRURfREJfTElCU10sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgZGIgbGlicmFyaWVzLCBjZl9jdl9oYXNoZWRfZGJfbGlicyxbCitjZl9jdl9oYXNoZWRfZGJfbGlicz11bmtub3duCitmb3IgY2ZfZGJfbGlicyBpbiAiIiBkYiRjZl9jdl9oYXNoZWRfZGJfdmVyc2lvbiBkYi0kY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24gZGIgJycKK2RvCisJY2Zfc2F2ZV9saWJzPSIkTElCUyIKKwlpZiB0ZXN0IC1uICIkY2ZfZGJfbGlicyI7IHRoZW4KKwkJTElCUz0iLWwkY2ZfZGJfbGlicyAkTElCUyIKKwlmaQorCUNGX01TR19MT0coY2hlY2tpbmcgZm9yIGxpYnJhcnkgIiRjZl9kYl9saWJzIikKKwlBQ19UUllfTElOSyhbCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPGRiLmg+CitdLFsKKwljaGFyICpwYXRoID0gIi90bXAvZm9vIjsKKyNpZmRlZiBEQl9WRVJTSU9OX01BSk9SCisjaWYgREJfVkVSU0lPTl9NQUpPUiA+PSA0CisJREIgKnJlc3VsdCA9IDA7CisJZGJfY3JlYXRlKCZyZXN1bHQsIE5VTEwsIDApOworCXJlc3VsdC0+b3BlbihyZXN1bHQsCisJCU5VTEwsCisJCXBhdGgsCisJCXBhdGgsCisJCURCX0hBU0gsCisJCURCX0NSRUFURSwKKwkJMDY0NCk7CisjZWxpZiBEQl9WRVJTSU9OX01BSk9SID49IDMKKwlEQiAqcmVzdWx0ID0gMDsKKwlkYl9jcmVhdGUoJnJlc3VsdCwgTlVMTCwgMCk7CisJcmVzdWx0LT5vcGVuKHJlc3VsdCwKKwkJcGF0aCwKKwkJcGF0aCwKKwkJREJfSEFTSCwKKwkJREJfQ1JFQVRFLAorCQkwNjQ0KTsKKyNlbGlmIERCX1ZFUlNJT05fTUFKT1IgPj0gMgorCURCICpyZXN1bHQgPSAwOworCWRiX29wZW4ocGF0aCwKKwkJREJfSEFTSCwKKwkJREJfQ1JFQVRFLAorCQkwNjQ0LAorCQkoREJfRU5WICopIDAsCisJCShEQl9JTkZPICopIDAsCisJCSZyZXN1bHQpOworI2VuZGlmIC8qIERCX1ZFUlNJT05fTUFKT1IgKi8KKyNlbHNlCisJREIgKnJlc3VsdCA9IGRib3BlbihwYXRoLAorCQkgICAgIDIsCisJCSAgICAgMDY0NCwKKwkJICAgICBEQl9IQVNILAorCQkgICAgIDApOworI2VuZGlmCisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufShyZXN1bHQgIT0gMCkKK10sWworCWlmIHRlc3QgLW4gIiRjZl9kYl9saWJzIiA7IHRoZW4KKwkJY2ZfY3ZfaGFzaGVkX2RiX2xpYnM9JGNmX2RiX2xpYnMKKwllbHNlCisJCWNmX2N2X2hhc2hlZF9kYl9saWJzPWRlZmF1bHQKKwlmaQorCUxJQlM9IiRjZl9zYXZlX2xpYnMiCisJYnJlYWsKK10pCisJTElCUz0iJGNmX3NhdmVfbGlicyIKK2RvbmUKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0hBU0hFRF9EQl9WRVJTSU9OIHZlcnNpb246IDMgdXBkYXRlZDogMjAwNy8xMi8wMSAxNTowMTozNworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgR2l2ZW4gdGhhdCB3ZSBoYXZlIHRoZSBoZWFkZXIgZmlsZSBmb3IgaGFzaGVkIGRhdGFiYXNlLCBmaW5kIHRoZSB2ZXJzaW9uCitkbmwgaW5mb3JtYXRpb24uCitBQ19ERUZVTihbQ0ZfSEFTSEVEX0RCX1ZFUlNJT05dLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIHZlcnNpb24gb2YgZGIsIGNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uLFsKK2NmX2N2X2hhc2hlZF9kYl92ZXJzaW9uPXVua25vd24KKworZm9yIGNmX2RiX3ZlcnNpb24gaW4gMSAyIDMgNCA1CitkbworCUNGX01TR19MT0coY2hlY2tpbmcgZm9yIGRiIHZlcnNpb24gJGNmX2RiX3ZlcnNpb24pCisJQUNfVFJZX0NPTVBJTEUoWworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxkYi5oPgorCisjaWZkZWYgREJfVkVSU0lPTl9NQUpPUgorCS8qIGRiMiAoREJfVkVSU0lPTl9NQUpPUj0yKSBoYXMgYWxzbyBEQl9WRVJTSU9OX01JTk9SLCB0ZXN0ZWQgd2l0aCA3ICovCisjaWYgJGNmX2RiX3ZlcnNpb24gPT0gREJfVkVSU0lPTl9NQUpPUgorCS8qIG9rICovCisjZWxzZQorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorI2Vsc2UKKyNpZiAkY2ZfZGJfdmVyc2lvbiA9PSAxCisJLyogb2s6IGFzc3VtaW5nIHRoaXMgaXMgREIgMS44LjUgKi8KKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZW5kaWYKK10sW0RCVCAqZm9vID0gMF0sWworCWNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uPSRjZl9kYl92ZXJzaW9uCisJYnJlYWsKKwldKQorZG9uZQorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSEVBREVSX1BBVEggdmVyc2lvbjogOCB1cGRhdGVkOiAyMDAyLzExLzEwIDE0OjQ2OjU5CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgYSBzZWFyY2gtbGlzdCBmb3IgYSBub25zdGFuZGFyZCBoZWFkZXItZmlsZQorQUNfREVGVU4oW0NGX0hFQURFUl9QQVRIXSwKK1tDRl9TVUJESVJfUEFUSCgkMSwkMixpbmNsdWRlKQordGVzdCAiJGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkaW5jbHVkZWRpciAmJiAgICAkMT0iWyRdJDEgJGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkaW5jbHVkZWRpci8kMiAmJiAkMT0iWyRdJDEgJGluY2x1ZGVkaXIvJDIiCit9CisKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkb2xkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIgICAgJiYgJDE9IlskXSQxICRvbGRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIvJDIgJiYgJDE9IlskXSQxICRvbGRpbmNsdWRlZGlyLyQyIgorfQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0hFTFBfTUVTU0FHRSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDE5OTgvMDEvMTQgMTA6NTY6MjMKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBJbnNlcnQgdGV4dCBpbnRvIHRoZSBoZWxwLW1lc3NhZ2UsIGZvciByZWFkYWJpbGl0eSwgZnJvbSBBQ19BUkdfV0lUSC4KK0FDX0RFRlVOKFtDRl9IRUxQX01FU1NBR0VdLAorW0FDX0RJVkVSVF9IRUxQKFskMV0pZG5sCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0lOQ0xVREVfRElSUyB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDYvMTAvMTQgMTU6MjM6MTUKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgaW5jbHVkZS1vcHRpb25zIGFjY29yZGluZyB0byB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nCitkbmwgaW4gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb3IgdXNpbmcgJy0tc3JjZGlyPURJUicgb3B0aW9uLiAgSWYgd2UncmUgYnVpbGRpbmcKK2RubCB3aXRoIGdjYywgZG9uJ3QgYXBwZW5kIHRoZSBpbmNsdWRlZGlyIGlmIGl0IGhhcHBlbnMgdG8gYmUgL3Vzci9pbmNsdWRlLAorZG5sIHNpbmNlIHRoYXQgdXN1YWxseSBicmVha3MgZ2NjJ3Mgc2hhZG93LWluY2x1ZGVzLgorQUNfREVGVU4oW0NGX0lOQ0xVREVfRElSU10sCitbCitDUFBGTEFHUz0iLUkuIC1JLi4vaW5jbHVkZSAkQ1BQRkxBR1MiCitpZiB0ZXN0ICIkc3JjZGlyIiAhPSAiLiI7IHRoZW4KKwlDUFBGTEFHUz0iLUlcJHtzcmNkaXJ9Ly4uL2luY2x1ZGUgJENQUEZMQUdTIgorZmkKK2lmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKK2VsaWYgdGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiOyB0aGVuCisJaWYgdGVzdCAiJGluY2x1ZGVkaXIiID0gJyR7cHJlZml4fS9pbmNsdWRlJyA7IHRoZW4KKwkJaWYgdGVzdCAkcHJlZml4ICE9IC91c3IgOyB0aGVuCisJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCisJCWZpCisJZWxzZQorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCisJZmkKK2ZpCitBQ19TVUJTVChDUFBGTEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSU5URUxfQ09NUElMRVIgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA1LzA4LzA2IDE4OjM3OjI5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgZ2l2ZW4gY29tcGlsZXIgaXMgcmVhbGx5IHRoZSBJbnRlbCBjb21waWxlciBmb3IgTGludXguICBJdAorZG5sIHRyaWVzIHRvIGltaXRhdGUgZ2NjLCBidXQgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yIHdoZW4gaXQgZmluZHMgYSBtaXNtYXRjaAorZG5sIGJldHdlZW4gcHJvdG90eXBlcywgZS5nLiwgYXMgZXhlcmNpc2VkIGJ5IENGX01JU1NJTkdfQ0hFQ0suCitkbmwKK2RubCBUaGlzIG1hY3JvIHNob3VsZCBiZSBydW4gInNvb24iIGFmdGVyIEFDX1BST0dfQ0Mgb3IgQUNfUFJPR19DUExVU1BMVVMsIHRvCitkbmwgZW5zdXJlIHRoYXQgaXQgaXMgbm90IG1pc3Rha2VuIGZvciBnY2MvZysrLiAgSXQgaXMgbm9ybWFsbHkgaW52b2tlZCBmcm9tCitkbmwgdGhlIHdyYXBwZXJzIGZvciBnY2MgYW5kIGcrKyB3YXJuaW5ncy4KK2RubAorZG5sICQxID0gR0NDIChkZWZhdWx0KSBvciBHWFgKK2RubCAkMiA9IElOVEVMX0NPTVBJTEVSIChkZWZhdWx0KSBvciBJTlRFTF9DUExVU1BMVVMKK2RubCAkMyA9IENGTEFHUyAoZGVmYXVsdCkgb3IgQ1hYRkxBR1MKK0FDX0RFRlVOKFtDRl9JTlRFTF9DT01QSUxFUl0sWworaWZlbHNlKCQyLCxJTlRFTF9DT01QSUxFUixbJDJdKT1ubworCitpZiB0ZXN0ICIkaWZlbHNlKCQxLCxbJDFdLEdDQykiID0geWVzIDsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4KKwlsaW51eCp8Z251KikKKwkJQUNfTVNHX0NIRUNLSU5HKGlmIHRoaXMgaXMgcmVhbGx5IEludGVsIGlmZWxzZSgkMSxHWFgsQysrLEMpIGNvbXBpbGVyKQorCQljZl9zYXZlX0NGTEFHUz0iJGlmZWxzZSgkMywsQ0ZMQUdTLFskM10pIgorCQlpZmVsc2UoJDMsLENGTEFHUyxbJDNdKT0iJGlmZWxzZSgkMywsQ0ZMQUdTLFskM10pIC1uby1nY2MiCisJCUFDX1RSWV9DT01QSUxFKFtdLFsKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCitdLFtpZmVsc2UoJDIsLElOVEVMX0NPTVBJTEVSLFskMl0pPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtd2UxNDcgLW5vLWdjYyIKK10sW10pCisJCWlmZWxzZSgkMywsQ0ZMQUdTLFskM10pPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCUFDX01TR19SRVNVTFQoJGlmZWxzZSgkMiwsSU5URUxfQ09NUElMRVIsWyQyXSkpCisJCTs7CisJZXNhYworZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSVNBU0NJSSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDAvMDgvMTIgMjM6MTg6NTIKK2RubCAtLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UgaGF2ZSBlaXRoZXIgYSBmdW5jdGlvbiBvciBtYWNybyBmb3IgJ2lzYXNjaWkoKScuCitBQ19ERUZVTihbQ0ZfSVNBU0NJSV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlzYXNjaWkpCitBQ19DQUNIRV9WQUwoY2ZfY3ZfaGF2ZV9pc2FzY2lpLFsKKwlBQ19UUllfTElOSyhbI2luY2x1ZGUgPGN0eXBlLmg+XSxbaW50IHggPSBpc2FzY2lpKCcgJyldLAorCVtjZl9jdl9oYXZlX2lzYXNjaWk9eWVzXSwKKwlbY2ZfY3ZfaGF2ZV9pc2FzY2lpPW5vXSkKK10pZG5sCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9oYXZlX2lzYXNjaWkpCit0ZXN0ICIkY2ZfY3ZfaGF2ZV9pc2FzY2lpIiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9JU0FTQ0lJKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MQVJHRUZJTEUgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDA3LzA2LzAyIDExOjU4OjUwCitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQWRkIGNoZWNrcyBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LgorQUNfREVGVU4oW0NGX0xBUkdFRklMRV0sWworaWZkZWYoW0FDX0ZVTkNfRlNFRUtPXSxbCisgICAgQUNfU1lTX0xBUkdFRklMRQorICAgIGlmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubyA7IHRoZW4KKwlBQ19GVU5DX0ZTRUVLTworCisJIyBOb3JtYWxseSB3ZSB3b3VsZCBjb2xsZWN0IHRoZXNlIGRlZmluaXRpb25zIGluIHRoZSBjb25maWcuaCwKKwkjIGJ1dCAobGlrZSBfWE9QRU5fU09VUkNFKSwgc29tZSBlbnZpcm9ubWVudHMgcmVseSBvbiBoYXZpbmcgdGhlc2UKKwkjIGRlZmluZWQgYmVmb3JlIGFueSBvZiB0aGUgc3lzdGVtIGhlYWRlcnMgYXJlIGluY2x1ZGVkLiAgQW5vdGhlcgorCSMgY2FzZSBjb21lcyB1cCB3aXRoIEMrKywgZS5nLiwgb24gQUlYIHRoZSBjb21waWxlciBjb21waWxlcyB0aGUKKwkjIGhlYWRlciBmaWxlcyBieSB0aGVtc2VsdmVzIGJlZm9yZSBsb29raW5nIGF0IHRoZSBib2R5IGZpbGVzIGl0IGlzCisJIyB0b2xkIHRvIGNvbXBpbGUuICBGb3IgbmN1cnNlcywgdGhvc2UgaGVhZGVyIGZpbGVzIGRvIG5vdCBpbmNsdWRlCisJIyB0aGUgY29uZmlnLmgKKwl0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiAgICAgICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfTEFSR0VfRklMRVMgIgorCXRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9MQVJHRUZJTEVfU09VUkNFICIKKwl0ZXN0ICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfRklMRV9PRkZTRVRfQklUUz0kYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgIgorCisJQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB0byB1c2Ugc3RydWN0IGRpcmVudDY0LCBjZl9jdl9zdHJ1Y3RfZGlyZW50NjQsWworCQlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisJCV0sWworCQkvKiBpZiB0cmFuc2l0aW9uYWwgbGFyZ2VmaWxlIHN1cHBvcnQgaXMgc2V0dXAsIHRoaXMgaXMgdHJ1ZSAqLworCQlleHRlcm4gc3RydWN0IGRpcmVudDY0ICogcmVhZGRpcihESVIgKik7CisJCXN0cnVjdCBkaXJlbnQ2NCAqeCA9IHJlYWRkaXIoKERJUiAqKTApOworCQlzdHJ1Y3QgZGlyZW50ICp5ID0gcmVhZGRpcigoRElSICopMCk7CisJCWludCB6ID0geCAtIHk7CisJCV0sCisJCVtjZl9jdl9zdHJ1Y3RfZGlyZW50NjQ9eWVzXSwKKwkJW2NmX2N2X3N0cnVjdF9kaXJlbnQ2ND1ub10pCisJXSkKKwl0ZXN0ICIkY2ZfY3Zfc3RydWN0X2RpcmVudDY0IiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfRElSRU5UNjQpCisgICAgZmkKK10pCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xERkxBR1NfU1RBVElDIHZlcnNpb246IDQgdXBkYXRlZDogMjAwOC8xMC8xOCAxNzo1ODoyMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGVyL2xpbmtlciBmbGFncyB1c2VkIHRvIHRlbXBvcmFyaWx5IGZvcmNlIHVzYWdlIG9mIHN0YXRpYworZG5sIGxpYnJhcmllcy4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXIgYW5kIHBsYXRmb3JtLiAgVXNlIHRoaXMgdG8gaGVscAorZG5sIGVuc3VyZSB0aGF0IHRoZSBsaW5rZXIgcGlja3MgdXAgYSBnaXZlbiBsaWJyYXJ5IGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBpbgorZG5sIHRoZSBsaXN0IG9mIGxpbmtlciBvcHRpb25zIGFuZCBsaWJyYXJpZXMuCitBQ19ERUZVTihbQ0ZfTERGTEFHU19TVEFUSUNdLFsKKworaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIygKKwlPUy8yKnxvczIqfGFpeFtbNDVdXSopIAkjKCB2aQorCQlMREZMQUdTX1NUQVRJQz0KKwkJTERGTEFHU19TSEFSRUQ9CisJCTs7CisgICAgKikgCSMoIG5vcm1hbGx5LCBleGNlcHQgd2hlbiBicm9rZW4KKyAgICAgICAgTERGTEFHU19TVEFUSUM9LXN0YXRpYworICAgICAgICBMREZMQUdTX1NIQVJFRD0tZHluYW1pYworICAgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKAorCWFpeFtbNDVdXSopIAkjKCBmcm9tIGxkIG1hbnBhZ2UKKwkJTERGTEFHU19TVEFUSUM9LWJzdGF0aWMKKwkJTERGTEFHU19TSEFSRUQ9LWJkeW5hbWljCisJCTs7CisJaHB1eCopCQkjKCBmcm9tIGxkIG1hbnBhZ2UgZm9yIGhwdXgxMC4yMCwgaHB1eDExLjExCisJCSMgV2UgY291bGQgYWxzbyB1c2UganVzdCAiYXJjaGl2ZSIgYW5kICJzaGFyZWQiLgorCQlMREZMQUdTX1NUQVRJQz0tV2wsLWEsYXJjaGl2ZV9zaGFyZWQKKwkJTERGTEFHU19TSEFSRUQ9LVdsLC1hLHNoYXJlZF9hcmNoaXZlCisJCTs7CisJaXJpeCopCQkjKCBmcm9tIGxkIG1hbnBhZ2UgSVJJWDY0CisJCUxERkxBR1NfU1RBVElDPS1Cc3RhdGljCisJCUxERkxBR1NfU0hBUkVEPS1CZHluYW1pYworCQk7OworCW9zZltbNDVdXSopCSMoIGZyb20gbGQgbWFucGFnZSBvc2Y0LjBkLCBvc2Y1LjEKKwkJIyBhbHRlcm5hdGl2ZSAiLW9sZHN0eWxlX2xpYmxvb2t1cCIgKG5vdCBpbiBjYyBtYW5wYWdlKQorCQlMREZMQUdTX1NUQVRJQz0tbm9zbyAKKwkJTERGTEFHU19TSEFSRUQ9LXNvX2FyY2hpdmUKKwkJOzsKKwlzb2xhcmlzMiopCisJCUxERkxBR1NfU1RBVElDPS1Cc3RhdGljCisJCUxERkxBR1NfU0hBUkVEPS1CZHluYW1pYworCQk7OworCWVzYWMKK2ZpCisKK0FDX1NVQlNUKExERkxBR1NfU1RBVElDKQorQUNfU1VCU1QoTERGTEFHU19TSEFSRUQpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJQlJBUllfUEFUSCB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMDIvMTEvMTAgMTQ6NDY6NTkKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgYSBzZWFyY2gtbGlzdCBmb3IgYSBub25zdGFuZGFyZCBsaWJyYXJ5LWZpbGUKK0FDX0RFRlVOKFtDRl9MSUJSQVJZX1BBVEhdLAorW0NGX1NVQkRJUl9QQVRIKCQxLCQyLGxpYildKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJQl9QUkVGSVggdmVyc2lvbjogOCB1cGRhdGVkOiAyMDA4LzA5LzEzIDExOjM0OjE2CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgdGhlIGxpYnJhcnktcHJlZml4IGZvciB0aGUgZ2l2ZW4gaG9zdCBzeXN0ZW0KK2RubCAkMSA9IHZhcmlhYmxlIHRvIHNldAorQUNfREVGVU4oW0NGX0xJQl9QUkVGSVhdLAorWworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwlPUy8yKnxvczIqKSAjKHZpCisgICAgICAgIExJQl9QUkVGSVg9JycKKyAgICAgICAgOzsKKwkqKQlMSUJfUFJFRklYPSdsaWInCisgICAgICAgIDs7CisJZXNhYworaWZlbHNlKCQxLCwsWyQxPSRMSUJfUFJFRklYXSkKKwlBQ19TVUJTVChMSUJfUFJFRklYKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSUJfUlVMRVMgdmVyc2lvbjogNTMgdXBkYXRlZDogMjAwOC8wOS8yMCAxOTo1MTo1OQorZG5sIC0tLS0tLS0tLS0tLQorZG5sIEFwcGVuZCBkZWZpbml0aW9ucyBhbmQgcnVsZXMgZm9yIHRoZSBnaXZlbiBtb2RlbHMgdG8gdGhlIHN1YmRpcmVjdG9yeQorZG5sIE1ha2VmaWxlcywgYW5kIHRoZSByZWN1cnNpb24gcnVsZSBmb3IgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS4gIElmIHRoZQorZG5sIHN1YmRpcmVjdG9yeSBpcyBhIGxpYnJhcnktc291cmNlIGRpcmVjdG9yeSwgbW9kaWZ5IHRoZSBMSUJTX1RPX01BS0UgbGlzdCBpbgorZG5sIHRoZSBjb3JyZXNwb25kaW5nIG1ha2VmaWxlIHRvIGxpc3QgdGhlIG1vZGVscyB0aGF0IHdlJ2xsIGdlbmVyYXRlLgorZG5sCitkbmwgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIG1ha2UgYSBsaXN0IG9mIHN5bWJvbGljIGxpbmtzIHRvIGNvbnN0cnVjdCB3aGVuCitkbmwgZ2VuZXJhdGluZyBlYWNoIGxpYnJhcnkuICBUaGUgY29udmVudGlvbiB1c2VkIGZvciBMaW51eCBpcyB0aGUgc2ltcGxlc3QKK2RubCBvbmU6CitkbmwJbGliPG5hbWU+LnNvCS0+CitkbmwJbGliPG5hbWU+LnNvLjxtYWpvcj4JLT4KK2RubAlsaWI8bmFtZT4uc28uPG1haj4uPG1pbm9yPgorQUNfREVGVU4oW0NGX0xJQl9SVUxFU10sCitbCitDRl9MSUJfUFJFRklYKGNmX3ByZWZpeCkKK0FDX1JFUVVJUkUoW0NGX1NVQlNUX05DVVJTRVNfVkVSU0lPTl0pCisKK2lmIHRlc3QgJGNmX2N2X3NobGliX3ZlcnNpb24gPSBjeWdkbGwgOyB0aGVuCisJVElORk9fTkFNRT0kVElORk9fQVJHX1NVRkZJWAorCVRJTkZPX1NVRkZJWD0uZGxsCitmaQorCitmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyIDsgdGhlbgorCQljb250aW51ZQorCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvbW9kdWxlczsgdGhlbgorCisJCVNIQVJFRF9MSUI9CisJCUxJQlNfVE9fTUFLRT0KKwkJZm9yIGNmX2l0ZW0gaW4gJGNmX0xJU1RfTU9ERUxTCisJCWRvCisJCQlDRl9MSUJfU1VGRklYKCRjZl9pdGVtLGNmX3N1ZmZpeCxjZl9kZXBzdWYpCisJCQlpZiB0ZXN0ICRjZl9pdGVtID0gc2hhcmVkIDsgdGhlbgorCQkJaWYgdGVzdCAiJGNmX2N2X2RvX3N5bWxpbmtzIiA9IHllcyA7IHRoZW4KKwkJCQljYXNlICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgaW4gIyh2aQorCQkJCXJlbCkgIyh2aQorCQkJCQljYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluICModmkKKwkJCQkJZGFyd2luKikKKwkJCQkJY2FzZSAuJHtMSUJfU1VGRklYfSBpbgorCQkJCQkudyopCisJCQkJCQljZl9zdWZmaXg9YGVjaG8gJGNmX3N1ZmZpeCB8IHNlZCAncy9edy8vJ2AKKwkJCQkJCWNmX3N1ZmZpeD13Jy4ke1JFTF9WRVJTSU9OfSciJGNmX3N1ZmZpeCIKKwkJCQkJCTs7CisJCQkJCSopCisJCQkJCQljZl9zdWZmaXg9Jy4ke1JFTF9WRVJTSU9OfSciJGNmX3N1ZmZpeCIKKwkJCQkJCTs7CisJCQkJCWVzYWMKKwkJCQkJOzsgIyh2aQorCQkJCQkqKSBjZl9zdWZmaXg9IiRjZl9zdWZmaXgiJy4ke1JFTF9WRVJTSU9OfScgOzsKKwkJCQkJZXNhYworCQkJCQk7OworCQkJCWFiaSkKKwkJCQkJY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbiAjKHZpCisJCQkJCWRhcndpbiopCisJCQkJCWNhc2UgLiR7TElCX1NVRkZJWH0gaW4KKwkJCQkJLncqKQorCQkJCQkJY2Zfc3VmZml4PWBlY2hvICRjZl9zdWZmaXggfCBzZWQgJ3MvXncvLydgCisJCQkJCQljZl9zdWZmaXg9dycuJHtBQklfVkVSU0lPTn0nIiRjZl9zdWZmaXgiCisJCQkJCQk7OworCQkJCQkqKQorCQkJCQkJY2Zfc3VmZml4PScuJHtBQklfVkVSU0lPTn0nIiRjZl9zdWZmaXgiCisJCQkJCQk7OworCQkJCQllc2FjCisJCQkJCTs7ICModmkKKwkJCQkJKikgY2Zfc3VmZml4PSIkY2Zfc3VmZml4IicuJHtBQklfVkVSU0lPTn0nIDs7CisJCQkJCWVzYWMKKwkJCQkJOzsKKwkJCQllc2FjCisJCQlmaQorCQkJIyBjeWd3aW4gbmVlZHMgaW1wb3J0IGxpYnJhcnksIGFuZCBoYXMgdW5pcXVlIG5hbWluZyBjb252ZW50aW9uCisJCQkjIHVzZSBhdXRvZGV0ZWN0ZWQgJHtjZl9wcmVmaXh9IGZvciBpbXBvcnQgbGliIGFuZCBzdGF0aWMgbGliLCBidXQKKwkJCSMgdXNlICdjeWcnIHByZWZpeCBmb3Igc2hhcmVkIGxpYi4KKwkJCWlmIHRlc3QgJGNmX2N2X3NobGliX3ZlcnNpb24gPSBjeWdkbGwgOyB0aGVuCisJCQkJY2ZfY3lnc3VmPWBlY2hvICIkY2Zfc3VmZml4IiB8IHNlZCAtZSAncy9cLmRsbC9cJHtBQklfVkVSU0lPTn0uZGxsLydgCisJCQkJTElCU19UT19NQUtFPSIkTElCU19UT19NQUtFIC4uL2xpYi9jeWcke2NmX2Rpcn0ke2NmX2N5Z3N1Zn0iCisJCQkJY29udGludWUKKwkJCWZpCisJCQlmaQorCQkJTElCU19UT19NQUtFPSIkTElCU19UT19NQUtFIC4uL2xpYi8ke2NmX3ByZWZpeH0ke2NmX2Rpcn0ke2NmX3N1ZmZpeH0iCisJCWRvbmUKKworCQlpZiB0ZXN0ICRjZl9kaXIgPSBuY3Vyc2VzIDsgdGhlbgorCQkJY2Zfc3Vic2V0cz0iJExJQl9TVUJTRVRTIgorCQkJY2Zfcl9wYXJ0cz0iJGNmX3N1YnNldHMiCisJCQljZl9saWJsaXN0PSIkTElCU19UT19NQUtFIgorCisJCQl3aGlsZSB0ZXN0IC1uICIkY2Zfcl9wYXJ0cyIKKwkJCWRvCisJCQkJY2ZfbF9wYXJ0cz1gZWNobyAiJGNmX3JfcGFydHMiIHxzZWQgLWUgJ3MvIC4qJC8vJ2AKKwkJCQljZl9yX3BhcnRzPWBlY2hvICIkY2Zfcl9wYXJ0cyIgfHNlZCAtZSAncy9eW1teIF1dKiAvLydgCisJCQkJaWYgdGVzdCAiJGNmX2xfcGFydHMiICE9ICIkY2Zfcl9wYXJ0cyIgOyB0aGVuCisJCQkJCWNmX2l0ZW09CisJCQkJCWNhc2UgJGNmX2xfcGFydHMgaW4gIyh2aQorCQkJCQkqdGVybWxpYiopICModmkKKwkJCQkJCWNmX2l0ZW09YGVjaG8gJGNmX2xpYmxpc3QgfHNlZCAtZSBzJSR7TElCX05BTUV9JHtMSUJfU1VGRklYfSUke1RJTkZPX0xJQl9TVUZGSVh9JWdgCisJCQkJCQk7OworCQkJCQkqdGljbGliKikKKwkJCQkJCWNmX2l0ZW09YGVjaG8gJGNmX2xpYmxpc3QgfHNlZCAtZSBzJSR7TElCX05BTUV9JHtMSUJfU1VGRklYfSUke1RJQ1NfTElCX1NVRkZJWH0lZ2AKKwkJCQkJCTs7CisJCQkJCSopCisJCQkJCQlicmVhaworCQkJCQkJOzsKKwkJCQkJZXNhYworCQkJCQlpZiB0ZXN0IC1uICIkY2ZfaXRlbSI7IHRoZW4KKwkJCQkJCUxJQlNfVE9fTUFLRT0iJGNmX2l0ZW0gJExJQlNfVE9fTUFLRSIKKwkJCQkJZmkKKwkJCQllbHNlCisJCQkJCWJyZWFrCisJCQkJZmkKKwkJCWRvbmUKKwkJZWxzZQorCQkJY2Zfc3Vic2V0cz1gZWNobyAiJExJQl9TVUJTRVRTIiB8IHNlZCAtZSAncy9edGVybWxpYi4qIC8vJ2AKKwkJZmkKKworCQlzZWQgLWUgInMlQExJQlNfVE9fTUFLRUAlJExJQlNfVE9fTUFLRSUiIFwKKwkJICAgIC1lICJzJUBTSEFSRURfTElCQCUkU0hBUkVEX0xJQiUiIFwKKwkJCSRjZl9kaXIvTWFrZWZpbGUgPiRjZl9kaXIvTWFrZWZpbGUub3V0CisJCW12ICRjZl9kaXIvTWFrZWZpbGUub3V0ICRjZl9kaXIvTWFrZWZpbGUKKworCQkkQVdLIC1mICRzcmNkaXIvbWstMHRoLmF3ayBcCisJCQlsaWJuYW1lPSIke2NmX2Rpcn0ke0xJQl9TVUZGSVh9IiBzdWJzZXRzPSIkTElCX1NVQlNFVFMiIFwKKwkJCSRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzID4+JGNmX2Rpci9NYWtlZmlsZQorCisJCWZvciBjZl9zdWJzZXQgaW4gJGNmX3N1YnNldHMKKwkJZG8KKwkJCWNmX3N1YmRpcnM9CisJCQlmb3IgY2ZfaXRlbSBpbiAkY2ZfTElTVF9NT0RFTFMKKwkJCWRvCisJCQllY2hvICJBcHBlbmRpbmcgcnVsZXMgZm9yICR7Y2ZfaXRlbX0gbW9kZWwgKCR7Y2ZfZGlyfTogJHtjZl9zdWJzZXR9KSIKKwkJCUNGX1VQUEVSKGNmX0lURU0sJGNmX2l0ZW0pCisJCQlDRl9MSUJfU1VGRklYKCRjZl9pdGVtLGNmX3N1ZmZpeCxjZl9kZXBzdWYpCisJCQlDRl9PQkpfU1VCRElSKCRjZl9pdGVtLGNmX3N1YmRpcikKKworCQkJIyBUZXN0IGZvciBjYXNlIHdoZXJlIHdlIGJ1aWxkIGxpYnRpbmZvIHdpdGggYSBkaWZmZXJlbnQgbmFtZS4KKwkJCWNmX2xpYm5hbWU9JGNmX2RpcgorCQkJaWYgdGVzdCAkY2ZfZGlyID0gbmN1cnNlcyA7IHRoZW4KKwkJCQljYXNlICRjZl9zdWJzZXQgaW4KKwkJCQkqYmFzZSopCisJCQkJCWNmX2xpYm5hbWU9JHtjZl9saWJuYW1lfSRMSUJfU1VGRklYCisJCQkJCTs7CisJCQkJKnRlcm1saWIqKQorCQkJCQljZl9saWJuYW1lPSRUSU5GT19MSUJfU1VGRklYCisJCQkJCTs7CisJCQkJdGljbGliKikKKwkJCQkJY2ZfbGlibmFtZT0kVElDU19MSUJfU1VGRklYCisJCQkJCTs7CisJCQkJZXNhYworCQkJZWxzZQorCQkJCWNmX2xpYm5hbWU9JHtjZl9saWJuYW1lfSRMSUJfU1VGRklYCisJCQlmaQorCQkJaWYgdGVzdCAtbiAiJHtERlRfQVJHX1NVRkZJWH0iIDsgdGhlbgorCQkJCSMgdW5kbyAkTElCX1NVRkZJWCBhZGQtb24gaW4gQ0ZfTElCX1NVRkZJWAorCQkJCWNmX3N1ZmZpeD1gZWNobyAkY2Zfc3VmZml4IHxzZWQgLWUgInMlXiR7TElCX1NVRkZJWH0lJSJgCisJCQlmaQorCisJCQkjIFRoZXNlIGRlcGVuZGVuY2llcyByZWFsbHkgYXJlIGZvciBkZXZlbG9wbWVudCwgbm90CisJCQkjIGJ1aWxkcywgYnV0IHRoZXkgYXJlIHVzZWZ1bCBpbiBwb3J0aW5nLCB0b28uCisJCQljZl9kZXBlbmQ9Ii4uL2luY2x1ZGUvbmN1cnNlc19jZmcuaCIKKwkJCWlmIHRlc3QgIiRzcmNkaXIiID0gIi4iOyB0aGVuCisJCQkJY2ZfcmVsZGlyPSIuIgorCQkJZWxzZQorCQkJCWNmX3JlbGRpcj0iXCR7c3JjZGlyfSIKKwkJCWZpCisKKwkJCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyLyRjZl9kaXIucHJpdi5oOyB0aGVuCisJCQkJY2ZfZGVwZW5kPSIkY2ZfZGVwZW5kICRjZl9yZWxkaXIvJGNmX2Rpci5wcml2LmgiCisJCQllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL2N1cnNlcy5wcml2Lmg7IHRoZW4KKwkJCQljZl9kZXBlbmQ9IiRjZl9kZXBlbmQgJGNmX3JlbGRpci9jdXJzZXMucHJpdi5oIgorCQkJZmkKKworIAkJCWNmX2Rpcl9zdWZmaXg9CisgCQkJb2xkX2NmX3N1ZmZpeD0iJGNmX3N1ZmZpeCIKKyAJCQlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCIgPSB5ZXMgOyB0aGVuCisJCQlpZiB0ZXN0IC1uICIkTElCX1NVRkZJWCIgOyB0aGVuCisJCQkJY2FzZSAkTElCX1NVRkZJWCBpbgorCQkJCXcqKQorCQkJCQljZl9saWJuYW1lPWBlY2hvICRjZl9saWJuYW1lIHwgc2VkICdzL3ckLy8nYAorCQkJCQljZl9zdWZmaXg9YGVjaG8gJGNmX3N1ZmZpeCB8IHNlZCAncy9edy8vJ2AKKwkJCQkJY2ZfZGlyX3N1ZmZpeD13CisJCQkJCTs7CisJCQkJZXNhYworCQkJZmkKKyAJCQlmaQorCisJCQkkQVdLIC1mICRzcmNkaXIvbWstMXN0LmF3ayBcCisJCQkJbmFtZT0ke2NmX2xpYm5hbWV9JHtjZl9kaXJfc3VmZml4fSBcCisJCQkJdHJhY2VzPSRMSUJfVFJBQ0lORyBcCisJCQkJTU9ERUw9JGNmX0lURU0gXAorCQkJCW1vZGVsPSRjZl9zdWJkaXIgXAorCQkJCXByZWZpeD0kY2ZfcHJlZml4IFwKKwkJCQlzdWZmaXg9JGNmX3N1ZmZpeCBcCisJCQkJc3Vic2V0PSRjZl9zdWJzZXQgXAorCQkJCVRlcm1saWJSb290PSRUSU5GT19OQU1FIFwKKwkJCQlUZXJtbGliU3VmZml4PSRUSU5GT19TVUZGSVggXAorCQkJCVNobGliVmVyPSRjZl9jdl9zaGxpYl92ZXJzaW9uIFwKKwkJCQlTaGxpYlZlckluZml4PSRjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4IFwKKwkJCQlSZUxpbms9JHtjZl9jdl9kb19yZWxpbmstbm99IFwKKwkJCQlEb0xpbmtzPSRjZl9jdl9kb19zeW1saW5rcyBcCisJCQkJcm1Tb0xvY3M9JGNmX2N2X3JtX3NvX2xvY3MgXAorCQkJCWxkY29uZmlnPSIkTERDT05GSUciIFwKKwkJCQlvdmVyd3JpdGU9JFdJVEhfT1ZFUldSSVRFIFwKKwkJCQlkZXBlbmQ9IiRjZl9kZXBlbmQiIFwKKwkJCQlob3N0PSIkaG9zdCIgXAorCQkJCSRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzID4+JGNmX2Rpci9NYWtlZmlsZQorCisJCQljZl9zdWZmaXg9IiRvbGRfY2Zfc3VmZml4IgorCisJCQlmb3IgY2Zfc3ViZGlyMiBpbiAkY2Zfc3ViZGlycyBsaWIKKwkJCWRvCisJCQkJdGVzdCAkY2Zfc3ViZGlyID0gJGNmX3N1YmRpcjIgJiYgYnJlYWsKKwkJCWRvbmUKKwkJCXRlc3QgIiR7Y2Zfc3Vic2V0fS4ke2NmX3N1YmRpcjJ9IiAhPSAiJHtjZl9zdWJzZXR9LiR7Y2Zfc3ViZGlyfSIgJiYgXAorCQkJJEFXSyAtZiAkc3JjZGlyL21rLTJuZC5hd2sgXAorCQkJCW5hbWU9JGNmX2RpciBcCisJCQkJdHJhY2VzPSRMSUJfVFJBQ0lORyBcCisJCQkJTU9ERUw9JGNmX0lURU0gXAorCQkJCW1vZGVsPSRjZl9zdWJkaXIgXAorCQkJCXN1YnNldD0kY2Zfc3Vic2V0IFwKKwkJCQlzcmNkaXI9JHNyY2RpciBcCisJCQkJZWNobz0kV0lUSF9FQ0hPIFwKKwkJCQljcmVuYW1lcz0kY2ZfY3ZfcHJvZ19DQ19jX28gXAorCQkJCWN4eHJlbmFtZXM9JGNmX2N2X3Byb2dfQ1hYX2NfbyBcCisJCQkJJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXMgPj4kY2ZfZGlyL01ha2VmaWxlCisJCQljZl9zdWJkaXJzPSIkY2Zfc3ViZGlycyAkY2Zfc3ViZGlyIgorCQkJZG9uZQorCQlkb25lCisJZmkKKworCWVjaG8gJwljZCAnJGNmX2RpcicgJiYgJHtNQUtFfSAke0NGX01GTEFHU30gWyRdQCcgPj5NYWtlZmlsZQorZG9uZQorCitmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyIDsgdGhlbgorCQljb250aW51ZQorCWZpCisKKwlpZiB0ZXN0IC1mICRjZl9kaXIvTWFrZWZpbGUgOyB0aGVuCisJCWNhc2UgIiRjZl9kaXIiIGluCisJCUFkYTk1KSAjKHZpCisJCQllY2hvICdsaWJzIFwnID4+IE1ha2VmaWxlCisJCQllY2hvICdpbnN0YWxsLmxpYnMgXCcgPj4gTWFrZWZpbGUKKwkJCWVjaG8gJ3VuaW5zdGFsbC5saWJzIDo6JyA+PiBNYWtlZmlsZQorCQkJZWNobyAnCWNkICckY2ZfZGlyJyAmJiAke01BS0V9ICR7Q0ZfTUZMQUdTfSBbJF1AJyA+PiBNYWtlZmlsZQorCQkJOzsKKwkJZXNhYworCWZpCisKKwlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzOyB0aGVuCisJCWVjaG8gPj4gTWFrZWZpbGUKKwkJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvaGVhZGVyczsgdGhlbgorY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCitpbnN0YWxsLmluY2x1ZGVzIFxcCit1bmluc3RhbGwuaW5jbHVkZXMgXFwKK0NGX0VPRgorCQlmaQoraWYgdGVzdCAiJGNmX2RpciIgIT0gImMrKyIgOyB0aGVuCitlY2hvICdsaW50IFwnID4+IE1ha2VmaWxlCitmaQorY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCitsaWJzIFxcCitsaW50bGliIFxcCitpbnN0YWxsLmxpYnMgXFwKK3VuaW5zdGFsbC5saWJzIFxcCitpbnN0YWxsLiRjZl9kaXIgXFwKK3VuaW5zdGFsbC4kY2ZfZGlyIDo6CisJY2QgJGNmX2RpciAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFxbJF1ACitDRl9FT0YKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL2hlYWRlcnM7IHRoZW4KK2NhdCA+PiBNYWtlZmlsZSA8PENGX0VPRgorCitsaWJzIFxcCitpbnN0YWxsLmxpYnMgXFwKK3VuaW5zdGFsbC5saWJzIFxcCitpbnN0YWxsLmluY2x1ZGVzIFxcCit1bmluc3RhbGwuaW5jbHVkZXMgOjoKKwljZCAkY2ZfZGlyICYmIFwke01BS0V9IFwke0NGX01GTEFHU30gXFskXUAKK0NGX0VPRgorZmkKK2RvbmUKKworY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCisKK2luc3RhbGwubGlicyB1bmluc3RhbGwubGlicyBcXAoraW5zdGFsbC5kYXRhIHVuaW5zdGFsbC5kYXRhIDo6CiskTUFLRV9URVJNSU5GTwljZCBtaXNjICYmIFwke01BS0V9IFwke0NGX01GTEFHU30gXFskXUAKKworaW5zdGFsbC5tYW4gXFwKK3VuaW5zdGFsbC5tYW4gOjoKKwljZCBtYW4gJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcWyRdQAorCitkaXN0Y2xlYW4gOjoKKwlybSAtZiBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIE1ha2VmaWxlIGluY2x1ZGUvbmN1cnNlc19jZmcuaAorCXJtIC1mIGhlYWRlcnMuc2ggaGVhZGVycy5zZWQgbWtfc2hhcmVkX2xpYi5zaAorCXJtIC1yZiBcJHtESVJTX1RPX01BS0V9CitDRl9FT0YKKworIyBTcGVjaWFsIGNhc2U6IHRhY2sncyBtYW5wYWdlIGxpdmVzIGluIGl0cyBvd24gZGlyZWN0b3J5LgoraWYgdGVzdCAtZCB0YWNrIDsgdGhlbgoraWYgdGVzdCAtZiAkc3JjZGlyLyR0YWNrLmg7IHRoZW4KK2NhdCA+PiBNYWtlZmlsZSA8PENGX0VPRgorCitpbnN0YWxsLm1hbiBcXAordW5pbnN0YWxsLm1hbiA6OgorCWNkIHRhY2sgJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcWyRdQAorQ0ZfRU9GCitmaQorZmkKKworZG5sIElmIHdlJ3JlIGluc3RhbGxpbmcgaW50byBhIHN1YmRpcmVjdG9yeSBvZiAvdXNyL2luY2x1ZGUsIGV0Yy4sIHdlIHNob3VsZAorZG5sIHByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSdzIG5hbWUgdG8gdGhlICIjaW5jbHVkZSIgcGF0aHMuICBJdCB3b24ndCBodXJ0CitkbmwgYW55dGhpbmcsIGFuZCB3aWxsIG1ha2UgaXQgbW9yZSBzdGFuZGFyZGl6ZWQuICBJdCdzIGF3a3dhcmQgdG8gZGVjaWRlIHRoaXMKK2RubCBhdCBjb25maWd1cmF0aW9uIGJlY2F1c2Ugb2YgcXVvdGluZywgc28gd2UnbGwgc2ltcGx5IG1ha2UgYWxsIGhlYWRlcnMKK2RubCBpbnN0YWxsZWQgdmlhIGEgc2NyaXB0IHRoYXQgY2FuIGRvIHRoZSByaWdodCB0aGluZy4KKworcm0gLWYgaGVhZGVycy5zZWQgaGVhZGVycy5zaAorCitkbmwgKCBnZW5lcmF0aW5nIHRoaXMgc2NyaXB0IG1ha2VzIHRoZSBtYWtlZmlsZXMgYSBsaXR0bGUgdGlkaWVyIDotKQorZWNobyBjcmVhdGluZyBoZWFkZXJzLnNoCitjYXQgPmhlYWRlcnMuc2ggPDxDRl9FT0YKKyMhIC9iaW4vc2gKKyMgVGhpcyBzaGVsbCBzY3JpcHQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSAnY29uZmlndXJlJyBzY3JpcHQuICBJdCBpcyBpbnZva2VkIGluIGEKKyMgc3ViZGlyZWN0b3J5IG9mIHRoZSBidWlsZCB0cmVlLiAgSXQgZ2VuZXJhdGVzIGEgc2VkLXNjcmlwdCBpbiB0aGUgcGFyZW50CisjIGRpcmVjdG9yeSB0aGF0IGlzIHVzZWQgdG8gYWRqdXN0IGluY2x1ZGVzIGZvciBoZWFkZXIgZmlsZXMgdGhhdCByZXNpZGUgaW4gYQorIyBzdWJkaXJlY3Rvcnkgb2YgL3Vzci9pbmNsdWRlLCBldGMuCitQUkc9IiIKK3doaWxlIHRlc3QgXFskXSMgIT0gMworZG8KK1BSRz0iXCRQUkcgXFskXTEiOyBzaGlmdAorZG9uZQorRFNUPVxbJF0xCitSRUY9XFskXTIKK1NSQz1cWyRdMworVE1QU1JDPVwke1RNUERJUi0vdG1wfS9cYGJhc2VuYW1lIFwkU1JDXGBcJFwkCitUTVBTRUQ9XCR7VE1QRElSLS90bXB9L2hlYWRlcnMuc2VkXCRcJAorZWNobyBpbnN0YWxsaW5nIFwkU1JDIGluIFwkRFNUCitDRl9FT0YKKworaWYgdGVzdCAkV0lUSF9DVVJTRVNfSCA9IHllczsgdGhlbgorCWNhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKK2Nhc2UgXCREU1QgaW4KKy8qL2luY2x1ZGUvKikKKwlFTkQ9XGBiYXNlbmFtZSBcJERTVFxgCisJZm9yIGkgaW4gXGBjYXQgXCRSRUYvLi4vKi9oZWFkZXJzIHxmZ3JlcCAtdiAiIyJcYAorCWRvCisJCU5BTUU9XGBiYXNlbmFtZSBcJGlcYAorCQllY2hvICJzLzxcJE5BTUU+LzxcJEVORFwvXCROQU1FPi8iID4+IFwkVE1QU0VECisJZG9uZQorCTs7CisqKQorCWVjaG8gIiIgPj4gXCRUTVBTRUQKKwk7OworZXNhYworQ0ZfRU9GCisKK2Vsc2UKKwljYXQgPj5oZWFkZXJzLnNoIDw8Q0ZfRU9GCitjYXNlIFwkRFNUIGluCisvKi9pbmNsdWRlLyopCisJRU5EPVxgYmFzZW5hbWUgXCREU1RcYAorCWZvciBpIGluIFxgY2F0IFwkUkVGLy4uLyovaGVhZGVycyB8ZmdyZXAgLXYgIiMiXGAKKwlkbworCQlOQU1FPVxgYmFzZW5hbWUgXCRpXGAKKwkJaWYgdGVzdCAiXCROQU1FIiA9ICJjdXJzZXMuaCIKKwkJdGhlbgorCQkJZWNobyAicy88Y3Vyc2VzLmg+LzxuY3Vyc2VzLmg+LyIgPj4gXCRUTVBTRUQKKwkJCU5BTUU9bmN1cnNlcy5oCisJCWZpCisJCWVjaG8gInMvPFwkTkFNRT4vPFwkRU5EXC9cJE5BTUU+LyIgPj4gXCRUTVBTRUQKKwlkb25lCisJOzsKKyopCisJZWNobyAicy88Y3Vyc2VzLmg+LzxuY3Vyc2VzLmg+LyIgPj4gXCRUTVBTRUQKKwk7OworZXNhYworQ0ZfRU9GCitmaQorY2F0ID4+aGVhZGVycy5zaCA8PENGX0VPRgorcm0gLWYgXCRUTVBTUkMKK3NlZCAtZiBcJFRNUFNFRCBcJFNSQyA+IFwkVE1QU1JDCitOQU1FPVxgYmFzZW5hbWUgXCRTUkNcYAorQ0ZfRU9GCitpZiB0ZXN0ICRXSVRIX0NVUlNFU19IICE9IHllczsgdGhlbgorCWNhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKK3Rlc3QgIlwkTkFNRSIgPSAiY3Vyc2VzLmgiICYmIE5BTUU9bmN1cnNlcy5oCitDRl9FT0YKK2ZpCitjYXQgPj5oZWFkZXJzLnNoIDw8Q0ZfRU9GCisjIEp1c3QgaW4gY2FzZSBzb21lb25lIGd6aXAnZCBtYW5wYWdlcywgcmVtb3ZlIHRoZSBjb25mbGljdGluZyBjb3B5LgordGVzdCAtZiBcJERTVC9cJE5BTUUuZ3ogJiYgcm0gLWYgXCREU1QvXCROQU1FLmd6CisKK2V2YWwgXCRQUkcgXCRUTVBTUkMgXCREU1QvXCROQU1FCitybSAtZiBcJFRNUFNSQyBcJFRNUFNFRAorQ0ZfRU9GCisKK2NobW9kIDA3NTUgaGVhZGVycy5zaAorCitmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyIDsgdGhlbgorCQljb250aW51ZQorCWZpCisKKwlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzOyB0aGVuCisJCSRBV0sgLWYgJHNyY2Rpci9tay1oZHIuYXdrIFwKKwkJCXN1YnNldD0iJExJQl9TVUJTRVRTIiBcCisJCQljb21wYXQ9IiRXSVRIX0NVUlNFU19IIiBcCisJCQkkc3JjZGlyLyRjZl9kaXIvaGVhZGVycyA+PiRjZl9kaXIvTWFrZWZpbGUKKwlmaQorCisJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvbW9kdWxlczsgdGhlbgorCQlpZiB0ZXN0ICIkY2ZfZGlyIiAhPSAiYysrIiA7IHRoZW4KKwkJCWNhdCA+PiRjZl9kaXIvTWFrZWZpbGUgPDwiQ0ZfRU9GIgorZGVwZW5kIDogJHtBVVRPX1NSQ30KKwltYWtlZGVwZW5kIC0tICR7Q1BQRkxBR1N9IC0tICR7Q19TUkN9CisKKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KK0NGX0VPRgorCQlmaQorCWZpCitkb25lCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElCX1NPTkFNRSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTU6NTU6NDYKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgRmluZCB0aGUgYW5kIHNvbmFtZSBmb3IgdGhlIGdpdmVuIHNoYXJlZCBsaWJyYXJ5LiAgU2V0IHRoZSBjYWNoZSB2YXJpYWJsZQorZG5sIGNmX2N2XyQzX3NvbmFtZSB0byB0aGlzLCB1bmxlc3MgaXQgaXMgbm90IGZvdW5kLiAgVGhlbiBzZXQgdGhlIGNhY2hlCitkbmwgdmFyaWFibGUgdG8gInVua25vd24iLgorZG5sCitkbmwgJDEgPSBoZWFkZXJzCitkbmwgJDIgPSBjb2RlCitkbmwgJDMgPSBsaWJyYXJ5IG5hbWUKK0FDX0RFRlVOKFtDRl9MSUJfU09OQU1FXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciBzb25hbWUgb2YgJDMgbGlicmFyeSxjZl9jdl8kM19zb25hbWUsWworCitjZl9jdl8kM19zb25hbWU9dW5rbm93bgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzIDsgdGhlbgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCiskMQoraW50IG1haW4oKQoreworJDIKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorQ0ZfRU9GCitjZl9zYXZlX0xJQlM9IiRMSUJTIgorCUxJQlM9Ii1sJDMgJExJQlMiCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgOyB0aGVuCisJCWlmIEFDX1RSWV9FVkFMKGFjX2xpbmspIDsgdGhlbgorCQkJY2ZfY3ZfJDNfc29uYW1lPWBsZGQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLF4uKi8sLCcgLWUgJ3MsIC4qJCwsJyB8IGZncmVwIGxpYiQzLmAKKwkJCXRlc3QgLXogIiRjZl9jdl8kM19zb25hbWUiICYmIGNmX2N2XyQzX3NvbmFtZT11bmtub3duCisJCWZpCisJZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGNmX3NhdmVfTElCUyIKK2ZpCitdKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSUJfU1VGRklYIHZlcnNpb246IDE1IHVwZGF0ZWQ6IDIwMDgvMDkvMTMgMTE6NTQ6NDgKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ29tcHV0ZSB0aGUgbGlicmFyeSBmaWxlLXN1ZmZpeCBmcm9tIHRoZSBnaXZlbiBtb2RlbCBuYW1lCitkbmwgJDEgPSBtb2RlbCBuYW1lCitkbmwgJDIgPSB2YXJpYWJsZSB0byBzZXQgKHRoZSBub21pbmFsIGxpYnJhcnkgc3VmZml4KQorZG5sICQzID0gZGVwZW5kZW5jeSB2YXJpYWJsZSB0byBzZXQgKGFjdHVhbCBmaWxlbmFtZSkKK2RubCBUaGUgdmFyaWFibGUgJExJQl9TVUZGSVgsIGlmIHNldCwgcHJlcGVuZHMgdGhlIHZhcmlhYmxlIHRvIHNldC4KK0FDX0RFRlVOKFtDRl9MSUJfU1VGRklYXSwKK1sKKwlBQ19SRVFVSVJFKFtDRl9TVUJTVF9OQ1VSU0VTX1ZFUlNJT05dKQorCWNhc2UgJDEgaW4KKwlsaWJ0b29sKQorCQkkMj0nLmxhJworCQkkMz1bJF0kMgorCQk7OworCW5vcm1hbCkKKwkJJDI9Jy5hJworCQkkMz1bJF0kMgorCQk7OworCWRlYnVnKQorCQkkMj0nX2cuYScKKwkJJDM9WyRdJDIKKwkJOzsKKwlwcm9maWxlKQorCQkkMj0nX3AuYScKKwkJJDM9WyRdJDIKKwkJOzsKKwlzaGFyZWQpCisJCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJCWN5Z3dpbiopCisJCQkkMj0nLmRsbCcKKwkJCSQzPScuZGxsLmEnCisJCQk7OworCQlkYXJ3aW4qKQorCQkJJDI9Jy5keWxpYicKKwkJCSQzPVskXSQyCisJCQk7OworCQlocHV4KikKKwkJCWNhc2UgJHRhcmdldCBpbgorCQkJaWE2NCopCisJCQkJJDI9Jy5zbycKKwkJCQkkMz1bJF0kMgorCQkJCTs7CisJCQkqKQorCQkJCSQyPScuc2wnCisJCQkJJDM9WyRdJDIKKwkJCQk7OworCQkJZXNhYworCQkJOzsKKwkJKikJJDI9Jy5zbycKKwkJCSQzPVskXSQyCisJCQk7OworCQllc2FjCisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiAkMj0iJHtMSUJfU1VGRklYfVskXXskMn0iCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmICQzPSIke0xJQl9TVUZGSVh9WyRdeyQzfSIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElCX1RZUEUgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDAwLzEwLzIwIDIyOjU3OjQ5CitkbmwgLS0tLS0tLS0tLS0KK2RubCBDb21wdXRlIHRoZSBzdHJpbmcgdG8gYXBwZW5kIHRvIC1saWJyYXJ5IGZyb20gdGhlIGdpdmVuIG1vZGVsIG5hbWUKK2RubCAkMSA9IG1vZGVsIG5hbWUKK2RubCAkMiA9IHZhcmlhYmxlIHRvIHNldAorZG5sIFRoZSB2YXJpYWJsZSAkTElCX1NVRkZJWCwgaWYgc2V0LCBwcmVwZW5kcyB0aGUgdmFyaWFibGUgdG8gc2V0LgorQUNfREVGVU4oW0NGX0xJQl9UWVBFXSwKK1sKKwljYXNlICQxIGluCisJbGlidG9vbCkgJDI9JycgICA7OworCW5vcm1hbCkgICQyPScnICAgOzsKKwlkZWJ1ZykgICAkMj0nX2cnIDs7CisJcHJvZmlsZSkgJDI9J19wJyA7OworCXNoYXJlZCkgICQyPScnICAgOzsKKwllc2FjCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmICQyPSIke0xJQl9TVUZGSVh9WyRdeyQyfSIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElOS19EQVRBT05MWSB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTI6MzM6MzAKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgU29tZSBzeXN0ZW1zIGhhdmUgYSBub24tQU5TSSBsaW5rZXIgdGhhdCBkb2Vzbid0IHB1bGwgaW4gbW9kdWxlcyB0aGF0IGhhdmUKK2RubCBvbmx5IGRhdGEgKGkuZS4sIG5vIGZ1bmN0aW9ucyksIGZvciBleGFtcGxlIE5lWFQuICBPbiB0aG9zZSBzeXN0ZW1zIHdlJ2xsCitkbmwgaGF2ZSB0byBwcm92aWRlIHdyYXBwZXJzIGZvciBnbG9iYWwgdGFibGVzIHRvIGVuc3VyZSB0aGV5J3JlIGxpbmtlZAorZG5sIHByb3Blcmx5LgorQUNfREVGVU4oW0NGX0xJTktfREFUQU9OTFldLAorWworQUNfTVNHX0NIRUNLSU5HKFtpZiBkYXRhLW9ubHkgbGlicmFyeSBtb2R1bGUgbGlua3NdKQorQUNfQ0FDSEVfVkFMKGNmX2N2X2xpbmtfZGF0YW9ubHksWworCXJtIC1mIGNvbmZ0ZXN0LmEKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgoraW50CXRlc3RkYXRhW1szXV0gPSB7IDEyMywgNDU2LCA3ODkgfTsKK0VPRgorCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDsgdGhlbgorCQltdiBjb25mdGVzdC5vIGRhdGEubyAmJiBcCisJCSggJEFSICRBUl9PUFRTIGNvbmZ0ZXN0LmEgZGF0YS5vICkgMj4mQUNfRkRfQ0MgMT4vZGV2L251bGwKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgZGF0YS5vCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKK2ludAl0ZXN0ZnVuYygpCit7CisjaWYgZGVmaW5lZChOZVhUKQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMSk7CS8qIEknbSB0b2xkIHRoaXMgbGlua2VyIGlzIGJyb2tlbiAqLworI2Vsc2UKKwlleHRlcm4gaW50IHRlc3RkYXRhW1szXV07CisJcmV0dXJuIHRlc3RkYXRhW1swXV0gPT0gMTIzCisJICAgJiYgIHRlc3RkYXRhW1sxXV0gPT0gNDU2CisJICAgJiYgIHRlc3RkYXRhW1syXV0gPT0gNzg5OworI2VuZGlmCit9CitFT0YKKwlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQltdiBjb25mdGVzdC5vIGZ1bmMubyAmJiBcCisJCSggJEFSICRBUl9PUFRTIGNvbmZ0ZXN0LmEgZnVuYy5vICkgMj4mQUNfRkRfQ0MgMT4vZGV2L251bGwKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgZnVuYy5vCisJKCBldmFsICRSQU5MSUIgY29uZnRlc3QuYSApIDI+JkFDX0ZEX0NDID4vZGV2L251bGwKKwljZl9zYXZlTElCUz0iJExJQlMiCisJTElCUz0iY29uZnRlc3QuYSAkTElCUyIKKwlBQ19UUllfUlVOKFsKKwlpbnQgbWFpbigpCisJeworCQlleHRlcm4gaW50IHRlc3RmdW5jKCk7CisJCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0gKCF0ZXN0ZnVuYygpKTsKKwl9CisJXSwKKwlbY2ZfY3ZfbGlua19kYXRhb25seT15ZXNdLAorCVtjZl9jdl9saW5rX2RhdGFvbmx5PW5vXSwKKwlbY2ZfY3ZfbGlua19kYXRhb25seT11bmtub3duXSkKKwlMSUJTPSIkY2Zfc2F2ZUxJQlMiCisJXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X2xpbmtfZGF0YW9ubHkpCisKK2lmIHRlc3QgIiRjZl9jdl9saW5rX2RhdGFvbmx5IiA9IG5vIDsgdGhlbgorCUFDX0RFRklORShCUk9LRU5fTElOS0VSKQorCUJST0tFTl9MSU5LRVI9MQorZmkKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSU5LX0ZVTkNTIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBNb3N0IFVuaXggc3lzdGVtcyBoYXZlIGJvdGggbGluayBhbmQgc3ltbGluaywgYSBmZXcgZG9uJ3QgaGF2ZSBzeW1saW5rLgorZG5sIEEgZmV3IG5vbi1Vbml4IHN5c3RlbXMgaW1wbGVtZW50IHN5bWxpbmssIGJ1dCBub3QgbGluay4KK2RubCBBIGZldyBub24tc3lzdGVtcyBpbXBsZW1lbnQgbmVpdGhlciAob3IgaGF2ZSBub25mdW5jdGlvbmFsIHZlcnNpb25zKS4KK0FDX0RFRlVOKFtDRl9MSU5LX0ZVTkNTXSwKK1sKK0FDX0NIRUNLX0ZVTkNTKCBcCisJcmVtb3ZlIFwKKwl1bmxpbmsgKQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKwlBQ19DSEVDS19GVU5DUyggXAorCQlsaW5rIFwKKwkJc3ltbGluayApCitlbHNlCisJQUNfQ0FDSEVfQ0hFQ0soaWYgbGluay9zeW1saW5rIGZ1bmN0aW9ucyB3b3JrLGNmX2N2X2xpbmtfZnVuY3MsWworCQljZl9jdl9saW5rX2Z1bmNzPQorCQlmb3IgY2ZfZnVuYyBpbiBsaW5rIHN5bWxpbmsgOyBkbworCQkJQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKK2ludCBtYWluKCkKK3sKKwlpbnQgZmFpbCA9IDA7CisJY2hhciAqc3JjID0gImNvbmZpZy5sb2ciOworCWNoYXIgKmRzdCA9ICJjb25mdGVzdC5jaGsiOworCXN0cnVjdCBzdGF0IHNyY19zYjsKKwlzdHJ1Y3Qgc3RhdCBkc3Rfc2I7CisKKwlzdGF0KHNyYywgJnNyY19zYik7CisJZmFpbCA9ICgkY2ZfZnVuYygiY29uZmlnLmxvZyIsICJjb25mdGVzdC5jaGsiKSA8IDApCisJICAgIHx8IChzdGF0KGRzdCwgJmRzdF9zYikgPCAwKQorCSAgICB8fCAoZHN0X3NiLnN0X210aW1lICE9IHNyY19zYi5zdF9tdGltZSk7CisjaWZkZWYgSEFWRV9VTkxJTksKKwl1bmxpbmsoZHN0KTsKKyNlbHNlCisJcmVtb3ZlKGRzdCk7CisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59IChmYWlsKTsKK30KKwkJCV0sWworCQkJY2ZfY3ZfbGlua19mdW5jcz0iJGNmX2N2X2xpbmtfZnVuY3MgJGNmX2Z1bmMiCisJCQlldmFsICdhY19jdl9mdW5jXyckY2ZfZnVuYyc9eWVzJ10sWworCQkJZXZhbCAnYWNfY3ZfZnVuY18nJGNmX2Z1bmMnPW5vJ10sWworCQkJZXZhbCAnYWNfY3ZfZnVuY18nJGNmX2Z1bmMnPWVycm9yJ10pCisJCWRvbmUKKwkJdGVzdCAteiAiJGNmX2N2X2xpbmtfZnVuY3MiICYmIGNmX2N2X2xpbmtfZnVuY3M9bm8KKwldKQorCXRlc3QgIiRhY19jdl9mdW5jX2xpbmsiICAgID0geWVzICYmIEFDX0RFRklORShIQVZFX0xJTkspCisJdGVzdCAiJGFjX2N2X2Z1bmNfc3ltbGluayIgPSB5ZXMgJiYgQUNfREVGSU5FKEhBVkVfU1lNTElOSykKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BSU5fUkVUVVJOIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8xMi8xMCAwOTo1MTo1NAorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgYSByZXR1cm4gZnJvbSBtYWluIHRvIHRoZSBzaGVsbCBhY3R1YWxseSByZXR1cm5zIHRoZSBzYW1lIGV4aXQKK2RubCBjb2RlLiAgVGhpcyBpcyB0cnVlIGZvciBhbG1vc3QgYW55IFBPU0lYIGVudmlyb25tZW50LgorZG5sCitkbmwgU29tZSB2ZXJ5IG9sZCBlbnZpcm9ubWVudHMgZGlkIG5vdCBmbHVzaCBzdGRvdXQsIGV0Yy4sIG9uIGFuIGV4aXQuICBUaGF0Citkbmwgd291bGQgYmUgYSB1c2VmdWwgY2FzZSB0byB0ZXN0IGZvciBhbHNvLgorQUNfREVGVU4oW0NGX01BSU5fUkVUVVJOXSwKK1sKK2NmX2N2X21haW5fcmV0dXJuPXJldHVybgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NQUtFRkxBR1MgdmVyc2lvbjogMTIgdXBkYXRlZDogMjAwNi8xMC8yMSAwODoyNzowMworZG5sIC0tLS0tLS0tLS0tLQorZG5sIFNvbWUgJ21ha2UnIHByb2dyYW1zIHN1cHBvcnQgJHtNQUtFRkxBR1N9LCBzb21lICR7TUZMQUdTfSwgdG8gcGFzcyAnbWFrZScKK2RubCBvcHRpb25zIHRvIGxvd2VyLWxldmVscy4gIEl0J3MgdmVyeSB1c2VmdWwgZm9yICJtYWtlIC1uIiAtLSBpZiB3ZSBoYXZlIGl0LgorZG5sIChHTlUgJ21ha2UnIGRvZXMgYm90aCwgc29tZXRoaW5nIFBPU0lYICdtYWtlJywgd2hpY2ggaGFwcGVucyB0byBtYWtlIHRoZQorZG5sICR7TUFLRUZMQUdTfSB2YXJpYWJsZSBpbmNvbXBhdGlibGUgYmVjYXVzZSBpdCBhZGRzIHRoZSBhc3NpZ25tZW50cyA6LSkKK0FDX0RFRlVOKFtDRl9NQUtFRkxBR1NdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIG1ha2VmbGFncyB2YXJpYWJsZSwgY2ZfY3ZfbWFrZWZsYWdzLFsKKwljZl9jdl9tYWtlZmxhZ3M9JycKKwlmb3IgY2Zfb3B0aW9uIGluICctJHtNQUtFRkxBR1N9JyAnJHtNRkxBR1N9JworCWRvCisJCWNhdCA+Y2ZfbWFrZWZsYWdzLnRtcCA8PENGX0VPRgorU0hFTEwgPSAvYmluL3NoCithbGwgOgorCUAgZWNobyAnLiRjZl9vcHRpb24nCitDRl9FT0YKKwkJY2ZfcmVzdWx0PWAke01BS0UtbWFrZX0gLWsgLWYgY2ZfbWFrZWZsYWdzLnRtcCAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncyxbWyAJXV0qJCwsJ2AKKwkJY2FzZSAiJGNmX3Jlc3VsdCIgaW4KKwkJLiprKQorCQkJY2ZfcmVzdWx0PWAke01BS0UtbWFrZX0gLWsgLWYgY2ZfbWFrZWZsYWdzLnRtcCBDQz1jYyAyPi9kZXYvbnVsbGAKKwkJCWNhc2UgIiRjZl9yZXN1bHQiIGluCisJCQkuKkNDPSopCWNmX2N2X21ha2VmbGFncz0KKwkJCQk7OworCQkJKikJY2ZfY3ZfbWFrZWZsYWdzPSRjZl9vcHRpb24KKwkJCQk7OworCQkJZXNhYworCQkJYnJlYWsKKwkJCTs7CisJCS4tKQk7OworCQkqKQllY2hvICJnaXZlbiBvcHRpb24gXCIkY2Zfb3B0aW9uXCIsIG5vIG1hdGNoIFwiJGNmX3Jlc3VsdFwiIgorCQkJOzsKKwkJZXNhYworCWRvbmUKKwlybSAtZiBjZl9tYWtlZmxhZ3MudG1wCitdKQorCitBQ19TVUJTVChjZl9jdl9tYWtlZmxhZ3MpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BS0VfVEFHUyB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDAvMTAvMDQgMDk6MTg6NDAKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBHZW5lcmF0ZSB0YWdzL1RBR1MgdGFyZ2V0cyBmb3IgbWFrZWZpbGVzLiAgRG8gbm90IGdlbmVyYXRlIFRBR1MgaWYgd2UgaGF2ZQorZG5sIGEgbW9ub2Nhc2UgZmlsZXN5c3RlbS4KK0FDX0RFRlVOKFtDRl9NQUtFX1RBR1NdLFsKK0FDX1JFUVVJUkUoW0NGX01JWEVEQ0FTRV9GSUxFTkFNRVNdKQorQUNfQ0hFQ0tfUFJPRyhNQUtFX0xPV0VSX1RBR1MsIGN0YWdzLCB5ZXMsIG5vKQorCitpZiB0ZXN0ICIkY2ZfY3ZfbWl4ZWRjYXNlIiA9IHllcyA7IHRoZW4KKwlBQ19DSEVDS19QUk9HKE1BS0VfVVBQRVJfVEFHUywgZXRhZ3MsIHllcywgbm8pCitlbHNlCisJTUFLRV9VUFBFUl9UQUdTPW5vCitmaQorCitpZiB0ZXN0ICIkTUFLRV9VUFBFUl9UQUdTIiA9IHllcyA7IHRoZW4KKwlNQUtFX1VQUEVSX1RBR1M9CitlbHNlCisJTUFLRV9VUFBFUl9UQUdTPSIjIgorZmkKK0FDX1NVQlNUKE1BS0VfVVBQRVJfVEFHUykKKworaWYgdGVzdCAiJE1BS0VfTE9XRVJfVEFHUyIgPSB5ZXMgOyB0aGVuCisJTUFLRV9MT1dFUl9UQUdTPQorZWxzZQorCU1BS0VfTE9XRVJfVEFHUz0iIyIKK2ZpCitBQ19TVUJTVChNQUtFX0xPV0VSX1RBR1MpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BTlBBR0VfRk9STUFUIHZlcnNpb246IDcgdXBkYXRlZDogMjAwMy8xMi8yMCAxOTozMDozNAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgT3B0aW9uIHRvIGFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gb2YgbWFucGFnZSBmb3JtYXQuCitkbmwgVGhlcmUgYXJlIHNldmVyYWwgc3BlY2lhbCBjYXNlczoKK2RubAorZG5sCWd6aXAgLSBtYW4gY2hlY2tzIGZvciwgY2FuIGRpc3BsYXkgZ3ppcCdkIGZpbGVzCitkbmwJY29tcHJlc3MgLSBtYW4gY2hlY2tzIGZvciwgY2FuIGRpc3BsYXkgY29tcHJlc3NlZCBmaWxlcworZG5sCUJTREkgLSBmaWxlcyBpbiB0aGUgY2F0LWRpcmVjdG9yaWVzIGFyZSBzdWZmaXhlZCAiLjAiCitkbmwJZm9ybWF0dGVkIC0gaW5zdGFsbGVyIHNob3VsZCBmb3JtYXQgKHB1dCBmaWxlcyBpbiBjYXQtZGlyZWN0b3J5KQorZG5sCWNhdG9ubHkgLSBpbnN0YWxsZXIgc2hvdWxkIG9ubHkgZm9ybWF0LCBlLmcuLCBmb3IgYSB0dXJua2V5IHN5c3RlbS4KK2RubAorZG5sIFRoZXJlIGFyZSBvdGhlciBjb25maWd1cmF0aW9ucyB3aGljaCB0aGlzIG1hY3JvIGRvZXMgbm90IHRlc3QsIGUuZy4sIEhQVVgncworZG5sIGNvbXByZXNzZWQgbWFucGFnZXMgKGJ1dCB1bmNvbXByZXNzZWQgbWFucGFnZXMgYXJlIGZpbmUsIGFuZCBIUFVYJ3MgbmFtaW5nCitkbmwgY29udmVudGlvbiB3b3VsZCBub3QgbWF0Y2ggb3VyIHVzZSkuCitBQ19ERUZVTihbQ0ZfTUFOUEFHRV9GT1JNQVRdLAorWworQUNfUkVRVUlSRShbQ0ZfUEFUSFNFUF0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9ybWF0IG9mIG1hbi1wYWdlcykKKworQUNfQVJHX1dJVEgobWFucGFnZS1mb3JtYXQsCisJWyAgLS13aXRoLW1hbnBhZ2UtZm9ybWF0ICAgc3BlY2lmeSBtYW5wYWdlLWZvcm1hdDogZ3ppcC9jb21wcmVzcy9CU0RJL25vcm1hbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxseSBmb3JtYXR0ZWQvY2F0b25seSwgZS5nLiwgZ3ppcCxmb3JtYXR0ZWRdLAorCVtNQU5QQUdFX0ZPUk1BVD0kd2l0aHZhbF0sCisJW01BTlBBR0VfRk9STUFUPXVua25vd25dKQorCit0ZXN0IC16ICIkTUFOUEFHRV9GT1JNQVQiICYmIE1BTlBBR0VfRk9STUFUPXVua25vd24KK01BTlBBR0VfRk9STUFUPWBlY2hvICIkTUFOUEFHRV9GT1JNQVQiIHwgc2VkIC1lICdzLywvIC9nJ2AKKworY2ZfdW5rbm93bj0KKworY2FzZSAkTUFOUEFHRV9GT1JNQVQgaW4KK3Vua25vd24pCisgIGlmIHRlc3QgLXogIiRNQU5QQVRIIiA7IHRoZW4KKyAgICBNQU5QQVRIPSIvdXNyL21hbjovdXNyL3NoYXJlL21hbiIKKyAgZmkKKworICAjIGxvb2sgZm9yIHRoZSAnZGF0ZScgbWFuLXBhZ2UgKGl0J3MgbW9zdCBsaWtlbHkgdG8gYmUgaW5zdGFsbGVkISkKKyAgTUFOUEFHRV9GT1JNQVQ9CisgIGNmX3ByZWZvcm09bm8KKyAgY2ZfY2F0b25seT15ZXMKKyAgY2ZfZXhhbXBsZT1kYXRlCisKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIU0VQfSIKKyAgZm9yIGNmX2RpciBpbiAkTUFOUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkY2ZfZGlyIiAmJiBjZl9kaXI9L3Vzci9tYW4KKyAgICBmb3IgY2ZfbmFtZSBpbiAkY2ZfZGlyL21hbiovJGNmX2V4YW1wbGUuW1swMV1dKiAkY2ZfZGlyL2NhdCovJGNmX2V4YW1wbGUuW1swMV1dKiAkY2ZfZGlyL21hbiovJGNmX2V4YW1wbGUgJGNmX2Rpci9jYXQqLyRjZl9leGFtcGxlCisgICAgZG8KKyAgICAgIGNmX3Rlc3Q9YGVjaG8gJGNmX25hbWUgfCBzZWQgLWUgJ3MvKi8vJ2AKKyAgICAgIGlmIHRlc3QgIngkY2ZfdGVzdCIgPSAieCRjZl9uYW1lIiA7IHRoZW4KKworCWNhc2UgIiRjZl9uYW1lIiBpbgorCSouZ3opIE1BTlBBR0VfRk9STUFUPSIkTUFOUEFHRV9GT1JNQVQgZ3ppcCI7OworCSouWikgIE1BTlBBR0VfRk9STUFUPSIkTUFOUEFHRV9GT1JNQVQgY29tcHJlc3MiOzsKKwkqLjApCU1BTlBBR0VfRk9STUFUPSIkTUFOUEFHRV9GT1JNQVQgQlNESSI7OworCSopICAgIE1BTlBBR0VfRk9STUFUPSIkTUFOUEFHRV9GT1JNQVQgbm9ybWFsIjs7CisJZXNhYworCisJY2FzZSAiJGNmX25hbWUiIGluCisJJGNmX2Rpci9tYW4qKQorCSAgY2ZfY2F0b25seT1ubworCSAgOzsKKwkkY2ZfZGlyL2NhdCopCisJICBjZl9wcmVmb3JtPXllcworCSAgOzsKKwllc2FjCisJYnJlYWsKKyAgICAgIGZpCisKKyAgICAgICMgaWYgd2UgZm91bmQgYSBtYXRjaCBpbiBlaXRoZXIgbWFuKiBvciBjYXQqLCBzdG9wIGxvb2tpbmcKKyAgICAgIGlmIHRlc3QgLW4gIiRNQU5QQUdFX0ZPUk1BVCIgOyB0aGVuCisJY2ZfZm91bmQ9bm8KKwl0ZXN0ICIkY2ZfcHJlZm9ybSIgPSB5ZXMgJiYgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBmb3JtYXR0ZWQiCisJdGVzdCAiJGNmX2NhdG9ubHkiID0geWVzICYmIE1BTlBBR0VfRk9STUFUPSIkTUFOUEFHRV9GT1JNQVQgY2F0b25seSIKKwljYXNlICIkY2ZfbmFtZSIgaW4KKwkkY2ZfZGlyL2NhdCopCisJICBjZl9mb3VuZD15ZXMKKwkgIDs7CisJZXNhYworCXRlc3QgJGNmX2ZvdW5kPXllcyAmJiBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgIyBvbmx5IGNoZWNrIHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gJE1BTlBBVEggd2hlcmUgd2UgZmluZCBtYW5wYWdlcworICAgIGlmIHRlc3QgLW4gIiRNQU5QQUdFX0ZPUk1BVCIgOyB0aGVuCisgICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgICMgaWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBleGFtcGxlLCBqdXN0IGFzc3VtZSBpdCBpcyBub3JtYWwKKyAgdGVzdCAteiAiJE1BTlBBR0VfRk9STUFUIiAmJiBNQU5QQUdFX0ZPUk1BVD1ub3JtYWwKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIDs7CisqKQorICBmb3IgY2Zfb3B0aW9uIGluICRNQU5QQUdFX0ZPUk1BVDsgZG8KKyAgICAgY2FzZSAkY2Zfb3B0aW9uIGluICModmkKKyAgICAgZ3ppcHxjb21wcmVzc3xCU0RJfG5vcm1hbHxmb3JtYXR0ZWR8Y2F0b25seSkKKyAgICAgICA7OworICAgICAqKQorICAgICAgIGNmX3Vua25vd249IiRjZl91bmtub3duICRjZl9vcHRpb24iCisgICAgICAgOzsKKyAgICAgZXNhYworICBkb25lCisgIDs7Citlc2FjCisKK0FDX01TR19SRVNVTFQoJE1BTlBBR0VfRk9STUFUKQoraWYgdGVzdCAtbiAiJGNmX3Vua25vd24iIDsgdGhlbgorICBBQ19NU0dfV0FSTihVbmV4cGVjdGVkIG1hbnBhZ2UtZm9ybWF0ICRjZl91bmtub3duKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFOUEFHRV9SRU5BTUVTIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNS8wNi8xOCAxODo1MTo1NworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoZSBEZWJpYW4gcGVvcGxlIGhhdmUgdGhlaXIgb3duIG5hbWluZyBjb252ZW50aW9uIGZvciBtYW5wYWdlcy4gIFRoaXMKK2RubCBvcHRpb24gbGV0cyB1cyBvdmVycmlkZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHJlbmFtaW5nLCBvcgorZG5sIGRpc2FibGUgaXQgYWx0b2dldGhlci4KK0FDX0RFRlVOKFtDRl9NQU5QQUdFX1JFTkFNRVNdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBtYW5wYWdlIHJlbmFtaW5nKQorCitBQ19BUkdfV0lUSChtYW5wYWdlLXJlbmFtZXMsCisJWyAgLS13aXRoLW1hbnBhZ2UtcmVuYW1lcyAgc3BlY2lmeSBtYW5wYWdlLXJlbmFtaW5nXSwKKwlbTUFOUEFHRV9SRU5BTUVTPSR3aXRodmFsXSwKKwlbTUFOUEFHRV9SRU5BTUVTPXllc10pCisKK2Nhc2UgIi4kTUFOUEFHRV9SRU5BTUVTIiBpbiAjKHZpCisubm8pICModmkKKyAgOzsKKy58LnllcykKKyAgIyBEZWJpYW4gJ21hbicgcHJvZ3JhbT8KKyAgaWYgdGVzdCAtZiAvZXRjL2RlYmlhbl92ZXJzaW9uIDsgdGhlbgorICAgIE1BTlBBR0VfUkVOQU1FUz1gY2QgJHNyY2RpciAmJiBwd2RgL21hbi9tYW5fZGIucmVuYW1lcworICBlbHNlCisgICAgTUFOUEFHRV9SRU5BTUVTPW5vCisgIGZpCisgIDs7Citlc2FjCisKK2lmIHRlc3QgIiRNQU5QQUdFX1JFTkFNRVMiICE9IG5vIDsgdGhlbgorICBpZiB0ZXN0IC1mICRzcmNkaXIvbWFuLyRNQU5QQUdFX1JFTkFNRVMgOyB0aGVuCisgICAgTUFOUEFHRV9SRU5BTUVTPWBjZCAkc3JjZGlyL21hbiAmJiBwd2RgLyRNQU5QQUdFX1JFTkFNRVMKKyAgZWxpZiB0ZXN0ICEgLWYgJE1BTlBBR0VfUkVOQU1FUyA7IHRoZW4KKyAgICBBQ19NU0dfRVJST1Iobm90IGEgZmlsZW5hbWU6ICRNQU5QQUdFX1JFTkFNRVMpCisgIGZpCisKKyAgdGVzdCAhIC1kIG1hbiAmJiBta2RpciBtYW4KKworICAjIENvbnN0cnVjdCBhIHNlZC1zY3JpcHQgdG8gcGVyZm9ybSByZW5hbWluZyB3aXRoaW4gbWFuLXBhZ2VzCisgIGlmIHRlc3QgLW4gIiRNQU5QQUdFX1JFTkFNRVMiIDsgdGhlbgorICAgIHRlc3QgISAtZCBtYW4gJiYgbWtkaXIgbWFuCisgICAgc2ggJHNyY2Rpci9tYW4vbWFrZV9zZWQuc2ggJE1BTlBBR0VfUkVOQU1FUyA+Li9lZGl0X21hbi5zZWQKKyAgZmkKK2ZpCisKK0FDX01TR19SRVNVTFQoJE1BTlBBR0VfUkVOQU1FUykKK0FDX1NVQlNUKE1BTlBBR0VfUkVOQU1FUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFOUEFHRV9TWU1MSU5LUyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDMvMTIvMTMgMTg6MDE6NTgKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU29tZSBwZW9wbGUgZXhwZWN0IGVhY2ggdG9vbCB0byBtYWtlIGFsbCBhbGlhc2VzIGZvciBtYW5wYWdlcyBpbiB0aGUKK2RubCBtYW4tZGlyZWN0b3J5LiAgVGhpcyBhY2NvbW1vZGF0ZXMgdGhlIG9sZGVyLCBsZXNzLWNhcGFibGUgaW1wbGVtZW50YXRpb25zCitkbmwgb2YgJ21hbicsIGFuZCBpcyBvcHRpb25hbC4KK0FDX0RFRlVOKFtDRl9NQU5QQUdFX1NZTUxJTktTXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiBtYW5wYWdlIGFsaWFzZXMgd2lsbCBiZSBpbnN0YWxsZWQpCisKK0FDX0FSR19XSVRIKG1hbnBhZ2UtYWxpYXNlcywKKwlbICAtLXdpdGgtbWFucGFnZS1hbGlhc2VzICBzcGVjaWZ5IG1hbnBhZ2UtYWxpYXNlcyB1c2luZyAuc29dLAorCVtNQU5QQUdFX0FMSUFTRVM9JHdpdGh2YWxdLAorCVtNQU5QQUdFX0FMSUFTRVM9eWVzXSkKKworQUNfTVNHX1JFU1VMVCgkTUFOUEFHRV9BTElBU0VTKQorCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisJY2ZfdXNlX3N5bWxpbmtzPXllcworZWxzZQorCWNmX3VzZV9zeW1saW5rcz1ubworZmkKKworTUFOUEFHRV9TWU1MSU5LUz1ubworaWYgdGVzdCAiJE1BTlBBR0VfQUxJQVNFUyIgPSB5ZXMgOyB0aGVuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgbWFucGFnZSBzeW1saW5rcyBzaG91bGQgYmUgdXNlZCkKKworQUNfQVJHX1dJVEgobWFucGFnZS1zeW1saW5rcywKKwlbICAtLXdpdGgtbWFucGFnZS1zeW1saW5rcyBzcGVjaWZ5IG1hbnBhZ2UtYWxpYXNlcyB1c2luZyBzeW1saW5rc10sCisJW01BTlBBR0VfU1lNTElOS1M9JHdpdGh2YWxdLAorCVtNQU5QQUdFX1NZTUxJTktTPSRjZl91c2Vfc3ltbGlua3NdKQorCitpZiB0ZXN0ICIkJGNmX3VzZV9zeW1saW5rcyIgPSBubzsgdGhlbgoraWYgdGVzdCAiJE1BTlBBR0VfU1lNTElOS1MiID0geWVzIDsgdGhlbgorCUFDX01TR19XQVJOKGNhbm5vdCBtYWtlIHN5bWxpbmtzLCB3aWxsIHVzZSAuc28gZmlsZXMpCisJTUFOUEFHRV9TWU1MSU5LUz1ubworZmkKK2ZpCisKK0FDX01TR19SRVNVTFQoJE1BTlBBR0VfU1lNTElOS1MpCitmaQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BTlBBR0VfVEJMIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMi8wMS8xOSAyMjo1MTozMgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBvcHRpb24gY2F1c2VzIG1hbnBhZ2VzIHRvIGJlIHJ1biB0aHJvdWdoIHRibCgxKSB0byBnZW5lcmF0ZSB0YWJsZXMKK2RubCBjb3JyZWN0bHkuCitBQ19ERUZVTihbQ0ZfTUFOUEFHRV9UQkxdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBtYW5wYWdlIHRibCkKKworQUNfQVJHX1dJVEgobWFucGFnZS10YmwsCisJWyAgLS13aXRoLW1hbnBhZ2UtdGJsICAgICAgc3BlY2lmeSBtYW5wYWdlIHByb2Nlc3Npbmcgd2l0aCB0YmxdLAorCVtNQU5QQUdFX1RCTD0kd2l0aHZhbF0sCisJW01BTlBBR0VfVEJMPW5vXSkKKworQUNfTVNHX1JFU1VMVCgkTUFOUEFHRV9UQkwpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BTl9QQUdFUyB2ZXJzaW9uOiAzNSB1cGRhdGVkOiAyMDA3LzAzLzMxIDExOjQ3OjI5CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgVHJ5IHRvIGRldGVybWluZSBpZiB0aGUgbWFuLXBhZ2VzIG9uIHRoZSBzeXN0ZW0gYXJlIGNvbXByZXNzZWQsIGFuZCBpZgorZG5sIHNvLCB3aGF0IGZvcm1hdCBpcyB1c2VkLiAgVXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gY29uc3RydWN0IGEgc2NyaXB0IHRoYXQKK2RubCB3aWxsIGluc3RhbGwgbWFuLXBhZ2VzLgorQUNfREVGVU4oW0NGX01BTl9QQUdFU10sCitbCitDRl9IRUxQX01FU1NBR0UoT3B0aW9ucyB0byBTcGVjaWZ5IEhvdyBNYW5wYWdlcyBhcmUgSW5zdGFsbGVkOikKK0NGX01BTlBBR0VfRk9STUFUCitDRl9NQU5QQUdFX1JFTkFNRVMKK0NGX01BTlBBR0VfU1lNTElOS1MKK0NGX01BTlBBR0VfVEJMCisKKyAgaWYgdGVzdCAiJHByZWZpeCIgPSAiTk9ORSIgOyB0aGVuCisgICAgIGNmX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBlbHNlCisgICAgIGNmX3ByZWZpeD0iJHByZWZpeCIKKyAgZmkKKworICBjYXNlICIkTUFOUEFHRV9GT1JNQVQiIGluICMgKHZpCisgICpjYXRvbmx5KikgIyAodmkKKyAgICBjZl9mb3JtYXQ9eWVzCisgICAgY2ZfaW5ib3RoPW5vCisgICAgOzsKKyAgKmZvcm1hdHRlZCopICMgKHZpCisgICAgY2ZfZm9ybWF0PXllcworICAgIGNmX2luYm90aD15ZXMKKyAgICA7OworICAqKQorICAgIGNmX2Zvcm1hdD1ubworICAgIGNmX2luYm90aD1ubworICAgIDs7CisgIGVzYWMKKwordGVzdCAhIC1kIG1hbiAmJiBta2RpciBtYW4KKworY2Zfc29fc3RyaXA9CitjZl9jb21wcmVzcz0KK2Nhc2UgIiRNQU5QQUdFX0ZPUk1BVCIgaW4gIyh2aQorKmNvbXByZXNzKikgIyh2aQorCWNmX3NvX3N0cmlwPSJaIgorCWNmX2NvbXByZXNzPWNvbXByZXNzCisgIDs7CisqZ3ppcCopICModmkKKwljZl9zb19zdHJpcD0iZ3oiCisJY2ZfY29tcHJlc3M9Z3ppcAorICA7OworZXNhYworCitjZl9lZGl0X21hbj0uL2VkaXRfbWFuLnNoCitjZl9tYW5fYWxpYXM9YHB3ZGAvbWFuX2FsaWFzLnNlZAorCitjYXQgPiRjZl9lZGl0X21hbiA8PENGX0VPRgorIyEgL2Jpbi9zaAorIyB0aGlzIHNjcmlwdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbmZpZ3VyZS1zY3JpcHQgQ0ZfTUFOX1BBR0VTIG1hY3JvLgorCitwcmVmaXg9IiRjZl9wcmVmaXgiCitkYXRhZGlyPSIkZGF0YWRpciIKKworTkNVUlNFU19NQUpPUj0iJE5DVVJTRVNfTUFKT1IiCitOQ1VSU0VTX01JTk9SPSIkTkNVUlNFU19NSU5PUiIKK05DVVJTRVNfUEFUQ0g9IiROQ1VSU0VTX1BBVENIIgorCitOQ1VSU0VTX09TUEVFRD0iJE5DVVJTRVNfT1NQRUVEIgorVEVSTUlORk89IiRURVJNSU5GTyIKKworTUtESVJTPSJzaCBgY2QgJHNyY2RpciAmJiBwd2RgL21rZGlycy5zaCIKKworSU5TVEFMTD0iJElOU1RBTEwiCitJTlNUQUxMX0RBVEE9IiRJTlNUQUxMX0RBVEEiCisKK3RyYW5zZm9ybT0iJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisKK1RNUD1cJHtUTVBESVItL3RtcH0vbWFuXCRcJAordHJhcCAicm0gLWYgXCRUTVAiIDAgMSAyIDUgMTUKKworZm9ybT1cWyRdMQorc2hpZnQgfHwgZXhpdCAxCisKK3ZlcmI9XFskXTEKK3NoaWZ0IHx8IGV4aXQgMQorCittYW5kaXI9XFskXTEKK3NoaWZ0IHx8IGV4aXQgMQorCitzcmNkaXI9XFskXTEKK3RvcF9zcmNkaXI9XFskXXNyY2Rpci8uLgorc2hpZnQgfHwgZXhpdCAxCisKK2lmIHRlc3QgIlwkZm9ybSIgPSBub3JtYWwgOyB0aGVuCisJaWYgdGVzdCAiJGNmX2Zvcm1hdCIgPSB5ZXMgOyB0aGVuCisJaWYgdGVzdCAiJGNmX2luYm90aCIgPSBubyA7IHRoZW4KKwkJc2ggXFskXTAgZm9ybWF0IFwkdmVyYiBcJG1hbmRpciBcJHNyY2RpciBcWyRdKgorCQlleGl0ICQ/CisJZmkKKwlmaQorCWNmX3N1YmRpcj1cJG1hbmRpci9tYW4KKwljZl90YWJsZXM9JE1BTlBBR0VfVEJMCitlbHNlCisJY2Zfc3ViZGlyPVwkbWFuZGlyL2NhdAorCWNmX3RhYmxlcz15ZXMKK2ZpCisKKyMgcHJvY2VzcyB0aGUgbGlzdCBvZiBzb3VyY2UtZmlsZXMKK2ZvciBpIGluIFxbJF0qIDsgZG8KK2Nhc2UgXCRpIGluICModmkKKyoub3JpZ3wqLnJlaikgOzsgIyh2aQorKi5bWzAtOV1dKikKKwlzZWN0aW9uPVxgZXhwciAiXCRpIiA6ICcuKlxcLlxcKFtbMC05XV1cXClbW3htXV0qJ1xgOworCWlmIHRlc3QgXCR2ZXJiID0gaW5zdGFsbGluZyA7IHRoZW4KKwlpZiB0ZXN0ICEgLWQgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSA7IHRoZW4KKwkJXCRNS0RJUlMgXCRjZl9zdWJkaXJcJHNlY3Rpb24KKwlmaQorCWZpCisKKwkjIHJlcGxhY2UgdmFyaWFibGVzIGluIG1hbiBwYWdlCisJaWYgdGVzdCAhIC1mICRjZl9tYW5fYWxpYXMgOyB0aGVuCitjYXQgPj4kY2ZfbWFuX2FsaWFzIDw8LUNGX0VPRjIKKwkJcyxAREFUQURJUkAsXCRkYXRhZGlyLGcKKwkJcyxAVEVSTUlORk9ALFwkVEVSTUlORk8sZworCQlzLEBOQ1VSU0VTX01BSk9SQCxcJE5DVVJTRVNfTUFKT1IsZworCQlzLEBOQ1VSU0VTX01JTk9SQCxcJE5DVVJTRVNfTUlOT1IsZworCQlzLEBOQ1VSU0VTX1BBVENIQCxcJE5DVVJTRVNfUEFUQ0gsZworCQlzLEBOQ1VSU0VTX09TUEVFREAsXCROQ1VSU0VTX09TUEVFRCxnCitDRl9FT0YKKwlpZmVsc2UoJDEsLCxbCisJZm9yIGNmX25hbWUgaW4gJDEKKwlkbworCQljZl9OQU1FPWBlY2hvICIkY2ZfbmFtZSIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisJCWNmX25hbWU9YGVjaG8gJGNmX25hbWV8c2VkICIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSJgCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDwtQ0ZfRU9GCisJCXMsQCRjZl9OQU1FQCwkY2ZfbmFtZSwKK0NGX0VPRgorCWRvbmUKKwldKQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCitDRl9FT0YyCisJCWVjaG8gIi4uLm1hZGUgJGNmX21hbl9hbGlhcyIKKwlmaQorCisJYWxpYXNlcz0KKwljZl9zb3VyY2U9XGBiYXNlbmFtZSBcJGlcYAorCWluYWxpYXM9XCRjZl9zb3VyY2UKKwl0ZXN0ICEgLWYgXCRpbmFsaWFzICYmIGluYWxpYXM9Ilwkc3JjZGlyL1wkaW5hbGlhcyIKKwlpZiB0ZXN0ICEgLWYgXCRpbmFsaWFzIDsgdGhlbgorCQllY2hvIC4uIHNraXBwZWQgXCRjZl9zb3VyY2UKKwkJY29udGludWUKKwlmaQorQ0ZfRU9GCisKK2lmIHRlc3QgIiRNQU5QQUdFX0FMSUFTRVMiICE9IG5vIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJYWxpYXNlcz1cYHNlZCAtZiBcJHRvcF9zcmNkaXIvbWFuL21hbmxpbmtzLnNlZCBcJGluYWxpYXMgfHNlZCAtZiAkY2ZfbWFuX2FsaWFzIHwgc29ydCAtdVxgCitDRl9FT0YKK2ZpCisKK2lmIHRlc3QgIiRNQU5QQUdFX1JFTkFNRVMiID0gbm8gOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwkjIHBlcmZvcm0gcHJvZ3JhbSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHNlY3Rpb24gMSBtYW4gcGFnZXMKKwlpZiB0ZXN0IFwkc2VjdGlvbiA9IDEgOyB0aGVuCisJCWNmX3RhcmdldD1cJGNmX3N1YmRpclwke3NlY3Rpb259L1xgZWNobyBcJGNmX3NvdXJjZXxzZWQgIlwke3RyYW5zZm9ybX0iXGAKKwllbHNlCisJCWNmX3RhcmdldD1cJGNmX3N1YmRpclwke3NlY3Rpb259L1wkY2Zfc291cmNlCisJZmkKK0NGX0VPRgorZWxzZQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJY2ZfdGFyZ2V0PVxgZ3JlcCAiXlwkY2Zfc291cmNlIiAkTUFOUEFHRV9SRU5BTUVTIHwgJEFXSyAne3ByaW50IFxbJF0yfSdcYAorCWlmIHRlc3QgLXogIlwkY2ZfdGFyZ2V0IiA7IHRoZW4KKwkJZWNobyAnPyBtaXNzaW5nIHJlbmFtZSBmb3IgJ1wkY2Zfc291cmNlCisJCWNmX3RhcmdldD0iXCRjZl9zb3VyY2UiCisJZmkKKwljZl90YXJnZXQ9IlwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0vXCR7Y2ZfdGFyZ2V0fSIKKworQ0ZfRU9GCitmaQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlzZWQJLWYgJGNmX21hbl9hbGlhcyBcXAorQ0ZfRU9GCisKK2lmIHRlc3QgLWYgJE1BTlBBR0VfUkVOQU1FUyA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCQk8IFwkaSB8IHNlZCAtZiBgcHdkYC9lZGl0X21hbi5zZWQgPlwkVE1QCitDRl9FT0YKK2Vsc2UKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCQk8IFwkaSA+XCRUTVAKK0NGX0VPRgorZmkKKworY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCitpZiB0ZXN0IFwkY2ZfdGFibGVzID0geWVzIDsgdGhlbgorCXRibCBcJFRNUCA+XCRUTVAub3V0CisJbXYgXCRUTVAub3V0IFwkVE1QCitmaQorQ0ZfRU9GCisKK2lmIHRlc3QgJHdpdGhfY3Vyc2VzX2ggIT0geWVzIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJc2VkIC1lICIvXCNbICAgIF0qaW5jbHVkZS9zLGN1cnNlcy5oLG5jdXJzZXMuaCwiIDwgXCRUTVAgPlwkVE1QLm91dAorCW12IFwkVE1QLm91dCBcJFRNUAorQ0ZfRU9GCitmaQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlpZiB0ZXN0IFwkZm9ybSA9IGZvcm1hdCA7IHRoZW4KKwkJbnJvZmYgLW1hbiBcJFRNUCA+XCRUTVAub3V0CisJCW12IFwkVE1QLm91dCBcJFRNUAorCWZpCitDRl9FT0YKKworaWYgdGVzdCAtbiAiJGNmX2NvbXByZXNzIiA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCWlmIHRlc3QgXCR2ZXJiID0gaW5zdGFsbGluZyA7IHRoZW4KKwlpZiAoICRjZl9jb21wcmVzcyAtZiBcJFRNUCApCisJdGhlbgorCQltdiBcJFRNUC4kY2Zfc29fc3RyaXAgXCRUTVAKKwlmaQorCWZpCisJY2ZfdGFyZ2V0PSJcJGNmX3RhcmdldC4kY2Zfc29fc3RyaXAiCitDRl9FT0YKK2ZpCisKK2Nhc2UgIiRNQU5QQUdFX0ZPUk1BVCIgaW4gIyh2aQorKkJTREkqKQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJaWYgdGVzdCBcJGZvcm0gPSBmb3JtYXQgOyB0aGVuCisJCSMgQlNESSBpbnN0YWxscyBvbmx5IC4wIHN1ZmZpeGVzIGluIHRoZSBjYXQgZGlyZWN0b3JpZXMKKwkJY2ZfdGFyZ2V0PSJcYGVjaG8gXCRjZl90YXJnZXR8c2VkIC1lICdzL1wuW1sxLTldXVwrW1thLXpdXSovLjAvJ1xgIgorCWZpCitDRl9FT0YKKyAgOzsKK2VzYWMKKworY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJc3VmZml4PVxgYmFzZW5hbWUgXCRjZl90YXJnZXQgfCBzZWQgLWUgJ3MlXltbXi5dXSolJSdcYAorCWlmIHRlc3QgXCR2ZXJiID0gaW5zdGFsbGluZyA7IHRoZW4KKwkJZWNobyBcJHZlcmIgXCRjZl90YXJnZXQKKwkJXCRJTlNUQUxMX0RBVEEgXCRUTVAgXCRjZl90YXJnZXQKKwkJdGVzdCAtZCBcJGNmX3N1YmRpclwke3NlY3Rpb259ICYmCisJCXRlc3QgLW4gIlwkYWxpYXNlcyIgJiYgKAorCQkJY2QgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSAmJiAoCisJCQkJY2Zfc291cmNlPVxgZWNobyBcJGNmX3RhcmdldCB8c2VkIC1lICdzJV4uKi9cKFtbXi9dXVtbXi9dXSovW1teL11dW1teL11dKiRcKSVcMSUnXGAKKwkJCQl0ZXN0IC1uICIkY2Zfc29fc3RyaXAiICYmIGNmX3NvdXJjZT1cYGVjaG8gXCRjZl9zb3VyY2UgfHNlZCAtZSAncyVcLiRjZl9zb19zdHJpcFwkJSUnXGAKKwkJCQljZl90YXJnZXQ9XGBiYXNlbmFtZSBcJGNmX3RhcmdldFxgCisJCQkJZm9yIGNmX2FsaWFzIGluIFwkYWxpYXNlcworCQkJCWRvCisJCQkJCWlmIHRlc3QgXCRzZWN0aW9uID0gMSA7IHRoZW4KKwkJCQkJCWNmX2FsaWFzPVxgZWNobyBcJGNmX2FsaWFzfHNlZCAiXCR7dHJhbnNmb3JtfSJcYAorCQkJCQlmaQorCisJCQkJCWlmIHRlc3QgIiRNQU5QQUdFX1NZTUxJTktTIiA9IHllcyA7IHRoZW4KKwkJCQkJCWlmIHRlc3QgLWYgXCRjZl9hbGlhc1wke3N1ZmZpeH0gOyB0aGVuCisJCQkJCQkJaWYgKCBjbXAgLXMgXCRjZl90YXJnZXQgXCRjZl9hbGlhc1wke3N1ZmZpeH0gKQorCQkJCQkJCXRoZW4KKwkJCQkJCQkJY29udGludWUKKwkJCQkJCQlmaQorCQkJCQkJZmkKKwkJCQkJCWVjaG8gLi4gXCR2ZXJiIGFsaWFzIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCQlybSAtZiBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQkJJExOX1MgXCRjZl90YXJnZXQgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJZWxpZiB0ZXN0ICJcJGNmX3RhcmdldCIgIT0gIlwkY2ZfYWxpYXNcJHtzdWZmaXh9IiA7IHRoZW4KKwkJCQkJCWVjaG8gIi5zbyBcJGNmX3NvdXJjZSIgPlwkVE1QCitDRl9FT0YKK2lmIHRlc3QgLW4gIiRjZl9jb21wcmVzcyIgOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwkJCQkJCWlmIHRlc3QgLW4gIiRjZl9zb19zdHJpcCIgOyB0aGVuCisJCQkJCQkJJGNmX2NvbXByZXNzIC1mIFwkVE1QCisJCQkJCQkJbXYgXCRUTVAuJGNmX3NvX3N0cmlwIFwkVE1QCisJCQkJCQlmaQorQ0ZfRU9GCitmaQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCQkJCQllY2hvIC4uIFwkdmVyYiBhbGlhcyBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQkJcm0gLWYgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJCVwkSU5TVEFMTF9EQVRBIFwkVE1QIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCWZpCisJCQkJZG9uZQorCQkJKQorCQkpCisJZWxpZiB0ZXN0IFwkdmVyYiA9IHJlbW92aW5nIDsgdGhlbgorCQl0ZXN0IC1mIFwkY2ZfdGFyZ2V0ICYmICgKKwkJCWVjaG8gXCR2ZXJiIFwkY2ZfdGFyZ2V0CisJCQlybSAtZiBcJGNmX3RhcmdldAorCQkpCisJCXRlc3QgLWQgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSAmJgorCQl0ZXN0IC1uICJcJGFsaWFzZXMiICYmICgKKwkJCWNkIFwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0gJiYgKAorCQkJCWZvciBjZl9hbGlhcyBpbiBcJGFsaWFzZXMKKwkJCQlkbworCQkJCQlpZiB0ZXN0IFwkc2VjdGlvbiA9IDEgOyB0aGVuCisJCQkJCQljZl9hbGlhcz1cYGVjaG8gXCRjZl9hbGlhc3xzZWQgIlwke3RyYW5zZm9ybX0iXGAKKwkJCQkJZmkKKworCQkJCQllY2hvIC4uIFwkdmVyYiBhbGlhcyBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQlybSAtZiBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCWRvbmUKKwkJCSkKKwkJKQorCWVsc2UKKyMJCWVjaG8gIi5oeSAwIgorCQljYXQgXCRUTVAKKwlmaQorCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgJGNmX2luYm90aCA9IHllcyA7IHRoZW4KK2lmIHRlc3QgXCRmb3JtICE9IGZvcm1hdCA7IHRoZW4KKwlzaCBcWyRdMCBmb3JtYXQgXCR2ZXJiIFwkbWFuZGlyIFwkc3JjZGlyIFxbJF0qCitmaQorZmkKKworZXhpdCAwCitDRl9FT0YKK2NobW9kIDc1NSAkY2ZfZWRpdF9tYW4KKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NQVRIX0xJQiB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDAvMDUvMjggMDE6Mzk6MTAKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrcyBmb3IgbGlicmFyaWVzLiAgQXQgbGVhc3Qgb25lIFVOSVggc3lzdGVtLCBBcHBsZSBNYWNpbnRvc2gKK2RubCBSaGFwc29keSA1LjUsIGRvZXMgbm90IGhhdmUgLWxtLiAgV2UgY2Fubm90IHVzZSB0aGUgc2ltcGxlcgorZG5sIEFDX0NIRUNLX0xJQihtLHNpbiksIGJlY2F1c2UgdGhhdCBmYWlscyBmb3IgQysrLgorQUNfREVGVU4oW0NGX01BVEhfTElCXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIC1sbSBuZWVkZWQgZm9yIG1hdGggZnVuY3Rpb25zLAorCWNmX2N2X25lZWRfbGlibSxbCisJQUNfVFJZX0xJTksoWworCSNpbmNsdWRlIDxzdGRpby5oPgorCSNpbmNsdWRlIDxtYXRoLmg+CisJXSwKKwlbZG91YmxlIHggPSByYW5kKCk7IHByaW50ZigicmVzdWx0ID0gJWdcbiIsIF1pZmVsc2UoJDIsLHNpbih4KSwkMilbKV0sCisJW2NmX2N2X25lZWRfbGlibT1ub10sCisJW2NmX2N2X25lZWRfbGlibT15ZXNdKV0pCitpZiB0ZXN0ICIkY2ZfY3ZfbmVlZF9saWJtIiA9IHllcwordGhlbgoraWZlbHNlKCQxLCxbCisJTElCUz0iJExJQlMgLWxtIgorXSxbJDE9LWxtXSkKK2ZpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01JWEVEQ0FTRV9GSUxFTkFNRVMgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAzLzA5LzIwIDE3OjA3OjU1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBmaWxlLXN5c3RlbSBzdXBwb3J0cyBtaXhlZC1jYXNlIGZpbGVuYW1lcy4gIElmIHdlJ3JlIGFibGUgdG8KK2RubCBjcmVhdGUgYSBsb3dlcmNhc2UgbmFtZSBhbmQgc2VlIGl0IGFzIHVwcGVyY2FzZSwgaXQgZG9lc24ndCBzdXBwb3J0IHRoYXQuCitBQ19ERUZVTihbQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FU10sCitbCitBQ19DQUNIRV9DSEVDSyhpZiBmaWxlc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLGNmX2N2X21peGVkY2FzZSxbCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKwljYXNlICR0YXJnZXRfYWxpYXMgaW4gIyh2aQorCSotb3MyLWVteCp8Ki1tc2Rvc2RqZ3BwKnwqLWN5Z3dpbip8Ki1taW5ndzMyKnwqLXV3aW4qKSAjKHZpCisJCWNmX2N2X21peGVkY2FzZT1ubworCQk7OworCSopCisJCWNmX2N2X21peGVkY2FzZT15ZXMKKwkJOzsKKwllc2FjCitlbHNlCisJcm0gLWYgY29uZnRlc3QgQ09ORlRFU1QKKwllY2hvIHRlc3QgPmNvbmZ0ZXN0CisJaWYgdGVzdCAtZiBDT05GVEVTVCA7IHRoZW4KKwkJY2ZfY3ZfbWl4ZWRjYXNlPW5vCisJZWxzZQorCQljZl9jdl9taXhlZGNhc2U9eWVzCisJZmkKKwlybSAtZiBjb25mdGVzdCBDT05GVEVTVAorZmkKK10pCit0ZXN0ICIkY2ZfY3ZfbWl4ZWRjYXNlIiA9IHllcyAmJiBBQ19ERUZJTkUoTUlYRURDQVNFX0ZJTEVOQU1FUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUtTVEVNUCB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTI6MzM6MzAKK2RubCAtLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGEgd29ya2luZyBta3N0ZW1wLiAgVGhpcyBjcmVhdGVzIHR3byBmaWxlcywgY2hlY2tzIHRoYXQgdGhleSBhcmUKK2RubCBzdWNjZXNzZnVsbHkgY3JlYXRlZCBhbmQgZGlzdGluY3QgKEFtaWdhT1MgYXBwYXJlbnRseSBmYWlscyBvbiB0aGUgbGFzdCkuCitBQ19ERUZVTihbQ0ZfTUtTVEVNUF0sWworQUNfQ0FDSEVfQ0hFQ0soZm9yIHdvcmtpbmcgbWtzdGVtcCwgY2ZfY3ZfZnVuY19ta3N0ZW1wLFsKK3JtIC1mIGNvbmZ0ZXN0KgorQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgoraW50IG1haW4oKQoreworCWNoYXIgKnRtcGwgPSAiY29uZnRlc3RYWFhYWFgiOworCWNoYXIgbmFtZVsyXVs4MF07CisJaW50IG47CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHNiOworCisJdW1hc2soMDc3KTsKKwlmb3IgKG4gPSAwOyBuIDwgMjsgKytuKSB7CisJCXN0cmNweShuYW1lW25dLCB0bXBsKTsKKwkJaWYgKChmZCA9IG1rc3RlbXAobmFtZVtuXSkpID49IDApIHsKKwkJCWlmICghc3RyY21wKG5hbWVbbl0sIHRtcGwpCisJCQkgfHwgc3RhdChuYW1lW25dLCAmc2IpICE9IDAKKwkJCSB8fCAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJFRworCQkJIHx8IChzYi5zdF9tb2RlICYgMDc3KSAhPSAwKSB7CisJCQkJcmVzdWx0ID0gMTsKKwkJCX0KKwkJCWNsb3NlKGZkKTsKKwkJfQorCX0KKwlpZiAocmVzdWx0ID09IDAKKwkgJiYgIXN0cmNtcChuYW1lWzBdLCBuYW1lWzFdKSkKKwkJcmVzdWx0ID0gMTsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KHJlc3VsdCk7Cit9CitdLFtjZl9jdl9mdW5jX21rc3RlbXA9eWVzCitdLFtjZl9jdl9mdW5jX21rc3RlbXA9bm8KK10sW0FDX0NIRUNLX0ZVTkMobWtzdGVtcCkKK10pCitdKQoraWYgdGVzdCAiJGNmX2N2X2Z1bmNfbWtzdGVtcCIgPSB5ZXMgOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfTUtTVEVNUCkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01TR19MT0cgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA3LzA3LzI5IDA5OjU1OjEyCitkbmwgLS0tLS0tLS0tLQorZG5sIFdyaXRlIGEgZGVidWcgbWVzc2FnZSB0byBjb25maWcubG9nLCBhbG9uZyB3aXRoIHRoZSBsaW5lIG51bWJlciBpbiB0aGUKK2RubCBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0NGX01TR19MT0ddLFsKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTpfX29saW5lX186IHRlc3RpbmcgJCogLi4uIiAxPiZBQ19GRF9DQworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX0FCSV82IHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8wOS8xNyAxODo0Mjo0OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgbmN1cnNlcycgQUJJIHRvIDYgdW5sZXNzIG92ZXJyaWRkZW4gYnkgZXhwbGljaXQgY29uZmlndXJlIG9wdGlvbiwgYW5kCitkbmwgd2FybiBhYm91dCB0aGlzLgorQUNfREVGVU4oW0NGX05DVVJTRVNfQUJJXzZdLFsKK2lmIHRlc3QgIiR7d2l0aF9hYmlfdmVyc2lvbitzZXR9IiAhPSBzZXQ7IHRoZW4KKwljYXNlICRjZl9jdl9yZWxfdmVyc2lvbiBpbgorCTUuKikKKwkJY2ZfY3ZfcmVsX3ZlcnNpb249Ni4wCisJCWNmX2N2X2FiaV92ZXJzaW9uPTYKKwkJQUNfTVNHX1dBUk4oT3ZlcnJpZGluZyBBQkkgdmVyc2lvbiB0byAkY2ZfY3ZfYWJpX3ZlcnNpb24pCisJCTs7CisJZXNhYworZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTk9fTEVBS1NfT1BUSU9OIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNi8xMi8xNiAxNDoyNDowNQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIHNlZSBDRl9XSVRIX05PX0xFQUtTCitBQ19ERUZVTihbQ0ZfTk9fTEVBS1NfT1BUSU9OXSxbCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gdXNlICQxIGZvciB0ZXN0aW5nKQorQUNfQVJHX1dJVEgoJDEsCisJWyQyXSwKKwlbQUNfREVGSU5FKCQzKWlmZWxzZShbJDRdLCxbCisJICQ0CitdKQorCTogJHt3aXRoX2NmbGFnczo9LWd9CisJOiAke3dpdGhfbm9fbGVha3M6PXllc30KKwkgd2l0aF8kMT15ZXNdLAorCVt3aXRoXyQxPV0pCitBQ19NU0dfUkVTVUxUKCR7d2l0aF8kMTotbm99KQorCitjYXNlIC4kd2l0aF9jZmxhZ3MgaW4gIyh2aQorLiotZyopCisJY2FzZSAuJENGTEFHUyBpbiAjKHZpCisJLiotZyopICModmkKKwkJOzsKKwkqKQorCQlDRl9BRERfQ0ZMQUdTKFstZ10pCisJCTs7CisJZXNhYworCTs7Citlc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05VTUJFUl9TWU5UQVggdmVyc2lvbjogMSB1cGRhdGVkOiAyMDAzLzA5LzIwIDE4OjEyOjQ5CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIG51bWJlci4gIElmIG5vdCwgcmVwb3J0IGFuIGVycm9yLgorZG5sICQxIGlzIHRoZSB2YXJpYWJsZQorZG5sICQyIGlzIHRoZSBtZXNzYWdlCitBQ19ERUZVTihbQ0ZfTlVNQkVSX1NZTlRBWF0sWworaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICBjYXNlICQxIGluICModmkKKyAgW1swLTldXSopICModmkKKyAJOzsKKyAgKikKKwlBQ19NU0dfRVJST1IoJDIgaXMgbm90IGEgbnVtYmVyOiAkMSkKKyAJOzsKKyAgZXNhYworZWxzZQorICBBQ19NU0dfRVJST1IoJDIgdmFsdWUgaXMgZW1wdHkpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9PQkpfU1VCRElSIHZlcnNpb246IDQgdXBkYXRlZDogMjAwMi8wMi8yMyAyMDozODozMQorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDb21wdXRlIHRoZSBvYmplY3QtZGlyZWN0b3J5IG5hbWUgZnJvbSB0aGUgZ2l2ZW4gbW9kZWwgbmFtZQorQUNfREVGVU4oW0NGX09CSl9TVUJESVJdLAorWworCWNhc2UgJDEgaW4KKwlsaWJ0b29sKSAkMj0nb2JqX2xvJyAgOzsKKwlub3JtYWwpICAkMj0nb2JqZWN0cycgOzsKKwlkZWJ1ZykgICAkMj0nb2JqX2cnIDs7CisJcHJvZmlsZSkgJDI9J29ial9wJyA7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCQljeWd3aW4pICModmkKKwkJCSQyPSdvYmplY3RzJyA7OworCQkqKQorCQkJJDI9J29ial9zJyA7OworCQllc2FjCisJZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QQVRIU0VQIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMS8wMS8xMiAwMToyMzo1MworZG5sIC0tLS0tLS0tLS0KK2RubCBQcm92aWRlIGEgdmFsdWUgZm9yIHRoZSAkUEFUSCBhbmQgc2ltaWxhciBzZXBhcmF0b3IKK0FDX0RFRlVOKFtDRl9QQVRIU0VQXSwKK1sKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCW9zMiopCVBBVEhTRVA9JzsnICA7OworCSopCVBBVEhTRVA9JzonICA7OworCWVzYWMKK2lmZWxzZSgkMSwsLFskMT0kUEFUSFNFUF0pCisJQUNfU1VCU1QoUEFUSFNFUCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUEFUSF9TWU5UQVggdmVyc2lvbjogMTIgdXBkYXRlZDogMjAwOC8wMy8yMyAxNDo0NTo1OQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgdGhlIGFyZ3VtZW50IHRvIHNlZSB0aGF0IGl0IGxvb2tzIGxpa2UgYSBwYXRobmFtZS4gIFJld3JpdGUgaXQgaWYgaXQKK2RubCBiZWdpbnMgd2l0aCBvbmUgb2YgdGhlIHByZWZpeC9leGVjX3ByZWZpeCB2YXJpYWJsZXMsIGFuZCB0aGVuIGFnYWluIGlmIHRoZQorZG5sIHJlc3VsdCBiZWdpbnMgd2l0aCAnTk9ORScuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBhdXRvY29uZidzCitkbmwgZGVsYXllZCBldmFsdWF0aW9uIG9mIHRob3NlIHN5bWJvbHMuCitBQ19ERUZVTihbQ0ZfUEFUSF9TWU5UQVhdLFsKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi5bJF0kMSIgaW4gIyh2aQorLlxbJF1cKCpcKSp8LlwnKlwnKikgIyh2aQorICA7OworLi58Li8qfC5cXCopICModmkKKyAgOzsKKy5bW2EtekEtWl1dOltbXFwvXV0qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXFskXXsqcHJlZml4fSopICModmkKKyAgZXZhbCAkMT0iWyRdJDEiCisgIGNhc2UgIi5bJF0kMSIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgICQxPWBlY2hvIFskXSQxIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICAgIDs7CisgIGVzYWMKKyAgOzsgIyh2aQorLm5vfC5OT05FLyopCisgICQxPWBlY2hvIFskXSQxIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICA7OworKikKKyAgaWZlbHNlKCQyLCxbQUNfTVNHX0VSUk9SKFtleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCJbJF0kMVwiXSldLCQyKQorICA7OworZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QT1NJWF9DX1NPVVJDRSB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDUvMDcvMTQgMjA6MjU6MTAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIERlZmluZSBfUE9TSVhfQ19TT1VSQ0UgdG8gdGhlIGdpdmVuIGxldmVsLCBhbmQgX1BPU0lYX1NPVVJDRSBpZiBuZWVkZWQuCitkbmwKK2RubAlQT1NJWC4xLTE5OTAJCQkJX1BPU0lYX1NPVVJDRQorZG5sCVBPU0lYLjEtMTk5MCBhbmQJCQlfUE9TSVhfU09VUkNFIGFuZAorZG5sCQlQT1NJWC4yLTE5OTIgQy1MYW5ndWFnZQkJCV9QT1NJWF9DX1NPVVJDRT0yCitkbmwJCUJpbmRpbmdzIE9wdGlvbgorZG5sCVBPU0lYLjFiLTE5OTMJCQkJX1BPU0lYX0NfU09VUkNFPTE5OTMwOUwKK2RubAlQT1NJWC4xYy0xOTk2CQkJCV9QT1NJWF9DX1NPVVJDRT0xOTk1MDZMCitkbmwJWC9PcGVuIDIwMDAJCQkJX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKK2RubAorZG5sIFBhcmFtZXRlcnM6CitkbmwJJDEgaXMgdGhlIG5vbWluYWwgdmFsdWUgZm9yIF9QT1NJWF9DX1NPVVJDRQorQUNfREVGVU4oW0NGX1BPU0lYX0NfU09VUkNFXSwKK1sKK2NmX1BPU0lYX0NfU09VUkNFPWlmZWxzZSgkMSwsMTk5NTA2TCwkMSkKKworY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisKK0NGX1JFTU9WRV9ERUZJTkUoY2ZfdHJpbV9DRkxBR1MsJGNmX3NhdmVfQ0ZMQUdTLF9QT1NJWF9DX1NPVVJDRSkKK0NGX1JFTU9WRV9ERUZJTkUoY2ZfdHJpbV9DUFBGTEFHUywkY2Zfc2F2ZV9DUFBGTEFHUyxfUE9TSVhfQ19TT1VSQ0UpCisKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIHNob3VsZCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFLGNmX2N2X3Bvc2l4X2Nfc291cmNlLFsKKwlDRl9NU0dfTE9HKGlmIHRoZSBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkIGdvIG5vIGZ1cnRoZXIpCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl9wb3NpeF9jX3NvdXJjZT1ub10sCisJW2NmX3dhbnRfcG9zaXhfc291cmNlPW5vCisJIGNhc2UgLiRjZl9QT1NJWF9DX1NPVVJDRSBpbiAjKHZpCisJIC5bWzEyXV0/PyopICModmkKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9Ii1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSIKKwkJOzsKKwkgLjIpICModmkKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9Ii1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSIKKwkJY2Zfd2FudF9wb3NpeF9zb3VyY2U9eWVzCisJCTs7CisJIC4qKQorCQljZl93YW50X3Bvc2l4X3NvdXJjZT15ZXMKKwkJOzsKKwkgZXNhYworCSBpZiB0ZXN0ICIkY2Zfd2FudF9wb3NpeF9zb3VyY2UiID0geWVzIDsgdGhlbgorCQlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmZGVmIF9QT1NJWF9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sW10sCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UgLURfUE9TSVhfU09VUkNFIikKKwkgZmkKKwkgQ0ZfTVNHX0xPRyhpZmRlZiBmcm9tIHZhbHVlICRjZl9QT1NJWF9DX1NPVVJDRSkKKwkgQ0ZMQUdTPSIkY2ZfdHJpbV9DRkxBR1MiCisJIENQUEZMQUdTPSIkY2ZfdHJpbV9DUFBGTEFHUyAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiCisJIENGX01TR19MT0coaWYgdGhlIHNlY29uZCBjb21waWxlIGRvZXMgbm90IGxlYXZlIG91ciBkZWZpbml0aW9uIGludGFjdCBlcnJvcikKKwkgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLCwKKwkgW2NmX2N2X3Bvc2l4X2Nfc291cmNlPW5vXSkKKwkgQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKwldKQorXSkKKworaWYgdGVzdCAiJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiAhPSBubyA7IHRoZW4KKwlDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwlDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MiCisJaWYgdGVzdCAiJGNmX2N2X2NjX3VfZF9vcHRpb25zIiA9IHllcyA7IHRoZW4KKwkJY2ZfdGVtcF9wb3NpeF9jX3NvdXJjZT1gZWNobyAiJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiB8IFwKKwkJCQlzZWQgLWUgJ3MvLUQvLVUvZycgLWUgJ3MvPVtbXiAJXV0qLy9nJ2AKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfdGVtcF9wb3NpeF9jX3NvdXJjZSIKKwlmaQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorZmkKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUkVERUZJTkUgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDAzLzA3LzI2IDE3OjUzOjU2CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQWRkIGRlZmluaXRpb25zIHRvIENQUEZMQUdTIHRvIGVuc3VyZSB0aGV5J3JlIHByZWRlZmluZWQgZm9yIGFsbCBjb21waWxlcy4KK2RubAorZG5sICQxID0gc3ltYm9sIHRvIHRlc3QKK2RubCAkMiA9IHZhbHVlIChpZiBhbnkpIHRvIHVzZSBmb3IgYSBwcmVkZWZpbml0aW9uCitBQ19ERUZVTihbQ0ZfUFJFREVGSU5FXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiB3ZSBtdXN0IGRlZmluZSAkMSkKK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitdLFsKKyNpZm5kZWYgJDEKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sW2NmX3Jlc3VsdD1ub10sW2NmX3Jlc3VsdD15ZXNdKQorQUNfTVNHX1JFU1VMVCgkY2ZfcmVzdWx0KQorCitpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IHllcyA7IHRoZW4KKwlDUFBGTEFHUz0iJENQUEZMQUdTIGlmZWxzZSgkMiwsLUQkMSxbLUQkMT0kMl0pIgorZWxpZiB0ZXN0ICJ4JDIiICE9ICJ4IiA7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoY2hlY2tpbmcgZm9yIGNvbXBhdGlibGUgdmFsdWUgdmVyc3VzICQyKQorCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitdLFsKKyNpZiAkMS0kMiA8IDAKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sW2NmX3Jlc3VsdD15ZXNdLFtjZl9yZXN1bHQ9bm9dKQorCUFDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKKwlpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IG5vIDsgdGhlbgorCQkjIHBlcmhhcHMgd2UgY2FuIG92ZXJyaWRlIGl0IC0gdHJ5Li4uCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUQkMT0kMiIKKwlmaQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJHX1JVTEVTIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8wNi8wMyAxMTo0NTowOAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIEFwcGVuZCBkZWZpbml0aW9ucyBhbmQgcnVsZXMgZm9yIHRoZSBnaXZlbiBwcm9ncmFtcyB0byB0aGUgc3ViZGlyZWN0b3J5CitkbmwgTWFrZWZpbGVzLCBhbmQgdGhlIHJlY3Vyc2lvbiBydWxlIGZvciB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgorZG5sCitkbmwgcGFyYW1ldGVycworZG5sCSQxID0gc2NyaXB0IHRvIHJ1bgorZG5sCSQyID0gbGlzdCBvZiBzdWJkaXJlY3RvcmllcworZG5sCitkbmwgdmFyaWFibGVzCitkbmwJJEFXSworQUNfREVGVU4oW0NGX1BSR19SVUxFU10sCitbCitmb3IgY2ZfZGlyIGluICQyCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXI7IHRoZW4KKwkJY29udGludWUKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zOyB0aGVuCisJCSRBV0sgLWYgJDEgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zID4+JGNmX2Rpci9NYWtlZmlsZQorCWZpCitkb25lCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19BV0sgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA2LzA5LzE2IDExOjQwOjU5CitkbmwgLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgYXdrLCBlbnN1cmUgdGhhdCB0aGUgY2hlY2sgZm91bmQgc29tZXRoaW5nLgorQUNfREVGVU4oW0NGX1BST0dfQVdLXSwKK1sKK0FDX1BST0dfQVdLCit0ZXN0IC16ICIkQVdLIiAmJiBBQ19NU0dfRVJST1IoTm8gYXdrIHByb2dyYW0gZm91bmQpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfQ0NfQ19PIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNi8xMi8xNiAxNTo1NTo0NgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQW5hbG9nb3VzIHRvIEFDX1BST0dfQ0NfQ19PLCBidXQgbW9yZSB1c2VmdWw6IHRlc3RzIG9ubHkgJENDLCBlbnN1cmVzIHRoYXQKK2RubCB0aGUgb3V0cHV0IGZpbGUgY2FuIGJlIHJlbmFtZWQsIGFuZCBhbGxvd3MgZm9yIGEgc2hlbGwgdmFyaWFibGUgdGhhdCBjYW4KK2RubCBiZSB1c2VkIGxhdGVyLiAgVGhlIHBhcmFtZXRlciBpcyBlaXRoZXIgQ0Mgb3IgQ1hYLiAgVGhlIHJlc3VsdCBpcyB0aGUKK2RubCBjYWNoZSB2YXJpYWJsZToKK2RubAkkY2ZfY3ZfcHJvZ19DQ19jX28KK2RubAkkY2ZfY3ZfcHJvZ19DWFhfY19vCitBQ19ERUZVTihbQ0ZfUFJPR19DQ19DX09dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFskXSQxIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlcl0pCitBQ19DQUNIRV9WQUwoY2ZfY3ZfcHJvZ18kMV9jX28sCitbCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorQ0ZfRU9GCisjIFdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbgorIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KK2FjX3RyeT0nWyRdJDEgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JkFDX0ZEX0NDJworaWYgQUNfVFJZX0VWQUwoYWNfdHJ5KSAmJgorICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIEFDX1RSWV9FVkFMKGFjX3RyeSk7Cit0aGVuCisgIGV2YWwgY2ZfY3ZfcHJvZ18kMV9jX289eWVzCitlbHNlCisgIGV2YWwgY2ZfY3ZfcHJvZ18kMV9jX289bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK10pZG5sCitpZiB0ZXN0ICRjZl9jdl9wcm9nXyQxX2NfbyA9IHllczsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKFtub10pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0NDX1VfRCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDUvMDcvMTQgMTY6NTk6MzAKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIEMgKHByZXByb2Nlc3NvcikgLVUgYW5kIC1EIG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIKK2RubCBnaXZlbiByYXRoZXIgdGhhbiBieSB0eXBlIG9mIG9wdGlvbi4gIFNvbWUgY29tcGlsZXJzIGluc2lzdCBvbiBhcHBseSBhbGwKK2RubCBvZiB0aGUgLVUgb3B0aW9ucyBhZnRlciBhbGwgb2YgdGhlIC1EIG9wdGlvbnMuICBPdGhlcnMgYWxsb3cgbWl4aW5nIHRoZW0sCitkbmwgYW5kIG1heSBwcmVkZWZpbmUgc3ltYm9scyB0aGF0IGNvbmZsaWN0IHdpdGggdGhvc2Ugd2UgZGVmaW5lLgorQUNfREVGVU4oW0NGX1BST0dfQ0NfVV9EXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmICRDQyAtVSBhbmQgLUQgb3B0aW9ucyB3b3JrIHRvZ2V0aGVyLGNmX2N2X2NjX3VfZF9vcHRpb25zLFsKKwljZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisJQ1BQRkxBR1M9Ii1VVV9EX09QVElPTlMgLURVX0RfT1BUSU9OUyAtRERfVV9PUFRJT05TIC1VRF9VX09QVElPTlMiCisJQUNfVFJZX0NPTVBJTEUoW10sWworI2lmbmRlZiBVX0RfT1BUSU9OUworbWFrZSBhbiB1bmRlZmluZWQtZXJyb3IKKyNlbmRpZgorI2lmZGVmICBEX1VfT1BUSU9OUworbWFrZSBhIGRlZmluZWQtZXJyb3IKKyNlbmRpZgorCV0sWworCWNmX2N2X2NjX3VfZF9vcHRpb25zPXllc10sWworCWNmX2N2X2NjX3VfZF9vcHRpb25zPW5vXSkKKwlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0VHUkVQIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8wOS8xNiAxMTo0MDo1OQorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBBQ19QUk9HX0VHUkVQIHdhcyBpbnRyb2R1Y2VkIGluIGF1dG9jb25mIDIuNTMuCitkbmwgVGhpcyBtYWNybyBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzY3JpcHQgZm91bmQgc29tZXRoaW5nLgorQUNfREVGVU4oW0NGX1BST0dfRUdSRVBdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgZWdyZXBdLCBbYWNfY3ZfcHJvZ19lZ3JlcF0sCisgICBbaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJworICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCisgICAgZmldKQorIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCisgQUNfU1VCU1QoW0VHUkVQXSkKK3Rlc3QgLXogIiRFR1JFUCIgJiYgQUNfTVNHX0VSUk9SKE5vIGVncmVwIHByb2dyYW0gZm91bmQpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfRVhUIHZlcnNpb246IDEwIHVwZGF0ZWQ6IDIwMDQvMDEvMDMgMTk6Mjg6MTgKK2RubCAtLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgJFBST0dfRVhULCB1c2VkIGZvciBub24tVW5peCBwb3J0cywgc3VjaCBhcyBPUy8yIEVNWC4KK0FDX0RFRlVOKFtDRl9QUk9HX0VYVF0sCitbCitBQ19SRVFVSVJFKFtDRl9DSEVDS19DQUNIRV0pCitjYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorb3MyKikKKyAgICBDRkxBR1M9IiRDRkxBR1MgLVptdCIKKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX19TVF9NVF9FUlJOT19fIgorICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLVptdCIKKyAgICAjIGF1dG9jb25mJ3MgbWFjcm8gc2V0cyAtWmV4ZSBhbmQgc3VmZml4IGJvdGgsIHdoaWNoIGNvbmZsaWN0OncKKyAgICBMREZMQUdTPSIkTERGTEFHUyAtWm10IC1aY3J0ZGxsIgorICAgIGFjX2N2X2V4ZWV4dD0uZXhlCisgICAgOzsKK2VzYWMKKworQUNfRVhFRVhUCitBQ19PQkpFWFQKKworUFJPR19FWFQ9IiRFWEVFWFQiCitBQ19TVUJTVChQUk9HX0VYVCkKK3Rlc3QgLW4gIiRQUk9HX0VYVCIgJiYgQUNfREVGSU5FX1VOUVVPVEVEKFBST0dfRVhULCIkUFJPR19FWFQiKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0lOU1RBTEwgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDAyLzEyLzIxIDIyOjQ2OjA3CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgRm9yY2UgJElOU1RBTEwgdG8gYmUgYW4gYWJzb2x1dGUtcGF0aC4gIE90aGVyd2lzZSwgZWRpdF9tYW4uc2ggYW5kIHRoZQorZG5sIG1pc2MvdGFic2V0IGluc3RhbGwgd29uJ3Qgd29yayBwcm9wZXJseS4gIFVzdWFsbHkgdGhpcyBoYXBwZW5zIG9ubHkgd2hlbgorZG5sIHVzaW5nIHRoZSBmYWxsYmFjayBta2luc3RhbGxkaXJzIHNjcmlwdAorQUNfREVGVU4oW0NGX1BST0dfSU5TVEFMTF0sCitbQUNfUFJPR19JTlNUQUxMCitjYXNlICRJTlNUQUxMIGluCisvKikKKyAgOzsKKyopCisgIENGX0RJUk5BTUUoY2ZfZGlyLCRJTlNUQUxMKQorICB0ZXN0IC16ICIkY2ZfZGlyIiAmJiBjZl9kaXI9LgorICBJTlNUQUxMPWBjZCAkY2ZfZGlyICYmIHB3ZGAvYGVjaG8gJElOU1RBTEwgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19MRENPTkZJRyB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDMvMDkvMjAgMTc6MDc6NTUKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGxkY29uZmlnLCBuZWVkZWQgdG8gZml4dXAgc2hhcmVkIGxpYnJhcmllcyB0aGF0IHdvdWxkIGJlIGJ1aWx0CitkbmwgYW5kIHRoZW4gdXNlZCBpbiB0aGUgaW5zdGFsbC4KK0FDX0RFRlVOKFtDRl9QUk9HX0xEQ09ORklHXSxbCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKyAgTERDT05GSUc9OgorZWxzZQorY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbiAjKHZpCitmcmVlYnNkKikgIyh2aQorICB0ZXN0IC16ICIkTERDT05GSUciICYmIExEQ09ORklHPSIvc2Jpbi9sZGNvbmZpZyAtUiIKKyAgOzsKKyopIExEUEFUSD0kUEFUSDovc2JpbjovdXNyL3NiaW4KKyAgQUNfUEFUSF9QUk9HKExEQ09ORklHLGxkY29uZmlnLCwkTERQQVRIKQorICA7OworZXNhYworZmkKK0FDX1NVQlNUKExEQ09ORklHKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0xJTlQgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA2LzA5LzE2IDExOjQwOjU5CitkbmwgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQ0ZfUFJPR19MSU5UXSwKK1sKK0FDX0NIRUNLX1BST0dTKExJTlQsIHRkbGludCBsaW50IGFsaW50KQorQUNfU1VCU1QoTElOVF9PUFRTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9SRUdFWCB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDE5OTcvMTEvMDEgMTQ6MjY6MDEKK2RubCAtLS0tLS0tLQorZG5sIEF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHdlJ3ZlIGdvdCBvbmUgb2YgdGhlIGZsYXZvcnMgb2YgcmVndWxhci1leHByZXNzaW9uCitkbmwgY29kZSB0aGF0IHdlIGNhbiBzdXBwb3J0LgorQUNfREVGVU4oW0NGX1JFR0VYXSwKK1sKK0FDX01TR19DSEVDS0lORyhbZm9yIHJlZ3VsYXItZXhwcmVzc2lvbiBoZWFkZXJzXSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9yZWdleCxbCitBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+XSxbCisJcmVnZXhfdCAqcDsKKwlpbnQgeCA9IHJlZ2NvbXAocCwgIiIsIDApOworCWludCB5ID0gcmVnZXhlYyhwLCAiIiwgMCwgMCwgMCk7CisJcmVnZnJlZShwKTsKKwldLFtjZl9jdl9yZWdleD0icmVnZXguaCJdLFsKKwlBQ19UUllfTElOSyhbI2luY2x1ZGUgPHJlZ2V4cC5oPl0sWworCQljaGFyICpwID0gY29tcGlsZSgiIiwgIiIsICIiLCAwKTsKKwkJaW50IHggPSBzdGVwKCIiLCAiIik7CisJXSxbY2ZfY3ZfcmVnZXg9InJlZ2V4cC5oIl0sWworCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCQlMSUJTPSItbGdlbiAkTElCUyIKKwkJQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxyZWdleHByLmg+XSxbCisJCQljaGFyICpwID0gY29tcGlsZSgiIiwgIiIsICIiKTsKKwkJCWludCB4ID0gc3RlcCgiIiwgIiIpOworCQldLFtjZl9jdl9yZWdleD0icmVnZXhwci5oIl0sW0xJQlM9IiRjZl9zYXZlX0xJQlMiXSldKV0pCitdKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfcmVnZXgpCitjYXNlICRjZl9jdl9yZWdleCBpbgorCXJlZ2V4LmgpICAgQUNfREVGSU5FKEhBVkVfUkVHRVhfSF9GVU5DUykgOzsKKwlyZWdleHAuaCkgIEFDX0RFRklORShIQVZFX1JFR0VYUF9IX0ZVTkNTKSA7OworCXJlZ2V4cHIuaCkgQUNfREVGSU5FKEhBVkVfUkVHRVhQUl9IX0ZVTkNTKSA7OworZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9SRU1PVkVfREVGSU5FIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNS8wNy8wOSAxNjoxMjoxOAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBSZW1vdmUgYWxsIC1VIGFuZCAtRCBvcHRpb25zIHRoYXQgcmVmZXIgdG8gdGhlIGdpdmVuIHN5bWJvbCBmcm9tIGEgbGlzdAorZG5sIG9mIEMgY29tcGlsZXIgb3B0aW9ucy4gIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBwcm9ibGVtIHRoYXQgbm90IGFsbAorZG5sIGNvbXBpbGVycyBwcm9jZXNzIC1VIGFuZCAtRCBvcHRpb25zIGZyb20gbGVmdC10by1yaWdodCwgc28gYSAtVSBvcHRpb24KK2RubCBjYW5ub3QgYmUgdXNlZCB0byBjYW5jZWwgdGhlIGVmZmVjdCBvZiBhIHByZWNlZGluZyAtRCBvcHRpb24uCitkbmwKK2RubCAkMSA9IHRhcmdldCAod2hpY2ggY291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHNvdXJjZSB2YXJpYWJsZSkKK2RubCAkMiA9IHNvdXJjZSAoaW5jbHVkaW5nICckJykKK2RubCAkMyA9IHN5bWJvbCB0byByZW1vdmUKK2RlZmluZShbQ0ZfUkVNT1ZFX0RFRklORV0sCitbCisjIHJlbW92ZSAkMyBzeW1ib2wgZnJvbSAkMgorJDE9YGVjaG8gIiQyIiB8IFwKKwlzZWQJLWUgJ3MvLVtbVURdXSQzXCg9W1teIAldXSpcKVw/W1sgCV1dLyAvZycgXAorCQktZSAncy8tW1tVRF1dJDNcKD1bW14gCV1dKlwpXD9bJF0vL2cnYAorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9SRU1PVkVfTElCIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNy8wMi8xNyAxNDoxMTo1MgorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBSZW1vdmUgdGhlIGdpdmVuIGxpYnJhcnkgZnJvbSB0aGUgc3ltYm9sCitkbmwKK2RubCAkMSA9IHRhcmdldCAod2hpY2ggY291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHNvdXJjZSB2YXJpYWJsZSkKK2RubCAkMiA9IHNvdXJjZSAoaW5jbHVkaW5nICckJykKK2RubCAkMyA9IGxpYnJhcnkgdG8gcmVtb3ZlCitkZWZpbmUoW0NGX1JFTU9WRV9MSUJdLAorWworIyByZW1vdmUgJDMgbGlicmFyeSBmcm9tICQyCiskMT1gZWNobyAiJDIiIHwgc2VkIC1lICdzLy1sJDNbWyAJXV0vL2cnIC1lICdzLy1sJDNbJF0vLydgCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1JQQVRIX0hBQ0sgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA4LzA5LzEzIDEyOjUzOjI2CitkbmwgLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0NGX1JQQVRIX0hBQ0tdLAorWworQUNfUkVRVUlSRShbQ0ZfU0hBUkVEX09QVFNdKQorQUNfTVNHX0NIRUNLSU5HKGZvciB1cGRhdGVkIExERkxBR1MpCitpZiB0ZXN0IC1uICIkTERGTEFHUyIgOyB0aGVuCitBQ19NU0dfUkVTVUxUKG1heWJlKQorQ0ZfVkVSQk9TRSguLi5jaGVja2luZyBMREZMQUdTICRMREZMQUdTKQorQ0ZfVkVSQk9TRSguLi5jaGVja2luZyBFWFRSQV9MREZMQUdTICRFWFRSQV9MREZMQUdTKQorY2FzZSAiJEVYVFJBX0xERkxBR1MiIGluICModmkKKy1XbCwtcnBhdGgsKikgIyh2aQorCWNmX3JwYXRoX2hhY2s9Ii1XbCwtcnBhdGgsIgorCTs7CistUlwgKikKKwljZl9ycGF0aF9oYWNrPSItUiAiCisJOzsKKy1SKikKKwljZl9ycGF0aF9oYWNrPSItUiIKKwk7OworKikKKwljZl9ycGF0aF9oYWNrPQorCTs7Citlc2FjCitpZiB0ZXN0IC1uICIkY2ZfcnBhdGhfaGFjayIgOyB0aGVuCisJY2ZfcnBhdGhfZHN0PQorCWZvciBjZl9ycGF0aF9zcmMgaW4gJExERkxBR1MKKwlkbworCQlDRl9WRVJCT1NFKEZpbHRlcmluZyAkY2ZfcnBhdGhfc3JjKQorCQljYXNlICRjZl9ycGF0aF9zcmMgaW4gIyh2aQorCQktTCopICModmkKKwkJCWlmIHRlc3QgIiRjZl9ycGF0aF9oYWNrIiA9ICItUiAiIDsgdGhlbgorCQkJCWNmX3JwYXRoX3RtcD1gZWNobyAiJGNmX3JwYXRoX3NyYyIgfHNlZCAtZSAncyUtTCUtUiAlJ2AKKwkJCWVsc2UKKwkJCQljZl9ycGF0aF90bXA9YGVjaG8gIiRjZl9ycGF0aF9zcmMiIHxzZWQgLWUgcyUtTCUkY2ZfcnBhdGhfaGFjayVgCisJCQlmaQorCQkJQ0ZfVkVSQk9TRSguLi5GaWx0ZXIgJGNmX3JwYXRoX3RtcCkKKwkJCUVYVFJBX0xERkxBR1M9IiRjZl9ycGF0aF90bXAgJEVYVFJBX0xERkxBR1MiCisJCQk7OworCQllc2FjCisJCWNmX3JwYXRoX2RzdD0iJGNmX3JwYXRoX2RzdCAkY2ZfcnBhdGhfc3JjIgorCWRvbmUKKwlMREZMQUdTPSRjZl9ycGF0aF9kc3QKKwlDRl9WRVJCT1NFKC4uLmNoZWNrZWQgTERGTEFHUyAkTERGTEFHUykKKwlDRl9WRVJCT1NFKC4uLmNoZWNrZWQgRVhUUkFfTERGTEFHUyAkRVhUUkFfTERGTEFHUykKK2ZpCitlbHNlCitBQ19NU0dfUkVTVUxUKG5vKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU0hBUkVEX09QVFMgdmVyc2lvbjogNTMgdXBkYXRlZDogMjAwOC8xMC8yNSAxODoxNDoyMAorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBBdHRlbXB0IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgQ0MvTEQgb3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBzaGFyZWQKK2RubCBsaWJyYXJ5LgorZG5sCitkbmwgTm90ZTogJHtMT0NBTF9MREZMQUdTfSBpcyB1c2VkIHRvIGxpbmsgZXhlY3V0YWJsZXMgdGhhdCB3aWxsIHJ1biB3aXRoaW4gdGhlCitkbmwgYnVpbGQtdHJlZSwgaS5lLiwgYnkgbWFraW5nIHVzZSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgYXJlIGNvbXBpbGVkIGluIC4uL2xpYgorZG5sIFdlIGF2b2lkIGNvbXBpbGluZy1pbiBhIC4uL2xpYiBwYXRoIGZvciB0aGUgc2hhcmVkIGxpYnJhcnkgc2luY2UgdGhhdCBjYW4KK2RubCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cyBhdCBydW50aW1lLgorZG5sICR7TE9DQUxfTERGTEFHUzJ9IGhhcyB0aGUgc2FtZSBpbnRlbnRpb24gYnV0IGFzc3VtZXMgdGhhdCB0aGUgc2hhcmVkIGxpYnJhcmllcworZG5sIGFyZSBjb21waWxlZCBpbiAuLi8uLi9saWIKK2RubAorZG5sIFRoZSB2YXJpYWJsZSAnY2ZfY3ZfZG9fc3ltbGlua3MnIGlzIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHdlIGNvbmZpZ3VyZQorZG5sIHRvIGluc3RhbGwgc3ltYm9saWMgbGlua3MgdG8gdGhlIHJlbC9hYmkgdmVyc2lvbnMgb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2RubAorZG5sIFRoZSB2YXJpYWJsZSAnY2ZfY3Zfc2hsaWJfdmVyc2lvbicgY29udHJvbHMgd2hldGhlciB3ZSB1c2UgdGhlIHJlbCBvciBhYmkKK2RubCB2ZXJzaW9uIHdoZW4gbWFraW5nIHN5bWJvbGljIGxpbmtzLgorZG5sCitkbmwgVGhlIHZhcmlhYmxlICdjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4JyBjb250cm9scyB3aGV0aGVyIHNoYXJlZCBsaWJyYXJ5CitkbmwgdmVyc2lvbiBudW1iZXJzIGFyZSBpbmZpeCAoZXg6IGxpYm5jdXJzZXMuPHZlcj4uZHlsaWIpIG9yIHBvc3RmaXgKK2RubCAoZXg6IGxpYm5jdXJzZXMuc28uPHZlcj4pLgorZG5sCitkbmwgU29tZSBsb2FkZXJzIGxlYXZlICdzb19sb2NhdGlvbnMnIGx5aW5nIGFyb3VuZC4gIEl0J3MgbmljZSB0byBjbGVhbiB1cC4KK0FDX0RFRlVOKFtDRl9TSEFSRURfT1BUU10sCitbCisJQUNfUkVRVUlSRShbQ0ZfU1VCU1RfTkNVUlNFU19WRVJTSU9OXSkKKwlMT0NBTF9MREZMQUdTPQorCUxPQ0FMX0xERkxBR1MyPQorCUxEX1NIQVJFRF9PUFRTPQorCUlOU1RBTExfTElCPSItbSA2NDQiCisKKwljZl9jdl9kb19zeW1saW5rcz1ubworCisJQUNfTVNHX0NIRUNLSU5HKGlmIHJlbGVhc2UvYWJpIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgZm9yIHNoYXJlZCBsaWJzKQorCUFDX0FSR19XSVRIKHNobGliLXZlcnNpb24sCisJWyAgLS13aXRoLXNobGliLXZlcnNpb249WCAgU3BlY2lmeSByZWwgb3IgYWJpIHZlcnNpb24gZm9yIHNoYXJlZCBsaWJzXSwKKwlbdGVzdCAteiAiJHdpdGh2YWwiICYmIHdpdGh2YWw9YXV0bworCWNhc2UgJHdpdGh2YWwgaW4gIyh2aQorCXllcykgIyh2aQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPWF1dG8KKwkJOzsKKwlyZWx8YWJpfGF1dG98bm8pICModmkKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj0kd2l0aHZhbAorCQk7OworCSopCisJCUFDX01TR19FUlJPUihbb3B0aW9uIHZhbHVlIG11c3QgYmUgb25lIG9mOiByZWwsIGFiaSwgYXV0byBvciBub10pCisJCTs7CisJZXNhYworCV0sW2NmX2N2X3NobGliX3ZlcnNpb249YXV0b10pCisJQUNfTVNHX1JFU1VMVCgkY2ZfY3Zfc2hsaWJfdmVyc2lvbikKKworCWNmX2N2X3JtX3NvX2xvY3M9bm8KKworCSMgU29tZSBsZXNzLWNhcGFibGUgcG9ydHMgb2YgZ2NjIHN1cHBvcnQgb25seSAtZnBpYworCUNDX1NIQVJFRF9PUFRTPQorCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJdGhlbgorCQlBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggJENDIG9wdGlvbiB0byB1c2UpCisJCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCQlmb3IgQ0NfU0hBUkVEX09QVFMgaW4gLWZQSUMgLWZwaWMgJycKKwkJZG8KKwkJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTICRDQ19TSEFSRURfT1BUUyIKKwkJCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkaW8uaD5dLFtpbnQgeCA9IDFdLFticmVha10sW10pCisJCWRvbmUKKwkJQUNfTVNHX1JFU1VMVCgkQ0NfU0hBUkVEX09QVFMpCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCWZpCisKKwljZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PW5vCisKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCWJlb3MqKQorCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLW8gJFtAXSAtWGxpbmtlciAtc29uYW1lPWBiYXNlbmFtZSAkW0BdYCAtbm9zdGFydCAtZSAwJworCQk7OworCWN5Z3dpbiopCisJCUNDX1NIQVJFRF9PUFRTPQorCQlNS19TSEFSRURfTElCPSdzaCAuLi9ta19zaGFyZWRfbGliLnNoIFskXUAgWyRde0NDfSBbJF17Q0ZMQUdTfScKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1jeWdkbGwKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD1jeWdkbGwKKwkJY2F0ID5ta19zaGFyZWRfbGliLnNoIDw8LUNGX0VPRgorCQkjIS9iaW4vc2gKKwkJU0hBUkVEX0xJQj1cWyRdMQorCQlJTVBPUlRfTElCPVxgZWNobyAiXFskXTEiIHwgc2VkIC1lICdzL2N5Zy9saWIvJyAtZSAncy9bWzAtOV1dKlwuZGxsWyRdLy5kbGwuYS8nXGAKKwkJc2hpZnQKKwkJY2F0IDw8LUVPRgorCQlMaW5raW5nIHNoYXJlZCBsaWJyYXJ5CisJCSoqIFNIQVJFRF9MSUIgXFskXVNIQVJFRF9MSUIKKwkJKiogSU1QT1JUX0xJQiBcWyRdSU1QT1JUX0xJQgorRU9GCisJCWV4ZWMgXFskXSogLXNoYXJlZCAtV2wsLS1vdXQtaW1wbGliPS4uL2xpYi9cWyRde0lNUE9SVF9MSUJ9IC1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyAtbyAuLi9saWIvXFskXXtTSEFSRURfTElCfQorQ0ZfRU9GCisJCWNobW9kICt4IG1rX3NoYXJlZF9saWIuc2ggCisJCTs7CisJZGFyd2luKikKKwkJRVhUUkFfQ0ZMQUdTPSItbm8tY3BwLXByZWNvbXAiCisJCUNDX1NIQVJFRF9PUFRTPSItZHluYW1pYyIKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJHtsaWJkaXJ9L2BiYXNlbmFtZSAkW0BdYCAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7QUJJX1ZFUlNJT059IC1jdXJyZW50X3ZlcnNpb24gJHtBQklfVkVSU0lPTn0gLW8gJFtAXScKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPWFiaQorCQljZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PXllcworCQlBQ19DQUNIRV9DSEVDSyhbaWYgbGQgLXNlYXJjaF9wYXRoc19maXJzdCB3b3Jrc10sIGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0LCBbCisJCQljZl9zYXZlX0xERkxBR1M9JExERkxBR1MKKwkJCUxERkxBR1M9IiRMREZMQUdTIC1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0IgorCQkJQUNfVFJZX0xJTksoLCBbaW50IGk7XSwgY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3Q9eWVzLCBjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdD1ubykKKwkJCQlMREZMQUdTPSRjZl9zYXZlX0xERkxBR1NdKQorCQlpZiB0ZXN0ICRjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdCA9IHllczsgdGhlbgorCQkJTERGTEFHUz0iJExERkxBR1MgLVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QiCisJCWZpCisJCTs7CisJaHB1eCopCisJCSMgKHRlc3RlZCB3aXRoIGdjYyAyLjcuMiAtLSBJIGRvbid0IGhhdmUgYzg5KQorCQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCQkJTERfU0hBUkVEX09QVFM9Jy1YbGlua2VyICtiIC1YbGlua2VyICR7bGliZGlyfScKKwkJZWxzZQorCQkJQ0NfU0hBUkVEX09QVFM9JytaJworCQkJTERfU0hBUkVEX09QVFM9Jy1XbCwrYiwke2xpYmRpcn0nCisJCWZpCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9ICtiICR7bGliZGlyfSAtYiAtbyAkW0BdJworCQkjIEhQLVVYIHNoYXJlZCBsaWJyYXJpZXMgbXVzdCBiZSBleGVjdXRhYmxlLCBhbmQgc2hvdWxkIGJlCisJCSMgcmVhZG9ubHkgdG8gZXhwbG9pdCBhIHF1aXJrIGluIHRoZSBtZW1vcnkgbWFuYWdlci4KKwkJSU5TVEFMTF9MSUI9Ii1tIDU1NSIKKwkJOzsKKwlpcml4KikKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJCQkJY2ZfbGRfcnBhdGhfb3B0PSItV2wsLXJwYXRoLCIKKwkJCQlFWFRSQV9MREZMQUdTPSItV2wsLXJwYXRoLFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCQllbHNlCisJCQkJY2ZfbGRfcnBhdGhfb3B0PSItcnBhdGggIgorCQkJCUVYVFJBX0xERkxBR1M9Ii1ycGF0aCBcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQkJZmkKKwkJZmkKKwkJIyB0ZXN0ZWQgd2l0aCBJUklYIDUuMiBhbmQgJ2NjJy4KKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLUtQSUMnCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1yZGF0YV9zaGFyZWQgLXNvbmFtZSBgYmFzZW5hbWUgJFtAXWAgLW8gJFtAXScKKwkJZWxzZQorCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLXNoYXJlZCAtV2wsLXNvbmFtZSxgYmFzZW5hbWUgJFtAXWAgLW8gJFtAXScKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwlsaW51eCp8Z251KnxrKmJzZCotZ251KQorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLVdsLC1ycGF0aCwiCisJCQlFWFRSQV9MREZMQUdTPSItV2wsLXJwYXRoLFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCWZpCisJCUNGX1NIQVJFRF9TT05BTUUKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1zaGFyZWQgLVdsLC1zb25hbWUsJyRjZl9jdl9zaGFyZWRfc29uYW1lJywtc3RhdHMsLWxjIC1vICRbQF0nCisJCTs7CisJb3BlbmJzZFtbMi05XV0uKikKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItV2wsLXJwYXRoLFwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1XbCwtcnBhdGgsIgorCQkJRVhUUkFfTERGTEFHUz0iLVdsLC1ycGF0aCxcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQlDRl9TSEFSRURfU09OQU1FCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtV2wsLUJzaGFyZWFibGUsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJFtAXScKKwkJOzsKKwludG8tcW54KnxvcGVuYnNkKnxmcmVlYnNkW1sxMl1dLiopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1Cc2hhcmVhYmxlIC1vICRbQF0nCisJCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwkJOzsKKwlmcmVlYnNkKikKKwkJQ0NfU0hBUkVEX09QVFM9IiRDQ19TSEFSRURfT1BUUyAtRFBJQyIKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgJiYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1ycGF0aCBcJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9Ii1ycGF0aCBcJHtsaWJkaXJ9ICRMT0NBTF9MREZMQUdTIgorCQkJY2ZfbGRfcnBhdGhfb3B0PSItcnBhdGggIgorCQkJRVhUUkFfTERGTEFHUz0iLXJwYXRoIFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCWZpCisJCUNGX1NIQVJFRF9TT05BTUUKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLUJzaGFyZWFibGUgLXNvbmFtZT1gYmFzZW5hbWUgJFtAXWAgLW8gJFtAXScKKwkJOzsKKwluZXRic2QqKQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQl0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzICYmIGNmX2xkX3JwYXRoX29wdD0iLVdsLC1ycGF0aCwiCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiICYmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItV2wsLXJwYXRoLFwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCQlFWFRSQV9MREZMQUdTPSItV2wsLXJwYXRoLFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCQlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvOyB0aGVuCisJCQlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5lbGZfc287IHRoZW4KKwkJCQljZl9jdl9zaGxpYl92ZXJzaW9uPWFiaQorCQkJZWxzZQorCQkJCWNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCQlmaQorCQkJZmkKKwkJCUNGX1NIQVJFRF9TT05BTUUKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtc2hhcmVkIC1XbCwtc29uYW1lLCckY2ZfY3Zfc2hhcmVkX3NvbmFtZScgLW8gJFtAXScKKwkJZWxzZQorCQkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLUJzaGFyZWFibGUgLW8gJFtAXScKKwkJZmkKKwkJOzsKKwlvc2YqfG1scysqKQorCQkjIHRlc3RlZCB3aXRoIE9TRi8xIFYzLjIgYW5kICdjYycKKwkJIyB0ZXN0ZWQgd2l0aCBPU0YvMSBWMy4yIGFuZCBnY2MgMi42LjMgKGJ1dCB0aGUgYysrIGRlbW8gZGlkbid0CisJCSMgbGluayB3aXRoIHNoYXJlZCBsaWJzKS4KKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLXNldF92ZXJzaW9uICR7UkVMX1ZFUlNJT059OiR7QUJJX1ZFUlNJT059IC1leHBlY3RfdW5yZXNvbHZlZCAiKiIgLXNoYXJlZCAtc29uYW1lIGBiYXNlbmFtZSAkW0BdYCcKKwkJY2FzZSAkaG9zdF9vcyBpbgorCQlvc2Y0KikKKwkJCU1LX1NIQVJFRF9MSUI9IiR7TUtfU0hBUkVEX0xJQn0gLW1zeW0iCisJCQk7OworCQllc2FjCisJCU1LX1NIQVJFRF9MSUI9IiR7TUtfU0hBUkVEX0xJQn0iJyAtbyAkW0BdJworCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLXJwYXRoIgorCQkJIyBFWFRSQV9MREZMQUdTPSIkTE9DQUxfTERGTEFHUyAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwlzY28zLjJ2NSopICAjIChhbHNvIHV3MiogYW5kIFVXNykgaG9wcyAxMy1BcHItOTgKKwkJIyB0ZXN0ZWQgd2l0aCBvc3I1LjAuNQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctYmVsZiAtS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWR5IC1HIC1oIGBiYXNlbmFtZSAkW0BdIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0gLW8gWyRdQCcKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCSMgb25seSB3YXkgaXMgdG8gc2V0IExEX1JVTl9QQVRIIGJ1dCBubyBzd2l0Y2ggZm9yIGl0CisJCQlSVU5fUEFUSD0kbGliZGlyCisJCWZpCisJCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwkJTElOS19QUk9HUz0nTERfUlVOX1BBVEg9JHtsaWJkaXJ9JworCQlMSU5LX1RFU1RTPSdQd2Q9YHB3ZGA7TERfUlVOX1BBVEg9YGRpcm5hbWUgJCR7UHdkfWAvbGliJworCQk7OworCXN1bm9zNCopCisJCSMgdGVzdGVkIHdpdGggU3VuT1MgNC4xLjEgYW5kIGdjYyAyLjcuMAorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWFzc2VydCBwdXJlLXRleHQgLW8gJFtAXScKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQk7OworCXNvbGFyaXMyKikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA1LjUuMSAoc29sYXJpcyAyLjUuMSkgYW5kIGdjYyAyLjcuMgorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDUuMTAgKHNvbGFyaXMgMTApIGFuZCBnY2MgMy40LjMKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItUiBcJChMT0NBTF9MSUJESVIpOlwke2xpYmRpcn0iCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1SIgorCQkJRVhUUkFfTERGTEFHUz0iJExPQ0FMX0xERkxBR1MgJEVYVFJBX0xERkxBR1MiCisJCWZpCisJCUNGX1NIQVJFRF9TT05BTUUKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLXhjb2RlPXBpYzMyJworCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLWR5IC1HIC1oICckY2ZfY3Zfc2hhcmVkX3NvbmFtZScgLW8gJFtAXScKKwkJZWxzZQorCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLXNoYXJlZCAtZHkgLUcgLWggJyRjZl9jdl9zaGFyZWRfc29uYW1lJyAtbyAkW0BdJworCQlmaQorCQk7OworCXN5c3Y1dXc3Knx1bml4X3N2KikKKwkJIyB0ZXN0ZWQgd2l0aCBVbml4V2FyZSA3LjEuMCAoZ2NjIDIuOTUuMiBhbmQgY2MpCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtZCB5IC1HIC1vIFskXUAnCisJCTs7CisJKikKKwkJQ0NfU0hBUkVEX09QVFM9J3Vua25vd24nCisJCU1LX1NIQVJFRF9MSUI9J2VjaG8gdW5rbm93bicKKwkJOzsKKwllc2FjCisKKwkjIFRoaXMgd29ya3MgaWYgdGhlIGxhc3QgdG9rZW5zIGluICRNS19TSEFSRURfTElCIGFyZSB0aGUgLW8gdGFyZ2V0LgorCWNhc2UgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiBpbiAjKHZpCisJcmVsfGFiaSkKKwkJY2FzZSAiJE1LX1NIQVJFRF9MSUIiIGluICModmkKKwkJKictbyAkW0BdJykKKwkJCXRlc3QgIiRjZl9jdl9kb19zeW1saW5rcyIgPSBubyAmJiBjZl9jdl9kb19zeW1saW5rcz15ZXMKKwkJCTs7CisJCSopCisJCQlBQ19NU0dfV0FSTihpZ25vcmVkIC0td2l0aC1zaGxpYi12ZXJzaW9uKQorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKKworCWlmIHRlc3QgLW4gIiRjZl9sZF9ycGF0aF9vcHQiIDsgdGhlbgorCQlBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgbmVlZCBhIHNwYWNlIGFmdGVyIHJwYXRoIG9wdGlvbikKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJTElCUz0iJExJQlMgJHtjZl9sZF9ycGF0aF9vcHR9JGxpYmRpciIKKwkJQUNfVFJZX0xJTksoLCAsIGNmX3JwYXRoX3NwYWNlPW5vLCBjZl9ycGF0aF9zcGFjZT15ZXMpCisJCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisJCUFDX01TR19SRVNVTFQoJGNmX3JwYXRoX3NwYWNlKQorCQl0ZXN0ICIkY2ZfcnBhdGhfc3BhY2UiID0geWVzICYmIGNmX2xkX3JwYXRoX29wdD0iJGNmX2xkX3JwYXRoX29wdCAiCisJCU1LX1NIQVJFRF9MSUI9IiRNS19TSEFSRURfTElCICRjZl9sZF9ycGF0aF9vcHRcJHtsaWJkaXJ9IgorCWZpCisKKwlBQ19TVUJTVChDQ19TSEFSRURfT1BUUykKKwlBQ19TVUJTVChMRF9TSEFSRURfT1BUUykKKwlBQ19TVUJTVChNS19TSEFSRURfTElCKQorCUFDX1NVQlNUKExJTktfUFJPR1MpCisJQUNfU1VCU1QoTElOS19URVNUUykKKwlBQ19TVUJTVChFWFRSQV9MREZMQUdTKQorCUFDX1NVQlNUKExPQ0FMX0xERkxBR1MpCisJQUNfU1VCU1QoTE9DQUxfTERGTEFHUzIpCisJQUNfU1VCU1QoSU5TVEFMTF9MSUIpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NIQVJFRF9TT05BTUUgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA4LzA5LzA4IDE4OjM0OjQzCitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIHV0aWxpdHkgbWFjcm8gZm9yIENGX1NIQVJFRF9PUFRTLCBjb25zdHJ1Y3RzICIkY2ZfY3Zfc2hhcmVkX3NvbmFtZSIgZm9yCitkbmwgc3Vic3RpdHV0aW9uIGludG8gTUtfU0hBUkVEX0xJQiBzdHJpbmcgZm9yIHRoZSAiLXNvbmFtZSIgKG9yIHNpbWlsYXIpCitkbmwgb3B0aW9uLgorZG5sCitkbmwgJDEgaXMgdGhlIGRlZmF1bHQgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIi4KK2RubCBJZiBtaXNzaW5nLCB1c2UgInJlbCIuCitkZWZpbmUoW0NGX1NIQVJFRF9TT05BTUVdLAorWworCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1pZmVsc2UoJDEsLHJlbCwkMSkKKwlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSByZWw7IHRoZW4KKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRbQF0gLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkW0BdYCcKKwlmaQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TSUdXSU5DSCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMDQvMDIgMTY6NDE6MDkKK2RubCAtLS0tLS0tLS0tLQorZG5sIFVzZSB0aGlzIG1hY3JvIGFmdGVyIENGX1hPUEVOX1NPVVJDRSwgYnV0IGRvIG5vdCByZXF1aXJlIGl0IChub3QgYWxsCitkbmwgcHJvZ3JhbXMgbmVlZCB0aGlzIHRlc3QpLgorZG5sCitkbmwgVGhpcyBpcyByZWFsbHkgYSBNYWNPUyBYIDEwLjQuMyB3b3JrYXJvdW5kLiAgRGVmaW5pbmcgX1BPU0lYX0NfU09VUkNFCitkbmwgZm9yY2VzIFNJR1dJTkNIIHRvIGJlIHVuZGVmaW5lZCAoYnJlYWtzIHh0ZXJtLCBuY3Vyc2VzKS4gIE9kZGx5LCB0aGUgc3RydWN0Citkbmwgd2luc2l6ZSBkZWNsYXJhdGlvbiBpcyBsZWZ0IGFsb25lIC0gd2UgbWF5IHJldmlzaXQgdGhpcyBpZiBBcHBsZSBjaG9vc2UgdG8KK2RubCBicmVhayB0aGF0IHBhcnQgb2YgdGhlIGludGVyZmFjZSBhcyB3ZWxsLgorQUNfREVGVU4oW0NGX1NJR1dJTkNIXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIFNJR1dJTkNIIGlzIGRlZmluZWQsY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoLFsKKwlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorXSxbaW50IHggPSBTSUdXSU5DSF0sCisJW2NmX2N2X2RlZmluZV9zaWd3aW5jaD15ZXNdLAorCVtBQ19UUllfQ09NUElMRShbCisjdW5kZWYgX1hPUEVOX1NPVVJDRQorI3VuZGVmIF9QT1NJWF9TT1VSQ0UKKyN1bmRlZiBfUE9TSVhfQ19TT1VSQ0UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CitdLFtpbnQgeCA9IFNJR1dJTkNIXSwKKwlbY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoPW1heWJlXSwKKwlbY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoPW5vXSkKK10pCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoIiA9IG1heWJlIDsgdGhlbgorQUNfQ0FDSEVfQ0hFQ0soZm9yIGFjdHVhbCBTSUdXSU5DSCBkZWZpbml0aW9uLGNmX2N2X2ZpeHVwX3NpZ3dpbmNoLFsKK2NmX2N2X2ZpeHVwX3NpZ3dpbmNoPXVua25vd24KK2NmX3NpZ3dpbmNoPTMyCit3aGlsZSB0ZXN0ICRjZl9zaWd3aW5jaCAhPSAxCitkbworCUFDX1RSWV9DT01QSUxFKFsKKyN1bmRlZiBfWE9QRU5fU09VUkNFCisjdW5kZWYgX1BPU0lYX1NPVVJDRQorI3VuZGVmIF9QT1NJWF9DX1NPVVJDRQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KK10sWworI2lmIFNJR1dJTkNIICE9ICRjZl9zaWd3aW5jaAorbWFrZSBhbiBlcnJvcgorI2VuZGlmCitpbnQgeCA9IFNJR1dJTkNIXSwKKwlbY2ZfY3ZfZml4dXBfc2lnd2luY2g9JGNmX3NpZ3dpbmNoCisJIGJyZWFrXSkKKworY2Zfc2lnd2luY2g9YGV4cHIgJGNmX3NpZ3dpbmNoIC0gMWAKK2RvbmUKK10pCisKKwlpZiB0ZXN0ICIkY2ZfY3ZfZml4dXBfc2lnd2luY2giICE9IHVua25vd24gOyB0aGVuCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURTSUdXSU5DSD0kY2ZfY3ZfZml4dXBfc2lnd2luY2giCisJZmkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NJR19BVE9NSUNfVCB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDUvMDkvMTggMTc6Mjc6MTIKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBzaWduYWwgaGFuZGxlciwgYnV0IHRoZXJlIGFyZSBzb21lIGdjYyBkZXBlZGVuY2llcyBpbiB0aGF0IHJlY29tbWVuZGF0aW9uLgorZG5sIFRyeSBhbnl3YXkuCitBQ19ERUZVTihbQ0ZfU0lHX0FUT01JQ19UXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3Igc2lnbmFsIGdsb2JhbCBkYXRhdHlwZSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9zaWdfYXRvbWljX3QsWworCWZvciBjZl90eXBlIGluIFwKKwkJInZvbGF0aWxlIHNpZ19hdG9taWNfdCIgXAorCQkic2lnX2F0b21pY190IiBcCisJCSJpbnQiCisJZG8KKwlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJuICRjZl90eXBlIHg7CiskY2ZfdHlwZSB4Oworc3RhdGljIHZvaWQgaGFuZGxlcihpbnQgc2lnKQoreworCXggPSA1OworfV0sCisJCVtzaWduYWwoU0lHSU5ULCBoYW5kbGVyKTsKKwkJIHggPSAxXSwKKwkJW2NmX2N2X3NpZ19hdG9taWNfdD0kY2ZfdHlwZV0sCisJCVtjZl9jdl9zaWdfYXRvbWljX3Q9bm9dKQorCQl0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBicmVhaworCWRvbmUKKwldKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3Zfc2lnX2F0b21pY190KQordGVzdCAiJGNmX2N2X3NpZ19hdG9taWNfdCIgIT0gbm8gJiYgQUNfREVGSU5FX1VOUVVPVEVEKFNJR19BVE9NSUNfVCwgJGNmX2N2X3NpZ19hdG9taWNfdCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU0laRUNIQU5HRSB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDAvMTEvMDQgMTI6MjI6MTYKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGRlZmluaXRpb25zICYgc3RydWN0dXJlcyBuZWVkZWQgZm9yIHdpbmRvdyBzaXplLWNoYW5naW5nCitkbmwgRklYTUU6IGNoZWNrIHRoYXQgdGhpcyB3b3JrcyB3aXRoICJzbmFrZSIgKEhQLVVYIDEwLngpCitBQ19ERUZVTihbQ0ZfU0laRUNIQU5HRV0sCitbCitBQ19SRVFVSVJFKFtDRl9TVFJVQ1RfVEVSTUlPU10pCitBQ19DQUNIRV9DSEVDSyhkZWNsYXJhdGlvbiBvZiBzaXplLWNoYW5nZSwgY2ZfY3Zfc2l6ZWNoYW5nZSxbCisgICAgY2ZfY3Zfc2l6ZWNoYW5nZT11bmtub3duCisgICAgY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCitmb3IgY2Zfb3B0cyBpbiAiIiAiTkVFRF9QVEVNX0giCitkbworCisgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgIHRlc3QgLW4gIiRjZl9vcHRzIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EJGNmX29wdHMiCisgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9URVJNSU9fSAorI2luY2x1ZGUgPHRlcm1pby5oPgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBORUVEX1BURU1fSAorLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIFNDTzogIHRoZXkgbmVnbGVjdGVkIHRvIGRlZmluZSBzdHJ1Y3Qgd2luc2l6ZSBpbgorICogdGVybWlvcy5oIC0tIGl0J3Mgb25seSBpbiB0ZXJtaW8uaCBhbmQgcHRlbS5oCisgKi8KKyNpbmNsdWRlICAgICAgICA8c3lzL3N0cmVhbS5oPgorI2luY2x1ZGUgICAgICAgIDxzeXMvcHRlbS5oPgorI2VuZGlmCisjaWYgIWRlZmluZWQoc3VuKSB8fCAhZGVmaW5lZChIQVZFX1RFUk1JT1NfSCkKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorXSxbCisjaWZkZWYgVElPQ0dTSVpFCisJc3RydWN0IHR0eXNpemUgd2luOwkvKiBGSVhNRTogd2hhdCBzeXN0ZW0gaXMgdGhpcz8gKi8KKwlpbnQgeSA9IHdpbi50c19saW5lczsKKwlpbnQgeCA9IHdpbi50c19jb2xzOworI2Vsc2UKKyNpZmRlZiBUSU9DR1dJTlNaCisJc3RydWN0IHdpbnNpemUgd2luOworCWludCB5ID0gd2luLndzX3JvdzsKKwlpbnQgeCA9IHdpbi53c19jb2w7CisjZWxzZQorCW5vIFRJT0NHU0laRSBvciBUSU9DR1dJTlNaCisjZW5kaWYgLyogVElPQ0dXSU5TWiAqLworI2VuZGlmIC8qIFRJT0NHU0laRSAqLworCV0sCisJW2NmX2N2X3NpemVjaGFuZ2U9eWVzXSwKKwlbY2ZfY3Zfc2l6ZWNoYW5nZT1ub10pCisKKwlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisJaWYgdGVzdCAiJGNmX2N2X3NpemVjaGFuZ2UiID0geWVzIDsgdGhlbgorCQllY2hvICJzaXplLWNoYW5nZSBzdWNjZWVkZWQgKCRjZl9vcHRzKSIgPiZBQ19GRF9DQworCQl0ZXN0IC1uICIkY2Zfb3B0cyIgJiYgY2ZfY3Zfc2l6ZWNoYW5nZT0iJGNmX29wdHMiCisJCWJyZWFrCisJZmkKK2RvbmUKK10pCitpZiB0ZXN0ICIkY2ZfY3Zfc2l6ZWNoYW5nZSIgIT0gbm8gOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfU0laRUNIQU5HRSkKKwljYXNlICRjZl9jdl9zaXplY2hhbmdlIGluICModmkKKwlORUVEKikKKwkJQUNfREVGSU5FX1VOUVVPVEVEKCRjZl9jdl9zaXplY2hhbmdlICkKKwkJOzsKKwllc2FjCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TUkNfTU9EVUxFUyB2ZXJzaW9uOiAxOCB1cGRhdGVkOiAyMDA1LzA1LzI4IDEyOjU4OjU0CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBGb3IgZWFjaCBwYXJhbWV0ZXIsIHRlc3QgaWYgdGhlIHNvdXJjZS1kaXJlY3RvcnkgZXhpc3RzLCBhbmQgaWYgaXQgY29udGFpbnMKK2RubCBhICdtb2R1bGVzJyBmaWxlLiAgSWYgc28sIGFkZCB0byB0aGUgbGlzdCAkY2ZfY3Zfc3JjX21vZHVsZXMgd2hpY2ggd2UnbGwKK2RubCB1c2UgaW4gQ0ZfTElCX1JVTEVTLgorZG5sCitkbmwgVGhpcyB1c2VzIHRoZSBjb25maWd1cmVkIHZhbHVlIHRvIG1ha2UgdGhlIGxpc3RzIFNSQ19TVUJESVJTIGFuZAorZG5sIFNVQl9NQUtFRklMRVMgd2hpY2ggYXJlIHVzZWQgaW4gdGhlIG1ha2VmaWxlLWdlbmVyYXRpb24gc2NoZW1lLgorQUNfREVGVU4oW0NGX1NSQ19NT0RVTEVTXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3Igc3JjIG1vZHVsZXMpCisKKyMgZGVwZW5kZW5jaWVzIGFuZCBsaW5rZXItYXJndW1lbnRzIGZvciB0ZXN0LXByb2dyYW1zCitURVNUX0RFUFM9IiR7TElCX0RJUn0vJHtMSUJfUFJFRklYfSR7TElCX05BTUV9JHtERlRfREVQX1NVRkZJWH0gJFRFU1RfREVQUyIKK1RFU1RfREVQMj0iJHtMSUJfMk5EfS8ke0xJQl9QUkVGSVh9JHtMSUJfTkFNRX0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVAyIgoraWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisJVEVTVF9BUkdTPSIke1RFU1RfREVQU30iCisJVEVTVF9BUkcyPSIke1RFU1RfREVQMn0iCitlbHNlCisJVEVTVF9BUkdTPSItbCR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0gJFRFU1RfQVJHUyIKKwlURVNUX0FSRzI9Ii1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkcyIgorZmkKKworY2ZfY3Zfc3JjX21vZHVsZXM9Citmb3IgY2ZfZGlyIGluICQxCitkbworCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXM7IHRoZW4KKworCQkjIFdlIG1heS9tYXkgbm90IGhhdmUgdGFjayBpbiB0aGUgZGlzdHJpYnV0aW9uLCB0aG91Z2ggdGhlCisJCSMgbWFrZWZpbGUgaXMuCisJCWlmIHRlc3QgJGNmX2RpciA9IHRhY2sgOyB0aGVuCisJCQlpZiB0ZXN0ICEgLWYgJHNyY2Rpci8ke2NmX2Rpcn0vJHtjZl9kaXJ9Lmg7IHRoZW4KKwkJCQljb250aW51ZQorCQkJZmkKKwkJZmkKKworCQlpZiB0ZXN0IC16ICIkY2ZfY3Zfc3JjX21vZHVsZXMiOyB0aGVuCisJCQljZl9jdl9zcmNfbW9kdWxlcz0kY2ZfZGlyCisJCWVsc2UKKwkJCWNmX2N2X3NyY19tb2R1bGVzPSIkY2ZfY3Zfc3JjX21vZHVsZXMgJGNmX2RpciIKKwkJZmkKKworCQkjIE1ha2UgdGhlIG5jdXJzZXNfY2ZnLmggZmlsZSByZWNvcmQgdGhlIGxpYnJhcnkgaW50ZXJmYWNlIGZpbGVzIGFzCisJCSMgd2VsbC4gIFRoZXNlIGFyZSBoZWFkZXIgZmlsZXMgdGhhdCBhcmUgdGhlIHNhbWUgbmFtZSBhcyB0aGVpcgorCQkjIGRpcmVjdG9yeS4gIE5jdXJzZXMgaXMgdGhlIG9ubHkgbGlicmFyeSB0aGF0IGRvZXMgbm90IGZvbGxvdworCQkjIHRoYXQgcGF0dGVybi4KKwkJaWYgdGVzdCAkY2ZfZGlyID0gdGFjayA7IHRoZW4KKwkJCWNvbnRpbnVlCisJCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyR7Y2ZfZGlyfS8ke2NmX2Rpcn0uaDsgdGhlbgorCQkJQ0ZfVVBQRVIoY2ZfaGF2ZV9pbmNsdWRlLCRjZl9kaXIpCisJCQlBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV8ke2NmX2hhdmVfaW5jbHVkZX1fSCkKKwkJCUFDX0RFRklORV9VTlFVT1RFRChIQVZFX0xJQiR7Y2ZfaGF2ZV9pbmNsdWRlfSkKKwkJCVRFU1RfREVQUz0iJHtMSUJfRElSfS8ke0xJQl9QUkVGSVh9JHtjZl9kaXJ9JHtERlRfREVQX1NVRkZJWH0gJFRFU1RfREVQUyIKKwkJCVRFU1RfREVQMj0iJHtMSUJfMk5EfS8ke0xJQl9QUkVGSVh9JHtjZl9kaXJ9JHtERlRfREVQX1NVRkZJWH0gJFRFU1RfREVQMiIKKwkJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJsaWJ0b29sIjsgdGhlbgorCQkJCVRFU1RfQVJHUz0iJHtURVNUX0RFUFN9IgorCQkJCVRFU1RfQVJHMj0iJHtURVNUX0RFUDJ9IgorCQkJZWxzZQorCQkJCVRFU1RfQVJHUz0iLWwke2NmX2Rpcn0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkdTIgorCQkJCVRFU1RfQVJHMj0iLWwke2NmX2Rpcn0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkcyIgorCQkJZmkKKwkJZmkKKwlmaQorZG9uZQorQUNfTVNHX1JFU1VMVCgkY2ZfY3Zfc3JjX21vZHVsZXMpCisKK1RFU1RfQVJHUz0iLUwke0xJQl9ESVJ9ICRURVNUX0FSR1MiCitURVNUX0FSRzI9Ii1MJHtMSUJfMk5EfSAkVEVTVF9BUkcyIgorCitBQ19TVUJTVChURVNUX0FSR1MpCitBQ19TVUJTVChURVNUX0RFUFMpCisKK0FDX1NVQlNUKFRFU1RfQVJHMikKK0FDX1NVQlNUKFRFU1RfREVQMikKKworU1JDX1NVQkRJUlM9Im1hbiBpbmNsdWRlIgorZm9yIGNmX2RpciBpbiAkY2ZfY3Zfc3JjX21vZHVsZXMKK2RvCisJU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyAkY2ZfZGlyIgorZG9uZQorU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyB0ZXN0IgordGVzdCAteiAiJE1BS0VfVEVSTUlORk8iICYmIFNSQ19TVUJESVJTPSIkU1JDX1NVQkRJUlMgbWlzYyIKK3Rlc3QgIiRjZl93aXRoX2N4eF9iaW5kaW5nIiAhPSBubyAmJiBTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIGMrKyIKKworQURBX1NVQkRJUlM9CitpZiB0ZXN0ICIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID0geWVzICYmIHRlc3QgLWYgJHNyY2Rpci9BZGE5NS9NYWtlZmlsZS5pbjsgdGhlbgorICAgU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyBBZGE5NSIKKyAgIEFEQV9TVUJESVJTPSJnZW4gc3JjIHNhbXBsZXMiCitmaQorCitTVUJfTUFLRUZJTEVTPQorZm9yIGNmX2RpciBpbiAkU1JDX1NVQkRJUlMKK2RvCisJU1VCX01BS0VGSUxFUz0iJFNVQl9NQUtFRklMRVMgJGNmX2Rpci9NYWtlZmlsZSIKK2RvbmUKKworaWYgdGVzdCAtbiAiJEFEQV9TVUJESVJTIjsgdGhlbgorICAgZm9yIGNmX2RpciBpbiAkQURBX1NVQkRJUlMKKyAgIGRvCisgICAgICBTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyBBZGE5NS8kY2ZfZGlyL01ha2VmaWxlIgorICAgZG9uZQorICAgQUNfU1VCU1QoQURBX1NVQkRJUlMpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVERDUFBfTElCUkFSWSB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDAvMDgvMTIgMjM6MTg6NTIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciAtbHN0ZGMrKywgd2hpY2ggaXMgR05VJ3Mgc3RhbmRhcmQgQysrIGxpYnJhcnkuCitBQ19ERUZVTihbQ0ZfU1REQ1BQX0xJQlJBUlldLAorWworaWYgdGVzdCAtbiAiJEdYWCIgOyB0aGVuCitjYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCitvczIqKSAjKHZpCisJY2Zfc3RkY3BwX2xpYm5hbWU9c3RkY3BwCisJOzsKKyopCisJY2Zfc3RkY3BwX2xpYm5hbWU9c3RkYysrCisJOzsKK2VzYWMKK0FDX0NBQ0hFX0NIRUNLKGZvciBsaWJyYXJ5ICRjZl9zdGRjcHBfbGlibmFtZSxjZl9jdl9saWJzdGRjcHAsWworCWNmX3NhdmU9IiRMSUJTIgorCUxJQlM9IiRMSUJTIC1sJGNmX3N0ZGNwcF9saWJuYW1lIgorQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPHN0cnN0cmVhbS5oPl0sWworY2hhciBidWZbODBdOworc3Ryc3RyZWFtYnVmIGZvbyhidWYsIHNpemVvZihidWYpKQorXSwKKwlbY2ZfY3ZfbGlic3RkY3BwPXllc10sCisJW2NmX2N2X2xpYnN0ZGNwcD1ub10pCisJTElCUz0iJGNmX3NhdmUiCitdKQordGVzdCAiJGNmX2N2X2xpYnN0ZGNwcCIgPSB5ZXMgJiYgQ1hYTElCUz0iJENYWExJQlMgLWwkY2Zfc3RkY3BwX2xpYm5hbWUiCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVFJJUF9HX09QVCB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDIvMTIvMjEgMTk6MjU6NTIKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sCVJlbW92ZSAiLWciIG9wdGlvbiBmcm9tIHRoZSBjb21waWxlciBvcHRpb25zCitBQ19ERUZVTihbQ0ZfU1RSSVBfR19PUFRdLAorWyQxPWBlY2hvICR7JDF9IHwgc2VkIC1lICdzJS1nICUlJyAtZSAncyUtZyQlJSdgXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVFJVQ1RfU0lHQUNUSU9OIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMC8wOC8xMiAyMzoxODo1MgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSBuZWVkIF9QT1NJWF9TT1VSQ0UgZGVmaW5lZCB0byB1c2Ugc3RydWN0IHNpZ2FjdGlvbi4gIFdlJ2xsIG9ubHkKK2RubCBkbyB0aGlzIGlmIHdlJ3ZlIGZvdW5kIHRoZSBzaWdhY3Rpb24gZnVuY3Rpb24uCitkbmwKK2RubCBJZiBuZWVkZWQsIGRlZmluZSBTVlI0X0FDVElPTi4KK0FDX0RFRlVOKFtDRl9TVFJVQ1RfU0lHQUNUSU9OXSxbCitpZiB0ZXN0ICIkYWNfY3ZfZnVuY19zaWdhY3Rpb24iID0geWVzOyB0aGVuCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBzaWdhY3Rpb24gbmVlZHMgX1BPU0lYX1NPVVJDRSkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD5dLAorCVtzdHJ1Y3Qgc2lnYWN0aW9uIGFjdF0sCisJW3NpZ2FjdF9iYWQ9bm9dLAorCVsKK0FDX1RSWV9DT01QSUxFKFsKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPl0sCisJW3N0cnVjdCBzaWdhY3Rpb24gYWN0XSwKKwlbc2lnYWN0X2JhZD15ZXMKKwkgQUNfREVGSU5FKFNWUjRfQUNUSU9OKV0sCisJIFtzaWdhY3RfYmFkPXVua25vd25dKV0pCitBQ19NU0dfUkVTVUxUKCRzaWdhY3RfYmFkKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1RSVUNUX1RFUk1JT1MgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDAwLzExLzA0IDEyOjIyOjQ2CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTb21lIG1hY2hpbmVzIHJlcXVpcmUgX1BPU0lYX1NPVVJDRSB0byBjb21wbGV0ZWx5IGRlZmluZSBzdHJ1Y3QgdGVybWlvcy4KK2RubCBJZiBzbywgZGVmaW5lIFNWUjRfVEVSTUlPCitBQ19ERUZVTihbQ0ZfU1RSVUNUX1RFUk1JT1NdLFsKK0FDX0NIRUNLX0hFQURFUlMoIFwKK3Rlcm1pby5oIFwKK3Rlcm1pb3MuaCBcCit1bmlzdGQuaCBcCispCitpZiB0ZXN0ICIkSVNDIiA9IHllcyA7IHRoZW4KKwlBQ19DSEVDS19IRUFERVJTKCBzeXMvdGVybWlvLmggKQorZmkKK2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfdGVybWlvc19oIiA9IHllcyA7IHRoZW4KKwljYXNlICIkQ0ZMQUdTICRDUFBGTEFHUyIgaW4KKwkqLURfUE9TSVhfU09VUkNFKikKKwkJdGVybWlvc19iYWQ9ZHVubm8gOzsKKwkqKQl0ZXJtaW9zX2JhZD1tYXliZSA7OworCWVzYWMKKwlpZiB0ZXN0ICIkdGVybWlvc19iYWQiID0gbWF5YmUgOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdGVybWlvcy5oIG5lZWRzIF9QT1NJWF9TT1VSQ0UpCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx0ZXJtaW9zLmg+XSwKKwkJW3N0cnVjdCB0ZXJtaW9zIGZvbzsgaW50IHggPSBmb28uY19pZmxhZ10sCisJCXRlcm1pb3NfYmFkPW5vLCBbCisJCUFDX1RSWV9DT01QSUxFKFsKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2luY2x1ZGUgPHRlcm1pb3MuaD5dLAorCQkJW3N0cnVjdCB0ZXJtaW9zIGZvbzsgaW50IHggPSBmb28uY19pZmxhZ10sCisJCQl0ZXJtaW9zX2JhZD11bmtub3duLAorCQkJdGVybWlvc19iYWQ9eWVzIEFDX0RFRklORShTVlI0X1RFUk1JTykpCisJCQldKQorCUFDX01TR19SRVNVTFQoJHRlcm1pb3NfYmFkKQorCWZpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVUJESVJfUEFUSCB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGhlYWRlci9saWItZmlsZQorZG5sCSQxID0gdGhlIHZhcmlhYmxlIHRvIHJldHVybiBhcyByZXN1bHQKK2RubAkkMiA9IHRoZSBwYWNrYWdlIG5hbWUKK2RubAkkMyA9IHRoZSBzdWJkaXJlY3RvcnksIGUuZy4sIGJpbiwgaW5jbHVkZSBvciBsaWIKK0FDX0RFRlVOKFtDRl9TVUJESVJfUEFUSF0sCitbJDE9IiIKKworQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLC91c3IsJHByZWZpeCkKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMywkcHJlZml4LE5PTkUpCitDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsL3Vzci9sb2NhbCwkcHJlZml4KQorQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLC9vcHQsJHByZWZpeCkKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMyxbJF1IT01FLCRwcmVmaXgpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NVQlNUIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNi8wNi8xNyAxMjozMzowMworZG5sIC0tLS0tLS0tCitkbmwJU2hvcnRoYW5kIG1hY3JvIGZvciBzdWJzdGl0dXRpbmcgdGhpbmdzIHRoYXQgdGhlIHVzZXIgbWF5IG92ZXJyaWRlCitkbmwJd2l0aCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK2RubAorZG5sCSQxID0gbG9uZy9kZXNjcmlwdGl2ZSBuYW1lCitkbmwJJDIgPSBlbnZpcm9ubWVudCB2YXJpYWJsZQorZG5sCSQzID0gZGVmYXVsdCB2YWx1ZQorQUNfREVGVU4oW0NGX1NVQlNUXSwKK1tBQ19DQUNIRV9WQUwoY2ZfY3Zfc3Vic3RfJDIsWworQUNfTVNHX0NIRUNLSU5HKGZvciAkMSAoc3ltYm9sICQyKSkKK0NGX1NVQlNUX0lGKFsteiAiWyRdJDIiXSwgWyQyXSwgWyQzXSkKK2NmX2N2X3N1YnN0XyQyPVskXSQyCitBQ19NU0dfUkVTVUxUKFskXSQyKQorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1VCU1RfSUYgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA2LzA2LzE3IDEyOjMzOjAzCitkbmwgLS0tLS0tLS0tLS0KK2RubAlTaG9ydGhhbmQgbWFjcm8gZm9yIHN1YnN0aXR1dGluZyB0aGluZ3MgdGhhdCB0aGUgdXNlciBtYXkgb3ZlcnJpZGUKK2RubAl3aXRoIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorZG5sCitkbmwJJDEgPSBjb25kaXRpb24gdG8gcGFzcyB0byAidGVzdCIKK2RubAkkMiA9IGVudmlyb25tZW50IHZhcmlhYmxlCitkbmwJJDMgPSB2YWx1ZSBpZiB0aGUgdGVzdCBzdWNjZWVkcworZG5sCSQ0ID0gdmFsdWUgaWYgdGhlIHRlc3QgZmFpbHMKK0FDX0RFRlVOKFtDRl9TVUJTVF9JRl0sCitbCitpZiB0ZXN0ICQxIDsgdGhlbgorCSQyPSQzCitpZmVsc2UoJDQsLCxbZWxzZQorCSQyPSQ0XSkKK2ZpCitBQ19TVUJTVCgkMikKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1VCU1RfTkNVUlNFU19WRVJTSU9OIHZlcnNpb246IDggdXBkYXRlZDogMjAwNi8wOS8xNiAxMTo0MDo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEdldCB0aGUgdmVyc2lvbi1udW1iZXIgZm9yIHVzZSBpbiBzaGFyZWQtbGlicmFyeSBuYW1pbmcsIGV0Yy4KK0FDX0RFRlVOKFtDRl9TVUJTVF9OQ1VSU0VTX1ZFUlNJT05dLAorWworQUNfUkVRVUlSRShbQ0ZfUFJPR19FR1JFUF0pCitOQ1VSU0VTX01BSk9SPSJgJGFjX2N2X3Byb2dfZWdyZXAgJ15OQ1VSU0VTX01BSk9SW1sgCV1dKj0nICRzcmNkaXIvZGlzdC5tayB8IHNlZCAtZSAncy9eW1teMC05XV0qLy8nYCIKK05DVVJTRVNfTUlOT1I9ImAkYWNfY3ZfcHJvZ19lZ3JlcCAnXk5DVVJTRVNfTUlOT1JbWyAJXV0qPScgJHNyY2Rpci9kaXN0Lm1rIHwgc2VkIC1lICdzL15bW14wLTldXSovLydgIgorTkNVUlNFU19QQVRDSD0iYCRhY19jdl9wcm9nX2VncmVwICdeTkNVUlNFU19QQVRDSFtbIAldXSo9JyAkc3JjZGlyL2Rpc3QubWsgfCBzZWQgLWUgJ3MvXltbXjAtOV1dKi8vJ2AiCitjZl9jdl9hYmlfdmVyc2lvbj0ke05DVVJTRVNfTUFKT1J9CitjZl9jdl9yZWxfdmVyc2lvbj0ke05DVVJTRVNfTUFKT1J9LiR7TkNVUlNFU19NSU5PUn0KK2RubCBTaG93IHRoZSBjb21wdXRlZCB2ZXJzaW9uLCBmb3IgbG9nZ2luZworY2ZfY3ZfdGltZXN0YW1wPWBkYXRlYAorQUNfTVNHX1JFU1VMVChDb25maWd1cmluZyBOQ1VSU0VTICRjZl9jdl9yZWxfdmVyc2lvbiBBQkkgJGNmX2N2X2FiaV92ZXJzaW9uICgkY2ZfY3ZfdGltZXN0YW1wKSkKK2RubCBXZSBuZWVkIHRoZXNlIHZhbHVlcyBpbiB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMKK0FDX1NVQlNUKE5DVVJTRVNfTUFKT1IpCitBQ19TVUJTVChOQ1VSU0VTX01JTk9SKQorQUNfU1VCU1QoTkNVUlNFU19QQVRDSCkKK2RubCBXZSBuZWVkIHRoZXNlIHZhbHVlcyBpbiB0aGUgZ2VuZXJhdGVkIG1ha2VmaWxlcworQUNfU1VCU1QoY2ZfY3ZfcmVsX3ZlcnNpb24pCitBQ19TVUJTVChjZl9jdl9hYmlfdmVyc2lvbikKK0FDX1NVQlNUKGNmX2N2X2J1aWx0aW5fYm9vbCkKK0FDX1NVQlNUKGNmX2N2X2hlYWRlcl9zdGRib29sX2gpCitBQ19TVUJTVChjZl9jdl90eXBlX29mX2Jvb2wpZG5sCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NZU19USU1FX1NFTEVDVCB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDAvMTAvMDQgMDk6MTg6NDAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSBjYW4gaW5jbHVkZSA8c3lzL3RpbWUuaD4gd2l0aCA8c3lzL3NlbGVjdC5oPjsgdGhpcyBicmVha3Mgb24KK2RubCBvbGRlciBTQ08gY29uZmlndXJhdGlvbnMuCitBQ19ERUZVTihbQ0ZfU1lTX1RJTUVfU0VMRUNUXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiBzeXMvdGltZS5oIHdvcmtzIHdpdGggc3lzL3NlbGVjdC5oKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3N5c190aW1lX3NlbGVjdCxbCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCitdLFtdLFtjZl9jdl9zeXNfdGltZV9zZWxlY3Q9eWVzXSwKKyAgICAgW2NmX2N2X3N5c190aW1lX3NlbGVjdD1ub10pCisgICAgIF0pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9zeXNfdGltZV9zZWxlY3QpCit0ZXN0ICIkY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0IiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9TWVNfVElNRV9TRUxFQ1QpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1RPUF9CVUlMRERJUiB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMTAvMTUgMTY6MzM6MjMKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBEZWZpbmUgYSB0b3BfYnVpbGRkaXIgc3ltYm9sLCBmb3IgYXBwbGljYXRpb25zIHRoYXQgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorQUNfREVGVU4oW0NGX1RPUF9CVUlMRERJUl0sCitbCit0b3BfYnVpbGRkaXI9YHB3ZGAKK0FDX1NVQlNUKHRvcF9idWlsZGRpcikKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVFlQRU9GX0NIVFlQRSB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTI6MzM6MzAKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgRGV0ZXJtaW5lIHRoZSB0eXBlIHdlIHNob3VsZCB1c2UgZm9yIGNodHlwZSAoYW5kIGF0dHJfdCwgd2hpY2ggaXMgdHJlYXRlZAorZG5sIGFzIHRoZSBzYW1lIHRoaW5nKS4gIFdlIHdhbnQgYXJvdW5kIDMyIGJpdHMsIHNvIG9uIG1vc3QgbWFjaGluZXMgd2FudCBhCitkbmwgbG9uZywgYnV0IG9uIG5ld2VyIDY0LWJpdCBtYWNoaW5lcywgcHJvYmFibHkgd2FudCBhbiBpbnQuICBJZiB3ZSdyZSB1c2luZworZG5sIHdpZGUgY2hhcmFjdGVycywgd2UgaGF2ZSB0byBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhhdCwgYXMgd2VsbC4KK0FDX0RFRlVOKFtDRl9UWVBFT0ZfQ0hUWVBFXSwKK1sKK0FDX01TR19DSEVDS0lORyhbZm9yIHR5cGUgb2YgY2h0eXBlXSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl90eXBlb2ZfY2h0eXBlLFsKKwkJQUNfVFJZX1JVTihbCisjZGVmaW5lIFdBTlRfQklUUyAzMQorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpCit7CisJRklMRSAqZnAgPSBmb3BlbigiY2ZfdGVzdC5vdXQiLCAidyIpOworCWlmIChmcCAhPSAwKSB7CisJCWNoYXIgKnJlc3VsdCA9ICJsb25nIjsKKwkJaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA+IHNpemVvZih1bnNpZ25lZCBpbnQpKSB7CisJCQlpbnQgbjsKKwkJCXVuc2lnbmVkIGludCB4LCB5OworCQkJZm9yIChuID0gMDsgbiA8IFdBTlRfQklUUzsgbisrKSB7CisJCQkJeCA9ICgxIDw8IG4pOworCQkJCXkgPSAoeCA+PiBuKTsKKwkJCQlpZiAoeSAhPSAxIHx8IHggPT0gMCkgeworCQkJCQl4ID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJLyoKKwkJCSAqIElmIHggaXMgbm9uemVybywgYW4gaW50IGlzIGJpZyBlbm91Z2ggZm9yIHRoZSBiaXRzCisJCQkgKiB0aGF0IHdlIHdhbnQuCisJCQkgKi8KKwkJCXJlc3VsdCA9ICh4ICE9IDApID8gImludCIgOiAibG9uZyI7CisJCX0KKwkJZnB1dHMocmVzdWx0LCBmcCk7CisJCWZjbG9zZShmcCk7CisJfQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CisJCV0sCisJCVtjZl9jdl90eXBlb2ZfY2h0eXBlPWBjYXQgY2ZfdGVzdC5vdXRgXSwKKwkJW2NmX2N2X3R5cGVvZl9jaHR5cGU9bG9uZ10sCisJCVtjZl9jdl90eXBlb2ZfY2h0eXBlPWxvbmddKQorCQlybSAtZiBjZl90ZXN0Lm91dAorCV0pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl90eXBlb2ZfY2h0eXBlKQorCitBQ19TVUJTVChjZl9jdl90eXBlb2ZfY2h0eXBlKQorQUNfREVGSU5FX1VOUVVPVEVEKFRZUEVPRl9DSFRZUEUsJGNmX2N2X3R5cGVvZl9jaHR5cGUpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1RZUEVfU0lHQUNUSU9OIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMC8wOC8xMiAyMzoxODo1MgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwKK0FDX0RFRlVOKFtDRl9UWVBFX1NJR0FDVElPTl0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0eXBlIHNpZ2FjdGlvbl90XSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl90eXBlX3NpZ2FjdGlvbixbCisJQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHNpZ25hbC5oPl0sCisJCVtzaWdhY3Rpb25fdCB4XSwKKwkJW2NmX2N2X3R5cGVfc2lnYWN0aW9uPXllc10sCisJCVtjZl9jdl90eXBlX3NpZ2FjdGlvbj1ub10pXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X3R5cGVfc2lnYWN0aW9uKQordGVzdCAiJGNmX2N2X3R5cGVfc2lnYWN0aW9uIiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9UWVBFX1NJR0FDVElPTikKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVU5TSUdORURfTElURVJBTFMgdmVyc2lvbjogMiB1cGRhdGVkOiAxOTk4LzAyLzA3IDIyOjEwOjE2CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyAnVScgYW5kICdMJyBzdWZmaXhlcy4gIE9ubHkgb2xkIGNvbXBpbGVycworZG5sIHdvbid0LCBidXQgdGhleSdyZSBzdGlsbCB0aGVyZS4KK0FDX0RFRlVOKFtDRl9VTlNJR05FRF9MSVRFUkFMU10sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHVuc2lnbmVkIGxpdGVyYWxzIGFyZSBsZWdhbF0pCitBQ19DQUNIRV9WQUwoY2ZfY3ZfdW5zaWduZWRfbGl0ZXJhbHMsWworCUFDX1RSWV9DT01QSUxFKFtdLFtsb25nIHggPSAxTCArIDFVTCArIDFVICsgMV0sCisJCVtjZl9jdl91bnNpZ25lZF9saXRlcmFscz15ZXNdLAorCQlbY2ZfY3ZfdW5zaWduZWRfbGl0ZXJhbHM9bm9dKQorCV0pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl91bnNpZ25lZF9saXRlcmFscykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVVBQRVIgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDAxLzAxLzI5IDIzOjQwOjU5CitkbmwgLS0tLS0tLS0KK2RubCBNYWtlIGFuIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIGEgdmFyaWFibGUKK2RubCAkMT11cHBlcmNhc2UoJDIpCitBQ19ERUZVTihbQ0ZfVVBQRVJdLAorWworJDE9YGVjaG8gIiQyIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVVRGOF9MSUIgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDA4LzEwLzE3IDE5OjM3OjUyCitkbmwgLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgbXVsdGlieXRlIHN1cHBvcnQsIGFuZCBpZiBub3QgZm91bmQsIHV0ZjggY29tcGF0aWJpbGl0eSBsaWJyYXJ5CitBQ19ERUZVTihbQ0ZfVVRGOF9MSUJdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3VwcG9ydCxjZl9jdl91dGY4X2xpYixbCisJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwlBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkbGliLmg+XSxbcHV0d2MoMCwwKTtdLAorCVtjZl9jdl91dGY4X2xpYj15ZXNdLAorCVtDRl9GSU5EX0xJTktBR0UoWworI2luY2x1ZGUgPGxpYnV0ZjguaD5dLFtwdXR3YygwLDApO10sdXRmOCwKKwkJW2NmX2N2X3V0ZjhfbGliPWFkZC1vbl0sCisJCVtjZl9jdl91dGY4X2xpYj1ub10pCitdKV0pCisKKyMgSEFWRV9MSUJVVEY4X0ggaXMgdXNlZCBieSBuY3Vyc2VzIGlmIGN1cnNlcy5oIGlzIHNoYXJlZCBiZXR3ZWVuCisjIG5jdXJzZXMvbmN1cnNlc3c6CitpZiB0ZXN0ICIkY2ZfY3ZfdXRmOF9saWIiID0gImFkZC1vbiIgOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfTElCVVRGOF9IKQorCUNGX0FERF9JTkNESVIoJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjgpCisJQ0ZfQUREX0xJQkRJUigkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjgpCisJTElCUz0iLWx1dGY4ICRMSUJTIgorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVkVSQk9TRSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tCitkbmwgVXNlIEFDX1ZFUkJPU0Ugdy9vIHRoZSB3YXJuaW5ncworQUNfREVGVU4oW0NGX1ZFUkJPU0VdLAorW3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJJDEiIDE+JkFDX0ZEX01TRworQ0ZfTVNHX0xPRyhbJDFdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XQ0hBUl9UWVBFIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNC8wMS8xNyAxOToxODoyMAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0eXBlIHdpZGUtY2hhcmFjdGVyIHR5cGUgJDEgaXMgZGVjbGFyZWQsIGFuZCBpZiBzbywgd2hpY2ggaGVhZGVyCitkbmwgZmlsZSBpcyBuZWVkZWQuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNldCBhIHNoZWxsIHZhcmlhYmxlIHdoZW4KK2RubCB0aGUgdHlwZSBpcyBub3QgZm91bmQuICBUaGUgZmlyc3QgcGFyYW1ldGVyIHNldHMgYSBzaGVsbCB2YXJpYWJsZSBmb3IgdGhlCitkbmwgb3Bwb3NpdGUgc2Vuc2UuCitBQ19ERUZVTihbQ0ZfV0NIQVJfVFlQRV0sCitbCisjIFRoaXMgaXMgbmVlZGVkIG9uIFRydTY0IDUuMCB0byBkZWNsYXJlICQxCitBQ19DQUNIRV9DSEVDSyhpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlICQxLGNmX2N2XyQxLFsKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfTElCVVRGOF9ICisjaW5jbHVkZSA8bGlidXRmOC5oPgorI2VuZGlmXSwKKwlbJDEgc3RhdGVdLAorCVtjZl9jdl8kMT1ub10sCisJW0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWZdLAorCVskMSB2YWx1ZV0sCisJW2NmX2N2XyQxPXllc10sCisJW2NmX2N2XyQxPXVua25vd25dKV0pXSkKKworaWYgdGVzdCAiJGNmX2N2XyQxIiA9IHllcyA7IHRoZW4KKwlBQ19ERUZJTkUoTkVFRF9XQ0hBUl9IKQorCU5FRURfV0NIQVJfSD0xCitmaQorCitpZmVsc2UoJDIsLCxbCisjIGlmIHdlIGRvIG5vdCBmaW5kICQxIGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3ZfJDEiID0gdW5rbm93biA7IHRoZW4KKwkkMj0xCitmaQorXSkKK2lmZWxzZSgkMywsLFsKKyMgaWYgd2UgZmluZCAkMSBpbiBlaXRoZXIgcGxhY2UsIHVzZSBzdWJzdGl0dXRpb24gdG8gcHJvdmlkZSBhIGZhbGxiYWNrLgoraWYgdGVzdCAiJGNmX2N2XyQxIiAhPSB1bmtub3duIDsgdGhlbgorCSQzPTEKK2ZpCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XRUFLX1NZTUJPTFMgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA4LzA4LzE2IDE5OjE4OjA2CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGVyLXN1cHBvcnQgZm9yIHdlYWsgc3ltYm9scy4KK2RubCBUaGlzIHdvcmtzIHdpdGggInJlY2VudCIgZ2NjLgorQUNfREVGVU4oW0NGX1dFQUtfU1lNQk9MU10sWworQUNfQ0FDSEVfQ0hFQ0soaWYgJENDIHN1cHBvcnRzIHdlYWsgc3ltYm9scyxjZl9jdl93ZWFrX3N5bWJvbHMsWworCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3RkaW8uaD5dLAorWworI2lmIGRlZmluZWQoX19HTlVDX18pCisjICBpZiBkZWZpbmVkIF9fVVNFX0lTT0M5OQorIyAgICBkZWZpbmUgX2NhdF9wcmFnbWEoZXhwKQlfUHJhZ21hKCNleHApCisjICAgIGRlZmluZSBfd2Vha19wcmFnbWEoZXhwKQlfY2F0X3ByYWdtYSh3ZWFrIG5hbWUpCisjICBlbHNlCisjICAgIGRlZmluZSBfd2Vha19wcmFnbWEoZXhwKQorIyAgZW5kaWYKKyMgIGRlZmluZSBfZGVjbGFyZShuYW1lKQlfX2V4dGVuc2lvbl9fIGV4dGVybiBfX3R5cGVvZl9fKG5hbWUpIG5hbWUKKyMgIGRlZmluZSB3ZWFrX3N5bWJvbChuYW1lKQlfd2Vha19wcmFnbWEobmFtZSkgX2RlY2xhcmUobmFtZSkgX19hdHRyaWJ1dGVfXygod2VhaykpCisjZW5kaWYKKword2Vha19zeW1ib2woZm9wZW4pOworXSxbY2ZfY3Zfd2Vha19zeW1ib2xzPXllc10sW2NmX2N2X3dlYWtfc3ltYm9scz1ub10pCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0FCSV9WRVJTSU9OIHZlcnNpb246IDEgdXBkYXRlZDogMjAwMy8wOS8yMCAxODoxMjo0OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBBbGxvdyBsaWJyYXJ5J3MgQUJJIHRvIGJlIG92ZXJyaWRkZW4uICBHZW5lcmFsbHkgdGhpcyBoYXBwZW5zIHdoZW4gYQorZG5sIHBhY2thZ2VyIGhhcyBpbmNyZW1lbnRlZCB0aGUgQUJJIHBhc3QgdGhhdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBwYWNrYWdlLAorZG5sIGFuZCB3aXNoZXMgdG8ga2VlcCBkb2luZyB0aGlzLgorZG5sCitkbmwgJDEgaXMgdGhlIHBhY2thZ2UgbmFtZSwgaWYgYW55LCB0byBkZXJpdmUgYSBjb3JyZXNwb25kaW5nIHtwYWNrYWdlfV9BQkkKK2RubCBzeW1ib2wuCitBQ19ERUZVTihbQ0ZfV0lUSF9BQklfVkVSU0lPTl0sWwordGVzdCAteiAiJGNmX2N2X2FiaV92ZXJzaW9uIiAmJiBjZl9jdl9hYmlfdmVyc2lvbj0wCitBQ19BUkdfV0lUSChhYmktdmVyc2lvbiwKK1sgIC0td2l0aC1hYmktdmVyc2lvbj1YWFggIG92ZXJyaWRlIGRlcml2ZWQgQUJJIHZlcnNpb25dLAorW0FDX01TR19XQVJOKG92ZXJyaWRpbmcgQUJJIHZlcnNpb24gJGNmX2N2X2FiaV92ZXJzaW9uIHRvICR3aXRodmFsKQorIGNmX2N2X2FiaV92ZXJzaW9uPSR3aXRodmFsXSkKKyBDRl9OVU1CRVJfU1lOVEFYKCRjZl9jdl9hYmlfdmVyc2lvbixBQkkgdmVyc2lvbikKK2lmZWxzZSgkMSwsLFsKKyQxX0FCST0kY2ZfY3ZfYWJpX3ZlcnNpb24KK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfREJNQUxMT0MgdmVyc2lvbjogNiB1cGRhdGVkOiAyMDA2LzEyLzE2IDE0OjI0OjA1CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIENvbmZpZ3VyZS1vcHRpb24gZm9yIGRibWFsbG9jLiAgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBpcyB1c2VkIHRvIG92ZXJyaWRlCitkbmwgdGhlIHVwZGF0aW5nIG9mICRMSUJTLCBlLmcuLCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHN1YnNlcXVlbnQgdGVzdHMuCitBQ19ERUZVTihbQ0ZfV0lUSF9EQk1BTExPQ10sWworQ0ZfTk9fTEVBS1NfT1BUSU9OKGRibWFsbG9jLAorCVsgIC0td2l0aC1kYm1hbGxvYyAgICAgICAgIHRlc3Q6IHVzZSBDb25vciBDYWhpbGwncyBkYm1hbGxvYyBsaWJyYXJ5XSwKKwlbVVNFX0RCTUFMTE9DXSkKKworaWYgdGVzdCAiJHdpdGhfZGJtYWxsb2MiID0geWVzIDsgdGhlbgorCUFDX0NIRUNLX0hFQURFUihkYm1hbGxvYy5oLAorCQlbQUNfQ0hFQ0tfTElCKGRibWFsbG9jLFtkZWJ1Z19tYWxsb2NdaWZlbHNlKCQxLCxbXSxbLCQxXSkpXSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfRE1BTExPQyB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTQ6MjQ6MDUKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDb25maWd1cmUtb3B0aW9uIGZvciBkbWFsbG9jLiAgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBpcyB1c2VkIHRvIG92ZXJyaWRlCitkbmwgdGhlIHVwZGF0aW5nIG9mICRMSUJTLCBlLmcuLCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHN1YnNlcXVlbnQgdGVzdHMuCitBQ19ERUZVTihbQ0ZfV0lUSF9ETUFMTE9DXSxbCitDRl9OT19MRUFLU19PUFRJT04oZG1hbGxvYywKKwlbICAtLXdpdGgtZG1hbGxvYyAgICAgICAgICB0ZXN0OiB1c2UgR3JheSBXYXRzb24ncyBkbWFsbG9jIGxpYnJhcnldLAorCVtVU0VfRE1BTExPQ10pCisKK2lmIHRlc3QgIiR3aXRoX2RtYWxsb2MiID0geWVzIDsgdGhlbgorCUFDX0NIRUNLX0hFQURFUihkbWFsbG9jLmgsCisJCVtBQ19DSEVDS19MSUIoZG1hbGxvYyxbZG1hbGxvY19kZWJ1Z11pZmVsc2UoJDEsLFtdLFssJDFdKSldKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9HUE0gdmVyc2lvbjogNyB1cGRhdGVkOiAyMDA4LzAzLzIzIDE0OjQ4OjU0CitkbmwgLS0tLS0tLS0tLS0KK2RubAorZG5sIFRoZSBvcHRpb24gcGFyYW1ldGVyIChpZiBuZWl0aGVyIHllcy9ubykgaXMgYXNzdW1lZCB0byBiZSB0aGUgbmFtZSBvZgorZG5sIHRoZSBncG0gbGlicmFyeSwgZS5nLiwgZm9yIGR5bmFtaWMgbG9hZGluZy4KK0FDX0RFRlVOKFtDRl9XSVRIX0dQTV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBHUE0gbW91c2UgbGlicmFyeSkKK0FDX0FSR19XSVRIKGdwbSwKKwlbICAtLXdpdGgtZ3BtICAgICAgICAgICAgICB1c2UgQWxlc3NhbmRybyBSdWJpbmkncyBHUE0gbGlicmFyeV0sCisJW3dpdGhfZ3BtPSR3aXRodmFsXSwKKwlbd2l0aF9ncG09bWF5YmVdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9ncG0pCisKK2lmIHRlc3QgIiR3aXRoX2dwbSIgIT0gbm8gOyB0aGVuCisJQUNfQ0hFQ0tfSEVBREVSKGdwbS5oLFsKKwkJQUNfREVGSU5FKEhBVkVfR1BNX0gpCisJCWlmIHRlc3QgIiR3aXRoX2dwbSIgIT0geWVzICYmIHRlc3QgIiR3aXRoX2dwbSIgIT0gbWF5YmUgOyB0aGVuCisJCQlDRl9WRVJCT1NFKGFzc3VtaW5nIHdlIHJlYWxseSBoYXZlIEdQTSBsaWJyYXJ5KQorCQkJQUNfREVGSU5FKEhBVkVfTElCR1BNKQorCQllbHNlCisJCQlBQ19DSEVDS19MSUIoZ3BtLEdwbV9PcGVuLFs6XSxbCisJCQkJQUNfTVNHX0VSUk9SKENhbm5vdCBsaW5rIHdpdGggR1BNIGxpYnJhcnkpCisJCWZpCisJCXdpdGhfZ3BtPXllcworCQldKQorCV0sWworCQl0ZXN0ICIkd2l0aF9ncG0iICE9IG1heWJlICYmIEFDX01TR19XQVJOKENhbm5vdCBmaW5kIEdQTSBoZWFkZXIpCisJCXdpdGhfZ3BtPW5vCisJXSkKK2ZpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfTElCVE9PTCB2ZXJzaW9uOiAxOSB1cGRhdGVkOiAyMDA4LzAzLzI5IDE1OjQ2OjQzCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJvdmlkZSBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gaW5jb3Jwb3JhdGUgbGlidG9vbC4gIERlZmluZSBzZXZlcmFsIHVzZWZ1bAorZG5sIHN5bWJvbHMgZm9yIHRoZSBtYWtlZmlsZSBydWxlcy4KK2RubAorZG5sIFRoZSByZWZlcmVuY2UgdG8gQUNfUFJPR19MSUJUT09MIGRvZXMgbm90IG5vcm1hbGx5IHdvcmssIHNpbmNlIGl0IHVzZXMKK2RubCBtYWNyb3MgZnJvbSBsaWJ0b29sLm00IHdoaWNoIGlzIGluIHRoZSBhY2xvY2FsIGRpcmVjdG9yeSBvZiBhdXRvbWFrZS4KK2RubCBGb2xsb3dpbmcgaXMgYSBzaW1wbGUgc2NyaXB0IHdoaWNoIHR1cm5zIG9uIHRoZSBBQ19QUk9HX0xJQlRPT0wgbWFjcm8uCitkbmwgQnV0IHRoYXQgc3RpbGwgZG9lcyBub3Qgd29yayBwcm9wZXJseSBzaW5jZSB0aGUgbWFjcm8gaXMgZXhwYW5kZWQgb3V0c2lkZQorZG5sIHRoZSBDRl9XSVRIX0xJQlRPT0wgbWFjcm86CitkbmwKK2RubAkjIS9iaW4vc2gKK2RubAlBQ0xPQ0FMPWBhY2xvY2FsIC0tcHJpbnQtYWMtZGlyYAorZG5sCWlmIHRlc3QgLXogIiRBQ0xPQ0FMIiA7IHRoZW4KK2RubAkJZWNobyBjYW5ub3QgZmluZCBhY2xvY2FsIGRpcmVjdG9yeQorZG5sCQlleGl0IDEKK2RubAllbGlmIHRlc3QgISAtZiAkQUNMT0NBTC9saWJ0b29sLm00IDsgdGhlbgorZG5sCQllY2hvIGNhbm5vdCBmaW5kIGxpYnRvb2wubTQgZmlsZQorZG5sCQlleGl0IDEKK2RubAlmaQorZG5sCQorZG5sCUxPQ0FMPWFjbG9jYWwubTQKK2RubAlPUklHPWFjbG9jYWwubTQub3JpZworZG5sCQorZG5sCXRyYXAgIm12ICRPUklHICRMT0NBTCIgMCAxIDIgNSAxNQorZG5sCXJtIC1mICRPUklHCitkbmwJbXYgJExPQ0FMICRPUklHCitkbmwJCitkbmwJIyBzZWQgdGhlIExJQlRPT0w9IGFzc2lnbm1lbnQgdG8gb21pdCB0aGUgY3VycmVudCBkaXJlY3Rvcnk/CitkbmwJc2VkIC1lICdzL15MSUJUT09MPS4qL0xJQlRPT0w9JHtMSUJUT09MLWxpYnRvb2x9LycgJEFDTE9DQUwvbGlidG9vbC5tNCA+PiRMT0NBTAorZG5sCWNhdCAkT1JJRyA+PiRMT0NBTAorZG5sCQorZG5sCWF1dG9jb25mLTI1NyAkKgorZG5sCitBQ19ERUZVTihbQ0ZfV0lUSF9MSUJUT09MXSwKK1sKK2lmZGVmKFtBQ19QUk9HX0xJQlRPT0xdLCxbCitMSUJUT09MPQorXSkKKyMgY29tbW9uIGxpYnJhcnkgbWFpbnRlbmFuY2Ugc3ltYm9scyB0aGF0IGFyZSBjb252ZW5pZW50IGZvciBsaWJ0b29sIHNjcmlwdHM6CitMSUJfQ1JFQVRFPScke0FSfSAtY3InCitMSUJfT0JKRUNUPScke09CSkVDVFN9JworTElCX1NVRkZJWD0uYQorTElCX1BSRVA9IiRSQU5MSUIiCisKKyMgc3ltYm9scyB1c2VkIHRvIHByb3AgbGlidG9vbCB1cCB0byBlbmFibGUgaXQgdG8gZGV0ZXJtaW5lIHdoYXQgaXQgc2hvdWxkIGJlCisjIGRvaW5nOgorTElCX0NMRUFOPQorTElCX0NPTVBJTEU9CitMSUJfTElOSz0nJHtDQ30nCitMSUJfSU5TVEFMTD0KK0xJQl9VTklOU1RBTEw9CisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCBsaWJyYXJpZXMgd2l0aCBsaWJ0b29sKQorQUNfQVJHX1dJVEgobGlidG9vbCwKKwlbICAtLXdpdGgtbGlidG9vbCAgICAgICAgICBnZW5lcmF0ZSBsaWJyYXJpZXMgd2l0aCBsaWJ0b29sXSwKKwlbd2l0aF9saWJ0b29sPSR3aXRodmFsXSwKKwlbd2l0aF9saWJ0b29sPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfbGlidG9vbCkKK2lmIHRlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJubyI7IHRoZW4KK2lmZGVmKFtBQ19QUk9HX0xJQlRPT0xdLFsKKwkjIG1pc3NpbmdfY29udGVudF9BQ19QUk9HX0xJQlRPT0x7eworCUFDX1BST0dfTElCVE9PTAorCSMgbWlzc2luZ19jb250ZW50X0FDX1BST0dfTElCVE9PTH19CitdLFsKKyAJaWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gInllcyIgOyB0aGVuCisJCUNGX1BBVEhfU1lOVEFYKHdpdGhfbGlidG9vbCkKKwkJTElCVE9PTD0kd2l0aF9saWJ0b29sCisJZWxzZQorIAkJQUNfUEFUSF9QUk9HKExJQlRPT0wsbGlidG9vbCkKKyAJZmkKKyAJaWYgdGVzdCAteiAiJExJQlRPT0wiIDsgdGhlbgorIAkJQUNfTVNHX0VSUk9SKENhbm5vdCBmaW5kIGxpYnRvb2wpCisgCWZpCitdKWRubAorCUxJQl9DUkVBVEU9JyR7TElCVE9PTH0gLS1tb2RlPWxpbmsgJHtDQ30gLXJwYXRoICR7REVTVERJUn0ke2xpYmRpcn0gLXZlcnNpb24taW5mbyBgY3V0IC1mMSAke3NyY2Rpcn0vVkVSU0lPTmAgJHtMSUJUT09MX09QVFN9IC1vJworCUxJQl9PQkpFQ1Q9JyR7T0JKRUNUUzoubz0ubG99JworCUxJQl9TVUZGSVg9LmxhCisJTElCX0NMRUFOPScke0xJQlRPT0x9IC0tbW9kZT1jbGVhbicKKwlMSUJfQ09NUElMRT0nJHtMSUJUT09MfSAtLW1vZGU9Y29tcGlsZScKKwlMSUJfTElOSz0nJHtMSUJUT09MfSAtLW1vZGU9bGluayAke0NDfSAke0xJQlRPT0xfT1BUU30nCisJTElCX0lOU1RBTEw9JyR7TElCVE9PTH0gLS1tb2RlPWluc3RhbGwnCisJTElCX1VOSU5TVEFMTD0nJHtMSUJUT09MfSAtLW1vZGU9dW5pbnN0YWxsJworCUxJQl9QUkVQPToKKworCSMgU2hvdyB0aGUgdmVyc2lvbiBvZiBsaWJ0b29sCisJQUNfTVNHX0NIRUNLSU5HKHZlcnNpb24gb2YgbGlidG9vbCkKKworCSMgU2F2ZSB0aGUgdmVyc2lvbiBpbiBhIGNhY2hlIHZhcmlhYmxlIC0gdGhpcyBpcyBub3QgZW50aXJlbHkgYSBnb29kCisJIyB0aGluZywgYnV0IHRoZSB2ZXJzaW9uIHN0cmluZyBmcm9tIGxpYnRvb2wgaXMgdmVyeSB1Z2x5LCBhbmQgZm9yCisJIyBidWcgcmVwb3J0cyBpdCBtaWdodCBiZSB1c2VmdWwgdG8gaGF2ZSB0aGUgb3JpZ2luYWwgc3RyaW5nLgorCWNmX2N2X2xpYnRvb2xfdmVyc2lvbj1gJExJQlRPT0wgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLWUgJy9eJC9kJyB8c2VkIC1lICcyLCRkJyAtZSAncy8oW1teKV1dKikvL2cnIC1lICdzL15bW14xLTldXSovLycgLWUgJ3MvW1teMC05Ll1dLiovLydgCisJQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfbGlidG9vbF92ZXJzaW9uKQorCWlmIHRlc3QgLXogIiRjZl9jdl9saWJ0b29sX3ZlcnNpb24iIDsgdGhlbgorCQlBQ19NU0dfRVJST1IoVGhpcyBpcyBub3QgR05VIGxpYnRvb2wpCisJZmkKKworCSMgc3BlY2lhbCBoYWNrIHRvIGFkZCAtLXRhZyBvcHRpb24gZm9yIEMrKyBjb21waWxlcgorCWNhc2UgJGNmX2N2X2xpYnRvb2xfdmVyc2lvbiBpbgorCTEuW1s1LTldXSp8W1syLTldXSopCisJCUxJQlRPT0xfQ1hYPSIkTElCVE9PTCAtLXRhZz1DWFgiCisJCUxJQlRPT0w9IiRMSUJUT09MIC0tdGFnPUNDIgorCQk7OworCSopCisJCUxJQlRPT0xfQ1hYPSIkTElCVE9PTCIKKwkJOzsKKwllc2FjCitlbHNlCisJTElCVE9PTD0iIgorCUxJQlRPT0xfQ1hYPSIiCitmaQorCit0ZXN0IC16ICIkTElCVE9PTCIgJiYgRUNIT19MVD0KKworQUNfU1VCU1QoTElCVE9PTCkKK0FDX1NVQlNUKExJQlRPT0xfQ1hYKQorQUNfU1VCU1QoTElCVE9PTF9PUFRTKQorCitBQ19TVUJTVChMSUJfQ1JFQVRFKQorQUNfU1VCU1QoTElCX09CSkVDVCkKK0FDX1NVQlNUKExJQl9TVUZGSVgpCitBQ19TVUJTVChMSUJfUFJFUCkKKworQUNfU1VCU1QoTElCX0NMRUFOKQorQUNfU1VCU1QoTElCX0NPTVBJTEUpCitBQ19TVUJTVChMSUJfTElOSykKK0FDX1NVQlNUKExJQl9JTlNUQUxMKQorQUNfU1VCU1QoTElCX1VOSU5TVEFMTCkKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX1BBVEggdmVyc2lvbjogOCB1cGRhdGVkOiAyMDA3LzA1LzEzIDEzOjE2OjM1CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgV3JhcHBlciBmb3IgQUNfQVJHX1dJVEggdG8gZW5zdXJlIHRoYXQgdXNlciBzdXBwbGllcyBhIHBhdGhuYW1lLCBub3QganVzdAorZG5sIGRlZmF1bHRpbmcgdG8geWVzL25vLgorZG5sCitkbmwgJDEgPSBvcHRpb24gbmFtZQorZG5sICQyID0gaGVscC10ZXh0CitkbmwgJDMgPSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQKK2RubCAkNCA9IGRlZmF1bHQgdmFsdWUsIHNob3duIGluIHRoZSBoZWxwLW1lc3NhZ2UsIG11c3QgYmUgYSBjb25zdGFudAorZG5sICQ1ID0gZGVmYXVsdCB2YWx1ZSwgaWYgaXQncyBhbiBleHByZXNzaW9uICYgY2Fubm90IGJlIGluIHRoZSBoZWxwLW1lc3NhZ2UKK2RubAorQUNfREVGVU4oW0NGX1dJVEhfUEFUSF0sCitbQUNfQVJHX1dJVEgoJDEsWyQyIF0oZGVmYXVsdDogaWZlbHNlKCQ0LCxlbXB0eSwkNCkpLCwKK2lmZWxzZSgkNCwsW3dpdGh2YWw9IiR7JDN9Il0sW3dpdGh2YWw9IiR7JDMtaWZlbHNlKCQ1LCwkNCwkNSl9Il0pKWRubAoraWYgaWZlbHNlKCQ1LCx0cnVlLFt0ZXN0IC1uICIkNSJdKSA7IHRoZW4KK0NGX1BBVEhfU1lOVEFYKHdpdGh2YWwpCitmaQorJDM9IiR3aXRodmFsIgorQUNfU1VCU1QoJDMpZG5sCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfUEFUSExJU1QgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDAxLzEyLzEwIDAxOjI4OjMwCitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByb2Nlc3MgYW4gb3B0aW9uIHNwZWNpZnlpbmcgYSBsaXN0IG9mIGNvbG9uLXNlcGFyYXRlZCBwYXRocy4KK2RubAorZG5sICQxID0gb3B0aW9uIG5hbWUKK2RubCAkMiA9IGhlbHAtdGV4dAorZG5sICQzID0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0CitkbmwgJDQgPSBkZWZhdWx0IHZhbHVlLCBzaG93biBpbiB0aGUgaGVscC1tZXNzYWdlLCBtdXN0IGJlIGEgY29uc3RhbnQKK2RubCAkNSA9IGRlZmF1bHQgdmFsdWUsIGlmIGl0J3MgYW4gZXhwcmVzc2lvbiAmIGNhbm5vdCBiZSBpbiB0aGUgaGVscC1tZXNzYWdlCitkbmwgJDYgPSBmbGFnIHRvIHRlbGwgaWYgd2Ugd2FudCB0byBkZWZpbmUgb3Igc3Vic3RpdHV0ZQorZG5sCitBQ19ERUZVTihbQ0ZfV0lUSF9QQVRITElTVF0sWworQUNfUkVRVUlSRShbQ0ZfUEFUSFNFUF0pCitBQ19BUkdfV0lUSCgkMSxbJDIgXShkZWZhdWx0OiBpZmVsc2UoJDQsLGVtcHR5LCQ0KSksLAoraWZlbHNlKCQ0LCxbd2l0aHZhbD0keyQzfV0sW3dpdGh2YWw9JHskMy1pZmVsc2UoJDUsLCQ0LCQ1KX1dKSlkbmwKKworSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtQQVRIU0VQfSIKK2NmX2RzdF9wYXRoPQorZm9yIGNmX3NyY19wYXRoIGluICR3aXRodmFsCitkbworICBDRl9QQVRIX1NZTlRBWChjZl9zcmNfcGF0aCkKKyAgdGVzdCAtbiAiJGNmX2RzdF9wYXRoIiAmJiBjZl9kc3RfcGF0aD0iJHtjZl9kc3RfcGF0aH06IgorICBjZl9kc3RfcGF0aD0iJHtjZl9kc3RfcGF0aH0ke2NmX3NyY19wYXRofSIKK2RvbmUKK0lGUz0iJGFjX3NhdmVfaWZzIgorCitpZmVsc2UoJDYsZGVmaW5lLFsKKyMgU3RyaXAgc2luZ2xlIHF1b3RlcyBmcm9tIHRoZSB2YWx1ZSwgZS5nLiwgd2hlbiBpdCB3YXMgc3VwcGxpZWQgYXMgYSBsaXRlcmFsCisjIGZvciAkNCBvciAkNS4KK2Nhc2UgJGNmX2RzdF9wYXRoIGluICModmkKK1wnKikKKyAgY2ZfZHN0X3BhdGg9YGVjaG8gJGNmX2RzdF9wYXRoIHxzZWQgLWUgcy9cJy8vIC1lIHMvXCdcJC8vYAorICA7OworZXNhYworY2ZfZHN0X3BhdGg9YGVjaG8gIiRjZl9kc3RfcGF0aCIgfCBzZWQgLWUgJ3MvXFxcXC9cXFxcXFxcXC9nJ2AKK10pCisKK2V2YWwgJyQzPSIkY2ZfZHN0X3BhdGgiJworQUNfU1VCU1QoJDMpZG5sCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9QVEhSRUFEIHZlcnNpb246IDIgdXBkYXRlZDogMjAwOC8wOC8yMyAxODoyNjowNQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBQT1NJWCB0aHJlYWQgbGlicmFyeS4KK0FDX0RFRlVOKFtDRl9XSVRIX1BUSFJFQURdLAorWworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCB0aGUgcHRocmVhZCBsaWJyYXJ5KQorQUNfQVJHX1dJVEgocHRocmVhZCwKKyAgICBbICAtLXdpdGgtcHRocmVhZCAgICAgICAgICB1c2UgUE9TSVggdGhyZWFkIGxpYnJhcnldLAorICAgIFt3aXRoX3B0aHJlYWQ9JHdpdGh2YWxdLAorICAgIFt3aXRoX3B0aHJlYWQ9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9wdGhyZWFkKQorCitpZiB0ZXN0ICIkd2l0aF9wdGhyZWFkIiAhPSBubyA7IHRoZW4KKyAgICBBQ19DSEVDS19IRUFERVIocHRocmVhZC5oLFsKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfUFRIUkVBRFNfSCkKKworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgd2l0aCB0aGUgcHRocmVhZCBsaWJyYXJ5KQorICAgICAgICBjZl9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCisgICAgICAgIEFDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitdLFsKKyAgICAgICAgaW50IHJjID0gcHRocmVhZF9jcmVhdGUoMCwwLDAsMCk7CitdLFt3aXRoX3B0aHJlYWQ9eWVzXSxbd2l0aF9wdGhyZWFkPW5vXSkKKyAgICAgICAgTElCUz0iJGNmX3NhdmVfTElCUyIKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkd2l0aF9wdGhyZWFkKQorCisgICAgICAgIGlmIHRlc3QgIiR3aXRoX3B0aHJlYWQiID0geWVzIDsgdGhlbgorICAgICAgICAgICAgTElCUz0iLWxwdGhyZWFkICRMSUJTIgorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCUFRIUkVBRFMpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihDYW5ub3QgbGluayB3aXRoIHB0aHJlYWQgbGlicmFyeSkKKyAgICAgICAgZmkKKyAgICBdKQorZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9SRUxfVkVSU0lPTiB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDMvMDkvMjAgMTg6MTI6NDkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQWxsb3cgbGlicmFyeSdzIHJlbGVhc2UtdmVyc2lvbiB0byBiZSBvdmVycmlkZGVuLiAgR2VuZXJhbGx5IHRoaXMgaGFwcGVucyB3aGVuIGEKK2RubCBwYWNrYWdlciBoYXMgaW5jcmVtZW50ZWQgdGhlIHJlbGVhc2UtdmVyc2lvbiBwYXN0IHRoYXQgdXNlZCBpbiB0aGUgb3JpZ2luYWwgcGFja2FnZSwKK2RubCBhbmQgd2lzaGVzIHRvIGtlZXAgZG9pbmcgdGhpcy4KK2RubAorZG5sICQxIGlzIHRoZSBwYWNrYWdlIG5hbWUsIGlmIGFueSwgdG8gZGVyaXZlIGNvcnJlc3BvbmRpbmcge3BhY2thZ2V9X01BSk9SCitkbmwgYW5kIHtwYWNrYWdlfV9NSU5PUiBzeW1ib2xzCitkbmwgc3ltYm9sLgorQUNfREVGVU4oW0NGX1dJVEhfUkVMX1ZFUlNJT05dLFsKK3Rlc3QgLXogIiRjZl9jdl9yZWxfdmVyc2lvbiIgJiYgY2ZfY3ZfcmVsX3ZlcnNpb249MC4wCitBQ19BUkdfV0lUSChyZWwtdmVyc2lvbiwKK1sgIC0td2l0aC1yZWwtdmVyc2lvbj1YWFggIG92ZXJyaWRlIGRlcml2ZWQgcmVsZWFzZSB2ZXJzaW9uXSwKK1tBQ19NU0dfV0FSTihvdmVycmlkaW5nIHJlbGVhc2UgdmVyc2lvbiAkY2ZfY3ZfcmVsX3ZlcnNpb24gdG8gJHdpdGh2YWwpCisgY2ZfY3ZfcmVsX3ZlcnNpb249JHdpdGh2YWxdKQoraWZlbHNlKCQxLCxbCisgQ0ZfTlVNQkVSX1NZTlRBWCgkY2ZfY3ZfcmVsX3ZlcnNpb24sUmVsZWFzZSB2ZXJzaW9uKQorXSxbCisgJDFfTUFKT1I9YGVjaG8gIiRjZl9jdl9yZWxfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXC4uKi8vJ2AKKyAkMV9NSU5PUj1gZWNobyAiJGNmX2N2X3JlbF92ZXJzaW9uIiB8IHNlZCAtZSAncy9eW1teLl1dKi8vJyAtZSAncy9eXC4vLycgLWUgJ3MvXC4uKi8vJ2AKKyBDRl9OVU1CRVJfU1lOVEFYKFskXSQxX01BSk9SLFJlbGVhc2UgbWFqb3ItdmVyc2lvbikKKyBDRl9OVU1CRVJfU1lOVEFYKFskXSQxX01JTk9SLFJlbGVhc2UgbWlub3ItdmVyc2lvbikKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfU1lTTU9VU0UgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDAzLzAzLzIyIDE5OjEzOjQzCitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIElmIHdlIGNhbiBjb21waWxlIHdpdGggc3lzbW91c2UsIG1ha2UgaXQgYXZhaWxhYmxlIHVubGVzcyBpdCBpcyBub3Qgd2FudGVkLgorQUNfREVGVU4oW0NGX1dJVEhfU1lTTU9VU0VdLFsKKyMgbm90IGV2ZXJ5b25lIGhhcyAidGVzdCAtYyIKK2lmIHRlc3QgLWMgL2Rldi9zeXNtb3VzZSAyPi9kZXYvbnVsbCA7IHRoZW4KK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2Ugc3lzbW91c2UpCitBQ19BUkdfV0lUSChzeXNtb3VzZSwKKwlbICAtLXdpdGgtc3lzbW91c2UgICAgICAgICB1c2Ugc3lzbW91c2UgKEZyZWVCU0QgY29uc29sZSldLAorCVtjZl93aXRoX3N5c21vdXNlPSR3aXRodmFsXSwKKwlbY2Zfd2l0aF9zeXNtb3VzZT1tYXliZV0pCisJaWYgdGVzdCAiJGNmX3dpdGhfc3lzbW91c2UiICE9IG5vIDsgdGhlbgorCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxvc3JlbGRhdGUuaD4KKyNpZiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDE3KQorI2luY2x1ZGUgPHN5cy9jb25zaW8uaD4KKyNpbmNsdWRlIDxzeXMvZmJpby5oPgorI2Vsc2UKKyNpbmNsdWRlIDxtYWNoaW5lL2NvbnNvbGUuaD4KKyNlbmRpZgorXSxbCisJc3RydWN0IG1vdXNlX2luZm8gdGhlX21vdXNlOworCWlvY3RsKDAsIENPTlNfTU9VU0VDVEwsICZ0aGVfbW91c2UpOworXSxbY2Zfd2l0aF9zeXNtb3VzZT15ZXNdLFtjZl93aXRoX3N5c21vdXNlPW5vXSkKKwlmaQorQUNfTVNHX1JFU1VMVCgkY2Zfd2l0aF9zeXNtb3VzZSkKK3Rlc3QgIiRjZl93aXRoX3N5c21vdXNlIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX1NZU01PVVNFKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9WQUxHUklORCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMTIvMTQgMTg6MDA6MjEKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQ0ZfV0lUSF9WQUxHUklORF0sWworQ0ZfTk9fTEVBS1NfT1BUSU9OKHZhbGdyaW5kLAorCVsgIC0td2l0aC12YWxncmluZCAgICAgICAgIHRlc3Q6IHVzZSB2YWxncmluZF0sCisJW1VTRV9WQUxHUklORF0pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1hPUEVOX1NPVVJDRSB2ZXJzaW9uOiAyNiB1cGRhdGVkOiAyMDA4LzA3LzI3IDExOjI2OjU3CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVHJ5IHRvIGdldCBfWE9QRU5fU09VUkNFIGRlZmluZWQgcHJvcGVybHkgdGhhdCB3ZSBjYW4gdXNlIFBPU0lYIGZ1bmN0aW9ucywKK2RubCBvciBhZGFwdCB0byB0aGUgdmVuZG9yJ3MgZGVmaW5pdGlvbnMgdG8gZ2V0IGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSwKK2RubCB3aXRob3V0IGxvc2luZyB0aGUgY29tbW9uIG5vbi1QT1NJWCBmZWF0dXJlcy4KK2RubAorZG5sIFBhcmFtZXRlcnM6CitkbmwJJDEgaXMgdGhlIG5vbWluYWwgdmFsdWUgZm9yIF9YT1BFTl9TT1VSQ0UKK2RubAkkMiBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1BPU0lYX0NfU09VUkNFCitBQ19ERUZVTihbQ0ZfWE9QRU5fU09VUkNFXSxbCisKK0FDX1JFUVVJUkUoW0NGX1BST0dfQ0NfVV9EXSkKKworY2ZfWE9QRU5fU09VUkNFPWlmZWxzZSgkMSwsNTAwLCQxKQorY2ZfUE9TSVhfQ19TT1VSQ0U9aWZlbHNlKCQyLCwxOTk1MDZMLCQyKQorCitjYXNlICRob3N0X29zIGluICModmkKK2FpeFtbNDVdXSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0FMTF9TT1VSQ0UiCisJOzsKK2ZyZWVic2QqfGRyYWdvbmZseSopICModmkKKwkjIDUueCBoZWFkZXJzIGFzc29jaWF0ZQorCSMJX1hPUEVOX1NPVVJDRT02MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCSMJX1hPUEVOX1NPVVJDRT01MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorCWNmX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9CU0RfVFlQRVMgLURfX0JTRF9WSVNJQkxFIC1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwk7OworaHB1eCopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0hQVVhfU09VUkNFIgorCTs7Citpcml4W1s1Nl1dLiopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1NHSV9TT1VSQ0UiCisJOzsKK2xpbnV4KnxnbnUqfGsqYnNkKi1nbnUpICModmkKKwlDRl9HTlVfU09VUkNFCisJOzsKK21pcmJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBvciBfUE9TSVhfU09VUkNFIGJyZWFrcyA8YXJwYS9pbmV0Lmg+CisJOzsKK25ldGJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgSVB2NiBmb3IgbHlueCBvbiBOZXRCU0QgMS42LCBicmVha3MgeHRlcm0sIGlzIG5vdCBuZWVkZWQgZm9yIG5jdXJzZXN3CisJOzsKK29wZW5ic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIHh0ZXJtIG9uIE9wZW5CU0QgMi44LCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7Citvc2ZbWzQ1XV0qKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9PU0ZfU09VUkNFIgorCTs7CitudG8tcW54KikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUU5YX1NPVVJDRSIKKwk7Oworc2NvKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBMeW54IG9uIFNDTyBVbml4IC8gT3BlblNlcnZlcgorCTs7Citzb2xhcmlzKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfX0VYVEVOU0lPTlNfXyIKKwk7OworKikKKwlBQ19DQUNIRV9DSEVDSyhpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UsY2ZfY3ZfeG9wZW5fc291cmNlLFsKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl94b3Blbl9zb3VyY2U9bm9dLAorCVtjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9YT1BFTl9TT1VSQ0UiCisJIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfeG9wZW5fc291cmNlPW5vXSwKKwlbY2ZfY3ZfeG9wZW5fc291cmNlPSRjZl9YT1BFTl9TT1VSQ0VdKQorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKwldKQorXSkKKwlpZiB0ZXN0ICIkY2ZfY3ZfeG9wZW5fc291cmNlIiAhPSBubyA7IHRoZW4KKwkJQ0ZfUkVNT1ZFX0RFRklORShDRkxBR1MsJENGTEFHUyxfWE9QRU5fU09VUkNFKQorCQlDRl9SRU1PVkVfREVGSU5FKENQUEZMQUdTLCRDUFBGTEFHUyxfWE9QRU5fU09VUkNFKQorCQl0ZXN0ICIkY2ZfY3ZfY2NfdV9kX29wdGlvbnMiID0geWVzICYmIFwKKwkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLVVfWE9QRU5fU09VUkNFIgorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRT0kY2ZfY3ZfeG9wZW5fc291cmNlIgorCWZpCisJQ0ZfUE9TSVhfQ19TT1VSQ0UoJGNmX1BPU0lYX0NfU09VUkNFKQorCTs7Citlc2FjCitdKQpkaWZmIC0tZ2l0IGEvYW5ub3VuY2UuaHRtbC5pbiBiL2Fubm91bmNlLmh0bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MTIxZQotLS0gL2Rldi9udWxsCisrKyBiL2Fubm91bmNlLmh0bWwuaW4KQEAgLTAsMCArMSw1ODggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8IS0tCisgICRJZDogYW5ub3VuY2UuaHRtbC5pbix2IDEuNzAgMjAwOC8xMS8wMiAwMTowMzowNSB0b20gRXhwICQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5Bbm5vdW5jaW5nIG5jdXJzZXMgQFZFUlNJT05APC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+CisKKzxIMT5Bbm5vdW5jaW5nIG5jdXJzZXMgQFZFUlNJT05APC9IMT4KKworVGhlIG5jdXJzZXMgKG5ldyBjdXJzZXMpIGxpYnJhcnkgaXMgYSBmcmVlIHNvZnR3YXJlIGVtdWxhdGlvbiBvZgorY3Vyc2VzIGluIFN5c3RlbSBWIFJlbGVhc2UgNC4wLCBhbmQgbW9yZS4gIEl0IHVzZXMgdGVybWluZm8gZm9ybWF0LAorc3VwcG9ydHMgcGFkcyBhbmQgY29sb3IKK2FuZCBtdWx0aXBsZSBoaWdobGlnaHRzIGFuZCBmb3JtcyBjaGFyYWN0ZXJzIGFuZCBmdW5jdGlvbi1rZXkgbWFwcGluZywKK2FuZCBoYXMgYWxsIHRoZSBvdGhlciBTWVNWLWN1cnNlcyBlbmhhbmNlbWVudHMgb3ZlciBCU0QgY3Vyc2VzLjxQPgorCitJbiBtaWQtSnVuZSAxOTk1LCB0aGUgbWFpbnRhaW5lciBvZiA0LjRCU0QgY3Vyc2VzIGRlY2xhcmVkIHRoYXQgaGUKK2NvbnNpZGVyZWQgNC40QlNEIGN1cnNlcyBvYnNvbGV0ZSwgYW5kIGVuY291cmFnZWQgdGhlIGtlZXBlcnMgb2YKK1VuaXggcmVsZWFzZXMgc3VjaCBhcyBCU0QvT1MsIEZyZWVCU0QgYW5kIE5ldEJTRCB0byBzd2l0Y2ggb3ZlciB0bworbmN1cnNlcy48UD4KKworVGhlIG5jdXJzZXMgY29kZSB3YXMgZGV2ZWxvcGVkIHVuZGVyIEdOVS9MaW51eC4KK0l0IGhhcyBiZWVuIGluIHVzZSBmb3Igc29tZSB0aW1lIHdpdGggT3BlbkJTRCBhcyB0aGUgc3lzdGVtIGN1cnNlcyBsaWJyYXJ5LAorYW5kIG9uIEZyZWVCU0QgYW5kIE5ldEJTRCBhcyBhbiBleHRlcm5hbCBwYWNrYWdlLgorSXQgc2hvdWxkIHBvcnQgZWFzaWx5IHRvIGFueSBBTlNJL1BPU0lYLWNvbmZvcm1pbmcgVU5JWC4KK0l0IGhhcyBldmVuIGJlZW4gcG9ydGVkIHRvIE9TLzIgV2FycCE8UD4KKworVGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyB0aGUgbGlicmFyeSBhbmQgc3VwcG9ydCB1dGlsaXRpZXMsIGluY2x1ZGluZyBhCit0ZXJtaW5mbyBjb21waWxlciB0aWMoMSksIGEgZGVjb21waWxlciBpbmZvY21wKDEpLCBjbGVhcigxKSwgdHB1dCgxKSwgdHNldCgxKSwKK2FuZCBhIHRlcm1jYXAgY29udmVyc2lvbiB0b29sIGNhcHRvaW5mbygxKS4gIEZ1bGwgbWFudWFsIHBhZ2VzIGFyZSBwcm92aWRlZCBmb3IKK3RoZSBsaWJyYXJ5IGFuZCB0b29scy48UD4KKworVGhlIG5jdXJzZXMgZGlzdHJpYnV0aW9uIGlzIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIEZUUCBhdAordGhlIEdOVSBkaXN0cmlidXRpb24gc2l0ZQorPEEgSFJFRj0iZnRwOi8vZnRwLmdudS5vcmcvZ251L25jdXJzZXMvIj5mdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy88L0E+Jm5ic3A7LgorPGJyPkl0IGlzIGFsc28gYXZhaWxhYmxlIGF0Cis8QSBIUkVGPSJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLyI+ZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy88L0E+Jm5ic3A7LgorCis8SDE+UmVsZWFzZSBOb3RlczwvSDE+CisKK1RoaXMgcmVsZWFzZSBpcyBkZXNpZ25lZCB0byBiZSB1cHdhcmQgY29tcGF0aWJsZSBmcm9tIG5jdXJzZXMgNS4wIHRocm91Z2ggNS42OwordmVyeSBmZXcgYXBwbGljYXRpb25zIHdpbGwgcmVxdWlyZSByZWNvbXBpbGF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorVGhlc2UgYXJlIHRoZSBoaWdobGlnaHRzIGZyb20gdGhlIGNoYW5nZS1sb2cgc2luY2UgbmN1cnNlcyA1LjYgcmVsZWFzZS4KKzxwPgorSW50ZXJmYWNlIGNoYW5nZXM6Cis8dWw+CisJPGxpPmdlbmVyYXRlIGxpbmthYmxlIHN0dWJzIGZvciBzb21lIG1hY3JvczoKKwk8YnI+CisJICBnZXRhdHRycworCis8L3VsPgorTmV3IGZlYXR1cmVzIGFuZCBpbXByb3ZlbWVudHM6Cis8dWw+CisgICAgICAgIDxsaT5saWJyYXJ5CisJPHVsPgorCQk8bGk+bmV3IGZsYXZvciBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5IHByb3ZpZGVzIHJ1ZGltZW50YXJ5CisJCSAgICBzdXBwb3J0IGZvciBQT1NJWCB0aHJlYWRzLiAgU2V2ZXJhbCBmdW5jdGlvbnMgYXJlCisJCSAgICByZWVudHJhbnQsIGJ1dCBtb3N0IHJlcXVpcmUgZWl0aGVyIGEgd2luZG93LWxldmVsIG9yCisJCSAgICBzY3JlZW4tbGV2ZWwgbXV0ZXguPGJyPgorCQkgICAgKFRoaXMgaXMgPGVtPkFQSTwvZW0+LWNvbXBhdGlibGUsCisJCSAgICAgYnV0IG5vdCA8ZW0+QUJJPC9lbT4tY29tcGF0aWJsZSB3aXRoIHRoZSBub3JtYWwgbGlicmFyeSkuCisKKwkJPGxpPmFkZCA8Y29kZT5OQ1VSU0VTX09QQVFVRTwvY29kZT4gc3ltYm9sIHRvIGN1cnNlcy5oLCB3aWxsCisJCSAgICB1c2UgdG8gbWFrZSBzdHJ1Y3RzIG9wYXF1ZSBpbiBzZWxlY3RlZCBjb25maWd1cmF0aW9ucy4KKworCQk8bGk+YWRkIDxjb2RlPk5DVVJTRVNfRVhUX0ZVTkNTPC9jb2RlPiBhbmQKKwkJICAgIDxjb2RlPk5DVVJTRVNfRVhUX0NPTE9SUzwvY29kZT4gc3ltYm9scyB0byBjdXJzZXMuaCB0byBtYWtlCisJCSAgICBpdCBzaW1wbGVyIHRvIHRlbGwgaWYgdGhlIGV4dGVuZGVkIGZ1bmN0aW9ucyBhbmQvb3IgY29sb3JzCisJCSAgICBhcmUgZGVjbGFyZWQuCisKKwkJPGxpPmFkZCB3cmVzaXplKCkgdG8gQysrIGJpbmRpbmcgCisKKwkJPGxpPmVsaW1pbmF0ZSBmaXhlZC1idWZmZXIgdnNwcmludGYoKSBjYWxscyBpbiBDKysgYmluZGluZy4KKworCQk8bGk+YWRkIHNldmVyYWwgZnVuY3Rpb25zIHRvIEMrKyBiaW5kaW5nIHdoaWNoIHdyYXAgQyBmdW5jdGlvbnMKKwkJICAgIHRoYXQgcGFzcyBhIFdJTkRPVyogcGFyYW1ldGVyLgorCisJCTxsaT5hZGFwdCBtb3VzZS1oYW5kbGluZyBjb2RlIGZyb20gbWVudSBsaWJyYXJ5IGluIGZvcm0tbGlicmFyeQorCisJCTxsaT5pbXByb3ZlIHRyYWNpbmcgZm9yIGZvcm0gbGlicmFyeSwgc2hvd2luZyBjcmVhdGVkIGZvcm1zLAorCQkgICAgZmllbGRzLCBldGMuCisKKwkJPGxpPm1ha2UgJE5DVVJTRVNfTk9fUEFERElORyBmZWF0dXJlIHdvcmsgZm9yIHRlcm1jYXAgaW50ZXJmYWNlIC4KKworCQk8bGk+YWRkIGNoZWNrIHRvIHRyYWNlLWZpbGUgb3BlbiwgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYQorCQkgICAgZGlyZWN0b3J5LCBhZGQgIi5sb2ciIHRvIHRoZSBuYW1lIGFuZCB0cnkgYWdhaW4uCisKKwkJPGxpPnNldmVyYWwgbmV3IG1hbnBhZ2VzOiAgY3Vyc19sZWdhY3kuM3gsIGN1cnNfbWVtbGVha3MuM3gsCisJCSAgICBjdXJzX29wYXF1ZS4zeCBhbmQgY3Vyc190aHJlYWRzLjN4CisJPC91bD4KKworICAgICAgICA8bGk+cHJvZ3JhbXM6CisJPHVsPgorCQk8bGk+bW9kaWZpZWQgdGhyZWUgdGVzdC1wcm9ncmFtcyB0byBkZW1vbnN0cmF0ZSB0aGUgdGhyZWFkaW5nCisJCSAgICBzdXBwb3J0IGluIHRoaXMgdmVyc2lvbjogZGl0dG8sIHJhaW4sIHdvcm0uCisKKwkJPGxpPnNldmVyYWwgbmV3IHRlc3QtcHJvZ3JhbXM6IGRlbW9fcGFuZWxzLCBkb3RzX212Y3VyLAorCQkgICAgaW5jaF93aWRlLCBpbmNocywga2V5X25hbWUsIGtleV9uYW1lcywgc2F2ZXNjcmVlbiwKKwkJICAgIHNhdmVzY3JlZW4uc2ggdGVzdF9hcnJheXMsIHRlc3RfZ2V0X3dzdHIsIHRlc3RfZ2V0c3RyLAorCQkgICAgdGVzdF9pbnN0ciwgdGVzdF9pbndzdHIgYW5kIHRlc3Rfb3BhcXVlLgorCisJCTxsaT5hZGQgPGNvZGU+YWRhY3Vyc2VzLWNvbmZpZzwvY29kZT4gdG8gdGhlIEFkYTk1IGluc3RhbGwuCisKKwkJPGxpPm1vZGlmeSB0aWMgPGNvZGU+LWY8L2NvZGU+IG9wdGlvbiB0byBmb3JtYXQgc3BhY2VzIGFzCisJCSAgICA8Y29kZT5cczwvY29kZT4gdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgbG9zdCB3aGVuIHRoYXQKKwkJICAgIGlzIHJlYWQgYmFjayBpbiB1bmZvcm1hdHRlZCBzdHJpbmdzLgorCisJCTxsaT5UaGUgPGNvZGU+dGFjazwvY29kZT4gcHJvZ3JhbSBpcyBub3cgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseQorCQkgICAgZnJvbSBuY3Vyc2VzLgorCTwvdWw+CisKKwk8bGk+dGVybWluYWwgZGF0YWJhc2UKKwk8dWw+CisJICAgIDxsaT5hZGRlZCBlbnRyaWVzOgorCQk8dWw+CisJCTxsaT48Y29kZT5FdGVybS0yNTZjb2xvcjwvY29kZT4sCisJCSAgICA8Y29kZT5FdGVybS04OGNvbG9yPC9jb2RlPiBhbmQKKwkJICAgIDxjb2RlPnJ4dnQtODhjb2xvcjwvY29kZT4KKwkJPGxpPjxjb2RlPmF0ZXJtPC9jb2RlPgorCQk8bGk+PGNvZGU+a29uc29sZS0yNTZjb2xvcjwvY29kZT4KKwkJPGxpPjxjb2RlPm1yeHZ0PC9jb2RlPgorCQk8bGk+PGNvZGU+c2NyZWVuLm1sdGVybTwvY29kZT4KKwkJPGxpPjxjb2RlPnNjcmVlbi5yeHZ0PC9jb2RlPgorCQk8bGk+PGNvZGU+dGVyYXRlcm00LjU5PC9jb2RlPiBpcyBub3cgdGhlIHByaW1hcnkgcHJpbWFyeQorCQkgICAgdGVyYXRlcm0gZW50cnksIHJlbmFtZWQgb3JpZ2luYWwgdG8KKwkJICAgIDxjb2RlPnRlcmF0ZXJtMi4zPC9jb2RlPgorCQk8bGk+PGNvZGU+OXRlcm08L2NvZGU+IHRlcm1pbmFsCisJCTxsaT5OZXdidXJ5IERhdGEgZW50cmllcworCQk8L3VsPgorCSAgICA8bGk+dXBkYXRlZC9pbXByb3ZlZCBlbnRyaWVzOgorCQk8dWw+CisJICAgICAgICA8bGk+PGNvZGU+Z25vbWU8L2NvZGU+IHRvIHZlcnNpb24gMi4yMi4zCisJCTxsaT48Y29kZT5oMTk8L2NvZGU+LCA8Y29kZT56MTAwPC9jb2RlPgorCQk8bGk+PGNvZGU+a29uc29sZTwvY29kZT4gdG8gdmVyc2lvbiAxLjYuNgorCQk8bGk+PGNvZGU+bWx0ZXJtPC9jb2RlPiwgPGNvZGU+bWx0ZXJtK3BjZmtleXM8L2NvZGU+CisJCTxsaT48Y29kZT54dGVybTwvY29kZT4sIGFuZCBidWlsZGluZy1ibG9ja3MgZm9yIGZ1bmN0aW9uLWtleXMKKwkJICAgIHRvIDxhIGhyZWY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC94dGVybS94dGVybS5sb2cuaHRtbCN4dGVybV8yMzAiPnh0ZXJtIHBhdGNoICMyMzA8L2E+LgorCQk8L3VsPgorCTwvdWw+Cis8L3VsPgorTWFqb3IgYnVnIGZpeGVzOgorPHVsPgorCTxsaT5hZGQgbG9naWMgdG8gdGljIGZvciBjYW5jZWxsaW5nIHN0cmluZ3MgaW4gdXNlci1kZWZpbmVkCisJICAgIGNhcGFiaWxpdGllcworCSAgICAodGhpcyBpcyA8ZW0+bmVlZGVkPC9lbT4gZm9yCisJICAgICBjdXJyZW50IDxjb2RlPmtvbnNvbGU8L2NvZGU+IHRlcm1pbmZvIGVudHJ5KS4KKworCTxsaT5tb2RpZnkgPGNvZGU+bWstMXN0LmF3azwvY29kZT4gc28gdGhlIGdlbmVyYXRlZCBtYWtlZmlsZSBydWxlcyBmb3IKKwkgICAgbGlua2luZyBvciBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJpZXMgZG8gbm90IGZpcnN0IHJlbW92ZSB0aGUKKwkgICAgbGlicmFyeSwgaW4gY2FzZSBpdCBpcyBpbiB1c2UsIGUuZy4sIDxjb2RlPmxpYm5jdXJzZXMuc288L2NvZGU+IGJ5CisJICAgIDxjb2RlPi9iaW4vc2g8L2NvZGU+LgorCisJPGxpPmNvcnJlY3QgY2hlY2sgZm9yIG5vdGltZW91dCgpIGluIHdnZXRjaCgpLgorCisJPGxpPmZpeCBhIHNpZ24tZXh0ZW5zaW9uIGJ1ZyBpbiBpbmZvY21wJ3MgcmVwYWlyX2Fjc2MoKSBmdW5jdGlvbi4KKworCTxsaT5jaGFuZ2Ugd2lubnN0cigpIHRvIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKworCTxsaT5tYWtlIEFkYTk1IGRlbW9fcGFuZWxzKCkgZXhhbXBsZSB3b3JrLgorCisJPGxpPmZpeCBmb3IgYWRkaW5nIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCisJPGxpPmZpbGwgaW4gZXh0ZW5kZWQtY29sb3IgcGFpciB0byBtYWtlIGNvbG9ycyB3b3JrCisJICAgIGZvciB3aWRlLWNoYXJhY3RlcnMgdXNpbmcgZXh0ZW5kZWQtY29sb3JzLgorCisJPGxpPmltcHJvdmUgcmVmcmVzaCBvZiB3aW5kb3cgb24gdG9wIG9mIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzLAorCSAgICB0YWtpbmcgaW50byBhY2NvdW50IHNwbGl0IGNoYXJhY3RlcnMgb24gbGVmdC9yaWdodCB3aW5kb3cKKwkgICAgYm91bmRhcmllcy4KKworCTxsaT5tb2RpZnkgPGNvZGU+d2luX3djaG5zdHIoKTwvY29kZT4gdG8gZW5zdXJlIHRoYXQgb25seSBhIGJhc2UgY2VsbAorCSAgICBpcyByZXR1cm5lZCBmb3IgZWFjaCBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyLgorCisJPGxpPmltcHJvdmUgPGNvZGU+d2FkZGNoKCk8L2NvZGU+IGFuZCA8Y29kZT53aW5zY2goKTwvY29kZT4gaGFuZGxpbmcgb2YKKwkgICAgRUlMU0VRIGZyb20gPGNvZGU+bWJydG93YygpPC9jb2RlPiBieSB1c2luZyA8Y29kZT51bmN0cmwoKTwvY29kZT4KKwkgICAgdG8gZGlzcGxheSBpbGxlZ2FsIGJ5dGVzIHJhdGhlciB0aGFuIHRyeWluZyB0byBhcHBlbmQgZnVydGhlciBieXRlcworCSAgICB0byBtYWtlIHVwIGEgdmFsaWQgc2VxdWVuY2UuCisKKwk8bGk+cmVzdG9yZSA8Y29kZT5jdXJzX3NldCgpPC9jb2RlPiBzdGF0ZSBhZnRlcgorCSAgICA8Y29kZT5lbmR3aW4oKTwvY29kZT4vPGNvZGU+cmVmcmVzaCgpPC9jb2RlPgorCisJPGxpPm1vZGlmeSA8Y29kZT5rZXluYW1lKCk8L2NvZGU+IHRvIHVzZSAiXlgiIGZvcm0gb25seSBpZgorCSAgICA8Y29kZT5tZXRhKCk8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCwgb3IgaWYgPGNvZGU+a2V5bmFtZSgpPC9jb2RlPgorCSAgICBpcyBjYWxsZWQgd2l0aG91dCBpbml0aWFsaXppbmcgY3Vyc2VzLCBlLmcuLCB2aWEKKwkgICAgPGNvZGU+aW5pdHNjcigpPC9jb2RlPiBvciA8Y29kZT5uZXd0ZXJtKCk8L2NvZGU+LgorCisJPGxpPm1vZGlmeSA8Y29kZT51bmN0cmwoKTwvY29kZT4gdG8gY2hlY2sgY29kZXMgaW4gMTI4LTI1NSByYW5nZSB2ZXJzdXMKKwkgICAgPGNvZGU+aXNwcmludCgpPC9jb2RlPi4KKwkgICAgSWYgdGhleSBhcmUgbm90IHByaW50YWJsZSwgYW5kIGxvY2FsZSB3YXMgc2V0LCB1c2UgYSAiTS0iIG9yICJ+IgorCSAgICBzZXF1ZW5jZS4KKworCTxsaT5pbXByb3ZlIDxjb2RlPnJlc2l6ZXRlcm0oKTwvY29kZT4gYnkgbW92aW5nIHJpcHBlZC1vZmYgbGluZXMsIGFuZAorCSAgICByZXBhaW50aW5nIHRoZSBzb2Z0LWtleXMuCisKKwk8bGk+bW9kaWZ5IGZvcm0gbGlicmFyeSB0byBhY2NlcHQgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgbmV3bGluZQorCSAgICBpbiBzZXRfZmllbGRfYnVmZmVyKCksIHdoaWNoIGlzIGNvbXBhdGlibGUgd2l0aCBTb2xhcmlzLgorCisJPGxpPnVzZSA8Y29kZT5OQ1VSU0VTX01PVVNFX01BU0soKTwvY29kZT4gaW4gZGVmaW5pdGlvbiBvZgorCSAgICA8Y29kZT5CVVRUT05fUkVMRUFTRSgpPC9jb2RlPiwgZXRjLiwgdG8gbWFrZSB0aG9zZSB3b3JrIHByb3Blcmx5CisJICAgIHdpdGggdGhlIDxjb2RlPi0tZW5hYmxlLWV4dC1tb3VzZTwvY29kZT4gY29uZmlndXJhdGlvbgorCisJPGxpPmNvcnJlY3Qgc29tZSBmdW5jdGlvbnMgaW4gQWRhOTUgYmluZGluZyB3aGljaCB3ZXJlIHVzaW5nIHJldHVybgorCSAgICB2YWx1ZSBmcm9tIEMgd2hlcmUgbm9uZSB3YXMgcmV0dXJuZWQuCisKKwk8bGk+cmV2aWV3ZWQvZml4ZWQgaXNzdWVzIHJlcG9ydGVkIGJ5IENvdmVyaXR5IGFuZCBLbG9jd29yayB0b29scy4KKzwvdWw+CisKK1BvcnRhYmlsaXR5OgorPHVsPgorICAgICAgICA8bGk+Y29uZmlndXJlIHNjcmlwdDoKKyAgICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPm5ldyBvcHRpb25zOgorICAgICAgICAgICAgPGRsPgorCisJICAgIDxkdD4tLWRpc2FibGUtYmlnLXN0cmluZ3MKKwkgICAgPGRkPmNvbnRyb2wgd2hldGhlciBzdGF0aWMgc3RyaW5nIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIGFzIHNpbmdsZQorCSAgICAgICAgbGFyZ2Ugc3RyaW5ncyAodG8gaW1wcm92ZSBzdGFydHVwIHBlcmZvcm1hbmNlKSwgb3IgYXMgYXJyYXkKKwkJb2YgaW5kaXZpZHVhbCBzdHJpbmdzLgorCisJICAgIDxkdD4tLWRpc2FibGUtcmVsaW5rCisJICAgIDxkZD5jb250cm9sIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyBhcmUgcmVsaW5rZWQgKGR1cmluZyBpbnN0YWxsKQorCQl3aGVuIHJwYXRoIGlzIGVuYWJsZWQuCisKKwkgICAgPGR0Pi0tZGlzYWJsZS10aWMtZGVwZW5kcworCSAgICA8ZGQ+bWFrZSBleHBsaWNpdCB3aGV0aGVyIHRpYyBsaWJyYXJ5IGRlcGVuZHMgb24gbmN1cnNlcy9uY3Vyc2VzdworCSAgICAgICAgbGlicmFyeS4KKworCSAgICA8ZHQ+LS1lbmFibGUtbWl4ZWQtY2FzZQorCSAgICA8ZGQ+b3ZlcnJpZGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQncyBjaGVjayBpZiB0aGUgZmlsZXN5c3RlbQorCQlzdXBwb3J0cyBtaXhlZC1jYXNlIGZpbGVuYW1lcy4KKwkgICAgICAgIFRoaXMgYWxsb3dzIG9uZSB0byBjb250cm9sIGhvdyB0aGUgdGVybWluYWwgZGF0YWJhc2UKKwkJbWFwcyB0byB0aGUgZmlsZXN5c3RlbS4KKwkJRm9yIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgbWl4ZWQtY2FzZSwgdGhlIGxpYnJhcnkKKwkJdXNlcyBnZW5lcmF0ZSAyLWNoYXJhY3RlciAoaGV4YWRlY2ltYWwpIGNvZGVzIGZvciB0aGUKKwkJbG93ZXItbGV2ZWwgb2YgdGhlIGZpbGVzeXN0ZW0gdGVybWluZm8gZGF0YWJhc2UKKworCSAgICA8ZHQ+LS1lbmFibGUtcmVlbnRyYW50CisJICAgIDxkZD5idWlsZHMgYSBkaWZmZXJlbnQgZmxhdm9yIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkgKG5jdXJzZXN0KQorCSAgICAgICAgd2hpY2ggaW1wcm92ZXMgcmVlbnRyYW50IHVzZSBvZiB0aGUKKwkJbGlicmFyeSBieSByZWR1Y2luZyBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMKKwkgICAgICAgIChzZWUgdGhlICItLXdpdGgtcHRocmVhZCIgb3B0aW9uIGZvciB0aGUgdGhyZWFkZWQgc3VwcG9ydCkuCisKKwkgICAgPGR0Pi0tZW5hYmxlLXdlYWstc3ltYm9scworCSAgICA8ZGQ+dXNlIHdlYWstc3ltYm9scyBmb3IgbGlua2luZyB0byB0aGUgUE9TSVggdGhyZWFkIGxpYnJhcnksCisJICAgICAgICBhbmQgdXNlIHRoZSBzYW1lIHNvbmFtZSBmb3IgdGhlIG5jdXJzZXMgc2hhcmVkIGxpYnJhcnkKKwkJYXMgdGhlIG5vcm1hbCBsaWJyYXJ5IChjYXZlYXQ6IHRoZSBBQkkgaXMgZm9yIHRoZSB0aHJlYWRlZAorCQlsaWJyYXJ5LCB3aGljaCBtYWtlcyBnbG9iYWwgZGF0YSBhY2Nlc3NlZCB2aWEgZnVuY3Rpb25zKS4KKworCSAgICA8ZHQ+LS13aXRoLXB0aHJlYWQKKwkgICAgPGRkPmJ1aWxkIHdpdGggdGhlIFBPU0lYIHRocmVhZCBsaWJyYXJ5ICh0ZXN0ZWQgd2l0aCBBSVgsCisJICAgICAgICBMaW51eCwgRnJlZUJTRCwgT3BlbkJTRCwgSFBVWCwgSVJJWDY0LCBTb2xhcmlzLCBUcnU2NCkuCisKKwkgICAgPGR0Pi0td2l0aC10aWNsaWIKKwkgICAgPGRkPmJ1aWxkL2luc3RhbGwgdGhlIHRpYy1zdXBwb3J0IGZ1bmN0aW9ucyBpbiBhIHNlcGFyYXRlIGxpYnJhcnkKKworICAgICAgICAgICAgPC9kbD4KKworCSAgPGxpPmltcHJvdmVkIG9wdGlvbnM6CisJICAgIDxkbD4KKworCSAgICA8ZHQ+LS1lbmFibGUtZXh0LWNvbG9ycworCSAgICA8ZGQ+cmVxdWlyZXMgdGhlIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisKKwkgICAgPGR0Pi0td2l0aC1jaHR5cGUKKwkgICAgPGRkPmlnbm9yZSBvcHRpb24gdmFsdWUgInVuc2lnbmVkIiBpcyBhbHdheXMgYWRkZWQgdG8KKwkJdGhlIHR5cGUgaW4gY3Vyc2VzLmg7IGRvIHRoZSBzYW1lIGZvciAtLXdpdGgtbW1hc2stdC4KKworCSAgICA8ZHQ+LS13aXRoLWRtYWxsb2MKKwkgICAgPGRkPmJ1aWxkLWZpeCBmb3IgcmVkZWZpbml0aW9uIG9mIDxjb2RlPnN0cm5kdXA8L2NvZGU+LgorCisJICAgIDxkdD4tLXdpdGgtaGFzaGVkLWRiCisJICAgIDxkZD5hY2NlcHRzIGEgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBpbnN0YWxsLXByZWZpeCBvZiBhIGdpdmVuCisJICAgICAgICBCZXJrZWxleSBEYXRhYmFzZS4KKworCSAgICA8ZHQ+LS13aXRoLWhhc2hlZC1kYgorCSAgICA8ZGQ+dGhlICRMSUJTIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyB0aGUgc2VhcmNoIGZvciB0aGUgZGIKKwkJbGlicmFyeS4KKworCSAgICA8ZHQ+LS13aXRob3V0LWhhc2hlZC1kYgorCSAgICA8ZGQ+YXNzdW1lZCB3aGVuICItLWRpc2FibGUtZGF0YWJhc2UiIGlzIHVzZWQuCisKKwkgICAgPC9kbD4KKworCTwvdWw+CisKKwk8bGk+b3RoZXIgY29uZmlndXJlL2J1aWxkIGlzc3VlczoKKwkgIDx1bD4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgTHlueE9TCisJICA8bGk+bW9kaWZ5IHNoYXJlZC1saWJyYXJ5IHJ1bGVzIHRvIGFsbG93IEZyZWVCU0QgMy54IHRvIHVzZSBycGF0aC4KKwkgIDxsaT5idWlsZC1maXggZm9yIEZyZWVCU0QgImNvbnRlbXBvcmFyeSIgVFRZIGludGVyZmFjZS4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgQUlYIHdpdGggbGlidG9vbC4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgRGFyd2luIGFuZCBsaWJ0b29sLgorCSAgPGxpPm1vZGlmeSBCZU9TLXNwZWNpZmljIGlmZGVmJ3MgdG8gYnVpbGQgb24gSGFpa3UuCisJICA8bGk+Y29ycmVjdGVkIGdjYyBvcHRpb25zIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMKKwkgICAgICBhbmQgSVJJWDY0LgorCSAgPGxpPmNoYW5nZSBzaGFyZWQtbGlicmFyeSBjb25maWd1cmF0aW9uIGZvciBPcGVuQlNELCBtYWtlIHJwYXRoIHdvcmsuCisJICA8bGk+YnVpbGQtZml4ZXMgZm9yIHVzaW5nIGxpYnV0ZjgsIGUuZy4sIG9uIE9wZW5CU0QgMy43CisJICA8bGk+YWRkICItZSIgb3B0aW9uIGluIG5jdXJzZXMvTWFrZWZpbGUuaW4gd2hlbiBnZW5lcmF0aW5nIHNvdXJjZS1maWxlcworCSAgICAgIHRvIGZvcmNlIGVhcmxpZXIgZXhpdCBpZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgZmFpbHMgdW5leHBlY3RlZGx5LgorCSAgPGxpPmFkZCBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGZvciBRTlguCisJICA8bGk+Y2hhbmdlIGRlbGltaXRlciBpbiA8Y29kZT5NS2xpYl9nZW4uc2g8L2NvZGU+IGZyb20gJyUnIHRvICdAJywgdG8KKwkgICAgICBhdm9pZCBzdWJzdGl0dXRpb24gYnkgSUJNIHhsYyB0byAnIycgYXMgcGFydCBvZiBpdHMgZXh0ZW5zaW9ucyB0bworCSAgICAgIGRpZ3JhcGhzLgorCTwvdWw+CisKKwk8bGk+bGlicmFyeToKKwk8dWw+CisJPGxpPnJld3JpdGUgd3JhcHBlciBmb3IgPGNvZGU+d2NydG9tYigpPC9jb2RlPiwgbWFraW5nIGl0IHdvcmsgb24KKwkgICAgU29sYXJpcy4gIFRoaXMgaXMgdXNlZCBpbiB0aGUgZm9ybSBsaWJyYXJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoCisJICAgIG9mIHRoZSBidWZmZXIgbmVlZGVkIGJ5IDxjb2RlPmZpZWxkX2J1ZmZlcjwvY29kZT4uCisJPGxpPmFkZC91c2UgY29uZmlndXJlIHNjcmlwdCBtYWNybyBDRl9TSUdfQVRPTUlDX1QsIHVzZSB0aGUgY29ycmVzcG9uZGluZworCSAgICB0eXBlIGZvciBkYXRhIG1hbmlwdWxhdGVkIGJ5IHNpZ25hbCBoYW5kbGVycy4KKwk8bGk+c2V0IGxvY2FsZSBpbiBtaXNjL25jdXJzZXMtY29uZmlnLmluIHNpbmNlIGl0IHVzZXMgYSByYW5nZQorCTxsaT5kaXNhYmxlIEdQTSBtb3VzZSBzdXBwb3J0IHdoZW4gJFRFUk0gZG9lcyBub3QgaGFwcGVuIHRvIGNvbnRhaW4KKwkgICAgImxpbnV4Iiwgc2luY2UgR3BtX09wZW4oKSBubyBsb25nZXIgbGltaXRzIGl0cyBhc3NlcnRpb24gdG8gdGVybWluYWxzCisJICAgIHRoYXQgaXQgbWlnaHQgaGFuZGxlLCBlLmcuLCB3aXRoaW4gInNjcmVlbiIgaW4geHRlcm0uCisJPGxpPnJlc2V0IG1vdXNlIGZpbGUtZGVzY3JpcHRvciB3aGVuIHVubG9hZGluZyBHUE0gbGlicmFyeS4KKwk8L3VsPgorCisJPGxpPnRlc3QgcHJvZ3JhbXM6CisJPHVsPgorCTxsaT51cGRhdGUgdGVzdCBwcm9ncmFtcyB0byBidWlsZC93b3JrIHdpdGggdmFyaW91cyBVTklYIGN1cnNlcyBmb3IKKwkgICAgY29tcGFyaXNvbnMuCisJPC91bD4KKzwvdWw+CisKKzxIMT5GZWF0dXJlcyBvZiBOY3Vyc2VzPC9IMT4KKworVGhlIG5jdXJzZXMgcGFja2FnZSBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggU1ZyNCAoU3lzdGVtIFYgUmVsZWFzZSA0KSBjdXJzZXM6CisKKzxVTD4KKzxMST5BbGwgMjU3IG9mIHRoZSBTVnI0IGNhbGxzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCAoYW5kIGFyZSBkb2N1bWVudGVkKS4KKzxMST5GdWxsIHN1cHBvcnQgZm9yIFNWcjQgY3Vyc2VzIGZlYXR1cmVzIGluY2x1ZGluZyBrZXlib2FyZCBtYXBwaW5nLCBjb2xvciwKK2Zvcm1zLWRyYXdpbmcgd2l0aCBBQ1MgY2hhcmFjdGVycywgYW5kIGF1dG9tYXRpYyByZWNvZ25pdGlvbiBvZiBrZXlwYWQKK2FuZCBmdW5jdGlvbiBrZXlzLgorPExJPkFuIGVtdWxhdGlvbiBvZiB0aGUgU1ZyNCBwYW5lbHMgbGlicmFyeSwgc3VwcG9ydGluZworYSBzdGFjayBvZiB3aW5kb3dzIHdpdGggYmFja2luZyBzdG9yZSwgaXMgaW5jbHVkZWQuCis8TEk+QW4gZW11bGF0aW9uIG9mIHRoZSBTVnI0IG1lbnVzIGxpYnJhcnksIHN1cHBvcnRpbmcKK2EgdW5pZm9ybSBidXQgZmxleGlibGUgaW50ZXJmYWNlIGZvciBtZW51IHByb2dyYW1taW5nLCBpcyBpbmNsdWRlZC4KKzxMST5BbiBlbXVsYXRpb24gb2YgdGhlIFNWcjQgZm9ybSBsaWJyYXJ5LCBzdXBwb3J0aW5nCitkYXRhIGNvbGxlY3Rpb24gdGhyb3VnaCBvbi1zY3JlZW4gZm9ybXMsIGlzIGluY2x1ZGVkLgorPExJPkJpbmFyeSB0ZXJtaW5mbyBlbnRyaWVzIGdlbmVyYXRlZCBieSB0aGUgbmN1cnNlcyB0aWMoMSkgaW1wbGVtZW50YXRpb24KK2FyZSBiaXQtZm9yLWJpdC1jb21wYXRpYmxlIHdpdGggdGhlIGVudHJ5IGZvcm1hdCBTVnI0IGN1cnNlcyB1c2VzLgorPExJPlRoZSB1dGlsaXRpZXMgaGF2ZSBvcHRpb25zIHRvIGFsbG93IHlvdSB0byBmaWx0ZXIgdGVybWluZm8KK2VudHJpZXMgZm9yIHVzZSB3aXRoIGxlc3MgY2FwYWJsZSA8U1RST05HPmN1cnNlczwvU1RST05HPi88U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+Cit2ZXJzaW9ucyBzdWNoIGFzIHRoZSBIUC9VWCBhbmQgQUlYIHBvcnRzLjwvVUw+CisKK1RoZSBuY3Vyc2VzIHBhY2thZ2UgYWxzbyBoYXMgbWFueSB1c2VmdWwgZXh0ZW5zaW9ucyBvdmVyIFNWcjQ6CisKKzxVTD4KKzxMST5UaGUgQVBJIGlzIDgtYml0IGNsZWFuIGFuZCBiYXNlLWxldmVsIGNvbmZvcm1hbnQgd2l0aCB0aGUgWC9PUEVOIGN1cnNlcworc3BlY2lmaWNhdGlvbiwgWFNJIGN1cnNlcyAodGhhdCBpcywgaXQgaW1wbGVtZW50cyBhbGwgQkFTRSBsZXZlbCBmZWF0dXJlcywKK2FuZCBtb3N0IEVYVEVOREVEIGZlYXR1cmVzKS4KK0l0IGluY2x1ZGVzIG1hbnkgZnVuY3Rpb24gY2FsbHMgbm90IHN1cHBvcnRlZCB1bmRlciBTVnI0IGN1cnNlcworKGJ1dCBwb3J0YWJpbGl0eSBvZiBhbGwKK2NhbGxzIGlzIGRvY3VtZW50ZWQgc28geW91IGNhbiB1c2UgdGhlIFNWcjQgc3Vic2V0IG9ubHkpLgorPExJPlVubGlrZSBTVnIzIGN1cnNlcywgbmN1cnNlcyBjYW4gd3JpdGUgdG8gdGhlIHJpZ2h0bW9zdC1ib3R0b21tb3N0IGNvcm5lcgorb2YgdGhlIHNjcmVlbiBpZiB5b3VyIHRlcm1pbmFsIGhhcyBhbiBpbnNlcnQtY2hhcmFjdGVyIGNhcGFiaWxpdHkuCis8TEk+QWRhOTUgYW5kIEMrKyBiaW5kaW5ncy4KKzxMST5TdXBwb3J0IGZvciBtb3VzZSBldmVudCByZXBvcnRpbmcgd2l0aCBYIFdpbmRvdyB4dGVybQorYW5kIEZyZWVCU0QgYW5kIE9TLzIgY29uc29sZSB3aW5kb3dzLgorPExJPkV4dGVuZGVkIG1vdXNlIHN1cHBvcnQgdmlhIEFsZXNzYW5kcm8gUnViaW5pJ3MgZ3BtIHBhY2thZ2UuCis8TEk+VGhlIGZ1bmN0aW9uIDxDT0RFPndyZXNpemUoKTwvQ09ERT4gYWxsb3dzIHlvdSB0byByZXNpemUgd2luZG93cywgcHJlc2VydmluZwordGhlaXIgZGF0YS4KKzxMST5UaGUgZnVuY3Rpb24gPENPREU+dXNlX2RlZmF1bHRfY29sb3JzKCk8L0NPREU+IGFsbG93cyB5b3UgdG8KK3VzZSB0aGUgdGVybWluYWwncyBkZWZhdWx0IGNvbG9ycyBmb3IgdGhlIGRlZmF1bHQgY29sb3IgcGFpciwKK2FjaGlldmluZyB0aGUgZWZmZWN0IG9mIHRyYW5zcGFyZW50IGNvbG9ycy4KKzxMST5UaGUgZnVuY3Rpb25zIDxDT0RFPmtleW9rKCk8L0NPREU+CithbmQgPENPREU+ZGVmaW5lX2tleSgpPC9DT0RFPiBhbGxvdworeW91IHRvIGJldHRlciBjb250cm9sIHRoZSB1c2Ugb2YgZnVuY3Rpb24ga2V5cywKK2UuZy4sIGRpc2FibGluZyB0aGUgbmN1cnNlcyBLRVlfTU9VU0UsCitvciBieSBkZWZpbmluZyBtb3JlIHRoYW4gb25lIGNvbnRyb2wgc2VxdWVuY2UgdG8gbWFwIHRvIGEgZ2l2ZW4ga2V5IGNvZGUuCis8TEk+U3VwcG9ydCBmb3IgMjU2LWNvbG9yIHRlcm1pbmFscywgc3VjaCBhcyBtb2Rlcm4geHRlcm0sIHdoZW4gY29uZmlndXJlZAordXNpbmcgdGhlIDxjb2RlPi0tZW5hYmxlLWV4dC1jb2xvcnM8L2NvZGU+IG9wdGlvbi4KKzxMST5TdXBwb3J0IGZvciAxNi1jb2xvciB0ZXJtaW5hbHMsIHN1Y2ggYXMgYWl4dGVybSBhbmQgbW9kZXJuIHh0ZXJtLgorPExJPkJldHRlciBjdXJzb3ItbW92ZW1lbnQgb3B0aW1pemF0aW9uLiAgVGhlIHBhY2thZ2Ugbm93IGZlYXR1cmVzIGEKK2N1cnNvci1sb2NhbC1tb3ZlbWVudCBjb21wdXRhdGlvbiBtb3JlIGVmZmljaWVudCB0aGFuIGVpdGhlciBCU0Qncworb3IgU3lzdGVtIFYncy4KKzxMST5TdXBlciBoYXJkd2FyZSBzY3JvbGxpbmcgc3VwcG9ydC4gIFRoZSBzY3JlZW4tdXBkYXRlIGNvZGUgaW5jb3Jwb3JhdGVzCithIG5vdmVsLCBzaW1wbGUsIGFuZCBjaGVhcCBhbGdvcml0aG0gdGhhdCBlbmFibGVzIGl0IHRvIG1ha2Ugb3B0aW1hbAordXNlIG9mIGhhcmR3YXJlIHNjcm9sbGluZywgbGluZS1pbnNlcnRpb24sIGFuZCBsaW5lLWRlbGV0aW9uCitmb3Igc2NyZWVuLWxpbmUgbW92ZW1lbnRzLiAgVGhpcyBhbGdvcml0aG0gaXMgbW9yZSBwb3dlcmZ1bCB0aGFuCit0aGUgNC40QlNEIGN1cnNlcyBxdWlja2NoKCkgcm91dGluZS4KKzxMST5SZWFsIHN1cHBvcnQgZm9yIHRlcm1pbmFscyB3aXRoIHRoZSBtYWdpYy1jb29raWUgZ2xpdGNoLiAgVGhlCitzY3JlZW4tdXBkYXRlIGNvZGUgd2lsbCByZWZyYWluIGZyb20gZHJhd2luZyBhIGhpZ2hsaWdodCBpZiB0aGUgbWFnaWMtCitjb29raWUgdW5hdHRyaWJ1dGVkIHNwYWNlcyByZXF1aXJlZCBqdXN0IGJlZm9yZSB0aGUgYmVnaW5uaW5nIGFuZAorYWZ0ZXIgdGhlIGVuZCB3b3VsZCBzdGVwIG9uIGEgbm9uLXNwYWNlIGNoYXJhY3Rlci4gIEl0IHdpbGwKK2F1dG9tYXRpY2FsbHkgc2hpZnQgaGlnaGxpZ2h0IGJvdW5kYXJpZXMgd2hlbiBkb2luZyBzbyB3b3VsZCBtYWtlIGl0Citwb3NzaWJsZSB0byBkcmF3IHRoZSBoaWdobGlnaHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmlzdWFsIGFwcGVhcmFuY2UKK29mIHRoZSBzY3JlZW4uCis8TEk+SXQgaXMgcG9zc2libGUgdG8gZ2VuZXJhdGUgdGhlIGxpYnJhcnkgd2l0aCBhIGxpc3Qgb2YgcHJlLWxvYWRlZAorZmFsbGJhY2sgZW50cmllcyBsaW5rZWQgdG8gaXQgc28gdGhhdCBpdCBjYW4gc2VydmUgdGhvc2UgdGVybWluYWwgdHlwZXMgZXZlbgord2hlbiBubyB0ZXJtaW5mbyB0cmVlIG9yIHRlcm1jYXAgZmlsZSBpcyBhY2Nlc3NpYmxlICh0aGlzIG1heSBiZSB1c2VmdWwKK2ZvciBzdXBwb3J0IG9mIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtcyB0aGF0IG11c3QgcnVuIGluIHNpbmdsZS11c2VyIG1vZGUpLgorPExJPlRoZSB0aWMoMSkvY2FwdG9pbmZvIHV0aWxpdHkgcHJvdmlkZWQgd2l0aCBuY3Vyc2VzIGhhcyB0aGUKK2FiaWxpdHkgdG8gdHJhbnNsYXRlIG1hbnkgdGVybWNhcHMgZnJvbSB0aGUgWEVOSVgsIElCTSBhbmQKK0FUJmFtcDtUIGV4dGVuc2lvbiBzZXRzLgorPExJPkEgQlNELWxpa2UgdHNldCgxKSB1dGlsaXR5IGlzIHByb3ZpZGVkLgorPExJPlRoZSBuY3Vyc2VzIGxpYnJhcnkgYW5kIHV0aWxpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVhZCB0ZXJtaW5mbworZW50cmllcyBmcm9tICRIT01FLy50ZXJtaW5mbyBpZiBpdCBleGlzdHMsIGFuZCBjb21waWxlIHRvIHRoYXQgZGlyZWN0b3J5CitpZiBpdCBleGlzdHMgYW5kIHRoZSB1c2VyIGhhcyBubyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBkaXJlY3RvcnkuCitUaGlzIGZlYXR1cmUgbWFrZXMgaXQgZWFzaWVyIGZvciB1c2VycyB0byBoYXZlIHBlcnNvbmFsIHRlcm1pbmZvIGVudHJpZXMKK3dpdGhvdXQgZ2l2aW5nIHVwIGFjY2VzcyB0byB0aGUgc3lzdGVtIHRlcm1pbmZvIGRpcmVjdG9yeS4KKzxMST5Zb3UgbWF5IHNwZWNpZnkgYSBwYXRoIG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgY29tcGlsZWQKK2Rlc2NyaXB0aW9ucyB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNSU5GT19ESVJTICh0aGlzCitnZW5lcmFsaXplcyB0aGUgZmVhdHVyZSBwcm92aWRlZCBieSBURVJNSU5GTyB1bmRlciBzdG9jayBTeXN0ZW0gVi4pCis8TEk+SW4gdGVybWluZm8gc291cmNlIGZpbGVzLCB1c2UgY2FwYWJpbGl0aWVzIG1heSByZWZlciBub3QganVzdCB0bworb3RoZXIgZW50cmllcyBpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZSAoYXMgaW4gU3lzdGVtIFYpIGJ1dCBhbHNvIHRvCitjb21waWxlZCBlbnRyaWVzIGluIGVpdGhlciB0aGUgc3lzdGVtIHRlcm1pbmZvIGRpcmVjdG9yeSBvciB0aGUgdXNlcidzCiskSE9NRS8udGVybWluZm8gZGlyZWN0b3J5LgorPExJPkEgc2NyaXB0ICg8U1RST05HPmNhcGNvbnZlcnQ8L1NUUk9ORz4pIGlzIHByb3ZpZGVkIHRvIGhlbHAgQlNEIHVzZXJzCit0cmFuc2l0aW9uIGZyb20gdGVybWNhcCB0byB0ZXJtaW5mby4gIEl0IGdhdGhlcnMgdGhlIGluZm9ybWF0aW9uIGluIGEKK1RFUk1DQVAgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kL29yIGEgfi8udGVybWNhcCBsb2NhbCBlbnRyaWVzIGZpbGUKK2FuZCBjb252ZXJ0cyBpdCB0byBhbiBlcXVpdmFsZW50IGxvY2FsIHRlcm1pbmZvIHRyZWUgdW5kZXIgJEhPTUUvLnRlcm1pbmZvLgorPExJPkF1dG9tYXRpYyBmYWxsYmFjayB0byB0aGUgL2V0Yy90ZXJtY2FwIGZpbGUgY2FuIGJlIGNvbXBpbGVkIGluCit3aGVuIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBidWlsZCBhIHRlcm1pbmZvIHRyZWUuICBUaGlzIGZlYXR1cmUgaXMgbmVpdGhlcgorZmFzdCBub3IgY2hlYXAsIHlvdSBkb24ndCB3YW50IHRvIHVzZSBpdCB1bmxlc3MgeW91IGhhdmUgdG8sCitidXQgaXQncyB0aGVyZS4KKzxMST5UaGUgdGFibGUtb2YtZW50cmllcyB1dGlsaXR5IDxTVFJPTkc+dG9lPC9TVFJPTkc+IG1ha2VzIGl0IGVhc3kgZm9yIHVzZXJzIHRvCitzZWUgZXhhY3RseSB3aGF0IHRlcm1pbmFsIHR5cGVzIGFyZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4KKzxMST5UaGUgbGlicmFyeSBtZWV0cyB0aGUgWFNJIHJlcXVpcmVtZW50IHRoYXQgZXZlcnkgbWFjcm8gZW50cnkKK3BvaW50IGhhdmUgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHdoaWNoIG1heSBiZSBsaW5rZWQgKGFuZCB3aWxsIGJlCitwcm90b3R5cGUtY2hlY2tlZCkgaWYgdGhlIG1hY3JvIGRlZmluaXRpb24gaXMgZGlzYWJsZWQgd2l0aAorPENPREU+I3VuZGVmPC9DT0RFPi4KKzxMST5BbiBIVE1MICJJbnRyb2R1Y3Rpb24gdG8gUHJvZ3JhbW1pbmcgd2l0aCBOQ1VSU0VTIiBkb2N1bWVudCBwcm92aWRlcworYSBuYXJyYXRpdmUgaW50cm9kdWN0aW9uIHRvIHRoZSBjdXJzZXMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgorPC9VTD4KKworPEgxPlN0YXRlIG9mIHRoZSBQYWNrYWdlPC9IMT4KKworTnVtZXJvdXMgYnVncyBwcmVzZW50IGluIGVhcmxpZXIgdmVyc2lvbnMgaGF2ZSBiZWVuIGZpeGVkOyB0aGUKK2xpYnJhcnkgaXMgZmFyIG1vcmUgcmVsaWFibGUgdGhhbiBpdCB1c2VkIHRvIGJlLiAgQm91bmRzIGNoZWNraW5nIGluIG1hbnkKK2BkYW5nZXJvdXMnIGVudHJ5IHBvaW50cyBoYXMgYmVlbiBpbXByb3ZlZC4gIFRoZSBjb2RlIGlzIG5vdyB0eXBlLXNhZmUKK2FjY29yZGluZyB0byBnY2MgLVdhbGwuICBUaGUgbGlicmFyeSBoYXMgYmVlbiBjaGVja2VkIGZvciBtYWxsb2MgbGVha3MgYW5kCithcmVuYSBjb3JydXB0aW9uIGJ5IHRoZSBQdXJpZnkgbWVtb3J5LWFsbG9jYXRpb24gdGVzdGVyLjxQPgorCitUaGUgbmN1cnNlcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucworaW5jbHVkaW5nICh2ZXJzaW9ucyBzdGFydGluZyB3aXRoIHRob3NlIG5vdGVkKToKKzxETD4KKzxEVD4gY2RrCis8REQ+IEN1cnNlcyBEZXZlbG9wbWVudCBLaXQKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLzwvQT4KKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly93d3cudmV4dXMuY2EvcHJvZHVjdHMvQ0RLLyI+aHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvPC9hPgorPERUPiBkZWQKKzxERD4gZGlyZWN0b3J5LWVkaXRvcgorPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RlZC8iPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kZWQvPC9BPgorPERUPiBkaWFsb2cKKzxERD4gdGhlIHVuZGVybHlpbmcgYXBwbGljYXRpb24gdXNlZCBpbiBTbGFja3dhcmUncyBzZXR1cCwgYW5kIHRoZSBiYXNpcworZm9yIHNpbWlsYXIgYXBwbGljYXRpb25zIG9uIEdOVS9MaW51eC4KKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWFsb2cvIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlhbG9nLzwvQT4KKzxEVD4gbHlueAorPEREPiB0aGUgY2hhcmFjdGVyLXNjcmVlbiBXV1cgYnJvd3NlcgorPGJyPgorPEEgSFJFRj0iaHR0cDovL2x5bnguaXNjLm9yZy9yZWxlYXNlLyI+aHR0cDovL2x5bnguaXNjLm9yZy9yZWxlYXNlLzwvQT4KKzxEVD4gTWlkbmlnaHQgQ29tbWFuZGVyCis8REQ+IGZpbGUgbWFuYWdlcgorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5pYmlibGlvLm9yZy9tYy8iPmh0dHA6Ly93d3cuaWJpYmxpby5vcmcvbWMvPC9BPgorPERUPiBtdXR0Cis8REQ+IG1haWwgdXRpbGl0eQorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5tdXR0Lm9yZy8iPmh0dHA6Ly93d3cubXV0dC5vcmcvPC9BPgorPERUPiBuY2Z0cAorPEREPiBmaWxlLXRyYW5zZmVyIHV0aWxpdHkKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly93d3cubmNmdHAuY29tLyI+aHR0cDovL3d3dy5uY2Z0cC5jb20vPC9BPgorPERUPiBudmkKKzxERD4gTmV3IHZpIHZlcnNpb25zIDEuNTAgYXJlIGFibGUgdG8gdXNlIG5jdXJzZXMgdmVyc2lvbnMgMS45LjcgYW5kIGxhdGVyLgorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5ib3N0aWMuY29tL3ZpLyI+aHR0cDovL3d3dy5ib3N0aWMuY29tL3ZpLzwvQT4KKzxicj4KKzxEVD4gcGluZm8KKzxERD4gTHlueC1saWtlIGluZm8gYnJvd3Nlci4KKzxBIEhSRUY9Imh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvcGluZm8vIj5odHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL3BpbmZvLzwvQT4KKzxEVD4gdGluCis8REQ+IG5ld3NyZWFkZXIsIHN1cHBvcnRpbmcgY29sb3IsIE1JTUUKKzxBIEhSRUY9Imh0dHA6Ly93d3cudGluLm9yZy8iPmh0dHA6Ly93d3cudGluLm9yZy88L0E+Cis8L0RMPgorYXMgd2VsbCBhcyBzb21lIHRoYXQgdXNlIG5jdXJzZXMgZm9yIHRoZSB0ZXJtaW5mbyBzdXBwb3J0IGFsb25lOgorPERMPgorPERUPiBtaW5pY29tCis8REQ+IHRlcm1pbmFsIGVtdWxhdG9yCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS8iPgoraHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL21pbmljb20vPC9BPgorPERUPiB2aWxlCis8REQ+IHZpLWxpa2UtZW1hY3MKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC92aWxlLyI+aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3ZpbGUvPC9BPgorPC9ETD4KKzxQPgorCitUaGUgbmN1cnNlcyBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBzZWxlY3Rpb24gb2YgdGVzdCBwcm9ncmFtcyAoaW5jbHVkaW5nCithIGZldyBnYW1lcykuCisKKzxIMj5XaG8ncyBXaG8gYW5kIFdoYXQncyBXaGF0PC9IMj4KKworWmV5ZCBCZW4tSGFsaW0KK3N0YXJ0ZWQgaXQgZnJvbSBhIHByZXZpb3VzIHBhY2thZ2UgcGN1cnNlcywgd3JpdHRlbiBieSBQYXZlbCBDdXJ0aXMuCitFcmljIFMuIFJheW1vbmQKK2NvbnRpbnVlZCBkZXZlbG9wbWVudC4KK0omdXVtbDtyZ2VuIFBmZWlmZXIgd3JvdGUgbW9zdCBvZiB0aGUgZm9ybSBhbmQgbWVudSBsaWJyYXJpZXMuCitPbmdvaW5nIHdvcmsgaXMgYmVpbmcgZG9uZSBieQorPEEgSFJFRj0ibWFpbHRvOmRpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldCI+VGhvbWFzIERpY2tleTwvQT4uCitUaG9tYXMgRGlja2V5CithY3RzIGFzIHRoZSBtYWludGFpbmVyIGZvciB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAord2hpY2ggaG9sZHMgdGhlIGNvcHlyaWdodCBvbiBuY3Vyc2VzLgorQ29udGFjdCB0aGUgY3VycmVudCBtYWludGFpbmVycyBhdAorPEEgSFJFRj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPmJ1Zy1uY3Vyc2VzQGdudS5vcmc8L0E+LgorPFA+CisKK1RvIGpvaW4gdGhlIG5jdXJzZXMgbWFpbGluZyBsaXN0LCBwbGVhc2Ugd3JpdGUgZW1haWwgdG8KKzxDT0RFPmJ1Zy1uY3Vyc2VzLXJlcXVlc3RAZ251Lm9yZzwvQ09ERT4gY29udGFpbmluZyB0aGUgbGluZToKKzxQUkU+CisgICAgICAgICAgICAgc3Vic2NyaWJlICZsdDtuYW1lJmd0O0AmbHQ7aG9zdC5kb21haW4mZ3Q7Cis8L1BSRT4KKworVGhpcyBsaXN0IGlzIG9wZW4gdG8gYW55b25lIGludGVyZXN0ZWQgaW4gaGVscGluZyB3aXRoIHRoZSBkZXZlbG9wbWVudCBhbmQKK3Rlc3Rpbmcgb2YgdGhpcyBwYWNrYWdlLjxQPgorCitCZXRhIHZlcnNpb25zIG9mIG5jdXJzZXMgYW5kIHBhdGNoZXMgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZSBhcmUgbWFkZSBhdmFpbGFibGUgYXQKKzxBIEhSRUY9ImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvIj5mdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLzwvQT4mbmJzcDsuCisKKzxIMj5GdXR1cmUgUGxhbnM8L0gyPgorPFVMPgorPExJPkV4dGVuZGVkLWxldmVsIFhQRzQgY29uZm9ybWFuY2UsIHdpdGggaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydC4KKzxMST5Qb3J0cyB0byBtb3JlIHN5c3RlbXMsIGluY2x1ZGluZyBET1MgYW5kIFdpbmRvd3MuCis8L1VMPgorV2UgbmVlZCBwZW9wbGUgdG8gaGVscCB3aXRoIHRoZXNlIHByb2plY3RzLiAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHdvcmtpbmcKK29uIHRoZW0sIHBsZWFzZSBqb2luIHRoZSBuY3Vyc2VzIGxpc3QuCisKKzxIMj5PdGhlciBSZWxhdGVkIFJlc291cmNlczwvSDI+CisKK1RoZSBkaXN0cmlidXRpb24gcHJvdmlkZXMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5mby1mb3JtYXQKK3Rlcm1pbmFsIGRlc2NyaXB0aW9uIGZpbGUgb25jZSBtYWludGFpbmVkIGJ5Cis8QSBIUkVGPSJodHRwOi8vd3d3LmNhdGIub3JnL35lc3IvdGVybWluZm8vIj5FcmljIFJheW1vbmQ8L0E+Jm5ic3A7LgorVW5saWtlIHRoZSBvbGRlciB2ZXJzaW9uLCB0aGUgdGVybWNhcCBhbmQgdGVybWluZm8gZGF0YSBhcmUgcHJvdmlkZWQKK2luIHRoZSBzYW1lIGZpbGUsIGFuZCBwcm92aWRlcyBzZXZlcmFsIHVzZXItZGVmaW5hYmxlIGV4dGVuc2lvbnMKK2JleW9uZCB0aGUgWC9PcGVuIHNwZWNpZmljYXRpb24uPFA+CisKK1lvdSBjYW4gZmluZCBsb3RzIG9mIGluZm9ybWF0aW9uIG9uIHRlcm1pbmFsLXJlbGF0ZWQgdG9waWNzCitub3QgY292ZXJlZCBpbiB0aGUgdGVybWluZm8gZmlsZSBhdAorPEEgSFJFRj0iaHR0cDovL3d3dy5jcy51dGsuZWR1L35zaHVmb3JkL3Rlcm1pbmFsX2luZGV4Lmh0bWwiPlJpY2hhcmQgU2h1Zm9yZCdzCithcmNoaXZlPC9BPiZuYnNwOy4KKzwvQk9EWT4KKzwvSFRNTD4KKzwhLS0KKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6aHRtbAorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyBmaWxsLWNvbHVtbjo3MAorIyBFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2MrKy9NYWtlZmlsZS5pbiBiL2MrKy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ1ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvYysrL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjM5IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjg0IDIwMDcvMDQvMjggMTU6Mjk6MTIgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorIworIyAgU2ltcGxlIG1ha2VmaWxlIGZvciBjKysgd2luZG93IGNsYXNzIGRlbW8KKworIyB0dXJuIG9mZiBfYWxsXyBzdWZmaXggcnVsZXM7IHdlJ2xsIGdlbmVyYXRlIG91ciBvd24KKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorCitDRl9NRkxBR1MgCT0gQGNmX2N2X21ha2VmbGFnc0AKK0BTRVRfTUFLRUAKK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IC4uL0BERlRfT0JKX1NVQkRJUkAKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitsaWJkaXIJCT0gQGxpYmRpckAKK2luY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAKKworTElCVE9PTAkJPSBATElCVE9PTF9DWFhACitMSUJUT09MX0NMRUFOCT0gQExJQl9DTEVBTkAKK0xJQlRPT0xfQ09NUElMRQk9IEBMSUJfQ09NUElMRUAKK0xJQlRPT0xfTElOSwk9IEBMSUJfTElOS0AKK0xJQlRPT0xfSU5TVEFMTAk9IEBMSUJfSU5TVEFMTEAKK0xJQlRPT0xfVU5JTlNUQUxMID0gQExJQl9VTklOU1RBTExACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0xJQgk9IEBJTlNUQUxMQCBASU5TVEFMTF9MSUJACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBUgkJPSBAQVJACitBUl9PUFRTCQk9IEBBUl9PUFRTQAorCitDWFhfQVIJCT0gQENYWF9BUkAKK0NYWF9BUl9PUFRTCT0gQENYWF9BUl9PUFRTQAorUkFOTElCCQk9IEBMSUJfUFJFUEAKKworQ1hYCQk9IEBDWFhACitDUFAJCT0gQENYWENQUEAKK0NYWEZMQUdTCT0gQENYWEZMQUdTQCBARVhUUkFfQ1hYRkxBR1NACitDWFhMSUJTCQk9IEBDWFhMSUJTQAorCitJTkNESVIJCT0gLi4vaW5jbHVkZQorQ1BQRkxBR1MJPSAtSS4uL2MrKyAtSSQoSU5DRElSKSAtSSQoc3JjZGlyKSAtREhBVkVfQ09ORklHX0ggQENQUEZMQUdTQAorCitDQwkJPSAke0NYWH0KK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDWFhGTEFHUykKKworQ0ZMQUdTX0xJQlRPT0wJPSAkKENDRkxBR1MpCitDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ1hYX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitOQ1VSU0VTX01BSk9SCT0gQE5DVVJTRVNfTUFKT1JACitOQ1VSU0VTX01JTk9SCT0gQE5DVVJTRVNfTUlOT1JACitSRUxfVkVSU0lPTiAgICAgPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKKworTE9DQUxfTElCRElSCT0gQHRvcF9idWlsZGRpckAvbGliCisKK0xJTksJCT0gQExJTktfUFJPR1NAICQoTElCVE9PTF9MSU5LKSBAQ1hYTERGTEFHU0AKK1NITElCX0RJUlMJPSAtTC4uL2xpYgorU0hMSUJfTElTVAk9ICQoU0hMSUJfRElSUykgLWxuY3Vyc2VzQExJQl9TVUZGSVhAIEBTSExJQl9MSVNUQAorCitMSUJST09UCQk9IG5jdXJzZXMrKworCitMSUJOQU1FX0xJQlRPT0wJPSBATElCX1BSRUZJWEAkKExJQlJPT1QpQExJQl9TVUZGSVhALmxhCitMSUJOQU1FX05PUk1BTAk9IEBMSUJfUFJFRklYQCQoTElCUk9PVClATElCX1NVRkZJWEAuYQorTElCTkFNRQkJPSBATElCX1BSRUZJWEAkKExJQlJPT1QpQENYWF9MSUJfU1VGRklYQAorCitMSU5LX0ZMQUdTCT0gQEVYVFJBX0xERkxBR1NAIC1MLi4vbGliIC1sJChMSUJST09UKUBMSUJfU1VGRklYQAorCitMSU5LX0xJQlRPT0wJPSBARVhUUkFfTERGTEFHU0AgLUwuLi9saWIgLi4vbGliLyQoTElCTkFNRSkKK0xJTktfTk9STUFMCT0gJChMSU5LX0ZMQUdTKQorTElOS19ERUJVRwk9ICQoTElOS19GTEFHUykKK0xJTktfUFJPRklMRQk9ICQoTElOS19GTEFHUykKK0xJTktfU0hBUkVECT0gJChMSU5LX0ZMQUdTKQorCitURVNUX0FSR1MJPSBATERGTEFHU19TVEFUSUNAIEBURVNUX0FSR1NAIEBMREZMQUdTX1NIQVJFREAgCisKK0xERkxBR1MJCT0gJChURVNUX0FSR1MpIEBMREZMQUdTQCBcCisJQExEX01PREVMQCBATElCU0AgQExPQ0FMX0xERkxBR1NAICQoQ1hYTElCUykKKworTERGTEFHU19MSUJUT09MCT0gJChMREZMQUdTKSAkKENGTEFHU19MSUJUT09MKQorTERGTEFHU19OT1JNQUwJPSAkKExERkxBR1MpICQoQ0ZMQUdTX05PUk1BTCkKK0xERkxBR1NfREVCVUcJPSAkKExERkxBR1MpICQoQ0ZMQUdTX0RFQlVHKQorTERGTEFHU19QUk9GSUxFCT0gJChMREZMQUdTKSAkKENGTEFHU19QUk9GSUxFKQorTERGTEFHU19TSEFSRUQJPSAkKExERkxBR1MpICQoQ0ZMQUdTX1NIQVJFRCkgQExEX1NIQVJFRF9PUFRTQAorCitMREZMQUdTX0RFRkFVTFQJPSAkKExJTktfQERGVF9VUFJfTU9ERUxAKSAkKExERkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitBVVRPX1NSQwk9IFwKKwkJZXRpcC5oCisKK2FsbCBcCitsaWJzIDo6CQkkKEFVVE9fU1JDKSAuLi9saWIvJChMSUJOQU1FKQorCithbGwgOjoJCWRlbW8keAorCitzb3VyY2VzIDoJJChBVVRPX1NSQykKKworZGVwZW5kIDoKKwordGFnczoKKwljdGFncyAqLltoXSAqLmNjCisKKyMgQnVpbGQgYSBjb252ZW50aW9uYWwgbGlicmFyeSBmb3IgaW5zdGFsbGluZywgc2luY2UgYSBzaGFyZWQgbGlicmFyeSB3b3VsZAorIyBwdWxsIGluIGFsbCBvZiB0aGUgbmN1cnNlcyBsaWJyYXJpZXMgKHBhbmVsLCBtZW51LCBmb3JtLCBuY3Vyc2VzKSBhcyBkaXJlY3QKKyMgZGVwZW5kZW5jaWVzLgorTElCX09CSlMgPSBcCisJJChNT0RFTCkvY3Vyc2VzZiRvIFwKKwkkKE1PREVMKS9jdXJzZXNtJG8gXAorCSQoTU9ERUwpL2N1cnNlc3ckbyBcCisJJChNT0RFTCkvY3Vyc2VzcGFkJG8gXAorCSQoTU9ERUwpL2N1cnNlc3AkbyBcCisJJChNT0RFTCkvY3Vyc3NsayRvIFwKKwkkKE1PREVMKS9jdXJzZXNhcHAkbyBcCisJJChNT0RFTCkvY3Vyc2VzbWFpbiRvCisKKy4uL2xpYi8kKExJQk5BTUVfTk9STUFMKSA6ICQoTElCX09CSlMpCisJJChDWFhfQVIpICQoQ1hYX0FSX09QVFMpICRAICQ/CisJJChSQU5MSUIpICRACisKKy4uL2xpYi8kKExJQk5BTUVfTElCVE9PTCkgOiAkKExJQl9PQkpTKQorCWNkIC4uL2xpYiAmJiAkKExJQlRPT0xfTElOSykgJChDWFgpICQoQ1hYRkxBR1MpIFwKKwkJLW8gJChMSUJOQU1FKSAkKExJQl9PQkpTOiRvPS5sbykgXAorCQktcnBhdGggJChJTlNUQUxMX1BSRUZJWCkkKGxpYmRpcikgXAorCQktdmVyc2lvbi1pbmZvICQoTkNVUlNFU19NQUpPUik6JChOQ1VSU0VTX01JTk9SKSAkKFNITElCX0xJU1QpCisKK09CSlNfREVNTyA9ICQoTU9ERUwpL2RlbW8kbworCiskKE1PREVMKS9kZW1vJG8gOiAkKHNyY2RpcikvZGVtby5jYyBcCisJJChjdXJzZXNmX2gpICQoY3Vyc2VzbV9oKSAkKGN1cnNlc2FwcF9oKQorCitkZW1vJHg6CSQoT0JKU19ERU1PKSBcCisJLi4vbGliLyQoTElCTkFNRSkgIFwKKwlAVEVTVF9ERVBTQAorCUBFQ0hPX0xJTktAICQoTElOSykgLW8gJEAgJChPQkpTX0RFTU8pICQoTERGTEFHU19ERUZBVUxUKQorCitldGlwLmg6CSQoc3JjZGlyKS9ldGlwLmguaW4gJChzcmNkaXIpL2VkaXRfY2ZnLnNoCisJY3AgJChzcmNkaXIpL2V0aXAuaC5pbiAkQAorCXNoICQoc3JjZGlyKS9lZGl0X2NmZy5zaCAuLi9pbmNsdWRlL25jdXJzZXNfY2ZnLmggJEAKKworJChERVNURElSKSQobGliZGlyKSA6CisJc2ggJChzcmNkaXIpLy4uL21rZGlycy5zaCAkQAorCitpbnN0YWxsIFwKK2luc3RhbGwubGliczo6IC4uL2xpYi8kKExJQk5BTUUpICQoREVTVERJUikkKGxpYmRpcikKKwkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMX0xJQikgLi4vbGliLyQoTElCTkFNRSkgJChERVNURElSKSQobGliZGlyKS8kKExJQk5BTUUpCisKK3VuaW5zdGFsbCBcCit1bmluc3RhbGwubGliczo6CisJLSQoTElCVE9PTF9VTklOU1RBTEwpIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvJChMSUJOQU1FKQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5paSAqLmxuICouYXRhYyB0cmFjZQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCS1zaCAtYyAiaWYgdGVzdCAtbiAnJHgnIDsgdGhlbiAkKE1BS0UpIGNsZWFuIHg9Jyc7IGZpIgorCS1ybSAtcmYgJChNT0RFTCkvU3VuV1NfY2FjaGUKKwktJChMSUJUT09MX0NMRUFOKSBybSAtZiBkZW1vJHggJChBVVRPX1NSQykgLi4vbGliLyQoTElCTkFNRSkgJChMSUJfT0JKUykgJChPQkpTX0RFTU8pCisJLXJtIC1yZiAubGlicworCitkaXN0Y2xlYW4gOjogY2xlYW4KKwktcm0gLWYgTWFrZWZpbGUKKworcmVhbGNsZWFuIDo6IGRpc3RjbGVhbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2N1cnNlc3dfaAk9ICQoc3JjZGlyKS9jdXJzZXN3LmggXAorCQkgIGV0aXAuaCBcCisJCSAgJChJTkNESVIpL2N1cnNlcy5oCisKK2N1cnNlc3BfaAk9ICQoc3JjZGlyKS9jdXJzZXNwLmggXAorCQkgICQoY3Vyc2Vzd19oKSBcCisJCSAgJChJTkNESVIpL3BhbmVsLmgKKworY3Vyc2VzZl9oCT0gJChzcmNkaXIpL2N1cnNlc2YuaCBcCisJCSAgJChjdXJzZXNwX2gpIFwKKwkJICAkKElOQ0RJUikvZm9ybS5oCisKK2N1cnNlc21faAk9ICQoc3JjZGlyKS9jdXJzZXNtLmggXAorCQkgICQoY3Vyc2VzcF9oKSBcCisJCSAgJChJTkNESVIpL21lbnUuaAorCitjdXJzc2xrX2gJPSAkKHNyY2RpcikvY3Vyc3Nsay5oIFwKKwkJICAkKGN1cnNlc3dfaCkKKworY3Vyc2VzYXBwX2gJPSAkKHNyY2RpcikvY3Vyc2VzYXBwLmggXAorCQkgICQoY3Vyc3Nsa19oKQorCiskKElOQ0RJUikvZm9ybS5oIDoKKwljZCAuLi9mb3JtICYmICQoTUFLRSkgJEAKKworJChJTkNESVIpL21lbnUuaCA6CisJY2QgLi4vbWVudSAmJiAkKE1BS0UpICRACisKKyQoSU5DRElSKS9wYW5lbC5oIDoKKwljZCAuLi9wYW5lbCAmJiAkKE1BS0UpICRACisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2MrKy9ORVdTIGIvYysrL05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0ODhhNAotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9ORVdTCkBAIC0wLDAgKzEsNzEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogTkVXUyx2IDEuNCAyMDA2LzA0LzIyIDIyOjE5OjM3IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBpcyBhIGxvZyBvZiBjaGFuZ2VzIHRoYXQgdGhlIG5jdXJzZXMgQysrIGJpbmRpbmcgaGFzIGdvbmUKK3Rocm91Z2ggc3RhcnRpbmcgd2l0aCB0aGUgaW50ZWdyYXRpb24gb2YgbWVudSBhbmQgZm9ybXMgaW50ZWdyYXRpb24KK2ludG8gdGhlIGJpbmRpbmcuCisKKzk5MDczMSAgKyBJbXByb3ZlIHN1cHBvcnQgZm9yIHBhZHMuIEEgdmlld3BvcnQgd2luZG93IG1heSBub3cgYmUgYWRkZWQgdG8KKyAgICAgICAgICBhIHBhZC4gSXQgd2lsbCB0aGVuIGJlIHBvc3NpYmxlIHRvIHVzZSBhIGJ1aWx0aW4gcGFubmluZyBtZWNoYW5pc20KKyAgICAgICAgICB0byB2aWV3IHRoZSBwYWQuCisKKzk3MDkwOAkrIEltcHJvdmUgTkN1cnNlc1dpbmRvdyBjbGFzczogYWRkZWQgYWRkaXRpb25hbCBtZXRob2RzIHRvCisJICBjb3ZlciBtb3JlIG5jdXJzZXMgZnVuY3Rpb25hbGl0eS4gTWFrZSByZWZyZXNoKCkgYW5kIAorCSAgbm91dHJlZnJlc2goKSB2aXJ0dWFsIG1lbWJlcnMgdG8gYWxsb3cgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uCisJICBpbiB0aGUgTkN1cnNlc1BhbmVsIGNsYXNzLgorCSsgQ0FVVElPTjogY2hhbmdlZCBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIHZsaW5lKCkgYW5kIGhsaW5lKCkgb2YKKwkgIE5DdXJzZXNXaW5kb3cgY2xhc3MuCisJKyBNYWtlIHJlZnJlc2goKSBpbiBOQ3Vyc2VzUGFuZWwgbm9uLXN0YXRpYywgaXQgaXMgbm93IGEKKwkgIHJlaW1wbGVtZW50YXRpb24gIG9mIHJlZnJlc2goKSBpbiB0aGUgYmFzZSBjbGFzcy4gQWRkZWQgCisJICBub3V0cmVmcmVzaCgpIHRvIE5DdXJzZXNQYW5lbC4KKwkrIEFkZGVkIE5DdXJzZXNGb3JtIGFuZCByZWxhdGVkIGNsYXNzZXMgdG8gc3VwcG9ydCBsaWJmb3JtCisJICBmdW5jdGlvbmFsaXR5LgorCSsgTW92ZWQgbW9zdCBvZiBjb25maWd1cmF0aW9uIHJlbGF0ZWQgc3R1ZmYgZnJvbSBjdXJzZXN3LmggdG8KKwkgIGV0aXAuaAorCSsgQWRkZWQgTkN1cnNlc0FwcGxpY2F0aW9uIGNsYXNzIHRvIHN1cHBvcnQgZWFzeSBjb25maWd1cmF0aW9uIAorCSAgb2YgbWVudSBhbmQgZm9ybXMgcmVsYXRlZCBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgcmlwcGVkIG9mCisJICB0aXRsZSBsaW5lcyBhbmQgU29mdC1MYWJlbC1LZXlzIGZvciBhbiBhcHBsaWNhdGlvbi4KKwkrIFN1cHBvcnQgb2YgQXV0by1DbGVhbnVwIGZvciBhIG1lbnVzIGZpZWxkbGlzdC4KKwkrIENoYW5nZSBvZiByZXR1cm4gdHlwZSBmb3IgY3VycmVudF9pdGVtKCkgYW5kIG9wZXJhdG9yW10gZm9yCisJICBtZW51cy4KKwkrIEVuaGFuY2VkIGRlbW8uCis5NzA1MDIKKwkrIEludHJvZHVjZWQgdGhlIFRIUk9XIGFuZCBUSFJPV1MgZnVuY3Rpb25zL21hY3JvcyB0byBwcmVwYXJlCisJICBhIHNtb290aGVyIHRyYW5zaXRpb24gdG8gcmVhbCBleGNlcHRpb24gaGFuZGxpbmcuCisJKyBFeGNlcHRpb24gY2xhc3NlcyBwcm92aWRlZCBpbiBldGlwLmgKKwkrIEFkZGVkIHRoZSBOQ3Vyc2VzTWVudSBjbGFzcyB0byBzdXBwb3J0IGxpYm1lbnUgZnVuY3Rpb25hbGl0eS4KKwkrIFRoZSBpbmhlcml0YWNlIHJlbGF0aW9uIGJldHdlZW4gTkN1cnNlc1dpbmRvdyBhbmQgTkN1cnNlc0NvbG9yV2luZG93CisJICB3YXMga2luZCBvZiBicmFpbiBkYW1hZ2UuIE1vbm9jaHJvbWUgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgY29sb3JlZCwgc28KKwkgIHRoZSByZWxhdGlvbiBzaG91bGQgYmUganVzdCB0aGUgb3Bwb3NpdGUuIFRoaXMgd291bGQgYWxsb3cgYWxsIAorCSAgZGVyaXZlZCBjbGFzc2VzIGxpa2UgTkN1cnNlc1BhbmVsLCBOQ3Vyc2VzTWVudSBvciBOQ3Vyc2VzRm9ybSB0byAKKwkgIGhhdmUgY29sb3JzLgorCSAgVG8gcmVzb2x2ZSB0aGF0IGRlc2lnbiBmbGF3IEkgcHV0IHRoZSBjb2xvciBmdW5jdGlvbmFsaXR5IGludG8gdGhlIAorCSAgTkN1cnNlc1dpbmRvdyBjbGFzcyBhbmQgaXQgY2FuIGJlIHN3aXRjaGVkIG9uIGJ5IHRoZSBzdGF0aWMgbWVtYmVyCisJICB1c2VDb2xvcnMoKS4gTkN1cnNlc0NvbG9yV2luZG93IGlzIHN0aWxsIHRoZXJlIGZvciBjb21wYXRpYmlsaXR5CisJICByZWFzb25zLgpkaWZmIC0tZ2l0IGEvYysrL1BST0JMRU1TIGIvYysrL1BST0JMRU1TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmE3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvUFJPQkxFTVMKQEAgLTAsMCArMSwzNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBQUk9CTEVNUyx2IDEuMyAyMDA2LzA0LzIyIDIyOjE5OjM3IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBpcyBhIGxpc3Qgb2Ygb3BlbiBwcm9ibGVtcy4gVGhpcyBtYWlubHkgbGlzdHMga25vd24gbWlzc2luZyBwaWVjZXMKK2FuZCBkZXNpZ24gZmxhd3MuCisKKzEuIFRlc3RpbmchISEKKzIuIEJldHRlciBkZW1vIHByb2dyYW0KZGlmZiAtLWdpdCBhL2MrKy9SRUFETUUtZmlyc3QgYi9jKysvUkVBRE1FLWZpcnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDg3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvUkVBRE1FLWZpcnN0CkBAIC0wLDAgKzEsODAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRE1FLWZpcnN0LHYgMS45IDIwMDcvMDEvMjcgMTg6Mjc6MDkgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBDKysgaW50ZXJmYWNlIHRvIG5jdXJzZXMgcm91dGluZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzb3VyY2UgY29kZSBmb3Igc2V2ZXJhbCBDKysgY2xhc3NlcyB3aGljaAorZWFzZSB0aGUgdXNlIG9mIHdyaXRpbmcgbmN1cnNlcy1iYXNlZCBwcm9ncmFtcy4gIFRoZSBjb2RlIHdhcyBvcmlnaW5hbGx5CitkZXJpdmVkIGZyb20gdGhlIGxpYmcrKyBDdXJzZXNXaW5kb3cgY2xhc3MsIGJ1dCByZXdyaXR0ZW4gZm9yIG5jdXJzZXMuCisKK1RoZSBjbGFzc2VzIHNpbXBsaWZ5IHRoZSB1c2Ugb2Ygd2luZG93IHNwZWNpZmljIGZ1bmN0aW9ucyBieQorZW5jYXBzdWxhdGluZyB0aGVtIGluIHRoZSB3aW5kb3cgb2JqZWN0LiAgRnVuY3Rpb24gb3ZlcmxvYWRpbmcgaXMKK3VzZWQgaW4gb3JkZXIgdG8gbmFycm93IHRoZSBpbnRlcmZhY2UuICBGb3IgZXhhbXBsZSwgeW91IGRvIG5vdCBoYXZlIHRoZQorZGlzdGluY3Rpb24gYmV0d2VlbiBgcHJpbnR3JyBhbmQgYG12cHJpbnR3JyBhbnltb3JlLgorCitBIHNlY29uZCBiZW5lZml0IGlzIHRoZSByZW1vdmFsIG9mIGFsbCAjZGVmaW5lcyB3aGljaCBhcmUgaW5jbHVkZWQgaW4KK3RoZSBjdXJzZXMuaCBmaWxlLiAgVGhpcyBpcyBhIHN0ZWFkeSBjYXVzZSBvZiB0cm91YmxlIGJlY2F1c2UgbWFueQorY29tbW9uIGlkZW50aWZpZXJzIGFyZSB1c2VkLiAgSW5zdGVhZCBub3cgYWxsICNkZWZpbmVzIGFyZSBpbmxpbmUKK2Z1bmN0aW9ucywgd2hpY2ggYWxzbyBhbGxvd3Mgc3RyaWN0IHR5cGUgY2hlY2tpbmcgb2YgYXJndW1lbnRzLgorCitUaGUgbmV4dCBlbmhhbmNlbWVudCBpcyBjb2xvciBzdXBwb3J0LiBJdCB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCBieSBhIAorZGVyaXZlZCBjbGFzcy4gIFRoaXMgY2F1c2VkIHNvbWUgdHJvdWJsZSBpZiB5b3UgdGhpbmsgYWJvdXQgUGFuZWxzIG9yCitNZW51cyBhbmQgRm9ybXMgd2l0aCBjb2xvcnMuICBXZSBkZWNpZGVkIHRvIHB1dCBjb2xvciBzdXBwb3J0IGludG8gdGhlCitiYXNlIGNsYXNzIHNvIHRoYXQgYW55IGRlcml2ZWQgY2xhc3MgbWF5IHVzZSBjb2xvciBzdXBwb3J0IGFsc28uCitUaGUgaW1wbGVtZW50YXRpb24gY2hvc2VuIGhlcmUgaXMgZGlyZWN0ZWQgdG8gdW5yZXN0cmljdGVkIHVzZQorb2YgbWl4ZXMgb2YgY29sb3IgYW5kIG1vbm9jaHJvbWUgd2luZG93cy4gIFRoZSBvcmlnaW5hbCBOQ3Vyc2VzQ29sb3JXaW5kb3cKK2NsYXNzIGlzIG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KKworVGhlIGxhc3QgcG9pbnQgdG8gbWVudGlvbiBpcyB0aGUgc3VwcG9ydCBvZiBvdGhlciBwYWNrYWdlcyB0aGF0IGFyZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGUgbmN1cnNlcyBwYWNrYWdlOiAgdGhlIHBhbmVscyBsaWJyYXJ5LCB0aGUgbWVudSBsaWJyYXJ5CithbmQgdGhlIGZvcm0gbGlicmFyeS4gIFRoaXMgc3VwcG9ydCBpcyBwcm92aWRlZCBieSB0aGUgTkN1cnNlc1BhbmVsIGNsYXNzLAord2hpY2ggaXMgYWxzbyBkZXJpdmVkIGZyb20gdGhlIE5DdXJzZXNXaW5kb3cgY2xhc3MgYW5kIHRoZSBOQ3Vyc2VzTWVudQorYW5kIE5DdXJzZXNGb3JtIGNsYXNzZXMgd2hpY2ggYXJlIGRlcml2ZWQgZnJvbSBOQ3Vyc2VzUGFuZWwuICBUaGlzIGFsbG93cworYnVpbGRpbmcgaW50ZXJmYWNlcyB3aXRoIHdpbmRvd3MuCisKK1BsZWFzZSBzZWUgdGhlIGV4YW1wbGUgcHJvZ3JhbSBmb3IgYSBxdWljayBpbnRyb2R1Y3Rpb24uCisKK05vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB0aGVyZSBpcyBubyBkb2N1bWVudGF0aW9uIGZvciB0aGVzZSBjbGFzc2VzLgorSG9wZWZ1bGx5IHNvbWUgd2lsbCBiZSB3cml0dGVuIGluIHRoZSBub3QgdG9vIGRpc3RhbnQgZnV0dXJlLiAgRm9yIG5vdywKK3RvIGZpbmQgb3V0IGhvdyB0byB1c2UgdGhlIGNsYXNzZXMsIHJlYWQgdGhlIGNvZGUgYW5kIHRoZSBleGFtcGxlIHByb2dyYW0uCisKK1N1Z2dlc3Rpb25zIGZvciBlbmhhbmNlbWVudHMgYW5kIGNvbnRyaWJ1dGlvbnMgb2YgY29kZSAoYW5kIGRvY3MpIGFyZQord2VsY29tZS4gIFBsZWFzZSBsZXQgdXMga25vdyB3aGljaCBmdW5jdGlvbmFsaXR5IHlvdSBtaXNzLgorCitPcmlnaW5hbCBhdXRob3I6CisgICAgIEVyaWMgTmV3dG9uICAgICAgICAgPG5ld3RvbkByb2NreS5vc3dlZ28uZWR1PiBmb3IgRlNGJ3MgbGliZysrCisKK0F1dGhvcnMgb2YgZmlyc3QgbmN1cnNlcyBiYXNlZCByZWxlYXNlIChOQ3Vyc2VzV2luZG93LCBOQ3Vyc2VzUGFuZWwpOgorICAgICBVbHJpY2ggRHJlcHBlciAgICAgIDxkcmVwcGVyQGlyYS51a2EuZGU+CisgYW5kIEFuYXRvbHkgSXZhc3l1ayAgICAgPGFuYXRvbHlAbmljay5jc2gucml0LmVkdT4KKworQXV0aG9ycyBvZiB0aGlzIHJlbGVhc2U6CisgICAgIEp1ZXJnZW4gUGZlaWZlcgorICAgICBUaG9tYXMgRS4gRGlja2V5CmRpZmYgLS1naXQgYS9jKysvY3Vyc2VzYXBwLmNjIGIvYysrL2N1cnNlc2FwcC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGFiNmZkCi0tLSAvZGV2L251bGwKKysrIGIvYysrL2N1cnNlc2FwcC5jYwpAQCAtMCwwICsxLDE2NCBAQAorLy8gKiB0aGlzIGlzIGZvciBtYWtpbmcgZW1hY3MgaGFwcHk6IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjdXJzZXNhcHAuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGN1cnNlc2FwcC5jYyx2IDEuMTUgMjAwOC8wOC8xNiAxNzoxNTozNSB0b20gRXhwICQiKQorCit2b2lkCitOQ3Vyc2VzQXBwbGljYXRpb246OmluaXQoYm9vbCBiQ29sb3JzKQoreworICBpZiAoYkNvbG9ycykKKyAgICBOQ3Vyc2VzV2luZG93Ojp1c2VDb2xvcnMoKTsKKworICBpZiAoUm9vdF9XaW5kb3ctPmNvbG9ycygpID4gMSkgeworICAgIGJfQ29sb3JzID0gVFJVRTsKKyAgICBSb290X1dpbmRvdy0+c2V0Y29sb3IoMSk7CisgICAgUm9vdF9XaW5kb3ctPnNldHBhbGV0dGUoQ09MT1JfWUVMTE9XLENPTE9SX0JMVUUpOworICAgIFJvb3RfV2luZG93LT5zZXRjb2xvcigyKTsKKyAgICBSb290X1dpbmRvdy0+c2V0cGFsZXR0ZShDT0xPUl9DWUFOLENPTE9SX0JMVUUpOworICAgIFJvb3RfV2luZG93LT5zZXRjb2xvcigzKTsKKyAgICBSb290X1dpbmRvdy0+c2V0cGFsZXR0ZShDT0xPUl9CTEFDSyxDT0xPUl9CTFVFKTsKKyAgICBSb290X1dpbmRvdy0+c2V0Y29sb3IoNCk7CisgICAgUm9vdF9XaW5kb3ctPnNldHBhbGV0dGUoQ09MT1JfQkxBQ0ssQ09MT1JfQ1lBTik7CisgICAgUm9vdF9XaW5kb3ctPnNldGNvbG9yKDUpOworICAgIFJvb3RfV2luZG93LT5zZXRwYWxldHRlKENPTE9SX0JMVUUsQ09MT1JfWUVMTE9XKTsKKyAgICBSb290X1dpbmRvdy0+c2V0Y29sb3IoNik7CisgICAgUm9vdF9XaW5kb3ctPnNldHBhbGV0dGUoQ09MT1JfQkxBQ0ssQ09MT1JfR1JFRU4pOworICB9CisgIGVsc2UKKyAgICBiX0NvbG9ycyA9IEZBTFNFOworCisgIFJvb3RfV2luZG93LT5ia2dkKCcgJ3x3aW5kb3dfYmFja2dyb3VuZHMoKSk7Cit9CisKK05DdXJzZXNBcHBsaWNhdGlvbiogTkN1cnNlc0FwcGxpY2F0aW9uOjp0aGVBcHAgPSAwOworTkN1cnNlc1dpbmRvdyogTkN1cnNlc0FwcGxpY2F0aW9uOjp0aXRsZVdpbmRvdyA9IDA7CitOQ3Vyc2VzQXBwbGljYXRpb246OlNMS19MaW5rKiBOQ3Vyc2VzQXBwbGljYXRpb246OnNsa19zdGFjayA9IDA7CisKK05DdXJzZXNBcHBsaWNhdGlvbjo6fk5DdXJzZXNBcHBsaWNhdGlvbigpCit7CisgIFNvZnRfTGFiZWxfS2V5X1NldCogUzsKKworICBkZWxldGUgdGl0bGVXaW5kb3c7CisgIHRpdGxlV2luZG93ID0gMDsKKworICB3aGlsZSggKFM9dG9wKCkpICkgeworICAgIHBvcCgpOworICAgIGRlbGV0ZSBTOworICB9CisKKyAgZGVsZXRlIFJvb3RfV2luZG93OworICBSb290X1dpbmRvdyA9IDA7CisKKyAgOjplbmR3aW4oKTsKK30KKworaW50IE5DdXJzZXNBcHBsaWNhdGlvbjo6cmluaXQoTkN1cnNlc1dpbmRvdyYgdykKK3sKKyAgdGl0bGVXaW5kb3cgPSAmdzsKKyAgcmV0dXJuIE9LOworfQorCit2b2lkIE5DdXJzZXNBcHBsaWNhdGlvbjo6cHVzaChTb2Z0X0xhYmVsX0tleV9TZXQmIFMpCit7CisgIFNMS19MaW5rKiBMID0gbmV3IFNMS19MaW5rOworICBhc3NlcnQoTCAhPSAwKTsKKyAgTC0+cHJldiA9IHNsa19zdGFjazsKKyAgTC0+U0xLcyA9ICZTOworICBzbGtfc3RhY2sgPSBMOworICBpZiAoUm9vdF9XaW5kb3cpCisgICAgUy5zaG93KCk7Cit9CisKK2Jvb2wgTkN1cnNlc0FwcGxpY2F0aW9uOjpwb3AoKQoreworICBpZiAoc2xrX3N0YWNrKSB7CisgICAgU0xLX0xpbmsqIEwgPSBzbGtfc3RhY2s7CisgICAgc2xrX3N0YWNrID0gc2xrX3N0YWNrLT5wcmV2OworICAgIGRlbGV0ZSBMOworICAgIGlmIChSb290X1dpbmRvdykgeworICAgICAgU29mdF9MYWJlbF9LZXlfU2V0KiB4eCA9IHRvcCgpOworICAgICAgaWYgKHh4ICE9IDApCisgICAgICAgIHh4LT5zaG93KCk7CisgICAgfQorICB9CisgIHJldHVybiAoc2xrX3N0YWNrID8gRkFMU0UgOiBUUlVFKTsKK30KKworU29mdF9MYWJlbF9LZXlfU2V0KiBOQ3Vyc2VzQXBwbGljYXRpb246OnRvcCgpIGNvbnN0Cit7CisgIGlmIChzbGtfc3RhY2spCisgICAgcmV0dXJuIHNsa19zdGFjay0+U0xLczsKKyAgZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxTb2Z0X0xhYmVsX0tleV9TZXQqPigwKTsKK30KKworaW50IE5DdXJzZXNBcHBsaWNhdGlvbjo6b3BlcmF0b3IoKSh2b2lkKQoreworICBib29sIGJDb2xvcnMgPSBiX0NvbG9yczsKKyAgU29mdF9MYWJlbF9LZXlfU2V0KiBTID0gMDsKKworICBpbnQgdHMgPSB0aXRsZXNpemUoKTsKKyAgaWYgKHRzPjApCisgICAgTkN1cnNlc1dpbmRvdzo6cmlwb2ZmbGluZSh0cyxyaW5pdCk7CisgIFNvZnRfTGFiZWxfS2V5X1NldDo6TGFiZWxfTGF5b3V0IGZtdCA9IHVzZVNMS3MoKTsKKyAgaWYgKGZtdCE9U29mdF9MYWJlbF9LZXlfU2V0OjpOb25lKSB7CisgICAgUyA9IG5ldyBTb2Z0X0xhYmVsX0tleV9TZXQoZm10KTsKKyAgICBhc3NlcnQoUyAhPSAwKTsKKyAgICBpbml0X2xhYmVscygqUyk7CisgIH0KKworICBSb290X1dpbmRvdyA9IG5ldyBOQ3Vyc2VzV2luZG93KDo6c3Rkc2NyKTsKKyAgaW5pdChiQ29sb3JzKTsKKworICBpZiAodHM+MCkKKyAgICB0aXRsZSgpOworICBpZiAoZm10IT1Tb2Z0X0xhYmVsX0tleV9TZXQ6Ok5vbmUpIHsKKyAgICBwdXNoKCpTKTsKKyAgfQorCisgIHJldHVybiBydW4oKTsKK30KKworTkN1cnNlc0FwcGxpY2F0aW9uOjpOQ3Vyc2VzQXBwbGljYXRpb24oYm9vbCBiQ29sb3JzKQorICA6IGJfQ29sb3JzKGJDb2xvcnMpLAorICAgIFJvb3RfV2luZG93KE5VTEwpCit7CisgIGlmICh0aGVBcHApCisgICAgVEhST1cobmV3IE5DdXJzZXNFeGNlcHRpb24oIkFwcGxpY2F0aW9uIG9iamVjdCBhbHJlYWR5IGNyZWF0ZWQuIikpOworICBlbHNlCisgICAgdGhlQXBwID0gdGhpczsKK30KZGlmZiAtLWdpdCBhL2MrKy9jdXJzZXNhcHAuaCBiL2MrKy9jdXJzZXNhcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTk5NWQyCi0tLSAvZGV2L251bGwKKysrIGIvYysrL2N1cnNlc2FwcC5oCkBAIC0wLDAgKzEsMTc2IEBACisvLyAqIFRoaXMgbWFrZXMgZW1hY3MgaGFwcHkgLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gJElkOiBjdXJzZXNhcHAuaCx2IDEuMTEgMjAwNS8wNS8yOCAyMTo1Nzo0NCB0b20gRXhwICQKKworI2lmbmRlZiBOQ1VSU0VTX0NVUlNFU0FQUF9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19DVVJTRVNBUFBfSF9pbmNsCisKKyNpbmNsdWRlIDxjdXJzc2xrLmg+CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNBcHBsaWNhdGlvbiB7CitwdWJsaWM6CisgIHR5cGVkZWYgc3RydWN0IF9zbGtfbGluayB7ICAgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFpbnRhaW4KKyAgICBzdHJ1Y3QgX3Nsa19saW5rKiBwcmV2OyAgICAgICAgICAgLy8gYSBzdGFjayBvZiBTTEtzCisgICAgU29mdF9MYWJlbF9LZXlfU2V0KiBTTEtzOworICB9IFNMS19MaW5rOworcHJpdmF0ZToKKyAgc3RhdGljIGludCByaW5pdChOQ3Vyc2VzV2luZG93JiB3KTsgLy8gSW50ZXJuYWwgSW5pdCBmdW5jdGlvbiBmb3IgdGl0bGUKKyAgc3RhdGljIE5DdXJzZXNBcHBsaWNhdGlvbiogdGhlQXBwOyAgLy8gR2xvYmFsIHJlZi4gdG8gdGhlIGFwcGxpY2F0aW9uCisKKyAgc3RhdGljIFNMS19MaW5rKiBzbGtfc3RhY2s7CisKK3Byb3RlY3RlZDoKKyAgc3RhdGljIE5DdXJzZXNXaW5kb3cqIHRpdGxlV2luZG93OyAgLy8gVGhlIFRpdGxlIFdpbmRvdyAoaWYgYW55KQorCisgIGJvb2wgYl9Db2xvcnM7ICAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgYSBjb2xvciBhcHBsaWNhdGlvbj8KKyAgTkN1cnNlc1dpbmRvdyogUm9vdF9XaW5kb3c7ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3Rkc2NyIGVxdWl2LgorCisgIC8vIEluaXRpYWxpemF0aW9uIG9mIGF0dHJpYnV0ZXM7CisgIC8vIFJld3JpdGUgdGhpcyBpbiB5b3VyIGRlcml2ZWQgY2xhc3MgaWYgeW91IHByZWZlciBvdGhlciBzZXR0aW5ncworICB2aXJ0dWFsIHZvaWQgaW5pdChib29sIGJDb2xvcnMpOworCisgIC8vIFRoZSBudW1iZXIgb2YgbGluZXMgZm9yIHRoZSB0aXRsZSB3aW5kb3cuIERlZmF1bHQgaXMgbm8gdGl0bGUgd2luZG93CisgIC8vIFlvdSBtYXkgcmV3cml0ZSB0aGlzIGluIHlvdXIgZGVyaXZlZCBjbGFzcworICB2aXJ0dWFsIGludCB0aXRsZXNpemUoKSBjb25zdCB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHV0IHNvbWV0aGluZyBpbnRvIHRoZSB0aXRsZSB3aW5kb3cgaW5pdGlhbGx5CisgIC8vIFlvdSBtYXkgcmV3cml0ZSB0aGlzIGluIHlvdXIgZGVyaXZlZCBjbGFzcworICB2aXJ0dWFsIHZvaWQgdGl0bGUoKSB7CisgIH0KKworICAvLyBUaGUgbGF5b3V0IHVzZWQgZm9yIHRoZSBTb2Z0IExhYmVsIEtleXMuIERlZmF1bHQgaXMgdG8gaGF2ZSBubyBTTEtzLgorICAvLyBZb3UgbWF5IHJld3JpdGUgdGhpcyBpbiB5b3VyIGRlcml2ZWQgY2xhc3MKKyAgdmlydHVhbCBTb2Z0X0xhYmVsX0tleV9TZXQ6OkxhYmVsX0xheW91dCB1c2VTTEtzKCkgY29uc3QgeworICAgIHJldHVybiBTb2Z0X0xhYmVsX0tleV9TZXQ6Ok5vbmU7CisgIH0KKworICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgU0xLcy4gRGVmYXVsdCBpcyBub3RoaW5nLgorICAvLyBZb3UgbWF5IHJld3JpdGUgdGhpcyBpbiB5b3VyIGRlcml2ZWQgY2xhc3MKKyAgdmlydHVhbCB2b2lkIGluaXRfbGFiZWxzKFNvZnRfTGFiZWxfS2V5X1NldCYgUykgY29uc3QgeworICB9CisKKyAgLy8gWW91ciBkZXJpdmVkIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QKKyAgLy8gYmUgdGhlIGV4aXQgdmFsdWUgb2YgeW91ciBhcHBsaWNhdGlvbi4KKyAgdmlydHVhbCBpbnQgcnVuKCkgPSAwOworCisgIC8vIFRoZSBjb25zdHJ1Y3RvciBpcyBwcm90ZWN0ZWQsIHNvIHlvdSBtYXkgdXNlIGl0IGluIHlvdXIgZGVyaXZlZAorICAvLyBjbGFzcyBjb25zdHJ1Y3Rvci4gVGhlIGFyZ3VtZW50IHRlbGxzIHdoZXRoZXIgb3Igbm90IHlvdSB3YW50IGNvbG9ycy4KKyAgTkN1cnNlc0FwcGxpY2F0aW9uKGJvb2wgd2FudENvbG9ycyA9IEZBTFNFKTsKKworICBOQ3Vyc2VzQXBwbGljYXRpb24mIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzQXBwbGljYXRpb24mIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzQXBwbGljYXRpb24oY29uc3QgTkN1cnNlc0FwcGxpY2F0aW9uJiByaHMpCisgICAgOiBiX0NvbG9ycyhyaHMuYl9Db2xvcnMpLAorICAgICAgUm9vdF9XaW5kb3cocmhzLlJvb3RfV2luZG93KQorICB7CisgIH0KKworcHVibGljOgorICB2aXJ0dWFsIH5OQ3Vyc2VzQXBwbGljYXRpb24oKTsKKworICAvLyBHZXQgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIG9iamVjdAorICBzdGF0aWMgTkN1cnNlc0FwcGxpY2F0aW9uKiBnZXRBcHBsaWNhdGlvbigpIHsKKyAgICByZXR1cm4gdGhlQXBwOworICB9CisKKyAgLy8gVGhpcyBtZXRob2QgcnVucyB0aGUgYXBwbGljYXRpb24gYW5kIHJldHVybnMgaXRzIGV4aXQgdmFsdWUKKyAgaW50IG9wZXJhdG9yKCkodm9pZCk7CisKKyAgLy8gUHJvY2VzcyB0aGUgY29tbWFuZGxpbmUgYXJndW1lbnRzLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkKKyAgLy8gaWdub3JlcyB0aGVtLiBZb3VyIGRlcml2ZWQgY2xhc3MgbWF5IHJld3JpdGUgdGhpcy4KKyAgdmlydHVhbCB2b2lkIGhhbmRsZUFyZ3MoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgeworICB9CisKKyAgLy8gRG9lcyB0aGlzIGFwcGxpY2F0aW9uIHVzZSBjb2xvcnM/CisgIGlubGluZSBib29sIHVzZUNvbG9ycygpIGNvbnN0IHsKKyAgICByZXR1cm4gYl9Db2xvcnM7CisgIH0KKworICAvLyBQdXNoIHRoZSBLZXkgU2V0IFMgb250byB0aGUgU0xLIFN0YWNrLiBTIHRoZW4gYmVjb21lcyB0aGUgY3VycmVudCBzZXQKKyAgLy8gb2YgU29mdCBMYWJlbGxlZCBLZXlzLgorICB2b2lkIHB1c2goU29mdF9MYWJlbF9LZXlfU2V0JiBTKTsKKworICAvLyBUaHJvdyBhd2F5IHRoZSBjdXJyZW50IHNldCBvZiBTTEtzIGFuZCBtYWtlIHRoZSBwcmV2aW91cyBvbmUgdGhlCisgIC8vIG5ldyBjdXJyZW50IHNldC4KKyAgYm9vbCBwb3AoKTsKKworICAvLyBSZXRyaWV2ZSB0aGUgY3VycmVudCBzZXQgb2YgU29mdCBMYWJlbGxlZCBLZXlzLgorICBTb2Z0X0xhYmVsX0tleV9TZXQqIHRvcCgpIGNvbnN0OworCisgIC8vIEF0dHJpYnV0ZXMgdG8gdXNlIGZvciBtZW51IGFuZCBmb3JtcyBmb3JlZ3JvdW5kcworICB2aXJ0dWFsIGNodHlwZSBmb3JlZ3JvdW5kcygpIGNvbnN0IHsKKyAgICByZXR1cm4gYl9Db2xvcnMgPyBDT0xPUl9QQUlSKDEpIDogQV9CT0xEOworICB9CisKKyAgLy8gQXR0cmlidXRlcyB0byB1c2UgZm9yIG1lbnUgYW5kIGZvcm1zIGJhY2tncm91bmRzCisgIHZpcnR1YWwgY2h0eXBlIGJhY2tncm91bmRzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IENPTE9SX1BBSVIoMikgOiBBX05PUk1BTDsKKyAgfQorCisgIC8vIEF0dHJpYnV0ZXMgdG8gdXNlIGZvciBpbmFjdGl2ZSAobWVudSkgZWxlbWVudHMKKyAgdmlydHVhbCBjaHR5cGUgaW5hY3RpdmVzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IChDT0xPUl9QQUlSKDMpfEFfRElNKSA6IEFfRElNOworICB9CisKKyAgLy8gQXR0cmlidXRlcyB0byB1c2UgZm9yIChmb3JtKSBsYWJlbHMgYW5kIFNMS3MKKyAgdmlydHVhbCBjaHR5cGUgbGFiZWxzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IENPTE9SX1BBSVIoNCkgOiBBX05PUk1BTDsKKyAgfQorCisgIC8vIEF0dHJpYnV0ZXMgdG8gdXNlIGZvciBmb3JtIGJhY2tncm91bmRzCisgIHZpcnR1YWwgY2h0eXBlIGRpYWxvZ19iYWNrZ3JvdW5kcygpIGNvbnN0IHsKKyAgICByZXR1cm4gYl9Db2xvcnMgPyBDT0xPUl9QQUlSKDQpIDogQV9OT1JNQUw7CisgIH0KKworICAvLyBBdHRyaWJ1dGVzIHRvIHVzZSBhcyBkZWZhdWx0IGZvciAoZm9ybSkgd2luZG93IGJhY2tncm91bmRzCisgIHZpcnR1YWwgY2h0eXBlIHdpbmRvd19iYWNrZ3JvdW5kcygpIGNvbnN0IHsKKyAgICByZXR1cm4gYl9Db2xvcnMgPyBDT0xPUl9QQUlSKDUpIDogQV9OT1JNQUw7CisgIH0KKworICAvLyBBdHRyaWJ1dGVzIHRvIHVzZSBmb3IgdGhlIHRpdGxlIHdpbmRvdworICB2aXJ0dWFsIGNodHlwZSBzY3JlZW5fdGl0bGVzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IENPTE9SX1BBSVIoNikgOiBBX0JPTEQ7CisgIH0KKworfTsKKyAKKyNlbmRpZiAvKiBOQ1VSU0VTX0NVUlNFU0FQUF9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2MrKy9jdXJzZXNmLmNjIGIvYysrL2N1cnNlc2YuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmMTIwMgotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9jdXJzZXNmLmNjCkBAIC0wLDAgKzEsNDU0IEBACisvLyAqIHRoaXMgaXMgZm9yIG1ha2luZyBlbWFjcyBoYXBweTogLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiY3Vyc2VzZi5oIgorI2luY2x1ZGUgImN1cnNlc2FwcC5oIgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc2VzZi5jYyx2IDEuMjEgMjAwNS8wOC8xMyAxODowOTowNiB0b20gRXhwICQiKQorCitOQ3Vyc2VzRm9ybUZpZWxkOjp+TkN1cnNlc0Zvcm1GaWVsZCAoKQoreworICBpZiAoZmllbGQpCisgICAgT25FcnJvcig6OmZyZWVfZmllbGQgKGZpZWxkKSk7Cit9CisKKy8qIENvbnN0cnVjdCBhIEZJRUxEKiBhcnJheSBmcm9tIGFuIGFycmF5IG9mIE5DdXJzZXNGb3JtRmllbGQKKyAqIG9iamVjdHMuCisgKi8KK0ZJRUxEKioKK05DdXJzZXNGb3JtOjptYXBGaWVsZHMoTkN1cnNlc0Zvcm1GaWVsZCogbmZpZWxkc1tdKQoreworICBpbnQgZmllbGRDb3VudCA9IDAsbGN2OworICBGSUVMRCoqIG9sZF9maWVsZHM7CisKKyAgYXNzZXJ0KG5maWVsZHMgIT0gMCk7CisKKyAgZm9yIChsY3Y9MDsgbmZpZWxkc1tsY3ZdLT5maWVsZDsgKytsY3YpCisgICAgKytmaWVsZENvdW50OworCisgIEZJRUxEKiogZmllbGRzID0gbmV3IEZJRUxEKltmaWVsZENvdW50ICsgMV07CisKKyAgZm9yIChsY3Y9MDtuZmllbGRzW2xjdl0tPmZpZWxkOysrbGN2KSB7CisgICAgZmllbGRzW2xjdl0gPSBuZmllbGRzW2xjdl0tPmZpZWxkOworICB9CisgIGZpZWxkc1tsY3ZdID0gTlVMTDsKKworICBteV9maWVsZHMgPSBuZmllbGRzOworCisgIGlmIChmb3JtICYmIChvbGRfZmllbGRzID0gOjpmb3JtX2ZpZWxkcyhmb3JtKSkpIHsKKyAgICA6OnNldF9mb3JtX2ZpZWxkcyhmb3JtLCBzdGF0aWNfY2FzdDxGSUVMRCoqPigwKSk7CisgICAgZGVsZXRlW10gb2xkX2ZpZWxkczsKKyAgfQorICByZXR1cm4gZmllbGRzOworfQorCit2b2lkIE5DdXJzZXNGb3JtOjpzZXREZWZhdWx0QXR0cmlidXRlcygpCit7CisgIE5DdXJzZXNBcHBsaWNhdGlvbiogUyA9IE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKTsKKworICBpbnQgbiA9IGNvdW50KCk7CisgIGlmIChuID4gMCkgeworICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKykgeworICAgICAgTkN1cnNlc0Zvcm1GaWVsZCogZiA9ICgqdGhpcylbaV07CisgICAgICBpZiAoKGYtPm9wdGlvbnMoKSAmIChPX0VESVR8T19BQ1RJVkUpKT09KE9fRURJVHxPX0FDVElWRSkpIHsKKwlpZiAoUykgeworCSAgZi0+c2V0X2ZvcmVncm91bmQoUy0+Zm9yZWdyb3VuZHMoKSk7CisJICBmLT5zZXRfYmFja2dyb3VuZChTLT5iYWNrZ3JvdW5kcygpKTsKKwl9CisJZi0+c2V0X3BhZF9jaGFyYWN0ZXIoJ18nKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWlmIChTKQorCSAgZi0+c2V0X2JhY2tncm91bmQoUy0+bGFiZWxzKCkpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChTKSB7CisgICAgYmtnZCgnICd8Uy0+ZGlhbG9nX2JhY2tncm91bmRzKCkpOworICAgIGlmIChzdWIpCisgICAgICBzdWItPmJrZ2QoJyAnfFMtPmRpYWxvZ19iYWNrZ3JvdW5kcygpKTsKKyAgfQorfQorCit2b2lkCitOQ3Vyc2VzRm9ybTo6SW5pdEZvcm0oTkN1cnNlc0Zvcm1GaWVsZCogbmZpZWxkc1tdLAorCQkgICAgICBib29sIHdpdGhfZnJhbWUsCisJCSAgICAgIGJvb2wgYXV0b0RlbGV0ZV9GaWVsZHMpCit7CisgIGludCBtcm93cywgbWNvbHM7CisKKyAga2V5cGFkKFRSVUUpOworICBtZXRhKFRSVUUpOworCisgIGJfZnJhbWVkID0gd2l0aF9mcmFtZTsKKyAgYl9hdXRvRGVsZXRlID0gYXV0b0RlbGV0ZV9GaWVsZHM7CisKKyAgZm9ybSA9IHN0YXRpY19jYXN0PEZPUk0qPigwKTsKKyAgZm9ybSA9IDo6bmV3X2Zvcm0obWFwRmllbGRzKG5maWVsZHMpKTsKKyAgaWYgKCFmb3JtKQorICAgIE9uRXJyb3IgKEVfU1lTVEVNX0VSUk9SKTsKKworICBVc2VySG9vayogaG9vayA9IG5ldyBVc2VySG9vazsKKyAgaG9vay0+bV91c2VyICAgPSBOVUxMOworICBob29rLT5tX2JhY2sgICA9IHRoaXM7CisgIGhvb2stPm1fb3duZXIgID0gZm9ybTsKKyAgOjpzZXRfZm9ybV91c2VycHRyKGZvcm0sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhvb2spKTsKKworICA6OnNldF9mb3JtX2luaXQgIChmb3JtLCBfbmNfeHhfZnJtX2luaXQpOworICA6OnNldF9mb3JtX3Rlcm0gIChmb3JtLCBfbmNfeHhfZnJtX3Rlcm0pOworICA6OnNldF9maWVsZF9pbml0IChmb3JtLCBfbmNfeHhfZmxkX2luaXQpOworICA6OnNldF9maWVsZF90ZXJtIChmb3JtLCBfbmNfeHhfZmxkX3Rlcm0pOworCisgIHNjYWxlKG1yb3dzLCBtY29scyk7CisgIDo6c2V0X2Zvcm1fd2luKGZvcm0sIHcpOworCisgIGlmICh3aXRoX2ZyYW1lKSB7CisgICAgaWYgKChtcm93cyA+IGhlaWdodCgpLTIpIHx8IChtY29scyA+IHdpZHRoKCktMikpCisgICAgICBPbkVycm9yKEVfTk9fUk9PTSk7CisgICAgc3ViID0gbmV3IE5DdXJzZXNXaW5kb3coKnRoaXMsbXJvd3MsbWNvbHMsMSwxLCdyJyk7CisgICAgOjpzZXRfZm9ybV9zdWIoZm9ybSwgc3ViLT53KTsKKyAgICBiX3N1Yl9vd25lciA9IFRSVUU7CisgIH0KKyAgZWxzZSB7CisgICAgc3ViID0gc3RhdGljX2Nhc3Q8TkN1cnNlc1dpbmRvdyo+KDApOworICAgIGJfc3ViX293bmVyID0gRkFMU0U7CisgIH0KKyAgb3B0aW9uc19vbihPX05MX09WRVJMT0FEKTsKKyAgc2V0RGVmYXVsdEF0dHJpYnV0ZXMoKTsKK30KKworTkN1cnNlc0Zvcm06On5OQ3Vyc2VzRm9ybSgpCit7CisgIFVzZXJIb29rKiBob29rID0gcmVpbnRlcnByZXRfY2FzdDxVc2VySG9vayo+KDo6Zm9ybV91c2VycHRyKGZvcm0pKTsKKyAgZGVsZXRlIGhvb2s7CisgIGlmIChiX3N1Yl9vd25lcikgeworICAgIGRlbGV0ZSBzdWI7CisgICAgOjpzZXRfZm9ybV9zdWIoZm9ybSwgc3RhdGljX2Nhc3Q8V0lORE9XICo+KDApKTsKKyAgfQorICBpZiAoZm9ybSkgeworICAgIEZJRUxEKiogZmllbGRzID0gOjpmb3JtX2ZpZWxkcyhmb3JtKTsKKyAgICBpbnQgY250ID0gY291bnQoKTsKKworICAgIE9uRXJyb3IoOjpzZXRfZm9ybV9maWVsZHMoZm9ybSwgc3RhdGljX2Nhc3Q8RklFTEQqKj4oMCkpKTsKKworICAgIGlmIChiX2F1dG9EZWxldGUpIHsKKyAgICAgIGlmIChjbnQ+MCkgeworCWZvciAoaW50IGk9MDsgaSA8PSBjbnQ7IGkrKykKKwkgIGRlbGV0ZSBteV9maWVsZHNbaV07CisgICAgICB9CisgICAgICBkZWxldGVbXSBteV9maWVsZHM7CisgICAgfQorCisgICAgOjpmcmVlX2Zvcm0oZm9ybSk7CisgICAgLy8gSXQncyBlc3NlbnRpYWwgdG8gZG8gdGhpcyBhZnRlciBmcmVlX2Zvcm0oKQorICAgIGRlbGV0ZVtdIGZpZWxkczsKKyAgfQorfQorCit2b2lkCitOQ3Vyc2VzRm9ybTo6c2V0U3ViV2luZG93KE5DdXJzZXNXaW5kb3cmIG5zdWIpCit7CisgIGlmICghaXNEZXNjZW5kYW50KG5zdWIpKQorICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICBlbHNlIHsKKyAgICBpZiAoYl9zdWJfb3duZXIpCisgICAgICBkZWxldGUgc3ViOworICAgIHN1YiA9ICZuc3ViOworICAgIDo6c2V0X2Zvcm1fc3ViKGZvcm0sc3ViLT53KTsKKyAgfQorfQorCisvKiBJbnRlcm5hbCBob29rIGZ1bmN0aW9ucy4gVGhleSB3aWxsIHJvdXRlIHRoZSBob29rCisgKiBjYWxscyB0byB2aXJ0dWFsIG1ldGhvZHMgb2YgdGhlIE5DdXJzZXNGb3JtIGNsYXNzLAorICogc28gaW4gQysrIHByb3ZpZGluZyBhIGhvb2sgaXMgZG9uZSBzaW1wbHkgYnkKKyAqIGltcGxlbWVudGluZyBhIHZpcnR1YWwgbWV0aG9kIGluIGEgZGVyaXZlZCBjbGFzcworICovCit2b2lkCitfbmNfeHhfZnJtX2luaXQoRk9STSAqZikKK3sKKyAgTkN1cnNlc0Zvcm06OmdldEhvb2soZiktPk9uX0Zvcm1fSW5pdCgpOworfQorCit2b2lkCitfbmNfeHhfZnJtX3Rlcm0oRk9STSAqZikKK3sKKyAgTkN1cnNlc0Zvcm06OmdldEhvb2soZiktPk9uX0Zvcm1fVGVybWluYXRpb24oKTsKK30KKwordm9pZAorX25jX3h4X2ZsZF9pbml0KEZPUk0gKmYpCit7CisgIE5DdXJzZXNGb3JtKiBGID0gTkN1cnNlc0Zvcm06OmdldEhvb2soZik7CisgIEYtPk9uX0ZpZWxkX0luaXQgKCooRi0+Y3VycmVudF9maWVsZCAoKSkpOworfQorCit2b2lkCitfbmNfeHhfZmxkX3Rlcm0oRk9STSAqZikKK3sKKyAgTkN1cnNlc0Zvcm0qIEYgPSBOQ3Vyc2VzRm9ybTo6Z2V0SG9vayhmKTsKKyAgRi0+T25fRmllbGRfVGVybWluYXRpb24gKCooRi0+Y3VycmVudF9maWVsZCAoKSkpOworfQorCit2b2lkCitOQ3Vyc2VzRm9ybTo6T25fRm9ybV9Jbml0KCkKK3sKK30KKwordm9pZAorTkN1cnNlc0Zvcm06Ok9uX0Zvcm1fVGVybWluYXRpb24oKQoreworfQorCit2b2lkCitOQ3Vyc2VzRm9ybTo6T25fRmllbGRfSW5pdChOQ3Vyc2VzRm9ybUZpZWxkJiBmaWVsZCkKK3sKK30KKwordm9pZAorTkN1cnNlc0Zvcm06Ok9uX0ZpZWxkX1Rlcm1pbmF0aW9uKE5DdXJzZXNGb3JtRmllbGQmIGZpZWxkKQoreworfQorCisvLyBjYWxsIHRoZSBmb3JtIGRyaXZlciBhbmQgZG8gYmFzaWMgZXJyb3IgY2hlY2tpbmcuCitpbnQKK05DdXJzZXNGb3JtOjpkcml2ZXIgKGludCBjKQoreworICBpbnQgcmVzID0gOjpmb3JtX2RyaXZlciAoZm9ybSwgYyk7CisgIHN3aXRjaCAocmVzKSB7CisgIGNhc2UgRV9PSzoKKyAgY2FzZSBFX1JFUVVFU1RfREVOSUVEOgorICBjYXNlIEVfSU5WQUxJRF9GSUVMRDoKKyAgY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBPbkVycm9yIChyZXMpOworICB9CisgIHJldHVybiAocmVzKTsKK30KKwordm9pZCBOQ3Vyc2VzRm9ybTo6T25fUmVxdWVzdF9EZW5pZWQoaW50IGMpIGNvbnN0Cit7CisgIDo6YmVlcCgpOworfQorCit2b2lkIE5DdXJzZXNGb3JtOjpPbl9JbnZhbGlkX0ZpZWxkKGludCBjKSBjb25zdAoreworICA6OmJlZXAoKTsKK30KKwordm9pZCBOQ3Vyc2VzRm9ybTo6T25fVW5rbm93bl9Db21tYW5kKGludCBjKSBjb25zdAoreworICA6OmJlZXAoKTsKK30KKworc3RhdGljIGNvbnN0IGludCBDTURfUVVJVCA9IE1BWF9DT01NQU5EICsgMTsKKworTkN1cnNlc0Zvcm1GaWVsZCoKK05DdXJzZXNGb3JtOjpvcGVyYXRvcigpKHZvaWQpCit7CisgIGludCBkcnZDbW5kOworICBpbnQgZXJyOworICBpbnQgYzsKKworICBwb3N0KCk7CisgIHNob3coKTsKKyAgcmVmcmVzaCgpOworCisgIHdoaWxlICgoKGRydkNtbmQgPSB2aXJ0dWFsaXplKChjPWdldEtleSgpKSkpICE9IENNRF9RVUlUKSkgeworICAgIHN3aXRjaCgoZXJyPWRyaXZlcihkcnZDbW5kKSkpIHsKKyAgICBjYXNlIEVfUkVRVUVTVF9ERU5JRUQ6CisgICAgICBPbl9SZXF1ZXN0X0RlbmllZChjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRV9JTlZBTElEX0ZJRUxEOgorICAgICAgT25fSW52YWxpZF9GaWVsZChjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRV9VTktOT1dOX0NPTU1BTkQ6CisgICAgICBPbl9Vbmtub3duX0NvbW1hbmQoYyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEVfT0s6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgT25FcnJvcihlcnIpOworICAgIH0KKyAgfQorCisgIHVucG9zdCgpOworICBoaWRlKCk7CisgIHJlZnJlc2goKTsKKyAgcmV0dXJuIG15X2ZpZWxkc1s6OmZpZWxkX2luZGV4ICg6OmN1cnJlbnRfZmllbGQgKGZvcm0pKV07Cit9CisKKy8vIFByb3ZpZGUgYSBkZWZhdWx0IGtleSB2aXJ0dWFsaXphdGlvbi4gVHJhbnNsYXRlIHRoZSBrZXlib2FyZAorLy8gY29kZSBjIGludG8gYSBmb3JtIHJlcXVlc3QgY29kZS4KKy8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgaG9wZWZ1bGx5IHN0cmFpZ2h0Zm9yd2FyZAorLy8gbWFwcGluZyBmb3IgdGhlIG1vc3QgY29tbW9uIGtleXN0cm9rZXMgYW5kIGZvcm0gcmVxdWVzdHMuCitpbnQKK05DdXJzZXNGb3JtOjp2aXJ0dWFsaXplKGludCBjKQoreworICBzd2l0Y2goYykgeworCisgIGNhc2UgS0VZX0hPTUUgICAgICA6IHJldHVybihSRVFfRklSU1RfRklFTEQpOworICBjYXNlIEtFWV9FTkQgICAgICAgOiByZXR1cm4oUkVRX0xBU1RfRklFTEQpOworCisgIGNhc2UgS0VZX0RPV04gICAgICA6IHJldHVybihSRVFfRE9XTl9DSEFSKTsKKyAgY2FzZSBLRVlfVVAgICAgICAgIDogcmV0dXJuKFJFUV9VUF9DSEFSKTsKKyAgY2FzZSBLRVlfTEVGVCAgICAgIDogcmV0dXJuKFJFUV9QUkVWX0NIQVIpOworICBjYXNlIEtFWV9SSUdIVCAgICAgOiByZXR1cm4oUkVRX05FWFRfQ0hBUik7CisKKyAgY2FzZSBLRVlfTlBBR0UgICAgIDogcmV0dXJuKFJFUV9ORVhUX1BBR0UpOworICBjYXNlIEtFWV9QUEFHRSAgICAgOiByZXR1cm4oUkVRX1BSRVZfUEFHRSk7CisKKyAgY2FzZSBLRVlfQkFDS1NQQUNFIDogcmV0dXJuKFJFUV9ERUxfUFJFVik7CisgIGNhc2UgS0VZX0VOVEVSICAgICA6IHJldHVybihSRVFfTkVXX0xJTkUpOworICBjYXNlIEtFWV9DTEVBUiAgICAgOiByZXR1cm4oUkVRX0NMUl9GSUVMRCk7CisKKyAgY2FzZSBDVFJMKCdYJykgICAgIDogcmV0dXJuKENNRF9RVUlUKTsgICAgICAgIC8vIGVYaXQKKworICBjYXNlIENUUkwoJ0YnKSAgICAgOiByZXR1cm4oUkVRX05FWFRfRklFTEQpOyAgLy8gRm9yd2FyZAorICBjYXNlIENUUkwoJ0InKSAgICAgOiByZXR1cm4oUkVRX1BSRVZfRklFTEQpOyAgLy8gQmFja3dhcmQKKyAgY2FzZSBDVFJMKCdMJykgICAgIDogcmV0dXJuKFJFUV9MRUZUX0ZJRUxEKTsgIC8vIExlZnQKKyAgY2FzZSBDVFJMKCdSJykgICAgIDogcmV0dXJuKFJFUV9SSUdIVF9GSUVMRCk7IC8vIFJpZ2h0CisgIGNhc2UgQ1RSTCgnVScpICAgICA6IHJldHVybihSRVFfVVBfRklFTEQpOyAgICAvLyBVcAorICBjYXNlIENUUkwoJ0QnKSAgICAgOiByZXR1cm4oUkVRX0RPV05fRklFTEQpOyAgLy8gRG93bgorCisgIGNhc2UgQ1RSTCgnVycpICAgICA6IHJldHVybihSRVFfTkVYVF9XT1JEKTsKKyAgY2FzZSBDVFJMKCdUJykgICAgIDogcmV0dXJuKFJFUV9QUkVWX1dPUkQpOworCisgIGNhc2UgQ1RSTCgnQScpICAgICA6IHJldHVybihSRVFfQkVHX0ZJRUxEKTsKKyAgY2FzZSBDVFJMKCdFJykgICAgIDogcmV0dXJuKFJFUV9FTkRfRklFTEQpOworCisgIGNhc2UgQ1RSTCgnSScpICAgICA6IHJldHVybihSRVFfSU5TX0NIQVIpOworICBjYXNlIENUUkwoJ00nKSAgICAgOgorICBjYXNlIENUUkwoJ0onKSAgICAgOiByZXR1cm4oUkVRX05FV19MSU5FKTsKKyAgY2FzZSBDVFJMKCdPJykgICAgIDogcmV0dXJuKFJFUV9JTlNfTElORSk7CisgIGNhc2UgQ1RSTCgnVicpICAgICA6IHJldHVybihSRVFfREVMX0NIQVIpOworICBjYXNlIENUUkwoJ0gnKSAgICAgOiByZXR1cm4oUkVRX0RFTF9QUkVWKTsKKyAgY2FzZSBDVFJMKCdZJykgICAgIDogcmV0dXJuKFJFUV9ERUxfTElORSk7CisgIGNhc2UgQ1RSTCgnRycpICAgICA6IHJldHVybihSRVFfREVMX1dPUkQpOworICBjYXNlIENUUkwoJ0snKSAgICAgOiByZXR1cm4oUkVRX0NMUl9FT0YpOworCisgIGNhc2UgQ1RSTCgnTicpICAgICA6IHJldHVybihSRVFfTkVYVF9DSE9JQ0UpOworICBjYXNlIENUUkwoJ1AnKSAgICAgOiByZXR1cm4oUkVRX1BSRVZfQ0hPSUNFKTsKKworICBkZWZhdWx0OgorICAgIHJldHVybihjKTsKKyAgfQorfQorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVzZXIgRGVmaW5lZCBGaWVsZHR5cGVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworYm9vbCBfbmNfeHhfZmxkX2ZjaGVjayhGSUVMRCAqZiwgY29uc3Qgdm9pZCAqdSkKK3sKKyAgTkN1cnNlc0Zvcm1GaWVsZCogRiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TkN1cnNlc0Zvcm1GaWVsZCo+KGNvbnN0X2Nhc3Q8dm9pZCAqPih1KSk7CisgIGFzc2VydChGICE9IDApOworICBVc2VyRGVmaW5lZEZpZWxkVHlwZSogdWRmID0gcmVpbnRlcnByZXRfY2FzdDxVc2VyRGVmaW5lZEZpZWxkVHlwZSo+KEYtPmZpZWxkdHlwZSgpKTsKKyAgYXNzZXJ0KHVkZiAhPSAwKTsKKyAgcmV0dXJuIHVkZi0+ZmllbGRfY2hlY2soKkYpOworfQorCitib29sIF9uY194eF9mbGRfY2NoZWNrKGludCBjLCBjb25zdCB2b2lkICp1KQoreworICBOQ3Vyc2VzRm9ybUZpZWxkKiBGID0gcmVpbnRlcnByZXRfY2FzdDxOQ3Vyc2VzRm9ybUZpZWxkKj4oY29uc3RfY2FzdDx2b2lkICo+KHUpKTsKKyAgYXNzZXJ0KEYgIT0gMCk7CisgIFVzZXJEZWZpbmVkRmllbGRUeXBlKiB1ZGYgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VXNlckRlZmluZWRGaWVsZFR5cGUqPihGLT5maWVsZHR5cGUoKSk7CisgIGFzc2VydCh1ZGYgIT0gMCk7CisgIHJldHVybiB1ZGYtPmNoYXJfY2hlY2soYyk7Cit9CisKK3ZvaWQqIF9uY194eF9mbGRfbWFrZWFyZyh2YV9saXN0KiB2YSkKK3sKKyAgcmV0dXJuIHZhX2FyZygqdmEsTkN1cnNlc0Zvcm1GaWVsZCopOworfQorCitGSUVMRFRZUEUqIFVzZXJEZWZpbmVkRmllbGRUeXBlOjpnZW5lcmljX2ZpZWxkdHlwZSA9CisgIDo6bmV3X2ZpZWxkdHlwZShfbmNfeHhfZmxkX2ZjaGVjaywKKwkJICBfbmNfeHhfZmxkX2NjaGVjayk7CisKK0ZJRUxEVFlQRSogVXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2U6OmdlbmVyaWNfZmllbGR0eXBlX3dpdGhfY2hvaWNlID0KKyAgOjpuZXdfZmllbGR0eXBlKF9uY194eF9mbGRfZmNoZWNrLAorCQkgIF9uY194eF9mbGRfY2NoZWNrKTsKKworYm9vbCBfbmNfeHhfbmV4dF9jaG9pY2UoRklFTEQgKmYsIGNvbnN0IHZvaWQgKnUpCit7CisgIE5DdXJzZXNGb3JtRmllbGQqIEYgPSByZWludGVycHJldF9jYXN0PE5DdXJzZXNGb3JtRmllbGQqPihjb25zdF9jYXN0PHZvaWQgKj4odSkpOworICBhc3NlcnQoRiAhPSAwKTsKKyAgVXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2UqIHVkZiA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZSo+KEYtPmZpZWxkdHlwZSgpKTsKKyAgYXNzZXJ0KHVkZiAhPSAwKTsKKyAgcmV0dXJuIHVkZi0+bmV4dCgqRik7Cit9CisKK2Jvb2wgX25jX3h4X3ByZXZfY2hvaWNlKEZJRUxEICpmLCBjb25zdCB2b2lkICp1KQoreworICBOQ3Vyc2VzRm9ybUZpZWxkKiBGID0gcmVpbnRlcnByZXRfY2FzdDxOQ3Vyc2VzRm9ybUZpZWxkKj4oY29uc3RfY2FzdDx2b2lkICo+KHUpKTsKKyAgYXNzZXJ0KEYgIT0gMCk7CisgIFVzZXJEZWZpbmVkRmllbGRUeXBlX1dpdGhfQ2hvaWNlKiB1ZGYgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2UqPihGLT5maWVsZHR5cGUoKSk7CisgIGFzc2VydCh1ZGYgIT0gMCk7CisgIHJldHVybiB1ZGYtPnByZXZpb3VzKCpGKTsKK30KKworY2xhc3MgVURGX0luaXQKK3sKK3ByaXZhdGU6CisgIGludCBjb2RlOworICBzdGF0aWMgVURGX0luaXQqIEk7CisKK3B1YmxpYzoKKyAgVURGX0luaXQoKQorICAgIDogY29kZSgwKQorICB7CisgICAgY29kZSA9IDo6c2V0X2ZpZWxkdHlwZV9hcmcoVXNlckRlZmluZWRGaWVsZFR5cGU6OmdlbmVyaWNfZmllbGR0eXBlLAorCQkJICAgICAgIF9uY194eF9mbGRfbWFrZWFyZywKKwkJCSAgICAgICBOVUxMLAorCQkJICAgICAgIE5VTEwpOworICAgIGlmIChjb2RlPT1FX09LKQorICAgICAgY29kZSA9IDo6c2V0X2ZpZWxkdHlwZV9hcmcKKwkoVXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2U6OmdlbmVyaWNfZmllbGR0eXBlX3dpdGhfY2hvaWNlLAorCSBfbmNfeHhfZmxkX21ha2VhcmcsCisJIE5VTEwsCisJIE5VTEwpOworICAgIGlmIChjb2RlPT1FX09LKQorICAgICAgY29kZSA9IDo6c2V0X2ZpZWxkdHlwZV9jaG9pY2UKKwkoVXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2U6OmdlbmVyaWNfZmllbGR0eXBlX3dpdGhfY2hvaWNlLAorCSBfbmNfeHhfbmV4dF9jaG9pY2UsCisJIF9uY194eF9wcmV2X2Nob2ljZSk7CisgIH0KK307CisKK1VERl9Jbml0KiBVREZfSW5pdDo6SSA9IG5ldyBVREZfSW5pdCgpOwpkaWZmIC0tZ2l0IGEvYysrL2N1cnNlc2YuaCBiL2MrKy9jdXJzZXNmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhMzBjMwotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9jdXJzZXNmLmgKQEAgLTAsMCArMSw5NjcgQEAKKy8vICogVGhpcyBtYWtlcyBlbWFjcyBoYXBweSAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyAkSWQ6IGN1cnNlc2YuaCx2IDEuMjggMjAwNS8wOC8xMyAxODowODoyNCB0b20gRXhwICQKKworI2lmbmRlZiBOQ1VSU0VTX0NVUlNFU0ZfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfQ1VSU0VTRl9IX2luY2wgMQorCisjaW5jbHVkZSA8Y3Vyc2VzcC5oPgorCisjaWZuZGVmIF9fRVhUX1FOWAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKK2V4dGVybiAiQyIgeworIyAgaW5jbHVkZSA8Zm9ybS5oPgorfQorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBidWl0aW4gYW5kIHVzZXIgZGVmaW5lZCBGaWVsZHR5cGVzLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNGb3JtRmllbGQ7IC8vIGZvcndhcmQgZGVjbGFyYXRpb24KKworLy8gQ2xhc3MgdG8gcmVwcmVzZW50IGJ1aWx0aW4gZmllbGQgdHlwZXMgYXMgd2VsbCBhcyBDKysgd3JpdHRlbiBuZXcKKy8vIGZpZWxkdHlwZXMgKHNlZSBjbGFzc2VzIFVzZXJEZWZpbmVGaWVsZFR5cGUuLi4KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNGaWVsZFR5cGUKK3sKKyAgZnJpZW5kIGNsYXNzIE5DdXJzZXNGb3JtRmllbGQ7CisKK3Byb3RlY3RlZDoKKyAgRklFTERUWVBFKiBmaWVsZHR5cGU7CisKKyAgaW5saW5lIHZvaWQgT25FcnJvcihpbnQgZXJyKSBjb25zdCBUSFJPV1MoTkN1cnNlc0Zvcm1FeGNlcHRpb24pIHsKKyAgICBpZiAoZXJyIT1FX09LKQorICAgICAgVEhST1cobmV3IE5DdXJzZXNGb3JtRXhjZXB0aW9uIChlcnIpKTsKKyAgfQorCisgIE5DdXJzZXNGaWVsZFR5cGUoRklFTERUWVBFICpmKSA6IGZpZWxkdHlwZShmKSB7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzRmllbGRUeXBlKCkge30KKworICAvLyBTZXQgdGhlIGZpZWxkcyBmIGZpZWxkdHlwZSB0byB0aGlzIG9uZS4KKyAgdmlydHVhbCB2b2lkIHNldChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSA9IDA7CisKK3B1YmxpYzoKKyAgTkN1cnNlc0ZpZWxkVHlwZSgpCisgICAgOiBmaWVsZHR5cGUoU1RBVElDX0NBU1QoRklFTERUWVBFKikoMCkpCisgIHsKKyAgfQorCisgIE5DdXJzZXNGaWVsZFR5cGUmIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzRmllbGRUeXBlJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc0ZpZWxkVHlwZShjb25zdCBOQ3Vyc2VzRmllbGRUeXBlJiByaHMpCisgICAgOiBmaWVsZHR5cGUocmhzLmZpZWxkdHlwZSkKKyAgeworICB9CisKK307CisKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGUgY2xhc3MgcmVwcmVzZW50aW5nIGEgZm9ybXMgZmllbGQsIHdyYXBwaW5nIHRoZSBsb3dsZXZlbCBGSUVMRCBzdHJ1Y3QKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzRm9ybUZpZWxkCit7CisgIGZyaWVuZCBjbGFzcyBOQ3Vyc2VzRm9ybTsKKworcHJvdGVjdGVkOgorICBGSUVMRCAqZmllbGQ7CQkgICAgIC8vIGxvd2xldmVsIHN0cnVjdHVyZQorICBOQ3Vyc2VzRmllbGRUeXBlKiBmdHlwZTsgICAvLyBBc3NvY2lhdGVkIGZpZWxkIHR5cGUKKworICAvLyBFcnJvciBoYW5kbGVyCisgIGlubGluZSB2b2lkIE9uRXJyb3IgKGludCBlcnIpIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzRm9ybUV4Y2VwdGlvbikgeworICAgIGlmIChlcnIgIT0gRV9PSykKKyAgICAgIFRIUk9XKG5ldyBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiAoZXJyKSk7CisgIH0KKworcHVibGljOgorICAvLyBDcmVhdGUgYSAnTnVsbCcgZmllbGQuIENhbiBiZSB1c2VkIHRvIGRlbGltaXQgYSBmaWVsZCBsaXN0CisgIE5DdXJzZXNGb3JtRmllbGQoKQorICAgIDogZmllbGQoU1RBVElDX0NBU1QoRklFTEQqKSgwKSksCisgICAgICBmdHlwZShTVEFUSUNfQ0FTVChOQ3Vyc2VzRmllbGRUeXBlKikoMCkpCisgIHsKKyAgfQorCisgIC8vIENyZWF0ZSBhIG5ldyBmaWVsZAorICBOQ3Vyc2VzRm9ybUZpZWxkIChpbnQgcm93cywKKwkJICAgIGludCBuY29scywKKwkJICAgIGludCBmaXJzdF9yb3cgPSAwLAorCQkgICAgaW50IGZpcnN0X2NvbCA9IDAsCisJCSAgICBpbnQgb2Zmc2NyZWVuX3Jvd3MgPSAwLAorCQkgICAgaW50IGFkZGl0aW9uYWxfYnVmZmVycyA9IDApCisgICAgOiBmaWVsZCgwKSwKKyAgICAgIGZ0eXBlKFNUQVRJQ19DQVNUKE5DdXJzZXNGaWVsZFR5cGUqKSgwKSkKKyAgeworICAgICAgZmllbGQgPSA6Om5ld19maWVsZChyb3dzLCBuY29scywgZmlyc3Rfcm93LCBmaXJzdF9jb2wsCisJCQkgIG9mZnNjcmVlbl9yb3dzLCBhZGRpdGlvbmFsX2J1ZmZlcnMpOworICAgICAgaWYgKCFmaWVsZCkKKwlPbkVycm9yKGVycm5vKTsKKyAgfQorCisgIE5DdXJzZXNGb3JtRmllbGQmIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzRm9ybUZpZWxkJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc0Zvcm1GaWVsZChjb25zdCBOQ3Vyc2VzRm9ybUZpZWxkJiByaHMpCisgICAgOiBmaWVsZChyaHMuZmllbGQpLCBmdHlwZShyaHMuZnR5cGUpCisgIHsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNGb3JtRmllbGQgKCk7CisKKyAgLy8gRHVwbGljYXRlIHRoZSBmaWVsZCBhdCBhIG5ldyBwb3NpdGlvbgorICBpbmxpbmUgTkN1cnNlc0Zvcm1GaWVsZCogZHVwKGludCBmaXJzdF9yb3csIGludCBmaXJzdF9jb2wpCisgIHsKKyAgICBOQ3Vyc2VzRm9ybUZpZWxkKiBmID0gbmV3IE5DdXJzZXNGb3JtRmllbGQoKTsKKyAgICBpZiAoIWYpCisgICAgICBPbkVycm9yKEVfU1lTVEVNX0VSUk9SKTsKKyAgICBlbHNlIHsKKyAgICAgIGYtPmZ0eXBlID0gZnR5cGU7CisgICAgICBmLT5maWVsZCA9IDo6ZHVwX2ZpZWxkKGZpZWxkLGZpcnN0X3JvdyxmaXJzdF9jb2wpOworICAgICAgaWYgKCFmLT5maWVsZCkKKwlPbkVycm9yKGVycm5vKTsKKyAgICB9CisgICAgcmV0dXJuIGY7CisgIH0KKworICAvLyBMaW5rIHRoZSBmaWVsZCB0byBhIG5ldyBsb2NhdGlvbgorICBpbmxpbmUgTkN1cnNlc0Zvcm1GaWVsZCogbGluayhpbnQgZmlyc3Rfcm93LCBpbnQgZmlyc3RfY29sKSB7CisgICAgTkN1cnNlc0Zvcm1GaWVsZCogZiA9IG5ldyBOQ3Vyc2VzRm9ybUZpZWxkKCk7CisgICAgaWYgKCFmKQorICAgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgICAgZWxzZSB7CisgICAgICBmLT5mdHlwZSA9IGZ0eXBlOworICAgICAgZi0+ZmllbGQgPSA6OmxpbmtfZmllbGQoZmllbGQsZmlyc3Rfcm93LGZpcnN0X2NvbCk7CisgICAgICBpZiAoIWYtPmZpZWxkKQorCU9uRXJyb3IoZXJybm8pOworICAgIH0KKyAgICByZXR1cm4gZjsKKyAgfQorCisgIC8vIEdldCB0aGUgbG93bGV2ZWwgZmllbGQgcmVwcmVzZW50YXRpb24KKyAgaW5saW5lIEZJRUxEKiBnZXRfZmllbGQoKSBjb25zdCB7CisgICAgcmV0dXJuIGZpZWxkOworICB9CisKKyAgLy8gUmV0cmlldmUgaW5mbyBhYm91dCB0aGUgZmllbGQKKyAgaW5saW5lIHZvaWQgaW5mbyhpbnQmIHJvd3MsIGludCYgbmNvbHMsCisJCSAgIGludCYgZmlyc3Rfcm93LCBpbnQmIGZpcnN0X2NvbCwKKwkJICAgaW50JiBvZmZzY3JlZW5fcm93cywgaW50JiBhZGRpdGlvbmFsX2J1ZmZlcnMpIGNvbnN0IHsKKyAgICBPbkVycm9yKDo6ZmllbGRfaW5mbyhmaWVsZCwgJnJvd3MsICZuY29scywKKwkJCSAmZmlyc3Rfcm93LCAmZmlyc3RfY29sLAorCQkJICZvZmZzY3JlZW5fcm93cywgJmFkZGl0aW9uYWxfYnVmZmVycykpOworICB9CisKKyAgLy8gUmV0cmlldmUgaW5mbyBhYm91dCB0aGUgZmllbGRzIGR5bmFtaWMgcHJvcGVydGllcy4KKyAgaW5saW5lIHZvaWQgZHluYW1pY19pbmZvKGludCYgZHluYW1pY19yb3dzLCBpbnQmIGR5bmFtaWNfY29scywKKwkJCSAgIGludCYgbWF4X2dyb3d0aCkgY29uc3QgeworICAgIE9uRXJyb3IoOjpkeW5hbWljX2ZpZWxkX2luZm8oZmllbGQsICZkeW5hbWljX3Jvd3MsICZkeW5hbWljX2NvbHMsCisJCQkJICZtYXhfZ3Jvd3RoKSk7CisgIH0KKworICAvLyBGb3IgYSBkeW5hbWljIGZpZWxkIHlvdSBtYXkgc2V0IHRoZSBtYXhpbXVtIGdyb3d0aCBsaW1pdC4KKyAgLy8gQSB6ZXJvIG1lYW5zIHVubGltaXRlZCBncm93dGguCisgIGlubGluZSB2b2lkIHNldF9tYXhpbXVtX2dyb3d0aChpbnQgZ3Jvd3RoID0gMCkgeworICAgIE9uRXJyb3IoOjpzZXRfbWF4X2ZpZWxkKGZpZWxkLGdyb3d0aCkpOworICB9CisKKyAgLy8gTW92ZSB0aGUgZmllbGQgdG8gYSBuZXcgcG9zaXRpb24KKyAgaW5saW5lIHZvaWQgbW92ZShpbnQgcm93LCBpbnQgY29sKSB7CisgICAgT25FcnJvcig6Om1vdmVfZmllbGQoZmllbGQscm93LGNvbCkpOworICB9CisKKyAgLy8gTWFyayB0aGUgZmllbGQgdG8gc3RhcnQgYSBuZXcgcGFnZQorICBpbmxpbmUgdm9pZCBuZXdfcGFnZShib29sIHBhZ2VGbGFnID0gRkFMU0UpIHsKKyAgICBPbkVycm9yKDo6c2V0X25ld19wYWdlKGZpZWxkLHBhZ2VGbGFnKSk7CisgIH0KKworICAvLyBSZXRyaWV2ZSB3aGV0aGVyIG9yIG5vdCB0aGUgZmllbGQgc3RhcnRzIGEgbmV3IHBhZ2UuCisgIGlubGluZSBib29sIGlzX25ld19wYWdlKCkgY29uc3QgeworICAgIHJldHVybiA6Om5ld19wYWdlKGZpZWxkKTsKKyAgfQorCisgIC8vIFNldCB0aGUganVzdGlmaWNhdGlvbiBmb3IgdGhlIGZpZWxkCisgIGlubGluZSB2b2lkIHNldF9qdXN0aWZpY2F0aW9uKGludCBqdXN0KSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF9qdXN0KGZpZWxkLGp1c3QpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSBmaWVsZHMganVzdGlmaWNhdGlvbgorICBpbmxpbmUgaW50IGp1c3RpZmljYXRpb24oKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfanVzdChmaWVsZCk7CisgIH0KKyAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGF0dHJpYnV0ZSBmb3IgdGhlIGZpZWxkCisgIGlubGluZSB2b2lkIHNldF9mb3JlZ3JvdW5kKGNodHlwZSBmb3JlZ3JvdW5kKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF9mb3JlKGZpZWxkLGZvcmVncm91bmQpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSBmaWVsZHMgZm9yZWdyb3VuZCBhdHRyaWJ1dGUKKyAgaW5saW5lIGNodHlwZSBmb3JlKCkgY29uc3QgeworICAgIHJldHVybiA6OmZpZWxkX2ZvcmUoZmllbGQpOworICB9CisKKyAgLy8gU2V0IHRoZSBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSBmb3IgdGhlIGZpZWxkCisgIGlubGluZSB2b2lkIHNldF9iYWNrZ3JvdW5kKGNodHlwZSBiYWNrZ3JvdW5kKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF9iYWNrKGZpZWxkLGJhY2tncm91bmQpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSBmaWVsZHMgYmFja2dyb3VuZCBhdHRyaWJ1dGUKKyAgaW5saW5lIGNodHlwZSBiYWNrKCkgY29uc3QgeworICAgIHJldHVybiA6OmZpZWxkX2JhY2soZmllbGQpOworICB9CisKKyAgLy8gU2V0IHRoZSBwYWRkaW5nIGNoYXJhY3RlciBmb3IgdGhlIGZpZWxkCisgIGlubGluZSB2b2lkIHNldF9wYWRfY2hhcmFjdGVyKGludCBwYWRkaW5nKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF9wYWQoZmllbGQsIHBhZGRpbmcpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSBmaWVsZHMgcGFkZGluZyBjaGFyYWN0ZXIKKyAgaW5saW5lIGludCBwYWQoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfcGFkKGZpZWxkKTsKKyAgfQorCisgIC8vIFN3aXRjaCBvbiB0aGUgZmllbGRzIG9wdGlvbnMKKyAgaW5saW5lIHZvaWQgb3B0aW9uc19vbiAoRmllbGRfT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpmaWVsZF9vcHRzX29uIChmaWVsZCwgb3B0cykpOworICB9CisKKyAgLy8gU3dpdGNoIG9mZiB0aGUgZmllbGRzIG9wdGlvbnMKKyAgaW5saW5lIHZvaWQgb3B0aW9uc19vZmYgKEZpZWxkX09wdGlvbnMgb3B0cykgeworICAgIE9uRXJyb3IgKDo6ZmllbGRfb3B0c19vZmYgKGZpZWxkLCBvcHRzKSk7CisgIH0KKworICAvLyBSZXRyaWV2ZSB0aGUgZmllbGRzIG9wdGlvbnMKKyAgaW5saW5lIEZpZWxkX09wdGlvbnMgb3B0aW9ucyAoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfb3B0cyAoZmllbGQpOworICB9CisKKyAgLy8gU2V0IHRoZSBmaWVsZHMgb3B0aW9ucworICBpbmxpbmUgdm9pZCBzZXRfb3B0aW9ucyAoRmllbGRfT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpzZXRfZmllbGRfb3B0cyAoZmllbGQsIG9wdHMpKTsKKyAgfQorCisgIC8vIE1hcmsgdGhlIGZpZWxkIGFzIGNoYW5nZWQKKyAgaW5saW5lIHZvaWQgc2V0X2NoYW5nZWQoYm9vbCBjaGFuZ2VGbGFnID0gVFJVRSkgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfc3RhdHVzKGZpZWxkLGNoYW5nZUZsYWcpKTsKKyAgfQorCisgIC8vIFRlc3Qgd2hldGhlciBvciBub3QgdGhlIGZpZWxkIGlzIG1hcmtlZCBhcyBjaGFuZ2VkCisgIGlubGluZSBib29sIGNoYW5nZWQoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfc3RhdHVzKGZpZWxkKTsKKyAgfQorCisgIC8vIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpZWxkIGluIHRoZSBmaWVsZCBhcnJheSBvZiBhIGZvcm0KKyAgLy8gb3IgLTEgaWYgdGhlIGZpZWxkIGlzIG5vdCBhc3NvY2lhdGVkIHRvIGEgZm9ybQorICBpbmxpbmUgaW50IChpbmRleCkoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfaW5kZXgoZmllbGQpOworICB9CisKKyAgLy8gU3RvcmUgYSB2YWx1ZSBpbiBhIGZpZWxkcyBidWZmZXIuIFRoZSBkZWZhdWx0IGJ1ZmZlciBpcyBuci4gMAorICBpbmxpbmUgdm9pZCBzZXRfdmFsdWUoY29uc3QgY2hhciAqdmFsLCBpbnQgYnVmZmVyID0gMCkgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfYnVmZmVyKGZpZWxkLGJ1ZmZlcix2YWwpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIGZpZWxkcyBidWZmZXIuIFRoZSBkZWZhdWx0IGJ1ZmZlciBpcyBuci4gMAorICBpbmxpbmUgY2hhciogdmFsdWUoaW50IGJ1ZmZlciA9IDApIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9idWZmZXIoZmllbGQsYnVmZmVyKTsKKyAgfQorCisgIC8vIFNldCB0aGUgdmFsaWRhdGlvbiB0eXBlIG9mIHRoZSBmaWVsZC4KKyAgaW5saW5lIHZvaWQgc2V0X2ZpZWxkdHlwZShOQ3Vyc2VzRmllbGRUeXBlJiBmKSB7CisgICAgZnR5cGUgPSAmZjsKKyAgICBmLnNldCgqdGhpcyk7IC8vIEEgZ29vZCBmcmllbmQgbWF5IGRvIHRoYXQuLi4KKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSB2YWxpZGF0aW9uIHR5cGUgb2YgdGhlIGZpZWxkLgorICBpbmxpbmUgTkN1cnNlc0ZpZWxkVHlwZSogZmllbGR0eXBlKCkgY29uc3QgeworICAgIHJldHVybiBmdHlwZTsKKyAgfQorCit9OworCisgIC8vIFRoaXMgYXJlIHRoZSBidWlsdC1pbiBob29rIGZ1bmN0aW9ucyBpbiB0aGlzIEMrKyBiaW5kaW5nLiBJbiBDKysgd2UgdXNlCisgIC8vIHZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucyAoc2VlIGJlbG93IE9uXy4uLl9Jbml0IGFuZCBPbl8uLi5fVGVybWluYXRpb24pCisgIC8vIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGFuIG9iamVjdCBvcmllbnRlZCBtYW5uZXIuCitleHRlcm4gIkMiIHsKKyAgdm9pZCBfbmNfeHhfZnJtX2luaXQoRk9STSAqKTsKKyAgdm9pZCBfbmNfeHhfZnJtX3Rlcm0oRk9STSAqKTsKKyAgdm9pZCBfbmNfeHhfZmxkX2luaXQoRk9STSAqKTsKKyAgdm9pZCBfbmNfeHhfZmxkX3Rlcm0oRk9STSAqKTsKK30KKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBjbGFzcyByZXByZXNlbnRpbmcgYSBmb3JtLCB3cmFwcGluZyB0aGUgbG93bGV2ZWwgRk9STSBzdHJ1Y3QKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzRm9ybSA6IHB1YmxpYyBOQ3Vyc2VzUGFuZWwKK3sKK3Byb3RlY3RlZDoKKyAgRk9STSogZm9ybTsgIC8vIHRoZSBsb3dsZXZlbCBzdHJ1Y3R1cmUKKworcHJpdmF0ZToKKyAgTkN1cnNlc1dpbmRvdyogc3ViOyAgIC8vIHRoZSBzdWJ3aW5kb3cgb2JqZWN0CisgIGJvb2wgYl9zdWJfb3duZXI7ICAgICAvLyBpcyB0aGlzIG91ciBvd24gc3Vid2luZG93PworICBib29sIGJfZnJhbWVkOwkvLyBoYXMgdGhlIGZvcm0gYSBib3JkZXI/CisgIGJvb2wgYl9hdXRvRGVsZXRlOyAgICAvLyBEZWxldGUgZmllbGRzIHdoZW4gZGVsZXRpbmcgZm9ybT8KKworICBOQ3Vyc2VzRm9ybUZpZWxkKiogbXlfZmllbGRzOyAvLyBUaGUgYXJyYXkgb2YgZmllbGRzIGZvciB0aGlzIGZvcm0KKworICAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciB0aGUgZm9ybSdzIHVzZXIgZGF0YSBmaWVsZCB0byBsaW5rIHRoZQorICAvLyBGT1JNKiB0byB0aGUgQysrIG9iamVjdCBhbmQgdG8gcHJvdmlkZSBleHRyYSBzcGFjZSBmb3IgYSB1c2VyIHBvaW50ZXIuCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICB2b2lkKgkgICAgICAgbV91c2VyOwkgICAgLy8gdGhlIHBvaW50ZXIgZm9yIHRoZSB1c2VyJ3MgZGF0YQorICAgIGNvbnN0IE5DdXJzZXNGb3JtKiBtX2JhY2s7ICAgICAgLy8gYmFja3dhcmQgcG9pbnRlciB0byBDKysgb2JqZWN0CisgICAgY29uc3QgRk9STSoJICAgICAgIG1fb3duZXI7CisgIH0gVXNlckhvb2s7CisKKyAgLy8gR2V0IHRoZSBiYWNrd2FyZCBwb2ludGVyIHRvIHRoZSBDKysgb2JqZWN0IGZyb20gYSBGT1JNCisgIHN0YXRpYyBpbmxpbmUgTkN1cnNlc0Zvcm0qIGdldEhvb2soY29uc3QgRk9STSAqZikgeworICAgIFVzZXJIb29rKiBob29rID0gcmVpbnRlcnByZXRfY2FzdDxVc2VySG9vayo+KDo6Zm9ybV91c2VycHRyKGYpKTsKKyAgICBhc3NlcnQoaG9vayAhPSAwICYmIGhvb2stPm1fb3duZXI9PWYpOworICAgIHJldHVybiBjb25zdF9jYXN0PE5DdXJzZXNGb3JtKj4oaG9vay0+bV9iYWNrKTsKKyAgfQorCisgIGZyaWVuZCB2b2lkIF9uY194eF9mcm1faW5pdChGT1JNICopOworICBmcmllbmQgdm9pZCBfbmNfeHhfZnJtX3Rlcm0oRk9STSAqKTsKKyAgZnJpZW5kIHZvaWQgX25jX3h4X2ZsZF9pbml0KEZPUk0gKik7CisgIGZyaWVuZCB2b2lkIF9uY194eF9mbGRfdGVybShGT1JNICopOworCisgIC8vIENhbGN1bGF0ZSBGSUVMRCogYXJyYXkgZm9yIHRoZSBtZW51CisgIEZJRUxEKiogbWFwRmllbGRzKE5DdXJzZXNGb3JtRmllbGQqIG5maWVsZHNbXSk7CisKK3Byb3RlY3RlZDoKKyAgLy8gaW50ZXJuYWwgcm91dGluZXMKKyAgaW5saW5lIHZvaWQgc2V0X3VzZXIodm9pZCAqdXNlcikgeworICAgIFVzZXJIb29rKiB1cHRyID0gcmVpbnRlcnByZXRfY2FzdDxVc2VySG9vayo+KDo6Zm9ybV91c2VycHRyIChmb3JtKSk7CisgICAgYXNzZXJ0ICh1cHRyICE9IDAgJiYgdXB0ci0+bV9iYWNrPT10aGlzICYmIHVwdHItPm1fb3duZXI9PWZvcm0pOworICAgIHVwdHItPm1fdXNlciA9IHVzZXI7CisgIH0KKworICBpbmxpbmUgdm9pZCAqZ2V0X3VzZXIoKSB7CisgICAgVXNlckhvb2sqIHVwdHIgPSByZWludGVycHJldF9jYXN0PFVzZXJIb29rKj4oOjpmb3JtX3VzZXJwdHIgKGZvcm0pKTsKKyAgICBhc3NlcnQgKHVwdHIgIT0gMCAmJiB1cHRyLT5tX2JhY2s9PXRoaXMgJiYgdXB0ci0+bV9vd25lcj09Zm9ybSk7CisgICAgcmV0dXJuIHVwdHItPm1fdXNlcjsKKyAgfQorCisgIHZvaWQgSW5pdEZvcm0gKE5DdXJzZXNGb3JtRmllbGQqIEZpZWxkc1tdLAorCQkgYm9vbCB3aXRoX2ZyYW1lLAorCQkgYm9vbCBhdXRvRGVsZXRlRmllbGRzKTsKKworICBpbmxpbmUgdm9pZCBPbkVycm9yIChpbnQgZXJyKSBjb25zdCBUSFJPV1MoTkN1cnNlc0Zvcm1FeGNlcHRpb24pIHsKKyAgICBpZiAoZXJyICE9IEVfT0spCisgICAgICBUSFJPVyhuZXcgTkN1cnNlc0Zvcm1FeGNlcHRpb24gKGVycikpOworICB9CisKKyAgLy8gdGhpcyB3cmFwcyB0aGUgZm9ybV9kcml2ZXIgY2FsbC4KKyAgdmlydHVhbCBpbnQgZHJpdmVyIChpbnQgYykgOworCisgIC8vICdJbnRlcm5hbCcgY29uc3RydWN0b3IsIGJ1aWxkcyBhbiBvYmplY3Qgd2l0aG91dCBhc3NvY2lhdGlvbiB0byBhCisgIC8vIGZpZWxkIGFycmF5LgorICBOQ3Vyc2VzRm9ybSggaW50ICBubGluZXMsCisJICAgICAgIGludCAgbmNvbHMsCisJICAgICAgIGludCAgYmVnaW5feSA9IDAsCisJICAgICAgIGludCAgYmVnaW5feCA9IDApCisgICAgOiBOQ3Vyc2VzUGFuZWwobmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCksCisgICAgICBmb3JtIChTVEFUSUNfQ0FTVChGT1JNKikoMCkpLAorICAgICAgc3ViKDApLAorICAgICAgYl9zdWJfb3duZXIoMCksCisgICAgICBiX2ZyYW1lZCgwKSwKKyAgICAgIGJfYXV0b0RlbGV0ZSgwKSwKKyAgICAgIG15X2ZpZWxkcygwKQorICB7CisgIH0KKworcHVibGljOgorICAvLyBDcmVhdGUgZm9ybSBmb3IgdGhlIGRlZmF1bHQgcGFuZWwuCisgIE5DdXJzZXNGb3JtIChOQ3Vyc2VzRm9ybUZpZWxkKiBGaWVsZHNbXSwKKwkgICAgICAgYm9vbCB3aXRoX2ZyYW1lPUZBTFNFLAkgICAgICAvLyByZXNlcnZlIHNwYWNlIGZvciBhIGZyYW1lPworCSAgICAgICBib29sIGF1dG9EZWxldGVfRmllbGRzPUZBTFNFKSAgLy8gZG8gYXV0b21hdGljIGNsZWFudXA/CisgICAgOiBOQ3Vyc2VzUGFuZWwoKSwKKyAgICAgIGZvcm0oMCksCisgICAgICBzdWIoMCksCisgICAgICBiX3N1Yl9vd25lcigwKSwKKyAgICAgIGJfZnJhbWVkKDApLAorICAgICAgYl9hdXRvRGVsZXRlKDApLAorICAgICAgbXlfZmllbGRzKDApCisgIHsKKyAgICBJbml0Rm9ybShGaWVsZHMsIHdpdGhfZnJhbWUsIGF1dG9EZWxldGVfRmllbGRzKTsKKyAgfQorCisgIC8vIENyZWF0ZSBhIGZvcm0gaW4gYSBwYW5lbCB3aXRoIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgc2l6ZS4KKyAgTkN1cnNlc0Zvcm0gKE5DdXJzZXNGb3JtRmllbGQqIEZpZWxkc1tdLAorCSAgICAgICBpbnQgIG5saW5lcywKKwkgICAgICAgaW50ICBuY29scywKKwkgICAgICAgaW50ICBiZWdpbl95LAorCSAgICAgICBpbnQgIGJlZ2luX3gsCisJICAgICAgIGJvb2wgd2l0aF9mcmFtZT1GQUxTRSwJICAgICAvLyByZXNlcnZlIHNwYWNlIGZvciBhIGZyYW1lPworCSAgICAgICBib29sIGF1dG9EZWxldGVfRmllbGRzPUZBTFNFKSAvLyBkbyBhdXRvbWF0aWMgY2xlYW51cD8KKyAgICA6IE5DdXJzZXNQYW5lbChubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KSwKKyAgICAgIGZvcm0oMCksCisgICAgICBzdWIoMCksCisgICAgICBiX3N1Yl9vd25lcigwKSwKKyAgICAgIGJfZnJhbWVkKDApLAorICAgICAgYl9hdXRvRGVsZXRlKDApLAorICAgICAgbXlfZmllbGRzKDApCisgIHsKKyAgICAgIEluaXRGb3JtKEZpZWxkcywgd2l0aF9mcmFtZSwgYXV0b0RlbGV0ZV9GaWVsZHMpOworICB9CisKKyAgTkN1cnNlc0Zvcm0mIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzRm9ybSYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBOQ3Vyc2VzUGFuZWw6Om9wZXJhdG9yPShyaHMpOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzRm9ybShjb25zdCBOQ3Vyc2VzRm9ybSYgcmhzKQorICAgIDogTkN1cnNlc1BhbmVsKHJocyksCisgICAgICBmb3JtKHJocy5mb3JtKSwKKyAgICAgIHN1YihyaHMuc3ViKSwKKyAgICAgIGJfc3ViX293bmVyKHJocy5iX3N1Yl9vd25lciksCisgICAgICBiX2ZyYW1lZChyaHMuYl9mcmFtZWQpLAorICAgICAgYl9hdXRvRGVsZXRlKHJocy5iX2F1dG9EZWxldGUpLAorICAgICAgbXlfZmllbGRzKHJocy5teV9maWVsZHMpCisgIHsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNGb3JtKCk7CisKKyAgLy8gU2V0IHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmb3JtCisgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0QXR0cmlidXRlcygpOworCisgIC8vIFJldHJpZXZlIGN1cnJlbnQgZmllbGQgb2YgdGhlIGZvcm0uCisgIGlubGluZSBOQ3Vyc2VzRm9ybUZpZWxkKiBjdXJyZW50X2ZpZWxkKCkgY29uc3QgeworICAgIHJldHVybiBteV9maWVsZHNbOjpmaWVsZF9pbmRleCg6OmN1cnJlbnRfZmllbGQoZm9ybSkpXTsKKyAgfQorCisgIC8vIFNldCB0aGUgZm9ybXMgc3Vid2luZG93CisgIHZvaWQgc2V0U3ViV2luZG93KE5DdXJzZXNXaW5kb3cmIHN1Yik7CisKKyAgLy8gU2V0IHRoZXNlIGZpZWxkcyBmb3IgdGhlIGZvcm0KKyAgaW5saW5lIHZvaWQgc2V0RmllbGRzKE5DdXJzZXNGb3JtRmllbGQqIEZpZWxkc1tdKSB7CisgICAgT25FcnJvcig6OnNldF9mb3JtX2ZpZWxkcyhmb3JtLG1hcEZpZWxkcyhGaWVsZHMpKSk7CisgIH0KKworICAvLyBSZW1vdmUgdGhlIGZvcm0gZnJvbSB0aGUgc2NyZWVuCisgIGlubGluZSB2b2lkIHVucG9zdCAodm9pZCkgeworICAgIE9uRXJyb3IgKDo6dW5wb3N0X2Zvcm0gKGZvcm0pKTsKKyAgfQorCisgIC8vIFBvc3QgdGhlIGZvcm0gdG8gdGhlIHNjcmVlbiBpZiBmbGFnIGlzIHRydWUsIHVucG9zdCBpdCBvdGhlcndpc2UKKyAgaW5saW5lIHZvaWQgcG9zdChib29sIGZsYWcgPSBUUlVFKSB7CisgICAgT25FcnJvciAoZmxhZyA/IDo6cG9zdF9mb3JtKGZvcm0pIDogOjp1bnBvc3RfZm9ybSAoZm9ybSkpOworICB9CisKKyAgLy8gRGVjb3JhdGlvbnMKKyAgaW5saW5lIHZvaWQgZnJhbWUoY29uc3QgY2hhciAqdGl0bGU9TlVMTCwgY29uc3QgY2hhciogYnRpdGxlPU5VTEwpIHsKKyAgICBpZiAoYl9mcmFtZWQpCisgICAgICBOQ3Vyc2VzUGFuZWw6OmZyYW1lKHRpdGxlLGJ0aXRsZSk7CisgICAgZWxzZQorICAgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgIH0KKworICBpbmxpbmUgdm9pZCBib2xkZnJhbWUoY29uc3QgY2hhciAqdGl0bGU9TlVMTCwgY29uc3QgY2hhciogYnRpdGxlPU5VTEwpIHsKKyAgICBpZiAoYl9mcmFtZWQpCisgICAgICBOQ3Vyc2VzUGFuZWw6OmJvbGRmcmFtZSh0aXRsZSxidGl0bGUpOworICAgIGVsc2UKKyAgICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICB9CisKKyAgaW5saW5lIHZvaWQgbGFiZWwoY29uc3QgY2hhciAqdG9wTGFiZWwsIGNvbnN0IGNoYXIgKmJvdHRvbUxhYmVsKSB7CisgICAgaWYgKGJfZnJhbWVkKQorICAgICAgTkN1cnNlc1BhbmVsOjpsYWJlbCh0b3BMYWJlbCxib3R0b21MYWJlbCk7CisgICAgZWxzZQorICAgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgIH0KKworICAvLyAtLS0tLQorICAvLyBIb29rcworICAvLyAtLS0tLQorCisgIC8vIENhbGxlZCBhZnRlciB0aGUgZm9ybSBnZXRzIHJlcG9zaXRpb25lZCBpbiBpdHMgd2luZG93LgorICAvLyBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgZm9ybSBpcyBwb3N0ZWQuCisgIHZpcnR1YWwgdm9pZCBPbl9Gb3JtX0luaXQoKTsKKworICAvLyBDYWxsZWQgYmVmb3JlIHRoZSBmb3JtIGdldHMgcmVwb3NpdGlvbmVkIGluIGl0cyB3aW5kb3cuCisgIC8vIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHRoZSBmb3JtIGlzIHVucG9zdGVkLgorICB2aXJ0dWFsIHZvaWQgT25fRm9ybV9UZXJtaW5hdGlvbigpOworCisgIC8vIENhbGxlZCBhZnRlciB0aGUgZmllbGQgYmVjYW1lIHRoZSBjdXJyZW50IGZpZWxkCisgIHZpcnR1YWwgdm9pZCBPbl9GaWVsZF9Jbml0KE5DdXJzZXNGb3JtRmllbGQmIGZpZWxkKTsKKworICAvLyBDYWxsZWQgYmVmb3JlIHRoaXMgZmllbGQgaXMgbGVmdCBhcyBjdXJyZW50IGZpZWxkLgorICB2aXJ0dWFsIHZvaWQgT25fRmllbGRfVGVybWluYXRpb24oTkN1cnNlc0Zvcm1GaWVsZCYgZmllbGQpOworCisgIC8vIENhbGN1bGF0ZSByZXF1aXJlZCB3aW5kb3cgc2l6ZSBmb3IgdGhlIGZvcm0uCisgIHZvaWQgc2NhbGUoaW50JiByb3dzLCBpbnQmIG5jb2xzKSBjb25zdCB7CisgICAgT25FcnJvcig6OnNjYWxlX2Zvcm0oZm9ybSwmcm93cywmbmNvbHMpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIGZvcm0uCisgIGludCBjb3VudCgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9jb3VudChmb3JtKTsKKyAgfQorCisgIC8vIE1ha2UgdGhlIHBhZ2UgdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgZm9ybS4KKyAgdm9pZCBzZXRfcGFnZShpbnQgcGFnZU51bSkgeworICAgIE9uRXJyb3IoOjpzZXRfZm9ybV9wYWdlKGZvcm0sIHBhZ2VOdW0pKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIGN1cnJlbnQgcGFnZSBudW1iZXIKKyAgaW50IHBhZ2UoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6Zm9ybV9wYWdlKGZvcm0pOworICB9CisKKyAgLy8gU3dpdGNoIG9uIHRoZSBmb3JtcyBvcHRpb25zCisgIGlubGluZSB2b2lkIG9wdGlvbnNfb24gKEZvcm1fT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpmb3JtX29wdHNfb24gKGZvcm0sIG9wdHMpKTsKKyAgfQorCisgIC8vIFN3aXRjaCBvZmYgdGhlIGZvcm1zIG9wdGlvbnMKKyAgaW5saW5lIHZvaWQgb3B0aW9uc19vZmYgKEZvcm1fT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpmb3JtX29wdHNfb2ZmIChmb3JtLCBvcHRzKSk7CisgIH0KKworICAvLyBSZXRyaWV2ZSB0aGUgZm9ybXMgb3B0aW9ucworICBpbmxpbmUgRm9ybV9PcHRpb25zIG9wdGlvbnMgKCkgY29uc3QgeworICAgIHJldHVybiA6OmZvcm1fb3B0cyAoZm9ybSk7CisgIH0KKworICAvLyBTZXQgdGhlIGZvcm1zIG9wdGlvbnMKKyAgaW5saW5lIHZvaWQgc2V0X29wdGlvbnMgKEZvcm1fT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpzZXRfZm9ybV9vcHRzIChmb3JtLCBvcHRzKSk7CisgIH0KKworICAvLyBBcmUgdGhlcmUgbW9yZSBkYXRhIGluIHRoZSBjdXJyZW50IGZpZWxkIGFmdGVyIHRoZSBkYXRhIHNob3duCisgIGlubGluZSBib29sIGRhdGFfYWhlYWQoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZGF0YV9haGVhZChmb3JtKTsKKyAgfQorCisgIC8vIEFyZSB0aGVyZSBtb3JlIGRhdGEgaW4gdGhlIGN1cnJlbnQgZmllbGQgYmVmb3JlIHRoZSBkYXRhIHNob3duCisgIGlubGluZSBib29sIGRhdGFfYmVoaW5kKCkgY29uc3QgeworICAgIHJldHVybiA6OmRhdGFfYmVoaW5kKGZvcm0pOworICB9CisKKyAgLy8gUG9zaXRpb24gdGhlIGN1cnNvciB0byB0aGUgY3VycmVudCBmaWVsZAorICBpbmxpbmUgdm9pZCBwb3NpdGlvbl9jdXJzb3IgKCkgeworICAgIE9uRXJyb3IgKDo6cG9zX2Zvcm1fY3Vyc29yIChmb3JtKSk7CisgIH0KKyAgLy8gU2V0IHRoZSBjdXJyZW50IGZpZWxkCisgIGlubGluZSB2b2lkIHNldF9jdXJyZW50KE5DdXJzZXNGb3JtRmllbGQmIEYpIHsKKyAgICBPbkVycm9yICg6OnNldF9jdXJyZW50X2ZpZWxkKGZvcm0sIEYuZmllbGQpKTsKKyAgfQorCisgIC8vIFByb3ZpZGUgYSBkZWZhdWx0IGtleSB2aXJ0dWFsaXphdGlvbi4gVHJhbnNsYXRlIHRoZSBrZXlib2FyZAorICAvLyBjb2RlIGMgaW50byBhIGZvcm0gcmVxdWVzdCBjb2RlLgorICAvLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIGhvcGVmdWxseSBzdHJhaWdodGZvcndhcmQKKyAgLy8gbWFwcGluZyBmb3IgdGhlIG1vc3QgY29tbW9uIGtleXN0cm9rZXMgYW5kIGZvcm0gcmVxdWVzdHMuCisgIHZpcnR1YWwgaW50IHZpcnR1YWxpemUoaW50IGMpOworCisgIC8vIE9wZXJhdG9ycworICBpbmxpbmUgTkN1cnNlc0Zvcm1GaWVsZCogb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeworICAgIGlmICggKGkgPCAwKSB8fCAoaSA+PSA6OmZpZWxkX2NvdW50IChmb3JtKSkgKQorICAgICAgT25FcnJvciAoRV9CQURfQVJHVU1FTlQpOworICAgIHJldHVybiBteV9maWVsZHNbaV07CisgIH0KKworICAvLyBQZXJmb3JtIHRoZSBtZW51J3Mgb3BlcmF0aW9uCisgIC8vIFJldHVybiB0aGUgZmllbGQgd2hlcmUgeW91IGxlZnQgdGhlIGZvcm0uCisgIHZpcnR1YWwgTkN1cnNlc0Zvcm1GaWVsZCogb3BlcmF0b3IoKSh2b2lkKTsKKworICAvLyBFeGNlcHRpb24gaGFuZGxlcnMuIFRoZSBkZWZhdWx0IGlzIGEgQmVlcC4KKyAgdmlydHVhbCB2b2lkIE9uX1JlcXVlc3RfRGVuaWVkKGludCBjKSBjb25zdDsKKyAgdmlydHVhbCB2b2lkIE9uX0ludmFsaWRfRmllbGQoaW50IGMpIGNvbnN0OworICB2aXJ0dWFsIHZvaWQgT25fVW5rbm93bl9Db21tYW5kKGludCBjKSBjb25zdDsKKworfTsKKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgaXMgdGhlIHR5cGljYWwgQysrIHR5cGVzYWZlIHdheSB0byBhbGxvdyB0byBhdHRhY2gKKy8vIHVzZXIgZGF0YSB0byBhIGZpZWxkIG9mIGEgZm9ybS4gSXRzIGFzc3VtZWQgdGhhdCB0aGUgdXNlcgorLy8gZGF0YSBiZWxvbmdzIHRvIHNvbWUgY2xhc3MgVC4gVXNlIFQgYXMgdGVtcGxhdGUgYXJndW1lbnQKKy8vIHRvIGNyZWF0ZSBhIFVzZXJGaWVsZC4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNVc2VyRmllbGQgOiBwdWJsaWMgTkN1cnNlc0Zvcm1GaWVsZAoreworcHVibGljOgorICBOQ3Vyc2VzVXNlckZpZWxkIChpbnQgcm93cywKKwkJICAgIGludCBuY29scywKKwkJICAgIGludCBmaXJzdF9yb3cgPSAwLAorCQkgICAgaW50IGZpcnN0X2NvbCA9IDAsCisJCSAgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApLAorCQkgICAgaW50IG9mZnNjcmVlbl9yb3dzID0gMCwKKwkJICAgIGludCBhZGRpdGlvbmFsX2J1ZmZlcnMgPSAwKQorICAgIDogTkN1cnNlc0Zvcm1GaWVsZCAocm93cywgbmNvbHMsCisJCQlmaXJzdF9yb3csIGZpcnN0X2NvbCwKKwkJCW9mZnNjcmVlbl9yb3dzLCBhZGRpdGlvbmFsX2J1ZmZlcnMpIHsKKyAgICAgIGlmIChmaWVsZCkKKwlPbkVycm9yKDo6c2V0X2ZpZWxkX3VzZXJwdHIoZmllbGQsIFNUQVRJQ19DQVNUKHZvaWQgKikocF9Vc2VyRGF0YSkpKTsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNVc2VyRmllbGQoKSB7fTsKKworICBpbmxpbmUgY29uc3QgVCogVXNlckRhdGEgKHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oOjpmaWVsZF91c2VycHRyIChmaWVsZCkpOworICB9CisKKyAgaW5saW5lIHZpcnR1YWwgdm9pZCBzZXRVc2VyRGF0YShjb25zdCBUKiBwX1VzZXJEYXRhKSB7CisgICAgaWYgKGZpZWxkKQorICAgICAgT25FcnJvciAoOjpzZXRfZmllbGRfdXNlcnB0ciAoZmllbGQsIFNUQVRJQ19DQVNUKHZvaWQgKikocF9Vc2VyRGF0YSkpKTsKKyAgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGUgc2FtZSBtZWNoYW5pc20gaXMgdXNlZCB0byBhdHRhY2ggdXNlciBkYXRhIHRvIGEgZm9ybQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNVc2VyRm9ybSA6IHB1YmxpYyBOQ3Vyc2VzRm9ybQoreworcHJvdGVjdGVkOgorICAvLyAnSW50ZXJuYWwnIGNvbnN0cnVjdG9yLCBidWlsZHMgYW4gb2JqZWN0IHdpdGhvdXQgYXNzb2NpYXRpb24gdG8gYQorICAvLyBmaWVsZCBhcnJheS4KKyAgTkN1cnNlc1VzZXJGb3JtKCBpbnQgIG5saW5lcywKKwkJICAgaW50ICBuY29scywKKwkJICAgaW50ICBiZWdpbl95ID0gMCwKKwkJICAgaW50ICBiZWdpbl94ID0gMCwKKwkJICAgY29uc3QgVCogcF9Vc2VyRGF0YSA9IFNUQVRJQ19DQVNUKFQqKSgwKSkKKyAgICA6IE5DdXJzZXNGb3JtKG5saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3gpIHsKKyAgICAgIGlmIChmb3JtKQorCXNldF91c2VyIChjb25zdF9jYXN0PHZvaWQgKj4ocF9Vc2VyRGF0YSkpOworICB9CisKK3B1YmxpYzoKKyAgTkN1cnNlc1VzZXJGb3JtIChOQ3Vyc2VzRm9ybUZpZWxkIEZpZWxkc1tdLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApLAorCQkgICBib29sIHdpdGhfZnJhbWU9RkFMU0UsCisJCSAgIGJvb2wgYXV0b0RlbGV0ZV9GaWVsZHM9RkFMU0UpCisgICAgOiBOQ3Vyc2VzRm9ybSAoRmllbGRzLCB3aXRoX2ZyYW1lLCBhdXRvRGVsZXRlX0ZpZWxkcykgeworICAgICAgaWYgKGZvcm0pCisJc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH07CisKKyAgTkN1cnNlc1VzZXJGb3JtIChOQ3Vyc2VzRm9ybUZpZWxkIEZpZWxkc1tdLAorCQkgICBpbnQgbmxpbmVzLAorCQkgICBpbnQgbmNvbHMsCisJCSAgIGludCBiZWdpbl95ID0gMCwKKwkJICAgaW50IGJlZ2luX3ggPSAwLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApLAorCQkgICBib29sIHdpdGhfZnJhbWU9RkFMU0UsCisJCSAgIGJvb2wgYXV0b0RlbGV0ZV9GaWVsZHM9RkFMU0UpCisgICAgOiBOQ3Vyc2VzRm9ybSAoRmllbGRzLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94LAorCQkgICB3aXRoX2ZyYW1lLCBhdXRvRGVsZXRlX0ZpZWxkcykgeworICAgICAgaWYgKGZvcm0pCisJc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH07CisKKyAgdmlydHVhbCB+TkN1cnNlc1VzZXJGb3JtKCkgeworICB9OworCisgIGlubGluZSBUKiBVc2VyRGF0YSAodm9pZCkgY29uc3QgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihnZXRfdXNlciAoKSk7CisgIH07CisKKyAgaW5saW5lIHZpcnR1YWwgdm9pZCBzZXRVc2VyRGF0YSAoY29uc3QgVCogcF9Vc2VyRGF0YSkgeworICAgIGlmIChmb3JtKQorICAgICAgc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH0KKworfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCdWlsdGluIEZpZWxkdHlwZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBBbHBoYV9GaWVsZCA6IHB1YmxpYyBOQ3Vyc2VzRmllbGRUeXBlCit7Citwcml2YXRlOgorICBpbnQgbWluX2ZpZWxkX3dpZHRoOworCisgIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3R5cGUoZi5nZXRfZmllbGQoKSxmaWVsZHR5cGUsbWluX2ZpZWxkX3dpZHRoKSk7CisgIH0KKworcHVibGljOgorICBBbHBoYV9GaWVsZChpbnQgd2lkdGgpCisgICAgOiBOQ3Vyc2VzRmllbGRUeXBlKFRZUEVfQUxQSEEpLAorICAgICAgbWluX2ZpZWxkX3dpZHRoKHdpZHRoKSB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIEFscGhhbnVtZXJpY19GaWVsZCA6IHB1YmxpYyBOQ3Vyc2VzRmllbGRUeXBlCit7Citwcml2YXRlOgorICBpbnQgbWluX2ZpZWxkX3dpZHRoOworCisgIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3R5cGUoZi5nZXRfZmllbGQoKSxmaWVsZHR5cGUsbWluX2ZpZWxkX3dpZHRoKSk7CisgIH0KKworcHVibGljOgorICBBbHBoYW51bWVyaWNfRmllbGQoaW50IHdpZHRoKQorICAgIDogTkN1cnNlc0ZpZWxkVHlwZShUWVBFX0FMTlVNKSwKKyAgICAgIG1pbl9maWVsZF93aWR0aCh3aWR0aCkgeworICB9Cit9OworCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBJbnRlZ2VyX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIGludCBwcmVjaXNpb247CisgIGxvbmcgbG93ZXJfbGltaXQsIHVwcGVyX2xpbWl0OworCisgIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3R5cGUoZi5nZXRfZmllbGQoKSxmaWVsZHR5cGUsCisJCQkgICAgIHByZWNpc2lvbixsb3dlcl9saW1pdCx1cHBlcl9saW1pdCkpOworICB9CisKK3B1YmxpYzoKKyAgSW50ZWdlcl9GaWVsZChpbnQgcHJlYywgbG9uZyBsb3c9MEwsIGxvbmcgaGlnaD0wTCkKKyAgICA6IE5DdXJzZXNGaWVsZFR5cGUoVFlQRV9JTlRFR0VSKSwKKyAgICAgIHByZWNpc2lvbihwcmVjKSwgbG93ZXJfbGltaXQobG93KSwgdXBwZXJfbGltaXQoaGlnaCkgeworICB9Cit9OworCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOdW1lcmljX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIGludCBwcmVjaXNpb247CisgIGRvdWJsZSBsb3dlcl9saW1pdCwgdXBwZXJfbGltaXQ7CisKKyAgdm9pZCBzZXQoTkN1cnNlc0Zvcm1GaWVsZCYgZikgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfdHlwZShmLmdldF9maWVsZCgpLGZpZWxkdHlwZSwKKwkJCSAgICAgcHJlY2lzaW9uLGxvd2VyX2xpbWl0LHVwcGVyX2xpbWl0KSk7CisgIH0KKworcHVibGljOgorICBOdW1lcmljX0ZpZWxkKGludCBwcmVjLCBkb3VibGUgbG93PTAuMCwgZG91YmxlIGhpZ2g9MC4wKQorICAgIDogTkN1cnNlc0ZpZWxkVHlwZShUWVBFX05VTUVSSUMpLAorICAgICAgcHJlY2lzaW9uKHByZWMpLCBsb3dlcl9saW1pdChsb3cpLCB1cHBlcl9saW1pdChoaWdoKSB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCA6IHB1YmxpYyBOQ3Vyc2VzRmllbGRUeXBlCit7Citwcml2YXRlOgorICBjaGFyKiByZWdleDsKKworICB2b2lkIHNldChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF90eXBlKGYuZ2V0X2ZpZWxkKCksZmllbGR0eXBlLHJlZ2V4KSk7CisgIH0KKworICB2b2lkIGNvcHlfcmVnZXgoY29uc3QgY2hhciAqc291cmNlKQorICB7CisgICAgcmVnZXggPSBuZXcgY2hhclsxICsgOjpzdHJsZW4oc291cmNlKV07CisgICAgKDo6c3RyY3B5KShyZWdleCwgc291cmNlKTsKKyAgfQorCitwdWJsaWM6CisgIFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZChjb25zdCBjaGFyICpleHByKQorICAgIDogTkN1cnNlc0ZpZWxkVHlwZShUWVBFX1JFR0VYUCksCisgICAgICByZWdleChOVUxMKQorICB7CisgICAgY29weV9yZWdleChleHByKTsKKyAgfQorCisgIFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCYgb3BlcmF0b3I9KGNvbnN0IFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBjb3B5X3JlZ2V4KHJocy5yZWdleCk7CisgICAgICBOQ3Vyc2VzRmllbGRUeXBlOjpvcGVyYXRvcj0ocmhzKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkKGNvbnN0IFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCYgcmhzKQorICAgIDogTkN1cnNlc0ZpZWxkVHlwZShyaHMpLAorICAgICAgcmVnZXgoTlVMTCkKKyAgeworICAgIGNvcHlfcmVnZXgocmhzLnJlZ2V4KTsKKyAgfQorCisgIH5SZWd1bGFyX0V4cHJlc3Npb25fRmllbGQoKSB7CisgICAgZGVsZXRlW10gcmVnZXg7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIEVudW1lcmF0aW9uX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIGNvbnN0IGNoYXIqKiBsaXN0OworICBpbnQgY2FzZV9zZW5zaXRpdmU7CisgIGludCBub25fdW5pcXVlX21hdGNoZXM7CisKKyAgdm9pZCBzZXQoTkN1cnNlc0Zvcm1GaWVsZCYgZikgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfdHlwZShmLmdldF9maWVsZCgpLGZpZWxkdHlwZSwKKwkJCSAgICAgbGlzdCxjYXNlX3NlbnNpdGl2ZSxub25fdW5pcXVlX21hdGNoZXMpKTsKKyAgfQorcHVibGljOgorICBFbnVtZXJhdGlvbl9GaWVsZChjb25zdCBjaGFyKiBlbnVtc1tdLAorCQkgICAgYm9vbCBjYXNlX3NlbnM9RkFMU0UsCisJCSAgICBib29sIG5vbl91bmlxdWU9RkFMU0UpCisgICAgOiBOQ3Vyc2VzRmllbGRUeXBlKFRZUEVfRU5VTSksCisgICAgICBsaXN0KGVudW1zKSwKKyAgICAgIGNhc2Vfc2Vuc2l0aXZlKGNhc2Vfc2VucyA/IC0xIDogMCksCisgICAgICBub25fdW5pcXVlX21hdGNoZXMobm9uX3VuaXF1ZSA/IC0xIDogMCkgeworICB9CisKKyAgRW51bWVyYXRpb25fRmllbGQmIG9wZXJhdG9yPShjb25zdCBFbnVtZXJhdGlvbl9GaWVsZCYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBOQ3Vyc2VzRmllbGRUeXBlOjpvcGVyYXRvcj0ocmhzKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgRW51bWVyYXRpb25fRmllbGQoY29uc3QgRW51bWVyYXRpb25fRmllbGQmIHJocykKKyAgICA6IE5DdXJzZXNGaWVsZFR5cGUocmhzKSwKKyAgICAgIGxpc3QocmhzLmxpc3QpLAorICAgICAgY2FzZV9zZW5zaXRpdmUocmhzLmNhc2Vfc2Vuc2l0aXZlKSwKKyAgICAgIG5vbl91bmlxdWVfbWF0Y2hlcyhyaHMubm9uX3VuaXF1ZV9tYXRjaGVzKQorICB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIElQVjRfQWRkcmVzc19GaWVsZCA6IHB1YmxpYyBOQ3Vyc2VzRmllbGRUeXBlCit7Citwcml2YXRlOgorICB2b2lkIHNldChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF90eXBlKGYuZ2V0X2ZpZWxkKCksZmllbGR0eXBlKSk7CisgIH0KKworcHVibGljOgorICBJUFY0X0FkZHJlc3NfRmllbGQoKSA6IE5DdXJzZXNGaWVsZFR5cGUoVFlQRV9JUFY0KSB7CisgIH0KK307CisKK2V4dGVybiAiQyIgeworICBib29sIF9uY194eF9mbGRfZmNoZWNrKEZJRUxEICosIGNvbnN0IHZvaWQqKTsKKyAgYm9vbCBfbmNfeHhfZmxkX2NjaGVjayhpbnQgYywgY29uc3Qgdm9pZCAqKTsKKyAgdm9pZCogX25jX3h4X2ZsZF9tYWtlYXJnKHZhX2xpc3QqKTsKK30KKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIFVzZXItRGVmaW5lZCBGaWVsZHR5cGVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgTkNVUlNFU19JTVBFWFAgVXNlckRlZmluZWRGaWVsZFR5cGUgOiBwdWJsaWMgTkN1cnNlc0ZpZWxkVHlwZQoreworICBmcmllbmQgY2xhc3MgVURGX0luaXQ7IC8vIEludGVybmFsIGhlbHBlciB0byBzZXQgdXAgc3RhdGljcworcHJpdmF0ZToKKyAgLy8gRm9yIGFsbCBDKysgZGVmaW5lZCBmaWVsZHR5cGVzIHdlIG5lZWQgb25seSBvbmUgZ2VuZXJpYyBsb3dsZXZlbAorICAvLyBGSUVMRFRZUEUqIGVsZW1lbnQuCisgIHN0YXRpYyBGSUVMRFRZUEUqIGdlbmVyaWNfZmllbGR0eXBlOworCitwcm90ZWN0ZWQ6CisgIC8vIFRoaXMgYXJlIHRoZSBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgdGhlIGxvdyBsZXZlbCBsaWJmb3JtcyBmdW5jdGlvbnMKKyAgLy8gdG8gY29uc3RydWN0IGEgZmllbGR0eXBlLgorICBmcmllbmQgYm9vbCBfbmNfeHhfZmxkX2ZjaGVjayhGSUVMRCAqLCBjb25zdCB2b2lkKik7CisgIGZyaWVuZCBib29sIF9uY194eF9mbGRfY2NoZWNrKGludCBjLCBjb25zdCB2b2lkICopOworICBmcmllbmQgdm9pZCogX25jX3h4X2ZsZF9tYWtlYXJnKHZhX2xpc3QqKTsKKworICB2b2lkIHNldChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF90eXBlKGYuZ2V0X2ZpZWxkKCksZmllbGR0eXBlLCZmKSk7CisgIH0KKworcHJvdGVjdGVkOgorICAvLyBSZWRlZmluZSB0aGlzIGZ1bmN0aW9uIHRvIGRvIGEgZmllbGQgdmFsaWRhdGlvbi4gVGhlIGFyZ3VtZW50CisgIC8vIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCB5b3Ugc2hvdWxkIHZhbGlkYXRlLgorICB2aXJ0dWFsIGJvb2wgZmllbGRfY2hlY2soTkN1cnNlc0Zvcm1GaWVsZCYgZikgPSAwOworCisgIC8vIFJlZGVmaW5lIHRoaXMgZnVuY3Rpb24gdG8gZG8gYSBjaGFyYWN0ZXIgdmFsaWRhdGlvbi4gVGhlIGFyZ3VtZW50CisgIC8vIGlzIHRoZSBjaGFyYWN0ZXIgdG8gYmUgdmFsaWRhdGVkLgorICB2aXJ0dWFsIGJvb2wgY2hhcl9jaGVjayAoaW50IGMpID0gMDsKKworcHVibGljOgorICBVc2VyRGVmaW5lZEZpZWxkVHlwZSgpIDogTkN1cnNlc0ZpZWxkVHlwZShnZW5lcmljX2ZpZWxkdHlwZSkgeworICB9Cit9OworCitleHRlcm4gIkMiIHsKKyAgYm9vbCBfbmNfeHhfbmV4dF9jaG9pY2UoRklFTEQqLCBjb25zdCB2b2lkICopOworICBib29sIF9uY194eF9wcmV2X2Nob2ljZShGSUVMRCosIGNvbnN0IHZvaWQgKik7Cit9CisKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBVc2VyLURlZmluZWQgRmllbGR0eXBlcyB3aXRoIENob2ljZSBmdW5jdGlvbnMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZSA6IHB1YmxpYyBVc2VyRGVmaW5lZEZpZWxkVHlwZQoreworICBmcmllbmQgY2xhc3MgVURGX0luaXQ7IC8vIEludGVybmFsIGhlbHBlciB0byBzZXQgdXAgc3RhdGljcworcHJpdmF0ZToKKyAgLy8gRm9yIGFsbCBDKysgZGVmaW5lZCBmaWVsZHR5cGVzIHdpdGggY2hvaWNlIGZ1bmN0aW9ucyB3ZSBuZWVkIG9ubHkgb25lCisgIC8vIGdlbmVyaWMgbG93bGV2ZWwgRklFTERUWVBFKiBlbGVtZW50LgorICBzdGF0aWMgRklFTERUWVBFKiBnZW5lcmljX2ZpZWxkdHlwZV93aXRoX2Nob2ljZTsKKworICAvLyBUaGlzIGFyZSB0aGUgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBsb3cgbGV2ZWwgbGliZm9ybXMgZnVuY3Rpb25zCisgIC8vIHRvIGNvbnN0cnVjdCBhIGZpZWxkdHlwZSB3aXRoIGNob2ljZSBmdW5jdGlvbnMuCisgIGZyaWVuZCBib29sIF9uY194eF9uZXh0X2Nob2ljZShGSUVMRCosIGNvbnN0IHZvaWQgKik7CisgIGZyaWVuZCBib29sIF9uY194eF9wcmV2X2Nob2ljZShGSUVMRCosIGNvbnN0IHZvaWQgKik7CisKK3Byb3RlY3RlZDoKKyAgLy8gUmVkZWZpbmUgdGhpcyBmdW5jdGlvbiB0byBkbyB0aGUgcmV0cmlldmFsIG9mIHRoZSBuZXh0IGNob2ljZSB2YWx1ZS4KKyAgLy8gVGhlIGFyZ3VtZW50IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCB0b2JlIGV4YW1pbmVkLgorICB2aXJ0dWFsIGJvb2wgbmV4dCAgICAoTkN1cnNlc0Zvcm1GaWVsZCYgZikgPSAwOworCisgIC8vIFJlZGVmaW5lIHRoaXMgZnVuY3Rpb24gdG8gZG8gdGhlIHJldHJpZXZhbCBvZiB0aGUgcHJldmlvdXMgY2hvaWNlIHZhbHVlLgorICAvLyBUaGUgYXJndW1lbnQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGZpZWxkIHRvYmUgZXhhbWluZWQuCisgIHZpcnR1YWwgYm9vbCBwcmV2aW91cyhOQ3Vyc2VzRm9ybUZpZWxkJiBmKSA9IDA7CisKK3B1YmxpYzoKKyAgVXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2UoKSB7CisgICAgZmllbGR0eXBlID0gZ2VuZXJpY19maWVsZHR5cGVfd2l0aF9jaG9pY2U7CisgIH0KK307CisKKyNlbmRpZiAvKiBOQ1VSU0VTX0NVUlNFU0ZfSF9pbmNsICovCmRpZmYgLS1naXQgYS9jKysvY3Vyc2VzbS5jYyBiL2MrKy9jdXJzZXNtLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTNhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvY3Vyc2VzbS5jYwpAQCAtMCwwICsxLDQwNyBAQAorLy8gKiB0aGlzIGlzIGZvciBtYWtpbmcgZW1hY3MgaGFwcHk6IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImN1cnNlc20uaCIKKyNpbmNsdWRlICJjdXJzZXNhcHAuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGN1cnNlc20uY2MsdiAxLjIyIDIwMDUvMDQvMDIgMjA6Mzk6MDUgdG9tIEV4cCAkIikKKworTkN1cnNlc01lbnVJdGVtOjp+TkN1cnNlc01lbnVJdGVtKCkKK3sKKyAgaWYgKGl0ZW0pCisgICAgT25FcnJvcig6OmZyZWVfaXRlbShpdGVtKSk7Cit9CisKK2Jvb2wKK05DdXJzZXNNZW51SXRlbTo6YWN0aW9uKCkKK3sKKyAgcmV0dXJuIEZBTFNFOworfQorCitOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbTo6fk5DdXJzZXNNZW51Q2FsbGJhY2tJdGVtKCkKK3sKK30KKworYm9vbAorTkN1cnNlc01lbnVDYWxsYmFja0l0ZW06OmFjdGlvbigpCit7CisgIGlmIChwX2ZjdCkKKyAgICByZXR1cm4gcF9mY3QgKCp0aGlzKTsKKyAgZWxzZQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyogSW50ZXJuYWwgaG9vayBmdW5jdGlvbnMuIFRoZXkgd2lsbCByb3V0ZSB0aGUgaG9vaworICogY2FsbHMgdG8gdmlydHVhbCBtZXRob2RzIG9mIHRoZSBOQ3Vyc2VzTWVudSBjbGFzcywKKyAqIHNvIGluIEMrKyBwcm92aWRpbmcgYSBob29rIGlzIGRvbmUgc2ltcGx5IGJ5CisgKiBpbXBsZW1lbnRpbmcgYSB2aXJ0dWFsIG1ldGhvZCBpbiBhIGRlcml2ZWQgY2xhc3MKKyAqLwordm9pZAorX25jX3h4X21udV9pbml0KE1FTlUgKm0pCit7CisgIE5DdXJzZXNNZW51OjpnZXRIb29rKG0pLT5Pbl9NZW51X0luaXQoKTsKK30KKwordm9pZAorX25jX3h4X21udV90ZXJtKE1FTlUgKm0pCit7CisgIE5DdXJzZXNNZW51OjpnZXRIb29rKG0pLT5Pbl9NZW51X1Rlcm1pbmF0aW9uKCk7Cit9CisKK3ZvaWQKK19uY194eF9pdG1faW5pdChNRU5VICptKQoreworICBOQ3Vyc2VzTWVudSogTSA9IE5DdXJzZXNNZW51OjpnZXRIb29rKG0pOworICBNLT5Pbl9JdGVtX0luaXQgKCooTS0+Y3VycmVudF9pdGVtICgpKSk7Cit9CisKK3ZvaWQKK19uY194eF9pdG1fdGVybShNRU5VICptKQoreworICBOQ3Vyc2VzTWVudSogTSA9IE5DdXJzZXNNZW51OjpnZXRIb29rKG0pOworICBNLT5Pbl9JdGVtX1Rlcm1pbmF0aW9uICgqKE0tPmN1cnJlbnRfaXRlbSAoKSkpOworfQorCisvKiBDb25zdHJ1Y3QgYW4gSVRFTSogYXJyYXkgZnJvbSBhbiBhcnJheSBvZiBOQ3Vyc2VzTWVudUl0ZW0KKyAqIG9iamVjdHMuCisgKi8KK0lURU0qKgorTkN1cnNlc01lbnU6Om1hcEl0ZW1zKE5DdXJzZXNNZW51SXRlbSogbml0ZW1zW10pCit7CisgIGludCBpdGVtQ291bnQgPSAwLGxjdjsKKworICBmb3IgKGxjdj0wOyBuaXRlbXNbbGN2XS0+aXRlbTsgKytsY3YpCisgICAgKytpdGVtQ291bnQ7CisKKyAgSVRFTSoqIGl0ZW1BcnJheSA9IG5ldyBJVEVNKltpdGVtQ291bnQgKyAxXTsKKworICBmb3IgKGxjdj0wO25pdGVtc1tsY3ZdLT5pdGVtOysrbGN2KSB7CisgICAgaXRlbUFycmF5W2xjdl0gPSBuaXRlbXNbbGN2XS0+aXRlbTsKKyAgfQorICBpdGVtQXJyYXlbbGN2XSA9IE5VTEw7CisKKyAgbXlfaXRlbXMgPSBuaXRlbXM7CisKKyAgaWYgKG1lbnUpCisgICAgZGVsZXRlW10gOjptZW51X2l0ZW1zKG1lbnUpOworICByZXR1cm4gaXRlbUFycmF5OworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6SW5pdE1lbnUoTkN1cnNlc01lbnVJdGVtKiBuaXRlbXNbXSwKKwkJICAgICAgYm9vbCB3aXRoX2ZyYW1lLAorCQkgICAgICBib29sIGF1dG9EZWxldGVfSXRlbXMpCit7CisgIGludCBtcm93cywgbWNvbHM7CisKKyAga2V5cGFkKFRSVUUpOworICBtZXRhKFRSVUUpOworCisgIGJfZnJhbWVkID0gd2l0aF9mcmFtZTsKKyAgYl9hdXRvRGVsZXRlID0gYXV0b0RlbGV0ZV9JdGVtczsKKworICBtZW51ID0gc3RhdGljX2Nhc3Q8TUVOVSo+KDApOworICBtZW51ID0gOjpuZXdfbWVudShtYXBJdGVtcyhuaXRlbXMpKTsKKyAgaWYgKCFtZW51KQorICAgIE9uRXJyb3IgKEVfU1lTVEVNX0VSUk9SKTsKKworICBVc2VySG9vayogaG9vayA9IG5ldyBVc2VySG9vazsKKyAgaG9vay0+bV91c2VyICAgPSBOVUxMOworICBob29rLT5tX2JhY2sgICA9IHRoaXM7CisgIGhvb2stPm1fb3duZXIgID0gbWVudTsKKyAgOjpzZXRfbWVudV91c2VycHRyKG1lbnUsIHN0YXRpY19jYXN0PHZvaWQqPihob29rKSk7CisKKyAgOjpzZXRfbWVudV9pbml0IChtZW51LCBfbmNfeHhfbW51X2luaXQpOworICA6OnNldF9tZW51X3Rlcm0gKG1lbnUsIF9uY194eF9tbnVfdGVybSk7CisgIDo6c2V0X2l0ZW1faW5pdCAobWVudSwgX25jX3h4X2l0bV9pbml0KTsKKyAgOjpzZXRfaXRlbV90ZXJtIChtZW51LCBfbmNfeHhfaXRtX3Rlcm0pOworCisgIHNjYWxlKG1yb3dzLCBtY29scyk7CisgIDo6c2V0X21lbnVfd2luKG1lbnUsIHcpOworCisgIGlmICh3aXRoX2ZyYW1lKSB7CisgICAgaWYgKChtcm93cyA+IGhlaWdodCgpLTIpIHx8IChtY29scyA+IHdpZHRoKCktMikpCisgICAgICBPbkVycm9yKEVfTk9fUk9PTSk7CisgICAgc3ViID0gbmV3IE5DdXJzZXNXaW5kb3coKnRoaXMsbXJvd3MsbWNvbHMsMSwxLCdyJyk7CisgICAgOjpzZXRfbWVudV9zdWIobWVudSwgc3ViLT53KTsKKyAgICBiX3N1Yl9vd25lciA9IFRSVUU7CisgIH0KKyAgZWxzZSB7CisgICAgc3ViID0gc3RhdGljX2Nhc3Q8TkN1cnNlc1dpbmRvdyo+KDApOworICAgIGJfc3ViX293bmVyID0gRkFMU0U7CisgIH0KKyAgc2V0RGVmYXVsdEF0dHJpYnV0ZXMoKTsKK30KKwordm9pZAorTkN1cnNlc01lbnU6OnNldERlZmF1bHRBdHRyaWJ1dGVzKCkKK3sKKyAgTkN1cnNlc0FwcGxpY2F0aW9uKiBTID0gTkN1cnNlc0FwcGxpY2F0aW9uOjpnZXRBcHBsaWNhdGlvbigpOworICBpZiAoUykgeworICAgIDo6c2V0X21lbnVfZm9yZShtZW51LCBTLT5mb3JlZ3JvdW5kcygpKTsKKyAgICA6OnNldF9tZW51X2JhY2sobWVudSwgUy0+YmFja2dyb3VuZHMoKSk7CisgICAgOjpzZXRfbWVudV9ncmV5KG1lbnUsIFMtPmluYWN0aXZlcygpKTsKKyAgfQorfQorCitOQ3Vyc2VzTWVudTo6fk5DdXJzZXNNZW51KCkKK3sKKyAgVXNlckhvb2sqIGhvb2sgPSByZWludGVycHJldF9jYXN0PFVzZXJIb29rKj4oOjptZW51X3VzZXJwdHIobWVudSkpOworICBkZWxldGUgaG9vazsKKyAgaWYgKGJfc3ViX293bmVyKSB7CisgICAgZGVsZXRlIHN1YjsKKyAgICA6OnNldF9tZW51X3N1YihtZW51LCBzdGF0aWNfY2FzdDxXSU5ET1cgKj4oMCkpOworICB9CisgIGlmIChtZW51KSB7CisgICAgSVRFTSoqIGl0bXMgPSA6Om1lbnVfaXRlbXMobWVudSk7CisgICAgaW50IGNudCA9IGNvdW50KCk7CisKKyAgICBPbkVycm9yKDo6c2V0X21lbnVfaXRlbXMobWVudSwgc3RhdGljX2Nhc3Q8SVRFTSoqPigwKSkpOworCisgICAgaWYgKGJfYXV0b0RlbGV0ZSkgeworICAgICAgaWYgKGNudD4wKSB7CisJZm9yIChpbnQgaT0wOyBpIDw9IGNudDsgaSsrKQorCSAgZGVsZXRlIG15X2l0ZW1zW2ldOworICAgICAgfQorICAgICAgZGVsZXRlW10gbXlfaXRlbXM7CisgICAgfQorCisgICAgOjpmcmVlX21lbnUobWVudSk7CisgICAgLy8gSXQncyBlc3NlbnRpYWwgdG8gZG8gdGhpcyBhZnRlciBmcmVlX21lbnUoKQorICAgIGRlbGV0ZVtdIGl0bXM7CisgIH0KK30KKwordm9pZAorTkN1cnNlc01lbnU6OnNldFN1YldpbmRvdyhOQ3Vyc2VzV2luZG93JiBuc3ViKQoreworICBpZiAoIWlzRGVzY2VuZGFudChuc3ViKSkKKyAgICBPbkVycm9yKEVfU1lTVEVNX0VSUk9SKTsKKyAgZWxzZSB7CisgICAgaWYgKGJfc3ViX293bmVyKQorICAgICAgZGVsZXRlIHN1YjsKKyAgICBzdWIgPSAmbnN1YjsKKyAgICA6OnNldF9tZW51X3N1YihtZW51LHN1Yi0+dyk7CisgIH0KK30KKworYm9vbAorTkN1cnNlc01lbnU6OnNldF9wYXR0ZXJuIChjb25zdCBjaGFyICpwYXQpCit7CisgIGludCByZXMgPSA6OnNldF9tZW51X3BhdHRlcm4gKG1lbnUsIHBhdCk7CisgIHN3aXRjaChyZXMpIHsKKyAgY2FzZSBFX09LOgorICAgIGJyZWFrOworICBjYXNlIEVfTk9fTUFUQ0g6CisgICAgcmV0dXJuIEZBTFNFOworICBkZWZhdWx0OgorICAgIE9uRXJyb3IgKHJlcyk7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8vIGNhbGwgdGhlIG1lbnUgZHJpdmVyIGFuZCBkbyBiYXNpYyBlcnJvciBjaGVja2luZy4KK2ludAorTkN1cnNlc01lbnU6OmRyaXZlciAoaW50IGMpCit7CisgIGludCByZXMgPSA6Om1lbnVfZHJpdmVyIChtZW51LCBjKTsKKyAgc3dpdGNoIChyZXMpIHsKKyAgY2FzZSBFX09LOgorICBjYXNlIEVfUkVRVUVTVF9ERU5JRUQ6CisgIGNhc2UgRV9OT1RfU0VMRUNUQUJMRToKKyAgY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKyAgY2FzZSBFX05PX01BVENIOgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIE9uRXJyb3IgKHJlcyk7CisgIH0KKyAgcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgY29uc3QgaW50IENNRF9RVUlUICAgPSBNQVhfQ09NTUFORCArIDE7CitzdGF0aWMgY29uc3QgaW50IENNRF9BQ1RJT04gPSBNQVhfQ09NTUFORCArIDI7CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHJvdmlkZSBhIGRlZmF1bHQga2V5IHZpcnR1YWxpemF0aW9uLiBUcmFuc2xhdGUgdGhlIGtleWJvYXJkCisvLyBjb2RlIGMgaW50byBhIG1lbnUgcmVxdWVzdCBjb2RlLgorLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYSBob3BlZnVsbHkgc3RyYWlnaHRmb3J3YXJkCisvLyBtYXBwaW5nIGZvciB0aGUgbW9zdCBjb21tb24ga2V5c3Ryb2tlcyBhbmQgbWVudSByZXF1ZXN0cy4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludAorTkN1cnNlc01lbnU6OnZpcnR1YWxpemUoaW50IGMpCit7CisgIHN3aXRjaChjKSB7CisgIGNhc2UgQ1RSTCgnWCcpICAgICA6IHJldHVybihDTURfUVVJVCk7ICAgICAgICAgICAgICAvLyBlWGl0CisKKyAgY2FzZSBLRVlfRE9XTiAgICAgIDogcmV0dXJuKFJFUV9ET1dOX0lURU0pOworICBjYXNlIENUUkwoJ04nKSAgICAgOiByZXR1cm4oUkVRX05FWFRfSVRFTSk7ICAgICAgICAgLy8gTmV4dAorICBjYXNlIEtFWV9VUCAgICAgICAgOiByZXR1cm4oUkVRX1VQX0lURU0pOworICBjYXNlIENUUkwoJ1AnKSAgICAgOiByZXR1cm4oUkVRX1BSRVZfSVRFTSk7ICAgICAgICAgLy8gUHJldmlvdXMKKworICBjYXNlIENUUkwoJ1UnKSAgICAgOiByZXR1cm4oUkVRX1NDUl9VTElORSk7ICAgICAgICAgLy8gVXAKKyAgY2FzZSBDVFJMKCdEJykgICAgIDogcmV0dXJuKFJFUV9TQ1JfRExJTkUpOyAgICAgICAgIC8vIERvd24KKyAgY2FzZSBDVFJMKCdGJykgICAgIDogcmV0dXJuKFJFUV9TQ1JfRFBBR0UpOyAgICAgICAgIC8vIEZvcndhcmQKKyAgY2FzZSBDVFJMKCdCJykgICAgIDogcmV0dXJuKFJFUV9TQ1JfVVBBR0UpOyAgICAgICAgIC8vIEJhY2t3YXJkCisKKyAgY2FzZSBDVFJMKCdZJykgICAgIDogcmV0dXJuKFJFUV9DTEVBUl9QQVRURVJOKTsKKyAgY2FzZSBDVFJMKCdIJykgICAgIDogcmV0dXJuKFJFUV9CQUNLX1BBVFRFUk4pOworICBjYXNlIENUUkwoJ0EnKSAgICAgOiByZXR1cm4oUkVRX05FWFRfTUFUQ0gpOworICBjYXNlIENUUkwoJ0UnKSAgICAgOiByZXR1cm4oUkVRX1BSRVZfTUFUQ0gpOworICBjYXNlIENUUkwoJ1QnKSAgICAgOiByZXR1cm4oUkVRX1RPR0dMRV9JVEVNKTsKKworICBjYXNlIENUUkwoJ0onKSAgICAgOgorICBjYXNlIENUUkwoJ00nKSAgICAgOiByZXR1cm4oQ01EX0FDVElPTik7CisKKyAgY2FzZSBLRVlfSE9NRSAgICAgIDogcmV0dXJuKFJFUV9GSVJTVF9JVEVNKTsKKyAgY2FzZSBLRVlfTEVGVCAgICAgIDogcmV0dXJuKFJFUV9MRUZUX0lURU0pOworICBjYXNlIEtFWV9SSUdIVCAgICAgOiByZXR1cm4oUkVRX1JJR0hUX0lURU0pOworICBjYXNlIEtFWV9FTkQgICAgICAgOiByZXR1cm4oUkVRX0xBU1RfSVRFTSk7CisgIGNhc2UgS0VZX0JBQ0tTUEFDRSA6IHJldHVybihSRVFfQkFDS19QQVRURVJOKTsKKyAgY2FzZSBLRVlfTlBBR0UgICAgIDogcmV0dXJuKFJFUV9TQ1JfRFBBR0UpOworICBjYXNlIEtFWV9QUEFHRSAgICAgOiByZXR1cm4oUkVRX1NDUl9VUEFHRSk7CisKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4oYyk7CisgIH0KK30KKworTkN1cnNlc01lbnVJdGVtKgorTkN1cnNlc01lbnU6Om9wZXJhdG9yKCkodm9pZCkKK3sKKyAgaW50IGRydkNtbmQ7CisgIGludCBlcnI7CisgIGludCBjOworICBib29sIGJfYWN0aW9uID0gRkFMU0U7CisKKyAgcG9zdCgpOworICBzaG93KCk7CisgIHJlZnJlc2goKTsKKworICB3aGlsZSAoIWJfYWN0aW9uICYmICgoZHJ2Q21uZCA9IHZpcnR1YWxpemUoKGM9Z2V0S2V5KCkpKSkgIT0gQ01EX1FVSVQpKSB7CisKKyAgICBzd2l0Y2goKGVycj1kcml2ZXIoZHJ2Q21uZCkpKSB7CisgICAgY2FzZSBFX1JFUVVFU1RfREVOSUVEOgorICAgICAgT25fUmVxdWVzdF9EZW5pZWQoYyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEVfTk9UX1NFTEVDVEFCTEU6CisgICAgICBPbl9Ob3RfU2VsZWN0YWJsZShjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRV9VTktOT1dOX0NPTU1BTkQ6CisgICAgICBpZiAoZHJ2Q21uZCA9PSBDTURfQUNUSU9OKSB7CisJaWYgKG9wdGlvbnMoKSAmIE9fT05FVkFMVUUpIHsKKwkgIE5DdXJzZXNNZW51SXRlbSogaXRtID0gY3VycmVudF9pdGVtKCk7CisJICBhc3NlcnQoaXRtICE9IDApOworCSAgaWYgKGl0bS0+b3B0aW9ucygpICYgT19TRUxFQ1RBQkxFKQorCSAgICB7CisJICAgICAgYl9hY3Rpb24gPSBpdG0tPmFjdGlvbigpOworCSAgICAgIHJlZnJlc2goKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBPbl9Ob3RfU2VsZWN0YWJsZShjKTsKKwl9CisJZWxzZSB7CisJICBpbnQgbiA9IGNvdW50KCk7CisJICBmb3IoaW50IGk9MDsgaTxuOyBpKyspIHsKKwkgICAgTkN1cnNlc01lbnVJdGVtKiBpdG0gPSBteV9pdGVtc1tpXTsKKwkgICAgaWYgKGl0bS0+dmFsdWUoKSkgeworCSAgICAgIGJfYWN0aW9uIHw9IGl0bS0+YWN0aW9uKCk7CisJICAgICAgcmVmcmVzaCgpOworCSAgICB9CisJICB9CisJfQorICAgICAgfSBlbHNlCisJT25fVW5rbm93bl9Db21tYW5kKGMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBFX05PX01BVENIOgorICAgICAgT25fTm9fTWF0Y2goYyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEVfT0s6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgT25FcnJvcihlcnIpOworICAgIH0KKyAgfQorCisgIHVucG9zdCgpOworICBoaWRlKCk7CisgIHJlZnJlc2goKTsKKyAgaWYgKG9wdGlvbnMoKSAmIE9fT05FVkFMVUUpCisgICAgcmV0dXJuIG15X2l0ZW1zWzo6aXRlbV9pbmRleCAoOjpjdXJyZW50X2l0ZW0gKG1lbnUpKV07CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX01lbnVfSW5pdCgpCit7Cit9CisKK3ZvaWQKK05DdXJzZXNNZW51OjpPbl9NZW51X1Rlcm1pbmF0aW9uKCkKK3sKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX0l0ZW1fSW5pdChOQ3Vyc2VzTWVudUl0ZW0mIGl0ZW0pCit7Cit9CisKK3ZvaWQKK05DdXJzZXNNZW51OjpPbl9JdGVtX1Rlcm1pbmF0aW9uKE5DdXJzZXNNZW51SXRlbSYgaXRlbSkKK3sKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX1JlcXVlc3RfRGVuaWVkKGludCBjKSBjb25zdAoreworICA6OmJlZXAoKTsKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX05vdF9TZWxlY3RhYmxlKGludCBjKSBjb25zdAoreworICA6OmJlZXAoKTsKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX05vX01hdGNoKGludCBjKSBjb25zdAoreworICA6OmJlZXAoKTsKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX1Vua25vd25fQ29tbWFuZChpbnQgYykgY29uc3QKK3sKKyAgOjpiZWVwKCk7Cit9CmRpZmYgLS1naXQgYS9jKysvY3Vyc2VzbS5oIGIvYysrL2N1cnNlc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWMyMjczCi0tLSAvZGV2L251bGwKKysrIGIvYysrL2N1cnNlc20uaApAQCAtMCwwICsxLDY3MiBAQAorLy8gKiBUaGlzIG1ha2VzIGVtYWNzIGhhcHB5IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vICRJZDogY3Vyc2VzbS5oLHYgMS4yNSAyMDA1LzA4LzEzIDE4OjEwOjM2IHRvbSBFeHAgJAorCisjaWZuZGVmIE5DVVJTRVNfQ1VSU0VTTV9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19DVVJTRVNNX0hfaW5jbCAxCisKKyNpbmNsdWRlIDxjdXJzZXNwLmg+CisKK2V4dGVybiAiQyIgeworIyAgaW5jbHVkZSA8bWVudS5oPgorfQorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgd3JhcHMgdGhlIElURU0gdHlwZSBvZiA8bWVudS5oPgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNNZW51SXRlbQoreworICBmcmllbmQgY2xhc3MgTkN1cnNlc01lbnU7CisKK3Byb3RlY3RlZDoKKyAgSVRFTSAqaXRlbTsKKworICBpbmxpbmUgdm9pZCBPbkVycm9yIChpbnQgZXJyKSBjb25zdCBUSFJPV1MoTkN1cnNlc01lbnVFeGNlcHRpb24pIHsKKyAgICBpZiAoZXJyICE9IEVfT0spCisgICAgICBUSFJPVyhuZXcgTkN1cnNlc01lbnVFeGNlcHRpb24gKGVycikpOworICB9CisKK3B1YmxpYzoKKyAgTkN1cnNlc01lbnVJdGVtIChjb25zdCBjaGFyKiBwX25hbWUgICAgID0gTlVMTCwKKwkJICAgY29uc3QgY2hhciogcF9kZXNjcmlwdCA9IE5VTEwpCisgICAgOiBpdGVtKDApCisgIHsKKyAgICBpdGVtID0gcF9uYW1lID8gOjpuZXdfaXRlbSAocF9uYW1lLCBwX2Rlc2NyaXB0KSA6IFNUQVRJQ19DQVNUKElURU0qKSgwKTsKKyAgICBpZiAocF9uYW1lICYmICFpdGVtKQorICAgICAgT25FcnJvciAoRV9TWVNURU1fRVJST1IpOworICB9CisgIC8vIENyZWF0ZSBhbiBpdGVtLiBJZiB5b3UgcGFzcyBib3RoIHBhcmFtZXRlcnMgYXMgTlVMTCwgYSBkZWxpbWl0aW5nCisgIC8vIGl0ZW0gaXMgY29uc3RydWN0ZWQgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdGVybWluYXRlIGEgbGlzdCBvZgorICAvLyBOQ3Vyc2VzTWVudSBvYmplY3RzLgorCisgIE5DdXJzZXNNZW51SXRlbSYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNNZW51SXRlbSYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNNZW51SXRlbShjb25zdCBOQ3Vyc2VzTWVudUl0ZW0mIHJocykKKyAgICA6IGl0ZW0oMCkKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc01lbnVJdGVtICgpOworICAvLyBSZWxlYXNlIHRoZSBpdGVtcyBtZW1vcnkKKworICBpbmxpbmUgY29uc3QgY2hhciogbmFtZSAoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6aXRlbV9uYW1lIChpdGVtKTsKKyAgfQorICAvLyBOYW1lIG9mIHRoZSBpdGVtCisKKyAgaW5saW5lIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uICgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjppdGVtX2Rlc2NyaXB0aW9uIChpdGVtKTsKKyAgfQorICAvLyBEZXNjcmlwdGlvbiBvZiB0aGUgaXRlbQorCisgIGlubGluZSBpbnQgKGluZGV4KSAodm9pZCkgY29uc3QgeworICAgIHJldHVybiA6Oml0ZW1faW5kZXggKGl0ZW0pOworICB9CisgIC8vIEluZGV4IG9mIHRoZSBpdGVtIGluIGFuIGl0ZW0gYXJyYXkgKG9yIC0xKQorCisgIGlubGluZSB2b2lkIG9wdGlvbnNfb24gKEl0ZW1fT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjppdGVtX29wdHNfb24gKGl0ZW0sIG9wdHMpKTsKKyAgfQorICAvLyBTd2l0Y2ggb24gdGhlIGl0ZW1zIG9wdGlvbnMKKworICBpbmxpbmUgdm9pZCBvcHRpb25zX29mZiAoSXRlbV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6Oml0ZW1fb3B0c19vZmYgKGl0ZW0sIG9wdHMpKTsKKyAgfQorICAvLyBTd2l0Y2ggb2ZmIHRoZSBpdGVtJ3Mgb3B0aW9uCisKKyAgaW5saW5lIEl0ZW1fT3B0aW9ucyBvcHRpb25zICgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjppdGVtX29wdHMgKGl0ZW0pOworICB9CisgIC8vIFJldHJpZXZlIHRoZSBpdGVtcyBvcHRpb25zCisKKyAgaW5saW5lIHZvaWQgc2V0X29wdGlvbnMgKEl0ZW1fT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpzZXRfaXRlbV9vcHRzIChpdGVtLCBvcHRzKSk7CisgIH0KKyAgLy8gU2V0IHRoZSBpdGVtcyBvcHRpb25zCisKKyAgaW5saW5lIHZvaWQgc2V0X3ZhbHVlIChib29sIGYpIHsKKyAgICBPbkVycm9yICg6OnNldF9pdGVtX3ZhbHVlIChpdGVtLGYpKTsKKyAgfQorICAvLyBTZXQvUmVzZXQgdGhlIGl0ZW1zIHNlbGVjdGlvbiBzdGF0ZQorCisgIGlubGluZSBib29sIHZhbHVlICgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjppdGVtX3ZhbHVlIChpdGVtKTsKKyAgfQorICAvLyBSZXRyaWV2ZSB0aGUgaXRlbXMgc2VsZWN0aW9uIHN0YXRlCisKKyAgaW5saW5lIGJvb2wgdmlzaWJsZSAoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6aXRlbV92aXNpYmxlIChpdGVtKTsKKyAgfQorICAvLyBSZXRyaWV2ZSB2aXNpYmlsaXR5IG9mIHRoZSBpdGVtCisKKyAgdmlydHVhbCBib29sIGFjdGlvbigpOworICAvLyBQZXJmb3JtIGFuIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBpdGVtOyB5b3UgbWF5IHVzZSB0aGlzIGluIGFuCisgIC8vIHVzZXIgc3VwcGxpZWQgZHJpdmVyIGZvciBhIG1lbnU7IHlvdSBtYXkgZGVyaXZlIGZyb20gdGhpcyBjbGFzcyBhbmQKKyAgLy8gb3ZlcmxvYWQgYWN0aW9uKCkgdG8gc3VwcGx5IGl0ZW1zIHdpdGggZGlmZmVyZW50IGFjdGlvbnMuCisgIC8vIElmIGFuIGFjdGlvbiByZXR1cm5zIHRydWUsIHRoZSBtZW51IHdpbGwgYmUgZXhpdGVkLiBUaGUgZGVmYXVsdCBhY3Rpb24KKyAgLy8gaXMgdG8gZG8gbm90aGluZy4KK307CisKKy8vIFByb3RvdHlwZSBmb3IgYW4gaXRlbXMgY2FsbGJhY2sgZnVuY3Rpb24uCit0eXBlZGVmIGJvb2wgSVRFTUNBTExCQUNLKE5DdXJzZXNNZW51SXRlbSYpOworCisvLyBJZiB5b3UgZG9uJ3QgbGlrZSB0byBjcmVhdGUgYSBjaGlsZCBjbGFzcyBmb3IgaW5kaXZpZHVhbCBpdGVtcyB0bworLy8gb3ZlcmxvYWQgYWN0aW9uKCksIHlvdSBtYXkgdXNlIHRoaXMgY2xhc3MgYW5kIHByb3ZpZGUgYSBjYWxsYmFjaworLy8gZnVuY3Rpb24gcG9pbnRlciBmb3IgaXRlbXMuCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbSA6IHB1YmxpYyBOQ3Vyc2VzTWVudUl0ZW0KK3sKK3ByaXZhdGU6CisgIElURU1DQUxMQkFDSyogcF9mY3Q7CisKK3B1YmxpYzoKKyAgTkN1cnNlc01lbnVDYWxsYmFja0l0ZW0oSVRFTUNBTExCQUNLKiBmY3QgICAgICAgPSBOVUxMLAorCQkJICBjb25zdCBjaGFyKiBwX25hbWUgICAgICA9IE5VTEwsCisJCQkgIGNvbnN0IGNoYXIqIHBfZGVzY3JpcHQgID0gTlVMTCApCisgICAgOiBOQ3Vyc2VzTWVudUl0ZW0gKHBfbmFtZSwgcF9kZXNjcmlwdCksCisgICAgICBwX2ZjdCAoZmN0KSB7CisgIH0KKworICBOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbSYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNNZW51Q2FsbGJhY2tJdGVtJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc01lbnVDYWxsYmFja0l0ZW0oY29uc3QgTkN1cnNlc01lbnVDYWxsYmFja0l0ZW0mIHJocykKKyAgICA6IE5DdXJzZXNNZW51SXRlbShyaHMpLAorICAgICAgcF9mY3QoMCkKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc01lbnVDYWxsYmFja0l0ZW0oKTsKKworICBib29sIGFjdGlvbigpOworfTsKKworICAvLyBUaGlzIGFyZSB0aGUgYnVpbHQtaW4gaG9vayBmdW5jdGlvbnMgaW4gdGhpcyBDKysgYmluZGluZy4gSW4gQysrIHdlIHVzZQorICAvLyB2aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMgKHNlZSBiZWxvdyBPbl8uLi5fSW5pdCBhbmQgT25fLi4uX1Rlcm1pbmF0aW9uKQorICAvLyB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBhbiBvYmplY3Qgb3JpZW50ZWQgbWFubmVyLgorZXh0ZXJuICJDIiB7CisgIHZvaWQgX25jX3h4X21udV9pbml0KE1FTlUgKik7CisgIHZvaWQgX25jX3h4X21udV90ZXJtKE1FTlUgKik7CisgIHZvaWQgX25jX3h4X2l0bV9pbml0KE1FTlUgKik7CisgIHZvaWQgX25jX3h4X2l0bV90ZXJtKE1FTlUgKik7Cit9CisKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGlzIHdyYXBzIHRoZSBNRU5VIHR5cGUgb2YgPG1lbnUuaD4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzTWVudSA6IHB1YmxpYyBOQ3Vyc2VzUGFuZWwKK3sKK3Byb3RlY3RlZDoKKyAgTUVOVSAqbWVudTsKKworcHJpdmF0ZToKKyAgTkN1cnNlc1dpbmRvdyogc3ViOyAgIC8vIHRoZSBzdWJ3aW5kb3cgb2JqZWN0CisgIGJvb2wgYl9zdWJfb3duZXI7ICAgICAvLyBpcyB0aGlzIG91ciBvd24gc3Vid2luZG93PworICBib29sIGJfZnJhbWVkOyAgICAgICAgLy8gaGFzIHRoZSBtZW51IGEgYm9yZGVyPworICBib29sIGJfYXV0b0RlbGV0ZTsgICAgLy8gRGVsZXRlIGl0ZW1zIHdoZW4gZGVsZXRpbmcgbWVudT8KKworICBOQ3Vyc2VzTWVudUl0ZW0qKiBteV9pdGVtczsgLy8gVGhlIGFycmF5IG9mIGl0ZW1zIGZvciB0aGlzIG1lbnUKKworICAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciB0aGUgbWVudSdzIHVzZXIgZGF0YSBmaWVsZCB0byBsaW5rIHRoZQorICAvLyBNRU5VKiB0byB0aGUgQysrIG9iamVjdCBhbmQgdG8gcHJvdmlkZSBleHRyYSBzcGFjZSBmb3IgYSB1c2VyIHBvaW50ZXIuCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICB2b2lkKiAgICAgICAgICAgICAgbV91c2VyOyAgICAgIC8vIHRoZSBwb2ludGVyIGZvciB0aGUgdXNlcidzIGRhdGEKKyAgICBjb25zdCBOQ3Vyc2VzTWVudSogbV9iYWNrOyAgICAgIC8vIGJhY2t3YXJkIHBvaW50ZXIgdG8gQysrIG9iamVjdAorICAgIGNvbnN0IE1FTlUqICAgICAgICBtX293bmVyOworICB9IFVzZXJIb29rOworCisgIC8vIEdldCB0aGUgYmFja3dhcmQgcG9pbnRlciB0byB0aGUgQysrIG9iamVjdCBmcm9tIGEgTUVOVQorICBzdGF0aWMgaW5saW5lIE5DdXJzZXNNZW51KiBnZXRIb29rKGNvbnN0IE1FTlUgKm0pIHsKKyAgICBVc2VySG9vayogaG9vayA9IFNUQVRJQ19DQVNUKFVzZXJIb29rKikoOjptZW51X3VzZXJwdHIobSkpOworICAgIGFzc2VydChob29rICE9IDAgJiYgaG9vay0+bV9vd25lcj09bSk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TkN1cnNlc01lbnUqPihob29rLT5tX2JhY2spOworICB9CisKKyAgZnJpZW5kIHZvaWQgX25jX3h4X21udV9pbml0KE1FTlUgKik7CisgIGZyaWVuZCB2b2lkIF9uY194eF9tbnVfdGVybShNRU5VICopOworICBmcmllbmQgdm9pZCBfbmNfeHhfaXRtX2luaXQoTUVOVSAqKTsKKyAgZnJpZW5kIHZvaWQgX25jX3h4X2l0bV90ZXJtKE1FTlUgKik7CisKKyAgLy8gQ2FsY3VsYXRlIElURU0qIGFycmF5IGZvciB0aGUgbWVudQorICBJVEVNKiogbWFwSXRlbXMoTkN1cnNlc01lbnVJdGVtKiBuaXRlbXNbXSk7CisKK3Byb3RlY3RlZDoKKyAgLy8gaW50ZXJuYWwgcm91dGluZXMKKyAgaW5saW5lIHZvaWQgc2V0X3VzZXIodm9pZCAqdXNlcikgeworICAgIFVzZXJIb29rKiB1cHRyID0gU1RBVElDX0NBU1QoVXNlckhvb2sqKSg6Om1lbnVfdXNlcnB0ciAobWVudSkpOworICAgIGFzc2VydCAodXB0ciAhPSAwICYmIHVwdHItPm1fYmFjaz09dGhpcyAmJiB1cHRyLT5tX293bmVyPT1tZW51KTsKKyAgICB1cHRyLT5tX3VzZXIgPSB1c2VyOworICB9CisKKyAgaW5saW5lIHZvaWQgKmdldF91c2VyKCkgeworICAgIFVzZXJIb29rKiB1cHRyID0gU1RBVElDX0NBU1QoVXNlckhvb2sqKSg6Om1lbnVfdXNlcnB0ciAobWVudSkpOworICAgIGFzc2VydCAodXB0ciAhPSAwICYmIHVwdHItPm1fYmFjaz09dGhpcyAmJiB1cHRyLT5tX293bmVyPT1tZW51KTsKKyAgICByZXR1cm4gdXB0ci0+bV91c2VyOworICB9CisKKyAgdm9pZCBJbml0TWVudSAoTkN1cnNlc01lbnVJdGVtKiBtZW51W10sCisJCSBib29sIHdpdGhfZnJhbWUsCisJCSBib29sIGF1dG9EZWxldGVJdGVtcyk7CisKKyAgaW5saW5lIHZvaWQgT25FcnJvciAoaW50IGVycikgY29uc3QgVEhST1dTKE5DdXJzZXNNZW51RXhjZXB0aW9uKSB7CisgICAgaWYgKGVyciAhPSBFX09LKQorICAgICAgVEhST1cobmV3IE5DdXJzZXNNZW51RXhjZXB0aW9uICh0aGlzLCBlcnIpKTsKKyAgfQorCisgIC8vIHRoaXMgd3JhcHMgdGhlIG1lbnVfZHJpdmVyIGNhbGwuCisgIHZpcnR1YWwgaW50IGRyaXZlciAoaW50IGMpIDsKKworICAvLyAnSW50ZXJuYWwnIGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIG1lbnUgd2l0aG91dCBhc3NvY2lhdGlvbiB0bworICAvLyBhbiBhcnJheSBvZiBpdGVtcy4KKyAgTkN1cnNlc01lbnUoIGludCAgbmxpbmVzLAorCSAgICAgICBpbnQgIG5jb2xzLAorCSAgICAgICBpbnQgIGJlZ2luX3kgPSAwLAorCSAgICAgICBpbnQgIGJlZ2luX3ggPSAwKQorICAgIDogTkN1cnNlc1BhbmVsKG5saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3gpLAorICAgICAgbWVudSAoU1RBVElDX0NBU1QoTUVOVSopKDApKSwKKyAgICAgIHN1YigwKSwKKyAgICAgIGJfc3ViX293bmVyKDApLAorICAgICAgYl9mcmFtZWQoMCksCisgICAgICBiX2F1dG9EZWxldGUoMCksCisgICAgICBteV9pdGVtcygwKQorICB7CisgIH0KKworcHVibGljOgorICAvLyBNYWtlIGEgZnVsbCB3aW5kb3cgc2l6ZSBtZW51CisgIE5DdXJzZXNNZW51IChOQ3Vyc2VzTWVudUl0ZW0qIEl0ZW1zW10sCisJICAgICAgIGJvb2wgd2l0aF9mcmFtZT1GQUxTRSwgICAgICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGEgZnJhbWU/CisJICAgICAgIGJvb2wgYXV0b0RlbGV0ZV9JdGVtcz1GQUxTRSkgIC8vIEF1dG9jbGVhbnVwIG9mIEl0ZW1zPworICAgIDogTkN1cnNlc1BhbmVsKCksCisgICAgICBtZW51KDApLAorICAgICAgc3ViKDApLAorICAgICAgYl9zdWJfb3duZXIoMCksCisgICAgICBiX2ZyYW1lZCgwKSwKKyAgICAgIGJfYXV0b0RlbGV0ZSgwKSwKKyAgICAgIG15X2l0ZW1zKDApCisgIHsKKyAgICAgIEluaXRNZW51KEl0ZW1zLCB3aXRoX2ZyYW1lLCBhdXRvRGVsZXRlX0l0ZW1zKTsKKyAgfQorCisgIC8vIE1ha2UgYSBtZW51IHdpdGggYSB3aW5kb3cgb2YgdGhpcyBzaXplLgorICBOQ3Vyc2VzTWVudSAoTkN1cnNlc01lbnVJdGVtKiBJdGVtc1tdLAorCSAgICAgICBpbnQgIG5saW5lcywKKwkgICAgICAgaW50ICBuY29scywKKwkgICAgICAgaW50ICBiZWdpbl95ID0gMCwKKwkgICAgICAgaW50ICBiZWdpbl94ID0gMCwKKwkgICAgICAgYm9vbCB3aXRoX2ZyYW1lPUZBTFNFLCAgICAgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgYSBmcmFtZT8KKwkgICAgICAgYm9vbCBhdXRvRGVsZXRlX0l0ZW1zPUZBTFNFKSAgLy8gQXV0b2NsZWFudXAgb2YgSXRlbXM/CisgICAgOiBOQ3Vyc2VzUGFuZWwobmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCksCisgICAgICBtZW51KDApLAorICAgICAgc3ViKDApLAorICAgICAgYl9zdWJfb3duZXIoMCksCisgICAgICBiX2ZyYW1lZCgwKSwKKyAgICAgIGJfYXV0b0RlbGV0ZSgwKSwKKyAgICAgIG15X2l0ZW1zKDApCisgIHsKKyAgICAgIEluaXRNZW51KEl0ZW1zLCB3aXRoX2ZyYW1lLCBhdXRvRGVsZXRlX0l0ZW1zKTsKKyAgfQorCisgIE5DdXJzZXNNZW51JiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc01lbnUmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgICAgTkN1cnNlc1BhbmVsOjpvcGVyYXRvcj0ocmhzKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc01lbnUoY29uc3QgTkN1cnNlc01lbnUmIHJocykKKyAgICA6IE5DdXJzZXNQYW5lbChyaHMpLAorICAgICAgbWVudShyaHMubWVudSksCisgICAgICBzdWIocmhzLnN1YiksCisgICAgICBiX3N1Yl9vd25lcihyaHMuYl9zdWJfb3duZXIpLAorICAgICAgYl9mcmFtZWQocmhzLmJfZnJhbWVkKSwKKyAgICAgIGJfYXV0b0RlbGV0ZShyaHMuYl9hdXRvRGVsZXRlKSwKKyAgICAgIG15X2l0ZW1zKHJocy5teV9pdGVtcykKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc01lbnUgKCk7CisKKyAgLy8gUmV0cmlldmUgdGhlIG1lbnVzIHN1YndpbmRvdworICBpbmxpbmUgTkN1cnNlc1dpbmRvdyYgc3ViV2luZG93KCkgY29uc3QgeworICAgIGFzc2VydChzdWIhPU5VTEwpOworICAgIHJldHVybiAqc3ViOworICB9CisKKyAgLy8gU2V0IHRoZSBtZW51cyBzdWJ3aW5kb3cKKyAgdm9pZCBzZXRTdWJXaW5kb3coTkN1cnNlc1dpbmRvdyYgc3ViKTsKKworICAvLyBTZXQgdGhlc2UgaXRlbXMgZm9yIHRoZSBtZW51CisgIGlubGluZSB2b2lkIHNldEl0ZW1zKE5DdXJzZXNNZW51SXRlbSogSXRlbXNbXSkgeworICAgIE9uRXJyb3IoOjpzZXRfbWVudV9pdGVtcyhtZW51LG1hcEl0ZW1zKEl0ZW1zKSkpOworICB9CisKKyAgLy8gUmVtb3ZlIHRoZSBtZW51IGZyb20gdGhlIHNjcmVlbgorICBpbmxpbmUgdm9pZCB1bnBvc3QgKHZvaWQpIHsKKyAgICBPbkVycm9yICg6OnVucG9zdF9tZW51IChtZW51KSk7CisgIH0KKworICAvLyBQb3N0IHRoZSBtZW51IHRvIHRoZSBzY3JlZW4gaWYgZmxhZyBpcyB0cnVlLCB1bnBvc3QgaXQgb3RoZXJ3aXNlCisgIGlubGluZSB2b2lkIHBvc3QoYm9vbCBmbGFnID0gVFJVRSkgeworICAgIGZsYWcgPyBPbkVycm9yICg6OnBvc3RfbWVudShtZW51KSkgOiBPbkVycm9yICg6OnVucG9zdF9tZW51IChtZW51KSk7CisgIH0KKworICAvLyBHZXQgdGhlIG51bWVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgZm9yIHRoaXMgbWVudQorICBpbmxpbmUgdm9pZCBzY2FsZSAoaW50JiBtcm93cywgaW50JiBtY29scykgY29uc3QgIHsKKyAgICBPbkVycm9yICg6OnNjYWxlX21lbnUgKG1lbnUsICZtcm93cywgJm1jb2xzKSk7CisgIH0KKworICAvLyBTZXQgdGhlIGZvcm1hdCBvZiB0aGlzIG1lbnUKKyAgaW5saW5lIHZvaWQgc2V0X2Zvcm1hdChpbnQgbXJvd3MsIGludCBtY29scykgeworICAgIE9uRXJyb3IgKDo6c2V0X21lbnVfZm9ybWF0KG1lbnUsIG1yb3dzLCBtY29scykpOworICB9CisKKyAgLy8gR2V0IHRoZSBmb3JtYXQgb2YgdGhpcyBtZW51CisgIGlubGluZSB2b2lkIG1lbnVfZm9ybWF0KGludCYgcm93cyxpbnQmIG5jb2xzKSB7CisgICAgOjptZW51X2Zvcm1hdChtZW51LCZyb3dzLCZuY29scyk7CisgIH0KKworICAvLyBJdGVtcyBvZiB0aGUgbWVudQorICBpbmxpbmUgTkN1cnNlc01lbnVJdGVtKiBpdGVtcygpIGNvbnN0IHsKKyAgICByZXR1cm4gKm15X2l0ZW1zOworICB9CisKKyAgLy8gR2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhpcyBtZW51CisgIGlubGluZSBpbnQgY291bnQoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6aXRlbV9jb3VudChtZW51KTsKKyAgfQorCisgIC8vIEdldCB0aGUgY3VycmVudCBpdGVtIChpLmUuIHRoZSBvbmUgdGhlIGN1cnNvciBpcyBsb2NhdGVkKQorICBpbmxpbmUgTkN1cnNlc01lbnVJdGVtKiBjdXJyZW50X2l0ZW0oKSBjb25zdCB7CisgICAgcmV0dXJuIG15X2l0ZW1zWzo6aXRlbV9pbmRleCg6OmN1cnJlbnRfaXRlbShtZW51KSldOworICB9CisKKyAgLy8gR2V0IHRoZSBtYXJrZXIgc3RyaW5nCisgIGlubGluZSBjb25zdCBjaGFyKiBtYXJrKCkgY29uc3QgeworICAgIHJldHVybiA6Om1lbnVfbWFyayhtZW51KTsKKyAgfQorCisgIC8vIFNldCB0aGUgbWFya2VyIHN0cmluZworICBpbmxpbmUgdm9pZCBzZXRfbWFyayhjb25zdCBjaGFyICptYXJrZXIpIHsKKyAgICBPbkVycm9yICg6OnNldF9tZW51X21hcmsgKG1lbnUsIG1hcmtlcikpOworICB9CisKKyAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0IGNvZGUgYworICBpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIqIHJlcXVlc3RfbmFtZShpbnQgYykgeworICAgIHJldHVybiA6Om1lbnVfcmVxdWVzdF9uYW1lKGMpOworICB9CisKKyAgLy8gR2V0IHRoZSBjdXJyZW50IHBhdHRlcm4KKyAgaW5saW5lIGNoYXIqIHBhdHRlcm4oKSBjb25zdCB7CisgICAgcmV0dXJuIDo6bWVudV9wYXR0ZXJuKG1lbnUpOworICB9CisKKyAgLy8gdHJ1ZSBpZiB0aGVyZSBpcyBhIHBhdHRlcm4gbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS4KKyAgYm9vbCBzZXRfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0KTsKKworICAvLyBzZXQgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIG1lbnUKKyAgLy8gaS5lLiBzZXQgZm9yZSwgYmFjayBhbmQgZ3JleSBhdHRyaWJ1dGUKKyAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRBdHRyaWJ1dGVzKCk7CisKKyAgLy8gR2V0IHRoZSBtZW51cyBiYWNrZ3JvdW5kIGF0dHJpYnV0ZXMKKyAgaW5saW5lIGNodHlwZSBiYWNrKCkgY29uc3QgeworICAgIHJldHVybiA6Om1lbnVfYmFjayhtZW51KTsKKyAgfQorCisgIC8vIEdldCB0aGUgbWVudXMgZm9yZWdyb3VuZCBhdHRyaWJ1dGVzCisgIGlubGluZSBjaHR5cGUgZm9yZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjptZW51X2ZvcmUobWVudSk7CisgIH0KKworICAvLyBHZXQgdGhlIG1lbnVzIGdyZXkgYXR0cmlidXRlcyAodXNlZCBmb3IgdW5zZWxlY3RhYmxlIGl0ZW1zKQorICBpbmxpbmUgY2h0eXBlIGdyZXkoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6bWVudV9ncmV5KG1lbnUpOworICB9CisKKyAgLy8gU2V0IHRoZSBtZW51cyBiYWNrZ3JvdW5kIGF0dHJpYnV0ZXMKKyAgaW5saW5lIGNodHlwZSBzZXRfYmFja2dyb3VuZChjaHR5cGUgYSkgeworICAgIHJldHVybiA6OnNldF9tZW51X2JhY2sobWVudSxhKTsKKyAgfQorCisgIC8vIFNldCB0aGUgbWVudXMgZm9yZWdyb3VuZCBhdHRyaWJ1dGVzCisgIGlubGluZSBjaHR5cGUgc2V0X2ZvcmVncm91bmQoY2h0eXBlIGEpIHsKKyAgICByZXR1cm4gOjpzZXRfbWVudV9mb3JlKG1lbnUsYSk7CisgIH0KKworICAvLyBTZXQgdGhlIG1lbnVzIGdyZXkgYXR0cmlidXRlcyAodXNlZCBmb3IgdW5zZWxlY3RhYmxlIGl0ZW1zKQorICBpbmxpbmUgY2h0eXBlIHNldF9ncmV5KGNodHlwZSBhKSB7CisgICAgcmV0dXJuIDo6c2V0X21lbnVfZ3JleShtZW51LGEpOworICB9CisKKyAgaW5saW5lIHZvaWQgb3B0aW9uc19vbiAoTWVudV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6Om1lbnVfb3B0c19vbiAobWVudSxvcHRzKSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBvcHRpb25zX29mZihNZW51X09wdGlvbnMgb3B0cykgeworICAgIE9uRXJyb3IgKDo6bWVudV9vcHRzX29mZihtZW51LG9wdHMpKTsKKyAgfQorCisgIGlubGluZSBNZW51X09wdGlvbnMgb3B0aW9ucygpIGNvbnN0IHsKKyAgICByZXR1cm4gOjptZW51X29wdHMobWVudSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBzZXRfb3B0aW9ucyAoTWVudV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OnNldF9tZW51X29wdHMgKG1lbnUsb3B0cykpOworICB9CisKKyAgaW5saW5lIGludCBwYWQoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6bWVudV9wYWQobWVudSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBzZXRfcGFkIChpbnQgcGFkY2gpIHsKKyAgICBPbkVycm9yICg6OnNldF9tZW51X3BhZCAobWVudSwgcGFkY2gpKTsKKyAgfQorCisgIC8vIFBvc2l0aW9uIHRoZSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgaXRlbQorICBpbmxpbmUgdm9pZCBwb3NpdGlvbl9jdXJzb3IgKCkgY29uc3QgeworICAgIE9uRXJyb3IgKDo6cG9zX21lbnVfY3Vyc29yIChtZW51KSk7CisgIH0KKworICAvLyBTZXQgdGhlIGN1cnJlbnQgaXRlbQorICBpbmxpbmUgdm9pZCBzZXRfY3VycmVudChOQ3Vyc2VzTWVudUl0ZW0mIEkpIHsKKyAgICBPbkVycm9yICg6OnNldF9jdXJyZW50X2l0ZW0obWVudSwgSS5pdGVtKSk7CisgIH0KKworICAvLyBHZXQgdGhlIGN1cnJlbnQgdG9wIHJvdyBvZiB0aGUgbWVudQorICBpbmxpbmUgaW50IHRvcF9yb3cgKHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gOjp0b3Bfcm93IChtZW51KTsKKyAgfQorCisgIC8vIFNldCB0aGUgY3VycmVudCB0b3Agcm93IG9mIHRoZSBtZW51CisgIGlubGluZSB2b2lkIHNldF90b3Bfcm93IChpbnQgcm93KSB7CisgICAgT25FcnJvciAoOjpzZXRfdG9wX3JvdyAobWVudSwgcm93KSk7CisgIH0KKworICAvLyBzcGFjaW5nIGNvbnRyb2wKKyAgLy8gU2V0IHRoZSBzcGFjaW5nIGZvciB0aGUgbWVudQorICBpbmxpbmUgdm9pZCBzZXRTcGFjaW5nKGludCBzcGNfZGVzY3JpcHRpb24sCisJCQkgaW50IHNwY19yb3dzLAorCQkJIGludCBzcGNfY29sdW1ucykgeworICAgIE9uRXJyb3IoOjpzZXRfbWVudV9zcGFjaW5nKG1lbnUsCisJCQkgICAgICAgc3BjX2Rlc2NyaXB0aW9uLAorCQkJICAgICAgIHNwY19yb3dzLAorCQkJICAgICAgIHNwY19jb2x1bW5zKSk7CisgIH0KKworICAvLyBHZXQgdGhlIHNwYWNpbmcgaW5mbyBmb3IgdGhlIG1lbnUKKyAgaW5saW5lIHZvaWQgU3BhY2luZyhpbnQmIHNwY19kZXNjcmlwdGlvbiwKKwkJICAgICAgaW50JiBzcGNfcm93cywKKwkJICAgICAgaW50JiBzcGNfY29sdW1ucykgY29uc3QgeworICAgIE9uRXJyb3IoOjptZW51X3NwYWNpbmcobWVudSwKKwkJCSAgICZzcGNfZGVzY3JpcHRpb24sCisJCQkgICAmc3BjX3Jvd3MsCisJCQkgICAmc3BjX2NvbHVtbnMpKTsKKyAgfQorCisgIC8vIERlY29yYXRpb25zCisgIGlubGluZSB2b2lkIGZyYW1lKGNvbnN0IGNoYXIgKnRpdGxlPU5VTEwsIGNvbnN0IGNoYXIqIGJ0aXRsZT1OVUxMKSB7CisgICAgaWYgKGJfZnJhbWVkKQorICAgICAgTkN1cnNlc1BhbmVsOjpmcmFtZSh0aXRsZSxidGl0bGUpOworICAgIGVsc2UKKyAgICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICB9CisKKyAgaW5saW5lIHZvaWQgYm9sZGZyYW1lKGNvbnN0IGNoYXIgKnRpdGxlPU5VTEwsIGNvbnN0IGNoYXIqIGJ0aXRsZT1OVUxMKSB7CisgICAgaWYgKGJfZnJhbWVkKQorICAgICAgTkN1cnNlc1BhbmVsOjpib2xkZnJhbWUodGl0bGUsYnRpdGxlKTsKKyAgICBlbHNlCisgICAgICBPbkVycm9yKEVfU1lTVEVNX0VSUk9SKTsKKyAgfQorCisgIGlubGluZSB2b2lkIGxhYmVsKGNvbnN0IGNoYXIgKnRvcExhYmVsLCBjb25zdCBjaGFyICpib3R0b21MYWJlbCkgeworICAgIGlmIChiX2ZyYW1lZCkKKyAgICAgIE5DdXJzZXNQYW5lbDo6bGFiZWwodG9wTGFiZWwsYm90dG9tTGFiZWwpOworICAgIGVsc2UKKyAgICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICB9CisKKyAgLy8gLS0tLS0KKyAgLy8gSG9va3MKKyAgLy8gLS0tLS0KKworICAvLyBDYWxsZWQgYWZ0ZXIgdGhlIG1lbnUgZ2V0cyByZXBvc2l0aW9uZWQgaW4gaXRzIHdpbmRvdy4KKyAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYgdGhlIG1lbnUgaXMgcG9zdGVkLgorICB2aXJ0dWFsIHZvaWQgT25fTWVudV9Jbml0KCk7CisKKyAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgbWVudSBnZXRzIHJlcG9zaXRpb25lZCBpbiBpdHMgd2luZG93LgorICAvLyBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgbWVudSBpcyB1bnBvc3RlZC4KKyAgdmlydHVhbCB2b2lkIE9uX01lbnVfVGVybWluYXRpb24oKTsKKworICAvLyBDYWxsZWQgYWZ0ZXIgdGhlIGl0ZW0gYmVjYW1lIHRoZSBjdXJyZW50IGl0ZW0KKyAgdmlydHVhbCB2b2lkIE9uX0l0ZW1fSW5pdChOQ3Vyc2VzTWVudUl0ZW0mIGl0ZW0pOworCisgIC8vIENhbGxlZCBiZWZvcmUgdGhpcyBpdGVtIGlzIGxlZnQgYXMgY3VycmVudCBpdGVtLgorICB2aXJ0dWFsIHZvaWQgT25fSXRlbV9UZXJtaW5hdGlvbihOQ3Vyc2VzTWVudUl0ZW0mIGl0ZW0pOworCisgIC8vIFByb3ZpZGUgYSBkZWZhdWx0IGtleSB2aXJ0dWFsaXphdGlvbi4gVHJhbnNsYXRlIHRoZSBrZXlib2FyZAorICAvLyBjb2RlIGMgaW50byBhIG1lbnUgcmVxdWVzdCBjb2RlLgorICAvLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIGhvcGVmdWxseSBzdHJhaWdodGZvcndhcmQKKyAgLy8gbWFwcGluZyBmb3IgdGhlIG1vc3QgY29tbW9uIGtleXN0cm9rZXMgYW5kIG1lbnUgcmVxdWVzdHMuCisgIHZpcnR1YWwgaW50IHZpcnR1YWxpemUoaW50IGMpOworCisKKyAgLy8gT3BlcmF0b3JzCisgIGlubGluZSBOQ3Vyc2VzTWVudUl0ZW0qIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsKKyAgICBpZiAoIChpIDwgMCkgfHwgKGkgPj0gOjppdGVtX2NvdW50IChtZW51KSkgKQorICAgICAgT25FcnJvciAoRV9CQURfQVJHVU1FTlQpOworICAgIHJldHVybiAobXlfaXRlbXNbaV0pOworICB9CisKKyAgLy8gUGVyZm9ybSB0aGUgbWVudSdzIG9wZXJhdGlvbgorICAvLyBSZXR1cm4gdGhlIGl0ZW0gd2hlcmUgeW91IGxlZnQgdGhlIHNlbGVjdGlvbiBtYXJrIGZvciBhIHNpbmdsZQorICAvLyBzZWxlY3Rpb24gbWVudSwgb3IgTlVMTCBmb3IgYSBtdWx0aXZhbHVlZCBtZW51LgorICB2aXJ0dWFsIE5DdXJzZXNNZW51SXRlbSogb3BlcmF0b3IoKSh2b2lkKTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBFeGNlcHRpb24gaGFuZGxlcnMKKyAgLy8gQ2FsbGVkIGJ5IG9wZXJhdG9yKCkKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBDYWxsZWQgaWYgdGhlIHJlcXVlc3QgaXMgZGVuaWVkCisgIHZpcnR1YWwgdm9pZCBPbl9SZXF1ZXN0X0RlbmllZChpbnQgYykgY29uc3Q7CisKKyAgLy8gQ2FsbGVkIGlmIHRoZSBpdGVtIGlzIG5vdCBzZWxlY3RhYmxlCisgIHZpcnR1YWwgdm9pZCBPbl9Ob3RfU2VsZWN0YWJsZShpbnQgYykgY29uc3Q7CisKKyAgLy8gQ2FsbGVkIGlmIHBhdHRlcm4gZG9lc24ndCBtYXRjaAorICB2aXJ0dWFsIHZvaWQgT25fTm9fTWF0Y2goaW50IGMpIGNvbnN0OworCisgIC8vIENhbGxlZCBpZiB0aGUgY29tbWFuZCBpcyB1bmtub3duCisgIHZpcnR1YWwgdm9pZCBPbl9Vbmtub3duX0NvbW1hbmQoaW50IGMpIGNvbnN0OworCit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgaXMgdGhlIHR5cGljYWwgQysrIHR5cGVzYWZlIHdheSB0byBhbGxvdyB0byBhdHRhY2gKKy8vIHVzZXIgZGF0YSB0byBhbiBpdGVtIG9mIGEgbWVudS4gSXRzIGFzc3VtZWQgdGhhdCB0aGUgdXNlcgorLy8gZGF0YSBiZWxvbmdzIHRvIHNvbWUgY2xhc3MgVC4gVXNlIFQgYXMgdGVtcGxhdGUgYXJndW1lbnQKKy8vIHRvIGNyZWF0ZSBhIFVzZXJJdGVtLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNVc2VySXRlbSA6IHB1YmxpYyBOQ3Vyc2VzTWVudUl0ZW0KK3sKK3B1YmxpYzoKKyAgTkN1cnNlc1VzZXJJdGVtIChjb25zdCBjaGFyKiBwX25hbWUsCisJCSAgIGNvbnN0IGNoYXIqIHBfZGVzY3JpcHQgPSBOVUxMLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhICAgID0gU1RBVElDX0NBU1QoVCopKDApKQorICAgIDogTkN1cnNlc01lbnVJdGVtIChwX25hbWUsIHBfZGVzY3JpcHQpIHsKKyAgICAgIGlmIChpdGVtKQorCU9uRXJyb3IgKDo6c2V0X2l0ZW1fdXNlcnB0ciAoaXRlbSwgY29uc3RfY2FzdDx2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHBfVXNlckRhdGEpKSkpOworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc1VzZXJJdGVtKCkge30KKworICBpbmxpbmUgY29uc3QgVCogVXNlckRhdGEgKHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oOjppdGVtX3VzZXJwdHIgKGl0ZW0pKTsKKyAgfTsKKworICBpbmxpbmUgdmlydHVhbCB2b2lkIHNldFVzZXJEYXRhKGNvbnN0IFQqIHBfVXNlckRhdGEpIHsKKyAgICBpZiAoaXRlbSkKKyAgICAgIE9uRXJyb3IgKDo6c2V0X2l0ZW1fdXNlcnB0ciAoaXRlbSwgY29uc3RfY2FzdDx2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihwX1VzZXJEYXRhKSkpKTsKKyAgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGUgc2FtZSBtZWNoYW5pc20gaXMgdXNlZCB0byBhdHRhY2ggdXNlciBkYXRhIHRvIGEgbWVudQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNVc2VyTWVudSA6IHB1YmxpYyBOQ3Vyc2VzTWVudQoreworcHJvdGVjdGVkOgorICBOQ3Vyc2VzVXNlck1lbnUoIGludCAgbmxpbmVzLAorCQkgICBpbnQgIG5jb2xzLAorCQkgICBpbnQgIGJlZ2luX3kgPSAwLAorCQkgICBpbnQgIGJlZ2luX3ggPSAwLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApKQorICAgIDogTkN1cnNlc01lbnUobmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCkgeworICAgICAgaWYgKG1lbnUpCisJc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH0KKworcHVibGljOgorICBOQ3Vyc2VzVXNlck1lbnUgKE5DdXJzZXNNZW51SXRlbSBJdGVtc1tdLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApLAorCQkgICBib29sIHdpdGhfZnJhbWU9RkFMU0UsCisJCSAgIGJvb2wgYXV0b0RlbGV0ZV9JdGVtcz1GQUxTRSkKKyAgICA6IE5DdXJzZXNNZW51IChJdGVtcywgd2l0aF9mcmFtZSwgYXV0b0RlbGV0ZV9JdGVtcykgeworICAgICAgaWYgKG1lbnUpCisJc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH07CisKKyAgTkN1cnNlc1VzZXJNZW51IChOQ3Vyc2VzTWVudUl0ZW0gSXRlbXNbXSwKKwkJICAgaW50IG5saW5lcywKKwkJICAgaW50IG5jb2xzLAorCQkgICBpbnQgYmVnaW5feSA9IDAsCisJCSAgIGludCBiZWdpbl94ID0gMCwKKwkJICAgY29uc3QgVCogcF9Vc2VyRGF0YSA9IFNUQVRJQ19DQVNUKFQqKSgwKSwKKwkJICAgYm9vbCB3aXRoX2ZyYW1lPUZBTFNFKQorICAgIDogTkN1cnNlc01lbnUgKEl0ZW1zLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94LCB3aXRoX2ZyYW1lKSB7CisgICAgICBpZiAobWVudSkKKwlzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfTsKKworICB2aXJ0dWFsIH5OQ3Vyc2VzVXNlck1lbnUoKSB7CisgIH07CisKKyAgaW5saW5lIFQqIFVzZXJEYXRhICh2b2lkKSBjb25zdCB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGdldF91c2VyICgpKTsKKyAgfTsKKworICBpbmxpbmUgdmlydHVhbCB2b2lkIHNldFVzZXJEYXRhIChjb25zdCBUKiBwX1VzZXJEYXRhKSB7CisgICAgaWYgKG1lbnUpCisgICAgICBzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfQorfTsKKworI2VuZGlmIC8qIE5DVVJTRVNfQ1VSU0VTTV9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2MrKy9jdXJzZXNtYWluLmNjIGIvYysrL2N1cnNlc21haW4uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MmQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9jdXJzZXNtYWluLmNjCkBAIC0wLDAgKzEsOTMgQEAKKy8vICogdGhpcyBpcyBmb3IgbWFraW5nIGVtYWNzIGhhcHB5OiAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjdXJzZXNhcHAuaCIKKworI2lmIENQUF9IQVNfVFJZX0NBVENIICYmIEhBVkVfSU9TVFJFQU0KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNlbHNlCisjdW5kZWYgQ1BQX0hBU19UUllfQ0FUQ0gKKyNkZWZpbmUgQ1BQX0hBU19UUllfQ0FUQ0ggMAorI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBjdXJzZXNtYWluLmNjLHYgMS4xNCAyMDA3LzA0LzA3IDE3OjEwOjExIHRvbSBFeHAgJCIpCisKKyNpZiBIQVZFX0xPQ0FMRV9ICisjaW5jbHVkZSA8bG9jYWxlLmg+CisjZWxzZQorI2RlZmluZSBzZXRsb2NhbGUobmFtZSxzdHJpbmcpIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaWYgTk9fTEVBS1MKKyNpbmNsdWRlIDxuY19hbGxvYy5oPgorI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFpbigpIGZvciBhIE5DdXJzZXNBcHBsaWNhdGlvbi4KKyAqIFlvdSBvbmx5IGhhdmUgdG8gaW5zdGFudGlhdGUgYSBzdGF0aWMgTkN1cnNlc0FwcGxpY2F0aW9uIG9iamVjdCBpbiB5b3VyCisgKiBtYWluIGFwcGxpY2F0aW9uIHNvdXJjZSBmaWxlIGFuZCBsaW5rIHRoaXMgbW9kdWxlIHdpdGggeW91ciBhcHBsaWNhdGlvbi4KKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgIE5DdXJzZXNBcHBsaWNhdGlvbiogQSA9IE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKTsKKyAgaWYgKCFBKQorICAgIHJldHVybigxKTsKKyAgZWxzZSB7CisgICAgaW50IHJlczsKKworICAgIEEtPmhhbmRsZUFyZ3MoYXJnYyxhcmd2KTsKKyAgICA6OmVuZHdpbigpOworI2lmIENQUF9IQVNfVFJZX0NBVENICisgICAgdHJ5IHsKKyAgICAgIHJlcyA9ICgqQSkoKTsKKyAgICAgIDo6ZW5kd2luKCk7CisgICAgfQorICAgIGNhdGNoKGNvbnN0IE5DdXJzZXNFeGNlcHRpb24gJmUpIHsKKyAgICAgIDo6ZW5kd2luKCk7CisgICAgICBzdGQ6OmNlcnIgPDwgZS5tZXNzYWdlIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHJlcyA9IGUuZXJyb3JubzsKKyAgICB9CisjZWxzZQorICAgIHJlcyA9ICgqQSkoKTsKKyAgICA6OmVuZHdpbigpOworI2VuZGlmCisjaWYgTk9fTEVBS1MKKyAgICBkZWxldGUgQTsKKyAgICBfbmNfZnJlZV9hbmRfZXhpdChyZXMpOworI2Vsc2UKKyAgICByZXR1cm4ocmVzKTsKKyNlbmRpZgorICB9Cit9CmRpZmYgLS1naXQgYS9jKysvY3Vyc2VzcC5jYyBiL2MrKy9jdXJzZXNwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNGVhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvY3Vyc2VzcC5jYwpAQCAtMCwwICsxLDEzOCBAQAorLy8gKiB0aGlzIGlzIGZvciBtYWtpbmcgZW1hY3MgaGFwcHk6IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTkzLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImN1cnNlc3AuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGN1cnNlc3AuY2MsdiAxLjI1IDIwMDUvMDgvMDYgMjI6MTI6MzYgdG9tIEV4cCAkIikKKworTkN1cnNlc1BhbmVsKiBOQ3Vyc2VzUGFuZWw6OmR1bW15ID0gc3RhdGljX2Nhc3Q8TkN1cnNlc1BhbmVsKj4oMCk7CisKK3ZvaWQgTkN1cnNlc1BhbmVsOjppbml0KCkKK3sKKyAgcCA9IDo6bmV3X3BhbmVsKHcpOworICBpZiAoIXApCisgICAgT25FcnJvcihFUlIpOworCisgIFVzZXJIb29rKiBob29rID0gbmV3IFVzZXJIb29rOworICBob29rLT5tX3VzZXIgID0gTlVMTDsKKyAgaG9vay0+bV9iYWNrICA9IHRoaXM7CisgIGhvb2stPm1fb3duZXIgPSBwOworICA6OnNldF9wYW5lbF91c2VycHRyKHAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPihob29rKSk7Cit9CisKK05DdXJzZXNQYW5lbDo6fk5DdXJzZXNQYW5lbCgpCit7CisgIFVzZXJIb29rKiBob29rID0gVXNlclBvaW50ZXIoKTsKKyAgYXNzZXJ0KGhvb2sgIT0gMCAmJiBob29rLT5tX2JhY2s9PXRoaXMgJiYgaG9vay0+bV9vd25lcj09cCk7CisgIGRlbGV0ZSBob29rOworICA6OmRlbF9wYW5lbChwKTsKKyAgOjp1cGRhdGVfcGFuZWxzKCk7Cit9CisKK3ZvaWQKK05DdXJzZXNQYW5lbDo6cmVkcmF3KCkKK3sKKyAgUEFORUwgKnBhbjsKKworICBwYW4gPSA6OnBhbmVsX2Fib3ZlKE5VTEwpOworICB3aGlsZSAocGFuKSB7CisgICAgOjp0b3VjaHdpbihwYW5lbF93aW5kb3cocGFuKSk7CisgICAgcGFuID0gOjpwYW5lbF9hYm92ZShwYW4pOworICB9CisgIDo6dXBkYXRlX3BhbmVscygpOworICA6OmRvdXBkYXRlKCk7Cit9CisKK2ludAorTkN1cnNlc1BhbmVsOjpyZWZyZXNoKCkKK3sKKyAgOjp1cGRhdGVfcGFuZWxzKCk7CisgIHJldHVybiA6OmRvdXBkYXRlKCk7Cit9CisKK2ludAorTkN1cnNlc1BhbmVsOjpub3V0cmVmcmVzaCgpCit7CisgIDo6dXBkYXRlX3BhbmVscygpOworICByZXR1cm4gT0s7Cit9CisKK3ZvaWQKK05DdXJzZXNQYW5lbDo6Ym9sZGZyYW1lKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyKiBidGl0bGUpCit7CisgIHN0YW5kb3V0KCk7CisgIGZyYW1lKHRpdGxlLCBidGl0bGUpOworICBzdGFuZGVuZCgpOworfQorCit2b2lkCitOQ3Vyc2VzUGFuZWw6OmZyYW1lKGNvbnN0IGNoYXIgKnRpdGxlLGNvbnN0IGNoYXIgKmJ0aXRsZSkKK3sKKyAgaW50IGVyciA9IE9LOworICBpZiAoIXRpdGxlICYmICFidGl0bGUpIHsKKyAgICBlcnIgPSBib3goKTsKKyAgfQorICBlbHNlIHsKKyAgICBlcnIgPSBib3goKTsKKyAgICBpZiAoZXJyPT1PSykKKyAgICAgIGxhYmVsKHRpdGxlLGJ0aXRsZSk7CisgIH0KKyAgT25FcnJvcihlcnIpOworfQorCit2b2lkCitOQ3Vyc2VzUGFuZWw6OmxhYmVsKGNvbnN0IGNoYXIgKnRMYWJlbCwgY29uc3QgY2hhciAqYkxhYmVsKQoreworICBpZiAodExhYmVsKQorICAgIGNlbnRlcnRleHQoMCx0TGFiZWwpOworICBpZiAoYkxhYmVsKQorICAgIGNlbnRlcnRleHQobWF4eSgpLGJMYWJlbCk7Cit9CisKK3ZvaWQKK05DdXJzZXNQYW5lbDo6Y2VudGVydGV4dChpbnQgcm93LGNvbnN0IGNoYXIgKmxhYmVsVGV4dCkKK3sKKyAgaWYgKGxhYmVsVGV4dCkgeworICAgIGludCB4ID0gKG1heHgoKSAtIDo6c3RybGVuKGxhYmVsVGV4dCkpIC8gMjsKKyAgICBpZiAoeDwwKQorICAgICAgeD0wOworICAgIE9uRXJyb3IoYWRkc3RyKHJvdywgeCwgbGFiZWxUZXh0LCB3aWR0aCgpKSk7CisgIH0KK30KKworaW50CitOQ3Vyc2VzUGFuZWw6OmdldEtleSh2b2lkKQoreworICByZXR1cm4gZ2V0Y2goKTsKK30KZGlmZiAtLWdpdCBhL2MrKy9jdXJzZXNwLmggYi9jKysvY3Vyc2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjNkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvY3Vyc2VzcC5oCkBAIC0wLDAgKzEsMjY4IEBACisvLyAqIFRoaXMgbWFrZXMgZW1hY3MgaGFwcHkgLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBOQ1VSU0VTX0NVUlNFU1BfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfQ1VSU0VTUF9IX2luY2wgMQorCisvLyAkSWQ6IGN1cnNlc3AuaCx2IDEuMjkgMjAwOC8wOC8xNiAxNzoyMDoyMyB0b20gRXhwICQKKworI2luY2x1ZGUgPGN1cnNlc3cuaD4KKworZXh0ZXJuICJDIiB7CisjICBpbmNsdWRlIDxwYW5lbC5oPgorfQorCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzUGFuZWwKKyAgOiBwdWJsaWMgTkN1cnNlc1dpbmRvdworeworcHJvdGVjdGVkOgorICBQQU5FTCAqcDsKKyAgc3RhdGljIE5DdXJzZXNQYW5lbCAqZHVtbXk7CisKK3ByaXZhdGU6CisgIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSBwYW5lbCdzIHVzZXIgZGF0YSBmaWVsZCB0byBsaW5rIHRoZQorICAvLyBQQU5FTCogdG8gdGhlIEMrKyBvYmplY3QgYW5kIHRvIHByb3ZpZGUgZXh0cmEgc3BhY2UgZm9yIGEgdXNlciBwb2ludGVyLgorICB0eXBlZGVmIHN0cnVjdCB7CisgICAgdm9pZCogICAgICAgICAgICAgICBtX3VzZXI7ICAgICAgLy8gdGhlIHBvaW50ZXIgZm9yIHRoZSB1c2VyJ3MgZGF0YQorICAgIGNvbnN0IE5DdXJzZXNQYW5lbCogbV9iYWNrOyAgICAgIC8vIGJhY2t3YXJkIHBvaW50ZXIgdG8gQysrIG9iamVjdAorICAgIGNvbnN0IFBBTkVMKiAgICAgICAgbV9vd25lcjsgICAgIC8vIHRoZSBwYW5lbCBpdHNlbGYKKyAgfSBVc2VySG9vazsKKworICBpbmxpbmUgVXNlckhvb2sgKlVzZXJQb2ludGVyKCkKKyAgeworICAgIFVzZXJIb29rKiB1cHRyID0gcmVpbnRlcnByZXRfY2FzdDxVc2VySG9vayo+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDx2b2lkICo+KDo6cGFuZWxfdXNlcnB0ciAocCkpKTsKKyAgICByZXR1cm4gdXB0cjsKKyAgfQorCisgIHZvaWQgaW5pdCgpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcGFuZWwgb2JqZWN0CisKK3Byb3RlY3RlZDoKKyAgdm9pZCBzZXRfdXNlcih2b2lkICp1c2VyKQorICB7CisgICAgVXNlckhvb2sqIHVwdHIgPSBVc2VyUG9pbnRlcigpOworICAgIGlmICh1cHRyICE9IDAgJiYgdXB0ci0+bV9iYWNrPT10aGlzICYmIHVwdHItPm1fb3duZXI9PXApIHsKKyAgICAgIHVwdHItPm1fdXNlciA9IHVzZXI7CisgICAgfQorICB9CisgIC8vIFNldCB0aGUgdXNlciBwb2ludGVyIG9mIHRoZSBwYW5lbC4KKworICB2b2lkICpnZXRfdXNlcigpCisgIHsKKyAgICBVc2VySG9vayogdXB0ciA9IFVzZXJQb2ludGVyKCk7CisgICAgdm9pZCAqcmVzdWx0ID0gMDsKKyAgICBpZiAodXB0ciAhPSAwICYmIHVwdHItPm1fYmFjaz09dGhpcyAmJiB1cHRyLT5tX293bmVyPT1wKQorICAgICAgcmVzdWx0ID0gdXB0ci0+bV91c2VyOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICB2b2lkIE9uRXJyb3IgKGludCBlcnIpIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzUGFuZWxFeGNlcHRpb24pCisgIHsKKyAgICBpZiAoZXJyPT1FUlIpCisgICAgICBUSFJPVyhuZXcgTkN1cnNlc1BhbmVsRXhjZXB0aW9uICh0aGlzLCBlcnIpKTsKKyAgfQorICAvLyBJZiBlcnIgaXMgZXF1YWwgdG8gdGhlIGN1cnNlcyBlcnJvciBpbmRpY2F0b3IgRVJSLCBhbiBlcnJvciBoYW5kbGVyCisgIC8vIGlzIGNhbGxlZC4KKworICAvLyBHZXQgYSBrZXlzdHJva2UuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2FsbHMgZ2V0Y2goKQorICB2aXJ0dWFsIGludCBnZXRLZXkodm9pZCk7CisKK3B1YmxpYzoKKyAgTkN1cnNlc1BhbmVsKGludCBubGluZXMsCisJICAgICAgIGludCBuY29scywKKwkgICAgICAgaW50IGJlZ2luX3kgPSAwLAorCSAgICAgICBpbnQgYmVnaW5feCA9IDApCisgICAgOiBOQ3Vyc2VzV2luZG93KG5saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3gpLCBwKDApCisgIHsKKyAgICBpbml0KCk7CisgIH0KKyAgLy8gQ3JlYXRlIGEgcGFuZWwgd2l0aCB0aGlzIHNpemUgc3RhcnRpbmcgYXQgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbi4KKworICBOQ3Vyc2VzUGFuZWwoKQorICAgIDogTkN1cnNlc1dpbmRvdyg6OnN0ZHNjciksIHAoMCkKKyAgeworICAgIGluaXQoKTsKKyAgfQorICAvLyBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgdGhlIGRlZmF1bHQgUGFuZWwgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAvLyA6OnN0ZHNjciB3aW5kb3cKKworICBOQ3Vyc2VzUGFuZWwmIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzUGFuZWwmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgICAgTkN1cnNlc1dpbmRvdzo6b3BlcmF0b3I9KHJocyk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNQYW5lbChjb25zdCBOQ3Vyc2VzUGFuZWwmIHJocykKKyAgICA6IE5DdXJzZXNXaW5kb3cocmhzKSwKKyAgICAgIHAocmhzLnApCisgIHsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNQYW5lbCgpOworCisgIC8vIGJhc2ljIG1hbmlwdWxhdGlvbgorICBpbmxpbmUgdm9pZCBoaWRlKCkKKyAgeworICAgIE9uRXJyb3IgKDo6aGlkZV9wYW5lbChwKSk7CisgIH0KKyAgLy8gSGlkZSB0aGUgcGFuZWwuIEl0IHN0YXlzIGluIHRoZSBzdGFjayBidXQgYmVjb21lcyBpbnZpc2libGUuCisKKyAgaW5saW5lIHZvaWQgc2hvdygpCisgIHsKKyAgICBPbkVycm9yICg6OnNob3dfcGFuZWwocCkpOworICB9CisgIC8vIFNob3cgdGhlIHBhbmVsLCBpLmUuIG1ha2UgaXQgdmlzaWJsZS4KKworICBpbmxpbmUgdm9pZCB0b3AoKQorICB7CisgICAgT25FcnJvciAoOjp0b3BfcGFuZWwocCkpOworICB9CisgIC8vIE1ha2UgdGhpcyBwYW5lbCB0aGUgdG9wIHBhbmVsIGluIHRoZSBzdGFjay4KKworICBpbmxpbmUgdm9pZCBib3R0b20oKQorICB7CisgICAgT25FcnJvciAoOjpib3R0b21fcGFuZWwocCkpOworICB9CisgIC8vIE1ha2UgdGhpcyBwYW5lbCB0aGUgYm90dG9tIHBhbmVsIGluIHRoZSBzdGFjay4KKyAgLy8gTi5CLjogVGhlIHBhbmVsIGFzc29jaWF0ZWQgd2l0aCA6OnN0ZHNjciBpcyBhbHdheXMgb24gdGhlIGJvdHRvbS4gU28KKyAgLy8gYWN0dWFsbHkgYm90dG9tKCkgbWFrZXMgdGhlIHBhbmVsIHRoZSBmaXJzdCBhYm92ZSA6OnN0ZHNjci4KKworICB2aXJ0dWFsIGludCBtdndpbihpbnQgeSwgaW50IHgpCisgIHsKKyAgICBPbkVycm9yKDo6bW92ZV9wYW5lbChwLCB5LCB4KSk7CisgICAgcmV0dXJuIE9LOworICB9CisKKyAgaW5saW5lIGJvb2wgaGlkZGVuKCkgY29uc3QKKyAgeworICAgIHJldHVybiAoOjpwYW5lbF9oaWRkZW4gKHApID8gVFJVRSA6IEZBTFNFKTsKKyAgfQorICAvLyBSZXR1cm4gVFJVRSBpZiB0aGUgcGFuZWwgaXMgaGlkZGVuLCBGQUxTRSBvdGhlcndpc2UuCisKKy8qIFRoZSBmdW5jdGlvbnMgcGFuZWxfYWJvdmUoKSBhbmQgcGFuZWxfYmVsb3coKSBhcmUgbm90IHJlZmxlY3RlZCBpbgorICAgdGhlIE5DdXJzZXNQYW5lbCBjbGFzcy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcywgdGhhdCB3ZSBjYW5ub3QKKyAgIGFzc3VtZSB0aGF0IGEgcGFuZWwgcmV0cmlldmVkIGJ5IHRob3NlIG9wZXJhdGlvbnMgaXMgb25lIHdyYXBwZWQKKyAgIGJ5IGEgQysrIGNsYXNzLiBBbHRob3VnaCB0aGlzIHNpdHVhdGlvbiBtaWdodCBiZSBoYW5kbGVkLCB3ZSBhbHNvCisgICBuZWVkIGEgcmV2ZXJzZSBtYXBwaW5nIGZyb20gUEFORUwgdG8gTkN1cnNlc1BhbmVsIHdoaWNoIG5lZWRzIHNvbWUKKyAgIHJlZGVzaWduIG9mIHRoZSBsb3cgbGV2ZWwgc3R1ZmYuIEF0IHRoZSBtb21lbnQsIHdlIGRlZmluZSB0aGVtIGluIHRoZQorICAgaW50ZXJmYWNlIGJ1dCB0aGV5IHdpbGwgYWx3YXlzIHByb2R1Y2UgYW4gZXJyb3IuICovCisgIGlubGluZSBOQ3Vyc2VzUGFuZWwmIGFib3ZlKCkgY29uc3QKKyAgeworICAgIE9uRXJyb3IoRVJSKTsKKyAgICByZXR1cm4gKmR1bW15OworICB9CisKKyAgaW5saW5lIE5DdXJzZXNQYW5lbCYgYmVsb3coKSBjb25zdAorICB7CisgICAgT25FcnJvcihFUlIpOworICAgIHJldHVybiAqZHVtbXk7CisgIH0KKworICAvLyBUaG9zZSB0d28gYXJlIHJld3JpdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHZpcnR1YWwgbWVtYmVycyBvZgorICAvLyBOQ3Vyc2VzV2luZG93CisgIHZpcnR1YWwgaW50IHJlZnJlc2goKTsKKyAgLy8gUHJvcGFnYXRlIGFsbCBwYW5lbCBjaGFuZ2VzIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbiBhbmQgdXBkYXRlIHRoZQorICAvLyBwaHlzaWNhbCBzY3JlZW4uCisKKyAgdmlydHVhbCBpbnQgbm91dHJlZnJlc2goKTsKKyAgLy8gUHJvcGFnYXRlIGFsbCBwYW5lbCBjaGFuZ2VzIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbi4KKworICBzdGF0aWMgdm9pZCByZWRyYXcoKTsKKyAgLy8gUmVkcmF3IGFsbCBwYW5lbHMuCisKKyAgLy8gZGVjb3JhdGlvbnMKKyAgdmlydHVhbCB2b2lkIGZyYW1lKGNvbnN0IGNoYXIqIHRpdGxlPU5VTEwsCisJCSAgICAgY29uc3QgY2hhciogYnRpdGxlPU5VTEwpOworICAvLyBQdXQgYSBmcmFtZSBhcm91bmQgdGhlIHBhbmVsIGFuZCBwdXQgdGhlIHRpdGxlIGNlbnRlcmVkIGluIHRoZSB0b3AgbGluZQorICAvLyBhbmQgYnRpdGxlIGluIHRoZSBib3R0b20gbGluZS4KKworICB2aXJ0dWFsIHZvaWQgYm9sZGZyYW1lKGNvbnN0IGNoYXIqIHRpdGxlPU5VTEwsCisJCQkgY29uc3QgY2hhciogYnRpdGxlPU5VTEwpOworICAvLyBTYW1lIGFzIGZyYW1lKCksIGJ1dCB1c2UgaGlnaGxpZ2h0ZWQgYXR0cmlidXRlcy4KKworICB2aXJ0dWFsIHZvaWQgbGFiZWwoY29uc3QgY2hhciogdG9wTGFiZWwsCisJCSAgICAgY29uc3QgY2hhciogYm90dG9tTGFiZWwpOworICAvLyBQdXQgdGhlIHRpdGxlIGNlbnRlcmVkIGluIHRoZSB0b3AgbGluZSBhbmQgYnRpdGxlIGluIHRoZSBib3R0b20gbGluZS4KKworICB2aXJ0dWFsIHZvaWQgY2VudGVydGV4dChpbnQgcm93LGNvbnN0IGNoYXIqIGxhYmVsKTsKKyAgLy8gUHV0IHRoZSBsYWJlbCB0ZXh0IGNlbnRlcmVkIGluIHRoZSBzcGVjaWZpZWQgcm93LgorfTsKKworLyogV2UgdXNlIHRlbXBsYXRlcyB0byBwcm92aWRlIGEgdHlwZXNhZmUgbWVjaGFuaXNtIHRvIGFzc29jaWF0ZQorICogdXNlciBkYXRhIHdpdGggYSBwYW5lbC4gQSBOQ3Vyc2VzVXNlclBhbmVsPFQ+IGlzIGEgcGFuZWwKKyAqIGFzc29jaWF0ZWQgd2l0aCBzb21lIHVzZXIgZGF0YSBvZiB0eXBlIFQuCisgKi8KK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE5DdXJzZXNVc2VyUGFuZWwgOiBwdWJsaWMgTkN1cnNlc1BhbmVsCit7CitwdWJsaWM6CisgIE5DdXJzZXNVc2VyUGFuZWwgKGludCBubGluZXMsCisJCSAgICBpbnQgbmNvbHMsCisJCSAgICBpbnQgYmVnaW5feSA9IDAsCisJCSAgICBpbnQgYmVnaW5feCA9IDAsCisJCSAgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApKQorICAgIDogTkN1cnNlc1BhbmVsIChubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KQorICB7CisgICAgICBpZiAocCkKKwlzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfTsKKyAgLy8gVGhpcyBjcmVhdGVzIGFuIHVzZXIgcGFuZWwgb2YgdGhlIHJlcXVlc3RlZCBzaXplIHdpdGggYXNzb2NpYXRlZAorICAvLyB1c2VyIGRhdGEgcG9pbnRlZCB0byBieSBwX1VzZXJEYXRhLgorCisgIE5DdXJzZXNVc2VyUGFuZWwoY29uc3QgVCogcF9Vc2VyRGF0YSA9IFNUQVRJQ19DQVNUKFQqKSgwKSkgOiBOQ3Vyc2VzUGFuZWwoKQorICB7CisgICAgaWYgKHApCisgICAgICBzZXRfdXNlcihjb25zdF9jYXN0PHZvaWQgKj4ocF9Vc2VyRGF0YSkpOworICB9OworICAvLyBUaGlzIGNyZWF0ZXMgYW4gdXNlciBwYW5lbCBhc3NvY2lhdGVkIHdpdGggdGhlIDo6c3Rkc2NyIGFuZCB1c2VyIGRhdGEKKyAgLy8gcG9pbnRlZCB0byBieSBwX1VzZXJEYXRhLgorCisgIHZpcnR1YWwgfk5DdXJzZXNVc2VyUGFuZWwoKSB7fTsKKworICBUKiBVc2VyRGF0YSAodm9pZCkgY29uc3QKKyAgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihnZXRfdXNlciAoKSk7CisgIH07CisgIC8vIFJldHJpZXZlIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYW5lbC4KKworICB2aXJ0dWFsIHZvaWQgc2V0VXNlckRhdGEgKGNvbnN0IFQqIHBfVXNlckRhdGEpCisgIHsKKyAgICBpZiAocCkKKyAgICAgIHNldF91c2VyIChjb25zdF9jYXN0PHZvaWQgKj4ocF9Vc2VyRGF0YSkpOworICB9CisgIC8vIEFzc29jaWF0ZSB0aGUgdXNlciBwYW5lbCB3aXRoIHRoZSB1c2VyIGRhdGEgcG9pbnRlZCB0byBieSBwX1VzZXJEYXRhLgorfTsKKworI2VuZGlmIC8qIE5DVVJTRVNfQ1VSU0VTUF9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2MrKy9jdXJzZXNwYWQuY2MgYi9jKysvY3Vyc2VzcGFkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzU4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvY3Vyc2VzcGFkLmNjCkBAIC0wLDAgKzEsMjc5IEBACisvLyAqIHRoaXMgaXMgZm9yIG1ha2luZyBlbWFjcyBoYXBweTogLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNsdWRlIDxldGlwLmg+CisjaW5jbHVkZSA8Y3Vyc2Vzdy5oPgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc2VzcGFkLmNjLHYgMS4xMyAyMDA4LzA4LzA0IDE4OjU5OjIyIHRvbSBFeHAgJCIpCisKK05DdXJzZXNQYWQ6Ok5DdXJzZXNQYWQoaW50IG5saW5lcywgaW50IG5jb2xzKQorICA6IE5DdXJzZXNXaW5kb3coKSwKKyAgICB2aWV3V2luKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSksCisgICAgdmlld1N1YihzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCkpLAorICAgIGhfZ3JpZHNpemUoMCksIHZfZ3JpZHNpemUoMCksCisgICAgbWluX3JvdygwKSwgbWluX2NvbCgwKQoreworICB3ID0gOjpuZXdwYWQobmxpbmVzLCBuY29scyk7CisgIGlmIChzdGF0aWNfY2FzdDxXSU5ET1cqPigwKSA9PSB3KSB7CisgICAgY291bnQtLTsKKyAgICBlcnJfaGFuZGxlcigiQ2Fubm90IGNvbnN0cnVjdCB3aW5kb3ciKTsKKyAgfQorICBhbGxvY2VkID0gVFJVRTsKK30KKworCitpbnQgTkN1cnNlc1BhZDo6ZHJpdmVyIChpbnQga2V5KQoreworICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uCisgIHN3aXRjaChrZXkpIHsKKyAgY2FzZSBLRVlfVVA6CisgICAgLy8gPT09PT09PQorICAgIHJldHVybiBSRVFfUEFEX1VQOworICBjYXNlIEtFWV9ET1dOOgorICAgIC8vID09PT09PT09PQorICAgIHJldHVybiBSRVFfUEFEX0RPV047CisgIGNhc2UgS0VZX0xFRlQ6CisgICAgLy8gPT09PT09PT09CisgICAgcmV0dXJuIFJFUV9QQURfTEVGVDsKKyAgY2FzZSBLRVlfUklHSFQ6CisgICAgLy8gPT09PT09PT09PQorICAgIHJldHVybiBSRVFfUEFEX1JJR0hUOworICBjYXNlIEtFWV9FWElUOgorICAgIC8vID09PT09PT09PQorICBjYXNlIENUUkwoJ1gnKToKKyAgICAvLyA9PT09PT09PT09CisgICAgcmV0dXJuIFJFUV9QQURfRVhJVDsKKworICBkZWZhdWx0OiByZXR1cm4oa2V5KTsKKyAgfQorfQorCisKK3ZvaWQgTkN1cnNlc1BhZDo6b3BlcmF0b3IoKSh2b2lkKQoreworICBOQ3Vyc2VzV2luZG93KiBXID0gV2luKCk7CisKKyAgaWYgKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSAhPSBXKSB7CisgICAgaW50IFdpZHRoICA9IFctPndpZHRoKCk7CisgICAgaW50IEhlaWdodCA9IFctPmhlaWdodCgpOworCisgICAgaW50IHJlcSA9IFJFUV9QQURfUkVGUkVTSDsKKworICAgIFctPmtleXBhZChUUlVFKTsKKyAgICBXLT5tZXRhKFRSVUUpOworICAgIHJlZnJlc2goKTsKKworICAgIGRvIHsKKyAgICAgIGJvb2wgY2hhbmdlZCA9IEZBTFNFOworCisgICAgICBzd2l0Y2ggKHJlcSkgeworICAgICAgY2FzZSBSRVFfUEFEX1JFRlJFU0g6CisJLy8gPT09PT09PT09PT09PT09PQorCWNoYW5nZWQgPSBUUlVFOworCWJyZWFrOworICAgICAgY2FzZSBSRVFfUEFEX0xFRlQ6CisJLy8gPT09PT09PT09PT09PQorCWlmIChtaW5fY29sID4gMCkgeworCSAgY2hhbmdlZCA9IFRSVUU7CisJICBpZiAobWluX2NvbCA8IGhfZ3JpZHNpemUpCisJICAgIG1pbl9jb2wgPSAwOworCSAgZWxzZQorCSAgICBtaW5fY29sIC09IGhfZ3JpZHNpemU7CisJfQorCWVsc2UKKwkgIE9uTmF2aWdhdGlvbkVycm9yKHJlcSk7CisJYnJlYWs7CisgICAgICBjYXNlIFJFUV9QQURfUklHSFQ6CisJLy8gPT09PT09PT09PT09PT0KKwlpZiAobWluX2NvbCA8ICh3aWR0aCgpIC0gV2lkdGggLSAxKSkgeworCSAgY2hhbmdlZCA9IFRSVUU7CisJICBpZiAobWluX2NvbCA+ICh3aWR0aCgpIC0gV2lkdGggLSBoX2dyaWRzaXplIC0gMSkpCisJICAgIG1pbl9jb2wgPSB3aWR0aCgpIC0gV2lkdGggLSAxOworCSAgZWxzZQorCSAgICBtaW5fY29sICs9IGhfZ3JpZHNpemU7CisJfQorCWVsc2UKKwkgIE9uTmF2aWdhdGlvbkVycm9yKHJlcSk7CisJYnJlYWs7CisgICAgICBjYXNlIFJFUV9QQURfVVA6CisJLy8gPT09PT09PT09PT0KKwlpZiAobWluX3JvdyA+IDApIHsKKwkgIGNoYW5nZWQgPSBUUlVFOworCSAgaWYgKG1pbl9yb3cgPCB2X2dyaWRzaXplKQorCSAgICBtaW5fcm93ID0gMDsKKwkgIGVsc2UKKwkgICAgbWluX3JvdyAtPSB2X2dyaWRzaXplOworCX0KKwllbHNlCisJICBPbk5hdmlnYXRpb25FcnJvcihyZXEpOworCWJyZWFrOworICAgICAgY2FzZSBSRVFfUEFEX0RPV046CisJLy8gPT09PT09PT09PT09PQorCWlmIChtaW5fcm93IDwgKGhlaWdodCgpIC0gSGVpZ2h0IC0gMSkpIHsKKwkgIGNoYW5nZWQgPSBUUlVFOworCSAgaWYgKG1pbl9yb3cgPiAoaGVpZ2h0KCkgLSBIZWlnaHQgLSB2X2dyaWRzaXplIC0gMSkpCisJICAgIG1pbl9yb3cgPSBoZWlnaHQoKSAtIEhlaWdodCAtIDE7CisJICBlbHNlCisJICAgIG1pbl9yb3cgKz0gdl9ncmlkc2l6ZTsKKwl9CisJZWxzZQorCSAgT25OYXZpZ2F0aW9uRXJyb3IocmVxKTsKKwlicmVhazsKKworICAgICAgZGVmYXVsdDoKKwlPblVua25vd25PcGVyYXRpb24ocmVxKTsKKyAgICAgIH0KKworICAgICAgaWYgKGNoYW5nZWQpIHsKKwlub3V0cmVmcmVzaCgpOworCVctPnN5bmN1cCgpOworCU9uT3BlcmF0aW9uKHJlcSk7CisJdmlld1dpbi0+cmVmcmVzaCgpOworICAgICAgfQorICAgIH0gd2hpbGUoIChyZXE9ZHJpdmVyKFctPmdldGNoKCkpKSAhPSBSRVFfUEFEX0VYSVQgKTsKKyAgfQorfQorCisKK2ludCBOQ3Vyc2VzUGFkOjpyZWZyZXNoKCkKK3sKKyAgaW50IHJlcyA9IG5vdXRyZWZyZXNoKCk7CisgIGlmIChyZXM9PU9LICYmIChzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCkgIT0gdmlld1dpbikpIHsKKyAgICByZXMgPSAodmlld1dpbi0+cmVmcmVzaCgpKTsKKyAgfQorICByZXR1cm4ocmVzKTsKK30KKworaW50IE5DdXJzZXNQYWQ6Om5vdXRyZWZyZXNoKCkKK3sKKyAgaW50IHJlcyA9IE9LOworICBOQ3Vyc2VzV2luZG93KiBXID0gV2luKCk7CisgIGlmIChzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCkgIT0gVykgeworICAgIGludCBoaWdoID0gVy0+bWF4eSgpOworICAgIGludCB3aWRlID0gVy0+bWF4eCgpOworICAgIHJlcyA9IGNvcHl3aW4oKlcsIG1pbl9yb3csIG1pbl9jb2wsCisJCSAgMCwgMCwgaGlnaCwgd2lkZSwKKwkJICBGQUxTRSk7CisgICAgaWYgKHJlcz09T0spIHsKKyAgICAgIFctPnN5bmN1cCgpOworICAgICAgcmVzID0gdmlld1dpbi0+bm91dHJlZnJlc2goKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChyZXMpOworfQorCit2b2lkIE5DdXJzZXNQYWQ6OnNldFdpbmRvdyhOQ3Vyc2VzV2luZG93JiB2aWV3LAorCQkJICAgaW50IHZfZ3JpZCBOQ1VSU0VTX1BBUkFNX0lOSVQoMSksCisJCQkgICBpbnQgaF9ncmlkIE5DVVJTRVNfUEFSQU1fSU5JVCgxKSkKK3sKKyAgdmlld1dpbiA9ICZ2aWV3OworICBtaW5fcm93ID0gbWluX2NvbCA9IDA7CisgIGlmIChoX2dyaWQgPD0wIHx8IHZfZ3JpZCA8PSAwKQorICAgIGVycl9oYW5kbGVyKCJJbGxlZ2FsIEdyaWRzaXplIik7CisgIGVsc2UgeworICAgIGhfZ3JpZHNpemUgPSBoX2dyaWQ7CisgICAgdl9ncmlkc2l6ZSA9IHZfZ3JpZDsKKyAgfQorfQorCit2b2lkIE5DdXJzZXNQYWQ6OnNldFN1YldpbmRvdyhOQ3Vyc2VzV2luZG93JiBzdWIpCit7CisgIGlmIChzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCkgPT0gdmlld1dpbikKKyAgICBlcnJfaGFuZGxlcigiUGFkIGhhcyBubyB2aWV3cG9ydCIpOworICBhc3NlcnQodmlld1dpbiAhPSAwKTsKKyAgaWYgKCF2aWV3V2luLT5pc0Rlc2NlbmRhbnQoc3ViKSkKKyAgICBUSFJPVyhuZXcgTkN1cnNlc0V4Y2VwdGlvbigiTkN1cnNlc0ZyYW1lUGFkIiwgRV9TWVNURU1fRVJST1IpKTsKKyAgdmlld1N1YiA9ICZzdWI7Cit9CisKK3ZvaWQgTkN1cnNlc0ZyYW1lZFBhZDo6T25PcGVyYXRpb24oaW50IHBhZF9yZXEpCit7CisgIE5DdXJzZXNXaW5kb3cqIFcgPSBXaW4oKTsKKyAgTkN1cnNlc1dpbmRvdyogVzIgPSBnZXRXaW5kb3coKTsKKworICBpZiAoKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSAhPSBXKSAmJiAoc3RhdGljX2Nhc3Q8TkN1cnNlc1dpbmRvdyo+KDApICE9IFcyKSkgeworICAgIGludCBXaWR0aCAgPSBXLT53aWR0aCgpOworICAgIGludCBIZWlnaHQgPSBXLT5oZWlnaHQoKTsKKyAgICBpbnQgaSwgcm93LCBjb2wsIGhfbGVuLCB2X2xlbjsKKworICAgIGhfbGVuID0gKFdpZHRoKldpZHRoICsgd2lkdGgoKSAtIDEpL3dpZHRoKCk7CisgICAgaWYgKGhfbGVuPT0wKQorICAgICAgaF9sZW4gPSAxOworICAgIGlmIChoX2xlbiA+IFdpZHRoKQorICAgICAgaF9sZW4gPSBXaWR0aDsKKworICAgIHZfbGVuID0gKEhlaWdodCpIZWlnaHQgKyBoZWlnaHQoKSAtIDEpL2hlaWdodCgpOworICAgIGlmICh2X2xlbj09MCkKKyAgICAgIHZfbGVuID0gMTsKKyAgICBpZiAodl9sZW4gPiBIZWlnaHQpCisgICAgICB2X2xlbiA9IEhlaWdodDsKKworICAgIGNvbCAgPSAobWluX2NvbCAqIFdpZHRoICsgd2lkdGgoKSAtIDEpICAvIHdpZHRoKCk7CisgICAgaWYgKGNvbCArIGhfbGVuID4gV2lkdGgpCisgICAgICBjb2wgPSBXaWR0aCAtIGhfbGVuOworCisgICAgcm93ICA9IChtaW5fcm93ICogSGVpZ2h0ICsgaGVpZ2h0KCkgLSAxKSAvIGhlaWdodCgpOworICAgIGlmIChyb3cgKyB2X2xlbiA+IEhlaWdodCkKKyAgICAgIHJvdyA9IEhlaWdodCAtIHZfbGVuOworCisgICAgVzItPnZsaW5lKDEsV2lkdGgrMSxIZWlnaHQpOworICAgIFcyLT5hdHRyb24oQV9SRVZFUlNFKTsKKyAgICBpZiAodl9sZW4+PTIpIHsKKyAgICAgIFcyLT5hZGRjaChyb3crMSxXaWR0aCsxLEFDU19VQVJST1cpOworICAgICAgZm9yKGk9MjtpPHZfbGVuO2krKykKKwlXMi0+YWRkY2gocm93K2ksV2lkdGgrMSwnICcpOworICAgICAgVzItPmFkZGNoKHJvdyt2X2xlbixXaWR0aCsxLEFDU19EQVJST1cpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZvcihpPTE7aTw9dl9sZW47aSsrKQorCVcyLT5hZGRjaChyb3craSxXaWR0aCsxLCcgJyk7CisgICAgfQorICAgIFcyLT5hdHRyb2ZmKEFfUkVWRVJTRSk7CisKKyAgICBXMi0+aGxpbmUoSGVpZ2h0KzEsMSxXaWR0aCk7CisgICAgVzItPmF0dHJvbihBX1JFVkVSU0UpOworICAgIGlmIChoX2xlbiA+PSAyKSB7CisgICAgICBXMi0+YWRkY2goSGVpZ2h0KzEsY29sKzEsQUNTX0xBUlJPVyk7CisgICAgICBmb3IoaT0yO2k8aF9sZW47aSsrKQorCVcyLT5hZGRjaChIZWlnaHQrMSxjb2wraSwnICcpOworICAgICAgVzItPmFkZGNoKEhlaWdodCsxLGNvbCtoX2xlbixBQ1NfUkFSUk9XKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmb3IoaT0xO2k8PWhfbGVuO2krKykKKwlXMi0+YWRkY2goSGVpZ2h0KzEsY29sK2ksJyAnKTsKKyAgICB9CisgICAgVzItPmF0dHJvZmYoQV9SRVZFUlNFKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvYysrL2N1cnNlc3cuY2MgYi9jKysvY3Vyc2Vzdy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjVkMDhkCi0tLSAvZGV2L251bGwKKysrIGIvYysrL2N1cnNlc3cuY2MKQEAgLTAsMCArMSw0NzAgQEAKKy8vICogdGhpcyBpcyBmb3IgbWFraW5nIGVtYWNzIGhhcHB5OiAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aG9yczoKKyAqCVRob21hcyBFLiBEaWNrZXkKKyAqCUp1ZXJnZW4gUGZlaWZlcgorICoKKyAqIFRoZSBOQ3Vyc2VzV2luZG93IGNsYXNzIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIGEgZmlsZSB3cml0dGVuIGJ5CisgKiBFcmljIE5ld3RvbiwgbGF0ZXIgbW9kaWZpZWQgYnkgVWxyaWNoIERyZXBwZXIgYW5kIEFuYXRvbHkgSXZhc3l1ay4KKyAqIEhvd2V2ZXIsIGFzaWRlIGZyb20gdGhlIGNvbXBhdGlibGUgaW50ZXJmYWNlIGRlZmluaXRpb24sIG5vIHRyYWNlCisgKiBvZiB0aGUgb3JpZ2luYWwgY29kZSByZW1haW5zIGluIHRoaXMgdmVyc2lvbjogaXQgY29uc2lzdHMgb25seSBvZgorICogY2hhbmdlcyBpbnRyb2R1Y2VkIHNpbmNlIDE5OTUuCisgKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiY3Vyc2Vzdy5oIgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc2Vzdy5jYyx2IDEuNDkgMjAwNy8xMi8xNSAyMzowMTo1NyB0b20gRXhwICQiKQorCisjZGVmaW5lIENPTE9SU19ORUVEX0lOSVRJQUxJWkFUSU9OICAtMQorI2RlZmluZSBDT0xPUlNfTk9UX0lOSVRJQUxJWkVEICAgICAgIDAKKyNkZWZpbmUgQ09MT1JTX01PTk9DSFJPTUUgICAgICAgICAgICAxCisjZGVmaW5lIENPTE9SU19BUkVfUkVBTExZX1RIRVJFICAgICAgMgorCisjZGVmaW5lIEhhdmVDb2xvcnMoKSAoY29sb3JJbml0aWFsaXplZCA9PSBDT0xPUlNfQVJFX1JFQUxMWV9USEVSRSkKKworLy8gZGVjbGFyZSBzdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgY2xhc3MKK2xvbmcgTkN1cnNlc1dpbmRvdzo6Y291bnQgPSAwTDsKK2Jvb2wgTkN1cnNlc1dpbmRvdzo6Yl9pbml0aWFsaXplZCA9IEZBTFNFOworCitpbnQKK05DdXJzZXNXaW5kb3c6OnNjYW53KGNvbnN0IGNoYXIqIGZtdCwgLi4uKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICByZXN1bHQgPSA6OnZ3X3NjYW53ICh3LCBjb25zdF9jYXN0PE5DVVJTRVNfQ09OU1QgY2hhciAqPihmbXQpLCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2ludAorTkN1cnNlc1dpbmRvdzo6c2NhbncoaW50IHksIGludCB4LCBjb25zdCBjaGFyKiBmbXQsIC4uLikKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgaWYgKDo6d21vdmUodywgeSwgeCkgIT0gRVJSKSB7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJcmVzdWx0ID0gOjp2d19zY2FudyAodywgY29uc3RfY2FzdDxOQ1VSU0VTX0NPTlNUIGNoYXIgKj4oZm10KSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2ludAorTkN1cnNlc1dpbmRvdzo6c2NhbncoY29uc3QgY2hhciogZm10LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIHJlc3VsdCA9IDo6dndfc2NhbncgKHcsIGNvbnN0X2Nhc3Q8TkNVUlNFU19DT05TVCBjaGFyICo+KGZtdCksIGFyZ3MpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQKK05DdXJzZXNXaW5kb3c6OnNjYW53KGludCB5LCBpbnQgeCwgY29uc3QgY2hhciogZm10LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIGlmICg6Ondtb3ZlKHcsIHksIHgpICE9IEVSUikgeworCXJlc3VsdCA9IDo6dndfc2NhbncgKHcsIGNvbnN0X2Nhc3Q8TkNVUlNFU19DT05TVCBjaGFyICo+KGZtdCksIGFyZ3MpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2ludAorTkN1cnNlc1dpbmRvdzo6cHJpbnR3KGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICBpbnQgcmVzdWx0ID0gOjp2d19wcmludHcodywgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQKK05DdXJzZXNXaW5kb3c6OnByaW50dyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICBpbnQgcmVzdWx0ID0gOjp3bW92ZSh3LCB5LCB4KTsKKyAgICBpZiAocmVzdWx0ID09IE9LKSB7CisJcmVzdWx0ID0gOjp2d19wcmludHcodywgZm10LCBhcmdzKTsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50CitOQ3Vyc2VzV2luZG93OjpwcmludHcoY29uc3QgY2hhciAqIGZtdCwgdmFfbGlzdCBhcmdzKQoreworICAgIGludCByZXN1bHQgPSA6OnZ3X3ByaW50dyh3LCBmbXQsIGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50CitOQ3Vyc2VzV2luZG93OjpwcmludHcoaW50IHksIGludCB4LCBjb25zdCBjaGFyICogZm10LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IHJlc3VsdCA9IDo6d21vdmUodywgeSwgeCk7CisgICAgaWYgKHJlc3VsdCA9PSBPSykgeworCXJlc3VsdCA9IDo6dndfcHJpbnR3KHcsIGZtdCwgYXJncyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZAorTkN1cnNlc1dpbmRvdzo6c2V0X2tleWJvYXJkKHZvaWQpCit7CisgICAga2V5cGFkKFRSVUUpOworICAgIG1ldGEoVFJVRSk7Cit9CisKK3ZvaWQKK05DdXJzZXNXaW5kb3c6OmVycl9oYW5kbGVyKGNvbnN0IGNoYXIgKm1zZykgY29uc3QgVEhST1dTKE5DdXJzZXNFeGNlcHRpb24pCit7CisgIFRIUk9XKG5ldyBOQ3Vyc2VzRXhjZXB0aW9uKG1zZykpOworfQorCit2b2lkCitOQ3Vyc2VzV2luZG93Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWJfaW5pdGlhbGl6ZWQpIHsKKwk6OmluaXRzY3IoKTsKKwliX2luaXRpYWxpemVkID0gVFJVRTsKKwlpZiAoY29sb3JJbml0aWFsaXplZCA9PSBDT0xPUlNfTkVFRF9JTklUSUFMSVpBVElPTikgeworCSAgICBjb2xvckluaXRpYWxpemVkID0gQ09MT1JTX05PVF9JTklUSUFMSVpFRDsKKwkgICAgdXNlQ29sb3JzKCk7CisJfQorCTo6bm9lY2hvKCk7CisJOjpjYnJlYWsoKTsKKyAgICB9Cit9CisKK3ZvaWQKK05DdXJzZXNXaW5kb3c6OmNvbnN0cnVjdGluZygpCit7CisgICAgaW5pdGlhbGl6ZSgpOworICAgICsrY291bnQ7Cit9CisKK05DdXJzZXNXaW5kb3c6Ok5DdXJzZXNXaW5kb3coKQorICA6IHcoMCksIGFsbG9jZWQoRkFMU0UpLCBwYXIoMCksIHN1YndpbnMoMCksIHNpYigwKQoreworICAgIGNvbnN0cnVjdGluZygpOworCisgICAgdyA9IHN0YXRpY19jYXN0PFdJTkRPVyAqPigwKTsKKyAgICBzZXRfa2V5Ym9hcmQoKTsKK30KKworTkN1cnNlc1dpbmRvdzo6TkN1cnNlc1dpbmRvdyhpbnQgbmxpbmVzLCBpbnQgbmNvbHMsIGludCBiZWdpbl95LCBpbnQgYmVnaW5feCkKKyAgOiB3KDApLCBhbGxvY2VkKFRSVUUpLCBwYXIoMCksIHN1YndpbnMoMCksIHNpYigwKQoreworICAgIGNvbnN0cnVjdGluZygpOworCisgICAgdyA9IDo6bmV3d2luKG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOworICAgIGlmICh3ID09IDApIHsKKwllcnJfaGFuZGxlcigiQ2Fubm90IGNvbnN0cnVjdCB3aW5kb3ciKTsKKyAgICB9CisgICAgc2V0X2tleWJvYXJkKCk7Cit9CisKK05DdXJzZXNXaW5kb3c6Ok5DdXJzZXNXaW5kb3coV0lORE9XKiB3aW5kb3cpCisgIDogdygwKSwgYWxsb2NlZChGQUxTRSksIHBhcigwKSwgc3Vid2lucygwKSwgc2liKDApCit7CisgICAgY29uc3RydWN0aW5nKCk7CisKKyAgICAvLyBXZSB1c2VkIHRvIHVzZSBhIHJlZmVyZW5jZSBvbiB0aGUgIndpbmRvdyIgcGFyYW1ldGVyLCBidXQgd2UgY2Fubm90IGRvCisgICAgLy8gdGhhdCB3aXRoIGFuIG9wYXF1ZSBwb2ludGVyIChzZWUgTkNVUlNFU19PUEFRVUUpLiAgSWYgdGhlIHBhcmFtZXRlciB3YXMKKyAgICAvLyAiOjpzdGRzY3IiLCB0aGF0IGlzIGZpcnN0IHNldCB2aWEgdGhlICJjb25zdHJ1Y3RpbmcoKSBjYWxsLCBhbmQgaXMgbnVsbAorICAgIC8vIHVwIHRvIHRoYXQgcG9pbnQuICBTbyB3ZSBhbGxvdyBhIG51bGwgcG9pbnRlciBoZXJlIGFzIG1lYW5pbmcgdGhlICJzYW1lIgorICAgIC8vIGFzICI6OnN0ZHNjciIuCisgICAgdyA9IHdpbmRvdyA/IHdpbmRvdyA6IDo6c3Rkc2NyOworICAgIHNldF9rZXlib2FyZCgpOworfQorCitOQ3Vyc2VzV2luZG93OjpOQ3Vyc2VzV2luZG93KE5DdXJzZXNXaW5kb3cmIHdpbiwgaW50IG55LCBpbnQgbngsCisJCQkgICAgIGludCBiZWdpbl95LCBpbnQgYmVnaW5feCwgY2hhciBhYnNyZWwpCisgIDogdygwKSwgYWxsb2NlZChUUlVFKSwgcGFyKDApLCBzdWJ3aW5zKDApLCBzaWIoMCkKK3sKKyAgICBjb25zdHJ1Y3RpbmcoKTsKKyAgICBpZiAoYWJzcmVsID09ICdhJykgewkvLyBhYnNvbHV0ZSBvcmlnaW4KKwliZWdpbl95IC09IHdpbi5iZWd5KCk7CisJYmVnaW5feCAtPSB3aW4uYmVneCgpOworICAgIH0KKworICAgIC8vIExpbmsgdGhpcyB3aW5kb3cgaW50byBpdHMgcGFyZW50J3MgbGlzdCBvZiBzdWJ3aW5kb3dzLgorICAgIC8vIFdlIHVzZSBkZXJ3aW4oKSwgc2luY2UgdGhpcyBhbHNvIHdvcmtzIGZvciBwYWRzLgorICAgIHcgPSA6OmRlcndpbih3aW4udywgbnksIG54LCBiZWdpbl95LCBiZWdpbl94KTsKKyAgICBpZiAodyA9PSAwKSB7CisJZXJyX2hhbmRsZXIoIkNhbm5vdCBjb25zdHJ1Y3Qgc3Vid2luZG93Iik7CisgICAgfQorCisgICAgcGFyID0gJndpbjsKKyAgICBzaWIgPSB3aW4uc3Vid2luczsKKyAgICB3aW4uc3Vid2lucyA9IHRoaXM7Cit9CisKK05DdXJzZXNXaW5kb3c6Ok5DdXJzZXNXaW5kb3coTkN1cnNlc1dpbmRvdyYgd2luLAorCQkJCWJvb2wgZG9fYm94IE5DVVJTRVNfUEFSQU1fSU5JVChUUlVFKSkKKyAgOiB3KDApLCBhbGxvY2VkKFRSVUUpLCBwYXIoMCksIHN1YndpbnMoMCksIHNpYigwKQoreworICAgIGNvbnN0cnVjdGluZygpOworICAgIGludCBteUhlaWdodCA9IHdpbi5oZWlnaHQoKTsKKyAgICBpbnQgbXlXaWR0aCAgPSB3aW4ud2lkdGgoKTsKKyAgICB3ID0gOjogZGVyd2luKHdpbi53LCBteUhlaWdodCAtIDIsIG15V2lkdGggLSAyLCAxLCAxKTsKKyAgICBpZiAodyA9PSAwKSB7CisJZXJyX2hhbmRsZXIoIkNhbm5vdCBjb25zdHJ1Y3Qgc3Vid2luZG93Iik7CisgICAgfQorCisgICAgcGFyID0gJndpbjsKKyAgICBzaWIgPSB3aW4uc3Vid2luczsKKyAgICB3aW4uc3Vid2lucyA9IHRoaXM7CisgICAgc3Vid2lucyA9IDA7CisKKyAgICBpZiAoZG9fYm94KSB7CisJd2luLmJveCgpOworCXdpbi50b3VjaHdpbigpOworICAgIH0KK30KKworTkN1cnNlc1dpbmRvdyBOQ3Vyc2VzV2luZG93OjpDbG9uZSgpCit7CisgICAgV0lORE9XICpkID0gOjpkdXB3aW4odyk7CisgICAgTkN1cnNlc1dpbmRvdyBXKGQpOworICAgIFcuc3Vid2lucyA9IHN1YndpbnM7CisgICAgVy5zaWIgPSBzaWI7CisgICAgVy5wYXIgPSBwYXI7CisgICAgVy5hbGxvY2VkID0gYWxsb2NlZDsKKyAgICByZXR1cm4gVzsKK30KKwordHlwZWRlZiBpbnQgKCpSSVBPRkZJTklUKShOQ3Vyc2VzV2luZG93Jik7CitzdGF0aWMgUklQT0ZGSU5JVCBSX0lOSVRbNV07ICAgICAgIC8vIFRoZXJlIGNhbid0IGJlIG1vcmUKK3N0YXRpYyBpbnQgcl9pbml0X2lkeCAgID0gMDsKK3N0YXRpYyBSSVBPRkZJTklUKiBwcmlwID0gUl9JTklUOworCitOQ3Vyc2VzV2luZG93OjpOQ3Vyc2VzV2luZG93KFdJTkRPVyAqd2luLCBpbnQgbmNvbHMpCisgIDogdygwKSwgYWxsb2NlZChGQUxTRSksIHBhcigwKSwgc3Vid2lucygwKSwgc2liKDApCit7CisgICAgaW5pdGlhbGl6ZSgpOworICAgIHcgPSB3aW47CisgICAgYXNzZXJ0KCh3LT5fbWF4eCArMSApID09IG5jb2xzKTsKK30KKworaW50IF9uY194eF9yaXBvZmZfaW5pdChXSU5ET1cgKncsIGludCBuY29scykKK3sKKyAgICBpbnQgcmVzID0gRVJSOworCisgICAgUklQT0ZGSU5JVCBpbml0ID0gKnByaXArKzsKKyAgICBpZiAoaW5pdCkgeworCU5DdXJzZXNXaW5kb3cqIFcgPSBuZXcgTkN1cnNlc1dpbmRvdyh3LG5jb2xzKTsKKwlyZXMgPSBpbml0KCpXKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IE5DdXJzZXNXaW5kb3c6OnJpcG9mZmxpbmUoaW50IHJpcG9mZl9saW5lcywKKwkJCSAgICAgIGludCAoKmluaXQpKE5DdXJzZXNXaW5kb3cmIHdpbikpCit7CisgICAgaW50IGNvZGUgPSA6Ol9uY19yaXBvZmZsaW5lKHJpcG9mZl9saW5lcyxfbmNfeHhfcmlwb2ZmX2luaXQpOworICAgIGlmIChjb2RlID09IE9LICYmIGluaXQgJiYgcmlwb2ZmX2xpbmVzKSB7CisJUl9JTklUW3JfaW5pdF9pZHgrK10gPSBpbml0OworICAgIH0KKyAgICByZXR1cm4gY29kZTsKK30KKworYm9vbAorTkN1cnNlc1dpbmRvdzo6aXNEZXNjZW5kYW50KE5DdXJzZXNXaW5kb3cmIHdpbikKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgZm9yIChOQ3Vyc2VzV2luZG93KiBwID0gc3Vid2luczsgcCAhPSBOVUxMOyBwID0gcC0+c2liKSB7CisJaWYgKHAgPT0gJndpbiB8fCBwLT5pc0Rlc2NlbmRhbnQod2luKSkgeworCSAgICByZXN1bHQgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK05DdXJzZXNXaW5kb3c6OmtpbGxfc3Vid2luZG93cygpCit7CisgICAgTkN1cnNlc1dpbmRvdyogcCA9IHN1YndpbnM7CisKKyAgICBzdWJ3aW5zID0gMDsKKyAgICB3aGlsZSAocCAhPSAwKSB7CisJTkN1cnNlc1dpbmRvdyogcSA9IHAtPnNpYjsKKwlwLT5raWxsX3N1YndpbmRvd3MoKTsKKwlpZiAocC0+YWxsb2NlZCkgeworCSAgICBpZiAocC0+dyAhPSAwKQorCQk6OmRlbHdpbihwLT53KTsKKwl9CisJZGVsZXRlIHA7CisJcCA9IHE7CisgICAgfQorfQorCisKK05DdXJzZXNXaW5kb3c6On5OQ3Vyc2VzV2luZG93KCkKK3sKKyAgICBraWxsX3N1YndpbmRvd3MoKTsKKworICAgIGlmIChwYXIgIT0gMCkgeworCS8vIFJlbW92ZSB0aGlzIHdpbmRvdyBmcm9tIHRoZSBwYXJlbnQncyBsaXN0IG9mIHN1YndpbmRvd3MuCisJTkN1cnNlc1dpbmRvdyAqIG5leHQgPSBwYXItPnN1YndpbnM7CisJTkN1cnNlc1dpbmRvdyAqIHByZXYgPSAwOworCXdoaWxlIChuZXh0ICE9IDApIHsKKwkgICAgaWYgKG5leHQgPT0gdGhpcykgeworCQlpZiAocHJldiAhPSAwKSB7CisJCSAgICBwcmV2LT5zaWIgPSBuZXh0LT5zaWI7CisJCX0gZWxzZSB7CisJCSAgICBwYXItPnN1YndpbnMgPSBuZXh0LT5zaWI7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwkgICAgcHJldiA9IG5leHQ7CisJICAgIG5leHQgPSBuZXh0LT5zaWI7CisJfQorICAgIH0KKworICAgIGlmIChhbGxvY2VkICYmIHcgIT0gMCkKKwk6OmRlbHdpbih3KTsKKworICAgIGlmIChhbGxvY2VkKSB7CisJLS1jb3VudDsKKwlpZiAoY291bnQgPT0gMCkgeworCSAgICA6OmVuZHdpbigpOworCX0gZWxzZSBpZiAoY291bnQgPCAwKSB7IC8vIGNhbm5vdCBoYXBwZW4hCisJICAgIGVycl9oYW5kbGVyKCJUb28gbWFueSB3aW5kb3dzIGRlc3Ryb3llZCIpOworCX0KKyAgICB9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29sb3Igc3R1ZmYKKy8vCitpbnQgTkN1cnNlc1dpbmRvdzo6Y29sb3JJbml0aWFsaXplZCA9IENPTE9SU19OT1RfSU5JVElBTElaRUQ7CisKK3ZvaWQKK05DdXJzZXNXaW5kb3c6OnVzZUNvbG9ycyh2b2lkKQoreworICAgIGlmIChjb2xvckluaXRpYWxpemVkID09IENPTE9SU19OT1RfSU5JVElBTElaRUQpIHsKKwlpZiAoYl9pbml0aWFsaXplZCkgeworCSAgICBpZiAoOjpoYXNfY29sb3JzKCkpIHsKKwkJOjpzdGFydF9jb2xvcigpOworCQljb2xvckluaXRpYWxpemVkID0gQ09MT1JTX0FSRV9SRUFMTFlfVEhFUkU7CisJICAgIH0gZWxzZSB7CisJCWNvbG9ySW5pdGlhbGl6ZWQgPSBDT0xPUlNfTU9OT0NIUk9NRTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGNvbG9ySW5pdGlhbGl6ZWQgPSBDT0xPUlNfTkVFRF9JTklUSUFMSVpBVElPTjsKKwl9CisgICAgfQorfQorCitzaG9ydAorTkN1cnNlc1dpbmRvdzo6Z2V0UGFpcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihQQUlSX05VTUJFUihnZXRhdHRycyh3KSkpOworfQorCitzaG9ydAorTkN1cnNlc1dpbmRvdzo6Z2V0Y29sb3IoaW50IGdldGJhY2spIGNvbnN0Cit7CisgICAgc2hvcnQgZm9yZSwgYmFjazsKKworICAgIGlmIChIYXZlQ29sb3JzKCkpIHsKKwlpZiAoOjpwYWlyX2NvbnRlbnQoZ2V0UGFpcigpLCAmZm9yZSwgJmJhY2spID09IEVSUikKKwkgICAgZXJyX2hhbmRsZXIoIkNhbid0IGdldCBjb2xvciBwYWlyIik7CisgICAgfSBlbHNlIHsKKwkvLyBNb25vY2hyb21lIG1lYW5zIHdoaXRlIG9uIGJsYWNrCisJYmFjayA9IENPTE9SX0JMQUNLOworCWZvcmUgPSBDT0xPUl9XSElURTsKKyAgICB9CisgICAgcmV0dXJuIGdldGJhY2sgPyBiYWNrIDogZm9yZTsKK30KKworaW50IE5DdXJzZXNXaW5kb3c6Ok51bWJlck9mQ29sb3JzKCkKK3sKKyAgICByZXR1cm4gKEhhdmVDb2xvcnMoKSkgPyBDT0xPUlMgOiAxOworfQorCitzaG9ydAorTkN1cnNlc1dpbmRvdzo6Z2V0Y29sb3IoKSBjb25zdAoreworICAgIHJldHVybiAoSGF2ZUNvbG9ycygpKSA/IGdldFBhaXIoKSA6IDA7Cit9CisKK2ludAorTkN1cnNlc1dpbmRvdzo6c2V0cGFsZXR0ZShzaG9ydCBmb3JlLCBzaG9ydCBiYWNrLCBzaG9ydCBwYWlyKQoreworICAgIHJldHVybiAoSGF2ZUNvbG9ycygpKSA/IDo6aW5pdF9wYWlyKHBhaXIsIGZvcmUsIGJhY2spIDogT0s7Cit9CisKK2ludAorTkN1cnNlc1dpbmRvdzo6c2V0cGFsZXR0ZShzaG9ydCBmb3JlLCBzaG9ydCBiYWNrKQoreworICAgIHJldHVybiBzZXRwYWxldHRlKGZvcmUsIGJhY2ssIGdldFBhaXIoKSk7Cit9CisKKworaW50CitOQ3Vyc2VzV2luZG93OjpzZXRjb2xvcihzaG9ydCBwYWlyKQoreworICAgIGlmIChIYXZlQ29sb3JzKCkpIHsKKwlpZiAoKHBhaXIgPCAxKSB8fCAocGFpciA+IENPTE9SX1BBSVJTKSkKKwkgICAgZXJyX2hhbmRsZXIoIkNhbid0IHNldCBjb2xvciBwYWlyIik7CisKKwlhdHRyb2ZmKEFfQ09MT1IpOworCWF0dHJzZXQoQ09MT1JfUEFJUihwYWlyKSk7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworI2lmIEhBVkVfSEFTX0tFWQorYm9vbCBOQ3Vyc2VzV2luZG93OjpoYXNfbW91c2UoKSBjb25zdAoreworICAgIHJldHVybiAoKDo6aGFzX2tleShLRVlfTU9VU0UpIHx8IDo6X25jX2hhc19tb3VzZSgpKQorCSAgICAgPyBUUlVFIDogRkFMU0UpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jKysvY3Vyc2Vzdy5oIGIvYysrL2N1cnNlc3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU5MjFhCi0tLSAvZGV2L251bGwKKysrIGIvYysrL2N1cnNlc3cuaApAQCAtMCwwICsxLDE1NTYgQEAKKy8vICogVGhpcyBtYWtlcyBlbWFjcyBoYXBweSAtKi1Nb2RlOiBDKys7LSotCisvLyB2aWxlOmNwcG1vZGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTkNVUlNFU19DVVJTRVNXX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX0NVUlNFU1dfSF9pbmNsIDEKKworLy8gJElkOiBjdXJzZXN3LmgsdiAxLjQ4IDIwMDgvMDEvMTkgMjE6MDk6MTAgdG9tIEV4cCAkCisKKyNpbmNsdWRlIDxldGlwLmg+CisKK2V4dGVybiAiQyIgeworIyAgaW5jbHVkZSAgIDxjdXJzZXMuaD4KK30KKworLyogU0NPIDMuMnY0IGN1cnNlcy5oIGluY2x1ZGVzIHRlcm0uaCwgd2hpY2ggZGVmaW5lcyBsaW5lcyBhcyBhIG1hY3JvLgorICAgVW5kZWZpbmUgaXQgaGVyZSwgYmVjYXVzZSBOQ3Vyc2VzV2luZG93IHVzZXMgbGluZXMgYXMgYSBtZXRob2QuICAqLworI3VuZGVmIGxpbmVzCisKKy8qICJDb252ZXJ0IiBtYWNyb3MgdG8gaW5saW5lcy4gV2UnbGwgZGVmaW5lIGl0IGFzIGFub3RoZXIgc3ltYm9sIHRvIGF2b2lkCisgKiBjb25mbGljdCB3aXRoIGxpYnJhcnkgc3ltYm9scy4KKyAqLworI3VuZGVmIFVOREVGCisjZGVmaW5lIFVOREVGKG5hbWUpIENVUl8gIyNuYW1lCisKKyNpZmRlZiBhZGRjaAoraW5saW5lIGludCBVTkRFRihhZGRjaCkoY2h0eXBlIGNoKSAgeyByZXR1cm4gYWRkY2goY2gpOyB9CisjdW5kZWYgYWRkY2gKKyNkZWZpbmUgYWRkY2ggVU5ERUYoYWRkY2gpCisjZW5kaWYKKworI2lmZGVmIGFkZGNoc3RyCitpbmxpbmUgaW50IFVOREVGKGFkZGNoc3RyKShjaHR5cGUgKmF0KSB7IHJldHVybiBhZGRjaHN0cihhdCk7IH0KKyN1bmRlZiBhZGRjaHN0cgorI2RlZmluZSBhZGRjaHN0ciBVTkRFRihhZGRjaHN0cikKKyNlbmRpZgorCisjaWZkZWYgYWRkbnN0cgoraW5saW5lIGludCBVTkRFRihhZGRuc3RyKShjb25zdCBjaGFyICpzdHIsIGludCBuKQoreyByZXR1cm4gYWRkbnN0cihzdHIsIG4pOyB9CisjdW5kZWYgYWRkbnN0cgorI2RlZmluZSBhZGRuc3RyIFVOREVGKGFkZG5zdHIpCisjZW5kaWYKKworI2lmZGVmIGFkZHN0cgoraW5saW5lIGludCBVTkRFRihhZGRzdHIpKGNvbnN0IGNoYXIgKiBzdHIpICB7IHJldHVybiBhZGRzdHIoc3RyKTsgfQorI3VuZGVmIGFkZHN0cgorI2RlZmluZSBhZGRzdHIgVU5ERUYoYWRkc3RyKQorI2VuZGlmCisKKyNpZmRlZiBhdHRyb2ZmCitpbmxpbmUgaW50IFVOREVGKGF0dHJvZmYpKGNodHlwZSBhdCkgeyByZXR1cm4gYXR0cm9mZihhdCk7IH0KKyN1bmRlZiBhdHRyb2ZmCisjZGVmaW5lIGF0dHJvZmYgVU5ERUYoYXR0cm9mZikKKyNlbmRpZgorCisjaWZkZWYgYXR0cm9uCitpbmxpbmUgaW50IFVOREVGKGF0dHJvbikoY2h0eXBlIGF0KSB7IHJldHVybiBhdHRyb24oYXQpOyB9CisjdW5kZWYgYXR0cm9uCisjZGVmaW5lIGF0dHJvbiBVTkRFRihhdHRyb24pCisjZW5kaWYKKworI2lmZGVmIGF0dHJzZXQKK2lubGluZSBjaHR5cGUgVU5ERUYoYXR0cnNldCkoY2h0eXBlIGF0KSB7IHJldHVybiBhdHRyc2V0KGF0KTsgfQorI3VuZGVmIGF0dHJzZXQKKyNkZWZpbmUgYXR0cnNldCBVTkRFRihhdHRyc2V0KQorI2VuZGlmCisKKyNpZmRlZiBia2dkCitpbmxpbmUgaW50IFVOREVGKGJrZ2QpKGNodHlwZSBjaCkgeyByZXR1cm4gYmtnZChjaCk7IH0KKyN1bmRlZiBia2dkCisjZGVmaW5lIGJrZ2QgVU5ERUYoYmtnZCkKKyNlbmRpZgorCisjaWZkZWYgYmtnZHNldAoraW5saW5lIHZvaWQgVU5ERUYoYmtnZHNldCkoY2h0eXBlIGNoKSB7IGJrZ2RzZXQoY2gpOyB9CisjdW5kZWYgYmtnZHNldAorI2RlZmluZSBia2dkc2V0IFVOREVGKGJrZ2RzZXQpCisjZW5kaWYKKworI2lmZGVmIGJvcmRlcgoraW5saW5lIGludCBVTkRFRihib3JkZXIpKGNodHlwZSBscywgY2h0eXBlIHJzLCBjaHR5cGUgdHMsIGNodHlwZSBicywgY2h0eXBlIHRsLCBjaHR5cGUgdHIsIGNodHlwZSBibCwgY2h0eXBlIGJyKQoreyByZXR1cm4gYm9yZGVyKGxzLCBycywgdHMsIGJzLCB0bCwgdHIsIGJsLCBicik7IH0KKyN1bmRlZiBib3JkZXIKKyNkZWZpbmUgYm9yZGVyIFVOREVGKGJvcmRlcikKKyNlbmRpZgorCisjaWZkZWYgYm94CitpbmxpbmUgaW50IFVOREVGKGJveCkoV0lORE9XICp3aW4sIGludCB2LCBpbnQgaCkgeyByZXR1cm4gYm94KHdpbiwgdiwgaCk7IH0KKyN1bmRlZiBib3gKKyNkZWZpbmUgYm94IFVOREVGKGJveCkKKyNlbmRpZgorCisjaWZkZWYgY2hnYXQKK2lubGluZSBpbnQgVU5ERUYoY2hnYXQpKGludCBuLCBhdHRyX3QgYXR0ciwgc2hvcnQgY29sb3IsIGNvbnN0IHZvaWQgKm9wdHMpIHsKKyAgcmV0dXJuIGNoZ2F0KG4sIGF0dHIsIGNvbG9yLCBvcHRzKTsgfQorI3VuZGVmIGNoZ2F0CisjZGVmaW5lIGNoZ2F0IFVOREVGKGNoZ2F0KQorI2VuZGlmCisKKyNpZmRlZiBjbGVhcgoraW5saW5lIGludCBVTkRFRihjbGVhcikoKSAgeyByZXR1cm4gY2xlYXIoKTsgfQorI3VuZGVmIGNsZWFyCisjZGVmaW5lIGNsZWFyIFVOREVGKGNsZWFyKQorI2VuZGlmCisKKyNpZmRlZiBjbGVhcm9rCitpbmxpbmUgaW50IFVOREVGKGNsZWFyb2spKFdJTkRPVyogd2luLCBib29sIGJmKSAgeyByZXR1cm4gY2xlYXJvayh3aW4sIGJmKTsgfQorI3VuZGVmIGNsZWFyb2sKKyNkZWZpbmUgY2xlYXJvayBVTkRFRihjbGVhcm9rKQorI2Vsc2UKK2V4dGVybiAiQyIgTkNVUlNFU19JTVBFWFAgaW50IE5DVVJTRVNfQVBJIGNsZWFyb2soV0lORE9XKiwgYm9vbCk7CisjZW5kaWYKKworI2lmZGVmIGNscnRvYm90CitpbmxpbmUgaW50IFVOREVGKGNscnRvYm90KSgpICB7IHJldHVybiBjbHJ0b2JvdCgpOyB9CisjdW5kZWYgY2xydG9ib3QKKyNkZWZpbmUgY2xydG9ib3QgVU5ERUYoY2xydG9ib3QpCisjZW5kaWYKKworI2lmZGVmIGNscnRvZW9sCitpbmxpbmUgaW50IFVOREVGKGNscnRvZW9sKSgpICB7IHJldHVybiBjbHJ0b2VvbCgpOyB9CisjdW5kZWYgY2xydG9lb2wKKyNkZWZpbmUgY2xydG9lb2wgVU5ERUYoY2xydG9lb2wpCisjZW5kaWYKKworI2lmZGVmIGNvbG9yX3NldAoraW5saW5lIGNodHlwZSBVTkRFRihjb2xvcl9zZXQpKHNob3J0IHAsIHZvaWQqIG9wdHMpIHsgcmV0dXJuIGNvbG9yX3NldChwLCBvcHRzKTsgfQorI3VuZGVmIGNvbG9yX3NldAorI2RlZmluZSBjb2xvcl9zZXQgVU5ERUYoY29sb3Jfc2V0KQorI2VuZGlmCisKKyNpZmRlZiBjcm1vZGUKK2lubGluZSBpbnQgVU5ERUYoY3Jtb2RlKSh2b2lkKSB7IHJldHVybiBjcm1vZGUoKTsgfQorI3VuZGVmIGNybW9kZQorI2RlZmluZSBjcm1vZGUgVU5ERUYoY3Jtb2RlKQorI2VuZGlmCisKKyNpZmRlZiBkZWxjaAoraW5saW5lIGludCBVTkRFRihkZWxjaCkoKSAgeyByZXR1cm4gZGVsY2goKTsgfQorI3VuZGVmIGRlbGNoCisjZGVmaW5lIGRlbGNoIFVOREVGKGRlbGNoKQorI2VuZGlmCisKKyNpZmRlZiBkZWxldGVsbgoraW5saW5lIGludCBVTkRFRihkZWxldGVsbikoKSAgeyByZXR1cm4gZGVsZXRlbG4oKTsgfQorI3VuZGVmIGRlbGV0ZWxuCisjZGVmaW5lIGRlbGV0ZWxuIFVOREVGKGRlbGV0ZWxuKQorI2VuZGlmCisKKyNpZmRlZiBlY2hvY2hhcgoraW5saW5lIGludCBVTkRFRihlY2hvY2hhcikoY2h0eXBlIGNoKSAgeyByZXR1cm4gZWNob2NoYXIoY2gpOyB9CisjdW5kZWYgZWNob2NoYXIKKyNkZWZpbmUgZWNob2NoYXIgVU5ERUYoZWNob2NoYXIpCisjZW5kaWYKKworI2lmZGVmIGVyYXNlCitpbmxpbmUgaW50IFVOREVGKGVyYXNlKSgpICB7IHJldHVybiBlcmFzZSgpOyB9CisjdW5kZWYgZXJhc2UKKyNkZWZpbmUgZXJhc2UgVU5ERUYoZXJhc2UpCisjZW5kaWYKKworI2lmZGVmIGZpeHRlcm0KK2lubGluZSBpbnQgVU5ERUYoZml4dGVybSkodm9pZCkgeyByZXR1cm4gZml4dGVybSgpOyB9CisjdW5kZWYgZml4dGVybQorI2RlZmluZSBmaXh0ZXJtIFVOREVGKGZpeHRlcm0pCisjZW5kaWYKKworI2lmZGVmIGZsdXNob2sKK2lubGluZSBpbnQgVU5ERUYoZmx1c2hvaykoV0lORE9XKiBfd2luLCBib29sIF9iZikgIHsKKyAgcmV0dXJuIGZsdXNob2soX3dpbiwgX2JmKTsgfQorI3VuZGVmIGZsdXNob2sKKyNkZWZpbmUgZmx1c2hvayBVTkRFRihmbHVzaG9rKQorI2Vsc2UKKyNkZWZpbmUgX25vX2ZsdXNob2sKKyNlbmRpZgorCisjaWZkZWYgZ2V0YXR0cnMKK2lubGluZSBpbnQgVU5ERUYoZ2V0YXR0cnMpKFdJTkRPVyAqd2luKSB7IHJldHVybiBnZXRhdHRycyh3aW4pOyB9CisjdW5kZWYgZ2V0YXR0cnMKKyNkZWZpbmUgZ2V0YXR0cnMgVU5ERUYoZ2V0YXR0cnMpCisjZW5kaWYKKworI2lmZGVmIGdldGJlZ3l4CitpbmxpbmUgdm9pZCBVTkRFRihnZXRiZWd5eCkoV0lORE9XKiB3aW4sIGludCYgeSwgaW50JiB4KSB7IGdldGJlZ3l4KHdpbiwgeSwgeCk7IH0KKyN1bmRlZiBnZXRiZWd5eAorI2RlZmluZSBnZXRiZWd5eCBVTkRFRihnZXRiZWd5eCkKKyNlbmRpZgorCisjaWZkZWYgZ2V0YmtnZAoraW5saW5lIGNodHlwZSBVTkRFRihnZXRia2dkKShjb25zdCBXSU5ET1cgKndpbikgeyByZXR1cm4gZ2V0YmtnZCh3aW4pOyB9CisjdW5kZWYgZ2V0YmtnZAorI2RlZmluZSBnZXRia2dkIFVOREVGKGdldGJrZ2QpCisjZW5kaWYKKworI2lmZGVmIGdldGNoCitpbmxpbmUgaW50IFVOREVGKGdldGNoKSgpICB7IHJldHVybiBnZXRjaCgpOyB9CisjdW5kZWYgZ2V0Y2gKKyNkZWZpbmUgZ2V0Y2ggVU5ERUYoZ2V0Y2gpCisjZW5kaWYKKworI2lmZGVmIGdldG1heHl4CitpbmxpbmUgdm9pZCBVTkRFRihnZXRtYXh5eCkoV0lORE9XKiB3aW4sIGludCYgeSwgaW50JiB4KSB7IGdldG1heHl4KHdpbiwgeSwgeCk7IH0KKyN1bmRlZiBnZXRtYXh5eAorI2RlZmluZSBnZXRtYXh5eCBVTkRFRihnZXRtYXh5eCkKKyNlbmRpZgorCisjaWZkZWYgZ2V0bnN0cgoraW5saW5lIGludCBVTkRFRihnZXRuc3RyKShjaGFyICpfc3RyLCBpbnQgbikgIHsgcmV0dXJuIGdldG5zdHIoX3N0ciwgbik7IH0KKyN1bmRlZiBnZXRuc3RyCisjZGVmaW5lIGdldG5zdHIgVU5ERUYoZ2V0bnN0cikKKyNlbmRpZgorCisjaWZkZWYgZ2V0cGFyeXgKK2lubGluZSB2b2lkIFVOREVGKGdldHBhcnl4KShXSU5ET1cqIHdpbiwgaW50JiB5LCBpbnQmIHgpIHsgZ2V0cGFyeXgod2luLCB5LCB4KTsgfQorI3VuZGVmIGdldHBhcnl4CisjZGVmaW5lIGdldHBhcnl4IFVOREVGKGdldHBhcnl4KQorI2VuZGlmCisKKyNpZmRlZiBnZXRzdHIKK2lubGluZSBpbnQgVU5ERUYoZ2V0c3RyKShjaGFyICpfc3RyKSAgeyByZXR1cm4gZ2V0c3RyKF9zdHIpOyB9CisjdW5kZWYgZ2V0c3RyCisjZGVmaW5lIGdldHN0ciBVTkRFRihnZXRzdHIpCisjZW5kaWYKKworI2lmZGVmIGdldHl4CitpbmxpbmUgdm9pZCBVTkRFRihnZXR5eCkoY29uc3QgV0lORE9XKiB3aW4sIGludCYgeSwgaW50JiB4KSB7CisgIGdldHl4KHdpbiwgeSwgeCk7IH0KKyN1bmRlZiBnZXR5eAorI2RlZmluZSBnZXR5eCBVTkRFRihnZXR5eCkKKyNlbmRpZgorCisjaWZkZWYgaGxpbmUKK2lubGluZSBpbnQgVU5ERUYoaGxpbmUpKGNodHlwZSBjaCwgaW50IG4pIHsgcmV0dXJuIGhsaW5lKGNoLCBuKTsgfQorI3VuZGVmIGhsaW5lCisjZGVmaW5lIGhsaW5lIFVOREVGKGhsaW5lKQorI2VuZGlmCisKKyNpZmRlZiBpbmNoCitpbmxpbmUgY2h0eXBlIFVOREVGKGluY2gpKCkgIHsgcmV0dXJuIGluY2goKTsgfQorI3VuZGVmIGluY2gKKyNkZWZpbmUgaW5jaCBVTkRFRihpbmNoKQorI2VuZGlmCisKKyNpZmRlZiBpbmNoc3RyCitpbmxpbmUgaW50IFVOREVGKGluY2hzdHIpKGNodHlwZSAqc3RyKSAgeyByZXR1cm4gaW5jaHN0cihzdHIpOyB9CisjdW5kZWYgaW5jaHN0cgorI2RlZmluZSBpbmNoc3RyIFVOREVGKGluY2hzdHIpCisjZW5kaWYKKworI2lmZGVmIGlubnN0cgoraW5saW5lIGludCBVTkRFRihpbm5zdHIpKGNoYXIgKl9zdHIsIGludCBuKSAgeyByZXR1cm4gaW5uc3RyKF9zdHIsIG4pOyB9CisjdW5kZWYgaW5uc3RyCisjZGVmaW5lIGlubnN0ciBVTkRFRihpbm5zdHIpCisjZW5kaWYKKworI2lmZGVmIGluc2NoCitpbmxpbmUgaW50IFVOREVGKGluc2NoKShjaHR5cGUgYykgIHsgcmV0dXJuIGluc2NoKGMpOyB9CisjdW5kZWYgaW5zY2gKKyNkZWZpbmUgaW5zY2ggVU5ERUYoaW5zY2gpCisjZW5kaWYKKworI2lmZGVmIGluc2RlbGxuCitpbmxpbmUgaW50IFVOREVGKGluc2RlbGxuKShpbnQgbikgIHsgcmV0dXJuIGluc2RlbGxuKG4pOyB9CisjdW5kZWYgaW5zZGVsbG4KKyNkZWZpbmUgaW5zZGVsbG4gVU5ERUYoaW5zZGVsbG4pCisjZW5kaWYKKworI2lmZGVmIGluc2VydGxuCitpbmxpbmUgaW50IFVOREVGKGluc2VydGxuKSgpICB7IHJldHVybiBpbnNlcnRsbigpOyB9CisjdW5kZWYgaW5zZXJ0bG4KKyNkZWZpbmUgaW5zZXJ0bG4gVU5ERUYoaW5zZXJ0bG4pCisjZW5kaWYKKworI2lmZGVmIGluc25zdHIKK2lubGluZSBpbnQgVU5ERUYoaW5zbnN0cikoY29uc3QgY2hhciAqX3N0ciwgaW50IG4pICB7CisgIHJldHVybiBpbnNuc3RyKF9zdHIsIG4pOyB9CisjdW5kZWYgaW5zbnN0cgorI2RlZmluZSBpbnNuc3RyIFVOREVGKGluc25zdHIpCisjZW5kaWYKKworI2lmZGVmIGluc3N0cgoraW5saW5lIGludCBVTkRFRihpbnNzdHIpKGNvbnN0IGNoYXIgKl9zdHIpICB7CisgIHJldHVybiBpbnNzdHIoX3N0cik7IH0KKyN1bmRlZiBpbnNzdHIKKyNkZWZpbmUgaW5zc3RyIFVOREVGKGluc3N0cikKKyNlbmRpZgorCisjaWZkZWYgaW5zdHIKK2lubGluZSBpbnQgVU5ERUYoaW5zdHIpKGNoYXIgKl9zdHIpICB7IHJldHVybiBpbnN0cihfc3RyKTsgfQorI3VuZGVmIGluc3RyCisjZGVmaW5lIGluc3RyIFVOREVGKGluc3RyKQorI2VuZGlmCisKKyNpZmRlZiBpbnRyZmx1c2gKK2lubGluZSB2b2lkIFVOREVGKGludHJmbHVzaCkoV0lORE9XICp3aW4sIGJvb2wgYmYpIHsgaW50cmZsdXNoKCk7IH0KKyN1bmRlZiBpbnRyZmx1c2gKKyNkZWZpbmUgaW50cmZsdXNoIFVOREVGKGludHJmbHVzaCkKKyNlbmRpZgorCisjaWZkZWYgbGVhdmVvaworaW5saW5lIGludCBVTkRFRihsZWF2ZW9rKShXSU5ET1cqIHdpbiwgYm9vbCBiZikgIHsgcmV0dXJuIGxlYXZlb2sod2luLCBiZik7IH0KKyN1bmRlZiBsZWF2ZW9rCisjZGVmaW5lIGxlYXZlb2sgVU5ERUYobGVhdmVvaykKKyNlbHNlCitleHRlcm4gIkMiIE5DVVJTRVNfSU1QRVhQIGludCBOQ1VSU0VTX0FQSSBsZWF2ZW9rKFdJTkRPVyogd2luLCBib29sIGJmKTsKKyNlbmRpZgorCisjaWZkZWYgbW92ZQoraW5saW5lIGludCBVTkRFRihtb3ZlKShpbnQgeCwgaW50IHkpICB7IHJldHVybiBtb3ZlKHgsIHkpOyB9CisjdW5kZWYgbW92ZQorI2RlZmluZSBtb3ZlIFVOREVGKG1vdmUpCisjZW5kaWYKKworI2lmZGVmIG12YWRkY2gKK2lubGluZSBpbnQgVU5ERUYobXZhZGRjaCkoaW50IHksIGludCB4LCBjaHR5cGUgY2gpCit7IHJldHVybiBtdmFkZGNoKHksIHgsIGNoKTsgfQorI3VuZGVmIG12YWRkY2gKKyNkZWZpbmUgbXZhZGRjaCBVTkRFRihtdmFkZGNoKQorI2VuZGlmCisKKyNpZmRlZiBtdmFkZG5zdHIKK2lubGluZSBpbnQgVU5ERUYobXZhZGRuc3RyKShpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG4pCit7IHJldHVybiBtdmFkZG5zdHIoeSwgeCwgc3RyLCBuKTsgfQorI3VuZGVmIG12YWRkbnN0cgorI2RlZmluZSBtdmFkZG5zdHIgVU5ERUYobXZhZGRuc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdmFkZHN0cgoraW5saW5lIGludCBVTkRFRihtdmFkZHN0cikoaW50IHksIGludCB4LCBjb25zdCBjaGFyICogc3RyKQoreyByZXR1cm4gbXZhZGRzdHIoeSwgeCwgc3RyKTsgfQorI3VuZGVmIG12YWRkc3RyCisjZGVmaW5lIG12YWRkc3RyIFVOREVGKG12YWRkc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdmNoZ2F0CitpbmxpbmUgaW50IFVOREVGKG12Y2hnYXQpKGludCB5LCBpbnQgeCwgaW50IG4sCisJCQkgIGF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvciwgY29uc3Qgdm9pZCAqb3B0cykgeworICByZXR1cm4gbXZjaGdhdCh5LCB4LCBuLCBhdHRyLCBjb2xvciwgb3B0cyk7IH0KKyN1bmRlZiBtdmNoZ2F0CisjZGVmaW5lIG12Y2hnYXQgVU5ERUYobXZjaGdhdCkKKyNlbmRpZgorCisjaWZkZWYgbXZkZWxjaAoraW5saW5lIGludCBVTkRFRihtdmRlbGNoKShpbnQgeSwgaW50IHgpIHsgcmV0dXJuIG12ZGVsY2goeSwgeCk7fQorI3VuZGVmIG12ZGVsY2gKKyNkZWZpbmUgbXZkZWxjaCBVTkRFRihtdmRlbGNoKQorI2VuZGlmCisKKyNpZmRlZiBtdmdldGNoCitpbmxpbmUgaW50IFVOREVGKG12Z2V0Y2gpKGludCB5LCBpbnQgeCkgeyByZXR1cm4gbXZnZXRjaCh5LCB4KTt9CisjdW5kZWYgbXZnZXRjaAorI2RlZmluZSBtdmdldGNoIFVOREVGKG12Z2V0Y2gpCisjZW5kaWYKKworI2lmZGVmIG12Z2V0bnN0cgoraW5saW5lIGludCBVTkRFRihtdmdldG5zdHIpKGludCB5LCBpbnQgeCwgY2hhciAqc3RyLCBpbnQgbikgeworICByZXR1cm4gbXZnZXRuc3RyKHksIHgsIHN0ciwgbik7fQorI3VuZGVmIG12Z2V0bnN0cgorI2RlZmluZSBtdmdldG5zdHIgVU5ERUYobXZnZXRuc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdmdldHN0cgoraW5saW5lIGludCBVTkRFRihtdmdldHN0cikoaW50IHksIGludCB4LCBjaGFyICpzdHIpIHtyZXR1cm4gbXZnZXRzdHIoeSwgeCwgc3RyKTt9CisjdW5kZWYgbXZnZXRzdHIKKyNkZWZpbmUgbXZnZXRzdHIgVU5ERUYobXZnZXRzdHIpCisjZW5kaWYKKworI2lmZGVmIG12aW5jaAoraW5saW5lIGNodHlwZSBVTkRFRihtdmluY2gpKGludCB5LCBpbnQgeCkgeyByZXR1cm4gbXZpbmNoKHksIHgpO30KKyN1bmRlZiBtdmluY2gKKyNkZWZpbmUgbXZpbmNoIFVOREVGKG12aW5jaCkKKyNlbmRpZgorCisjaWZkZWYgbXZpbm5zdHIKK2lubGluZSBpbnQgVU5ERUYobXZpbm5zdHIpKGludCB5LCBpbnQgeCwgY2hhciAqX3N0ciwgaW50IG4pIHsKKyAgcmV0dXJuIG12aW5uc3RyKHksIHgsIF9zdHIsIG4pOyB9CisjdW5kZWYgbXZpbm5zdHIKKyNkZWZpbmUgbXZpbm5zdHIgVU5ERUYobXZpbm5zdHIpCisjZW5kaWYKKworI2lmZGVmIG12aW5zY2gKK2lubGluZSBpbnQgVU5ERUYobXZpbnNjaCkoaW50IHksIGludCB4LCBjaHR5cGUgYykKK3sgcmV0dXJuIG12aW5zY2goeSwgeCwgYyk7IH0KKyN1bmRlZiBtdmluc2NoCisjZGVmaW5lIG12aW5zY2ggVU5ERUYobXZpbnNjaCkKKyNlbmRpZgorCisjaWZkZWYgbXZpbnNuc3RyCitpbmxpbmUgaW50IFVOREVGKG12aW5zbnN0cikoaW50IHksIGludCB4LCBjb25zdCBjaGFyICpfc3RyLCBpbnQgbikgeworICByZXR1cm4gbXZpbnNuc3RyKHksIHgsIF9zdHIsIG4pOyB9CisjdW5kZWYgbXZpbnNuc3RyCisjZGVmaW5lIG12aW5zbnN0ciBVTkRFRihtdmluc25zdHIpCisjZW5kaWYKKworI2lmZGVmIG12aW5zc3RyCitpbmxpbmUgaW50IFVOREVGKG12aW5zc3RyKShpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKl9zdHIpICB7CisgIHJldHVybiBtdmluc3N0cih5LCB4LCBfc3RyKTsgfQorI3VuZGVmIG12aW5zc3RyCisjZGVmaW5lIG12aW5zc3RyIFVOREVGKG12aW5zc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndhZGRjaAoraW5saW5lIGludCBVTkRFRihtdndhZGRjaCkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlIGNoKQoreyByZXR1cm4gbXZ3YWRkY2god2luLCB5LCB4LCBjaCk7IH0KKyN1bmRlZiBtdndhZGRjaAorI2RlZmluZSBtdndhZGRjaCBVTkRFRihtdndhZGRjaCkKKyNlbmRpZgorCisjaWZkZWYgbXZ3YWRkY2huc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2FkZGNobnN0cikoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICpzdHIsIGludCBuKQoreyByZXR1cm4gbXZ3YWRkY2huc3RyKHdpbiwgeSwgeCwgc3RyLCBuKTsgfQorI3VuZGVmIG12d2FkZGNobnN0cgorI2RlZmluZSBtdndhZGRjaG5zdHIgVU5ERUYobXZ3YWRkY2huc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndhZGRjaHN0cgoraW5saW5lIGludCBVTkRFRihtdndhZGRjaHN0cikoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICpzdHIpCit7IHJldHVybiBtdndhZGRjaHN0cih3aW4sIHksIHgsIHN0cik7IH0KKyN1bmRlZiBtdndhZGRjaHN0cgorI2RlZmluZSBtdndhZGRjaHN0ciBVTkRFRihtdndhZGRjaHN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3YWRkbnN0cgoraW5saW5lIGludCBVTkRFRihtdndhZGRuc3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaGFyICpzdHIsIGludCBuKQoreyByZXR1cm4gbXZ3YWRkbnN0cih3aW4sIHksIHgsIHN0ciwgbik7IH0KKyN1bmRlZiBtdndhZGRuc3RyCisjZGVmaW5lIG12d2FkZG5zdHIgVU5ERUYobXZ3YWRkbnN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3YWRkc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2FkZHN0cikoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqIHN0cikKK3sgcmV0dXJuIG12d2FkZHN0cih3aW4sIHksIHgsIHN0cik7IH0KKyN1bmRlZiBtdndhZGRzdHIKKyNkZWZpbmUgbXZ3YWRkc3RyIFVOREVGKG12d2FkZHN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3Y2hnYXQKK2lubGluZSBpbnQgVU5ERUYobXZ3Y2hnYXQpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGludCBuLAorCQkJICAgYXR0cl90IGF0dHIsIHNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzKSB7CisgIHJldHVybiBtdndjaGdhdCh3aW4sIHksIHgsIG4sIGF0dHIsIGNvbG9yLCBvcHRzKTsgfQorI3VuZGVmIG12d2NoZ2F0CisjZGVmaW5lIG12d2NoZ2F0IFVOREVGKG12d2NoZ2F0KQorI2VuZGlmCisKKyNpZmRlZiBtdndkZWxjaAoraW5saW5lIGludCBVTkRFRihtdndkZWxjaCkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKK3sgcmV0dXJuIG12d2RlbGNoKHdpbiwgeSwgeCk7IH0KKyN1bmRlZiBtdndkZWxjaAorI2RlZmluZSBtdndkZWxjaCBVTkRFRihtdndkZWxjaCkKKyNlbmRpZgorCisjaWZkZWYgbXZ3Z2V0Y2gKK2lubGluZSBpbnQgVU5ERUYobXZ3Z2V0Y2gpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpIHsgcmV0dXJuIG12d2dldGNoKHdpbiwgeSwgeCk7fQorI3VuZGVmIG12d2dldGNoCisjZGVmaW5lIG12d2dldGNoIFVOREVGKG12d2dldGNoKQorI2VuZGlmCisKKyNpZmRlZiBtdndnZXRuc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2dldG5zdHIpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pCit7cmV0dXJuIG12d2dldG5zdHIod2luLCB5LCB4LCBzdHIsIG4pO30KKyN1bmRlZiBtdndnZXRuc3RyCisjZGVmaW5lIG12d2dldG5zdHIgVU5ERUYobXZ3Z2V0bnN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3Z2V0c3RyCitpbmxpbmUgaW50IFVOREVGKG12d2dldHN0cikoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqc3RyKQore3JldHVybiBtdndnZXRzdHIod2luLCB5LCB4LCBzdHIpO30KKyN1bmRlZiBtdndnZXRzdHIKKyNkZWZpbmUgbXZ3Z2V0c3RyIFVOREVGKG12d2dldHN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3aGxpbmUKK2lubGluZSBpbnQgVU5ERUYobXZ3aGxpbmUpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSBjLCBpbnQgbikgeworICByZXR1cm4gbXZ3aGxpbmUod2luLCB5LCB4LCBjLCBuKTsgfQorI3VuZGVmIG12d2hsaW5lCisjZGVmaW5lIG12d2hsaW5lIFVOREVGKG12d2hsaW5lKQorI2VuZGlmCisKKyNpZmRlZiBtdndpbmNoCitpbmxpbmUgY2h0eXBlIFVOREVGKG12d2luY2gpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpIHsKKyAgcmV0dXJuIG12d2luY2god2luLCB5LCB4KTt9CisjdW5kZWYgbXZ3aW5jaAorI2RlZmluZSBtdndpbmNoIFVOREVGKG12d2luY2gpCisjZW5kaWYKKworI2lmZGVmIG12d2luY2huc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2luY2huc3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgKnN0ciwgaW50IG4pICB7IHJldHVybiBtdndpbmNobnN0cih3aW4sIHksIHgsIHN0ciwgbik7IH0KKyN1bmRlZiBtdndpbmNobnN0cgorI2RlZmluZSBtdndpbmNobnN0ciBVTkRFRihtdndpbmNobnN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3aW5jaHN0cgoraW5saW5lIGludCBVTkRFRihtdndpbmNoc3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgKnN0cikgIHsgcmV0dXJuIG12d2luY2hzdHIod2luLCB5LCB4LCBzdHIpOyB9CisjdW5kZWYgbXZ3aW5jaHN0cgorI2RlZmluZSBtdndpbmNoc3RyIFVOREVGKG12d2luY2hzdHIpCisjZW5kaWYKKworI2lmZGVmIG12d2lubnN0cgoraW5saW5lIGludCBVTkRFRihtdndpbm5zdHIpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNoYXIgKl9zdHIsIGludCBuKSB7CisgIHJldHVybiBtdndpbm5zdHIod2luLCB5LCB4LCBfc3RyLCBuKTsgfQorI3VuZGVmIG12d2lubnN0cgorI2RlZmluZSBtdndpbm5zdHIgVU5ERUYobXZ3aW5uc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndpbnNjaAoraW5saW5lIGludCBVTkRFRihtdndpbnNjaCkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlIGMpCit7IHJldHVybiBtdndpbnNjaCh3aW4sIHksIHgsIGMpOyB9CisjdW5kZWYgbXZ3aW5zY2gKKyNkZWZpbmUgbXZ3aW5zY2ggVU5ERUYobXZ3aW5zY2gpCisjZW5kaWYKKworI2lmZGVmIG12d2luc25zdHIKK2lubGluZSBpbnQgVU5ERUYobXZ3aW5zbnN0cikoV0lORE9XICp3LCBpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKl9zdHIsIGludCBuKSB7CisgIHJldHVybiBtdndpbnNuc3RyKHcsIHksIHgsIF9zdHIsIG4pOyB9CisjdW5kZWYgbXZ3aW5zbnN0cgorI2RlZmluZSBtdndpbnNuc3RyIFVOREVGKG12d2luc25zdHIpCisjZW5kaWYKKworI2lmZGVmIG12d2luc3N0cgoraW5saW5lIGludCBVTkRFRihtdndpbnNzdHIpKFdJTkRPVyAqdywgaW50IHksIGludCB4LCAgY29uc3QgY2hhciAqX3N0cikgIHsKKyAgcmV0dXJuIG12d2luc3N0cih3LCB5LCB4LCBfc3RyKTsgfQorI3VuZGVmIG12d2luc3N0cgorI2RlZmluZSBtdndpbnNzdHIgVU5ERUYobXZ3aW5zc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdnd2bGluZQoraW5saW5lIGludCBVTkRFRihtdnd2bGluZSkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlIGMsIGludCBuKSB7CisgIHJldHVybiBtdnd2bGluZSh3aW4sIHksIHgsIGMsIG4pOyB9CisjdW5kZWYgbXZ3dmxpbmUKKyNkZWZpbmUgbXZ3dmxpbmUgVU5ERUYobXZ3dmxpbmUpCisjZW5kaWYKKworI2lmZGVmIG5hcG1zCitpbmxpbmUgdm9pZCBVTkRFRihuYXBtcykodW5zaWduZWQgbG9uZyB4KSB7IG5hcG1zKHgpOyB9CisjdW5kZWYgbmFwbXMKKyNkZWZpbmUgbmFwbXMgVU5ERUYobmFwbXMpCisjZW5kaWYKKworI2lmZGVmIG5vY3Jtb2RlCitpbmxpbmUgaW50IFVOREVGKG5vY3Jtb2RlKSh2b2lkKSB7IHJldHVybiBub2NybW9kZSgpOyB9CisjdW5kZWYgbm9jcm1vZGUKKyNkZWZpbmUgbm9jcm1vZGUgVU5ERUYobm9jcm1vZGUpCisjZW5kaWYKKworI2lmZGVmIG5vZGVsYXkKK2lubGluZSB2b2lkIFVOREVGKG5vZGVsYXkpKCkgeyBub2RlbGF5KCk7IH0KKyN1bmRlZiBub2RlbGF5CisjZGVmaW5lIG5vZGVsYXkgVU5ERUYobm9kZWxheSkKKyNlbmRpZgorCisjaWZkZWYgcmVkcmF3d2luCitpbmxpbmUgaW50IFVOREVGKHJlZHJhd3dpbikoV0lORE9XICp3aW4pICB7IHJldHVybiByZWRyYXd3aW4od2luKTsgfQorI3VuZGVmIHJlZHJhd3dpbgorI2RlZmluZSByZWRyYXd3aW4gVU5ERUYocmVkcmF3d2luKQorI2VuZGlmCisKKyNpZmRlZiByZWZyZXNoCitpbmxpbmUgaW50IFVOREVGKHJlZnJlc2gpKCkgIHsgcmV0dXJuIHJlZnJlc2goKTsgfQorI3VuZGVmIHJlZnJlc2gKKyNkZWZpbmUgcmVmcmVzaCBVTkRFRihyZWZyZXNoKQorI2VuZGlmCisKKyNpZmRlZiByZXNldHRlcm0KK2lubGluZSBpbnQgVU5ERUYocmVzZXR0ZXJtKSh2b2lkKSB7IHJldHVybiByZXNldHRlcm0oKTsgfQorI3VuZGVmIHJlc2V0dGVybQorI2RlZmluZSByZXNldHRlcm0gVU5ERUYocmVzZXR0ZXJtKQorI2VuZGlmCisKKyNpZmRlZiBzYXZldGVybQoraW5saW5lIGludCBVTkRFRihzYXZldGVybSkodm9pZCkgeyByZXR1cm4gc2F2ZXRlcm0oKTsgfQorI3VuZGVmIHNhdmV0ZXJtCisjZGVmaW5lIHNhdmV0ZXJtIFVOREVGKHNhdmV0ZXJtKQorI2VuZGlmCisKKyNpZmRlZiBzY3JsCitpbmxpbmUgaW50IFVOREVGKHNjcmwpKGludCBsKSB7IHJldHVybiBzY3JsKGwpOyB9CisjdW5kZWYgc2NybAorI2RlZmluZSBzY3JsIFVOREVGKHNjcmwpCisjZW5kaWYKKworI2lmZGVmIHNjcm9sbAoraW5saW5lIGludCBVTkRFRihzY3JvbGwpKFdJTkRPVyAqd2luKSB7IHJldHVybiBzY3JvbGwod2luKTsgfQorI3VuZGVmIHNjcm9sbAorI2RlZmluZSBzY3JvbGwgVU5ERUYoc2Nyb2xsKQorI2VuZGlmCisKKyNpZmRlZiBzY3JvbGxvaworaW5saW5lIGludCBVTkRFRihzY3JvbGxvaykoV0lORE9XKiB3aW4sIGJvb2wgYmYpICB7IHJldHVybiBzY3JvbGxvayh3aW4sIGJmKTsgfQorI3VuZGVmIHNjcm9sbG9rCisjZGVmaW5lIHNjcm9sbG9rIFVOREVGKHNjcm9sbG9rKQorI2Vsc2UKKyNpZglkZWZpbmVkKF9fTkNVUlNFU19IKQorZXh0ZXJuICJDIiBOQ1VSU0VTX0lNUEVYUCBpbnQgTkNVUlNFU19BUEkgc2Nyb2xsb2soV0lORE9XKiwgYm9vbCk7CisjZWxzZQorZXh0ZXJuICJDIiBOQ1VSU0VTX0lNUEVYUCBpbnQgTkNVUlNFU19BUEkgc2Nyb2xsb2soV0lORE9XKiwgY2hhcik7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgc2V0c2NycmVnCitpbmxpbmUgaW50IFVOREVGKHNldHNjcnJlZykoaW50IHQsIGludCBiKSB7IHJldHVybiBzZXRzY3JyZWcodCwgYik7IH0KKyN1bmRlZiBzZXRzY3JyZWcKKyNkZWZpbmUgc2V0c2NycmVnIFVOREVGKHNldHNjcnJlZykKKyNlbmRpZgorCisjaWZkZWYgc3RhbmRlbmQKK2lubGluZSBpbnQgVU5ERUYoc3RhbmRlbmQpKCkgIHsgcmV0dXJuIHN0YW5kZW5kKCk7IH0KKyN1bmRlZiBzdGFuZGVuZAorI2RlZmluZSBzdGFuZGVuZCBVTkRFRihzdGFuZGVuZCkKKyNlbmRpZgorCisjaWZkZWYgc3RhbmRvdXQKK2lubGluZSBpbnQgVU5ERUYoc3RhbmRvdXQpKCkgIHsgcmV0dXJuIHN0YW5kb3V0KCk7IH0KKyN1bmRlZiBzdGFuZG91dAorI2RlZmluZSBzdGFuZG91dCBVTkRFRihzdGFuZG91dCkKKyNlbmRpZgorCisjaWZkZWYgc3VicGFkCitpbmxpbmUgV0lORE9XICpVTkRFRihzdWJwYWQpKFdJTkRPVyAqcCwgaW50IGwsIGludCBjLCBpbnQgeSwgaW50IHgpCit7IHJldHVybiBkZXJ3aW4ocCwgbCwgYywgeSwgeCk7IH0KKyN1bmRlZiBzdWJwYWQKKyNkZWZpbmUgc3VicGFkIFVOREVGKHN1YnBhZCkKKyNlbmRpZgorCisjaWZkZWYgdGltZW91dAoraW5saW5lIHZvaWQgVU5ERUYodGltZW91dCkoaW50IGRlbGF5KSB7IHRpbWVvdXQoZGVsYXkpOyB9CisjdW5kZWYgdGltZW91dAorI2RlZmluZSB0aW1lb3V0IFVOREVGKHRpbWVvdXQpCisjZW5kaWYKKworI2lmZGVmIHRvdWNobGluZQoraW5saW5lIGludCBVTkRFRih0b3VjaGxpbmUpKFdJTkRPVyAqd2luLCBpbnQgcywgaW50IGMpCit7IHJldHVybiB0b3VjaGxpbmUod2luLCBzLCBjKTsgfQorI3VuZGVmIHRvdWNobGluZQorI2RlZmluZSB0b3VjaGxpbmUgVU5ERUYodG91Y2hsaW5lKQorI2VuZGlmCisKKyNpZmRlZiB0b3VjaHdpbgoraW5saW5lIGludCBVTkRFRih0b3VjaHdpbikoV0lORE9XICp3aW4pIHsgcmV0dXJuIHRvdWNod2luKHdpbik7IH0KKyN1bmRlZiB0b3VjaHdpbgorI2RlZmluZSB0b3VjaHdpbiBVTkRFRih0b3VjaHdpbikKKyNlbmRpZgorCisjaWZkZWYgdW50b3VjaHdpbgoraW5saW5lIGludCBVTkRFRih1bnRvdWNod2luKShXSU5ET1cgKndpbikgeyByZXR1cm4gdW50b3VjaHdpbih3aW4pOyB9CisjdW5kZWYgdW50b3VjaHdpbgorI2RlZmluZSB1bnRvdWNod2luIFVOREVGKHVudG91Y2h3aW4pCisjZW5kaWYKKworI2lmZGVmIHZsaW5lCitpbmxpbmUgaW50IFVOREVGKHZsaW5lKShjaHR5cGUgY2gsIGludCBuKSB7IHJldHVybiB2bGluZShjaCwgbik7IH0KKyN1bmRlZiB2bGluZQorI2RlZmluZSB2bGluZSBVTkRFRih2bGluZSkKKyNlbmRpZgorCisjaWZkZWYgd2FkZGNoc3RyCitpbmxpbmUgaW50IFVOREVGKHdhZGRjaHN0cikoV0lORE9XICp3aW4sIGNodHlwZSAqYXQpIHsgcmV0dXJuIHdhZGRjaHN0cih3aW4sIGF0KTsgfQorI3VuZGVmIHdhZGRjaHN0cgorI2RlZmluZSB3YWRkY2hzdHIgVU5ERUYod2FkZGNoc3RyKQorI2VuZGlmCisKKyNpZmRlZiB3YWRkc3RyCitpbmxpbmUgaW50IFVOREVGKHdhZGRzdHIpKFdJTkRPVyAqd2luLCBjaGFyICpzdHIpIHsgcmV0dXJuIHdhZGRzdHIod2luLCBzdHIpOyB9CisjdW5kZWYgd2FkZHN0cgorI2RlZmluZSB3YWRkc3RyIFVOREVGKHdhZGRzdHIpCisjZW5kaWYKKworI2lmZGVmIHdhdHRyb2ZmCitpbmxpbmUgaW50IFVOREVGKHdhdHRyb2ZmKShXSU5ET1cgKndpbiwgaW50IGF0dCkgeyByZXR1cm4gd2F0dHJvZmYod2luLCBhdHQpOyB9CisjdW5kZWYgd2F0dHJvZmYKKyNkZWZpbmUgd2F0dHJvZmYgVU5ERUYod2F0dHJvZmYpCisjZW5kaWYKKworI2lmZGVmIHdhdHRyc2V0CitpbmxpbmUgaW50IFVOREVGKHdhdHRyc2V0KShXSU5ET1cgKndpbiwgaW50IGF0dCkgeyByZXR1cm4gd2F0dHJzZXQod2luLCBhdHQpOyB9CisjdW5kZWYgd2F0dHJzZXQKKyNkZWZpbmUgd2F0dHJzZXQgVU5ERUYod2F0dHJzZXQpCisjZW5kaWYKKworI2lmZGVmIHdpbmNoCitpbmxpbmUgY2h0eXBlIFVOREVGKHdpbmNoKShjb25zdCBXSU5ET1cqIHdpbikgeyByZXR1cm4gd2luY2god2luKTsgfQorI3VuZGVmIHdpbmNoCisjZGVmaW5lIHdpbmNoIFVOREVGKHdpbmNoKQorI2VuZGlmCisKKyNpZmRlZiB3aW5jaG5zdHIKK2lubGluZSBpbnQgVU5ERUYod2luY2huc3RyKShXSU5ET1cgKndpbiwgY2h0eXBlICpzdHIsIGludCBuKSAgeyByZXR1cm4gd2luY2huc3RyKHdpbiwgc3RyLCBuKTsgfQorI3VuZGVmIHdpbmNobnN0cgorI2RlZmluZSB3aW5jaG5zdHIgVU5ERUYod2luY2huc3RyKQorI2VuZGlmCisKKyNpZmRlZiB3aW5jaHN0cgoraW5saW5lIGludCBVTkRFRih3aW5jaHN0cikoV0lORE9XICp3aW4sIGNodHlwZSAqc3RyKSAgeyByZXR1cm4gd2luY2hzdHIod2luLCBzdHIpOyB9CisjdW5kZWYgd2luY2hzdHIKKyNkZWZpbmUgd2luY2hzdHIgVU5ERUYod2luY2hzdHIpCisjZW5kaWYKKworI2lmZGVmIHdpbnNzdHIKK2lubGluZSBpbnQgVU5ERUYod2luc3N0cikoV0lORE9XICp3LCBjb25zdCBjaGFyICpfc3RyKSAgeworICByZXR1cm4gd2luc3N0cih3LCBfc3RyKTsgfQorI3VuZGVmIHdpbnNzdHIKKyNkZWZpbmUgd2luc3N0ciBVTkRFRih3aW5zc3RyKQorI2VuZGlmCisKKyNpZmRlZiB3c3RhbmRlbmQKK2lubGluZSBpbnQgVU5ERUYod3N0YW5kZW5kKShXSU5ET1cgKndpbikgIHsgcmV0dXJuIHdzdGFuZGVuZCh3aW4pOyB9CisjdW5kZWYgd3N0YW5kZW5kCisjZGVmaW5lIHdzdGFuZGVuZCBVTkRFRih3c3RhbmRlbmQpCisjZW5kaWYKKworI2lmZGVmIHdzdGFuZG91dAoraW5saW5lIGludCBVTkRFRih3c3RhbmRvdXQpKFdJTkRPVyAqd2luKSAgeyByZXR1cm4gd3N0YW5kb3V0KHdpbik7IH0KKyN1bmRlZiB3c3RhbmRvdXQKKyNkZWZpbmUgd3N0YW5kb3V0IFVOREVGKHdzdGFuZG91dCkKKyNlbmRpZgorCisvKgorICoKKyAqIEMrKyBjbGFzcyBmb3Igd2luZG93cy4KKyAqCisgKi8KKworZXh0ZXJuICJDIiBpbnQgICAgIF9uY19yaXBvZmZsaW5lKGludCwgaW50ICgqaW5pdCkoV0lORE9XKiwgaW50KSk7CitleHRlcm4gIkMiIGludCAgICAgX25jX3h4X3JpcG9mZl9pbml0KFdJTkRPVyAqLCBpbnQpOworZXh0ZXJuICJDIiBpbnQgICAgIF9uY19oYXNfbW91c2Uodm9pZCk7CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNXaW5kb3cKK3sKKyAgZnJpZW5kIGNsYXNzIE5DdXJzZXNNZW51OworICBmcmllbmQgY2xhc3MgTkN1cnNlc0Zvcm07CisKK3ByaXZhdGU6CisgIHN0YXRpYyBib29sICAgIGJfaW5pdGlhbGl6ZWQ7CisgIHN0YXRpYyB2b2lkICAgIGluaXRpYWxpemUoKTsKKyAgdm9pZCAgICAgICAgICAgY29uc3RydWN0aW5nKCk7CisgIGZyaWVuZCBpbnQgICAgIF9uY194eF9yaXBvZmZfaW5pdChXSU5ET1cgKiwgaW50KTsKKworICB2b2lkICAgICAgICAgICBzZXRfa2V5Ym9hcmQoKTsKKworICBzaG9ydCAgICAgICAgICBnZXRjb2xvcihpbnQgZ2V0YmFjaykgY29uc3Q7CisgIHNob3J0ICAgICAgICAgIGdldFBhaXIoKSBjb25zdDsKKworICBzdGF0aWMgaW50ICAgICBzZXRwYWxldHRlKHNob3J0IGZvcmUsIHNob3J0IGJhY2ssIHNob3J0IHBhaXIpOworICBzdGF0aWMgaW50ICAgICBjb2xvckluaXRpYWxpemVkOworCisgIC8vIFRoaXMgcHJpdmF0ZSBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbgorICAvLyBvZiB3aW5kb3dzIGdlbmVyYXRlZCBieSByaXBvZmZsaW5lKCkgY2FsbHMuCisgIE5DdXJzZXNXaW5kb3coV0lORE9XKiB3aW4sIGludCBuY29scyk7CisKK3Byb3RlY3RlZDoKKyAgdmlydHVhbCB2b2lkICAgZXJyX2hhbmRsZXIoY29uc3QgY2hhciAqKSBjb25zdCBUSFJPV1MoTkN1cnNlc0V4Y2VwdGlvbik7CisgIC8vIFNpZ25hbCBhbiBlcnJvciB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlIHRleHQuCisKKyAgc3RhdGljIGxvbmcgY291bnQ7ICAgICAgICAvLyBjb3VudCBvZiBhbGwgYWN0aXZlIHdpbmRvd3M6CisgIC8vICAgV2UgcmVseSBvbiB0aGUgYysrIHByb21pc2UgdGhhdAorICAvLyAgIGFsbCBvdGhlcndpc2UgdW5pbml0aWFsaXplZAorICAvLyAgIHN0YXRpYyBjbGFzcyB2YXJzIGFyZSBzZXQgdG8gMAorCisgIFdJTkRPVyogICAgICAgIHc7ICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJzZXMgV0lORE9XCisKKyAgYm9vbCAgICAgICAgICAgYWxsb2NlZDsgICAgICAgICAgLy8gVFJVRSBpZiB3ZSBvd24gdGhlIFdJTkRPVworCisgIE5DdXJzZXNXaW5kb3cqIHBhcjsgICAgICAgICAgICAgIC8vIHBhcmVudCwgaWYgc3Vid2luZG93CisgIE5DdXJzZXNXaW5kb3cqIHN1YndpbnM7ICAgICAgICAgIC8vIGhlYWQgb2Ygc3Vid2luZG93cyBsaXN0CisgIE5DdXJzZXNXaW5kb3cqIHNpYjsgICAgICAgICAgICAgIC8vIG5leHQgc3Vid2luZG93IG9mIHBhcmVudAorCisgIHZvaWQgICAgICAgICAgIGtpbGxfc3Vid2luZG93cygpOyAvLyBkaXNhYmxlIGFsbCBzdWJ3aW5kb3dzCisgIC8vIERlc3Ryb3kgYWxsIHN1YndpbmRvd3MuCisKKyAgLyogT25seSBmb3IgdXNlIGJ5IGRlcml2ZWQgY2xhc3Nlcy4gVGhleSBhcmUgdGhlbiBpbiBjaGFyZ2UgdG8KKyAgICAgZmlsbCB0aGUgbWVtYmVyIHZhcmlhYmxlcyBjb3JyZWN0bHkuICovCisgIE5DdXJzZXNXaW5kb3coKTsKKworcHVibGljOgorICBOQ3Vyc2VzV2luZG93KFdJTkRPVyogd2luZG93KTsgICAvLyB1c2VmdWwgb25seSBmb3Igc3Rkc2NyCisKKyAgTkN1cnNlc1dpbmRvdyhpbnQgbmxpbmVzLCAgICAgICAgLy8gbnVtYmVyIG9mIGxpbmVzCisJCWludCBuY29scywgICAgICAgICAvLyBudW1iZXIgb2YgY29sdW1ucworCQlpbnQgYmVnaW5feSwgICAgICAgLy8gbGluZSBvcmlnaW4KKwkJaW50IGJlZ2luX3gpOyAgICAgIC8vIGNvbCBvcmlnaW4KKworICBOQ3Vyc2VzV2luZG93KE5DdXJzZXNXaW5kb3cmIHBhciwvLyBwYXJlbnQgd2luZG93CisJCWludCBubGluZXMsICAgICAgICAvLyBudW1iZXIgb2YgbGluZXMKKwkJaW50IG5jb2xzLCAgICAgICAgIC8vIG51bWJlciBvZiBjb2x1bW5zCisJCWludCBiZWdpbl95LCAgICAgICAvLyBhYnNvbHV0ZSBvciByZWxhdGl2ZQorCQlpbnQgYmVnaW5feCwgICAgICAgLy8gICBvcmlnaW5zOgorCQljaGFyIGFic3JlbCA9ICdhJyk7Ly8gaWYgYGEnLCBiZWdpbl95ICYgYmVnaW5feCBhcmUKKyAgLy8gYWJzb2x1dGUgc2NyZWVuIHBvcywgZWxzZSBpZiBgcicsIHRoZXkgYXJlIHJlbGF0aXZlIHRvIHBhciBvcmlnaW4KKworICBOQ3Vyc2VzV2luZG93KE5DdXJzZXNXaW5kb3cmIHBhciwvLyBwYXJlbnQgd2luZG93CisJCWJvb2wgZG9fYm94ID0gVFJVRSk7CisgIC8vIHRoaXMgaXMgdGhlIHZlcnkgY29tbW9uIGNhc2UgdGhhdCB3ZSB3YW50IHRvIGNyZWF0ZSB0aGUgc3Vid2luZG93IHRoYXQKKyAgLy8gaXMgdHdvIGxpbmVzIGFuZCB0d28gY29sdW1ucyBzbWFsbGVyIGFuZCBiZWdpbnMgYXQgKDEsMSkuCisgIC8vIFdlIG1heSBhdXRvbWF0aWNhbGx5IHJlcXVlc3QgdGhlIGJveCBhcm91bmQgaXQuCisKKyAgTkN1cnNlc1dpbmRvdyYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNXaW5kb3cmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpCisgICAgICAqdGhpcyA9IHJoczsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzV2luZG93KGNvbnN0IE5DdXJzZXNXaW5kb3cmIHJocykKKyAgICA6IHcocmhzLncpLCBhbGxvY2VkKHJocy5hbGxvY2VkKSwgcGFyKHJocy5wYXIpLCBzdWJ3aW5zKHJocy5zdWJ3aW5zKSwgc2liKHJocy5zaWIpCisgIHsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNXaW5kb3coKTsKKworICBOQ3Vyc2VzV2luZG93IENsb25lKCk7CisgIC8vIE1ha2UgYW4gZXhhY3QgY29weSBvZiB0aGUgd2luZG93LgorCisgIC8vIEluaXRpYWxpemF0aW9uLgorICBzdGF0aWMgdm9pZCAgICB1c2VDb2xvcnModm9pZCk7CisgIC8vIENhbGwgdGhpcyByb3V0aW5lIHZlcnkgZWFybHkgaWYgeW91IHdhbnQgdG8gaGF2ZSBjb2xvcnMuCisKKyAgc3RhdGljIGludCByaXBvZmZsaW5lKGludCByaXBvZmZfbGluZXMsCisJCQlpbnQgKCppbml0KShOQ3Vyc2VzV2luZG93JiB3aW4pKTsKKyAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgd2luZG93IG9mIHJpcHBlZC1vZiBsaW5lcy4KKyAgLy8gSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBsaW5lcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB0b3AsIGlmIGl0CisgIC8vIGlzIG5lZ2F0aXZlIGxpbmVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGJvdHRvbS4gVGhpcyBlbmhhbmNlcyB0aGUKKyAgLy8gbG93bGV2ZWwgcmlwb2ZmbGluZSgpIGZ1bmN0aW9uIGJlY2F1c2UgaXQgdXNlcyB0aGUgaW50ZXJuYWwKKyAgLy8gaW1wbGVtZW50YXRpb24gdGhhdCBhbGxvd3MgdG8gcmVtb3ZlIG1vcmUgdGhhbiBqdXN0IGEgc2luZ2xlIGxpbmUuCisgIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBuY3Vyc2VzIGZ1bmN0aW9uLiBUaGUKKyAgLy8gY3JlYXRpb24gb2YgdGhlIHdpbmRvdyBpcyBkZWZlcnJlZCB1bnRpbCBuY3Vyc2VzIGdldHMgaW5pdGlhbGl6ZWQuCisgIC8vIFRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB0aGVuIGNhbGxlZC4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIHRlcm1pbmFsIHN0YXR1cworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIGxpbmVzKCkgY29uc3QgeyBpbml0aWFsaXplKCk7IHJldHVybiBMSU5FUzsgfQorICAvLyBOdW1iZXIgb2YgbGluZXMgb24gdGVybWluYWwsICpub3QqIHdpbmRvdworCisgIGludCAgICAgICAgICAgIGNvbHMoKSBjb25zdCB7IGluaXRpYWxpemUoKTsgcmV0dXJuIENPTFM7IH0KKyAgLy8gTnVtYmVyIG9mIGNvbHMgIG9uIHRlcm1pbmFsLCAqbm90KiB3aW5kb3cKKworICBpbnQgICAgICAgICAgICB0YWJzaXplKCkgY29uc3QgeyBpbml0aWFsaXplKCk7IHJldHVybiBUQUJTSVpFOyB9CisgIC8vIFNpemUgb2YgYSB0YWIgb24gdGVybWluYWwsICpub3QqIHdpbmRvdworCisgIHN0YXRpYyBpbnQgICAgIE51bWJlck9mQ29sb3JzKCk7CisgIC8vIE51bWJlciBvZiBhdmFpbGFibGUgY29sb3JzCisKKyAgaW50ICAgICAgICAgICAgY29sb3JzKCkgY29uc3QgeyByZXR1cm4gTnVtYmVyT2ZDb2xvcnMoKTsgfQorICAvLyBOdW1iZXIgb2YgYXZhaWxhYmxlIGNvbG9ycworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gd2luZG93IHN0YXR1cworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1heHkoKSArIDE7IH0KKyAgLy8gTnVtYmVyIG9mIGxpbmVzIGluIHRoaXMgd2luZG93CisKKyAgaW50ICAgICAgICAgICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtYXh4KCkgKyAxOyB9CisgIC8vIE51bWJlciBvZiBjb2x1bW5zIGluIHRoaXMgd2luZG93CisKKyAgaW50ICAgICAgICAgICAgYmVneCgpIGNvbnN0IHsgcmV0dXJuIGdldGJlZ3godyk7IH0KKyAgLy8gQ29sdW1uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSB0byBzdGRzY3IKKworICBpbnQgICAgICAgICAgICBiZWd5KCkgY29uc3QgeyByZXR1cm4gZ2V0YmVneSh3KTsgfQorICAvLyBMaW5lIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSB0byBzdGRzY3IKKworICBpbnQgICAgICAgICAgICBjdXJ4KCkgY29uc3QgeyByZXR1cm4gZ2V0Y3VyeCh3KTsgfQorICAvLyBDb2x1bW4gb2YgdG9wIGxlZnQgY29ybmVyIHJlbGF0aXZlIHRvIHN0ZHNjcgorCisgIGludCAgICAgICAgICAgIGN1cnkoKSBjb25zdCB7IHJldHVybiBnZXRjdXJ5KHcpOyB9CisgIC8vIExpbmUgb2YgdG9wIGxlZnQgY29ybmVyIHJlbGF0aXZlIHRvIHN0ZHNjcgorCisgIGludCAgICAgICAgICAgIG1heHgoKSBjb25zdCB7IHJldHVybiBnZXRtYXh4KHcpID09IEVSUiA/IEVSUiA6IGdldG1heHgodyktMTsgfQorICAvLyBMYXJnZXN0IHggY29vcmQgaW4gd2luZG93CisKKyAgaW50ICAgICAgICAgICAgbWF4eSgpIGNvbnN0IHsgcmV0dXJuIGdldG1heHkodykgPT0gRVJSID8gRVJSIDogZ2V0bWF4eSh3KS0xOyB9CisgIC8vIExhcmdlc3QgeSBjb29yZCBpbiB3aW5kb3cKKworICBzaG9ydCAgICAgICAgICBnZXRjb2xvcigpIGNvbnN0OworICAvLyBBY3R1YWwgY29sb3IgcGFpcgorCisgIHNob3J0ICAgICAgICAgIGZvcmVncm91bmQoKSBjb25zdCB7IHJldHVybiBnZXRjb2xvcigwKTsgfQorICAvLyBBY3R1YWwgZm9yZWdyb3VuZCBjb2xvcgorCisgIHNob3J0ICAgICAgICAgIGJhY2tncm91bmQoKSBjb25zdCB7IHJldHVybiBnZXRjb2xvcigxKTsgfQorICAvLyBBY3R1YWwgYmFja2dyb3VuZCBjb2xvcgorCisgIGludCAgICAgICAgICAgIHNldHBhbGV0dGUoc2hvcnQgZm9yZSwgc2hvcnQgYmFjayk7CisgIC8vIFNldCBjb2xvciBwYWxldHRlIGVudHJ5CisKKyAgaW50ICAgICAgICAgICAgc2V0Y29sb3Ioc2hvcnQgcGFpcik7CisgIC8vIFNldCBhY3R1YWxseSB1c2VkIHBhbGV0dGUgZW50cnkKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIHdpbmRvdyBwb3NpdGlvbmluZworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHZpcnR1YWwgaW50ICAgIG12d2luKGludCBiZWdpbl95LCBpbnQgYmVnaW5feCkgeworICAgIHJldHVybiA6Om12d2luKHcsIGJlZ2luX3ksIGJlZ2luX3gpOyB9CisgIC8vIE1vdmUgd2luZG93IHRvIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBuZXcgcG9zaXRpb24gYXMgdG9wIGxlZnQgY29ybmVyLgorICAvLyBUaGlzIGlzIHZpcnR1YWwgYmVjYXVzZSBpdCBpcyByZWRlZmluZWQgaW4gTkN1cnNlc1BhbmVsLgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gY29vcmRpbmF0ZSBwb3NpdGlvbmluZworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIG1vdmUoaW50IHksIGludCB4KSB7IHJldHVybiA6Ondtb3ZlKHcsIHksIHgpOyB9CisgIC8vIE1vdmUgY3Vyc29yIHRoZSB0aGlzIHBvc2l0aW9uCisKKyAgdm9pZCAgICAgICAgICAgZ2V0eXgoaW50JiB5LCBpbnQmIHgpIGNvbnN0IHsgOjpnZXR5eCh3LCB5LCB4KTsgfQorICAvLyBHZXQgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yCisKKyAgdm9pZCAgICAgICAgICAgZ2V0YmVneXgoaW50JiB5LCBpbnQmIHgpIGNvbnN0IHsgOjpnZXRiZWd5eCh3LCB5LCB4KTsgfQorICAvLyBHZXQgYmVnaW5uaW5nIG9mIHRoZSB3aW5kb3cKKworICB2b2lkICAgICAgICAgICBnZXRtYXh5eChpbnQmIHksIGludCYgeCkgY29uc3QgeyA6OmdldG1heHl4KHcsIHksIHgpOyB9CisgIC8vIEdldCBzaXplIG9mIHRoZSB3aW5kb3cKKworICB2b2lkICAgICAgICAgICBnZXRwYXJ5eChpbnQmIHksIGludCYgeCkgY29uc3QgeyA6OmdldHBhcnl4KHcsIHksIHgpOyB9CisgIC8vIEdldCBwYXJlbnQncyBiZWdpbm5pbmcgb2YgdGhlIHdpbmRvdworCisgIGludCAgICAgICAgICAgIG12Y3VyKGludCBvbGRyb3csIGludCBvbGRjb2wsIGludCBuZXdyb3csIGludCBuZXdjb2wpIGNvbnN0IHsKKyAgICByZXR1cm4gOjptdmN1cihvbGRyb3csIG9sZGNvbCwgbmV3cm93LCBuZXdjb2wpOyB9CisgIC8vIFBlcmZvcm0gbG93bGV2ZWwgY3Vyc29yIG1vdGlvbiB0aGF0IHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseS4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGlucHV0CisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgZ2V0Y2goKSB7IHJldHVybiA6OndnZXRjaCh3KTsgfQorICAvLyBHZXQgYSBrZXlzdHJva2UgZnJvbSB0aGUgd2luZG93LgorCisgIGludCAgICAgICAgICAgIGdldGNoKGludCB5LCBpbnQgeCkgeyByZXR1cm4gOjptdndnZXRjaCh3LCB5LCB4KTsgfQorICAvLyBNb3ZlIGN1cnNvciB0byBwb3NpdGlvbiBhbmQgZ2V0IGEga2V5c3Ryb2tlIGZyb20gdGhlIHdpbmRvdworCisgIGludCAgICAgICAgICAgIGdldHN0cihjaGFyKiBzdHIsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6d2dldG5zdHIodywgc3RyLCBuKTsgfQorICAvLyBSZWFkIGEgc2VyaWVzIG9mIGNoYXJhY3RlcnMgaW50byBzdHIgdW50aWwgYSBuZXdsaW5lIG9yIGNhcnJpYWdlIHJldHVybgorICAvLyBpcyByZWNlaXZlZC4gUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycy4gSWYgbiBpcyBuZWdhdGl2ZSwgdGhlIGxpbWl0IGlzCisgIC8vIGlnbm9yZWQuCisKKyAgaW50ICAgICAgICAgICAgZ2V0c3RyKGludCB5LCBpbnQgeCwgY2hhciogc3RyLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6Om12d2dldG5zdHIodywgeSwgeCwgc3RyLCBuKTsgfQorICAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBwZXJmb3JtIHRoZSBnZXRzdHIoKQorICAvLyBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgaW50ICAgICAgICAgICAgaW5zdHIoY2hhciAqcywgaW50IG49LTEpIHsgcmV0dXJuIDo6d2lubnN0cih3LCBzLCBuKTsgfQorICAvLyBHZXQgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSB3aW5kb3cgaW50byB0aGUgYnVmZmVyIHMuIFJldHJpZXZlCisgIC8vIGF0IG1vc3QgbiBjaGFyYWN0ZXJzLCBpZiBuIGlzIG5lZ2F0aXZlIHJldHJpZXZlIGFsbCBjaGFyYWN0ZXJzIHVwIHRvIHRoZQorICAvLyBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4gQXR0cmlidXRlcyBhcmUgc3RyaXBwZWQgZnJvbSB0aGUgY2hhcmFjdGVycy4KKworICBpbnQgICAgICAgICAgICBpbnN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnMsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6bXZ3aW5uc3RyKHcsIHksIHgsIHMsIG4pOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gdGhlIGluc3RyKCkKKyAgLy8gYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgIGludCAgICAgICAgICAgIHNjYW53KGNvbnN0IGNoYXIqIGZtdCwgLi4uKQorICAgIC8vIFBlcmZvcm0gYSBzY2FudyBmdW5jdGlvbiBmcm9tIHRoZSB3aW5kb3cuCisjaWYgX19HTlVHX18gPj0gMgorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHNjYW5mLCAyLCAzKSkpOworI2Vsc2UKKyAgOworI2VuZGlmCisKKyAgaW50ICAgICAgICAgICAgc2NhbncoY29uc3QgY2hhciosIHZhX2xpc3QpOworICAgIC8vIFBlcmZvcm0gYSBzY2FudyBmdW5jdGlvbiBmcm9tIHRoZSB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgc2NhbncoaW50IHksIGludCB4LCBjb25zdCBjaGFyKiBmbXQsIC4uLikKKyAgICAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBwZXJmb3JtIGEgc2NhbncKKyAgICAvLyBmcm9tIHRoZSB3aW5kb3cuCisjaWYgX19HTlVHX18gPj0gMgorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHNjYW5mLCA0LCA1KSkpOworI2Vsc2UKKyAgOworI2VuZGlmCisKKyAgaW50ICAgICAgICAgICAgc2NhbncoaW50IHksIGludCB4LCBjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QpOworICAgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gYSBzY2FudworICAgIC8vIGZyb20gdGhlIHdpbmRvdy4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIG91dHB1dAorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIGFkZGNoKGNvbnN0IGNodHlwZSBjaCkgeyByZXR1cm4gOjp3YWRkY2godywgY2gpOyB9CisgIC8vIFB1dCBhdHRyaWJ1dGVkIGNoYXJhY3RlciB0byB0aGUgd2luZG93LgorCisgIGludCAgICAgICAgICAgIGFkZGNoKGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlIGNoKSB7CisgICAgcmV0dXJuIDo6bXZ3YWRkY2godywgeSwgeCwgY2gpOyB9CisgIC8vIE1vdmUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcHV0IGF0dHJpYnV0ZWQgY2hhcmFjdGVyCisgIC8vIHRvIHRoZSB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgZWNob2NoYXIoY29uc3QgY2h0eXBlIGNoKSB7IHJldHVybiA6OndlY2hvY2hhcih3LCBjaCk7IH0KKyAgLy8gUHV0IGF0dHJpYnV0ZWQgY2hhcmFjdGVyIHRvIHRoZSB3aW5kb3cgYW5kIHJlZnJlc2ggaXQgaW1tZWRpYXRlbHkuCisKKyAgaW50ICAgICAgICAgICAgYWRkc3RyKGNvbnN0IGNoYXIqIHN0ciwgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjp3YWRkbnN0cih3LCBzdHIsIG4pOyB9CisgIC8vIFdyaXRlIHRoZSBzdHJpbmcgc3RyIHRvIHRoZSB3aW5kb3csIHN0b3Agd3JpdGluZyBpZiB0aGUgdGVybWluYXRpbmcKKyAgLy8gTlVMIG9yIHRoZSBsaW1pdCBuIGlzIHJlYWNoZWQuIElmIG4gaXMgbmVnYXRpdmUsIGl0IGlzIGlnbm9yZWQuCisKKyAgaW50ICAgICAgICAgICAgYWRkc3RyKGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqIHN0ciwgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjptdndhZGRuc3RyKHcsIHksIHgsIHN0ciwgbik7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSB0aGUgYWRkY2hzdHIKKyAgLy8gYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgIGludCAgICAgICAgICAgIGFkZGNoc3RyKGNvbnN0IGNodHlwZSogc3RyLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6OndhZGRjaG5zdHIodywgc3RyLCBuKTsgfQorICAvLyBXcml0ZSB0aGUgc3RyaW5nIHN0ciB0byB0aGUgd2luZG93LCBzdG9wIHdyaXRpbmcgaWYgdGhlIHRlcm1pbmF0aW5nCisgIC8vIE5VTCBvciB0aGUgbGltaXQgbiBpcyByZWFjaGVkLiBJZiBuIGlzIG5lZ2F0aXZlLCBpdCBpcyBpZ25vcmVkLgorCisgIGludCAgICAgICAgICAgIGFkZGNoc3RyKGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICogc3RyLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6Om12d2FkZGNobnN0cih3LCB5LCB4LCBzdHIsIG4pOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gdGhlIGFkZGNoc3RyCisgIC8vIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICBpbnQgICAgICAgICAgICBwcmludHcoY29uc3QgY2hhciogZm10LCAuLi4pCisgICAgLy8gRG8gYSBmb3JtYXR0ZWQgcHJpbnQgdG8gdGhlIHdpbmRvdy4KKyNpZiAoX19HTlVHX18gPj0gMikgJiYgIWRlZmluZWQocHJpbnRmKQorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKyNlbHNlCisgIDsKKyNlbmRpZgorCisgIGludCAgICAgICAgICAgIHByaW50dyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKKyAgICAvLyBNb3ZlIHRoZSBjdXJzb3IgYW5kIHRoZW4gZG8gYSBmb3JtYXR0ZWQgcHJpbnQgdG8gdGhlIHdpbmRvdy4KKyNpZiAoX19HTlVHX18gPj0gMikgJiYgIWRlZmluZWQocHJpbnRmKQorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKTsKKyNlbHNlCisgIDsKKyNlbmRpZgorCisgIGludCAgICAgICAgICAgIHByaW50dyhjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXJncyk7CisgICAgLy8gRG8gYSBmb3JtYXR0ZWQgcHJpbnQgdG8gdGhlIHdpbmRvdy4KKworICBpbnQgICAgICAgICAgICBwcmludHcoaW50IHksIGludCB4LCBjb25zdCBjaGFyICogZm10LCB2YV9saXN0IGFyZ3MpOworICAgIC8vIE1vdmUgdGhlIGN1cnNvciBhbmQgdGhlbiBkbyBhIGZvcm1hdHRlZCBwcmludCB0byB0aGUgd2luZG93LgorCisgIGNodHlwZSAgICAgICAgIGluY2goKSBjb25zdCB7IHJldHVybiA6OndpbmNoKHcpOyB9CisgIC8vIFJldHJpZXZlIGF0dHJpYnV0ZWQgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKworICBjaHR5cGUgICAgICAgICBpbmNoKGludCB5LCBpbnQgeCkgeyByZXR1cm4gOjptdndpbmNoKHcsIHksIHgpOyB9CisgIC8vIE1vdmUgY3Vyc29yIHRvIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiByZXRyaWV2ZSBhdHRyaWJ1dGVkIGNoYXJhY3RlcgorICAvLyBhdCB0aGlzIHBvc2l0aW9uLgorCisgIGludCAgICAgICAgICAgIGluY2hzdHIoY2h0eXBlKiBzdHIsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6d2luY2huc3RyKHcsIHN0ciwgbik7IH0KKyAgLy8gUmVhZCB0aGUgc3RyaW5nIHN0ciBmcm9tIHRoZSB3aW5kb3csIHN0b3AgcmVhZGluZyBpZiB0aGUgdGVybWluYXRpbmcKKyAgLy8gTlVMIG9yIHRoZSBsaW1pdCBuIGlzIHJlYWNoZWQuIElmIG4gaXMgbmVnYXRpdmUsIGl0IGlzIGlnbm9yZWQuCisKKyAgaW50ICAgICAgICAgICAgaW5jaHN0cihpbnQgeSwgaW50IHgsIGNodHlwZSAqIHN0ciwgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjptdndpbmNobnN0cih3LCB5LCB4LCBzdHIsIG4pOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gdGhlIGluY2hzdHIKKyAgLy8gYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgIGludCAgICAgICAgICAgIGluc2NoKGNodHlwZSBjaCkgeyByZXR1cm4gOjp3aW5zY2godywgY2gpOyB9CisgIC8vIEluc2VydCBhdHRyaWJ1dGVkIGNoYXJhY3RlciBpbnRvIHRoZSB3aW5kb3cgYmVmb3JlIGN1cnJlbnQgY3Vyc29yCisgIC8vIHBvc2l0aW9uLgorCisgIGludCAgICAgICAgICAgIGluc2NoKGludCB5LCBpbnQgeCwgY2h0eXBlIGNoKSB7CisgICAgcmV0dXJuIDo6bXZ3aW5zY2godywgeSwgeCwgY2gpOyB9CisgIC8vIE1vdmUgY3Vyc29yIHRvIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBpbnNlcnQgdGhlIGF0dHJpYnV0ZWQKKyAgLy8gY2hhcmFjdGVyIGJlZm9yZSB0aGF0IHBvc2l0aW9uLgorCisgIGludCAgICAgICAgICAgIGluc2VydGxuKCkgeyByZXR1cm4gOjp3aW5zZGVsbG4odywgMSk7IH0KKyAgLy8gSW5zZXJ0IGFuIGVtcHR5IGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKworICBpbnQgICAgICAgICAgICBpbnNkZWxsbihpbnQgbj0xKSB7IHJldHVybiA6OndpbnNkZWxsbih3LCBuKTsgfQorICAvLyBJZiBuPjAgaW5zZXJ0IHRoYXQgbWFueSBsaW5lcyBhYm92ZSB0aGUgY3VycmVudCBsaW5lLiBJZiBuPDAgZGVsZXRlCisgIC8vIHRoYXQgbWFueSBsaW5lcyBiZWdpbm5pbmcgd2l0aCB0aGUgY3VycmVudCBsaW5lLgorCisgIGludCAgICAgICAgICAgIGluc3N0cihjb25zdCBjaGFyICpzLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6OndpbnNuc3RyKHcsIHMsIG4pOyB9CisgIC8vIEluc2VydCB0aGUgc3RyaW5nIGludG8gdGhlIHdpbmRvdyBiZWZvcmUgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorICAvLyBJbnNlcnQgc3RvcHMgYXQgZW5kIG9mIHN0cmluZyBvciB3aGVuIHRoZSBsaW1pdCBuIGlzIHJlYWNoZWQuIElmIG4gaXMKKyAgLy8gbmVnYXRpdmUsIGl0IGlzIGlnbm9yZWQuCisKKyAgaW50ICAgICAgICAgICAgaW5zc3RyKGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqcywgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjptdndpbnNuc3RyKHcsIHksIHgsIHMsIG4pOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gdGhlIGluc3N0cigpCisgIC8vIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICBpbnQgICAgICAgICAgICBhdHRyb24gKGNodHlwZSBhdCkgeyByZXR1cm4gOjp3YXR0cm9uICh3LCBhdCk7IH0KKyAgLy8gU3dpdGNoIG9uIHRoZSB3aW5kb3cgYXR0cmlidXRlczsKKworICBpbnQgICAgICAgICAgICBhdHRyb2ZmKGNodHlwZSBhdCkgeyByZXR1cm4gOjp3YXR0cm9mZih3LCBzdGF0aWNfY2FzdDxpbnQ+KGF0KSk7IH0KKyAgLy8gU3dpdGNoIG9mZiB0aGUgd2luZG93IGF0dHJpYnV0ZXM7CisKKyAgaW50ICAgICAgICAgICAgYXR0cnNldChjaHR5cGUgYXQpIHsgcmV0dXJuIDo6d2F0dHJzZXQodywgc3RhdGljX2Nhc3Q8aW50PihhdCkpOyB9CisgIC8vIFNldCB0aGUgd2luZG93IGF0dHJpYnV0ZXM7CisKKyAgY2h0eXBlICAgICAgICAgYXR0cmdldCgpIHsgcmV0dXJuIDo6Z2V0YXR0cnModyk7IH0KKyAgLy8gR2V0IHRoZSB3aW5kb3cgYXR0cmlidXRlczsKKworICBpbnQgICAgICAgICAgICBjb2xvcl9zZXQoc2hvcnQgY29sb3JfcGFpcl9udW1iZXIsIHZvaWQqIG9wdHM9TlVMTCkgeworICAgIHJldHVybiA6Ondjb2xvcl9zZXQodywgY29sb3JfcGFpcl9udW1iZXIsIG9wdHMpOyB9CisgIC8vIFNldCB0aGUgd2luZG93IGNvbG9yIGF0dHJpYnV0ZTsKKworICBpbnQgICAgICAgICAgICBjaGdhdChpbnQgbiwgYXR0cl90IGF0dHIsIHNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzPU5VTEwpIHsKKyAgICByZXR1cm4gOjp3Y2hnYXQodywgbiwgYXR0ciwgY29sb3IsIG9wdHMpOyB9CisgIC8vIENoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbmV4dCBuIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQgbGluZS4gSWYKKyAgLy8gbiBpcyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiByZW1haW5pbmcgY2hhcmFjdGVycyBpbiB0aGUKKyAgLy8gbGluZSwgdGhlIGF0dHJpYnV0ZXMgd2lsbCBiZSBjaGFuZ2VkIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKKyAgaW50ICAgICAgICAgICAgY2hnYXQoaW50IHksIGludCB4LAorCQkgICAgICAgaW50IG4sIGF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvciwgY29uc3Qgdm9pZCAqb3B0cz1OVUxMKSB7CisgICAgcmV0dXJuIDo6bXZ3Y2hnYXQodywgeSwgeCwgbiwgYXR0ciwgY29sb3IsIG9wdHMpOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gY2hnYXQoKSBhcworICAvLyBkZXNjcmliZWQgYWJvdmUuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBiYWNrZ3JvdW5kCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgY2h0eXBlICAgICAgICAgZ2V0YmtnZCgpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0YmtnZCh3KTsgfQorICAvLyBHZXQgY3VycmVudCBiYWNrZ3JvdW5kIHNldHRpbmcuCisKKyAgaW50ICAgICAgICAgICAgYmtnZChjb25zdCBjaHR5cGUgY2gpIHsgcmV0dXJuIDo6d2JrZ2QodywgY2gpOyB9CisgIC8vIFNldCB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eSBhbmQgYXBwbHkgaXQgdG8gdGhlIHdpbmRvdy4KKworICB2b2lkICAgICAgICAgICBia2dkc2V0KGNodHlwZSBjaCkgeyA6Ondia2dkc2V0KHcsIGNoKTsgfQorICAvLyBTZXQgdGhlIGJhY2tncm91bmQgcHJvcGVydHkuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBib3JkZXJzCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgYm94KGNodHlwZSB2ZXJ0PTAsIGNodHlwZSAgaG9yPTApIHsKKyAgICByZXR1cm4gOjp3Ym9yZGVyKHcsIHZlcnQsIHZlcnQsIGhvciwgaG9yLCAwLCAwLCAwLCAwKTsgfQorICAvLyBEcmF3IGEgYm94IGFyb3VuZCB0aGUgd2luZG93IHdpdGggdGhlIGdpdmVuIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsCisgIC8vIGRyYXdpbmcgY2hhcmFjdGVycy4gSWYgeW91IHNwZWNpZnkgYSB6ZXJvIGFzIGNoYXJhY3RlciwgY3Vyc2VzIHdpbGwgdHJ5CisgIC8vIHRvIGZpbmQgYSAibmljZSIgY2hhcmFjdGVyLgorCisgIGludCAgICAgICAgICAgIGJvcmRlcihjaHR5cGUgbGVmdD0wLCBjaHR5cGUgcmlnaHQ9MCwKKwkJCWNodHlwZSB0b3AgPTAsIGNodHlwZSBib3R0b209MCwKKwkJCWNodHlwZSB0b3BfbGVmdCA9MCwgY2h0eXBlIHRvcF9yaWdodD0wLAorCQkJY2h0eXBlIGJvdHRvbV9sZWZ0ID0wLCBjaHR5cGUgYm90dG9tX3JpZ2h0PTApIHsKKyAgICByZXR1cm4gOjp3Ym9yZGVyKHcsIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgdG9wX2xlZnQsIHRvcF9yaWdodCwKKwkJICAgICBib3R0b21fbGVmdCwgYm90dG9tX3JpZ2h0KTsgfQorICAvLyBEcmF3IGEgYm9yZGVyIGFyb3VuZCB0aGUgd2luZG93IHdpdGggdGhlIGdpdmVuIGNoYXJhY3RlcnMgZm9yIHRoZQorICAvLyB2YXJpb3VzIHBhcnRzIG9mIHRoZSBib3JkZXIuIElmIHlvdSBwYXNzIHplcm8gZm9yIGEgY2hhcmFjdGVyLCBjdXJzZXMKKyAgLy8gd2lsbCB0cnkgdG8gZmluZCAibmljZSIgY2hhcmFjdGVycy4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGxpbmVzIGFuZCBib3hlcworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIGhsaW5lKGludCBsZW4sIGNodHlwZSBjaD0wKSB7IHJldHVybiA6OndobGluZSh3LCBjaCwgbGVuKTsgfQorICAvLyBEcmF3IGEgaG9yaXpvbnRhbCBsaW5lIG9mIGxlbiBjaGFyYWN0ZXJzIHdpdGggdGhlIGdpdmVuIGNoYXJhY3Rlci4gSWYKKyAgLy8geW91IHBhc3MgemVybyBmb3IgdGhlIGNoYXJhY3RlciwgY3Vyc2VzIHdpbGwgdHJ5IHRvIGZpbmQgYSAibmljZSIgb25lLgorCisgIGludCAgICAgICAgICAgIGhsaW5lKGludCB5LCBpbnQgeCwgaW50IGxlbiwgY2h0eXBlIGNoPTApIHsKKyAgICByZXR1cm4gOjptdndobGluZSh3LCB5LCB4LCBjaCwgbGVuKTsgfQorICAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBkcmF3IGEgaG9yaXpvbnRhbCBsaW5lLgorCisgIGludCAgICAgICAgICAgIHZsaW5lKGludCBsZW4sIGNodHlwZSBjaD0wKSB7IHJldHVybiA6Ond2bGluZSh3LCBjaCwgbGVuKTsgfQorICAvLyBEcmF3IGEgdmVydGljYWwgbGluZSBvZiBsZW4gY2hhcmFjdGVycyB3aXRoIHRoZSBnaXZlbiBjaGFyYWN0ZXIuIElmCisgIC8vIHlvdSBwYXNzIHplcm8gZm9yIHRoZSBjaGFyYWN0ZXIsIGN1cnNlcyB3aWxsIHRyeSB0byBmaW5kIGEgIm5pY2UiIG9uZS4KKworICBpbnQgICAgICAgICAgICB2bGluZShpbnQgeSwgaW50IHgsIGludCBsZW4sIGNodHlwZSBjaD0wKSB7CisgICAgcmV0dXJuIDo6bXZ3dmxpbmUodywgeSwgeCwgY2gsIGxlbik7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gZHJhdyBhIHZlcnRpY2FsIGxpbmUuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBlcmFzdXJlCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgZXJhc2UoKSB7IHJldHVybiA6OndlcmFzZSh3KTsgfQorICAvLyBFcmFzZSB0aGUgd2luZG93LgorCisgIGludCAgICAgICAgICAgIGNsZWFyKCkgeyByZXR1cm4gOjp3Y2xlYXIodyk7IH0KKyAgLy8gQ2xlYXIgdGhlIHdpbmRvdy4KKworICBpbnQgICAgICAgICAgICBjbGVhcm9rKGJvb2wgYmYpIHsgcmV0dXJuIDo6Y2xlYXJvayh3LCBiZik7IH0KKyAgLy8gU2V0L1Jlc2V0IHRoZSBjbGVhciBmbGFnLiBJZiBzZXQsIHRoZSBuZXh0IHJlZnJlc2goKSB3aWxsIGNsZWFyIHRoZQorICAvLyBzY3JlZW4uCisKKyAgaW50ICAgICAgICAgICAgY2xydG9ib3QoKSB7IHJldHVybiA6OndjbHJ0b2JvdCh3KTsgfQorICAvLyBDbGVhciB0byB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgY2xydG9lb2woKSB7IHJldHVybiA6OndjbHJ0b2VvbCh3KTsgfQorICAvLyBDbGVhciB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCisgIGludCAgICAgICAgICAgIGRlbGNoKCkgeyByZXR1cm4gOjp3ZGVsY2godyk7IH0KKyAgLy8gRGVsZXRlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorCisgIGludCAgICAgICAgICAgIGRlbGNoKGludCB5LCBpbnQgeCkgeyByZXR1cm4gOjptdndkZWxjaCh3LCB5LCB4KTsgfQorICAvLyBNb3ZlIGN1cnNvciB0byByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZQorICAvLyBjdXJzb3IuCisKKyAgaW50ICAgICAgICAgICAgZGVsZXRlbG4oKSB7IHJldHVybiA6OndpbnNkZWxsbih3LCAtMSk7IH0KKyAgLy8gRGVsZXRlIHRoZSBjdXJyZW50IGxpbmUuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBzY3JlZW4gY29udHJvbAorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIHNjcm9sbChpbnQgYW1vdW50PTEpIHsgcmV0dXJuIDo6d3NjcmwodywgYW1vdW50KTsgfQorICAvLyBTY3JvbGwgYW1vdW50IGxpbmVzLiBJZiBhbW91bnQgaXMgcG9zaXRpdmUsIHNjcm9sbCB1cCwgb3RoZXJ3aXNlCisgIC8vIHNjcm9sbCBkb3duLgorCisgIGludCAgICAgICAgICAgIHNjcm9sbG9rKGJvb2wgYmYpIHsgcmV0dXJuIDo6c2Nyb2xsb2sodywgYmYpOyB9CisgIC8vIElmIGJmIGlzIFRSVUUsIHdpbmRvdyBzY3JvbGxzIGlmIGN1cnNvciBpcyBtb3ZlZCBvZmYgdGhlIGJvdHRvbQorICAvLyBlZGdlIG9mIHRoZSB3aW5kb3cgb3IgYSBzY3JvbGxpbmcgcmVnaW9uLCBvdGhlcndpc2UgdGhlIGN1cnNvciBpcyBsZWZ0CisgIC8vIGF0IHRoZSBib3R0b20gbGluZS4KKworICBpbnQgICAgICAgICAgICBzZXRzY3JyZWcoaW50IGZyb20sIGludCB0bykgeworICAgIHJldHVybiA6OndzZXRzY3JyZWcodywgZnJvbSwgdG8pOyB9CisgIC8vIERlZmluZSBhIHNvZnQgc2Nyb2xsaW5nIHJlZ2lvbi4KKworICBpbnQgICAgICAgICAgICBpZGxvayhib29sIGJmKSB7IHJldHVybiA6OmlkbG9rKHcsIGJmKTsgfQorICAvLyBJZiBiZiBpcyBUUlVFLCB1c2UgaW5zZXJ0L2RlbGV0ZSBsaW5lIGhhcmR3YXJlIHN1cHBvcnQgaWYgcG9zc2libGUuCisgIC8vIE90aGVyd2lzZSBkbyBpdCBpbiBzb2Z0d2FyZS4KKworICB2b2lkICAgICAgICAgICBpZGNvayhib29sIGJmKSB7IDo6aWRjb2sodywgYmYpOyB9CisgIC8vIElmIGJmIGlzIFRSVUUsIHVzZSBpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciBoYXJkd2FyZSBzdXBwb3J0IGlmIHBvc3NpYmxlLgorICAvLyBPdGhlcndpc2UgZG8gaXQgaW4gc29mdHdhcmUuCisKKyAgaW50ICAgICAgICAgICAgdG91Y2hsaW5lKGludCBzLCBpbnQgYykgeyByZXR1cm4gOjp0b3VjaGxpbmUodywgcywgYyk7IH0KKyAgLy8gTWFyayB0aGUgZ2l2ZW4gbGluZXMgYXMgbW9kaWZpZWQuCisKKyAgaW50ICAgICAgICAgICAgdG91Y2h3aW4oKSAgIHsgcmV0dXJuIDo6d3RvdWNobG4odywgMCwgaGVpZ2h0KCksIDEpOyB9CisgIC8vIE1hcmsgdGhlIHdob2xlIHdpbmRvdyBhcyBtb2RpZmllZC4KKworICBpbnQgICAgICAgICAgICB1bnRvdWNod2luKCkgeyByZXR1cm4gOjp3dG91Y2hsbih3LCAwLCBoZWlnaHQoKSwgMCk7IH0KKyAgLy8gTWFyayB0aGUgd2hvbGUgd2luZG93IGFzIHVubW9kaWZpZWQuCisKKyAgaW50ICAgICAgICAgICAgdG91Y2hsbihpbnQgcywgaW50IGNudCwgYm9vbCBjaGFuZ2VkPVRSVUUpIHsKKyAgICByZXR1cm4gOjp3dG91Y2hsbih3LCBzLCBjbnQsIHN0YXRpY19jYXN0PGludD4oY2hhbmdlZCA/IDEgOiAwKSk7IH0KKyAgLy8gTWFyayBjbnQgbGluZXMgYmVnaW5uaW5nIGZyb20gbGluZSBzIGFzIGNoYW5nZWQgb3IgdW5jaGFuZ2VkLCBkZXBlbmRpbmcKKyAgLy8gb24gdGhlIHZhbHVlIG9mIHRoZSBjaGFuZ2VkIGZsYWcuCisKKyAgYm9vbCAgICAgICAgICAgaXNfbGluZXRvdWNoZWQoaW50IGxpbmUpIGNvbnN0IHsKKyAgICByZXR1cm4gKDo6aXNfbGluZXRvdWNoZWQodywgbGluZSkgPyBUUlVFOkZBTFNFKTsgfQorICAvLyBSZXR1cm4gVFJVRSBpZiBsaW5lIGlzIG1hcmtlZCBhcyBjaGFuZ2VkLCBGQUxTRSBvdGhlcndpc2UKKworICBib29sICAgICAgICAgICBpc193aW50b3VjaGVkKCkgY29uc3QgeworICAgIHJldHVybiAoOjppc193aW50b3VjaGVkKHcpID8gVFJVRTpGQUxTRSk7IH0KKyAgLy8gUmV0dXJuIFRSVUUgaWYgd2luZG93IGlzIG1hcmtlZCBhcyBjaGFuZ2VkLCBGQUxTRSBvdGhlcndpc2UKKworICBpbnQgICAgICAgICAgICBsZWF2ZW9rKGJvb2wgYmYpIHsgcmV0dXJuIDo6bGVhdmVvayh3LCBiZik7IH0KKyAgLy8gSWYgYmYgaXMgVFJVRSwgY3Vyc2VzIHdpbGwgbGVhdmUgdGhlIGN1cnNvciBhZnRlciBhbiB1cGRhdGUgd2hlcmVldmVyCisgIC8vIGl0IGlzIGFmdGVyIHRoZSB1cGRhdGUuCisKKyAgaW50ICAgICAgICAgICAgcmVkcmF3bG4oaW50IGZyb20sIGludCBuKSB7IHJldHVybiA6OndyZWRyYXdsbih3LCBmcm9tLCBuKTsgfQorICAvLyBSZWRyYXcgbiBsaW5lcyBzdGFydGluZyBmcm9tIHRoZSByZXF1ZXN0ZWQgbGluZQorCisgIGludCAgICAgICAgICAgIHJlZHJhd3dpbigpIHsgcmV0dXJuIDo6d3JlZHJhd2xuKHcsIDAsIGhlaWdodCgpKTsgfQorICAvLyBSZWRyYXcgdGhlIHdob2xlIHdpbmRvdworCisgIGludCAgICAgICAgICAgIGRvdXBkYXRlKCkgIHsgcmV0dXJuIDo6ZG91cGRhdGUoKTsgfQorICAvLyBEbyBhbGwgb3V0cHV0cyB0byBtYWtlIHRoZSBwaHlzaWNhbCBzY3JlZW4gbG9va2luZyBsaWtlIHRoZSB2aXJ0dWFsIG9uZQorCisgIHZvaWQgICAgICAgICAgIHN5bmNkb3duKCkgIHsgOjp3c3luY2Rvd24odyk7IH0KKyAgLy8gUHJvcGFnYXRlIHRoZSBjaGFuZ2VzIGRvd24gdG8gYWxsIGRlc2NlbmRhbnQgd2luZG93cworCisgIHZvaWQgICAgICAgICAgIHN5bmN1cCgpICAgIHsgOjp3c3luY3VwKHcpOyB9CisgIC8vIFByb3BhZ2F0ZSB0aGUgY2hhbmdlcyB1cCBpbiB0aGUgaGllcmFyY2h5CisKKyAgdm9pZCAgICAgICAgICAgY3Vyc3luY3VwKCkgeyA6OndjdXJzeW5jdXAodyk7IH0KKyAgLy8gUG9zaXRpb24gdGhlIGN1cnNvciBpbiBhbGwgYW5jZXN0b3Igd2luZG93cyBjb3JyZXNwb25kaW5nIHRvIG91ciBzZXR0aW5nCisKKyAgaW50ICAgICAgICAgICAgc3luY29rKGJvb2wgYmYpIHsgcmV0dXJuIDo6c3luY29rKHcsIGJmKTsgfQorICAvLyBJZiBjYWxsZWQgd2l0aCBiZj1UUlVFLCBzeW5jdXAoKSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHdpbmRvdyBpcyBjaGFuZ2VkCisKKyNpZm5kZWYgX25vX2ZsdXNob2sKKyAgaW50ICAgICAgICAgICAgZmx1c2hvayhib29sIGJmKSB7IHJldHVybiA6OmZsdXNob2sodywgYmYpOyB9CisjZW5kaWYKKworICB2b2lkICAgICAgICAgICBpbW1lZG9rKGJvb2wgYmYpIHsgOjppbW1lZG9rKHcsIGJmKTsgfQorICAvLyBJZiBjYWxsZWQgd2l0aCBiZj1UUlVFLCBhbnkgY2hhbmdlIGluIHRoZSB3aW5kb3cgd2lsbCBjYXVzZSBhbgorICAvLyBhdXRvbWF0aWMgaW1tZWRpYXRlIHJlZnJlc2goKQorCisgIGludCAgICAgICAgICAgIGludHJmbHVzaChib29sIGJmKSB7IHJldHVybiA6OmludHJmbHVzaCh3LCBiZik7IH0KKworICBpbnQgICAgICAgICAgICBrZXlwYWQoYm9vbCBiZikgeyByZXR1cm4gOjprZXlwYWQodywgYmYpOyB9CisgIC8vIElmIGNhbGxlZCB3aXRoIGJmPVRSVUUsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGludGVycHJldCBmdW5jdGlvbiBrZXlzLgorCisgIGludCAgICAgICAgICAgIG5vZGVsYXkoYm9vbCBiZikgeyByZXR1cm4gOjpub2RlbGF5KHcsIGJmKTsgfQorCisgIGludCAgICAgICAgICAgIG1ldGEoYm9vbCBiZikgeyByZXR1cm4gOjptZXRhKHcsIGJmKTsgfQorICAvLyBJZiBjYWxsZWQgd2l0aCBiZj1UUlVFLCBrZXlzIG1heSBnZW5lcmF0ZSA4LUJpdCBjaGFyYWN0ZXJzLiBPdGhlcndpc2UKKyAgLy8gNy1CaXQgY2hhcmFjdGVycyBhcmUgZ2VuZXJhdGVkLgorCisgIGludCAgICAgICAgICAgIHN0YW5kb3V0KCkgeyByZXR1cm4gOjp3c3RhbmRvdXQodyk7IH0KKyAgLy8gRW5hYmxlICJzdGFuZG91dCIgYXR0cmlidXRlcworCisgIGludCAgICAgICAgICAgIHN0YW5kZW5kKCkgeyByZXR1cm4gOjp3c3RhbmRlbmQodyk7IH0KKyAgLy8gRGlzYWJsZSAic3RhbmRvdXQiIGF0dHJpYnV0ZXMKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIFRoZSBuZXh0IHR3byBhcmUgdmlydHVhbCwgYmVjYXVzZSB3ZSByZWRlZmluZSB0aGVtIGluIHRoZQorICAvLyBOQ3Vyc2VzUGFuZWwgY2xhc3MuCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgdmlydHVhbCBpbnQgICAgcmVmcmVzaCgpIHsgcmV0dXJuIDo6d3JlZnJlc2godyk7IH0KKyAgLy8gUHJvcGFnYXRlIHRoZSBjaGFuZ2VzIGluIHRoaXMgd2luZG93IHRvIHRoZSB2aXJ0dWFsIHNjcmVlbiBhbmQgY2FsbAorICAvLyBkb3VwZGF0ZSgpLiBUaGlzIGlzIHJlZGVmaW5lZCBpbiBOQ3Vyc2VzUGFuZWwuCisKKyAgdmlydHVhbCBpbnQgICAgbm91dHJlZnJlc2goKSB7IHJldHVybiA6Ondub3V0cmVmcmVzaCh3KTsgfQorICAvLyBQcm9wYWdhdGUgdGhlIGNoYW5nZXMgaW4gdGhpcyB3aW5kb3cgdG8gdGhlIHZpcnR1YWwgc2NyZWVuLiBUaGlzIGlzCisgIC8vIHJlZGVmaW5lZCBpbiBOQ3Vyc2VzUGFuZWwuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBtdWx0aXBsZSB3aW5kb3cgY29udHJvbAorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGludCAgICAgICAgICAgIG92ZXJsYXkoTkN1cnNlc1dpbmRvdyYgd2luKSB7CisgICAgcmV0dXJuIDo6b3ZlcmxheSh3LCB3aW4udyk7IH0KKyAgLy8gT3ZlcmxheSB0aGlzIHdpbmRvdyBvdmVyIHdpbi4KKworICBpbnQgICAgICAgICAgICBvdmVyd3JpdGUoTkN1cnNlc1dpbmRvdyYgd2luKSB7CisgICAgcmV0dXJuIDo6b3ZlcndyaXRlKHcsIHdpbi53KTsgfQorICAvLyBPdmVyd3JpdGUgd2luIHdpdGggdGhpcyB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgY29weXdpbihOQ3Vyc2VzV2luZG93JiB3aW4sCisJCQkgaW50IHNtaW5yb3csIGludCBzbWluY29sLAorCQkJIGludCBkbWlucm93LCBpbnQgZG1pbmNvbCwKKwkJCSBpbnQgZG1heHJvdywgaW50IGRtYXhjb2wsIGJvb2wgb3ZlcmxheXdpbj1UUlVFKSB7CisgICAgcmV0dXJuIDo6Y29weXdpbih3LCB3aW4udywgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwKKwkJICAgICBkbWF4cm93LCBkbWF4Y29sLCBzdGF0aWNfY2FzdDxpbnQ+KG92ZXJsYXl3aW4gPyAxIDogMCkpOyB9CisgIC8vIE92ZXJsYXkgb3Igb3ZlcndyaXRlIHRoZSByZWN0YW5nbGUgaW4gd2luIGdpdmVuIGJ5IGRtaW5yb3csZG1pbmNvbCwKKyAgLy8gZG1heHJvdyxkbWF4Y29sIHdpdGggdGhlIHJlY3RhbmdsZSBpbiB0aGlzIHdpbmRvdyBiZWdpbm5pbmcgYXQKKyAgLy8gc21pbnJvdyxzbWluY29sLgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gRXh0ZW5kZWQgZnVuY3Rpb25zCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZiBkZWZpbmVkKE5DVVJTRVNfRVhUX0ZVTkNTKSAmJiAoTkNVUlNFU19FWFRfRlVOQ1MgIT0gMCkKKyAgaW50ICAgICAgICAgICAgd3Jlc2l6ZShpbnQgbmV3TGluZXMsIGludCBuZXdDb2x1bW5zKSB7CisgICAgcmV0dXJuIDo6d3Jlc2l6ZSh3LCBuZXdMaW5lcywgbmV3Q29sdW1ucyk7IH0KKyNlbmRpZgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gTW91c2UgcmVsYXRlZAorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGJvb2wgaGFzX21vdXNlKCkgY29uc3Q7CisgIC8vIFJldHVybiBUUlVFIGlmIHRlcm1pbmFsIHN1cHBvcnRzIGEgbW91c2UsIEZBTFNFIG90aGVyd2lzZQorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gdHJhdmVyc2FsIHN1cHBvcnQKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBOQ3Vyc2VzV2luZG93KiAgY2hpbGQoKSB7IHJldHVybiBzdWJ3aW5zOyB9CisgIC8vIEdldCB0aGUgZmlyc3QgY2hpbGQgd2luZG93LgorCisgIE5DdXJzZXNXaW5kb3cqICBzaWJsaW5nKCkgeyByZXR1cm4gc2liOyB9CisgIC8vIEdldCB0aGUgbmV4dCBjaGlsZCBvZiBteSBwYXJlbnQuCisKKyAgTkN1cnNlc1dpbmRvdyogIHBhcmVudCgpIHsgcmV0dXJuIHBhcjsgfQorICAvLyBHZXQgbXkgcGFyZW50LgorCisgIGJvb2wgaXNEZXNjZW5kYW50KE5DdXJzZXNXaW5kb3cmIHdpbik7CisgIC8vIFJldHVybiBUUlVFIGlmIHdpbiBpcyBhIGRlc2NlbmRhbnQgb2YgdGhpcy4KK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdlIGxlYXZlIHRoaXMgaGVyZSBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0NvbG9yV2luZG93IDogcHVibGljIE5DdXJzZXNXaW5kb3cKK3sKK3B1YmxpYzoKKyAgTkN1cnNlc0NvbG9yV2luZG93KFdJTkRPVyogJndpbmRvdykgICAvLyB1c2VmdWwgb25seSBmb3Igc3Rkc2NyCisgICAgOiBOQ3Vyc2VzV2luZG93KHdpbmRvdykgeworICAgICAgdXNlQ29sb3JzKCk7IH0KKworICBOQ3Vyc2VzQ29sb3JXaW5kb3coaW50IG5saW5lcywgICAgICAgIC8vIG51bWJlciBvZiBsaW5lcworCQkgICAgIGludCBuY29scywgICAgICAgICAvLyBudW1iZXIgb2YgY29sdW1ucworCQkgICAgIGludCBiZWdpbl95LCAgICAgICAvLyBsaW5lIG9yaWdpbgorCQkgICAgIGludCBiZWdpbl94KSAgICAgICAvLyBjb2wgb3JpZ2luCisgICAgOiBOQ3Vyc2VzV2luZG93KG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpIHsKKyAgICAgIHVzZUNvbG9ycygpOyB9CisKKyAgTkN1cnNlc0NvbG9yV2luZG93KE5DdXJzZXNXaW5kb3cmIHBhcmVudFdpbiwvLyBwYXJlbnQgd2luZG93CisJCSAgICAgaW50IG5saW5lcywgICAgICAgIC8vIG51bWJlciBvZiBsaW5lcworCQkgICAgIGludCBuY29scywgICAgICAgICAvLyBudW1iZXIgb2YgY29sdW1ucworCQkgICAgIGludCBiZWdpbl95LCAgICAgICAvLyBhYnNvbHV0ZSBvciByZWxhdGl2ZQorCQkgICAgIGludCBiZWdpbl94LCAgICAgICAvLyAgIG9yaWdpbnM6CisJCSAgICAgY2hhciBhYnNyZWwgPSAnYScpIC8vIGlmIGBhJywgYnkgJiBieCBhcmUKKyAgICA6IE5DdXJzZXNXaW5kb3cocGFyZW50V2luLAorCQkgICAgbmxpbmVzLCBuY29scywJLy8gYWJzb2x1dGUgc2NyZWVuIHBvcywKKwkJICAgIGJlZ2luX3ksIGJlZ2luX3gsICAgLy8gZWxzZSBpZiBgcicsIHRoZXkgYXJlCisJCSAgICBhYnNyZWwgKSB7ICAgICAgICAgIC8vIHJlbGF0aXZlIHRvIHBhciBvcmlnaW4KKyAgICAgIHVzZUNvbG9ycygpOyB9Cit9OworCisvLyBUaGVzZSBlbnVtIGRlZmluaXRpb25zIHJlYWxseSBiZWxvbmcgaW5zaWRlIHRoZSBOQ3Vyc2VzUGFkIGNsYXNzLCBidXQgb25seQorLy8gcmVjZW50IGNvbXBpbGVycyBzdXBwb3J0IHRoYXQgZmVhdHVyZS4KKworICB0eXBlZGVmIGVudW0geworICAgIFJFUV9QQURfUkVGUkVTSCA9IEtFWV9NQVggKyAxLAorICAgIFJFUV9QQURfVVAsCisgICAgUkVRX1BBRF9ET1dOLAorICAgIFJFUV9QQURfTEVGVCwKKyAgICBSRVFfUEFEX1JJR0hULAorICAgIFJFUV9QQURfRVhJVAorICB9IFBhZF9SZXF1ZXN0OworCisgIGNvbnN0IFBhZF9SZXF1ZXN0IFBBRF9MT1cgID0gUkVRX1BBRF9SRUZSRVNIOyAgIC8vIGxvd2VzdCAgb3AtY29kZQorICBjb25zdCBQYWRfUmVxdWVzdCBQQURfSElHSCA9IFJFUV9QQURfRVhJVDsgICAgICAvLyBoaWdoZXN0IG9wLWNvZGUKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFkIFN1cHBvcnQuIFdlIGFsbG93IGFuIGFzc29jaWF0aW9uIG9mIGEgcGFkIHdpdGggYSAicmVhbCIgd2luZG93CisvLyB0aHJvdWdoIHdoaWNoIHRoZSBwYWQgbWF5IGJlIHZpZXdlZC4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNQYWQgOiBwdWJsaWMgTkN1cnNlc1dpbmRvdworeworcHJpdmF0ZToKKyAgTkN1cnNlc1dpbmRvdyogdmlld1dpbjsgICAgICAgLy8gdGhlICJ2aWV3cG9ydCIgd2luZG93CisgIE5DdXJzZXNXaW5kb3cqIHZpZXdTdWI7ICAgICAgIC8vIHRoZSAidmlld3BvcnQiIHN1YndpbmRvdworCisgIGludCBoX2dyaWRzaXplLCB2X2dyaWRzaXplOworCitwcm90ZWN0ZWQ6CisgIGludCBtaW5fcm93LCBtaW5fY29sOyAgICAgICAgIC8vIHRvcCBsZWZ0IHJvdy9jb2wgb2YgdGhlIHBhZHMgZGlzcGxheSBhcmVhCisKKyAgTkN1cnNlc1dpbmRvdyogV2luKHZvaWQpIGNvbnN0IHsKKyAgICAvLyBHZXQgdGhlIHdpbmRvdyBpbnRvIHdoaWNoIHRoZSBwYWQgc2hvdWxkIGJlIGNvcGllZCAoaWYgYW55KQorICAgIHJldHVybiAodmlld1N1Yj92aWV3U3ViOih2aWV3V2luP3ZpZXdXaW46MCkpOworICB9CisKKyAgTkN1cnNlc1dpbmRvdyogZ2V0V2luZG93KHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gdmlld1dpbjsKKyAgfQorCisgIE5DdXJzZXNXaW5kb3cqIGdldFN1YldpbmRvdyh2b2lkKSBjb25zdCB7CisgICAgcmV0dXJuIHZpZXdTdWI7CisgIH0KKworICB2aXJ0dWFsIGludCBkcml2ZXIgKGludCBrZXkpOyAgICAgIC8vIFZpcnR1YWxpemUga2V5c3Ryb2tlIGtleQorICAvLyBUaGUgZHJpdmVyIHRyYW5zbGF0ZXMgdGhlIGtleXN0cm9rZSBjIGludG8gYW4gUGFkX1JlcXVlc3QKKworICB2aXJ0dWFsIHZvaWQgT25Vbmtub3duT3BlcmF0aW9uKGludCBwYWRfcmVxKSB7CisgICAgOjpiZWVwKCk7CisgIH0KKyAgLy8gVGhpcyBpcyBjYWxsZWQgaWYgdGhlIGRyaXZlciByZXR1cm5zIGFuIHVua25vd24gb3AtY29kZQorCisgIHZpcnR1YWwgdm9pZCBPbk5hdmlnYXRpb25FcnJvcihpbnQgcGFkX3JlcSkgeworICAgIDo6YmVlcCgpOworICB9CisgIC8vIFRoaXMgaXMgY2FsbGVkIGlmIGEgbmF2aWdhdGlvbiByZXF1ZXN0IGNvdWxkbid0IGJlIHNhdGlzZmllZAorCisgIHZpcnR1YWwgdm9pZCBPbk9wZXJhdGlvbihpbnQgcGFkX3JlcSkgeworICB9OworICAvLyBPbk9wZXJhdGlvbiBpcyBjYWxsZWQgaWYgYSBQYWRfT3BlcmF0aW9uIHdhcyBleGVjdXRlZCBhbmQganVzdCBiZWZvcmUKKyAgLy8gdGhlIHJlZnJlc2goKSBvcGVyYXRpb24gaXMgZG9uZS4KKworcHVibGljOgorICBOQ3Vyc2VzUGFkKGludCBubGluZXMsIGludCBuY29scyk7CisgIC8vIGNyZWF0ZSBhIHBhZCB3aXRoIHRoZSBnaXZlbiBzaXplCisKKyAgTkN1cnNlc1BhZCYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNQYWQmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgICAgTkN1cnNlc1dpbmRvdzo6b3BlcmF0b3I9KHJocyk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNQYWQoY29uc3QgTkN1cnNlc1BhZCYgcmhzKQorICAgIDogTkN1cnNlc1dpbmRvdyhyaHMpLAorICAgICAgdmlld1dpbihyaHMudmlld1dpbiksCisgICAgICB2aWV3U3ViKHJocy52aWV3U3ViKSwKKyAgICAgIGhfZ3JpZHNpemUocmhzLmhfZ3JpZHNpemUpLAorICAgICAgdl9ncmlkc2l6ZShyaHMudl9ncmlkc2l6ZSksCisgICAgICBtaW5fcm93KHJocy5taW5fcm93KSwKKyAgICAgIG1pbl9jb2wocmhzLm1pbl9jb2wpCisgIHsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNQYWQoKSB7fQorCisgIGludCBlY2hvY2hhcihjb25zdCBjaHR5cGUgY2gpIHsgcmV0dXJuIDo6cGVjaG9jaGFyKHcsIGNoKTsgfQorICAvLyBQdXQgdGhlIGF0dHJpYnV0ZWQgY2hhcmFjdGVyIG9udG8gdGhlIHBhZCBhbmQgaW1tZWRpYXRlbHkgZG8gYQorICAvLyBwcmVmcmVzaCgpLgorCisgIGludCByZWZyZXNoKCk7CisgIC8vIElmIGEgdmlld3BvcnQgaXMgZGVmaW5lZCB0aGUgcGFkIGlzIGRpc3BsYXllZCBpbiB0aGlzIHdpbmRvdywgb3RoZXJ3aXNlCisgIC8vIHRoaXMgaXMgYSBub29wLgorCisgIGludCByZWZyZXNoKGludCBwbWlucm93LCBpbnQgcG1pbmNvbCwKKwkgICAgICBpbnQgc21pbnJvdywgaW50IHNtaW5jb2wsCisJICAgICAgaW50IHNtYXhyb3csIGludCBzbWF4Y29sKSB7CisgICAgcmV0dXJuIDo6cHJlZnJlc2godywgcG1pbnJvdywgcG1pbmNvbCwKKwkJICAgICAgc21pbnJvdywgc21pbmNvbCwgc21heHJvdywgc21heGNvbCk7CisgIH0KKyAgLy8gVGhlIGNvb3JkaW5hdGVzIHNtaW5yb3csc21pbmNvbCxzbWF4cm93LHNtYXhjb2wgZGVzY3JpYmUgYSByZWN0YW5nbGUKKyAgLy8gb24gdGhlIHNjcmVlbi4gPGI+cmVmcmVzaDwvYj4gY29waWVzIGEgcmVjdGFuZ2xlIG9mIHRoaXMgc2l6ZSBiZWdpbm5pbmcKKyAgLy8gd2l0aCB0b3AgbGVmdCBjb3JuZXIgcG1pbnJvdyxwbWluY29sIG9udG8gdGhlIHNjcmVlbiBhbmQgY2FsbHMgZG91cGRhdGUoKS4KKworICBpbnQgbm91dHJlZnJlc2goKTsKKyAgLy8gSWYgYSB2aWV3cG9ydCBpcyBkZWZpbmVkIHRoZSBwYWQgaXMgZGlzcGxheWVkIGluIHRoaXMgd2luZG93LCBvdGhlcndpc2UKKyAgLy8gdGhpcyBpcyBhIG5vb3AuCisKKyAgaW50IG5vdXRyZWZyZXNoKGludCBwbWlucm93LCBpbnQgcG1pbmNvbCwKKwkJICBpbnQgc21pbnJvdywgaW50IHNtaW5jb2wsCisJCSAgaW50IHNtYXhyb3csIGludCBzbWF4Y29sKSB7CisgICAgcmV0dXJuIDo6cG5vdXRyZWZyZXNoKHcsIHBtaW5yb3csIHBtaW5jb2wsCisJCQkgIHNtaW5yb3csIHNtaW5jb2wsIHNtYXhyb3csIHNtYXhjb2wpOworICB9CisgIC8vIERvZXMgdGhlIHNhbWUgYXMgcmVmcmVzaCgpIGJ1dCB3aXRob3V0IGNhbGxpbmcgZG91cGRhdGUoKS4KKworICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93KE5DdXJzZXNXaW5kb3cmIHZpZXcsIGludCB2X2dyaWQgPSAxLCBpbnQgaF9ncmlkID0gMSk7CisgIC8vIEFkZCB0aGUgd2luZG93ICJ2aWV3IiBhcyB2aWV3aW5nIHdpbmRvdyB0byB0aGUgcGFkLgorCisgIHZpcnR1YWwgdm9pZCBzZXRTdWJXaW5kb3coTkN1cnNlc1dpbmRvdyYgc3ViKTsKKyAgLy8gVXNlIHRoZSBzdWJ3aW5kb3cgInN1YiIgb2YgdGhlIHZpZXdwb3J0IHdpbmRvdyBmb3IgdGhlIGFjdHVhbCB2aWV3aW5nLgorICAvLyBUaGUgZnVsbCB2aWV3cG9ydCB3aW5kb3cgaXMgdXN1YWxseSB1c2VkIHRvIHByb3ZpZGUgc29tZSBkZWNvcmF0aW9ucworICAvLyBsaWtlIGZyYW1lcywgdGl0bGVzIGV0Yy4KKworICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKSAodm9pZCk7CisgIC8vIFBlcmZvcm0gUGFkJ3Mgb3BlcmF0aW9uCit9OworCisvLyBBIEZyYW1lZFBhZCBpcyBjb25zdHJ1Y3RlZCBhbHdheXMgd2l0aCBhIHZpZXdwb3J0IHdpbmRvdy4gVGhpcyB2aWV3cG9ydAorLy8gd2lsbCBiZSBmcmFtZWQgKGJ5IGEgYm94KCkgY29tbWFuZCkgYW5kIHRoZSBpbnRlcmlvciBvZiB0aGUgYm94IGlzIHRoZQorLy8gdmlld3BvcnQgc3Vid2luZG93LiBPbiB0aGUgZnJhbWUgd2UgZGlzcGxheSBzY3JvbGxiYXIgc2xpZGVycy4KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNGcmFtZWRQYWQgOiBwdWJsaWMgTkN1cnNlc1BhZAoreworcHJvdGVjdGVkOgorICB2aXJ0dWFsIHZvaWQgT25PcGVyYXRpb24oaW50IHBhZF9yZXEpOworCitwdWJsaWM6CisgIE5DdXJzZXNGcmFtZWRQYWQoTkN1cnNlc1dpbmRvdyYgd2luLCBpbnQgbmxpbmVzLCBpbnQgbmNvbHMsCisJCSAgIGludCB2X2dyaWQgPSAxLCBpbnQgaF9ncmlkID0gMSkKKyAgICA6IE5DdXJzZXNQYWQobmxpbmVzLCBuY29scykgeworICAgIE5DdXJzZXNQYWQ6OnNldFdpbmRvdyh3aW4sIHZfZ3JpZCwgaF9ncmlkKTsKKyAgICBOQ3Vyc2VzUGFkOjpzZXRTdWJXaW5kb3coKihuZXcgTkN1cnNlc1dpbmRvdyh3aW4pKSk7CisgIH0KKyAgLy8gQ29uc3RydWN0IHRoZSBGcmFtZWRQYWQgd2l0aCB0aGUgZ2l2ZW4gV2luZG93IHdpbiBhcyB2aWV3cG9ydC4KKworICB2aXJ0dWFsIH5OQ3Vyc2VzRnJhbWVkUGFkKCkgeworICAgIGRlbGV0ZSBnZXRTdWJXaW5kb3coKTsKKyAgfQorCisgIHZvaWQgc2V0V2luZG93KE5DdXJzZXNXaW5kb3cmIHZpZXcsIGludCB2X2dyaWQgPSAxLCBpbnQgaF9ncmlkID0gMSkgeworICAgIGVycl9oYW5kbGVyKCJPcGVyYXRpb24gbm90IGFsbG93ZWQiKTsKKyAgfQorICAvLyBEaXNhYmxlIHRoaXMgY2FsbDsgdGhlIHZpZXdwb3J0IGlzIGFscmVhZHkgZGVmaW5lZAorCisgIHZvaWQgc2V0U3ViV2luZG93KE5DdXJzZXNXaW5kb3cmIHN1YikgeworICAgIGVycl9oYW5kbGVyKCJPcGVyYXRpb24gbm90IGFsbG93ZWQiKTsKKyAgfQorICAvLyBEaXNhYmxlIHRoaXMgY2FsbDsgdGhlIHZpZXdwb3J0IHN1YndpbmRvdyBpcyBhbHJlYWR5IGRlZmluZWQKKworfTsKKworI2VuZGlmIC8qIE5DVVJTRVNfQ1VSU0VTV19IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2MrKy9jdXJzc2xrLmNjIGIvYysrL2N1cnNzbGsuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiYzlkYQotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9jdXJzc2xrLmNjCkBAIC0wLDAgKzEsMTMyIEBACisvLyAqIHRoaXMgaXMgZm9yIG1ha2luZyBlbWFjcyBoYXBweTogLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiY3Vyc3Nsay5oIgorI2luY2x1ZGUgImN1cnNlc2FwcC5oIgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc3Nsay5jYyx2IDEuMTUgMjAwNS8wOC8wNiAyMjoxMjozNiB0b20gRXhwICQiKQorCitTb2Z0X0xhYmVsX0tleV9TZXQ6OlNvZnRfTGFiZWxfS2V5JgorICBTb2Z0X0xhYmVsX0tleV9TZXQ6OlNvZnRfTGFiZWxfS2V5OjpvcGVyYXRvcj0oY2hhciAqdGV4dCkKK3sKKyAgZGVsZXRlW10gbGFiZWw7CisgIGxhYmVsID0gbmV3IGNoYXJbMSArIDo6c3RybGVuKHRleHQpXTsKKyAgKDo6c3RyY3B5KShsYWJlbCx0ZXh0KTsKKyAgcmV0dXJuICp0aGlzOworfQorCitsb25nIFNvZnRfTGFiZWxfS2V5X1NldDo6Y291bnQgICAgICA9IDBMOworaW50ICBTb2Z0X0xhYmVsX0tleV9TZXQ6Om51bV9sYWJlbHMgPSAwOworCitTb2Z0X0xhYmVsX0tleV9TZXQ6OkxhYmVsX0xheW91dAorICBTb2Z0X0xhYmVsX0tleV9TZXQ6OmZvcm1hdCA9IE5vbmU7CisKK3ZvaWQgU29mdF9MYWJlbF9LZXlfU2V0Ojppbml0KCkKK3sKKyAgc2xrX2FycmF5ID0gbmV3IFNvZnRfTGFiZWxfS2V5W251bV9sYWJlbHNdOworICBmb3IoaW50IGk9MDsgaSA8IG51bV9sYWJlbHM7IGkrKykgeworICAgIHNsa19hcnJheVtpXS5udW0gPSBpKzE7CisgIH0KKyAgYl9hdHRySW5pdCA9IEZBTFNFOworfQorCitTb2Z0X0xhYmVsX0tleV9TZXQ6OlNvZnRfTGFiZWxfS2V5X1NldCgpCisgIDogYl9hdHRySW5pdChGQUxTRSksCisgICAgc2xrX2FycmF5KE5VTEwpCit7CisgIGlmIChmb3JtYXQ9PU5vbmUpCisgICAgRXJyb3IoIk5vIGRlZmF1bHQgU0xLIGxheW91dCIpOworICBpbml0KCk7Cit9CisKK1NvZnRfTGFiZWxfS2V5X1NldDo6U29mdF9MYWJlbF9LZXlfU2V0KFNvZnRfTGFiZWxfS2V5X1NldDo6TGFiZWxfTGF5b3V0IGZtdCkKKyAgOiBiX2F0dHJJbml0KEZBTFNFKSwKKyAgICBzbGtfYXJyYXkoTlVMTCkKK3sKKyAgaWYgKGZtdD09Tm9uZSkKKyAgICBFcnJvcigiSW52YWxpZCBTTEsgTGF5b3V0Iik7CisgIGlmIChjb3VudCsrPT0wKSB7CisgICAgZm9ybWF0ID0gZm10OworICAgIGlmIChFUlIgPT0gOjpzbGtfaW5pdChzdGF0aWNfY2FzdDxpbnQ+KGZtdCkpKQorICAgICAgRXJyb3IoInNsa19pbml0Iik7CisgICAgbnVtX2xhYmVscyA9IChmbXQ+PVBDX1N0eWxlPzEyOjgpOworICB9CisgIGVsc2UgaWYgKGZtdCE9Zm9ybWF0KQorICAgIEVycm9yKCJBbGwgU0xLcyBtdXN0IGhhdmUgc2FtZSBsYXlvdXQiKTsKKyAgaW5pdCgpOworfQorCitTb2Z0X0xhYmVsX0tleV9TZXQ6On5Tb2Z0X0xhYmVsX0tleV9TZXQoKSB7CisgIGlmICghOjppc2VuZHdpbigpKQorICAgIGNsZWFyKCk7CisgIGRlbGV0ZVtdIHNsa19hcnJheTsKKyAgY291bnQtLTsKK30KKworU29mdF9MYWJlbF9LZXlfU2V0OjpTb2Z0X0xhYmVsX0tleSYgU29mdF9MYWJlbF9LZXlfU2V0OjpvcGVyYXRvcltdKGludCBpKSB7CisgIGlmIChpPDEgfHwgaT5udW1fbGFiZWxzKQorICAgIEVycm9yKCJJbnZhbGlkIExhYmVsIGluZGV4Iik7CisgIHJldHVybiBzbGtfYXJyYXlbaS0xXTsKK30KKwordm9pZCBTb2Z0X0xhYmVsX0tleV9TZXQ6OmFjdGl2YXRlX2xhYmVsKGludCBpLCBib29sIGJmKSB7CisgIGlmICghYl9hdHRySW5pdCkgeworICAgIE5DdXJzZXNBcHBsaWNhdGlvbiogQSA9IE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKTsKKyAgICBpZiAoQSkgYXR0cnNldChBLT5sYWJlbHMoKSk7CisgICAgYl9hdHRySW5pdCA9IFRSVUU7CisgIH0KKyAgU29mdF9MYWJlbF9LZXkmIEsgPSAoKnRoaXMpW2ldOworICBpZiAoRVJSPT06OnNsa19zZXQoSy5udW0sYmY/Sy5sYWJlbDoiIixLLmZvcm1hdCkpCisgICAgRXJyb3IoInNsa19zZXQiKTsKKyAgbm91dHJlZnJlc2goKTsKK30KKwordm9pZCBTb2Z0X0xhYmVsX0tleV9TZXQ6OmFjdGl2YXRlX2xhYmVscyhib29sIGJmKQoreworICBpZiAoIWJfYXR0ckluaXQpIHsKKyAgICBOQ3Vyc2VzQXBwbGljYXRpb24qIEEgPSBOQ3Vyc2VzQXBwbGljYXRpb246OmdldEFwcGxpY2F0aW9uKCk7CisgICAgaWYgKEEpIGF0dHJzZXQoQS0+bGFiZWxzKCkpOworICAgIGJfYXR0ckluaXQgPSBUUlVFOworICB9CisgIGZvcihpbnQgaT0xOyBpIDw9IG51bV9sYWJlbHM7IGkrKykgeworICAgIFNvZnRfTGFiZWxfS2V5JiBLID0gKCp0aGlzKVtpXTsKKyAgICBpZiAoRVJSPT06OnNsa19zZXQoSy5udW0sYmY/Sy5sYWJlbDoiIixLLmZvcm1hdCkpCisgICAgICBFcnJvcigic2xrX3NldCIpOworICB9CisgIGlmIChiZikKKyAgICByZXN0b3JlKCk7CisgIGVsc2UKKyAgICBjbGVhcigpOworICBub3V0cmVmcmVzaCgpOworfQpkaWZmIC0tZ2l0IGEvYysrL2N1cnNzbGsuaCBiL2MrKy9jdXJzc2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxNjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9jdXJzc2xrLmgKQEAgLTAsMCArMSwyMzggQEAKKy8vICogdGhpcyBpcyBmb3IgbWFraW5nIGVtYWNzIGhhcHB5OiAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyAkSWQ6IGN1cnNzbGsuaCx2IDEuMTMgMjAwNS8wNS8yOCAyMTo1ODoxOCB0b20gRXhwICQKKworI2lmbmRlZiBOQ1VSU0VTX0NVUlNTTEtfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfQ1VSU1NMS19IX2luY2wKKworI2luY2x1ZGUgPGN1cnNlc3cuaD4KKworY2xhc3MgTkNVUlNFU19JTVBFWFAgU29mdF9MYWJlbF9LZXlfU2V0IHsKK3B1YmxpYzoKKyAgLy8gVGhpcyBpbm5lciBjbGFzcyByZXByZXNlbnRzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgU29mdCBMYWJlbCBLZXkgKFNMSykKKyAgY2xhc3MgTkNVUlNFU19JTVBFWFAgU29mdF9MYWJlbF9LZXkgeworICAgIGZyaWVuZCBjbGFzcyBTb2Z0X0xhYmVsX0tleV9TZXQ7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIGVudW0geyBMZWZ0PTAsIENlbnRlcj0xLCBSaWdodD0yIH0gSnVzdGlmaWNhdGlvbjsKKworICBwcml2YXRlOgorICAgIGNoYXIgKmxhYmVsOyAgICAgICAgICAgLy8gVGhlIFRleHQgb2YgdGhlIExhYmVsCisgICAgSnVzdGlmaWNhdGlvbiBmb3JtYXQ7ICAvLyBUaGUgSnVzdGlmaWNhdGlvbgorICAgIGludCBudW07ICAgICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiB0aGUgTGFiZWwKKworICAgIFNvZnRfTGFiZWxfS2V5KCkgOiBsYWJlbChOVUxMKSwgZm9ybWF0KExlZnQpLCBudW0oLTEpIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Tb2Z0X0xhYmVsX0tleSgpIHsKKyAgICAgIGRlbGV0ZVtdIGxhYmVsOworICAgIH07CisKKyAgcHVibGljOgorICAgIC8vIFNldCB0aGUgdGV4dCBvZiB0aGUgTGFiZWwKKyAgICBTb2Z0X0xhYmVsX0tleSYgb3BlcmF0b3I9KGNoYXIgKnRleHQpOworCisgICAgLy8gU2V0IHRoZSBKdXN0aWZpY2F0aW9uIG9mIHRoZSBMYWJlbAorICAgIFNvZnRfTGFiZWxfS2V5JiBvcGVyYXRvcj0oSnVzdGlmaWNhdGlvbiBqdXN0KSB7CisgICAgICBmb3JtYXQgPSBqdXN0OworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8vIFJldHJpZXZlIHRoZSB0ZXh0IG9mIHRoZSBsYWJlbAorICAgIGlubGluZSBjaGFyKiBvcGVyYXRvcigpKHZvaWQpIGNvbnN0IHsKKyAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBTb2Z0X0xhYmVsX0tleSYgb3BlcmF0b3I9KGNvbnN0IFNvZnRfTGFiZWxfS2V5JiByaHMpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgICAqdGhpcyA9IHJoczsKKyAgICAgIH0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBTb2Z0X0xhYmVsX0tleShjb25zdCBTb2Z0X0xhYmVsX0tleSYgcmhzKQorICAgICAgOiBsYWJlbChOVUxMKSwKKyAgICAgICAgZm9ybWF0KHJocy5mb3JtYXQpLAorICAgICAgICBudW0ocmhzLm51bSkKKyAgICB7CisgICAgICAqdGhpcyA9IHJocy5sYWJlbDsKKyAgICB9CisgIH07CisKK3B1YmxpYzoKKyAgdHlwZWRlZiBlbnVtIHsKKyAgICBOb25lICAgICAgICAgICAgICAgID0gLTEsCisgICAgVGhyZWVfVHdvX1RocmVlICAgICA9IDAsCisgICAgRm91cl9Gb3VyICAgICAgICAgICA9IDEsCisgICAgUENfU3R5bGUgICAgICAgICAgICA9IDIsCisgICAgUENfU3R5bGVfV2l0aF9JbmRleCA9IDMKKyAgfSBMYWJlbF9MYXlvdXQ7CisKK3ByaXZhdGU6CisgIHN0YXRpYyBsb25nIE5DVVJTRVNfSU1QRVhQIGNvdW50OyAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBLZXkgU2V0cworICBzdGF0aWMgTGFiZWxfTGF5b3V0IE5DVVJTRVNfSU1QRVhQICBmb3JtYXQ7ICAgICAvLyBMYXlvdXQgb2YgdGhlIEtleSBTZXRzCisgIHN0YXRpYyBpbnQgIE5DVVJTRVNfSU1QRVhQIG51bV9sYWJlbHM7ICAgICAgICAgIC8vIE51bWJlciBPZiBMYWJlbHMgaW4gS2V5IFNldHMKKyAgYm9vbCBOQ1VSU0VTX0lNUEVYUCBiX2F0dHJJbml0OyAgICAgICAgICAgICAgICAgLy8gQXJlIGF0dHJpYnV0ZXMgaW5pdGlhbGl6ZWQKKworICBTb2Z0X0xhYmVsX0tleSAqc2xrX2FycmF5OyAgICAgICAvLyBUaGUgYXJyYXkgb2YgU0xLJ3MKKworICAvLyBJbml0IHRoZSBLZXkgU2V0CisgIHZvaWQgaW5pdCgpOworCisgIC8vIEFjdGl2YXRlIG9yIERlYWN0aXZhdGUgTGFiZWwjIGksIExhYmVsIGNvdW50aW5nIHN0YXJ0cyB3aXRoIDEhCisgIHZvaWQgYWN0aXZhdGVfbGFiZWwoaW50IGksIGJvb2wgYmY9VFJVRSk7CisKKyAgLy8gQWN0aXZhdGUgb2YgRGVhY3RpdmF0ZSBhbGwgTGFiZWxzCisgIHZvaWQgYWN0aXZhdGVfbGFiZWxzKGJvb2wgYmYpOworCitwcm90ZWN0ZWQ6CisgIGlubGluZSB2b2lkIEVycm9yIChjb25zdCBjaGFyKiBtc2cpIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzRXhjZXB0aW9uKSB7CisgICAgVEhST1cobmV3IE5DdXJzZXNFeGNlcHRpb24gKG1zZykpOworICB9CisKKyAgLy8gUmVtb3ZlIFNMSydzIGZyb20gc2NyZWVuCisgIHZvaWQgY2xlYXIoKSB7CisgICAgaWYgKEVSUj09OjpzbGtfY2xlYXIoKSkKKyAgICAgIEVycm9yKCJzbGtfY2xlYXIiKTsKKyAgfQorCisgIC8vIFJlc3RvcmUgdGhlbQorICB2b2lkIHJlc3RvcmUoKSB7CisgICAgaWYgKEVSUj09OjpzbGtfcmVzdG9yZSgpKQorICAgICAgRXJyb3IoInNsa19yZXN0b3JlIik7CisgIH0KKworcHVibGljOgorCisgIC8vIENvbnN0cnVjdCBhIEtleSBTZXQsIHVzZSB0aGUgbW9zdCBjb21mb3J0YWJsZSBsYXlvdXQgYXMgZGVmYXVsdC4KKyAgLy8gWW91IG11c3QgY3JlYXRlIGEgU29mdF9MYWJlbF9LZXlfU2V0IGJlZm9yZSB5b3UgY3JlYXRlIGFueSBvYmplY3Qgb2YKKyAgLy8gdGhlIE5DdXJzZXNXaW5kb3csIE5DdXJzZXNQYW5lbCBvciBkZXJpdmVkIGNsYXNzZXMuIChBY3R1YWxseSBiZWZvcmUKKyAgLy8gOjppbml0c2NyKCkgaXMgY2FsbGVkKS4KKyAgU29mdF9MYWJlbF9LZXlfU2V0KExhYmVsX0xheW91dCBmbXQpOworCisgIC8vIFRoaXMgY29uc3RydWN0b3IgYXNzdW1lcywgdGhhdCB5b3UgYWxyZWFkeSBjb25zdHJ1Y3RlZCBhIEtleSBTZXQKKyAgLy8gd2l0aCBhIGxheW91dCBieSB0aGUgY29uc3RydWN0b3IgYWJvdmUuIFRoaXMgbGF5b3V0IHdpbGwgYmUgcmV1c2VkLgorICBOQ1VSU0VTX0lNUEVYUCBTb2Z0X0xhYmVsX0tleV9TZXQoKTsKKworICBTb2Z0X0xhYmVsX0tleV9TZXQmIG9wZXJhdG9yPShjb25zdCBTb2Z0X0xhYmVsX0tleV9TZXQmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgICAgaW5pdCgpOwkJLy8gYWxsb2NhdGUgYSBuZXcgc2xrX2FycmF5W10KKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgU29mdF9MYWJlbF9LZXlfU2V0KGNvbnN0IFNvZnRfTGFiZWxfS2V5X1NldCYgcmhzKQorICAgIDogYl9hdHRySW5pdChyaHMuYl9hdHRySW5pdCksCisgICAgICBzbGtfYXJyYXkoTlVMTCkKKyAgeworICAgIGluaXQoKTsJCS8vIGFsbG9jYXRlIGEgbmV3IHNsa19hcnJheVtdCisgIH0KKworICB2aXJ0dWFsIH5Tb2Z0X0xhYmVsX0tleV9TZXQoKTsKKworICAvLyBHZXQgTGFiZWwjIGkuIExhYmVsIGNvdW50aW5nIHN0YXJ0cyB3aXRoIDEhCisgIE5DVVJTRVNfSU1QRVhQIFNvZnRfTGFiZWxfS2V5JiBvcGVyYXRvcltdKGludCBpKTsKKworICAvLyBSZXRyaWV2ZSBudW1iZXIgb2YgTGFiZWxzCisgIGlubGluZSBpbnQgbGFiZWxzKCkgY29uc3QgeyByZXR1cm4gbnVtX2xhYmVsczsgfQorCisgIC8vIFJlZnJlc2ggdGhlIFNMSyBwb3J0aW9uIG9mIHRoZSBzY3JlZW4KKyAgaW5saW5lIHZvaWQgcmVmcmVzaCgpIHsKKyAgICBpZiAoRVJSPT06OnNsa19yZWZyZXNoKCkpCisgICAgICBFcnJvcigic2xrX3JlZnJlc2giKTsKKyAgfQorCisgIC8vIE1hcmsgdGhlIFNMSyBwb3J0aW9uIG9mIHRoZSBzY3JlZW4gZm9yIHJlZnJlc2gsIGRlZmVyIGFjdHVhbCByZWZyZXNoCisgIC8vIHVudGlsIG5leHQgdXBkYXRlIGNhbGwuCisgIGlubGluZSB2b2lkIG5vdXRyZWZyZXNoKCkgeworICAgIGlmIChFUlI9PTo6c2xrX25vdXRyZWZyZXNoKCkpCisgICAgICBFcnJvcigic2xrX25vdXRyZWZyZXNoIik7CisgIH0KKworICAvLyBNYXJrIHRoZSB3aG9sZSBTTEsgcG9ydGlvbiBvZiB0aGUgc2NyZWVuIGFzIG1vZGlmaWVkCisgIGlubGluZSB2b2lkIHRvdWNoKCkgeworICAgIGlmIChFUlI9PTo6c2xrX3RvdWNoKCkpCisgICAgICBFcnJvcigic2xrX3RvdWNoIik7CisgIH0KKworICAvLyBBY3RpdmF0ZSBMYWJlbCMgaQorICBpbmxpbmUgdm9pZCBzaG93KGludCBpKSB7CisgICAgYWN0aXZhdGVfbGFiZWwoaSxGQUxTRSk7CisgICAgYWN0aXZhdGVfbGFiZWwoaSxUUlVFKTsKKyAgfQorCisgIC8vIEhpZGUgTGFiZWwjIGkKKyAgaW5saW5lIHZvaWQgaGlkZShpbnQgaSkgeworICAgIGFjdGl2YXRlX2xhYmVsKGksRkFMU0UpOworICB9CisKKyAgLy8gU2hvdyBhbGwgTGFiZWxzCisgIGlubGluZSB2b2lkIHNob3coKSB7CisgICAgYWN0aXZhdGVfbGFiZWxzKEZBTFNFKTsKKyAgICBhY3RpdmF0ZV9sYWJlbHMoVFJVRSk7CisgIH0KKworICAvLyBIaWRlIGFsbCBMYWJlbHMKKyAgaW5saW5lIHZvaWQgaGlkZSgpIHsKKyAgICBhY3RpdmF0ZV9sYWJlbHMoRkFMU0UpOworICB9CisKKyAgaW5saW5lIHZvaWQgYXR0cm9uKGF0dHJfdCBhdHRycykgeworICAgIGlmIChFUlI9PTo6c2xrX2F0dHJvbihhdHRycykpCisgICAgICBFcnJvcigic2xrX2F0dHJvbiIpOworICB9CisKKyAgaW5saW5lIHZvaWQgYXR0cm9mZihhdHRyX3QgYXR0cnMpIHsKKyAgICBpZiAoRVJSPT06OnNsa19hdHRyb2ZmKGF0dHJzKSkKKyAgICAgIEVycm9yKCJzbGtfYXR0cm9mZiIpOworICB9CisKKyAgaW5saW5lIHZvaWQgYXR0cnNldChhdHRyX3QgYXR0cnMpIHsKKyAgICBpZiAoRVJSPT06OnNsa19hdHRyc2V0KGF0dHJzKSkKKyAgICAgIEVycm9yKCJzbGtfYXR0cnNldCIpOworICB9CisKKyAgaW5saW5lIHZvaWQgY29sb3Ioc2hvcnQgY29sb3JfcGFpcl9udW1iZXIpIHsKKyAgICBpZiAoRVJSPT06OnNsa19jb2xvcihjb2xvcl9wYWlyX251bWJlcikpCisgICAgICBFcnJvcigic2xrX2NvbG9yIik7CisgIH0KKworICBpbmxpbmUgYXR0cl90IGF0dHIoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6c2xrX2F0dHIoKTsKKyAgfQorfTsKKworI2VuZGlmIC8qIE5DVVJTRVNfQ1VSU1NMS19IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2MrKy9kZW1vLmNjIGIvYysrL2RlbW8uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkNWYyYgotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9kZW1vLmNjCkBAIC0wLDAgKzEsNTYzIEBACisvLyAqIFRoaXMgbWFrZXMgZW1hY3MgaGFwcHkgLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqICAgU2lsbHkgZGVtbyBwcm9ncmFtIGZvciB0aGUgTkN1cnNlc1BhbmVsIGNsYXNzLgorICoKKyAqICAgd3JpdHRlbiBieSBBbmF0b2x5IEl2YXN5dWsgKGFuYXRvbHlAbmljay5jc2gucml0LmVkdSkKKyAqCisgKiAgIERlbW8gY29kZSBmb3IgTkN1cnNlc01lbnUgYW5kIE5DdXJzZXNGb3JtIHdyaXR0ZW4gYnkKKyAqICAgSnVlcmdlbiBQZmVpZmVyCisgKgorICogJElkOiBkZW1vLmNjLHYgMS4zOCAyMDA4LzA4LzA0IDE3OjE2OjU3IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImN1cnNlc2FwcC5oIgorI2luY2x1ZGUgImN1cnNlc20uaCIKKyNpbmNsdWRlICJjdXJzZXNmLmgiCisKK2V4dGVybiAiQyIgdW5zaWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCk7CisKKyN1bmRlZiBpbmRleCAvLyBuZWVkZWQgZm9yIE5lWFQKKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBTaWxseURlbW8KK3sKKyAgcHVibGljOgorICB2b2lkIHJ1bihpbnQgc2xlZXB0aW1lKSB7CisKKyAgICBOQ3Vyc2VzUGFuZWwgKm15c3RkID0gbmV3IE5DdXJzZXNQYW5lbCgpOworCisgICAgLy8gIE1ha2UgYSBmZXcgc21hbGwgZGVtbyBwYW5lbHMKKworICAgIE5DdXJzZXNQYW5lbCAqdSA9IG5ldyBOQ3Vyc2VzUGFuZWwoOCwgMjAsIDEyLCA0KTsKKyAgICBOQ3Vyc2VzUGFuZWwgKnYgPSBuZXcgTkN1cnNlc1BhbmVsKDgsIDIwLCAxMCwgNik7CisgICAgTkN1cnNlc1BhbmVsICp3ID0gbmV3IE5DdXJzZXNQYW5lbCg4LCAyMCwgOCwgOCk7CisgICAgTkN1cnNlc1BhbmVsICp4ID0gbmV3IE5DdXJzZXNQYW5lbCg4LCAyMCwgNiwgMTApOworICAgIE5DdXJzZXNQYW5lbCAqeSA9IG5ldyBOQ3Vyc2VzUGFuZWwoOCwgMjAsIDQsIDEyKTsKKyAgICBOQ3Vyc2VzUGFuZWwgKnogPSBuZXcgTkN1cnNlc1BhbmVsKDgsIDMwLCAyLCAxNCk7CisKKyAgICAvLyAgRHJhdyBzb21ldGhpbmcgb24gdGhlIG1haW4gc2NyZWVuLCBzbyB3ZSBjYW4gc2VlIHdoYXQgaGFwcGVucworICAgIC8vICB3aGVuIHBhbmVscyBnZXQgbW92ZWQgb3IgZGVsZXRlZC4KKworICAgIG15c3RkLT5ib3goKTsKKyAgICBteXN0ZC0+bW92ZShteXN0ZC0+aGVpZ2h0KCkvMiwgMSk7CisgICAgbXlzdGQtPmhsaW5lKG15c3RkLT53aWR0aCgpLTIpOworICAgIG15c3RkLT5tb3ZlKDEsIG15c3RkLT53aWR0aCgpLzIpOworICAgIG15c3RkLT52bGluZShteXN0ZC0+aGVpZ2h0KCktMik7CisgICAgbXlzdGQtPmFkZGNoKDAsIG15c3RkLT53aWR0aCgpLzIsIEFDU19UVEVFKTsKKyAgICBteXN0ZC0+YWRkY2gobXlzdGQtPmhlaWdodCgpLTEsIG15c3RkLT53aWR0aCgpLzIsIEFDU19CVEVFKTsKKyAgICBteXN0ZC0+YWRkY2gobXlzdGQtPmhlaWdodCgpLzIsIDAsIEFDU19MVEVFKTsKKyAgICBteXN0ZC0+YWRkY2gobXlzdGQtPmhlaWdodCgpLzIsIG15c3RkLT53aWR0aCgpLTEsIEFDU19SVEVFKTsKKyAgICBteXN0ZC0+YWRkY2gobXlzdGQtPmhlaWdodCgpLzIsIG15c3RkLT53aWR0aCgpLzIsIEFDU19QTFVTKTsKKworICAgIC8vICBEcmF3IGZyYW1lcyB3aXRoIHRpdGxlcyBhcm91bmQgcGFuZWxzIHNvIHRoYXQgd2UgY2FuIHNlZSB3aGVyZQorICAgIC8vICB0aGUgcGFuZWxzIGFyZSBsb2NhdGVkLgorICAgIHUtPmJvbGRmcmFtZSgiV2luIFUiKTsKKyAgICB2LT5mcmFtZSgiV2luIFYiKTsKKyAgICB3LT5ib2xkZnJhbWUoIldpbiBXIik7CisgICAgeC0+ZnJhbWUoIldpbiBYIik7CisgICAgeS0+Ym9sZGZyYW1lKCJXaW4gWSIpOworICAgIHotPmZyYW1lKCJXaW4gWiIpOworICAgIGlmIChOQ3Vyc2VzQXBwbGljYXRpb246OmdldEFwcGxpY2F0aW9uKCktPnVzZUNvbG9ycygpKSB7CisgICAgICB1LT5ia2dkKCcgJ3xDT0xPUl9QQUlSKDEpKTsKKyAgICAgIHctPmJrZ2QoJyAnfENPTE9SX1BBSVIoMSkpOworICAgICAgeS0+YmtnZCgnICd8Q09MT1JfUEFJUigxKSk7CisgICAgICB2LT5ia2dkKCcgJ3xDT0xPUl9QQUlSKDIpKTsKKyAgICAgIHgtPmJrZ2QoJyAnfENPTE9SX1BBSVIoMikpOworICAgICAgei0+YmtnZCgnICd8Q09MT1JfUEFJUigyKSk7CisgICAgfQorCisgICAgLy8gIEEgcmVmcmVzaCB0byBhbnkgdmFsaWQgcGFuZWwgdXBkYXRlcyBhbGwgcGFuZWxzIGFuZCByZWZyZXNoZXMKKyAgICAvLyAgdGhlIHNjcmVlbi4gIFVzaW5nIG15c3RkIGlzIGp1c3QgY29udmVuaWVudCAtIFdlIGtub3cgaXQncyBhbHdheXMKKyAgICAvLyAgdmFsaWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgcHJvZ3JhbS4KKworICAgIG15c3RkLT5yZWZyZXNoKCk7CisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKworICAgIC8vICBTaG93IHdoYXQgaGFwcGVucyB3aGVuIHBhbmVscyBhcmUgZGVsZXRlZCBhbmQgbW92ZWQuCisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworICAgIGRlbGV0ZSB1OworICAgIG15c3RkLT5yZWZyZXNoKCk7CisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworICAgIGRlbGV0ZSB6OworICAgIG15c3RkLT5yZWZyZXNoKCk7CisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworICAgIGRlbGV0ZSB2OworICAgIG15c3RkLT5yZWZyZXNoKCk7CisKKyAgICAvLyBzaG93IGhvdyBpdCBsb29rcyB3aGVuIGEgcGFuZWwgbW92ZXMKKyAgICBzbGVlcChzbGVlcHRpbWUpOworICAgIHktPm12d2luKDUsIDMwKTsKKyAgICBteXN0ZC0+cmVmcmVzaCgpOworCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKyAgICBkZWxldGUgeTsKKyAgICBteXN0ZC0+cmVmcmVzaCgpOworCisgICAgLy8gc2hvdyBob3cgaXQgbG9va3Mgd2hlbiB5b3UgcmFpc2UgYSBwYW5lbAorICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgdy0+dG9wKCk7CisgICAgbXlzdGQtPnJlZnJlc2goKTsKKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgZGVsZXRlIHc7CisgICAgbXlzdGQtPnJlZnJlc2goKTsKKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgZGVsZXRlIHg7CisKKyAgICBteXN0ZC0+Y2xlYXIoKTsKKyAgICBteXN0ZC0+cmVmcmVzaCgpOworCisgICAgLy8gIERvbid0IGZvcmdldCB0byBjbGVhbiB1cCB0aGUgbWFpbiBzY3JlZW4uICBTaW5jZSB0aGlzIGlzIHRoZQorICAgIC8vICBsYXN0IHRoaW5nIHVzaW5nIE5DdXJzZXNXaW5kb3csIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKKyAgICAvLyAgc2h1dHRpbmcgZG93biBuY3Vyc2VzIGFuZCByZXN0b3JpbmcgdGhlIHRlcm1pbmFsIHN0YXRlLgorCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKyAgICBkZWxldGUgbXlzdGQ7CisgIH0KK307CisKK2NsYXNzIFVzZXJEYXRhCit7Citwcml2YXRlOgorICBpbnQgdTsKK3B1YmxpYzoKKyAgVXNlckRhdGEoaW50IHgpIDogdSh4KSB7fQorICBpbnQgc2xlZXB0aW1lKCkgY29uc3QgeyByZXR1cm4gdTsgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTXlBY3Rpb24gOiBwdWJsaWMgTkN1cnNlc1VzZXJJdGVtPFQ+Cit7CitwdWJsaWM6CisgIE15QWN0aW9uIChjb25zdCBjaGFyKiBwX25hbWUsCisgICAgICAgICAgICBjb25zdCBUKiBwX1VzZXJEYXRhKQorICAgIDogTkN1cnNlc1VzZXJJdGVtPFQ+KHBfbmFtZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KDApLCBwX1VzZXJEYXRhKQorICB7fQorCisgIHZpcnR1YWwgfk15QWN0aW9uKCkge30KKworICBib29sIGFjdGlvbigpIHsKKyAgICBTaWxseURlbW8gYTsKKyAgICBhLnJ1bihOQ3Vyc2VzVXNlckl0ZW08VD46OlVzZXJEYXRhKCktPnNsZWVwdGltZSgpKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK307CisKK3RlbXBsYXRlIGNsYXNzIE15QWN0aW9uPFVzZXJEYXRhPjsKK3RlbXBsYXRlIGNsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNVc2VySXRlbTxVc2VyRGF0YT47CisKK2NsYXNzIFF1aXRJdGVtIDogcHVibGljIE5DdXJzZXNNZW51SXRlbQoreworcHVibGljOgorICBRdWl0SXRlbSgpIDogTkN1cnNlc01lbnVJdGVtKCJRdWl0IikgeworICB9CisKKyAgYm9vbCBhY3Rpb24oKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KK307CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIExhYmVsIDogcHVibGljIE5DdXJzZXNGb3JtRmllbGQKK3sKK3B1YmxpYzoKKyAgTGFiZWwoY29uc3QgY2hhciogdGl0bGUsCisgICAgICAgIGludCByb3csIGludCBjb2wpCisgICAgOiBOQ3Vyc2VzRm9ybUZpZWxkKDEsIHN0YXRpY19jYXN0PGludD4oOjpzdHJsZW4odGl0bGUpKSwgcm93LCBjb2wpIHsKKyAgICAgIHNldF92YWx1ZSh0aXRsZSk7CisgICAgICBvcHRpb25zX29mZihPX0VESVR8T19BQ1RJVkUpOworICB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBNeUZpZWxkVHlwZSA6IHB1YmxpYyBVc2VyRGVmaW5lZEZpZWxkVHlwZQoreworcHJpdmF0ZToKKyAgaW50IGNoazsKK3Byb3RlY3RlZDoKKyAgYm9vbCBmaWVsZF9jaGVjayhOQ3Vyc2VzRm9ybUZpZWxkJiBmKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgYm9vbCBjaGFyX2NoZWNrKGludCBjKSB7CisgICAgcmV0dXJuIChjPT1jaGs/VFJVRTpGQUxTRSk7CisgIH0KK3B1YmxpYzoKKyAgTXlGaWVsZFR5cGUoaW50IHgpIDogY2hrKHgpIHsKKyAgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgVGVzdEZvcm0gOiBwdWJsaWMgTkN1cnNlc0Zvcm0KK3sKK3ByaXZhdGU6CisgIE5DdXJzZXNGb3JtRmllbGQqKiBGOworICBNeUZpZWxkVHlwZSogbWZ0OworICBJbnRlZ2VyX0ZpZWxkICppZnQ7CisgIEVudW1lcmF0aW9uX0ZpZWxkICplZnQ7CisKKyAgc3RhdGljIGNvbnN0IGNoYXIgKndlZWtkYXlzW107CisKK3B1YmxpYzoKKyAgVGVzdEZvcm0oKQorICAgIDogTkN1cnNlc0Zvcm0oMTMsIDUxLCAobGluZXMoKSAtIDE1KS8yLCAoY29scygpIC0gNTMpLzIpLAorICAgICAgRigwKSwKKyAgICAgIG1mdCgwKSwKKyAgICAgIGlmdCgwKSwKKyAgICAgIGVmdCgwKQorICB7CisKKyAgICBGICAgICA9IG5ldyBOQ3Vyc2VzRm9ybUZpZWxkKlsxMF07CisgICAgbWZ0ICAgPSBuZXcgTXlGaWVsZFR5cGUoJ1gnKTsKKyAgICBpZnQgICA9IG5ldyBJbnRlZ2VyX0ZpZWxkKDAsIDEsIDEwKTsKKyAgICBlZnQgICA9IG5ldyBFbnVtZXJhdGlvbl9GaWVsZCh3ZWVrZGF5cyk7CisKKyAgICBGWzBdICA9IG5ldyBMYWJlbCgiRGVtbyBFbnRyeSBGb3JtIiwgMCwgMTYpOworICAgIEZbMV0gID0gbmV3IExhYmVsKCJXZWVrZGF5IEVudW0iLCAyLCAxKTsKKyAgICBGWzJdICA9IG5ldyBMYWJlbCgiTnVtYmVyKDEtMTApIiwgMiwgMjEpOworICAgIEZbM10gID0gbmV3IExhYmVsKCJPbmx5ICdYJyIsIDIsIDM1KTsKKyAgICBGWzRdICA9IG5ldyBMYWJlbCgiTXVsdGlsaW5lIEZpZWxkIChEeW5hbWljIGFuZCBTY3JvbGxhYmxlKSIsIDUsIDEpOworICAgIEZbNV0gID0gbmV3IE5DdXJzZXNGb3JtRmllbGQoMSwgMTgsIDMsIDEpOworICAgIEZbNl0gID0gbmV3IE5DdXJzZXNGb3JtRmllbGQoMSwgMTIsIDMsIDIxKTsKKyAgICBGWzddICA9IG5ldyBOQ3Vyc2VzRm9ybUZpZWxkKDEsIDEyLCAzLCAzNSk7CisgICAgRls4XSAgPSBuZXcgTkN1cnNlc0Zvcm1GaWVsZCg0LCA0NiwgNiwgMSwgMik7CisgICAgRls5XSAgPSBuZXcgTkN1cnNlc0Zvcm1GaWVsZCgpOworCisgICAgSW5pdEZvcm0oRiwgVFJVRSwgVFJVRSk7CisgICAgYm9sZGZyYW1lKCk7CisKKyAgICBGWzVdLT5zZXRfZmllbGR0eXBlKCplZnQpOworICAgIEZbNl0tPnNldF9maWVsZHR5cGUoKmlmdCk7CisKKyAgICBGWzddLT5zZXRfZmllbGR0eXBlKCptZnQpOworICAgIEZbN10tPnNldF9tYXhpbXVtX2dyb3d0aCgyMCk7IC8vIG1heC4gMjAgY2hhcmFjdGVycworICAgIEZbN10tPm9wdGlvbnNfb2ZmKE9fU1RBVElDKTsgIC8vIG1ha2UgZmllbGQgZHluYW1pYworCisgICAgRls4XS0+c2V0X21heGltdW1fZ3Jvd3RoKDEwKTsgLy8gbWF4LiAxMCBsaW5lcworICAgIEZbOF0tPm9wdGlvbnNfb2ZmKE9fU1RBVElDKTsgIC8vIG1ha2UgZmllbGQgZHluYW1pYworICB9CisKKyAgVGVzdEZvcm0mIG9wZXJhdG9yPShjb25zdCBUZXN0Rm9ybSYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIFRlc3RGb3JtKGNvbnN0IFRlc3RGb3JtJiByaHMpCisgICAgOiBOQ3Vyc2VzRm9ybShyaHMpLCBGKDApLCBtZnQoMCksIGlmdCgwKSwgZWZ0KDApCisgIHsKKyAgfQorCisgIH5UZXN0Rm9ybSgpIHsKKyAgICBkZWxldGUgbWZ0OworICAgIGRlbGV0ZSBpZnQ7CisgICAgZGVsZXRlIGVmdDsKKyAgfQorfTsKKworY29uc3QgY2hhciogVGVzdEZvcm06OndlZWtkYXlzW10gPSB7CisgICAgIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLAorICAgICJGcmlkYXkiLCAiU2F0dXJkYXkiLCBOVUxMIH07CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIEZvcm1BY3Rpb24gOiBwdWJsaWMgTkN1cnNlc01lbnVJdGVtCit7CitwdWJsaWM6CisgIEZvcm1BY3Rpb24oY29uc3QgY2hhciAqcykgOiBOQ3Vyc2VzTWVudUl0ZW0ocykgeworICB9CisKKyAgYm9vbCBhY3Rpb24oKSB7CisgICAgVGVzdEZvcm0gRjsKKyAgICBTb2Z0X0xhYmVsX0tleV9TZXQqIFMgPSBuZXcgU29mdF9MYWJlbF9LZXlfU2V0OworICAgIGZvcihpbnQgaT0xOyBpIDw9IFMtPmxhYmVscygpOyBpKyspIHsKKyAgICAgIGNoYXIgYnVmWzhdOworICAgICAgYXNzZXJ0KGkgPCAxMDApOworICAgICAgOjpzcHJpbnRmKGJ1ZiwgIkZybSUwMmQiLCBpKTsKKyAgICAgICgqUylbaV0gPSBidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0CisgICAgICAoKlMpW2ldID0gU29mdF9MYWJlbF9LZXlfU2V0OjpTb2Z0X0xhYmVsX0tleTo6TGVmdDsgLy8gSnVzdGlmaWNhdGlvbgorICAgIH0KKyAgICBOQ3Vyc2VzQXBwbGljYXRpb246OmdldEFwcGxpY2F0aW9uKCktPnB1c2goKlMpOworICAgIEYoKTsKKyAgICBOQ3Vyc2VzQXBwbGljYXRpb246OmdldEFwcGxpY2F0aW9uKCktPnBvcCgpOworICAgIGRlbGV0ZSBTOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgUGFkQWN0aW9uIDogcHVibGljIE5DdXJzZXNNZW51SXRlbQoreworcHVibGljOgorICBQYWRBY3Rpb24oY29uc3QgY2hhciogcykgOiBOQ3Vyc2VzTWVudUl0ZW0ocykgeworICB9CisKKyAgYm9vbCBhY3Rpb24oKSB7CisgICAgY29uc3QgaW50IEdSSURTSVpFID0gMzsKKyAgICBjb25zdCBpbnQgUEFEU0laRSAgPSAyMDA7CisgICAgdW5zaWduZWQgZ3JpZGNvdW50ID0gMDsKKworICAgIE5DdXJzZXNQYW5lbCBteXN0ZDsKKyAgICBOQ3Vyc2VzUGFuZWwgUChteXN0ZC5saW5lcygpLTIsIG15c3RkLmNvbHMoKS0yLCAxLCAxKTsKKyAgICBOQ3Vyc2VzRnJhbWVkUGFkIEZQKFAsIFBBRFNJWkUsIFBBRFNJWkUpOworCisgICAgZm9yIChpbnQgaT0wOyBpIDwgUEFEU0laRTsgaSsrKSB7CisgICAgICBmb3IgKGludCBqPTA7IGogPCBQQURTSVpFOyBqKyspIHsKKyAgICAgICAgaWYgKGkgJSBHUklEU0laRSA9PSAwICYmIGogJSBHUklEU0laRSA9PSAwKSB7CisgICAgICAgICAgaWYgKGk9PTAgfHwgaj09MCkKKyAgICAgICAgICAgIEZQLmFkZGNoKCcrJyk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgRlAuYWRkY2goc3RhdGljX2Nhc3Q8Y2h0eXBlPignQScgKyAoZ3JpZGNvdW50KysgJSAyNikpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpICUgR1JJRFNJWkUgPT0gMCkKKyAgICAgICAgICBGUC5hZGRjaCgnLScpOworICAgICAgICBlbHNlIGlmIChqICUgR1JJRFNJWkUgPT0gMCkKKyAgICAgICAgICBGUC5hZGRjaCgnfCcpOworICAgICAgICBlbHNlCisgICAgICAgICAgRlAuYWRkY2goJyAnKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBQLmxhYmVsKCJQYWQgRGVtbyIsIE5VTEwpOworICAgIEZQKCk7CisgICAgUC5jbGVhcigpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfTsKKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBQYXNzaXZlSXRlbSA6IHB1YmxpYyBOQ3Vyc2VzTWVudUl0ZW0KK3sKK3B1YmxpYzoKKyAgUGFzc2l2ZUl0ZW0oY29uc3QgY2hhciogdGV4dCkgOiBOQ3Vyc2VzTWVudUl0ZW0odGV4dCkgeworICAgIG9wdGlvbnNfb2ZmKE9fU0VMRUNUQUJMRSk7CisgIH0KK307CisKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgU2NhbkFjdGlvbiA6IHB1YmxpYyBOQ3Vyc2VzTWVudUl0ZW0KK3sKK3B1YmxpYzoKKyAgU2NhbkFjdGlvbihjb25zdCBjaGFyKiBzKSA6IE5DdXJzZXNNZW51SXRlbShzKSB7CisgIH0KKworICBib29sIGFjdGlvbigpIHsKKyAgICBOQ3Vyc2VzUGFuZWwgKm15c3RkID0gbmV3IE5DdXJzZXNQYW5lbCgpOworCisgICAgTkN1cnNlc1BhbmVsICp3ID0gbmV3IE5DdXJzZXNQYW5lbChteXN0ZC0+bGluZXMoKSAtIDIsIG15c3RkLT5jb2xzKCkgLSAyLCAxLCAxKTsKKyAgICB3LT5ib3goKTsKKyAgICB3LT5yZWZyZXNoKCk7CisKKyAgICBOQ3Vyc2VzUGFuZWwgKnMgPSBuZXcgTkN1cnNlc1BhbmVsKHctPmxpbmVzKCkgLSA2LCB3LT5jb2xzKCkgLSA2LCAzLCAzKTsKKyAgICBzLT5zY3JvbGxvayhUUlVFKTsKKyAgICA6OmVjaG8oKTsKKworICAgIHMtPnByaW50dygiRW50ZXIgZGVjaW1hbCBpbnRlZ2Vycy4gIFRoZSBydW5uaW5nIHRvdGFsIHdpbGwgYmUgc2hvd25cbiIpOworICAgIGludCBudmFsdWUgPSAtMTsKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICB3aGlsZSAobnZhbHVlICE9IDApIHsKKyAgICAgIG52YWx1ZSA9IDA7CisgICAgICBzLT5zY2FudygiJWQiLCAmbnZhbHVlKTsKKyAgICAgIGlmIChudmFsdWUgIT0gMCkgeworICAgICAgICBzLT5wcmludHcoIiVkOiAiLCByZXN1bHQgKz0gbnZhbHVlKTsKKyAgICAgIH0KKyAgICAgIHMtPnJlZnJlc2goKTsKKyAgICB9CisgICAgcy0+cHJpbnR3KCJcblByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKTsKKyAgICBzLT5nZXRjaCgpOworCisgICAgZGVsZXRlIHM7CisgICAgZGVsZXRlIHc7CisgICAgZGVsZXRlIG15c3RkOworICAgIDo6bm9lY2hvKCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9OworCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE15TWVudSA6IHB1YmxpYyBOQ3Vyc2VzTWVudQoreworcHJpdmF0ZToKKyAgTkN1cnNlc1BhbmVsKiBQOworICBOQ3Vyc2VzTWVudUl0ZW0qKiBJOworICBVc2VyRGF0YSAqdTsKKyAgI2RlZmluZSBuX2l0ZW1zIDcKKworcHVibGljOgorICBNeU1lbnUgKCkKKyAgICA6IE5DdXJzZXNNZW51IChuX2l0ZW1zKzIsIDgsIChsaW5lcygpLTEwKS8yLCAoY29scygpLTEwKS8yKSwKKyAgICAgIFAoMCksIEkoMCksIHUoMCkKKyAgeworICAgIHUgPSBuZXcgVXNlckRhdGEoMSk7CisgICAgSSA9IG5ldyBOQ3Vyc2VzTWVudUl0ZW0qWzErbl9pdGVtc107CisgICAgSVswXSA9IG5ldyBQYXNzaXZlSXRlbSgiT25lIik7CisgICAgSVsxXSA9IG5ldyBQYXNzaXZlSXRlbSgiVHdvIik7CisgICAgSVsyXSA9IG5ldyBNeUFjdGlvbjxVc2VyRGF0YT4gKCJTaWxseSIsIHUpOworICAgIElbM10gPSBuZXcgRm9ybUFjdGlvbigiRm9ybSIpOworICAgIElbNF0gPSBuZXcgUGFkQWN0aW9uKCJQYWQiKTsKKyAgICBJWzVdID0gbmV3IFNjYW5BY3Rpb24oIlNjYW4iKTsKKyAgICBJWzZdID0gbmV3IFF1aXRJdGVtKCk7CisgICAgSVs3XSA9IG5ldyBOQ3Vyc2VzTWVudUl0ZW0oKTsgLy8gVGVybWluYXRpbmcgZW1wdHkgaXRlbQorCisgICAgSW5pdE1lbnUoSSwgVFJVRSwgVFJVRSk7CisKKyAgICBQID0gbmV3IE5DdXJzZXNQYW5lbCgxLCBuX2l0ZW1zLCBMSU5FUy0xLCAxKTsKKyAgICBib2xkZnJhbWUoIkRlbW8iLCAiU2lsbHkiKTsKKyAgICBQLT5zaG93KCk7CisgIH0KKworICBNeU1lbnUmIG9wZXJhdG9yPShjb25zdCBNeU1lbnUmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBNeU1lbnUoY29uc3QgTXlNZW51JiByaHMpCisgICAgOiBOQ3Vyc2VzTWVudShyaHMpLCBQKDApLCBJKDApLCB1KDApCisgIHsKKyAgfQorCisgIH5NeU1lbnUoKQorICB7CisgICAgUC0+aGlkZSgpOworICAgIGRlbGV0ZSBQOworICAgIGRlbGV0ZSB1OworICB9CisKKyAgdmlydHVhbCB2b2lkIE9uX01lbnVfSW5pdCgpCisgIHsKKyAgICBOQ3Vyc2VzV2luZG93IFcoOjpzdGRzY3IpOworICAgIFAtPm1vdmUoMCwgMCk7CisgICAgUC0+Y2xydG9lb2woKTsKKyAgICBmb3IoaW50IGk9MTsgaTw9Y291bnQoKTsgaSsrKQorICAgICAgUC0+YWRkY2goJzAnICsgaSk7CisgICAgUC0+YmtnZChXLmdldGJrZ2QoKSk7CisgICAgcmVmcmVzaCgpOworICB9CisKKyAgdmlydHVhbCB2b2lkIE9uX01lbnVfVGVybWluYXRpb24oKQorICB7CisgICAgUC0+bW92ZSgwLCAwKTsKKyAgICBQLT5jbHJ0b2VvbCgpOworICAgIHJlZnJlc2goKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBPbl9JdGVtX0luaXQoTkN1cnNlc01lbnVJdGVtJiBpdGVtKQorICB7CisgICAgUC0+bW92ZSgwLCBpdGVtLmluZGV4KCkpOworICAgIFAtPmF0dHJvbihBX1JFVkVSU0UpOworICAgIFAtPnByaW50dygiJTFkIiwgMStpdGVtLmluZGV4KCkpOworICAgIFAtPmF0dHJvZmYoQV9SRVZFUlNFKTsKKyAgICByZWZyZXNoKCk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgT25fSXRlbV9UZXJtaW5hdGlvbihOQ3Vyc2VzTWVudUl0ZW0mIGl0ZW0pCisgIHsKKyAgICBQLT5tb3ZlKDAsIGl0ZW0uaW5kZXgoKSk7CisgICAgUC0+YXR0cm9mZihBX1JFVkVSU0UpOworICAgIFAtPnByaW50dygiJTFkIiwgMStpdGVtLmluZGV4KCkpOworICAgIHJlZnJlc2goKTsKKyAgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgVGVzdEFwcGxpY2F0aW9uIDogcHVibGljIE5DdXJzZXNBcHBsaWNhdGlvbgoreworcHJvdGVjdGVkOgorICBpbnQgdGl0bGVzaXplKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICB2b2lkIHRpdGxlKCk7CisgIFNvZnRfTGFiZWxfS2V5X1NldDo6TGFiZWxfTGF5b3V0IHVzZVNMS3MoKSBjb25zdCB7CisgICAgcmV0dXJuIFNvZnRfTGFiZWxfS2V5X1NldDo6UENfU3R5bGVfV2l0aF9JbmRleDsKKyAgfQorICB2b2lkIGluaXRfbGFiZWxzKFNvZnRfTGFiZWxfS2V5X1NldCYgUykgY29uc3Q7CisKK3B1YmxpYzoKKyAgVGVzdEFwcGxpY2F0aW9uKCkgOiBOQ3Vyc2VzQXBwbGljYXRpb24oVFJVRSkgeworICB9CisKKyAgaW50IHJ1bigpOworfTsKKwordm9pZCBUZXN0QXBwbGljYXRpb246OmluaXRfbGFiZWxzKFNvZnRfTGFiZWxfS2V5X1NldCYgUykgY29uc3QKK3sKKyAgZm9yKGludCBpPTE7IGkgPD0gUy5sYWJlbHMoKTsgaSsrKSB7CisgICAgY2hhciBidWZbOF07CisgICAgYXNzZXJ0KGkgPCAxMDApOworICAgIDo6c3ByaW50ZihidWYsICJLZXklMDJkIiwgaSk7CisgICAgU1tpXSA9IGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRleHQKKyAgICBTW2ldID0gU29mdF9MYWJlbF9LZXlfU2V0OjpTb2Z0X0xhYmVsX0tleTo6TGVmdDsgLy8gSnVzdGlmaWNhdGlvbgorICB9Cit9CisKK3ZvaWQgVGVzdEFwcGxpY2F0aW9uOjp0aXRsZSgpCit7CisgIGNvbnN0IGNoYXIgKiBjb25zdCB0aXRsZVRleHQgPSAiU2ltcGxlIEMrKyBCaW5kaW5nIERlbW8iOworICBjb25zdCBpbnQgbGVuID0gOjpzdHJsZW4odGl0bGVUZXh0KTsKKworICB0aXRsZVdpbmRvdy0+YmtnZChzY3JlZW5fdGl0bGVzKCkpOworICB0aXRsZVdpbmRvdy0+YWRkc3RyKDAsICh0aXRsZVdpbmRvdy0+Y29scygpIC0gbGVuKS8yLCB0aXRsZVRleHQpOworICB0aXRsZVdpbmRvdy0+bm91dHJlZnJlc2goKTsKK30KKworCitpbnQgVGVzdEFwcGxpY2F0aW9uOjpydW4oKQoreworICBNeU1lbnUgTTsKKyAgTSgpOworICByZXR1cm4gMDsKK30KKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitzdGF0aWMgVGVzdEFwcGxpY2F0aW9uICpEZW1vID0gbmV3IFRlc3RBcHBsaWNhdGlvbigpOwpkaWZmIC0tZ2l0IGEvYysrL2VkaXRfY2ZnLnNoIGIvYysrL2VkaXRfY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczYzMxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvZWRpdF9jZmcuc2gKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisjICRJZDogZWRpdF9jZmcuc2gsdiAxLjE3IDIwMDgvMDgvMzAgMTk6NDQ6MjUgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk3LW9uCisjCisjIEVkaXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGV0aXAuaCBmaWxlIGJhc2VkIG9uIHRoZSBhdXRvY29uZi1nZW5lcmF0ZWQKKyMgdmFsdWVzOgorIworIwkkMSA9IG5jdXJzZXNfY2ZnLmgKKyMJJDIgPSBldGlwLmgKKyMKK2VjaG8gInN1YnN0aXR1dGluZyBhdXRvY29uZidkIHZhbHVlcyBmcm9tICQxIGludG8gJDIiCitmb3IgbmFtZSBpbiBcCisJQ1BQX0hBU19QQVJBTV9JTklUIFwKKwlDUFBfSEFTX1NUQVRJQ19DQVNUIFwKKwlFVElQX05FRURTX01BVEhfRVhDRVBUSU9OIFwKKwlFVElQX05FRURTX01BVEhfSCBcCisJSEFWRV9CVUlMVElOX0ggXAorCUhBVkVfR1BQX0JVSUxUSU5fSCBcCisJSEFWRV9HWFhfQlVJTFRJTl9IIFwKKwlIQVZFX0lPU1RSRUFNIFwKKwlIQVZFX1RZUEVJTkZPIFwKKwlIQVZFX1ZBTFVFU19IIFwKKwlJT1NUUkVBTV9OQU1FU1BBQ0UKK2RvCisJcm0gLWYgJDIuYmFrCisJbXYgJDIgJDIuYmFrCisJaWYgKCBncmVwICJbIAldJG5hbWVbIAldMSIgJDEgMj4mMSA+L2Rldi9udWxsKQorCXRoZW4KKwkJdmFsdWU9MQorCQlzZWQgLWUgJ3MvZGVmaW5lICckbmFtZScuKiQvZGVmaW5lICckbmFtZScgMS8nICQyLmJhayA+JDIKKwllbHNlCisJCXZhbHVlPTAKKwkJc2VkIC1lICdzL2RlZmluZSAnJG5hbWUnLiokL2RlZmluZSAnJG5hbWUnIDAvJyAkMi5iYWsgPiQyCisJZmkKKwlpZiAoY21wIC1zICQyICQyLmJhaykKKwl0aGVuCisJCWVjaG8gJy4uLiAnJG5hbWUgJHZhbHVlCisJCW12ICQyLmJhayAkMgorCWVsc2UKKwkJZWNobyAnLi4uICckbmFtZSAkdmFsdWUKKwkJcm0gLWYgJDIuYmFrCisJZmkKK2RvbmUKZGlmZiAtLWdpdCBhL2MrKy9ldGlwLmguaW4gYi9jKysvZXRpcC5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjQyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jKysvZXRpcC5oLmluCkBAIC0wLDAgKzEsMzc4IEBACisvLyAqIFRoaXMgbWFrZXMgZW1hY3MgaGFwcHkgLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gJElkOiBldGlwLmguaW4sdiAxLjM3IDIwMDgvMDgvMzAgMTk6Mjc6MzIgdG9tIEV4cCAkCisKKyNpZm5kZWYgTkNVUlNFU19FVElQX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX0VUSVBfSF9pbmNsIDEKKworLy8gVGhlc2UgYXJlIHN1YnN0aXR1dGVkIGF0IGNvbmZpZ3VyZS9idWlsZCB0aW1lCisjaWZuZGVmIEhBVkVfQlVJTFRJTl9ICisjZGVmaW5lIEhBVkVfQlVJTFRJTl9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfR1hYX0JVSUxUSU5fSAorI2RlZmluZSBIQVZFX0dYWF9CVUlMVElOX0ggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HUFBfQlVJTFRJTl9ICisjZGVmaW5lIEhBVkVfR1BQX0JVSUxUSU5fSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0lPU1RSRUFNCisjZGVmaW5lIEhBVkVfSU9TVFJFQU0gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9UWVBFSU5GTworI2RlZmluZSBIQVZFX1RZUEVJTkZPIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVkFMVUVTX0gKKyNkZWZpbmUgSEFWRV9WQUxVRVNfSCAwCisjZW5kaWYKKworI2lmbmRlZiBFVElQX05FRURTX01BVEhfSAorI2RlZmluZSBFVElQX05FRURTX01BVEhfSCAwCisjZW5kaWYKKworI2lmbmRlZiBFVElQX05FRURTX01BVEhfRVhDRVBUSU9OCisjZGVmaW5lIEVUSVBfTkVFRFNfTUFUSF9FWENFUFRJT04gMAorI2VuZGlmCisKKyNpZm5kZWYgQ1BQX0hBU19QQVJBTV9JTklUCisjZGVmaW5lIENQUF9IQVNfUEFSQU1fSU5JVCAwCisjZW5kaWYKKworI2lmbmRlZiBDUFBfSEFTX1NUQVRJQ19DQVNUCisjZGVmaW5lIENQUF9IQVNfU1RBVElDX0NBU1QgMAkvLyB3b3JrYXJvdW5kIGZvciBnKysgMi45NS4zCisjZW5kaWYKKworI2lmbmRlZiBJT1NUUkVBTV9OQU1FU1BBQ0UKKyNkZWZpbmUgSU9TVFJFQU1fTkFNRVNQQUNFIDAKKyNlbmRpZgorCisjaWZkZWYgX19HTlVHX18KKyMgIGlmICgoX19HTlVHX18gPD0gMikgJiYgKF9fR05VQ19NSU5PUl9fIDwgOCkpCisjICAgIGlmIEhBVkVfVFlQRUlORk8KKyMgICAgICBpbmNsdWRlIDx0eXBlaW5mbz4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVHX18pCisjICBpZiBIQVZFX0JVSUxUSU5fSCB8fCBIQVZFX0dYWF9CVUlMVElOX0ggfHwgSEFWRV9HUFBfQlVJTFRJTl9ICisjICAgIGlmIEVUSVBfTkVFRFNfTUFUSF9ICisjICAgICAgaWYgRVRJUF9ORUVEU19NQVRIX0VYQ0VQVElPTgorIyAgICAgICAgdW5kZWYgZXhjZXB0aW9uCisjICAgICAgICBkZWZpbmUgZXhjZXB0aW9uIG1hdGhfZXhjZXB0aW9uCisjICAgICAgZW5kaWYKKyMgICAgICBpbmNsdWRlIDxtYXRoLmg+CisjICAgIGVuZGlmCisjICAgIHVuZGVmIGV4Y2VwdGlvbgorIyAgICBkZWZpbmUgZXhjZXB0aW9uIGJ1aWx0aW5fZXhjZXB0aW9uCisjICAgIGlmIEhBVkVfR1BQX0JVSUxUSU5fSAorIyAgICAgaW5jbHVkZSA8Z3BwL2J1aWx0aW4uaD4KKyMgICAgZWxpZiBIQVZFX0dYWF9CVUlMVElOX0gKKyMgICAgIGluY2x1ZGUgPGcrKy9idWlsdGluLmg+CisjICAgIGVsc2UKKyMgICAgIGluY2x1ZGUgPGJ1aWx0aW4uaD4KKyMgICAgZW5kaWYKKyMgICAgdW5kZWYgZXhjZXB0aW9uCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCAoX19TVU5QUk9fQ0MpCisjICBpbmNsdWRlIDxnZW5lcmljLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5jdXJzZXNfZGxsLmg+CisKK2V4dGVybiAiQyIgeworI2lmIEhBVkVfVkFMVUVTX0gKKyMgIGluY2x1ZGUgPHZhbHVlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxldGkuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorfQorCisvLyBMYW5ndWFnZSBmZWF0dXJlcworI2lmIENQUF9IQVNfUEFSQU1fSU5JVAorI2RlZmluZSBOQ1VSU0VTX1BBUkFNX0lOSVQodmFsdWUpID0gdmFsdWUKKyNlbHNlCisjZGVmaW5lIE5DVVJTRVNfUEFSQU1fSU5JVCh2YWx1ZSkgLypub3RoaW5nKi8KKyNlbmRpZgorCisjaWYgQ1BQX0hBU19TVEFUSUNfQ0FTVAorI2RlZmluZSBTVEFUSUNfQ0FTVChzKSBzdGF0aWNfY2FzdDxzPgorI2Vsc2UKKyNkZWZpbmUgU1RBVElDX0NBU1QocykgKHMpCisjZW5kaWYKKworLy8gRm9yd2FyZCBEZWNsYXJhdGlvbnMKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNQYW5lbDsKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNNZW51OworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0Zvcm07CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNFeGNlcHRpb24KK3sKK3B1YmxpYzoKKyAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgaW50IGVycm9ybm87CisKKyAgTkN1cnNlc0V4Y2VwdGlvbiAoY29uc3QgY2hhciogbXNnLCBpbnQgZXJyKQorICAgIDogbWVzc2FnZShtc2cpLCBlcnJvcm5vIChlcnIpCisgICAge307CisKKyAgTkN1cnNlc0V4Y2VwdGlvbiAoY29uc3QgY2hhciogbXNnKQorICAgIDogbWVzc2FnZShtc2cpLCBlcnJvcm5vIChFX1NZU1RFTV9FUlJPUikKKyAgICB7fTsKKworICBOQ3Vyc2VzRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc0V4Y2VwdGlvbiYgcmhzKQorICB7CisgICAgZXJyb3JubyA9IHJocy5lcnJvcm5vOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNFeGNlcHRpb24oY29uc3QgTkN1cnNlc0V4Y2VwdGlvbiYgcmhzKQorICAgIDogbWVzc2FnZShyaHMubWVzc2FnZSksIGVycm9ybm8ocmhzLmVycm9ybm8pCisgIHsKKyAgfQorCisgIHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NuYW1lKCkgY29uc3QgeworICAgIHJldHVybiAiTkN1cnNlc1dpbmRvdyI7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzRXhjZXB0aW9uKCkKKyAgeworICB9Cit9OworCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24gOiBwdWJsaWMgTkN1cnNlc0V4Y2VwdGlvbgoreworcHVibGljOgorICBjb25zdCBOQ3Vyc2VzUGFuZWwqIHA7CisKKyAgTkN1cnNlc1BhbmVsRXhjZXB0aW9uIChjb25zdCBjaGFyICptc2csIGludCBlcnIpIDoKKyAgICBOQ3Vyc2VzRXhjZXB0aW9uIChtc2csIGVyciksCisgICAgcCAoTlVMTCkKKyAgICB7fTsKKworICBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24gKGNvbnN0IE5DdXJzZXNQYW5lbCogcGFuZWwsCisJCQkgY29uc3QgY2hhciAqbXNnLAorCQkJIGludCBlcnIpIDoKKyAgICBOQ3Vyc2VzRXhjZXB0aW9uIChtc2csIGVyciksCisgICAgcCAocGFuZWwpCisgICAge307CisKKyAgTkN1cnNlc1BhbmVsRXhjZXB0aW9uIChpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAoInBhbmVsIGxpYnJhcnkgZXJyb3IiLCBlcnIpLAorICAgIHAgKE5VTEwpCisgICAge307CisKKyAgTkN1cnNlc1BhbmVsRXhjZXB0aW9uIChjb25zdCBOQ3Vyc2VzUGFuZWwqIHBhbmVsLAorCQkJIGludCBlcnIpIDoKKyAgICBOQ3Vyc2VzRXhjZXB0aW9uICgicGFuZWwgbGlicmFyeSBlcnJvciIsIGVyciksCisgICAgcCAocGFuZWwpCisgICAge307CisKKyAgTkN1cnNlc1BhbmVsRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc1BhbmVsRXhjZXB0aW9uJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICBOQ3Vyc2VzRXhjZXB0aW9uOjpvcGVyYXRvcj0ocmhzKTsKKyAgICAgIHAgPSByaHMucDsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc1BhbmVsRXhjZXB0aW9uKGNvbnN0IE5DdXJzZXNQYW5lbEV4Y2VwdGlvbiYgcmhzKQorICAgIDogTkN1cnNlc0V4Y2VwdGlvbihyaHMpLCBwKHJocy5wKQorICB7CisgIH0KKworICB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzbmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gIk5DdXJzZXNQYW5lbCI7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzUGFuZWxFeGNlcHRpb24oKQorICB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNNZW51RXhjZXB0aW9uIDogcHVibGljIE5DdXJzZXNFeGNlcHRpb24KK3sKK3B1YmxpYzoKKyAgY29uc3QgTkN1cnNlc01lbnUqIG07CisKKyAgTkN1cnNlc01lbnVFeGNlcHRpb24gKGNvbnN0IGNoYXIgKm1zZywgaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKG1zZywgZXJyKSwKKyAgICBtIChOVUxMKQorICAgIHt9OworCisgIE5DdXJzZXNNZW51RXhjZXB0aW9uIChjb25zdCBOQ3Vyc2VzTWVudSogbWVudSwKKwkJCWNvbnN0IGNoYXIgKm1zZywKKwkJCWludCBlcnIpIDoKKyAgICBOQ3Vyc2VzRXhjZXB0aW9uIChtc2csIGVyciksCisgICAgbSAobWVudSkKKyAgICB7fTsKKworICBOQ3Vyc2VzTWVudUV4Y2VwdGlvbiAoaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKCJtZW51IGxpYnJhcnkgZXJyb3IiLCBlcnIpLAorICAgIG0gKE5VTEwpCisgICAge307CisKKyAgTkN1cnNlc01lbnVFeGNlcHRpb24gKGNvbnN0IE5DdXJzZXNNZW51KiBtZW51LAorCQkJaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKCJtZW51IGxpYnJhcnkgZXJyb3IiLCBlcnIpLAorICAgIG0gKG1lbnUpCisgICAge307CisKKyAgTkN1cnNlc01lbnVFeGNlcHRpb24mIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzTWVudUV4Y2VwdGlvbiYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgTkN1cnNlc0V4Y2VwdGlvbjo6b3BlcmF0b3I9KHJocyk7CisgICAgICBtID0gcmhzLm07CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNNZW51RXhjZXB0aW9uKGNvbnN0IE5DdXJzZXNNZW51RXhjZXB0aW9uJiByaHMpCisgICAgOiBOQ3Vyc2VzRXhjZXB0aW9uKHJocyksIG0ocmhzLm0pCisgIHsKKyAgfQorCisgIHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NuYW1lKCkgY29uc3QgeworICAgIHJldHVybiAiTkN1cnNlc01lbnUiOworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc01lbnVFeGNlcHRpb24oKQorICB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNGb3JtRXhjZXB0aW9uIDogcHVibGljIE5DdXJzZXNFeGNlcHRpb24KK3sKK3B1YmxpYzoKKyAgY29uc3QgTkN1cnNlc0Zvcm0qIGY7CisKKyAgTkN1cnNlc0Zvcm1FeGNlcHRpb24gKGNvbnN0IGNoYXIgKm1zZywgaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKG1zZywgZXJyKSwKKyAgICBmIChOVUxMKQorICAgIHt9OworCisgIE5DdXJzZXNGb3JtRXhjZXB0aW9uIChjb25zdCBOQ3Vyc2VzRm9ybSogZm9ybSwKKwkJCWNvbnN0IGNoYXIgKm1zZywKKwkJCWludCBlcnIpIDoKKyAgICBOQ3Vyc2VzRXhjZXB0aW9uIChtc2csIGVyciksCisgICAgZiAoZm9ybSkKKyAgICB7fTsKKworICBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiAoaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKCJmb3JtIGxpYnJhcnkgZXJyb3IiLCBlcnIpLAorICAgIGYgKE5VTEwpCisgICAge307CisKKyAgTkN1cnNlc0Zvcm1FeGNlcHRpb24gKGNvbnN0IE5DdXJzZXNGb3JtKiBmb3JtLAorCQkJaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKCJmb3JtIGxpYnJhcnkgZXJyb3IiLCBlcnIpLAorICAgIGYgKGZvcm0pCisgICAge307CisKKyAgTkN1cnNlc0Zvcm1FeGNlcHRpb24mIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgTkN1cnNlc0V4Y2VwdGlvbjo6b3BlcmF0b3I9KHJocyk7CisgICAgICBmID0gcmhzLmY7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNGb3JtRXhjZXB0aW9uKGNvbnN0IE5DdXJzZXNGb3JtRXhjZXB0aW9uJiByaHMpCisgICAgOiBOQ3Vyc2VzRXhjZXB0aW9uKHJocyksIGYocmhzLmYpCisgIHsKKyAgfQorCisgIHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NuYW1lKCkgY29uc3QgeworICAgIHJldHVybiAiTkN1cnNlc0Zvcm0iOworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc0Zvcm1FeGNlcHRpb24oKQorICB7CisgIH0KK307CisKKyNpZiAhKChkZWZpbmVkKF9fR05VR19fKSAmJiBkZWZpbmVkKF9fRVhDRVBUSU9OUykpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpKQorIyAgaWYgSEFWRV9JT1NUUkVBTQorIyAgICAgaW5jbHVkZSA8aW9zdHJlYW0+CisjICAgICBpZiBJT1NUUkVBTV9OQU1FU1BBQ0UKK3VzaW5nIHN0ZDo6Y2VycjsKK3VzaW5nIHN0ZDo6ZW5kbDsKKyMgICAgIGVuZGlmCisjICBlbHNlCisjICAgICBpbmNsdWRlIDxpb3N0cmVhbS5oPgorIyAgZW5kaWYKKyAgIGV4dGVybiAiQyIgdm9pZCBleGl0KGludCk7CisjZW5kaWYKKworaW5saW5lIHZvaWQgVEhST1coY29uc3QgTkN1cnNlc0V4Y2VwdGlvbiAqZSkgeworI2lmIGRlZmluZWQoX19HTlVHX18pICYmIGRlZmluZWQoX19FWENFUFRJT05TKQorIyAgaWYgKChfX0dOVUdfXyA8PSAyKSAmJiAoX19HTlVDX01JTk9SX18gPCA4KSkKKyAgICAgICgqbGliX2Vycm9yX2hhbmRsZXIpKGUgPyBlLT5jbGFzc25hbWUoKSA6ICIiLCBlID8gZS0+bWVzc2FnZSA6ICIiKTsKKyNlbHNlCisjZGVmaW5lIENQUF9IQVNfVFJZX0NBVENIIDEKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX1NVTlBST19DQykKKyMgIGlmICFkZWZpbmVkKF9fU1VOUFJPX0NDX0NPTVBBVCkgfHwgKF9fU1VOUFJPX0NDX0NPTVBBVCA8IDUpCisgIGdlbmVyaWNlcnJvcigxLCAoKGUgIT0gMCkgPyAoY2hhciAqKShlLT5tZXNzYWdlKSA6ICIiKSk7CisjZWxzZQorI2RlZmluZSBDUFBfSEFTX1RSWV9DQVRDSCAxCisjZW5kaWYKKyNlbHNlCisgIGlmIChlKQorICAgIGNlcnIgPDwgZS0+bWVzc2FnZSA8PCBlbmRsOworICBleGl0KDApOworI2VuZGlmCisKKyNpZm5kZWYgQ1BQX0hBU19UUllfQ0FUQ0gKKyNkZWZpbmUgQ1BQX0hBU19UUllfQ0FUQ0ggMAorI2RlZmluZSBOQ1VSU0VTX0NQUF9UUlkJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgTkNVUlNFU19DUFBfQ0FUQ0goZSkJaWYgKGZhbHNlKQorI2RlZmluZSBUSFJPV1MocykJCS8qIG5vdGhpbmcgKi8KKyNlbGlmIENQUF9IQVNfVFJZX0NBVENICisgIHRocm93ICplOworI2RlZmluZSBOQ1VSU0VTX0NQUF9UUlkJCXRyeQorI2RlZmluZSBOQ1VSU0VTX0NQUF9DQVRDSChlKQljYXRjaChlKQorI2RlZmluZSBUSFJPV1MocykJCXRocm93KHMpCisjZW5kaWYKK30KKworI2VuZGlmIC8qIE5DVVJTRVNfRVRJUF9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2MrKy9oZWFkZXJzIGIvYysrL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlMDMxMQotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9oZWFkZXJzCkBAIC0wLDAgKzEsNDAgQEAKKyMgQysrIGhlYWRlcnMKKyMgJElkOiBoZWFkZXJzLHYgMS4zIDIwMDYvMTIvMjQgMTY6MjU6NDUgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NworIworJChzcmNkaXIpL2N1cnNlc2FwcC5oCiskKHNyY2RpcikvY3Vyc2VzZi5oCiskKHNyY2RpcikvY3Vyc2VzbS5oCiskKHNyY2RpcikvY3Vyc2VzcC5oCiskKHNyY2RpcikvY3Vyc2Vzdy5oCiskKHNyY2RpcikvY3Vyc3Nsay5oCitldGlwLmgKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvYysrL2ludGVybmFsLmggYi9jKysvaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDY2ZTcyCi0tLSAvZGV2L251bGwKKysrIGIvYysrL2ludGVybmFsLmgKQEAgLTAsMCArMSw2MCBAQAorLy8gKiBUaGlzIG1ha2VzIGVtYWNzIGhhcHB5IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vICRJZDogaW50ZXJuYWwuaCx2IDEuMTYgMjAwOC8xMC8yNSAyMTozNTo0NCB0b20gRXhwICQKKworI2lmbmRlZiBOQ1VSU0VTX0NQTFVTX0lOVEVSTkFMX0gKKyNkZWZpbmUgTkNVUlNFU19DUExVU19JTlRFUk5BTF9IIDEKKworI2luY2x1ZGUgPG5jdXJzZXNfY2ZnLmg+CisKKyNpZiBVU0VfUkNTX0lEUworI2RlZmluZSBNT0RVTEVfSUQoaWQpIHN0YXRpYyBjb25zdCBjaGFyIElkZW50W10gPSBpZDsKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9JRChpZCkgLypub3RoaW5nKi8KKyNlbmRpZgorCisjaWZuZGVmIF9RTlhfU09VUkNFCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmbmRlZiBDVFJMCisjZGVmaW5lIENUUkwoeCkgKCh4KSAmIDB4MWYpCisjZW5kaWYKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNlbmRpZiAvKiBOQ1VSU0VTX0NQTFVTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2MrKy9tb2R1bGVzIGIvYysrL21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZmFlNQotLS0gL2Rldi9udWxsCisrKyBiL2MrKy9tb2R1bGVzCkBAIC0wLDAgKzEsNDUgQEAKKyMgUHJvZ3JhbSBtb2R1bGVzCisjICRJZDogbW9kdWxlcyx2IDEuNyAyMDA2LzEyLzI0IDAwOjUzOjA4IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5NS1vbgorIworCitAIGJhc2UKK2N1cnNlc2YJCWMrKwkJJChzcmNkaXIpCSQoY3Vyc2VzZl9oKSAkKGN1cnNlc2FwcF9oKQorY3Vyc2VzbQkJYysrCQkkKHNyY2RpcikJJChjdXJzZXNtX2gpICQoY3Vyc2VzYXBwX2gpCitjdXJzZXNwCQljKysJCSQoc3JjZGlyKQkkKGN1cnNlc3BfaCkKK2N1cnNlc3cJCWMrKwkJJChzcmNkaXIpCSQoY3Vyc2Vzd19oKQorY3Vyc2VzcGFkCWMrKwkJJChzcmNkaXIpCSQoY3Vyc2Vzd19oKQorY3Vyc3NsawkJYysrCQkkKHNyY2RpcikJJChjdXJzc2xrX2gpICQoY3Vyc2VzYXBwX2gpCitjdXJzZXNhcHAJYysrCQkkKHNyY2RpcikJJChjdXJzZXNhcHBfaCkKK2N1cnNlc21haW4JYysrCQkkKHNyY2RpcikJJChjdXJzZXNhcHBfaCkKK2RlbW8JCWMrKwkJJChzcmNkaXIpCSQoY3Vyc2VzZl9oKSAkKGN1cnNlc21faCkgJChjdXJzZXNhcHBfaCkKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzc2MDdjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MjYgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDgtMDQtMTQnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIgPHBlckBib3RobmVyLmNvbT4uCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBUaGUgcGxhbiBpcyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBieSBjb25maWd1cmUgc2NyaXB0cyBpZiB5b3UKKyMgZG9uJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBidWlsZCBzeXN0ZW0gdHlwZS4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHksIG9yIHdpbGwgaW4gdGhlIGZ1dHVyZS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCSAgICAgICAgb3M9bmV0YnNkCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkgICAgICAgIFVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjQuNSAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7CisJICAgICJFVjUuNiAoMjExNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKKwkgICAgIkVWNS42ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OworCSAgICAiRVY2ICgyMTI2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44QUwgKDIxMjY0QikiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7CisJICAgICJFVjcgKDIxMzY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlleGl0IDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKyAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKKyAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZWNobyBpMzg2LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjYqOiopCisJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKKwkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAorCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6KjoqKQorCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAorCQk7OworCWVzYWMKKwkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCisJZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKKwlleGl0IDs7CisgICAgc3VuMyo6U3VuT1M6KjoqKQorCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHN1bio6Kjo0LjJCU0Q6KikKKwlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAorCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9ICJ4IiAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlICJgL2Jpbi9hcmNoYCIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoqOiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRSSVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9CU0Q0MykgfHwgZGVmaW5lZChTWVNUWVBFX0JTRCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc2JzZFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJZXhpdCA7OworICAgIG04OGs6Q1gvVVg6Nyo6KikKKwllY2hvIG04OGstaGFycmlzLWN4dXg3CisJZXhpdCA7OworICAgIG04OGs6Kjo0KjpSNCopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0CisJZXhpdCA7OworICAgIG04OGs6KjozKjpSMyopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIEFWaWlPTjpkZ3V4Oio6KikKKyAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKyAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgCWV4aXQgOzsKKyAgICBNODgqOkRvbHBoaW5PUzoqOiopCSMgRG9scGhpbk9TIChTVlIzKQorCWVjaG8gbTg4ay1kb2xwaGluLXN5c3YzCisJZXhpdCA7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIFhEODgqOio6KjoqKSAjIFRla3Ryb25peCBYRDg4IHN5c3RlbSBydW5uaW5nIFVUZWtWIChTVlIzKQorCWVjaG8gbTg4ay10ZWt0cm9uaXgtc3lzdjMKKwlleGl0IDs7CisgICAgVGVrNDNbMC05XVswLTldOlVUZWs6KjoqKSAjIFRla3Ryb25peCA0MzAwIHN5c3RlbSBydW5uaW5nIFVUZWsgKEJTRCkKKwllY2hvIG02OGstdGVrdHJvbml4LWJzZAorCWV4aXQgOzsKKyAgICAqOklSSVgqOio6KikKKwllY2hvIG1pcHMtc2dpLWlyaXhgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vZydgCisJZXhpdCA7OworICAgID8/Pz8/Pz8/OkFJWD86WzEyXS4xOjIpICAgIyBBSVggMi4yLjEgb3IgQUlYIDIuMS4xIGlzIFJUL1BDIEFJWC4KKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMpCisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlpZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKKwllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKKwllbHNlCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKwlmaQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOls0NTZdKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorICAgICAgICAgICAgICAgICAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorICAgICAgICAgICAgICAgICAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorICAgICAgICAgICAgICAgICAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKworICAgICAgICAgICAgICAjZGVmaW5lIF9IUFVYX1NPVVJDRQorICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKworICAgICAgICAgICAgICBpbnQgbWFpbiAoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNwdSkKKyAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMl8wOgorICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgIAkgICAgc3dpdGNoIChiaXRzKQorICAgICAgICAgICAgICAJCXsKKyAgICAgICAgICAgICAgCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworICAgICAgICAgICAgICAJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJCX0gYnJlYWs7CisgICAgICAgICAgICAgICNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisgICAgICAgICAgICAgIAkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgICAgICAgfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCBfX0xQNjRfXyA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIENSQVkqWS1NUDoqOio6KikKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorICAgICAgICBleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgcGM5OCkKKwkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOlszNDU2XSopCisgICAgCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIEVNNjRUIHwgYXV0aGVudGljYW1kKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gY3Jpcy1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvIGNyaXN2MzItYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKyAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgbWlwcworCSN1bmRlZiBtaXBzZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPW1pcHMKKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15DUFUveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzNjQKKwkjdW5kZWYgbWlwczY0ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzNjRlbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9bWlwczY0CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eQ1BVL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvIG9yMzItdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgICAgICAgIGVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIGxkLnNvLjEgPi9kZXYvbnVsbAorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbworCSMgZmlyc3Qgc2VlIGlmIGl0IHdpbGwgdGVsbCB1cy4gY2QgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHByZXZlbnQKKwkjIHByb2JsZW1zIHdpdGggb3RoZXIgcHJvZ3JhbXMgb3IgZGlyZWN0b3JpZXMgY2FsbGVkIGBsZCcgaW4gdGhlIHBhdGguCisJIyBTZXQgTENfQUxMPUMgdG8gZW5zdXJlIGxkIG91dHB1dHMgbWVzc2FnZXMgaW4gRW5nbGlzaC4KKwlsZF9zdXBwb3J0ZWRfdGFyZ2V0cz1gY2QgLzsgTENfQUxMPUMgbGQgLS1oZWxwIDI+JjEgXAorCQkJIHwgc2VkIC1uZSAnL3N1cHBvcnRlZCB0YXJnZXRzOi8hZAorCQkJCSAgICBzL1sgCV1bIAldKi8gL2cKKwkJCQkgICAgcy8uKnN1cHBvcnRlZCB0YXJnZXRzOiAqLy8KKwkJCQkgICAgcy8gLiovLworCQkJCSAgICBwJ2AKKyAgICAgICAgY2FzZSAiJGxkX3N1cHBvcnRlZF90YXJnZXRzIiBpbgorCSAgZWxmMzItaTM4NikKKwkJVEVOVEFUSVZFPSIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudSIKKwkJOzsKKwkgIGEub3V0LWkzODYtbGludXgpCisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKKwkJZXhpdCA7OworCSAgIiIpCisJCSMgRWl0aGVyIGEgcHJlLUJGRCBhLm91dCBsaW5rZXIgKGxpbnV4LWdudW9sZGxkKSBvcgorCQkjIG9uZSB0aGF0IGRvZXMgbm90IGdpdmUgdXMgdXNlZnVsIC0taGVscC4KKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIKKwkJZXhpdCA7OworCWVzYWMKKwkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCSNpZmRlZiBfX0VMRl9fCisJIyBpZmRlZiBfX0dMSUJDX18KKwkjICBpZiBfX0dMSUJDX18gPj0gMgorCUxJQkM9Z251CisJIyAgZWxzZQorCUxJQkM9Z251bGliYzEKKwkjICBlbmRpZgorCSMgZWxzZQorCUxJQkM9Z251bGliYzEKKwkjIGVuZGlmCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSB8fCBkZWZpbmVkKF9fUEdJKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCisJTElCQz1nbnUKKwkjZWxzZQorCUxJQkM9Z251YW91dAorCSNlbmRpZgorCSNlbmRpZgorCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eTElCQy97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7CisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwkJZXhpdAorCX0KKwl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQorCTs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisgICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKyAgICAgICAgIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorICAgICAgICAjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC4wKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorICAgIAkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKyAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKyAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTM4Ni4KKwllY2hvIGkzODYtcGMtbXNkb3NkamdwcAorICAgICAgICBleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LjAqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikgIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKyAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisgICAgICAgIGVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKyAgICAgICAgZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJICAgICAgICBlY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKyAgICAgICAgZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKyAgICAJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorICAgICAgICAgICI0IgorI2Vsc2UKKwkgICIiCisjZW5kaWYKKyAgICAgICAgICk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2NDkzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTY3MyBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDA4LTA2LTE2JworCisjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKyMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQorIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcworIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKKyMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KKyMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBvcnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKKyMgaXQgZG9lcyBub3Qgc3VwcG9ydC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCisjIGEgZmFpbHVyZSB0byBzdXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKKyMgY29uZmlndXJhdGlvbi4KKworIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFyaW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KKyMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8gYSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXItcGFydCBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9uLgorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTCisgICAgICAgJDAgW09QVElPTl0gQUxJQVMKKworQ2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiBuYW1lLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQorCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiCisgICAgICAgZXhpdCAxIDs7CisKKyAgICAqbG9jYWwqKQorICAgICAgICMgRmlyc3QgcGFzcyB0aHJvdWdoIGFueSBsb2NhbCBtYWNoaW5lIHR5cGVzLgorICAgICAgIGVjaG8gJDEKKyAgICAgICBleGl0IDs7CisKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2Nhc2UgJCMgaW4KKyAwKSBlY2hvICIkbWU6IG1pc3NpbmcgYXJndW1lbnQkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKKyAxKSA7OworICopIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICAgIGV4aXQgMTs7Citlc2FjCisKKyMgU2VwYXJhdGUgd2hhdCB0aGUgdXNlciBnYXZlIGludG8gQ1BVLUNPTVBBTlkgYW5kIE9TIG9yIEtFUk5FTC1PUyAoaWYgYW55KS4KKyMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCittYXliZV9vcz1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDIvJ2AKK2Nhc2UgJG1heWJlX29zIGluCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IGxpbnV4LXVjbGliYyogfCBcCisgIHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgIG9zPS0kbWF5YmVfb3MKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisgCS1jaG9ydXNyZGIpCisgCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKyAJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5pb3MgfCBuaW9zMiBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9yMzIgXAorCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKwl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBwY2JlIFwKKwl8IHB5cmFtaWQgXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSB8IHN0cm9uZ2FybSBcCisJfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM4MCB8IHRyb24gXAorCXwgdjg1MCB8IHY4NTBlIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCisJCSMgTW90b3JvbGEgNjhIQzExLzEyLgorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmZpbi0qIHwgYnMyMDAwLSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogfCBjNTR4LSogfCBjNTV4LSogfCBjNngtKiBcCisJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCisJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbmlvcy0qIHwgbmlvczItKiBcCisJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKKwl8IG9yaW9uLSogXAorCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJvbXAtKiB8IHJzNjAwMC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3Ryb25nYXJtLSogfCBzdjEtKiB8IHN4Py0qIFwKKwl8IHRhaG9lLSogfCB0aHVtYi0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIHwgdGlsZS0qIFwKKwl8IHRyb24tKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworICAgIAlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisgICAgICAgIGNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2KQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKyMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPworCWkqODZ2MzIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjMyCisJCTs7CisJaSo4NnY0KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2NAorCQk7OworCWkqODZ2KQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zb2xhcmlzMgorCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQorCQljYXNlICRvcyBpbgorCQkgICAgLWlyaXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0taXJpeDQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpc2k2OCB8IGlzaSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQorCQlvcz0tc3lzdgorCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCisJCTs7CisJbWFnbnVtIHwgbTMyMzApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCisJCW9zPS1zeXN2CisJCTs7CisJbWVybGluKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKKwkJb3M9LXN5c3YKKwkJOzsKKwltaW5ndzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwltaW5ndzMyY2UpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LW1pbmd3MzJjZQorCQk7OworCW1pbmlmcmFtZSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAorCQk7OworCSptaW50IHwgLW1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5UWzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKKwltaXBzMyotKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKKwkJOzsKKwltaXBzMyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgLXVua25vd24KKwkJOzsKKwltb25pdG9yKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJbW9ycGhvcykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJb3M9LW1vcnBob3MKKwkJOzsKKwltc2RvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1tc2RvcworCQk7OworCW1zMS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCisJCTs7CisJbXZzKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCW9zPS1tdnMKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKikJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcm9tNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJcm1bNDZdMDApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCisJCTs7CisJcnRwYyB8IHJ0cGMtKikKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCXMzOTAgfCBzMzkwLSopCisJCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KKwkJOzsKKwlzMzkweCB8IHMzOTB4LSopCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCTs7CisJc2EyOTIwMCkKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJc2IxKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCisJCTs7CisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKKwlzZWkpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKKwkJb3M9LXNlaXV4CisJCTs7CisJc2VxdWVudCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJOzsKKwlzaCkKKwkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwlzaDVlbCkKKwkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCisJCTs7CisJc2g2NCkKKwkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KKwkJOzsKKwlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwlzcHM3KQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjIKKwkJOzsKKwlzcHVyKQorCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgorCQk7OworCXN0MjAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQorCQk7OworCXN0cmF0dXMpCisJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisJCW9zPS1zeXN2NAorCQk7OworCXN1bjIpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQk7OworCXN1bjJvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuMm9zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW4zb3MzKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4zb3M0KQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40b3MzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuNG9zNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRzb2wyKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlzdW4zIHwgc3VuMy0qKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCTs7CisJc3VuNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgorCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJc3ltbWV0cnkpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXRpYzU0eCB8IGM1NHgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4IHwgYzU1eCopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eCB8IGM2eCopCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworICAgICAgICAjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLXNvbGFyaXMqIHwgLXN5bSogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyopCisJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCQk7OworCS1xbngqKQorCQljYXNlICRiYXNpY19tYWNoaW5lIGluCisJCSAgICB4ODYtKiB8IGkqODYtKikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LW50byRvcworCQkJOzsKKwkJZXNhYworCQk7OworCS1udG8tcW54KikKKwkJOzsKKwktbnRvKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCisJCTs7CisJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKKwkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQorCQk7OworCS1tYWMqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKKwktbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCisJCTs7CisJLXN1bm9zNSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczV8c29sYXJpczJ8J2AKKwkJOzsKKwktc3Vub3M2KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNnxzb2xhcmlzM3wnYAorCQk7OworCS1vcGVuZWQqKQorCQlvcz0tb3BlbmVkaXRpb24KKwkJOzsKKyAgICAgICAgLW9zNDAwKikKKwkJb3M9LW9zNDAwCisJCTs7CisJLXdpbmNlKikKKwkJb3M9LXdpbmNlCisJCTs7CisJLW9zZnJvc2UqKQorCQlvcz0tb3Nmcm9zZQorCQk7OworCS1vc2YqKQorCQlvcz0tb3NmCisJCTs7CisJLXV0ZWsqKQorCQlvcz0tYnNkCisJCTs7CisJLWR5bml4KikKKwkJb3M9LWJzZAorCQk7OworCS1hY2lzKikKKwkJb3M9LWFvcworCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CisJLTM4NmJzZCkKKwkJb3M9LWJzZAorCQk7OworCS1jdGl4KiB8IC11dHMqKQorCQlvcz0tc3lzdgorCQk7OworCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQorCQk7OworCS1uczIgKQorCQlvcz0tbmV4dHN0ZXAyCisJCTs7CisJLW5zayopCisJCW9zPS1uc2sKKwkJOzsKKwkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCisJLXNpbml4NS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c2luaXh8c3lzdnwnYAorCQk7OworCS1zaW5peCopCisJCW9zPS1zeXN2NAorCQk7OworICAgICAgICAtdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS1rYW9zKikKKwkJb3M9LWthb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisgICAgICAgIHNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKyAgICAgICAgc3B1LSopCisJCW9zPS1lbGYKKwkJOzsKKwkqLWFjb3JuKQorCQlvcz0tcmlzY2l4MS4yCisJCTs7CisJYXJtKi1yZWJlbCkKKwkJb3M9LWxpbnV4CisJCTs7CisJYXJtKi1zZW1pKQorCQlvcz0tYW91dAorCQk7OworICAgICAgICBjNHgtKiB8IHRpYzR4LSopCisgICAgICAgIAlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKKwkJb3M9LW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz0tdWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPS1kb21haW4KKwkJOzsKKwlpMzg2LXN1bikKKwkJb3M9LXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz0tc3Vub3MzCisJCSMgVGhpcyBhbHNvIGV4aXN0cyBpbiB0aGUgY29uZmlndXJlIHByb2dyYW0sIGJ1dCB3YXMgbm90IHRoZQorCQkjIGRlZmF1bHQuCisJCSMgb3M9LXN1bm9zNAorCQk7OworCW02OCotY2lzY28pCisJCW9zPS1hb3V0CisJCTs7CisgICAgICAgIG1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisgICAgCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OworCSotd2VjKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi13aW5ib25kKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz0taHB1eAorCQk7OworCSotaGl0YWNoaSkKKwkJb3M9LWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9zPS1hbWlnYW9zCisJCTs7CisJKi1kZykKKwkJb3M9LWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPS1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9LXJ0dQorCQk7OworCW04OGstb21yb24qKQorCQlvcz0tbHVuYQorCQk7OworCSotbmV4dCApCisJCW9zPS1uZXh0c3RlcAorCQk7OworCSotc2VxdWVudCkKKwkJb3M9LXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9LXVub3MKKwkJOzsKKwkqLW5zKQorCQlvcz0tZ2VuaXgKKwkJOzsKKwlpMzcwLSopCisJCW9zPS1tdnMKKwkJOzsKKwkqLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz0tc3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz0tYnNkCisJCTs7CisJKi1lbmNvcmUpCisJCW9zPS1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9LWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJCW9zPS1zeXN2NAorCQk7OworCSotbWFzc2NvbXApCisJCW9zPS1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPS11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9zPS1jb2ZmCisJCTs7CisJKi0qYnVnKQorCQlvcz0tY29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPS1tYWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz0tbWludAorCQk7OworCSopCisJCW9zPS1ub25lCisJCTs7Citlc2FjCitmaQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQorIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KK3ZlbmRvcj11bmtub3duCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi11bmtub3duKQorCQljYXNlICRvcyBpbgorCQkJLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCS1zdW5vcyopCisJCQkJdmVuZG9yPXN1bgorCQkJCTs7CisJCQktYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJLWhwdXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLXVub3MqKQorCQkJCXZlbmRvcj1jcmRzCisJCQkJOzsKKwkJCS1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQktZ2VuaXgqKQorCQkJCXZlbmRvcj1ucworCQkJCTs7CisJCQktbXZzKiB8IC1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCS1hdXgqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktbXB3KiB8IC1tYWNvcyopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCQkJdmVuZG9yPWF0YXJpCisJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAorCQk7OworZXNhYworCitlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzQyMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlCkBAIC0wLDAgKzEsMTgzOTUgQEAKKyMhIC9iaW4vc2gKKyMgRnJvbSBjb25maWd1cmUuaW4gUmV2aXNpb246IDEuNDU0IC4KKyMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKyMgR2VuZXJhdGVkIGJ5IEF1dG9jb25mIDIuNTIuMjAwODAzMjUuCisjCisjIENvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJzZWQgeSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJzZWQgeSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKK2VsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNldCAtbyBwb3NpeAorZmkKKworIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorYXNfbWU9YGVjaG8gIiQwIiB8c2VkICdzLC4qW1xcL10sLCdgCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorZWNobyA+Y29uZiQkLmZpbGUKK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYworICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KKyAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCisgICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcworICAgIGFzX2xuX3M9J2NwIC1wJworICBlbHNlCisgICAgYXNfbG5fcz0nbG4gLXMnCisgIGZpCitlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19sbl9zPWxuCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisKK2FzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKworIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCitpZiAoRk9PPUZPTzsgdW5zZXQgRk9PKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgYXNfdW5zZXQ9ZmFsc2UKK2ZpCisKKyMgTkxTIG51aXNhbmNlcy4KKyRhc191bnNldCBMQU5HIHx8IHRlc3QgIiR7TEFORytzZXR9IiAhPSBzZXQgfHwgeyBMQU5HPUM7IGV4cG9ydCBMQU5HOyB9CiskYXNfdW5zZXQgTENfQUxMIHx8IHRlc3QgIiR7TENfQUxMK3NldH0iICE9IHNldCB8fCB7IExDX0FMTD1DOyBleHBvcnQgTENfQUxMOyB9CiskYXNfdW5zZXQgTENfVElNRSB8fCB0ZXN0ICIke0xDX1RJTUUrc2V0fSIgIT0gc2V0IHx8IHsgTENfVElNRT1DOyBleHBvcnQgTENfVElNRTsgfQorJGFzX3Vuc2V0IExDX0NUWVBFIHx8IHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgIT0gc2V0IHx8IHsgTENfQ1RZUEU9QzsgZXhwb3J0IExDX0NUWVBFOyB9CiskYXNfdW5zZXQgTEFOR1VBR0UgfHwgdGVzdCAiJHtMQU5HVUFHRStzZXR9IiAhPSBzZXQgfHwgeyBMQU5HVUFHRT1DOyBleHBvcnQgTEFOR1VBR0U7IH0KKyRhc191bnNldCBMQ19DT0xMQVRFIHx8IHRlc3QgIiR7TENfQ09MTEFURStzZXR9IiAhPSBzZXQgfHwgeyBMQ19DT0xMQVRFPUM7IGV4cG9ydCBMQ19DT0xMQVRFOyB9CiskYXNfdW5zZXQgTENfTlVNRVJJQyB8fCB0ZXN0ICIke0xDX05VTUVSSUMrc2V0fSIgIT0gc2V0IHx8IHsgTENfTlVNRVJJQz1DOyBleHBvcnQgTENfTlVNRVJJQzsgfQorJGFzX3Vuc2V0IExDX01FU1NBR0VTIHx8IHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgIT0gc2V0IHx8IHsgTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyB9CisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgorYXNfbmw9JworJworSUZTPSIgCSRhc19ubCIKKworIyBDRFBBVEguCiskYXNfdW5zZXQgQ0RQQVRIIHx8IHRlc3QgIiR7Q0RQQVRIK3NldH0iICE9IHNldCB8fCB7IENEUEFUSD06OyBleHBvcnQgQ0RQQVRIOyB9CisKKyMgTmFtZSBvZiB0aGUgaG9zdC4KKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCitleGVjIDY+JjEKKworIworIyBJbml0aWFsaXphdGlvbnMuCisjCithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCitjcm9zc19jb21waWxpbmc9bm8KK3N1YmRpcnM9CitNRkxBR1M9IE1BS0VGTEFHUz0KK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKKyMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KKyMgVGhpcyB2YXJpYWJsZSBzZWVtcyBvYnNvbGV0ZS4gIEl0IHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkLCBhbmQKKyMgb25seSBhY19tYXhfc2VkX2xpbmVzIHNob3VsZCBiZSB1c2VkLgorOiAke2FjX21heF9oZXJlX2xpbmVzPTM4fQorCithY191bmlxdWVfZmlsZT0ibmN1cnNlcy9iYXNlL2xpYl9pbml0c2NyLmMiCisjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCithY19pbmNsdWRlc19kZWZhdWx0PSJcCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYiCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitleGVjX3ByZWZpeD1OT05FCitub19jcmVhdGU9Citub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCisKKyMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgorIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2luZm9kaXI9JyR7cHJlZml4fS9pbmZvJworbWFuZGlyPScke3ByZWZpeH0vbWFuJworCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0KK1BBQ0tBR0VfVEFSTkFNRT0KK1BBQ0tBR0VfVkVSU0lPTj0KK1BBQ0tBR0VfU1RSSU5HPQorUEFDS0FHRV9CVUdSRVBPUlQ9CisKK2FjX3ByZXY9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAiJGFjX3ByZXY9XCRhY19vcHRpb24iCisgICAgYWNfcHJldj0KKyAgICBjb250aW51ZQorICBmaQorCisgIGFjX29wdGFyZz1gZXhwciAieCRhY19vcHRpb24iIDogJ3hbXj1dKj1cKC4qXCknYAorCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorICB8IC0tZGE9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9bm8iIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCisgICAgY2FzZSAkYWNfb3B0aW9uIGluCisgICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9JyRhY19vcHRhcmcnIiA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgIGFjX3ByZXY9aW5mb2RpciA7OworICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQorICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCisgIHwgLS1sb2NhbHMgfCAtLWxvY2FsIHwgLS1sb2NhIHwgLS1sb2MgfCAtLWxvKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCisgIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKKyAgICBtYW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICRhY19vcHRpb24gaW4KKyAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9JyRhY19vcHRhcmcnIiA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9bm8iIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7CisKKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisgICAgYWNfcHJldj14X2xpYnJhcmllcyA7OworICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKworICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkYWNfb3B0aW9uCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKyAgICBldmFsICIkYWNfZW52dmFyPSckYWNfb3B0YXJnJyIKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgcGF0aHMuCitmb3IgYWNfdmFyIGluIGV4ZWNfcHJlZml4IHByZWZpeAorZG8KKyAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiB8IE5PTkUgfCAnJyApIDs7CisgICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgcGF0aCBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGVzYWMKK2RvbmUKKworIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgcGF0aHMuCitmb3IgYWNfdmFyIGluIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIFwKKyAgICAgICAgICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKyAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBwYXRoIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPXllcworICBmaQorZmkKKworYWNfdG9vbF9wcmVmaXg9Cit0ZXN0IC1uICIkaG9zdF9hbGlhcyIgJiYgYWNfdG9vbF9wcmVmaXg9JGhvc3RfYWxpYXMtCisKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCisgIGFjX3Byb2c9JDAKKyAgYWNfY29uZmRpcj1gZWNobyAiJGFjX3Byb2ciIHwgc2VkICdzJVtcXC9dW15cXC9dW15cXC9dKiQlJSdgCisgIHRlc3QgIngkYWNfY29uZmRpciIgPSAieCRhY19wcm9nIiAmJiBhY19jb25mZGlyPS4KKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZWxzZQorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyBpbiAkc3JjZGlyIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBmaQorZmkKK3NyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKK2FjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9CithY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCithY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQorYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcworYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQorYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKK2FjX2Vudl9DQ19zZXQ9JHtDQytzZXR9CithY19lbnZfQ0NfdmFsdWU9JENDCithY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQorYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQworYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQorYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCithY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9CithY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKK2FjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9CithY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCithY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQorYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUworYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQorYWNfZW52X0NQUF92YWx1ZT0kQ1BQCithY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9CithY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKK2FjX2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KK2FjX2Vudl9DWFhfdmFsdWU9JENYWAorYWNfY3ZfZW52X0NYWF9zZXQ9JHtDWFgrc2V0fQorYWNfY3ZfZW52X0NYWF92YWx1ZT0kQ1hYCithY19lbnZfQ1hYRkxBR1Nfc2V0PSR7Q1hYRkxBR1Mrc2V0fQorYWNfZW52X0NYWEZMQUdTX3ZhbHVlPSRDWFhGTEFHUworYWNfY3ZfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KK2FjX2N2X2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKK2FjX2Vudl9DWFhDUFBfc2V0PSR7Q1hYQ1BQK3NldH0KK2FjX2Vudl9DWFhDUFBfdmFsdWU9JENYWENQUAorYWNfY3ZfZW52X0NYWENQUF9zZXQ9JHtDWFhDUFArc2V0fQorYWNfY3ZfZW52X0NYWENQUF92YWx1ZT0kQ1hYQ1BQCisKKyMKKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKyMKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCisgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCisgIGNhdCA8PEVPRgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgdGhpcyBwYWNrYWdlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKworVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCisKK1RvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKK1ZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCisKK0RlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgorCitDb25maWd1cmF0aW9uOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCisgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0VPRgorCisgIGNhdCA8PEVPRgorSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKworQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCitcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQorYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisKK0ZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgorCitGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvc2hhcmVdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtQUkVGSVgvaW5mb10KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW1BSRUZJWC9tYW5dCitFT0YKKworICBjYXQgPDxcRU9GCisKK1Byb2dyYW0gbmFtZXM6CisgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAgICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisKK1N5c3RlbSB0eXBlczoKKyAgLS1idWlsZD1CVUlMRCAgICAgICAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKyAgLS1ob3N0PUhPU1QgICAgICAgYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQorRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorCisgIGNhdCA8PFxFT0YKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKworICAtLXdpdGgtcmVsLXZlcnNpb249WFhYICBvdmVycmlkZSBkZXJpdmVkIHJlbGVhc2UgdmVyc2lvbgorICAtLXdpdGgtYWJpLXZlcnNpb249WFhYICBvdmVycmlkZSBkZXJpdmVkIEFCSSB2ZXJzaW9uCisgIC0td2l0aC1zeXN0ZW0tdHlwZT1YWFggIHRlc3Q6IG92ZXJyaWRlIGRlcml2ZWQgaG9zdCBzeXN0ZW0tdHlwZQorICAtLXdpdGhvdXQtY3h4ICAgICAgICAgICBkbyBub3QgYWRqdXN0IG5jdXJzZXMgYm9vbCB0byBtYXRjaCBDKysKKyAgLS13aXRob3V0LWN4eC1iaW5kaW5nICAgZG8gbm90IGJ1aWxkIEMrKyBiaW5kaW5nIGFuZCBkZW1vCisgIC0td2l0aG91dC1hZGEgICAgICAgICAgIHN1cHByZXNzIGNoZWNrIGZvciBBZGE5NSwgZG9uJ3QgYnVpbGQgZGVtbworICAtLXdpdGhvdXQtcHJvZ3MgICAgICAgICBzdXBwcmVzcyBidWlsZCB3aXRoIHByb2dyYW1zIChlLmcuLCB0aWMpCisgIC0td2l0aG91dC1jdXJzZXMtaCAgICAgIGluc3RhbGwgY3Vyc2VzLmggYXMgbmN1cnNlcy5oIG9ubHkKKyAgLS1lbmFibGUtbWl4ZWQtY2FzZSAgICAgdGljIHNob3VsZCBhc3N1bWUgbWl4ZWQtY2FzZSBmaWxlbmFtZXMKKyAgLS13aXRoLWluc3RhbGwtcHJlZml4ICAgcHJlZml4ZXMgYWN0dWFsIGluc3RhbGwtbG9jYXRpb24gKCRERVNURElSKQorQnVpbGQtVG9vbHMgTmVlZGVkIHRvIENvbXBpbGUgVGVtcG9yYXJ5IEFwcGxpY2F0aW9ucyBmb3IgQ3Jvc3MtY29tcGlsaW5nOgorICAtLXdpdGgtYnVpbGQtY2M9WFhYICAgICB0aGUgYnVpbGQgQyBjb21waWxlciAoJEJVSUxEX0NDKQorICAtLXdpdGgtYnVpbGQtY3BwPVhYWCAgICB0aGUgYnVpbGQgQyBwcmVwcm9jZXNzb3IgKCRCVUlMRF9DUFApCisgIC0td2l0aC1idWlsZC1jZmxhZ3M9WFhYIHRoZSBidWlsZCBDIGNvbXBpbGVyLWZsYWdzICgkQlVJTERfQ0ZMQUdTKQorICAtLXdpdGgtYnVpbGQtY3BwZmxhZ3M9WFhYIHRoZSBidWlsZCBDIHByZXByb2Nlc3Nvci1mbGFncyAoJEJVSUxEX0NQUEZMQUdTKQorICAtLXdpdGgtYnVpbGQtbGRmbGFncz1YWFggdGhlIGJ1aWxkIGxpbmtlci1mbGFncyAoJEJVSUxEX0xERkxBR1MpCisgIC0td2l0aC1idWlsZC1saWJzPVhYWCAgIHRoZSBidWlsZCBsaWJyYXJpZXMgKCR7QlVJTERfTElCU30pCitPcHRpb25zIHRvIFNwZWNpZnkgdGhlIExpYnJhcmllcyBCdWlsdC9Vc2VkOgorICAtLXdpdGgtbGlidG9vbCAgICAgICAgICBnZW5lcmF0ZSBsaWJyYXJpZXMgd2l0aCBsaWJ0b29sCisgIC0td2l0aC1zaGFyZWQgICAgICAgICAgIGdlbmVyYXRlIHNoYXJlZC1saWJyYXJpZXMKKyAgLS13aXRoLW5vcm1hbCAgICAgICAgICAgZ2VuZXJhdGUgbm9ybWFsLWxpYnJhcmllcyAoZGVmYXVsdCkKKyAgLS13aXRoLWRlYnVnICAgICAgICAgICAgZ2VuZXJhdGUgZGVidWctbGlicmFyaWVzIChkZWZhdWx0KQorICAtLXdpdGgtcHJvZmlsZSAgICAgICAgICBnZW5lcmF0ZSBwcm9maWxlLWxpYnJhcmllcworICAtLXdpdGgtdGVybWxpYiAgICAgICAgICBnZW5lcmF0ZSBzZXBhcmF0ZSB0ZXJtaW5mbyBsaWJyYXJ5CisgIC0td2l0aC10aWNsaWIgICAgICAgICAgIGdlbmVyYXRlIHNlcGFyYXRlIHRpYyBsaWJyYXJ5CisgIC0td2l0aC1ncG0gICAgICAgICAgICAgIHVzZSBBbGVzc2FuZHJvIFJ1YmluaSdzIEdQTSBsaWJyYXJ5CisgIC0td2l0aG91dC1kbHN5bSAgICAgICAgIGRvIG5vdCB1c2UgZGxzeW0oKSB0byBsb2FkIEdQTSBkeW5hbWljYWxseQorICAtLXdpdGgtc3lzbW91c2UgICAgICAgICB1c2Ugc3lzbW91c2UgKEZyZWVCU0QgY29uc29sZSkKKyAgLS1lbmFibGUtcnBhdGggICAgICAgICAgdXNlIHJwYXRoIG9wdGlvbiB3aGVuIGdlbmVyYXRpbmcgc2hhcmVkIGxpYnJhcmllcworICAtLWRpc2FibGUtcmVsaW5rICAgICAgICByZWxpbmsgc2hhcmVkIGxpYnJhcmllcyBkdXJpbmcgaW5zdGFsbAorICAtLXdpdGgtc2hsaWItdmVyc2lvbj1YICBTcGVjaWZ5IHJlbCBvciBhYmkgdmVyc2lvbiBmb3Igc2hhcmVkIGxpYnMKK0ZpbmUtVHVuaW5nIFlvdXIgQ29uZmlndXJhdGlvbjoKKyAgLS1kaXNhYmxlLW92ZXJ3cml0ZSAgICAgbGVhdmUgb3V0IHRoZSBsaW5rIHRvIC1sY3Vyc2VzCisgIC0tZGlzYWJsZS1kYXRhYmFzZSAgICAgIGRvIG5vdCB1c2UgdGVybWluZm8sIG9ubHkgZmFsbGJhY2tzL3Rlcm1jYXAKKyAgLS13aXRoLWRhdGFiYXNlPVhYWCAgICAgc3BlY2lmeSB0ZXJtaW5mbyBzb3VyY2UgdG8gaW5zdGFsbAorICAtLXdpdGgtaGFzaGVkLWRiICAgICAgICBzcGVjaWZ5IGhhc2hlZC1kYXRhYmFzZSBsaWJyYXJ5CisgIC0td2l0aC1mYWxsYmFja3M9WFhYICAgIHNwZWNpZnkgbGlzdCBvZiBmYWxsYmFjayB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMKKyAgLS13aXRob3V0LXh0ZXJtLW5ldyAgICAgc3BlY2lmeSBpZiB4dGVybSB0ZXJtaW5mbyBzaG91bGQgYmUgb2xkIHZlcnNpb24KKyAgLS13aXRoLXRlcm1pbmZvLWRpcnM9WFhYIHNwZWNpZnkgbGlzdCBvZiB0ZXJtaW5mbyBkaXJlY3RvcmllcyAoZGVmYXVsdDogREFUQURJUi90ZXJtaW5mbykKKyAgLS13aXRoLWRlZmF1bHQtdGVybWluZm8tZGlyPURJUiBkZWZhdWx0IHRlcm1pbmZvIGRpcmVjdG9yeSAoZGVmYXVsdDogREFUQURJUi90ZXJtaW5mbykKKyAgLS1kaXNhYmxlLWJpZy1jb3JlICAgICAgYXNzdW1lIG1hY2hpbmUgaGFzIGxpdHRsZSBtZW1vcnkKKyAgLS1kaXNhYmxlLWJpZy1zdHJpbmdzICAgYXNzdW1lIGNvbXBpbGVyIGhhcyBvbmx5IHN0YW5kYXJkLXNpemUgc3RyaW5ncworICAtLWVuYWJsZS10ZXJtY2FwICAgICAgICBjb21waWxlIGluIHRlcm1jYXAgZmFsbGJhY2sgc3VwcG9ydAorICAtLXdpdGgtdGVybXBhdGg9WFhYICAgICBzcGVjaWZ5IGxpc3Qgb2YgdGVybWNhcCBmaWxlcyAoZGVmYXVsdDogL2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwKQorICAtLWVuYWJsZS1nZXRjYXAgICAgICAgICBmYXN0IHRlcm1jYXAgbG9hZCwgbm8geHJlZnMgdG8gdGVybWluZm8KKyAgLS1lbmFibGUtZ2V0Y2FwLWNhY2hlICAgY2FjaGUgdHJhbnNsYXRlZCB0ZXJtY2FwcyBpbiB+Ly50ZXJtaW5mbworICAtLWRpc2FibGUtaG9tZS10ZXJtaW5mbyBkcm9wIH4vLnRlcm1pbmZvIGZyb20gdGVybWluZm8gc2VhcmNoLXBhdGgKKyAgLS1kaXNhYmxlLXJvb3QtZW52aXJvbiAgcmVzdHJpY3QgZW52aXJvbm1lbnQgd2hlbiBydW5uaW5nIGFzIHJvb3QKKyAgLS1lbmFibGUtc3ltbGlua3MgICAgICAgbWFrZSB0aWMgdXNlIHN5bWJvbGljIGxpbmtzIG5vdCBoYXJkIGxpbmtzCisgIC0tZW5hYmxlLWJyb2tlbl9saW5rZXIgIGNvbXBpbGUgd2l0aCBicm9rZW4tbGlua2VyIHN1cHBvcnQgY29kZQorICAtLWVuYWJsZS1ic2RwYWQgICAgICAgICByZWNvZ25pemUgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nCisgIC0tZW5hYmxlLXdpZGVjICAgICAgICAgIGNvbXBpbGUgd2l0aCB3aWRlLWNoYXIvVVRGLTggY29kZQorICAtLWRpc2FibGUtbHA2NCAgICAgICAgICBhbGxvdyBjaHR5cGUgdG8gYmUgbG9uZyAoaWdub3JlIF9MUDY0KQorICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgIC0tZGlzYWJsZS10cGFybS12YXJhcmdzIGNvbXBpbGUgdHBhcm0oKSB3aXRob3V0IHZhcmFyZ3MgaW50ZXJmYWNlCisgIC0tZGlzYWJsZS10aWMtZGVwZW5kcyAgIGxpbmsgdGljIGxpYnJhcnkgd2l0aG91dCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIG5jdXJzZXMgbGlicmFyeQorICAtLXdpdGgtYm9vbD1UWVBFICAgICAgICBvdmVycmlkZSBmYWxsYmFjayB0eXBlIG9mIGJvb2wgdmFyaWFibGUKKyAgLS13aXRoLWNhcHM9YWx0ICAgICAgICAgY29tcGlsZSB3aXRoIGFsdGVybmF0ZSBDYXBzIGZpbGUKKyAgLS13aXRoLWNodHlwZT1UWVBFICAgICAgb3ZlcnJpZGUgdHlwZSBvZiBjaHR5cGUKKyAgLS13aXRoLW9zcGVlZD1UWVBFICAgICAgb3ZlcnJpZGUgdHlwZSBvZiBvc3BlZWQgdmFyaWFibGUKKyAgLS13aXRoLW1tYXNrLXQ9VFlQRSAgICAgb3ZlcnJpZGUgdHlwZSBvZiBtbWFza190CisgIC0td2l0aC1yY3MtaWRzICAgICAgICAgIGNvbXBpbGUtaW4gUkNTIGlkZW50aWZpZXJzCitPcHRpb25zIHRvIFNwZWNpZnkgSG93IE1hbnBhZ2VzIGFyZSBJbnN0YWxsZWQ6CisgIC0td2l0aC1tYW5wYWdlLWZvcm1hdCAgIHNwZWNpZnkgbWFucGFnZS1mb3JtYXQ6IGd6aXAvY29tcHJlc3MvQlNESS9ub3JtYWwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsbHkgZm9ybWF0dGVkL2NhdG9ubHksIGUuZy4sIGd6aXAsZm9ybWF0dGVkCisgIC0td2l0aC1tYW5wYWdlLXJlbmFtZXMgIHNwZWNpZnkgbWFucGFnZS1yZW5hbWluZworICAtLXdpdGgtbWFucGFnZS1hbGlhc2VzICBzcGVjaWZ5IG1hbnBhZ2UtYWxpYXNlcyB1c2luZyAuc28KKyAgLS13aXRoLW1hbnBhZ2Utc3ltbGlua3Mgc3BlY2lmeSBtYW5wYWdlLWFsaWFzZXMgdXNpbmcgc3ltbGlua3MKKyAgLS13aXRoLW1hbnBhZ2UtdGJsICAgICAgc3BlY2lmeSBtYW5wYWdlIHByb2Nlc3Npbmcgd2l0aCB0YmwKK0V4dGVuc2lvbnM6CisgIC0tZGlzYWJsZS1leHQtZnVuY3MgICAgIGRpc2FibGUgZnVuY3Rpb24tZXh0ZW5zaW9ucworICAtLWVuYWJsZS1jb25zdCAgICAgICAgICBjb21waWxlIHdpdGggZXh0cmEvbm9uLXN0YW5kYXJkIGNvbnN0CisgIC0tZW5hYmxlLWV4dC1jb2xvcnMgICAgIGNvbXBpbGUgZm9yIDI1Ni1jb2xvciBzdXBwb3J0CisgIC0tZW5hYmxlLWV4dC1tb3VzZSAgICAgIGNvbXBpbGUgZm9yIGV4dGVuZGVkIG1vdXNlLWVuY29kaW5nCisgIC0tZW5hYmxlLW5vLXBhZGRpbmcgICAgIGNvbXBpbGUgd2l0aCAkTkNVUlNFU19OT19QQURESU5HIGNvZGUKKyAgLS1lbmFibGUtc2lnbmVkLWNoYXIgICAgY29tcGlsZSB1c2luZyBzaWduZWQgQm9vbGVhbidzIGluIHRlcm0uaAorICAtLWVuYWJsZS1zaWd3aW5jaCAgICAgICBjb21waWxlIHdpdGggU0lHV0lOQ0ggaGFuZGxlcgorICAtLWVuYWJsZS10Y2FwLW5hbWVzICAgICBjb21waWxlIHdpdGggdXNlci1kZWZpbmFibGUgdGVybWluYWwgY2FwYWJpbGl0aWVzCitEZXZlbG9wbWVudCBDb2RlOgorICAtLXdpdGhvdXQtZGV2ZWxvcCAgICAgICBkaXNhYmxlIGRldmVsb3BtZW50IG9wdGlvbnMKKyAgLS1lbmFibGUtaGFyZC10YWJzICAgICAgY29tcGlsZSB3aXRoIGhhcmQtdGFicyBjb2RlCisgIC0tZW5hYmxlLXhtYy1nbGl0Y2ggICAgIGNvbXBpbGUgd2l0aCBzdXBwb3J0IGZvciB4bWMgKG1hZ2ljLWNvb2tpZSkKK0V4cGVyaW1lbnRhbCBDb2RlOgorICAtLWRpc2FibGUtYXNzdW1lZC1jb2xvciBkbyBub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IGRlZmF1bHQtY29sb3JzCisgIC0tZGlzYWJsZS1oYXNobWFwICAgICAgIGNvbXBpbGUgd2l0aG91dCBoYXNobWFwIHNjcm9sbGluZy1vcHRpbWl6YXRpb24KKyAgLS1lbmFibGUtY29sb3JmZ2JnICAgICAgY29tcGlsZSB3aXRoICRDT0xPUkZHQkcgY29kZQorICAtLXdpdGgtcHRocmVhZCAgICAgICAgICB1c2UgUE9TSVggdGhyZWFkIGxpYnJhcnkKKyAgLS1lbmFibGUtd2Vhay1zeW1ib2xzICAgZW5hYmxlIHdlYWstc3ltYm9scyBmb3IgcHRocmVhZHMKKyAgLS1lbmFibGUtcmVlbnRyYW50ICAgICAgY29tcGlsZSB3aXRoIGV4cGVyaW1lbnRhbCByZWVudHJhbnQgY29kZQorICAtLWVuYWJsZS1zYWZlLXNwcmludGYgICBjb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHNhZmUtc3ByaW50ZiBjb2RlCisgIC0tZGlzYWJsZS1zY3JvbGwtaGludHMgIGNvbXBpbGUgd2l0aG91dCBzY3JvbGwtaGludHMgY29kZQorICAtLWVuYWJsZS13Z2V0Y2gtZXZlbnRzICBjb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHdnZXRjaC1ldmVudHMgY29kZQorVGVzdGluZy9kZXZlbG9wbWVudCBPcHRpb25zOgorICAtLWVuYWJsZS1lY2hvICAgICAgICAgICBidWlsZDogZGlzcGxheSAiY29tcGlsaW5nIiBjb21tYW5kcyAoZGVmYXVsdCkKKyAgLS1lbmFibGUtd2FybmluZ3MgICAgICAgYnVpbGQ6IHR1cm4gb24gR0NDIGNvbXBpbGVyIHdhcm5pbmdzCisgIC0tZW5hYmxlLWFzc2VydGlvbnMgICAgIHRlc3Q6IHR1cm4gb24gZ2VuZXJhdGlvbiBvZiBhc3NlcnRpb24gY29kZQorICAtLXdpdGgtZG1hbGxvYyAgICAgICAgICB0ZXN0OiB1c2UgR3JheSBXYXRzb24ncyBkbWFsbG9jIGxpYnJhcnkKKyAgLS13aXRoLWRibWFsbG9jICAgICAgICAgdGVzdDogdXNlIENvbm9yIENhaGlsbCdzIGRibWFsbG9jIGxpYnJhcnkKKyAgLS13aXRoLXZhbGdyaW5kICAgICAgICAgdGVzdDogdXNlIHZhbGdyaW5kCisgIC0tZGlzYWJsZS1sZWFrcyAgICAgICAgIHRlc3Q6IGZyZWUgcGVybWFuZW50IG1lbW9yeSwgYW5hbHl6ZSBsZWFrcworICAtLWVuYWJsZS1leHBhbmRlZCAgICAgICB0ZXN0OiBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGNlcnRhaW4gbWFjcm9zCisgIC0tZGlzYWJsZS1tYWNyb3MgICAgICAgIHRlc3Q6IHVzZSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gbWFjcm9zCisgIC0td2l0aC10cmFjZSAgICAgICAgICAgIHRlc3Q6IGFkZCB0cmFjZSgpIGZ1bmN0aW9uIHRvIGFsbCBtb2RlbHMgb2YgbmN1cnNlcworQWRhOTUgQmluZGluZyBPcHRpb25zOgorICAtLXdpdGgtYWRhLWNvbXBpbGVyPUNNRCBzcGVjaWZ5IEFkYTk1IGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHQgZ25hdG1ha2UpCisgIC0td2l0aC1hZGEtaW5jbHVkZT1ESVIgIEFkYSBpbmNsdWRlcyBhcmUgaW4gRElSIChkZWZhdWx0OiBQUkVGSVgvbGliL2FkYS9hZGFpbmNsdWRlKQorICAtLXdpdGgtYWRhLW9iamVjdHM9RElSICBBZGEgb2JqZWN0cyBhcmUgaW4gRElSIChkZWZhdWx0OiBQUkVGSVgvbGliL2FkYS9hZGFsaWIpCisKK1NvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncworICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKKyAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgorICBDUFBGTEFHUyAgICBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmIHlvdSBoYXZlCisgICAgICAgICAgICAgIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgorCitVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAoraXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgorCitFT0YKK2ZpCisKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKyAgYWNfcG9wZGlyPWBwd2RgCisgIGZvciBhY19zdWJkaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfc3ViZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisgICAgY2QgJGFjX3N1YmRpcgorICAgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gLyRhY19zdWJkaXIuCisgICAgYWNfZG90cz1gZWNobyAkYWNfc3ViZGlyIHwKKyAgICAgICAgICAgICBzZWQgJ3MsXlwuLywsO3MsW14vXSQsJi8sO3MsW14vXSovLC4uLyxnJ2AKKworICAgIGNhc2UgJHNyY2RpciBpbgorICAgIC4pICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgICAgYWNfc3ViX3NyY2Rpcj0kc3JjZGlyIDs7CisgICAgW1xcL10qIHwgPzpbXFwvXSogKSAjIEFic29sdXRlIHBhdGguCisgICAgICBhY19zdWJfc3JjZGlyPSRzcmNkaXIvJGFjX3N1YmRpciA7OworICAgICopICMgUmVsYXRpdmUgcGF0aC4KKyAgICAgIGFjX3N1Yl9zcmNkaXI9JGFjX2RvdHMkc3JjZGlyLyRhY19zdWJkaXIgOzsKKyAgICBlc2FjCisKKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmdudTsgdGhlbgorICAgICAgZWNobworICAgICAgJFNIRUxMICRhY19zdWJfc3JjZGlyL2NvbmZpZ3VyZS5nbnUgIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlOyB0aGVuCisgICAgICBlY2hvCisgICAgICAkU0hFTEwgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlICAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICRhY19zdWJfc3JjZGlyL2NvbmZpZ3VyZS5hYyB8fAorICAgICAgICAgICB0ZXN0IC1mICRhY19zdWJfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgorICAgICAgZWNobworICAgICAgJGFjX2NvbmZpZ3VyZSAtLWhlbHAKKyAgICBlbHNlCisgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX3N1YmRpciIgPiYyCisgICAgZmkKKyAgICBjZCAkYWNfcG9wZGlyCisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgMAoraWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcRU9GCisKK0NvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCitFT0YKKyAgZXhpdCAwCitmaQorZXhlYyA1PmNvbmZpZy5sb2cKK2NhdCA+JjUgPDxFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjUyLjIwMDgwMzI1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgJCAkMCAkQAorCitFT0YKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAoraG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitQQVRIID0gJFBBVEgKKworX0FTVU5BTUUKK30gPiY1CisKK2NhdCA+JjUgPDxFT0YKKyMjIC0tLS0tLS0tLS0tLSAjIworIyMgQ29yZSB0ZXN0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0gIyMKKworRU9GCisKKyMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfc2VwPQorZm9yIGFjX2FyZworZG8KKyAgY2FzZSAkYWNfYXJnIGluCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYykgOzsKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKSA7OworICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKKyAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCisgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCisgICAgYWNfc2VwPSIgIiA7OworICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCRhY19hcmciCisgICAgIGFjX3NlcD0iICIgOzsKKyAgZXNhYworICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCitkb25lCisKKyMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICBlY2hvID4mNQorICBlY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIgPiY1CisgIGVjaG8gIiMjIENhY2hlIHZhcmlhYmxlcy4gICMjIiA+JjUKKyAgZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiID4mNQorICBlY2hvID4mNQorICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAoreworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgKmFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisgICAgICAgICJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKyAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNlZCAtbiBcCisgICAgICAgICJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgOzsKKyAgICBlc2FjOworfSA+JjUKKyAgc2VkICIvXiQvZCIgY29uZmRlZnMuaCA+Y29uZnRlc3QubG9nCisgIGlmIHRlc3QgLXMgY29uZnRlc3QubG9nOyB0aGVuCisgICAgZWNobyA+JjUKKyAgICBlY2hvICIjIyAtLS0tLS0tLS0tLS0gIyMiID4mNQorICAgIGVjaG8gIiMjIGNvbmZkZWZzLmguICAjIyIgPiY1CisgICAgZWNobyAiIyMgLS0tLS0tLS0tLS0tICMjIiA+JjUKKyAgICBlY2hvID4mNQorICAgIGNhdCBjb25mdGVzdC5sb2cgPiY1CisgIGZpCisgIChlY2hvOyBlY2hvKSA+JjUKKyAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIiA+JjUKKyAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIgPiY1CisgIHJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgICAgICcgMAorZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IHsgKGV4aXQgMSk7IGV4aXQgMTsgfScgJGFjX3NpZ25hbAorZG9uZQorYWNfc2lnbmFsPTAKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1yZiBjb25mdGVzdCogY29uZmRlZnMuaAorIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCitlY2hvID5jb25mZGVmcy5oCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2lmIHRlc3QgLXogIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGVsc2UKKyAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGZpCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCisgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6OTk3OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgY2F0ICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIgorICBmaQorZG9uZQorCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwKKyAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCisgIGlmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOjEwMDg6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAkY2FjaGVfZmlsZTs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuIC4vJGNhY2hlX2ZpbGU7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6MTAxNjogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwKKyAgICAgICAgICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7IGVjaG8gIiRhc19tZToxMDMyOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7IGVjaG8gIiRhc19tZToxMDM2OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisgICAgICAgIHsgZWNobyAiJGFzX21lOjEwNDI6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisgICAgICAgIHsgZWNobyAiJGFzX21lOjEwNDQ6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorICAgICAgICB7IGVjaG8gIiRhc19tZToxMDQ2OiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKK2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKyAgICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPToKKyAgICAgIGZpOzsKKyAgZXNhYworICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuICBJdCBkb2Vzbid0IG1hdHRlciBpZgorICAjIHdlIHBhc3Mgc29tZSB0d2ljZSAoaW4gYWRkaXRpb24gdG8gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMpLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9cIlwnXSopCisgICAgICBhY19hcmc9JGFjX3Zhcj1gZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCisgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIKKyAgICAgIDs7CisgICAgKikgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAkYWNfdmFyPSRhY19uZXdfdmFsIgorICAgICAgIDs7CisgICAgZXNhYworICBmaQorZG9uZQoraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorICB7IGVjaG8gIiRhc19tZToxMDY1OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgeyB7IGVjaG8gIiRhc19tZToxMDY3OiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KKyAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JworJyBFQ0hPX1Q9JwknIDs7CisgICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKKyAgKikgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKK2VzYWMKK2VjaG8gIiMhICRTSEVMTCIgPmNvbmZ0ZXN0LnNoCitlY2hvICAiZXhpdCAwIiAgID4+Y29uZnRlc3Quc2gKK2NobW9kICt4IGNvbmZ0ZXN0LnNoCitpZiB7IChlY2hvICIkYXNfbWU6MTA4ODogUEFUSD1cIi47LlwiOyBjb25mdGVzdC5zaCIpID4mNQorICAoUEFUSD0iLjsuIjsgY29uZnRlc3Quc2gpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDkxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgYWNfcGF0aF9zZXBhcmF0b3I9JzsnCitlbHNlCisgIGFjX3BhdGhfc2VwYXJhdG9yPToKK2ZpCitQQVRIX1NFUEFSQVRPUj0iJGFjX3BhdGhfc2VwYXJhdG9yIgorcm0gLWYgY29uZnRlc3Quc2gKKworYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBpbmNsdWRlL25jdXJzZXNfY2ZnLmg6aW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4iCisKK3RvcF9idWlsZGRpcj1gcHdkYAorCitlY2hvICIkYXNfbWU6MTEwNDogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2VncmVwK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKKyAgICBlbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJworICAgIGZpCitmaQorZWNobyAiJGFzX21lOjExMTQ6IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgorIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCisKK3Rlc3QgLXogIiRFR1JFUCIgJiYgeyB7IGVjaG8gIiRhc19tZToxMTE4OiBlcnJvcjogTm8gZWdyZXAgcHJvZ3JhbSBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBObyBlZ3JlcCBwcm9ncmFtIGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK05DVVJTRVNfTUFKT1I9ImAkYWNfY3ZfcHJvZ19lZ3JlcCAnXk5DVVJTRVNfTUFKT1JbIAldKj0nICRzcmNkaXIvZGlzdC5tayB8IHNlZCAtZSAncy9eW14wLTldKi8vJ2AiCitOQ1VSU0VTX01JTk9SPSJgJGFjX2N2X3Byb2dfZWdyZXAgJ15OQ1VSU0VTX01JTk9SWyAJXSo9JyAkc3JjZGlyL2Rpc3QubWsgfCBzZWQgLWUgJ3MvXlteMC05XSovLydgIgorTkNVUlNFU19QQVRDSD0iYCRhY19jdl9wcm9nX2VncmVwICdeTkNVUlNFU19QQVRDSFsgCV0qPScgJHNyY2Rpci9kaXN0Lm1rIHwgc2VkIC1lICdzL15bXjAtOV0qLy8nYCIKK2NmX2N2X2FiaV92ZXJzaW9uPSR7TkNVUlNFU19NQUpPUn0KK2NmX2N2X3JlbF92ZXJzaW9uPSR7TkNVUlNFU19NQUpPUn0uJHtOQ1VSU0VTX01JTk9SfQorY2ZfY3ZfdGltZXN0YW1wPWBkYXRlYAorZWNobyAiJGFzX21lOjExMjg6IHJlc3VsdDogQ29uZmlndXJpbmcgTkNVUlNFUyAkY2ZfY3ZfcmVsX3ZlcnNpb24gQUJJICRjZl9jdl9hYmlfdmVyc2lvbiAoJGNmX2N2X3RpbWVzdGFtcCkiID4mNQorZWNobyAiJHtFQ0hPX1R9Q29uZmlndXJpbmcgTkNVUlNFUyAkY2ZfY3ZfcmVsX3ZlcnNpb24gQUJJICRjZl9jdl9hYmlfdmVyc2lvbiAoJGNmX2N2X3RpbWVzdGFtcCkiID4mNgorCit0ZXN0IC16ICIkY2ZfY3ZfcmVsX3ZlcnNpb24iICYmIGNmX2N2X3JlbF92ZXJzaW9uPTAuMAorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJlbC12ZXJzaW9uIG9yIC0td2l0aG91dC1yZWwtdmVyc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcmVsX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcmVsX3ZlcnNpb24iCisgIHsgZWNobyAiJGFzX21lOjExMzY6IFdBUk5JTkc6IG92ZXJyaWRpbmcgcmVsZWFzZSB2ZXJzaW9uICRjZl9jdl9yZWxfdmVyc2lvbiB0byAkd2l0aHZhbCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG92ZXJyaWRpbmcgcmVsZWFzZSB2ZXJzaW9uICRjZl9jdl9yZWxfdmVyc2lvbiB0byAkd2l0aHZhbCIgPiYyO30KKyBjZl9jdl9yZWxfdmVyc2lvbj0kd2l0aHZhbAorZmk7CisKKyBOQ1VSU0VTX01BSk9SPWBlY2hvICIkY2ZfY3ZfcmVsX3ZlcnNpb24iIHwgc2VkIC1lICdzL1wuLiovLydgCisgTkNVUlNFU19NSU5PUj1gZWNobyAiJGNmX2N2X3JlbF92ZXJzaW9uIiB8IHNlZCAtZSAncy9eW14uXSovLycgLWUgJ3MvXlwuLy8nIC1lICdzL1wuLiovLydgCisKK2lmIHRlc3QgLW4gIiROQ1VSU0VTX01BSk9SIiA7IHRoZW4KKyAgY2FzZSAkTkNVUlNFU19NQUpPUiBpbiAjKHZpCisgIFswLTldKikgIyh2aQorIAk7OworICAqKQorCXsgeyBlY2hvICIkYXNfbWU6MTE0OTogZXJyb3I6IFJlbGVhc2UgbWFqb3ItdmVyc2lvbiBpcyBub3QgYSBudW1iZXI6ICROQ1VSU0VTX01BSk9SIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFJlbGVhc2UgbWFqb3ItdmVyc2lvbiBpcyBub3QgYSBudW1iZXI6ICROQ1VSU0VTX01BSk9SIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCTs7CisgIGVzYWMKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZToxMTU1OiBlcnJvcjogUmVsZWFzZSBtYWpvci12ZXJzaW9uIHZhbHVlIGlzIGVtcHR5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFJlbGVhc2UgbWFqb3ItdmVyc2lvbiB2YWx1ZSBpcyBlbXB0eSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworaWYgdGVzdCAtbiAiJE5DVVJTRVNfTUlOT1IiIDsgdGhlbgorICBjYXNlICROQ1VSU0VTX01JTk9SIGluICModmkKKyAgWzAtOV0qKSAjKHZpCisgCTs7CisgICopCisJeyB7IGVjaG8gIiRhc19tZToxMTY1OiBlcnJvcjogUmVsZWFzZSBtaW5vci12ZXJzaW9uIGlzIG5vdCBhIG51bWJlcjogJE5DVVJTRVNfTUlOT1IiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogUmVsZWFzZSBtaW5vci12ZXJzaW9uIGlzIG5vdCBhIG51bWJlcjogJE5DVVJTRVNfTUlOT1IiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAJOzsKKyAgZXNhYworZWxzZQorICB7IHsgZWNobyAiJGFzX21lOjExNzE6IGVycm9yOiBSZWxlYXNlIG1pbm9yLXZlcnNpb24gdmFsdWUgaXMgZW1wdHkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogUmVsZWFzZSBtaW5vci12ZXJzaW9uIHZhbHVlIGlzIGVtcHR5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCit0ZXN0IC16ICIkY2ZfY3ZfYWJpX3ZlcnNpb24iICYmIGNmX2N2X2FiaV92ZXJzaW9uPTAKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hYmktdmVyc2lvbiBvciAtLXdpdGhvdXQtYWJpLXZlcnNpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FiaV92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FiaV92ZXJzaW9uIgorICB7IGVjaG8gIiRhc19tZToxMTgxOiBXQVJOSU5HOiBvdmVycmlkaW5nIEFCSSB2ZXJzaW9uICRjZl9jdl9hYmlfdmVyc2lvbiB0byAkd2l0aHZhbCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG92ZXJyaWRpbmcgQUJJIHZlcnNpb24gJGNmX2N2X2FiaV92ZXJzaW9uIHRvICR3aXRodmFsIiA+JjI7fQorIGNmX2N2X2FiaV92ZXJzaW9uPSR3aXRodmFsCitmaTsKKworaWYgdGVzdCAtbiAiJGNmX2N2X2FiaV92ZXJzaW9uIiA7IHRoZW4KKyAgY2FzZSAkY2ZfY3ZfYWJpX3ZlcnNpb24gaW4gIyh2aQorICBbMC05XSopICModmkKKyAJOzsKKyAgKikKKwl7IHsgZWNobyAiJGFzX21lOjExOTE6IGVycm9yOiBBQkkgdmVyc2lvbiBpcyBub3QgYSBudW1iZXI6ICRjZl9jdl9hYmlfdmVyc2lvbiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBBQkkgdmVyc2lvbiBpcyBub3QgYSBudW1iZXI6ICRjZl9jdl9hYmlfdmVyc2lvbiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAk7OworICBlc2FjCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6MTE5NzogZXJyb3I6IEFCSSB2ZXJzaW9uIHZhbHVlIGlzIGVtcHR5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEFCSSB2ZXJzaW9uIHZhbHVlIGlzIGVtcHR5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLjsgZG8KKyAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAkYWNfZGlyL3NodG9vbDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZToxMjE5OiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIKK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisKKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyRhY19jb25maWdfc3ViIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6MTIyOTogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitlY2hvICIkYXNfbWU6MTIzMzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCisgIGFjX2N2X2J1aWxkX2FsaWFzPWAkYWNfY29uZmlnX2d1ZXNzYAordGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgorICB7IHsgZWNobyAiJGFzX21lOjEyNDI6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CithY19jdl9idWlsZD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzYCB8fAorICB7IHsgZWNobyAiJGFzX21lOjEyNDY6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitmaQorZWNobyAiJGFzX21lOjEyNTE6IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9idWlsZCIgPiY2CitidWlsZD0kYWNfY3ZfYnVpbGQKK2J1aWxkX2NwdT1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorYnVpbGRfdmVuZG9yPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitidWlsZF9vcz1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCitlY2hvICIkYXNfbWU6MTI1ODogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwordGVzdCAteiAiJGFjX2N2X2hvc3RfYWxpYXMiICYmCisgIGFjX2N2X2hvc3RfYWxpYXM9JGFjX2N2X2J1aWxkX2FsaWFzCithY19jdl9ob3N0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhc2AgfHwKKyAgeyB7IGVjaG8gIiRhc19tZToxMjY3OiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitmaQorZWNobyAiJGFzX21lOjEyNzI6IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNgoraG9zdD0kYWNfY3ZfaG9zdAoraG9zdF9jcHU9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAoraG9zdF9vcz1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKK2lmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuZ3Vlc3MgfHwgdGVzdCAtZiAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MgOyB0aGVuCisJZWNobyAiJGFzX21lOjEyODA6IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdGFyZ2V0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3RhcmdldF9hbGlhcz0kdGFyZ2V0X2FsaWFzCit0ZXN0ICJ4JGFjX2N2X3RhcmdldF9hbGlhcyIgPSAieCIgJiYKKyAgYWNfY3ZfdGFyZ2V0X2FsaWFzPSRhY19jdl9ob3N0X2FsaWFzCithY19jdl90YXJnZXQ9YCRhY19jb25maWdfc3ViICRhY19jdl90YXJnZXRfYWxpYXNgIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6MTI4OTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl90YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl90YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6MTI5NDogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90YXJnZXQiID4mNgordGFyZ2V0PSRhY19jdl90YXJnZXQKK3RhcmdldF9jcHU9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCit0YXJnZXRfdmVuZG9yPWBlY2hvICRhY19jdl90YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAordGFyZ2V0X29zPWBlY2hvICRhY19jdl90YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCit0ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgorICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisgICAgTk9ORU5PTkVzLHgseCwgJiYKKyAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LQorCXN5c3RlbV9uYW1lPSIkaG9zdF9vcyIKK2Vsc2UKKwlzeXN0ZW1fbmFtZT0iYCh1bmFtZSAtcyAtcikgMj4vZGV2L251bGxgIgorCWlmIHRlc3QgLXogIiRzeXN0ZW1fbmFtZSIgOyB0aGVuCisJCXN5c3RlbV9uYW1lPSJgKGhvc3RuYW1lKSAyPi9kZXYvbnVsbGAiCisJZmkKK2ZpCit0ZXN0IC1uICIkc3lzdGVtX25hbWUiICYmIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgU1lTVEVNX05BTUUgIiRzeXN0ZW1fbmFtZSIKK0VPRgorCitpZiB0ZXN0ICIke2NmX2N2X3N5c3RlbV9uYW1lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNmX2N2X3N5c3RlbV9uYW1lPSIkc3lzdGVtX25hbWUiCitmaQorCit0ZXN0IC16ICIkc3lzdGVtX25hbWUiICYmIHN5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCit0ZXN0IC1uICIkY2ZfY3Zfc3lzdGVtX25hbWUiICYmIGVjaG8gIiRhc19tZToxMzI1OiByZXN1bHQ6IENvbmZpZ3VyaW5nIGZvciAkY2ZfY3Zfc3lzdGVtX25hbWUiID4mNQorZWNobyAiJHtFQ0hPX1R9Q29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSIgPiY2CisKK2lmIHRlc3QgIi4kc3lzdGVtX25hbWUiICE9ICIuJGNmX2N2X3N5c3RlbV9uYW1lIiA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTMyOTogcmVzdWx0OiBDYWNoZWQgc3lzdGVtIG5hbWUgKCRzeXN0ZW1fbmFtZSkgZG9lcyBub3QgYWdyZWUgd2l0aCBhY3R1YWwgKCRjZl9jdl9zeXN0ZW1fbmFtZSkiID4mNQorZWNobyAiJHtFQ0hPX1R9Q2FjaGVkIHN5c3RlbSBuYW1lICgkc3lzdGVtX25hbWUpIGRvZXMgbm90IGFncmVlIHdpdGggYWN0dWFsICgkY2ZfY3Zfc3lzdGVtX25hbWUpIiA+JjYKKwl7IHsgZWNobyAiJGFzX21lOjEzMzE6IGVycm9yOiBcIlBsZWFzZSByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCB0cnkgYWdhaW4uXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXCJQbGVhc2UgcmVtb3ZlIGNvbmZpZy5jYWNoZSBhbmQgdHJ5IGFnYWluLlwiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3RlbS10eXBlIG9yIC0td2l0aG91dC1zeXN0ZW0tdHlwZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzdGVtX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfc3lzdGVtX3R5cGUiCisgIHsgZWNobyAiJGFzX21lOjEzMzk6IFdBUk5JTkc6IG92ZXJyaWRpbmcgc3lzdGVtIHR5cGUgdG8gJHdpdGh2YWwiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdmVycmlkaW5nIHN5c3RlbSB0eXBlIHRvICR3aXRodmFsIiA+JjI7fQorIGNmX2N2X3N5c3RlbV9uYW1lPSR3aXRodmFsCitmaTsKKworIyMjCVNhdmUgdGhlIGdpdmVuICRDRkxBR1MgdG8gYWxsb3cgdXNlci1vdmVycmlkZS4KK2NmX3VzZXJfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIyMJRGVmYXVsdCBpbnN0YWxsLWxvY2F0aW9uCisKK2VjaG8gIiRhc19tZToxMzQ5OiBjaGVja2luZyBmb3IgcHJlZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHByZWZpeC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSIgOyB0aGVuCisJY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbgorCQkjIG5vbi12ZW5kb3Igc3lzdGVtcyBkb24ndCBoYXZlIGEgY29uZmxpY3QKKwlvcGVuYnNkKnxmcmVlYnNkKnxsaW51eCp8Y3lnd2luKnxrKmJzZCotZ251KQorCQlwcmVmaXg9L3VzcgorCQk7OworCSopCXByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKwkJOzsKKwllc2FjCitmaQorZWNobyAiJGFzX21lOjEzNjE6IHJlc3VsdDogJHByZWZpeCIgPiY1CitlY2hvICIke0VDSE9fVH0kcHJlZml4IiA+JjYKKworaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIiA7IHRoZW4KK2VjaG8gIiRhc19tZToxMzY1OiBjaGVja2luZyBmb3IgZGVmYXVsdCBpbmNsdWRlLWRpcmVjdG9yeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZWZhdWx0IGluY2x1ZGUtZGlyZWN0b3J5Li4uICRFQ0hPX0MiID4mNgordGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gMT4mNgorZm9yIGNmX3N5bWJvbCBpbiBcCisJJGluY2x1ZGVkaXIgXAorCSRpbmNsdWRlZGlyL25jdXJzZXMgXAorCSRwcmVmaXgvaW5jbHVkZSBcCisJJHByZWZpeC9pbmNsdWRlL25jdXJzZXMgXAorCS91c3IvbG9jYWwvaW5jbHVkZSBcCisJL3Vzci9sb2NhbC9pbmNsdWRlL25jdXJzZXMgXAorCS91c3IvaW5jbHVkZSBcCisJL3Vzci9pbmNsdWRlL25jdXJzZXMKK2RvCisJY2ZfZGlyPWBldmFsIGVjaG8gJGNmX3N5bWJvbGAKKwlpZiB0ZXN0IC1mICRjZl9kaXIvY3Vyc2VzLmggOyB0aGVuCisJaWYgKCBmZ3JlcCBOQ1VSU0VTX1ZFUlNJT04gJGNmX2Rpci9jdXJzZXMuaCAyPiYxID4vZGV2L251bGwgKSA7IHRoZW4KKwkJaW5jbHVkZWRpcj0iJGNmX3N5bWJvbCIKKwkJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICRhY19uICIJZm91bmQgIiAxPiY2CisJCWJyZWFrCisJZmkKKwlmaQorCXRlc3QgLW4gIiR2ZXJib3NlIiAgJiYgZWNobyAiCXRlc3RlZCAkY2ZfZGlyIiAxPiY2Citkb25lCitlY2hvICIkYXNfbWU6MTM4ODogcmVzdWx0OiAkaW5jbHVkZWRpciIgPiY1CitlY2hvICIke0VDSE9fVH0kaW5jbHVkZWRpciIgPiY2CitmaQorCisjIyMJQ2hlY2tzIGZvciBwcm9ncmFtcy4KK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE0MDI6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKK2VjaG8gIiRhc19tZToxNDE3OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjE0MjU6IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxNDI4OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxNDM3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorZWNobyAiJGFzX21lOjE0NTI6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTQ2MDogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE0NjM6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBDQz0kYWNfY3RfQ0MKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE0NzY6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorZWNobyAiJGFzX21lOjE0OTE6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTQ5OTogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE1MDI6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxNTExOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9DQz0iY2MiCitlY2hvICIkYXNfbWU6MTUyNjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNTM0OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTUzNzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIENDPSRhY19jdF9DQworZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE1NTA6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2lmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICBhY19wcm9nX3JlamVjdGVkPXllcworICBjb250aW51ZQorZmkKK2FjX2N2X3Byb2dfQ0M9ImNjIgorZWNobyAiJGFzX21lOjE1NzA6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBzZXQgZHVtbXkgIiRhY19kaXIvJGFjX3dvcmQiICR7MSsiJEAifQorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTU5MjogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE1OTU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbAorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MTYwNjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorZWNobyAiJGFzX21lOjE2MjE6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTYyOTogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE2MzI6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE2NDU6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKK2VjaG8gIiRhc19tZToxNjYwOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjE2Njg6IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxNjcxOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIENDPSRhY19jdF9DQworZmkKKworZmkKKwordGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOjE2ODM6IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6MTY4ODoiIFwKKyAgICAgImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoreyAoZXZhbCBlY2hvICIkYXNfbWU6MTY5MTogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE2OTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6MTY5NjogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNjk5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGV2YWwgZWNobyAiJGFzX21lOjE3MDE6IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTcwNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTcwOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCitlY2hvICIkYXNfbWU6MTcyNDogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dC4uLiAkRUNIT19DIiA+JjYKK2FjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE3Mjc6IFwiJGFjX2xpbmtfZGVmYXVsdFwiIikgPiY1CisgIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNzMwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIyBGaW5kIHRoZSBvdXRwdXQsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LiAgVGhpcyBzY2hlbWUgaXMKKyMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopIG9ubHkgYXMgYSBsYXN0CisjIHJlc29ydC4KK2ZvciBhY19maWxlIGluIGBscyBhLmV4ZSBjb25mdGVzdC5leGUgMj4vZGV2L251bGw7CisgICAgICAgICAgICAgICAgbHMgYS5vdXQgY29uZnRlc3QgMj4vZGV2L251bGw7CisgICAgICAgICAgICAgICAgbHMgYS4qIGNvbmZ0ZXN0LiogMj4vZGV2L251bGxgOyBkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi5vIHwgKi5vYmogfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiApIDs7CisgICAgYS5vdXQgKSAjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorICAgICAgICAgICAgIyBjZXJ0YWlubHkgcmlnaHQuCisgICAgICAgICAgICBicmVhazs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisgICAgICAgICAgIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wgLS1ha2ltLgorICAgICAgICAgIGV4cG9ydCBhY19jdl9leGVleHQKKyAgICAgICAgICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7IHsgZWNobyAiJGFzX21lOjE3NTM6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzIiA+JjI7fQorICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KK2ZpCisKK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CitlY2hvICIkYXNfbWU6MTc1OTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2CisKKyMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorZWNobyAiJGFzX21lOjE3NjQ6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNgorIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAorIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTc3MDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE3NzM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7IGVjaG8gIiRhc19tZToxNzgwOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGZpCisgIGZpCitmaQorZWNobyAiJGFzX21lOjE3ODg6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CisKK3JtIC1mIGEub3V0IGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKyMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorZWNobyAiJGFzX21lOjE3OTU6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAkRUNIT19DIiA+JjYKK2VjaG8gIiRhc19tZToxNzk3OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2CisKK2VjaG8gIiRhc19tZToxODAwOiBjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXguLi4gJEVDSE9fQyIgPiY2CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxODAyOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxODA1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBgKGxzIGNvbmZ0ZXN0LmV4ZTsgbHMgY29uZnRlc3Q7IGxzIGNvbmZ0ZXN0LiopIDI+L2Rldi9udWxsYDsgZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoubyB8ICoub2JqIHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorICAgICAgICAgIGV4cG9ydCBhY19jdl9leGVleHQKKyAgICAgICAgICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgZWNobyAiJGFzX21lOjE4MjE6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBFWEVFWFQ6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIEVYRUVYVDogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAorZWNobyAiJGFzX21lOjE4Mjc6IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjYKKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCitlY2hvICIkYXNfbWU6MTgzMzogY2hlY2tpbmcgZm9yIG9iamVjdCBzdWZmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2JqZWN0IHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTgzOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxODUxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxODU0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgZm9yIGFjX2ZpbGUgaW4gYChscyBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iajsgbHMgY29uZnRlc3QuKikgMj4vZGV2L251bGxgOyBkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7IHsgZWNobyAiJGFzX21lOjE4NjY6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBPQkpFWFQ6IGNhbm5vdCBjb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIE9CSkVYVDogY2Fubm90IGNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxODczOiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2CitPQkpFWFQ9JGFjX2N2X29iamV4dAorYWNfb2JqZXh0PSRPQkpFWFQKK2VjaG8gIiRhc19tZToxODc3OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTg4MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxODk4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxOTAxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE5MDQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxOTA3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK2VjaG8gIiRhc19tZToxOTE5OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNgorR0NDPWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1nIgorZWNobyAiJGFzX21lOjE5MjU6IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxOTMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTk0MzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTk0NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxOTQ5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTk1MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfcHJvZ19jY19nPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjE5NjI6IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCitmaQorIyBTb21lIHBlb3BsZSB1c2UgYSBDKysgY29tcGlsZXIgdG8gY29tcGlsZSBDLiAgU2luY2Ugd2UgdXNlIGBleGl0JywKKyMgaW4gQysrIHdlIG5lZWQgdG8gZGVjbGFyZSBpdC4gIEluIGNhc2Ugc29tZW9uZSB1c2VzIHRoZSBzYW1lIGNvbXBpbGVyCisjIGZvciBib3RoIGNvbXBpbGluZyBDIGFuZCBDKysgd2UgbmVlZCB0byBoYXZlIHRoZSBDKysgY29tcGlsZXIgZGVjaWRlCisjIHRoZSBkZWNsYXJhdGlvbiBvZiBleGl0LCBzaW5jZSBpdCdzIHRoZSBtb3N0IGRlbWFuZGluZyBlbnZpcm9ubWVudC4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2lmbmRlZiBfX2NwbHVzcGx1cworICBjaG9rZSBtZQorI2VuZGlmCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE5ODk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE5OTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTk5NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE5OTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAorICAgJydcCisgICAnI2luY2x1ZGUgPHN0ZGxpYi5oPicgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCisgICAndm9pZCBleGl0IChpbnQpOycKK2RvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjAxMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CiskYWNfZGVjbGFyYXRpb24KK2ludAorbWFpbiAoKQoreworZXhpdCAoNDIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyMDIzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMDI2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjIwMjk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMDMyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Citjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIwNDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorJGFjX2RlY2xhcmF0aW9uCitpbnQKK21haW4gKCkKK3sKK2V4aXQgKDQyKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjA1NDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjA1NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToyMDYwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjA2MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0KgoraWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgorICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAorICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAorICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAorZmkKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworR0NDX1ZFUlNJT049bm9uZQoraWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisJZWNobyAiJGFzX21lOjIwOTM6IGNoZWNraW5nIHZlcnNpb24gb2YgJENDIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdmVyc2lvbiBvZiAkQ0MuLi4gJEVDSE9fQyIgPiY2CisJR0NDX1ZFUlNJT049ImAke0NDfSAtLXZlcnNpb258IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQykgLy8nIC1lICdzL15bXjAtOS5dKi8vJyAtZSAncy9bXjAtOS5dLiovLydgIgorCXRlc3QgLXogIiRHQ0NfVkVSU0lPTiIgJiYgR0NDX1ZFUlNJT049dW5rbm93bgorCWVjaG8gIiRhc19tZToyMDk3OiByZXN1bHQ6ICRHQ0NfVkVSU0lPTiIgPiY1CitlY2hvICIke0VDSE9fVH0kR0NDX1ZFUlNJT04iID4mNgorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCitlY2hvICIkYXNfbWU6MjEwNzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyMTI4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyMTMzOiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToyMTM5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyMTYyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyMTY2OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToyMTcyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK2VjaG8gIiRhc19tZToyMjA5OiByZXN1bHQ6ICRDUFAiID4mNQorZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIyMTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIyMjQ6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjIyMzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIyNTMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIyNTc6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjIyNjM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIDoKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZToyMjkxOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjayIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2lmIHRlc3QgJGFjX2N2X2NfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgICAgZWNobyAiJGFzX21lOjIzMDQ6IGNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICBhY19wYXR0ZXJuPSJBdXRvY29uZi4qJ3gnIgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIzMTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHNndHR5Lmg+CitpbnQgQXV0b2NvbmYgPSBUSU9DR0VUUDsKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IG5vOyB0aGVuCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyMzI2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDx0ZXJtaW8uaD4KK2ludCBBdXRvY29uZiA9IFRDR0VUQTsKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorZmkKK2VjaG8gIiRhc19tZToyMzM5OiByZXN1bHQ6ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNgorICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IHllczsgdGhlbgorICAgIENDPSIkQ0MgLXRyYWRpdGlvbmFsIgorICBmaQorZmkKKworZWNobyAiJGFzX21lOjIzNDY6IGNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfcHJvZ19DQ19jX28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PENGX0VPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpCit7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KK0NGX0VPRgorIyBXZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4KKyMgZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLCB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9JyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIzNjI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMzY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChldmFsIGVjaG8gIiRhc19tZToyMzY3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjM3MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OwordGhlbgorICBldmFsIGNmX2N2X3Byb2dfQ0NfY19vPXllcworZWxzZQorICBldmFsIGNmX2N2X3Byb2dfQ0NfY19vPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCitpZiB0ZXN0ICRjZl9jdl9wcm9nX0NDX2NfbyA9IHllczsgdGhlbgorICBlY2hvICIkYXNfbWU6MjM4MTogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjIzODQ6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZWNobyAiJGFzX21lOjIzODg6IGNoZWNraW5nIGZvciBQT1NJWGl6ZWQgSVNDIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBPU0lYaXplZCBJU0MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0IC1kIC9ldGMvY29uZi9rY29uZmlnLmQgJiYKKyAgIGdyZXAgX1BPU0lYX1ZFUlNJT04gL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKyAgZWNobyAiJGFzX21lOjIzOTM6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CisgIElTQz15ZXMgIyBJZiBsYXRlciB0ZXN0cyB3YW50IHRvIGNoZWNrIGZvciBJU0MuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UgMQorRU9GCisKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDQz0iJENDIC1wb3NpeCIKKyAgZWxzZQorICAgIENDPSIkQ0MgLVhwIgorICBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6MjQwNzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIElTQz0KK2ZpCisKK2VjaG8gIiRhc19tZToyNDEyOiBjaGVja2luZyBmb3IgJHtDQy1jY30gb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJHtDQy1jY30gb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2Fuc2lfY2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfYW5zaV9jYz1ubworY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisjIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAorIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCisjIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCisjIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKKyMgSFAtVVgJCQktQWEgLURfSFBVWF9TT1VSQ0UKKyMgU1ZSNAkJCS1YYworIyBVbml4V2FyZSAxLjIJCShjYW5ub3QgdXNlIC1YYywgc2luY2UgQU5TSS9QT1NJWCBjbGFzaGVzKQorZm9yIGNmX2FyZyBpbiAiLURDQ19IQVNfUFJPVE9TIiBcCisJIiIgXAorCS1xbGFuZ2x2bD1hbnNpIFwKKwktc3RkMSBcCisJLUFlIFwKKwkiLUFhIC1EX0hQVVhfU09VUkNFIiBcCisJLVhjCitkbworCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl9hcmcKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjUwNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZm5kZWYgQ0NfSEFTX1BST1RPUworI2lmICFkZWZpbmVkKF9fU1REQ19fKSB8fCAoX19TVERDX18gIT0gMSkKK2Nob2tlIG1lCisjZW5kaWYKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworCWludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworCXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9OworCXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyNTI3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyNTMwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjI1MzM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyNTM2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfYW5zaV9jYz0iJGNmX2FyZyI7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCitmaQorZWNobyAiJGFzX21lOjI1NDk6IHJlc3VsdDogJGNmX2N2X2Fuc2lfY2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2Fuc2lfY2MiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfYW5zaV9jYyIgIT0gIm5vIjsgdGhlbgoraWYgdGVzdCAiLiRjZl9jdl9hbnNpX2NjIiAhPSAiLi1EQ0NfSEFTX1BST1RPUyI7IHRoZW4KKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkY2ZfY3ZfYW5zaV9jYworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCitlbHNlCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQ0NfSEFTX1BST1RPUyAxCitFT0YKKworZmkKK2ZpCisKK2lmIHRlc3QgIiRjZl9jdl9hbnNpX2NjIiA9ICJubyI7IHRoZW4KKwl7IHsgZWNobyAiJGFzX21lOjI2MzI6IGVycm9yOiBZb3VyIGNvbXBpbGVyIGRvZXMgbm90IGFwcGVhciB0byByZWNvZ25pemUgcHJvdG90eXBlcy4KK1lvdSBoYXZlIHRoZSBmb2xsb3dpbmcgY2hvaWNlczoKKwlhLiBhZGp1c3QgeW91ciBjb21waWxlciBvcHRpb25zCisJYi4gZ2V0IGFuIHVwLXRvLWRhdGUgY29tcGlsZXIKKwljLiB1c2UgYSB3cmFwcGVyIHN1Y2ggYXMgdW5wcm90byIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBZb3VyIGNvbXBpbGVyIGRvZXMgbm90IGFwcGVhciB0byByZWNvZ25pemUgcHJvdG90eXBlcy4KK1lvdSBoYXZlIHRoZSBmb2xsb3dpbmcgY2hvaWNlczoKKwlhLiBhZGp1c3QgeW91ciBjb21waWxlciBvcHRpb25zCisJYi4gZ2V0IGFuIHVwLXRvLWRhdGUgY29tcGlsZXIKKwljLiB1c2UgYSB3cmFwcGVyIHN1Y2ggYXMgdW5wcm90byIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KK29zMiopCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1abXQiCisgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9fU1RfTVRfRVJSTk9fXyIKKyAgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1abXQiCisgICAgIyBhdXRvY29uZidzIG1hY3JvIHNldHMgLVpleGUgYW5kIHN1ZmZpeCBib3RoLCB3aGljaCBjb25mbGljdDp3CisgICAgTERGTEFHUz0iJExERkxBR1MgLVptdCAtWmNydGRsbCIKKyAgICBhY19jdl9leGVleHQ9LmV4ZQorICAgIDs7Citlc2FjCisKK1BST0dfRVhUPSIkRVhFRVhUIgorCit0ZXN0IC1uICIkUFJPR19FWFQiICYmIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgUFJPR19FWFQgIiRQUk9HX0VYVCIKK0VPRgorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKyAgTERDT05GSUc9OgorZWxzZQorY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbiAjKHZpCitmcmVlYnNkKikgIyh2aQorICB0ZXN0IC16ICIkTERDT05GSUciICYmIExEQ09ORklHPSIvc2Jpbi9sZGNvbmZpZyAtUiIKKyAgOzsKKyopIExEUEFUSD0kUEFUSDovc2JpbjovdXNyL3NiaW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsZGNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGRjb25maWc7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToyNjcyOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfTERDT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTERDT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTERDT05GSUc9IiRMRENPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkTERQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCI7IHRoZW4KKyAgIGFjX2N2X3BhdGhfTERDT05GSUc9IiRhY19kaXIvJGFjX3dvcmQiCisgICBlY2hvICIkYXNfbWU6MjY4OTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CisgICBicmVhaworZmkKK2RvbmUKKworICA7OworZXNhYworZmkKK0xEQ09ORklHPSRhY19jdl9wYXRoX0xEQ09ORklHCisKK2lmIHRlc3QgLW4gIiRMRENPTkZJRyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjI3MDA6IHJlc3VsdDogJExEQ09ORklHIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRENPTkZJRyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyNzAzOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgOzsKK2VzYWMKK2ZpCisKK2VjaG8gIiRhc19tZToyNzExOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBlbnN1cmUgYm9vbCBpcyBjb25zaXN0ZW50IHdpdGggQysrIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gZW5zdXJlIGJvb2wgaXMgY29uc2lzdGVudCB3aXRoIEMrKy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jeHggb3IgLS13aXRob3V0LWN4eCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY3h4K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2N4eCIKKyAgY2Zfd2l0aF9jeHg9JHdpdGh2YWwKK2Vsc2UKKyAgY2Zfd2l0aF9jeHg9eWVzCitmaTsKK2VjaG8gIiRhc19tZToyNzIxOiByZXN1bHQ6ICRjZl93aXRoX2N4eCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2Zfd2l0aF9jeHgiID4mNgoraWYgdGVzdCAiWCRjZl93aXRoX2N4eCIgPSBYbm8gOyB0aGVuCisJQ1hYPSIiCisJR1hYPSIiCitlbHNlCisJIyB3aXRoIGF1dG9jb25mIDIuMTMsIHdlIGNhbiBjaGFuZ2UgdGhlIGVycm9yIHRvIGEgd2FybmluZzoKKwkJYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluICRDQ0MgZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MjczOTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCitlY2hvICIkYXNfbWU6Mjc1NDogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0NYWD0kYWNfY3ZfcHJvZ19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGVjaG8gIiRhc19tZToyNzYyOiByZXN1bHQ6ICRDWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyNzY1OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgYWNfY3RfQ1hYPSRDWFgKKyAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI3Nzg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorZWNobyAiJGFzX21lOjI3OTM6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MjgwMTogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MjgwNDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkYWNfY3RfQ1hYIiB8fCBhY19jdF9DWFg9ImcrKyIKKworICBDWFg9JGFjX2N0X0NYWAorZmkKKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorZWNobyAiJGFzX21lOjI4MTY6IiBcCisgICAgICJjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoreyAoZXZhbCBlY2hvICIkYXNfbWU6MjgxOTogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI4MjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6MjgyNDogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyODI3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGV2YWwgZWNobyAiJGFzX21lOjI4Mjk6IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjgzMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisKK2VjaG8gIiRhc19tZToyODM1OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9jeHhfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjg0MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyODU2OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyODU5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjI4NjI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyODY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQorZWNobyAiJGFzX21lOjI4Nzc6IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNgorR1hYPWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCithY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKK0NYWEZMQUdTPSItZyIKK2VjaG8gIiRhc19tZToyODgzOiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjg4OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjI5MDE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI5MDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjkwNzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI5MTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9wcm9nX2N4eF9nPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjI5MjA6IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY3h4X2ciID4mNgoraWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCisgIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0KKyAgZmkKK2ZpCitmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAorICAgJydcCisgICAnI2luY2x1ZGUgPHN0ZGxpYi5oPicgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCisgICAndm9pZCBleGl0IChpbnQpOycKK2RvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjk0NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CiskYWNfZGVjbGFyYXRpb24KK2ludAorbWFpbiAoKQoreworZXhpdCAoNDIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyOTYwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyOTYzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjI5NjY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyOTY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Citjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDI5NzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorJGFjX2RlY2xhcmF0aW9uCitpbnQKK21haW4gKCkKK3sKK2V4aXQgKDQyKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Mjk5MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Mjk5NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToyOTk3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MzAwMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0KgoraWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgorICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAorICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAorICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKKwkJIyBhdXRvY29uZiAyLjV4IHJlbW92ZWQgdGhlIGVycm9yIC0gYnkgaGFyZGNvZGluZyBpdCB0byBnKysuCisJaWYgdGVzdCAiJENYWCIgPSAiZysrIiA7IHRoZW4KKwkJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnKysiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGcrKzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjMwMjc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2FzZSAkQ1hYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiOyB0aGVuCisgICBhY19jdl9wYXRoX0NYWD0iJGFjX2Rpci8kYWNfd29yZCIKKyAgIGVjaG8gIiRhc19tZTozMDQ0OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKKyAgIGJyZWFrCitmaQorZG9uZQorCisgIDs7Citlc2FjCitmaQorQ1hYPSRhY19jdl9wYXRoX0NYWAorCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzA1NTogcmVzdWx0OiAkQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDWFgiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzA1ODogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisJZmkKKwlpZiB0ZXN0ICIkQ1hYIiA9ICJnKysiIDsgdGhlbgorCQl7IGVjaG8gIiRhc19tZTozMDY0OiBXQVJOSU5HOiBpZ25vcmluZyBoYXJkY29kZWQgZysrIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogaWdub3JpbmcgaGFyZGNvZGVkIGcrKyIgPiYyO30KKwkJY2Zfd2l0aF9jeHg9bm87IENYWD0iIjsgR1hYPSIiOworCWZpCitmaQorCitHWFhfVkVSU0lPTj1ub25lCitpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCWVjaG8gIiRhc19tZTozMDcyOiBjaGVja2luZyB2ZXJzaW9uIG9mIGcrKyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHZlcnNpb24gb2YgZysrLi4uICRFQ0hPX0MiID4mNgorCUdYWF9WRVJTSU9OPSJgJHtDWFgtZysrfSAtLXZlcnNpb258IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQykgLy8nIC1lICdzL15bXjAtOS5dKi8vJyAtZSAncy9bXjAtOS5dLiovLydgIgorCXRlc3QgLXogIiRHWFhfVkVSU0lPTiIgJiYgR1hYX1ZFUlNJT049dW5rbm93bgorCWVjaG8gIiRhc19tZTozMDc2OiByZXN1bHQ6ICRHWFhfVkVSU0lPTiIgPiY1CitlY2hvICIke0VDSE9fVH0kR1hYX1ZFUlNJT04iID4mNgorZmkKKworY2FzZSAkR1hYX1ZFUlNJT04gaW4KKzEqfDIuWzAtNl0qKQorCSMgR1hYPSIiOyBDWFg9IiI7IGFjX2N2X3Byb2dfZ3h4PW5vCisJIyBjZl9jeHhfbGlicmFyeT1ubworCXsgZWNobyAiJGFzX21lOjMwODQ6IFdBUk5JTkc6IHRlbXBsYXRlcyBkbyBub3Qgd29yayIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRlbXBsYXRlcyBkbyBub3Qgd29yayIgPiYyO30KKwk7OworZXNhYworCitlY2hvICIkYXNfbWU6MzA4OTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgQysrIGJpbmRpbmcgYW5kIGRlbW8iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBDKysgYmluZGluZyBhbmQgZGVtby4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jeHgtYmluZGluZyBvciAtLXdpdGhvdXQtY3h4LWJpbmRpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2N4eF9iaW5kaW5nK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2N4eF9iaW5kaW5nIgorICBjZl93aXRoX2N4eF9iaW5kaW5nPSR3aXRodmFsCitlbHNlCisgIGNmX3dpdGhfY3h4X2JpbmRpbmc9JGNmX3dpdGhfY3h4CitmaTsKK2VjaG8gIiRhc19tZTozMDk5OiByZXN1bHQ6ICRjZl93aXRoX2N4eF9iaW5kaW5nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl93aXRoX2N4eF9iaW5kaW5nIiA+JjYKKworZWNobyAiJGFzX21lOjMxMDI6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggQWRhOTUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIEFkYTk1Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFkYSBvciAtLXdpdGhvdXQtYWRhIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZGErc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYWRhIgorICBjZl93aXRoX2FkYT0kd2l0aHZhbAorZWxzZQorICBjZl93aXRoX2FkYT15ZXMKK2ZpOworZWNobyAiJGFzX21lOjMxMTI6IHJlc3VsdDogJGNmX3dpdGhfYWRhIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl93aXRoX2FkYSIgPiY2CisKK2VjaG8gIiRhc19tZTozMTE1OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBwcm9ncmFtcyBzdWNoIGFzIHRpYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHByb2dyYW1zIHN1Y2ggYXMgdGljLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXByb2dzIG9yIC0td2l0aG91dC1wcm9ncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcHJvZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcHJvZ3MiCisgIGNmX3dpdGhfcHJvZ3M9JHdpdGh2YWwKK2Vsc2UKKyAgY2Zfd2l0aF9wcm9ncz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjMxMjU6IHJlc3VsdDogJGNmX3dpdGhfcHJvZ3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3dpdGhfcHJvZ3MiID4mNgorCitlY2hvICIkYXNfbWU6MzEyODogY2hlY2tpbmcgaWYgeW91IHdpc2ggdG8gaW5zdGFsbCBjdXJzZXMuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgY3Vyc2VzLmguLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY3Vyc2VzLWggb3IgLS13aXRob3V0LWN1cnNlcy1oIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jdXJzZXNfaCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9jdXJzZXNfaCIKKyAgd2l0aF9jdXJzZXNfaD0kd2l0aHZhbAorZWxzZQorICB3aXRoX2N1cnNlc19oPXllcworZmk7CitlY2hvICIkYXNfbWU6MzEzODogcmVzdWx0OiAkd2l0aF9jdXJzZXNfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9jdXJzZXNfaCIgPiY2CisKK21vZHVsZXNfdG9fYnVpbGQ9Im5jdXJzZXMiCitpZiB0ZXN0ICJYJGNmX3dpdGhfcHJvZ3MiICE9IFhubyA7IHRoZW4KK21vZHVsZXNfdG9fYnVpbGQ9IiRtb2R1bGVzX3RvX2J1aWxkIHByb2dzIHRhY2siCitmaQorbW9kdWxlc190b19idWlsZD0iJG1vZHVsZXNfdG9fYnVpbGQgcGFuZWwgbWVudSBmb3JtIgorCit0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyxeLCRwcm9ncmFtX3ByZWZpeCw7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzLFwkLCRwcm9ncmFtX3N1ZmZpeCw7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorY2F0IDw8XF9BQ0VPRiA+Y29uZnRlc3Quc2VkCitzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCitfQUNFT0YKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWUgfCBzZWQgLWYgY29uZnRlc3Quc2VkYAorcm0gY29uZnRlc3Quc2VkCisKK2ZvciBhY19wcm9nIGluIG1hd2sgZ2F3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozMTY0OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKK2VjaG8gIiRhc19tZTozMTc5OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjMxODc6IHJlc3VsdDogJEFXSyIgPiY1CitlY2hvICIke0VDSE9fVH0kQVdLIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjMxOTA6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCit0ZXN0IC16ICIkQVdLIiAmJiB7IHsgZWNobyAiJGFzX21lOjMxOTc6IGVycm9yOiBObyBhd2sgcHJvZ3JhbSBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBObyBhd2sgcHJvZ3JhbSBmb3VuZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitlY2hvICIkYXNfbWU6MzIwMTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2VncmVwK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKKyAgICBlbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJworICAgIGZpCitmaQorZWNobyAiJGFzX21lOjMyMTE6IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgorIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCisKK3Rlc3QgLXogIiRFR1JFUCIgJiYgeyB7IGVjaG8gIiRhc19tZTozMjE1OiBlcnJvcjogTm8gZWdyZXAgcHJvZ3JhbSBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBObyBlZ3JlcCBwcm9ncmFtIGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCisjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKyMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCisjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisjIEFJWCAvYmluL2luc3RhbGwKKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCitlY2hvICIkYXNfbWU6MzIzMTogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRCBjb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0kYWNfc2F2ZV9JRlMKKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKyAgICBjYXNlICRhY19kaXIvIGluCisgICAgLyB8IC4vIHwgLi8vIHwgL2NDLyogXAorICAgIHwgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogXAorICAgIHwgL3Vzci91Y2IvKiApIDs7CisgICAgKikKKyAgICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAgICMgYnkgZGVmYXVsdC4KKyAgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfcHJvZyI7IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisgICAgICAgICAgICBncmVwIGRzcG1zZyAiJGFjX2Rpci8kYWNfcHJvZyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFjX2Rpci8kYWNfcHJvZyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFjX2Rpci8kYWNfcHJvZyAtYyIKKwkgICAgYnJlYWsgMgorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIFdlIGRvbid0IGNhY2hlIGEKKyAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHBhdGggaXMgcmVsYXRpdmUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK2VjaG8gIiRhc19tZTozMjgwOiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjYKKworIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKworY2FzZSAkSU5TVEFMTCBpbgorLyopCisgIDs7CisqKQorICBjZl9kaXI9YGVjaG8gJElOU1RBTEwgfCBzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKyAgdGVzdCAteiAiJGNmX2RpciIgJiYgY2ZfZGlyPS4KKyAgSU5TVEFMTD1gY2QgJGNmX2RpciAmJiBwd2RgL2BlY2hvICRJTlNUQUxMIHwgc2VkIC1lICdzJV4uKi8lJSdgCisgIDs7Citlc2FjCisKK2ZvciBhY19wcm9nIGluIHRkbGludCBsaW50IGFsaW50CitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjMzMDU6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MSU5UK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMSU5UIjsgdGhlbgorICBhY19jdl9wcm9nX0xJTlQ9IiRMSU5UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfTElOVD0iJGFjX3Byb2ciCitlY2hvICIkYXNfbWU6MzMyMDogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0xJTlQ9JGFjX2N2X3Byb2dfTElOVAoraWYgdGVzdCAtbiAiJExJTlQiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozMzI4OiByZXN1bHQ6ICRMSU5UIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMSU5UIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjMzMzE6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkTElOVCIgJiYgYnJlYWsKK2RvbmUKKworZWNobyAiJGFzX21lOjMzMzg6IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICRFQ0hPX0MiID4mNgorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzM0MjogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjMzNDU6IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2CitmaQorCitlY2hvICIkYXNfbWU6MzM0OTogY2hlY2tpbmcgZm9yIGxvbmcgZmlsZSBuYW1lcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb25nIGZpbGUgbmFtZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcz15ZXMKKyMgVGVzdCBmb3IgbG9uZyBmaWxlIG5hbWVzIGluIGFsbCB0aGUgcGxhY2VzIHdlIGtub3cgbWlnaHQgbWF0dGVyOgorIyAgICAgIC4JCXRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2hlcmUgYnVpbGRpbmcgd2lsbCBoYXBwZW4KKyMgICAgICAkcHJlZml4L2xpYgl3aGVyZSB3ZSB3aWxsIGJlIGluc3RhbGxpbmcgdGhpbmdzCisjICAgICAgJGV4ZWNfcHJlZml4L2xpYglsaWtld2lzZQorIyBldmFsIGl0IHRvIGV4cGFuZCBleGVjX3ByZWZpeC4KKyMgICAgICAkVE1QRElSCQlpZiBzZXQsIHdoZXJlIGl0IG1pZ2h0IHdhbnQgdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzCisjIGlmICRUTVBESVIgaXMgbm90IHNldDoKKyMgICAgICAvdG1wCQl3aGVyZSBpdCBtaWdodCB3YW50IHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcworIyAgICAgIC92YXIvdG1wCQlsaWtld2lzZQorIyAgICAgIC91c3IvdG1wCQlsaWtld2lzZQoraWYgdGVzdCAtbiAiJFRNUERJUiIgJiYgdGVzdCAtZCAiJFRNUERJUiIgJiYgdGVzdCAtdyAiJFRNUERJUiI7IHRoZW4KKyAgYWNfdG1wZGlycz0kVE1QRElSCitlbHNlCisgIGFjX3RtcGRpcnM9Jy90bXAgL3Zhci90bXAgL3Vzci90bXAnCitmaQorZm9yIGFjX2RpciBpbiAgLiAkYWNfdG1wZGlycyBgZXZhbCBlY2hvICRwcmVmaXgvbGliICRleGVjX3ByZWZpeC9saWJgIDsgZG8KKyAgdGVzdCAtZCAkYWNfZGlyIHx8IGNvbnRpbnVlCisgIHRlc3QgLXcgJGFjX2RpciB8fCBjb250aW51ZSAjIEl0IGlzIGxlc3MgY29uZnVzaW5nIHRvIG5vdCBlY2hvIGFueXRoaW5nIGhlcmUuCisgIGFjX3hkaXI9JGFjX2Rpci9jZiQkCisgICh1bWFzayAwNzcgJiYgbWtkaXIgJGFjX3hkaXIgMj4vZGV2L251bGwpIHx8IGNvbnRpbnVlCisgIGFjX3RmMT0kYWNfeGRpci9jb25mdGVzdDkwMTIzNDUKKyAgYWNfdGYyPSRhY194ZGlyL2NvbmZ0ZXN0OTAxMjM0NgorICAoZWNobyAxID4kYWNfdGYxKSAyPi9kZXYvbnVsbAorICAoZWNobyAyID4kYWNfdGYyKSAyPi9kZXYvbnVsbAorICBhY192YWw9YGNhdCAkYWNfdGYxIDI+L2Rldi9udWxsYAorICBpZiB0ZXN0ICEgLWYgJGFjX3RmMSB8fCB0ZXN0ICIkYWNfdmFsIiAhPSAxOyB0aGVuCisgICAgYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcz1ubworICAgIHJtIC1yZiAkYWNfeGRpciAyPi9kZXYvbnVsbAorICAgIGJyZWFrCisgIGZpCisgIHJtIC1yZiAkYWNfeGRpciAyPi9kZXYvbnVsbAorZG9uZQorZmkKK2VjaG8gIiRhc19tZTozMzg4OiByZXN1bHQ6ICRhY19jdl9zeXNfbG9uZ19maWxlX25hbWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfbG9uZ19maWxlX25hbWVzIiA+JjYKK2lmIHRlc3QgJGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MT05HX0ZJTEVfTkFNRVMgMQorRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZTozMzk4OiBjaGVja2luZyBpZiB3ZSBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGFzc3VtZSBtaXhlZC1jYXNlIGZpbGVuYW1lcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1peGVkLWNhc2Ugb3IgLS1kaXNhYmxlLW1peGVkLWNhc2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWl4ZWRfY2FzZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbWl4ZWRfY2FzZSIKKyAgZW5hYmxlX21peGVkY2FzZT0kZW5hYmxldmFsCitlbHNlCisgIGVuYWJsZV9taXhlZGNhc2U9YXV0bworZmk7CitlY2hvICIkYXNfbWU6MzQwODogcmVzdWx0OiAkZW5hYmxlX21peGVkY2FzZSIgPiY1CitlY2hvICIke0VDSE9fVH0kZW5hYmxlX21peGVkY2FzZSIgPiY2CitpZiB0ZXN0ICIkZW5hYmxlX21peGVkY2FzZSIgPSAiYXV0byIgOyB0aGVuCisKK2VjaG8gIiRhc19tZTozNDEyOiBjaGVja2luZyBpZiBmaWxlc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgZmlsZXN5c3RlbSBzdXBwb3J0cyBtaXhlZC1jYXNlIGZpbGVuYW1lcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbWl4ZWRjYXNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCWNhc2UgJHRhcmdldF9hbGlhcyBpbiAjKHZpCisJKi1vczItZW14KnwqLW1zZG9zZGpncHAqfCotY3lnd2luKnwqLW1pbmd3MzIqfCotdXdpbiopICModmkKKwkJY2ZfY3ZfbWl4ZWRjYXNlPW5vCisJCTs7CisJKikKKwkJY2ZfY3ZfbWl4ZWRjYXNlPXllcworCQk7OworCWVzYWMKK2Vsc2UKKwlybSAtZiBjb25mdGVzdCBDT05GVEVTVAorCWVjaG8gdGVzdCA+Y29uZnRlc3QKKwlpZiB0ZXN0IC1mIENPTkZURVNUIDsgdGhlbgorCQljZl9jdl9taXhlZGNhc2U9bm8KKwllbHNlCisJCWNmX2N2X21peGVkY2FzZT15ZXMKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0IENPTkZURVNUCitmaQorCitmaQorZWNobyAiJGFzX21lOjM0Mzk6IHJlc3VsdDogJGNmX2N2X21peGVkY2FzZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbWl4ZWRjYXNlIiA+JjYKK3Rlc3QgIiRjZl9jdl9taXhlZGNhc2UiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE1JWEVEQ0FTRV9GSUxFTkFNRVMgMQorRU9GCisKK2Vsc2UKKyAgICBjZl9jdl9taXhlZGNhc2U9JGVuYWJsZV9taXhlZGNhc2UKKyAgICBpZiB0ZXN0ICIkZW5hYmxlX21peGVkY2FzZSIgPSAieWVzIiA7IHRoZW4KKyAgICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTUlYRURDQVNFX0ZJTEVOQU1FUyAxCitFT0YKKworICAgIGZpCitmaQorCisjIGRvIHRoaXMgYWZ0ZXIgbWl4ZWQtY2FzZSBvcHRpb24gKHRhZ3MvVEFHUyBpcyBub3QgYXMgaW1wb3J0YW50IGFzIHRpYykuCitlY2hvICIkYXNfbWU6MzQ1NjogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0uLi4gJEVDSE9fQyIgPiY2CitzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksLi8rLSxfX3BfLCdgCitpZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XEVPRgorYWxsOgorCUBlY2hvICdhY19tYWtldGVtcD0iJHtNQUtFfSInCitFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorZXZhbCBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGwgfCBncmVwIHRlbXA9YAoraWYgdGVzdCAtbiAiJGFjX21ha2V0ZW1wIjsgdGhlbgorICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXMKK2Vsc2UKKyAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19tYWtlXycke2FjX21ha2V9X3NldGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjM0NzY6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CisgIFNFVF9NQUtFPQorZWxzZQorICBlY2hvICIkYXNfbWU6MzQ4MDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY3RhZ3MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGN0YWdzOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzQ4NzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTUFLRV9MT1dFUl9UQUdTIjsgdGhlbgorICBhY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUz0iJE1BS0VfTE9XRVJfVEFHUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUz0ieWVzIgorZWNobyAiJGFzX21lOjM1MDI6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQUtFX0xPV0VSX1RBR1MiICYmIGFjX2N2X3Byb2dfTUFLRV9MT1dFUl9UQUdTPSJubyIKK2ZpCitmaQorTUFLRV9MT1dFUl9UQUdTPSRhY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUworaWYgdGVzdCAtbiAiJE1BS0VfTE9XRVJfVEFHUyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjM1MTE6IHJlc3VsdDogJE1BS0VfTE9XRVJfVEFHUyIgPiY1CitlY2hvICIke0VDSE9fVH0kTUFLRV9MT1dFUl9UQUdTIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjM1MTQ6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworaWYgdGVzdCAiJGNmX2N2X21peGVkY2FzZSIgPSB5ZXMgOyB0aGVuCisJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJldGFncyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZXRhZ3M7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozNTIxOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFLRV9VUFBFUl9UQUdTK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRNQUtFX1VQUEVSX1RBR1MiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFLRV9VUFBFUl9UQUdTPSIkTUFLRV9VUFBFUl9UQUdTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfTUFLRV9VUFBFUl9UQUdTPSJ5ZXMiCitlY2hvICIkYXNfbWU6MzUzNjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX01BS0VfVVBQRVJfVEFHUyIgJiYgYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1M9Im5vIgorZmkKK2ZpCitNQUtFX1VQUEVSX1RBR1M9JGFjX2N2X3Byb2dfTUFLRV9VUFBFUl9UQUdTCitpZiB0ZXN0IC1uICIkTUFLRV9VUFBFUl9UQUdTIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzU0NTogcmVzdWx0OiAkTUFLRV9VUFBFUl9UQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQUtFX1VQUEVSX1RBR1MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzU0ODogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitlbHNlCisJTUFLRV9VUFBFUl9UQUdTPW5vCitmaQorCitpZiB0ZXN0ICIkTUFLRV9VUFBFUl9UQUdTIiA9IHllcyA7IHRoZW4KKwlNQUtFX1VQUEVSX1RBR1M9CitlbHNlCisJTUFLRV9VUFBFUl9UQUdTPSIjIgorZmkKKworaWYgdGVzdCAiJE1BS0VfTE9XRVJfVEFHUyIgPSB5ZXMgOyB0aGVuCisJTUFLRV9MT1dFUl9UQUdTPQorZWxzZQorCU1BS0VfTE9XRVJfVEFHUz0iIyIKK2ZpCisKK2VjaG8gIiRhc19tZTozNTY4OiBjaGVja2luZyBmb3IgbWFrZWZsYWdzIHZhcmlhYmxlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1ha2VmbGFncyB2YXJpYWJsZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbWFrZWZsYWdzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9jdl9tYWtlZmxhZ3M9JycKKwlmb3IgY2Zfb3B0aW9uIGluICctJHtNQUtFRkxBR1N9JyAnJHtNRkxBR1N9JworCWRvCisJCWNhdCA+Y2ZfbWFrZWZsYWdzLnRtcCA8PENGX0VPRgorU0hFTEwgPSAvYmluL3NoCithbGwgOgorCUAgZWNobyAnLiRjZl9vcHRpb24nCitDRl9FT0YKKwkJY2ZfcmVzdWx0PWAke01BS0UtbWFrZX0gLWsgLWYgY2ZfbWFrZWZsYWdzLnRtcCAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncyxbIAldKiQsLCdgCisJCWNhc2UgIiRjZl9yZXN1bHQiIGluCisJCS4qaykKKwkJCWNmX3Jlc3VsdD1gJHtNQUtFLW1ha2V9IC1rIC1mIGNmX21ha2VmbGFncy50bXAgQ0M9Y2MgMj4vZGV2L251bGxgCisJCQljYXNlICIkY2ZfcmVzdWx0IiBpbgorCQkJLipDQz0qKQljZl9jdl9tYWtlZmxhZ3M9CisJCQkJOzsKKwkJCSopCWNmX2N2X21ha2VmbGFncz0kY2Zfb3B0aW9uCisJCQkJOzsKKwkJCWVzYWMKKwkJCWJyZWFrCisJCQk7OworCQkuLSkJOzsKKwkJKikJZWNobyAiZ2l2ZW4gb3B0aW9uIFwiJGNmX29wdGlvblwiLCBubyBtYXRjaCBcIiRjZl9yZXN1bHRcIiIKKwkJCTs7CisJCWVzYWMKKwlkb25lCisJcm0gLWYgY2ZfbWFrZWZsYWdzLnRtcAorCitmaQorZWNobyAiJGFzX21lOjM2MDI6IHJlc3VsdDogJGNmX2N2X21ha2VmbGFncyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbWFrZWZsYWdzIiA+JjYKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjM2MDg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorZWNobyAiJGFzX21lOjM2MjM6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzYzMTogcmVzdWx0OiAkUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzYzNDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzY0MzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorZWNobyAiJGFzX21lOjM2NTg6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSInOiciCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozNjY3OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozNjcwOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgUkFOTElCPSRhY19jdF9SQU5MSUIKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1sZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1sZDsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjM2ODI6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MRCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0xEPSIke2FjX3Rvb2xfcHJlZml4fWxkIgorZWNobyAiJGFzX21lOjM2OTc6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitMRD0kYWNfY3ZfcHJvZ19MRAoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzcwNTogcmVzdWx0OiAkTEQiID4mNQorZWNobyAiJHtFQ0hPX1R9JExEIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjM3MDg6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xEIjsgdGhlbgorICBhY19jdF9MRD0kTEQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGQ7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozNzE3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0xEIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0xEPSIkYWNfY3RfTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9MRD0ibGQiCitlY2hvICIkYXNfbWU6MzczMjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0xEIiAmJiBhY19jdl9wcm9nX2FjX2N0X0xEPSJsZCIKK2ZpCitmaQorYWNfY3RfTEQ9JGFjX2N2X3Byb2dfYWNfY3RfTEQKK2lmIHRlc3QgLW4gIiRhY19jdF9MRCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjM3NDE6IHJlc3VsdDogJGFjX2N0X0xEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9MRCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozNzQ0OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgTEQ9JGFjX2N0X0xECitlbHNlCisgIExEPSIkYWNfY3ZfcHJvZ19MRCIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6Mzc1NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCitlY2hvICIkYXNfbWU6Mzc3MTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozNzc5OiByZXN1bHQ6ICRBUiIgPiY1CitlY2hvICIke0VDSE9fVH0kQVIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6Mzc4MjogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjM3OTE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKK2VjaG8gIiRhc19tZTozODA2OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfQVIiICYmIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzgxNTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjM4MTg6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBBUj0kYWNfY3RfQVIKK2Vsc2UKKyAgQVI9IiRhY19jdl9wcm9nX0FSIgorZmkKKworaWYgdGVzdCAiJHtjZl9jdl9zdWJzdF9BUl9PUFRTK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2VjaG8gIiRhc19tZTozODMxOiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgb3B0aW9ucyAoc3ltYm9sIEFSX09QVFMpIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIG9wdGlvbnMgKHN5bWJvbCBBUl9PUFRTKS4uLiAkRUNIT19DIiA+JjYKKworaWYgdGVzdCAteiAiJEFSX09QVFMiIDsgdGhlbgorCUFSX09QVFM9cnYKKworZmkKKworY2ZfY3Zfc3Vic3RfQVJfT1BUUz0kQVJfT1BUUworZWNobyAiJGFzX21lOjM4NDA6IHJlc3VsdDogJEFSX09QVFMiID4mNQorZWNobyAiJHtFQ0hPX1R9JEFSX09QVFMiID4mNgorCitmaQorCitlY2hvICIkYXNfbWU6Mzg0NTogY2hlY2tpbmcgaWYgeW91IGhhdmUgc3BlY2lmaWVkIGFuIGluc3RhbGwtcHJlZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IGhhdmUgc3BlY2lmaWVkIGFuIGluc3RhbGwtcHJlZml4Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWluc3RhbGwtcHJlZml4IG9yIC0td2l0aG91dC1pbnN0YWxsLXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaW5zdGFsbF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfaW5zdGFsbF9wcmVmaXgiCisgIGNhc2UgIiR3aXRodmFsIiBpbiAjKHZpCisJeWVzfG5vKSAjKHZpCisJCTs7CisJKikJREVTVERJUj0iJHdpdGh2YWwiCisJCTs7CisJZXNhYworZmk7CitlY2hvICIkYXNfbWU6Mzg1ODogcmVzdWx0OiAkREVTVERJUiIgPiY1CitlY2hvICIke0VDSE9fVH0kREVTVERJUiIgPiY2CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcsIGFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSB0b29scyBhbmQgdGhlaXIKKyMgb3B0aW9ucy4gIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIG9yaWVudGVkIHRvd2FyZCBpZGVudGlmeWluZyB0aGUgaG9zdAorIyBjb21waWxlciwgZXRjLiwgYnV0IHdlIG5lZWQgYSBidWlsZCBjb21waWxlciB0byBnZW5lcmF0ZSBwYXJ0cyBvZiB0aGUgc291cmNlLgorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKworCSMgZGVmYXVsdHMgdGhhdCB3ZSBtaWdodCB3YW50IHRvIG92ZXJyaWRlCisJOiAke0JVSUxEX0NGTEFHUzo9Jyd9CisJOiAke0JVSUxEX0NQUEZMQUdTOj0nJ30KKwk6ICR7QlVJTERfTERGTEFHUzo9Jyd9CisJOiAke0JVSUxEX0xJQlM6PScnfQorCTogJHtCVUlMRF9FWEVFWFQ6PSckeCd9CisJOiAke0JVSUxEX09CSkVYVDo9J28nfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWJ1aWxkLWNjIG9yIC0td2l0aG91dC1idWlsZC1jYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnVpbGRfY2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYnVpbGRfY2MiCisgIEJVSUxEX0NDPSIkd2l0aHZhbCIKK2Vsc2UKKyAgZm9yIGFjX3Byb2cgaW4gZ2NjIGNjIGNsCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjM4ODY6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19CVUlMRF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQlVJTERfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQlVJTERfQ0M9IiRCVUlMRF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0JVSUxEX0NDPSIkYWNfcHJvZyIKK2VjaG8gIiRhc19tZTozOTAxOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQlVJTERfQ0M9JGFjX2N2X3Byb2dfQlVJTERfQ0MKK2lmIHRlc3QgLW4gIiRCVUlMRF9DQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjM5MDk6IHJlc3VsdDogJEJVSUxEX0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozOTEyOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJEJVSUxEX0NDIiAmJiBicmVhaworZG9uZQorCitmaTsKKwllY2hvICIkYXNfbWU6MzkyMDogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBDIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgorCWVjaG8gIiRhc19tZTozOTIyOiByZXN1bHQ6ICRCVUlMRF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQlVJTERfQ0MiID4mNgorCisJZWNobyAiJGFzX21lOjM5MjU6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3IiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWJ1aWxkLWNwcCBvciAtLXdpdGhvdXQtYnVpbGQtY3BwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9jcHArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYnVpbGRfY3BwIgorICBCVUlMRF9DUFA9IiR3aXRodmFsIgorZWxzZQorICBCVUlMRF9DUFA9JyR7QlVJTERfQ0N9IC1FJworZmk7CisJZWNobyAiJGFzX21lOjM5MzU6IHJlc3VsdDogJEJVSUxEX0NQUCIgPiY1CitlY2hvICIke0VDSE9fVH0kQlVJTERfQ1BQIiA+JjYKKworCWVjaG8gIiRhc19tZTozOTM4OiBjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgZmxhZ3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgZmxhZ3MuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY2ZsYWdzIG9yIC0td2l0aG91dC1idWlsZC1jZmxhZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2J1aWxkX2NmbGFncytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jZmxhZ3MiCisgIEJVSUxEX0NGTEFHUz0iJHdpdGh2YWwiCitmaTsKKwllY2hvICIkYXNfbWU6Mzk0NjogcmVzdWx0OiAkQlVJTERfQ0ZMQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DRkxBR1MiID4mNgorCisJZWNobyAiJGFzX21lOjM5NDk6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3ItZmxhZ3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yLWZsYWdzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWJ1aWxkLWNwcGZsYWdzIG9yIC0td2l0aG91dC1idWlsZC1jcHBmbGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnVpbGRfY3BwZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYnVpbGRfY3BwZmxhZ3MiCisgIEJVSUxEX0NQUEZMQUdTPSIkd2l0aHZhbCIKK2ZpOworCWVjaG8gIiRhc19tZTozOTU3OiByZXN1bHQ6ICRCVUlMRF9DUFBGTEFHUyIgPiY1CitlY2hvICIke0VDSE9fVH0kQlVJTERfQ1BQRkxBR1MiID4mNgorCisJZWNobyAiJGFzX21lOjM5NjA6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWZsYWdzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBsaW5rZXItZmxhZ3MuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtbGRmbGFncyBvciAtLXdpdGhvdXQtYnVpbGQtbGRmbGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnVpbGRfbGRmbGFncytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9sZGZsYWdzIgorICBCVUlMRF9MREZMQUdTPSIkd2l0aHZhbCIKK2ZpOworCWVjaG8gIiRhc19tZTozOTY4OiByZXN1bHQ6ICRCVUlMRF9MREZMQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9MREZMQUdTIiA+JjYKKworCWVjaG8gIiRhc19tZTozOTcxOiBjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIGxpbmtlci1saWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIGxpbmtlci1saWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtbGlicyBvciAtLXdpdGhvdXQtYnVpbGQtbGlicyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnVpbGRfbGlicytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9saWJzIgorICBCVUlMRF9MSUJTPSIkd2l0aHZhbCIKK2ZpOworCWVjaG8gIiRhc19tZTozOTc5OiByZXN1bHQ6ICRCVUlMRF9MSUJTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9MSUJTIiA+JjYKKworCSMgdGhpcyBhc3N1bWVzIHdlJ3JlIG9uIFVuaXguCisJQlVJTERfRVhFRVhUPQorCUJVSUxEX09CSkVYVD1vCisKKwk6ICR7QlVJTERfQ0M6PScke0NDfSd9CisKKwlpZiAoIHRlc3QgIiRCVUlMRF9DQyIgPSAiJENDIiB8fCB0ZXN0ICIkQlVJTERfQ0MiID0gJyR7Q0N9JyApIDsgdGhlbgorCQl7IHsgZWNobyAiJGFzX21lOjM5ODk6IGVycm9yOiBDcm9zcy1idWlsZCByZXF1aXJlcyB0d28gY29tcGlsZXJzLgorVXNlIC0td2l0aC1idWlsZC1jYyB0byBzcGVjaWZ5IHRoZSBuYXRpdmUgY29tcGlsZXIuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENyb3NzLWJ1aWxkIHJlcXVpcmVzIHR3byBjb21waWxlcnMuCitVc2UgLS13aXRoLWJ1aWxkLWNjIHRvIHNwZWNpZnkgdGhlIG5hdGl2ZSBjb21waWxlci4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwlmaQorCitlbHNlCisJOiAke0JVSUxEX0NDOj0nJHtDQ30nfQorCTogJHtCVUlMRF9DUFA6PScke0NQUH0nfQorCTogJHtCVUlMRF9DRkxBR1M6PScke0NGTEFHU30nfQorCTogJHtCVUlMRF9DUFBGTEFHUzo9JyR7Q1BQRkxBR1N9J30KKwk6ICR7QlVJTERfTERGTEFHUzo9JyR7TERGTEFHU30nfQorCTogJHtCVUlMRF9MSUJTOj0nJHtMSUJTfSd9CisJOiAke0JVSUxEX0VYRUVYVDo9JyR4J30KKwk6ICR7QlVJTERfT0JKRVhUOj0nbyd9CitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyBPcHRpb25zIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHNldCBvZiBsaWJyYXJpZXMgd2hpY2ggYXJlIHVzZWQuCisjIyMgVXNlICItLXdpdGhvdXQtbm9ybWFsIC0td2l0aC1zaGFyZWQiIHRvIGFsbG93IHRoZSBkZWZhdWx0IG1vZGVsIHRvIGJlCisjIyMgc2hhcmVkLCBmb3IgZXhhbXBsZS4KK2NmX2xpc3RfbW9kZWxzPSIiCisKK0xJQlRPT0w9CisKKyMgY29tbW9uIGxpYnJhcnkgbWFpbnRlbmFuY2Ugc3ltYm9scyB0aGF0IGFyZSBjb252ZW5pZW50IGZvciBsaWJ0b29sIHNjcmlwdHM6CitMSUJfQ1JFQVRFPScke0FSfSAtY3InCitMSUJfT0JKRUNUPScke09CSkVDVFN9JworTElCX1NVRkZJWD0uYQorTElCX1BSRVA9IiRSQU5MSUIiCisKKyMgc3ltYm9scyB1c2VkIHRvIHByb3AgbGlidG9vbCB1cCB0byBlbmFibGUgaXQgdG8gZGV0ZXJtaW5lIHdoYXQgaXQgc2hvdWxkIGJlCisjIGRvaW5nOgorTElCX0NMRUFOPQorTElCX0NPTVBJTEU9CitMSUJfTElOSz0nJHtDQ30nCitMSUJfSU5TVEFMTD0KK0xJQl9VTklOU1RBTEw9CisKK2VjaG8gIiRhc19tZTo0MDMwOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBsaWJyYXJpZXMgd2l0aCBsaWJ0b29sIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgbGlicmFyaWVzIHdpdGggbGlidG9vbC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sIG9yIC0td2l0aG91dC1saWJ0b29sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2xpYnRvb2wiCisgIHdpdGhfbGlidG9vbD0kd2l0aHZhbAorZWxzZQorICB3aXRoX2xpYnRvb2w9bm8KK2ZpOworZWNobyAiJGFzX21lOjQwNDA6IHJlc3VsdDogJHdpdGhfbGlidG9vbCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9saWJ0b29sIiA+JjYKK2lmIHRlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJubyI7IHRoZW4KKworIAlpZiB0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAieWVzIiA7IHRoZW4KKworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiR3aXRoX2xpYnRvb2wiIGluICModmkKKy5cJFwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLlthLXpBLVpdOltcXC9dKikgIyh2aSBPUy8yIEVNWAorICA7OworLlwkeypwcmVmaXh9KikgIyh2aQorICBldmFsIHdpdGhfbGlidG9vbD0iJHdpdGhfbGlidG9vbCIKKyAgY2FzZSAiLiR3aXRoX2xpYnRvb2wiIGluICModmkKKyAgLk5PTkUvKikKKyAgICB3aXRoX2xpYnRvb2w9YGVjaG8gJHdpdGhfbGlidG9vbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgICA7OworICBlc2FjCisgIDs7ICModmkKKy5ub3wuTk9ORS8qKQorICB3aXRoX2xpYnRvb2w9YGVjaG8gJHdpdGhfbGlidG9vbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgOzsKKyopCisgIHsgeyBlY2hvICIkYXNfbWU6NDA3MTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRoX2xpYnRvb2xcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkd2l0aF9saWJ0b29sXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgOzsKK2VzYWMKKworCQlMSUJUT09MPSR3aXRoX2xpYnRvb2wKKwllbHNlCisgCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpYnRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpYnRvb2w7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTo0MDgxOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfTElCVE9PTCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXNlICRMSUJUT09MIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0xJQlRPT0w9IiRMSUJUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCI7IHRoZW4KKyAgIGFjX2N2X3BhdGhfTElCVE9PTD0iJGFjX2Rpci8kYWNfd29yZCIKKyAgIGVjaG8gIiRhc19tZTo0MDk4OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKKyAgIGJyZWFrCitmaQorZG9uZQorCisgIDs7Citlc2FjCitmaQorTElCVE9PTD0kYWNfY3ZfcGF0aF9MSUJUT09MCisKK2lmIHRlc3QgLW4gIiRMSUJUT09MIjsgdGhlbgorICBlY2hvICIkYXNfbWU6NDEwOTogcmVzdWx0OiAkTElCVE9PTCIgPiY1CitlY2hvICIke0VDSE9fVH0kTElCVE9PTCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTo0MTEyOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAJZmkKKyAJaWYgdGVzdCAteiAiJExJQlRPT0wiIDsgdGhlbgorIAkJeyB7IGVjaG8gIiRhc19tZTo0MTE4OiBlcnJvcjogQ2Fubm90IGZpbmQgbGlidG9vbCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZmluZCBsaWJ0b29sIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCWZpCisJTElCX0NSRUFURT0nJHtMSUJUT09MfSAtLW1vZGU9bGluayAke0NDfSAtcnBhdGggJHtERVNURElSfSR7bGliZGlyfSAtdmVyc2lvbi1pbmZvIGBjdXQgLWYxICR7c3JjZGlyfS9WRVJTSU9OYCAke0xJQlRPT0xfT1BUU30gLW8nCisJTElCX09CSkVDVD0nJHtPQkpFQ1RTOi5vPS5sb30nCisJTElCX1NVRkZJWD0ubGEKKwlMSUJfQ0xFQU49JyR7TElCVE9PTH0gLS1tb2RlPWNsZWFuJworCUxJQl9DT01QSUxFPScke0xJQlRPT0x9IC0tbW9kZT1jb21waWxlJworCUxJQl9MSU5LPScke0xJQlRPT0x9IC0tbW9kZT1saW5rICR7Q0N9ICR7TElCVE9PTF9PUFRTfScKKwlMSUJfSU5TVEFMTD0nJHtMSUJUT09MfSAtLW1vZGU9aW5zdGFsbCcKKwlMSUJfVU5JTlNUQUxMPScke0xJQlRPT0x9IC0tbW9kZT11bmluc3RhbGwnCisJTElCX1BSRVA9OgorCisJIyBTaG93IHRoZSB2ZXJzaW9uIG9mIGxpYnRvb2wKKwllY2hvICIkYXNfbWU6NDEzMzogY2hlY2tpbmcgdmVyc2lvbiBvZiBsaWJ0b29sIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdmVyc2lvbiBvZiBsaWJ0b29sLi4uICRFQ0hPX0MiID4mNgorCisJIyBTYXZlIHRoZSB2ZXJzaW9uIGluIGEgY2FjaGUgdmFyaWFibGUgLSB0aGlzIGlzIG5vdCBlbnRpcmVseSBhIGdvb2QKKwkjIHRoaW5nLCBidXQgdGhlIHZlcnNpb24gc3RyaW5nIGZyb20gbGlidG9vbCBpcyB2ZXJ5IHVnbHksIGFuZCBmb3IKKwkjIGJ1ZyByZXBvcnRzIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBoYXZlIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisJY2ZfY3ZfbGlidG9vbF92ZXJzaW9uPWAkTElCVE9PTCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtZSAnL14kL2QnIHxzZWQgLWUgJzIsJGQnIC1lICdzLyhbXildKikvL2cnIC1lICdzL15bXjEtOV0qLy8nIC1lICdzL1teMC05Ll0uKi8vJ2AKKwllY2hvICIkYXNfbWU6NDE0MDogcmVzdWx0OiAkY2ZfY3ZfbGlidG9vbF92ZXJzaW9uIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9saWJ0b29sX3ZlcnNpb24iID4mNgorCWlmIHRlc3QgLXogIiRjZl9jdl9saWJ0b29sX3ZlcnNpb24iIDsgdGhlbgorCQl7IHsgZWNobyAiJGFzX21lOjQxNDM6IGVycm9yOiBUaGlzIGlzIG5vdCBHTlUgbGlidG9vbCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBUaGlzIGlzIG5vdCBHTlUgbGlidG9vbCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWZpCisKKwkjIHNwZWNpYWwgaGFjayB0byBhZGQgLS10YWcgb3B0aW9uIGZvciBDKysgY29tcGlsZXIKKwljYXNlICRjZl9jdl9saWJ0b29sX3ZlcnNpb24gaW4KKwkxLls1LTldKnxbMi05XSopCisJCUxJQlRPT0xfQ1hYPSIkTElCVE9PTCAtLXRhZz1DWFgiCisJCUxJQlRPT0w9IiRMSUJUT09MIC0tdGFnPUNDIgorCQk7OworCSopCisJCUxJQlRPT0xfQ1hYPSIkTElCVE9PTCIKKwkJOzsKKwllc2FjCitlbHNlCisJTElCVE9PTD0iIgorCUxJQlRPT0xfQ1hYPSIiCitmaQorCit0ZXN0IC16ICIkTElCVE9PTCIgJiYgRUNIT19MVD0KKworaWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIiA7IHRoZW4KKworY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBsaWJ0b29sIgorCitlbHNlCisKK2VjaG8gIiRhc19tZTo0MTcxOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zaGFyZWQgb3IgLS13aXRob3V0LXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3NoYXJlZCIKKyAgd2l0aF9zaGFyZWQ9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9zaGFyZWQ9bm8KK2ZpOworZWNobyAiJGFzX21lOjQxODE6IHJlc3VsdDogJHdpdGhfc2hhcmVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3NoYXJlZCIgPiY2Cit0ZXN0ICIkd2l0aF9zaGFyZWQiID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBzaGFyZWQiCisKK2VjaG8gIiRhc19tZTo0MTg1OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ub3JtYWwgb3IgLS13aXRob3V0LW5vcm1hbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbm9ybWFsK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX25vcm1hbCIKKyAgd2l0aF9ub3JtYWw9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9ub3JtYWw9eWVzCitmaTsKK2VjaG8gIiRhc19tZTo0MTk1OiByZXN1bHQ6ICR3aXRoX25vcm1hbCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9ub3JtYWwiID4mNgordGVzdCAiJHdpdGhfbm9ybWFsIiA9ICJ5ZXMiICYmIGNmX2xpc3RfbW9kZWxzPSIkY2ZfbGlzdF9tb2RlbHMgbm9ybWFsIgorCitlY2hvICIkYXNfbWU6NDE5OTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlYnVnIG9yIC0td2l0aG91dC1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZGVidWciCisgIHdpdGhfZGVidWc9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9kZWJ1Zz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjQyMDk6IHJlc3VsdDogJHdpdGhfZGVidWciID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZGVidWciID4mNgordGVzdCAiJHdpdGhfZGVidWciID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBkZWJ1ZyIKKworZWNobyAiJGFzX21lOjQyMTM6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHByb2ZpbGluZyBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBwcm9maWxpbmcgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXByb2ZpbGUgb3IgLS13aXRob3V0LXByb2ZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Byb2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcHJvZmlsZSIKKyAgd2l0aF9wcm9maWxlPSR3aXRodmFsCitlbHNlCisgIHdpdGhfcHJvZmlsZT1ubworZmk7CitlY2hvICIkYXNfbWU6NDIyMzogcmVzdWx0OiAkd2l0aF9wcm9maWxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3Byb2ZpbGUiID4mNgordGVzdCAiJHdpdGhfcHJvZmlsZSIgPSAieWVzIiAmJiBjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIHByb2ZpbGUiCisKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZWNobyAiJGFzX21lOjQyMzE6IGNoZWNraW5nIGZvciBzcGVjaWZpZWQgbW9kZWxzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNwZWNpZmllZCBtb2RlbHMuLi4gJEVDSE9fQyIgPiY2Cit0ZXN0IC16ICIkY2ZfbGlzdF9tb2RlbHMiICYmIGNmX2xpc3RfbW9kZWxzPW5vcm1hbAordGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIiAmJiBjZl9saXN0X21vZGVscz1saWJ0b29sCitlY2hvICIkYXNfbWU6NDIzNTogcmVzdWx0OiAkY2ZfbGlzdF9tb2RlbHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2xpc3RfbW9kZWxzIiA+JjYKKworIyMjIFVzZSB0aGUgZmlyc3QgbW9kZWwgYXMgdGhlIGRlZmF1bHQsIGFuZCBzYXZlIGl0cyBzdWZmaXggZm9yIHVzZSBpbiBidWlsZGluZworIyMjIHVwIHRlc3QtYXBwbGljYXRpb25zLgorZWNobyAiJGFzX21lOjQyNDA6IGNoZWNraW5nIGZvciBkZWZhdWx0IG1vZGVsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlZmF1bHQgbW9kZWwuLi4gJEVDSE9fQyIgPiY2CitERlRfTFdSX01PREVMPWBlY2hvICIkY2ZfbGlzdF9tb2RlbHMiIHwgJEFXSyAne3ByaW50ICQxfSdgCitlY2hvICIkYXNfbWU6NDI0MzogcmVzdWx0OiAkREZUX0xXUl9NT0RFTCIgPiY1CitlY2hvICIke0VDSE9fVH0kREZUX0xXUl9NT0RFTCIgPiY2CisKK0RGVF9VUFJfTU9ERUw9YGVjaG8gIiRERlRfTFdSX01PREVMIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworVElDU19OQU1FPXRpYworCitUSU5GT19OQU1FPXRpbmZvCisKK0xJQl9OQU1FPW5jdXJzZXMKKworTElCX0RJUj0uLi9saWIKK0xJQl8yTkQ9Li4vLi4vbGliCisKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJT1MvMip8b3MyKikgIyh2aQorICAgICAgICBMSUJfUFJFRklYPScnCisgICAgICAgIDs7CisJKikJTElCX1BSRUZJWD0nbGliJworICAgICAgICA7OworCWVzYWMKK2NmX3ByZWZpeD0kTElCX1BSRUZJWAorCitMSUJfUFJFRklYPSRjZl9wcmVmaXgKKworTElCX1NVRkZJWD0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitlY2hvICIkYXNfbWU6NDI3MjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBzZXBhcmF0ZSB0ZXJtaW5mbyBsaWJyYXJ5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBzZXBhcmF0ZSB0ZXJtaW5mbyBsaWJyYXJ5Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRlcm1saWIgb3IgLS13aXRob3V0LXRlcm1saWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Rlcm1saWIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfdGVybWxpYiIKKyAgd2l0aF90ZXJtbGliPSR3aXRodmFsCitlbHNlCisgIHdpdGhfdGVybWxpYj1ubworZmk7CitlY2hvICIkYXNfbWU6NDI4MjogcmVzdWx0OiAkd2l0aF90ZXJtbGliIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3Rlcm1saWIiID4mNgorCitlY2hvICIkYXNfbWU6NDI4NTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBzZXBhcmF0ZSB0aWMgbGlicmFyeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEgc2VwYXJhdGUgdGljIGxpYnJhcnkuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGljbGliIG9yIC0td2l0aG91dC10aWNsaWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RpY2xpYitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90aWNsaWIiCisgIHdpdGhfdGljbGliPSR3aXRodmFsCitlbHNlCisgIHdpdGhfdGljbGliPW5vCitmaTsKK2VjaG8gIiRhc19tZTo0Mjk1OiByZXN1bHQ6ICR3aXRoX3RpY2xpYiIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF90aWNsaWIiID4mNgorCisjIyMgQ2hlY2tzIGZvciBzcGVjaWFsIGxpYnJhcmllcywgbXVzdCBiZSBkb25lIHVwLWZyb250LgorU0hMSUJfTElTVD0iIgorCitlY2hvICIkYXNfbWU6NDMwMTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBHUE0gbW91c2UgbGlicmFyeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCB0aGUgR1BNIG1vdXNlIGxpYnJhcnkuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ3BtIG9yIC0td2l0aG91dC1ncG0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dwbStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9ncG0iCisgIHdpdGhfZ3BtPSR3aXRodmFsCitlbHNlCisgIHdpdGhfZ3BtPW1heWJlCitmaTsKK2VjaG8gIiRhc19tZTo0MzExOiByZXN1bHQ6ICR3aXRoX2dwbSIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9ncG0iID4mNgorCitpZiB0ZXN0ICIkd2l0aF9ncG0iICE9IG5vIDsgdGhlbgorCWVjaG8gIiRhc19tZTo0MzE1OiBjaGVja2luZyBmb3IgZ3BtLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ3BtLmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ncG1faCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQzMjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGdwbS5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0MzI1OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTo0MzMxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9ncG1faD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2hlYWRlcl9ncG1faD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjQzNTA6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9ncG1faCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX2dwbV9oIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9ncG1faCA9IHllczsgdGhlbgorCisJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfR1BNX0ggMQorRU9GCisKKwkJaWYgdGVzdCAiJHdpdGhfZ3BtIiAhPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ3BtIiAhPSBtYXliZSA7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYXNzdW1pbmcgd2UgcmVhbGx5IGhhdmUgR1BNIGxpYnJhcnkiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjQzNjE6IHRlc3RpbmcgYXNzdW1pbmcgd2UgcmVhbGx5IGhhdmUgR1BNIGxpYnJhcnkgLi4uIiAxPiY1CisKKwkJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTElCR1BNIDEKK0VPRgorCisJCWVsc2UKKwkJCWVjaG8gIiRhc19tZTo0MzY4OiBjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ncG1fR3BtX09wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0Mzc2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBHcG1fT3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworR3BtX09wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0Mzk1OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0Mzk4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDQwMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ0MDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZ3BtX0dwbV9PcGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZ3BtX0dwbV9PcGVuPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTo0NDE1OiByZXN1bHQ6ICRhY19jdl9saWJfZ3BtX0dwbV9PcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ3BtX0dwbV9PcGVuIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9ncG1fR3BtX09wZW4gPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorCisJCQkJeyB7IGVjaG8gIiRhc19tZTo0NDIxOiBlcnJvcjogQ2Fubm90IGxpbmsgd2l0aCBHUE0gbGlicmFyeSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgbGluayB3aXRoIEdQTSBsaWJyYXJ5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCWZpCisJCXdpdGhfZ3BtPXllcworCitmaQorCitlbHNlCisKKwkJdGVzdCAiJHdpdGhfZ3BtIiAhPSBtYXliZSAmJiB7IGVjaG8gIiRhc19tZTo0NDMxOiBXQVJOSU5HOiBDYW5ub3QgZmluZCBHUE0gaGVhZGVyIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2Fubm90IGZpbmQgR1BNIGhlYWRlciIgPiYyO30KKwkJd2l0aF9ncG09bm8KKworZmkKKworZmkKKworaWYgdGVzdCAiJHdpdGhfZ3BtIiAhPSBubyA7IHRoZW4KKwllY2hvICIkYXNfbWU6NDQ0MDogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbG9hZCBHUE0gZHluYW1pY2FsbHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsb2FkIEdQTSBkeW5hbWljYWxseS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kbHN5bSBvciAtLXdpdGhvdXQtZGxzeW0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Rsc3ltK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2Rsc3ltIgorICB3aXRoX2Rsc3ltPSR3aXRodmFsCitlbHNlCisgIHdpdGhfZGxzeW09eWVzCitmaTsKKwllY2hvICIkYXNfbWU6NDQ1MDogcmVzdWx0OiAkd2l0aF9kbHN5bSIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9kbHN5bSIgPiY2CisJaWYgdGVzdCAiJHdpdGhfZGxzeW0iID0geWVzIDsgdGhlbgorCitjZl9oYXZlX2Rsc3ltPW5vCitlY2hvICIkYXNfbWU6NDQ1NTogY2hlY2tpbmcgZm9yIGRsc3ltIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsc3ltLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX2Rsc3ltK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDQ2MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBkbHN5bSAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkbHN5bSAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfZGxzeW0pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2Rsc3ltKQorY2hva2UgbWUKKyNlbHNlCitmID0gZGxzeW07CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDQ5MjogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDQ5NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ0OTg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NTAxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19kbHN5bT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19kbHN5bT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NDUxMTogcmVzdWx0OiAkYWNfY3ZfZnVuY19kbHN5bSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19kbHN5bSIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2Rsc3ltID0geWVzOyB0aGVuCisgIGNmX2hhdmVfZGxzeW09eWVzCitlbHNlCisKK2NmX2hhdmVfbGliZGw9bm8KK2VjaG8gIiRhc19tZTo0NTE4OiBjaGVja2luZyBmb3IgZGxzeW0gaW4gLWxkbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbHN5bSBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxzeW0rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ1MjYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsc3ltICgpOworaW50CittYWluICgpCit7CitkbHN5bSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ1NDU6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ1NDg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0NTUxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDU1NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9kbF9kbHN5bT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2RsX2Rsc3ltPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTo0NTY1OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxzeW0iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbHN5bSIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxzeW0gPSB5ZXM7IHRoZW4KKworCWNmX2hhdmVfZGxzeW09eWVzCisJY2ZfaGF2ZV9saWJkbD15ZXMKK2ZpCisKK2ZpCisKK2lmIHRlc3QgIiRjZl9oYXZlX2Rsc3ltIiA9IHllcyA7IHRoZW4KKwl0ZXN0ICIkY2ZfaGF2ZV9saWJkbCIgPSB5ZXMgJiYgTElCUz0iLWxkbCAkTElCUyIKKworCWVjaG8gIiRhc19tZTo0NTc4OiBjaGVja2luZyB3aGV0aGVyIGFibGUgdG8gbGluayB0byBkbCooKSBmdW5jdGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGFibGUgdG8gbGluayB0byBkbCooKSBmdW5jdGlvbnMuLi4gJEVDSE9fQyIgPiY2CisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0NTgxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxkbGZjbi5oPgoraW50CittYWluICgpCit7CisKKwkJdm9pZCAqb2JqOworCQlpZiAoKG9iaiA9IGRsb3BlbigiZmlsZW5hbWUiLCAwKSkgIT0gMCkgeworCQkJaWYgKGRsc3ltKG9iaiwgInN5bWJvbG5hbWUiKSA9PSAwKSB7CisJCQlkbGNsb3NlKG9iaik7CisJCQl9CisJCX0KKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ1OTk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ2MDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0NjA1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDYwODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJETCAxCitFT0YKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwkJeyB7IGVjaG8gIiRhc19tZTo0NjE5OiBlcnJvcjogQ2Fubm90IGxpbmsgdGVzdCBwcm9ncmFtIGZvciBsaWJkbCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgbGluayB0ZXN0IHByb2dyYW0gZm9yIGxpYmRsIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCWVjaG8gIiRhc19tZTo0NjI0OiByZXN1bHQ6IG9rIiA+JjUKK2VjaG8gIiR7RUNIT19UfW9rIiA+JjYKK2Vsc2UKKwl7IHsgZWNobyAiJGFzX21lOjQ2Mjc6IGVycm9yOiBDYW5ub3QgZmluZCBkbHN5bSBmdW5jdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZmluZCBkbHN5bSBmdW5jdGlvbiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworCQlpZiB0ZXN0ICIkd2l0aF9ncG0iICE9IHllcyA7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYXNzdW1pbmcgc29uYW1lIGZvciBncG0gaXMgJHdpdGhfZ3BtIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo0NjM1OiB0ZXN0aW5nIGFzc3VtaW5nIHNvbmFtZSBmb3IgZ3BtIGlzICR3aXRoX2dwbSAuLi4iIDE+JjUKKworCQkJY2ZfY3ZfZ3BtX3NvbmFtZT0iJHdpdGhfZ3BtIgorCQllbHNlCisKK2VjaG8gIiRhc19tZTo0NjQwOiBjaGVja2luZyBmb3Igc29uYW1lIG9mIGdwbSBsaWJyYXJ5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvbmFtZSBvZiBncG0gbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZ3BtX3NvbmFtZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjZl9jdl9ncG1fc29uYW1lPXVua25vd24KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllcyA7IHRoZW4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PENGX0VPRgorI2luY2x1ZGUgPGdwbS5oPgoraW50IG1haW4oKQoreworaWYgKEdwbV9PcGVuKDAsMCkpIEdwbV9DbG9zZSgpOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CitDRl9FT0YKK2NmX3NhdmVfTElCUz0iJExJQlMiCisJTElCUz0iLWxncG0gJExJQlMiCisJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDY1ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDY2MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9IDsgdGhlbgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0NjYzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NjY2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gOyB0aGVuCisJCQljZl9jdl9ncG1fc29uYW1lPWBsZGQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLF4uKi8sLCcgLWUgJ3MsIC4qJCwsJyB8IGZncmVwIGxpYmdwbS5gCisJCQl0ZXN0IC16ICIkY2ZfY3ZfZ3BtX3NvbmFtZSIgJiYgY2ZfY3ZfZ3BtX3NvbmFtZT11bmtub3duCisJCWZpCisJZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGNmX3NhdmVfTElCUyIKK2ZpCisKK2ZpCitlY2hvICIkYXNfbWU6NDY3NzogcmVzdWx0OiAkY2ZfY3ZfZ3BtX3NvbmFtZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZ3BtX3NvbmFtZSIgPiY2CisKKwkJZmkKKwkJdGVzdCAiJGNmX2N2X2dwbV9zb25hbWUiICE9ICJ1bmtub3duIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIExJQkdQTV9TT05BTUUgIiRjZl9jdl9ncG1fc29uYW1lIgorRU9GCisKKwkJU0hMSUJfTElTVD0iLWxkbCAkU0hMSUJfTElTVCIKKwllbHNlCisJCVNITElCX0xJU1Q9Ii1sZ3BtICRTSExJQl9MSVNUIgorCWZpCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJHUE0gMQorRU9GCisKK2VjaG8gIiRhc19tZTo0NjkzOiBjaGVja2luZyBmb3IgR3BtX1dnZXRjaCBpbiAtbGdwbSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHcG1fV2dldGNoIGluIC1sZ3BtLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZ3BtX0dwbV9XZ2V0Y2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0NzAxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBHcG1fV2dldGNoICgpOworaW50CittYWluICgpCit7CitHcG1fV2dldGNoICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDcyMDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDcyMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ3MjY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NzI5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2dwbV9HcG1fV2dldGNoPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZ3BtX0dwbV9XZ2V0Y2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjQ3NDA6IHJlc3VsdDogJGFjX2N2X2xpYl9ncG1fR3BtX1dnZXRjaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2dwbV9HcG1fV2dldGNoIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9ncG1fR3BtX1dnZXRjaCA9IHllczsgdGhlbgorCitlY2hvICIkYXNfbWU6NDc0NDogY2hlY2tpbmcgaWYgR1BNIGlzIHdlYWtseSBib3VuZCB0byBjdXJzZXMgbGlicmFyeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIEdQTSBpcyB3ZWFrbHkgYm91bmQgdG8gY3Vyc2VzIGxpYnJhcnkuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2NoZWNrX2dwbV93Z2V0Y2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaD11bmtub3duCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXMgOyB0aGVuCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PENGX0VPRgorI2luY2x1ZGUgPGdwbS5oPgoraW50IG1haW4oKQoreworCUdwbV9XZ2V0Y2goKTsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorQ0ZfRU9GCisKKwljZl9zYXZlX0xJQlM9IiRMSUJTIgorCSMgVGhpcyBvbmx5IHdvcmtzIGlmIHdlIGNhbiBsb29rIGF0IHRoZSBzeW1ib2wgdGFibGUuICBJZiBhIHNoYXJlZAorCSMgbGlicmFyeSBpcyBzdHJpcHBlZCBmb3IgaW5zdGFsbCwgd2UgY2Fubm90IHVzZSB0aGF0LiAgU28gd2UncmUgZm9yY2VkCisJIyB0byByZWx5IG9uIHRoZSBzdGF0aWMgbGlicmFyeSwgbm90aW5nIHRoYXQgc29tZSBwYWNrYWdlcnMgbWF5IG5vdAorCSMgaW5jbHVkZSBpdC4KKwlMSUJTPSItc3RhdGljIC1sZ3BtIC1keW5hbWljICRMSUJTIgorCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ3Njg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ3NzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA7IHRoZW4KKwkJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDc3MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDc3NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9IDsgdGhlbgorCQkJY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaD1gbm0gY29uZnRlc3QkYWNfZXhlZXh0IHwgZWdyZXAgJ1w8d2dldGNoXD4nIHwgZWdyZXAgJ1w8W3ZWd1ddXD4nYAorCQkJdGVzdCAtbiAiJGNmX2N2X2NoZWNrX2dwbV93Z2V0Y2giICYmIGNmX2N2X2NoZWNrX2dwbV93Z2V0Y2g9eWVzCisJCQl0ZXN0IC16ICIkY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCIgJiYgY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaD1ubworCQlmaQorCWZpCisJcm0gLWYgY29uZnRlc3QqCisJTElCUz0iJGNmX3NhdmVfTElCUyIKK2ZpCisKK2ZpCitlY2hvICIkYXNfbWU6NDc4ODogcmVzdWx0OiAkY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9jaGVja19ncG1fd2dldGNoIiAhPSB5ZXMgOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6NDc5MjogV0FSTklORzogR1BNIGxpYnJhcnkgaXMgYWxyZWFkeSBsaW5rZWQgd2l0aCBjdXJzZXMgLSByZWFkIHRoZSBGQVEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBHUE0gbGlicmFyeSBpcyBhbHJlYWR5IGxpbmtlZCB3aXRoIGN1cnNlcyAtIHJlYWQgdGhlIEZBUSIgPiYyO30KK2ZpCisKK2ZpCisKK2ZpCisKKyMgbm90IGV2ZXJ5b25lIGhhcyAidGVzdCAtYyIKK2lmIHRlc3QgLWMgL2Rldi9zeXNtb3VzZSAyPi9kZXYvbnVsbCA7IHRoZW4KK2VjaG8gIiRhc19tZTo0ODAyOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2Ugc3lzbW91c2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2Ugc3lzbW91c2UuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzbW91c2Ugb3IgLS13aXRob3V0LXN5c21vdXNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXNtb3VzZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9zeXNtb3VzZSIKKyAgY2Zfd2l0aF9zeXNtb3VzZT0kd2l0aHZhbAorZWxzZQorICBjZl93aXRoX3N5c21vdXNlPW1heWJlCitmaTsKKwlpZiB0ZXN0ICIkY2Zfd2l0aF9zeXNtb3VzZSIgIT0gbm8gOyB0aGVuCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0ODE0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPG9zcmVsZGF0ZS5oPgorI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMTcpCisjaW5jbHVkZSA8c3lzL2NvbnNpby5oPgorI2luY2x1ZGUgPHN5cy9mYmlvLmg+CisjZWxzZQorI2luY2x1ZGUgPG1hY2hpbmUvY29uc29sZS5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisJc3RydWN0IG1vdXNlX2luZm8gdGhlX21vdXNlOworCWlvY3RsKDAsIENPTlNfTU9VU0VDVEwsICZ0aGVfbW91c2UpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ4Mzc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ4NDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDg0MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ4NDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl93aXRoX3N5c21vdXNlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl93aXRoX3N5c21vdXNlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJZmkKK2VjaG8gIiRhc19tZTo0ODU2OiByZXN1bHQ6ICRjZl93aXRoX3N5c21vdXNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl93aXRoX3N5c21vdXNlIiA+JjYKK3Rlc3QgIiRjZl93aXRoX3N5c21vdXNlIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfU1lTTU9VU0UgMQorRU9GCisKK2ZpCisKK2lmIHRlc3QgWCIkQ0NfR19PUFQiID0gWCIiIDsgdGhlbgorCUNDX0dfT1BUPSctZycKKwl0ZXN0IC1uICIkR0NDIiAmJiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZ30iICE9IHllcyAmJiBDQ19HX09QVD0nJworZmkKKworaWYgdGVzdCBYIiRDWFhfR19PUFQiID0gWCIiIDsgdGhlbgorCUNYWF9HX09QVD0nLWcnCisJdGVzdCAtbiAiJEdYWCIgJiYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nfSIgIT0geWVzICYmIENYWF9HX09QVD0nJworZmkKKworZWNobyAiJGFzX21lOjQ4NzQ6IGNoZWNraW5nIGZvciBkZWZhdWx0IGxvYWRlciBmbGFncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZWZhdWx0IGxvYWRlciBmbGFncy4uLiAkRUNIT19DIiA+JjYKK2Nhc2UgJERGVF9MV1JfTU9ERUwgaW4KK2xpYnRvb2wpIExEX01PREVMPScnICAgOzsKK25vcm1hbCkgIExEX01PREVMPScnICAgOzsKK2RlYnVnKSAgIExEX01PREVMPSRDQ19HX09QVCA7OworcHJvZmlsZSkgTERfTU9ERUw9Jy1wZyc7Oworc2hhcmVkKSAgTERfTU9ERUw9JycgICA7OworZXNhYworZWNobyAiJGFzX21lOjQ4ODM6IHJlc3VsdDogJExEX01PREVMIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRF9NT0RFTCIgPiY2CisKK2Nhc2UgJERGVF9MV1JfTU9ERUwgaW4KK3NoYXJlZCkKKworZWNobyAiJGFzX21lOjQ4ODk6IGNoZWNraW5nIGlmIHJwYXRoIG9wdGlvbiBzaG91bGQgYmUgdXNlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHJwYXRoIG9wdGlvbiBzaG91bGQgYmUgdXNlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwYXRoIG9yIC0tZGlzYWJsZS1ycGF0aCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ycGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfcnBhdGgiCisgIGNmX2N2X2xkX3JwYXRoPSRlbmFibGV2YWwKK2Vsc2UKKyAgY2ZfY3ZfbGRfcnBhdGg9bm8KK2ZpOworZWNobyAiJGFzX21lOjQ4OTk6IHJlc3VsdDogJGNmX2N2X2xkX3JwYXRoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9sZF9ycGF0aCIgPiY2CisKK2VjaG8gIiRhc19tZTo0OTAyOiBjaGVja2luZyBpZiBzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVsaW5rIG9yIC0tZGlzYWJsZS1yZWxpbmsgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVsaW5rK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9yZWxpbmsiCisgIGNmX2N2X2RvX3JlbGluaz0kZW5hYmxldmFsCitlbHNlCisgIGNmX2N2X2RvX3JlbGluaz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjQ5MTI6IHJlc3VsdDogJGNmX2N2X2RvX3JlbGluayIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZG9fcmVsaW5rIiA+JjYKKwk7OworZXNhYworCisJTE9DQUxfTERGTEFHUz0KKwlMT0NBTF9MREZMQUdTMj0KKwlMRF9TSEFSRURfT1BUUz0KKwlJTlNUQUxMX0xJQj0iLW0gNjQ0IgorCisJY2ZfY3ZfZG9fc3ltbGlua3M9bm8KKworCWVjaG8gIiRhc19tZTo0OTI0OiBjaGVja2luZyBpZiByZWxlYXNlL2FiaSB2ZXJzaW9uIHNob3VsZCBiZSB1c2VkIGZvciBzaGFyZWQgbGlicyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHJlbGVhc2UvYWJpIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgZm9yIHNoYXJlZCBsaWJzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNobGliLXZlcnNpb24gb3IgLS13aXRob3V0LXNobGliLXZlcnNpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NobGliX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfc2hsaWJfdmVyc2lvbiIKKyAgdGVzdCAteiAiJHdpdGh2YWwiICYmIHdpdGh2YWw9YXV0bworCWNhc2UgJHdpdGh2YWwgaW4gIyh2aQorCXllcykgIyh2aQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPWF1dG8KKwkJOzsKKwlyZWx8YWJpfGF1dG98bm8pICModmkKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj0kd2l0aHZhbAorCQk7OworCSopCisJCXsgeyBlY2hvICIkYXNfbWU6NDkzOTogZXJyb3I6IG9wdGlvbiB2YWx1ZSBtdXN0IGJlIG9uZSBvZjogcmVsLCBhYmksIGF1dG8gb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogb3B0aW9uIHZhbHVlIG11c3QgYmUgb25lIG9mOiByZWwsIGFiaSwgYXV0byBvciBubyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworCWVzYWMKKworZWxzZQorICBjZl9jdl9zaGxpYl92ZXJzaW9uPWF1dG8KK2ZpOworCWVjaG8gIiRhc19tZTo0OTQ4OiByZXN1bHQ6ICRjZl9jdl9zaGxpYl92ZXJzaW9uIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zaGxpYl92ZXJzaW9uIiA+JjYKKworCWNmX2N2X3JtX3NvX2xvY3M9bm8KKworCSMgU29tZSBsZXNzLWNhcGFibGUgcG9ydHMgb2YgZ2NjIHN1cHBvcnQgb25seSAtZnBpYworCUNDX1NIQVJFRF9PUFRTPQorCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJdGhlbgorCQllY2hvICIkYXNfbWU6NDk1NzogY2hlY2tpbmcgd2hpY2ggJENDIG9wdGlvbiB0byB1c2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGljaCAkQ0Mgb3B0aW9uIHRvIHVzZS4uLiAkRUNIT19DIiA+JjYKKwkJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJCWZvciBDQ19TSEFSRURfT1BUUyBpbiAtZlBJQyAtZnBpYyAnJworCQlkbworCQkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJENDX1NIQVJFRF9PUFRTIgorCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0OTY0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitpbnQgeCA9IDEKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDk3NjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDk3OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0OTgyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDk4NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJZG9uZQorCQllY2hvICIkYXNfbWU6NDk5NDogcmVzdWx0OiAkQ0NfU0hBUkVEX09QVFMiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDX1NIQVJFRF9PUFRTIiA+JjYKKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJZmkKKworCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9bm8KKworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJYmVvcyopCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtbyAkQCAtWGxpbmtlciAtc29uYW1lPWBiYXNlbmFtZSAkQGAgLW5vc3RhcnQgLWUgMCcKKwkJOzsKKwljeWd3aW4qKQorCQlDQ19TSEFSRURfT1BUUz0KKwkJTUtfU0hBUkVEX0xJQj0nc2ggLi4vbWtfc2hhcmVkX2xpYi5zaCAkQCAke0NDfSAke0NGTEFHU30nCisJCWNmX2N2X3NobGliX3ZlcnNpb249Y3lnZGxsCisJCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9Y3lnZGxsCisJCWNhdCA+bWtfc2hhcmVkX2xpYi5zaCA8PC1DRl9FT0YKKwkJIyEvYmluL3NoCisJCVNIQVJFRF9MSUI9XCQxCisJCUlNUE9SVF9MSUI9XGBlY2hvICJcJDEiIHwgc2VkIC1lICdzL2N5Zy9saWIvJyAtZSAncy9bMC05XSpcLmRsbCQvLmRsbC5hLydcYAorCQlzaGlmdAorCQljYXQgPDwtRU9GCisJCUxpbmtpbmcgc2hhcmVkIGxpYnJhcnkKKwkJKiogU0hBUkVEX0xJQiBcJFNIQVJFRF9MSUIKKwkJKiogSU1QT1JUX0xJQiBcJElNUE9SVF9MSUIKK0VPRgorCQlleGVjIFwkKiAtc2hhcmVkIC1XbCwtLW91dC1pbXBsaWI9Li4vbGliL1wke0lNUE9SVF9MSUJ9IC1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyAtbyAuLi9saWIvXCR7U0hBUkVEX0xJQn0KK0NGX0VPRgorCQljaG1vZCAreCBta19zaGFyZWRfbGliLnNoCisJCTs7CisJZGFyd2luKikKKwkJRVhUUkFfQ0ZMQUdTPSItbm8tY3BwLXByZWNvbXAiCisJCUNDX1NIQVJFRF9PUFRTPSItZHluYW1pYyIKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJHtsaWJkaXJ9L2BiYXNlbmFtZSAkQGAgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke0FCSV9WRVJTSU9OfSAtY3VycmVudF92ZXJzaW9uICR7QUJJX1ZFUlNJT059IC1vICRAJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249YWJpCisJCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9eWVzCisJCWVjaG8gIiRhc19tZTo1MDMwOiBjaGVja2luZyBpZiBsZCAtc2VhcmNoX3BhdGhzX2ZpcnN0IHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGQgLXNlYXJjaF9wYXRoc19maXJzdCB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCQkJY2Zfc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJCQlMREZMQUdTPSIkTERGTEFHUyAtV2wsLXNlYXJjaF9wYXRoc19maXJzdCIKKwkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNTAzOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworaW50IGk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1MDUxOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1MDU0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTA1NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUwNjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQkJTERGTEFHUz0kY2Zfc2F2ZV9MREZMQUdTCitmaQorZWNobyAiJGFzX21lOjUwNzE6IHJlc3VsdDogJGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdCIgPiY2CisJCWlmIHRlc3QgJGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0ID0geWVzOyB0aGVuCisJCQlMREZMQUdTPSIkTERGTEFHUyAtV2wsLXNlYXJjaF9wYXRoc19maXJzdCIKKwkJZmkKKwkJOzsKKwlocHV4KikKKwkJIyAodGVzdGVkIHdpdGggZ2NjIDIuNy4yIC0tIEkgZG9uJ3QgaGF2ZSBjODkpCisJCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJCQlMRF9TSEFSRURfT1BUUz0nLVhsaW5rZXIgK2IgLVhsaW5rZXIgJHtsaWJkaXJ9JworCQllbHNlCisJCQlDQ19TSEFSRURfT1BUUz0nK1onCisJCQlMRF9TSEFSRURfT1BUUz0nLVdsLCtiLCR7bGliZGlyfScKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gK2IgJHtsaWJkaXJ9IC1iIC1vICRAJworCQkjIEhQLVVYIHNoYXJlZCBsaWJyYXJpZXMgbXVzdCBiZSBleGVjdXRhYmxlLCBhbmQgc2hvdWxkIGJlCisJCSMgcmVhZG9ubHkgdG8gZXhwbG9pdCBhIHF1aXJrIGluIHRoZSBtZW1vcnkgbWFuYWdlci4KKwkJSU5TVEFMTF9MSUI9Ii1tIDU1NSIKKwkJOzsKKwlpcml4KikKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJCQkJY2ZfbGRfcnBhdGhfb3B0PSItV2wsLXJwYXRoLCIKKwkJCQlFWFRSQV9MREZMQUdTPSItV2wsLXJwYXRoLFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCQllbHNlCisJCQkJY2ZfbGRfcnBhdGhfb3B0PSItcnBhdGggIgorCQkJCUVYVFJBX0xERkxBR1M9Ii1ycGF0aCBcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQkJZmkKKwkJZmkKKwkJIyB0ZXN0ZWQgd2l0aCBJUklYIDUuMiBhbmQgJ2NjJy4KKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLUtQSUMnCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1yZGF0YV9zaGFyZWQgLXNvbmFtZSBgYmFzZW5hbWUgJEBgIC1vICRAJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQGAgLW8gJEAnCisJCWZpCisJCWNmX2N2X3JtX3NvX2xvY3M9eWVzCisJCTs7CisJbGludXgqfGdudSp8aypic2QqLWdudSkKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItV2wsLXJwYXRoLFwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1XbCwtcnBhdGgsIgorCQkJRVhUUkFfTERGTEFHUz0iLVdsLC1ycGF0aCxcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJEAnCisJCTs7CisJb3BlbmJzZFsyLTldLiopCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLVdsLC1ycGF0aCxcJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQlmaQorCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJY2ZfbGRfcnBhdGhfb3B0PSItV2wsLXJwYXRoLCIKKwkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0NfU0hBUkVEX09QVFM9IiRDQ19TSEFSRURfT1BUUyAtRFBJQyIKKworCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSByZWw7IHRoZW4KKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0nCisJZWxzZQorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEBgJworCWZpCisKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1XbCwtQnNoYXJlYWJsZSwtc29uYW1lLCckY2ZfY3Zfc2hhcmVkX3NvbmFtZScsLXN0YXRzLC1sYyAtbyAkQCcKKwkJOzsKKwludG8tcW54KnxvcGVuYnNkKnxmcmVlYnNkWzEyXS4qKQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQlNS19TSEFSRURfTElCPScke0xEfSAtQnNoYXJlYWJsZSAtbyAkQCcKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQk7OworCWZyZWVic2QqKQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiAmJiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLXJwYXRoIFwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iLXJwYXRoIFwke2xpYmRpcn0gJExPQ0FMX0xERkxBR1MiCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1ycGF0aCAiCisJCQlFWFRSQV9MREZMQUdTPSItcnBhdGggXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKworCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSByZWw7IHRoZW4KKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0nCisJZWxzZQorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEBgJworCWZpCisKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLUJzaGFyZWFibGUgLXNvbmFtZT1gYmFzZW5hbWUgJEBgIC1vICRAJworCQk7OworCW5ldGJzZCopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCXRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgJiYgY2ZfbGRfcnBhdGhfb3B0PSItV2wsLXJwYXRoLCIKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgJiYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG87IHRoZW4KKwkJCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLmVsZl9zbzsgdGhlbgorCQkJCWNmX2N2X3NobGliX3ZlcnNpb249YWJpCisJCQllbHNlCisJCQkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwkJCWZpCisJCQlmaQorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1zaGFyZWQgLVdsLC1zb25hbWUsJyRjZl9jdl9zaGFyZWRfc29uYW1lJyAtbyAkQCcKKwkJZWxzZQorCQkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLUJzaGFyZWFibGUgLW8gJEAnCisJCWZpCisJCTs7CisJb3NmKnxtbHMrKikKKwkJIyB0ZXN0ZWQgd2l0aCBPU0YvMSBWMy4yIGFuZCAnY2MnCisJCSMgdGVzdGVkIHdpdGggT1NGLzEgVjMuMiBhbmQgZ2NjIDIuNi4zIChidXQgdGhlIGMrKyBkZW1vIGRpZG4ndAorCQkjIGxpbmsgd2l0aCBzaGFyZWQgbGlicykuCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1zZXRfdmVyc2lvbiAke1JFTF9WRVJTSU9OfToke0FCSV9WRVJTSU9OfSAtZXhwZWN0X3VucmVzb2x2ZWQgIioiIC1zaGFyZWQgLXNvbmFtZSBgYmFzZW5hbWUgJEBgJworCQljYXNlICRob3N0X29zIGluCisJCW9zZjQqKQorCQkJTUtfU0hBUkVEX0xJQj0iJHtNS19TSEFSRURfTElCfSAtbXN5bSIKKwkJCTs7CisJCWVzYWMKKwkJTUtfU0hBUkVEX0xJQj0iJHtNS19TSEFSRURfTElCfSInIC1vICRAJworCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLXJwYXRoIgorCQkJIyBFWFRSQV9MREZMQUdTPSIkTE9DQUxfTERGTEFHUyAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwlzY28zLjJ2NSopICAjIChhbHNvIHV3MiogYW5kIFVXNykgaG9wcyAxMy1BcHItOTgKKwkJIyB0ZXN0ZWQgd2l0aCBvc3I1LjAuNQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctYmVsZiAtS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWR5IC1HIC1oIGBiYXNlbmFtZSAkQCAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059IC1vICRAJworCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJIyBvbmx5IHdheSBpcyB0byBzZXQgTERfUlVOX1BBVEggYnV0IG5vIHN3aXRjaCBmb3IgaXQKKwkJCVJVTl9QQVRIPSRsaWJkaXIKKwkJZmkKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQlMSU5LX1BST0dTPSdMRF9SVU5fUEFUSD0ke2xpYmRpcn0nCisJCUxJTktfVEVTVFM9J1B3ZD1gcHdkYDtMRF9SVU5fUEFUSD1gZGlybmFtZSAkJHtQd2R9YC9saWInCisJCTs7CisJc3Vub3M0KikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA0LjEuMSBhbmQgZ2NjIDIuNy4wCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtYXNzZXJ0IHB1cmUtdGV4dCAtbyAkQCcKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQk7OworCXNvbGFyaXMyKikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA1LjUuMSAoc29sYXJpcyAyLjUuMSkgYW5kIGdjYyAyLjcuMgorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDUuMTAgKHNvbGFyaXMgMTApIGFuZCBnY2MgMy40LjMKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItUiBcJChMT0NBTF9MSUJESVIpOlwke2xpYmRpcn0iCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1SIgorCQkJRVhUUkFfTERGTEFHUz0iJExPQ0FMX0xERkxBR1MgJEVYVFJBX0xERkxBR1MiCisJCWZpCisKKwl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gcmVsOyB0aGVuCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQCAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059JworCWVsc2UKKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAYCcKKwlmaQorCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy14Y29kZT1waWMzMicKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1keSAtRyAtaCAnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRAJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1keSAtRyAtaCAnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRAJworCQlmaQorCQk7OworCXN5c3Y1dXc3Knx1bml4X3N2KikKKwkJIyB0ZXN0ZWQgd2l0aCBVbml4V2FyZSA3LjEuMCAoZ2NjIDIuOTUuMiBhbmQgY2MpCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtZCB5IC1HIC1vICRAJworCQk7OworCSopCisJCUNDX1NIQVJFRF9PUFRTPSd1bmtub3duJworCQlNS19TSEFSRURfTElCPSdlY2hvIHVua25vd24nCisJCTs7CisJZXNhYworCisJIyBUaGlzIHdvcmtzIGlmIHRoZSBsYXN0IHRva2VucyBpbiAkTUtfU0hBUkVEX0xJQiBhcmUgdGhlIC1vIHRhcmdldC4KKwljYXNlICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgaW4gIyh2aQorCXJlbHxhYmkpCisJCWNhc2UgIiRNS19TSEFSRURfTElCIiBpbiAjKHZpCisJCSonLW8gJEAnKQorCQkJdGVzdCAiJGNmX2N2X2RvX3N5bWxpbmtzIiA9IG5vICYmIGNmX2N2X2RvX3N5bWxpbmtzPXllcworCQkJOzsKKwkJKikKKwkJCXsgZWNobyAiJGFzX21lOjUyODg6IFdBUk5JTkc6IGlnbm9yZWQgLS13aXRoLXNobGliLXZlcnNpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZ25vcmVkIC0td2l0aC1zaGxpYi12ZXJzaW9uIiA+JjI7fQorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKKworCWlmIHRlc3QgLW4gIiRjZl9sZF9ycGF0aF9vcHQiIDsgdGhlbgorCQllY2hvICIkYXNfbWU6NTI5NjogY2hlY2tpbmcgaWYgd2UgbmVlZCBhIHNwYWNlIGFmdGVyIHJwYXRoIG9wdGlvbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIG5lZWQgYSBzcGFjZSBhZnRlciBycGF0aCBvcHRpb24uLi4gJEVDSE9fQyIgPiY2CisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCUxJQlM9IiRMSUJTICR7Y2ZfbGRfcnBhdGhfb3B0fSRsaWJkaXIiCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNTMwMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1MzEzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1MzE2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTMxOTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUzMjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9ycGF0aF9zcGFjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9ycGF0aF9zcGFjZT15ZXMKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisJCWVjaG8gIiRhc19tZTo1MzMyOiByZXN1bHQ6ICRjZl9ycGF0aF9zcGFjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfcnBhdGhfc3BhY2UiID4mNgorCQl0ZXN0ICIkY2ZfcnBhdGhfc3BhY2UiID0geWVzICYmIGNmX2xkX3JwYXRoX29wdD0iJGNmX2xkX3JwYXRoX29wdCAiCisJCU1LX1NIQVJFRF9MSUI9IiRNS19TSEFSRURfTElCICRjZl9sZF9ycGF0aF9vcHRcJHtsaWJkaXJ9IgorCWZpCisKK2lmIHRlc3QgIiRDQ19TSEFSRURfT1BUUyIgPSAidW5rbm93biI7IHRoZW4KKwlmb3IgbW9kZWwgaW4gJGNmX2xpc3RfbW9kZWxzOyBkbworCQlpZiB0ZXN0ICIkbW9kZWwiID0gInNoYXJlZCI7IHRoZW4KKwkJCXsgeyBlY2hvICIkYXNfbWU6NTM0MTogZXJyb3I6IFNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCWZpCisJZG9uZQorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtb3ZlcndyaXRlIHRvIGxlYXZlIG91dCB0aGUgbGluayB0byAtbGN1cnNlcworZWNobyAiJGFzX21lOjUzNTE6IGNoZWNraW5nIGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgbmN1cnNlcyBvdmVyd3JpdGluZyBjdXJzZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2lzaCB0byBpbnN0YWxsIG5jdXJzZXMgb3ZlcndyaXRpbmcgY3Vyc2VzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3ZlcndyaXRlIG9yIC0tZGlzYWJsZS1vdmVyd3JpdGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3ZlcndyaXRlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9vdmVyd3JpdGUiCisgIHdpdGhfb3ZlcndyaXRlPSRlbmFibGV2YWwKK2Vsc2UKKyAgaWYgdGVzdCAiJHByZWZpeCIgPSAiL3VzciIgOyB0aGVuIHdpdGhfb3ZlcndyaXRlPXllczsgZWxzZSB3aXRoX292ZXJ3cml0ZT1ubzsgZmkKK2ZpOworZWNobyAiJGFzX21lOjUzNjE6IHJlc3VsdDogJHdpdGhfb3ZlcndyaXRlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX292ZXJ3cml0ZSIgPiY2CisKK2VjaG8gIiRhc19tZTo1MzY0OiBjaGVja2luZyBpZiBleHRlcm5hbCB0ZXJtaW5mby1kYXRhYmFzZSBpcyB1c2VkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgZXh0ZXJuYWwgdGVybWluZm8tZGF0YWJhc2UgaXMgdXNlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRhdGFiYXNlIG9yIC0tZGlzYWJsZS1kYXRhYmFzZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kYXRhYmFzZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZGF0YWJhc2UiCisgIHVzZV9kYXRhYmFzZT0kZW5hYmxldmFsCitlbHNlCisgIHVzZV9kYXRhYmFzZT15ZXMKK2ZpOworZWNobyAiJGFzX21lOjUzNzQ6IHJlc3VsdDogJHVzZV9kYXRhYmFzZSIgPiY1CitlY2hvICIke0VDSE9fVH0kdXNlX2RhdGFiYXNlIiA+JjYKKworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCitvczIqKSAjKHZpCisJVEVSTUlORk9fU1JDPScke3RvcF9zcmNkaXJ9L21pc2MvZW14LnNyYycKKwk7OworKikgIyh2aQorCVRFUk1JTkZPX1NSQz0nJHt0b3Bfc3JjZGlyfS9taXNjL3Rlcm1pbmZvLnNyYycKKwk7OworZXNhYworCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwlvczIqKQlQQVRIU0VQPSc7JyAgOzsKKwkqKQlQQVRIU0VQPSc6JyAgOzsKKwllc2FjCisKK2lmIHRlc3QgIiR1c2VfZGF0YWJhc2UiICE9IG5vIDsgdGhlbgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9EQVRBQkFTRSAxCitFT0YKKworCWVjaG8gIiRhc19tZTo1Mzk2OiBjaGVja2luZyB3aGljaCB0ZXJtaW5mbyBzb3VyY2UtZmlsZSB3aWxsIGJlIGluc3RhbGxlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoaWNoIHRlcm1pbmZvIHNvdXJjZS1maWxlIHdpbGwgYmUgaW5zdGFsbGVkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGF0YWJhc2Ugb3IgLS1kaXNhYmxlLWRhdGFiYXNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RhdGFiYXNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9kYXRhYmFzZSIKKyAgVEVSTUlORk9fU1JDPSR3aXRodmFsCitmaTsKKwllY2hvICIkYXNfbWU6NTQwNDogcmVzdWx0OiAkVEVSTUlORk9fU1JDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRURVJNSU5GT19TUkMiID4mNgorCisJZWNobyAiJGFzX21lOjU0MDc6IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIGhhc2hlZCBkYXRhYmFzZSBpbnN0ZWFkIG9mIGRpcmVjdG9yeS90cmVlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byB1c2UgaGFzaGVkIGRhdGFiYXNlIGluc3RlYWQgb2YgZGlyZWN0b3J5L3RyZWUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaGFzaGVkLWRiIG9yIC0td2l0aG91dC1oYXNoZWQtZGIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2hhc2hlZF9kYitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9oYXNoZWRfZGIiCisKK2Vsc2UKKyAgd2l0aF9oYXNoZWRfZGI9bm8KK2ZpOworCWVjaG8gIiRhc19tZTo1NDE3OiByZXN1bHQ6ICR3aXRoX2hhc2hlZF9kYiIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9oYXNoZWRfZGIiID4mNgorZWxzZQorCXdpdGhfaGFzaGVkX2RiPW5vCitmaQorCitlY2hvICIkYXNfbWU6NTQyMzogY2hlY2tpbmcgZm9yIGxpc3Qgb2YgZmFsbGJhY2sgZGVzY3JpcHRpb25zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpc3Qgb2YgZmFsbGJhY2sgZGVzY3JpcHRpb25zLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZhbGxiYWNrcyBvciAtLXdpdGhvdXQtZmFsbGJhY2tzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9mYWxsYmFja3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZmFsbGJhY2tzIgorICB3aXRoX2ZhbGxiYWNrPSR3aXRodmFsCitlbHNlCisgIHdpdGhfZmFsbGJhY2s9CitmaTsKK2VjaG8gIiRhc19tZTo1NDMzOiByZXN1bHQ6ICR3aXRoX2ZhbGxiYWNrIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2ZhbGxiYWNrIiA+JjYKK0ZBTExCQUNLX0xJU1Q9YGVjaG8gIiR3aXRoX2ZhbGxiYWNrIiB8IHNlZCAtZSAncy8sLyAvZydgCisKK2VjaG8gIiRhc19tZTo1NDM3OiBjaGVja2luZyBpZiB5b3Ugd2FudCBtb2Rlcm4geHRlcm0gb3IgYW50aXF1ZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IG1vZGVybiB4dGVybSBvciBhbnRpcXVlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXh0ZXJtLW5ldyBvciAtLXdpdGhvdXQteHRlcm0tbmV3IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF94dGVybV9uZXcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfeHRlcm1fbmV3IgorICB3aXRoX3h0ZXJtX25ldz0kd2l0aHZhbAorZWxzZQorICB3aXRoX3h0ZXJtX25ldz15ZXMKK2ZpOworY2FzZSAkd2l0aF94dGVybV9uZXcgaW4KK25vKQl3aXRoX3h0ZXJtX25ldz14dGVybS1vbGQ7OworKikJd2l0aF94dGVybV9uZXc9eHRlcm0tbmV3OzsKK2VzYWMKK2VjaG8gIiRhc19tZTo1NDUxOiByZXN1bHQ6ICR3aXRoX3h0ZXJtX25ldyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF94dGVybV9uZXciID4mNgorV0hJQ0hfWFRFUk09JHdpdGhfeHRlcm1fbmV3CisKK01BS0VfVEVSTUlORk89CitpZiB0ZXN0ICIkdXNlX2RhdGFiYXNlIiA9IG5vIDsgdGhlbgorCVRFUk1JTkZPPSIke2RhdGFkaXJ9L3Rlcm1pbmZvIgorCU1BS0VfVEVSTUlORk89IiMiCitlbHNlCisKK2VjaG8gIiRhc19tZTo1NDYxOiBjaGVja2luZyBmb3IgbGlzdCBvZiB0ZXJtaW5mbyBkaXJlY3RvcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaXN0IG9mIHRlcm1pbmZvIGRpcmVjdG9yaWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRlcm1pbmZvLWRpcnMgb3IgLS13aXRob3V0LXRlcm1pbmZvLWRpcnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Rlcm1pbmZvX2RpcnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfdGVybWluZm9fZGlycyIKKworZWxzZQorICB3aXRodmFsPSR7VEVSTUlORk9fRElSUy0ke2RhdGFkaXJ9L3Rlcm1pbmZvfQorZmk7CitJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke1BBVEhTRVB9IgorY2ZfZHN0X3BhdGg9Citmb3IgY2Zfc3JjX3BhdGggaW4gJHdpdGh2YWwKK2RvCisKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi4kY2Zfc3JjX3BhdGgiIGluICModmkKKy5cJFwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLlthLXpBLVpdOltcXC9dKikgIyh2aSBPUy8yIEVNWAorICA7OworLlwkeypwcmVmaXh9KikgIyh2aQorICBldmFsIGNmX3NyY19wYXRoPSIkY2Zfc3JjX3BhdGgiCisgIGNhc2UgIi4kY2Zfc3JjX3BhdGgiIGluICModmkKKyAgLk5PTkUvKikKKyAgICBjZl9zcmNfcGF0aD1gZWNobyAkY2Zfc3JjX3BhdGggfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgY2Zfc3JjX3BhdGg9YGVjaG8gJGNmX3NyY19wYXRoIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICA7OworKikKKyAgeyB7IGVjaG8gIiRhc19tZTo1NTAxOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJGNmX3NyY19wYXRoXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJGNmX3NyY19wYXRoXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgOzsKK2VzYWMKKworICB0ZXN0IC1uICIkY2ZfZHN0X3BhdGgiICYmIGNmX2RzdF9wYXRoPSIke2NmX2RzdF9wYXRofToiCisgIGNmX2RzdF9wYXRoPSIke2NmX2RzdF9wYXRofSR7Y2Zfc3JjX3BhdGh9IgorZG9uZQorSUZTPSIkYWNfc2F2ZV9pZnMiCisKK2V2YWwgJ1RFUk1JTkZPX0RJUlM9IiRjZl9kc3RfcGF0aCInCisKK2VjaG8gIiRhc19tZTo1NTE0OiByZXN1bHQ6ICRURVJNSU5GT19ESVJTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRURVJNSU5GT19ESVJTIiA+JjYKK3Rlc3QgLW4gIiRURVJNSU5GT19ESVJTIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFRFUk1JTkZPX0RJUlMgIiRURVJNSU5GT19ESVJTIgorRU9GCisKK2VjaG8gIiRhc19tZTo1NTIwOiBjaGVja2luZyBmb3IgZGVmYXVsdCB0ZXJtaW5mbyBkaXJlY3RvcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGVmYXVsdCB0ZXJtaW5mbyBkaXJlY3RvcnkuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC10ZXJtaW5mby1kaXIgb3IgLS13aXRob3V0LWRlZmF1bHQtdGVybWluZm8tZGlyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZWZhdWx0X3Rlcm1pbmZvX2RpcitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9kZWZhdWx0X3Rlcm1pbmZvX2RpciIKKworZWxzZQorICB3aXRodmFsPSIke1RFUk1JTkZPLSR7ZGF0YWRpcn0vdGVybWluZm99IgorZmk7IGlmIHRlc3QgLW4gIiR7ZGF0YWRpcn0vdGVybWluZm8iIDsgdGhlbgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgY2ZfcGF0aF9zeW50YXg9IiRwcmVmaXgiCitlbHNlCisgIGNmX3BhdGhfc3ludGF4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitmaQorCitjYXNlICIuJHdpdGh2YWwiIGluICModmkKKy5cJFwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLlthLXpBLVpdOltcXC9dKikgIyh2aSBPUy8yIEVNWAorICA7OworLlwkeypwcmVmaXh9KikgIyh2aQorICBldmFsIHdpdGh2YWw9IiR3aXRodmFsIgorICBjYXNlICIuJHdpdGh2YWwiIGluICModmkKKyAgLk5PTkUvKikKKyAgICB3aXRodmFsPWBlY2hvICR3aXRodmFsIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICAgIDs7CisgIGVzYWMKKyAgOzsgIyh2aQorLm5vfC5OT05FLyopCisgIHdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgIDs7CisqKQorICB7IHsgZWNobyAiJGFzX21lOjU1NTY6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkd2l0aHZhbFwiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgOzsKK2VzYWMKKworZmkKK1RFUk1JTkZPPSIkd2l0aHZhbCIKKworZWNobyAiJGFzX21lOjU1NjU6IHJlc3VsdDogJFRFUk1JTkZPIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRURVJNSU5GTyIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFRFUk1JTkZPICIkVEVSTUlORk8iCitFT0YKKworZmkKKworIyMjCXVzZSBvcHRpb24gLS1kaXNhYmxlLWJpZy1jb3JlIHRvIG1ha2UgdGljIHJ1biBvbiBzbWFsbCBtYWNoaW5lcworIyMjCVdlIG5lZWQgNE1iLCBjaGVjayBpZiB3ZSBjYW4gYWxsb2NhdGUgNTAlIG1vcmUgdGhhbiB0aGF0LgorZWNobyAiJGFzX21lOjU1NzU6IGNoZWNraW5nIGlmIGJpZy1jb3JlIG9wdGlvbiBzZWxlY3RlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGJpZy1jb3JlIG9wdGlvbiBzZWxlY3RlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWJpZy1jb3JlIG9yIC0tZGlzYWJsZS1iaWctY29yZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9iaWdfY29yZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfYmlnX2NvcmUiCisgIHdpdGhfYmlnX2NvcmU9JGVuYWJsZXZhbAorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB3aXRoX2JpZ19jb3JlPW5vCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNTU4NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluKCkgeworCXVuc2lnbmVkIGxvbmcgbiA9IDYwMDAwMDBMOworCWNoYXIgKnMgPSBtYWxsb2Mobik7CisJaWYgKHMgIT0gMCkKKwkJc1swXSA9IHNbbi0xXSA9IDA7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufShzID09IDApOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjU2MDE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU2MDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjU2MDY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1NjA5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgd2l0aF9iaWdfY29yZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3dpdGhfYmlnX2NvcmU9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpOworZWNobyAiJGFzX21lOjU2MjE6IHJlc3VsdDogJHdpdGhfYmlnX2NvcmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYmlnX2NvcmUiID4mNgordGVzdCAiJHdpdGhfYmlnX2NvcmUiID0gInllcyIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9CSUdfQ09SRSAxCitFT0YKKworIyMjIElTTyBDIG9ubHkgZ3VhcmFudGVlcyA1MTItY2hhciBzdHJpbmdzLCB3ZSBoYXZlIHRhYmxlcyB3aGljaCBsb2FkIGZhc3RlcgorIyMjIHdoZW4gY29uc3RydWN0ZWQgdXNpbmcgImJpZyIgc3RyaW5ncy4gIE1vcmUgdGhhbiB0aGUgQyBjb21waWxlciwgdGhlIGF3aworIyMjIHByb2dyYW0gaXMgYSBsaW1pdCBvbiBtb3N0IHZlbmRvciBVTklYIHN5c3RlbXMuICBDaGVjayB0aGF0IHdlIGNhbiBidWlsZC4KK2VjaG8gIiRhc19tZTo1NjMwOiBjaGVja2luZyBpZiBiaWctc3RyaW5ncyBvcHRpb24gc2VsZWN0ZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBiaWctc3RyaW5ncyBvcHRpb24gc2VsZWN0ZWQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1iaWctc3RyaW5ncyBvciAtLWRpc2FibGUtYmlnLXN0cmluZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYmlnX3N0cmluZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2JpZ19zdHJpbmdzIgorICB3aXRoX2JpZ19zdHJpbmdzPSRlbmFibGV2YWwKK2Vsc2UKKworICAgIGNhc2UgeCRBV0sgaW4gIyh2aQorICAgIHgpCisgICAgICAgIGV2YWwgd2l0aF9iaWdfc3RyaW5ncz1ubworICAgICAgICA7OworICAgICopICModmkKKyAgICAgICAgaWYgKCAke0FXS30gJ0JFR0lOIHsgeHggPSAieCI7IHdoaWxlIChsZW5ndGgoeHgpIDwgMTIwMDApIHsgeHggPSB4eCAieCI7IH07IHByaW50ZigiJXNcbiIsIHh4KTsgfScgXAorICAgICAgICAgICAgfCAkQVdLICd7IHByaW50ZiAiJWRcbiIsIGxlbmd0aCgkMCk7IH0nIHwgJEFXSyAnQkVHSU4geyBlcWxzPTA7IHJlY3M9MDsgfSB7IHJlY3MrKzsgaWYgKCQwID09IDEyMDAwKSBlcWxzKys7IH0gRU5EIHsgaWYgKHJlY3MgIT0gMSB8fCBlcWxzICE9IDEpIGV4aXQgMTsgfScgMj4vZGV2L251bGwgPi9kZXYvbnVsbCApIDsgdGhlbgorICAgICAgICAgICAgZXZhbCB3aXRoX2JpZ19zdHJpbmdzPXllcworICAgICAgICBlbHNlCisgICAgICAgICAgICBldmFsIHdpdGhfYmlnX3N0cmluZ3M9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisKK2ZpOworZWNobyAiJGFzX21lOjU2NTQ6IHJlc3VsdDogJHdpdGhfYmlnX3N0cmluZ3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYmlnX3N0cmluZ3MiID4mNgorCitVU0VfQklHX1NUUklOR1M9MAordGVzdCAiJHdpdGhfYmlnX3N0cmluZ3MiID0gInllcyIgJiYgVVNFX0JJR19TVFJJTkdTPTEKKworIyMjCXVzZSBvcHRpb24gLS1lbmFibGUtdGVybWNhcCB0byBjb21waWxlIGluIHRoZSB0ZXJtY2FwIGZhbGxiYWNrIHN1cHBvcnQKK2VjaG8gIiRhc19tZTo1NjYxOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0ZXJtY2FwLWZhbGxiYWNrIHN1cHBvcnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0ZXJtY2FwLWZhbGxiYWNrIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXJtY2FwIG9yIC0tZGlzYWJsZS10ZXJtY2FwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Rlcm1jYXArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3Rlcm1jYXAiCisgIHdpdGhfdGVybWNhcD0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfdGVybWNhcD1ubworZmk7CitlY2hvICIkYXNfbWU6NTY3MTogcmVzdWx0OiAkd2l0aF90ZXJtY2FwIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3Rlcm1jYXAiID4mNgorCitpZiB0ZXN0ICIkd2l0aF90ZXJtY2FwIiAhPSAieWVzIiA7IHRoZW4KKwlpZiB0ZXN0ICIkdXNlX2RhdGFiYXNlIiA9IG5vIDsgdGhlbgorCQlpZiB0ZXN0IC16ICIkd2l0aF9mYWxsYmFjayIgOyB0aGVuCisJCQl7IHsgZWNobyAiJGFzX21lOjU2Nzc6IGVycm9yOiBZb3UgaGF2ZSBkaXNhYmxlZCB0aGUgZGF0YWJhc2Ugdy9vIHNwZWNpZnlpbmcgZmFsbGJhY2tzIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFlvdSBoYXZlIGRpc2FibGVkIHRoZSBkYXRhYmFzZSB3L28gc3BlY2lmeWluZyBmYWxsYmFja3MiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJZmkKKwlmaQorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFBVUkVfVEVSTUlORk8gMQorRU9GCisKK2Vsc2UKKworaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSBubyA7IHRoZW4KKwl7IHsgZWNobyAiJGFzX21lOjU2ODk6IGVycm9yOiBPcHRpb25zIC0td2l0aC10aWNsaWIgYW5kIC0tZW5hYmxlLXRlcm1jYXAgY2Fubm90IGJlIGNvbWJpbmVkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IE9wdGlvbnMgLS13aXRoLXRpY2xpYiBhbmQgLS1lbmFibGUtdGVybWNhcCBjYW5ub3QgYmUgY29tYmluZWQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9URVJNQ0FQIDEKK0VPRgorCitlY2hvICIkYXNfbWU6NTY5ODogY2hlY2tpbmcgZm9yIGxpc3Qgb2YgdGVybWNhcCBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaXN0IG9mIHRlcm1jYXAgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVybXBhdGggb3IgLS13aXRob3V0LXRlcm1wYXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90ZXJtcGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90ZXJtcGF0aCIKKworZWxzZQorICB3aXRodmFsPSR7VEVSTVBBVEgtL2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwfQorZmk7CitJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke1BBVEhTRVB9IgorY2ZfZHN0X3BhdGg9Citmb3IgY2Zfc3JjX3BhdGggaW4gJHdpdGh2YWwKK2RvCisKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi4kY2Zfc3JjX3BhdGgiIGluICModmkKKy5cJFwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLlthLXpBLVpdOltcXC9dKikgIyh2aSBPUy8yIEVNWAorICA7OworLlwkeypwcmVmaXh9KikgIyh2aQorICBldmFsIGNmX3NyY19wYXRoPSIkY2Zfc3JjX3BhdGgiCisgIGNhc2UgIi4kY2Zfc3JjX3BhdGgiIGluICModmkKKyAgLk5PTkUvKikKKyAgICBjZl9zcmNfcGF0aD1gZWNobyAkY2Zfc3JjX3BhdGggfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgY2Zfc3JjX3BhdGg9YGVjaG8gJGNmX3NyY19wYXRoIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICA7OworKikKKyAgeyB7IGVjaG8gIiRhc19tZTo1NzM4OiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJGNmX3NyY19wYXRoXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJGNmX3NyY19wYXRoXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgOzsKK2VzYWMKKworICB0ZXN0IC1uICIkY2ZfZHN0X3BhdGgiICYmIGNmX2RzdF9wYXRoPSIke2NmX2RzdF9wYXRofToiCisgIGNmX2RzdF9wYXRoPSIke2NmX2RzdF9wYXRofSR7Y2Zfc3JjX3BhdGh9IgorZG9uZQorSUZTPSIkYWNfc2F2ZV9pZnMiCisKK2V2YWwgJ1RFUk1QQVRIPSIkY2ZfZHN0X3BhdGgiJworCitlY2hvICIkYXNfbWU6NTc1MTogcmVzdWx0OiAkVEVSTVBBVEgiID4mNQorZWNobyAiJHtFQ0hPX1R9JFRFUk1QQVRIIiA+JjYKK3Rlc3QgLW4gIiRURVJNUEFUSCIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBURVJNUEFUSCAiJFRFUk1QQVRIIgorRU9GCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWdldGNhcCB0byB1c2UgYSBoYWNrZWQgZ2V0Y2FwIGZvciByZWFkaW5nIHRlcm1jYXBzCitlY2hvICIkYXNfbWU6NTc1ODogY2hlY2tpbmcgaWYgZmFzdCB0ZXJtY2FwLWxvYWRlciBpcyBuZWVkZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBmYXN0IHRlcm1jYXAtbG9hZGVyIGlzIG5lZWRlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdldGNhcCBvciAtLWRpc2FibGUtZ2V0Y2FwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2dldGNhcCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZ2V0Y2FwIgorICB3aXRoX2dldGNhcD0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfZ2V0Y2FwPW5vCitmaTsKK2VjaG8gIiRhc19tZTo1NzY4OiByZXN1bHQ6ICR3aXRoX2dldGNhcCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9nZXRjYXAiID4mNgordGVzdCAiJHdpdGhfZ2V0Y2FwIiA9ICJ5ZXMiICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9HRVRDQVAgMQorRU9GCisKK2VjaG8gIiRhc19tZTo1Nzc0OiBjaGVja2luZyBpZiB0cmFuc2xhdGVkIHRlcm1jYXBzIHdpbGwgYmUgY2FjaGVkIGluIH4vLnRlcm1pbmZvIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdHJhbnNsYXRlZCB0ZXJtY2FwcyB3aWxsIGJlIGNhY2hlZCBpbiB+Ly50ZXJtaW5mby4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdldGNhcC1jYWNoZSBvciAtLWRpc2FibGUtZ2V0Y2FwLWNhY2hlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2dldGNhcF9jYWNoZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZ2V0Y2FwX2NhY2hlIgorICB3aXRoX2dldGNhcF9jYWNoZT0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfZ2V0Y2FwX2NhY2hlPW5vCitmaTsKK2VjaG8gIiRhc19tZTo1Nzg0OiByZXN1bHQ6ICR3aXRoX2dldGNhcF9jYWNoZSIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9nZXRjYXBfY2FjaGUiID4mNgordGVzdCAiJHdpdGhfZ2V0Y2FwX2NhY2hlIiA9ICJ5ZXMiICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9HRVRDQVBfQ0FDSEUgMQorRU9GCisKK2ZpCisKKyMjIyAgIFVzZSBvcHRpb24gLS1kaXNhYmxlLWhvbWUtdGVybWluZm8gdG8gY29tcGxldGVseSByZW1vdmUgfi8udGVybWluZm8KK2VjaG8gIiRhc19tZTo1NzkzOiBjaGVja2luZyBpZiB+Ly50ZXJtaW5mbyBpcyB3YW50ZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB+Ly50ZXJtaW5mbyBpcyB3YW50ZWQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ob21lLXRlcm1pbmZvIG9yIC0tZGlzYWJsZS1ob21lLXRlcm1pbmZvIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2hvbWVfdGVybWluZm8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2hvbWVfdGVybWluZm8iCisgIHdpdGhfaG9tZV90ZXJtaW5mbz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfaG9tZV90ZXJtaW5mbz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjU4MDM6IHJlc3VsdDogJHdpdGhfaG9tZV90ZXJtaW5mbyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9ob21lX3Rlcm1pbmZvIiA+JjYKK3Rlc3QgIiR3aXRoX2hvbWVfdGVybWluZm8iID0gInllcyIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0hPTUVfVEVSTUlORk8gMQorRU9GCisKK2VjaG8gIiRhc19tZTo1ODA5OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgcmVzdHJpY3RlZCBlbnZpcm9ubWVudCB3aGVuIHJ1bm5pbmcgYXMgcm9vdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSByZXN0cmljdGVkIGVudmlyb25tZW50IHdoZW4gcnVubmluZyBhcyByb290Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcm9vdC1lbnZpcm9uIG9yIC0tZGlzYWJsZS1yb290LWVudmlyb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcm9vdF9lbnZpcm9uK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9yb290X2Vudmlyb24iCisgIHdpdGhfcm9vdF9lbnZpcm9uPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9yb290X2Vudmlyb249eWVzCitmaTsKK2VjaG8gIiRhc19tZTo1ODE5OiByZXN1bHQ6ICR3aXRoX3Jvb3RfZW52aXJvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9yb290X2Vudmlyb24iID4mNgordGVzdCAiJHdpdGhfcm9vdF9lbnZpcm9uIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfUk9PVF9FTlZJUk9OIDEKK0VPRgorCisjIyMgICBVc2Ugb3B0aW9uIC0tZW5hYmxlLXN5bWxpbmtzIHRvIG1ha2UgdGljIHVzZSBzeW1saW5rcywgbm90IGhhcmQgbGlua3MKKyMjIyAgIHRvIHJlZHVjZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorCitmb3IgYWNfZnVuYyBpbiBcCisJcmVtb3ZlIFwKKwl1bmxpbmsKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOjU4MzM6IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1ODM5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5jICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2YgPSAkYWNfZnVuYzsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1ODcwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1ODczOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTg3NjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU4Nzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjU4ODk6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCitmaQorZG9uZQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKworZm9yIGFjX2Z1bmMgaW4gXAorCQlsaW5rIFwKKwkJc3ltbGluaworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6NTkwNjogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU5MTIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgJGFjX2Z1bmMgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorZiA9ICRhY19mdW5jOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjU5NDM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU5NDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo1OTQ5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTk1MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NTk2MjogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2Vsc2UKKwllY2hvICIkYXNfbWU6NTk3MzogY2hlY2tpbmcgaWYgbGluay9zeW1saW5rIGZ1bmN0aW9ucyB3b3JrIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGluay9zeW1saW5rIGZ1bmN0aW9ucyB3b3JrLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9saW5rX2Z1bmNzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwkJY2ZfY3ZfbGlua19mdW5jcz0KKwkJZm9yIGNmX2Z1bmMgaW4gbGluayBzeW1saW5rIDsgZG8KKwkJCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisKKwkJCWV2YWwgJ2FjX2N2X2Z1bmNfJyRjZl9mdW5jJz1lcnJvcicKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1OTg2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCitpbnQgbWFpbigpCit7CisJaW50IGZhaWwgPSAwOworCWNoYXIgKnNyYyA9ICJjb25maWcubG9nIjsKKwljaGFyICpkc3QgPSAiY29uZnRlc3QuY2hrIjsKKwlzdHJ1Y3Qgc3RhdCBzcmNfc2I7CisJc3RydWN0IHN0YXQgZHN0X3NiOworCisJc3RhdChzcmMsICZzcmNfc2IpOworCWZhaWwgPSAoJGNmX2Z1bmMoImNvbmZpZy5sb2ciLCAiY29uZnRlc3QuY2hrIikgPCAwKQorCSAgICB8fCAoc3RhdChkc3QsICZkc3Rfc2IpIDwgMCkKKwkgICAgfHwgKGRzdF9zYi5zdF9tdGltZSAhPSBzcmNfc2Iuc3RfbXRpbWUpOworI2lmZGVmIEhBVkVfVU5MSU5LCisJdW5saW5rKGRzdCk7CisjZWxzZQorCXJlbW92ZShkc3QpOworI2VuZGlmCisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSAoZmFpbCk7Cit9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2MDE2OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MDE5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2MDIxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjAyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKwkJCWNmX2N2X2xpbmtfZnVuY3M9IiRjZl9jdl9saW5rX2Z1bmNzICRjZl9mdW5jIgorCQkJZXZhbCAnYWNfY3ZfZnVuY18nJGNmX2Z1bmMnPXllcycKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCQkJZXZhbCAnYWNfY3ZfZnVuY18nJGNmX2Z1bmMnPW5vJworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCQlkb25lCisJCXRlc3QgLXogIiRjZl9jdl9saW5rX2Z1bmNzIiAmJiBjZl9jdl9saW5rX2Z1bmNzPW5vCisKK2ZpCitlY2hvICIkYXNfbWU6NjA0MjogcmVzdWx0OiAkY2ZfY3ZfbGlua19mdW5jcyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbGlua19mdW5jcyIgPiY2CisJdGVzdCAiJGFjX2N2X2Z1bmNfbGluayIgICAgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSU5LIDEKK0VPRgorCisJdGVzdCAiJGFjX2N2X2Z1bmNfc3ltbGluayIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TWU1MSU5LIDEKK0VPRgorCitmaQorCit3aXRoX2xpbmtzPW5vCit3aXRoX3N5bWxpbmtzPW5vCisKKyMgc29mdCBsaW5rcyAoc3ltYm9saWMgbGlua3MpIGFyZSB1c2VmdWwgZm9yIHNvbWUgc3lzdGVtcyB3aGVyZSBoYXJkIGxpbmtzIGRvCisjIG5vdCB3b3JrLCBvciB0byBtYWtlIGl0IHNpbXBsZXIgdG8gY29weSB0ZXJtaW5mbyB0cmVlcyBhcm91bmQuCitpZiB0ZXN0ICIkYWNfY3ZfZnVuY19zeW1saW5rIiA9IHllcyA7IHRoZW4KKyAgICBlY2hvICIkYXNfbWU6NjA2MDogY2hlY2tpbmcgaWYgdGljIHNob3VsZCB1c2Ugc3ltYm9saWMgbGlua3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aWMgc2hvdWxkIHVzZSBzeW1ib2xpYyBsaW5rcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5bWxpbmtzIG9yIC0tZGlzYWJsZS1zeW1saW5rcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zeW1saW5rcytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc3ltbGlua3MiCisgIHdpdGhfc3ltbGlua3M9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3N5bWxpbmtzPW5vCitmaTsKKyAgICBlY2hvICIkYXNfbWU6NjA3MDogcmVzdWx0OiAkd2l0aF9zeW1saW5rcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9zeW1saW5rcyIgPiY2CitmaQorCisjIElmIHdlIGhhdmUgaGFyZCBsaW5rcyBhbmQgZGlkIG5vdCBjaG9vc2UgdG8gdXNlIHNvZnQgbGlua3MgaW5zdGVhZCwgdGhlcmUgaXMKKyMgbm8gcmVhc29uIHRvIG1ha2UgdGhpcyBjaG9pY2Ugb3B0aW9uYWwgLSB1c2UgdGhlIGhhcmQgbGlua3MuCitpZiB0ZXN0ICIkd2l0aF9zeW1saW5rcyIgPSBubyA7IHRoZW4KKyAgICBlY2hvICIkYXNfbWU6NjA3NzogY2hlY2tpbmcgaWYgdGljIHNob3VsZCB1c2UgaGFyZCBsaW5rcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRpYyBzaG91bGQgdXNlIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2CisgICAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfbGluayIgPSB5ZXMgOyB0aGVuCisJd2l0aF9saW5rcz15ZXMKKyAgICBlbHNlCisJd2l0aF9saW5rcz1ubworICAgIGZpCisgICAgZWNobyAiJGFzX21lOjYwODQ6IHJlc3VsdDogJHdpdGhfbGlua3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfbGlua3MiID4mNgorZmkKKwordGVzdCAiJHdpdGhfbGlua3MiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9MSU5LUyAxCitFT0YKKwordGVzdCAiJHdpdGhfc3ltbGlua3MiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9TWU1MSU5LUyAxCitFT0YKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1icm9rZW4tbGlua2VyIHRvIGZvcmNlIG9uIHVzZSBvZiBicm9rZW4tbGlua2VyIHN1cHBvcnQKK2VjaG8gIiRhc19tZTo2MDk3OiBjaGVja2luZyBpZiB5b3Ugd2FudCBicm9rZW4tbGlua2VyIHN1cHBvcnQgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGJyb2tlbi1saW5rZXIgc3VwcG9ydCBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYnJva2VuX2xpbmtlciBvciAtLWRpc2FibGUtYnJva2VuX2xpbmtlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9icm9rZW5fbGlua2VyK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9icm9rZW5fbGlua2VyIgorICB3aXRoX2Jyb2tlbl9saW5rZXI9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2Jyb2tlbl9saW5rZXI9JHtCUk9LRU5fTElOS0VSLW5vfQorZmk7CitlY2hvICIkYXNfbWU6NjEwNzogcmVzdWx0OiAkd2l0aF9icm9rZW5fbGlua2VyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2Jyb2tlbl9saW5rZXIiID4mNgorCitCUk9LRU5fTElOS0VSPTAKK2lmIHRlc3QgIiR3aXRoX2Jyb2tlbl9saW5rZXIiID0geWVzIDsgdGhlbgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEJST0tFTl9MSU5LRVIgMQorRU9GCisKKwlCUk9LRU5fTElOS0VSPTEKK2VsaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gc2hhcmVkIDsgdGhlbgorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwljeWd3aW4qKQorCQljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBCUk9LRU5fTElOS0VSIDEKK0VPRgorCisJCUJST0tFTl9MSU5LRVI9MQorCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWN5Z3dpbiBsaW5rZXIgaXMgYnJva2VuIGFueXdheSIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjEyNzogdGVzdGluZyBjeWd3aW4gbGlua2VyIGlzIGJyb2tlbiBhbnl3YXkgLi4uIiAxPiY1CisKKwkJOzsKKwllc2FjCitmaQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWJzZHBhZCB0byBoYXZlIHRwdXRzIHByb2Nlc3MgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nCitlY2hvICIkYXNfbWU6NjEzNDogY2hlY2tpbmcgaWYgdHB1dHMgc2hvdWxkIHByb2Nlc3MgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdHB1dHMgc2hvdWxkIHByb2Nlc3MgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYnNkcGFkIG9yIC0tZGlzYWJsZS1ic2RwYWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYnNkcGFkK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ic2RwYWQiCisgIHdpdGhfYnNkcGFkPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9ic2RwYWQ9bm8KK2ZpOworZWNobyAiJGFzX21lOjYxNDQ6IHJlc3VsdDogJHdpdGhfYnNkcGFkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2JzZHBhZCIgPiY2Cit0ZXN0ICIkd2l0aF9ic2RwYWQiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEJTRF9UUFVUUyAxCitFT0YKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS13aWRlYyB0byB0dXJuIG9uIHVzZSBvZiB3aWRlLWNoYXJhY3RlciBzdXBwb3J0CitOQ1VSU0VTX0NIX1Q9Y2h0eXBlCitOQ1VSU0VTX0xJQlVURjg9MAorCitORUVEX1dDSEFSX0g9MAorTkNVUlNFU19NQlNUQVRFX1Q9MAorTkNVUlNFU19XQ0hBUl9UPTAKK05DVVJTRVNfV0lOVF9UPTAKKworIyBDaGVjayB0byBkZWZpbmUgX1hPUEVOX1NPVVJDRSAiYXV0b21hdGljYWxseSIKKworZWNobyAiJGFzX21lOjYxNjE6IGNoZWNraW5nIGlmICRDQyAtVSBhbmQgLUQgb3B0aW9ucyB3b3JrIHRvZ2V0aGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJENDIC1VIGFuZCAtRCBvcHRpb25zIHdvcmsgdG9nZXRoZXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2NjX3VfZF9vcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisJQ1BQRkxBR1M9Ii1VVV9EX09QVElPTlMgLURVX0RfT1BUSU9OUyAtRERfVV9PUFRJT05TIC1VRF9VX09QVElPTlMiCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2MTcwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyNpZm5kZWYgVV9EX09QVElPTlMKK21ha2UgYW4gdW5kZWZpbmVkLWVycm9yCisjZW5kaWYKKyNpZmRlZiAgRF9VX09QVElPTlMKK21ha2UgYSBkZWZpbmVkLWVycm9yCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2MTg5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MTkyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjYxOTU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MTk4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCWNmX2N2X2NjX3VfZF9vcHRpb25zPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwljZl9jdl9jY191X2Rfb3B0aW9ucz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKK2VjaG8gIiRhc19tZTo2MjEyOiByZXN1bHQ6ICRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfY2NfdV9kX29wdGlvbnMiID4mNgorCitjZl9YT1BFTl9TT1VSQ0U9NTAwCitjZl9QT1NJWF9DX1NPVVJDRT0xOTk1MDZMCisKK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorYWl4WzQ1XSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0FMTF9TT1VSQ0UiCisJOzsKK2ZyZWVic2QqfGRyYWdvbmZseSopICModmkKKwkjIDUueCBoZWFkZXJzIGFzc29jaWF0ZQorCSMJX1hPUEVOX1NPVVJDRT02MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCSMJX1hPUEVOX1NPVVJDRT01MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorCWNmX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9CU0RfVFlQRVMgLURfX0JTRF9WSVNJQkxFIC1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwk7OworaHB1eCopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0hQVVhfU09VUkNFIgorCTs7Citpcml4WzU2XS4qKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9TR0lfU09VUkNFIgorCTs7CitsaW51eCp8Z251KnxrKmJzZCotZ251KSAjKHZpCisKK2VjaG8gIiRhc19tZTo2MjM4OiBjaGVja2luZyBpZiB3ZSBtdXN0IGRlZmluZSBfR05VX1NPVVJDRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9nbnVfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjI0NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjI2MDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjI2MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2MjY2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjI2OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2dudV9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2Zfc2F2ZT0iJENQUEZMQUdTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0dOVV9TT1VSQ0UiCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjI3OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2MjkzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2Mjk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjYyOTk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MzAyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZ251X3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9nbnVfc291cmNlPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjYzMTc6IHJlc3VsdDogJGNmX2N2X2dudV9zb3VyY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2dudV9zb3VyY2UiID4mNgordGVzdCAiJGNmX2N2X2dudV9zb3VyY2UiID0geWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKKworCTs7CittaXJic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0Ugb3IgX1BPU0lYX1NPVVJDRSBicmVha3MgPGFycGEvaW5ldC5oPgorCTs7CituZXRic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIElQdjYgZm9yIGx5bnggb24gTmV0QlNEIDEuNiwgYnJlYWtzIHh0ZXJtLCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7CitvcGVuYnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyB4dGVybSBvbiBPcGVuQlNEIDIuOCwgaXMgbm90IG5lZWRlZCBmb3IgbmN1cnNlc3cKKwk7Oworb3NmWzQ1XSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX09TRl9TT1VSQ0UiCisJOzsKK250by1xbngqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9RTlhfU09VUkNFIgorCTs7CitzY28qKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIEx5bnggb24gU0NPIFVuaXggLyBPcGVuU2VydmVyCisJOzsKK3NvbGFyaXMqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9fRVhURU5TSU9OU19fIgorCTs7CisqKQorCWVjaG8gIiRhc19tZTo2MzQ0OiBjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3hvcGVuX3NvdXJjZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2MzUxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2MzY2OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MzY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjYzNzI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2Mzc1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfeG9wZW5fc291cmNlPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2Mzg0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYzOTk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY0MDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjQwNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY0MDg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl94b3Blbl9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfeG9wZW5fc291cmNlPSRjZl9YT1BFTl9TT1VSQ0UKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZTo2NDIzOiByZXN1bHQ6ICRjZl9jdl94b3Blbl9zb3VyY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3hvcGVuX3NvdXJjZSIgPiY2CisJaWYgdGVzdCAiJGNmX2N2X3hvcGVuX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisKKyMgcmVtb3ZlIF9YT1BFTl9TT1VSQ0Ugc3ltYm9sIGZyb20gJENGTEFHUworQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF1fWE9QRU5fU09VUkNFXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdX1hPUEVOX1NPVVJDRVwoPVteIAldKlwpXD8kLy9nJ2AKKworIyByZW1vdmUgX1hPUEVOX1NPVVJDRSBzeW1ib2wgZnJvbSAkQ1BQRkxBR1MKK0NQUEZMQUdTPWBlY2hvICIkQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fWE9QRU5fU09VUkNFXCg9W14gCV0qXClcPyQvL2cnYAorCisJCXRlc3QgIiRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPSB5ZXMgJiYgXAorCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtVV9YT1BFTl9TT1VSQ0UiCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9jdl94b3Blbl9zb3VyY2UiCisJZmkKKworY2ZfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFCisKK2NmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisjIHJlbW92ZSBfUE9TSVhfQ19TT1VSQ0Ugc3ltYm9sIGZyb20gJGNmX3NhdmVfQ0ZMQUdTCitjZl90cmltX0NGTEFHUz1gZWNobyAiJGNmX3NhdmVfQ0ZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF1fUE9TSVhfQ19TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fUE9TSVhfQ19TT1VSQ0VcKD1bXiAJXSpcKVw/JC8vZydgCisKKyMgcmVtb3ZlIF9QT1NJWF9DX1NPVVJDRSBzeW1ib2wgZnJvbSAkY2Zfc2F2ZV9DUFBGTEFHUworY2ZfdHJpbV9DUFBGTEFHUz1gZWNobyAiJGNmX3NhdmVfQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9QT1NJWF9DX1NPVVJDRVwoPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXV9QT1NJWF9DX1NPVVJDRVwoPVteIAldKlwpXD8kLy9nJ2AKKworZWNobyAiJGFzX21lOjY0NTc6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3Bvc2l4X2Nfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2NDYzOiB0ZXN0aW5nIGlmIHRoZSBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkIGdvIG5vIGZ1cnRoZXIgLi4uIiAxPiY1CisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY0NjYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjQ4MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjQ4NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2NDg3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjQ5MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3Bvc2l4X2Nfc291cmNlPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX3dhbnRfcG9zaXhfc291cmNlPW5vCisJIGNhc2UgLiRjZl9QT1NJWF9DX1NPVVJDRSBpbiAjKHZpCisJIC5bMTJdPz8qKSAjKHZpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCTs7CisJIC4yKSAjKHZpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSAuKikKKwkJY2Zfd2FudF9wb3NpeF9zb3VyY2U9eWVzCisJCTs7CisJIGVzYWMKKwkgaWYgdGVzdCAiJGNmX3dhbnRfcG9zaXhfc291cmNlIiA9IHllcyA7IHRoZW4KKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2NTExICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgX1BPU0lYX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY1MjY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY1Mjk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjUzMjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY1MzU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3Bvc2l4X2Nfc291cmNlPSIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UgLURfUE9TSVhfU09VUkNFIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCSBmaQorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjU0NjogdGVzdGluZyBpZmRlZiBmcm9tIHZhbHVlICRjZl9QT1NJWF9DX1NPVVJDRSAuLi4iIDE+JjUKKworCSBDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjY1NTE6IHRlc3RpbmcgaWYgdGhlIHNlY29uZCBjb21waWxlIGRvZXMgbm90IGxlYXZlIG91ciBkZWZpbml0aW9uIGludGFjdCBlcnJvciAuLi4iIDE+JjUKKworCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY1NTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjU2OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjU3MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2NTc1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjU3ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkgQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjY1OTQ6IHJlc3VsdDogJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisJQ0ZMQUdTPSIkY2ZfdHJpbV9DRkxBR1MiCisJQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTIgorCWlmIHRlc3QgIiRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPSB5ZXMgOyB0aGVuCisJCWNmX3RlbXBfcG9zaXhfY19zb3VyY2U9YGVjaG8gIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgfCBcCisJCQkJc2VkIC1lICdzLy1ELy1VL2cnIC1lICdzLz1bXiAJXSovL2cnYAorCQlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl90ZW1wX3Bvc2l4X2Nfc291cmNlIgorCWZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiCitmaQorCisJOzsKK2VzYWMKKworIyBXb3JrIGFyb3VuZCBicmVha2FnZSBvbiBPUyBYCisKK2VjaG8gIiRhc19tZTo2NjEzOiBjaGVja2luZyBpZiBTSUdXSU5DSCBpcyBkZWZpbmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgU0lHV0lOQ0ggaXMgZGVmaW5lZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY2MjAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorCitpbnQKK21haW4gKCkKK3sKK2ludCB4ID0gU0lHV0lOQ0gKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjYzNTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjYzODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2NjQxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjY0NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2RlZmluZV9zaWd3aW5jaD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2NjUxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI3VuZGVmIF9YT1BFTl9TT1VSQ0UKKyN1bmRlZiBfUE9TSVhfU09VUkNFCisjdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorCitpbnQKK21haW4gKCkKK3sKK2ludCB4ID0gU0lHV0lOQ0gKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjY2OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjY3MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2Njc1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjY3ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2RlZmluZV9zaWd3aW5jaD1tYXliZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9kZWZpbmVfc2lnd2luY2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjY2OTI6IHJlc3VsdDogJGNmX2N2X2RlZmluZV9zaWd3aW5jaCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X2RlZmluZV9zaWd3aW5jaCIgPSBtYXliZSA7IHRoZW4KK2VjaG8gIiRhc19tZTo2Njk2OiBjaGVja2luZyBmb3IgYWN0dWFsIFNJR1dJTkNIIGRlZmluaXRpb24iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYWN0dWFsIFNJR1dJTkNIIGRlZmluaXRpb24uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2ZpeHVwX3NpZ3dpbmNoK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NmX2N2X2ZpeHVwX3NpZ3dpbmNoPXVua25vd24KK2NmX3NpZ3dpbmNoPTMyCit3aGlsZSB0ZXN0ICRjZl9zaWd3aW5jaCAhPSAxCitkbworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjcwNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyN1bmRlZiBfWE9QRU5fU09VUkNFCisjdW5kZWYgX1BPU0lYX1NPVVJDRQorI3VuZGVmIF9QT1NJWF9DX1NPVVJDRQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KKworaW50CittYWluICgpCit7CisKKyNpZiBTSUdXSU5DSCAhPSAkY2Zfc2lnd2luY2gKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgoraW50IHggPSBTSUdXSU5DSAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2NzI5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NzMyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY3MzU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NzM4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZml4dXBfc2lnd2luY2g9JGNmX3NpZ3dpbmNoCisJIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworY2Zfc2lnd2luY2g9YGV4cHIgJGNmX3NpZ3dpbmNoIC0gMWAKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZTo2NzUyOiByZXN1bHQ6ICRjZl9jdl9maXh1cF9zaWd3aW5jaCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZml4dXBfc2lnd2luY2giID4mNgorCisJaWYgdGVzdCAiJGNmX2N2X2ZpeHVwX3NpZ3dpbmNoIiAhPSB1bmtub3duIDsgdGhlbgorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EU0lHV0lOQ0g9JGNmX2N2X2ZpeHVwX3NpZ3dpbmNoIgorCWZpCitmaQorCisjIENoZWNrcyBmb3IgQ09ERVNFVCBzdXBwb3J0LgorCisgIGVjaG8gIiRhc19tZTo2NzYyOiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FtX2N2X2xhbmdpbmZvX2NvZGVzZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2NzY4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxsYW5naW5mby5oPgoraW50CittYWluICgpCit7CitjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njc4MDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Njc4MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY3ODY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2Nzg5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZTo2ODAwOiByZXN1bHQ6ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhbV9jdl9sYW5naW5mb19jb2Rlc2V0IiA+JjYKKyAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xBTkdJTkZPX0NPREVTRVQgMQorRU9GCisKKyAgZmkKKworIyB1c2UgdGhlc2UgdmFyaWFibGVzIHRvIHdvcmsgYXJvdW5kIGEgZGVmZWN0IGluIGdjYydzIGZpeGluY2x1ZGVzLgorTkNVUlNFU19PS19XQ0hBUl9UPQorTkNVUlNFU19PS19XSU5UX1Q9CisKK2VjaG8gIiRhc19tZTo2ODE0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB3aWRlLWNoYXJhY3RlciBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgd2lkZS1jaGFyYWN0ZXIgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdpZGVjIG9yIC0tZGlzYWJsZS13aWRlYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93aWRlYytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd2lkZWMiCisgIHdpdGhfd2lkZWM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3dpZGVjPW5vCitmaTsKK2VjaG8gIiRhc19tZTo2ODI0OiByZXN1bHQ6ICR3aXRoX3dpZGVjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3dpZGVjIiA+JjYKK2lmIHRlc3QgIiR3aXRoX3dpZGVjIiA9IHllcyA7IHRoZW4KKwlMSUJfU1VGRklYPSJ3JHtMSUJfU1VGRklYfSIKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfV0lERUNfU1VQUE9SVCAxCitFT0YKKworZWNobyAiJGFzX21lOjY4MzI6IGNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBtdXN0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELi4uICRFQ0hPX0MiID4mNgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2ODM1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworaW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY4NTE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY4NTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njg1NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY4NjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9yZXN1bHQ9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfcmVzdWx0PXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGFzX21lOjY4Njk6IHJlc3VsdDogJGNmX3Jlc3VsdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfcmVzdWx0IiA+JjYKKworaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSB5ZXMgOyB0aGVuCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQiCitlbGlmIHRlc3QgIngiICE9ICJ4IiA7IHRoZW4KKwllY2hvICIkYXNfbWU6Njg3NTogY2hlY2tpbmcgY2hlY2tpbmcgZm9yIGNvbXBhdGlibGUgdmFsdWUgdmVyc3VzICIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGNoZWNraW5nIGZvciBjb21wYXRpYmxlIHZhbHVlIHZlcnN1cyAuLi4gJEVDSE9fQyIgPiY2CisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2ODc4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworaW50CittYWluICgpCit7CisKKyNpZiBfWE9QRU5fU09VUkNFX0VYVEVOREVELSA8IDAKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2ODk0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2ODk3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY5MDA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2OTAzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfcmVzdWx0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9yZXN1bHQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwllY2hvICIkYXNfbWU6NjkxMjogcmVzdWx0OiAkY2ZfcmVzdWx0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9yZXN1bHQiID4mNgorCWlmIHRlc3QgIiRjZl9yZXN1bHQiID0gbm8gOyB0aGVuCisJCSMgcGVyaGFwcyB3ZSBjYW4gb3ZlcnJpZGUgaXQgLSB0cnkuLi4KKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9IgorCWZpCitmaQorCisJIyB3aXRoX292ZXJ3cml0ZT1ubworCU5DVVJTRVNfQ0hfVD1jY2hhcl90CisKK2ZvciBhY19mdW5jIGluIHB1dHdjIGJ0b3djIHdjdG9iIG1idG93YyB3Y3RvbWIgbWJsZW4gbWJybGVuIG1icnRvd2Mgd2NzcnRvbWJzIG1ic3J0b3djcyB3Y3N0b21icyBtYnN0b3djcworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6NjkyNjogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY5MzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgJGFjX2Z1bmMgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorZiA9ICRhY19mdW5jOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY5NjM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY5NjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2OTY5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Njk3MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6Njk4MjogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKKwlpZiB0ZXN0ICIkYWNfY3ZfZnVuY19wdXR3YyIgIT0geWVzIDsgdGhlbgorCitlY2hvICIkYXNfbWU6Njk5NDogY2hlY2tpbmcgZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3VwcG9ydCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3V0ZjhfbGliK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9zYXZlX0xJQlM9IiRMSUJTIgorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzAwMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworcHV0d2MoMCwwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjcwMTU6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjcwMTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MDIxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzAyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3V0ZjhfbGliPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyMgSWYgdGhlIGxpbmthZ2UgaXMgbm90IGFscmVhZHkgaW4gdGhlICRDUFBGTEFHUy8kTERGTEFHUyBjb25maWd1cmF0aW9uLCB0aGVzZQorIyB3aWxsIGJlIHNldCBvbiBjb21wbGV0aW9uIG9mIHRoZSBBQ19UUllfTElOSyBiZWxvdy4KK2NmX2N2X2hlYWRlcl9wYXRoX3V0Zjg9CitjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOD0KKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjcwMzY6IHRlc3RpbmcgU3RhcnRpbmcgRklORF9MSU5LQUdFKHV0ZjgsKSAuLi4iIDE+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3MDM5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPGxpYnV0ZjguaD4KK2ludAorbWFpbiAoKQoreworcHV0d2MoMCwwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjcwNTI6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjcwNTU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MDU4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzA2MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2ZpbmRfbGlua2FnZV91dGY4PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBjZl9jdl9maW5kX2xpbmthZ2VfdXRmOD1ubworCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzA3MDogdGVzdGluZyBTZWFyY2hpbmcgZm9yIGhlYWRlcnMgaW4gRklORF9MSU5LQUdFKHV0ZjgsKSAuLi4iIDE+JjUKKworICAgIGNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBjZl90ZXN0X0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisKKyAgICBjZl9zZWFyY2g9IiIKKwordGVzdCAiL3VzciIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgL3VzciIKKwl0ZXN0IC1kIC91c3IvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvaW5jbHVkZS91dGY4IgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlL3V0ZjgvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlL3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvdXRmOC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvdXRmOC9pbmNsdWRlL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvdXRmOC9pbmNsdWRlL3V0ZjgiCit9CisKK3Rlc3QgIiRwcmVmaXgiICE9ICJOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgJHByZWZpeCIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC9pbmNsdWRlL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS91dGY4IgorCXRlc3QgLWQgJHByZWZpeC9pbmNsdWRlL3V0ZjgvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlL3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvdXRmOC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvdXRmOC9pbmNsdWRlL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9pbmNsdWRlL3V0ZjgiCit9CisKK3Rlc3QgIi91c3IvbG9jYWwiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvdXNyL2xvY2FsIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyIC91c3IvbG9jYWwiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZS91dGY4ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUvdXRmOCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZS91dGY4L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvaW5jbHVkZS91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2xvY2FsL3V0ZjgvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2xvY2FsL3V0ZjgvaW5jbHVkZS91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL3V0ZjgvaW5jbHVkZS91dGY4IgorfQorCit0ZXN0ICIvb3B0IiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL29wdCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvb3B0IgorCXRlc3QgLWQgL29wdC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC9pbmNsdWRlL3V0ZjgiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUvdXRmOC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgL29wdC91dGY4L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgL29wdC91dGY4L2luY2x1ZGUvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC91dGY4L2luY2x1ZGUvdXRmOCIKK30KKwordGVzdCAiJEhPTUUiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkSE9NRSIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkSE9NRSIKKwl0ZXN0IC1kICRIT01FL2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUvdXRmOCIKKwl0ZXN0IC1kICRIT01FL2luY2x1ZGUvdXRmOC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9pbmNsdWRlL3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kICRIT01FL3V0ZjgvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvdXRmOC9pbmNsdWRlL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL3V0ZjgvaW5jbHVkZS91dGY4IgorfQorCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyL3V0ZjggJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyL3V0ZjgiCit9CisKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkb2xkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIgICAgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRvbGRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIvdXRmOCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIvdXRmOCIKK30KKworICAgIGZvciBjZl9jdl9oZWFkZXJfcGF0aF91dGY4IGluICRjZl9zZWFyY2gKKyAgICBkbworICAgICAgaWYgdGVzdCAtZCAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCA7IHRoZW4KKyAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzE1MTogdGVzdGluZyAuLi4gdGVzdGluZyAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCAuLi4iIDE+JjUKKworICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MgLUkkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCIKKyAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3MTU1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPGxpYnV0ZjguaD4KK2ludAorbWFpbiAoKQoreworcHV0d2MoMCwwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzE2ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzE3MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MTc0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzE3NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKyAgICAgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIGZvdW5kIHV0ZjggaGVhZGVycyBpbiAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzE4MjogdGVzdGluZyAuLi4gZm91bmQgdXRmOCBoZWFkZXJzIGluICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IC4uLiIgMT4mNQorCisgICAgICAgICAgICBjZl9jdl9maW5kX2xpbmthZ2VfdXRmOD1tYXliZQorICAgICAgICAgICAgY2ZfdGVzdF9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgICAgICAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGNmX2N2X2ZpbmRfbGlua2FnZV91dGY4IiA9IG1heWJlIDsgdGhlbgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzIwMDogdGVzdGluZyBTZWFyY2hpbmcgZm9yIHV0ZjggbGlicmFyeSBpbiBGSU5EX0xJTktBR0UodXRmOCwpIC4uLiIgMT4mNQorCisgICAgICBjZl9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgY2Zfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKworICAgICAgaWYgdGVzdCAiJGNmX2N2X2ZpbmRfbGlua2FnZV91dGY4IiAhPSB5ZXMgOyB0aGVuCisgICAgICAgIGNmX3NlYXJjaD0iIgorCit0ZXN0ICIvdXNyIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3VzciIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyIC91c3IiCisJdGVzdCAtZCAvdXNyL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIiCisJdGVzdCAtZCAvdXNyL2xpYi91dGY4ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xpYi91dGY4IgorCXRlc3QgLWQgL3Vzci9saWIvdXRmOC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbGliL3V0ZjgvbGliIgorCXRlc3QgLWQgL3Vzci91dGY4L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci91dGY4L2xpYiIKKwl0ZXN0IC1kIC91c3IvdXRmOC9saWIvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci91dGY4L2xpYi91dGY4IgorfQorCit0ZXN0ICIkcHJlZml4IiAhPSAiTk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgJHByZWZpeCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvbGliL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliL3V0ZjgiCisJdGVzdCAtZCAkcHJlZml4L2xpYi91dGY4L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvdXRmOC9saWIiCisJdGVzdCAtZCAkcHJlZml4L3V0ZjgvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L3V0ZjgvbGliIgorCXRlc3QgLWQgJHByZWZpeC91dGY4L2xpYi91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L3V0ZjgvbGliL3V0ZjgiCit9CisKK3Rlc3QgIi91c3IvbG9jYWwiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvdXNyL2xvY2FsIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL3Vzci9sb2NhbCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2xpYiIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliL3V0ZjgiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2xpYi91dGY4L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9saWIvdXRmOC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsL3V0ZjgvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL3V0ZjgvbGliIgorCXRlc3QgLWQgL3Vzci9sb2NhbC91dGY4L2xpYi91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL3V0ZjgvbGliL3V0ZjgiCit9CisKK3Rlc3QgIi9vcHQiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvb3B0IiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL29wdCIKKwl0ZXN0IC1kIC9vcHQvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYiIKKwl0ZXN0IC1kIC9vcHQvbGliL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvbGliL3V0ZjgiCisJdGVzdCAtZCAvb3B0L2xpYi91dGY4L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC9saWIvdXRmOC9saWIiCisJdGVzdCAtZCAvb3B0L3V0ZjgvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L3V0ZjgvbGliIgorCXRlc3QgLWQgL29wdC91dGY4L2xpYi91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L3V0ZjgvbGliL3V0ZjgiCit9CisKK3Rlc3QgIiRIT01FIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiJEhPTUUiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkSE9NRSIKKwl0ZXN0IC1kICRIT01FL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliIgorCXRlc3QgLWQgJEhPTUUvbGliL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2xpYi91dGY4IgorCXRlc3QgLWQgJEhPTUUvbGliL3V0ZjgvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9saWIvdXRmOC9saWIiCisJdGVzdCAtZCAkSE9NRS91dGY4L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvdXRmOC9saWIiCisJdGVzdCAtZCAkSE9NRS91dGY4L2xpYi91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS91dGY4L2xpYi91dGY4IgorfQorCisgICAgICAgIGZvciBjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCBpbiAkY2Zfc2VhcmNoCisgICAgICAgIGRvCisgICAgICAgICAgaWYgdGVzdCAtZCAkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjggOyB0aGVuCisgICAgICAgICAgICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzI2ODogdGVzdGluZyAuLi4gdGVzdGluZyAkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjggLi4uIiAxPiY1CisKKyAgICAgICAgICAgIENQUEZMQUdTPSIkY2ZfdGVzdF9DUFBGTEFHUyIKKyAgICAgICAgICAgIExJQlM9Ii1sdXRmOCAgJGNmX3NhdmVfTElCUyIKKyAgICAgICAgICAgIExERkxBR1M9IiRjZl9zYXZlX0xERkxBR1MgLUwkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjgiCisgICAgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDcyNzQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzI4NzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzI5MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjcyOTM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3Mjk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworICAgICAgICAgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIGZvdW5kIHV0ZjggbGlicmFyeSBpbiAkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjgiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjczMDE6IHRlc3RpbmcgLi4uIGZvdW5kIHV0ZjggbGlicmFyeSBpbiAkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjggLi4uIiAxPiY1CisKKyAgICAgICAgICAgICAgICBjZl9jdl9maW5kX2xpbmthZ2VfdXRmOD15ZXMKKyAgICAgICAgICAgICAgICBjZl9jdl9saWJyYXJ5X2ZpbGVfdXRmOD0iLWx1dGY4IgorICAgICAgICAgICAgICAgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgICAgICAgICAgIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgICAgICAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorICAgICAgICAgICAgICAgIExERkxBR1M9IiRjZl9zYXZlX0xERkxBR1MiCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIExERkxBR1M9IiRjZl9zYXZlX0xERkxBR1MiCisgICAgICBmaQorCisgICAgZWxzZQorICAgICAgY2ZfY3ZfZmluZF9saW5rYWdlX3V0Zjg9bm8KKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlX3V0ZjgiID0geWVzIDsgdGhlbgorY2ZfY3ZfdXRmOF9saWI9YWRkLW9uCitlbHNlCitjZl9jdl91dGY4X2xpYj1ubworZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NzMzOTogcmVzdWx0OiAkY2ZfY3ZfdXRmOF9saWIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3V0ZjhfbGliIiA+JjYKKworIyBIQVZFX0xJQlVURjhfSCBpcyB1c2VkIGJ5IG5jdXJzZXMgaWYgY3Vyc2VzLmggaXMgc2hhcmVkIGJldHdlZW4KKyMgbmN1cnNlcy9uY3Vyc2VzdzoKK2lmIHRlc3QgIiRjZl9jdl91dGY4X2xpYiIgPSAiYWRkLW9uIiA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xJQlVURjhfSCAxCitFT0YKKworaWYgdGVzdCAtbiAiJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjgiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOAorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzM3MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjczODU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjczODg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzM5MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjczOTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9Ojc0MTE6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCAuLi4iIDE+JjUKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjgiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjgKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzQ0NTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIC4uLiIgMT4mNQorCisgICAgICAgIExERkxBR1M9Ii1MJGNmX2FkZF9saWJkaXIgJExERkxBR1MiCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKK2ZpCisKKwlMSUJTPSItbHV0ZjggJExJQlMiCitmaQorCisJCWlmIHRlc3QgIiRjZl9jdl91dGY4X2xpYiIgIT0gbm8gOyB0aGVuCisJCQlOQ1VSU0VTX0xJQlVURjg9MQorCQlmaQorCWZpCisKKyMgVGhpcyBpcyBuZWVkZWQgb24gVHJ1NjQgNS4wIHRvIGRlY2xhcmUgbWJzdGF0ZV90CitlY2hvICIkYXNfbWU6NzQ2MjogY2hlY2tpbmcgaWYgd2UgbXVzdCBpbmNsdWRlIHdjaGFyLmggdG8gZGVjbGFyZSBtYnN0YXRlX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlIG1ic3RhdGVfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbWJzdGF0ZV90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzQ2OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfTElCVVRGOF9ICisjaW5jbHVkZSA8bGlidXRmOC5oPgorI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK21ic3RhdGVfdCBzdGF0ZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3NDg3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3NDkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjc0OTM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3NDk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfbWJzdGF0ZV90PW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzUwMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreworbWJzdGF0ZV90IHZhbHVlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc1MjI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc1MjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzUyODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc1MzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9tYnN0YXRlX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X21ic3RhdGVfdD11bmtub3duCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjc1NDM6IHJlc3VsdDogJGNmX2N2X21ic3RhdGVfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbWJzdGF0ZV90IiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X21ic3RhdGVfdCIgPSB5ZXMgOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkVFRF9XQ0hBUl9IIDEKK0VPRgorCisJTkVFRF9XQ0hBUl9IPTEKK2ZpCisKKyMgaWYgd2UgZG8gbm90IGZpbmQgbWJzdGF0ZV90IGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3ZfbWJzdGF0ZV90IiA9IHVua25vd24gOyB0aGVuCisJTkNVUlNFU19NQlNUQVRFX1Q9MQorZmkKKworIyBUaGlzIGlzIG5lZWRlZCBvbiBUcnU2NCA1LjAgdG8gZGVjbGFyZSB3Y2hhcl90CitlY2hvICIkYXNfbWU6NzU2MDogY2hlY2tpbmcgaWYgd2UgbXVzdCBpbmNsdWRlIHdjaGFyLmggdG8gZGVjbGFyZSB3Y2hhcl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgbXVzdCBpbmNsdWRlIHdjaGFyLmggdG8gZGVjbGFyZSB3Y2hhcl90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl93Y2hhcl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzU2NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfTElCVVRGOF9ICisjaW5jbHVkZSA8bGlidXRmOC5oPgorI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK3djaGFyX3Qgc3RhdGUKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzU4NTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzU4ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3NTkxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzU5NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3djaGFyX3Q9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NjAxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpZmRlZiBIQVZFX0xJQlVURjhfSAorI2luY2x1ZGUgPGxpYnV0ZjguaD4KKyNlbmRpZgoraW50CittYWluICgpCit7Cit3Y2hhcl90IHZhbHVlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc2MjA6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc2MjM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzYyNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc2Mjk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl93Y2hhcl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl93Y2hhcl90PXVua25vd24KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NzY0MTogcmVzdWx0OiAkY2ZfY3Zfd2NoYXJfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfd2NoYXJfdCIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl93Y2hhcl90IiA9IHllcyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBORUVEX1dDSEFSX0ggMQorRU9GCisKKwlORUVEX1dDSEFSX0g9MQorZmkKKworIyBpZiB3ZSBkbyBub3QgZmluZCB3Y2hhcl90IGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3Zfd2NoYXJfdCIgPSB1bmtub3duIDsgdGhlbgorCU5DVVJTRVNfV0NIQVJfVD0xCitmaQorCisjIGlmIHdlIGZpbmQgd2NoYXJfdCBpbiBlaXRoZXIgcGxhY2UsIHVzZSBzdWJzdGl0dXRpb24gdG8gcHJvdmlkZSBhIGZhbGxiYWNrLgoraWYgdGVzdCAiJGNmX2N2X3djaGFyX3QiICE9IHVua25vd24gOyB0aGVuCisJTkNVUlNFU19PS19XQ0hBUl9UPTEKK2ZpCisKKyMgVGhpcyBpcyBuZWVkZWQgb24gVHJ1NjQgNS4wIHRvIGRlY2xhcmUgd2ludF90CitlY2hvICIkYXNfbWU6NzY2MzogY2hlY2tpbmcgaWYgd2UgbXVzdCBpbmNsdWRlIHdjaGFyLmggdG8gZGVjbGFyZSB3aW50X3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlIHdpbnRfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfd2ludF90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzY3MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfTElCVVRGOF9ICisjaW5jbHVkZSA8bGlidXRmOC5oPgorI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK3dpbnRfdCBzdGF0ZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3Njg4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3NjkxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjc2OTQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3Njk3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfd2ludF90PW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzcwNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreword2ludF90IHZhbHVlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc3MjM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc3MjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzcyOTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc3MzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl93aW50X3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3dpbnRfdD11bmtub3duCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjc3NDQ6IHJlc3VsdDogJGNmX2N2X3dpbnRfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfd2ludF90IiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X3dpbnRfdCIgPSB5ZXMgOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkVFRF9XQ0hBUl9IIDEKK0VPRgorCisJTkVFRF9XQ0hBUl9IPTEKK2ZpCisKKyMgaWYgd2UgZG8gbm90IGZpbmQgd2ludF90IGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3Zfd2ludF90IiA9IHVua25vd24gOyB0aGVuCisJTkNVUlNFU19XSU5UX1Q9MQorZmkKKworIyBpZiB3ZSBmaW5kIHdpbnRfdCBpbiBlaXRoZXIgcGxhY2UsIHVzZSBzdWJzdGl0dXRpb24gdG8gcHJvdmlkZSBhIGZhbGxiYWNrLgoraWYgdGVzdCAiJGNmX2N2X3dpbnRfdCIgIT0gdW5rbm93biA7IHRoZW4KKwlOQ1VSU0VTX09LX1dJTlRfVD0xCitmaQorCisJaWYgdGVzdCAiJE5DVVJTRVNfTUJTVEFURV9UIiAhPSAwOyB0aGVuCisJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5FRURfTUJTVEFURV9UX0RFRiAxCitFT0YKKworCWZpCitmaQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZGlzYWJsZS1scDY0IHRvIGFsbG93IGxvbmcgY2h0eXBlCitjYXNlICRjZl9jdl9hYmlfdmVyc2lvbiBpbgorWzM0NV0qKQorCWRlZmF1bHRfd2l0aF9scDY0PW5vCisJOzsKKyopCisJZGVmYXVsdF93aXRoX2xwNjQ9eWVzCisJOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjc3ODM6IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIF9MUDY0IGRlZmluaXRpb24gaW4gY3Vyc2VzLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBfTFA2NCBkZWZpbml0aW9uIGluIGN1cnNlcy5oLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbHA2NCBvciAtLWRpc2FibGUtbHA2NCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9scDY0K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9scDY0IgorICB3aXRoX2xwNjQ9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2xwNjQ9JGRlZmF1bHRfd2l0aF9scDY0CitmaTsKK2VjaG8gIiRhc19tZTo3NzkzOiByZXN1bHQ6ICR3aXRoX2xwNjQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfbHA2NCIgPiY2CisKK2lmIHRlc3QgIiR3aXRoX2xwNjQiID0geWVzIDsgdGhlbgorCWNmX2N2X2VuYWJsZV9scDY0PTEKK2Vsc2UKKwljZl9jdl9lbmFibGVfbHA2ND0wCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIG9yIC0tZGlzYWJsZS1sYXJnZWZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGFyZ2VmaWxlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9sYXJnZWZpbGUiCisKK2ZpOworaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vOyB0aGVuCisKKyAgZWNobyAiJGFzX21lOjc4MDk6IGNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZWZpbGVfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworICAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBhY19zYXZlX0NDPSRDQworICAgICAgIHdoaWxlIDo7IGRvCisgICAgIAkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKyAgICAgCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDc4MjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3ODQxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3ODQ0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjc4NDc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3ODUwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgCSBDQz0iJENDIC1uMzIiCisgICAgIAkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Nzg2MDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Nzg2MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3ODY2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Nzg2OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQorZWNobyAiJGFzX21lOjc4ODM6IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNgorICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KKyAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworICBmaQorCisgIGVjaG8gIiRhc19tZTo3ODg5OiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubworICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDc4OTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc5MTc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc5MjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzkyMzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc5MjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzkzNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Nzk1NjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Nzk1OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3OTYyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Nzk2NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0OyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGJyZWFrCitkb25lCitmaQorZWNobyAiJGFzX21lOjc5NzY6IHJlc3VsdDogJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY2CitpZiB0ZXN0ICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiICE9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzCitFT0YKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICBlY2hvICIkYXNfbWU6Nzk4NjogY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzk5NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODAxNDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODAxNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4MDIwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODAyMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA4MDMyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4MDUzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MDU2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjgwNTk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MDYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6ODA3MzogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNgoraWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgIT0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBfTEFSR0VfRklMRVMgJGFjX2N2X3N5c19sYXJnZV9maWxlcworRU9GCisKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKKyAgICBpZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm8gOyB0aGVuCisJZWNobyAiJGFzX21lOjgwODY6IGNoZWNraW5nIGZvciBfTEFSR0VGSUxFX1NPVVJDRSB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPW5vCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODA5NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcmV0dXJuICFmc2Vla287CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgxMDY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgxMDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODExMjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgxMTU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODEyNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CityZXR1cm4gIWZzZWVrbzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODEzNzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODE0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4MTQzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODE0NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTE7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6ODE1NzogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgIT0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UKK0VPRgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyMgV2UgdXNlZCB0byB0cnkgZGVmaW5pbmcgX1hPUEVOX1NPVVJDRT01MDAgdG9vLCB0byB3b3JrIGFyb3VuZCBhIGJ1ZworIyBpbiBnbGliYyAyLjEuMywgYnV0IHRoYXQgYnJlYWtzIHRvbyBtYW55IG90aGVyIHRoaW5ncy4KKyMgSWYgeW91IHdhbnQgZnNlZWtvIGFuZCBmdGVsbG8gd2l0aCBnbGliYywgdXBncmFkZSB0byBhIGZpeGVkIGdsaWJjLgorZWNobyAiJGFzX21lOjgxNzE6IGNoZWNraW5nIGZvciBmc2Vla28iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZnNlZWtvLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX2ZzZWVrbytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDgxNzcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmc2Vla28gJiYgZnNlZWtvIChzdGRpbiwgMCwgMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4MTg5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MTkyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODE5NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgxOTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX2ZzZWVrbz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19mc2Vla289bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjgyMDg6IHJlc3VsdDogJGFjX2N2X2Z1bmNfZnNlZWtvIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2ZzZWVrbyIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2ZzZWVrbyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0ZTRUVLTyAxCitFT0YKKworZmkKKworCSMgTm9ybWFsbHkgd2Ugd291bGQgY29sbGVjdCB0aGVzZSBkZWZpbml0aW9ucyBpbiB0aGUgY29uZmlnLmgsCisJIyBidXQgKGxpa2UgX1hPUEVOX1NPVVJDRSksIHNvbWUgZW52aXJvbm1lbnRzIHJlbHkgb24gaGF2aW5nIHRoZXNlCisJIyBkZWZpbmVkIGJlZm9yZSBhbnkgb2YgdGhlIHN5c3RlbSBoZWFkZXJzIGFyZSBpbmNsdWRlZC4gIEFub3RoZXIKKwkjIGNhc2UgY29tZXMgdXAgd2l0aCBDKyssIGUuZy4sIG9uIEFJWCB0aGUgY29tcGlsZXIgY29tcGlsZXMgdGhlCisJIyBoZWFkZXIgZmlsZXMgYnkgdGhlbXNlbHZlcyBiZWZvcmUgbG9va2luZyBhdCB0aGUgYm9keSBmaWxlcyBpdCBpcworCSMgdG9sZCB0byBjb21waWxlLiAgRm9yIG5jdXJzZXMsIHRob3NlIGhlYWRlciBmaWxlcyBkbyBub3QgaW5jbHVkZQorCSMgdGhlIGNvbmZpZy5oCisJdGVzdCAiJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgICAgICAhPSBubyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0xBUkdFX0ZJTEVTICIKKwl0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfTEFSR0VGSUxFX1NPVVJDRSAiCisJdGVzdCAiJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiAhPSBubyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9JGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzICIKKworCWVjaG8gIiRhc19tZTo4MjI5OiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBzdHJ1Y3QgZGlyZW50NjQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBzdHJ1Y3QgZGlyZW50NjQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3N0cnVjdF9kaXJlbnQ2NCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODIzNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKworaW50CittYWluICgpCit7CisKKwkJLyogaWYgdHJhbnNpdGlvbmFsIGxhcmdlZmlsZSBzdXBwb3J0IGlzIHNldHVwLCB0aGlzIGlzIHRydWUgKi8KKwkJZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqIHJlYWRkaXIoRElSICopOworCQlzdHJ1Y3QgZGlyZW50NjQgKnggPSByZWFkZGlyKChESVIgKikwKTsKKwkJc3RydWN0IGRpcmVudCAqeSA9IHJlYWRkaXIoKERJUiAqKTApOworCQlpbnQgeiA9IHggLSB5OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgyNTc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgyNjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODI2MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgyNjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9zdHJ1Y3RfZGlyZW50NjQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3N0cnVjdF9kaXJlbnQ2ND1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjgyNzc6IHJlc3VsdDogJGNmX2N2X3N0cnVjdF9kaXJlbnQ2NCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfc3RydWN0X2RpcmVudDY0IiA+JjYKKwl0ZXN0ICIkY2ZfY3Zfc3RydWN0X2RpcmVudDY0IiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9ESVJFTlQ2NCAxCitFT0YKKworICAgIGZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3MgdG8gbWFrZSB0cGFybSgpIGNvbmZvcm0gdG8gWC9PcGVuCitlY2hvICIkYXNfbWU6ODI4NjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdHBhcm0gbm90IHRvIHVzZSBYL09wZW4gZml4ZWQtcGFyYW1ldGVyIGxpc3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0cGFybSBub3QgdG8gdXNlIFgvT3BlbiBmaXhlZC1wYXJhbWV0ZXIgbGlzdC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRwYXJtLXZhcmFyZ3Mgb3IgLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdHBhcm1fdmFyYXJncytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfdHBhcm1fdmFyYXJncyIKKyAgd2l0aF90cGFybV92YXJhcmdzPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF90cGFybV92YXJhcmdzPXllcworZmk7CitlY2hvICIkYXNfbWU6ODI5NjogcmVzdWx0OiAkd2l0aF90cGFybV92YXJhcmdzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3RwYXJtX3ZhcmFyZ3MiID4mNgorTkNVUlNFU19UUEFSTV9WQVJBUkdTPTAKK3Rlc3QgIiR3aXRoX3RwYXJtX3ZhcmFyZ3MiID0geWVzICYmIE5DVVJTRVNfVFBBUk1fVkFSQVJHUz0xCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLXRpYy1kZXBlbmRzIHRvIG1ha2UgbGlidGljIG5vdCBleHBsaWNpdGx5IGRlcGVuZCBvbiBuY3Vyc2VzL25jdXJzZXN3CitpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIDsgdGhlbgorZWNobyAiJGFzX21lOjgzMDM6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRpYyBsaWJyYXJ5IHRvIHVzZSBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIG5jdXJzZXMkTElCX1NVRkZJWCBsaWJyYXJ5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdGljIGxpYnJhcnkgdG8gdXNlIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gbmN1cnNlcyRMSUJfU1VGRklYIGxpYnJhcnkuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10aWMtZGVwZW5kcyBvciAtLWRpc2FibGUtdGljLWRlcGVuZHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGljX2RlcGVuZHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3RpY19kZXBlbmRzIgorICB3aXRoX3RpY19kZXBlbmRzPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF90aWNfZGVwZW5kcz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjgzMTM6IHJlc3VsdDogJHdpdGhfdGljX2RlcGVuZHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfdGljX2RlcGVuZHMiID4mNgorZWxzZQorCXdpdGhfdGljX2RlcGVuZHM9bm8KK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLWJvb2wgdG8gb3ZlcnJpZGUgYm9vbCdzIHR5cGUKK2VjaG8gIiRhc19tZTo4MzIwOiBjaGVja2luZyBmb3IgdHlwZSBvZiBib29sIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR5cGUgb2YgYm9vbC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ib29sIG9yIC0td2l0aG91dC1ib29sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ib29sK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2Jvb2wiCisgIE5DVVJTRVNfQk9PTD0iJHdpdGh2YWwiCitlbHNlCisgIE5DVVJTRVNfQk9PTD1hdXRvCitmaTsKK2VjaG8gIiRhc19tZTo4MzMwOiByZXN1bHQ6ICROQ1VSU0VTX0JPT0wiID4mNQorZWNobyAiJHtFQ0hPX1R9JE5DVVJTRVNfQk9PTCIgPiY2CisKK2VjaG8gIiRhc19tZTo4MzMzOiBjaGVja2luZyBmb3IgYWx0ZXJuYXRlIHRlcm1pbmFsIGNhcGFiaWxpdGllcyBmaWxlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFsdGVybmF0ZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgZmlsZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jYXBzIG9yIC0td2l0aG91dC1jYXBzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jYXBzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2NhcHMiCisgIFRFUk1JTkZPX0NBUFM9Q2Fwcy4kd2l0aHZhbAorZWxzZQorICBURVJNSU5GT19DQVBTPUNhcHMKK2ZpOwordGVzdCAtZiAiJHtzcmNkaXJ9L2luY2x1ZGUvJHtURVJNSU5GT19DQVBTfSIgfHwgVEVSTUlORk9fQ0FQUz1DYXBzCitlY2hvICIkYXNfbWU6ODM0NDogcmVzdWx0OiAkVEVSTUlORk9fQ0FQUyIgPiY1CitlY2hvICIke0VDSE9fVH0kVEVSTUlORk9fQ0FQUyIgPiY2CisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLWNodHlwZSB0byBvdmVycmlkZSBjaHR5cGUncyB0eXBlCitlY2hvICIkYXNfbWU6ODM0ODogY2hlY2tpbmcgZm9yIHR5cGUgb2YgY2h0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR5cGUgb2YgY2h0eXBlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNodHlwZSBvciAtLXdpdGhvdXQtY2h0eXBlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jaHR5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfY2h0eXBlIgorICBOQ1VSU0VTX0NIVFlQRT0iJHdpdGh2YWwiCitlbHNlCisgIE5DVVJTRVNfQ0hUWVBFPWF1dG8KK2ZpOworZWNobyAiJGFzX21lOjgzNTg6IHJlc3VsdDogJE5DVVJTRVNfQ0hUWVBFIiA+JjUKK2VjaG8gIiR7RUNIT19UfSROQ1VSU0VTX0NIVFlQRSIgPiY2CisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLW9zcGVlZCB0byBvdmVycmlkZSBvc3BlZWQncyB0eXBlCitlY2hvICIkYXNfbWU6ODM2MjogY2hlY2tpbmcgZm9yIHR5cGUgb2Ygb3NwZWVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR5cGUgb2Ygb3NwZWVkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW9zcGVlZCBvciAtLXdpdGhvdXQtb3NwZWVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vc3BlZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfb3NwZWVkIgorICBOQ1VSU0VTX09TUEVFRD0iJHdpdGh2YWwiCitlbHNlCisgIE5DVVJTRVNfT1NQRUVEPXNob3J0CitmaTsKK2VjaG8gIiRhc19tZTo4MzcyOiByZXN1bHQ6ICROQ1VSU0VTX09TUEVFRCIgPiY1CitlY2hvICIke0VDSE9fVH0kTkNVUlNFU19PU1BFRUQiID4mNgorCisjIyMgICB1c2Ugb3B0aW9uIC0td2l0aC1tbWFzay10IHRvIG92ZXJyaWRlIG1tYXNrX3QncyB0eXBlCitlY2hvICIkYXNfbWU6ODM3NjogY2hlY2tpbmcgZm9yIHR5cGUgb2YgbW1hc2tfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0eXBlIG9mIG1tYXNrX3QuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW1hc2stdCBvciAtLXdpdGhvdXQtbW1hc2stdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbW1hc2tfdCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tbWFza190IgorICBOQ1VSU0VTX01NQVNLX1Q9IiR3aXRodmFsIgorZWxzZQorICBOQ1VSU0VTX01NQVNLX1Q9YXV0bworZmk7CitlY2hvICIkYXNfbWU6ODM4NjogcmVzdWx0OiAkTkNVUlNFU19NTUFTS19UIiA+JjUKK2VjaG8gIiR7RUNIT19UfSROQ1VSU0VTX01NQVNLX1QiID4mNgorCisjIyMgRW5hYmxlIGNvbXBpbGluZy1pbiByY3MgaWQncworZWNobyAiJGFzX21lOjgzOTA6IGNoZWNraW5nIGlmIFJDUyBpZGVudGlmaWVycyBzaG91bGQgYmUgY29tcGlsZWQtaW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBSQ1MgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbXBpbGVkLWluLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJjcy1pZHMgb3IgLS13aXRob3V0LXJjcy1pZHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Jjc19pZHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcmNzX2lkcyIKKyAgd2l0aF9yY3NfaWRzPSR3aXRodmFsCitlbHNlCisgIHdpdGhfcmNzX2lkcz1ubworZmk7CitlY2hvICIkYXNfbWU6ODQwMDogcmVzdWx0OiAkd2l0aF9yY3NfaWRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3Jjc19pZHMiID4mNgordGVzdCAiJHdpdGhfcmNzX2lkcyIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1JDU19JRFMgMQorRU9GCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZWNobyAiJGFzX21lOjg0MDg6IGNoZWNraW5nIGZvcm1hdCBvZiBtYW4tcGFnZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3JtYXQgb2YgbWFuLXBhZ2VzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1hbnBhZ2UtZm9ybWF0IG9yIC0td2l0aG91dC1tYW5wYWdlLWZvcm1hdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWFucGFnZV9mb3JtYXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbWFucGFnZV9mb3JtYXQiCisgIE1BTlBBR0VfRk9STUFUPSR3aXRodmFsCitlbHNlCisgIE1BTlBBR0VfRk9STUFUPXVua25vd24KK2ZpOworCit0ZXN0IC16ICIkTUFOUEFHRV9GT1JNQVQiICYmIE1BTlBBR0VfRk9STUFUPXVua25vd24KK01BTlBBR0VfRk9STUFUPWBlY2hvICIkTUFOUEFHRV9GT1JNQVQiIHwgc2VkIC1lICdzLywvIC9nJ2AKKworY2ZfdW5rbm93bj0KKworY2FzZSAkTUFOUEFHRV9GT1JNQVQgaW4KK3Vua25vd24pCisgIGlmIHRlc3QgLXogIiRNQU5QQVRIIiA7IHRoZW4KKyAgICBNQU5QQVRIPSIvdXNyL21hbjovdXNyL3NoYXJlL21hbiIKKyAgZmkKKworICAjIGxvb2sgZm9yIHRoZSAnZGF0ZScgbWFuLXBhZ2UgKGl0J3MgbW9zdCBsaWtlbHkgdG8gYmUgaW5zdGFsbGVkISkKKyAgTUFOUEFHRV9GT1JNQVQ9CisgIGNmX3ByZWZvcm09bm8KKyAgY2ZfY2F0b25seT15ZXMKKyAgY2ZfZXhhbXBsZT1kYXRlCisKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIU0VQfSIKKyAgZm9yIGNmX2RpciBpbiAkTUFOUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkY2ZfZGlyIiAmJiBjZl9kaXI9L3Vzci9tYW4KKyAgICBmb3IgY2ZfbmFtZSBpbiAkY2ZfZGlyL21hbiovJGNmX2V4YW1wbGUuWzAxXSogJGNmX2Rpci9jYXQqLyRjZl9leGFtcGxlLlswMV0qICRjZl9kaXIvbWFuKi8kY2ZfZXhhbXBsZSAkY2ZfZGlyL2NhdCovJGNmX2V4YW1wbGUKKyAgICBkbworICAgICAgY2ZfdGVzdD1gZWNobyAkY2ZfbmFtZSB8IHNlZCAtZSAncy8qLy8nYAorICAgICAgaWYgdGVzdCAieCRjZl90ZXN0IiA9ICJ4JGNmX25hbWUiIDsgdGhlbgorCisJY2FzZSAiJGNmX25hbWUiIGluCisJKi5neikgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBnemlwIjs7CisJKi5aKSAgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBjb21wcmVzcyI7OworCSouMCkJTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBCU0RJIjs7CisJKikgICAgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBub3JtYWwiOzsKKwllc2FjCisKKwljYXNlICIkY2ZfbmFtZSIgaW4KKwkkY2ZfZGlyL21hbiopCisJICBjZl9jYXRvbmx5PW5vCisJICA7OworCSRjZl9kaXIvY2F0KikKKwkgIGNmX3ByZWZvcm09eWVzCisJICA7OworCWVzYWMKKwlicmVhaworICAgICAgZmkKKworICAgICAgIyBpZiB3ZSBmb3VuZCBhIG1hdGNoIGluIGVpdGhlciBtYW4qIG9yIGNhdCosIHN0b3AgbG9va2luZworICAgICAgaWYgdGVzdCAtbiAiJE1BTlBBR0VfRk9STUFUIiA7IHRoZW4KKwljZl9mb3VuZD1ubworCXRlc3QgIiRjZl9wcmVmb3JtIiA9IHllcyAmJiBNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIGZvcm1hdHRlZCIKKwl0ZXN0ICIkY2ZfY2F0b25seSIgPSB5ZXMgJiYgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBjYXRvbmx5IgorCWNhc2UgIiRjZl9uYW1lIiBpbgorCSRjZl9kaXIvY2F0KikKKwkgIGNmX2ZvdW5kPXllcworCSAgOzsKKwllc2FjCisJdGVzdCAkY2ZfZm91bmQ9eWVzICYmIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICAjIG9ubHkgY2hlY2sgdGhlIGZpcnN0IGRpcmVjdG9yeSBpbiAkTUFOUEFUSCB3aGVyZSB3ZSBmaW5kIG1hbnBhZ2VzCisgICAgaWYgdGVzdCAtbiAiJE1BTlBBR0VfRk9STUFUIiA7IHRoZW4KKyAgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgIyBpZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGV4YW1wbGUsIGp1c3QgYXNzdW1lIGl0IGlzIG5vcm1hbAorICB0ZXN0IC16ICIkTUFOUEFHRV9GT1JNQVQiICYmIE1BTlBBR0VfRk9STUFUPW5vcm1hbAorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKKyopCisgIGZvciBjZl9vcHRpb24gaW4gJE1BTlBBR0VfRk9STUFUOyBkbworICAgICBjYXNlICRjZl9vcHRpb24gaW4gIyh2aQorICAgICBnemlwfGNvbXByZXNzfEJTREl8bm9ybWFsfGZvcm1hdHRlZHxjYXRvbmx5KQorICAgICAgIDs7CisgICAgICopCisgICAgICAgY2ZfdW5rbm93bj0iJGNmX3Vua25vd24gJGNmX29wdGlvbiIKKyAgICAgICA7OworICAgICBlc2FjCisgIGRvbmUKKyAgOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjg0OTc6IHJlc3VsdDogJE1BTlBBR0VfRk9STUFUIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQU5QQUdFX0ZPUk1BVCIgPiY2CitpZiB0ZXN0IC1uICIkY2ZfdW5rbm93biIgOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOjg1MDA6IFdBUk5JTkc6IFVuZXhwZWN0ZWQgbWFucGFnZS1mb3JtYXQgJGNmX3Vua25vd24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmV4cGVjdGVkIG1hbnBhZ2UtZm9ybWF0ICRjZl91bmtub3duIiA+JjI7fQorZmkKKworZWNobyAiJGFzX21lOjg1MDQ6IGNoZWNraW5nIGZvciBtYW5wYWdlIHJlbmFtaW5nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1hbnBhZ2UgcmVuYW1pbmcuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFucGFnZS1yZW5hbWVzIG9yIC0td2l0aG91dC1tYW5wYWdlLXJlbmFtZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21hbnBhZ2VfcmVuYW1lcytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tYW5wYWdlX3JlbmFtZXMiCisgIE1BTlBBR0VfUkVOQU1FUz0kd2l0aHZhbAorZWxzZQorICBNQU5QQUdFX1JFTkFNRVM9eWVzCitmaTsKKworY2FzZSAiLiRNQU5QQUdFX1JFTkFNRVMiIGluICModmkKKy5ubykgIyh2aQorICA7OworLnwueWVzKQorICAjIERlYmlhbiAnbWFuJyBwcm9ncmFtPworICBpZiB0ZXN0IC1mIC9ldGMvZGViaWFuX3ZlcnNpb24gOyB0aGVuCisgICAgTUFOUEFHRV9SRU5BTUVTPWBjZCAkc3JjZGlyICYmIHB3ZGAvbWFuL21hbl9kYi5yZW5hbWVzCisgIGVsc2UKKyAgICBNQU5QQUdFX1JFTkFNRVM9bm8KKyAgZmkKKyAgOzsKK2VzYWMKKworaWYgdGVzdCAiJE1BTlBBR0VfUkVOQU1FUyIgIT0gbm8gOyB0aGVuCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9tYW4vJE1BTlBBR0VfUkVOQU1FUyA7IHRoZW4KKyAgICBNQU5QQUdFX1JFTkFNRVM9YGNkICRzcmNkaXIvbWFuICYmIHB3ZGAvJE1BTlBBR0VfUkVOQU1FUworICBlbGlmIHRlc3QgISAtZiAkTUFOUEFHRV9SRU5BTUVTIDsgdGhlbgorICAgIHsgeyBlY2hvICIkYXNfbWU6ODUzMjogZXJyb3I6IG5vdCBhIGZpbGVuYW1lOiAkTUFOUEFHRV9SRU5BTUVTIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vdCBhIGZpbGVuYW1lOiAkTUFOUEFHRV9SRU5BTUVTIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGZpCisKKyAgdGVzdCAhIC1kIG1hbiAmJiBta2RpciBtYW4KKworICAjIENvbnN0cnVjdCBhIHNlZC1zY3JpcHQgdG8gcGVyZm9ybSByZW5hbWluZyB3aXRoaW4gbWFuLXBhZ2VzCisgIGlmIHRlc3QgLW4gIiRNQU5QQUdFX1JFTkFNRVMiIDsgdGhlbgorICAgIHRlc3QgISAtZCBtYW4gJiYgbWtkaXIgbWFuCisgICAgc2ggJHNyY2Rpci9tYW4vbWFrZV9zZWQuc2ggJE1BTlBBR0VfUkVOQU1FUyA+Li9lZGl0X21hbi5zZWQKKyAgZmkKK2ZpCisKK2VjaG8gIiRhc19tZTo4NTQ2OiByZXN1bHQ6ICRNQU5QQUdFX1JFTkFNRVMiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BTlBBR0VfUkVOQU1FUyIgPiY2CisKK2VjaG8gIiRhc19tZTo4NTQ5OiBjaGVja2luZyBpZiBtYW5wYWdlIGFsaWFzZXMgd2lsbCBiZSBpbnN0YWxsZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBtYW5wYWdlIGFsaWFzZXMgd2lsbCBiZSBpbnN0YWxsZWQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFucGFnZS1hbGlhc2VzIG9yIC0td2l0aG91dC1tYW5wYWdlLWFsaWFzZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21hbnBhZ2VfYWxpYXNlcytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tYW5wYWdlX2FsaWFzZXMiCisgIE1BTlBBR0VfQUxJQVNFUz0kd2l0aHZhbAorZWxzZQorICBNQU5QQUdFX0FMSUFTRVM9eWVzCitmaTsKKworZWNobyAiJGFzX21lOjg1NjA6IHJlc3VsdDogJE1BTlBBR0VfQUxJQVNFUyIgPiY1CitlY2hvICIke0VDSE9fVH0kTUFOUEFHRV9BTElBU0VTIiA+JjYKKworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorCWNmX3VzZV9zeW1saW5rcz15ZXMKK2Vsc2UKKwljZl91c2Vfc3ltbGlua3M9bm8KK2ZpCisKK01BTlBBR0VfU1lNTElOS1M9bm8KK2lmIHRlc3QgIiRNQU5QQUdFX0FMSUFTRVMiID0geWVzIDsgdGhlbgorZWNobyAiJGFzX21lOjg1NzE6IGNoZWNraW5nIGlmIG1hbnBhZ2Ugc3ltbGlua3Mgc2hvdWxkIGJlIHVzZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBtYW5wYWdlIHN5bWxpbmtzIHNob3VsZCBiZSB1c2VkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1hbnBhZ2Utc3ltbGlua3Mgb3IgLS13aXRob3V0LW1hbnBhZ2Utc3ltbGlua3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21hbnBhZ2Vfc3ltbGlua3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbWFucGFnZV9zeW1saW5rcyIKKyAgTUFOUEFHRV9TWU1MSU5LUz0kd2l0aHZhbAorZWxzZQorICBNQU5QQUdFX1NZTUxJTktTPSRjZl91c2Vfc3ltbGlua3MKK2ZpOworCitpZiB0ZXN0ICIkJGNmX3VzZV9zeW1saW5rcyIgPSBubzsgdGhlbgoraWYgdGVzdCAiJE1BTlBBR0VfU1lNTElOS1MiID0geWVzIDsgdGhlbgorCXsgZWNobyAiJGFzX21lOjg1ODQ6IFdBUk5JTkc6IGNhbm5vdCBtYWtlIHN5bWxpbmtzIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogY2Fubm90IG1ha2Ugc3ltbGlua3MiID4mMjt9CisJTUFOUEFHRV9TWU1MSU5LUz1ubworZmkKK2ZpCisKK2VjaG8gIiRhc19tZTo4NTkwOiByZXN1bHQ6ICRNQU5QQUdFX1NZTUxJTktTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQU5QQUdFX1NZTUxJTktTIiA+JjYKK2ZpCisKK2VjaG8gIiRhc19tZTo4NTk0OiBjaGVja2luZyBmb3IgbWFucGFnZSB0YmwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFucGFnZSB0YmwuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFucGFnZS10Ymwgb3IgLS13aXRob3V0LW1hbnBhZ2UtdGJsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tYW5wYWdlX3RibCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tYW5wYWdlX3RibCIKKyAgTUFOUEFHRV9UQkw9JHdpdGh2YWwKK2Vsc2UKKyAgTUFOUEFHRV9UQkw9bm8KK2ZpOworCitlY2hvICIkYXNfbWU6ODYwNTogcmVzdWx0OiAkTUFOUEFHRV9UQkwiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BTlBBR0VfVEJMIiA+JjYKKworICBpZiB0ZXN0ICIkcHJlZml4IiA9ICJOT05FIiA7IHRoZW4KKyAgICAgY2ZfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGVsc2UKKyAgICAgY2ZfcHJlZml4PSIkcHJlZml4IgorICBmaQorCisgIGNhc2UgIiRNQU5QQUdFX0ZPUk1BVCIgaW4gIyAodmkKKyAgKmNhdG9ubHkqKSAjICh2aQorICAgIGNmX2Zvcm1hdD15ZXMKKyAgICBjZl9pbmJvdGg9bm8KKyAgICA7OworICAqZm9ybWF0dGVkKikgIyAodmkKKyAgICBjZl9mb3JtYXQ9eWVzCisgICAgY2ZfaW5ib3RoPXllcworICAgIDs7CisgICopCisgICAgY2ZfZm9ybWF0PW5vCisgICAgY2ZfaW5ib3RoPW5vCisgICAgOzsKKyAgZXNhYworCit0ZXN0ICEgLWQgbWFuICYmIG1rZGlyIG1hbgorCitjZl9zb19zdHJpcD0KK2NmX2NvbXByZXNzPQorY2FzZSAiJE1BTlBBR0VfRk9STUFUIiBpbiAjKHZpCisqY29tcHJlc3MqKSAjKHZpCisJY2Zfc29fc3RyaXA9IloiCisJY2ZfY29tcHJlc3M9Y29tcHJlc3MKKyAgOzsKKypnemlwKikgIyh2aQorCWNmX3NvX3N0cmlwPSJneiIKKwljZl9jb21wcmVzcz1nemlwCisgIDs7Citlc2FjCisKK2NmX2VkaXRfbWFuPS4vZWRpdF9tYW4uc2gKK2NmX21hbl9hbGlhcz1gcHdkYC9tYW5fYWxpYXMuc2VkCisKK2NhdCA+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisjISAvYmluL3NoCisjIHRoaXMgc2NyaXB0IGlzIGdlbmVyYXRlZCBieSB0aGUgY29uZmlndXJlLXNjcmlwdCBDRl9NQU5fUEFHRVMgbWFjcm8uCisKK3ByZWZpeD0iJGNmX3ByZWZpeCIKK2RhdGFkaXI9IiRkYXRhZGlyIgorCitOQ1VSU0VTX01BSk9SPSIkTkNVUlNFU19NQUpPUiIKK05DVVJTRVNfTUlOT1I9IiROQ1VSU0VTX01JTk9SIgorTkNVUlNFU19QQVRDSD0iJE5DVVJTRVNfUEFUQ0giCisKK05DVVJTRVNfT1NQRUVEPSIkTkNVUlNFU19PU1BFRUQiCitURVJNSU5GTz0iJFRFUk1JTkZPIgorCitNS0RJUlM9InNoIGBjZCAkc3JjZGlyICYmIHB3ZGAvbWtkaXJzLnNoIgorCitJTlNUQUxMPSIkSU5TVEFMTCIKK0lOU1RBTExfREFUQT0iJElOU1RBTExfREFUQSIKKwordHJhbnNmb3JtPSIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKworVE1QPVwke1RNUERJUi0vdG1wfS9tYW5cJFwkCit0cmFwICJybSAtZiBcJFRNUCIgMCAxIDIgNSAxNQorCitmb3JtPVwkMQorc2hpZnQgfHwgZXhpdCAxCisKK3ZlcmI9XCQxCitzaGlmdCB8fCBleGl0IDEKKworbWFuZGlyPVwkMQorc2hpZnQgfHwgZXhpdCAxCisKK3NyY2Rpcj1cJDEKK3RvcF9zcmNkaXI9XCRzcmNkaXIvLi4KK3NoaWZ0IHx8IGV4aXQgMQorCitpZiB0ZXN0ICJcJGZvcm0iID0gbm9ybWFsIDsgdGhlbgorCWlmIHRlc3QgIiRjZl9mb3JtYXQiID0geWVzIDsgdGhlbgorCWlmIHRlc3QgIiRjZl9pbmJvdGgiID0gbm8gOyB0aGVuCisJCXNoIFwkMCBmb3JtYXQgXCR2ZXJiIFwkbWFuZGlyIFwkc3JjZGlyIFwkKgorCQlleGl0ICQ/CisJZmkKKwlmaQorCWNmX3N1YmRpcj1cJG1hbmRpci9tYW4KKwljZl90YWJsZXM9JE1BTlBBR0VfVEJMCitlbHNlCisJY2Zfc3ViZGlyPVwkbWFuZGlyL2NhdAorCWNmX3RhYmxlcz15ZXMKK2ZpCisKKyMgcHJvY2VzcyB0aGUgbGlzdCBvZiBzb3VyY2UtZmlsZXMKK2ZvciBpIGluIFwkKiA7IGRvCitjYXNlIFwkaSBpbiAjKHZpCisqLm9yaWd8Ki5yZWopIDs7ICModmkKKyouWzAtOV0qKQorCXNlY3Rpb249XGBleHByICJcJGkiIDogJy4qXFwuXFwoWzAtOV1cXClbeG1dKidcYDsKKwlpZiB0ZXN0IFwkdmVyYiA9IGluc3RhbGxpbmcgOyB0aGVuCisJaWYgdGVzdCAhIC1kIFwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0gOyB0aGVuCisJCVwkTUtESVJTIFwkY2Zfc3ViZGlyXCRzZWN0aW9uCisJZmkKKwlmaQorCisJIyByZXBsYWNlIHZhcmlhYmxlcyBpbiBtYW4gcGFnZQorCWlmIHRlc3QgISAtZiAkY2ZfbWFuX2FsaWFzIDsgdGhlbgorY2F0ID4+JGNmX21hbl9hbGlhcyA8PC1DRl9FT0YyCisJCXMsQERBVEFESVJALFwkZGF0YWRpcixnCisJCXMsQFRFUk1JTkZPQCxcJFRFUk1JTkZPLGcKKwkJcyxATkNVUlNFU19NQUpPUkAsXCROQ1VSU0VTX01BSk9SLGcKKwkJcyxATkNVUlNFU19NSU5PUkAsXCROQ1VSU0VTX01JTk9SLGcKKwkJcyxATkNVUlNFU19QQVRDSEAsXCROQ1VSU0VTX1BBVENILGcKKwkJcyxATkNVUlNFU19PU1BFRURALFwkTkNVUlNFU19PU1BFRUQsZworQ0ZfRU9GCisKKwlmb3IgY2ZfbmFtZSBpbiAgY2FwdG9pbmZvIGNsZWFyIGluZm9jbXAgaW5mb3RvY2FwIHRpYyB0b2UgdHB1dAorCWRvCisJCWNmX05BTUU9YGVjaG8gIiRjZl9uYW1lIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKwkJY2ZfbmFtZT1gZWNobyAkY2ZfbmFtZXxzZWQgIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lImAKK2NhdCA+PiRjZl9lZGl0X21hbiA8PC1DRl9FT0YKKwkJcyxAJGNmX05BTUVALCRjZl9uYW1lLAorQ0ZfRU9GCisJZG9uZQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKK0NGX0VPRjIKKwkJZWNobyAiLi4ubWFkZSAkY2ZfbWFuX2FsaWFzIgorCWZpCisKKwlhbGlhc2VzPQorCWNmX3NvdXJjZT1cYGJhc2VuYW1lIFwkaVxgCisJaW5hbGlhcz1cJGNmX3NvdXJjZQorCXRlc3QgISAtZiBcJGluYWxpYXMgJiYgaW5hbGlhcz0iXCRzcmNkaXIvXCRpbmFsaWFzIgorCWlmIHRlc3QgISAtZiBcJGluYWxpYXMgOyB0aGVuCisJCWVjaG8gLi4gc2tpcHBlZCBcJGNmX3NvdXJjZQorCQljb250aW51ZQorCWZpCitDRl9FT0YKKworaWYgdGVzdCAiJE1BTlBBR0VfQUxJQVNFUyIgIT0gbm8gOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlhbGlhc2VzPVxgc2VkIC1mIFwkdG9wX3NyY2Rpci9tYW4vbWFubGlua3Muc2VkIFwkaW5hbGlhcyB8c2VkIC1mICRjZl9tYW5fYWxpYXMgfCBzb3J0IC11XGAKK0NGX0VPRgorZmkKKworaWYgdGVzdCAiJE1BTlBBR0VfUkVOQU1FUyIgPSBubyA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCSMgcGVyZm9ybSBwcm9ncmFtIHRyYW5zZm9ybWF0aW9ucyBmb3Igc2VjdGlvbiAxIG1hbiBwYWdlcworCWlmIHRlc3QgXCRzZWN0aW9uID0gMSA7IHRoZW4KKwkJY2ZfdGFyZ2V0PVwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0vXGBlY2hvIFwkY2Zfc291cmNlfHNlZCAiXCR7dHJhbnNmb3JtfSJcYAorCWVsc2UKKwkJY2ZfdGFyZ2V0PVwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0vXCRjZl9zb3VyY2UKKwlmaQorQ0ZfRU9GCitlbHNlCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwljZl90YXJnZXQ9XGBncmVwICJeXCRjZl9zb3VyY2UiICRNQU5QQUdFX1JFTkFNRVMgfCAkQVdLICd7cHJpbnQgXCQyfSdcYAorCWlmIHRlc3QgLXogIlwkY2ZfdGFyZ2V0IiA7IHRoZW4KKwkJZWNobyAnPyBtaXNzaW5nIHJlbmFtZSBmb3IgJ1wkY2Zfc291cmNlCisJCWNmX3RhcmdldD0iXCRjZl9zb3VyY2UiCisJZmkKKwljZl90YXJnZXQ9IlwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0vXCR7Y2ZfdGFyZ2V0fSIKKworQ0ZfRU9GCitmaQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlzZWQJLWYgJGNmX21hbl9hbGlhcyBcXAorQ0ZfRU9GCisKK2lmIHRlc3QgLWYgJE1BTlBBR0VfUkVOQU1FUyA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCQk8IFwkaSB8IHNlZCAtZiBgcHdkYC9lZGl0X21hbi5zZWQgPlwkVE1QCitDRl9FT0YKK2Vsc2UKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCQk8IFwkaSA+XCRUTVAKK0NGX0VPRgorZmkKKworY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCitpZiB0ZXN0IFwkY2ZfdGFibGVzID0geWVzIDsgdGhlbgorCXRibCBcJFRNUCA+XCRUTVAub3V0CisJbXYgXCRUTVAub3V0IFwkVE1QCitmaQorQ0ZfRU9GCisKK2lmIHRlc3QgJHdpdGhfY3Vyc2VzX2ggIT0geWVzIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJc2VkIC1lICIvXCNbICAgIF0qaW5jbHVkZS9zLGN1cnNlcy5oLG5jdXJzZXMuaCwiIDwgXCRUTVAgPlwkVE1QLm91dAorCW12IFwkVE1QLm91dCBcJFRNUAorQ0ZfRU9GCitmaQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlpZiB0ZXN0IFwkZm9ybSA9IGZvcm1hdCA7IHRoZW4KKwkJbnJvZmYgLW1hbiBcJFRNUCA+XCRUTVAub3V0CisJCW12IFwkVE1QLm91dCBcJFRNUAorCWZpCitDRl9FT0YKKworaWYgdGVzdCAtbiAiJGNmX2NvbXByZXNzIiA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCWlmIHRlc3QgXCR2ZXJiID0gaW5zdGFsbGluZyA7IHRoZW4KKwlpZiAoICRjZl9jb21wcmVzcyAtZiBcJFRNUCApCisJdGhlbgorCQltdiBcJFRNUC4kY2Zfc29fc3RyaXAgXCRUTVAKKwlmaQorCWZpCisJY2ZfdGFyZ2V0PSJcJGNmX3RhcmdldC4kY2Zfc29fc3RyaXAiCitDRl9FT0YKK2ZpCisKK2Nhc2UgIiRNQU5QQUdFX0ZPUk1BVCIgaW4gIyh2aQorKkJTREkqKQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJaWYgdGVzdCBcJGZvcm0gPSBmb3JtYXQgOyB0aGVuCisJCSMgQlNESSBpbnN0YWxscyBvbmx5IC4wIHN1ZmZpeGVzIGluIHRoZSBjYXQgZGlyZWN0b3JpZXMKKwkJY2ZfdGFyZ2V0PSJcYGVjaG8gXCRjZl90YXJnZXR8c2VkIC1lICdzL1wuWzEtOV1cK1thLXpdKi8uMC8nXGAiCisJZmkKK0NGX0VPRgorICA7OworZXNhYworCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlzdWZmaXg9XGBiYXNlbmFtZSBcJGNmX3RhcmdldCB8IHNlZCAtZSAncyVeW14uXSolJSdcYAorCWlmIHRlc3QgXCR2ZXJiID0gaW5zdGFsbGluZyA7IHRoZW4KKwkJZWNobyBcJHZlcmIgXCRjZl90YXJnZXQKKwkJXCRJTlNUQUxMX0RBVEEgXCRUTVAgXCRjZl90YXJnZXQKKwkJdGVzdCAtZCBcJGNmX3N1YmRpclwke3NlY3Rpb259ICYmCisJCXRlc3QgLW4gIlwkYWxpYXNlcyIgJiYgKAorCQkJY2QgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSAmJiAoCisJCQkJY2Zfc291cmNlPVxgZWNobyBcJGNmX3RhcmdldCB8c2VkIC1lICdzJV4uKi9cKFteL11bXi9dKi9bXi9dW14vXSokXCklXDElJ1xgCisJCQkJdGVzdCAtbiAiJGNmX3NvX3N0cmlwIiAmJiBjZl9zb3VyY2U9XGBlY2hvIFwkY2Zfc291cmNlIHxzZWQgLWUgJ3MlXC4kY2Zfc29fc3RyaXBcJCUlJ1xgCisJCQkJY2ZfdGFyZ2V0PVxgYmFzZW5hbWUgXCRjZl90YXJnZXRcYAorCQkJCWZvciBjZl9hbGlhcyBpbiBcJGFsaWFzZXMKKwkJCQlkbworCQkJCQlpZiB0ZXN0IFwkc2VjdGlvbiA9IDEgOyB0aGVuCisJCQkJCQljZl9hbGlhcz1cYGVjaG8gXCRjZl9hbGlhc3xzZWQgIlwke3RyYW5zZm9ybX0iXGAKKwkJCQkJZmkKKworCQkJCQlpZiB0ZXN0ICIkTUFOUEFHRV9TWU1MSU5LUyIgPSB5ZXMgOyB0aGVuCisJCQkJCQlpZiB0ZXN0IC1mIFwkY2ZfYWxpYXNcJHtzdWZmaXh9IDsgdGhlbgorCQkJCQkJCWlmICggY21wIC1zIFwkY2ZfdGFyZ2V0IFwkY2ZfYWxpYXNcJHtzdWZmaXh9ICkKKwkJCQkJCQl0aGVuCisJCQkJCQkJCWNvbnRpbnVlCisJCQkJCQkJZmkKKwkJCQkJCWZpCisJCQkJCQllY2hvIC4uIFwkdmVyYiBhbGlhcyBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQkJcm0gLWYgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJCSRMTl9TIFwkY2ZfdGFyZ2V0IFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCWVsaWYgdGVzdCAiXCRjZl90YXJnZXQiICE9ICJcJGNmX2FsaWFzXCR7c3VmZml4fSIgOyB0aGVuCisJCQkJCQllY2hvICIuc28gXCRjZl9zb3VyY2UiID5cJFRNUAorQ0ZfRU9GCitpZiB0ZXN0IC1uICIkY2ZfY29tcHJlc3MiIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCQkJCQlpZiB0ZXN0IC1uICIkY2Zfc29fc3RyaXAiIDsgdGhlbgorCQkJCQkJCSRjZl9jb21wcmVzcyAtZiBcJFRNUAorCQkJCQkJCW12IFwkVE1QLiRjZl9zb19zdHJpcCBcJFRNUAorCQkJCQkJZmkKK0NGX0VPRgorZmkKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCQkJCQkJZWNobyAuLiBcJHZlcmIgYWxpYXMgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJCXJtIC1mIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCQlcJElOU1RBTExfREFUQSBcJFRNUCBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQlmaQorCQkJCWRvbmUKKwkJCSkKKwkJKQorCWVsaWYgdGVzdCBcJHZlcmIgPSByZW1vdmluZyA7IHRoZW4KKwkJdGVzdCAtZiBcJGNmX3RhcmdldCAmJiAoCisJCQllY2hvIFwkdmVyYiBcJGNmX3RhcmdldAorCQkJcm0gLWYgXCRjZl90YXJnZXQKKwkJKQorCQl0ZXN0IC1kIFwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0gJiYKKwkJdGVzdCAtbiAiXCRhbGlhc2VzIiAmJiAoCisJCQljZCBcJGNmX3N1YmRpclwke3NlY3Rpb259ICYmICgKKwkJCQlmb3IgY2ZfYWxpYXMgaW4gXCRhbGlhc2VzCisJCQkJZG8KKwkJCQkJaWYgdGVzdCBcJHNlY3Rpb24gPSAxIDsgdGhlbgorCQkJCQkJY2ZfYWxpYXM9XGBlY2hvIFwkY2ZfYWxpYXN8c2VkICJcJHt0cmFuc2Zvcm19IlxgCisJCQkJCWZpCisKKwkJCQkJZWNobyAuLiBcJHZlcmIgYWxpYXMgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJcm0gLWYgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQlkb25lCisJCQkpCisJCSkKKwllbHNlCisjCQllY2hvICIuaHkgMCIKKwkJY2F0IFwkVE1QCisJZmkKKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0ICRjZl9pbmJvdGggPSB5ZXMgOyB0aGVuCitpZiB0ZXN0IFwkZm9ybSAhPSBmb3JtYXQgOyB0aGVuCisJc2ggXCQwIGZvcm1hdCBcJHZlcmIgXCRtYW5kaXIgXCRzcmNkaXIgXCQqCitmaQorZmkKKworZXhpdCAwCitDRl9FT0YKK2NobW9kIDc1NSAkY2ZfZWRpdF9tYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMgTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25zIChzdWNoIGFzIGNvbnN0KSBhcmUgbm9ybWFsbHkgZGlzYWJsZWQgYW55d2F5LgorZWNobyAiJGFzX21lOjg5MTY6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggZnVuY3Rpb24gZXh0ZW5zaW9ucyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggZnVuY3Rpb24gZXh0ZW5zaW9ucy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4dC1mdW5jcyBvciAtLWRpc2FibGUtZXh0LWZ1bmNzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2V4dF9mdW5jcytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZXh0X2Z1bmNzIgorICB3aXRoX2V4dF9mdW5jcz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfZXh0X2Z1bmNzPXllcworZmk7CitlY2hvICIkYXNfbWU6ODkyNjogcmVzdWx0OiAkd2l0aF9leHRfZnVuY3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZXh0X2Z1bmNzIiA+JjYKK2lmIHRlc3QgIiR3aXRoX2V4dF9mdW5jcyIgPSB5ZXMgOyB0aGVuCisJTkNVUlNFU19FWFRfRlVOQ1M9MQorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfQ1VSU0VTX1ZFUlNJT04gMQorRU9GCisKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0hBU19LRVkgMQorRU9GCisKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1JFU0laRVRFUk0gMQorRU9GCisKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1JFU0laRV9URVJNIDEKK0VPRgorCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMgMQorRU9GCisKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1dSRVNJWkUgMQorRU9GCisKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTX0VYVF9GVU5DUyAxCitFT0YKKworZWxzZQorCU5DVVJTRVNfRVhUX0ZVTkNTPTAKK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtY29uc3QgdG8gdHVybiBvbiB1c2Ugb2YgY29uc3QgYmV5b25kIHRoYXQgaW4gWFNJLgorZWNobyAiJGFzX21lOjg5NjM6IGNoZWNraW5nIGZvciBleHRlbmRlZCB1c2Ugb2YgY29uc3Qga2V5d29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBleHRlbmRlZCB1c2Ugb2YgY29uc3Qga2V5d29yZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvbnN0IG9yIC0tZGlzYWJsZS1jb25zdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb25zdCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfY29uc3QiCisgIHdpdGhfZXh0X2NvbnN0PSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9leHRfY29uc3Q9bm8KK2ZpOworZWNobyAiJGFzX21lOjg5NzM6IHJlc3VsdDogJHdpdGhfZXh0X2NvbnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2V4dF9jb25zdCIgPiY2CitOQ1VSU0VTX0NPTlNUPScvKm5vdGhpbmcqLycKK2lmIHRlc3QgIiR3aXRoX2V4dF9jb25zdCIgPSB5ZXMgOyB0aGVuCisJTkNVUlNFU19DT05TVD1jb25zdAorZmkKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1leHQtY29sb3JzIHRvIHR1cm4gb24gdXNlIG9mIGNvbG9ycyBiZXlvbmQgMTYuCitlY2hvICIkYXNfbWU6ODk4MTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIGV4dGVuZGVkIGNvbG9ycyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBleHRlbmRlZCBjb2xvcnMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHQtY29sb3JzIG9yIC0tZGlzYWJsZS1leHQtY29sb3JzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2V4dF9jb2xvcnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dF9jb2xvcnMiCisgIHdpdGhfZXh0X2NvbG9ycz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfZXh0X2NvbG9ycz1ubworZmk7CitlY2hvICIkYXNfbWU6ODk5MTogcmVzdWx0OiAkd2l0aF9leHRfY29sb3JzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2V4dF9jb2xvcnMiID4mNgorTkNVUlNFU19FWFRfQ09MT1JTPTAKK2lmIHRlc3QgIiR3aXRoX2V4dF9jb2xvcnMiID0geWVzIDsgdGhlbgorCWlmIHRlc3QgIiR3aXRoX3dpZGVjIiAhPSB5ZXMgOyB0aGVuCisJCXsgeyBlY2hvICIkYXNfbWU6ODk5NjogZXJyb3I6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB3aWRlLWNoYXJhY3RlciBsaWJyYXJ5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB3aWRlLWNoYXJhY3RlciBsaWJyYXJ5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZWxzZQorCQkjIGNhbm5vdCBiZSBBQkkgNSBzaW5jZSBpdCBjaGFuZ2VzIHNpemVvZihjY2hhcl90KQorCitpZiB0ZXN0ICIke3dpdGhfYWJpX3ZlcnNpb24rc2V0fSIgIT0gc2V0OyB0aGVuCisJY2FzZSAkY2ZfY3ZfcmVsX3ZlcnNpb24gaW4KKwk1LiopCisJCWNmX2N2X3JlbF92ZXJzaW9uPTYuMAorCQljZl9jdl9hYmlfdmVyc2lvbj02CisJCXsgZWNobyAiJGFzX21lOjkwMDc6IFdBUk5JTkc6IE92ZXJyaWRpbmcgQUJJIHZlcnNpb24gdG8gJGNmX2N2X2FiaV92ZXJzaW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogT3ZlcnJpZGluZyBBQkkgdmVyc2lvbiB0byAkY2ZfY3ZfYWJpX3ZlcnNpb24iID4mMjt9CisJCTs7CisJZXNhYworZmkKKworCWZpCisJTkNVUlNFU19FWFRfQ09MT1JTPTEKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTX0VYVF9DT0xPUlMgMQorRU9GCisKK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtZXh0LW1vdXNlIHRvIG1vZGlmeSBjb2RpbmcgdG8gc3VwcG9ydCA1LWJ1dHRvbiBtaWNlCitlY2hvICIkYXNfbWU6OTAyMjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIGV4dGVuZGVkIG1vdXNlIGVuY29kaW5nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIGV4dGVuZGVkIG1vdXNlIGVuY29kaW5nLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0LW1vdXNlIG9yIC0tZGlzYWJsZS1leHQtbW91c2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZXh0X21vdXNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9leHRfbW91c2UiCisgIHdpdGhfZXh0X21vdXNlPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9leHRfbW91c2U9bm8KK2ZpOworZWNobyAiJGFzX21lOjkwMzI6IHJlc3VsdDogJHdpdGhfZXh0X21vdXNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2V4dF9tb3VzZSIgPiY2CitOQ1VSU0VTX01PVVNFX1ZFUlNJT049MQoraWYgdGVzdCAiJHdpdGhfZXh0X21vdXNlIiA9IHllcyA7IHRoZW4KKwlOQ1VSU0VTX01PVVNFX1ZFUlNJT049MgorCitpZiB0ZXN0ICIke3dpdGhfYWJpX3ZlcnNpb24rc2V0fSIgIT0gc2V0OyB0aGVuCisJY2FzZSAkY2ZfY3ZfcmVsX3ZlcnNpb24gaW4KKwk1LiopCisJCWNmX2N2X3JlbF92ZXJzaW9uPTYuMAorCQljZl9jdl9hYmlfdmVyc2lvbj02CisJCXsgZWNobyAiJGFzX21lOjkwNDM6IFdBUk5JTkc6IE92ZXJyaWRpbmcgQUJJIHZlcnNpb24gdG8gJGNmX2N2X2FiaV92ZXJzaW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogT3ZlcnJpZGluZyBBQkkgdmVyc2lvbiB0byAkY2ZfY3ZfYWJpX3ZlcnNpb24iID4mMjt9CisJCTs7CisJZXNhYworZmkKKworZmkKKworZWNobyAiJGFzX21lOjkwNTE6IGNoZWNraW5nIGlmIHlvdSB3YW50IFwkTkNVUlNFU19OT19QQURESU5HIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBcJE5DVVJTRVNfTk9fUEFERElORyBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbm8tcGFkZGluZyBvciAtLWRpc2FibGUtbm8tcGFkZGluZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub19wYWRkaW5nK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ub19wYWRkaW5nIgorICB3aXRoX25vX3BhZGRpbmc9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX25vX3BhZGRpbmc9JHdpdGhfZXh0X2Z1bmNzCitmaTsKK2VjaG8gIiRhc19tZTo5MDYxOiByZXN1bHQ6ICR3aXRoX25vX3BhZGRpbmciID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfbm9fcGFkZGluZyIgPiY2Cit0ZXN0ICIkd2l0aF9ub19wYWRkaW5nIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTX05PX1BBRERJTkcgMQorRU9GCisKK2VjaG8gIiRhc19tZTo5MDY3OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkwNzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTA4MTogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6OTA4NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkxMDkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkxMjcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICA6CitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkxNDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorICAgICAgICAgICAgICAgICAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisgICAgICAgIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgJGFjX21haW5fcmV0dXJuKDIpOworICAkYWNfbWFpbl9yZXR1cm4gKDApOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjkxNzQ6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkxNzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjkxNzk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MTgyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitmaQorZWNobyAiJGFzX21lOjkxOTU6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTVERDX0hFQURFUlMgMQorRU9GCisKK2ZpCisKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorICAgICAgICAgICAgICAgICAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOjkyMTE6IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTIxNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjkyMjM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkyMjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTIyOTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkyMzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6OTI0MjogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitFT0YKKworZmkKK2RvbmUKKworZWNobyAiJGFzX21lOjkyNTI6IGNoZWNraW5nIGZvciBzaWduZWQgY2hhciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaWduZWQgY2hhci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaWduZWRfY2hhcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkyNTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChzaWduZWQgY2hhciAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKHNpZ25lZCBjaGFyKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjkyNzM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkyNzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTI3OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkyODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX3NpZ25lZF9jaGFyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl90eXBlX3NpZ25lZF9jaGFyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjkyOTI6IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmVkX2NoYXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2lnbmVkX2NoYXIiID4mNgorCitlY2hvICIkYXNfbWU6OTI5NTogY2hlY2tpbmcgc2l6ZSBvZiBzaWduZWQgY2hhciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2Ygc2lnbmVkIGNoYXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaWduZWRfY2hhciIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTMwNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpbnQgX2FycmF5XyBbMSAtIDIgKiAhKChzaXplb2YgKHNpZ25lZCBjaGFyKSkgPj0gMCldCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjkzMTY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkzMTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTMyMjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkzMjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5MzMwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2ludCBfYXJyYXlfIFsxIC0gMiAqICEoKHNpemVvZiAoc2lnbmVkIGNoYXIpKSA8PSAkYWNfbWlkKV0KKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTM0MjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTM0NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5MzQ4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTM1MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2xvPWBleHByICRhY19taWQgKyAxYDsgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTM2NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpbnQgX2FycmF5XyBbMSAtIDIgKiAhKChzaXplb2YgKHNpZ25lZCBjaGFyKSkgPj0gJGFjX21pZCldCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjkzNzk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkzODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTM4NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkzODg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19oaT1gZXhwciAkYWNfbWlkIC0gMWA7IGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDk0MDQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaW50IF9hcnJheV8gWzEgLSAyICogISgoc2l6ZW9mIChzaWduZWQgY2hhcikpIDw9ICRhY19taWQpXQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5NDE2OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NDE5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk0MjI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NDI1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0kYWNfbG8KK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTo5NDM4OiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDk0NDMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKK2lmICghZikKKyAgJGFjX21haW5fcmV0dXJuICgxKTsKK2ZwcmludGYgKGYsICIlZCIsIChzaXplb2YgKHNpZ25lZCBjaGFyKSkpOworZmNsb3NlIChmKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5NDU5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NDYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5NDY0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTQ2NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9zaWduZWRfY2hhcj1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTAKK2ZpCitmaQorZWNobyAiJGFzX21lOjk0ODM6IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaWduZWRfY2hhciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyIiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgU0laRU9GX1NJR05FRF9DSEFSICRhY19jdl9zaXplb2Zfc2lnbmVkX2NoYXIKK0VPRgorCitpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyIiA9IDEgOyB0aGVuCisJTkNVUlNFU19TQk9PTD0ic2lnbmVkIGNoYXIiCitlbHNlCisJTkNVUlNFU19TQk9PTD0iY2hhciIKK2ZpCitlY2hvICIkYXNfbWU6OTQ5NDogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIHNpZ25lZCBCb29sZWFuIGFycmF5IGluIHRlcm0uaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBzaWduZWQgQm9vbGVhbiBhcnJheSBpbiB0ZXJtLmguLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWduZWQtY2hhciBvciAtLWRpc2FibGUtc2lnbmVkLWNoYXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lnbmVkX2NoYXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3NpZ25lZF9jaGFyIgorICB3aXRoX3NpZ25lZF9jaGFyPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9zaWduZWRfY2hhcj1ubworZmk7CitlY2hvICIkYXNfbWU6OTUwNDogcmVzdWx0OiAkd2l0aF9zaWduZWRfY2hhciIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9zaWduZWRfY2hhciIgPiY2Cit0ZXN0ICIkd2l0aF9zaWduZWRfY2hhciIgIT0geWVzICYmIE5DVVJTRVNfU0JPT0w9ImNoYXIiCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtc2lnd2luY2ggdG8gdHVybiBvbiB1c2Ugb2YgU0lHV0lOQ0ggbG9naWMKK2VjaG8gIiRhc19tZTo5NTA5OiBjaGVja2luZyBpZiB5b3Ugd2FudCBTSUdXSU5DSCBoYW5kbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgU0lHV0lOQ0ggaGFuZGxlci4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpZ3dpbmNoIG9yIC0tZGlzYWJsZS1zaWd3aW5jaCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWd3aW5jaCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc2lnd2luY2giCisgIHdpdGhfc2lnd2luY2g9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3NpZ3dpbmNoPSR3aXRoX2V4dF9mdW5jcworZmk7CitlY2hvICIkYXNfbWU6OTUxOTogcmVzdWx0OiAkd2l0aF9zaWd3aW5jaCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9zaWd3aW5jaCIgPiY2Cit0ZXN0ICIkd2l0aF9zaWd3aW5jaCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1NJR1dJTkNIIDEKK0VPRgorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLXRjYXAtbmFtZXMgdG8gYWxsb3cgdXNlciB0byBkZWZpbmUgbmV3IGNhcGFiaWxpdGllcworZWNobyAiJGFzX21lOjk1MjY6IGNoZWNraW5nIGlmIHlvdSB3YW50IHVzZXItZGVmaW5hYmxlIHRlcm1pbmFsIGNhcGFiaWxpdGllcyBsaWtlIHRlcm1jYXAiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB1c2VyLWRlZmluYWJsZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgbGlrZSB0ZXJtY2FwLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGNhcC1uYW1lcyBvciAtLWRpc2FibGUtdGNhcC1uYW1lcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90Y2FwX25hbWVzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV90Y2FwX25hbWVzIgorICB3aXRoX3RjYXBfbmFtZXM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3RjYXBfbmFtZXM9JHdpdGhfZXh0X2Z1bmNzCitmaTsKK2VjaG8gIiRhc19tZTo5NTM2OiByZXN1bHQ6ICR3aXRoX3RjYXBfbmFtZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfdGNhcF9uYW1lcyIgPiY2CitOQ1VSU0VTX1hOQU1FUz0wCit0ZXN0ICIkd2l0aF90Y2FwX25hbWVzIiA9IHllcyAmJiBOQ1VSU0VTX1hOQU1FUz0xCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlc2Ugb3B0aW9ucyBhcmUgcmVsYXRpdmVseSBzYWZlIHRvIGV4cGVyaW1lbnQgd2l0aC4KKworZWNobyAiJGFzX21lOjk1NDQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IGFsbCBkZXZlbG9wbWVudCBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgYWxsIGRldmVsb3BtZW50IGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGV2ZWxvcCBvciAtLXdpdGhvdXQtZGV2ZWxvcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGV2ZWxvcCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9kZXZlbG9wIgorICB3aXRoX2RldmVsb3A9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9kZXZlbG9wPW5vCitmaTsKK2VjaG8gIiRhc19tZTo5NTU0OiByZXN1bHQ6ICR3aXRoX2RldmVsb3AiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZGV2ZWxvcCIgPiY2CisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtaGFyZC10YWJzIHRvIHR1cm4gb24gdXNlIG9mIGhhcmQtdGFicyBvcHRpbWl6ZQorZWNobyAiJGFzX21lOjk1NTg6IGNoZWNraW5nIGlmIHlvdSB3YW50IGhhcmQtdGFicyBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgaGFyZC10YWJzIGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1oYXJkLXRhYnMgb3IgLS1kaXNhYmxlLWhhcmQtdGFicyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9oYXJkX3RhYnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2hhcmRfdGFicyIKKworZWxzZQorICBlbmFibGVfaGFyZF90YWJzPSR3aXRoX2RldmVsb3AKK2ZpOworZWNobyAiJGFzX21lOjk1Njg6IHJlc3VsdDogJGVuYWJsZV9oYXJkX3RhYnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9oYXJkX3RhYnMiID4mNgordGVzdCAiJGVuYWJsZV9oYXJkX3RhYnMiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9IQVJEX1RBQlMgMQorRU9GCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUteG1jLWdsaXRjaCB0byB0dXJuIG9uIHVzZSBvZiBtYWdpYy1jb29raWUgb3B0aW1pemUKK2VjaG8gIiRhc19tZTo5NTc1OiBjaGVja2luZyBpZiB5b3Ugd2FudCBsaW1pdGVkIHN1cHBvcnQgZm9yIHhtYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGxpbWl0ZWQgc3VwcG9ydCBmb3IgeG1jLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUteG1jLWdsaXRjaCBvciAtLWRpc2FibGUteG1jLWdsaXRjaCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV94bWNfZ2xpdGNoK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV94bWNfZ2xpdGNoIgorCitlbHNlCisgIGVuYWJsZV94bWNfZ2xpdGNoPSR3aXRoX2RldmVsb3AKK2ZpOworZWNobyAiJGFzX21lOjk1ODU6IHJlc3VsdDogJGVuYWJsZV94bWNfZ2xpdGNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfeG1jX2dsaXRjaCIgPiY2Cit0ZXN0ICIkZW5hYmxlX3htY19nbGl0Y2giID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9YTUNfU1VQUE9SVCAxCitFT0YKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGVzZSBhcmUganVzdCBleHBlcmltZW50YWwsIHByb2JhYmx5IHNob3VsZCBub3QgYmUgaW4gYSBwYWNrYWdlOgorCitlY2hvICIkYXNfbWU6OTU5NDogY2hlY2tpbmcgaWYgeW91IGRvIG5vdCB3YW50IHRvIGFzc3VtZSBjb2xvcnMgYXJlIHdoaXRlLW9uLWJsYWNrIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IGRvIG5vdCB3YW50IHRvIGFzc3VtZSBjb2xvcnMgYXJlIHdoaXRlLW9uLWJsYWNrLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXNzdW1lZC1jb2xvciBvciAtLWRpc2FibGUtYXNzdW1lZC1jb2xvciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc3N1bWVkX2NvbG9yK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9hc3N1bWVkX2NvbG9yIgorICB3aXRoX2Fzc3VtZWRfY29sb3I9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2Fzc3VtZWRfY29sb3I9eWVzCitmaTsKK2VjaG8gIiRhc19tZTo5NjA0OiByZXN1bHQ6ICR3aXRoX2Fzc3VtZWRfY29sb3IiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYXNzdW1lZF9jb2xvciIgPiY2Cit0ZXN0ICIkd2l0aF9hc3N1bWVkX2NvbG9yIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfQVNTVU1FRF9DT0xPUiAxCitFT0YKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1oYXNobWFwIHRvIHR1cm4gb24gdXNlIG9mIGhhc2htYXAgc2Nyb2xsaW5nIGxvZ2ljCitlY2hvICIkYXNfbWU6OTYxMTogY2hlY2tpbmcgaWYgeW91IHdhbnQgaGFzaG1hcCBzY3JvbGxpbmctb3B0aW1pemF0aW9uIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBoYXNobWFwIHNjcm9sbGluZy1vcHRpbWl6YXRpb24gY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWhhc2htYXAgb3IgLS1kaXNhYmxlLWhhc2htYXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaGFzaG1hcCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfaGFzaG1hcCIKKyAgd2l0aF9oYXNobWFwPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9oYXNobWFwPXllcworZmk7CitlY2hvICIkYXNfbWU6OTYyMTogcmVzdWx0OiAkd2l0aF9oYXNobWFwIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2hhc2htYXAiID4mNgordGVzdCAiJHdpdGhfaGFzaG1hcCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0hBU0hNQVAgMQorRU9GCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtY29sb3JmZ2JnIHRvIHR1cm4gb24gdXNlIG9mICRDT0xPUkZHQkcgZW52aXJvbm1lbnQKK2VjaG8gIiRhc19tZTo5NjI4OiBjaGVja2luZyBpZiB5b3Ugd2FudCBjb2xvcmZnYmcgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGNvbG9yZmdiZyBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29sb3JmZ2JnIG9yIC0tZGlzYWJsZS1jb2xvcmZnYmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY29sb3JmZ2JnK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9jb2xvcmZnYmciCisgIHdpdGhfY29sb3JmZ2JnPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9jb2xvcmZnYmc9bm8KK2ZpOworZWNobyAiJGFzX21lOjk2Mzg6IHJlc3VsdDogJHdpdGhfY29sb3JmZ2JnIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2NvbG9yZmdiZyIgPiY2Cit0ZXN0ICIkd2l0aF9jb2xvcmZnYmciID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9DT0xPUkZHQkcgMQorRU9GCisKKyMgVGhpcyBpcyBzdGlsbCBleHBlcmltZW50YWwgKDIwMDgwMzI5KSwgYnV0IHNob3VsZCB1bHRpbWF0ZWx5IGJlIG1vdmVkIHRvCisjIHRoZSBzY3JpcHQtYmxvY2sgLS13aXRoLW5vcm1hbCwgZXRjLgorCitlY2hvICIkYXNfbWU6OTY0NzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggdGhlIHB0aHJlYWQgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wdGhyZWFkIG9yIC0td2l0aG91dC1wdGhyZWFkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wdGhyZWFkK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3B0aHJlYWQiCisgIHdpdGhfcHRocmVhZD0kd2l0aHZhbAorZWxzZQorICB3aXRoX3B0aHJlYWQ9bm8KK2ZpOworZWNobyAiJGFzX21lOjk2NTc6IHJlc3VsdDogJHdpdGhfcHRocmVhZCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9wdGhyZWFkIiA+JjYKKworaWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgIT0gbm8gOyB0aGVuCisgICAgZWNobyAiJGFzX21lOjk2NjE6IGNoZWNraW5nIGZvciBwdGhyZWFkLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcHRocmVhZC5oLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcHRocmVhZF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTY2NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5NjcxOiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTo5Njc3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9wdGhyZWFkX2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9oZWFkZXJfcHRocmVhZF9oPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6OTY5NjogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcHRocmVhZF9oID0geWVzOyB0aGVuCisKKyAgICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9QVEhSRUFEU19IIDEKK0VPRgorCisgICAgICAgIGVjaG8gIiRhc19tZTo5NzA0OiBjaGVja2luZyBpZiB3ZSBjYW4gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkuLi4gJEVDSE9fQyIgPiY2CisgICAgICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9Ii1scHRocmVhZCAkTElCUyIKKyAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5NzA5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworaW50CittYWluICgpCit7CisKKyAgICAgICAgaW50IHJjID0gcHRocmVhZF9jcmVhdGUoMCwwLDAsMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjk3MjU6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjk3Mjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5NzMxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTczNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIHdpdGhfcHRocmVhZD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQord2l0aF9wdGhyZWFkPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorICAgICAgICBlY2hvICIkYXNfbWU6OTc0NDogcmVzdWx0OiAkd2l0aF9wdGhyZWFkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3B0aHJlYWQiID4mNgorCisgICAgICAgIGlmIHRlc3QgIiR3aXRoX3B0aHJlYWQiID0geWVzIDsgdGhlbgorICAgICAgICAgICAgTElCUz0iLWxwdGhyZWFkICRMSUJTIgorICAgICAgICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJQVEhSRUFEUyAxCitFT0YKKworICAgICAgICBlbHNlCisgICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOjk3NTQ6IGVycm9yOiBDYW5ub3QgbGluayB3aXRoIHB0aHJlYWQgbGlicmFyeSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgbGluayB3aXRoIHB0aHJlYWQgbGlicmFyeSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBmaQorCitmaQorCitmaQorCitlY2hvICIkYXNfbWU6OTc2MzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIHdlYWstc3ltYm9scyBmb3IgcHRocmVhZHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2Ugd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdlYWstc3ltYm9scyBvciAtLWRpc2FibGUtd2Vhay1zeW1ib2xzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3dlYWtfc3ltYm9scytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd2Vha19zeW1ib2xzIgorICB1c2Vfd2Vha19zeW1ib2xzPSR3aXRodmFsCitlbHNlCisgIHVzZV93ZWFrX3N5bWJvbHM9bm8KK2ZpOworZWNobyAiJGFzX21lOjk3NzM6IHJlc3VsdDogJHVzZV93ZWFrX3N5bWJvbHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHVzZV93ZWFrX3N5bWJvbHMiID4mNgoraWYgdGVzdCAiJHVzZV93ZWFrX3N5bWJvbHMiID0geWVzIDsgdGhlbgorCitlY2hvICIkYXNfbWU6OTc3NzogY2hlY2tpbmcgaWYgJENDIHN1cHBvcnRzIHdlYWsgc3ltYm9scyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRDQyBzdXBwb3J0cyB3ZWFrIHN5bWJvbHMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3dlYWtfc3ltYm9scytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDk3ODQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGlmIGRlZmluZWQgX19VU0VfSVNPQzk5CisjICAgIGRlZmluZSBfY2F0X3ByYWdtYShleHApCV9QcmFnbWEoI2V4cCkKKyMgICAgZGVmaW5lIF93ZWFrX3ByYWdtYShleHApCV9jYXRfcHJhZ21hKHdlYWsgbmFtZSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF93ZWFrX3ByYWdtYShleHApCisjICBlbmRpZgorIyAgZGVmaW5lIF9kZWNsYXJlKG5hbWUpCV9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9fdHlwZW9mX18obmFtZSkgbmFtZQorIyAgZGVmaW5lIHdlYWtfc3ltYm9sKG5hbWUpCV93ZWFrX3ByYWdtYShuYW1lKSBfZGVjbGFyZShuYW1lKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKyNlbmRpZgorCit3ZWFrX3N5bWJvbChmb3Blbik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTgxMDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTgxMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5ODE2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTgxOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3dlYWtfc3ltYm9scz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfd2Vha19zeW1ib2xzPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6OTgzMDogcmVzdWx0OiAkY2ZfY3Zfd2Vha19zeW1ib2xzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl93ZWFrX3N5bWJvbHMiID4mNgorCitlbHNlCisgICAgY2ZfY3Zfd2Vha19zeW1ib2xzPW5vCitmaQorCitpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1dFQUtfU1lNQk9MUyAxCitFT0YKKworZmkKKworUFRIUkVBRD0KK2lmIHRlc3QgIiR3aXRoX3B0aHJlYWQiID0gInllcyIgOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1BUSFJFQURTIDEKK0VPRgorCisgICAgZW5hYmxlX3JlZW50cmFudD15ZXMKKyAgICBpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisgICAgICAgIFBUSFJFQUQ9LWxwdGhyZWFkCisgICAgZmkKK2ZpCisKKyMgUmVlbnRyYW50IGNvZGUgaGFzIHRvIGJlIG9wYXF1ZTsgdGhlcmUncyBsaXR0bGUgYWR2YW50YWdlIHRvIG1ha2luZyBuY3Vyc2VzCisjIG9wYXF1ZSBvdXRzaWRlIG9mIHRoYXQsIHNvIHRoZXJlIGlzIG5vIC0tZW5hYmxlLW9wYXF1ZSBvcHRpb24uICBXZSBjYW4gdXNlCisjIHRoaXMgb3B0aW9uIHdpdGhvdXQgLS13aXRoLXB0aHJlYWRzLCBidXQgdGhpcyB3aWxsIGJlIGFsd2F5cyBzZXQgZm9yCisjIHB0aHJlYWRzLgorZWNobyAiJGFzX21lOjk4NjA6IGNoZWNraW5nIGlmIHlvdSB3YW50IGV4cGVyaW1lbnRhbCByZWVudHJhbnQgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGV4cGVyaW1lbnRhbCByZWVudHJhbnQgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlZW50cmFudCBvciAtLWRpc2FibGUtcmVlbnRyYW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JlZW50cmFudCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfcmVlbnRyYW50IgorICB3aXRoX3JlZW50cmFudD0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfcmVlbnRyYW50PW5vCitmaTsKK2VjaG8gIiRhc19tZTo5ODcwOiByZXN1bHQ6ICR3aXRoX3JlZW50cmFudCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9yZWVudHJhbnQiID4mNgoraWYgdGVzdCAiJHdpdGhfcmVlbnRyYW50IiA9IHllcyA7IHRoZW4KKwljZl9jdl9lbmFibGVfcmVlbnRyYW50PTEKKwljZl9jdl9lbmFibGVfb3BhcXVlPSJOQ1VSU0VTX0lOVEVSTkFMUyIKKwlOQ1VSU0VTX09QQVFVRT0xCisJTkNVUlNFU19TSVpFX1Q9aW50CisgICAgaWYgdGVzdCAkY2ZfY3Zfd2Vha19zeW1ib2xzID0geWVzIDsgdGhlbgorCisjIHJlbW92ZSBwdGhyZWFkIGxpYnJhcnkgZnJvbSAkTElCUworTElCUz1gZWNobyAiJExJQlMiIHwgc2VkIC1lICdzLy1scHRocmVhZFsgCV0vL2cnIC1lICdzLy1scHRocmVhZCQvLydgCisKKyAgICBlbHNlCisgICAgICAgIExJQl9TVUZGSVg9InQke0xJQl9TVUZGSVh9IgorICAgIGZpCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1JFRU5UUkFOVCAxCitFT0YKKworaWYgdGVzdCAiJHt3aXRoX2FiaV92ZXJzaW9uK3NldH0iICE9IHNldDsgdGhlbgorCWNhc2UgJGNmX2N2X3JlbF92ZXJzaW9uIGluCisJNS4qKQorCQljZl9jdl9yZWxfdmVyc2lvbj02LjAKKwkJY2ZfY3ZfYWJpX3ZlcnNpb249NgorCQl7IGVjaG8gIiRhc19tZTo5ODk0OiBXQVJOSU5HOiBPdmVycmlkaW5nIEFCSSB2ZXJzaW9uIHRvICRjZl9jdl9hYmlfdmVyc2lvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IE92ZXJyaWRpbmcgQUJJIHZlcnNpb24gdG8gJGNmX2N2X2FiaV92ZXJzaW9uIiA+JjI7fQorCQk7OworCWVzYWMKK2ZpCisKK2Vsc2UKKwljZl9jdl9lbmFibGVfcmVlbnRyYW50PTAKKwljZl9jdl9lbmFibGVfb3BhcXVlPSJOQ1VSU0VTX09QQVFVRSIKKwlOQ1VSU0VTX09QQVFVRT0wCisJTkNVUlNFU19TSVpFX1Q9c2hvcnQKK2ZpCisKK2VjaG8gIiRhc19tZTo5OTA3OiBjaGVja2luZyBpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgc2FmZS1zcHJpbnRmIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgc2FmZS1zcHJpbnRmIGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zYWZlLXNwcmludGYgb3IgLS1kaXNhYmxlLXNhZmUtc3ByaW50ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zYWZlX3NwcmludGYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3NhZmVfc3ByaW50ZiIKKyAgd2l0aF9zYWZlX3NwcmludGY9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3NhZmVfc3ByaW50Zj1ubworZmk7CitlY2hvICIkYXNfbWU6OTkxNzogcmVzdWx0OiAkd2l0aF9zYWZlX3NwcmludGYiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfc2FmZV9zcHJpbnRmIiA+JjYKK3Rlc3QgIiR3aXRoX3NhZmVfc3ByaW50ZiIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1NBRkVfU1BSSU5URiAxCitFT0YKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtc2Nyb2xsLWhpbnRzIHRvIHR1cm4gb2ZmIHVzZSBvZiBzY3JvbGwtaGludHMgc2Nyb2xsaW5nIGxvZ2ljCisjIHdoZW4gaGFzaG1hcCBpcyB1c2VkIHNjcm9sbCBoaW50cyBhcmUgdXNlbGVzcworaWYgdGVzdCAiJHdpdGhfaGFzaG1hcCIgPSBubyA7IHRoZW4KK2VjaG8gIiRhc19tZTo5OTI2OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGhvdXQgc2Nyb2xsaW5nLWhpbnRzIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGhvdXQgc2Nyb2xsaW5nLWhpbnRzIGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zY3JvbGwtaGludHMgb3IgLS1kaXNhYmxlLXNjcm9sbC1oaW50cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zY3JvbGxfaGludHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3Njcm9sbF9oaW50cyIKKyAgd2l0aF9zY3JvbGxfaGludHM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3Njcm9sbF9oaW50cz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjk5MzY6IHJlc3VsdDogJHdpdGhfc2Nyb2xsX2hpbnRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3Njcm9sbF9oaW50cyIgPiY2Cit0ZXN0ICIkd2l0aF9zY3JvbGxfaGludHMiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9TQ1JPTExfSElOVFMgMQorRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZTo5OTQ0OiBjaGVja2luZyBpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgd2dldGNoLWV2ZW50cyBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHdnZXRjaC1ldmVudHMgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdnZXRjaC1ldmVudHMgb3IgLS1kaXNhYmxlLXdnZXRjaC1ldmVudHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2dldGNoX2V2ZW50cytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd2dldGNoX2V2ZW50cyIKKyAgd2l0aF93Z2V0Y2hfZXZlbnRzPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF93Z2V0Y2hfZXZlbnRzPW5vCitmaTsKK2VjaG8gIiRhc19tZTo5OTU0OiByZXN1bHQ6ICR3aXRoX3dnZXRjaF9ldmVudHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfd2dldGNoX2V2ZW50cyIgPiY2Cit0ZXN0ICIkd2l0aF93Z2V0Y2hfZXZlbnRzIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMgMQorRU9GCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjCXVzZSBvcHRpb24gLS1kaXNhYmxlLWVjaG8gdG8gc3VwcHJlc3MgZnVsbCBkaXNwbGF5IGNvbXBpbGluZyBjb21tYW5kcworZWNobyAiJGFzX21lOjk5NjM6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgZnVsbCBjb21tYW5kcyBkdXJpbmcgYnVpbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGZ1bGwgY29tbWFuZHMgZHVyaW5nIGJ1aWxkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWNobyBvciAtLWRpc2FibGUtZWNobyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lY2hvK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9lY2hvIgorICB3aXRoX2VjaG89JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2VjaG89eWVzCitmaTsKK2lmIHRlc3QgIiR3aXRoX2VjaG8iID0geWVzOyB0aGVuCisJRUNIT19MSU5LPQorZWxzZQorCUVDSE9fTElOSz0nQCBlY2hvIGxpbmtpbmcgJEAgLi4uIDsnCisJdGVzdCAtbiAiJExJQlRPT0wiICYmIExJQlRPT0w9IiRMSUJUT09MIC0tc2lsZW50IgorCXRlc3QgLW4gIiRMSUJUT09MX0NYWCIgJiYgTElCVE9PTF9DWFg9IiRMSUJUT09MX0NYWCAtLXNpbGVudCIKK2ZpCitlY2hvICIkYXNfbWU6OTk4MDogcmVzdWx0OiAkd2l0aF9lY2hvIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2VjaG8iID4mNgorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS13YXJuaW5ncyB0byB0dXJuIG9uIGFsbCBnY2Mgd2FybmluZ3MKK2VjaG8gIiRhc19tZTo5OTg0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBzZWUgY29tcGlsZXIgd2FybmluZ3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBzZWUgY29tcGlsZXIgd2FybmluZ3MuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS13YXJuaW5ncyBvciAtLWRpc2FibGUtd2FybmluZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2FybmluZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3dhcm5pbmdzIgorICB3aXRoX3dhcm5pbmdzPSRlbmFibGV2YWwKK2ZpOworZWNobyAiJGFzX21lOjk5OTI6IHJlc3VsdDogJHdpdGhfd2FybmluZ3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfd2FybmluZ3MiID4mNgorCitpZiB0ZXN0ICJ4JHdpdGhfd2FybmluZ3MiID0gInh5ZXMiOyB0aGVuCisgCUFEQUZMQUdTPSIkQURBRkxBR1MgLWduYXRnIgorCitJTlRFTF9DT01QSUxFUj1ubworCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwljYXNlICRob3N0X29zIGluCisJbGludXgqfGdudSopCisJCWVjaG8gIiRhc19tZToxMDAwMzogY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgQyBjb21waWxlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoaXMgaXMgcmVhbGx5IEludGVsIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CisJCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCQlDRkxBR1M9IiRDRkxBR1MgLW5vLWdjYyIKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDAwOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorI2Vsc2UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMDI1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDAyODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDAzMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMDM0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgSU5URUxfQ09NUElMRVI9eWVzCitjZl9zYXZlX0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIC13ZTE0NyAtbm8tZ2NjIgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCWVjaG8gIiRhc19tZToxMDA0NTogcmVzdWx0OiAkSU5URUxfQ09NUElMRVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JElOVEVMX0NPTVBJTEVSIiA+JjYKKwkJOzsKKwllc2FjCitmaQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMDA1MiAiJHthc19tZS1jb25maWd1cmV9IgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeyByZXR1cm4gKGFyZ3ZbYXJnYy0xXSA9PSAwKSA7IH0KK0VPRgorCitpZiB0ZXN0ICIkSU5URUxfQ09NUElMRVIiID0geWVzCit0aGVuCisjIFRoZSAiLXdkWFhYIiBvcHRpb25zIHN1cHByZXNzIHdhcm5pbmdzOgorIyByZW1hcmsgIzE0MTk6IGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKKyMgcmVtYXJrICMxNjgyOiBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODM6IGV4cGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4NDogY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxOTM6IHplcm8gdXNlZCBmb3IgdW5kZWZpbmVkIHByZXByb2Nlc3NpbmcgaWRlbnRpZmllcgorIyByZW1hcmsgIzU5MzogdmFyaWFibGUgImN1cnNfc2JfbGVmdF9hcnJvdyIgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorIyByZW1hcmsgIzgxMDogY29udmVyc2lvbiBmcm9tICJpbnQiIHRvICJEaW1lbnNpb249e3Vuc2lnbmVkIHNob3J0fSIgbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworIyByZW1hcmsgIzg2OTogcGFyYW1ldGVyICJ0dyIgd2FzIG5ldmVyIHJlZmVyZW5jZWQKKyMgcmVtYXJrICM5ODE6IG9wZXJhbmRzIGFyZSBldmFsdWF0ZWQgaW4gdW5zcGVjaWZpZWQgb3JkZXIKKyMgd2FybmluZyAjMjY5OiBpbnZhbGlkIGZvcm1hdCBzdHJpbmcgY29udmVyc2lvbgorCisJeyBlY2hvICIkYXNfbWU6MTAwNzA6IGNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zLi4uIiA+JjUKK2VjaG8gIiRhc19tZTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNjt9CisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItV2FsbCIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJd2QxNDE5IFwKKwkJd2QxNjgyIFwKKwkJd2QxNjgzIFwKKwkJd2QxNjg0IFwKKwkJd2QxOTMgXAorCQl3ZDI3OSBcCisJCXdkNTkzIFwKKwkJd2Q4MTAgXAorCQl3ZDg2OSBcCisJCXdkOTgxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAwODc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMDkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYXNfbWU6MTAwOTI6IHJlc3VsdDogLi4uIC0kY2Zfb3B0IiA+JjUKK2VjaG8gIiR7RUNIT19UfS4uLiAtJGNmX29wdCIgPiY2CisJCQlFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCitlbGlmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJeyBlY2hvICIkYXNfbWU6MTAxMDE6IGNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zLi4uIiA+JjUKK2VjaG8gIiRhc19tZTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNjt9CisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItVyAtV2FsbCIKKwljZl93YXJuX0NPTlNUPSIiCisJdGVzdCAiJHdpdGhfZXh0X2NvbnN0IiA9IHllcyAmJiBjZl93YXJuX0NPTlNUPSJXd3JpdGUtc3RyaW5ncyIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJV2JhZC1mdW5jdGlvbi1jYXN0IFwKKwkJV2Nhc3QtYWxpZ24gXAorCQlXY2FzdC1xdWFsIFwKKwkJV2lubGluZSBcCisJCVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBcCisJCVdtaXNzaW5nLXByb3RvdHlwZXMgXAorCQlXbmVzdGVkLWV4dGVybnMgXAorCQlXcG9pbnRlci1hcml0aCBcCisJCVdzaGFkb3cgXAorCQlXc3RyaWN0LXByb3RvdHlwZXMgXAorCQlXdW5kZWYgJGNmX3dhcm5fQ09OU1QgV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCBXZXh0cmEgV25vLXVua25vd24tcHJhZ21hcyBXc3dpdGNoLWVudW0KKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDEyMTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAxMjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhc19tZToxMDEyNjogcmVzdWx0OiAuLi4gLSRjZl9vcHQiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uIC0kY2Zfb3B0IiA+JjYKKwkJCWNhc2UgJGNmX29wdCBpbiAjKHZpCisJCQlXY2FzdC1xdWFsKSAjKHZpCisJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRFhUU1RSSU5HREVGSU5FUyIKKwkJCQk7OworCQkJV2lubGluZSkgIyh2aQorCQkJCWNhc2UgJEdDQ19WRVJTSU9OIGluCisJCQkJWzM0XS4qKQorCQkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04iIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjEwMTM3OiB0ZXN0aW5nIGZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04gLi4uIiAxPiY1CisKKwkJCQkJY29udGludWU7OworCQkJCWVzYWMKKwkJCQk7OworCQkJZXNhYworCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCWlmIHRlc3QgIiRjZl93aXRoX2N4eCIgPSB5ZXMgOyB0aGVuCisKK0lOVEVMX0NQTFVTUExVUz1ubworCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwljYXNlICRob3N0X29zIGluCisJbGludXgqfGdudSopCisJCWVjaG8gIiRhc19tZToxMDE1NzogY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgQysrIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgQysrIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgorCQljZl9zYXZlX0NGTEFHUz0iJENYWEZMQUdTIgorCQlDWFhGTEFHUz0iJENYWEZMQUdTIC1uby1nY2MiCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTAxNjIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDE3OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAxODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAxODU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDE4ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIElOVEVMX0NQTFVTUExVUz15ZXMKK2NmX3NhdmVfQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgLXdlMTQ3IC1uby1nY2MiCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlDWFhGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCQllY2hvICIkYXNfbWU6MTAxOTk6IHJlc3VsdDogJElOVEVMX0NQTFVTUExVUyIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5URUxfQ1BMVVNQTFVTIiA+JjYKKwkJOzsKKwllc2FjCitmaQorCithY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTAyMTMgImNvbmZpZ3VyZSIKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsgcmV0dXJuIChhcmd2W2FyZ2MtMV0gPT0gMCkgOyB9CitFT0YKKworaWYgdGVzdCAiJElOVEVMX0NQTFVTUExVUyIgPSB5ZXMKK3RoZW4KKyMgVGhlICItd2RYWFgiIG9wdGlvbnMgc3VwcHJlc3Mgd2FybmluZ3M6CisjIHJlbWFyayAjMTQxOTogZXh0ZXJuYWwgZGVjbGFyYXRpb24gaW4gcHJpbWFyeSBzb3VyY2UgZmlsZQorIyByZW1hcmsgIzE2ODI6IGltcGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4MzogZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjg0OiBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE5MzogemVybyB1c2VkIGZvciB1bmRlZmluZWQgcHJlcHJvY2Vzc2luZyBpZGVudGlmaWVyCisjIHJlbWFyayAjNTkzOiB2YXJpYWJsZSAiY3Vyc19zYl9sZWZ0X2Fycm93IiB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCisjIHJlbWFyayAjODEwOiBjb252ZXJzaW9uIGZyb20gImludCIgdG8gIkRpbWVuc2lvbj17dW5zaWduZWQgc2hvcnR9IiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzCisjIHJlbWFyayAjODY5OiBwYXJhbWV0ZXIgInR3IiB3YXMgbmV2ZXIgcmVmZXJlbmNlZAorIyByZW1hcmsgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorIyB3YXJuaW5nICMyNjk6IGludmFsaWQgZm9ybWF0IHN0cmluZyBjb252ZXJzaW9uCisKKwl7IGVjaG8gIiRhc19tZToxMDIzMTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNQorZWNobyAiJGFzX21lOiBjaGVja2luZyBmb3IgJENDIHdhcm5pbmcgb3B0aW9ucy4uLiIgPiY2O30KKwljZl9zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisJRVhUUkFfQ1hYRkxBR1M9Ii1XYWxsIgorCWZvciBjZl9vcHQgaW4gXAorCQl3ZDE0MTkgXAorCQl3ZDE2ODIgXAorCQl3ZDE2ODMgXAorCQl3ZDE2ODQgXAorCQl3ZDE5MyBcCisJCXdkMjc5IFwKKwkJd2Q1OTMgXAorCQl3ZDgxMCBcCisJCXdkODY5IFwKKwkJd2Q5ODEKKwlkbworCQlDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MgJEVYVFJBX0NYWEZMQUdTIC0kY2Zfb3B0IgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDI0ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAyNTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhc19tZToxMDI1MzogcmVzdWx0OiAuLi4gLSRjZl9vcHQiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uIC0kY2Zfb3B0IiA+JjYKKwkJCUVYVFJBX0NYWEZMQUdTPSIkRVhUUkFfQ1hYRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyIKKworZWxpZiB0ZXN0ICIkR1hYIiA9IHllcwordGhlbgorCXsgZWNobyAiJGFzX21lOjEwMjYyOiBjaGVja2luZyBmb3IgJENYWCB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNQorZWNobyAiJGFzX21lOiBjaGVja2luZyBmb3IgJENYWCB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNjt9CisJY2Zfc2F2ZV9DWFhGTEFHUz0iJENYWEZMQUdTIgorCUVYVFJBX0NYWEZMQUdTPSItVyAtV2FsbCIKKwljZl9neHhfZXh0cmFfd2FybmluZ3M9IiIKKwl0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzICYmIGNmX2d4eF9leHRyYV93YXJuaW5ncz0iV3dyaXRlLXN0cmluZ3MiCisJY2FzZSAiJEdDQ19WRVJTSU9OIiBpbgorCVsxLTJdLiopCisJCTs7CisJKikKKwkJY2ZfZ3h4X2V4dHJhX3dhcm5pbmdzPSIkY2ZfZ3h4X2V4dHJhX3dhcm5pbmdzIFdlZmZjKysiCisJCTs7CisJZXNhYworCWZvciBjZl9vcHQgaW4gXAorCQlXYWJpIFwKKwkJZmFiaS12ZXJzaW9uPTAgXAorCQlXb3ZlcmxvYWRlZC12aXJ0dWFsIFwKKwkJV3NpZ24tcHJvbW8gXAorCQlXc3ludGggXAorCQlXb2xkLXN0eWxlLWNhc3QgXAorCQlXY2FzdC1hbGlnbiBcCisJCVdjYXN0LXF1YWwgXAorCQlXbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJV3BvaW50ZXItYXJpdGggXAorCQlXc2hhZG93IFwKKwkJV3N0cmljdC1wcm90b3R5cGVzIFwKKwkJV3VuZGVmICRjZl9neHhfZXh0cmFfd2FybmluZ3MgV25vLXVudXNlZAorCWRvCisJCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyAkRVhUUkFfQ1hYRkxBR1MgLVdlcnJvciAtJGNmX29wdCIKKwkJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAyOTE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMjk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYXNfbWU6MTAyOTY6IHJlc3VsdDogLi4uIC0kY2Zfb3B0IiA+JjUKK2VjaG8gIiR7RUNIT19UfS4uLiAtJGNmX29wdCIgPiY2CisJCQlFWFRSQV9DWFhGTEFHUz0iJEVYVFJBX0NYWEZMQUdTIC0kY2Zfb3B0IgorCQllbHNlCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiJGFzX21lOjEwMzAwOiByZXN1bHQ6IC4uLiBubyAtJGNmX29wdCIgPiY1CitlY2hvICIke0VDSE9fVH0uLi4gbm8gLSRjZl9vcHQiID4mNgorCQlmaQorCWRvbmUKKwlDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MiCitmaQorCitybSAtZiBjb25mdGVzdCoKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCisJZmkKK2ZpCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCitjYXQgPiBjb25mdGVzdC5pIDw8RU9GCisjaWZuZGVmIEdDQ19QUklOVEYKKyNkZWZpbmUgR0NDX1BSSU5URiAwCisjZW5kaWYKKyNpZm5kZWYgR0NDX1NDQU5GCisjZGVmaW5lIEdDQ19TQ0FORiAwCisjZW5kaWYKKyNpZm5kZWYgR0NDX05PUkVUVVJOCisjZGVmaW5lIEdDQ19OT1JFVFVSTiAvKiBub3RoaW5nICovCisjZW5kaWYKKyNpZm5kZWYgR0NDX1VOVVNFRAorI2RlZmluZSBHQ0NfVU5VU0VEIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorRU9GCitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorCXsgZWNobyAiJGFzX21lOjEwMzM2OiBjaGVja2luZyBmb3IgJENDIF9fYXR0cmlidXRlX18gZGlyZWN0aXZlcy4uLiIgPiY1CitlY2hvICIkYXNfbWU6IGNoZWNraW5nIGZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzLi4uIiA+JjY7fQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTAzMzkgIiR7YXNfbWUtY29uZmlndXJlfSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaSIKKyNpZglHQ0NfUFJJTlRGCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgLypub3RoaW5nKi8KKyNlbmRpZgorI2lmCUdDQ19TQ0FORgorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgLypub3RoaW5nKi8KKyNlbmRpZgorZXh0ZXJuIHZvaWQgd293KGNoYXIgKiwuLi4pIEdDQ19TQ0FORkxJS0UoMSwyKTsKK2V4dGVybiB2b2lkIG9vcHMoY2hhciAqLC4uLikgR0NDX1BSSU5URkxJS0UoMSwyKSBHQ0NfTk9SRVRVUk47CitleHRlcm4gdm9pZCBmb28odm9pZCkgR0NDX05PUkVUVVJOOworaW50IG1haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdIEdDQ19VTlVTRUQpIHsgcmV0dXJuIDA7IH0KK0VPRgorCWZvciBjZl9hdHRyaWJ1dGUgaW4gc2NhbmYgcHJpbnRmIHVudXNlZCBub3JldHVybgorCWRvCisKK2NmX0FUVFJJQlVURT1gZWNobyAiJGNmX2F0dHJpYnV0ZSIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwkJY2ZfZGlyZWN0aXZlPSJfX2F0dHJpYnV0ZV9fKCgkY2ZfYXR0cmlidXRlKSkiCisJCWVjaG8gImNoZWNraW5nIGZvciAkQ0MgJGNmX2RpcmVjdGl2ZSIgMT4mNQorCQljYXNlICRjZl9hdHRyaWJ1dGUgaW4KKwkJc2NhbmZ8cHJpbnRmKQorCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgMQorRU9GCisJCQk7OworCQkqKQorCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgJGNmX2RpcmVjdGl2ZQorRU9GCisJCQk7OworCQllc2FjCisJCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMzc3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDM4MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiJGFzX21lOjEwMzgyOiByZXN1bHQ6IC4uLiAkY2ZfYXR0cmlidXRlIiA+JjUKK2VjaG8gIiR7RUNIT19UfS4uLiAkY2ZfYXR0cmlidXRlIiA+JjYKKwkJCWNhdCBjb25mdGVzdC5oID4+Y29uZmRlZnMuaAorCQlmaQorCWRvbmUKK2Vsc2UKKwlmZ3JlcCBkZWZpbmUgY29uZnRlc3QuaSA+PmNvbmZkZWZzLmgKK2ZpCitybSAtcmYgY29uZnRlc3QqCitmaQorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS1hc3NlcnRpb25zIHRvIHR1cm4gb24gZ2VuZXJhdGlvbiBvZiBhc3NlcnRpb24gY29kZQorZWNobyAiJGFzX21lOjEwMzk0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBlbmFibGUgcnVudGltZSBhc3NlcnRpb25zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bnRpbWUgYXNzZXJ0aW9ucy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFzc2VydGlvbnMgb3IgLS1kaXNhYmxlLWFzc2VydGlvbnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYXNzZXJ0aW9ucytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfYXNzZXJ0aW9ucyIKKyAgd2l0aF9hc3NlcnRpb25zPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9hc3NlcnRpb25zPW5vCitmaTsKK2VjaG8gIiRhc19tZToxMDQwNDogcmVzdWx0OiAkd2l0aF9hc3NlcnRpb25zIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2Fzc2VydGlvbnMiID4mNgoraWYgdGVzdCAtbiAiJEdDQyIKK3RoZW4KKwlpZiB0ZXN0ICIkd2l0aF9hc3NlcnRpb25zIiA9IG5vCisJdGhlbgorCQljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOREVCVUcgMQorRU9GCisKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRE5ERUJVRyIKKwllbHNlCisJCUFEQUZMQUdTPSIkQURBRkxBR1MgLWduYXRhIgorCWZpCitmaQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtbGVha3MgdG8gc3VwcHJlc3MgInBlcm1hbmVudCIgbGVha3MsIGZvciB0ZXN0aW5nCisKK2VjaG8gIiRhc19tZToxMDQyMjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIGRtYWxsb2MgZm9yIHRlc3RpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZG1hbGxvYyBmb3IgdGVzdGluZy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kbWFsbG9jIG9yIC0td2l0aG91dC1kbWFsbG9jIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2RtYWxsb2MiCisgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9ETUFMTE9DIDEKK0VPRgorCisJOiAke3dpdGhfY2ZsYWdzOj0tZ30KKwk6ICR7d2l0aF9ub19sZWFrczo9eWVzfQorCSB3aXRoX2RtYWxsb2M9eWVzCitlbHNlCisgIHdpdGhfZG1hbGxvYz0KK2ZpOworZWNobyAiJGFzX21lOjEwNDM4OiByZXN1bHQ6ICR7d2l0aF9kbWFsbG9jOi1ub30iID4mNQorZWNobyAiJHtFQ0hPX1R9JHt3aXRoX2RtYWxsb2M6LW5vfSIgPiY2CisKK2Nhc2UgLiR3aXRoX2NmbGFncyBpbiAjKHZpCisuKi1nKikKKwljYXNlIC4kQ0ZMQUdTIGluICModmkKKwkuKi1nKikgIyh2aQorCQk7OworCSopCisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gLWcKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCQk7OworCWVzYWMKKwk7OworZXNhYworCitpZiB0ZXN0ICIkd2l0aF9kbWFsbG9jIiA9IHllcyA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTA1MjI6IGNoZWNraW5nIGZvciBkbWFsbG9jLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZG1hbGxvYy5oLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZG1hbGxvY19oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTA1MjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGRtYWxsb2MuaD4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA1MzI6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjEwNTM4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9kbWFsbG9jX2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9oZWFkZXJfZG1hbGxvY19oPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTA1NTc6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9kbWFsbG9jX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9kbWFsbG9jX2giID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2RtYWxsb2NfaCA9IHllczsgdGhlbgorCitlY2hvICIkYXNfbWU6MTA1NjE6IGNoZWNraW5nIGZvciBkbWFsbG9jX2RlYnVnIGluIC1sZG1hbGxvYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbWFsbG9jX2RlYnVnIGluIC1sZG1hbGxvYy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RtYWxsb2NfZG1hbGxvY19kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRtYWxsb2MgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDU2OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZG1hbGxvY19kZWJ1ZyAoKTsKK2ludAorbWFpbiAoKQoreworZG1hbGxvY19kZWJ1ZyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwNTg4OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDU5MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwNTk0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA1OTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZG1hbGxvY19kbWFsbG9jX2RlYnVnPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZG1hbGxvY19kbWFsbG9jX2RlYnVnPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMDYwODogcmVzdWx0OiAkYWNfY3ZfbGliX2RtYWxsb2NfZG1hbGxvY19kZWJ1ZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RtYWxsb2NfZG1hbGxvY19kZWJ1ZyIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfZG1hbGxvY19kbWFsbG9jX2RlYnVnID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgSEFWRV9MSUJETUFMTE9DIDEKK0VPRgorCisgIExJQlM9Ii1sZG1hbGxvYyAkTElCUyIKKworZmkKKworZmkKKworZmkKKworZWNobyAiJGFzX21lOjEwNjIzOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZGJtYWxsb2MgZm9yIHRlc3RpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZGJtYWxsb2MgZm9yIHRlc3RpbmcuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGJtYWxsb2Mgb3IgLS13aXRob3V0LWRibWFsbG9jIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kYm1hbGxvYytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9kYm1hbGxvYyIKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0RCTUFMTE9DIDEKK0VPRgorCisJOiAke3dpdGhfY2ZsYWdzOj0tZ30KKwk6ICR7d2l0aF9ub19sZWFrczo9eWVzfQorCSB3aXRoX2RibWFsbG9jPXllcworZWxzZQorICB3aXRoX2RibWFsbG9jPQorZmk7CitlY2hvICIkYXNfbWU6MTA2Mzk6IHJlc3VsdDogJHt3aXRoX2RibWFsbG9jOi1ub30iID4mNQorZWNobyAiJHtFQ0hPX1R9JHt3aXRoX2RibWFsbG9jOi1ub30iID4mNgorCitjYXNlIC4kd2l0aF9jZmxhZ3MgaW4gIyh2aQorLiotZyopCisJY2FzZSAuJENGTEFHUyBpbiAjKHZpCisJLiotZyopICModmkKKwkJOzsKKwkqKQorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluIC1nCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKKwkJOzsKKwllc2FjCisJOzsKK2VzYWMKKworaWYgdGVzdCAiJHdpdGhfZGJtYWxsb2MiID0geWVzIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMDcyMzogY2hlY2tpbmcgZm9yIGRibWFsbG9jLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGJtYWxsb2MuaC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2RibWFsbG9jX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDcyOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8ZGJtYWxsb2MuaD4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA3MzM6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjEwNzM5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9kYm1hbGxvY19oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfaGVhZGVyX2RibWFsbG9jX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMDc1ODogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2RibWFsbG9jX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9kYm1hbGxvY19oIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9kYm1hbGxvY19oID0geWVzOyB0aGVuCisKK2VjaG8gIiRhc19tZToxMDc2MjogY2hlY2tpbmcgZm9yIGRlYnVnX21hbGxvYyBpbiAtbGRibWFsbG9jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlYnVnX21hbGxvYyBpbiAtbGRibWFsbG9jLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZGJtYWxsb2NfZGVidWdfbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGJtYWxsb2MgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDc3MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZGVidWdfbWFsbG9jICgpOworaW50CittYWluICgpCit7CitkZWJ1Z19tYWxsb2MgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDc4OTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA3OTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDc5NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwNzk4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2RibWFsbG9jX2RlYnVnX21hbGxvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2RibWFsbG9jX2RlYnVnX21hbGxvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTA4MDk6IHJlc3VsdDogJGFjX2N2X2xpYl9kYm1hbGxvY19kZWJ1Z19tYWxsb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kYm1hbGxvY19kZWJ1Z19tYWxsb2MiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2RibWFsbG9jX2RlYnVnX21hbGxvYyA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIEhBVkVfTElCREJNQUxMT0MgMQorRU9GCisKKyAgTElCUz0iLWxkYm1hbGxvYyAkTElCUyIKKworZmkKKworZmkKKworZmkKKworZWNobyAiJGFzX21lOjEwODI0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgdmFsZ3JpbmQgZm9yIHRlc3RpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgdmFsZ3JpbmQgZm9yIHRlc3RpbmcuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdmFsZ3JpbmQgb3IgLS13aXRob3V0LXZhbGdyaW5kIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF92YWxncmluZCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF92YWxncmluZCIKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1ZBTEdSSU5EIDEKK0VPRgorCisJOiAke3dpdGhfY2ZsYWdzOj0tZ30KKwk6ICR7d2l0aF9ub19sZWFrczo9eWVzfQorCSB3aXRoX3ZhbGdyaW5kPXllcworZWxzZQorICB3aXRoX3ZhbGdyaW5kPQorZmk7CitlY2hvICIkYXNfbWU6MTA4NDA6IHJlc3VsdDogJHt3aXRoX3ZhbGdyaW5kOi1ub30iID4mNQorZWNobyAiJHtFQ0hPX1R9JHt3aXRoX3ZhbGdyaW5kOi1ub30iID4mNgorCitjYXNlIC4kd2l0aF9jZmxhZ3MgaW4gIyh2aQorLiotZyopCisJY2FzZSAuJENGTEFHUyBpbiAjKHZpCisJLiotZyopICModmkKKwkJOzsKKwkqKQorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluIC1nCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKKwkJOzsKKwllc2FjCisJOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjEwOTIzOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBwZXJmb3JtIG1lbW9yeS1sZWFrIHRlc3RpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBwZXJmb3JtIG1lbW9yeS1sZWFrIHRlc3RpbmcuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sZWFrcyBvciAtLWRpc2FibGUtbGVha3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGVha3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2xlYWtzIgorICB3aXRoX25vX2xlYWtzPXllcworZWxzZQorICA6ICR7d2l0aF9ub19sZWFrczo9bm99CitmaTsKK2VjaG8gIiRhc19tZToxMDkzMzogcmVzdWx0OiAkd2l0aF9ub19sZWFrcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9ub19sZWFrcyIgPiY2CisKK2lmIHRlc3QgIiR3aXRoX25vX2xlYWtzIiA9IHllcyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOT19MRUFLUyAxCitFT0YKKworZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ19BTExPQ19IIDEKK0VPRgorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS1leHBhbmRlZCB0byBnZW5lcmF0ZSBjZXJ0YWluIG1hY3JvcyBhcyBmdW5jdGlvbnMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4cGFuZGVkIG9yIC0tZGlzYWJsZS1leHBhbmRlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9leHBhbmRlZCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZXhwYW5kZWQiCisgIHRlc3QgIiRlbmFibGV2YWwiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfRVhQQU5ERUQgMQorRU9GCisKK2ZpOworCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtbWFjcm9zIHRvIHN1cHByZXNzIG1hY3JvcyBpbiBmYXZvciBvZiBmdW5jdGlvbnMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hY3JvcyBvciAtLWRpc2FibGUtbWFjcm9zIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21hY3JvcytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbWFjcm9zIgorICB0ZXN0ICIkZW5hYmxldmFsIiA9IG5vICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfTk9NQUNST1MgMQorRU9GCisKK2ZpOworCisjIE5vcm1hbGx5IHdlIG9ubHkgYWRkIHRyYWNlKCkgdG8gdGhlIGRlYnVnLWxpYnJhcnkuICBBbGxvdyB0aGlzIHRvIGJlCisjIGV4dGVuZGVkIHRvIGFsbCBtb2RlbHMgb2YgdGhlIG5jdXJzZXMgbGlicmFyeToKK2NmX2FsbF90cmFjZXM9bm8KK2Nhc2UgIiRDRkxBR1MgJENQUEZMQUdTIiBpbgorKi1EVFJBQ0UqKQorCWNmX2FsbF90cmFjZXM9eWVzCisJOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjEwOTc4OiBjaGVja2luZyB3aGV0aGVyIHRvIGFkZCB0cmFjZSBmZWF0dXJlIHRvIGFsbCBtb2RlbHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGFkZCB0cmFjZSBmZWF0dXJlIHRvIGFsbCBtb2RlbHMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdHJhY2Ugb3IgLS13aXRob3V0LXRyYWNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90cmFjZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90cmFjZSIKKyAgY2Zfd2l0aF90cmFjZT0kd2l0aHZhbAorZWxzZQorICBjZl93aXRoX3RyYWNlPSRjZl9hbGxfdHJhY2VzCitmaTsKK2VjaG8gIiRhc19tZToxMDk4ODogcmVzdWx0OiAkY2Zfd2l0aF90cmFjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2Zfd2l0aF90cmFjZSIgPiY2CisKK2lmIHRlc3QgIiRjZl93aXRoX3RyYWNlIiA9IHllcyA7IHRoZW4KKwlMSUJfVFJBQ0lORz1hbGwKKwlBREFfVFJBQ0U9VFJVRQorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluIC1EVFJBQ0UKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworZWxzZQorCUxJQl9UUkFDSU5HPURFQlVHCisJQURBX1RSQUNFPUZBTFNFCitmaQorCisjIyMJQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitlY2hvICIkYXNfbWU6MTEwNjk6IGNoZWNraW5nIGZvciBnZXR0aW1lb2ZkYXkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0dGltZW9mZGF5Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX2dldHRpbWVvZmRheStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExMDc1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldHRpbWVvZmRheSAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBnZXR0aW1lb2ZkYXkgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2dldHRpbWVvZmRheSkgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0dGltZW9mZGF5KQorY2hva2UgbWUKKyNlbHNlCitmID0gZ2V0dGltZW9mZGF5OworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMTA2OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTEwOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMTEyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTExMTU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX2dldHRpbWVvZmRheT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjExMTI1OiByZXN1bHQ6ICRhY19jdl9mdW5jX2dldHRpbWVvZmRheSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkiID4mNgoraWYgdGVzdCAkYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQorRU9GCisKK2Vsc2UKKworZWNobyAiJGFzX21lOjExMTM0OiBjaGVja2luZyBmb3IgZ2V0dGltZW9mZGF5IGluIC1sYnNkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldHRpbWVvZmRheSBpbiAtbGJzZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2JzZF9nZXR0aW1lb2ZkYXkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxic2QgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTE0MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZ2V0dGltZW9mZGF5ICgpOworaW50CittYWluICgpCit7CitnZXR0aW1lb2ZkYXkgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTE2MTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTExNjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTE2NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMTcwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2JzZF9nZXR0aW1lb2ZkYXk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9ic2RfZ2V0dGltZW9mZGF5PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMTE4MTogcmVzdWx0OiAkYWNfY3ZfbGliX2JzZF9nZXR0aW1lb2ZkYXkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9ic2RfZ2V0dGltZW9mZGF5IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9ic2RfZ2V0dGltZW9mZGF5ID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKK0VPRgorCisJTElCUz0iJExJQlMgLWxic2QiCitmaQorCitmaQorCitlY2hvICIkYXNfbWU6MTExOTM6IGNoZWNraW5nIGlmIC1sbSBuZWVkZWQgZm9yIG1hdGggZnVuY3Rpb25zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgLWxtIG5lZWRlZCBmb3IgbWF0aCBmdW5jdGlvbnMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X25lZWRfbGlibStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTIwMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKwkjaW5jbHVkZSA8c3RkaW8uaD4KKwkjaW5jbHVkZSA8bWF0aC5oPgorCitpbnQKK21haW4gKCkKK3sKK2RvdWJsZSB4ID0gcmFuZCgpOyBwcmludGYoInJlc3VsdCA9ICVnXG4iLCBzaW4oeCkpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTIxNTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTEyMTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTIyMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMjI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfbmVlZF9saWJtPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X25lZWRfbGlibT15ZXMKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjExMjM0OiByZXN1bHQ6ICRjZl9jdl9uZWVkX2xpYm0iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25lZWRfbGlibSIgPiY2CitpZiB0ZXN0ICIkY2ZfY3ZfbmVlZF9saWJtIiA9IHllcwordGhlbgorTUFUSF9MSUI9LWxtCitmaQorCisjIyMJQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitlY2hvICIkYXNfbWU6MTEyNDI6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTEyNDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTEyNTY6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjExMjYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTEyODQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExMzAyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTMyMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisgICAgICAgICAgICAgICAgICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisgICAgICAgICAgICAgICAgICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKyAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICAkYWNfbWFpbl9yZXR1cm4oMik7CisgICRhY19tYWluX3JldHVybiAoMCk7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTEzNDk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMzUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTM1NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMzU3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitmaQorZWNobyAiJGFzX21lOjExMzcwOiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKK0VPRgorCitmaQorCithY19oZWFkZXJfZGlyZW50PW5vCitmb3IgYWNfaGRyIGluIGRpcmVudC5oIHN5cy9uZGlyLmggc3lzL2Rpci5oIG5kaXIuaDsgZG8KKyAgYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19oZHIiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOjExMzgzOiBjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUi4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTM4OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8JGFjX2hkcj4KKworaW50CittYWluICgpCit7CitpZiAoKERJUiAqKSAwKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNDA0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTQwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTQxMDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNDEzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2V2YWwgIiRhc19hY19IZWFkZXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjExNDIzOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGRyIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCithY19oZWFkZXJfZGlyZW50PSRhY19oZHI7IGJyZWFrCitmaQorCitkb25lCisjIFR3byB2ZXJzaW9ucyBvZiBvcGVuZGlyIGV0IGFsLiBhcmUgaW4gLWxkaXIgYW5kIC1seCBvbiBTQ08gWGVuaXguCitpZiB0ZXN0ICRhY19oZWFkZXJfZGlyZW50ID0gZGlyZW50Lmg7IHRoZW4KKyAgZWNobyAiJGFzX21lOjExNDM2OiBjaGVja2luZyBmb3Igb3BlbmRpciBpbiAtbGRpciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1sZGlyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZGlyX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkaXIgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTQ0NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbmRpciAoKTsKK2ludAorbWFpbiAoKQoreworb3BlbmRpciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNDYzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTQ2NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNDY5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE0NzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZGlyX29wZW5kaXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9kaXJfb3BlbmRpcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTE0ODM6IHJlc3VsdDogJGFjX2N2X2xpYl9kaXJfb3BlbmRpciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Rpcl9vcGVuZGlyIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9kaXJfb3BlbmRpciA9IHllczsgdGhlbgorICBMSUJTPSIkTElCUyAtbGRpciIKK2ZpCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjExNDkwOiBjaGVja2luZyBmb3Igb3BlbmRpciBpbiAtbHgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb3BlbmRpciBpbiAtbHguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl94X29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx4ICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE0OTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIG9wZW5kaXIgKCk7CitpbnQKK21haW4gKCkKK3sKK29wZW5kaXIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTUxNzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE1MjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTUyMzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNTI2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX3hfb3BlbmRpcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX3hfb3BlbmRpcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTE1Mzc6IHJlc3VsdDogJGFjX2N2X2xpYl94X29wZW5kaXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl94X29wZW5kaXIiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX3hfb3BlbmRpciA9IHllczsgdGhlbgorICBMSUJTPSIkTElCUyAtbHgiCitmaQorCitmaQorCitlY2hvICIkYXNfbWU6MTE1NDU6IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90aW1lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE1NTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQKK21haW4gKCkKK3sKK2lmICgoc3RydWN0IHRtICopIDApCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE1Njc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNTcwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNTczOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE1NzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfaGVhZGVyX3RpbWU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTE1ODY6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZToxMTU5NjogY2hlY2tpbmcgZm9yIHJlZ3VsYXItZXhwcmVzc2lvbiBoZWFkZXJzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJlZ3VsYXItZXhwcmVzc2lvbiBoZWFkZXJzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9yZWdleCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExNjAzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgoraW50CittYWluICgpCit7CisKKwlyZWdleF90ICpwOworCWludCB4ID0gcmVnY29tcChwLCAiIiwgMCk7CisJaW50IHkgPSByZWdleGVjKHAsICIiLCAwLCAwLCAwKTsKKwlyZWdmcmVlKHApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTYyMTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2MjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTYyNzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNjMwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfcmVnZXg9InJlZ2V4LmgiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE2MzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHJlZ2V4cC5oPgoraW50CittYWluICgpCit7CisKKwkJY2hhciAqcCA9IGNvbXBpbGUoIiIsICIiLCAiIiwgMCk7CisJCWludCB4ID0gc3RlcCgiIiwgIiIpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTY1MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2NTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTY1OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNjYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfcmVnZXg9InJlZ2V4cC5oIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJTElCUz0iLWxnZW4gJExJQlMiCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE2NzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHJlZ2V4cHIuaD4KK2ludAorbWFpbiAoKQoreworCisJCQljaGFyICpwID0gY29tcGlsZSgiIiwgIiIsICIiKTsKKwkJCWludCB4ID0gc3RlcCgiIiwgIiIpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTY4NzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2OTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTY5MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNjk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfcmVnZXg9InJlZ2V4cHIuaCIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorTElCUz0iJGNmX3NhdmVfTElCUyIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworZWNobyAiJGFzX21lOjExNzEyOiByZXN1bHQ6ICRjZl9jdl9yZWdleCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfcmVnZXgiID4mNgorY2FzZSAkY2ZfY3ZfcmVnZXggaW4KKwlyZWdleC5oKSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfUkVHRVhfSF9GVU5DUyAxCitFT0YKKyA7OworCXJlZ2V4cC5oKSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9SRUdFWFBfSF9GVU5DUyAxCitFT0YKKyA7OworCXJlZ2V4cHIuaCkgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9SRUdFWFBSX0hfRlVOQ1MgMQorRU9GCisgOzsKK2VzYWMKKworZm9yIGFjX2hlYWRlciBpbiBcCitmY250bC5oIFwKK2dldG9wdC5oIFwKK2xpbWl0cy5oIFwKK2xvY2FsZS5oIFwKK3BvbGwuaCBcCitzeXMvYnNkdHlwZXMuaCBcCitzeXMvaW9jdGwuaCBcCitzeXMvcGFyYW0uaCBcCitzeXMvcG9sbC5oIFwKK3N5cy9zZWxlY3QuaCBcCitzeXMvdGltZS5oIFwKK3N5cy90aW1lcy5oIFwKK3R0eWVudC5oIFwKK3VuaXN0ZC5oIFwKK3djdHlwZS5oIFwKKworZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOjExNzQ4OiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExNzU0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTc1ODogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTE3NjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjExNzgzOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCitmaQorZG9uZQorCisjIGNoZWNrIGZvciBJU0MgKHRoaXMgbWF5IGFsc28gZGVmaW5lIF9QT1NJWF9TT1VSQ0UpCisjIE5vdGU6IGV2ZW4gbm9uLVBvc2l4IElTQyBuZWVkcyA8c3lzL2JzZHR5cGVzLmg+IHRvIGRlY2xhcmUgZmRfc2V0CitpZiB0ZXN0ICIkSVNDIiA9IHllcyA7IHRoZW4KKworZWNobyAiJGFzX21lOjExNzk3OiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbGNwb3NpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWluIGluIC1sY3Bvc2l4Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfY3Bvc2l4X21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxjcG9zaXggICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTgwNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworbWFpbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExODE3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTgyMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExODIzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE4MjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfY3Bvc2l4X21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9jcG9zaXhfbWFpbj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTE4Mzc6IHJlc3VsdDogJGFjX2N2X2xpYl9jcG9zaXhfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Nwb3NpeF9tYWluIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9jcG9zaXhfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIEhBVkVfTElCQ1BPU0lYIDEKK0VPRgorCisgIExJQlM9Ii1sY3Bvc2l4ICRMSUJTIgorCitmaQorCisJZWNobyAiJGFzX21lOjExODQ4OiBjaGVja2luZyBmb3IgYnplcm8gaW4gLWxpbmV0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGJ6ZXJvIGluIC1saW5ldC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2luZXRfYnplcm8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxpbmV0ICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE4NTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGJ6ZXJvICgpOworaW50CittYWluICgpCit7CitiemVybyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExODc1OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTg3ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExODgxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE4ODQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfaW5ldF9iemVybz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2luZXRfYnplcm89bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjExODk1OiByZXN1bHQ6ICRhY19jdl9saWJfaW5ldF9iemVybyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2luZXRfYnplcm8iID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2luZXRfYnplcm8gPSB5ZXM7IHRoZW4KKyAgTElCUz0iJExJQlMgLWxpbmV0IgorZmkKK2ZpCisKK2VjaG8gIiRhc19tZToxMTkwMjogY2hlY2tpbmcgaWYgc3lzL3RpbWUuaCB3b3JrcyB3aXRoIHN5cy9zZWxlY3QuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHN5cy90aW1lLmggd29ya3Mgd2l0aCBzeXMvc2VsZWN0LmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3N5c190aW1lX3NlbGVjdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExOTA5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTkyOTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE5MzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE5MzU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTkzODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3N5c190aW1lX3NlbGVjdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCisKK2VjaG8gIiRhc19tZToxMTk1MDogcmVzdWx0OiAkY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zeXNfdGltZV9zZWxlY3QiID4mNgordGVzdCAiJGNmX2N2X3N5c190aW1lX3NlbGVjdCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TWVNfVElNRV9TRUxFQ1QgMQorRU9GCisKKyMjIwljaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2VjaG8gIiRhc19tZToxMTk2NDogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExOTcyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQoraW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCisjIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KKyMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKKyMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQorIyBIUC1VWCAxMC4yMCBhbmQgbGF0ZXIJLUFlCisjIEhQLVVYIG9sZGVyIHZlcnNpb25zCS1BYSAtRF9IUFVYX1NPVVJDRQorIyBTVlI0CQkJLVhjIC1EX19FWFRFTlNJT05TX18KK2ZvciBhY19hcmcgaW4gIiIgLXFsYW5nbHZsPWFuc2kgLXN0ZDEgLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjAyMTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIwMjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIwMjc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjAzMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfYXJnCiticmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorCitjYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KKyAgeHx4bm8pCisgICAgZWNobyAiJGFzX21lOjEyMDQ3OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjYgOzsKKyAgKikKKyAgICBlY2hvICIkYXNfbWU6MTIwNTA6IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjYKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX3N0ZGMiIDs7Citlc2FjCisKK2VjaG8gIiRhc19tZToxMjA1NTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9jX2NvbnN0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTIwNjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKy8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKKyAgY29uc3QgY2hhcnNldCB4OworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqY2NwOworICBjaGFyICoqcDsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBjY3AgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrY2NwOworICBwID0gKGNoYXIqKikgY2NwOworICBjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgfQorICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICAgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOworICAgICsrZm9vOworICB9CisgIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLworICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICAgIGlwdHIgcCA9IDA7CisgICAgKytwOworICB9CisgIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KKyAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICAgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKKyAgfQorICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICAgIGNvbnN0IGludCBmb28gPSAxMDsKKyAgfQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIxMTk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMTIyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyMTI1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIxMjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEyMTM4OiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBjb25zdAorRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZToxMjE0ODogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2NfaW5saW5lPW5vCitmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTIxNTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2lmbmRlZiBfX2NwbHVzcGx1cworc3RhdGljICRhY19rdyBpbnQgc3RhdGljX2ZvbyAoKSB7cmV0dXJuIDA7IH0KKyRhY19rdyBpbnQgZm9vICgpIHtyZXR1cm4gMDsgfQorI2VuZGlmCisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIxNjU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMTY4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyMTcxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIxNzQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9jX2lubGluZT0kYWNfa3c7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZToxMjE4NTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW5saW5lIiA+JjYKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcykgOzsKKyAgbm8pCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBpbmxpbmUKK0VPRgorIDs7CisgICopICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGlubGluZSAkYWNfY3ZfY19pbmxpbmUKK0VPRgorIDs7Citlc2FjCisKK05DVVJTRVNfSU5MSU5FPQoraWYgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyA7IHRoZW4KKyAgTkNVUlNFU19JTkxJTkU9aW5saW5lCisgIGlmIHRlc3QgIiRJTlRFTF9DT01QSUxFUiIgPSB5ZXMKKyAgdGhlbgorICAgIDoKKyAgZWxpZiB0ZXN0ICIkR0NDIiA9IHllcworICB0aGVuCisgICAgZWNobyAiJGFzX21lOjEyMjA4OiBjaGVja2luZyBpZiBnY2Mgc3VwcG9ydHMgb3B0aW9ucyB0byB0dW5lIGlubGluaW5nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgZ2NjIHN1cHBvcnRzIG9wdGlvbnMgdG8gdHVuZSBpbmxpbmluZy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZ2NjX2lubGluZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisgICAgICBjZl9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLS1wYXJhbSBtYXgtaW5saW5lLWluc25zLXNpbmdsZT0xMjAwIgorICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjIxNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCitpbmxpbmUgaW50IGZvbyh2b2lkKSB7IHJldHVybiAxOyB9CitpbnQKK21haW4gKCkKK3sKKyR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0gZm9vKCkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIyMjk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMjMyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyMjM1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIyMzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9nY2NfaW5saW5lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9nY2NfaW5saW5lPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBDRkxBR1M9JGNmX3NhdmVfQ0ZMQUdTCisKK2ZpCitlY2hvICIkYXNfbWU6MTIyNTA6IHJlc3VsdDogJGNmX2N2X2djY19pbmxpbmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2djY19pbmxpbmUiID4mNgorICAgIGlmIHRlc3QgIiRjZl9jdl9nY2NfaW5saW5lIiA9IHllcyA7IHRoZW4KKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAtLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtc2luZ2xlPTEyMDAKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworICAgIGZpCisgIGZpCitmaQorCitlY2hvICIkYXNfbWU6MTIzMjY6IGNoZWNraW5nIGZvciBzaWduYWwgZ2xvYmFsIGRhdGF0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNpZ25hbCBnbG9iYWwgZGF0YXR5cGUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3NpZ19hdG9taWNfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJZm9yIGNmX3R5cGUgaW4gXAorCQkidm9sYXRpbGUgc2lnX2F0b21pY190IiBcCisJCSJzaWdfYXRvbWljX3QiIFwKKwkJImludCIKKwlkbworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTIzMzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJuICRjZl90eXBlIHg7CiskY2ZfdHlwZSB4Oworc3RhdGljIHZvaWQgaGFuZGxlcihpbnQgc2lnKQoreworCXggPSA1OworfQoraW50CittYWluICgpCit7CitzaWduYWwoU0lHSU5ULCBoYW5kbGVyKTsKKwkJIHggPSAxCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyMzYxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjM2NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjM2NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMzcwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfc2lnX2F0b21pY190PSRjZl90eXBlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3NpZ19hdG9taWNfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQl0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBicmVhaworCWRvbmUKKworZmkKKworZWNobyAiJGFzX21lOjEyMzg0OiByZXN1bHQ6ICRjZl9jdl9zaWdfYXRvbWljX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3NpZ19hdG9taWNfdCIgPiY2Cit0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFNJR19BVE9NSUNfVCAkY2ZfY3Zfc2lnX2F0b21pY190CitFT0YKKworaWYgdGVzdCAkTkNVUlNFU19DSFRZUEUgPSBhdXRvIDsgdGhlbgorCitlY2hvICIkYXNfbWU6MTIzOTI6IGNoZWNraW5nIGZvciB0eXBlIG9mIGNodHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0eXBlIG9mIGNodHlwZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdHlwZW9mX2NodHlwZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X3R5cGVvZl9jaHR5cGU9bG9uZworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNDAyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2RlZmluZSBXQU5UX0JJVFMgMzEKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oImNmX3Rlc3Qub3V0IiwgInciKTsKKwlpZiAoZnAgIT0gMCkgeworCQljaGFyICpyZXN1bHQgPSAibG9uZyI7CisJCWlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPiBzaXplb2YodW5zaWduZWQgaW50KSkgeworCQkJaW50IG47CisJCQl1bnNpZ25lZCBpbnQgeCwgeTsKKwkJCWZvciAobiA9IDA7IG4gPCBXQU5UX0JJVFM7IG4rKykgeworCQkJCXggPSAoMSA8PCBuKTsKKwkJCQl5ID0gKHggPj4gbik7CisJCQkJaWYgKHkgIT0gMSB8fCB4ID09IDApIHsKKwkJCQkJeCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qCisJCQkgKiBJZiB4IGlzIG5vbnplcm8sIGFuIGludCBpcyBiaWcgZW5vdWdoIGZvciB0aGUgYml0cworCQkJICogdGhhdCB3ZSB3YW50LgorCQkJICovCisJCQlyZXN1bHQgPSAoeCAhPSAwKSA/ICJpbnQiIDogImxvbmciOworCQl9CisJCWZwdXRzKHJlc3VsdCwgZnApOworCQlmY2xvc2UoZnApOworCX0KKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI0Mzc6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNDQwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjQ0MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNDQ1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfdHlwZW9mX2NodHlwZT1gY2F0IGNmX3Rlc3Qub3V0YAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfdHlwZW9mX2NodHlwZT1sb25nCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisJCXJtIC1mIGNmX3Rlc3Qub3V0CisKK2ZpCisKK2VjaG8gIiRhc19tZToxMjQ2MDogcmVzdWx0OiAkY2ZfY3ZfdHlwZW9mX2NodHlwZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdHlwZW9mX2NodHlwZSIgPiY2CisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgVFlQRU9GX0NIVFlQRSAkY2ZfY3ZfdHlwZW9mX2NodHlwZQorRU9GCisKK2Vsc2UKKwljZl9jdl90eXBlb2ZfY2h0eXBlPSROQ1VSU0VTX0NIVFlQRQorZmkKK3Rlc3QgIiRjZl9jdl90eXBlb2ZfY2h0eXBlIiA9IHVuc2lnbmVkICYmIGNmX2N2X3R5cGVvZl9jaHR5cGU9IiIKKworZWNobyAiJGFzX21lOjEyNDcyOiBjaGVja2luZyBpZiB1bnNpZ25lZCBsaXRlcmFscyBhcmUgbGVnYWwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB1bnNpZ25lZCBsaXRlcmFscyBhcmUgbGVnYWwuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNDc5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7Citsb25nIHggPSAxTCArIDFVTCArIDFVICsgMQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjQ5MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI0OTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI0OTc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjUwMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl91bnNpZ25lZF9saXRlcmFscz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCitlY2hvICIkYXNfbWU6MTI1MTI6IHJlc3VsdDogJGNmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl91bnNpZ25lZF9saXRlcmFscyIgPiY2CisKK2NmX2N2XzFVTD0iMSIKK3Rlc3QgIi4kY2ZfY3ZfdW5zaWduZWRfbGl0ZXJhbHMiID0gLnllcyAmJiBjZl9jdl8xVUw9IiR7Y2ZfY3ZfMVVMfVUiCit0ZXN0ICIuJGNmX2N2X3R5cGVvZl9jaHR5cGUiICAgID0gLmxvbmcgJiYgY2ZfY3ZfMVVMPSIke2NmX2N2XzFVTH1MIgorCitpZiB0ZXN0ICROQ1VSU0VTX01NQVNLX1QgPSBhdXRvIDsgdGhlbgorCWNmX2N2X3R5cGVvZl9tbWFza190PWxvbmcKK2Vsc2UKKwljZl9jdl90eXBlb2ZfbW1hc2tfdD0kTkNVUlNFU19NTUFTS19UCitmaQordGVzdCAiJGNmX2N2X3R5cGVvZl9tbWFza190IiA9IHVuc2lnbmVkICYmIGNmX2N2X3R5cGVvZl9tbWFza190PSIiCisKKyMjIwlDaGVja3MgZm9yIGV4dGVybmFsLWRhdGEKKworZWNobyAiJGFzX21lOjEyNTI4OiBjaGVja2luZyBpZiBleHRlcm5hbCBlcnJubyBpcyBkZWNsYXJlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGV4dGVybmFsIGVycm5vIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9kY2xfZXJybm8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI1MzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgoraW50CittYWluICgpCit7CitpbnQgeCA9IChpbnQpIGVycm5vCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNTUzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjU1NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjU1OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNTYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZGNsX2Vycm5vPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9kY2xfZXJybm89bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZToxMjU3MzogcmVzdWx0OiAkY2ZfY3ZfZGNsX2Vycm5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9kY2xfZXJybm8iID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfZGNsX2Vycm5vIiA9IG5vIDsgdGhlbgorCitjZl9yZXN1bHQ9YGVjaG8gImRlY2xfZXJybm8iIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfcmVzdWx0IDEKK0VPRgorCitmaQorCisjIEl0J3MgcG9zc2libGUgKGZvciBuZWFyLVVOSVggY2xvbmVzKSB0aGF0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QKKworZWNobyAiJGFzX21lOjEyNTg4OiBjaGVja2luZyBpZiBleHRlcm5hbCBlcnJubyBleGlzdHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBleHRlcm5hbCBlcnJubyBleGlzdHMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2hhdmVfZXJybm8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI1OTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjdW5kZWYgZXJybm8KK2V4dGVybiBpbnQgZXJybm87CisKK2ludAorbWFpbiAoKQoreworZXJybm8gPSAyCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjYxMDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI2MTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjYxNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNjE5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfaGF2ZV9lcnJubz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfaGF2ZV9lcnJubz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZToxMjYzMDogcmVzdWx0OiAkY2ZfY3ZfaGF2ZV9lcnJubyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfaGF2ZV9lcnJubyIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9oYXZlX2Vycm5vIiA9IHllcyA7IHRoZW4KKworY2ZfcmVzdWx0PWBlY2hvICJoYXZlX2Vycm5vIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworICAgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGNmX3Jlc3VsdCAxCitFT0YKKworZmkKKworZWNobyAiJGFzX21lOjEyNjQzOiBjaGVja2luZyBpZiBkYXRhLW9ubHkgbGlicmFyeSBtb2R1bGUgbGlua3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBkYXRhLW9ubHkgbGlicmFyeSBtb2R1bGUgbGlua3MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2xpbmtfZGF0YW9ubHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCXJtIC1mIGNvbmZ0ZXN0LmEKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEyNjUxICJjb25maWd1cmUiCitpbnQJdGVzdGRhdGFbM10gPSB7IDEyMywgNDU2LCA3ODkgfTsKK0VPRgorCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNjU0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjY1NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9IDsgdGhlbgorCQltdiBjb25mdGVzdC5vIGRhdGEubyAmJiBcCisJCSggJEFSICRBUl9PUFRTIGNvbmZ0ZXN0LmEgZGF0YS5vICkgMj4mNSAxPi9kZXYvbnVsbAorCWZpCisJcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBkYXRhLm8KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEyNjY0ICJjb25maWd1cmUiCitpbnQJdGVzdGZ1bmMoKQoreworI2lmIGRlZmluZWQoTmVYVCkKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDEpOwkvKiBJJ20gdG9sZCB0aGlzIGxpbmtlciBpcyBicm9rZW4gKi8KKyNlbHNlCisJZXh0ZXJuIGludCB0ZXN0ZGF0YVszXTsKKwlyZXR1cm4gdGVzdGRhdGFbMF0gPT0gMTIzCisJICAgJiYgIHRlc3RkYXRhWzFdID09IDQ1NgorCSAgICYmICB0ZXN0ZGF0YVsyXSA9PSA3ODk7CisjZW5kaWYKK30KK0VPRgorCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNjc3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjY4MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZnVuYy5vICYmIFwKKwkJKCAkQVIgJEFSX09QVFMgY29uZnRlc3QuYSBmdW5jLm8gKSAyPiY1IDE+L2Rldi9udWxsCisJZmkKKwlybSAtZiBjb25mdGVzdC4kYWNfZXh0IGZ1bmMubworCSggZXZhbCAkUkFOTElCIGNvbmZ0ZXN0LmEgKSAyPiY1ID4vZGV2L251bGwKKwljZl9zYXZlTElCUz0iJExJQlMiCisJTElCUz0iY29uZnRlc3QuYSAkTElCUyIKKwlpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl9saW5rX2RhdGFvbmx5PXVua25vd24KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjY5MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKwlpbnQgbWFpbigpCisJeworCQlleHRlcm4gaW50IHRlc3RmdW5jKCk7CisJCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0gKCF0ZXN0ZnVuYygpKTsKKwl9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjcwNDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI3MDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNzA5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI3MTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9saW5rX2RhdGFvbmx5PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfbGlua19kYXRhb25seT1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCUxJQlM9IiRjZl9zYXZlTElCUyIKKworZmkKKworZWNobyAiJGFzX21lOjEyNzI3OiByZXN1bHQ6ICRjZl9jdl9saW5rX2RhdGFvbmx5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9saW5rX2RhdGFvbmx5IiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X2xpbmtfZGF0YW9ubHkiID0gbm8gOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQlJPS0VOX0xJTktFUiAxCitFT0YKKworCUJST0tFTl9MSU5LRVI9MQorZmkKKworIyMjCUNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisKK2ZvciBhY19mdW5jIGluIFwKK2dldGN3ZCBcCitnZXRlZ2lkIFwKK2dldGV1aWQgXAorZ2V0dHR5bmFtIFwKK2lzc2V0dWdpZCBcCitwb2xsIFwKK3JlbW92ZSBcCitzZWxlY3QgXAorc2V0YnVmIFwKK3NldGJ1ZmZlciBcCitzZXR2YnVmIFwKK3NpZ2FjdGlvbiBcCitzaWd2ZWMgXAorc3RyZHVwIFwKK3N0cnN0ciBcCit0Y2dldHBncnAgXAordGltZXMgXAordnNucHJpbnRmIFwKKworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6MTI3NjI6IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjc2OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorY2hva2UgbWUKKyNlbHNlCitmID0gJGFjX2Z1bmM7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI3OTk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyODAyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI4MDU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjgwODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTI4MTg6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCitmaQorZG9uZQorCitpZiB0ZXN0ICIkd2l0aF9nZXRjYXAiID0gInllcyIgOyB0aGVuCisKK2VjaG8gIiRhc19tZToxMjgzMDogY2hlY2tpbmcgZm9yIHRlcm1pbmFsLWNhcGFiaWxpdHkgZGF0YWJhc2UgZnVuY3Rpb25zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRlcm1pbmFsLWNhcGFiaWxpdHkgZGF0YWJhc2UgZnVuY3Rpb25zLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9jZ2V0ZW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI4MzcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworCWNoYXIgdGVtcFsxMjhdOworCWNoYXIgKmJ1ZiA9IHRlbXA7CisJY2hhciAqZGJfYXJyYXkgPSB0ZW1wOworCWNnZXRlbnQoJmJ1ZiwgLyogaW50ICosICovICZkYl9hcnJheSwgInZ0MTAwIik7CisJY2dldGNhcChidWYsICJ0YyIsICc9Jyk7CisJY2dldG1hdGNoKGJ1ZiwgInRjIik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyODU3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjg2MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyODYzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI4NjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9jZ2V0ZW50PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9jZ2V0ZW50PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCitlY2hvICIkYXNfbWU6MTI4Nzg6IHJlc3VsdDogJGNmX2N2X2NnZXRlbnQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2NnZXRlbnQiID4mNgordGVzdCAiJGNmX2N2X2NnZXRlbnQiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfQlNEX0NHRVRFTlQgMQorRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZToxMjg4NjogY2hlY2tpbmcgZm9yIGlzYXNjaWkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXNhc2NpaS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfaGF2ZV9pc2FzY2lpK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyODkzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgoraW50CittYWluICgpCit7CitpbnQgeCA9IGlzYXNjaWkoJyAnKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5MDU6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTA4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5MTE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjkxNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2hhdmVfaXNhc2NpaT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfaGF2ZV9pc2FzY2lpPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjEyOTI1OiByZXN1bHQ6ICRjZl9jdl9oYXZlX2lzYXNjaWkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2hhdmVfaXNhc2NpaSIgPiY2Cit0ZXN0ICIkY2ZfY3ZfaGF2ZV9pc2FzY2lpIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0lTQVNDSUkgMQorRU9GCisKK2lmIHRlc3QgIiRhY19jdl9mdW5jX3NpZ2FjdGlvbiIgPSB5ZXM7IHRoZW4KK2VjaG8gIiRhc19tZToxMjkzMjogY2hlY2tpbmcgd2hldGhlciBzaWdhY3Rpb24gbmVlZHMgX1BPU0lYX1NPVVJDRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc2lnYWN0aW9uIG5lZWRzIF9QT1NJWF9TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyOTM1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgoraW50CittYWluICgpCit7CitzdHJ1Y3Qgc2lnYWN0aW9uIGFjdAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjk0OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI5NTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5NTU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjk1ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIHNpZ2FjdF9iYWQ9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyOTY2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2RlZmluZSBfUE9TSVhfU09VUkNFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzaWdhY3Rpb24gYWN0CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyOTgxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjk4NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjk4NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgc2lnYWN0X2JhZD15ZXMKKwkgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU1ZSNF9BQ1RJT04gMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorc2lnYWN0X2JhZD11bmtub3duCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6MTMwMDU6IHJlc3VsdDogJHNpZ2FjdF9iYWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHNpZ2FjdF9iYWQiID4mNgorZmkKKworZWNobyAiJGFzX21lOjEzMDA5OiBjaGVja2luZyBpZiBuYW5vc2xlZXAgcmVhbGx5IHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbmFub3NsZWVwIHJlYWxseSB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZnVuY19uYW5vc2xlZXArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgY2ZfY3ZfZnVuY19uYW5vc2xlZXA9dW5rbm93bgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMDE5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKK2ludCBtYWluKCkgeworCXN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjsKKwlpbnQgY29kZTsKKwl0czEudHZfc2VjICA9IDA7CisJdHMxLnR2X25zZWMgPSA3NTAwMDAwMDA7CisJdHMyLnR2X3NlYyAgPSAwOworCXRzMi50dl9uc2VjID0gMDsKKwllcnJubyA9IDA7CisJY29kZSA9IG5hbm9zbGVlcCgmdHMxLCAmdHMyKTsgLyogb24gZmFpbHVyZSBlcnJubyBpcyBFTk9TWVMuICovCisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufShjb2RlICE9IDApOworfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMwNDQ6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMDQ3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzA0OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMDUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZnVuY19uYW5vc2xlZXA9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9mdW5jX25hbm9zbGVlcD1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK2VjaG8gIiRhc19tZToxMzA2NDogcmVzdWx0OiAkY2ZfY3ZfZnVuY19uYW5vc2xlZXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2Z1bmNfbmFub3NsZWVwIiA+JjYKKwordGVzdCAiJGNmX2N2X2Z1bmNfbmFub3NsZWVwIiA9ICJ5ZXMiICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkFOT1NMRUVQIDEKK0VPRgorCitmb3IgYWNfaGVhZGVyIGluIFwKK3Rlcm1pby5oIFwKK3Rlcm1pb3MuaCBcCit1bmlzdGQuaCBcCisKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZToxMzA3ODogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzA4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMwODg6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjEzMDk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMzExMzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitFT0YKKworZmkKK2RvbmUKKworaWYgdGVzdCAiJElTQyIgPSB5ZXMgOyB0aGVuCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3Rlcm1pby5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6MTMxMjg6IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTMxMzQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMTM4OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxMzE0NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTMxNjM6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2ZpCitpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3Rlcm1pb3NfaCIgPSB5ZXMgOyB0aGVuCisJY2FzZSAiJENGTEFHUyAkQ1BQRkxBR1MiIGluCisJKi1EX1BPU0lYX1NPVVJDRSopCisJCXRlcm1pb3NfYmFkPWR1bm5vIDs7CisJKikJdGVybWlvc19iYWQ9bWF5YmUgOzsKKwllc2FjCisJaWYgdGVzdCAiJHRlcm1pb3NfYmFkIiA9IG1heWJlIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMzE4MTogY2hlY2tpbmcgd2hldGhlciB0ZXJtaW9zLmggbmVlZHMgX1BPU0lYX1NPVVJDRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGVybWlvcy5oIG5lZWRzIF9QT1NJWF9TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzE4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8dGVybWlvcy5oPgoraW50CittYWluICgpCit7CitzdHJ1Y3QgdGVybWlvcyBmb287IGludCB4ID0gZm9vLmNfaWZsYWcKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMxOTY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMTk5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMjAyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMyMDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICB0ZXJtaW9zX2JhZD1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzIxMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2luY2x1ZGUgPHRlcm1pb3MuaD4KK2ludAorbWFpbiAoKQoreworc3RydWN0IHRlcm1pb3MgZm9vOyBpbnQgeCA9IGZvby5jX2lmbGFnCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMjI3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzIzMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzIzMzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMjM2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgdGVybWlvc19iYWQ9dW5rbm93bgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit0ZXJtaW9zX2JhZD15ZXMgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU1ZSNF9URVJNSU8gMQorRU9GCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCWVjaG8gIiRhc19tZToxMzI1MTogcmVzdWx0OiAkdGVybWlvc19iYWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHRlcm1pb3NfYmFkIiA+JjYKKwlmaQorZmkKKworZWNobyAiJGFzX21lOjEzMjU2OiBjaGVja2luZyBmb3IgdGNnZXRhdHRyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRjZ2V0YXR0ci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfaGF2ZV90Y2dldGF0dHIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzI2MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNkZWZpbmUgVFRZIHN0cnVjdCB0ZXJtaW9zCisjZWxzZQorI2lmZGVmIEhBVkVfVEVSTUlPX0gKKyNpbmNsdWRlIDx0ZXJtaW8uaD4KKyNkZWZpbmUgVFRZIHN0cnVjdCB0ZXJtaW8KKyNlbmRpZgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCitUVFkgZm9vOwordGNnZXRhdHRyKDEsICZmb28pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMyOTE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMjk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMyOTc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzMwMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2hhdmVfdGNnZXRhdHRyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9oYXZlX3RjZ2V0YXR0cj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTMzMTA6IHJlc3VsdDogJGNmX2N2X2hhdmVfdGNnZXRhdHRyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9oYXZlX3RjZ2V0YXR0ciIgPiY2Cit0ZXN0ICIkY2ZfY3ZfaGF2ZV90Y2dldGF0dHIiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVENHRVRBVFRSIDEKK0VPRgorCitlY2hvICIkYXNfbWU6MTMzMTY6IGNoZWNraW5nIGZvciB2c3NjYW5mIGZ1bmN0aW9uIG9yIHdvcmthcm91bmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdnNzY2FuZiBmdW5jdGlvbiBvciB3b3JrYXJvdW5kLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9mdW5jX3Zzc2NhbmYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzMyMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CisKKwl2YV9saXN0IGFwOworCXZzc2NhbmYoImZyb20iLCAiJWQiLCBhcCkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMzM5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzM0MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMzQ1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMzNDg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9mdW5jX3Zzc2NhbmY9dnNzY2FuZgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTMzNTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworCisgICAgRklMRSBzdHJidWY7CisgICAgY2hhciAqc3RyID0gImZyb20iOworCisgICAgc3RyYnVmLl9mbGFnID0gX0lPUkVBRDsKKyAgICBzdHJidWYuX3B0ciA9IHN0cmJ1Zi5fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAgICBzdHJidWYuX2NudCA9IHN0cmxlbihzdHIpOworICAgIHN0cmJ1Zi5fZmlsZSA9IF9ORklMRTsKKyAgICByZXR1cm4gKHZmc2NhbmYoJnN0cmJ1ZiwgIiVkIiwgYXApKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMzNzg6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMzgxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMzODQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzM4NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2Z1bmNfdnNzY2FuZj12ZnNjYW5mCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzM5NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CisKKyAgICBGSUxFIHN0cmJ1ZjsKKyAgICBjaGFyICpzdHIgPSAiZnJvbSI7CisKKyAgICBzdHJidWYuX2ZsYWcgPSBfSU9SRUFEOworICAgIHN0cmJ1Zi5fcHRyID0gc3RyYnVmLl9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKikgc3RyOworICAgIHN0cmJ1Zi5fY250ID0gc3RybGVuKHN0cik7CisgICAgc3RyYnVmLl9maWxlID0gX05GSUxFOworICAgIHJldHVybiAoX2Rvc2Nhbigmc3RyYnVmLCAiJWQiLCBhcCkpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzQxNzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM0MjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzQyMzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzNDI2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZnVuY192c3NjYW5mPV9kb3NjYW4KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjZl9jdl9mdW5jX3Zzc2NhbmY9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTM0NDE6IHJlc3VsdDogJGNmX2N2X2Z1bmNfdnNzY2FuZiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZnVuY192c3NjYW5mIiA+JjYKKworY2FzZSAkY2ZfY3ZfZnVuY192c3NjYW5mIGluICModmkKK3Zzc2NhbmYpIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVlNTQ0FORiAxCitFT0YKKzs7ICModmkKK3Zmc2NhbmYpIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVkZTQ0FORiAxCitFT0YKKzs7ICModmkKK19kb3NjYW4pIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfX0RPU0NBTiAxCitFT0YKKzs7Citlc2FjCisKK2VjaG8gIiRhc19tZToxMzQ1OTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWtzdGVtcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIG1rc3RlbXAuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2Z1bmNfbWtzdGVtcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitybSAtZiBjb25mdGVzdCoKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGVjaG8gIiRhc19tZToxMzQ2NzogY2hlY2tpbmcgZm9yIG1rc3RlbXAiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWtzdGVtcC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19ta3N0ZW1wK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTM0NzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbWtzdGVtcCAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBta3N0ZW1wICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9ta3N0ZW1wKSB8fCBkZWZpbmVkIChfX3N0dWJfX19ta3N0ZW1wKQorY2hva2UgbWUKKyNlbHNlCitmID0gbWtzdGVtcDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzUwNDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM1MDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzUxMDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzNTEzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19ta3N0ZW1wPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX21rc3RlbXA9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEzNTIzOiByZXN1bHQ6ICRhY19jdl9mdW5jX21rc3RlbXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfbWtzdGVtcCIgPiY2CisKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzUyOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQgbWFpbigpCit7CisJY2hhciAqdG1wbCA9ICJjb25mdGVzdFhYWFhYWCI7CisJY2hhciBuYW1lWzJdWzgwXTsKKwlpbnQgbjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc2I7CisKKwl1bWFzaygwNzcpOworCWZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKKwkJc3RyY3B5KG5hbWVbbl0sIHRtcGwpOworCQlpZiAoKGZkID0gbWtzdGVtcChuYW1lW25dKSkgPj0gMCkgeworCQkJaWYgKCFzdHJjbXAobmFtZVtuXSwgdG1wbCkKKwkJCSB8fCBzdGF0KG5hbWVbbl0sICZzYikgIT0gMAorCQkJIHx8IChzYi5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHCisJCQkgfHwgKHNiLnN0X21vZGUgJiAwNzcpICE9IDApIHsKKwkJCQlyZXN1bHQgPSAxOworCQkJfQorCQkJY2xvc2UoZmQpOworCQl9CisJfQorCWlmIChyZXN1bHQgPT0gMAorCSAmJiAhc3RyY21wKG5hbWVbMF0sIG5hbWVbMV0pKQorCQlyZXN1bHQgPSAxOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmVzdWx0KTsKK30KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNTY2OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzU2OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM1NzE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzU3NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2Z1bmNfbWtzdGVtcD15ZXMKKworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfZnVuY19ta3N0ZW1wPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2VjaG8gIiRhc19tZToxMzU4OTogcmVzdWx0OiAkY2ZfY3ZfZnVuY19ta3N0ZW1wIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9mdW5jX21rc3RlbXAiID4mNgoraWYgdGVzdCAiJGNmX2N2X2Z1bmNfbWtzdGVtcCIgPSB5ZXMgOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9NS1NURU1QIDEKK0VPRgorCitmaQorCisjIHNldHVwIGZvciBwcm90b3R5cGUgb2YgZmFsbGJhY2sgZm9yIHZzc2NhbmYoKQorCitpZiB0ZXN0ICIkY2ZfY3ZfZnVuY192c3NjYW5mIiA9IHZzc2NhbmYgOyB0aGVuCisJSEFWRV9WU1NDQU5GPTEKK2Vsc2UKKwlIQVZFX1ZTU0NBTkY9MAorZmkKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6MTM2MDc6IFdBUk5JTkc6IGNyb3NzIGNvbXBpbGluZzogYXNzdW1lIHNldHZidWYgcGFyYW1zIG5vdCByZXZlcnNlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNyb3NzIGNvbXBpbGluZzogYXNzdW1lIHNldHZidWYgcGFyYW1zIG5vdCByZXZlcnNlZCIgPiYyO30KK2Vsc2UKKwllY2hvICIkYXNfbWU6MTM2MTA6IGNoZWNraW5nIHdoZXRoZXIgc2V0dmJ1ZiBhcmd1bWVudHMgYXJlIHJldmVyc2VkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzZXR2YnVmIGFyZ3VtZW50cyBhcmUgcmV2ZXJzZWQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOjEzNjE2OiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzNjIxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogSWYgc2V0dmJ1ZiBoYXMgdGhlIHJldmVyc2VkIGZvcm1hdCwgZXhpdCAwLiAqLworaW50CittYWluICgpCit7CisgIC8qIFRoaXMgY2FsbCBoYXMgdGhlIGFyZ3VtZW50cyByZXZlcnNlZC4KKyAgICAgQSByZXZlcnNlZCBzeXN0ZW0gbWF5IGNoZWNrIGFuZCBzZWUgdGhhdCB0aGUgYWRkcmVzcyBvZiBtYWluCisgICAgIGlzIG5vdCBfSU9MQkYsIF9JT05CRiwgb3IgX0lPRkJGLCBhbmQgcmV0dXJuIG5vbnplcm8uICAqLworICBpZiAoc2V0dmJ1ZihzdGRvdXQsIF9JT0xCRiwgKGNoYXIgKikgbWFpbiwgQlVGU0laKSAhPSAwKQorICAgICRhY19tYWluX3JldHVybigxKTsKKyAgcHV0YygnXHInLCBzdGRvdXQpOworICAkYWNfbWFpbl9yZXR1cm4oMCk7CQkJLyogTm9uLXJldmVyc2VkIHN5c3RlbXMgc2VndiBoZXJlLiAgKi8KK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzYzODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM2NDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNjQzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM2NDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZQorZmkKK2VjaG8gIiRhc19tZToxMzY1OTogcmVzdWx0OiAkYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQiID4mNgoraWYgdGVzdCAkYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFNFVFZCVUZfUkVWRVJTRUQgMQorRU9GCisKK2ZpCisKK2ZpCitlY2hvICIkYXNfbWU6MTM2NzA6IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaWduYWwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzY3NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgc2lnbmFsCisjIHVuZGVmIHNpZ25hbAorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgdm9pZCAoKnNpZ25hbCAoaW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsKKyNlbHNlCit2b2lkICgqc2lnbmFsICgpKSAoKTsKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK2ludCBpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzY5ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM3MDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM3MDQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzcwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfdHlwZV9zaWduYWw9aW50CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEzNzE3OiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduYWwiID4mNgorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFJFVFNJR1RZUEUgJGFjX2N2X3R5cGVfc2lnbmFsCitFT0YKKworZWNobyAiJGFzX21lOjEzNzI0OiBjaGVja2luZyBmb3IgdHlwZSBzaWdhY3Rpb25fdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0eXBlIHNpZ2FjdGlvbl90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl90eXBlX3NpZ2FjdGlvbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzczMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KK2ludAorbWFpbiAoKQoreworc2lnYWN0aW9uX3QgeAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzc0NDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM3NDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM3NTA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzc1MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3R5cGVfc2lnYWN0aW9uPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl90eXBlX3NpZ2FjdGlvbj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworZWNobyAiJGFzX21lOjEzNzY0OiByZXN1bHQ6ICRjZl9jdl90eXBlX3NpZ2FjdGlvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdHlwZV9zaWdhY3Rpb24iID4mNgordGVzdCAiJGNmX2N2X3R5cGVfc2lnYWN0aW9uIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1RZUEVfU0lHQUNUSU9OIDEKK0VPRgorCitlY2hvICIkYXNfbWU6MTM3NzA6IGNoZWNraW5nIGRlY2xhcmF0aW9uIG9mIHNpemUtY2hhbmdlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVjbGFyYXRpb24gb2Ygc2l6ZS1jaGFuZ2UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3NpemVjaGFuZ2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIGNmX2N2X3NpemVjaGFuZ2U9dW5rbm93bgorICAgIGNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworZm9yIGNmX29wdHMgaW4gIiIgIk5FRURfUFRFTV9IIgorZG8KKworICAgIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKyAgICB0ZXN0IC1uICIkY2Zfb3B0cyIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRCRjZl9vcHRzIgorICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTM3ODUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfVEVSTUlPU19ICisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RFUk1JT19ICisjaW5jbHVkZSA8dGVybWlvLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIE5FRURfUFRFTV9ICisvKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgU0NPOiAgdGhleSBuZWdsZWN0ZWQgdG8gZGVmaW5lIHN0cnVjdCB3aW5zaXplIGluCisgKiB0ZXJtaW9zLmggLS0gaXQncyBvbmx5IGluIHRlcm1pby5oIGFuZCBwdGVtLmgKKyAqLworI2luY2x1ZGUgICAgICAgIDxzeXMvc3RyZWFtLmg+CisjaW5jbHVkZSAgICAgICAgPHN5cy9wdGVtLmg+CisjZW5kaWYKKyNpZiAhZGVmaW5lZChzdW4pIHx8ICFkZWZpbmVkKEhBVkVfVEVSTUlPU19IKQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgVElPQ0dTSVpFCisJc3RydWN0IHR0eXNpemUgd2luOwkvKiBGSVhNRTogd2hhdCBzeXN0ZW0gaXMgdGhpcz8gKi8KKwlpbnQgeSA9IHdpbi50c19saW5lczsKKwlpbnQgeCA9IHdpbi50c19jb2xzOworI2Vsc2UKKyNpZmRlZiBUSU9DR1dJTlNaCisJc3RydWN0IHdpbnNpemUgd2luOworCWludCB5ID0gd2luLndzX3JvdzsKKwlpbnQgeCA9IHdpbi53c19jb2w7CisjZWxzZQorCW5vIFRJT0NHU0laRSBvciBUSU9DR1dJTlNaCisjZW5kaWYgLyogVElPQ0dXSU5TWiAqLworI2VuZGlmIC8qIFRJT0NHU0laRSAqLworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzODI5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzgzMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzgzNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzODM4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfc2l6ZWNoYW5nZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfc2l6ZWNoYW5nZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCWlmIHRlc3QgIiRjZl9jdl9zaXplY2hhbmdlIiA9IHllcyA7IHRoZW4KKwkJZWNobyAic2l6ZS1jaGFuZ2Ugc3VjY2VlZGVkICgkY2Zfb3B0cykiID4mNQorCQl0ZXN0IC1uICIkY2Zfb3B0cyIgJiYgY2ZfY3Zfc2l6ZWNoYW5nZT0iJGNmX29wdHMiCisJCWJyZWFrCisJZmkKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZToxMzg1NzogcmVzdWx0OiAkY2ZfY3Zfc2l6ZWNoYW5nZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfc2l6ZWNoYW5nZSIgPiY2CitpZiB0ZXN0ICIkY2ZfY3Zfc2l6ZWNoYW5nZSIgIT0gbm8gOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TSVpFQ0hBTkdFIDEKK0VPRgorCisJY2FzZSAkY2ZfY3Zfc2l6ZWNoYW5nZSBpbiAjKHZpCisJTkVFRCopCisJCWNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGNmX2N2X3NpemVjaGFuZ2UgIDEKK0VPRgorCisJCTs7CisJZXNhYworZmkKKworZWNobyAiJGFzX21lOjEzODc0OiBjaGVja2luZyBmb3IgbWVtbW92ZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtZW1tb3ZlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX21lbW1vdmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzg4MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBtZW1tb3ZlICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIG1lbW1vdmUgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX21lbW1vdmUpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX21lbW1vdmUpCitjaG9rZSBtZQorI2Vsc2UKK2YgPSBtZW1tb3ZlOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzOTExOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzkxNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzOTE3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM5MjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX21lbW1vdmU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2Z1bmNfbWVtbW92ZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTM5MzA6IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWVtbW92ZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tZW1tb3ZlIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtbW92ZSA9IHllczsgdGhlbgorICA6CitlbHNlCisKK2VjaG8gIiRhc19tZToxMzkzNjogY2hlY2tpbmcgZm9yIGJjb3B5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGJjb3B5Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX2Jjb3B5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTM5NDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgYmNvcHkgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgYmNvcHkgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2Jjb3B5KSB8fCBkZWZpbmVkIChfX3N0dWJfX19iY29weSkKK2Nob2tlIG1lCisjZWxzZQorZiA9IGJjb3B5OworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzOTczOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzk3NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzOTc5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM5ODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX2Jjb3B5PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX2Jjb3B5PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMzk5MjogcmVzdWx0OiAkYWNfY3ZfZnVuY19iY29weSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19iY29weSIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2Jjb3B5ID0geWVzOyB0aGVuCisKKwllY2hvICIkYXNfbWU6MTM5OTY6IGNoZWNraW5nIGlmIGJjb3B5IGRvZXMgb3ZlcmxhcHBpbmcgbW92ZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBiY29weSBkb2VzIG92ZXJsYXBwaW5nIG1vdmVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9nb29kX2Jjb3B5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwkJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgY2ZfY3ZfZ29vZF9iY29weT11bmtub3duCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQwMDYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKwlzdGF0aWMgY2hhciBkYXRhW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1d3d4eXoiOworCWNoYXIgdGVtcFs0MF07CisJYmNvcHkoZGF0YSwgdGVtcCwgc2l6ZW9mKGRhdGEpKTsKKwliY29weSh0ZW1wKzEwLCB0ZW1wLCAxNSk7CisJYmNvcHkodGVtcCs1LCB0ZW1wKzE1LCAxMCk7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSAoc3RyY21wKHRlbXAsICJrbG1ub3BxcnN0dXd3eHlwcXJzdHV3d3h5eiIpKTsKK30KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0MDIwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDAyMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQwMjU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDAyODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2dvb2RfYmNvcHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9nb29kX2Jjb3B5PW5vCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitlY2hvICIkYXNfbWU6MTQwNDE6IHJlc3VsdDogJGNmX2N2X2dvb2RfYmNvcHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2dvb2RfYmNvcHkiID4mNgorCitlbHNlCisgIGNmX2N2X2dvb2RfYmNvcHk9bm8KK2ZpCisKKwlpZiB0ZXN0ICIkY2ZfY3ZfZ29vZF9iY29weSIgPSB5ZXMgOyB0aGVuCisJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9PS19CQ09QWSAxCitFT0YKKworCWVsc2UKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX01ZX01FTU1PVkUgMQorRU9GCisKKwlmaQorCitmaQorCitlY2hvICIkYXNfbWU6MTQwNjI6IGNoZWNraW5nIGlmIHBvbGwgcmVhbGx5IHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgcG9sbCByZWFsbHkgd29ya3MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3dvcmtpbmdfcG9sbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl93b3JraW5nX3BvbGw9dW5rbm93bgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0MDcyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9QT0xMX0gKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjZW5kaWYKK2ludCBtYWluKCkgeworCXN0cnVjdCBwb2xsZmQgbXlmZHM7CisJaW50IHJldDsKKworCW15ZmRzLmZkID0gMDsKKwlteWZkcy5ldmVudHMgPSBQT0xMSU47CisKKwlyZXQgPSBwb2xsKCZteWZkcywgMSwgMTAwKTsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KHJldCAhPSAwKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDA5MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQwOTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0MDk4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQxMDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl93b3JraW5nX3BvbGw9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl93b3JraW5nX3BvbGw9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitlY2hvICIkYXNfbWU6MTQxMTM6IHJlc3VsdDogJGNmX2N2X3dvcmtpbmdfcG9sbCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfd29ya2luZ19wb2xsIiA+JjYKK3Rlc3QgIiRjZl9jdl93b3JraW5nX3BvbGwiID0gInllcyIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9XT1JLSU5HX1BPTEwgMQorRU9GCisKKyMgc3BlY2lhbCBjaGVjayBmb3IgdGVzdC9kaXR0by5jCisKK2VjaG8gIiRhc19tZToxNDEyMTogY2hlY2tpbmcgZm9yIG9wZW5wdHkgaW4gLWx1dGlsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9wZW5wdHkgaW4gLWx1dGlsLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfdXRpbF9vcGVucHR5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sdXRpbCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0MTI5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBvcGVucHR5ICgpOworaW50CittYWluICgpCit7CitvcGVucHR5ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQxNDg6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0MTUxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQxNTQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDE1NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl91dGlsX29wZW5wdHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl91dGlsX29wZW5wdHk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjE0MTY4OiByZXN1bHQ6ICRhY19jdl9saWJfdXRpbF9vcGVucHR5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfdXRpbF9vcGVucHR5IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl91dGlsX29wZW5wdHkgPSB5ZXM7IHRoZW4KKyAgY2ZfY3ZfbGliX3V0aWw9eWVzCitlbHNlCisgIGNmX2N2X2xpYl91dGlsPW5vCitmaQorCitlY2hvICIkYXNfbWU6MTQxNzY6IGNoZWNraW5nIGZvciBvcGVucHR5IGhlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvcGVucHR5IGhlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZnVuY19vcGVucHR5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyAgICBjZl9zYXZlX0xJQlM9IiRMSUJTIgorICAgIHRlc3QgJGNmX2N2X2xpYl91dGlsID0geWVzICYmIExJQlM9Ii1sdXRpbCAkTElCUyIKKyAgICBmb3IgY2ZfaGVhZGVyIGluIHB0eS5oIGxpYnV0aWwuaCB1dGlsLmgKKyAgICBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQxODcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JGNmX2hlYWRlcj4KKworaW50CittYWluICgpCit7CisKKyAgICBpbnQgeCA9IG9wZW5wdHkoKGludCAqKTAsIChpbnQgKikwLCAoY2hhciAqKTAsCisgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0ZXJtaW9zICopMCwgKHN0cnVjdCB3aW5zaXplICopMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0MjA0OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDIwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0MjEwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQyMTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisgICAgICAgIGNmX2N2X2Z1bmNfb3BlbnB0eT0kY2ZfaGVhZGVyCisgICAgICAgIGJyZWFrCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgIGNmX2N2X2Z1bmNfb3BlbnB0eT1ubworCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGRvbmUKKyAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorCitmaQorZWNobyAiJGFzX21lOjE0MjMxOiByZXN1bHQ6ICRjZl9jdl9mdW5jX29wZW5wdHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2Z1bmNfb3BlbnB0eSIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9mdW5jX29wZW5wdHkiICE9IG5vIDsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgVVNFX09QRU5QVFlfSEVBREVSIDwkY2ZfY3ZfZnVuY19vcGVucHR5PgorRU9GCisKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfWFRFUk1fUFRZIDEKK0VPRgorCisgICAgaWYgdGVzdCAiJGNmX2N2X2xpYl91dGlsIiA9IHllcyA7IHRoZW4KKyAgICAgICAgVEVTVF9MSUJTPSItbHV0aWwgJFRFU1RfTElCUyIKKyAgICBmaQorZmkKKworaWYgdGVzdCAiJHdpdGhfaGFzaGVkX2RiIiAhPSBubyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfSEFTSEVEX0RCIDEKK0VPRgorCitjYXNlICR3aXRoX2hhc2hlZF9kYiBpbiAjKHZpCit5ZXN8KmFibGUqKSAjKHZpCisgICAgOzsKKyopCisgICAgaWYgdGVzdCAtZCAiJHdpdGhfaGFzaGVkX2RiIiA7IHRoZW4KKworaWYgdGVzdCAtbiAiJHdpdGhfaGFzaGVkX2RiL2luY2x1ZGUiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkd2l0aF9oYXNoZWRfZGIvaW5jbHVkZQorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQyODMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3ByaW50ZigiSGVsbG8iKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDI5NTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQyOTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQzMDE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDMwNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTQzMjE6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCAuLi4iIDE+JjUKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCitpZiB0ZXN0IC1uICIkd2l0aF9oYXNoZWRfZGIvbGliIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9saWJkaXIgaW4gJHdpdGhfaGFzaGVkX2RiL2xpYgorICBkbworICAgIGlmIHRlc3QgJGNmX2FkZF9saWJkaXIgPSAvdXNyL2xpYiA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKyAgICB0aGVuCisgICAgICBjZl9oYXZlX2xpYmRpcj1ubworICAgICAgaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisgICAgICAgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKyAgICAgICAgZm9yIGNmX3Rlc3RfbGliZGlyIGluICRMREZMQUdTICRMSUJTIDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisgICAgICAgICAgICBjZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKyAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNDM1NTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIC4uLiIgMT4mNQorCisgICAgICAgIExERkxBR1M9Ii1MJGNmX2FkZF9saWJkaXIgJExERkxBR1MiCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKK2ZpCisKKyAgICBmaQorZXNhYworCitlY2hvICIkYXNfbWU6MTQzNjY6IGNoZWNraW5nIGZvciBkYi5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRiLmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9kYl9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQzNzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGRiLmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0Mzc2OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxNDM4MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICBhY19jdl9oZWFkZXJfZGJfaD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2hlYWRlcl9kYl9oPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTQ0MDE6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9kYl9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfZGJfaCIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZGJfaCA9IHllczsgdGhlbgorCitlY2hvICIkYXNfbWU6MTQ0MDU6IGNoZWNraW5nIGZvciB2ZXJzaW9uIG9mIGRiIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHZlcnNpb24gb2YgZGIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2hhc2hlZF9kYl92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NmX2N2X2hhc2hlZF9kYl92ZXJzaW9uPXVua25vd24KKworZm9yIGNmX2RiX3ZlcnNpb24gaW4gMSAyIDMgNCA1CitkbworCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTQ0MTY6IHRlc3RpbmcgY2hlY2tpbmcgZm9yIGRiIHZlcnNpb24gJGNmX2RiX3ZlcnNpb24gLi4uIiAxPiY1CisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0NDE5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxkYi5oPgorCisjaWZkZWYgREJfVkVSU0lPTl9NQUpPUgorCS8qIGRiMiAoREJfVkVSU0lPTl9NQUpPUj0yKSBoYXMgYWxzbyBEQl9WRVJTSU9OX01JTk9SLCB0ZXN0ZWQgd2l0aCA3ICovCisjaWYgJGNmX2RiX3ZlcnNpb24gPT0gREJfVkVSU0lPTl9NQUpPUgorCS8qIG9rICovCisjZWxzZQorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorI2Vsc2UKKyNpZiAkY2ZfZGJfdmVyc2lvbiA9PSAxCisJLyogb2s6IGFzc3VtaW5nIHRoaXMgaXMgREIgMS44LjUgKi8KKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZW5kaWYKKworaW50CittYWluICgpCit7CitEQlQgKmZvbyA9IDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ0NDk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0NDUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NDU1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ0NTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisJY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb249JGNmX2RiX3ZlcnNpb24KKwlicmVhaworCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZToxNDQ3MjogcmVzdWx0OiAkY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uIiA9IHVua25vd24gOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZToxNDQ3NjogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgdmVyc2lvbiBvZiBkYiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZGV0ZXJtaW5lIHZlcnNpb24gb2YgZGIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKworZWNobyAiJGFzX21lOjE0NDgxOiBjaGVja2luZyBmb3IgZGIgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRiIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfaGFzaGVkX2RiX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfaGFzaGVkX2RiX2xpYnM9dW5rbm93bgorZm9yIGNmX2RiX2xpYnMgaW4gIiIgZGIkY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24gZGItJGNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uIGRiICcnCitkbworCWNmX3NhdmVfbGlicz0iJExJQlMiCisJaWYgdGVzdCAtbiAiJGNmX2RiX2xpYnMiOyB0aGVuCisJCUxJQlM9Ii1sJGNmX2RiX2xpYnMgJExJQlMiCisJZmkKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjE0NDk1OiB0ZXN0aW5nIGNoZWNraW5nIGZvciBsaWJyYXJ5ICIkY2ZfZGJfbGlicyIgLi4uIiAxPiY1CisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0NDk4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxkYi5oPgorCitpbnQKK21haW4gKCkKK3sKKworCWNoYXIgKnBhdGggPSAiL3RtcC9mb28iOworI2lmZGVmIERCX1ZFUlNJT05fTUFKT1IKKyNpZiBEQl9WRVJTSU9OX01BSk9SID49IDQKKwlEQiAqcmVzdWx0ID0gMDsKKwlkYl9jcmVhdGUoJnJlc3VsdCwgTlVMTCwgMCk7CisJcmVzdWx0LT5vcGVuKHJlc3VsdCwKKwkJTlVMTCwKKwkJcGF0aCwKKwkJcGF0aCwKKwkJREJfSEFTSCwKKwkJREJfQ1JFQVRFLAorCQkwNjQ0KTsKKyNlbGlmIERCX1ZFUlNJT05fTUFKT1IgPj0gMworCURCICpyZXN1bHQgPSAwOworCWRiX2NyZWF0ZSgmcmVzdWx0LCBOVUxMLCAwKTsKKwlyZXN1bHQtPm9wZW4ocmVzdWx0LAorCQlwYXRoLAorCQlwYXRoLAorCQlEQl9IQVNILAorCQlEQl9DUkVBVEUsCisJCTA2NDQpOworI2VsaWYgREJfVkVSU0lPTl9NQUpPUiA+PSAyCisJREIgKnJlc3VsdCA9IDA7CisJZGJfb3BlbihwYXRoLAorCQlEQl9IQVNILAorCQlEQl9DUkVBVEUsCisJCTA2NDQsCisJCShEQl9FTlYgKikgMCwKKwkJKERCX0lORk8gKikgMCwKKwkJJnJlc3VsdCk7CisjZW5kaWYgLyogREJfVkVSU0lPTl9NQUpPUiAqLworI2Vsc2UKKwlEQiAqcmVzdWx0ID0gZGJvcGVuKHBhdGgsCisJCSAgICAgMiwKKwkJICAgICAwNjQ0LAorCQkgICAgIERCX0hBU0gsCisJCSAgICAgMCk7CisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KHJlc3VsdCAhPSAwKQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDU1MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ1NTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDU1OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0NTYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCWlmIHRlc3QgLW4gIiRjZl9kYl9saWJzIiA7IHRoZW4KKwkJY2ZfY3ZfaGFzaGVkX2RiX2xpYnM9JGNmX2RiX2xpYnMKKwllbHNlCisJCWNmX2N2X2hhc2hlZF9kYl9saWJzPWRlZmF1bHQKKwlmaQorCUxJQlM9IiRjZl9zYXZlX2xpYnMiCisJYnJlYWsKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxJQlM9IiRjZl9zYXZlX2xpYnMiCitkb25lCisKK2ZpCitlY2hvICIkYXNfbWU6MTQ1ODI6IHJlc3VsdDogJGNmX2N2X2hhc2hlZF9kYl9saWJzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9oYXNoZWRfZGJfbGlicyIgPiY2CisKKwlpZiB0ZXN0ICIkY2ZfY3ZfaGFzaGVkX2RiX2xpYnMiID0gdW5rbm93biA7IHRoZW4KKwkJeyB7IGVjaG8gIiRhc19tZToxNDU4NjogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgbGlicmFyeSBmb3IgZGIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBsaWJyYXJ5IGZvciBkYiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWVsaWYgdGVzdCAiJGNmX2N2X2hhc2hlZF9kYl9saWJzIiAhPSBkZWZhdWx0IDsgdGhlbgorCQlMSUJTPSItbCRjZl9jdl9oYXNoZWRfZGJfbGlicyAkTElCUyIKKwlmaQorZmkKKworZWxzZQorCisJeyB7IGVjaG8gIiRhc19tZToxNDU5NjogZXJyb3I6IENhbm5vdCBmaW5kIGRiLmgiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGZpbmQgZGIuaCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitmaQorCitmaQorCitpZiB0ZXN0IC16ICIkY2ZfdXNlcl9DRkxBR1MiICYmIHRlc3QgIiR3aXRoX25vX2xlYWtzIiA9IG5vIDsgdGhlbgorCUNGTEFHUz1gZWNobyAke0NGTEFHU30gfCBzZWQgLWUgJ3MlLWcgJSUnIC1lICdzJS1nJCUlJ2AKKwlDWFhGTEFHUz1gZWNobyAke0NYWEZMQUdTfSB8IHNlZCAtZSAncyUtZyAlJScgLWUgJ3MlLWckJSUnYAorZmkKKworIyBKdXN0IGluIGNhc2UsIGNoZWNrIGlmIHRoZSBDIGNvbXBpbGVyIGhhcyBhIGJvb2wgdHlwZS4KKworZWNobyAiJGFzX21lOjE0NjExOiBjaGVja2luZyBpZiB3ZSBzaG91bGQgaW5jbHVkZSBzdGRib29sLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgaW5jbHVkZSBzdGRib29sLmguLi4gJEVDSE9fQyIgPiY2CisKK2lmIHRlc3QgIiR7Y2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDYxOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworYm9vbCBmb28gPSBmYWxzZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDYzMTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ2MzQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ2Mzc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDY0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2hlYWRlcl9zdGRib29sX2g9MAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0NjQ3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmbmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK2Jvb2wgZm9vID0gZmFsc2UKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ2NjM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0NjY2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NjY5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ2NzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTEKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaD0wCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitpZiB0ZXN0ICIkY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSAxCit0aGVuCWVjaG8gIiRhc19tZToxNDY4NjogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UJZWNobyAiJGFzX21lOjE0Njg4OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2VjaG8gIiRhc19tZToxNDY5MjogY2hlY2tpbmcgZm9yIGJ1aWx0aW4gYm9vbCB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGJ1aWx0aW4gYm9vbCB0eXBlLi4uICRFQ0hPX0MiID4mNgorCitpZiB0ZXN0ICIke2NmX2N2X2NjX2Jvb2xfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDcwMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitpbnQKK21haW4gKCkKK3sKK2Jvb2wgeCA9IGZhbHNlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NzE1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDcxODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDcyMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0NzI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfY2NfYm9vbF90eXBlPTEKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfY2NfYm9vbF90eXBlPTAKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworaWYgdGVzdCAiJGNmX2N2X2NjX2Jvb2xfdHlwZSIgPSAxCit0aGVuCWVjaG8gIiRhc19tZToxNDczNzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UJZWNobyAiJGFzX21lOjE0NzM5OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyMgQ2hlY2sgZm9yIEMrKyBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MgKGFuZCBlbnN1cmUgdGhhdCBpdCdzIHRoZXJlISkKK2lmIHRlc3QgLW4gIiRDWFgiIDsgdGhlbgorCWFjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitpZiB0ZXN0IC1uICIkR1hYIiA7IHRoZW4KK2Nhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKK29zMiopICModmkKKwljZl9zdGRjcHBfbGlibmFtZT1zdGRjcHAKKwk7OworKikKKwljZl9zdGRjcHBfbGlibmFtZT1zdGRjKysKKwk7OworZXNhYworZWNobyAiJGFzX21lOjE0NzYxOiBjaGVja2luZyBmb3IgbGlicmFyeSAkY2Zfc3RkY3BwX2xpYm5hbWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSAkY2Zfc3RkY3BwX2xpYm5hbWUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2xpYnN0ZGNwcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2Zfc2F2ZT0iJExJQlMiCisJTElCUz0iJExJQlMgLWwkY2Zfc3RkY3BwX2xpYm5hbWUiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0NzcwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0cnN0cmVhbS5oPgoraW50CittYWluICgpCit7CisKK2NoYXIgYnVmWzgwXTsKK3N0cnN0cmVhbWJ1ZiBmb28oYnVmLCBzaXplb2YoYnVmKSkKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ3ODY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0Nzg5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ3OTI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDc5NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2xpYnN0ZGNwcD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfbGlic3RkY3BwPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxJQlM9IiRjZl9zYXZlIgorCitmaQorZWNobyAiJGFzX21lOjE0ODA3OiByZXN1bHQ6ICRjZl9jdl9saWJzdGRjcHAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2xpYnN0ZGNwcCIgPiY2Cit0ZXN0ICIkY2ZfY3ZfbGlic3RkY3BwIiA9IHllcyAmJiBDWFhMSUJTPSIkQ1hYTElCUyAtbCRjZl9zdGRjcHBfbGlibmFtZSIKK2ZpCisKKwllY2hvICIkYXNfbWU6MTQ4MTI6IGNoZWNraW5nIHdoZXRoZXIgJENYWCB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9wcm9nX0NYWF9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PENGX0VPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpCit7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KK0NGX0VPRgorIyBXZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4KKyMgZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLCB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9JyRDWFggLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDgyODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0ODMxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChldmFsIGVjaG8gIiRhc19tZToxNDgzMzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0ODM2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07Cit0aGVuCisgIGV2YWwgY2ZfY3ZfcHJvZ19DWFhfY19vPXllcworZWxzZQorICBldmFsIGNmX2N2X3Byb2dfQ1hYX2Nfbz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQoraWYgdGVzdCAkY2ZfY3ZfcHJvZ19DWFhfY19vID0geWVzOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNDg0NzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE0ODUwOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKwljYXNlICRHWFhfVkVSU0lPTiBpbgorCTEqfDIuMC02KikKKwkJY2ZfY3h4X2xpYnJhcnk9eWVzCisJCTs7CisJKi0yLjcqfDIuNyopCisKK2NmX2N4eF9saWJyYXJ5PXVua25vd24KK2Nhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKK29zMiopICModmkKKwljZl9ncHBfbGlibmFtZT1ncHAKKwk7OworKikKKwljZl9ncHBfbGlibmFtZT1nKysKKwk7OworZXNhYworaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwllY2hvICIkYXNfbWU6MTQ4NzA6IGNoZWNraW5nIGZvciBsaWIkY2ZfZ3BwX2xpYm5hbWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGliJGNmX2dwcF9saWJuYW1lLi4uICRFQ0hPX0MiID4mNgorCWNmX3NhdmU9IiRMSUJTIgorCUxJQlM9IiRMSUJTIC1sJGNmX2dwcF9saWJuYW1lIgorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQ4NzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JGNmX2dwcF9saWJuYW1lL2J1aWx0aW4uaD4KKworaW50CittYWluICgpCit7Cit0d29fYXJnX2Vycm9yX2hhbmRsZXJfdCBmb28yID0gbGliX2Vycm9yX2hhbmRsZXIKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0ODg5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDg5MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0ODk1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ4OTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jeHhfbGlicmFyeT15ZXMKKwkgQ1hYTElCUz0iJENYWExJQlMgLWwkY2ZfZ3BwX2xpYm5hbWUiCisJIGlmIHRlc3QgIiRjZl9ncHBfbGlibmFtZSIgPSBjcHAgOyB0aGVuCisJICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfR1BQX0JVSUxUSU5fSCAxCitFT0YKKworCSBlbHNlCisJICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfR1hYX0JVSUxUSU5fSCAxCitFT0YKKworCSBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0OTE3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPGJ1aWx0aW4uaD4KKworaW50CittYWluICgpCit7Cit0d29fYXJnX2Vycm9yX2hhbmRsZXJfdCBmb28yID0gbGliX2Vycm9yX2hhbmRsZXIKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0OTMxOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDkzNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0OTM3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ5NDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jeHhfbGlicmFyeT15ZXMKKwkgQ1hYTElCUz0iJENYWExJQlMgLWwkY2ZfZ3BwX2xpYm5hbWUiCisJIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfQlVJTFRJTl9IIDEKK0VPRgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N4eF9saWJyYXJ5PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMSUJTPSIkY2Zfc2F2ZSIKKwllY2hvICIkYXNfbWU6MTQ5NTc6IHJlc3VsdDogJGNmX2N4eF9saWJyYXJ5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jeHhfbGlicmFyeSIgPiY2CitmaQorCisJCTs7CisJKikKKwkJY2ZfY3h4X2xpYnJhcnk9bm8KKwkJOzsKKwllc2FjCisKKwlhY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KK2VjaG8gIiRhc19tZToxNDk3MzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDk5MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICAgICAgICAgICAgICAgICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ5OTU6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjE1MDAxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1MDI0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTAyODogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTUwMzQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorCitmaQorICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKK2ZpCitlY2hvICIkYXNfbWU6MTUwNzE6IHJlc3VsdDogJENYWENQUCIgPiY1CitlY2hvICIke0VDSE9fVH0kQ1hYQ1BQIiA+JjYKK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTA4MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICAgICAgICAgICAgICAgICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUwODY6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjE1MDkyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1MTE1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTExOTogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTUxMjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgOgorZWxzZQorICB7IHsgZWNobyAiJGFzX21lOjE1MTUzOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2siID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2siID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitmb3IgYWNfaGVhZGVyIGluIGlvc3RyZWFtIHR5cGVpbmZvCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6MTUxNjg6IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUxNzQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MTc4OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxNTE4NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxNTIwMzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitFT0YKKworZmkKK2RvbmUKKworICAgIGlmIHRlc3QgeCIkYWNfY3ZfaGVhZGVyX2lvc3RyZWFtIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgIGVjaG8gIiRhc19tZToxNTIxNDogY2hlY2tpbmcgaWYgaW9zdHJlYW0gdXNlcyBzdGQtbmFtZXNwYWNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgaW9zdHJlYW0gdXNlcyBzdGQtbmFtZXNwYWNlLi4uICRFQ0hPX0MiID4mNgorICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1MjE3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPGlvc3RyZWFtPgordXNpbmcgc3RkOjplbmRsOwordXNpbmcgc3RkOjpjZXJyOworaW50CittYWluICgpCit7CisKK2NlcnIgPDwgInRlc3RpbmciIDw8IGVuZGw7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUyMzQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1MjM3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MjQwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUyNDM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9pb3N0cmVhbV9uYW1lc3BhY2U9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2lvc3RyZWFtX25hbWVzcGFjZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBlY2hvICIkYXNfbWU6MTUyNTI6IHJlc3VsdDogJGNmX2lvc3RyZWFtX25hbWVzcGFjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfaW9zdHJlYW1fbmFtZXNwYWNlIiA+JjYKKyAgICAgICAgaWYgdGVzdCAiJGNmX2lvc3RyZWFtX25hbWVzcGFjZSIgPSB5ZXMgOyB0aGVuCisgICAgICAgICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBJT1NUUkVBTV9OQU1FU1BBQ0UgMQorRU9GCisKKyAgICAgICAgZmkKKyAgICBmaQorCitlY2hvICIkYXNfbWU6MTUyNjI6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBpbmNsdWRlIHN0ZGJvb2wuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIHNob3VsZCBpbmNsdWRlIHN0ZGJvb2wuaC4uLiAkRUNIT19DIiA+JjYKKworaWYgdGVzdCAiJHtjZl9jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1MjcwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7Citib29sIGZvbyA9IGZhbHNlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MjgyOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTI4NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTI4ODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1MjkxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaD0wCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUyOTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZuZGVmIF9fQkVPU19fCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworYm9vbCBmb28gPSBmYWxzZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTMxNDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUzMTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUzMjA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTMyMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2hlYWRlcl9zdGRib29sX2g9MQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTAKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2lmIHRlc3QgIiRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IDEKK3RoZW4JZWNobyAiJGFzX21lOjE1MzM3OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQllY2hvICIkYXNfbWU6MTUzMzk6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZWNobyAiJGFzX21lOjE1MzQzOiBjaGVja2luZyBmb3IgYnVpbHRpbiBib29sIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYnVpbHRpbiBib29sIHR5cGUuLi4gJEVDSE9fQyIgPiY2CisKK2lmIHRlc3QgIiR7Y2ZfY3ZfYnVpbHRpbl9ib29sK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1MzUxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK2ludAorbWFpbiAoKQoreworYm9vbCB4ID0gZmFsc2UKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUzNjY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1MzY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MzcyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUzNzU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9idWlsdGluX2Jvb2w9MQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9idWlsdGluX2Jvb2w9MAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCitpZiB0ZXN0ICIkY2ZfY3ZfYnVpbHRpbl9ib29sIiA9IDEKK3RoZW4JZWNobyAiJGFzX21lOjE1Mzg4OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQllY2hvICIkYXNfbWU6MTUzOTA6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZWNobyAiJGFzX21lOjE1Mzk0OiBjaGVja2luZyBmb3Igc2l6ZSBvZiBib29sIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNpemUgb2YgYm9vbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdHlwZV9vZl9ib29sK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwlybSAtZiBjZl90ZXN0Lm91dAorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X3R5cGVfb2ZfYm9vbD11bmtub3duCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTU0MDUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisKKyNpZmRlZiBIQVZFX0dYWF9CVUlMVElOX0gKKyNpbmNsdWRlIDxnKysvYnVpbHRpbi5oPgorI2VsaWYgSEFWRV9HUFBfQlVJTFRJTl9ICisjaW5jbHVkZSA8Z3BwL2J1aWx0aW4uaD4KKyNlbGlmIEhBVkVfQlVJTFRJTl9ICisjaW5jbHVkZSA8YnVpbHRpbi5oPgorI2VuZGlmCisKKyNlbHNlCisKKyNpZiAkY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCisjZW5kaWYKKworbWFpbigpCit7CisJRklMRSAqZnAgPSBmb3BlbigiY2ZfdGVzdC5vdXQiLCAidyIpOworCWlmIChmcCAhPSAwKSB7CisJCWJvb2wgeCA9IHRydWU7CisJCWlmICgoYm9vbCkoLXgpID49IDApCisJCQlmcHV0cygidW5zaWduZWQgIiwgZnApOworCQlpZiAoc2l6ZW9mKHgpID09IHNpemVvZihpbnQpKSAgICAgICBmcHV0cygiaW50IiwgIGZwKTsKKwkJZWxzZSBpZiAoc2l6ZW9mKHgpID09IHNpemVvZihjaGFyKSkgZnB1dHMoImNoYXIiLCBmcCk7CisJCWVsc2UgaWYgKHNpemVvZih4KSA9PSBzaXplb2Yoc2hvcnQpKWZwdXRzKCJzaG9ydCIsZnApOworCQllbHNlIGlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKGxvbmcpKSBmcHV0cygibG9uZyIsIGZwKTsKKwkJZmNsb3NlKGZwKTsKKwl9CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1NDQ3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTQ1MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU0NTI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTQ1NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3R5cGVfb2ZfYm9vbD1gY2F0IGNmX3Rlc3Qub3V0YAorCQkgaWYgdGVzdCAteiAiJGNmX2N2X3R5cGVfb2ZfYm9vbCI7IHRoZW4KKwkJICAgY2ZfY3ZfdHlwZV9vZl9ib29sPXVua25vd24KKwkJIGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bgorZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorCisJcm0gLWYgY2ZfdGVzdC5vdXQKK2VjaG8gIiRhc19tZToxNTQ3MzogcmVzdWx0OiAkY2ZfY3ZfdHlwZV9vZl9ib29sIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl90eXBlX29mX2Jvb2wiID4mNgoraWYgdGVzdCAiJGNmX2N2X3R5cGVfb2ZfYm9vbCIgPSB1bmtub3duIDsgdGhlbgorCWNhc2UgLiROQ1VSU0VTX0JPT0wgaW4gIyh2aQorCS5hdXRvfC4pIE5DVVJTRVNfQk9PTD11bnNpZ25lZDs7CisJZXNhYworCXsgZWNobyAiJGFzX21lOjE1NDc5OiBXQVJOSU5HOiBBc3N1bWluZyAkTkNVUlNFU19CT09MIGZvciB0eXBlIG9mIGJvb2wiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBBc3N1bWluZyAkTkNVUlNFU19CT09MIGZvciB0eXBlIG9mIGJvb2wiID4mMjt9CisJY2ZfY3ZfdHlwZV9vZl9ib29sPSROQ1VSU0VTX0JPT0wKK2ZpCisKK2VjaG8gIiRhc19tZToxNTQ4NDogY2hlY2tpbmcgZm9yIHNwZWNpYWwgZGVmaW5lcyBuZWVkZWQgZm9yIGV0aXAuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzcGVjaWFsIGRlZmluZXMgbmVlZGVkIGZvciBldGlwLmguLi4gJEVDSE9fQyIgPiY2CitjZl9zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCitjZl9yZXN1bHQ9Im5vbmUiCitmb3IgY2ZfbWF0aCBpbiAiIiBNQVRIX0gKK2RvCitmb3IgY2ZfZXhjcCBpbiAiIiBNQVRIX0VYQ0VQVElPTgorZG8KKwlDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MgLUkke3NyY2Rpcn0vYysrIC1JJHtzcmNkaXJ9L21lbnUgLUkke3NyY2Rpcn0vaW5jbHVkZSIKKwl0ZXN0IC1uICIkY2ZfbWF0aCIgJiYgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtREVUSVBfTkVFRFNfJHtjZl9tYXRofSIKKwl0ZXN0IC1uICIkY2ZfZXhjcCIgJiYgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtREVUSVBfTkVFRFNfJHtjZl9leGNwfSIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTU0OTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8ZXRpcC5oLmluPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTUxMDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTU1MTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU1MTY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTUxOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKwl0ZXN0IC1uICIkY2ZfbWF0aCIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBFVElQX05FRURTXyR7Y2ZfbWF0aH0gMQorRU9GCisKKwl0ZXN0IC1uICIkY2ZfZXhjcCIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBFVElQX05FRURTXyR7Y2ZfZXhjcH0gMQorRU9GCisKKwljZl9yZXN1bHQ9IiRjZl9tYXRoICRjZl9leGNwIgorCWJyZWFrCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorZG9uZQorZWNobyAiJGFzX21lOjE1NTQwOiByZXN1bHQ6ICRjZl9yZXN1bHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3Jlc3VsdCIgPiY2CitDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MiCisKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCitlY2hvICIkYXNfbWU6MTU1NDU6IGNoZWNraW5nIGlmICRDWFggYWNjZXB0cyBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkQ1hYIGFjY2VwdHMgcGFyYW1ldGVyIGluaXRpYWxpemF0aW9uLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9jcHBfcGFyYW1faW5pdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKKwlpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl9jcHBfcGFyYW1faW5pdD11bmtub3duCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTU1NjIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitjbGFzcyBURVNUIHsKK3ByaXZhdGU6CisJaW50IHZhbHVlOworcHVibGljOgorCVRFU1QoaW50IHggPSAxKTsKKwl+VEVTVCgpOworfTsKKworVEVTVDo6VEVTVChpbnQgeCA9IDEpCS8vIHNvbWUgY29tcGlsZXJzIGRvIG5vdCBsaWtlIHNlY29uZCBpbml0aWFsaXplcgoreworCXZhbHVlID0geDsKK30KK3ZvaWQgbWFpbigpIHsgfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU1ODE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NTg0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTU4NjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NTg5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfY3BwX3BhcmFtX2luaXQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9jcHBfcGFyYW1faW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCWFjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitmaQorZWNobyAiJGFzX21lOjE1NjA4OiByZXN1bHQ6ICRjZl9jdl9jcHBfcGFyYW1faW5pdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfY3BwX3BhcmFtX2luaXQiID4mNgorZmkKK3Rlc3QgIiRjZl9jdl9jcHBfcGFyYW1faW5pdCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQ1BQX0hBU19QQVJBTV9JTklUIDEKK0VPRgorCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorCitlY2hvICIkYXNfbWU6MTU2MTc6IGNoZWNraW5nIGlmICRDWFggYWNjZXB0cyBzdGF0aWNfY2FzdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRDWFggYWNjZXB0cyBzdGF0aWNfY2FzdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfY3BwX3N0YXRpY19jYXN0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwlhY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTU2MzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitjbGFzcyBOQ3Vyc2VzUGFuZWwKK3sKK3B1YmxpYzoKKyAgTkN1cnNlc1BhbmVsKGludCBubGluZXMsCisJICAgICAgIGludCBuY29scywKKwkgICAgICAgaW50IGJlZ2luX3kgPSAwLAorCSAgICAgICBpbnQgYmVnaW5feCA9IDApCisgIHsKKyAgfQorCisgIH5OQ3Vyc2VzUGFuZWwoKTsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE5DdXJzZXNVc2VyUGFuZWwgOiBwdWJsaWMgTkN1cnNlc1BhbmVsCit7CitwdWJsaWM6CisgIE5DdXJzZXNVc2VyUGFuZWwgKGludCBubGluZXMsCisJCSAgICBpbnQgbmNvbHMsCisJCSAgICBpbnQgYmVnaW5feSA9IDAsCisJCSAgICBpbnQgYmVnaW5feCA9IDAsCisJCSAgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gc3RhdGljX2Nhc3Q8VCo+KDApKQorICAgIDogTkN1cnNlc1BhbmVsIChubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KQorICB7CisgIH07CisgIE5DdXJzZXNVc2VyUGFuZWwoY29uc3QgVCogcF9Vc2VyRGF0YSA9IHN0YXRpY19jYXN0PFQqPigwKSkgOiBOQ3Vyc2VzUGFuZWwoKQorICB7CisgIH07CisKKyAgdmlydHVhbCB+TkN1cnNlc1VzZXJQYW5lbCgpIHt9OworfTsKKworaW50CittYWluICgpCit7CisKKwljb25zdCBjaGFyKiBwX1VzZXJEYXRhID0gc3RhdGljX2Nhc3Q8Y2hhcio+KDApCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1Njc1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTY3ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTY4MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1Njg0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfY3BwX3N0YXRpY19jYXN0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9jcHBfc3RhdGljX2Nhc3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCWFjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitmaQorZWNobyAiJGFzX21lOjE1NzAyOiByZXN1bHQ6ICRjZl9jdl9jcHBfc3RhdGljX2Nhc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2NwcF9zdGF0aWNfY2FzdCIgPiY2CisKK2ZpCisKK3Rlc3QgIiRjZl9jdl9jcHBfc3RhdGljX2Nhc3QiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIENQUF9IQVNfU1RBVElDX0NBU1QgMQorRU9GCisKKwlDWFhfQVI9JyQoQVIpJworCUNYWF9BUl9PUFRTPSckKEFSX09QVFMpJworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwlpcml4KikgIyh2aQorCSAgICBpZiB0ZXN0ICIkR1hYIiAhPSB5ZXMgOyB0aGVuCisJCUNYWF9BUj0nJChDWFgpJworCQlDWFhfQVJfT1BUUz0nLWFyIC1vJworCSAgICBmaQorCSAgICA7OworCXNjbzMuMnY1KikgIyh2aQorCSAgICBDWFhMREZMQUdTPSItdSBtYWluIgorCSAgICA7OworCXNvbGFyaXMyKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgIT0geWVzIDsgdGhlbgorCQlDWFhfQVI9JyQoQ1hYKScKKwkJQ1hYX0FSX09QVFM9Jy14YXIgLW8nCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCitlbHNlCisJY2ZfY3h4X2xpYnJhcnk9bm8KKwljZl9jdl9idWlsdGluX2Jvb2w9MQorCisJIyBKdXN0IGJlY2F1c2Ugd2UgYXJlIG5vdCBjb25maWd1cmluZyBhZ2FpbnN0IEMrKyByaWdodCBub3cgZG9lcyBub3QKKwkjIG1lYW4gdGhhdCBhIHVzZXIgd2lsbCBub3Qgd2FudCB0byB1c2UgQysrLiAgU29tZSBkaXN0cmlidXRvcnMgZGlzYWJsZQorCSMgdGhlIEMrKyBwb3J0aW9uIG9mIHRoaXMgY29uZmlndXJhdGlvbiBhcyBhIHNob3J0Y3V0IChvciBqdXN0IHRvIGF2b2lkCisJIyBjb21waWxpbmcgdGhlIGRlbW8gaW4gdGhlIGMrKyBkaXJlY3RvcnkpLiAgU28gd2UgbmVlZCBhIHJlYXNvbmFibGUKKwkjIGRlZmF1bHQgZm9yIHRoZSAnYm9vbCcgdHlwZS4KKwkjCisJIyBDYXZlYXQ6IHNpbmNlIHRoZSBzdG9yYWdlIG9mIHRoZSBib29sIHR5cGUgaXMgbm90IHN0YW5kYXJkaXplZCwgaXQKKwkjIG1heSBjaGFuZ2UuCisKKwlpZiB0ZXN0ICIkTkNVUlNFU19CT09MIiAhPSBhdXRvIDsgdGhlbgorCQljZl9jdl90eXBlX29mX2Jvb2w9JE5DVVJTRVNfQk9PTAorCQljZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTAKKwllbHNlCisJCWlmIHRlc3QgIiRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IDEgOyB0aGVuCisKK2VjaG8gIiRhc19tZToxNTc1MDogY2hlY2tpbmcgZm9yIHNpemUgb2YgYm9vbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaXplIG9mIGJvb2wuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3R5cGVfb2ZfYm9vbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJcm0gLWYgY2ZfdGVzdC5vdXQKKwlpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1NzYxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorCisjaWZkZWYgSEFWRV9HWFhfQlVJTFRJTl9ICisjaW5jbHVkZSA8ZysrL2J1aWx0aW4uaD4KKyNlbGlmIEhBVkVfR1BQX0JVSUxUSU5fSAorI2luY2x1ZGUgPGdwcC9idWlsdGluLmg+CisjZWxpZiBIQVZFX0JVSUxUSU5fSAorI2luY2x1ZGUgPGJ1aWx0aW4uaD4KKyNlbmRpZgorCisjZWxzZQorCisjaWYgJGNmX2N2X2hlYWRlcl9zdGRib29sX2gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKKworI2VuZGlmCisKK21haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oImNmX3Rlc3Qub3V0IiwgInciKTsKKwlpZiAoZnAgIT0gMCkgeworCQlib29sIHggPSB0cnVlOworCQlpZiAoKGJvb2wpKC14KSA+PSAwKQorCQkJZnB1dHMoInVuc2lnbmVkICIsIGZwKTsKKwkJaWYgKHNpemVvZih4KSA9PSBzaXplb2YoaW50KSkgICAgICAgZnB1dHMoImludCIsICBmcCk7CisJCWVsc2UgaWYgKHNpemVvZih4KSA9PSBzaXplb2YoY2hhcikpIGZwdXRzKCJjaGFyIiwgZnApOworCQllbHNlIGlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKHNob3J0KSlmcHV0cygic2hvcnQiLGZwKTsKKwkJZWxzZSBpZiAoc2l6ZW9mKHgpID09IHNpemVvZihsb25nKSkgZnB1dHMoImxvbmciLCBmcCk7CisJCWZjbG9zZShmcCk7CisJfQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTgwMzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTU4MDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1ODA4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTU4MTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl90eXBlX29mX2Jvb2w9YGNhdCBjZl90ZXN0Lm91dGAKKwkJIGlmIHRlc3QgLXogIiRjZl9jdl90eXBlX29mX2Jvb2wiOyB0aGVuCisJCSAgIGNmX2N2X3R5cGVfb2ZfYm9vbD11bmtub3duCisJCSBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfdHlwZV9vZl9ib29sPXVua25vd24KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKKworCXJtIC1mIGNmX3Rlc3Qub3V0CitlY2hvICIkYXNfbWU6MTU4Mjk6IHJlc3VsdDogJGNmX2N2X3R5cGVfb2ZfYm9vbCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdHlwZV9vZl9ib29sIiA+JjYKK2lmIHRlc3QgIiRjZl9jdl90eXBlX29mX2Jvb2wiID0gdW5rbm93biA7IHRoZW4KKwljYXNlIC4kTkNVUlNFU19CT09MIGluICModmkKKwkuYXV0b3wuKSBOQ1VSU0VTX0JPT0w9dW5zaWduZWQ7OworCWVzYWMKKwl7IGVjaG8gIiRhc19tZToxNTgzNTogV0FSTklORzogQXNzdW1pbmcgJE5DVVJTRVNfQk9PTCBmb3IgdHlwZSBvZiBib29sIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogQXNzdW1pbmcgJE5DVVJTRVNfQk9PTCBmb3IgdHlwZSBvZiBib29sIiA+JjI7fQorCWNmX2N2X3R5cGVfb2ZfYm9vbD0kTkNVUlNFU19CT09MCitmaQorCisJCWVsc2UKKwkJCWVjaG8gIiRhc19tZToxNTg0MTogY2hlY2tpbmcgZm9yIGZhbGxiYWNrIHR5cGUgb2YgYm9vbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmYWxsYmFjayB0eXBlIG9mIGJvb2wuLi4gJEVDSE9fQyIgPiY2CisJCQljYXNlICIkaG9zdF9jcHUiIGluICModmkKKwkJCWk/ODYpCWNmX2N2X3R5cGVfb2ZfYm9vbD1jaGFyCTs7ICModmkKKwkJCSopCWNmX2N2X3R5cGVfb2ZfYm9vbD1pbnQJOzsKKwkJCWVzYWMKKwkJCWVjaG8gIiRhc19tZToxNTg0NzogcmVzdWx0OiAkY2ZfY3ZfdHlwZV9vZl9ib29sIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl90eXBlX29mX2Jvb2wiID4mNgorCQlmaQorCWZpCitmaQorCisjIElmIHRoZSBDIGNvbXBpbGVyIGRpZCBub3QgZGVjbGFyZSBib29sLCBhbmQgd2UgZGlkIG5vdCBkZXRlcm1pbmUgdGhhdCB0aGUgQysrCisjIGNvbXBpbGVyIGRvZXMgbm90IGRlY2xhcmUgYm9vbCwgdHVybiBvbiBhbiBpZmRlZiBpbiBjdXJzZXMuaCB0aGF0IG1ha2VzIHRoZQorIyBuY3Vyc2VzIGxpYnJhcnkgdXNlIHRoZSBzYW1lIHR5cGUgYXMgQysrIGJvb2wuICBOb3RlIHRoYXQgdGhpcyBhbGxvd3Mgb25lIHRvCisjIHNwZWNpZnkgdGhlIHR5cGUgb2YgYm9vbCBpbiBhIGNvbmZpZ3VyZS1zY3JpcHQgb3B0aW9uIGFuZCBwb3N0cG9uZQorIyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBDKysgY29tcGlsZXIgcHJvdmlkZWQgdGhhdCB0aGUgdHlwZXMgYXJlIGNvbXBhdGlibGUuCitVU0VfQ1hYX0JPT0w9MQoraWYgdGVzdCAkY2ZfY3ZfY2NfYm9vbF90eXBlID0gMQordGhlbgorCSMgb29wczogQyBoYXMgYSBib29sLiAgVW5saWtlbHksIGJ1dCBDKysgY291bGQgZGlmZmVyLgorCVVTRV9DWFhfQk9PTD0wCitlbGlmIHRlc3QgJGNmX2N2X2J1aWx0aW5fYm9vbCA9IDAKK3RoZW4KKwkjIEMrKyBoYXMgbm8gYm9vbAorCVVTRV9DWFhfQk9PTD0wCitlbHNlCisJIyB0aGlzIGlzIHRoZSBub3JtYWwgY2FzZQorCVVTRV9DWFhfQk9PTD0nZGVmaW5lZChfX2NwbHVzcGx1cyknCitmaQorCitpZiB0ZXN0IC1mICIke3NyY2Rpcn0vQWRhOTUvTWFrZWZpbGUuaW4iIDsgdGhlbgorCitpZiB0ZXN0ICIkY2Zfd2l0aF9hZGEiICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIjsgdGhlbgorCXsgZWNobyAiJGFzX21lOjE1ODc2OiBXQVJOSU5HOiBsaWJ0b29sIGRvZXMgbm90IHN1cHBvcnQgQWRhIC0gZGlzYWJsaW5nIGZlYXR1cmUiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaWJ0b29sIGRvZXMgbm90IHN1cHBvcnQgQWRhIC0gZGlzYWJsaW5nIGZlYXR1cmUiID4mMjt9CisJY2Zfd2l0aF9hZGE9bm8KKyAgICBmaQorZmkKKworaWYgdGVzdCAiJGNmX3dpdGhfYWRhIiAhPSAibm8iIDsgdGhlbgorY2ZfYWRhX21ha2U9Z25hdG1ha2UKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGNmX2FkYV9tYWtlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkY2ZfYWRhX21ha2U7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxNTg4NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2duYXRfZXhpc3RzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRnbmF0X2V4aXN0cyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cz0iJGduYXRfZXhpc3RzIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfZ25hdF9leGlzdHM9InllcyIKK2VjaG8gIiRhc19tZToxNTkwMTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2duYXRfZXhpc3RzIiAmJiBhY19jdl9wcm9nX2duYXRfZXhpc3RzPSJubyIKK2ZpCitmaQorZ25hdF9leGlzdHM9JGFjX2N2X3Byb2dfZ25hdF9leGlzdHMKK2lmIHRlc3QgLW4gIiRnbmF0X2V4aXN0cyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjE1OTEwOiByZXN1bHQ6ICRnbmF0X2V4aXN0cyIgPiY1CitlY2hvICIke0VDSE9fVH0kZ25hdF9leGlzdHMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTU5MTM6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworaWYgdGVzdCAiJGFjX2N2X3Byb2dfZ25hdF9leGlzdHMiID0gbm87IHRoZW4KKyAgIGNmX2FkYV9tYWtlPQorZWxzZQorCitlY2hvICIkYXNfbWU6MTU5MjE6IGNoZWNraW5nIGZvciBnbmF0IHZlcnNpb24iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ25hdCB2ZXJzaW9uLi4uICRFQ0hPX0MiID4mNgorY2ZfZ25hdF92ZXJzaW9uPWAke2NmX2FkYV9tYWtlLWduYXRtYWtlfSAtdiAyPiYxIHwgZ3JlcCAnWzAtOV0uWzAtOV1bMC05XSonIHxcCisgIHNlZCAtZSAnMiwkZCcgLWUgJ3MvW14wLTkgXC5dLy9nJyAtZSAncy9eWyBdKi8vJyAtZSAncy8gLiovLydgCitlY2hvICIkYXNfbWU6MTU5MjU6IHJlc3VsdDogJGNmX2duYXRfdmVyc2lvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfZ25hdF92ZXJzaW9uIiA+JjYKKworY2FzZSAkY2ZfZ25hdF92ZXJzaW9uIGluCisgIDMuMVsxLTldKnwzLlsyLTldKnxbNC05XS4qKQorICAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllcworICAgIDs7CisgICopIGVjaG8gVW5zdXBwb3J0ZWQgR05BVCB2ZXJzaW9uICRjZl9nbmF0X3ZlcnNpb24uIFJlcXVpcmVkIGlzIDMuMTEgb3IgYmV0dGVyLiBEaXNhYmxpbmcgQWRhOTUgYmluZGluZy4KKyAgICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm8KKyAgICAgOzsKK2VzYWMKK2Nhc2UgJGNmX2duYXRfdmVyc2lvbiBpbgorICAzLlsxLTldKnxbNC05XS4qKQorICAgICAgY2ZfY29tcGlsZV9nZW5lcmljcz1nZW5lcmljcworICAgICAgY2ZfZ2VuZXJpY19vYmplY3RzPSJcJHtHRU5PQkpTfSIKKyAgICAgIDs7CisgICopICBjZl9jb21waWxlX2dlbmVyaWNzPQorICAgICAgY2ZfZ2VuZXJpY19vYmplY3RzPQorICAgICAgOzsKK2VzYWMKKworICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtNCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbTQ7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxNTk0ODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX000X2V4aXN0cytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTTRfZXhpc3RzIjsgdGhlbgorICBhY19jdl9wcm9nX000X2V4aXN0cz0iJE00X2V4aXN0cyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX000X2V4aXN0cz0ieWVzIgorZWNobyAiJGFzX21lOjE1OTYzOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfTTRfZXhpc3RzIiAmJiBhY19jdl9wcm9nX000X2V4aXN0cz0ibm8iCitmaQorZmkKK000X2V4aXN0cz0kYWNfY3ZfcHJvZ19NNF9leGlzdHMKK2lmIHRlc3QgLW4gIiRNNF9leGlzdHMiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNTk3MjogcmVzdWx0OiAkTTRfZXhpc3RzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNNF9leGlzdHMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTU5NzU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICAgaWYgdGVzdCAiJGFjX2N2X3Byb2dfTTRfZXhpc3RzIiA9IG5vOyB0aGVuCisgICAgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworICAgICAgZWNobyBBZGE5NSBiaW5kaW5nIHJlcXVpcmVkIHByb2dyYW0gbTQgbm90IGZvdW5kLiBBZGE5NSBiaW5kaW5nIGRpc2FibGVkLgorICAgZmkKKyAgIGlmIHRlc3QgIiRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgIGVjaG8gIiRhc19tZToxNTk4NDogY2hlY2tpbmcgaWYgR05BVCB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIEdOQVQgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisKK3JtIC1mIGNvbmZ0ZXN0KgorY2F0ID4+Y29uZnRlc3QuYWRzIDw8Q0ZfRU9GCitwcm9jZWR1cmUgY29uZnRlc3Q7CitDRl9FT0YKK2NhdCA+PmNvbmZ0ZXN0LmFkYiA8PENGX0VPRgord2l0aCBUZXh0X0lPOword2l0aCBHTkFULk9TX0xpYjsKK3Byb2NlZHVyZSBjb25mdGVzdCBpcworYmVnaW4KKyAgIFRleHRfSU8uUHV0ICgiSGVsbG8gV29ybGQiKTsKKyAgIFRleHRfSU8uTmV3X0xpbmU7CisgICBHTkFULk9TX0xpYi5PU19FeGl0ICgwKTsKK2VuZCBjb25mdGVzdDsKK0NGX0VPRgoraWYgKCAkY2ZfYWRhX21ha2UgJEFEQUZMQUdTIGNvbmZ0ZXN0IDE+JjUgMj4mMSApIDsgdGhlbgorICAgaWYgKCAuL2NvbmZ0ZXN0IDE+JjUgMj4mMSApIDsgdGhlbgorICAgICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9eWVzCisgICBlbHNlCisgICAgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworICAgZmkKK2Vsc2UKKyAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgICAgIGVjaG8gIiRhc19tZToxNjAxMjogcmVzdWx0OiAkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiA+JjYKKyAgIGZpCitmaQoraWYgdGVzdAkiJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiA9IHllczsgdGhlbgorICAgQURBRkxBR1M9Ii1PMyAtZ25hdHBuICRBREFGTEFHUyIKKworICAgZWNobyAiJGFzX21lOjE2MDE5OiBjaGVja2luZyBpZiBHTkFUIHByYWdtYSBVbnJlZmVyZW5jZWQgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBHTkFUIHByYWdtYSBVbnJlZmVyZW5jZWQgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisKK3JtIC1mIGNvbmZ0ZXN0KgorY2F0ID4+Y29uZnRlc3QuYWRzIDw8Q0ZfRU9GCitwcm9jZWR1cmUgY29uZnRlc3Q7CitDRl9FT0YKK2NhdCA+PmNvbmZ0ZXN0LmFkYiA8PENGX0VPRgord2l0aCBUZXh0X0lPOword2l0aCBHTkFULk9TX0xpYjsKK3Byb2NlZHVyZSBjb25mdGVzdCBpcworICAgdGVzdCA6IEludGVnZXI7CisgICBwcmFnbWEgVW5yZWZlcmVuY2VkICh0ZXN0KTsKK2JlZ2luCisgICB0ZXN0IDo9IDE7CisgICBUZXh0X0lPLlB1dCAoIkhlbGxvIFdvcmxkIik7CisgICBUZXh0X0lPLk5ld19MaW5lOworICAgR05BVC5PU19MaWIuT1NfRXhpdCAoMCk7CitlbmQgY29uZnRlc3Q7CitDRl9FT0YKK2lmICggJGNmX2FkYV9tYWtlICRBREFGTEFHUyBjb25mdGVzdCAxPiY1IDI+JjEgKSA7IHRoZW4KKyAgICAgIGNmX2N2X3ByYWdtYV91bnJlZmVyZW5jZWQ9eWVzCitlbHNlCisgICBjZl9jdl9wcmFnbWFfdW5yZWZlcmVuY2VkPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgIGVjaG8gIiRhc19tZToxNjA0NjogcmVzdWx0OiAkY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZCIgPiY2CisKKyAgICMgaWYgdGhlIHByYWdtYSBpcyBzdXBwb3J0ZWQsIHVzZSBpdCAobmVlZGVkIGluIHRoZSBUcmFjZSBjb2RlKS4KKyAgIGlmIHRlc3QgJGNmX2N2X3ByYWdtYV91bnJlZmVyZW5jZWQgPSB5ZXMgOyB0aGVuCisgICAgICBQUkFHTUFfVU5SRUY9VFJVRQorICAgZWxzZQorICAgICAgUFJBR01BX1VOUkVGPUZBTFNFCisgICBmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFkYS1jb21waWxlciBvciAtLXdpdGhvdXQtYWRhLWNvbXBpbGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZGFfY29tcGlsZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYWRhX2NvbXBpbGVyIgorICBjZl9hZGFfY29tcGlsZXI9JHdpdGh2YWwKK2Vsc2UKKyAgY2ZfYWRhX2NvbXBpbGVyPWduYXRtYWtlCitmaTsKKworICAgY2ZfYWRhX3BhY2thZ2U9dGVybWluYWxfaW50ZXJmYWNlCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWRhLWluY2x1ZGUgb3IgLS13aXRob3V0LWFkYS1pbmNsdWRlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZGFfaW5jbHVkZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9hZGFfaW5jbHVkZSIKKworZWxzZQorICB3aXRodmFsPSIke0FEQV9JTkNMVURFLSRwcmVmaXgvbGliL2FkYS9hZGFpbmNsdWRlfSIKK2ZpOyBpZiB0ZXN0IC1uICIkcHJlZml4L2xpYi9hZGEvYWRhaW5jbHVkZSIgOyB0aGVuCisKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgd2l0aHZhbD0iJHdpdGh2YWwiCisgIGNhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIHdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgOzsKKyopCisgIHsgeyBlY2hvICIkYXNfbWU6MTYwOTk6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkd2l0aHZhbFwiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgOzsKK2VzYWMKKworZmkKK0FEQV9JTkNMVURFPSIkd2l0aHZhbCIKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZGEtb2JqZWN0cyBvciAtLXdpdGhvdXQtYWRhLW9iamVjdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FkYV9vYmplY3RzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FkYV9vYmplY3RzIgorCitlbHNlCisgIHdpdGh2YWw9IiR7QURBX09CSkVDVFMtJHByZWZpeC9saWIvYWRhL2FkYWxpYn0iCitmaTsgaWYgdGVzdCAtbiAiJHByZWZpeC9saWIvYWRhL2FkYWxpYiIgOyB0aGVuCisKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgd2l0aHZhbD0iJHdpdGh2YWwiCisgIGNhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIHdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgOzsKKyopCisgIHsgeyBlY2hvICIkYXNfbWU6MTYxNDE6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkd2l0aHZhbFwiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgOzsKK2VzYWMKKworZmkKK0FEQV9PQkpFQ1RTPSIkd2l0aHZhbCIKKworZmkKK2ZpCitlbHNlCisgICBjZl93aXRoX2FkYT1ubworZmkKKworIyMjIENvbnN0cnVjdCB0aGUgbmN1cnNlcyBsaWJyYXJ5LXN1YnNldHMsIGlmIGFueSwgZnJvbSB0aGlzIHNldCBvZiBrZXl3b3JkczoKKyMjIwlub25lLCBiYXNlLCBleHRfZnVuY3MsIGV4dF90aW5mbywgdGljbGliLCB0ZXJtbGliLCB3aWRlY2hhcgorIyMjCisjIyMgdGljbGliIG1vZHVsZXMgbWF5IGJlIGEgc2VwYXJhdGUgbGlicmFyeSwgb3RoZXJ3aXNlIGNvbnRhaW5lZCBpbiB0ZXJtbGliLgorIyMjIHRlcm1saWIgbW9kdWxlcyBtYXkgYmUgYSBzZXBhcmF0ZSBsaWJyYXJ5LCBvdGhlcndpc2UgY29udGFpbmVkIGluIG5jdXJzZXMuCisjIyMKKyMjIyBUaGUgb2YgIisiIG9yICIgIiBiZXR3ZWVuIHRoZSB0b2tlbnMgY29udHJvbHMgdGhlIHdheSB0aGUgc2NyaXB0CisjIyMgY2hvb3NlcyB0byBzcGxpdCBtb2R1bGUgbGlzdHMgaW50byBsaWJyYXJpZXMuCisjIyMKKyMjIyAoc2VlIENGX0xJQl9SVUxFUykuCitlY2hvICIkYXNfbWU6MTYxNjY6IGNoZWNraW5nIGZvciBsaWJyYXJ5IHN1YnNldHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBzdWJzZXRzLi4uICRFQ0hPX0MiID4mNgorTElCX1NVQlNFVFM9CisKK2lmIHRlc3QgIiRjZl93aXRoX3Byb2dzIiA9IHllcyB8fCB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIHx8IHRlc3QgIiR3aXRoX3Rlcm1jYXAiICE9IG5vOyB0aGVuCisJTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9dGljbGliIgorCWlmIHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gOyB0aGVuCisJCUxJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfSAiCisJZWxzZQorCQlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rIgorCWZpCitmaQorCitMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU310ZXJtbGliIgordGVzdCAiJHdpdGhfZXh0X2Z1bmNzIiA9IHllcyAmJiBMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rZXh0X3RpbmZvIgoraWYgdGVzdCAiJHdpdGhfdGVybWxpYiIgIT0gbm8gOyB0aGVuCisJTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9ICIKK2Vsc2UKKwlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rIgorZmkKKworTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9YmFzZSIKK3Rlc3QgIiR3aXRoX3dpZGVjIiAgICAgPSB5ZXMgJiYgTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9K3dpZGVjaGFyIgordGVzdCAiJHdpdGhfZXh0X2Z1bmNzIiA9IHllcyAmJiBMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rZXh0X2Z1bmNzIgorCitlY2hvICIkYXNfbWU6MTYxOTE6IHJlc3VsdDogJExJQl9TVUJTRVRTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMSUJfU1VCU0VUUyIgPiY2CisKKyMjIyBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgaW5jbHVkZS1kaXJlY3RvcmllcyB0byBiZSBnZW5lcmF0ZWQKKworQ1BQRkxBR1M9Ii1JLiAtSS4uL2luY2x1ZGUgJENQUEZMQUdTIgoraWYgdGVzdCAiJHNyY2RpciIgIT0gIi4iOyB0aGVuCisJQ1BQRkxBR1M9Ii1JXCR7c3JjZGlyfS8uLi9pbmNsdWRlICRDUFBGTEFHUyIKK2ZpCitpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCitlbGlmIHRlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIjsgdGhlbgorCWlmIHRlc3QgIiRpbmNsdWRlZGlyIiA9ICcke3ByZWZpeH0vaW5jbHVkZScgOyB0aGVuCisJCWlmIHRlc3QgJHByZWZpeCAhPSAvdXNyIDsgdGhlbgorCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCQlmaQorCWVsc2UKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCWZpCitmaQorCitBQ1BQRkxBR1M9Ii1JLiAtSS4uLy4uL2luY2x1ZGUgJEFDUFBGTEFHUyIKK2lmIHRlc3QgIiRzcmNkaXIiICE9ICIuIjsgdGhlbgorCUFDUFBGTEFHUz0iLUlcJHtzcmNkaXJ9Ly4uLy4uL2luY2x1ZGUgJEFDUFBGTEFHUyIKK2ZpCitpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKK2VsaWYgdGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiOyB0aGVuCisJaWYgdGVzdCAiJGluY2x1ZGVkaXIiID0gJyR7cHJlZml4fS9pbmNsdWRlJyA7IHRoZW4KKwkJaWYgdGVzdCAkcHJlZml4ICE9IC91c3IgOyB0aGVuCisJCQlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwkJZmkKKwllbHNlCisJCUFDUFBGTEFHUz0iJEFDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCWZpCitmaQorCisjIyMgQnVpbGQgdXAgcGllY2VzIGZvciBtYWtlZmlsZSBydWxlcworZWNobyAiJGFzX21lOjE2MjI5OiBjaGVja2luZyBkZWZhdWx0IGxpYnJhcnkgc3VmZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVmYXVsdCBsaWJyYXJ5IHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKKworCWNhc2UgJERGVF9MV1JfTU9ERUwgaW4KKwlsaWJ0b29sKSBERlRfQVJHX1NVRkZJWD0nJyAgIDs7CisJbm9ybWFsKSAgREZUX0FSR19TVUZGSVg9JycgICA7OworCWRlYnVnKSAgIERGVF9BUkdfU1VGRklYPSdfZycgOzsKKwlwcm9maWxlKSBERlRfQVJHX1NVRkZJWD0nX3AnIDs7CisJc2hhcmVkKSAgREZUX0FSR19TVUZGSVg9JycgICA7OworCWVzYWMKKwl0ZXN0IC1uICIkTElCX1NVRkZJWCIgJiYgREZUX0FSR19TVUZGSVg9IiR7TElCX1NVRkZJWH0ke0RGVF9BUkdfU1VGRklYfSIKK2VjaG8gIiRhc19tZToxNjI0MDogcmVzdWx0OiAkREZUX0FSR19TVUZGSVgiID4mNQorZWNobyAiJHtFQ0hPX1R9JERGVF9BUkdfU1VGRklYIiA+JjYKKworZWNobyAiJGFzX21lOjE2MjQzOiBjaGVja2luZyBkZWZhdWx0IGxpYnJhcnktZGVwZW5kZW5jeSBzdWZmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBkZWZhdWx0IGxpYnJhcnktZGVwZW5kZW5jeSBzdWZmaXguLi4gJEVDSE9fQyIgPiY2CisKKwljYXNlICRERlRfTFdSX01PREVMIGluCisJbGlidG9vbCkKKwkJREZUX0xJQl9TVUZGSVg9Jy5sYScKKwkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCTs7CisJbm9ybWFsKQorCQlERlRfTElCX1NVRkZJWD0nLmEnCisJCURGVF9ERVBfU1VGRklYPSRERlRfTElCX1NVRkZJWAorCQk7OworCWRlYnVnKQorCQlERlRfTElCX1NVRkZJWD0nX2cuYScKKwkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCTs7CisJcHJvZmlsZSkKKwkJREZUX0xJQl9TVUZGSVg9J19wLmEnCisJCURGVF9ERVBfU1VGRklYPSRERlRfTElCX1NVRkZJWAorCQk7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkJY3lnd2luKikKKwkJCURGVF9MSUJfU1VGRklYPScuZGxsJworCQkJREZUX0RFUF9TVUZGSVg9Jy5kbGwuYScKKwkJCTs7CisJCWRhcndpbiopCisJCQlERlRfTElCX1NVRkZJWD0nLmR5bGliJworCQkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCQk7OworCQlocHV4KikKKwkJCWNhc2UgJHRhcmdldCBpbgorCQkJaWE2NCopCisJCQkJREZUX0xJQl9TVUZGSVg9Jy5zbycKKwkJCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJCQk7OworCQkJKikKKwkJCQlERlRfTElCX1NVRkZJWD0nLnNsJworCQkJCURGVF9ERVBfU1VGRklYPSRERlRfTElCX1NVRkZJWAorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkqKQlERlRfTElCX1NVRkZJWD0nLnNvJworCQkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCQk7OworCQllc2FjCisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBERlRfTElCX1NVRkZJWD0iJHtMSUJfU1VGRklYfSR7REZUX0xJQl9TVUZGSVh9IgorCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBERlRfREVQX1NVRkZJWD0iJHtMSUJfU1VGRklYfSR7REZUX0RFUF9TVUZGSVh9IgorZWNobyAiJGFzX21lOjE2MjkyOiByZXN1bHQ6ICRERlRfREVQX1NVRkZJWCIgPiY1CitlY2hvICIke0VDSE9fVH0kREZUX0RFUF9TVUZGSVgiID4mNgorCitlY2hvICIkYXNfbWU6MTYyOTU6IGNoZWNraW5nIGRlZmF1bHQgb2JqZWN0IGRpcmVjdG9yeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlZmF1bHQgb2JqZWN0IGRpcmVjdG9yeS4uLiAkRUNIT19DIiA+JjYKKworCWNhc2UgJERGVF9MV1JfTU9ERUwgaW4KKwlsaWJ0b29sKSBERlRfT0JKX1NVQkRJUj0nb2JqX2xvJyAgOzsKKwlub3JtYWwpICBERlRfT0JKX1NVQkRJUj0nb2JqZWN0cycgOzsKKwlkZWJ1ZykgICBERlRfT0JKX1NVQkRJUj0nb2JqX2cnIDs7CisJcHJvZmlsZSkgREZUX09CSl9TVUJESVI9J29ial9wJyA7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCQljeWd3aW4pICModmkKKwkJCURGVF9PQkpfU1VCRElSPSdvYmplY3RzJyA7OworCQkqKQorCQkJREZUX09CSl9TVUJESVI9J29ial9zJyA7OworCQllc2FjCisJZXNhYworZWNobyAiJGFzX21lOjE2MzExOiByZXN1bHQ6ICRERlRfT0JKX1NVQkRJUiIgPiY1CitlY2hvICIke0VDSE9fVH0kREZUX09CSl9TVUJESVIiID4mNgorCisjIGxpYnRvb2wgdGhpbmtzIGl0IGNhbiBtYWtlIGMrKyBzaGFyZWQgbGlicmFyaWVzIChwZXJoYXBzIG9ubHkgZysrKQoraWYgdGVzdCAiJGNmX3dpdGhfY3h4IiA9IHllcyA7IHRoZW4KK2VjaG8gIiRhc19tZToxNjMxNjogY2hlY2tpbmcgYysrIGxpYnJhcnktZGVwZW5kZW5jeSBzdWZmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBjKysgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJubyI7IHRoZW4KKwlDWFhfTElCX1NVRkZJWD0kREZUX0RFUF9TVUZGSVgKK2Vsc2UKKworCWNhc2Ugbm9ybWFsIGluCisJbGlidG9vbCkKKwkJQ1hYX0xJQl9TVUZGSVg9Jy5sYScKKwkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCTs7CisJbm9ybWFsKQorCQlDWFhfTElCX1NVRkZJWD0nLmEnCisJCUNYWF9ERVBfU1VGRklYPSRDWFhfTElCX1NVRkZJWAorCQk7OworCWRlYnVnKQorCQlDWFhfTElCX1NVRkZJWD0nX2cuYScKKwkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCTs7CisJcHJvZmlsZSkKKwkJQ1hYX0xJQl9TVUZGSVg9J19wLmEnCisJCUNYWF9ERVBfU1VGRklYPSRDWFhfTElCX1NVRkZJWAorCQk7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkJY3lnd2luKikKKwkJCUNYWF9MSUJfU1VGRklYPScuZGxsJworCQkJQ1hYX0RFUF9TVUZGSVg9Jy5kbGwuYScKKwkJCTs7CisJCWRhcndpbiopCisJCQlDWFhfTElCX1NVRkZJWD0nLmR5bGliJworCQkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCQk7OworCQlocHV4KikKKwkJCWNhc2UgJHRhcmdldCBpbgorCQkJaWE2NCopCisJCQkJQ1hYX0xJQl9TVUZGSVg9Jy5zbycKKwkJCQlDWFhfREVQX1NVRkZJWD0kQ1hYX0xJQl9TVUZGSVgKKwkJCQk7OworCQkJKikKKwkJCQlDWFhfTElCX1NVRkZJWD0nLnNsJworCQkJCUNYWF9ERVBfU1VGRklYPSRDWFhfTElCX1NVRkZJWAorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkqKQlDWFhfTElCX1NVRkZJWD0nLnNvJworCQkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCQk7OworCQllc2FjCisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBDWFhfTElCX1NVRkZJWD0iJHtMSUJfU1VGRklYfSR7Q1hYX0xJQl9TVUZGSVh9IgorCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBDWFhfREVQX1NVRkZJWD0iJHtMSUJfU1VGRklYfSR7Q1hYX0RFUF9TVUZGSVh9IgorZmkKK2VjaG8gIiRhc19tZToxNjM2OTogcmVzdWx0OiAkQ1hYX0xJQl9TVUZGSVgiID4mNQorZWNobyAiJHtFQ0hPX1R9JENYWF9MSUJfU1VGRklYIiA+JjYKKworZmkKKworIyBkbyBub3Qgd2FudCAtbGRsIGluIGJ1aWxkIGV4Y2VwdCBhcyBuZWVkZWQgZm9yIC1sbmN1cnNlcyBkZXBlbmRlbmN5CitpZiB0ZXN0ICIkd2l0aF9kbHN5bSIgPSB5ZXMgOyB0aGVuCitpZiB0ZXN0ICRERlRfTFdSX01PREVMID0gc2hhcmVkIHx8IFwKKyAgIHRlc3QgJERGVF9MV1JfTU9ERUwgPSBsaWJ0b29sIDsgdGhlbgorCisjIHJlbW92ZSBkbCBsaWJyYXJ5IGZyb20gJExJQlMKK0xJQlM9YGVjaG8gIiRMSUJTIiB8IHNlZCAtZSAncy8tbGRsWyAJXS8vZycgLWUgJ3MvLWxkbCQvLydgCisKK2ZpCitmaQorIyMjIFNldCB1cCBsb3ctbGV2ZWwgdGVybWluZm8gZGVwZW5kZW5jaWVzIGZvciBtYWtlZmlsZXMuCisKKyMgVElDU19MSVNUIGFuZCBUSU5GT19MSVNUIGFyZSBuZWVkZWQgdG8gYnVpbGQgbGlidGljLnNvIGFuZCBsaWJ0ZXJtLnNvLCBidXQKKyMgZG8gbm90IG5lZWQgbGliZGwKK1RJQ1NfTElTVD0KK2lmIHRlc3QgIiR3aXRoX2Rsc3ltIiA9IHllcyA7IHRoZW4KKworIyByZW1vdmUgZGwgbGlicmFyeSBmcm9tICRTSExJQl9MSVNUCitUSU5GT19MSVNUPWBlY2hvICIkU0hMSUJfTElTVCIgfCBzZWQgLWUgJ3MvLWxkbFsgCV0vL2cnIC1lICdzLy1sZGwkLy8nYAorCitmaQorCitpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIDsgdGhlbgorCisJaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSB5ZXMgOyB0aGVuCisJCVRJQ1NfTkFNRT0kd2l0aF90aWNsaWIKKwkJVElDU19BUkdfU1VGRklYPSIke3dpdGhfdGljbGlifWBlY2hvICR7REZUX0FSR19TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJQ1NfREVQX1NVRkZJWD0iJHt3aXRoX3RpY2xpYn1gZWNobyAke0RGVF9ERVBfU1VGRklYfXxzZWQgLWUgInMvXiR7TElCX1NVRkZJWH0vLyJgIgorCQlUSUNTX0xJQl9TVUZGSVg9IiR7d2l0aF90aWNsaWJ9IgorCWVsc2UKKwkJVElDU19BUkdfU1VGRklYPSIke1RJQ1NfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKKwkJVElDU19ERVBfU1VGRklYPSIke1RJQ1NfTkFNRX0ke0RGVF9ERVBfU1VGRklYfSIKKwkJVElDU19MSUJfU1VGRklYPSIke1RJQ1NfTkFNRX0ke0xJQl9TVUZGSVh9IgorCWZpCisJVElDU19BUkdTPSItTCR7TElCX0RJUn0gLWwke1RJQ1NfTElCX1NVRkZJWH0iCitlbHNlCisJVElDU19BUkdTPSItTCR7TElCX0RJUn0gLWwke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9IgorZmkKKworaWYgdGVzdCAiJHdpdGhfdGVybWxpYiIgIT0gbm8gOyB0aGVuCisKKwlpZiB0ZXN0ICIkd2l0aF90ZXJtbGliIiAhPSB5ZXMgOyB0aGVuCisJCVRJTkZPX05BTUU9JHdpdGhfdGVybWxpYgorCQlUSU5GT19TVUZGSVg9ImBlY2hvICR7REZUX0xJQl9TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJTkZPX0FSR19TVUZGSVg9IiR7d2l0aF90ZXJtbGlifWBlY2hvICR7REZUX0FSR19TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJTkZPX0RFUF9TVUZGSVg9IiR7d2l0aF90ZXJtbGlifWBlY2hvICR7REZUX0RFUF9TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJTkZPX0xJQl9TVUZGSVg9IiR7d2l0aF90ZXJtbGlifSIKKwllbHNlCisJCVRJTkZPX1NVRkZJWD0ke0RGVF9MSUJfU1VGRklYfQorCQlUSU5GT19BUkdfU1VGRklYPSIke1RJTkZPX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCisJCVRJTkZPX0RFUF9TVUZGSVg9IiR7VElORk9fTkFNRX0ke0RGVF9ERVBfU1VGRklYfSIKKwkJVElORk9fTElCX1NVRkZJWD0iJHtUSU5GT19OQU1FfSR7TElCX1NVRkZJWH0iCisJZmkKKworCVRFU1RfREVQUz0iJHtMSUJfRElSfS8ke0xJQl9QUkVGSVh9JHtUSU5GT19ERVBfU1VGRklYfSIKKwlURVNUX0RFUDI9IiR7TElCXzJORH0vJHtMSUJfUFJFRklYfSR7VElORk9fREVQX1NVRkZJWH0iCisJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisJCVRFU1RfQVJHUz0iJHtURVNUX0RFUFN9IgorCQlURVNUX0FSRzI9IiR7VEVTVF9ERVAyfSIKKwkJVElORk9fQVJHUz0iLUwke0xJQl9ESVJ9ICRURVNUX0FSR1MiCisJZWxzZQorCQlURVNUX0FSR1M9Ii1sJHtUSU5GT19BUkdfU1VGRklYfSIKKwkJVEVTVF9BUkcyPSItbCR7VElORk9fQVJHX1NVRkZJWH0iCisJCVRJQ1NfTElTVD0iJFNITElCX0xJU1QgLWwke1RJTkZPX0xJQl9TVUZGSVh9IgorCQlUSU5GT19BUkdTPSItTCR7TElCX0RJUn0gJFRFU1RfQVJHUyIKKwkJU0hMSUJfTElTVD0iJFNITElCX0xJU1QgLWwke1RJTkZPX0xJQl9TVUZGSVh9IgorCWZpCitlbHNlCisJIyB0aGUgbmV4dCBsaW5lcyBhcmUgbmVlZGVkIGZvciBsaW5raW5nIGxpYnRpYyBvdmVyIGxpYm5jdXJzZXMKKwlUSU5GT19OQU1FPSR7TElCX05BTUV9CisJVElORk9fU1VGRklYPSR7REZUX0xJQl9TVUZGSVh9CisJVElORk9fQVJHX1NVRkZJWD0ke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9CisJaWYgdGVzdCAiJHdpdGhfdGljX2RlcGVuZHMiID0geWVzIDsgdGhlbgorCQlUSUNTX0xJU1Q9IiRTSExJQl9MSVNUIC1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKKwllbHNlCisJCVRJQ1NfTElTVD0iJFNITElCX0xJU1QiCisJZmkKKworCVRJTkZPX0FSR1M9Ii1MJHtMSUJfRElSfSAtbCR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCitmaQorCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSBzaGFyZWQgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCWN5Z3dpbiopCisJCSMgImxpYiIgZmlsZXMgaGF2ZSAiLmRsbC5hIiBzdWZmaXgsICJjeWciIGZpbGVzIGhhdmUgIi5kbGwiCisJCVRJTkZPX1NVRkZJWD0uZGxsCisJCTs7CisJZXNhYworZmkKKworaWYgdGVzdCAiJHdpdGhfZGxzeW0iID0geWVzIDsgdGhlbgorCisjIHJlbW92ZSBkbCBsaWJyYXJ5IGZyb20gJFRJQ1NfTElTVAorVElDU19MSVNUPWBlY2hvICIkVElDU19MSVNUIiB8IHNlZCAtZSAncy8tbGRsWyAJXS8vZycgLWUgJ3MvLWxkbCQvLydgCisKK2ZpCisKK2lmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJsaWJ0b29sIjsgdGhlbgorICAgIE9CSkVYVD1sbworZmkKKworIyBuZWVkZWQgZm9yIEFkYTk1CitUSU5GT19BUkdTMj1gZWNobyAiJFRJTkZPX0FSR1MiIHwgc2VkIC1lICdzLC1MXC5cLi8sLUwuLi8uLi8sJ2AKKworY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorbm9ybWFsfGRlYnVnfHByb2ZpbGUpCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICMoCisJT1MvMip8b3MyKnxhaXhbNDVdKikgCSMoIHZpCisJCUxERkxBR1NfU1RBVElDPQorCQlMREZMQUdTX1NIQVJFRD0KKwkJOzsKKyAgICAqKSAJIyggbm9ybWFsbHksIGV4Y2VwdCB3aGVuIGJyb2tlbgorICAgICAgICBMREZMQUdTX1NUQVRJQz0tc3RhdGljCisgICAgICAgIExERkxBR1NfU0hBUkVEPS1keW5hbWljCisgICAgICAgIDs7CisgICAgZXNhYworZWxzZQorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICMoCisJYWl4WzQ1XSopIAkjKCBmcm9tIGxkIG1hbnBhZ2UKKwkJTERGTEFHU19TVEFUSUM9LWJzdGF0aWMKKwkJTERGTEFHU19TSEFSRUQ9LWJkeW5hbWljCisJCTs7CisJaHB1eCopCQkjKCBmcm9tIGxkIG1hbnBhZ2UgZm9yIGhwdXgxMC4yMCwgaHB1eDExLjExCisJCSMgV2UgY291bGQgYWxzbyB1c2UganVzdCAiYXJjaGl2ZSIgYW5kICJzaGFyZWQiLgorCQlMREZMQUdTX1NUQVRJQz0tV2wsLWEsYXJjaGl2ZV9zaGFyZWQKKwkJTERGTEFHU19TSEFSRUQ9LVdsLC1hLHNoYXJlZF9hcmNoaXZlCisJCTs7CisJaXJpeCopCQkjKCBmcm9tIGxkIG1hbnBhZ2UgSVJJWDY0CisJCUxERkxBR1NfU1RBVElDPS1Cc3RhdGljCisJCUxERkxBR1NfU0hBUkVEPS1CZHluYW1pYworCQk7OworCW9zZls0NV0qKQkjKCBmcm9tIGxkIG1hbnBhZ2Ugb3NmNC4wZCwgb3NmNS4xCisJCSMgYWx0ZXJuYXRpdmUgIi1vbGRzdHlsZV9saWJsb29rdXAiIChub3QgaW4gY2MgbWFucGFnZSkKKwkJTERGTEFHU19TVEFUSUM9LW5vc28KKwkJTERGTEFHU19TSEFSRUQ9LXNvX2FyY2hpdmUKKwkJOzsKKwlzb2xhcmlzMiopCisJCUxERkxBR1NfU1RBVElDPS1Cc3RhdGljCisJCUxERkxBR1NfU0hBUkVEPS1CZHluYW1pYworCQk7OworCWVzYWMKK2ZpCisKKwk7OworZXNhYworCitlY2hvICIkYXNfbWU6MTY1MjI6IGNoZWNraW5nIHdoZXJlIHdlIHdpbGwgaW5zdGFsbCBjdXJzZXMuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXJlIHdlIHdpbGwgaW5zdGFsbCBjdXJzZXMuaC4uLiAkRUNIT19DIiA+JjYKK3Rlc3QgIiR3aXRoX292ZXJ3cml0ZSIgPSBubyAmJiBcCit0ZXN0ICJ4JGluY2x1ZGVkaXIiID0gJ3gke3ByZWZpeH0vaW5jbHVkZScgJiYgXAorCWluY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlL25jdXJzZXMnJHtMSUJfU1VGRklYfQorZWNobyAiJGFzX21lOjE2NTI3OiByZXN1bHQ6ICRpbmNsdWRlZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRpbmNsdWRlZGlyIiA+JjYKKworIyMjIFJlc29sdmUgYSBjb25mbGljdCBiZXR3ZWVuIG5vcm1hbCBhbmQgd2lkZS1jdXJzZXMgYnkgZm9yY2luZyBhcHBsaWNhdGlvbnMKKyMjIyB0aGF0IHdpbGwgbmVlZCBsaWJ1dGY4IHRvIGFkZCBpdCB0byB0aGVpciBjb25maWd1cmUgc2NyaXB0LgoraWYgdGVzdCAiJHdpdGhfb3ZlcndyaXRlIiAhPSBubyA7IHRoZW4KK2lmIHRlc3QgIiROQ1VSU0VTX0xJQlVURjgiID0gMSA7IHRoZW4KKwlOQ1VSU0VTX0xJQlVURjg9J2RlZmluZWQoSEFWRV9MSUJVVEY4X0gpJworCXsgZWNobyAiJGFzX21lOjE2NTM1OiBXQVJOSU5HOiBXaWRlLWNoYXJhY3RlciBhcHBsaWNhdGlvbnMgbXVzdCBkZWZpbmUgSEFWRV9MSUJVVEY4X0ggdG8gaW5jbHVkZSBjdXJzZXMuaCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFdpZGUtY2hhcmFjdGVyIGFwcGxpY2F0aW9ucyBtdXN0IGRlZmluZSBIQVZFX0xJQlVURjhfSCB0byBpbmNsdWRlIGN1cnNlcy5oIiA+JjI7fQorZmkKK2ZpCisKKyMgdXNlZCB0byBzZXBhcmF0ZSB0YWNrIG91dCBvZiB0aGUgdHJlZQorTkNVUlNFU19UUkVFPQorCisjIyMgcHJlZGVmaW5lZCBzdHVmZiBmb3IgdGhlIHRlc3QgcHJvZ3JhbXMKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU0xLX0NPTE9SIDEKK0VPRgorCisjIyMgQ29uc3RydWN0IHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGZvciB3aGljaCB3ZSdsbCBjdXN0b21pemUgbWFrZWZpbGVzCisjIyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZS1ydWxlcy4KKworZWNobyAiJGFzX21lOjE2NTUxOiBjaGVja2luZyBmb3Igc3JjIG1vZHVsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3JjIG1vZHVsZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgZGVwZW5kZW5jaWVzIGFuZCBsaW5rZXItYXJndW1lbnRzIGZvciB0ZXN0LXByb2dyYW1zCitURVNUX0RFUFM9IiR7TElCX0RJUn0vJHtMSUJfUFJFRklYfSR7TElCX05BTUV9JHtERlRfREVQX1NVRkZJWH0gJFRFU1RfREVQUyIKK1RFU1RfREVQMj0iJHtMSUJfMk5EfS8ke0xJQl9QUkVGSVh9JHtMSUJfTkFNRX0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVAyIgoraWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisJVEVTVF9BUkdTPSIke1RFU1RfREVQU30iCisJVEVTVF9BUkcyPSIke1RFU1RfREVQMn0iCitlbHNlCisJVEVTVF9BUkdTPSItbCR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0gJFRFU1RfQVJHUyIKKwlURVNUX0FSRzI9Ii1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkcyIgorZmkKKworY2ZfY3Zfc3JjX21vZHVsZXM9Citmb3IgY2ZfZGlyIGluICRtb2R1bGVzX3RvX2J1aWxkCitkbworCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXM7IHRoZW4KKworCQkjIFdlIG1heS9tYXkgbm90IGhhdmUgdGFjayBpbiB0aGUgZGlzdHJpYnV0aW9uLCB0aG91Z2ggdGhlCisJCSMgbWFrZWZpbGUgaXMuCisJCWlmIHRlc3QgJGNmX2RpciA9IHRhY2sgOyB0aGVuCisJCQlpZiB0ZXN0ICEgLWYgJHNyY2Rpci8ke2NmX2Rpcn0vJHtjZl9kaXJ9Lmg7IHRoZW4KKwkJCQljb250aW51ZQorCQkJZmkKKwkJZmkKKworCQlpZiB0ZXN0IC16ICIkY2ZfY3Zfc3JjX21vZHVsZXMiOyB0aGVuCisJCQljZl9jdl9zcmNfbW9kdWxlcz0kY2ZfZGlyCisJCWVsc2UKKwkJCWNmX2N2X3NyY19tb2R1bGVzPSIkY2ZfY3Zfc3JjX21vZHVsZXMgJGNmX2RpciIKKwkJZmkKKworCQkjIE1ha2UgdGhlIG5jdXJzZXNfY2ZnLmggZmlsZSByZWNvcmQgdGhlIGxpYnJhcnkgaW50ZXJmYWNlIGZpbGVzIGFzCisJCSMgd2VsbC4gIFRoZXNlIGFyZSBoZWFkZXIgZmlsZXMgdGhhdCBhcmUgdGhlIHNhbWUgbmFtZSBhcyB0aGVpcgorCQkjIGRpcmVjdG9yeS4gIE5jdXJzZXMgaXMgdGhlIG9ubHkgbGlicmFyeSB0aGF0IGRvZXMgbm90IGZvbGxvdworCQkjIHRoYXQgcGF0dGVybi4KKwkJaWYgdGVzdCAkY2ZfZGlyID0gdGFjayA7IHRoZW4KKwkJCWNvbnRpbnVlCisJCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyR7Y2ZfZGlyfS8ke2NmX2Rpcn0uaDsgdGhlbgorCitjZl9oYXZlX2luY2x1ZGU9YGVjaG8gIiRjZl9kaXIiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCisJCQljYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIEhBVkVfJHtjZl9oYXZlX2luY2x1ZGV9X0ggMQorRU9GCisKKwkJCWNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgSEFWRV9MSUIke2NmX2hhdmVfaW5jbHVkZX0gMQorRU9GCisKKwkJCVRFU1RfREVQUz0iJHtMSUJfRElSfS8ke0xJQl9QUkVGSVh9JHtjZl9kaXJ9JHtERlRfREVQX1NVRkZJWH0gJFRFU1RfREVQUyIKKwkJCVRFU1RfREVQMj0iJHtMSUJfMk5EfS8ke0xJQl9QUkVGSVh9JHtjZl9kaXJ9JHtERlRfREVQX1NVRkZJWH0gJFRFU1RfREVQMiIKKwkJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJsaWJ0b29sIjsgdGhlbgorCQkJCVRFU1RfQVJHUz0iJHtURVNUX0RFUFN9IgorCQkJCVRFU1RfQVJHMj0iJHtURVNUX0RFUDJ9IgorCQkJZWxzZQorCQkJCVRFU1RfQVJHUz0iLWwke2NmX2Rpcn0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkdTIgorCQkJCVRFU1RfQVJHMj0iLWwke2NmX2Rpcn0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkcyIgorCQkJZmkKKwkJZmkKKwlmaQorZG9uZQorZWNobyAiJGFzX21lOjE2NjE0OiByZXN1bHQ6ICRjZl9jdl9zcmNfbW9kdWxlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfc3JjX21vZHVsZXMiID4mNgorCitURVNUX0FSR1M9Ii1MJHtMSUJfRElSfSAkVEVTVF9BUkdTIgorVEVTVF9BUkcyPSItTCR7TElCXzJORH0gJFRFU1RfQVJHMiIKKworU1JDX1NVQkRJUlM9Im1hbiBpbmNsdWRlIgorZm9yIGNmX2RpciBpbiAkY2ZfY3Zfc3JjX21vZHVsZXMKK2RvCisJU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyAkY2ZfZGlyIgorZG9uZQorU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyB0ZXN0IgordGVzdCAteiAiJE1BS0VfVEVSTUlORk8iICYmIFNSQ19TVUJESVJTPSIkU1JDX1NVQkRJUlMgbWlzYyIKK3Rlc3QgIiRjZl93aXRoX2N4eF9iaW5kaW5nIiAhPSBubyAmJiBTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIGMrKyIKKworQURBX1NVQkRJUlM9CitpZiB0ZXN0ICIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID0geWVzICYmIHRlc3QgLWYgJHNyY2Rpci9BZGE5NS9NYWtlZmlsZS5pbjsgdGhlbgorICAgU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyBBZGE5NSIKKyAgIEFEQV9TVUJESVJTPSJnZW4gc3JjIHNhbXBsZXMiCitmaQorCitTVUJfTUFLRUZJTEVTPQorZm9yIGNmX2RpciBpbiAkU1JDX1NVQkRJUlMKK2RvCisJU1VCX01BS0VGSUxFUz0iJFNVQl9NQUtFRklMRVMgJGNmX2Rpci9NYWtlZmlsZSIKK2RvbmUKKworaWYgdGVzdCAtbiAiJEFEQV9TVUJESVJTIjsgdGhlbgorICAgZm9yIGNmX2RpciBpbiAkQURBX1NVQkRJUlMKKyAgIGRvCisgICAgICBTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyBBZGE5NS8kY2ZfZGlyL01ha2VmaWxlIgorICAgZG9uZQorCitmaQorCitpZiB0ZXN0ICIkY2Zfd2l0aF9hZGEiICE9ICJubyIgJiYgdGVzdCAiJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiAhPSAibm8iOyB0aGVuCisgICBTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyBBZGE5NS9nZW4vYWRhY3Vyc2VzLWNvbmZpZyIKK2ZpCisKK0RJUlNfVE9fTUFLRT0ibGliIgorZm9yIGNmX2l0ZW0gaW4gJGNmX2xpc3RfbW9kZWxzCitkbworCisJY2FzZSAkY2ZfaXRlbSBpbgorCWxpYnRvb2wpIGNmX3N1YmRpcj0nb2JqX2xvJyAgOzsKKwlub3JtYWwpICBjZl9zdWJkaXI9J29iamVjdHMnIDs7CisJZGVidWcpICAgY2Zfc3ViZGlyPSdvYmpfZycgOzsKKwlwcm9maWxlKSBjZl9zdWJkaXI9J29ial9wJyA7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCQljeWd3aW4pICModmkKKwkJCWNmX3N1YmRpcj0nb2JqZWN0cycgOzsKKwkJKikKKwkJCWNmX3N1YmRpcj0nb2JqX3MnIDs7CisJCWVzYWMKKwllc2FjCisKKwlmb3IgY2ZfaXRlbTIgaW4gJERJUlNfVE9fTUFLRQorCWRvCisJCXRlc3QgJGNmX2l0ZW0yID0gJGNmX3N1YmRpciAmJiBicmVhaworCWRvbmUKKwl0ZXN0ICIuJGNmX2l0ZW0yIiAhPSAiLiRjZl9zdWJkaXIiICYmIERJUlNfVE9fTUFLRT0iJERJUlNfVE9fTUFLRSAkY2Zfc3ViZGlyIgorZG9uZQorZm9yIGNmX2RpciBpbiAkRElSU19UT19NQUtFCitkbworCXRlc3QgISAtZCAkY2ZfZGlyICYmIG1rZGlyICRjZl9kaXIKK2RvbmUKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBOQ1VSU0VTX1BBVEhTRVAgJyRQQVRIU0VQJworRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgTkNVUlNFU19WRVJTSU9OX1NUUklORyAiJHtOQ1VSU0VTX01BSk9SfS4ke05DVVJTRVNfTUlOT1J9LiR7TkNVUlNFU19QQVRDSH0iCitFT0YKKworIyMjIE5vdyB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyB0ZXN0cywgYWRkIHRoZSBjb21waWxlci13YXJuaW5ncywgaWYgYW55CisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gJEVYVFJBX0NGTEFHUworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisjIyMgSWYgd2UncmUgYnVpbGRpbmcgd2l0aCBycGF0aCwgdHJ5IHRvIGxpbmsgbm9uLXN0YW5kYXJkIGxpYnMgdGhhdCB3YXkgdG9vLgoraWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCI7IHRoZW4KKworZWNobyAiJGFzX21lOjE2NzYzOiBjaGVja2luZyBmb3IgdXBkYXRlZCBMREZMQUdTIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVwZGF0ZWQgTERGTEFHUy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgLW4gIiRMREZMQUdTIiA7IHRoZW4KK2VjaG8gIiRhc19tZToxNjc2NjogcmVzdWx0OiBtYXliZSIgPiY1CitlY2hvICIke0VDSE9fVH1tYXliZSIgPiY2Cit0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLmNoZWNraW5nIExERkxBR1MgJExERkxBR1MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjE2NzcwOiB0ZXN0aW5nIC4uLmNoZWNraW5nIExERkxBR1MgJExERkxBR1MgLi4uIiAxPiY1CisKK3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uY2hlY2tpbmcgRVhUUkFfTERGTEFHUyAkRVhUUkFfTERGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTY3NzQ6IHRlc3RpbmcgLi4uY2hlY2tpbmcgRVhUUkFfTERGTEFHUyAkRVhUUkFfTERGTEFHUyAuLi4iIDE+JjUKKworY2FzZSAiJEVYVFJBX0xERkxBR1MiIGluICModmkKKy1XbCwtcnBhdGgsKikgIyh2aQorCWNmX3JwYXRoX2hhY2s9Ii1XbCwtcnBhdGgsIgorCTs7CistUlwgKikKKwljZl9ycGF0aF9oYWNrPSItUiAiCisJOzsKKy1SKikKKwljZl9ycGF0aF9oYWNrPSItUiIKKwk7OworKikKKwljZl9ycGF0aF9oYWNrPQorCTs7Citlc2FjCitpZiB0ZXN0IC1uICIkY2ZfcnBhdGhfaGFjayIgOyB0aGVuCisJY2ZfcnBhdGhfZHN0PQorCWZvciBjZl9ycGF0aF9zcmMgaW4gJExERkxBR1MKKwlkbworCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCUZpbHRlcmluZyAkY2ZfcnBhdGhfc3JjIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNjc5NjogdGVzdGluZyBGaWx0ZXJpbmcgJGNmX3JwYXRoX3NyYyAuLi4iIDE+JjUKKworCQljYXNlICRjZl9ycGF0aF9zcmMgaW4gIyh2aQorCQktTCopICModmkKKwkJCWlmIHRlc3QgIiRjZl9ycGF0aF9oYWNrIiA9ICItUiAiIDsgdGhlbgorCQkJCWNmX3JwYXRoX3RtcD1gZWNobyAiJGNmX3JwYXRoX3NyYyIgfHNlZCAtZSAncyUtTCUtUiAlJ2AKKwkJCWVsc2UKKwkJCQljZl9ycGF0aF90bXA9YGVjaG8gIiRjZl9ycGF0aF9zcmMiIHxzZWQgLWUgcyUtTCUkY2ZfcnBhdGhfaGFjayVgCisJCQlmaQorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi5GaWx0ZXIgJGNmX3JwYXRoX3RtcCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTY4MDc6IHRlc3RpbmcgLi4uRmlsdGVyICRjZl9ycGF0aF90bXAgLi4uIiAxPiY1CisKKwkJCUVYVFJBX0xERkxBR1M9IiRjZl9ycGF0aF90bXAgJEVYVFJBX0xERkxBR1MiCisJCQk7OworCQllc2FjCisJCWNmX3JwYXRoX2RzdD0iJGNmX3JwYXRoX2RzdCAkY2ZfcnBhdGhfc3JjIgorCWRvbmUKKwlMREZMQUdTPSRjZl9ycGF0aF9kc3QKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLmNoZWNrZWQgTERGTEFHUyAkTERGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTY4MTc6IHRlc3RpbmcgLi4uY2hlY2tlZCBMREZMQUdTICRMREZMQUdTIC4uLiIgMT4mNQorCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi5jaGVja2VkIEVYVFJBX0xERkxBR1MgJEVYVFJBX0xERkxBR1MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjE2ODIxOiB0ZXN0aW5nIC4uLmNoZWNrZWQgRVhUUkFfTERGTEFHUyAkRVhUUkFfTERGTEFHUyAuLi4iIDE+JjUKKworZmkKK2Vsc2UKK2VjaG8gIiRhc19tZToxNjgyNTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQorCisjIyMgRGVmaW5lIHN1YnN0aXR1dGlvbnMgZm9yIGhlYWRlciBmaWxlcyB0byBhdm9pZCBuYW1lLXBvbGx1dGlvbgorCitpZiB0ZXN0ICIkY2ZfY3ZfaGF2ZV90Y2dldGF0dHIiID0geWVzIDsgdGhlbgorCUhBVkVfVENHRVRBVFRSPTEKK2Vsc2UKKwlIQVZFX1RDR0VUQVRUUj0wCitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3Rlcm1pb19oIiA9IHllcyA7IHRoZW4KKwlIQVZFX1RFUk1JT19IPTEKK2Vsc2UKKwlIQVZFX1RFUk1JT19IPTAKK2ZpCisKK2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfdGVybWlvc19oIiA9IHllcyA7IHRoZW4KKwlIQVZFX1RFUk1JT1NfSD0xCitlbHNlCisJSEFWRV9URVJNSU9TX0g9MAorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3QgIiR1c2VfZGF0YWJhc2UiID0geWVzICYmIFNVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIG1pc2MvcnVuX3RpYy5zaDptaXNjL3J1bl90aWMuaW4iCitTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyBtaXNjL25jdXJzZXMtY29uZmlnOm1pc2MvbmN1cnNlcy1jb25maWcuaW4iCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9NS3Rlcm0uaC5hd2sgaW5jbHVkZS9jdXJzZXMuaGVhZDppbmNsdWRlL2N1cnNlcy5oLmluIGluY2x1ZGUvdGVybWNhcC5oIGluY2x1ZGUvdW5jdHJsLmggJFNVQl9NQUtFRklMRVMgTWFrZWZpbGUiCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVmYXVsdCIKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KK3sKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKyAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICBzZWQgLW4gXAorICAgICAgICAicy8nLydcXFxcJycvZzsKKyAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OworICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uIFwKKyAgICAgICAgInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICA7OworICAgIGVzYWM7Cit9IHwKKyAgc2VkICcKKyAgICAgdCBjbGVhcgorICAgICA6IGNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgL15hY19jdl9lbnYvIXMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6IGVuZCcgPj5jb25mY2FjaGUKK2lmIGNtcCAtcyAkY2FjaGVfZmlsZSBjb25mY2FjaGU7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCisgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCisgICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgZWxzZQorICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsgCV0qVlBBVEhbIAldKj0veworcy86KlwkKHNyY2Rpcik6Ki86LzsKK3MvOipcJHtzcmNkaXJ9OiovOi87CitzLzoqQHNyY2RpckA6Ki86LzsKK3MvXlwoW149XSo9WyAJXSpcKToqL1wxLzsKK3MvOiokLy87CitzL15bXj1dKj1bIAldKiQvLzsKK30nCitmaQorCitERUZTPS1ESEFWRV9DT05GSUdfSAorCis6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgZWNobyAiJGFzX21lOjE2OTM1OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2FjX2NzX2ludm9jYXRpb249IlwkMCBcJEAiCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2V0IC1vIHBvc2l4CitmaQorCisjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCithc19tZT1gZWNobyAiJDAiIHxzZWQgJ3MsLipbXFwvXSwsJ2AKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitlY2hvID5jb25mJCQuZmlsZQoraWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCisgICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgorICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KKyAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsc2UKKyAgICBhc19sbl9zPSdsbiAtcycKKyAgZmkKK2VsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9bG4KK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKworYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorCisjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KK2lmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc191bnNldD11bnNldAorZWxzZQorICBhc191bnNldD1mYWxzZQorZmkKKworIyBOTFMgbnVpc2FuY2VzLgorJGFzX3Vuc2V0IExBTkcgfHwgdGVzdCAiJHtMQU5HK3NldH0iICE9IHNldCB8fCB7IExBTkc9QzsgZXhwb3J0IExBTkc7IH0KKyRhc191bnNldCBMQ19BTEwgfHwgdGVzdCAiJHtMQ19BTEwrc2V0fSIgIT0gc2V0IHx8IHsgTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IH0KKyRhc191bnNldCBMQ19USU1FIHx8IHRlc3QgIiR7TENfVElNRStzZXR9IiAhPSBzZXQgfHwgeyBMQ19USU1FPUM7IGV4cG9ydCBMQ19USU1FOyB9CiskYXNfdW5zZXQgTENfQ1RZUEUgfHwgdGVzdCAiJHtMQ19DVFlQRStzZXR9IiAhPSBzZXQgfHwgeyBMQ19DVFlQRT1DOyBleHBvcnQgTENfQ1RZUEU7IH0KKyRhc191bnNldCBMQU5HVUFHRSB8fCB0ZXN0ICIke0xBTkdVQUdFK3NldH0iICE9IHNldCB8fCB7IExBTkdVQUdFPUM7IGV4cG9ydCBMQU5HVUFHRTsgfQorJGFzX3Vuc2V0IExDX0NPTExBVEUgfHwgdGVzdCAiJHtMQ19DT0xMQVRFK3NldH0iICE9IHNldCB8fCB7IExDX0NPTExBVEU9QzsgZXhwb3J0IExDX0NPTExBVEU7IH0KKyRhc191bnNldCBMQ19OVU1FUklDIHx8IHRlc3QgIiR7TENfTlVNRVJJQytzZXR9IiAhPSBzZXQgfHwgeyBMQ19OVU1FUklDPUM7IGV4cG9ydCBMQ19OVU1FUklDOyB9CiskYXNfdW5zZXQgTENfTUVTU0FHRVMgfHwgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiAhPSBzZXQgfHwgeyBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IH0KKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCithc19ubD0nCisnCitJRlM9IiAJJGFzX25sIgorCisjIENEUEFUSC4KKyRhc191bnNldCBDRFBBVEggfHwgdGVzdCAiJHtDRFBBVEgrc2V0fSIgIT0gc2V0IHx8IHsgQ0RQQVRIPTo7IGV4cG9ydCBDRFBBVEg7IH0KKworZXhlYyA2PiYxCisKK19BQ0VPRgorCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2ZpbGVzIjsgdGhlbgorICBlY2hvICJjb25maWdfZmlsZXM9XCIkYWNfY29uZmlnX2ZpbGVzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfaGVhZGVycyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2hlYWRlcnM9XCIkYWNfY29uZmlnX2hlYWRlcnNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19saW5rcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2xpbmtzPVwiJGFjX2NvbmZpZ19saW5rc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2NvbW1hbmRzIjsgdGhlbgorICBlY2hvICJjb25maWdfY29tbWFuZHM9XCIkYWNfY29uZmlnX2NvbW1hbmRzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorCithY19jc191c2FnZT0iXAorXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCitjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisKK1VzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCisKKyAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorCitDb25maWd1cmF0aW9uIGZpbGVzOgorJGNvbmZpZ19maWxlcworCitDb25maWd1cmF0aW9uIGhlYWRlcnM6CiskY29uZmlnX2hlYWRlcnMKKworQ29uZmlndXJhdGlvbiBjb21tYW5kczoKKyRjb25maWdfY29tbWFuZHMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvY29uZkBnbnUub3JnPi4iCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxFT0YKK2FjX2NzX3ZlcnNpb249IlxcCitjb25maWcuc3RhdHVzCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTIuMjAwODAzMjUsCisgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorCitDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCitzcmNkaXI9JHNyY2RpcgorSU5TVEFMTD0iJElOU1RBTEwiCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisjIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAorIyB2YWx1ZS4gIEJ5IHdlIG5lZWQgdG8ga25vdyBpZiBmaWxlcyB3ZXJlIHNwZWNpZmllZCBieSB0aGUgdXNlci4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0qKQorICAgIGFjX29wdGlvbj1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCknYAorICAgIHNoaWZ0CisgICAgc2V0IGR1bW15ICIkYWNfb3B0aW9uIiAiJGFjX29wdGFyZyIgJHsxKyIkQCJ9CisgICAgc2hpZnQKKyAgICA7OworICAtKik7OworICAqKSAjIFRoaXMgaXMgbm90IGFuIG9wdGlvbiwgc28gdGhlIHVzZXIgaGFzIHByb2JhYmx5IGdpdmVuIGV4cGxpY2l0CisgICAgICMgYXJndW1lbnRzLgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgZXNhYworCisgIGNhc2UgJDEgaW4KKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KK0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxFT0YKKyAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgZWNobyAicnVubmluZyAkU0hFTEwgJDAgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIKKyAgICBleGVjICRTSEVMTCAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24gOzsKK0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisgIC0tdmVyc2lvbiB8IC0tdmVycyogfCAtViApCisgICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIHsgeyBlY2hvICIkYXNfbWU6MTcxMTE6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCAwIDs7CisgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICBzaGlmdAorICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkMSIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgIHNoaWZ0CisgICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAkMSIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSB7IHsgZWNobyAiJGFzX21lOjE3MTMwOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworCisgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitleGVjIDU+PmNvbmZpZy5sb2cKK2NhdCA+JjUgPDwgX0FDRU9GCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdW5uaW5nIGNvbmZpZy5zdGF0dXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSAkYXNfbWUgMi41Mi4yMDA4MDMyNSwgZXhlY3V0ZWQgd2l0aAorICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKyAgPiAkYWNfY3NfaW52b2NhdGlvbgorb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKK19BQ0VPRgorRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8RU9GCisjCisjIElOSVQtQ09NTUFORFMgc2VjdGlvbi4KKyMKKworIyMjIFNwZWNpYWwgaW5pdGlhbGl6YXRpb24gY29tbWFuZHMsIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorIyMjIGNvbmZpZ3VyYXRpb24tcnVuIGludG8gY29uZmlnLnN0YXR1cworCitBV0s9IiRBV0siCitERlRfQVJHX1NVRkZJWD0iJERGVF9BUkdfU1VGRklYIgorREZUX0xXUl9NT0RFTD0iJERGVF9MV1JfTU9ERUwiCitFQ0hPX0xJTks9IiRFQ0hPX0xJTksiCitMRENPTkZJRz0iJExEQ09ORklHIgorTElCX05BTUU9IiRMSUJfTkFNRSIKK0xJQl9TVUJTRVRTPSIkTElCX1NVQlNFVFMiCitMSUJfU1VGRklYPSIkTElCX1NVRkZJWCIKK0xJQl9UUkFDSU5HPSIkTElCX1RSQUNJTkciCitNQUtFX1RFUk1JTkZPPSIkTUFLRV9URVJNSU5GTyIKK05DVVJTRVNfTUFKT1I9IiROQ1VSU0VTX01BSk9SIgorTkNVUlNFU19NSU5PUj0iJE5DVVJTRVNfTUlOT1IiCitOQ1VSU0VTX09TUEVFRD0iJE5DVVJTRVNfT1NQRUVEIgorTkNVUlNFU19QQVRDSD0iJE5DVVJTRVNfUEFUQ0giCitTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIgorVEVSTUlORk89IiRURVJNSU5GTyIKK1RJTkZPX0FSR19TVUZGSVg9IiRUSU5GT19BUkdfU1VGRklYIgorVElORk9fTElCX1NVRkZJWD0iJFRJTkZPX0xJQl9TVUZGSVgiCitUSU5GT19OQU1FPSIkVElORk9fTkFNRSIKK1RJTkZPX1NVRkZJWD0iJFRJTkZPX1NVRkZJWCIKK1RJQ1NfQVJHX1NVRkZJWD0iJFRJQ1NfQVJHX1NVRkZJWCIKK1RJQ1NfTElCX1NVRkZJWD0iJFRJQ1NfTElCX1NVRkZJWCIKK1RJQ1NfTkFNRT0iJFRJQ1NfTkFNRSIKK1dJVEhfQ1VSU0VTX0g9IiR3aXRoX2N1cnNlc19oIgorV0lUSF9FQ0hPPSIkd2l0aF9lY2hvIgorV0lUSF9PVkVSV1JJVEU9IiR3aXRoX292ZXJ3cml0ZSIKK2NmX0xJU1RfTU9ERUxTPSIkY2ZfbGlzdF9tb2RlbHMiCitjZl9jdl9hYmlfdmVyc2lvbj0iJGNmX2N2X2FiaV92ZXJzaW9uIgorY2ZfY3ZfZG9fcmVsaW5rPSIkY2ZfY3ZfZG9fcmVsaW5rIgorY2ZfY3ZfZG9fc3ltbGlua3M9IiRjZl9jdl9kb19zeW1saW5rcyIKK2NmX2N2X2VuYWJsZV9scDY0PSIkY2ZfY3ZfZW5hYmxlX2xwNjQiCitjZl9jdl9lbmFibGVfb3BhcXVlPSIkY2ZfY3ZfZW5hYmxlX29wYXF1ZSIKK2NmX2N2X3Byb2dfQ0NfY19vPSRjZl9jdl9wcm9nX0NDX2NfbworY2ZfY3ZfcHJvZ19DWFhfY19vPSRjZl9jdl9wcm9nX0NYWF9jX28KK2NmX2N2X3JlbF92ZXJzaW9uPSIkY2ZfY3ZfcmVsX3ZlcnNpb24iCitjZl9jdl9ybV9zb19sb2NzPSIkY2ZfY3Zfcm1fc29fbG9jcyIKK2NmX2N2X3NoYXJlZF9zb25hbWU9JyRjZl9jdl9zaGFyZWRfc29uYW1lJworY2ZfY3Zfc2hsaWJfdmVyc2lvbj0iJGNmX2N2X3NobGliX3ZlcnNpb24iCitjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PSIkY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCIKK2NmX2N2X3N5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCitjZl93aXRoX2N4eF9iaW5kaW5nPSIkY2Zfd2l0aF9jeHhfYmluZGluZyIKK2hvc3Q9IiRob3N0IgordGFyZ2V0PSIkdGFyZ2V0IgorCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgIiRhY19jb25maWdfdGFyZ2V0IiBpbgorICAjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KKyAgImluY2x1ZGUvTUt0ZXJtLmguYXdrIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL01LdGVybS5oLmF3ayIgOzsKKyAgImluY2x1ZGUvY3Vyc2VzLmhlYWQiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvY3Vyc2VzLmhlYWQ6aW5jbHVkZS9jdXJzZXMuaC5pbiIgOzsKKyAgImluY2x1ZGUvdGVybWNhcC5oIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL3Rlcm1jYXAuaCIgOzsKKyAgImluY2x1ZGUvdW5jdHJsLmgiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvdW5jdHJsLmgiIDs7CisgICIkU1VCX01BS0VGSUxFUyIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgJFNVQl9NQUtFRklMRVMiIDs7CisgICJNYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICJkZWZhdWx0IiApIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZWZhdWx0IiA7OworICAiaW5jbHVkZS9uY3Vyc2VzX2NmZy5oIiApIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgaW5jbHVkZS9uY3Vyc2VzX2NmZy5oOmluY2x1ZGUvbmN1cnNlc19jZmcuaGluIiA7OworICAqKSB7IHsgZWNobyAiJGFzX21lOjE3MjI3OiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBlc2FjCitkb25lCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorJGRlYnVnIHx8Cit7CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAorICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorfQorCisjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKzogJHtUTVBESVI9L3RtcH0KK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAtcSAiJFRNUERJUi9jc1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPSRUTVBESVIvY3MkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKK30gfHwKK3sKKyAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH0KK30KKworRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8RU9GCisKKyMKKyMgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjCisKKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdoZW4gLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCitpZiB0ZXN0IC1uICJcJENPTkZJR19GSUxFUyI7IHRoZW4KKyAgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKyAgc2VkICdzLyxAL0BALzsgcy9ALC9AQC87IHMvLDt0IHRcJC9AO3QgdC87IC9AO3QgdFwkL3MvW1xcXFwmLF0vXFxcXCYvZzsKKyAgIHMvQEAvLEAvOyBzL0BAL0AsLzsgcy9AO3QgdFwkLyw7dCB0LycgPlwkdG1wL3N1YnMuc2VkIDw8XFxDRU9GCitzLEBTSEVMTEAsJFNIRUxMLDt0IHQKK3MsQGV4ZWNfcHJlZml4QCwkZXhlY19wcmVmaXgsO3QgdAorcyxAcHJlZml4QCwkcHJlZml4LDt0IHQKK3MsQHByb2dyYW1fdHJhbnNmb3JtX25hbWVALCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lLDt0IHQKK3MsQGJpbmRpckAsJGJpbmRpciw7dCB0CitzLEBzYmluZGlyQCwkc2JpbmRpciw7dCB0CitzLEBsaWJleGVjZGlyQCwkbGliZXhlY2Rpciw7dCB0CitzLEBkYXRhZGlyQCwkZGF0YWRpciw7dCB0CitzLEBzeXNjb25mZGlyQCwkc3lzY29uZmRpciw7dCB0CitzLEBzaGFyZWRzdGF0ZWRpckAsJHNoYXJlZHN0YXRlZGlyLDt0IHQKK3MsQGxvY2Fsc3RhdGVkaXJALCRsb2NhbHN0YXRlZGlyLDt0IHQKK3MsQGxpYmRpckAsJGxpYmRpciw7dCB0CitzLEBpbmNsdWRlZGlyQCwkaW5jbHVkZWRpciw7dCB0CitzLEBvbGRpbmNsdWRlZGlyQCwkb2xkaW5jbHVkZWRpciw7dCB0CitzLEBpbmZvZGlyQCwkaW5mb2Rpciw7dCB0CitzLEBtYW5kaXJALCRtYW5kaXIsO3QgdAorcyxAUEFDS0FHRV9OQU1FQCwkUEFDS0FHRV9OQU1FLDt0IHQKK3MsQFBBQ0tBR0VfVEFSTkFNRUAsJFBBQ0tBR0VfVEFSTkFNRSw7dCB0CitzLEBQQUNLQUdFX1ZFUlNJT05ALCRQQUNLQUdFX1ZFUlNJT04sO3QgdAorcyxAUEFDS0FHRV9TVFJJTkdALCRQQUNLQUdFX1NUUklORyw7dCB0CitzLEBQQUNLQUdFX0JVR1JFUE9SVEAsJFBBQ0tBR0VfQlVHUkVQT1JULDt0IHQKK3MsQGJ1aWxkX2FsaWFzQCwkYnVpbGRfYWxpYXMsO3QgdAorcyxAaG9zdF9hbGlhc0AsJGhvc3RfYWxpYXMsO3QgdAorcyxAdGFyZ2V0X2FsaWFzQCwkdGFyZ2V0X2FsaWFzLDt0IHQKK3MsQEVDSE9fQ0AsJEVDSE9fQyw7dCB0CitzLEBFQ0hPX05ALCRFQ0hPX04sO3QgdAorcyxARUNIT19UQCwkRUNIT19ULDt0IHQKK3MsQFBBVEhfU0VQQVJBVE9SQCwkUEFUSF9TRVBBUkFUT1IsO3QgdAorcyxAREVGU0AsJERFRlMsO3QgdAorcyxATElCU0AsJExJQlMsO3QgdAorcyxAdG9wX2J1aWxkZGlyQCwkdG9wX2J1aWxkZGlyLDt0IHQKK3MsQEVHUkVQQCwkRUdSRVAsO3QgdAorcyxATkNVUlNFU19NQUpPUkAsJE5DVVJTRVNfTUFKT1IsO3QgdAorcyxATkNVUlNFU19NSU5PUkAsJE5DVVJTRVNfTUlOT1IsO3QgdAorcyxATkNVUlNFU19QQVRDSEAsJE5DVVJTRVNfUEFUQ0gsO3QgdAorcyxAY2ZfY3ZfcmVsX3ZlcnNpb25ALCRjZl9jdl9yZWxfdmVyc2lvbiw7dCB0CitzLEBjZl9jdl9hYmlfdmVyc2lvbkAsJGNmX2N2X2FiaV92ZXJzaW9uLDt0IHQKK3MsQGNmX2N2X2J1aWx0aW5fYm9vbEAsJGNmX2N2X2J1aWx0aW5fYm9vbCw7dCB0CitzLEBjZl9jdl9oZWFkZXJfc3RkYm9vbF9oQCwkY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCw7dCB0CitzLEBjZl9jdl90eXBlX29mX2Jvb2xALCRjZl9jdl90eXBlX29mX2Jvb2wsO3QgdAorcyxAYnVpbGRALCRidWlsZCw7dCB0CitzLEBidWlsZF9jcHVALCRidWlsZF9jcHUsO3QgdAorcyxAYnVpbGRfdmVuZG9yQCwkYnVpbGRfdmVuZG9yLDt0IHQKK3MsQGJ1aWxkX29zQCwkYnVpbGRfb3MsO3QgdAorcyxAaG9zdEAsJGhvc3QsO3QgdAorcyxAaG9zdF9jcHVALCRob3N0X2NwdSw7dCB0CitzLEBob3N0X3ZlbmRvckAsJGhvc3RfdmVuZG9yLDt0IHQKK3MsQGhvc3Rfb3NALCRob3N0X29zLDt0IHQKK3MsQHRhcmdldEAsJHRhcmdldCw7dCB0CitzLEB0YXJnZXRfY3B1QCwkdGFyZ2V0X2NwdSw7dCB0CitzLEB0YXJnZXRfdmVuZG9yQCwkdGFyZ2V0X3ZlbmRvciw7dCB0CitzLEB0YXJnZXRfb3NALCR0YXJnZXRfb3MsO3QgdAorcyxAQ0NALCRDQyw7dCB0CitzLEBDRkxBR1NALCRDRkxBR1MsO3QgdAorcyxATERGTEFHU0AsJExERkxBR1MsO3QgdAorcyxAQ1BQRkxBR1NALCRDUFBGTEFHUyw7dCB0CitzLEBhY19jdF9DQ0AsJGFjX2N0X0NDLDt0IHQKK3MsQEVYRUVYVEAsJEVYRUVYVCw7dCB0CitzLEBPQkpFWFRALCRPQkpFWFQsO3QgdAorcyxAQ1BQQCwkQ1BQLDt0IHQKK3MsQEVYVFJBX0NQUEZMQUdTQCwkRVhUUkFfQ1BQRkxBR1MsO3QgdAorcyxAUFJPR19FWFRALCRQUk9HX0VYVCw7dCB0CitzLEBMRENPTkZJR0AsJExEQ09ORklHLDt0IHQKK3MsQENYWEAsJENYWCw7dCB0CitzLEBDWFhGTEFHU0AsJENYWEZMQUdTLDt0IHQKK3MsQGFjX2N0X0NYWEAsJGFjX2N0X0NYWCw7dCB0CitzLEBBV0tALCRBV0ssO3QgdAorcyxASU5TVEFMTF9QUk9HUkFNQCwkSU5TVEFMTF9QUk9HUkFNLDt0IHQKK3MsQElOU1RBTExfU0NSSVBUQCwkSU5TVEFMTF9TQ1JJUFQsO3QgdAorcyxASU5TVEFMTF9EQVRBQCwkSU5TVEFMTF9EQVRBLDt0IHQKK3MsQExJTlRALCRMSU5ULDt0IHQKK3MsQExJTlRfT1BUU0AsJExJTlRfT1BUUyw7dCB0CitzLEBMTl9TQCwkTE5fUyw7dCB0CitzLEBTRVRfTUFLRUAsJFNFVF9NQUtFLDt0IHQKK3MsQE1BS0VfTE9XRVJfVEFHU0AsJE1BS0VfTE9XRVJfVEFHUyw7dCB0CitzLEBNQUtFX1VQUEVSX1RBR1NALCRNQUtFX1VQUEVSX1RBR1MsO3QgdAorcyxAY2ZfY3ZfbWFrZWZsYWdzQCwkY2ZfY3ZfbWFrZWZsYWdzLDt0IHQKK3MsQFJBTkxJQkAsJFJBTkxJQiw7dCB0CitzLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAorcyxATERALCRMRCw7dCB0CitzLEBhY19jdF9MREAsJGFjX2N0X0xELDt0IHQKK3MsQEFSQCwkQVIsO3QgdAorcyxAYWNfY3RfQVJALCRhY19jdF9BUiw7dCB0CitzLEBBUl9PUFRTQCwkQVJfT1BUUyw7dCB0CitzLEBERVNURElSQCwkREVTVERJUiw7dCB0CitzLEBCVUlMRF9DQ0AsJEJVSUxEX0NDLDt0IHQKK3MsQEJVSUxEX0NQUEAsJEJVSUxEX0NQUCw7dCB0CitzLEBCVUlMRF9DRkxBR1NALCRCVUlMRF9DRkxBR1MsO3QgdAorcyxAQlVJTERfQ1BQRkxBR1NALCRCVUlMRF9DUFBGTEFHUyw7dCB0CitzLEBCVUlMRF9MREZMQUdTQCwkQlVJTERfTERGTEFHUyw7dCB0CitzLEBCVUlMRF9MSUJTQCwkQlVJTERfTElCUyw7dCB0CitzLEBCVUlMRF9FWEVFWFRALCRCVUlMRF9FWEVFWFQsO3QgdAorcyxAQlVJTERfT0JKRVhUQCwkQlVJTERfT0JKRVhULDt0IHQKK3MsQGNmX2xpc3RfbW9kZWxzQCwkY2ZfbGlzdF9tb2RlbHMsO3QgdAorcyxATElCVE9PTEAsJExJQlRPT0wsO3QgdAorcyxATElCVE9PTF9DWFhALCRMSUJUT09MX0NYWCw7dCB0CitzLEBMSUJUT09MX09QVFNALCRMSUJUT09MX09QVFMsO3QgdAorcyxATElCX0NSRUFURUAsJExJQl9DUkVBVEUsO3QgdAorcyxATElCX09CSkVDVEAsJExJQl9PQkpFQ1QsO3QgdAorcyxATElCX1NVRkZJWEAsJExJQl9TVUZGSVgsO3QgdAorcyxATElCX1BSRVBALCRMSUJfUFJFUCw7dCB0CitzLEBMSUJfQ0xFQU5ALCRMSUJfQ0xFQU4sO3QgdAorcyxATElCX0NPTVBJTEVALCRMSUJfQ09NUElMRSw7dCB0CitzLEBMSUJfTElOS0AsJExJQl9MSU5LLDt0IHQKK3MsQExJQl9JTlNUQUxMQCwkTElCX0lOU1RBTEwsO3QgdAorcyxATElCX1VOSU5TVEFMTEAsJExJQl9VTklOU1RBTEwsO3QgdAorcyxAREZUX0xXUl9NT0RFTEAsJERGVF9MV1JfTU9ERUwsO3QgdAorcyxAREZUX1VQUl9NT0RFTEAsJERGVF9VUFJfTU9ERUwsO3QgdAorcyxAVElDU19OQU1FQCwkVElDU19OQU1FLDt0IHQKK3MsQFRJTkZPX05BTUVALCRUSU5GT19OQU1FLDt0IHQKK3MsQExJQl9OQU1FQCwkTElCX05BTUUsO3QgdAorcyxATElCX1BSRUZJWEAsJExJQl9QUkVGSVgsO3QgdAorcyxAQ0NfR19PUFRALCRDQ19HX09QVCw7dCB0CitzLEBDWFhfR19PUFRALCRDWFhfR19PUFQsO3QgdAorcyxATERfTU9ERUxALCRMRF9NT0RFTCw7dCB0CitzLEBDQ19TSEFSRURfT1BUU0AsJENDX1NIQVJFRF9PUFRTLDt0IHQKK3MsQExEX1NIQVJFRF9PUFRTQCwkTERfU0hBUkVEX09QVFMsO3QgdAorcyxATUtfU0hBUkVEX0xJQkAsJE1LX1NIQVJFRF9MSUIsO3QgdAorcyxATElOS19QUk9HU0AsJExJTktfUFJPR1MsO3QgdAorcyxATElOS19URVNUU0AsJExJTktfVEVTVFMsO3QgdAorcyxARVhUUkFfTERGTEFHU0AsJEVYVFJBX0xERkxBR1MsO3QgdAorcyxATE9DQUxfTERGTEFHU0AsJExPQ0FMX0xERkxBR1MsO3QgdAorcyxATE9DQUxfTERGTEFHUzJALCRMT0NBTF9MREZMQUdTMiw7dCB0CitzLEBJTlNUQUxMX0xJQkAsJElOU1RBTExfTElCLDt0IHQKK3MsQFRFUk1JTkZPX1NSQ0AsJFRFUk1JTkZPX1NSQyw7dCB0CitzLEBQQVRIU0VQQCwkUEFUSFNFUCw7dCB0CitzLEBGQUxMQkFDS19MSVNUQCwkRkFMTEJBQ0tfTElTVCw7dCB0CitzLEBXSElDSF9YVEVSTUAsJFdISUNIX1hURVJNLDt0IHQKK3MsQFRFUk1JTkZPX0RJUlNALCRURVJNSU5GT19ESVJTLDt0IHQKK3MsQFRFUk1JTkZPQCwkVEVSTUlORk8sO3QgdAorcyxATUFLRV9URVJNSU5GT0AsJE1BS0VfVEVSTUlORk8sO3QgdAorcyxAVVNFX0JJR19TVFJJTkdTQCwkVVNFX0JJR19TVFJJTkdTLDt0IHQKK3MsQFRFUk1QQVRIQCwkVEVSTVBBVEgsO3QgdAorcyxAQlJPS0VOX0xJTktFUkAsJEJST0tFTl9MSU5LRVIsO3QgdAorcyxATkNVUlNFU19DSF9UQCwkTkNVUlNFU19DSF9ULDt0IHQKK3MsQE5DVVJTRVNfTElCVVRGOEAsJE5DVVJTRVNfTElCVVRGOCw7dCB0CitzLEBORUVEX1dDSEFSX0hALCRORUVEX1dDSEFSX0gsO3QgdAorcyxATkNVUlNFU19NQlNUQVRFX1RALCROQ1VSU0VTX01CU1RBVEVfVCw7dCB0CitzLEBOQ1VSU0VTX1dDSEFSX1RALCROQ1VSU0VTX1dDSEFSX1QsO3QgdAorcyxATkNVUlNFU19XSU5UX1RALCROQ1VSU0VTX1dJTlRfVCw7dCB0CitzLEBOQ1VSU0VTX09LX1dDSEFSX1RALCROQ1VSU0VTX09LX1dDSEFSX1QsO3QgdAorcyxATkNVUlNFU19PS19XSU5UX1RALCROQ1VSU0VTX09LX1dJTlRfVCw7dCB0CitzLEBjZl9jdl9lbmFibGVfbHA2NEAsJGNmX2N2X2VuYWJsZV9scDY0LDt0IHQKK3MsQE5DVVJTRVNfVFBBUk1fVkFSQVJHU0AsJE5DVVJTRVNfVFBBUk1fVkFSQVJHUyw7dCB0CitzLEBOQ1VSU0VTX0JPT0xALCROQ1VSU0VTX0JPT0wsO3QgdAorcyxAVEVSTUlORk9fQ0FQU0AsJFRFUk1JTkZPX0NBUFMsO3QgdAorcyxATkNVUlNFU19PU1BFRURALCROQ1VSU0VTX09TUEVFRCw7dCB0CitzLEBNQU5QQUdFX1JFTkFNRVNALCRNQU5QQUdFX1JFTkFNRVMsO3QgdAorcyxATkNVUlNFU19FWFRfRlVOQ1NALCROQ1VSU0VTX0VYVF9GVU5DUyw7dCB0CitzLEBOQ1VSU0VTX0NPTlNUQCwkTkNVUlNFU19DT05TVCw7dCB0CitzLEBOQ1VSU0VTX0VYVF9DT0xPUlNALCROQ1VSU0VTX0VYVF9DT0xPUlMsO3QgdAorcyxATkNVUlNFU19NT1VTRV9WRVJTSU9OQCwkTkNVUlNFU19NT1VTRV9WRVJTSU9OLDt0IHQKK3MsQE5DVVJTRVNfU0JPT0xALCROQ1VSU0VTX1NCT09MLDt0IHQKK3MsQE5DVVJTRVNfWE5BTUVTQCwkTkNVUlNFU19YTkFNRVMsO3QgdAorcyxAUFRIUkVBREAsJFBUSFJFQUQsO3QgdAorcyxAY2ZfY3ZfZW5hYmxlX3JlZW50cmFudEAsJGNmX2N2X2VuYWJsZV9yZWVudHJhbnQsO3QgdAorcyxAY2ZfY3ZfZW5hYmxlX29wYXF1ZUAsJGNmX2N2X2VuYWJsZV9vcGFxdWUsO3QgdAorcyxATkNVUlNFU19PUEFRVUVALCROQ1VSU0VTX09QQVFVRSw7dCB0CitzLEBOQ1VSU0VTX1NJWkVfVEAsJE5DVVJTRVNfU0laRV9ULDt0IHQKK3MsQEVDSE9fTElOS0AsJEVDSE9fTElOSyw7dCB0CitzLEBFWFRSQV9DRkxBR1NALCRFWFRSQV9DRkxBR1MsO3QgdAorcyxARVhUUkFfQ1hYRkxBR1NALCRFWFRSQV9DWFhGTEFHUyw7dCB0CitzLEBBREFfVFJBQ0VALCRBREFfVFJBQ0UsO3QgdAorcyxATUFUSF9MSUJALCRNQVRIX0xJQiw7dCB0CitzLEBOQ1VSU0VTX0lOTElORUAsJE5DVVJTRVNfSU5MSU5FLDt0IHQKK3MsQGNmX2N2X3R5cGVvZl9jaHR5cGVALCRjZl9jdl90eXBlb2ZfY2h0eXBlLDt0IHQKK3MsQGNmX2N2XzFVTEAsJGNmX2N2XzFVTCw7dCB0CitzLEBjZl9jdl90eXBlb2ZfbW1hc2tfdEAsJGNmX2N2X3R5cGVvZl9tbWFza190LDt0IHQKK3MsQEhBVkVfVlNTQ0FORkAsJEhBVkVfVlNTQ0FORiw7dCB0CitzLEBURVNUX0xJQlNALCRURVNUX0xJQlMsO3QgdAorcyxAQ1hYQ1BQQCwkQ1hYQ1BQLDt0IHQKK3MsQENYWExERkxBR1NALCRDWFhMREZMQUdTLDt0IHQKK3MsQENYWF9BUkAsJENYWF9BUiw7dCB0CitzLEBDWFhfQVJfT1BUU0AsJENYWF9BUl9PUFRTLDt0IHQKK3MsQENYWExJQlNALCRDWFhMSUJTLDt0IHQKK3MsQFVTRV9DWFhfQk9PTEAsJFVTRV9DWFhfQk9PTCw7dCB0CitzLEBnbmF0X2V4aXN0c0AsJGduYXRfZXhpc3RzLDt0IHQKK3MsQE00X2V4aXN0c0AsJE00X2V4aXN0cyw7dCB0CitzLEBjZl9hZGFfbWFrZUAsJGNmX2FkYV9tYWtlLDt0IHQKK3MsQGNmX2FkYV9jb21waWxlckAsJGNmX2FkYV9jb21waWxlciw7dCB0CitzLEBjZl9hZGFfcGFja2FnZUAsJGNmX2FkYV9wYWNrYWdlLDt0IHQKK3MsQEFEQUZMQUdTQCwkQURBRkxBR1MsO3QgdAorcyxAY2ZfY29tcGlsZV9nZW5lcmljc0AsJGNmX2NvbXBpbGVfZ2VuZXJpY3MsO3QgdAorcyxAY2ZfZ2VuZXJpY19vYmplY3RzQCwkY2ZfZ2VuZXJpY19vYmplY3RzLDt0IHQKK3MsQFBSQUdNQV9VTlJFRkAsJFBSQUdNQV9VTlJFRiw7dCB0CitzLEBBREFfSU5DTFVERUAsJEFEQV9JTkNMVURFLDt0IHQKK3MsQEFEQV9PQkpFQ1RTQCwkQURBX09CSkVDVFMsO3QgdAorcyxAQUNQUEZMQUdTQCwkQUNQUEZMQUdTLDt0IHQKK3MsQERGVF9BUkdfU1VGRklYQCwkREZUX0FSR19TVUZGSVgsO3QgdAorcyxAREZUX0RFUF9TVUZGSVhALCRERlRfREVQX1NVRkZJWCw7dCB0CitzLEBERlRfT0JKX1NVQkRJUkAsJERGVF9PQkpfU1VCRElSLDt0IHQKK3MsQENYWF9MSUJfU1VGRklYQCwkQ1hYX0xJQl9TVUZGSVgsO3QgdAorcyxAVElDU19BUkdfU1VGRklYQCwkVElDU19BUkdfU1VGRklYLDt0IHQKK3MsQFRJQ1NfREVQX1NVRkZJWEAsJFRJQ1NfREVQX1NVRkZJWCw7dCB0CitzLEBUSUNTX0xJQl9TVUZGSVhALCRUSUNTX0xJQl9TVUZGSVgsO3QgdAorcyxAVElDU19BUkdTQCwkVElDU19BUkdTLDt0IHQKK3MsQFRJTkZPX0FSR19TVUZGSVhALCRUSU5GT19BUkdfU1VGRklYLDt0IHQKK3MsQFRJTkZPX0RFUF9TVUZGSVhALCRUSU5GT19ERVBfU1VGRklYLDt0IHQKK3MsQFRJTkZPX0xJQl9TVUZGSVhALCRUSU5GT19MSUJfU1VGRklYLDt0IHQKK3MsQFRJTkZPX0FSR1NALCRUSU5GT19BUkdTLDt0IHQKK3MsQFRJTkZPX0FSR1MyQCwkVElORk9fQVJHUzIsO3QgdAorcyxATERGTEFHU19TVEFUSUNALCRMREZMQUdTX1NUQVRJQyw7dCB0CitzLEBMREZMQUdTX1NIQVJFREAsJExERkxBR1NfU0hBUkVELDt0IHQKK3MsQFdJVEhfT1ZFUldSSVRFQCwkV0lUSF9PVkVSV1JJVEUsO3QgdAorcyxAVElDU19MSVNUQCwkVElDU19MSVNULDt0IHQKK3MsQFRJTkZPX0xJU1RALCRUSU5GT19MSVNULDt0IHQKK3MsQFNITElCX0xJU1RALCRTSExJQl9MSVNULDt0IHQKK3MsQE5DVVJTRVNfVFJFRUAsJE5DVVJTRVNfVFJFRSw7dCB0CitzLEBURVNUX0FSR1NALCRURVNUX0FSR1MsO3QgdAorcyxAVEVTVF9ERVBTQCwkVEVTVF9ERVBTLDt0IHQKK3MsQFRFU1RfQVJHMkAsJFRFU1RfQVJHMiw7dCB0CitzLEBURVNUX0RFUDJALCRURVNUX0RFUDIsO3QgdAorcyxAQURBX1NVQkRJUlNALCRBREFfU1VCRElSUyw7dCB0CitzLEBESVJTX1RPX01BS0VALCRESVJTX1RPX01BS0UsO3QgdAorcyxASEFWRV9UQ0dFVEFUVFJALCRIQVZFX1RDR0VUQVRUUiw7dCB0CitzLEBIQVZFX1RFUk1JT19IQCwkSEFWRV9URVJNSU9fSCw7dCB0CitzLEBIQVZFX1RFUk1JT1NfSEAsJEhBVkVfVEVSTUlPU19ILDt0IHQKK0NFT0YKKworRU9GCisKKyAgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisgICMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCisgICMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgorICBhY19tYXhfc2VkX2xpbmVzPTQ4CisgIGFjX3NlZF9mcmFnPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorICBhY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKyAgYWNfZW5kPSRhY19tYXhfc2VkX2xpbmVzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKyAgYWNfbW9yZV9saW5lcz06CisgIGFjX3NlZF9jbWRzPQorICB3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KKyAgICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KKyAgICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZworICAgIGVsc2UKKyAgICAgIHNlZCAiJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKyAgICBmaQorICAgIGlmIHRlc3QgISAtcyAkdG1wL3N1YnMuZnJhZzsgdGhlbgorICAgICAgYWNfbW9yZV9saW5lcz1mYWxzZQorICAgIGVsc2UKKyAgICAgICMgVGhlIHB1cnBvc2Ugb2YgdGhlIGxhYmVsIGFuZCBvZiB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbiBpcyB0bworICAgICAgIyBzcGVlZCB1cCB0aGUgc2VkIHByb2Nlc3NpbmcgKGlmIHRoZXJlIGFyZSBubyBgQCcgYXQgYWxsLCB0aGVyZQorICAgICAgIyBpcyBubyBuZWVkIHRvIGJyb3dzZSBhbnkgb2YgdGhlIHN1YnN0aXR1dGlvbnMpLgorICAgICAgIyBUaGVzZSBhcmUgdGhlIHR3byBleHRyYSBzZWQgY29tbWFuZHMgbWVudGlvbmVkIGFib3ZlLgorICAgICAgKGVjaG8gJzp0CisgIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCisgICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisgIAlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgZWxzZQorICAJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgIGZpCisgICAgICBhY19zZWRfZnJhZz1gZXhwciAkYWNfc2VkX2ZyYWcgKyAxYAorICAgICAgYWNfYmVnPSRhY19lbmQKKyAgICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfbGluZXNgCisgICAgZmkKKyAgZG9uZQorICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisgICAgYWNfc2VkX2NtZHM9Y2F0CisgIGZpCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKK0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfRklMRVM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCisgICAgICAgIGNhdCA+JHRtcC9zdGRpbgorICAgICAgICBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgIGVzYWMKKworICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCisgIGFjX2Rpcj1gJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisgICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgIGlmIHRlc3QgIiRhY19kaXIiICE9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorICAgIHsgY2FzZSAiJGFjX2RpciIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhc19pbmNyX2Rpcj07OworICAqKSAgICAgICAgICAgICAgICAgICAgICBhc19pbmNyX2Rpcj0uOzsKK2VzYWMKK2FzX2R1bW15PSIkYWNfZGlyIgorZm9yIGFzX21rZGlyX2RpciBpbiBgSUZTPScvXFwnOyBzZXQgWCAkYXNfZHVtbXk7IHNoaWZ0OyBlY2hvICIkQCJgOyBkbworICBjYXNlICRhc19ta2Rpcl9kaXIgaW4KKyAgICAjIFNraXAgRE9TIGRyaXZlc3BlYworICAgID86KSBhc19pbmNyX2Rpcj0kYXNfbWtkaXJfZGlyIDs7CisgICAgKikKKyAgICAgIGFzX2luY3JfZGlyPSRhc19pbmNyX2Rpci8kYXNfbWtkaXJfZGlyCisgICAgICB0ZXN0IC1kICIkYXNfaW5jcl9kaXIiIHx8IG1rZGlyICIkYXNfaW5jcl9kaXIiCisgICAgOzsKKyAgZXNhYworZG9uZTsgfQorCisgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICRhY19kaXJ8c2VkICdzLF5cLi8sLCdgIgorICAgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXi9dKiwuLi8sZydgCisgIGVsc2UKKyAgICBhY19kaXJfc3VmZml4PSBhY19kb3RzPQorICBmaQorCisgIGNhc2UgJHNyY2RpciBpbgorICAuKSAgYWNfc3JjZGlyPS4KKyAgICAgIGlmIHRlc3QgLXogIiRhY19kb3RzIjsgdGhlbgorICAgICAgICAgYWNfdG9wX3NyY2Rpcj0uCisgICAgICBlbHNlCisgICAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzIHwgc2VkICdzLC8kLCwnYAorICAgICAgZmkgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKQorICAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIHBhdGguCisgICAgYWNfc3JjZGlyPSRhY19kb3RzJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfZG90cyRzcmNkaXIgOzsKKyAgZXNhYworCisgIGNhc2UgJElOU1RBTEwgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworICAqKSBhY19JTlNUQUxMPSRhY19kb3RzJElOU1RBTEwgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZToxNzYxMDogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICBybSAtZiAiJGFjX2ZpbGUiCisgIGZpCisgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gYGVjaG8gJGFjX2ZpbGVfaW4gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCisKKyAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgIyBzcmMgdHJlZS4KKyAgYWNfZmlsZV9pbnB1dHM9YElGUz06CisgICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgIFtcXC8kXSopCisgICAgICAgICAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6MTc2Mjg6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgZWNobyAkZjs7CisgICAgICAqKSAjIFJlbGF0aXZlCisgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKyAgICAgICAgICAgIyBCdWlsZCB0cmVlCisgICAgICAgICAgIGVjaG8gJGYKKyAgICAgICAgIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKyAgICAgICAgICAgIyBTb3VyY2UgdHJlZQorICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIyAvZGV2L251bGwgdHJlZQorICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOjE3NjQxOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgIGZpOzsKKyAgICAgIGVzYWMKKyAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KK0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxFT0YKKyAgc2VkICIkYWNfdnBzdWIKKyRleHRyYXN1YgorRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzLEBjb25maWd1cmVfaW5wdXRALCRjb25maWd1cmVfaW5wdXQsO3QgdAorcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKK3MsQHRvcF9zcmNkaXJALCRhY190b3Bfc3JjZGlyLDt0IHQKK3MsQElOU1RBTExALCRhY19JTlNUQUxMLDt0IHQKKyIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAorICBybSAtZiAkdG1wL3N0ZGluCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICBtdiAkdG1wL291dCAkYWNfZmlsZQorICBlbHNlCisgICAgY2F0ICR0bXAvb3V0CisgICAgcm0gLWYgJHRtcC9vdXQKKyAgZmkKKworZG9uZQorRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKworIworIyBDT05GSUdfSEVBREVSIHNlY3Rpb24uCisjCisKKyMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCisjIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCisjCisjIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCithY19kQT0ncyxeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKK2FjX2RCPSdbIAldLiokLFwxI1wyJworYWNfZEM9JyAnCithY19kRD0nLDt0JworIyBhY19pIHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KK2FjX2lBPSdzLF5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworYWNfaUI9J1woWyAJXVwpLFwxI1wyZGVmaW5lXDMnCithY19pQz0nICcKK2FjX2lEPSdcNCw7dCcKKyMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY191QT0ncyxeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKK2FjX3VCPSckLFwxI1wyZGVmaW5lXDMnCithY191Qz0nICcKK2FjX3VEPScsO3QnCisKK2ZvciBhY19maWxlIGluIDogJENPTkZJR19IRUFERVJTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKyAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICBjYXNlICRhY19maWxlIGluCisgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKyAgICAgICAgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKyAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKyAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICBlc2FjCisKKyAgdGVzdCB4IiRhY19maWxlIiAhPSB4LSAmJiB7IGVjaG8gIiRhc19tZToxNzcwNzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKworICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQorICAjIHNyYyB0cmVlLgorICBhY19maWxlX2lucHV0cz1gSUZTPToKKyAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgW1xcLyRdKikKKyAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisgICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZToxNzcxODogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICBlY2hvICRmOzsKKyAgICAgICopICMgUmVsYXRpdmUKKyAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKyAgICAgICAgICAgZWNobyAkZgorICAgICAgICAgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAjIFNvdXJjZSB0cmVlCisgICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgorICAgICAgICAgZWxzZQorICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCisgICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6MTc3MzE6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgZmk7OworICAgICAgZXNhYworICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAjIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2VzLgorICBzZWQgJ3MvWyAJXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorCitFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgbGlzdCBvZiAjZGVmaW5lJ3MuICBXZSB3b24ndCB1c2UgaXQgYXMgYSBzZWQKKyMgc2NyaXB0LCBidXQgYXMgZGF0YSB0byBpbnNlcnQgd2hlcmUgd2Ugc2VlIEBERUZTQC4gIFdlIGV4cGVjdCBBQ19TQVZFX0RFRlMgdG8KKyMgYmUgZWl0aGVyICdjYXQnIG9yICdzb3J0Jy4KK2NhdCBjb25mZGVmcy5oIHwgdW5pcSA+Y29uZnRlc3QudmFscworCisjIEJyZWFrIHVwIGNvbmZ0ZXN0LnZhbHMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24KKyMgdGhlIHNpemUgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28uCisKK3JtIC1mIGNvbmZ0ZXN0LnRhaWwKK2VjaG8gJyAgcm0gLWYgY29uZnRlc3QuZnJhZycgPj4gJENPTkZJR19TVEFUVVMKK3doaWxlIGdyZXAgLiBjb25mdGVzdC52YWxzID4vZGV2L251bGwKK2RvCisgICMgV3JpdGUgY2h1bmtzIG9mIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gY29uZnRlc3QuZnJhZy4KKyAgZWNobyAnICBjYXQgPj4gY29uZnRlc3QuZnJhZyA8PENFT0YnID4+ICRDT05GSUdfU1RBVFVTCisgIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QudmFscyB8IHNlZCAtZSAncy8jaWZkZWYuKi8jaWYgMC8nID4+ICRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YnID4+ICRDT05GSUdfU1RBVFVTCisgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC52YWxzID4gY29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC52YWxzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudmFscworZG9uZQorcm0gLWYgY29uZnRlc3QudmFscworCisjIFJ1biBzZWQgdG8gc3Vic3RpdHV0ZSB0aGUgY29udGVudHMgb2YgY29uZnRlc3QuZnJhZyBpbnRvICR0bXAvaW4gYXQgdGhlCisjIG1hcmtlciBAREVGU0AuCitlY2hvICcgIGNhdCA+PiBjb25mdGVzdC5lZGl0IDw8Q0VPRgorL0BERUZTQC9yIGNvbmZ0ZXN0LmZyYWcKKy9AREVGU0AvZAorQ0VPRgorc2VkIC1mIGNvbmZ0ZXN0LmVkaXQgJHRtcC9pbiA+ICR0bXAvb3V0CitybSAtZiAkdG1wL2luCittdiAkdG1wL291dCAkdG1wL2luCitybSAtZiBjb25mdGVzdC5lZGl0IGNvbmZ0ZXN0LmZyYWcKKycgPj4gJENPTkZJR19TVEFUVVMKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KKyAgICBlY2hvICIvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKKyAgZWxzZQorICAgIGVjaG8gIi8qICRhY19maWxlLiAgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCisgIGZpCisgIGNhdCAkdG1wL2luID4+JHRtcC9jb25maWcuaAorICBybSAtZiAkdG1wL2luCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICBpZiBjbXAgLXMgJGFjX2ZpbGUgJHRtcC9jb25maWcuaCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgeyBlY2hvICIkYXNfbWU6MTc3ODk6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CitlY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBhY19kaXI9YCRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKyAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgICAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgICAgIHsgY2FzZSAiJGFjX2RpciIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhc19pbmNyX2Rpcj07OworICAqKSAgICAgICAgICAgICAgICAgICAgICBhc19pbmNyX2Rpcj0uOzsKK2VzYWMKK2FzX2R1bW15PSIkYWNfZGlyIgorZm9yIGFzX21rZGlyX2RpciBpbiBgSUZTPScvXFwnOyBzZXQgWCAkYXNfZHVtbXk7IHNoaWZ0OyBlY2hvICIkQCJgOyBkbworICBjYXNlICRhc19ta2Rpcl9kaXIgaW4KKyAgICAjIFNraXAgRE9TIGRyaXZlc3BlYworICAgID86KSBhc19pbmNyX2Rpcj0kYXNfbWtkaXJfZGlyIDs7CisgICAgKikKKyAgICAgIGFzX2luY3JfZGlyPSRhc19pbmNyX2Rpci8kYXNfbWtkaXJfZGlyCisgICAgICB0ZXN0IC1kICIkYXNfaW5jcl9kaXIiIHx8IG1rZGlyICIkYXNfaW5jcl9kaXIiCisgICAgOzsKKyAgZXNhYworZG9uZTsgfQorCisgICAgICBmaQorICAgICAgcm0gLWYgJGFjX2ZpbGUKKyAgICAgIG12ICR0bXAvY29uZmlnLmggJGFjX2ZpbGUKKyAgICBmaQorICBlbHNlCisgICAgY2F0ICR0bXAvY29uZmlnLmgKKyAgICBybSAtZiAkdG1wL2NvbmZpZy5oCisgIGZpCitkb25lCitFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorCisjCisjIENPTkZJR19DT01NQU5EUyBzZWN0aW9uLgorIworZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0NPTU1BTkRTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKyAgYWNfZGVzdD1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AKKyAgYWNfc291cmNlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorCisgIGNhc2UgJGFjX2Rlc3QgaW4KKyAgICBkZWZhdWx0ICkKKworZm9yIGNmX2RpciBpbiB0ZXN0CitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXI7IHRoZW4KKwkJY29udGludWUKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zOyB0aGVuCisJCSRBV0sgLWYgJHNyY2Rpci90ZXN0L21rLXRlc3QuYXdrIEVDSE9fTElOSz0iJEVDSE9fTElOSyIgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zID4+JGNmX2Rpci9NYWtlZmlsZQorCWZpCitkb25lCisKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJT1MvMip8b3MyKikgIyh2aQorICAgICAgICBMSUJfUFJFRklYPScnCisgICAgICAgIDs7CisJKikJTElCX1BSRUZJWD0nbGliJworICAgICAgICA7OworCWVzYWMKK2NmX3ByZWZpeD0kTElCX1BSRUZJWAorCitpZiB0ZXN0ICRjZl9jdl9zaGxpYl92ZXJzaW9uID0gY3lnZGxsIDsgdGhlbgorCVRJTkZPX05BTUU9JFRJTkZPX0FSR19TVUZGSVgKKwlUSU5GT19TVUZGSVg9LmRsbAorZmkKKworZm9yIGNmX2RpciBpbiAkU1JDX1NVQkRJUlMKK2RvCisJaWYgdGVzdCAhIC1kICRzcmNkaXIvJGNmX2RpciA7IHRoZW4KKwkJY29udGludWUKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXM7IHRoZW4KKworCQlTSEFSRURfTElCPQorCQlMSUJTX1RPX01BS0U9CisJCWZvciBjZl9pdGVtIGluICRjZl9MSVNUX01PREVMUworCQlkbworCisJY2FzZSAkY2ZfaXRlbSBpbgorCWxpYnRvb2wpCisJCWNmX3N1ZmZpeD0nLmxhJworCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQk7OworCW5vcm1hbCkKKwkJY2Zfc3VmZml4PScuYScKKwkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJOzsKKwlkZWJ1ZykKKwkJY2Zfc3VmZml4PSdfZy5hJworCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQk7OworCXByb2ZpbGUpCisJCWNmX3N1ZmZpeD0nX3AuYScKKwkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJOzsKKwlzaGFyZWQpCisJCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJCWN5Z3dpbiopCisJCQljZl9zdWZmaXg9Jy5kbGwnCisJCQljZl9kZXBzdWY9Jy5kbGwuYScKKwkJCTs7CisJCWRhcndpbiopCisJCQljZl9zdWZmaXg9Jy5keWxpYicKKwkJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCQk7OworCQlocHV4KikKKwkJCWNhc2UgJHRhcmdldCBpbgorCQkJaWE2NCopCisJCQkJY2Zfc3VmZml4PScuc28nCisJCQkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJCQk7OworCQkJKikKKwkJCQljZl9zdWZmaXg9Jy5zbCcKKwkJCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkqKQljZl9zdWZmaXg9Jy5zbycKKwkJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCQk7OworCQllc2FjCisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBjZl9zdWZmaXg9IiR7TElCX1NVRkZJWH0ke2NmX3N1ZmZpeH0iCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIGNmX2RlcHN1Zj0iJHtMSUJfU1VGRklYfSR7Y2ZfZGVwc3VmfSIKKworCQkJaWYgdGVzdCAkY2ZfaXRlbSA9IHNoYXJlZCA7IHRoZW4KKwkJCWlmIHRlc3QgIiRjZl9jdl9kb19zeW1saW5rcyIgPSB5ZXMgOyB0aGVuCisJCQkJY2FzZSAiJGNmX2N2X3NobGliX3ZlcnNpb24iIGluICModmkKKwkJCQlyZWwpICModmkKKwkJCQkJY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbiAjKHZpCisJCQkJCWRhcndpbiopCisJCQkJCWNhc2UgLiR7TElCX1NVRkZJWH0gaW4KKwkJCQkJLncqKQorCQkJCQkJY2Zfc3VmZml4PWBlY2hvICRjZl9zdWZmaXggfCBzZWQgJ3MvXncvLydgCisJCQkJCQljZl9zdWZmaXg9dycuJHtSRUxfVkVSU0lPTn0nIiRjZl9zdWZmaXgiCisJCQkJCQk7OworCQkJCQkqKQorCQkJCQkJY2Zfc3VmZml4PScuJHtSRUxfVkVSU0lPTn0nIiRjZl9zdWZmaXgiCisJCQkJCQk7OworCQkJCQllc2FjCisJCQkJCTs7ICModmkKKwkJCQkJKikgY2Zfc3VmZml4PSIkY2Zfc3VmZml4IicuJHtSRUxfVkVSU0lPTn0nIDs7CisJCQkJCWVzYWMKKwkJCQkJOzsKKwkJCQlhYmkpCisJCQkJCWNhc2UgIiRjZl9jdl9zeXN0ZW1fbmFtZSIgaW4gIyh2aQorCQkJCQlkYXJ3aW4qKQorCQkJCQljYXNlIC4ke0xJQl9TVUZGSVh9IGluCisJCQkJCS53KikKKwkJCQkJCWNmX3N1ZmZpeD1gZWNobyAkY2Zfc3VmZml4IHwgc2VkICdzL153Ly8nYAorCQkJCQkJY2Zfc3VmZml4PXcnLiR7QUJJX1ZFUlNJT059JyIkY2Zfc3VmZml4IgorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWNmX3N1ZmZpeD0nLiR7QUJJX1ZFUlNJT059JyIkY2Zfc3VmZml4IgorCQkJCQkJOzsKKwkJCQkJZXNhYworCQkJCQk7OyAjKHZpCisJCQkJCSopIGNmX3N1ZmZpeD0iJGNmX3N1ZmZpeCInLiR7QUJJX1ZFUlNJT059JyA7OworCQkJCQllc2FjCisJCQkJCTs7CisJCQkJZXNhYworCQkJZmkKKwkJCSMgY3lnd2luIG5lZWRzIGltcG9ydCBsaWJyYXJ5LCBhbmQgaGFzIHVuaXF1ZSBuYW1pbmcgY29udmVudGlvbgorCQkJIyB1c2UgYXV0b2RldGVjdGVkICR7Y2ZfcHJlZml4fSBmb3IgaW1wb3J0IGxpYiBhbmQgc3RhdGljIGxpYiwgYnV0CisJCQkjIHVzZSAnY3lnJyBwcmVmaXggZm9yIHNoYXJlZCBsaWIuCisJCQlpZiB0ZXN0ICRjZl9jdl9zaGxpYl92ZXJzaW9uID0gY3lnZGxsIDsgdGhlbgorCQkJCWNmX2N5Z3N1Zj1gZWNobyAiJGNmX3N1ZmZpeCIgfCBzZWQgLWUgJ3MvXC5kbGwvXCR7QUJJX1ZFUlNJT059LmRsbC8nYAorCQkJCUxJQlNfVE9fTUFLRT0iJExJQlNfVE9fTUFLRSAuLi9saWIvY3lnJHtjZl9kaXJ9JHtjZl9jeWdzdWZ9IgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJZmkKKwkJCUxJQlNfVE9fTUFLRT0iJExJQlNfVE9fTUFLRSAuLi9saWIvJHtjZl9wcmVmaXh9JHtjZl9kaXJ9JHtjZl9zdWZmaXh9IgorCQlkb25lCisKKwkJaWYgdGVzdCAkY2ZfZGlyID0gbmN1cnNlcyA7IHRoZW4KKwkJCWNmX3N1YnNldHM9IiRMSUJfU1VCU0VUUyIKKwkJCWNmX3JfcGFydHM9IiRjZl9zdWJzZXRzIgorCQkJY2ZfbGlibGlzdD0iJExJQlNfVE9fTUFLRSIKKworCQkJd2hpbGUgdGVzdCAtbiAiJGNmX3JfcGFydHMiCisJCQlkbworCQkJCWNmX2xfcGFydHM9YGVjaG8gIiRjZl9yX3BhcnRzIiB8c2VkIC1lICdzLyAuKiQvLydgCisJCQkJY2Zfcl9wYXJ0cz1gZWNobyAiJGNmX3JfcGFydHMiIHxzZWQgLWUgJ3MvXlteIF0qIC8vJ2AKKwkJCQlpZiB0ZXN0ICIkY2ZfbF9wYXJ0cyIgIT0gIiRjZl9yX3BhcnRzIiA7IHRoZW4KKwkJCQkJY2ZfaXRlbT0KKwkJCQkJY2FzZSAkY2ZfbF9wYXJ0cyBpbiAjKHZpCisJCQkJCSp0ZXJtbGliKikgIyh2aQorCQkJCQkJY2ZfaXRlbT1gZWNobyAkY2ZfbGlibGlzdCB8c2VkIC1lIHMlJHtMSUJfTkFNRX0ke0xJQl9TVUZGSVh9JSR7VElORk9fTElCX1NVRkZJWH0lZ2AKKwkJCQkJCTs7CisJCQkJCSp0aWNsaWIqKQorCQkJCQkJY2ZfaXRlbT1gZWNobyAkY2ZfbGlibGlzdCB8c2VkIC1lIHMlJHtMSUJfTkFNRX0ke0xJQl9TVUZGSVh9JSR7VElDU19MSUJfU1VGRklYfSVnYAorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWJyZWFrCisJCQkJCQk7OworCQkJCQllc2FjCisJCQkJCWlmIHRlc3QgLW4gIiRjZl9pdGVtIjsgdGhlbgorCQkJCQkJTElCU19UT19NQUtFPSIkY2ZfaXRlbSAkTElCU19UT19NQUtFIgorCQkJCQlmaQorCQkJCWVsc2UKKwkJCQkJYnJlYWsKKwkJCQlmaQorCQkJZG9uZQorCQllbHNlCisJCQljZl9zdWJzZXRzPWBlY2hvICIkTElCX1NVQlNFVFMiIHwgc2VkIC1lICdzL150ZXJtbGliLiogLy8nYAorCQlmaQorCisJCXNlZCAtZSAicyVATElCU19UT19NQUtFQCUkTElCU19UT19NQUtFJSIgXAorCQkgICAgLWUgInMlQFNIQVJFRF9MSUJAJSRTSEFSRURfTElCJSIgXAorCQkJJGNmX2Rpci9NYWtlZmlsZSA+JGNmX2Rpci9NYWtlZmlsZS5vdXQKKwkJbXYgJGNmX2Rpci9NYWtlZmlsZS5vdXQgJGNmX2Rpci9NYWtlZmlsZQorCisJCSRBV0sgLWYgJHNyY2Rpci9tay0wdGguYXdrIFwKKwkJCWxpYm5hbWU9IiR7Y2ZfZGlyfSR7TElCX1NVRkZJWH0iIHN1YnNldHM9IiRMSUJfU1VCU0VUUyIgXAorCQkJJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXMgPj4kY2ZfZGlyL01ha2VmaWxlCisKKwkJZm9yIGNmX3N1YnNldCBpbiAkY2Zfc3Vic2V0cworCQlkbworCQkJY2Zfc3ViZGlycz0KKwkJCWZvciBjZl9pdGVtIGluICRjZl9MSVNUX01PREVMUworCQkJZG8KKwkJCWVjaG8gIkFwcGVuZGluZyBydWxlcyBmb3IgJHtjZl9pdGVtfSBtb2RlbCAoJHtjZl9kaXJ9OiAke2NmX3N1YnNldH0pIgorCitjZl9JVEVNPWBlY2hvICIkY2ZfaXRlbSIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwljYXNlICRjZl9pdGVtIGluCisJbGlidG9vbCkKKwkJY2Zfc3VmZml4PScubGEnCisJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCTs7CisJbm9ybWFsKQorCQljZl9zdWZmaXg9Jy5hJworCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQk7OworCWRlYnVnKQorCQljZl9zdWZmaXg9J19nLmEnCisJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCTs7CisJcHJvZmlsZSkKKwkJY2Zfc3VmZml4PSdfcC5hJworCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQk7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkJY3lnd2luKikKKwkJCWNmX3N1ZmZpeD0nLmRsbCcKKwkJCWNmX2RlcHN1Zj0nLmRsbC5hJworCQkJOzsKKwkJZGFyd2luKikKKwkJCWNmX3N1ZmZpeD0nLmR5bGliJworCQkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJCTs7CisJCWhwdXgqKQorCQkJY2FzZSAkdGFyZ2V0IGluCisJCQlpYTY0KikKKwkJCQljZl9zdWZmaXg9Jy5zbycKKwkJCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQkJCTs7CisJCQkqKQorCQkJCWNmX3N1ZmZpeD0nLnNsJworCQkJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCSopCWNmX3N1ZmZpeD0nLnNvJworCQkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJCTs7CisJCWVzYWMKKwllc2FjCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIGNmX3N1ZmZpeD0iJHtMSUJfU1VGRklYfSR7Y2Zfc3VmZml4fSIKKwl0ZXN0IC1uICIkTElCX1NVRkZJWCIgJiYgY2ZfZGVwc3VmPSIke0xJQl9TVUZGSVh9JHtjZl9kZXBzdWZ9IgorCisJY2FzZSAkY2ZfaXRlbSBpbgorCWxpYnRvb2wpIGNmX3N1YmRpcj0nb2JqX2xvJyAgOzsKKwlub3JtYWwpICBjZl9zdWJkaXI9J29iamVjdHMnIDs7CisJZGVidWcpICAgY2Zfc3ViZGlyPSdvYmpfZycgOzsKKwlwcm9maWxlKSBjZl9zdWJkaXI9J29ial9wJyA7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCQljeWd3aW4pICModmkKKwkJCWNmX3N1YmRpcj0nb2JqZWN0cycgOzsKKwkJKikKKwkJCWNmX3N1YmRpcj0nb2JqX3MnIDs7CisJCWVzYWMKKwllc2FjCisKKwkJCSMgVGVzdCBmb3IgY2FzZSB3aGVyZSB3ZSBidWlsZCBsaWJ0aW5mbyB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCisJCQljZl9saWJuYW1lPSRjZl9kaXIKKwkJCWlmIHRlc3QgJGNmX2RpciA9IG5jdXJzZXMgOyB0aGVuCisJCQkJY2FzZSAkY2Zfc3Vic2V0IGluCisJCQkJKmJhc2UqKQorCQkJCQljZl9saWJuYW1lPSR7Y2ZfbGlibmFtZX0kTElCX1NVRkZJWAorCQkJCQk7OworCQkJCSp0ZXJtbGliKikKKwkJCQkJY2ZfbGlibmFtZT0kVElORk9fTElCX1NVRkZJWAorCQkJCQk7OworCQkJCXRpY2xpYiopCisJCQkJCWNmX2xpYm5hbWU9JFRJQ1NfTElCX1NVRkZJWAorCQkJCQk7OworCQkJCWVzYWMKKwkJCWVsc2UKKwkJCQljZl9saWJuYW1lPSR7Y2ZfbGlibmFtZX0kTElCX1NVRkZJWAorCQkJZmkKKwkJCWlmIHRlc3QgLW4gIiR7REZUX0FSR19TVUZGSVh9IiA7IHRoZW4KKwkJCQkjIHVuZG8gJExJQl9TVUZGSVggYWRkLW9uIGluIENGX0xJQl9TVUZGSVgKKwkJCQljZl9zdWZmaXg9YGVjaG8gJGNmX3N1ZmZpeCB8c2VkIC1lICJzJV4ke0xJQl9TVUZGSVh9JSUiYAorCQkJZmkKKworCQkJIyBUaGVzZSBkZXBlbmRlbmNpZXMgcmVhbGx5IGFyZSBmb3IgZGV2ZWxvcG1lbnQsIG5vdAorCQkJIyBidWlsZHMsIGJ1dCB0aGV5IGFyZSB1c2VmdWwgaW4gcG9ydGluZywgdG9vLgorCQkJY2ZfZGVwZW5kPSIuLi9pbmNsdWRlL25jdXJzZXNfY2ZnLmgiCisJCQlpZiB0ZXN0ICIkc3JjZGlyIiA9ICIuIjsgdGhlbgorCQkJCWNmX3JlbGRpcj0iLiIKKwkJCWVsc2UKKwkJCQljZl9yZWxkaXI9Ilwke3NyY2Rpcn0iCisJCQlmaQorCisJCQlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci8kY2ZfZGlyLnByaXYuaDsgdGhlbgorCQkJCWNmX2RlcGVuZD0iJGNmX2RlcGVuZCAkY2ZfcmVsZGlyLyRjZl9kaXIucHJpdi5oIgorCQkJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9jdXJzZXMucHJpdi5oOyB0aGVuCisJCQkJY2ZfZGVwZW5kPSIkY2ZfZGVwZW5kICRjZl9yZWxkaXIvY3Vyc2VzLnByaXYuaCIKKwkJCWZpCisKKyAJCQljZl9kaXJfc3VmZml4PQorIAkJCW9sZF9jZl9zdWZmaXg9IiRjZl9zdWZmaXgiCisgCQkJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb25faW5maXgiID0geWVzIDsgdGhlbgorCQkJaWYgdGVzdCAtbiAiJExJQl9TVUZGSVgiIDsgdGhlbgorCQkJCWNhc2UgJExJQl9TVUZGSVggaW4KKwkJCQl3KikKKwkJCQkJY2ZfbGlibmFtZT1gZWNobyAkY2ZfbGlibmFtZSB8IHNlZCAncy93JC8vJ2AKKwkJCQkJY2Zfc3VmZml4PWBlY2hvICRjZl9zdWZmaXggfCBzZWQgJ3MvXncvLydgCisJCQkJCWNmX2Rpcl9zdWZmaXg9dworCQkJCQk7OworCQkJCWVzYWMKKwkJCWZpCisgCQkJZmkKKworCQkJJEFXSyAtZiAkc3JjZGlyL21rLTFzdC5hd2sgXAorCQkJCW5hbWU9JHtjZl9saWJuYW1lfSR7Y2ZfZGlyX3N1ZmZpeH0gXAorCQkJCXRyYWNlcz0kTElCX1RSQUNJTkcgXAorCQkJCU1PREVMPSRjZl9JVEVNIFwKKwkJCQltb2RlbD0kY2Zfc3ViZGlyIFwKKwkJCQlwcmVmaXg9JGNmX3ByZWZpeCBcCisJCQkJc3VmZml4PSRjZl9zdWZmaXggXAorCQkJCXN1YnNldD0kY2Zfc3Vic2V0IFwKKwkJCQlUZXJtbGliUm9vdD0kVElORk9fTkFNRSBcCisJCQkJVGVybWxpYlN1ZmZpeD0kVElORk9fU1VGRklYIFwKKwkJCQlTaGxpYlZlcj0kY2ZfY3Zfc2hsaWJfdmVyc2lvbiBcCisJCQkJU2hsaWJWZXJJbmZpeD0kY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCBcCisJCQkJUmVMaW5rPSR7Y2ZfY3ZfZG9fcmVsaW5rLW5vfSBcCisJCQkJRG9MaW5rcz0kY2ZfY3ZfZG9fc3ltbGlua3MgXAorCQkJCXJtU29Mb2NzPSRjZl9jdl9ybV9zb19sb2NzIFwKKwkJCQlsZGNvbmZpZz0iJExEQ09ORklHIiBcCisJCQkJb3ZlcndyaXRlPSRXSVRIX09WRVJXUklURSBcCisJCQkJZGVwZW5kPSIkY2ZfZGVwZW5kIiBcCisJCQkJaG9zdD0iJGhvc3QiIFwKKwkJCQkkc3JjZGlyLyRjZl9kaXIvbW9kdWxlcyA+PiRjZl9kaXIvTWFrZWZpbGUKKworCQkJY2Zfc3VmZml4PSIkb2xkX2NmX3N1ZmZpeCIKKworCQkJZm9yIGNmX3N1YmRpcjIgaW4gJGNmX3N1YmRpcnMgbGliCisJCQlkbworCQkJCXRlc3QgJGNmX3N1YmRpciA9ICRjZl9zdWJkaXIyICYmIGJyZWFrCisJCQlkb25lCisJCQl0ZXN0ICIke2NmX3N1YnNldH0uJHtjZl9zdWJkaXIyfSIgIT0gIiR7Y2Zfc3Vic2V0fS4ke2NmX3N1YmRpcn0iICYmIFwKKwkJCSRBV0sgLWYgJHNyY2Rpci9tay0ybmQuYXdrIFwKKwkJCQluYW1lPSRjZl9kaXIgXAorCQkJCXRyYWNlcz0kTElCX1RSQUNJTkcgXAorCQkJCU1PREVMPSRjZl9JVEVNIFwKKwkJCQltb2RlbD0kY2Zfc3ViZGlyIFwKKwkJCQlzdWJzZXQ9JGNmX3N1YnNldCBcCisJCQkJc3JjZGlyPSRzcmNkaXIgXAorCQkJCWVjaG89JFdJVEhfRUNITyBcCisJCQkJY3JlbmFtZXM9JGNmX2N2X3Byb2dfQ0NfY19vIFwKKwkJCQljeHhyZW5hbWVzPSRjZl9jdl9wcm9nX0NYWF9jX28gXAorCQkJCSRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzID4+JGNmX2Rpci9NYWtlZmlsZQorCQkJY2Zfc3ViZGlycz0iJGNmX3N1YmRpcnMgJGNmX3N1YmRpciIKKwkJCWRvbmUKKwkJZG9uZQorCWZpCisKKwllY2hvICcJY2QgJyRjZl9kaXInICYmICR7TUFLRX0gJHtDRl9NRkxBR1N9ICRAJyA+Pk1ha2VmaWxlCitkb25lCisKK2ZvciBjZl9kaXIgaW4gJFNSQ19TVUJESVJTCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXIgOyB0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCWlmIHRlc3QgLWYgJGNmX2Rpci9NYWtlZmlsZSA7IHRoZW4KKwkJY2FzZSAiJGNmX2RpciIgaW4KKwkJQWRhOTUpICModmkKKwkJCWVjaG8gJ2xpYnMgXCcgPj4gTWFrZWZpbGUKKwkJCWVjaG8gJ2luc3RhbGwubGlicyBcJyA+PiBNYWtlZmlsZQorCQkJZWNobyAndW5pbnN0YWxsLmxpYnMgOjonID4+IE1ha2VmaWxlCisJCQllY2hvICcJY2QgJyRjZl9kaXInICYmICR7TUFLRX0gJHtDRl9NRkxBR1N9ICRAJyA+PiBNYWtlZmlsZQorCQkJOzsKKwkJZXNhYworCWZpCisKKwlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzOyB0aGVuCisJCWVjaG8gPj4gTWFrZWZpbGUKKwkJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvaGVhZGVyczsgdGhlbgorY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCitpbnN0YWxsLmluY2x1ZGVzIFxcCit1bmluc3RhbGwuaW5jbHVkZXMgXFwKK0NGX0VPRgorCQlmaQoraWYgdGVzdCAiJGNmX2RpciIgIT0gImMrKyIgOyB0aGVuCitlY2hvICdsaW50IFwnID4+IE1ha2VmaWxlCitmaQorY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCitsaWJzIFxcCitsaW50bGliIFxcCitpbnN0YWxsLmxpYnMgXFwKK3VuaW5zdGFsbC5saWJzIFxcCitpbnN0YWxsLiRjZl9kaXIgXFwKK3VuaW5zdGFsbC4kY2ZfZGlyIDo6CisJY2QgJGNmX2RpciAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFwkQAorQ0ZfRU9GCisJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzOyB0aGVuCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKKworbGlicyBcXAoraW5zdGFsbC5saWJzIFxcCit1bmluc3RhbGwubGlicyBcXAoraW5zdGFsbC5pbmNsdWRlcyBcXAordW5pbnN0YWxsLmluY2x1ZGVzIDo6CisJY2QgJGNmX2RpciAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFwkQAorQ0ZfRU9GCitmaQorZG9uZQorCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKKworaW5zdGFsbC5saWJzIHVuaW5zdGFsbC5saWJzIFxcCitpbnN0YWxsLmRhdGEgdW5pbnN0YWxsLmRhdGEgOjoKKyRNQUtFX1RFUk1JTkZPCWNkIG1pc2MgJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcJEAKKworaW5zdGFsbC5tYW4gXFwKK3VuaW5zdGFsbC5tYW4gOjoKKwljZCBtYW4gJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcJEAKKworZGlzdGNsZWFuIDo6CisJcm0gLWYgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgY29uZmlnLnN0YXR1cyBNYWtlZmlsZSBpbmNsdWRlL25jdXJzZXNfY2ZnLmgKKwlybSAtZiBoZWFkZXJzLnNoIGhlYWRlcnMuc2VkIG1rX3NoYXJlZF9saWIuc2gKKwlybSAtcmYgXCR7RElSU19UT19NQUtFfQorQ0ZfRU9GCisKKyMgU3BlY2lhbCBjYXNlOiB0YWNrJ3MgbWFucGFnZSBsaXZlcyBpbiBpdHMgb3duIGRpcmVjdG9yeS4KK2lmIHRlc3QgLWQgdGFjayA7IHRoZW4KK2lmIHRlc3QgLWYgJHNyY2Rpci8kdGFjay5oOyB0aGVuCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKKworaW5zdGFsbC5tYW4gXFwKK3VuaW5zdGFsbC5tYW4gOjoKKwljZCB0YWNrICYmIFwke01BS0V9IFwke0NGX01GTEFHU30gXCRACitDRl9FT0YKK2ZpCitmaQorCitybSAtZiBoZWFkZXJzLnNlZCBoZWFkZXJzLnNoCisKK2VjaG8gY3JlYXRpbmcgaGVhZGVycy5zaAorY2F0ID5oZWFkZXJzLnNoIDw8Q0ZfRU9GCisjISAvYmluL3NoCisjIFRoaXMgc2hlbGwgc2NyaXB0IGlzIGdlbmVyYXRlZCBieSB0aGUgJ2NvbmZpZ3VyZScgc2NyaXB0LiAgSXQgaXMgaW52b2tlZCBpbiBhCisjIHN1YmRpcmVjdG9yeSBvZiB0aGUgYnVpbGQgdHJlZS4gIEl0IGdlbmVyYXRlcyBhIHNlZC1zY3JpcHQgaW4gdGhlIHBhcmVudAorIyBkaXJlY3RvcnkgdGhhdCBpcyB1c2VkIHRvIGFkanVzdCBpbmNsdWRlcyBmb3IgaGVhZGVyIGZpbGVzIHRoYXQgcmVzaWRlIGluIGEKKyMgc3ViZGlyZWN0b3J5IG9mIC91c3IvaW5jbHVkZSwgZXRjLgorUFJHPSIiCit3aGlsZSB0ZXN0IFwkIyAhPSAzCitkbworUFJHPSJcJFBSRyBcJDEiOyBzaGlmdAorZG9uZQorRFNUPVwkMQorUkVGPVwkMgorU1JDPVwkMworVE1QU1JDPVwke1RNUERJUi0vdG1wfS9cYGJhc2VuYW1lIFwkU1JDXGBcJFwkCitUTVBTRUQ9XCR7VE1QRElSLS90bXB9L2hlYWRlcnMuc2VkXCRcJAorZWNobyBpbnN0YWxsaW5nIFwkU1JDIGluIFwkRFNUCitDRl9FT0YKKworaWYgdGVzdCAkV0lUSF9DVVJTRVNfSCA9IHllczsgdGhlbgorCWNhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKK2Nhc2UgXCREU1QgaW4KKy8qL2luY2x1ZGUvKikKKwlFTkQ9XGBiYXNlbmFtZSBcJERTVFxgCisJZm9yIGkgaW4gXGBjYXQgXCRSRUYvLi4vKi9oZWFkZXJzIHxmZ3JlcCAtdiAiIyJcYAorCWRvCisJCU5BTUU9XGBiYXNlbmFtZSBcJGlcYAorCQllY2hvICJzLzxcJE5BTUU+LzxcJEVORFwvXCROQU1FPi8iID4+IFwkVE1QU0VECisJZG9uZQorCTs7CisqKQorCWVjaG8gIiIgPj4gXCRUTVBTRUQKKwk7OworZXNhYworQ0ZfRU9GCisKK2Vsc2UKKwljYXQgPj5oZWFkZXJzLnNoIDw8Q0ZfRU9GCitjYXNlIFwkRFNUIGluCisvKi9pbmNsdWRlLyopCisJRU5EPVxgYmFzZW5hbWUgXCREU1RcYAorCWZvciBpIGluIFxgY2F0IFwkUkVGLy4uLyovaGVhZGVycyB8ZmdyZXAgLXYgIiMiXGAKKwlkbworCQlOQU1FPVxgYmFzZW5hbWUgXCRpXGAKKwkJaWYgdGVzdCAiXCROQU1FIiA9ICJjdXJzZXMuaCIKKwkJdGhlbgorCQkJZWNobyAicy88Y3Vyc2VzLmg+LzxuY3Vyc2VzLmg+LyIgPj4gXCRUTVBTRUQKKwkJCU5BTUU9bmN1cnNlcy5oCisJCWZpCisJCWVjaG8gInMvPFwkTkFNRT4vPFwkRU5EXC9cJE5BTUU+LyIgPj4gXCRUTVBTRUQKKwlkb25lCisJOzsKKyopCisJZWNobyAicy88Y3Vyc2VzLmg+LzxuY3Vyc2VzLmg+LyIgPj4gXCRUTVBTRUQKKwk7OworZXNhYworQ0ZfRU9GCitmaQorY2F0ID4+aGVhZGVycy5zaCA8PENGX0VPRgorcm0gLWYgXCRUTVBTUkMKK3NlZCAtZiBcJFRNUFNFRCBcJFNSQyA+IFwkVE1QU1JDCitOQU1FPVxgYmFzZW5hbWUgXCRTUkNcYAorQ0ZfRU9GCitpZiB0ZXN0ICRXSVRIX0NVUlNFU19IICE9IHllczsgdGhlbgorCWNhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKK3Rlc3QgIlwkTkFNRSIgPSAiY3Vyc2VzLmgiICYmIE5BTUU9bmN1cnNlcy5oCitDRl9FT0YKK2ZpCitjYXQgPj5oZWFkZXJzLnNoIDw8Q0ZfRU9GCisjIEp1c3QgaW4gY2FzZSBzb21lb25lIGd6aXAnZCBtYW5wYWdlcywgcmVtb3ZlIHRoZSBjb25mbGljdGluZyBjb3B5LgordGVzdCAtZiBcJERTVC9cJE5BTUUuZ3ogJiYgcm0gLWYgXCREU1QvXCROQU1FLmd6CisKK2V2YWwgXCRQUkcgXCRUTVBTUkMgXCREU1QvXCROQU1FCitybSAtZiBcJFRNUFNSQyBcJFRNUFNFRAorQ0ZfRU9GCisKK2NobW9kIDA3NTUgaGVhZGVycy5zaAorCitmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyIDsgdGhlbgorCQljb250aW51ZQorCWZpCisKKwlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzOyB0aGVuCisJCSRBV0sgLWYgJHNyY2Rpci9tay1oZHIuYXdrIFwKKwkJCXN1YnNldD0iJExJQl9TVUJTRVRTIiBcCisJCQljb21wYXQ9IiRXSVRIX0NVUlNFU19IIiBcCisJCQkkc3JjZGlyLyRjZl9kaXIvaGVhZGVycyA+PiRjZl9kaXIvTWFrZWZpbGUKKwlmaQorCisJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvbW9kdWxlczsgdGhlbgorCQlpZiB0ZXN0ICIkY2ZfZGlyIiAhPSAiYysrIiA7IHRoZW4KKwkJCWNhdCA+PiRjZl9kaXIvTWFrZWZpbGUgPDwiQ0ZfRU9GIgorZGVwZW5kIDogJHtBVVRPX1NSQ30KKwltYWtlZGVwZW5kIC0tICR7Q1BQRkxBR1N9IC0tICR7Q19TUkN9CisKKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KK0NGX0VPRgorCQlmaQorCWZpCitkb25lCisKKyA7OworICBlc2FjCitkb25lCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisKK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitmaQorJHtNQUtFLW1ha2V9IHByZWluc3RhbGwKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ0MjJhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmluCkBAIC0wLDAgKzEsMTgyOCBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTUtb24KK2RubAorZG5sICRJZDogY29uZmlndXJlLmluLHYgMS40NTQgMjAwOC8xMC8xOCAxNDo1MzozMiB0b20gRXhwICQKK2RubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorZG5sCitkbmwgU2VlIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCitkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX1BSRVJFUSgyLjEzLjIwMDIwMjEwKQorQUNfUkVWSVNJT04oJFJldmlzaW9uOiAxLjQ1NCAkKQorQUNfSU5JVChuY3Vyc2VzL2Jhc2UvbGliX2luaXRzY3IuYykKK0FDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uY3Vyc2VzX2NmZy5oOmluY2x1ZGUvbmN1cnNlc19jZmcuaGluKQorCitDRl9UT1BfQlVJTERESVIKK0NGX1NVQlNUX05DVVJTRVNfVkVSU0lPTgorCitDRl9XSVRIX1JFTF9WRVJTSU9OKE5DVVJTRVMpCitDRl9XSVRIX0FCSV9WRVJTSU9OCisKK0NGX0NIRUNLX0NBQ0hFKFtBQ19DQU5PTklDQUxfU1lTVEVNXSkKK0FDX0FSR19XSVRIKHN5c3RlbS10eXBlLAorWyAgLS13aXRoLXN5c3RlbS10eXBlPVhYWCAgdGVzdDogb3ZlcnJpZGUgZGVyaXZlZCBob3N0IHN5c3RlbS10eXBlXSwKK1tBQ19NU0dfV0FSTihvdmVycmlkaW5nIHN5c3RlbSB0eXBlIHRvICR3aXRodmFsKQorIGNmX2N2X3N5c3RlbV9uYW1lPSR3aXRodmFsXSkKKworIyMjCVNhdmUgdGhlIGdpdmVuICRDRkxBR1MgdG8gYWxsb3cgdXNlci1vdmVycmlkZS4KK2NmX3VzZXJfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIyMJRGVmYXVsdCBpbnN0YWxsLWxvY2F0aW9uCitDRl9DRkdfREVGQVVMVFMKKworIyMjCUNoZWNrcyBmb3IgcHJvZ3JhbXMuCitBQ19QUk9HX0NDCitDRl9HQ0NfVkVSU0lPTgorCitBQ19QUk9HX0NQUAorQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKK0NGX1BST0dfQ0NfQ19PKENDKQorQUNfSVNDX1BPU0lYCitDRl9BTlNJX0NDX1JFUUQKK0NGX1BST0dfRVhUCitDRl9QUk9HX0xEQ09ORklHCisKK2RubCBERUZFQ1QgaW4gYXV0b2NvbmYgMi4xMjoJYW4gYXR0ZW1wdCB0byBzZXQgcG9saWN5LCB0aGlzIGJyZWFrcyB0aGUKK2RubAkJCQljb25maWd1cmUgc2NyaXB0IGJ5IG5vdCBsZXR0aW5nIHVzIHRlc3QgaWYgQysrCitkbmwJCQkJaXMgcHJlc2VudCwgbWFraW5nIHRoaXMgb3B0aW9uIG5lY2Vzc2FyeS4KK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBlbnN1cmUgYm9vbCBpcyBjb25zaXN0ZW50IHdpdGggQysrKQorQUNfQVJHX1dJVEgoY3h4LAorCVsgIC0td2l0aG91dC1jeHggICAgICAgICAgIGRvIG5vdCBhZGp1c3QgbmN1cnNlcyBib29sIHRvIG1hdGNoIEMrK10sCisJW2NmX3dpdGhfY3h4PSR3aXRodmFsXSwKKwlbY2Zfd2l0aF9jeHg9eWVzXSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfY3h4KQoraWYgdGVzdCAiWCRjZl93aXRoX2N4eCIgPSBYbm8gOyB0aGVuCisJQ1hYPSIiCisJR1hYPSIiCitlbHNlCisJIyB3aXRoIGF1dG9jb25mIDIuMTMsIHdlIGNhbiBjaGFuZ2UgdGhlIGVycm9yIHRvIGEgd2FybmluZzoKKwlwdXNoZGVmKFtBQ19NU0dfRVJST1JdLAorCQlbQUNfTVNHX1JFU1VMVChubykKKwkJIEFDX01TR19XQVJOKFtZb3UgZG9uJ3QgaGF2ZSBhbnkgQysrIGNvbXBpbGVyLCB0b28gYmFkXSkKKwkJY2Zfd2l0aF9jeHg9bm87IENYWD0iIjsgR1hYPSIiO10pZG5sCisJQUNfUFJPR19DWFgKKwlwb3BkZWYoW0FDX01TR19FUlJPUl0pZG5sCisJIyBhdXRvY29uZiAyLjV4IHJlbW92ZWQgdGhlIGVycm9yIC0gYnkgaGFyZGNvZGluZyBpdCB0byBnKysuCisJaWYgdGVzdCAiJENYWCIgPSAiZysrIiA7IHRoZW4KKwkJQUNfUEFUSF9QUk9HKENYWCxnKyspCisJZmkKKwlpZiB0ZXN0ICIkQ1hYIiA9ICJnKysiIDsgdGhlbgorCQlBQ19NU0dfV0FSTihpZ25vcmluZyBoYXJkY29kZWQgZysrKQorCQljZl93aXRoX2N4eD1ubzsgQ1hYPSIiOyBHWFg9IiI7CisJZmkKK2ZpCisKK0NGX0dYWF9WRVJTSU9OCitjYXNlICRHWFhfVkVSU0lPTiBpbgorMSp8Mi5bWzAtNl1dKikKKwkjIEdYWD0iIjsgQ1hYPSIiOyBhY19jdl9wcm9nX2d4eD1ubworCSMgY2ZfY3h4X2xpYnJhcnk9bm8KKwlBQ19NU0dfV0FSTih0ZW1wbGF0ZXMgZG8gbm90IHdvcmspCisJOzsKK2VzYWMKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIEMrKyBiaW5kaW5nIGFuZCBkZW1vKQorQUNfQVJHX1dJVEgoY3h4LWJpbmRpbmcsCisJWyAgLS13aXRob3V0LWN4eC1iaW5kaW5nICAgZG8gbm90IGJ1aWxkIEMrKyBiaW5kaW5nIGFuZCBkZW1vXSwKKwlbY2Zfd2l0aF9jeHhfYmluZGluZz0kd2l0aHZhbF0sCisJW2NmX3dpdGhfY3h4X2JpbmRpbmc9JGNmX3dpdGhfY3h4XSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfY3h4X2JpbmRpbmcpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIEFkYTk1KQorQUNfQVJHX1dJVEgoYWRhLAorCVsgIC0td2l0aG91dC1hZGEgICAgICAgICAgIHN1cHByZXNzIGNoZWNrIGZvciBBZGE5NSwgZG9uJ3QgYnVpbGQgZGVtb10sCisJW2NmX3dpdGhfYWRhPSR3aXRodmFsXSwKKwlbY2Zfd2l0aF9hZGE9eWVzXSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfYWRhKQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgcHJvZ3JhbXMgc3VjaCBhcyB0aWMpCitBQ19BUkdfV0lUSChwcm9ncywKKwlbICAtLXdpdGhvdXQtcHJvZ3MgICAgICAgICBzdXBwcmVzcyBidWlsZCB3aXRoIHByb2dyYW1zIChlLmcuLCB0aWMpXSwKKwlbY2Zfd2l0aF9wcm9ncz0kd2l0aHZhbF0sCisJW2NmX3dpdGhfcHJvZ3M9eWVzXSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfcHJvZ3MpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2lzaCB0byBpbnN0YWxsIGN1cnNlcy5oKQorQUNfQVJHX1dJVEgoY3Vyc2VzLWgsCisJWyAgLS13aXRob3V0LWN1cnNlcy1oICAgICAgaW5zdGFsbCBjdXJzZXMuaCBhcyBuY3Vyc2VzLmggb25seV0sCisJW3dpdGhfY3Vyc2VzX2g9JHdpdGh2YWxdLAorCVt3aXRoX2N1cnNlc19oPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2N1cnNlc19oKQorCittb2R1bGVzX3RvX2J1aWxkPSJuY3Vyc2VzIgoraWYgdGVzdCAiWCRjZl93aXRoX3Byb2dzIiAhPSBYbm8gOyB0aGVuCittb2R1bGVzX3RvX2J1aWxkPSIkbW9kdWxlc190b19idWlsZCBwcm9ncyB0YWNrIgorZmkKK21vZHVsZXNfdG9fYnVpbGQ9IiRtb2R1bGVzX3RvX2J1aWxkIHBhbmVsIG1lbnUgZm9ybSIKKworQUNfQVJHX1BST0dSQU0KKworQ0ZfUFJPR19BV0sKK0NGX1BST0dfRUdSRVAKK0NGX1BST0dfSU5TVEFMTAorQ0ZfUFJPR19MSU5UCitBQ19QUk9HX0xOX1MKKworQUNfU1lTX0xPTkdfRklMRV9OQU1FUworCitBQ19NU0dfQ0hFQ0tJTkcoaWYgd2Ugc2hvdWxkIGFzc3VtZSBtaXhlZC1jYXNlIGZpbGVuYW1lcykKK0FDX0FSR19FTkFCTEUobWl4ZWQtY2FzZSwKKwlbICAtLWVuYWJsZS1taXhlZC1jYXNlICAgICB0aWMgc2hvdWxkIGFzc3VtZSBtaXhlZC1jYXNlIGZpbGVuYW1lc10sCisJW2VuYWJsZV9taXhlZGNhc2U9JGVuYWJsZXZhbF0sCisJW2VuYWJsZV9taXhlZGNhc2U9YXV0b10pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfbWl4ZWRjYXNlKQoraWYgdGVzdCAiJGVuYWJsZV9taXhlZGNhc2UiID0gImF1dG8iIDsgdGhlbgorICAgIENGX01JWEVEQ0FTRV9GSUxFTkFNRVMKK2Vsc2UKKyAgICBjZl9jdl9taXhlZGNhc2U9JGVuYWJsZV9taXhlZGNhc2UKKyAgICBpZiB0ZXN0ICIkZW5hYmxlX21peGVkY2FzZSIgPSAieWVzIiA7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKE1JWEVEQ0FTRV9GSUxFTkFNRVMpCisgICAgZmkKK2ZpCisKKyMgZG8gdGhpcyBhZnRlciBtaXhlZC1jYXNlIG9wdGlvbiAodGFncy9UQUdTIGlzIG5vdCBhcyBpbXBvcnRhbnQgYXMgdGljKS4KK0FDX1BST0dfTUFLRV9TRVQKK0NGX01BS0VfVEFHUworQ0ZfTUFLRUZMQUdTCisKK2RubCBUaGVzZSBhcmUgc3RhbmRhcmQgYW1vbmcgKk5JWCBzeXN0ZW1zLCBidXQgbm90IHdoZW4gY3Jvc3MtY29tcGlsaW5nCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCAnOicpCitBQ19DSEVDS19UT09MKExELCBsZCwgbGQpCitBQ19DSEVDS19UT09MKEFSLCBhciwgYXIpCitDRl9TVUJTVChhcmNoaXZlciBvcHRpb25zLEFSX09QVFMscnYpCisKK2RubCBTcGVjaWFsIG9wdGlvbiBmb3IgdXNlIGJ5IHN5c3RlbS1idWlsZGVyczogdGhlIGluc3RhbGwtcHJlZml4IGlzIHVzZWQgdG8KK2RubCBhZGp1c3QgdGhlIGxvY2F0aW9uIGludG8gd2hpY2ggdGhlIGFjdHVhbCBpbnN0YWxsIGlzIGRvbmUsIHNvIHRoYXQgYW4KK2RubCBhcmNoaXZlIGNhbiBiZSBidWlsdCB3aXRob3V0IG1vZGlmeWluZyB0aGUgaG9zdCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSBoYXZlIHNwZWNpZmllZCBhbiBpbnN0YWxsLXByZWZpeCkKK0FDX0FSR19XSVRIKGluc3RhbGwtcHJlZml4LAorCVsgIC0td2l0aC1pbnN0YWxsLXByZWZpeCAgIHByZWZpeGVzIGFjdHVhbCBpbnN0YWxsLWxvY2F0aW9uICgkREVTVERJUildLAorCVtjYXNlICIkd2l0aHZhbCIgaW4gIyh2aQorCXllc3xubykgIyh2aQorCQk7OworCSopCURFU1RESVI9IiR3aXRodmFsIgorCQk7OworCWVzYWNdKQorQUNfTVNHX1JFU1VMVCgkREVTVERJUikKK0FDX1NVQlNUKERFU1RESVIpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NGX0hFTFBfTUVTU0FHRShCdWlsZC1Ub29scyBOZWVkZWQgdG8gQ29tcGlsZSBUZW1wb3JhcnkgQXBwbGljYXRpb25zIGZvciBDcm9zcy1jb21waWxpbmc6KQorIyBJZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcsIGFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSB0b29scyBhbmQgdGhlaXIKKyMgb3B0aW9ucy4gIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIG9yaWVudGVkIHRvd2FyZCBpZGVudGlmeWluZyB0aGUgaG9zdAorIyBjb21waWxlciwgZXRjLiwgYnV0IHdlIG5lZWQgYSBidWlsZCBjb21waWxlciB0byBnZW5lcmF0ZSBwYXJ0cyBvZiB0aGUgc291cmNlLgorQ0ZfQlVJTERfQ0MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKE9wdGlvbnMgdG8gU3BlY2lmeSB0aGUgTGlicmFyaWVzIEJ1aWx0L1VzZWQ6KQorCisjIyMgT3B0aW9ucyB0byBhbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBzZXQgb2YgbGlicmFyaWVzIHdoaWNoIGFyZSB1c2VkLgorIyMjIFVzZSAiLS13aXRob3V0LW5vcm1hbCAtLXdpdGgtc2hhcmVkIiB0byBhbGxvdyB0aGUgZGVmYXVsdCBtb2RlbCB0byBiZQorIyMjIHNoYXJlZCwgZm9yIGV4YW1wbGUuCitjZl9saXN0X21vZGVscz0iIgorQUNfU1VCU1QoY2ZfbGlzdF9tb2RlbHMpZG5sCXRoZSBjb21wbGV0ZSBsaXN0IG9mIG1vZGVscyAoIm5vcm1hbCBkZWJ1ZyIpCisKK0NGX1dJVEhfTElCVE9PTAoraWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIiA7IHRoZW4KKworY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBsaWJ0b29sIgorCitlbHNlCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzKQorQUNfQVJHX1dJVEgoc2hhcmVkLAorCVsgIC0td2l0aC1zaGFyZWQgICAgICAgICAgIGdlbmVyYXRlIHNoYXJlZC1saWJyYXJpZXNdLAorCVt3aXRoX3NoYXJlZD0kd2l0aHZhbF0sCisJW3dpdGhfc2hhcmVkPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfc2hhcmVkKQordGVzdCAiJHdpdGhfc2hhcmVkIiA9ICJ5ZXMiICYmIGNmX2xpc3RfbW9kZWxzPSIkY2ZfbGlzdF9tb2RlbHMgc2hhcmVkIgorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcykKK0FDX0FSR19XSVRIKG5vcm1hbCwKKwlbICAtLXdpdGgtbm9ybWFsICAgICAgICAgICBnZW5lcmF0ZSBub3JtYWwtbGlicmFyaWVzIChkZWZhdWx0KV0sCisJW3dpdGhfbm9ybWFsPSR3aXRodmFsXSwKKwlbd2l0aF9ub3JtYWw9eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfbm9ybWFsKQordGVzdCAiJHdpdGhfbm9ybWFsIiA9ICJ5ZXMiICYmIGNmX2xpc3RfbW9kZWxzPSIkY2ZfbGlzdF9tb2RlbHMgbm9ybWFsIgorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzKQorQUNfQVJHX1dJVEgoZGVidWcsCisJWyAgLS13aXRoLWRlYnVnICAgICAgICAgICAgZ2VuZXJhdGUgZGVidWctbGlicmFyaWVzIChkZWZhdWx0KV0sCisJW3dpdGhfZGVidWc9JHdpdGh2YWxdLAorCVt3aXRoX2RlYnVnPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2RlYnVnKQordGVzdCAiJHdpdGhfZGVidWciID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBkZWJ1ZyIKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIHByb2ZpbGluZyBsaWJyYXJpZXMpCitBQ19BUkdfV0lUSChwcm9maWxlLAorCVsgIC0td2l0aC1wcm9maWxlICAgICAgICAgIGdlbmVyYXRlIHByb2ZpbGUtbGlicmFyaWVzXSwKKwlbd2l0aF9wcm9maWxlPSR3aXRodmFsXSwKKwlbd2l0aF9wcm9maWxlPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfcHJvZmlsZSkKK3Rlc3QgIiR3aXRoX3Byb2ZpbGUiID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBwcm9maWxlIgorCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FDX01TR19DSEVDS0lORyhmb3Igc3BlY2lmaWVkIG1vZGVscykKK3Rlc3QgLXogIiRjZl9saXN0X21vZGVscyIgJiYgY2ZfbGlzdF9tb2RlbHM9bm9ybWFsCitkbmwgSWYgd2UgdXNlIGxpYnRvb2wgdG8gZ2VuZXJhdGUgbGlicmFyaWVzLCB0aGVuIGl0IG11c3QgYmUgdGhlIG9ubHkKK2RubCBzcGVjaWZpZWQgbW9kZWwuCit0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAibm8iICYmIGNmX2xpc3RfbW9kZWxzPWxpYnRvb2wKK0FDX01TR19SRVNVTFQoJGNmX2xpc3RfbW9kZWxzKQorCisjIyMgVXNlIHRoZSBmaXJzdCBtb2RlbCBhcyB0aGUgZGVmYXVsdCwgYW5kIHNhdmUgaXRzIHN1ZmZpeCBmb3IgdXNlIGluIGJ1aWxkaW5nCisjIyMgdXAgdGVzdC1hcHBsaWNhdGlvbnMuCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGRlZmF1bHQgbW9kZWwpCitERlRfTFdSX01PREVMPWBlY2hvICIkY2ZfbGlzdF9tb2RlbHMiIHwgJEFXSyAne3ByaW50ICQxfSdgCitBQ19NU0dfUkVTVUxUKCRERlRfTFdSX01PREVMKQorCitDRl9VUFBFUihERlRfVVBSX01PREVMLCRERlRfTFdSX01PREVMKWRubAorCitBQ19TVUJTVChERlRfTFdSX01PREVMKWRubAl0aGUgZGVmYXVsdCBtb2RlbCAoIm5vcm1hbCIpCitBQ19TVUJTVChERlRfVVBSX01PREVMKWRubAl0aGUgZGVmYXVsdCBtb2RlbCAoIk5PUk1BTCIpCisKK1RJQ1NfTkFNRT10aWMKK0FDX1NVQlNUKFRJQ1NfTkFNRSkKKworVElORk9fTkFNRT10aW5mbworQUNfU1VCU1QoVElORk9fTkFNRSkKKworTElCX05BTUU9bmN1cnNlcworQUNfU1VCU1QoTElCX05BTUUpCisKK0xJQl9ESVI9Li4vbGliCitMSUJfMk5EPS4uLy4uL2xpYgorCitDRl9MSUJfUFJFRklYKGNmX3ByZWZpeCkKK0xJQl9QUkVGSVg9JGNmX3ByZWZpeAorQUNfU1VCU1QoTElCX1BSRUZJWCkKKworTElCX1NVRkZJWD0KK0FDX1NVQlNUKExJQl9TVUZGSVgpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEgc2VwYXJhdGUgdGVybWluZm8gbGlicmFyeSkKK0FDX0FSR19XSVRIKHRlcm1saWIsCisJWyAgLS13aXRoLXRlcm1saWIgICAgICAgICAgZ2VuZXJhdGUgc2VwYXJhdGUgdGVybWluZm8gbGlicmFyeV0sCisJW3dpdGhfdGVybWxpYj0kd2l0aHZhbF0sCisJW3dpdGhfdGVybWxpYj1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3Rlcm1saWIpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCBhIHNlcGFyYXRlIHRpYyBsaWJyYXJ5KQorQUNfQVJHX1dJVEgodGljbGliLAorCVsgIC0td2l0aC10aWNsaWIgICAgICAgICAgIGdlbmVyYXRlIHNlcGFyYXRlIHRpYyBsaWJyYXJ5XSwKKwlbd2l0aF90aWNsaWI9JHdpdGh2YWxdLAorCVt3aXRoX3RpY2xpYj1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3RpY2xpYikKKworIyMjIENoZWNrcyBmb3Igc3BlY2lhbCBsaWJyYXJpZXMsIG11c3QgYmUgZG9uZSB1cC1mcm9udC4KK1NITElCX0xJU1Q9IiIKK0NGX1dJVEhfR1BNCitpZiB0ZXN0ICIkd2l0aF9ncG0iICE9IG5vIDsgdGhlbgorCUFDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBsb2FkIEdQTSBkeW5hbWljYWxseSkKKwlBQ19BUkdfV0lUSChkbHN5bSwKKwkJWyAgLS13aXRob3V0LWRsc3ltICAgICAgICAgZG8gbm90IHVzZSBkbHN5bSgpIHRvIGxvYWQgR1BNIGR5bmFtaWNhbGx5XSwKKwkJW3dpdGhfZGxzeW09JHdpdGh2YWxdLAorCQlbd2l0aF9kbHN5bT15ZXNdKQorCUFDX01TR19SRVNVTFQoJHdpdGhfZGxzeW0pCisJaWYgdGVzdCAiJHdpdGhfZGxzeW0iID0geWVzIDsgdGhlbgorCQlDRl9GVU5DX0RMU1lNCisJCWlmIHRlc3QgIiR3aXRoX2dwbSIgIT0geWVzIDsgdGhlbgorCQkJQ0ZfVkVSQk9TRShhc3N1bWluZyBzb25hbWUgZm9yIGdwbSBpcyAkd2l0aF9ncG0pCisJCQljZl9jdl9ncG1fc29uYW1lPSIkd2l0aF9ncG0iCisJCWVsc2UKKwkJCUNGX0xJQl9TT05BTUUoWyNpbmNsdWRlIDxncG0uaD5dLFtpZiAoR3BtX09wZW4oMCwwKSkgR3BtX0Nsb3NlKCk7XSxncG0pCisJCWZpCisJCXRlc3QgIiRjZl9jdl9ncG1fc29uYW1lIiAhPSAidW5rbm93biIgJiYgQUNfREVGSU5FX1VOUVVPVEVEKExJQkdQTV9TT05BTUUsIiRjZl9jdl9ncG1fc29uYW1lIikKKwkJU0hMSUJfTElTVD0iLWxkbCAkU0hMSUJfTElTVCIKKwllbHNlCisJCVNITElCX0xJU1Q9Ii1sZ3BtICRTSExJQl9MSVNUIgorCWZpCisJQUNfREVGSU5FKEhBVkVfTElCR1BNKQorCUNGX0NIRUNLX0dQTV9XR0VUQ0gKK2ZpCisKK0NGX1dJVEhfU1lTTU9VU0UKKworZG5sIE5vdCBhbGwgcG9ydHMgb2YgZ2NjIHN1cHBvcnQgdGhlIC1nIG9wdGlvbgorCitpZiB0ZXN0IFgiJENDX0dfT1BUIiA9IFgiIiA7IHRoZW4KKwlDQ19HX09QVD0nLWcnCisJdGVzdCAtbiAiJEdDQyIgJiYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2d9IiAhPSB5ZXMgJiYgQ0NfR19PUFQ9JycKK2ZpCitBQ19TVUJTVChDQ19HX09QVCkKKworaWYgdGVzdCBYIiRDWFhfR19PUFQiID0gWCIiIDsgdGhlbgorCUNYWF9HX09QVD0nLWcnCisJdGVzdCAtbiAiJEdYWCIgJiYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nfSIgIT0geWVzICYmIENYWF9HX09QVD0nJworZmkKK0FDX1NVQlNUKENYWF9HX09QVCkKKworQUNfTVNHX0NIRUNLSU5HKGZvciBkZWZhdWx0IGxvYWRlciBmbGFncykKK2Nhc2UgJERGVF9MV1JfTU9ERUwgaW4KK2xpYnRvb2wpIExEX01PREVMPScnICAgOzsKK25vcm1hbCkgIExEX01PREVMPScnICAgOzsKK2RlYnVnKSAgIExEX01PREVMPSRDQ19HX09QVCA7OworcHJvZmlsZSkgTERfTU9ERUw9Jy1wZyc7Oworc2hhcmVkKSAgTERfTU9ERUw9JycgICA7OworZXNhYworQUNfU1VCU1QoTERfTU9ERUwpZG5sCQl0aGUgdHlwZSBvZiBsaW5rIChlLmcuLCAtZyBvciAtcGcpCitBQ19NU0dfUkVTVUxUKCRMRF9NT0RFTCkKKworY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorc2hhcmVkKQorQ0ZfRU5BQkxFX1JQQVRICitBQ19NU0dfQ0hFQ0tJTkcoaWYgc2hhcmVkIGxpYnJhcmllcyBzaG91bGQgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGwpCitBQ19BUkdfRU5BQkxFKHJlbGluaywKK1sgIC0tZGlzYWJsZS1yZWxpbmsgICAgICAgIHJlbGluayBzaGFyZWQgbGlicmFyaWVzIGR1cmluZyBpbnN0YWxsXSwKK1tjZl9jdl9kb19yZWxpbms9JGVuYWJsZXZhbF0sCitbY2ZfY3ZfZG9fcmVsaW5rPXllc10pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9kb19yZWxpbmspCisJOzsKK2VzYWMKKworQ0ZfU0hBUkVEX09QVFMKK2lmIHRlc3QgIiRDQ19TSEFSRURfT1BUUyIgPSAidW5rbm93biI7IHRoZW4KKwlmb3IgbW9kZWwgaW4gJGNmX2xpc3RfbW9kZWxzOyBkbworCQlpZiB0ZXN0ICIkbW9kZWwiID0gInNoYXJlZCI7IHRoZW4KKwkJCUFDX0VSUk9SKFNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uKQorCQlmaQorCWRvbmUKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NGX0hFTFBfTUVTU0FHRShGaW5lLVR1bmluZyBZb3VyIENvbmZpZ3VyYXRpb246KQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtb3ZlcndyaXRlIHRvIGxlYXZlIG91dCB0aGUgbGluayB0byAtbGN1cnNlcworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgbmN1cnNlcyBvdmVyd3JpdGluZyBjdXJzZXMpCitBQ19BUkdfRU5BQkxFKG92ZXJ3cml0ZSwKKwlbICAtLWRpc2FibGUtb3ZlcndyaXRlICAgICBsZWF2ZSBvdXQgdGhlIGxpbmsgdG8gLWxjdXJzZXNdLAorCVt3aXRoX292ZXJ3cml0ZT0kZW5hYmxldmFsXSwKKwlbaWYgdGVzdCAiJHByZWZpeCIgPSAiL3VzciIgOyB0aGVuIHdpdGhfb3ZlcndyaXRlPXllczsgZWxzZSB3aXRoX292ZXJ3cml0ZT1ubzsgZmldKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9vdmVyd3JpdGUpCisKK0FDX01TR19DSEVDS0lORyhpZiBleHRlcm5hbCB0ZXJtaW5mby1kYXRhYmFzZSBpcyB1c2VkKQorQUNfQVJHX0VOQUJMRShkYXRhYmFzZSwKKwlbICAtLWRpc2FibGUtZGF0YWJhc2UgICAgICBkbyBub3QgdXNlIHRlcm1pbmZvLCBvbmx5IGZhbGxiYWNrcy90ZXJtY2FwXSwKKwlbdXNlX2RhdGFiYXNlPSRlbmFibGV2YWxdLAorCVt1c2VfZGF0YWJhc2U9eWVzXSkKK0FDX01TR19SRVNVTFQoJHVzZV9kYXRhYmFzZSkKKworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCitvczIqKSAjKHZpCisJVEVSTUlORk9fU1JDPScke3RvcF9zcmNkaXJ9L21pc2MvZW14LnNyYycKKwk7OworKikgIyh2aQorCVRFUk1JTkZPX1NSQz0nJHt0b3Bfc3JjZGlyfS9taXNjL3Rlcm1pbmZvLnNyYycKKwk7OworZXNhYworQUNfU1VCU1QoVEVSTUlORk9fU1JDKQorCitDRl9QQVRIU0VQCitpZiB0ZXN0ICIkdXNlX2RhdGFiYXNlIiAhPSBubyA7IHRoZW4KKwlBQ19ERUZJTkUoVVNFX0RBVEFCQVNFKQorCisJQUNfTVNHX0NIRUNLSU5HKHdoaWNoIHRlcm1pbmZvIHNvdXJjZS1maWxlIHdpbGwgYmUgaW5zdGFsbGVkKQorCUFDX0FSR19FTkFCTEUoZGF0YWJhc2UsCisJCVsgIC0td2l0aC1kYXRhYmFzZT1YWFggICAgIHNwZWNpZnkgdGVybWluZm8gc291cmNlIHRvIGluc3RhbGxdLAorCQlbVEVSTUlORk9fU1JDPSR3aXRodmFsXSkKKwlBQ19NU0dfUkVTVUxUKCRURVJNSU5GT19TUkMpCisKKwlBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0byB1c2UgaGFzaGVkIGRhdGFiYXNlIGluc3RlYWQgb2YgZGlyZWN0b3J5L3RyZWUpCisJQUNfQVJHX1dJVEgoaGFzaGVkLWRiLAorCQlbICAtLXdpdGgtaGFzaGVkLWRiICAgICAgICBzcGVjaWZ5IGhhc2hlZC1kYXRhYmFzZSBsaWJyYXJ5XSwsCisJCVt3aXRoX2hhc2hlZF9kYj1ub10pCisJQUNfTVNHX1JFU1VMVCgkd2l0aF9oYXNoZWRfZGIpCitlbHNlCisJd2l0aF9oYXNoZWRfZGI9bm8KK2ZpCisKK0FDX01TR19DSEVDS0lORyhmb3IgbGlzdCBvZiBmYWxsYmFjayBkZXNjcmlwdGlvbnMpCitBQ19BUkdfV0lUSChmYWxsYmFja3MsCisJWyAgLS13aXRoLWZhbGxiYWNrcz1YWFggICAgc3BlY2lmeSBsaXN0IG9mIGZhbGxiYWNrIHRlcm1pbmFsIGRlc2NyaXB0aW9uc10sCisJW3dpdGhfZmFsbGJhY2s9JHdpdGh2YWxdLAorCVt3aXRoX2ZhbGxiYWNrPV0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2ZhbGxiYWNrKQorRkFMTEJBQ0tfTElTVD1gZWNobyAiJHdpdGhfZmFsbGJhY2siIHwgc2VkIC1lICdzLywvIC9nJ2AKK0FDX1NVQlNUKEZBTExCQUNLX0xJU1QpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBtb2Rlcm4geHRlcm0gb3IgYW50aXF1ZSkKK0FDX0FSR19XSVRIKHh0ZXJtLW5ldywKKwlbICAtLXdpdGhvdXQteHRlcm0tbmV3ICAgICBzcGVjaWZ5IGlmIHh0ZXJtIHRlcm1pbmZvIHNob3VsZCBiZSBvbGQgdmVyc2lvbl0sCisJW3dpdGhfeHRlcm1fbmV3PSR3aXRodmFsXSwKKwlbd2l0aF94dGVybV9uZXc9eWVzXSkKK2Nhc2UgJHdpdGhfeHRlcm1fbmV3IGluCitubykJd2l0aF94dGVybV9uZXc9eHRlcm0tb2xkOzsKKyopCXdpdGhfeHRlcm1fbmV3PXh0ZXJtLW5ldzs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCR3aXRoX3h0ZXJtX25ldykKK1dISUNIX1hURVJNPSR3aXRoX3h0ZXJtX25ldworQUNfU1VCU1QoV0hJQ0hfWFRFUk0pCisKK01BS0VfVEVSTUlORk89CitpZiB0ZXN0ICIkdXNlX2RhdGFiYXNlIiA9IG5vIDsgdGhlbgorCVRFUk1JTkZPPSIke2RhdGFkaXJ9L3Rlcm1pbmZvIgorCU1BS0VfVEVSTUlORk89IiMiCitlbHNlCisKK0FDX01TR19DSEVDS0lORyhmb3IgbGlzdCBvZiB0ZXJtaW5mbyBkaXJlY3RvcmllcykKK0NGX1dJVEhfUEFUSExJU1QodGVybWluZm8tZGlycywKKwlbICAtLXdpdGgtdGVybWluZm8tZGlycz1YWFggc3BlY2lmeSBsaXN0IG9mIHRlcm1pbmZvIGRpcmVjdG9yaWVzXSwKKwlURVJNSU5GT19ESVJTLAorCURBVEFESVIvdGVybWluZm8sCisJJHtkYXRhZGlyfS90ZXJtaW5mbykKK0FDX01TR19SRVNVTFQoJFRFUk1JTkZPX0RJUlMpCit0ZXN0IC1uICIkVEVSTUlORk9fRElSUyIgJiYgQUNfREVGSU5FX1VOUVVPVEVEKFRFUk1JTkZPX0RJUlMsIiRURVJNSU5GT19ESVJTIikKKworQUNfTVNHX0NIRUNLSU5HKGZvciBkZWZhdWx0IHRlcm1pbmZvIGRpcmVjdG9yeSkKK0NGX1dJVEhfUEFUSChkZWZhdWx0LXRlcm1pbmZvLWRpciwKKwlbICAtLXdpdGgtZGVmYXVsdC10ZXJtaW5mby1kaXI9RElSIGRlZmF1bHQgdGVybWluZm8gZGlyZWN0b3J5XSwKKwlURVJNSU5GTywKKwlEQVRBRElSL3Rlcm1pbmZvLAorCSR7ZGF0YWRpcn0vdGVybWluZm8pCitBQ19NU0dfUkVTVUxUKCRURVJNSU5GTykKK0FDX0RFRklORV9VTlFVT1RFRChURVJNSU5GTywiJFRFUk1JTkZPIikKKworZmkKKworQUNfU1VCU1QoVEVSTUlORk8pCitBQ19TVUJTVChNQUtFX1RFUk1JTkZPKQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtYmlnLWNvcmUgdG8gbWFrZSB0aWMgcnVuIG9uIHNtYWxsIG1hY2hpbmVzCisjIyMJV2UgbmVlZCA0TWIsIGNoZWNrIGlmIHdlIGNhbiBhbGxvY2F0ZSA1MCUgbW9yZSB0aGFuIHRoYXQuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgYmlnLWNvcmUgb3B0aW9uIHNlbGVjdGVkKQorQUNfQVJHX0VOQUJMRShiaWctY29yZSwKKwlbICAtLWRpc2FibGUtYmlnLWNvcmUgICAgICBhc3N1bWUgbWFjaGluZSBoYXMgbGl0dGxlIG1lbW9yeV0sCisJW3dpdGhfYmlnX2NvcmU9JGVuYWJsZXZhbF0sCisJW0FDX1RSWV9SVU4oWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisJdW5zaWduZWQgbG9uZyBuID0gNjAwMDAwMEw7CisJY2hhciAqcyA9IG1hbGxvYyhuKTsKKwlpZiAocyAhPSAwKQorCQlzWzBdID0gc1tuLTFdID0gMDsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KHMgPT0gMCk7Cit9XSwKKwlbd2l0aF9iaWdfY29yZT15ZXNdLAorCVt3aXRoX2JpZ19jb3JlPW5vXSwKKwlbd2l0aF9iaWdfY29yZT1ub10pXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfYmlnX2NvcmUpCit0ZXN0ICIkd2l0aF9iaWdfY29yZSIgPSAieWVzIiAmJiBBQ19ERUZJTkUoSEFWRV9CSUdfQ09SRSkKKworIyMjIElTTyBDIG9ubHkgZ3VhcmFudGVlcyA1MTItY2hhciBzdHJpbmdzLCB3ZSBoYXZlIHRhYmxlcyB3aGljaCBsb2FkIGZhc3RlcgorIyMjIHdoZW4gY29uc3RydWN0ZWQgdXNpbmcgImJpZyIgc3RyaW5ncy4gIE1vcmUgdGhhbiB0aGUgQyBjb21waWxlciwgdGhlIGF3aworIyMjIHByb2dyYW0gaXMgYSBsaW1pdCBvbiBtb3N0IHZlbmRvciBVTklYIHN5c3RlbXMuICBDaGVjayB0aGF0IHdlIGNhbiBidWlsZC4KK0FDX01TR19DSEVDS0lORyhpZiBiaWctc3RyaW5ncyBvcHRpb24gc2VsZWN0ZWQpCitBQ19BUkdfRU5BQkxFKGJpZy1zdHJpbmdzLAorCVsgIC0tZGlzYWJsZS1iaWctc3RyaW5ncyAgIGFzc3VtZSBjb21waWxlciBoYXMgb25seSBzdGFuZGFyZC1zaXplIHN0cmluZ3NdLAorCVt3aXRoX2JpZ19zdHJpbmdzPSRlbmFibGV2YWxdLAorCVtDRl9BV0tfQklHX1BSSU5URigxMjAwMCx3aXRoX2JpZ19zdHJpbmdzKV0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2JpZ19zdHJpbmdzKQorCitVU0VfQklHX1NUUklOR1M9MAordGVzdCAiJHdpdGhfYmlnX3N0cmluZ3MiID0gInllcyIgJiYgVVNFX0JJR19TVFJJTkdTPTEKK0FDX1NVQlNUKFVTRV9CSUdfU1RSSU5HUykKKworIyMjCXVzZSBvcHRpb24gLS1lbmFibGUtdGVybWNhcCB0byBjb21waWxlIGluIHRoZSB0ZXJtY2FwIGZhbGxiYWNrIHN1cHBvcnQKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0ZXJtY2FwLWZhbGxiYWNrIHN1cHBvcnQpCitBQ19BUkdfRU5BQkxFKHRlcm1jYXAsCisJWyAgLS1lbmFibGUtdGVybWNhcCAgICAgICAgY29tcGlsZSBpbiB0ZXJtY2FwIGZhbGxiYWNrIHN1cHBvcnRdLAorCVt3aXRoX3Rlcm1jYXA9JGVuYWJsZXZhbF0sCisJW3dpdGhfdGVybWNhcD1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3Rlcm1jYXApCisKK2lmIHRlc3QgIiR3aXRoX3Rlcm1jYXAiICE9ICJ5ZXMiIDsgdGhlbgorCWlmIHRlc3QgIiR1c2VfZGF0YWJhc2UiID0gbm8gOyB0aGVuCisJCWlmIHRlc3QgLXogIiR3aXRoX2ZhbGxiYWNrIiA7IHRoZW4KKwkJCUFDX0VSUk9SKFlvdSBoYXZlIGRpc2FibGVkIHRoZSBkYXRhYmFzZSB3L28gc3BlY2lmeWluZyBmYWxsYmFja3MpCisJCWZpCisJZmkKKwlBQ19ERUZJTkUoUFVSRV9URVJNSU5GTykKK2Vsc2UKKworaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSBubyA7IHRoZW4KKwlBQ19FUlJPUihPcHRpb25zIC0td2l0aC10aWNsaWIgYW5kIC0tZW5hYmxlLXRlcm1jYXAgY2Fubm90IGJlIGNvbWJpbmVkKQorZmkKKworQUNfREVGSU5FKFVTRV9URVJNQ0FQKQorQUNfTVNHX0NIRUNLSU5HKGZvciBsaXN0IG9mIHRlcm1jYXAgZmlsZXMpCitDRl9XSVRIX1BBVEhMSVNUKHRlcm1wYXRoLAorCVsgIC0td2l0aC10ZXJtcGF0aD1YWFggICAgIHNwZWNpZnkgbGlzdCBvZiB0ZXJtY2FwIGZpbGVzXSwKKwlURVJNUEFUSCwKKwkvZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXApCitBQ19NU0dfUkVTVUxUKCRURVJNUEFUSCkKK3Rlc3QgLW4gIiRURVJNUEFUSCIgJiYgQUNfREVGSU5FX1VOUVVPVEVEKFRFUk1QQVRILCIkVEVSTVBBVEgiKQorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS1nZXRjYXAgdG8gdXNlIGEgaGFja2VkIGdldGNhcCBmb3IgcmVhZGluZyB0ZXJtY2FwcworQUNfTVNHX0NIRUNLSU5HKGlmIGZhc3QgdGVybWNhcC1sb2FkZXIgaXMgbmVlZGVkKQorQUNfQVJHX0VOQUJMRShnZXRjYXAsCisJWyAgLS1lbmFibGUtZ2V0Y2FwICAgICAgICAgZmFzdCB0ZXJtY2FwIGxvYWQsIG5vIHhyZWZzIHRvIHRlcm1pbmZvXSwKKwlbd2l0aF9nZXRjYXA9JGVuYWJsZXZhbF0sCisJW3dpdGhfZ2V0Y2FwPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZ2V0Y2FwKQordGVzdCAiJHdpdGhfZ2V0Y2FwIiA9ICJ5ZXMiICYmIEFDX0RFRklORShVU0VfR0VUQ0FQKQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgdHJhbnNsYXRlZCB0ZXJtY2FwcyB3aWxsIGJlIGNhY2hlZCBpbiB+Ly50ZXJtaW5mbykKK0FDX0FSR19FTkFCTEUoZ2V0Y2FwLWNhY2hlLAorCVsgIC0tZW5hYmxlLWdldGNhcC1jYWNoZSAgIGNhY2hlIHRyYW5zbGF0ZWQgdGVybWNhcHMgaW4gfi8udGVybWluZm9dLAorCVt3aXRoX2dldGNhcF9jYWNoZT0kZW5hYmxldmFsXSwKKwlbd2l0aF9nZXRjYXBfY2FjaGU9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9nZXRjYXBfY2FjaGUpCit0ZXN0ICIkd2l0aF9nZXRjYXBfY2FjaGUiID0gInllcyIgJiYgQUNfREVGSU5FKFVTRV9HRVRDQVBfQ0FDSEUpCisKK2ZpCisKKyMjIyAgIFVzZSBvcHRpb24gLS1kaXNhYmxlLWhvbWUtdGVybWluZm8gdG8gY29tcGxldGVseSByZW1vdmUgfi8udGVybWluZm8KK0FDX01TR19DSEVDS0lORyhpZiB+Ly50ZXJtaW5mbyBpcyB3YW50ZWQpCitBQ19BUkdfRU5BQkxFKGhvbWUtdGVybWluZm8sCisJWyAgLS1kaXNhYmxlLWhvbWUtdGVybWluZm8gZHJvcCB+Ly50ZXJtaW5mbyBmcm9tIHRlcm1pbmZvIHNlYXJjaC1wYXRoXSwKKwlbd2l0aF9ob21lX3Rlcm1pbmZvPSRlbmFibGV2YWxdLAorCVt3aXRoX2hvbWVfdGVybWluZm89eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfaG9tZV90ZXJtaW5mbykKK3Rlc3QgIiR3aXRoX2hvbWVfdGVybWluZm8iID0gInllcyIgJiYgQUNfREVGSU5FKFVTRV9IT01FX1RFUk1JTkZPKQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gdXNlIHJlc3RyaWN0ZWQgZW52aXJvbm1lbnQgd2hlbiBydW5uaW5nIGFzIHJvb3QpCitBQ19BUkdfRU5BQkxFKHJvb3QtZW52aXJvbiwKKwlbICAtLWRpc2FibGUtcm9vdC1lbnZpcm9uICByZXN0cmljdCBlbnZpcm9ubWVudCB3aGVuIHJ1bm5pbmcgYXMgcm9vdF0sCisJW3dpdGhfcm9vdF9lbnZpcm9uPSRlbmFibGV2YWxdLAorCVt3aXRoX3Jvb3RfZW52aXJvbj15ZXNdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9yb290X2Vudmlyb24pCit0ZXN0ICIkd2l0aF9yb290X2Vudmlyb24iID0geWVzICYmIEFDX0RFRklORShVU0VfUk9PVF9FTlZJUk9OKQorCisjIyMgICBVc2Ugb3B0aW9uIC0tZW5hYmxlLXN5bWxpbmtzIHRvIG1ha2UgdGljIHVzZSBzeW1saW5rcywgbm90IGhhcmQgbGlua3MKKyMjIyAgIHRvIHJlZHVjZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorQ0ZfTElOS19GVU5DUworCit3aXRoX2xpbmtzPW5vCit3aXRoX3N5bWxpbmtzPW5vCisKKyMgc29mdCBsaW5rcyAoc3ltYm9saWMgbGlua3MpIGFyZSB1c2VmdWwgZm9yIHNvbWUgc3lzdGVtcyB3aGVyZSBoYXJkIGxpbmtzIGRvCisjIG5vdCB3b3JrLCBvciB0byBtYWtlIGl0IHNpbXBsZXIgdG8gY29weSB0ZXJtaW5mbyB0cmVlcyBhcm91bmQuCitpZiB0ZXN0ICIkYWNfY3ZfZnVuY19zeW1saW5rIiA9IHllcyA7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgdGljIHNob3VsZCB1c2Ugc3ltYm9saWMgbGlua3MpCisgICAgQUNfQVJHX0VOQUJMRShzeW1saW5rcywKKwlbICAtLWVuYWJsZS1zeW1saW5rcyAgICAgICBtYWtlIHRpYyB1c2Ugc3ltYm9saWMgbGlua3Mgbm90IGhhcmQgbGlua3NdLAorCVt3aXRoX3N5bWxpbmtzPSRlbmFibGV2YWxdLAorCVt3aXRoX3N5bWxpbmtzPW5vXSkKKyAgICBBQ19NU0dfUkVTVUxUKCR3aXRoX3N5bWxpbmtzKQorZmkKKworIyBJZiB3ZSBoYXZlIGhhcmQgbGlua3MgYW5kIGRpZCBub3QgY2hvb3NlIHRvIHVzZSBzb2Z0IGxpbmtzIGluc3RlYWQsIHRoZXJlIGlzCisjIG5vIHJlYXNvbiB0byBtYWtlIHRoaXMgY2hvaWNlIG9wdGlvbmFsIC0gdXNlIHRoZSBoYXJkIGxpbmtzLgoraWYgdGVzdCAiJHdpdGhfc3ltbGlua3MiID0gbm8gOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKGlmIHRpYyBzaG91bGQgdXNlIGhhcmQgbGlua3MpCisgICAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfbGluayIgPSB5ZXMgOyB0aGVuCisJd2l0aF9saW5rcz15ZXMKKyAgICBlbHNlCisJd2l0aF9saW5rcz1ubworICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVCgkd2l0aF9saW5rcykKK2ZpCisKK3Rlc3QgIiR3aXRoX2xpbmtzIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX0xJTktTKQordGVzdCAiJHdpdGhfc3ltbGlua3MiID0geWVzICYmIEFDX0RFRklORShVU0VfU1lNTElOS1MpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtYnJva2VuLWxpbmtlciB0byBmb3JjZSBvbiB1c2Ugb2YgYnJva2VuLWxpbmtlciBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgYnJva2VuLWxpbmtlciBzdXBwb3J0IGNvZGUpCitBQ19BUkdfRU5BQkxFKGJyb2tlbl9saW5rZXIsCisJWyAgLS1lbmFibGUtYnJva2VuX2xpbmtlciAgY29tcGlsZSB3aXRoIGJyb2tlbi1saW5rZXIgc3VwcG9ydCBjb2RlXSwKKwlbd2l0aF9icm9rZW5fbGlua2VyPSRlbmFibGV2YWxdLAorCVt3aXRoX2Jyb2tlbl9saW5rZXI9JHtCUk9LRU5fTElOS0VSLW5vfV0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2Jyb2tlbl9saW5rZXIpCisKK0JST0tFTl9MSU5LRVI9MAoraWYgdGVzdCAiJHdpdGhfYnJva2VuX2xpbmtlciIgPSB5ZXMgOyB0aGVuCisJQUNfREVGSU5FKEJST0tFTl9MSU5LRVIpCisJQlJPS0VOX0xJTktFUj0xCitlbGlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9IHNoYXJlZCA7IHRoZW4KKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJY3lnd2luKikKKwkJQUNfREVGSU5FKEJST0tFTl9MSU5LRVIpCisJCUJST0tFTl9MSU5LRVI9MQorCQlDRl9WRVJCT1NFKGN5Z3dpbiBsaW5rZXIgaXMgYnJva2VuIGFueXdheSkKKwkJOzsKKwllc2FjCitmaQorQUNfU1VCU1QoQlJPS0VOX0xJTktFUikKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1ic2RwYWQgdG8gaGF2ZSB0cHV0cyBwcm9jZXNzIEJTRC1zdHlsZSBwcmVmaXggcGFkZGluZworQUNfTVNHX0NIRUNLSU5HKGlmIHRwdXRzIHNob3VsZCBwcm9jZXNzIEJTRC1zdHlsZSBwcmVmaXggcGFkZGluZykKK0FDX0FSR19FTkFCTEUoYnNkcGFkLAorCVsgIC0tZW5hYmxlLWJzZHBhZCAgICAgICAgIHJlY29nbml6ZSBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmddLAorCVt3aXRoX2JzZHBhZD0kZW5hYmxldmFsXSwKKwlbd2l0aF9ic2RwYWQ9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9ic2RwYWQpCit0ZXN0ICIkd2l0aF9ic2RwYWQiID0geWVzICYmIEFDX0RFRklORShCU0RfVFBVVFMpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtd2lkZWMgdG8gdHVybiBvbiB1c2Ugb2Ygd2lkZS1jaGFyYWN0ZXIgc3VwcG9ydAorTkNVUlNFU19DSF9UPWNodHlwZQorTkNVUlNFU19MSUJVVEY4PTAKKworTkVFRF9XQ0hBUl9IPTAKK05DVVJTRVNfTUJTVEFURV9UPTAKK05DVVJTRVNfV0NIQVJfVD0wCitOQ1VSU0VTX1dJTlRfVD0wCisKKyMgQ2hlY2sgdG8gZGVmaW5lIF9YT1BFTl9TT1VSQ0UgImF1dG9tYXRpY2FsbHkiCitDRl9YT1BFTl9TT1VSQ0UKKworIyBXb3JrIGFyb3VuZCBicmVha2FnZSBvbiBPUyBYCitDRl9TSUdXSU5DSAorCisjIENoZWNrcyBmb3IgQ09ERVNFVCBzdXBwb3J0LgorQU1fTEFOR0lORk9fQ09ERVNFVAorCisjIHVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gd29yayBhcm91bmQgYSBkZWZlY3QgaW4gZ2NjJ3MgZml4aW5jbHVkZXMuCitOQ1VSU0VTX09LX1dDSEFSX1Q9CitOQ1VSU0VTX09LX1dJTlRfVD0KKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHdpZGUtY2hhcmFjdGVyIGNvZGUpCitBQ19BUkdfRU5BQkxFKHdpZGVjLAorCVsgIC0tZW5hYmxlLXdpZGVjICAgICAgICAgIGNvbXBpbGUgd2l0aCB3aWRlLWNoYXIvVVRGLTggY29kZV0sCisJW3dpdGhfd2lkZWM9JGVuYWJsZXZhbF0sCisJW3dpdGhfd2lkZWM9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF93aWRlYykKK2lmIHRlc3QgIiR3aXRoX3dpZGVjIiA9IHllcyA7IHRoZW4KKwlMSUJfU1VGRklYPSJ3JHtMSUJfU1VGRklYfSIKKwlBQ19ERUZJTkUoVVNFX1dJREVDX1NVUFBPUlQpCisJQ0ZfUFJFREVGSU5FKF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQpCisJIyB3aXRoX292ZXJ3cml0ZT1ubworCU5DVVJTRVNfQ0hfVD1jY2hhcl90CisJQUNfQ0hFQ0tfRlVOQ1MocHV0d2MgYnRvd2Mgd2N0b2IgbWJ0b3djIHdjdG9tYiBtYmxlbiBtYnJsZW4gbWJydG93YyB3Y3NydG9tYnMgbWJzcnRvd2NzIHdjc3RvbWJzIG1ic3Rvd2NzKQorCWlmIHRlc3QgIiRhY19jdl9mdW5jX3B1dHdjIiAhPSB5ZXMgOyB0aGVuCisJCUNGX1VURjhfTElCCisJCWlmIHRlc3QgIiRjZl9jdl91dGY4X2xpYiIgIT0gbm8gOyB0aGVuCisJCQlOQ1VSU0VTX0xJQlVURjg9MQorCQlmaQorCWZpCisJQ0ZfV0NIQVJfVFlQRShtYnN0YXRlX3QsIE5DVVJTRVNfTUJTVEFURV9UKQorCUNGX1dDSEFSX1RZUEUod2NoYXJfdCwgICBOQ1VSU0VTX1dDSEFSX1QsICAgTkNVUlNFU19PS19XQ0hBUl9UKQorCUNGX1dDSEFSX1RZUEUod2ludF90LCAgICBOQ1VSU0VTX1dJTlRfVCwgICAgTkNVUlNFU19PS19XSU5UX1QpCisKKwlpZiB0ZXN0ICIkTkNVUlNFU19NQlNUQVRFX1QiICE9IDA7IHRoZW4KKwkJQUNfREVGSU5FKE5FRURfTUJTVEFURV9UX0RFRikKKwlmaQorZmkKK0FDX1NVQlNUKE5DVVJTRVNfQ0hfVCkKK0FDX1NVQlNUKE5DVVJTRVNfTElCVVRGOCkKKworQUNfU1VCU1QoTkVFRF9XQ0hBUl9IKQorQUNfU1VCU1QoTkNVUlNFU19NQlNUQVRFX1QpCitBQ19TVUJTVChOQ1VSU0VTX1dDSEFSX1QpCitBQ19TVUJTVChOQ1VSU0VTX1dJTlRfVCkKKworQUNfU1VCU1QoTkNVUlNFU19PS19XQ0hBUl9UKQorQUNfU1VCU1QoTkNVUlNFU19PS19XSU5UX1QpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLWxwNjQgdG8gYWxsb3cgbG9uZyBjaHR5cGUKK2Nhc2UgJGNmX2N2X2FiaV92ZXJzaW9uIGluCitbWzM0NV1dKikKKwlkZWZhdWx0X3dpdGhfbHA2ND1ubworCTs7CisqKQorCWRlZmF1bHRfd2l0aF9scDY0PXllcworCTs7Citlc2FjCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGVuYWJsZSBfTFA2NCBkZWZpbml0aW9uIGluIGN1cnNlcy5oKQorQUNfQVJHX0VOQUJMRShscDY0LAorCVsgIC0tZGlzYWJsZS1scDY0ICAgICAgICAgIGFsbG93IGNodHlwZSB0byBiZSBsb25nIChpZ25vcmUgX0xQNjQpXSwKKwlbd2l0aF9scDY0PSRlbmFibGV2YWxdLAorCVt3aXRoX2xwNjQ9JGRlZmF1bHRfd2l0aF9scDY0XSkKK0FDX01TR19SRVNVTFQoJHdpdGhfbHA2NCkKKworaWYgdGVzdCAiJHdpdGhfbHA2NCIgPSB5ZXMgOyB0aGVuCisJY2ZfY3ZfZW5hYmxlX2xwNjQ9MQorZWxzZQorCWNmX2N2X2VuYWJsZV9scDY0PTAKK2ZpCitBQ19TVUJTVChjZl9jdl9lbmFibGVfbHA2NCkKKworQ0ZfTEFSR0VGSUxFCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3MgdG8gbWFrZSB0cGFybSgpIGNvbmZvcm0gdG8gWC9PcGVuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdHBhcm0gbm90IHRvIHVzZSBYL09wZW4gZml4ZWQtcGFyYW1ldGVyIGxpc3QpCitBQ19BUkdfRU5BQkxFKHRwYXJtLXZhcmFyZ3MsCisJWyAgLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3MgY29tcGlsZSB0cGFybSgpIHdpdGhvdXQgdmFyYXJncyBpbnRlcmZhY2VdLAorCVt3aXRoX3RwYXJtX3ZhcmFyZ3M9JGVuYWJsZXZhbF0sCisJW3dpdGhfdHBhcm1fdmFyYXJncz15ZXNdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF90cGFybV92YXJhcmdzKQorTkNVUlNFU19UUEFSTV9WQVJBUkdTPTAKK3Rlc3QgIiR3aXRoX3RwYXJtX3ZhcmFyZ3MiID0geWVzICYmIE5DVVJTRVNfVFBBUk1fVkFSQVJHUz0xCitBQ19TVUJTVChOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLXRpYy1kZXBlbmRzIHRvIG1ha2UgbGlidGljIG5vdCBleHBsaWNpdGx5IGRlcGVuZCBvbiBuY3Vyc2VzL25jdXJzZXN3CitpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIDsgdGhlbgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRpYyBsaWJyYXJ5IHRvIHVzZSBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIG5jdXJzZXMkTElCX1NVRkZJWCBsaWJyYXJ5KQorQUNfQVJHX0VOQUJMRSh0aWMtZGVwZW5kcywKKwlbICAtLWRpc2FibGUtdGljLWRlcGVuZHMgICBsaW5rIHRpYyBsaWJyYXJ5IHdpdGhvdXQgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBuY3Vyc2VzIGxpYnJhcnldLAorCVt3aXRoX3RpY19kZXBlbmRzPSRlbmFibGV2YWxdLAorCVt3aXRoX3RpY19kZXBlbmRzPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3RpY19kZXBlbmRzKQorZWxzZQorCXdpdGhfdGljX2RlcGVuZHM9bm8KK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLWJvb2wgdG8gb3ZlcnJpZGUgYm9vbCdzIHR5cGUKK0FDX01TR19DSEVDS0lORyhmb3IgdHlwZSBvZiBib29sKQorQUNfQVJHX1dJVEgoYm9vbCwKKwlbICAtLXdpdGgtYm9vbD1UWVBFICAgICAgICBvdmVycmlkZSBmYWxsYmFjayB0eXBlIG9mIGJvb2wgdmFyaWFibGVdLAorCVtOQ1VSU0VTX0JPT0w9IiR3aXRodmFsIl0sCisJW05DVVJTRVNfQk9PTD1hdXRvXSkKK0FDX01TR19SRVNVTFQoJE5DVVJTRVNfQk9PTCkKK0FDX1NVQlNUKE5DVVJTRVNfQk9PTCkKKworQUNfTVNHX0NIRUNLSU5HKGZvciBhbHRlcm5hdGUgdGVybWluYWwgY2FwYWJpbGl0aWVzIGZpbGUpCitBQ19BUkdfV0lUSChjYXBzLAorCVsgIC0td2l0aC1jYXBzPWFsdCAgICAgICAgIGNvbXBpbGUgd2l0aCBhbHRlcm5hdGUgQ2FwcyBmaWxlXSwKKwlbVEVSTUlORk9fQ0FQUz1DYXBzLiR3aXRodmFsXSwKKwlbVEVSTUlORk9fQ0FQUz1DYXBzXSkKK3Rlc3QgLWYgIiR7c3JjZGlyfS9pbmNsdWRlLyR7VEVSTUlORk9fQ0FQU30iIHx8IFRFUk1JTkZPX0NBUFM9Q2FwcworQUNfTVNHX1JFU1VMVCgkVEVSTUlORk9fQ0FQUykKK0FDX1NVQlNUKFRFUk1JTkZPX0NBUFMpCisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLWNodHlwZSB0byBvdmVycmlkZSBjaHR5cGUncyB0eXBlCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHR5cGUgb2YgY2h0eXBlKQorQUNfQVJHX1dJVEgoY2h0eXBlLAorCVsgIC0td2l0aC1jaHR5cGU9VFlQRSAgICAgIG92ZXJyaWRlIHR5cGUgb2YgY2h0eXBlXSwKKwlbTkNVUlNFU19DSFRZUEU9IiR3aXRodmFsIl0sCisJW05DVVJTRVNfQ0hUWVBFPWF1dG9dKQorQUNfTVNHX1JFU1VMVCgkTkNVUlNFU19DSFRZUEUpCisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLW9zcGVlZCB0byBvdmVycmlkZSBvc3BlZWQncyB0eXBlCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHR5cGUgb2Ygb3NwZWVkKQorQUNfQVJHX1dJVEgob3NwZWVkLAorCVsgIC0td2l0aC1vc3BlZWQ9VFlQRSAgICAgIG92ZXJyaWRlIHR5cGUgb2Ygb3NwZWVkIHZhcmlhYmxlXSwKKwlbTkNVUlNFU19PU1BFRUQ9IiR3aXRodmFsIl0sCisJW05DVVJTRVNfT1NQRUVEPXNob3J0XSkKK0FDX01TR19SRVNVTFQoJE5DVVJTRVNfT1NQRUVEKQorQUNfU1VCU1QoTkNVUlNFU19PU1BFRUQpCisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLW1tYXNrLXQgdG8gb3ZlcnJpZGUgbW1hc2tfdCdzIHR5cGUKK0FDX01TR19DSEVDS0lORyhmb3IgdHlwZSBvZiBtbWFza190KQorQUNfQVJHX1dJVEgobW1hc2stdCwKKwlbICAtLXdpdGgtbW1hc2stdD1UWVBFICAgICBvdmVycmlkZSB0eXBlIG9mIG1tYXNrX3RdLAorCVtOQ1VSU0VTX01NQVNLX1Q9IiR3aXRodmFsIl0sCisJW05DVVJTRVNfTU1BU0tfVD1hdXRvXSkKK0FDX01TR19SRVNVTFQoJE5DVVJTRVNfTU1BU0tfVCkKKworIyMjIEVuYWJsZSBjb21waWxpbmctaW4gcmNzIGlkJ3MKK0FDX01TR19DSEVDS0lORyhpZiBSQ1MgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbXBpbGVkLWluKQorQUNfQVJHX1dJVEgocmNzLWlkcywKKwlbICAtLXdpdGgtcmNzLWlkcyAgICAgICAgICBjb21waWxlLWluIFJDUyBpZGVudGlmaWVyc10sCisJW3dpdGhfcmNzX2lkcz0kd2l0aHZhbF0sCisJW3dpdGhfcmNzX2lkcz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3Jjc19pZHMpCit0ZXN0ICIkd2l0aF9yY3NfaWRzIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX1JDU19JRFMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NGX01BTl9QQUdFUyhbIGNhcHRvaW5mbyBjbGVhciBpbmZvY21wIGluZm90b2NhcCB0aWMgdG9lIHRwdXQgXSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKEV4dGVuc2lvbnM6KQorCisjIyMgTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25zIChzdWNoIGFzIGNvbnN0KSBhcmUgbm9ybWFsbHkgZGlzYWJsZWQgYW55d2F5LgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggZnVuY3Rpb24gZXh0ZW5zaW9ucykKK0FDX0FSR19FTkFCTEUoZXh0LWZ1bmNzLAorCVsgIC0tZGlzYWJsZS1leHQtZnVuY3MgICAgIGRpc2FibGUgZnVuY3Rpb24tZXh0ZW5zaW9uc10sCisJW3dpdGhfZXh0X2Z1bmNzPSRlbmFibGV2YWxdLAorCVt3aXRoX2V4dF9mdW5jcz15ZXNdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9leHRfZnVuY3MpCitpZiB0ZXN0ICIkd2l0aF9leHRfZnVuY3MiID0geWVzIDsgdGhlbgorCU5DVVJTRVNfRVhUX0ZVTkNTPTEKKwlBQ19ERUZJTkUoSEFWRV9DVVJTRVNfVkVSU0lPTikKKwlBQ19ERUZJTkUoSEFWRV9IQVNfS0VZKQorCUFDX0RFRklORShIQVZFX1JFU0laRVRFUk0pCisJQUNfREVGSU5FKEhBVkVfUkVTSVpFX1RFUk0pCisJQUNfREVGSU5FKEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTKQorCUFDX0RFRklORShIQVZFX1dSRVNJWkUpCisJQUNfREVGSU5FKE5DVVJTRVNfRVhUX0ZVTkNTKQorZWxzZQorCU5DVVJTRVNfRVhUX0ZVTkNTPTAKK2ZpCitBQ19TVUJTVChOQ1VSU0VTX0VYVF9GVU5DUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1jb25zdCB0byB0dXJuIG9uIHVzZSBvZiBjb25zdCBiZXlvbmQgdGhhdCBpbiBYU0kuCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGV4dGVuZGVkIHVzZSBvZiBjb25zdCBrZXl3b3JkKQorQUNfQVJHX0VOQUJMRShjb25zdCwKKwlbICAtLWVuYWJsZS1jb25zdCAgICAgICAgICBjb21waWxlIHdpdGggZXh0cmEvbm9uLXN0YW5kYXJkIGNvbnN0XSwKKwlbd2l0aF9leHRfY29uc3Q9JGVuYWJsZXZhbF0sCisJW3dpdGhfZXh0X2NvbnN0PW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZXh0X2NvbnN0KQorTkNVUlNFU19DT05TVD0nLypub3RoaW5nKi8nCitpZiB0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzIDsgdGhlbgorCU5DVVJTRVNfQ09OU1Q9Y29uc3QKK2ZpCitBQ19TVUJTVChOQ1VSU0VTX0NPTlNUKQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWV4dC1jb2xvcnMgdG8gdHVybiBvbiB1c2Ugb2YgY29sb3JzIGJleW9uZCAxNi4KK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2UgZXh0ZW5kZWQgY29sb3JzKQorQUNfQVJHX0VOQUJMRShleHQtY29sb3JzLAorCVsgIC0tZW5hYmxlLWV4dC1jb2xvcnMgICAgIGNvbXBpbGUgZm9yIDI1Ni1jb2xvciBzdXBwb3J0XSwKKwlbd2l0aF9leHRfY29sb3JzPSRlbmFibGV2YWxdLAorCVt3aXRoX2V4dF9jb2xvcnM9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9leHRfY29sb3JzKQorTkNVUlNFU19FWFRfQ09MT1JTPTAKK2lmIHRlc3QgIiR3aXRoX2V4dF9jb2xvcnMiID0geWVzIDsgdGhlbgorCWlmIHRlc3QgIiR3aXRoX3dpZGVjIiAhPSB5ZXMgOyB0aGVuCisJCUFDX01TR19FUlJPUihUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gd2lkZS1jaGFyYWN0ZXIgbGlicmFyeSkKKwllbHNlCisJCSMgY2Fubm90IGJlIEFCSSA1IHNpbmNlIGl0IGNoYW5nZXMgc2l6ZW9mKGNjaGFyX3QpCisJCUNGX05DVVJTRVNfQUJJXzYKKwlmaQorCU5DVVJTRVNfRVhUX0NPTE9SUz0xCisJQUNfREVGSU5FKE5DVVJTRVNfRVhUX0NPTE9SUykKK2ZpCitBQ19TVUJTVChOQ1VSU0VTX0VYVF9DT0xPUlMpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtZXh0LW1vdXNlIHRvIG1vZGlmeSBjb2RpbmcgdG8gc3VwcG9ydCA1LWJ1dHRvbiBtaWNlCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gdXNlIGV4dGVuZGVkIG1vdXNlIGVuY29kaW5nKQorQUNfQVJHX0VOQUJMRShleHQtbW91c2UsCisJWyAgLS1lbmFibGUtZXh0LW1vdXNlICAgICAgY29tcGlsZSBmb3IgZXh0ZW5kZWQgbW91c2UtZW5jb2RpbmddLAorCVt3aXRoX2V4dF9tb3VzZT0kZW5hYmxldmFsXSwKKwlbd2l0aF9leHRfbW91c2U9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9leHRfbW91c2UpCitOQ1VSU0VTX01PVVNFX1ZFUlNJT049MQoraWYgdGVzdCAiJHdpdGhfZXh0X21vdXNlIiA9IHllcyA7IHRoZW4KKwlOQ1VSU0VTX01PVVNFX1ZFUlNJT049MgorCUNGX05DVVJTRVNfQUJJXzYKK2ZpCitBQ19TVUJTVChOQ1VSU0VTX01PVVNFX1ZFUlNJT04pCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBcJE5DVVJTRVNfTk9fUEFERElORyBjb2RlKQorQUNfQVJHX0VOQUJMRShuby1wYWRkaW5nLAorCVsgIC0tZW5hYmxlLW5vLXBhZGRpbmcgICAgIGNvbXBpbGUgd2l0aCAkTkNVUlNFU19OT19QQURESU5HIGNvZGVdLAorCVt3aXRoX25vX3BhZGRpbmc9JGVuYWJsZXZhbF0sCisJW3dpdGhfbm9fcGFkZGluZz0kd2l0aF9leHRfZnVuY3NdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9ub19wYWRkaW5nKQordGVzdCAiJHdpdGhfbm9fcGFkZGluZyIgPSB5ZXMgJiYgQUNfREVGSU5FKE5DVVJTRVNfTk9fUEFERElORykKKworQUNfQ0hFQ0tfU0laRU9GKFtzaWduZWQgY2hhcl0sIDApCitpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyIiA9IDEgOyB0aGVuCisJTkNVUlNFU19TQk9PTD0ic2lnbmVkIGNoYXIiCitlbHNlCisJTkNVUlNFU19TQk9PTD0iY2hhciIKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gdXNlIHNpZ25lZCBCb29sZWFuIGFycmF5IGluIHRlcm0uaCkKK0FDX0FSR19FTkFCTEUoc2lnbmVkLWNoYXIsCisJWyAgLS1lbmFibGUtc2lnbmVkLWNoYXIgICAgY29tcGlsZSB1c2luZyBzaWduZWQgQm9vbGVhbidzIGluIHRlcm0uaF0sCisJW3dpdGhfc2lnbmVkX2NoYXI9JGVuYWJsZXZhbF0sCisJW3dpdGhfc2lnbmVkX2NoYXI9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9zaWduZWRfY2hhcikKK3Rlc3QgIiR3aXRoX3NpZ25lZF9jaGFyIiAhPSB5ZXMgJiYgTkNVUlNFU19TQk9PTD0iY2hhciIKK0FDX1NVQlNUKE5DVVJTRVNfU0JPT0wpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtc2lnd2luY2ggdG8gdHVybiBvbiB1c2Ugb2YgU0lHV0lOQ0ggbG9naWMKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBTSUdXSU5DSCBoYW5kbGVyKQorQUNfQVJHX0VOQUJMRShzaWd3aW5jaCwKKwlbICAtLWVuYWJsZS1zaWd3aW5jaCAgICAgICBjb21waWxlIHdpdGggU0lHV0lOQ0ggaGFuZGxlcl0sCisJW3dpdGhfc2lnd2luY2g9JGVuYWJsZXZhbF0sCisJW3dpdGhfc2lnd2luY2g9JHdpdGhfZXh0X2Z1bmNzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfc2lnd2luY2gpCit0ZXN0ICIkd2l0aF9zaWd3aW5jaCIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9TSUdXSU5DSCkKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS10Y2FwLW5hbWVzIHRvIGFsbG93IHVzZXIgdG8gZGVmaW5lIG5ldyBjYXBhYmlsaXRpZXMKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB1c2VyLWRlZmluYWJsZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgbGlrZSB0ZXJtY2FwKQorQUNfQVJHX0VOQUJMRSh0Y2FwLW5hbWVzLAorCVsgIC0tZW5hYmxlLXRjYXAtbmFtZXMgICAgIGNvbXBpbGUgd2l0aCB1c2VyLWRlZmluYWJsZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXNdLAorCVt3aXRoX3RjYXBfbmFtZXM9JGVuYWJsZXZhbF0sCisJW3dpdGhfdGNhcF9uYW1lcz0kd2l0aF9leHRfZnVuY3NdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF90Y2FwX25hbWVzKQorTkNVUlNFU19YTkFNRVM9MAordGVzdCAiJHdpdGhfdGNhcF9uYW1lcyIgPSB5ZXMgJiYgTkNVUlNFU19YTkFNRVM9MQorQUNfU1VCU1QoTkNVUlNFU19YTkFNRVMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlc2Ugb3B0aW9ucyBhcmUgcmVsYXRpdmVseSBzYWZlIHRvIGV4cGVyaW1lbnQgd2l0aC4KK0NGX0hFTFBfTUVTU0FHRShEZXZlbG9wbWVudCBDb2RlOikKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBhbGwgZGV2ZWxvcG1lbnQgY29kZSkKK0FDX0FSR19XSVRIKGRldmVsb3AsCisJWyAgLS13aXRob3V0LWRldmVsb3AgICAgICAgZGlzYWJsZSBkZXZlbG9wbWVudCBvcHRpb25zXSwKKwlbd2l0aF9kZXZlbG9wPSR3aXRodmFsXSwKKwlbd2l0aF9kZXZlbG9wPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZGV2ZWxvcCkKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1oYXJkLXRhYnMgdG8gdHVybiBvbiB1c2Ugb2YgaGFyZC10YWJzIG9wdGltaXplCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgaGFyZC10YWJzIGNvZGUpCitBQ19BUkdfRU5BQkxFKGhhcmQtdGFicywKKwlbICAtLWVuYWJsZS1oYXJkLXRhYnMgICAgICBjb21waWxlIHdpdGggaGFyZC10YWJzIGNvZGVdLCwKKwlbZW5hYmxlX2hhcmRfdGFicz0kd2l0aF9kZXZlbG9wXSkKK0FDX01TR19SRVNVTFQoJGVuYWJsZV9oYXJkX3RhYnMpCit0ZXN0ICIkZW5hYmxlX2hhcmRfdGFicyIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9IQVJEX1RBQlMpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUteG1jLWdsaXRjaCB0byB0dXJuIG9uIHVzZSBvZiBtYWdpYy1jb29raWUgb3B0aW1pemUKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBsaW1pdGVkIHN1cHBvcnQgZm9yIHhtYykKK0FDX0FSR19FTkFCTEUoeG1jLWdsaXRjaCwKKwlbICAtLWVuYWJsZS14bWMtZ2xpdGNoICAgICBjb21waWxlIHdpdGggc3VwcG9ydCBmb3IgeG1jIChtYWdpYy1jb29raWUpXSwsCisJW2VuYWJsZV94bWNfZ2xpdGNoPSR3aXRoX2RldmVsb3BdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxlX3htY19nbGl0Y2gpCit0ZXN0ICIkZW5hYmxlX3htY19nbGl0Y2giID0geWVzICYmIEFDX0RFRklORShVU0VfWE1DX1NVUFBPUlQpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlc2UgYXJlIGp1c3QgZXhwZXJpbWVudGFsLCBwcm9iYWJseSBzaG91bGQgbm90IGJlIGluIGEgcGFja2FnZToKK0NGX0hFTFBfTUVTU0FHRShFeHBlcmltZW50YWwgQ29kZTopCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3UgZG8gbm90IHdhbnQgdG8gYXNzdW1lIGNvbG9ycyBhcmUgd2hpdGUtb24tYmxhY2spCitBQ19BUkdfRU5BQkxFKGFzc3VtZWQtY29sb3IsCisJWyAgLS1kaXNhYmxlLWFzc3VtZWQtY29sb3IgZG8gbm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBkZWZhdWx0LWNvbG9yc10sCisJW3dpdGhfYXNzdW1lZF9jb2xvcj0kZW5hYmxldmFsXSwKKwlbd2l0aF9hc3N1bWVkX2NvbG9yPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2Fzc3VtZWRfY29sb3IpCit0ZXN0ICIkd2l0aF9hc3N1bWVkX2NvbG9yIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX0FTU1VNRURfQ09MT1IpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtaGFzaG1hcCB0byB0dXJuIG9uIHVzZSBvZiBoYXNobWFwIHNjcm9sbGluZyBsb2dpYworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IGhhc2htYXAgc2Nyb2xsaW5nLW9wdGltaXphdGlvbiBjb2RlKQorQUNfQVJHX0VOQUJMRShoYXNobWFwLAorCVsgIC0tZGlzYWJsZS1oYXNobWFwICAgICAgIGNvbXBpbGUgd2l0aG91dCBoYXNobWFwIHNjcm9sbGluZy1vcHRpbWl6YXRpb25dLAorCVt3aXRoX2hhc2htYXA9JGVuYWJsZXZhbF0sCisJW3dpdGhfaGFzaG1hcD15ZXNdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9oYXNobWFwKQordGVzdCAiJHdpdGhfaGFzaG1hcCIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9IQVNITUFQKQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWNvbG9yZmdiZyB0byB0dXJuIG9uIHVzZSBvZiAkQ09MT1JGR0JHIGVudmlyb25tZW50CitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgY29sb3JmZ2JnIGNvZGUpCitBQ19BUkdfRU5BQkxFKGNvbG9yZmdiZywKKwlbICAtLWVuYWJsZS1jb2xvcmZnYmcgICAgICBjb21waWxlIHdpdGggJENPTE9SRkdCRyBjb2RlXSwKKwlbd2l0aF9jb2xvcmZnYmc9JGVuYWJsZXZhbF0sCisJW3dpdGhfY29sb3JmZ2JnPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfY29sb3JmZ2JnKQordGVzdCAiJHdpdGhfY29sb3JmZ2JnIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX0NPTE9SRkdCRykKKworIyBUaGlzIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCAoMjAwODAzMjkpLCBidXQgc2hvdWxkIHVsdGltYXRlbHkgYmUgbW92ZWQgdG8KKyMgdGhlIHNjcmlwdC1ibG9jayAtLXdpdGgtbm9ybWFsLCBldGMuCitDRl9XSVRIX1BUSFJFQUQKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIHVzZSB3ZWFrLXN5bWJvbHMgZm9yIHB0aHJlYWRzKQorQUNfQVJHX0VOQUJMRSh3ZWFrLXN5bWJvbHMsCisgICAgWyAgLS1lbmFibGUtd2Vhay1zeW1ib2xzICAgZW5hYmxlIHdlYWstc3ltYm9scyBmb3IgcHRocmVhZHNdLAorICAgIFt1c2Vfd2Vha19zeW1ib2xzPSR3aXRodmFsXSwKKyAgICBbdXNlX3dlYWtfc3ltYm9scz1ub10pCitBQ19NU0dfUkVTVUxUKCR1c2Vfd2Vha19zeW1ib2xzKQoraWYgdGVzdCAiJHVzZV93ZWFrX3N5bWJvbHMiID0geWVzIDsgdGhlbgorICAgIENGX1dFQUtfU1lNQk9MUworZWxzZQorICAgIGNmX2N2X3dlYWtfc3ltYm9scz1ubworZmkKKworaWYgdGVzdCAkY2ZfY3Zfd2Vha19zeW1ib2xzID0geWVzIDsgdGhlbgorICAgIEFDX0RFRklORShVU0VfV0VBS19TWU1CT0xTKQorZmkKKworUFRIUkVBRD0KK2lmIHRlc3QgIiR3aXRoX3B0aHJlYWQiID0gInllcyIgOyB0aGVuCisgICAgQUNfREVGSU5FKFVTRV9QVEhSRUFEUykKKyAgICBlbmFibGVfcmVlbnRyYW50PXllcworICAgIGlmIHRlc3QgJGNmX2N2X3dlYWtfc3ltYm9scyA9IHllcyA7IHRoZW4KKyAgICAgICAgUFRIUkVBRD0tbHB0aHJlYWQKKyAgICBmaQorZmkKK0FDX1NVQlNUKFBUSFJFQUQpCisKKyMgUmVlbnRyYW50IGNvZGUgaGFzIHRvIGJlIG9wYXF1ZTsgdGhlcmUncyBsaXR0bGUgYWR2YW50YWdlIHRvIG1ha2luZyBuY3Vyc2VzCisjIG9wYXF1ZSBvdXRzaWRlIG9mIHRoYXQsIHNvIHRoZXJlIGlzIG5vIC0tZW5hYmxlLW9wYXF1ZSBvcHRpb24uICBXZSBjYW4gdXNlCisjIHRoaXMgb3B0aW9uIHdpdGhvdXQgLS13aXRoLXB0aHJlYWRzLCBidXQgdGhpcyB3aWxsIGJlIGFsd2F5cyBzZXQgZm9yCisjIHB0aHJlYWRzLgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IGV4cGVyaW1lbnRhbCByZWVudHJhbnQgY29kZSkKK0FDX0FSR19FTkFCTEUocmVlbnRyYW50LAorCVsgIC0tZW5hYmxlLXJlZW50cmFudCAgICAgIGNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgcmVlbnRyYW50IGNvZGVdLAorCVt3aXRoX3JlZW50cmFudD0kZW5hYmxldmFsXSwKKwlbd2l0aF9yZWVudHJhbnQ9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9yZWVudHJhbnQpCitpZiB0ZXN0ICIkd2l0aF9yZWVudHJhbnQiID0geWVzIDsgdGhlbgorCWNmX2N2X2VuYWJsZV9yZWVudHJhbnQ9MQorCWNmX2N2X2VuYWJsZV9vcGFxdWU9Ik5DVVJTRVNfSU5URVJOQUxTIgorCU5DVVJTRVNfT1BBUVVFPTEKKwlOQ1VSU0VTX1NJWkVfVD1pbnQKKyAgICBpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisgICAgICAgIENGX1JFTU9WRV9MSUIoTElCUywkTElCUyxwdGhyZWFkKQorICAgIGVsc2UKKyAgICAgICAgTElCX1NVRkZJWD0idCR7TElCX1NVRkZJWH0iCisgICAgZmkKKwlBQ19ERUZJTkUoVVNFX1JFRU5UUkFOVCkKKwlDRl9OQ1VSU0VTX0FCSV82CitlbHNlCisJY2ZfY3ZfZW5hYmxlX3JlZW50cmFudD0wCisJY2ZfY3ZfZW5hYmxlX29wYXF1ZT0iTkNVUlNFU19PUEFRVUUiCisJTkNVUlNFU19PUEFRVUU9MAorCU5DVVJTRVNfU0laRV9UPXNob3J0CitmaQorQUNfU1VCU1QoY2ZfY3ZfZW5hYmxlX3JlZW50cmFudCkKK0FDX1NVQlNUKGNmX2N2X2VuYWJsZV9vcGFxdWUpCitBQ19TVUJTVChOQ1VSU0VTX09QQVFVRSkKK0FDX1NVQlNUKE5DVVJTRVNfU0laRV9UKQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHNhZmUtc3ByaW50ZiBjb2RlKQorQUNfQVJHX0VOQUJMRShzYWZlLXNwcmludGYsCisJWyAgLS1lbmFibGUtc2FmZS1zcHJpbnRmICAgY29tcGlsZSB3aXRoIGV4cGVyaW1lbnRhbCBzYWZlLXNwcmludGYgY29kZV0sCisJW3dpdGhfc2FmZV9zcHJpbnRmPSRlbmFibGV2YWxdLAorCVt3aXRoX3NhZmVfc3ByaW50Zj1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3NhZmVfc3ByaW50ZikKK3Rlc3QgIiR3aXRoX3NhZmVfc3ByaW50ZiIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9TQUZFX1NQUklOVEYpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLXNjcm9sbC1oaW50cyB0byB0dXJuIG9mZiB1c2Ugb2Ygc2Nyb2xsLWhpbnRzIHNjcm9sbGluZyBsb2dpYworIyB3aGVuIGhhc2htYXAgaXMgdXNlZCBzY3JvbGwgaGludHMgYXJlIHVzZWxlc3MKK2lmIHRlc3QgIiR3aXRoX2hhc2htYXAiID0gbm8gOyB0aGVuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRob3V0IHNjcm9sbGluZy1oaW50cyBjb2RlKQorQUNfQVJHX0VOQUJMRShzY3JvbGwtaGludHMsCisJWyAgLS1kaXNhYmxlLXNjcm9sbC1oaW50cyAgY29tcGlsZSB3aXRob3V0IHNjcm9sbC1oaW50cyBjb2RlXSwKKwlbd2l0aF9zY3JvbGxfaGludHM9JGVuYWJsZXZhbF0sCisJW3dpdGhfc2Nyb2xsX2hpbnRzPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3Njcm9sbF9oaW50cykKK3Rlc3QgIiR3aXRoX3Njcm9sbF9oaW50cyIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9TQ1JPTExfSElOVFMpCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHdnZXRjaC1ldmVudHMgY29kZSkKK0FDX0FSR19FTkFCTEUod2dldGNoLWV2ZW50cywKKwlbICAtLWVuYWJsZS13Z2V0Y2gtZXZlbnRzICBjb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHdnZXRjaC1ldmVudHMgY29kZV0sCisJW3dpdGhfd2dldGNoX2V2ZW50cz0kZW5hYmxldmFsXSwKKwlbd2l0aF93Z2V0Y2hfZXZlbnRzPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfd2dldGNoX2V2ZW50cykKK3Rlc3QgIiR3aXRoX3dnZXRjaF9ldmVudHMiID0geWVzICYmIEFDX0RFRklORShOQ1VSU0VTX1dHRVRDSF9FVkVOVFMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NGX0hFTFBfTUVTU0FHRShUZXN0aW5nL2RldmVsb3BtZW50IE9wdGlvbnM6KQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtZWNobyB0byBzdXBwcmVzcyBmdWxsIGRpc3BsYXkgY29tcGlsaW5nIGNvbW1hbmRzCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gZGlzcGxheSBmdWxsIGNvbW1hbmRzIGR1cmluZyBidWlsZCkKK0FDX0FSR19FTkFCTEUoZWNobywKKwlbICAtLWVuYWJsZS1lY2hvICAgICAgICAgICBidWlsZDogZGlzcGxheSAiY29tcGlsaW5nIiBjb21tYW5kcyAoZGVmYXVsdCldLAorCVt3aXRoX2VjaG89JGVuYWJsZXZhbF0sCisJW3dpdGhfZWNobz15ZXNdKQoraWYgdGVzdCAiJHdpdGhfZWNobyIgPSB5ZXM7IHRoZW4KKwlFQ0hPX0xJTks9CitlbHNlCisJRUNIT19MSU5LPSdAIGVjaG8gbGlua2luZyAkQCAuLi4gOycKKwl0ZXN0IC1uICIkTElCVE9PTCIgJiYgTElCVE9PTD0iJExJQlRPT0wgLS1zaWxlbnQiCisJdGVzdCAtbiAiJExJQlRPT0xfQ1hYIiAmJiBMSUJUT09MX0NYWD0iJExJQlRPT0xfQ1hYIC0tc2lsZW50IgorZmkKK0FDX01TR19SRVNVTFQoJHdpdGhfZWNobykKK0FDX1NVQlNUKEVDSE9fTElOSykKKworIyMjCXVzZSBvcHRpb24gLS1lbmFibGUtd2FybmluZ3MgdG8gdHVybiBvbiBhbGwgZ2NjIHdhcm5pbmdzCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gc2VlIGNvbXBpbGVyIHdhcm5pbmdzKQorQUNfQVJHX0VOQUJMRSh3YXJuaW5ncywKKwlbICAtLWVuYWJsZS13YXJuaW5ncyAgICAgICBidWlsZDogdHVybiBvbiBHQ0MgY29tcGlsZXIgd2FybmluZ3NdLAorCVt3aXRoX3dhcm5pbmdzPSRlbmFibGV2YWxdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF93YXJuaW5ncykKKworaWYgdGVzdCAieCR3aXRoX3dhcm5pbmdzIiA9ICJ4eWVzIjsgdGhlbgorIAlBREFGTEFHUz0iJEFEQUZMQUdTIC1nbmF0ZyIKKwlDRl9HQ0NfV0FSTklOR1MoV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCBXZXh0cmEgV25vLXVua25vd24tcHJhZ21hcyBXc3dpdGNoLWVudW0pCisJaWYgdGVzdCAiJGNmX3dpdGhfY3h4IiA9IHllcyA7IHRoZW4KKwkJQ0ZfR1hYX1dBUk5JTkdTKFduby11bnVzZWQpCisJZmkKK2ZpCitDRl9HQ0NfQVRUUklCVVRFUworCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS1hc3NlcnRpb25zIHRvIHR1cm4gb24gZ2VuZXJhdGlvbiBvZiBhc3NlcnRpb24gY29kZQorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGVuYWJsZSBydW50aW1lIGFzc2VydGlvbnMpCitBQ19BUkdfRU5BQkxFKGFzc2VydGlvbnMsCisJWyAgLS1lbmFibGUtYXNzZXJ0aW9ucyAgICAgdGVzdDogdHVybiBvbiBnZW5lcmF0aW9uIG9mIGFzc2VydGlvbiBjb2RlXSwKKwlbd2l0aF9hc3NlcnRpb25zPSRlbmFibGV2YWxdLAorCVt3aXRoX2Fzc2VydGlvbnM9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9hc3NlcnRpb25zKQoraWYgdGVzdCAtbiAiJEdDQyIKK3RoZW4KKwlpZiB0ZXN0ICIkd2l0aF9hc3NlcnRpb25zIiA9IG5vCisJdGhlbgorCQlBQ19ERUZJTkUoTkRFQlVHKQorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1ETkRFQlVHIgorCWVsc2UKKwkJQURBRkxBR1M9IiRBREFGTEFHUyAtZ25hdGEiCisJZmkKK2ZpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1sZWFrcyB0byBzdXBwcmVzcyAicGVybWFuZW50IiBsZWFrcywgZm9yIHRlc3RpbmcKK0NGX0RJU0FCTEVfTEVBS1MKK0FDX0RFRklORShIQVZFX05DX0FMTE9DX0gpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWV4cGFuZGVkIHRvIGdlbmVyYXRlIGNlcnRhaW4gbWFjcm9zIGFzIGZ1bmN0aW9ucworQUNfQVJHX0VOQUJMRShleHBhbmRlZCwKKwlbICAtLWVuYWJsZS1leHBhbmRlZCAgICAgICB0ZXN0OiBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGNlcnRhaW4gbWFjcm9zXSwKKwlbdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgJiYgQUNfREVGSU5FKE5DVVJTRVNfRVhQQU5ERUQpXSkKKworIyMjCXVzZSBvcHRpb24gLS1kaXNhYmxlLW1hY3JvcyB0byBzdXBwcmVzcyBtYWNyb3MgaW4gZmF2b3Igb2YgZnVuY3Rpb25zCitBQ19BUkdfRU5BQkxFKG1hY3JvcywKKwlbICAtLWRpc2FibGUtbWFjcm9zICAgICAgICB0ZXN0OiB1c2UgZnVuY3Rpb25zIHJhdGhlciB0aGFuIG1hY3Jvc10sCisJW3Rlc3QgIiRlbmFibGV2YWwiID0gbm8gJiYgQUNfREVGSU5FKE5DVVJTRVNfTk9NQUNST1MpXSkKKworIyBOb3JtYWxseSB3ZSBvbmx5IGFkZCB0cmFjZSgpIHRvIHRoZSBkZWJ1Zy1saWJyYXJ5LiAgQWxsb3cgdGhpcyB0byBiZQorIyBleHRlbmRlZCB0byBhbGwgbW9kZWxzIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnk6CitjZl9hbGxfdHJhY2VzPW5vCitjYXNlICIkQ0ZMQUdTICRDUFBGTEFHUyIgaW4KKyotRFRSQUNFKikKKwljZl9hbGxfdHJhY2VzPXllcworCTs7Citlc2FjCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGFkZCB0cmFjZSBmZWF0dXJlIHRvIGFsbCBtb2RlbHMpCitBQ19BUkdfV0lUSCh0cmFjZSwKK1sgIC0td2l0aC10cmFjZSAgICAgICAgICAgIHRlc3Q6IGFkZCB0cmFjZSgpIGZ1bmN0aW9uIHRvIGFsbCBtb2RlbHMgb2YgbmN1cnNlc10sCitbY2Zfd2l0aF90cmFjZT0kd2l0aHZhbF0sCitbY2Zfd2l0aF90cmFjZT0kY2ZfYWxsX3RyYWNlc10pCitBQ19NU0dfUkVTVUxUKCRjZl93aXRoX3RyYWNlKQorCitpZiB0ZXN0ICIkY2Zfd2l0aF90cmFjZSIgPSB5ZXMgOyB0aGVuCisJTElCX1RSQUNJTkc9YWxsCisJQURBX1RSQUNFPVRSVUUKKwlDRl9BRERfQ0ZMQUdTKC1EVFJBQ0UpCitlbHNlCisJTElCX1RSQUNJTkc9REVCVUcKKwlBREFfVFJBQ0U9RkFMU0UKK2ZpCisKK0FDX1NVQlNUKEFEQV9UUkFDRSkKKworIyMjCUNoZWNrcyBmb3IgbGlicmFyaWVzLgorQUNfQ0hFQ0tfRlVOQyhnZXR0aW1lb2ZkYXksCisJQUNfREVGSU5FKEhBVkVfR0VUVElNRU9GREFZKSxbCisKK0FDX0NIRUNLX0xJQihic2QsIGdldHRpbWVvZmRheSwKKwlBQ19ERUZJTkUoSEFWRV9HRVRUSU1FT0ZEQVkpCisJTElCUz0iJExJQlMgLWxic2QiKV0pZG5sIENMSVg6IGJ6ZXJvLCBzZWxlY3QsIGdldHRpbWVvZmRheQorCitDRl9NQVRIX0xJQihNQVRIX0xJQixzaW4oeCkpCitBQ19TVUJTVChNQVRIX0xJQikKKworIyMjCUNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfU1REQ19IRUFERVJTCitBQ19IRUFERVJfRElSRU5UCitBQ19IRUFERVJfVElNRQorQ0ZfUkVHRVgKKworZG5sIFRoZXNlIGFyZSBzb21lIG90aGVyIHBvdGVudGlhbGx5IG5vbnBvcnRhYmxlIGhlYWRlcnMuCitBQ19DSEVDS19IRUFERVJTKCBcCitmY250bC5oIFwKK2dldG9wdC5oIFwKK2xpbWl0cy5oIFwKK2xvY2FsZS5oIFwKK3BvbGwuaCBcCitzeXMvYnNkdHlwZXMuaCBcCitzeXMvaW9jdGwuaCBcCitzeXMvcGFyYW0uaCBcCitzeXMvcG9sbC5oIFwKK3N5cy9zZWxlY3QuaCBcCitzeXMvdGltZS5oIFwKK3N5cy90aW1lcy5oIFwKK3R0eWVudC5oIFwKK3VuaXN0ZC5oIFwKK3djdHlwZS5oIFwKKykKKworIyBjaGVjayBmb3IgSVNDICh0aGlzIG1heSBhbHNvIGRlZmluZSBfUE9TSVhfU09VUkNFKQorIyBOb3RlOiBldmVuIG5vbi1Qb3NpeCBJU0MgbmVlZHMgPHN5cy9ic2R0eXBlcy5oPiB0byBkZWNsYXJlIGZkX3NldAoraWYgdGVzdCAiJElTQyIgPSB5ZXMgOyB0aGVuCisJQUNfQ0hFQ0tfTElCKGNwb3NpeCxtYWluKQorCUFDX0NIRUNLX0xJQihpbmV0LGJ6ZXJvLExJQlM9IiRMSUJTIC1saW5ldCIpZG5sIGFsc28gJ3NlbGVjdCgpJworZmkKKworQ0ZfU1lTX1RJTUVfU0VMRUNUCisKKyMjIwljaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworQUNfTEFOR19DCitBQ19DX0NPTlNUCitDRl9DX0lOTElORShOQ1VSU0VTX0lOTElORSwxMjAwKQorQ0ZfU0lHX0FUT01JQ19UCisKK2lmIHRlc3QgJE5DVVJTRVNfQ0hUWVBFID0gYXV0byA7IHRoZW4KKwlDRl9UWVBFT0ZfQ0hUWVBFCitlbHNlCisJY2ZfY3ZfdHlwZW9mX2NodHlwZT0kTkNVUlNFU19DSFRZUEUKK2ZpCit0ZXN0ICIkY2ZfY3ZfdHlwZW9mX2NodHlwZSIgPSB1bnNpZ25lZCAmJiBjZl9jdl90eXBlb2ZfY2h0eXBlPSIiCitBQ19TVUJTVChjZl9jdl90eXBlb2ZfY2h0eXBlKQorCitDRl9VTlNJR05FRF9MSVRFUkFMUworY2ZfY3ZfMVVMPSIxIgordGVzdCAiLiRjZl9jdl91bnNpZ25lZF9saXRlcmFscyIgPSAueWVzICYmIGNmX2N2XzFVTD0iJHtjZl9jdl8xVUx9VSIKK3Rlc3QgIi4kY2ZfY3ZfdHlwZW9mX2NodHlwZSIgICAgPSAubG9uZyAmJiBjZl9jdl8xVUw9IiR7Y2ZfY3ZfMVVMfUwiCitBQ19TVUJTVChjZl9jdl8xVUwpCisKK2lmIHRlc3QgJE5DVVJTRVNfTU1BU0tfVCA9IGF1dG8gOyB0aGVuCisJY2ZfY3ZfdHlwZW9mX21tYXNrX3Q9bG9uZworZWxzZQorCWNmX2N2X3R5cGVvZl9tbWFza190PSROQ1VSU0VTX01NQVNLX1QKK2ZpCit0ZXN0ICIkY2ZfY3ZfdHlwZW9mX21tYXNrX3QiID0gdW5zaWduZWQgJiYgY2ZfY3ZfdHlwZW9mX21tYXNrX3Q9IiIKK0FDX1NVQlNUKGNmX2N2X3R5cGVvZl9tbWFza190KQorCisjIyMJQ2hlY2tzIGZvciBleHRlcm5hbC1kYXRhCitDRl9FUlJOTworQ0ZfTElOS19EQVRBT05MWQorCisjIyMJQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KK0FDX0NIRUNLX0ZVTkNTKCBcCitnZXRjd2QgXAorZ2V0ZWdpZCBcCitnZXRldWlkIFwKK2dldHR0eW5hbSBcCitpc3NldHVnaWQgXAorcG9sbCBcCityZW1vdmUgXAorc2VsZWN0IFwKK3NldGJ1ZiBcCitzZXRidWZmZXIgXAorc2V0dmJ1ZiBcCitzaWdhY3Rpb24gXAorc2lndmVjIFwKK3N0cmR1cCBcCitzdHJzdHIgXAordGNnZXRwZ3JwIFwKK3RpbWVzIFwKK3ZzbnByaW50ZiBcCispCitpZiB0ZXN0ICIkd2l0aF9nZXRjYXAiID0gInllcyIgOyB0aGVuCisJQ0ZfQ0dFVEVOVAorZmkKKworQ0ZfSVNBU0NJSQorQ0ZfU1RSVUNUX1NJR0FDVElPTgorQ0ZfRlVOQ19OQU5PU0xFRVAKK0NGX0ZVTkNfVEVSTUlPUworQ0ZfRlVOQ19WU1NDQU5GCitDRl9NS1NURU1QCisKKyMgc2V0dXAgZm9yIHByb3RvdHlwZSBvZiBmYWxsYmFjayBmb3IgdnNzY2FuZigpCitDRl9TVUJTVF9JRihbIiRjZl9jdl9mdW5jX3Zzc2NhbmYiID0gdnNzY2FuZl0sIEhBVkVfVlNTQ0FORiwgMSwgMCkKKworZG5sIEZJWE1FIChtYXkgbmVlZCB0aGlzKSBBQ19TWVNfUkVTVEFSVEFCTEVfU1lTQ0FMTFMKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCUFDX01TR19XQVJOKGNyb3NzIGNvbXBpbGluZzogYXNzdW1lIHNldHZidWYgcGFyYW1zIG5vdCByZXZlcnNlZCkKK2Vsc2UKKwlBQ19GVU5DX1NFVFZCVUZfUkVWRVJTRUQKK2ZpCitBQ19UWVBFX1NJR05BTAorQ0ZfVFlQRV9TSUdBQ1RJT04KK0NGX1NJWkVDSEFOR0UKK0NGX0ZVTkNfTUVNTU9WRQorQ0ZfRlVOQ19QT0xMCisKKyMgc3BlY2lhbCBjaGVjayBmb3IgdGVzdC9kaXR0by5jCitDRl9GVU5DX09QRU5QVFkKK2lmIHRlc3QgIiRjZl9jdl9mdW5jX29wZW5wdHkiICE9IG5vIDsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChVU0VfT1BFTlBUWV9IRUFERVIsPCRjZl9jdl9mdW5jX29wZW5wdHk+KQorICAgIEFDX0RFRklORShVU0VfWFRFUk1fUFRZKQorICAgIGlmIHRlc3QgIiRjZl9jdl9saWJfdXRpbCIgPSB5ZXMgOyB0aGVuCisgICAgICAgIFRFU1RfTElCUz0iLWx1dGlsICRURVNUX0xJQlMiCisgICAgZmkKK2ZpCitBQ19TVUJTVChURVNUX0xJQlMpCisKK2lmIHRlc3QgIiR3aXRoX2hhc2hlZF9kYiIgIT0gbm8gOyB0aGVuCisJQUNfREVGSU5FKFVTRV9IQVNIRURfREIpCisJQ0ZfSEFTSEVEX0RCKCR3aXRoX2hhc2hlZF9kYikKK2ZpCisKK2RubCBXZSdsbCBkbyBvdXIgb3duIC1nIGxpYnJhcmllcywgdW5sZXNzIHRoZSB1c2VyJ3Mgb3ZlcnJpZGRlbiB2aWEgJENGTEFHUworaWYgdGVzdCAteiAiJGNmX3VzZXJfQ0ZMQUdTIiAmJiB0ZXN0ICIkd2l0aF9ub19sZWFrcyIgPSBubyA7IHRoZW4KKwlDRl9TVFJJUF9HX09QVChDRkxBR1MpCisJQ0ZfU1RSSVBfR19PUFQoQ1hYRkxBR1MpCitmaQorCisjIEp1c3QgaW4gY2FzZSwgY2hlY2sgaWYgdGhlIEMgY29tcGlsZXIgaGFzIGEgYm9vbCB0eXBlLgorQ0ZfQk9PTF9ERUNMKGNmX2N2X2NjX2Jvb2xfdHlwZSkKKworIyBDaGVjayBmb3IgQysrIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyAoYW5kIGVuc3VyZSB0aGF0IGl0J3MgdGhlcmUhKQoraWYgdGVzdCAtbiAiJENYWCIgOyB0aGVuCisJQUNfTEFOR19DUExVU1BMVVMKKwlDRl9TVERDUFBfTElCUkFSWQorCUNGX1BST0dfQ0NfQ19PKENYWCkKKworCWNhc2UgJEdYWF9WRVJTSU9OIGluCisJMSp8Mi5bMC02XSopCisJCWNmX2N4eF9saWJyYXJ5PXllcworCQk7OworCSotMi43KnwyLjcqKQorCQlDRl9HUFBfTElCUkFSWQorCQk7OworCSopCisJCWNmX2N4eF9saWJyYXJ5PW5vCisJCTs7CisJZXNhYworCisJQUNfQ0hFQ0tfSEVBREVSUyhpb3N0cmVhbSB0eXBlaW5mbykKKworICAgIGlmIHRlc3QgeCIkYWNfY3ZfaGVhZGVyX2lvc3RyZWFtIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhpZiBpb3N0cmVhbSB1c2VzIHN0ZC1uYW1lc3BhY2UpCisgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxpb3N0cmVhbT4KK3VzaW5nIHN0ZDo6ZW5kbDsKK3VzaW5nIHN0ZDo6Y2VycjtdLFsKK2NlcnIgPDwgInRlc3RpbmciIDw8IGVuZGw7CitdLFtjZl9pb3N0cmVhbV9uYW1lc3BhY2U9eWVzXSxbY2ZfaW9zdHJlYW1fbmFtZXNwYWNlPW5vXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkY2ZfaW9zdHJlYW1fbmFtZXNwYWNlKQorICAgICAgICBpZiB0ZXN0ICIkY2ZfaW9zdHJlYW1fbmFtZXNwYWNlIiA9IHllcyA7IHRoZW4KKyAgICAgICAgICAgIEFDX0RFRklORShJT1NUUkVBTV9OQU1FU1BBQ0UpCisgICAgICAgIGZpCisgICAgZmkKKworCUNGX0JPT0xfREVDTAorCUNGX0JPT0xfU0laRQorCUNGX0VUSVBfREVGSU5FUworCUNGX0NQUF9QQVJBTV9JTklUCisJQ0ZfQ1BQX1NUQVRJQ19DQVNUCisKKwlDWFhfQVI9JyQoQVIpJworCUNYWF9BUl9PUFRTPSckKEFSX09QVFMpJworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwlpcml4KikgIyh2aQorCSAgICBpZiB0ZXN0ICIkR1hYIiAhPSB5ZXMgOyB0aGVuCisJCUNYWF9BUj0nJChDWFgpJworCQlDWFhfQVJfT1BUUz0nLWFyIC1vJworCSAgICBmaQorCSAgICA7OworCXNjbzMuMnY1KikgIyh2aQorCSAgICBDWFhMREZMQUdTPSItdSBtYWluIgorCSAgICA7OworCXNvbGFyaXMyKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgIT0geWVzIDsgdGhlbgorCQlDWFhfQVI9JyQoQ1hYKScKKwkJQ1hYX0FSX09QVFM9Jy14YXIgLW8nCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCUFDX1NVQlNUKENYWExERkxBR1MpCisJQUNfU1VCU1QoQ1hYX0FSKQorCUFDX1NVQlNUKENYWF9BUl9PUFRTKQorZWxzZQorCWNmX2N4eF9saWJyYXJ5PW5vCisJY2ZfY3ZfYnVpbHRpbl9ib29sPTEKKworCSMgSnVzdCBiZWNhdXNlIHdlIGFyZSBub3QgY29uZmlndXJpbmcgYWdhaW5zdCBDKysgcmlnaHQgbm93IGRvZXMgbm90CisJIyBtZWFuIHRoYXQgYSB1c2VyIHdpbGwgbm90IHdhbnQgdG8gdXNlIEMrKy4gIFNvbWUgZGlzdHJpYnV0b3JzIGRpc2FibGUKKwkjIHRoZSBDKysgcG9ydGlvbiBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgYSBzaG9ydGN1dCAob3IganVzdCB0byBhdm9pZAorCSMgY29tcGlsaW5nIHRoZSBkZW1vIGluIHRoZSBjKysgZGlyZWN0b3J5KS4gIFNvIHdlIG5lZWQgYSByZWFzb25hYmxlCisJIyBkZWZhdWx0IGZvciB0aGUgJ2Jvb2wnIHR5cGUuCisJIworCSMgQ2F2ZWF0OiBzaW5jZSB0aGUgc3RvcmFnZSBvZiB0aGUgYm9vbCB0eXBlIGlzIG5vdCBzdGFuZGFyZGl6ZWQsIGl0CisJIyBtYXkgY2hhbmdlLgorCisJaWYgdGVzdCAiJE5DVVJTRVNfQk9PTCIgIT0gYXV0byA7IHRoZW4KKwkJY2ZfY3ZfdHlwZV9vZl9ib29sPSROQ1VSU0VTX0JPT0wKKwkJY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaD0wCisJZWxzZQorCQlpZiB0ZXN0ICIkY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSAxIDsgdGhlbgorCQkJQ0ZfQk9PTF9TSVpFCisJCWVsc2UKKwkJCUFDX01TR19DSEVDS0lORyhmb3IgZmFsbGJhY2sgdHlwZSBvZiBib29sKQorCQkJY2FzZSAiJGhvc3RfY3B1IiBpbiAjKHZpCisJCQlpPzg2KQljZl9jdl90eXBlX29mX2Jvb2w9Y2hhcgk7OyAjKHZpCisJCQkqKQljZl9jdl90eXBlX29mX2Jvb2w9aW50CTs7CisJCQllc2FjCisJCQlBQ19NU0dfUkVTVUxUKCRjZl9jdl90eXBlX29mX2Jvb2wpCisJCWZpCisJZmkKK2ZpCitBQ19TVUJTVChDWFhMSUJTKQorCisjIElmIHRoZSBDIGNvbXBpbGVyIGRpZCBub3QgZGVjbGFyZSBib29sLCBhbmQgd2UgZGlkIG5vdCBkZXRlcm1pbmUgdGhhdCB0aGUgQysrCisjIGNvbXBpbGVyIGRvZXMgbm90IGRlY2xhcmUgYm9vbCwgdHVybiBvbiBhbiBpZmRlZiBpbiBjdXJzZXMuaCB0aGF0IG1ha2VzIHRoZQorIyBuY3Vyc2VzIGxpYnJhcnkgdXNlIHRoZSBzYW1lIHR5cGUgYXMgQysrIGJvb2wuICBOb3RlIHRoYXQgdGhpcyBhbGxvd3Mgb25lIHRvCisjIHNwZWNpZnkgdGhlIHR5cGUgb2YgYm9vbCBpbiBhIGNvbmZpZ3VyZS1zY3JpcHQgb3B0aW9uIGFuZCBwb3N0cG9uZQorIyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBDKysgY29tcGlsZXIgcHJvdmlkZWQgdGhhdCB0aGUgdHlwZXMgYXJlIGNvbXBhdGlibGUuCitVU0VfQ1hYX0JPT0w9MQoraWYgdGVzdCAkY2ZfY3ZfY2NfYm9vbF90eXBlID0gMQordGhlbgorCSMgb29wczogQyBoYXMgYSBib29sLiAgVW5saWtlbHksIGJ1dCBDKysgY291bGQgZGlmZmVyLgorCVVTRV9DWFhfQk9PTD0wCitlbGlmIHRlc3QgJGNmX2N2X2J1aWx0aW5fYm9vbCA9IDAKK3RoZW4KKwkjIEMrKyBoYXMgbm8gYm9vbAorCVVTRV9DWFhfQk9PTD0wCitlbHNlCisJIyB0aGlzIGlzIHRoZSBub3JtYWwgY2FzZQorCVVTRV9DWFhfQk9PTD0nZGVmaW5lZChfX2NwbHVzcGx1cyknCitmaQorQUNfU1VCU1QoVVNFX0NYWF9CT09MKQorCitDRl9IRUxQX01FU1NBR0UoQWRhOTUgQmluZGluZyBPcHRpb25zOikKKworZG5sIElmIHRoZSBBZGE5NSBzb3VyY2UtdHJlZSBpcyBwcmVzZW50LCBhZGQgdGhhdCB0byB0aGUgYnVpbGQgdW5sZXNzIGl0IHdpbGwKK2RubCBub3Qgd29yaywgb3Igd2FzIG5vdCByZXF1ZXN0ZWQuCitpZiB0ZXN0IC1mICIke3NyY2Rpcn0vQWRhOTUvTWFrZWZpbGUuaW4iIDsgdGhlbgorCitkbmwgbGlidG9vbCBkb2VzIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IEdOQVQsIHRob3VnaCBhIGNoYW5nZSBtYWRlIGluIDE5OTgKK2RubCBwcm92aWRlZCBmb3IgaXQgInNvbWVkYXkiLiAgRGlzYWJsZSB0aGUgYWRhIHN1YnRyZWUgaWYgd2UgYXJlIHVzaW5nCitkbmwgbGlidG9vbCAtVEQgMjAwNzA3MTQKK2lmIHRlc3QgIiRjZl93aXRoX2FkYSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAibm8iOyB0aGVuCisJQUNfTVNHX1dBUk4obGlidG9vbCBkb2VzIG5vdCBzdXBwb3J0IEFkYSAtIGRpc2FibGluZyBmZWF0dXJlKQorCWNmX3dpdGhfYWRhPW5vCisgICAgZmkKK2ZpCisKK2RubCBDaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mIEdOVSBBZGEgVHJhbnNsYXRvciAoR05BVCkuCitkbmwgQXQgdGhlIG1vbWVudCB3ZSBzdXBwb3J0IG5vIG90aGVyIEFkYTk1IGNvbXBpbGVyLgoraWYgdGVzdCAiJGNmX3dpdGhfYWRhIiAhPSAibm8iIDsgdGhlbgorY2ZfYWRhX21ha2U9Z25hdG1ha2UKK0FDX0NIRUNLX1BST0coZ25hdF9leGlzdHMsICRjZl9hZGFfbWFrZSwgeWVzLCBubykKK2lmIHRlc3QgIiRhY19jdl9wcm9nX2duYXRfZXhpc3RzIiA9IG5vOyB0aGVuCisgICBjZl9hZGFfbWFrZT0KK2Vsc2UKKyAgIENGX0dOQVRfVkVSU0lPTgorICAgQUNfQ0hFQ0tfUFJPRyhNNF9leGlzdHMsIG00LCB5ZXMsIG5vKQorICAgaWYgdGVzdCAiJGFjX2N2X3Byb2dfTTRfZXhpc3RzIiA9IG5vOyB0aGVuCisgICAgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworICAgICAgZWNobyBBZGE5NSBiaW5kaW5nIHJlcXVpcmVkIHByb2dyYW0gbTQgbm90IGZvdW5kLiBBZGE5NSBiaW5kaW5nIGRpc2FibGVkLgorICAgZmkKKyAgIGlmIHRlc3QgIiRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhpZiBHTkFUIHdvcmtzKQorICAgICAgQ0ZfR05BVF9UUllfUlVOKFtwcm9jZWR1cmUgY29uZnRlc3Q7XSwKK1t3aXRoIFRleHRfSU87Cit3aXRoIEdOQVQuT1NfTGliOworcHJvY2VkdXJlIGNvbmZ0ZXN0IGlzCitiZWdpbgorICAgVGV4dF9JTy5QdXQgKCJIZWxsbyBXb3JsZCIpOworICAgVGV4dF9JTy5OZXdfTGluZTsKKyAgIEdOQVQuT1NfTGliLk9TX0V4aXQgKDApOworZW5kIGNvbmZ0ZXN0O10sW2NmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllc10sW2NmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0KQorICAgZmkKK2ZpCitpZiB0ZXN0CSIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID0geWVzOyB0aGVuCisgICBBREFGTEFHUz0iLU8zIC1nbmF0cG4gJEFEQUZMQUdTIgorCisgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgR05BVCBwcmFnbWEgVW5yZWZlcmVuY2VkIHdvcmtzKQorICAgQ0ZfR05BVF9UUllfTElOSyhbcHJvY2VkdXJlIGNvbmZ0ZXN0O10sCitbd2l0aCBUZXh0X0lPOword2l0aCBHTkFULk9TX0xpYjsKK3Byb2NlZHVyZSBjb25mdGVzdCBpcworICAgdGVzdCA6IEludGVnZXI7CisgICBwcmFnbWEgVW5yZWZlcmVuY2VkICh0ZXN0KTsKK2JlZ2luCisgICB0ZXN0IDo9IDE7CisgICBUZXh0X0lPLlB1dCAoIkhlbGxvIFdvcmxkIik7CisgICBUZXh0X0lPLk5ld19MaW5lOworICAgR05BVC5PU19MaWIuT1NfRXhpdCAoMCk7CitlbmQgY29uZnRlc3Q7XSxbY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZD15ZXNdLFtjZl9jdl9wcmFnbWFfdW5yZWZlcmVuY2VkPW5vXSkKKyAgIEFDX01TR19SRVNVTFQoJGNmX2N2X3ByYWdtYV91bnJlZmVyZW5jZWQpCisKKyAgICMgaWYgdGhlIHByYWdtYSBpcyBzdXBwb3J0ZWQsIHVzZSBpdCAobmVlZGVkIGluIHRoZSBUcmFjZSBjb2RlKS4KKyAgIGlmIHRlc3QgJGNmX2N2X3ByYWdtYV91bnJlZmVyZW5jZWQgPSB5ZXMgOyB0aGVuCisgICAgICBQUkFHTUFfVU5SRUY9VFJVRQorICAgZWxzZQorICAgICAgUFJBR01BX1VOUkVGPUZBTFNFCisgICBmaQorCisgICBBQ19BUkdfV0lUSChhZGEtY29tcGlsZXIsCisJWyAgLS13aXRoLWFkYS1jb21waWxlcj1DTUQgc3BlY2lmeSBBZGE5NSBjb21waWxlciBjb21tYW5kIChkZWZhdWx0IGduYXRtYWtlKV0sCisJW2NmX2FkYV9jb21waWxlcj0kd2l0aHZhbF0sCisJW2NmX2FkYV9jb21waWxlcj1nbmF0bWFrZV0pCisKKyAgIGNmX2FkYV9wYWNrYWdlPXRlcm1pbmFsX2ludGVyZmFjZQorCisgICBBQ19TVUJTVChjZl9hZGFfbWFrZSkKKyAgIEFDX1NVQlNUKGNmX2FkYV9jb21waWxlcikKKyAgIEFDX1NVQlNUKGNmX2FkYV9wYWNrYWdlKQorICAgQUNfU1VCU1QoQURBRkxBR1MpCisgICBBQ19TVUJTVChjZl9jb21waWxlX2dlbmVyaWNzKQorICAgQUNfU1VCU1QoY2ZfZ2VuZXJpY19vYmplY3RzKQorICAgQUNfU1VCU1QoUFJBR01BX1VOUkVGKQorCisgICBDRl9XSVRIX1BBVEgoYWRhLWluY2x1ZGUsCisgICAgICAgWyAgLS13aXRoLWFkYS1pbmNsdWRlPURJUiAgQWRhIGluY2x1ZGVzIGFyZSBpbiBESVJdLAorICAgICAgIEFEQV9JTkNMVURFLAorICAgICAgIFBSRUZJWC9saWIvYWRhL2FkYWluY2x1ZGUsCisgICAgICAgWyRdcHJlZml4L2xpYi9hZGEvYWRhaW5jbHVkZSkKKyAgIEFDX1NVQlNUKEFEQV9JTkNMVURFKQorCisgICBDRl9XSVRIX1BBVEgoYWRhLW9iamVjdHMsCisgICAgICAgWyAgLS13aXRoLWFkYS1vYmplY3RzPURJUiAgQWRhIG9iamVjdHMgYXJlIGluIERJUl0sCisgICAgICAgQURBX09CSkVDVFMsCisgICAgICAgUFJFRklYL2xpYi9hZGEvYWRhbGliLAorICAgICAgIFskXXByZWZpeC9saWIvYWRhL2FkYWxpYikKKyAgIEFDX1NVQlNUKEFEQV9PQkpFQ1RTKQorCitmaQorZmkKK2Vsc2UKKyAgIGNmX3dpdGhfYWRhPW5vCitmaQorCisjIyMgQ29uc3RydWN0IHRoZSBuY3Vyc2VzIGxpYnJhcnktc3Vic2V0cywgaWYgYW55LCBmcm9tIHRoaXMgc2V0IG9mIGtleXdvcmRzOgorIyMjCW5vbmUsIGJhc2UsIGV4dF9mdW5jcywgZXh0X3RpbmZvLCB0aWNsaWIsIHRlcm1saWIsIHdpZGVjaGFyCisjIyMKKyMjIyB0aWNsaWIgbW9kdWxlcyBtYXkgYmUgYSBzZXBhcmF0ZSBsaWJyYXJ5LCBvdGhlcndpc2UgY29udGFpbmVkIGluIHRlcm1saWIuCisjIyMgdGVybWxpYiBtb2R1bGVzIG1heSBiZSBhIHNlcGFyYXRlIGxpYnJhcnksIG90aGVyd2lzZSBjb250YWluZWQgaW4gbmN1cnNlcy4KKyMjIworIyMjIFRoZSBvZiAiKyIgb3IgIiAiIGJldHdlZW4gdGhlIHRva2VucyBjb250cm9scyB0aGUgd2F5IHRoZSBzY3JpcHQKKyMjIyBjaG9vc2VzIHRvIHNwbGl0IG1vZHVsZSBsaXN0cyBpbnRvIGxpYnJhcmllcy4KKyMjIworIyMjIChzZWUgQ0ZfTElCX1JVTEVTKS4KK0FDX01TR19DSEVDS0lORyhmb3IgbGlicmFyeSBzdWJzZXRzKQorTElCX1NVQlNFVFM9CisKK2lmIHRlc3QgIiRjZl93aXRoX3Byb2dzIiA9IHllcyB8fCB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIHx8IHRlc3QgIiR3aXRoX3Rlcm1jYXAiICE9IG5vOyB0aGVuCisJTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9dGljbGliIgorCWlmIHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gOyB0aGVuCisJCUxJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfSAiCisJZWxzZQorCQlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rIgorCWZpCitmaQorCitMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU310ZXJtbGliIgordGVzdCAiJHdpdGhfZXh0X2Z1bmNzIiA9IHllcyAmJiBMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rZXh0X3RpbmZvIgoraWYgdGVzdCAiJHdpdGhfdGVybWxpYiIgIT0gbm8gOyB0aGVuCisJTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9ICIKK2Vsc2UKKwlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rIgorZmkKKworTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9YmFzZSIKK3Rlc3QgIiR3aXRoX3dpZGVjIiAgICAgPSB5ZXMgJiYgTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9K3dpZGVjaGFyIgordGVzdCAiJHdpdGhfZXh0X2Z1bmNzIiA9IHllcyAmJiBMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rZXh0X2Z1bmNzIgorCitBQ19NU0dfUkVTVUxUKCRMSUJfU1VCU0VUUykKKworIyMjIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlLWRpcmVjdG9yaWVzIHRvIGJlIGdlbmVyYXRlZAorQ0ZfSU5DTFVERV9ESVJTCitDRl9BREFfSU5DTFVERV9ESVJTCisKKyMjIyBCdWlsZCB1cCBwaWVjZXMgZm9yIG1ha2VmaWxlIHJ1bGVzCitBQ19NU0dfQ0hFQ0tJTkcoZGVmYXVsdCBsaWJyYXJ5IHN1ZmZpeCkKK0NGX0xJQl9UWVBFKCRERlRfTFdSX01PREVMLERGVF9BUkdfU1VGRklYKWRubAorQUNfU1VCU1QoREZUX0FSR19TVUZGSVgpZG5sIHRoZSBzdHJpbmcgdG8gYXBwZW5kIHRvICItbG5jdXJzZXMiICgiIikKK0FDX01TR19SRVNVTFQoJERGVF9BUkdfU1VGRklYKQorCitBQ19NU0dfQ0hFQ0tJTkcoZGVmYXVsdCBsaWJyYXJ5LWRlcGVuZGVuY3kgc3VmZml4KQorQ0ZfTElCX1NVRkZJWCgkREZUX0xXUl9NT0RFTCxERlRfTElCX1NVRkZJWCxERlRfREVQX1NVRkZJWClkbmwKK0FDX1NVQlNUKERGVF9ERVBfU1VGRklYKWRubCB0aGUgY29ycmVzcG9uZGluZyBsaWJyYXJ5LXN1ZmZpeCAoIi5hIikKK0FDX01TR19SRVNVTFQoJERGVF9ERVBfU1VGRklYKQorCitBQ19NU0dfQ0hFQ0tJTkcoZGVmYXVsdCBvYmplY3QgZGlyZWN0b3J5KQorQ0ZfT0JKX1NVQkRJUigkREZUX0xXUl9NT0RFTCxERlRfT0JKX1NVQkRJUilkbmwKK0FDX1NVQlNUKERGVF9PQkpfU1VCRElSKWRubCB0aGUgZGVmYXVsdCBvYmplY3QtZGlyZWN0b3J5ICgib2JqIikKK0FDX01TR19SRVNVTFQoJERGVF9PQkpfU1VCRElSKQorCisjIGxpYnRvb2wgdGhpbmtzIGl0IGNhbiBtYWtlIGMrKyBzaGFyZWQgbGlicmFyaWVzIChwZXJoYXBzIG9ubHkgZysrKQoraWYgdGVzdCAiJGNmX3dpdGhfY3h4IiA9IHllcyA7IHRoZW4KK0FDX01TR19DSEVDS0lORyhjKysgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeCkKK2lmIHRlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJubyI7IHRoZW4KKwlDWFhfTElCX1NVRkZJWD0kREZUX0RFUF9TVUZGSVgKK2Vsc2UKKwlDRl9MSUJfU1VGRklYKG5vcm1hbCxDWFhfTElCX1NVRkZJWCxDWFhfREVQX1NVRkZJWClkbmwgd2Ugbm9ybWFsbHkgbWFrZSBhIHN0YXRpYyBsaWJyYXJ5CitmaQorQUNfTVNHX1JFU1VMVCgkQ1hYX0xJQl9TVUZGSVgpCitBQ19TVUJTVChDWFhfTElCX1NVRkZJWCkKK2ZpCisKKyMgZG8gbm90IHdhbnQgLWxkbCBpbiBidWlsZCBleGNlcHQgYXMgbmVlZGVkIGZvciAtbG5jdXJzZXMgZGVwZW5kZW5jeQoraWYgdGVzdCAiJHdpdGhfZGxzeW0iID0geWVzIDsgdGhlbgoraWYgdGVzdCAkREZUX0xXUl9NT0RFTCA9IHNoYXJlZCB8fCBcCisgICB0ZXN0ICRERlRfTFdSX01PREVMID0gbGlidG9vbCA7IHRoZW4KKwlDRl9SRU1PVkVfTElCKExJQlMsJExJQlMsZGwpCitmaQorZmkKKyMjIyBTZXQgdXAgbG93LWxldmVsIHRlcm1pbmZvIGRlcGVuZGVuY2llcyBmb3IgbWFrZWZpbGVzLgorCisjIFRJQ1NfTElTVCBhbmQgVElORk9fTElTVCBhcmUgbmVlZGVkIHRvIGJ1aWxkIGxpYnRpYy5zbyBhbmQgbGlidGVybS5zbywgYnV0CisjIGRvIG5vdCBuZWVkIGxpYmRsCitUSUNTX0xJU1Q9CitpZiB0ZXN0ICIkd2l0aF9kbHN5bSIgPSB5ZXMgOyB0aGVuCisJQ0ZfUkVNT1ZFX0xJQihUSU5GT19MSVNULCRTSExJQl9MSVNULGRsKQorZmkKKworaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSBubyA7IHRoZW4KKworCWlmIHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0geWVzIDsgdGhlbgorCQlUSUNTX05BTUU9JHdpdGhfdGljbGliCisJCVRJQ1NfQVJHX1NVRkZJWD0iJHt3aXRoX3RpY2xpYn1gZWNobyAke0RGVF9BUkdfU1VGRklYfXxzZWQgLWUgInMvXiR7TElCX1NVRkZJWH0vLyJgIgorCQlUSUNTX0RFUF9TVUZGSVg9IiR7d2l0aF90aWNsaWJ9YGVjaG8gJHtERlRfREVQX1NVRkZJWH18c2VkIC1lICJzL14ke0xJQl9TVUZGSVh9Ly8iYCIKKwkJVElDU19MSUJfU1VGRklYPSIke3dpdGhfdGljbGlifSIKKwllbHNlCisJCVRJQ1NfQVJHX1NVRkZJWD0iJHtUSUNTX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCisJCVRJQ1NfREVQX1NVRkZJWD0iJHtUSUNTX05BTUV9JHtERlRfREVQX1NVRkZJWH0iCisJCVRJQ1NfTElCX1NVRkZJWD0iJHtUSUNTX05BTUV9JHtMSUJfU1VGRklYfSIKKwlmaQorCVRJQ1NfQVJHUz0iLUwke0xJQl9ESVJ9IC1sJHtUSUNTX0xJQl9TVUZGSVh9IgorZWxzZQorCVRJQ1NfQVJHUz0iLUwke0xJQl9ESVJ9IC1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKK2ZpCitBQ19TVUJTVChUSUNTX0FSR19TVUZGSVgpCitBQ19TVUJTVChUSUNTX0RFUF9TVUZGSVgpCitBQ19TVUJTVChUSUNTX0xJQl9TVUZGSVgpCitBQ19TVUJTVChUSUNTX0FSR1MpCisKK2lmIHRlc3QgIiR3aXRoX3Rlcm1saWIiICE9IG5vIDsgdGhlbgorCisJaWYgdGVzdCAiJHdpdGhfdGVybWxpYiIgIT0geWVzIDsgdGhlbgorCQlUSU5GT19OQU1FPSR3aXRoX3Rlcm1saWIKKwkJVElORk9fU1VGRklYPSJgZWNobyAke0RGVF9MSUJfU1VGRklYfXxzZWQgLWUgInMvXiR7TElCX1NVRkZJWH0vLyJgIgorCQlUSU5GT19BUkdfU1VGRklYPSIke3dpdGhfdGVybWxpYn1gZWNobyAke0RGVF9BUkdfU1VGRklYfXxzZWQgLWUgInMvXiR7TElCX1NVRkZJWH0vLyJgIgorCQlUSU5GT19ERVBfU1VGRklYPSIke3dpdGhfdGVybWxpYn1gZWNobyAke0RGVF9ERVBfU1VGRklYfXxzZWQgLWUgInMvXiR7TElCX1NVRkZJWH0vLyJgIgorCQlUSU5GT19MSUJfU1VGRklYPSIke3dpdGhfdGVybWxpYn0iCisJZWxzZQorCQlUSU5GT19TVUZGSVg9JHtERlRfTElCX1NVRkZJWH0KKwkJVElORk9fQVJHX1NVRkZJWD0iJHtUSU5GT19OQU1FfSR7REZUX0FSR19TVUZGSVh9IgorCQlUSU5GT19ERVBfU1VGRklYPSIke1RJTkZPX05BTUV9JHtERlRfREVQX1NVRkZJWH0iCisJCVRJTkZPX0xJQl9TVUZGSVg9IiR7VElORk9fTkFNRX0ke0xJQl9TVUZGSVh9IgorCWZpCisKKwlURVNUX0RFUFM9IiR7TElCX0RJUn0vJHtMSUJfUFJFRklYfSR7VElORk9fREVQX1NVRkZJWH0iCisJVEVTVF9ERVAyPSIke0xJQl8yTkR9LyR7TElCX1BSRUZJWH0ke1RJTkZPX0RFUF9TVUZGSVh9IgorCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJsaWJ0b29sIjsgdGhlbgorCQlURVNUX0FSR1M9IiR7VEVTVF9ERVBTfSIKKwkJVEVTVF9BUkcyPSIke1RFU1RfREVQMn0iCisJCVRJTkZPX0FSR1M9Ii1MJHtMSUJfRElSfSAkVEVTVF9BUkdTIgorCWVsc2UKKwkJVEVTVF9BUkdTPSItbCR7VElORk9fQVJHX1NVRkZJWH0iCisJCVRFU1RfQVJHMj0iLWwke1RJTkZPX0FSR19TVUZGSVh9IgorCQlUSUNTX0xJU1Q9IiRTSExJQl9MSVNUIC1sJHtUSU5GT19MSUJfU1VGRklYfSIKKwkJVElORk9fQVJHUz0iLUwke0xJQl9ESVJ9ICRURVNUX0FSR1MiCisJCVNITElCX0xJU1Q9IiRTSExJQl9MSVNUIC1sJHtUSU5GT19MSUJfU1VGRklYfSIKKwlmaQorZWxzZQorCSMgdGhlIG5leHQgbGluZXMgYXJlIG5lZWRlZCBmb3IgbGlua2luZyBsaWJ0aWMgb3ZlciBsaWJuY3Vyc2VzCisJVElORk9fTkFNRT0ke0xJQl9OQU1FfQorCVRJTkZPX1NVRkZJWD0ke0RGVF9MSUJfU1VGRklYfQorCVRJTkZPX0FSR19TVUZGSVg9JHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfQorCWlmIHRlc3QgIiR3aXRoX3RpY19kZXBlbmRzIiA9IHllcyA7IHRoZW4KKwkJVElDU19MSVNUPSIkU0hMSUJfTElTVCAtbCR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCisJZWxzZQorCQlUSUNTX0xJU1Q9IiRTSExJQl9MSVNUIgorCWZpCisKKwlUSU5GT19BUkdTPSItTCR7TElCX0RJUn0gLWwke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9IgorZmkKKworaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gc2hhcmVkIDsgdGhlbgorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwljeWd3aW4qKQorCQkjICJsaWIiIGZpbGVzIGhhdmUgIi5kbGwuYSIgc3VmZml4LCAiY3lnIiBmaWxlcyBoYXZlICIuZGxsIgorCQlUSU5GT19TVUZGSVg9LmRsbAorCQk7OworCWVzYWMKK2ZpCisKK0FDX1NVQlNUKFRJTkZPX0FSR19TVUZGSVgpCitBQ19TVUJTVChUSU5GT19ERVBfU1VGRklYKQorQUNfU1VCU1QoVElORk9fTElCX1NVRkZJWCkKK0FDX1NVQlNUKFRJTkZPX0FSR1MpCisKK2lmIHRlc3QgIiR3aXRoX2Rsc3ltIiA9IHllcyA7IHRoZW4KKwlDRl9SRU1PVkVfTElCKFRJQ1NfTElTVCwkVElDU19MSVNULGRsKQorZmkKKworaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisgICAgT0JKRVhUPWxvCitmaQorCisjIG5lZWRlZCBmb3IgQWRhOTUKK1RJTkZPX0FSR1MyPWBlY2hvICIkVElORk9fQVJHUyIgfCBzZWQgLWUgJ3MsLUxcLlwuLywtTC4uLy4uLywnYAorQUNfU1VCU1QoVElORk9fQVJHUzIpCisKK2Nhc2UgJERGVF9MV1JfTU9ERUwgaW4KK25vcm1hbHxkZWJ1Z3xwcm9maWxlKQorCUNGX0xERkxBR1NfU1RBVElDCisJOzsKK2VzYWMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXJlIHdlIHdpbGwgaW5zdGFsbCBjdXJzZXMuaCkKK3Rlc3QgIiR3aXRoX292ZXJ3cml0ZSIgPSBubyAmJiBcCit0ZXN0ICJ4JGluY2x1ZGVkaXIiID0gJ3gke3ByZWZpeH0vaW5jbHVkZScgJiYgXAorCWluY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlL25jdXJzZXMnJHtMSUJfU1VGRklYfQorQUNfTVNHX1JFU1VMVCgkaW5jbHVkZWRpcikKKworIyMjIFJlc29sdmUgYSBjb25mbGljdCBiZXR3ZWVuIG5vcm1hbCBhbmQgd2lkZS1jdXJzZXMgYnkgZm9yY2luZyBhcHBsaWNhdGlvbnMKKyMjIyB0aGF0IHdpbGwgbmVlZCBsaWJ1dGY4IHRvIGFkZCBpdCB0byB0aGVpciBjb25maWd1cmUgc2NyaXB0LgoraWYgdGVzdCAiJHdpdGhfb3ZlcndyaXRlIiAhPSBubyA7IHRoZW4KK2lmIHRlc3QgIiROQ1VSU0VTX0xJQlVURjgiID0gMSA7IHRoZW4KKwlOQ1VSU0VTX0xJQlVURjg9J2RlZmluZWQoSEFWRV9MSUJVVEY4X0gpJworCUFDX01TR19XQVJOKFdpZGUtY2hhcmFjdGVyIGFwcGxpY2F0aW9ucyBtdXN0IGRlZmluZSBIQVZFX0xJQlVURjhfSCB0byBpbmNsdWRlIGN1cnNlcy5oKQorZmkKK2ZpCisKK0FDX1NVQlNUKFdJVEhfT1ZFUldSSVRFKQorQUNfU1VCU1QoVElDU19MSVNUKQorQUNfU1VCU1QoVElORk9fTElTVCkKK0FDX1NVQlNUKFNITElCX0xJU1QpCisKKyMgdXNlZCB0byBzZXBhcmF0ZSB0YWNrIG91dCBvZiB0aGUgdHJlZQorTkNVUlNFU19UUkVFPQorQUNfU1VCU1QoTkNVUlNFU19UUkVFKQorCisjIyMgcHJlZGVmaW5lZCBzdHVmZiBmb3IgdGhlIHRlc3QgcHJvZ3JhbXMKK0FDX0RFRklORShIQVZFX1NMS19DT0xPUikKKworIyMjIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyBmb3Igd2hpY2ggd2UnbGwgY3VzdG9taXplIG1ha2VmaWxlcworIyMjIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbXBpbGUtcnVsZXMuCisKK0NGX1NSQ19NT0RVTEVTKCRtb2R1bGVzX3RvX2J1aWxkKQorCitpZiB0ZXN0ICIkY2Zfd2l0aF9hZGEiICE9ICJubyIgJiYgdGVzdCAiJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiAhPSAibm8iOyB0aGVuCisgICBTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyBBZGE5NS9nZW4vYWRhY3Vyc2VzLWNvbmZpZyIKK2ZpCisKK0NGX0RJUlNfVE9fTUFLRQorCitBQ19ERUZJTkVfVU5RVU9URUQoTkNVUlNFU19QQVRIU0VQLCckUEFUSFNFUCcpCisKK0FDX0RFRklORV9VTlFVT1RFRChOQ1VSU0VTX1ZFUlNJT05fU1RSSU5HLCAiJHtOQ1VSU0VTX01BSk9SfS4ke05DVVJTRVNfTUlOT1J9LiR7TkNVUlNFU19QQVRDSH0iKQorCisjIyMgTm93IHRoYXQgd2UncmUgZG9uZSBydW5uaW5nIHRlc3RzLCBhZGQgdGhlIGNvbXBpbGVyLXdhcm5pbmdzLCBpZiBhbnkKK0NGX0FERF9DRkxBR1MoJEVYVFJBX0NGTEFHUykKKworIyMjIElmIHdlJ3JlIGJ1aWxkaW5nIHdpdGggcnBhdGgsIHRyeSB0byBsaW5rIG5vbi1zdGFuZGFyZCBsaWJzIHRoYXQgd2F5IHRvby4KK2lmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiOyB0aGVuCisgIENGX1JQQVRIX0hBQ0sKK2ZpCisKKyMjIyBEZWZpbmUgc3Vic3RpdHV0aW9ucyBmb3IgaGVhZGVyIGZpbGVzIHRvIGF2b2lkIG5hbWUtcG9sbHV0aW9uCitDRl9TVUJTVF9JRihbIiRjZl9jdl9oYXZlX3RjZ2V0YXR0ciIgPSB5ZXNdLCBIQVZFX1RDR0VUQVRUUiwgMSwgMCkKK0NGX1NVQlNUX0lGKFsiJGFjX2N2X2hlYWRlcl90ZXJtaW9faCIgPSB5ZXNdLCBIQVZFX1RFUk1JT19ILCAxLCAwKQorQ0ZfU1VCU1RfSUYoWyIkYWNfY3ZfaGVhZGVyX3Rlcm1pb3NfaCIgPSB5ZXNdLCBIQVZFX1RFUk1JT1NfSCwgMSwgMCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3QgIiR1c2VfZGF0YWJhc2UiID0geWVzICYmIFNVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIG1pc2MvcnVuX3RpYy5zaDptaXNjL3J1bl90aWMuaW4iCitTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyBtaXNjL25jdXJzZXMtY29uZmlnOm1pc2MvbmN1cnNlcy1jb25maWcuaW4iCitBQ19PVVRQVVQoIFwKKwlpbmNsdWRlL01LdGVybS5oLmF3ayBcCisJaW5jbHVkZS9jdXJzZXMuaGVhZDppbmNsdWRlL2N1cnNlcy5oLmluIFwKKwlpbmNsdWRlL3Rlcm1jYXAuaCBcCisJaW5jbHVkZS91bmN0cmwuaCBcCisJJFNVQl9NQUtFRklMRVMgXAorCU1ha2VmaWxlLFsKK0NGX1BSR19SVUxFUyhbJHNyY2Rpci90ZXN0L21rLXRlc3QuYXdrIEVDSE9fTElOSz0iJEVDSE9fTElOSyJdLCB0ZXN0KQorQ0ZfTElCX1JVTEVTKCRTUkNfU1VCRElSUykKK10sWworIyMjIFNwZWNpYWwgaW5pdGlhbGl6YXRpb24gY29tbWFuZHMsIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorIyMjIGNvbmZpZ3VyYXRpb24tcnVuIGludG8gY29uZmlnLnN0YXR1cworCitBV0s9IiRBV0siCitERlRfQVJHX1NVRkZJWD0iJERGVF9BUkdfU1VGRklYIgorREZUX0xXUl9NT0RFTD0iJERGVF9MV1JfTU9ERUwiCitFQ0hPX0xJTks9IiRFQ0hPX0xJTksiCitMRENPTkZJRz0iJExEQ09ORklHIgorTElCX05BTUU9IiRMSUJfTkFNRSIKK0xJQl9TVUJTRVRTPSIkTElCX1NVQlNFVFMiCitMSUJfU1VGRklYPSIkTElCX1NVRkZJWCIKK0xJQl9UUkFDSU5HPSIkTElCX1RSQUNJTkciCitNQUtFX1RFUk1JTkZPPSIkTUFLRV9URVJNSU5GTyIKK05DVVJTRVNfTUFKT1I9IiROQ1VSU0VTX01BSk9SIgorTkNVUlNFU19NSU5PUj0iJE5DVVJTRVNfTUlOT1IiCitOQ1VSU0VTX09TUEVFRD0iJE5DVVJTRVNfT1NQRUVEIgorTkNVUlNFU19QQVRDSD0iJE5DVVJTRVNfUEFUQ0giCitTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIgorVEVSTUlORk89IiRURVJNSU5GTyIKK1RJTkZPX0FSR19TVUZGSVg9IiRUSU5GT19BUkdfU1VGRklYIgorVElORk9fTElCX1NVRkZJWD0iJFRJTkZPX0xJQl9TVUZGSVgiCitUSU5GT19OQU1FPSIkVElORk9fTkFNRSIKK1RJTkZPX1NVRkZJWD0iJFRJTkZPX1NVRkZJWCIKK1RJQ1NfQVJHX1NVRkZJWD0iJFRJQ1NfQVJHX1NVRkZJWCIKK1RJQ1NfTElCX1NVRkZJWD0iJFRJQ1NfTElCX1NVRkZJWCIKK1RJQ1NfTkFNRT0iJFRJQ1NfTkFNRSIKK1dJVEhfQ1VSU0VTX0g9IiR3aXRoX2N1cnNlc19oIgorV0lUSF9FQ0hPPSIkd2l0aF9lY2hvIgorV0lUSF9PVkVSV1JJVEU9IiR3aXRoX292ZXJ3cml0ZSIKK2NmX0xJU1RfTU9ERUxTPSIkY2ZfbGlzdF9tb2RlbHMiCitjZl9jdl9hYmlfdmVyc2lvbj0iJGNmX2N2X2FiaV92ZXJzaW9uIgorY2ZfY3ZfZG9fcmVsaW5rPSIkY2ZfY3ZfZG9fcmVsaW5rIgorY2ZfY3ZfZG9fc3ltbGlua3M9IiRjZl9jdl9kb19zeW1saW5rcyIKK2NmX2N2X2VuYWJsZV9scDY0PSIkY2ZfY3ZfZW5hYmxlX2xwNjQiCitjZl9jdl9lbmFibGVfb3BhcXVlPSIkY2ZfY3ZfZW5hYmxlX29wYXF1ZSIKK2NmX2N2X3Byb2dfQ0NfY19vPSRjZl9jdl9wcm9nX0NDX2NfbworY2ZfY3ZfcHJvZ19DWFhfY19vPSRjZl9jdl9wcm9nX0NYWF9jX28KK2NmX2N2X3JlbF92ZXJzaW9uPSIkY2ZfY3ZfcmVsX3ZlcnNpb24iCitjZl9jdl9ybV9zb19sb2NzPSIkY2ZfY3Zfcm1fc29fbG9jcyIKK2NmX2N2X3NoYXJlZF9zb25hbWU9JyRjZl9jdl9zaGFyZWRfc29uYW1lJworY2ZfY3Zfc2hsaWJfdmVyc2lvbj0iJGNmX2N2X3NobGliX3ZlcnNpb24iCitjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PSIkY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCIKK2NmX2N2X3N5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCitjZl93aXRoX2N4eF9iaW5kaW5nPSIkY2Zfd2l0aF9jeHhfYmluZGluZyIKK2hvc3Q9IiRob3N0IgordGFyZ2V0PSIkdGFyZ2V0IgorCitdLGNhdClkbmwKKyR7TUFLRS1tYWtlfSBwcmVpbnN0YWxsCmRpZmYgLS1naXQgYS9jb252ZXJ0X2NvbmZpZ3VyZS5wbCBiL2NvbnZlcnRfY29uZmlndXJlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMWJkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0X2NvbmZpZ3VyZS5wbApAQCAtMCwwICsxLDExOSBAQAorZXh0cHJvYyBwZXJsIC1TIC13CisKKyMgJElkOiBjb252ZXJ0X2NvbmZpZ3VyZS5wbCx2IDEuMyAyMDA2LzA0LzIyIDIzOjA0OjA2IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSBjb252ZXJ0ZWQgc2NyaXB0IGlzIHdyaXR0ZW4gdG8gc3Rkb3V0LCBzbyBydW4gdGhpcyBzY3JpcHQgYXMKKyMgICAgY29udmVydF9jb25maWd1cmUgY29uZmlndXJlID4gY29uZmlndXJlLmNtZAorIworIyBXaGVuIHRoZSBjb252ZXJ0ZWQgc2NyaXB0IHJ1bnMsIGl0IGV4cGVjdHMgdGhhdCAvdG1wIGRpciBpcworIyBhdmFpbGFibGUgKHNvIHdlIGNyZWF0ZSBpdCkuCisjCisjIHJ1biB0aGUgcmVzdWx0IGxpa2UgdGhpczoKKyMgICAgLlxjb25maWd1cmUKKworIyBTb21lIGZyZXF1ZW50IG1hbnVhbCBpbnRlcnZlbnRpb246CisjIGEpIFNvbWUgbWFrZWZpbGVzIGhhcmR3aXJlIFNIRUxMID0gL2Jpbi9zaCA9PT4gY2hhbmdlIHRvOiBzaAorIyBiKSBTb21lIG1ha2VmaWxlcyByZWNvZ25pemUgdGhhdCBleGUgZmlsZXMgdGVybWluYXRlIG9uIC5leGUKKyMgICAgWW91IG5lZWQgdG8gZ2l2ZSB0aGlzIHNjcmlwdCAtbm8temV4ZSBvcHRpb24uLi4KKworc2hpZnQsICRub196ZXhlID0gMSBpZiBAQVJHViBhbmQgJEFSR1ZbMF0gZXEgJy1uby16ZXhlJzsKKworbWtkaXIgJy90bXAnLCAwNzc3IHVubGVzcyAtZCAnL3RtcCc7CisKK3ByaW50IDw8RU9GOworZXh0cHJvYyBzaAorCitFT0YKKworcHJpbnQgPDxFT0YgdW5sZXNzICRub196ZXhlOworIyBNYWtlIHNlbnNpYmxlIGRlZmF1bHRzOgorQ0M9ImdjYyAtWmV4ZSAtWm10IgorZXhwb3J0IENDCitDWFg9ImdjYyAtWmV4ZSAtWm10IgorZXhwb3J0IENYWAorI0dDQ09QVD0iJEdDQ09QVCAtWmV4ZSIKKyNleHBvcnQgR0NDT1BUCitFT0YKKworcHJpbnQgPDxFT0Y7CitDT05GSUdfU0hFTEw9c2gKK2V4cG9ydCBDT05GSUdfU0hFTEwKKworIyBPcHRpbWl6YXRpb24gKEdOVSBtYWtlIDMuNzQgY2Fubm90IGJlIGxvYWRlZCA6LSgpOgorZW14bG9hZCAtbSAzMCBzaC5leGUgbHMuZXhlIHRyLmV4ZSBpZC5leGUgc2VkLmV4ZSAjIG1ha2UuZXhlIAorZW14bG9hZCAtbSAzMCBncmVwLmV4ZSBlZ3JlcC5leGUgZmdyZXAuZXhlIGNhdC5leGUgcm0uZXhlIG12LmV4ZSBjcC5leGUKK2VteGxvYWQgLW0gMzAgdW5pcS5leGUgYmFzZW5hbWUuZXhlIHNvcnQuZXhlIGF3ay5leGUgZWNoby5leGUKKworCitFT0YKKworJGNoZWNraW5nX3BhdGggPSAwOworCit3aGlsZSAoPD4pIHsKKyAgaWYgKC9mb3JccysoXHcrKVxzK2luXHMqXCQoUEFUSHxhY19kdW1teSlccyo7LykgeworICAgICRjaGVja2luZ19wYXRoID0gMTsKKyAgICAkdmFybmFtZSA9ICQxOworICAgICRzdWJzdD0gPDxFT1MKKyR2YXJuYW1lPSJgZWNobyAtRSBcXCJcJCR2YXJuYW1lXFwiIHwgdHIgXFxcXFxcXFxcXFxcXFxcXCAvIGAiCitFT1MKKyAgfSAKKyAgaWYgKC9pZlxzK3Rlc3RccystelxzK1wiXCRJTlNUQUxMXCIvKSB7CisgICAgJGNoZWNraW5nX2luc3RhbGwgPSAxOworICB9IAorICAkY2hlY2tpbmdfaW5zdGFsbCA9ICRjaGVja2luZ19wYXRoID0gMCBpZiAvXlxzKmRvbmVccyokLzsKKyAgIyBXZSB3YW50IHRvIGNyZWF0ZSBhbiBleHRyYSBsaW5lIGxpa2UgdGhpcyBvbmU6CisjICAgYWNfZGlyPSJgZWNobyAtRSBcIiRhY19kaXJcIiB8IHRyIFxcXFxcXFxcIC8gYCIKKyAgc3teKChccyopaWZccyt0ZXN0KVxzKi1mXHMqKFwkJHZhcm5hbWUvXFMrKVxzKjt9CisgICB7JDIkc3Vic3QkMSAtZiAkMyAtbyAtZiAkMy5leGUgO30KKyAgICAgIGlmICRjaGVja2luZ19wYXRoOwkjIENoZWNraW5nIGZvciBleGVjdXRhYmxlcworICAjIGNoYW5nZSB8L3Vzci9zYmluLyp8IHRvIHwvdXNyL3NiaW4vKnw/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qfAorICAjIGluIHRoZSBsaXN0IG9mIHRoaW5ncyB0byBza2lwICh3aXRoIGJvdGggY2FzZXMpCisgIHN7XFF8L3Vzci9zYmluLyp8fQorICAge3wvdXNyL3NiaW4vKnw/OltcXFxcL11vczJbXFxcXC9daW5zdGFsbFtcXFxcL10qfD86W1xcXFwvXU9TMltcXFxcL11JTlNUQUxMW1xcXFwvXSp8fQorICAgICAgaWYgJGNoZWNraW5nX2luc3RhbGw7CSMgRG8gbm90IGFjY2VwdCBkOi9vczIvaW5zdGFsbC9pbnN0YWxsLmV4ZQorICBzL14oaG9zdHxidWlsZCk9Tk9ORSQvJDE9eDg2LWVteC1vczIvOwkjIE1ha2UgZGVmYXVsdCBob3N0L2J1aWxkCisgIHMvIlwkXHtJRlN9OiIkLyJcJHtJRlN9OyIvOwkjIEZpeCBJRlMgbGluZQorICBzL1xiSUZTPVwiOlwiJC9JRlM9IjsiLzsJIyBGaXggYW5vdGhlciBJRlMgbGluZQorICBzL1xidGVzdFxzKy1zXHMrY29uZnRlc3RcYi90ZXN0IC1mIGNvbmZ0ZXN0L2c7ICMgRml4IGV4ZSB0ZXN0CisgICMgVGhpcyBvbmUgaXMgbmVlZGVkIGZvciBjdXJzZXM6CisgIHMvXlxzKmhvc3Q9YC4qXCRhY19jb25maWdfc3ViIFwkaG9zdF9hbGlhc2AvJCZcbmlmIHRlc3QgLXogIlwkaG9zdCI7IHRoZW4gaG9zdD1cJGhvc3RfYWxpYXM7IGZpLzsKKyAgcywvYmluL3NoKD8hWy9cd10pLHNoLGc7CisgIHMsXihccyovdXNyL3NiaW4vc2VuZG1haWxccyopXFwkLCQxICJgd2hlbmNlIHNlbmRtYWlsIHwgdHIgJ1xcXFxcXFxcJyAvIGAiIFxcLDsKKyAgcHJpbnQ7Cit9CisKK19fRU5EX18KKworQ2hhbmdlczoJOTgvMTEgOiBzdXBwb3J0IGNoZWNrIGZvciBleGVjdXRhYmxlcyBpbiBuY3Vyc2VzLgorCQk5OS8yICA6IHN1cHBvcnQgSU5TVEFMTCwgCisJCQluZXcgSUZTPSc6JyBzdHlsZQorCQk5OS8xMSA6IGZpbmQgc2VuZG1haWwKKwkJMDAvMDEgOiBleHBvcnQgQ09ORklHX1NIRUxMCisJCTAwLzEwIDogbmV3IHN5bnRheCBmb3IgaG9zdD1gLi4uYCBsaW5lCmRpZmYgLS1naXQgYS9kaXN0Lm1rIGIvZGlzdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTFkNzczCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC5tawpAQCAtMCwwICsxLDE2NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IGRpc3QubWssdiAxLjY3MSAyMDA4LzExLzAyIDAwOjU4OjM4IHRvbSBFeHAgJAorIyBNYWtlZmlsZSBmb3IgY3JlYXRpbmcgbmN1cnNlcyBkaXN0cmlidXRpb25zLgorIworIyBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgdXNlZCBkaXJlY3RseSBhcyBhIG1ha2VmaWxlIGJ5IGRldmVsb3BlcnMsIGJ1dAorIyBjb25maWd1cmUgbWluZXMgdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgb3V0IG9mIGhlcmUuICBUbyBtb3ZlCisjIHRvIGEgbmV3IHZlcnNpb24gbnVtYmVyLCBqdXN0IGVkaXQgdGhpcyBmaWxlIGFuZCBydW4gY29uZmlndXJlLgorIworU0hFTEwgPSAvYmluL3NoCisKKyMgVGhlc2UgZGVmaW5lIHRoZSBtYWpvci9taW5vci9wYXRjaCB2ZXJzaW9ucyBvZiBuY3Vyc2VzLgorTkNVUlNFU19NQUpPUiA9IDUKK05DVVJTRVNfTUlOT1IgPSA3CitOQ1VSU0VTX1BBVENIID0gMjAwODExMDIKKworIyBXZSBkb24ndCBhcHBlbmQgdGhlIHBhdGNoIHRvIHRoZSB2ZXJzaW9uLCBzaW5jZSB0aGlzIG9ubHkgYXBwbGllcyB0byByZWxlYXNlcworVkVSU0lPTiA9ICQoTkNVUlNFU19NQUpPUikuJChOQ1VSU0VTX01JTk9SKQorCisjIFRoZSBtb3N0IHJlY2VudCBodG1sIGZpbGVzIHdlcmUgZ2VuZXJhdGVkIHdpdGggbHlueCAyLjguNiwgdXNpbmcgbmN1cnNlcworIyBjb25maWd1cmVkIHdpdGgKKyMJLS13aXRob3V0LW1hbnBhZ2UtcmVuYW1lcworIyBvbiBEZWJpYW4vdGVzdGluZy4gIFRoZSAtc2Nyb2xsYmFyIGFuZCAtd2lkdGggb3B0aW9ucyBhcmUgdXNlZCB0byBtYWtlIGx5bngKKyMgdXNlIDc5IGNvbHVtbnMgYXMgaXQgZGlkIGluIDIuOC41IGFuZCBiZWZvcmUuCitEVU1QCT0gbHlueCAtZHVtcCAtc2Nyb2xsYmFyPTAgLXdpZHRoPTc5CitEVU1QMgk9ICQoRFVNUCkgLW5vbGlzdAorCitHTkFUSFRNTD0gYHR5cGUgLXAgZ25hdGh0bWwgfHwgdHlwZSAtcCBnbmF0aHRtbC5wbGAKKworIyBtYW4yaHRtbCAzLjAuMSBpcyBhIFBlcmwgc2NyaXB0IHdoaWNoIGFzc3VtZXMgdGhhdCBwYWdlcyBhcmUgZml4ZWQgc2l6ZS4KKyMgTm90IGFsbCBtYW4gcHJvZ3JhbXMgYWdyZWUgd2l0aCB0aGlzIGFzc3VtcHRpb247IHNvbWUgdXNlIGhhbGYtc3BhY2luZywgd2hpY2gKKyMgaGFzIHRoZSBlZmZlY3Qgb2YgbGVuZ3RoZW5pbmcgdGhlIHRleHQgcG9ydGlvbiBvZiB0aGUgcGFnZSAtLSBzbyBtYW4yaHRtbAorIyB3b3VsZCByZW1vdmUgc29tZSB0ZXh0LiAgVGhlIG1hbiBwcm9ncmFtIG9uIFJlZGhhdCA2LjEgYXBwZWFycyB0byB3b3JrIHdpdGgKKyMgbWFuMmh0bWwgaWYgd2Ugc2V0IHRoZSB0b3AvYm90dG9tIG1hcmdpbnMgdG8gNiAodGhlIGRlZmF1bHQgaXMgNykuICBOZXdlcgorIyB2ZXJzaW9ucyBvZiAnbWFuJyBvbiBMaW51eCBsZWF2ZSBubyBtYXJnaW4gKGFuZCBtYWtlIGl0IGhhcmRlciB0byBzeW5jIHdpdGgKKyMgcGFnZXMpLgorTUFOMkhUTUw9IG1hbjJodG1sIC1ib3RtPTAgLXRvcG09MCAtY2dpdXJsICckJHRpdGxlLiQkc2VjdGlvbiQkc3Vic2VjdGlvbi5odG1sJworCitBTEwJPSBBTk5PVU5DRSBkb2MvaHRtbC9hbm5vdW5jZS5odG1sIGRvYy9uY3Vyc2VzLWludHJvLmRvYyBkb2MvaGFja2d1aWRlLmRvYyBtYW5odG1sIGFkYWh0bWwKKworYWxsIDoJJChBTEwpCisKK2Rpc3Q6CSQoQUxMKQorCShjZCAuLjsgIHRhciBjdmYgbmN1cnNlcy0kKFZFUlNJT04pLnRhciBgc2VkIDxuY3Vyc2VzLSQoVkVSU0lPTikvTUFOSUZFU1QgJ3MvXi4vbmN1cnNlcy0kKFZFUlNJT04pLydgOyAgZ3ppcCBuY3Vyc2VzLSQoVkVSU0lPTikudGFyKQorCitkaXN0Y2xlYW46CisJcm0gLWYgJChBTEwpIHN1YnN0LnRtcCBzdWJzdC5zZWQKKworIyBEb24ndCBtZXNzIHdpdGggYW5ub3VuY2UuaHRtbC5pbiB1bmxlc3MgeW91IGhhdmUgbHlueCBhdmFpbGFibGUhCitkb2MvaHRtbC9hbm5vdW5jZS5odG1sOiBhbm5vdW5jZS5odG1sLmluCisJc2VkICdzLEBWRVJTSU9OQCwkKFZFUlNJT04pLCcgPGFubm91bmNlLmh0bWwuaW4gPiAkQAorCitBTk5PVU5DRSA6IGRvYy9odG1sL2Fubm91bmNlLmh0bWwKKwkkKERVTVApIGRvYy9odG1sL2Fubm91bmNlLmh0bWwgPiAkQAorCitkb2MvbmN1cnNlcy1pbnRyby5kb2M6IGRvYy9odG1sL25jdXJzZXMtaW50cm8uaHRtbAorCSQoRFVNUDIpIGRvYy9odG1sL25jdXJzZXMtaW50cm8uaHRtbCA+ICRACitkb2MvaGFja2d1aWRlLmRvYzogZG9jL2h0bWwvaGFja2d1aWRlLmh0bWwKKwkkKERVTVAyKSBkb2MvaHRtbC9oYWNrZ3VpZGUuaHRtbCA+ICRACisKKyMgVGhpcyBpcyB0aGUgb3JpZ2luYWwgY29tbWFuZDoKKyMJTUFOUFJPRwk9IHRibCB8IG5yb2ZmIC1tYW4KKyMKKyMgVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGdyb2ZmIDEuMTguMSBvbiBEZWJpYW4uICBBdCBzb21lIHBvaW50IGdyb2ZmJ3MKKyMgbWFpbnRhaW5lciBjaGFuZ2VkIHRoZSBsaW5lLWxlbmd0aCAod2UgZG8gbm90IHdhbnQvbmVlZCB0aGF0IGhlcmUpLgorIworIyBUaGUgZGlzdHJpYnV0ZWQgaHRtbCBmaWxlcyBhcmUgZm9ybWF0dGVkIHVzaW5nCisjCWNvbmZpZ3VyZSAtLXdpdGhvdXQtbWFucGFnZS1yZW5hbWVzCisjCisjIFRoZSBlZGl0X21hbi5zZWQgc2NyaXB0IGlzIGJ1aWx0IGFzIGEgc2lkZS1lZmZlY3Qgb2YgaW5zdGFsbGluZyB0aGUgbWFucGFnZXMuCisjIElmIHRoYXQgY29uZmxpY3RzIHdpdGggdGhlIC0td2l0aG91dC1tYW5wYWdlLXJlbmFtZXMsIHlvdSBjYW4gaW5zdGFsbCB0aG9zZQorIyBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiB1c2luZyB0aGUgLS13aXRoLWluc3RhbGwtcHJlZml4IG9wdGlvbiBvZiB0aGUKKyMgY29uZmlndXJlIHNjcmlwdC4KK01BTlBST0cJPSB0YmwgfCBucm9mZiAtbWFuZG9jIC1yTEw9NjVuIC1yTFQ9NzFuIC1UYXNjaWkKKworbWFuaHRtbDoKKwlAcm0gLWYgZG9jL2h0bWwvbWFuLyouaHRtbAorCUBta2RpciAtcCBkb2MvaHRtbC9tYW4KKwlAcm0gLWYgc3Vic3QudG1wIDsKKwlAZm9yIGYgaW4gbWFuLyouWzAtOV0qOyBkbyBcCisJICAgbT1gYmFzZW5hbWUgJCRmYCA7XAorCSAgIHg9YGVjaG8gJCRtIHwgYXdrIC1GLiAne3ByaW50ICQkMjt9J2AgO1wKKwkgICB4dT1gZWNobyAkJHggfCBkZCBjb252PXVjYXNlIDI+L2Rldi9udWxsYCA7XAorCSAgIGlmIFsgIiQke3h9IiAhPSAiJCR7eHV9IiBdOyB0aGVuIFwKKwkgICAgIGVjaG8gInMvJCR7eHV9LyQke3h9L2ciID4+IHN1YnN0LnRtcCA7XAorCSAgIGZpIDtcCisJZG9uZQorCSMgY2hhbmdlIHNvbWUgdGhpbmdzIHRvIG1ha2Ugd2VibGludCBoYXBweToKKwlAY2F0IG1hbl9hbGlhcy5zZWQgICAgICAgICAgID4+IHN1YnN0LnRtcAorCUBlY2hvICdzLzxCPi88U1RST05HPi9nJyAgICAgPj4gc3Vic3QudG1wCisJQGVjaG8gJ3MvPFwvQj4vPFwvU1RST05HPi9nJyA+PiBzdWJzdC50bXAKKwlAZWNobyAncy88ST4vPEVNPi9nJyAgICAgICAgID4+IHN1YnN0LnRtcAorCUBlY2hvICdzLzxcL0k+LzxcL0VNPi9nJyAgICAgPj4gc3Vic3QudG1wCisJQG1pc2MvY3NvcnQgPCBzdWJzdC50bXAgfCB1bmlxID4gc3Vic3Quc2VkCisJQGVjaG8gJy88XC9USVRMRT4vYVwnID4+IHN1YnN0LnNlZAorCUBlY2hvICc8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+XCcgPj4gc3Vic3Quc2VkCisJQGVjaG8gJzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dFwvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4nID4+IHN1YnN0LnNlZAorCUBybSAtZiBzdWJzdC50bXAKKwlAZm9yIGYgaW4gbWFuLyouWzAtOV0qIDsgZG8gXAorCSAgIG09YGJhc2VuYW1lICQkZmAgO1wKKwkgICBUPWBlZ3JlcCAnXi5USCcgJCRmfHNlZCAtZSAncy9eLlRIIC8vJyAtZSBzJy8iLy9nJyAtZSAncy9bIAldXCskJC8vJ2AgOyBcCisJICAgZz0kJHttfS5odG1sIDtcCisJICAgaWYgWyAtZiBkb2MvaHRtbC8kJGcgXTsgdGhlbiBjaG1vZCArdyBkb2MvaHRtbC8kJGc7IGZpO1wKKwkgICBlY2hvICJDb252ZXJ0aW5nICQkbSB0byBIVE1MIiA7XAorCSAgIGVjaG8gJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+JyA+IGRvYy9odG1sL21hbi8kJGcgO1wKKwkgICBlY2hvICc8IS0tICcgPj4gZG9jL2h0bWwvbWFuLyQkZyA7XAorCSAgIGVncmVwICdeLlxcIlteI10nICQkZiB8IFwKKwkgICAJc2VkCS1lICdzL1wkJC9AL2cnIFwKKwkJCS1lICdzL14uLi4vICAqLycgXAorCQkJLWUgJ3MvPC9cJmx0Oy9nJyBcCisJCQktZSAncy8+L1wmZ3Q7L2cnIFwKKwkgICA+PiBkb2MvaHRtbC9tYW4vJCRnIDtcCisJICAgZWNobyAnLS0+JyA+PiBkb2MvaHRtbC9tYW4vJCRnIDtcCisJICAgLi9lZGl0X21hbi5zaCBub3JtYWwgZWRpdGluZyAvdXNyL21hbiBtYW4gJCRmIHwgJChNQU5QUk9HKSB8IHRyICdcMjU1JyAnLScgfCAkKE1BTjJIVE1MKSAtdGl0bGUgIiQkVCIgfCBcCisJICAgc2VkIC1mIHN1YnN0LnNlZCB8XAorCSAgIHNlZCAtZSAncy8iY3Vyc2VzLjN4Lmh0bWwiLyJuY3Vyc2VzLjN4Lmh0bWwiL2cnIFwKKwkgICA+PiBkb2MvaHRtbC9tYW4vJCRnIDtcCisJZG9uZQorCUBybSAtZiBzdWJzdC5zZWQKKworIworIyBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgdGFyZ2V0IGNhbiBvbmx5IGJlIHByb3Blcmx5IGJ1aWx0IGlmIHRoZSBidWlsZCBvZiB0aGUKKyMgQWRhOTUgc3ViZGlyIGhhcyBiZWVuIGRvbmUuICBUaGUgcmVhc29uIGlzLCB0aGF0IHRoZSBnbmF0aHRtbCB0b29sIHVzZXMgdGhlCisjIC5hbGkgZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBBZGE5NSBjb21waWxlciBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuICBUaGVzZQorIyAuYWxpIGZpbGVzIGNvbnRhaW4gY3Jvc3MgcmVmZXJlbmNpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgZ25hdGh0bWwuCithZGFodG1sOgorCWlmIFsgISAteiAiJChHTkFUSFRNTCkiIF07IHRoZW4gXAorCSAgKGNkIC4vQWRhOTUvZ2VuIDsgbWFrZSBodG1sKSA7XAorCWZpCisKKyMgVGhpcyBvbmx5IHdvcmtzIG9uIGEgY2xlYW4gc291cmNlIHRyZWUsIG9mIGNvdXJzZS4KK01BTklGRVNUOgorCS1ybSAtZiAkQAorCXRvdWNoICRACisJZmluZCAuIC10eXBlIGYgLXByaW50IHxtaXNjL2Nzb3J0IHwgZmdyZXAgLXYgLmxzbSB8ZmdyZXAgLXYgLnNwZWMgPiRACisKK1RBR1M6CisJZXRhZ3MgKi8qLltjaF0KKworIyBNYWtlZmlsZSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2RvYy9oYWNrZ3VpZGUuZG9jIGIvZG9jL2hhY2tndWlkZS5kb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwYmE1YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9oYWNrZ3VpZGUuZG9jCkBAIC0wLDAgKzEsNjgyIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgIEEgSGFja2VyJ3MgR3VpZGUgdG8gTkNVUlNFUworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRzCisKKyAgICAgKiBBYnN0cmFjdAorICAgICAqIE9iamVjdGl2ZSBvZiB0aGUgUGFja2FnZQorICAgICAgICAgICsgV2h5IFN5c3RlbSBWIEN1cnNlcz8KKyAgICAgICAgICArIEhvdyB0byBEZXNpZ24gRXh0ZW5zaW9ucworICAgICAqIFBvcnRhYmlsaXR5IGFuZCBDb25maWd1cmF0aW9uCisgICAgICogRG9jdW1lbnRhdGlvbiBDb252ZW50aW9ucworICAgICAqIEhvdyB0byBSZXBvcnQgQnVncworICAgICAqIEEgVG91ciBvZiB0aGUgTmN1cnNlcyBMaWJyYXJ5CisgICAgICAgICAgKyBMaWJyYXJ5IE92ZXJ2aWV3CisgICAgICAgICAgKyBUaGUgRW5naW5lIFJvb20KKyAgICAgICAgICArIEtleWJvYXJkIElucHV0CisgICAgICAgICAgKyBNb3VzZSBFdmVudHMKKyAgICAgICAgICArIE91dHB1dCBhbmQgU2NyZWVuIFVwZGF0aW5nCisgICAgICogVGhlIEZvcm1zIGFuZCBNZW51IExpYnJhcmllcworICAgICAqIEEgVG91ciBvZiB0aGUgVGVybWluZm8gQ29tcGlsZXIKKyAgICAgICAgICArIFRyYW5zbGF0aW9uIG9mIE5vbi11c2UgQ2FwYWJpbGl0aWVzCisgICAgICAgICAgKyBVc2UgQ2FwYWJpbGl0eSBSZXNvbHV0aW9uCisgICAgICAgICAgKyBTb3VyY2UtRm9ybSBUcmFuc2xhdGlvbgorICAgICAqIE90aGVyIFV0aWxpdGllcworICAgICAqIFN0eWxlIFRpcHMgZm9yIERldmVsb3BlcnMKKyAgICAgKiBQb3J0aW5nIEhpbnRzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3QKKworICAgVGhpcyBkb2N1bWVudCBpcyBhIGhhY2tlcidzIHRvdXIgb2YgdGhlIG5jdXJzZXMgbGlicmFyeSBhbmQgdXRpbGl0aWVzLgorICAgSXQgIGRpc2N1c3NlcyAgZGVzaWduICBwaGlsb3NvcGh5LCAgaW1wbGVtZW50YXRpb24gIG1ldGhvZHMsICBhbmQgIHRoZQorICAgY29udmVudGlvbnMgIHVzZWQgIGZvciAgY29kaW5nICBhbmQgIGRvY3VtZW50YXRpb24uICBJdCBpcyByZWNvbW1lbmRlZAorICAgcmVhZGluZyAgZm9yICBhbnlvbmUgIHdobyAgaXMgIGludGVyZXN0ZWQgIGluICBwb3J0aW5nLCAgZXh0ZW5kaW5nICBvcgorICAgaW1wcm92aW5nIHRoZSBwYWNrYWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RpdmUgb2YgdGhlIFBhY2thZ2UKKworICAgVGhlIG9iamVjdGl2ZSBvZiB0aGUgbmN1cnNlcyBwYWNrYWdlIGlzIHRvIHByb3ZpZGUgYSBmcmVlIHNvZnR3YXJlIEFQSQorICAgZm9yIGNoYXJhY3Rlci1jZWxsIHRlcm1pbmFscyBhbmQgdGVybWluYWwgZW11bGF0b3JzIHdpdGggdGhlIGZvbGxvd2luZworICAgY2hhcmFjdGVyaXN0aWNzOgorICAgICAqIFNvdXJjZS1jb21wYXRpYmxlICAgIHdpdGggICAgaGlzdG9yaWNhbCAgIGN1cnNlcyAgIGltcGxlbWVudGF0aW9ucworICAgICAgIChpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIEJTRCBjdXJzZXMgYW5kIFN5c3RlbSBWIGN1cnNlcy4KKyAgICAgKiBDb25mb3JtYW50ICB3aXRoIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGlzc3VlZCBhcyBwYXJ0IG9mIFhQRzQgYnkKKyAgICAgICBYL09wZW4uCisgICAgICogSGlnaC1xdWFsaXR5ICAtLSAgc3RhYmxlIGFuZCByZWxpYWJsZSBjb2RlLCB3aWRlIHBvcnRhYmlsaXR5LCBnb29kCisgICAgICAgcGFja2FnaW5nLCBzdXBlcmlvciBkb2N1bWVudGF0aW9uLgorICAgICAqIEZlYXR1cmVmdWwgIC0tICBzaG91bGQgIGVsaW1pbmF0ZSAgYXMgIG11Y2ggIG9mICB0aGUgZHJ1ZGdlcnkgb2YgQworICAgICAgIGludGVyZmFjZSBwcm9ncmFtbWluZyBhcyBwb3NzaWJsZSwgZnJlZWluZyBwcm9ncmFtbWVycyB0byB0aGluayBhdAorICAgICAgIGEgaGlnaGVyIGxldmVsIG9mIGRlc2lnbi4KKworICAgVGhlc2UgIG9iamVjdGl2ZXMgIGFyZSAgaW4gIHByaW9yaXR5ICBvcmRlci4gIFNvLCAgZm9yIGV4YW1wbGUsIHNvdXJjZQorICAgY29tcGF0aWJpbGl0eSAgd2l0aCAgb2xkZXIgIHZlcnNpb24gIG11c3QgIHRydW1wICBmZWF0dXJlZnVsbmVzcyAtLSB3ZQorICAgY2Fubm90ICBhZGQgIGZlYXR1cmVzICBpZiAgaXQgIG1lYW5zICBicmVha2luZyAgdGhlIHBvcnRpb24gb2YgdGhlIEFQSQorICAgY29ycmVzcG9uZGluZyB0byBoaXN0b3JpY2FsIGN1cnNlcyB2ZXJzaW9ucy4KKworV2h5IFN5c3RlbSBWIEN1cnNlcz8KKworICAgV2UgIHVzZWQgU3lzdGVtIFYgY3Vyc2VzIGFzIGEgbW9kZWwsIHJldmVyc2UtZW5naW5lZXJpbmcgdGhlaXIgQVBJLCBpbgorICAgb3JkZXIgdG8gZnVsZmlsbCB0aGUgZmlyc3QgdHdvIG9iamVjdGl2ZXMuCisKKyAgIFN5c3RlbSAgViAgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBjYW4gc3VwcG9ydCBCU0QgY3Vyc2VzIHByb2dyYW1zIHdpdGgKKyAgIGp1c3QgYSByZWNvbXBpbGF0aW9uLCBzbyBieSBjYXB0dXJpbmcgdGhlIFN5c3RlbSBWIEFQSSB3ZSBhbHNvIGNhcHR1cmUKKyAgIEJTRCdzLgorCisgICBNb3JlICBpbXBvcnRhbnRseSAgZm9yICB0aGUgIGZ1dHVyZSwgdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgaXNzdWVkIGJ5CisgICBYL09wZW4gIGlzICBleHBsaWNpdGx5IGFuZCBjbG9zZWx5IG1vZGVsZWQgb24gU3lzdGVtIFYuIFNvIGNvbmZvcm1hbmNlCisgICB3aXRoIFN5c3RlbSBWIHRvb2sgdXMgbW9zdCBvZiB0aGUgd2F5IHRvIGJhc2UtbGV2ZWwgWFNJIGNvbmZvcm1hbmNlLgorCitIb3cgdG8gRGVzaWduIEV4dGVuc2lvbnMKKworICAgVGhlICB0aGlyZCAgb2JqZWN0aXZlIChzdGFuZGFyZHMgY29uZm9ybWFuY2UpIHJlcXVpcmVzIHRoYXQgaXQgYmUgZWFzeQorICAgdG8gIGNvbmRpdGlvbiAgc291cmNlICBjb2RlICB1c2luZyAgbmN1cnNlcyAgc28gIHRoYXQgIHRoZSAgYWJzZW5jZSBvZgorICAgbm9uc3RhbmRhcmQgZXh0ZW5zaW9ucyBkb2VzIG5vdCBicmVhayB0aGUgY29kZS4KKworICAgQWNjb3JkaW5nbHksICB3ZSAgaGF2ZSAgYSAgcG9saWN5IG9mIGFzc29jaWF0aW5nIHdpdGggZWFjaCBub25zdGFuZGFyZAorICAgZXh0ZW5zaW9uICBhICBmZWF0dXJlICBtYWNybywgc28gdGhhdCBuY3Vyc2VzIGNsaWVudCBjb2RlIGNhbiB1c2UgdGhpcworICAgbWFjcm8gIHRvICBjb25kaXRpb24gIGluICBvciAgb3V0ICB0aGUgIGNvZGUgdGhhdCByZXF1aXJlcyB0aGUgbmN1cnNlcworICAgZXh0ZW5zaW9uLgorCisgICBGb3IgIGV4YW1wbGUsICB0aGVyZSBpcyBhIG1hY3JvIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiB3aGljaCBYU0kgQ3Vyc2VzCisgICBkb2VzICBub3QgIGRlZmluZSwgYnV0IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIG5jdXJzZXMgbGlicmFyeSBoZWFkZXIuCisgICBZb3UgY2FuIHVzZSB0aGlzIHRvIGNvbmRpdGlvbiB0aGUgY2FsbHMgdG8gdGhlIG1vdXNlIEFQSSBjYWxscy4KKworICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmlsaXR5IGFuZCBDb25maWd1cmF0aW9uCisKKyAgIENvZGUgIHdyaXR0ZW4gIGZvciAgbmN1cnNlcyBtYXkgYXNzdW1lIGFuIEFOU0ktc3RhbmRhcmQgQyBjb21waWxlciBhbmQKKyAgIFBPU0lYLWNvbXBhdGlibGUgIE9TICBpbnRlcmZhY2UuICBJdCBtYXkgYWxzbyBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIGEKKyAgIFN5c3RlbS1WLWNvbXBhdGlibGUgc2VsZWN0KDIpIGNhbGwuCisKKyAgIFdlIGVuY291cmFnZSAoYnV0IGRvIG5vdCByZXF1aXJlKSBkZXZlbG9wZXJzIHRvIG1ha2UgdGhlIGNvZGUgZnJpZW5kbHkKKyAgIHRvIGxlc3MtY2FwYWJsZSBVTklYIGVudmlyb25tZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworICAgV2UgIGVuY291cmFnZSAgZGV2ZWxvcGVycyAgdG8gIHN1cHBvcnQgIE9TLXNwZWNpZmljICBvcHRpbWl6YXRpb25zIGFuZAorICAgbWV0aG9kcyBub3QgYXZhaWxhYmxlIHVuZGVyIFBPU0lYL0FOU0ksIHByb3ZpZGVkIG9ubHkgdGhhdDoKKyAgICAgKiBBbGwgIHN1Y2ggIGNvZGUgIGlzIHByb3Blcmx5IGNvbmRpdGlvbmVkIHNvIHRoZSBidWlsZCBwcm9jZXNzIGRvZXMKKyAgICAgICBub3QgYXR0ZW1wdCB0byBjb21waWxlIGl0IHVuZGVyIGEgcGxhaW4gQU5TSS9QT1NJWCBlbnZpcm9ubWVudC4KKyAgICAgKiBBZGRpbmcgICAgc3VjaCAgIGltcGxlbWVudGF0aW9uICAgbWV0aG9kcyAgIGRvZXMgICBub3QgICBpbnRyb2R1Y2UKKyAgICAgICBpbmNvbXBhdGliaWxpdGllcyBpbiB0aGUgbmN1cnNlcyBBUEkgYmV0d2VlbiBwbGF0Zm9ybXMuCisKKyAgIFdlICB1c2UgR05VIGF1dG9jb25mKDEpIGFzIGEgdG9vbCB0byBkZWFsIHdpdGggcG9ydGFiaWxpdHkgaXNzdWVzLiBUaGUKKyAgIHJpZ2h0IHdheSB0byBsZXZlcmFnZSBhbiBPUy1zcGVjaWZpYyBmZWF0dXJlIGlzIHRvIG1vZGlmeSB0aGUgYXV0b2NvbmYKKyAgIHNwZWNpZmljYXRpb24gIGZpbGVzICAoY29uZmlndXJlLmluICBhbmQgIGFjbG9jYWwubTQpICB0byBzZXQgdXAgYSBuZXcKKyAgIGZlYXR1cmUgbWFjcm8sIHdoaWNoIHlvdSB0aGVuIHVzZSB0byBjb25kaXRpb24geW91ciBjb2RlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uIENvbnZlbnRpb25zCisKKyAgIFRoZXJlICBhcmUgIHRocmVlIGtpbmRzIG9mIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFja2FnZS4KKyAgIEVhY2ggaGFzIGEgZGlmZmVyZW50IHByZWZlcnJlZCBmb3JtYXQ6CisgICAgICogUGFja2FnZS1pbnRlcm5hbCBmaWxlcyAoUkVBRE1FLCBJTlNUQUxMLCBUTy1ETyBldGMuKQorICAgICAqIE1hbnVhbCBwYWdlcy4KKyAgICAgKiBFdmVyeXRoaW5nIGVsc2UgKGkuZS4sIG5hcnJhdGl2ZSBkb2N1bWVudGF0aW9uKS4KKworICAgT3VyIGNvbnZlbnRpb25zIGFyZSBzaW1wbGU6CisgICAgMS4gTWFpbnRhaW4gcGFja2FnZS1pbnRlcm5hbCBmaWxlcyBpbiBwbGFpbiB0ZXh0LiBUaGUgZXhwZWN0ZWQgdmlld2VyCisgICAgICAgZm9yICB0aGVtICBtb3JlKDEpICBvciAgYW4gIGVkaXRvciAgd2luZG93OyAgdGhlcmUncyAgbm8gIHBvaW50IGluCisgICAgICAgZWxhYm9yYXRlIG1hcmstdXAuCisgICAgMi4gTWFyayAgdXAgbWFudWFsIHBhZ2VzIGluIHRoZSBtYW4gbWFjcm9zLiBUaGVzZSBoYXZlIHRvIGJlIHZpZXdhYmxlCisgICAgICAgdGhyb3VnaCB0cmFkaXRpb25hbCBtYW4oMSkgcHJvZ3JhbXMuCisgICAgMy4gV3JpdGUgZXZlcnl0aGluZyBlbHNlIGluIEhUTUwuCisKKyAgIFdoZW4gIGluICBkb3VidCwgIEhUTUxpemUgIGEgIG1hc3RlciBhbmQgdXNlIGx5bngoMSkgdG8gZ2VuZXJhdGUgcGxhaW4KKyAgIEFTQ0lJIChhcyB3ZSBkbyBmb3IgdGhlIGFubm91bmNlbWVudCBkb2N1bWVudCkuCisKKyAgIFRoZSByZWFzb24gZm9yIGNob29zaW5nIEhUTUwgaXMgdGhhdCBpdCdzIChhKSB3ZWxsLWFkYXB0ZWQgZm9yIG9uLWxpbmUKKyAgIGJyb3dzaW5nIHRocm91Z2ggdmlld2VycyB0aGF0IGFyZSBldmVyeXdoZXJlOyAoYikgbW9yZSBlYXNpbHkgcmVhZGFibGUKKyAgIGFzICBwbGFpbiAgdGV4dCAgdGhhbiBtb3N0IG90aGVyIG1hcmstdXBzLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhIHZpZXdlcjsKKyAgIGFuZCAgIChjKSAgIGNhcnJpZXMgICBlbm91Z2ggIGluZm9ybWF0aW9uICB0aGF0ICB5b3UgIGNhbiAgZ2VuZXJhdGUgIGEKKyAgIG5pY2UtbG9va2luZyAgcHJpbnRlZCAgdmVyc2lvbiAgZnJvbSAgaXQuICBBbHNvLCAgb2YgIGNvdXJzZSwgIGl0IG1ha2UKKyAgIGV4cG9ydGluZyB0aGluZ3MgbGlrZSB0aGUgYW5ub3VuY2VtZW50IGRvY3VtZW50IHRvIFdXVyBwcmV0dHkgdHJpdmlhbC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIFJlcG9ydCBCdWdzCisKKyAgIFRoZSAgcmVwb3J0aW5nICBhZGRyZXNzICBmb3IgIGJ1Z3MgIGlzICBidWctbmN1cnNlc0BnbnUub3JnLiBUaGlzIGlzIGEKKyAgIG1ham9yZG9tbyAgbGlzdDsgIHRvIGpvaW4sIHdyaXRlIHRvIGJ1Zy1uY3Vyc2VzLXJlcXVlc3RAZ251Lm9yZyB3aXRoIGEKKyAgIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgbGluZToKKyAgICAgICAgICAgICBzdWJzY3JpYmUgPG5hbWU+QDxob3N0LmRvbWFpbj4KKworICAgVGhlICBuY3Vyc2VzICBjb2RlIGlzIG1haW50YWluZWQgYnkgYSBzbWFsbCBncm91cCBvZiB2b2x1bnRlZXJzLiBXaGlsZQorICAgd2UgIHRyeSAgb3VyICBiZXN0IHRvIGZpeCBidWdzIHByb21wdGx5LCB3ZSBzaW1wbHkgZG9uJ3QgaGF2ZSBhIGxvdCBvZgorICAgaG91cnMgIHRvICBzcGVuZCAgb24gIGVsZW1lbnRhcnkgIGhhbmQtaG9sZGluZy4gV2UgcmVseSBvbiBpbnRlbGxpZ2VudAorICAgY29vcGVyYXRpb24gIGZyb20gIG91ciAgdXNlcnMuICBJZiAgeW91ICB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIGJ1ZyBpbgorICAgbmN1cnNlcywgIHRoZXJlICBhcmUgc29tZSBzdGVwcyB5b3UgY2FuIHRha2UgYmVmb3JlIGNvbnRhY3RpbmcgdXMgdGhhdAorICAgd2lsbCBoZWxwIGdldCB0aGUgYnVnIGZpeGVkIHF1aWNrbHkuCisKKyAgIEluICBvcmRlciAgdG8gIHVzZSAgb3VyIGJ1Zy1maXhpbmcgdGltZSBlZmZpY2llbnRseSwgd2UgcHV0IHBlb3BsZSB3aG8KKyAgIHNob3cgdXMgdGhleSd2ZSB0YWtlbiB0aGVzZSBzdGVwcyBhdCB0aGUgaGVhZCBvZiBvdXIgcXVldWUuIFRoaXMgbWVhbnMKKyAgIHRoYXQgIGlmIHlvdSBkb24ndCwgeW91J2xsIHByb2JhYmx5IGVuZCB1cCBhdCB0aGUgdGFpbCBlbmQgYW5kIGhhdmUgdG8KKyAgIHdhaXQgYSB3aGlsZS4KKyAgICAxLiBEZXZlbG9wIGEgcmVjaXBlIHRvIHJlcHJvZHVjZSB0aGUgYnVnLgorICAgICAgIEJ1Z3MgIHdlICBjYW4gcmVwcm9kdWNlIGFyZSBsaWtlbHkgdG8gYmUgZml4ZWQgdmVyeSBxdWlja2x5LCBvZnRlbgorICAgICAgIHdpdGhpbiAgZGF5cy4gIFRoZSBtb3N0IGVmZmVjdGl2ZSBzaW5nbGUgdGhpbmcgeW91IGNhbiBkbyB0byBnZXQgYQorICAgICAgIHF1aWNrICBmaXggIGlzICBkZXZlbG9wIGEgd2F5IHdlIGNhbiBkdXBsaWNhdGUgdGhlIGJhZCBiZWhhdmlvciAtLQorICAgICAgIGlkZWFsbHksICBieSAgZ2l2aW5nICB1cyBzb3VyY2UgZm9yIGEgc21hbGwsIHBvcnRhYmxlIHRlc3QgcHJvZ3JhbQorICAgICAgIHRoYXQgIGJyZWFrcyB0aGUgbGlicmFyeS4gKEV2ZW4gYmV0dGVyIGlzIGEga2V5c3Ryb2tlIHJlY2lwZSB1c2luZworICAgICAgIG9uZSBvZiB0aGUgdGVzdCBwcm9ncmFtcyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uKQorICAgIDIuIFRyeSB0byByZXByb2R1Y2UgdGhlIGJ1ZyBvbiBhIGRpZmZlcmVudCB0ZXJtaW5hbCB0eXBlLgorICAgICAgIEluICBvdXIgZXhwZXJpZW5jZSwgbW9zdCBvZiB0aGUgYmVoYXZpb3JzIHBlb3BsZSByZXBvcnQgYXMgbGlicmFyeQorICAgICAgIGJ1Z3MgYXJlIGFjdHVhbGx5IGR1ZSB0byBzdWJ0bGUgcHJvYmxlbXMgaW4gdGVybWluYWwgZGVzY3JpcHRpb25zLgorICAgICAgIFRoaXMgaXMgZXNwZWNpYWxseSBsaWtlbHkgdG8gYmUgdHJ1ZSBpZiB5b3UncmUgdXNpbmcgYSB0cmFkaXRpb25hbAorICAgICAgIGFzeW5jaHJvbm91cyAgdGVybWluYWwgIG9yIFBDLWJhc2VkIHRlcm1pbmFsIGVtdWxhdG9yLCByYXRoZXIgdGhhbgorICAgICAgIHh0ZXJtIG9yIGEgVU5JWCBjb25zb2xlIGVudHJ5LgorICAgICAgIEl0J3MgdGhlcmVmb3JlIGV4dHJlbWVseSBoZWxwZnVsIGlmIHlvdSBjYW4gdGVsbCB1cyB3aGV0aGVyIG9yIG5vdAorICAgICAgIHlvdXIgIHByb2JsZW0gIHJlcHJvZHVjZXMgIG9uIG90aGVyIHRlcm1pbmFsIHR5cGVzLiBVc3VhbGx5IHlvdSdsbAorICAgICAgIGhhdmUgIGJvdGggIGEgIGNvbnNvbGUgIHR5cGUgIGFuZCAgeHRlcm0gYXZhaWxhYmxlOyBwbGVhc2UgdGVsbCB1cworICAgICAgIHdoZXRoZXIgb3Igbm90IHlvdXIgYnVnIHJlcHJvZHVjZXMgb24gYm90aC4KKyAgICAgICBJZiAgeW91ICBoYXZlICB4dGVybSAgYXZhaWxhYmxlLCAgaXQgaXMgYWxzbyBnb29kIHRvIGNvbGxlY3QgeHRlcm0KKyAgICAgICByZXBvcnRzIGZvciBkaWZmZXJlbnQgd2luZG93IHNpemVzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB5b3UKKyAgICAgICBub3JtYWxseSAgdXNlICBhbiB1bnVzdWFsIHh0ZXJtIHdpbmRvdyBzaXplIC0tIGEgc3VycHJpc2luZyBudW1iZXIKKyAgICAgICBvZiB0aGUgYnVncyB3ZSd2ZSBzZWVuIGFyZSBlaXRoZXIgdHJpZ2dlcmVkIG9yIG1hc2tlZCBieSB0aGVzZS4KKyAgICAzLiBHZW5lcmF0ZSBhbmQgZXhhbWluZSBhIHRyYWNlIGZpbGUgZm9yIHRoZSBicm9rZW4gYmVoYXZpb3IuCisgICAgICAgUmVjb21waWxlICAgeW91ciAgcHJvZ3JhbSAgd2l0aCAgdGhlICBkZWJ1Z2dpbmcgIHZlcnNpb25zICBvZiAgdGhlCisgICAgICAgbGlicmFyaWVzLiAgSW5zZXJ0ICBhICB0cmFjZSgpICBjYWxsICB3aXRoICB0aGUgIGFyZ3VtZW50ICBzZXQgIHRvCisgICAgICAgVFJBQ0VfVVBEQVRFLiAgKFNlZSAiV3JpdGluZyBQcm9ncmFtcyB3aXRoIE5DVVJTRVMiIGZvciBkZXRhaWxzIG9uCisgICAgICAgdHJhY2UgIGxldmVscy4pIFJlcHJvZHVjZSB5b3VyIGJ1ZywgdGhlbiBsb29rIGF0IHRoZSB0cmFjZSBmaWxlIHRvCisgICAgICAgc2VlIHdoYXQgdGhlIGxpYnJhcnkgd2FzIGFjdHVhbGx5IGRvaW5nLgorICAgICAgIEFub3RoZXIgIGZyZXF1ZW50ICBjYXVzZSAgb2YgIGFwcGFyZW50ICBidWdzIGlzIGFwcGxpY2F0aW9uIGNvZGluZworICAgICAgIGVycm9ycyAgdGhhdCAgY2F1c2UgIHRoZSAgd3JvbmcgIHRoaW5ncyAgdG8gIGJlIHB1dCBvbiB0aGUgdmlydHVhbAorICAgICAgIHNjcmVlbi4gTG9va2luZyBhdCB0aGUgdmlydHVhbC1zY3JlZW4gZHVtcHMgaW4gdGhlIHRyYWNlIGZpbGUgd2lsbAorICAgICAgIHRlbGwgIHlvdSAgaW1tZWRpYXRlbHkgaWYgdGhpcyBpcyBoYXBwZW5pbmcsIGFuZCBzYXZlIHlvdSBmcm9tIHRoZQorICAgICAgIHBvc3NpYmxlICBlbWJhcnJhc3NtZW50IG9mIGJlaW5nIHRvbGQgdGhhdCB0aGUgYnVnIGlzIGluIHlvdXIgY29kZQorICAgICAgIGFuZCBpcyB5b3VyIHByb2JsZW0gcmF0aGVyIHRoYW4gb3Vycy4KKyAgICAgICBJZiAgdGhlICB2aXJ0dWFsLXNjcmVlbiAgZHVtcHMgIGxvb2sgY29ycmVjdCBidXQgdGhlIGJ1ZyBwZXJzaXN0cywKKyAgICAgICBpdCdzICBwb3NzaWJsZSAgdG8gIGNyYW5rIHVwIHRoZSB0cmFjZSBsZXZlbCB0byBnaXZlIG1vcmUgYW5kIG1vcmUKKyAgICAgICBpbmZvcm1hdGlvbiAgYWJvdXQgIHRoZSAgbGlicmFyeSdzICB1cGRhdGUgYWN0aW9ucyBhbmQgdGhlIGNvbnRyb2wKKyAgICAgICBzZXF1ZW5jZXMgIGl0ICBpc3N1ZXMgIHRvICBwZXJmb3JtIHRoZW0uIFRoZSB0ZXN0IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICBkaXN0cmlidXRpb24gY29udGFpbnMgYSB0b29sIGZvciBkaWdlc3RpbmcgdGhlc2UgbG9ncyB0byBtYWtlIHRoZW0KKyAgICAgICBsZXNzIHRlZGlvdXMgdG8gd2FkZSB0aHJvdWdoLgorICAgICAgIE9mdGVuIHlvdSdsbCBmaW5kIHRlcm1pbmZvIHByb2JsZW1zIGF0IHRoaXMgc3RhZ2UgYnkgbm90aWNpbmcgdGhhdAorICAgICAgIHRoZSAgZXNjYXBlICBzZXF1ZW5jZXMgcHV0IG91dCBmb3IgdmFyaW91cyBjYXBhYmlsaXRpZXMgYXJlIHdyb25nLgorICAgICAgIElmICBub3QsICB5b3UncmUgbGlrZWx5IHRvIGxlYXJuIGVub3VnaCB0byBiZSBhYmxlIHRvIGNoYXJhY3Rlcml6ZQorICAgICAgIGFueSBidWcgaW4gdGhlIHNjcmVlbi11cGRhdGUgbG9naWMgcXVpdGUgZXhhY3RseS4KKyAgICA0LiBSZXBvcnQgZGV0YWlscyBhbmQgc3ltcHRvbXMsIG5vdCBqdXN0IGludGVycHJldGF0aW9ucy4KKyAgICAgICBJZiAgeW91ICBkbyB0aGUgcHJlY2VkaW5nIHR3byBzdGVwcywgaXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB5b3UnbGwKKyAgICAgICBkaXNjb3ZlciB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtIHlvdXJzZWxmIGFuZCBiZSBhYmxlIHRvIHNlbmQgdXMKKyAgICAgICBhICBmaXguICBUaGlzICB3aWxsICBjcmVhdGUgaGFwcHkgZmVlbGluZ3MgYWxsIGFyb3VuZCBhbmQgZWFybiB5b3UKKyAgICAgICBnb29kICBrYXJtYSBmb3IgdGhlIGZpcnN0IHRpbWUgeW91IHJ1biBpbnRvIGEgYnVnIHlvdSByZWFsbHkgY2FuJ3QKKyAgICAgICBjaGFyYWN0ZXJpemUgYW5kIGZpeCB5b3Vyc2VsZi4KKyAgICAgICBJZiAgeW91J3JlICBzdGlsbCAgc3R1Y2ssICBhdCAgbGVhc3QgIHlvdSdsbCBrbm93IHdoYXQgdG8gdGVsbCB1cy4KKyAgICAgICBSZW1lbWJlciwgIHdlICBuZWVkICBkZXRhaWxzLiAgSWYgIHlvdSBndWVzcyBhYm91dCB3aGF0IGlzIHNhZmUgdG8KKyAgICAgICBsZWF2ZSBvdXQsIHlvdSBhcmUgdG9vIGxpa2VseSB0byBiZSB3cm9uZy4KKyAgICAgICBJZiAgeW91ciAgYnVnICBwcm9kdWNlcyBhIGJhZCB1cGRhdGUsIGluY2x1ZGUgYSB0cmFjZSBmaWxlLiBUcnkgdG8KKyAgICAgICBtYWtlICB0aGUgIHRyYWNlICBhdCB0aGUgbGVhc3Qgdm9sdW1pbm91cyBsZXZlbCB0aGF0IHBpbnMgZG93biB0aGUKKyAgICAgICBidWcuICBMb2dzICB0aGF0ICBoYXZlICBiZWVuIHRocm91Z2ggdHJhY2VtdW5jaCBhcmUgT0ssIGl0IGRvZXNuJ3QKKyAgICAgICB0aHJvdyAgIGF3YXkgICBhbnkgICBpbmZvcm1hdGlvbiAgKGFjdHVhbGx5ICB0aGV5J3JlICBiZXR0ZXIgIHRoYW4KKyAgICAgICB1bi1tdW5jaGVkIG9uZXMgYmVjYXVzZSB0aGV5J3JlIGVhc2llciB0byByZWFkKS4KKyAgICAgICBJZiAgeW91ciBidWcgcHJvZHVjZXMgYSBjb3JlLWR1bXAsIHBsZWFzZSBpbmNsdWRlIGEgc3ltYm9saWMgc3RhY2sKKyAgICAgICB0cmFjZSBnZW5lcmF0ZWQgYnkgZ2RiKDEpIG9yIHlvdXIgbG9jYWwgZXF1aXZhbGVudC4KKyAgICAgICBUZWxsIHVzIGFib3V0IGV2ZXJ5IHRlcm1pbmFsIG9uIHdoaWNoIHlvdSd2ZSByZXByb2R1Y2VkIHRoZSBidWcgLS0KKyAgICAgICBhbmQgIGV2ZXJ5ICB0ZXJtaW5hbCBvbiB3aGljaCB5b3UgY2FuJ3QuIElkZWFsbHksIHNlbnQgdXMgdGVybWluZm8KKyAgICAgICBzb3VyY2VzIGZvciBhbGwgb2YgdGhlc2UgKHlvdXJzIG1pZ2h0IGRpZmZlciBmcm9tIG91cnMpLgorICAgICAgIEluY2x1ZGUgIHlvdXIgbmN1cnNlcyB2ZXJzaW9uIGFuZCB5b3VyIE9TL21hY2hpbmUgdHlwZSwgb2YgY291cnNlIQorICAgICAgIFlvdSBjYW4gZmluZCB5b3VyIG5jdXJzZXMgdmVyc2lvbiBpbiB0aGUgY3Vyc2VzLmggZmlsZS4KKworICAgSWYgIHlvdXIgIHByb2JsZW0gIHNtZWxscyAgbGlrZSBhIGxvZ2ljIGVycm9yIG9yIGluIGN1cnNvciBtb3ZlbWVudCBvcgorICAgc2Nyb2xsaW5nICBvciBhIGJhZCBjYXBhYmlsaXR5LCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgdGlueSB0ZXN0IGZyYW1lcworICAgZm9yICB0aGUgIGxpYnJhcnkgIGFsZ29yaXRobXMgaW4gdGhlIHByb2dzIGRpcmVjdG9yeSB0aGF0IG1heSBoZWxwIHlvdQorICAgaXNvbGF0ZSAgaXQuIFRoZXNlIGFyZSBub3QgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkLCBidXQgZG8gaGF2ZSB0aGVpcgorICAgb3duIG1ha2UgcHJvZHVjdGlvbnMuCisKKyAgIFRoZSAgIG1vc3QgIGltcG9ydGFudCAgb2YgIHRoZXNlICBpcyAgbXZjdXIsICBhICB0ZXN0ICBmcmFtZSAgZm9yICB0aGUKKyAgIGN1cnNvci1tb3ZlbWVudCAgb3B0aW1pemF0aW9uICBjb2RlLiAgV2l0aCAgdGhpcyAgcHJvZ3JhbSwgeW91IGNhbiBzZWUKKyAgIGRpcmVjdGx5ICB3aGF0ICBjb250cm9sIHNlcXVlbmNlcyB3aWxsIGJlIGVtaXR0ZWQgZm9yIGFueSBnaXZlbiBjdXJzb3IKKyAgIG1vdmVtZW50IG9yIHNjcm9sbC9pbnNlcnQvZGVsZXRlIG9wZXJhdGlvbnMuIElmIHlvdSB0aGluayB5b3UndmUgZ290IGEKKyAgIGJhZCAgY2FwYWJpbGl0eSAgaWRlbnRpZmllZCwgIHlvdSAgY2FuICBkaXNhYmxlIGl0IGFuZCB0ZXN0IGFnYWluLiBUaGUKKyAgIHByb2dyYW0gaXMgY29tbWFuZC1kcml2ZW4gYW5kIGhhcyBvbi1saW5lIGhlbHAuCisKKyAgIElmICB5b3UgdGhpbmsgdGhlIHZlcnRpY2FsLXNjcm9sbCBvcHRpbWl6YXRpb24gaXMgYnJva2VuLCBvciBqdXN0IHdhbnQKKyAgIHRvICB1bmRlcnN0YW5kICBob3cgaXQgd29ya3MgYmV0dGVyLCBidWlsZCBoYXNobWFwIGFuZCByZWFkIHRoZSBoZWFkZXIKKyAgIGNvbW1lbnRzICBvZiBoYXJkc2Nyb2xsLmMgYW5kIGhhc2htYXAuYzsgdGhlbiB0cnkgaXQgb3V0LiBZb3UgY2FuIGFsc28KKyAgIHRlc3QgdGhlIGhhcmR3YXJlLXNjcm9sbGluZyBvcHRpbWl6YXRpb24gc2VwYXJhdGVseSB3aXRoIGhhcmRzY3JvbGwuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICBBIFRvdXIgb2YgdGhlIE5jdXJzZXMgTGlicmFyeQorCitMaWJyYXJ5IE92ZXJ2aWV3CisKKyAgIE1vc3QgIG9mICB0aGUgIGxpYnJhcnkgaXMgc3VwZXJzdHJ1Y3R1cmUgLS0gZmFpcmx5IHRyaXZpYWwgY29udmVuaWVuY2UKKyAgIGludGVyZmFjZXMgIHRvIGEgc21hbGwgc2V0IG9mIGJhc2ljIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQKKyAgIHRvICBtYW5pcHVsYXRlICB0aGUgIHZpcnR1YWwgIHNjcmVlbiAoaW4gcGFydGljdWxhciwgbm9uZSBvZiB0aGlzIGNvZGUKKyAgIGRvZXMgIGFueSAgSS9PICBleGNlcHQgIHRocm91Z2ggIGNhbGxzICB0byAgbW9yZSAgZnVuZGFtZW50YWwgIG1vZHVsZXMKKyAgIGRlc2NyaWJlZCBiZWxvdykuIFRoZSBmaWxlcworCisgICAgIGxpYl9hZGRjaC5jICAgIGxpYl9ia2dkLmMgICAgbGliX2JveC5jICAgIGxpYl9jaGdhdC5jICAgbGliX2NsZWFyLmMKKyAgICAgbGliX2NsZWFyb2suYyAgbGliX2NscmJvdC5jICBsaWJfY2xyZW9sLmMgbGliX2NvbG9yc2V0LmMgbGliX2RhdGEuYworICAgICBsaWJfZGVsY2guYyAgICBsaWJfZGVsd2luLmMgICAgbGliX2VjaG8uYyAgIGxpYl9lcmFzZS5jICAgbGliX2dlbi5jCisgICAgIGxpYl9nZXRzdHIuYyAgbGliX2hsaW5lLmMgIGxpYl9pbW1lZG9rLmMgIGxpYl9pbmNoc3RyLmMgbGliX2luc2NoLmMKKyAgICAgbGliX2luc2RlbC5jICBsaWJfaW5zc3RyLmMgbGliX2luc3RyLmMgbGliX2lzZW5kd2luLmMgbGliX2tleW5hbWUuYworICAgICBsaWJfbGVhdmVvay5jICAgbGliX21vdmUuYyAgIGxpYl9tdndpbi5jICAgbGliX292ZXJsYXkuYyAgbGliX3BhZC5jCisgICAgIGxpYl9wcmludHcuYyAgbGliX3JlZHJhd2xuLmMgIGxpYl9zY2Fudy5jIGxpYl9zY3JlZW4uYyBsaWJfc2Nyb2xsLmMKKyAgICAgbGliX3Njcm9sbG9rLmMgICAgICBsaWJfc2NycmVnLmMgICAgICBsaWJfc2V0X3Rlcm0uYyAgICAgIGxpYl9zbGsuYworICAgICBsaWJfc2xrYXRyX3NldC5jICAgbGliX3Nsa2F0cm9mLmMgICBsaWJfc2xrYXRyb24uYyAgbGliX3Nsa2F0cnNldC5jCisgICAgIGxpYl9zbGthdHRyLmMgICAgIGxpYl9zbGtjbGVhci5jICAgIGxpYl9zbGtjb2xvci5jICAgIGxpYl9zbGtpbml0LmMKKyAgICAgbGliX3Nsa2xhYi5jICBsaWJfc2xrcmVmci5jIGxpYl9zbGtzZXQuYyBsaWJfc2xrdG91Y2guYyBsaWJfdG91Y2guYworICAgICBsaWJfdW5jdHJsLmMgbGliX3ZsaW5lLmMgbGliX3dhdHRyb2ZmLmMgbGliX3dhdHRyb24uYyBsaWJfd2luZG93LmMKKworICAgYXJlICBhbGwgIGluICB0aGlzICBjYXRlZ29yeS4gIFRoZXkgIGFyZSB2ZXJ5IHVubGlrZWx5IHRvIG5lZWQgY2hhbmdlLAorICAgYmFycmluZyBidWdzIG9yIHNvbWUgZnVuZGFtZW50YWwgcmVvcmdhbml6YXRpb24gaW4gdGhlIHVuZGVybHlpbmcgZGF0YQorICAgc3RydWN0dXJlcy4KKworICAgVGhlc2UgZmlsZXMgYXJlIHVzZWQgb25seSBmb3IgZGVidWdnaW5nIHN1cHBvcnQ6CisKKyAgICAgbGliX3RyYWNlLmMgICAgIGxpYl90cmFjZWF0ci5jICAgIGxpYl90cmFjZWJpdHMuYyAgICBsaWJfdHJhY2VjaHIuYworICAgICBsaWJfdHJhY2VkbXAuYyBsaWJfdHJhY2Vtc2UuYyB0cmFjZV9idWYuYworCisgICBJdCAgaXMgIHJhdGhlciB1bmxpa2VseSB5b3Ugd2lsbCBldmVyIG5lZWQgdG8gY2hhbmdlIHRoZXNlLCB1bmxlc3MgeW91CisgICB3YW50IHRvIGludHJvZHVjZSBhIG5ldyBkZWJ1ZyB0cmFjZSBsZXZlbCBmb3Igc29tZSByZWFzb24uCisKKyAgIFRoZXJlICBpcyAgYW5vdGhlciAgZ3JvdXAgIG9mICBmaWxlcyAgdGhhdCAgZG8gZGlyZWN0IEkvTyB2aWEgdHB1dHMoKSwKKyAgIGNvbXB1dGF0aW9ucyAgb24gIHRoZSAgdGVybWluYWwgIGNhcGFiaWxpdGllcywgIG9yICBxdWVyaWVzICB0byB0aGUgT1MKKyAgIGVudmlyb25tZW50LCAgYnV0ICBuZXZlcnRoZWxlc3MgaGF2ZSBvbmx5IGZhaXJseSBsb3cgY29tcGxleGl0eS4gVGhlc2UKKyAgIGluY2x1ZGU6CisKKyAgICAgbGliX2Fjcy5jICAgbGliX2JlZXAuYyAgIGxpYl9jb2xvci5jICAgbGliX2VuZHdpbi5jICAgbGliX2luaXRzY3IuYworICAgICBsaWJfbG9uZ25hbWUuYyAgbGliX25ld3Rlcm0uYyAgbGliX29wdGlvbnMuYyBsaWJfdGVybWNhcC5jIGxpYl90aS5jCisgICAgIGxpYl90cGFybS5jIGxpYl90cHV0cy5jIGxpYl92aWRhdHRyLmMgcmVhZF9lbnRyeS5jLgorCisgICBUaGV5IGFyZSBsaWtlbHkgdG8gbmVlZCByZXZpc2lvbiBvbmx5IGlmIG5jdXJzZXMgaXMgYmVpbmcgcG9ydGVkIHRvIGFuCisgICBlbnZpcm9ubWVudCB3aXRob3V0IGFuIHVuZGVybHlpbmcgdGVybWluZm8gY2FwYWJpbGl0eSByZXByZXNlbnRhdGlvbi4KKworICAgVGhlc2UgIGZpbGVzICBoYXZlICBzZXJpb3VzICBob29rcyAgaW50byAgdGhlICB0dHkgIGRyaXZlciAgYW5kIHNpZ25hbAorICAgZmFjaWxpdGllczoKKworICAgICBsaWJfa2VybmVsLmMgbGliX2JhdWRyYXRlLmMgbGliX3Jhdy5jIGxpYl90c3RwLmMgbGliX3R3YWl0LmMKKworICAgSWYgeW91IHJ1biBpbnRvIHBvcnRpbmcgc25hZnVzIG1vdmluZyB0aGUgcGFja2FnZSB0byBhbm90aGVyIFVOSVgsIHRoZQorICAgcHJvYmxlbSAgaXMgIGxpa2VseSAgdG8gYmUgaW4gb25lIG9mIHRoZXNlIGZpbGVzLiBUaGUgZmlsZSBsaWJfcHJpbnQuYworICAgdXNlcyBzbGVlcCgyKSBhbmQgYWxzbyBmYWxscyBpbiB0aGlzIGNhdGVnb3J5LgorCisgICBBbG1vc3QgYWxsIG9mIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBpbiB0aGUgZmlsZXMKKworICAgICBoYXJkc2Nyb2xsLmMgICBoYXNobWFwLmMgICBsaWJfYWRkY2guYyAgbGliX2RvdXBkYXRlLmMgIGxpYl9nZXRjaC5jCisgICAgIGxpYl9tb3VzZS5jIGxpYl9tdmN1ci5jIGxpYl9yZWZyZXNoLmMgbGliX3NldHVwLmMgbGliX3ZpZGF0dHIuYworCisgICBNb3N0ICBvZiAgdGhlICBhbGdvcml0aG1pYyAgY29tcGxleGl0eSAgaW4gIHRoZSBsaWJyYXJ5IGxpdmVzIGluIHRoZXNlCisgICBmaWxlcy4gIElmICB0aGVyZSBpcyBhIHJlYWwgYnVnIGluIG5jdXJzZXMgaXRzZWxmLCBpdCdzIHByb2JhYmx5IGhlcmUuCisgICBXZSdsbCB0b3VyIHNvbWUgb2YgdGhlc2UgZmlsZXMgaW4gZGV0YWlsIGJlbG93IChzZWUgVGhlIEVuZ2luZSBSb29tKS4KKworICAgRmluYWxseSwgIHRoZXJlICBpcyAgYSAgZ3JvdXAgIG9mICBmaWxlcyAgdGhhdCBpcyBhY3R1YWxseSBtb3N0IG9mIHRoZQorICAgdGVybWluZm8gIGNvbXBpbGVyLiAgVGhlIHJlYXNvbiB0aGlzIGNvZGUgbGl2ZXMgaW4gdGhlIG5jdXJzZXMgbGlicmFyeQorICAgaXMgdG8gc3VwcG9ydCBmYWxsYmFjayB0byAvZXRjL3Rlcm1jYXAuIFRoZXNlIGZpbGVzIGluY2x1ZGUKKworICAgICBhbGxvY19lbnRyeS5jICBjYXB0b2luZm8uYyAgY29tcF9jYXB0YWIuYyAgY29tcF9lcnJvci5jIGNvbXBfaGFzaC5jCisgICAgIGNvbXBfcGFyc2UuYyBjb21wX3NjYW4uYyBwYXJzZV9lbnRyeS5jIHJlYWRfdGVybWNhcC5jIHdyaXRlX2VudHJ5LmMKKworICAgV2UnbGwgZGlzY3VzcyB0aGVzZSBpbiB0aGUgY29tcGlsZXIgdG91ci4KKworVGhlIEVuZ2luZSBSb29tCisKKyAgS2V5Ym9hcmQgSW5wdXQKKworICAgQWxsICBuY3Vyc2VzICBpbnB1dCAgZnVubmVscyB0aHJvdWdoIHRoZSBmdW5jdGlvbiB3Z2V0Y2goKSwgZGVmaW5lZCBpbgorICAgbGliX2dldGNoLmMuICBUaGlzIGZ1bmN0aW9uIGlzIHRyaWNreTsgaXQgaGFzIHRvIHBvbGwgZm9yIGtleWJvYXJkIGFuZAorICAgbW91c2UgIGV2ZW50cyBhbmQgZG8gYSBydW5uaW5nIG1hdGNoIG9mIGluY29taW5nIGlucHV0IGFnYWluc3QgdGhlIHNldAorICAgb2YgZGVmaW5lZCBzcGVjaWFsIGtleXMuCisKKyAgIFRoZSAgY2VudHJhbCAgZGF0YSAgc3RydWN0dXJlICBpbiB0aGlzIG1vZHVsZSBpcyBhIEZJRk8gcXVldWUsIHVzZWQgdG8KKyAgIG1hdGNoICAgbXVsdGlwbGUtY2hhcmFjdGVyICAgaW5wdXQgICBzZXF1ZW5jZXMgICBhZ2FpbnN0ICAgc3BlY2lhbC1rZXkKKyAgIGNhcGFiaWxpdGllczsgYWxzbyB0byBpbXBsZW1lbnQgcHVzaGJhY2sgdmlhIHVuZ2V0Y2goKS4KKworICAgVGhlIHdnZXRjaCgpIGNvZGUgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGZ1bmN0aW9uIGtleSBzZXF1ZW5jZXMgYW5kIHRoZQorICAgc2FtZSAgc2VxdWVuY2VzICB0eXBlZCBtYW51YWxseSBieSBkb2luZyBhIHRpbWVkIHdhaXQgYWZ0ZXIgZWFjaCBpbnB1dAorICAgY2hhcmFjdGVyICB0aGF0ICBjb3VsZCAgbGVhZCAgYSAgZnVuY3Rpb24gIGtleSBzZXF1ZW5jZS4gSWYgdGhlIGVudGlyZQorICAgc2VxdWVuY2UgIHRha2VzICBsZXNzICB0aGFuICAxICBzZWNvbmQsICBpdCAgaXMgIGFzc3VtZWQgIHRvIGhhdmUgYmVlbgorICAgZ2VuZXJhdGVkIGJ5IGEgZnVuY3Rpb24ga2V5IHByZXNzLgorCisgICBIYWNrZXJzICBicnVpc2VkICBieSAgcHJldmlvdXMgZW5jb3VudGVycyB3aXRoIHZhcmlhbnQgc2VsZWN0KDIpIGNhbGxzCisgICBtYXkgIGZpbmQgIHRoZSAgY29kZSAgaW4gIGxpYl90d2FpdC5jICBpbnRlcmVzdGluZy4gIEl0IGRlYWxzIHdpdGggdGhlCisgICBwcm9ibGVtIHRoYXQgc29tZSBCU0Qgc2VsZWN0cyBkb24ndCByZXR1cm4gYSByZWxpYWJsZSB0aW1lLWxlZnQgdmFsdWUuCisgICBUaGUgZnVuY3Rpb24gdGltZWRfd2FpdCgpIGVmZmVjdGl2ZWx5IHNpbXVsYXRlcyBhIFN5c3RlbSBWIHNlbGVjdC4KKworICBNb3VzZSBFdmVudHMKKworICAgSWYgdGhlIG1vdXNlIGludGVyZmFjZSBpcyBhY3RpdmUsIHdnZXRjaCgpIHBvbGxzIGZvciBtb3VzZSBldmVudHMgZWFjaAorICAgY2FsbCwgIGJlZm9yZSAgaXQgIGdvZXMgIHRvICB0aGUgIGtleWJvYXJkICBmb3IgIGlucHV0LiAgSXQgIGlzICB1cCB0bworICAgbGliX21vdXNlLmMgaG93IHRoZSBwb2xsaW5nIGlzIGFjY29tcGxpc2hlZDsgaXQgbWF5IHZhcnkgZm9yIGRpZmZlcmVudAorICAgZGV2aWNlcy4KKworICAgVW5kZXIgIHh0ZXJtLCAgaG93ZXZlciwgIG1vdXNlICBldmVudCAgbm90aWZpY2F0aW9ucyAgY29tZSAgaW4gdmlhIHRoZQorICAga2V5Ym9hcmQgIGlucHV0ICBzdHJlYW0uICBUaGV5ICBhcmUgIHJlY29nbml6ZWQgIGJ5ICBoYXZpbmcgIHRoZSBrbW91cworICAgY2FwYWJpbGl0eSAgYXMgYSBwcmVmaXguIFRoaXMgaXMga2luZCBvZiBrbHVnZXksIGJ1dCB0cnlpbmcgdG8gd2lyZSBpbgorICAgcmVjb2duaXRpb24gICBvZiAgIGEgIG1vdXNlICBrZXkgIHByZWZpeCAgd2l0aG91dCAgZ29pbmcgIHRocm91Z2ggIHRoZQorICAgZnVuY3Rpb24ta2V5ICBtYWNoaW5lcnkgIHdvdWxkIGJlIGp1c3QgdG9vIHBhaW5mdWwsIGFuZCB0aGlzIHR1cm5zIG91dAorICAgdG8gIGltcGx5IGhhdmluZyB0aGUgcHJlZml4IHNvbWV3aGVyZSBpbiB0aGUgZnVuY3Rpb24ta2V5IGNhcGFiaWxpdGllcworICAgYXQgdGVybWluYWwtdHlwZSBpbml0aWFsaXphdGlvbi4KKworICAgVGhpcyAga2x1Z2UgIG9ubHkgIHdvcmtzICBiZWNhdXNlICBrbW91cyAgaXNuJ3QgIGFjdHVhbGx5ICB1c2VkIGJ5IGFueQorICAgaGlzdG9yaWMgdGVybWluYWwgdHlwZSBvciBjdXJzZXMgaW1wbGVtZW50YXRpb24gd2Uga25vdyBvZi4gQmVzdCBndWVzcworICAgaXMgIGl0J3MgIGEgIHJlbGljICBvZiBzb21lIGZvcmdvdHRlbiBleHBlcmltZW50IGluLWhvdXNlIGF0IEJlbGwgTGFicworICAgdGhhdCAgZGlkbid0ICBsZWF2ZSAgYW55ICB0cmFjZXMgIGluIHRoZSBwdWJsaWNseS1kaXN0cmlidXRlZCBTeXN0ZW0gVgorICAgdGVybWluZm8gIGZpbGVzLiAgSWYgU3lzdGVtIFYgb3IgWFBHNCBldmVyIGdldHMgc2VyaW91cyBhYm91dCB1c2luZyBpdAorICAgYWdhaW4sIHRoaXMga2x1Z2UgbWF5IGhhdmUgdG8gY2hhbmdlLgorCisgICBIZXJlIGFyZSBzb21lIG1vcmUgZGV0YWlscyBhYm91dCBtb3VzZSBldmVudCBoYW5kbGluZzoKKworICAgVGhlIGxpYl9tb3VzZSgpY29kZSBpcyBsb2dpY2FsbHkgc3BsaXQgaW50byBhIGxvd2VyIGxldmVsIHRoYXQgYWNjZXB0cworICAgZXZlbnQgIHJlcG9ydHMgIGluICBhICBkZXZpY2UtZGVwZW5kZW50IGZvcm1hdCBhbmQgYW4gdXBwZXIgbGV2ZWwgdGhhdAorICAgcGFyc2VzIG1vdXNlIGdlc3R1cmVzIGFuZCBmaWx0ZXJzIGV2ZW50cy4gVGhlIG1lZGlhdGluZyBkYXRhIHN0cnVjdHVyZQorICAgaXMgYSBjaXJjdWxhciBxdWV1ZSBvZiBldmVudCBzdHJ1Y3R1cmVzLgorCisgICBGdW5jdGlvbmFsbHksIHRoZSBsb3dlciBsZXZlbCdzIGpvYiBpcyB0byBwaWNrIHVwIHByaW1pdGl2ZSBldmVudHMgYW5kCisgICBwdXQgIHRoZW0gIG9uICB0aGUgY2lyY3VsYXIgcXVldWUuIFRoaXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YgdHdvIHdheXM6CisgICBlaXRoZXIgIChhKSAgX25jX21vdXNlX2V2ZW50KCkgIGRldGVjdHMgIGEgIHNlcmllcyAgb2YgIGluY29taW5nIG1vdXNlCisgICByZXBvcnRzICBhbmQgcXVldWVzIHRoZW0sIG9yIChiKSBjb2RlIGluIGxpYl9nZXRjaC5jIGRldGVjdHMgdGhlIGttb3VzCisgICBwcmVmaXggIGluICB0aGUgIGtleWJvYXJkICBpbnB1dCAgc3RyZWFtIGFuZCBjYWxscyBfbmNfbW91c2VfaW5saW5lIHRvCisgICBxdWV1ZSB1cCBhIHNlcmllcyBvZiBhZGphY2VudCBtb3VzZSByZXBvcnRzLgorCisgICBJbiBlaXRoZXIgY2FzZSwgX25jX21vdXNlX3BhcnNlKCkgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgc2VyaWVzIGlzCisgICBhY2NlcHRlZCB0byBwYXJzZSB0aGUgZGlnZXN0ZWQgbW91c2UgcmVwb3J0cyAobG93LWxldmVsIGV2ZW50cykgaW50byBhCisgICBnZXN0dXJlIChhIGhpZ2gtbGV2ZWwgb3IgY29tcG9zaXRlIGV2ZW50KS4KKworICBPdXRwdXQgYW5kIFNjcmVlbiBVcGRhdGluZworCisgICBXaXRoIHRoZSBzaW5nbGUgZXhjZXB0aW9uIG9mIGNoYXJhY3RlciBlY2hvZXMgZHVyaW5nIGEgd2dldG5zdHIoKSBjYWxsCisgICAod2hpY2ggIHNpbXVsYXRlcyAgY29va2VkLW1vZGUgbGluZSBlZGl0aW5nIGluIGFuIG5jdXJzZXMgd2luZG93KSwgdGhlCisgICBsaWJyYXJ5IG5vcm1hbGx5IGRvZXMgYWxsIGl0cyBvdXRwdXQgYXQgcmVmcmVzaCB0aW1lLgorCisgICBUaGUgIG1haW4gIGpvYiAgaXMgIHRvICBnbyAgZnJvbSAgdGhlICBjdXJyZW50IHN0YXRlIG9mIHRoZSBzY3JlZW4gKGFzCisgICByZXByZXNlbnRlZCAgaW4gIHRoZSBjdXJzY3Igd2luZG93IHN0cnVjdHVyZSkgdG8gdGhlIGRlc2lyZWQgbmV3IHN0YXRlCisgICAoYXMgcmVwcmVzZW50ZWQgaW4gdGhlIG5ld3NjciB3aW5kb3cgc3RydWN0dXJlKSwgd2hpbGUgZG9pbmcgYXMgbGl0dGxlCisgICBJL08gYXMgcG9zc2libGUuCisKKyAgIFRoZSAgYnJhaW5zICBvZiB0aGlzIG9wZXJhdGlvbiBhcmUgdGhlIG1vZHVsZXMgaGFzaG1hcC5jLCBoYXJkc2Nyb2xsLmMKKyAgIGFuZCAgbGliX2RvdXBkYXRlLmM7IHRoZSBsYXR0ZXIgdHdvIHVzZSBsaWJfbXZjdXIuYy4gRXNzZW50aWFsbHksIHdoYXQKKyAgIGhhcHBlbnMgbG9va3MgbGlrZSB0aGlzOgorCisgICBUaGUgIGhhc2htYXAuYyAgbW9kdWxlIHRyaWVzIHRvIGRldGVjdCB2ZXJ0aWNhbCBtb3Rpb24gY2hhbmdlcyBiZXR3ZWVuCisgICB0aGUgIHJlYWwgIGFuZCB2aXJ0dWFsIHNjcmVlbnMuIFRoaXMgaW5mb3JtYXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgdGhlCisgICBvbGRpbmRleCAgbWVtYmVycyAgaW4gIHRoZSAgbmV3c2NyICBzdHJ1Y3R1cmUuICBUaGVzZSAgYXJlIG1vZGlmaWVkIGJ5CisgICB2ZXJ0aWNhbC1tb3Rpb24gIGFuZCAgY2xlYXIgIG9wZXJhdGlvbnMsICBhbmQgIGJvdGggYXJlIHJlLWluaXRpYWxpemVkCisgICBhZnRlciBlYWNoIHVwZGF0ZS4gVG8gdGhpcyBjaGFuZ2Utam91cm5hbGxpbmcgaW5mb3JtYXRpb24sIHRoZSBoYXNobWFwCisgICBjb2RlICBhZGRzICBkZWR1Y3Rpb25zICBtYWRlIHVzaW5nIGEgbW9kaWZpZWQgSGVja2VsIGFsZ29yaXRobSBvbiBoYXNoCisgICB2YWx1ZXMgZ2VuZXJhdGVkIGZyb20gdGhlIGxpbmUgY29udGVudHMuCisKKyAgIFRoZSAgaGFyZHNjcm9sbC5jIG1vZHVsZSBjb21wdXRlcyBhbiBvcHRpbXVtIHNldCBvZiBzY3JvbGwsIGluc2VydGlvbiwKKyAgIGFuZCAgIGRlbGV0aW9uICAgb3BlcmF0aW9ucyAgdG8gIG1ha2UgIHRoZSAgaW5kaWNlcyAgbWF0Y2guICBJdCAgY2FsbHMKKyAgIF9uY19tdmN1cl9zY3JvbGxuKCkgaW4gbGliX212Y3VyLmMgdG8gZG8gdGhvc2UgbW90aW9ucy4KKworICAgVGhlbiAgbGliX2RvdXBkYXRlLmMgIGdvZXMgIHRvICB3b3JrLiAgSXRzICBqb2IgIGlzIHRvIGRvIGxpbmUtYnktbGluZQorICAgdHJhbnNmb3JtYXRpb25zICBvZiBjdXJzY3IgbGluZXMgdG8gbmV3c2NyIGxpbmVzLiBJdHMgbWFpbiB0b29sIGlzIHRoZQorICAgcm91dGluZSAgbXZjdXIoKSAgaW4gIGxpYl9tdmN1ci5jLiAgVGhpcyAgcm91dGluZSBkb2VzIGN1cnNvci1tb3ZlbWVudAorICAgb3B0aW1pemF0aW9uLCAgYXR0ZW1wdGluZyB0byBnZXQgZnJvbSBnaXZlbiBzY3JlZW4gbG9jYXRpb24gQSB0byBnaXZlbgorICAgbG9jYXRpb24gQiBpbiB0aGUgZmV3ZXN0IG91dHB1dCBjaGFyYWN0ZXJzIHBvc3NpYmxlLgorCisgICBJZiAgeW91ICB3YW50IHRvIHdvcmsgb24gc2NyZWVuIG9wdGltaXphdGlvbnMsIHlvdSBzaG91bGQgdXNlIHRoZSBmYWN0CisgICB0aGF0ICAoaW4gIHRoZSAgdHJhY2UtZW5hYmxlZCAgdmVyc2lvbiAgb2YgIHRoZSAgbGlicmFyeSkgZW5hYmxpbmcgdGhlCisgICBUUkFDRV9USU1FUyAgdHJhY2UgIGxldmVsICBjYXVzZXMgIGEgIHJlcG9ydCAgdG8gYmUgZW1pdHRlZCBhZnRlciBlYWNoCisgICBzY3JlZW4gIHVwZGF0ZSAgZ2l2aW5nICB0aGUgIGVsYXBzZWQgIHRpbWUgIGFuZCAgYSBjb3VudCBvZiBjaGFyYWN0ZXJzCisgICBlbWl0dGVkICBkdXJpbmcgIHRoZSAgdXBkYXRlLiAgWW91IGNhbiB1c2UgdGhpcyB0byB0ZWxsIHdoZW4gYW4gdXBkYXRlCisgICBvcHRpbWl6YXRpb24gaW1wcm92ZXMgZWZmaWNpZW5jeS4KKworICAgSW4gIHRoZSAgdHJhY2UtZW5hYmxlZCAgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0bworICAgZGlzYWJsZSBhbmQgcmUtZW5hYmxlIHZhcmlvdXMgb3B0aW1pemF0aW9ucyBhdCBydW50aW1lIGJ5IHR3ZWFraW5nIHRoZQorICAgdmFyaWFibGUgIF9uY19vcHRpbWl6ZV9lbmFibGUuICBTZWUgIHRoZSAgZmlsZSBpbmNsdWRlL2N1cnNlcy5oLmluIGZvcgorICAgbWFzayB2YWx1ZXMsIG5lYXIgdGhlIGVuZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBGb3JtcyBhbmQgTWVudSBMaWJyYXJpZXMKKworICAgVGhlICBmb3JtcyAgYW5kIG1lbnUgbGlicmFyaWVzIHNob3VsZCB3b3JrIHJlbGlhYmx5IGluIGFueSBlbnZpcm9ubWVudAorICAgeW91ICBjYW4gIHBvcnQgbmN1cnNlcyB0by4gVGhlIG9ubHkgcG9ydGFiaWxpdHkgaXNzdWUgYW55d2hlcmUgaW4gdGhlbQorICAgaXMgIHdoYXQgIGZsYXZvciAgb2YgIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhlIGJ1aWx0LWluIGZvcm0gZmllbGQgdHlwZQorICAgVFlQRV9SRUdFWFAgd2lsbCByZWNvZ25pemUuCisKKyAgIFRoZSAgY29uZmlndXJhdGlvbiAgY29kZSAgcHJlZmVycyB0aGUgUE9TSVggcmVnZXggZmFjaWxpdHksIG1vZGVsZWQgb24KKyAgIFN5c3RlbSAgVidzLCAgYnV0ICB3aWxsICBzZXR0bGUgIGZvciAgQlNEICByZWdleHBzIGlmIHRoZSBmb3JtZXIgaXNuJ3QKKyAgIGF2YWlsYWJsZS4KKworICAgSGlzdG9yaWNhbCAgbm90ZTogIHRoZSAgcGFuZWxzIGNvZGUgd2FzIHdyaXR0ZW4gcHJpbWFyaWx5IHRvIGFzc2lzdCBpbgorICAgcG9ydGluZyAgdTM4Nm1vbiAgMi4wIChjb21wLnNvdXJjZXMubWlzYyB2MTRpMDAxLTQpIHRvIHN5c3RlbXMgbGFja2luZworICAgcGFuZWxzICBzdXBwb3J0OyB1Mzg2bW9uIDIuMTAgYW5kIGJleW9uZCB1c2UgaXQuIFRoaXMgdmVyc2lvbiBoYXMgYmVlbgorICAgc2xpZ2h0bHkgY2xlYW5lZCB1cCBmb3IgbmN1cnNlcy4KKworICAgICAgICAgICAgICAgICAgICAgICAgQSBUb3VyIG9mIHRoZSBUZXJtaW5mbyBDb21waWxlcgorCisgICBUaGUgbmN1cnNlcyBpbXBsZW1lbnRhdGlvbiBvZiB0aWMgaXMgcmF0aGVyIGNvbXBsZXggaW50ZXJuYWxseTsgaXQgaGFzCisgICB0byAgZG8gIGEgIHRyeWluZyAgY29tYmluYXRpb24gIG9mIG1pc3Npb25zLiBUaGlzIHN0YXJ0cyB3aXRoIHRoZSBmYWN0CisgICB0aGF0LCAgaW4gIGFkZGl0aW9uICB0byAgaXRzIG5vcm1hbCBkdXR5IG9mIGNvbXBpbGluZyB0ZXJtaW5mbyBzb3VyY2VzCisgICBpbnRvICBsb2FkYWJsZSAgdGVybWluZm8gYmluYXJpZXMsIGl0IGhhcyB0byBiZSBhYmxlIHRvIGhhbmRsZSB0ZXJtY2FwCisgICBzeW50YXggYW5kIGNvbXBpbGUgdGhhdCB0b28gaW50byB0ZXJtaW5mbyBlbnRyaWVzLgorCisgICBUaGUgIGltcGxlbWVudGF0aW9uICB0aGVyZWZvcmUgIHN0YXJ0cyAgd2l0aCBhIHRhYmxlLWRyaXZlbiwgZHVhbC1tb2RlCisgICBsZXhpY2FsIGFuYWx5emVyIChpbiBjb21wX3NjYW4uYykuIFRoZSBsZXhlciBjaG9vc2VzIGl0cyBtb2RlICh0ZXJtY2FwCisgICBvciB0ZXJtaW5mbykgYmFzZWQgb24gdGhlIGZpcnN0IGAsJyBvciBgOicgaXQgZmluZHMgaW4gZWFjaCBlbnRyeS4gVGhlCisgICBsZXhlciAgZG9lcyAgYWxsICB0aGUgd29yayBvZiByZWNvZ25pemluZyBjYXBhYmlsaXR5IG5hbWVzIGFuZCB2YWx1ZXM7CisgICB0aGUgIGdyYW1tYXIgYWJvdmUgaXQgaXMgdHJpdmlhbCwganVzdCAicGFyc2UgZW50cmllcyB0aWxsIHlvdSBydW4gb3V0CisgICBvZiBmaWxlIi4KKworVHJhbnNsYXRpb24gb2YgTm9uLXVzZSBDYXBhYmlsaXRpZXMKKworICAgVHJhbnNsYXRpb24gICBvZiAgbW9zdCAgdGhpbmdzICBiZXNpZGVzICB1c2UgIGNhcGFiaWxpdGllcyAgaXMgIHByZXR0eQorICAgc3RyYWlnaHRmb3J3YXJkLiAgIFRoZSAgIGxleGljYWwgICBhbmFseXplcidzICAgdG9rZW5pemVyICBoYW5kcyAgZWFjaAorICAgY2FwYWJpbGl0eSAgbmFtZSAgdG8gYSBoYXNoIGZ1bmN0aW9uLCB3aGljaCBkcml2ZXMgYSB0YWJsZSBsb29rdXAuIFRoZQorICAgdGFibGUgZW50cnkgeWllbGRzIGFuIGluZGV4IHdoaWNoIGlzIHVzZWQgdG8gbG9vayB1cCB0aGUgdG9rZW4gdHlwZSBpbgorICAgYW5vdGhlciB0YWJsZSwgYW5kIGNvbnRyb2xzIGludGVycHJldGF0aW9uIG9mIHRoZSB2YWx1ZS4KKworICAgT25lICBwb3NzaWJseSAgaW50ZXJlc3RpbmcgYXNwZWN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgd2F5IHRoZQorICAgY29tcGlsZXIgIHRhYmxlcyAgYXJlICBpbml0aWFsaXplZC4gIEFsbCAgdGhlICB0YWJsZXMgYXJlIGdlbmVyYXRlZCBieQorICAgdmFyaW91cyAgYXdrL3NlZC9zaCAgc2NyaXB0cyAgZnJvbSAgYSBtYXN0ZXIgdGFibGUgaW5jbHVkZS9DYXBzOyB0aGVzZQorICAgc2NyaXB0cyAgYWN0dWFsbHkgIHdyaXRlICBDICBpbml0aWFsaXplcnMgIHdoaWNoICBhcmUgIGxpbmtlZCAgdG8gIHRoZQorICAgY29tcGlsZXIuIEZ1cnRoZXJtb3JlLCB0aGUgaGFzaCB0YWJsZSBpcyBnZW5lcmF0ZWQgaW4gdGhlIHNhbWUgd2F5LCBzbworICAgaXQgIGRvZXNuJ3QgIGhhdmUgIHRvICBiZSAgZ2VuZXJhdGVkIGF0IGNvbXBpbGVyIHN0YXJ0dXAgdGltZSAoYW5vdGhlcgorICAgYmVuZWZpdCAgb2YgIHRoaXMgIG9yZ2FuaXphdGlvbiAgaXMgIHRoYXQgIHRoZSAgaGFzaCAgdGFibGUgIGNhbiBiZSBpbgorICAgc2hhcmVhYmxlIHRleHQgc3BhY2UpLgorCisgICBUaHVzLCBhZGRpbmcgYSBuZXcgY2FwYWJpbGl0eSBpcyB1c3VhbGx5IHByZXR0eSB0cml2aWFsLCBqdXN0IGEgbWF0dGVyCisgICBvZiAgYWRkaW5nICBvbmUgIGxpbmUgdG8gdGhlIGluY2x1ZGUvQ2FwcyBmaWxlLiBXZSdsbCBoYXZlIG1vcmUgdG8gc2F5CisgICBhYm91dCB0aGlzIGluIHRoZSBzZWN0aW9uIG9uIFNvdXJjZS1Gb3JtIFRyYW5zbGF0aW9uLgorCitVc2UgQ2FwYWJpbGl0eSBSZXNvbHV0aW9uCisKKyAgIFRoZSAgYmFja2dyb3VuZCAgcHJvYmxlbSAgdGhhdCAgbWFrZXMgIHRpYyB0cmlja3kgaXNuJ3QgdGhlIGNhcGFiaWxpdHkKKyAgIHRyYW5zbGF0aW9uICBpdHNlbGYsICBpdCdzICB0aGUgIHJlc29sdXRpb24gb2YgdXNlIGNhcGFiaWxpdGllcy4gT2xkZXIKKyAgIHZlcnNpb25zIHdvdWxkIG5vdCBoYW5kbGUgZm9yd2FyZCB1c2UgcmVmZXJlbmNlcyBmb3IgdGhpcyByZWFzb24gKHRoYXQKKyAgIGlzLCBhIHVzaW5nIHRlcm1pbmFsIGFsd2F5cyBoYWQgdG8gZm9sbG93IGl0cyB1c2UgdGFyZ2V0IGluIHRoZSBzb3VyY2UKKyAgIGZpbGUpLiAgQnkgIGRvaW5nICB0aGlzLCAgdGhleSAgZ290ICBhd2F5IHdpdGggYSBzaW1wbGUgaW1wbGVtZW50YXRpb24KKyAgIHRhY3RpYzsgIGNvbXBpbGUgIGV2ZXJ5dGhpbmcgIGFzICBpdCAgYmxvd3MgYnksIHRoZW4gcmVzb2x2ZSB1c2VzIGZyb20KKyAgIGNvbXBpbGVkIGVudHJpZXMuCisKKyAgIFRoaXMgIHdvbid0ICBkbyAgZm9yICBuY3Vyc2VzLiAgVGhlICBwcm9ibGVtICBpcyAgdGhhdCAgdGhhdCB0aGUgd2hvbGUKKyAgIGNvbXBpbGF0aW9uICBwcm9jZXNzICBoYXMgIHRvICBiZSBlbWJlZGRhYmxlIGluIHRoZSBuY3Vyc2VzIGxpYnJhcnkgc28KKyAgIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBieSB0aGUgc3RhcnR1cCBjb2RlIHRvIHRyYW5zbGF0ZSB0ZXJtY2FwIGVudHJpZXMKKyAgIG9uICB0aGUgIGZseS4gIFRoZSAgZW1iZWRkZWQgIHZlcnNpb24gIGNhbid0ICBnbyBwcm9taXNjdW91c2x5IHdyaXRpbmcKKyAgIGV2ZXJ5dGhpbmcgIGl0ICB0cmFuc2xhdGVzICBvdXQgIHRvICBkaXNrICAtLSAgZm9yICBvbmUgdGhpbmcsIGl0IHdpbGwKKyAgIHR5cGljYWxseSBiZSBydW5uaW5nIHdpdGggbm9uLXJvb3QgcGVybWlzc2lvbnMuCisKKyAgIFNvICBvdXIgIHRpYyAgaXMgIGRlc2lnbmVkICB0byAgcGFyc2UgIGFuICBlbnRpcmUgdGVybWluZm8gZmlsZSBpbnRvIGEKKyAgIGRvdWJseS1saW5rZWQgIGNpcmN1bGFyICBsaXN0IG9mIGVudHJ5IHN0cnVjdHVyZXMgaW4tY29yZSwgYW5kIHRoZW4gZG8KKyAgIHVzZSAgcmVzb2x1dGlvbiAgaW4tbWVtb3J5ICBiZWZvcmUgd3JpdGluZyBldmVyeXRoaW5nIG91dC4gVGhpcyBkZXNpZ24KKyAgIGhhcyBvdGhlciBhZHZhbnRhZ2VzOiBpdCBtYWtlcyBmb3J3YXJkIGFuZCBiYWNrIHVzZS1yZWZlcmVuY2VzIGVxdWFsbHkKKyAgIGVhc3kgIChzbyAgd2UgZ2V0IHRoZSBsYXR0ZXIgZm9yIGZyZWUpLCBhbmQgaXQgbWFrZXMgY2hlY2tpbmcgZm9yIG5hbWUKKyAgIGNvbGxpc2lvbnMgYmVmb3JlIHRoZXkncmUgd3JpdHRlbiBvdXQgZWFzeSB0byBkby4KKworICAgQW5kICAgdGhpcyAgaXMgIGV4YWN0bHkgIGhvdyAgdGhlICBlbWJlZGRlZCAgdmVyc2lvbiAgd29ya3MuICBCdXQgIHRoZQorICAgc3RhbmQtYWxvbmUgIHVzZXItYWNjZXNzaWJsZSAgdmVyc2lvbiAgb2YgIHRpYyAgcGFydGx5ICByZXZlcnRzIHRvIHRoZQorICAgaGlzdG9yaWNhbCBzdHJhdGVneTsgaXQgd3JpdGVzIHRvIGRpc2sgKG5vdCBrZWVwaW5nIGluIGNvcmUpIGFueSBlbnRyeQorICAgd2l0aCBubyB1c2UgcmVmZXJlbmNlcy4KKworICAgVGhpcyAgaXMgIHN0cmljdGx5ICBhICBjb3JlLWVjb25vbXkgIGtsdWdlLCAgaW1wbGVtZW50ZWQgIGJlY2F1c2UgIHRoZQorICAgdGVybWluZm8gIG1hc3RlciBmaWxlIGlzIGxhcmdlIGVub3VnaCB0aGF0IHNvbWUgY29yZS1wb29yIHN5c3RlbXMgc3dhcAorICAgbGlrZSBjcmF6eSB3aGVuIHlvdSBjb21waWxlIGl0IGFsbCBpbiBtZW1vcnkuLi50aGVyZSBoYXZlIGJlZW4gcmVwb3J0cworICAgb2YgIHRoaXMgcHJvY2VzcyB0YWtpbmcgdGhyZWUgaG91cnMsIHJhdGhlciB0aGFuIHRoZSB0d2VudHkgc2Vjb25kcyBvcgorICAgbGVzcyB0eXBpY2FsIG9uIHRoZSBhdXRob3IncyBkZXZlbG9wbWVudCBib3guCisKKyAgIFNvLiBUaGUgZXhlY3V0YWJsZSB0aWMgcGFzc2VzIHRoZSBlbnRyeS1wYXJzZXIgYSBob29rIHRoYXQgaW1tZWRpYXRlbHkKKyAgIHdyaXRlcyAgb3V0ICB0aGUgIHJlZmVyZW5jZWQgIGVudHJ5IGlmIGl0IGhhcyBubyB1c2UgY2FwYWJpbGl0aWVzLiBUaGUKKyAgIGNvbXBpbGVyICBtYWluIGxvb3AgcmVmcmFpbnMgZnJvbSBhZGRpbmcgdGhlIGVudHJ5IHRvIHRoZSBpbi1jb3JlIGxpc3QKKyAgIHdoZW4gIHRoaXMgaG9vayBmaXJlcy4gSWYgc29tZSBvdGhlciBlbnRyeSBsYXRlciBuZWVkcyB0byByZWZlcmVuY2UgYW4KKyAgIGVudHJ5ICB0aGF0ICBnb3QgIHdyaXR0ZW4gIGltbWVkaWF0ZWx5LCB0aGF0J3MgT0s7IHRoZSByZXNvbHV0aW9uIGNvZGUKKyAgIHdpbGwgZmV0Y2ggaXQgb2ZmIGRpc2sgd2hlbiBpdCBjYW4ndCBmaW5kIGl0IGluIGNvcmUuCisKKyAgIE5hbWUgIGNvbGxpc2lvbnMgIHdpbGwgIHN0aWxsICBiZSAgZGV0ZWN0ZWQsICBqdXN0IG5vdCBhcyBjbGVhbmx5LiBUaGUKKyAgIHdyaXRlX2VudHJ5KCkgICBjb2RlICAgY29tcGxhaW5zICBiZWZvcmUgIG92ZXJ3cml0aW5nICBhbiAgZW50cnkgIHRoYXQKKyAgIHBvc3RkYXRlcyAgdGhlIHRpbWUgb2YgdGljJ3MgZmlyc3QgY2FsbCB0byB3cml0ZV9lbnRyeSgpLCBUaHVzIGl0IHdpbGwKKyAgIGNvbXBsYWluICBhYm91dCBvdmVyd3JpdGluZyBlbnRyaWVzIG5ld2x5IG1hZGUgZHVyaW5nIHRoZSB0aWMgcnVuLCBidXQKKyAgIG5vdCBhYm91dCBvdmVyd3JpdGluZyBvbmVzIHRoYXQgcHJlZGF0ZSBpdC4KKworU291cmNlLUZvcm0gVHJhbnNsYXRpb24KKworICAgQW5vdGhlciB1c2Ugb2YgdGljIGlzIHRvIGRvIHNvdXJjZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIHZhcmlvdXMgdGVybWNhcAorICAgYW5kIHRlcm1pbmZvIGZvcm1hdHMuIFRoZXJlIGFyZSBtb3JlIHZhcmlhbnRzIG91dCB0aGVyZSB0aGFuIHlvdSBtaWdodAorICAgdGhpbms7IHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYXJlIGRlc2NyaWJlZCBpbiB0aGUgY2FwdG9pbmZvKDEpIG1hbnVhbAorICAgcGFnZS4KKworICAgVGhlICB0cmFuc2xhdGlvbiBvdXRwdXQgY29kZSAoZHVtcF9lbnRyeSgpIGluIG5jdXJzZXMvZHVtcF9lbnRyeS5jKSBpcworICAgc2hhcmVkICB3aXRoICB0aGUgIGluZm9jbXAoMSkgIHV0aWxpdHkuICBJdCAgdGFrZXMgIHRoZSAgc2FtZSBpbnRlcm5hbAorICAgcmVwcmVzZW50YXRpb24gIHVzZWQgIHRvICBnZW5lcmF0ZSAgdGhlICBiaW5hcnkgIGZvcm0gIGFuZCBkdW1wcyBpdCB0bworICAgc3RhbmRhcmQgb3V0cHV0IGluIGEgc3BlY2lmaWVkIGZvcm1hdC4KKworICAgVGhlICBpbmNsdWRlL0NhcHMgIGZpbGUgIGhhcyAgYSBoZWFkZXIgY29tbWVudCBkZXNjcmliaW5nIHdheXMgeW91IGNhbgorICAgc3BlY2lmeSAgc291cmNlICB0cmFuc2xhdGlvbnMgIGZvciAgbm9uc3RhbmRhcmQgIGNhcGFiaWxpdGllcyAganVzdCBieQorICAgYWx0ZXJpbmcgdGhlIG1hc3RlciB0YWJsZS4gSXQncyBwb3NzaWJsZSB0byBzZXQgdXAgY2FwYWJpbGl0eSBhbGlhc2luZworICAgb3IgIHRlbGwgIHRoZSAgY29tcGlsZXIgIHRvICBwbGFpbiAgaWdub3JlICBhIGdpdmVuIGNhcGFiaWxpdHkgd2l0aG91dAorICAgd3JpdGluZyBhbnkgQyBjb2RlIGF0IGFsbC4KKworICAgRm9yICBjaXJjdW1zdGFuY2VzIHdoZXJlIHlvdSBuZWVkIHRvIGRvIGFsZ29yaXRobWljIHRyYW5zbGF0aW9uLCB0aGVyZQorICAgYXJlICBmdW5jdGlvbnMgIGluICBwYXJzZV9lbnRyeS5jIGNhbGxlZCBhZnRlciB0aGUgcGFyc2Ugb2YgZWFjaCBlbnRyeQorICAgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIHN1Y2ggdHJhbnNsYXRpb25zLiBUaGlzLAorICAgZm9yICBleGFtcGxlLCAgaXMgIHdoZXJlICB0aGUgQUlYIGJveDEgY2FwYWJpbGl0eSBnZXQgdHJhbnNsYXRlZCB0byBhbgorICAgYWNzYyBzdHJpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgVXRpbGl0aWVzCisKKyAgIFRoZSAgaW5mb2NtcCAgdXRpbGl0eSAgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzYW1lIGVudHJ5LWR1bXBpbmcKKyAgIGNvZGUgIHVzZWQgIGJ5IHRpYyBmb3Igc291cmNlIHRyYW5zbGF0aW9uLiBQZXJoYXBzIHRoZSBvbmUgaW50ZXJlc3RpbmcKKyAgIGFzcGVjdCAgb2YgIHRoZSAgY29kZSAgaXMgdGhlIHVzZSBvZiBhIHByZWRpY2F0ZSBmdW5jdGlvbiBwYXNzZWQgaW4gdG8KKyAgIGR1bXBfZW50cnkoKSAgdG8gIGNvbnRyb2wgIHdoaWNoICBjYXBhYmlsaXRpZXMgIGFyZSAgZHVtcGVkLiAgVGhpcyAgaXMKKyAgIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBoYW5kbGUgYm90aCB0aGUgb3JkaW5hcnkgRGUtY29tcGlsYXRpb24gY2FzZSBhbmQKKyAgIGVudHJ5IGRpZmZlcmVuY2UgcmVwb3J0aW5nLgorCisgICBUaGUgIHRwdXQgIGFuZCAgY2xlYXIgIHV0aWxpdGllcyAganVzdCAgZG8gYW4gZW50cnkgbG9hZCBmb2xsb3dlZCBieSBhCisgICB0cHV0cygpIG9mIGEgc2VsZWN0ZWQgY2FwYWJpbGl0eS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGUgVGlwcyBmb3IgRGV2ZWxvcGVycworCisgICBTZWUgICB0aGUgIFRPLURPICBmaWxlICBpbiAgdGhlICB0b3AtbGV2ZWwgIGRpcmVjdG9yeSAgb2YgIHRoZSAgc291cmNlCisgICBkaXN0cmlidXRpb24gZm9yIGFkZGl0aW9ucyB0aGF0IHdvdWxkIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwuCisKKyAgIFRoZSAgcHJlZml4ICBfbmNfICBzaG91bGQgYmUgdXNlZCBvbiBsaWJyYXJ5IHB1YmxpYyBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgIG5vdCAgcGFydCAgb2YgIHRoZSAgY3Vyc2VzICBBUEkgIGluICBvcmRlciB0byBwcmV2ZW50IHBvbGx1dGlvbiBvZiB0aGUKKyAgIGFwcGxpY2F0aW9uICBuYW1lc3BhY2UuICBJZiAgeW91IGhhdmUgdG8gYWRkIHRvIG9yIG1vZGlmeSB0aGUgZnVuY3Rpb24KKyAgIHByb3RvdHlwZXMgIGluIGN1cnNlcy5oLmluLCByZWFkIG5jdXJzZXMvTUtsaWJfZ2VuLnNoIGZpcnN0IHNvIHlvdSBjYW4KKyAgIGF2b2lkICBicmVha2luZyBYU0kgY29uZm9ybWFuY2UuIFBsZWFzZSBqb2luIHRoZSBuY3Vyc2VzIG1haWxpbmcgbGlzdC4KKyAgIFNlZSAgdGhlIElOU1RBTEwgZmlsZSBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBkaXN0cmlidXRpb24gZm9yIGRldGFpbHMKKyAgIG9uIHRoZSBsaXN0LgorCisgICBMb29rICBmb3IgIHRoZSAgc3RyaW5nICBGSVhNRSAgaW4gIHNvdXJjZSAgZmlsZXMgdG8gdGFnIG1pbm9yIGJ1Z3MgYW5kCisgICBwb3RlbnRpYWwgcHJvYmxlbXMgdGhhdCBjb3VsZCB1c2UgZml4aW5nLgorCisgICBEb24ndCAgdHJ5ICB0byBhdXRvLWRldGVjdCBPUyBmZWF0dXJlcyBpbiB0aGUgbWFpbiBib2R5IG9mIHRoZSBDIGNvZGUuCisgICBUaGF0J3MgdGhlIGpvYiBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uCisKKyAgIFRvIGhvbGQgZG93biBjb21wbGV4aXR5LCBkbyBtYWtlIHlvdXIgY29kZSBkYXRhLWRyaXZlbi4gRXNwZWNpYWxseSwgaWYKKyAgIHlvdSAgY2FuIGRyaXZlIGxvZ2ljIGZyb20gYSB0YWJsZSBmaWx0ZXJlZCBvdXQgb2YgaW5jbHVkZS9DYXBzLCBkbyBpdC4KKyAgIElmICB5b3UgIGZpbmQgIHlvdSAgbmVlZCAgdG8gYXVnbWVudCB0aGUgZGF0YSBpbiB0aGF0IGZpbGUgaW4gb3JkZXIgdG8KKyAgIGdlbmVyYXRlICB0aGUgIHByb3BlciB0YWJsZSwgdGhhdCdzIHN0aWxsIHByZWZlcmFibGUgdG8gYWQtaG9jIGNvZGUgLS0KKyAgIHRoYXQncyB3aHkgdGhlIGZpZnRoIGZpZWxkIChmbGFncykgaXMgdGhlcmUuCisKKyAgIEhhdmUgZnVuIQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0aW5nIEhpbnRzCisKKyAgIFRoZSAgZm9sbG93aW5nICBub3RlcyAgYXJlIGludGVuZGVkIHRvIGJlIGEgZmlyc3Qgc3RlcCB0b3dhcmRzIERPUyBhbmQKKyAgIE1hY2ludG9zaCBwb3J0cyBvZiB0aGUgbmN1cnNlcyBsaWJyYXJpZXMuCisKKyAgIFRoZSAgZm9sbG93aW5nIGxpYnJhcnkgbW9kdWxlcyBhcmUgYHB1cmUgY3Vyc2VzJzsgdGhleSBvcGVyYXRlIG9ubHkgb24KKyAgIHRoZSAgY3Vyc2VzICBpbnRlcm5hbCAgc3RydWN0dXJlcywgIGRvIGFsbCBvdXRwdXQgdGhyb3VnaCBvdGhlciBjdXJzZXMKKyAgIGNhbGxzICAobm90ICBpbmNsdWRpbmcgIHRwdXRzKCkgIGFuZCBwdXRwKCkpIGFuZCBkbyBub3QgY2FsbCBhbnkgb3RoZXIKKyAgIFVOSVggIHJvdXRpbmVzICBzdWNoICBhcyAgc2lnbmFsKDIpICBvciAgdGhlIHN0ZGlvIGxpYnJhcnkuIFRodXMsIHRoZXkKKyAgIHNob3VsZCBub3QgbmVlZCB0byBiZSBtb2RpZmllZCBmb3Igc2luZ2xlLXRlcm1pbmFsIHBvcnRzLgorCisgICAgIGxpYl9hZGRjaC5jICAgIGxpYl9hZGRzdHIuYyAgICBsaWJfYmtnZC5jICAgbGliX2JveC5jICAgbGliX2NsZWFyLmMKKyAgICAgbGliX2NscmJvdC5jICAgbGliX2NscmVvbC5jICBsaWJfZGVsY2guYyAgbGliX2RlbHdpbi5jICBsaWJfZXJhc2UuYworICAgICBsaWJfaW5jaHN0ci5jICBsaWJfaW5zY2guYyAgbGliX2luc2RlbC5jIGxpYl9pbnNzdHIuYyBsaWJfa2V5bmFtZS5jCisgICAgIGxpYl9tb3ZlLmMgICBsaWJfbXZ3aW4uYyAgIGxpYl9uZXd3aW4uYyAgIGxpYl9vdmVybGF5LmMgICBsaWJfcGFkLmMKKyAgICAgbGliX3ByaW50dy5jICBsaWJfcmVmcmVzaC5jICBsaWJfc2NhbncuYyAgbGliX3Njcm9sbC5jIGxpYl9zY3JyZWcuYworICAgICBsaWJfc2V0X3Rlcm0uYyAgbGliX3RvdWNoLmMgIGxpYl90cGFybS5jICBsaWJfdHB1dHMuYyAgbGliX3VuY3RybC5jCisgICAgIGxpYl93aW5kb3cuYyBwYW5lbC5jCisKKyAgIFRoaXMgbW9kdWxlIGlzIHB1cmUgY3Vyc2VzLCBidXQgY2FsbHMgb3V0c3RyKCk6CisKKyAgICAgbGliX2dldHN0ci5jCisKKyAgIFRoZXNlICBtb2R1bGVzICBhcmUgIHB1cmUgIGN1cnNlcywgIGV4Y2VwdCAgdGhhdCAgdGhleSB1c2UgdHB1dHMoKSBhbmQKKyAgIHB1dHAoKToKKworICAgICBsaWJfYmVlcC5jICAgbGliX2NvbG9yLmMgICBsaWJfZW5kd2luLmMgICBsaWJfb3B0aW9ucy5jICAgbGliX3Nsay5jCisgICAgIGxpYl92aWRhdHRyLmMKKworICAgVGhpcyBtb2R1bGVzIGFzc2lzdCBpbiBQT1NJWCBlbXVsYXRpb24gb24gbm9uLVBPU0lYIHN5c3RlbXM6CisKKyAgIHNpZ2FjdGlvbi5jCisgICAgICAgICAgc2lnbmFsIGNhbGxzCisKKyAgIFRoZSAgICBmb2xsb3dpbmcgICBzb3VyY2UgICBmaWxlcyAgIHdpbGwgICBub3QgICBiZSAgIG5lZWRlZCAgIGZvciAgIGEKKyAgIHNpbmdsZS10ZXJtaW5hbC10eXBlIHBvcnQuCisKKyAgICAgYWxsb2NfZW50cnkuYyAgIGNhcHRvaW5mby5jICAgY2xlYXIuYyAgIGNvbXBfY2FwdGFiLmMgIGNvbXBfZXJyb3IuYworICAgICBjb21wX2hhc2guYyAgIGNvbXBfbWFpbi5jICAgY29tcF9wYXJzZS5jICBjb21wX3NjYW4uYyAgZHVtcF9lbnRyeS5jCisgICAgIGluZm9jbXAuYyBwYXJzZV9lbnRyeS5jIHJlYWRfZW50cnkuYyB0cHV0LmMgd3JpdGVfZW50cnkuYworCisgICBUaGUgIGZvbGxvd2luZyAgbW9kdWxlcyB3aWxsIHVzZSBvcGVuKCkvcmVhZCgpL3dyaXRlKCkvY2xvc2UoKS9sc2VlaygpCisgICBvbiBmaWxlcywgYnV0IG5vIG90aGVyIE9TIGNhbGxzLgorCisgICBsaWJfc2NyZWVuLmMKKyAgICAgICAgICB1c2VkIHRvIHJlYWQvd3JpdGUgc2NyZWVuIGR1bXBzCisKKyAgIGxpYl90cmFjZS5jCisgICAgICAgICAgdXNlZCB0byB3cml0ZSB0cmFjZSBkYXRhIHRvIHRoZSBsb2dmaWxlCisKKyAgIE1vZHVsZXMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlIG1vZGlmaWVkIGZvciBhIHBvcnQgc3RhcnQgaGVyZToKKworICAgVGhlICBmb2xsb3dpbmcgIG1vZHVsZXMgIGFyZSAgYHB1cmUgIGN1cnNlcycgIGJ1dCAgY29udGFpbiBhc3N1bXB0aW9ucworICAgaW5hcHByb3ByaWF0ZSBmb3IgYSBtZW1vcnktbWFwcGVkIHBvcnQuCisKKyAgIGxpYl9sb25nbmFtZS5jCisgICAgICAgICAgYXNzdW1lcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGVybWluYWxzCisKKyAgIGxpYl9hY3MuYworICAgICAgICAgIGFzc3VtZXMgYWNzX21hcCBhcyBhIGRvdWJsZSBpbmRpcmVjdGlvbgorCisgICBsaWJfbXZjdXIuYworICAgICAgICAgIGFzc3VtZXMgY3Vyc29yIG1vdmVzIGhhdmUgdmFyaWFibGUgY29zdAorCisgICBsaWJfdGVybWNhcC5jCisgICAgICAgICAgYXNzdW1lcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGVybWluYWxzCisKKyAgIGxpYl90aS5jCisgICAgICAgICAgYXNzdW1lcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGVybWluYWxzCisKKyAgIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyB1c2UgVU5JWC1zcGVjaWZpYyBjYWxsczoKKworICAgbGliX2RvdXBkYXRlLmMKKyAgICAgICAgICBpbnB1dCBjaGVja2luZworCisgICBsaWJfZ2V0Y2guYworICAgICAgICAgIHJlYWQoKQorCisgICBsaWJfaW5pdHNjci5jCisgICAgICAgICAgZ2V0ZW52KCkKKworICAgbGliX25ld3Rlcm0uYworICAgbGliX2JhdWRyYXRlLmMKKyAgIGxpYl9rZXJuZWwuYworICAgICAgICAgIHZhcmlvdXMgdHR5LW1hbmlwdWxhdGlvbiBhbmQgc3lzdGVtIGNhbGxzCisKKyAgIGxpYl9yYXcuYworICAgICAgICAgIHZhcmlvdXMgdHR5LW1hbmlwdWxhdGlvbiBjYWxscworCisgICBsaWJfc2V0dXAuYworICAgICAgICAgIHZhcmlvdXMgdHR5LW1hbmlwdWxhdGlvbiBjYWxscworCisgICBsaWJfcmVzdGFydC5jCisgICAgICAgICAgdmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGNhbGxzCisKKyAgIGxpYl90c3RwLmMKKyAgICAgICAgICBzaWduYWwtbWFuaXB1bGF0aW9uIGNhbGxzCisKKyAgIGxpYl90d2FpdC5jCisgICAgICAgICAgZ2V0dGltZW9mZGF5KCksIHNlbGVjdCgpLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKyAgICBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KKworICAgKE5vdGU6IFRoaXMgaXMgbm90IHRoZSBidWcgYWRkcmVzcyEpCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9BZGE5NS5odG1sIGIvZG9jL2h0bWwvQWRhOTUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNiOWRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvQWRhOTUuaHRtbApAQCAtMCwwICsxLDE4MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMi8vRU4iPgorPCEtLQorICAkSWQ6IEFkYTk1Lmh0bWwsdiAxLjYgMjAwNC8wMS8xOCAwMDozMjo0NyB0b20gRXhwICQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGNsZWFyLjEsdiAxLjMgMjAwMC8wNy8xNSAyMzo1OTozNSBjaGluYSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPkFkYTk1IEJpbmRpbmcgZm9yIG5jdXJzZXM8L1RpdGxlPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+QWRhOTUgQmluZGluZyBmb3IgbmN1cnNlczwvSDE+CitieSBKJnV1bWw7cmdlbiBQZmVpZmVyLgorCis8SFIgU0laRT0zIE5PU0hBREU+Cis8SDI+R2VuZXJhbCBSZW1hcmtzPC9IMj4KKzxVTD4KKzxMST5UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBWZXJzaW9uIDAxLjAwIG9mIHRoZSBiaW5kaW5nLjwvTEk+Cis8TEk+VGhlIGZ1bmN0aW9uYWxpdHkgaXMgbW9kZWxlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIG5jdXJzZXMKK3BhY2thZ2UsIGEgY2xvbmUgb2YgdGhlIFNWcjQgY3Vyc2VzIG1vZGVsLjxCUj4KK0kgZGlkIHRoZSBkZXZlbG9wbWVudCBvbiBhbiBJbnRlbCBib3ggcnVubmluZyB0aGUgbGF0ZXN0IHN0YWJsZSByZWxlYXNlIG9mCis8QSBIUkVGPSJodHRwOi8vd3d3LmxpbnV4Lm9yZyI+TGludXg8L0E+LCBuY3Vyc2VzIGFuZCB0aGUgbW9zdCByZWNlbnQgcmVsZWFzZWQKKzxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOVSBBZGEgVHJhbnNsYXRvcjwvQT4KK2duYXQgdmVyc2lvbnMuIEZvciBhbnkgb2xkZXIgdmVyc2lvbnMgb2YgbmN1cnNlcyBhbmQgZ25hdAoraXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yay48L0xJPgorPExJPllvdSBtdXN0IGhhdmUgdGhlIG00IG1hY3JvcHJvY2Vzc29yIHRvIGJ1aWxkIHRoaXMgcGFja2FnZS4KK0lmIHlvdSBkb24ndCBoYXZlIHRoaXMgcHJvZ3JhbSwgeW91IGNhbiBnZXQgdGhlIEZTRiB2ZXJzaW9uCis8QSBIUkVGPSJmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251LyI+aGVyZTwvQT4uPC9MST4KKzxMST5BZGEgcHJvZ3JhbXMgYXJlIHN1cHBvc2VkIHRvIGJlIHJlYWRhYmxlLiBPbmUgb2YgbXkKK2Zhdm9yaXRlIG1ldGhvZHMgdG8gbWFrZSBjb2RlIHJlYWRhYmxlIGlzIHRvIHVzZSBleHByZXNzaXZlCituYW1lcyBmb3IgdGhlIGlkZW50aWZpZXJzLiBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIGEgbWFwcGluZworb2YgdGhlIGNyeXB0aWMgY3Vyc2VzIG5hbWVzIHRvIHRoZSBBZGEgbmFtZXMgaW4gdGhpcyA8QSBIUkVGPSJhZGEvdGFibGUuaHRtbCI+dGFibGU8L0E+LjwvTEk+Cis8TEk+VGhpcyBpcyBub3QgYSB0eXBpY2FsIG9uZS10by1vbmUgaW50ZXJmYWNlIG1hcHBpbmcuIEl0IGlzCitjbG9zZSB0byBvbmUtdG8tb25lIG9uIHRoZSBmdW5jdGlvbmFsIGxldmVsLiBFYWNoIChuKWN1cnNlcyBmdW5jdGlvbgoraGFzIGl0J3MgY291bnRlcnBhcnQgd2l0aCBhIG1vcmUgb3IgbGVzcyBzaW1pbGFyIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdAoraW4gdGhlIGJpbmRpbmcuIEl0IGlzIG5vdCBvbmUtdG8tb25lIHdpdGggcmVzcGVjdCB0byB0aGUgZGF0YXR5cGVzLgorSSB0cmllZCB0byBtYWtlIHJlY29yZHMgb3V0IG9mIHRoZSBmbGF0IGNodHlwZSBhbmQgc2ltaWxhciBzdHJ1Y3R1cmVzLAorc28geW91IGRvbid0IGhhdmUgdG8gZG8gYml0IG9wZXJhdGlvbnMgdG8gbWFyayBhbiBhdHRyaWJ1dGVkIGNoYXJhY3RlcgorYXMgYm9sZC4gSnVzdCBtYWtlIHRoZSBib29sZWFuIG1lbWJlciA8U1RST05HPmJvbGQ8L1NUUk9ORz4gb2YgdGhlIHJlY29yZAordHJ1ZS4gVGhlIGJpbmRpbmcgYWxzbyBoaWRlcyB0aGUgc3RydWN0dXJlcyBsaWtlIFdJTkRPVywgUEFORUwsIE1FTlUsIEZPUk0KK2V0Yy4gISBJdCdzIGEgcHVyZSBmdW5jdGlvbmFsIEFQSS48L0xJPgorPExJPkkgdHJ5IHRvIGRvIGFzIG11Y2ggZXJyb3IgY2hlY2tpbmcgYXMgcG9zc2libGUgYW5kIGZlYXNpYmxlCitpbiB0aGUgYmluZGluZy4gSSB3aWxsIHJhaXNlIGFuIEFkYSBleGNlcHRpb24gd2hlbiBzb21ldGhpbmcKK3dlbnQgd3JvbmcgaW4gdGhlIGxvdy1sZXZlbCBjdXJzZXMuIFRoaXMgaGFzIHRoZSBlZmZlY3QgdGhhdCAtIGF0IGxlYXN0CitmaXJzdCB0aW1lIGluIG15IGxpZmUgLSAobiljdXJzZXMgcHJvZ3JhbXMgaGF2ZSBub3cgYSB2ZXJ5IHJpZ2lkIGVycm9yCitjaGVja2luZywgYnV0IC0gdGhhbmtzIHRvIEFkYSAtIHlvdSBkb24ndCBoYXZlIHRvIGNvZGUgdGhlIG9yZ2lhc3RpYworZXJyb3IgY2hlY2tpbmcgc3R5bGUgb2YgQy48L0xJPgorPExJPlN1cHBvcnQgZm9yIHdpZGUgY2hhcmFjdGVycyBpcyBjdXJyZW50bHkgbm90IGluIHRoZSBiaW5kaW5nLCBhcyBpdAoraXMgbm90IHJlYWxseSBpbiBuY3Vyc2VzIGF0IHRoaXMgcG9pbnQgaW4gdGltZS48L0xJPgorPC9VTD4KKworPEgyPkxpbWl0YXRpb25zPC9IMj4KKzxVTD4KKzxMST5JIHByb3ZpZGUgbm8gU0NSRUVOIGRhdGF0eXBlIGFuZCBmdW5jdGlvbnMgdG8gc2V0IGEgbmV3IHNjcmVlbi4KK0lmIHlvdSBuZWVkIHRoaXMgKG1vc3RseSBmb3IgZGVidWdnaW5nIEkgZ3Vlc3MpLCB3cml0ZSBhIHNtYWxsCitDIHJvdXRpbmUgZG9pbmcgYWxsIHRoaXMgYW5kIGltcG9ydCBpdCBpbnRvIHlvdXIgQWRhIHByb2dyYW0uPC9MST4KKzxMST5JIHByb3ZpZGUgbm8gZnVuY3Rpb25zIHRvIHN3aXRjaCBvbi9vZmYgY3Vyc2VzIHRyYWNpbmcgb3B0aW9ucy4KK1NhbWUgc3VnZ2VzdGlvbiBhcyBhYm92ZS48L0xJPgorPExJPkFsdGhvdWdoIEFkYTk1IGlzIGFuIE9PIExhbmd1YWdlLCB0aGlzIGJpbmRpbmcgZG9lc24ndCBwcm92aWRlCithbiBPTyBhYnN0cmFjdGlvbiBvZiB0aGUgKG4pY3Vyc2VzIGZ1bmN0aW9uYWxpdHkuIEFzIG1lbnRpb25lZCBhYm92ZQoraXQncyBhIHRoaW4gYmluZGluZyBmb3IgdGhlIChuKWN1cnNlcyBmdW5jdGlvbnMuIEJ1dCB3aXRob3V0IGFueQorZG91YnQgaXQgd291bGQgYmUgbmljZSB0byBidWlsZCBvbiB0b3Agb2YgdGhpcyBhbiBPTyBhYnN0cmFjdGlvbgorb2YgKG4pY3Vyc2VzIGZ1bmN0aW9uYWxpdHkuPEJSPgorVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoZSBtZXRob2QgaG93IGZpZWxkdHlwZXMgYXJlIHJlcHJlc2VudGVkIGluCit0aGlzIEJpbmRpbmcuIFdlIHByb3ZpZGUgYW4gYWJzdHJhY3QgdGFnZ2VkIHR5cGUgRmllbGRfVHlwZSBmcm9tCit3aGljaCB0aGUgdmFyaW91cyBmaWVsZHR5cGVzIGFyZSBkZXJpdmVkLjwvTEk+Cis8TEk+SSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgdGhlIGxpbmtfZmllbGR0eXBlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlCitmb3JtcyBzdWJzeXN0ZW0uPC9MST4KKzxMST5UaGUgKl9JTyBwYWNrYWdlcyBhcmUgY3VycmVudGx5IG91dHB1dCBvbmx5LjwvTEk+Cis8L1VMPgorCis8SDI+SGllcmFyY2h5IG9mIHBhY2thZ2VzPC9IMj4KKzxVTD4KKzxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtIj5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+CisgICAgPFVMPjxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSI+Q3Vyc2VzPC9BPgorCTxVTD48TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0iPk1vdXNlPC9BPgorICAgICAgICAgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSI+UGFuZWxzPC9BPgorICAgICAgICAgICAgPFVMPjxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtIj5Vc2VyX0RhdGE8L0E+CisgICAgICAgICAgICA8L1VMPgorCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0iPk1lbnVzPC9BPgorCSAgICAgICAgPFVMPjxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSI+TWVudV9Vc2VyX0RhdGE8L0E+CisJCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0iPkl0ZW1fVXNlcl9EYXRhPC9BPgorCQk8L1VMPgorCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0iPkZvcm1zPC9BPgorCQk8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtIj5Gb3JtX1VzZXJfRGF0YTwvQT4KKwkJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0iPkZpZWxkX1VzZXJfRGF0YTwvQT4KKwkJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSI+RmllbGRfVHlwZXM8L0E+CisJCSAgICA8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtIj5BbHBoYTwvQT4KKwkJICAgICAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtIj5BbHBoYU51bWVyaWM8L0E+CisJCSAgICAgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtIj5JbnRGaWVsZDwvQT4KKwkJICAgICAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSI+TnVtZXJpYzwvQT4KKwkJICAgICAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtIj5SZWdFeHA8L0E+CisJCSAgICAgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSI+SVBWNF9BZGRyZXNzPC9BPgorCQkgICAgICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSI+RW51bWVyYXRpb248L0E+CisJCSAgICAgICAgPFVMPjxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0iPkFkYTwvQT4KKwkJCTwvVUw+CisJCQk8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSI+VXNlcjwvQT4KKwkJICAgICAgICA8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtIj5DaG9pY2U8L0E+CisgICAgICAgICAgICAgICAgICAgICAgICA8L1VMPgorICAgICAgICAgICAgICAgICAgICAgPC9VTD4KKwkJPC9VTD4KKwkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0iPlRleHRfSU88L0E+CisJCTxVTD48TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtIj5JbnRlZ2VyX0lPPC9BPgorCQkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0iPkZsb2F0X0lPPC9BPgorCQkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0iPkZpeGVkX0lPPC9BPgorCQkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSI+RGVjaW1hbF9JTzwvQT4KKwkJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0iPk1vZHVsYXJfSU88L0E+CisJCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSI+RW51bWVyYXRpb25fSU88L0E+CisJCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtIj5Db21wbGV4X0lPPC9BPgorCQk8L1VMPgorICAgICAgICAgPC9VTD4KKyAgICAgPC9VTD4KKzwvVUw+CitJZiB5b3Ugd2FudCB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBodG1sIHBhZ2VzIG9mIHRoZSBwYWNrYWdlIHNwZWNzLCBjbGljayA8QSBIUkVGPSJhZGEvaW5kZXguaHRtIj5oZXJlPC9BPi4KKzxIMj5JbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC9IMj4KKzxIND5CZWhpbmQgdGhlIGFic3RyYWN0aW9uPC9IND4KK0FsbCB0aGUgbmV3IHR5cGVzIGxpa2UgPFNUUk9ORz5XaW5kb3c8L1NUUk9ORz4sIDxTVFJPTkc+UGFuZWw8L1NUUk9ORz4sCis8U1RST05HPk1lbnU8L1NUUk9ORz4sIDxTVFJPTkc+Rm9ybTwvU1RST05HPiBldGMuIGFyZSBqdXN0CitvcGFxdWUgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBwb2ludGVycyB0byB0aGUgY29ycmVzcG9uZGluZworbG93IGxldmVsIChuKWN1cnNlcyBzdHJ1Y3R1cmVzIGxpa2UKKzxTVFJPTkc+V0lORE9XICo8L1NUUk9ORz4sIDxTVFJPTkc+UEFORUwgKjwvU1RST05HPiwKKzxTVFJPTkc+TUVOVSAqPC9TVFJPTkc+IG9yIDxTVFJPTkc+Rk9STSAqPC9TVFJPTkc+LgorU28geW91IGNhbiBzYWZlbHkgcGFzcyB0aGVtIHRvIEMgcm91dGluZXMgdGhhdCBleHBlY3QgYSBwb2ludGVyCit0byBvbmUgb2YgdGhvc2Ugc3RydWN0dXJlcy4KKzxIND5FeHRlbmRlZCByaXBvZmZsaW5lKCkgdXNhZ2U8L0g0PgorVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gb2YgKG4pY3Vyc2VzIHNheXMsIHRoYXQgdGhlIGxpbmUgcGFyYW1ldGVyCitkZXRlcm1pbmVzIG9ubHkgd2hldGhlciBvciBub3QgZXhhY3RseSA8U1RST05HPm9uZTwvU1RST05HPiBsaW5lIGlzCitzdG9sZW4gZnJvbSB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgc2NyZWVuLiBTbyBlc3NlbnRpYWxseSBvbmx5IHRoZQorc2lnbiBvZiB0aGUgcGFyYW1ldGVyIGlzIGV2YWx1YXRlZC4gbmN1cnNlcyBoYXMgaW50ZXJuYWxseSBpbXBsZW1lbnRlZAoraXQgaW4gYSB3YXksIHRoYXQgdXNlcyB0aGUgbGluZSBwYXJhbWV0ZXIgYWxzbyB0byBjb250cm9sIHRoZSBhbW91bnQgb2YKK2xpbmVzIHRvIHN0ZWFsLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIHRoZSA8U1RST05HPlJpcF9PZmZfTGluZXM8L1NUUk9ORz4KK3JvdXRpbmUgb2YgdGhlIGJpbmRpbmcuCis8SDQ+PEEgTkFNRT0idXNlcnBvaW50ZXIiPkhvdyB1c2VyIGRlZmluZWQgZmllbGQgdHlwZXMgd29yazwvQT48L0g0PgorVEJECis8SDQ+RW51bWVyYXRpb24gZmllbGRzIGhhbmRsaW5nPC9IND4KK1RoZSAobiljdXJzZXMgZG9jdW1lbnRhdGlvbiBzYXlzLCB0aGF0IHRoZSBTdHJpbmcgYXJyYXlzIHRvIGJlIHBhc3NlZCB0bworYW4gVFlQRV9FTlVNIGZpZWxkdHlwZSBtdXN0IG5vdCBiZSBhdXRvbWF0aWMgdmFyaWFibGVzLiBUaGlzIGlzIG5vdCB0cnVlCitpbiB0aGlzIGJpbmRpbmcsIGJlY2F1c2UgaXQgaXMgaW50ZXJuYWxseSBhcnJhbmdlZCB0byBzYWZlbHkgY29weSB0aGVzZQordmFsdWVzLgorPEg0PjxBIE5BTUU9ImNvbXBpbGVyIj5Vc2luZyBvdGhlciBBZGEgY29tcGlsZXJzPC9BPjwvSDQ+CitUaGlzIHNob3VsZCBiYXNpY2FsbHkgbm90IGJlIGEgcHJvYmxlbS4KKzxIND5Qb3J0IHRvIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnM8L0g0PgorQmFzaWNhbGx5IGl0IHNob3VsZCBub3QgYmUgdG9vIGhhcmQgdG8gbWFrZSBhbGwgdGhpcyBydW4gb24gYSByZWd1bGFyIFNWcjQKK2ltcGxlbWVudGF0aW9uIG9mIGN1cnNlcy4gVGhlIHByb2JsZW1zIGFyZSBwcm9iYWJseSB0aGVzZTo8QlI+Cis8VUw+Cis8TEk+bmN1cnNlcyBoYXMgc29tZSBhZGRpdGlvbmFsIGZlYXR1cmVzIHdoaWNoIGFyZSBwcmVzZW50ZWQgaW4gdGhpcyBiaW5kaW5nLiBZb3UKK2hhdmUgdHdvIGNob2ljZXMgdG8gZGVhbCB3aXRoIHRoaXM6Cis8VUw+Cis8TEk+RW11bGF0ZSB0aGUgZmVhdHVyZSBpbiB0aGlzIGJpbmRpbmc8L0xJPgorPExJPlJhaXNlIGFuIGV4Y2VwdGlvbiBmb3Igbm9uIGltcGxlbWVudGVkIGZlYXR1cmVzPC9MST4KKzwvVUw+CitNb3N0IGxpa2VseSB5b3Ugd2lsbCBmb2xsb3cgYSBtaXhlZCBhcHByb2FjaC4gU29tZSBmZWF0dXJlcyBhcmUgZWFzeSB0byBzaW11bGF0ZSwKK290aGVycyB3aWxsIGJlIGhhcmQgaWYgbm90IGltcG9zc2libGUuPC9MST4KKzwvVUw+CitJJ20gcXVpdGUgc3VyZSBJIGZvcmdvdCBzb21ldGhpbmcuCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9OQ1VSU0VTLVByb2dyYW1taW5nLUhPV1RPLmh0bWwgYi9kb2MvaHRtbC9OQ1VSU0VTLVByb2dyYW1taW5nLUhPV1RPLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExMDEwNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uaHRtbApAQCAtMCwwICsxLDY0MTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0KKyJIVE1MIFRpZHkgZm9yIExpbnV4L3g4NiAodmVycyAxc3QgRGVjZW1iZXIgMjAwNCksIHNlZSB3d3cudzMub3JnIj4KKzx0aXRsZT5OQ1VSU0VTIFByb2dyYW1taW5nIEhPV1RPPC90aXRsZT4KKzxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0KKyJNb2R1bGFyIERvY0Jvb2sgSFRNTCBTdHlsZXNoZWV0IFZlcnNpb24gMS43Ij4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJBUlRJQ0xFIiBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIiBsaW5rPQorIiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8ZGl2IGNsYXNzPSJBUlRJQ0xFIj4KKzxkaXYgY2xhc3M9IlRJVExFUEFHRSI+Cis8aDEgY2xhc3M9IlRJVExFIj48YSBuYW1lPSJBRU4yIiBpZD0iQUVOMiI+TkNVUlNFUyBQcm9ncmFtbWluZworSE9XVE88L2E+PC9oMT4KKzxoMyBjbGFzcz0iQVVUSE9SIj48YSBuYW1lPSJBRU40IiBpZD0iQUVONCI+UHJhZGVlcCBQYWRhbGE8L2E+PC9oMz4KKzxkaXYgY2xhc3M9IkFGRklMSUFUSU9OIj4KKzxkaXYgY2xhc3M9IkFERFJFU1MiPgorPHAgY2xhc3M9IkFERFJFU1MiPjxjb2RlIGNsYXNzPSJFTUFJTCI+Jmx0OzxhIGhyZWY9CisibWFpbHRvOnBwYWRhbGFAZ21haWwuY29tIj5wcGFkYWxhQGdtYWlsLmNvbTwvYT4mZ3Q7PC9jb2RlPjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8cCBjbGFzcz0iUFVCREFURSI+djEuOSwgMjAwNS0wNi0yMDxicj48L3A+Cis8ZGl2IGNsYXNzPSJSRVZISVNUT1JZIj4KKzx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KKzx0cj4KKzx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjMiPjxiPlJldmlzaW9uCitIaXN0b3J5PC9iPjwvdGg+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjk8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDA1LTA2LTIwPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5UaGUgbGljZW5zZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIHRoZQorTUlULXN0eWxlIGxpY2Vuc2UgdXNlZCBieSBOQ1VSU0VTLiBOb3RlIHRoYXQgdGhlIHByb2dyYW1zIGFyZSBhbHNvCityZS1saWNlbnNlZCB1bmRlciB0aGlzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjg8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDA1LTA2LTE3PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5Mb3RzIG9mIHVwZGF0ZXMuIEFkZGVkIHJlZmVyZW5jZXMgYW5kCitwZXJsIGV4YW1wbGVzLiBDaGFuZ2VzIHRvIGV4YW1wbGVzLiBNYW55IGdyYW1tYXRpY2FsIGFuZCBzdHlsaXN0aWMKK2NoYW5nZXMgdG8gdGhlIGNvbnRlbnQuIENoYW5nZXMgdG8gTkNVUlNFUyBoaXN0b3J5LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjcuMTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDItMDYtMjU8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPkFkZGVkIGEgUkVBRE1FIGZpbGUgZm9yIGJ1aWxkaW5nIGFuZAoraW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBmcm9tIHNvdXJjZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMS43PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+MjAwMi0wNi0yNTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzZWQgYnk6IHBwYWRhbGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+QWRkZWQgIk90aGVyIGZvcm1hdHMiIHNlY3Rpb24gYW5kIG1hZGUKK2EgbG90IG9mIGZhbmN5IGNoYW5nZXMgdG8gdGhlIHByb2dyYW1zLiBJbmxpbmluZyBvZiBwcm9ncmFtcyBpcworZ29uZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMS42LjE8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAyLTAyLTI0PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5SZW1vdmVkIHRoZSBvbGQgQ2hhbmdlbG9nIHNlY3Rpb24sCitjbGVhbmVkIHRoZSBtYWtlZmlsZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMS42PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+MjAwMi0wMi0xNjwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzZWQgYnk6IHBwYWRhbGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+Q29ycmVjdGVkIGEgbG90IG9mIHNwZWxsaW5nIG1pc3Rha2VzLAorYWRkZWQgQUNTIHZhcmlhYmxlcyBzZWN0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDEuNTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDItMDEtMDU8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPkNoYW5nZWQgc3RydWN0dXJlIHRvIHByZXNlbnQgcHJvcGVyCitUT0M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMS4zLjE8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAxLTA3LTI2PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5Db3JyZWN0ZWQgbWFpbnRhaW5lcnMgcGFyYWdyYXBoLAorQ29ycmVjdGVkIHN0YWJsZSByZWxlYXNlIG51bWJlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjM8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAxLTA3LTI0PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5BZGRlZCBjb3B5cmlnaHQgbm90aWNlcyB0byBtYWluCitkb2N1bWVudCAoTERQIGxpY2Vuc2UpIGFuZCBwcm9ncmFtcyAoR1BMKSwgQ29ycmVjdGVkCitwcmludHdfZXhhbXBsZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMS4yPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+MjAwMS0wNi0wNTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzZWQgYnk6IHBwYWRhbGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+SW5jb3Jwb3JhdGVkIHJhdmkncyBjaGFuZ2VzLiBNYWlubHkgdG8KK2ludHJvZHVjdGlvbiwgbWVudSwgZm9ybSwganVzdGZvcmZ1biBzZWN0aW9uczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjE8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAxLTA1LTIyPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5BZGRlZCAiYSB3b3JkIGFib3V0IHdpbmRvdyIgc2VjdGlvbiwKK0FkZGVkIHNjYW53X2V4YW1wbGUuPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2PgorPGRpdiBjbGFzcz0iQUJTVFJBQ1QiPjxhIG5hbWU9IkFFTjY3IiBpZD0iQUVONjciPjwvYT4KKzxwPjxlbT5UaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGJlIGFuICJBbGwgaW4gT25lIiBndWlkZSBmb3IKK3Byb2dyYW1taW5nIHdpdGggbmN1cnNlcyBhbmQgaXRzIHNpc3RlciBsaWJyYXJpZXMuIFdlIGdyYWR1YXRlIGZyb20KK2Egc2ltcGxlICJIZWxsbyBXb3JsZCIgcHJvZ3JhbSB0byBtb3JlIGNvbXBsZXggZm9ybSBtYW5pcHVsYXRpb24uCitObyBwcmlvciBleHBlcmllbmNlIGluIG5jdXJzZXMgaXMgYXNzdW1lZC4gU2VuZCBjb21tZW50cyB0bworPGEgaHJlZj0ibWFpbHRvOnBwYWRhbGFAZ21haWwuY29tIiB0YXJnZXQ9Il90b3AiPnRoaXMKK2FkZHJlc3M8L2E+PC9lbT48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGhyPjwvZGl2PgorPGRpdiBjbGFzcz0iVE9DIj4KKzxkbD4KKzxkdD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L2R0PgorPGR0PjEuIDxhIGhyZWY9IiNJTlRSTyI+SW50cm9kdWN0aW9uPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MS4xLiA8YSBocmVmPSIjV0hBVElTIj5XaGF0IGlzIE5DVVJTRVM/PC9hPjwvZHQ+Cis8ZHQ+MS4yLiA8YSBocmVmPSIjV0hBVENBTldFRE8iPldoYXQgd2UgY2FuIGRvIHdpdGgKK05DVVJTRVM8L2E+PC9kdD4KKzxkdD4xLjMuIDxhIGhyZWY9IiNXSEVSRVRPR0VUSVQiPldoZXJlIHRvIGdldCBpdDwvYT48L2R0PgorPGR0PjEuNC4gPGEgaHJlZj0iI1BVUlBPU0UiPlB1cnBvc2UvU2NvcGUgb2YgdGhlIGRvY3VtZW50PC9hPjwvZHQ+Cis8ZHQ+MS41LiA8YSBocmVmPSIjQUJPVVRQUk9HUkFNUyI+QWJvdXQgdGhlIFByb2dyYW1zPC9hPjwvZHQ+Cis8ZHQ+MS42LiA8YSBocmVmPSIjT1RIRVJGT1JNQVRTIj5PdGhlciBGb3JtYXRzIG9mIHRoZQorZG9jdW1lbnQ8L2E+PC9kdD4KKzxkdD4xLjcuIDxhIGhyZWY9IiNDUkVESVRTIj5DcmVkaXRzPC9hPjwvZHQ+Cis8ZHQ+MS44LiA8YSBocmVmPSIjV0lTSExJU1QiPldpc2ggTGlzdDwvYT48L2R0PgorPGR0PjEuOS4gPGEgaHJlZj0iI0NPUFlSSUdIVCI+Q29weXJpZ2h0PC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4yLiA8YSBocmVmPSIjSEVMTE9XT1JMRCI+SGVsbG8gV29ybGQgISEhPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+Mi4xLiA8YSBocmVmPSIjQ09NUElMRUNVUlNFUyI+Q29tcGlsaW5nIFdpdGggdGhlIE5DVVJTRVMKK0xpYnJhcnk8L2E+PC9kdD4KKzxkdD4yLjIuIDxhIGhyZWY9IiNESVNTRUNUSU9OIj5EaXNzZWN0aW9uPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4zLiA8YSBocmVmPSIjR09SWSI+VGhlIEdvcnkgRGV0YWlsczwvYT48L2R0PgorPGR0PjQuIDxhIGhyZWY9IiNJTklUIj5Jbml0aWFsaXphdGlvbjwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjQuMS4gPGEgaHJlZj0iI0FCT1VUSU5JVCI+SW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+NC4yLiA8YSBocmVmPSIjUkFXQ0JSRUFLIj5yYXcoKSBhbmQgY2JyZWFrKCk8L2E+PC9kdD4KKzxkdD40LjMuIDxhIGhyZWY9IiNFQ0hPTk9FQ0hPIj5lY2hvKCkgYW5kIG5vZWNobygpPC9hPjwvZHQ+Cis8ZHQ+NC40LiA8YSBocmVmPSIjS0VZUEFEIj5rZXlwYWQoKTwvYT48L2R0PgorPGR0PjQuNS4gPGEgaHJlZj0iI0hBTEZERUxBWSI+aGFsZmRlbGF5KCk8L2E+PC9kdD4KKzxkdD40LjYuIDxhIGhyZWY9IiNNSVNDSU5JVCI+TWlzY2VsbGFuZW91cyBJbml0aWFsaXphdGlvbgorZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+NC43LiA8YSBocmVmPSIjSU5JVEVYIj5BbiBFeGFtcGxlPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD41LiA8YSBocmVmPSIjQVdPUkRXSU5ET1dTIj5BIFdvcmQgYWJvdXQgV2luZG93czwvYT48L2R0PgorPGR0PjYuIDxhIGhyZWY9IiNQUklOVFciPk91dHB1dCBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD42LjEuIDxhIGhyZWY9IiNBRERDSENMQVNTIj5hZGRjaCgpIGNsYXNzIG9mIGZ1bmN0aW9uczwvYT48L2R0PgorPGR0PjYuMi4gPGEgaHJlZj0iI0FFTjI5OCI+bXZhZGRjaCgpLCB3YWRkY2goKSBhbmQKK212d2FkZGNoKCk8L2E+PC9kdD4KKzxkdD42LjMuIDxhIGhyZWY9IiNQUklOVFdDTEFTUyI+cHJpbnR3KCkgY2xhc3Mgb2YKK2Z1bmN0aW9uczwvYT48L2R0PgorPGR0PjYuNC4gPGEgaHJlZj0iI0FERFNUUkNMQVNTIj5hZGRzdHIoKSBjbGFzcyBvZgorZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+Ni41LiA8YSBocmVmPSIjQUNBVVRJT04iPkEgd29yZCBvZiBjYXV0aW9uPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD43LiA8YSBocmVmPSIjU0NBTlciPklucHV0IGZ1bmN0aW9uczwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjcuMS4gPGEgaHJlZj0iI0dFVENIQ0xBU1MiPmdldGNoKCkgY2xhc3Mgb2YgZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+Ny4yLiA8YSBocmVmPSIjU0NBTldDTEFTUyI+c2NhbncoKSBjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD43LjMuIDxhIGhyZWY9IiNHRVRTVFJDTEFTUyI+Z2V0c3RyKCkgY2xhc3Mgb2YKK2Z1bmN0aW9uczwvYT48L2R0PgorPGR0PjcuNC4gPGEgaHJlZj0iI0dFVFNUUkVYIj5Tb21lIGV4YW1wbGVzPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD44LiA8YSBocmVmPSIjQVRUUklCIj5BdHRyaWJ1dGVzPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+OC4xLiA8YSBocmVmPSIjQVRUUklCREVUQUlMUyI+VGhlIGRldGFpbHM8L2E+PC9kdD4KKzxkdD44LjIuIDxhIGhyZWY9IiNBVFRST05WU0FUVFJTRVQiPmF0dHJvbigpIHZzIGF0dHJzZXQoKTwvYT48L2R0PgorPGR0PjguMy4gPGEgaHJlZj0iI0FUVFJfR0VUIj5hdHRyX2dldCgpPC9hPjwvZHQ+Cis8ZHQ+OC40LiA8YSBocmVmPSIjQVRUUl9GVU5DUyI+YXR0cl8gZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+OC41LiA8YSBocmVmPSIjV0FUVFJGVU5DUyI+d2F0dHIgZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+OC42LiA8YSBocmVmPSIjQ0hHQVQiPmNoZ2F0KCkgZnVuY3Rpb25zPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD45LiA8YSBocmVmPSIjV0lORE9XUyI+V2luZG93czwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjkuMS4gPGEgaHJlZj0iI1dJTkRPV0JBU0lDUyI+VGhlIGJhc2ljczwvYT48L2R0PgorPGR0PjkuMi4gPGEgaHJlZj0iI0xFVEJFV0lORE9XIj5MZXQgdGhlcmUgYmUgYSBXaW5kb3cgISEhPC9hPjwvZHQ+Cis8ZHQ+OS4zLiA8YSBocmVmPSIjQk9SREVSRVhFWFBMIj5FeHBsYW5hdGlvbjwvYT48L2R0PgorPGR0PjkuNC4gPGEgaHJlZj0iI09USEVSU1RVRkYiPlRoZSBvdGhlciBzdHVmZiBpbiB0aGUKK2V4YW1wbGU8L2E+PC9kdD4KKzxkdD45LjUuIDxhIGhyZWY9IiNPVEhFUkJPUkRFUkZVTkNTIj5PdGhlciBCb3JkZXIKK2Z1bmN0aW9uczwvYT48L2R0PgorPC9kbD4KKzwvZGQ+Cis8ZHQ+MTAuIDxhIGhyZWY9IiNDT0xPUiI+Q29sb3JzPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MTAuMS4gPGEgaHJlZj0iI0NPTE9SQkFTSUNTIj5UaGUgYmFzaWNzPC9hPjwvZHQ+Cis8ZHQ+MTAuMi4gPGEgaHJlZj0iI0NIQU5HRUNPTE9SREVGUyI+Q2hhbmdpbmcgQ29sb3IKK0RlZmluaXRpb25zPC9hPjwvZHQ+Cis8ZHQ+MTAuMy4gPGEgaHJlZj0iI0NPTE9SQ09OVEVOVCI+Q29sb3IgQ29udGVudDwvYT48L2R0PgorPC9kbD4KKzwvZGQ+Cis8ZHQ+MTEuIDxhIGhyZWY9IiNLRVlTIj5JbnRlcmZhY2luZyB3aXRoIHRoZSBrZXkgYm9hcmQ8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xMS4xLiA8YSBocmVmPSIjS0VZU0JBU0lDUyI+VGhlIEJhc2ljczwvYT48L2R0PgorPGR0PjExLjIuIDxhIGhyZWY9IiNTSU1QTEVLRVlFWCI+QSBTaW1wbGUgS2V5IFVzYWdlCitleGFtcGxlPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xMi4gPGEgaHJlZj0iI01PVVNFIj5JbnRlcmZhY2luZyB3aXRoIHRoZSBtb3VzZTwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjEyLjEuIDxhIGhyZWY9IiNNT1VTRUJBU0lDUyI+VGhlIEJhc2ljczwvYT48L2R0PgorPGR0PjEyLjIuIDxhIGhyZWY9IiNHRVRUSU5HRVZFTlRTIj5HZXR0aW5nIHRoZSBldmVudHM8L2E+PC9kdD4KKzxkdD4xMi4zLiA8YSBocmVmPSIjTU9VU0VUT0dFVEhFUiI+UHV0dGluZyBpdCBhbGwgVG9nZXRoZXI8L2E+PC9kdD4KKzxkdD4xMi40LiA8YSBocmVmPSIjTUlTQ01PVVNFRlVOQ1MiPk1pc2NlbGxhbmVvdXMKK0Z1bmN0aW9uczwvYT48L2R0PgorPC9kbD4KKzwvZGQ+Cis8ZHQ+MTMuIDxhIGhyZWY9IiNTQ1JFRU4iPlNjcmVlbiBNYW5pcHVsYXRpb248L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xMy4xLiA8YSBocmVmPSIjR0VUWVgiPmdldHl4KCkgZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+MTMuMi4gPGEgaHJlZj0iI1NDUkVFTkRVTVAiPlNjcmVlbiBEdW1waW5nPC9hPjwvZHQ+Cis8ZHQ+MTMuMy4gPGEgaHJlZj0iI1dJTkRPV0RVTVAiPldpbmRvdyBEdW1waW5nPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xNC4gPGEgaHJlZj0iI01JU0MiPk1pc2NlbGxhbmVvdXMgZmVhdHVyZXM8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xNC4xLiA8YSBocmVmPSIjQ1VSU1NFVCI+Y3Vyc19zZXQoKTwvYT48L2R0PgorPGR0PjE0LjIuIDxhIGhyZWY9IiNURU1QTEVBVkUiPlRlbXBvcmFyaWx5IExlYXZpbmcgQ3Vyc2VzCittb2RlPC9hPjwvZHQ+Cis8ZHQ+MTQuMy4gPGEgaHJlZj0iI0FDU1ZBUlMiPkFDU18gdmFyaWFibGVzPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xNS4gPGEgaHJlZj0iI09USEVSTElCIj5PdGhlciBsaWJyYXJpZXM8L2E+PC9kdD4KKzxkdD4xNi4gPGEgaHJlZj0iI1BBTkVMUyI+UGFuZWwgTGlicmFyeTwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjE2LjEuIDxhIGhyZWY9IiNQQU5FTEJBU0lDUyI+VGhlIEJhc2ljczwvYT48L2R0PgorPGR0PjE2LjIuIDxhIGhyZWY9IiNDT01QSUxFUEFORUxTIj5Db21waWxpbmcgV2l0aCB0aGUgUGFuZWxzCitMaWJyYXJ5PC9hPjwvZHQ+Cis8ZHQ+MTYuMy4gPGEgaHJlZj0iI1BBTkVMQlJPV1NJTkciPlBhbmVsIFdpbmRvdyBCcm93c2luZzwvYT48L2R0PgorPGR0PjE2LjQuIDxhIGhyZWY9IiNVU0VSUFRSVVNJTkciPlVzaW5nIFVzZXIgUG9pbnRlcnM8L2E+PC9kdD4KKzxkdD4xNi41LiA8YSBocmVmPSIjUEFORUxNT1ZFUkVTSVpFIj5Nb3ZpbmcgYW5kIFJlc2l6aW5nCitQYW5lbHM8L2E+PC9kdD4KKzxkdD4xNi42LiA8YSBocmVmPSIjUEFORUxTSE9XSElERSI+SGlkaW5nIGFuZCBTaG93aW5nCitQYW5lbHM8L2E+PC9kdD4KKzxkdD4xNi43LiA8YSBocmVmPSIjUEFORUxBQk9WRSI+cGFuZWxfYWJvdmUoKSBhbmQgcGFuZWxfYmVsb3coKQorRnVuY3Rpb25zPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xNy4gPGEgaHJlZj0iI01FTlVTIj5NZW51cyBMaWJyYXJ5PC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MTcuMS4gPGEgaHJlZj0iI01FTlVCQVNJQ1MiPlRoZSBCYXNpY3M8L2E+PC9kdD4KKzxkdD4xNy4yLiA8YSBocmVmPSIjQ09NUElMRU1FTlVTIj5Db21waWxpbmcgV2l0aCB0aGUgTWVudQorTGlicmFyeTwvYT48L2R0PgorPGR0PjE3LjMuIDxhIGhyZWY9IiNNRU5VRFJJVkVSIj5NZW51IERyaXZlcjogVGhlIHdvcmsgaG9yc2Ugb2YgdGhlCittZW51IHN5c3RlbTwvYT48L2R0PgorPGR0PjE3LjQuIDxhIGhyZWY9IiNNRU5VV0lORE9XUyI+TWVudSBXaW5kb3dzPC9hPjwvZHQ+Cis8ZHQ+MTcuNS4gPGEgaHJlZj0iI1NDUk9MTE1FTlVTIj5TY3JvbGxpbmcgTWVudXM8L2E+PC9kdD4KKzxkdD4xNy42LiA8YSBocmVmPSIjTVVMVElDT0xVTU4iPk11bHRpIENvbHVtbmFyIE1lbnVzPC9hPjwvZHQ+Cis8ZHQ+MTcuNy4gPGEgaHJlZj0iI01VTFRJVkFMVUVNRU5VUyI+TXVsdGkgVmFsdWVkIE1lbnVzPC9hPjwvZHQ+Cis8ZHQ+MTcuOC4gPGEgaHJlZj0iI01FTlVPUFQiPk1lbnUgT3B0aW9uczwvYT48L2R0PgorPGR0PjE3LjkuIDxhIGhyZWY9IiNNRU5VVVNFUlBUUiI+VGhlIHVzZWZ1bCBVc2VyIFBvaW50ZXI8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjE4LiA8YSBocmVmPSIjRk9STVMiPkZvcm1zIExpYnJhcnk8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xOC4xLiA8YSBocmVmPSIjRk9STUJBU0lDUyI+VGhlIEJhc2ljczwvYT48L2R0PgorPGR0PjE4LjIuIDxhIGhyZWY9IiNDT01QSUxFRk9STVMiPkNvbXBpbGluZyBXaXRoIHRoZSBGb3JtcworTGlicmFyeTwvYT48L2R0PgorPGR0PjE4LjMuIDxhIGhyZWY9IiNQTEFZRklFTERTIj5QbGF5aW5nIHdpdGggRmllbGRzPC9hPjwvZHQ+Cis8ZHQ+MTguNC4gPGEgaHJlZj0iI0ZPUk1XSU5ET1dTIj5Gb3JtIFdpbmRvd3M8L2E+PC9kdD4KKzxkdD4xOC41LiA8YSBocmVmPSIjRklMRURWQUxJREFURSI+RmllbGQgVmFsaWRhdGlvbjwvYT48L2R0PgorPGR0PjE4LjYuIDxhIGhyZWY9IiNGT1JNRFJJVkVSIj5Gb3JtIERyaXZlcjogVGhlIHdvcmsgaG9yc2Ugb2YgdGhlCitmb3JtcyBzeXN0ZW08L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjE5LiA8YSBocmVmPSIjVE9PTFMiPlRvb2xzIGFuZCBXaWRnZXQgTGlicmFyaWVzPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MTkuMS4gPGEgaHJlZj0iI0NESyI+Q0RLIChDdXJzZXMgRGV2ZWxvcG1lbnQgS2l0KTwvYT48L2R0PgorPGR0PjE5LjIuIDxhIGhyZWY9IiNESUFMT0ciPlRoZSBkaWFsb2c8L2E+PC9kdD4KKzxkdD4xOS4zLiA8YSBocmVmPSIjUEVSTENVUlNFUyI+UGVybCBDdXJzZXMgTW9kdWxlcyBDVVJTRVM6OkZPUk0KK2FuZCBDVVJTRVM6OldJREdFVFM8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjIwLiA8YSBocmVmPSIjSlVTVEZPUkZVTiI+SnVzdCBGb3IgRnVuICEhITwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjIwLjEuIDxhIGhyZWY9IiNHQU1FT0ZMSUZFIj5UaGUgR2FtZSBvZiBMaWZlPC9hPjwvZHQ+Cis8ZHQ+MjAuMi4gPGEgaHJlZj0iI01BR0lDIj5NYWdpYyBTcXVhcmU8L2E+PC9kdD4KKzxkdD4yMC4zLiA8YSBocmVmPSIjSEFOT0kiPlRvd2VycyBvZiBIYW5vaTwvYT48L2R0PgorPGR0PjIwLjQuIDxhIGhyZWY9IiNRVUVFTlMiPlF1ZWVucyBQdXp6bGU8L2E+PC9kdD4KKzxkdD4yMC41LiA8YSBocmVmPSIjU0hVRkZMRSI+U2h1ZmZsZTwvYT48L2R0PgorPGR0PjIwLjYuIDxhIGhyZWY9IiNUVCI+VHlwaW5nIFR1dG9yPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4yMS4gPGEgaHJlZj0iI1JFRiI+UmVmZXJlbmNlczwvYT48L2R0PgorPC9kbD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iSU5UUk8iIGlkPSJJTlRSTyI+MS4KK0ludHJvZHVjdGlvbjwvYT48L2gyPgorPHA+SW4gdGhlIG9sZGVuIGRheXMgb2YgdGVsZXR5cGUgdGVybWluYWxzLCB0ZXJtaW5hbHMgd2VyZSBhd2F5Citmcm9tIGNvbXB1dGVycyBhbmQgd2VyZSBjb25uZWN0ZWQgdG8gdGhlbSB0aHJvdWdoIHNlcmlhbCBjYWJsZXMuCitUaGUgdGVybWluYWxzIGNvdWxkIGJlIGNvbmZpZ3VyZWQgYnkgc2VuZGluZyBhIHNlcmllcyBvZiBieXRlcy4gQWxsCit0aGUgY2FwYWJpbGl0aWVzIChzdWNoIGFzIG1vdmluZyB0aGUgY3Vyc29yIHRvIGEgbmV3IGxvY2F0aW9uLAorZXJhc2luZyBwYXJ0IG9mIHRoZSBzY3JlZW4sIHNjcm9sbGluZyB0aGUgc2NyZWVuLCBjaGFuZ2luZyBtb2RlcworZXRjLikgb2YgdGVybWluYWxzIGNvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlc2Ugc2VyaWVzIG9mIGJ5dGVzLgorVGhlc2UgY29udHJvbCBzZWV1cW5jZXMgYXJlIHVzdWFsbHkgY2FsbGVkIGVzY2FwZSBzZXF1ZW5jZXMsCitiZWNhdXNlIHRoZXkgc3RhcnQgd2l0aCBhbiBlc2NhcGUoMHgxQikgY2hhcmFjdGVyLiBFdmVuIHRvZGF5LCB3aXRoCitwcm9wZXIgZW11bGF0aW9uLCB3ZSBjYW4gc2VuZCBlc2NhcGUgc2VxdWVuY2VzIHRvIHRoZSBlbXVsYXRvciBhbmQKK2FjaGlldmUgdGhlIHNhbWUgZWZmZWN0IG9uIGEgdGVybWluYWwgd2luZG93LjwvcD4KKzxwPlN1cHBvc2UgeW91IHdhbnRlZCB0byBwcmludCBhIGxpbmUgaW4gY29sb3IuIFRyeSB0eXBpbmcgdGhpcyBvbgoreW91ciBjb25zb2xlLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj5lY2hvICJeW1swOzMxOzQwbUluIENvbG9yIjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYW4gZXNjYXBlIGNoYXJhY3Rlciwgd2hpY2ggbG9va3MgbGlrZSB0d28KK2NoYXJhY3RlcnMgXiBhbmQgWy4gVG8gYmUgYWJsZSB0byBwcmludCBpdCwgeW91IGhhdmUgdG8gcHJlc3MKK0NUUkwrViBhbmQgdGhlbiB0aGUgRVNDIGtleS4gQWxsIHRoZSBvdGhlcnMgYXJlIG5vcm1hbCBwcmludGFibGUKK2NoYXJhY3RlcnMuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBzZWUgdGhlIHN0cmluZyAiSW4gQ29sb3IiIGluIHJlZC4KK0l0IHN0YXlzIHRoYXQgd2F5IGFuZCB0byByZXZlcnQgYmFjayB0byB0aGUgb3JpZ2luYWwgbW9kZSB0eXBlCit0aGlzLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj5lY2hvICJeW1swOzM3OzQwbSI8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5Ob3csIHdoYXQgZG8gdGhlc2UgbWFnaWMgY2hhcmFjdGVycyBtZWFuPyBEaWZmaWN1bHQgdG8KK2NvbXByZWhlbmQ/IFRoZXkgbWlnaHQgZXZlbiBiZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCB0ZXJtaW5hbHMuCitTbyB0aGUgZGVzaWduZXJzIG9mIFVOSVggaW52ZW50ZWQgYSBtZWNoYW5pc20gbmFtZWQgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj50ZXJtY2FwPC92YXI+LiBJdCBpcyBhIGZpbGUgdGhhdCBsaXN0cyBhbGwgdGhlCitjYXBhYmlsaXRpZXMgb2YgYSBwYXJ0aWN1bGFyIHRlcm1pbmFsLCBhbG9uZyB3aXRoIHRoZSBlc2NhcGUKK3NlcXVlbmNlcyBuZWVkZWQgdG8gYWNoaWV2ZSBhIHBhcnRpY3VsYXIgZWZmZWN0LiBJbiB0aGUgbGF0ZXIKK3llYXJzLCB0aGlzIHdhcyByZXBsYWNlZCBieSA8dmFyIGNsYXNzPSJMSVRFUkFMIj50ZXJtaW5mbzwvdmFyPi4KK1dpdGhvdXQgZGVsdmluZyB0b28gbXVjaCBpbnRvIGRldGFpbHMsIHRoaXMgbWVjaGFuaXNtIGFsbG93cworYXBwbGljYXRpb24gcHJvZ3JhbXMgdG8gcXVlcnkgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFuZCBvYnRhaW4gdGhlCitjb250cm9sIGNoYXJhY3RlcnMgdG8gYmUgc2VudCB0byBhIHRlcm1pbmFsIG9yIHRlcm1pbmFsCitlbXVsYXRvci48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJXSEFUSVMiIGlkPSJXSEFUSVMiPjEuMS4gV2hhdCBpcworTkNVUlNFUz88L2E+PC9oMz4KKzxwPllvdSBtaWdodCBiZSB3b25kZXJpbmcsIHdoYXQgdGhlIGltcG9ydCBvZiBhbGwgdGhpcyB0ZWNobmljYWwKK2dpYmJlcmlzaCBpcy4gSW4gdGhlIGFib3ZlIHNjZW5hcmlvLCBldmVyeSBhcHBsaWNhdGlvbiBwcm9ncmFtIGlzCitzdXBwb3NlZCB0byBxdWVyeSB0aGUgdGVybWluZm8gYW5kIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBzdHVmZgorKHNlbmRpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGV0Yy4pLiBJdCBzb29uIGJlY2FtZSBkaWZmaWN1bHQgdG8KK21hbmFnZSB0aGlzIGNvbXBsZXhpdHkgYW5kIHRoaXMgZ2F2ZSBiaXJ0aCB0byAnQ1VSU0VTJy4gQ3Vyc2VzIGlzIGEKK3B1biBvbiB0aGUgbmFtZSAiY3Vyc29yIG9wdGltaXphdGlvbiIuIFRoZSBDdXJzZXMgbGlicmFyeSBmb3JtcyBhCit3cmFwcGVyIG92ZXIgd29ya2luZyB3aXRoIHJhdyB0ZXJtaW5hbCBjb2RlcywgYW5kIHByb3ZpZGVzIGhpZ2hseQorZmxleGlibGUgYW5kIGVmZmljaWVudCBBUEkgKEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSkuIEl0Citwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSB0aGUgY3Vyc29yLCBjcmVhdGUgd2luZG93cywgcHJvZHVjZQorY29sb3JzLCBwbGF5IHdpdGggbW91c2UgZXRjLiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbXMgbmVlZCBub3QKK3dvcnJ5IGFib3V0IHRoZSB1bmRlcmx5aW5nIHRlcm1pbmFsIGNhcGFiaWxpdGllcy48L3A+Cis8cD5TbyB3aGF0IGlzIE5DVVJTRVM/IE5DVVJTRVMgaXMgYSBjbG9uZSBvZiB0aGUgb3JpZ2luYWwgU3lzdGVtIFYKK1JlbGVhc2UgNC4wIChTVnI0KSBjdXJzZXMuIEl0IGlzIGEgZnJlZWx5IGRpc3RyaWJ1dGFibGUgbGlicmFyeSwKK2Z1bGx5IGNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9uIG9mIGN1cnNlcy4gSW4gc2hvcnQsIGl0IGlzIGEKK2xpYnJhcnkgb2YgZnVuY3Rpb25zIHRoYXQgbWFuYWdlcyBhbiBhcHBsaWNhdGlvbidzIGRpc3BsYXkgb24KK2NoYXJhY3Rlci1jZWxsIHRlcm1pbmFscy4gSW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgZG9jdW1lbnQsIHRoZQordGVybXMgY3Vyc2VzIGFuZCBuY3Vyc2VzIGFyZSB1c2VkIGludGVyY2hhbmdlYWJseS48L3A+Cis8cD5BIGRldGFpbGVkIGhpc3Rvcnkgb2YgTkNVUlNFUyBjYW4gYmUgZm91bmQgaW4gdGhlIE5FV1MgZmlsZSBmcm9tCit0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4gVGhlIGN1cnJlbnQgcGFja2FnZSBpcyBtYWludGFpbmVkIGJ5Cis8YSBocmVmPSJtYWlsdG86ZGlja2V5QGhpcy5jb20iIHRhcmdldD0iX3RvcCI+VGhvbWFzIERpY2tleTwvYT4uCitZb3UgY2FuIGNvbnRhY3QgdGhlIG1haW50YWluZXJzIGF0IDxhIGhyZWY9CisibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciIHRhcmdldD0KKyJfdG9wIj5idWctbmN1cnNlc0BnbnUub3JnPC9hPi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IldIQVRDQU5XRURPIiBpZD0iV0hBVENBTldFRE8iPjEuMi4gV2hhdAord2UgY2FuIGRvIHdpdGggTkNVUlNFUzwvYT48L2gzPgorPHA+TkNVUlNFUyBub3Qgb25seSBjcmVhdGVzIGEgd3JhcHBlciBvdmVyIHRlcm1pbmFsIGNhcGFiaWxpdGllcywKK2J1dCBhbHNvIGdpdmVzIGEgcm9idXN0IGZyYW1ld29yayB0byBjcmVhdGUgbmljZSBsb29raW5nIFVJIChVc2VyCitJbnRlcmZhY2UpcyBpbiB0ZXh0IG1vZGUuIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBjcmVhdGUgd2luZG93cworZXRjLiBJdHMgc2lzdGVyIGxpYnJhcmllcyBwYW5lbCwgbWVudSBhbmQgZm9ybSBwcm92aWRlIGFuIGV4dGVuc2lvbgordG8gdGhlIGJhc2ljIGN1cnNlcyBsaWJyYXJ5LiBUaGVzZSBsaWJyYXJpZXMgdXN1YWxseSBjb21lIGFsb25nCit3aXRoIGN1cnNlcy4gT25lIGNhbiBjcmVhdGUgYXBwbGljYXRpb25zIHRoYXQgY29udGFpbiBtdWx0aXBsZQord2luZG93cywgbWVudXMsIHBhbmVscyBhbmQgZm9ybXMuIFdpbmRvd3MgY2FuIGJlIG1hbmFnZWQKK2luZGVwZW5kZW50bHksIGNhbiBwcm92aWRlICdzY3JvbGxhYmlsaXR5JyBhbmQgZXZlbiBjYW4gYmUKK2hpZGRlbi48L3A+Cis8cD5NZW51cyBwcm92aWRlIHRoZSB1c2VyIHdpdGggYW4gZWFzeSBjb21tYW5kIHNlbGVjdGlvbiBvcHRpb24uCitGb3JtcyBhbGxvdyB0aGUgY3JlYXRpb24gb2YgZWFzeS10by11c2UgZGF0YSBlbnRyeSBhbmQgZGlzcGxheQord2luZG93cy4gUGFuZWxzIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVzIG9mIG5jdXJzZXMgdG8gZGVhbCB3aXRoCitvdmVybGFwcGluZyBhbmQgc3RhY2tlZCB3aW5kb3dzLjwvcD4KKzxwPlRoZXNlIGFyZSBqdXN0IHNvbWUgb2YgdGhlIGJhc2ljIHRoaW5ncyB3ZSBjYW4gZG8gd2l0aCBuY3Vyc2VzLgorQXMgd2UgbW92ZSBhbG9uZywgV2Ugd2lsbCBzZWUgYWxsIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlc2UKK2xpYnJhcmllcy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IldIRVJFVE9HRVRJVCIgaWQ9IldIRVJFVE9HRVRJVCI+MS4zLgorV2hlcmUgdG8gZ2V0IGl0PC9hPjwvaDM+Cis8cD5BbGwgcmlnaHQsIG5vdyB0aGF0IHlvdSBrbm93IHdoYXQgeW91IGNhbiBkbyB3aXRoIG5jdXJzZXMsIHlvdQorbXVzdCBiZSByZWFyaW5nIHRvIGdldCBzdGFydGVkLiBOQ1VSU0VTIGlzIHVzdWFsbHkgc2hpcHBlZCB3aXRoCit5b3VyIGluc3RhbGxhdGlvbi4gSW4gY2FzZSB5b3UgZG9uJ3QgaGF2ZSB0aGUgbGlicmFyeSBvciB3YW50IHRvCitjb21waWxlIGl0IG9uIHlvdXIgb3duLCByZWFkIG9uLjwvcD4KKzxwPjxlbT5Db21waWxpbmcgdGhlIHBhY2thZ2U8L2VtPjwvcD4KKzxwPk5DVVJTRVMgY2FuIGJlIG9idGFpbmVkIGZyb20gPGEgaHJlZj0KKyJmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L25jdXJzZXMvbmN1cnNlcy50YXIuZ3oiIHRhcmdldD0KKyJfdG9wIj5mdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L25jdXJzZXMvbmN1cnNlcy50YXIuZ3o8L2E+IG9yIGFueQorb2YgdGhlIGZ0cCBzaXRlcyBtZW50aW9uZWQgaW4gPGEgaHJlZj0KKyJodHRwOi8vd3d3LmdudS5vcmcvb3JkZXIvZnRwLmh0bWwiIHRhcmdldD0KKyJfdG9wIj5odHRwOi8vd3d3LmdudS5vcmcvb3JkZXIvZnRwLmh0bWw8L2E+LjwvcD4KKzxwPlJlYWQgdGhlIFJFQURNRSBhbmQgSU5TVEFMTCBmaWxlcyBmb3IgZGV0YWlscyBvbiB0byBob3cgdG8KK2luc3RhbGwgaXQuIEl0IHVzdWFsbHkgaW52b2x2ZXMgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiAgICB0YXIgenh2ZiBuY3Vyc2VzJmx0O3ZlcnNpb24mZ3Q7LnRhci5neiAgIyB1bnppcCBhbmQgdW50YXIgdGhlIGFyY2hpdmUKKyAgICBjZCBuY3Vyc2VzJmx0O3ZlcnNpb24mZ3Q7ICAgICAgICAgICAgICAgIyBjZCB0byB0aGUgZGlyZWN0b3J5CisgICAgLi9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29uZmlndXJlIHRoZSBidWlsZCBhY2NvcmRpbmcgdG8geW91ciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlbnZpcm9ubWVudAorICAgIG1ha2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1ha2UgaXQKKyAgICBzdSByb290ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNvbWUgcm9vdAorICAgIG1ha2UgaW5zdGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluc3RhbGwgaXQ8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD48ZW0+VXNpbmcgdGhlIFJQTTwvZW0+PC9wPgorPHA+TkNVUlNFUyBSUE0gY2FuIGJlIGZvdW5kIGFuZCBkb3dubG9hZGVkIGZyb20gPGEgaHJlZj0KKyJodHRwOi8vcnBtZmluZC5uZXQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3JwbWZpbmQubmV0PC9hPiAuIFRoZSBSUE0KK2NhbiBiZSBpbnN0YWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgYWZ0ZXIgYmVjb21pbmcKK3Jvb3QuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBycG0gLWkgJmx0O2Rvd25sb2FkZWQgcnBtJmd0OzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUFVSUE9TRSIgaWQ9IlBVUlBPU0UiPjEuNC4gUHVycG9zZS9TY29wZQorb2YgdGhlIGRvY3VtZW50PC9hPjwvaDM+Cis8cD5UaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGJlIGEgIkFsbCBpbiBPbmUiIGd1aWRlIGZvcgorcHJvZ3JhbW1pbmcgd2l0aCBuY3Vyc2VzIGFuZCBpdHMgc2lzdGVyIGxpYnJhcmllcy4gV2UgZ3JhZHVhdGUgZnJvbQorYSBzaW1wbGUgIkhlbGxvIFdvcmxkIiBwcm9ncmFtIHRvIG1vcmUgY29tcGxleCBmb3JtIG1hbmlwdWxhdGlvbi4KK05vIHByaW9yIGV4cGVyaWVuY2UgaW4gbmN1cnNlcyBpcyBhc3N1bWVkLiBUaGUgd3JpdGluZyBpcyBpbmZvcm1hbCwKK2J1dCBhIGxvdCBvZiBkZXRhaWwgaXMgcHJvdmlkZWQgZm9yIGVhY2ggb2YgdGhlIGV4YW1wbGVzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQUJPVVRQUk9HUkFNUyIgaWQ9IkFCT1VUUFJPR1JBTVMiPjEuNS4KK0Fib3V0IHRoZSBQcm9ncmFtczwvYT48L2gzPgorPHA+QWxsIHRoZSBwcm9ncmFtcyBpbiB0aGUgZG9jdW1lbnQgYXJlIGF2YWlsYWJsZSBpbiB6aXBwZWQgZm9ybQorPGEgaHJlZj0KKyJodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8vbmN1cnNlc19wcm9ncmFtcy50YXIuZ3oiCit0YXJnZXQ9Il90b3AiPmhlcmU8L2E+LiBVbnppcCBhbmQgdW50YXIgaXQuIFRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlCitsb29rcyBsaWtlIHRoaXMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPm5jdXJzZXMKKyAgIHwKKyAgIHwtLS0tJmd0OyBKdXN0Rm9yRnVuICAgICAtLSBqdXN0IGZvciBmdW4gcHJvZ3JhbXMKKyAgIHwtLS0tJmd0OyBiYXNpY3MgICAgICAgICAtLSBiYXNpYyBwcm9ncmFtcworICAgfC0tLS0mZ3Q7IGRlbW8gICAgICAgICAgIC0tIG91dHB1dCBmaWxlcyBnbyBpbnRvIHRoaXMgZGlyZWN0b3J5IGFmdGVyIG1ha2UKKyAgIHwgICAgICAgICAgfAorICAgfCAgICAgICAgICB8LS0tLSZndDsgZXhlIC0tIGV4ZSBmaWxlcyBvZiBhbGwgZXhhbXBsZSBwcm9ncmFtcworICAgfC0tLS0mZ3Q7IGZvcm1zICAgICAgICAgIC0tIHByb2dyYW1zIHJlbGF0ZWQgdG8gZm9ybSBsaWJyYXJ5CisgICB8LS0tLSZndDsgbWVudXMgICAgICAgICAgLS0gcHJvZ3JhbXMgcmVsYXRlZCB0byBtZW51cyBsaWJyYXJ5CisgICB8LS0tLSZndDsgcGFuZWxzICAgICAgICAgLS0gcHJvZ3JhbXMgcmVsYXRlZCB0byBwYW5lbHMgbGlicmFyeQorICAgfC0tLS0mZ3Q7IHBlcmwgICAgICAgICAgIC0tIHBlcmwgZXF1aXZhbGVudHMgb2YgdGhlIGV4YW1wbGVzIChjb250cmlidXRlZAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBBbnVyYWRoYSBSYXRuYXdlZXJhKQorICAgfC0tLS0mZ3Q7IE1ha2VmaWxlICAgICAgIC0tIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUKKyAgIHwtLS0tJmd0OyBSRUFETUUgICAgICAgICAtLSB0aGUgdG9wIGxldmVsIFJFQURNRSBmaWxlLiBjb250YWlucyBpbnN0cnVjdGlvbnMKKyAgIHwtLS0tJmd0OyBDT1BZSU5HICAgICAgICAtLSBjb3B5cmlnaHQgbm90aWNlPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgZm9sbG93aW5nIGZpbGVzLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj5EZXNjcmlwdGlvbiBvZiBmaWxlcyBpbiBlYWNoIGRpcmVjdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0p1c3RGb3JGdW4KKyAgICB8CisgICAgfC0tLS0mZ3Q7IGhhbm9pLmMgICAtLSBUaGUgVG93ZXJzIG9mIEhhbm9pIFNvbHZlcgorICAgIHwtLS0tJmd0OyBsaWZlLmMgICAgLS0gVGhlIEdhbWUgb2YgTGlmZSBkZW1vCisgICAgfC0tLS0mZ3Q7IG1hZ2ljLmMgICAtLSBBbiBPZGQgT3JkZXIgTWFnaWMgU3F1YXJlIGJ1aWxkZXIgCisgICAgfC0tLS0mZ3Q7IHF1ZWVucy5jICAtLSBUaGUgZmFtb3VzIE4tUXVlZW5zIFNvbHZlcgorICAgIHwtLS0tJmd0OyBzaHVmZmxlLmMgLS0gQSBmdW4gZ2FtZSwgaWYgeW91IGhhdmUgdGltZSB0byBraWxsCisgICAgfC0tLS0mZ3Q7IHR0LmMgICAgICAtLSBBIHZlcnkgdHJpdmlhbCB0eXBpbmcgdHV0b3IKKworICBiYXNpY3MKKyAgICB8CisgICAgfC0tLS0mZ3Q7IGFjc192YXJzLmMgICAgICAgICAgICAtLSBBQ1NfIHZhcmlhYmxlcyBleGFtcGxlCisgICAgfC0tLS0mZ3Q7IGhlbGxvX3dvcmxkLmMgICAgICAgICAtLSBTaW1wbGUgIkhlbGxvIFdvcmxkIiBQcm9ncmFtCisgICAgfC0tLS0mZ3Q7IGluaXRfZnVuY19leGFtcGxlLmMgICAtLSBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgZXhhbXBsZQorICAgIHwtLS0tJmd0OyBrZXlfY29kZS5jICAgICAgICAgICAgLS0gU2hvd3MgdGhlIHNjYW4gY29kZSBvZiB0aGUga2V5IHByZXNzZWQKKyAgICB8LS0tLSZndDsgbW91c2VfbWVudS5jICAgICAgICAgIC0tIEEgbWVudSBhY2Nlc3NpYmxlIGJ5IG1vdXNlCisgICAgfC0tLS0mZ3Q7IG90aGVyX2JvcmRlci5jICAgICAgICAtLSBTaG93cyB1c2FnZSBvZiBvdGhlciBib3JkZXIgZnVuY3Rpb25zIGFwYQorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gcnQgZnJvbSBib3goKQorICAgIHwtLS0tJmd0OyBwcmludHdfZXhhbXBsZS5jICAgICAgLS0gQSB2ZXJ5IHNpbXBsZSBwcmludHcoKSBleGFtcGxlCisgICAgfC0tLS0mZ3Q7IHNjYW53X2V4YW1wbGUuYyAgICAgICAtLSBBIHZlcnkgc2ltcGxlIGdldHN0cigpIGV4YW1wbGUKKyAgICB8LS0tLSZndDsgc2ltcGxlX2F0dHIuYyAgICAgICAgIC0tIEEgcHJvZ3JhbSB0aGF0IGNhbiBwcmludCBhIGMgZmlsZSB3aXRoIAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY29tbWVudHMgaW4gYXR0cmlidXRlCisgICAgfC0tLS0mZ3Q7IHNpbXBsZV9jb2xvci5jICAgICAgICAtLSBBIHNpbXBsZSBleGFtcGxlIGRlbW9uc3RyYXRpbmcgY29sb3JzCisgICAgfC0tLS0mZ3Q7IHNpbXBsZV9rZXkuYyAgICAgICAgICAtLSBBIG1lbnUgYWNjZXNzaWJsZSB3aXRoIGtleWJvYXJkIFVQLCBET1dOIAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gYXJyb3dzCisgICAgfC0tLS0mZ3Q7IHRlbXBfbGVhdmUuYyAgICAgICAgICAtLSBEZW1vbnN0cmF0ZXMgdGVtcG9yYXJpbHkgbGVhdmluZyBjdXJzZXMgbW9kZQorICAgIHwtLS0tJmd0OyB3aW5fYm9yZGVyLmMgICAgICAgICAgLS0gU2hvd3MgQ3JlYXRpb24gb2Ygd2luZG93cyBhbmQgYm9yZGVycworICAgIHwtLS0tJmd0OyB3aXRoX2NoZ2F0LmMgICAgICAgICAgLS0gY2hnYXQoKSB1c2FnZSBleGFtcGxlCisKKyAgZm9ybXMgCisgICAgfAorICAgIHwtLS0tJmd0OyBmb3JtX2F0dHJpYi5jICAgICAtLSBVc2FnZSBvZiBmaWVsZCBhdHRyaWJ1dGVzCisgICAgfC0tLS0mZ3Q7IGZvcm1fb3B0aW9ucy5jICAgIC0tIFVzYWdlIG9mIGZpZWxkIG9wdGlvbnMKKyAgICB8LS0tLSZndDsgZm9ybV9zaW1wbGUuYyAgICAgLS0gQSBzaW1wbGUgZm9ybSBleGFtcGxlCisgICAgfC0tLS0mZ3Q7IGZvcm1fd2luLmMgICAgICAgIC0tIERlbW8gb2Ygd2luZG93cyBhc3NvY2lhdGVkIHdpdGggZm9ybXMKKworICBtZW51cyAKKyAgICB8CisgICAgfC0tLS0mZ3Q7IG1lbnVfYXR0cmliLmMgICAgIC0tIFVzYWdlIG9mIG1lbnUgYXR0cmlidXRlcworICAgIHwtLS0tJmd0OyBtZW51X2l0ZW1fZGF0YS5jICAtLSBVc2FnZSBvZiBpdGVtX25hbWUoKSBldGMuLiBmdW5jdGlvbnMKKyAgICB8LS0tLSZndDsgbWVudV9tdWx0aV9jb2x1bW4uYyAgICAtLSBDcmVhdGVzIG11bHRpIGNvbHVtbmFyIG1lbnVzCisgICAgfC0tLS0mZ3Q7IG1lbnVfc2Nyb2xsLmMgICAgIC0tIERlbW9uc3RyYXRlcyBzY3JvbGxpbmcgY2FwYWJpbGl0eSBvZiBtZW51cworICAgIHwtLS0tJmd0OyBtZW51X3NpbXBsZS5jICAgICAtLSBBIHNpbXBsZSBtZW51IGFjY2Vzc2VkIGJ5IGFycm93IGtleXMKKyAgICB8LS0tLSZndDsgbWVudV90b2dnbGUuYyAgICAgLS0gQ3JlYXRlcyBtdWx0aSB2YWx1ZWQgbWVudXMgYW5kIGV4cGxhaW5zCisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIFJFUV9UT0dHTEVfSVRFTQorICAgIHwtLS0tJmd0OyBtZW51X3VzZXJwdHIuYyAgICAtLSBVc2FnZSBvZiB1c2VyIHBvaW50ZXIKKyAgICB8LS0tLSZndDsgbWVudV93aW4uYyAgICAgICAgLS0gRGVtbyBvZiB3aW5kb3dzIGFzc29jaWF0ZWQgd2l0aCBtZW51cworCisgIHBhbmVscyAKKyAgICB8CisgICAgfC0tLS0mZ3Q7IHBhbmVsX2Jyb3dzZS5jICAgIC0tIFBhbmVsIGJyb3dzaW5nIHRocm91Z2ggdGFiLiBVc2FnZSBvZiB1c2VyIAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBwb2ludGVyCisgICAgfC0tLS0mZ3Q7IHBhbmVsX2hpZGUuYyAgICAgIC0tIEhpZGluZyBhbmQgVW4gaGlkaW5nIG9mIHBhbmVscworICAgIHwtLS0tJmd0OyBwYW5lbF9yZXNpemUuYyAgICAtLSBNb3ZpbmcgYW5kIHJlc2l6aW5nIG9mIHBhbmVscworICAgIHwtLS0tJmd0OyBwYW5lbF9zaW1wbGUuYyAgICAtLSBBIHNpbXBsZSBwYW5lbCBleGFtcGxlCisKKyAgcGVybAorICAgIHwtLS0tJmd0OyAwMS0xMC5wbCAgICAgICAgICAtLSBQZXJsIGVxdWl2YWxlbnRzIG9mIGZpcnN0IHRlbiBleGFtcGxlIHByb2dyYW1zPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlcmUgaXMgYSB0b3AgbGV2ZWwgTWFrZWZpbGUgaW5jbHVkZWQgaW4gdGhlIG1haW4gZGlyZWN0b3J5LiBJdAorYnVpbGRzIGFsbCB0aGUgZmlsZXMgYW5kIHB1dHMgdGhlIHJlYWR5LXRvLXVzZSBleGVzIGluIGRlbW8vZXhlCitkaXJlY3RvcnkuIFlvdSBjYW4gYWxzbyBkbyBzZWxlY3RpdmUgbWFrZSBieSBnb2luZyBpbnRvIHRoZQorY29ycmVzcG9uZGluZyBkaXJlY3RvcnkuIEVhY2ggZGlyZWN0b3J5IGNvbnRhaW5zIGEgUkVBRE1FIGZpbGUKK2V4cGxhaW5pbmcgdGhlIHB1cnBvc2Ugb2YgZWFjaCBjIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS48L3A+Cis8cD5Gb3IgZXZlcnkgZXhhbXBsZSwgSSBoYXZlIGluY2x1ZGVkIHBhdGggbmFtZSBmb3IgdGhlIGZpbGUKK3JlbGF0aXZlIHRvIHRoZSBleGFtcGxlcyBkaXJlY3RvcnkuPC9wPgorPHA+SWYgeW91IHByZWZlciBicm93c2luZyBpbmRpdmlkdWFsIHByb2dyYW1zLCBwb2ludCB5b3VyIGJyb3dzZXIKK3RvIDxhIGhyZWY9CisiaHR0cDovL3RsZHAub3JnL0hPV1RPL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8vbmN1cnNlc19wcm9ncmFtcy8iCit0YXJnZXQ9CisiX3RvcCI+aHR0cDovL3RsZHAub3JnL0hPV1RPL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8vbmN1cnNlc19wcm9ncmFtcy88L2E+PC9wPgorPHA+QWxsIHRoZSBwcm9ncmFtcyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSB0aGF0IGlzCit1c2VkIGJ5IG5jdXJzZXMgKE1JVC1zdHlsZSkuIFRoaXMgZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvIGRvCitwcmV0dHkgbXVjaCBhbnl0aGluZyBvdGhlciB0aGFuIGNsYWltaW5nIHRoZW0gYXMgeW91cnMuIEZlZWwgZnJlZQordG8gdXNlIHRoZW0gaW4geW91ciBwcm9ncmFtcyBhcyBhcHByb3ByaWF0ZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik9USEVSRk9STUFUUyIgaWQ9Ik9USEVSRk9STUFUUyI+MS42LgorT3RoZXIgRm9ybWF0cyBvZiB0aGUgZG9jdW1lbnQ8L2E+PC9oMz4KKzxwPlRoaXMgaG93dG8gaXMgYWxzbyBhdmFpbGFiZSBpbiB2YXJpb3VzIG90aGVyIGZvcm1hdHMgb24gdGhlCit0bGRwLm9yZyBzaXRlLiBIZXJlIGFyZSB0aGUgbGlua3MgdG8gb3RoZXIgZm9ybWF0cyBvZiB0aGlzCitkb2N1bWVudC48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJMSVNURk9STUFUUyIgaWQ9IkxJU1RGT1JNQVRTIj4xLjYuMS4KK1JlYWRpbHkgYXZhaWxhYmxlIGZvcm1hdHMgZnJvbSB0bGRwLm9yZzwvYT48L2g0PgorPHVsPgorPGxpPgorPHA+PGEgaHJlZj0KKyJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC9kb2NzL0hPV1RPL290aGVyLWZvcm1hdHMvcGRmL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8ucGRmIgordGFyZ2V0PSJfdG9wIj5BY3JvYmF0IFBERiBGb3JtYXQ8L2E+PC9wPgorPC9saT4KKzxsaT4KKzxwPjxhIGhyZWY9CisiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvZG9jcy9IT1dUTy9vdGhlci1mb3JtYXRzL3BzL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8ucHMuZ3oiCit0YXJnZXQ9Il90b3AiPlBvc3RTY3JpcHQgRm9ybWF0PC9hPjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48YSBocmVmPQorImh0dHA6Ly93d3cuaWJpYmxpby5vcmcvcHViL0xpbnV4L2RvY3MvSE9XVE8vb3RoZXItZm9ybWF0cy9odG1sL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8taHRtbC50YXIuZ3oiCit0YXJnZXQ9Il90b3AiPkluIE11bHRpcGxlIEhUTUwgcGFnZXM8L2E+PC9wPgorPC9saT4KKzxsaT4KKzxwPjxhIGhyZWY9CisiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvZG9jcy9IT1dUTy9vdGhlci1mb3JtYXRzL2h0bWxfc2luZ2xlL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uaHRtbCIKK3RhcmdldD0iX3RvcCI+SW4gT25lIGJpZyBIVE1MIGZvcm1hdDwvYT48L3A+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iQlVJTERTT1VSQ0UiIGlkPSJCVUlMRFNPVVJDRSI+MS42LjIuCitCdWlsZGluZyBmcm9tIHNvdXJjZTwvYT48L2g0PgorPHA+SWYgYWJvdmUgbGlua3MgYXJlIGJyb2tlbiBvciBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGggc2dtbAorcmVhZCBvbi48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4mIzEzOyAgICBHZXQgYm90aCB0aGUgc291cmNlIGFuZCB0aGUgdGFyLGd6aXBwZWQgcHJvZ3JhbXMsIGF2YWlsYWJsZSBhdAorICAgICAgICBodHRwOi8vY3Zzdmlldy50bGRwLm9yZy9pbmRleC5jZ2kvTERQL2hvd3RvL2RvY2Jvb2svCisgICAgICAgIE5DVVJTRVMtSE9XVE8vTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5zZ21sCisgICAgICAgIGh0dHA6Ly9jdnN2aWV3LnRsZHAub3JnL2luZGV4LmNnaS9MRFAvaG93dG8vZG9jYm9vay8KKyAgICAgICAgTkNVUlNFUy1IT1dUTy9uY3Vyc2VzX3Byb2dyYW1zLnRhci5negorCisgICAgVW56aXAgbmN1cnNlc19wcm9ncmFtcy50YXIuZ3ogd2l0aAorICAgIHRhciB6eHZmIG5jdXJzZXNfcHJvZ3JhbXMudGFyLmd6CisKKyAgICBVc2UgamFkZSB0byBjcmVhdGUgdmFyaW91cyBmb3JtYXRzLiBGb3IgZXhhbXBsZSBpZiB5b3UganVzdCB3YW50IHRvIGNyZWF0ZQorICAgIHRoZSBtdWx0aXBsZSBodG1sIGZpbGVzLCB5b3Ugd291bGQgdXNlCisgICAgICAgIGphZGUgLXQgc2dtbCAtaSBodG1sIC1kICZsdDtwYXRoIHRvIGRvY2Jvb2sgaHRtbCBzdHlsZXNoZWV0Jmd0OworICAgICAgICBOQ1VSU0VTLVByb2dyYW1taW5nLUhPV1RPLnNnbWwKKyAgICB0byBnZXQgcGRmLCBmaXJzdCBjcmVhdGUgYSBzaW5nbGUgaHRtbCBmaWxlIG9mIHRoZSBIT1dUTyB3aXRoIAorICAgICAgICBqYWRlIC10IHNnbWwgLWkgaHRtbCAtZCAmbHQ7cGF0aCB0byBkb2Nib29rIGh0bWwgc3R5bGVzaGVldCZndDsgLVYgbm9jaHVua3MKKyAgICAgICAgTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5zZ21sICZndDsgTkNVUlNFUy1PTkUtQklHLUZJTEUuaHRtbAorICAgIHRoZW4gdXNlIGh0bWxkb2MgdG8gZ2V0IHBkZiBmaWxlIHdpdGgKKyAgICAgICAgaHRtbGRvYyAtLXNpemUgdW5pdmVyc2FsIC10IHBkZiAtLWZpcnN0cGFnZSBwMSAtZiAmbHQ7b3V0cHV0IGZpbGUgbmFtZS5wZGYmZ3Q7CisgICAgICAgIE5DVVJTRVMtT05FLUJJRy1GSUxFLmh0bWwKKyAgICBmb3IgcHMsIHlvdSB3b3VsZCB1c2UKKyAgICAgICAgaHRtbGRvYyAtLXNpemUgdW5pdmVyc2FsIC10IHBzIC0tZmlyc3RwYWdlIHAxIC1mICZsdDtvdXRwdXQgZmlsZSBuYW1lLnBzJmd0OworICAgICAgICBOQ1VSU0VTLU9ORS1CSUctRklMRS5odG1sPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+U2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cudGxkcC5vcmcvTERQL0xEUC1BdXRob3ItR3VpZGUvIiB0YXJnZXQ9CisiX3RvcCI+TERQIEF1dGhvciBndWlkZTwvYT4gZm9yIG1vcmUgZGV0YWlscy4gSWYgYWxsIGVsc2UgZmFpbGVzLAorbWFpbCBtZSBhdCA8YSBocmVmPSJwcGFkYWxhQGdtYWlsLmNvbSIgdGFyZ2V0PQorIl90b3AiPnBwYWRhbGFAZ21haWwuY29tPC9hPjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJDUkVESVRTIiBpZD0iQ1JFRElUUyI+MS43LgorQ3JlZGl0czwvYT48L2gzPgorPHA+SSB0aGFuayA8YSBocmVmPSJtYWlsdG86c2hhcmF0aF8xQHVzYS5uZXQiIHRhcmdldD0KKyJfdG9wIj5TaGFyYXRoPC9hPiBhbmQgRW1yZSBBa2JhcyBmb3IgaGVscGluZyBtZSB3aXRoIGZldyBzZWN0aW9ucy4KK1RoZSBpbnRyb2R1Y3Rpb24gd2FzIGluaXRpYWxseSB3cml0dGVuIGJ5IHNoYXJhdGguIEkgcmV3cm90ZSBpdAord2l0aCBmZXcgZXhjZXJwdHMgdGFrZW4gZnJvbSBoaXMgaW5pdGlhbCB3b3JrLiBFbXJlIGhlbHBlZCBpbgord3JpdGluZyBwcmludHcgYW5kIHNjYW53IHNlY3Rpb25zLjwvcD4KKzxwPlBlcmwgZXF1aXZhbGVudHMgb2YgdGhlIGV4YW1wbGUgcHJvZ3JhbXMgYXJlIGNvbnRyaWJ1dGVkIGJ5Cis8YSBocmVmPSJtYWlsdG86QXJhdG5hd2VlcmFAdmlydHVzYS5jb20iIHRhcmdldD0iX3RvcCI+QW51cmFkaGEKK1JhdG5hd2VlcmE8L2E+LjwvcD4KKzxwPlRoZW4gY29tZXMgPGEgaHJlZj0ibWFpbHRvOnBhcmltaUBlY2UuYXJpem9uYS5lZHUiIHRhcmdldD0KKyJfdG9wIj5SYXZpIFBhcmltaTwvYT4sIG15IGRlYXJlc3QgZnJpZW5kLCB3aG8gaGFzIGJlZW4gb24gdGhpcworcHJvamVjdCBiZWZvcmUgZXZlbiBvbmUgbGluZSB3YXMgd3JpdHRlbi4gSGUgY29uc3RhbnRseSBib21iYXJkZWQKK21lIHdpdGggc3VnZ2VzdGlvbnMgYW5kIHBhdGllbnRseSByZXZpZXdlZCB0aGUgd2hvbGUgdGV4dC4gSGUgYWxzbworY2hlY2tlZCBlYWNoIHByb2dyYW0gb24gTGludXggYW5kIFNvbGFyaXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJXSVNITElTVCIgaWQ9IldJU0hMSVNUIj4xLjguIFdpc2gKK0xpc3Q8L2E+PC9oMz4KKzxwPlRoaXMgaXMgdGhlIHdpc2ggbGlzdCwgaW4gdGhlIG9yZGVyIG9mIHByaW9yaXR5LiBJZiB5b3UgaGF2ZSBhCit3aXNoIG9yIHlvdSB3YW50IHRvIHdvcmsgb24gY29tcGxldGluZyB0aGUgd2lzaCwgbWFpbCA8YSBocmVmPQorIm1haWx0bzpwcGFkYWxhQGdtYWlsLmNvbSIgdGFyZ2V0PSJfdG9wIj5tZTwvYT4uPC9wPgorPHVsPgorPGxpPgorPHA+QWRkIGV4YW1wbGVzIHRvIGxhc3QgcGFydHMgb2YgZm9ybXMgc2VjdGlvbi48L3A+Cis8L2xpPgorPGxpPgorPHA+UHJlcGFyZSBhIERlbW8gc2hvd2luZyBhbGwgdGhlIHByb2dyYW1zIGFuZCBhbGxvdyB0aGUgdXNlciB0bworYnJvd3NlIHRocm91Z2ggZGVzY3JpcHRpb24gb2YgZWFjaCBwcm9ncmFtLiBMZXQgdGhlIHVzZXIgY29tcGlsZQorYW5kIHNlZSB0aGUgcHJvZ3JhbSBpbiBhY3Rpb24uIEEgZGlhbG9nIGJhc2VkIGludGVyZmFjZSBpcworcHJlZmVycmVkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5BZGQgZGVidWcgaW5mby4gX3RyYWNlZiwgX3RyYWNlbW91c2Ugc3R1ZmYuPC9wPgorPC9saT4KKzxsaT4KKzxwPkFjY2Vzc2luZyB0ZXJtY2FwLCB0ZXJtaW5mbyB1c2luZyBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgbmN1cnNlcworcGFja2FnZS48L3A+Cis8L2xpPgorPGxpPgorPHA+V29ya2luZyBvbiB0d28gdGVybWluYWxzIHNpbXVsdGFuZW91c2x5LjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5BZGQgbW9yZSBzdHVmZiB0byBtaXNjZWxsYW5lb3VzIHNlY3Rpb24uPC9wPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNPUFlSSUdIVCIgaWQ9IkNPUFlSSUdIVCI+MS45LgorQ29weXJpZ2h0PC9hPjwvaDM+Cis8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDEgYnkgUHJhZGVlcCBQYWRhbGEuPC9wPgorPHA+UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwKK21vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLAorc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdAorcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlCitmb2xsb3dpbmcgY29uZGl0aW9uczo8L3A+Cis8cD5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuPC9wPgorPHA+VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRQorTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuPC9wPgorPHA+RXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlCitjb3B5cmlnaHQgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8KK3Byb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQKK3ByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbi48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iSEVMTE9XT1JMRCIgaWQ9IkhFTExPV09STEQiPjIuIEhlbGxvCitXb3JsZCAhISE8L2E+PC9oMj4KKzxwPldlbGNvbWUgdG8gdGhlIHdvcmxkIG9mIGN1cnNlcy4gQmVmb3JlIHdlIHBsdW5nZSBpbnRvIHRoZQorbGlicmFyeSBhbmQgbG9vayBpbnRvIGl0cyB2YXJpb3VzIGZlYXR1cmVzLCBsZXQncyB3cml0ZSBhIHNpbXBsZQorcHJvZ3JhbSBhbmQgc2F5IGhlbGxvIHRvIHRoZSB3b3JsZC48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJDT01QSUxFQ1VSU0VTIiBpZD0iQ09NUElMRUNVUlNFUyI+Mi4xLgorQ29tcGlsaW5nIFdpdGggdGhlIE5DVVJTRVMgTGlicmFyeTwvYT48L2gzPgorPHA+VG8gdXNlIG5jdXJzZXMgbGlicmFyeSBmdW5jdGlvbnMsIHlvdSBoYXZlIHRvIGluY2x1ZGUgbmN1cnNlcy5oCitpbiB5b3VyIHByb2dyYW1zLiBUbyBsaW5rIHRoZSBwcm9ncmFtIHdpdGggbmN1cnNlcyB0aGUgZmxhZworLWxuY3Vyc2VzIHNob3VsZCBiZSBhZGRlZC48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgICNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisgICAgLgorICAgIC4KKyAgICAuCisKKyAgICBjb21waWxlIGFuZCBsaW5rOiBnY2MgJmx0O3Byb2dyYW0gZmlsZSZndDsgLWxuY3Vyc2VzPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iQkhXIiBpZD0iQkhXIj48L2E+Cis8cD48Yj5FeGFtcGxlIDEuIFRoZSBIZWxsbyBXb3JsZCAhISEgUHJvZ3JhbTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sgICAgICAgCisgICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAgICovCisgICAgICAgIHByaW50dygiSGVsbG8gV29ybGQgISEhIik7ICAgICAgLyogUHJpbnQgSGVsbG8gV29ybGQgICAgICAgICAgICAgICovCisgICAgICAgIHJlZnJlc2goKTsgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgaXQgb24gdG8gdGhlIHJlYWwgc2NyZWVuICovCisgICAgICAgIGdldGNoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgdXNlciBpbnB1dCAqLworICAgICAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iRElTU0VDVElPTiIgaWQ9IkRJU1NFQ1RJT04iPjIuMi4KK0Rpc3NlY3Rpb248L2E+PC9oMz4KKzxwPlRoZSBhYm92ZSBwcm9ncmFtIHByaW50cyAiSGVsbG8gV29ybGQgISEhIiB0byB0aGUgc2NyZWVuIGFuZAorZXhpdHMuIFRoaXMgcHJvZ3JhbSBzaG93cyBob3cgdG8gaW5pdGlhbGl6ZSBjdXJzZXMgYW5kIGRvIHNjcmVlbgorbWFuaXB1bGF0aW9uIGFuZCBlbmQgY3Vyc2VzIG1vZGUuIExldCdzIGRpc3NlY3QgaXQgbGluZSBieQorbGluZS48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJBQk9VVC1JTklUU0NSIiBpZD0iQUJPVVQtSU5JVFNDUiI+Mi4yLjEuCitBYm91dCBpbml0c2NyKCk8L2E+PC9oND4KKzxwPlRoZSBmdW5jdGlvbiBpbml0c2NyKCkgaW5pdGlhbGl6ZXMgdGhlIHRlcm1pbmFsIGluIGN1cnNlcyBtb2RlLgorSW4gc29tZSBpbXBsZW1lbnRhdGlvbnMsIGl0IGNsZWFycyB0aGUgc2NyZWVuIGFuZCBwcmVzZW50cyBhIGJsYW5rCitzY3JlZW4uIFRvIGRvIGFueSBzY3JlZW4gbWFuaXB1bGF0aW9uIHVzaW5nIGN1cnNlcyBwYWNrYWdlIHRoaXMgaGFzCit0byBiZSBjYWxsZWQgZmlyc3QuIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGN1cnNlcyBzeXN0ZW0gYW5kCithbGxvY2F0ZXMgbWVtb3J5IGZvciBvdXIgcHJlc2VudCB3aW5kb3cgKGNhbGxlZCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnN0ZHNjcjwvdmFyPikgYW5kIHNvbWUgb3RoZXIgZGF0YS1zdHJ1Y3R1cmVzLiBVbmRlcgorZXh0cmVtZSBjYXNlcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkKK3RvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY3Vyc2VzIGxpYnJhcnkncyBkYXRhIHN0cnVjdHVyZXMuPC9wPgorPHA+QWZ0ZXIgdGhpcyBpcyBkb25lLCB3ZSBjYW4gZG8gYSB2YXJpZXR5IG9mIGluaXRpYWxpemF0aW9ucyB0bworY3VzdG9taXplIG91ciBjdXJzZXMgc2V0dGluZ3MuIFRoZXNlIGRldGFpbHMgd2lsbCBiZSBleHBsYWluZWQKKzxhIGhyZWY9IiNJTklUIj5sYXRlcjwvYT4gLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iTVlTVC1SRUZSRVNIIiBpZD0iTVlTVC1SRUZSRVNIIj4yLjIuMi4KK1RoZSBteXN0ZXJpb3VzIHJlZnJlc2goKTwvYT48L2g0PgorPHA+VGhlIG5leHQgbGluZSBwcmludHcgcHJpbnRzIHRoZSBzdHJpbmcgIkhlbGxvIFdvcmxkICEhISIgb24gdG8KK3RoZSBzY3JlZW4uIFRoaXMgZnVuY3Rpb24gaXMgYW5hbG9nb3VzIHRvIG5vcm1hbCBwcmludGYgaW4gYWxsCityZXNwZWN0cyBleGNlcHQgdGhhdCBpdCBwcmludHMgdGhlIGRhdGEgb24gYSB3aW5kb3cgY2FsbGVkIHN0ZHNjcgorYXQgdGhlIGN1cnJlbnQgKHkseCkgY28tb3JkaW5hdGVzLiBTaW5jZSBvdXIgcHJlc2VudCBjby1vcmRpbmF0ZXMKK2FyZSBhdCAwLDAgdGhlIHN0cmluZyBpcyBwcmludGVkIGF0IHRoZSBsZWZ0IGhhbmQgY29ybmVyIG9mIHRoZQord2luZG93LjwvcD4KKzxwPlRoaXMgYnJpbmdzIHVzIHRvIHRoYXQgbXlzdGVyaW91cyByZWZyZXNoKCkuIFdlbGwsIHdoZW4gd2UKK2NhbGxlZCBwcmludHcgdGhlIGRhdGEgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byBhbiBpbWFnaW5hcnkgd2luZG93LAord2hpY2ggaXMgbm90IHVwZGF0ZWQgb24gdGhlIHNjcmVlbiB5ZXQuIFRoZSBqb2Igb2YgcHJpbnR3IGlzIHRvCit1cGRhdGUgYSBmZXcgZmxhZ3MgYW5kIGRhdGEgc3RydWN0dXJlcyBhbmQgd3JpdGUgdGhlIGRhdGEgdG8gYQorYnVmZmVyIGNvcnJlc3BvbmRpbmcgdG8gc3Rkc2NyLiBJbiBvcmRlciB0byBzaG93IGl0IG9uIHRoZSBzY3JlZW4sCit3ZSBuZWVkIHRvIGNhbGwgcmVmcmVzaCgpIGFuZCB0ZWxsIHRoZSBjdXJzZXMgc3lzdGVtIHRvIGR1bXAgdGhlCitjb250ZW50cyBvbiB0aGUgc2NyZWVuLjwvcD4KKzxwPlRoZSBwaGlsb3NvcGh5IGJlaGluZCBhbGwgdGhpcyBpcyB0byBhbGxvdyB0aGUgcHJvZ3JhbW1lciB0byBkbworbXVsdGlwbGUgdXBkYXRlcyBvbiB0aGUgaW1hZ2luYXJ5IHNjcmVlbiBvciB3aW5kb3dzIGFuZCBkbyBhCityZWZyZXNoIG9uY2UgYWxsIGhpcyBzY3JlZW4gdXBkYXRlIGlzIGRvbmUuIHJlZnJlc2goKSBjaGVja3MgdGhlCit3aW5kb3cgYW5kIHVwZGF0ZXMgb25seSB0aGUgcG9ydGlvbiB3aGljaCBoYXMgYmVlbiBjaGFuZ2VkLiBUaGlzCitpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgb2ZmZXJzIGdyZWF0ZXIgZmxleGliaWxpdHkgdG9vLiBCdXQsIGl0IGlzCitzb21ldGltZXMgZnJ1c3RyYXRpbmcgdG8gYmVnaW5uZXJzLiBBIGNvbW1vbiBtaXN0YWtlIGNvbW1pdHRlZCBieQorYmVnaW5uZXJzIGlzIHRvIGZvcmdldCB0byBjYWxsIHJlZnJlc2goKSBhZnRlciB0aGV5IGRpZCBzb21lIHVwZGF0ZQordGhyb3VnaCBwcmludHcoKSBjbGFzcyBvZiBmdW5jdGlvbnMuIEkgc3RpbGwgZm9yZ2V0IHRvIGFkZCBpdAorc29tZXRpbWVzIDotKTwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iQUJPVVQtRU5EV0lOIiBpZD0iQUJPVVQtRU5EV0lOIj4yLjIuMy4KK0Fib3V0IGVuZHdpbigpPC9hPjwvaDQ+Cis8cD5BbmQgZmluYWxseSBkb24ndCBmb3JnZXQgdG8gZW5kIHRoZSBjdXJzZXMgbW9kZS4gT3RoZXJ3aXNlIHlvdXIKK3Rlcm1pbmFsIG1pZ2h0IGJlaGF2ZSBzdHJhbmdlbHkgYWZ0ZXIgdGhlIHByb2dyYW0gcXVpdHMuIGVuZHdpbigpCitmcmVlcyB0aGUgbWVtb3J5IHRha2VuIGJ5IGN1cnNlcyBzdWItc3lzdGVtIGFuZCBpdHMgZGF0YSBzdHJ1Y3R1cmVzCithbmQgcHV0cyB0aGUgdGVybWluYWwgaW4gbm9ybWFsIG1vZGUuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKK2FmdGVyIHlvdSBhcmUgZG9uZSB3aXRoIHRoZSBjdXJzZXMgbW9kZS48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJHT1JZIiBpZD0iR09SWSI+My4gVGhlIEdvcnkKK0RldGFpbHM8L2E+PC9oMj4KKzxwPk5vdyB0aGF0IHdlIGhhdmUgc2VlbiBob3cgdG8gd3JpdGUgYSBzaW1wbGUgY3Vyc2VzIHByb2dyYW0gbGV0J3MKK2dldCBpbnRvIHRoZSBkZXRhaWxzLiBUaGVyZSBhcmUgbWFueSBmdW5jdGlvbnMgdGhhdCBoZWxwIGN1c3RvbWl6ZQord2hhdCB5b3Ugc2VlIG9uIHNjcmVlbiBhbmQgbWFueSBmZWF0dXJlcyB3aGljaCBjYW4gYmUgcHV0IHRvIGZ1bGwKK3VzZS48L3A+Cis8cD5IZXJlIHdlIGdvLi4uPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJJTklUIiBpZD0iSU5JVCI+NC4KK0luaXRpYWxpemF0aW9uPC9hPjwvaDI+Cis8cD5XZSBub3cga25vdyB0aGF0IHRvIGluaXRpYWxpemUgY3Vyc2VzIHN5c3RlbSB0aGUgZnVuY3Rpb24KK2luaXRzY3IoKSBoYXMgdG8gYmUgY2FsbGVkLiBUaGVyZSBhcmUgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSBjYWxsZWQKK2FmdGVyIHRoaXMgaW5pdGlhbGl6YXRpb24gdG8gY3VzdG9taXplIG91ciBjdXJzZXMgc2Vzc2lvbi4gV2UgbWF5Cithc2sgdGhlIGN1cnNlcyBzeXN0ZW0gdG8gc2V0IHRoZSB0ZXJtaW5hbCBpbiByYXcgbW9kZSBvciBpbml0aWFsaXplCitjb2xvciBvciBpbml0aWFsaXplIHRoZSBtb3VzZSBldGMuLiBMZXQncyBkaXNjdXNzIHNvbWUgb2YgdGhlCitmdW5jdGlvbnMgdGhhdCBhcmUgbm9ybWFsbHkgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGluaXRzY3IoKTs8L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBQk9VVElOSVQiIGlkPSJBQk9VVElOSVQiPjQuMS4KK0luaXRpYWxpemF0aW9uIGZ1bmN0aW9uczwvYT48L2gzPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJSQVdDQlJFQUsiIGlkPSJSQVdDQlJFQUsiPjQuMi4gcmF3KCkgYW5kCitjYnJlYWsoKTwvYT48L2gzPgorPHA+Tm9ybWFsbHkgdGhlIHRlcm1pbmFsIGRyaXZlciBidWZmZXJzIHRoZSBjaGFyYWN0ZXJzIGEgdXNlciB0eXBlcwordW50aWwgYSBuZXcgbGluZSBvciBjYXJyaWFnZSByZXR1cm4gaXMgZW5jb3VudGVyZWQuIEJ1dCBtb3N0Citwcm9ncmFtcyByZXF1aXJlIHRoYXQgdGhlIGNoYXJhY3RlcnMgYmUgYXZhaWxhYmxlIGFzIHNvb24gYXMgdGhlCit1c2VyIHR5cGVzIHRoZW0uIFRoZSBhYm92ZSB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGRpc2FibGUgbGluZQorYnVmZmVyaW5nLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgaW4gdGhlIHdheQorY29udHJvbCBjaGFyYWN0ZXJzIGxpa2Ugc3VzcGVuZCAoQ1RSTC1aKSwgaW50ZXJydXB0IGFuZCBxdWl0CisoQ1RSTC1DKSBhcmUgcGFzc2VkIHRvIHRoZSBwcm9ncmFtLiBJbiB0aGUgcmF3KCkgbW9kZSB0aGVzZQorY2hhcmFjdGVycyBhcmUgZGlyZWN0bHkgcGFzc2VkIHRvIHRoZSBwcm9ncmFtIHdpdGhvdXQgZ2VuZXJhdGluZyBhCitzaWduYWwuIEluIHRoZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5jYnJlYWsoKTwvdmFyPiBtb2RlIHRoZXNlCitjb250cm9sIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIGFueSBvdGhlciBjaGFyYWN0ZXIgYnkgdGhlCit0ZXJtaW5hbCBkcml2ZXIuIEkgcGVyc29uYWxseSBwcmVmZXIgdG8gdXNlIHJhdygpIGFzIEkgY2FuIGV4ZXJjaXNlCitncmVhdGVyIGNvbnRyb2wgb3ZlciB3aGF0IHRoZSB1c2VyIGRvZXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJFQ0hPTk9FQ0hPIiBpZD0iRUNIT05PRUNITyI+NC4zLiBlY2hvKCkKK2FuZCBub2VjaG8oKTwvYT48L2gzPgorPHA+VGhlc2UgZnVuY3Rpb25zIGNvbnRyb2wgdGhlIGVjaG9pbmcgb2YgY2hhcmFjdGVycyB0eXBlZCBieSB0aGUKK3VzZXIgdG8gdGhlIHRlcm1pbmFsLiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5ub2VjaG8oKTwvdmFyPiBzd2l0Y2hlcworb2ZmIGVjaG9pbmcuIFRoZSByZWFzb24geW91IG1pZ2h0IHdhbnQgdG8gZG8gdGhpcyBpcyB0byBnYWluIG1vcmUKK2NvbnRyb2wgb3ZlciBlY2hvaW5nIG9yIHRvIHN1cHByZXNzIHVubmVjZXNzYXJ5IGVjaG9pbmcgd2hpbGUKK3Rha2luZyBpbnB1dCBmcm9tIHRoZSB1c2VyIHRocm91Z2ggdGhlIGdldGNoKCkgZXRjLiBmdW5jdGlvbnMuIE1vc3QKK29mIHRoZSBpbnRlcmFjdGl2ZSBwcm9ncmFtcyBjYWxsIDx2YXIgY2xhc3M9CisiTElURVJBTCI+bm9lY2hvKCk8L3Zhcj4gYXQgaW5pdGlhbGl6YXRpb24gYW5kIGRvIHRoZSBlY2hvaW5nIG9mCitjaGFyYWN0ZXJzIGluIGEgY29udHJvbGxlZCBtYW5uZXIuIEl0IGdpdmVzIHRoZSBwcm9ncmFtbWVyIHRoZQorZmxleGliaWxpdHkgb2YgZWNob2luZyBjaGFyYWN0ZXJzIGF0IGFueSBwbGFjZSBpbiB0aGUgd2luZG93Cit3aXRob3V0IHVwZGF0aW5nIGN1cnJlbnQgKHkseCkgY28tb3JkaW5hdGVzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iS0VZUEFEIiBpZD0iS0VZUEFEIj40LjQuCitrZXlwYWQoKTwvYT48L2gzPgorPHA+VGhpcyBpcyBteSBmYXZvcml0ZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSXQgZW5hYmxlcyB0aGUKK3JlYWRpbmcgb2YgZnVuY3Rpb24ga2V5cyBsaWtlIEYxLCBGMiwgYXJyb3cga2V5cyBldGMuIEFsbW9zdCBldmVyeQoraW50ZXJhY3RpdmUgcHJvZ3JhbSBlbmFibGVzIHRoaXMsIGFzIGFycm93IGtleXMgYXJlIGEgbWFqb3IgcGFydCBvZgorYW55IFVzZXIgSW50ZXJmYWNlLiBEbyA8dmFyIGNsYXNzPSJMSVRFUkFMIj5rZXlwYWQoc3Rkc2NyLAorVFJVRSk8L3Zhcj4gdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBmb3IgdGhlIHJlZ3VsYXIgc2NyZWVuIChzdGRzY3IpLgorWW91IHdpbGwgbGVhcm4gbW9yZSBhYm91dCBrZXkgbWFuYWdlbWVudCBpbiBsYXRlciBzZWN0aW9ucyBvZiB0aGlzCitkb2N1bWVudC48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkhBTEZERUxBWSIgaWQ9IkhBTEZERUxBWSI+NC41LgoraGFsZmRlbGF5KCk8L2E+PC9oMz4KKzxwPlRoaXMgZnVuY3Rpb24sIHRob3VnaCBub3QgdXNlZCB2ZXJ5IG9mdGVuLCBpcyBhIHVzZWZ1bCBvbmUgYXQKK3RpbWVzLiBoYWxmZGVsYXkoKWlzIGNhbGxlZCB0byBlbmFibGUgdGhlIGhhbGYtZGVsYXkgbW9kZSwgd2hpY2ggaXMKK3NpbWlsYXIgdG8gdGhlIGNicmVhaygpIG1vZGUgaW4gdGhhdCBjaGFyYWN0ZXJzIHR5cGVkIGFyZQoraW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvIHByb2dyYW0uIEhvd2V2ZXIsIGl0IHdhaXRzIGZvciAnWCcgdGVudGhzCitvZiBhIHNlY29uZCBmb3IgaW5wdXQgYW5kIHRoZW4gcmV0dXJucyBFUlIsIGlmIG5vIGlucHV0IGlzCithdmFpbGFibGUuICdYJyBpcyB0aGUgdGltZW91dCB2YWx1ZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCitoYWxmZGVsYXkoKS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBhc2sgdGhlIHVzZXIKK2ZvciBpbnB1dCwgYW5kIGlmIGhlIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGluIGNlcnRhaW4gdGltZSwgd2UgY2FuCitkbyBzb21lIHRoaW5nIGVsc2UuIE9uZSBwb3NzaWJsZSBleGFtcGxlIGlzIGEgdGltZW91dCBhdCB0aGUKK3Bhc3N3b3JkIHByb21wdC48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1JU0NJTklUIiBpZD0iTUlTQ0lOSVQiPjQuNi4KK01pc2NlbGxhbmVvdXMgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGVyZSBhcmUgZmV3IG1vcmUgZnVuY3Rpb25zIHdoaWNoIGFyZSBjYWxsZWQgYXQgaW5pdGlhbGl6YXRpb24KK3RvIGN1c3RvbWl6ZSBjdXJzZXMgYmVoYXZpb3IuIFRoZXkgYXJlIG5vdCB1c2VkIGFzIGV4dGVuc2l2ZWx5IGFzCit0aG9zZSBtZW50aW9uZWQgYWJvdmUuIFNvbWUgb2YgdGhlbSBhcmUgZXhwbGFpbmVkIHdoZXJlCithcHByb3ByaWF0ZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IklOSVRFWCIgaWQ9IklOSVRFWCI+NC43LiBBbgorRXhhbXBsZTwvYT48L2gzPgorPHA+TGV0J3Mgd3JpdGUgYSBwcm9ncmFtIHdoaWNoIHdpbGwgY2xhcmlmeSB0aGUgdXNhZ2Ugb2YgdGhlc2UKK2Z1bmN0aW9ucy48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCSU5GVSIgaWQ9IkJJTkZVIj48L2E+Cis8cD48Yj5FeGFtcGxlIDIuIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9uIFVzYWdlIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworCitpbnQgbWFpbigpCit7ICAgICAgIGludCBjaDsKKworICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGN1cnNlcyBtb2RlICAgICAgICAgICAgKi8KKyAgICAgICAgcmF3KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGJ1ZmZlcmluZyBkaXNhYmxlZCAgICAgICovCisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOyAgICAgICAgICAgLyogV2UgZ2V0IEYxLCBGMiBldGMuLiAgICAgICAgICAqLworICAgICAgICBub2VjaG8oKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGVjaG8oKSB3aGlsZSB3ZSBkbyBnZXRjaCAqLworCisgICAgICAgIHByaW50dygiVHlwZSBhbnkgY2hhcmFjdGVyIHRvIHNlZSBpdCBpbiBib2xkXG4iKTsKKyAgICAgICAgY2ggPSBnZXRjaCgpOyAgICAgICAgICAgICAgICAgICAvKiBJZiByYXcoKSBoYWRuJ3QgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBoYXZlIHRvIHByZXNzIGVudGVyIGJlZm9yZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGdldHMgdG8gdGhlIHByb2dyYW0gICAgICAgICAgKi8KKyAgICAgICAgaWYoY2ggPT0gS0VZX0YoMSkpICAgICAgICAgICAgICAvKiBXaXRob3V0IGtleXBhZCBlbmFibGVkIHRoaXMgd2lsbCAqLworICAgICAgICAgICAgICAgIHByaW50dygiRjEgS2V5IHByZXNzZWQiKTsvKiAgbm90IGdldCB0byB1cyBlaXRoZXIgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaXRob3V0IG5vZWNobygpIHNvbWUgdWdseSBlc2NhcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjaGFyYWNodGVycyBtaWdodCBoYXZlIGJlZW4gcHJpbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9uIHNjcmVlbiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgZWxzZQorICAgICAgICB7ICAgICAgIHByaW50dygiVGhlIHByZXNzZWQga2V5IGlzICIpOworICAgICAgICAgICAgICAgIGF0dHJvbihBX0JPTEQpOworICAgICAgICAgICAgICAgIHByaW50dygiJWMiLCBjaCk7CisgICAgICAgICAgICAgICAgYXR0cm9mZihBX0JPTEQpOworICAgICAgICB9CisgICAgICAgIHJlZnJlc2goKTsgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgaXQgb24gdG8gdGhlIHJlYWwgc2NyZWVuICovCisgICAgICAgIGdldGNoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgdXNlciBpbnB1dCAqLworICAgICAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPlRoaXMgcHJvZ3JhbSBpcyBzZWxmLWV4cGxhbmF0b3J5LiBCdXQgSSB1c2VkIGZ1bmN0aW9ucyB3aGljaAorYXJlbid0IGV4cGxhaW5lZCB5ZXQuIFRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmdldGNoKCk8L3Zhcj4gaXMgdXNlZCB0byBnZXQgYSBjaGFyYWN0ZXIgZnJvbSB1c2VyLiBJdCBpcworZXF1aXZhbGVudCB0byBub3JtYWwgPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0Y2hhcigpPC92YXI+IGV4Y2VwdAordGhhdCB3ZSBjYW4gZGlzYWJsZSB0aGUgbGluZSBidWZmZXJpbmcgdG8gYXZvaWQgJmx0O2VudGVyJmd0OyBhZnRlcgoraW5wdXQuIExvb2sgZm9yIG1vcmUgYWJvdXQgPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0Y2goKTwvdmFyPmFuZAorcmVhZGluZyBrZXlzIGluIHRoZSA8YSBocmVmPSIjS0VZUyI+a2V5IG1hbmFnZW1lbnQgc2VjdGlvbjwvYT4gLgorVGhlIGZ1bmN0aW9ucyBhdHRyb24gYW5kIGF0dHJvZmYgYXJlIHVzZWQgdG8gc3dpdGNoIHNvbWUgYXR0cmlidXRlcworb24gYW5kIG9mZiByZXNwZWN0aXZlbHkuIEluIHRoZSBleGFtcGxlIEkgdXNlZCB0aGVtIHRvIHByaW50IHRoZQorY2hhcmFjdGVyIGluIGJvbGQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwbGFpbmVkIGluIGRldGFpbAorbGF0ZXIuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IkFXT1JEV0lORE9XUyIgaWQ9IkFXT1JEV0lORE9XUyI+NS4gQQorV29yZCBhYm91dCBXaW5kb3dzPC9hPjwvaDI+Cis8cD5CZWZvcmUgd2UgcGx1bmdlIGludG8gdGhlIG15cmlhZCBuY3Vyc2VzIGZ1bmN0aW9ucywgbGV0IG1lIGNsZWFyCitmZXcgdGhpbmdzIGFib3V0IHdpbmRvd3MuIFdpbmRvd3MgYXJlIGV4cGxhaW5lZCBpbiBkZXRhaWwgaW4KK2ZvbGxvd2luZyA8YSBocmVmPSIjV0lORE9XUyI+c2VjdGlvbnM8L2E+PC9wPgorPHA+QSBXaW5kb3cgaXMgYW4gaW1hZ2luYXJ5IHNjcmVlbiBkZWZpbmVkIGJ5IGN1cnNlcyBzeXN0ZW0uIEEKK3dpbmRvdyBkb2VzIG5vdCBtZWFuIGEgYm9yZGVyZWQgd2luZG93IHdoaWNoIHlvdSB1c3VhbGx5IHNlZSBvbgorV2luOVggcGxhdGZvcm1zLiBXaGVuIGN1cnNlcyBpcyBpbml0aWFsaXplZCwgaXQgY3JlYXRlcyBhIGRlZmF1bHQKK3dpbmRvdyBuYW1lZCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5zdGRzY3I8L3Zhcj4gd2hpY2ggcmVwcmVzZW50cworeW91ciA4MHgyNSAob3IgdGhlIHNpemUgb2Ygd2luZG93IGluIHdoaWNoIHlvdSBhcmUgcnVubmluZykgc2NyZWVuLgorSWYgeW91IGFyZSBkb2luZyBzaW1wbGUgdGFza3MgbGlrZSBwcmludGluZyBmZXcgc3RyaW5ncywgcmVhZGluZworaW5wdXQgZXRjLiwgeW91IGNhbiBzYWZlbHkgdXNlIHRoaXMgc2luZ2xlIHdpbmRvdyBmb3IgYWxsIG9mIHlvdXIKK3B1cnBvc2VzLiBZb3UgY2FuIGFsc28gY3JlYXRlIHdpbmRvd3MgYW5kIGNhbGwgZnVuY3Rpb25zIHdoaWNoCitleHBsaWNpdGx5IHdvcmsgb24gdGhlIHNwZWNpZmllZCB3aW5kb3cuPC9wPgorPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBjYWxsPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBwcmludHcoIkhpIFRoZXJlICEhISIpOworICAgIHJlZnJlc2goKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5JdCBwcmludHMgdGhlIHN0cmluZyBvbiBzdGRzY3IgYXQgdGhlIHByZXNlbnQgY3Vyc29yIHBvc2l0aW9uLgorU2ltaWxhcmx5IHRoZSBjYWxsIHRvIHJlZnJlc2goKSwgd29ya3Mgb24gc3Rkc2NyIG9ubHkuPC9wPgorPHA+U2F5IHlvdSBoYXZlIGNyZWF0ZWQgPGEgaHJlZj0iI1dJTkRPV1MiPndpbmRvd3M8L2E+IHRoZW4geW91CitoYXZlIHRvIGNhbGwgYSBmdW5jdGlvbiB3aXRoIGEgJ3cnIGFkZGVkIHRvIHRoZSB1c3VhbCBmdW5jdGlvbi48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIHdwcmludHcod2luLCAiSGkgVGhlcmUgISEhIik7CisgICAgd3JlZnJlc2god2luKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5BcyB5b3Ugd2lsbCBzZWUgaW4gdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50LCBuYW1pbmcgb2YgZnVuY3Rpb25zCitmb2xsb3cgdGhlIHNhbWUgY29udmVudGlvbi4gRm9yIGVhY2ggZnVuY3Rpb24gdGhlcmUgdXN1YWxseSBhcmUKK3RocmVlIG1vcmUgZnVuY3Rpb25zLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiAgICBwcmludHcoc3RyaW5nKTsgICAgICAgIC8qIFByaW50IG9uIHN0ZHNjciBhdCBwcmVzZW50IGN1cnNvciBwb3NpdGlvbiAqLworICAgIG12cHJpbnR3KHksIHgsIHN0cmluZyk7LyogTW92ZSB0byAoeSwgeCkgdGhlbiBwcmludCBzdHJpbmcgICAgICovCisgICAgd3ByaW50dyh3aW4sIHN0cmluZyk7ICAvKiBQcmludCBvbiB3aW5kb3cgd2luIGF0IHByZXNlbnQgY3Vyc29yIHBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiB0aGUgd2luZG93ICovCisgICAgbXZ3cHJpbnR3KHdpbiwgeSwgeCwgc3RyaW5nKTsgICAvKiBNb3ZlIHRvICh5LCB4KSByZWxhdGl2ZSB0byB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvLW9yZGluYXRlcyBhbmQgdGhlbiBwcmludCAgICAgICAgICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VXN1YWxseSB0aGUgdy1sZXNzIGZ1bmN0aW9ucyBhcmUgbWFjcm9zIHdoaWNoIGV4cGFuZCB0bworY29ycmVzcG9uZGluZyB3LWZ1bmN0aW9uIHdpdGggc3Rkc2NyIGFzIHRoZSB3aW5kb3cgcGFyYW1ldGVyLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iUFJJTlRXIiBpZD0iUFJJTlRXIj42LiBPdXRwdXQKK2Z1bmN0aW9uczwvYT48L2gyPgorPHA+SSBndWVzcyB5b3UgY2FuJ3Qgd2FpdCBhbnkgbW9yZSB0byBzZWUgc29tZSBhY3Rpb24uIEJhY2sgdG8gb3VyCitvZHlzc2V5IG9mIGN1cnNlcyBmdW5jdGlvbnMuIE5vdyB0aGF0IGN1cnNlcyBpcyBpbml0aWFsaXplZCwgbGV0J3MKK2ludGVyYWN0IHdpdGggd29ybGQuPC9wPgorPHA+VGhlcmUgYXJlIHRocmVlIGNsYXNzZXMgb2YgZnVuY3Rpb25zIHdoaWNoIHlvdSBjYW4gdXNlIHRvIGRvCitvdXRwdXQgb24gc2NyZWVuLjwvcD4KKzxvbCB0eXBlPSIxIj4KKzxsaT4KKzxwPmFkZGNoKCkgY2xhc3M6IFByaW50IHNpbmdsZSBjaGFyYWN0ZXIgd2l0aCBhdHRyaWJ1dGVzPC9wPgorPC9saT4KKzxsaT4KKzxwPnByaW50dygpIGNsYXNzOiBQcmludCBmb3JtYXR0ZWQgb3V0cHV0IHNpbWlsYXIgdG8gcHJpbnRmKCk8L3A+Cis8L2xpPgorPGxpPgorPHA+YWRkc3RyKCkgY2xhc3M6IFByaW50IHN0cmluZ3M8L3A+Cis8L2xpPgorPC9vbD4KKzxwPlRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgYW5kIGl0J3MgYSBtYXR0ZXIgb2YKK3N0eWxlIGFzIHRvIHdoaWNoIGNsYXNzIGlzIHVzZWQuIExldCdzIHNlZSBlYWNoIG9uZSBpbiBkZXRhaWwuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQUREQ0hDTEFTUyIgaWQ9IkFERENIQ0xBU1MiPjYuMS4gYWRkY2goKQorY2xhc3Mgb2YgZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGVzZSBmdW5jdGlvbnMgcHV0IGEgc2luZ2xlIGNoYXJhY3RlciBpbnRvIHRoZSBjdXJyZW50IGN1cnNvcgorbG9jYXRpb24gYW5kIGFkdmFuY2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IuIFlvdSBjYW4gZ2l2ZSB0aGUKK2NoYXJhY3RlciB0byBiZSBwcmludGVkIGJ1dCB0aGV5IHVzdWFsbHkgYXJlIHVzZWQgdG8gcHJpbnQgYQorY2hhcmFjdGVyIHdpdGggc29tZSBhdHRyaWJ1dGVzLiBBdHRyaWJ1dGVzIGFyZSBleHBsYWluZWQgaW4gZGV0YWlsCitpbiBsYXRlciA8YSBocmVmPSIjQVRUUklCIj5zZWN0aW9uczwvYT4gb2YgdGhlIGRvY3VtZW50LiBJZiBhCitjaGFyYWN0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGF0dHJpYnV0ZShib2xkLCByZXZlcnNlIHZpZGVvCitldGMuKSwgd2hlbiBjdXJzZXMgcHJpbnRzIHRoZSBjaGFyYWN0ZXIsIGl0IGlzIHByaW50ZWQgaW4gdGhhdAorYXR0cmlidXRlLjwvcD4KKzxwPkluIG9yZGVyIHRvIGNvbWJpbmUgYSBjaGFyYWN0ZXIgd2l0aCBzb21lIGF0dHJpYnV0ZXMsIHlvdSBoYXZlCit0d28gb3B0aW9uczo8L3A+Cis8dWw+Cis8bGk+Cis8cD5CeSBPUidpbmcgYSBzaW5nbGUgY2hhcmFjdGVyIHdpdGggdGhlIGRlc2lyZWQgYXR0cmlidXRlIG1hY3Jvcy4KK1RoZXNlIGF0dHJpYnV0ZSBtYWNyb3MgY291bGQgYmUgZm91bmQgaW4gdGhlIGhlYWRlciBmaWxlCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5uY3Vyc2VzLmg8L3Zhcj4uIEZvciBleGFtcGxlLCB5b3Ugd2FudCB0bworcHJpbnQgYSBjaGFyYWN0ZXIgY2gob2YgdHlwZSBjaGFyKSBib2xkIGFuZCB1bmRlcmxpbmVkLCB5b3Ugd291bGQKK2NhbGwgYWRkY2goKSBhcyBiZWxvdy48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iOTAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgYWRkY2goY2ggfCBBX0JPTEQgfCBBX1VOREVSTElORSk7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9saT4KKzxsaT4KKzxwPkJ5IHVzaW5nIGZ1bmN0aW9ucyBsaWtlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+YXR0cnNldCgpLGF0dHJvbigpLGF0dHJvZmYoKTwvdmFyPi4gVGhlc2UgZnVuY3Rpb25zIGFyZQorZXhwbGFpbmVkIGluIHRoZSA8YSBocmVmPSIjQVRUUklCIj5BdHRyaWJ1dGVzPC9hPiBzZWN0aW9uLiBCcmllZmx5LAordGhleSBtYW5pcHVsYXRlIHRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgb2YgdGhlIGdpdmVuIHdpbmRvdy4gT25jZQorc2V0LCB0aGUgY2hhcmFjdGVyIHByaW50ZWQgaW4gdGhlIHdpbmRvdyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZQorYXR0cmlidXRlcyB1bnRpbCBpdCBpcyB0dXJuZWQgb2ZmLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+QWRkaXRpb25hbGx5LCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5jdXJzZXM8L3Zhcj4gcHJvdmlkZXMgc29tZQorc3BlY2lhbCBjaGFyYWN0ZXJzIGZvciBjaGFyYWN0ZXItYmFzZWQgZ3JhcGhpY3MuIFlvdSBjYW4gZHJhdwordGFibGVzLCBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGxpbmVzLCBldGMuIFlvdSBjYW4gZmluZCBhbGwKK2F2YWxpYWJsZSBjaGFyYWN0ZXJzIGluIHRoZSBoZWFkZXIgZmlsZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPm5jdXJzZXMuaDwvdmFyPi4gVHJ5IGxvb2tpbmcgZm9yIG1hY3JvcyBiZWdpbm5pbmcgd2l0aAorPHZhciBjbGFzcz0iTElURVJBTCI+QUNTXzwvdmFyPiBpbiB0aGlzIGZpbGUuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBRU4yOTgiIGlkPSJBRU4yOTgiPjYuMi4gbXZhZGRjaCgpLAord2FkZGNoKCkgYW5kIG12d2FkZGNoKCk8L2E+PC9oMz4KKzxwPjx2YXIgY2xhc3M9IkxJVEVSQUwiPm12YWRkY2goKTwvdmFyPiBpcyB1c2VkIHRvIG1vdmUgdGhlIGN1cnNvcgordG8gYSBnaXZlbiBwb2ludCwgYW5kIHRoZW4gcHJpbnQuIFRodXMsIHRoZSBjYWxsczo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4gICAgbW92ZShyb3csY29sKTsgICAgLyogbW92ZXMgdGhlIGN1cnNvciB0byByb3c8ZW0+dGg8L2VtPiByb3cgYW5kIGNvbDxlbT50aDwvZW0+IGNvbHVtbiAqLworICAgIGFkZGNoKGNoKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+CitjYW4gYmUgcmVwbGFjZWQgYnkKKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgbXZhZGRjaChyb3csY29sLGNoKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD48dmFyIGNsYXNzPSJMSVRFUkFMIj53YWRkY2goKTwvdmFyPiBpcyBzaW1pbGFyIHRvIDx2YXIgY2xhc3M9CisiTElURVJBTCI+YWRkY2goKTwvdmFyPiwgZXhjZXB0IHRoYXQgaXQgYWRkcyBhIGNoYXJhY3RlciBpbnRvIHRoZQorZ2l2ZW4gd2luZG93LiAoTm90ZSB0aGF0IDx2YXIgY2xhc3M9IkxJVEVSQUwiPmFkZGNoKCk8L3Zhcj4gYWRkcyBhCitjaGFyYWN0ZXIgaW50byB0aGUgd2luZG93IDx2YXIgY2xhc3M9IkxJVEVSQUwiPnN0ZHNjcjwvdmFyPi4pPC9wPgorPHA+SW4gYSBzaW1pbGFyIGZhc2hpb24gPHZhciBjbGFzcz0iTElURVJBTCI+bXZ3YWRkY2goKTwvdmFyPgorZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgYSBjaGFyYWN0ZXIgaW50byB0aGUgZ2l2ZW4gd2luZG93IGF0IHRoZQorZ2l2ZW4gY29vcmRpbmF0ZXMuPC9wPgorPHA+Tm93LCB3ZSBhcmUgZmFtaWxpYXIgd2l0aCB0aGUgYmFzaWMgb3V0cHV0IGZ1bmN0aW9uIDx2YXIgY2xhc3M9CisiTElURVJBTCI+YWRkY2goKTwvdmFyPi4gQnV0LCBpZiB3ZSB3YW50IHRvIHByaW50IGEgc3RyaW5nLCBpdAord291bGQgYmUgdmVyeSBhbm5veWluZyB0byBwcmludCBpdCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLgorRm9ydHVuYXRlbHksIDx2YXIgY2xhc3M9IkxJVEVSQUwiPm5jdXJzZXM8L3Zhcj4gcHJvdmlkZXMKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPnByaW50ZjwvdmFyPjxlbT4tbGlrZTwvZW0+IG9yIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cHV0czwvdmFyPjxlbT4tbGlrZTwvZW0+IGZ1bmN0aW9ucy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlBSSU5UV0NMQVNTIiBpZD0iUFJJTlRXQ0xBU1MiPjYuMy4KK3ByaW50dygpIGNsYXNzIG9mIGZ1bmN0aW9uczwvYT48L2gzPgorPHA+VGhlc2UgZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cHJpbnRmKCk8L3Zhcj4gd2l0aCB0aGUgYWRkZWQgY2FwYWJpbGl0eSBvZiBwcmludGluZyBhdAorYW55IHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4uPC9wPgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iUFJJTlRXTVZQUklOVFciIGlkPQorIlBSSU5UV01WUFJJTlRXIj42LjMuMS4gcHJpbnR3KCkgYW5kIG12cHJpbnR3PC9hPjwvaDQ+Cis8cD5UaGVzZSB0d28gZnVuY3Rpb25zIHdvcmsgbXVjaCBsaWtlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cHJpbnRmKCk8L3Zhcj4uIDx2YXIgY2xhc3M9IkxJVEVSQUwiPm12cHJpbnR3KCk8L3Zhcj4gY2FuCitiZSB1c2VkIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhIHBvc2l0aW9uIGFuZCB0aGVuIHByaW50LiBJZiB5b3UKK3dhbnQgdG8gbW92ZSB0aGUgY3Vyc29yIGZpcnN0IGFuZCB0aGVuIHByaW50IHVzaW5nIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cHJpbnR3KCk8L3Zhcj4gZnVuY3Rpb24sIHVzZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPm1vdmUoKTwvdmFyPiBmaXJzdCBhbmQgdGhlbiB1c2UgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5wcmludHcoKTwvdmFyPiB0aG91Z2ggSSBzZWUgbm8gcG9pbnQgd2h5IG9uZSBzaG91bGQgYXZvaWQKK3VzaW5nIDx2YXIgY2xhc3M9IkxJVEVSQUwiPm12cHJpbnR3KCk8L3Zhcj4sIHlvdSBoYXZlIHRoZQorZmxleGliaWxpdHkgdG8gbWFuaXB1bGF0ZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IldQUklOVFdNVldQUklOVFciIGlkPQorIldQUklOVFdNVldQUklOVFciPjYuMy4yLiB3cHJpbnR3KCkgYW5kIG12d3ByaW50dzwvYT48L2g0PgorPHA+VGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgc2ltaWxhciB0byBhYm92ZSB0d28gZXhjZXB0IHRoYXQgdGhleQorcHJpbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgd2luZG93IGdpdmVuIGFzIGFyZ3VtZW50LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iVldQUklOVFciIGlkPSJWV1BSSU5UVyI+Ni4zLjMuCit2d3ByaW50dygpPC9hPjwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj52cHJpbnRmKCk8L3Zhcj4uIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiB2YXJpYWJsZSBudW1iZXIgb2YKK2FyZ3VtZW50cyBhcmUgdG8gYmUgcHJpbnRlZC48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IlNJTVBMRVBSSU5UV0VYIiBpZD0KKyJTSU1QTEVQUklOVFdFWCI+Ni4zLjQuIEEgU2ltcGxlIHByaW50dyBleGFtcGxlPC9hPjwvaDQ+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCUFJFWCIgaWQ9IkJQUkVYIj48L2E+Cis8cD48Yj5FeGFtcGxlIDMuIEEgU2ltcGxlIHByaW50dyBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O25jdXJzZXMuaCZndDsgICAgICAgICAgICAgICAgICAgLyogbmN1cnNlcy5oIGluY2x1ZGVzIHN0ZGlvLmggKi8gIAorI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OyAKKyAKK2ludCBtYWluKCkKK3sKKyBjaGFyIG1lc2dbXT0iSnVzdCBhIHN0cmluZyI7ICAgICAgICAgICAvKiBtZXNzYWdlIHRvIGJlIGFwcGVhcmVkIG9uIHRoZSBzY3JlZW4gKi8KKyBpbnQgcm93LGNvbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbnVtYmVyIG9mIGNvbHVtcyBvZiB0aGUgc2NyZWVuICovCisgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgdGhlIGN1cnNlcyBtb2RlICovCisgZ2V0bWF4eXgoc3Rkc2NyLHJvdyxjb2wpOyAgICAgICAgICAgICAgLyogZ2V0IHRoZSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyAqLworIG12cHJpbnR3KHJvdy8yLChjb2wtc3RybGVuKG1lc2cpKS8yLCIlcyIsbWVzZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnQgdGhlIG1lc3NhZ2UgYXQgdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuICovCisgbXZwcmludHcocm93LTIsMCwiVGhpcyBzY3JlZW4gaGFzICVkIHJvd3MgYW5kICVkIGNvbHVtbnNcbiIscm93LGNvbCk7CisgcHJpbnR3KCJUcnkgcmVzaXppbmcgeW91ciB3aW5kb3coaWYgcG9zc2libGUpIGFuZCB0aGVuIHJ1biB0aGlzIHByb2dyYW0gYWdhaW4iKTsKKyByZWZyZXNoKCk7CisgZ2V0Y2goKTsKKyBlbmR3aW4oKTsKKworIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPkFib3ZlIHByb2dyYW0gZGVtb25zdHJhdGVzIGhvdyBlYXN5IGl0IGlzIHRvIHVzZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnByaW50dzwvdmFyPi4gWW91IGp1c3QgZmVlZCB0aGUgY29vcmRpbmF0ZXMgYW5kIHRoZQorbWVzc2FnZSB0byBiZSBhcHBlYXJlZCBvbiB0aGUgc2NyZWVuLCB0aGVuIGl0IGRvZXMgd2hhdCB5b3UKK3dhbnQuPC9wPgorPHA+VGhlIGFib3ZlIHByb2dyYW0gaW50cm9kdWNlcyB1cyB0byBhIG5ldyBmdW5jdGlvbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmdldG1heHl4KCk8L3Zhcj4sIGEgbWFjcm8gZGVmaW5lZCBpbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPm5jdXJzZXMuaDwvdmFyPi4gSXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGFuZCB0aGUKK251bWJlciBvZiByb3dzIGluIGEgZ2l2ZW4gd2luZG93LiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmdldG1heHl4KCk8L3Zhcj4gZG9lcyB0aGlzIGJ5IHVwZGF0aW5nIHRoZSB2YXJpYWJsZXMKK2dpdmVuIHRvIGl0LiBTaW5jZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXRtYXh5eCgpPC92YXI+IGlzIG5vdCBhCitmdW5jdGlvbiB3ZSBkb24ndCBwYXNzIHBvaW50ZXJzIHRvIGl0LCB3ZSBqdXN0IGdpdmUgdHdvIGludGVnZXIKK3ZhcmlhYmxlcy48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQUREU1RSQ0xBU1MiIGlkPSJBRERTVFJDTEFTUyI+Ni40LgorYWRkc3RyKCkgY2xhc3Mgb2YgZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD48dmFyIGNsYXNzPSJMSVRFUkFMIj5hZGRzdHIoKTwvdmFyPiBpcyB1c2VkIHRvIHB1dCBhIGNoYXJhY3Rlcgorc3RyaW5nIGludG8gYSBnaXZlbiB3aW5kb3cuIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBjYWxsaW5nCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5hZGRjaCgpPC92YXI+IG9uY2UgZm9yIGVhY2ggY2hhcmFjdGVyIGluIGEKK2dpdmVuIHN0cmluZy4gVGhpcyBpcyB0cnVlIGZvciBhbGwgb3V0cHV0IGZ1bmN0aW9ucy4gVGhlcmUgYXJlCitvdGhlciBmdW5jdGlvbnMgZnJvbSB0aGlzIGZhbWlseSBzdWNoIGFzIDx2YXIgY2xhc3M9CisiTElURVJBTCI+bXZhZGRzdHIoKSxtdndhZGRzdHIoKTwvdmFyPiBhbmQgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj53YWRkc3RyKCk8L3Zhcj4sIHdoaWNoIG9iZXkgdGhlIG5hbWluZyBjb252ZW50aW9uIG9mCitjdXJzZXMuKGUuZy4gbXZhZGRzdHIoKSBpcyBzaW1pbGFyIHRvIHRoZSByZXNwZWN0aXZlIGNhbGxzIG1vdmUoKQorYW5kIHRoZW4gYWRkc3RyKCkuKSBBbm90aGVyIGZ1bmN0aW9uIG9mIHRoaXMgZmFtaWx5IGlzIGFkZG5zdHIoKSwKK3doaWNoIHRha2VzIGFuIGludGVnZXIgcGFyYW1ldGVyKHNheSBuKSBhZGRpdGlvbmFsbHkuIFRoaXMgZnVuY3Rpb24KK3B1dHMgYXQgbW9zdCBuIGNoYXJhY3RlcnMgaW50byB0aGUgc2NyZWVuLiBJZiBuIGlzIG5lZ2F0aXZlLCB0aGVuCit0aGUgZW50aXJlIHN0cmluZyB3aWxsIGJlIGFkZGVkLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQUNBVVRJT04iIGlkPSJBQ0FVVElPTiI+Ni41LiBBIHdvcmQgb2YKK2NhdXRpb248L2E+PC9oMz4KKzxwPkFsbCB0aGVzZSBmdW5jdGlvbnMgdGFrZSB5IGNvLW9yZGluYXRlIGZpcnN0IGFuZCB0aGVuIHggaW4gdGhlaXIKK2FyZ3VtZW50cy4gQSBjb21tb24gbWlzdGFrZSBieSBiZWdpbm5lcnMgaXMgdG8gcGFzcyB4LHkgaW4gdGhhdAorb3JkZXIuIElmIHlvdSBhcmUgZG9pbmcgdG9vIG1hbnkgbWFuaXB1bGF0aW9ucyBvZiAoeSx4KQorY28tb3JkaW5hdGVzLCB0aGluayBvZiBkaXZpZGluZyB0aGUgc2NyZWVuIGludG8gd2luZG93cyBhbmQKK21hbmlwdWxhdGUgZWFjaCBvbmUgc2VwYXJhdGVseS4gV2luZG93cyBhcmUgZXhwbGFpbmVkIGluIHRoZQorPGEgaHJlZj0iI1dJTkRPV1MiPndpbmRvd3M8L2E+IHNlY3Rpb24uPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IlNDQU5XIiBpZD0iU0NBTlciPjcuIElucHV0CitmdW5jdGlvbnM8L2E+PC9oMj4KKzxwPldlbGwsIHByaW50aW5nIHdpdGhvdXQgdGFraW5nIGlucHV0LCBpcyBib3JpbmcuIExldCdzIHNlZQorZnVuY3Rpb25zIHdoaWNoIGFsbG93IHVzIHRvIGdldCBpbnB1dCBmcm9tIHVzZXIuIFRoZXNlIGZ1bmN0aW9ucworYWxzbyBjYW4gYmUgZGl2aWRlZCBpbnRvIHRocmVlIGNhdGVnb3JpZXMuPC9wPgorPG9sIHR5cGU9IjEiPgorPGxpPgorPHA+Z2V0Y2goKSBjbGFzczogR2V0IGEgY2hhcmFjdGVyPC9wPgorPC9saT4KKzxsaT4KKzxwPnNjYW53KCkgY2xhc3M6IEdldCBmb3JtYXR0ZWQgaW5wdXQ8L3A+Cis8L2xpPgorPGxpPgorPHA+Z2V0c3RyKCkgY2xhc3M6IEdldCBzdHJpbmdzPC9wPgorPC9saT4KKzwvb2w+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJHRVRDSENMQVNTIiBpZD0iR0VUQ0hDTEFTUyI+Ny4xLiBnZXRjaCgpCitjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZXNlIGZ1bmN0aW9ucyByZWFkIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIHRoZSB0ZXJtaW5hbC4gQnV0Cit0aGVyZSBhcmUgc2V2ZXJhbCBzdWJ0bGUgZmFjdHMgdG8gY29uc2lkZXIuIEZvciBleGFtcGxlIGlmIHlvdQorZG9uJ3QgdXNlIHRoZSBmdW5jdGlvbiBjYnJlYWsoKSwgY3Vyc2VzIHdpbGwgbm90IHJlYWQgeW91ciBpbnB1dAorY2hhcmFjdGVycyBjb250aWd1b3VzbHkgYnV0IHdpbGwgYmVnaW4gcmVhZCB0aGVtIG9ubHkgYWZ0ZXIgYSBuZXcKK2xpbmUgb3IgYW4gRU9GIGlzIGVuY291bnRlcmVkLiBJbiBvcmRlciB0byBhdm9pZCB0aGlzLCB0aGUgY2JyZWFrKCkKK2Z1bmN0aW9uIG11c3QgdXNlZCBzbyB0aGF0IGNoYXJhY3RlcnMgYXJlIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0bworeW91ciBwcm9ncmFtLiBBbm90aGVyIHdpZGVseSB1c2VkIGZ1bmN0aW9uIGlzIG5vZWNobygpLiBBcyB0aGUgbmFtZQorc3VnZ2VzdHMsIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBzZXQgKHVzZWQpLCB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZQora2V5ZWQgaW4gYnkgdGhlIHVzZXIgd2lsbCBub3Qgc2hvdyB1cCBvbiB0aGUgc2NyZWVuLiBUaGUgdHdvCitmdW5jdGlvbnMgY2JyZWFrKCkgYW5kIG5vZWNobygpIGFyZSB0eXBpY2FsIGV4YW1wbGVzIG9mIGtleQorbWFuYWdlbWVudC4gRnVuY3Rpb25zIG9mIHRoaXMgZ2VucmUgYXJlIGV4cGxhaW5lZCBpbiB0aGUgPGEgaHJlZj0KKyIjS0VZUyI+a2V5IG1hbmFnZW1lbnQgc2VjdGlvbjwvYT4gLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iU0NBTldDTEFTUyIgaWQ9IlNDQU5XQ0xBU1MiPjcuMi4gc2NhbncoKQorY2xhc3Mgb2YgZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGVzZSBmdW5jdGlvbnMgYXJlIHNpbWlsYXIgdG8gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5zY2FuZigpPC92YXI+IHdpdGggdGhlIGFkZGVkIGNhcGFiaWxpdHkgb2YgZ2V0dGluZyB0aGUKK2lucHV0IGZyb20gYW55IGxvY2F0aW9uIG9uIHRoZSBzY3JlZW4uPC9wPgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iU0NBTldNVlNDQU5XIiBpZD0iU0NBTldNVlNDQU5XIj43LjIuMS4KK3NjYW53KCkgYW5kIG12c2Nhbnc8L2E+PC9oND4KKzxwPlRoZSB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgc2ltaWxhciB0byB0aGF0IG9mIDx2YXIgY2xhc3M9CisiTElURVJBTCI+c3NjYW5mKCk8L3Zhcj4sIHdoZXJlIHRoZSBsaW5lIHRvIGJlIHNjYW5uZWQgaXMgcHJvdmlkZWQKK2J5IDx2YXIgY2xhc3M9IkxJVEVSQUwiPndnZXRzdHIoKTwvdmFyPiBmdW5jdGlvbi4gVGhhdCBpcywgdGhlc2UKK2Z1bmN0aW9ucyBjYWxsIHRvIDx2YXIgY2xhc3M9IkxJVEVSQUwiPndnZXRzdHIoKTwvdmFyPgorZnVuY3Rpb24oZXhwbGFpbmVkIGJlbG93KSBhbmQgdXNlcyB0aGUgcmVzdWx0aW5nIGxpbmUgZm9yIGEKK3NjYW4uPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJXU0NBTldNVldTQ0FOVyIgaWQ9CisiV1NDQU5XTVZXU0NBTlciPjcuMi4yLiB3c2NhbncoKSBhbmQgbXZ3c2NhbncoKTwvYT48L2g0PgorPHA+VGhlc2UgYXJlIHNpbWlsYXIgdG8gYWJvdmUgdHdvIGZ1bmN0aW9ucyBleGNlcHQgdGhhdCB0aGV5IHJlYWQKK2Zyb20gYSB3aW5kb3csIHdoaWNoIGlzIHN1cHBsaWVkIGFzIG9uZSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZXNlCitmdW5jdGlvbnMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJWV1NDQU5XIiBpZD0iVldTQ0FOVyI+Ny4yLjMuCit2d3NjYW53KCk8L2E+PC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byA8dmFyIGNsYXNzPSJMSVRFUkFMIj52c2NhbmYoKTwvdmFyPi4KK1RoaXMgY2FuIGJlIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIHRvIGJlCitzY2FubmVkLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJHRVRTVFJDTEFTUyIgaWQ9IkdFVFNUUkNMQVNTIj43LjMuCitnZXRzdHIoKSBjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBnZXQgc3RyaW5ncyBmcm9tIHRoZSB0ZXJtaW5hbC4gSW4KK2Vzc2VuY2UsIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIHNhbWUgdGFzayBhcyB3b3VsZCBiZSBhY2hpZXZlZAorYnkgYSBzZXJpZXMgb2YgY2FsbHMgdG8gPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0Y2goKTwvdmFyPiB1bnRpbCBhCituZXdsaW5lLCBjYXJyaWFnZSByZXR1cm4sIG9yIGVuZC1vZi1maWxlIGlzIHJlY2VpdmVkLiBUaGUgcmVzdWx0aW5nCitzdHJpbmcgb2YgY2hhcmFjdGVycyBhcmUgcG9pbnRlZCB0byBieSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnN0cjwvdmFyPiwgd2hpY2ggaXMgYSBjaGFyYWN0ZXIgcG9pbnRlciBwcm92aWRlZCBieSB0aGUKK3VzZXIuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJHRVRTVFJFWCIgaWQ9IkdFVFNUUkVYIj43LjQuIFNvbWUKK2V4YW1wbGVzPC9hPjwvaDM+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCU0NFWCIgaWQ9IkJTQ0VYIj48L2E+Cis8cD48Yj5FeGFtcGxlIDQuIEEgU2ltcGxlIHNjYW53IGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OyAgICAgICAgICAgICAgICAgICAvKiBuY3Vyc2VzLmggaW5jbHVkZXMgc3RkaW8uaCAqLyAgCisjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7IAorIAoraW50IG1haW4oKQoreworIGNoYXIgbWVzZ1tdPSJFbnRlciBhIHN0cmluZzogIjsgICAgICAgICAgICAgICAgLyogbWVzc2FnZSB0byBiZSBhcHBlYXJlZCBvbiB0aGUgc2NyZWVuICovCisgY2hhciBzdHJbODBdOworIGludCByb3csY29sOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygcm93cyBhbmQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBudW1iZXIgb2YgY29sdW1zIG9mIHRoZSBzY3JlZW4gKi8KKyBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCB0aGUgY3Vyc2VzIG1vZGUgKi8KKyBnZXRtYXh5eChzdGRzY3Iscm93LGNvbCk7ICAgICAgICAgICAgICAvKiBnZXQgdGhlIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zICovCisgbXZwcmludHcocm93LzIsKGNvbC1zdHJsZW4obWVzZykpLzIsIiVzIixtZXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnQgdGhlIG1lc3NhZ2UgYXQgdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuICovCisgZ2V0c3RyKHN0cik7CisgbXZwcmludHcoTElORVMgLSAyLCAwLCAiWW91IEVudGVyZWQ6ICVzIiwgc3RyKTsKKyBnZXRjaCgpOworIGVuZHdpbigpOworCisgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IkFUVFJJQiIgaWQ9IkFUVFJJQiI+OC4KK0F0dHJpYnV0ZXM8L2E+PC9oMj4KKzxwPldlIGhhdmUgc2VlbiBhbiBleGFtcGxlIG9mIGhvdyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIHRvIHByaW50CitjaGFyYWN0ZXJzIHdpdGggc29tZSBzcGVjaWFsIGVmZmVjdHMuIEF0dHJpYnV0ZXMsIHdoZW4gc2V0CitwcnVkZW50bHksIGNhbiBwcmVzZW50IGluZm9ybWF0aW9uIGluIGFuIGVhc3ksIHVuZGVyc3RhbmRhYmxlCittYW5uZXIuIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB0YWtlcyBhIEMgZmlsZSBhcyBpbnB1dCBhbmQgcHJpbnRzCit0aGUgZmlsZSB3aXRoIGNvbW1lbnRzIGluIGJvbGQuIFNjYW4gdGhyb3VnaCB0aGUgY29kZS48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCU0lBVCIgaWQ9IkJTSUFUIj48L2E+Cis8cD48Yj5FeGFtcGxlIDUuIEEgU2ltcGxlIEF0dHJpYnV0ZXMgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPi8qIHBhZ2VyIGZ1bmN0aW9uYWxpdHkgYnkgSm9zZXBoIFNwYWluaG91ciIgJmx0O3NwYWluaG91QGJlbGxzb3V0aC5uZXQmZ3Q7ICovCisjaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreyAKKyAgaW50IGNoLCBwcmV2LCByb3csIGNvbDsKKyAgcHJldiA9IEVPRjsKKyAgRklMRSAqZnA7CisgIGludCB5LCB4OworCisgIGlmKGFyZ2MgIT0gMikKKyAgeworICAgIHByaW50ZigiVXNhZ2U6ICVzICZsdDthIGMgZmlsZSBuYW1lJmd0O1xuIiwgYXJndlswXSk7CisgICAgZXhpdCgxKTsKKyAgfQorICBmcCA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisgIGlmKGZwID09IE5VTEwpCisgIHsKKyAgICBwZXJyb3IoIkNhbm5vdCBvcGVuIGlucHV0IGZpbGUiKTsKKyAgICBleGl0KDEpOworICB9CisgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgKi8KKyAgZ2V0bWF4eXgoc3Rkc2NyLCByb3csIGNvbCk7ICAgICAgICAgICAvKiBmaW5kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzY3JlZWVuICovCisgIHdoaWxlKChjaCA9IGZnZXRjKGZwKSkgIT0gRU9GKSAgICAgICAgLyogcmVhZCB0aGUgZmlsZSB0aWxsIHdlIHJlYWNoIHRoZSBlbmQgKi8KKyAgeworICAgIGdldHl4KHN0ZHNjciwgeSwgeCk7ICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgY3VycmVudCBjdXJzZXIgcG9zaXRpb24gKi8KKyAgICBpZih5ID09IChyb3cgLSAxKSkgICAgICAgICAgICAgICAgICAvKiBhcmUgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHNjcmVlbiAqLworICAgIHsKKyAgICAgIHByaW50dygiJmx0Oy1QcmVzcyBBbnkgS2V5LSZndDsiKTsgICAgICAvKiB0ZWxsIHRoZSB1c2VyIHRvIHByZXNzIGEga2V5ICovCisgICAgICBnZXRjaCgpOworICAgICAgY2xlYXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRoZSBzY3JlZW4gKi8KKyAgICAgIG1vdmUoMCwgMCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY3JlZW4gKi8KKyAgICB9CisgICAgaWYocHJldiA9PSAnLycgJmFtcDsmYW1wOyBjaCA9PSAnKicpICAgICAgICAvKiBJZiBpdCBpcyAvIGFuZCAqIHRoZW4gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN3aXRjaCBib2xkIG9uICovICAgIAorICAgIHsKKyAgICAgIGF0dHJvbihBX0JPTEQpOyAgICAgICAgICAgICAgICAgICAvKiBjdXQgYm9sZCBvbiAqLworICAgICAgZ2V0eXgoc3Rkc2NyLCB5LCB4KTsgICAgICAgICAgICAgIC8qIGdldCB0aGUgY3VycmVudCBjdXJzZXIgcG9zaXRpb24gKi8KKyAgICAgIG1vdmUoeSwgeCAtIDEpOyAgICAgICAgICAgICAgICAgICAvKiBiYWNrIHVwIG9uZSBzcGFjZSAqLworICAgICAgcHJpbnR3KCIlYyVjIiwgJy8nLCBjaCk7ICAgICAgICAgIC8qIFRoZSBhY3R1YWwgcHJpbnRpbmcgaXMgZG9uZSBoZXJlICovCisgICAgfQorICAgIGVsc2UKKyAgICAgIHByaW50dygiJWMiLCBjaCk7CisgICAgcmVmcmVzaCgpOworICAgIGlmKHByZXYgPT0gJyonICZhbXA7JmFtcDsgY2ggPT0gJy8nKQorICAgICAgYXR0cm9mZihBX0JPTEQpOyAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaCBpdCBvZmYgb25jZSB3ZSBnb3QgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuZCB0aGVuIC8gKi8KKyAgICBwcmV2ID0gY2g7CisgIH0KKyAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3Vyc2VzIG1vZGUgKi8KKyAgZmNsb3NlKGZwKTsKKyAgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+RG9uJ3Qgd29ycnkgYWJvdXQgYWxsIHRob3NlIGluaXRpYWxpemF0aW9uIGFuZCBvdGhlciBjcmFwLgorQ29uY2VudHJhdGUgb24gdGhlIHdoaWxlIGxvb3AuIEl0IHJlYWRzIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBmaWxlCithbmQgc2VhcmNoZXMgZm9yIHRoZSBwYXR0ZXJuIC8qLiBPbmNlIGl0IHNwb3RzIHRoZSBwYXR0ZXJuLCBpdAorc3dpdGNoZXMgdGhlIEJPTEQgYXR0cmlidXRlIG9uIHdpdGggPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5hdHRyb24oKTwvdmFyPiAuIFdoZW4gd2UgZ2V0IHRoZSBwYXR0ZXJuICovIGl0IGlzCitzd2l0Y2hlZCBvZmYgYnkgPHZhciBjbGFzcz0iTElURVJBTCI+YXR0cm9mZigpPC92YXI+IC48L3A+Cis8cD5UaGUgYWJvdmUgcHJvZ3JhbSBhbHNvIGludHJvZHVjZXMgdXMgdG8gdHdvIHVzZWZ1bCBmdW5jdGlvbnMKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldHl4KCk8L3Zhcj4gYW5kIDx2YXIgY2xhc3M9CisiTElURVJBTCI+bW92ZSgpPC92YXI+LiBUaGUgZmlyc3QgZnVuY3Rpb24gZ2V0cyB0aGUgY28tb3JkaW5hdGVzIG9mCit0aGUgcHJlc2VudCBjdXJzb3IgaW50byB0aGUgdmFyaWFibGVzIHksIHguIFNpbmNlIGdldHl4KCkgaXMgYQorbWFjcm8gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIHBvaW50ZXJzIHRvIHZhcmlhYmxlcy4gVGhlIGZ1bmN0aW9uCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5tb3ZlKCk8L3Zhcj4gbW92ZXMgdGhlIGN1cnNvciB0byB0aGUKK2NvLW9yZGluYXRlcyBnaXZlbiB0byBpdC48L3A+Cis8cD5UaGUgYWJvdmUgcHJvZ3JhbSBpcyByZWFsbHkgYSBzaW1wbGUgb25lIHdoaWNoIGRvZXNuJ3QgZG8gbXVjaC4KK09uIHRoZXNlIGxpbmVzIG9uZSBjb3VsZCB3cml0ZSBhIG1vcmUgdXNlZnVsIHByb2dyYW0gd2hpY2ggcmVhZHMgYQorQyBmaWxlLCBwYXJzZXMgaXQgYW5kIHByaW50cyBpdCBpbiBkaWZmZXJlbnQgY29sb3JzLiBPbmUgY291bGQgZXZlbgorZXh0ZW5kIGl0IHRvIG90aGVyIGxhbmd1YWdlcyBhcyB3ZWxsLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkFUVFJJQkRFVEFJTFMiIGlkPSJBVFRSSUJERVRBSUxTIj44LjEuCitUaGUgZGV0YWlsczwvYT48L2gzPgorPHA+TGV0J3MgZ2V0IGludG8gbW9yZSBkZXRhaWxzIG9mIGF0dHJpYnV0ZXMuIFRoZSBmdW5jdGlvbnMKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPmF0dHJvbigpLCBhdHRyb2ZmKCksIGF0dHJzZXQoKTwvdmFyPiAsIGFuZAordGhlaXIgc2lzdGVyIGZ1bmN0aW9ucyA8dmFyIGNsYXNzPSJMSVRFUkFMIj5hdHRyX2dldCgpPC92YXI+IGV0Yy4uCitjYW4gYmUgdXNlZCB0byBzd2l0Y2ggYXR0cmlidXRlcyBvbi9vZmYgLCBnZXQgYXR0cmlidXRlcyBhbmQKK3Byb2R1Y2UgYSBjb2xvcmZ1bCBkaXNwbGF5LjwvcD4KKzxwPlRoZSBmdW5jdGlvbnMgYXR0cm9uIGFuZCBhdHRyb2ZmIHRha2UgYSBiaXQtbWFzayBvZiBhdHRyaWJ1dGVzCithbmQgc3dpdGNoIHRoZW0gb24gb3Igb2ZmLCByZXNwZWN0aXZlbHkuIFRoZSBmb2xsb3dpbmcgdmlkZW8KK2F0dHJpYnV0ZXMsIHdoaWNoIGFyZSBkZWZpbmVkIGluICZsdDtjdXJzZXMuaCZndDsgY2FuIGJlIHBhc3NlZCB0bwordGhlc2UgZnVuY3Rpb25zLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgCisgICAgQV9OT1JNQUwgICAgICAgIE5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpCisgICAgQV9TVEFORE9VVCAgICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLgorICAgIEFfVU5ERVJMSU5FICAgICBVbmRlcmxpbmluZworICAgIEFfUkVWRVJTRSAgICAgICBSZXZlcnNlIHZpZGVvCisgICAgQV9CTElOSyAgICAgICAgIEJsaW5raW5nCisgICAgQV9ESU0gICAgICAgICAgIEhhbGYgYnJpZ2h0CisgICAgQV9CT0xEICAgICAgICAgIEV4dHJhIGJyaWdodCBvciBib2xkCisgICAgQV9QUk9URUNUICAgICAgIFByb3RlY3RlZCBtb2RlCisgICAgQV9JTlZJUyAgICAgICAgIEludmlzaWJsZSBvciBibGFuayBtb2RlCisgICAgQV9BTFRDSEFSU0VUICAgIEFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisgICAgQV9DSEFSVEVYVCAgICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXIKKyAgICBDT0xPUl9QQUlSKG4pICAgQ29sb3ItcGFpciBudW1iZXIgbiAKKyAgICA8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgbGFzdCBvbmUgaXMgdGhlIG1vc3QgY29sb3JmdWwgb25lIDotKSBDb2xvcnMgYXJlIGV4cGxhaW5lZAoraW4gdGhlIDxhIGhyZWY9IiNjb2xvciIgdGFyZ2V0PSJfdG9wIj5uZXh0IHNlY3Rpb25zPC9hPi48L3A+Cis8cD5XZSBjYW4gT1IofCkgYW55IG51bWJlciBvZiBhYm92ZSBhdHRyaWJ1dGVzIHRvIGdldCBhIGNvbWJpbmVkCitlZmZlY3QuIElmIHlvdSB3YW50ZWQgcmV2ZXJzZSB2aWRlbyB3aXRoIGJsaW5raW5nIGNoYXJhY3RlcnMgeW91CitjYW4gdXNlPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBhdHRyb24oQV9SRVZFUlNFIHwgQV9CTElOSyk7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBVFRST05WU0FUVFJTRVQiIGlkPQorIkFUVFJPTlZTQVRUUlNFVCI+OC4yLiBhdHRyb24oKSB2cyBhdHRyc2V0KCk8L2E+PC9oMz4KKzxwPlRoZW4gd2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGF0dHJvbigpIGFuZCBhdHRyc2V0KCk/CithdHRyc2V0IHNldHMgdGhlIGF0dHJpYnV0ZXMgb2Ygd2luZG93IHdoZXJlYXMgYXR0cm9uIGp1c3Qgc3dpdGNoZXMKK29uIHRoZSBhdHRyaWJ1dGUgZ2l2ZW4gdG8gaXQuIFNvIGF0dHJzZXQoKSBmdWxseSBvdmVycmlkZXMgd2hhdGV2ZXIKK2F0dHJpYnV0ZXMgdGhlIHdpbmRvdyBwcmV2aW91c2x5IGhhZCBhbmQgc2V0cyBpdCB0byB0aGUgbmV3CithdHRyaWJ1dGUocykuIFNpbWlsYXJseSBhdHRyb2ZmKCkganVzdCBzd2l0Y2hlcyBvZmYgdGhlCithdHRyaWJ1dGUocykgZ2l2ZW4gdG8gaXQgYXMgYW4gYXJndW1lbnQuIFRoaXMgZ2l2ZXMgdXMgdGhlCitmbGV4aWJpbGl0eSBvZiBtYW5hZ2luZyBhdHRyaWJ1dGVzIGVhc2lseS5CdXQgaWYgeW91IHVzZSB0aGVtCitjYXJlbGVzc2x5IHlvdSBtYXkgbG9vc2UgdHJhY2sgb2Ygd2hhdCBhdHRyaWJ1dGVzIHRoZSB3aW5kb3cgaGFzCithbmQgZ2FyYmxlIHRoZSBkaXNwbGF5LiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aGlsZSBtYW5hZ2luZworbWVudXMgd2l0aCBjb2xvcnMgYW5kIGhpZ2hsaWdodGluZy4gU28gZGVjaWRlIG9uIGEgY29uc2lzdGVudAorcG9saWN5IGFuZCBzdGljayB0byBpdC4gWW91IGNhbiBhbHdheXMgdXNlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+c3RhbmRlbmQoKTwvdmFyPiB3aGljaCBpcyBlcXVpdmFsZW50IHRvIDx2YXIgY2xhc3M9CisiTElURVJBTCI+YXR0cnNldChBX05PUk1BTCk8L3Zhcj4gd2hpY2ggdHVybnMgb2ZmIGFsbCBhdHRyaWJ1dGVzCithbmQgYnJpbmdzIHlvdSB0byBub3JtYWwgbW9kZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkFUVFJfR0VUIiBpZD0iQVRUUl9HRVQiPjguMy4KK2F0dHJfZ2V0KCk8L2E+PC9oMz4KKzxwPlRoZSBmdW5jdGlvbiBhdHRyX2dldCgpIGdldHMgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBhbmQgY29sb3IKK3BhaXIgb2YgdGhlIHdpbmRvdy4gVGhvdWdoIHdlIG1pZ2h0IG5vdCB1c2UgdGhpcyBhcyBvZnRlbiBhcyB0aGUKK2Fib3ZlIGZ1bmN0aW9ucywgdGhpcyBpcyB1c2VmdWwgaW4gc2Nhbm5pbmcgYXJlYXMgb2Ygc2NyZWVuLiBTYXkgd2UKK3dhbnRlZCB0byBkbyBzb21lIGNvbXBsZXggdXBkYXRlIG9uIHNjcmVlbiBhbmQgd2UgYXJlIG5vdCBzdXJlIHdoYXQKK2F0dHJpYnV0ZSBlYWNoIGNoYXJhY3RlciBpcyBhc3NvY2lhdGVkIHdpdGguIFRoZW4gdGhpcyBmdW5jdGlvbiBjYW4KK2JlIHVzZWQgd2l0aCBlaXRoZXIgYXR0cnNldCBvciBhdHRyb24gdG8gcHJvZHVjZSB0aGUgZGVzaXJlZAorZWZmZWN0LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQVRUUl9GVU5DUyIgaWQ9IkFUVFJfRlVOQ1MiPjguNC4gYXR0cl8KK2Z1bmN0aW9uczwvYT48L2gzPgorPHA+VGhlcmUgYXJlIHNlcmllcyBvZiBmdW5jdGlvbnMgbGlrZSBhdHRyX3NldCgpLCBhdHRyX29uIGV0Yy4uCitUaGVzZSBhcmUgc2ltaWxhciB0byBhYm92ZSBmdW5jdGlvbnMgZXhjZXB0IHRoYXQgdGhleSB0YWtlCitwYXJhbWV0ZXJzIG9mIHR5cGUgPHZhciBjbGFzcz0iTElURVJBTCI+YXR0cl90PC92YXI+LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iV0FUVFJGVU5DUyIgaWQ9IldBVFRSRlVOQ1MiPjguNS4gd2F0dHIKK2Z1bmN0aW9uczwvYT48L2gzPgorPHA+Rm9yIGVhY2ggb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyB3ZSBoYXZlIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbgord2l0aCAndycgd2hpY2ggb3BlcmF0ZXMgb24gYSBwYXJ0aWN1bGFyIHdpbmRvdy4gVGhlIGFib3ZlIGZ1bmN0aW9ucworb3BlcmF0ZSBvbiBzdGRzY3IuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJDSEdBVCIgaWQ9IkNIR0FUIj44LjYuIGNoZ2F0KCkKK2Z1bmN0aW9uczwvYT48L2gzPgorPHA+VGhlIGZ1bmN0aW9uIGNoZ2F0KCkgaXMgbGlzdGVkIGluIHRoZSBlbmQgb2YgdGhlIG1hbiBwYWdlCitjdXJzX2F0dHIuIEl0IGFjdHVhbGx5IGlzIGEgdXNlZnVsIG9uZS4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAordG8gc2V0IGF0dHJpYnV0ZXMgZm9yIGEgZ3JvdXAgb2YgY2hhcmFjdGVycyB3aXRob3V0IG1vdmluZy4gSSBtZWFuCitpdCAhISEgd2l0aG91dCBtb3ZpbmcgdGhlIGN1cnNvciA6LSkgSXQgY2hhbmdlcyB0aGUgYXR0cmlidXRlcyBvZiBhCitnaXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycyBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IKK2xvY2F0aW9uLjwvcD4KKzxwPldlIGNhbiBnaXZlIC0xIGFzIHRoZSBjaGFyYWN0ZXIgY291bnQgdG8gdXBkYXRlIHRpbGwgZW5kIG9mCitsaW5lLiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgYXR0cmlidXRlcyBvZiBjaGFyYWN0ZXJzIGZyb20gY3VycmVudAorcG9zaXRpb24gdG8gZW5kIG9mIGxpbmUsIGp1c3QgdXNlIHRoaXMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBjaGdhdCgtMSwgQV9SRVZFUlNFLCAwLCBOVUxMKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMgZm9yIGNoYXJhY3RlcnMKK3RoYXQgYXJlIGFscmVhZHkgb24gdGhlIHNjcmVlbi4gTW92ZSB0byB0aGUgY2hhcmFjdGVyIGZyb20gd2hpY2gKK3lvdSB3YW50IHRvIGNoYW5nZSBhbmQgY2hhbmdlIHRoZSBhdHRyaWJ1dGUuPC9wPgorPHA+T3RoZXIgZnVuY3Rpb25zIHdjaGdhdCgpLCBtdmNoZ2F0KCksIHdjaGdhdCgpIGJlaGF2ZSBzaW1pbGFybHkKK2V4Y2VwdCB0aGF0IHRoZSB3IGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHRoZSBwYXJ0aWN1bGFyIHdpbmRvdy4gVGhlCittdiBmdW5jdGlvbnMgZmlyc3QgbW92ZSB0aGUgY3Vyc29yIHRoZW4gcGVyZm9ybSB0aGUgd29yayBnaXZlbiB0bwordGhlbS4gQWN0dWFsbHkgY2hnYXQgaXMgYSBtYWNybyB3aGljaCBpcyByZXBsYWNlZCBieSBhIHdjaGdhdCgpCit3aXRoIHN0ZHNjciBhcyB0aGUgd2luZG93LiBNb3N0IG9mIHRoZSAidy1sZXNzIiBmdW5jdGlvbnMgYXJlCittYWNyb3MuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iQldJQ0giIGlkPSJCV0lDSCI+PC9hPgorPHA+PGI+RXhhbXBsZSA2LiBDaGdhdCgpIFVzYWdlIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreyAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGN1cnNlcyBtb2RlICAgICAgICAgICAgKi8KKyAgICAgICAgc3RhcnRfY29sb3IoKTsgICAgICAgICAgICAgICAgICAvKiBTdGFydCBjb2xvciBmdW5jdGlvbmFsaXR5ICAgICovCisgICAgICAgIAorICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworICAgICAgICBwcmludHcoIkEgQmlnIHN0cmluZyB3aGljaCBpIGRpZG4ndCBjYXJlIHRvIHR5cGUgZnVsbHkgIik7CisgICAgICAgIG12Y2hnYXQoMCwgMCwgLTEsIEFfQkxJTkssIDEsIE5VTEwpOyAgICAKKyAgICAgICAgLyogCisgICAgICAgICAqIEZpcnN0IHR3byBwYXJhbWV0ZXJzIHNwZWNpZnkgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRvIHN0YXJ0IAorICAgICAgICAgKiBUaGlyZCBwYXJhbWV0ZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdXBkYXRlLiAtMSBtZWFucyB0aWxsIAorICAgICAgICAgKiBlbmQgb2YgbGluZQorICAgICAgICAgKiBGb3J0aCBwYXJhbWV0ZXIgaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgeW91IHdhbnRlZCB0byBnaXZlIAorICAgICAgICAgKiB0byB0aGUgY2hhcmN0ZXIKKyAgICAgICAgICogRmlmdGggaXMgdGhlIGNvbG9yIGluZGV4LiBJdCBpcyB0aGUgaW5kZXggZ2l2ZW4gZHVyaW5nIGluaXRfcGFpcigpCisgICAgICAgICAqIHVzZSAwIGlmIHlvdSBkaWRuJ3Qgd2FudCBjb2xvcgorICAgICAgICAgKiBTaXh0aCBvbmUgaXMgYWx3YXlzIE5VTEwgCisgICAgICAgICAqLworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIGdldGNoKCk7CisgICAgICAgIGVuZHdpbigpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIGN1cnNlcyBtb2RlICAgICAgICAgICAgICAgICovCisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPlRoaXMgZXhhbXBsZSBhbHNvIGludHJvZHVjZXMgdXMgdG8gdGhlIGNvbG9yIHdvcmxkIG9mIGN1cnNlcy4KK0NvbG9ycyB3aWxsIGJlIGV4cGxhaW5lZCBpbiBkZXRhaWwgbGF0ZXIuIFVzZSAwIGZvciBubyBjb2xvci48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iV0lORE9XUyIgaWQ9IldJTkRPV1MiPjkuCitXaW5kb3dzPC9hPjwvaDI+Cis8cD5XaW5kb3dzIGZvcm0gdGhlIG1vc3QgaW1wb3J0YW50IGNvbmNlcHQgaW4gY3Vyc2VzLiBZb3UgaGF2ZSBzZWVuCit0aGUgc3RhbmRhcmQgd2luZG93IHN0ZHNjciBhYm92ZSB3aGVyZSBhbGwgdGhlIGZ1bmN0aW9ucyBpbXBsaWNpdGx5CitvcGVyYXRlZCBvbiB0aGlzIHdpbmRvdy4gTm93IHRvIG1ha2UgZGVzaWduIGV2ZW4gYSBzaW1wbGVzdCBHVUksCit5b3UgbmVlZCB0byByZXNvcnQgdG8gd2luZG93cy4gVGhlIG1haW4gcmVhc29uIHlvdSBtYXkgd2FudCB0byB1c2UKK3dpbmRvd3MgaXMgdG8gbWFuaXB1bGF0ZSBwYXJ0cyBvZiB0aGUgc2NyZWVuIHNlcGFyYXRlbHksIGZvciBiZXR0ZXIKK2VmZmljaWVuY3ksIGJ5IHVwZGF0aW5nIG9ubHkgdGhlIHdpbmRvd3MgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQKK2FuZCBmb3IgYSBiZXR0ZXIgZGVzaWduLiBJIHdvdWxkIHNheSB0aGUgbGFzdCByZWFzb24gaXMgdGhlIG1vc3QKK2ltcG9ydGFudCBpbiBnb2luZyBmb3Igd2luZG93cy4gWW91IHNob3VsZCBhbHdheXMgc3RyaXZlIGZvciBhCitiZXR0ZXIgYW5kIGVhc3ktdG8tbWFuYWdlIGRlc2lnbiBpbiB5b3VyIHByb2dyYW1zLiBJZiB5b3UgYXJlCit3cml0aW5nIGJpZywgY29tcGxleCBHVUlzIHRoaXMgaXMgb2YgcGl2b3RhbCBpbXBvcnRhbmNlIGJlZm9yZSB5b3UKK3N0YXJ0IGRvaW5nIGFueXRoaW5nLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IldJTkRPV0JBU0lDUyIgaWQ9IldJTkRPV0JBU0lDUyI+OS4xLiBUaGUKK2Jhc2ljczwvYT48L2gzPgorPHA+QSBXaW5kb3cgY2FuIGJlIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5uZXd3aW4oKTwvdmFyPi4gSXQgZG9lc24ndCBjcmVhdGUgYW55IHRoaW5nIG9uIHRoZSBzY3JlZW4KK2FjdHVhbGx5LiBJdCBhbGxvY2F0ZXMgbWVtb3J5IGZvciBhIHN0cnVjdHVyZSB0byBtYW5pcHVsYXRlIHRoZQord2luZG93IGFuZCB1cGRhdGVzIHRoZSBzdHJ1Y3R1cmUgd2l0aCBkYXRhIHJlZ2FyZGluZyB0aGUgd2luZG93CitsaWtlIGl0J3Mgc2l6ZSwgYmVnaW55LCBiZWdpbnggZXRjLi4gSGVuY2UgaW4gY3Vyc2VzLCBhIHdpbmRvdyBpcworanVzdCBhbiBhYnN0cmFjdGlvbiBvZiBhbiBpbWFnaW5hcnkgd2luZG93LCB3aGljaCBjYW4gYmUKK21hbmlwdWxhdGVkIGluZGVwZW5kZW50IG9mIG90aGVyIHBhcnRzIG9mIHNjcmVlbi4gVGhlIGZ1bmN0aW9uCituZXd3aW4oKSByZXR1cm5zIGEgcG9pbnRlciB0byBzdHJ1Y3R1cmUgV0lORE9XLCB3aGljaCBjYW4gYmUgcGFzc2VkCit0byB3aW5kb3cgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSB3cHJpbnR3KCkgZXRjLi4gRmluYWxseSB0aGUgd2luZG93CitjYW4gYmUgZGVzdHJveWVkIHdpdGggZGVsd2luKCkuIEl0IHdpbGwgZGVhbGxvY2F0ZSB0aGUgbWVtb3J5Cithc3NvY2lhdGVkIHdpdGggdGhlIHdpbmRvdyBzdHJ1Y3R1cmUuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJMRVRCRVdJTkRPVyIgaWQ9IkxFVEJFV0lORE9XIj45LjIuIExldAordGhlcmUgYmUgYSBXaW5kb3cgISEhPC9hPjwvaDM+Cis8cD5XaGF0IGZ1biBpcyBpdCwgaWYgYSB3aW5kb3cgaXMgY3JlYXRlZCBhbmQgd2UgY2FuJ3Qgc2VlIGl0LiBTbwordGhlIGZ1biBwYXJ0IGJlZ2lucyBieSBkaXNwbGF5aW5nIHRoZSB3aW5kb3cuIFRoZSBmdW5jdGlvbgorPHZhciBjbGFzcz0iTElURVJBTCI+Ym94KCk8L3Zhcj4gY2FuIGJlIHVzZWQgdG8gZHJhdyBhIGJvcmRlcgorYXJvdW5kIHRoZSB3aW5kb3cuIExldCdzIGV4cGxvcmUgdGhlc2UgZnVuY3Rpb25zIGluIG1vcmUgZGV0YWlsIGluCit0aGlzIGV4YW1wbGUuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iQldJQk8iIGlkPSJCV0lCTyI+PC9hPgorPHA+PGI+RXhhbXBsZSA3LiBXaW5kb3cgQm9yZGVyIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworCisKK1dJTkRPVyAqY3JlYXRlX25ld3dpbihpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzdGFydHksIGludCBzdGFydHgpOwordm9pZCBkZXN0cm95X3dpbihXSU5ET1cgKmxvY2FsX3dpbik7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7ICAgICAgIFdJTkRPVyAqbXlfd2luOworICAgICAgICBpbnQgc3RhcnR4LCBzdGFydHksIHdpZHRoLCBoZWlnaHQ7CisgICAgICAgIGludCBjaDsKKworICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGN1cnNlcyBtb2RlICAgICAgICAgICAgKi8KKyAgICAgICAgY2JyZWFrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGJ1ZmZlcmluZyBkaXNhYmxlZCwgUGFzcyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGV2ZXJ0eSB0aGluZyB0byBtZSAgICAgICAgICAgKi8KKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7ICAgICAgICAgICAvKiBJIG5lZWQgdGhhdCBuaWZ0eSBGMSAgICAgICAgICovCisKKyAgICAgICAgaGVpZ2h0ID0gMzsKKyAgICAgICAgd2lkdGggPSAxMDsKKyAgICAgICAgc3RhcnR5ID0gKExJTkVTIC0gaGVpZ2h0KSAvIDI7ICAvKiBDYWxjdWxhdGluZyBmb3IgYSBjZW50ZXIgcGxhY2VtZW50ICovCisgICAgICAgIHN0YXJ0eCA9IChDT0xTIC0gd2lkdGgpIC8gMjsgICAgLyogb2YgdGhlIHdpbmRvdyAgICAgICAgICAgICAgICAqLworICAgICAgICBwcmludHcoIlByZXNzIEYxIHRvIGV4aXQiKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICBteV93aW4gPSBjcmVhdGVfbmV3d2luKGhlaWdodCwgd2lkdGgsIHN0YXJ0eSwgc3RhcnR4KTsKKworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9MRUZUOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95X3dpbihteV93aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV93aW4gPSBjcmVhdGVfbmV3d2luKGhlaWdodCwgd2lkdGgsIHN0YXJ0eSwtLXN0YXJ0eCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lfd2luKG15X3dpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X3dpbiA9IGNyZWF0ZV9uZXd3aW4oaGVpZ2h0LCB3aWR0aCwgc3RhcnR5LCsrc3RhcnR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveV93aW4obXlfd2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfd2luID0gY3JlYXRlX25ld3dpbihoZWlnaHQsIHdpZHRoLCAtLXN0YXJ0eSxzdGFydHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lfd2luKG15X3dpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X3dpbiA9IGNyZWF0ZV9uZXd3aW4oaGVpZ2h0LCB3aWR0aCwgKytzdGFydHksc3RhcnR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK1dJTkRPVyAqY3JlYXRlX25ld3dpbihpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzdGFydHksIGludCBzdGFydHgpCit7ICAgICAgIFdJTkRPVyAqbG9jYWxfd2luOworCisgICAgICAgIGxvY2FsX3dpbiA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCBzdGFydHksIHN0YXJ0eCk7CisgICAgICAgIGJveChsb2NhbF93aW4sIDAgLCAwKTsgICAgICAgICAgLyogMCwgMCBnaXZlcyBkZWZhdWx0IGNoYXJhY3RlcnMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpbmVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgd3JlZnJlc2gobG9jYWxfd2luKTsgICAgICAgICAgICAvKiBTaG93IHRoYXQgYm94ICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgcmV0dXJuIGxvY2FsX3dpbjsKK30KKwordm9pZCBkZXN0cm95X3dpbihXSU5ET1cgKmxvY2FsX3dpbikKK3sgICAgICAgCisgICAgICAgIC8qIGJveChsb2NhbF93aW4sICcgJywgJyAnKTsgOiBUaGlzIHdvbid0IHByb2R1Y2UgdGhlIGRlc2lyZWQKKyAgICAgICAgICogcmVzdWx0IG9mIGVyYXNpbmcgdGhlIHdpbmRvdy4gSXQgd2lsbCBsZWF2ZSBpdCdzIGZvdXIgY29ybmVycyAKKyAgICAgICAgICogYW5kIHNvIGFuIHVnbHkgcmVtbmFudCBvZiB3aW5kb3cuIAorICAgICAgICAgKi8KKyAgICAgICAgd2JvcmRlcihsb2NhbF93aW4sICcgJywgJyAnLCAnICcsJyAnLCcgJywnICcsJyAnLCcgJyk7CisgICAgICAgIC8qIFRoZSBwYXJhbWV0ZXJzIHRha2VuIGFyZSAKKyAgICAgICAgICogMS4gd2luOiB0aGUgd2luZG93IG9uIHdoaWNoIHRvIG9wZXJhdGUKKyAgICAgICAgICogMi4gbHM6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgbGVmdCBzaWRlIG9mIHRoZSB3aW5kb3cgCisgICAgICAgICAqIDMuIHJzOiBjaGFyYWN0ZXIgdG8gYmUgdXNlZCBmb3IgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogNC4gdHM6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgdG9wIHNpZGUgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogNS4gYnM6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgYm90dG9tIHNpZGUgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogNi4gdGw6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSB3aW5kb3cgCisgICAgICAgICAqIDcuIHRyOiBjaGFyYWN0ZXIgdG8gYmUgdXNlZCBmb3IgdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogOC4gYmw6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRoZSB3aW5kb3cgCisgICAgICAgICAqIDkuIGJyOiBjaGFyYWN0ZXIgdG8gYmUgdXNlZCBmb3IgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIHdpbmRvdworICAgICAgICAgKi8KKyAgICAgICAgd3JlZnJlc2gobG9jYWxfd2luKTsKKyAgICAgICAgZGVsd2luKGxvY2FsX3dpbik7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJCT1JERVJFWEVYUEwiIGlkPSJCT1JERVJFWEVYUEwiPjkuMy4KK0V4cGxhbmF0aW9uPC9hPjwvaDM+Cis8cD5Eb24ndCBzY3JlYW0uIEkga25vdyBpdCdzIGEgYmlnIGV4YW1wbGUuIEJ1dCBJIGhhdmUgdG8gZXhwbGFpbgorc29tZSBpbXBvcnRhbnQgdGhpbmdzIGhlcmUgOi0pLiBUaGlzIHByb2dyYW0gY3JlYXRlcyBhIHJlY3Rhbmd1bGFyCit3aW5kb3cgdGhhdCBjYW4gYmUgbW92ZWQgd2l0aCBsZWZ0LCByaWdodCwgdXAsIGRvd24gYXJyb3cga2V5cy4gSXQKK3JlcGVhdGVkbHkgY3JlYXRlcyBhbmQgZGVzdHJveXMgd2luZG93cyBhcyB1c2VyIHByZXNzIGEga2V5LiBEb24ndAorZ28gYmV5b25kIHRoZSBzY3JlZW4gbGltaXRzLiBDaGVja2luZyBmb3IgdGhvc2UgbGltaXRzIGlzIGxlZnQgYXMKK2FuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLiBMZXQncyBkaXNzZWN0IGl0IGJ5IGxpbmUgYnkgbGluZS48L3A+Cis8cD5UaGUgPHZhciBjbGFzcz0iTElURVJBTCI+Y3JlYXRlX25ld3dpbigpPC92YXI+IGZ1bmN0aW9uIGNyZWF0ZXMKK2Egd2luZG93IHdpdGggPHZhciBjbGFzcz0iTElURVJBTCI+bmV3d2luKCk8L3Zhcj4gYW5kIGRpc3BsYXlzIGEKK2JvcmRlciBhcm91bmQgaXQgd2l0aCBib3guIFRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmRlc3Ryb3lfd2luKCk8L3Zhcj4gZmlyc3QgZXJhc2VzIHRoZSB3aW5kb3cgZnJvbSBzY3JlZW4KK2J5IHBhaW50aW5nIGEgYm9yZGVyIHdpdGggJyAnIGNoYXJhY3RlciBhbmQgdGhlbiBjYWxsaW5nCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5kZWx3aW4oKTwvdmFyPiB0byBkZWFsbG9jYXRlIG1lbW9yeSByZWxhdGVkIHRvCitpdC4gRGVwZW5kaW5nIG9uIHRoZSBrZXkgdGhlIHVzZXIgcHJlc3Nlcywgc3RhcnR5IG9yIHN0YXJ0eCBpcworY2hhbmdlZCBhbmQgYSBuZXcgd2luZG93IGlzIGNyZWF0ZWQuPC9wPgorPHA+SW4gdGhlIGRlc3Ryb3lfd2luLCBhcyB5b3UgY2FuIHNlZSwgSSB1c2VkIHdib3JkZXIgaW5zdGVhZCBvZgorYm94LiBUaGUgcmVhc29uIGlzIHdyaXR0ZW4gaW4gdGhlIGNvbW1lbnRzIChZb3UgbWlzc2VkIGl0LiBJIGtub3cuCitSZWFkIHRoZSBjb2RlIDotKSkuIHdib3JkZXIgZHJhd3MgYSBib3JkZXIgYXJvdW5kIHRoZSB3aW5kb3cgd2l0aAordGhlIGNoYXJhY3RlcnMgZ2l2ZW4gdG8gaXQgYXMgdGhlIDQgY29ybmVyIHBvaW50cyBhbmQgdGhlIDQgbGluZXMuCitUbyBwdXQgaXQgY2xlYXJseSwgaWYgeW91IGhhdmUgY2FsbGVkIHdib3JkZXIgYXMgYmVsb3c6PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+ICAgIHdib3JkZXIod2luLCAnfCcsICd8JywgJy0nLCAnLScsICcrJywgJysnLCAnKycsICcrJyk7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+aXQgcHJvZHVjZXMgc29tZSB0aGluZyBsaWtlPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICArLS0tLS0tLS0tLS0tKworICAgIHwgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0rPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJPVEhFUlNUVUZGIiBpZD0iT1RIRVJTVFVGRiI+OS40LiBUaGUKK290aGVyIHN0dWZmIGluIHRoZSBleGFtcGxlPC9hPjwvaDM+Cis8cD5Zb3UgY2FuIGFsc28gc2VlIGluIHRoZSBhYm92ZSBleGFtcGxlcywgdGhhdCBJIGhhdmUgdXNlZCB0aGUKK3ZhcmlhYmxlcyBDT0xTLCBMSU5FUyB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gdGhlIHNjcmVlbiBzaXplcworYWZ0ZXIgaW5pdHNjcigpLiBUaGV5IGNhbiBiZSB1c2VmdWwgaW4gZmluZGluZyBzY3JlZW4gZGltZW5zaW9ucworYW5kIGZpbmRpbmcgdGhlIGNlbnRlciBjby1vcmRpbmF0ZSBvZiB0aGUgc2NyZWVuIGFzIGFib3ZlLiBUaGUKK2Z1bmN0aW9uIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldGNoKCk8L3Zhcj4gYXMgdXN1YWwgZ2V0cyB0aGUga2V5Citmcm9tIGtleWJvYXJkIGFuZCBhY2NvcmRpbmcgdG8gdGhlIGtleSBpdCBkb2VzIHRoZSBjb3JyZXNwb25kaW5nCit3b3JrLiBUaGlzIHR5cGUgb2Ygc3dpdGNoLSBjYXNlIGlzIHZlcnkgY29tbW9uIGluIGFueSBHVUkgYmFzZWQKK3Byb2dyYW1zLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iT1RIRVJCT1JERVJGVU5DUyIgaWQ9CisiT1RIRVJCT1JERVJGVU5DUyI+OS41LiBPdGhlciBCb3JkZXIgZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5BYm92ZSBwcm9ncmFtIGlzIGdyb3NzbHkgaW5lZmZpY2llbnQgaW4gdGhhdCB3aXRoIGVhY2ggcHJlc3Mgb2YKK2Ega2V5LCBhIHdpbmRvdyBpcyBkZXN0cm95ZWQgYW5kIGFub3RoZXIgaXMgY3JlYXRlZC4gU28gbGV0J3Mgd3JpdGUKK2EgbW9yZSBlZmZpY2llbnQgcHJvZ3JhbSB3aGljaCB1c2VzIG90aGVyIGJvcmRlciByZWxhdGVkCitmdW5jdGlvbnMuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBwcm9ncmFtIHVzZXMgPHZhciBjbGFzcz0iTElURVJBTCI+bXZobGluZSgpPC92YXI+CithbmQgPHZhciBjbGFzcz0iTElURVJBTCI+bXZ2bGluZSgpPC92YXI+IHRvIGFjaGlldmUgc2ltaWxhciBlZmZlY3QuCitUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBzaW1wbGUuIFRoZXkgY3JlYXRlIGEgaG9yaXpvbnRhbCBvcgordmVydGljYWwgbGluZSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCBhdCB0aGUgc3BlY2lmaWVkCitwb3NpdGlvbi48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCT1RCTyIgaWQ9IkJPVEJPIj48L2E+Cis8cD48Yj5FeGFtcGxlIDguIE1vcmUgYm9yZGVyIGZ1bmN0aW9uczwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK3R5cGVkZWYgc3RydWN0IF93aW5fYm9yZGVyX3N0cnVjdCB7CisgICAgICAgIGNodHlwZSAgbHMsIHJzLCB0cywgYnMsIAorICAgICAgICAgICAgICAgIHRsLCB0ciwgYmwsIGJyOworfVdJTl9CT1JERVI7CisKK3R5cGVkZWYgc3RydWN0IF9XSU5fc3RydWN0IHsKKworICAgICAgICBpbnQgc3RhcnR4LCBzdGFydHk7CisgICAgICAgIGludCBoZWlnaHQsIHdpZHRoOworICAgICAgICBXSU5fQk9SREVSIGJvcmRlcjsKK31XSU47CisKK3ZvaWQgaW5pdF93aW5fcGFyYW1zKFdJTiAqcF93aW4pOwordm9pZCBwcmludF93aW5fcGFyYW1zKFdJTiAqcF93aW4pOwordm9pZCBjcmVhdGVfYm94KFdJTiAqd2luLCBib29sIGZsYWcpOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreyAgICAgICBXSU4gd2luOworICAgICAgICBpbnQgY2g7CisKKyAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBjdXJzZXMgbW9kZSAgICAgICAgICAgICovCisgICAgICAgIHN0YXJ0X2NvbG9yKCk7ICAgICAgICAgICAgICAgICAgLyogU3RhcnQgdGhlIGNvbG9yIGZ1bmN0aW9uYWxpdHkgKi8KKyAgICAgICAgY2JyZWFrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGJ1ZmZlcmluZyBkaXNhYmxlZCwgUGFzcyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGV2ZXJ0eSB0aGluZyB0byBtZSAgICAgICAgICAgKi8KKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7ICAgICAgICAgICAvKiBJIG5lZWQgdGhhdCBuaWZ0eSBGMSAgICAgICAgICovCisgICAgICAgIG5vZWNobygpOworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHdpbmRvdyBwYXJhbWV0ZXJzICovCisgICAgICAgIGluaXRfd2luX3BhcmFtcygmYW1wO3dpbik7CisgICAgICAgIHByaW50X3dpbl9wYXJhbXMoJmFtcDt3aW4pOworCisgICAgICAgIGF0dHJvbihDT0xPUl9QQUlSKDEpKTsKKyAgICAgICAgcHJpbnR3KCJQcmVzcyBGMSB0byBleGl0Iik7CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDEpKTsKKyAgICAgICAgCisgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIFRSVUUpOworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9MRUZUOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYm94KCZhbXA7d2luLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2luLnN0YXJ0eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2JveCgmYW1wO3dpbiwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt3aW4uc3RhcnR4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYm94KCZhbXA7d2luLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2JveCgmYW1wO3dpbiwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpbi5zdGFydHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIFRSVUUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt3aW4uc3RhcnR5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYm94KCZhbXA7d2luLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDA7Cit9Cit2b2lkIGluaXRfd2luX3BhcmFtcyhXSU4gKnBfd2luKQoreworICAgICAgICBwX3dpbi0mZ3Q7aGVpZ2h0ID0gMzsKKyAgICAgICAgcF93aW4tJmd0O3dpZHRoID0gMTA7CisgICAgICAgIHBfd2luLSZndDtzdGFydHkgPSAoTElORVMgLSBwX3dpbi0mZ3Q7aGVpZ2h0KS8yOyAgICAgIAorICAgICAgICBwX3dpbi0mZ3Q7c3RhcnR4ID0gKENPTFMgLSBwX3dpbi0mZ3Q7d2lkdGgpLzI7CisKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci5scyA9ICd8JzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci5ycyA9ICd8JzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci50cyA9ICctJzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci5icyA9ICctJzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci50bCA9ICcrJzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci50ciA9ICcrJzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci5ibCA9ICcrJzsKKyAgICAgICAgcF93aW4tJmd0O2JvcmRlci5iciA9ICcrJzsKKworfQordm9pZCBwcmludF93aW5fcGFyYW1zKFdJTiAqcF93aW4pCit7CisjaWZkZWYgX0RFQlVHCisgICAgICAgIG12cHJpbnR3KDI1LCAwLCAiJWQgJWQgJWQgJWQiLCBwX3dpbi0mZ3Q7c3RhcnR4LCBwX3dpbi0mZ3Q7c3RhcnR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF93aW4tJmd0O3dpZHRoLCBwX3dpbi0mZ3Q7aGVpZ2h0KTsKKyAgICAgICAgcmVmcmVzaCgpOworI2VuZGlmCit9Cit2b2lkIGNyZWF0ZV9ib3goV0lOICpwX3dpbiwgYm9vbCBmbGFnKQoreyAgICAgICBpbnQgaSwgajsKKyAgICAgICAgaW50IHgsIHksIHcsIGg7CisKKyAgICAgICAgeCA9IHBfd2luLSZndDtzdGFydHg7CisgICAgICAgIHkgPSBwX3dpbi0mZ3Q7c3RhcnR5OworICAgICAgICB3ID0gcF93aW4tJmd0O3dpZHRoOworICAgICAgICBoID0gcF93aW4tJmd0O2hlaWdodDsKKworICAgICAgICBpZihmbGFnID09IFRSVUUpCisgICAgICAgIHsgICAgICAgbXZhZGRjaCh5LCB4LCBwX3dpbi0mZ3Q7Ym9yZGVyLnRsKTsKKyAgICAgICAgICAgICAgICBtdmFkZGNoKHksIHggKyB3LCBwX3dpbi0mZ3Q7Ym9yZGVyLnRyKTsKKyAgICAgICAgICAgICAgICBtdmFkZGNoKHkgKyBoLCB4LCBwX3dpbi0mZ3Q7Ym9yZGVyLmJsKTsKKyAgICAgICAgICAgICAgICBtdmFkZGNoKHkgKyBoLCB4ICsgdywgcF93aW4tJmd0O2JvcmRlci5icik7CisgICAgICAgICAgICAgICAgbXZobGluZSh5LCB4ICsgMSwgcF93aW4tJmd0O2JvcmRlci50cywgdyAtIDEpOworICAgICAgICAgICAgICAgIG12aGxpbmUoeSArIGgsIHggKyAxLCBwX3dpbi0mZ3Q7Ym9yZGVyLmJzLCB3IC0gMSk7CisgICAgICAgICAgICAgICAgbXZ2bGluZSh5ICsgMSwgeCwgcF93aW4tJmd0O2JvcmRlci5scywgaCAtIDEpOworICAgICAgICAgICAgICAgIG12dmxpbmUoeSArIDEsIHggKyB3LCBwX3dpbi0mZ3Q7Ym9yZGVyLnJzLCBoIC0gMSk7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZm9yKGogPSB5OyBqICZsdDs9IHkgKyBoOyArK2opCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IHg7IGkgJmx0Oz0geCArIHc7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXZhZGRjaChqLCBpLCAnICcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgcmVmcmVzaCgpOworCit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IkNPTE9SIiBpZD0iQ09MT1IiPjEwLiBDb2xvcnM8L2E+PC9oMj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNPTE9SQkFTSUNTIiBpZD0iQ09MT1JCQVNJQ1MiPjEwLjEuIFRoZQorYmFzaWNzPC9hPjwvaDM+Cis8cD5MaWZlIHNlZW1zIGR1bGwgd2l0aCBubyBjb2xvcnMuIEN1cnNlcyBoYXMgYSBuaWNlIG1lY2hhbmlzbSB0bworaGFuZGxlIGNvbG9ycy4gTGV0J3MgZ2V0IGludG8gdGhlIHRoaWNrIG9mIHRoZSB0aGluZ3Mgd2l0aCBhIHNtYWxsCitwcm9ncmFtLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJTSUNPIiBpZD0iQlNJQ08iPjwvYT4KKzxwPjxiPkV4YW1wbGUgOS4gQSBTaW1wbGUgQ29sb3IgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZyk7CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreyAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGN1cnNlcyBtb2RlICAgICAgICAgICAgKi8KKyAgICAgICAgaWYoaGFzX2NvbG9ycygpID09IEZBTFNFKQorICAgICAgICB7ICAgICAgIGVuZHdpbigpOworICAgICAgICAgICAgICAgIHByaW50ZigiWW91ciB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IGNvbG9yXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7ICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY29sb3IgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoMSkpOworICAgICAgICBwcmludF9pbl9taWRkbGUoc3Rkc2NyLCBMSU5FUyAvIDIsIDAsIDAsICJWaW9sYSAhISEgSW4gY29sb3IgLi4uIik7CisgICAgICAgIGF0dHJvZmYoQ09MT1JfUEFJUigxKSk7CisgICAgICAgIGdldGNoKCk7CisgICAgICAgIGVuZHdpbigpOworfQordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nKQoreyAgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworICAgICAgICBmbG9hdCB0ZW1wOworCisgICAgICAgIGlmKHdpbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHdpbiA9IHN0ZHNjcjsKKyAgICAgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICAgICAgaWYoc3RhcnR4ICE9IDApCisgICAgICAgICAgICAgICAgeCA9IHN0YXJ0eDsKKyAgICAgICAgaWYoc3RhcnR5ICE9IDApCisgICAgICAgICAgICAgICAgeSA9IHN0YXJ0eTsKKyAgICAgICAgaWYod2lkdGggPT0gMCkKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwOworCisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICB0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKS8gMjsKKyAgICAgICAgeCA9IHN0YXJ0eCArIChpbnQpdGVtcDsKKyAgICAgICAgbXZ3cHJpbnR3KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKyAgICAgICAgcmVmcmVzaCgpOworfQorPC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+QXMgeW91IGNhbiBzZWUsIHRvIHN0YXJ0IHVzaW5nIGNvbG9yLCB5b3Ugc2hvdWxkIGZpcnN0IGNhbGwgdGhlCitmdW5jdGlvbiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5zdGFydF9jb2xvcigpPC92YXI+LiBBZnRlciB0aGF0LCB5b3UKK2NhbiB1c2UgY29sb3IgY2FwYWJpbGl0aWVzIG9mIHlvdXIgdGVybWluYWxzIHVzaW5nIHZhcmlvdXMKK2Z1bmN0aW9ucy4gVG8gZmluZCBvdXQgd2hldGhlciBhIHRlcm1pbmFsIGhhcyBjb2xvciBjYXBhYmlsaXRpZXMgb3IKK25vdCwgeW91IGNhbiB1c2UgPHZhciBjbGFzcz0iTElURVJBTCI+aGFzX2NvbG9ycygpPC92YXI+IGZ1bmN0aW9uLAord2hpY2ggcmV0dXJucyBGQUxTRSBpZiB0aGUgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBjb2xvci48L3A+Cis8cD5DdXJzZXMgaW5pdGlhbGl6ZXMgYWxsIHRoZSBjb2xvcnMgc3VwcG9ydGVkIGJ5IHRlcm1pbmFsIHdoZW4KK3N0YXJ0X2NvbG9yKCkgaXMgY2FsbGVkLiBUaGVzZSBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlIGRlZmluZQorY29uc3RhbnRzIGxpa2UgPHZhciBjbGFzcz0iTElURVJBTCI+Q09MT1JfQkxBQ0s8L3Zhcj4gZXRjLiBOb3cgdG8KK2FjdHVhbGx5IHN0YXJ0IHVzaW5nIGNvbG9ycywgeW91IGhhdmUgdG8gZGVmaW5lIHBhaXJzLiBDb2xvcnMgYXJlCithbHdheXMgdXNlZCBpbiBwYWlycy4gVGhhdCBtZWFucyB5b3UgaGF2ZSB0byB1c2UgdGhlIGZ1bmN0aW9uCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5pbml0X3BhaXIoKTwvdmFyPiB0byBkZWZpbmUgdGhlIGZvcmVncm91bmQgYW5kCitiYWNrZ3JvdW5kIGZvciB0aGUgcGFpciBudW1iZXIgeW91IGdpdmUuIEFmdGVyIHRoYXQgdGhhdCBwYWlyCitudW1iZXIgY2FuIGJlIHVzZWQgYXMgYSBub3JtYWwgYXR0cmlidXRlIHdpdGggPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5DT0xPUl9QQUlSKCk8L3Zhcj5mdW5jdGlvbi4gVGhpcyBtYXkgc2VlbSB0byBiZQorY3VtYmVyc29tZSBhdCBmaXJzdC4gQnV0IHRoaXMgZWxlZ2FudCBzb2x1dGlvbiBhbGxvd3MgdXMgdG8gbWFuYWdlCitjb2xvciBwYWlycyB2ZXJ5IGVhc2lseS4gVG8gYXBwcmVjaWF0ZSBpdCwgeW91IGhhdmUgdG8gbG9vayBpbnRvCit0aGUgdGhlIHNvdXJjZSBjb2RlIG9mICJkaWFsb2ciLCBhIHV0aWxpdHkgZm9yIGRpc3BsYXlpbmcgZGlhbG9nCitib3hlcyBmcm9tIHNoZWxsIHNjcmlwdHMuIFRoZSBkZXZlbG9wZXJzIGhhdmUgZGVmaW5lZCBmb3JlZ3JvdW5kCithbmQgYmFja2dyb3VuZCBjb21iaW5hdGlvbnMgZm9yIGFsbCB0aGUgY29sb3JzIHRoZXkgbWlnaHQgbmVlZCBhbmQKK2luaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcuIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIHNldAorYXR0cmlidXRlcyBqdXN0IGJ5IGFjY2Vzc2luZyBhIHBhaXIgd2hpY2ggd2UgYWxyZWFkeSBoYXZlIGRlZmluZWQKK2FzIGEgY29uc3RhbnQuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBjb2xvcnMgYXJlIGRlZmluZWQgaW4gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5jdXJzZXMuaDwvdmFyPi4gWW91IGNhbiB1c2UgdGhlc2UgYXMgcGFyYW1ldGVycyBmb3IKK3ZhcmlvdXMgY29sb3IgZnVuY3Rpb25zLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgICAgIENPTE9SX0JMQUNLICAgMAorICAgICAgICBDT0xPUl9SRUQgICAgIDEKKyAgICAgICAgQ09MT1JfR1JFRU4gICAyCisgICAgICAgIENPTE9SX1lFTExPVyAgMworICAgICAgICBDT0xPUl9CTFVFICAgIDQKKyAgICAgICAgQ09MT1JfTUFHRU5UQSA1CisgICAgICAgIENPTE9SX0NZQU4gICAgNgorICAgICAgICBDT0xPUl9XSElURSAgIDc8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNIQU5HRUNPTE9SREVGUyIgaWQ9CisiQ0hBTkdFQ09MT1JERUZTIj4xMC4yLiBDaGFuZ2luZyBDb2xvciBEZWZpbml0aW9uczwvYT48L2gzPgorPHA+VGhlIGZ1bmN0aW9uIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmluaXRfY29sb3IoKTwvdmFyPmNhbiBiZSB1c2VkCit0byBjaGFuZ2UgdGhlIHJnYiB2YWx1ZXMgZm9yIHRoZSBjb2xvcnMgZGVmaW5lZCBieSBjdXJzZXMKK2luaXRpYWxseS4gU2F5IHlvdSB3YW50ZWQgdG8gbGlnaHRlbiB0aGUgaW50ZW5zaXR5IG9mIHJlZCBjb2xvciBieQorYSBtaW51c2N1bGUuIFRoZW4geW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiBhczwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgaW5pdF9jb2xvcihDT0xPUl9SRUQsIDcwMCwgMCwgMCk7CisgICAgLyogcGFyYW0gMSAgICAgOiBjb2xvciBuYW1lCisgICAgICogcGFyYW0gMiwgMywgNCA6IHJnYiBjb250ZW50IG1pbiA9IDAsIG1heCA9IDEwMDAgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5JZiB5b3VyIHRlcm1pbmFsIGNhbm5vdCBjaGFuZ2UgdGhlIGNvbG9yIGRlZmluaXRpb25zLCB0aGUKK2Z1bmN0aW9uIHJldHVybnMgRVJSLiBUaGUgZnVuY3Rpb24gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5jYW5fY2hhbmdlX2NvbG9yKCk8L3Zhcj4gY2FuIGJlIHVzZWQgdG8gZmluZCBvdXQgd2hldGhlcgordGhlIHRlcm1pbmFsIGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBjaGFuZ2luZyBjb2xvciBjb250ZW50IG9yIG5vdC4KK1RoZSByZ2IgY29udGVudCBpcyBzY2FsZWQgZnJvbSAwIHRvIDEwMDAuIEluaXRpYWxseSBSRUQgY29sb3IgaXMKK2RlZmluZWQgd2l0aCBjb250ZW50IDEwMDAociksIDAoZyksIDAoYikuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJDT0xPUkNPTlRFTlQiIGlkPSJDT0xPUkNPTlRFTlQiPjEwLjMuCitDb2xvciBDb250ZW50PC9hPjwvaDM+Cis8cD5UaGUgZnVuY3Rpb25zIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmNvbG9yX2NvbnRlbnQoKTwvdmFyPiBhbmQKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPnBhaXJfY29udGVudCgpPC92YXI+IGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlCitjb2xvciBjb250ZW50IGFuZCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kIGNvbWJpbmF0aW9uIGZvciB0aGUKK3BhaXIuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IktFWVMiIGlkPSJLRVlTIj4xMS4gSW50ZXJmYWNpbmcgd2l0aCB0aGUKK2tleSBib2FyZDwvYT48L2gyPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iS0VZU0JBU0lDUyIgaWQ9IktFWVNCQVNJQ1MiPjExLjEuIFRoZQorQmFzaWNzPC9hPjwvaDM+Cis8cD5ObyBHVUkgaXMgY29tcGxldGUgd2l0aG91dCBhIHN0cm9uZyB1c2VyIGludGVyZmFjZSBhbmQgdG8KK2ludGVyYWN0IHdpdGggdGhlIHVzZXIsIGEgY3Vyc2VzIHByb2dyYW0gc2hvdWxkIGJlIHNlbnNpdGl2ZSB0byBrZXkKK3ByZXNzZXMgb3IgdGhlIG1vdXNlIGFjdGlvbnMgZG9uZSBieSB0aGUgdXNlci4gTGV0J3MgZGVhbCB3aXRoIHRoZQora2V5cyBmaXJzdC48L3A+Cis8cD5BcyB5b3UgaGF2ZSBzZWVuIGluIGFsbW9zdCBhbGwgb2YgdGhlIGFib3ZlIGV4YW1wbGVzLCBpdCdzIHZlcnkKK2Vhc3kgdG8gZ2V0IGtleSBpbnB1dCBmcm9tIHRoZSB1c2VyLiBBIHNpbXBsZSB3YXkgb2YgZ2V0dGluZyBrZXkKK3ByZXNzZXMgaXMgdG8gdXNlIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldGNoKCk8L3Zhcj4gZnVuY3Rpb24uIFRoZQorY2JyZWFrIG1vZGUgc2hvdWxkIGJlIGVuYWJsZWQgdG8gcmVhZCBrZXlzIHdoZW4geW91IGFyZSBpbnRlcmVzdGVkCitpbiByZWFkaW5nIGluZGl2aWR1YWwga2V5IGhpdHMgcmF0aGVyIHRoYW4gY29tcGxldGUgbGluZXMgb2YgdGV4dAorKHdoaWNoIHVzdWFsbHkgZW5kIHdpdGggYSBjYXJyaWFnZSByZXR1cm4pLiBrZXlwYWQgc2hvdWxkIGJlCitlbmFibGVkIHRvIGdldCB0aGUgRnVuY3Rpb25zIGtleXMsIGFycm93IGtleXMgZXRjLiBTZWUgdGhlCitpbml0aWFsaXphdGlvbiBzZWN0aW9uIGZvciBkZXRhaWxzLjwvcD4KKzxwPjx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldGNoKCk8L3Zhcj4gcmV0dXJucyBhbiBpbnRlZ2VyCitjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkgcHJlc3NlZC4gSWYgaXQgaXMgYSBub3JtYWwgY2hhcmFjdGVyLCB0aGUKK2ludGVnZXIgdmFsdWUgd2lsbCBiZSBlcXVpdmFsZW50IHRvIHRoZSBjaGFyYWN0ZXIuIE90aGVyd2lzZSBpdAorcmV0dXJucyBhIG51bWJlciB3aGljaCBjYW4gYmUgbWF0Y2hlZCB3aXRoIHRoZSBjb25zdGFudHMgZGVmaW5lZCBpbgorPHZhciBjbGFzcz0iTElURVJBTCI+Y3Vyc2VzLmg8L3Zhcj4uIEZvciBleGFtcGxlIGlmIHRoZSB1c2VyCitwcmVzc2VzIEYxLCB0aGUgaW50ZWdlciByZXR1cm5lZCBpcyAyNjUuIFRoaXMgY2FuIGJlIGNoZWNrZWQgdXNpbmcKK3RoZSBtYWNybyBLRVlfRigpIGRlZmluZWQgaW4gY3Vyc2VzLmguIFRoaXMgbWFrZXMgcmVhZGluZyBrZXlzCitwb3J0YWJsZSBhbmQgZWFzeSB0byBtYW5hZ2UuPC9wPgorPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBjYWxsIGdldGNoKCkgbGlrZSB0aGlzPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBpbnQgY2g7CisKKyAgICBjaCA9IGdldGNoKCk7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+Z2V0Y2goKSB3aWxsIHdhaXQgZm9yIHRoZSB1c2VyIHRvIHByZXNzIGEga2V5LCAodW5sZXNzIHlvdQorc3BlY2lmaWVkIGEgdGltZW91dCkgYW5kIHdoZW4gdXNlciBwcmVzc2VzIGEga2V5LCB0aGUgY29ycmVzcG9uZGluZworaW50ZWdlciBpcyByZXR1cm5lZC4gVGhlbiB5b3UgY2FuIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCB3aXRoIHRoZQorY29uc3RhbnRzIGRlZmluZWQgaW4gY3Vyc2VzLmggdG8gbWF0Y2ggYWdhaW5zdCB0aGUga2V5cyB5b3UKK3dhbnQuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBjb2RlIHBpZWNlIHdpbGwgZG8gdGhhdCBqb2IuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBpZihjaCA9PSBLRVlfTEVGVCkKKyAgICAgICAgcHJpbnR3KCJMZWZ0IGFycm93IGlzIHByZXNzZWRcbiIpOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPkxldCdzIHdyaXRlIGEgc21hbGwgcHJvZ3JhbSB3aGljaCBjcmVhdGVzIGEgbWVudSB3aGljaCBjYW4gYmUKK25hdmlnYXRlZCBieSB1cCBhbmQgZG93biBhcnJvd3MuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJTSU1QTEVLRVlFWCIgaWQ9IlNJTVBMRUtFWUVYIj4xMS4yLiBBCitTaW1wbGUgS2V5IFVzYWdlIGV4YW1wbGU8L2E+PC9oMz4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJTSUtFIiBpZD0iQlNJS0UiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMTAuIEEgU2ltcGxlIEtleSBVc2FnZSBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworCisjZGVmaW5lIFdJRFRIIDMwCisjZGVmaW5lIEhFSUdIVCAxMCAKKworaW50IHN0YXJ0eCA9IDA7CitpbnQgc3RhcnR5ID0gMDsKKworY2hhciAqY2hvaWNlc1tdID0geyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICB9OworaW50IG5fY2hvaWNlcyA9IHNpemVvZihjaG9pY2VzKSAvIHNpemVvZihjaGFyICopOwordm9pZCBwcmludF9tZW51KFdJTkRPVyAqbWVudV93aW4sIGludCBoaWdobGlnaHQpOworCitpbnQgbWFpbigpCit7ICAgICAgIFdJTkRPVyAqbWVudV93aW47CisgICAgICAgIGludCBoaWdobGlnaHQgPSAxOworICAgICAgICBpbnQgY2hvaWNlID0gMDsKKyAgICAgICAgaW50IGM7CisKKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjbGVhcigpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAgY2JyZWFrKCk7ICAgICAgIC8qIExpbmUgYnVmZmVyaW5nIGRpc2FibGVkLiBwYXNzIG9uIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgc3RhcnR4ID0gKDgwIC0gV0lEVEgpIC8gMjsKKyAgICAgICAgc3RhcnR5ID0gKDI0IC0gSEVJR0hUKSAvIDI7CisgICAgICAgICAgICAgICAgCisgICAgICAgIG1lbnVfd2luID0gbmV3d2luKEhFSUdIVCwgV0lEVEgsIHN0YXJ0eSwgc3RhcnR4KTsKKyAgICAgICAga2V5cGFkKG1lbnVfd2luLCBUUlVFKTsKKyAgICAgICAgbXZwcmludHcoMCwgMCwgIlVzZSBhcnJvdyBrZXlzIHRvIGdvIHVwIGFuZCBkb3duLCBQcmVzcyBlbnRlciB0byBzZWxlY3QgYSBjaG9pY2UiKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICBwcmludF9tZW51KG1lbnVfd2luLCBoaWdobGlnaHQpOworICAgICAgICB3aGlsZSgxKQorICAgICAgICB7ICAgICAgIGMgPSB3Z2V0Y2gobWVudV93aW4pOworICAgICAgICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhpZ2hsaWdodCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodCA9IG5fY2hvaWNlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taGlnaGxpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhpZ2hsaWdodCA9PSBuX2Nob2ljZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2hpZ2hsaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSBoaWdobGlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXZwcmludHcoMjQsIDAsICJDaGFyY3RlciBwcmVzc2VkIGlzID0gJTNkIEhvcGVmdWxseSBpdCBjYW4gYmUgcHJpbnRlZCBhcyAnJWMnIiwgYywgYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50X21lbnUobWVudV93aW4sIGhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgaWYoY2hvaWNlICE9IDApIC8qIFVzZXIgZGlkIGEgY2hvaWNlIGNvbWUgb3V0IG9mIHRoZSBpbmZpbml0ZSBsb29wICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAKKyAgICAgICAgbXZwcmludHcoMjMsIDAsICJZb3UgY2hvc2UgY2hvaWNlICVkIHdpdGggY2hvaWNlIHN0cmluZyAlc1xuIiwgY2hvaWNlLCBjaG9pY2VzW2Nob2ljZSAtIDFdKTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICBlbmR3aW4oKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBwcmludF9tZW51KFdJTkRPVyAqbWVudV93aW4sIGludCBoaWdobGlnaHQpCit7CisgICAgICAgIGludCB4LCB5LCBpOyAgICAKKworICAgICAgICB4ID0gMjsKKyAgICAgICAgeSA9IDI7CisgICAgICAgIGJveChtZW51X3dpbiwgMCwgMCk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICB7ICAgICAgIGlmKGhpZ2hsaWdodCA9PSBpICsgMSkgLyogSGlnaCBsaWdodCB0aGUgcHJlc2VudCBjaG9pY2UgKi8KKyAgICAgICAgICAgICAgICB7ICAgICAgIHdhdHRyb24obWVudV93aW4sIEFfUkVWRVJTRSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgbXZ3cHJpbnR3KG1lbnVfd2luLCB5LCB4LCAiJXMiLCBjaG9pY2VzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhdHRyb2ZmKG1lbnVfd2luLCBBX1JFVkVSU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtdndwcmludHcobWVudV93aW4sIHksIHgsICIlcyIsIGNob2ljZXNbaV0pOworICAgICAgICAgICAgICAgICsreTsKKyAgICAgICAgfQorICAgICAgICB3cmVmcmVzaChtZW51X3dpbik7Cit9Cis8L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iTU9VU0UiIGlkPSJNT1VTRSI+MTIuIEludGVyZmFjaW5nIHdpdGgKK3RoZSBtb3VzZTwvYT48L2gyPgorPHA+Tm93IHRoYXQgeW91IGhhdmUgc2VlbiBob3cgdG8gZ2V0IGtleXMsIGxldHMgZG8gdGhlIHNhbWUgdGhpbmcKK2Zyb20gbW91c2UuIFVzdWFsbHkgZWFjaCBVSSBhbGxvd3MgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aCBib3RoCitrZXlib2FyZCBhbmQgbW91c2UuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTU9VU0VCQVNJQ1MiIGlkPSJNT1VTRUJBU0lDUyI+MTIuMS4gVGhlCitCYXNpY3M8L2E+PC9oMz4KKzxwPkJlZm9yZSB5b3UgZG8gYW55IHRoaW5nIGVsc2UsIHRoZSBldmVudHMgeW91IHdhbnQgdG8gcmVjZWl2ZQoraGF2ZSB0byBiZSBlbmFibGVkIHdpdGggPHZhciBjbGFzcz0iTElURVJBTCI+bW91c2VtYXNrKCk8L3Zhcj4uPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+ICAgIG1vdXNlbWFzayggIG1tYXNrX3QgbmV3bWFzaywgICAgLyogVGhlIGV2ZW50cyB5b3Ugd2FudCB0byBsaXN0ZW4gdG8gKi8KKyAgICAgICAgICAgICAgICBtbWFza190ICpvbGRtYXNrKSAgICAvKiBUaGUgb2xkIGV2ZW50cyBtYXNrICAgICAgICAgICAgICAgICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZpcnN0IHBhcmFtZXRlciB0byBhYm92ZSBmdW5jdGlvbiBpcyBhIGJpdCBtYXNrIG9mIGV2ZW50cworeW91IHdvdWxkIGxpa2UgdG8gbGlzdGVuLiBCeSBkZWZhdWx0LCBhbGwgdGhlIGV2ZW50cyBhcmUgdHVybmVkCitvZmYuIFRoZSBiaXQgbWFzayA8dmFyIGNsYXNzPSJMSVRFUkFMIj5BTExfTU9VU0VfRVZFTlRTPC92YXI+IGNhbgorYmUgdXNlZCB0byBnZXQgYWxsIHRoZSBldmVudHMuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBhcmUgYWxsIHRoZSBldmVudCBtYXNrczo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIE5hbWUgICAgICAgICAgICBEZXNjcmlwdGlvbgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEJVVFRPTjFfUFJFU1NFRCAgICAgICAgICBtb3VzZSBidXR0b24gMSBkb3duCisgICAgICAgQlVUVE9OMV9SRUxFQVNFRCAgICAgICAgIG1vdXNlIGJ1dHRvbiAxIHVwCisgICAgICAgQlVUVE9OMV9DTElDS0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAxIGNsaWNrZWQKKyAgICAgICBCVVRUT04xX0RPVUJMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDEgZG91YmxlIGNsaWNrZWQKKyAgICAgICBCVVRUT04xX1RSSVBMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDEgdHJpcGxlIGNsaWNrZWQKKyAgICAgICBCVVRUT04yX1BSRVNTRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDIgZG93bgorICAgICAgIEJVVFRPTjJfUkVMRUFTRUQgICAgICAgICBtb3VzZSBidXR0b24gMiB1cAorICAgICAgIEJVVFRPTjJfQ0xJQ0tFRCAgICAgICAgICBtb3VzZSBidXR0b24gMiBjbGlja2VkCisgICAgICAgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAyIGRvdWJsZSBjbGlja2VkCisgICAgICAgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAyIHRyaXBsZSBjbGlja2VkCisgICAgICAgQlVUVE9OM19QUkVTU0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAzIGRvd24KKyAgICAgICBCVVRUT04zX1JFTEVBU0VEICAgICAgICAgbW91c2UgYnV0dG9uIDMgdXAKKyAgICAgICBCVVRUT04zX0NMSUNLRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDMgY2xpY2tlZAorICAgICAgIEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMyBkb3VibGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjNfVFJJUExFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMyB0cmlwbGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjRfUFJFU1NFRCAgICAgICAgICBtb3VzZSBidXR0b24gNCBkb3duCisgICAgICAgQlVUVE9ONF9SRUxFQVNFRCAgICAgICAgIG1vdXNlIGJ1dHRvbiA0IHVwCisgICAgICAgQlVUVE9ONF9DTElDS0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiA0IGNsaWNrZWQKKyAgICAgICBCVVRUT040X0RPVUJMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDQgZG91YmxlIGNsaWNrZWQKKyAgICAgICBCVVRUT040X1RSSVBMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDQgdHJpcGxlIGNsaWNrZWQKKyAgICAgICBCVVRUT05fU0hJRlQgICAgICAgICAgICAgc2hpZnQgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKKyAgICAgICBCVVRUT05fQ1RSTCAgICAgICAgICAgICAgY29udHJvbCB3YXMgZG93biBkdXJpbmcgYnV0dG9uIHN0YXRlIGNoYW5nZQorICAgICAgIEJVVFRPTl9BTFQgICAgICAgICAgICAgICBhbHQgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKKyAgICAgICBBTExfTU9VU0VfRVZFTlRTICAgICAgICAgcmVwb3J0IGFsbCBidXR0b24gc3RhdGUgY2hhbmdlcworICAgICAgIFJFUE9SVF9NT1VTRV9QT1NJVElPTiAgICByZXBvcnQgbW91c2UgbW92ZW1lbnQ8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkdFVFRJTkdFVkVOVFMiIGlkPSJHRVRUSU5HRVZFTlRTIj4xMi4yLgorR2V0dGluZyB0aGUgZXZlbnRzPC9hPjwvaDM+Cis8cD5PbmNlIGEgY2xhc3Mgb2YgbW91c2UgZXZlbnRzIGhhdmUgYmVlbiBlbmFibGVkLCBnZXRjaCgpIGNsYXNzIG9mCitmdW5jdGlvbnMgcmV0dXJuIEtFWV9NT1VTRSBldmVyeSB0aW1lIHNvbWUgbW91c2UgZXZlbnQgaGFwcGVucy4KK1RoZW4gdGhlIG1vdXNlIGV2ZW50IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmdldG1vdXNlKCk8L3Zhcj4uPC9wPgorPHA+VGhlIGNvZGUgYXBwcm94aW1hdGVseSBsb29rcyBsaWtlIHRoaXM6PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBNRVZFTlQgZXZlbnQ7CisKKyAgICBjaCA9IGdldGNoKCk7CisgICAgaWYoY2ggPT0gS0VZX01PVVNFKQorICAgICAgICBpZihnZXRtb3VzZSgmYW1wO2V2ZW50KSA9PSBPSykKKyAgICAgICAgICAgIC4gICAgLyogRG8gc29tZSB0aGluZyB3aXRoIHRoZSBldmVudCAqLworICAgICAgICAgICAgLgorICAgICAgICAgICAgLjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPmdldG1vdXNlKCkgcmV0dXJucyB0aGUgZXZlbnQgaW50byB0aGUgcG9pbnRlciBnaXZlbiB0byBpdC4gSXQncworYSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnM8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgICBzaG9ydCBpZDsgICAgICAgICAvKiBJRCB0byBkaXN0aW5ndWlzaCBtdWx0aXBsZSBkZXZpY2VzICovCisgICAgICAgIGludCB4LCB5LCB6OyAgICAgIC8qIGV2ZW50IGNvb3JkaW5hdGVzICovCisgICAgICAgIG1tYXNrX3QgYnN0YXRlOyAgIC8qIGJ1dHRvbiBzdGF0ZSBiaXRzICovCisgICAgfSAgICA8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgPHZhciBjbGFzcz0iTElURVJBTCI+YnN0YXRlPC92YXI+IGlzIHRoZSBtYWluIHZhcmlhYmxlIHdlCithcmUgaW50ZXJlc3RlZCBpbi4gSXQgdGVsbHMgdGhlIGJ1dHRvbiBzdGF0ZSBvZiB0aGUgbW91c2UuPC9wPgorPHA+VGhlbiB3aXRoIGEgY29kZSBzbmlwcGV0IGxpa2UgdGhlIGZvbGxvd2luZywgd2UgY2FuIGZpbmQgb3V0Cit3aGF0IGhhcHBlbmVkLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgaWYoZXZlbnQuYnN0YXRlICZhbXA7IEJVVFRPTjFfUFJFU1NFRCkKKyAgICAgICAgcHJpbnR3KCJMZWZ0IEJ1dHRvbiBQcmVzc2VkIik7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJNT1VTRVRPR0VUSEVSIiBpZD0iTU9VU0VUT0dFVEhFUiI+MTIuMy4KK1B1dHRpbmcgaXQgYWxsIFRvZ2V0aGVyPC9hPjwvaDM+Cis8cD5UaGF0J3MgcHJldHR5IG11Y2ggaW50ZXJmYWNpbmcgd2l0aCBtb3VzZS4gTGV0J3MgY3JlYXRlIHRoZSBzYW1lCittZW51IGFuZCBlbmFibGUgbW91c2UgaW50ZXJhY3Rpb24uIFRvIG1ha2UgdGhpbmdzIHNpbXBsZXIsIGtleQoraGFuZGxpbmcgaXMgcmVtb3ZlZC48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCTU9NRSIgaWQ9IkJNT01FIj48L2E+Cis8cD48Yj5FeGFtcGxlIDExLiBBY2Nlc3MgdGhlIG1lbnUgd2l0aCBtb3VzZSAhISE8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworCisjZGVmaW5lIFdJRFRIIDMwCisjZGVmaW5lIEhFSUdIVCAxMCAKKworaW50IHN0YXJ0eCA9IDA7CitpbnQgc3RhcnR5ID0gMDsKKworY2hhciAqY2hvaWNlc1tdID0geyAgICAgIkNob2ljZSAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0IiwKKyAgICAgICAgICAgICAgICAgIH07CisKK2ludCBuX2Nob2ljZXMgPSBzaXplb2YoY2hvaWNlcykgLyBzaXplb2YoY2hhciAqKTsKKwordm9pZCBwcmludF9tZW51KFdJTkRPVyAqbWVudV93aW4sIGludCBoaWdobGlnaHQpOwordm9pZCByZXBvcnRfY2hvaWNlKGludCBtb3VzZV94LCBpbnQgbW91c2VfeSwgaW50ICpwX2Nob2ljZSk7CisKK2ludCBtYWluKCkKK3sgICAgICAgaW50IGMsIGNob2ljZSA9IDA7CisgICAgICAgIFdJTkRPVyAqbWVudV93aW47CisgICAgICAgIE1FVkVOVCBldmVudDsKKworICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBjYnJlYWsoKTsgICAgICAgLy9MaW5lIGJ1ZmZlcmluZyBkaXNhYmxlZC4gcGFzcyBvbiBldmVyeXRoaW5nCisKKyAgICAgICAgLyogVHJ5IHRvIHB1dCB0aGUgd2luZG93IGluIHRoZSBtaWRkbGUgb2Ygc2NyZWVuICovCisgICAgICAgIHN0YXJ0eCA9ICg4MCAtIFdJRFRIKSAvIDI7CisgICAgICAgIHN0YXJ0eSA9ICgyNCAtIEhFSUdIVCkgLyAyOworICAgICAgICAKKyAgICAgICAgYXR0cm9uKEFfUkVWRVJTRSk7CisgICAgICAgIG12cHJpbnR3KDIzLCAxLCAiQ2xpY2sgb24gRXhpdCB0byBxdWl0IChXb3JrcyBiZXN0IGluIGEgdmlydHVhbCBjb25zb2xlKSIpOworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIGF0dHJvZmYoQV9SRVZFUlNFKTsKKworICAgICAgICAvKiBQcmludCB0aGUgbWVudSBmb3IgdGhlIGZpcnN0IHRpbWUgKi8KKyAgICAgICAgbWVudV93aW4gPSBuZXd3aW4oSEVJR0hULCBXSURUSCwgc3RhcnR5LCBzdGFydHgpOworICAgICAgICBwcmludF9tZW51KG1lbnVfd2luLCAxKTsKKyAgICAgICAgLyogR2V0IGFsbCB0aGUgbW91c2UgZXZlbnRzICovCisgICAgICAgIG1vdXNlbWFzayhBTExfTU9VU0VfRVZFTlRTLCBOVUxMKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlKDEpCisgICAgICAgIHsgICAgICAgYyA9IHdnZXRjaChtZW51X3dpbik7CisgICAgICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9NT1VTRToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGdldG1vdXNlKCZhbXA7ZXZlbnQpID09IE9LKQorICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAvKiBXaGVuIHRoZSB1c2VyIGNsaWNrcyBsZWZ0IG1vdXNlIGJ1dHRvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihldmVudC5ic3RhdGUgJmFtcDsgQlVUVE9OMV9QUkVTU0VEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIHJlcG9ydF9jaG9pY2UoZXZlbnQueCArIDEsIGV2ZW50LnkgKyAxLCAmYW1wO2Nob2ljZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hvaWNlID09IC0xKSAvL0V4aXQgY2hvc2VuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdnByaW50dygyMiwgMSwgIkNob2ljZSBtYWRlIGlzIDogJWQgU3RyaW5nIENob3NlbiBpcyBcIiUxMHNcIiIsIGNob2ljZSwgY2hvaWNlc1tjaG9pY2UgLSAxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCgpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfbWVudShtZW51X3dpbiwgY2hvaWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgICAgICAgIAorZW5kOgorICAgICAgICBlbmR3aW4oKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBwcmludF9tZW51KFdJTkRPVyAqbWVudV93aW4sIGludCBoaWdobGlnaHQpCit7CisgICAgICAgIGludCB4LCB5LCBpOyAgICAKKworICAgICAgICB4ID0gMjsKKyAgICAgICAgeSA9IDI7CisgICAgICAgIGJveChtZW51X3dpbiwgMCwgMCk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICB7ICAgICAgIGlmKGhpZ2hsaWdodCA9PSBpICsgMSkKKyAgICAgICAgICAgICAgICB7ICAgICAgIHdhdHRyb24obWVudV93aW4sIEFfUkVWRVJTRSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgbXZ3cHJpbnR3KG1lbnVfd2luLCB5LCB4LCAiJXMiLCBjaG9pY2VzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhdHRyb2ZmKG1lbnVfd2luLCBBX1JFVkVSU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtdndwcmludHcobWVudV93aW4sIHksIHgsICIlcyIsIGNob2ljZXNbaV0pOworICAgICAgICAgICAgICAgICsreTsKKyAgICAgICAgfQorICAgICAgICB3cmVmcmVzaChtZW51X3dpbik7Cit9CisKKy8qIFJlcG9ydCB0aGUgY2hvaWNlIGFjY29yZGluZyB0byBtb3VzZSBwb3NpdGlvbiAqLwordm9pZCByZXBvcnRfY2hvaWNlKGludCBtb3VzZV94LCBpbnQgbW91c2VfeSwgaW50ICpwX2Nob2ljZSkKK3sgICAgICAgaW50IGksaiwgY2hvaWNlOworCisgICAgICAgIGkgPSBzdGFydHggKyAyOworICAgICAgICBqID0gc3RhcnR5ICsgMzsKKyAgICAgICAgCisgICAgICAgIGZvcihjaG9pY2UgPSAwOyBjaG9pY2UgJmx0OyBuX2Nob2ljZXM7ICsrY2hvaWNlKQorICAgICAgICAgICAgICAgIGlmKG1vdXNlX3kgPT0gaiArIGNob2ljZSAmYW1wOyZhbXA7IG1vdXNlX3ggJmd0Oz0gaSAmYW1wOyZhbXA7IG1vdXNlX3ggJmx0Oz0gaSArIHN0cmxlbihjaG9pY2VzW2Nob2ljZV0pKQorICAgICAgICAgICAgICAgIHsgICAgICAgaWYoY2hvaWNlID09IG5fY2hvaWNlcyAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwX2Nob2ljZSA9IC0xOyAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcF9jaG9pY2UgPSBjaG9pY2UgKyAxOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1JU0NNT1VTRUZVTkNTIiBpZD0KKyJNSVNDTU9VU0VGVU5DUyI+MTIuNC4gTWlzY2VsbGFuZW91cyBGdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZSBmdW5jdGlvbnMgbW91c2VfdHJhZm8oKSBhbmQgd21vdXNlX3RyYWZvKCkgY2FuIGJlIHVzZWQgdG8KK2NvbnZlcnQgdG8gbW91c2UgY28tb3JkaW5hdGVzIHRvIHNjcmVlbiByZWxhdGl2ZSBjby1vcmRpbmF0ZXMuIFNlZQorY3Vyc19tb3VzZSgzWCkgbWFuIHBhZ2UgZm9yIGRldGFpbHMuPC9wPgorPHA+VGhlIG1vdXNlaW50ZXJ2YWwgZnVuY3Rpb24gc2V0cyB0aGUgbWF4aW11bSB0aW1lIChpbiB0aG91c2FuZHMKK29mIGEgc2Vjb25kKSB0aGF0IGNhbiBlbGFwc2UgYmV0d2VlbiBwcmVzcyBhbmQgcmVsZWFzZSBldmVudHMgaW4KK29yZGVyIGZvciB0aGVtIHRvIGJlIHJlY29nbml6ZWQgYXMgYSBjbGljay4gVGhpcyBmdW5jdGlvbiByZXR1cm5zCit0aGUgcHJldmlvdXMgaW50ZXJ2YWwgdmFsdWUuIFRoZSBkZWZhdWx0IGlzIG9uZSBmaWZ0aCBvZiBhCitzZWNvbmQuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IlNDUkVFTiIgaWQ9IlNDUkVFTiI+MTMuIFNjcmVlbgorTWFuaXB1bGF0aW9uPC9hPjwvaDI+Cis8cD5JbiB0aGlzIHNlY3Rpb24sIHdlIHdpbGwgbG9vayBpbnRvIHNvbWUgZnVuY3Rpb25zLCB3aGljaCBhbGxvdwordXMgdG8gbWFuYWdlIHRoZSBzY3JlZW4gZWZmaWNpZW50bHkgYW5kIHRvIHdyaXRlIHNvbWUgZmFuY3kKK3Byb2dyYW1zLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIHdyaXRpbmcgZ2FtZXMuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iR0VUWVgiIGlkPSJHRVRZWCI+MTMuMS4gZ2V0eXgoKQorZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGUgZnVuY3Rpb24gPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0eXgoKTwvdmFyPiBjYW4gYmUgdXNlZCB0bworZmluZCBvdXQgdGhlIHByZXNlbnQgY3Vyc29yIGNvLW9yZGluYXRlcy4gSXQgd2lsbCBmaWxsIHRoZSB2YWx1ZXMKK29mIHggYW5kIHkgY28tb3JkaW5hdGVzIGluIHRoZSBhcmd1bWVudHMgZ2l2ZW4gdG8gaXQuIFNpbmNlIGdldHl4KCkKK2lzIGEgbWFjcm8geW91IGRvbid0IGhhdmUgdG8gcGFzcyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGVzLiBJdAorY2FuIGJlIGNhbGxlZCBhczwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICAvKiB3aW46IHdpbmRvdyBwb2ludGVyCisgICAgICogICB5LCB4OiB5LCB4IGNvLW9yZGluYXRlcyB3aWxsIGJlIHB1dCBpbnRvIHRoaXMgdmFyaWFibGVzIAorICAgICAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBmdW5jdGlvbiBnZXRwYXJ5eCgpIGdldHMgdGhlIGJlZ2lubmluZyBjby1vcmRpbmF0ZXMgb2YgdGhlCitzdWIgd2luZG93IHJlbGF0aXZlIHRvIHRoZSBtYWluIHdpbmRvdy4gVGhpcyBpcyBzb21lIHRpbWVzIHVzZWZ1bAordG8gdXBkYXRlIGEgc3ViIHdpbmRvdy4gV2hlbiBkZXNpZ25pbmcgZmFuY3kgc3R1ZmYgbGlrZSB3cml0aW5nCittdWx0aXBsZSBtZW51cywgaXQgYmVjb21lcyBkaWZmaWN1bHQgdG8gc3RvcmUgdGhlIG1lbnUgcG9zaXRpb25zLAordGhlaXIgZmlyc3Qgb3B0aW9uIGNvLW9yZGluYXRlcyBldGMuIEEgc2ltcGxlIHNvbHV0aW9uIHRvIHRoaXMKK3Byb2JsZW0sIGlzIHRvIGNyZWF0ZSBtZW51cyBpbiBzdWIgd2luZG93cyBhbmQgbGF0ZXIgZmluZCB0aGUKK3N0YXJ0aW5nIGNvLW9yZGluYXRlcyBvZiB0aGUgbWVudXMgYnkgdXNpbmcgZ2V0cGFyeXgoKS48L3A+Cis8cD5UaGUgZnVuY3Rpb25zIGdldGJlZ3l4KCkgYW5kIGdldG1heHl4KCkgc3RvcmUgY3VycmVudCB3aW5kb3cncworYmVnaW5uaW5nIGFuZCBtYXhpbXVtIGNvLW9yZGluYXRlcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VmdWwgaW4KK3RoZSBzYW1lIHdheSBhcyBhYm92ZSBpbiBtYW5hZ2luZyB0aGUgd2luZG93cyBhbmQgc3ViIHdpbmRvd3MKK2VmZmVjdGl2ZWx5LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iU0NSRUVORFVNUCIgaWQ9IlNDUkVFTkRVTVAiPjEzLjIuIFNjcmVlbgorRHVtcGluZzwvYT48L2gzPgorPHA+V2hpbGUgd3JpdGluZyBnYW1lcywgc29tZSB0aW1lcyBpdCBiZWNvbWVzIG5lY2Vzc2FyeSB0byBzdG9yZQordGhlIHN0YXRlIG9mIHRoZSBzY3JlZW4gYW5kIHJlc3RvcmUgaXQgYmFjayB0byB0aGUgc2FtZSBzdGF0ZS4gVGhlCitmdW5jdGlvbiBzY3JfZHVtcCgpIGNhbiBiZSB1c2VkIHRvIGR1bXAgdGhlIHNjcmVlbiBjb250ZW50cyB0byBhCitmaWxlIGdpdmVuIGFzIGFuIGFyZ3VtZW50LiBMYXRlciBpdCBjYW4gYmUgcmVzdG9yZWQgYnkgc2NyX3Jlc3RvcmUKK2Z1bmN0aW9uLiBUaGVzZSB0d28gc2ltcGxlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBlZmZlY3RpdmVseSB0bworbWFpbnRhaW4gYSBmYXN0IG1vdmluZyBnYW1lIHdpdGggY2hhbmdpbmcgc2NlbmFyaW9zLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iV0lORE9XRFVNUCIgaWQ9IldJTkRPV0RVTVAiPjEzLjMuIFdpbmRvdworRHVtcGluZzwvYT48L2gzPgorPHA+VG8gc3RvcmUgYW5kIHJlc3RvcmUgd2luZG93cywgdGhlIGZ1bmN0aW9ucyA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnB1dHdpbigpPC92YXI+IGFuZCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXR3aW4oKTwvdmFyPgorY2FuIGJlIHVzZWQuIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnB1dHdpbigpPC92YXI+IHB1dHMgdGhlIHByZXNlbnQKK3dpbmRvdyBzdGF0ZSBpbnRvIGEgZmlsZSwgd2hpY2ggY2FuIGJlIGxhdGVyIHJlc3RvcmVkIGJ5Cis8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXR3aW4oKTwvdmFyPi48L3A+Cis8cD5UaGUgZnVuY3Rpb24gPHZhciBjbGFzcz0iTElURVJBTCI+Y29weXdpbigpPC92YXI+IGNhbiBiZSB1c2VkIHRvCitjb3B5IGEgd2luZG93IGNvbXBsZXRlbHkgb250byBhbm90aGVyIHdpbmRvdy4gSXQgdGFrZXMgdGhlIHNvdXJjZQorYW5kIGRlc3RpbmF0aW9uIHdpbmRvd3MgYXMgcGFyYW1ldGVycyBhbmQgYWNjb3JkaW5nIHRvIHRoZQorcmVjdGFuZ2xlIHNwZWNpZmllZCwgaXQgY29waWVzIHRoZSByZWN0YW5ndWxhciByZWdpb24gZnJvbSBzb3VyY2UKK3RvIGRlc3RpbmF0aW9uIHdpbmRvdy4gSXQncyBsYXN0IHBhcmFtZXRlciBzcGVjaWZpZXMgd2hldGhlciB0bworb3ZlcndyaXRlIG9yIGp1c3Qgb3ZlcmxheSB0aGUgY29udGVudHMgb24gdG8gdGhlIGRlc3RpbmF0aW9uCit3aW5kb3cuIElmIHRoaXMgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlbiB0aGUgY29weWluZyBpcworbm9uLWRlc3RydWN0aXZlLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJNSVNDIiBpZD0iTUlTQyI+MTQuIE1pc2NlbGxhbmVvdXMKK2ZlYXR1cmVzPC9hPjwvaDI+Cis8cD5Ob3cgeW91IGtub3cgZW5vdWdoIGZlYXR1cmVzIHRvIHdyaXRlIGEgZ29vZCBjdXJzZXMgcHJvZ3JhbSwKK3dpdGggYWxsIGJlbGxzIGFuZCB3aGlzdGxlcy4gVGhlcmUgYXJlIHNvbWUgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMKK3doaWNoIGFyZSB1c2VmdWwgaW4gdmFyaW91cyBjYXNlcy4gTGV0J3MgZ28gaGVhZGxvbmcgaW50byBzb21lIG9mCit0aG9zZS48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJDVVJTU0VUIiBpZD0iQ1VSU1NFVCI+MTQuMS4KK2N1cnNfc2V0KCk8L2E+PC9oMz4KKzxwPlRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbWFrZSB0aGUgY3Vyc29yIGludmlzaWJsZS4gVGhlCitwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmU8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIDAgOiBpbnZpc2libGUgICAgICBvcgorICAgIDEgOiBub3JtYWwgICAgb3IKKyAgICAyIDogdmVyeSB2aXNpYmxlLjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iVEVNUExFQVZFIiBpZD0iVEVNUExFQVZFIj4xNC4yLgorVGVtcG9yYXJpbHkgTGVhdmluZyBDdXJzZXMgbW9kZTwvYT48L2gzPgorPHA+U29tZSB0aW1lcyB5b3UgbWF5IHdhbnQgdG8gZ2V0IGJhY2sgdG8gY29va2VkIG1vZGUgKG5vcm1hbCBsaW5lCitidWZmZXJpbmcgbW9kZSkgdGVtcG9yYXJpbHkuIEluIHN1Y2ggYSBjYXNlIHlvdSB3aWxsIGZpcnN0IG5lZWQgdG8KK3NhdmUgdGhlIHR0eSBtb2RlcyB3aXRoIGEgY2FsbCB0byA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmRlZl9wcm9nX21vZGUoKTwvdmFyPiBhbmQgdGhlbiBjYWxsIDx2YXIgY2xhc3M9CisiTElURVJBTCI+ZW5kd2luKCk8L3Zhcj4gdG8gZW5kIHRoZSBjdXJzZXMgbW9kZS4gVGhpcyB3aWxsIGxlYXZlCit5b3UgaW4gdGhlIG9yaWdpbmFsIHR0eSBtb2RlLiBUbyBnZXQgYmFjayB0byBjdXJzZXMgb25jZSB5b3UgYXJlCitkb25lLCBjYWxsIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnJlc2V0X3Byb2dfbW9kZSgpPC92YXI+IC4gVGhpcworZnVuY3Rpb24gcmV0dXJucyB0aGUgdHR5IHRvIHRoZSBzdGF0ZSBzdG9yZWQgYnkgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5kZWZfcHJvZ19tb2RlKCk8L3Zhcj4uIFRoZW4gZG8gcmVmcmVzaCgpLCBhbmQgeW91IGFyZQorYmFjayB0byB0aGUgY3Vyc2VzIG1vZGUuIEhlcmUgaXMgYW4gZXhhbXBsZSBzaG93aW5nIHRoZSBzZXF1ZW5jZSBvZgordGhpbmdzIHRvIGJlIGRvbmUuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iQlRFTEUiIGlkPSJCVEVMRSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxMi4gVGVtcG9yYXJpbHkgTGVhdmluZyBDdXJzZXMgTW9kZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sgICAgICAgCisgICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAgICovCisgICAgICAgIHByaW50dygiSGVsbG8gV29ybGQgISEhXG4iKTsgICAgLyogUHJpbnQgSGVsbG8gV29ybGQgICAgICAgICAgICAgICovCisgICAgICAgIHJlZnJlc2goKTsgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgaXQgb24gdG8gdGhlIHJlYWwgc2NyZWVuICovCisgICAgICAgIGRlZl9wcm9nX21vZGUoKTsgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGUgdHR5IG1vZGVzICAgICAgICAgICAgICovCisgICAgICAgIGVuZHdpbigpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIGN1cnNlcyBtb2RlIHRlbXBvcmFyaWx5ICAgICovCisgICAgICAgIHN5c3RlbSgiL2Jpbi9zaCIpOyAgICAgICAgICAgICAgLyogRG8gd2hhdGV2ZXIgeW91IGxpa2UgaW4gY29va2VkIG1vZGUgKi8KKyAgICAgICAgcmVzZXRfcHJvZ19tb2RlKCk7ICAgICAgICAgICAgICAvKiBSZXR1cm4gdG8gdGhlIHByZXZpb3VzIHR0eSBtb2RlKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZWQgYnkgZGVmX3Byb2dfbW9kZSgpICAgICAgKi8KKyAgICAgICAgcmVmcmVzaCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBEbyByZWZyZXNoKCkgdG8gcmVzdG9yZSB0aGUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gY29udGVudHMgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgcHJpbnR3KCJBbm90aGVyIFN0cmluZ1xuIik7ICAgICAvKiBCYWNrIHRvIGN1cnNlcyB1c2UgdGhlIGZ1bGwgICAgKi8KKyAgICAgICAgcmVmcmVzaCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBjYXBhYmlsaXRpZXMgb2YgY3Vyc2VzICAgICAgICAgKi8KKyAgICAgICAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gMDsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkFDU1ZBUlMiIGlkPSJBQ1NWQVJTIj4xNC4zLiBBQ1NfCit2YXJpYWJsZXM8L2E+PC9oMz4KKzxwPklmIHlvdSBoYXZlIGV2ZXIgcHJvZ3JhbW1lZCBpbiBET1MsIHlvdSBrbm93IGFib3V0IHRob3NlIG5pZnR5CitjaGFyYWN0ZXJzIGluIGV4dGVuZGVkIGNoYXJhY3RlciBzZXQuIFRoZXkgYXJlIHByaW50YWJsZSBvbmx5IG9uCitzb21lIHRlcm1pbmFscy4gTkNVUlNFUyBmdW5jdGlvbnMgbGlrZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmJveCgpPC92YXI+IHVzZSB0aGVzZSBjaGFyYWN0ZXJzLiBBbGwgdGhlc2UgdmFyaWFibGVzCitzdGFydCB3aXRoIEFDUyBtZWFuaW5nIGFsdGVybmF0aXZlIGNoYXJhY3RlciBzZXQuIFlvdSBtaWdodCBoYXZlCitub3RpY2VkIG1lIHVzaW5nIHRoZXNlIGNoYXJhY3RlcnMgaW4gc29tZSBvZiB0aGUgcHJvZ3JhbXMgYWJvdmUuCitIZXJlJ3MgYW4gZXhhbXBsZSBzaG93aW5nIGFsbCB0aGUgY2hhcmFjdGVycy48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCQUNTVkFSUyIgaWQ9IkJBQ1NWQVJTIj48L2E+Cis8cD48Yj5FeGFtcGxlIDEzLiBBQ1MgVmFyaWFibGVzIEV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OworCitpbnQgbWFpbigpCit7CisgICAgICAgIGluaXRzY3IoKTsKKworICAgICAgICBwcmludHcoIlVwcGVyIGxlZnQgY29ybmVyICAgICAgICAgICAiKTsgYWRkY2goQUNTX1VMQ09STkVSKTsgcHJpbnR3KCJcbiIpOyAKKyAgICAgICAgcHJpbnR3KCJMb3dlciBsZWZ0IGNvcm5lciAgICAgICAgICAgIik7IGFkZGNoKEFDU19MTENPUk5FUik7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJMb3dlciByaWdodCBjb3JuZXIgICAgICAgICAgIik7IGFkZGNoKEFDU19MUkNPUk5FUik7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJUZWUgcG9pbnRpbmcgcmlnaHQgICAgICAgICAgIik7IGFkZGNoKEFDU19MVEVFKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlRlZSBwb2ludGluZyBsZWZ0ICAgICAgICAgICAiKTsgYWRkY2goQUNTX1JURUUpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiVGVlIHBvaW50aW5nIHVwICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfQlRFRSk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJUZWUgcG9pbnRpbmcgZG93biAgICAgICAgICAgIik7IGFkZGNoKEFDU19UVEVFKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkhvcml6b250YWwgbGluZSAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX0hMSU5FKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlZlcnRpY2FsIGxpbmUgICAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX1ZMSU5FKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkxhcmdlIFBsdXMgb3IgY3Jvc3Mgb3ZlciAgICAiKTsgYWRkY2goQUNTX1BMVVMpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiU2NhbiBMaW5lIDEgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfUzEpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiU2NhbiBMaW5lIDMgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfUzMpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiU2NhbiBMaW5lIDcgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfUzcpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiU2NhbiBMaW5lIDkgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfUzkpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiRGlhbW9uZCAgICAgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfRElBTU9ORCk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJDaGVja2VyIGJvYXJkIChzdGlwcGxlKSAgICAgIik7IGFkZGNoKEFDU19DS0JPQVJEKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkRlZ3JlZSBTeW1ib2wgICAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX0RFR1JFRSk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJQbHVzL01pbnVzIFN5bWJvbCAgICAgICAgICAgIik7IGFkZGNoKEFDU19QTE1JTlVTKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkJ1bGxldCAgICAgICAgICAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX0JVTExFVCk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJBcnJvdyBQb2ludGluZyBMZWZ0ICAgICAgICAgIik7IGFkZGNoKEFDU19MQVJST1cpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiQXJyb3cgUG9pbnRpbmcgUmlnaHQgICAgICAgICIpOyBhZGRjaChBQ1NfUkFSUk9XKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkFycm93IFBvaW50aW5nIERvd24gICAgICAgICAiKTsgYWRkY2goQUNTX0RBUlJPVyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJBcnJvdyBQb2ludGluZyBVcCAgICAgICAgICAgIik7IGFkZGNoKEFDU19VQVJST1cpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiQm9hcmQgb2Ygc3F1YXJlcyAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfQk9BUkQpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiTGFudGVybiBTeW1ib2wgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfTEFOVEVSTik7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJTb2xpZCBTcXVhcmUgQmxvY2sgICAgICAgICAgIik7IGFkZGNoKEFDU19CTE9DSyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJMZXNzL0VxdWFsIHNpZ24gICAgICAgICAgICAgIik7IGFkZGNoKEFDU19MRVFVQUwpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiR3JlYXRlci9FcXVhbCBzaWduICAgICAgICAgICIpOyBhZGRjaChBQ1NfR0VRVUFMKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlBpICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX1BJKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIk5vdCBlcXVhbCAgICAgICAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX05FUVVBTCk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJVSyBwb3VuZCBzaWduICAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19TVEVSTElORyk7IHByaW50dygiXG4iKTsKKworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIGdldGNoKCk7CisgICAgICAgIGVuZHdpbigpOworCisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJPVEhFUkxJQiIgaWQ9Ik9USEVSTElCIj4xNS4gT3RoZXIKK2xpYnJhcmllczwvYT48L2gyPgorPHA+QXBhcnQgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnksIHRoZXJlIGFyZSBmZXcgdGV4dCBtb2RlCitsaWJyYXJpZXMsIHdoaWNoIHByb3ZpZGUgbW9yZSBmdW5jdGlvbmFsaXR5IGFuZCBhIGxvdCBvZiBmZWF0dXJlcy4KK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZXhwbGFpbiB0aHJlZSBzdGFuZGFyZCBsaWJyYXJpZXMgd2hpY2ggYXJlCit1c3VhbGx5IGRpc3RyaWJ1dGVkIGFsb25nIHdpdGggY3Vyc2VzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iUEFORUxTIiBpZD0iUEFORUxTIj4xNi4gUGFuZWwKK0xpYnJhcnk8L2E+PC9oMj4KKzxwPk5vdyB0aGF0IHlvdSBhcmUgcHJvZmljaWVudCBpbiBjdXJzZXMsIHlvdSB3YW50ZWQgdG8gZG8gc29tZQordGhpbmcgYmlnLiBZb3UgY3JlYXRlZCBhIGxvdCBvZiBvdmVybGFwcGluZyB3aW5kb3dzIHRvIGdpdmUgYQorcHJvZmVzc2lvbmFsIHdpbmRvd3MtdHlwZSBsb29rLiBVbmZvcnR1bmF0ZWx5LCBpdCBzb29uIGJlY29tZXMKK2RpZmZpY3VsdCB0byBtYW5hZ2UgdGhlc2UuIFRoZSBtdWx0aXBsZSByZWZyZXNoZXMsIHVwZGF0ZXMgcGx1bmdlCit5b3UgaW50byBhIG5pZ2h0bWFyZS4gVGhlIG92ZXJsYXBwaW5nIHdpbmRvd3MgY3JlYXRlIGJsb3RjaGVzLAord2hlbmV2ZXIgeW91IGZvcmdldCB0byByZWZyZXNoIHRoZSB3aW5kb3dzIGluIHRoZSBwcm9wZXIgb3JkZXIuPC9wPgorPHA+RG9uJ3QgZGVzcGFpci4gVGhlcmUncyBhbiBlbGVnYW50IHNvbHV0aW9uIHByb3ZpZGVkIGluIHBhbmVscworbGlicmFyeS4gSW4gdGhlIHdvcmRzIG9mIGRldmVsb3BlcnMgb2YgbmN1cnNlczwvcD4KKzxwPjxlbT5XaGVuIHlvdXIgaW50ZXJmYWNlIGRlc2lnbiBpcyBzdWNoIHRoYXQgd2luZG93cyBtYXkgZGl2ZQorZGVlcGVyIGludG8gdGhlIHZpc2liaWxpdHkgc3RhY2sgb3IgcG9wIHRvIHRoZSB0b3AgYXQgcnVudGltZSwgdGhlCityZXN1bHRpbmcgYm9vay1rZWVwaW5nIGNhbiBiZSB0ZWRpb3VzIGFuZCBkaWZmaWN1bHQgdG8gZ2V0IHJpZ2h0LgorSGVuY2UgdGhlIHBhbmVscyBsaWJyYXJ5LjwvZW0+PC9wPgorPHA+SWYgeW91IGhhdmUgbG90IG9mIG92ZXJsYXBwaW5nIHdpbmRvd3MsIHRoZW4gcGFuZWxzIGxpYnJhcnkgaXMKK3RoZSB3YXkgdG8gZ28uIEl0IG9idmlhdGVzIHRoZSBuZWVkIG9mIGRvaW5nIHNlcmllcyBvZgord25vdXRyZWZyZXNoKCksIGRvdXBkYXRlKCkgYW5kIHJlbGlldmVzIHRoZSBidXJkZW4gb2YgZG9pbmcgaXQKK2NvcnJlY3RseShib3R0b20gdXApLiBUaGUgbGlicmFyeSBtYWludGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitvcmRlciBvZiB3aW5kb3dzLCB0aGVpciBvdmVybGFwcGluZyBhbmQgdXBkYXRlIHRoZSBzY3JlZW4gcHJvcGVybHkuCitTbyB3aHkgd2FpdD8gTGV0J3MgdGFrZSBhIGNsb3NlIHBlZWsgaW50byBwYW5lbHMuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUEFORUxCQVNJQ1MiIGlkPSJQQU5FTEJBU0lDUyI+MTYuMS4gVGhlCitCYXNpY3M8L2E+PC9oMz4KKzxwPlBhbmVsIG9iamVjdCBpcyBhIHdpbmRvdyB0aGF0IGlzIGltcGxpY2l0bHkgdHJlYXRlZCBhcyBwYXJ0IG9mIGEKK2RlY2sgaW5jbHVkaW5nIGFsbCBvdGhlciBwYW5lbCBvYmplY3RzLiBUaGUgZGVjayBpcyB0cmVhdGVkIGFzIGEKK3N0YWNrIHdpdGggdGhlIHRvcCBwYW5lbCBiZWluZyBjb21wbGV0ZWx5IHZpc2libGUgYW5kIHRoZSBvdGhlcgorcGFuZWxzIG1heSBvciBtYXkgbm90IGJlIG9ic2N1cmVkIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMuIFNvCit0aGUgYmFzaWMgaWRlYSBpcyB0byBjcmVhdGUgYSBzdGFjayBvZiBvdmVybGFwcGluZyBwYW5lbHMgYW5kIHVzZQorcGFuZWxzIGxpYnJhcnkgdG8gZGlzcGxheSB0aGVtIGNvcnJlY3RseS4gVGhlcmUgaXMgYSBmdW5jdGlvbgorc2ltaWxhciB0byByZWZyZXNoKCkgd2hpY2gsIHdoZW4gY2FsbGVkICwgZGlzcGxheXMgcGFuZWxzIGluIHRoZQorY29ycmVjdCBvcmRlci4gRnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBoaWRlIG9yIHNob3cgcGFuZWxzLCBtb3ZlCitwYW5lbHMsIGNoYW5nZSBpdHMgc2l6ZSBldGMuLiBUaGUgb3ZlcmxhcHBpbmcgcHJvYmxlbSBpcyBtYW5hZ2VkIGJ5Cit0aGUgcGFuZWxzIGxpYnJhcnkgZHVyaW5nIGFsbCB0aGUgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zLjwvcD4KKzxwPlRoZSBnZW5lcmFsIGZsb3cgb2YgYSBwYW5lbCBwcm9ncmFtIGdvZXMgbGlrZSB0aGlzOjwvcD4KKzxvbCB0eXBlPSIxIj4KKzxsaT4KKzxwPkNyZWF0ZSB0aGUgd2luZG93cyAod2l0aCBuZXd3aW4oKSkgdG8gYmUgYXR0YWNoZWQgdG8gdGhlCitwYW5lbHMuPC9wPgorPC9saT4KKzxsaT4KKzxwPkNyZWF0ZSBwYW5lbHMgd2l0aCB0aGUgY2hvc2VuIHZpc2liaWxpdHkgb3JkZXIuIFN0YWNrIHRoZW0gdXAKK2FjY29yZGluZyB0byB0aGUgZGVzaXJlZCB2aXNpYmlsaXR5LiBUaGUgZnVuY3Rpb24gbmV3X3BhbmVsKCkgaXMKK3VzZWQgdG8gY3JlYXRlZCBwYW5lbHMuPC9wPgorPC9saT4KKzxsaT4KKzxwPkNhbGwgdXBkYXRlX3BhbmVscygpIHRvIHdyaXRlIHRoZSBwYW5lbHMgdG8gdGhlIHZpcnR1YWwgc2NyZWVuCitpbiBjb3JyZWN0IHZpc2liaWxpdHkgb3JkZXIuIERvIGEgZG91cGRhdGUoKSB0byBzaG93IGl0IG9uIHRoZQorc2NyZWVuLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5NYWlucHVsYXRlIHRoZSBwYW5lbHMgd2l0aCBzaG93X3BhbmVsKCksIGhpZGVfcGFuZWwoKSwKK21vdmVfcGFuZWwoKSBldGMuIE1ha2UgdXNlIG9mIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBwYW5lbF9oaWRkZW4oKQorYW5kIHBhbmVsX3dpbmRvdygpLiBNYWtlIHVzZSBvZiB1c2VyIHBvaW50ZXIgdG8gc3RvcmUgY3VzdG9tIGRhdGEKK2ZvciBhIHBhbmVsLiBVc2UgdGhlIGZ1bmN0aW9ucyBzZXRfcGFuZWxfdXNlcnB0cigpIGFuZAorcGFuZWxfdXNlcnB0cigpIHRvIHNldCBhbmQgZ2V0IHRoZSB1c2VyIHBvaW50ZXIgZm9yIGEgcGFuZWwuPC9wPgorPC9saT4KKzxsaT4KKzxwPldoZW4geW91IGFyZSBkb25lIHdpdGggdGhlIHBhbmVsIHVzZSBkZWxfcGFuZWwoKSB0byBkZWxldGUgdGhlCitwYW5lbC48L3A+Cis8L2xpPgorPC9vbD4KKzxwPkxldCdzIG1ha2UgdGhlIGNvbmNlcHRzIGNsZWFyLCB3aXRoIHNvbWUgcHJvZ3JhbXMuIFRoZSBmb2xsb3dpbmcKK2lzIGEgc2ltcGxlIHByb2dyYW0gd2hpY2ggY3JlYXRlcyAzIG92ZXJsYXBwaW5nIHBhbmVscyBhbmQgc2hvd3MKK3RoZW0gb24gdGhlIHNjcmVlbi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNPTVBJTEVQQU5FTFMiIGlkPSJDT01QSUxFUEFORUxTIj4xNi4yLgorQ29tcGlsaW5nIFdpdGggdGhlIFBhbmVscyBMaWJyYXJ5PC9hPjwvaDM+Cis8cD5UbyB1c2UgcGFuZWxzIGxpYnJhcnkgZnVuY3Rpb25zLCB5b3UgaGF2ZSB0byBpbmNsdWRlIHBhbmVsLmggYW5kCit0byBsaW5rIHRoZSBwcm9ncmFtIHdpdGggcGFuZWxzIGxpYnJhcnkgdGhlIGZsYWcgLWxwYW5lbCBzaG91bGQgYmUKK2FkZGVkIGFsb25nIHdpdGggLWxuY3Vyc2VzIGluIHRoYXQgb3JkZXIuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICAjaW5jbHVkZSAmbHQ7cGFuZWwuaCZndDsKKyAgICAuCisgICAgLgorICAgIC4KKworICAgIGNvbXBpbGUgYW5kIGxpbms6IGdjYyAmbHQ7cHJvZ3JhbSBmaWxlJmd0OyAtbHBhbmVsIC1sbmN1cnNlczwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IlBQQVNJIiBpZD0iUFBBU0kiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMTQuIFBhbmVsIGJhc2ljczwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtwYW5lbC5oJmd0OworCitpbnQgbWFpbigpCit7ICAgICAgIFdJTkRPVyAqbXlfd2luc1szXTsKKyAgICAgICAgUEFORUwgICpteV9wYW5lbHNbM107CisgICAgICAgIGludCBsaW5lcyA9IDEwLCBjb2xzID0gNDAsIHkgPSAyLCB4ID0gNCwgaTsKKworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKworICAgICAgICAvKiBDcmVhdGUgd2luZG93cyBmb3IgdGhlIHBhbmVscyAqLworICAgICAgICBteV93aW5zWzBdID0gbmV3d2luKGxpbmVzLCBjb2xzLCB5LCB4KTsKKyAgICAgICAgbXlfd2luc1sxXSA9IG5ld3dpbihsaW5lcywgY29scywgeSArIDEsIHggKyA1KTsKKyAgICAgICAgbXlfd2luc1syXSA9IG5ld3dpbihsaW5lcywgY29scywgeSArIDIsIHggKyAxMCk7CisKKyAgICAgICAgLyogCisgICAgICAgICAqIENyZWF0ZSBib3JkZXJzIGFyb3VuZCB0aGUgd2luZG93cyBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZSBlZmZlY3QKKyAgICAgICAgICogb2YgcGFuZWxzCisgICAgICAgICAqLworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyAzOyArK2kpCisgICAgICAgICAgICAgICAgYm94KG15X3dpbnNbaV0sIDAsIDApOworCisgICAgICAgIC8qIEF0dGFjaCBhIHBhbmVsIHRvIGVhY2ggd2luZG93ICovICAgICAvKiBPcmRlciBpcyBib3R0b20gdXAgKi8KKyAgICAgICAgbXlfcGFuZWxzWzBdID0gbmV3X3BhbmVsKG15X3dpbnNbMF0pOyAgIC8qIFB1c2ggMCwgb3JkZXI6IHN0ZHNjci0wICovCisgICAgICAgIG15X3BhbmVsc1sxXSA9IG5ld19wYW5lbChteV93aW5zWzFdKTsgICAvKiBQdXNoIDEsIG9yZGVyOiBzdGRzY3ItMC0xICovCisgICAgICAgIG15X3BhbmVsc1syXSA9IG5ld19wYW5lbChteV93aW5zWzJdKTsgICAvKiBQdXNoIDIsIG9yZGVyOiBzdGRzY3ItMC0xLTIgKi8KKworICAgICAgICAvKiBVcGRhdGUgdGhlIHN0YWNraW5nIG9yZGVyLiAybmQgcGFuZWwgd2lsbCBiZSBvbiB0b3AgKi8KKyAgICAgICAgdXBkYXRlX3BhbmVscygpOworCisgICAgICAgIC8qIFNob3cgaXQgb24gdGhlIHNjcmVlbiAqLworICAgICAgICBkb3VwZGF0ZSgpOworICAgICAgICAKKyAgICAgICAgZ2V0Y2goKTsKKyAgICAgICAgZW5kd2luKCk7Cit9Cis8L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5BcyB5b3UgY2FuIHNlZSwgYWJvdmUgcHJvZ3JhbSBmb2xsb3dzIGEgc2ltcGxlIGZsb3cgYXMKK2V4cGxhaW5lZC4gVGhlIHdpbmRvd3MgYXJlIGNyZWF0ZWQgd2l0aCBuZXd3aW4oKSBhbmQgdGhlbiB0aGV5IGFyZQorYXR0YWNoZWQgdG8gcGFuZWxzIHdpdGggbmV3X3BhbmVsKCkuIEFzIHdlIGF0dGFjaCBvbmUgcGFuZWwgYWZ0ZXIKK2Fub3RoZXIsIHRoZSBzdGFjayBvZiBwYW5lbHMgZ2V0cyB1cGRhdGVkLiBUbyBwdXQgdGhlbSBvbiBzY3JlZW4KK3VwZGF0ZV9wYW5lbHMoKSBhbmQgZG91cGRhdGUoKSBhcmUgY2FsbGVkLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUEFORUxCUk9XU0lORyIgaWQ9IlBBTkVMQlJPV1NJTkciPjE2LjMuCitQYW5lbCBXaW5kb3cgQnJvd3Npbmc8L2E+PC9oMz4KKzxwPkEgc2xpZ2h0bHkgY29tcGxpY2F0ZWQgZXhhbXBsZSBpcyBnaXZlbiBiZWxvdy4gVGhpcyBwcm9ncmFtCitjcmVhdGVzIDMgd2luZG93cyB3aGljaCBjYW4gYmUgY3ljbGVkIHRocm91Z2ggdXNpbmcgdGFiLiBIYXZlIGEKK2xvb2sgYXQgdGhlIGNvZGUuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iUFBBQlIiIGlkPSJQUEFCUiI+PC9hPgorPHA+PGI+RXhhbXBsZSAxNS4gUGFuZWwgV2luZG93IEJyb3dzaW5nIEV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7cGFuZWwuaCZndDsKKworI2RlZmluZSBOTElORVMgMTAKKyNkZWZpbmUgTkNPTFMgNDAKKwordm9pZCBpbml0X3dpbnMoV0lORE9XICoqd2lucywgaW50IG4pOwordm9pZCB3aW5fc2hvdyhXSU5ET1cgKndpbiwgY2hhciAqbGFiZWwsIGludCBsYWJlbF9jb2xvcik7Cit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcik7CisKK2ludCBtYWluKCkKK3sgICAgICAgV0lORE9XICpteV93aW5zWzNdOworICAgICAgICBQQU5FTCAgKm15X3BhbmVsc1szXTsKKyAgICAgICAgUEFORUwgICp0b3A7CisgICAgICAgIGludCBjaDsKKworICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhbGwgdGhlIGNvbG9ycyAqLworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9HUkVFTiwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMywgQ09MT1JfQkxVRSwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoNCwgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworCisgICAgICAgIGluaXRfd2lucyhteV93aW5zLCAzKTsKKyAgICAgICAgCisgICAgICAgIC8qIEF0dGFjaCBhIHBhbmVsIHRvIGVhY2ggd2luZG93ICovICAgICAvKiBPcmRlciBpcyBib3R0b20gdXAgKi8KKyAgICAgICAgbXlfcGFuZWxzWzBdID0gbmV3X3BhbmVsKG15X3dpbnNbMF0pOyAgIC8qIFB1c2ggMCwgb3JkZXI6IHN0ZHNjci0wICovCisgICAgICAgIG15X3BhbmVsc1sxXSA9IG5ld19wYW5lbChteV93aW5zWzFdKTsgICAvKiBQdXNoIDEsIG9yZGVyOiBzdGRzY3ItMC0xICovCisgICAgICAgIG15X3BhbmVsc1syXSA9IG5ld19wYW5lbChteV93aW5zWzJdKTsgICAvKiBQdXNoIDIsIG9yZGVyOiBzdGRzY3ItMC0xLTIgKi8KKworICAgICAgICAvKiBTZXQgdXAgdGhlIHVzZXIgcG9pbnRlcnMgdG8gdGhlIG5leHQgcGFuZWwgKi8KKyAgICAgICAgc2V0X3BhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzBdLCBteV9wYW5lbHNbMV0pOworICAgICAgICBzZXRfcGFuZWxfdXNlcnB0cihteV9wYW5lbHNbMV0sIG15X3BhbmVsc1syXSk7CisgICAgICAgIHNldF9wYW5lbF91c2VycHRyKG15X3BhbmVsc1syXSwgbXlfcGFuZWxzWzBdKTsKKworICAgICAgICAvKiBVcGRhdGUgdGhlIHN0YWNraW5nIG9yZGVyLiAybmQgcGFuZWwgd2lsbCBiZSBvbiB0b3AgKi8KKyAgICAgICAgdXBkYXRlX3BhbmVscygpOworCisgICAgICAgIC8qIFNob3cgaXQgb24gdGhlIHNjcmVlbiAqLworICAgICAgICBhdHRyb24oQ09MT1JfUEFJUig0KSk7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIlVzZSB0YWIgdG8gYnJvd3NlIHRocm91Z2ggdGhlIHdpbmRvd3MgKEYxIHRvIEV4aXQpIik7CisgICAgICAgIGF0dHJvZmYoQ09MT1JfUEFJUig0KSk7CisgICAgICAgIGRvdXBkYXRlKCk7CisKKyAgICAgICAgdG9wID0gbXlfcGFuZWxzWzJdOworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IChQQU5FTCAqKXBhbmVsX3VzZXJwdHIodG9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX3BhbmVsKHRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1cGRhdGVfcGFuZWxzKCk7CisgICAgICAgICAgICAgICAgZG91cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBlbmR3aW4oKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIFB1dCBhbGwgdGhlIHdpbmRvd3MgKi8KK3ZvaWQgaW5pdF93aW5zKFdJTkRPVyAqKndpbnMsIGludCBuKQoreyAgICAgICBpbnQgeCwgeSwgaTsKKyAgICAgICAgY2hhciBsYWJlbFs4MF07CisKKyAgICAgICAgeSA9IDI7CisgICAgICAgIHggPSAxMDsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbjsgKytpKQorICAgICAgICB7ICAgICAgIHdpbnNbaV0gPSBuZXd3aW4oTkxJTkVTLCBOQ09MUywgeSwgeCk7CisgICAgICAgICAgICAgICAgc3ByaW50ZihsYWJlbCwgIldpbmRvdyBOdW1iZXIgJWQiLCBpICsgMSk7CisgICAgICAgICAgICAgICAgd2luX3Nob3cod2luc1tpXSwgbGFiZWwsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICB5ICs9IDM7CisgICAgICAgICAgICAgICAgeCArPSA3OworICAgICAgICB9Cit9CisKKy8qIFNob3cgdGhlIHdpbmRvdyB3aXRoIGEgYm9yZGVyIGFuZCBhIGxhYmVsICovCit2b2lkIHdpbl9zaG93KFdJTkRPVyAqd2luLCBjaGFyICpsYWJlbCwgaW50IGxhYmVsX2NvbG9yKQoreyAgICAgICBpbnQgc3RhcnR4LCBzdGFydHksIGhlaWdodCwgd2lkdGg7CisKKyAgICAgICAgZ2V0YmVneXgod2luLCBzdGFydHksIHN0YXJ0eCk7CisgICAgICAgIGdldG1heHl4KHdpbiwgaGVpZ2h0LCB3aWR0aCk7CisKKyAgICAgICAgYm94KHdpbiwgMCwgMCk7CisgICAgICAgIG12d2FkZGNoKHdpbiwgMiwgMCwgQUNTX0xURUUpOyAKKyAgICAgICAgbXZ3aGxpbmUod2luLCAyLCAxLCBBQ1NfSExJTkUsIHdpZHRoIC0gMik7IAorICAgICAgICBtdndhZGRjaCh3aW4sIDIsIHdpZHRoIC0gMSwgQUNTX1JURUUpOyAKKyAgICAgICAgCisgICAgICAgIHByaW50X2luX21pZGRsZSh3aW4sIDEsIDAsIHdpZHRoLCBsYWJlbCwgQ09MT1JfUEFJUihsYWJlbF9jb2xvcikpOworfQorCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcikKK3sgICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKyAgICAgICAgZmxvYXQgdGVtcDsKKworICAgICAgICBpZih3aW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3aW4gPSBzdGRzY3I7CisgICAgICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgICAgIGlmKHN0YXJ0eCAhPSAwKQorICAgICAgICAgICAgICAgIHggPSBzdGFydHg7CisgICAgICAgIGlmKHN0YXJ0eSAhPSAwKQorICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7CisgICAgICAgIGlmKHdpZHRoID09IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkvIDI7CisgICAgICAgIHggPSBzdGFydHggKyAoaW50KXRlbXA7CisgICAgICAgIHdhdHRyb24od2luLCBjb2xvcik7CisgICAgICAgIG12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7CisgICAgICAgIHdhdHRyb2ZmKHdpbiwgY29sb3IpOworICAgICAgICByZWZyZXNoKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJVU0VSUFRSVVNJTkciIGlkPSJVU0VSUFRSVVNJTkciPjE2LjQuCitVc2luZyBVc2VyIFBvaW50ZXJzPC9hPjwvaDM+Cis8cD5JbiB0aGUgYWJvdmUgZXhhbXBsZSBJIHVzZWQgdXNlciBwb2ludGVycyB0byBmaW5kIG91dCB0aGUgbmV4dAord2luZG93IGluIHRoZSBjeWNsZS4gV2UgY2FuIGF0dGFjaCBjdXN0b20gaW5mb3JtYXRpb24gdG8gdGhlIHBhbmVsCitieSBzcGVjaWZ5aW5nIGEgdXNlciBwb2ludGVyLCB3aGljaCBjYW4gcG9pbnQgdG8gYW55IGluZm9ybWF0aW9uCit5b3Ugd2FudCB0byBzdG9yZS4gSW4gdGhpcyBjYXNlIEkgc3RvcmVkIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0CitwYW5lbCBpbiB0aGUgY3ljbGUuIFVzZXIgcG9pbnRlciBmb3IgYSBwYW5lbCBjYW4gYmUgc2V0IHdpdGggdGhlCitmdW5jdGlvbiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5zZXRfcGFuZWxfdXNlcnB0cigpPC92YXI+LiBJdCBjYW4gYmUKK2FjY2Vzc2VkIHVzaW5nIHRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnBhbmVsX3VzZXJwdHIoKTwvdmFyPiB3aGljaCB3aWxsIHJldHVybiB0aGUgdXNlciBwb2ludGVyCitmb3IgdGhlIHBhbmVsIGdpdmVuIGFzIGFyZ3VtZW50LiBBZnRlciBmaW5kaW5nIHRoZSBuZXh0IHBhbmVsIGluCit0aGUgY3ljbGUgSXQncyBicm91Z2h0IHRvIHRoZSB0b3AgYnkgdGhlIGZ1bmN0aW9uIHRvcF9wYW5lbCgpLiBUaGlzCitmdW5jdGlvbiBicmluZ3MgdGhlIHBhbmVsIGdpdmVuIGFzIGFyZ3VtZW50IHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsCitzdGFjay48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlBBTkVMTU9WRVJFU0laRSIgaWQ9CisiUEFORUxNT1ZFUkVTSVpFIj4xNi41LiBNb3ZpbmcgYW5kIFJlc2l6aW5nIFBhbmVsczwvYT48L2gzPgorPHA+VGhlIGZ1bmN0aW9uIDx2YXIgY2xhc3M9IkxJVEVSQUwiPm1vdmVfcGFuZWwoKTwvdmFyPiBjYW4gYmUgdXNlZAordG8gbW92ZSBhIHBhbmVsIHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uLiBJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlCitwb3NpdGlvbiBvZiB0aGUgcGFuZWwgaW4gdGhlIHN0YWNrLiBNYWtlIHN1cmUgdGhhdCB5b3UgdXNlCittb3ZlX3BhbmVsKCkgaW5zdGVhZCBtdndpbigpIG9uIHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZQorcGFuZWwuPC9wPgorPHA+UmVzaXppbmcgYSBwYW5lbCBpcyBzbGlnaHRseSBjb21wbGV4LiBUaGVyZSBpcyBubyBzdHJhaWdodAorZm9yd2FyZCBmdW5jdGlvbiBqdXN0IHRvIHJlc2l6ZSB0aGUgd2luZG93IGFzc29jaWF0ZWQgd2l0aCBhIHBhbmVsLgorQSBzb2x1dGlvbiB0byByZXNpemUgYSBwYW5lbCBpcyB0byBjcmVhdGUgYSBuZXcgd2luZG93IHdpdGggdGhlCitkZXNpcmVkIHNpemVzLCBjaGFuZ2UgdGhlIHdpbmRvdyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhbmVsIHVzaW5nCityZXBsYWNlX3BhbmVsKCkuIERvbid0IGZvcmdldCB0byBkZWxldGUgdGhlIG9sZCB3aW5kb3cuIFRoZSB3aW5kb3cKK2Fzc29jaWF0ZWQgd2l0aCBhIHBhbmVsIGNhbiBiZSBmb3VuZCBieSB1c2luZyB0aGUgZnVuY3Rpb24KK3BhbmVsX3dpbmRvdygpLjwvcD4KKzxwPlRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBzaG93cyB0aGVzZSBjb25jZXB0cywgaW4gc3VwcG9zZWRseSBzaW1wbGUKK3Byb2dyYW0uIFlvdSBjYW4gY3ljbGUgdGhyb3VnaCB0aGUgd2luZG93IHdpdGggJmx0O1RBQiZndDsgYXMKK3VzdWFsLiBUbyByZXNpemUgb3IgbW92ZSB0aGUgYWN0aXZlIHBhbmVsIHByZXNzICdyJyBmb3IgcmVzaXplICdtJworZm9yIG1vdmluZy4gVGhlbiB1c2UgYXJyb3cga2V5cyB0byByZXNpemUgb3IgbW92ZSBpdCB0byB0aGUgZGVzaXJlZAord2F5IGFuZCBwcmVzcyBlbnRlciB0byBlbmQgeW91ciByZXNpemluZyBvciBtb3ZpbmcuIFRoaXMgZXhhbXBsZQorbWFrZXMgdXNlIG9mIHVzZXIgZGF0YSB0byBnZXQgdGhlIHJlcXVpcmVkIGRhdGEgdG8gZG8gdGhlCitvcGVyYXRpb25zLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IlBQQVJFIiBpZD0iUFBBUkUiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMTYuIFBhbmVsIE1vdmluZyBhbmQgUmVzaXppbmcgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtwYW5lbC5oJmd0OworCit0eXBlZGVmIHN0cnVjdCBfUEFORUxfREFUQSB7CisgICAgICAgIGludCB4LCB5LCB3LCBoOworICAgICAgICBjaGFyIGxhYmVsWzgwXTsgCisgICAgICAgIGludCBsYWJlbF9jb2xvcjsKKyAgICAgICAgUEFORUwgKm5leHQ7Cit9UEFORUxfREFUQTsKKworI2RlZmluZSBOTElORVMgMTAKKyNkZWZpbmUgTkNPTFMgNDAKKwordm9pZCBpbml0X3dpbnMoV0lORE9XICoqd2lucywgaW50IG4pOwordm9pZCB3aW5fc2hvdyhXSU5ET1cgKndpbiwgY2hhciAqbGFiZWwsIGludCBsYWJlbF9jb2xvcik7Cit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcik7Cit2b2lkIHNldF91c2VyX3B0cnMoUEFORUwgKipwYW5lbHMsIGludCBuKTsKKworaW50IG1haW4oKQoreyAgICAgICBXSU5ET1cgKm15X3dpbnNbM107CisgICAgICAgIFBBTkVMICAqbXlfcGFuZWxzWzNdOworICAgICAgICBQQU5FTF9EQVRBICAqdG9wOworICAgICAgICBQQU5FTCAqc3RhY2tfdG9wOworICAgICAgICBXSU5ET1cgKnRlbXBfd2luLCAqb2xkX3dpbjsKKyAgICAgICAgaW50IGNoOworICAgICAgICBpbnQgbmV3eCwgbmV3eSwgbmV3dywgbmV3aDsKKyAgICAgICAgaW50IHNpemUgPSBGQUxTRSwgbW92ZSA9IEZBTFNFOworCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGFsbCB0aGUgY29sb3JzICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0dSRUVOLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigzLCBDT0xPUl9CTFVFLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig0LCBDT0xPUl9DWUFOLCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgaW5pdF93aW5zKG15X3dpbnMsIDMpOworICAgICAgICAKKyAgICAgICAgLyogQXR0YWNoIGEgcGFuZWwgdG8gZWFjaCB3aW5kb3cgKi8gICAgIC8qIE9yZGVyIGlzIGJvdHRvbSB1cCAqLworICAgICAgICBteV9wYW5lbHNbMF0gPSBuZXdfcGFuZWwobXlfd2luc1swXSk7ICAgLyogUHVzaCAwLCBvcmRlcjogc3Rkc2NyLTAgKi8KKyAgICAgICAgbXlfcGFuZWxzWzFdID0gbmV3X3BhbmVsKG15X3dpbnNbMV0pOyAgIC8qIFB1c2ggMSwgb3JkZXI6IHN0ZHNjci0wLTEgKi8KKyAgICAgICAgbXlfcGFuZWxzWzJdID0gbmV3X3BhbmVsKG15X3dpbnNbMl0pOyAgIC8qIFB1c2ggMiwgb3JkZXI6IHN0ZHNjci0wLTEtMiAqLworCisgICAgICAgIHNldF91c2VyX3B0cnMobXlfcGFuZWxzLCAzKTsKKyAgICAgICAgLyogVXBkYXRlIHRoZSBzdGFja2luZyBvcmRlci4gMm5kIHBhbmVsIHdpbGwgYmUgb24gdG9wICovCisgICAgICAgIHVwZGF0ZV9wYW5lbHMoKTsKKworICAgICAgICAvKiBTaG93IGl0IG9uIHRoZSBzY3JlZW4gKi8KKyAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoNCkpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDMsIDAsICJVc2UgJ20nIGZvciBtb3ZpbmcsICdyJyBmb3IgcmVzaXppbmciKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXNlIHRhYiB0byBicm93c2UgdGhyb3VnaCB0aGUgd2luZG93cyAoRjEgdG8gRXhpdCkiKTsKKyAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgZG91cGRhdGUoKTsKKworICAgICAgICBzdGFja190b3AgPSBteV9wYW5lbHNbMl07CisgICAgICAgIHRvcCA9IChQQU5FTF9EQVRBICopcGFuZWxfdXNlcnB0cihzdGFja190b3ApOworICAgICAgICBuZXd4ID0gdG9wLSZndDt4OworICAgICAgICBuZXd5ID0gdG9wLSZndDt5OworICAgICAgICBuZXd3ID0gdG9wLSZndDt3OworICAgICAgICBuZXdoID0gdG9wLSZndDtoOworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIDk6ICAgICAgICAgLyogVGFiICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IChQQU5FTF9EQVRBICopcGFuZWxfdXNlcnB0cihzdGFja190b3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfcGFuZWwodG9wLSZndDtuZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfdG9wID0gdG9wLSZndDtuZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSAoUEFORUxfREFUQSAqKXBhbmVsX3VzZXJwdHIoc3RhY2tfdG9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3eCA9IHRvcC0mZ3Q7eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3eSA9IHRvcC0mZ3Q7eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dyA9IHRvcC0mZ3Q7dzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3aCA9IHRvcC0mZ3Q7aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzogICAgICAgLyogUmUtU2l6ZSovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyb24oQ09MT1JfUEFJUig0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12cHJpbnR3KExJTkVTIC0gNCwgMCwgIkVudGVyZWQgUmVzaXppbmcgOlVzZSBBcnJvdyBLZXlzIHRvIHJlc2l6ZSBhbmQgcHJlc3MgJmx0O0VOVEVSJmd0OyB0byBlbmQgcmVzaXppbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyb2ZmKENPTE9SX1BBSVIoNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ20nOiAgICAgICAvKiBNb3ZlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJvbihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXZwcmludHcoTElORVMgLSA0LCAwLCAiRW50ZXJlZCBNb3Zpbmc6IFVzZSBBcnJvdyBLZXlzIHRvIE1vdmUgYW5kIHByZXNzICZsdDtFTlRFUiZndDsgdG8gZW5kIG1vdmluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJvZmYoQ09MT1JfUEFJUig0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpemUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAtLW5ld3g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytuZXd3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1vdmUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5ld3g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpemUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICArK25ld3g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uZXd3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1vdmUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK25ld3g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpemUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAtLW5ld3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytuZXdoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1vdmUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5ld3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2l6ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICsrbmV3eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5ld2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobW92ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbmV3eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAgICAgICAgLyogRW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShMSU5FUyAtIDQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpemUgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBvbGRfd2luID0gcGFuZWxfd2luZG93KHN0YWNrX3RvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF93aW4gPSBuZXd3aW4obmV3aCwgbmV3dywgbmV3eSwgbmV3eCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZV9wYW5lbChzdGFja190b3AsIHRlbXBfd2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5fc2hvdyh0ZW1wX3dpbiwgdG9wLSZndDtsYWJlbCwgdG9wLSZndDtsYWJlbF9jb2xvcik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHdpbihvbGRfd2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobW92ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIG1vdmVfcGFuZWwoc3RhY2tfdG9wLCBuZXd5LCBuZXd4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoNCkpOworICAgICAgICAgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMywgMCwgIlVzZSAnbScgZm9yIG1vdmluZywgJ3InIGZvciByZXNpemluZyIpOworICAgICAgICAgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIlVzZSB0YWIgdG8gYnJvd3NlIHRocm91Z2ggdGhlIHdpbmRvd3MgKEYxIHRvIEV4aXQpIik7CisgICAgICAgICAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgICAgICAgICByZWZyZXNoKCk7ICAgICAgCisgICAgICAgICAgICAgICAgdXBkYXRlX3BhbmVscygpOworICAgICAgICAgICAgICAgIGRvdXBkYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgZW5kd2luKCk7CisgICAgICAgIHJldHVybiAwOworfQorCisvKiBQdXQgYWxsIHRoZSB3aW5kb3dzICovCit2b2lkIGluaXRfd2lucyhXSU5ET1cgKip3aW5zLCBpbnQgbikKK3sgICAgICAgaW50IHgsIHksIGk7CisgICAgICAgIGNoYXIgbGFiZWxbODBdOworCisgICAgICAgIHkgPSAyOworICAgICAgICB4ID0gMTA7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG47ICsraSkKKyAgICAgICAgeyAgICAgICB3aW5zW2ldID0gbmV3d2luKE5MSU5FUywgTkNPTFMsIHksIHgpOworICAgICAgICAgICAgICAgIHNwcmludGYobGFiZWwsICJXaW5kb3cgTnVtYmVyICVkIiwgaSArIDEpOworICAgICAgICAgICAgICAgIHdpbl9zaG93KHdpbnNbaV0sIGxhYmVsLCBpICsgMSk7CisgICAgICAgICAgICAgICAgeSArPSAzOworICAgICAgICAgICAgICAgIHggKz0gNzsKKyAgICAgICAgfQorfQorCisvKiBTZXQgdGhlIFBBTkVMX0RBVEEgc3RydWN0dXJlcyBmb3IgaW5kaXZpZHVhbCBwYW5lbHMgKi8KK3ZvaWQgc2V0X3VzZXJfcHRycyhQQU5FTCAqKnBhbmVscywgaW50IG4pCit7ICAgICAgIFBBTkVMX0RBVEEgKnB0cnM7CisgICAgICAgIFdJTkRPVyAqd2luOworICAgICAgICBpbnQgeCwgeSwgdywgaCwgaTsKKyAgICAgICAgY2hhciB0ZW1wWzgwXTsKKyAgICAgICAgCisgICAgICAgIHB0cnMgPSAoUEFORUxfREFUQSAqKWNhbGxvYyhuLCBzaXplb2YoUEFORUxfREFUQSkpOworCisgICAgICAgIGZvcihpID0gMDtpICZsdDsgbjsgKytpKQorICAgICAgICB7ICAgICAgIHdpbiA9IHBhbmVsX3dpbmRvdyhwYW5lbHNbaV0pOworICAgICAgICAgICAgICAgIGdldGJlZ3l4KHdpbiwgeSwgeCk7CisgICAgICAgICAgICAgICAgZ2V0bWF4eXgod2luLCBoLCB3KTsKKyAgICAgICAgICAgICAgICBwdHJzW2ldLnggPSB4OworICAgICAgICAgICAgICAgIHB0cnNbaV0ueSA9IHk7CisgICAgICAgICAgICAgICAgcHRyc1tpXS53ID0gdzsKKyAgICAgICAgICAgICAgICBwdHJzW2ldLmggPSBoOworICAgICAgICAgICAgICAgIHNwcmludGYodGVtcCwgIldpbmRvdyBOdW1iZXIgJWQiLCBpICsgMSk7CisgICAgICAgICAgICAgICAgc3RyY3B5KHB0cnNbaV0ubGFiZWwsIHRlbXApOworICAgICAgICAgICAgICAgIHB0cnNbaV0ubGFiZWxfY29sb3IgPSBpICsgMTsKKyAgICAgICAgICAgICAgICBpZihpICsgMSA9PSBuKQorICAgICAgICAgICAgICAgICAgICAgICAgcHRyc1tpXS5uZXh0ID0gcGFuZWxzWzBdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0cnNbaV0ubmV4dCA9IHBhbmVsc1tpICsgMV07CisgICAgICAgICAgICAgICAgc2V0X3BhbmVsX3VzZXJwdHIocGFuZWxzW2ldLCAmYW1wO3B0cnNbaV0pOworICAgICAgICB9Cit9CisKKy8qIFNob3cgdGhlIHdpbmRvdyB3aXRoIGEgYm9yZGVyIGFuZCBhIGxhYmVsICovCit2b2lkIHdpbl9zaG93KFdJTkRPVyAqd2luLCBjaGFyICpsYWJlbCwgaW50IGxhYmVsX2NvbG9yKQoreyAgICAgICBpbnQgc3RhcnR4LCBzdGFydHksIGhlaWdodCwgd2lkdGg7CisKKyAgICAgICAgZ2V0YmVneXgod2luLCBzdGFydHksIHN0YXJ0eCk7CisgICAgICAgIGdldG1heHl4KHdpbiwgaGVpZ2h0LCB3aWR0aCk7CisKKyAgICAgICAgYm94KHdpbiwgMCwgMCk7CisgICAgICAgIG12d2FkZGNoKHdpbiwgMiwgMCwgQUNTX0xURUUpOyAKKyAgICAgICAgbXZ3aGxpbmUod2luLCAyLCAxLCBBQ1NfSExJTkUsIHdpZHRoIC0gMik7IAorICAgICAgICBtdndhZGRjaCh3aW4sIDIsIHdpZHRoIC0gMSwgQUNTX1JURUUpOyAKKyAgICAgICAgCisgICAgICAgIHByaW50X2luX21pZGRsZSh3aW4sIDEsIDAsIHdpZHRoLCBsYWJlbCwgQ09MT1JfUEFJUihsYWJlbF9jb2xvcikpOworfQorCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcikKK3sgICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKyAgICAgICAgZmxvYXQgdGVtcDsKKworICAgICAgICBpZih3aW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3aW4gPSBzdGRzY3I7CisgICAgICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgICAgIGlmKHN0YXJ0eCAhPSAwKQorICAgICAgICAgICAgICAgIHggPSBzdGFydHg7CisgICAgICAgIGlmKHN0YXJ0eSAhPSAwKQorICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7CisgICAgICAgIGlmKHdpZHRoID09IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkvIDI7CisgICAgICAgIHggPSBzdGFydHggKyAoaW50KXRlbXA7CisgICAgICAgIHdhdHRyb24od2luLCBjb2xvcik7CisgICAgICAgIG12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7CisgICAgICAgIHdhdHRyb2ZmKHdpbiwgY29sb3IpOworICAgICAgICByZWZyZXNoKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+Q29uY2VudHJhdGUgb24gdGhlIG1haW4gd2hpbGUgbG9vcC4gT25jZSBpdCBmaW5kcyBvdXQgdGhlIHR5cGUKK29mIGtleSBwcmVzc2VkLCBpdCB0YWtlcyBhcHByb3ByaWF0ZSBhY3Rpb24uIElmICdyJyBpcyBwcmVzc2VkCityZXNpemluZyBtb2RlIGlzIHN0YXJ0ZWQuIEFmdGVyIHRoaXMgdGhlIG5ldyBzaXplcyBhcmUgdXBkYXRlZCBhcwordGhlIHVzZXIgcHJlc3NlcyB0aGUgYXJyb3cga2V5cy4gV2hlbiB0aGUgdXNlciBwcmVzc2VzCismbHQ7RU5URVImZ3Q7IHByZXNlbnQgc2VsZWN0aW9uIGVuZHMgYW5kIHBhbmVsIGlzIHJlc2l6ZWQgYnkgdXNpbmcKK3RoZSBjb25jZXB0IGV4cGxhaW5lZC4gV2hpbGUgaW4gcmVzaXppbmcgbW9kZSB0aGUgcHJvZ3JhbSBkb2Vzbid0CitzaG93IGhvdyB0aGUgd2luZG93IGlzIGdldHRpbmcgcmVzaXplZC4gSXQncyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvCit0aGUgcmVhZGVyIHRvIHByaW50IGEgZG90dGVkIGJvcmRlciB3aGlsZSBpdCBnZXRzIHJlc2l6ZWQgdG8gYSBuZXcKK3Bvc2l0aW9uLjwvcD4KKzxwPldoZW4gdGhlIHVzZXIgcHJlc3NlcyAnbScgdGhlIG1vdmUgbW9kZSBzdGFydHMuIFRoaXMgaXMgYSBiaXQKK3NpbXBsZXIgdGhhbiByZXNpemluZy4gQXMgdGhlIGFycm93IGtleXMgYXJlIHByZXNzZWQgdGhlIG5ldworcG9zaXRpb24gaXMgdXBkYXRlZCBhbmQgcHJlc3Npbmcgb2YgJmx0O0VOVEVSJmd0OyBjYXVzZXMgdGhlIHBhbmVsCit0byBiZSBtb3ZlZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBtb3ZlX3BhbmVsKCkuPC9wPgorPHA+SW4gdGhpcyBwcm9ncmFtIHRoZSB1c2VyIGRhdGEgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMKK1BBTkVMX0RBVEEsIHBsYXlzIHZlcnkgaW1wb3J0YW50IHJvbGUgaW4gZmluZGluZyB0aGUgYXNzb2NpYXRlZAoraW5mb3JtYXRpb24gd2l0aCBhIHBhbmVsLiBBcyB3cml0dGVuIGluIHRoZSBjb21tZW50cywgdGhlCitQQU5FTF9EQVRBIHN0b3JlcyB0aGUgcGFuZWwgc2l6ZXMsIGxhYmVsLCBsYWJlbCBjb2xvciBhbmQgYSBwb2ludGVyCit0byB0aGUgbmV4dCBwYW5lbCBpbiB0aGUgY3ljbGUuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJQQU5FTFNIT1dISURFIiBpZD0iUEFORUxTSE9XSElERSI+MTYuNi4KK0hpZGluZyBhbmQgU2hvd2luZyBQYW5lbHM8L2E+PC9oMz4KKzxwPkEgUGFuZWwgY2FuIGJlIGhpZGRlbiBieSB1c2luZyB0aGUgZnVuY3Rpb24gaGlkZV9wYW5lbCgpLiBUaGlzCitmdW5jdGlvbiBtZXJlbHkgcmVtb3ZlcyBpdCBmb3JtIHRoZSBzdGFjayBvZiBwYW5lbHMsIHRodXMgaGlkaW5nIGl0CitvbiB0aGUgc2NyZWVuIG9uY2UgeW91IGRvIHVwZGF0ZV9wYW5lbHMoKSBhbmQgZG91cGRhdGUoKS4gSXQKK2RvZXNuJ3QgZGVzdHJveSB0aGUgUEFORUwgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGlkZGVuCitwYW5lbC4gSXQgY2FuIGJlIHNob3duIGFnYWluIGJ5IHVzaW5nIHRoZSBzaG93X3BhbmVsKCkKK2Z1bmN0aW9uLjwvcD4KKzxwPlRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBzaG93cyB0aGUgaGlkaW5nIG9mIHBhbmVscy4gUHJlc3MgJ2EnIG9yCisnYicgb3IgJ2MnIHRvIHNob3cgb3IgaGlkZSBmaXJzdCwgc2Vjb25kIGFuZCB0aGlyZCB3aW5kb3dzCityZXNwZWN0aXZlbHkuIEl0IHVzZXMgYSB1c2VyIGRhdGEgd2l0aCBhIHNtYWxsIHZhcmlhYmxlIGhpZGUsIHdoaWNoCitrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgaGlkZGVuIG9yIG5vdC4gRm9yIHNvbWUgcmVhc29uCit0aGUgZnVuY3Rpb24gPHZhciBjbGFzcz0iTElURVJBTCI+cGFuZWxfaGlkZGVuKCk8L3Zhcj4gd2hpY2ggdGVsbHMKK3doZXRoZXIgYSBwYW5lbCBpcyBoaWRkZW4gb3Igbm90IGlzIG5vdCB3b3JraW5nLiBBIGJ1ZyByZXBvcnQgd2FzCithbHNvIHByZXNlbnRlZCBieSBNaWNoYWVsIEFuZHJlcyA8YSBocmVmPQorImh0dHA6Ly93d3cuZ2VvY3Jhd2xlci5jb20vYXJjaGl2ZXMvMy8zNDQvMTk5OS85LzAvMjY0MzU0OS8iCit0YXJnZXQ9Il90b3AiPmhlcmU8L2E+PC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iUFBBSEkiIGlkPSJQUEFISSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxNy4gUGFuZWwgSGlkaW5nIGFuZCBTaG93aW5nIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7cGFuZWwuaCZndDsKKwordHlwZWRlZiBzdHJ1Y3QgX1BBTkVMX0RBVEEgeworICAgICAgICBpbnQgaGlkZTsgICAgICAgLyogVFJVRSBpZiBwYW5lbCBpcyBoaWRkZW4gKi8KK31QQU5FTF9EQVRBOworCisjZGVmaW5lIE5MSU5FUyAxMAorI2RlZmluZSBOQ09MUyA0MAorCit2b2lkIGluaXRfd2lucyhXSU5ET1cgKip3aW5zLCBpbnQgbik7Cit2b2lkIHdpbl9zaG93KFdJTkRPVyAqd2luLCBjaGFyICpsYWJlbCwgaW50IGxhYmVsX2NvbG9yKTsKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKTsKKworaW50IG1haW4oKQoreyAgICAgICBXSU5ET1cgKm15X3dpbnNbM107CisgICAgICAgIFBBTkVMICAqbXlfcGFuZWxzWzNdOworICAgICAgICBQQU5FTF9EQVRBIHBhbmVsX2RhdGFzWzNdOworICAgICAgICBQQU5FTF9EQVRBICp0ZW1wOworICAgICAgICBpbnQgY2g7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYWxsIHRoZSBjb2xvcnMgKi8KKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMiwgQ09MT1JfR1JFRU4sIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDMsIENPTE9SX0JMVUUsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDQsIENPTE9SX0NZQU4sIENPTE9SX0JMQUNLKTsKKworICAgICAgICBpbml0X3dpbnMobXlfd2lucywgMyk7CisgICAgICAgIAorICAgICAgICAvKiBBdHRhY2ggYSBwYW5lbCB0byBlYWNoIHdpbmRvdyAqLyAgICAgLyogT3JkZXIgaXMgYm90dG9tIHVwICovCisgICAgICAgIG15X3BhbmVsc1swXSA9IG5ld19wYW5lbChteV93aW5zWzBdKTsgICAvKiBQdXNoIDAsIG9yZGVyOiBzdGRzY3ItMCAqLworICAgICAgICBteV9wYW5lbHNbMV0gPSBuZXdfcGFuZWwobXlfd2luc1sxXSk7ICAgLyogUHVzaCAxLCBvcmRlcjogc3Rkc2NyLTAtMSAqLworICAgICAgICBteV9wYW5lbHNbMl0gPSBuZXdfcGFuZWwobXlfd2luc1syXSk7ICAgLyogUHVzaCAyLCBvcmRlcjogc3Rkc2NyLTAtMS0yICovCisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBwYW5lbCBkYXRhcyBzYXlpbmcgdGhhdCBub3RoaW5nIGlzIGhpZGRlbiAqLworICAgICAgICBwYW5lbF9kYXRhc1swXS5oaWRlID0gRkFMU0U7CisgICAgICAgIHBhbmVsX2RhdGFzWzFdLmhpZGUgPSBGQUxTRTsKKyAgICAgICAgcGFuZWxfZGF0YXNbMl0uaGlkZSA9IEZBTFNFOworCisgICAgICAgIHNldF9wYW5lbF91c2VycHRyKG15X3BhbmVsc1swXSwgJmFtcDtwYW5lbF9kYXRhc1swXSk7CisgICAgICAgIHNldF9wYW5lbF91c2VycHRyKG15X3BhbmVsc1sxXSwgJmFtcDtwYW5lbF9kYXRhc1sxXSk7CisgICAgICAgIHNldF9wYW5lbF91c2VycHRyKG15X3BhbmVsc1syXSwgJmFtcDtwYW5lbF9kYXRhc1syXSk7CisKKyAgICAgICAgLyogVXBkYXRlIHRoZSBzdGFja2luZyBvcmRlci4gMm5kIHBhbmVsIHdpbGwgYmUgb24gdG9wICovCisgICAgICAgIHVwZGF0ZV9wYW5lbHMoKTsKKworICAgICAgICAvKiBTaG93IGl0IG9uIHRoZSBzY3JlZW4gKi8KKyAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoNCkpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDMsIDAsICJTaG93IG9yIEhpZGUgYSB3aW5kb3cgd2l0aCAnYScoZmlyc3Qgd2luZG93KSAgJ2InKFNlY29uZCBXaW5kb3cpICAnYycoVGhpcmQgV2luZG93KSIpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJGMSB0byBFeGl0Iik7CisKKyAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgZG91cGRhdGUoKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlKChjaCA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjaCkKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgJ2EnOiAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAoUEFORUxfREFUQSAqKXBhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGVtcC0mZ3Q7aGlkZSA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBoaWRlX3BhbmVsKG15X3BhbmVsc1swXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC0mZ3Q7aGlkZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIHNob3dfcGFuZWwobXlfcGFuZWxzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLSZndDtoaWRlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IChQQU5FTF9EQVRBICopcGFuZWxfdXNlcnB0cihteV9wYW5lbHNbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0ZW1wLSZndDtoaWRlID09IEZBTFNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIGhpZGVfcGFuZWwobXlfcGFuZWxzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLSZndDtoaWRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgc2hvd19wYW5lbChteV9wYW5lbHNbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAtJmd0O2hpZGUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gKFBBTkVMX0RBVEEgKilwYW5lbF91c2VycHRyKG15X3BhbmVsc1syXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRlbXAtJmd0O2hpZGUgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgaGlkZV9wYW5lbChteV9wYW5lbHNbMl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAtJmd0O2hpZGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBzaG93X3BhbmVsKG15X3BhbmVsc1syXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC0mZ3Q7aGlkZSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1cGRhdGVfcGFuZWxzKCk7CisgICAgICAgICAgICAgICAgZG91cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBlbmR3aW4oKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIFB1dCBhbGwgdGhlIHdpbmRvd3MgKi8KK3ZvaWQgaW5pdF93aW5zKFdJTkRPVyAqKndpbnMsIGludCBuKQoreyAgICAgICBpbnQgeCwgeSwgaTsKKyAgICAgICAgY2hhciBsYWJlbFs4MF07CisKKyAgICAgICAgeSA9IDI7CisgICAgICAgIHggPSAxMDsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbjsgKytpKQorICAgICAgICB7ICAgICAgIHdpbnNbaV0gPSBuZXd3aW4oTkxJTkVTLCBOQ09MUywgeSwgeCk7CisgICAgICAgICAgICAgICAgc3ByaW50ZihsYWJlbCwgIldpbmRvdyBOdW1iZXIgJWQiLCBpICsgMSk7CisgICAgICAgICAgICAgICAgd2luX3Nob3cod2luc1tpXSwgbGFiZWwsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICB5ICs9IDM7CisgICAgICAgICAgICAgICAgeCArPSA3OworICAgICAgICB9Cit9CisKKy8qIFNob3cgdGhlIHdpbmRvdyB3aXRoIGEgYm9yZGVyIGFuZCBhIGxhYmVsICovCit2b2lkIHdpbl9zaG93KFdJTkRPVyAqd2luLCBjaGFyICpsYWJlbCwgaW50IGxhYmVsX2NvbG9yKQoreyAgICAgICBpbnQgc3RhcnR4LCBzdGFydHksIGhlaWdodCwgd2lkdGg7CisKKyAgICAgICAgZ2V0YmVneXgod2luLCBzdGFydHksIHN0YXJ0eCk7CisgICAgICAgIGdldG1heHl4KHdpbiwgaGVpZ2h0LCB3aWR0aCk7CisKKyAgICAgICAgYm94KHdpbiwgMCwgMCk7CisgICAgICAgIG12d2FkZGNoKHdpbiwgMiwgMCwgQUNTX0xURUUpOyAKKyAgICAgICAgbXZ3aGxpbmUod2luLCAyLCAxLCBBQ1NfSExJTkUsIHdpZHRoIC0gMik7IAorICAgICAgICBtdndhZGRjaCh3aW4sIDIsIHdpZHRoIC0gMSwgQUNTX1JURUUpOyAKKyAgICAgICAgCisgICAgICAgIHByaW50X2luX21pZGRsZSh3aW4sIDEsIDAsIHdpZHRoLCBsYWJlbCwgQ09MT1JfUEFJUihsYWJlbF9jb2xvcikpOworfQorCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcikKK3sgICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKyAgICAgICAgZmxvYXQgdGVtcDsKKworICAgICAgICBpZih3aW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3aW4gPSBzdGRzY3I7CisgICAgICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgICAgIGlmKHN0YXJ0eCAhPSAwKQorICAgICAgICAgICAgICAgIHggPSBzdGFydHg7CisgICAgICAgIGlmKHN0YXJ0eSAhPSAwKQorICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7CisgICAgICAgIGlmKHdpZHRoID09IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkvIDI7CisgICAgICAgIHggPSBzdGFydHggKyAoaW50KXRlbXA7CisgICAgICAgIHdhdHRyb24od2luLCBjb2xvcik7CisgICAgICAgIG12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7CisgICAgICAgIHdhdHRyb2ZmKHdpbiwgY29sb3IpOworICAgICAgICByZWZyZXNoKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJQQU5FTEFCT1ZFIiBpZD0iUEFORUxBQk9WRSI+MTYuNy4KK3BhbmVsX2Fib3ZlKCkgYW5kIHBhbmVsX2JlbG93KCkgRnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGUgZnVuY3Rpb25zIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnBhbmVsX2Fib3ZlKCk8L3Zhcj4gYW5kCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5wYW5lbF9iZWxvdygpPC92YXI+IGNhbiBiZSB1c2VkIHRvIGZpbmQgb3V0Cit0aGUgcGFuZWwgYWJvdmUgYW5kIGJlbG93IGEgcGFuZWwuIElmIHRoZSBhcmd1bWVudCB0byB0aGVzZQorZnVuY3Rpb25zIGlzIE5VTEwsIHRoZW4gdGhleSByZXR1cm4gYSBwb2ludGVyIHRvIGJvdHRvbSBwYW5lbCBhbmQKK3RvcCBwYW5lbCByZXNwZWN0aXZlbHkuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9Ik1FTlVTIiBpZD0iTUVOVVMiPjE3LiBNZW51cworTGlicmFyeTwvYT48L2gyPgorPHA+VGhlIG1lbnVzIGxpYnJhcnkgcHJvdmlkZXMgYSBuaWNlIGV4dGVuc2lvbiB0byBiYXNpYyBjdXJzZXMsCit0aHJvdWdoIHdoaWNoIHlvdSBjYW4gY3JlYXRlIG1lbnVzLiBJdCBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMKK3RvIGNyZWF0ZSBtZW51cy4gQnV0IHRoZXkgaGF2ZSB0byBiZSBjdXN0b21pemVkIHRvIGdpdmUgYSBuaWNlcgorbG9vaywgd2l0aCBjb2xvcnMgZXRjLiBMZXQncyBnZXQgaW50byB0aGUgZGV0YWlscy48L3A+Cis8cD5BIG1lbnUgaXMgYSBzY3JlZW4gZGlzcGxheSB0aGF0IGFzc2lzdHMgdGhlIHVzZXIgdG8gY2hvb3NlIHNvbWUKK3N1YnNldCBvZiBhIGdpdmVuIHNldCBvZiBpdGVtcy4gVG8gcHV0IGl0IHNpbXBsZSwgYSBtZW51IGlzIGEKK2NvbGxlY3Rpb24gb2YgaXRlbXMgZnJvbSB3aGljaCBvbmUgb3IgbW9yZSBpdGVtcyBjYW4gYmUgY2hvc2VuLgorU29tZSByZWFkZXJzIG1pZ2h0IG5vdCBiZSBhd2FyZSBvZiBtdWx0aXBsZSBpdGVtIHNlbGVjdGlvbgorY2FwYWJpbGl0eS4gTWVudSBsaWJyYXJ5IHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gd3JpdGUgbWVudXMgZnJvbQord2hpY2ggdGhlIHVzZXIgY2FuIGNob3NlIG1vcmUgdGhhbiBvbmUgaXRlbSBhcyB0aGUgcHJlZmVycmVkCitjaG9pY2UuIFRoaXMgaXMgZGVhbHQgd2l0aCBpbiBhIGxhdGVyIHNlY3Rpb24uIE5vdyBpdCBpcyB0aW1lIGZvcgorc29tZSBydWRpbWVudHMuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUVOVUJBU0lDUyIgaWQ9Ik1FTlVCQVNJQ1MiPjE3LjEuIFRoZQorQmFzaWNzPC9hPjwvaDM+Cis8cD5UbyBjcmVhdGUgbWVudXMsIHlvdSBmaXJzdCBjcmVhdGUgaXRlbXMsIGFuZCB0aGVuIHBvc3QgdGhlIG1lbnUKK3RvIHRoZSBkaXNwbGF5LiBBZnRlciB0aGF0LCBhbGwgdGhlIHByb2Nlc3Npbmcgb2YgdXNlciByZXNwb25zZXMgaXMKK2RvbmUgaW4gYW4gZWxlZ2FudCBmdW5jdGlvbiBtZW51X2RyaXZlcigpIHdoaWNoIGlzIHRoZSB3b3JrIGhvcnNlCitvZiBhbnkgbWVudSBwcm9ncmFtLjwvcD4KKzxwPlRoZSBnZW5lcmFsIGZsb3cgb2YgY29udHJvbCBvZiBhIG1lbnUgcHJvZ3JhbSBsb29rcyBsaWtlCit0aGlzLjwvcD4KKzxvbCB0eXBlPSIxIj4KKzxsaT4KKzxwPkluaXRpYWxpemUgY3Vyc2VzPC9wPgorPC9saT4KKzxsaT4KKzxwPkNyZWF0ZSBpdGVtcyB1c2luZyBuZXdfaXRlbSgpLiBZb3UgY2FuIHNwZWNpZnkgYSBuYW1lIGFuZAorZGVzY3JpcHRpb24gZm9yIHRoZSBpdGVtcy48L3A+Cis8L2xpPgorPGxpPgorPHA+Q3JlYXRlIHRoZSBtZW51IHdpdGggbmV3X21lbnUoKSBieSBzcGVjaWZ5aW5nIHRoZSBpdGVtcyB0byBiZQorYXR0YWNoZWQgd2l0aC48L3A+Cis8L2xpPgorPGxpPgorPHA+UG9zdCB0aGUgbWVudSB3aXRoIG1lbnVfcG9zdCgpIGFuZCByZWZyZXNoIHRoZSBzY3JlZW4uPC9wPgorPC9saT4KKzxsaT4KKzxwPlByb2Nlc3MgdGhlIHVzZXIgcmVxdWVzdHMgd2l0aCBhIGxvb3AgYW5kIGRvIG5lY2Vzc2FyeSB1cGRhdGVzCit0byBtZW51IHdpdGggbWVudV9kcml2ZXIuPC9wPgorPC9saT4KKzxsaT4KKzxwPlVucG9zdCB0aGUgbWVudSB3aXRoIG1lbnVfdW5wb3N0KCk8L3A+Cis8L2xpPgorPGxpPgorPHA+RnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byBtZW51IGJ5IGZyZWVfbWVudSgpPC9wPgorPC9saT4KKzxsaT4KKzxwPkZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIGl0ZW1zIHdpdGggZnJlZV9pdGVtKCk8L3A+Cis8L2xpPgorPGxpPgorPHA+RW5kIGN1cnNlczwvcD4KKzwvbGk+Cis8L29sPgorPHA+TGV0J3Mgc2VlIGEgcHJvZ3JhbSB3aGljaCBwcmludHMgYSBzaW1wbGUgbWVudSBhbmQgdXBkYXRlcyB0aGUKK2N1cnJlbnQgc2VsZWN0aW9uIHdpdGggdXAsIGRvd24gYXJyb3dzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ09NUElMRU1FTlVTIiBpZD0iQ09NUElMRU1FTlVTIj4xNy4yLgorQ29tcGlsaW5nIFdpdGggdGhlIE1lbnUgTGlicmFyeTwvYT48L2gzPgorPHA+VG8gdXNlIG1lbnUgbGlicmFyeSBmdW5jdGlvbnMsIHlvdSBoYXZlIHRvIGluY2x1ZGUgbWVudS5oIGFuZCB0bworbGluayB0aGUgcHJvZ3JhbSB3aXRoIG1lbnUgbGlicmFyeSB0aGUgZmxhZyAtbG1lbnUgc2hvdWxkIGJlIGFkZGVkCithbG9uZyB3aXRoIC1sbmN1cnNlcyBpbiB0aGF0IG9yZGVyLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgI2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKyAgICAuCisgICAgLgorICAgIC4KKworICAgIGNvbXBpbGUgYW5kIGxpbms6IGdjYyAmbHQ7cHJvZ3JhbSBmaWxlJmd0OyAtbG1lbnUgLWxuY3Vyc2VzPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iTU1FU0kiIGlkPSJNTUVTSSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxOC4gTWVudSBCYXNpY3M8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7Y3Vyc2VzLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bWVudS5oJmd0OworCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgQ1RSTEQgICA0CisKK2NoYXIgKmNob2ljZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICB9OworCitpbnQgbWFpbigpCit7ICAgICAgIElURU0gKipteV9pdGVtczsKKyAgICAgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTUVOVSAqbXlfbWVudTsKKyAgICAgICAgaW50IG5fY2hvaWNlcywgaTsKKyAgICAgICAgSVRFTSAqY3VyX2l0ZW07CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgICAgICAKKyAgICAgICAgbl9jaG9pY2VzID0gQVJSQVlfU0laRShjaG9pY2VzKTsKKyAgICAgICAgbXlfaXRlbXMgPSAoSVRFTSAqKiljYWxsb2Mobl9jaG9pY2VzICsgMSwgc2l6ZW9mKElURU0gKikpOworCisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIG15X2l0ZW1zW2ldID0gbmV3X2l0ZW0oY2hvaWNlc1tpXSwgY2hvaWNlc1tpXSk7CisgICAgICAgIG15X2l0ZW1zW25fY2hvaWNlc10gPSAoSVRFTSAqKU5VTEw7CisKKyAgICAgICAgbXlfbWVudSA9IG5ld19tZW51KChJVEVNICoqKW15X2l0ZW1zKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiRjEgdG8gRXhpdCIpOworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICB3aGlsZSgoYyA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgc3dpdGNoKGMpCisgICAgICAgICAgICB7ICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9ET1dOX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfVVBfSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAKKworICAgICAgICBmcmVlX2l0ZW0obXlfaXRlbXNbMF0pOworICAgICAgICBmcmVlX2l0ZW0obXlfaXRlbXNbMV0pOworICAgICAgICBmcmVlX21lbnUobXlfbWVudSk7CisgICAgICAgIGVuZHdpbigpOworfQorICAgICAgICA8L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5UaGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIHRoZSBiYXNpYyBjb25jZXB0cyBpbnZvbHZlZCBpbgorY3JlYXRpbmcgYSBtZW51IHVzaW5nIG1lbnVzIGxpYnJhcnkuIEZpcnN0IHdlIGNyZWF0ZSB0aGUgaXRlbXMKK3VzaW5nIG5ld19pdGVtKCkgYW5kIHRoZW4gYXR0YWNoIHRoZW0gdG8gdGhlIG1lbnUgd2l0aCBuZXdfbWVudSgpCitmdW5jdGlvbi4gQWZ0ZXIgcG9zdGluZyB0aGUgbWVudSBhbmQgcmVmcmVzaGluZyB0aGUgc2NyZWVuLCB0aGUKK21haW4gcHJvY2Vzc2luZyBsb29wIHN0YXJ0cy4gSXQgcmVhZHMgdXNlciBpbnB1dCBhbmQgdGFrZXMKK2NvcnJlc3BvbmRpbmcgYWN0aW9uLiBUaGUgZnVuY3Rpb24gbWVudV9kcml2ZXIoKSBpcyB0aGUgbWFpbiB3b3JrCitob3JzZSBvZiB0aGUgbWVudSBzeXN0ZW0uIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoaXMgZnVuY3Rpb24KK3RlbGxzIHdoYXQncyB0byBiZSBkb25lIHdpdGggdGhlIG1lbnUuIEFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVyLAorbWVudV9kcml2ZXIoKSBkb2VzIHRoZSBjb3JyZXNwb25kaW5nIHRhc2suIFRoZSB2YWx1ZSBjYW4gYmUgZWl0aGVyCithIG1lbnUgbmF2aWdhdGlvbmFsIHJlcXVlc3QsIGFuIGFzY2lpIGNoYXJhY3Rlciwgb3IgYSBLRVlfTU9VU0UKK3NwZWNpYWwga2V5IGFzc29jaWF0ZWQgd2l0aCBhIG1vdXNlIGV2ZW50LjwvcD4KKzxwPlRoZSBtZW51X2RyaXZlciBhY2NlcHRzIGZvbGxvd2luZyBuYXZpZ2F0aW9uYWwgcmVxdWVzdHMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+JiMxMzsgICAgIFJFUV9MRUZUX0lURU0gICAgICAgICBNb3ZlIGxlZnQgdG8gYW4gaXRlbS4KKyAgICAgUkVRX1JJR0hUX0lURU0gICAgICBNb3ZlIHJpZ2h0IHRvIGFuIGl0ZW0uCisgICAgIFJFUV9VUF9JVEVNICAgICAgICAgTW92ZSB1cCB0byBhbiBpdGVtLgorICAgICBSRVFfRE9XTl9JVEVNICAgICAgIE1vdmUgZG93biB0byBhbiBpdGVtLgorICAgICBSRVFfU0NSX1VMSU5FICAgICAgIFNjcm9sbCB1cCBhIGxpbmUuCisgICAgIFJFUV9TQ1JfRExJTkUgICAgICAgICAgU2Nyb2xsIGRvd24gYSBsaW5lLgorICAgICBSRVFfU0NSX0RQQUdFICAgICAgICAgIFNjcm9sbCBkb3duIGEgcGFnZS4KKyAgICAgUkVRX1NDUl9VUEFHRSAgICAgICAgIFNjcm9sbCB1cCBhIHBhZ2UuCisgICAgIFJFUV9GSVJTVF9JVEVNICAgICBNb3ZlIHRvIHRoZSBmaXJzdCBpdGVtLgorICAgICBSRVFfTEFTVF9JVEVNICAgICAgICAgTW92ZSB0byB0aGUgbGFzdCBpdGVtLgorICAgICBSRVFfTkVYVF9JVEVNICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBpdGVtLgorICAgICBSRVFfUFJFVl9JVEVNICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbS4gCisgICAgIFJFUV9UT0dHTEVfSVRFTSAgICAgU2VsZWN0L2Rlc2VsZWN0IGFuIGl0ZW0uCisgICAgIFJFUV9DTEVBUl9QQVRURVJOICAgICBDbGVhciB0aGUgbWVudSBwYXR0ZXJuIGJ1ZmZlci4KKyAgICAgUkVRX0JBQ0tfUEFUVEVSTiAgICAgIERlbGV0ZSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGZyb20gdGhlIHBhdHRlcm4gYnVmZmVyLgorICAgICBSRVFfTkVYVF9NQVRDSCAgICAgTW92ZSB0byB0aGUgbmV4dCBpdGVtIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIG1hdGNoLgorICAgICBSRVFfUFJFVl9NQVRDSCAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbSBtYXRjaGluZyB0aGUgcGF0dGVybiBtYXRjaC4mIzEzOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPkRvbid0IGdldCBvdmVyd2hlbG1lZCBieSB0aGUgbnVtYmVyIG9mIG9wdGlvbnMuIFdlIHdpbGwgc2VlIHRoZW0KK3Nsb3dseSBvbmUgYWZ0ZXIgYW5vdGhlci4gVGhlIG9wdGlvbnMgb2YgaW50ZXJlc3QgaW4gdGhpcyBleGFtcGxlCithcmUgUkVRX1VQX0lURU0gYW5kIFJFUV9ET1dOX0lURU0uIFRoZXNlIHR3byBvcHRpb25zIHdoZW4gcGFzc2VkIHRvCittZW51X2RyaXZlciwgbWVudSBkcml2ZXIgdXBkYXRlcyB0aGUgY3VycmVudCBpdGVtIHRvIG9uZSBpdGVtIHVwIG9yCitkb3duIHJlc3BlY3RpdmVseS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1FTlVEUklWRVIiIGlkPSJNRU5VRFJJVkVSIj4xNy4zLiBNZW51CitEcml2ZXI6IFRoZSB3b3JrIGhvcnNlIG9mIHRoZSBtZW51IHN5c3RlbTwvYT48L2gzPgorPHA+QXMgeW91IGhhdmUgc2VlbiBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgbWVudV9kcml2ZXIgcGxheXMgYW4KK2ltcG9ydGFudCByb2xlIGluIHVwZGF0aW5nIHRoZSBtZW51LiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0bwordW5kZXJzdGFuZCB2YXJpb3VzIG9wdGlvbnMgaXQgdGFrZXMgYW5kIHdoYXQgdGhleSBkby4gQXMgZXhwbGFpbmVkCithYm92ZSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gbWVudV9kcml2ZXIoKSBjYW4gYmUgZWl0aGVyIGEKK25hdmlnYXRpb25hbCByZXF1ZXN0LCBhIHByaW50YWJsZSBjaGFyYWN0ZXIgb3IgYSBLRVlfTU9VU0Uga2V5LgorTGV0J3MgZGlzc2VjdCB0aGUgZGlmZmVyZW50IG5hdmlnYXRpb25hbCByZXF1ZXN0cy48L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX0xFRlRfSVRFTSBhbmQgUkVRX1JJR0hUX0lURU08L2VtPjwvcD4KKzxwPkEgTWVudSBjYW4gYmUgZGlzcGxheWVkIHdpdGggbXVsdGlwbGUgY29sdW1ucyBmb3IgbW9yZSB0aGFuIG9uZQoraXRlbS4gVGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZyB0aGUgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5tZW51X2Zvcm1hdCgpPC92YXI+ZnVuY3Rpb24uIFdoZW4gYSBtdWx0aSBjb2x1bW5hciBtZW51CitpcyBkaXNwbGF5ZWQgdGhlc2UgcmVxdWVzdHMgY2F1c2UgdGhlIG1lbnUgZHJpdmVyIHRvIG1vdmUgdGhlCitjdXJyZW50IHNlbGVjdGlvbiB0byBsZWZ0IG9yIHJpZ2h0LjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1VQX0lURU0gYW5kIFJFUV9ET1dOX0lURU08L2VtPjwvcD4KKzxwPlRoZXNlIHR3byBvcHRpb25zIHlvdSBoYXZlIHNlZW4gaW4gdGhlIGFib3ZlIGV4YW1wbGUuIFRoZXNlCitvcHRpb25zIHdoZW4gZ2l2ZW4sIG1ha2VzIHRoZSBtZW51X2RyaXZlciB0byBtb3ZlIHRoZSBjdXJyZW50CitzZWxlY3Rpb24gdG8gYW4gaXRlbSB1cCBvciBkb3duLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl8qIG9wdGlvbnM8L2VtPjwvcD4KKzxwPlRoZSBmb3VyIG9wdGlvbnMgUkVRX1NDUl9VTElORSwgUkVRX1NDUl9ETElORSwgUkVRX1NDUl9EUEFHRSwKK1JFUV9TQ1JfVVBBR0UgYXJlIHJlbGF0ZWQgdG8gc2Nyb2xsaW5nLiBJZiBhbGwgdGhlIGl0ZW1zIGluIHRoZQorbWVudSBjYW5ub3QgYmUgZGlzcGxheWVkIGluIHRoZSBtZW51IHN1YiB3aW5kb3csIHRoZW4gdGhlIG1lbnUgaXMKK3Njcm9sbGFibGUuIFRoZXNlIHJlcXVlc3RzIGNhbiBiZSBnaXZlbiB0byB0aGUgbWVudV9kcml2ZXIgdG8gZG8KK3RoZSBzY3JvbGxpbmcgZWl0aGVyIG9uZSBsaW5lIHVwLCBkb3duIG9yIG9uZSBwYWdlIGRvd24gb3IgdXAKK3Jlc3BlY3RpdmVseS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9GSVJTVF9JVEVNLCBSRVFfTEFTVF9JVEVNLCBSRVFfTkVYVF9JVEVNIGFuZAorUkVRX1BSRVZfSVRFTTwvZW0+PC9wPgorPHA+VGhlc2UgcmVxdWVzdHMgYXJlIHNlbGYgZXhwbGFuYXRvcnkuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfVE9HR0xFX0lURU08L2VtPjwvcD4KKzxwPlRoaXMgcmVxdWVzdCB3aGVuIGdpdmVuLCB0b2dnbGVzIHRoZSBwcmVzZW50IHNlbGVjdGlvbi4gVGhpcworb3B0aW9uIGlzIHRvIGJlIHVzZWQgb25seSBpbiBhIG11bHRpIHZhbHVlZCBtZW51LiBTbyB0byB1c2UgdGhpcworcmVxdWVzdCB0aGUgb3B0aW9uIE9fT05FVkFMVUUgbXVzdCBiZSBvZmYuIFRoaXMgb3B0aW9uIGNhbiBiZSBtYWRlCitvZmYgb3Igb24gd2l0aCBzZXRfbWVudV9vcHRzKCkuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5QYXR0ZXJuIFJlcXVlc3RzPC9lbT48L3A+Cis8cD5FdmVyeSBtZW51IGhhcyBhbiBhc3NvY2lhdGVkIHBhdHRlcm4gYnVmZmVyLCB3aGljaCBpcyB1c2VkIHRvCitmaW5kIHRoZSBuZWFyZXN0IG1hdGNoIHRvIHRoZSBhc2NpaSBjaGFyYWN0ZXJzIGVudGVyZWQgYnkgdGhlIHVzZXIuCitXaGVuZXZlciBhc2NpaSBjaGFyYWN0ZXJzIGFyZSBnaXZlbiB0byBtZW51X2RyaXZlciwgaXQgcHV0cyBpbiB0bwordGhlIHBhdHRlcm4gYnVmZmVyLiBJdCBhbHNvIHRyaWVzIHRvIGZpbmQgdGhlIG5lYXJlc3QgbWF0Y2ggdG8gdGhlCitwYXR0ZXJuIGluIHRoZSBpdGVtcyBsaXN0IGFuZCBtb3ZlcyBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGF0IGl0ZW0uCitUaGUgcmVxdWVzdCBSRVFfQ0xFQVJfUEFUVEVSTiBjbGVhcnMgdGhlIHBhdHRlcm4gYnVmZmVyLiBUaGUKK3JlcXVlc3QgUkVRX0JBQ0tfUEFUVEVSTiBkZWxldGVzIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgaW4gdGhlCitwYXR0ZXJuIGJ1ZmZlci4gSW4gY2FzZSB0aGUgcGF0dGVybiBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgaXRlbSB0aGVuCit0aGUgbWF0Y2hlZCBpdGVtcyBjYW4gYmUgY3ljbGVkIHRocm91Z2ggUkVRX05FWFRfTUFUQ0ggYW5kCitSRVFfUFJFVl9NQVRDSCB3aGljaCBtb3ZlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgbmV4dCBhbmQKK3ByZXZpb3VzIG1hdGNoZXMgcmVzcGVjdGl2ZWx5LjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+TW91c2UgUmVxdWVzdHM8L2VtPjwvcD4KKzxwPkluIGNhc2Ugb2YgS0VZX01PVVNFIHJlcXVlc3RzLCBhY2NvcmRpbmcgdG8gdGhlIG1vdXNlIHBvc2l0aW9uCithbiBhY3Rpb24gaXMgdGFrZW4gYWNjb3JkaW5nbHkuIFRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gaXMgZXhwbGFpbmVkCitpbiB0aGUgbWFuIHBhZ2UgYXMsPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjkwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj48ZW0+ICAgICAgIElmICB0aGUgIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgS0VZX01PVVNFIHNwZWNpYWwga2V5LCB0aGUKKyAgICAgICBhc3NvY2lhdGVkIG1vdXNlIGV2ZW50IGlzIHRyYW5zbGF0ZWQgaW50byBvbmUgb2YgdGhlIGFib3ZlCisgICAgICAgcHJlLWRlZmluZWQgIHJlcXVlc3RzLiAgIEN1cnJlbnRseSBvbmx5IGNsaWNrcyBpbiB0aGUgdXNlcgorICAgICAgIHdpbmRvdyAoZS5nLiBpbnNpZGUgdGhlIG1lbnUgZGlzcGxheSBhcmVhIG9yICB0aGUgIGRlY29yYSZzaHk7CisgICAgICAgdGlvbiAgd2luZG93KSAgYXJlIGhhbmRsZWQuIElmIHlvdSBjbGljayBhYm92ZSB0aGUgZGlzcGxheQorICAgICAgIHJlZ2lvbiBvZiB0aGUgbWVudSwgYSBSRVFfU0NSX1VMSU5FIGlzIGdlbmVyYXRlZCwgIGlmICB5b3UKKyAgICAgICBkb3VibGVjbGljayAgYSAgUkVRX1NDUl9VUEFHRSAgaXMgIGdlbmVyYXRlZCAgYW5kICBpZiAgeW91CisgICAgICAgdHJpcGxlY2xpY2sgYSBSRVFfRklSU1RfSVRFTSBpcyBnZW5lcmF0ZWQuICBJZiAgeW91ICBjbGljaworICAgICAgIGJlbG93ICB0aGUgIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBtZW51LCBhIFJFUV9TQ1JfRExJTkUgaXMKKyAgICAgICBnZW5lcmF0ZWQsIGlmIHlvdSBkb3VibGVjbGljayBhIFJFUV9TQ1JfRFBBR0UgaXMgZ2VuZXJhdGVkCisgICAgICAgYW5kICBpZiAgeW91ICB0cmlwbGVjbGljayBhIFJFUV9MQVNUX0lURU0gaXMgZ2VuZXJhdGVkLiBJZgorICAgICAgIHlvdSBjbGljayBhdCBhbiBpdGVtIGluc2lkZSB0aGUgZGlzcGxheSBhcmVhIG9mIHRoZSAgbWVudSwKKyAgICAgICB0aGUgbWVudSBjdXJzb3IgaXMgcG9zaXRpb25lZCB0byB0aGF0IGl0ZW0uPC9lbT48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2xpPgorPC91bD4KKzxwPkVhY2ggb2YgdGhlIGFib3ZlIHJlcXVlc3RzIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcKK2xpbmVzIHdpdGggc2V2ZXJhbCBleGFtcGxlcyB3aGVuZXZlciBhcHByb3ByaWF0ZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1FTlVXSU5ET1dTIiBpZD0iTUVOVVdJTkRPV1MiPjE3LjQuIE1lbnUKK1dpbmRvd3M8L2E+PC9oMz4KKzxwPkV2ZXJ5IG1lbnUgY3JlYXRlZCBpcyBhc3NvY2lhdGVkIHdpdGggYSB3aW5kb3cgYW5kIGEgc3ViIHdpbmRvdy4KK1RoZSBtZW51IHdpbmRvdyBkaXNwbGF5cyBhbnkgdGl0bGUgb3IgYm9yZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUKK21lbnUuIFRoZSBtZW51IHN1YiB3aW5kb3cgZGlzcGxheXMgdGhlIG1lbnUgaXRlbXMgY3VycmVudGx5CithdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4gQnV0IHdlIGRpZG4ndCBzcGVjaWZ5IGFueSB3aW5kb3cgb3Igc3ViCit3aW5kb3cgaW4gdGhlIHNpbXBsZSBleGFtcGxlLiBXaGVuIGEgd2luZG93IGlzIG5vdCBzcGVjaWZpZWQsCitzdGRzY3IgaXMgdGFrZW4gYXMgdGhlIG1haW4gd2luZG93LCBhbmQgdGhlbiBtZW51IHN5c3RlbSBjYWxjdWxhdGVzCit0aGUgc3ViIHdpbmRvdyBzaXplIHJlcXVpcmVkIGZvciB0aGUgZGlzcGxheSBvZiBpdGVtcy4gVGhlbiBpdGVtcworYXJlIGRpc3BsYXllZCBpbiB0aGUgY2FsY3VsYXRlZCBzdWIgd2luZG93LiBTbyBsZXQncyBwbGF5IHdpdGgKK3RoZXNlIHdpbmRvd3MgYW5kIGRpc3BsYXkgYSBtZW51IHdpdGggYSBib3JkZXIgYW5kIGEgdGl0bGUuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iTU1FV0kiIGlkPSJNTUVXSSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxOS4gTWVudSBXaW5kb3dzIFVzYWdlIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bWVudS5oJmd0OworCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgQ1RSTEQgICA0CisKK2NoYXIgKmNob2ljZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKU5VTEwsCisgICAgICAgICAgICAgICAgICB9Owordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nLCBjaHR5cGUgY29sb3IpOworCitpbnQgbWFpbigpCit7ICAgICAgIElURU0gKipteV9pdGVtczsKKyAgICAgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTUVOVSAqbXlfbWVudTsKKyAgICAgICAgV0lORE9XICpteV9tZW51X3dpbjsKKyAgICAgICAgaW50IG5fY2hvaWNlcywgaTsKKyAgICAgICAgCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworCisgICAgICAgIC8qIENyZWF0ZSBpdGVtcyAqLworICAgICAgICBuX2Nob2ljZXMgPSBBUlJBWV9TSVpFKGNob2ljZXMpOworICAgICAgICBteV9pdGVtcyA9IChJVEVNICoqKWNhbGxvYyhuX2Nob2ljZXMsIHNpemVvZihJVEVNICopKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgbXlfaXRlbXNbaV0gPSBuZXdfaXRlbShjaG9pY2VzW2ldLCBjaG9pY2VzW2ldKTsKKworICAgICAgICAvKiBDcmF0ZSBtZW51ICovCisgICAgICAgIG15X21lbnUgPSBuZXdfbWVudSgoSVRFTSAqKilteV9pdGVtcyk7CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSB3aW5kb3cgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW51ICovCisgICAgICAgIG15X21lbnVfd2luID0gbmV3d2luKDEwLCA0MCwgNCwgNCk7CisgICAgICAgIGtleXBhZChteV9tZW51X3dpbiwgVFJVRSk7CisgICAgIAorICAgICAgICAvKiBTZXQgbWFpbiB3aW5kb3cgYW5kIHN1YiB3aW5kb3cgKi8KKyAgICAgICAgc2V0X21lbnVfd2luKG15X21lbnUsIG15X21lbnVfd2luKTsKKyAgICAgICAgc2V0X21lbnVfc3ViKG15X21lbnUsIGRlcndpbihteV9tZW51X3dpbiwgNiwgMzgsIDMsIDEpKTsKKworICAgICAgICAvKiBTZXQgbWVudSBtYXJrIHRvIHRoZSBzdHJpbmcgIiAqICIgKi8KKyAgICAgICAgc2V0X21lbnVfbWFyayhteV9tZW51LCAiICogIik7CisKKyAgICAgICAgLyogUHJpbnQgYSBib3JkZXIgYXJvdW5kIHRoZSBtYWluIHdpbmRvdyBhbmQgcHJpbnQgYSB0aXRsZSAqLworICAgICAgICBib3gobXlfbWVudV93aW4sIDAsIDApOworICAgICAgICBwcmludF9pbl9taWRkbGUobXlfbWVudV93aW4sIDEsIDAsIDQwLCAiTXkgTWVudSIsIENPTE9SX1BBSVIoMSkpOworICAgICAgICBtdndhZGRjaChteV9tZW51X3dpbiwgMiwgMCwgQUNTX0xURUUpOworICAgICAgICBtdndobGluZShteV9tZW51X3dpbiwgMiwgMSwgQUNTX0hMSU5FLCAzOCk7CisgICAgICAgIG12d2FkZGNoKG15X21lbnVfd2luLCAyLCAzOSwgQUNTX1JURUUpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJGMSB0byBleGl0Iik7CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgCisgICAgICAgIC8qIFBvc3QgdGhlIG1lbnUgKi8KKyAgICAgICAgcG9zdF9tZW51KG15X21lbnUpOworICAgICAgICB3cmVmcmVzaChteV9tZW51X3dpbik7CisKKyAgICAgICAgd2hpbGUoKGMgPSB3Z2V0Y2gobXlfbWVudV93aW4pKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9ET1dOX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfVVBfSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cmVmcmVzaChteV9tZW51X3dpbik7CisgICAgICAgIH0gICAgICAgCisKKyAgICAgICAgLyogVW5wb3N0IGFuZCBmcmVlIGFsbCB0aGUgbWVtb3J5IHRha2VuIHVwICovCisgICAgICAgIHVucG9zdF9tZW51KG15X21lbnUpOworICAgICAgICBmcmVlX21lbnUobXlfbWVudSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1tpXSk7CisgICAgICAgIGVuZHdpbigpOworfQorCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcikKK3sgICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKyAgICAgICAgZmxvYXQgdGVtcDsKKworICAgICAgICBpZih3aW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3aW4gPSBzdGRzY3I7CisgICAgICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgICAgIGlmKHN0YXJ0eCAhPSAwKQorICAgICAgICAgICAgICAgIHggPSBzdGFydHg7CisgICAgICAgIGlmKHN0YXJ0eSAhPSAwKQorICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7CisgICAgICAgIGlmKHdpZHRoID09IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkvIDI7CisgICAgICAgIHggPSBzdGFydHggKyAoaW50KXRlbXA7CisgICAgICAgIHdhdHRyb24od2luLCBjb2xvcik7CisgICAgICAgIG12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7CisgICAgICAgIHdhdHRyb2ZmKHdpbiwgY29sb3IpOworICAgICAgICByZWZyZXNoKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+VGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBtZW51IHdpdGggYSB0aXRsZSwgYm9yZGVyLCBhIGZhbmN5IGxpbmUKK3NlcGFyYXRpbmcgdGl0bGUgYW5kIHRoZSBpdGVtcy4gQXMgeW91IGNhbiBzZWUsIGluIG9yZGVyIHRvIGF0dGFjaAorYSB3aW5kb3cgdG8gYSBtZW51IHRoZSBmdW5jdGlvbiBzZXRfbWVudV93aW4oKSBoYXMgdG8gYmUgdXNlZC4gVGhlbgord2UgYXR0YWNoIHRoZSBzdWIgd2luZG93IGFsc28uIFRoaXMgZGlzcGxheXMgdGhlIGl0ZW1zIGluIHRoZSBzdWIKK3dpbmRvdy4gWW91IGNhbiBhbHNvIHNldCB0aGUgbWFyayBzdHJpbmcgd2hpY2ggZ2V0cyBkaXNwbGF5ZWQgdG8KK3RoZSBsZWZ0IG9mIHRoZSBzZWxlY3RlZCBpdGVtIHdpdGggc2V0X21lbnVfbWFyaygpLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iU0NST0xMTUVOVVMiIGlkPSJTQ1JPTExNRU5VUyI+MTcuNS4KK1Njcm9sbGluZyBNZW51czwvYT48L2gzPgorPHA+SWYgdGhlIHN1YiB3aW5kb3cgZ2l2ZW4gZm9yIGEgd2luZG93IGlzIG5vdCBiaWcgZW5vdWdoIHRvIHNob3cKK2FsbCB0aGUgaXRlbXMsIHRoZW4gdGhlIG1lbnUgd2lsbCBiZSBzY3JvbGxhYmxlLiBXaGVuIHlvdSBhcmUgb24KK3RoZSBsYXN0IGl0ZW0gaW4gdGhlIHByZXNlbnQgbGlzdCwgaWYgeW91IHNlbmQgUkVRX0RPV05fSVRFTSwgaXQKK2dldHMgdHJhbnNsYXRlZCBpbnRvIFJFUV9TQ1JfRExJTkUgYW5kIHRoZSBtZW51IHNjcm9sbHMgYnkgb25lCitpdGVtLiBZb3UgY2FuIG1hbnVhbGx5IGdpdmUgUkVRX1NDUl8gb3BlcmF0aW9ucyB0byBkbyBzY3JvbGxpbmcuCitMZXQncyBzZWUgaG93IGl0IGNhbiBiZSBkb25lLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9Ik1NRVNDIiBpZD0iTU1FU0MiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjAuIFNjcm9sbGluZyBNZW51cyBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2N1cnNlcy5oJmd0OworI2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisjZGVmaW5lIENUUkxEICAgNAorCitjaGFyICpjaG9pY2VzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDciLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgOSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDEwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopTlVMTCwKKyAgICAgICAgICAgICAgICAgIH07Cit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcik7CisKK2ludCBtYWluKCkKK3sgICAgICAgSVRFTSAqKm15X2l0ZW1zOworICAgICAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBNRU5VICpteV9tZW51OworICAgICAgICBXSU5ET1cgKm15X21lbnVfd2luOworICAgICAgICBpbnQgbl9jaG9pY2VzLCBpOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9DWUFOLCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgLyogQ3JlYXRlIGl0ZW1zICovCisgICAgICAgIG5fY2hvaWNlcyA9IEFSUkFZX1NJWkUoY2hvaWNlcyk7CisgICAgICAgIG15X2l0ZW1zID0gKElURU0gKiopY2FsbG9jKG5fY2hvaWNlcywgc2l6ZW9mKElURU0gKikpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBteV9pdGVtc1tpXSA9IG5ld19pdGVtKGNob2ljZXNbaV0sIGNob2ljZXNbaV0pOworCisgICAgICAgIC8qIENyYXRlIG1lbnUgKi8KKyAgICAgICAgbXlfbWVudSA9IG5ld19tZW51KChJVEVNICoqKW15X2l0ZW1zKTsKKworICAgICAgICAvKiBDcmVhdGUgdGhlIHdpbmRvdyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUgKi8KKyAgICAgICAgbXlfbWVudV93aW4gPSBuZXd3aW4oMTAsIDQwLCA0LCA0KTsKKyAgICAgICAga2V5cGFkKG15X21lbnVfd2luLCBUUlVFKTsKKyAgICAgCisgICAgICAgIC8qIFNldCBtYWluIHdpbmRvdyBhbmQgc3ViIHdpbmRvdyAqLworICAgICAgICBzZXRfbWVudV93aW4obXlfbWVudSwgbXlfbWVudV93aW4pOworICAgICAgICBzZXRfbWVudV9zdWIobXlfbWVudSwgZGVyd2luKG15X21lbnVfd2luLCA2LCAzOCwgMywgMSkpOworICAgICAgICBzZXRfbWVudV9mb3JtYXQobXlfbWVudSwgNSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgLyogU2V0IG1lbnUgbWFyayB0byB0aGUgc3RyaW5nICIgKiAiICovCisgICAgICAgIHNldF9tZW51X21hcmsobXlfbWVudSwgIiAqICIpOworCisgICAgICAgIC8qIFByaW50IGEgYm9yZGVyIGFyb3VuZCB0aGUgbWFpbiB3aW5kb3cgYW5kIHByaW50IGEgdGl0bGUgKi8KKyAgICAgICAgYm94KG15X21lbnVfd2luLCAwLCAwKTsKKyAgICAgICAgcHJpbnRfaW5fbWlkZGxlKG15X21lbnVfd2luLCAxLCAwLCA0MCwgIk15IE1lbnUiLCBDT0xPUl9QQUlSKDEpKTsKKyAgICAgICAgbXZ3YWRkY2gobXlfbWVudV93aW4sIDIsIDAsIEFDU19MVEVFKTsKKyAgICAgICAgbXZ3aGxpbmUobXlfbWVudV93aW4sIDIsIDEsIEFDU19ITElORSwgMzgpOworICAgICAgICBtdndhZGRjaChteV9tZW51X3dpbiwgMiwgMzksIEFDU19SVEVFKTsKKyAgICAgICAgCisgICAgICAgIC8qIFBvc3QgdGhlIG1lbnUgKi8KKyAgICAgICAgcG9zdF9tZW51KG15X21lbnUpOworICAgICAgICB3cmVmcmVzaChteV9tZW51X3dpbik7CisgICAgICAgIAorICAgICAgICBhdHRyb24oQ09MT1JfUEFJUigyKSk7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIlVzZSBQYWdlVXAgYW5kIFBhZ2VEb3duIHRvIHNjb2xsIGRvd24gb3IgdXAgYSBwYWdlIG9mIGl0ZW1zIik7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMSwgMCwgIkFycm93IEtleXMgdG8gbmF2aWdhdGUgKEYxIHRvIEV4aXQpIik7CisgICAgICAgIGF0dHJvZmYoQ09MT1JfUEFJUigyKSk7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICB3aGlsZSgoYyA9IHdnZXRjaChteV9tZW51X3dpbikpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0RPV05fSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9VUF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9OUEFHRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1NDUl9EUEFHRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfUFBBR0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9TQ1JfVVBBR0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3JlZnJlc2gobXlfbWVudV93aW4pOworICAgICAgICB9ICAgICAgIAorCisgICAgICAgIC8qIFVucG9zdCBhbmQgZnJlZSBhbGwgdGhlIG1lbW9yeSB0YWtlbiB1cCAqLworICAgICAgICB1bnBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgZnJlZV9tZW51KG15X21lbnUpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBmcmVlX2l0ZW0obXlfaXRlbXNbaV0pOworICAgICAgICBlbmR3aW4oKTsKK30KKwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nLCBjaHR5cGUgY29sb3IpCit7ICAgICAgIGludCBsZW5ndGgsIHgsIHk7CisgICAgICAgIGZsb2F0IHRlbXA7CisKKyAgICAgICAgaWYod2luID09IE5VTEwpCisgICAgICAgICAgICAgICAgd2luID0gc3Rkc2NyOworICAgICAgICBnZXR5eCh3aW4sIHksIHgpOworICAgICAgICBpZihzdGFydHggIT0gMCkKKyAgICAgICAgICAgICAgICB4ID0gc3RhcnR4OworICAgICAgICBpZihzdGFydHkgIT0gMCkKKyAgICAgICAgICAgICAgICB5ID0gc3RhcnR5OworICAgICAgICBpZih3aWR0aCA9PSAwKQorICAgICAgICAgICAgICAgIHdpZHRoID0gODA7CisKKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIHRlbXAgPSAod2lkdGggLSBsZW5ndGgpLyAyOworICAgICAgICB4ID0gc3RhcnR4ICsgKGludCl0ZW1wOworICAgICAgICB3YXR0cm9uKHdpbiwgY29sb3IpOworICAgICAgICBtdndwcmludHcod2luLCB5LCB4LCAiJXMiLCBzdHJpbmcpOworICAgICAgICB3YXR0cm9mZih3aW4sIGNvbG9yKTsKKyAgICAgICAgcmVmcmVzaCgpOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPlRoaXMgcHJvZ3JhbSBpcyBzZWxmLWV4cGxhbmF0b3J5LiBJbiB0aGlzIGV4YW1wbGUgdGhlIG51bWJlciBvZgorY2hvaWNlcyBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gdGVuLCB3aGljaCBpcyBsYXJnZXIgdGhhbiBvdXIgc3ViCit3aW5kb3cgc2l6ZSB3aGljaCBjYW4gaG9sZCA2IGl0ZW1zLiBUaGlzIG1lc3NhZ2UgaGFzIHRvIGJlCitleHBsaWNpdGx5IGNvbnZleWVkIHRvIHRoZSBtZW51IHN5c3RlbSB3aXRoIHRoZSBmdW5jdGlvbgorc2V0X21lbnVfZm9ybWF0KCkuIEluIGhlcmUgd2Ugc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kCitjb2x1bW5zIHdlIHdhbnQgdG8gYmUgZGlzcGxheWVkIGZvciBhIHNpbmdsZSBwYWdlLiBXZSBjYW4gc3BlY2lmeQorYW55IG51bWJlciBvZiBpdGVtcyB0byBiZSBzaG93biwgaW4gdGhlIHJvd3MgdmFyaWFibGVzLCBpZiBpdCBpcworbGVzcyB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIHN1YiB3aW5kb3cuIElmIHRoZSBrZXkgcHJlc3NlZCBieSB0aGUKK3VzZXIgaXMgYSBQQUdFIFVQIG9yIFBBR0UgRE9XTiwgdGhlIG1lbnUgaXMgc2Nyb2xsZWQgYSBwYWdlIGR1ZSB0bwordGhlIHJlcXVlc3RzIChSRVFfU0NSX0RQQUdFIGFuZCBSRVFfU0NSX1VQQUdFKSBnaXZlbiB0bworbWVudV9kcml2ZXIoKS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1VTFRJQ09MVU1OIiBpZD0iTVVMVElDT0xVTU4iPjE3LjYuCitNdWx0aSBDb2x1bW5hciBNZW51czwvYT48L2gzPgorPHA+SW4gdGhlIGFib3ZlIGV4YW1wbGUgeW91IGhhdmUgc2VlbiBob3cgdG8gdXNlIHRoZSBmdW5jdGlvbgorc2V0X21lbnVfZm9ybWF0KCkuIEkgZGlkbid0IG1lbnRpb24gd2hhdCB0aGUgY29scyB2YXJpYWJsZSAodGhpcmQKK3BhcmFtZXRlcikgZG9lcy4gV2VsbCwgSWYgeW91ciBzdWIgd2luZG93IGlzIHdpZGUgZW5vdWdoLCB5b3UgY2FuCitvcHQgdG8gZGlzcGxheSBtb3JlIHRoYW4gb25lIGl0ZW0gcGVyIHJvdy4gVGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluCit0aGUgY29scyB2YXJpYWJsZS4gVG8gbWFrZSB0aGluZ3Mgc2ltcGxlciwgdGhlIGZvbGxvd2luZyBleGFtcGxlCitkb2Vzbid0IHNob3cgZGVzY3JpcHRpb25zIGZvciB0aGUgaXRlbXMuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iTU1FTVVDTyIgaWQ9Ik1NRU1VQ08iPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjEuIE1pbHQgQ29sdW1uYXIgTWVudXMgRXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtjdXJzZXMuaCZndDsKKyNpbmNsdWRlICZsdDttZW51LmgmZ3Q7CisKKyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorI2RlZmluZSBDVFJMRCAgIDQKKworY2hhciAqY2hvaWNlc1tdID0geworICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxIiwgIkNob2ljZSAyIiwgIkNob2ljZSAzIiwgIkNob2ljZSA0IiwgIkNob2ljZSA1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNiIsICJDaG9pY2UgNyIsICJDaG9pY2UgOCIsICJDaG9pY2UgOSIsICJDaG9pY2UgMTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxMSIsICJDaG9pY2UgMTIiLCAiQ2hvaWNlIDEzIiwgIkNob2ljZSAxNCIsICJDaG9pY2UgMTUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxNiIsICJDaG9pY2UgMTciLCAiQ2hvaWNlIDE4IiwgIkNob2ljZSAxOSIsICJDaG9pY2UgMjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4aXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilOVUxMLAorICAgICAgICAgICAgICAgICAgfTsKKworaW50IG1haW4oKQoreyAgICAgICBJVEVNICoqbXlfaXRlbXM7CisgICAgICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1FTlUgKm15X21lbnU7CisgICAgICAgIFdJTkRPVyAqbXlfbWVudV93aW47CisgICAgICAgIGludCBuX2Nob2ljZXMsIGk7CisgICAgICAgIAorICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0NZQU4sIENPTE9SX0JMQUNLKTsKKworICAgICAgICAvKiBDcmVhdGUgaXRlbXMgKi8KKyAgICAgICAgbl9jaG9pY2VzID0gQVJSQVlfU0laRShjaG9pY2VzKTsKKyAgICAgICAgbXlfaXRlbXMgPSAoSVRFTSAqKiljYWxsb2Mobl9jaG9pY2VzLCBzaXplb2YoSVRFTSAqKSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIG15X2l0ZW1zW2ldID0gbmV3X2l0ZW0oY2hvaWNlc1tpXSwgY2hvaWNlc1tpXSk7CisKKyAgICAgICAgLyogQ3JhdGUgbWVudSAqLworICAgICAgICBteV9tZW51ID0gbmV3X21lbnUoKElURU0gKiopbXlfaXRlbXMpOworCisgICAgICAgIC8qIFNldCBtZW51IG9wdGlvbiBub3QgdG8gc2hvdyB0aGUgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgbWVudV9vcHRzX29mZihteV9tZW51LCBPX1NIT1dERVNDKTsKKworICAgICAgICAvKiBDcmVhdGUgdGhlIHdpbmRvdyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUgKi8KKyAgICAgICAgbXlfbWVudV93aW4gPSBuZXd3aW4oMTAsIDcwLCA0LCA0KTsKKyAgICAgICAga2V5cGFkKG15X21lbnVfd2luLCBUUlVFKTsKKyAgICAgCisgICAgICAgIC8qIFNldCBtYWluIHdpbmRvdyBhbmQgc3ViIHdpbmRvdyAqLworICAgICAgICBzZXRfbWVudV93aW4obXlfbWVudSwgbXlfbWVudV93aW4pOworICAgICAgICBzZXRfbWVudV9zdWIobXlfbWVudSwgZGVyd2luKG15X21lbnVfd2luLCA2LCA2OCwgMywgMSkpOworICAgICAgICBzZXRfbWVudV9mb3JtYXQobXlfbWVudSwgNSwgMyk7CisgICAgICAgIHNldF9tZW51X21hcmsobXlfbWVudSwgIiAqICIpOworCisgICAgICAgIC8qIFByaW50IGEgYm9yZGVyIGFyb3VuZCB0aGUgbWFpbiB3aW5kb3cgYW5kIHByaW50IGEgdGl0bGUgKi8KKyAgICAgICAgYm94KG15X21lbnVfd2luLCAwLCAwKTsKKyAgICAgICAgCisgICAgICAgIGF0dHJvbihDT0xPUl9QQUlSKDIpKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAzLCAwLCAiVXNlIFBhZ2VVcCBhbmQgUGFnZURvd24gdG8gc2Nyb2xsIik7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIlVzZSBBcnJvdyBLZXlzIHRvIG5hdmlnYXRlIChGMSB0byBFeGl0KSIpOworICAgICAgICBhdHRyb2ZmKENPTE9SX1BBSVIoMikpOworICAgICAgICByZWZyZXNoKCk7CisKKyAgICAgICAgLyogUG9zdCB0aGUgbWVudSAqLworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHdyZWZyZXNoKG15X21lbnVfd2luKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlKChjID0gd2dldGNoKG15X21lbnVfd2luKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfRE9XTl9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1VQX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9MRUZUX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1JJR0hUOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfUklHSFRfSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfTlBBR0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9TQ1JfRFBBR0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1BQQUdFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfU0NSX1VQQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyZWZyZXNoKG15X21lbnVfd2luKTsKKyAgICAgICAgfSAgICAgICAKKworICAgICAgICAvKiBVbnBvc3QgYW5kIGZyZWUgYWxsIHRoZSBtZW1vcnkgdGFrZW4gdXAgKi8KKyAgICAgICAgdW5wb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIGZyZWVfbWVudShteV9tZW51KTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgZnJlZV9pdGVtKG15X2l0ZW1zW2ldKTsKKyAgICAgICAgZW5kd2luKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+V2F0Y2ggdGhlIGZ1bmN0aW9uIGNhbGwgdG8gc2V0X21lbnVfZm9ybWF0KCkuIEl0IHNwZWNpZmllcyB0aGUKK251bWJlciBvZiBjb2x1bW5zIHRvIGJlIDMsIHRodXMgZGlzcGxheWluZyAzIGl0ZW1zIHBlciByb3cuIFdlIGhhdmUKK2Fsc28gc3dpdGNoZWQgb2ZmIHRoZSBzaG93aW5nIGRlc2NyaXB0aW9ucyB3aXRoIHRoZSBmdW5jdGlvbgorbWVudV9vcHRzX29mZigpLiBUaGVyZSBhcmUgY291cGxlIG9mIGZ1bmN0aW9ucyBzZXRfbWVudV9vcHRzKCksCittZW51X29wdHNfb24oKSBhbmQgbWVudV9vcHRzKCkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSBtZW51CitvcHRpb25zLiBUaGUgZm9sbG93aW5nIG1lbnUgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgICAgT19PTkVWQUxVRQorICAgICAgICAgICAgT25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoaXMgbWVudS4KKworICAgICAgIE9fU0hPV0RFU0MKKyAgICAgICAgICAgIERpc3BsYXkgIHRoZSAgaXRlbSAgZGVzY3JpcHRpb25zICB3aGVuICB0aGUgIG1lbnUgIGlzCisgICAgICAgICAgICBwb3N0ZWQuCisKKyAgICAgICBPX1JPV01BSk9SCisgICAgICAgICAgICBEaXNwbGF5IHRoZSBtZW51IGluIHJvdy1tYWpvciBvcmRlci4KKworICAgICAgIE9fSUdOT1JFQ0FTRQorICAgICAgICAgICAgSWdub3JlIHRoZSBjYXNlIHdoZW4gcGF0dGVybi1tYXRjaGluZy4KKworICAgICAgIE9fU0hPV01BVENICisgICAgICAgICAgICBNb3ZlIHRoZSBjdXJzb3IgdG8gd2l0aGluIHRoZSBpdGVtICBuYW1lICB3aGlsZSAgcGF0JnNoeTsKKyAgICAgICAgICAgIHRlcm4tbWF0Y2hpbmcuCisKKyAgICAgICBPX05PTkNZQ0xJQworICAgICAgICAgICAgRG9uJ3QgICB3cmFwICAgYXJvdW5kICBuZXh0LWl0ZW0gIGFuZCAgcHJldmlvdXMtaXRlbSwKKyAgICAgICAgICAgIHJlcXVlc3RzIHRvIHRoZSBvdGhlciBlbmQgb2YgdGhlIG1lbnUuPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+QWxsIG9wdGlvbnMgYXJlIG9uIGJ5IGRlZmF1bHQuIFlvdSBjYW4gc3dpdGNoIHNwZWNpZmljCithdHRyaWJ1dGVzIG9uIG9yIG9mZiB3aXRoIG1lbnVfb3B0c19vbigpIGFuZCBtZW51X29wdHNfb2ZmKCkKK2Z1bmN0aW9ucy4gWW91IGNhbiBhbHNvIHVzZSBzZXRfbWVudV9vcHRzKCkgdG8gZGlyZWN0bHkgc3BlY2lmeSB0aGUKK29wdGlvbnMuIFRoZSBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBhIE9SIGVkIHZhbHVlIG9mCitzb21lIG9mIHRob3NlIGFib3ZlIGNvbnN0YW50cy4gVGhlIGZ1bmN0aW9uIG1lbnVfb3B0cygpIGNhbiBiZSB1c2VkCit0byBmaW5kIG91dCBhIG1lbnUncyBwcmVzZW50IG9wdGlvbnMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJNVUxUSVZBTFVFTUVOVVMiIGlkPQorIk1VTFRJVkFMVUVNRU5VUyI+MTcuNy4gTXVsdGkgVmFsdWVkIE1lbnVzPC9hPjwvaDM+Cis8cD5Zb3UgbWlnaHQgYmUgd29uZGVyaW5nIHdoYXQgaWYgeW91IHN3aXRjaCBvZmYgdGhlIG9wdGlvbgorT19PTkVWQUxVRS4gVGhlbiB0aGUgbWVudSBiZWNvbWVzIG11bHRpLXZhbHVlZC4gVGhhdCBtZWFucyB5b3UgY2FuCitzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtLiBUaGlzIGJyaW5ncyB1cyB0byB0aGUgcmVxdWVzdAorUkVRX1RPR0dMRV9JVEVNLiBMZXQncyBzZWUgaXQgaW4gYWN0aW9uLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9Ik1NRVRPIiBpZD0iTU1FVE8iPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjIuIE11bHRpIFZhbHVlZCBNZW51cyBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2N1cnNlcy5oJmd0OworI2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisjZGVmaW5lIENUUkxEICAgNAorCitjaGFyICpjaG9pY2VzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDciLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4aXQiLAorICAgICAgICAgICAgICAgICAgfTsKKworaW50IG1haW4oKQoreyAgICAgICBJVEVNICoqbXlfaXRlbXM7CisgICAgICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1FTlUgKm15X21lbnU7CisgICAgICAgIGludCBuX2Nob2ljZXMsIGk7CisgICAgICAgIElURU0gKmN1cl9pdGVtOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8gCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGl0ZW1zICovCisgICAgICAgIG5fY2hvaWNlcyA9IEFSUkFZX1NJWkUoY2hvaWNlcyk7CisgICAgICAgIG15X2l0ZW1zID0gKElURU0gKiopY2FsbG9jKG5fY2hvaWNlcyArIDEsIHNpemVvZihJVEVNICopKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgbXlfaXRlbXNbaV0gPSBuZXdfaXRlbShjaG9pY2VzW2ldLCBjaG9pY2VzW2ldKTsKKyAgICAgICAgbXlfaXRlbXNbbl9jaG9pY2VzXSA9IChJVEVNICopTlVMTDsKKworICAgICAgICBteV9tZW51ID0gbmV3X21lbnUoKElURU0gKiopbXlfaXRlbXMpOworCisgICAgICAgIC8qIE1ha2UgdGhlIG1lbnUgbXVsdGkgdmFsdWVkICovCisgICAgICAgIG1lbnVfb3B0c19vZmYobXlfbWVudSwgT19PTkVWQUxVRSk7CisKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAzLCAwLCAiVXNlICZsdDtTUEFDRSZndDsgdG8gc2VsZWN0IG9yIHVuc2VsZWN0IGFuIGl0ZW0uIik7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIiZsdDtFTlRFUiZndDsgdG8gc2VlIHByZXNlbnRseSBzZWxlY3RlZCBpdGVtcyhGMSB0byBFeGl0KSIpOworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICB3aGlsZSgoYyA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0RPV05fSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9VUF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1RPR0dMRV9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAgICAgICAgLyogRW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgY2hhciB0ZW1wWzIwMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElURU0gKippdGVtczsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IG1lbnVfaXRlbXMobXlfbWVudSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBpdGVtX2NvdW50KG15X21lbnUpOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbV92YWx1ZShpdGVtc1tpXSkgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIHN0cmNhdCh0ZW1wLCBpdGVtX25hbWUoaXRlbXNbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCh0ZW1wLCAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSgyMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12cHJpbnR3KDIwLCAwLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgIAorCisgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1swXSk7CisgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1sxXSk7CisgICAgICAgIGZyZWVfbWVudShteV9tZW51KTsKKyAgICAgICAgZW5kd2luKCk7Cit9CisgICAgICAgIDwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPldoZXcsIEEgbG90IG9mIG5ldyBmdW5jdGlvbnMuIExldCdzIHRha2UgdGhlbSBvbmUgYWZ0ZXIgYW5vdGhlci4KK0ZpcnN0bHksIHRoZSBSRVFfVE9HR0xFX0lURU0uIEluIGEgbXVsdGktdmFsdWVkIG1lbnUsIHRoZSB1c2VyCitzaG91bGQgYmUgYWxsb3dlZCB0byBzZWxlY3Qgb3IgdW4gc2VsZWN0IG1vcmUgdGhhbiBvbmUgaXRlbS4gVGhlCityZXF1ZXN0IFJFUV9UT0dHTEVfSVRFTSB0b2dnbGVzIHRoZSBwcmVzZW50IHNlbGVjdGlvbi4gSW4gdGhpcyBjYXNlCit3aGVuIHNwYWNlIGlzIHByZXNzZWQgUkVRX1RPR0dMRV9JVEVNIHJlcXVlc3QgaXMgc2VudCB0bworbWVudV9kcml2ZXIgdG8gYWNoaWV2ZSB0aGUgcmVzdWx0LjwvcD4KKzxwPk5vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgJmx0O0VOVEVSJmd0OyB3ZSBzaG93IHRoZSBpdGVtcyBoZQorcHJlc2VudGx5IHNlbGVjdGVkLiBGaXJzdCB3ZSBmaW5kIG91dCB0aGUgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorbWVudSB1c2luZyB0aGUgZnVuY3Rpb24gbWVudV9pdGVtcygpLiBUaGVuIHdlIGxvb3AgdGhyb3VnaCB0aGUKK2l0ZW1zIHRvIGZpbmQgb3V0IGlmIHRoZSBpdGVtIGlzIHNlbGVjdGVkIG9yIG5vdC4gVGhlIGZ1bmN0aW9uCitpdGVtX3ZhbHVlKCkgcmV0dXJucyBUUlVFIGlmIGFuIGl0ZW0gaXMgc2VsZWN0ZWQuIFRoZSBmdW5jdGlvbgoraXRlbV9jb3VudCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbWVudS4gVGhlIGl0ZW0gbmFtZQorY2FuIGJlIGZvdW5kIHdpdGggaXRlbV9uYW1lKCkuIFlvdSBjYW4gYWxzbyBmaW5kIHRoZSBkZXNjcmlwdGlvbgorYXNzb2NpYXRlZCB3aXRoIGFuIGl0ZW0gdXNpbmcgaXRlbV9kZXNjcmlwdGlvbigpLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUVOVU9QVCIgaWQ9Ik1FTlVPUFQiPjE3LjguIE1lbnUKK09wdGlvbnM8L2E+PC9oMz4KKzxwPldlbGwsIGJ5IHRoaXMgdGltZSB5b3UgbXVzdCBiZSBpdGNoaW5nIGZvciBzb21lIGRpZmZlcmVuY2UgaW4KK3lvdXIgbWVudSwgd2l0aCBsb3RzIG9mIGZ1bmN0aW9uYWxpdHkuIEkga25vdy4gWW91IHdhbnQgQ29sb3JzICEhIS4KK1lvdSB3YW50IHRvIGNyZWF0ZSBuaWNlIG1lbnVzIHNpbWlsYXIgdG8gdGhvc2UgdGV4dCBtb2RlIDxhIGhyZWY9CisiaHR0cDovL3d3dy5qZXJzZXkubmV0L35kZWJpbmpvZS9nYW1lcy8iIHRhcmdldD0iX3RvcCI+ZG9zCitnYW1lczwvYT4uIFRoZSBmdW5jdGlvbnMgc2V0X21lbnVfZm9yZSgpIGFuZCBzZXRfbWVudV9iYWNrKCkgY2FuIGJlCit1c2VkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlIG9mIHRoZSBzZWxlY3RlZCBpdGVtIGFuZCB1bnNlbGVjdGVkCitpdGVtLiBUaGUgbmFtZXMgYXJlIG1pc2xlYWRpbmcuIFRoZXkgZG9uJ3QgY2hhbmdlIG1lbnUncyBmb3JlZ3JvdW5kCitvciBiYWNrZ3JvdW5kIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiB1c2VsZXNzLjwvcD4KKzxwPlRoZSBmdW5jdGlvbiBzZXRfbWVudV9ncmV5KCkgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkaXNwbGF5CithdHRyaWJ1dGUgZm9yIHRoZSBub24tc2VsZWN0YWJsZSBpdGVtcyBpbiB0aGUgbWVudS4gVGhpcyBicmluZ3MgdXMKK3RvIHRoZSBpbnRlcmVzdGluZyBvcHRpb24gZm9yIGFuIGl0ZW0gdGhlIG9uZSBhbmQgb25seQorT19TRUxFQ1RBQkxFLiBXZSBjYW4gdHVybiBpdCBvZmYgYnkgdGhlIGZ1bmN0aW9uIGl0ZW1fb3B0c19vZmYoKQorYW5kIGFmdGVyIHRoYXQgdGhhdCBpdGVtIGlzIG5vdCBzZWxlY3RhYmxlLiBJdCdzIGxpa2UgYSBncmF5ZWQgaXRlbQoraW4gdGhvc2UgZmFuY3kgd2luZG93cyBtZW51cy4gTGV0J3MgcHV0IHRoZXNlIGNvbmNlcHRzIGluIHByYWN0aWNlCit3aXRoIHRoaXMgZXhhbXBsZTwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9Ik1NRUFUIiBpZD0iTU1FQVQiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjMuIE1lbnUgT3B0aW9ucyBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisjZGVmaW5lIENUUkxEICAgNAorCitjaGFyICpjaG9pY2VzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDciLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4aXQiLAorICAgICAgICAgICAgICAgICAgfTsKKworaW50IG1haW4oKQoreyAgICAgICBJVEVNICoqbXlfaXRlbXM7CisgICAgICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1FTlUgKm15X21lbnU7CisgICAgICAgIGludCBuX2Nob2ljZXMsIGk7CisgICAgICAgIElURU0gKmN1cl9pdGVtOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8gCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMiwgQ09MT1JfR1JFRU4sIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDMsIENPTE9SX01BR0VOVEEsIENPTE9SX0JMQUNLKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGl0ZW1zICovCisgICAgICAgIG5fY2hvaWNlcyA9IEFSUkFZX1NJWkUoY2hvaWNlcyk7CisgICAgICAgIG15X2l0ZW1zID0gKElURU0gKiopY2FsbG9jKG5fY2hvaWNlcyArIDEsIHNpemVvZihJVEVNICopKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgbXlfaXRlbXNbaV0gPSBuZXdfaXRlbShjaG9pY2VzW2ldLCBjaG9pY2VzW2ldKTsKKyAgICAgICAgbXlfaXRlbXNbbl9jaG9pY2VzXSA9IChJVEVNICopTlVMTDsKKyAgICAgICAgaXRlbV9vcHRzX29mZihteV9pdGVtc1szXSwgT19TRUxFQ1RBQkxFKTsKKyAgICAgICAgaXRlbV9vcHRzX29mZihteV9pdGVtc1s2XSwgT19TRUxFQ1RBQkxFKTsKKworICAgICAgICAvKiBDcmVhdGUgbWVudSAqLworICAgICAgICBteV9tZW51ID0gbmV3X21lbnUoKElURU0gKiopbXlfaXRlbXMpOworCisgICAgICAgIC8qIFNldCBmb3JlIGdyb3VuZCBhbmQgYmFjayBncm91bmQgb2YgdGhlIG1lbnUgKi8KKyAgICAgICAgc2V0X21lbnVfZm9yZShteV9tZW51LCBDT0xPUl9QQUlSKDEpIHwgQV9SRVZFUlNFKTsKKyAgICAgICAgc2V0X21lbnVfYmFjayhteV9tZW51LCBDT0xPUl9QQUlSKDIpKTsKKyAgICAgICAgc2V0X21lbnVfZ3JleShteV9tZW51LCBDT0xPUl9QQUlSKDMpKTsKKworICAgICAgICAvKiBQb3N0IHRoZSBtZW51ICovCisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMywgMCwgIlByZXNzICZsdDtFTlRFUiZndDsgdG8gc2VlIHRoZSBvcHRpb24gc2VsZWN0ZWQiKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXAgYW5kIERvd24gYXJyb3cga2V5cyB0byBuYXZpYWdlIChGMSB0byBFeGl0KSIpOworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICB3aGlsZSgoYyA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0RPV05fSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9VUF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAvKiBFbnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKDIwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXZwcmludHcoMjAsIDAsICJJdGVtIHNlbGVjdGVkIGlzIDogJXMiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZShjdXJyZW50X2l0ZW0obXlfbWVudSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zX21lbnVfY3Vyc29yKG15X21lbnUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgCisgICAgICAgIHVucG9zdF9tZW51KG15X21lbnUpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBmcmVlX2l0ZW0obXlfaXRlbXNbaV0pOworICAgICAgICBmcmVlX21lbnUobXlfbWVudSk7CisgICAgICAgIGVuZHdpbigpOworfQorICAgICAgICA8L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1FTlVVU0VSUFRSIiBpZD0iTUVOVVVTRVJQVFIiPjE3LjkuIFRoZQordXNlZnVsIFVzZXIgUG9pbnRlcjwvYT48L2gzPgorPHA+V2UgY2FuIGFzc29jaWF0ZSBhIHVzZXIgcG9pbnRlciB3aXRoIGVhY2ggaXRlbSBpbiB0aGUgbWVudS4gSXQKK3dvcmtzIHRoZSBzYW1lIHdheSBhcyB1c2VyIHBvaW50ZXIgaW4gcGFuZWxzLiBJdCdzIG5vdCB0b3VjaGVkIGJ5CittZW51IHN5c3RlbS4gWW91IGNhbiBzdG9yZSBhbnkgdGhpbmcgeW91IGxpa2UgaW4gdGhhdC4gSSB1c3VhbGx5Cit1c2UgaXQgdG8gc3RvcmUgdGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1lbnUgb3B0aW9uIGlzCitjaG9zZW4gKEl0J3Mgc2VsZWN0ZWQgYW5kIG1heSBiZSB0aGUgdXNlciBwcmVzc2VkCismbHQ7RU5URVImZ3Q7KTs8L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJNTUVVUyIgaWQ9Ik1NRVVTIj48L2E+Cis8cD48Yj5FeGFtcGxlIDI0LiBNZW51IFVzZXIgUG9pbnRlciBVc2FnZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtjdXJzZXMuaCZndDsKKyNpbmNsdWRlICZsdDttZW51LmgmZ3Q7CisKKyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorI2RlZmluZSBDVFJMRCAgIDQKKworY2hhciAqY2hvaWNlc1tdID0geworICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDYiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0IiwKKyAgICAgICAgICAgICAgICAgIH07Cit2b2lkIGZ1bmMoY2hhciAqbmFtZSk7CisKK2ludCBtYWluKCkKK3sgICAgICAgSVRFTSAqKm15X2l0ZW1zOworICAgICAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBNRU5VICpteV9tZW51OworICAgICAgICBpbnQgbl9jaG9pY2VzLCBpOworICAgICAgICBJVEVNICpjdXJfaXRlbTsKKyAgICAgICAgCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovIAorICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0dSRUVOLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigzLCBDT0xPUl9NQUdFTlRBLCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBpdGVtcyAqLworICAgICAgICBuX2Nob2ljZXMgPSBBUlJBWV9TSVpFKGNob2ljZXMpOworICAgICAgICBteV9pdGVtcyA9IChJVEVNICoqKWNhbGxvYyhuX2Nob2ljZXMgKyAxLCBzaXplb2YoSVRFTSAqKSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICB7ICAgICAgIG15X2l0ZW1zW2ldID0gbmV3X2l0ZW0oY2hvaWNlc1tpXSwgY2hvaWNlc1tpXSk7CisgICAgICAgICAgICAgICAgLyogU2V0IHRoZSB1c2VyIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICBzZXRfaXRlbV91c2VycHRyKG15X2l0ZW1zW2ldLCBmdW5jKTsKKyAgICAgICAgfQorICAgICAgICBteV9pdGVtc1tuX2Nob2ljZXNdID0gKElURU0gKilOVUxMOworCisgICAgICAgIC8qIENyZWF0ZSBtZW51ICovCisgICAgICAgIG15X21lbnUgPSBuZXdfbWVudSgoSVRFTSAqKilteV9pdGVtcyk7CisKKyAgICAgICAgLyogUG9zdCB0aGUgbWVudSAqLworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDMsIDAsICJQcmVzcyAmbHQ7RU5URVImZ3Q7IHRvIHNlZSB0aGUgb3B0aW9uIHNlbGVjdGVkIik7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIlVwIGFuZCBEb3duIGFycm93IGtleXMgdG8gbmF2aWFnZSAoRjEgdG8gRXhpdCkiKTsKKyAgICAgICAgcG9zdF9tZW51KG15X21lbnUpOworICAgICAgICByZWZyZXNoKCk7CisKKyAgICAgICAgd2hpbGUoKGMgPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9ET1dOX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfVVBfSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDogLyogRW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgSVRFTSAqY3VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcCkoY2hhciAqKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXJyZW50X2l0ZW0obXlfbWVudSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBpdGVtX3VzZXJwdHIoY3VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCgoY2hhciAqKWl0ZW1fbmFtZShjdXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zX21lbnVfY3Vyc29yKG15X21lbnUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAKKyAgICAgICAgdW5wb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1tpXSk7CisgICAgICAgIGZyZWVfbWVudShteV9tZW51KTsKKyAgICAgICAgZW5kd2luKCk7Cit9CisKK3ZvaWQgZnVuYyhjaGFyICpuYW1lKQoreyAgICAgICBtb3ZlKDIwLCAwKTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgbXZwcmludHcoMjAsIDAsICJJdGVtIHNlbGVjdGVkIGlzIDogJXMiLCBuYW1lKTsKK30gICAgICAgPC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IkZPUk1TIiBpZD0iRk9STVMiPjE4LiBGb3JtcworTGlicmFyeTwvYT48L2gyPgorPHA+V2VsbC4gSWYgeW91IGhhdmUgc2VlbiB0aG9zZSBmb3JtcyBvbiB3ZWIgcGFnZXMgd2hpY2ggdGFrZSBpbnB1dAorZnJvbSB1c2VycyBhbmQgZG8gdmFyaW91cyBraW5kcyBvZiB0aGluZ3MsIHlvdSBtaWdodCBiZSB3b25kZXJpbmcKK2hvdyB3b3VsZCBhbnkgb25lIGNyZWF0ZSBzdWNoIGZvcm1zIGluIHRleHQgbW9kZSBkaXNwbGF5LiBJdCdzCitxdWl0ZSBkaWZmaWN1bHQgdG8gd3JpdGUgdGhvc2UgbmlmdHkgZm9ybXMgaW4gcGxhaW4gbmN1cnNlcy4gRm9ybXMKK2xpYnJhcnkgdHJpZXMgdG8gcHJvdmlkZSBhIGJhc2ljIGZyYW1lIHdvcmsgdG8gYnVpbGQgYW5kIG1haW50YWluCitmb3JtcyB3aXRoIGVhc2UuIEl0IGhhcyBsb3Qgb2YgZmVhdHVyZXMoZnVuY3Rpb25zKSB3aGljaCBtYW5hZ2UKK3ZhbGlkYXRpb24sIGR5bmFtaWMgZXhwYW5zaW9uIG9mIGZpZWxkcyBldGMuLiBMZXQncyBzZWUgaXQgaW4gZnVsbAorZmxvdy48L3A+Cis8cD5BIGZvcm0gaXMgYSBjb2xsZWN0aW9uIG9mIGZpZWxkczsgZWFjaCBmaWVsZCBjYW4gYmUgZWl0aGVyIGEKK2xhYmVsKHN0YXRpYyB0ZXh0KSBvciBhIGRhdGEtZW50cnkgbG9jYXRpb24uIFRoZSBmb3JtcyBhbHNvIGxpYnJhcnkKK3Byb3ZpZGVzIGZ1bmN0aW9ucyB0byBkaXZpZGUgZm9ybXMgaW50byBtdWx0aXBsZSBwYWdlcy48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJGT1JNQkFTSUNTIiBpZD0iRk9STUJBU0lDUyI+MTguMS4gVGhlCitCYXNpY3M8L2E+PC9oMz4KKzxwPkZvcm1zIGFyZSBjcmVhdGVkIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIG1lbnVzLiBGaXJzdCB0aGUKK2ZpZWxkcyByZWxhdGVkIHRvIHRoZSBmb3JtIGFyZSBjcmVhdGVkIHdpdGggbmV3X2ZpZWxkKCkuIFlvdSBjYW4KK3NldCBvcHRpb25zIGZvciB0aGUgZmllbGRzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGRpc3BsYXllZCB3aXRoIHNvbWUKK2ZhbmN5IGF0dHJpYnV0ZXMsIHZhbGlkYXRlZCBiZWZvcmUgdGhlIGZpZWxkIGxvb3NlcyBmb2N1cyBldGMuLgorVGhlbiB0aGUgZmllbGRzIGFyZSBhdHRhY2hlZCB0byBmb3JtLiBBZnRlciB0aGlzLCB0aGUgZm9ybSBjYW4gYmUKK3Bvc3RlZCB0byBkaXNwbGF5IGFuZCBpcyByZWFkeSB0byByZWNlaXZlIGlucHV0cy4gT24gdGhlIHNpbWlsYXIKK2xpbmVzIHRvIG1lbnVfZHJpdmVyKCksIHRoZSBmb3JtIGlzIG1hbmlwdWxhdGVkIHdpdGggZm9ybV9kcml2ZXIoKS4KK1dlIGNhbiBzZW5kIHJlcXVlc3RzIHRvIGZvcm1fZHJpdmVyIHRvIG1vdmUgZm9jdXMgdG8gYSBjZXJ0YWluCitmaWVsZCwgbW92ZSBjdXJzb3IgdG8gZW5kIG9mIHRoZSBmaWVsZCBldGMuLiBBZnRlciB0aGUgdXNlciBlbnRlcnMKK3ZhbHVlcyBpbiB0aGUgZmllbGRzIGFuZCB2YWxpZGF0aW9uIGRvbmUsIGZvcm0gY2FuIGJlIHVucG9zdGVkIGFuZAorbWVtb3J5IGFsbG9jYXRlZCBjYW4gYmUgZnJlZWQuPC9wPgorPHA+VGhlIGdlbmVyYWwgZmxvdyBvZiBjb250cm9sIG9mIGEgZm9ybXMgcHJvZ3JhbSBsb29rcyBsaWtlCit0aGlzLjwvcD4KKzxvbCB0eXBlPSIxIj4KKzxsaT4KKzxwPkluaXRpYWxpemUgY3Vyc2VzPC9wPgorPC9saT4KKzxsaT4KKzxwPkNyZWF0ZSBmaWVsZHMgdXNpbmcgbmV3X2ZpZWxkKCkuIFlvdSBjYW4gc3BlY2lmeSB0aGUgaGVpZ2h0IGFuZAord2lkdGggb2YgdGhlIGZpZWxkLCBhbmQgaXRzIHBvc2l0aW9uIG9uIHRoZSBmb3JtLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5DcmVhdGUgdGhlIGZvcm1zIHdpdGggbmV3X2Zvcm0oKSBieSBzcGVjaWZ5aW5nIHRoZSBmaWVsZHMgdG8gYmUKK2F0dGFjaGVkIHdpdGguPC9wPgorPC9saT4KKzxsaT4KKzxwPlBvc3QgdGhlIGZvcm0gd2l0aCBmb3JtX3Bvc3QoKSBhbmQgcmVmcmVzaCB0aGUgc2NyZWVuLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5Qcm9jZXNzIHRoZSB1c2VyIHJlcXVlc3RzIHdpdGggYSBsb29wIGFuZCBkbyBuZWNlc3NhcnkgdXBkYXRlcwordG8gZm9ybSB3aXRoIGZvcm1fZHJpdmVyLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5VbnBvc3QgdGhlIG1lbnUgd2l0aCBmb3JtX3VucG9zdCgpPC9wPgorPC9saT4KKzxsaT4KKzxwPkZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gbWVudSBieSBmcmVlX2Zvcm0oKTwvcD4KKzwvbGk+Cis8bGk+Cis8cD5GcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSBpdGVtcyB3aXRoIGZyZWVfZmllbGQoKTwvcD4KKzwvbGk+Cis8bGk+Cis8cD5FbmQgY3Vyc2VzPC9wPgorPC9saT4KKzwvb2w+Cis8cD5BcyB5b3UgY2FuIHNlZSwgd29ya2luZyB3aXRoIGZvcm1zIGxpYnJhcnkgaXMgbXVjaCBzaW1pbGFyIHRvCitoYW5kbGluZyBtZW51IGxpYnJhcnkuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgd2lsbCBleHBsb3JlIHZhcmlvdXMKK2FzcGVjdHMgb2YgZm9ybSBwcm9jZXNzaW5nLiBMZXQncyBzdGFydCB0aGUgam91cm5leSB3aXRoIGEgc2ltcGxlCitleGFtcGxlLiBmaXJzdC48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNPTVBJTEVGT1JNUyIgaWQ9IkNPTVBJTEVGT1JNUyI+MTguMi4KK0NvbXBpbGluZyBXaXRoIHRoZSBGb3JtcyBMaWJyYXJ5PC9hPjwvaDM+Cis8cD5UbyB1c2UgZm9ybXMgbGlicmFyeSBmdW5jdGlvbnMsIHlvdSBoYXZlIHRvIGluY2x1ZGUgZm9ybS5oIGFuZAordG8gbGluayB0aGUgcHJvZ3JhbSB3aXRoIGZvcm1zIGxpYnJhcnkgdGhlIGZsYWcgLWxmb3JtIHNob3VsZCBiZQorYWRkZWQgYWxvbmcgd2l0aCAtbG5jdXJzZXMgaW4gdGhhdCBvcmRlci48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgICNpbmNsdWRlICZsdDtmb3JtLmgmZ3Q7CisgICAgLgorICAgIC4KKyAgICAuCisKKyAgICBjb21waWxlIGFuZCBsaW5rOiBnY2MgJmx0O3Byb2dyYW0gZmlsZSZndDsgLWxmb3JtIC1sbmN1cnNlczwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkZGT1NJIiBpZD0iRkZPU0kiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjUuIEZvcm1zIEJhc2ljczwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtmb3JtLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sgICAgICAgRklFTEQgKmZpZWxkWzNdOworICAgICAgICBGT1JNICAqbXlfZm9ybTsKKyAgICAgICAgaW50IGNoOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGZpZWxkcyAqLworICAgICAgICBmaWVsZFswXSA9IG5ld19maWVsZCgxLCAxMCwgNCwgMTgsIDAsIDApOworICAgICAgICBmaWVsZFsxXSA9IG5ld19maWVsZCgxLCAxMCwgNiwgMTgsIDAsIDApOworICAgICAgICBmaWVsZFsyXSA9IE5VTEw7CisKKyAgICAgICAgLyogU2V0IGZpZWxkIG9wdGlvbnMgKi8KKyAgICAgICAgc2V0X2ZpZWxkX2JhY2soZmllbGRbMF0sIEFfVU5ERVJMSU5FKTsgIC8qIFByaW50IGEgbGluZSBmb3IgdGhlIG9wdGlvbiAgKi8KKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMF0sIE9fQVVUT1NLSVApOyAgIC8qIERvbid0IGdvIHRvIG5leHQgZmllbGQgd2hlbiB0aGlzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWVsZCBpcyBmaWxsZWQgdXAgICAgICAgICAgICovCisgICAgICAgIHNldF9maWVsZF9iYWNrKGZpZWxkWzFdLCBBX1VOREVSTElORSk7IAorICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFsxXSwgT19BVVRPU0tJUCk7CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSBmb3JtIGFuZCBwb3N0IGl0ICovCisgICAgICAgIG15X2Zvcm0gPSBuZXdfZm9ybShmaWVsZCk7CisgICAgICAgIHBvc3RfZm9ybShteV9mb3JtKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICAKKyAgICAgICAgbXZwcmludHcoNCwgMTAsICJWYWx1ZSAxOiIpOworICAgICAgICBtdnByaW50dyg2LCAxMCwgIlZhbHVlIDI6Iik7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICAvKiBMb29wIHRocm91Z2ggdG8gZ2V0IHVzZXIgcmVxdWVzdHMgKi8KKyAgICAgICAgd2hpbGUoKGNoID0gZ2V0Y2goKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGNoKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gbmV4dCBmaWVsZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfTkVYVF9GSUVMRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIHRoZSBlbmQgb2YgdGhlIHByZXNlbnQgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlYXZlcyBuaWNlbHkgYXQgdGhlIGxhc3QgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9FTkRfTElORSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIHByZXZpb3VzIGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9QUkVWX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgbm9ybWFsIGNoYXJhY3RlciwgaXQgZ2V0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBVbiBwb3N0IGZvcm0gYW5kIGZyZWUgdGhlIG1lbW9yeSAqLworICAgICAgICB1bnBvc3RfZm9ybShteV9mb3JtKTsKKyAgICAgICAgZnJlZV9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzBdKTsKKyAgICAgICAgZnJlZV9maWVsZChmaWVsZFsxXSk7IAorCisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5BYm92ZSBleGFtcGxlIGlzIHByZXR0eSBzdHJhaWdodCBmb3J3YXJkLiBJdCBjcmVhdGVzIHR3byBmaWVsZHMKK3dpdGggPHZhciBjbGFzcz0iTElURVJBTCI+bmV3X2ZpZWxkKCk8L3Zhcj4uIG5ld19maWVsZCgpIHRha2VzCitoZWlnaHQsIHdpZHRoLCBzdGFydHksIHN0YXJ0eCwgbnVtYmVyIG9mIG9mZnNjcmVlbiByb3dzIGFuZCBudW1iZXIKK29mIGFkZGl0aW9uYWwgd29ya2luZyBidWZmZXJzLiBUaGUgZmlmdGggYXJndW1lbnQgbnVtYmVyIG9mCitvZmZzY3JlZW4gcm93cyBzcGVjaWZpZXMgaG93IG11Y2ggb2YgdGhlIGZpZWxkIHRvIGJlIHNob3duLiBJZiBpdAoraXMgemVybywgdGhlIGVudGlyZSBmaWVsZCBpcyBhbHdheXMgZGlzcGxheWVkIG90aGVyd2lzZSB0aGUgZm9ybQord2lsbCBiZSBzY3JvbGxhYmxlIHdoZW4gdGhlIHVzZXIgYWNjZXNzZXMgbm90IGRpc3BsYXllZCBwYXJ0cyBvZgordGhlIGZpZWxkLiBUaGUgZm9ybXMgbGlicmFyeSBhbGxvY2F0ZXMgb25lIGJ1ZmZlciBwZXIgZmllbGQgdG8KK3N0b3JlIHRoZSBkYXRhIHVzZXIgZW50ZXJzLiBVc2luZyB0aGUgbGFzdCBwYXJhbWV0ZXIgdG8gbmV3X2ZpZWxkKCkKK3dlIGNhbiBzcGVjaWZ5IGl0IHRvIGFsbG9jYXRlIHNvbWUgYWRkaXRpb25hbCBidWZmZXJzLiBUaGVzZSBjYW4gYmUKK3VzZWQgZm9yIGFueSBwdXJwb3NlIHlvdSBsaWtlLjwvcD4KKzxwPkFmdGVyIGNyZWF0aW5nIHRoZSBmaWVsZHMsIGJhY2sgZ3JvdW5kIGF0dHJpYnV0ZSBvZiBib3RoIG9mIHRoZW0KK2lzIHNldCB0byBhbiB1bmRlcnNjb3JlIHdpdGggc2V0X2ZpZWxkX2JhY2soKS4gVGhlIEFVVE9TS0lQIG9wdGlvbgoraXMgdHVybmVkIG9mZiB1c2luZyBmaWVsZF9vcHRzX29mZigpLiBJZiB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb24sCitmb2N1cyB3aWxsIG1vdmUgdG8gdGhlIG5leHQgZmllbGQgaW4gdGhlIGZvcm0gb25jZSB0aGUgYWN0aXZlIGZpZWxkCitpcyBmaWxsZWQgdXAgY29tcGxldGVseS48L3A+Cis8cD5BZnRlciBhdHRhY2hpbmcgdGhlIGZpZWxkcyB0byB0aGUgZm9ybSwgaXQgaXMgcG9zdGVkLiBIZXJlIG9uLAordXNlciBpbnB1dHMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgd2hpbGUgbG9vcCwgYnkgbWFraW5nCitjb3JyZXNwb25kaW5nIHJlcXVlc3RzIHRvIGZvcm1fZHJpdmVyLiBUaGUgZGV0YWlscyBvZiBhbGwgdGhlCityZXF1ZXN0cyB0byB0aGUgZm9ybV9kcml2ZXIoKSBhcmUgZXhwbGFpbmVkIGxhdGVyLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUExBWUZJRUxEUyIgaWQ9IlBMQVlGSUVMRFMiPjE4LjMuCitQbGF5aW5nIHdpdGggRmllbGRzPC9hPjwvaDM+Cis8cD5FYWNoIGZvcm0gZmllbGQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgbG90IG9mIGF0dHJpYnV0ZXMuIFRoZXkgY2FuCitiZSBtYW5pcHVsYXRlZCB0byBnZXQgdGhlIHJlcXVpcmVkIGVmZmVjdCBhbmQgdG8gaGF2ZSBmdW4gISEhLiBTbword2h5IHdhaXQ/PC9wPgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iRkVUQ0hJTkZPIiBpZD0iRkVUQ0hJTkZPIj4xOC4zLjEuCitGZXRjaGluZyBTaXplIGFuZCBMb2NhdGlvbiBvZiBGaWVsZDwvYT48L2g0PgorPHA+VGhlIHBhcmFtZXRlcnMgd2UgaGF2ZSBnaXZlbiBhdCB0aGUgdGltZSBvZiBjcmVhdGlvbiBvZiBhIGZpZWxkCitjYW4gYmUgcmV0cmlldmVkIHdpdGggZmllbGRfaW5mbygpLiBJdCByZXR1cm5zIGhlaWdodCwgd2lkdGgsCitzdGFydHksIHN0YXJ0eCwgbnVtYmVyIG9mIG9mZnNjcmVlbiByb3dzLCBhbmQgbnVtYmVyIG9mIGFkZGl0aW9uYWwKK2J1ZmZlcnMgaW50byB0aGUgcGFyYW1ldGVycyBnaXZlbiB0byBpdC4gSXQgaXMgYSBzb3J0IG9mIGludmVyc2Ugb2YKK25ld19maWVsZCgpLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBmaWVsZF9pbmZvKCAgICAgRklFTEQgKmZpZWxkLCAgICAgICAgICAgICAgLyogZmllbGQgZnJvbSB3aGljaCB0byBmZXRjaCAqLworICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodCwgKmludCB3aWR0aCwgICAvKiBmaWVsZCBzaXplICovIAorICAgICAgICAgICAgICAgICAgICBpbnQgKnRvcCwgaW50ICpsZWZ0LCAgICAgICAvKiB1cHBlciBsZWZ0IGNvcm5lciAqLworICAgICAgICAgICAgICAgICAgICBpbnQgKm9mZnNjcmVlbiwgICAgICAgICAgICAvKiBudW1iZXIgb2Ygb2Zmc2NyZWVuIHJvd3MgKi8KKyAgICAgICAgICAgICAgICAgICAgaW50ICpuYnVmKTsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycyAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iTU9WRUZJRUxEIiBpZD0iTU9WRUZJRUxEIj4xOC4zLjIuIE1vdmluZwordGhlIGZpZWxkPC9hPjwvaDQ+Cis8cD5UaGUgbG9jYXRpb24gb2YgdGhlIGZpZWxkIGNhbiBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBwb3NpdGlvbgord2l0aCBtb3ZlX2ZpZWxkKCkuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IG1vdmVfZmllbGQoICAgIEZJRUxEICpmaWVsZCwgICAgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IHRvcCwgaW50IGxlZnQpOyAgICAgICAgLyogbmV3IHVwcGVyLWxlZnQgY29ybmVyICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+QXMgdXN1YWwsIHRoZSBjaGFuZ2VkIHBvc2l0aW9uIGNhbiBiZSBxdWVyaWVkIHdpdGgKK2ZpZWxkX2luZm9yKCkuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJKVVNUSUZZRklFTEQiIGlkPSJKVVNUSUZZRklFTEQiPjE4LjMuMy4KK0ZpZWxkIEp1c3RpZmljYXRpb248L2E+PC9oND4KKzxwPlRoZSBqdXN0aWZpY2F0aW9uIHRvIGJlIGRvbmUgZm9yIHRoZSBmaWVsZCBjYW4gYmUgZml4ZWQgdXNpbmcKK3RoZSBmdW5jdGlvbiBzZXRfZmllbGRfanVzdCgpLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiAgICBpbnQgc2V0X2ZpZWxkX2p1c3QoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgaW50IGp1c3Rtb2RlKTsgICAgICAgICAvKiBtb2RlIHRvIHNldCAqLworICAgIGludCBmaWVsZF9qdXN0KEZJRUxEICpmaWVsZCk7ICAgICAgICAgIC8qIGZldGNoIGp1c3RpZnkgbW9kZSBvZiBmaWVsZCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBqdXN0aWZpY2F0aW9uIG1vZGUgdmFsdWVkIGFjY2VwdGVkIGFuZCByZXR1cm5lZCBieSB0aGVzZQorZnVuY3Rpb25zIGFyZSBOT19KVVNUSUZJQ0FUSU9OLCBKVVNUSUZZX1JJR0hULCBKVVNUSUZZX0xFRlQsIG9yCitKVVNUSUZZX0NFTlRFUi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkZJRUxERElTUEFUVFJJQiIgaWQ9CisiRklFTERESVNQQVRUUklCIj4xOC4zLjQuIEZpZWxkIERpc3BsYXkgQXR0cmlidXRlczwvYT48L2g0PgorPHA+QXMgeW91IGhhdmUgc2VlbiwgaW4gdGhlIGFib3ZlIGV4YW1wbGUsIGRpc3BsYXkgYXR0cmlidXRlIGZvcgordGhlIGZpZWxkcyBjYW4gYmUgc2V0IHdpdGggc2V0X2ZpZWxkX2ZvcmUoKSBhbmQgc2V0ZmllbGRfYmFjaygpLgorVGhlc2UgZnVuY3Rpb25zIHNldCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSBvZiB0aGUKK2ZpZWxkcy4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBwYWQgY2hhcmFjdGVyIHdoaWNoIHdpbGwgYmUgZmlsbGVkCitpbiB0aGUgdW5maWxsZWQgcG9ydGlvbiBvZiB0aGUgZmllbGQuIFRoZSBwYWQgY2hhcmFjdGVyIGlzIHNldCB3aXRoCithIGNhbGwgdG8gc2V0X2ZpZWxkX3BhZCgpLiBEZWZhdWx0IHBhZCB2YWx1ZSBpcyBhIHNwYWNlLiBUaGUKK2Z1bmN0aW9ucyBmaWVsZF9mb3JlKCksIGZpZWxkX2JhY2ssIGZpZWxkX3BhZCgpIGNhbiBiZSB1c2VkIHRvCitxdWVyeSB0aGUgcHJlc2VudCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kIGF0dHJpYnV0ZXMgYW5kIHBhZAorY2hhcmFjdGVyIGZvciB0aGUgZmllbGQuIFRoZSBmb2xsb3dpbmcgbGlzdCBnaXZlcyB0aGUgdXNhZ2Ugb2YKK2Z1bmN0aW9ucy48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4mIzEzO2ludCBzZXRfZmllbGRfZm9yZShGSUVMRCAqZmllbGQsICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGNodHlwZSBhdHRyKTsgICAgICAgIC8qIGF0dHJpYnV0ZSB0byBzZXQgKi8gCisKK2NodHlwZSBmaWVsZF9mb3JlKEZJRUxEICpmaWVsZCk7ICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybnMgZm9yZWdyb3VuZCBhdHRyaWJ1dGUgKi8KKworaW50IHNldF9maWVsZF9iYWNrKEZJRUxEICpmaWVsZCwgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2h0eXBlIGF0dHIpOyAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLyAKKworY2h0eXBlIGZpZWxkX2JhY2soRklFTEQgKmZpZWxkKTsgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJucyBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSAqLworCitpbnQgc2V0X2ZpZWxkX3BhZChGSUVMRCAqZmllbGQsICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBwYWQpOyAgICAgICAgICAgICAvKiBwYWQgY2hhcmFjdGVyIHRvIHNldCAqLyAKKworY2h0eXBlIGZpZWxkX3BhZChGSUVMRCAqZmllbGQpOyAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm5zIHByZXNlbnQgcGFkIGNoYXJhY3RlciAqLyYjMTM7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhvdWdoIGFib3ZlIGZ1bmN0aW9ucyBzZWVtIHF1aXRlIHNpbXBsZSwgdXNpbmcgY29sb3JzIHdpdGgKK3NldF9maWVsZF9mb3JlKCkgbWF5IGJlIGZydXN0cmF0aW5nIGluIHRoZSBiZWdpbm5pbmcuIExldCBtZSBmaXJzdAorZXhwbGFpbiBhYm91dCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGF0dHJpYnV0ZXMgb2YgYSBmaWVsZC4gVGhlCitmb3JlZ3JvdW5kIGF0dHJpYnV0ZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYXJhY3Rlci4gVGhhdCBtZWFucyBhCitjaGFyYWN0ZXIgaW4gdGhlIGZpZWxkIGlzIHByaW50ZWQgd2l0aCB0aGUgYXR0cmlidXRlIHlvdSBoYXZlIHNldAord2l0aCBzZXRfZmllbGRfZm9yZSgpLiBCYWNrZ3JvdW5kIGF0dHJpYnV0ZSBpcyB0aGUgYXR0cmlidXRlIHVzZWQKK3RvIGZpbGwgYmFja2dyb3VuZCBvZiBmaWVsZCwgd2hldGhlciBhbnkgY2hhcmFjdGVyIGlzIHRoZXJlIG9yIG5vdC4KK1NvIHdoYXQgYWJvdXQgY29sb3JzPyBTaW5jZSBjb2xvcnMgYXJlIGFsd2F5cyBkZWZpbmVkIGluIHBhaXJzLAord2hhdCBpcyB0aGUgcmlnaHQgd2F5IHRvIGRpc3BsYXkgY29sb3JlZCBmaWVsZHM/IEhlcmUncyBhbiBleGFtcGxlCitjbGFyaWZ5aW5nIGNvbG9yIGF0dHJpYnV0ZXMuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iRkZPQVQiIGlkPSJGRk9BVCI+PC9hPgorPHA+PGI+RXhhbXBsZSAyNi4gRm9ybSBBdHRyaWJ1dGVzIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7Zm9ybS5oJmd0OworCitpbnQgbWFpbigpCit7ICAgICAgIEZJRUxEICpmaWVsZFszXTsKKyAgICAgICAgRk9STSAgKm15X2Zvcm07CisgICAgICAgIGludCBjaDsKKyAgICAgICAgCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGZldyBjb2xvciBwYWlycyAqLworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworICAgICAgICBpbml0X3BhaXIoMiwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGZpZWxkcyAqLworICAgICAgICBmaWVsZFswXSA9IG5ld19maWVsZCgxLCAxMCwgNCwgMTgsIDAsIDApOworICAgICAgICBmaWVsZFsxXSA9IG5ld19maWVsZCgxLCAxMCwgNiwgMTgsIDAsIDApOworICAgICAgICBmaWVsZFsyXSA9IE5VTEw7CisKKyAgICAgICAgLyogU2V0IGZpZWxkIG9wdGlvbnMgKi8KKyAgICAgICAgc2V0X2ZpZWxkX2ZvcmUoZmllbGRbMF0sIENPTE9SX1BBSVIoMSkpOy8qIFB1dCB0aGUgZmllbGQgd2l0aCBibHVlIGJhY2tncm91bmQgKi8KKyAgICAgICAgc2V0X2ZpZWxkX2JhY2soZmllbGRbMF0sIENPTE9SX1BBSVIoMikpOy8qIGFuZCB3aGl0ZSBmb3JlZ3JvdW5kIChjaGFyYWN0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcmUgcHJpbnRlZCBpbiB3aGl0ZSAgICAgICAgICovCisgICAgICAgIGZpZWxkX29wdHNfb2ZmKGZpZWxkWzBdLCBPX0FVVE9TS0lQKTsgICAvKiBEb24ndCBnbyB0byBuZXh0IGZpZWxkIHdoZW4gdGhpcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmllbGQgaXMgZmlsbGVkIHVwICAgICAgICAgICAqLworICAgICAgICBzZXRfZmllbGRfYmFjayhmaWVsZFsxXSwgQV9VTkRFUkxJTkUpOyAKKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMV0sIE9fQVVUT1NLSVApOworCisgICAgICAgIC8qIENyZWF0ZSB0aGUgZm9ybSBhbmQgcG9zdCBpdCAqLworICAgICAgICBteV9mb3JtID0gbmV3X2Zvcm0oZmllbGQpOworICAgICAgICBwb3N0X2Zvcm0obXlfZm9ybSk7CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgCisgICAgICAgIHNldF9jdXJyZW50X2ZpZWxkKG15X2Zvcm0sIGZpZWxkWzBdKTsgLyogU2V0IGZvY3VzIHRvIHRoZSBjb2xvcmVkIGZpZWxkICovCisgICAgICAgIG12cHJpbnR3KDQsIDEwLCAiVmFsdWUgMToiKTsKKyAgICAgICAgbXZwcmludHcoNiwgMTAsICJWYWx1ZSAyOiIpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJVc2UgVVAsIERPV04gYXJyb3cga2V5cyB0byBzd2l0Y2ggYmV0d2VlbiBmaWVsZHMiKTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIC8qIExvb3AgdGhyb3VnaCB0byBnZXQgdXNlciByZXF1ZXN0cyAqLworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbyB0byBuZXh0IGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9ORVhUX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gdGhlIGVuZCBvZiB0aGUgcHJlc2VudCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVhdmVzIG5pY2VseSBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gcHJldmlvdXMgZmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX1BSRVZfRklFTEQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfRU5EX0xJTkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgYSBub3JtYWwgY2hhcmFjdGVyLCBpdCBnZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFVuIHBvc3QgZm9ybSBhbmQgZnJlZSB0aGUgbWVtb3J5ICovCisgICAgICAgIHVucG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2Zvcm0obXlfZm9ybSk7CisgICAgICAgIGZyZWVfZmllbGQoZmllbGRbMF0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzFdKTsgCisKKyAgICAgICAgZW5kd2luKCk7CisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPlBsYXkgd2l0aCB0aGUgY29sb3IgcGFpcnMgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBmb3JlZ3JvdW5kCithbmQgYmFja2dyb3VuZCBhdHRyaWJ1dGVzLiBJbiBteSBwcm9ncmFtcyB1c2luZyBjb2xvciBhdHRyaWJ1dGVzLCBJCit1c3VhbGx5IHNldCBvbmx5IHRoZSBiYWNrZ3JvdW5kIHdpdGggc2V0X2ZpZWxkX2JhY2soKS4gQ3Vyc2VzCitzaW1wbHkgZG9lc24ndCBhbGxvdyBkZWZpbmluZyBpbmRpdmlkdWFsIGNvbG9yIGF0dHJpYnV0ZXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJGSUVMRE9QVElPTkJJVFMiIGlkPQorIkZJRUxET1BUSU9OQklUUyI+MTguMy41LiBGaWVsZCBPcHRpb24gQml0czwvYT48L2g0PgorPHA+VGhlcmUgaXMgYWxzbyBhIGxhcmdlIGNvbGxlY3Rpb24gb2YgZmllbGQgb3B0aW9uIGJpdHMgeW91IGNhbgorc2V0IHRvIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIGZvcm1zIHByb2Nlc3NpbmcuIFlvdSBjYW4KK21hbmlwdWxhdGUgdGhlbSB3aXRoIHRoZXNlIGZ1bmN0aW9uczo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgc2V0X2ZpZWxkX29wdHMoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLyAKKworaW50IGZpZWxkX29wdHNfb24oRklFTEQgKmZpZWxkLCAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvbiAqLyAKKworaW50IGZpZWxkX29wdHNfb2ZmKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvZmYgKi8gCisKK2ludCBmaWVsZF9vcHRzKEZJRUxEICpmaWVsZCk7ICAgICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovIDwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBmdW5jdGlvbiBzZXRfZmllbGRfb3B0cygpIGNhbiBiZSB1c2VkIHRvIGRpcmVjdGx5IHNldAorYXR0cmlidXRlcyBvZiBhIGZpZWxkIG9yIHlvdSBjYW4gY2hvb3NlIHRvIHN3aXRjaCBhIGZldyBhdHRyaWJ1dGVzCitvbiBhbmQgb2ZmIHdpdGggZmllbGRfb3B0c19vbigpIGFuZCBmaWVsZF9vcHRzX29mZigpIHNlbGVjdGl2ZWx5LgorQW55dGltZSB5b3UgY2FuIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmllbGQgd2l0aCBmaWVsZF9vcHRzKCkuCitUaGUgZm9sbG93aW5nIGlzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLiBCeSBkZWZhdWx0LCBhbGwKK29wdGlvbnMgYXJlIG9uLjwvcD4KKzxkaXYgY2xhc3M9IlZBUklBQkxFTElTVCI+Cis8ZGw+Cis8ZHQ+T19WSVNJQkxFPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIHZpc2libGUgb24gdGhlIHNjcmVlbi4gQ2FuIGJlIHVzZWQKK2R1cmluZyBmb3JtIHByb2Nlc3NpbmcgdG8gaGlkZSBvciBwb3AgdXAgZmllbGRzIGRlcGVuZGluZyBvbiB0aGUKK3ZhbHVlIG9mIHBhcmVudCBmaWVsZHMuPC9wPgorPC9kZD4KKzxkdD5PX0FDVElWRTwvZHQ+Cis8ZGQ+Cis8cD5Db250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBhY3RpdmUgZHVyaW5nIGZvcm1zIHByb2Nlc3NpbmcKKyhpLmUuIHZpc2l0ZWQgYnkgZm9ybSBuYXZpZ2F0aW9uIGtleXMpLiBDYW4gYmUgdXNlZCB0byBtYWtlIGxhYmVscworb3IgZGVyaXZlZCBmaWVsZHMgd2l0aCBidWZmZXIgdmFsdWVzIGFsdGVyYWJsZSBieSB0aGUgZm9ybXMKK2FwcGxpY2F0aW9uLCBub3QgdGhlIHVzZXIuPC9wPgorPC9kZD4KKzxkdD5PX1BVQkxJQzwvZHQ+Cis8ZGQ+Cis8cD5Db250cm9scyB3aGV0aGVyIGRhdGEgaXMgZGlzcGxheWVkIGR1cmluZyBmaWVsZCBlbnRyeS4gSWYgdGhpcworb3B0aW9uIGlzIHR1cm5lZCBvZmYgb24gYSBmaWVsZCwgdGhlIGxpYnJhcnkgd2lsbCBhY2NlcHQgYW5kIGVkaXQKK2RhdGEgaW4gdGhhdCBmaWVsZCwgYnV0IGl0IHdpbGwgbm90IGJlIGRpc3BsYXllZCBhbmQgdGhlIHZpc2libGUKK2ZpZWxkIGN1cnNvciB3aWxsIG5vdCBtb3ZlLiBZb3UgY2FuIHR1cm4gb2ZmIHRoZSBPX1BVQkxJQyBiaXQgdG8KK2RlZmluZSBwYXNzd29yZCBmaWVsZHMuPC9wPgorPC9kZD4KKzxkdD5PX0VESVQ8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgd2hldGhlciB0aGUgZmllbGQncyBkYXRhIGNhbiBiZSBtb2RpZmllZC4gV2hlbiB0aGlzCitvcHRpb24gaXMgb2ZmLCBhbGwgZWRpdGluZyByZXF1ZXN0cyBleGNlcHQgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5SRVFfUFJFVl9DSE9JQ0U8L3Zhcj4gYW5kIDx2YXIgY2xhc3M9CisiTElURVJBTCI+UkVRX05FWFRfQ0hPSUNFPC92YXI+d2lsbCBmYWlsLiBTdWNoIHJlYWQtb25seSBmaWVsZHMgbWF5CitiZSB1c2VmdWwgZm9yIGhlbHAgbWVzc2FnZXMuPC9wPgorPC9kZD4KKzxkdD5PX1dSQVA8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgd29yZC13cmFwcGluZyBpbiBtdWx0aS1saW5lIGZpZWxkcy4gTm9ybWFsbHksIHdoZW4gYW55CitjaGFyYWN0ZXIgb2YgYSAoYmxhbmstc2VwYXJhdGVkKSB3b3JkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUKK2N1cnJlbnQgbGluZSwgdGhlIGVudGlyZSB3b3JkIGlzIHdyYXBwZWQgdG8gdGhlIG5leHQgbGluZSAoYXNzdW1pbmcKK3RoZXJlIGlzIG9uZSkuIFdoZW4gdGhpcyBvcHRpb24gaXMgb2ZmLCB0aGUgd29yZCB3aWxsIGJlIHNwbGl0CithY3Jvc3MgdGhlIGxpbmUgYnJlYWsuPC9wPgorPC9kZD4KKzxkdD5PX0JMQU5LPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIGZpZWxkIGJsYW5raW5nLiBXaGVuIHRoaXMgb3B0aW9uIGlzIG9uLCBlbnRlcmluZyBhCitjaGFyYWN0ZXIgYXQgdGhlIGZpcnN0IGZpZWxkIHBvc2l0aW9uIGVyYXNlcyB0aGUgZW50aXJlIGZpZWxkCisoZXhjZXB0IGZvciB0aGUganVzdC1lbnRlcmVkIGNoYXJhY3RlcikuPC9wPgorPC9kZD4KKzxkdD5PX0FVVE9TS0lQPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIGF1dG9tYXRpYyBza2lwIHRvIG5leHQgZmllbGQgd2hlbiB0aGlzIG9uZSBmaWxscy4KK05vcm1hbGx5LCB3aGVuIHRoZSBmb3JtcyB1c2VyIHRyaWVzIHRvIHR5cGUgbW9yZSBkYXRhIGludG8gYSBmaWVsZAordGhhbiB3aWxsIGZpdCwgdGhlIGVkaXRpbmcgbG9jYXRpb24ganVtcHMgdG8gbmV4dCBmaWVsZC4gV2hlbiB0aGlzCitvcHRpb24gaXMgb2ZmLCB0aGUgdXNlcidzIGN1cnNvciB3aWxsIGhhbmcgYXQgdGhlIGVuZCBvZiB0aGUgZmllbGQuCitUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGluIGR5bmFtaWMgZmllbGRzIHRoYXQgaGF2ZSBub3QgcmVhY2hlZAordGhlaXIgc2l6ZSBsaW1pdC48L3A+Cis8L2RkPgorPGR0Pk9fTlVMTE9LPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIHdoZXRoZXIgdmFsaWRhdGlvbiBpcyBhcHBsaWVkIHRvIGJsYW5rIGZpZWxkcy4KK05vcm1hbGx5LCBpdCBpcyBub3Q7IHRoZSB1c2VyIGNhbiBsZWF2ZSBhIGZpZWxkIGJsYW5rIHdpdGhvdXQKK2ludm9raW5nIHRoZSB1c3VhbCB2YWxpZGF0aW9uIGNoZWNrIG9uIGV4aXQuIElmIHRoaXMgb3B0aW9uIGlzIG9mZgorb24gYSBmaWVsZCwgZXhpdCBmcm9tIGl0IHdpbGwgaW52b2tlIGEgdmFsaWRhdGlvbiBjaGVjay48L3A+Cis8L2RkPgorPGR0Pk9fUEFTU09LPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIHdoZXRoZXIgdmFsaWRhdGlvbiBvY2N1cnMgb24gZXZlcnkgZXhpdCwgb3Igb25seSBhZnRlcgordGhlIGZpZWxkIGlzIG1vZGlmaWVkLiBOb3JtYWxseSB0aGUgbGF0dGVyIGlzIHRydWUuIFNldHRpbmcKK09fUEFTU09LIG1heSBiZSB1c2VmdWwgaWYgeW91ciBmaWVsZCdzIHZhbGlkYXRpb24gZnVuY3Rpb24gbWF5CitjaGFuZ2UgZHVyaW5nIGZvcm1zIHByb2Nlc3NpbmcuPC9wPgorPC9kZD4KKzxkdD5PX1NUQVRJQzwvZHQ+Cis8ZGQ+Cis8cD5Db250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBmaXhlZCB0byBpdHMgaW5pdGlhbCBkaW1lbnNpb25zLgorSWYgeW91IHR1cm4gdGhpcyBvZmYsIHRoZSBmaWVsZCBiZWNvbWVzIGR5bmFtaWMgYW5kIHdpbGwgc3RyZXRjaCB0bworZml0IGVudGVyZWQgZGF0YS48L3A+Cis8L2RkPgorPC9kbD4KKzwvZGl2PgorPHA+QSBmaWVsZCdzIG9wdGlvbnMgY2Fubm90IGJlIGNoYW5nZWQgd2hpbGUgdGhlIGZpZWxkIGlzIGN1cnJlbnRseQorc2VsZWN0ZWQuIEhvd2V2ZXIsIG9wdGlvbnMgbWF5IGJlIGNoYW5nZWQgb24gcG9zdGVkIGZpZWxkcyB0aGF0IGFyZQorbm90IGN1cnJlbnQuPC9wPgorPHA+VGhlIG9wdGlvbiB2YWx1ZXMgYXJlIGJpdC1tYXNrcyBhbmQgY2FuIGJlIGNvbXBvc2VkIHdpdGgKK2xvZ2ljYWwtb3IgaW4gdGhlIG9idmlvdXMgd2F5LiBZb3UgaGF2ZSBzZWVuIHRoZSB1c2FnZSBvZiBzd2l0Y2hpbmcKK29mZiBPX0FVVE9TS0lQIG9wdGlvbi4gVGhlIGZvbGxvd2luZyBleGFtcGxlIGNsYXJpZmllcyB1c2FnZSBvZgorc29tZSBtb3JlIG9wdGlvbnMuIE90aGVyIG9wdGlvbnMgYXJlIGV4cGxhaW5lZCB3aGVyZQorYXBwcm9wcmlhdGUuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iRkZPT1AiIGlkPSJGRk9PUCI+PC9hPgorPHA+PGI+RXhhbXBsZSAyNy4gRmllbGQgT3B0aW9ucyBVc2FnZSBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2Zvcm0uaCZndDsKKworI2RlZmluZSBTVEFSVFggMTUKKyNkZWZpbmUgU1RBUlRZIDQKKyNkZWZpbmUgV0lEVEggMjUKKworI2RlZmluZSBOX0ZJRUxEUyAzCisKK2ludCBtYWluKCkKK3sgICAgICAgRklFTEQgKmZpZWxkW05fRklFTERTXTsKKyAgICAgICAgRk9STSAgKm15X2Zvcm07CisgICAgICAgIGludCBjaCwgaTsKKyAgICAgICAgCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBmaWVsZHMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgTl9GSUVMRFMgLSAxOyArK2kpCisgICAgICAgICAgICAgICAgZmllbGRbaV0gPSBuZXdfZmllbGQoMSwgV0lEVEgsIFNUQVJUWSArIGkgKiAyLCBTVEFSVFgsIDAsIDApOworICAgICAgICBmaWVsZFtOX0ZJRUxEUyAtIDFdID0gTlVMTDsKKworICAgICAgICAvKiBTZXQgZmllbGQgb3B0aW9ucyAqLworICAgICAgICBzZXRfZmllbGRfYmFjayhmaWVsZFsxXSwgQV9VTkRFUkxJTkUpOyAgLyogUHJpbnQgYSBsaW5lIGZvciB0aGUgb3B0aW9uICAqLworICAgICAgICAKKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMF0sIE9fQUNUSVZFKTsgLyogVGhpcyBmaWVsZCBpcyBhIHN0YXRpYyBsYWJlbCAqLworICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFsxXSwgT19QVUJMSUMpOyAvKiBUaGlzIGZpbGVkIGlzIGxpa2UgYSBwYXNzd29yZCBmaWVsZCovCisgICAgICAgIGZpZWxkX29wdHNfb2ZmKGZpZWxkWzFdLCBPX0FVVE9TS0lQKTsgLyogVG8gYXZvaWQgZW50ZXJpbmcgdGhlIHNhbWUgZmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZnRlciBsYXN0IGNoYXJhY3RlciBpcyBlbnRlcmVkICovCisgICAgICAgIAorICAgICAgICAvKiBDcmVhdGUgdGhlIGZvcm0gYW5kIHBvc3QgaXQgKi8KKyAgICAgICAgbXlfZm9ybSA9IG5ld19mb3JtKGZpZWxkKTsKKyAgICAgICAgcG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIAorICAgICAgICBzZXRfZmllbGRfanVzdChmaWVsZFswXSwgSlVTVElGWV9DRU5URVIpOyAvKiBDZW50ZXIgSnVzdGlmaWNhdGlvbiAqLworICAgICAgICBzZXRfZmllbGRfYnVmZmVyKGZpZWxkWzBdLCAwLCAiVGhpcyBpcyBhIHN0YXRpYyBGaWVsZCIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZmllbGQgICovCisgICAgICAgIG12cHJpbnR3KFNUQVJUWSwgU1RBUlRYIC0gMTAsICJGaWVsZCAxOiIpOworICAgICAgICBtdnByaW50dyhTVEFSVFkgKyAyLCBTVEFSVFggLSAxMCwgIkZpZWxkIDI6Iik7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICAvKiBMb29wIHRocm91Z2ggdG8gZ2V0IHVzZXIgcmVxdWVzdHMgKi8KKyAgICAgICAgd2hpbGUoKGNoID0gZ2V0Y2goKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGNoKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gbmV4dCBmaWVsZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfTkVYVF9GSUVMRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIHRoZSBlbmQgb2YgdGhlIHByZXNlbnQgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlYXZlcyBuaWNlbHkgYXQgdGhlIGxhc3QgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9FTkRfTElORSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIHByZXZpb3VzIGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9QUkVWX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgbm9ybWFsIGNoYXJhY3RlciwgaXQgZ2V0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBVbiBwb3N0IGZvcm0gYW5kIGZyZWUgdGhlIG1lbW9yeSAqLworICAgICAgICB1bnBvc3RfZm9ybShteV9mb3JtKTsKKyAgICAgICAgZnJlZV9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzBdKTsKKyAgICAgICAgZnJlZV9maWVsZChmaWVsZFsxXSk7IAorCisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5UaGlzIGV4YW1wbGUsIHRob3VnaCB1c2VsZXNzLCBzaG93cyB0aGUgdXNhZ2Ugb2Ygb3B0aW9ucy4gSWYKK3VzZWQgcHJvcGVybHksIHRoZXkgY2FuIHByZXNlbnQgaW5mb3JtYXRpb24gdmVyeSBlZmZlY3RpdmVseSBpbiBhCitmb3JtLiBUaGUgc2Vjb25kIGZpZWxkIGJlaW5nIG5vdCBPX1BVQkxJQywgZG9lcyBub3Qgc2hvdyB0aGUKK2NoYXJhY3RlcnMgeW91IGFyZSB0eXBpbmcuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJGSUVMRFNUQVRVUyIgaWQ9IkZJRUxEU1RBVFVTIj4xOC4zLjYuCitGaWVsZCBTdGF0dXM8L2E+PC9oND4KKzxwPlRoZSBmaWVsZCBzdGF0dXMgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGZpZWxkIGhhcyBnb3QgZWRpdGVkIG9yCitub3QuIEl0IGlzIGluaXRpYWxseSBzZXQgdG8gRkFMU0UgYW5kIHdoZW4gdXNlciBlbnRlcnMgc29tZXRoaW5nCithbmQgdGhlIGRhdGEgYnVmZmVyIGdldHMgbW9kaWZpZWQgaXQgYmVjb21lcyBUUlVFLiBTbyBhIGZpZWxkJ3MKK3N0YXR1cyBjYW4gYmUgcXVlcmllZCB0byBmaW5kIG91dCB3aGV0aGVyIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yCitub3QuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBhc3Npc3QgaW4gdGhvc2Ugb3BlcmF0aW9ucy48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgc2V0X2ZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQsICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzKTsgICAgICAgICAvKiBzdGF0dXMgdG8gc2V0ICovCisKK2ludCBmaWVsZF9zdGF0dXMoRklFTEQgKmZpZWxkKTsgICAgICAgICAvKiBmZXRjaCBzdGF0dXMgb2YgZmllbGQgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5JdCdzIGJldHRlciB0byBjaGVjayB0aGUgZmllbGQncyBzdGF0dXMgb25seSBhZnRlciBhZnRlciBsZWF2aW5nCit0aGUgZmllbGQsIGFzIGRhdGEgYnVmZmVyIG1pZ2h0IG5vdCBoYXZlIGJlZW4gdXBkYXRlZCB5ZXQgYXMgdGhlCit2YWxpZGF0aW9uIGlzIHN0aWxsIGR1ZS4gVG8gZ3VhcmFudGVlIHRoYXQgcmlnaHQgc3RhdHVzIGlzCityZXR1cm5lZCwgY2FsbCBmaWVsZF9zdGF0dXMoKSBlaXRoZXIgKDEpIGluIHRoZSBmaWVsZCdzIGV4aXQKK3ZhbGlkYXRpb24gY2hlY2sgcm91dGluZSwgKDIpIGZyb20gdGhlIGZpZWxkJ3Mgb3IgZm9ybSdzCitpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBob29rcywgb3IgKDMpIGp1c3QgYWZ0ZXIgYQorUkVRX1ZBTElEQVRJT04gcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGZvcm1zIGRyaXZlcjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iRklFTERVU0VSUFRSIiBpZD0iRklFTERVU0VSUFRSIj4xOC4zLjcuCitGaWVsZCBVc2VyIFBvaW50ZXI8L2E+PC9oND4KKzxwPkV2ZXJ5IGZpZWxkIHN0cnVjdHVyZSBjb250YWlucyBvbmUgcG9pbnRlciB0aGF0IGNhbiBiZSB1c2VkIGJ5Cit0aGUgdXNlciBmb3IgdmFyaW91cyBwdXJwb3Nlcy4gSXQgaXMgbm90IHRvdWNoZWQgYnkgZm9ybXMgbGlicmFyeQorYW5kIGNhbiBiZSB1c2VkIGZvciBhbnkgcHVycG9zZSBieSB0aGUgdXNlci4gVGhlIGZvbGxvd2luZworZnVuY3Rpb25zIHNldCBhbmQgZmV0Y2ggdXNlciBwb2ludGVyLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj5pbnQgc2V0X2ZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkLCAgIAorICAgICAgICAgICBjaGFyICp1c2VycHRyKTsgICAgICAvKiB0aGUgdXNlciBwb2ludGVyIHlvdSB3aXNoIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRoIHRoZSBmaWVsZCAgICAqLworCitjaGFyICpmaWVsZF91c2VycHRyKEZJRUxEICpmaWVsZCk7ICAgICAgLyogZmV0Y2ggdXNlciBwb2ludGVyIG9mIHRoZSBmaWVsZCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iVkFSSUFCTEVTSVpFRklFTERTIiBpZD0KKyJWQVJJQUJMRVNJWkVGSUVMRFMiPjE4LjMuOC4gVmFyaWFibGUtU2l6ZWQgRmllbGRzPC9hPjwvaDQ+Cis8cD5JZiB5b3Ugd2FudCBhIGR5bmFtaWNhbGx5IGNoYW5naW5nIGZpZWxkIHdpdGggdmFyaWFibGUgd2lkdGgsCit0aGlzIGlzIHRoZSBmZWF0dXJlIHlvdSB3YW50IHRvIHB1dCB0byBmdWxsIHVzZS4gVGhpcyB3aWxsIGFsbG93Cit0aGUgdXNlciB0byBlbnRlciBtb3JlIGRhdGEgdGhhbiB0aGUgb3JpZ2luYWwgc2l6ZSBvZiB0aGUgZmllbGQgYW5kCitsZXQgdGhlIGZpZWxkIGdyb3cuIEFjY29yZGluZyB0byB0aGUgZmllbGQgb3JpZW50YXRpb24gaXQgd2lsbAorc2Nyb2xsIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IHRvIGluY29ycG9yYXRlIHRoZSBuZXcgZGF0YS48L3A+Cis8cD5UbyBtYWtlIGEgZmllbGQgZHluYW1pY2FsbHkgZ3Jvd2FibGUsIHRoZSBvcHRpb24gT19TVEFUSUMgc2hvdWxkCitiZSB0dXJuZWQgb2ZmLiBUaGlzIGNhbiBiZSBkb25lIHdpdGggYTwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiAgICBmaWVsZF9vcHRzX29mZihmaWVsZF9wb2ludGVyLCBPX1NUQVRJQyk7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+QnV0IGl0J3MgdXN1YWxseSBub3QgYWR2aXNhYmxlIHRvIGFsbG93IGEgZmllbGQgdG8gZ3JvdworaW5maW5pdGVseS4gWW91IGNhbiBzZXQgYSBtYXhpbXVtIGxpbWl0IHRvIHRoZSBncm93dGggb2YgdGhlIGZpZWxkCit3aXRoPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCAgICAvKiBGaWVsZCBvbiB3aGljaCB0byBvcGVyYXRlICovCisgICAgICAgICAgICAgICAgICBpbnQgbWF4X2dyb3d0aCk7IC8qIG1heGltdW0gZ3Jvd3RoIGFsbG93ZWQgZm9yIHRoZSBmaWVsZCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBmaWVsZCBpbmZvIGZvciBhIGR5bmFtaWNhbGx5IGdyb3dhYmxlIGZpZWxkIGNhbiBiZSByZXRyaWV2ZWQKK2J5PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IGR5bmFtaWNfZmllbGRfaW5mbyggRklFTEQgKmZpZWxkLCAgICAgLyogRmllbGQgb24gd2hpY2ggdG8gb3BlcmF0ZSAqLworICAgICAgICAgICAgaW50ICAgKnByb3dzLCAgICAgLyogbnVtYmVyIG9mIHJvd3Mgd2lsbCBiZSBmaWxsZWQgaW4gdGhpcyAqLworICAgICAgICAgICAgaW50ICAgKnBjb2xzLCAgICAgLyogbnVtYmVyIG9mIGNvbHVtbnMgd2lsbCBiZSBmaWxsZWQgaW4gdGhpcyovCisgICAgICAgICAgICBpbnQgICAqcG1heCkgICAgICAvKiBtYXhpbXVtIGFsbG93YWJsZSBncm93dGggd2lsbCBiZSBmaWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIHRoaXMgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+CitUaG91Z2ggZmllbGRfaW5mbyB3b3JrIGFzIHVzdWFsLCBpdCBpcyBhZHZpc2FibGUgdG8gdXNlIHRoaXMKK2Z1bmN0aW9uIHRvIGdldCB0aGUgcHJvcGVyIGF0dHJpYnV0ZXMgb2YgYSBkeW5hbWljYWxseSBncm93YWJsZQorZmllbGQuCis8cD5SZWNhbGwgdGhlIGxpYnJhcnkgcm91dGluZSBuZXdfZmllbGQ7IGEgbmV3IGZpZWxkIGNyZWF0ZWQgd2l0aAoraGVpZ2h0IHNldCB0byBvbmUgd2lsbCBiZSBkZWZpbmVkIHRvIGJlIGEgb25lIGxpbmUgZmllbGQuIEEgbmV3CitmaWVsZCBjcmVhdGVkIHdpdGggaGVpZ2h0IGdyZWF0ZXIgdGhhbiBvbmUgd2lsbCBiZSBkZWZpbmVkIHRvIGJlIGEKK211bHRpIGxpbmUgZmllbGQuPC9wPgorPHA+QSBvbmUgbGluZSBmaWVsZCB3aXRoIE9fU1RBVElDIHR1cm5lZCBvZmYgKGR5bmFtaWNhbGx5IGdyb3dhYmxlCitmaWVsZCkgd2lsbCBjb250YWluIGEgc2luZ2xlIGZpeGVkIHJvdywgYnV0IHRoZSBudW1iZXIgb2YgY29sdW1ucworY2FuIGluY3JlYXNlIGlmIHRoZSB1c2VyIGVudGVycyBtb3JlIGRhdGEgdGhhbiB0aGUgaW5pdGlhbCBmaWVsZAord2lsbCBob2xkLiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgZGlzcGxheWVkIHdpbGwgcmVtYWluIGZpeGVkIGFuZAordGhlIGFkZGl0aW9uYWwgZGF0YSB3aWxsIHNjcm9sbCBob3Jpem9udGFsbHkuPC9wPgorPHA+QSBtdWx0aSBsaW5lIGZpZWxkIHdpdGggT19TVEFUSUMgdHVybmVkIG9mZiAoZHluYW1pY2FsbHkKK2dyb3dhYmxlIGZpZWxkKSB3aWxsIGNvbnRhaW4gYSBmaXhlZCBudW1iZXIgb2YgY29sdW1ucywgYnV0IHRoZQorbnVtYmVyIG9mIHJvd3MgY2FuIGluY3JlYXNlIGlmIHRoZSB1c2VyIGVudGVycyBtb3JlIGRhdGEgdGhhbiB0aGUKK2luaXRpYWwgZmllbGQgd2lsbCBob2xkLiBUaGUgbnVtYmVyIG9mIHJvd3MgZGlzcGxheWVkIHdpbGwgcmVtYWluCitmaXhlZCBhbmQgdGhlIGFkZGl0aW9uYWwgZGF0YSB3aWxsIHNjcm9sbCB2ZXJ0aWNhbGx5LjwvcD4KKzxwPlRoZSBhYm92ZSB0d28gcGFyYWdyYXBocyBwcmV0dHkgbXVjaCBkZXNjcmliZSBhIGR5bmFtaWNhbGx5Citncm93YWJsZSBmaWVsZCdzIGJlaGF2aW9yLiBUaGUgd2F5IG90aGVyIHBhcnRzIG9mIGZvcm1zIGxpYnJhcnkKK2JlaGF2ZXMgaXMgZGVzY3JpYmVkIGJlbG93OjwvcD4KKzxvbCB0eXBlPSIxIj4KKzxsaT4KKzxwPlRoZSBmaWVsZCBvcHRpb24gT19BVVRPU0tJUCB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlIG9wdGlvbgorT19TVEFUSUMgaXMgb2ZmIGFuZCB0aGVyZSBpcyBubyBtYXhpbXVtIGdyb3d0aCBzcGVjaWZpZWQgZm9yIHRoZQorZmllbGQuIEN1cnJlbnRseSwgT19BVVRPU0tJUCBnZW5lcmF0ZXMgYW4gYXV0b21hdGljIFJFUV9ORVhUX0ZJRUxECitmb3JtIGRyaXZlciByZXF1ZXN0IHdoZW4gdGhlIHVzZXIgdHlwZXMgaW4gdGhlIGxhc3QgY2hhcmFjdGVyCitwb3NpdGlvbiBvZiBhIGZpZWxkLiBPbiBhIGdyb3dhYmxlIGZpZWxkIHdpdGggbm8gbWF4aW11bSBncm93dGgKK3NwZWNpZmllZCwgdGhlcmUgaXMgbm8gbGFzdCBjaGFyYWN0ZXIgcG9zaXRpb24uIElmIGEgbWF4aW11bSBncm93dGgKK2lzIHNwZWNpZmllZCwgdGhlIE9fQVVUT1NLSVAgb3B0aW9uIHdpbGwgd29yayBhcyBub3JtYWwgaWYgdGhlCitmaWVsZCBoYXMgZ3Jvd24gdG8gaXRzIG1heGltdW0gc2l6ZS48L3A+Cis8L2xpPgorPGxpPgorPHA+VGhlIGZpZWxkIGp1c3RpZmljYXRpb24gd2lsbCBiZSBpZ25vcmVkIGlmIHRoZSBvcHRpb24gT19TVEFUSUMKK2lzIG9mZi4gQ3VycmVudGx5LCBzZXRfZmllbGRfanVzdCBjYW4gYmUgdXNlZCB0byBKVVNUSUZZX0xFRlQsCitKVVNUSUZZX1JJR0hULCBKVVNUSUZZX0NFTlRFUiB0aGUgY29udGVudHMgb2YgYSBvbmUgbGluZSBmaWVsZC4gQQorZ3Jvd2FibGUgb25lIGxpbmUgZmllbGQgd2lsbCwgYnkgZGVmaW5pdGlvbiwgZ3JvdyBhbmQgc2Nyb2xsCitob3Jpem9udGFsbHkgYW5kIG1heSBjb250YWluIG1vcmUgZGF0YSB0aGFuIGNhbiBiZSBqdXN0aWZpZWQuIFRoZQorcmV0dXJuIGZyb20gZmllbGRfanVzdCB3aWxsIGJlIHVuY2hhbmdlZC48L3A+Cis8L2xpPgorPGxpPgorPHA+VGhlIG92ZXJsb2FkZWQgZm9ybSBkcml2ZXIgcmVxdWVzdCBSRVFfTkVXX0xJTkUgd2lsbCBvcGVyYXRlIHRoZQorc2FtZSB3YXkgcmVnYXJkbGVzcyBvZiB0aGUgT19OTF9PVkVSTE9BRCBmb3JtIG9wdGlvbiBpZiB0aGUgZmllbGQKK29wdGlvbiBPX1NUQVRJQyBpcyBvZmYgYW5kIHRoZXJlIGlzIG5vIG1heGltdW0gZ3Jvd3RoIHNwZWNpZmllZCBmb3IKK3RoZSBmaWVsZC4gQ3VycmVudGx5LCBpZiB0aGUgZm9ybSBvcHRpb24gT19OTF9PVkVSTE9BRCBpcyBvbiwKK1JFUV9ORVdfTElORSBpbXBsaWNpdGx5IGdlbmVyYXRlcyBhIFJFUV9ORVhUX0ZJRUxEIGlmIGNhbGxlZCBmcm9tCit0aGUgbGFzdCBsaW5lIG9mIGEgZmllbGQuIElmIGEgZmllbGQgY2FuIGdyb3cgd2l0aG91dCBib3VuZCwgdGhlcmUKK2lzIG5vIGxhc3QgbGluZSwgc28gUkVRX05FV19MSU5FIHdpbGwgbmV2ZXIgaW1wbGljaXRseSBnZW5lcmF0ZSBhCitSRVFfTkVYVF9GSUVMRC4gSWYgYSBtYXhpbXVtIGdyb3d0aCBsaW1pdCBpcyBzcGVjaWZpZWQgYW5kIHRoZQorT19OTF9PVkVSTE9BRCBmb3JtIG9wdGlvbiBpcyBvbiwgUkVRX05FV19MSU5FIHdpbGwgb25seSBpbXBsaWNpdGx5CitnZW5lcmF0ZSBSRVFfTkVYVF9GSUVMRCBpZiB0aGUgZmllbGQgaGFzIGdyb3duIHRvIGl0cyBtYXhpbXVtIHNpemUKK2FuZCB0aGUgdXNlciBpcyBvbiB0aGUgbGFzdCBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5UaGUgbGlicmFyeSBjYWxsIGR1cF9maWVsZCB3aWxsIHdvcmsgYXMgdXN1YWw7IGl0IHdpbGwgZHVwbGljYXRlCit0aGUgZmllbGQsIGluY2x1ZGluZyB0aGUgY3VycmVudCBidWZmZXIgc2l6ZSBhbmQgY29udGVudHMgb2YgdGhlCitmaWVsZCBiZWluZyBkdXBsaWNhdGVkLiBBbnkgc3BlY2lmaWVkIG1heGltdW0gZ3Jvd3RoIHdpbGwgYWxzbyBiZQorZHVwbGljYXRlZC48L3A+Cis8L2xpPgorPGxpPgorPHA+VGhlIGxpYnJhcnkgY2FsbCBsaW5rX2ZpZWxkIHdpbGwgd29yayBhcyB1c3VhbDsgaXQgd2lsbAorZHVwbGljYXRlIGFsbCBmaWVsZCBhdHRyaWJ1dGVzIGFuZCBzaGFyZSBidWZmZXJzIHdpdGggdGhlIGZpZWxkCitiZWluZyBsaW5rZWQuIElmIHRoZSBPX1NUQVRJQyBmaWVsZCBvcHRpb24gaXMgc3Vic2VxdWVudGx5IGNoYW5nZWQKK2J5IGEgZmllbGQgc2hhcmluZyBidWZmZXJzLCBob3cgdGhlIHN5c3RlbSByZWFjdHMgdG8gYW4gYXR0ZW1wdCB0bworZW50ZXIgbW9yZSBkYXRhIGludG8gdGhlIGZpZWxkIHRoYW4gdGhlIGJ1ZmZlciB3aWxsIGN1cnJlbnRseSBob2xkCit3aWxsIGRlcGVuZCBvbiB0aGUgc2V0dGluZyBvZiB0aGUgb3B0aW9uIGluIHRoZSBjdXJyZW50IGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5UaGUgbGlicmFyeSBjYWxsIGZpZWxkX2luZm8gd2lsbCB3b3JrIGFzIHVzdWFsOyB0aGUgdmFyaWFibGUKK25yb3cgd2lsbCBjb250YWluIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgY2FsbCB0byBuZXdfZmllbGQuIFRoZQordXNlciBzaG91bGQgdXNlIGR5bmFtaWNfZmllbGRfaW5mbywgZGVzY3JpYmVkIGFib3ZlLCB0byBxdWVyeSB0aGUKK2N1cnJlbnQgc2l6ZSBvZiB0aGUgYnVmZmVyLjwvcD4KKzwvbGk+Cis8L29sPgorPHA+U29tZSBvZiB0aGUgYWJvdmUgcG9pbnRzIG1ha2Ugc2Vuc2Ugb25seSBhZnRlciBleHBsYWluaW5nIGZvcm0KK2RyaXZlci4gV2Ugd2lsbCBiZSBsb29raW5nIGludG8gdGhhdCBpbiBuZXh0IGZldyBzZWN0aW9ucy48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iRk9STVdJTkRPV1MiIGlkPSJGT1JNV0lORE9XUyI+MTguNC4gRm9ybQorV2luZG93czwvYT48L2gzPgorPHA+VGhlIGZvcm0gd2luZG93cyBjb25jZXB0IGlzIHByZXR0eSBtdWNoIHNpbWlsYXIgdG8gbWVudSB3aW5kb3dzLgorRXZlcnkgZm9ybSBpcyBhc3NvY2lhdGVkIHdpdGggYSBtYWluIHdpbmRvdyBhbmQgYSBzdWIgd2luZG93LiBUaGUKK2Zvcm0gbWFpbiB3aW5kb3cgZGlzcGxheXMgYW55IHRpdGxlIG9yIGJvcmRlciBhc3NvY2lhdGVkIG9yCit3aGF0ZXZlciB0aGUgdXNlciB3aXNoZXMuIFRoZW4gdGhlIHN1YiB3aW5kb3cgY29udGFpbnMgYWxsIHRoZQorZmllbGRzIGFuZCBkaXNwbGF5cyB0aGVtIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbi4gVGhpcyBnaXZlcwordGhlIGZsZXhpYmlsaXR5IG9mIG1hbmlwdWxhdGluZyBmYW5jeSBmb3JtIGRpc3BsYXlpbmcgdmVyeQorZWFzaWx5LjwvcD4KKzxwPlNpbmNlIHRoaXMgaXMgcHJldHR5IG11Y2ggc2ltaWxhciB0byBtZW51IHdpbmRvd3MsIEkgYW0KK3Byb3ZpZGluZyBhbiBleGFtcGxlIHdpdGggb3V0IG11Y2ggZXhwbGFuYXRpb24uIFRoZSBmdW5jdGlvbnMgYXJlCitzaW1pbGFyIGFuZCB0aGV5IHdvcmsgdGhlIHNhbWUgd2F5LjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkZGT1dJIiBpZD0iRkZPV0kiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjguIEZvcm0gV2luZG93cyBFeGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2Zvcm0uaCZndDsKKwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nLCBjaHR5cGUgY29sb3IpOworCitpbnQgbWFpbigpCit7CisgICAgICAgIEZJRUxEICpmaWVsZFszXTsKKyAgICAgICAgRk9STSAgKm15X2Zvcm07CisgICAgICAgIFdJTkRPVyAqbXlfZm9ybV93aW47CisgICAgICAgIGludCBjaCwgcm93cywgY29sczsKKyAgICAgICAgCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGZldyBjb2xvciBwYWlycyAqLworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZmllbGRzICovCisgICAgICAgIGZpZWxkWzBdID0gbmV3X2ZpZWxkKDEsIDEwLCA2LCAxLCAwLCAwKTsKKyAgICAgICAgZmllbGRbMV0gPSBuZXdfZmllbGQoMSwgMTAsIDgsIDEsIDAsIDApOworICAgICAgICBmaWVsZFsyXSA9IE5VTEw7CisKKyAgICAgICAgLyogU2V0IGZpZWxkIG9wdGlvbnMgKi8KKyAgICAgICAgc2V0X2ZpZWxkX2JhY2soZmllbGRbMF0sIEFfVU5ERVJMSU5FKTsKKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMF0sIE9fQVVUT1NLSVApOyAvKiBEb24ndCBnbyB0byBuZXh0IGZpZWxkIHdoZW4gdGhpcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpZWxkIGlzIGZpbGxlZCB1cCAgICAgICAgICAgICAqLworICAgICAgICBzZXRfZmllbGRfYmFjayhmaWVsZFsxXSwgQV9VTkRFUkxJTkUpOyAKKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMV0sIE9fQVVUT1NLSVApOworICAgICAgICAKKyAgICAgICAgLyogQ3JlYXRlIHRoZSBmb3JtIGFuZCBwb3N0IGl0ICovCisgICAgICAgIG15X2Zvcm0gPSBuZXdfZm9ybShmaWVsZCk7CisgICAgICAgIAorICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGFyZWEgcmVxdWlyZWQgZm9yIHRoZSBmb3JtICovCisgICAgICAgIHNjYWxlX2Zvcm0obXlfZm9ybSwgJmFtcDtyb3dzLCAmYW1wO2NvbHMpOworCisgICAgICAgIC8qIENyZWF0ZSB0aGUgd2luZG93IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZm9ybSAqLworICAgICAgICBteV9mb3JtX3dpbiA9IG5ld3dpbihyb3dzICsgNCwgY29scyArIDQsIDQsIDQpOworICAgICAgICBrZXlwYWQobXlfZm9ybV93aW4sIFRSVUUpOworCisgICAgICAgIC8qIFNldCBtYWluIHdpbmRvdyBhbmQgc3ViIHdpbmRvdyAqLworICAgICAgICBzZXRfZm9ybV93aW4obXlfZm9ybSwgbXlfZm9ybV93aW4pOworICAgICAgICBzZXRfZm9ybV9zdWIobXlfZm9ybSwgZGVyd2luKG15X2Zvcm1fd2luLCByb3dzLCBjb2xzLCAyLCAyKSk7CisKKyAgICAgICAgLyogUHJpbnQgYSBib3JkZXIgYXJvdW5kIHRoZSBtYWluIHdpbmRvdyBhbmQgcHJpbnQgYSB0aXRsZSAqLworICAgICAgICBib3gobXlfZm9ybV93aW4sIDAsIDApOworICAgICAgICBwcmludF9pbl9taWRkbGUobXlfZm9ybV93aW4sIDEsIDAsIGNvbHMgKyA0LCAiTXkgRm9ybSIsIENPTE9SX1BBSVIoMSkpOworICAgICAgICAKKyAgICAgICAgcG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICB3cmVmcmVzaChteV9mb3JtX3dpbik7CisKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXNlIFVQLCBET1dOIGFycm93IGtleXMgdG8gc3dpdGNoIGJldHdlZW4gZmllbGRzIik7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICAvKiBMb29wIHRocm91Z2ggdG8gZ2V0IHVzZXIgcmVxdWVzdHMgKi8KKyAgICAgICAgd2hpbGUoKGNoID0gd2dldGNoKG15X2Zvcm1fd2luKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGNoKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gbmV4dCBmaWVsZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfTkVYVF9GSUVMRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIHRoZSBlbmQgb2YgdGhlIHByZXNlbnQgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlYXZlcyBuaWNlbHkgYXQgdGhlIGxhc3QgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9FTkRfTElORSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIHByZXZpb3VzIGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9QUkVWX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgbm9ybWFsIGNoYXJhY3RlciwgaXQgZ2V0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBVbiBwb3N0IGZvcm0gYW5kIGZyZWUgdGhlIG1lbW9yeSAqLworICAgICAgICB1bnBvc3RfZm9ybShteV9mb3JtKTsKKyAgICAgICAgZnJlZV9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzBdKTsKKyAgICAgICAgZnJlZV9maWVsZChmaWVsZFsxXSk7IAorCisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nLCBjaHR5cGUgY29sb3IpCit7ICAgICAgIGludCBsZW5ndGgsIHgsIHk7CisgICAgICAgIGZsb2F0IHRlbXA7CisKKyAgICAgICAgaWYod2luID09IE5VTEwpCisgICAgICAgICAgICAgICAgd2luID0gc3Rkc2NyOworICAgICAgICBnZXR5eCh3aW4sIHksIHgpOworICAgICAgICBpZihzdGFydHggIT0gMCkKKyAgICAgICAgICAgICAgICB4ID0gc3RhcnR4OworICAgICAgICBpZihzdGFydHkgIT0gMCkKKyAgICAgICAgICAgICAgICB5ID0gc3RhcnR5OworICAgICAgICBpZih3aWR0aCA9PSAwKQorICAgICAgICAgICAgICAgIHdpZHRoID0gODA7CisKKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIHRlbXAgPSAod2lkdGggLSBsZW5ndGgpLyAyOworICAgICAgICB4ID0gc3RhcnR4ICsgKGludCl0ZW1wOworICAgICAgICB3YXR0cm9uKHdpbiwgY29sb3IpOworICAgICAgICBtdndwcmludHcod2luLCB5LCB4LCAiJXMiLCBzdHJpbmcpOworICAgICAgICB3YXR0cm9mZih3aW4sIGNvbG9yKTsKKyAgICAgICAgcmVmcmVzaCgpOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iRklMRURWQUxJREFURSIgaWQ9IkZJTEVEVkFMSURBVEUiPjE4LjUuCitGaWVsZCBWYWxpZGF0aW9uPC9hPjwvaDM+Cis8cD5CeSBkZWZhdWx0LCBhIGZpZWxkIHdpbGwgYWNjZXB0IGFueSBkYXRhIGlucHV0IGJ5IHRoZSB1c2VyLiBJdAoraXMgcG9zc2libGUgdG8gYXR0YWNoIHZhbGlkYXRpb24gdG8gdGhlIGZpZWxkLiBUaGVuIGFueSBhdHRlbXB0IGJ5Cit0aGUgdXNlciB0byBsZWF2ZSB0aGUgZmllbGQsIHdoaWxlIGl0IGNvbnRhaW5zIGRhdGEgdGhhdCBkb2Vzbid0CittYXRjaCB0aGUgdmFsaWRhdGlvbiB0eXBlIHdpbGwgZmFpbC4gU29tZSB2YWxpZGF0aW9uIHR5cGVzIGFsc28KK2hhdmUgYSBjaGFyYWN0ZXItdmFsaWRpdHkgY2hlY2sgZm9yIGVhY2ggdGltZSBhIGNoYXJhY3RlciBpcworZW50ZXJlZCBpbiB0aGUgZmllbGQuPC9wPgorPHA+VmFsaWRhdGlvbiBjYW4gYmUgYXR0YWNoZWQgdG8gYSBmaWVsZCB3aXRoIHRoZSBmb2xsb3dpbmcKK2Z1bmN0aW9uLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICpmdHlwZSwgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIC4uLik7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBhcmd1bWVudHMqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KK09uY2Ugc2V0LCB0aGUgdmFsaWRhdGlvbiB0eXBlIGZvciBhIGZpZWxkIGNhbiBiZSBxdWVyaWVkIHdpdGgKKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPkZJRUxEVFlQRSAqZmllbGRfdHlwZShGSUVMRCAqZmllbGQpOyAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZvcm0gZHJpdmVyIHZhbGlkYXRlcyB0aGUgZGF0YSBpbiBhIGZpZWxkIG9ubHkgd2hlbiBkYXRhIGlzCitlbnRlcmVkIGJ5IHRoZSBlbmQtdXNlci4gVmFsaWRhdGlvbiBkb2VzIG5vdCBvY2N1ciB3aGVuPC9wPgorPHVsPgorPGxpPgorPHA+dGhlIGFwcGxpY2F0aW9uIHByb2dyYW0gY2hhbmdlcyB0aGUgZmllbGQgdmFsdWUgYnkgY2FsbGluZworc2V0X2ZpZWxkX2J1ZmZlci48L3A+Cis8L2xpPgorPGxpPgorPHA+bGlua2VkIGZpZWxkIHZhbHVlcyBhcmUgY2hhbmdlZCBpbmRpcmVjdGx5IC0tIGJ5IGNoYW5naW5nIHRoZQorZmllbGQgdG8gd2hpY2ggdGhleSBhcmUgbGlua2VkPC9wPgorPC9saT4KKzwvdWw+Cis8cD5UaGUgZm9sbG93aW5nIGFyZSB0aGUgcHJlLWRlZmluZWQgdmFsaWRhdGlvbiB0eXBlcy4gWW91IGNhbiBhbHNvCitzcGVjaWZ5IGN1c3RvbSB2YWxpZGF0aW9uLCB0aG91Z2ggaXQncyBhIGJpdCB0cmlja3kgYW5kCitjdW1iZXJzb21lLjwvcD4KKzxoMSBjbGFzcz0iQlJJREdFSEVBRCI+PGEgbmFtZT0iQUVOMTA2OSIgaWQ9CisiQUVOMTA2OSI+PC9hPlRZUEVfQUxQSEE8L2gxPgorPHA+VGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgYWxwaGFiZXRpYyBkYXRhOyBubyBibGFua3MsIG5vIGRpZ2l0cywKK25vIHNwZWNpYWwgY2hhcmFjdGVycyAodGhpcyBpcyBjaGVja2VkIGF0IGNoYXJhY3Rlci1lbnRyeSB0aW1lKS4gSXQKK2lzIHNldCB1cCB3aXRoOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9BTFBIQSwgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7ICAgICAgICAgICAgLyogbWF4aW11bSB3aWR0aCBvZiBmaWVsZCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSB3aWR0aCBhcmd1bWVudCBzZXRzIGEgbWluaW11bSB3aWR0aCBvZiBkYXRhLiBUaGUgdXNlciBoYXMgdG8KK2VudGVyIGF0LWxlYXN0IHdpZHRoIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBoZSBjYW4gbGVhdmUgdGhlCitmaWVsZC4gVHlwaWNhbGx5IHlvdSdsbCB3YW50IHRvIHNldCB0aGlzIHRvIHRoZSBmaWVsZCB3aWR0aDsgaWYKK2l0J3MgZ3JlYXRlciB0aGFuIHRoZSBmaWVsZCB3aWR0aCwgdGhlIHZhbGlkYXRpb24gY2hlY2sgd2lsbCBhbHdheXMKK2ZhaWwuIEEgbWluaW11bSB3aWR0aCBvZiB6ZXJvIG1ha2VzIGZpZWxkIGNvbXBsZXRpb24gb3B0aW9uYWwuPC9wPgorPGgxIGNsYXNzPSJCUklER0VIRUFEIj48YSBuYW1lPSJBRU4xMDczIiBpZD0KKyJBRU4xMDczIj48L2E+VFlQRV9BTE5VTTwvaDE+Cis8cD5UaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhbHBoYWJldGljIGRhdGEgYW5kIGRpZ2l0czsgbm8gYmxhbmtzLAorbm8gc3BlY2lhbCBjaGFyYWN0ZXJzICh0aGlzIGlzIGNoZWNrZWQgYXQgY2hhcmFjdGVyLWVudHJ5IHRpbWUpLiBJdAoraXMgc2V0IHVwIHdpdGg6PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0FMTlVNLCAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoKTsgICAgICAgICAgICAvKiBtYXhpbXVtIHdpZHRoIG9mIGZpZWxkICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIHdpZHRoIGFyZ3VtZW50IHNldHMgYSBtaW5pbXVtIHdpZHRoIG9mIGRhdGEuIEFzIHdpdGgKK1RZUEVfQUxQSEEsIHR5cGljYWxseSB5b3UnbGwgd2FudCB0byBzZXQgdGhpcyB0byB0aGUgZmllbGQgd2lkdGg7CitpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgZmllbGQgd2lkdGgsIHRoZSB2YWxpZGF0aW9uIGNoZWNrIHdpbGwKK2Fsd2F5cyBmYWlsLiBBIG1pbmltdW0gd2lkdGggb2YgemVybyBtYWtlcyBmaWVsZCBjb21wbGV0aW9uCitvcHRpb25hbC48L3A+Cis8aDEgY2xhc3M9IkJSSURHRUhFQUQiPjxhIG5hbWU9IkFFTjEwNzciIGlkPQorIkFFTjEwNzciPjwvYT5UWVBFX0VOVU08L2gxPgorPHA+VGhpcyB0eXBlIGFsbG93cyB5b3UgdG8gcmVzdHJpY3QgYSBmaWVsZCdzIHZhbHVlcyB0byBiZSBhbW9uZyBhCitzcGVjaWZpZWQgc2V0IG9mIHN0cmluZyB2YWx1ZXMgKGZvciBleGFtcGxlLCB0aGUgdHdvLWxldHRlciBwb3N0YWwKK2NvZGVzIGZvciBVLlMuIHN0YXRlcykuIEl0IGlzIHNldCB1cCB3aXRoOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9FTlVNLCAgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKip2YWx1ZWxpc3Q7ICAgICAgLyogbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgY2hlY2tjYXNlOyAgICAgICAgIC8qIGNhc2Utc2Vuc2l0aXZlPyAqLworICAgICAgICAgICAgICAgICAgIGludCBjaGVja3VuaXF1ZSk7ICAgICAgLyogbXVzdCBzcGVjaWZ5IHVuaXF1ZWx5PyAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSB2YWx1ZWxpc3QgcGFyYW1ldGVyIG11c3QgcG9pbnQgYXQgYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZgordmFsaWQgc3RyaW5ncy4gVGhlIGNoZWNrY2FzZSBhcmd1bWVudCwgaWYgdHJ1ZSwgbWFrZXMgY29tcGFyaXNvbgord2l0aCB0aGUgc3RyaW5nIGNhc2Utc2Vuc2l0aXZlLjwvcD4KKzxwPldoZW4gdGhlIHVzZXIgZXhpdHMgYSBUWVBFX0VOVU0gZmllbGQsIHRoZSB2YWxpZGF0aW9uIHByb2NlZHVyZQordHJpZXMgdG8gY29tcGxldGUgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciB0byBhIHZhbGlkIGVudHJ5LiBJZiBhCitjb21wbGV0ZSBjaG9pY2Ugc3RyaW5nIGhhcyBiZWVuIGVudGVyZWQsIGl0IGlzIG9mIGNvdXJzZSB2YWxpZC4gQnV0CitpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGVudGVyIGEgcHJlZml4IG9mIGEgdmFsaWQgc3RyaW5nIGFuZCBoYXZlIGl0Citjb21wbGV0ZWQgZm9yIHlvdS48L3A+Cis8cD5CeSBkZWZhdWx0LCBpZiB5b3UgZW50ZXIgc3VjaCBhIHByZWZpeCBhbmQgaXQgbWF0Y2hlcyBtb3JlIHRoYW4KK29uZSB2YWx1ZSBpbiB0aGUgc3RyaW5nIGxpc3QsIHRoZSBwcmVmaXggd2lsbCBiZSBjb21wbGV0ZWQgdG8gdGhlCitmaXJzdCBtYXRjaGluZyB2YWx1ZS4gQnV0IHRoZSBjaGVja3VuaXF1ZSBhcmd1bWVudCwgaWYgdHJ1ZSwKK3JlcXVpcmVzIHByZWZpeCBtYXRjaGVzIHRvIGJlIHVuaXF1ZSBpbiBvcmRlciB0byBiZSB2YWxpZC48L3A+Cis8cD5UaGUgUkVRX05FWFRfQ0hPSUNFIGFuZCBSRVFfUFJFVl9DSE9JQ0UgaW5wdXQgcmVxdWVzdHMgY2FuIGJlCitwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGggdGhlc2UgZmllbGRzLjwvcD4KKzxoMSBjbGFzcz0iQlJJREdFSEVBRCI+PGEgbmFtZT0iQUVOMTA4NCIgaWQ9CisiQUVOMTA4NCI+PC9hPlRZUEVfSU5URUdFUjwvaDE+Cis8cD5UaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhbiBpbnRlZ2VyLiBJdCBpcyBzZXQgdXAgYXMgZm9sbG93czo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfSU5URUdFUiwgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZywgICAgICAgICAgIC8qICMgcGxhY2VzIHRvIHplcm8tcGFkIHRvICovCisgICAgICAgICAgICAgICAgICAgaW50IHZtaW4sIGludCB2bWF4KTsgICAvKiB2YWxpZCByYW5nZSAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlZhbGlkIGNoYXJhY3RlcnMgY29uc2lzdCBvZiBhbiBvcHRpb25hbCBsZWFkaW5nIG1pbnVzIGFuZAorZGlnaXRzLiBUaGUgcmFuZ2UgY2hlY2sgaXMgcGVyZm9ybWVkIG9uIGV4aXQuIElmIHRoZSByYW5nZSBtYXhpbXVtCitpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0sIHRoZSByYW5nZSBpcyBpZ25vcmVkLjwvcD4KKzxwPklmIHRoZSB2YWx1ZSBwYXNzZXMgaXRzIHJhbmdlIGNoZWNrLCBpdCBpcyBwYWRkZWQgd2l0aCBhcyBtYW55CitsZWFkaW5nIHplcm8gZGlnaXRzIGFzIG5lY2Vzc2FyeSB0byBtZWV0IHRoZSBwYWRkaW5nIGFyZ3VtZW50LjwvcD4KKzxwPkEgVFlQRV9JTlRFR0VSIHZhbHVlIGJ1ZmZlciBjYW4gY29udmVuaWVudGx5IGJlIGludGVycHJldGVkIHdpdGgKK3RoZSBDIGxpYnJhcnkgZnVuY3Rpb24gYXRvaSgzKS48L3A+Cis8aDEgY2xhc3M9IkJSSURHRUhFQUQiPjxhIG5hbWU9IkFFTjEwOTAiIGlkPQorIkFFTjEwOTAiPjwvYT5UWVBFX05VTUVSSUM8L2gxPgorPHA+VGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgYSBkZWNpbWFsIG51bWJlci4gSXQgaXMgc2V0IHVwIGFzCitmb2xsb3dzOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9OVU1FUklDLCAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCBwYWRkaW5nLCAgICAgICAgICAgLyogIyBwbGFjZXMgb2YgcHJlY2lzaW9uICovCisgICAgICAgICAgICAgICAgICAgaW50IHZtaW4sIGludCB2bWF4KTsgICAvKiB2YWxpZCByYW5nZSAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlZhbGlkIGNoYXJhY3RlcnMgY29uc2lzdCBvZiBhbiBvcHRpb25hbCBsZWFkaW5nIG1pbnVzIGFuZAorZGlnaXRzLiBwb3NzaWJseSBpbmNsdWRpbmcgYSBkZWNpbWFsIHBvaW50LiBUaGUgcmFuZ2UgY2hlY2sgaXMKK3BlcmZvcm1lZCBvbiBleGl0LiBJZiB0aGUgcmFuZ2UgbWF4aW11bSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KK3RoZSBtaW5pbXVtLCB0aGUgcmFuZ2UgaXMgaWdub3JlZC48L3A+Cis8cD5JZiB0aGUgdmFsdWUgcGFzc2VzIGl0cyByYW5nZSBjaGVjaywgaXQgaXMgcGFkZGVkIHdpdGggYXMgbWFueQordHJhaWxpbmcgemVybyBkaWdpdHMgYXMgbmVjZXNzYXJ5IHRvIG1lZXQgdGhlIHBhZGRpbmcgYXJndW1lbnQuPC9wPgorPHA+QSBUWVBFX05VTUVSSUMgdmFsdWUgYnVmZmVyIGNhbiBjb252ZW5pZW50bHkgYmUgaW50ZXJwcmV0ZWQgd2l0aAordGhlIEMgbGlicmFyeSBmdW5jdGlvbiBhdG9mKDMpLjwvcD4KKzxoMSBjbGFzcz0iQlJJREdFSEVBRCI+PGEgbmFtZT0iQUVOMTA5NiIgaWQ9CisiQUVOMTA5NiI+PC9hPlRZUEVfUkVHRVhQPC9oMT4KKzxwPlRoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGRhdGEgbWF0Y2hpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uIEl0CitpcyBzZXQgdXAgYXMgZm9sbG93czo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfUkVHRVhQLCAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBjaGFyICpyZWdleHApOyAgICAgICAgIC8qIGV4cHJlc3Npb24gdG8gbWF0Y2ggKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgc3ludGF4IGZvciByZWd1bGFyIGV4cHJlc3Npb25zIGlzIHRoYXQgb2YgcmVnY29tcCgzKS4gVGhlCitjaGVjayBmb3IgcmVndWxhci1leHByZXNzaW9uIG1hdGNoIGlzIHBlcmZvcm1lZCBvbiBleGl0LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iRk9STURSSVZFUiIgaWQ9IkZPUk1EUklWRVIiPjE4LjYuIEZvcm0KK0RyaXZlcjogVGhlIHdvcmsgaG9yc2Ugb2YgdGhlIGZvcm1zIHN5c3RlbTwvYT48L2gzPgorPHA+QXMgaW4gdGhlIG1lbnUgc3lzdGVtLCBmb3JtX2RyaXZlcigpIHBsYXlzIGEgdmVyeSBpbXBvcnRhbnQgcm9sZQoraW4gZm9ybXMgc3lzdGVtLiBBbGwgdHlwZXMgb2YgcmVxdWVzdHMgdG8gZm9ybXMgc3lzdGVtIHNob3VsZCBiZQorZnVubmVsZWQgdGhyb3VnaCBmb3JtX2RyaXZlcigpLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBmb3JtX2RyaXZlcihGT1JNICpmb3JtLCAgICAgLyogZm9ybSBvbiB3aGljaCB0byBvcGVyYXRlICAgICAqLworICAgICAgICAgICAgICAgIGludCByZXF1ZXN0KSAgICAvKiBmb3JtIHJlcXVlc3QgY29kZSAgICAgICAgICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+QXMgeW91IGhhdmUgc2VlbiBzb21lIG9mIHRoZSBleGFtcGxlcyBhYm92ZSwgeW91IGhhdmUgdG8gYmUgaW4gYQorbG9vcCBsb29raW5nIGZvciB1c2VyIGlucHV0IGFuZCB0aGVuIGRlY2lkZSB3aGV0aGVyIGl0J3MgYSBmaWVsZAorZGF0YSBvciBhIGZvcm0gcmVxdWVzdC4gVGhlIGZvcm0gcmVxdWVzdHMgYXJlIHRoZW4gcGFzc2VkIHRvCitmb3JtX2RyaXZlcigpIHRvIGRvIHRoZSB3b3JrLjwvcD4KKzxwPlRoZSByZXF1ZXN0cyByb3VnaGx5IGNhbiBiZSBkaXZpZGVkIGludG8gZm9sbG93aW5nIGNhdGVnb3JpZXMuCitEaWZmZXJlbnQgcmVxdWVzdHMgYW5kIHRoZWlyIHVzYWdlIGlzIGV4cGxhaW5lZCBiZWxvdzo8L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJQQUdFTkFWUkVRIiBpZD0iUEFHRU5BVlJFUSI+MTguNi4xLiBQYWdlCitOYXZpZ2F0aW9uIFJlcXVlc3RzPC9hPjwvaDQ+Cis8cD5UaGVzZSByZXF1ZXN0cyBjYXVzZSBwYWdlLWxldmVsIG1vdmVzIHRocm91Z2ggdGhlIGZvcm0sCit0cmlnZ2VyaW5nIGRpc3BsYXkgb2YgYSBuZXcgZm9ybSBzY3JlZW4uIEEgZm9ybSBjYW4gYmUgbWFkZSBvZgorbXVsdGlwbGUgcGFnZXMuIElmIHlvdSBoYXZlIGEgYmlnIGZvcm0gd2l0aCBsb3Qgb2YgZmllbGRzIGFuZAorbG9naWNhbCBzZWN0aW9ucywgdGhlbiB5b3UgY2FuIGRpdmlkZSB0aGUgZm9ybSBpbnRvIHBhZ2VzLiBUaGUKK2Z1bmN0aW9uIHNldF9uZXdfcGFnZSgpIHRvIHNldCBhIG5ldyBwYWdlIGF0IHRoZSBmaWVsZAorc3BlY2lmaWVkLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfbmV3X3BhZ2UoRklFTEQgKmZpZWxkLC8qIEZpZWxkIGF0IHdoaWNoIHBhZ2UgYnJlYWsgdG8gYmUgc2V0IG9yIHVuc2V0ICovCisgICAgICAgICBib29sIG5ld19wYWdlX2ZsYWcpOyAvKiBzaG91bGQgYmUgVFJVRSB0byBwdXQgYSBicmVhayAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBmb2xsb3dpbmcgcmVxdWVzdHMgYWxsb3cgeW91IHRvIG1vdmUgdG8gZGlmZmVyZW50IHBhZ2VzPC9wPgorPHVsPgorPGxpPgorPHA+PGVtPlJFUV9ORVhUX1BBR0U8L2VtPiBNb3ZlIHRvIHRoZSBuZXh0IGZvcm0gcGFnZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9QUkVWX1BBR0U8L2VtPiBNb3ZlIHRvIHRoZSBwcmV2aW91cyBmb3JtIHBhZ2UuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfRklSU1RfUEFHRTwvZW0+IE1vdmUgdG8gdGhlIGZpcnN0IGZvcm0gcGFnZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9MQVNUX1BBR0U8L2VtPiBNb3ZlIHRvIHRoZSBsYXN0IGZvcm0gcGFnZS48L3A+Cis8L2xpPgorPC91bD4KKzxwPlRoZXNlIHJlcXVlc3RzIHRyZWF0IHRoZSBsaXN0IGFzIGN5Y2xpYzsgdGhhdCBpcywgUkVRX05FWFRfUEFHRQorZnJvbSB0aGUgbGFzdCBwYWdlIGdvZXMgdG8gdGhlIGZpcnN0LCBhbmQgUkVRX1BSRVZfUEFHRSBmcm9tIHRoZQorZmlyc3QgcGFnZSBnb2VzIHRvIHRoZSBsYXN0LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iSU5URVJGSUVMRE5BVlJFUSIgaWQ9CisiSU5URVJGSUVMRE5BVlJFUSI+MTguNi4yLiBJbnRlci1GaWVsZCBOYXZpZ2F0aW9uIFJlcXVlc3RzPC9hPjwvaDQ+Cis8cD5UaGVzZSByZXF1ZXN0cyBoYW5kbGUgbmF2aWdhdGlvbiBiZXR3ZWVuIGZpZWxkcyBvbiB0aGUgc2FtZQorcGFnZS48L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX05FWFRfRklFTEQ8L2VtPiBNb3ZlIHRvIG5leHQgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfUFJFVl9GSUVMRDwvZW0+IE1vdmUgdG8gcHJldmlvdXMgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfRklSU1RfRklFTEQ8L2VtPiBNb3ZlIHRvIHRoZSBmaXJzdCBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9MQVNUX0ZJRUxEPC9lbT4gTW92ZSB0byB0aGUgbGFzdCBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TTkVYVF9GSUVMRDwvZW0+IE1vdmUgdG8gc29ydGVkIG5leHQgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU1BSRVZfRklFTEQ8L2VtPiBNb3ZlIHRvIHNvcnRlZCBwcmV2aW91cyBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TRklSU1RfRklFTEQ8L2VtPiBNb3ZlIHRvIHRoZSBzb3J0ZWQgZmlyc3QgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0xBU1RfRklFTEQ8L2VtPiBNb3ZlIHRvIHRoZSBzb3J0ZWQgbGFzdCBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9MRUZUX0ZJRUxEPC9lbT4gTW92ZSBsZWZ0IHRvIGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1JJR0hUX0ZJRUxEPC9lbT4gTW92ZSByaWdodCB0byBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9VUF9GSUVMRDwvZW0+IE1vdmUgdXAgdG8gZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfRE9XTl9GSUVMRDwvZW0+IE1vdmUgZG93biB0byBmaWVsZC48L3A+Cis8L2xpPgorPC91bD4KKzxwPlRoZXNlIHJlcXVlc3RzIHRyZWF0IHRoZSBsaXN0IG9mIGZpZWxkcyBvbiBhIHBhZ2UgYXMgY3ljbGljOwordGhhdCBpcywgUkVRX05FWFRfRklFTEQgZnJvbSB0aGUgbGFzdCBmaWVsZCBnb2VzIHRvIHRoZSBmaXJzdCwgYW5kCitSRVFfUFJFVl9GSUVMRCBmcm9tIHRoZSBmaXJzdCBmaWVsZCBnb2VzIHRvIHRoZSBsYXN0LiBUaGUgb3JkZXIgb2YKK3RoZSBmaWVsZHMgZm9yIHRoZXNlIChhbmQgdGhlIFJFUV9GSVJTVF9GSUVMRCBhbmQgUkVRX0xBU1RfRklFTEQKK3JlcXVlc3RzKSBpcyBzaW1wbHkgdGhlIG9yZGVyIG9mIHRoZSBmaWVsZCBwb2ludGVycyBpbiB0aGUgZm9ybQorYXJyYXkgKGFzIHNldCB1cCBieSBuZXdfZm9ybSgpIG9yIHNldF9mb3JtX2ZpZWxkcygpPC9wPgorPHA+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byB0cmF2ZXJzZSB0aGUgZmllbGRzIGFzIGlmIHRoZXkgaGFkIGJlZW4KK3NvcnRlZCBpbiBzY3JlZW4tcG9zaXRpb24gb3JkZXIsIHNvIHRoZSBzZXF1ZW5jZSBnb2VzIGxlZnQtdG8tcmlnaHQKK2FuZCB0b3AtdG8tYm90dG9tLiBUbyBkbyB0aGlzLCB1c2UgdGhlIHNlY29uZCBncm91cCBvZiBmb3VyCitzb3J0ZWQtbW92ZW1lbnQgcmVxdWVzdHMuPC9wPgorPHA+RmluYWxseSwgaXQgaXMgcG9zc2libGUgdG8gbW92ZSBiZXR3ZWVuIGZpZWxkcyB1c2luZyB2aXN1YWwKK2RpcmVjdGlvbnMgdXAsIGRvd24sIHJpZ2h0LCBhbmQgbGVmdC4gVG8gYWNjb21wbGlzaCB0aGlzLCB1c2UgdGhlCit0aGlyZCBncm91cCBvZiBmb3VyIHJlcXVlc3RzLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBwb3NpdGlvbiBvZiBhCitmb3JtIGZvciBwdXJwb3NlcyBvZiB0aGVzZSByZXF1ZXN0cyBpcyBpdHMgdXBwZXItbGVmdCBjb3JuZXIuPC9wPgorPHA+Rm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBtdWx0aS1saW5lIGZpZWxkIEIsIGFuZCB0d28KK3NpbmdsZS1saW5lIGZpZWxkcyBBIGFuZCBDIG9uIHRoZSBzYW1lIGxpbmUgd2l0aCBCLCB3aXRoIEEgdG8gdGhlCitsZWZ0IG9mIEIgYW5kIEMgdG8gdGhlIHJpZ2h0IG9mIEIuIEEgUkVRX01PVkVfUklHSFQgZnJvbSBBIHdpbGwgZ28KK3RvIEIgb25seSBpZiBBLCBCLCBhbmQgQyBhbGwgc2hhcmUgdGhlIHNhbWUgZmlyc3QgbGluZTsgb3RoZXJ3aXNlCitpdCB3aWxsIHNraXAgb3ZlciBCIHRvIEMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJJTlRSQUZJRUxETkFWUkVRIiBpZD0KKyJJTlRSQUZJRUxETkFWUkVRIj4xOC42LjMuIEludHJhLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHM8L2E+PC9oND4KKzxwPlRoZXNlIHJlcXVlc3RzIGRyaXZlIG1vdmVtZW50IG9mIHRoZSBlZGl0IGN1cnNvciB3aXRoaW4gdGhlCitjdXJyZW50bHkgc2VsZWN0ZWQgZmllbGQuPC9wPgorPHVsPgorPGxpPgorPHA+PGVtPlJFUV9ORVhUX0NIQVI8L2VtPiBNb3ZlIHRvIG5leHQgY2hhcmFjdGVyLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1BSRVZfQ0hBUjwvZW0+IE1vdmUgdG8gcHJldmlvdXMgY2hhcmFjdGVyLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX05FWFRfTElORTwvZW0+IE1vdmUgdG8gbmV4dCBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1BSRVZfTElORTwvZW0+IE1vdmUgdG8gcHJldmlvdXMgbGluZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ORVhUX1dPUkQ8L2VtPiBNb3ZlIHRvIG5leHQgd29yZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9QUkVWX1dPUkQ8L2VtPiBNb3ZlIHRvIHByZXZpb3VzIHdvcmQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfQkVHX0ZJRUxEPC9lbT4gTW92ZSB0byBiZWdpbm5pbmcgb2YgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfRU5EX0ZJRUxEPC9lbT4gTW92ZSB0byBlbmQgb2YgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfQkVHX0xJTkU8L2VtPiBNb3ZlIHRvIGJlZ2lubmluZyBvZiBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0VORF9MSU5FPC9lbT4gTW92ZSB0byBlbmQgb2YgbGluZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9MRUZUX0NIQVI8L2VtPiBNb3ZlIGxlZnQgaW4gZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfUklHSFRfQ0hBUjwvZW0+IE1vdmUgcmlnaHQgaW4gZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfVVBfQ0hBUjwvZW0+IE1vdmUgdXAgaW4gZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfRE9XTl9DSEFSPC9lbT4gTW92ZSBkb3duIGluIGZpZWxkLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+RWFjaCB3b3JkIGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBjaGFyYWN0ZXJzIGJ5Cit3aGl0ZXNwYWNlLiBUaGUgY29tbWFuZHMgdG8gbW92ZSB0byBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lIG9yCitmaWVsZCBsb29rIGZvciB0aGUgZmlyc3Qgb3IgbGFzdCBub24tcGFkIGNoYXJhY3RlciBpbiB0aGVpcgorcmFuZ2VzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iU0NST0xMUkVRIiBpZD0iU0NST0xMUkVRIj4xOC42LjQuCitTY3JvbGxpbmcgUmVxdWVzdHM8L2E+PC9oND4KKzxwPkZpZWxkcyB0aGF0IGFyZSBkeW5hbWljIGFuZCBoYXZlIGdyb3duIGFuZCBmaWVsZHMgZXhwbGljaXRseQorY3JlYXRlZCB3aXRoIG9mZnNjcmVlbiByb3dzIGFyZSBzY3JvbGxhYmxlLiBPbmUtbGluZSBmaWVsZHMgc2Nyb2xsCitob3Jpem9udGFsbHk7IG11bHRpLWxpbmUgZmllbGRzIHNjcm9sbCB2ZXJ0aWNhbGx5LiBNb3N0IHNjcm9sbGluZworaXMgdHJpZ2dlcmVkIGJ5IGVkaXRpbmcgYW5kIGludHJhLWZpZWxkIG1vdmVtZW50ICh0aGUgbGlicmFyeQorc2Nyb2xscyB0aGUgZmllbGQgdG8ga2VlcCB0aGUgY3Vyc29yIHZpc2libGUpLiBJdCBpcyBwb3NzaWJsZSB0bworZXhwbGljaXRseSByZXF1ZXN0IHNjcm9sbGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgcmVxdWVzdHM6PC9wPgorPHVsPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfRkxJTkU8L2VtPiBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGEgbGluZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfQkxJTkU8L2VtPiBTY3JvbGwgdmVydGljYWxseSBiYWNrd2FyZCBhIGxpbmUuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0ZQQUdFPC9lbT4gU2Nyb2xsIHZlcnRpY2FsbHkgZm9yd2FyZCBhIHBhZ2UuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0JQQUdFPC9lbT4gU2Nyb2xsIHZlcnRpY2FsbHkgYmFja3dhcmQgYSBwYWdlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl9GSFBBR0U8L2VtPiBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGhhbGYgYQorcGFnZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfQkhQQUdFPC9lbT4gU2Nyb2xsIHZlcnRpY2FsbHkgYmFja3dhcmQgaGFsZiBhCitwYWdlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl9GQ0hBUjwvZW0+IFNjcm9sbCBob3Jpem9udGFsbHkgZm9yd2FyZCBhCitjaGFyYWN0ZXIuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0JDSEFSPC9lbT4gU2Nyb2xsIGhvcml6b250YWxseSBiYWNrd2FyZCBhCitjaGFyYWN0ZXIuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0hGTElORTwvZW0+IFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGZpZWxkIHdpZHRoCitmb3J3YXJkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl9IQkxJTkU8L2VtPiBTY3JvbGwgaG9yaXpvbnRhbGx5IG9uZSBmaWVsZCB3aWR0aAorYmFja3dhcmQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0hGSEFMRjwvZW0+IFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGhhbGYgZmllbGQgd2lkdGgKK2ZvcndhcmQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0hCSEFMRjwvZW0+IFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGhhbGYgZmllbGQgd2lkdGgKK2JhY2t3YXJkLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+Rm9yIHNjcm9sbGluZyBwdXJwb3NlcywgYSBwYWdlIG9mIGEgZmllbGQgaXMgdGhlIGhlaWdodCBvZiBpdHMKK3Zpc2libGUgcGFydC48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkVESVRSRVEiIGlkPSJFRElUUkVRIj4xOC42LjUuIEVkaXRpbmcKK1JlcXVlc3RzPC9hPjwvaDQ+Cis8cD5XaGVuIHlvdSBwYXNzIHRoZSBmb3JtcyBkcml2ZXIgYW4gQVNDSUkgY2hhcmFjdGVyLCBpdCBpcyB0cmVhdGVkCithcyBhIHJlcXVlc3QgdG8gYWRkIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGZpZWxkJ3MgZGF0YSBidWZmZXIuCitXaGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGEgcmVwbGFjZW1lbnQgZGVwZW5kcyBvbiB0aGUKK2ZpZWxkJ3MgZWRpdCBtb2RlIChpbnNlcnRpb24gaXMgdGhlIGRlZmF1bHQuPC9wPgorPHA+VGhlIGZvbGxvd2luZyByZXF1ZXN0cyBzdXBwb3J0IGVkaXRpbmcgdGhlIGZpZWxkIGFuZCBjaGFuZ2luZwordGhlIGVkaXQgbW9kZTo8L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX0lOU19NT0RFPC9lbT4gU2V0IGluc2VydGlvbiBtb2RlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX09WTF9NT0RFPC9lbT4gU2V0IG92ZXJsYXkgbW9kZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ORVdfTElORTwvZW0+IE5ldyBsaW5lIHJlcXVlc3QgKHNlZSBiZWxvdyBmb3IKK2V4cGxhbmF0aW9uKS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9JTlNfQ0hBUjwvZW0+IEluc2VydCBzcGFjZSBhdCBjaGFyYWN0ZXIgbG9jYXRpb24uPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfSU5TX0xJTkU8L2VtPiBJbnNlcnQgYmxhbmsgbGluZSBhdCBjaGFyYWN0ZXIKK2xvY2F0aW9uLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0RFTF9DSEFSPC9lbT4gRGVsZXRlIGNoYXJhY3RlciBhdCBjdXJzb3IuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfREVMX1BSRVY8L2VtPiBEZWxldGUgcHJldmlvdXMgd29yZCBhdCBjdXJzb3IuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfREVMX0xJTkU8L2VtPiBEZWxldGUgbGluZSBhdCBjdXJzb3IuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfREVMX1dPUkQ8L2VtPiBEZWxldGUgd29yZCBhdCBjdXJzb3IuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfQ0xSX0VPTDwvZW0+IENsZWFyIHRvIGVuZCBvZiBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0NMUl9FT0Y8L2VtPiBDbGVhciB0byBlbmQgb2YgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfQ0xSX0ZJRUxEPC9lbT4gQ2xlYXIgZW50aXJlIGZpZWxkLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+VGhlIGJlaGF2aW9yIG9mIHRoZSBSRVFfTkVXX0xJTkUgYW5kIFJFUV9ERUxfUFJFViByZXF1ZXN0cyBpcworY29tcGxpY2F0ZWQgYW5kIHBhcnRseSBjb250cm9sbGVkIGJ5IGEgcGFpciBvZiBmb3JtcyBvcHRpb25zLiBUaGUKK3NwZWNpYWwgY2FzZXMgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjdXJzb3IgaXMgYXQgdGhlIGJlZ2lubmluZyBvZgorYSBmaWVsZCwgb3Igb24gdGhlIGxhc3QgbGluZSBvZiB0aGUgZmllbGQuPC9wPgorPHA+Rmlyc3QsIHdlIGNvbnNpZGVyIFJFUV9ORVdfTElORTo8L3A+Cis8cD5UaGUgbm9ybWFsIGJlaGF2aW9yIG9mIFJFUV9ORVdfTElORSBpbiBpbnNlcnQgbW9kZSBpcyB0byBicmVhawordGhlIGN1cnJlbnQgbGluZSBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIGVkaXQgY3Vyc29yLCBpbnNlcnRpbmcgdGhlCitwb3J0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgYWZ0ZXIgdGhlIGN1cnNvciBhcyBhIG5ldyBsaW5lCitmb2xsb3dpbmcgdGhlIGN1cnJlbnQgYW5kIG1vdmluZyB0aGUgY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YKK3RoYXQgbmV3IGxpbmUgKHlvdSBtYXkgdGhpbmsgb2YgdGhpcyBhcyBpbnNlcnRpbmcgYSBuZXdsaW5lIGluIHRoZQorZmllbGQgYnVmZmVyKS48L3A+Cis8cD5UaGUgbm9ybWFsIGJlaGF2aW9yIG9mIFJFUV9ORVdfTElORSBpbiBvdmVybGF5IG1vZGUgaXMgdG8gY2xlYXIKK3RoZSBjdXJyZW50IGxpbmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGVkaXQgY3Vyc29yIHRvIGVuZCBvZgorbGluZS4gVGhlIGN1cnNvciBpcyB0aGVuIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQKK2xpbmUuPC9wPgorPHA+SG93ZXZlciwgUkVRX05FV19MSU5FIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCwgb3Igb24gdGhlCitsYXN0IGxpbmUgb2YgYSBmaWVsZCwgaW5zdGVhZCBkb2VzIGEgUkVRX05FWFRfRklFTEQuIE9fTkxfT1ZFUkxPQUQKK29wdGlvbiBpcyBvZmYsIHRoaXMgc3BlY2lhbCBhY3Rpb24gaXMgZGlzYWJsZWQuPC9wPgorPHA+Tm93LCBsZXQgdXMgY29uc2lkZXIgUkVRX0RFTF9QUkVWOjwvcD4KKzxwPlRoZSBub3JtYWwgYmVoYXZpb3Igb2YgUkVRX0RFTF9QUkVWIGlzIHRvIGRlbGV0ZSB0aGUgcHJldmlvdXMKK2NoYXJhY3Rlci4gSWYgaW5zZXJ0IG1vZGUgaXMgb24sIGFuZCB0aGUgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZgorYSBsaW5lLCBhbmQgdGhlIHRleHQgb24gdGhhdCBsaW5lIHdpbGwgZml0IG9uIHRoZSBwcmV2aW91cyBvbmUsIGl0CitpbnN0ZWFkIGFwcGVuZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlIHByZXZpb3VzCitvbmUgYW5kIGRlbGV0ZXMgdGhlIGN1cnJlbnQgbGluZSAoeW91IG1heSB0aGluayBvZiB0aGlzIGFzIGRlbGV0aW5nCithIG5ld2xpbmUgZnJvbSB0aGUgZmllbGQgYnVmZmVyKS48L3A+Cis8cD5Ib3dldmVyLCBSRVFfREVMX1BSRVYgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkIGlzIGluc3RlYWQKK3RyZWF0ZWQgYXMgYSBSRVFfUFJFVl9GSUVMRC48L3A+Cis8cD5JZiB0aGUgT19CU19PVkVSTE9BRCBvcHRpb24gaXMgb2ZmLCB0aGlzIHNwZWNpYWwgYWN0aW9uIGlzCitkaXNhYmxlZCBhbmQgdGhlIGZvcm1zIGRyaXZlciBqdXN0IHJldHVybnMgRV9SRVFVRVNUX0RFTklFRC48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9Ik9SREVSUkVRIiBpZD0iT1JERVJSRVEiPjE4LjYuNi4gT3JkZXIKK1JlcXVlc3RzPC9hPjwvaDQ+Cis8cD5JZiB0aGUgdHlwZSBvZiB5b3VyIGZpZWxkIGlzIG9yZGVyZWQsIGFuZCBoYXMgYXNzb2NpYXRlZAorZnVuY3Rpb25zIGZvciBnZXR0aW5nIHRoZSBuZXh0IGFuZCBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIHR5cGUgZnJvbQorYSBnaXZlbiB2YWx1ZSwgdGhlcmUgYXJlIHJlcXVlc3RzIHRoYXQgY2FuIGZldGNoIHRoYXQgdmFsdWUgaW50bwordGhlIGZpZWxkIGJ1ZmZlcjo8L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX05FWFRfQ0hPSUNFPC9lbT4gUGxhY2UgdGhlIHN1Y2Nlc3NvciB2YWx1ZSBvZiB0aGUKK2N1cnJlbnQgdmFsdWUgaW4gdGhlIGJ1ZmZlci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9QUkVWX0NIT0lDRTwvZW0+IFBsYWNlIHRoZSBwcmVkZWNlc3NvciB2YWx1ZSBvZiB0aGUKK2N1cnJlbnQgdmFsdWUgaW4gdGhlIGJ1ZmZlci48L3A+Cis8L2xpPgorPC91bD4KKzxwPk9mIHRoZSBidWlsdC1pbiBmaWVsZCB0eXBlcywgb25seSBUWVBFX0VOVU0gaGFzIGJ1aWx0LWluCitzdWNjZXNzb3IgYW5kIHByZWRlY2Vzc29yIGZ1bmN0aW9ucy4gV2hlbiB5b3UgZGVmaW5lIGEgZmllbGQgdHlwZQorb2YgeW91ciBvd24gKHNlZSBDdXN0b20gVmFsaWRhdGlvbiBUeXBlcyksIHlvdSBjYW4gYXNzb2NpYXRlIG91cgorb3duIG9yZGVyaW5nIGZ1bmN0aW9ucy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkFQUExJQ0NPTU1BTkRTIiBpZD0KKyJBUFBMSUNDT01NQU5EUyI+MTguNi43LiBBcHBsaWNhdGlvbiBDb21tYW5kczwvYT48L2g0PgorPHA+Rm9ybSByZXF1ZXN0cyBhcmUgcmVwcmVzZW50ZWQgYXMgaW50ZWdlcnMgYWJvdmUgdGhlIGN1cnNlcyB2YWx1ZQorZ3JlYXRlciB0aGFuIEtFWV9NQVggYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY29uc3RhbnQKK01BWF9DT01NQU5ELiBBIHZhbHVlIHdpdGhpbiB0aGlzIHJhbmdlIGdldHMgaWdub3JlZCBieQorZm9ybV9kcml2ZXIoKS4gU28gdGhpcyBjYW4gYmUgdXNlZCBmb3IgYW55IHB1cnBvc2UgYnkgdGhlCithcHBsaWNhdGlvbi4gSXQgY2FuIGJlIHRyZWF0ZWQgYXMgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgYWN0aW9uCithbmQgdGFrZSBjb3JyZXNwb25kaW5nIGFjdGlvbi48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJUT09MUyIgaWQ9IlRPT0xTIj4xOS4gVG9vbHMgYW5kIFdpZGdldAorTGlicmFyaWVzPC9hPjwvaDI+Cis8cD5Ob3cgdGhhdCB5b3UgaGF2ZSBzZWVuIHRoZSBjYXBhYmlsaXRpZXMgb2YgbmN1cnNlcyBhbmQgaXRzCitzaXN0ZXIgbGlicmFyaWVzLCB5b3UgYXJlIHJvbGxpbmcgeW91ciBzbGVldmVzIHVwIGFuZCBnZWFyaW5nIGZvciBhCitwcm9qZWN0IHRoYXQgaGVhdmlseSBtYW5pcHVsYXRlcyBzY3JlZW4uIEJ1dCB3YWl0Li4gSXQgY2FuIGJlCitwcmV0dHkgZGlmZmljdWx0IHRvIHdyaXRlIGFuZCBtYWludGFpbiBjb21wbGV4IEdVSSB3aWRnZXRzIGluIHBsYWluCituY3Vyc2VzIG9yIGV2ZW4gd2l0aCB0aGUgYWRkaXRpb25hbCBsaWJyYXJpZXMuIFRoZXJlIGFyZSBzb21lCityZWFkeS10by11c2UgdG9vbHMgYW5kIHdpZGdldCBsaWJyYXJpZXMgdGhhdCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mCit3cml0aW5nIHlvdXIgb3duIHdpZGdldHMuIFlvdSBjYW4gdXNlIHNvbWUgb2YgdGhlbSwgZ2V0IGlkZWFzIGZyb20KK3RoZSBjb2RlLCBvciBldmVuIGV4dGVuZCB0aGVtLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNESyIgaWQ9IkNESyI+MTkuMS4gQ0RLIChDdXJzZXMKK0RldmVsb3BtZW50IEtpdCk8L2E+PC9oMz4KKzxwPkluIHRoZSBhdXRob3IncyB3b3JkczwvcD4KKzxwPjxlbT5DREsgc3RhbmRzIGZvciAnQ3Vyc2VzIERldmVsb3BtZW50IEtpdCcgYW5kIGl0IGN1cnJlbnRseQorY29udGFpbnMgMjEgcmVhZHkgdG8gdXNlIHdpZGdldHMgd2hpY2ggZmFjaWxpdGF0ZSB0aGUgc3BlZWR5CitkZXZlbG9wbWVudCBvZiBmdWxsIHNjcmVlbiBjdXJzZXMgcHJvZ3JhbXMuPC9lbT48L3A+Cis8cD5UaGUga2l0IHByb3ZpZGVzIHNvbWUgdXNlZnVsIHdpZGdldHMsIHdoaWNoIGNhbiBiZSB1c2VkIGluIHlvdXIKK3Byb2dyYW1zIGRpcmVjdGx5LiBJdCdzIHByZXR0eSB3ZWxsIHdyaXR0ZW4gYW5kIHRoZSBkb2N1bWVudGF0aW9uCitpcyB2ZXJ5IGdvb2QuIFRoZSBleGFtcGxlcyBpbiB0aGUgZXhhbXBsZXMgZGlyZWN0b3J5IGNhbiBiZSBhIGdvb2QKK3BsYWNlIHRvIHN0YXJ0IGZvciBiZWdpbm5lcnMuIFRoZSBDREsgY2FuIGJlIGRvd25sb2FkZWQgZnJvbQorPGEgaHJlZj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2Nkay8iIHRhcmdldD0KKyJfdG9wIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLzwvYT4gLiBGb2xsb3cgdGhlCitpbnN0cnVjdGlvbnMgaW4gUkVBRE1FIGZpbGUgdG8gaW5zdGFsbCBpdC48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJXSURHRVRMSVNUIiBpZD0iV0lER0VUTElTVCI+MTkuMS4xLgorV2lkZ2V0IExpc3Q8L2E+PC9oND4KKzxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2Ygd2lkZ2V0cyBwcm92aWRlZCB3aXRoIGNkayBhbmQgdGhlaXIKK2Rlc2NyaXB0aW9uLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj5XaWRnZXQgVHlwZSAgICAgICAgICAgUXVpY2sgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQWxwaGFsaXN0ICAgICAgICAgICAgIEFsbG93cyBhIHVzZXIgdG8gc2VsZWN0IGZyb20gYSBsaXN0IG9mIHdvcmRzLCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgdGhlIGFiaWxpdHkgdG8gbmFycm93IHRoZSBzZWFyY2ggbGlzdCBieSB0eXBpbmcgaW4gYQorICAgICAgICAgICAgICAgICAgICAgIGZldyBjaGFyYWN0ZXJzIG9mIHRoZSBkZXNpcmVkIHdvcmQuCitCdXR0b25ib3ggICAgICAgICAgICAgVGhpcyBjcmVhdGVzIGEgbXVsdGlwbGUgYnV0dG9uIHdpZGdldC4gCitDYWxlbmRhciAgICAgICAgICAgICAgQ3JlYXRlcyBhIGxpdHRsZSBzaW1wbGUgY2FsZW5kYXIgd2lkZ2V0LgorRGlhbG9nICAgICAgICAgICAgICAgIFByb21wdHMgdGhlIHVzZXIgd2l0aCBhIG1lc3NhZ2UsIGFuZCB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAgICAgIGNhbiBwaWNrIGFuIGFuc3dlciBmcm9tIHRoZSBidXR0b25zIHByb3ZpZGVkLgorRW50cnkgICAgICAgICAgICAgICAgIEFsbG93cyB0aGUgdXNlciB0byBlbnRlciB2YXJpb3VzIHR5cGVzIG9mIGluZm9ybWF0aW9uLgorRmlsZSBTZWxlY3RvciAgICAgICAgIEEgZmlsZSBzZWxlY3RvciBidWlsdCBmcm9tIENkayBiYXNlIHdpZGdldHMuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlIHNob3dzIGhvdyB0byBjcmVhdGUgbW9yZSBjb21wbGljYXRlZCB3aWRnZXRzCisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIENkayB3aWRnZXQgbGlicmFyeS4KK0dyYXBoICAgICAgICAgICAgICAgICBEcmF3cyBhIGdyYXBoLgorSGlzdG9ncmFtICAgICAgICAgICAgIERyYXdzIGEgaGlzdG9ncmFtLgorSXRlbSBMaXN0ICAgICAgICAgICAgIENyZWF0ZXMgYSBwb3AgdXAgZmllbGQgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgIG9uZSBvZiBzZXZlcmFsIGNob2ljZXMgaW4gYSBzbWFsbCBmaWVsZC4gVmVyeSB1c2VmdWwKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpbmdzIGxpa2UgZGF5cyBvZiB0aGUgd2VlayBvciBtb250aCBuYW1lcy4KK0xhYmVsICAgICAgICAgICAgICAgICBEaXNwbGF5cyBtZXNzYWdlcyBpbiBhIHBvcCB1cCBib3gsIG9yIHRoZSBsYWJlbCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNjcmVlbi4KK01hcnF1ZWUgICAgICAgICAgICAgICBEaXNwbGF5cyBhIG1lc3NhZ2UgaW4gYSBzY3JvbGxpbmcgbWFycXVlZS4KK01hdHJpeCAgICAgICAgICAgICAgICBDcmVhdGVzIGEgY29tcGxleCBtYXRyaXggd2l0aCBsb3RzIG9mIG9wdGlvbnMuCitNZW51ICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIHB1bGwtZG93biBtZW51IGludGVyZmFjZS4KK011bHRpcGxlIExpbmUgRW50cnkgICBBIG11bHRpcGxlIGxpbmUgZW50cnkgZmllbGQuIFZlcnkgdXNlZnVsCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGxvbmcgZmllbGRzLiAobGlrZSBhIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgZmllbGQpCitSYWRpbyBMaXN0ICAgICAgICAgICAgQ3JlYXRlcyBhIHJhZGlvIGJ1dHRvbiBsaXN0LgorU2NhbGUgICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBudW1lcmljIHNjYWxlLiBVc2VkIGZvciBhbGxvd2luZyBhIHVzZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICBwaWNrIGEgbnVtZXJpYyB2YWx1ZSBhbmQgcmVzdHJpY3QgdGhlbSB0byBhIHJhbmdlIG9mIAorICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KK1Njcm9sbGluZyBMaXN0ICAgICAgICBDcmVhdGVzIGEgc2Nyb2xsaW5nIGxpc3QvbWVudSBsaXN0LgorU2Nyb2xsaW5nIFdpbmRvdyAgICAgIENyZWF0ZXMgYSBzY3JvbGxpbmcgbG9nIGZpbGUgdmlld2VyLiBDYW4gYWRkIAorICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGludG8gdGhlIHdpbmRvdyB3aGlsZSBpdHMgcnVubmluZy4gCisgICAgICAgICAgICAgICAgICAgICAgQSBnb29kIHdpZGdldCBmb3IgZGlzcGxheWluZyB0aGUgcHJvZ3Jlc3Mgb2YKKyAgICAgICAgICAgICAgICAgICAgICBzb21ldGhpbmcuIChha2luIHRvIGEgY29uc29sZSB3aW5kb3cpCitTZWxlY3Rpb24gTGlzdCAgICAgICAgQ3JlYXRlcyBhIG11bHRpcGxlIG9wdGlvbiBzZWxlY3Rpb24gbGlzdC4KK1NsaWRlciAgICAgICAgICAgICAgICBBa2luIHRvIHRoZSBzY2FsZSB3aWRnZXQsIHRoaXMgd2lkZ2V0IHByb3ZpZGVzIGEKKyAgICAgICAgICAgICAgICAgICAgICB2aXN1YWwgc2xpZGUgYmFyIHRvIHJlcHJlc2VudCB0aGUgbnVtZXJpYyB2YWx1ZS4KK1RlbXBsYXRlICAgICAgICAgICAgICBDcmVhdGVzIGEgZW50cnkgZmllbGQgd2l0aCBjaGFyYWN0ZXIgc2Vuc2l0aXZlIAorICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9ucy4gVXNlZCBmb3IgcHJlLWZvcm1hdHRlZCBmaWVsZHMgbGlrZQorICAgICAgICAgICAgICAgICAgICAgIGRhdGVzIGFuZCBwaG9uZSBudW1iZXJzLgorVmlld2VyICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBmaWxlL2luZm9ybWF0aW9uIHZpZXdlci4gVmVyeSB1c2VmdWwKKyAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSBuZWVkIHRvIGRpc3BsYXkgbG9hZHMgb2YgaW5mb3JtYXRpb24uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5BIGZldyBvZiB0aGUgd2lkZ2V0cyBhcmUgbW9kaWZpZWQgYnkgVGhvbWFzIERpY2tleSBpbiByZWNlbnQKK3ZlcnNpb25zLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iQ0RLQVRUUkFDVCIgaWQ9IkNES0FUVFJBQ1QiPjE5LjEuMi4gU29tZQorQXR0cmFjdGl2ZSBGZWF0dXJlczwvYT48L2g0PgorPHA+QXBhcnQgZnJvbSBtYWtpbmcgb3VyIGxpZmUgZWFzaWVyIHdpdGggcmVhZGlseSB1c2FibGUgd2lkZ2V0cywKK2NkayBzb2x2ZXMgb25lIGZydXN0cmF0aW5nIHByb2JsZW0gd2l0aCBwcmludGluZyBtdWx0aSBjb2xvcmVkCitzdHJpbmdzLCBqdXN0aWZpZWQgc3RyaW5ncyBlbGVnYW50bHkuIFNwZWNpYWwgZm9ybWF0dGluZyB0YWdzIGNhbgorYmUgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3Mgd2hpY2ggYXJlIHBhc3NlZCB0byBDREsgZnVuY3Rpb25zLiBGb3IKK0V4YW1wbGU8L3A+Cis8cD5JZiB0aGUgc3RyaW5nPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+IiZsdDsvQi8xJmd0O1RoaXMgbGluZSBzaG91bGQgaGF2ZSBhIHllbGxvdyBmb3JlZ3JvdW5kIGFuZCBhIGJsdWUKK2JhY2tncm91bmQuJmx0OyExJmd0OyI8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5naXZlbiBhcyBhIHBhcmFtZXRlciB0byBuZXdDREtMYWJlbCgpLCBpdCBwcmludHMgdGhlIGxpbmUgd2l0aAoreWVsbG93IGZvcmVncm91bmQgYW5kIGJsdWUgYmFja2dyb3VuZC4gVGhlcmUgYXJlIG90aGVyIHRhZ3MKK2F2YWlsYWJsZSBmb3IganVzdGlmeWluZyBzdHJpbmcsIGVtYmVkZGluZyBzcGVjaWFsIGRyYXdpbmcKK2NoYXJhY3RlcnMgZXRjLi4gUGxlYXNlIHJlZmVyIHRvIHRoZSBtYW4gcGFnZSBjZGtfZGlzcGxheSgzWCkgZm9yCitkZXRhaWxzLiBUaGUgbWFuIHBhZ2UgZXhwbGFpbnMgdGhlIHVzYWdlIHdpdGggbmljZSBleGFtcGxlcy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkNES0NPTkNMVVNJT04iIGlkPQorIkNES0NPTkNMVVNJT04iPjE5LjEuMy4gQ29uY2x1c2lvbjwvYT48L2g0PgorPHA+QWxsIGluIGFsbCwgQ0RLIGlzIGEgd2VsbC13cml0dGVuIHBhY2thZ2Ugb2Ygd2lkZ2V0cywgd2hpY2ggaWYKK3VzZWQgcHJvcGVybHkgY2FuIGZvcm0gYSBzdHJvbmcgZnJhbWUgd29yayBmb3IgZGV2ZWxvcGluZyBjb21wbGV4CitHVUkuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkRJQUxPRyIgaWQ9IkRJQUxPRyI+MTkuMi4gVGhlCitkaWFsb2c8L2E+PC9oMz4KKzxwPkxvbmcgbG9uZyBhZ28sIGluIFNlcHRlbWJlciAxOTk0LCB3aGVuIGZldyBwZW9wbGUga25ldyBsaW51eCwKK0plZmYgVHJhbnRlciB3cm90ZSBhbiA8YSBocmVmPQorImh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlNS8yODA3Lmh0bWwiIHRhcmdldD0KKyJfdG9wIj5hcnRpY2xlPC9hPiBvbiBkaWFsb2cgaW4gTGludXggSm91cm5hbC4gSGUgc3RhcnRzIHRoZQorYXJ0aWNsZSB3aXRoIHRoZXNlIHdvcmRzLi48L3A+Cis8cD48ZW0+TGludXggaXMgYmFzZWQgb24gdGhlIFVuaXggb3BlcmF0aW5nIHN5c3RlbSwgYnV0IGFsc28KK2ZlYXR1cmVzIGEgbnVtYmVyIG9mIHVuaXF1ZSBhbmQgdXNlZnVsIGtlcm5lbCBmZWF0dXJlcyBhbmQKK2FwcGxpY2F0aW9uIHByb2dyYW1zIHRoYXQgb2Z0ZW4gZ28gYmV5b25kIHdoYXQgaXMgYXZhaWxhYmxlIHVuZGVyCitVbml4LiBPbmUgbGl0dGxlLWtub3duIGdlbSBpcyAiZGlhbG9nIiwgYSB1dGlsaXR5IGZvciBjcmVhdGluZworcHJvZmVzc2lvbmFsLWxvb2tpbmcgZGlhbG9nIGJveGVzIGZyb20gd2l0aGluIHNoZWxsIHNjcmlwdHMuIFRoaXMKK2FydGljbGUgcHJlc2VudHMgYSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gdGhlIGRpYWxvZyB1dGlsaXR5LCBhbmQKK3Nob3dzIGV4YW1wbGVzIG9mIGhvdyBhbmQgd2hlcmUgaXQgY2FuIGJlIHVzZWQ8L2VtPjwvcD4KKzxwPkFzIGhlIGV4cGxhaW5zLCBkaWFsb2cgaXMgYSByZWFsIGdlbSBpbiBtYWtpbmcKK3Byb2Zlc3Npb25hbC1sb29raW5nIGRpYWxvZyBib3hlcyB3aXRoIGVhc2UuIEl0IGNyZWF0ZXMgYSB2YXJpZXR5CitvZiBkaWFsb2cgYm94ZXMsIG1lbnVzLCBjaGVjayBsaXN0cyBldGMuLiBJdCBpcyB1c3VhbGx5IGluc3RhbGxlZAorYnkgZGVmYXVsdC4gSWYgbm90LCB5b3UgY2FuIGRvd25sb2FkIGl0IGZyb20gPGEgaHJlZj0KKyJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlhbG9nLyIgdGFyZ2V0PSJfdG9wIj5UaG9tYXMKK0RpY2tleTwvYT4ncyBzaXRlLjwvcD4KKzxwPlRoZSBhYm92ZS1tZW50aW9uZWQgYXJ0aWNsZSBnaXZlcyBhIHZlcnkgZ29vZCBvdmVydmlldyBvZiBpdHMKK3VzZXMgYW5kIGNhcGFiaWxpdGVzLiBUaGUgbWFuIHBhZ2UgaGFzIG1vcmUgZGV0YWlscy4gSXQgY2FuIGJlIHVzZWQKK2luIHZhcmlldHkgb2Ygc2l0dWF0aW9ucy4gT25lIGdvb2QgZXhhbXBsZSBpcyBidWlsZGluZyBvZiBsaW51eAora2VybmVsIGluIHRleHQgbW9kZS4gTGludXgga2VybmVsIHVzZXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGRpYWxvZwordGFpbG9yZWQgZm9yIGl0cyBuZWVkcy48L3A+Cis8cD5kaWFsb2cgd2FzIGluaXRpYWxseSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggc2hlbGwgc2NyaXB0cy4gSWYKK3lvdSB3YW50IHRvIHVzZSBpdHMgZnVuY3Rpb25hbGl0eSBpbiBhIGMgcHJvZ3JhbSwgdGhlbiB5b3UgY2FuIHVzZQorbGliZGlhbG9nLiBUaGUgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhpcyBpcyBzcGFyc2UuIERlZmluaXRpdmUKK3JlZmVyZW5jZSBpcyB0aGUgZGlhbG9nLmggaGVhZGVyIGZpbGUgd2hpY2ggY29tZXMgd2l0aCB0aGUgbGlicmFyeS4KK1lvdSBtYXkgbmVlZCB0byBoYWNrIGhlcmUgYW5kIHRoZXJlIHRvIGdldCB0aGUgcmVxdWlyZWQgb3V0cHV0LiBUaGUKK3NvdXJjZSBpcyBlYXNpbHkgY3VzdG9taXphYmxlLiBJIGhhdmUgdXNlZCBpdCBvbiBhIG51bWJlciBvZgorb2NjYXNpb25zIGJ5IG1vZGlmeWluZyB0aGUgY29kZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlBFUkxDVVJTRVMiIGlkPSJQRVJMQ1VSU0VTIj4xOS4zLiBQZXJsCitDdXJzZXMgTW9kdWxlcyBDVVJTRVM6OkZPUk0gYW5kIENVUlNFUzo6V0lER0VUUzwvYT48L2gzPgorPHA+VGhlIHBlcmwgbW9kdWxlIEN1cnNlcywgQ3Vyc2VzOjpGb3JtIGFuZCBDdXJzZXM6OldpZGdldHMgZ2l2ZQorYWNjZXNzIHRvIGN1cnNlcyBmcm9tIHBlcmwuIElmIHlvdSBoYXZlIGN1cnNlcyBhbmQgYmFzaWMgcGVybCBpcworaW5zdGFsbGVkLCB5b3UgY2FuIGdldCB0aGVzZSBtb2R1bGVzIGZyb20gPGEgaHJlZj0KKyJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvMDFtb2R1bGVzLmluZGV4Lmh0bWwiIHRhcmdldD0KKyJfdG9wIj5DUEFOIEFsbCBNb2R1bGVzIHBhZ2U8L2E+LiBHZXQgdGhlIHRocmVlIHppcHBlZCBtb2R1bGVzIGluCit0aGUgQ3Vyc2VzIGNhdGVnb3J5LiBPbmNlIGluc3RhbGxlZCB5b3UgY2FuIHVzZSB0aGVzZSBtb2R1bGVzIGZyb20KK3Blcmwgc2NyaXB0cyBsaWtlIGFueSBvdGhlciBtb2R1bGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBlcmwKK21vZHVsZXMgc2VlIHBlcmxtb2QgbWFuIHBhZ2UuIFRoZSBhYm92ZSBtb2R1bGVzIGNvbWUgd2l0aCBnb29kCitkb2N1bWVudGF0aW9uIGFuZCB0aGV5IGhhdmUgc29tZSBkZW1vIHNjcmlwdHMgdG8gdGVzdCB0aGUKK2Z1bmN0aW9uYWxpdHkuIFRob3VnaCB0aGUgd2lkZ2V0cyBwcm92aWRlZCBhcmUgdmVyeSBydWRpbWVudGFyeSwKK3RoZXNlIG1vZHVsZXMgcHJvdmlkZSBnb29kIGFjY2VzcyB0byBjdXJzZXMgbGlicmFyeSBmcm9tIHBlcmwuPC9wPgorPHA+U29tZSBvZiBteSBjb2RlIGV4YW1wbGVzIGFyZSBjb252ZXJ0ZWQgdG8gcGVybCBieSBBbnVyYWRoYQorUmF0bmF3ZWVyYSBhbmQgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnBlcmw8L3Zhcj4gZGlyZWN0b3J5LjwvcD4KKzxwPkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBtYW4gcGFnZXMgQ3Vyc2VzKDMpICwgQ3Vyc2VzOjpGb3JtKDMpCithbmQgQ3Vyc2VzOjpXaWRnZXRzKDMpLiBUaGVzZSBwYWdlcyBhcmUgaW5zdGFsbGVkIG9ubHkgd2hlbiB0aGUKK2Fib3ZlIG1vZHVsZXMgYXJlIGFjcXVpcmVkIGFuZCBpbnN0YWxsZWQuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IkpVU1RGT1JGVU4iIGlkPSJKVVNURk9SRlVOIj4yMC4gSnVzdCBGb3IKK0Z1biAhISE8L2E+PC9oMj4KKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyBmZXcgcHJvZ3JhbXMgd3JpdHRlbiBieSBtZSBqdXN0IGZvciBmdW4uCitUaGV5IGRvbid0IHNpZ25pZnkgYSBiZXR0ZXIgcHJvZ3JhbW1pbmcgcHJhY3RpY2Ugb3IgdGhlIGJlc3Qgd2F5IG9mCit1c2luZyBuY3Vyc2VzLiBUaGV5IGFyZSBwcm92aWRlZCBoZXJlIHNvIGFzIHRvIGFsbG93IGJlZ2lubmVycyB0bworZ2V0IGlkZWFzIGFuZCBhZGQgbW9yZSBwcm9ncmFtcyB0byB0aGlzIHNlY3Rpb24uIElmIHlvdSBoYXZlCit3cml0dGVuIGEgY291cGxlIG9mIG5pY2UsIHNpbXBsZSBwcm9ncmFtcyBpbiBjdXJzZXMgYW5kIHdhbnQgdGhlbQordG8gaW5jbHVkZWQgaGVyZSwgY29udGFjdCA8YSBocmVmPSJtYWlsdG86cHBhZGFsYUBnbWFpbC5jb20iCit0YXJnZXQ9Il90b3AiPm1lPC9hPi48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJHQU1FT0ZMSUZFIiBpZD0iR0FNRU9GTElGRSI+MjAuMS4gVGhlCitHYW1lIG9mIExpZmU8L2E+PC9oMz4KKzxwPkdhbWUgb2YgbGlmZSBpcyBhIHdvbmRlciBvZiBtYXRoLiBJbiA8YSBocmVmPQorImh0dHA6Ly93d3cubWF0aC5jb20vc3R1ZGVudHMvd29uZGVycy9saWZlL2xpZmUuaHRtbCIgdGFyZ2V0PQorIl90b3AiPlBhdWwgQ2FsbGFoYW48L2E+J3Mgd29yZHM8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj48ZW0+VGhlIEdhbWUgb2YgTGlmZSAob3Igc2ltcGx5IExpZmUpIGlzIG5vdCBhIGdhbWUgaW4gdGhlIGNvbnZlbnRpb25hbCBzZW5zZS4gVGhlcmUKK2FyZSBubyBwbGF5ZXJzLCBhbmQgbm8gd2lubmluZyBvciBsb3NpbmcuIE9uY2UgdGhlICJwaWVjZXMiIGFyZSBwbGFjZWQgaW4gdGhlCitzdGFydGluZyBwb3NpdGlvbiwgdGhlIHJ1bGVzIGRldGVybWluZSBldmVyeXRoaW5nIHRoYXQgaGFwcGVucyBsYXRlci4KK05ldmVydGhlbGVzcywgTGlmZSBpcyBmdWxsIG9mIHN1cnByaXNlcyEgSW4gbW9zdCBjYXNlcywgaXQgaXMgaW1wb3NzaWJsZSB0byBsb29rCithdCBhIHN0YXJ0aW5nIHBvc2l0aW9uIChvciBwYXR0ZXJuKSBhbmQgc2VlIHdoYXQgd2lsbCBoYXBwZW4gaW4gdGhlIGZ1dHVyZS4gVGhlCitvbmx5IHdheSB0byBmaW5kIG91dCBpcyB0byBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoZSBnYW1lLjwvZW0+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhpcyBwcm9ncmFtIHN0YXJ0cyB3aXRoIGEgc2ltcGxlIGludmVydGVkIFUgcGF0dGVybiBhbmQgc2hvd3MKK2hvdyB3b25kZXJmdWwgbGlmZSB3b3Jrcy4gVGhlcmUgaXMgYSBsb3Qgb2Ygcm9vbSBmb3IgaW1wcm92ZW1lbnQgaW4KK3RoZSBwcm9ncmFtLiBZb3UgY2FuIGxldCB0aGUgdXNlciBlbnRlciBwYXR0ZXJuIG9mIGhpcyBjaG9pY2Ugb3IKK2V2ZW4gdGFrZSBpbnB1dCBmcm9tIGEgZmlsZS4gWW91IGNhbiBhbHNvIGNoYW5nZSBydWxlcyBhbmQgcGxheQord2l0aCBhIGxvdCBvZiB2YXJpYXRpb25zLiBTZWFyY2ggb24gPGEgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tIgordGFyZ2V0PSJfdG9wIj5nb29nbGU8L2E+IGZvciBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiBvbiBnYW1lIG9mCitsaWZlLjwvcD4KKzxwPjxlbT5GaWxlIFBhdGg6IEp1c3RGb3JGdW4vbGlmZS5jPC9lbT48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1BR0lDIiBpZD0iTUFHSUMiPjIwLjIuIE1hZ2ljCitTcXVhcmU8L2E+PC9oMz4KKzxwPk1hZ2ljIFNxdWFyZSwgYW5vdGhlciB3b25kZXIgb2YgbWF0aCwgaXMgdmVyeSBzaW1wbGUgdG8KK3VuZGVyc3RhbmQgYnV0IHZlcnkgZGlmZmljdWx0IHRvIG1ha2UuIEluIGEgbWFnaWMgc3F1YXJlIHN1bSBvZiB0aGUKK251bWJlcnMgaW4gZWFjaCByb3csIGVhY2ggY29sdW1uIGlzIGVxdWFsLiBFdmVuIGRpYWdub2wgc3VtIGNhbiBiZQorZXF1YWwuIFRoZXJlIGFyZSBtYW55IHZhcmlhdGlvbnMgd2hpY2ggaGF2ZSBzcGVjaWFsIHByb3BlcnRpZXMuPC9wPgorPHA+VGhpcyBwcm9ncmFtIGNyZWF0ZXMgYSBzaW1wbGUgbWFnaWMgc3F1YXJlIG9mIG9kZCBvcmRlci48L3A+Cis8cD48ZW0+RmlsZSBQYXRoOiBKdXN0Rm9yRnVuL21hZ2ljLmM8L2VtPjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iSEFOT0kiIGlkPSJIQU5PSSI+MjAuMy4gVG93ZXJzIG9mCitIYW5vaTwvYT48L2gzPgorPHA+VGhlIGZhbW91cyB0b3dlcnMgb2YgaGFub2kgc29sdmVyLiBUaGUgYWltIG9mIHRoZSBnYW1lIGlzIHRvCittb3ZlIHRoZSBkaXNrcyBvbiB0aGUgZmlyc3QgcGVnIHRvIGxhc3QgcGVnLCB1c2luZyBtaWRkbGUgcGVnIGFzIGEKK3RlbXBvcmFyeSBzdGF5LiBUaGUgY2F0Y2ggaXMgbm90IHRvIHBsYWNlIGEgbGFyZ2VyIGRpc2sgb3ZlciBhCitzbWFsbCBkaXNrIGF0IGFueSB0aW1lLjwvcD4KKzxwPjxlbT5GaWxlIFBhdGg6IEp1c3RGb3JGdW4vaGFub2kuYzwvZW0+PC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJRVUVFTlMiIGlkPSJRVUVFTlMiPjIwLjQuIFF1ZWVucworUHV6emxlPC9hPjwvaDM+Cis8cD5UaGUgb2JqZWN0aXZlIG9mIHRoZSBmYW1vdXMgTi1RdWVlbiBwdXp6bGUgaXMgdG8gcHV0IE4gcXVlZW5zIG9uCithIE4gWCBOIGNoZXNzIGJvYXJkIHdpdGhvdXQgYXR0YWNraW5nIGVhY2ggb3RoZXIuPC9wPgorPHA+VGhpcyBwcm9ncmFtIHNvbHZlcyBpdCB3aXRoIGEgc2ltcGxlIGJhY2t0cmFja2luZyB0ZWNobmlxdWUuPC9wPgorPHA+PGVtPkZpbGUgUGF0aDogSnVzdEZvckZ1bi9xdWVlbnMuYzwvZW0+PC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJTSFVGRkxFIiBpZD0iU0hVRkZMRSI+MjAuNS4KK1NodWZmbGU8L2E+PC9oMz4KKzxwPkEgZnVuIGdhbWUsIGlmIHlvdSBoYXZlIHRpbWUgdG8ga2lsbC48L3A+Cis8cD48ZW0+RmlsZSBQYXRoOiBKdXN0Rm9yRnVuL3NodWZmbGUuYzwvZW0+PC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJUVCIgaWQ9IlRUIj4yMC42LiBUeXBpbmcgVHV0b3I8L2E+PC9oMz4KKzxwPkEgc2ltcGxlIHR5cGluZyB0dXRvciwgSSBjcmVhdGVkIG1vcmUgb3V0IG9mIG5lZWQgdGhhbiBmb3IgZWFzZQorb2YgdXNlLiBJZiB5b3Uga25vdyBob3cgdG8gcHV0IHlvdXIgZmluZ2VycyBjb3JyZWN0bHkgb24gdGhlCitrZXlib2FyZCwgYnV0IGxhY2sgcHJhY3RpY2UsIHRoaXMgY2FuIGJlIGhlbHBmdWwuPC9wPgorPHA+PGVtPkZpbGUgUGF0aDogSnVzdEZvckZ1bi90dC5jPC9lbT48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iUkVGIiBpZD0iUkVGIj4yMS4gUmVmZXJlbmNlczwvYT48L2gyPgorPHVsPgorPGxpPgorPHA+TkNVUlNFUyBtYW4gcGFnZXM8L3A+Cis8L2xpPgorPGxpPgorPHA+TkNVUlNFUyBGQVEgYXQgPGEgaHJlZj0KKyJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9uY3Vyc2VzLmZhcS5odG1sIiB0YXJnZXQ9CisiX3RvcCI+aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvbmN1cnNlcy5mYXEuaHRtbDwvYT48L3A+Cis8L2xpPgorPGxpPgorPHA+V3JpdGluZyBwcm9ncmFtcyB3aXRoIE5DVVJTRVMgYnkgRXJpYyBSYXltb25kIGFuZCBaZXlkIE0uCitCZW4tSGFsaW0gYXQgPGEgaHJlZj0KKyJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9uY3Vyc2VzLWludHJvLmh0bWwiIHRhcmdldD0KKyJfdG9wIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9uY3Vyc2VzLWludHJvLmh0bWw8L2E+IC0KK3NvbWV3aGF0IG9ic29sZXRlLiBJIHdhcyBpbnNwaXJlZCBieSB0aGlzIGRvY3VtZW50IGFuZCB0aGUKK3N0cnVjdHVyZSBvZiB0aGlzIEhPV1RPIGZvbGxvd3MgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQ8L3A+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZmlsZXMuaHRtIGIvZG9jL2h0bWwvYWRhL2ZpbGVzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JhZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2ZpbGVzLmh0bQpAQCAtMCwwICsxLDYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDIgQUxJR049Q0VOVEVSPkZpbGVzPC9IMj4KKzxBIEhSRUY9ImZpbGVzL1QuaHRtIj5bVF08L0E+Cis8L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2ZpbGVzL1QuaHRtIGIvZG9jL2h0bWwvYWRhL2ZpbGVzL1QuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZDY5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZmlsZXMvVC5odG0KQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+VDwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RmlsZXMgLSBUPC9IMj4KKzxBIEhSRUY9Ii4uL2ZpbGVzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLmFkczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMmRhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MuaHRtCkBAIC0wLDAgKzEsMjcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDIgQUxJR049Q0VOVEVSPkZ1bmN0aW9ucy9Qcm9jZWR1cmVzPC9IMj4KKzxBIEhSRUY9ImZ1bmNzL0EuaHRtIj5bQV08L0E+Cis8QSBIUkVGPSJmdW5jcy9CLmh0bSI+W0JdPC9BPgorPEEgSFJFRj0iZnVuY3MvQy5odG0iPltDXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0QuaHRtIj5bRF08L0E+Cis8QSBIUkVGPSJmdW5jcy9FLmh0bSI+W0VdPC9BPgorPEEgSFJFRj0iZnVuY3MvRi5odG0iPltGXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0cuaHRtIj5bR108L0E+Cis8QSBIUkVGPSJmdW5jcy9ILmh0bSI+W0hdPC9BPgorPEEgSFJFRj0iZnVuY3MvSS5odG0iPltJXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0suaHRtIj5bS108L0E+Cis8QSBIUkVGPSJmdW5jcy9MLmh0bSI+W0xdPC9BPgorPEEgSFJFRj0iZnVuY3MvTS5odG0iPltNXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL04uaHRtIj5bTl08L0E+Cis8QSBIUkVGPSJmdW5jcy9PLmh0bSI+W09dPC9BPgorPEEgSFJFRj0iZnVuY3MvUC5odG0iPltQXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1EuaHRtIj5bUV08L0E+Cis8QSBIUkVGPSJmdW5jcy9SLmh0bSI+W1JdPC9BPgorPEEgSFJFRj0iZnVuY3MvUy5odG0iPltTXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1QuaHRtIj5bVF08L0E+Cis8QSBIUkVGPSJmdW5jcy9VLmh0bSI+W1VdPC9BPgorPEEgSFJFRj0iZnVuY3MvVi5odG0iPltWXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1cuaHRtIj5bV108L0E+Cis8L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL0EuaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0EuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzA2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvQS5odG0KQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+QTwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gQTwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEyOV8xMyIgVEFSR0VUPSJtYWluIj5BYm92ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjNfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjUyMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjhfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjUyODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MzRfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjUzNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDJfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjU0MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTNfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjY1MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjJfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjY2MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzdfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjY3NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODZfMTQiIFRBUkdFVD0ibWFpbiI+QWRkIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjY4NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzA3XzE0IiBUQVJHRVQ9Im1haW4iPkFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzMDc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMxMl8xNCIgVEFSR0VUPSJtYWluIj5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMzEyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1MV8xNCIgVEFSR0VUPSJtYWluIj5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo1NTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTU3XzE0IiBUQVJHRVQ9Im1haW4iPkFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjU1NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NTlfMTYiIFRBUkdFVD0ibWFpbiI+QWhlYWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81MF8xNiIgVEFSR0VUPSJtYWluIj5BbGxvY2F0ZV9Bcmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAxNl8xNCIgVEFSR0VUPSJtYWluIj5BbGxvd19TY3JvbGxpbmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzNl8xNCIgVEFSR0VUPSJtYWluIj5Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvQi5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvQi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljNTg4NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9CLmh0bQpAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5CPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBCPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NTRfMTQiIFRBUkdFVD0ibWFpbiI+QmFja2dyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0NTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU5XzE0IiBUQVJHRVQ9Im1haW4iPkJhY2tncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDU5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1MV8xNCIgVEFSR0VUPSJtYWluIj5CYWNrZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQ1MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTZfMTQiIFRBUkdFVD0ibWFpbiI+QmFja2dyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0NTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA1Ml8xNiIgVEFSR0VUPSJtYWluIj5CYXVkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NDdfMTMiIFRBUkdFVD0ibWFpbiI+QmF1ZHJhdGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODcwXzE0IiBUQVJHRVQ9Im1haW4iPkJlZXA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzUxXzE2IiBUQVJHRVQ9Im1haW4iPkJlZXBlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NzVfMTYiIFRBUkdFVD0ibWFpbiI+QmVoaW5kPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMzRfMTMiIFRBUkdFVD0ibWFpbiI+QmVsb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA0XzE0IiBUQVJHRVQ9Im1haW4iPkJvcmRlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNzdfMTQiIFRBUkdFVD0ibWFpbiI+Qm90dG9tPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl82NV8xNiIgVEFSR0VUPSJtYWluIj5Cb3R0b21wYW5lbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjBfMTQiIFRBUkdFVD0ibWFpbiI+Qm94PC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL0MuaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0MuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTAyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvQy5odG0KQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+QzwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gQzwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIxM18xNiIgVEFSR0VUPSJtYWluIj5DYW5jaGFuZ2Vjb2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzM5XzEzIiBUQVJHRVQ9Im1haW4iPkNhbl9DaGFuZ2VfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzcxXzE2IiBUQVJHRVQ9Im1haW4iPkNicmVhazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODJfMTMiIFRBUkdFVD0ibWFpbiI+Q2hhbmdlZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDVfMTQiIFRBUkdFVD0ibWFpbiI+Q2hhbmdlX0F0dHJpYnV0ZXMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6ODQ1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1NF8xNCIgVEFSR0VUPSJtYWluIj5DaGFuZ2VfQXR0cmlidXRlcyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo4NTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExNl8xNCIgVEFSR0VUPSJtYWluIj5DaGFuZ2VfQmFja2dyb3VuZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzE0IiBUQVJHRVQ9Im1haW4iPkNoYW5nZV9MaW5lc19TdGF0dXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg1XzEzIiBUQVJHRVQ9Im1haW4iPkNoYXJfQ2hlY2tfUm91dGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODBfMTQiIFRBUkdFVD0ibWFpbiI+Q2xlYXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTY4XzE2IiBUQVJHRVQ9Im1haW4iPkNsZWFyX09rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4MV8xNCIgVEFSR0VUPSJtYWluIj5DbGVhcl9Pbl9OZXh0X1VwZGF0ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTMzXzE0IiBUQVJHRVQ9Im1haW4iPkNsZWFyX1NvZnRfTGFiZWxfS2V5czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDk0XzE0IiBUQVJHRVQ9Im1haW4iPkNsZWFyX1RvX0VuZF9PZl9MaW5lPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODdfMTQiIFRBUkdFVD0ibWFpbiI+Q2xlYXJfVG9fRW5kX09mX1NjcmVlbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk4XzEzIiBUQVJHRVQ9Im1haW4iPkNvbCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjk4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTlfMTMiIFRBUkdFVD0ibWFpbiI+Q29sIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzMF8xNiIgVEFSR0VUPSJtYWluIj5Db2xvcmNvbnRlbnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0NF8xNCIgVEFSR0VUPSJtYWluIj5Db2xvcl9Db250ZW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxNV8xMyIgVEFSR0VUPSJtYWluIj5Db2x1bW5zPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzRfMTQiIFRBUkdFVD0ibWFpbiI+Q29weTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjY3XzE2IiBUQVJHRVQ9Im1haW4iPkNvcHl3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzEzIiBUQVJHRVQ9Im1haW4iPkNvcHlfQXJnPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc3NF8xNiIgVEFSR0VUPSJtYWluIj5Db3VudCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo3NzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTEyXzE2IiBUQVJHRVQ9Im1haW4iPkNvdW50IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjkxMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NjlfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjU2OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTNfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjI5MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjYyMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDhfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkczo0ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8xMyIgVEFSR0VUPSJtYWluIj5DcmVhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHM6NjQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkxXzEzIiBUQVJHRVQ9Im1haW4iPkNyZWF0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoxOTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzEzIiBUQVJHRVQ9Im1haW4iPkNyZWF0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo2Mzg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzY3XzEzIiBUQVJHRVQ9Im1haW4iPkNyZWF0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHM6Njc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI5XzEzIiBUQVJHRVQ9Im1haW4iPkN1cnJlbnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NzI5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5NF8xMyIgVEFSR0VUPSJtYWluIj5DdXJyZW50IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjI5NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDQwXzE2IiBUQVJHRVQ9Im1haW4iPkN1cnJlbnRfRmxkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ4MV8xMyIgVEFSR0VUPSJtYWluIj5DdXJyZW50X1dpbmRvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMDBfMTYiIFRBUkdFVD0ibWFpbiI+Q3Vycl9JdGVtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NjBfMTciIFRBUkdFVD0ibWFpbiI+Y3Vyc2VzX2ZyZWVhbGw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1OV8xNCIgVEFSR0VUPSJtYWluIj5DdXJzZXNfRnJlZV9BbGw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg0Nl8xMyIgVEFSR0VUPSJtYWluIj5DdXJzZXNfVmVyc2lvbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDUyXzE2IiBUQVJHRVQ9Im1haW4iPmN1cnNlc192ZXJzaW9uQzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzE3XzE2IiBUQVJHRVQ9Im1haW4iPkN1cnNfU2V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MzhfMTYiIFRBUkdFVD0ibWFpbiI+Q19Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ4XzEzIiBUQVJHRVQ9Im1haW4iPkNfQnVpbHRpbl9Sb3V0ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ5XzEzIiBUQVJHRVQ9Im1haW4iPkNfQ2hvaWNlX1JvdXRlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl83OF8xMyIgVEFSR0VUPSJtYWluIj5DX0dlbmVyaWNfQ2hvaWNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzlfMTMiIFRBUkdFVD0ibWFpbiI+Q19HZW5lcmljX1R5cGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQyNl8xNiIgVEFSR0VUPSJtYWluIj5DX1VzZV9EZWZhdWx0X0NvbG9yczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9ELmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9ELmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQyNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0QuaHRtCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPkQ8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIEQ8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5Ml8xMyIgVEFSR0VUPSJtYWluIj5EYXRhX0FoZWFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5N18xMyIgVEFSR0VUPSJtYWluIj5EYXRhX0JlaGluZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDJfMTMiIFRBUkdFVD0ibWFpbiI+RGVmYXVsdF9GaWVsZF9PcHRpb25zPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyNV8xMyIgVEFSR0VUPSJtYWluIj5EZWZhdWx0X0Zvcm1fT3B0aW9uczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNjhfMTMiIFRBUkdFVD0ibWFpbiI+RGVmYXVsdF9JdGVtX09wdGlvbnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTQ2XzEzIiBUQVJHRVQ9Im1haW4iPkRlZmF1bHRfTWVudV9PcHRpb25zPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1OTZfMTQiIFRBUkdFVD0ibWFpbiI+RGVmaW5lX0tleTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDAwXzE2IiBUQVJHRVQ9Im1haW4iPkRlZmtleTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjQ5XzE2IiBUQVJHRVQ9Im1haW4iPkRlZl9Qcm9nX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI1MV8xNiIgVEFSR0VUPSJtYWluIj5EZWZfU2hlbGxfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDMyXzE2IiBUQVJHRVQ9Im1haW4iPkRlbGF5b3V0cHV0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MzNfMTQiIFRBUkdFVD0ibWFpbiI+RGVsYXlfT3V0cHV0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4OF8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTg4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMxNV8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6MzE1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYzNF8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NjM0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18xNCIgVEFSR0VUPSJtYWluIj5EZWxldGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MjAzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY0NV8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NjQ1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMzlfMTQiIFRBUkdFVD0ibWFpbiI+RGVsZXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkczoxMzk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMzNF8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGVfQ2hhcmFjdGVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzMzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMzOV8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGVfQ2hhcmFjdGVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzMzk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxMl8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGVfTGluZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTU2XzE2IiBUQVJHRVQ9Im1haW4iPkRlbF9QYW5lbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDRfMTMiIFRBUkdFVD0ibWFpbiI+RGVyaXZlZF9XaW5kb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk4XzE2IiBUQVJHRVQ9Im1haW4iPkRlcndpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMjZfMTYiIFRBUkdFVD0ibWFpbiI+RGVzY25hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6MTI2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI3MF8xNiIgVEFSR0VUPSJtYWluIj5EZXNjbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjoyNzA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjc4XzE2IiBUQVJHRVQ9Im1haW4iPkRlc2NuYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjI3ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzRfMTQiIFRBUkdFVD0ibWFpbiI+RGVzY3JpcHRpb24gLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6Mjc0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3OF8xNCIgVEFSR0VUPSJtYWluIj5EZXNjcmlwdGlvbiAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyNzg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzE0IiBUQVJHRVQ9Im1haW4iPkRpc3BhdGNoX0V2ZW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNTlfMTYiIFRBUkdFVD0ibWFpbiI+RG9fVXBkYXRlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcxMV8xMyIgVEFSR0VUPSJtYWluIj5Ecml2ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NzExPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY2MF8xMyIgVEFSR0VUPSJtYWluIj5Ecml2ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NjYwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3M18xNiIgVEFSR0VUPSJtYWluIj5Ecml2ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6OTczPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxNF8xMyIgVEFSR0VUPSJtYWluIj5EdXBsaWNhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NjE0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyMV8xMyIgVEFSR0VUPSJtYWluIj5EdXBsaWNhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6MzIxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMyMV8xNiIgVEFSR0VUPSJtYWluIj5EdXB3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTUxXzE2IiBUQVJHRVQ9Im1haW4iPkR1cF9GaWVsZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OTNfMTQiIFRBUkdFVD0ibWFpbiI+RHluYW1pY19JbmZvPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1OV8xNiIgVEFSR0VUPSJtYWluIj5EeW5fSW5mbzwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9FLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9FLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNmMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0UuaHRtCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPkU8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIEU8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgwOV8xNiIgVEFSR0VUPSJtYWluIj5FY2hvPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODZfMTQiIFRBUkdFVD0ibWFpbiI+RW5hYmxlX0tleTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTRfMTMiIFRBUkdFVD0ibWFpbiI+RW5jbG9zZWRfSW5fV2luZG93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExM18xNiIgVEFSR0VUPSJtYWluIj5FbmR3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTI4XzE0IiBUQVJHRVQ9Im1haW4iPkVuZF9Nb3VzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OTdfMTQiIFRBUkdFVD0ibWFpbiI+RW5kX1NjcmVlbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OTVfMTQiIFRBUkdFVD0ibWFpbiI+RW5kX1dpbmRvd3M8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA3NF8xNCIgVEFSR0VUPSJtYWluIj5FcmFzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDYwXzE2IiBUQVJHRVQ9Im1haW4iPkVyYXNlY2hhcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjUyXzEzIiBUQVJHRVQ9Im1haW4iPkVyYXNlX0NoYXJhY3RlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiIFRBUkdFVD0ibWFpbiI+RXRpX0V4Y2VwdGlvbjwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9GLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9GLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDAwZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0YuaHRtCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPkY8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIEY8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMV8xMyIgVEFSR0VUPSJtYWluIj5GaWVsZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDY4XzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX0JhY2sgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6NDY4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ3OF8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9CYWNrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjQ3ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNTVfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfQnVmZmVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjI1NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNjZfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfQnVmZmVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjI2NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzdfMTMiIFRBUkdFVD0ibWFpbiI+RmllbGRfQ2hlY2tfUm91dGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwN18xMyIgVEFSR0VUPSJtYWluIj5GaWVsZF9Db3VudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MjRfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfRm9yZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo0MjQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDM0XzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX0ZvcmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6NDM0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIxM18xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9KdXN0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM3NF8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Ml8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9PcHRzX09mZjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNDlfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfT3B0c19PbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MDdfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfUGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI5M18xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9TdGF0dXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcyXzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCIgVEFSR0VUPSJtYWluIj5GaWxsX1N0cmluZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHM6MTE2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiIFRBUkdFVD0ibWFpbiI+RmlsbF9TdHJpbmcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzOjEyMTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NjFfMTYiIFRBUkdFVD0ibWFpbiI+Rmxhc2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODc1XzE0IiBUQVJHRVQ9Im1haW4iPkZsYXNoX1NjcmVlbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjhfMTYiIFRBUkdFVD0ibWFpbiI+RmxkX0luZm88L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82NV8xNCIgVEFSR0VUPSJtYWluIj5GbHVzaCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjY1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjZfMTQiIFRBUkdFVD0ibWFpbiI+Rmx1c2ggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo2NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDQyXzE2IiBUQVJHRVQ9Im1haW4iPkZsdXNoaW5wPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MzhfMTQiIFRBUkdFVD0ibWFpbiI+Rmx1c2hfSW5wdXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM0XzE0IiBUQVJHRVQ9Im1haW4iPkZvcmVncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDM0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzOV8xNCIgVEFSR0VUPSJtYWluIj5Gb3JlZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjQzOTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzFfMTQiIFRBUkdFVD0ibWFpbiI+Rm9yZWdyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0MzE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM2XzE0IiBUQVJHRVQ9Im1haW4iPkZvcmVncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDM2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1MV8xNCIgVEFSR0VUPSJtYWluIj5Gb3JtYXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODg5XzE2IiBUQVJHRVQ9Im1haW4iPkZvcm1fT3B0czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjdfMTYiIFRBUkdFVD0ibWFpbiI+Rm9ybV9PcHRzX09mZjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjRfMTYiIFRBUkdFVD0ibWFpbiI+Rm9ybV9PcHRzX09uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg0XzE2IiBUQVJHRVQ9Im1haW4iPkZvcm1fUmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjg0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkyXzE2IiBUQVJHRVQ9Im1haW4iPkZvcm1fUmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjkyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYyOF8xNiIgVEFSR0VUPSJtYWluIj5Gb3JtX1N1YjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83M18xNiIgVEFSR0VUPSJtYWluIj5Gb3JtX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjAwXzE2IiBUQVJHRVQ9Im1haW4iPkZvcm1fV2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNl8xNCIgVEFSR0VUPSJtYWluIj5GcmVlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjEzNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xODBfMTQiIFRBUkdFVD0ibWFpbiI+RnJlZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoxODA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODI1XzE2IiBUQVJHRVQ9Im1haW4iPkZyZWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6ODI1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk1OF8xNiIgVEFSR0VUPSJtYWluIj5GcmVlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjk1ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzFfMTYiIFRBUkdFVD0ibWFpbiI+RnJlZWl0ZW08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0IiBUQVJHRVQ9Im1haW4iPkZyZWVfQXJnPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEzM18xNiIgVEFSR0VUPSJtYWluIj5GcmVlX0ZpZWxkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk5Nl8xNiIgVEFSR0VUPSJtYWluIj5Gcm1fRHJpdmVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8xMyIgVEFSR0VUPSJtYWluIj5GdW5jdGlvbl9LZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzg2XzEzIiBUQVJHRVQ9Im1haW4iPkZ1bmN0aW9uX0tleV9Db2RlPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL0cuaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0cuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NmMzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvRy5odG0KQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+RzwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gRzwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OF8xMyIgVEFSR0VUPSJtYWluIj5HZW5lcmljX0NoYXJfQ2hlY2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84MV8xMyIgVEFSR0VUPSJtYWluIj5HZW5lcmljX0ZpZWxkX0NoZWNrPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgwXzEzIiBUQVJHRVQ9Im1haW4iPkdlbmVyaWNfTmV4dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84N18xMyIgVEFSR0VUPSJtYWluIj5HZW5lcmljX1ByZXY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2M18xNCIgVEFSR0VUPSJtYWluIj5HZXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTQ2MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc0XzE0IiBUQVJHRVQ9Im1haW4iPkdldCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNDc0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNzBfMTYiIFRBUkdFVD0ibWFpbiI+R2V0QmVnWDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzY3XzE2IiBUQVJHRVQ9Im1haW4iPkdldEJlZ1k8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM4OF8xNiIgVEFSR0VUPSJtYWluIj5HZXRDdXJYPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzODVfMTYiIFRBUkdFVD0ibWFpbiI+R2V0Q3VyWTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzUwXzE2IiBUQVJHRVQ9Im1haW4iPkdldE1heFg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM0N18xNiIgVEFSR0VUPSJtYWluIj5HZXRNYXhZPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzY2XzE2IiBUQVJHRVQ9Im1haW4iPkdldG1vdXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDdfMTYiIFRBUkdFVD0ibWFpbiI+R2V0UGFyWDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDA0XzE2IiBUQVJHRVQ9Im1haW4iPkdldFBhclk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzY1XzE2IiBUQVJHRVQ9Im1haW4iPmdldHdpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl82Ml8xMyIgVEFSR0VUPSJtYWluIj5HZXRfQXJnPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMjVfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0JhY2tncm91bmQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzYyXzE0IiBUQVJHRVQ9Im1haW4iPkdldF9CdWZmZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6MzYyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2OF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfQnVmZmVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjM2ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MjZfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6ODI2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzMl8xMyIgVEFSR0VUPSJtYWluIj5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo4MzI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCIgVEFSR0VUPSJtYWluIj5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTlfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0VudHJ5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzN18xNCIgVEFSR0VUPSJtYWluIj5HZXRfRXZlbnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4NF8xNiIgVEFSR0VUPSJtYWluIj5HZXRfRmllbGRpbmRleDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl81OV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRmllbGR0eXBlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2NV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRmllbGRfSW5pdF9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3MF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRmllbGRfVGVybV9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjNfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0ZsYWcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczo2MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82NF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRmxhZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkczo2NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NzVfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0Zvcm1fSW5pdF9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4MF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRm9ybV9UZXJtX0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQ1XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9JbmRleCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo3NDU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzEwXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9JbmRleCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozMTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzQwXzE2IiBUQVJHRVQ9Im1haW4iPkdldF9JdGVtaW5kZXg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg5XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9JdGVtX0luaXRfSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTRfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0l0ZW1fVGVybV9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM0NV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfSnVzdGlmaWNhdGlvbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTVfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0tleVBhZF9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc1MV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfS2V5c3Ryb2tlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU5OV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfTWVudV9Jbml0X0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTMyXzE2IiBUQVJHRVQ9Im1haW4iPkdldF9NZW51X01hcmsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NTMyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU0MF8xNiIgVEFSR0VUPSJtYWluIj5HZXRfTWVudV9NYXJrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjU0MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MDRfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X01lbnVfVGVybV9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzM18xMyIgVEFSR0VUPSJtYWluIj5HZXRfTW91c2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82N18xNCIgVEFSR0VUPSJtYWluIj5HZXRfTnVtYmVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZHM6Njc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjhfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X051bWJlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkczo2ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTFfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDExPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxNl8xMyIgVEFSR0VUPSJtYWluIj5HZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0MTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjU4XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjY1ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NjNfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NjYzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1MV8xNCIgVEFSR0VUPSJtYWluIj5HZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyNTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjU2XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjI1NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDdfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MzQ3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM1Ml8xMyIgVEFSR0VUPSJtYWluIj5HZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozNTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1Ml8xNCIgVEFSR0VUPSJtYWluIj5HZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDcwXzE2IiBUQVJHRVQ9Im1haW4iPkdldF9QYWdlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc1OF8xNiIgVEFSR0VUPSJtYWluIj5HZXRfUGF0dGVybjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9TaXplPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjJfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1NvZnRfTGFiZWxfS2V5IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE1MjI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUyN18xMyIgVEFSR0VUPSJtYWluIj5HZXRfU29mdF9MYWJlbF9LZXkgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTUyNzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTYzXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE1NjM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU2N18xMyIgVEFSR0VUPSJtYWluIj5HZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNTY3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxM18xNiIgVEFSR0VUPSJtYWluIj5HZXRfU3BhY2luZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzczXzE0IiBUQVJHRVQ9Im1haW4iPkdldF9TdHJpbmcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczo3MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc2XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9TdHJpbmcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczo3NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81N18xNCIgVEFSR0VUPSJtYWluIj5HZXRfU3RyaW5nIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRzOjU3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyMl8xMyIgVEFSR0VUPSJtYWluIj5HZXRfU3ViX1dpbmRvdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo1MjI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzc4XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9TdWJfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjM3ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl83OV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfVHlwZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHM6NTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzOjY0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHM6NTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkczo2NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xNCIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzOjY0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY5XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHM6Njk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkczo1OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzOjY0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzOjU5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzOjY0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxMV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjUxMTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjdfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1dpbmRvdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozNjc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEwMl8xMyIgVEFSR0VUPSJtYWluIj5HZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkczoxMDI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ4XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRzOjQ4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1dpbmRvdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjYyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzZfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1dpbmRvd19Qb3NpdGlvbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzFfMTQiIFRBUkdFVD0ibWFpbiI+R3JleSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0NzE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDc2XzE0IiBUQVJHRVQ9Im1haW4iPkdyZXkgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDc2PC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL0guaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0guaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDI1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvSC5odG0KQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+SDwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gSDwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODU5XzE2IiBUQVJHRVQ9Im1haW4iPkhhbGZkZWxheTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjNfMTQiIFRBUkdFVD0ibWFpbiI+SGFsZl9EZWxheTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTg0XzE2IiBUQVJHRVQ9Im1haW4iPkhhc2NvbG9yczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NDdfMTYiIFRBUkdFVD0ibWFpbiI+SGFza2V5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MjZfMTMiIFRBUkdFVD0ibWFpbiI+SGFzX0NvbG9yczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDc2XzE2IiBUQVJHRVQ9Im1haW4iPkhhc19JYzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDg4XzE2IiBUQVJHRVQ9Im1haW4iPkhhc19JbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjYyXzEzIiBUQVJHRVQ9Im1haW4iPkhhc19JbnNlcnRfQ2hhcmFjdGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NjdfMTMiIFRBUkdFVD0ibWFpbiI+SGFzX0luc2VydF9MaW5lPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2N18xMyIgVEFSR0VUPSJtYWluIj5IYXNfS2V5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzk4XzEzIiBUQVJHRVQ9Im1haW4iPkhhc19Nb3VzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82MF8xMyIgVEFSR0VUPSJtYWluIj5IYXNfU3RyaW5nPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl85N18xNCIgVEFSR0VUPSJtYWluIj5IaWRlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl85NV8xNiIgVEFSR0VUPSJtYWluIj5IaWRlcGFuZWw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzI4XzE0IiBUQVJHRVQ9Im1haW4iPkhvcml6b250YWxfTGluZTwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9JLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9JLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODEzYzc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0kuaHRtCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPkk8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIEk8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk5Ml8xNyIgVEFSR0VUPSJtYWluIj5JRENfT2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTgwXzE2IiBUQVJHRVQ9Im1haW4iPklETF9PazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDA5XzE0IiBUQVJHRVQ9Im1haW4iPkltbWVkaWF0ZV9VcGRhdGVfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDE0XzE3IiBUQVJHRVQ9Im1haW4iPkltbWVkb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDgyXzE0IiBUQVJHRVQ9Im1haW4iPkluZm88L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE5OV8xNiIgVEFSR0VUPSJtYWluIj5Jbml0Y29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE0NF8xNiIgVEFSR0VUPSJtYWluIj5Jbml0cGFpcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDBfMTYiIFRBUkdFVD0ibWFpbiI+SW5pdHNjcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMxXzE0IiBUQVJHRVQ9Im1haW4iPkluaXRfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8xNCIgVEFSR0VUPSJtYWluIj5Jbml0X1BhaXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDg2XzE0IiBUQVJHRVQ9Im1haW4iPkluaXRfU2NyZWVuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTlfMTQiIFRBUkdFVD0ibWFpbiI+SW5pdF9Tb2Z0X0xhYmVsX0tleXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDg5XzE0IiBUQVJHRVQ9Im1haW4iPkluaXRfV2luZG93czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzcxXzE0IiBUQVJHRVQ9Im1haW4iPkluc2VydCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMzcxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzdfMTQiIFRBUkdFVD0ibWFpbiI+SW5zZXJ0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzNzc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM4OV8xNCIgVEFSR0VUPSJtYWluIj5JbnNlcnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTM4OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzk4XzE0IiBUQVJHRVQ9Im1haW4iPkluc2VydCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMzk4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDRfMTQiIFRBUkdFVD0ibWFpbiI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjE4XzE0IiBUQVJHRVQ9Im1haW4iPkluc2VydF9MaW5lPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg3MV8xNiIgVEFSR0VUPSJtYWluIj5JbnRyZmx1c2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzXzE2IiBUQVJHRVQ9Im1haW4iPklzZW5kd2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUwMl8xMyIgVEFSR0VUPSJtYWluIj5Jc19FbmRfV2luZG93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3NF8xMyIgVEFSR0VUPSJtYWluIj5Jc19GdW5jdGlvbl9LZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEyNF8xMyIgVEFSR0VUPSJtYWluIj5Jc19IaWRkZW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODUxXzE2IiBUQVJHRVQ9Im1haW4iPklzX0tleXBhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81MF8xMyIgVEFSR0VUPSJtYWluIj5Jc19NaW51c09uZV9Qb2ludGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMTlfMTYiIFRBUkdFVD0ibWFpbiI+SXNfTmV3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc2M18xMyIgVEFSR0VUPSJtYWluIj5Jc19OZXdfUGFnZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDM1XzE2IiBUQVJHRVQ9Im1haW4iPklzX1Njcm9sbF9PazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTYwXzEzIiBUQVJHRVQ9Im1haW4iPklzX1RvdWNoZWQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTE2MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTY1XzEzIiBUQVJHRVQ9Im1haW4iPklzX1RvdWNoZWQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTE2NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMjhfMTYiIFRBUkdFVD0ibWFpbiI+SXRlbW5hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6MTI4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1M18xNiIgVEFSR0VUPSJtYWluIj5JdGVtbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjoyNTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjYxXzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1uYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjI2MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjNfMTMiIFRBUkdFVD0ibWFpbiI+SXRlbXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI5XzEzIiBUQVJHRVQ9Im1haW4iPkl0ZW1fQ291bnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODYwXzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fSW5pdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMzRfMTYiIFRBUkdFVD0ibWFpbiI+SXRlbV9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxNF8xNiIgVEFSR0VUPSJtYWluIj5JdGVtX09wdHNfT2ZmPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxMV8xNiIgVEFSR0VUPSJtYWluIj5JdGVtX09wdHNfT248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODY4XzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fVGVybTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82NF8xNiIgVEFSR0VUPSJtYWluIj5JdGVtX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTY4XzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fVmFsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE4MV8xNiIgVEFSR0VUPSJtYWluIj5JdGVtX1ZpczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9LLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9LLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWNlOTUwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0suaHRtCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPks8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIEs8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY0XzE2IiBUQVJHRVQ9Im1haW4iPktleW5hbWU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk4N18xNiIgVEFSR0VUPSJtYWluIj5LZXlvazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NDBfMTYiIFRBUkdFVD0ibWFpbiI+S2V5cGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTBfMTQiIFRBUkdFVD0ibWFpbiI+S2V5X05hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTYxMDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzEzIiBUQVJHRVQ9Im1haW4iPktleV9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE2MTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA2OF8xNiIgVEFSR0VUPSJtYWluIj5LaWxsY2hhcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjU3XzEzIiBUQVJHRVQ9Im1haW4iPktpbGxfQ2hhcmFjdGVyPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL0wuaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL0wuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDYzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvTC5odG0KQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+TDwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gTDwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwMl8xNCIgVEFSR0VUPSJtYWluIj5MZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMDJfMTYiIFRBUkdFVD0ibWFpbiI+TGVhdmVfT2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDFfMTMiIFRBUkdFVD0ibWFpbiI+TGluZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjEwMTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMl8xMyIgVEFSR0VUPSJtYWluIj5MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTAyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxMl8xMyIgVEFSR0VUPSJtYWluIj5MaW5lczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc3XzEzIiBUQVJHRVQ9Im1haW4iPkxpbmVfTGVuZ3RoIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6Nzc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl83OF8xMyIgVEFSR0VUPSJtYWluIj5MaW5lX0xlbmd0aCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjc4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyOF8xMyIgVEFSR0VUPSJtYWluIj5MaW5rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE3Ml8xNiIgVEFSR0VUPSJtYWluIj5MbmtfRmllbGQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjExMF8xNiIgVEFSR0VUPSJtYWluIj5Mb25nbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoyMTEwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMThfMTYiIFRBUkdFVD0ibWFpbiI+TG9uZ25hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MjExODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjc3XzE0IiBUQVJHRVQ9Im1haW4iPkxvbmdfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNjc3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2ODFfMTMiIFRBUkdFVD0ibWFpbiI+TG9uZ19OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE2ODE8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvTS5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvTS5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwOTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9NLmh0bQpAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5NPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBNPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiIFRBUkdFVD0ibWFpbiI+TWFrZV9Bcmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDA5XzE0IiBUQVJHRVQ9Im1haW4iPk1hcmsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDA5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQxM18xNCIgVEFSR0VUPSJtYWluIj5NYXJrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQxMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MDhfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9CYWNrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjYwODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MThfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9CYWNrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjYxODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODdfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9GbXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTY5XzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfRm9yZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo1Njk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTc5XzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfRm9yZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo1Nzk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjQ3XzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfR3JleSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo2NDc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjU3XzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfR3JleSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo2NTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODc2XzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfSW5pdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MTRfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5NF8xNiIgVEFSR0VUPSJtYWluIj5NZW51X09wdHNfT2ZmPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5MV8xNiIgVEFSR0VUPSJtYWluIj5NZW51X09wdHNfT248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjgyXzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfUGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ3MF8xNiIgVEFSR0VUPSJtYWluIj5NZW51X1N1YjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84ODRfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9UZXJtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYzXzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NDZfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9XaW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODI5XzE2IiBUQVJHRVQ9Im1haW4iPk1ldGE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTEwXzE2IiBUQVJHRVQ9Im1haW4iPk1NYXNrPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzIxMV8xNiIgVEFSR0VUPSJtYWluIj5Nb3VzZWludGVydmFsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzUyXzE2IiBUQVJHRVQ9Im1haW4iPk1vdXNlX0F2YWlsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE2MV8xMyIgVEFSR0VUPSJtYWluIj5Nb3VzZV9JbnRlcnZhbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTJfMTQiIFRBUkdFVD0ibWFpbiI+TW92ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo2MTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExN18xNCIgVEFSR0VUPSJtYWluIj5Nb3ZlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkczoxMTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzg2XzE2IiBUQVJHRVQ9Im1haW4iPk1vdmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6Nzg2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMzJfMTYiIFRBUkdFVD0ibWFpbiI+TW92ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGI6MTMyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCIgVEFSR0VUPSJtYWluIj5Nb3ZlX0N1cnNvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjZfMTQiIFRBUkdFVD0ibWFpbiI+TW92ZV9EZXJpdmVkX1dpbmRvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTlfMTQiIFRBUkdFVD0ibWFpbiI+TW92ZV9XaW5kb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzUwXzE2IiBUQVJHRVQ9Im1haW4iPk12ZGVyd2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3Nl8xNiIgVEFSR0VUPSJtYWluIj5tdndhZGRjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTgwXzE2IiBUQVJHRVQ9Im1haW4iPk12d2RlbGNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzNl8xNiIgVEFSR0VUPSJtYWluIj5NdndpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjA0XzE2IiBUQVJHRVQ9Im1haW4iPk12d2luY2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyOV8xNiIgVEFSR0VUPSJtYWluIj5NdndpbnNjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjY4XzE2IiBUQVJHRVQ9Im1haW4iPk12d2luc25zdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTE2XzE2IiBUQVJHRVQ9Im1haW4iPk1fUG9zdCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo5MTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzU0XzE2IiBUQVJHRVQ9Im1haW4iPk1fUG9zdCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjozNTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQzXzE2IiBUQVJHRVQ9Im1haW4iPk1fU2NhbGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6NjQzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4M18xNiIgVEFSR0VUPSJtYWluIj5NX1NjYWxlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjQ4MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MThfMTYiIFRBUkdFVD0ibWFpbiI+TV9VbnBvc3QgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6OTE4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1Nl8xNiIgVEFSR0VUPSJtYWluIj5NX1VucG9zdCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjozNTY8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvTi5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvTi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4ZGY2NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9OLmh0bQpAQCAtMCwwICsxLDM1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5OPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBOPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjVfMTQiIFRBUkdFVD0ibWFpbiI+TmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyNjU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY4XzE0IiBUQVJHRVQ9Im1haW4iPk5hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MjY4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMzBfMTYiIFRBUkdFVD0ibWFpbiI+TmFwbXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwNl8xNCIgVEFSR0VUPSJtYWluIj5OYXBfTWlsbGlfU2Vjb25kczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTZfMTYiIFRBUkdFVD0ibWFpbiI+TmV3ZmllbGQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODA0XzE2IiBUQVJHRVQ9Im1haW4iPk5ld0Zvcm08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOThfMTYiIFRBUkdFVD0ibWFpbiI+TmV3aXRlbTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MzlfMTYiIFRBUkdFVD0ibWFpbiI+TmV3bWVudTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDI3XzE2IiBUQVJHRVQ9Im1haW4iPk5ld3BhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNTFfMTYiIFRBUkdFVD0ibWFpbiI+TmV3cGFuZWw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0XzE2IiBUQVJHRVQ9Im1haW4iPk5ld3dpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjJfMTMiIFRBUkdFVD0ibWFpbiI+TmV3X0ZpZWxkdHlwZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzE0IiBUQVJHRVQ9Im1haW4iPk5ld19MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6ODY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84N18xNCIgVEFSR0VUPSJtYWluIj5OZXdfTGluZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjg3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjdfMTMiIFRBUkdFVD0ibWFpbiI+TmV3X1BhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0IiBUQVJHRVQ9Im1haW4iPk5ld19QYWdlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6ODk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85MF8xNCIgVEFSR0VUPSJtYWluIj5OZXdfUGFnZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjkwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18xMyIgVEFSR0VUPSJtYWluIj5OZXh0X1JvdXRlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NDdfMTYiIFRBUkdFVD0ibWFpbiI+Tkw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzczXzE2IiBUQVJHRVQ9Im1haW4iPk5vQ2JyZWFrPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkwMl8xNiIgVEFSR0VUPSJtYWluIj5Ob2RlbGF5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgxMV8xNiIgVEFSR0VUPSJtYWluIj5Ob0VjaG88L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTQ5XzE2IiBUQVJHRVQ9Im1haW4iPk5vTkw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzkyXzE2IiBUQVJHRVQ9Im1haW4iPk5vUmF3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzNV8xNiIgVEFSR0VUPSJtYWluIj5Ob3RpbWVvdXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODg1XzE3IiBUQVJHRVQ9Im1haW4iPk5vX1FpZmx1c2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDIxXzEzIiBUQVJHRVQ9Im1haW4iPk51bWJlcl9PZl9Db2xvcnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDI0XzEzIiBUQVJHRVQ9Im1haW4iPk51bWJlcl9PZl9Db2xvcl9QYWlyczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9PLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9PLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjI0MjQzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL08uaHRtCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPk88L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIE88L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzE3IiBUQVJHRVQ9Im1haW4iPk91dHB1dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTk0XzE0IiBUQVJHRVQ9Im1haW4iPk92ZXJsYXkgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTE5NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzA4XzE2IiBUQVJHRVQ9Im1haW4iPk92ZXJsYXkgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MTMwODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTg4XzE0IiBUQVJHRVQ9Im1haW4iPk92ZXJ3cml0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMTg4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyOTZfMTYiIFRBUkdFVD0ibWFpbiI+T3ZlcndyaXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjEyOTY8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvUC5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvUC5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwNTdjMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9QLmh0bQpAQCAtMCwwICsxLDU5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5QPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBQPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzJfMTQiIFRBUkdFVD0ibWFpbiI+UGFkX0NoYXJhY3RlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0NzI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDkwXzE0IiBUQVJHRVQ9Im1haW4iPlBhZF9DaGFyYWN0ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDkwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc0MF8xMyIgVEFSR0VUPSJtYWluIj5QYWdlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMTMiIFRBUkdFVD0ibWFpbiI+UGFnZV9MZW5ndGggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo4MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgxXzEzIiBUQVJHRVQ9Im1haW4iPlBhZ2VfTGVuZ3RoIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6ODE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2N18xNiIgVEFSR0VUPSJtYWluIj5QYWlyY29udGVudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzE5XzE0IiBUQVJHRVQ9Im1haW4iPlBhaXJfQ29udGVudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTQ0XzE2IiBUQVJHRVQ9Im1haW4iPlBhbmVsX0hpZGRlbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY1XzE2IiBUQVJHRVQ9Im1haW4iPlBhbmVsX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEwNV8xNiIgVEFSR0VUPSJtYWluIj5QYW5lbF9XaW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI3XzE0IiBUQVJHRVQ9Im1haW4iPlBhdHRlcm48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUzMV8xNiIgVEFSR0VUPSJtYWluIj5QZWNob2NoYXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM1Ml8xMyIgVEFSR0VUPSJtYWluIj5QZWVrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzNTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM1OF8xMyIgVEFSR0VUPSJtYWluIj5QZWVrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzNTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNF8xNCIgVEFSR0VUPSJtYWluIj5QZWVrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE0MTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyM18xNCIgVEFSR0VUPSJtYWluIj5QZWVrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE0MjM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOF8xNCIgVEFSR0VUPSJtYWluIj5QZWVrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE0Mzg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0N18xNCIgVEFSR0VUPSJtYWluIj5QZWVrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE0NDc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiIgVEFSR0VUPSJtYWluIj5Qbm91dHJlZnJlc2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjgzXzE0IiBUQVJHRVQ9Im1haW4iPlBvc2l0aW9uX0N1cnNvciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo2ODM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzk0XzE0IiBUQVJHRVQ9Im1haW4iPlBvc2l0aW9uX0N1cnNvciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozOTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjcyXzE0IiBUQVJHRVQ9Im1haW4iPlBvc3QgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NjcyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyMl8xNCIgVEFSR0VUPSJtYWluIj5Qb3N0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjMyMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NDFfMTYiIFRBUkdFVD0ibWFpbiI+UG9zX0Zvcm1fQ3Vyc29yPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ5OV8xNiIgVEFSR0VUPSJtYWluIj5Qb3NfTWVudV9DdXJzb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiIgVEFSR0VUPSJtYWluIj5QcmVmcmVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDFfMTMiIFRBUkdFVD0ibWFpbiI+UHJldl9Sb3V0ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTA4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA5XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjEwOTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczoxMTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTZfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTE2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NF8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzOjU0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82MV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzOjYxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81MF8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzOjUwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81N18xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzOjU3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDlfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHM6NDk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81NV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkczo1NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzUwXzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzOjUwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHM6NTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81MF8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkczo1MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU3XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzOjU3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80OV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzOjQ5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81NV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzOjU1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80OV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzOjQ5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81NV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzOjU1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0M18xNiIgVEFSR0VUPSJtYWluIj5wdXRwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl81M18xNiIgVEFSR0VUPSJtYWluIj5wdXR3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiIFRBUkdFVD0ibWFpbiI+UHV0X0J1ZjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExOF8xNCIgVEFSR0VUPSJtYWluIj5QdXRfTGluZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjExODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEyMl8xNCIgVEFSR0VUPSJtYWluIj5QdXRfTGluZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjEyMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83Nl8xNCIgVEFSR0VUPSJtYWluIj5QdXRfU3RyaW5nPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80NV8xNCIgVEFSR0VUPSJtYWluIj5QdXRfV2luZG93PC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL1EuaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL1EuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODc0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvUS5odG0KQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5RPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBRPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84ODNfMTciIFRBUkdFVD0ibWFpbiI+UWlmbHVzaDwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9SLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9SLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDEwYzZmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL1IuaHRtCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPlI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIFI8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc5MF8xNiIgVEFSR0VUPSJtYWluIj5SYXc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTg5XzE0IiBUQVJHRVQ9Im1haW4iPlJlZGVmaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjU4OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTNfMTQiIFRBUkdFVD0ibWFpbiI+UmVkZWZpbmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NjEzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTlfMTQiIFRBUkdFVD0ibWFpbiI+UmVkcmF3IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEwNTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2M18xNCIgVEFSR0VUPSJtYWluIj5SZWRyYXcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTA2MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDkwXzE2IiBUQVJHRVQ9Im1haW4iPlJlZHJhd3dpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQ1XzE0IiBUQVJHRVQ9Im1haW4iPlJlZnJlc2ggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTA0NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjgzXzE0IiBUQVJHRVQ9Im1haW4iPlJlZnJlc2ggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTI4MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTEyXzE0IiBUQVJHRVQ9Im1haW4iPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MTdfMTQiIFRBUkdFVD0ibWFpbiI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA1Ml8xNCIgVEFSR0VUPSJtYWluIj5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEwNTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5NV8xNCIgVEFSR0VUPSJtYWluIj5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEyOTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAxXzE0IiBUQVJHRVQ9Im1haW4iPlJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTEwXzE0IiBUQVJHRVQ9Im1haW4iPlJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzc3XzE0IiBUQVJHRVQ9Im1haW4iPlJlbGVhc2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMV8xNCIgVEFSR0VUPSJtYWluIj5SZXBsYWNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMTlfMTYiIFRBUkdFVD0ibWFpbiI+UmVwbGFjZV9QYW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc2XzE0IiBUQVJHRVQ9Im1haW4iPlJlcXVlc3RfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczoyNzY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc5XzE0IiBUQVJHRVQ9Im1haW4iPlJlcXVlc3RfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczoyNzk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTA2XzE0IiBUQVJHRVQ9Im1haW4iPlJlcXVlc3RfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoxMDY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTA5XzE0IiBUQVJHRVQ9Im1haW4iPlJlcXVlc3RfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoxMDk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODBfMTYiIFRBUkdFVD0ibWFpbiI+UmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjgwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg4XzE2IiBUQVJHRVQ9Im1haW4iPlJlcXVlc3RfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo4ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjk1XzE2IiBUQVJHRVQ9Im1haW4iPlJlc2V0dHk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc2NV8xNCIgVEFSR0VUPSJtYWluIj5SZXNldF9DdXJzZXNfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjY3XzE2IiBUQVJHRVQ9Im1haW4iPlJlc2V0X1Byb2dfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjY5XzE2IiBUQVJHRVQ9Im1haW4iPlJlc2V0X1NoZWxsX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc3Nl8xNCIgVEFSR0VUPSJtYWluIj5SZXNldF9UZXJtaW5hbF9TdGF0ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTExXzE0IiBUQVJHRVQ9Im1haW4iPlJlc2l6ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTM4XzE0IiBUQVJHRVQ9Im1haW4iPlJlc3RvcmVfU29mdF9MYWJlbF9LZXlzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMDZfMTYiIFRBUkdFVD0ibWFpbiI+Umlwb2ZmbGluZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzg5XzE0IiBUQVJHRVQ9Im1haW4iPlJpcF9PZmZfTGluZXM8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvUy5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvUy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwOGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9TLmh0bQpAQCAtMCwwICsxLDE5MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+UzwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gUzwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI4NV8xNiIgVEFSR0VUPSJtYWluIj5TYXZldHR5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTlfMTQiIFRBUkdFVD0ibWFpbiI+U2F2ZV9DdXJzZXNfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzcxXzE0IiBUQVJHRVQ9Im1haW4iPlNhdmVfVGVybWluYWxfU3RhdGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTI3XzE0IiBUQVJHRVQ9Im1haW4iPlNjYWxlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjUyNzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zODNfMTQiIFRBUkdFVD0ibWFpbiI+U2NhbGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MzgzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NjdfMTQiIFRBUkdFVD0ibWFpbiI+U2NyZWVuX0R1bXBfVG9fRmlsZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc1XzE0IiBUQVJHRVQ9Im1haW4iPlNjcmVlbl9Jbml0X0Zyb21fRmlsZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODcxXzE0IiBUQVJHRVQ9Im1haW4iPlNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc5XzE0IiBUQVJHRVQ9Im1haW4iPlNjcmVlbl9TZXRfRmlsZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzIyXzE0IiBUQVJHRVQ9Im1haW4iPlNjcm9sbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDIyXzEzIiBUQVJHRVQ9Im1haW4iPlNjcm9sbGluZ19BbGxvd2VkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMjRfMTYiIFRBUkdFVD0ibWFpbiI+U2Nyb2xsb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ5MF8xNiIgVEFSR0VUPSJtYWluIj5zY3JfZHVtcDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE2XzE2IiBUQVJHRVQ9Im1haW4iPnNjcl9pbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MDNfMTYiIFRBUkdFVD0ibWFpbiI+c2NyX3Jlc3RvcmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUyOV8xNiIgVEFSR0VUPSJtYWluIj5zY3Jfc2V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMDhfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0JhY2tncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTEwODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDZfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0JhY2tncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDQ2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ0M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfQmFja2dyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0NDM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU0XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9CdWZmZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODg2XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9DYnJlYWtfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MTdfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0NvbCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjkyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0NvbCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjkzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzOF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9DdXJyZW50IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjcyMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODhfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0N1cnJlbnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6Mjg4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjZfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0N1cnJlbnRfRmxkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI4N18xNiIgVEFSR0VUPSJtYWluIj5TZXRfQ3Vycl9JdGVtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDFfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0N1cnNvcl9WaXNpYmlsaXR5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5OF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRWNob19Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk2NF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRXNjYXBlX1RpbWVyX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTk1XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZHR5cGVfQXJnPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIzNF8xMyIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGR0eXBlX0Nob2ljZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NDhfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX0JhY2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDA0XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9Gb3JlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2NV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfSW5pdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDFfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX0luaXRfSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTZfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX0p1c3Q8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzEwXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9NYXg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzMwXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ5MF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfUGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY4MV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVGVybTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDdfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80OV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkczo0OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNTBfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzOjUwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg0XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzOjg0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUxXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzOjUxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80N18xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHM6NDc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81MV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzOjUxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl81MV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHM6NTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzOjcwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81N18xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzFfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsZF9CdWZmZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjc4XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GbGRfU3RhdHVzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE1MV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZGI6MTUxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzUyXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYjo1MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTJfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYjo1MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl85N18xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZGI6OTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTJfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiOjUyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtI3JlZl81Ml8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiOjUyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTVfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGI6NTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81M18xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkYjo1MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjhfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsdXNoX09uX0ludGVycnVwdF9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyNl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRm9yZWdyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0MjY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDIzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JlZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQyMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzdfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0Zvcm1hdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82OTdfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0Zvcm1fSW5pdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0Zvcm1fSW5pdF9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg0NV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybV9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxM18xNiIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybV9TdWI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzEzXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JtX1Rlcm08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTU5XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JtX1Rlcm1fSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81OF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybV9Vc2VycHRyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4NV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybV9XaW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzMzXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Gcm1fRmllbGRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTZfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZybV9QYWdlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81NF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRnR5cDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0dyZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjE4XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9JdGVtcyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo2MTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODkzXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9JdGVtcyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo4OTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODA1XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9JdGVtX0luaXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTY1XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9JdGVtX0luaXRfSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTRfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fT3B0czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MTlfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fVGVybTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzFfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fVGVybV9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUxXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9JdGVtX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTU1XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9JdGVtX1ZhbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzlfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0p1c3RpZmljYXRpb248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTEwXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9LZXlQYWRfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Nl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfTGluZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjk2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwM18xNCIgVEFSR0VUPSJtYWluIj5TZXRfTWFyayAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0MDM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE0XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NYXJrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjUxNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODdfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X01heGltdW1fU2l6ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OTFfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfQmFjazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NjhfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfRm10PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU1Ml8xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9Gb3JlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyOV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9HcmV5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgzM18xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9Jbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3N18xNCIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9Jbml0X0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzc0XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X09wdHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjY3XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X1BhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NTdfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfU3ViPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg0N18xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9UZXJtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9UZXJtX0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTBfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MzNfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfV2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkwNF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfTWV0YV9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc1N18xNCIgVEFSR0VUPSJtYWluIj5TZXRfTmV3X1BhZ2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTc1XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9OTF9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfTm9EZWxheV9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM5N18xNCIgVEFSR0VUPSJtYWluIj5TZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczozOTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjQ0XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjY0NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMzZfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MjM2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzM18xNCIgVEFSR0VUPSJtYWluIj5TZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozMzM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDY2XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9QYWRfQ2hhcmFjdGVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjQ2NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODRfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1BhZF9DaGFyYWN0ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDg0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfUGFnZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo3MzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEwNV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfUGFnZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjoxMTA1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X1BhbmVsX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIwXzEzIiBUQVJHRVQ9Im1haW4iPlNldF9QYXR0ZXJuIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjUyMDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzZfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X1BhdHRlcm4gLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NzM2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzNV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfUXVldWVfSW50ZXJydXB0X01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODkyXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9SYXdfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDI3XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9TY3JvbGxfUmVnaW9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDVfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1NvZnRfTGFiZWxfS2V5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NTZfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU3Ml8xNCIgVEFSR0VUPSJtYWluIj5TZXRfU29mdF9MYWJlbF9LZXlfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAwXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9TcGFjaW5nIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjUwMDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTNfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X1NwYWNpbmcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NjkzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM3Nl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfU3RhdHVzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxNl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfU3ViX1dpbmRvdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo1MTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzcyXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9TdWJfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjM3MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1N5bmNoX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTUyXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9UaW1lb3V0X01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzE0XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Ub3Byb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk5XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Ub3BfUm93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkczo1MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzOjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU4XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHM6NTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkczo1MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkczo1MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTJfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1ZhbHVlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUwNV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjUwNTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjFfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1dpbmRvdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozNjE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81OV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6NTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzg3XzE0IiBUQVJHRVQ9Im1haW4iPlNob3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzg1XzE2IiBUQVJHRVQ9Im1haW4iPlNob3dwYW5lbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTU1XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19BdHRyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjE5NTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk2NV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfQXR0ciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoxOTY1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MTlfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX0F0dHJvZmY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxN18xNiIgVEFSR0VUPSJtYWluIj5TbGtfQXR0cm9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NDFfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX0F0dHJzZXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg4NV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfQ2xlYXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk3NV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgxOV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfSW5pdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODY5XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19MYWJlbCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoxODY5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NzdfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX0xhYmVsIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjE4Nzc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg1OF8xNiIgVEFSR0VUPSJtYWluIj5TbGtfTm91dHJlZnJlc2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg0OF8xNiIgVEFSR0VUPSJtYWluIj5TbGtfUmVmcmVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODk1XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19SZXN0b3JlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MzFfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX1NldDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTA1XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19Ub3VjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDhfMTQiIFRBUkdFVD0ibWFpbiI+U3BhY2luZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiIFRBUkdFVD0ibWFpbiI+U3RhbmRhcmRfV2luZG93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwMF8xNCIgVEFSR0VUPSJtYWluIj5TdGFuZG91dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzA3XzE0IiBUQVJHRVQ9Im1haW4iPlN0YXJ0X0NvbG9yPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyM18xMyIgVEFSR0VUPSJtYWluIj5TdGFydF9Nb3VzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDQ2XzE2IiBUQVJHRVQ9Im1haW4iPlN1YnBhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzBfMTYiIFRBUkdFVD0ibWFpbiI+U3Vid2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzNfMTMiIFRBUkdFVD0ibWFpbiI+U3ViX1BhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OTRfMTMiIFRBUkdFVD0ibWFpbiI+U3ViX1dpbmRvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjcyXzEzIiBUQVJHRVQ9Im1haW4iPlN1cHBvcnRlZF9BdHRyaWJ1dGVzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwNl8xNCIgVEFSR0VUPSJtYWluIj5Td2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MDNfMTQiIFRBUkdFVD0ibWFpbiI+U3dpdGNoX09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDAzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1MF8xNCIgVEFSR0VUPSJtYWluIj5Td2l0Y2hfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo2NTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjQyXzE0IiBUQVJHRVQ9Im1haW4iPlN3aXRjaF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjI0MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzlfMTQiIFRBUkdFVD0ibWFpbiI+U3dpdGNoX09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MzM5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDhfMTQiIFRBUkdFVD0ibWFpbiI+U3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjM4XzE0IiBUQVJHRVQ9Im1haW4iPlN5bmNocm9uaXplX0Rvd253YXJkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MzNfMTQiIFRBUkdFVD0ibWFpbiI+U3luY2hyb25pemVfVXB3YXJkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNjNfMTYiIFRBUkdFVD0ibWFpbiI+U3luY29rPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL2Z1bmNzL1QuaHRtIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL1QuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOGRlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvZnVuY3MvVC5odG0KQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+VDwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gVDwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE4XzEzIiBUQVJHRVQ9Im1haW4iPlRhYl9TaXplPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMDBfMTYiIFRBUkdFVD0ibWFpbiI+VGVybWF0dHJzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2ODdfMTQiIFRBUkdFVD0ibWFpbiI+VGVybWluYWxfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNjg3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2OTFfMTMiIFRBUkdFVD0ibWFpbiI+VGVybWluYWxfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNjkxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMjZfMTYiIFRBUkdFVD0ibWFpbiI+VGVybW5hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MjEyNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTM0XzE2IiBUQVJHRVQ9Im1haW4iPlRlcm1uYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjIxMzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81MV8xNiIgVEFSR0VUPSJtYWluIj50Z2V0ZW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNzFfMTYiIFRBUkdFVD0ibWFpbiI+dGdldGZsYWc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl84OV8xNiIgVEFSR0VUPSJtYWluIj50Z2V0bnVtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTA4XzE2IiBUQVJHRVQ9Im1haW4iPnRnZXRzdHIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkYjoxMDg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMjlfMTYiIFRBUkdFVD0ibWFpbiI+dGdldHN0ciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiOjEyOTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1MV8xNiIgVEFSR0VUPSJtYWluIj50Z290bzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzUzXzEzIiBUQVJHRVQ9Im1haW4iPlRHb3RvPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzY5XzE2IiBUQVJHRVQ9Im1haW4iPnRpZ2V0ZmxhZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl84N18xNiIgVEFSR0VUPSJtYWluIj50aWdldHN0ciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYjo4NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMDhfMTYiIFRBUkdFVD0ibWFpbiI+dGlnZXRzdHIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZGI6MTA4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEyN18xNiIgVEFSR0VUPSJtYWluIj50aWdldHN0ciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYjoxMjc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzgyXzE0IiBUQVJHRVQ9Im1haW4iPlRvcDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNzVfMTYiIFRBUkdFVD0ibWFpbiI+VG9wcGFuZWw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzI3XzE2IiBUQVJHRVQ9Im1haW4iPlRvcHJvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMDVfMTMiIFRBUkdFVD0ibWFpbiI+VG9wX1JvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQxXzE0IiBUQVJHRVQ9Im1haW4iPlRvdWNoIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjExNDE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0NV8xNCIgVEFSR0VUPSJtYWluIj5Ub3VjaCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMTQ1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDNfMTQiIFRBUkdFVD0ibWFpbiI+VG91Y2hfU29mdF9MYWJlbF9LZXlzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0MF8xNiIgVEFSR0VUPSJtYWluIj50cHV0czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDJfMTQiIFRBUkdFVD0ibWFpbiI+VHJhY2VfT248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfMTA2XzE0IiBUQVJHRVQ9Im1haW4iPlRyYWNlX1B1dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDAzXzE2IiBUQVJHRVQ9Im1haW4iPlRyYW5zZm9ybTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE0XzE0IiBUQVJHRVQ9Im1haW4iPlRyYW5zZm9ybV9Db29yZGluYXRlczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9mdW5jcy9VLmh0bSBiL2RvYy9odG1sL2FkYS9mdW5jcy9VLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDBmOTBlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL2Z1bmNzL1UuaHRtCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPlU8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIFU8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMTZfMTYiIFRBUkdFVD0ibWFpbiI+VW5jdHJsIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjIwMTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAyNF8xNiIgVEFSR0VUPSJtYWluIj5VbmN0cmwgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MjAyNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjJfMTQiIFRBUkdFVD0ibWFpbiI+VW5kb19LZXlzdHJva2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTM3XzE2IiBUQVJHRVQ9Im1haW4iPlVuZ2V0Y2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTg2XzE2IiBUQVJHRVQ9Im1haW4iPlVuZ2V0bW91c2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTQ5XzE0IiBUQVJHRVQ9Im1haW4iPlVuZ2V0X01vdXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMzZfMTQiIFRBUkdFVD0ibWFpbiI+VW50b3VjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjIyXzE0IiBUQVJHRVQ9Im1haW4iPlVuX0NvbnRyb2wgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTYyMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjI3XzEzIiBUQVJHRVQ9Im1haW4iPlVuX0NvbnRyb2wgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTYyNzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfOTJfMTQiIFRBUkdFVD0ibWFpbiI+VXBkYXRlX1BhbmVsczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQwXzE0IiBUQVJHRVQ9Im1haW4iPlVwZGF0ZV9TY3JlZW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzMV8xNCIgVEFSR0VUPSJtYWluIj5Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1MV8xMyIgVEFSR0VUPSJtYWluIj5Vc2VfRXh0ZW5kZWRfTmFtZXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ3NV8xNiIgVEFSR0VUPSJtYWluIj51c2VfZXh0ZW5kZWRfbmFtZXNDPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk5NV8xNCIgVEFSR0VUPSJtYWluIj5Vc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTg4XzE0IiBUQVJHRVQ9Im1haW4iPlVzZV9JbnNlcnRfRGVsZXRlX0xpbmU8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvVi5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvVi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyNmQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9WLmh0bQpAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5WPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBWPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTNfMTMiIFRBUkdFVD0ibWFpbiI+VmFsdWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRzOjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIxOF8xMyIgVEFSR0VUPSJtYWluIj5WYWx1ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyMTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzM3XzE0IiBUQVJHRVQ9Im1haW4iPlZlcnRpY2FsX0xpbmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjI3XzEzIiBUQVJHRVQ9Im1haW4iPlZpc2libGU8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvZnVuY3MvVy5odG0gYi9kb2MvaHRtbC9hZGEvZnVuY3MvVy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3MjQyYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9mdW5jcy9XLmh0bQpAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5XPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBXPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTFfMTYiIFRBUkdFVD0ibWFpbiI+V2FkZGNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwN18xNiIgVEFSR0VUPSJtYWluIj5XYWRkY2huc3RyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3Nl8xNiIgVEFSR0VUPSJtYWluIj5XYWRkbnN0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NTVfMTYiIFRBUkdFVD0ibWFpbiI+V2F0dHJnZXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6NjU1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3OF8xNiIgVEFSR0VUPSJtYWluIj5XYXR0cmdldCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjo2Nzg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjE0XzE2IiBUQVJHRVQ9Im1haW4iPldhdHRyb2ZmPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxMV8xNiIgVEFSR0VUPSJtYWluIj5XYXR0cm9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzOV8xNiIgVEFSR0VUPSJtYWluIj5XYXR0cnNldDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU5XzE3IiBUQVJHRVQ9Im1haW4iPldCYWNrZ3JvdW5kPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0OF8xNiIgVEFSR0VUPSJtYWluIj5XYm9yZGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNjlfMTYiIFRBUkdFVD0ibWFpbiI+V0NoYW5nZUJrZ2Q8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE5XzE2IiBUQVJHRVQ9Im1haW4iPldjaGdhdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTI3XzE2IiBUQVJHRVQ9Im1haW4iPldjbGVhcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTM3XzE2IiBUQVJHRVQ9Im1haW4iPldjbGVhcmJvdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTQ3XzE2IiBUQVJHRVQ9Im1haW4iPldjbGVhcmVvbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTY3XzE2IiBUQVJHRVQ9Im1haW4iPldkZWxjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTRfMTYiIFRBUkdFVD0ibWFpbiI+V2RlbHdpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDhfMTYiIFRBUkdFVD0ibWFpbiI+V2VjaG9jaGFyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE5N18xNiIgVEFSR0VUPSJtYWluIj5XZW5jbG9zZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTE3XzE2IiBUQVJHRVQ9Im1haW4iPldlcmFzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTgwXzE2IiBUQVJHRVQ9Im1haW4iPldnZXRia2dkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyM18xNiIgVEFSR0VUPSJtYWluIj5XZ2V0Y2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc3OV8xNiIgVEFSR0VUPSJtYWluIj5XZ2V0bnN0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80OTBfMTYiIFRBUkdFVD0ibWFpbiI+V2hsaW5lPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1OTNfMTYiIFRBUkdFVD0ibWFpbiI+V2luY2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczMV8xNiIgVEFSR0VUPSJtYWluIj5XaW5jaG5zdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY4OV8xNiIgVEFSR0VUPSJtYWluIj5XaW5uc3RyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MTVfMTYiIFRBUkdFVD0ibWFpbiI+V2luc2NoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMjFfMTYiIFRBUkdFVD0ibWFpbiI+V2luc2RlbGxuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDdfMTYiIFRBUkdFVD0ibWFpbiI+V2luc25zdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzM18xNiIgVEFSR0VUPSJtYWluIj5XTGluZVRvdWNoZWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM3XzE2IiBUQVJHRVQ9Im1haW4iPldtb3ZlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwODBfMTYiIFRBUkdFVD0ibWFpbiI+V25vdXRyZWZyZXNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCIgVEFSR0VUPSJtYWluIj5XcmFwX0J1aWx0aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEwM18xNiIgVEFSR0VUPSJtYWluIj5XcmVkcmF3bG48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA2OV8xNiIgVEFSR0VUPSJtYWluIj5XcmVmcmVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQzXzE2IiBUQVJHRVQ9Im1haW4iPndyZXNpemU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU1NV8xNiIgVEFSR0VUPSJtYWluIj5Xc2NybDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDQ2XzE2IiBUQVJHRVQ9Im1haW4iPldzZXRzY3JyZWc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzAxXzE2IiBUQVJHRVQ9Im1haW4iPldzZXRfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTkxXzE2IiBUQVJHRVQ9Im1haW4iPndzdGFuZGVuZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81ODlfMTYiIFRBUkdFVD0ibWFpbiI+d3N0YW5kb3V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxNF8xNyIgVEFSR0VUPSJtYWluIj5XdGltZW91dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTkxXzE2IiBUQVJHRVQ9Im1haW4iPld0b3VjaGxuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwN18xNiIgVEFSR0VUPSJtYWluIj5XdmxpbmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI0Nl8xNiIgVEFSR0VUPSJtYWluIj5XV2luVG91Y2hlZDwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS9pbmRleC5odG0gYi9kb2MvaHRtbC9hZGEvaW5kZXguaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMTM0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvaW5kZXguaHRtCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIEZyYW1lc2V0Ly9FTiI+Cis8SFRNTD4KKzxIRUFEPjxUSVRMRT5Tb3VyY2UgQnJvd3NlcjwvVElUTEU+PC9IRUFEPgorPEZSQU1FU0VUIENPTFM9IjI1MCwqIj4KKzxOT0ZSQU1FUz4KKzxIMiBBTElHTj1DRU5URVI+RmlsZXM8L0gyPgorPEEgSFJFRj0iZmlsZXMvVC5odG0iPltUXTwvQT4KKzxIUj4KKzxIMiBBTElHTj1DRU5URVI+RnVuY3Rpb25zL1Byb2NlZHVyZXM8L0gyPgorPEEgSFJFRj0iZnVuY3MvQS5odG0iPltBXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0IuaHRtIj5bQl08L0E+Cis8QSBIUkVGPSJmdW5jcy9DLmh0bSI+W0NdPC9BPgorPEEgSFJFRj0iZnVuY3MvRC5odG0iPltEXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0UuaHRtIj5bRV08L0E+Cis8QSBIUkVGPSJmdW5jcy9GLmh0bSI+W0ZdPC9BPgorPEEgSFJFRj0iZnVuY3MvRy5odG0iPltHXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0guaHRtIj5bSF08L0E+Cis8QSBIUkVGPSJmdW5jcy9JLmh0bSI+W0ldPC9BPgorPEEgSFJFRj0iZnVuY3MvSy5odG0iPltLXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0wuaHRtIj5bTF08L0E+Cis8QSBIUkVGPSJmdW5jcy9NLmh0bSI+W01dPC9BPgorPEEgSFJFRj0iZnVuY3MvTi5odG0iPltOXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL08uaHRtIj5bT108L0E+Cis8QSBIUkVGPSJmdW5jcy9QLmh0bSI+W1BdPC9BPgorPEEgSFJFRj0iZnVuY3MvUS5odG0iPltRXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1IuaHRtIj5bUl08L0E+Cis8QSBIUkVGPSJmdW5jcy9TLmh0bSI+W1NdPC9BPgorPEEgSFJFRj0iZnVuY3MvVC5odG0iPltUXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1UuaHRtIj5bVV08L0E+Cis8QSBIUkVGPSJmdW5jcy9WLmh0bSI+W1ZdPC9BPgorPEEgSFJFRj0iZnVuY3MvVy5odG0iPltXXTwvQT4KKzwvTk9GUkFNRVM+Cis8RlJBTUVTRVQgUk9XUz0iNTAlLDUwJSI+Cis8RlJBTUUgTkFNRT1maWxlcyBTUkM9ZmlsZXMuaHRtPgorPEZSQU1FIE5BTUU9ZnVuY3MgU1JDPWZ1bmNzLmh0bT4KKzwvRlJBTUVTRVQ+Cis8RlJBTUUgTkFNRT1tYWluIFNSQz1tYWluLmh0bT4KKzwvRlJBTUVTRVQ+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvbWFpbi5odG0gYi9kb2MvaHRtbC9hZGEvbWFpbi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MDYwOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS9tYWluLmh0bQpAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT48L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPFAgQUxJR049cmlnaHQ+PEEgSFJFRj0ibWFpbi5odG0iIFRBUkdFVD0iX3RvcCI+W05vIGZyYW1lIHZlcnNpb24gaXMgaGVyZV08L0E+PFA+PEgyIEFMSUdOPUNFTlRFUj5GaWxlczwvSDI+Cis8QSBIUkVGPSJmaWxlcy9ULmh0bSI+W1RdPC9BPgorPEhSPjxIMiBBTElHTj1DRU5URVI+RnVuY3Rpb25zL1Byb2NlZHVyZXM8L0gyPgorPEEgSFJFRj0iZnVuY3MvQS5odG0iPltBXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0IuaHRtIj5bQl08L0E+Cis8QSBIUkVGPSJmdW5jcy9DLmh0bSI+W0NdPC9BPgorPEEgSFJFRj0iZnVuY3MvRC5odG0iPltEXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0UuaHRtIj5bRV08L0E+Cis8QSBIUkVGPSJmdW5jcy9GLmh0bSI+W0ZdPC9BPgorPEEgSFJFRj0iZnVuY3MvRy5odG0iPltHXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0guaHRtIj5bSF08L0E+Cis8QSBIUkVGPSJmdW5jcy9JLmh0bSI+W0ldPC9BPgorPEEgSFJFRj0iZnVuY3MvSy5odG0iPltLXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0wuaHRtIj5bTF08L0E+Cis8QSBIUkVGPSJmdW5jcy9NLmh0bSI+W01dPC9BPgorPEEgSFJFRj0iZnVuY3MvTi5odG0iPltOXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL08uaHRtIj5bT108L0E+Cis8QSBIUkVGPSJmdW5jcy9QLmh0bSI+W1BdPC9BPgorPEEgSFJFRj0iZnVuY3MvUS5odG0iPltRXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1IuaHRtIj5bUl08L0E+Cis8QSBIUkVGPSJmdW5jcy9TLmh0bSI+W1NdPC9BPgorPEEgSFJFRj0iZnVuY3MvVC5odG0iPltUXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1UuaHRtIj5bVV08L0E+Cis8QSBIUkVGPSJmdW5jcy9WLmh0bSI+W1ZdPC9BPgorPEEgSFJFRj0iZnVuY3MvVy5odG0iPltXXTwvQT4KKzxIUj4KK1lvdSBzaG91bGQgc3RhcnQgeW91ciBicm93c2luZyB3aXRoIG9uZSBvZiB0aGVzZSBmaWxlczoKKzxVTD4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkczwvQT4KKzwvVUw+Cis8L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3RhYmxlLmh0bWwgYi9kb2MvaHRtbC9hZGEvdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjZkMGJkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3RhYmxlLmh0bWwKQEAgLTAsMCArMSwzNDEgQEAKKzwhRE9DVFlQRSBIVE1MCitQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDMuMC8vRU4iPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5Db3JyZXNwb25kZW5jZSBiZXR3ZWVuIG5jdXJzZXMgQyBhbmQgQWRhIGZ1bmN0aW9uczwvVElUTEU+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5Db3JyZXNwb25kZW5jZSBiZXR3ZWVuIG5jdXJzZXMgQyBhbmQgQWRhIGZ1bmN0aW9uczwvSDE+Cis8SDI+U29ydGVkIGJ5IEMgZnVuY3Rpb24gbmFtZTwvSDI+Cis8VEFCTEUgQUxJR049Q0VOVEVSIEJPUkRFUj4KKzxUUiBBTElHTj1MRUZUPgorPFRIPkMgbmFtZTwvVEg+PFRIPkFkYSBuYW1lPC9USD48VEg+bWFuIHBhZ2U8L1RIPjwvVFI+Cis8VFI+PFREPmFzc3VtZV9kZWZhdWx0X2NvbG9ycygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTU2Ij5Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmRlZmF1bHRfY29sb3JzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+YmF1ZHJhdGUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzMSI+QmF1ZHJhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+YmVlcCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNDAiPkJlZXA8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5ib3R0b21fcGFuZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8zIj5Cb3R0b208L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Ym94KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8yNiI+Qm94PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmNhbl9jaGFuZ2VfY29sb3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0NiI+Q2FuX0NoYW5nZV9Db2xvcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y2JyZWFrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80MiI+U2V0X0NicmVha19Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmNsZWFyb2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzU0Ij5DbGVhcl9Pbl9OZXh0X1VwZGF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmNvbG9yX2NvbnRlbnQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0NyI+Q29sb3JfQ29udGVudDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y29weXdpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNzkiPkNvcHk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5jdXJyZW50X2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81OCI+Q3VycmVudDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmN1cnJlbnRfaXRlbSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTQiPkN1cnJlbnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmN1cnNjcjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzIiPkN1cnJlbnRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y3Vyc2VzX3ZlcnNpb24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE1NyI+Q3Vyc2VzX1ZlcnNpb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZXh0ZW5kLjN4Lmh0bWwiPmN1cnNfZXh0ZW5kLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y3Vyc19zZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE1MyI+U2V0X0N1cnNvcl9WaXNpYmlsaXR5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRhdGFfYWhlYWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzU0Ij5EYXRhX0FoZWFkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2RhdGEuM3guaHRtbCI+Zm9ybV9kYXRhLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZGF0YV9iZWhpbmQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzU1Ij5EYXRhX0JlaGluZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9kYXRhLjN4Lmh0bWwiPmZvcm1fZGF0YS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRlZmluZV9rZXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyNCI+RGVmaW5lX0tleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZGVmX3Byb2dfbW9kZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQ4Ij5TYXZlX0N1cnNlc19Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRlbGF5X291dHB1dCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTI5Ij5EZWxheV9PdXRwdXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kZWxfcGFuZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8xNSI+RGVsZXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRlbHdpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTIiPkRlbGV0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kZXJ3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0Ij5EZXJpdmVkX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kb3VwZGF0ZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNjEiPlVwZGF0ZV9TY3JlZW48L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kdXBfZmllbGQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzQiPkR1cGxpY2F0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+Zm9ybV9maWVsZF9uZXcuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kdXB3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE1Ij5EdXBsaWNhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZHluYW1pY19maWVsZF9pbmZvKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yNiI+RHluYW1pY19JbmZvPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2luZm8uM3guaHRtbCI+Zm9ybV9maWVsZF9pbmZvLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZWNobygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNDQiPlNldF9FY2hvX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZW5kd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV81Ij5FbmRfV2luZG93czwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmVyYXNlY2hhcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTMyIj5FcmFzZV9DaGFyYWN0ZXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfYmFjaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMjEiPkJhY2tncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9iYWNrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yMiI+QmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2J1ZmZlcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfOSI+R2V0X0J1ZmZlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9jb3VudCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNDMiPkZpZWxkX0NvdW50PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9mb3JlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xOCI+Rm9yZWdyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2ZvcmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzE5Ij5Gb3JlZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfaW5kZXgoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzYxIj5HZXRfSW5kZXg8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9pbmZvKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yNSI+SW5mbzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmZvcm1fZmllbGRfaW5mby4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzM2Ij5HZXRfRmllbGRfSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfanVzdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNyI+R2V0X0p1c3RpZmljYXRpb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9vcHRzX29uKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xNCI+U3dpdGNoX09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xNSI+R2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xNiI+R2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9wYWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzI0Ij5QYWRfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfc3RhdHVzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xMSI+Q2hhbmdlZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF90ZXJtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zNyI+R2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX3R5cGUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8yIj5HZXRfVHlwZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwiPmZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMiI+R2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMyI+R2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZsYXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80MSI+Rmxhc2hfU2NyZWVuPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2JlZXAuM3guaHRtbCI+Y3Vyc19iZWVwLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zmx1c2hpbnAoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzMCI+Rmx1c2hfSW5wdXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX2RyaXZlcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTYiPkRyaXZlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9kcml2ZXIuM3guaHRtbCI+Zm9ybV9kcml2ZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX2ZpZWxkcygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNDIiPkZpZWxkczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV9pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zOCI+R2V0X0Zvcm1fSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV9vcHRzX29uKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80OSI+U3dpdGNoX09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzUwIj5HZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTEiPkdldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV9wYWdlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV82MCI+UGFnZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fc3ViKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zMCI+R2V0X1N1Yl9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV90ZXJtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zOSI+R2V0X0Zvcm1fVGVybV9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMiI+R2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzMiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX3dpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMjgiPkdldF9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZnJlZV9maWVsZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMyI+RGVsZXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZyZWVfZm9ybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNDciPkRlbGV0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mcmVlX2l0ZW0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzMiPkRlbGV0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZyZWVfbWVudSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNjAiPkRlbGV0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9uZXcuM3guaHRtbCI+bWVudV9uZXcuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5nZXRiZWd5eCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfODYiPkdldF9XaW5kb3dfUG9zaXRpb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmdldG1heHl4KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84NSI+R2V0X1NpemU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmdldG1vdXNlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI0FGVV8yIj5HZXRfTW91c2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmdldHBhcnl4KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84OCI+R2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmdldHl4KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84NyI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aGFsZmRlbGF5KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80NyI+SGFsZl9EZWxheTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5oYXNfY29sb3JzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNDQiPkhhc19Db2xvcnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmhhc19pYygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTM0Ij5IYXNfSW5zZXJ0X0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5oYXNfaWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzNSI+SGFzX0luc2VydF9MaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmhhc19rZXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzMxIj5IYXNfS2V5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5oaWRlX3BhbmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfNyI+SGlkZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pZGNvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTYiPlVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmlkbG9rKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV81NSI+VXNlX0luc2VydF9EZWxldGVfTGluZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmltbWVkb2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzU4Ij5JbW1lZGlhdGVfVXBkYXRlX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pbml0X2NvbG9yKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNDUiPkluaXRfQ29sb3I8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmluaXRfcGFpcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQyIj5Jbml0X1BhaXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmluaXRzY3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzMiPkluaXRfU2NyZWVuPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aW5pdHNjcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNCI+SW5pdF9XaW5kb3dzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aW50cmZsdXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80OCI+U2V0X0ZsdXNoX09uX0ludGVycnVwdF9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmlzZW5kd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82Ij5Jc19FbmRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXNfbGluZXRvdWNoZWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzc3Ij5Jc19Ub3VjaGVkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pc193aW50b3VjaGVkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83OCI+SXNfVG91Y2hlZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9jb3VudCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTgiPkl0ZW1fQ291bnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaXRlbXMuM3guaHRtbCI+bWVudV9pdGVtcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fZGVzY3JpcHRpb24oKTs8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xMiI+RGVzY3JpcHRpb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX25hbWUuM3guaHRtbCI+bWl0ZW1fbmFtZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1faW5kZXgoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzE3Ij5HZXRfSW5kZXg8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1faW5pdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTIiPkdldF9JdGVtX0luaXRfSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fbmFtZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTEiPk5hbWU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX25hbWUuM3guaHRtbCI+bWl0ZW1fbmFtZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fb3B0c19vbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfOCI+U3dpdGNoX09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTAiPkdldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwiPm1pdGVtX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzkiPkdldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwiPm1pdGVtX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX3Rlcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzUzIj5HZXRfSXRlbV9UZXJtX0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8yIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8zIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX3ZhbHVlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81Ij5WYWx1ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbCI+bWl0ZW1fdmFsdWUuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX3Zpc2libGUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzYiPlZpc2libGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX3Zpc2libGUuM3guaHRtbCI+bWl0ZW1fdmlzaWJsZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmtleW5hbWUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyNSI+S2V5X05hbWU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5rZXluYW1lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMjYiPktleV9OYW1lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+a2V5b2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyMyI+RW5hYmxlX0tleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4va2V5b2suM3guaHRtbCI+a2V5b2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5rZXlwYWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQ2Ij5TZXRfS2V5UGFkX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+a2lsbGNoYXIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzMyI+S2lsbF9DaGFyYWN0ZXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bGVhdmVvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTciPkxlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5saW5rX2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81Ij5MaW5rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmxvbmduYW1lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMzciPkxvbmdfTmFtZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5sb25nbmFtZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTM4Ij5Mb25nX05hbWU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9iYWNrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8zNSI+QmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfYmFjaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMzYiPkJhY2tncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2RyaXZlcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNjEiPkRyaXZlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9kcml2ZXIuM3guaHRtbCI+bWVudV9kcml2ZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2ZvcmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzMyIj5Gb3JlZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9mb3JlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8zMyI+Rm9yZWdyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfZm9ybWF0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV80NyI+Rm9ybWF0PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfZ3JleSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMzgiPkdyZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2dyZXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzM5Ij5HcmV5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81NCI+R2V0X01lbnVfSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9pdGVtcygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTciPkl0ZW1zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X21hcmsoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzMwIj5NYXJrPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9vcHRzX29uKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yMCI+U3dpdGNoX09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzIxIj5HZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjIiPkdldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9wYWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQxIj5QYWRfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9wYXR0ZXJuKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV80NSI+UGF0dGVybjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwiPm1lbnVfcGF0dGVybi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfcmVxdWVzdG5hbWUuM3g8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV82MiI+PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2RyaXZlci4zeC5odG1sIj5tZW51X2RyaXZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfc3BhY2luZygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDMiPlNwYWNpbmc8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfc3BhY2luZy4zeC5odG1sIj5tZW51X3NwYWNpbmcuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X3N1YigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjYiPkdldF9TdWJfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfdGVybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTUiPkdldF9NZW51X1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzIiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sIj5tZW51X3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8zIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV93aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzI0Ij5HZXRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1ldGEoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQ1Ij5TZXRfTWV0YV9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1vdXNlaW50ZXJ2YWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jQUZVXzUiPk1vdXNlX0ludGVydmFsPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tb3VzZW1hc2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jQUZVXzEiPlN0YXJ0X01vdXNlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tb3ZlX2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80NCI+TW92ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bW92ZV9wYW5lbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzExIj5Nb3ZlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12ZGVyd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNyI+TW92ZV9EZXJpdmVkX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndhZGRjaG5zdHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzI0Ij5BZGQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12d2FkZGNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV85Ij5BZGQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12d2FkZG5zdHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzIyIj5BZGQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3Y2hnYXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzM5Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12d2RlbGNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV85NiI+RGVsZXRlX0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19kZWxjaC4zeC5odG1sIj5jdXJzX2RlbGNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3Z2V0bnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTA4Ij5HZXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3aW5jaG5zdHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEwNiI+UGVlazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12d2luY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzk4Ij5QZWVrPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3aW5uc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDQiPlBlZWs8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12d2luc2NoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDAiPkluc2VydDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3aW5zbnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTAyIj5JbnNlcnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE2Ij5Nb3ZlX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5uYXBtcygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTU0Ij5OYXBfTWlsbGlfU2Vjb25kczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5fbmNfZnJlZWFsbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTU5Ij5DdXJzZXNfRnJlZV9BbGw8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19maWVsZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMSI+Q3JlYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19maWVsZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMiI+TmV3X0ZpZWxkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19mb3JtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80NSI+Q3JlYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX25ldy4zeC5odG1sIj5mb3JtX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19mb3JtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80NiI+TmV3X0Zvcm08L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3LjN4Lmh0bWwiPmZvcm1fbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X2l0ZW0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzEiPkNyZWF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19pdGVtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yIj5OZXdfSXRlbTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19tZW51KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81OSI+Q3JlYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X25ldy4zeC5odG1sIj5tZW51X25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld3BhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfODkiPk5ld19QYWQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X3BhZ2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzYzIj5Jc19OZXdfUGFnZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5mb3JtX25ld19wYWdlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X3BhbmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfMSI+Q3JlYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld19wYW5lbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzIiPk5ld19QYW5lbDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5uZXd3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExIj5DcmVhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzUzIj5TZXRfTkxfTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5vZGVsYXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzUwIj5TZXRfTm9EZWxheV9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5vdGltZW91dCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTIiPlNldF9Fc2NhcGVfVGltZV9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm92ZXJsYXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzgxIj5PdmVybGF5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbCI+Y3Vyc19vdmVybGF5LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+b3ZlcndyaXRlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84MCI+T3ZlcndyaXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbCI+Y3Vyc19vdmVybGF5LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGFpcl9jb250ZW50KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNDMiPlBhaXJfQ29udGVudDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGFuZWxfYWJvdmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8xMyI+QWJvdmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGFuZWxfYmVsb3coKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8xNCI+QmVsb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGFuZWxfaGlkZGVuKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfMTIiPklzX0hpZGRlbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYW5lbF91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8yIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnBhbmVsX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzMiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGFuZWxfd2luZG93KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfOCI+R2V0X1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYW5lbF93aW5kb3coKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV85Ij5QYW5lbF9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGVjaG9jaGFyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV85MyI+QWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cG5vdXRyZWZyZXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV85MiI+UmVmcmVzaF9XaXRob3V0X1VwZGF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wb3NfZm9ybV9jdXJzb3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzUzIj5Qb3NpdGlvbl9DdXJzb3I8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fY3Vyc29yLjN4Lmh0bWwiPmZvcm1fY3Vyc29yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cG9zX21lbnVfY3Vyc29yKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yOCI+UG9zaXRpb25fQ3Vyc29yPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2N1cnNvci4zeC5odG1sIj5tZW51X2N1cnNvci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnBvc3RfZm9ybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTIiPlBvc3Q8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fcG9zdC4zeC5odG1sIj5mb3JtX3Bvc3QuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wb3N0X21lbnUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzE4Ij5Qb3N0PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3Bvc3QuM3guaHRtbCI+bWVudV9wb3N0LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cHJlZnJlc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzkxIj5SZWZyZXNoPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnFpZmx1c2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQ5Ij5TZXRfUXVldWVfSW50ZXJydXB0X01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cmF3KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80MyI+U2V0X1Jhd19Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnJlZHJhd3dpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNjQiPlJlZHJhdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnJlcGxhY2VfcGFuZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8xMCI+UmVwbGFjZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5yZXNldF9wcm9nX21vZGUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0OSI+UmVzZXRfQ3Vyc2VzX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cmVzZXR0eSgpOzwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE1MSI+UmVzZXRfVGVybWluYWxfU3RhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cmlwb2ZmbGluZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTUyIj5SaXBfT2ZmX0xpbmVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNhdmV0dHkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE1MCI+U2F2ZV9UZXJtaW5hbF9TdGF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zY2FsZV9mb3JtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zMSI+U2NhbGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2NhbGVfbWVudSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjciPlNjYWxlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNjcl9kdW1wKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNjAiPlNjcmVlbl9EdW1wX1RvX0ZpbGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNjcl9pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNjIiPlNjcmVlbl9Jbml0X0Zyb21fRmlsZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2Nyb2xsb2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzU5Ij5BbGxvd19TY3JvbGxpbmc8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zY3JfcmVzdG9yZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTYxIj5TY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNjcl9zZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE2MyI+U2NyZWVuX1NldF9GaWxlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfY3VycmVudF9maWVsZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTciPlNldF9DdXJyZW50PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2N1cnJlbnRfaXRlbSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTMiPlNldF9DdXJyZW50PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfYmFjaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMjAiPlNldF9CYWNrZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX2J1ZmZlcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfOCI+U2V0X0J1ZmZlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfZm9yZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMTciPlNldF9Gb3JlZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzMyIj5TZXRfRmllbGRfSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX2p1c3QoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzYiPlNldF9KdXN0aWZpY2F0aW9uPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3guaHRtbCI+Zm9ybV9maWVsZF9qdXN0LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX21heCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMTIiPlNldF9NYXhpbXVtX1NpemU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzEzIj5TZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9maWVsZF9wYWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzIzIj5TZXRfUGFkX0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9maWVsZF9zdGF0dXMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzEwIj5TZXRfU3RhdHVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9maWVsZF90ZXJtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zMyI+U2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9maWVsZF90eXBlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMSI+U2V0X1R5cGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMSI+U2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9mb3JtX2ZpZWxkcygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNDAiPlJlZGVmaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV9maWVsZHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzQxIj5TZXRfRmllbGRzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV9pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zNCI+U2V0X0Zvcm1fSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNDgiPlNldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fcGFnZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTkiPlNldF9QYWdlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fc3ViKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yOSI+U2V0X1N1Yl9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fdGVybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMzUiPlNldF9Gb3JtX1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9mb3JtX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8xIj5TZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yNyI+U2V0X1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfaXRlbV9pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV80OCI+U2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2l0ZW1fb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNyI+U2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9pdGVtX3Rlcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQ5Ij5TZXRfSXRlbV9UZXJtX0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfaXRlbV91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMSI+U2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sIj5taXRlbV91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2l0ZW1fdmFsdWUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQiPlNldF9WYWx1ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbCI+bWl0ZW1fdmFsdWUuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9iYWNrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8zNCI+U2V0X0JhY2tncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9mb3JlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8zMSI+U2V0X0ZvcmVncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9mb3JtYXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQ2Ij5TZXRfRm9ybWF0PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X2dyZXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzM3Ij5TZXRfR3JleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzUwIj5TZXRfTWVudV9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9pdGVtcygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTYiPlJlZGVmaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9tYXJrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yOSI+U2V0X01hcms8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfbWFyay4zeC5odG1sIj5tZW51X21hcmsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xOSI+U2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV9wYWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQwIj5TZXRfUGFkX0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3BhdHRlcm4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQ0Ij5TZXRfUGF0dGVybjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwiPm1lbnVfcGF0dGVybi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3NwYWNpbmcoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQyIj5TZXRfU3BhY2luZzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3N1YigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjUiPlNldF9TdWJfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3Rlcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzUxIj5TZXRfTWVudV9UZXJtX0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbWVudV91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMSI+U2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3dpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjMiPlNldF9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X25ld19wYWdlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV82MiI+U2V0X05ld19QYWdlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX25ld19wYWdlLjN4Lmh0bWwiPmZvcm1fbmV3X3BhZ2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfcGFuZWxfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMSI+U2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfdG9wX3JvdygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTUiPlNldF9Ub3BfUm93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zaG93X3BhbmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfNSI+U2hvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfYXR0cm9uKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTgiPlN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19hdHRyc2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTkiPlNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19hdHRyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMjAiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19hdHRyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMjEiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19jbGVhcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTE1Ij5DbGVhcl9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX2NvbG9yKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMjIiPlNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfaW5pdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTA5Ij5Jbml0X1NvZnRfTGFiZWxfS2V5czwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfbGFiZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExMyI+R2V0X1NvZnRfTGFiZWxfS2V5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19sYWJlbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTE0Ij5HZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX25vdXRyZWZyZXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTIiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19yZWZyZXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTEiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX3Jlc3RvcmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExNiI+UmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX3NldCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTEwIj5TZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX3RvdWNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTciPlRvdWNoX1NvZnRfTGFiZWxfS2V5czwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zdGFuZG91dCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMzIiPlN0YW5kb3V0PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c3RhcnRfY29sb3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0MSI+U3RhcnRfQ29sb3I8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnN0ZHNjcjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEiPlN0YW5kYXJkX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnN1YnBhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTAiPlN1Yl9QYWQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c3Vid2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMyI+U3ViX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zeW5jb2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzIwIj5TZXRfU3luY2hfTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD50ZXJtYXR0cnMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzNiI+U3VwcG9ydGVkX0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dGVybW5hbWUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzOSI+VGVybWluYWxfTmFtZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD50ZXJtbmFtZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQwIj5UZXJtaW5hbF9OYW1lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnRvcF9wYW5lbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzQiPlRvcDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD50b3Bfcm93KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xNiI+VG9wX1JvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dG91Y2hsaW5lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83NSI+VG91Y2g8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnRvdWNod2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83NCI+VG91Y2g8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPl90cmFjZWYoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jQUZVXzIiPlRyYWNlX1B1dDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dHJhY2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jQUZVXzEiPlRyYWNlX29uPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD51bmN0cmwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyNyI+VW5fQ29udHJvbDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnVuY3RybCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTI4Ij5Vbl9Db250cm9sPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dW5nZXRjaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMzAiPlVuZG9fS2V5c3Ryb2tlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD51bmdldG1vdXNlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI0FGVV8zIj5VbmdldF9Nb3VzZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dW50b3VjaHdpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNzMiPlVudG91Y2g8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnVwZGF0ZV9wYW5lbHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV82Ij5VcGRhdGVfUGFuZWxzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnVzZV9kZWZhdWx0X2NvbG9ycygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTU1Ij5Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmRlZmF1bHRfY29sb3JzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dXNlX2V4dGVuZGVkX25hbWVzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNTgiPlVzZV9FeHRlbmRlZF9OYW1lczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19leHRlbmQuM3guaHRtbCI+Y3Vyc19leHRlbmQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YWRkY2huc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8yMyI+QWRkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YWRkY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzgiPkFkZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2FkZG5zdHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzIxIj5BZGQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2F0dHJfZ2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zNSI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2F0dHJfZ2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zNiI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YXR0cm9uKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zMyI+U3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YXR0cnNldCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMzQiPlNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndia2dkZ2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83MiI+R2V0X0JhY2tncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YmtnZHNldCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNzAiPlNldF9CYWNrZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2JrZ2QoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzcxIj5DaGFuZ2VfQmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndib3JkZXIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzI1Ij5Cb3JkZXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2NoZ2F0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zOCI+Q2hhbmdlX0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53Y2xlYXIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzY3Ij5DbGVhcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2NscnRvYm90KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82OCI+Q2xlYXJfVG9fRW5kX09mX1NjcmVlbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2NscnRvZW9sKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82OSI+Q2xlYXJfVG9fRW5kX09mX0xpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndjb2xvcl9zZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzM3Ij5TZXRfQ29sb3I8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53ZGVsY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzk1Ij5EZWxldGVfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53ZGVsZXRlbG4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzgzIj5EZWxldGVfTGluZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2VjaG9jaGFyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMCI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG88L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndlbmNsb3NlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI0FGVV80Ij5FbmNsb3NlZF9Jbl9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndlcmFzZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNjYiPkVyYXNlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53Z2V0Y2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzI5Ij5HZXRfS2V5c3Ryb2tlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53Z2V0bnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTA3Ij5HZXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2hsaW5lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8yNyI+SG9yaXpvbnRhbF9MaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndpbmNobnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTA1Ij5QZWVrPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2luY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzk3Ij5QZWVrPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2lubnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTAzIj5QZWVrPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53aW5zY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzk5Ij5JbnNlcnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zY2guM3guaHRtbCI+Y3Vyc19pbnNjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndpbnNkZWxsbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfODIiPkluc2VydF9EZWxldGVfTGluZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndpbnNlcnRsbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfODQiPkluc2VydF9MaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53aW5zbnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTAxIj5JbnNlcnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d21vdmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzciPk1vdmVfQ3Vyc29yPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdmUuM3guaHRtbCI+Y3Vyc19tb3ZlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d25vdXRyZWZyZXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82MyI+UmVmcmVzaF9XaXRob3V0X1VwZGF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndyZWRyYXdsbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNjUiPlJlZHJhdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndyZWZyZXNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82MiI+UmVmcmVzaDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndyZXNpemUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE2NCI+UmVzaXplPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi93cmVzaXplLjN4Lmh0bWwiPndyZXNpemUuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53c2NybCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTQiPlNjcm9sbDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53c2V0c2NycmVnKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82MCI+U2V0X1Njcm9sbF9SZWdpb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53c3luY2Rvd24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE5Ij5TeW5jaHJvbml6ZV9Eb3dud2FyZHM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d3N5bmN1cCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTgiPlN5bmNocm9uaXplX1Vwd2FyZHM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d3RpbWVvdXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzUxIj5TZXRfVGltZW91dF9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnd0b3VjaGxuKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83NiI+Q2hhbmdlX0xpbmVfU3RhdHVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53dmxpbmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzI4Ij5WZXJ0aWNhbF9MaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlci4zeDwvQT48L1REPjwvVFI+Cis8L1RBQkxFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyMmZmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bQpAQCAtMCwwICsxLDEyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4ICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxXzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNvbWUgaGVscGVyczwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzI3Ij5DcDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgY2hhcnNfcHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZpbGwgdGhlIHN0cmluZyB3aXRoIHRoZSBjaGFyYWN0ZXJzIHJlZmVyZW5jZWQgYnkgdGhlPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGNoYXJzX3B0ci48L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF83Ij5MZW48L0E+PC9GT05UPiA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzI3Ij5DcDwvQT4gLz0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81MF83Ij5MZW48L0E+IDo9IE5hdHVyYWwgKFN0cmxlbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8yNyI+Q3A8L0E+KSk7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPidMZW5ndGggJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNTBfNyI+TGVuPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmRlY2xhcmU8L2I+CisgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzEzIj5TPC9BPjwvRk9OVD4gOiBTdHJpbmcgKDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzUwXzciPkxlbjwvQT4pOworICAgICAgICAgPGI+YmVnaW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNThfMTMiPlM8L0E+IDo9IFZhbHVlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzI3Ij5DcDwvQT4pOworICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPidGaXJzdCAuLiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPidGaXJzdCArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81MF83Ij5MZW48L0E+IC0gMSkpIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81OF8xMyI+UzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81OF8xMyI+UzwvQT4nPGI+UmFuZ2U8L2I+KTsKKyAgICAgICAgIDxiPmVuZDwvYj47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzUwXzciPkxlbjwvQT4gOj0gMDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworCisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzUwXzciPkxlbjwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+J0xlbmd0aCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPiAoKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTdfMjciPlN0cjwvQT4nRmlyc3QgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNTBfNyI+TGVuPC9BPikgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPidMYXN0KSA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyAnICcpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8yNiI+Q3A8L0E+PC9GT05UPiA6IGNoYXJzX3B0cikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NV83Ij5MZW48L0E+PC9GT05UPiA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzI2Ij5DcDwvQT4gLz0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl83NV83Ij5MZW48L0E+IDo9IE5hdHVyYWwgKFN0cmxlbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8yNiI+Q3A8L0E+KSk7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzc1XzciPkxlbjwvQT4gPSAwIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yZXR1cm48L2I+ICIiOworICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgIDxiPmRlY2xhcmU8L2I+CisgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzXzE2Ij5TPC9BPjwvRk9OVD4gOiBTdHJpbmcgKDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzc1XzciPkxlbjwvQT4pOworICAgICAgICAgICAgPGI+YmVnaW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMjYiPkNwPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzgzXzE2Ij5TPC9BPik7CisgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl84M18xNiI+UzwvQT47CisgICAgICAgICAgICA8Yj5lbmQ8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiAiIjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8yOSI+Q29kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmNhc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8yOSI+Q29kZTwvQT4gPGI+aXM8L2I+CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gICAgICAgICAgICAgID0mZ3Q7IDxiPm51bGw8L2I+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgxXzQiPkVfU3lzdGVtX0Vycm9yPC9BPiAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzg5XzQiPkV0aV9TeXN0ZW1fRXJyb3I8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgyXzQiPkVfQmFkX0FyZ3VtZW50PC9BPiAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzkwXzQiPkV0aV9CYWRfQXJndW1lbnQ8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgzXzQiPkVfUG9zdGVkPC9BPiAgICAgICAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzkxXzQiPkV0aV9Qb3N0ZWQ8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzg0XzQiPkVfQ29ubmVjdGVkPC9BPiAgICAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzkyXzQiPkV0aV9Db25uZWN0ZWQ8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzg1XzQiPkVfQmFkX1N0YXRlPC9BPiAgICAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzkzXzQiPkV0aV9CYWRfU3RhdGU8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzg2XzQiPkVfTm9fUm9vbTwvQT4gICAgICAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzk0XzQiPkV0aV9Ob19Sb29tPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84N180Ij5FX05vdF9Qb3N0ZWQ8L0E+ICAgICAgPSZndDsgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM5NV80Ij5FdGlfTm90X1Bvc3RlZDwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODhfNCI+RV9Vbmtub3duX0NvbW1hbmQ8L0E+ID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTZfNCI+RXRpX1Vua25vd25fQ29tbWFuZDwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODlfNCI+RV9Ob19NYXRjaDwvQT4gICAgICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTdfNCI+RXRpX05vX01hdGNoPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85MF80Ij5FX05vdF9TZWxlY3RhYmxlPC9BPiAgPSZndDsgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM5OF80Ij5FdGlfTm90X1NlbGVjdGFibGU8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkxXzQiPkVfTm90X0Nvbm5lY3RlZDwvQT4gICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzk5XzQiPkV0aV9Ob3RfQ29ubmVjdGVkPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Ml80Ij5FX1JlcXVlc3RfRGVuaWVkPC9BPiAgPSZndDsgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQwMF80Ij5FdGlfUmVxdWVzdF9EZW5pZWQ8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkzXzQiPkVfSW52YWxpZF9GaWVsZDwvQT4gICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDAxXzQiPkV0aV9JbnZhbGlkX0ZpZWxkPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85NF80Ij5FX0N1cnJlbnQ8L0E+ICAgICAgICAgPSZndDsgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQwMl80Ij5FdGlfQ3VycmVudDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmNhc2U8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTYwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0KQEAgLTAsMCArMSwxMzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXggICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE2IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGN1cnNlcyBiaW5kaW5nLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQuIFBsZWFzZSBkb24ndCBjaGFuZ2UgaXQgbWFudWFsbHkhPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJ1biB0aGUgZ2VuZXJhdG9yIGluc3RlYWQuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbTsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzIwXzEwIj5VbmNoZWNrZWRfQ29udmVyc2lvbjwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNDFfNDAiPkF1eDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT4pOworCisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludDsKKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xMiI+Q19JbnQ8L0E+PC9GT05UPiAgICAgIDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzEyIj5DX1Nob3J0PC9BPjwvRk9OVD4gICAgPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnNob3J0OworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18xMiI+Q19Mb25nX0ludDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5sb25nOworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8xMiI+Q19TaXplX1Q8L0E+PC9GT05UPiAgIDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5zaXplX3Q7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzEyIj5DX1VJbnQ8L0E+PC9GT05UPiAgICAgPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnVuc2lnbmVkOworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF8xMiI+Q19VTG9uZzwvQT48L0ZPTlQ+ICAgIDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy51bnNpZ25lZF9sb25nOworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8xMiI+Q19DaGFyX1B0cjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzLmNoYXJzX3B0cjsKKyAgIDxiPnR5cGU8L2I+ICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMTIiPkNfVm9pZF9QdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTeXN0ZW0uQWRkcmVzczsKKyAgIDxiPnR5cGU8L2I+ICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjwvRk9OVD4gICA8Yj5pczwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjBfMTIiPkNfVUxvbmc8L0E+OworICAgPGI+dHlwZTwvYj4gICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82MF8xMiI+Q19VTG9uZzwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyBob3cgdGhvc2UgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIG5jdXJzZXMuIEkgc2VlIHRoZW0gYWxzbzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBleGFjdGx5IGxpa2UgdGhpcyBpbiBhbGwgRVRJIGltcGxlbWVudGF0aW9ucyBJIGV2ZXIgdGVzdGVkLiBTbyBpdDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBjb3VsZCBiZSB0aGF0IHRoaXMgaXMgcXVpdGUgZ2VuZXJhbCwgYnV0IHBsZWFzZSBjaGVjayB3aXRoIHlvdXIgY3Vyc2VzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIGNyaXRpY2FsLCBiZWNhdXNlIGN1cnNlcyBzb21ldGltZSBtaXhlcyBib29sZWFuIHJldHVybnMgd2l0aDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV80Ij5DdXJzZXNfT2s8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSAwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSAtMTsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF80Ij5DdXJzZXNfVHJ1ZTwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSAxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSAwOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV0aV9FcnJvcjogdHlwZSBmb3IgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIG1lbnUgYW5kIGZvcm0gc3Vic3lzdGVtPC9FTT48L0ZPTlQ+CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gPGI+cmFuZ2U8L2I+IC0xNCAuLiAwOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwXzQiPkVfT2s8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MV80Ij5FX1N5c3RlbV9FcnJvcjwvQT48L0ZPTlQ+ICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyXzQiPkVfQmFkX0FyZ3VtZW50PC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfNCI+RV9Qb3N0ZWQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IC0zOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF80Ij5FX0Nvbm5lY3RlZDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTQ7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1XzQiPkVfQmFkX1N0YXRlPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODZfNCI+RV9Ob19Sb29tPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IC02OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N180Ij5FX05vdF9Qb3N0ZWQ8L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4XzQiPkVfVW5rbm93bl9Db21tYW5kPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtODsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfNCI+RV9Ob19NYXRjaDwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IC05OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF80Ij5FX05vdF9TZWxlY3RhYmxlPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTEwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MV80Ij5FX05vdF9Db25uZWN0ZWQ8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTExOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml80Ij5FX1JlcXVlc3RfRGVuaWVkPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTEyOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M180Ij5FX0ludmFsaWRfRmllbGQ8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTEzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF80Ij5FX0N1cnJlbnQ8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTE0OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl85NF8xNCI+RXRpX0V4Y2VwdGlvbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfOTRfMjkiPkNvZGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIERpc3BhdGNoIHRoZSBlcnJvciBjb2RlIGFuZCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTb21lIGhlbHBlcnM8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiBDaHR5cGVfVG9fQXR0ckNoYXIgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzIwXzEwIj5VbmNoZWNrZWRfQ29udmVyc2lvbjwvQT4gKDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8xN185Ij5Tb3VyY2U8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzE4XzkiPlRhcmdldDwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Yj5mdW5jdGlvbjwvYj4gQXR0ckNoYXJfVG9fQ2h0eXBlIDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8yMF8xMCI+VW5jaGVja2VkX0NvbnZlcnNpb248L0E+ICg8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMTdfOSI+U291cmNlPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzE4XzkiPlRhcmdldDwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gQXR0ckNoYXJfVG9fQXR0clR5cGUgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzIwXzEwIj5VbmNoZWNrZWRfQ29udmVyc2lvbjwvQT4gKDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8xN185Ij5Tb3VyY2U8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMThfOSI+VGFyZ2V0PC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IEF0dHJUeXBlX1RvX0F0dHJDaGFyIDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8yMF8xMCI+VW5jaGVja2VkX0NvbnZlcnNpb248L0E+ICg8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMTdfOSI+U291cmNlPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzE4XzkiPlRhcmdldDwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl80NF8xNCI+RmlsbF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl80NF8yNyI+Q3A8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIGNoYXJzX3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl80NV8yNyI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZpbGwgdGhlIFN0ciBwYXJhbWV0ZXIgd2l0aCB0aGUgc3RyaW5nIGRlbm90ZWQgYnkgdGhlIGNoYXJzX3B0cjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBDLVN0eWxlIHN0cmluZy48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNzNfMTMiPkZpbGxfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNzNfMjYiPkNwPC9BPjwvRk9OVD4gOiBjaGFyc19wdHIpIDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1lIGJ1dCBhcyBmdW5jdGlvbi48L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiNTBhOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtCkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS45IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MjUgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzU4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80MV81MyI+QWxwaGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80OV8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDlfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNTBfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ0XzkiPkFscGhhX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV83Ij5DX0FscGhhX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzQ5XzciPkNfQWxwaGFfRmllbGRfVHlwZTwvQT4sICJUWVBFX0FMUEhBIik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTJfMTYiPkY8L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80OV8zMCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTJfMTYiPkNmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzQ5XzciPkNfQWxwaGFfRmllbGRfVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzUyXzE2Ij5BcmcxPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl81Ml8xNiI+U2V0X0ZsZF9UeXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTRfMzAiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzUwXzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ2XzkiPk1pbmltdW1fRmllbGRfV2lkdGg8L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzU3XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ5XzMwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl81MF8zMCI+VHlwPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ5XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80MV81MyI+QWxwaGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExYTI0YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxXzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl80NF81OCI+QWxwaGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQxXzUzIj5BbHBoYTwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzkiPkFscGhhX0ZpZWxkPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4KKyAgICAgPGI+d2l0aDwvYj4gPGI+cmVjb3JkPC9iPgorICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzkiPk1pbmltdW1fRmllbGRfV2lkdGg8L0E+PC9GT05UPiA6IE5hdHVyYWwgOj0gMDsKKyAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzQ2XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl80Nl8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl80N18zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDRfOSI+QWxwaGFfRmllbGQ8L0E+KTsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80MV81MyI+QWxwaGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDlmZjBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtCkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYyAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjkgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo1MDoxNSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl80MV81MyI+QWxwaGFOdW1lcmljPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzUwXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNTBfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNDVfOSI+QWxwaGFOdW1lcmljX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV83Ij5DX0FscGhhTnVtZXJpY19GaWVsZF9UeXBlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNDlfNyI+Q19BbHBoYU51bWVyaWNfRmllbGRfVHlwZTwvQT4sICJUWVBFX0FMTlVNIik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzUyXzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzUwXzMwIj5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTJfMTYiPkNmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl80OV83Ij5DX0FscGhhTnVtZXJpY19GaWVsZF9UeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzUyXzE2Ij5BcmcxPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzU3XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTRfMzAiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl81MV8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNDdfOSI+TWluaW11bV9GaWVsZF9XaWR0aDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl81N183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzE0Ij5XcmFwX0J1aWx0aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNTBfMzAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl81MV8zMCI+VHlwPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl81MF8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzQxXzUzIj5BbHBoYU51bWVyaWM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTZlZWYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtCkBAIC0wLDAgKzEsNjAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYyAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDFfNTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl80NF81OCI+QWxwaGFOdW1lcmljPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZQorICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNDFfNTMiPkFscGhhTnVtZXJpYzwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzkiPkFscGhhTnVtZXJpY19GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+CisgICAgIDxiPndpdGg8L2I+IDxiPnJlY29yZDwvYj4KKyAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N185Ij5NaW5pbXVtX0ZpZWxkX1dpZHRoPC9BPjwvRk9OVD4gOiBOYXR1cmFsIDo9IDA7CisgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNDZfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl80Nl8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNDdfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl80NV85Ij5BbHBoYU51bWVyaWNfRmllbGQ8L0E+KTsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNDFfNTMiPkFscGhhTnVtZXJpYzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2MzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0KQEAgLTAsMCArMSw4NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbi5BZGEgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7IDxiPnVzZTwvYj4gQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDNfNTMiPkVudW1lcmF0aW9uPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzcwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDRfNjUiPkFkYTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ4XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ4XzIxIj5TZXQ8L0E+PC9GT05UPiAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTBfOSI+VHlwZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzUwXzQ2Ij5NaXhlZF9DYXNlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ5XzIxIj5DYXNlX1NlbnNpdGl2ZTwvQT48L0ZPTlQ+IDogQm9vbGVhbiAgOj0gRmFsc2U7CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl81MF8yMSI+TXVzdF9CZV9VbmlxdWU8L0E+PC9GT05UPiA6IEJvb2xlYW4gIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciPkk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU1XzkiPkVudW1lcmF0aW9uX0luZm88L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4nTGFzdCkgLSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4nRmlyc3QpICsgMSk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciPko8L0E+PC9GT05UPiA6IFBvc2l0aXZlIDo9IDE7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81OF8xMCI+Q2FzZV9TZW5zaXRpdmU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80OV8yMSI+Q2FzZV9TZW5zaXRpdmU8L0E+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU5XzEwIj5NYXRjaF9NdXN0X0JlX1VuaXF1ZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzUwXzIxIj5NdXN0X0JlX1VuaXF1ZTwvQT47CisKKyAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18xMSI+RTwvQT48L0ZPTlQ+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4nPGI+UmFuZ2U8L2I+IDxiPmxvb3A8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTFfNyI+STwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTdfMTAiPk5hbWVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUyXzciPko8L0E+KSA6PSA8Yj5uZXc8L2I+IFN0cmluZycoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQyXzkiPlQ8L0E+J0ltYWdlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTdfMTEiPkU8L0E+KSk7CisgICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBJbWFnZSBhdHRyaWJ1dGUgZGVmYXVsdHMgdG8gdXBwZXIgY2FzZSwgc28gd2UgaGF2ZSB0byBoYW5kbGU8L0VNPjwvRk9OVD4KKyAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgb25seSB0aGUgb3RoZXIgb25lcy4uLjwvRU0+PC9GT05UPgorICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80OF8yMSI+U2V0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81MF8zNCI+VXBwZXJfQ2FzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4pLjxiPmFsbDwvYj4gOj0gVG9fTG93ZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4pLjxiPmFsbDwvYj4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80OF8yMSI+U2V0PC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzUwXzQ2Ij5NaXhlZF9DYXNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPikoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPikuPGI+YWxsPC9iPidGaXJzdCkgOj0KKyAgICAgICAgICAgICAgICAgVG9fVXBwZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4pKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4pLjxiPmFsbDwvYj4nRmlyc3QpKTsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUyXzciPko8L0E+ICsgMTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMTMiPkNyZWF0ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPiwgVHJ1ZSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80OF8xMyI+Q3JlYXRlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl81M18xMyI+VmFsdWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzUzXzIwIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTRfMjAiPkJ1ZjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPidGaXJzdCkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPidWYWx1ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY4XzEzIj5HZXRfQnVmZmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzUzXzIwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTRfMjAiPkJ1ZjwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzUzXzEzIj5WYWx1ZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80NF82NSI+QWRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyYjRkNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bQpAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ0XzY1Ij5UPC9BPjwvRk9OVD4gPGI+aXM8L2I+ICgmbHQ7Jmd0Oyk7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDNfNTMiPkVudW1lcmF0aW9uPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzY1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNDRfNzAiPkFkYTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUKKyAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDNfNTMiPkVudW1lcmF0aW9uPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDRfNjUiPkFkYTwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzQ2XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzQ2XzIxIj5TZXQ8L0E+PC9GT05UPiAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTBfOSI+VHlwZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzUwXzQ2Ij5NaXhlZF9DYXNlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzQ3XzIxIj5DYXNlX1NlbnNpdGl2ZTwvQT48L0ZPTlQ+IDogQm9vbGVhbiAgOj0gRmFsc2U7CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl80OF8yMSI+TXVzdF9CZV9VbmlxdWU8L0E+PC9GT05UPiA6IEJvb2xlYW4gIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl83NF8xMyI+VmFsdWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzc0XzIwIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNzVfMjAiPkJ1ZjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPidGaXJzdCkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRyYW5zbGF0ZSB0aGUgY29udGVudCBvZiB0aGUgZmllbGRzIGJ1ZmZlciAtIGluZGljYXRlZCBieSB0aGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYnVmZmVyIG51bWJlciAtIGludG8gYW4gZW51bWVyYXRpb24gdmFsdWUuIElmIHRoZSBidWZmZXIgaXMgZW1wdHk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgb3IgdGhlIGNvbnRlbnQgaXMgaW52YWxpZCwgYSBDb25zdHJhaW50X0Vycm9yIGlzIHJhaXNlcy48L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzQzXzUzIj5FbnVtZXJhdGlvbjwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ0XzY1Ij5BZGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4YWEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtCkBAIC0wLDAgKzEsMTI1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24gICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuNyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzU4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMjEiPkluZm88L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTVfOSI+RW51bWVyYXRpb25fSW5mbzwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY1XzIxIj5BdXRvX1JlbGVhc2VfTmFtZXM8L0E+PC9GT05UPiA6IEJvb2xlYW4gOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnByb2NlZHVyZTwvYj4gUmVsZWFzZV9TdHJpbmcgPGI+aXM8L2I+CisgICAgICAgIDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24gKFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80N185Ij5TdHJpbmdfQWNjZXNzPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzciPkU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+TDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IHNpemVfdCA6PSAxICsgc2l6ZV90ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8yMSI+SW5mbzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTVfMjciPkM8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyI+UzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDdfOSI+U3RyaW5nX0FjY2VzczwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzU1XzciPkU8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzkzXzEwIj5DYXNlX1NlbnNpdGl2ZTwvQT4gICAgICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMjEiPkluZm88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU4XzEwIj5DYXNlX1NlbnNpdGl2ZTwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5FPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl85NF8xMCI+TWF0Y2hfTXVzdF9CZV9VbmlxdWU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzIxIj5JbmZvPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81OV8xMCI+TWF0Y2hfTXVzdF9CZV9VbmlxdWU8L0E+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTVfNyI+RTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTVfMTAiPkFycjwvQT4gOj0gPGI+bmV3PC9iPiBjaGFyc19wdHJfYXJyYXkgKHNpemVfdCAoMSkgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTZfNyI+TDwvQT4pOworICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzExIj5JPC9BPjwvRk9OVD4gPGI+aW48L2I+IDEgLi4gUG9zaXRpdmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzU2XzciPkw8L0E+IC0gMSkgPGI+bG9vcDwvYj4KKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8yMSI+SW5mbzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTdfMTAiPk5hbWVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNjJfMTEiPkk8L0E+KSA9IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTVfNyI+RTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTVfNyI+QXJyPC9BPiAoc2l6ZV90ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl82Ml8xMSI+STwvQT4pKSA6PSBOZXdfU3RyaW5nICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8yMSI+SW5mbzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTdfMTAiPk5hbWVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNjJfMTEiPkk8L0E+KS48Yj5hbGw8L2I+KTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NV8yMSI+QXV0b19SZWxlYXNlX05hbWVzPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTdfNyI+UzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMjEiPkluZm88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzYyXzExIj5JPC9BPik7CisgICAgICAgICAgICBSZWxlYXNlX1N0cmluZyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTdfNyI+UzwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTVfNyI+RTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTVfNyI+QXJyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTZfNyI+TDwvQT4pIDo9IE51bGxfUHRyOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5FPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMTMiPkNyZWF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNzdfMTQiPlJlbGVhc2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNzdfMjMiPkVudW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF83Ij5JPC9BPjwvRk9OVD4gOiBzaXplX3QgOj0gMDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfNyI+UDwvQT48L0ZPTlQ+IDogY2hhcnNfcHRyOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5sb29wPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNzlfNyI+UDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNzdfMjMiPkVudW08L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk1XzEwIj5BcnI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OF83Ij5JPC9BPik7CisgICAgICAgICA8Yj5leGl0PC9iPiA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OV83Ij5QPC9BPiA9IE51bGxfUHRyOworICAgICAgICAgRnJlZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNzlfNyI+UDwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNzdfMjMiPkVudW08L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk1XzEwIj5BcnI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OF83Ij5JPC9BPikgOj0gTnVsbF9QdHI7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OF83Ij5JPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OF83Ij5JPC9BPiArIDE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNzdfMjMiPkVudW08L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk1XzEwIj5BcnI8L0E+IDo9IDxiPm51bGw8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl83N18xNCI+UmVsZWFzZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODRfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg0XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg1XzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTRfNyI+Q19FbnVtX1R5cGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk0XzciPkNfRW51bV9UeXBlPC9BPiwgIlRZUEVfRU5VTSIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85N18xNiI+U2V0X0ZsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk3XzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODRfMzAiPkZsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk3XzE2Ij5DZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl85NF83Ij5DX0VudW1fVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk3XzE2Ij5BcmcxPC9BPjwvRk9OVD4gOiBjaGFyc19wdHJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl85N18xNiI+QXJnMjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk3XzE2Ij5BcmczPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDRfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NV8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl85NV8xMCI+QXJyPC9BPiA9IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfMTA0XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTdfMTYiPlNldF9GbGRfVHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk5XzMwIj5BcmcxPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NV8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl85NV8xMCI+QXJyPC9BPi48Yj5hbGw8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfMTAwXzMwIj5BcmcyPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODVfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTNfMTAiPkNhc2VfU2Vuc2l0aXZlPC9BPikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfMTAxXzMwIj5BcmczPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+IChCb29sZWFuJ1BvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg1XzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk0XzEwIj5NYXRjaF9NdXN0X0JlX1VuaXF1ZTwvQT4pKSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfMTA0XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl8xMDRfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODRfMzAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg1XzMwIj5UeXA8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDlfMTMiPkNfQ2hvaWNlX1JvdXRlcjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NF8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDNfNTMiPkVudW1lcmF0aW9uPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMjJiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bQpAQCAtMCwwICsxLDEwNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbiAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDNfNTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzQ2XzU4Ij5FbnVtZXJhdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUKKyAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDNfNTMiPkVudW1lcmF0aW9uPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfOSI+U3RyaW5nX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IFN0cmluZzsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUeXBlX1NldCBpcyB1c2VkIGJ5IHRoZSBjaGlsZCBwYWNrYWdlIEFkYTwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF85Ij5UeXBlX1NldDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8yMiI+TG93ZXJfQ2FzZTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzM0Ij5VcHBlcl9DYXNlPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNDYiPk1peGVkX0Nhc2U8L0E+PC9GT05UPik7CisKKyAgIDxiPnR5cGU8L2I+IEVudW1fQXJyYXkgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoUG9zaXRpdmUgPGI+cmFuZ2U8L2I+ICZsdDsmZ3Q7KQorICAgICA8Yj5vZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDdfOSI+U3RyaW5nX0FjY2VzczwvQT47CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfOSI+RW51bWVyYXRpb25fSW5mbzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81NV85Ij5DPC9BPjwvRk9OVD4gOiBQb3NpdGl2ZSkgPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzEwIj5OYW1lczwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogRW51bV9BcnJheSAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81NV8yNyI+QzwvQT4pOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8xMCI+Q2FzZV9TZW5zaXRpdmU8L0E+PC9GT05UPiAgICAgICA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzEwIj5NYXRjaF9NdXN0X0JlX1VuaXF1ZTwvQT48L0ZPTlQ+IDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+IDxiPndpdGg8L2I+IDxiPnByaXZhdGU8L2I+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNDhfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl80OF8yMSI+SW5mbzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTVfOSI+RW51bWVyYXRpb25fSW5mbzwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzQ5XzIxIj5BdXRvX1JlbGVhc2VfTmFtZXM8L0E+PC9GT05UPiA6IEJvb2xlYW4gOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBNYWtlIGFuIGZpZWxkdHlwZSBmcm9tIHRoZSBpbmZvLiBFbnVtZXJhdGlvbnMgYXJlIHNwZWNpYWwsIGJlY2F1c2U8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhleSBub3JtYWxseSBkb24ndCBjb3B5IHRoZSBlbnVtIHZhbHVlcyBpbnRvIGEgcHJpdmF0ZSBzdG9yZSwgc288L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgd2UgaGF2ZSB0byBjYXJlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGluZm8gd2UgcHJvdmlkZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIEF1dG9fUmVsZWFzZV9OYW1lcyBmbGFnIG1heSBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgcmVsZWFzZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIHN0cmluZ3MgaW4gdGhlIE5hbWVzIGFycmF5IG9mIHRoZSBFbnVtZXJhdGlvbl9JbmZvLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gTWFrZV9FbnVtZXJhdGlvbl9UeXBlICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzM2Ij5JbmZvPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81NV85Ij5FbnVtZXJhdGlvbl9JbmZvPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF8zNiI+QXV0b19SZWxlYXNlX05hbWVzPC9BPjwvRk9OVD4gOiBCb29sZWFuIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8xMyI+Q3JlYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83Nl8xNCI+UmVsZWFzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83Nl8yMyI+RW51bTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQnV0IHdlIG1heSB3YW50IHRvIHJlbGVhc2UgdGhlIGZpZWxkIHRvIHJlbGVhc2UgdGhlIG1lbW9yeSBhbGxvY2F0ZWQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYnkgaXQgaW50ZXJuYWxseS4gQWZ0ZXIgdGhhdCB0aGUgRW51bWVyYXRpb24gZmllbGQgaXMgbm8gbG9uZ2VyIHVzYWJsZS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgbmV4dCB0eXBlIGRlZmludGlvbnMgYXJlIGFsbCBuY3Vyc2VzIGV4dGVuc2lvbnMuIFRoZXkgYXJlIHR5cGljYWxseTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBub3QgYXZhaWxhYmxlIGluIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTFfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzkxXzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzkyXzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfOSI+Q1BBX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3MuY2hhcnNfcHRyX2FycmF5OworCisgICA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4gPGI+d2l0aDwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTNfMTAiPkNhc2VfU2Vuc2l0aXZlPC9BPjwvRk9OVD4gICAgICAgOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF8xMCI+TWF0Y2hfTXVzdF9CZV9VbmlxdWU8L0E+PC9GT05UPiA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzEwIj5BcnI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODlfOSI+Q1BBX0FjY2VzczwvQT4gOj0gPGI+bnVsbDwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhZTE0OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS45IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MDYgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzU4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl80MV81MyI+SW50RmllbGQ8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl81MV8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTFfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQ0XzkiPkludGVnZXJfRmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzciPkNfSW50ZWdlcl9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl80OV83Ij5DX0ludGVnZXJfRmllbGRfVHlwZTwvQT4sICJUWVBFX0lOVEVHRVIiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMTYiPlNldF9GbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81Ml8xNiI+RjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81Ml8xNiI+Q2Z0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNDlfNyI+Q19JbnRlZ2VyX0ZpZWxkX1R5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81Ml8xNiI+QXJnMTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTJfMTYiPkFyZzI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81N18xMiI+Q19Mb25nX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzUyXzE2Ij5BcmczPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTdfMTIiPkNfTG9uZ19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTlfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81Ml8xNiI+U2V0X0ZsZF9UeXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTRfMzAiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQ2XzEwIj5QcmVjaXNpb248L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzU1XzMwIj5BcmcyPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTdfMTIiPkNfTG9uZ19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl80N18xMCI+TG93ZXJfTGltaXQ8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzU2XzMwIj5BcmczPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTdfMTIiPkNfTG9uZ19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl80OF8xMCI+VXBwZXJfTGltaXQ8L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzU5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUxXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl80MV81MyI+SW50RmllbGQ8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiOGExNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxXzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl80NF81OCI+SW50RmllbGQ8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQxXzUzIj5JbnRGaWVsZDwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzkiPkludGVnZXJfRmllbGQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPiA8Yj53aXRoPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xMCI+UHJlY2lzaW9uPC9BPjwvRk9OVD4gICA6IE5hdHVyYWw7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzEwIj5Mb3dlcl9MaW1pdDwvQT48L0ZPTlQ+IDogSW50ZWdlcjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMTAiPlVwcGVyX0xpbWl0PC9BPjwvRk9OVD4gOiBJbnRlZ2VyOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzQ2XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl80Nl8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl80N18zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNDRfOSI+SW50ZWdlcl9GaWVsZDwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQxXzUzIj5JbnRGaWVsZDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODQ2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0KQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuOSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjQ3IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF81OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQxXzUzIj5JUFY0X0FkZHJlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDdfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80N18zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDhfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80NV85Ij5JbnRlcm5ldF9WNF9BZGRyZXNzX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV83Ij5DX0lQVjRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzQ5XzciPkNfSVBWNF9GaWVsZF9UeXBlPC9BPiwgIlRZUEVfSVBWNCIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8xNiI+U2V0X0ZsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtI3JlZl81Ml8xNiI+RjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80N18zMCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzUyXzE2Ij5DZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNDlfNyI+Q19JUFY0X0ZpZWxkX1R5cGU8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzU3XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtI3JlZl81N183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzU3XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80N18zMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ4XzMwIj5UeXA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ3XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDFfNTMiPklQVjRfQWRkcmVzczwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmFlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0KQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MV81MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzQ0XzU4Ij5JUFY0X0FkZHJlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlCisgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80MV81MyI+SVBWNF9BZGRyZXNzPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfOSI+SW50ZXJuZXRfVjRfQWRkcmVzc19GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+IDxiPndpdGg8L2I+IDxiPm51bGw8L2I+IDxiPnJlY29yZDwvYj47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzQ2XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNDZfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzQ3XzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDVfOSI+SW50ZXJuZXRfVjRfQWRkcmVzc19GaWVsZDwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80MV81MyI+SVBWNF9BZGRyZXNzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTU2MzhmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bQpAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYyAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6NTcgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNDFfNTMiPk51bWVyaWM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNDRfOSI+TnVtZXJpY19GaWVsZDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTIiPkRvdWJsZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmRvdWJsZTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83Ij5DX051bWVyaWNfRmllbGRfVHlwZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81Ml83Ij5DX051bWVyaWNfRmllbGRfVHlwZTwvQT4sICJUWVBFX05VTUVSSUMiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMTYiPlNldF9GbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzU1XzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81MV8zMCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81NV8xNiI+Q2Z0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81Ml83Ij5DX051bWVyaWNfRmllbGRfVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTVfMTYiPkFyZzE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTVfMTYiPkFyZzI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTBfMTIiPkRvdWJsZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTVfMTYiPkFyZzM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTBfMTIiPkRvdWJsZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzYyXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81NV8xNiI+U2V0X0ZsZF9UeXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81N18zMCI+QXJnMTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzQ2XzEwIj5QcmVjaXNpb248L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNThfMzAiPkFyZzI8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTBfMTIiPkRvdWJsZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80N18xMCI+TG93ZXJfTGltaXQ8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTlfMzAiPkFyZzM8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTBfMTIiPkRvdWJsZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80OF8xMCI+VXBwZXJfTGltaXQ8L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl82Ml83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl82Ml83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzE0Ij5XcmFwX0J1aWx0aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81MV8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80MV81MyI+TnVtZXJpYzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2MTA3MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0KQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxXzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzQ1XzU4Ij5OdW1lcmljPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzQxXzUzIj5OdW1lcmljPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSI+TnVtZXJpY19GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+IDxiPndpdGg8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEwIj5QcmVjaXNpb248L0E+PC9GT05UPiAgIDogTmF0dXJhbDsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTAiPkxvd2VyX0xpbWl0PC9BPjwvRk9OVD4gOiBGbG9hdDsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMTAiPlVwcGVyX0xpbWl0PC9BPjwvRk9OVD4gOiBGbG9hdDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzQ3XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzQ3XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNDhfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNDRfOSI+TnVtZXJpY19GaWVsZDwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNDFfNTMiPk51bWVyaWM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI2OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtCkBAIC0wLDAgKzEsNzcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cCAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjggQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl80MV81MyI+UmVnRXhwPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUxXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTFfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDZfOSI+UmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xMiI+Q2hhcl9QdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmNoYXI7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyI+Q19SZWdleHBfRmllbGRfVHlwZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzUxXzciPkNfUmVnZXhwX0ZpZWxkX1R5cGU8L0E+LCAiVFlQRV9SRUdFWFAiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMTYiPlNldF9GdHlwPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81NF8xNiI+RjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl81MV8zMCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTRfMTYiPkNmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81MV83Ij5DX1JlZ2V4cF9GaWVsZF9UeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTRfMTYiPkFyZzE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl80OV8xMiI+Q2hhcl9QdHI8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0Z0eXAsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzciPlR4dDwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzQ4XzEwIj5SZWd1bGFyX0V4cHJlc3Npb248L0E+LjxiPmFsbDwvYj4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfNyI+TGVuPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzQ4XzEwIj5SZWd1bGFyX0V4cHJlc3Npb248L0E+LjxiPmFsbDwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81OV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNjBfNyI+TGVuPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNjFfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTRfMTYiPlNldF9GdHlwPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzU2XzI2Ij5BcmcxPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTlfNyI+VHh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzU5XzciPlR4dDwvQT4nRmlyc3QpJzxiPkFjY2VzczwvYj4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl82MV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzYxXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl81MV8zMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUxXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDFfNTMiPlJlZ0V4cDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NGNiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0KQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cCAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MV81MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzQ0XzU4Ij5SZWdFeHA8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl80MV81MyI+UmVnRXhwPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSI+U3RyaW5nX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IFN0cmluZzsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl85Ij5SZWd1bGFyX0V4cHJlc3Npb25fRmllbGQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPiA8Yj53aXRoPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMCI+UmVndWxhcl9FeHByZXNzaW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDRfOSI+U3RyaW5nX0FjY2VzczwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzQ2XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNDZfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzQ3XzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDZfOSI+UmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzQxXzUzIj5SZWdFeHA8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwZGUzYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtCkBAIC0wLDAgKzEsMTE2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlci5DaG9pY2UgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTUgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo0ODo1OCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ0XzU4Ij5DaG9pY2U8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPmZ1bmN0aW9uPC9iPiBUb19Bcmd1bWVudF9BY2Nlc3MgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgIChTeXN0ZW0uQWRkcmVzcywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT24pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODBfMTMiPkdlbmVyaWNfTmV4dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84MF8yNyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgxXzI3Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ4XzEyIj5DX0ludDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzciPlVkZjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzU3XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzczwvQT4gOj0KKyAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNTdfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzPC9BPgorICAgICAgICAoVG9fQXJndW1lbnRfQWNjZXNzICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84MV8yNyI+VXNyPC9BPikuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl81NV83Ij5SZXN1bHQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzYwXzEzIj5OZXh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODBfMjciPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzU2XzciPlVkZjwvQT4uPGI+YWxsPC9iPik7CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ4XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl81NV83Ij5SZXN1bHQ8L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgwXzEzIj5HZW5lcmljX05leHQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODdfMTMiPkdlbmVyaWNfUHJldjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84N18yNyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg4XzI3Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ4XzEyIj5DX0ludDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N183Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzciPlVkZjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzU3XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzczwvQT4gOj0KKyAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNTdfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzPC9BPgorICAgICAgICAoVG9fQXJndW1lbnRfQWNjZXNzICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84OF8yNyI+VXNyPC9BPikuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl82N183Ij5SZXN1bHQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzY3XzEzIj5QcmV2aW91czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg3XzI3Ij5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl82OF83Ij5VZGY8L0E+LjxiPmFsbDwvYj4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl80OF8xMiI+Q19JbnQ8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNjdfNyI+UmVzdWx0PC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84N18xMyI+R2VuZXJpY19QcmV2PC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNzhfMTMiPkNfR2VuZXJpY19DaG9pY2U8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzciPlQ8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDJfNCI+TV9HZW5lcmljX0Nob2ljZTwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODFfNyI+VDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjIyXzEzIj5OZXdfRmllbGR0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84MV8xMyI+R2VuZXJpY19GaWVsZF9DaGVjazwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OF8xMyI+R2VuZXJpY19DaGFyX0NoZWNrPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MV83Ij5UPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MF83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+U2V0X0ZpZWxkdHlwZV9Bcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MV83Ij5UPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTYyXzEzIj5NYWtlX0FyZzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzEzIj5Db3B5X0FyZzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0Ij5GcmVlX0FyZzwvQT4nPGI+QWNjZXNzPC9iPik7CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODBfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgwXzciPlJlczwvQT4pOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjM0XzEzIj5TZXRfRmllbGR0eXBlX0Nob2ljZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgxXzciPlQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84MF8xMyI+R2VuZXJpY19OZXh0PC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84N18xMyI+R2VuZXJpY19QcmV2PC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODBfNyI+UmVzPC9BPik7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQyXzQiPk1fR2VuZXJpY19DaG9pY2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgxXzciPlQ8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQyXzQiPk1fR2VuZXJpY19DaG9pY2U8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQyXzQiPk1fR2VuZXJpY19DaG9pY2U8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl83OF8xMyI+Q19HZW5lcmljX0Nob2ljZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ0XzUzIj5Vc2VyPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl80NF81OCI+Q2hvaWNlPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzlhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bQpAQCAtMCwwICsxLDEwMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6MjAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzQ1XzYzIj5DaG9pY2U8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlCisgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ0XzU4Ij5DaG9pY2U8L0E+KTsKKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMiI+Q19JbnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFic3RyYWN0PC9iPiA8Yj5uZXc8L2I+CisgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+IDxiPndpdGg8L2I+IDxiPm51bGw8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIHJvb3Qgb2YgdGhlIG1lY2hhbmlzbSB3ZSB1c2UgdG8gY3JlYXRlIGZpZWxkIHR5cGVzIGluPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFkYTk1IHRoYXQgYWxsb3cgdGhlIHByZXYvbmV4dCBtZWNoYW5pc20uIFlvdSBzaG91bGQgeW91ciBvd24gdHlwZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBkZXJpdmUgZnJvbSB0aGlzIG9uZSBhbmQgaW1wbGVtZW50IHRoZSBGaWVsZF9DaGVjaywgQ2hhcmFjdGVyX0NoZWNrPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5leHQgYW5kIFByZXZpb3VzIGZ1bmN0aW9ucyBmb3IgeW91ciBvd24gdHlwZS48L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N185Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+CisgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzUwXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlPC9BPidDbGFzczsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfMTMiPk5leHQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl82MF8xMyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzYwXzEzIj5UeXA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzUwXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICAgICA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhIG5leHQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdmFsdWUgaW50byB0aGUgZmllbGRzIGJ1ZmZlci48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjdfMTMiPlByZXZpb3VzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNjdfMTMiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl82N18xMyI+VHlwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl81MF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgICAgPGI+aXM8L2I+IDxiPmFic3RyYWN0PC9iPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSWYgVHJ1ZSBpcyByZXR1cm5lZCwgdGhlIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgYSBwcmV2aW91czwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB2YWx1ZSBpbnRvIHRoZSBmaWVsZHMgYnVmZmVyLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgUHJpdmF0ZSBQYXJ0LjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Yj5wcml2YXRlPC9iPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzc4XzEzIj5DX0dlbmVyaWNfQ2hvaWNlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzUyXzEzIj5HZW5lcmljX05leHQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNTJfMjciPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl81M18yNyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl80OF8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84MF8xMyI+R2VuZXJpY19OZXh0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgbmV4dCBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRlcy4gSXQgcm91dGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBjYWxsIHRvIHRoZSBOZXh0IGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzY0XzEzIj5HZW5lcmljX1ByZXY8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNjRfMjciPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl82NV8yNyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl80OF8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84N18xMyI+R2VuZXJpY19QcmV2PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgcHJldiBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRlcy4gSXQgcm91dGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBjYWxsIHRvIHRoZSBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHR5cGUuPC9FTT48L0ZPTlQ+CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ0XzUzIj5Vc2VyPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl80NF81OCI+Q2hvaWNlPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQzMDdjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bQpAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlciAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xNSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjI4IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV81OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80NF81MyI+VXNlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzBfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzBfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MV8zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80OF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzE2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzYxXzE2Ij5BbGxvY2F0ZV9Bcmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl82MV8zMCI+VDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80OF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZTwvQT4nQ2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT47CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzE2Ij5TZXRfRmxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81M18xNiI+RjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzBfMzAiPkZsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTNfMTYiPkNmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzlfMTMiPkNfR2VuZXJpY19UeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81M18xNiI+QXJnMTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzE2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUwXzE2Ij5BbGxvY2F0ZV9Bcmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81MF8zMCI+VDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80OF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZTwvQT4nQ2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4KKyAgICAgIDxiPmlzPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xMCI+UHRyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNjNfOSI+RmllbGRfVHlwZV9BY2Nlc3M8L0E+CisgICAgICAgICAgICAgOj0gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPidDbGFzcycoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81MF8zMCI+VDwvQT4pOworICAgICAgPGI+YmVnaW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjExXzkiPkFyZ3VtZW50PC9BPicoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4gPSZndDsgU3lzdGVtLk51bGxfQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNjRfMTAiPlB0cjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTBfMTYiPkFsbG9jYXRlX0FyZzwvQT47CisKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81OV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTNfMTYiPlNldF9GbGRfVHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTVfMzAiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTBfMTYiPkFsbG9jYXRlX0FyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzFfMzAiPlR5cDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzU5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzU5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzBfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjsKKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPmZ1bmN0aW9uPC9iPiBUb19Bcmd1bWVudF9BY2Nlc3MgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgIChTeXN0ZW0uQWRkcmVzcywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT24pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84MV8xMyI+R2VuZXJpY19GaWVsZF9DaGVjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzM0Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODJfMzQiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODdfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OF83Ij5VZGY8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzUzXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzczwvQT4gOj0KKyAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl81M185Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3M8L0E+IChUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODJfMzQiPlVzcjwvQT4pLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl84N183Ij5SZXN1bHQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNTZfMTMiPkZpZWxkX0NoZWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84MV8zNCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl84OF83Ij5VZGY8L0E+LjxiPmFsbDwvYj4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzg3XzciPlJlc3VsdDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84MV8xMyI+R2VuZXJpY19GaWVsZF9DaGVjazwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzg4XzEzIj5HZW5lcmljX0NoYXJfQ2hlY2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OF8zMyI+Q2g8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODlfMzMiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OV83Ij5VZGY8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzUzXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzczwvQT4gOj0KKyAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl81M185Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3M8L0E+IChUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODlfMzMiPlVzcjwvQT4pLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl85OF83Ij5SZXN1bHQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNjNfMTMiPkNoYXJhY3Rlcl9DaGVjazwvQT4gKENoYXJhY3RlcidWYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODhfMzMiPkNoPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfOTlfNyI+VWRmPC9BPi48Yj5hbGw8L2I+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl85OF83Ij5SZXN1bHQ8L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODhfMTMiPkdlbmVyaWNfQ2hhcl9DaGVjazwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzc5XzEzIj5DX0dlbmVyaWNfVHlwZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTBfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV83Ij5UPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQxXzQiPk1fR2VuZXJpY19UeXBlPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzExMV83Ij5UPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjJfMTMiPk5ld19GaWVsZHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzEzIj5HZW5lcmljX0ZpZWxkX0NoZWNrPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzg4XzEzIj5HZW5lcmljX0NoYXJfQ2hlY2s8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTExXzciPlQ8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTEwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIj5TZXRfRmllbGR0eXBlX0FyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTExXzciPlQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiPk1ha2VfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMTMiPkNvcHlfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiPkZyZWVfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzExMF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl8xMTBfNyI+UmVzPC9BPik7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQxXzQiPk1fR2VuZXJpY19UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzExMV83Ij5UPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0MV80Ij5NX0dlbmVyaWNfVHlwZTwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDFfNCI+TV9HZW5lcmljX1R5cGU8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzc5XzEzIj5DX0dlbmVyaWNfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ0XzUzIj5Vc2VyPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWEyZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bQpAQCAtMCwwICsxLDEwMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjM4IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzQ1XzU4Ij5Vc2VyPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ0XzUzIj5Vc2VyPC9BPik7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEyIj5DX0ludDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4gPGI+d2l0aDwvYj4gPGI+bnVsbDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgbWVjaGFuaXNtIHdlIHVzZSB0byBjcmVhdGUgZmllbGQgdHlwZXMgaW48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQWRhOTUuIFlvdSBzaG91bGQgeW91ciBvd24gdHlwZSBkZXJpdmUgZnJvbSB0aGlzIG9uZSBhbmQgaW1wbGVtZW50PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBGaWVsZF9DaGVjayBhbmQgQ2hhcmFjdGVyX0NoZWNrIGZ1bmN0aW9ucyBmb3IgeW91ciBvd24gdHlwZS48L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M185Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+CisgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+J0NsYXNzOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl8xMyI+RmllbGRfQ2hlY2s8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzU2XzEzIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl81Nl8xMyI+VHlwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICAgICA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgZmllbGQgaXMgY29uc2lkZXJlZCB2YWxpZCwgb3RoZXJ3aXNlIGl0IGlzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludmFsaWQuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzEzIj5DaGFyYWN0ZXJfQ2hlY2s8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzYzXzEzIj5DaDwvQT48L0ZPTlQ+ICA6IENoYXJhY3RlcjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl82M18xMyI+VHlwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICAgICA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgYXMgdmFsaWQgZm9yIHRoZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmaWVsZCwgb3RoZXJ3aXNlIGFzIGludmFsaWQuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl80N18xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl80N18zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzQ4XzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCB0eXBlcyBkZXJpdmVkIGZyb20gVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vIG5lZWQgdG8gcmVpbXBsZW1lbnQgaXQgZm9yIHlvdXIgZGVyaXZlZCB0eXBlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgUHJpdmF0ZSBQYXJ0LjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IFVzZWQgYnkgdGhlIENob2ljZSBjaGlsZCBwYWNrYWdlLjwvRU0+PC9GT05UPgorPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzEwOF8xMyI+Q19HZW5lcmljX1R5cGU8L0E+PC9GT05UPiAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzg0XzEzIj5HZW5lcmljX0ZpZWxkX0NoZWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfODRfMzQiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl84NV8zNCI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODFfMTMiPkdlbmVyaWNfRmllbGRfQ2hlY2s8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgZ2VuZXJpYyBGaWVsZF9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIGNhbGwgdG8gdGhlIEZpZWxkX0NoZWNrIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfOTVfMTMiPkdlbmVyaWNfQ2hhcl9DaGVjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzk1XzMzIj5DaDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl85Nl8zMyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODhfMTMiPkdlbmVyaWNfQ2hhcl9DaGVjazwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBnZW5lcmljIENoYXJfQ2hlY2tfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRlcy4gSXQgcm91dGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBjYWxsIHRvIHRoZSBDaGFyYWN0ZXJfQ2hlY2sgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0eXBlLjwvRU0+PC9GT05UPgorCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80NF81MyI+VXNlcjwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWYzY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0KQEAgLTAsMCArMSwzMDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4yMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjUwOjMzIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZHR5cGUuM3g8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzQ2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiBTeXN0ZW0uQWRkcmVzczsKKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPmZ1bmN0aW9uPC9iPiBUb19Bcmd1bWVudF9BY2Nlc3MgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgIChTeXN0ZW0uQWRkcmVzcywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT24pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8xMyI+R2V0X0ZpZWxkdHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl81OV8xMyI+RjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9GaWVsZHR5cGUsICJmaWVsZF90eXBlIik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzEzIj5HZXRfQXJnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzYyXzEzIj5GPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gU3lzdGVtLkFkZHJlc3M7CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X0FyZywgImZpZWxkX2FyZyIpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzc5XzEzIj5HZXRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl83OV8yMyI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzYzXzkiPkZpZWxkX1R5cGVfQWNjZXNzPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzciPkxvd19MZXZlbDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzU5XzEzIj5HZXRfRmllbGR0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNzlfMjMiPkZsZDwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF83Ij5Bcmc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNl85Ij5Bcmd1bWVudF9BY2Nlc3M8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNzNfNyI+TG93X0xldmVsPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxiPm51bGw8L2I+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83M183Ij5Mb3dfTGV2ZWw8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQzXzQiPk1fQnVpbHRpbl9Sb3V0ZXI8L0E+IDxiPm9yPC9iPiA8Yj5lbHNlPC9iPgorICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83M183Ij5Mb3dfTGV2ZWw8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQxXzQiPk1fR2VuZXJpY19UeXBlPC9BPiA8Yj5vcjwvYj4gPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNzNfNyI+TG93X0xldmVsPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0NF80Ij5NX0Nob2ljZV9Sb3V0ZXI8L0E+IDxiPm9yPC9iPiA8Yj5lbHNlPC9iPgorICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83M183Ij5Mb3dfTGV2ZWw8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQyXzQiPk1fR2VuZXJpY19DaG9pY2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83NF83Ij5Bcmc8L0E+IDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNjJfMTMiPkdldF9Bcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl83OV8yMyI+RmxkPC9BPikpOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzc0XzciPkFyZzwvQT4gPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83NF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+OworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl83OV8xMyI+R2V0X1R5cGU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTYyXzEzIj5NYWtlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMjMiPkFyZ3M8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IFN5c3RlbS5BZGRyZXNzCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQWN0dWFsbHkgYXJncyBpcyBhIGRvdWJsZSBpbmRpcmVjdGVkIHBvaW50ZXIgdG8gdGhlIGFyZ3VtZW50czwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBvZiBhIEMgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gSW4gdGhlb3J5IGl0IGlzIG5vdyBxdWl0ZTwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBjb21wbGljYXRlZCB0byB3cml0ZSBwb3J0YWJsZSByb3V0aW5lIHRoYXQgcmVhZHMgdGhlIGFyZ3VtZW50cyw8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYmVjYXVzZSBvbmUgaGFzIHRvIGtub3cgdGhlIGdyb3d0aCBkaXJlY3Rpb24gb2YgdGhlIHN0YWNrIGFuZDwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgc2l6ZXMgb2YgdGhlIGluZGl2aWR1YWwgYXJndW1lbnRzLjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBGb3J0dW5hdGVseSB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBmaXJzdCBhcmd1bWVudCAoIzApLDwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB3ZSBrbm93IGl0cyBzaXplIGFuZCBmb3IgdGhlIGZpcnN0IGFyZyB3ZSBkb24ndCBjYXJlIGFib3V0PC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludG8gd2hpY2ggc3RhY2sgZGlyZWN0aW9uIHdlIGhhdmUgdG8gcHJvY2VlZC4gV2Ugc2ltcGx5PC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJlc29sdmUgdGhlIGRvdWJsZSBpbmRpcmVjdGlvbiBhbmQgdGhhdHMgaXQuPC9FTT48L0ZPTlQ+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNl8xMiI+VjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gU3lzdGVtLkFkZHJlc3M7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gVG9fQWNjZXNzIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoU3lzdGVtLkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTA2XzEyIj5WPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gVG9fQWNjZXNzIChUb19BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8yMyI+QXJnczwvQT4pLjxiPmFsbDwvYj4pLjxiPmFsbDwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8xMyI+TWFrZV9Bcmc8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTNfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18yMyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiBTeXN0ZW0uQWRkcmVzcworICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzIzIj5Vc3I8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMTMiPkNvcHlfQXJnPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0Ij5GcmVlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzI0Ij5Vc3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTeXN0ZW0uQWRkcmVzcykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiBGcmVlX1R5cGUgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KKyAgICAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+J0NsYXNzLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl82M185Ij5GaWVsZF9UeXBlX0FjY2VzczwvQT4pOworICAgICAgPGI+cHJvY2VkdXJlPC9iPiBGcmVlYXJncyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjExXzkiPkFyZ3VtZW50PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4pOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPiA6PSBUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3Ml8yNCI+VXNyPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN183Ij5Mb3dfTGV2ZWw8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPiAvPSBTeXN0ZW0uTnVsbF9BZGRyZXNzIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjdfNyI+TG93X0xldmVsPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjZfNyI+VG9fQmVfRnJlZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT47CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI3XzciPkxvd19MZXZlbDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI2XzEwIj5GcmVlYXJnPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI3XzciPkxvd19MZXZlbDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI3XzciPkZyZWVhcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjZfNyI+VG9fQmVfRnJlZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4pOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjZfNyI+VG9fQmVfRnJlZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIEZyZWVfVHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI2XzciPlRvX0JlX0ZyZWU8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+KTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgRnJlZWFyZ3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0Ij5GcmVlX0FyZzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMjgiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1Ml8yOCI+VHlwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPidDbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ1XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTNfMjgiPkNmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ4XzEzIj5DX0J1aWx0aW5fUm91dGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDdfNyI+VXNyX0FyZzwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gU3lzdGVtLkFkZHJlc3MgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNjJfMTMiPkdldF9Bcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMjgiPkZsZDwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfNyI+TG93X0xldmVsPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNTlfMTMiPkdldF9GaWVsZHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMjgiPkZsZDwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDlfNyI+QXJnPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzE2Ij5TZXRfRmxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+RjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8yOCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+Q2Y8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUzXzI4Ij5DZnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5BcmcxPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0OF83Ij5Mb3dfTGV2ZWw8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTNfMjgiPkNmdDwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ4XzEzIj5DX0J1aWx0aW5fUm91dGVyPC9BPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1M18yOCI+Q2Z0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDlfMTMiPkNfQ2hvaWNlX1JvdXRlcjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0OV83Ij5Bcmc8L0E+IDo9IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjExXzkiPkFyZ3VtZW50PC9BPicoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4gPSZndDsgU3lzdGVtLk51bGxfQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+ID0mZ3Q7IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4nQ2xhc3MnKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1Ml8yOCI+VHlwPC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl81OV8xMyI+R2V0X0ZpZWxkdHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8yOCI+RmxkPC9BPikpOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0N183Ij5Vc3JfQXJnPC9BPiAvPSBTeXN0ZW0uTnVsbF9BZGRyZXNzIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ4XzciPkxvd19MZXZlbDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI1XzEwIj5Db3B5YXJnPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ5XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ4XzciPkxvd19MZXZlbDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ4XzciPkNvcHlhcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDdfNyI+VXNyX0FyZzwvQT4pOworICAgICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0OV83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxM183Ij5Vc3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0N183Ij5Vc3JfQXJnPC9BPjsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE1MF83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+U2V0X0ZsZF9UeXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUzXzMwIj5BcmcxPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDlfNyI+QXJnPC9BPik7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUwXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNTBfNyI+UmVzPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTc3XzEzIj5GaWVsZF9DaGVja19Sb3V0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzlfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3N18zMyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzhfMzMiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Ml83Ij5Bcmc8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4gOj0gVG9fQXJndW1lbnRfQWNjZXNzICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzhfMzMiPlVzcjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTgyXzciPkFyZzwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xODJfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPgorICAgICAgICAgICAgICAgICAgICAgPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xODJfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTJfNyI+VHlwPC9BPiAvPSA8Yj5udWxsPC9iPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTgyXzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI3XzEwIj5GY2hlY2s8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE4Ml83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEyN18xMCI+RmNoZWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTc3XzMzIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xODJfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiAxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3N18xMyI+RmllbGRfQ2hlY2tfUm91dGVyPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xODVfMTMiPkNoYXJfQ2hlY2tfUm91dGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xODVfMzIiPkNoPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg2XzMyIj5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfNyI+QXJnPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNl85Ij5Bcmd1bWVudF9BY2Nlc3M8L0E+IDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg2XzMyIj5Vc3I8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE5Nl83Ij5Bcmc8L0E+IC89IDxiPm51bGw8L2I+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTk2XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4KKyAgICAgICAgICAgICAgICAgICAgIDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTk2XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4gLz0gPGI+bnVsbDwvYj4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE5Nl83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEyOF8xMCI+Q2NoZWNrPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTZfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjhfMTAiPkNjaGVjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE4NV8zMiI+Q2g8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTZfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiAxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE4NV8xMyI+Q2hhcl9DaGVja19Sb3V0ZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18xMyI+TmV4dF9Sb3V0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18yNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5NF8yNiI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEwXzciPkFyZzwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPiA6PSBUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5NF8yNiI+VXNyPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMTBfNyI+QXJnPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIxMF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+CisgICAgICAgICAgICAgICAgICAgICA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIxMF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+IC89IDxiPm51bGw8L2I+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMTBfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjlfMTAiPk5leHQ8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIxMF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEyOV8xMCI+TmV4dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18yNiI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjEwXzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gMTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xOTNfMTMiPk5leHRfUm91dGVyPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDFfMTMiPlByZXZfUm91dGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDFfMjYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDJfMjYiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNF83Ij5Bcmc8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjM1XzQxIj5Ub19Bcmd1bWVudF9BY2Nlc3M8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDJfMjYiPlVzcjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjI0XzciPkFyZzwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjRfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPgorICAgICAgICAgICAgICAgICAgICAgPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjRfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTJfNyI+VHlwPC9BPiAvPSA8Yj5udWxsPC9iPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjI0XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI5XzE2Ij5QcmV2PC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjRfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjlfMTYiPlByZXY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDFfMjYiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIyNF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxM183Ij5Vc3I8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjAxXzEzIj5QcmV2X1JvdXRlcjwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDhfMTMiPkNfQnVpbHRpbl9Sb3V0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM5XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDBfNyI+VDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0M180Ij5NX0J1aWx0aW5fUm91dGVyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNDBfNyI+VDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjIyXzEzIj5OZXdfRmllbGR0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTc3XzEzIj5GaWVsZF9DaGVja19Sb3V0ZXI8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE4NV8xMyI+Q2hhcl9DaGVja19Sb3V0ZXI8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI0MF83Ij5UPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMzlfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjdfMTMiPlNldF9GaWVsZHR5cGVfQXJnPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjQwXzciPlQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiPk1ha2VfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMTMiPkNvcHlfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiPkZyZWVfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMzlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIzOV83Ij5SZXM8L0E+KTsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDNfNCI+TV9CdWlsdGluX1JvdXRlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjQwXzciPlQ8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQzXzQiPk1fQnVpbHRpbl9Sb3V0ZXI8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQzXzQiPk1fQnVpbHRpbl9Sb3V0ZXI8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDhfMTMiPkNfQnVpbHRpbl9Sb3V0ZXI8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ5XzEzIj5DX0Nob2ljZV9Sb3V0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY2XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjdfNyI+VDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0NF80Ij5NX0Nob2ljZV9Sb3V0ZXI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2N183Ij5UPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjJfMTMiPk5ld19GaWVsZHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzdfMTMiPkZpZWxkX0NoZWNrX1JvdXRlcjwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg1XzEzIj5DaGFyX0NoZWNrX1JvdXRlcjwvQT4nPGI+QWNjZXNzPC9iPik7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY3XzciPlQ8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2Nl83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+U2V0X0ZpZWxkdHlwZV9Bcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNjdfNyI+VDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8xMyI+TWFrZV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3Ml8xNCI+RnJlZV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2Nl83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY2XzciPlJlczwvQT4pOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2Nl83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIzNF8xMyI+U2V0X0ZpZWxkdHlwZV9DaG9pY2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNjdfNyI+VDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18xMyI+TmV4dF9Sb3V0ZXI8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMV8xMyI+UHJldl9Sb3V0ZXI8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2Nl83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY2XzciPlJlczwvQT4pOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0NF80Ij5NX0Nob2ljZV9Sb3V0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2N183Ij5UPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0NF80Ij5NX0Nob2ljZV9Sb3V0ZXI8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ0XzQiPk1fQ2hvaWNlX1JvdXRlcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0OV8xMyI+Q19DaG9pY2VfUm91dGVyPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyMjBjNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtCkBAIC0wLDAgKzEsMjQ1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTQgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl81MF80NiI+RmllbGRfVHlwZXM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+KTsKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xMiI+Q19JbnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFic3RyYWN0PC9iPiA8Yj50YWdnZWQ8L2I+IDxiPm51bGw8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFic3RyYWN0IGJhc2UgdHlwZSBmb3IgYWxsIGZpZWxkIHR5cGVzLiBBIGNvbmNyZXRlIGZpZWxkIHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaXMgYW4gZXh0ZW5zaW9uIHRoYXQgYWRkcyBzb21lIGRhdGEgZWxlbWVudHMgZGVzY3JpYmluZyBmb3JtYXRzIG9yPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGJvdW5kYXJ5IHZhbHVlcyBmb3IgdGhlIHR5cGUgYW5kIHZhbGlkYXRpb24gcm91dGluZXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZvciB0aGUgYnVpbHRpbiBsb3ctbGV2ZWwgZmllbGR0eXBlcywgdGhlIHZhbGlkYXRpb24gcm91dGluZXMgYXJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGFscmVhZHkgZGVmaW5lZCBieSB0aGUgbG93LWxldmVsIEMgbGlicmFyeS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIGJ1aWx0aW4gdHlwZXMgbGlrZSBBbHBoYSBvciBBbHBoYU51bWVyaWMgZXRjLiBhcmUgZGVmaW5lZCBpbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBjaGlsZCBwYWNrYWdlcyBvZiB0aGlzIHBhY2thZ2UuIFlvdSBtYXkgdXNlIG9uZSBvZiB0aGVtIGFzIGV4YW1wbGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaG93IHRvIGNyZWF0ZSB5b3Ugb3duIGNoaWxkIHBhY2thZ2VzIGZvciBsb3ctbGV2ZWwgZmllbGQgdHlwZXMgdGhhdDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB5b3UgbWF5IGhhdmUgYWxyZWFkeSB3cml0dGVuIGluIEMuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfOSI+RmllbGRfVHlwZV9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+J0NsYXNzOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNjZfMTQiPkZsZDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl82Nl8xNCI+RmxkX1R5cGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPikgPGI+aXM8L2I+IDxiPmFic3RyYWN0PC9iPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+c2V0X2ZpZWxkX3R5cGUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQnV0OiB3ZSBoaWRlIHRoZSB2YXJhcmcgbWVjaGFuaXNtIG9mIHRoZSBDIGludGVyZmFjZS4gWW91IGFsd2F5czwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgIGhhdmUgdG8gcGFzcyBhIHNpbmdsZSBGaWVsZF9UeXBlIHBhcmFtZXRlci48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sIj5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNzFfMTMiPkdldF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzcxXzIzIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNjNfOSI+RmllbGRfVHlwZV9BY2Nlc3M8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+ZmllbGRfdHlwZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGZpZWxkX2FyZygpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEluIEFkYTk1IHdlIGNhbiBjb21iaW5lIHRoZXNlLiBJZiB5b3UgdHJ5IHRvIHJldHJpZXZlIHRoZSBmaWVsZCB0eXBlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoYXQgaXMgbm90IGRlZmluZWQgYXMgZXh0ZW5zaW9uIG9mIHRoZSBhYnN0cmFjdCB0YWdnZWQgdHlwZSBhYm92ZSw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgeW91IHdpbGwgcmFpc2UgYSBGb3JtX0V4Y2VwdGlvbi48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyBub3QgaW5saW5lZDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgUHJpdmF0ZSBQYXJ0LjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1vc3Qgb2YgdGhpcyBpcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNoaWxkIHBhY2thZ2VzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Yj5wcml2YXRlPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml85Ij5NYWtlYXJnX0Z1bmN0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4KKyAgICAgPGI+ZnVuY3Rpb248L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzE2Ij5BcmdzPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiBTeXN0ZW0uQWRkcmVzczsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfOTJfOSI+TWFrZWFyZ19GdW5jdGlvbjwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2XzkiPkNvcHlhcmdfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPgorICAgICA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfMTYiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gU3lzdGVtLkFkZHJlc3M7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzk2XzkiPkNvcHlhcmdfRnVuY3Rpb248L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDBfOSI+RnJlZWFyZ19GdW5jdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+CisgICAgIDxiPnByb2NlZHVyZTwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxXzE3Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKTsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTAwXzkiPkZyZWVhcmdfRnVuY3Rpb248L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDRfOSI+RmllbGRfQ2hlY2tfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPgorICAgICA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDVfMjkiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTA0XzkiPkZpZWxkX0NoZWNrX0Z1bmN0aW9uPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzkiPkNoYXJfQ2hlY2tfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPgorICAgICA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfMjgiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTA4XzkiPkNoYXJfQ2hlY2tfRnVuY3Rpb248L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTJfOSI+Q2hvaWNlX0Z1bmN0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4KKyAgICAgPGI+ZnVuY3Rpb248L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM18xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzI5Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzExMl85Ij5DaG9pY2VfRnVuY3Rpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IFRoaXMgbXVzdCBiZSBpbiBzeW5jIHdpdGggdGhlIEZJRUxEVFlQRSBzdHJ1Y3R1cmUgaW4gZm9ybS5oPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzkiPkxvd19MZXZlbF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMV8xMCI+U3RhdHVzPC9BPjwvRk9OVD4gOiAgICAgICAgICAgICAgPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQ7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMl8xMCI+UmVmX0NvdW50PC9BPjwvRk9OVD4gOiAgICAgICAgICAgPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMubG9uZzsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzEwIj5MZWZ0PC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzE2Ij5SaWdodDwvQT48L0ZPTlQ+IDogICAgICAgICBTeXN0ZW0uQWRkcmVzczsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0XzEwIj5NYWtlYXJnPC9BPjwvRk9OVD4gOiAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl85Ml85Ij5NYWtlYXJnX0Z1bmN0aW9uPC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1XzEwIj5Db3B5YXJnPC9BPjwvRk9OVD4gOiAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl85Nl85Ij5Db3B5YXJnX0Z1bmN0aW9uPC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2XzEwIj5GcmVlYXJnPC9BPjwvRk9OVD4gOiAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDBfOSI+RnJlZWFyZ19GdW5jdGlvbjwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN18xMCI+RmNoZWNrPC9BPjwvRk9OVD4gOiAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTA0XzkiPkZpZWxkX0NoZWNrX0Z1bmN0aW9uPC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4XzEwIj5DY2hlY2s8L0E+PC9GT05UPiA6ICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDhfOSI+Q2hhcl9DaGVja19GdW5jdGlvbjwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV8xMCI+TmV4dDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV8xNiI+UHJldjwvQT48L0ZPTlQ+IDogICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTEyXzkiPkNob2ljZV9GdW5jdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzExOV85Ij5Mb3dfTGV2ZWxfRmllbGRfVHlwZTwvQT4pOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMTlfOSI+TG93X0xldmVsX0ZpZWxkX1R5cGU8L0E+OworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxiPm51bGw8L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgVGhpcyBmb3VyIGxvdy1sZXZlbCBmaWVsZHR5cGVzIGFyZSB0aGUgb25lcyBhc3NvY2lhdGVkIHdpdGg8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBmaWVsZHR5cGVzIGhhbmRsZWQgYnkgdGhpcyBiaW5kaW5nLiBBbnkgb3RoZXIgbG93LWxldmVsIGZpZWxkdHlwZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IHdpbGwgcmVzdWx0IGluIGEgRm9ybV9FeGNlcHRpb24gaXMgZnVuY3Rpb24gR2V0X1R5cGUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxXzQiPk1fR2VuZXJpY19UeXBlPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxiPm51bGw8L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDJfNCI+TV9HZW5lcmljX0Nob2ljZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPGI+bnVsbDwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0M180Ij5NX0J1aWx0aW5fUm91dGVyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8Yj5udWxsPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0XzQiPk1fQ2hvaWNlX1JvdXRlcjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxiPm51bGw8L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFR3byB3cmFwcGVyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhvc2UgbG93LWxldmVsIGZpZWxkdHlwZXMgZGVmaW5lZDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbiB0aGlzIHBhY2thZ2UuPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIzN18xMyI+Q19CdWlsdGluX1JvdXRlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2NF8xMyI+Q19DaG9pY2VfUm91dGVyPC9BPjwvRk9OVD4gIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0M18xNCI+V3JhcF9CdWlsdGluPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDNfMjgiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0NF8yOCI+VHlwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPidDbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDVfMjgiPkNmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ4XzEzIj5DX0J1aWx0aW5fUm91dGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgcHJvY2VkdXJlIGhhcyB0byBiZSBjYWxsZWQgYnkgdGhlIFNldF9GaWVsZF9UeXBlIGltcGxlbWVudGF0aW9uPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGZvciBidWlsdGluIGxvdy1sZXZlbCBmaWVsZHR5cGVzIHRvIHJlcGxhY2UgaXQgYnkgYW4gQWRhOTU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgY29uZm9ybWFudCBGaWVsZF9UeXBlIG9iamVjdC48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIHBhcmFtZXRlciBDZnQgbXVzdCBiZSBDX0J1aWx0aW5fUm91dGVyIGZvciByZWd1bGFyIGxvdy1sZXZlbDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmaWVsZHR5cGVzIChsaWtlIFRZUF9BTFBIQSBvciBUWVBfQUxOVU0pIGFuZCBDX0Nob2ljZV9Sb3V0ZXIgZm9yPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGxvdy1sZXZlbCBmaWVsZHR5cGVzIHdpdGNoIGNob2ljZSBmdW5jdGlvbnMgKGxpa2UgVFlQX0VOVU0pLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBbnkgb3RoZXIgdmFsdWUgd2lsbCByYWlzZSBhIEZvcm1fRXhjZXB0aW9uLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzk1XzEzIj5NYWtlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Ml8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfOTVfMjMiPkFyZ3M8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IFN5c3RlbS5BZGRyZXNzOworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiPk1ha2VfQXJnPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIE1ha2VhcmdfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW50cm9kdWNlZCBieSB0aGlzIGJpbmRpbmcuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTEzXzEzIj5Db3B5X0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2N18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTEzXzIzIj5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IFN5c3RlbS5BZGRyZXNzOworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMTMiPkNvcHlfQXJnPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIENvcHlhcmdfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW50cm9kdWNlZCBieSB0aGlzIGJpbmRpbmcuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzExOV8xNCI+RnJlZV9Bcmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzJfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzExOV8yNCI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcyk7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3Ml8xNCI+RnJlZV9Bcmc8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgRnJlZWFyZ19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNzlfMTMiPkZpZWxkX0NoZWNrX1JvdXRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3N18zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTc5XzMzIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzhfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE4MF8zMyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzdfMTMiPkZpZWxkX0NoZWNrX1JvdXRlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBGaWVsZF9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnRyb2R1Y2VkIHRvIHdyYXAgdGhlIGxvdy1sZXZlbCB0eXBlcyBieSBhIEZpZWxkX1R5cGUgZGVyaXZlZDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0eXBlLiBJdCByb3V0ZXMgdGhlIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93LWxldmVsIHZhbGlkYXRpb248L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZnVuY3Rpb24uPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTkzXzEzIj5DaGFyX0NoZWNrX1JvdXRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTkzXzMyIj5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Nl8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTk0XzMyIj5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE4NV8xMyI+Q2hhcl9DaGVja19Sb3V0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgQ2hhcl9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnRyb2R1Y2VkIHRvIHdyYXAgdGhlIGxvdy1sZXZlbCB0eXBlcyBieSBhIEZpZWxkX1R5cGUgZGVyaXZlZDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0eXBlLiBJdCByb3V0ZXMgdGhlIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93LWxldmVsIHZhbGlkYXRpb248L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZnVuY3Rpb24uPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjA3XzEzIj5OZXh0X1JvdXRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjA3XzI2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjA4XzI2Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18xMyI+TmV4dF9Sb3V0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgQ2hvaWNlX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHR5cGUuIEl0IHJvdXRlcyB0aGUgY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgbmV4dF9jaG9pY2U8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZnVuY3Rpb24uPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjIxXzEzIj5QcmV2X1JvdXRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjIxXzI2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjIyXzI2Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMV8xMyI+UHJldl9Sb3V0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgQ2hvaWNlX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHR5cGUuIEl0IHJvdXRlcyB0aGUgY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgcHJldl9jaG9pY2U8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZnVuY3Rpb24uPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgQXJndW1lbnQgc3RydWN0dXJlIG1haW50YWluZWQgYnkgYWxsIGxvdy1sZXZlbCBmaWVsZCB0eXBlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy48L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExXzkiPkFyZ3VtZW50PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnJlY29yZDwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEyXzciPlR5cDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNjNfOSI+RmllbGRfVHlwZV9BY2Nlc3M8L0E+OyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIEZpZWxkX1R5cGUgY3JlYXRpbmcgdGhpcyByZWNvcmQ8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEzXzciPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3M7ICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBvcmlnaW5hbCBhcmcgZm9yIGJ1aWx0aW4gbG93LWxldmVsIHR5cGVzPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNF83Ij5DZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OyAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgb3JpZ2luYWwgbG93LWxldmVsIHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjExXzkiPkFyZ3VtZW50PC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgU29tZSBJbXBvcnRzIG9mIGxpYmZvcm0gcm91dGluZXMgdG8gZGVhbCB3aXRoIGxvdy1sZXZlbCBmaWVsZHR5cGVzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjJfMTMiPk5ld19GaWVsZHR5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjJfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyMl8xMyI+RmNoZWNrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDRfOSI+RmllbGRfQ2hlY2tfRnVuY3Rpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyMl8xMyI+Q2NoZWNrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDhfOSI+Q2hhcl9DaGVja19GdW5jdGlvbjwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3X0ZpZWxkdHlwZSwgIm5ld19maWVsZHR5cGUiKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI3XzEzIj5TZXRfRmllbGR0eXBlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyN18zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIj5DZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI4XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjdfMTMiPk1hazwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfOTJfOSI+TWFrZWFyZ19GdW5jdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTYyXzEzIj5NYWtlX0FyZzwvQT4nPGI+QWNjZXNzPC9iPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyOV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIj5Db3A8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzk2XzkiPkNvcHlhcmdfRnVuY3Rpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+JzxiPkFjY2VzczwvYj47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzBfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+RnJlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDBfOSI+RnJlZWFyZ19GdW5jdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0Ij5GcmVlX0FyZzwvQT4nPGI+QWNjZXNzPC9iPikKKyAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZHR5cGVfQXJnLCAic2V0X2ZpZWxkdHlwZV9hcmciKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0XzEzIj5TZXRfRmllbGR0eXBlX0Nob2ljZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjM0XzEzIj5DZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM1XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMzRfMTMiPk5leHQ8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzVfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIzNF8xMyI+UHJldjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTEyXzkiPkNob2ljZV9GdW5jdGlvbjwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGR0eXBlX0Nob2ljZSwgInNldF9maWVsZHR5cGVfY2hvaWNlIik7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNzJlYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bQpAQCAtMCwwICsxLDkxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX3VzZXJwdHIuM3g8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzQ2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPkZpZWxkX1VzZXJfRGF0YTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18yOSI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTRfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18xNiI+U2V0X0ZpZWxkX1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU3XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTdfMTYiPlVzcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfVXNlcnB0ciwgInNldF9maWVsZF91c2VycHRyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81N18xNiI+U2V0X0ZpZWxkX1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMjkiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81NF8yOSI+RGF0YTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYxXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjFfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI4Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzE2Ij5GaWVsZF9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83Ml8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9Vc2VycHRyLCAiZmllbGRfdXNlcnB0ciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83Ml8xNiI+RmllbGRfVXNlcnB0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8yOCI+RmxkPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzE0Ij5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzYwXzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzYwXzI5Ij5EYXRhPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPkZsZDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+RmllbGRfVXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmODg1MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bQpAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xNSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M185IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPlVzZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bGltaXRlZDwvYj4gPGI+cHJpdmF0ZTwvYj47CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+VXNlcl9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDNfOSI+VXNlcjwvQT47Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDhfNDYiPkZpZWxkX1VzZXJfRGF0YTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+RmllbGRfVXNlcl9EYXRhPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU0XzI5Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NV8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+c2V0X2ZpZWxkX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzhfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzc4XzI5Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzlfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5maWVsZF91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzBfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcwXzI4Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+ZmllbGRfdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtYSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+RmllbGRfVXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjcyODgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bQpAQCAtMCwwICsxLDkyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRm9ybV9Vc2VyX0RhdGEgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9fdXNlcnB0ci4zeDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF80NiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPkZvcm1fVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzI5Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTRfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzE2Ij5TZXRfRm9ybV9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU4XzE2Ij5Gcm08L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU4XzE2Ij5EYXRhPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Gb3JtX1VzZXJwdHIsICJzZXRfZm9ybV91c2VycHRyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU4XzE2Ij5TZXRfRm9ybV9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMjkiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU0XzI5Ij5EYXRhPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjJfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYyXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8yOCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfMTYiPkZvcm1fVXNlcnB0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83M18xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9Vc2VycHRyLCAiZm9ybV91c2VycHRyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzNfMTYiPkZvcm1fVXNlcnB0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI4Ij5Gcm08L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzE0Ij5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzI5Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzYwXzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82MF8yOSI+RGF0YTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+RnJtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzE0Ij5HZXRfVXNlcl9EYXRhPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+Rm9ybV9Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliMzIyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtCkBAIC0wLDAgKzEsNzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xNCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M185IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+VXNlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5saW1pdGVkPC9iPiA8Yj5wcml2YXRlPC9iPjsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPlVzZXJfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDNfOSI+VXNlcjwvQT47Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80OF80NiI+Rm9ybV9Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+Rm9ybV9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU1XzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU1XzI5Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTZfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3VzZXJwdHIuM3guaHRtbCI+c2V0X2Zvcm1fdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCI+U2V0X1VzZXJfRGF0YTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzlfMjkiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfODBfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzFfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzFfMjgiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1lIGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPkZvcm1fVXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjY0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bQpAQCAtMCwwICsxLDExNjcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtcyAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4yNiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjUwOjQ0IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5Qb2ludGVyczsKKworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKyAgIDxiPnR5cGU8L2I+IENfRmllbGRfQXJyYXkgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoTmF0dXJhbCA8Yj5yYW5nZTwvYj4gJmx0OyZndDspIDxiPm9mPC9iPiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICA8Yj5wYWNrYWdlPC9iPiBGX0FycmF5IDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlBvaW50ZXJzIChOYXR1cmFsLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4sIENfRmllbGRfQXJyYXksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+KTsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBzdWJ0eXBlIGNoYXJzX3B0ciBpcyBJbnRlcmZhY2VzLkMuU3RyaW5ncy5jaGFyc19wdHI7PC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBGT1NfMl9DSW50IDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gQ0ludF8yX0ZPUyA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IEZybU9TXzJfQ0ludCA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IENJbnRfMl9Gcm1PUyA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzZfMTQiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzZfMjgiPktleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc3XzI4Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfMTYiPkZvcm1fUmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg0XzE2Ij5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGb3JtX1JlcXVlc3RfTmFtZSwgImZvcm1fcmVxdWVzdF9uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODRfMTYiPkZvcm1fUmVxdWVzdF9OYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI3Nl8yOCI+S2V5PC9BPikpLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzdfMjgiPk5hbWU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc2XzE0Ij5SZXF1ZXN0X05hbWU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc5XzE0Ij5SZXF1ZXN0X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc5XzI4Ij5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml8xNiI+Rm9ybV9SZXF1ZXN0X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTJfMTYiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZvcm1fUmVxdWVzdF9OYW1lLCAiZm9ybV9yZXF1ZXN0X25hbWUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkyXzE2Ij5Gb3JtX1JlcXVlc3RfTmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzlfMjgiPktleTwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI3OV8xNCI+UmVxdWVzdF9OYW1lPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9uZXcuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTNfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjkzXzIxIj5IZWlnaHQ8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5NF8yMSI+V2lkdGg8L0E+PC9GT05UPiAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTBfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5NV8yMSI+VG9wPC9BPjwvRk9OVD4gICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5Nl8yMSI+TGVmdDwvQT48L0ZPTlQ+ICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMl8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk3XzIxIj5PZmZfU2NyZWVuPC9BPjwvRk9OVD4gICA6IE5hdHVyYWwgOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5OF8yMSI+TW9yZV9CdWZmZXJzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0KQorICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMTYiPk5ld2ZpZWxkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTZfMTYiPkg8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNl8xNiI+VzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTE2XzE2Ij5UPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTZfMTYiPkw8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNl8xNiI+TzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTE2XzE2Ij5NPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3ZmllbGQsICJuZXdfZmllbGQiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4XzciPkZsZDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTZfMTYiPk5ld2ZpZWxkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5M18yMSI+SGVpZ2h0PC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTRfMjEiPldpZHRoPC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5NV8yMSI+VG9wPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTZfMjEiPkxlZnQ8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk3XzIxIj5PZmZfU2NyZWVuPC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5OF8yMSI+TW9yZV9CdWZmZXJzPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTE4XzciPkZsZDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTE4XzciPkZsZDwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5M18xMyI+Q3JlYXRlPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMxNV8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMTVfMjIiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfMTYiPkZyZWVfRmllbGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEzM18xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRnJlZV9GaWVsZCwgImZyZWVfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzZfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEzNl83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEzM18xNiI+RnJlZV9GaWVsZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMxNV8yMiI+RmxkPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTM2XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMzZfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMxNV8yMiI+RmxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzE1XzE0Ij5EZWxldGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjFfMTMiPkR1cGxpY2F0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0N18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzIxXzI0Ij5GbGQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjJfMjQiPlRvcDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzIzXzI0Ij5MZWZ0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMTYiPkR1cF9GaWVsZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5GbGQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTFfMTYiPlRvcDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1M18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5MZWZ0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRHVwX0ZpZWxkLCAiZHVwX2ZpZWxkIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2XzciPkY8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5EdXBfRmllbGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjFfMjQiPkZsZDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzIyXzI0Ij5Ub3A8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjNfMjQiPkxlZnQ8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTZfNyI+RjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTU2XzciPkY8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjFfMTMiPkR1cGxpY2F0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyOF8xMyI+TGluazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzI4XzE5Ij5GbGQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzI5XzE5Ij5Ub3A8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcwXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzBfMTkiPkxlZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8xNiI+TG5rX0ZpZWxkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNzJfMTYiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE3Ml8xNiI+VG9wPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNzJfMTYiPkxlZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBMbmtfRmllbGQsICJsaW5rX2ZpZWxkIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3XzciPkY8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTcyXzE2Ij5MbmtfRmllbGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjhfMTkiPkZsZDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzI5XzE5Ij5Ub3A8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzBfMTkiPkxlZnQ8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNzdfNyI+RjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTc3XzciPkY8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjhfMTMiPkxpbms8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX2p1c3QuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzM5XzE0Ij5TZXRfSnVzdGlmaWNhdGlvbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5M18zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzM5XzMzIj5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzQwXzMzIj5KdXN0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjJfOSI+RmllbGRfSnVzdGlmaWNhdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjJfMzMiPk5vbmU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfMTYiPlNldF9GaWVsZF9KdXN0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTZfMTYiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N18zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTk2XzE2Ij5KdXN0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfSnVzdCwgInNldF9maWVsZF9qdXN0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PQorICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTZfMTYiPlNldF9GaWVsZF9KdXN0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzM5XzMzIj5GbGQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyXzkiPkZpZWxkX0p1c3RpZmljYXRpb248L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzQwXzMzIj5KdXN0PC9BPikpKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIwMF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjAwXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMzOV8xNCI+U2V0X0p1c3RpZmljYXRpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNDVfMTMiPkdldF9KdXN0aWZpY2F0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNDVfMzIiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyXzkiPkZpZWxkX0p1c3RpZmljYXRpb248L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxM18xNiI+RmllbGRfSnVzdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxM18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjEzXzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9KdXN0LCAiZmllbGRfanVzdCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyXzkiPkZpZWxkX0p1c3RpZmljYXRpb248L0E+J1ZhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjEzXzE2Ij5GaWVsZF9KdXN0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzQ1XzMyIj5GbGQ8L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM0NV8xMyI+R2V0X0p1c3RpZmljYXRpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX2J1ZmZlci4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNTRfMTQiPlNldF9CdWZmZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU1XzciPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM1Nl83Ij5CdWZmZXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU3XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzBfMTIiPkNoYXJfUHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5jaGFyOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMxXzE2Ij5TZXRfRmxkX0J1ZmZlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjMxXzE2Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMyXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzFfMTYiPkJ1Zm51bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzM18zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjMxXzE2Ij5TPC9BPjwvRk9OVD4gICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIzMF8xMiI+Q2hhcl9QdHI8L0E+KQorICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GbGRfQnVmZmVyLCAic2V0X2ZpZWxkX2J1ZmZlciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzN183Ij5UeHQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU3XzciPlN0cjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM4XzciPkxlbjwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM1N183Ij5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzdfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjM4XzciPkxlbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjM5XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjMxXzE2Ij5TZXRfRmxkX0J1ZmZlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM1NV83Ij5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU2XzciPkJ1ZmZlcjwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzdfNyI+VHh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjM3XzciPlR4dDwvQT4nRmlyc3QpJzxiPkFjY2VzczwvYj4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIzOV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjM5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM1NF8xNCI+U2V0X0J1ZmZlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjJfMTQiPkdldF9CdWZmZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzYzXzciPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2NF83Ij5CdWZmZXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY1XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NV8xNiI+RmllbGRfQnVmZmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNTVfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjU1XzE2Ij5CPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9CdWZmZXIsICJmaWVsZF9idWZmZXIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNTVfMTYiPkZpZWxkX0J1ZmZlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2M183Ij5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY0XzciPkJ1ZmZlcjwvQT4pKSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY1XzciPlN0cjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjJfMTQiPkdldF9CdWZmZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2OF8xMyI+R2V0X0J1ZmZlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjlfNyI+RmxkPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzcwXzciPkJ1ZmZlcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4nRmlyc3QpIDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2Nl8xNiI+RmllbGRfQnVmZmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNjZfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjY2XzE2Ij5CPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9CdWZmZXIsICJmaWVsZF9idWZmZXIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI2Nl8xNiI+RmllbGRfQnVmZmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY5XzciPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNzBfNyI+QnVmZmVyPC9BPikpKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY4XzEzIj5HZXRfQnVmZmVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM3Nl8xNCI+U2V0X1N0YXR1czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc2XzI2Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM3N18yNiI+U3RhdHVzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfMTYiPlNldF9GbGRfU3RhdHVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc4XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNzhfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc5XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNzhfMTYiPlN0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9TdGF0dXMsICJzZXRfZmllbGRfc3RhdHVzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjgyXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNzhfMTYiPlNldF9GbGRfU3RhdHVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc2XzI2Ij5GbGQ8L0E+LCBCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc3XzI2Ij5TdGF0dXM8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yODJfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM3Nl8xNCI+U2V0X1N0YXR1czwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4Ml8xMyI+Q2hhbmdlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5MV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzgyXzIyIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5M18xNiI+RmllbGRfU3RhdHVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yOTNfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX1N0YXR1cywgImZpZWxkX3N0YXR1cyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5Nl83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yOTNfMTYiPkZpZWxkX1N0YXR1czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4Ml8yMiI+RmxkPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yOTZfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODJfMTMiPkNoYW5nZWQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzg3XzE0Ij5TZXRfTWF4aW11bV9TaXplPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA3XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODdfMzIiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwOF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzg4XzMyIj5NYXg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBOYXR1cmFsIDo9IDApCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMF8xNiI+U2V0X0ZpZWxkX01heDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzEwXzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzExXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMTBfMTYiPk08L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZpZWxkX01heCwgInNldF9tYXhfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTRfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMxMF8xNiI+U2V0X0ZpZWxkX01heDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4N18zMiI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4OF8zMiI+TWF4PC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzE0XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMTRfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzg3XzE0Ij5TZXRfTWF4aW11bV9TaXplPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9vcHRzLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM5N18xNCI+U2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM5N18yNyI+RmxkPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM5OF8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzBfMTYiPlNldF9GaWVsZF9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMwXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzBfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMxXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzBfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZpZWxkX09wdHMsICJzZXRfZmllbGRfb3B0cyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzNF83Ij5PcHQ8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSBGT1NfMl9DSW50ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zOThfMjciPk9wdGlvbnM8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM1XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzVfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzBfMTYiPlNldF9GaWVsZF9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzk3XzI3Ij5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzRfNyI+T3B0PC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzM1XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzVfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzk3XzE0Ij5TZXRfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MDNfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MDNfMzAiPkZsZDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MDRfMzAiPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwNV8zMCI+T248L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDlfMTYiPkZpZWxkX09wdHNfT248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDlfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM0OV8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1MF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ5XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX09wdHNfT24sICJmaWVsZF9vcHRzX29uIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfMTYiPkZpZWxkX09wdHNfT2ZmPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUyXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNTJfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUzXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNTJfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfT3B0c19PZmYsICJmaWVsZF9vcHRzX29mZiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Nl83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU3XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IEZPU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwNF8zMCI+T3B0aW9uczwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDA1XzMwIj5PbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Nl83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM0OV8xNiI+RmllbGRfT3B0c19PbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwM18zMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzU3XzciPk9wdDwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Nl83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Ml8xNiI+RmllbGRfT3B0c19PZmY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MDNfMzAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1N183Ij5PcHQ8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Nl83Ij5FcnI8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzU2XzciPkVycjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwM18xNCI+U3dpdGNoX09wdGlvbnM8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDExXzE0Ij5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDExXzI3Ij5GbGQ8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxMl8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc0XzE2Ij5GaWVsZF9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc0XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNzRfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX09wdHMsICJmaWVsZF9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc3XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM3NF8xNiI+RmllbGRfT3B0czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxMV8yNyI+RmxkPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxMl8yNyI+T3B0aW9uczwvQT4gOj0gQ0ludF8yX0ZPUyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzc3XzciPlJlczwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTFfMTQiPkdldF9PcHRpb25zPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDE2XzEzIj5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDE2XzI2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg3XzciPkZvczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxMV8xNCI+R2V0X09wdGlvbnM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTZfMjYiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM4N183Ij5Gb3M8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzg3XzciPkZvczwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxNl8xMyI+R2V0X09wdGlvbnM8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDI2XzE0Ij5TZXRfRm9yZWdyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjdfNyI+RmxkPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjhfNyI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDI5XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA0XzE2Ij5TZXRfRmllbGRfRm9yZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwNF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDA0XzE2Ij5GbGQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDVfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQwNF8xNiI+QXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZpZWxkX0ZvcmUsICJzZXRfZmllbGRfZm9yZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwOF83Ij5DaDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyOV83Ij5Db2xvcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjhfNyI+Rm9yZTwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9CisgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQwNF8xNiI+U2V0X0ZpZWxkX0ZvcmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjdfNyI+RmxkPC9BPiwgQXR0ckNoYXJfVG9fQ2h0eXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MDhfNyI+Q2g8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDExXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MTFfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDI2XzE0Ij5TZXRfRm9yZWdyb3VuZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDIxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MzRfMTQiPkZvcmVncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzNF8yNiI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzNV8yNiI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjRfMTYiPkZpZWxkX0ZvcmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQyNF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfRm9yZSwgImZpZWxkX2ZvcmUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM1XzI2Ij5Gb3JlPC9BPiA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQyNF8xNiI+RmllbGRfRm9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzNF8yNiI+RmxkPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzNF8xNCI+Rm9yZWdyb3VuZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzOV8xNCI+Rm9yZWdyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM5XzI2Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0MF8yNiI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDQxXzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzNF8xNiI+RmllbGRfRm9yZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzNF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDM0XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9Gb3JlLCAiZmllbGRfZm9yZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDBfMjYiPkZvcmU8L0E+ICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQzNF8xNiI+RmllbGRfRm9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzOV8yNiI+RmxkPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDFfMjYiPkNvbG9yPC9BPiA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQzNF8xNiI+RmllbGRfRm9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzOV8yNiI+RmxkPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MzlfMTQiPkZvcmVncm91bmQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDQ2XzE0Ij5TZXRfQmFja2dyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDdfNyI+RmxkPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDhfNyI+QmFjazwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDQ5XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ4XzE2Ij5TZXRfRmllbGRfQmFjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5GbGQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDlfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+QXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZpZWxkX0JhY2ssICJzZXRfZmllbGRfYmFjayIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1Ml83Ij5DaDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0OV83Ij5Db2xvcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDhfNyI+QmFjazwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTVfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9CisgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+U2V0X0ZpZWxkX0JhY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDdfNyI+RmxkPC9BPiwgQXR0ckNoYXJfVG9fQ2h0eXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NTJfNyI+Q2g8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDU1XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NTVfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDQ2XzE0Ij5TZXRfQmFja2dyb3VuZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NTRfMTQiPkJhY2tncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1NF8yNiI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1NV8yNiI+QmFjazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjhfMTYiPkZpZWxkX0JhY2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjhfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ2OF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfQmFjaywgImZpZWxkX2JhY2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU1XzI2Ij5CYWNrPC9BPiA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ2OF8xNiI+RmllbGRfQmFjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1NF8yNiI+RmxkPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1NF8xNCI+QmFja2dyb3VuZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1OV8xNCI+QmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU5XzI2Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2MF8yNiI+QmFjazwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDYxXzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3OF8xNiI+RmllbGRfQmFjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3OF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDc4XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9CYWNrLCAiZmllbGRfYmFjayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjBfMjYiPkJhY2s8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkNodHlwZV9Ub19BdHRyQ2hhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ3OF8xNiI+RmllbGRfQmFjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1OV8yNiI+RmxkPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjFfMjYiPkNvbG9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkNodHlwZV9Ub19BdHRyQ2hhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ3OF8xNiI+RmllbGRfQmFjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1OV8yNiI+RmxkPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NTlfMTQiPkJhY2tncm91bmQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDY2XzE0Ij5TZXRfUGFkX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4N18zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDY2XzMzIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg4XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjdfMzMiPlBhZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3RlciA6PSBTcGFjZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkwXzE2Ij5TZXRfRmllbGRfUGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkwXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80OTBfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTFfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ5MF8xNiI+Q2g8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfUGFkLCAic2V0X2ZpZWxkX3BhZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5NF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDkwXzE2Ij5TZXRfRmllbGRfUGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDY2XzMzIj5GbGQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IChDaGFyYWN0ZXInUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjdfMzMiPlBhZDwvQT4pKSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80OTRfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ5NF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjZfMTQiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ3Ml8xNCI+UGFkX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwNF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDcyXzI5Ij5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA1XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzNfMjkiPlBhZDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBDaGFyYWN0ZXIpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwN18xNiI+RmllbGRfUGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MDdfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX1BhZCwgImZpZWxkX3BhZCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzNfMjkiPlBhZDwvQT4gOj0gQ2hhcmFjdGVyJ1ZhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTA3XzE2Ij5GaWVsZF9QYWQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzJfMjkiPkZsZDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDcyXzE0Ij5QYWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9pbmZvLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4Ml8xNCI+SW5mbzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxOV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDgyXzIwIj5GbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIwXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODNfMjAiPkxpbmVzPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjFfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4NF8yMCI+Q29sdW1uczwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODVfMjAiPkZpcnN0X1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyM18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg2XzIwIj5GaXJzdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyNF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg3XzIwIj5PZmZfU2NyZWVuPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPm91dDwvYj4gTmF0dXJhbDsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyNV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg4XzIwIj5BZGRpdGlvbmFsX0J1ZmZlcnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyN18xMiI+Q19JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOF8xNiI+RmxkX0luZm88L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTI4XzE2Ij5DPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjhfMTYiPkZyPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzM2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjhfMTYiPkZjPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjhfMTYiPk9zPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzQ0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjhfMTYiPkFiPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjdfMTIiPkNfSW50X0FjY2VzczwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGbGRfSW5mbywgImZpZWxkX2luZm8iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzNfNyI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzM18xMCI+QzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzM18xMyI+RnI8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzNfMTciPkZjPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTMzXzIxIj5PczwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzM18yNSI+QWI8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzRfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+RmxkX0luZm88L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODJfMjAiPkZsZDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM183Ij5MPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzNfMTAiPkM8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18xMyI+RnI8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18xNyI+RmM8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18yMSI+T3M8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18yNSI+QWI8L0E+JzxiPkFjY2VzczwvYj4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTM0XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzRfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDgzXzIwIj5MaW5lczwvQT4gICAgICAgICAgICAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzciPkw8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4NF8yMCI+Q29sdW1uczwvQT4gICAgICAgICAgICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzEwIj5DPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODVfMjAiPkZpcnN0X1JvdzwvQT4gICAgICAgICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18xMyI+RnI8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4Nl8yMCI+Rmlyc3RfQ29sdW1uPC9BPiAgICAgICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzNfMTciPkZjPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODdfMjAiPk9mZl9TY3JlZW48L0E+ICAgICAgICAgOj0gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzIxIj5PczwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg4XzIwIj5BZGRpdGlvbmFsX0J1ZmZlcnM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzI1Ij5BYjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4Ml8xNCI+SW5mbzwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OTNfMTQiPkR5bmFtaWNfSW5mbzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1M18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDkzXzI4Ij5GbGQ8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5NF8yOCI+TGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1NV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDk1XzI4Ij5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5Nl8yOCI+TWF4PC9BPjwvRk9OVD4gICAgIDogPGI+b3V0PC9iPiBOYXR1cmFsKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OF8xMiI+Q19JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV8xNiI+RHluX0luZm88L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1OV8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU5XzM5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NTlfMTYiPkw8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTlfNDIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1OV8xNiI+QzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV80NSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU5XzE2Ij5NPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NThfMTIiPkNfSW50X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRHluX0luZm8sICJkeW5hbWljX2ZpZWxkX2luZm8iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjJfNyI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2Ml8xMCI+QzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2Ml8xMyI+TTwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2M183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU5XzE2Ij5EeW5fSW5mbzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5M18yOCI+RmxkPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYyXzciPkw8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU2Ml8xMCI+QzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYyXzEzIj5NPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU2M183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYzXzciPlJlczwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5NF8yOCI+TGluZXM8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NjJfNyI+TDwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDk1XzI4Ij5Db2x1bW5zPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYyXzEwIj5DPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OTZfMjgiPk1heDwvQT4gICAgIDo9IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU2Ml8xMyI+TTwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5M18xNCI+RHluYW1pY19JbmZvPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV93aW4uM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTA1XzE0Ij5TZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MDVfMjYiPkZybTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MDZfMjYiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4NV8xNiI+U2V0X0Zvcm1fV2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81ODVfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81ODVfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRm9ybV9XaW4sICJzZXRfZm9ybV93aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4NV8xNiI+U2V0X0Zvcm1fV2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTA1XzI2Ij5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MDZfMjYiPldpbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTg5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUwNV8xNCI+U2V0X1dpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxMV8xMyI+R2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTExXzI1Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjAwXzE2Ij5Gb3JtX1dpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwMF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjAwXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9XaW4sICJmb3JtX3dpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwM183Ij5XPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MDBfMTYiPkZvcm1fV2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTExXzI1Ij5Gcm08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MDNfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxMV8xMyI+R2V0X1dpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTZfMTQiPlNldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTZfMzAiPkZybTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxMV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTE3XzMwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTNfMTYiPlNldF9Gb3JtX1N1YjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxM18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjEzXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjEzXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0Zvcm1fU3ViLCAic2V0X2Zvcm1fc3ViIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE3XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MTNfMTYiPlNldF9Gb3JtX1N1YjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxNl8zMCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTE3XzMwIj5XaW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MTdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxN183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTZfMTQiPlNldF9TdWJfV2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyNl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTIyXzEzIj5HZXRfU3ViX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyNl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTIyXzI5Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI4XzE2Ij5Gb3JtX1N1YjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyOF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjI4XzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9TdWIsICJmb3JtX3N1YiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzMV83Ij5XPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MjhfMTYiPkZvcm1fU3ViPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTIyXzI5Ij5Gcm08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MzFfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyMl8xMyI+R2V0X1N1Yl9XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTI3XzE0Ij5TY2FsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzOF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTI3XzIxIj5Gcm08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM5XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjhfMjEiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0MF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTI5XzIxIj5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0Ml8xMiI+Q19JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0M18xNiI+TV9TY2FsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQzXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0M18zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQzXzE2Ij5ZcDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0M180MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQzXzE2Ij5YcDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQyXzEyIj5DX0ludF9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1fU2NhbGUsICJzY2FsZV9mb3JtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ2XzciPlg8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDZfMTAiPlk8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDdfNyI+UmVzPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDNfMTYiPk1fU2NhbGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjdfMjEiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY0Nl8xMCI+WTwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQ2XzciPlg8L0E+JzxiPkFjY2VzczwvYj4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQ3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDdfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyOF8yMSI+TGluZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQ2XzEwIj5ZPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjlfMjEiPkNvbHVtbnM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDZfNyI+WDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjdfMTQiPlNjYWxlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgbWVudV9ob29rLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0MV8xNCI+U2V0X0ZpZWxkX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2Ml8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQxXzM1Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjNfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0Ml8zNSI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjVfMTYiPlNldF9GaWVsZF9Jbml0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY1XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NjVfMTYiPkZybTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY2XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NjVfMTYiPlByb2M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZF9Jbml0LCAic2V0X2ZpZWxkX2luaXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2NV8xNiI+U2V0X0ZpZWxkX0luaXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDFfMzUiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0Ml8zNSI+UHJvYzwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjY5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0MV8xNCI+U2V0X0ZpZWxkX0luaXRfSG9vazwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDdfMTQiPlNldF9GaWVsZF9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzhfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0N18zNSI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc5XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDhfMzUiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgxXzE2Ij5TZXRfRmllbGRfVGVybTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4MV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjgxXzE2Ij5Gcm08L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4Ml8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjgxXzE2Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfVGVybSwgInNldF9maWVsZF90ZXJtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjg1XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82ODFfMTYiPlNldF9GaWVsZF9UZXJtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQ3XzM1Ij5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDhfMzUiPlByb2M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY4NV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjg1XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0N18xNCI+U2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTNfMTQiPlNldF9Gb3JtX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5NF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTUzXzM0Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5NV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTU0XzM0Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5N18xNiI+U2V0X0Zvcm1fSW5pdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5N18zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjk3XzE2Ij5Gcm08L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk4XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82OTdfMTYiPlByb2M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Gb3JtX0luaXQsICJzZXRfZm9ybV9pbml0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzAxXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82OTdfMTYiPlNldF9Gb3JtX0luaXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTNfMzQiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1NF8zNCI+UHJvYzwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcwMV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzAxXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1M18xNCI+U2V0X0Zvcm1fSW5pdF9Ib29rPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1OV8xNCI+U2V0X0Zvcm1fVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEwXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTlfMzQiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzExXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NjBfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEzXzE2Ij5TZXRfRm9ybV9UZXJtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEzXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MTNfMTYiPkZybTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTRfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxM18xNiI+UHJvYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0Zvcm1fVGVybSwgInNldF9mb3JtX3Rlcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxM18xNiI+U2V0X0Zvcm1fVGVybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1OV8zNCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTYwXzM0Ij5Qcm9jPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MTdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxN183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTlfMTQiPlNldF9Gb3JtX1Rlcm1fSG9vazwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRzLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4OV8xNCI+UmVkZWZpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4OV8yNCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczMV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczM18xNiI+U2V0X0ZybV9GaWVsZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzNfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzczM18xNiI+RnJtPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzNfMTYiPkl0ZW1zPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRnJtX0ZpZWxkcywgInNldF9mb3JtX2ZpZWxkcyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczN183Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5MF8yNCI+RmxkczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5MF8yNCI+RmxkczwvQT4nTGFzdCkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPidMYXN0KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzM3XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzMzXzE2Ij5TZXRfRnJtX0ZpZWxkczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4OV8yNCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPidGaXJzdCknQWRkcmVzcyk7CisgICAgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzczN183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzM3XzciPlJlczwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTg5XzE0Ij5SZWRlZmluZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMV8xMyI+RmllbGRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzUyXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDFfMjEiPkZybTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMl8yMSI+SW5kZXg8L0E+PC9GT05UPiA6IFBvc2l0aXZlKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj51c2U8L2I+IEZfQXJyYXk7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiBDX0ZpZWxkcyAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTdfMjYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gUG9pbnRlcjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDX0ZpZWxkcywgImZvcm1fZmllbGRzIik7CisKKyAgICAgIFAgOiBQb2ludGVyIDo9IENfRmllbGRzICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDFfMjEiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gUCA9IDxiPm51bGw8L2I+IDxiPm9yPC9iPiA8Yj5lbHNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDJfMjEiPkluZGV4PC9BPiAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwN18xMyI+RmllbGRfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDFfMjEiPkZybTwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICBQIDo9IFAgKyBwdHJkaWZmX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDJfMjEiPkluZGV4PC9BPikgLSAxKTsKKyAgICAgICAgIDxiPnJldHVybjwvYj4gUC48Yj5hbGw8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMV8xMyI+RmllbGRzPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzEzIj5GaWVsZF9Db3VudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3Ml8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzI2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IE5hdHVyYWwKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzc0XzE2Ij5Db3VudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3NF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzc0XzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENvdW50LCAiZmllbGRfY291bnQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83NzRfMTYiPkNvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzI2Ij5Gcm08L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwN18xMyI+RmllbGRfQ291bnQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjEyXzE0Ij5Nb3ZlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzgyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTJfMjAiPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjEzXzIwIj5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4NF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjE0XzIwIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODZfMTYiPk1vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODZfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4Nl8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg2XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODZfMTYiPkw8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODZfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4Nl8xNiI+QzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTW92ZSwgIm1vdmVfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4Nl8xNiI+TW92ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYxMl8yMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYxM18yMCI+TGluZTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjE0XzIwIj5Db2x1bW48L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4OV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTJfMTQiPk1vdmU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX25ldy4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODAyXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMjEiPkZpZWxkczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA0XzE2Ij5OZXdGb3JtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MDRfMTYiPkZpZWxkczwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3Rm9ybSwgIm5ld19mb3JtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA3XzciPk08L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMjEiPkZpZWxkczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18yMSI+RmllbGRzPC9BPidMYXN0KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMjEiPkZpZWxkczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18yMSI+RmllbGRzPC9BPidMYXN0KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODA3XzciPk08L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgwNF8xNiI+TmV3Rm9ybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18yMSI+RmllbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjIzXzIxIj5GaWVsZHM8L0E+J0ZpcnN0KSdBZGRyZXNzKTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MDdfNyI+TTwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MF80Ij5OdWxsX0Zvcm08L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MDdfNyI+TTwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjIzXzEzIj5DcmVhdGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjM0XzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYzNF8yMiI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI1XzE2Ij5GcmVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI1XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MjVfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRnJlZSwgImZyZWVfZm9ybSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyOF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODI1XzE2Ij5GcmVlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjM0XzIyIj5Gcm08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgyOF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODI4XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MzRfMjIiPkZybTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjBfNCI+TnVsbF9Gb3JtPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjM0XzE0Ij5EZWxldGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX29wdHMuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjQ0XzE0Ij5TZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0Ml8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjQ0XzI3Ij5Gcm08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NDVfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ1XzE2Ij5TZXRfRm9ybV9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ1XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDVfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0Nl8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODQ1XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Gb3JtX09wdHMsICJzZXRfZm9ybV9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ5XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IEZybU9TXzJfQ0ludCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjQ1XzI3Ij5PcHRpb25zPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1MF83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODUwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODQ1XzE2Ij5TZXRfRm9ybV9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjQ0XzI3Ij5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDlfNyI+T3B0PC9BPik7CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg1MF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODUwXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY0NF8xNCI+U2V0X09wdGlvbnM8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUwXzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2MF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUwXzMwIj5Gcm08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODYxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTFfMzAiPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1Ml8zMCI+T248L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjRfMTYiPkZvcm1fT3B0c19PbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODY0XzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2NV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODY0XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZvcm1fT3B0c19PbiwgImZvcm1fb3B0c19vbiIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY3XzE2Ij5Gb3JtX09wdHNfT2ZmPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjdfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2OF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODY3XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZvcm1fT3B0c19PZmYsICJmb3JtX29wdHNfb2ZmIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODcxXzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzJfNyI+T3B0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gRnJtT1NfMl9DSW50ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTFfMzAiPk9wdGlvbnM8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1Ml8zMCI+T248L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NzFfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjRfMTYiPkZvcm1fT3B0c19PbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1MF8zMCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODcyXzciPk9wdDwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg3MV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2N18xNiI+Rm9ybV9PcHRzX09mZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1MF8zMCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODcyXzciPk9wdDwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODcxXzciPkVycjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NzFfNyI+RXJyPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUwXzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NThfMTQiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg2XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NThfMjciPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTlfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4OV8xNiI+Rm9ybV9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84ODlfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9PcHRzLCAiZm9ybV9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkyXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg4OV8xNiI+Rm9ybV9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjU4XzI3Ij5Gcm08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjU5XzI3Ij5PcHRpb25zPC9BPiA6PSBDSW50XzJfRnJtT1MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg5Ml83Ij5SZXM8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjU4XzE0Ij5HZXRfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY2M18xMyI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY2M18yNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MF80Ij5OdWxsX0Zvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTAxXzciPkZvczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1OF8xNCI+R2V0X09wdGlvbnM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NjNfMjYiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkwMV83Ij5Gb3M8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTAxXzciPkZvczwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY2M18xMyI+R2V0X09wdGlvbnM8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX3Bvc3QuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjcyXzE0Ij5Qb3N0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzJfMjAiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjczXzIwIj5Qb3N0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTZfMTYiPk1fUG9zdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTE2XzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1fUG9zdCwgInBvc3RfZm9ybSIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE4XzE2Ij5NX1VucG9zdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxOF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTE4XzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1fVW5wb3N0LCAidW5wb3N0X2Zvcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MjFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzNfMjAiPlBvc3Q8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MjFfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MTZfMTYiPk1fUG9zdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY3Ml8yMCI+RnJtPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTIxXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTE4XzE2Ij5NX1VucG9zdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY3Ml8yMCI+RnJtPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MjFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkyMV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzJfMTQiPlBvc3Q8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2N1cnNvci4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82ODNfMTQiPlBvc2l0aW9uX0N1cnNvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzOV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjgzXzMxIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDFfMTYiPlBvc19Gb3JtX0N1cnNvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0MV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTQxXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFBvc19Gb3JtX0N1cnNvciwgInBvc19mb3JtX2N1cnNvciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0NF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTQxXzE2Ij5Qb3NfRm9ybV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82ODNfMzEiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk0NF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTQ0XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4M18xNCI+UG9zaXRpb25fQ3Vyc29yPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9kYXRhLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjkyXzEzIj5EYXRhX0FoZWFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTU3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTJfMjUiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTlfMTYiPkFoZWFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTU5XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NTlfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQWhlYWQsICJkYXRhX2FoZWFkIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTYyXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk1OV8xNiI+QWhlYWQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTJfMjUiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTYyXzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+Q3Vyc2VzX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjkyXzEzIj5EYXRhX0FoZWFkPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjk3XzEzIj5EYXRhX0JlaGluZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjk3XzI2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTc1XzE2Ij5CZWhpbmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzVfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk3NV8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBCZWhpbmQsICJkYXRhX2JlaGluZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3OF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NzVfMTYiPkJlaGluZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5N18yNiI+RnJtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NzhfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTdfMTMiPkRhdGFfQmVoaW5kPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9kcml2ZXIuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MTFfMTMiPkRyaXZlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5M18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzExXzIxIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5NF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzEyXzIxIj5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDVfOSI+RHJpdmVyX1Jlc3VsdDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTk2XzE2Ij5Gcm1fRHJpdmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTk2XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTZfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTk2XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTZfMTYiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRnJtX0RyaXZlciwgImZvcm1fZHJpdmVyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTk5XzciPlI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTk2XzE2Ij5Gcm1fRHJpdmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzExXzIxIj5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzEyXzIxIj5LZXk8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTlfNyI+UjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTk5XzciPlI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzg4XzQiPkVfVW5rbm93bl9Db21tYW5kPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDdfMjciPlVua25vd25fUmVxdWVzdDwvQT47CisgICAgICAgICA8Yj5lbHNpZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTk5XzciPlI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkzXzQiPkVfSW52YWxpZF9GaWVsZDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzA4XzI3Ij5JbnZhbGlkX0ZpZWxkPC9BPjsKKyAgICAgICAgIDxiPmVsc2lmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTlfNyI+UjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTJfNCI+RV9SZXF1ZXN0X0RlbmllZDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzA2XzI3Ij5SZXF1ZXN0X0RlbmllZDwvQT47CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTk5XzciPlI8L0E+KTsKKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzA1XzI3Ij5Gb3JtX09rPC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzA1XzI3Ij5Gb3JtX09rPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MTFfMTMiPkRyaXZlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fcGFnZS4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIzXzE0Ij5TZXRfQ3VycmVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyM18yNyI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI0XzI3Ij5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjZfMTYiPlNldF9DdXJyZW50X0ZsZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjZfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjZfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyNl80NSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTAyNl8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0N1cnJlbnRfRmxkLCAic2V0X2N1cnJlbnRfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI5XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDI2XzE2Ij5TZXRfQ3VycmVudF9GbGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjNfMjciPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyNF8yNyI+RmxkPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDI5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDI5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyM18xNCI+U2V0X0N1cnJlbnQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzOF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI5XzEzIj5DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzOF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI5XzIyIj5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0MF8xNiI+Q3VycmVudF9GbGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDQwXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDdXJyZW50X0ZsZCwgImN1cnJlbnRfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQzXzciPkZsZDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDQwXzE2Ij5DdXJyZW50X0ZsZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyOV8yMiI+RnJtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDQzXzciPkZsZDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA0M183Ij5GbGQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjlfMTMiPkN1cnJlbnQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNF8xNCI+U2V0X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDUzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MzRfMjQiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MzVfMjQiPlBhZ2U8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjBfOSI+UGFnZV9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyMF85Ij5QYWdlX051bWJlcjwvQT4nRmlyc3QpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTZfMTYiPlNldF9Gcm1fUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTZfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1Nl80MiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA1Nl8xNiI+UGc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Gcm1fUGFnZSwgInNldF9mb3JtX3BhZ2UiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU5XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDU2XzE2Ij5TZXRfRnJtX1BhZ2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MzRfMjQiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MzVfMjQiPlBhZ2U8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDU5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDU5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNF8xNCI+U2V0X1BhZ2U8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQwXzEzIj5QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2OF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQwXzE5Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyMF85Ij5QYWdlX051bWJlcjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3MF8xNiI+R2V0X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDcwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDcwXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9QYWdlLCAiZm9ybV9wYWdlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3M183Ij5QPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA3MF8xNiI+R2V0X1BhZ2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDBfMTkiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA3M183Ij5QPC9BPiAmbHQ7IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIwXzkiPlBhZ2VfTnVtYmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA3M183Ij5QPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQwXzEzIj5QYWdlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQ1XzEzIj5HZXRfSW5kZXg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDgyXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDVfMjQiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IFBvc2l0aXZlCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODRfMTYiPkdldF9GaWVsZGluZGV4PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4NF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4NF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X0ZpZWxkaW5kZXgsICJmaWVsZF9pbmRleCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4NF8xNiI+R2V0X0ZpZWxkaW5kZXg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDVfMjQiPkZsZDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4N183Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiBQb3NpdGl2ZSAoTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4N183Ij5SZXM8L0E+KSArIFBvc2l0aXZlJ0ZpcnN0KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQ1XzEzIj5HZXRfSW5kZXg8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fbmV3X3BhZ2UuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc1N18xNCI+U2V0X05ld19QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwMl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzU3XzI4Ij5GbGQ8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwM18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzU4XzI4Ij5OZXdfUGFnZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwNV8xNiI+U2V0X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTA1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTA1XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTA1XzM5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTA1XzE2Ij5GbGc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9QYWdlLCAic2V0X25ld19wYWdlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwOF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEwNV8xNiI+U2V0X1BhZ2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NTdfMjgiPkZsZDwvQT4sIEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NThfMjgiPk5ld19QYWdlPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEwOF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEwOF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NTdfMTQiPlNldF9OZXdfUGFnZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTE3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NjNfMTMiPklzX05ld19QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExN18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzYzXzI2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTlfMTYiPklzX05ldzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTlfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMTlfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIElzX05ldywgIm5ld19wYWdlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyMl83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTE5XzE2Ij5Jc19OZXc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NjNfMjYiPkZsZDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEyMl83Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc2M18xMyI+SXNfTmV3X1BhZ2U8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzE0Ij5GcmVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzMV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTMyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzdfMjAiPkZyZWVfRmllbGRzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiBSZWxlYXNlIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCisgICAgICAgIChGaWVsZF9BcnJheSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzdfMjAiPkZyZWVfRmllbGRzPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzhfMTQiPkk8L0E+PC9GT05UPiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT4nRmlyc3QgLi4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNl8yMCI+RkE8L0E+J0xhc3QgLSAxKSA8Yj5sb29wPC9iPgorICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNl8yMCI+RkE8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTM4XzE0Ij5JPC9BPikgLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTlfNCI+TnVsbF9GaWVsZDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMxNV8xNCI+RGVsZXRlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMzhfMTQiPkk8L0E+KSk7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIFJlbGVhc2UgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNl8yMCI+RkE8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzE0Ij5GcmVlPC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNDlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwMl8xMyI+RGVmYXVsdF9GaWVsZF9PcHRpb25zPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDE2XzEzIj5HZXRfT3B0aW9uczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5EZWZhdWx0X0ZpZWxkX09wdGlvbnM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTU1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjVfMTMiPkRlZmF1bHRfRm9ybV9PcHRpb25zPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjYzXzEzIj5HZXRfT3B0aW9uczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwXzQiPk51bGxfRm9ybTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjVfMTMiPkRlZmF1bHRfRm9ybV9PcHRpb25zPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOWE1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bQpAQCAtMCwwICsxLDc4NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm0gICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjI5IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZm9ybSBiaW5kaW5nLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQuIFBsZWFzZSBkb24ndCBjaGFuZ2UgaXQgbWFudWFsbHkhPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJ1biB0aGUgZ2VuZXJhdG9yIGluc3RlYWQuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbTsKKzxiPndpdGg8L2I+IEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MV80MCI+Rm9ybXM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IExpbmtlcl9PcHRpb25zICgiLWxmb3JtdyIpOworICAgPGI+cHJhZ21hPC9iPiBMaW5rZXJfT3B0aW9ucyAoIi1sbmN1cnNlc3ciKTsKKworICAgU3BhY2UgOiBDaGFyYWN0ZXIgPGI+cmVuYW1lczwvYj4gQWRhLkNoYXJhY3RlcnMuTGF0aW5fMS5TcGFjZTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl85Ij5GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICA8Yj5pczwvYj4gPGI+cHJpdmF0ZTwvYj47CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzkiPkZvcm08L0E+PC9GT05UPiAgICAgICAgIDxiPmlzPC9iPiA8Yj5wcml2YXRlPC9iPjsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfNCI+TnVsbF9Gb3JtPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml85Ij5GaWVsZF9KdXN0aWZpY2F0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzMzIj5Ob25lPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMzMiPkxlZnQ8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8zMyI+Q2VudGVyPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMzMiPlJpZ2h0PC9BPjwvRk9OVD4pOworCisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzEwIj5WaXNpYmxlPC9BPjwvRk9OVD4gICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMTAiPkFjdGl2ZTwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Ml8xMCI+UHVibGljPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzEwIj5FZGl0PC9BPjwvRk9OVD4gICAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzRfMTAiPldyYXA8L0E+PC9GT05UPiAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NV8xMCI+Qmxhbms8L0E+PC9GT05UPiAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzEwIj5BdXRvX1NraXA8L0E+PC9GT05UPiAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfMTAiPk51bGxfT2s8L0E+PC9GT05UPiAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8xMCI+UGFzc19PazwvQT48L0ZPTlQ+ICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5XzEwIj5TdGF0aWM8L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4pOworCisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+IDxiPnVzZTwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcwXzEwIj5WaXNpYmxlPC9BPiAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICAwOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzFfMTAiPkFjdGl2ZTwvQT4gICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDEgLi4gIDE7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83Ml8xMCI+UHVibGljPC9BPiAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMiAuLiAgMjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczXzEwIj5FZGl0PC9BPiAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAzIC4uICAzOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzRfMTAiPldyYXA8L0E+ICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDQgLi4gIDQ7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NV8xMCI+Qmxhbms8L0E+ICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNSAuLiAgNTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc2XzEwIj5BdXRvX1NraXA8L0E+ICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA2IC4uICA2OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzdfMTAiPk51bGxfT2s8L0E+ICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDcgLi4gIDc7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83OF8xMCI+UGFzc19PazwvQT4gICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgOCAuLiAgODsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc5XzEwIj5TdGF0aWM8L0E+ICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA5IC4uICA5OworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPidTaXplIDxiPnVzZTwvYj4gMzI7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uRG5sPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByYWdtYTwvYj4gV2FybmluZ3MgKE9uKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTQ5XzEzIj5EZWZhdWx0X0ZpZWxkX09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgaW5pdGlhbCBkZWZhdWx0cyBmb3IgdGhlIGZpZWxkIG9wdGlvbnMuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5EZWZhdWx0X0ZpZWxkX09wdGlvbnM8L0E+KTsKKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfMTAiPk5MX092ZXJsb2FkPC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTBfMTAiPkJTX092ZXJsb2FkPC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPik7CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA5XzEwIj5OTF9PdmVybG9hZDwvQT4gPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICAwOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTEwXzEwIj5CU19PdmVybG9hZDwvQT4gPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAxIC4uICAxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPidTaXplIDxiPnVzZTwvYj4gMzI7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uRG5sPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByYWdtYTwvYj4gV2FybmluZ3MgKE9uKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTU1XzEzIj5EZWZhdWx0X0Zvcm1fT3B0aW9uczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBpbml0aWFsIGRlZmF1bHRzIGZvciB0aGUgZm9ybSBvcHRpb25zLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyNV8xMyI+RGVmYXVsdF9Gb3JtX09wdGlvbnM8L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IE5hdHVyYWw7CisKKyAgIDxiPnR5cGU8L2I+IEZpZWxkX0FycmF5IDxiPmlzPC9iPiA8Yj5hcnJheTwvYj4gKFBvc2l0aXZlIDxiPnJhbmdlPC9iPiAmbHQ7Jmd0OykgPGI+b2Y8L2I+IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgRmllbGRfQXJyYXkpOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF85Ij5GaWVsZF9BcnJheV9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiBGaWVsZF9BcnJheTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEzMV8xNCI+RnJlZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNl8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEzMV8yMCI+RkE8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNF85Ij5GaWVsZF9BcnJheV9BY2Nlc3M8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTMyXzIwIj5GcmVlX0ZpZWxkczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZWxlYXNlIHRoZSBtZW1vcnkgZm9yIGFuIGFsbG9jYXRlZCBmaWVsZCBhcnJheTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJZiBGcmVlX0ZpZWxkcyBpcyBUcnVlLCBjYWxsIERlbGV0ZSgpIGZvciBhbGwgdGhlIGZpZWxkcyBpbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgYXJyYXkuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82OF85Ij5LZXlfQ29kZTwvQT4gPGI+cmFuZ2U8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxKSAuLiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTcpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBwcmVmaXggRl8gc3RhbmRzIGZvciAiRm9ybSBSZXF1ZXN0IjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDVfNCI+Rl9OZXh0X1BhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDZfNCI+Rl9QcmV2aW91c19QYWdlPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDdfNCI+Rl9GaXJzdF9QYWdlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfNCI+Rl9MYXN0X1BhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0OworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MF80Ij5GX05leHRfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV80Ij5GX1ByZXZpb3VzX0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDY7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Ml80Ij5GX0ZpcnN0X0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1M180Ij5GX0xhc3RfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDg7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NF80Ij5GX1NvcnRlZF9OZXh0X0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NV80Ij5GX1NvcnRlZF9QcmV2aW91c19GaWVsZDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDEwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTZfNCI+Rl9Tb3J0ZWRfRmlyc3RfRmllbGQ8L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU3XzQiPkZfU29ydGVkX0xhc3RfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OF80Ij5GX0xlZnRfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDEzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTlfNCI+Rl9SaWdodF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxNDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwXzQiPkZfVXBfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MV80Ij5GX0Rvd25fRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE2OworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2M180Ij5GX05leHRfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE3OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjRfNCI+Rl9QcmV2aW91c19DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxODsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY1XzQiPkZfTmV4dF9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Nl80Ij5GX1ByZXZpb3VzX0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDIwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjdfNCI+Rl9OZXh0X1dvcmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4XzQiPkZfUHJldmlvdXNfV29yZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OV80Ij5GX0JlZ2luX0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDIzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzBfNCI+Rl9FbmRfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyNDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxXzQiPkZfQmVnaW5fTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml80Ij5GX0VuZF9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDI2OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzNfNCI+Rl9MZWZ0X0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyNzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc0XzQiPkZfUmlnaHRfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjg7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NV80Ij5GX1VwX0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDI5OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzZfNCI+Rl9Eb3duX0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzMDsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzhfNCI+Rl9OZXdfTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5XzQiPkZfSW5zZXJ0X0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MF80Ij5GX0luc2VydF9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDMzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODFfNCI+Rl9EZWxldGVfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzNDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgyXzQiPkZfRGVsZXRlX1ByZXZpb3VzPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4M180Ij5GX0RlbGV0ZV9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDM2OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODRfNCI+Rl9EZWxldGVfV29yZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzNzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1XzQiPkZfQ2xlYXJfRU9MPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzg7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Nl80Ij5GX0NsZWFyX0VPRjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDM5OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODdfNCI+Rl9DbGVhcl9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0MDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg4XzQiPkZfT3ZlcmxheV9Nb2RlPC9BPjwvRk9OVD4gICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4OV80Ij5GX0luc2VydF9Nb2RlPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQyOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnRpY2FsIFNjcm9sbGluZzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTJfNCI+Rl9TY3JvbGxGb3J3YXJkX0xpbmU8L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0MzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzQiPkZfU2Nyb2xsQmFja3dhcmRfTGluZTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDQ7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF80Ij5GX1Njcm9sbEZvcndhcmRfUGFnZTwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQ1OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTVfNCI+Rl9TY3JvbGxCYWNrd2FyZF9QYWdlPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0NjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2XzQiPkZfU2Nyb2xsRm9yd2FyZF9IYWxmUGFnZTwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N180Ij5GX1Njcm9sbEJhY2t3YXJkX0hhbGZQYWdlPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQ4OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEhvcml6b250YWwgU2Nyb2xsaW5nPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMF80Ij5GX0hTY3JvbGxGb3J3YXJkX0NoYXI8L0E+PC9GT05UPiAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQ5OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDFfNCI+Rl9IU2Nyb2xsQmFja3dhcmRfQ2hhcjwvQT48L0ZPTlQ+ICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1MDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyXzQiPkZfSFNjcm9sbEZvcndhcmRfTGluZTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwM180Ij5GX0hTY3JvbGxCYWNrd2FyZF9MaW5lPC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDUyOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDRfNCI+Rl9IU2Nyb2xsRm9yd2FyZF9IYWxmTGluZTwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1MzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA1XzQiPkZfSFNjcm9sbEJhY2t3YXJkX0hhbGZMaW5lPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTQ7CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA3XzQiPkZfVmFsaWRhdGVfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOF80Ij5GX05leHRfQ2hvaWNlPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDU2OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDlfNCI+Rl9QcmV2aW91c19DaG9pY2U8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1NzsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBGb3IgdGhvc2Ugd2hvIGxpa2UgdGhlIG9sZCAnQycgc3R5bGUgcmVxdWVzdCBuYW1lczwvRU0+PC9GT05UPgorICAgUkVRX05FWFRfUEFHRSAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0NV80Ij5GX05leHRfUGFnZTwvQT47CisgICBSRVFfUFJFVl9QQUdFICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQ2XzQiPkZfUHJldmlvdXNfUGFnZTwvQT47CisgICBSRVFfRklSU1RfUEFHRSAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQ3XzQiPkZfRmlyc3RfUGFnZTwvQT47CisgICBSRVFfTEFTVF9QQUdFICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQ4XzQiPkZfTGFzdF9QYWdlPC9BPjsKKworICAgUkVRX05FWFRfRklFTEQgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE1MF80Ij5GX05leHRfRmllbGQ8L0E+OworICAgUkVRX1BSRVZfRklFTEQgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE1MV80Ij5GX1ByZXZpb3VzX0ZpZWxkPC9BPjsKKyAgIFJFUV9GSVJTVF9GSUVMRCAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNTJfNCI+Rl9GaXJzdF9GaWVsZDwvQT47CisgICBSRVFfTEFTVF9GSUVMRCAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTUzXzQiPkZfTGFzdF9GaWVsZDwvQT47CisgICBSRVFfU05FWFRfRklFTEQgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTU0XzQiPkZfU29ydGVkX05leHRfRmllbGQ8L0E+OworICAgUkVRX1NQUkVWX0ZJRUxEICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE1NV80Ij5GX1NvcnRlZF9QcmV2aW91c19GaWVsZDwvQT47CisgICBSRVFfU0ZJUlNUX0ZJRUxEIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTU2XzQiPkZfU29ydGVkX0ZpcnN0X0ZpZWxkPC9BPjsKKyAgIFJFUV9TTEFTVF9GSUVMRCAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNTdfNCI+Rl9Tb3J0ZWRfTGFzdF9GaWVsZDwvQT47CisgICBSRVFfTEVGVF9GSUVMRCAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTU4XzQiPkZfTGVmdF9GaWVsZDwvQT47CisgICBSRVFfUklHSFRfRklFTEQgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTU5XzQiPkZfUmlnaHRfRmllbGQ8L0E+OworICAgUkVRX1VQX0ZJRUxEICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2MF80Ij5GX1VwX0ZpZWxkPC9BPjsKKyAgIFJFUV9ET1dOX0ZJRUxEICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNjFfNCI+Rl9Eb3duX0ZpZWxkPC9BPjsKKworICAgUkVRX05FWFRfQ0hBUiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2M180Ij5GX05leHRfQ2hhcjwvQT47CisgICBSRVFfUFJFVl9DSEFSICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTY0XzQiPkZfUHJldmlvdXNfQ2hhcjwvQT47CisgICBSRVFfTkVYVF9MSU5FICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTY1XzQiPkZfTmV4dF9MaW5lPC9BPjsKKyAgIFJFUV9QUkVWX0xJTkUgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNjZfNCI+Rl9QcmV2aW91c19MaW5lPC9BPjsKKyAgIFJFUV9ORVhUX1dPUkQgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNjdfNCI+Rl9OZXh0X1dvcmQ8L0E+OworICAgUkVRX1BSRVZfV09SRCAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2OF80Ij5GX1ByZXZpb3VzX1dvcmQ8L0E+OworICAgUkVRX0JFR19GSUVMRCAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2OV80Ij5GX0JlZ2luX0ZpZWxkPC9BPjsKKyAgIFJFUV9FTkRfRklFTEQgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNzBfNCI+Rl9FbmRfRmllbGQ8L0E+OworICAgUkVRX0JFR19MSU5FICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3MV80Ij5GX0JlZ2luX0xpbmU8L0E+OworICAgUkVRX0VORF9MSU5FICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3Ml80Ij5GX0VuZF9MaW5lPC9BPjsKKyAgIFJFUV9MRUZUX0NIQVIgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNzNfNCI+Rl9MZWZ0X0NoYXI8L0E+OworICAgUkVRX1JJR0hUX0NIQVIgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3NF80Ij5GX1JpZ2h0X0NoYXI8L0E+OworICAgUkVRX1VQX0NIQVIgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3NV80Ij5GX1VwX0NoYXI8L0E+OworICAgUkVRX0RPV05fQ0hBUiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3Nl80Ij5GX0Rvd25fQ2hhcjwvQT47CisKKyAgIFJFUV9ORVdfTElORSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNzhfNCI+Rl9OZXdfTGluZTwvQT47CisgICBSRVFfSU5TX0NIQVIgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTc5XzQiPkZfSW5zZXJ0X0NoYXI8L0E+OworICAgUkVRX0lOU19MSU5FICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE4MF80Ij5GX0luc2VydF9MaW5lPC9BPjsKKyAgIFJFUV9ERUxfQ0hBUiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODFfNCI+Rl9EZWxldGVfQ2hhcjwvQT47CisgICBSRVFfREVMX1BSRVYgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTgyXzQiPkZfRGVsZXRlX1ByZXZpb3VzPC9BPjsKKyAgIFJFUV9ERUxfTElORSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODNfNCI+Rl9EZWxldGVfTGluZTwvQT47CisgICBSRVFfREVMX1dPUkQgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTg0XzQiPkZfRGVsZXRlX1dvcmQ8L0E+OworICAgUkVRX0NMUl9FT0wgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE4NV80Ij5GX0NsZWFyX0VPTDwvQT47CisgICBSRVFfQ0xSX0VPRiAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTg2XzQiPkZfQ2xlYXJfRU9GPC9BPjsKKyAgIFJFUV9DTFJfRklFTEQgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODdfNCI+Rl9DbGVhcl9GaWVsZDwvQT47CisgICBSRVFfT1ZMX01PREUgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTg4XzQiPkZfT3ZlcmxheV9Nb2RlPC9BPjsKKyAgIFJFUV9JTlNfTU9ERSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODlfNCI+Rl9JbnNlcnRfTW9kZTwvQT47CisKKyAgIFJFUV9TQ1JfRkxJTkUgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xOTJfNCI+Rl9TY3JvbGxGb3J3YXJkX0xpbmU8L0E+OworICAgUkVRX1NDUl9CTElORSAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE5M180Ij5GX1Njcm9sbEJhY2t3YXJkX0xpbmU8L0E+OworICAgUkVRX1NDUl9GUEFHRSAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE5NF80Ij5GX1Njcm9sbEZvcndhcmRfUGFnZTwvQT47CisgICBSRVFfU0NSX0JQQUdFICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTk1XzQiPkZfU2Nyb2xsQmFja3dhcmRfUGFnZTwvQT47CisgICBSRVFfU0NSX0ZIUEFHRSAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTk2XzQiPkZfU2Nyb2xsRm9yd2FyZF9IYWxmUGFnZTwvQT47CisgICBSRVFfU0NSX0JIUEFHRSAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTk3XzQiPkZfU2Nyb2xsQmFja3dhcmRfSGFsZlBhZ2U8L0E+OworCisgICBSRVFfU0NSX0ZDSEFSICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjAwXzQiPkZfSFNjcm9sbEZvcndhcmRfQ2hhcjwvQT47CisgICBSRVFfU0NSX0JDSEFSICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjAxXzQiPkZfSFNjcm9sbEJhY2t3YXJkX0NoYXI8L0E+OworICAgUkVRX1NDUl9IRkxJTkUgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzIwMl80Ij5GX0hTY3JvbGxGb3J3YXJkX0xpbmU8L0E+OworICAgUkVRX1NDUl9IQkxJTkUgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzIwM180Ij5GX0hTY3JvbGxCYWNrd2FyZF9MaW5lPC9BPjsKKyAgIFJFUV9TQ1JfSEZIQUxGICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yMDRfNCI+Rl9IU2Nyb2xsRm9yd2FyZF9IYWxmTGluZTwvQT47CisgICBSRVFfU0NSX0hCSEFMRiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjA1XzQiPkZfSFNjcm9sbEJhY2t3YXJkX0hhbGZMaW5lPC9BPjsKKworICAgUkVRX1ZBTElEQVRJT04gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzIwN180Ij5GX1ZhbGlkYXRlX0ZpZWxkPC9BPjsKKyAgIFJFUV9ORVhUX0NIT0lDRSAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yMDhfNCI+Rl9OZXh0X0Nob2ljZTwvQT47CisgICBSRVFfUFJFVl9DSE9JQ0UgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjA5XzQiPkZfUHJldmlvdXNfQ2hvaWNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODFfMTQiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3Nl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODFfMjgiPktleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc3XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84Ml8zMyI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworCisgICA8Yj5mdW5jdGlvbjwvYj4gIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MF8xMyI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc5XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MF8yNyI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChSZXF1ZXN0X05hbWUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV4Y2VwdGlvbnMgIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT48L0ZPTlQ+IDogPGI+ZXhjZXB0aW9uPC9iPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDhfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5M18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4XzIxIj5IZWlnaHQ8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTRfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwOV8yMSI+V2lkdGg8L0E+PC9GT05UPiAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTVfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMF8yMSI+VG9wPC9BPjwvRk9OVD4gICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTZfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMV8yMSI+TGVmdDwvQT48L0ZPTlQ+ICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5N18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEyXzIxIj5PZmZfU2NyZWVuPC9BPjwvRk9OVD4gICA6IE5hdHVyYWwgOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOThfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExM18yMSI+TW9yZV9CdWZmZXJzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0KQorICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+bmV3X2ZpZWxkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIG92ZXJsb2FkZWQgQ3JlYXRlIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gTmV3X0ZpZWxkICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwNF8yNCI+SGVpZ2h0PC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA1XzI0Ij5XaWR0aDwvQT48L0ZPTlQ+ICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwNl8yNCI+VG9wPC9BPjwvRk9OVD4gICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDdfMjQiPkxlZnQ8L0E+PC9GT05UPiAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDhfMjQiPk9mZl9TY3JlZW48L0E+PC9GT05UPiAgIDogTmF0dXJhbCA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwOV8yNCI+TW9yZV9CdWZmZXJzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTNfMTMiPkNyZWF0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPm5ld19maWVsZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKE5ld19GaWVsZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTMxXzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTVfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEzMV8yMiI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mcmVlX2ZpZWxkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlc2V0IEZsZCB0byBOdWxsX0ZpZWxkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIG92ZXJsb2FkZWQgRGVsZXRlIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE0N18xMyI+RHVwbGljYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNDdfMjQiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjJfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE0OF8yNCI+VG9wPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNDlfMjQiPkxlZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5kdXBfZmllbGQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChEdXBsaWNhdGUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyOF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTY4XzEzIj5MaW5rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzI4XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNjhfMTkiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzI5XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNjlfMTkiPlRvcDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzBfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE3MF8xOSI+TGVmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmxpbmtfZmllbGQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjhfMTMiPkxpbms8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTNfMTQiPlNldF9KdXN0aWZpY2F0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM5XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTNfMzMiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQwXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTRfMzMiPkp1c3Q8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82Ml85Ij5GaWVsZF9KdXN0aWZpY2F0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82Ml8zMyI+Tm9uZTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3guaHRtbCI+c2V0X2ZpZWxkX2p1c3QoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzlfMTQiPlNldF9KdXN0aWZpY2F0aW9uPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMTFfMTMiPkdldF9KdXN0aWZpY2F0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ1XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMTFfMzIiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyXzkiPkZpZWxkX0p1c3RpZmljYXRpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3guaHRtbCI+ZmllbGRfanVzdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM0NV8xMyI+R2V0X0p1c3RpZmljYXRpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjI1XzE0Ij5TZXRfQnVmZmVyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIyNl83Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMjdfNyI+QnVmZmVyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPidGaXJzdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIyOF83Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5zZXRfZmllbGRfYnVmZmVyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbmxpbmVkPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjUwXzE0Ij5HZXRfQnVmZmVyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI1MV83Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNTJfNyI+QnVmZmVyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPidGaXJzdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI1M183Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+ZmllbGRfYnVmZmVyKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjYyXzEzIj5HZXRfQnVmZmVyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI2M183Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNjRfNyI+QnVmZmVyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPidGaXJzdCkgPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZpZWxkX2J1ZmZlcigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1lIGJ1dCBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9CdWZmZXIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNzVfMTQiPlNldF9TdGF0dXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI3NV8yNiI+RmxkPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNzZfMjYiPlN0YXR1czwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPnNldF9maWVsZF9zdGF0dXMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNzZfMTQiPlNldF9TdGF0dXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzgyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yOTFfMTMiPkNoYW5nZWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI5MV8yMiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+ZmllbGRfc3RhdHVzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzgyXzEzIj5DaGFuZ2VkPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMwN18xNCI+U2V0X01heGltdW1fU2l6ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4N18zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzA3XzMyIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODhfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMwOF8zMiI+TWF4PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gTmF0dXJhbCA6PSAwKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+c2V0X2ZpZWxkX21heCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4N18xNCI+U2V0X01heGltdW1fU2l6ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMjdfMTQiPlNldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMjdfMjciPkZsZDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMjhfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5zZXRfZmllbGRfb3B0cygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBbiBvdmVybG9hZGVkIHZlcnNpb24gaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM0NV8xNCI+U3dpdGNoX09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM0NV8zMCI+RmxkPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM0Nl8zMCI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwNV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ3XzMwIj5PbjwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+ZmllbGRfb3B0c19vbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGZpZWxkX29wdHNfb2ZmKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gb3ZlcmxvYWRlZCB2ZXJzaW9uIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDExXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNzFfMTQiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDExXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNzFfMjciPkZsZDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzcyXzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZpZWxkX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zODRfMTMiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zODRfMjYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5maWVsZF9vcHRzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIG92ZXJsb2FkZWQgdmVyc2lvbiBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmU8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzk5XzE0Ij5TZXRfRm9yZWdyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MDBfNyI+RmxkPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MDFfNyI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDAyXzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5zZXRfZmllbGRfZm9yZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyNl8xNCI+U2V0X0ZvcmVncm91bmQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDIxXzE0Ij5Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MjFfMjYiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MjJfMjYiPkZvcmU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5maWVsZF9mb3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQzMF8xNCI+Rm9yZWdyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzOV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDMwXzI2Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQzMV8yNiI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDMyXzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+ZmllbGRfZm9yZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEZvcmVncm91bmQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NDNfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0NF83Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0NV83Ij5CYWNrPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NDZfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPnNldF9maWVsZF9iYWNrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X0JhY2tncm91bmQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NjVfMTQiPkJhY2tncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ2NV8yNiI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ2Nl8yNiI+QmFjazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZpZWxkX2JhY2soKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDc0XzE0Ij5CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NzRfMjYiPkZsZDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDc1XzI2Ij5CYWNrPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDYxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NzZfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5maWVsZF9iYWNrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoQmFja2dyb3VuZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ4N18xNCI+U2V0X1BhZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjZfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ4N18zMyI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2N18zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDg4XzMzIj5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIgOj0gU3BhY2UpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+c2V0X2ZpZWxkX3BhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2Nl8xNCI+U2V0X1BhZF9DaGFyYWN0ZXI8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTA0XzE0Ij5QYWRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDcyXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MDRfMjkiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzNfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUwNV8yOSI+UGFkPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IENoYXJhY3Rlcik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5maWVsZF9wYWQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzJfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfaW5mby4zeC5odG1sIj5mb3JtX2ZpZWxkX2luZm8uM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTE5XzE0Ij5JbmZvPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDgyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MTlfMjAiPkZsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyMF8yMCI+TGluZXM8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4NF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTIxXzIwIj5Db2x1bW5zPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyMl8yMCI+Rmlyc3RfUm93PC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg2XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjNfMjAiPkZpcnN0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg3XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjRfMjAiPk9mZl9TY3JlZW48L0E+PC9GT05UPiAgICAgICAgIDogPGI+b3V0PC9iPiBOYXR1cmFsOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg4XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjVfMjAiPkFkZGl0aW9uYWxfQnVmZmVyczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2luZm8uM3guaHRtbCI+ZmllbGRfaW5mbygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4Ml8xNCI+SW5mbzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NTNfMTQiPkR5bmFtaWNfSW5mbzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5M18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTUzXzI4Ij5GbGQ8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1NF8yOCI+TGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5NV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU1XzI4Ij5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1Nl8yOCI+TWF4PC9BPjwvRk9OVD4gICAgIDogPGI+b3V0PC9iPiBOYXR1cmFsKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmR5bmFtaWNfZmllbGRfaW5mbygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5M18xNCI+RHluYW1pY19JbmZvPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbi4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81ODJfMTQiPlNldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4Ml8yNiI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4M18yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPnNldF9mb3JtX3dpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUwNV8xNCI+U2V0X1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU5OF8xMyI+R2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTk4XzI1Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTExXzEzIj5HZXRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxMF8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxMF8zMCI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTE3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MTFfMzAiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3dpbi4zeC5odG1sIj5zZXRfZm9ybV9zdWIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTZfMTQiPlNldF9TdWJfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjI2XzEzIj5HZXRfU3ViX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyMl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjI2XzI5Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fc3ViKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTIyXzEzIj5HZXRfU3ViX1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MzhfMTQiPlNjYWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI3XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MzhfMjEiPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjhfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYzOV8yMSI+TGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDBfMjEiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3dpbi4zeC5odG1sIj5zY2FsZV9mb3JtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTI3XzE0Ij5TY2FsZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vay4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5wcm9jZWR1cmU8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzN180OSI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2Ml8xNCI+U2V0X0ZpZWxkX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0MV8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjYyXzM1Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDJfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2M18zNSI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPnNldF9maWVsZF9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQxXzE0Ij5TZXRfRmllbGRfSW5pdF9Ib29rPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY3OF8xNCI+U2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0N18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjc4XzM1Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDhfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY3OV8zNSI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPnNldF9maWVsZF90ZXJtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQ3XzE0Ij5TZXRfRmllbGRfVGVybV9Ib29rPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY5NF8xNCI+U2V0X0Zvcm1fSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUzXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82OTRfMzQiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU0XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82OTVfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5zZXRfZm9ybV9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTUzXzE0Ij5TZXRfRm9ybV9Jbml0X0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzEwXzE0Ij5TZXRfRm9ybV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTlfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxMF8zNCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjBfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxMV8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPnNldF9mb3JtX3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTlfMTQiPlNldF9Gb3JtX1Rlcm1fSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjVfMTMiPkdldF9GaWVsZF9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjVfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2NV8xMyI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZpZWxkX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfRmllbGRfSW5pdF9Ib29rLCAiZmllbGRfaW5pdCIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzBfMTMiPkdldF9GaWVsZF9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzBfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3MF8xMyI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZpZWxkX3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfRmllbGRfVGVybV9Ib29rLCAiZmllbGRfdGVybSIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzVfMTMiPkdldF9Gb3JtX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTc1XzEzIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X0Zvcm1fSW5pdF9Ib29rLCAiZm9ybV9pbml0Iik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4MF8xMyI+R2V0X0Zvcm1fVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgwXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81ODBfMTMiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfRm9ybV9UZXJtX0hvb2ssICJmb3JtX3Rlcm0iKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzBfMTQiPlJlZGVmaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzBfMjQiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzczMV8yNCI+RmxkczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNF85Ij5GaWVsZF9BcnJheV9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5zZXRfZm9ybV9maWVsZHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81ODlfMTQiPlJlZGVmaW5lPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTVfMTQiPlNldF9GaWVsZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTVfMjYiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5Nl8yNiI+RmxkczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNF85Ij5GaWVsZF9BcnJheV9BY2Nlc3M8L0E+KSA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81ODlfMTQiPlJlZGVmaW5lPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5zZXRfZm9ybV9maWVsZHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkcyk7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwMV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzUyXzEzIj5GaWVsZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDFfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc1Ml8yMSI+RnJtPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwMl8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzUzXzIxIj5JbmRleDwvQT48L0ZPTlQ+IDogUG9zaXRpdmUpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGRzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjAxXzEzIj5GaWVsZHM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83NzJfMTMiPkZpZWxkX0NvdW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83NzJfMjYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gTmF0dXJhbDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5maWVsZF9jb3VudCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwN18xMyI+RmllbGRfQ291bnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzgyXzE0Ij5Nb3ZlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODJfMjAiPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxM18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzgzXzIwIj5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzg0XzIwIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5tb3ZlX2ZpZWxkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjEyXzE0Ij5Nb3ZlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX25ldy4zeC5odG1sIj5mb3JtX25ldy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgwMl8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjIzXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MDJfMjEiPkZpZWxkczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3LjN4Lmh0bWwiPm5ld19mb3JtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoQ3JlYXRlKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IE5ld19Gb3JtICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyOF8yMyI+RmllbGRzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzRfOSI+RmllbGRfQXJyYXlfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPgorICAgICA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMTMiPkNyZWF0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3LjN4Lmh0bWwiPm5ld19mb3JtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByYWdtYSBJbmxpbmUgKE5ld19Gb3JtKTs8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODIzXzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgyM18yMiI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3LjN4Lmh0bWwiPmZyZWVfZm9ybSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZXNldCBGcm0gdG8gTnVsbF9Gb3JtPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoRGVsZXRlKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODQyXzE0Ij5TZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0NF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODQyXzI3Ij5Gcm08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDNfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5zZXRfZm9ybV9vcHRzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X09wdGlvbnMpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjBfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjUwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjBfMzAiPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2MV8zMCI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODYyXzMwIj5PbjwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzX29uKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZm9ybV9vcHRzX29mZigpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU3dpdGNoX09wdGlvbnMpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84ODZfMTQiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84ODZfMjciPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84ODdfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODk5XzEzIj5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODk5XzI2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwXzQiPk51bGxfRm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfT3B0aW9ucyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX3Bvc3QuM3guaHRtbCI+Zm9ybV9wb3N0LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkxM18xNCI+UG9zdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3Ml8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTEzXzIwIj5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkxNF8yMCI+UG9zdDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fcG9zdC4zeC5odG1sIj5wb3N0X2Zvcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB1bnBvc3RfZm9ybSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjcyXzE0Ij5Qb3N0PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX2N1cnNvci4zeC5odG1sIj5mb3JtX2N1cnNvci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MzlfMTQiPlBvc2l0aW9uX0N1cnNvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4M18zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTM5XzMxIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9jdXJzb3IuM3guaHRtbCI+cG9zX2Zvcm1fY3Vyc29yKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjgzXzE0Ij5Qb3NpdGlvbl9DdXJzb3I8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZGF0YS4zeC5odG1sIj5mb3JtX2RhdGEuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjkyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NTdfMTMiPkRhdGFfQWhlYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk1N18yNSI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2RhdGEuM3guaHRtbCI+ZGF0YV9haGVhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5Ml8xMyI+RGF0YV9BaGVhZDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk3M18xMyI+RGF0YV9CZWhpbmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk3M18yNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2RhdGEuM3guaHRtbCI+ZGF0YV9iZWhpbmQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTdfMTMiPkRhdGFfQmVoaW5kPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX2RyaXZlci4zeC5odG1sIj5mb3JtX2RyaXZlci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwNV85Ij5Ecml2ZXJfUmVzdWx0PC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwNV8yNyI+Rm9ybV9PazwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwNl8yNyI+UmVxdWVzdF9EZW5pZWQ8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDdfMjciPlVua25vd25fUmVxdWVzdDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwOF8yNyI+SW52YWxpZF9GaWVsZDwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzExXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTNfMTMiPkRyaXZlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTkzXzIxIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMl8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTk0XzIxIj5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDVfOSI+RHJpdmVyX1Jlc3VsdDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZHJpdmVyLjN4Lmh0bWwiPmZvcm1fZHJpdmVyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIERyaXZlciBub3QgaW5saW5lZDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyMF85Ij5QYWdlX051bWJlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IE5hdHVyYWw7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjNfMTQiPlNldF9DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDIzXzI3Ij5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjRfMjciPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fcGFnZS4zeC5odG1sIj5zZXRfY3VycmVudF9maWVsZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyM18xNCI+U2V0X0N1cnJlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzI5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDM4XzEzIj5DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzI5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDM4XzIyIj5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fcGFnZS4zeC5odG1sIj5jdXJyZW50X2ZpZWxkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI5XzEzIj5DdXJyZW50PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81OSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTNfMTQiPlNldF9QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDUzXzI0Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDU0XzI0Ij5QYWdlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIwXzkiPlBhZ2VfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjBfOSI+UGFnZV9OdW1iZXI8L0E+J0ZpcnN0KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPnNldF9mb3JtX3BhZ2UoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MzRfMTQiPlNldF9QYWdlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA2OF8xMyI+UGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0MF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA2OF8xOSI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjBfOSI+UGFnZV9OdW1iZXI8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQwXzEzIj5QYWdlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA4Ml8xMyI+R2V0X0luZGV4PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQ1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDgyXzI0Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiBQb3NpdGl2ZTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPmZpZWxkX2luZGV4KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlIHRoYXQgaW4gdGhpcyBiaW5kaW5nIHdlIHN0YXJ0IHRoZSBudW1iZXJpbmcgb2YgZmllbGRzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHdpdGggMS4gU28gdGhpcyBpcyBudW1iZXIgaXMgb25lIG1vcmUgdGhhbiB5b3UgZ2V0IGZyb20gdGhlIGxvdzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBsZXZlbCBjYWxsLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc0NV8xMyI+R2V0X0luZGV4PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX25ld19wYWdlLjN4Lmh0bWwiPmZvcm1fbmV3X3BhZ2UuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEwMl8xNCI+U2V0X05ld19QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU3XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTAyXzI4Ij5GbGQ8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU4XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTAzXzI4Ij5OZXdfUGFnZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3X3BhZ2UuM3guaHRtbCI+c2V0X25ld19wYWdlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzU3XzE0Ij5TZXRfTmV3X1BhZ2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTE3XzEzIj5Jc19OZXdfUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTExN18yNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5uZXdfcGFnZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc2M18xMyI+SXNfTmV3X1BhZ2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3guaHRtbCI+Zm9ybV9yZXF1ZXN0bmFtZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgSW1wbGVtZW50ZWQ6IGZvcm1fcmVxdWVzdF9uYW1lLCBmb3JtX3JlcXVlc3RfYnlfbmFtZTwvRU0+PC9GT05UPgorCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wcml2YXRlPC9iPgorICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgIDxiPnR5cGU8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+ICA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisKKyAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSAwOworICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjBfNCI+TnVsbF9Gb3JtPC9BPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4gIDo9IDA7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQzYjAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0KQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuSXRlbV9Vc2VyX0RhdGEgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80NiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDZfNDEiPkl0ZW1fVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU4XzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU4XzI5Ij5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzE2Ij5TZXRfSXRlbV9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUxXzE2Ij5JdG08L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUxXzE2Ij5BZGRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV85Ij5Vc2VyX0FjY2VzczwvQT4pICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9JdGVtX1VzZXJwdHIsICJzZXRfaXRlbV91c2VycHRyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUxXzE2Ij5TZXRfSXRlbV9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNThfMjkiPkl0bTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzI5Ij5EYXRhPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTVfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU1XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU4XzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY5XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY5XzI4Ij5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xNiI+SXRlbV9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY0XzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJdGVtX1VzZXJwdHIsICJpdGVtX3VzZXJwdHIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82NF8xNiI+SXRlbV9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjlfMjgiPkl0bTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82OV8xMyI+R2V0X1VzZXJfRGF0YTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjkiPkl0bTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjVfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfOSI+VXNlcl9BY2Nlc3M8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY1XzI5Ij5EYXRhPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82OV8xMyI+R2V0X1VzZXJfRGF0YTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI5Ij5JdG08L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTQiPkdldF9Vc2VyX0RhdGE8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ2XzQxIj5JdGVtX1VzZXJfRGF0YTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWEwNjdmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0KQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuSXRlbV9Vc2VyX0RhdGEgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE2IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDZfNDEiPlVzZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bGltaXRlZDwvYj4gPGI+cHJpdmF0ZTwvYj47CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ2XzQxIj5Vc2VyX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXI8L0E+OworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDRfNDYiPkl0ZW1fVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDZfNDEiPkl0ZW1fVXNlcl9EYXRhPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIGJpbmRpbmcgdXNlcyB0aGUgc2FtZSB1c2VyIHBvaW50ZXIgZm9yIG1lbnUgaXRlbXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYXMgdGhlIGxvdyBsZXZlbCBDIGltcGxlbWVudGF0aW9uLiBTbyB5b3UgY2FuIHNhZmVseTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZWFkIG9yIHdyaXRlIHRoZSB1c2VyIHBvaW50ZXIgYWxzbyB3aXRoIHRoZSBDIHJvdXRpbmVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9taXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzQ4XzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzQ4XzI5Ij5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDlfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV85Ij5Vc2VyX0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV91c2VycHRyLjN4Lmh0bWwiPnNldF9pdGVtX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNThfMTQiPlNldF9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcwXzE0Ij5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcwXzI5Ij5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcxXzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbCI+aXRlbV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82Ml8xMyI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82Ml8yOCI+SXRtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV85Ij5Vc2VyX0FjY2VzczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbCI+aXRlbV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1lIGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDZfNDEiPkl0ZW1fVXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZDZlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bQpAQCAtMCwwICsxLDgyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YSAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M180NiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPk1lbnVfVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzI5Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTRfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzE2Ij5TZXRfTWVudV9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUwXzE2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUwXzE2Ij5EYXRhPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9NZW51X1VzZXJwdHIsICJzZXRfbWVudV91c2VycHRyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUwXzE2Ij5TZXRfTWVudV9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMjkiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU0XzI5Ij5EYXRhPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU0XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI4Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18xNiI+TWVudV9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYzXzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X1VzZXJwdHIsICJtZW51X3VzZXJwdHIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82M18xNiI+TWVudV9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjgiPk1lbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjBfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzYwXzI5Ij5EYXRhPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzI5Ij5NZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5NZW51X1VzZXJfRGF0YTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTEzMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0KQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGEgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE0IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5Vc2VyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmxpbWl0ZWQ8L2I+IDxiPnByaXZhdGU8L2I+OworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+VXNlcl9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80M185Ij5Vc2VyPC9BPjsKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzQzXzQ2Ij5NZW51X1VzZXJfRGF0YTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5NZW51X1VzZXJfRGF0YTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDdfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDdfMjkiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80OF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sIj5zZXRfbWVudV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82OV8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82OV8yOSI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83MF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82MV8xMyI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82MV8yOCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sIj5tZW51X3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+TWVudV9Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2MjEwYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtCkBAIC0wLDAgKzEsMTAyOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjI2IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6NTggQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlBvaW50ZXJzOworCis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dHlwZTwvYj4gQ19JdGVtX0FycmF5IDxiPmlzPC9iPiA8Yj5hcnJheTwvYj4gKE5hdHVyYWwgPGI+cmFuZ2U8L2I+ICZsdDsmZ3Q7KSA8Yj5vZjwvYj4gPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICA8Yj5wYWNrYWdlPC9iPiBJX0FycmF5IDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlBvaW50ZXJzIChOYXR1cmFsLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPiwgQ19JdGVtX0FycmF5LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+KTsKKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiBTeXN0ZW0uQml0X09yZGVyOworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3MuY2hhcnNfcHRyOworCisgICA8Yj5mdW5jdGlvbjwvYj4gTU9TXzJfQ0ludCA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IENJbnRfMl9NT1MgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBJT1NfMl9DSW50IDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gQ0ludF8yX0lPUyA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+KTsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDZfMTQiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDZfMjgiPktleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTA3XzI4Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfMTYiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MF8xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSZXF1ZXN0X05hbWUsICJtZW51X3JlcXVlc3RfbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwXzE2Ij5SZXF1ZXN0X05hbWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTA2XzI4Ij5LZXk8L0E+KSksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwN18yOCI+TmFtZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDZfMTQiPlJlcXVlc3RfTmFtZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDlfMTQiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDlfMjgiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfMTYiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OF8xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSZXF1ZXN0X05hbWUsICJtZW51X3JlcXVlc3RfbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODhfMTYiPlJlcXVlc3RfTmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDlfMjgiPktleTwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwOV8xNCI+UmVxdWVzdF9OYW1lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE5MV8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTRfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE5MV8yMSI+TmFtZTwvQT48L0ZPTlQ+ICAgICAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkyXzIxIj5EZXNjcmlwdGlvbjwvQT48L0ZPTlQ+IDogU3RyaW5nIDo9ICIiKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfMTIiPkNoYXJfUHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5jaGFyOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfMTYiPk5ld2l0ZW08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOThfMTYiPk5hbWU8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOThfMTYiPkRlc2M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3XzEyIj5DaGFyX1B0cjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3aXRlbSwgIm5ld19pdGVtIik7CisKKyAgICAgIDxiPnR5cGU8L2I+IE5hbWVfU3RyaW5nIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkxXzIxIj5OYW1lPC9BPidMZW5ndGgpOworICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMTIiPk5hbWVfU3RyaW5nX1B0cjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IE5hbWVfU3RyaW5nOworICAgICAgPGI+cHJhZ21hPC9iPiBDb250cm9sbGVkICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMDJfMTIiPk5hbWVfU3RyaW5nX1B0cjwvQT4pOworCisgICAgICA8Yj50eXBlPC9iPiBEZXNjX1N0cmluZyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE5Ml8yMSI+RGVzY3JpcHRpb248L0E+J0xlbmd0aCk7CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNl8xMiI+RGVzY19TdHJpbmdfUHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gRGVzY19TdHJpbmc7CisgICAgICA8Yj5wcmFnbWE8L2I+IENvbnRyb2xsZWQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEwNl8xMiI+RGVzY19TdHJpbmdfUHRyPC9BPik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzciPk5hbWVfU3RyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTAyXzEyIj5OYW1lX1N0cmluZ19QdHI8L0E+IDo9IDxiPm5ldzwvYj4gTmFtZV9TdHJpbmc7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF83Ij5EZXNjX1N0cjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEwNl8xMiI+RGVzY19TdHJpbmdfUHRyPC9BPiA6PSA8Yj5uZXc8L2I+IERlc2NfU3RyaW5nOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfNyI+TmFtZV9MZW48L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfMTciPkRlc2NfTGVuPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMl83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTFfMjEiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMDlfNyI+TmFtZV9TdHI8L0E+LjxiPmFsbDwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzExMV83Ij5OYW1lX0xlbjwvQT4pOworICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkyXzIxIj5EZXNjcmlwdGlvbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzExMF83Ij5EZXNjX1N0cjwvQT4uPGI+YWxsPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTExXzE3Ij5EZXNjX0xlbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTEyXzciPlJlc3VsdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOThfMTYiPk5ld2l0ZW08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMDlfNyI+TmFtZV9TdHI8L0E+LjxiPmFsbDwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEwOV83Ij5OYW1lX1N0cjwvQT4uPGI+YWxsPC9iPidGaXJzdCknPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMTBfNyI+RGVzY19TdHI8L0E+LjxiPmFsbDwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzExMF83Ij5EZXNjX1N0cjwvQT4uPGI+YWxsPC9iPidGaXJzdCknPGI+QWNjZXNzPC9iPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTEyXzciPlJlc3VsdDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzg5XzQiPkV0aV9TeXN0ZW1fRXJyb3I8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzExMl83Ij5SZXN1bHQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTFfMTMiPkNyZWF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMDNfMjIiPkl0bTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl8xNiI+RGVzY25hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyNl8xNiI+SXRtPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRGVzY25hbWUsICJpdGVtX2Rlc2NyaXB0aW9uIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMTYiPkl0ZW1uYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMjhfMTYiPkl0bTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1uYW1lLCAiaXRlbV9uYW1lIik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMV8xNiI+RnJlZWl0ZW08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzMV8xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGcmVlaXRlbSwgImZyZWVfaXRlbSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1XzciPlB0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzNV83Ij5QdHI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyNl8xNiI+RGVzY25hbWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMDNfMjIiPkl0bTwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzNV83Ij5QdHI8L0E+IC89IE51bGxfUHRyIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzLkZyZWUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzNV83Ij5QdHI8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM1XzciPlB0cjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTI4XzE2Ij5JdGVtbmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18yMiI+SXRtPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM1XzciPlB0cjwvQT4gLz0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3MuRnJlZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM1XzciPlB0cjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzRfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzFfMTYiPkZyZWVpdGVtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjAzXzIyIj5JdG08L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzRfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzNF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjAzXzIyIj5JdG08L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18xNCI+RGVsZXRlPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTJfMTQiPlNldF9WYWx1ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Ml8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjEyXzI1Ij5JdG08L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIxM18yNSI+VmFsdWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NV8xNiI+U2V0X0l0ZW1fVmFsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNTVfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNTVfMTYiPlZhbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0l0ZW1fVmFsLCAic2V0X2l0ZW1fdmFsdWUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1NV8xNiI+U2V0X0l0ZW1fVmFsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjEyXzI1Ij5JdG08L0E+LCBCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjEzXzI1Ij5WYWx1ZTwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNTlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1OV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTJfMTQiPlNldF9WYWx1ZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjE4XzEzIj5WYWx1ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Nl8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjE4XzIwIj5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4XzE2Ij5JdGVtX1ZhbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTY4XzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1fVmFsLCAiaXRlbV92YWx1ZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTY4XzE2Ij5JdGVtX1ZhbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIxOF8yMCI+SXRtPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+Q3Vyc2VzX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjE4XzEzIj5WYWx1ZTwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+VmlzaWJsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjI3XzIyIj5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxXzE2Ij5JdGVtX1ZpczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTgxXzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1fVmlzLCAiaXRlbV92aXNpYmxlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xODFfMTYiPkl0ZW1fVmlzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjI3XzIyIj5JdG08L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMjdfMTMiPlZpc2libGU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIzNl8xNCI+U2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIzNl8yNyI+SXRtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Ml8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjM3XzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF8xNiI+U2V0X0l0ZW1fT3B0czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTk0XzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTVfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5NF8xNiI+T3B0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfSXRlbV9PcHRzLCAic2V0X2l0ZW1fb3B0cyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OF83Ij5PcHQ8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSBJT1NfMl9DSW50ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMzdfMjciPk9wdGlvbnM8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk5XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTlfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTRfMTYiPlNldF9JdGVtX09wdHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMzZfMjciPkl0bTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5OF83Ij5PcHQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5OV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMzZfMTQiPlNldF9PcHRpb25zPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjQyXzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwN18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjQyXzMwIj5JdG08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDNfMzAiPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0NF8zMCI+T248L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTFfMTYiPkl0ZW1fT3B0c19PbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjExXzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjExXzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1fT3B0c19PbiwgIml0ZW1fb3B0c19vbiIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0XzE2Ij5JdGVtX09wdHNfT2ZmPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTRfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE0XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1fT3B0c19PZmYsICJpdGVtX29wdHNfb2ZmIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE4XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IElPU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0M18zMCI+T3B0aW9uczwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTlfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDRfMzAiPk9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE5XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjExXzE2Ij5JdGVtX09wdHNfT248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDJfMzAiPkl0bTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxOF83Ij5PcHQ8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTlfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTRfMTYiPkl0ZW1fT3B0c19PZmY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDJfMzAiPkl0bTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxOF83Ij5PcHQ8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxOV83Ij5FcnI8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE5XzciPkVycjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0Ml8xNCI+U3dpdGNoX09wdGlvbnM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTFfMTQiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTFfMjciPkl0bTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTJfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNF8xNiI+SXRlbV9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMzRfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbV9PcHRzLCAiaXRlbV9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM3XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIzNF8xNiI+SXRlbV9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjUxXzI3Ij5JdG08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjUyXzI3Ij5PcHRpb25zPC9BPiA6PSBDSW50XzJfSU9TICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMzdfNyI+UmVzPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1MV8xNCI+R2V0X09wdGlvbnM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1Nl8xMyI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1Nl8yNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ0XzciPklvczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1MV8xNCI+R2V0X09wdGlvbnM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTZfMjYiPkl0bTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI0NF83Ij5Jb3M8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjQ0XzciPklvczwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1Nl8xMyI+R2V0X09wdGlvbnM8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2NV8xNCI+TmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY1XzIwIj5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTFfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2Nl8yMCI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1M18xNiI+SXRlbW5hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1M18xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJdGVtbmFtZSwgIml0ZW1fbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1M18xNiI+SXRlbW5hbWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjVfMjAiPkl0bTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjZfMjAiPk5hbWU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY1XzE0Ij5OYW1lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjhfMTQiPk5hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2OF8yMCI+SXRtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2MV8xNiI+SXRlbW5hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI2MV8xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJdGVtbmFtZSwgIml0ZW1fbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjYxXzE2Ij5JdGVtbmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2OF8yMCI+SXRtPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjhfMTQiPk5hbWU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzRfMTQiPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzRfMjciPkl0bTwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzVfMjciPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjcwXzE2Ij5EZXNjbmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjcwXzE2Ij5JdG08L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEZXNjbmFtZSwgIml0ZW1fZGVzY3JpcHRpb24iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNzBfMTYiPkRlc2NuYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjc0XzI3Ij5JdG08L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjc1XzI3Ij5EZXNjcmlwdGlvbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzRfMTQiPkRlc2NyaXB0aW9uPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzhfMTQiPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzhfMjciPkl0bTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfMTYiPkRlc2NuYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNzhfMTYiPkl0bTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERlc2NuYW1lLCAiaXRlbV9kZXNjcmlwdGlvbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjc4XzE2Ij5EZXNjbmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3OF8yNyI+SXRtPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzhfMTQiPkRlc2NyaXB0aW9uPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODhfMTQiPlNldF9DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODhfMjciPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjg5XzI3Ij5JdG08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg3XzE2Ij5TZXRfQ3Vycl9JdGVtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yODdfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4OF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjg3XzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9DdXJyX0l0ZW0sICJzZXRfY3VycmVudF9pdGVtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkxXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yODdfMTYiPlNldF9DdXJyX0l0ZW08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODhfMjciPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OV8yNyI+SXRtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yOTFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI5MV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODhfMTQiPlNldF9DdXJyZW50PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTRfMTMiPkN1cnJlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOThfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5NF8yMiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDBfMTYiPkN1cnJfSXRlbTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzAwXzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEN1cnJfSXRlbSwgImN1cnJlbnRfaXRlbSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwM183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMDBfMTYiPkN1cnJfSXRlbTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5NF8yMiI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMDNfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMTZfNCI+TWVudV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMwM183Ij5SZXM8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTRfMTMiPkN1cnJlbnQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzExXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTlfMTQiPlNldF9Ub3BfUm93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzExXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTlfMjciPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwMF8yNyI+TGluZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTRfMTYiPlNldF9Ub3Byb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMxNF8xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzE0XzE2Ij5MaW5lPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfVG9wcm93LCAic2V0X3RvcF9yb3ciKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMThfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMxNF8xNiI+U2V0X1RvcHJvdzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5OV8yNyI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwMF8yNyI+TGluZTwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMThfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMxOF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTlfMTQiPlNldF9Ub3BfUm93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzI1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMDVfMTMiPlRvcF9Sb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjVfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwNV8yMiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjdfMTYiPlRvcHJvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzI3XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFRvcHJvdywgInRvcF9yb3ciKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzBfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzI3XzE2Ij5Ub3Byb3c8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMDVfMjIiPk1lbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzMwXzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMTZfNCI+TWVudV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMzBfNyI+UmVzPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwNV8xMyI+VG9wX1JvdzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzOF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzEwXzEzIj5HZXRfSW5kZXg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzhfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMxMF8yNCI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiBQb3NpdGl2ZQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDBfMTYiPkdldF9JdGVtaW5kZXg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDBfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM0MF8xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfSXRlbWluZGV4LCAiaXRlbV9pbmRleCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0M183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNDBfMTYiPkdldF9JdGVtaW5kZXg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMTBfMjQiPkl0bTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzQzXzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMTZfNCI+TWVudV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IFBvc2l0aXZlIChOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNDNfNyI+UmVzPC9BPikgKyBQb3NpdGl2ZSdGaXJzdCk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMxMF8xMyI+R2V0X0luZGV4PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMjJfMTQiPlBvc3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTFfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyMl8yMCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMjNfMjAiPlBvc3Q8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1NF8xNiI+TV9Qb3N0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTRfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTV9Qb3N0LCAicG9zdF9tZW51Iik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTZfMTYiPk1fVW5wb3N0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTZfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTV9VbnBvc3QsICJ1bnBvc3RfbWVudSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyM18yMCI+UG9zdDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1OV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1NF8xNiI+TV9Qb3N0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIyXzIwIj5NZW48L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTlfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTZfMTYiPk1fVW5wb3N0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIyXzIwIj5NZW48L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzU5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyMl8xNCI+UG9zdDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzMzXzE0Ij5TZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzMzXzI3Ij5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzRfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc0XzE2Ij5TZXRfTWVudV9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc0XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzRfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3NV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzc0XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9NZW51X09wdHMsICJzZXRfbWVudV9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc4XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IE1PU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzNF8yNyI+T3B0aW9uczwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3OV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3NF8xNiI+U2V0X01lbnVfT3B0czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzM18yNyI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzc4XzciPk9wdDwvQT4pOworICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3OV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzNfMTQiPlNldF9PcHRpb25zPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzM5XzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzM5XzMwIj5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDBfMzAiPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0MV8zMCI+T248L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzkxXzE2Ij5NZW51X09wdHNfT248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5MV8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5MV8xNiI+T3B0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X09wdHNfT24sICJtZW51X29wdHNfb24iKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5NF8xNiI+TWVudV9PcHRzX09mZjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5NF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk0XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTVfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5NF8xNiI+T3B0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X09wdHNfT2ZmLCAibWVudV9vcHRzX29mZiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5OF83Ij5PcHQ8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSBNT1NfMl9DSW50ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDBfMzAiPk9wdGlvbnM8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk5XzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQxXzMwIj5PbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5OV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5MV8xNiI+TWVudV9PcHRzX09uPC9BPiAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzOV8zMCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk4XzciPk9wdDwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5OV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5NF8xNiI+TWVudV9PcHRzX09mZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzOV8zMCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk4XzciPk9wdDwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk5XzciPkVycjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zOTlfNyI+RXJyPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzM5XzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0N18xNCI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0N18yNyI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMl8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQ4XzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTRfMTYiPk1lbnVfT3B0czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDE0XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfT3B0cywgIm1lbnVfb3B0cyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxN183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MTRfMTYiPk1lbnVfT3B0czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0N18yNyI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0OF8yNyI+T3B0aW9uczwvQT4gOj0gQ0ludF8yX01PUyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDE3XzciPlJlczwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDdfMTQiPkdldF9PcHRpb25zPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDIyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNTJfMTMiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDIyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNTJfMjYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjNfNCI+TnVsbF9NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNF83Ij5Nb3M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDdfMTQiPkdldF9PcHRpb25zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzUyXzI2Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MjRfNyI+TW9zPC9BPik7CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQyNF83Ij5Nb3M8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNTJfMTMiPkdldF9PcHRpb25zPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjFfMTQiPlNldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2MV8yNiI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2Ml8yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMzXzE2Ij5TZXRfTWVudV9XaW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQzM18xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQzM18xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9NZW51X1dpbiwgInNldF9tZW51X3dpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzN183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDMzXzE2Ij5TZXRfTWVudV9XaW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjFfMjYiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2Ml8yNiI+V2luPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDM3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MzdfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzYxXzE0Ij5TZXRfV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjdfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2N18yNSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0Nl8xNiI+TWVudV9XaW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ0Nl8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfV2luLCAibWVudV93aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDlfNyI+VzwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDQ2XzE2Ij5NZW51X1dpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2N18yNSI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDQ5XzciPlc8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjdfMTMiPkdldF9XaW5kb3c8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzJfMTQiPlNldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzJfMzAiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1NV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzczXzMwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTdfMTYiPlNldF9NZW51X1N1YjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDU3XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDU3XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfU3ViLCAic2V0X21lbnVfc3ViIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDYxXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NTdfMTYiPlNldF9NZW51X1N1YjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3Ml8zMCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzczXzMwIj5XaW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NjFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ2MV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzJfMTQiPlNldF9TdWJfV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzhfMTMiPkdldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY4XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzhfMjkiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzBfMTYiPk1lbnVfU3ViPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDcwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NzBfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X1N1YiwgIm1lbnVfc3ViIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDczXzciPlc8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ3MF8xNiI+TWVudV9TdWI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzhfMjkiPk1lbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ3M183Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzc4XzEzIj5HZXRfU3ViX1dpbmRvdzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4M18xNCI+U2NhbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzhfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4M18yMSI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3OV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzg0XzIxIj5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODBfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4NV8yMSI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODJfMTIiPkNfSW50X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODNfMTYiPk1fU2NhbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4M18xNiI+TWVuPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODNfMTYiPllwPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODNfMTYiPlhwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODJfMTIiPkNfSW50X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTV9TY2FsZSwgInNjYWxlX21lbnUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODdfNyI+WDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4N18xMCI+WTwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4OF83Ij5SZXM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4M18xNiI+TV9TY2FsZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4M18yMSI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDg3XzEwIj5ZPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODdfNyI+WDwvQT4nPGI+QWNjZXNzPC9iPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODhfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4OF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzg0XzIxIj5MaW5lczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODdfMTAiPlk8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4NV8yMSI+Q29sdW1uczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4N183Ij5YPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4M18xNCI+U2NhbGU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM5NF8xNCI+UG9zaXRpb25fQ3Vyc29yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDk3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zOTRfMzEiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5OV8xNiI+UG9zX01lbnVfQ3Vyc29yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDk5XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80OTlfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUG9zX01lbnVfQ3Vyc29yLCAicG9zX21lbnVfY3Vyc29yIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAyXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80OTlfMTYiPlBvc19NZW51X0N1cnNvcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM5NF8zMSI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTAyXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MDJfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzk0XzE0Ij5Qb3NpdGlvbl9DdXJzb3I8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDAzXzE0Ij5TZXRfTWFyazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDAzXzI0Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTExXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDRfMjQiPk1hcms8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTEzXzEyIj5DaGFyX1B0cjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuY2hhcjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxNF8xNiI+U2V0X01hcms8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUxNF8xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUxNF8xNiI+TWFyazwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTEzXzEyIj5DaGFyX1B0cjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01hcmssICJzZXRfbWVudV9tYXJrIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTE4XzciPlR4dDwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDRfMjQiPk1hcms8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxOV83Ij5MZW48L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIwXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDRfMjQiPk1hcms8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MThfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE5XzciPkxlbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTIwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE0XzE2Ij5TZXRfTWFyazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwM18yNCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE4XzciPlR4dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUxOF83Ij5UeHQ8L0E+J0ZpcnN0KSc8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MjBfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUyMF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDNfMTQiPlNldF9NYXJrPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDA5XzE0Ij5NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDlfMjAiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzBfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQxMF8yMCI+TWFyazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzMl8xNiI+R2V0X01lbnVfTWFyazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzMl8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTMyXzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9NZW51X01hcmssICJtZW51X21hcmsiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MzJfMTYiPkdldF9NZW51X01hcms8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDlfMjAiPk1lbjwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MTBfMjAiPk1hcms8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDA5XzE0Ij5NYXJrPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MTNfMTQiPk1hcms8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzhfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQxM18yMCI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQwXzE2Ij5HZXRfTWVudV9NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQwXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NDBfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X01lbnVfTWFyaywgIm1lbnVfbWFyayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTQwXzE2Ij5HZXRfTWVudV9NYXJrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDEzXzIwIj5NZW48L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQxM18xNCI+TWFyazwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MjNfMTQiPlNldF9Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQyNF83Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDI1XzciPkZvcmU8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQyNl83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1Ml8xNiI+U2V0X01lbnVfRm9yZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1Ml8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTUyXzE2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUzXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NTJfMTYiPkF0dHI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9NZW51X0ZvcmUsICJzZXRfbWVudV9mb3JlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU2XzciPkNoPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDI2XzciPkNvbG9yPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQyNV83Ij5Gb3JlPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTUyXzE2Ij5TZXRfTWVudV9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDI0XzciPk1lbjwvQT4sIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTU2XzciPkNoPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU1OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTU5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQyM18xNCI+U2V0X0ZvcmVncm91bmQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzFfMTQiPkZvcmVncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzMV8yNiI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDMyXzI2Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2OV8xNiI+TWVudV9Gb3JlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NjlfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9Gb3JlLCAibWVudV9mb3JlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzMl8yNiI+Rm9yZTwvQT4gOj0gQ2h0eXBlX1RvX0F0dHJDaGFyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NjlfMTYiPk1lbnVfRm9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzMV8yNiI+TWVuPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzMV8xNCI+Rm9yZWdyb3VuZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzNl8xNCI+Rm9yZWdyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM2XzI2Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM3XzI2Ij5Gb3JlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzhfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc5XzE2Ij5NZW51X0ZvcmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU3OV8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X0ZvcmUsICJtZW51X2ZvcmUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM3XzI2Ij5Gb3JlPC9BPiAgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NzlfMTYiPk1lbnVfRm9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzNl8yNiI+TWVuPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzhfMjYiPkNvbG9yPC9BPiA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU3OV8xNiI+TWVudV9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM2XzI2Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzNl8xNCI+Rm9yZWdyb3VuZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ0M18xNCI+U2V0X0JhY2tncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDQ0XzciPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDVfNyI+QmFjazwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDQ2XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTkxXzE2Ij5TZXRfTWVudV9CYWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTkxXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OTFfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTJfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU5MV8xNiI+QXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfQmFjaywgInNldF9tZW51X2JhY2siKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTVfNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDZfNyI+Q29sb3I8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDQ1XzciPkJhY2s8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk4XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OTFfMTYiPlNldF9NZW51X0JhY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDRfNyI+TWVuPC9BPiwgQXR0ckNoYXJfVG9fQ2h0eXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OTVfNyI+Q2g8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTk4XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OThfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDQzXzE0Ij5TZXRfQmFja2dyb3VuZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1MV8xNCI+QmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDUxXzI2Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTJfMjYiPkJhY2s8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA4XzE2Ij5NZW51X0JhY2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYwOF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X0JhY2ssICJtZW51X2JhY2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDUyXzI2Ij5CYWNrPC9BPiA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYwOF8xNiI+TWVudV9CYWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDUxXzI2Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDUxXzE0Ij5CYWNrZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDU2XzE0Ij5CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTZfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTdfMjYiPkJhY2s8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1OF8yNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MThfMTYiPk1lbnVfQmFjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjE4XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfQmFjaywgIm1lbnVfYmFjayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTdfMjYiPkJhY2s8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkNodHlwZV9Ub19BdHRyQ2hhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYxOF8xNiI+TWVudV9CYWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDU2XzI2Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1OF8yNiI+Q29sb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjE4XzE2Ij5NZW51X0JhY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTZfMjYiPk1lbjwvQT4pKS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDU2XzE0Ij5CYWNrZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDYzXzE0Ij5TZXRfR3JleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyNV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDY0XzciPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI2XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjVfNyI+R3JleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDY2XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI5XzE2Ij5TZXRfTWVudV9HcmV5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI5XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MjlfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzBfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyOV8xNiI+QXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfR3JleSwgInNldF9tZW51X2dyZXkiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzNfNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjZfNyI+Q29sb3I8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDY1XzciPkdyZXk8L0E+KTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyOV8xNiI+U2V0X01lbnVfR3JleTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ2NF83Ij5NZW48L0E+LCBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYzM183Ij5DaDwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MzdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYzN183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjNfMTQiPlNldF9HcmV5PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDcxXzE0Ij5HcmV5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzFfMjAiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3Ml8yMCI+R3JleTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDdfMTYiPk1lbnVfR3JleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0N18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjQ3XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfR3JleSwgIm1lbnVfZ3JleSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzJfMjAiPkdyZXk8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjQ3XzE2Ij5NZW51X0dyZXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzFfMjAiPk1lbjwvQT4pKS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzFfMTQiPkdyZXk8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjUzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzZfMTQiPkdyZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3N183Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzhfNyI+R3JleTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzlfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTdfMTYiPk1lbnVfR3JleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1N18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjU3XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfR3JleSwgIm1lbnVfZ3JleSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzhfNyI+R3JleTwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjU3XzE2Ij5NZW51X0dyZXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzdfNyI+TWVuPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzlfNyI+Q29sb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjU3XzE2Ij5NZW51X0dyZXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzdfNyI+TWVuPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzZfMTQiPkdyZXk8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODRfMTQiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY0XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODRfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDg1XzMzIj5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIgOj0gU3BhY2UpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2N18xNiI+U2V0X01lbnVfUGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjdfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjdfMTYiPkNoPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfUGFkLCAic2V0X21lbnVfcGFkIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjcxXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjdfMTYiPlNldF9NZW51X1BhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ4NF8zMyI+TWVuPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IChDaGFyYWN0ZXInUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODVfMzMiPlBhZDwvQT4pKSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NzFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY3MV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODRfMTQiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDkwXzE0Ij5QYWRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTBfMjkiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDkxXzI5Ij5QYWQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQ2hhcmFjdGVyKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODJfMTYiPk1lbnVfUGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODJfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9QYWQsICJtZW51X3BhZCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTFfMjkiPlBhZDwvQT4gOj0gQ2hhcmFjdGVyJ1ZhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjgyXzE2Ij5NZW51X1BhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5MF8yOSI+TWVuPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTBfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwMF8xNCI+U2V0X1NwYWNpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwMF8yNyI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwMV8yNyI+RGVzY3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+IDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjkwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDJfMjciPlJvdzwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gICA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAzXzI3Ij5Db2w8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gOj0gMCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjkzXzE2Ij5TZXRfU3BhY2luZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5M18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjkzXzE2Ij5NZW48L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjkzXzE2Ij5EPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTNfMTYiPlI8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5M18xNiI+QzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X1NwYWNpbmcsICJzZXRfbWVudV9zcGFjaW5nIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk3XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTNfMTYiPlNldF9TcGFjaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAwXzI3Ij5NZW48L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAxXzI3Ij5EZXNjcjwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAyXzI3Ij5Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwM18yNyI+Q29sPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjk3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTdfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAwXzE0Ij5TZXRfU3BhY2luZzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOF8xNCI+U3BhY2luZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwN18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTA4XzIzIj5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA4XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDlfMjMiPkRlc2NyPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDlfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUxMF8yMyI+Um93PC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTBfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUxMV8yMyI+Q29sPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTJfMTIiPkNfSW50X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTNfMTYiPkdldF9TcGFjaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTNfMTYiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTNfMTYiPkQ8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTRfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxM18xNiI+UjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxNF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzEzXzE2Ij5DPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTJfMTIiPkNfSW50X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X1NwYWNpbmcsICJtZW51X3NwYWNpbmciKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTdfNyI+RDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxN18xMCI+UjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxN18xMyI+QzwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxOF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzEzXzE2Ij5HZXRfU3BhY2luZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOF8yMyI+TWVuPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE3XzciPkQ8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxN18xMCI+UjwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE3XzEzIj5DPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxOF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE4XzciPlJlczwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOV8yMyI+RGVzY3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxN183Ij5EPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MTBfMjMiPlJvdzwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE3XzEwIj5SPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MTFfMjMiPkNvbDwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTdfMTMiPkM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDhfMTQiPlNwYWNpbmc8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIwXzEzIj5TZXRfUGF0dGVybjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIwXzI2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczM18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIxXzI2Ij5UZXh0PC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczNV8xMiI+Q2hhcl9QdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmNoYXI7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzZfMTYiPlNldF9QYXR0ZXJuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzZfMTYiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM3XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzZfMTYiPlBhdHRlcm48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczNV8xMiI+Q2hhcl9QdHI8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9QYXR0ZXJuLCAic2V0X21lbnVfcGF0dGVybiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0MF83Ij5TPC9BPjwvRk9OVD4gICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIxXzI2Ij5UZXh0PC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NDFfNyI+TDwvQT48L0ZPTlQ+ICAgOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0Ml83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIxXzI2Ij5UZXh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzQwXzciPlM8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDFfNyI+TDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzQyXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzM2XzE2Ij5TZXRfUGF0dGVybjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUyMF8yNiI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzQwXzciPlM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDBfNyI+UzwvQT4nRmlyc3QpJzxiPkFjY2VzczwvYj4pOworICAgICAgPGI+Y2FzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzQyXzciPlJlczwvQT4gPGI+aXM8L2I+CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODlfNCI+RV9Ob19NYXRjaDwvQT4gPSZndDsgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiAgICAgICA9Jmd0OyA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICAgICA8Yj53aGVuPC9iPiA8Yj5vdGhlcnM8L2I+ID0mZ3Q7CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDJfNyI+UmVzPC9BPik7CisgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5jYXNlPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIwXzEzIj5TZXRfUGF0dGVybjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUyN18xNCI+UGF0dGVybjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1NV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI3XzIzIj5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU2XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjhfMjMiPlRleHQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NThfMTYiPkdldF9QYXR0ZXJuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU4XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NThfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X1BhdHRlcm4sICJtZW51X3BhdHRlcm4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NThfMTYiPkdldF9QYXR0ZXJuPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI3XzIzIj5NZW48L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI4XzIzIj5UZXh0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUyN18xNCI+UGF0dGVybjwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTM3XzE0Ij5TZXRfRm9ybWF0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzdfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTM4XzI2Ij5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzlfMjYiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY4XzE2Ij5TZXRfTWVudV9GbXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2OF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2OF8xNiI+TGluPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2OF8xNiI+Q29sPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWVudV9GbXQsICJzZXRfbWVudV9mb3JtYXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzNfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2OF8xNiI+U2V0X01lbnVfRm10PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTM3XzI2Ij5NZW48L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUzOF8yNiI+TGluZXM8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzlfMjYiPkNvbHVtbnM8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzczXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NzNfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTM3XzE0Ij5TZXRfRm9ybWF0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTUxXzE0Ij5Gb3JtYXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1MV8yMiI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzgzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTJfMjIiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1M18yMiI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODZfMTIiPkNfSW50X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODdfMTYiPk1lbnVfRm10PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODdfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODdfMTYiPlk8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODhfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4N18xNiI+WDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzg2XzEyIj5DX0ludF9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfRm10LCAibWVudV9mb3JtYXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OTFfNyI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5MV8xMCI+QzwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5Ml83Ij5SZXM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4N18xNiI+TWVudV9GbXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTFfMjIiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc5MV83Ij5MPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83OTFfMTAiPkM8L0E+JzxiPkFjY2VzczwvYj4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzkyXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83OTJfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTUyXzIyIj5MaW5lczwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc5MV83Ij5MPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTNfMjIiPkNvbHVtbnM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83OTFfMTAiPkM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTFfMTQiPkZvcm1hdDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTY1XzE0Ij5TZXRfSXRlbV9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDJfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2NV8zNCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDNfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2Nl8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDVfMTYiPlNldF9JdGVtX0luaXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDVfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwNV8xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwNl8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODA1XzE2Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfSXRlbV9Jbml0LCAic2V0X2l0ZW1faW5pdCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwOV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODA1XzE2Ij5TZXRfSXRlbV9Jbml0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTY1XzM0Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjZfMzQiPlByb2M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MDlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwOV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjVfMTQiPlNldF9JdGVtX0luaXRfSG9vazwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3MV8xNCI+U2V0X0l0ZW1fVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE2XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzFfMzQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE3XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzJfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE5XzE2Ij5TZXRfSXRlbV9UZXJtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE5XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MTlfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjBfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgxOV8xNiI+UHJvYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0l0ZW1fVGVybSwgInNldF9pdGVtX3Rlcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjNfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgxOV8xNiI+U2V0X0l0ZW1fVGVybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3MV8zNCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTcyXzM0Ij5Qcm9jPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MjNfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgyM183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzFfMTQiPlNldF9JdGVtX1Rlcm1fSG9vazwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3N18xNCI+U2V0X01lbnVfSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODMwXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzdfMzQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODMxXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzhfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODMzXzE2Ij5TZXRfTWVudV9Jbml0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODMzXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MzNfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzRfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgzM18xNiI+UHJvYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfSW5pdCwgInNldF9tZW51X2luaXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgzM18xNiI+U2V0X01lbnVfSW5pdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3N18zNCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTc4XzM0Ij5Qcm9jPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODM3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MzdfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTc3XzE0Ij5TZXRfTWVudV9Jbml0X0hvb2s8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODNfMTQiPlNldF9NZW51X1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0NF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTgzXzM0Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0NV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg0XzM0Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0N18xNiI+U2V0X01lbnVfVGVybTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0N18zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODQ3XzE2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ4XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NDdfMTYiPlByb2M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9NZW51X1Rlcm0sICJzZXRfbWVudV90ZXJtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODUxXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NDdfMTYiPlNldF9NZW51X1Rlcm08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODNfMzQiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4NF8zNCI+UHJvYzwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODUxXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NTFfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTgzXzE0Ij5TZXRfTWVudV9UZXJtX0hvb2s8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4OV8xMyI+R2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU4XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODlfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODYwXzE2Ij5JdGVtX0luaXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjBfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg2MF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJdGVtX0luaXQsICJpdGVtX2luaXQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjBfMTYiPkl0ZW1fSW5pdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4OV8zMyI+TWVuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4OV8xMyI+R2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTRfMTMiPkdldF9JdGVtX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2Nl8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk0XzMzIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2OF8xNiI+SXRlbV9UZXJtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjhfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbV9UZXJtLCAiaXRlbV90ZXJtIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODY4XzE2Ij5JdGVtX1Rlcm08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTRfMzMiPk1lbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTRfMTMiPkdldF9JdGVtX1Rlcm1fSG9vazwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk5XzEzIj5HZXRfTWVudV9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzRfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU5OV8zMyI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzZfMTYiPk1lbnVfSW5pdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3Nl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODc2XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfSW5pdCwgIm1lbnVfaW5pdCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg3Nl8xNiI+TWVudV9Jbml0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk5XzMzIj5NZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk5XzEzIj5HZXRfTWVudV9Jbml0X0hvb2s8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYwNF8xMyI+R2V0X01lbnVfVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODgyXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MDRfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg0XzE2Ij5NZW51X1Rlcm08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg4NF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X1Rlcm0sICJtZW51X3Rlcm0iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84ODRfMTYiPk1lbnVfVGVybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYwNF8zMyI+TWVuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYwNF8xMyI+R2V0X01lbnVfVGVybV9Ib29rPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTNfMTQiPlJlZGVmaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTNfMjQiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTRfMjQiPkl0ZW1zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkzXzE2Ij5TZXRfSXRlbXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg5M18xNiI+TWVuPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5NF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODkzXzE2Ij5JdGVtczwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0l0ZW1zLCAic2V0X21lbnVfaXRlbXMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTRfMjQiPkl0ZW1zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjE0XzI0Ij5JdGVtczwvQT4nTGFzdCkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTRfMjQiPkl0ZW1zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjE0XzI0Ij5JdGVtczwvQT4nTGFzdCkgLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzExNl80Ij5NZW51X0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODk3XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODkzXzE2Ij5TZXRfSXRlbXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTNfMjQiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxNF8yNCI+SXRlbXM8L0E+LjxiPmFsbDwvYj4nQWRkcmVzcyk7CisgICAgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg5N183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODk3XzciPlJlczwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjEzXzE0Ij5SZWRlZmluZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI5XzEzIj5JdGVtX0NvdW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjlfMjUiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gTmF0dXJhbAorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTJfMTYiPkNvdW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MTJfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ291bnQsICJpdGVtX2NvdW50Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTEyXzE2Ij5Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyOV8yNSI+TWVuPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjlfMTMiPkl0ZW1fQ291bnQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyM18xMyI+SXRlbXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MThfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyM18yMCI+TWVuPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjRfMjAiPkluZGV4PC9BPjwvRk9OVD4gOiBQb3NpdGl2ZSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj51c2U8L2I+IElfQXJyYXk7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiBDX01pdGVtcyAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MjNfMjYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gUG9pbnRlcjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDX01pdGVtcywgIm1lbnVfaXRlbXMiKTsKKworICAgICAgUCA6IFBvaW50ZXIgOj0gQ19NaXRlbXMgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyM18yMCI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiBQID0gPGI+bnVsbDwvYj4gPGI+b3I8L2I+IDxiPmVsc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyNF8yMCI+SW5kZXg8L0E+ICZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI5XzEzIj5JdGVtX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjIzXzIwIj5NZW48L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzExNl80Ij5NZW51X0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgUCA6PSBQICsgcHRyZGlmZl90ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI0XzIwIj5JbmRleDwvQT4pIC0gMSk7CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFAuPGI+YWxsPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjNfMTMiPkl0ZW1zPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzN18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzdfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzOF8yMSI+SXRlbXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE3OF85Ij5JdGVtX0FycmF5X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM5XzE2Ij5OZXdtZW51PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MzlfMTYiPkl0ZW1zPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdtZW51LCAibmV3X21lbnUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDJfNyI+TTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzOF8yMSI+SXRlbXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMjEiPkl0ZW1zPC9BPidMYXN0KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzOF8yMSI+SXRlbXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMjEiPkl0ZW1zPC9BPidMYXN0KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTE2XzQiPk1lbnVfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NDJfNyI+TTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTM5XzE2Ij5OZXdtZW51PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzIxIj5JdGVtczwvQT4uPGI+YWxsPC9iPidBZGRyZXNzKTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NDJfNyI+TTwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82M180Ij5OdWxsX01lbnU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTE2XzQiPk1lbnVfRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NDJfNyI+TTwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzEzIj5DcmVhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTU2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NDVfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1Nl8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjQ1XzIyIj5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NThfMTYiPkZyZWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NThfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk1OF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGcmVlLCAiZnJlZV9tZW51Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTYxXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NThfMTYiPkZyZWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NDVfMjIiPk1lbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTYxXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NjFfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY0NV8yMiI+TWVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82M180Ij5OdWxsX01lbnU8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NDVfMTQiPkRlbGV0ZTwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYwXzEzIj5Ecml2ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzBfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY2MF8yMSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzFfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY2MV8yMSI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82OF85Ij5LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjU0XzkiPkRyaXZlcl9SZXN1bHQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3M18xNiI+RHJpdmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTczXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzNfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTc0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzNfMTYiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRHJpdmVyLCAibWVudV9kcml2ZXIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzdfNyI+UjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzNfMTYiPkRyaXZlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY2MF8yMSI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY2MV8yMSI+S2V5PC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTc3XzciPlI8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+Y2FzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTc3XzciPlI8L0E+IDxiPmlzPC9iPgorICAgICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzg4XzQiPkVfVW5rbm93bl9Db21tYW5kPC9BPiAgPSZndDsgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NTZfMjciPlVua25vd25fUmVxdWVzdDwvQT47CisgICAgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODlfNCI+RV9Ob19NYXRjaDwvQT4gICAgICAgICA9Jmd0OyA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1N18yNyI+Tm9fTWF0Y2g8L0E+OworICAgICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkyXzQiPkVfUmVxdWVzdF9EZW5pZWQ8L0E+IHwKKyAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkwXzQiPkVfTm90X1NlbGVjdGFibGU8L0E+ICAgPSZndDsgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NTVfMjciPlJlcXVlc3RfRGVuaWVkPC9BPjsKKyAgICAgICAgICAgIDxiPndoZW48L2I+IDxiPm90aGVyczwvYj4gPSZndDsKKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3N183Ij5SPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmNhc2U8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1NF8yNyI+TWVudV9PazwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY2MF8xMyI+RHJpdmVyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzE0Ij5GcmVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xODBfMjAiPklBPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE3OF85Ij5JdGVtX0FycmF5X0FjY2VzczwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MV8yMCI+RnJlZV9JdGVtczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnByb2NlZHVyZTwvYj4gUmVsZWFzZSA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgICAoSXRlbV9BcnJheSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xODBfMjAiPklBPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MV8yMCI+RnJlZV9JdGVtczwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTlfMTQiPkk8L0E+PC9GT05UPiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzIwIj5JQTwvQT4nRmlyc3QgLi4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8yMCI+SUE8L0E+J0xhc3QgLSAxKSA8Yj5sb29wPC9iPgorICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8yMCI+SUE8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OTlfMTQiPkk8L0E+KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMDNfMTQiPkRlbGV0ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8yMCI+SUE8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OTlfMTQiPkk8L0E+KSk7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIFJlbGVhc2UgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8yMCI+SUE8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzE0Ij5GcmVlPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE0Nl8xMyI+RGVmYXVsdF9NZW51X09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNTJfMTMiPkdldF9PcHRpb25zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjNfNCI+TnVsbF9NZW51PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE0Nl8xMyI+RGVmYXVsdF9NZW51X09wdGlvbnM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDE1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNjhfMTMiPkRlZmF1bHRfSXRlbV9PcHRpb25zPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjU2XzEzIj5HZXRfT3B0aW9uczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNjhfMTMiPkRlZmF1bHRfSXRlbV9PcHRpb25zPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjc4MGZiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0KQEAgLTAsMCArMSw2ODEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51ICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4yNyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA3LzA1LzA1IDIwOjIwOjUyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG1lbnUgYmluZGluZy48L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBtb2R1bGUgaXMgZ2VuZXJhdGVkLiBQbGVhc2UgZG9uJ3QgY2hhbmdlIGl0IG1hbnVhbGx5ITwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSdW4gdGhlIGdlbmVyYXRvciBpbnN0ZWFkLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBTeXN0ZW07Cis8Yj53aXRoPC9iPiBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTFfNDAiPk1lbnVzPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBMaW5rZXJfT3B0aW9ucyAoIi1sbWVudXciKTsKKyAgIDxiPnByYWdtYTwvYj4gTGlua2VyX09wdGlvbnMgKCItbG5jdXJzZXN3Iik7CisKKyAgIFNwYWNlIDogQ2hhcmFjdGVyIDxiPnJlbmFtZXM8L2I+IEFkYS5DaGFyYWN0ZXJzLkxhdGluXzEuU3BhY2U7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfOSI+SXRlbTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5wcml2YXRlPC9iPjsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfOSI+TWVudTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5wcml2YXRlPC9iPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbnRlcmZhY2UgY29uc3RhbnRzICAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml80Ij5OdWxsX0l0ZW08L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfNCI+TnVsbF9NZW51PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPgorICAgICA8Yj5yYW5nZTwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDEpIC4uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxNyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIHByZWZpeCBNXyBzdGFuZHMgZm9yICJNZW51IFJlcXVlc3QiPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzQiPk1fTGVmdF9JdGVtPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF80Ij5NX1JpZ2h0X0l0ZW08L0E+PC9GT05UPiAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfNCI+TV9VcF9JdGVtPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzQiPk1fRG93bl9JdGVtPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M180Ij5NX1Njcm9sbFVwX0xpbmU8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzRfNCI+TV9TY3JvbGxEb3duX0xpbmU8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDY7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzQiPk1fU2Nyb2xsRG93bl9QYWdlPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA3OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl80Ij5NX1Njcm9sbFVwX1BhZ2U8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgODsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfNCI+TV9GaXJzdF9JdGVtPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzQiPk1fTGFzdF9JdGVtPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxMDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfNCI+TV9OZXh0X0l0ZW08L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDExOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF80Ij5NX1ByZXZpb3VzX0l0ZW08L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzQiPk1fVG9nZ2xlX0l0ZW08L0E+PC9GT05UPiAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxMzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODJfNCI+TV9DbGVhcl9QYXR0ZXJuPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84M180Ij5NX0JhY2tfUGF0dGVybjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzQiPk1fTmV4dF9NYXRjaDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxNjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfNCI+TV9QcmV2aW91c19NYXRjaDwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE3OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0aGUgb2xkICdDJyBuYW1lcyBmb3IgdGhlIHJlcXVlc3QgY29kZXM8L0VNPjwvRk9OVD4KKyAgIFJFUV9MRUZUX0lURU0gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82OV80Ij5NX0xlZnRfSXRlbTwvQT47CisgICBSRVFfUklHSFRfSVRFTSAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNzBfNCI+TV9SaWdodF9JdGVtPC9BPjsKKyAgIFJFUV9VUF9JVEVNICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83MV80Ij5NX1VwX0l0ZW08L0E+OworICAgUkVRX0RPV05fSVRFTSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzcyXzQiPk1fRG93bl9JdGVtPC9BPjsKKyAgIFJFUV9TQ1JfVUxJTkUgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83M180Ij5NX1Njcm9sbFVwX0xpbmU8L0E+OworICAgUkVRX1NDUl9ETElORSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzc0XzQiPk1fU2Nyb2xsRG93bl9MaW5lPC9BPjsKKyAgIFJFUV9TQ1JfRFBBR0UgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83NV80Ij5NX1Njcm9sbERvd25fUGFnZTwvQT47CisgICBSRVFfU0NSX1VQQUdFICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNzZfNCI+TV9TY3JvbGxVcF9QYWdlPC9BPjsKKyAgIFJFUV9GSVJTVF9JVEVNICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83N180Ij5NX0ZpcnN0X0l0ZW08L0E+OworICAgUkVRX0xBU1RfSVRFTSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzc4XzQiPk1fTGFzdF9JdGVtPC9BPjsKKyAgIFJFUV9ORVhUX0lURU0gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83OV80Ij5NX05leHRfSXRlbTwvQT47CisgICBSRVFfUFJFVl9JVEVNICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfODBfNCI+TV9QcmV2aW91c19JdGVtPC9BPjsKKyAgIFJFUV9UT0dHTEVfSVRFTSAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl84MV80Ij5NX1RvZ2dsZV9JdGVtPC9BPjsKKyAgIFJFUV9DTEVBUl9QQVRURVJOIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl84Ml80Ij5NX0NsZWFyX1BhdHRlcm48L0E+OworICAgUkVRX0JBQ0tfUEFUVEVSTiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzgzXzQiPk1fQmFja19QYXR0ZXJuPC9BPjsKKyAgIFJFUV9ORVhUX01BVENIICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl84NF80Ij5NX05leHRfTWF0Y2g8L0E+OworICAgUkVRX1BSRVZfTUFUQ0ggICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzg1XzQiPk1fUHJldmlvdXNfTWF0Y2g8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83N18xNCI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83N18yOCI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwN18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzhfMjgiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKworICAgPGI+ZnVuY3Rpb248L2I+ICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODZfMTMiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODZfMjciPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBFeGNlcHRpb25zICAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl80Ij5NZW51X0V4Y2VwdGlvbjwvQT48L0ZPTlQ+IDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBNZW51IG9wdGlvbnM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMTAiPk9uZV9WYWx1ZWQ8L0E+PC9GT05UPiAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfMTAiPlNob3dfRGVzY3JpcHRpb25zPC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjVfMTAiPlJvd19NYWpvcl9PcmRlcjwvQT48L0ZPTlQ+ICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjZfMTAiPklnbm9yZV9DYXNlPC9BPjwvRk9OVD4gICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfMTAiPlNob3dfTWF0Y2hlczwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMTAiPk5vbl9DeWNsaWM8L0E+PC9GT05UPiAgICAgICAgOiBCb29sZWFuOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPik7CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIzXzEwIj5PbmVfVmFsdWVkPC9BPiAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICAwOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTI0XzEwIj5TaG93X0Rlc2NyaXB0aW9uczwvQT4gPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAxIC4uICAxOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTI1XzEwIj5Sb3dfTWFqb3JfT3JkZXI8L0E+ICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAyIC4uICAyOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTI2XzEwIj5JZ25vcmVfQ2FzZTwvQT4gICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAzIC4uICAzOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTI3XzEwIj5TaG93X01hdGNoZXM8L0E+ICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA0IC4uICA0OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTI4XzEwIj5Ob25fQ3ljbGljPC9BPiAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA1IC4uICA1OworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPidTaXplIDxiPnVzZTwvYj4gMzI7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPbik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTAwOV8xMyI+RGVmYXVsdF9NZW51X09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbml0aWFsIGRlZmF1bHQgb3B0aW9ucyBmb3IgYSBtZW51LjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE0Nl8xMyI+RGVmYXVsdF9NZW51X09wdGlvbnM8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJdGVtIG9wdGlvbnM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTVfMTAiPlNlbGVjdGFibGU8L0E+PC9GT05UPiAgOiBCb29sZWFuOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPik7CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTU1XzEwIj5TZWxlY3RhYmxlPC9BPiAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICAwOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPidTaXplIDxiPnVzZTwvYj4gMzI7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPbik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTAxNV8xMyI+RGVmYXVsdF9JdGVtX09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbml0aWFsIGRlZmF1bHQgb3B0aW9ucyBmb3IgYW4gaXRlbS48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNjhfMTMiPkRlZmF1bHRfSXRlbV9PcHRpb25zPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJdGVtIEFycmF5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IEl0ZW1fQXJyYXkgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoUG9zaXRpdmUgPGI+cmFuZ2U8L2I+ICZsdDsmZ3Q7KSA8Yj5vZjwvYj4gPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIEl0ZW1fQXJyYXkpOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OF85Ij5JdGVtX0FycmF5X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IEl0ZW1fQXJyYXk7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk5Ml8xNCI+RnJlZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTkyXzIwIj5JQTwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNzhfOSI+SXRlbV9BcnJheV9BY2Nlc3M8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OTNfMjAiPkZyZWVfSXRlbXM8L0E+PC9GT05UPiA6IEJvb2xlYW4gOj0gRmFsc2UpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZWxlYXNlIHRoZSBtZW1vcnkgZm9yIGFuIGFsbG9jYXRlZCBpdGVtIGFycmF5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIElmIEZyZWVfSXRlbXMgaXMgVHJ1ZSwgY2FsbCBEZWxldGUoKSBmb3IgYWxsIHRoZSBpdGVtcyBpbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgYXJyYXkuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9taXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NF8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NF8yMSI+TmFtZTwvQT48L0ZPTlQ+ICAgICAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTJfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk1XzIxIj5EZXNjcmlwdGlvbjwvQT48L0ZPTlQ+IDogU3RyaW5nIDo9ICIiKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9uZXcuM3guaHRtbCI+bmV3X2l0ZW0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGlubGluZWQuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IE5ld19JdGVtICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N18yMyI+TmFtZTwvQT48L0ZPTlQ+ICAgICAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OF8yMyI+RGVzY3JpcHRpb248L0E+PC9GT05UPiA6IFN0cmluZyA6PSAiIikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPgorICAgICA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTFfMTMiPkNyZWF0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX25ldy4zeC5odG1sIj5uZXdfaXRlbSgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyNF8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMjRfMjIiPkl0bTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9uZXcuM3guaHRtbCI+ZnJlZV9pdGVtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlc2V0cyBJdG0gdG8gTnVsbF9JdGVtPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9taXRlbV92YWx1ZS4zeC5odG1sIj5taXRlbV92YWx1ZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1Ml8xNCI+U2V0X1ZhbHVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNTJfMjUiPkl0bTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxM18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTUzXzI1Ij5WYWx1ZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX3ZhbHVlLjN4Lmh0bWwiPnNldF9pdGVtX3ZhbHVlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjEyXzE0Ij5TZXRfVmFsdWU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE2Nl8xMyI+VmFsdWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMThfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE2Nl8yMCI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV92YWx1ZS4zeC5odG1sIj5pdGVtX3ZhbHVlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjE4XzEzIj5WYWx1ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdmlzaWJsZS4zeC5odG1sIj5taXRlbV92aXNpYmxlLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNzlfMTMiPlZpc2libGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjdfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE3OV8yMiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV92aXNpYmxlLjN4Lmh0bWwiPml0ZW1fdmlzaWJsZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+VmlzaWJsZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTkxXzE0Ij5TZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTkxXzI3Ij5JdG08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTJfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX29wdHMuM3guaHRtbCI+c2V0X2l0ZW1fb3B0cygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBbiBvdmVybG9hZGVkIFNldF9PcHRpb25zIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIwN18xNCI+U3dpdGNoX09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIwN18zMCI+SXRtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjA4XzMwIj5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMDlfMzAiPk9uPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX29wdHMuM3guaHRtbCI+aXRlbV9vcHRzX29uKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaXRlbV9vcHRzX29mZigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIG92ZXJsb2FkZWQgU3dpdGNoX09wdGlvbnMgaXMgZGVmaW5lZCBsYXRlci48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjMxXzE0Ij5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjMxXzI3Ij5JdG08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1Ml8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjMyXzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5pdGVtX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNDJfMTMiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNDJfMjYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5pdGVtX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gb3ZlcmxvYWRlZCBHZXRfT3B0aW9ucyBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmU8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21pdGVtX25hbWUuM3guaHRtbCI+bWl0ZW1fbmFtZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNTBfMTQiPk5hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1MF8yMCI+SXRtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY2XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNTFfMjAiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sIj5pdGVtX25hbWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1OV8xMyI+TmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2OF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjU5XzE5Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sIj5pdGVtX25hbWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW1wbGVtZW50ZWQgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChOYW1lKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjY3XzE0Ij5EZXNjcmlwdGlvbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjY3XzI3Ij5JdG08L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjY4XzI3Ij5EZXNjcmlwdGlvbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwiPml0ZW1fZGVzY3JpcHRpb24oKTs8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI3Nl8xMyI+RGVzY3JpcHRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI3Nl8yNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX25hbWUuM3guaHRtbCI+aXRlbV9kZXNjcmlwdGlvbigpOzwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW1wbGVtZW50ZWQgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChEZXNjcmlwdGlvbik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjg0XzE0Ij5TZXRfQ3VycmVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4OF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjg0XzI3Ij5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI4NV8yNyI+SXRtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPnNldF9jdXJyZW50X2l0ZW0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODhfMTQiPlNldF9DdXJyZW50PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjk4XzEzIj5DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk0XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yOThfMjIiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+Y3VycmVudF9pdGVtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk0XzEzIj5DdXJyZW50PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMxMV8xNCI+U2V0X1RvcF9Sb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMxMV8yNyI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzEyXzI3Ij5MaW5lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPnNldF90b3Bfcm93KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk5XzE0Ij5TZXRfVG9wX1JvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMyNV8xMyI+VG9wX1JvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwNV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzI1XzIyIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPnRvcF9yb3coKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMDVfMTMiPlRvcF9Sb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzEwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMzhfMTMiPkdldF9JbmRleDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzM4XzI0Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IFBvc2l0aXZlOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPml0ZW1faW5kZXgoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGUgdGhhdCBpbiB0aGlzIGJpbmRpbmcgd2Ugc3RhcnQgdGhlIG51bWJlcmluZyBvZiBpdGVtczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB3aXRoIDEuIFNvIHRoaXMgaXMgbnVtYmVyIGlzIG9uZSBtb3JlIHRoYW4geW91IGdldCBmcm9tIHRoZSBsb3c8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbGV2ZWwgY2FsbC48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMTBfMTMiPkdldF9JbmRleDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9wb3N0LjN4Lmh0bWwiPm1lbnVfcG9zdC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTFfMTQiPlBvc3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1MV8yMCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTJfMjAiPlBvc3Q8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3Bvc3QuM3guaHRtbCI+cG9zdF9tZW51KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdW5wb3N0X21lbnUoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyMl8xNCI+UG9zdDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzFfMTQiPlNldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzFfMjciPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3Ml8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPnNldF9tZW51X29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfT3B0aW9ucyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM4N18xNCI+U3dpdGNoX09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM4N18zMCI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0MF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzg4XzMwIj5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zODlfMzAiPk9uPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHNfb24oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtZW51X29wdHNfb2ZmKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTd2l0Y2hfT3B0aW9ucyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQxMV8xNCI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQxMV8yNyI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQxMl8zMiI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MjJfMTMiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MjJfMjYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjNfNCI+TnVsbF9NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9PcHRpb25zKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQzMF8xNCI+U2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDMwXzI2Ij5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2Ml8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDMxXzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+c2V0X21lbnVfd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzYxXzE0Ij5TZXRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDQ0XzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NDRfMjUiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjdfMTMiPkdldF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDU0XzE0Ij5TZXRfU3ViX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDU0XzMwIj5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ1NV8zMCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPnNldF9tZW51X3N1YigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3Ml8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NjhfMTMiPkdldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc4XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NjhfMjkiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+bWVudV9zdWIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzhfMTMiPkdldF9TdWJfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ3OF8xNCI+U2NhbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ3OF8yMSI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4NF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDc5XzIxIj5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODVfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4MF8yMSI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPnNjYWxlX21lbnUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zODNfMTQiPlNjYWxlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X2N1cnNvci4zeC5odG1sIj5tZW51X2N1cnNvci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80OTdfMTQiPlBvc2l0aW9uX0N1cnNvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5NF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDk3XzMxIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9jdXJzb3IuM3guaHRtbCI+cG9zX21lbnVfY3Vyc29yKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzk0XzE0Ij5Qb3NpdGlvbl9DdXJzb3I8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfbWFyay4zeC5odG1sIj5tZW51X21hcmsuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTEwXzE0Ij5TZXRfTWFyazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwM18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTEwXzI0Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTFfMjQiPk1hcms8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X21hcmsuM3guaHRtbCI+c2V0X21lbnVfbWFyaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwM18xNCI+U2V0X01hcms8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTI5XzE0Ij5NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MjlfMjAiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTBfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUzMF8yMCI+TWFyazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUzOF8xMyI+TWFyazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxM18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTM4XzE5Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9tYXJrLjN4Lmh0bWwiPm1lbnVfbWFyaygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbXBsZW1lbnRlZCBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKE1hcmspOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NDdfMTQiPlNldF9Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU0OF83Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTQ5XzciPkZvcmU8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU1MF83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+c2V0X21lbnVfZm9yZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQyM18xNCI+U2V0X0ZvcmVncm91bmQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTY2XzE0Ij5Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NjZfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NjdfMjYiPkZvcmU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9mb3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU3NV8xNCI+Rm9yZWdyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzNl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTc1XzI2Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzN18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTc2XzI2Ij5Gb3JlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NzdfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2ZvcmUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChGb3JlZ3JvdW5kKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTg2XzE0Ij5TZXRfQmFja2dyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81ODdfNyI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4OF83Ij5CYWNrPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81ODlfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPnNldF9tZW51X2JhY2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfQmFja2dyb3VuZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYwNV8xNCI+QmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjA1XzI2Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MDZfMjYiPkJhY2s8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2JhY2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNiIjMnw8L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjE0XzE0Ij5CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MTRfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MTVfMjYiPkJhY2s8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NThfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYxNl8yNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYmFjaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEJhY2tncm91bmQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDYzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MjVfMTQiPlNldF9HcmV5PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyNV8yNCI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyNl8yNCI+R3JleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjI3XzI0Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+c2V0X21lbnVfZ3JleSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ2M18xNCI+U2V0X0dyZXk8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjQ0XzE0Ij5HcmV5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDcxXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NDRfMjAiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY0NV8yMCI+R3JleTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfZ3JleSgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NTNfMTQiPkdyZXk8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjUzXzIwIj5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY1NF8yMCI+R3JleTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY1NV8yMCI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfZ3JleSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdyZXkpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjRfMTQiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg0XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjRfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjY1XzMzIj5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIgOj0gU3BhY2UpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+c2V0X21lbnVfcGFkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDg0XzE0Ij5TZXRfUGFkX0NoYXJhY3RlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NzlfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY3OV8yOSI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkxXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODBfMjkiPlBhZDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBDaGFyYWN0ZXIpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9wYWQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTBfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfc3BhY2luZy4zeC5odG1sIj5tZW51X3NwYWNpbmcuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjg4XzE0Ij5TZXRfU3BhY2luZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwMF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjg4XzI3Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwMV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjg5XzI3Ij5EZXNjcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5MF8yNyI+Um93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAgIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTFfMjciPkNvbDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiA6PSAwKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwiPnNldF9tZW51X3NwYWNpbmcoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDBfMTQiPlNldF9TcGFjaW5nPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcwN18xNCI+U3BhY2luZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwOF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzA3XzIzIj5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA5XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MDhfMjMiPkRlc2NyPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTBfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcwOV8yMyI+Um93PC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTFfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxMF8yMyI+Q29sPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfc3BhY2luZy4zeC5odG1sIj5tZW51X3NwYWNpbmcoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDhfMTQiPlNwYWNpbmc8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfcGF0dGVybi4zeC5odG1sIj5tZW51X3BhdHRlcm4uM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzJfMTMiPlNldF9QYXR0ZXJuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzJfMjYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzNfMjYiPlRleHQ8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3BhdHRlcm4uM3guaHRtbCI+c2V0X21lbnVfcGF0dGVybigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZXR1cm4gVFJVRSBpZiB0aGUgcGF0dGVybiBtYXRjaGVzLCBGQUxTRSBvdGhlcndpc2U8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjBfMTMiPlNldF9QYXR0ZXJuPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80NSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc1NV8xNCI+UGF0dGVybjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyN18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzU1XzIzIj5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI4XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NTZfMjMiPlRleHQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwiPm1lbnVfcGF0dGVybigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUyN18xNCI+UGF0dGVybjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9mb3JtYXQuM3guaHRtbCI+bWVudV9mb3JtYXQuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzY0XzE0Ij5TZXRfRm9ybWF0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NjRfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzOF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzY1XzI2Ij5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NjZfMjYiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogMCBhcmd1bWVudCBmb3IgTGluZXMgb3IgQ29sdW1uczs8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW5zdGVhZCB1c2UgRm9ybWF0IHRvIGdldCB0aGUgY3VycmVudCBzaXplczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgVGhlICBkZWZhdWx0ICBmb3JtYXQgIGlzICAxNiAgcm93cywgIDEgIGNvbHVtbi4gICAgQ2FsbGluZzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgc2V0X21lbnVfZm9ybWF0ICB3aXRoIGEgbnVsbCBtZW51IHBvaW50ZXIgd2lsbCBjaGFuZ2UgdGhpczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgZGVmYXVsdC4gIEEgemVybyByb3cgb3IgY29sdW1uIGFyZ3VtZW50IHRvIHNldF9tZW51X2Zvcm1hdDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgaXMgIGludGVycHJldGVkICBhcyAgYSAgcmVxdWVzdCAgbm90IHRvIGNoYW5nZSB0aGUgY3VycmVudDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgdmFsdWUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwiPnNldF9tZW51X2Zvcm1hdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUzN18xNCI+U2V0X0Zvcm1hdDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODJfMTQiPkZvcm1hdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1MV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzgyXzIyIj5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4M18yMiI+TGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1M18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzg0XzIyIj5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9mb3JtYXQuM3guaHRtbCI+bWVudV9mb3JtYXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTFfMTQiPkZvcm1hdDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5wcm9jZWR1cmU8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2MV80OSI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80OCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwMl8xNCI+U2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY1XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MDJfMzQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY2XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MDNfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5zZXRfaXRlbV9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTY1XzE0Ij5TZXRfSXRlbV9Jbml0X0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODE2XzE0Ij5TZXRfSXRlbV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzFfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgxNl8zNCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzJfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgxN18zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPnNldF9pdGVtX3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzFfMTQiPlNldF9JdGVtX1Rlcm1fSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MzBfMTQiPlNldF9NZW51X0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3N18zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODMwXzM0Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3OF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODMxXzM0Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+c2V0X21lbnVfaW5pdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3N18xNCI+U2V0X01lbnVfSW5pdF9Ib29rPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg0NF8xNCI+U2V0X01lbnVfVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgzXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NDRfMzQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg0XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NDVfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5zZXRfbWVudV90ZXJtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTgzXzE0Ij5TZXRfTWVudV9UZXJtX0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NThfMTMiPkdldF9JdGVtX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4OV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODU4XzMzIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+aXRlbV9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg5XzEzIj5HZXRfSXRlbV9Jbml0X0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjZfMTMiPkdldF9JdGVtX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODY2XzMzIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+aXRlbV90ZXJtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk0XzEzIj5HZXRfSXRlbV9UZXJtX0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NzRfMTMiPkdldF9NZW51X0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5OV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODc0XzMzIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk5XzEzIj5HZXRfTWVudV9Jbml0X0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84ODJfMTMiPkdldF9NZW51X1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODgyXzMzIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV90ZXJtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjA0XzEzIj5HZXRfTWVudV9UZXJtX0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfaXRlbXMuM3guaHRtbCI+bWVudV9pdGVtcy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTBfMTQiPlJlZGVmaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTBfMjQiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTFfMjQiPkl0ZW1zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaXRlbXMuM3guaHRtbCI+c2V0X21lbnVfaXRlbXMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTNfMTQiPlJlZGVmaW5lPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MThfMTQiPlNldF9JdGVtczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOF8yNSI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE5XzI1Ij5JdGVtczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE3OF85Ij5JdGVtX0FycmF5X0FjY2VzczwvQT4pIDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxM18xNCI+UmVkZWZpbmU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChTZXRfSXRlbXMpOzwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkxOF8xMyI+SXRlbXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkxOF8yMCI+TWVuPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MTlfMjAiPkluZGV4PC9BPjwvRk9OVD4gOiBQb3NpdGl2ZSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjIzXzEzIj5JdGVtczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkxMF8xMyI+SXRlbV9Db3VudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyOV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTEwXzI1Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IE5hdHVyYWw7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaXRlbXMuM3guaHRtbCI+aXRlbV9jb3VudCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyOV8xMyI+SXRlbV9Db3VudDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9uZXcuM3guaHRtbCI+bWVudV9uZXcuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MzdfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzOF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTM3XzIxIj5JdGVtczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9uZXcuM3guaHRtbCI+bmV3X21lbnUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGlubGluZWQ8L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IE5ld19NZW51ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0Ml8yMyI+SXRlbXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE3OF85Ij5JdGVtX0FycmF5X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzEzIj5DcmVhdGU8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NTZfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0NV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTU2XzIyIj5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9uZXcuM3guaHRtbCI+ZnJlZV9tZW51KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlc2V0IE1lbiB0byBOdWxsX01lbnU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGlubGluZWQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU0XzkiPkRyaXZlcl9SZXN1bHQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU0XzI3Ij5NZW51X09rPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU1XzI3Ij5SZXF1ZXN0X0RlbmllZDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1Nl8yNyI+VW5rbm93bl9SZXF1ZXN0PC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU3XzI3Ij5Ob19NYXRjaDwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzBfMTMiPkRyaXZlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2MF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTcwXzIxIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2MV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTcxXzIxIj5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NTRfOSI+RHJpdmVyX1Jlc3VsdDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIERyaXZlciBpcyBub3QgaW5saW5lZDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDogbWVudV9yZXF1ZXN0X25hbWUsIG1lbnVfcmVxdWVzdF9ieV9uYW1lPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnR5cGU8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+ICAgPGI+aXM8L2I+IDxiPm5ldzwvYj4gU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4gICA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisKKyAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4gOj0gMDsKKyAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzXzQiPk51bGxfTWVudTwvQT4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4gOj0gMDsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2ExNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bQpAQCAtMCwwICsxLDIyMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2UgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjIyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NTE6MTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl80OF8zNSI+TW91c2U8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiBTeXN0ZW0uQml0X09yZGVyOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOThfMTMiPkhhc19Nb3VzZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8xNiI+TW91c2VfQXZhaWw8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1vdXNlX0F2YWlsLCAiX25jX2hhc19tb3VzZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzY3XzEzIj5IYXNfS2V5PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA0XzQiPktleV9Nb3VzZTwvQT4pIDxiPm9yPC9iPiA8Yj5lbHNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl81Ml8xNiI+TW91c2VfQXZhaWw8L0E+IC89IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzk4XzEzIj5IYXNfTW91c2U8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTMzXzEzIj5HZXRfTW91c2U8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEyIj5FdmVudF9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPjsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjZfMTYiPkdldG1vdXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzY2XzE2Ij5FdjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNjRfMTIiPkV2ZW50X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0bW91c2UsICJnZXRtb3VzZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzciPkV2ZW50PC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl82Nl8xNiI+R2V0bW91c2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl82OV83Ij5FdmVudDwvQT4nPGI+QWNjZXNzPC9iPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNjlfNyI+RXZlbnQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzNfMTMiPkdldF9Nb3VzZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAxXzE0Ij5SZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMl83Ij5CdXR0b248L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwM183Ij5TdGF0ZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwNF83Ij5NYXNrPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzciPkJ1dHRvbl9OcjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IE5hdHVyYWwgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMl83Ij5CdXR0b248L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODJfNyI+U3RhdGVfTnI8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gTmF0dXJhbCA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAzXzciPlN0YXRlPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDJfNyI+QnV0dG9uPC9BPiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzdfMTIiPk1vZGlmaWVyX0tleXM8L0E+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAzXzciPlN0YXRlPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl84MF8yNiI+UHJlc3NlZDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMl83Ij5CdXR0b248L0E+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83Nl8xMiI+UmVhbF9CdXR0b25zPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTA0XzciPk1hc2s8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwNF83Ij5NYXNrPC9BPiA8Yj5vcjwvYj4gKCgyICoqICg2ICogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfODFfNyI+QnV0dG9uX05yPC9BPikpICoqIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzgyXzciPlN0YXRlX05yPC9BPik7CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTA0XzciPk1hc2s8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwNF83Ij5NYXNrPC9BPiA8Yj5vcjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzIxNl80Ij5CVVRUT05fQ1RSTDwvQT4gKiogKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzgxXzciPkJ1dHRvbl9OcjwvQT4gLSA0KSk7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDFfMTQiPlJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzExMF8xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV80MiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTExXzciPkJ1dHRvbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfNDIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzExMl83Ij5TdGF0ZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBCdXR0b25fU3RhdGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3XzQyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMTNfNyI+TWFzazwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5mb3I8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwXzExIj5TPC9BPjwvRk9OVD4gPGI+aW48L2I+IEJ1dHRvbl9TdGF0ZXMnPGI+UmFuZ2U8L2I+IDxiPmxvb3A8L2I+CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTEyXzciPlN0YXRlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTAwXzExIj5TPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMV8xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzExMV83Ij5CdXR0b248L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMDBfMTEiPlM8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMTNfNyI+TWFzazwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMTBfMTQiPlJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnRzPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjNfMTMiPlN0YXJ0X01vdXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjNfMjYiPk1hc2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY2XzQiPkFsbF9FdmVudHM8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwXzE2Ij5NTWFzazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTEwXzE2Ij5NPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTEwXzE2Ij5PPC9BPjwvRk9OVD4gOiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1NYXNrLCAibW91c2VtYXNrIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM183Ij5SPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTRfNyI+T2xkPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTEzXzciPlI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzExMF8xNiI+TU1hc2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjNfMjYiPk1hc2s8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMTRfNyI+T2xkPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMTNfNyI+UjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NV80Ij5Ob19FdmVudHM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzBfMTQiPkJlZXA8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzExNF83Ij5PbGQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjNfMTMiPlN0YXJ0X01vdXNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTI4XzE0Ij5FbmRfTW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyOF8yNSI+TWFzazwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY1XzQiPk5vX0V2ZW50czwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyOF8yNSI+TWFzazwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjVfNCI+Tm9fRXZlbnRzPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODcwXzE0Ij5CZWVwPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjhfMTQiPkVuZF9Nb3VzZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzNV8xNCI+RGlzcGF0Y2hfRXZlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzNV8zMCI+TWFzazwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTM2XzMwIj5CdXR0b248L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzN18zMCI+U3RhdGU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMTQiPkRpc3BhdGNoX0V2ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMzAiPk1hc2s8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMl8zMCI+QnV0dG9uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzNfMzAiPlN0YXRlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+KSA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4XzciPkw8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzRfMjYiPkFsdDwvQT47ICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByZXNldCB0byBub24gcmVhbCBidXR0b247PC9FTT48L0ZPTlQ+CisgICAgICA8Yj5pZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMjFfNCI+QlVUVE9OMV9FVkVOVFM8L0E+KSAvPSAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfMjYiPkxlZnQ8L0E+OworICAgICAgPGI+ZWxzaWY8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMzAiPk1hc2s8L0E+IDxiPmFuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMjIyXzQiPkJVVFRPTjJfRVZFTlRTPC9BPikgLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY5XzI2Ij5NaWRkbGU8L0E+OworICAgICAgPGI+ZWxzaWY8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMzAiPk1hc2s8L0E+IDxiPmFuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMjIzXzQiPkJVVFRPTjNfRVZFTlRTPC9BPikgLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzcwXzI2Ij5SaWdodDwvQT47CisgICAgICA8Yj5lbHNpZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMjRfNCI+QlVUVE9ONF9FVkVOVFM8L0E+KSAvPSAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzFfMjYiPkJ1dHRvbjQ8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83Nl8xMiI+UmVhbF9CdXR0b25zPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTM4XzciPkw8L0E+IDo9IDIgKiogKDYgKiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+KSk7CisgICAgICAgICA8Yj5mb3I8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzE0Ij5JPC9BPjwvRk9OVD4gPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT4nPGI+UmFuZ2U8L2I+IDxiPmxvb3A8L2I+CisgICAgICAgICAgICA8Yj5pZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzhfNyI+TDwvQT4pIC89IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzM18zMCI+U3RhdGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE1Ml8xNCI+STwvQT47CisgICAgICAgICAgICAgICA8Yj5leGl0PC9iPjsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTM4XzciPkw8L0E+IDo9IDIgKiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzhfNyI+TDwvQT47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzM18zMCI+U3RhdGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzgwXzI2Ij5QcmVzc2VkPC9BPjsKKyAgICAgICAgIDxiPmlmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzMwIj5NYXNrPC9BPiA8Yj5hbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzIxNl80Ij5CVVRUT05fQ1RSTDwvQT4pIC89IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMl8zMCI+QnV0dG9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83Ml8yNiI+Q29udHJvbDwvQT47CisgICAgICAgICA8Yj5lbHNpZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMTdfNCI+QlVUVE9OX1NISUZUPC9BPikgLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzczXzI2Ij5TaGlmdDwvQT47CisgICAgICAgICA8Yj5lbHNpZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMThfNCI+QlVUVE9OX0FMVDwvQT4pIC89IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMl8zMCI+QnV0dG9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83NF8yNiI+QWx0PC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8xNCI+RGlzcGF0Y2hfRXZlbnQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzdfMTQiPkdldF9FdmVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM3XzI1Ij5FdmVudDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzOF8yNSI+WTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzOV8yNSI+WDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTQwXzI1Ij5CdXR0b248L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDFfMjUiPlN0YXRlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3N183Ij5NYXNrPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzN18yNSI+RXZlbnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3NF8xMCI+QnN0YXRlPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM5XzI1Ij5YPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzdfMjUiPkV2ZW50PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzJfMTAiPlg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzOF8yNSI+WTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM3XzI1Ij5FdmVudDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTcyXzEzIj5ZPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMTQiPkRpc3BhdGNoX0V2ZW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTc3XzciPk1hc2s8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDBfMjUiPkJ1dHRvbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE0MV8yNSI+U3RhdGU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM3XzE0Ij5HZXRfRXZlbnQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDlfMTQiPlVuZ2V0X01vdXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDlfMjciPkV2ZW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODZfMTYiPlVuZ2V0bW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE4Nl8xNiI+RXY8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBVbmdldG1vdXNlLCAidW5nZXRtb3VzZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTg2XzE2Ij5VbmdldG1vdXNlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTQ5XzI3Ij5FdmVudDwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE0OV8xNCI+VW5nZXRfTW91c2U8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NF8xMyI+RW5jbG9zZWRfSW5fV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTRfMzMiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTVfMzMiPkV2ZW50PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzE2Ij5XZW5jbG9zZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk3XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xOTdfMTYiPlk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N181MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk3XzE2Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdlbmNsb3NlLCAid2VuY2xvc2UiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE5N18xNiI+V2VuY2xvc2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTRfMzMiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTVfMzMiPkV2ZW50PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzJfMTMiPlk8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NV8zMyI+RXZlbnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3Ml8xMCI+WDwvQT4pKQorICAgICAgICA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTRfMTMiPkVuY2xvc2VkX0luX1dpbmRvdzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTYxXzEzIj5Nb3VzZV9JbnRlcnZhbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTYxXzI5Ij5Nc2VjPC9BPjwvRk9OVD4gOiBOYXR1cmFsIDo9IDIwMCkgPGI+cmV0dXJuPC9iPiBOYXR1cmFsCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMV8xNiI+TW91c2VpbnRlcnZhbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMjExXzE2Ij5Nc2VjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNb3VzZWludGVydmFsLCAibW91c2VpbnRlcnZhbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzIxMV8xNiI+TW91c2VpbnRlcnZhbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNjFfMjkiPk1zZWM8L0E+KSkpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNjFfMTMiPk1vdXNlX0ludGVydmFsPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNDhfMzUiPk1vdXNlPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGJkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bQpAQCAtMCwwICsxLDIzNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjI3IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbW91c2UgYmluZGluZy48L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBtb2R1bGUgaXMgZ2VuZXJhdGVkLiBQbGVhc2UgZG9uJ3QgY2hhbmdlIGl0IG1hbnVhbGx5ITwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSdW4gdGhlIGdlbmVyYXRvciBpbnN0ZWFkLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBTeXN0ZW07CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl80Nl80MCI+TW91c2U8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNDhfMzUiPk1vdXNlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGUsIHRoYXQgaW4gbmN1cnNlcy0xLjkuOWUgZG9jdW1lbnRhdGlvbiBtb3VzZSBzdXBwb3J0PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlzIHN0aWxsIG1hcmtlZCBhcyBleHBlcmltZW50YWwuIFNvIGFsc28gdGhpcyBiaW5kaW5nIHdpbGwgY2hhbmdlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlmIHRoZSBuY3Vyc2VzIG1ldGhvZHMgY2hhbmdlLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG1vdXNlX3RyYWZvLCB3bW91c2VfdHJhZm8gYXJlIGltcGxlbWVudGVkIGFzIFRyYW5zZm9ybV9Db29yZGluYXRlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbiB0aGUgcGFyZW50IHBhY2thZ2UuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGltcGxlbWVudGVkOjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSRVBPUlRfTU9VU0VfUE9TSVRJT04gKGkuZS4gYXMgYSBwYXJhbWV0ZXIgdG8gUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBvciBTdGFydF9Nb3VzZSk8L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5wcml2YXRlPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfNCI+Tm9fRXZlbnRzPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl80Ij5BbGxfRXZlbnRzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzI2Ij5MZWZ0PC9BPjwvRk9OVD4sICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYWthOiBCdXR0b24gMTwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfMjYiPk1pZGRsZTwvQT48L0ZPTlQ+LCAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBha2E6IEJ1dHRvbiAyPC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF8yNiI+UmlnaHQ8L0E+PC9GT05UPiwgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGFrYTogQnV0dG9uIDM8L0VNPjwvRk9OVD4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzI2Ij5CdXR0b240PC9BPjwvRk9OVD4sICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYWthOiBCdXR0b24gNDwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfMjYiPkNvbnRyb2w8L0E+PC9GT05UPiwgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb250cm9sIEtleTwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfMjYiPlNoaWZ0PC9BPjwvRk9OVD4sICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBTaGlmdCBLZXk8L0VNPjwvRk9OVD4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzI2Ij5BbHQ8L0E+PC9GT05UPik7ICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQUxUIEtleTwvRU0+PC9GT05UPgorCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzEyIj5SZWFsX0J1dHRvbnM8L0E+PC9GT05UPiAgPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT4gPGI+cmFuZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzI2Ij5MZWZ0PC9BPiAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83MV8yNiI+QnV0dG9uNDwvQT47CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzEyIj5Nb2RpZmllcl9LZXlzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT4gPGI+cmFuZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzcyXzI2Ij5Db250cm9sPC9BPiAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83NF8yNiI+QWx0PC9BPjsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfMjYiPlJlbGVhc2VkPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF8yNiI+UHJlc3NlZDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfMjYiPkNsaWNrZWQ8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyXzI2Ij5Eb3VibGVfQ2xpY2tlZDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfMjYiPlRyaXBsZV9DbGlja2VkPC9BPjwvRk9OVD4pOworCisgICA8Yj50eXBlPC9iPiBCdXR0b25fU3RhdGVzIDxiPmlzPC9iPiA8Yj5hcnJheTwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT4pIDxiPm9mPC9iPiBCb29sZWFuOworICAgPGI+cHJhZ21hPC9iPiBQYWNrIChCdXR0b25fU3RhdGVzKTsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OF80Ij5BbGxfQ2xpY2tzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gQnV0dG9uX1N0YXRlcyA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfODFfMjYiPkNsaWNrZWQ8L0E+IC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzgzXzI2Ij5UcmlwbGVfQ2xpY2tlZDwvQT4gPSZndDsgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5vdGhlcnM8L2I+ID0mZ3Q7IEZhbHNlKTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTBfNCI+QWxsX1N0YXRlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IEJ1dHRvbl9TdGF0ZXMgOj0gKDxiPm90aGVyczwvYj4gPSZndDsgVHJ1ZSk7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cHJpdmF0ZTwvYj47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzUwXzEzIj5IYXNfTW91c2U8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJldHVybiB0cnVlIGlmIGEgbW91c2UgZGV2aWNlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLjwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl83N18xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl83N180MSI+QnV0dG9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzc4XzQxIj5TdGF0ZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNzlfNDEiPk1hc2s8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTdG9yZXMgdGhlIGV2ZW50IGRlc2NyaWJlZCBieSB0aGUgYnV0dG9uIGFuZCB0aGUgc3RhdGUgaW4gdGhlIG1hc2suPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJlZm9yZSB5b3UgY2FsbCB0aGlzIHRoZSBmaXJzdCB0aW1lLCB5b3Ugc2hvdWxkIGluaXQgdGhlIG1hc2s8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgd2l0aCB0aGUgRW1wdHlfTWFzayBjb25zdGFudDwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMV8xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl85NV8xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfOTVfNDIiPkJ1dHRvbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl85Nl80MiI+U3RhdGU8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQnV0dG9uX1N0YXRlczsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzk3XzQyIj5NYXNrPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmVnaXN0ZXIgYWxsIGV2ZW50cyBkZXNjcmliZWQgYnkgdGhlIEJ1dHRvbiBhbmQgdGhlIFN0YXRlIGJpdG1hcC48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmVmb3JlIHlvdSBjYWxsIHRoaXMgdGhlIGZpcnN0IHRpbWUsIHlvdSBzaG91bGQgaW5pdCB0aGUgbWFzazwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB3aXRoIHRoZSBFbXB0eV9NYXNrIGNvbnN0YW50PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGVyZSBpcyBvbmUgZGlmZmVyZW5jZSB0byBtb3VzbWFzaygpOiB3ZSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBvbGQgbWFzaywgdGhhdCBtZWFucyB0aGUgZXZlbnQgbWFzayB2YWx1ZSBiZWZvcmUgdGhpcyBjYWxsLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgSW1wbGVtZW50ZWQ6IFRoZSBsaWJyYXJ5IHZlcnNpb248L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmV0dXJucyBhIE1vdXNlX01hc2sgdGhhdCB0ZWxscyB3aGljaCBldmVudHMgYXJlIHJlcG9ydGVkLjwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMDdfMTMiPlN0YXJ0X01vdXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMDdfMjYiPk1hc2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY2XzQiPkFsbF9FdmVudHM8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+bW91c2VtYXNrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTIzXzEzIj5TdGFydF9Nb3VzZTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMjNfMTQiPkVuZF9Nb3VzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTIzXzI1Ij5NYXNrPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjVfNCI+Tm9fRXZlbnRzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRlcm1pbmF0ZXMgdGhlIG1vdXNlLCByZXN0b3JlcyB0aGUgc3BlY2lmaWVkIGV2ZW50IG1hc2s8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjhfMTQiPkVuZF9Nb3VzZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNjJfMTMiPkdldF9Nb3VzZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPmdldG1vdXNlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTMzXzEzIj5HZXRfTW91c2U8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTcxXzE0Ij5HZXRfRXZlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE3MV8yNSI+RXZlbnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xNzJfMjUiPlk8L0E+PC9GT05UPiAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xNzNfMjUiPlg8L0E+PC9GT05UPiAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE3NF8yNSI+QnV0dG9uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTc1XzI1Ij5TdGF0ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzlfOSI+QnV0dG9uX1N0YXRlPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICEhISBXYXJuaW5nOiBYIGFuZCBZIGFyZSBzY3JlZW4gY29vcmRpbmF0ZXMuIER1ZSB0byByaXBwZWQgb2YgbGluZXMgdGhleTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBtYXkgbm90IGJlIGlkZW50aWNhbCB0byB3aW5kb3cgY29vcmRpbmF0ZXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDogR2V0X0V2ZW50IG9ubHkgcmVwb3J0cyBvbmUgZXZlbnQsIHRoZSBDIGxpYnJhcnk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdmVyc2lvbiBzdXBwb3J0cyBtdWx0aXBsZSBldmVudHMsIGUuZy4ge2NsaWNrLTEsIGNsaWNrLTN9PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM3XzE0Ij5HZXRfRXZlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xODRfMTQiPlVuZ2V0X01vdXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xODRfMjciPkV2ZW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj51bmdldG1vdXNlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTQ5XzE0Ij5VbmdldF9Nb3VzZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk0XzEzIj5FbmNsb3NlZF9Jbl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTRfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE5NF8zMyI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTVfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE5NV8zMyI+RXZlbnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj53ZW5jbG9zZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCdXQgOiB1c2UgZXZlbnQgaW5zdGVhZCBvZiBzY3JlZW4gY29vcmRpbmF0ZXMuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTU0XzEzIj5FbmNsb3NlZF9Jbl9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzIwOV8xMyI+TW91c2VfSW50ZXJ2YWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjFfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzIwOV8yOSI+TXNlYzwvQT48L0ZPTlQ+IDogTmF0dXJhbCA6PSAyMDApIDxiPnJldHVybjwvYj4gTmF0dXJhbDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj5tb3VzZWludGVydmFsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTYxXzEzIj5Nb3VzZV9JbnRlcnZhbDwvQT4pOworCis8Yj5wcml2YXRlPC9iPgorICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMudW5zaWduZWRfbG9uZzsKKworICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzBfMTAiPklkPC9BPjwvRk9OVD4gICAgICA6IEludGVnZXIgPGI+cmFuZ2U8L2I+IEludGVnZXIgKDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnNob3J0J0ZpcnN0KSAuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciAoPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQnTGFzdCk7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8xMCI+WDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8xMyI+WTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8xNiI+WjwvQT48L0ZPTlQ+IDogSW50ZWdlciA8Yj5yYW5nZTwvYj4gSW50ZWdlciAoPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50J0ZpcnN0KSAuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciAoPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50J0xhc3QpOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzRfMTAiPkJzdGF0ZTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT4pOworCisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPiA8Yj51c2U8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzBfMTAiPklkPC9BPiAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgIDAgLi4gIDE1OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTcyXzEwIj5YPC9BPiAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDMyIC4uICA2MzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3Ml8xMyI+WTwvQT4gICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA2NCAuLiAgOTU7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzJfMTYiPlo8L0E+ICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgOTYgLi4gMTI3OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTc0XzEwIj5Cc3RhdGU8L0E+ICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gMTI4IC4uIDE1OTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODlfNCI+R2VuZXJhdGlvbl9CaXRfT3JkZXI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiBTeXN0ZW0uQml0X09yZGVyIDo9IFN5c3RlbS5Mb3dfT3JkZXJfRmlyc3Q7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgY29uc3RhbnQgbWF5IGJlIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTJfNCI+QlVUVE9OMV9SRUxFQVNFRDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwMDEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTNfNCI+QlVUVE9OMV9QUkVTU0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwMDIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTRfNCI+QlVUVE9OMV9DTElDS0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwMDQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTVfNCI+QlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwMTAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfNCI+QlVUVE9OMV9UUklQTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwMjAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTdfNCI+QlVUVE9OMV9SRVNFUlZFRF9FVkVOVDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwNDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOThfNCI+QlVUVE9OMl9SRUxFQVNFRDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAxMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTlfNCI+QlVUVE9OMl9QUkVTU0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAyMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDBfNCI+QlVUVE9OMl9DTElDS0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDA0MDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDFfNCI+QlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDEwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDJfNCI+QlVUVE9OMl9UUklQTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDIwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDNfNCI+QlVUVE9OMl9SRVNFUlZFRF9FVkVOVDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDQwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDRfNCI+QlVUVE9OM19SRUxFQVNFRDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMTAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDVfNCI+QlVUVE9OM19QUkVTU0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMjAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDZfNCI+QlVUVE9OM19DTElDS0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwNDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDdfNCI+QlVUVE9OM19ET1VCTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAxMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDhfNCI+QlVUVE9OM19UUklQTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAyMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDlfNCI+QlVUVE9OM19SRVNFUlZFRF9FVkVOVDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDA0MDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTBfNCI+QlVUVE9ONF9SRUxFQVNFRDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDEwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTFfNCI+QlVUVE9ONF9QUkVTU0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDIwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTJfNCI+QlVUVE9ONF9DTElDS0VEPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDQwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTNfNCI+QlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMTAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTRfNCI+QlVUVE9ONF9UUklQTEVfQ0xJQ0tFRDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMjAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTVfNCI+QlVUVE9ONF9SRVNFUlZFRF9FVkVOVDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwNDAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTZfNCI+QlVUVE9OX0NUUkw8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAxMDAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTdfNCI+QlVUVE9OX1NISUZUPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAyMDAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMThfNCI+QlVUVE9OX0FMVDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDA0MDAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTlfNCI+UkVQT1JUX01PVVNFX1BPU0lUSU9OPC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDEwMDAwMDAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjBfNCI+QUxMX01PVVNFX0VWRU5UUzwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDA3Nzc3Nzc3NzcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjFfNCI+QlVUVE9OMV9FVkVOVFM8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDAwNzcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjJfNCI+QlVUVE9OMl9FVkVOVFM8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDAwMDc3MDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjNfNCI+QlVUVE9OM19FVkVOVFM8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwMDA3NzAwMDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjRfNCI+QlVUVE9ONF9FVkVOVFM8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDgjMDAwNzcwMDAwMDAjOworCisgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NV80Ij5Ob19FdmVudHM8L0E+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPiA6PSAwOworICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjZfNCI+QWxsX0V2ZW50czwvQT4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMjIwXzQiPkFMTF9NT1VTRV9FVkVOVFM8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl80OF8zNSI+TW91c2U8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNmE5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtCkBAIC0wLDAgKzEsODQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGEgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKzxiPnVzZTwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+OworPGI+dXNlPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzQ3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQyIj5Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCI+U2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzI5Ij5QYW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU0XzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzE2Ij5TZXRfUGFuZWxfVXNlcnB0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU0XzE2Ij5QYW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfMTYiPkFkZHI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9QYW5lbF9Vc2VycHRyLCAic2V0X3BhbmVsX3VzZXJwdHIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfMTYiPlNldF9QYW5lbF9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18yOSI+UGFuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81NF8yOSI+RGF0YTwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCI+U2V0X1VzZXJfRGF0YTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjgiPlBhbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8xNiI+UGFuZWxfVXNlcnB0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY1XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUGFuZWxfVXNlcnB0ciwgInBhbmVsX3VzZXJwdHIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY1XzE2Ij5QYW5lbF9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8yOCI+UGFuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+UGFuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjBfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82MF8yOSI+RGF0YTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPlBhbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzE0Ij5HZXRfVXNlcl9EYXRhPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDIiPlVzZXJfRGF0YTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiOGZkNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0KQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YSAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xNCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M185IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQyIj5Vc2VyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmxpbWl0ZWQ8L2I+IDxiPnByaXZhdGU8L2I+OworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQyIj5Vc2VyX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80M185Ij5Vc2VyPC9BPjsKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV80MiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80N180NyI+VXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQyIj5Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzUxXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTFfMjkiPlBhbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTJfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnNldF9wYW5lbF91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzFfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83MV8yOSI+UGFuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzJfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbF91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYzXzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjNfMjgiPlBhbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWxfdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MiI+VXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1YTFiYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bQpAQCAtMCwwICsxLDE3MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTMgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludDsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82N18xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82N18yMSI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMTYiPk5ld3BhbmVsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl81MV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3cGFuZWwsICJuZXdfcGFuZWwiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl81NF83Ij5QYW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl81MV8xNiI+TmV3cGFuZWw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjdfMjEiPldpbjwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl81NF83Ij5QYW48L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzU0XzQiPk51bGxfUGFuZWw8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzU0XzciPlBhbjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82N18xMyI+Q3JlYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNzdfMTQiPkJvdHRvbTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNzdfMjIiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzE2Ij5Cb3R0b21wYW5lbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNjVfMTYiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBCb3R0b21wYW5lbCwgImJvdHRvbV9wYW5lbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzY1XzE2Ij5Cb3R0b21wYW5lbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl83N18yMiI+UGFuPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNzdfMTQiPkJvdHRvbTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzgyXzE0Ij5Ub3A8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzgyXzE5Ij5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NV8xNiI+VG9wcGFuZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzc1XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgVG9wcGFuZWwsICJ0b3BfcGFuZWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl83NV8xNiI+VG9wcGFuZWw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODJfMTkiPlBhbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzgyXzE0Ij5Ub3A8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl84N18xNCI+U2hvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODdfMjAiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1XzE2Ij5TaG93cGFuZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzg1XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2hvd3BhbmVsLCAic2hvd19wYW5lbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzg1XzE2Ij5TaG93cGFuZWw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODdfMjAiPlBhbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzg3XzE0Ij5TaG93PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfOTdfMTQiPkhpZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzk3XzIwIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8xNiI+SGlkZXBhbmVsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl85NV8xNiI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEhpZGVwYW5lbCwgImhpZGVfcGFuZWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl85NV8xNiI+SGlkZXBhbmVsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzk3XzIwIj5QYW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82MF80Ij5QYW5lbF9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl85N18xNCI+SGlkZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwM18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEwMl8xMyI+R2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwM18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEwMl8yNSI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1XzE2Ij5QYW5lbF9XaW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMDVfMTYiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFBhbmVsX1dpbiwgInBhbmVsX3dpbmRvdyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMDVfMTYiPlBhbmVsX1dpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMDJfMjUiPlBhbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEwOF83Ij5XaW48L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEwOF83Ij5XaW48L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5HZXRfV2luZG93PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMV8xNCI+UmVwbGFjZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMV8yMyI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExN18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMl8yMyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzE2Ij5SZXBsYWNlX1BhbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzExOV8xNiI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTE5XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUmVwbGFjZV9QYW4sICJyZXBsYWNlX3BhbmVsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTE5XzE2Ij5SZXBsYWNlX1BhbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTFfMjMiPlBhbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTJfMjMiPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMV8xNCI+UmVwbGFjZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTdfMTQiPk1vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTdfMjAiPlBhbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMThfMjAiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTE5XzIwIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzJfMTYiPk1vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMzJfMTYiPlBhbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTMyXzE2Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMzJfMTYiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTW92ZSwgIm1vdmVfcGFuZWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMzJfMTYiPk1vdmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTE3XzIwIj5QYW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExOF8yMCI+TGluZTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExOV8yMCI+Q29sdW1uPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExN18xNCI+TW92ZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEyNF8xMyI+SXNfSGlkZGVuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI0XzI0Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDRfMTYiPlBhbmVsX0hpZGRlbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzE0NF8xNiI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFBhbmVsX0hpZGRlbiwgInBhbmVsX2hpZGRlbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzE0NF8xNiI+UGFuZWxfSGlkZGVuPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEyNF8yNCI+UGFuPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+Q3Vyc2VzX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEyNF8xMyI+SXNfSGlkZGVuPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEzOV8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTM5XzIyIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Nl8xNiI+RGVsX1BhbmVsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTU2XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRGVsX1BhbmVsLCAiZGVsX3BhbmVsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTU2XzE2Ij5EZWxfUGFuZWw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTM5XzIyIj5QYW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82MF80Ij5QYW5lbF9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTM5XzIyIj5QYW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl81NF80Ij5OdWxsX1BhbmVsPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEzOV8xNCI+RGVsZXRlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWU5MzcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtCkBAIC0wLDAgKzEsMTUzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xOSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBTeXN0ZW07CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNDVfNDAiPlBhbmVsczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBMaW5rZXJfT3B0aW9ucyAoIi1scGFuZWx3Iik7CisgICA8Yj5wcmFnbWE8L2I+IExpbmtlcl9PcHRpb25zICgiLWxuY3Vyc2VzdyIpOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzkiPlBhbmVsPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnByaXZhdGU8L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEludGVyZmFjZSBjb25zdGFudHMgIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzQiPk51bGxfUGFuZWw8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBFeGNlcHRpb25zICAgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzQ5XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzQ5XzIxIj5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+bmV3X3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoQ3JlYXRlKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gTmV3X1BhbmVsICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzI0Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjdfMTMiPkNyZWF0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPm5ld19wYW5lbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChOZXdfUGFuZWwpOzwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzYzXzE0Ij5Cb3R0b208L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzYzXzIyIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+Ym90dG9tX3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzc3XzE0Ij5Cb3R0b208L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl83M18xNCI+VG9wPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODJfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl83M18xOSI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnRvcF9wYW5lbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl84Ml8xNCI+VG9wPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfODNfMTQiPlNob3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzgzXzIwIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+c2hvd19wYW5lbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl84N18xNCI+U2hvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml8xNCI+VXBkYXRlX1BhbmVsczwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj51cGRhdGVfcGFuZWxzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgVXBkYXRlX1BhbmVscywgInVwZGF0ZV9wYW5lbHMiKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl85M18xNCI+SGlkZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfOTNfMjAiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5oaWRlX3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzk3XzE0Ij5IaWRlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTAzXzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTAzXzI1Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWxfd2luZG93KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEwMl8xMyI+R2V0X1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiBQYW5lbF9XaW5kb3cgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3XzI3Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5HZXRfV2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJhZ21hIElubGluZSAoUGFuZWxfV2luZG93KTs8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzExNl8xNCI+UmVwbGFjZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzExNl8yMyI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMl8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzExN18yMyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnJlcGxhY2VfcGFuZWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTExXzE0Ij5SZXBsYWNlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMjhfMTQiPk1vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTdfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMjhfMjAiPlBhbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMThfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMjlfMjAiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTMwXzIwIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+bW92ZV9wYW5lbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTdfMTQiPk1vdmU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTQyXzEzIj5Jc19IaWRkZW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNDJfMjQiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbF9oaWRkZW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI0XzEzIj5Jc19IaWRkZW48L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzEzIj5BYm92ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEyOV8xMyI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsX2Fib3ZlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQWJvdmUsICJwYW5lbF9hYm92ZSIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzRfMTMiPkJlbG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTM0XzEzIj5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWxfYmVsb3coKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBCZWxvdywgInBhbmVsX2JlbG93Iik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNTRfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzE1NF8yMiI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+ZGVsX3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoRGVsZXRlKTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzU0XzQiPk51bGxfUGFuZWw8L0E+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4gOj0gMDsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjFmOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtCkBAIC0wLDAgKzEsODMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QdXRXaW4gICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjMgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKworPGI+d2l0aDwvYj4gQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkNfU3RyZWFtczsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DX1N0cmVhbXM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDNfMzUiPlB1dFdpbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzEyIj5JQ1M8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQ19TdHJlYW1zOworICAgPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMiI+QUNTPC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkNfU3RyZWFtczsKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ1XzE0Ij5QdXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80NV8yNiI+V2luPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDZfMjYiPkZpbGU8L0E+PC9GT05UPiA6IEFkYS5TdHJlYW1zLlN0cmVhbV9JTy5GaWxlX1R5cGUpIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTYiPnB1dHdpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNTNfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzUzXzE2Ij5mPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNDdfMTIiPklDUzwvQT4uRklMRXMpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgcHV0d2luLCAicHV0d2luIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+UjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl81M18xNiI+cHV0d2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ1XzI2Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNDhfMTIiPkFDUzwvQT4uQ19TdHJlYW0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80Nl8yNiI+RmlsZTwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl81Nl83Ij5SPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzFfNCI+Q3Vyc2VzX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDVfMTQiPlB1dF9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ4XzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80OF8yNSI+RmlsZTwvQT48L0ZPTlQ+IDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzE2Ij5nZXR3aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzY1XzE2Ij5mPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNDdfMTIiPklDUzwvQT4uRklMRXMpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBnZXR3aW4sICJnZXR3aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF83Ij5XPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNjVfMTYiPmdldHdpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl80OF8xMiI+QUNTPC9BPi5DX1N0cmVhbSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ4XzI1Ij5GaWxlPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzY4XzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzY4XzciPlc8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80OF8xMyI+R2V0X1dpbmRvdzwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80M18zNSI+UHV0V2luPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmNjBlNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4zIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+CisKKzxiPndpdGg8L2I+IEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDNfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl80NV80MCI+UHV0V2luPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzUxXzE0Ij5QdXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl81MV8yNiI+V2luPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNTJfMjYiPkZpbGU8L0E+PC9GT05UPiA6IEFkYS5TdHJlYW1zLlN0cmVhbV9JTy5GaWxlX1R5cGUpOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzYzXzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl82M18yNSI+RmlsZTwvQT48L0ZPTlQ+ICA6IEFkYS5TdHJlYW1zLlN0cmVhbV9JTy5GaWxlX1R5cGUpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQzXzM1Ij5QdXRXaW48L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YjIzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtCkBAIC0wLDAgKzEsMTY5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzQyXzM1Ij5UZXJtY2FwPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzU5XzEzIj5HZXRfRW50cnk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81OV8yNCI+TmFtZTwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMTYiPnRnZXRlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81MV8xNiI+bmFtZTwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheTsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV80NCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81MV8xNiI+dmFsPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KQorICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0Z2V0ZW50LCAidGdldGVudCIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83Ij5OYW1lVHh0PC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTlfMjQiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzciPkxlbmd0aDwvQT48L0ZPTlQ+ICA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+aWdub3JlZDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IGNoYXJfYXJyYXkgKDAgLi4gMCkgOj0gKDAgPSZndDsgbnVsKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyI+cmVzdWx0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTlfMjQiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU0XzciPk5hbWVUeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU1XzciPkxlbmd0aDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81N183Ij5yZXN1bHQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNTFfMTYiPnRnZXRlbnQ8L0E+IChjaGFyX2FycmF5ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU2XzciPmlnbm9yZWQ8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81NF83Ij5OYW1lVHh0PC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81N183Ij5yZXN1bHQ8L0E+ID0gLTEgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBCb29sZWFuJ1ZhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81N183Ij5yZXN1bHQ8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzU5XzEzIj5HZXRfRW50cnk8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82M18xMyI+R2V0X0ZsYWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82M18yMyI+TmFtZTwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMTYiPnRnZXRmbGFnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNzFfMTYiPmlkPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRnZXRmbGFnLCAidGdldGZsYWciKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjNfMjMiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzYzXzIzIj5OYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl83M183Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzc0XzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNzFfMTYiPnRnZXRmbGFnPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl83M183Ij5UeHQ8L0E+KSA9IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjNfMTMiPkdldF9GbGFnPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY3XzE0Ij5HZXRfTnVtYmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjdfMjYiPk5hbWU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82OF8yNiI+VmFsdWU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82OV8yNiI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IEJvb2xlYW4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5XzE2Ij50Z2V0bnVtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfODlfMTYiPmlkPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRnZXRudW0sICJ0Z2V0bnVtIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY3XzI2Ij5OYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82N18yNiI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfOTFfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl85Ml83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjhfMjYiPlZhbHVlPC9BPiA6PSBJbnRlZ2VyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzg5XzE2Ij50Z2V0bnVtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl85MV83Ij5UeHQ8L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82OF8yNiI+VmFsdWU8L0E+ID0gLTEgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjlfMjYiPlJlc3VsdDwvQT4gOj0gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82OV8yNiI+UmVzdWx0PC9BPiA6PSAgVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY3XzE0Ij5HZXRfTnVtYmVyPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83M18xNCI+R2V0X1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83M18yNiI+TmFtZTwvQT48L0ZPTlQ+ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzRfMjYiPlZhbHVlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzVfMjYiPlJlc3VsdDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBCb29sZWFuKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfMTYiPnRnZXRzdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTA4XzE2Ij5pZDwvQT48L0ZPTlQ+ICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDhfMTYiPmJ1ZjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgdGdldHN0ciwgInRnZXRzdHIiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzczXzI2Ij5OYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTJfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM183Ij5UeHQyPC9BPjwvRk9OVD4gICA6IGNoYXJzX3B0cjsKKyAgICAgIDxiPnR5cGU8L2I+IHQgPGI+aXM8L2I+IDxiPm5ldzwvYj4gY2hhcl9hcnJheSAoMCAuLiAxMDI0KTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBkb2VzIGl0IG5lZWQgdG8gYmUgMTAyND88L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1XzciPlJldHVybl9CdWZmZXI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiB0IDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7IG51bCk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzNfMjYiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzExMV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzExMl83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTEzXzciPlR4dDI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTA4XzE2Ij50Z2V0c3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMTFfNyI+VHh0PC9BPiwgY2hhcl9hcnJheSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMTVfNyI+UmV0dXJuX0J1ZmZlcjwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzExM183Ij5UeHQyPC9BPiA9IE51bGxfUHRyIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc1XzI2Ij5SZXN1bHQ8L0E+IDo9IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzRfMjYiPlZhbHVlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTEzXzciPlR4dDI8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzVfMjYiPlJlc3VsdDwvQT4gOj0gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzczXzE0Ij5HZXRfU3RyaW5nPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc2XzEzIj5HZXRfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc2XzI1Ij5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfMTYiPnRnZXRzdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTI5XzE2Ij5JZDwvQT48L0ZPTlQ+ICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMjlfMTYiPmJ1ZjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgdGdldHN0ciwgInRnZXRzdHIiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc2XzI1Ij5OYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF83Ij5UeHQyPC9BPjwvRk9OVD4gICA6IGNoYXJzX3B0cjsKKyAgICAgIDxiPnR5cGU8L2I+IHQgPGI+aXM8L2I+IDxiPm5ldzwvYj4gY2hhcl9hcnJheSAoMCAuLiAxMDI0KTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBkb2VzIGl0IG5lZWQgdG8gYmUgMTAyND88L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2XzciPlBob255X1R4dDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IHQgOj0gKDxiPm90aGVyczwvYj4gPSZndDsgbnVsKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83Nl8yNSI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTMyXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTMzXzciPkxlbmd0aDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMzRfNyI+VHh0MjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMjlfMTYiPnRnZXRzdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEzMl83Ij5UeHQ8L0E+LCBjaGFyX2FycmF5ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEzNl83Ij5QaG9ueV9UeHQ8L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMzRfNyI+VHh0MjwvQT4gPSBOdWxsX1B0ciA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83Nl8xMyI+R2V0X1N0cmluZzwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81M18xMyI+VEdvdG88L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTNfMjAiPkNhcDwvQT48L0ZPTlQ+IDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzU0XzIwIj5Db2w8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTBfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTVfMjAiPlJvdzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gVGVybWNhcF9TdHJpbmcgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMTYiPnRnb3RvPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1MV8xNiI+Y2FwPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1MV8xNiI+Y29sPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1M18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNTFfMTYiPnJvdzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRnb3RvKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1XzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzUzXzIwIj5DYXA8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Nl83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81M18yMCI+Q2FwPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNTVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNTZfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5yZXR1cm48L2I+IFRlcm1jYXBfU3RyaW5nICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTUxXzE2Ij50Z290bzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTU1XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzU0XzIwIj5Db2w8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTVfMjAiPlJvdzwvQT4pKSkpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzUzXzEzIj5UR290bzwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNDJfMzUiPlRlcm1jYXA8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjIxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtCkBAIC0wLDAgKzEsODYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl80N180MCI+VGVybWNhcDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzQyXzM1Ij5UZXJtY2FwPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIGN1cnNfdGVybWNhcC4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogIHRwdXRzIChzZWUgY3Vyc190ZXJtaW5mbyk8L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gVGVybWNhcF9TdHJpbmcgPGI+aXM8L2I+IDxiPm5ldzwvYj4gU3RyaW5nOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE0OF8xMyI+VEdvdG88L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNDhfMjAiPkNhcDwvQT48L0ZPTlQ+IDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTQ5XzIwIj5Db2w8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNTBfMjAiPlJvdzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gVGVybWNhcF9TdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdGdvdG8oKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzQ5XzEzIj5HZXRfRW50cnk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl80OV8yNCI+TmFtZTwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdGdldGVudCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNjlfMTMiPkdldF9GbGFnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNjlfMjMiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRnZXRmbGFnKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfODVfMTQiPkdldF9OdW1iZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl84NV8yNiI+TmFtZTwvQT48L0ZPTlQ+ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl84Nl8yNiI+VmFsdWU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl84N18yNiI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IEJvb2xlYW4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRnZXRudW0oKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDRfMTQiPkdldF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDRfMjYiPk5hbWU8L0E+PC9GT05UPiAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTA1XzI2Ij5WYWx1ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTA2XzI2Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQm9vbGVhbik7CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMjdfMTMiPkdldF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMjdfMjUiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyBmb3VuZC48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB0Z2V0c3RyKCk8L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl80Ml8zNSI+VGVybWNhcDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjE2Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0KQEAgLTAsMCArMSwxNjcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8gICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS41IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7Cis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl80NF8zNSI+VGVybWluZm88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUyXzEzIj5Jc19NaW51c09uZV9Qb2ludGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUyXzM0Ij5QPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gY2hhcnNfcHRyKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81MF8xMyI+SXNfTWludXNPbmVfUG9pbnRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81MF8zNCI+UDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IGNoYXJzX3B0cikgPGI+cmV0dXJuPC9iPiBCb29sZWFuIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18xMiI+V2VpcmRfQWRkcmVzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyI+SW52YWxpZF9Qb2ludGVyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTNfMTIiPldlaXJkX0FkZHJlc3M8L0E+IDo9IC0xOworICAgICAgPGI+ZnVuY3Rpb248L2I+IFRvX1dlaXJkIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgorICAgICAgICAoU291cmNlID0mZ3Q7IGNoYXJzX3B0ciwgVGFyZ2V0ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUzXzEyIj5XZWlyZF9BZGRyZXNzPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiBUb19XZWlyZCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTBfMzQiPlA8L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzU0XzciPkludmFsaWRfUG9pbnRlcjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUwXzEzIj5Jc19NaW51c09uZV9Qb2ludGVyPC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81MF8xMyI+SXNfTWludXNPbmVfUG9pbnRlcjwvQT4pOworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9GbGFnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjdfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzY0XzIzIj5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8xNiI+dGlnZXRmbGFnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzY5XzE2Ij5pZDwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0aWdldGZsYWcpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjRfMjMiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82NF8yMyI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzcxXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzcyXzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzY5XzE2Ij50aWdldGZsYWc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl83MV83Ij5UeHQ8L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzRfNCI+Q3Vyc2VzX1RydWU8L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9GbGFnPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81N18xNCI+R2V0X1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81N18yNiI+TmFtZTwvQT48L0ZPTlQ+ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNThfMjYiPlZhbHVlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiBUZXJtaW5mb19TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNTlfMjYiPlJlc3VsdDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBCb29sZWFuKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18xNiI+dGlnZXRzdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfODdfMTYiPmlkPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0aWdldHN0ciwgInRpZ2V0c3RyIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5XzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81N18yNiI+TmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTBfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxXzciPlR4dDI8L0E+PC9GT05UPiA6IGNoYXJzX3B0cjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNTdfMjYiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl84OV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl85MF83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzkxXzciPlR4dDI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzg3XzE2Ij50aWdldHN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzg5XzciPlR4dDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzkxXzciPlR4dDI8L0E+ID0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU5XzI2Ij5SZXN1bHQ8L0E+IDo9IEZhbHNlOworICAgICAgPGI+ZWxzaWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUwXzEzIj5Jc19NaW51c09uZV9Qb2ludGVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfOTFfNyI+VHh0MjwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU4XzI2Ij5WYWx1ZTwvQT4gIDo9IFRlcm1pbmZvX1N0cmluZyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl85MV83Ij5UeHQyPC9BPikpOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNTlfMjYiPlJlc3VsdDwvQT4gOj0gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81N18xNCI+R2V0X1N0cmluZzwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjBfMTMiPkhhc19TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzYwXzI1Ij5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfMTYiPnRpZ2V0c3RyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMDhfMTYiPmlkPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0aWdldHN0ciwgInRpZ2V0c3RyIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjBfMjUiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyXzciPlR4dDI8L0E+PC9GT05UPiA6IGNoYXJzX3B0cjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjBfMjUiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMTBfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTExXzciPkxlbmd0aDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTEyXzciPlR4dDI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEwOF8xNiI+dGlnZXRzdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMTBfNyI+VHh0PC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTEyXzciPlR4dDI8L0E+ID0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNpZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTBfMTMiPklzX01pbnVzT25lX1BvaW50ZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMTJfNyI+VHh0MjwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82MF8xMyI+SGFzX1N0cmluZzwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjhfMTMiPkdldF9OdW1iZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjZfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzY4XzI1Ij5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gSW50ZWdlciA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN18xNiI+dGlnZXRzdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEyN18xNiI+czwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0aWdldHN0cik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjhfMjUiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMF83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjhfMjUiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMjlfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTMwXzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiBJbnRlZ2VyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMjdfMTYiPnRpZ2V0c3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTI5XzciPlR4dDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjhfMTMiPkdldF9OdW1iZXI8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83Nl8xNCI+UHV0X1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzN18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzZfMjYiPlN0cjwvQT48L0ZPTlQ+ICAgIDogVGVybWluZm9fU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83N18yNiI+YWZmY250PC9BPjwvRk9OVD4gOiBOYXR1cmFsIDo9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc4XzI2Ij5wdXRjPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzcxXzkiPnB1dGN0eXBlPC9BPiA6PSA8Yj5udWxsPC9iPikgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDBfMTYiPnRwdXRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDBfMTYiPnN0cjwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQwXzE2Ij5hZmZjbnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDBfMTYiPnB1dGM8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzFfOSI+cHV0Y3R5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzXzE2Ij5wdXRwPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDNfMTYiPnN0cjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0cHV0cyk7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgcHV0cCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0Nl83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzZfMjYiPlN0cjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3XzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoU3RyaW5nICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83Nl8yNiI+U3RyPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0Nl83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDdfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzhfMjYiPnB1dGM8L0E+ID0gPGI+bnVsbDwvYj4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0OF83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0M18xNiI+cHV0cDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0Nl83Ij5UeHQ8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDhfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDBfMTYiPnRwdXRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQ2XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83N18yNiI+YWZmY250PC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc4XzI2Ij5wdXRjPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDhfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83Nl8xNCI+UHV0X1N0cmluZzwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXJtaW5mbzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmVkZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0KQEAgLTAsMCArMSw4NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjMgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl80OF80MCI+VGVybWluZm88L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRlcm1pbmZvPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIGN1cnNfdGVybWluZm8uM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW1wbGVtZW50ZWQ6ICBzZXR1cHRlcm0sIHNldHRlcm0sIHNldF9jdXJ0ZXJtLCBkZWxfY3VydGVybSw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgcmVzdGFydHRlcm0sIHRwYXJtLCBwdXRwLCB2aWRwdXRzLCAgdmlkYXR0ciw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgbXZjdXI8L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gVGVybWluZm9fU3RyaW5nIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN0cmluZzsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzgzXzE0Ij5HZXRfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzgzXzI2Ij5OYW1lPC9BPjwvRk9OVD4gICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl84NF8yNiI+VmFsdWU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IFRlcm1pbmZvX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl84NV8yNiI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IEJvb2xlYW4pOworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEwNl8xMyI+SGFzX1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMDZfMjUiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRpZ2V0c3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNjdfMTMiPkdldF9GbGFnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzY3XzIzIj5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB0aWdldGZsYWcoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMjZfMTMiPkdldF9OdW1iZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTI2XzI1Ij5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gSW50ZWdlcjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB0aWdldG51bSgpPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfOSI+cHV0Y3R5cGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMzgiPmM8L0E+PC9GT05UPiA6IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83MV85Ij5wdXRjdHlwZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTM3XzE0Ij5QdXRfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEzN18yNiI+U3RyPC9BPjwvRk9OVD4gICAgOiBUZXJtaW5mb19TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTM4XzI2Ij5hZmZjbnQ8L0E+PC9GT05UPiA6IE5hdHVyYWwgOj0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMzlfMjYiPnB1dGM8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzFfOSI+cHV0Y3R5cGU8L0E+IDo9IDxiPm51bGw8L2I+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB0cHV0cygpPC9FTT48L0ZPTlQ+CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXJtaW5mbzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzkxZDFhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0KQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eCAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml80OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ4XzE0Ij5QdXRfQnVmPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTBfNyI+QnVmPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MV83Ij5XaWR0aDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUyXzciPlNpZ25hbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTNfNyI+TGp1c3Q8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83Ij5MPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciPlc8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUxXzciPldpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyI+TEM8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzciPkNDPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzciPlk8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPlg8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKworICAgICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzE3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl82MV8xNyI+T3V0cHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzYxXzI1Ij5Gcm9tPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzYxXzMxIj5UbzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+KTsKKworICAgICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzE3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81OV8xNyI+T3V0cHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzI1Ij5Gcm9tPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzMxIj5UbzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+KQorICAgICAgPGI+aXM8L2I+CisgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+ICZndDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUzXzciPlc8L0E+ID0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTNfNyI+VzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPjsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4gJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBMUk0gQTEwLjYgKDcpIHNheXMgdGhpczwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTNfNyI+VzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPjsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworCisgICAgICAgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPiAmbHQ7PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPik7CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ5XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU0XzciPkxDPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTVfNyI+Q0M8L0E+KTsKKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPikgJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81NV83Ij5DQzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81Ml83Ij5TaWduYWw8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMzRfNCI+TGF5b3V0X0Vycm9yPC9BPjsKKyAgICAgICAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+OworICAgICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxiPm5vdDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTNfNyI+TGp1c3Q8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICAgICA8Yj5kZWNsYXJlPC9iPgorICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8yMiI+RmlsbGVyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gU3RyaW5nICgxIC4uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPiAtIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4pKQorICAgICAgICAgICAgICAgICAgICAgICA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyAnICcpOworICAgICAgICAgICAgICAgICAgPGI+YmVnaW48L2I+CisgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfODRfMjIiPkZpbGxlcjwvQT4pOworICAgICAgICAgICAgICAgICAgPGI+ZW5kPC9iPjsKKyAgICAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ5XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU2XzciPlk8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81N183Ij5YPC9BPik7CisgICAgICAgICAgICAgICA8Yj5pZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU3XzciPlg8L0E+ICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPikpICZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTVfNyI+Q0M8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzE0Ij5OZXdfTGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ5XzciPldpbjwvQT4pOworICAgICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTBfNyI+QnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMjUiPkZyb208L0E+IC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzMxIj5UbzwvQT4pKTsKKyAgICAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+ICZsdDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTNfNyI+VzwvQT4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81M183Ij5ManVzdDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgICAgIDxiPmRlY2xhcmU8L2I+CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3XzIyIj5GaWxsZXI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiBTdHJpbmcgKDEgLi4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUzXzciPlc8L0E+IC0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPikpCisgICAgICAgICAgICAgICAgICAgICAgIDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7ICcgJyk7CisgICAgICAgICAgICAgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl85N18yMiI+RmlsbGVyPC9BPik7CisgICAgICAgICAgICAgICAgICA8Yj5lbmQ8L2I+OworICAgICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81OV8xNyI+T3V0cHV0PC9BPjsKKworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUzXzciPkxqdXN0PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4gOj0gMTsKKyAgICAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfMTQiPkk8L0E+PC9GT05UPiA8Yj5pbjwvYj4gMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+J0xlbmd0aCA8Yj5sb29wPC9iPgorICAgICAgICAgICAgPGI+ZXhpdDwvYj4gPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTBfNyI+QnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4pID0gJyAnOworICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4gKyAxOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5sb29wPC9iPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4gLSAxOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMTciPk91dHB1dDwvQT4gKDEsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4gIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbnB1dCBidWZmZXIgaXMgbm90IGxlZnQganVzdGlmaWVkPC9FTT48L0ZPTlQ+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+J0xlbmd0aDsKKyAgICAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTlfMTQiPkk8L0E+PC9GT05UPiA8Yj5pbjwvYj4gMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+J0xlbmd0aCA8Yj5sb29wPC9iPgorICAgICAgICAgICAgPGI+ZXhpdDwvYj4gPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTBfNyI+QnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4pID0gJyAnOworICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTFfNyI+TDwvQT4gLSAxOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5sb29wPC9iPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTBfNyI+QnVmPC9BPidMZW5ndGggLSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzE3Ij5PdXRwdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiArIDEsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUwXzciPkJ1ZjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OF8xNCI+UHV0X0J1ZjwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZTYzOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eCAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wcml2YXRlPC9iPiA8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml81MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDJfNDgiPkF1eDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgUHJlZWxhYm9yYXRlIChBdXgpOzwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSB0aGUgVGV4dF9JTyBvdXRwdXQgcm91dGluZXMgZm9yIG51bWVyaWM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYW5kIGVudW1lcmF0aW9uIHR5cGVzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzQ0XzE0Ij5QdXRfQnVmPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDVfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIG91dHB1dCB3aW5kb3c8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDZfNyI+QnVmPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gU3RyaW5nOyAgICAgICAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHRleHQ8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDdfNyI+V2lkdGg8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+OyAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQgZmllbGQ8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDhfNyI+U2lnbmFsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlOyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJZiB0cnVlLCB3ZSByYWlzZSBMYXlvdXRfRXJyb3I8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDlfNyI+TGp1c3Q8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7ICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgQnVmIGlzIGxlZnQganVzdGlmaWVkPC9FTT48L0ZPTlQ+CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjJkM2RhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80NF80MyI+RmxvYXRfSU88L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M180OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzQ2XzQzIj5Db21wbGV4X0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnBhY2thZ2U8L2I+IEZJTyA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80NF80MyI+RmxvYXRfSU88L0E+IChDb21wbGV4X1R5cGVzLlJlYWwnQmFzZSk7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU0XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICBJdGVtIDogPGI+aW48L2I+IENvbXBsZXg7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81N183Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MF80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNThfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTFfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTJfNCI+RGVmYXVsdF9FeHA8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+V2luPC9BPiwgJygnKTsKKyAgICAgIEZJTy48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+V2luPC9BPiwgSXRlbS5SZSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU3XzciPkZvcmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNThfNyI+QWZ0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU5XzciPkV4cDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NV83Ij5XaW48L0E+LCAnLCcpOworICAgICAgRklPLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NV83Ij5XaW48L0E+LCBJdGVtLkltLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTdfNyI+Rm9yZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81OF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+RXhwPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU1XzciPldpbjwvQT4sICcpJyk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NF8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNjFfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgIChJdGVtIDogPGI+aW48L2I+IENvbXBsZXg7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82M183Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MF80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNjRfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTFfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNjVfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTJfNCI+RGVmYXVsdF9FeHA8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIEl0ZW0sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82M183Ij5Gb3JlPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzY0XzciPkFmdDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82NV83Ij5FeHA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzYxXzE0Ij5QdXQ8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNDZfNDMiPkNvbXBsZXhfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBmNWQwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuTnVtZXJpY3MuR2VuZXJpY19Db21wbGV4X1R5cGVzOworCis8Yj5nZW5lcmljPC9iPgorICAgPGI+d2l0aDwvYj4gPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzQ2XzQzIj5Db21wbGV4X1R5cGVzPC9BPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuTnVtZXJpY3MuR2VuZXJpY19Db21wbGV4X1R5cGVzICgmbHQ7Jmd0Oyk7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNDNfNDgiPkNvbXBsZXhfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiBDb21wbGV4X1R5cGVzOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzQiPkRlZmF1bHRfRm9yZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzQiPkRlZmF1bHRfQWZ0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IFJlYWwnPGI+RGlnaXRzPC9iPiAtIDE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzQiPkRlZmF1bHRfRXhwPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDM7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2FkYi5odG0jcmVmXzQ4XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNDlfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTRfMTQiPkl0ZW08L0E+IDogPGI+aW48L2I+IENvbXBsZXg7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl81MV83Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MF80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNTJfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTFfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNTNfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTJfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNjNfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNjFfMTQiPkl0ZW08L0E+IDogPGI+aW48L2I+IENvbXBsZXg7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl82NV83Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MF80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNjZfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTFfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNjdfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTJfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChQdXQpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNDZfNDMiPkNvbXBsZXhfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmNkYTUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVGV4dF9JTzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RGVjaW1hbF9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEyIj5BdXg8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47CisgICA8Yj5wYWNrYWdlPC9iPiBESU8gPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlRleHRfSU8uRGVjaW1hbF9JTyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzUxXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTJfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTNfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU0XzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5CdWY8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4nTGFzdCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81M183Ij5Gb3JlPC9BPiArIDEgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTRfNyI+QWZ0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+ICZndDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4gKyAxICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIERJTy5QdXQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTJfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNDZfMTIiPkF1eDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiPlB1dF9CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTFfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl81N183Ij5MZW48L0E+LCBGYWxzZSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81OF83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzYwXzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzYxXzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPikgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81OF83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU5XzciPkZvcmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNjBfNyI+QWZ0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzYxXzciPkV4cDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiPlB1dDwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RGVjaW1hbF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzFjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0KQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU8gICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80NF80MyI+TnVtPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmRlbHRhPC9iPiAmbHQ7Jmd0OyA8Yj5kaWdpdHM8L2I+ICZsdDsmZ3Q7OworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzQ0XzQ4Ij5EZWNpbWFsX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4nRm9yZTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4nQWZ0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSAwOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTJfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzUzXzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzU0XzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzY2XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNjdfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzY4XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl82OV83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl83MF83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT4pOworCis8Yj5wcml2YXRlPC9iPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFB1dCk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RGVjaW1hbF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3YmQxZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0KQEAgLTAsMCArMSw4NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlRleHRfSU87Cis8Yj53aXRoPC9iPiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsgPGI+dXNlPC9iPiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNDgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkVudW1lcmF0aW9uX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnBhY2thZ2U8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTIiPkF1eDwvQT48L0ZPTlQ+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKyAgIDxiPnBhY2thZ2U8L2I+IEVJTyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5FbnVtPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81MF83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQyXzkiPkVudW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzUyXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTNfNyI+U2V0PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzkiPlR5cGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfU2V0dGluZzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+QnVmPC9BPjwvRk9OVD4gIDogU3RyaW5nICgxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPidMYXN0KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyI+VHNldDwvQT48L0ZPTlQ+IDogQWRhLlRleHRfSU8uVHlwZV9TZXQ7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzUzXzciPlNldDwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81M180NiI+TWl4ZWRfQ2FzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTdfNyI+VHNldDwvQT4gOj0gQWRhLlRleHRfSU8uVHlwZV9TZXQnVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzkiPlR5cGVfU2V0PC9BPidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTNfNyI+U2V0PC9BPikpOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTdfNyI+VHNldDwvQT4gOj0gQWRhLlRleHRfSU8uTG93ZXJfQ2FzZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgRUlPLlB1dCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzUxXzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzU3XzciPlRzZXQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzUzXzciPlNldDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzQ2Ij5NaXhlZF9DYXNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4nRmlyc3QpIDo9IFRvX1VwcGVyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPidGaXJzdCkpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzQ3XzEyIj5BdXg8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ4XzE0Ij5QdXRfQnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81MF83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTJfNyI+V2lkdGg8L0E+LCBUcnVlLCBUcnVlKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU1XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU2XzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5FbnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81N183Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU4XzciPlNldDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81M185Ij5UeXBlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X1NldHRpbmc8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU2XzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU3XzciPldpZHRoPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81OF83Ij5TZXQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81NV8xNCI+UHV0PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RW51bWVyYXRpb25fSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDU0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtCkBAIC0wLDAgKzEsNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkVudW08L0E+PC9GT05UPiA8Yj5pczwvYj4gKCZsdDsmZ3Q7KTsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNDVfNDgiPkVudW1lcmF0aW9uX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDA7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzQiPkRlZmF1bHRfU2V0dGluZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81M185Ij5UeXBlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81M180NiI+TWl4ZWRfQ2FzZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81MV83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTJfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQyXzkiPkVudW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzUzXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTRfNyI+U2V0PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzkiPlR5cGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfU2V0dGluZzwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNzFfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNzJfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQyXzkiPkVudW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzczXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNzRfNyI+U2V0PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzkiPlR5cGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfU2V0dGluZzwvQT4pOworCis8Yj5wcml2YXRlPC9iPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFB1dCk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkVudW1lcmF0aW9uX0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjcwYjEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bQpAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU8gICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVGV4dF9JTzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkZpeGVkX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnBhY2thZ2U8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTIiPkF1eDwvQT48L0ZPTlQ+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKyAgIDxiPnBhY2thZ2U8L2I+IEZJWElPIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5UZXh0X0lPLkZpeGVkX0lPICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTFfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTJfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81M183Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+QnVmPC9BPjwvRk9OVD4gOiBTdHJpbmcgKDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+J0xhc3QpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkZvcmU8L0E+ICsgMSArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTRfNyI+QWZ0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPiAmZ3Q7IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4gKyAxICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICBGSVhJTy5QdXQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl80Nl8xMiI+QXV4PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OF8xNCI+UHV0X0J1ZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTFfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4sIEZhbHNlKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU3XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU5XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzYwXzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNjFfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPikgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU5XzciPkZvcmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzYwXzciPkFmdDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNjFfNyI+RXhwPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiPlB1dDwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkZpeGVkX0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDZjOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bQpAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRml4ZWRfSU8gICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5OdW08L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+ZGVsdGE8L2I+ICZsdDsmZ3Q7OworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl80NF80OCI+Rml4ZWRfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4nRm9yZTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+J0FmdDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gMDsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzUxXzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTJfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTNfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl81NF83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzY2XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzY3XzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzY4XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzY5XzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNzBfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPik7CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUHV0KTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80NF80MyI+Rml4ZWRfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YmYzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsODIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTyAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5UZXh0X0lPOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80NF80MyI+RmxvYXRfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xMiI+QXV4PC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworICAgPGI+cGFja2FnZTwvYj4gRklPIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5UZXh0X0lPLkZsb2F0X0lPICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTFfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTJfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81M183Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+QnVmPC9BPjwvRk9OVD4gOiBTdHJpbmcgKDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+J0xhc3QpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkZvcmU8L0E+ICsgMSArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTRfNyI+QWZ0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPiAmZ3Q7IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4gKyAxICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICBGSU8uUHV0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTJfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTRfNyI+QWZ0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNDZfMTIiPkF1eDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiPlB1dF9CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzUxXzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl81N183Ij5MZW48L0E+LCBGYWxzZSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81N18xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81OF83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU5XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzYwXzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNjFfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81OF83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81OV83Ij5Gb3JlPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl82MF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzYxXzciPkV4cDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU3XzE0Ij5QdXQ8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5GbG9hdF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4MjkxYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0KQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80NF80MyI+TnVtPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmRpZ2l0czwvYj4gJmx0OyZndDs7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzQ0XzQ4Ij5GbG9hdF9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPic8Yj5EaWdpdHM8L2I+IC0gMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gMzsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzUxXzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTJfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTNfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl81NF83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzY2XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzY3XzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzY4XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzY5XzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNzBfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPik7CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUHV0KTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80NF80MyI+RmxvYXRfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM1MDIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVGV4dF9JTzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80NF80MyI+SW50ZWdlcl9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEyIj5BdXg8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47CisgICA8Yj5wYWNrYWdlPC9iPiBJSU8gPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlRleHRfSU8uSW50ZWdlcl9JTyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzUxXzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81M183Ij5CYXNlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83Ij5CdWY8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4nTGFzdCk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIElJTy5QdXQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl81NV83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81M183Ij5CYXNlPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNDZfMTIiPkF1eDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiPlB1dF9CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTBfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzU1XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU1XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTZfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU3XzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkJhc2U8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81Nl83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU3XzciPldpZHRoPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkJhc2U8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU1XzE0Ij5QdXQ8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkludGVnZXJfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTlmZjFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtCkBAIC0wLDAgKzEsNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPk51bTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5yYW5nZTwvYj4gJmx0OyZndDs7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNDRfNDgiPkludGVnZXJfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4nV2lkdGg7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzQiPkRlZmF1bHRfQmFzZTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSAxMDsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl81MF83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl81MV83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNTJfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNTNfNyI+QmFzZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUxXzEyIj5OdW1iZXJfQmFzZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQmFzZTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl82MV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzYyXzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl82M183Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl82NF83Ij5CYXNlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPik7CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUHV0KTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5JbnRlZ2VyX0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjMTYxMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bQpAQCAtMCwwICsxLDc2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uTW9kdWxhcl9JTyAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlRleHRfSU87Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQ4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPk1vZHVsYXJfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xMiI+QXV4PC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworICAgPGI+cGFja2FnZTwvYj4gTUlPIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5UZXh0X0lPLk1vZHVsYXJfSU8gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81MF83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81MV83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTJfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTNfNyI+QmFzZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUxXzEyIj5OdW1iZXJfQmFzZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQmFzZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyI+QnVmPC9BPjwvRk9OVD4gOiBTdHJpbmcgKDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+J0xhc3QpOworICAgPGI+YmVnaW48L2I+CisgICAgICBNSU8uUHV0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNTVfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzUxXzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTNfNyI+QmFzZTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzQ2XzEyIj5BdXg8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ4XzE0Ij5QdXRfQnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzUwXzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl81NV83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTJfNyI+V2lkdGg8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81NV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU2XzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81N183Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81OF83Ij5CYXNlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTZfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81N183Ij5XaWR0aDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81OF83Ij5CYXNlPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81NV8xNCI+UHV0PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5Nb2R1bGFyX0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlN2Q2MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bQpAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uTW9kdWxhcl9JTyAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5OdW08L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bW9kPC9iPiAmbHQ7Jmd0OzsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl80NF80OCI+TW9kdWxhcl9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPidXaWR0aDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDEwOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzUxXzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl81M183Ij5CYXNlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzYxXzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNjJfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzYzXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzY0XzciPkJhc2U8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+KTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChQdXQpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPk1vZHVsYXJfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YWU3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsMzQzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTyAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE4IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNCI+RGVmYXVsdF9XaW5kb3c8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTlfMTQiPlNldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81OV8yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzQ0XzQiPkRlZmF1bHRfV2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzU5XzI2Ij5XaW48L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzU5XzE0Ij5TZXRfV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl80NF80Ij5EZWZhdWx0X1dpbmRvdzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl80NF80Ij5EZWZhdWx0X1dpbmRvdzwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT47CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjVfMTQiPkZsdXNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjVfMjEiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA0NV8xNCI+UmVmcmVzaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjVfMjEiPldpbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzY1XzE0Ij5GbHVzaDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Nl8xNCI+Rmx1c2g8L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjVfMTQiPkZsdXNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzY2XzE0Ij5GbHVzaDwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFNwZWNpZmljYXRpb24gb2YgbGluZSBhbmQgcGFnZSBsZW5ndGhzIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGVyZSBhcmUgbm8gc2V0IHJvdXRpbmVzIGluIHRoaXMgcGFja2FnZS4gSSBhc3N1bWUsIHRoYXQgeW91IGFsbG9jYXRlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSB3aW5kb3cgd2l0aCBhbiBhcHByb3ByaWF0ZSBzaXplLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBIHNjcm9sbC13aW5kb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gcGFnZSB3aXRoIHVuYm91bmRlZCBwYWdlIGxlbmd0aCw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaS5lLiBpdCByZXR1cm5zIHRoZSBjb252ZW50aW9uYWwgMCBhcyBwYWdlIGxlbmd0aC48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzdfMTMiPkxpbmVfTGVuZ3RoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzdfMjYiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODZfNyI+Tl9MaW5lczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N183Ij5OX0NvbHM8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOF8xNCI+R2V0X1NpemU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc3XzI2Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzg2XzciPk5fTGluZXM8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzg3XzciPk5fQ29sczwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpZiBOYXR1cmFsIChOX0NvbHMpICZndDsgTmF0dXJhbCAoQ291bnQnTGFzdCkgdGhlbjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICByYWlzZSBMYXlvdXRfRXJyb3I7PC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGVuZCBpZjs8L0VNPjwvRk9OVD4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzg3XzciPk5fQ29sczwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc3XzEzIj5MaW5lX0xlbmd0aDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc4XzEzIj5MaW5lX0xlbmd0aDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc3XzEzIj5MaW5lX0xlbmd0aDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl83OF8xMyI+TGluZV9MZW5ndGg8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMTMiPlBhZ2VfTGVuZ3RoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgwXzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF83Ij5OX0xpbmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNV83Ij5OX0NvbHM8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjJfMTMiPlNjcm9sbGluZ19BbGxvd2VkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8yNiI+V2luPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gMDsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMjYiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTA0XzciPk5fTGluZXM8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzEwNV83Ij5OX0NvbHM8L0E+KTsKKyAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaWYgTmF0dXJhbCAoTl9MaW5lcykgJmd0OyBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuPC9FTT48L0ZPTlQ+CisgICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgIHJhaXNlIExheW91dF9FcnJvcjs8L0VNPjwvRk9OVD4KKyAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZW5kIGlmOzwvRU0+PC9GT05UPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTA0XzciPk5fTGluZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgwXzEzIj5QYWdlX0xlbmd0aDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MV8xMyI+UGFnZV9MZW5ndGg8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8xMyI+UGFnZV9MZW5ndGg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODFfMTMiPlBhZ2VfTGVuZ3RoPC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvbHVtbiwgTGluZSwgYW5kIFBhZ2UgQ29udHJvbCAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8xNCI+TmV3X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMjQiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzQxIj5TcGFjaW5nPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+IDo9IDEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzciPlBfU2l6ZTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgwXzEzIj5QYWdlX0xlbmd0aDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMjQiPldpbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPGI+bm90PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzQxIj5TcGFjaW5nPC9BPidWYWxpZCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKworICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNV8xMSI+STwvQT48L0ZPTlQ+IDxiPmluPC9iPiAxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfNDEiPlNwYWNpbmc8L0E+IDxiPmxvb3A8L2I+CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMjlfNyI+UF9TaXplPC9BPiAmZ3Q7IDAgPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMV8xMyI+TGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMjQiPldpbjwvQT4pICZndDs9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTI5XzciPlBfU2l6ZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMTQiPk5ld19QYWdlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8yNCI+V2luPC9BPik7CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTI4XzE0Ij5BZGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzI0Ij5XaW48L0E+LCBBU0NJSS5MRik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMTQiPk5ld19MaW5lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84N18xNCI+TmV3X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODdfMjQiPlNwYWNpbmc8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4gOj0gMSkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzE0Ij5OZXdfTGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg3XzI0Ij5TcGFjaW5nPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODdfMTQiPk5ld19MaW5lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84OV8xNCI+TmV3X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMjQiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4MF8xNCI+Q2xlYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzI0Ij5XaW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84OV8xNCI+TmV3X1BhZ2U8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkwXzE0Ij5OZXdfUGFnZTwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84OV8xNCI+TmV3X1BhZ2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTBfMTQiPk5ld19QYWdlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Ml8xNCI+U2V0X0NvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Ml8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Ml8yMyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyXzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzQxIj5UbzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjRfNyI+WTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjVfNyI+WDE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Nl83Ij5YMjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3XzciPk48L0E+PC9GT05UPiAgOiBOYXR1cmFsOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPGI+bm90PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzQxIj5UbzwvQT4nVmFsaWQgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiBDb25zdHJhaW50X0Vycm9yOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzIzIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2NF83Ij5ZPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjVfNyI+WDE8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY3XzciPk48L0E+ICA6PSBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzQxIj5UbzwvQT4pOyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2N183Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2N183Ij5OPC9BPiAtIDE7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2Nl83Ij5YMjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjdfNyI+TjwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY1XzciPlgxPC9BPiAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY2XzciPlgyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8xNCI+TmV3X0xpbmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzIzIj5XaW48L0E+LCAxKTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY1XzciPlgxPC9BPiA6PSAwOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjVfNyI+WDE8L0E+ICZsdDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjZfNyI+WDI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5kZWNsYXJlPC9iPgorICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODJfMTMiPkZpbGxlcjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IFN0cmluZyAoSW50ZWdlciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjVfNyI+WDE8L0E+KSAuLiAoSW50ZWdlciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjZfNyI+WDI8L0E+KSAtIDEpKQorICAgICAgICAgICAgICA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyAnICcpOworICAgICAgICAgPGI+YmVnaW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Ml8yMyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xODJfMTMiPkZpbGxlcjwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzE0Ij5TZXRfQ29sPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85M18xNCI+U2V0X0NvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85M18yMyI+VG88L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Ml8xNCI+U2V0X0NvbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkzXzIzIj5UbzwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkzXzE0Ij5TZXRfQ29sPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV8xNCI+U2V0X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTVfMjQiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzQxIj5UbzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOThfNyI+WTE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTlfNyI+WTI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDBfNyI+WDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMV83Ij5OPC9BPjwvRk9OVD4gIDogTmF0dXJhbDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxiPm5vdDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV80MSI+VG88L0E+J1ZhbGlkIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworCisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV8yNCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOThfNyI+WTE8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIwMF83Ij5YPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIwMV83Ij5OPC9BPiAgOj0gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV80MSI+VG88L0E+KTsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMDFfNyI+TjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMDFfNyI+TjwvQT4gLSAxOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOTlfNyI+WTI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIwMV83Ij5OPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOTlfNyI+WTI8L0E+ICZsdDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOThfNyI+WTE8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0Ij5OZXdfUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTVfMjQiPldpbjwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOThfNyI+WTE8L0E+IDo9IDA7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OF83Ij5ZMTwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OV83Ij5ZMjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMTQiPk5ld19MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV8yNCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OV83Ij5ZMjwvQT4gLSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OF83Ij5ZMTwvQT4pKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzE0Ij5TZXRfTGluZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTZfMTQiPlNldF9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk2XzI0Ij5UbzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzE0Ij5TZXRfTGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk2XzI0Ij5UbzwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk2XzE0Ij5TZXRfTGluZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OF8xMyI+Q29sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI1XzE4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk4XzE4Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyN183Ij5ZPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI4XzciPlg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyOV83Ij5OPC9BPjwvRk9OVD4gOiBOYXR1cmFsOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OF8xOCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjdfNyI+WTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjI4XzciPlg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjI5XzciPk48L0E+IDo9IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjI4XzciPlg8L0E+KTsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjlfNyI+TjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjlfNyI+TjwvQT4gKyAxOworICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpZiBOICZndDsgTmF0dXJhbCAoQ291bnQnTGFzdCkgdGhlbjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICByYWlzZSBMYXlvdXRfRXJyb3I7PC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGVuZCBpZjs8L0VNPjwvRk9OVD4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIyOV83Ij5OPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOThfMTMiPkNvbDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzOV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OV8xMyI+Q29sPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOThfMTMiPkNvbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OV8xMyI+Q29sPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMV8xMyI+TGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDFfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ3XzciPlk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDhfNyI+WDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ5XzciPk48L0E+PC9GT05UPiA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMV8xOSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDdfNyI+WTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjQ4XzciPlg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjQ5XzciPk48L0E+IDo9IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjQ3XzciPlk8L0E+KTsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDlfNyI+TjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDlfNyI+TjwvQT4gKyAxOworICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpZiBOICZndDsgTmF0dXJhbCAoQ291bnQnTGFzdCkgdGhlbjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICByYWlzZSBMYXlvdXRfRXJyb3I7PC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGVuZCBpZjs8L0VNPjwvRk9OVD4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI0OV83Ij5OPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAxXzEzIj5MaW5lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMl8xMyI+TGluZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMV8xMyI+TGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDJfMTMiPkxpbmU8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDaGFyYWN0ZXJzIE91dHB1dCAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE0Ij5QdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE5Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjlfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzM3Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3MV83Ij5QX1NpemU8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8xMyI+UGFnZV9MZW5ndGg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xOSI+V2luPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3Ml83Ij5ZPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjczXzciPlg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NF83Ij5MPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NV83Ij5DPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjcxXzciPlBfU2l6ZTwvQT4gJmd0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjcyXzciPlk8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI3M183Ij5YPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI3NF83Ij5MPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNzVfNyI+QzwvQT4pOworICAgICAgICAgPGI+aWY8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI3Ml83Ij5ZPC9BPiArIDEpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNzRfNyI+TDwvQT4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNzNfNyI+WDwvQT4gKyAxKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjc1XzciPkM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0Ij5OZXdfUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE5Ij5XaW48L0E+KTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjhfMTQiPkFkZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8zNyI+SXRlbTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDlfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4N18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDlfMTkiPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOV8xOSI+SXRlbTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOV8xNCI+UHV0PC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gU3RyaW5ncy1PdXRwdXQgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk3XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xOSI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk3XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8zNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTlfNyI+UF9TaXplPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMTMiPlBhZ2VfTGVuZ3RoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMTkiPldpbjwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDBfNyI+WTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMV83Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDJfNyI+TDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDNfNyI+QzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI5OV83Ij5QX1NpemU8L0E+ICZndDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMwMF83Ij5ZPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDFfNyI+WDwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOF8xNCI+R2V0X1NpemU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xOSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDJfNyI+TDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzAzXzciPkM8L0E+KTsKKyAgICAgICAgIDxiPmlmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDBfNyI+WTwvQT4gKyAxKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzAyXzciPkw8L0E+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzAxXzciPlg8L0E+ICsgMSArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzM3Ij5JdGVtPC9BPidMZW5ndGgpICZndDs9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzAzXzciPkM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0Ij5OZXdfUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE5Ij5XaW48L0E+KTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTNfMTQiPkFkZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8zNyI+SXRlbTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTZfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTZfMTkiPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNl8xOSI+SXRlbTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNl8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMThfMTQiPlB1dF9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE5XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMjBfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMjBfNyI+SXRlbTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8xNCI+TmV3X0xpbmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExOV83Ij5XaW48L0E+LCAxKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMThfMTQiPlB1dF9MaW5lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMjJfMTQiPlB1dF9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTIzXzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMThfMTQiPlB1dF9MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTIzXzciPkl0ZW08L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMjJfMTQiPlB1dF9MaW5lPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlOTIyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0KQEAgLTAsMCArMSwxNDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTMgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5UZXh0X0lPOworPGI+d2l0aDwvYj4gQWRhLklPX0V4Y2VwdGlvbnM7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzQyXzQwIj5UZXh0X0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gQWRhLlRleHRfSU8uQ291bnQ7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzEyIj5Db3VudDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiBBZGEuVGV4dF9JTy5Db3VudDsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPiA8Yj5yYW5nZTwvYj4gMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4nTGFzdDsKKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xMiI+RmllbGQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gQWRhLlRleHRfSU8uRmllbGQ7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzEyIj5OdW1iZXJfQmFzZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiBJbnRlZ2VyIDxiPnJhbmdlPC9iPiAyIC4uIDE2OworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzkiPlR5cGVfU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzIyIj5Mb3dlcl9DYXNlPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMzQiPlVwcGVyX0Nhc2U8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M180NiI+TWl4ZWRfQ2FzZTwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBGb3IgbW9zdCBvZiB0aGUgcm91dGluZXMgeW91IHdpbGwgc2VlIGEgdmVyc2lvbiB3aXRob3V0IGEgV2luZG93PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHR5cGUgcGFyYW1ldGVyLiBUaGV5IHdpbGwgb3BlcmF0ZSBvbiBhIGRlZmF1bHQgd2luZG93LCB3aGljaCBjYW48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYmUgc2V0IGJ5IHRoZSB1c2VyLiBJdCBpcyBpbml0aWFsbHkgZXF1YWwgdG8gU3RhbmRhcmRfV2luZG93LjwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfNDZfMTQiPlNldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl80Nl8yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNldCBXaW4gYXMgdGhlIGRlZmF1bHQgd2luZG93PC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzUyXzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBHZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCB3aW5kb3c8L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzYzXzE0Ij5GbHVzaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzYzXzIxIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl82OV8xNCI+Rmx1c2g8L0E+PC9GT05UPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gU3BlY2lmaWNhdGlvbiBvZiBsaW5lIGFuZCBwYWdlIGxlbmd0aHMgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZXJlIGFyZSBubyBzZXQgcm91dGluZXMgaW4gdGhpcyBwYWNrYWdlLiBJIGFzc3VtZSwgdGhhdCB5b3UgYWxsb2NhdGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIHdpbmRvdyB3aXRoIGFuIGFwcHJvcHJpYXRlIHNpemUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEEgc2Nyb2xsLXdpbmRvdyBpcyBpbnRlcnByZXRlZCBhcyBhbiBwYWdlIHdpdGggdW5ib3VuZGVkIHBhZ2UgbGVuZ3RoLDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpLmUuIGl0IHJldHVybnMgdGhlIGNvbnZlbnRpb25hbCAwIGFzIHBhZ2UgbGVuZ3RoLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl84NF8xMyI+TGluZV9MZW5ndGg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl84NF8yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT47CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl85Nl8xMyI+TGluZV9MZW5ndGg8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTAyXzEzIj5QYWdlX0xlbmd0aDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzEwMl8yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT47CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMThfMTMiPlBhZ2VfTGVuZ3RoPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb2x1bW4sIExpbmUsIGFuZCBQYWdlIENvbnRyb2wgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMjdfMTQiPk5ld19MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODZfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTI3XzI0Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzEyN180MSI+U3BhY2luZzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPiA6PSAxKTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNDRfMTQiPk5ld19MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODdfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTQ0XzI0Ij5TcGFjaW5nPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+IDo9IDEpOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTUwXzE0Ij5OZXdfUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE1MF8yNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTU2XzE0Ij5OZXdfUGFnZTwvQT48L0ZPTlQ+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTYyXzE0Ij5TZXRfQ29sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTJfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTYyXzIzIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjJfNDEiPlRvPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+KTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOTBfMTQiPlNldF9Db2w8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOTBfMjMiPlRvPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5Nl8xNCI+U2V0X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOTZfMjQiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTk2XzQxIj5UbzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPik7CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjE5XzE0Ij5TZXRfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIxOV8yNCI+VG88L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjVfMTMiPkNvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4XzE4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIyNV8xOCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT47CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMzlfMTMiPkNvbDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjQ1XzEzIj5MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI0NV8xOSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT47CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjU5XzEzIj5MaW5lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENoYXJhY3RlcnMtT3V0cHV0IC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNjlfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNjlfMTkiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNjlfMzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpOworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yODdfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yODdfMTkiPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBTdHJpbmdzLU91dHB1dCAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjk3XzE0Ij5QdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTVfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjk3XzE5Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTVfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjk3XzM3Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzE1XzE0Ij5QdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzE1XzE5Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMjFfMTQiPlB1dF9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzIyXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMjNfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZyk7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzMwXzE0Ij5QdXRfTGluZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMzMV83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBFeGNlcHRpb25zPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzQiPlN0YXR1c19FcnJvcjwvQT48L0ZPTlQ+IDogPGI+ZXhjZXB0aW9uPC9iPiA8Yj5yZW5hbWVzPC9iPiBBZGEuSU9fRXhjZXB0aW9ucy5TdGF0dXNfRXJyb3I7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF80Ij5Nb2RlX0Vycm9yPC9BPjwvRk9OVD4gICA6IDxiPmV4Y2VwdGlvbjwvYj4gPGI+cmVuYW1lczwvYj4gQWRhLklPX0V4Y2VwdGlvbnMuTW9kZV9FcnJvcjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzQiPk5hbWVfRXJyb3I8L0E+PC9GT05UPiAgIDogPGI+ZXhjZXB0aW9uPC9iPiA8Yj5yZW5hbWVzPC9iPiBBZGEuSU9fRXhjZXB0aW9ucy5OYW1lX0Vycm9yOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzBfNCI+VXNlX0Vycm9yPC9BPjwvRk9OVD4gICAgOiA8Yj5leGNlcHRpb248L2I+IDxiPnJlbmFtZXM8L2I+IEFkYS5JT19FeGNlcHRpb25zLlVzZV9FcnJvcjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxXzQiPkRldmljZV9FcnJvcjwvQT48L0ZPTlQ+IDogPGI+ZXhjZXB0aW9uPC9iPiA8Yj5yZW5hbWVzPC9iPiBBZGEuSU9fRXhjZXB0aW9ucy5EZXZpY2VfRXJyb3I7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMl80Ij5FbmRfRXJyb3I8L0E+PC9GT05UPiAgICA6IDxiPmV4Y2VwdGlvbjwvYj4gPGI+cmVuYW1lczwvYj4gQWRhLklPX0V4Y2VwdGlvbnMuRW5kX0Vycm9yOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfNCI+RGF0YV9FcnJvcjwvQT48L0ZPTlQ+ICAgOiA8Yj5leGNlcHRpb248L2I+IDxiPnJlbmFtZXM8L2I+IEFkYS5JT19FeGNlcHRpb25zLkRhdGFfRXJyb3I7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF80Ij5MYXlvdXRfRXJyb3I8L0E+PC9GT05UPiA6IDxiPmV4Y2VwdGlvbjwvYj4gPGI+cmVuYW1lczwvYj4gQWRhLklPX0V4Y2VwdGlvbnMuTGF5b3V0X0Vycm9yOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRiLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMDliM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRiLmh0bQpAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2UgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMjAwMCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuNSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml80MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDJfMzUiPlRyYWNlPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfMTAyXzE0Ij5UcmFjZV9PbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDJfMjQiPng8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+KSA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gVW5yZWZlcmVuY2VkICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDJfMjQiPng8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+bnVsbDwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwMl8xNCI+VHJhY2VfT248L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwNl8xNCI+VHJhY2VfUHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwNl8yNSI+c3RyPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBVbnJlZmVyZW5jZWQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwNl8yNSI+c3RyPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPm51bGw8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDZfMTQiPlRyYWNlX1B1dDwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQyXzM1Ij5UcmFjZTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyOGYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0KQEAgLTAsMCArMSwxMTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyAmbHQ7YWxkb21lbEBpeC5uZXRjb20uY29tJmd0OyAyMDAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2FkYi5odG0jcmVmXzQyXzQwIj5UcmFjZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Ml8zNSI+VHJhY2U8L0E+KTsKKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT2ZmKTsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMCI+VGltZXM8L0E+PC9GT05UPiAgICAgICAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTAiPlRwdXRzPC9BPjwvRk9OVD4gICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzEwIj5VcGRhdGU8L0E+PC9GT05UPiAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xMCI+Q3Vyc29yX01vdmU8L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMTAiPkNoYXJhY3Rlcl9PdXRwdXQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzEwIj5DYWxsczwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8xMCI+VmlydHVhbF9QdXRzPC9BPjwvRk9OVD4gICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMTAiPklucHV0X0V2ZW50czwvQT48L0ZPTlQ+ICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzEwIj5UVFlfU3RhdGU8L0E+PC9GT05UPiAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18xMCI+SW50ZXJuYWxfQ2FsbHM8L0E+PC9GT05UPiAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMTAiPkNoYXJhY3Rlcl9DYWxsczwvQT48L0ZPTlQ+ICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzEwIj5UZXJtY2FwX1Rlcm1JbmZvPC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Nl85Ij5UcmFjZV9BdHRyaWJ1dGVfU2V0PC9BPik7CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDhfMTAiPlRpbWVzPC9BPiAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMCAuLiAgMDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ5XzEwIj5UcHV0czwvQT4gICAgICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDEgLi4gIDE7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81MF8xMCI+VXBkYXRlPC9BPiAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAyIC4uICAyOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTFfMTAiPkN1cnNvcl9Nb3ZlPC9BPiAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMyAuLiAgMzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzUyXzEwIj5DaGFyYWN0ZXJfT3V0cHV0PC9BPiA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDQgLi4gIDQ7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81M18xMCI+Q2FsbHM8L0E+ICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA1IC4uICA1OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTRfMTAiPlZpcnR1YWxfUHV0czwvQT4gICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNiAuLiAgNjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzU1XzEwIj5JbnB1dF9FdmVudHM8L0E+ICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDcgLi4gIDc7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81Nl8xMCI+VFRZX1N0YXRlPC9BPiAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA4IC4uICA4OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTdfMTAiPkludGVybmFsX0NhbGxzPC9BPiAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgOSAuLiAgOTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzU4XzEwIj5DaGFyYWN0ZXJfQ2FsbHM8L0E+ICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gMTAgLi4gMTA7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81OV8xMCI+VGVybWNhcF9UZXJtSW5mbzwvQT4gPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDExIC4uIDExOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Nl85Ij5UcmFjZV9BdHRyaWJ1dGVfU2V0PC9BPidTaXplIDxiPnVzZTwvYj4gMzI7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByYWdtYTwvYj4gV2FybmluZ3MgKE9uKTsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF80Ij5UcmFjZV9EaXNhYmxlPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7IEZhbHNlKTsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Nl80Ij5UcmFjZV9PcmRpbmFyeTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9CisgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80OF8xMCI+VGltZXM8L0E+ICAgICAgICAgICAgPSZndDsgVHJ1ZSwKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ5XzEwIj5UcHV0czwvQT4gICAgICAgICAgICA9Jmd0OyBUcnVlLAorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTBfMTAiPlVwZGF0ZTwvQT4gICAgICAgICAgID0mZ3Q7IFRydWUsCisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81MV8xMCI+Q3Vyc29yX01vdmU8L0E+ICAgICAgPSZndDsgVHJ1ZSwKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzUyXzEwIj5DaGFyYWN0ZXJfT3V0cHV0PC9BPiA9Jmd0OyBUcnVlLAorICAgICAgPGI+b3RoZXJzPC9iPiAgICAgICAgICAgPSZndDsgRmFsc2UpOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M180Ij5UcmFjZV9NYXhpbXVtPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT4gOj0gKDxiPm90aGVyczwvYj4gPSZndDsgVHJ1ZSk7CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2FkYi5odG0jcmVmXzQ0XzE0Ij5UcmFjZV9PbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRiLmh0bSNyZWZfNDRfMjQiPng8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIGRlYnVnZ2luZyBsaWJyYXJ5IGhhcyB0cmFjZS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtI3JlZl81MF8xNCI+VHJhY2VfUHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtI3JlZl81MF8yNSI+c3RyPC9BPjwvRk9OVD4gOiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RyYWNlLjN4Lmh0bWwiPl90cmFjZWYoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfNCI+Q3VycmVudF9UcmFjZV9TZXR0aW5nPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Nl85Ij5UcmFjZV9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDlfNCI+Q3VycmVudF9UcmFjZV9TZXR0aW5nPC9BPiwgIl9uY190cmFjaW5nIik7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQyXzM1Ij5UcmFjZTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0gYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzAxMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0KQEAgLTAsMCArMSwyNTYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS41IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6MzIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbTsKKworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOyAgICAgICAgICAgICAgICAgIDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOyAgICAgICAgICA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7Cis8Yj53aXRoPC9iPiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsgICAgICAgPGI+dXNlPC9iPiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKKzxiPndpdGg8L2I+IEFkYS5TdHJpbmdzLkZpeGVkOworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gU3lzdGVtLkJpdF9PcmRlcjsKKworICAgPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xMiI+QVNGPC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gQWRhLlN0cmluZ3MuRml4ZWQ7CisKKyAgIDxiPnR5cGU8L2I+IGNodHlwZV9hcnJheSA8Yj5pczwvYj4gPGI+YXJyYXk8L2I+IChzaXplX3QgPGI+cmFuZ2U8L2I+ICZsdDsmZ3Q7KQorICAgICAgPGI+b2Y8L2I+IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIGNodHlwZV9hcnJheSk7CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzEzIj5LZXlfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzIzIj5LZXk8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzE2Ij5LZXluYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY0XzE2Ij5LPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgS2V5bmFtZSwgImtleW5hbWUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N183Ij5DaDwvQT48L0ZPTlQ+IDogQ2hhcmFjdGVyOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxNl8yMyI+S2V5PC9BPiAmbHQ7PSBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInTGFzdCkgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3XzciPkNoPC9BPiA6PSBDaGFyYWN0ZXInVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzIzIj5LZXk8L0E+KTsKKyAgICAgICAgIDxiPmlmPC9iPiBJc19Db250cm9sICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82N183Ij5DaDwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjdfMTMiPlVuX0NvbnRyb2w8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+Jyg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82N183Ij5DaDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT4pKTsKKyAgICAgICAgIDxiPmVsc2lmPC9iPiBJc19HcmFwaGljICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82N183Ij5DaDwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5kZWNsYXJlPC9iPgorICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18xNiI+UzwvQT48L0ZPTlQ+IDogU3RyaW5nICgxIC4uIDEpOworICAgICAgICAgICAgPGI+YmVnaW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83N18xNiI+UzwvQT4gKDEpIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3XzciPkNoPC9BPjsKKyAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzdfMTYiPlM8L0E+OworICAgICAgICAgICAgPGI+ZW5kPC9iPjsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8Yj5yZXR1cm48L2I+ICIiOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY0XzE2Ij5LZXluYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTZfMjMiPktleTwvQT4pKSk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxNl8xMyI+S2V5X05hbWU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTBfMTQiPktleV9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTBfMjQiPktleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjExXzI0Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NV8xMiI+QVNGPC9BPi5Nb3ZlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzEzIj5LZXlfTmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTBfMjQiPktleTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjExXzI0Ij5OYW1lPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTBfMTQiPktleV9OYW1lPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODZfMTQiPkluaXRfU2NyZWVuPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwXzE2Ij5Jbml0c2NyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEluaXRzY3IsICJpbml0c2NyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzXzciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwM183Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDBfMTYiPkluaXRzY3I8L0E+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwM183Ij5XPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODZfMTQiPkluaXRfU2NyZWVuPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDk1XzE0Ij5FbmRfV2luZG93czwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM18xNiI+RW5kd2luPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBFbmR3aW4sICJlbmR3aW4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExM18xNiI+RW5kd2luPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OTVfMTQiPkVuZF9XaW5kb3dzPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MDJfMTMiPklzX0VuZF9XaW5kb3c8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzE2Ij5Jc2VuZHdpbjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXNlbmR3aW4sICJpc2VuZHdpbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzXzE2Ij5Jc2VuZHdpbjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTAyXzEzIj5Jc19FbmRfV2luZG93PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8yNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTJfMjciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTEzXzI3Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzdfMTYiPldtb3ZlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzdfMTYiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM3XzE2Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzdfMTYiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4KKyAgICAgICAgICAgICAgICAgICAgICkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXbW92ZSwgIndtb3ZlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzdfMTYiPldtb3ZlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTExXzI3Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTEyXzI3Ij5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTNfMjciPkNvbHVtbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyM18xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjNfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyNF8xOSI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzE2Ij5XYWRkY2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+VzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTFfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXYWRkY2gsICJ3YWRkY2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+V2FkZGNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTIzXzE5Ij5XaW48L0E+LCBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyNF8xOSI+Q2g8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTIzXzE0Ij5BZGQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjhfMTQiPkFkZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTI4XzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjlfMTkiPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IENoYXJhY3RlcikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjNfMTQiPkFkZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyOF8xOSI+V2luPC9BPiwKKyAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPicoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTI5XzE5Ij5DaDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjhfMTQiPkFkZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNF8xNCI+QWRkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNV83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNl83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzN183Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM4XzciPkNoPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Nl8xNiI+bXZ3YWRkY2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3Nl8xNiI+VzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3Nl8xNiI+WTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzZfMTYiPlg8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgbXZ3YWRkY2gsICJtdndhZGRjaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2XzE2Ij5tdndhZGRjaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM2XzciPkxpbmU8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM3XzciPkNvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM4XzciPkNoPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNF8xNCI+QWRkPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQyXzE0Ij5BZGQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQzXzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQ0XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQ1XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDZfNyI+Q2g8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNF8xNCI+QWRkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQzXzciPldpbjwvQT4sCisgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU0NF83Ij5MaW5lPC9BPiwKKyAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQ1XzciPkNvbHVtbjwvQT4sCisgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4nKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU0Nl83Ij5DaDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDJfMTQiPkFkZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1MV8xNCI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG88L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUyXzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUzXzciPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOF8xNiI+V2VjaG9jaGFyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDhfMTYiPlc8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA4XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2VjaG9jaGFyLCAid2VjaG9jaGFyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDhfMTYiPldlY2hvY2hhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1Ml83Ij5XaW48L0E+LCBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1M183Ij5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NTFfMTQiPkFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTU3XzE0Ij5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NThfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NTlfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1MV8xNCI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG88L0E+CisgICAgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NThfNyI+V2luPC9BPiwKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4nKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1OV83Ij5DaDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1N18xNCI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG88L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NjlfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyOV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTcwXzciPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTcxXzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMxXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NzJfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzJfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3M183Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzRfMTYiPk5ld3dpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0XzE2Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0XzE2Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0XzE2Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0XzE2Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3d2luLCAibmV3d2luIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQwXzciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MF83Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzRfMTYiPk5ld3dpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NzBfNyI+TnVtYmVyX09mX0xpbmVzPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3MV83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NzJfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NzNfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MF83Ij5XPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDBfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU2OV8xMyI+Q3JlYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTg4XzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4OF8yMiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTRfMTYiPldkZWx3aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NF8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXZGVsd2luLCAiZGVsd2luIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTRfMTYiPldkZWx3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81ODhfMjIiPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81ODhfMjIiPldpbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81ODhfMTQiPkRlbGV0ZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk0XzEzIj5TdWJfV2luZG93PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5NV83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk2XzciPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk3XzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OThfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5OV83Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzBfMTYiPlN1YndpbjwvQT48L0ZPTlQ+CisgICAgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3MV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjcwXzE2Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3Ml8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjcwXzE2Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzNfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3MF8xNiI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc0XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzBfMTYiPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjcwXzE2Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU3Vid2luLCAic3Vid2luIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc4XzciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3OF83Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzBfMTYiPlN1YndpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5NV83Ij5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OTZfNyI+TnVtYmVyX09mX0xpbmVzPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5N183Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OThfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OTlfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3OF83Ij5XPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzhfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5NF8xMyI+U3ViX1dpbmRvdzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA0XzEzIj5EZXJpdmVkX1dpbmRvdzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDVfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwNl83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwN183Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA4XzciPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDlfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk4XzE2Ij5EZXJ3aW48L0E+PC9GT05UPgorICAgICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTlfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5OF8xNiI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDBfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5OF8xNiI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAxXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOThfMTYiPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMl8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk4XzE2Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDNfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5OF8xNiI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERlcndpbiwgImRlcndpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwNl83Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMDZfNyI+VzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk4XzE2Ij5EZXJ3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDVfNyI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA2XzciPk51bWJlcl9PZl9MaW5lczwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDdfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA4XzciPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA5XzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMDZfNyI+VzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzA2XzciPlc8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDRfMTMiPkRlcml2ZWRfV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzE5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTRfMTMiPkR1cGxpY2F0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxOV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE0XzI0Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjFfMTYiPkR1cHdpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzIxXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEdXB3aW4sICJkdXB3aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjRfNyI+VzwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzIxXzE2Ij5EdXB3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTRfMjQiPldpbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzI0XzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMyNF83Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE0XzEzIj5EdXBsaWNhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTlfMTQiPk1vdmVfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTlfMjciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjBfMjciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjIxXzI3Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzZfMTYiPk12d2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM2XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMzZfMTYiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzN18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzM2XzE2Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM4XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMzZfMTYiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTXZ3aW4sICJtdndpbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzM2XzE2Ij5NdndpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxOV8yNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyMF8yNyI+TGluZTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjIxXzI3Ij5Db2x1bW48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE5XzE0Ij5Nb3ZlX1dpbmRvdzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyNl8xNCI+TW92ZV9EZXJpdmVkX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0Nl8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjI2XzM1Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ3XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjdfMzUiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ4XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjhfMzUiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1MF8xNiI+TXZkZXJ3aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM1MF8xNiI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNTBfMTYiPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM1MF8xNiI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNdmRlcndpbiwgIm12ZGVyd2luIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNTBfMTYiPk12ZGVyd2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjI2XzM1Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjI3XzM1Ij5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjhfMzUiPkNvbHVtbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjZfMTQiPk1vdmVfRGVyaXZlZF9XaW5kb3c8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDNfMTQiPlNldF9TeW5jaF9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDNfMzAiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDRfMzAiPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjNfMTYiPlN5bmNvazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2M18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzYzXzE2Ij5XaW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2NF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzYzXzE2Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTeW5jb2ssICJzeW5jb2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM2M18xNiI+U3luY29rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjQzXzMwIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY0NF8zMCI+TW9kZTwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjQzXzE0Ij5TZXRfU3luY2hfTW9kZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTNfMTQiPkFkZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Ml8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjUzXzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzczXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTRfMTkiPlN0cjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc0XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTVfMTkiPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Nl8xNiI+V2FkZG5zdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3Nl8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzZfMTYiPlN0cjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzc2XzE2Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IC0xKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdhZGRuc3RyLCAid2FkZG5zdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODFfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1NF8xOSI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODJfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1NF8xOSI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzgxXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM4Ml83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzZfMTYiPldhZGRuc3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjUzXzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zODFfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1NV8xOSI+TGVuPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1M18xNCI+QWRkPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjYyXzE0Ij5BZGQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjYyXzE5Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzkyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2M18xOSI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjRfMTkiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjVfMTkiPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2Nl8xOSI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjYyXzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjNfMTkiPkxpbmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjRfMTkiPkNvbHVtbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjUzXzE0Ij5BZGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjJfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2NV8xOSI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjY2XzE5Ij5MZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjYyXzE0Ij5BZGQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc3XzE0Ij5BZGQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc3XzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3OF8xOSI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkF0dHJpYnV0ZWRfU3RyaW5nPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3OV8xOSI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA3XzE2Ij5XYWRkY2huc3RyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA3XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MDdfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA4XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MDdfMTYiPlN0cjwvQT48L0ZPTlQ+IDogY2h0eXBlX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwN18xNiI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSAtMSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXYWRkY2huc3RyLCAid2FkZGNobnN0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMl83Ij5UeHQ8L0E+PC9GT05UPiA6IGNodHlwZV9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzhfMTkiPlN0cjwvQT4nTGVuZ3RoKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxNF8xMSI+TGVuZ3RoPC9BPjwvRk9OVD4gPGI+aW48L2I+IDEgLi4gc2l6ZV90ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzhfMTkiPlN0cjwvQT4nTGVuZ3RoKSA8Yj5sb29wPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDEyXzciPlR4dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQxNF8xMSI+TGVuZ3RoPC9BPiAtIDEpIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3OF8xOSI+U3RyPC9BPiAoTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDE0XzExIj5MZW5ndGg8L0E+KSk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDEyXzciPlR4dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3OF8xOSI+U3RyPC9BPidMZW5ndGgpIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDA3XzE2Ij5XYWRkY2huc3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc3XzE5Ij5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDEyXzciPlR4dDwvQT4sCisgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc5XzE5Ij5MZW48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc3XzE0Ij5BZGQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODZfMTQiPkFkZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODZfMTkiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjg3XzE5Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4OF8xOSI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4OV8xOSI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkF0dHJpYnV0ZWRfU3RyaW5nPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY5MF8xOSI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjg2XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODdfMTkiPkxpbmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODhfMTkiPkNvbHVtbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc3XzE0Ij5BZGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODZfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4OV8xOSI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjkwXzE5Ij5MZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjg2XzE0Ij5BZGQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA0XzE0Ij5Cb3JkZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA1XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwNl83Ij5MZWZ0X1NpZGVfU3ltYm9sPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA3XzciPlJpZ2h0X1NpZGVfU3ltYm9sPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDhfNyI+VG9wX1NpZGVfU3ltYm9sPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwOV83Ij5Cb3R0b21fU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzEwXzciPlVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MTFfNyI+VXBwZXJfUmlnaHRfQ29ybmVyX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcxMl83Ij5Mb3dlcl9MZWZ0X0Nvcm5lcl9TeW1ib2w8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzEzXzciPkxvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2w8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OF8xNiI+V2JvcmRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5XPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5MUzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+UlM8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPlRTPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1Ml8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5CUzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+VUxDPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPlVSQzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1NV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5MTEM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTZfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+TFJDPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXYm9yZGVyLCAid2JvcmRlciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5XYm9yZGVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA1XzciPldpbjwvQT4sCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwNl83Ij5MZWZ0X1NpZGVfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwN183Ij5SaWdodF9TaWRlX1N5bWJvbDwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwOF83Ij5Ub3BfU2lkZV9TeW1ib2w8L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDlfNyI+Qm90dG9tX1NpZGVfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzEwXzciPlVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbDwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcxMV83Ij5VcHBlcl9SaWdodF9Db3JuZXJfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzEyXzciPkxvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbDwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcxM183Ij5Mb3dlcl9SaWdodF9Db3JuZXJfU3ltYm9sPC9BPikKKyAgICAgICAgICAgICAgICAgICkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4KKyAgICAgIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwNF8xNCI+Qm9yZGVyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzIwXzE0Ij5Cb3g8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzIxXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjJfNyI+VmVydGljYWxfU3ltYm9sPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjNfNyI+SG9yaXpvbnRhbF9TeW1ib2w8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA0XzE0Ij5Cb3JkZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjFfNyI+V2luPC9BPiwKKyAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzIyXzciPlZlcnRpY2FsX1N5bWJvbDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyMl83Ij5WZXJ0aWNhbF9TeW1ib2w8L0E+LAorICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjNfNyI+SG9yaXpvbnRhbF9TeW1ib2w8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjNfNyI+SG9yaXpvbnRhbF9TeW1ib2w8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzIwXzE0Ij5Cb3g8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjhfMTQiPkhvcml6b250YWxfTGluZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjlfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczMF83Ij5MaW5lX1NpemU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IE5hdHVyYWw7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzFfNyI+TGluZV9TeW1ib2w8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5MF8xNiI+V2hsaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80OTBfMTYiPlc8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ5MF8xNiI+Q2g8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTJfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ5MF8xNiI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaGxpbmUsICJ3aGxpbmUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ5MF8xNiI+V2hsaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzI5XzciPldpbjwvQT4sCisgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzFfNyI+TGluZV9TeW1ib2w8L0E+KSwKKyAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczMF83Ij5MaW5lX1NpemU8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzI4XzE0Ij5Ib3Jpem9udGFsX0xpbmU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzdfMTQiPlZlcnRpY2FsX0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzM4XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzlfNyI+TGluZV9TaXplPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiBOYXR1cmFsOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzQwXzciPkxpbmVfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDdfMTYiPld2bGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTA3XzE2Ij5XPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA4XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDdfMTYiPkNoPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDdfMTYiPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3ZsaW5lLCAid3ZsaW5lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDdfMTYiPld2bGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczOF83Ij5XaW48L0E+LAorICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzQwXzciPkxpbmVfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzlfNyI+TGluZV9TaXplPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczN18xNCI+VmVydGljYWxfTGluZTwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyMF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzUxXzEzIj5HZXRfS2V5c3Ryb2tlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIwXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NTFfMjgiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyM18xNiI+V2dldGNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MjNfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2dldGNoLCAid2dldGNoIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI2XzciPkM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MjNfMTYiPldnZXRjaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc1MV8yOCI+V2luPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MjZfNyI+QzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODhfNCI+S2V5X05vbmU8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MjZfNyI+QzwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc1MV8xMyI+R2V0X0tleXN0cm9rZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2Ml8xNCI+VW5kb19LZXlzdHJva2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2Ml8zMCI+S2V5PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzdfMTYiPlVuZ2V0Y2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUzN18xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFVuZ2V0Y2gsICJ1bmdldGNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MzdfMTYiPlVuZ2V0Y2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzYyXzMwIj5LZXk8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzYyXzE0Ij5VbmRvX0tleXN0cm9rZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzY3XzEzIj5IYXNfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ1XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjdfMjIiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ3XzE2Ij5IYXNrZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDdfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU0N18xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBIYXNrZXksICJoYXNfa2V5Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NDdfMTYiPkhhc2tleTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjdfMjIiPktleTwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjdfMTMiPkhhc19LZXk8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3NF8xMyI+SXNfRnVuY3Rpb25fS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NzRfMzAiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTlfNyI+TDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IChOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OF80Ij5LZXlfRjA8L0E+KSArCisgICAgICAgIE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3OF8xMiI+RnVuY3Rpb25fS2V5X051bWJlcjwvQT4nTGFzdCkpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3NF8zMCI+S2V5PC9BPiAmZ3Q7PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OF80Ij5LZXlfRjA8L0E+KSA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NzRfMzAiPktleTwvQT4gJmx0Oz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTU5XzciPkw8L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc0XzEzIj5Jc19GdW5jdGlvbl9LZXk8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8xMyI+RnVuY3Rpb25fS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODFfMjciPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3OF8xMiI+RnVuY3Rpb25fS2V5X051bWJlcjwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc0XzEzIj5Jc19GdW5jdGlvbl9LZXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODFfMjciPktleTwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3OF8xMiI+RnVuY3Rpb25fS2V5X051bWJlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8yNyI+S2V5PC9BPiAtIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4XzQiPktleV9GMDwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiBDb25zdHJhaW50X0Vycm9yOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8xMyI+RnVuY3Rpb25fS2V5PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODZfMTMiPkZ1bmN0aW9uX0tleV9Db2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgwXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODZfMzIiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPiAoTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOThfNCI+S2V5X0YwPC9BPikgKyBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODZfMzIiPktleTwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzg2XzEzIj5GdW5jdGlvbl9LZXlfQ29kZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDBfMTQiPlN0YW5kb3V0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg2XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDBfMjQiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4N18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODAxXzI0Ij5PbjwvQT48L0ZPTlQ+ICA6IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg5XzE2Ij53c3RhbmRvdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU4OV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHdzdGFuZG91dCwgIndzdGFuZG91dCIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTkxXzE2Ij53c3RhbmRlbmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU5MV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHdzdGFuZGVuZCwgIndzdGFuZGVuZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NF83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODAxXzI0Ij5PbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU5NF83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU4OV8xNiI+d3N0YW5kb3V0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODAwXzI0Ij5XaW48L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81OTRfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81OTFfMTYiPndzdGFuZGVuZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwMF8yNCI+V2luPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81OTRfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDBfMTQiPlN0YW5kb3V0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA2XzE0Ij5Td2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDdfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA4XzciPkF0dHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA5XzciPk9uPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxMV8xNiI+V2F0dHJvbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxMV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjExXzE2Ij5XaW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxMl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjExXzE2Ij5DX0F0dHI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2F0dHJvbiwgIndhdHRyX29uIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTRfMTYiPldhdHRyb2ZmPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTRfMTYiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjE0XzE2Ij5DX0F0dHI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2F0dHJvZmYsICJ3YXR0cl9vZmYiKTsKKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW4gQWRhIHdlIHVzZSB0aGUgT24gQm9vbGVhbiB0byBjb250cm9sIHdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG88L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgc3dpdGNoIG9uIG9yIG9mZiB0aGUgYXR0cmlidXRlcyBpbiB0aGUgc2V0LjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTlfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjIwXzciPkFDPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA4XzciPkF0dHI8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwOV83Ij5PbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxOV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxMV8xNiI+V2F0dHJvbjwvQT4gICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDdfNyI+V2luPC9BPiwgQXR0ckNoYXJfVG9fQXR0clR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYyMF83Ij5BQzwvQT4pKTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTlfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTRfMTYiPldhdHRyb2ZmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA3XzciPldpbjwvQT4sIEF0dHJDaGFyX1RvX0F0dHJUeXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MjBfNyI+QUM8L0E+KSk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTlfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDZfMTQiPlN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODE3XzE0Ij5TZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODE4XzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MTlfNyI+QXR0cjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODIwXzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM5XzE2Ij5XYXR0cnNldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzOV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjM5XzE2Ij5XaW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzOV8xNiI+Q19BdHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdhdHRyc2V0LCAid2F0dHJzZXQiKTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tID8/PyB3YXR0cl9zZXQ8L0VNPjwvRk9OVD4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzOV8xNiI+V2F0dHJzZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MThfNyI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgyMF83Ij5Db2xvcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MTlfNyI+QXR0cjwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODE3XzE0Ij5TZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgyNl8xMyI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTJfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgyN183Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTVfMTYiPldhdHRyZ2V0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NTVfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjU1XzE2Ij5BdHI8L0E+PC9GT05UPiA6IDxiPmFjY2VzczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzY0XzEyIj5DX0F0dHJUeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjU1XzE2Ij5Db2w8L0E+PC9GT05UPiA6IDxiPmFjY2VzczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjU1XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdhdHRyZ2V0LCAid2F0dHJfZ2V0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYxXzciPkF0dHI8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2Ml83Ij5Db2w8L0E+PC9GT05UPiAgOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjNfNyI+UmVzPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY1NV8xNiI+V2F0dHJnZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MjdfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjYxXzciPkF0dHI8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY2Ml83Ij5Db2w8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5OdWxsX0FkZHJlc3MpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjVfNyI+Q2g8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY2M183Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcxXzQiPkN1cnNlc19PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY2NV83Ij5DaDwvQT4gOj0gQXR0clR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY2MV83Ij5BdHRyPC9BPik7CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY2NV83Ij5DaDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgyNl8xMyI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzMl8xMyI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzVfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzM183Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3OF8xNiI+V2F0dHJnZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3OF8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NzhfMTYiPkF0cjwvQT48L0ZPTlQ+IDogPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NzhfMTYiPkNvbDwvQT48L0ZPTlQ+IDogPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NzhfMTYiPk9wdDwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2F0dHJnZXQsICJ3YXR0cl9nZXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODRfNyI+QXR0cjwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzY0XzEyIj5DX0F0dHJUeXBlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjg1XzciPkNvbDwvQT48L0ZPTlQ+ICA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4Nl83Ij5SZXM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjc4XzE2Ij5XYXR0cmdldDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzM183Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82ODRfNyI+QXR0cjwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjg1XzciPkNvbDwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLk51bGxfQWRkcmVzcyk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4OF83Ij5DaDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjg2XzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzFfNCI+Q3Vyc2VzX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjg4XzciPkNoPC9BPiA6PSBBdHRyVHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjg0XzciPkF0dHI8L0E+KTsKKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjg4XzciPkNoPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzMl8xMyI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MzhfMTQiPlNldF9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODM4XzI1Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5OV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODM5XzI1Ij5QYWlyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDFfMTYiPldzZXRfQ29sb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcwMV8xNiI+V2luPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwMl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzAxXzE2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzAzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MDFfMTYiPk9wdHM8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjJfMTIiPkNfVm9pZF9QdHI8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdzZXRfQ29sb3IsICJ3Y29sb3Jfc2V0Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MDFfMTYiPldzZXRfQ29sb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MzhfMjUiPldpbjwvQT4sCisgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MzlfMjUiPlBhaXI8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82Ml8xMiI+Q19Wb2lkX1B0cjwvQT4gKFN5c3RlbS5OdWxsX0FkZHJlc3MpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MzhfMTQiPlNldF9Db2xvcjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg0NV8xNCI+Q2hhbmdlX0F0dHJpYnV0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ2XzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDdfNyI+Q291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ4XzciPkF0dHI8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg0OV83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxOV8xNiI+V2NoZ2F0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTlfMTYiPldpbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE5XzE2Ij5DbnQ8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTlfMTYiPkF0dHI8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyMl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE5XzE2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxOV8xNiI+T3B0czwvQT48L0ZPTlQ+ICA6IFN5c3RlbS5BZGRyZXNzIDo9IFN5c3RlbS5OdWxsX0FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2NoZ2F0LCAid2NoZ2F0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzI3XzciPkNoPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PQorICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ4XzciPkF0dHI8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxOV8xNiI+V2NoZ2F0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ2XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDdfNyI+Q291bnQ8L0E+KSwgQXR0ckNoYXJfVG9fQXR0clR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcyN183Ij5DaDwvQT4pLAorICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDlfNyI+Q29sb3I8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ1XzE0Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1NF8xNCI+Q2hhbmdlX0F0dHJpYnV0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU1XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU2XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU3XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPidGaXJzdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1OF83Ij5Db3VudDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU5XzciPkF0dHI8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NjBfNyI+Q29sb3I8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU1XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1Nl83Ij5MaW5lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU3XzciPkNvbHVtbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ1XzE0Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1NV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NThfNyI+Q291bnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTlfNyI+QXR0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg2MF83Ij5Db2xvcjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTRfMTQiPkNoYW5nZV9BdHRyaWJ1dGVzPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg3MF8xNCI+QmVlcDwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1MV8xNiI+QmVlcGVyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBCZWVwZXIsICJiZWVwIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NTFfMTYiPkJlZXBlcjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODcwXzE0Ij5CZWVwPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODc1XzE0Ij5GbGFzaF9TY3JlZW48L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjFfMTYiPkZsYXNoPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGbGFzaCwgImZsYXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NjFfMTYiPkZsYXNoPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzVfMTQiPkZsYXNoX1NjcmVlbjwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84ODZfMTQiPlNldF9DYnJlYWtfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2OV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODg2XzMxIj5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzcxXzE2Ij5DYnJlYWs8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENicmVhaywgImNicmVhayIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzczXzE2Ij5Ob0NicmVhazwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTm9DYnJlYWssICJub2NicmVhayIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3Nl83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODg2XzMxIj5Td2l0Y2hPbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc3Nl83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc3MV8xNiI+Q2JyZWFrPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NzZfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NzNfMTYiPk5vQ2JyZWFrPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc3Nl83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg4Nl8xNCI+U2V0X0NicmVha19Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODkyXzE0Ij5TZXRfUmF3X01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODhfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5Ml8yOCI+U3dpdGNoT248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5MF8xNiI+UmF3PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSYXcsICJyYXciKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5Ml8xNiI+Tm9SYXc8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE5vUmF3LCAibm9yYXciKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OTVfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5Ml8yOCI+U3dpdGNoT248L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83OTVfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83OTBfMTYiPlJhdzwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzk1XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzkyXzE2Ij5Ob1JhdzwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83OTVfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OTJfMTQiPlNldF9SYXdfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5OF8xNCI+U2V0X0VjaG9fTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwN18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODk4XzI5Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA5XzE2Ij5FY2hvPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBFY2hvLCAiZWNobyIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODExXzE2Ij5Ob0VjaG88L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE5vRWNobywgIm5vZWNobyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxNF83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODk4XzI5Ij5Td2l0Y2hPbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgxNF83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgwOV8xNiI+RWNobzwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODE0XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODExXzE2Ij5Ob0VjaG88L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODE0XzciPkVycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODk4XzE0Ij5TZXRfRWNob19Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA0XzE0Ij5TZXRfTWV0YV9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MDRfMjkiPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkwNV8yOSI+U3dpdGNoT248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyOV8xNiI+TWV0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyOV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODI5XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyOV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODI5XzE2Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZXRhLCAibWV0YSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODI5XzE2Ij5NZXRhPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA0XzI5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkwNV8yOSI+U3dpdGNoT248L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkwNF8xNCI+U2V0X01ldGFfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxMF8xNCI+U2V0X0tleVBhZF9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODM3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTBfMzEiPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzOF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTExXzMxIj5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQwXzE2Ij5LZXlwYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg0MF8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDBfMzYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg0MF8xNiI+TW9kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgS2V5cGFkLCAia2V5cGFkIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NDBfMTYiPktleXBhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxMF8zMSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTFfMzEiPlN3aXRjaE9uPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTBfMTQiPlNldF9LZXlQYWRfTW9kZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTE1XzEzIj5HZXRfS2V5UGFkX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxNV8zMCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTFfMTYiPklzX0tleXBhZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODUxXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIElzX0tleXBhZCwgImlzX2tleXBhZCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTFfMTYiPklzX0tleXBhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxNV8zMCI+V2luPC9BPikgLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTVfMTMiPkdldF9LZXlQYWRfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyM18xNCI+SGFsZl9EZWxheTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTIzXzI2Ij5BbW91bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjBfOSI+SGFsZl9EZWxheV9BbW91bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTlfMTYiPkhhbGZkZWxheTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODU5XzE2Ij5BbW91bnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEhhbGZkZWxheSwgImhhbGZkZWxheSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODU5XzE2Ij5IYWxmZGVsYXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTIzXzI2Ij5BbW91bnQ8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTIzXzE0Ij5IYWxmX0RlbGF5PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTI4XzE0Ij5TZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTI5XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzMF83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzFfMTYiPkludHJmbHVzaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODcxXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODcxXzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NzFfMTYiPk1vZGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEludHJmbHVzaCwgImludHJmbHVzaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODcxXzE2Ij5JbnRyZmx1c2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzBfNyI+TW9kZTwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTI4XzE0Ij5TZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODc5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzVfMTQiPlNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzZfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODgxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzN183Ij5GbHVzaDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4M18xNyI+UWlmbHVzaDwvQT48L0ZPTlQ+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFFpZmx1c2gsICJxaWZsdXNoIik7CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg1XzE3Ij5Ob19RaWZsdXNoPC9BPjwvRk9OVD47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTm9fUWlmbHVzaCwgIm5vcWlmbHVzaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTM2XzciPldpbjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzdfNyI+Rmx1c2g8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84ODNfMTciPlFpZmx1c2g8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg4NV8xNyI+Tm9fUWlmbHVzaDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTM1XzE0Ij5TZXRfUXVldWVfSW50ZXJydXB0X01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NDNfMTQiPlNldF9Ob0RlbGF5X01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ0XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0NV83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTAyXzE2Ij5Ob2RlbGF5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTAyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MDJfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDJfMzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkwMl8xNiI+TW9kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTm9kZWxheSwgIm5vZGVsYXkiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkwMl8xNiI+Tm9kZWxheTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0NF83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0NV83Ij5Nb2RlPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NDNfMTQiPlNldF9Ob0RlbGF5X01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NTJfMTQiPlNldF9UaW1lb3V0X01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTBfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1Ml8zMiI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTFfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1M18zMiI+TW9kZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ5XzkiPlRpbWVvdXRfTW9kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTJfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1NF8zMiI+QW1vdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gTmF0dXJhbCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNF8xNyI+V3RpbWVvdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxNF8xNyI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNF80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTE0XzE3Ij5BbW91bnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KTsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXdGltZW91dCwgInd0aW1lb3V0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE3XzciPlRpbWU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5jYXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NTNfMzIiPk1vZGU8L0E+IDxiPmlzPC9iPgorICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ5XzI2Ij5CbG9ja2luZzwvQT4gICAgID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxN183Ij5UaW1lPC9BPiA6PSAtMTsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0OV8zNiI+Tm9uX0Jsb2NraW5nPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTdfNyI+VGltZTwvQT4gOj0gMDsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0OV81MCI+RGVsYXllZDwvQT4gICAgICA9Jmd0OworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1NF8zMiI+QW1vdW50PC9BPiA9IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxiPnJhaXNlPC9iPiBDb25zdHJhaW50X0Vycm9yOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTdfNyI+VGltZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1NF8zMiI+QW1vdW50PC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmNhc2U8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTE0XzE3Ij5XdGltZW91dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1Ml8zMiI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTE3XzciPlRpbWU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTUyXzE0Ij5TZXRfVGltZW91dF9Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY0XzE0Ij5TZXRfRXNjYXBlX1RpbWVyX01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY1XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY2XzciPlRpbWVyX09mZjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzNV8xNiI+Tm90aW1lb3V0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MzVfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzVfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzNV8xNiI+TW9kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTm90aW1lb3V0LCAibm90aW1lb3V0Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MzVfMTYiPk5vdGltZW91dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk2NV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk2Nl83Ij5UaW1lcl9PZmY8L0E+KSkpCisgICAgICAgID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk2NF8xNCI+U2V0X0VzY2FwZV9UaW1lcl9Nb2RlPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTc1XzE0Ij5TZXRfTkxfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTc1XzI3Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ3XzE2Ij5OTDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTkwsICJubCIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ5XzE2Ij5Ob05MPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOb05MLCAibm9ubCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1Ml83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTc1XzI3Ij5Td2l0Y2hPbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk1Ml83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk0N18xNiI+Tkw8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk1Ml83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk0OV8xNiI+Tm9OTDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NTJfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NzVfMTQiPlNldF9OTF9Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTgxXzE0Ij5DbGVhcl9Pbl9OZXh0X1VwZGF0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODJfNyI+V2luPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4M183Ij5Eb19DbGVhcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY4XzE2Ij5DbGVhcl9PazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTY4XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2OF8zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTY4XzE2Ij5GbGFnPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDbGVhcl9PaywgImNsZWFyb2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk2OF8xNiI+Q2xlYXJfT2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODJfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODNfNyI+RG9fQ2xlYXI8L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4MV8xNCI+Q2xlYXJfT25fTmV4dF9VcGRhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODhfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTg5XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTkwXzciPkRvX0lkbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTgwXzE2Ij5JRExfT2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk4MF8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODBfMzYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk4MF8xNiI+RmxhZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSURMX09rLCAiaWRsb2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk4MF8xNiI+SURMX09rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTg5XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTkwXzciPkRvX0lkbDwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTg4XzE0Ij5Vc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk1XzE0Ij5Vc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk2XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk3XzciPkRvX0lkYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5Ml8xNyI+SURDX09rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85OTJfMTciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkyXzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85OTJfMTciPkZsYWc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KTsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJRENfT2ssICJpZGNvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85OTJfMTciPklEQ19PazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk5Nl83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk5N183Ij5Eb19JZGM8L0E+KSkpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OTVfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDJfMTQiPkxlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwM183Ij5XaW48L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDRfNyI+RG9fTGVhdmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDJfMTYiPkxlYXZlX09rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAwMl8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDAyXzM4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDAyXzE2Ij5GbGFnPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBMZWF2ZV9PaywgImxlYXZlb2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMDJfMTYiPkxlYXZlX09rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwM183Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDRfNyI+RG9fTGVhdmU8L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDJfMTQiPkxlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwOV8xNCI+SW1tZWRpYXRlX1VwZGF0ZV9Nb2RlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDEwXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDExXzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxNF8xNyI+SW1tZWRvazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMTRfMTciPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDE0XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDE0XzE3Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPik7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSW1tZWRvaywgImltbWVkb2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAxNF8xNyI+SW1tZWRvazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTBfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDExXzciPk1vZGU8L0E+KSkpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDA5XzE0Ij5JbW1lZGlhdGVfVXBkYXRlX01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAxNl8xNCI+QWxsb3dfU2Nyb2xsaW5nPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE3XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAxOF83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyNF8xNiI+U2Nyb2xsb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDI0XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyNF80MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAyNF8xNiI+TW9kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2Nyb2xsb2ssICJzY3JvbGxvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAyNF8xNiI+U2Nyb2xsb2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE3XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAxOF83Ij5Nb2RlPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE2XzE0Ij5BbGxvd19TY3JvbGxpbmc8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDMyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDIyXzEzIj5TY3JvbGxpbmdfQWxsb3dlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMzJfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjJfMzIiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMzVfMTYiPklzX1Njcm9sbF9PazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMzVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMzVfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXNfU2Nyb2xsX09rLCAiaXNfc2Nyb2xsb2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAzNV8xNiI+SXNfU2Nyb2xsX09rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyMl8zMiI+V2luPC9BPikgLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDIyXzEzIj5TY3JvbGxpbmdfQWxsb3dlZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDI3XzE0Ij5TZXRfU2Nyb2xsX1JlZ2lvbjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyOF83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjlfNyI+VG9wX0xpbmU8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDMwXzciPkJvdHRvbV9MaW5lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDZfMTYiPldzZXRzY3JyZWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQ2XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDQ2XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDZfMTYiPkxpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDhfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDZfMTYiPkNvbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3NldHNjcnJlZywgIndzZXRzY3JyZWciKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDZfMTYiPldzZXRzY3JyZWc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDI4XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDI5XzciPlRvcF9MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDMwXzciPkJvdHRvbV9MaW5lPC9BPikpCisgICAgICAgID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjdfMTQiPlNldF9TY3JvbGxfUmVnaW9uPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQwXzE0Ij5VcGRhdGVfU2NyZWVuPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1OV8xNiI+RG9fVXBkYXRlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEb19VcGRhdGUsICJkb3VwZGF0ZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA1OV8xNiI+RG9fVXBkYXRlPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQwXzE0Ij5VcGRhdGVfU2NyZWVuPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNDVfMTQiPlJlZnJlc2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQ1XzIzIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2OV8xNiI+V3JlZnJlc2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDY5XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdyZWZyZXNoLCAid3JlZnJlc2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNjlfMTYiPldyZWZyZXNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA0NV8yMyI+V2luPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA0NV8xNCI+UmVmcmVzaDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDUyXzE0Ij5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDUzXzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDgwXzE2Ij5Xbm91dHJlZnJlc2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDgwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDgwXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdub3V0cmVmcmVzaCwgIndub3V0cmVmcmVzaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA4MF8xNiI+V25vdXRyZWZyZXNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA1M183Ij5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDUyXzE0Ij5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTlfMTQiPlJlZHJhdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODhfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTlfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDkwXzE2Ij5SZWRyYXd3aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDkwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDkwXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUmVkcmF3d2luLCAicmVkcmF3d2luIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDkwXzE2Ij5SZWRyYXd3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDU5XzIyIj5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDU5XzE0Ij5SZWRyYXc8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2M18xNCI+UmVkcmF3PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDYzXzIyIj5XaW48L0E+PC9GT05UPiAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2NF8yMiI+QmVnaW5fTGluZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTAxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNjVfMjIiPkxpbmVfQ291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBQb3NpdGl2ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwM18xNiI+V3JlZHJhd2xuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwM18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEwM18xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDNfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMDNfMTYiPkZpcnN0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTAzXzU2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTAzXzE2Ij5DbnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdyZWRyYXdsbiwgIndyZWRyYXdsbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEwM18xNiI+V3JlZHJhd2xuPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2M18yMiI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNjRfMjIiPkJlZ2luX0xpbmU8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNjVfMjIiPkxpbmVfQ291bnQ8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2M18xNCI+UmVkcmF3PC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNzRfMTQiPkVyYXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExNV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA3NF8yMSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTdfMTYiPldlcmFzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTdfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMTdfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2VyYXNlLCAid2VyYXNlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTE3XzE2Ij5XZXJhc2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDc0XzIxIj5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDc0XzE0Ij5FcmFzZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTI1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDgwXzE0Ij5DbGVhcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMjVfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODFfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMjdfMTYiPldjbGVhcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMjdfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMjdfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2NsZWFyLCAid2NsZWFyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTI3XzE2Ij5XY2xlYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDgxXzciPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODBfMTQiPkNsZWFyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODdfMTQiPkNsZWFyX1RvX0VuZF9PZl9TY3JlZW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTM1XzM4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDg4XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTM3XzE2Ij5XY2xlYXJib3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTM3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTM3XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdjbGVhcmJvdCwgIndjbHJ0b2JvdCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEzN18xNiI+V2NsZWFyYm90PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4OF83Ij5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDg3XzE0Ij5DbGVhcl9Ub19FbmRfT2ZfU2NyZWVuPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwOTRfMTQiPkNsZWFyX1RvX0VuZF9PZl9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0NV8zNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA5NV83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0N18xNiI+V2NsZWFyZW9sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0N18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE0N18xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXY2xlYXJlb2wsICJ3Y2xydG9lb2wiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNDdfMTYiPldjbGVhcmVvbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwOTVfNyI+V2luPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA5NF8xNCI+Q2xlYXJfVG9fRW5kX09mX0xpbmU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMDhfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTA5XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMTBfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTlfMTciPldCYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1OV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE1OV8xNyI+VzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1OV80NSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE1OV8xNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPik7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV0JhY2tncm91bmQsICJ3YmtnZHNldCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU5XzE3Ij5XQmFja2dyb3VuZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMDlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMTBfNyI+Q2g8L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMDhfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMTZfMTQiPkNoYW5nZV9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTE3XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTY3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMThfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2OV8xNiI+V0NoYW5nZUJrZ2Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTY5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTY5XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjlfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNjlfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXQ2hhbmdlQmtnZCwgIndia2dkIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTY5XzE2Ij5XQ2hhbmdlQmtnZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMTdfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMThfNyI+Q2g8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExNl8xNCI+Q2hhbmdlX0JhY2tncm91bmQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTc3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTI1XzEzIj5HZXRfQmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMjVfMjkiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTgwXzE2Ij5XZ2V0YmtnZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODBfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXZ2V0YmtnZCwgImdldGJrZ2QiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODBfMTYiPldnZXRia2dkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEyNV8yOSI+V2luPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTI1XzEzIj5HZXRfQmFja2dyb3VuZDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODZfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTJfMzUiPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTg3XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUzXzM1Ij5TdGFydDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4OF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1NF8zNSI+Q291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBQb3NpdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODlfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTVfMzUiPlN0YXRlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5MV8xNiI+V3RvdWNobG48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTkxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTkxXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTkyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTkxXzE2Ij5TdGE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE5MV8xNiI+Q250PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExOTFfMTYiPkNoZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3RvdWNobG4sICJ3dG91Y2hsbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE5MV8xNiI+V3RvdWNobG48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzM1Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1M18zNSI+U3RhcnQ8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTRfMzUiPkNvdW50PC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTU1XzM1Ij5TdGF0ZTwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjAzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQxXzE0Ij5Ub3VjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMDNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDFfMjEiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMDVfNyI+WTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMDZfNyI+WDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOF8xNCI+R2V0X1NpemU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQxXzIxIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjA1XzciPlk8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjA2XzciPlg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTJfMTQiPkNoYW5nZV9MaW5lc19TdGF0dXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQxXzIxIj5XaW48L0E+LCAwLCBQb3NpdGl2ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIwNV83Ij5ZPC9BPiksIFRydWUpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQxXzE0Ij5Ub3VjaDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjEyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTM2XzE0Ij5VbnRvdWNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxMl8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEzNl8yMyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxNF83Ij5ZPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxNV83Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMzZfMjMiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMTRfNyI+WTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMTVfNyI+WDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMzZfMjMiPldpbjwvQT4sIDAsIFBvc2l0aXZlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjE0XzciPlk8L0E+KSwgRmFsc2UpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTM2XzE0Ij5VbnRvdWNoPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMjFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDVfMTQiPlRvdWNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIyMV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0NV8yMSI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjIyXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQ2XzIxIj5TdGFydDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMjNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDdfMjEiPkNvdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gUG9zaXRpdmUpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDVfMjEiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDZfMjEiPlN0YXJ0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0N18yMSI+Q291bnQ8L0E+LCBUcnVlKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0NV8xNCI+VG91Y2g8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjI5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTYwXzEzIj5Jc19Ub3VjaGVkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTYwXzI1Ij5XaW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTYxXzI1Ij5MaW5lPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzNfMTYiPldMaW5lVG91Y2hlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMzNfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzM180MiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzM18xNiI+TDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV0xpbmVUb3VjaGVkLCAiaXNfbGluZXRvdWNoZWQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMzNfMTYiPldMaW5lVG91Y2hlZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjBfMjUiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTYxXzI1Ij5MaW5lPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjBfMTMiPklzX1RvdWNoZWQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTY1XzEzIj5Jc19Ub3VjaGVkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTY1XzI1Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0Nl8xNiI+V1dpblRvdWNoZWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjQ2XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdXaW5Ub3VjaGVkLCAiaXNfd2ludG91Y2hlZCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI0Nl8xNiI+V1dpblRvdWNoZWQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTY1XzI1Ij5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTY1XzEzIj5Jc19Ub3VjaGVkPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjU2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc0XzE0Ij5Db3B5PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc1XzciPlNvdXJjZV9XaW5kb3c8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3Nl83Ij5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzdfNyI+U291cmNlX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3OF83Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjYxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzlfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4MF83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjYzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODFfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4Ml83Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODNfNyI+Tm9uX0Rlc3RydWN0aXZlX01vZGU8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY3XzE2Ij5Db3B5d2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2N18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+U3JjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjY3XzE2Ij5Ec3Q8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPlN0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPlNsYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzFfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPkR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPkRsYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPkRicjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPkRyYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzVfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPk5kbTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ29weXdpbiwgImNvcHl3aW4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPkNvcHl3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc1XzciPlNvdXJjZV9XaW5kb3c8L0E+LAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3Nl83Ij5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+LAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzdfNyI+U291cmNlX1RvcF9Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc4XzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzlfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODBfNyI+RGVzdGluYXRpb25fTGVmdF9Db2x1bW48L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTgxXzciPkRlc3RpbmF0aW9uX0JvdHRvbV9Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTgyXzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODNfNyI+Tm9uX0Rlc3RydWN0aXZlX01vZGU8L0E+KQorICAgICAgICAgICAgICAgICkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3NF8xNCI+Q29weTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjkyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTg4XzE0Ij5PdmVyd3JpdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjkzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODhfMjUiPlNvdXJjZV9XaW5kb3c8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4OV8yNSI+RGVzdGluYXRpb25fV2luZG93PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5Nl8xNiI+T3ZlcndyaXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5Nl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI5Nl8xNiI+U3JjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTZfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyOTZfMTYiPkRzdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBPdmVyd3JpdGUsICJvdmVyd3JpdGUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyOTZfMTYiPk92ZXJ3cml0ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODhfMjUiPlNvdXJjZV9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTg5XzI1Ij5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTg4XzE0Ij5PdmVyd3JpdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE5NF8xNCI+T3ZlcmxheTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE5NF8yMyI+U291cmNlX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTk1XzIzIj5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzA4XzE2Ij5PdmVybGF5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwOF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMwOF8xNiI+U3JjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDhfMzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMDhfMTYiPkRzdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBPdmVybGF5LCAib3ZlcmxheSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMwOF8xNiI+T3ZlcmxheTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExOTRfMjMiPlNvdXJjZV9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTk1XzIzIj5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTk0XzE0Ij5PdmVybGF5PC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDRfMTQiPkluc2VydF9EZWxldGVfTGluZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzE4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDVfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjA2XzciPkxpbmVzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciAgICAgICA6PSAxKSA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGVmYXVsdCBpcyB0byBpbnNlcnQgb25lIGxpbmUgYWJvdmU8L0VNPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyMV8xNiI+V2luc2RlbGxuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyMV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMyMV8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzIxXzM5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzIxXzE2Ij5OPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaW5zZGVsbG4sICJ3aW5zZGVsbG4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMjFfMTYiPldpbnNkZWxsbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDVfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDZfNyI+TGluZXM8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNF8xNCI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzI5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjEyXzE0Ij5EZWxldGVfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMjlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMTJfMjciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDRfMTQiPkluc2VydF9EZWxldGVfTGluZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjEyXzI3Ij5XaW48L0E+LCAtMSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMTJfMTQiPkRlbGV0ZV9MaW5lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMThfMTQiPkluc2VydF9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzNV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxOF8yNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNF8xNCI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMThfMjciPldpbjwvQT4sIDEpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjE4XzE0Ij5JbnNlcnRfTGluZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzQyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOV83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzBfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzFfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDdfMTYiPkdldE1heFk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzQ3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzQ3XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldE1heFksICJnZXRtYXh5Iik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNTBfMTYiPkdldE1heFg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzUwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzUwXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldE1heFgsICJnZXRtYXh4Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1M183Ij5ZPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM0N18xNiI+R2V0TWF4WTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjlfNyI+V2luPC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNF80Ij5PZmZzZXRfWFk8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1NV83Ij5YPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM1MF8xNiI+R2V0TWF4WDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjlfNyI+V2luPC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNF80Ij5PZmZzZXRfWFk8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzMF83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzUzXzciPlk8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzFfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzU1XzciPlg8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOF8xNCI+R2V0X1NpemU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzNl8xNCI+R2V0X1dpbmRvd19Qb3NpdGlvbjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzN183Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM4XzciPlRvcF9MZWZ0X0xpbmU8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM5XzciPlRvcF9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzY3XzE2Ij5HZXRCZWdZPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2N18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM2N18xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRCZWdZLCAiZ2V0YmVneSIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzcwXzE2Ij5HZXRCZWdYPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM3MF8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRCZWdYLCAiZ2V0YmVneCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNzNfNyI+WTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM2N18xNiI+R2V0QmVnWTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzdfNyI+V2luPC9BPikpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzc0XzciPlg8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNzBfMTYiPkdldEJlZ1g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM3XzciPldpbjwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzOF83Ij5Ub3BfTGVmdF9MaW5lPC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzczXzciPlk8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzlfNyI+VG9wX0xlZnRfQ29sdW1uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzc0XzciPlg8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzNl8xNCI+R2V0X1dpbmRvd19Qb3NpdGlvbjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzgwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ1XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ2XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ3XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzg1XzE2Ij5HZXRDdXJZPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4NV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM4NV8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRDdXJZLCAiZ2V0Y3VyeSIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzg4XzE2Ij5HZXRDdXJYPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM4OF8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRDdXJYLCAiZ2V0Y3VyeCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOTFfNyI+WTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM4NV8xNiI+R2V0Q3VyWTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDVfNyI+V2luPC9BPikpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzkyXzciPlg8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzODhfMTYiPkdldEN1clg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ1XzciPldpbjwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0Nl83Ij5MaW5lPC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzkxXzciPlk8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDdfNyI+Q29sdW1uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzkyXzciPlg8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjUyXzE0Ij5HZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1M183Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU0XzciPlRvcF9MZWZ0X0xpbmU8L0E+PC9GT05UPiAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU1XzciPlRvcF9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDAyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTZfNyI+SXNfTm90X0FfU3Vid2luZG93PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IEJvb2xlYW4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MDRfMTYiPkdldFBhclk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDA0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDA0XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldFBhclksICJnZXRwYXJ5Iik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MDdfMTYiPkdldFBhclg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDA3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDA3XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldFBhclgsICJnZXRwYXJ4Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxMF83Ij5ZPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQwNF8xNiI+R2V0UGFyWTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTNfNyI+V2luPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MTFfNyI+WDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDdfMTYiPkdldFBhclg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjUzXzciPldpbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQxMF83Ij5ZPC9BPiA9IC0xIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU0XzciPlRvcF9MZWZ0X0xpbmU8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4nTGFzdDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTVfNyI+VG9wX0xlZnRfQ29sdW1uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+J0xhc3Q7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU2XzciPklzX05vdF9BX1N1YndpbmRvdzwvQT4gOj0gVHJ1ZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU0XzciPlRvcF9MZWZ0X0xpbmU8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MTBfNyI+WTwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1NV83Ij5Ub3BfTGVmdF9Db2x1bW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MTFfNyI+WDwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1Nl83Ij5Jc19Ob3RfQV9TdWJ3aW5kb3c8L0E+IDo9IEZhbHNlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTJfMTQiPkdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjdfMTMiPk5ld19QYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDI0XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjY3XzIyIj5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjVfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjhfMjIiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyN18xNiI+TmV3cGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQyN18xNiI+TGluZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjdfMzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MjdfMTYiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmV3cGFkLCAibmV3cGFkIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzMF83Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDMwXzciPlc8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MjdfMTYiPk5ld3BhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjY3XzIyIj5MaW5lczwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI2OF8yMiI+Q29sdW1uczwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDMwXzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MzBfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjdfMTMiPk5ld19QYWQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDM5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjczXzEzIj5TdWJfUGFkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc0XzciPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc1XzciPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzZfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc3XzciPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3OF83Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQ2XzE2Ij5TdWJwYWQ8L0E+PC9GT05UPgorICAgICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQ3XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDQ2XzE2Ij5QYWQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDhfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDZfMTYiPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDlfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDZfMTYiPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NTBfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDZfMTYiPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NTFfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDZfMTYiPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTdWJwYWQsICJzdWJwYWQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDU0XzciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NTRfNyI+VzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0Nl8xNiI+U3VicGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3NF83Ij5QYWQ8L0E+LAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc1XzciPk51bWJlcl9PZl9MaW5lczwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc2XzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzdfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc4XzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDU0XzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NTRfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzNfMTMiPlN1Yl9QYWQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4M18xNCI+UmVmcmVzaDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4NF83Ij5QYWQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDY5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODVfNyI+U291cmNlX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4Nl83Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDcxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODdfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4OF83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDczXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODlfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5MF83Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc2XzE2Ij5QcmVmcmVzaDwvQT48L0ZPTlQ+CisgICAgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzdfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NzZfMTYiPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3OF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+U291cmNlX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3OV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+U291cmNlX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4MF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4MV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+RGVzdGluYXRpb25fTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4Ml8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4M18xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+RGVzdGluYXRpb25fUmlnaHRfQ29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBQcmVmcmVzaCwgInByZWZyZXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5QcmVmcmVzaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODRfNyI+UGFkPC9BPiwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4NV83Ij5Tb3VyY2VfVG9wX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg2XzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg3XzciPkRlc3RpbmF0aW9uX1RvcF9Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4OF83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg5XzciPkRlc3RpbmF0aW9uX0JvdHRvbV9Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5MF83Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4M18xNCI+UmVmcmVzaDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk1XzE0Ij5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk2XzciPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5N183Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk4XzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5OV83Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzAwXzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwMV83Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzAyXzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDZfMTYiPlBub3V0cmVmcmVzaDwvQT48L0ZPTlQ+CisgICAgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDdfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MDZfMTYiPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwOF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+U291cmNlX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwOV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+U291cmNlX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxMF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxMV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+RGVzdGluYXRpb25fTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxMl8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxM18xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+RGVzdGluYXRpb25fUmlnaHRfQ29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBQbm91dHJlZnJlc2gsICJwbm91dHJlZnJlc2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MDZfMTYiPlBub3V0cmVmcmVzaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOTZfNyI+UGFkPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOTdfNyI+U291cmNlX1RvcF9Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOThfNyI+U291cmNlX0xlZnRfQ29sdW1uPC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk5XzciPkRlc3RpbmF0aW9uX1RvcF9Sb3c8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDBfNyI+RGVzdGluYXRpb25fTGVmdF9Db2x1bW48L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDFfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwMl83Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5NV8xNCI+UmVmcmVzaF9XaXRob3V0X1VwZGF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTI3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzA3XzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwOF83Ij5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTI5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDlfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzMV8xNiI+UGVjaG9jaGFyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzMV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUzMV8xNiI+UGFkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MzFfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MzFfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBQZWNob2NoYXIsICJwZWNob2NoYXIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MzFfMTYiPlBlY2hvY2hhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDhfNyI+UGFkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDlfNyI+Q2g8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwN18xNCI+QWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMxMl8xNCI+QWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTQxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMTNfNyI+UGFkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzE0XzciPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IENoYXJhY3RlcikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzA3XzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT4KKyAgICAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMTNfNyI+UGFkPC9BPiwKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4nKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMTRfNyI+Q2g8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzEyXzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyMl8xNCI+U2Nyb2xsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyMl8yMiI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NTNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMjNfMjIiPkFtb3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1NV8xNiI+V3Njcmw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTU1XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTU1XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1NV8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU1NV8xNiI+TjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3NjcmwsICJ3c2NybCIpOworCisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTU1XzE2Ij5Xc2NybDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMjJfMjIiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzIzXzIyIj5BbW91bnQ8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyMl8xNCI+U2Nyb2xsPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMzRfMTQiPkRlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTY1XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM0XzMyIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2N18xNiI+V2RlbGNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2N18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU2N18xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdkZWxjaCwgIndkZWxjaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU2N18xNiI+V2RlbGNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMzNF8zMiI+V2luPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMzNF8xNCI+RGVsZXRlX0NoYXJhY3RlcjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTc1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM5XzE0Ij5EZWxldGVfQ2hhcmFjdGVyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU3Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzQwXzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTc3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNDFfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM0Ml83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTgwXzE2Ij5NdndkZWxjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1ODBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1ODBfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1ODFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1ODBfMTYiPkxpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTgyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTgwXzE2Ij5Db2w8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE12d2RlbGNoLCAibXZ3ZGVsY2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1ODBfMTYiPk12d2RlbGNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM0MF83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM0MV83Ij5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzQyXzciPkNvbHVtbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM5XzE0Ij5EZWxldGVfQ2hhcmFjdGVyPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OTBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNTJfMTMiPlBlZWs8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTkwXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzUyXzE5Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU5M18xNiI+V2luY2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTkzXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTkzXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2luY2gsICJ3aW5jaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU5M18xNiI+V2luY2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzUyXzE5Ij5XaW48L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNTJfMTMiPlBlZWs8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTk5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzU4XzEzIj5QZWVrPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzU5XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM2MF83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjAyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNjFfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwNF8xNiI+TXZ3aW5jaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MDRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MDRfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwNV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwNF8xNiI+TGluPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwNl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwNF8xNiI+Q29sPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNdndpbmNoLCAibXZ3aW5jaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwNF8xNiI+TXZ3aW5jaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNTlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNjBfNyI+TGluZTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM2MV83Ij5Db2x1bW48L0E+KSkpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzU4XzEzIj5QZWVrPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjEyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzcxXzE0Ij5JbnNlcnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjEyXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzcxXzIyIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxM18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3Ml8yMiI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxNV8xNiI+V2luc2NoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxNV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxNV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MTVfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MTVfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaW5zY2gsICJ3aW5zY2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MTVfMTYiPldpbnNjaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzFfMjIiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzcyXzIyIj5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzcxXzE0Ij5JbnNlcnQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3N18xNCI+SW5zZXJ0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc3XzIyIj5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc4XzIyIj5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc5XzIyIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjI3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzODBfMjIiPkNoPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MjlfMTYiPk12d2luc2NoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyOV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyOV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYzMF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyOV8xNiI+TGluPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MjlfMTYiPkNvbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjMyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI5XzE2Ij5DaDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE12d2luc2NoLCAibXZ3aW5zY2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MjlfMTYiPk12d2luc2NoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3N18yMiI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3OF8yMiI+TGluZTwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc5XzIyIj5Db2x1bW48L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM4MF8yMiI+Q2g8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3N18xNCI+SW5zZXJ0PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjQzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzg5XzE0Ij5JbnNlcnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjQzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzg5XzIyIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY0NF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5MF8yMiI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjQ1XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzkxXzIyIj5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjQ3XzE2Ij5XaW5zbnN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDdfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDdfMTYiPlN0cjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDdfMTYiPkxlbjwvQT48L0ZPTlQ+IDogSW50ZWdlciA6PSAtMSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaW5zbnN0ciwgIndpbnNuc3RyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY1Ml83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5MF8yMiI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjUzXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzkwXzIyIj5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjUyXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NTNfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0N18xNiI+V2luc25zdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzg5XzIyIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjUyXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOTFfMjIiPkxlbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzODlfMTQiPkluc2VydDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjYxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzk4XzE0Ij5JbnNlcnQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjYyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOThfMjIiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjYzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOTlfMjIiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MDBfMjIiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMV8yMiI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjY2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MDJfMjIiPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjhfMTYiPk12d2luc25zdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjY4XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjY4XzE2Ij5XaW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjhfMTYiPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NzBfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjhfMTYiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NzFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjhfMTYiPlN0cjwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3Ml8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2OF8xNiI+TGVuPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNdndpbnNuc3RyLCAibXZ3aW5zbnN0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NzVfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MDFfMjIiPlN0cjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3Nl83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMV8yMiI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY3NV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjc2XzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjhfMTYiPk12d2luc25zdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzk4XzIyIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5OV8yMiI+TGluZTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMF8yMiI+Q29sdW1uPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NzVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MDJfMjIiPkxlbjwvQT4pKQorICAgICAgICA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzk4XzE0Ij5JbnNlcnQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTRfMTQiPlBlZWs8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjg1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE0XzIwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjg2XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE1XzIwIj5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4N18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNl8yMCI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODlfMTYiPldpbm5zdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjg5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg5XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OTBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2ODlfMTYiPlN0cjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY4OV8xNiI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaW5uc3RyLCAid2lubnN0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OTRfNyI+TjwvQT48L0ZPTlQ+ICAgOiBJbnRlZ2VyIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTZfMjAiPkxlbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OTVfNyI+VHh0PC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5Nl83Ij5DbnQ8L0E+PC9GT05UPiA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk0XzciPk48L0E+ICZsdDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5NF83Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE1XzIwIj5TdHI8L0E+J0xlbmd0aDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2OTRfNyI+TjwvQT4gJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE1XzIwIj5TdHI8L0E+J0xlbmd0aCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2OTVfNyI+VHh0PC9BPiAoMCkgOj0gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuY2hhcidGaXJzdDsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg5XzE2Ij5XaW5uc3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNF8yMCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5NV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5NF83Ij5OPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICBUb19BZGEgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2OTVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNV8yMCI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5Nl83Ij5DbnQ8L0E+LCBUcnVlKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk2XzciPkNudDwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE1XzIwIj5TdHI8L0E+J0xlbmd0aCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNV8yMCI+U3RyPC9BPiAoKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT4nRmlyc3QgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk2XzciPkNudDwvQT4pIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT4nTGFzdCkgOj0gKDxiPm90aGVyczwvYj4gPSZndDsgJyAnKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE0XzE0Ij5QZWVrPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjNfMTQiPlBlZWs8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzE1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjNfMjAiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDI0XzIwIj5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyNV8yMCI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyNl8yMCI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IFN0cmluZzsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDI3XzIwIj5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyM18yMCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyNF8yMCI+TGluZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjVfMjAiPkNvbHVtbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNF8xNCI+UGVlazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjNfMjAiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjZfMjAiPlN0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjdfMjAiPkxlbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDIzXzE0Ij5QZWVrPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzI2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM4XzE0Ij5QZWVrPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM4XzIwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOV8yMCI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5BdHRyaWJ1dGVkX1N0cmluZzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0MF8yMCI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzFfMTYiPldpbmNobnN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzFfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzMyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzMxXzE2Ij5TdHI8L0E+PC9GT05UPiA6IGNodHlwZV9hcnJheTsgICAgICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIG91dDwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzFfMTYiPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2luY2huc3RyLCAid2luY2huc3RyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczNl83Ij5OPC9BPjwvRk9OVD4gICA6IEludGVnZXIgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0MF8yMCI+TGVuPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczN183Ij5UeHQ8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiBjaHR5cGVfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOV8yMCI+U3RyPC9BPidMZW5ndGgpCisgICAgICAgICAgOj0gKDAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzlfNyI+Q250PC9BPjwvRk9OVD4gOiBOYXR1cmFsIDo9IDA7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM2XzciPk48L0E+ICZsdDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczNl83Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+J0xlbmd0aDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzZfNyI+TjwvQT4gJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+J0xlbmd0aCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzMxXzE2Ij5XaW5jaG5zdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM4XzIwIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM3XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM2XzciPk48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzUwXzExIj5UbzwvQT48L0ZPTlQ+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+JzxiPlJhbmdlPC9iPiA8Yj5sb29wPC9iPgorICAgICAgICAgPGI+ZXhpdDwvYj4gPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczN183Ij5UeHQ8L0E+IChzaXplX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzlfNyI+Q250PC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzlfMjAiPlN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NTBfMTEiPlRvPC9BPikgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczN183Ij5UeHQ8L0E+IChzaXplX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzlfNyI+Q250PC9BPikpOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczOV83Ij5DbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzlfNyI+Q250PC9BPiArIDE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzlfNyI+Q250PC9BPiAmbHQ7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzlfMjAiPlN0cjwvQT4nTGVuZ3RoIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+ICgoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOV8yMCI+U3RyPC9BPidGaXJzdCArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzlfNyI+Q250PC9BPikgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOV8yMCI+U3RyPC9BPidMYXN0KSA6PQorICAgICAgICAgICAoPGI+b3RoZXJzPC9iPiA9Jmd0OyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gPSZndDsgJyAnLAorICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT4pKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM4XzE0Ij5QZWVrPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NDdfMTQiPlBlZWs8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NDdfMjAiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQ4XzIwIj5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0OV8yMCI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ1MF8yMCI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5BdHRyaWJ1dGVkX1N0cmluZzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ1MV8yMCI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0N18yMCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0OF8yMCI+TGluZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NDlfMjAiPkNvbHVtbjwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOF8xNCI+UGVlazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NDdfMjAiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NTBfMjAiPlN0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NTFfMjAiPkxlbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQ3XzE0Ij5QZWVrPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzc1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDYzXzE0Ij5HZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzc1XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDYzXzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzZfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzdfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjVfMTkiPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzc5XzE2Ij5XZ2V0bnN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NzlfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NzlfMTYiPlN0cjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NzlfMTYiPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2dldG5zdHIsICJ3Z2V0bnN0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODRfNyI+TjwvQT48L0ZPTlQ+ICAgOiBJbnRlZ2VyIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjVfMTkiPkxlbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODVfNyI+VHh0PC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4Nl83Ij5DbnQ8L0E+PC9GT05UPiA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzg0XzciPk48L0E+ICZsdDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4NF83Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDY0XzE5Ij5TdHI8L0E+J0xlbmd0aDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODRfNyI+TjwvQT4gJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDY0XzE5Ij5TdHI8L0E+J0xlbmd0aCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODVfNyI+VHh0PC9BPiAoMCkgOj0gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuY2hhcidGaXJzdDsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzc5XzE2Ij5XZ2V0bnN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjNfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODRfNyI+TjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgVG9fQWRhICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzg1XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODZfNyI+Q250PC9BPiwgVHJ1ZSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4Nl83Ij5DbnQ8L0E+ICZsdDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NF8xOSI+U3RyPC9BPidMZW5ndGggPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4gKCg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDY0XzE5Ij5TdHI8L0E+J0ZpcnN0ICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4Nl83Ij5DbnQ8L0E+KSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDY0XzE5Ij5TdHI8L0E+J0xhc3QpIDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7ICcgJyk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2M18xNCI+R2V0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzRfMTQiPkdldDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3NF8xOSI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODA2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzVfMTkiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc2XzE5Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc3XzE5Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODA5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzhfMTkiPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc0XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc1XzE5Ij5MaW5lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3Nl8xOSI+Q29sdW1uPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDYzXzE0Ij5HZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc0XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc3XzE5Ij5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc4XzE5Ij5MZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3NF8xNCI+R2V0PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk5XzE0Ij5Jbml0X1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwMF83Ij5Gb3JtYXQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDkxXzkiPlNvZnRfTGFiZWxfS2V5X0Zvcm1hdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5MV8zNSI+VGhyZWVfVHdvX1RocmVlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxOV8xNiI+U2xrX0luaXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODE5XzE2Ij5GbXQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19Jbml0LCAic2xrX2luaXQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MTlfMTYiPlNsa19Jbml0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5MV85Ij5Tb2Z0X0xhYmVsX0tleV9Gb3JtYXQ8L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwMF83Ij5Gb3JtYXQ8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5OV8xNCI+SW5pdF9Tb2Z0X0xhYmVsX0tleXM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgyN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwNV8xNCI+U2V0X1NvZnRfTGFiZWxfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgyN18zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwNV8zNCI+TGFiZWw8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk1XzkiPkxhYmVsX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MjhfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDZfMzQiPlRleHQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODI5XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA3XzM0Ij5GbXQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTZfOSI+TGFiZWxfSnVzdGlmaWNhdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5Nl8zMyI+TGVmdDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzFfMTYiPlNsa19TZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODMxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODMxXzE2Ij5MYWJlbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MzFfMTYiPlR4dDwvQT48L0ZPTlQ+ICAgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODMzXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODMxXzE2Ij5GbXQ8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX1NldCwgInNsa19zZXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODM2XzciPlR4dDwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA2XzM0Ij5UZXh0PC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODM3XzciPkxlbjwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA2XzM0Ij5UZXh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgzNl83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODM3XzciPkxlbjwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MzFfMTYiPlNsa19TZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwNV8zNCI+TGFiZWw8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgzNl83Ij5UeHQ8L0E+LAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTZfOSI+TGFiZWxfSnVzdGlmaWNhdGlvbjwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA3XzM0Ij5GbXQ8L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDVfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTEyXzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NDhfMTYiPlNsa19SZWZyZXNoPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfUmVmcmVzaCwgInNsa19yZWZyZXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODQ4XzE2Ij5TbGtfUmVmcmVzaDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUxMl8xNCI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUxN18xNCI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU8L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODU4XzE2Ij5TbGtfTm91dHJlZnJlc2g8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19Ob3V0cmVmcmVzaCwgInNsa19ub3V0cmVmcmVzaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg1OF8xNiI+U2xrX05vdXRyZWZyZXNoPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTE3XzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTIyXzE0Ij5HZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY2XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTIyXzM0Ij5MYWJlbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTVfOSI+TGFiZWxfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg2N18zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUyM18zNCI+VGV4dDwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY5XzE2Ij5TbGtfTGFiZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODY5XzE2Ij5MYWJlbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19MYWJlbCwgInNsa19sYWJlbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NjlfMTYiPlNsa19MYWJlbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTIyXzM0Ij5MYWJlbDwvQT4pKSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUyM18zNCI+VGV4dDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTIyXzE0Ij5HZXRfU29mdF9MYWJlbF9LZXk8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTI3XzEzIj5HZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTI3XzMzIj5MYWJlbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTVfOSI+TGFiZWxfTnVtYmVyPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3N18xNiI+U2xrX0xhYmVsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3N18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg3N18xNiI+TGFiZWw8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfTGFiZWwsICJzbGtfbGFiZWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NzdfMTYiPlNsa19MYWJlbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTI3XzMzIj5MYWJlbDwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjdfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODgzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTMzXzE0Ij5DbGVhcl9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODg1XzE2Ij5TbGtfQ2xlYXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19DbGVhciwgInNsa19jbGVhciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg4NV8xNiI+U2xrX0NsZWFyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTMzXzE0Ij5DbGVhcl9Tb2Z0X0xhYmVsX0tleXM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg5M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUzOF8xNCI+UmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODk1XzE2Ij5TbGtfUmVzdG9yZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX1Jlc3RvcmUsICJzbGtfcmVzdG9yZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg5NV8xNiI+U2xrX1Jlc3RvcmU8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzhfMTQiPlJlc3RvcmVfU29mdF9MYWJlbF9LZXlzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDNfMTQiPlRvdWNoX1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MDVfMTYiPlNsa19Ub3VjaDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX1RvdWNoLCAic2xrX3RvdWNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTA1XzE2Ij5TbGtfVG91Y2g8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDNfMTQiPlRvdWNoX1NvZnRfTGFiZWxfS2V5czwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTEzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTQ4XzE0Ij5Td2l0Y2hfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0OV83Ij5BdHRyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTUwXzciPk9uPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTdfMTYiPlNsa19BdHRyb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTE3XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTE3XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0F0dHJvbiwgInNsa19hdHRyb24iKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTlfMTYiPlNsa19BdHRyb2ZmPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxOV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxOV8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19BdHRyb2ZmLCAic2xrX2F0dHJvZmYiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTIyXzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MjNfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDlfNyI+QXR0cjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NTBfNyI+T248L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTIyXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxN18xNiI+U2xrX0F0dHJvbjwvQT4gICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkyM183Ij5DaDwvQT4pKTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTIyXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxOV8xNiI+U2xrX0F0dHJvZmY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkyM183Ij5DaDwvQT4pKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MjJfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTQ4XzE0Ij5Td2l0Y2hfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTM3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTU2XzE0Ij5TZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1N183Ij5BdHRyPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MzlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1OF83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NDFfMTYiPlNsa19BdHRyc2V0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0MV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk0MV8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19BdHRyc2V0LCAic2xrX2F0dHJzZXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTQ0XzciPkNoPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1N183Ij5BdHRyPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NThfNyI+Q29sb3I8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NDFfMTYiPlNsa19BdHRyc2V0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NDRfNyI+Q2g8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1Nl8xNCI+U2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTUzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTYzXzEzIj5HZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTU1XzE2Ij5TbGtfQXR0cjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0F0dHIsICJzbGtfYXR0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NThfNyI+QXR0cjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NTVfMTYiPlNsa19BdHRyPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NThfNyI+QXR0cjwvQT4pLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NjNfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU2N18xMyI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTY1XzE2Ij5TbGtfQXR0cjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0F0dHIsICJzbGtfYXR0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NjhfNyI+QXR0cjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NjVfMTYiPlNsa19BdHRyPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk2OF83Ij5BdHRyPC9BPikuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NjdfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NzNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NzJfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NzNfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NzJfNDAiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NzVfMTYiPlNsa19Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NzVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NzVfMTYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfQ29sb3IsICJzbGtfY29sb3IiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NzVfMTYiPlNsa19Db2xvcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NzJfNDAiPlBhaXI8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU3Ml8xNCI+U2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5ODRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODZfMTQiPkVuYWJsZV9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTg0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTg2XzI2Ij5LZXk8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTg1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTg3XzI2Ij5FbmFibGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5ODdfMTYiPktleW9rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk4N18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk4N18xNiI+S2V5Y29kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTg4XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTg3XzE2Ij5Pbl9PZmY8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBLZXlvaywgImtleW9rIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTg3XzE2Ij5LZXlvazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTg2XzI2Ij5LZXk8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTg3XzI2Ij5FbmFibGU8L0E+KSkpCisgICAgICAgID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODZfMTQiPkVuYWJsZV9LZXk8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1OTZfMTQiPkRlZmluZV9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTk3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTk2XzI2Ij5EZWZpbml0aW9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk5OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5N18yNiI+S2V5PC9BPjwvRk9OVD4gICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwMF8xNiI+RGVma2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAwMF8xNiI+RGVmPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMDFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMDBfMTYiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRGVma2V5LCAiZGVmaW5lX2tleSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMDRfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1OTZfMjYiPkRlZmluaXRpb248L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMDVfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1OTZfMjYiPkRlZmluaXRpb248L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDA0XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMDVfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAwMF8xNiI+RGVma2V5PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAwNF83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5N18yNiI+S2V5PC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1OTZfMTQiPkRlZmluZV9LZXk8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjJfMTQiPlVuX0NvbnRyb2w8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDEzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjIyXzI2Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxNF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyM18yNiI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxNl8xNiI+VW5jdHJsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxNl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAxNl8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBVbmN0cmwsICJ1bmN0cmwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDE2XzE2Ij5VbmN0cmw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyMl8yNiI+Q2g8L0E+KSksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjNfMjYiPlN0cjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjIyXzE0Ij5Vbl9Db250cm9sPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyN18xMyI+VW5fQ29udHJvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMjJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjdfMjUiPkNoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyNF8xNiI+VW5jdHJsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyNF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAyNF8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBVbmN0cmwsICJ1bmN0cmwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMjRfMTYiPlVuY3RybDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjI3XzI1Ij5DaDwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjdfMTMiPlVuX0NvbnRyb2w8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAzMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzM18xNCI+RGVsYXlfT3V0cHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAzMF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzM18yOCI+TXNlY3M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBOYXR1cmFsKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDMyXzE2Ij5EZWxheW91dHB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMzJfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMzJfMTYiPk1zZWNzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEZWxheW91dHB1dCwgImRlbGF5X291dHB1dCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAzMl8xNiI+RGVsYXlvdXRwdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzM18yOCI+TXNlY3M8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzM18xNCI+RGVsYXlfT3V0cHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNDBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MzhfMTQiPkZsdXNoX0lucHV0PC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA0Ml8xNiI+Rmx1c2hpbnA8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZsdXNoaW5wLCAiZmx1c2hpbnAiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNDJfMTYiPkZsdXNoaW5wPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPiAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRvY3Ugc2F5cyB0aGF0IG5ldmVyIGhhcHBlbnMsIGJ1dC4uLjwvRU0+PC9GT05UPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjM4XzE0Ij5GbHVzaF9JbnB1dDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDUwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjQ3XzEzIj5CYXVkcmF0ZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gTmF0dXJhbAorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDUyXzE2Ij5CYXVkPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBCYXVkLCAiYmF1ZHJhdGUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDUyXzE2Ij5CYXVkPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NDdfMTMiPkJhdWRyYXRlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA1OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY1Ml8xMyI+RXJhc2VfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBDaGFyYWN0ZXIKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA2MF8xNiI+RXJhc2VjaGFyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBFcmFzZWNoYXIsICJlcmFzZWNoYXIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBDaGFyYWN0ZXInVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDYwXzE2Ij5FcmFzZWNoYXI8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY1Ml8xMyI+RXJhc2VfQ2hhcmFjdGVyPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA2Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY1N18xMyI+S2lsbF9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IENoYXJhY3RlcgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDY4XzE2Ij5LaWxsY2hhcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgS2lsbGNoYXIsICJraWxsY2hhciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IENoYXJhY3RlcidWYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNjhfMTYiPktpbGxjaGFyPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NTdfMTMiPktpbGxfQ2hhcmFjdGVyPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA3NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY2Ml8xMyI+SGFzX0luc2VydF9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA3Nl8xNiI+SGFzX0ljPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBIYXNfSWMsICJoYXNfaWMiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNzZfMTYiPkhhc19JYzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY2Ml8xMyI+SGFzX0luc2VydF9DaGFyYWN0ZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDg2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjY3XzEzIj5IYXNfSW5zZXJ0X0xpbmU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA4OF8xNiI+SGFzX0lsPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBIYXNfSWwsICJoYXNfaWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwODhfMTYiPkhhc19JbDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY2N18xMyI+SGFzX0luc2VydF9MaW5lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA5OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY3Ml8xMyI+U3VwcG9ydGVkX0F0dHJpYnV0ZXM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEwMF8xNiI+VGVybWF0dHJzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBUZXJtYXR0cnMsICJ0ZXJtYXR0cnMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTAzXzciPkNoPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEwMF8xNiI+VGVybWF0dHJzPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEwM183Ij5DaDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY3Ml8xMyI+U3VwcG9ydGVkX0F0dHJpYnV0ZXM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEwOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY3N18xNCI+TG9uZ19OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEwOF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY3N18yNSI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMTBfMTYiPkxvbmduYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTG9uZ25hbWUsICJsb25nbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMTBfMTYiPkxvbmduYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY3N18yNSI+TmFtZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjc3XzE0Ij5Mb25nX05hbWU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTE2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjgxXzEzIj5Mb25nX05hbWU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTE4XzE2Ij5Mb25nbmFtZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIExvbmduYW1lLCAibG9uZ25hbWUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMThfMTYiPkxvbmduYW1lPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2ODFfMTMiPkxvbmdfTmFtZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTI0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjg3XzE0Ij5UZXJtaW5hbF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEyNF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY4N18yOSI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMjZfMTYiPlRlcm1uYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgVGVybW5hbWUsICJ0ZXJtbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMjZfMTYiPlRlcm1uYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY4N18yOSI+TmFtZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjg3XzE0Ij5UZXJtaW5hbF9OYW1lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEzMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY5MV8xMyI+VGVybWluYWxfTmFtZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMzRfMTYiPlRlcm1uYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgVGVybW5hbWUsICJ0ZXJtbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEzNF8xNiI+VGVybW5hbWU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY5MV8xMyI+VGVybWluYWxfTmFtZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8xNCI+SW5pdF9QYWlyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8yNSI+UGFpcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwMV8xMiI+UmVkZWZpbmFibGVfQ29sb3JfUGFpcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNDFfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTNfMjUiPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0Ml8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxNF8yNSI+QmFjazwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTQ0XzE2Ij5Jbml0cGFpcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNDRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNDRfMTYiPlBhaXI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTQ1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQ0XzE2Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE0NF8xNiI+QmFjazwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJbml0cGFpciwgImluaXRfcGFpciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gSW50ZWdlciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8yNSI+UGFpcjwvQT4pICZndDs9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQyNF8xMyI+TnVtYmVyX09mX0NvbG9yX1BhaXJzPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiBJbnRlZ2VyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEzXzI1Ij5Gb3JlPC9BPikgJmd0Oz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDIxXzEzIj5OdW1iZXJfT2ZfQ29sb3JzPC9BPiA8Yj5vcjwvYj4gPGI+ZWxzZTwvYj4KKyAgICAgICAgIEludGVnZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTRfMjUiPkJhY2s8L0E+KSAmZ3Q7PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjFfMTMiPk51bWJlcl9PZl9Db2xvcnM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNDRfMTYiPkluaXRwYWlyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8yNSI+UGFpcjwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEzXzI1Ij5Gb3JlPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTRfMjUiPkJhY2s8L0E+KSkKKyAgICAgICAgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8xNCI+SW5pdF9QYWlyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTlfMTQiPlBhaXJfQ29udGVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjJfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTlfMjgiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MjBfMjgiPkZvcmU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MjFfMjgiPkJhY2s8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2Nl8xMiI+Q19TaG9ydF9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTY3XzE2Ij5QYWlyY29udGVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjdfMTYiPlBhaXI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTY4XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTY3XzE2Ij5GcDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTY2XzEyIj5DX1Nob3J0X0FjY2VzczwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTY5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTY3XzE2Ij5CcDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTY2XzEyIj5DX1Nob3J0X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUGFpcmNvbnRlbnQsICJwYWlyX2NvbnRlbnQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTcyXzciPkY8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTcyXzEwIj5CPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2N18xNiI+UGFpcmNvbnRlbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzE5XzI4Ij5QYWlyPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNzJfNyI+RjwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE3Ml8xMCI+QjwvQT4nPGI+QWNjZXNzPC9iPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcyMF8yOCI+Rm9yZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNzJfNyI+RjwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcyMV8yOCI+QmFjazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNzJfMTAiPkI8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzE5XzE0Ij5QYWlyX0NvbnRlbnQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTgyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzI2XzEzIj5IYXNfQ29sb3JzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxODRfMTYiPkhhc2NvbG9yczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSGFzY29sb3JzLCAiaGFzX2NvbG9ycyIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE4NF8xNiI+SGFzY29sb3JzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzI2XzEzIj5IYXNfQ29sb3JzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzFfMTQiPkluaXRfQ29sb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTk0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMxXzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE5NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczMl8yNiI+UmVkPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzNfMjYiPkdyZWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTk3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzM0XzI2Ij5CbHVlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTk5XzE2Ij5Jbml0Y29sb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTk5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk5XzE2Ij5Db2w8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjAwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk5XzE2Ij5SZWQ8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjAxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk5XzE2Ij5HcmVlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjAyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk5XzE2Ij5CbHVlPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJbml0Y29sb3IsICJpbml0X2NvbG9yIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk5XzE2Ij5Jbml0Y29sb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMxXzI2Ij5Db2xvcjwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMyXzI2Ij5SZWQ8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczM18yNiI+R3JlZW48L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczNF8yNiI+Qmx1ZTwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMxXzE0Ij5Jbml0X0NvbG9yPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIxMV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczOV8xMyI+Q2FuX0NoYW5nZV9Db2xvcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjEzXzE2Ij5DYW5jaGFuZ2Vjb2xvcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ2FuY2hhbmdlY29sb3IsICJjYW5fY2hhbmdlX2NvbG9yIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjEzXzE2Ij5DYW5jaGFuZ2Vjb2xvcjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczOV8xMyI+Q2FuX0NoYW5nZV9Db2xvcjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ0XzE0Ij5Db2xvcl9Db250ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIyM18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0NF8yOSI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjI0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ1XzI5Ij5SZWQ8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMjVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NDZfMjkiPkdyZWVuPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIyNl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0N18yOSI+Qmx1ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIyOF8xMiI+Q19TaG9ydF9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMzBfMTYiPkNvbG9yY29udGVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMzBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzBfMTYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMzBfNDciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzBfMTYiPlI8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjMwXzUwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjMwXzE2Ij5HPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIzMF81MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzMF8xNiI+QjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIyOF8xMiI+Q19TaG9ydF9BY2Nlc3M8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENvbG9yY29udGVudCwgImNvbG9yX2NvbnRlbnQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjM0XzciPlI8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjM0XzEwIj5HPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIzNF8xMyI+QjwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzBfMTYiPkNvbG9yY29udGVudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NDRfMjkiPkNvbG9yPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzRfNyI+UjwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzNF8xMCI+RzwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzNF8xMyI+QjwvQT4nPGI+QWNjZXNzPC9iPikgPQorICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0NV8yOSI+UmVkPC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjM0XzciPlI8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NDZfMjkiPkdyZWVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzNF8xMCI+RzwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0N18yOSI+Qmx1ZTwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjM0XzEzIj5CPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0NF8xNCI+Q29sb3JfQ29udGVudDwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjQ3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU5XzE0Ij5TYXZlX0N1cnNlc19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI0N18zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1OV8zMiI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTZfOSI+Q3Vyc2VzX01vZGU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjQ5XzE2Ij5EZWZfUHJvZ19Nb2RlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEZWZfUHJvZ19Nb2RlLCAiZGVmX3Byb2dfbW9kZSIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI1MV8xNiI+RGVmX1NoZWxsX01vZGU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERlZl9TaGVsbF9Nb2RlLCAiZGVmX3NoZWxsX21vZGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjU0XzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmNhc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTlfMzIiPk1vZGU8L0E+IDxiPmlzPC9iPgorICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1Nl8yNSI+Q3Vyc2VzPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjU0XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI0OV8xNiI+RGVmX1Byb2dfTW9kZTwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU2XzMzIj5TaGVsbDwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNTRfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjUxXzE2Ij5EZWZfU2hlbGxfTW9kZTwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmNhc2U8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNTRfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU5XzE0Ij5TYXZlX0N1cnNlc19Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NjVfMTQiPlJlc2V0X0N1cnNlc19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI2NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc2NV8zMyI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTZfOSI+Q3Vyc2VzX01vZGU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjY3XzE2Ij5SZXNldF9Qcm9nX01vZGU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFJlc2V0X1Byb2dfTW9kZSwgInJlc2V0X3Byb2dfbW9kZSIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI2OV8xNiI+UmVzZXRfU2hlbGxfTW9kZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUmVzZXRfU2hlbGxfTW9kZSwgInJlc2V0X3NoZWxsX21vZGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjcyXzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmNhc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NjVfMzMiPk1vZGU8L0E+IDxiPmlzPC9iPgorICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1Nl8yNSI+Q3Vyc2VzPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjcyXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI2N18xNiI+UmVzZXRfUHJvZ19Nb2RlPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTZfMzMiPlNoZWxsPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI3Ml83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNjlfMTYiPlJlc2V0X1NoZWxsX01vZGU8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5jYXNlPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjcyXzciPkVycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc2NV8xNCI+UmVzZXRfQ3Vyc2VzX01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI4M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc3MV8xNCI+U2F2ZV9UZXJtaW5hbF9TdGF0ZTwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyODVfMTYiPlNhdmV0dHk8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNhdmV0dHksICJzYXZldHR5Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjg1XzE2Ij5TYXZldHR5PC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzcxXzE0Ij5TYXZlX1Rlcm1pbmFsX1N0YXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyOTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NzZfMTQiPlJlc2V0X1Rlcm1pbmFsX1N0YXRlPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI5NV8xNiI+UmVzZXR0eTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUmVzZXR0eSwgInJlc2V0dHkiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyOTVfMTYiPlJlc2V0dHk8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NzZfMTQiPlJlc2V0X1Rlcm1pbmFsX1N0YXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODlfMTQiPlJpcF9PZmZfTGluZXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzAzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzg5XzI5Ij5MaW5lczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzA0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzkwXzI5Ij5Qcm9jPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODBfOSI+U3Rkc2NyX0luaXRfUHJvYzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMDZfMTYiPlJpcG9mZmxpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzA2XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzA2XzE2Ij5MaW5lczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMDdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMDZfMTYiPlByb2M8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzgwXzkiPlN0ZHNjcl9Jbml0X1Byb2M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFJpcG9mZmxpbmUsICJfbmNfcmlwb2ZmbGluZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMwNl8xNiI+Umlwb2ZmbGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzg5XzI5Ij5MaW5lczwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzkwXzI5Ij5Qcm9jPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc4OV8xNCI+UmlwX09mZl9MaW5lczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzE1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODAxXzE0Ij5TZXRfQ3Vyc29yX1Zpc2liaWxpdHk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzE1XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODAxXzM3Ij5WaXNpYmlsaXR5PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzk4XzkiPkN1cnNvcl9WaXNpYmlsaXR5PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMxN18xNiI+Q3Vyc19TZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzE3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzE3XzE2Ij5DdXJzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDdXJzX1NldCwgImN1cnNfc2V0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMyMF83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzIwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMxN18xNiI+Q3Vyc19TZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzk4XzkiPkN1cnNvcl9WaXNpYmlsaXR5PC9BPidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDFfMzciPlZpc2liaWxpdHk8L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMyMF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwMV8zNyI+VmlzaWJpbGl0eTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc5OF85Ij5DdXJzb3JfVmlzaWJpbGl0eTwvQT4nVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzIwXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDFfMTQiPlNldF9DdXJzb3JfVmlzaWJpbGl0eTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzI4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODA2XzE0Ij5OYXBfTWlsbGlfU2Vjb25kczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMjhfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDZfMzMiPk1zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gTmF0dXJhbCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMzMF8xNiI+TmFwbXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzMwXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzMwXzE2Ij5NczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTmFwbXMsICJuYXBtcyIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMzMF8xNiI+TmFwbXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwNl8zMyI+TXM8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwNl8xNCI+TmFwX01pbGxpX1NlY29uZHM8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzM5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNDFfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNDFfNyI+UmVzdWx0PC9BPiwgInN0ZHNjciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNDFfNyI+UmVzdWx0PC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzQ3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODFfMTMiPkN1cnJlbnRfV2luZG93PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0OV83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0OV83Ij5SZXN1bHQ8L0E+LCAiY3Vyc2NyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0OV83Ij5SZXN1bHQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODFfMTMiPkN1cnJlbnRfV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM1NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDEyXzEzIj5MaW5lczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM1N183Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNTdfNyI+UmVzdWx0PC9BPiwgIkxJTkVTIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzU3XzciPlJlc3VsdDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MTJfMTMiPkxpbmVzPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM2M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE1XzEzIj5Db2x1bW5zPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNjVfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzY1XzciPlJlc3VsdDwvQT4sICJDT0xTIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNjVfNyI+UmVzdWx0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxNV8xMyI+Q29sdW1uczwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNzFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxOF8xMyI+VGFiX1NpemU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IE5hdHVyYWwKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzczXzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM3M183Ij5SZXN1bHQ8L0E+LCAiVEFCU0laRSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNzNfNyI+UmVzdWx0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxOF8xMyI+VGFiX1NpemU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzc5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjFfMTMiPk51bWJlcl9PZl9Db2xvcnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IE5hdHVyYWwKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzgxXzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM4MV83Ij5SZXN1bHQ8L0E+LCAiQ09MT1JTIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM4MV83Ij5SZXN1bHQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDIxXzEzIj5OdW1iZXJfT2ZfQ29sb3JzPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM4N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDI0XzEzIj5OdW1iZXJfT2ZfQ29sb3JfUGFpcnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IE5hdHVyYWwKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzg5XzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM4OV83Ij5SZXN1bHQ8L0E+LCAiQ09MT1JfUEFJUlMiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzg5XzciPlJlc3VsdDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjRfMTMiPk51bWJlcl9PZl9Db2xvcl9QYWlyczwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzk2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE0XzE0Ij5UcmFuc2Zvcm1fQ29vcmRpbmF0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzk3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTVfNyI+VzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzOThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxNl83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzk5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTdfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MThfNyI+RGlyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxM185Ij5UcmFuc2Zvcm1fRGlyZWN0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODEzXzMzIj5Gcm9tX1NjcmVlbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQwMl8xMiI+SW50X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDAzXzE2Ij5UcmFuc2Zvcm08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDAzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDAzXzE2Ij5XPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDNfMTYiPlk8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDA0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDAzXzE2Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDAyXzEyIj5JbnRfQWNjZXNzPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDA1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDAzXzE2Ij5EaXI8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBUcmFuc2Zvcm0sICJ3bW91c2VfdHJhZm8iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDA4XzciPlg8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE3XzciPkNvbHVtbjwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDA5XzciPlk8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE2XzciPkxpbmU8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQxMF83Ij5EPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQxMV83Ij5SPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MThfNyI+RGlyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTNfNDYiPlRvX1NjcmVlbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MTBfNyI+RDwvQT4gOj0gMTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQxMV83Ij5SPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDAzXzE2Ij5UcmFuc2Zvcm08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE1XzciPlc8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDA5XzciPlk8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDhfNyI+WDwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQxMF83Ij5EPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQxMV83Ij5SPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTZfNyI+TGluZTwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwOV83Ij5ZPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE3XzciPkNvbHVtbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwOF83Ij5YPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxNF8xNCI+VHJhbnNmb3JtX0Nvb3JkaW5hdGVzPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDI1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODMxXzE0Ij5Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MjZfMTYiPkNfVXNlX0RlZmF1bHRfQ29sb3JzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDX1VzZV9EZWZhdWx0X0NvbG9ycywgInVzZV9kZWZhdWx0X2NvbG9ycyIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDI4XzciPkVycjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MjZfMTYiPkNfVXNlX0RlZmF1bHRfQ29sb3JzPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MjhfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODMxXzE0Ij5Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQzNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzNl8xNCI+QXNzdW1lX0RlZmF1bHRfQ29sb3JzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQzNV8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzNl8zNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjg1XzQiPkRlZmF1bHRfQ29sb3I8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDM2XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM3XzM3Ij5CYWNrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yODVfNCI+RGVmYXVsdF9Db2xvcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MzhfMTYiPkNfQXNzdW1lX0RlZmF1bHRfQ29sb3JzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQzOF80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQzOF8xNiI+Rm9yZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDM5XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDM4XzE2Ij5CYWNrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDX0Fzc3VtZV9EZWZhdWx0X0NvbG9ycywgImFzc3VtZV9kZWZhdWx0X2NvbG9ycyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NDJfNyI+RXJyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQzOF8xNiI+Q19Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzNl8zNyI+Rm9yZTwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM3XzM3Ij5CYWNrPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ0Ml83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MzZfMTQiPkFzc3VtZV9EZWZhdWx0X0NvbG9yczwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDUwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODQ2XzEzIj5DdXJzZXNfVmVyc2lvbjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NTJfMTYiPmN1cnNlc192ZXJzaW9uQzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIGN1cnNlc192ZXJzaW9uQywgImN1cnNlc192ZXJzaW9uIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NTRfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gY2hhcnNfcHRyIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NTJfMTYiPmN1cnNlc192ZXJzaW9uQzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDU0XzciPlJlc3VsdDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODQ2XzEzIj5DdXJzZXNfVmVyc2lvbjwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ1OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1OV8xNCI+Q3Vyc2VzX0ZyZWVfQWxsPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ2MF8xNyI+Y3Vyc2VzX2ZyZWVhbGw8L0E+PC9GT05UPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBjdXJzZXNfZnJlZWFsbCwgIl9uY19mcmVlYWxsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVXNlIHRoaXMgb25seSBmb3IgdGVzdGluZzogeW91IGNhbm5vdCB1c2UgY3Vyc2VzIGFmdGVyIGNhbGxpbmcgaXQsPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHNvIGl0IGhhcyB0byBiZSB0aGUgImxhc3QiIHRoaW5nIGRvbmUgYmVmb3JlIGV4aXRpbmcgdGhlIHByb2dyYW0uPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgd2lsbCBub3QgcmVhbGx5IGZyZWUgQUxMIG9mIG1lbW9yeSB1c2VkIGJ5IGN1cnNlcy4gIFRoYXQgaXM8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYmVjYXVzZSBpdCBjYW5ub3QgZnJlZSB0aGUgbWVtb3J5IHVzZWQgZm9yIHN0ZG91dCdzIHNldGJ1Zi4gIFRoZTwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBfbmNfZnJlZV9hbmRfZXhpdCgpIHByb2NlZHVyZSBjYW4gZG8gdGhhdCwgYnV0IGl0IGNhbiBiZSBpbnZva2VkPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHNhZmVseSBvbmx5IGZyb20gQyAtIGFuZCBhZ2FpbiwgdGhhdCBvbmx5IGFzIHRoZSAibGFzdCIgdGhpbmcgZG9uZTwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBiZWZvcmUgZXhpdGluZyB0aGUgcHJvZ3JhbS48L0VNPjwvRk9OVD4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NjBfMTciPmN1cnNlc19mcmVlYWxsPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1OV8xNCI+Q3Vyc2VzX0ZyZWVfQWxsPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NzNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NTFfMTMiPlVzZV9FeHRlbmRlZF9OYW1lczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NzNfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NTFfMzMiPkVuYWJsZTwvQT48L0ZPTlQ+IDogQm9vbGVhbikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NzVfMTYiPnVzZV9leHRlbmRlZF9uYW1lc0M8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDc1XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDc1XzE2Ij5lPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB1c2VfZXh0ZW5kZWRfbmFtZXNDLCAidXNlX2V4dGVuZGVkX25hbWVzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ3OF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PQorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ3NV8xNiI+dXNlX2V4dGVuZGVkX25hbWVzQzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1MV8zMyI+RW5hYmxlPC9BPikpKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NzhfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NTFfMTMiPlVzZV9FeHRlbmRlZF9OYW1lczwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg2N18xNCI+U2NyZWVuX0R1bXBfVG9fRmlsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0ODhfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NjdfMzUiPkZpbGVuYW1lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDkwXzE2Ij5zY3JfZHVtcDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0OTBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0OTBfMTYiPmY8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgc2NyX2R1bXAsICJzY3JfZHVtcCIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDkyXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODY3XzM1Ij5GaWxlbmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ5M183Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg2N18zNSI+RmlsZW5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDkyXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0OTNfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ5MF8xNiI+c2NyX2R1bXA8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDkyXzciPlR4dDwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NjdfMTQiPlNjcmVlbl9EdW1wX1RvX0ZpbGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3MV8xNCI+U2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwMV80MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3MV80MCI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MDNfMTYiPnNjcl9yZXN0b3JlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwM18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwM18xNiI+ZjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBzY3JfcmVzdG9yZSwgInNjcl9yZXN0b3JlIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MDVfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzFfNDAiPkZpbGVuYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTA2XzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODcxXzQwIj5GaWxlbmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MDVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwNl83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTAzXzE2Ij5zY3JfcmVzdG9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MDVfNyI+VHh0PC9BPikgIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzFfMTQiPlNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTE0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc1XzE0Ij5TY3JlZW5fSW5pdF9Gcm9tX0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTE0XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc1XzM3Ij5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUxNl8xNiI+c2NyX2luaXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTE2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE2XzE2Ij5mPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHNjcl9pbml0LCAic2NyX2luaXQiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUxOF83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3NV8zNyI+RmlsZW5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MTlfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzVfMzciPkZpbGVuYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUxOF83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE5XzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MTZfMTYiPnNjcl9pbml0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUxOF83Ij5UeHQ8L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc1XzE0Ij5TY3JlZW5fSW5pdF9Gcm9tX0ZpbGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUyN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3OV8xNCI+U2NyZWVuX1NldF9GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUyN18zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3OV8zMSI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MjlfMTYiPnNjcl9zZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTI5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTI5XzE2Ij5mPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHNjcl9zZXQsICJzY3Jfc2V0Iik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MzFfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzlfMzEiPkZpbGVuYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTMyXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc5XzMxIj5GaWxlbmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MzFfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUzMl83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTI5XzE2Ij5zY3Jfc2V0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUzMV83Ij5UeHQ8L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc5XzE0Ij5TY3JlZW5fU2V0X0ZpbGU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NDBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MTFfMTQiPlJlc2l6ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NDBfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MTFfMjIiPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU0MV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkxMl8yMiI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU0Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkxM18yMiI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KSA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NDNfMTYiPndyZXNpemU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTQzXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQzXzE2Ij53aW48L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTQ0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQzXzE2Ij5saW5lczwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU0NV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjU0M18xNiI+Y29sdW1uczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgd3Jlc2l6ZSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQzXzE2Ij53cmVzaXplPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkxMV8yMiI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTEyXzIyIj5OdW1iZXJfT2ZfTGluZXM8L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTEzXzIyIj5OdW1iZXJfT2ZfQ29sdW1uczwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTExXzE0Ij5SZXNpemU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSBiL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzExOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bQpAQCAtMCwwICsxLDE5MzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS40MSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA3LzA1LzA1IDIwOjMzOjUyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGN1cnNlcyBiaW5kaW5nLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQuIFBsZWFzZSBkb24ndCBjaGFuZ2UgaXQgbWFudWFsbHkhPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJ1biB0aGUgZ2VuZXJhdG9yIGluc3RlYWQuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7ICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBXZSBuZWVkIHRoaXMgZm9yIHNvbWUgYXNzZXJ0aW9ucy48L0VNPjwvRk9OVD4KKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwXzMzIj5DdXJzZXM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBMaW5rZXJfT3B0aW9ucyAoIi1sbmN1cnNlc3ciKTsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M180Ij5OQ19NYWpvcl9WZXJzaW9uPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gOj0gNTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBNYWpvciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzQiPk5DX01pbm9yX1ZlcnNpb248L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA6PSA2OyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE1pbm9yIHZlcnNpb24gb2YgdGhlIGxpYnJhcnk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNCI+TkNfVmVyc2lvbjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IFN0cmluZyA6PSAiNS42IjsgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBvZiBsaWJyYXJ5PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfOSI+V2luZG93PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnByaXZhdGU8L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgPGI+aXM8L2I+IDxiPm5ldzwvYj4gTmF0dXJhbDsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBsaW5lIGNvb3JkaW5hdGU8L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gTmF0dXJhbDsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBjb2x1bW4gY29vcmRpbmF0ZTwvRU0+PC9GT05UPgorCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjwvRk9OVD4gICA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gICA8Yj5yYW5nZTwvYj4gMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPidMYXN0OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUeXBlIHRvIGNvdW50IGxpbmVzLiBXZSBkbyBub3QgYWxsb3cgbnVsbCB3aW5kb3dzLCBzbyBtdXN0IGJlIHBvc2l0aXZlPC9FTT48L0ZPTlQ+CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiA8Yj5yYW5nZTwvYj4gMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+J0xhc3Q7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFR5cGUgdG8gY291bnQgY29sdW1ucy4gV2UgZG8gbm90IGFsbG93IG51bGwgd2luZG93cywgc28gbXVzdCBiZSBwb3NpdGl2ZTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzkiPktleV9Db2RlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gSW50ZWdlcjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhhdCBpcyBhbnl0aGluZyBpbmNsdWRpbmcgcmVhbCBjaGFyYWN0ZXJzLCBzcGVjaWFsIGtleXMgYW5kIGxvZ2ljYWw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmVxdWVzdCBjb2Rlcy48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBGSVhNRTogVGhlICItMSIgc2hvdWxkIGJlIEN1cnNlc19FcnI8L0VNPjwvRk9OVD4KKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjhfOSI+S2V5X0NvZGU8L0E+IDxiPnJhbmdlPC9iPiAtMSAuLiA4Izc3NyM7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgYXJlIHRoZSBjb2RlcyB0aGF0IHBvdGVudGlhbGx5IHJlcHJlc2VudCBhIHJlYWwga2V5c3Ryb2tlLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgYWxsIGNvZGVzIG1heSBiZSBwb3NzaWJsZSBvbiBhIHNwZWNpZmljIHRlcm1pbmFsLiBUbyBjaGVjayB0aGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYXZhaWxhYmlsaXR5IG9mIGEgc3BlY2lhbCBrZXksIHRoZSBIYXNfS2V5IGZ1bmN0aW9uIGlzIHByb3ZpZGVkLjwvRU0+PC9GT05UPgorCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPgorICAgICA8Yj5yYW5nZTwvYj4gOCM0MDAjIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPidMYXN0OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUeXBlIGZvciBhIGZ1bmN0aW9uLSBvciBzcGVjaWFsIGtleSBudW1iZXI8L0VNPjwvRk9OVD4KKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml8xMiI+Tm9ybWFsX0tleV9Db2RlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPiA8Yj5yYW5nZTwvYj4KKyAgICAgQ2hhcmFjdGVyJ1BvcyAoQ2hhcmFjdGVyJ0ZpcnN0KSAuLiBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInTGFzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgYXJlIHRoZSBjb2RlcyBmb3IgcmVndWxhciAoaW5jbC4gbm9uLWdyYXBoaWNhbCkgY2hhcmFjdGVycy48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBDb25zdGFudHMgZm9yIGZ1bmN0aW9uLSBhbmQgc3BlY2lhbCBrZXlzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfNCI+S2V5X05vbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDAwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfNCI+S2V5X0NvZGVfWWVzPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDAwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTBfNCI+S2V5X01pbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDAxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTFfNCI+S2V5X0JyZWFrPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDAxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTJfNCI+S2V5X0N1cnNvcl9Eb3duPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDAyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTNfNCI+S2V5X0N1cnNvcl9VcDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDAzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTRfNCI+S2V5X0N1cnNvcl9MZWZ0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDA0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfNCI+S2V5X0N1cnNvcl9SaWdodDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDA1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfNCI+S2V5X0hvbWU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDA2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfNCI+S2V5X0JhY2tzcGFjZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDA3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfNCI+S2V5X0YwPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDEwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTlfNCI+S2V5X0YxPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDExIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwXzQiPktleV9GMjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQxMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMV80Ij5LZXlfRjM8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MTMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfNCI+S2V5X0Y0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDE0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzXzQiPktleV9GNTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQxNSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF80Ij5LZXlfRjY8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MTYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDVfNCI+S2V5X0Y3PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDE3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzQiPktleV9GODwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQyMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwN180Ij5LZXlfRjk8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MjEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfNCI+S2V5X0YxMDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDIyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzQiPktleV9GMTE8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQyMyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF80Ij5LZXlfRjEyPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MjQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfNCI+S2V5X0YxMzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDI1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyXzQiPktleV9GMTQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQyNiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM180Ij5LZXlfRjE1PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MjcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTRfNCI+S2V5X0YxNjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDMwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1XzQiPktleV9GMTc8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQzMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl80Ij5LZXlfRjE4PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MzIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTdfNCI+S2V5X0YxOTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDMzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4XzQiPktleV9GMjA8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQzNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOV80Ij5LZXlfRjIxPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MzUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjBfNCI+S2V5X0YyMjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDM2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxXzQiPktleV9GMjM8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQzNyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMl80Ij5LZXlfRjI0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0NDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfNCI+S2V5X0RlbGV0ZV9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTEwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0XzQiPktleV9JbnNlcnRfTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUxMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNV80Ij5LZXlfRGVsZXRlX0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MTIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjZfNCI+S2V5X0luc2VydF9DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTEzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzQiPktleV9FeGl0X0luc2VydF9Nb2RlPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUxNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF80Ij5LZXlfQ2xlYXJfU2NyZWVuPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MTUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfNCI+S2V5X0NsZWFyX0VuZF9PZl9TY3JlZW48L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTE2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwXzQiPktleV9DbGVhcl9FbmRfT2ZfTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUxNyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMV80Ij5LZXlfU2Nyb2xsXzFfRm9yd2FyZDwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MjAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzJfNCI+S2V5X1Njcm9sbF8xX0JhY2t3YXJkPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTIxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzXzQiPktleV9OZXh0X1BhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUyMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF80Ij5LZXlfUHJldmlvdXNfUGFnZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MjMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzVfNCI+S2V5X1NldF9UYWI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTI0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2XzQiPktleV9DbGVhcl9UYWI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUyNSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzN180Ij5LZXlfQ2xlYXJfQWxsX1RhYnM8L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MjYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzhfNCI+S2V5X0VudGVyX09yX1NlbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTI3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5XzQiPktleV9Tb2Z0X1Jlc2V0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUzMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MF80Ij5LZXlfUmVzZXQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MzEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDFfNCI+S2V5X1ByaW50PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTMyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyXzQiPktleV9Cb3R0b208L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUzMyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0M180Ij5LZXlfVXBwZXJfTGVmdF9PZl9LZXlwYWQ8L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MzQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDRfNCI+S2V5X1VwcGVyX1JpZ2h0X09mX0tleXBhZDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTM1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ1XzQiPktleV9DZW50ZXJfT2ZfS2V5cGFkPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUzNiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0Nl80Ij5LZXlfTG93ZXJfTGVmdF9PZl9LZXlwYWQ8L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MzcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDdfNCI+S2V5X0xvd2VyX1JpZ2h0X09mX0tleXBhZDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTQwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4XzQiPktleV9CYWNrX1RhYjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU0MSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OV80Ij5LZXlfQmVnaW5uaW5nPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NDIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTBfNCI+S2V5X0NhbmNlbDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTQzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzQiPktleV9DbG9zZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU0NCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Ml80Ij5LZXlfQ29tbWFuZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NDUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTNfNCI+S2V5X0NvcHk8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTQ2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0XzQiPktleV9DcmVhdGU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU0NyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NV80Ij5LZXlfRW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NTAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTZfNCI+S2V5X0V4aXQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTUxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU3XzQiPktleV9GaW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU1MiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OF80Ij5LZXlfSGVscDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NTMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTlfNCI+S2V5X01hcms8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTU0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwXzQiPktleV9NZXNzYWdlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU1NSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MV80Ij5LZXlfTW92ZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NTYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjJfNCI+S2V5X05leHQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTU3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYzXzQiPktleV9PcGVuPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU2MCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NF80Ij5LZXlfT3B0aW9uczwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NjEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjVfNCI+S2V5X1ByZXZpb3VzPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTYyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2XzQiPktleV9SZWRvPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU2MyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2N180Ij5LZXlfUmVmZXJlbmNlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NjQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjhfNCI+S2V5X1JlZnJlc2g8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTY1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5XzQiPktleV9SZXBsYWNlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU2NiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MF80Ij5LZXlfUmVzdGFydDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NjcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzFfNCI+S2V5X1Jlc3VtZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTcwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzQiPktleV9TYXZlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU3MSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3M180Ij5LZXlfU2hpZnRfQmVnaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NzIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzRfNCI+S2V5X1NoaWZ0X0NhbmNlbDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTczIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1XzQiPktleV9TaGlmdF9Db21tYW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU3NCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Nl80Ij5LZXlfU2hpZnRfQ29weTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NzUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzdfNCI+S2V5X1NoaWZ0X0NyZWF0ZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTc2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4XzQiPktleV9TaGlmdF9EZWxldGVfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU3NyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OV80Ij5LZXlfU2hpZnRfRGVsZXRlX0xpbmU8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODBfNCI+S2V5X1NlbGVjdDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjAxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxXzQiPktleV9TaGlmdF9FbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYwMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Ml80Ij5LZXlfU2hpZnRfQ2xlYXJfRW5kX09mX0xpbmU8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MDMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODNfNCI+S2V5X1NoaWZ0X0V4aXQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjA0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg0XzQiPktleV9TaGlmdF9GaW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYwNSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NV80Ij5LZXlfU2hpZnRfSGVscDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MDYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODZfNCI+S2V5X1NoaWZ0X0hvbWU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjA3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3XzQiPktleV9TaGlmdF9JbnNlcnRfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYxMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4OF80Ij5LZXlfU2hpZnRfQ3Vyc29yX0xlZnQ8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MTEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODlfNCI+S2V5X1NoaWZ0X01lc3NhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjEyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkwXzQiPktleV9TaGlmdF9Nb3ZlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYxMyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MV80Ij5LZXlfU2hpZnRfTmV4dF9QYWdlPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MTQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTJfNCI+S2V5X1NoaWZ0X09wdGlvbnM8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjE1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzQiPktleV9TaGlmdF9QcmV2aW91c19QYWdlPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYxNiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF80Ij5LZXlfU2hpZnRfUHJpbnQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MTcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTVfNCI+S2V5X1NoaWZ0X1JlZG88L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjIwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2XzQiPktleV9TaGlmdF9SZXBsYWNlPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYyMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N180Ij5LZXlfU2hpZnRfQ3Vyc29yX1JpZ2h0PC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MjIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOThfNCI+S2V5X1NoaWZ0X1Jlc3VtZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjIzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk5XzQiPktleV9TaGlmdF9TYXZlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYyNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMF80Ij5LZXlfU2hpZnRfU3VzcGVuZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MjUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDFfNCI+S2V5X1NoaWZ0X1VuZG88L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjI2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyXzQiPktleV9TdXNwZW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYyNyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwM180Ij5LZXlfVW5kbzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MzAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDRfNCI+S2V5X01vdXNlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjMxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA1XzQiPktleV9SZXNpemU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYzMiM7CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA3XzQiPktleV9NYXg8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPgorICAgICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4nTGFzdDsKKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTBfMTIiPlVzZXJfS2V5X0NvZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjhfOSI+S2V5X0NvZGU8L0E+CisgICAgIDxiPnJhbmdlPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTI5KSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82OF85Ij5LZXlfQ29kZTwvQT4nTGFzdDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyByZXNlcnZlZCBmb3IgdXNlciBkZWZpbmVkIGtleSBjb2Rlcy4gVGhlIHJhbmdlIGJldHdlZW4gS2V5X01heDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBhbmQgdGhlIGZpcnN0IHVzZXIgY29kZSBpcyByZXNlcnZlZCBmb3Igc3Vic3lzdGVtcyBsaWtlIG1lbnUgYW5kIGZvcm1zLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0byB1c2UgdGhlIG9yaWdpbmFsIGtleSBuYW1lcyB3ZSBwcm9kdWNlIHRoZW0gd2VyZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGV5IGRpZmZlciBmcm9tIHRoZSBvcmlnaW5hbC4gUGxlYXNlIG5vdGUgdGhhdCB0aGV5IG1heSBkaWZmZXIgaW48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbG93ZXIvdXBwZXIgY2FzZS48L0VNPjwvRk9OVD4KKyAgIEtFWV9ET1dOICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTJfNCI+S2V5X0N1cnNvcl9Eb3duPC9BPjsKKyAgIEtFWV9VUCAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTNfNCI+S2V5X0N1cnNvcl9VcDwvQT47CisgICBLRVlfTEVGVCAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0XzQiPktleV9DdXJzb3JfTGVmdDwvQT47CisgICBLRVlfUklHSFQgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1XzQiPktleV9DdXJzb3JfUmlnaHQ8L0E+OworICAgS0VZX0RMICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjNfNCI+S2V5X0RlbGV0ZV9MaW5lPC9BPjsKKyAgIEtFWV9JTCAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0XzQiPktleV9JbnNlcnRfTGluZTwvQT47CisgICBLRVlfREMgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNV80Ij5LZXlfRGVsZXRlX0NoYXI8L0E+OworICAgS0VZX0lDICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjZfNCI+S2V5X0luc2VydF9DaGFyPC9BPjsKKyAgIEtFWV9FSUMgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3XzQiPktleV9FeGl0X0luc2VydF9Nb2RlPC9BPjsKKyAgIEtFWV9DTEVBUiAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4XzQiPktleV9DbGVhcl9TY3JlZW48L0E+OworICAgS0VZX0VPUyAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjlfNCI+S2V5X0NsZWFyX0VuZF9PZl9TY3JlZW48L0E+OworICAgS0VZX0VPTCAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzBfNCI+S2V5X0NsZWFyX0VuZF9PZl9MaW5lPC9BPjsKKyAgIEtFWV9TRiAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMxXzQiPktleV9TY3JvbGxfMV9Gb3J3YXJkPC9BPjsKKyAgIEtFWV9TUiAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyXzQiPktleV9TY3JvbGxfMV9CYWNrd2FyZDwvQT47CisgICBLRVlfTlBBR0UgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzM180Ij5LZXlfTmV4dF9QYWdlPC9BPjsKKyAgIEtFWV9QUEFHRSAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM0XzQiPktleV9QcmV2aW91c19QYWdlPC9BPjsKKyAgIEtFWV9TVEFCICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM1XzQiPktleV9TZXRfVGFiPC9BPjsKKyAgIEtFWV9DVEFCICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM2XzQiPktleV9DbGVhcl9UYWI8L0E+OworICAgS0VZX0NBVEFCICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzdfNCI+S2V5X0NsZWFyX0FsbF9UYWJzPC9BPjsKKyAgIEtFWV9FTlRFUiAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM4XzQiPktleV9FbnRlcl9Pcl9TZW5kPC9BPjsKKyAgIEtFWV9TUkVTRVQgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5XzQiPktleV9Tb2Z0X1Jlc2V0PC9BPjsKKyAgIEtFWV9MTCAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyXzQiPktleV9Cb3R0b208L0E+OworICAgS0VZX0ExICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDNfNCI+S2V5X1VwcGVyX0xlZnRfT2ZfS2V5cGFkPC9BPjsKKyAgIEtFWV9BMyAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0XzQiPktleV9VcHBlcl9SaWdodF9PZl9LZXlwYWQ8L0E+OworICAgS0VZX0IyICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDVfNCI+S2V5X0NlbnRlcl9PZl9LZXlwYWQ8L0E+OworICAgS0VZX0MxICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDZfNCI+S2V5X0xvd2VyX0xlZnRfT2ZfS2V5cGFkPC9BPjsKKyAgIEtFWV9DMyAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3XzQiPktleV9Mb3dlcl9SaWdodF9PZl9LZXlwYWQ8L0E+OworICAgS0VZX0JUQUIgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDhfNCI+S2V5X0JhY2tfVGFiPC9BPjsKKyAgIEtFWV9CRUcgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5XzQiPktleV9CZWdpbm5pbmc8L0E+OworICAgS0VZX1NCRUcgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzNfNCI+S2V5X1NoaWZ0X0JlZ2luPC9BPjsKKyAgIEtFWV9TQ0FOQ0VMICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0XzQiPktleV9TaGlmdF9DYW5jZWw8L0E+OworICAgS0VZX1NDT01NQU5EICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzVfNCI+S2V5X1NoaWZ0X0NvbW1hbmQ8L0E+OworICAgS0VZX1NDT1BZICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzZfNCI+S2V5X1NoaWZ0X0NvcHk8L0E+OworICAgS0VZX1NDUkVBVEUgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzdfNCI+S2V5X1NoaWZ0X0NyZWF0ZTwvQT47CisgICBLRVlfU0RDICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3OF80Ij5LZXlfU2hpZnRfRGVsZXRlX0NoYXI8L0E+OworICAgS0VZX1NETCAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzlfNCI+S2V5X1NoaWZ0X0RlbGV0ZV9MaW5lPC9BPjsKKyAgIEtFWV9TRU5EICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxXzQiPktleV9TaGlmdF9FbmQ8L0E+OworICAgS0VZX1NFT0wgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODJfNCI+S2V5X1NoaWZ0X0NsZWFyX0VuZF9PZl9MaW5lPC9BPjsKKyAgIEtFWV9TRVhJVCAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzXzQiPktleV9TaGlmdF9FeGl0PC9BPjsKKyAgIEtFWV9TRklORCAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg0XzQiPktleV9TaGlmdF9GaW5kPC9BPjsKKyAgIEtFWV9TSEVMUCAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1XzQiPktleV9TaGlmdF9IZWxwPC9BPjsKKyAgIEtFWV9TSE9NRSAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg2XzQiPktleV9TaGlmdF9Ib21lPC9BPjsKKyAgIEtFWV9TSUMgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3XzQiPktleV9TaGlmdF9JbnNlcnRfQ2hhcjwvQT47CisgICBLRVlfU0xFRlQgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4OF80Ij5LZXlfU2hpZnRfQ3Vyc29yX0xlZnQ8L0E+OworICAgS0VZX1NNRVNTQUdFICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODlfNCI+S2V5X1NoaWZ0X01lc3NhZ2U8L0E+OworICAgS0VZX1NNT1ZFICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTBfNCI+S2V5X1NoaWZ0X01vdmU8L0E+OworICAgS0VZX1NORVhUICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTFfNCI+S2V5X1NoaWZ0X05leHRfUGFnZTwvQT47CisgICBLRVlfU09QVElPTlMgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5Ml80Ij5LZXlfU2hpZnRfT3B0aW9uczwvQT47CisgICBLRVlfU1BSRVZJT1VTICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5M180Ij5LZXlfU2hpZnRfUHJldmlvdXNfUGFnZTwvQT47CisgICBLRVlfU1BSSU5UICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5NF80Ij5LZXlfU2hpZnRfUHJpbnQ8L0E+OworICAgS0VZX1NSRURPICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTVfNCI+S2V5X1NoaWZ0X1JlZG88L0E+OworICAgS0VZX1NSRVBMQUNFICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTZfNCI+S2V5X1NoaWZ0X1JlcGxhY2U8L0E+OworICAgS0VZX1NSSUdIVCAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTdfNCI+S2V5X1NoaWZ0X0N1cnNvcl9SaWdodDwvQT47CisgICBLRVlfU1JTVU1FICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5OF80Ij5LZXlfU2hpZnRfUmVzdW1lPC9BPjsKKyAgIEtFWV9TU0FWRSAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTk5XzQiPktleV9TaGlmdF9TYXZlPC9BPjsKKyAgIEtFWV9TU1VTUEVORCAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjAwXzQiPktleV9TaGlmdF9TdXNwZW5kPC9BPjsKKyAgIEtFWV9TVU5ETyAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjAxXzQiPktleV9TaGlmdF9VbmRvPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cmFuZ2U8L2I+IC0xIC4uIEludGVnZXIgKDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnNob3J0J0xhc3QpOworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPidTaXplIDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQnU2l6ZTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKG4pY3Vyc2VzIHVzZXMgYSBzaG9ydCBmb3IgdGhlIGNvbG9yIGluZGV4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBtb2RlbCBpcywgdGhhdCBhIENvbG9yX051bWJlciBpcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIChwb3RlbnRpYWxseSkgZGVmaW5hYmxlIGNvbG9ycy4gU29tZSBvZiB0aG9zZSBpbmRpY2VzIGFyZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmVkZWZpbmVkIChzZWUgYmVsb3cpLCBhbHRob3VnaCB0aGV5IG1heSBub3QgcmVhbGx5IGV4aXN0LjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4NV80Ij5EZWZhdWx0X0NvbG9yPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gLTE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4Nl80Ij5CbGFjazwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gMDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg3XzQiPlJlZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSAxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODhfNCI+R3JlZW48L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4OV80Ij5ZZWxsb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gMzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkwXzQiPkJsdWU8L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTFfNCI+TWFnZW50YTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5Ml80Ij5DeWFuPC9BPjwvRk9OVD4gICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gNjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkzXzQiPldoaXRlPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA3OworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cmFuZ2U8L2I+IDAgLi4gSW50ZWdlciAoPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQnTGFzdCk7CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+J1NpemUgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5zaG9ydCdTaXplOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTb21lIHN5c3RlbSBtYXkgYWxsb3cgdG8gcmVkZWZpbmUgYSBjb2xvciBieSBzZXR0aW5nIFJHQiB2YWx1ZXMuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cmFuZ2U8L2I+IDAgLi4gMjU1OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nU2l6ZSA8Yj51c2U8L2I+IDg7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMV8xMiI+UmVkZWZpbmFibGVfQ29sb3JfUGFpcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gPGI+cmFuZ2U8L2I+IDEgLi4gMjU1OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAobiljdXJzZXMgcmVzZXJ2ZXMgMSBCeXRlIGZvciB0aGUgY29sb3ItcGFpciBudW1iZXIuIENvbG9yIFBhaXIgMDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpcyBmaXhlZCAoQmxhY2sgJmFtcDsgV2hpdGUpLiBBIGNvbG9yIHBhaXIgaXMgc2ltcGx5IGEgY29tYmluYXRpb24gb2Y8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdHdvIGNvbG9ycyBkZXNjcmliZWQgYnkgQ29sb3JfTnVtYmVycywgb25lIGZvciB0aGUgZm9yZWdyb3VuZCBhbmQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIG90aGVyIGZvciB0aGUgYmFja2dyb3VuZDwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDlfMTAiPlN0YW5kX091dDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTBfMTAiPlVuZGVyX0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTFfMTAiPlJldmVyc2VfVmlkZW88L0E+PC9GT05UPiAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTJfMTAiPkJsaW5rPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTNfMTAiPkRpbV9DaGFyYWN0ZXI8L0E+PC9GT05UPiAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTRfMTAiPkJvbGRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTVfMTAiPkFsdGVybmF0ZV9DaGFyYWN0ZXJfU2V0PC9BPjwvRk9OVD4gOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTZfMTAiPkludmlzaWJsZV9DaGFyYWN0ZXI8L0E+PC9GT05UPiAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTdfMTAiPlByb3RlY3RlZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMThfMTAiPkhvcml6b250YWw8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTlfMTAiPkxlZnQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjBfMTAiPkxvdzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjFfMTAiPlJpZ2h0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjJfMTAiPlRvcDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjNfMTAiPlZlcnRpY2FsPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDxiPnVzZTwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwOV8xMCI+U3RhbmRfT3V0PC9BPiAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMCAuLiAgMDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxMF8xMCI+VW5kZXJfTGluZTwvQT4gICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMSAuLiAgMTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxMV8xMCI+UmV2ZXJzZV9WaWRlbzwvQT4gICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMiAuLiAgMjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxMl8xMCI+Qmxpbms8L0E+ICAgICAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMyAuLiAgMzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxM18xMCI+RGltX0NoYXJhY3RlcjwvQT4gICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNCAuLiAgNDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxNF8xMCI+Qm9sZF9DaGFyYWN0ZXI8L0E+ICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNSAuLiAgNTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxNV8xMCI+QWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQ8L0E+IDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNiAuLiAgNjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxNl8xMCI+SW52aXNpYmxlX0NoYXJhY3RlcjwvQT4gICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNyAuLiAgNzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxN18xMCI+UHJvdGVjdGVkX0NoYXJhY3RlcjwvQT4gICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgOCAuLiAgODsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxOF8xMCI+SG9yaXpvbnRhbDwvQT4gICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgOSAuLiAgOTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMxOV8xMCI+TGVmdDwvQT4gICAgICAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxMCAuLiAxMDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMyMF8xMCI+TG93PC9BPiAgICAgICAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxMSAuLiAxMTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMyMV8xMCI+UmlnaHQ8L0E+ICAgICAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxMiAuLiAxMjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMyMl8xMCI+VG9wPC9BPiAgICAgICAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxMyAuLiAxMzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMyM18xMCI+VmVydGljYWw8L0E+ICAgICAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxNCAuLiAxNDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPidTaXplIDxiPnVzZTwvYj4gMTY7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIChuKWN1cnNlcyB1c2VzIGFsbCBidXQgdGhlIGxvd2VzdCAxNiBCaXRzIGZvciBBdHRyaWJ1dGVzLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7IEZhbHNlKTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU0XzEwIj5BdHRyPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU1XzEwIj5Db2xvcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTZfMTAiPkNoPC9BPjwvRk9OVD4gICAgOiBDaGFyYWN0ZXI7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBjb3VudGVycGFydCBmb3IgdGhlIGNodHlwZSBpbiBDLjwvRU0+PC9GT05UPgorCisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICA3OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA4IC4uIDE1OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDE2IC4uIDMxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+J1NpemUgPGI+dXNlPC9iPiAzMjsKKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+CisgICAgIDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsCisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyAoPGI+b3RoZXJzPC9iPiA9Jmd0OyBGYWxzZSkpOyAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmVlbGFib3JhdGFibGUgTm9ybWFsX1ZpZGVvPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IEF0dHJpYnV0ZWRfU3RyaW5nIDxiPmlzPC9iPiA8Yj5hcnJheTwvYj4gKFBvc2l0aXZlIDxiPnJhbmdlPC9iPiAmbHQ7Jmd0OykgPGI+b2Y8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICA8Yj5wcmFnbWE8L2I+IFBhY2sgKEF0dHJpYnV0ZWRfU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW4gdGhpcyBiaW5kaW5nIHdlIGFsbG93IHN0cmluZ3Mgb2YgYXR0cmlidXRlZCBjaGFyYWN0ZXJzLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV4Y2VwdGlvbnMgIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjwvRk9OVD4gICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg0XzQiPldyb25nX0N1cnNlc19WZXJzaW9uPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRob3NlIGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCBieSB0aGUgRVRJIChFeHRlbmRlZCBUZXJtaW5hbCBJbnRlcmZhY2UpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHN1YnBhY2tldHMgZm9yIE1lbnUgYW5kIEZvcm1zIGhhbmRsaW5nLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4OV80Ij5FdGlfU3lzdGVtX0Vycm9yPC9BPjwvRk9OVD4gICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTBfNCI+RXRpX0JhZF9Bcmd1bWVudDwvQT48L0ZPTlQ+ICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzkxXzQiPkV0aV9Qb3N0ZWQ8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5Ml80Ij5FdGlfQ29ubmVjdGVkPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTNfNCI+RXRpX0JhZF9TdGF0ZTwvQT48L0ZPTlQ+ICAgICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk0XzQiPkV0aV9Ob19Sb29tPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5NV80Ij5FdGlfTm90X1Bvc3RlZDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTZfNCI+RXRpX1Vua25vd25fQ29tbWFuZDwvQT48L0ZPTlQ+IDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk3XzQiPkV0aV9Ob19NYXRjaDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5OF80Ij5FdGlfTm90X1NlbGVjdGFibGU8L0E+PC9GT05UPiAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTlfNCI+RXRpX05vdF9Db25uZWN0ZWQ8L0E+PC9GT05UPiAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAwXzQiPkV0aV9SZXF1ZXN0X0RlbmllZDwvQT48L0ZPTlQ+ICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwMV80Ij5FdGlfSW52YWxpZF9GaWVsZDwvQT48L0ZPTlQ+ICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDJfNCI+RXRpX0N1cnJlbnQ8L0E+PC9GT05UPiAgICAgICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV4dGVybmFsIEMgdmFyaWFibGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIENvbmNlcHR1YWxseSBldmVuIGluIEMgdGhpcyBhcmUga2luZCBvZiBjb25zdGFudHMsIGJ1dCB0aGV5IGFyZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbml0aWFsaXplZCBhbmQgc29tZXRpbWVzIGNoYW5nZWQgYnkgdGhlIGxpYnJhcnkgcm91dGluZXMgYXQgcnVudGltZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGVybWluYWwuIEkgYmVsaWV2ZSB0aGUgYmVzdCB3YXkgdG8gbW9kZWw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhpcyBpcyB0byB1c2UgZnVuY3Rpb25zLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM1NV8xMyI+TGluZXM8L0E+PC9GT05UPiAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxMl8xMyI+TGluZXM8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzYzXzEzIj5Db2x1bW5zPC9BPjwvRk9OVD4gICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MTVfMTMiPkNvbHVtbnM8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzcxXzEzIj5UYWJfU2l6ZTwvQT48L0ZPTlQ+ICAgICAgICAgPGI+cmV0dXJuPC9iPiBOYXR1cmFsOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxOF8xMyI+VGFiX1NpemU8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDIxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzc5XzEzIj5OdW1iZXJfT2ZfQ29sb3JzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBOYXR1cmFsOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQyMV8xMyI+TnVtYmVyX09mX0NvbG9yczwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzODdfMTMiPk51bWJlcl9PZl9Db2xvcl9QYWlyczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gTmF0dXJhbDsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjRfMTMiPk51bWJlcl9PZl9Db2xvcl9QYWlyczwvQT4pOworCisgICA8Yj50eXBlPC9iPiBDX0FDU19NYXAgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoQ2hhcmFjdGVyJ1ZhbCAoMCkgLi4gQ2hhcmFjdGVyJ1ZhbCAoMTI3KSkKKyAgICAgICAgPGI+b2Y8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyOV80Ij5BQ1NfTWFwPC9BPjwvRk9OVD4gOiBDX0FDU19NYXA7CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDI5XzQiPkFDU19NYXA8L0E+LCAiYWNzX21hcCIpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQ29uc3RhbnRzIGZvciBzZXZlcmFsIGNoYXJhY3RlcnMgZnJvbSB0aGUgQWx0ZXJuYXRlIENoYXJhY3RlciBTZXQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgWW91IG11c3QgdXNlIHRoZXNlIGNvbnN0YW50cyBhcyBpbmRpY2VzIGludG8gdGhlIEFDU19NYXAgYXJyYXk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZWQgY2hhcmFjdGVyIGF0IHJ1bnRpbWUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM3XzQiPkFDU19VcHBlcl9MZWZ0X0Nvcm5lcjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnbCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzOF80Ij5BQ1NfTG93ZXJfTGVmdF9Db3JuZXI8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ20nOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzlfNCI+QUNTX1VwcGVyX1JpZ2h0X0Nvcm5lcjwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdrJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQwXzQiPkFDU19Mb3dlcl9SaWdodF9Db3JuZXI8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnaic7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0MV80Ij5BQ1NfTGVmdF9UZWU8L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3QnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDJfNCI+QUNTX1JpZ2h0X1RlZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd1JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQzXzQiPkFDU19Cb3R0b21fVGVlPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAndic7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NF80Ij5BQ1NfVG9wX1RlZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3cnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDVfNCI+QUNTX0hvcml6b250YWxfTGluZTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdxJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ2XzQiPkFDU19WZXJ0aWNhbF9MaW5lPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAneCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0N180Ij5BQ1NfUGx1c19TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ24nOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDhfNCI+QUNTX1NjYW5fTGluZV8xPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdvJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ5XzQiPkFDU19TY2FuX0xpbmVfOTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAncyc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1MF80Ij5BQ1NfRGlhbW9uZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gQ2hhcmFjdGVyJ1ZhbCAoOTYpOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTFfNCI+QUNTX0NoZWNrZXJfQm9hcmQ8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdhJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUyXzQiPkFDU19EZWdyZWU8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnZic7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1M180Ij5BQ1NfUGx1c19NaW51czwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ2cnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTRfNCI+QUNTX0J1bGxldDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd+JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU1XzQiPkFDU19MZWZ0X0Fycm93PC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnLCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1Nl80Ij5BQ1NfUmlnaHRfQXJyb3c8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJysnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTdfNCI+QUNTX0Rvd25fQXJyb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICcuJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU4XzQiPkFDU19VcF9BcnJvdzwvQT48L0ZPTlQ+ICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnLSc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1OV80Ij5BQ1NfQm9hcmRfT2ZfU3F1YXJlczwvQT48L0ZPTlQ+ICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ2gnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjBfNCI+QUNTX0xhbnRlcm48L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdpJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDYxXzQiPkFDU19Tb2xpZF9CbG9jazwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnMCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2Ml80Ij5BQ1NfU2Nhbl9MaW5lXzM8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3AnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjNfNCI+QUNTX1NjYW5fTGluZV83PC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdyJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY0XzQiPkFDU19MZXNzX09yX0VxdWFsPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAneSc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2NV80Ij5BQ1NfR3JlYXRlcl9Pcl9FcXVhbDwvQT48L0ZPTlQ+ICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3onOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjZfNCI+QUNTX1BJPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd7JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY3XzQiPkFDU19Ob3RfRXF1YWw8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnfCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2OF80Ij5BQ1NfU3Rlcmxpbmc8L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ30nOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE5vdCBpbXBsZW1lbnRlZDogbmV3dGVybSwgc2V0X3Rlcm0sIGRlbHNjcmVlbjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMzOV8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+c3Rkc2NyPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDgxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzQ3XzEzIj5DdXJyZW50X1dpbmRvdzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNjcjwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODFfMTMiPkN1cnJlbnRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOThfMTQiPkluaXRfU2NyZWVuPC9BPjwvRk9OVD47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4OV8xNCI+SW5pdF9XaW5kb3dzPC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDg2XzE0Ij5Jbml0X1NjcmVlbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5pbml0c2NyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDg2XzE0Ij5Jbml0X1NjcmVlbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChJbml0X1dpbmRvd3MpOzwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMV8xNCI+RW5kX1dpbmRvd3M8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmVuZHdpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5N18xNCI+RW5kX1NjcmVlbjwvQT48L0ZPTlQ+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5NV8xNCI+RW5kX1dpbmRvd3M8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5NV8xNCI+RW5kX1dpbmRvd3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJhZ21hIElubGluZSAoRW5kX1NjcmVlbik7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjFfMTMiPklzX0VuZF9XaW5kb3c8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5pc2VuZHdpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUwMl8xMyI+SXNfRW5kX1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3ZlLjN4Lmh0bWwiPmN1cnNfbW92ZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzM18xNCI+TW92ZV9DdXJzb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzM18yNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTEyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzRfMjciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxM18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM1XzI3Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3ZlLjN4Lmh0bWwiPndtb3ZlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbW92ZSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTExXzE0Ij5Nb3ZlX0N1cnNvcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ4XzE0Ij5BZGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjNfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0OF8xOSI+V2luPC9BPjwvRk9OVD4gOiAgPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjRfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0OV8xOSI+Q2g8L0E+PC9GT05UPiAgOiAgPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwiPndhZGRjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGFkZGNoKCk8L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwXzE0Ij5BZGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjhfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MF8xOSI+V2luPC9BPjwvRk9OVD4gOiAgPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MV8xOSI+Q2g8L0E+PC9GT05UPiAgOiAgPGI+aW48L2I+IENoYXJhY3Rlcik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFkZCBhIHNpbmdsZSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQgbG9naWNhbCBjdXJzb3IgcG9zaXRpb24gdG88L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIHdpbmRvdy4gVXNlIHRoZSBjdXJyZW50IHdpbmRvd3MgYXR0cmlidXRlcy48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzBfMTQiPkFkZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzFfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzJfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzNfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NF83Ij5DaDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaC4zeC5odG1sIj5tdndhZGRjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12YWRkY2goKTwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODlfMTQiPkFkZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTBfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTFfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTJfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5M183Ij5DaDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBNb3ZlIHRvIHRoZSBwb3NpdGlvbiBhbmQgYWRkIGEgc2luZ2xlIGNoYXJhY3RlciBpbnRvIHRoZSB3aW5kb3c8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlcmUgYXJlIG1vcmUgQWRkIHJvdXRpbmVzLCBzbyB0aGUgSW5saW5lIHByYWdtYSBmb2xsb3dzIGxhdGVyPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNF8xNCI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG88L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA1XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA2XzciPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwiPndlY2hvY2hhcigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGVjaG9jaGFyKCk8L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE3XzE0Ij5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMThfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTlfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQWRkIGEgY2hhcmFjdGVyIGFuZCBkbyBhbiBpbW1lZGlhdGUgcmVmcmVzaCBvZiB0aGUgc2NyZWVuLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDogd2N1cnN5bmN1cDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyOV8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTcwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyOV8yMSI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzBfMjEiPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzFfMjEiPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzJfMjEiPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgSW1wbGVtZW50ZWQ6IERlZmF1bHQgTnVtYmVyX09mX0xpbmVzLCBOdW1iZXJfT2ZfQ29sdW1uczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgQyB2ZXJzaW9uIGxldHMgdGhlbSBiZSAwLCBzZWUgdGhlIG1hbiBwYWdlLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5uZXd3aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NjlfMTMiPkNyZWF0ZTwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gTmV3X1dpbmRvdworICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODBfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4MV83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODJfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgzXzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICAgIDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU2OV8xMyI+Q3JlYXRlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJhZ21hIElubGluZSAoTmV3X1dpbmRvdyk7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1Ml8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg4XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTJfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmRlbHdpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZXNldCBXaW4gdG8gTnVsbF9XaW5kb3c8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81ODhfMTQiPkRlbGV0ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI2M18xMyI+U3ViX1dpbmRvdzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNjRfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI2NV83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI2Nl83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjY3XzciPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNjhfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPnN1YndpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5NF8xMyI+U3ViX1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5MV8xMyI+RGVyaXZlZF9XaW5kb3c8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjkyXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOTNfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOTRfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5NV83Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk2XzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5kZXJ3aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDRfMTMiPkRlcml2ZWRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzE5XzEzIj5EdXBsaWNhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMxOV8yNCI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmR1cHdpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxNF8xMyI+RHVwbGljYXRlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzMl8xNCI+TW92ZV9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzMl8yNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjBfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzM18yNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjIxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMzRfMjciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5tdndpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxOV8xNCI+TW92ZV9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzQ2XzE0Ij5Nb3ZlX0Rlcml2ZWRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI2XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNDZfMzUiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjdfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM0N18zNSI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjhfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM0OF8zNSI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPm12ZGVyd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjI2XzE0Ij5Nb3ZlX0Rlcml2ZWRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzNfMTQiPlN5bmNocm9uaXplX1Vwd2FyZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzNfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzM18xNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPndzeW5jdXAoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTeW5jaHJvbml6ZV9VcHdhcmRzLCAid3N5bmN1cCIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM4XzE0Ij5TeW5jaHJvbml6ZV9Eb3dud2FyZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzhfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzOF8xNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPndzeW5jZG93bigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFN5bmNocm9uaXplX0Rvd253YXJkcywgIndzeW5jZG93biIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNjBfMTQiPlNldF9TeW5jaF9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNjBfMzAiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM2MV8zMCI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5zeW5jb2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDNfMTQiPlNldF9TeW5jaF9Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjUzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzJfMTQiPkFkZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1M18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzcyXzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU0XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzNfMTkiPlN0cjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU1XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzRfMTkiPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sIj53YWRkbnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdhZGRzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGFkZG5zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGFkZHN0cigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM5MF8xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYyXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zOTFfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2M18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzkyXzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjRfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM5M183Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjVfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM5NF83Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2Nl8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzk1XzciPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sIj5tdndhZGRuc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZ3YWRkc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmFkZG5zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12YWRkc3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MDJfMTQiPkFkZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3N18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDAzXzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzhfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwNF83Ij5TdHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc5XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MDVfNyI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbCI+d2FkZGNobnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdhZGRjaHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYWRkY2huc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBhZGRjaHN0cigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQyNV8xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjg2XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MjZfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4N18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDI3XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODhfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQyOF83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQyOV83Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjkwXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MzBfNyI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbCI+bXZ3YWRkY2huc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZ3YWRkY2hzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12YWRkY2huc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmFkZGNoc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChBZGQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBOb3QgaW1wbGVtZW50ZWQ6IG12aGxpbmUsICBtdndobGluZSwgbXZ2bGluZSwgbXZ3dmxpbmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCB1c2UgTW92ZV9DdXJzb3IgdGhlbiBIb3Jpem9udGFsX0xpbmUgb3IgVmVydGljYWxfTGluZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MzdfMTQiPkJvcmRlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MzhfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDM5XzciPkxlZnRfU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDBfNyI+UmlnaHRfU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0MV83Ij5Ub3BfU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQyXzciPkJvdHRvbV9TaWRlX1N5bWJvbDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDNfNyI+VXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzExXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0NF83Ij5VcHBlcl9SaWdodF9Db3JuZXJfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ1XzciPkxvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDZfNyI+TG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPgorICAgICApOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIj53Ym9yZGVyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYm9yZGVyKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDRfMTQiPkJvcmRlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NzRfMTQiPkJveDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NzVfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ3Nl83Ij5WZXJ0aWNhbF9TeW1ib2w8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ3N183Ij5Ib3Jpem9udGFsX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPmJveCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyMF8xNCI+Qm94PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ4NV8xNCI+SG9yaXpvbnRhbF9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzI5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ4Nl83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDg3XzciPkxpbmVfU2l6ZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gTmF0dXJhbDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzMxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ4OF83Ij5MaW5lX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPndobGluZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGhsaW5lKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjhfMTQiPkhvcml6b250YWxfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDJfMTQiPlZlcnRpY2FsX0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTAzXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDRfNyI+TGluZV9TaXplPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiBOYXR1cmFsOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTA1XzciPkxpbmVfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbCI+d3ZsaW5lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdmxpbmUoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczN18xNCI+VmVydGljYWxfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogbXZnZXRjaCwgbXZ3Z2V0Y2g8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzUxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MjBfMTMiPkdldF9LZXlzdHJva2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyMF8yOCI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwiPndnZXRjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGdldGNoKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgR2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIGtleWJvYXJkIGFuZCBlY2hvIGl0IC0gaWYgZW5hYmxlZCAtIHRvIHRoZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB3aW5kb3cuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIElmIGZvciBhbnkgcmVhc29uIChpLmUuIGEgdGltZW91dCkgd2UgY291bGRuJ3QgZ2V0IGEgY2hhcmFjdGVyIHRoZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZXR1cm5lZCBrZXljb2RlIGlzIEtleV9Ob25lLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc1MV8xMyI+R2V0X0tleXN0cm9rZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzYyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MzVfMTQiPlVuZG9fS2V5c3Ryb2tlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzYyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MzVfMzAiPktleTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0Y2guM3guaHRtbCI+dW5nZXRjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2Ml8xNCI+VW5kb19LZXlzdHJva2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NDVfMTMiPkhhc19LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjdfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU0NV8yMiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRjaC4zeC5odG1sIj5oYXNfa2V5KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzY3XzEzIj5IYXNfS2V5PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IFNvbWUgaGVscGVyIGZ1bmN0aW9uczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU1N18xMyI+SXNfRnVuY3Rpb25fS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzc0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NTdfMzAiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJldHVybiBUcnVlIGlmIHRoZSBLZXkgaXMgYSBmdW5jdGlvbiBrZXkgKGkuZS4gb25lIG9mIEYwIC4uIEY2Myk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NzRfMTMiPklzX0Z1bmN0aW9uX0tleTwvQT4pOworCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3OF8xMiI+RnVuY3Rpb25fS2V5X051bWJlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiBJbnRlZ2VyIDxiPnJhbmdlPC9iPiAwIC4uIDYzOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAobiljdXJzZXMgYWxsb3dzIGZvciA2NCBmdW5jdGlvbiBrZXlzLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU2OV8xMyI+RnVuY3Rpb25fS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzgxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NjlfMjciPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3OF8xMiI+RnVuY3Rpb25fS2V5X051bWJlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbiBrZXkuIElmIHRoZSBjb2RlIGlzIG5vdCBhPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGZ1bmN0aW9uIGtleSwgYSBDT05TVFJBSU5UX0VSUk9SIHdpbGwgYmUgcmFpc2VkLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8xMyI+RnVuY3Rpb25fS2V5PC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Nl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTgwXzEzIj5GdW5jdGlvbl9LZXlfQ29kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Nl8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTgwXzMyIj5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3OF8xMiI+RnVuY3Rpb25fS2V5X051bWJlcjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZXR1cm4gdGhlIGtleSBjb2RlIGZvciBhIGdpdmVuIGZ1bmN0aW9uLWtleSBudW1iZXIuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzg2XzEzIj5GdW5jdGlvbl9LZXlfQ29kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE5vdCBpbXBsZW1lbnRlZCBhdHRyX29mZiwgIHdhdHRyX29mZiw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCAgYXR0cl9vbiwgd2F0dHJfb24sIGF0dHJfc2V0LCB3YXR0cl9zZXQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQQUlSX05VTUJFUjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQQUlSX05VTUJFUihjKSBpcyB0aGUgc2FtZSBhcyBjLkNvbG9yPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU4Nl8xNCI+U3RhbmRvdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU4Nl8yNCI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODAxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81ODdfMjQiPk9uPC9BPjwvRk9OVD4gIDogQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB3c3RhbmRvdXQoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdzdGFuZGVuZCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYwNl8xNCI+U3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjA3XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYwOF83Ij5BdHRyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYwOV83Ij5PbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpZiBGYWxzZSB3ZSBzd2l0Y2ggT2ZmLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTd2l0Y2hlcyB0aG9zZSBBdHRyaWJ1dGVzIHNldCB0byB0cnVlIGluIHRoZSBsaXN0LjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+d2F0dHJvbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdhdHRyb2ZmKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBhdHRyb24oKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGF0dHJvZmYoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MzRfMTQiPlNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MzVfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzNl83Ij5BdHRyPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MzdfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPndhdHRyc2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYXR0cnNldCgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODE3XzE0Ij5TZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NTJfMTMiPkdldF9DaGFyYWN0ZXJfQXR0cmlidXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY1Ml8zOCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPndhdHRyX2dldCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGF0dHJfZ2V0KCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODMyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NzVfMTMiPkdldF9DaGFyYWN0ZXJfQXR0cmlidXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODMzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3NV8zOCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+d2F0dHJfZ2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODM4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82OThfMTQiPlNldF9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzOF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjk4XzI1Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzOV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjk5XzI1Ij5QYWlyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPndjb2xvcl9zZXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBjb2xvcl9zZXQoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzOF8xNCI+U2V0X0NvbG9yPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxM18xNCI+Q2hhbmdlX0F0dHJpYnV0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE0XzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTVfNyI+Q291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE2XzciPkF0dHI8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxN183Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+d2NoZ2F0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogY2hnYXQoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MzZfMTQiPkNoYW5nZV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzczN183Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzczOF83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPidGaXJzdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzczOV83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4nRmlyc3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NDBfNyI+Q291bnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc0MV83Ij5BdHRyPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzQyXzciPkNvbG9yPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+bXZ3Y2hnYXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmNoZ2F0KCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChDaGFuZ2VfQXR0cmlidXRlcyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JlZXAuM3guaHRtbCI+Y3Vyc19iZWVwLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc0OV8xNCI+QmVlcDwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JlZXAuM3guaHRtbCI+YmVlcCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg3MF8xNCI+QmVlcDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODc1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NTlfMTQiPkZsYXNoX1NjcmVlbjwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JlZXAuM3guaHRtbCI+Zmxhc2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzVfMTQiPkZsYXNoX1NjcmVlbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE5vdCBpbXBsZW1lbnRlZCA6IHR5cGVhaGVhZDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NjlfMTQiPlNldF9DYnJlYWtfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4Nl8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzY5XzMxIj5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmNicmVhaygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG5vY2JyZWFrKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84ODZfMTQiPlNldF9DYnJlYWtfTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83ODhfMTQiPlNldF9SYXdfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5Ml8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzg4XzI4Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPnJhdygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG5vcmF3KCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OTJfMTQiPlNldF9SYXdfTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MDdfMTQiPlNldF9FY2hvX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OThfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgwN18yOSI+U3dpdGNoT248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5lY2hvKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbm9lY2hvKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OThfMTQiPlNldF9FY2hvX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODI2XzE0Ij5TZXRfTWV0YV9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTA0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MjZfMjkiPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgyN18yOSI+U3dpdGNoT248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5tZXRhKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA0XzE0Ij5TZXRfTWV0YV9Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80NiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgzN18xNCI+U2V0X0tleVBhZF9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEwXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MzdfMzEiPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODM4XzMxIj5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmtleXBhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxMF8xNCI+U2V0X0tleVBhZF9Nb2RlPC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODQ4XzEzIj5HZXRfS2V5UGFkX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg0OF8zMCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBoYXMgbm8gcGVuZGFudCBpbiBDLiBUaGVyZSB5b3UndmUgdG8gbG9vayBpbnRvIHRoZSBXSU5ET1dTPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHN0cnVjdHVyZSB0byBnZXQgdGhlIHZhbHVlLiBCYWQgcHJhY3RpY2UsIG5vdCByZXBlYXRlZCBpbiBBZGEuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTIwXzkiPkhhbGZfRGVsYXlfQW1vdW50PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnJhbmdlPC9iPiAxIC4uIDI1NTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODU3XzE0Ij5IYWxmX0RlbGF5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTIzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTdfMjYiPkFtb3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyMF85Ij5IYWxmX0RlbGF5X0Ftb3VudDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5oYWxmZGVsYXkoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjNfMTQiPkhhbGZfRGVsYXk8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODY3XzE0Ij5TZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODY4XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTMwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg2OV83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+aW50cmZsdXNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTI4XzE0Ij5TZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODc5XzE0Ij5TZXRfUXVldWVfSW50ZXJydXB0X01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODgwXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84ODFfNyI+Rmx1c2g8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5xaWZsdXNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbm9xaWZsdXNoKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzVfMTQiPlNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84OThfMTQiPlNldF9Ob0RlbGF5X01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODk5XzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkwMF83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPm5vZGVsYXkoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NDNfMTQiPlNldF9Ob0RlbGF5X01vZGU8L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDlfOSI+VGltZW91dF9Nb2RlPC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0OV8yNiI+QmxvY2tpbmc8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDlfMzYiPk5vbl9CbG9ja2luZzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0OV81MCI+RGVsYXllZDwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTEwXzE0Ij5TZXRfVGltZW91dF9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTUyXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTBfMzIiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTUzXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTFfMzIiPk1vZGU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0OV85Ij5UaW1lb3V0X01vZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTU0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTJfMzIiPkFtb3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IE5hdHVyYWwpOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGluIE1pbGxpc2Vjb25kczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj53dGltZW91dCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRpbWVvdXQoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbnN0ZWFkIG9mIG92ZXJsb2FkaW5nIHRoZSBzZW1hbnRpYyBvZiB0aGUgc2lnbiBvZiBhbW91bnQsIHdlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZSB0aGUgVGltZW91dF9Nb2RlIHBhcmFtZXRlci4gVGhpcyBzaG91bGQgaW1wcm92ZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZWFkYWJpbGl0eS4gRm9yIEJsb2NraW5nIGFuZCBOb25fQmxvY2tpbmcsIHRoZSBBbW91bnQgaXMgbm90PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGV2YWx1YXRlZC48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcHJvY2VkdXJlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MzFfMTQiPlNldF9Fc2NhcGVfVGltZXJfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MzJfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk2Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MzNfNyI+VGltZXJfT2ZmPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPm5vdGltZW91dCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk2NF8xNCI+U2V0X0VzY2FwZV9UaW1lcl9Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk0NV8xNCI+U2V0X05MX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk0NV8yNyI+U3dpdGNoT248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+bmwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBub25sKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NzVfMTQiPlNldF9OTF9Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81NCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk2NF8xNCI+Q2xlYXJfT25fTmV4dF9VcGRhdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTY1XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NjZfNyI+RG9fQ2xlYXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+Y2xlYXJvaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4MV8xNCI+Q2xlYXJfT25fTmV4dF9VcGRhdGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTc2XzE0Ij5Vc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTg5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk3N183Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk3OF83Ij5Eb19JZGw8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+aWRsb2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODhfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0xpbmU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTg4XzE0Ij5Vc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTg5XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTkwXzciPkRvX0lkYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5pZGNvaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk5NV8xNCI+VXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDAyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85OThfMTQiPkxlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDAzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk5OV83Ij5XaW48L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDA0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMDBfNyI+RG9fTGVhdmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+bGVhdmVvaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDJfMTQiPkxlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMTBfMTQiPkltbWVkaWF0ZV9VcGRhdGVfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAxMV83Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAxMl83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5pbW1lZG9rKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwOV8xNCI+SW1tZWRpYXRlX1VwZGF0ZV9Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81OSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDE2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDIwXzE0Ij5BbGxvd19TY3JvbGxpbmc8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDE3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMjFfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDE4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMjJfNyI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+c2Nyb2xsb2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE2XzE0Ij5BbGxvd19TY3JvbGxpbmc8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAzMl8xMyI+U2Nyb2xsaW5nX0FsbG93ZWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDIyXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDMyXzMyIj5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZXJlIGlzIG5vIHN1Y2ggZnVuY3Rpb24gaW4gdGhlIEMgaW50ZXJmYWNlLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjJfMTMiPlNjcm9sbGluZ19BbGxvd2VkPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDQxXzE0Ij5TZXRfU2Nyb2xsX1JlZ2lvbjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA0Ml83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDNfNyI+VG9wX0xpbmU8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDQ0XzciPkJvdHRvbV9MaW5lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+d3NldHNjcnJlZygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHNldHNjcnJlZygpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyN18xNCI+U2V0X1Njcm9sbF9SZWdpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2guM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNTdfMTQiPlVwZGF0ZV9TY3JlZW48L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmRvdXBkYXRlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA0MF8xNCI+VXBkYXRlX1NjcmVlbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA2N18xNCI+UmVmcmVzaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDVfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNjdfMjMiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPndyZWZyZXNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZXJlIGlzIGFuIG92ZXJsb2FkZWQgUmVmcmVzaCBmb3IgUGFkcy48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIElubGluZSBwcmFnbWEgYXBwZWFycyB0aGVyZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHJlZnJlc2goKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA3N18xNCI+UmVmcmVzaF9XaXRob3V0X1VwZGF0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA3OF83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sIj53bm91dHJlZnJlc2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlcmUgaXMgYW4gb3ZlcmxvYWRlZCBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIGZvciBQYWRzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgSW5saW5lIHByYWdtYSBhcHBlYXJzIHRoZXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82NCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDg4XzE0Ij5SZWRyYXc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDg4XzIyIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sIj5yZWRyYXd3aW4oKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzY1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwOThfMTQiPlJlZHJhdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNjNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwOTlfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY0XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTAwXzciPkJlZ2luX0xpbmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2NV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEwMV83Ij5MaW5lX0NvdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gUG9zaXRpdmUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+d3JlZHJhd2xuKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUmVkcmF3KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTExNV8xNCI+RXJhc2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDc0XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTE1XzIxIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+d2VyYXNlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZXJhc2UoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNzRfMTQiPkVyYXNlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDgwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTI1XzE0Ij5DbGVhcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEyNV8yMSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwiPndjbGVhcigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGNsZWFyKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDgwXzE0Ij5DbGVhcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEzNV8xNCI+Q2xlYXJfVG9fRW5kX09mX1NjcmVlbjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEzNV8zOCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwiPndjbHJ0b2JvdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGNscnRvYm90KCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDg3XzE0Ij5DbGVhcl9Ub19FbmRfT2ZfU2NyZWVuPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82OSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDk0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTQ1XzE0Ij5DbGVhcl9Ub19FbmRfT2ZfTGluZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE0NV8zNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwiPndjbHJ0b2VvbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGNscnRvZW9sKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDk0XzE0Ij5DbGVhcl9Ub19FbmRfT2ZfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRPRE86IHdlIGNvdWxkIGhhdmUgU2V0X0JhY2tncm91bmQoV2luZG93OyBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYmVjYXVzZSBpbiBDIGl0IGlzIGNvbW1vbiB0byBzZWUgYmtnZHNldChBX0JPTEQpIG9yPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGJrZ2RzZXQoQ09MT1JfUEFJUihuKSk8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTA4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU1XzE0Ij5TZXRfQmFja2dyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE1Nl83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU3XzciPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JrZ2QuM3guaHRtbCI+d2JrZ2RzZXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBia2dkc2V0KCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTA4XzE0Ij5TZXRfQmFja2dyb3VuZDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE2NV8xNCI+Q2hhbmdlX0JhY2tncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTE3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNjZfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE2N183Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwiPndia2dkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYmtnZCgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExNl8xNCI+Q2hhbmdlX0JhY2tncm91bmQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzcyIiMyfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICA/IHdia2dkZ2V0IGlzIG5vdCBsaXN0ZWQgaW4gY3Vyc19ia2dkLCBnZXRia2dkIGlzIHRocG91Z2guPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTI1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTc3XzEzIj5HZXRfQmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMjVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNzdfMjkiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwiPndia2dkZ2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYmtnZGdldCgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEyNV8xMyI+R2V0X0JhY2tncm91bmQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIxMl8xNCI+VW50b3VjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzZfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMTJfMjMiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj51bnRvdWNod2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEzNl8xNCI+VW50b3VjaDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIwM18xNCI+VG91Y2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQxXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjAzXzIxIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+dG91Y2h3aW4oKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzc1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMjFfMTQiPlRvdWNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0NV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIyMV8yMSI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQ2XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjIyXzIxIj5TdGFydDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNDdfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMjNfMjEiPkNvdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gUG9zaXRpdmUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPnRvdWNobGluZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFRvdWNoKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzc2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODZfMTQiPkNoYW5nZV9MaW5lc19TdGF0dXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTUyXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTg2XzM1Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1M18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE4N18zNSI+U3RhcnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODhfMzUiPkNvdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gUG9zaXRpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTU1XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTg5XzM1Ij5TdGF0ZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPnd0b3VjaGxuKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTYwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjI5XzEzIj5Jc19Ub3VjaGVkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzMF83Ij5XaW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzMV83Ij5MaW5lPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPmlzX2xpbmV0b3VjaGVkKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83OCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNDNfMTMiPklzX1RvdWNoZWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTY1XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjQ0XzciPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj5pc193aW50b3VjaGVkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoSXNfVG91Y2hlZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbCI+Y3Vyc19vdmVybGF5LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83OSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTc0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjU2XzE0Ij5Db3B5PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE3NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjU3XzciPlNvdXJjZV9XaW5kb3c8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI1OF83Ij5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTc3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNTlfNyI+U291cmNlX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2MF83Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTc5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjFfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2Ml83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTgxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjNfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2NF83Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTgzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjVfNyI+Tm9uX0Rlc3RydWN0aXZlX01vZGU8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19vdmVybGF5LjN4Lmh0bWwiPmNvcHl3aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc0XzE0Ij5Db3B5PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTg4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjkyXzE0Ij5PdmVyd3JpdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTg4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjkzXzciPlNvdXJjZV9XaW5kb3c8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyOTRfNyI+RGVzdGluYXRpb25fV2luZG93PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sIj5vdmVyd3JpdGUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTg4XzE0Ij5PdmVyd3JpdGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzgxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMDRfMTQiPk92ZXJsYXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTk0XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzA1XzciPlNvdXJjZV9XaW5kb3c8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTk1XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzA2XzciPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbCI+b3ZlcmxheSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExOTRfMTQiPk92ZXJsYXk8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbi4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfODIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMxN18xNCI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMxOF83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzE5XzciPkxpbmVzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAxKTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBkZWZhdWx0IGlzIHRvIGluc2VydCBvbmUgbGluZSBhYm92ZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPndpbnNkZWxsbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGluc2RlbGxuKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjA0XzE0Ij5JbnNlcnRfRGVsZXRlX0xpbmVzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjEyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzI5XzE0Ij5EZWxldGVfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMTJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMjlfMjciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sIj53ZGVsZXRlbG4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBkZWxldGVsbigpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxMl8xNCI+RGVsZXRlX0xpbmU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzg0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMzVfMTQiPkluc2VydF9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxOF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMzNV8yNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPndpbnNlcnRsbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGluc2VydGxuKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjE4XzE0Ij5JbnNlcnRfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84NSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjI4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzQyXzE0Ij5HZXRfU2l6ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM0M183Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjMwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNDRfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjMxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNDVfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwiPmdldG1heHl4KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOF8xNCI+R2V0X1NpemU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzg2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNjJfMTQiPkdldF9XaW5kb3dfUG9zaXRpb248L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjM3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNjNfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM2NF83Ij5Ub3BfTGVmdF9MaW5lPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM2NV83Ij5Ub3BfTGVmdF9Db2x1bW48L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0eXguM3guaHRtbCI+Z2V0YmVneXgoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM2XzE0Ij5HZXRfV2luZG93X1Bvc2l0aW9uPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzgwXzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzgxXzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzgyXzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI0N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzgzXzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5nZXR5eCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzg4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzOThfMTQiPkdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzk5XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjU0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDBfNyI+VG9wX0xlZnRfTGluZTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjU1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDFfNyI+VG9wX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQwMl83Ij5Jc19Ob3RfQV9TdWJ3aW5kb3c8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQm9vbGVhbik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0eXguM3guaHRtbCI+Z2V0cGFyeXgoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW5zdGVhZCBvZiBwbGFjaW5nIC0xIGluIHRoZSBjb29yZGluYXRlcyBhcyByZXR1cm4sIHdlIHVzZSBhIGJvb2xlYW48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdG8gcmV0dXJuIHRoZSBpbmZvIHRoYXQgdGhlIHdpbmRvdyBoYXMgbm8gcGFyZW50LjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTJfMTQiPkdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfODkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDI0XzEzIj5OZXdfUGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2N18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQyNF8yMiI+TGluZXM8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY4XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDI1XzIyIj5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5uZXdwYWQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjY3XzEzIj5OZXdfUGFkPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MzlfMTMiPlN1Yl9QYWQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjc0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDBfNyI+UGFkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjc1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDFfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0Ml83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjc3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDNfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDQ0XzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5zdWJwYWQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjczXzEzIj5TdWJfUGFkPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjgzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDY3XzE0Ij5SZWZyZXNoPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDY4XzciPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyODVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ2OV83Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDcwXzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyODdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3MV83Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDcyXzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyODlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3M183Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc0XzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5wcmVmcmVzaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFJlZnJlc2gpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOTIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ5N18xNCI+UmVmcmVzaF9XaXRob3V0X1VwZGF0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ5OF83Ij5QYWQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjk3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0OTlfNyI+U291cmNlX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwMF83Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjk5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MDFfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwMl83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzAxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MDNfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNF83Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19wYWQuM3guaHRtbCI+cG5vdXRyZWZyZXNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzA3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTI3XzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUyOF83Ij5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzA5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MjlfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPnBlY2hvY2hhcigpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU0MF8xNCI+QWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzEzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NDFfNyI+UGFkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTQyXzciPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IENoYXJhY3Rlcik7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzk0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NTJfMTQiPlNjcm9sbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMjJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NTJfMjIiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyM18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU1M18yMiI+QW1vdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAxKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbCI+d3NjcmwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBzY3JvbGwoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHNjcmwoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMjJfMTQiPlNjcm9sbDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19kZWxjaC4zeC5odG1sIj5jdXJzX2RlbGNoLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85NSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzM0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTY1XzE0Ij5EZWxldGVfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzNF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU2NV8zMiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwiPndkZWxjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGRlbGNoKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzk2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NzVfMTQiPkRlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzQwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NzZfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU3N183Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTc4XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwiPm12d2RlbGNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZkZWxjaCgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoRGVsZXRlX0NoYXJhY3Rlcik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1OTBfMTMiPlBlZWs8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzUyXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTkwXzE5Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5jaCgpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaC4zeC5odG1sIj53aW5jaCgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzU4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTk5XzEzIj5QZWVrPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjAwXzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNjBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwMV83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzYxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MDJfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaC4zeC5odG1sIj5tdndpbmNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZpbmNoKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTW9yZSBQZWVrJ3MgZm9sbG93LCBwcmFnbWEgSW5saW5lIGFwcGVhcnMgbGF0ZXIuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2guM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzk5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MTJfMTQiPkluc2VydDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNzFfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MTJfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzcyXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjEzXzIyIj5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnNjaC4zeC5odG1sIj53aW5zY2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBpbnNjaCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyM18xNCI+SW5zZXJ0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3N18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyNF83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3OF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyNV83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3OV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyNl83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzgwXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI3XzciPkNoPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwiPm12d2luc2NoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZpbnNjaCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTAxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzODlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDNfMTQiPkluc2VydDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzODlfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDNfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzkwXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjQ0XzIyIj5TdHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOTFfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDVfMjIiPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc3N0ci4zeC5odG1sIj53aW5zbnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdpbnNzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGluc25zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGluc3N0cigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2MV8xNCI+SW5zZXJ0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5OF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2Ml83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5OV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2M183Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwMF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2NF83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDAxXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjY1XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwMl8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2Nl83Ij5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnNzdHIuM3guaHRtbCI+bXZ3aW5zbnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12d2luc3N0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZpbnNuc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluc3N0cigpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoSW5zZXJ0KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTAzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2ODVfMTQiPlBlZWs8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDE0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg1XzIwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDE1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg2XzIwIj5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxNl8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY4N18yMCI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc3RyLjN4Lmh0bWwiPndpbm5zdHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB3aW5zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGlubnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5zdHIoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTA0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MTRfMTQiPlBlZWs8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDIzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzE1XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MTZfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyNV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcxN183Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjZfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MThfNyI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjdfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MTlfNyI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc3RyLjN4Lmh0bWwiPm12d2lubnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12d2luc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmlubnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZpbnN0cigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcyNl8xNCI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MzhfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MjdfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzOV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcyOF83Ij5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQwXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzI5XzciPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPndpbmNobnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdpbmNoc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBpbmNobnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5jaHN0cigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2M18xNCI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDdfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NjRfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0OF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2NV83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQ5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzY2XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ1MF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2N183Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDUxXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzY4XzciPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPm12d2luY2huc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZ3aW5jaHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZpbmNobnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZpbmNoc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgV2UgZG9uJ3QgaW5saW5lIHRoZSBQZWVrIHByb2NlZHVyZXM8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc3NV8xNCI+R2V0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2M18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc3NV8xOSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDY0XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzc2XzE5Ij5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDY1XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzc3XzE5Ij5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwiPndnZXRuc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd2dldHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZ2V0bnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZ2V0c3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYWN0dWFsbHkgZ2V0c3RyIGlzIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSB0aGF0IHJlc3VsdHMgaW4gYnVmZmVyPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG92ZXJmbG93cy48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODA0XzE0Ij5HZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc0XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODA1XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3NV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgwNl83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzZfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MDdfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzdfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MDhfNyI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3OF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgwOV83Ij5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwiPm12d2dldG5zdHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdndnZXRzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12Z2V0bnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZnZXRzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBHZXQgaXMgbm90IGlubGluZWQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IEltcGxlbWVudGVkOiBzbGtfYXR0cl9vbiwgc2xrX2F0dHJfb2ZmLCBzbGtfYXR0cl9zZXQ8L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDkxXzkiPlNvZnRfTGFiZWxfS2V5X0Zvcm1hdDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDkxXzM1Ij5UaHJlZV9Ud29fVGhyZWU8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTJfMzUiPkZvdXJfRm91cjwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5M18zNSI+UENfU3R5bGU8L0E+PC9GT05UPiwgICAgICAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbmN1cnNlcyBzcGVjaWZpYzwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5NF8zNSI+UENfU3R5bGVfV2l0aF9JbmRleDwvQT48L0ZPTlQ+KTsgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIjwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk1XzkiPkxhYmVsX051bWJlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFBvc2l0aXZlIDxiPnJhbmdlPC9iPiAxIC4uIDEyOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk2XzkiPkxhYmVsX0p1c3RpZmljYXRpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5Nl8zMyI+TGVmdDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTZfMzkiPkNlbnRlcmVkPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5Nl80OSI+UmlnaHQ8L0E+PC9GT05UPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgxNl8xNCI+SW5pdF9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MTdfNyI+Rm9ybWF0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5MV85Ij5Tb2Z0X0xhYmVsX0tleV9Gb3JtYXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTFfMzUiPlRocmVlX1R3b19UaHJlZTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfaW5pdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTlfMTQiPkluaXRfU29mdF9MYWJlbF9LZXlzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgyN18xNCI+U2V0X1NvZnRfTGFiZWxfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwNV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgyN18zNCI+TGFiZWw8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk1XzkiPkxhYmVsX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDZfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MjhfMzQiPlRleHQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTA3XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODI5XzM0Ij5GbXQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTZfOSI+TGFiZWxfSnVzdGlmaWNhdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5Nl8zMyI+TGVmdDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfc2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHByb2NlZHVyZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTExIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NDZfMTQiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19yZWZyZXNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUxMl8xNCI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTE3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODU2XzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfbm91dHJlZnJlc2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTE3XzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTEzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NjZfMTQiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjJfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NjZfMzQiPkxhYmVsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5NV85Ij5MYWJlbF9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTIzXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODY3XzM0Ij5UZXh0PC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfbGFiZWwoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NzVfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjdfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NzVfMzMiPkxhYmVsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5NV85Ij5MYWJlbF9OdW1iZXI8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+c2xrX2xhYmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfU29mdF9MYWJlbF9LZXkpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTE1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MzNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4ODNfMTQiPkNsZWFyX1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfY2xlYXIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTMzXzE0Ij5DbGVhcl9Tb2Z0X0xhYmVsX0tleXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTM4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODkzXzE0Ij5SZXN0b3JlX1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfcmVzdG9yZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzhfMTQiPlJlc3RvcmVfU29mdF9MYWJlbF9LZXlzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMTciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkwM18xNCI+VG91Y2hfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa190b3VjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDNfMTQiPlRvdWNoX1NvZnRfTGFiZWxfS2V5czwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTE4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NDhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MTNfMTQiPlN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTE0XzciPkF0dHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTUwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MTVfNyI+T248L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19hdHRyb24oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBzbGtfYXR0cm9mZigpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0OF8xNCI+U3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTU2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTM3XzE0Ij5TZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkzOF83Ij5BdHRyPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkzOV83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfYXR0cnNldCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NTZfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTUzXzEzIj5HZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+c2xrX2F0dHIoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NjNfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19hdHRyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTIyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NzJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NzNfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NzJfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NzNfNDAiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfY29sb3IoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTcyXzE0Ij5TZXRfU29mdF9MYWJlbF9LZXlfQ29sb3I8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2tleWJvdW5kLjN4Lmh0bWwiPmtleWJvdW5kLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDoga2V5Ym91bmQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2tleW9rLjN4Lmh0bWwiPmtleW9rLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk4NF8xNCI+RW5hYmxlX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1ODZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5ODRfMjYiPktleTwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1ODdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5ODVfMjYiPkVuYWJsZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2tleW9rLjN4Lmh0bWwiPmtleW9rKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU4Nl8xNCI+RW5hYmxlX0tleTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU5Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk5N18xNCI+RGVmaW5lX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5OTdfMjYiPkRlZmluaXRpb248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTk3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTk4XzI2Ij5LZXk8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5Nl8xNCI+RGVmaW5lX0tleTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTm90IGltcGxlbWVudGVkIDogZmlsdGVyLCB1c2VfZW52PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgcHV0d2luLCBnZXR3aW4gYXJlIGluIHRoZSBjaGlsZCBwYWNrYWdlIFB1dFdpbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTBfMTQiPktleV9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTBfMjQiPktleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MTFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxXzI0Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5rZXluYW1lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBleHRlcm5hbCBuYW1lIGZvciBhIHJlYWwga2V5c3Ryb2tlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTI2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxNl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjJfMTMiPktleV9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxNl8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjJfMjMiPktleTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmtleW5hbWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBXZSBkb24ndCBpbmxpbmUgdGhpcyByb3V0aW5lPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAxM18xNCI+VW5fQ29udHJvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MjJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMTNfMjYiPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjIzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDE0XzI2Ij5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPnVuY3RybCgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTI4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyN18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAyMl8xMyI+VW5fQ29udHJvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MjdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMjJfMjUiPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+dW5jdHJsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChVbl9Db250cm9sKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjMzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDMwXzE0Ij5EZWxheV9PdXRwdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjMzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDMwXzI4Ij5Nc2VjczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IE5hdHVyYWwpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+ZGVsYXlfb3V0cHV0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzM18xNCI+RGVsYXlfT3V0cHV0PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYzOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA0MF8xNCI+Rmx1c2hfSW5wdXQ8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmZsdXNoaW5wKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzOF8xNCI+Rmx1c2hfSW5wdXQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjQ3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDUwXzEzIj5CYXVkcmF0ZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gTmF0dXJhbDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+YmF1ZHJhdGUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjQ3XzEzIj5CYXVkcmF0ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTMyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY1Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA1OF8xMyI+RXJhc2VfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBDaGFyYWN0ZXI7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmVyYXNlY2hhcigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NTJfMTMiPkVyYXNlX0NoYXJhY3RlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTMzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY1N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA2Nl8xMyI+S2lsbF9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IENoYXJhY3RlcjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+a2lsbGNoYXIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjU3XzEzIj5LaWxsX0NoYXJhY3RlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTM0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA3NF8xMyI+SGFzX0luc2VydF9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmhhc19pYygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NjJfMTMiPkhhc19JbnNlcnRfQ2hhcmFjdGVyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDg2XzEzIj5IYXNfSW5zZXJ0X0xpbmU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmhhc19pbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NjdfMTMiPkhhc19JbnNlcnRfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTM2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA5OF8xMyI+U3VwcG9ydGVkX0F0dHJpYnV0ZXM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPnRlcm1hdHRycygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NzJfMTMiPlN1cHBvcnRlZF9BdHRyaWJ1dGVzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEwOF8xNCI+TG9uZ19OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3N18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEwOF8yNSI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5sb25nbmFtZSgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTM4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjExNl8xMyI+TG9uZ19OYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmxvbmduYW1lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChMb25nX05hbWUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTM5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMjRfMTQiPlRlcm1pbmFsX05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjg3XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTI0XzI5Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPnRlcm1uYW1lKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjkxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTMyXzEzIj5UZXJtaW5hbF9OYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPnRlcm1uYW1lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChUZXJtaW5hbF9OYW1lKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIENPTE9SX1BBSVI8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQ09MT1JfUEFJUihuKSBpbiBDIGlzIHRoZSBzYW1lIGFzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKENoID0mZ3Q7IE51bCwgQ29sb3IgPSZndDsgbiwgQXR0ciA9Jmd0OyBOb3JtYWxfVmlkZW8pPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEluIEMgeW91IG9mdGVuIHNlZSBzb21ldGhpbmcgbGlrZSBjID0gYyB8IENPTE9SX1BBSVIobik7PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjLkNvbG9yIDo9IG47PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcwN18xNCI+U3RhcnRfQ29sb3I8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5zdGFydF9jb2xvcigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFN0YXJ0X0NvbG9yLCAic3RhcnRfY29sb3IiKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE0MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzEyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQwXzE0Ij5Jbml0X1BhaXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzEyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQwXzI1Ij5QYWlyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzAxXzEyIj5SZWRlZmluYWJsZV9Db2xvcl9QYWlyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxM18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE0MV8yNSI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzE0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQyXzI1Ij5CYWNrPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmluaXRfcGFpcigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTJfMTQiPkluaXRfUGFpcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjJfMTQiPlBhaXJfQ29udGVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjJfMjgiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MjBfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjNfMjgiPkZvcmU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MjFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjRfMjgiPkJhY2s8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPnBhaXJfY29udGVudCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTlfMTQiPlBhaXJfQ29udGVudDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQ0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyNl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE4Ml8xMyI+SGFzX0NvbG9yczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5oYXNfY29sb3JzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcyNl8xMyI+SGFzX0NvbG9yczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQ1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTRfMTQiPkluaXRfQ29sb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzMxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk0XzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE5NV8yNiI+UmVkPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTZfMjYiPkdyZWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzM0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk3XzI2Ij5CbHVlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5pbml0X2NvbG9yKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczMV8xNCI+SW5pdF9Db2xvcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQ2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczOV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIxMV8xMyI+Q2FuX0NoYW5nZV9Db2xvcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jYW5fY2hhbmdlX2NvbG9yKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczOV8xMyI+Q2FuX0NoYW5nZV9Db2xvcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQ3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMjNfMTQiPkNvbG9yX0NvbnRlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzQ0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjIzXzI5Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NDVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMjRfMjkiPlJlZDwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc0Nl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIyNV8yOSI+R3JlZW48L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzQ3XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjI2XzI5Ij5CbHVlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+Y29sb3JfY29udGVudCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NDRfMTQiPkNvbG9yX0NvbnRlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTm90IGltcGxlbWVudGVkOiBnZXRzeXgsIHNldHN5eDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NTZfOSI+Q3Vyc2VzX01vZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1Nl8yNSI+Q3Vyc2VzPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1Nl8zMyI+U2hlbGw8L0E+PC9GT05UPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI0N18xNCI+U2F2ZV9DdXJzZXNfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NTlfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNDdfMzIiPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU2XzkiPkN1cnNlc19Nb2RlPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmRlZl9wcm9nX21vZGUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBkZWZfc2hlbGxfbW9kZSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1OV8xNCI+U2F2ZV9DdXJzZXNfTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQ5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNjVfMTQiPlJlc2V0X0N1cnNlc19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI2NV8zMyI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTZfOSI+Q3Vyc2VzX01vZGU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+cmVzZXRfcHJvZ19tb2RlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogcmVzZXRfc2hlbGxfbW9kZSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc2NV8xNCI+UmVzZXRfQ3Vyc2VzX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjgzXzE0Ij5TYXZlX1Rlcm1pbmFsX1N0YXRlPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPnNhdmV0dHkoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzcxXzE0Ij5TYXZlX1Rlcm1pbmFsX1N0YXRlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI5M18xNCI+UmVzZXRfVGVybWluYWxfU3RhdGU8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+cmVzZXR0eSgpOzwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzc2XzE0Ij5SZXNldF9UZXJtaW5hbF9TdGF0ZTwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODBfOSI+U3Rkc2NyX0luaXRfUHJvYzwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4MV8xNyI+V2luPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODJfMTciPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KSA8Yj5yZXR1cm48L2I+IEludGVnZXI7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODBfOSI+U3Rkc2NyX0luaXRfUHJvYzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOLkIuOiB0aGUgcmV0dXJuIHZhbHVlIGlzIGFjdHVhbGx5IGlnbm9yZWQsIGJ1dCBpdCBzZWVtcyB0byBiZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICBhIGdvb2QgcHJhY3RpY2UgdG8gcmV0dXJuIDAgaWYgeW91IHRoaW5rIGFsbCB3ZW50IGZpbmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgYW5kIC0xIG90aGVyd2lzZS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzg5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzAzXzE0Ij5SaXBfT2ZmX0xpbmVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMwM18yOSI+TGluZXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMwNF8yOSI+UHJvYzwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzgwXzkiPlN0ZHNjcl9Jbml0X1Byb2M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+cmlwb2ZmbGluZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOLkIuOiB0byBiZSBtb3JlIHByZWNpc2UsIHRoaXMgdXNlcyBhIG5jdXJzZXMgc3BlY2lmaWMgZW5oYW5jZW1lbnQgb2Y8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgcmlwb2ZmbGluZSgpLCBpbiB3aGljaCB0aGUgTGluZXMgYXJndW1lbnQgYWJzb2x1dGUgdmFsdWUgaXMgdGhlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgIG51bWJlciBvZiBsaW5lcyB0byBiZSByaXBwZWQgb2YuIFRoZSBvZmZpY2lhbCByaXBvZmZsaW5lKCkgb25seTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICB1c2VzIHRoZSBzaWduIG9mIExpbmVzIHRvIHJpcCBvZiBhIHNpbmdsZSBsaW5lIGZyb20gYm90dG9tIG9yIHRvcC48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzg5XzE0Ij5SaXBfT2ZmX0xpbmVzPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5OF85Ij5DdXJzb3JfVmlzaWJpbGl0eTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzk4XzMxIj5JbnZpc2libGU8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzk4XzQyIj5Ob3JtYWw8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzk4XzUwIj5WZXJ5X1Zpc2libGU8L0E+PC9GT05UPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMxNV8xNCI+U2V0X0N1cnNvcl9WaXNpYmlsaXR5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwMV8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMxNV8zNyI+VmlzaWJpbGl0eTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc5OF85Ij5DdXJzb3JfVmlzaWJpbGl0eTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX3NldCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDFfMTQiPlNldF9DdXJzb3JfVmlzaWJpbGl0eTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTU0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMjhfMTQiPk5hcF9NaWxsaV9TZWNvbmRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwNl8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMyOF8zMyI+TXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBOYXR1cmFsKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+bmFwbXMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODA2XzE0Ij5OYXBfTWlsbGlfU2Vjb25kczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBTb21lIHVzZWZ1bCBoZWxwZXJzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTNfOSI+VHJhbnNmb3JtX0RpcmVjdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODEzXzMzIj5Gcm9tX1NjcmVlbjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTNfNDYiPlRvX1NjcmVlbjwvQT48L0ZPTlQ+KTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzk2XzE0Ij5UcmFuc2Zvcm1fQ29vcmRpbmF0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzOTdfNyI+VzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM5OF83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzOTlfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDBfNyI+RGlyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxM185Ij5UcmFuc2Zvcm1fRGlyZWN0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODEzXzMzIj5Gcm9tX1NjcmVlbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIHByb2NlZHVyZSB0cmFuc2Zvcm1zIHNjcmVlbiBjb29yZGluYXRlcyBpbnRvIGNvb3JkaW5hdGVzIHJlbGF0aXZlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRvIHRoZSB3aW5kb3cgYW5kIHZpY2UgdmVyc2EsIGRlcGVuZGluZyBvbiB0aGUgRGlyIHBhcmFtZXRlci48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2NyZWVuIGNvb3JkaW5hdGVzIGFyZSB0aGUgcG9zaXRpb24gaW5mb3JtYXRpb25zIG9uIHRoZSBwaHlzaWNhbCBkZXZpY2UuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIEN1cnNlc19FeGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgTGluZSBhbmQgQ29sdW1uIGFyZSBub3QgaW4gdGhlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFdpbmRvdyBvciBpZiB5b3UgcGFzcyB0aGUgTnVsbF9XaW5kb3cgYXMgYXJndW1lbnQuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHByb2NlZHVyZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1NSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODMxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDI1XzE0Ij5Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+dXNlX2RlZmF1bHRfY29sb3JzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzMV8xNCI+VXNlX0RlZmF1bHRfQ29sb3JzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgzNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQzNV8xNCI+QXNzdW1lX0RlZmF1bHRfQ29sb3JzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgzNl8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQzNV8zNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjg1XzQiPkRlZmF1bHRfQ29sb3I8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODM3XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDM2XzM3Ij5CYWNrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yODVfNCI+RGVmYXVsdF9Db2xvcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9kZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5hc3N1bWVfZGVmYXVsdF9jb2xvcnMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM2XzE0Ij5Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfZXh0ZW5kLjN4Lmh0bWwiPmN1cnNfZXh0ZW5kLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODQ2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDUwXzEzIj5DdXJzZXNfVmVyc2lvbjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2V4dGVuZC4zeC5odG1sIj5jdXJzZXNfdmVyc2lvbigpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTU4IiMyfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgcmV0dXJudmFsdWUgaXMgdGhlIHByZXZpb3VzIHNldHRpbmcgb2YgdGhlIGZsYWc8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NzNfMTMiPlVzZV9FeHRlbmRlZF9OYW1lczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NTFfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NzNfMzMiPkVuYWJsZTwvQT48L0ZPTlQ+IDogQm9vbGVhbikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2V4dGVuZC4zeC5odG1sIj51c2VfZXh0ZW5kZWRfbmFtZXMoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTU5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NTlfMTQiPkN1cnNlc19GcmVlX0FsbDwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RyYWNlLjN4Lmh0bWwiPl9uY19mcmVlYWxsKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDg4XzE0Ij5TY3JlZW5fRHVtcF9Ub19GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg2N18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ4OF8zNSI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPnNjcl9kdW1wKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNjEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwMV8xNCI+U2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3MV80MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwMV80MCI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPnNjcl9yZXN0b3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUxNF8xNCI+U2NyZWVuX0luaXRfRnJvbV9GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3NV8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUxNF8zNyI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPnNjcl9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNjMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUyN18xNCI+U2NyZWVuX1NldF9GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg3OV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUyN18zMSI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPnNjcl9zZXQoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfcHJpbnQuM3guaHRtbCI+Y3Vyc19wcmludC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW1wbGVtZW50ZWQ6ICBtY3ByaW50PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW1wbGVtZW50ZWQ6IHByaW50dywgIHdwcmludHcsIG12cHJpbnR3LCBtdndwcmludHcsIHZ3cHJpbnR3LDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgIHZ3X3ByaW50dzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQbGVhc2UgdXNlIHRoZSBBZGEgc3R5bGUgVGV4dF9JTyBjaGlsZCBwYWNrYWdlcyBmb3IgZm9ybWF0dGVkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByaW50aW5nLiBJdCBkb2Vzbid0IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UgdG8gbWFwIHRoZSBwcmludGYgc3R5bGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQyBmdW5jdGlvbnMgdG8gQWRhLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogc2NhbncsIHdzY2FudywgbXZzY2FudywgbXZ3c2NhbncsIHZ3c2NhbncsIHZ3X3NjYW53PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9yZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0uM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IEltcGxlbWVudGVkOiByZXNpemV0ZXJtPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi93cmVzaXplLjN4Lmh0bWwiPndyZXNpemUuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2NCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTExXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQwXzE0Ij5SZXNpemU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTExXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQwXzIyIj5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDFfMjIiPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDJfMjIiPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3dyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgpPC9BPjwvRU0+PC9GT05UPgorCis8Yj5wcml2YXRlPC9iPgorICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSAwOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBuZXh0IGNvbnN0YW50cyBhcmUgZ2VuZXJhdGVkIGFuZCBtYXkgYmUgZGlmZmVyZW50IG9uIHlvdXI8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYXJjaGl0ZWN0dXJlLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MjNfNCI+U2l6ZW9mX2Jvb2w8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gTmF0dXJhbCA6PSAgMTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBib29sPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MjRfNCI+T2Zmc2V0X1hZPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gTmF0dXJhbCA6PSAgMTsgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnQ8L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm1vZDwvYj4gMiAqKiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5jaGFyJ1NpemU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiA6PSAwOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDdjZGYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bQpAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE0IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFB1cmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPik7Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRXZlcnl0aGluZyBpcyBpbiB0aGUgY2hpbGQgdW5pdHM8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvYW5ub3VuY2UuaHRtbCBiL2RvYy9odG1sL2Fubm91bmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0YzcwMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2Fubm91bmNlLmh0bWwKQEAgLTAsMCArMSw1ODggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8IS0tCisgICRJZDogYW5ub3VuY2UuaHRtbCx2IDEuNTIgMjAwOC8xMS8wMiAwMTowNTowOCB0b20gRXhwICQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5Bbm5vdW5jaW5nIG5jdXJzZXMgNS43PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+CisKKzxIMT5Bbm5vdW5jaW5nIG5jdXJzZXMgNS43PC9IMT4KKworVGhlIG5jdXJzZXMgKG5ldyBjdXJzZXMpIGxpYnJhcnkgaXMgYSBmcmVlIHNvZnR3YXJlIGVtdWxhdGlvbiBvZgorY3Vyc2VzIGluIFN5c3RlbSBWIFJlbGVhc2UgNC4wLCBhbmQgbW9yZS4gIEl0IHVzZXMgdGVybWluZm8gZm9ybWF0LAorc3VwcG9ydHMgcGFkcyBhbmQgY29sb3IKK2FuZCBtdWx0aXBsZSBoaWdobGlnaHRzIGFuZCBmb3JtcyBjaGFyYWN0ZXJzIGFuZCBmdW5jdGlvbi1rZXkgbWFwcGluZywKK2FuZCBoYXMgYWxsIHRoZSBvdGhlciBTWVNWLWN1cnNlcyBlbmhhbmNlbWVudHMgb3ZlciBCU0QgY3Vyc2VzLjxQPgorCitJbiBtaWQtSnVuZSAxOTk1LCB0aGUgbWFpbnRhaW5lciBvZiA0LjRCU0QgY3Vyc2VzIGRlY2xhcmVkIHRoYXQgaGUKK2NvbnNpZGVyZWQgNC40QlNEIGN1cnNlcyBvYnNvbGV0ZSwgYW5kIGVuY291cmFnZWQgdGhlIGtlZXBlcnMgb2YKK1VuaXggcmVsZWFzZXMgc3VjaCBhcyBCU0QvT1MsIEZyZWVCU0QgYW5kIE5ldEJTRCB0byBzd2l0Y2ggb3ZlciB0bworbmN1cnNlcy48UD4KKworVGhlIG5jdXJzZXMgY29kZSB3YXMgZGV2ZWxvcGVkIHVuZGVyIEdOVS9MaW51eC4KK0l0IGhhcyBiZWVuIGluIHVzZSBmb3Igc29tZSB0aW1lIHdpdGggT3BlbkJTRCBhcyB0aGUgc3lzdGVtIGN1cnNlcyBsaWJyYXJ5LAorYW5kIG9uIEZyZWVCU0QgYW5kIE5ldEJTRCBhcyBhbiBleHRlcm5hbCBwYWNrYWdlLgorSXQgc2hvdWxkIHBvcnQgZWFzaWx5IHRvIGFueSBBTlNJL1BPU0lYLWNvbmZvcm1pbmcgVU5JWC4KK0l0IGhhcyBldmVuIGJlZW4gcG9ydGVkIHRvIE9TLzIgV2FycCE8UD4KKworVGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyB0aGUgbGlicmFyeSBhbmQgc3VwcG9ydCB1dGlsaXRpZXMsIGluY2x1ZGluZyBhCit0ZXJtaW5mbyBjb21waWxlciB0aWMoMSksIGEgZGVjb21waWxlciBpbmZvY21wKDEpLCBjbGVhcigxKSwgdHB1dCgxKSwgdHNldCgxKSwKK2FuZCBhIHRlcm1jYXAgY29udmVyc2lvbiB0b29sIGNhcHRvaW5mbygxKS4gIEZ1bGwgbWFudWFsIHBhZ2VzIGFyZSBwcm92aWRlZCBmb3IKK3RoZSBsaWJyYXJ5IGFuZCB0b29scy48UD4KKworVGhlIG5jdXJzZXMgZGlzdHJpYnV0aW9uIGlzIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIEZUUCBhdAordGhlIEdOVSBkaXN0cmlidXRpb24gc2l0ZQorPEEgSFJFRj0iZnRwOi8vZnRwLmdudS5vcmcvZ251L25jdXJzZXMvIj5mdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy88L0E+Jm5ic3A7LgorPGJyPkl0IGlzIGFsc28gYXZhaWxhYmxlIGF0Cis8QSBIUkVGPSJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLyI+ZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy88L0E+Jm5ic3A7LgorCis8SDE+UmVsZWFzZSBOb3RlczwvSDE+CisKK1RoaXMgcmVsZWFzZSBpcyBkZXNpZ25lZCB0byBiZSB1cHdhcmQgY29tcGF0aWJsZSBmcm9tIG5jdXJzZXMgNS4wIHRocm91Z2ggNS42OwordmVyeSBmZXcgYXBwbGljYXRpb25zIHdpbGwgcmVxdWlyZSByZWNvbXBpbGF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorVGhlc2UgYXJlIHRoZSBoaWdobGlnaHRzIGZyb20gdGhlIGNoYW5nZS1sb2cgc2luY2UgbmN1cnNlcyA1LjYgcmVsZWFzZS4KKzxwPgorSW50ZXJmYWNlIGNoYW5nZXM6Cis8dWw+CisJPGxpPmdlbmVyYXRlIGxpbmthYmxlIHN0dWJzIGZvciBzb21lIG1hY3JvczoKKwk8YnI+CisJICBnZXRhdHRycworCis8L3VsPgorTmV3IGZlYXR1cmVzIGFuZCBpbXByb3ZlbWVudHM6Cis8dWw+CisgICAgICAgIDxsaT5saWJyYXJ5CisJPHVsPgorCQk8bGk+bmV3IGZsYXZvciBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5IHByb3ZpZGVzIHJ1ZGltZW50YXJ5CisJCSAgICBzdXBwb3J0IGZvciBQT1NJWCB0aHJlYWRzLiAgU2V2ZXJhbCBmdW5jdGlvbnMgYXJlCisJCSAgICByZWVudHJhbnQsIGJ1dCBtb3N0IHJlcXVpcmUgZWl0aGVyIGEgd2luZG93LWxldmVsIG9yCisJCSAgICBzY3JlZW4tbGV2ZWwgbXV0ZXguPGJyPgorCQkgICAgKFRoaXMgaXMgPGVtPkFQSTwvZW0+LWNvbXBhdGlibGUsCisJCSAgICAgYnV0IG5vdCA8ZW0+QUJJPC9lbT4tY29tcGF0aWJsZSB3aXRoIHRoZSBub3JtYWwgbGlicmFyeSkuCisKKwkJPGxpPmFkZCA8Y29kZT5OQ1VSU0VTX09QQVFVRTwvY29kZT4gc3ltYm9sIHRvIGN1cnNlcy5oLCB3aWxsCisJCSAgICB1c2UgdG8gbWFrZSBzdHJ1Y3RzIG9wYXF1ZSBpbiBzZWxlY3RlZCBjb25maWd1cmF0aW9ucy4KKworCQk8bGk+YWRkIDxjb2RlPk5DVVJTRVNfRVhUX0ZVTkNTPC9jb2RlPiBhbmQKKwkJICAgIDxjb2RlPk5DVVJTRVNfRVhUX0NPTE9SUzwvY29kZT4gc3ltYm9scyB0byBjdXJzZXMuaCB0byBtYWtlCisJCSAgICBpdCBzaW1wbGVyIHRvIHRlbGwgaWYgdGhlIGV4dGVuZGVkIGZ1bmN0aW9ucyBhbmQvb3IgY29sb3JzCisJCSAgICBhcmUgZGVjbGFyZWQuCisKKwkJPGxpPmFkZCB3cmVzaXplKCkgdG8gQysrIGJpbmRpbmcgCisKKwkJPGxpPmVsaW1pbmF0ZSBmaXhlZC1idWZmZXIgdnNwcmludGYoKSBjYWxscyBpbiBDKysgYmluZGluZy4KKworCQk8bGk+YWRkIHNldmVyYWwgZnVuY3Rpb25zIHRvIEMrKyBiaW5kaW5nIHdoaWNoIHdyYXAgQyBmdW5jdGlvbnMKKwkJICAgIHRoYXQgcGFzcyBhIFdJTkRPVyogcGFyYW1ldGVyLgorCisJCTxsaT5hZGFwdCBtb3VzZS1oYW5kbGluZyBjb2RlIGZyb20gbWVudSBsaWJyYXJ5IGluIGZvcm0tbGlicmFyeQorCisJCTxsaT5pbXByb3ZlIHRyYWNpbmcgZm9yIGZvcm0gbGlicmFyeSwgc2hvd2luZyBjcmVhdGVkIGZvcm1zLAorCQkgICAgZmllbGRzLCBldGMuCisKKwkJPGxpPm1ha2UgJE5DVVJTRVNfTk9fUEFERElORyBmZWF0dXJlIHdvcmsgZm9yIHRlcm1jYXAgaW50ZXJmYWNlIC4KKworCQk8bGk+YWRkIGNoZWNrIHRvIHRyYWNlLWZpbGUgb3BlbiwgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYQorCQkgICAgZGlyZWN0b3J5LCBhZGQgIi5sb2ciIHRvIHRoZSBuYW1lIGFuZCB0cnkgYWdhaW4uCisKKwkJPGxpPnNldmVyYWwgbmV3IG1hbnBhZ2VzOiAgY3Vyc19sZWdhY3kuM3gsIGN1cnNfbWVtbGVha3MuM3gsCisJCSAgICBjdXJzX29wYXF1ZS4zeCBhbmQgY3Vyc190aHJlYWRzLjN4CisJPC91bD4KKworICAgICAgICA8bGk+cHJvZ3JhbXM6CisJPHVsPgorCQk8bGk+bW9kaWZpZWQgdGhyZWUgdGVzdC1wcm9ncmFtcyB0byBkZW1vbnN0cmF0ZSB0aGUgdGhyZWFkaW5nCisJCSAgICBzdXBwb3J0IGluIHRoaXMgdmVyc2lvbjogZGl0dG8sIHJhaW4sIHdvcm0uCisKKwkJPGxpPnNldmVyYWwgbmV3IHRlc3QtcHJvZ3JhbXM6IGRlbW9fcGFuZWxzLCBkb3RzX212Y3VyLAorCQkgICAgaW5jaF93aWRlLCBpbmNocywga2V5X25hbWUsIGtleV9uYW1lcywgc2F2ZXNjcmVlbiwKKwkJICAgIHNhdmVzY3JlZW4uc2ggdGVzdF9hcnJheXMsIHRlc3RfZ2V0X3dzdHIsIHRlc3RfZ2V0c3RyLAorCQkgICAgdGVzdF9pbnN0ciwgdGVzdF9pbndzdHIgYW5kIHRlc3Rfb3BhcXVlLgorCisJCTxsaT5hZGQgPGNvZGU+YWRhY3Vyc2VzLWNvbmZpZzwvY29kZT4gdG8gdGhlIEFkYTk1IGluc3RhbGwuCisKKwkJPGxpPm1vZGlmeSB0aWMgPGNvZGU+LWY8L2NvZGU+IG9wdGlvbiB0byBmb3JtYXQgc3BhY2VzIGFzCisJCSAgICA8Y29kZT5cczwvY29kZT4gdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgbG9zdCB3aGVuIHRoYXQKKwkJICAgIGlzIHJlYWQgYmFjayBpbiB1bmZvcm1hdHRlZCBzdHJpbmdzLgorCisJCTxsaT5UaGUgPGNvZGU+dGFjazwvY29kZT4gcHJvZ3JhbSBpcyBub3cgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseQorCQkgICAgZnJvbSBuY3Vyc2VzLgorCTwvdWw+CisKKwk8bGk+dGVybWluYWwgZGF0YWJhc2UKKwk8dWw+CisJICAgIDxsaT5hZGRlZCBlbnRyaWVzOgorCQk8dWw+CisJCTxsaT48Y29kZT5FdGVybS0yNTZjb2xvcjwvY29kZT4sCisJCSAgICA8Y29kZT5FdGVybS04OGNvbG9yPC9jb2RlPiBhbmQKKwkJICAgIDxjb2RlPnJ4dnQtODhjb2xvcjwvY29kZT4KKwkJPGxpPjxjb2RlPmF0ZXJtPC9jb2RlPgorCQk8bGk+PGNvZGU+a29uc29sZS0yNTZjb2xvcjwvY29kZT4KKwkJPGxpPjxjb2RlPm1yeHZ0PC9jb2RlPgorCQk8bGk+PGNvZGU+c2NyZWVuLm1sdGVybTwvY29kZT4KKwkJPGxpPjxjb2RlPnNjcmVlbi5yeHZ0PC9jb2RlPgorCQk8bGk+PGNvZGU+dGVyYXRlcm00LjU5PC9jb2RlPiBpcyBub3cgdGhlIHByaW1hcnkgcHJpbWFyeQorCQkgICAgdGVyYXRlcm0gZW50cnksIHJlbmFtZWQgb3JpZ2luYWwgdG8KKwkJICAgIDxjb2RlPnRlcmF0ZXJtMi4zPC9jb2RlPgorCQk8bGk+PGNvZGU+OXRlcm08L2NvZGU+IHRlcm1pbmFsCisJCTxsaT5OZXdidXJ5IERhdGEgZW50cmllcworCQk8L3VsPgorCSAgICA8bGk+dXBkYXRlZC9pbXByb3ZlZCBlbnRyaWVzOgorCQk8dWw+CisJICAgICAgICA8bGk+PGNvZGU+Z25vbWU8L2NvZGU+IHRvIHZlcnNpb24gMi4yMi4zCisJCTxsaT48Y29kZT5oMTk8L2NvZGU+LCA8Y29kZT56MTAwPC9jb2RlPgorCQk8bGk+PGNvZGU+a29uc29sZTwvY29kZT4gdG8gdmVyc2lvbiAxLjYuNgorCQk8bGk+PGNvZGU+bWx0ZXJtPC9jb2RlPiwgPGNvZGU+bWx0ZXJtK3BjZmtleXM8L2NvZGU+CisJCTxsaT48Y29kZT54dGVybTwvY29kZT4sIGFuZCBidWlsZGluZy1ibG9ja3MgZm9yIGZ1bmN0aW9uLWtleXMKKwkJICAgIHRvIDxhIGhyZWY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC94dGVybS94dGVybS5sb2cuaHRtbCN4dGVybV8yMzAiPnh0ZXJtIHBhdGNoICMyMzA8L2E+LgorCQk8L3VsPgorCTwvdWw+Cis8L3VsPgorTWFqb3IgYnVnIGZpeGVzOgorPHVsPgorCTxsaT5hZGQgbG9naWMgdG8gdGljIGZvciBjYW5jZWxsaW5nIHN0cmluZ3MgaW4gdXNlci1kZWZpbmVkCisJICAgIGNhcGFiaWxpdGllcworCSAgICAodGhpcyBpcyA8ZW0+bmVlZGVkPC9lbT4gZm9yCisJICAgICBjdXJyZW50IDxjb2RlPmtvbnNvbGU8L2NvZGU+IHRlcm1pbmZvIGVudHJ5KS4KKworCTxsaT5tb2RpZnkgPGNvZGU+bWstMXN0LmF3azwvY29kZT4gc28gdGhlIGdlbmVyYXRlZCBtYWtlZmlsZSBydWxlcyBmb3IKKwkgICAgbGlua2luZyBvciBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJpZXMgZG8gbm90IGZpcnN0IHJlbW92ZSB0aGUKKwkgICAgbGlicmFyeSwgaW4gY2FzZSBpdCBpcyBpbiB1c2UsIGUuZy4sIDxjb2RlPmxpYm5jdXJzZXMuc288L2NvZGU+IGJ5CisJICAgIDxjb2RlPi9iaW4vc2g8L2NvZGU+LgorCisJPGxpPmNvcnJlY3QgY2hlY2sgZm9yIG5vdGltZW91dCgpIGluIHdnZXRjaCgpLgorCisJPGxpPmZpeCBhIHNpZ24tZXh0ZW5zaW9uIGJ1ZyBpbiBpbmZvY21wJ3MgcmVwYWlyX2Fjc2MoKSBmdW5jdGlvbi4KKworCTxsaT5jaGFuZ2Ugd2lubnN0cigpIHRvIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKworCTxsaT5tYWtlIEFkYTk1IGRlbW9fcGFuZWxzKCkgZXhhbXBsZSB3b3JrLgorCisJPGxpPmZpeCBmb3IgYWRkaW5nIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCisJPGxpPmZpbGwgaW4gZXh0ZW5kZWQtY29sb3IgcGFpciB0byBtYWtlIGNvbG9ycyB3b3JrCisJICAgIGZvciB3aWRlLWNoYXJhY3RlcnMgdXNpbmcgZXh0ZW5kZWQtY29sb3JzLgorCisJPGxpPmltcHJvdmUgcmVmcmVzaCBvZiB3aW5kb3cgb24gdG9wIG9mIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzLAorCSAgICB0YWtpbmcgaW50byBhY2NvdW50IHNwbGl0IGNoYXJhY3RlcnMgb24gbGVmdC9yaWdodCB3aW5kb3cKKwkgICAgYm91bmRhcmllcy4KKworCTxsaT5tb2RpZnkgPGNvZGU+d2luX3djaG5zdHIoKTwvY29kZT4gdG8gZW5zdXJlIHRoYXQgb25seSBhIGJhc2UgY2VsbAorCSAgICBpcyByZXR1cm5lZCBmb3IgZWFjaCBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyLgorCisJPGxpPmltcHJvdmUgPGNvZGU+d2FkZGNoKCk8L2NvZGU+IGFuZCA8Y29kZT53aW5zY2goKTwvY29kZT4gaGFuZGxpbmcgb2YKKwkgICAgRUlMU0VRIGZyb20gPGNvZGU+bWJydG93YygpPC9jb2RlPiBieSB1c2luZyA8Y29kZT51bmN0cmwoKTwvY29kZT4KKwkgICAgdG8gZGlzcGxheSBpbGxlZ2FsIGJ5dGVzIHJhdGhlciB0aGFuIHRyeWluZyB0byBhcHBlbmQgZnVydGhlciBieXRlcworCSAgICB0byBtYWtlIHVwIGEgdmFsaWQgc2VxdWVuY2UuCisKKwk8bGk+cmVzdG9yZSA8Y29kZT5jdXJzX3NldCgpPC9jb2RlPiBzdGF0ZSBhZnRlcgorCSAgICA8Y29kZT5lbmR3aW4oKTwvY29kZT4vPGNvZGU+cmVmcmVzaCgpPC9jb2RlPgorCisJPGxpPm1vZGlmeSA8Y29kZT5rZXluYW1lKCk8L2NvZGU+IHRvIHVzZSAiXlgiIGZvcm0gb25seSBpZgorCSAgICA8Y29kZT5tZXRhKCk8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCwgb3IgaWYgPGNvZGU+a2V5bmFtZSgpPC9jb2RlPgorCSAgICBpcyBjYWxsZWQgd2l0aG91dCBpbml0aWFsaXppbmcgY3Vyc2VzLCBlLmcuLCB2aWEKKwkgICAgPGNvZGU+aW5pdHNjcigpPC9jb2RlPiBvciA8Y29kZT5uZXd0ZXJtKCk8L2NvZGU+LgorCisJPGxpPm1vZGlmeSA8Y29kZT51bmN0cmwoKTwvY29kZT4gdG8gY2hlY2sgY29kZXMgaW4gMTI4LTI1NSByYW5nZSB2ZXJzdXMKKwkgICAgPGNvZGU+aXNwcmludCgpPC9jb2RlPi4KKwkgICAgSWYgdGhleSBhcmUgbm90IHByaW50YWJsZSwgYW5kIGxvY2FsZSB3YXMgc2V0LCB1c2UgYSAiTS0iIG9yICJ+IgorCSAgICBzZXF1ZW5jZS4KKworCTxsaT5pbXByb3ZlIDxjb2RlPnJlc2l6ZXRlcm0oKTwvY29kZT4gYnkgbW92aW5nIHJpcHBlZC1vZmYgbGluZXMsIGFuZAorCSAgICByZXBhaW50aW5nIHRoZSBzb2Z0LWtleXMuCisKKwk8bGk+bW9kaWZ5IGZvcm0gbGlicmFyeSB0byBhY2NlcHQgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgbmV3bGluZQorCSAgICBpbiBzZXRfZmllbGRfYnVmZmVyKCksIHdoaWNoIGlzIGNvbXBhdGlibGUgd2l0aCBTb2xhcmlzLgorCisJPGxpPnVzZSA8Y29kZT5OQ1VSU0VTX01PVVNFX01BU0soKTwvY29kZT4gaW4gZGVmaW5pdGlvbiBvZgorCSAgICA8Y29kZT5CVVRUT05fUkVMRUFTRSgpPC9jb2RlPiwgZXRjLiwgdG8gbWFrZSB0aG9zZSB3b3JrIHByb3Blcmx5CisJICAgIHdpdGggdGhlIDxjb2RlPi0tZW5hYmxlLWV4dC1tb3VzZTwvY29kZT4gY29uZmlndXJhdGlvbgorCisJPGxpPmNvcnJlY3Qgc29tZSBmdW5jdGlvbnMgaW4gQWRhOTUgYmluZGluZyB3aGljaCB3ZXJlIHVzaW5nIHJldHVybgorCSAgICB2YWx1ZSBmcm9tIEMgd2hlcmUgbm9uZSB3YXMgcmV0dXJuZWQuCisKKwk8bGk+cmV2aWV3ZWQvZml4ZWQgaXNzdWVzIHJlcG9ydGVkIGJ5IENvdmVyaXR5IGFuZCBLbG9jd29yayB0b29scy4KKzwvdWw+CisKK1BvcnRhYmlsaXR5OgorPHVsPgorICAgICAgICA8bGk+Y29uZmlndXJlIHNjcmlwdDoKKyAgICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPm5ldyBvcHRpb25zOgorICAgICAgICAgICAgPGRsPgorCisJICAgIDxkdD4tLWRpc2FibGUtYmlnLXN0cmluZ3MKKwkgICAgPGRkPmNvbnRyb2wgd2hldGhlciBzdGF0aWMgc3RyaW5nIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIGFzIHNpbmdsZQorCSAgICAgICAgbGFyZ2Ugc3RyaW5ncyAodG8gaW1wcm92ZSBzdGFydHVwIHBlcmZvcm1hbmNlKSwgb3IgYXMgYXJyYXkKKwkJb2YgaW5kaXZpZHVhbCBzdHJpbmdzLgorCisJICAgIDxkdD4tLWRpc2FibGUtcmVsaW5rCisJICAgIDxkZD5jb250cm9sIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyBhcmUgcmVsaW5rZWQgKGR1cmluZyBpbnN0YWxsKQorCQl3aGVuIHJwYXRoIGlzIGVuYWJsZWQuCisKKwkgICAgPGR0Pi0tZGlzYWJsZS10aWMtZGVwZW5kcworCSAgICA8ZGQ+bWFrZSBleHBsaWNpdCB3aGV0aGVyIHRpYyBsaWJyYXJ5IGRlcGVuZHMgb24gbmN1cnNlcy9uY3Vyc2VzdworCSAgICAgICAgbGlicmFyeS4KKworCSAgICA8ZHQ+LS1lbmFibGUtbWl4ZWQtY2FzZQorCSAgICA8ZGQ+b3ZlcnJpZGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQncyBjaGVjayBpZiB0aGUgZmlsZXN5c3RlbQorCQlzdXBwb3J0cyBtaXhlZC1jYXNlIGZpbGVuYW1lcy4KKwkgICAgICAgIFRoaXMgYWxsb3dzIG9uZSB0byBjb250cm9sIGhvdyB0aGUgdGVybWluYWwgZGF0YWJhc2UKKwkJbWFwcyB0byB0aGUgZmlsZXN5c3RlbS4KKwkJRm9yIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgbWl4ZWQtY2FzZSwgdGhlIGxpYnJhcnkKKwkJdXNlcyBnZW5lcmF0ZSAyLWNoYXJhY3RlciAoaGV4YWRlY2ltYWwpIGNvZGVzIGZvciB0aGUKKwkJbG93ZXItbGV2ZWwgb2YgdGhlIGZpbGVzeXN0ZW0gdGVybWluZm8gZGF0YWJhc2UKKworCSAgICA8ZHQ+LS1lbmFibGUtcmVlbnRyYW50CisJICAgIDxkZD5idWlsZHMgYSBkaWZmZXJlbnQgZmxhdm9yIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkgKG5jdXJzZXN0KQorCSAgICAgICAgd2hpY2ggaW1wcm92ZXMgcmVlbnRyYW50IHVzZSBvZiB0aGUKKwkJbGlicmFyeSBieSByZWR1Y2luZyBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMKKwkgICAgICAgIChzZWUgdGhlICItLXdpdGgtcHRocmVhZCIgb3B0aW9uIGZvciB0aGUgdGhyZWFkZWQgc3VwcG9ydCkuCisKKwkgICAgPGR0Pi0tZW5hYmxlLXdlYWstc3ltYm9scworCSAgICA8ZGQ+dXNlIHdlYWstc3ltYm9scyBmb3IgbGlua2luZyB0byB0aGUgUE9TSVggdGhyZWFkIGxpYnJhcnksCisJICAgICAgICBhbmQgdXNlIHRoZSBzYW1lIHNvbmFtZSBmb3IgdGhlIG5jdXJzZXMgc2hhcmVkIGxpYnJhcnkKKwkJYXMgdGhlIG5vcm1hbCBsaWJyYXJ5IChjYXZlYXQ6IHRoZSBBQkkgaXMgZm9yIHRoZSB0aHJlYWRlZAorCQlsaWJyYXJ5LCB3aGljaCBtYWtlcyBnbG9iYWwgZGF0YSBhY2Nlc3NlZCB2aWEgZnVuY3Rpb25zKS4KKworCSAgICA8ZHQ+LS13aXRoLXB0aHJlYWQKKwkgICAgPGRkPmJ1aWxkIHdpdGggdGhlIFBPU0lYIHRocmVhZCBsaWJyYXJ5ICh0ZXN0ZWQgd2l0aCBBSVgsCisJICAgICAgICBMaW51eCwgRnJlZUJTRCwgT3BlbkJTRCwgSFBVWCwgSVJJWDY0LCBTb2xhcmlzLCBUcnU2NCkuCisKKwkgICAgPGR0Pi0td2l0aC10aWNsaWIKKwkgICAgPGRkPmJ1aWxkL2luc3RhbGwgdGhlIHRpYy1zdXBwb3J0IGZ1bmN0aW9ucyBpbiBhIHNlcGFyYXRlIGxpYnJhcnkKKworICAgICAgICAgICAgPC9kbD4KKworCSAgPGxpPmltcHJvdmVkIG9wdGlvbnM6CisJICAgIDxkbD4KKworCSAgICA8ZHQ+LS1lbmFibGUtZXh0LWNvbG9ycworCSAgICA8ZGQ+cmVxdWlyZXMgdGhlIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisKKwkgICAgPGR0Pi0td2l0aC1jaHR5cGUKKwkgICAgPGRkPmlnbm9yZSBvcHRpb24gdmFsdWUgInVuc2lnbmVkIiBpcyBhbHdheXMgYWRkZWQgdG8KKwkJdGhlIHR5cGUgaW4gY3Vyc2VzLmg7IGRvIHRoZSBzYW1lIGZvciAtLXdpdGgtbW1hc2stdC4KKworCSAgICA8ZHQ+LS13aXRoLWRtYWxsb2MKKwkgICAgPGRkPmJ1aWxkLWZpeCBmb3IgcmVkZWZpbml0aW9uIG9mIDxjb2RlPnN0cm5kdXA8L2NvZGU+LgorCisJICAgIDxkdD4tLXdpdGgtaGFzaGVkLWRiCisJICAgIDxkZD5hY2NlcHRzIGEgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBpbnN0YWxsLXByZWZpeCBvZiBhIGdpdmVuCisJICAgICAgICBCZXJrZWxleSBEYXRhYmFzZS4KKworCSAgICA8ZHQ+LS13aXRoLWhhc2hlZC1kYgorCSAgICA8ZGQ+dGhlICRMSUJTIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyB0aGUgc2VhcmNoIGZvciB0aGUgZGIKKwkJbGlicmFyeS4KKworCSAgICA8ZHQ+LS13aXRob3V0LWhhc2hlZC1kYgorCSAgICA8ZGQ+YXNzdW1lZCB3aGVuICItLWRpc2FibGUtZGF0YWJhc2UiIGlzIHVzZWQuCisKKwkgICAgPC9kbD4KKworCTwvdWw+CisKKwk8bGk+b3RoZXIgY29uZmlndXJlL2J1aWxkIGlzc3VlczoKKwkgIDx1bD4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgTHlueE9TCisJICA8bGk+bW9kaWZ5IHNoYXJlZC1saWJyYXJ5IHJ1bGVzIHRvIGFsbG93IEZyZWVCU0QgMy54IHRvIHVzZSBycGF0aC4KKwkgIDxsaT5idWlsZC1maXggZm9yIEZyZWVCU0QgImNvbnRlbXBvcmFyeSIgVFRZIGludGVyZmFjZS4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgQUlYIHdpdGggbGlidG9vbC4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgRGFyd2luIGFuZCBsaWJ0b29sLgorCSAgPGxpPm1vZGlmeSBCZU9TLXNwZWNpZmljIGlmZGVmJ3MgdG8gYnVpbGQgb24gSGFpa3UuCisJICA8bGk+Y29ycmVjdGVkIGdjYyBvcHRpb25zIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMKKwkgICAgICBhbmQgSVJJWDY0LgorCSAgPGxpPmNoYW5nZSBzaGFyZWQtbGlicmFyeSBjb25maWd1cmF0aW9uIGZvciBPcGVuQlNELCBtYWtlIHJwYXRoIHdvcmsuCisJICA8bGk+YnVpbGQtZml4ZXMgZm9yIHVzaW5nIGxpYnV0ZjgsIGUuZy4sIG9uIE9wZW5CU0QgMy43CisJICA8bGk+YWRkICItZSIgb3B0aW9uIGluIG5jdXJzZXMvTWFrZWZpbGUuaW4gd2hlbiBnZW5lcmF0aW5nIHNvdXJjZS1maWxlcworCSAgICAgIHRvIGZvcmNlIGVhcmxpZXIgZXhpdCBpZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgZmFpbHMgdW5leHBlY3RlZGx5LgorCSAgPGxpPmFkZCBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGZvciBRTlguCisJICA8bGk+Y2hhbmdlIGRlbGltaXRlciBpbiA8Y29kZT5NS2xpYl9nZW4uc2g8L2NvZGU+IGZyb20gJyUnIHRvICdAJywgdG8KKwkgICAgICBhdm9pZCBzdWJzdGl0dXRpb24gYnkgSUJNIHhsYyB0byAnIycgYXMgcGFydCBvZiBpdHMgZXh0ZW5zaW9ucyB0bworCSAgICAgIGRpZ3JhcGhzLgorCTwvdWw+CisKKwk8bGk+bGlicmFyeToKKwk8dWw+CisJPGxpPnJld3JpdGUgd3JhcHBlciBmb3IgPGNvZGU+d2NydG9tYigpPC9jb2RlPiwgbWFraW5nIGl0IHdvcmsgb24KKwkgICAgU29sYXJpcy4gIFRoaXMgaXMgdXNlZCBpbiB0aGUgZm9ybSBsaWJyYXJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoCisJICAgIG9mIHRoZSBidWZmZXIgbmVlZGVkIGJ5IDxjb2RlPmZpZWxkX2J1ZmZlcjwvY29kZT4uCisJPGxpPmFkZC91c2UgY29uZmlndXJlIHNjcmlwdCBtYWNybyBDRl9TSUdfQVRPTUlDX1QsIHVzZSB0aGUgY29ycmVzcG9uZGluZworCSAgICB0eXBlIGZvciBkYXRhIG1hbmlwdWxhdGVkIGJ5IHNpZ25hbCBoYW5kbGVycy4KKwk8bGk+c2V0IGxvY2FsZSBpbiBtaXNjL25jdXJzZXMtY29uZmlnLmluIHNpbmNlIGl0IHVzZXMgYSByYW5nZQorCTxsaT5kaXNhYmxlIEdQTSBtb3VzZSBzdXBwb3J0IHdoZW4gJFRFUk0gZG9lcyBub3QgaGFwcGVuIHRvIGNvbnRhaW4KKwkgICAgImxpbnV4Iiwgc2luY2UgR3BtX09wZW4oKSBubyBsb25nZXIgbGltaXRzIGl0cyBhc3NlcnRpb24gdG8gdGVybWluYWxzCisJICAgIHRoYXQgaXQgbWlnaHQgaGFuZGxlLCBlLmcuLCB3aXRoaW4gInNjcmVlbiIgaW4geHRlcm0uCisJPGxpPnJlc2V0IG1vdXNlIGZpbGUtZGVzY3JpcHRvciB3aGVuIHVubG9hZGluZyBHUE0gbGlicmFyeS4KKwk8L3VsPgorCisJPGxpPnRlc3QgcHJvZ3JhbXM6CisJPHVsPgorCTxsaT51cGRhdGUgdGVzdCBwcm9ncmFtcyB0byBidWlsZC93b3JrIHdpdGggdmFyaW91cyBVTklYIGN1cnNlcyBmb3IKKwkgICAgY29tcGFyaXNvbnMuCisJPC91bD4KKzwvdWw+CisKKzxIMT5GZWF0dXJlcyBvZiBOY3Vyc2VzPC9IMT4KKworVGhlIG5jdXJzZXMgcGFja2FnZSBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggU1ZyNCAoU3lzdGVtIFYgUmVsZWFzZSA0KSBjdXJzZXM6CisKKzxVTD4KKzxMST5BbGwgMjU3IG9mIHRoZSBTVnI0IGNhbGxzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCAoYW5kIGFyZSBkb2N1bWVudGVkKS4KKzxMST5GdWxsIHN1cHBvcnQgZm9yIFNWcjQgY3Vyc2VzIGZlYXR1cmVzIGluY2x1ZGluZyBrZXlib2FyZCBtYXBwaW5nLCBjb2xvciwKK2Zvcm1zLWRyYXdpbmcgd2l0aCBBQ1MgY2hhcmFjdGVycywgYW5kIGF1dG9tYXRpYyByZWNvZ25pdGlvbiBvZiBrZXlwYWQKK2FuZCBmdW5jdGlvbiBrZXlzLgorPExJPkFuIGVtdWxhdGlvbiBvZiB0aGUgU1ZyNCBwYW5lbHMgbGlicmFyeSwgc3VwcG9ydGluZworYSBzdGFjayBvZiB3aW5kb3dzIHdpdGggYmFja2luZyBzdG9yZSwgaXMgaW5jbHVkZWQuCis8TEk+QW4gZW11bGF0aW9uIG9mIHRoZSBTVnI0IG1lbnVzIGxpYnJhcnksIHN1cHBvcnRpbmcKK2EgdW5pZm9ybSBidXQgZmxleGlibGUgaW50ZXJmYWNlIGZvciBtZW51IHByb2dyYW1taW5nLCBpcyBpbmNsdWRlZC4KKzxMST5BbiBlbXVsYXRpb24gb2YgdGhlIFNWcjQgZm9ybSBsaWJyYXJ5LCBzdXBwb3J0aW5nCitkYXRhIGNvbGxlY3Rpb24gdGhyb3VnaCBvbi1zY3JlZW4gZm9ybXMsIGlzIGluY2x1ZGVkLgorPExJPkJpbmFyeSB0ZXJtaW5mbyBlbnRyaWVzIGdlbmVyYXRlZCBieSB0aGUgbmN1cnNlcyB0aWMoMSkgaW1wbGVtZW50YXRpb24KK2FyZSBiaXQtZm9yLWJpdC1jb21wYXRpYmxlIHdpdGggdGhlIGVudHJ5IGZvcm1hdCBTVnI0IGN1cnNlcyB1c2VzLgorPExJPlRoZSB1dGlsaXRpZXMgaGF2ZSBvcHRpb25zIHRvIGFsbG93IHlvdSB0byBmaWx0ZXIgdGVybWluZm8KK2VudHJpZXMgZm9yIHVzZSB3aXRoIGxlc3MgY2FwYWJsZSA8U1RST05HPmN1cnNlczwvU1RST05HPi88U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+Cit2ZXJzaW9ucyBzdWNoIGFzIHRoZSBIUC9VWCBhbmQgQUlYIHBvcnRzLjwvVUw+CisKK1RoZSBuY3Vyc2VzIHBhY2thZ2UgYWxzbyBoYXMgbWFueSB1c2VmdWwgZXh0ZW5zaW9ucyBvdmVyIFNWcjQ6CisKKzxVTD4KKzxMST5UaGUgQVBJIGlzIDgtYml0IGNsZWFuIGFuZCBiYXNlLWxldmVsIGNvbmZvcm1hbnQgd2l0aCB0aGUgWC9PUEVOIGN1cnNlcworc3BlY2lmaWNhdGlvbiwgWFNJIGN1cnNlcyAodGhhdCBpcywgaXQgaW1wbGVtZW50cyBhbGwgQkFTRSBsZXZlbCBmZWF0dXJlcywKK2FuZCBtb3N0IEVYVEVOREVEIGZlYXR1cmVzKS4KK0l0IGluY2x1ZGVzIG1hbnkgZnVuY3Rpb24gY2FsbHMgbm90IHN1cHBvcnRlZCB1bmRlciBTVnI0IGN1cnNlcworKGJ1dCBwb3J0YWJpbGl0eSBvZiBhbGwKK2NhbGxzIGlzIGRvY3VtZW50ZWQgc28geW91IGNhbiB1c2UgdGhlIFNWcjQgc3Vic2V0IG9ubHkpLgorPExJPlVubGlrZSBTVnIzIGN1cnNlcywgbmN1cnNlcyBjYW4gd3JpdGUgdG8gdGhlIHJpZ2h0bW9zdC1ib3R0b21tb3N0IGNvcm5lcgorb2YgdGhlIHNjcmVlbiBpZiB5b3VyIHRlcm1pbmFsIGhhcyBhbiBpbnNlcnQtY2hhcmFjdGVyIGNhcGFiaWxpdHkuCis8TEk+QWRhOTUgYW5kIEMrKyBiaW5kaW5ncy4KKzxMST5TdXBwb3J0IGZvciBtb3VzZSBldmVudCByZXBvcnRpbmcgd2l0aCBYIFdpbmRvdyB4dGVybQorYW5kIEZyZWVCU0QgYW5kIE9TLzIgY29uc29sZSB3aW5kb3dzLgorPExJPkV4dGVuZGVkIG1vdXNlIHN1cHBvcnQgdmlhIEFsZXNzYW5kcm8gUnViaW5pJ3MgZ3BtIHBhY2thZ2UuCis8TEk+VGhlIGZ1bmN0aW9uIDxDT0RFPndyZXNpemUoKTwvQ09ERT4gYWxsb3dzIHlvdSB0byByZXNpemUgd2luZG93cywgcHJlc2VydmluZwordGhlaXIgZGF0YS4KKzxMST5UaGUgZnVuY3Rpb24gPENPREU+dXNlX2RlZmF1bHRfY29sb3JzKCk8L0NPREU+IGFsbG93cyB5b3UgdG8KK3VzZSB0aGUgdGVybWluYWwncyBkZWZhdWx0IGNvbG9ycyBmb3IgdGhlIGRlZmF1bHQgY29sb3IgcGFpciwKK2FjaGlldmluZyB0aGUgZWZmZWN0IG9mIHRyYW5zcGFyZW50IGNvbG9ycy4KKzxMST5UaGUgZnVuY3Rpb25zIDxDT0RFPmtleW9rKCk8L0NPREU+CithbmQgPENPREU+ZGVmaW5lX2tleSgpPC9DT0RFPiBhbGxvdworeW91IHRvIGJldHRlciBjb250cm9sIHRoZSB1c2Ugb2YgZnVuY3Rpb24ga2V5cywKK2UuZy4sIGRpc2FibGluZyB0aGUgbmN1cnNlcyBLRVlfTU9VU0UsCitvciBieSBkZWZpbmluZyBtb3JlIHRoYW4gb25lIGNvbnRyb2wgc2VxdWVuY2UgdG8gbWFwIHRvIGEgZ2l2ZW4ga2V5IGNvZGUuCis8TEk+U3VwcG9ydCBmb3IgMjU2LWNvbG9yIHRlcm1pbmFscywgc3VjaCBhcyBtb2Rlcm4geHRlcm0sIHdoZW4gY29uZmlndXJlZAordXNpbmcgdGhlIDxjb2RlPi0tZW5hYmxlLWV4dC1jb2xvcnM8L2NvZGU+IG9wdGlvbi4KKzxMST5TdXBwb3J0IGZvciAxNi1jb2xvciB0ZXJtaW5hbHMsIHN1Y2ggYXMgYWl4dGVybSBhbmQgbW9kZXJuIHh0ZXJtLgorPExJPkJldHRlciBjdXJzb3ItbW92ZW1lbnQgb3B0aW1pemF0aW9uLiAgVGhlIHBhY2thZ2Ugbm93IGZlYXR1cmVzIGEKK2N1cnNvci1sb2NhbC1tb3ZlbWVudCBjb21wdXRhdGlvbiBtb3JlIGVmZmljaWVudCB0aGFuIGVpdGhlciBCU0Qncworb3IgU3lzdGVtIFYncy4KKzxMST5TdXBlciBoYXJkd2FyZSBzY3JvbGxpbmcgc3VwcG9ydC4gIFRoZSBzY3JlZW4tdXBkYXRlIGNvZGUgaW5jb3Jwb3JhdGVzCithIG5vdmVsLCBzaW1wbGUsIGFuZCBjaGVhcCBhbGdvcml0aG0gdGhhdCBlbmFibGVzIGl0IHRvIG1ha2Ugb3B0aW1hbAordXNlIG9mIGhhcmR3YXJlIHNjcm9sbGluZywgbGluZS1pbnNlcnRpb24sIGFuZCBsaW5lLWRlbGV0aW9uCitmb3Igc2NyZWVuLWxpbmUgbW92ZW1lbnRzLiAgVGhpcyBhbGdvcml0aG0gaXMgbW9yZSBwb3dlcmZ1bCB0aGFuCit0aGUgNC40QlNEIGN1cnNlcyBxdWlja2NoKCkgcm91dGluZS4KKzxMST5SZWFsIHN1cHBvcnQgZm9yIHRlcm1pbmFscyB3aXRoIHRoZSBtYWdpYy1jb29raWUgZ2xpdGNoLiAgVGhlCitzY3JlZW4tdXBkYXRlIGNvZGUgd2lsbCByZWZyYWluIGZyb20gZHJhd2luZyBhIGhpZ2hsaWdodCBpZiB0aGUgbWFnaWMtCitjb29raWUgdW5hdHRyaWJ1dGVkIHNwYWNlcyByZXF1aXJlZCBqdXN0IGJlZm9yZSB0aGUgYmVnaW5uaW5nIGFuZAorYWZ0ZXIgdGhlIGVuZCB3b3VsZCBzdGVwIG9uIGEgbm9uLXNwYWNlIGNoYXJhY3Rlci4gIEl0IHdpbGwKK2F1dG9tYXRpY2FsbHkgc2hpZnQgaGlnaGxpZ2h0IGJvdW5kYXJpZXMgd2hlbiBkb2luZyBzbyB3b3VsZCBtYWtlIGl0Citwb3NzaWJsZSB0byBkcmF3IHRoZSBoaWdobGlnaHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmlzdWFsIGFwcGVhcmFuY2UKK29mIHRoZSBzY3JlZW4uCis8TEk+SXQgaXMgcG9zc2libGUgdG8gZ2VuZXJhdGUgdGhlIGxpYnJhcnkgd2l0aCBhIGxpc3Qgb2YgcHJlLWxvYWRlZAorZmFsbGJhY2sgZW50cmllcyBsaW5rZWQgdG8gaXQgc28gdGhhdCBpdCBjYW4gc2VydmUgdGhvc2UgdGVybWluYWwgdHlwZXMgZXZlbgord2hlbiBubyB0ZXJtaW5mbyB0cmVlIG9yIHRlcm1jYXAgZmlsZSBpcyBhY2Nlc3NpYmxlICh0aGlzIG1heSBiZSB1c2VmdWwKK2ZvciBzdXBwb3J0IG9mIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtcyB0aGF0IG11c3QgcnVuIGluIHNpbmdsZS11c2VyIG1vZGUpLgorPExJPlRoZSB0aWMoMSkvY2FwdG9pbmZvIHV0aWxpdHkgcHJvdmlkZWQgd2l0aCBuY3Vyc2VzIGhhcyB0aGUKK2FiaWxpdHkgdG8gdHJhbnNsYXRlIG1hbnkgdGVybWNhcHMgZnJvbSB0aGUgWEVOSVgsIElCTSBhbmQKK0FUJmFtcDtUIGV4dGVuc2lvbiBzZXRzLgorPExJPkEgQlNELWxpa2UgdHNldCgxKSB1dGlsaXR5IGlzIHByb3ZpZGVkLgorPExJPlRoZSBuY3Vyc2VzIGxpYnJhcnkgYW5kIHV0aWxpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVhZCB0ZXJtaW5mbworZW50cmllcyBmcm9tICRIT01FLy50ZXJtaW5mbyBpZiBpdCBleGlzdHMsIGFuZCBjb21waWxlIHRvIHRoYXQgZGlyZWN0b3J5CitpZiBpdCBleGlzdHMgYW5kIHRoZSB1c2VyIGhhcyBubyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBkaXJlY3RvcnkuCitUaGlzIGZlYXR1cmUgbWFrZXMgaXQgZWFzaWVyIGZvciB1c2VycyB0byBoYXZlIHBlcnNvbmFsIHRlcm1pbmZvIGVudHJpZXMKK3dpdGhvdXQgZ2l2aW5nIHVwIGFjY2VzcyB0byB0aGUgc3lzdGVtIHRlcm1pbmZvIGRpcmVjdG9yeS4KKzxMST5Zb3UgbWF5IHNwZWNpZnkgYSBwYXRoIG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgY29tcGlsZWQKK2Rlc2NyaXB0aW9ucyB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNSU5GT19ESVJTICh0aGlzCitnZW5lcmFsaXplcyB0aGUgZmVhdHVyZSBwcm92aWRlZCBieSBURVJNSU5GTyB1bmRlciBzdG9jayBTeXN0ZW0gVi4pCis8TEk+SW4gdGVybWluZm8gc291cmNlIGZpbGVzLCB1c2UgY2FwYWJpbGl0aWVzIG1heSByZWZlciBub3QganVzdCB0bworb3RoZXIgZW50cmllcyBpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZSAoYXMgaW4gU3lzdGVtIFYpIGJ1dCBhbHNvIHRvCitjb21waWxlZCBlbnRyaWVzIGluIGVpdGhlciB0aGUgc3lzdGVtIHRlcm1pbmZvIGRpcmVjdG9yeSBvciB0aGUgdXNlcidzCiskSE9NRS8udGVybWluZm8gZGlyZWN0b3J5LgorPExJPkEgc2NyaXB0ICg8U1RST05HPmNhcGNvbnZlcnQ8L1NUUk9ORz4pIGlzIHByb3ZpZGVkIHRvIGhlbHAgQlNEIHVzZXJzCit0cmFuc2l0aW9uIGZyb20gdGVybWNhcCB0byB0ZXJtaW5mby4gIEl0IGdhdGhlcnMgdGhlIGluZm9ybWF0aW9uIGluIGEKK1RFUk1DQVAgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kL29yIGEgfi8udGVybWNhcCBsb2NhbCBlbnRyaWVzIGZpbGUKK2FuZCBjb252ZXJ0cyBpdCB0byBhbiBlcXVpdmFsZW50IGxvY2FsIHRlcm1pbmZvIHRyZWUgdW5kZXIgJEhPTUUvLnRlcm1pbmZvLgorPExJPkF1dG9tYXRpYyBmYWxsYmFjayB0byB0aGUgL2V0Yy90ZXJtY2FwIGZpbGUgY2FuIGJlIGNvbXBpbGVkIGluCit3aGVuIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBidWlsZCBhIHRlcm1pbmZvIHRyZWUuICBUaGlzIGZlYXR1cmUgaXMgbmVpdGhlcgorZmFzdCBub3IgY2hlYXAsIHlvdSBkb24ndCB3YW50IHRvIHVzZSBpdCB1bmxlc3MgeW91IGhhdmUgdG8sCitidXQgaXQncyB0aGVyZS4KKzxMST5UaGUgdGFibGUtb2YtZW50cmllcyB1dGlsaXR5IDxTVFJPTkc+dG9lPC9TVFJPTkc+IG1ha2VzIGl0IGVhc3kgZm9yIHVzZXJzIHRvCitzZWUgZXhhY3RseSB3aGF0IHRlcm1pbmFsIHR5cGVzIGFyZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4KKzxMST5UaGUgbGlicmFyeSBtZWV0cyB0aGUgWFNJIHJlcXVpcmVtZW50IHRoYXQgZXZlcnkgbWFjcm8gZW50cnkKK3BvaW50IGhhdmUgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHdoaWNoIG1heSBiZSBsaW5rZWQgKGFuZCB3aWxsIGJlCitwcm90b3R5cGUtY2hlY2tlZCkgaWYgdGhlIG1hY3JvIGRlZmluaXRpb24gaXMgZGlzYWJsZWQgd2l0aAorPENPREU+I3VuZGVmPC9DT0RFPi4KKzxMST5BbiBIVE1MICJJbnRyb2R1Y3Rpb24gdG8gUHJvZ3JhbW1pbmcgd2l0aCBOQ1VSU0VTIiBkb2N1bWVudCBwcm92aWRlcworYSBuYXJyYXRpdmUgaW50cm9kdWN0aW9uIHRvIHRoZSBjdXJzZXMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgorPC9VTD4KKworPEgxPlN0YXRlIG9mIHRoZSBQYWNrYWdlPC9IMT4KKworTnVtZXJvdXMgYnVncyBwcmVzZW50IGluIGVhcmxpZXIgdmVyc2lvbnMgaGF2ZSBiZWVuIGZpeGVkOyB0aGUKK2xpYnJhcnkgaXMgZmFyIG1vcmUgcmVsaWFibGUgdGhhbiBpdCB1c2VkIHRvIGJlLiAgQm91bmRzIGNoZWNraW5nIGluIG1hbnkKK2BkYW5nZXJvdXMnIGVudHJ5IHBvaW50cyBoYXMgYmVlbiBpbXByb3ZlZC4gIFRoZSBjb2RlIGlzIG5vdyB0eXBlLXNhZmUKK2FjY29yZGluZyB0byBnY2MgLVdhbGwuICBUaGUgbGlicmFyeSBoYXMgYmVlbiBjaGVja2VkIGZvciBtYWxsb2MgbGVha3MgYW5kCithcmVuYSBjb3JydXB0aW9uIGJ5IHRoZSBQdXJpZnkgbWVtb3J5LWFsbG9jYXRpb24gdGVzdGVyLjxQPgorCitUaGUgbmN1cnNlcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucworaW5jbHVkaW5nICh2ZXJzaW9ucyBzdGFydGluZyB3aXRoIHRob3NlIG5vdGVkKToKKzxETD4KKzxEVD4gY2RrCis8REQ+IEN1cnNlcyBEZXZlbG9wbWVudCBLaXQKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLzwvQT4KKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly93d3cudmV4dXMuY2EvcHJvZHVjdHMvQ0RLLyI+aHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvPC9hPgorPERUPiBkZWQKKzxERD4gZGlyZWN0b3J5LWVkaXRvcgorPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RlZC8iPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kZWQvPC9BPgorPERUPiBkaWFsb2cKKzxERD4gdGhlIHVuZGVybHlpbmcgYXBwbGljYXRpb24gdXNlZCBpbiBTbGFja3dhcmUncyBzZXR1cCwgYW5kIHRoZSBiYXNpcworZm9yIHNpbWlsYXIgYXBwbGljYXRpb25zIG9uIEdOVS9MaW51eC4KKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWFsb2cvIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlhbG9nLzwvQT4KKzxEVD4gbHlueAorPEREPiB0aGUgY2hhcmFjdGVyLXNjcmVlbiBXV1cgYnJvd3NlcgorPGJyPgorPEEgSFJFRj0iaHR0cDovL2x5bnguaXNjLm9yZy9yZWxlYXNlLyI+aHR0cDovL2x5bnguaXNjLm9yZy9yZWxlYXNlLzwvQT4KKzxEVD4gTWlkbmlnaHQgQ29tbWFuZGVyCis8REQ+IGZpbGUgbWFuYWdlcgorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5pYmlibGlvLm9yZy9tYy8iPmh0dHA6Ly93d3cuaWJpYmxpby5vcmcvbWMvPC9BPgorPERUPiBtdXR0Cis8REQ+IG1haWwgdXRpbGl0eQorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5tdXR0Lm9yZy8iPmh0dHA6Ly93d3cubXV0dC5vcmcvPC9BPgorPERUPiBuY2Z0cAorPEREPiBmaWxlLXRyYW5zZmVyIHV0aWxpdHkKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly93d3cubmNmdHAuY29tLyI+aHR0cDovL3d3dy5uY2Z0cC5jb20vPC9BPgorPERUPiBudmkKKzxERD4gTmV3IHZpIHZlcnNpb25zIDEuNTAgYXJlIGFibGUgdG8gdXNlIG5jdXJzZXMgdmVyc2lvbnMgMS45LjcgYW5kIGxhdGVyLgorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5ib3N0aWMuY29tL3ZpLyI+aHR0cDovL3d3dy5ib3N0aWMuY29tL3ZpLzwvQT4KKzxicj4KKzxEVD4gcGluZm8KKzxERD4gTHlueC1saWtlIGluZm8gYnJvd3Nlci4KKzxBIEhSRUY9Imh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvcGluZm8vIj5odHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL3BpbmZvLzwvQT4KKzxEVD4gdGluCis8REQ+IG5ld3NyZWFkZXIsIHN1cHBvcnRpbmcgY29sb3IsIE1JTUUKKzxBIEhSRUY9Imh0dHA6Ly93d3cudGluLm9yZy8iPmh0dHA6Ly93d3cudGluLm9yZy88L0E+Cis8L0RMPgorYXMgd2VsbCBhcyBzb21lIHRoYXQgdXNlIG5jdXJzZXMgZm9yIHRoZSB0ZXJtaW5mbyBzdXBwb3J0IGFsb25lOgorPERMPgorPERUPiBtaW5pY29tCis8REQ+IHRlcm1pbmFsIGVtdWxhdG9yCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS8iPgoraHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL21pbmljb20vPC9BPgorPERUPiB2aWxlCis8REQ+IHZpLWxpa2UtZW1hY3MKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC92aWxlLyI+aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3ZpbGUvPC9BPgorPC9ETD4KKzxQPgorCitUaGUgbmN1cnNlcyBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBzZWxlY3Rpb24gb2YgdGVzdCBwcm9ncmFtcyAoaW5jbHVkaW5nCithIGZldyBnYW1lcykuCisKKzxIMj5XaG8ncyBXaG8gYW5kIFdoYXQncyBXaGF0PC9IMj4KKworWmV5ZCBCZW4tSGFsaW0KK3N0YXJ0ZWQgaXQgZnJvbSBhIHByZXZpb3VzIHBhY2thZ2UgcGN1cnNlcywgd3JpdHRlbiBieSBQYXZlbCBDdXJ0aXMuCitFcmljIFMuIFJheW1vbmQKK2NvbnRpbnVlZCBkZXZlbG9wbWVudC4KK0omdXVtbDtyZ2VuIFBmZWlmZXIgd3JvdGUgbW9zdCBvZiB0aGUgZm9ybSBhbmQgbWVudSBsaWJyYXJpZXMuCitPbmdvaW5nIHdvcmsgaXMgYmVpbmcgZG9uZSBieQorPEEgSFJFRj0ibWFpbHRvOmRpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldCI+VGhvbWFzIERpY2tleTwvQT4uCitUaG9tYXMgRGlja2V5CithY3RzIGFzIHRoZSBtYWludGFpbmVyIGZvciB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAord2hpY2ggaG9sZHMgdGhlIGNvcHlyaWdodCBvbiBuY3Vyc2VzLgorQ29udGFjdCB0aGUgY3VycmVudCBtYWludGFpbmVycyBhdAorPEEgSFJFRj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPmJ1Zy1uY3Vyc2VzQGdudS5vcmc8L0E+LgorPFA+CisKK1RvIGpvaW4gdGhlIG5jdXJzZXMgbWFpbGluZyBsaXN0LCBwbGVhc2Ugd3JpdGUgZW1haWwgdG8KKzxDT0RFPmJ1Zy1uY3Vyc2VzLXJlcXVlc3RAZ251Lm9yZzwvQ09ERT4gY29udGFpbmluZyB0aGUgbGluZToKKzxQUkU+CisgICAgICAgICAgICAgc3Vic2NyaWJlICZsdDtuYW1lJmd0O0AmbHQ7aG9zdC5kb21haW4mZ3Q7Cis8L1BSRT4KKworVGhpcyBsaXN0IGlzIG9wZW4gdG8gYW55b25lIGludGVyZXN0ZWQgaW4gaGVscGluZyB3aXRoIHRoZSBkZXZlbG9wbWVudCBhbmQKK3Rlc3Rpbmcgb2YgdGhpcyBwYWNrYWdlLjxQPgorCitCZXRhIHZlcnNpb25zIG9mIG5jdXJzZXMgYW5kIHBhdGNoZXMgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZSBhcmUgbWFkZSBhdmFpbGFibGUgYXQKKzxBIEhSRUY9ImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvIj5mdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLzwvQT4mbmJzcDsuCisKKzxIMj5GdXR1cmUgUGxhbnM8L0gyPgorPFVMPgorPExJPkV4dGVuZGVkLWxldmVsIFhQRzQgY29uZm9ybWFuY2UsIHdpdGggaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydC4KKzxMST5Qb3J0cyB0byBtb3JlIHN5c3RlbXMsIGluY2x1ZGluZyBET1MgYW5kIFdpbmRvd3MuCis8L1VMPgorV2UgbmVlZCBwZW9wbGUgdG8gaGVscCB3aXRoIHRoZXNlIHByb2plY3RzLiAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHdvcmtpbmcKK29uIHRoZW0sIHBsZWFzZSBqb2luIHRoZSBuY3Vyc2VzIGxpc3QuCisKKzxIMj5PdGhlciBSZWxhdGVkIFJlc291cmNlczwvSDI+CisKK1RoZSBkaXN0cmlidXRpb24gcHJvdmlkZXMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5mby1mb3JtYXQKK3Rlcm1pbmFsIGRlc2NyaXB0aW9uIGZpbGUgb25jZSBtYWludGFpbmVkIGJ5Cis8QSBIUkVGPSJodHRwOi8vd3d3LmNhdGIub3JnL35lc3IvdGVybWluZm8vIj5FcmljIFJheW1vbmQ8L0E+Jm5ic3A7LgorVW5saWtlIHRoZSBvbGRlciB2ZXJzaW9uLCB0aGUgdGVybWNhcCBhbmQgdGVybWluZm8gZGF0YSBhcmUgcHJvdmlkZWQKK2luIHRoZSBzYW1lIGZpbGUsIGFuZCBwcm92aWRlcyBzZXZlcmFsIHVzZXItZGVmaW5hYmxlIGV4dGVuc2lvbnMKK2JleW9uZCB0aGUgWC9PcGVuIHNwZWNpZmljYXRpb24uPFA+CisKK1lvdSBjYW4gZmluZCBsb3RzIG9mIGluZm9ybWF0aW9uIG9uIHRlcm1pbmFsLXJlbGF0ZWQgdG9waWNzCitub3QgY292ZXJlZCBpbiB0aGUgdGVybWluZm8gZmlsZSBhdAorPEEgSFJFRj0iaHR0cDovL3d3dy5jcy51dGsuZWR1L35zaHVmb3JkL3Rlcm1pbmFsX2luZGV4Lmh0bWwiPlJpY2hhcmQgU2h1Zm9yZCdzCithcmNoaXZlPC9BPiZuYnNwOy4KKzwvQk9EWT4KKzwvSFRNTD4KKzwhLS0KKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6aHRtbAorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyBmaWxsLWNvbHVtbjo3MAorIyBFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2hhY2tndWlkZS5odG1sIGIvZG9jL2h0bWwvaGFja2d1aWRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkMTM2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2hhY2tndWlkZS5odG1sCkBAIC0wLDAgKzEsOTE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDMuMC8vRU4iPgorPCEtLQorICAkSWQ6IGhhY2tndWlkZS5odG1sLHYgMS4yNyAyMDA1LzEyLzI0IDE1OjM3OjEzIHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPkEgSGFja2VyJ3MgR3VpZGUgdG8gTmN1cnNlcyBJbnRlcm5hbHM8L1RJVExFPgorPGxpbmsgcmV2PSJtYWRlIiBocmVmPSJtYWlsdG86YnVncy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8IS0tCitUaGlzIGRvY3VtZW50IGlzIHNlbGYtY29udGFpbmVkLCAqZXhjZXB0KiB0aGF0IHRoZXJlIGlzIG9uZSByZWxhdGl2ZSBsaW5rIHRvCit0aGUgbmN1cnNlcy1pbnRyby5odG1sIGRvY3VtZW50LCBleHBlY3RlZCB0byBiZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2l0aAordGhpcyBvbmUuCistLT4KKzwvSEVBRD4KKzxCT0RZPgorCis8SDE+QSBIYWNrZXIncyBHdWlkZSB0byBOQ1VSU0VTPC9IMT4KKworPEgxPkNvbnRlbnRzPC9IMT4KKzxVTD4KKzxMST48QSBIUkVGPSIjYWJzdHJhY3QiPkFic3RyYWN0PC9BPgorPExJPjxBIEhSRUY9IiNvYmplY3RpdmUiPk9iamVjdGl2ZSBvZiB0aGUgUGFja2FnZTwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjd2h5c3ZyNCI+V2h5IFN5c3RlbSBWIEN1cnNlcz88L0E+Cis8TEk+PEEgSFJFRj0iI2V4dGVuc2lvbnMiPkhvdyB0byBEZXNpZ24gRXh0ZW5zaW9uczwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI3BvcnRhYmlsaXR5Ij5Qb3J0YWJpbGl0eSBhbmQgQ29uZmlndXJhdGlvbjwvQT4KKzxMST48QSBIUkVGPSIjZG9jdW1lbnRhdGlvbiI+RG9jdW1lbnRhdGlvbiBDb252ZW50aW9uczwvQT4KKzxMST48QSBIUkVGPSIjYnVndHJhY2siPkhvdyB0byBSZXBvcnQgQnVnczwvQT4KKzxMST48QSBIUkVGPSIjbmN1cnNsaWIiPkEgVG91ciBvZiB0aGUgTmN1cnNlcyBMaWJyYXJ5PC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNsb3ZlcnZpZXciPkxpYnJhcnkgT3ZlcnZpZXc8L0E+Cis8TEk+PEEgSFJFRj0iI2VuZ2luZSI+VGhlIEVuZ2luZSBSb29tPC9BPgorPExJPjxBIEhSRUY9IiNpbnB1dCI+S2V5Ym9hcmQgSW5wdXQ8L0E+Cis8TEk+PEEgSFJFRj0iI21vdXNlIj5Nb3VzZSBFdmVudHM8L0E+Cis8TEk+PEEgSFJFRj0iI291dHB1dCI+T3V0cHV0IGFuZCBTY3JlZW4gVXBkYXRpbmc8L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiNmbW5vdGUiPlRoZSBGb3JtcyBhbmQgTWVudSBMaWJyYXJpZXM8L0E+Cis8TEk+PEEgSFJFRj0iI3RpYyI+QSBUb3VyIG9mIHRoZSBUZXJtaW5mbyBDb21waWxlcjwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjbm9udXNlIj5UcmFuc2xhdGlvbiBvZiBOb24tPFNUUk9ORz51c2U8L1NUUk9ORz4gQ2FwYWJpbGl0aWVzPC9BPgorPExJPjxBIEhSRUY9IiN1c2VzIj5Vc2UgQ2FwYWJpbGl0eSBSZXNvbHV0aW9uPC9BPgorPExJPjxBIEhSRUY9IiN0cmFuc2xhdGlvbiI+U291cmNlLUZvcm0gVHJhbnNsYXRpb248L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiN1dGlscyI+T3RoZXIgVXRpbGl0aWVzPC9BPgorPExJPjxBIEhSRUY9IiNzdHlsZSI+U3R5bGUgVGlwcyBmb3IgRGV2ZWxvcGVyczwvQT4KKzxMST48QSBIUkVGPSIjcG9ydCI+UG9ydGluZyBIaW50czwvQT4KKzwvVUw+CisKKzxIMT48QSBOQU1FPSJhYnN0cmFjdCI+QWJzdHJhY3Q8L0E+PC9IMT4KKworVGhpcyBkb2N1bWVudCBpcyBhIGhhY2tlcidzIHRvdXIgb2YgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGFuZCB1dGlsaXRpZXMuCitJdCBkaXNjdXNzZXMgZGVzaWduIHBoaWxvc29waHksIGltcGxlbWVudGF0aW9uIG1ldGhvZHMsIGFuZCB0aGUKK2NvbnZlbnRpb25zIHVzZWQgZm9yIGNvZGluZyBhbmQgZG9jdW1lbnRhdGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkCityZWFkaW5nIGZvciBhbnlvbmUgd2hvIGlzIGludGVyZXN0ZWQgaW4gcG9ydGluZywgZXh0ZW5kaW5nIG9yIGltcHJvdmluZyB0aGUKK3BhY2thZ2UuCisKKzxIMT48QSBOQU1FPSJvYmplY3RpdmUiPk9iamVjdGl2ZSBvZiB0aGUgUGFja2FnZTwvQT48L0gxPgorCitUaGUgb2JqZWN0aXZlIG9mIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gcGFja2FnZSBpcyB0byBwcm92aWRlIGEgZnJlZSBzb2Z0d2FyZSBBUEkgZm9yCitjaGFyYWN0ZXItY2VsbCB0ZXJtaW5hbHMgYW5kIHRlcm1pbmFsIGVtdWxhdG9ycyB3aXRoIHRoZSBmb2xsb3dpbmcKK2NoYXJhY3RlcmlzdGljczoKKworPFVMPgorPExJPlNvdXJjZS1jb21wYXRpYmxlIHdpdGggaGlzdG9yaWNhbCBjdXJzZXMgaW1wbGVtZW50YXRpb25zIChpbmNsdWRpbmcKKyAgICAgdGhlIG9yaWdpbmFsIEJTRCBjdXJzZXMgYW5kIFN5c3RlbSBWIGN1cnNlcy4KKzxMST5Db25mb3JtYW50IHdpdGggdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgaXNzdWVkIGFzIHBhcnQgb2YgWFBHNCBieQorICAgICBYL09wZW4uCis8TEk+SGlnaC1xdWFsaXR5IC0tIHN0YWJsZSBhbmQgcmVsaWFibGUgY29kZSwgd2lkZSBwb3J0YWJpbGl0eSwgZ29vZAorICAgICBwYWNrYWdpbmcsIHN1cGVyaW9yIGRvY3VtZW50YXRpb24uCis8TEk+RmVhdHVyZWZ1bCAtLSBzaG91bGQgZWxpbWluYXRlIGFzIG11Y2ggb2YgdGhlIGRydWRnZXJ5IG9mIEMgaW50ZXJmYWNlCisgICAgIHByb2dyYW1taW5nIGFzIHBvc3NpYmxlLCBmcmVlaW5nIHByb2dyYW1tZXJzIHRvIHRoaW5rIGF0IGEgaGlnaGVyCisgICAgIGxldmVsIG9mIGRlc2lnbi4KKzwvVUw+CisKK1RoZXNlIG9iamVjdGl2ZXMgYXJlIGluIHByaW9yaXR5IG9yZGVyLiAgU28sIGZvciBleGFtcGxlLCBzb3VyY2UKK2NvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9uIG11c3QgdHJ1bXAgZmVhdHVyZWZ1bG5lc3MgLS0gd2UgY2Fubm90CithZGQgZmVhdHVyZXMgaWYgaXQgbWVhbnMgYnJlYWtpbmcgdGhlIHBvcnRpb24gb2YgdGhlIEFQSSBjb3JyZXNwb25kaW5nCit0byBoaXN0b3JpY2FsIGN1cnNlcyB2ZXJzaW9ucy4KKworPEgyPjxBIE5BTUU9IndoeXN2cjQiPldoeSBTeXN0ZW0gViBDdXJzZXM/PC9BPjwvSDI+CisKK1dlIHVzZWQgU3lzdGVtIFYgY3Vyc2VzIGFzIGEgbW9kZWwsIHJldmVyc2UtZW5naW5lZXJpbmcgdGhlaXIgQVBJLCBpbgorb3JkZXIgdG8gZnVsZmlsbCB0aGUgZmlyc3QgdHdvIG9iamVjdGl2ZXMuIDxQPgorCitTeXN0ZW0gViBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGNhbiBzdXBwb3J0IEJTRCBjdXJzZXMgcHJvZ3JhbXMgd2l0aAoranVzdCBhIHJlY29tcGlsYXRpb24sIHNvIGJ5IGNhcHR1cmluZyB0aGUgU3lzdGVtIFYgQVBJIHdlIGFsc28KK2NhcHR1cmUgQlNEJ3MuIDxQPgorCitNb3JlIGltcG9ydGFudGx5IGZvciB0aGUgZnV0dXJlLCB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBpc3N1ZWQgYnkgWC9PcGVuCitpcyBleHBsaWNpdGx5IGFuZCBjbG9zZWx5IG1vZGVsZWQgb24gU3lzdGVtIFYuICBTbyBjb25mb3JtYW5jZSB3aXRoCitTeXN0ZW0gViB0b29rIHVzIG1vc3Qgb2YgdGhlIHdheSB0byBiYXNlLWxldmVsIFhTSSBjb25mb3JtYW5jZS4KKworPEgyPjxBIE5BTUU9ImV4dGVuc2lvbnMiPkhvdyB0byBEZXNpZ24gRXh0ZW5zaW9uczwvQT48L0gyPgorCitUaGUgdGhpcmQgb2JqZWN0aXZlIChzdGFuZGFyZHMgY29uZm9ybWFuY2UpIHJlcXVpcmVzIHRoYXQgaXQgYmUgZWFzeSB0bworY29uZGl0aW9uIHNvdXJjZSBjb2RlIHVzaW5nIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBzbyB0aGF0IHRoZSBhYnNlbmNlIG9mIG5vbnN0YW5kYXJkCitleHRlbnNpb25zIGRvZXMgbm90IGJyZWFrIHRoZSBjb2RlLiA8UD4KKworQWNjb3JkaW5nbHksIHdlIGhhdmUgYSBwb2xpY3kgb2YgYXNzb2NpYXRpbmcgd2l0aCBlYWNoIG5vbnN0YW5kYXJkIGV4dGVuc2lvbgorYSBmZWF0dXJlIG1hY3JvLCBzbyB0aGF0IG5jdXJzZXMgY2xpZW50IGNvZGUgY2FuIHVzZSB0aGlzIG1hY3JvIHRvIGNvbmRpdGlvbgoraW4gb3Igb3V0IHRoZSBjb2RlIHRoYXQgcmVxdWlyZXMgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBleHRlbnNpb24uIDxQPgorCitGb3IgZXhhbXBsZSwgdGhlcmUgaXMgYSBtYWNybyA8Q09ERT5OQ1VSU0VTX01PVVNFX1ZFUlNJT048L0NPREU+IHdoaWNoIFhTSSBDdXJzZXMKK2RvZXMgbm90IGRlZmluZSwgYnV0IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGhlYWRlci4KK1lvdSBjYW4gdXNlIHRoaXMgdG8gY29uZGl0aW9uIHRoZSBjYWxscyB0byB0aGUgbW91c2UgQVBJIGNhbGxzLgorCis8SDE+PEEgTkFNRT0icG9ydGFiaWxpdHkiPlBvcnRhYmlsaXR5IGFuZCBDb25maWd1cmF0aW9uPC9BPjwvSDE+CisKK0NvZGUgd3JpdHRlbiBmb3IgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IG1heSBhc3N1bWUgYW4gQU5TSS1zdGFuZGFyZCBDIGNvbXBpbGVyIGFuZAorUE9TSVgtY29tcGF0aWJsZSBPUyBpbnRlcmZhY2UuICBJdCBtYXkgYWxzbyBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIGEKK1N5c3RlbS1WLWNvbXBhdGlibGUgPEVNPnNlbGVjdCgyKTwvRU0+IGNhbGwuIDxQPgorCitXZSBlbmNvdXJhZ2UgKGJ1dCBkbyBub3QgcmVxdWlyZSkgZGV2ZWxvcGVycyB0byBtYWtlIHRoZSBjb2RlIGZyaWVuZGx5Cit0byBsZXNzLWNhcGFibGUgVU5JWCBlbnZpcm9ubWVudHMgd2hlcmV2ZXIgcG9zc2libGUuIDxQPgorCitXZSBlbmNvdXJhZ2UgZGV2ZWxvcGVycyB0byBzdXBwb3J0IE9TLXNwZWNpZmljIG9wdGltaXphdGlvbnMgYW5kIG1ldGhvZHMKK25vdCBhdmFpbGFibGUgdW5kZXIgUE9TSVgvQU5TSSwgcHJvdmlkZWQgb25seSB0aGF0OiAKKworPFVMPgorPExJPkFsbCBzdWNoIGNvZGUgaXMgcHJvcGVybHkgY29uZGl0aW9uZWQgc28gdGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QKKyAgICAgYXR0ZW1wdCB0byBjb21waWxlIGl0IHVuZGVyIGEgcGxhaW4gQU5TSS9QT1NJWCBlbnZpcm9ubWVudC4KKzxMST5BZGRpbmcgc3VjaCBpbXBsZW1lbnRhdGlvbiBtZXRob2RzIGRvZXMgbm90IGludHJvZHVjZSBpbmNvbXBhdGliaWxpdGllcworICAgICBpbiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IEFQSSBiZXR3ZWVuIHBsYXRmb3Jtcy4KKzwvVUw+CisKK1dlIHVzZSBHTlUgPENPREU+YXV0b2NvbmYoMSk8L0NPREU+IGFzIGEgdG9vbCB0byBkZWFsIHdpdGggcG9ydGFiaWxpdHkgaXNzdWVzLgorVGhlIHJpZ2h0IHdheSB0byBsZXZlcmFnZSBhbiBPUy1zcGVjaWZpYyBmZWF0dXJlIGlzIHRvIG1vZGlmeSB0aGUgYXV0b2NvbmYKK3NwZWNpZmljYXRpb24gZmlsZXMgKGNvbmZpZ3VyZS5pbiBhbmQgYWNsb2NhbC5tNCkgdG8gc2V0IHVwIGEgbmV3IGZlYXR1cmUKK21hY3JvLCB3aGljaCB5b3UgdGhlbiB1c2UgdG8gY29uZGl0aW9uIHlvdXIgY29kZS4KKworPEgxPjxBIE5BTUU9ImRvY3VtZW50YXRpb24iPkRvY3VtZW50YXRpb24gQ29udmVudGlvbnM8L0E+PC9IMT4KKworVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFja2FnZS4gIEVhY2gKK2hhcyBhIGRpZmZlcmVudCBwcmVmZXJyZWQgZm9ybWF0OgorCis8VUw+Cis8TEk+UGFja2FnZS1pbnRlcm5hbCBmaWxlcyAoUkVBRE1FLCBJTlNUQUxMLCBUTy1ETyBldGMuKQorPExJPk1hbnVhbCBwYWdlcy4KKzxMST5FdmVyeXRoaW5nIGVsc2UgKGkuZS4sIG5hcnJhdGl2ZSBkb2N1bWVudGF0aW9uKS4KKzwvVUw+CisKK091ciBjb252ZW50aW9ucyBhcmUgc2ltcGxlOgorPE9MPgorPExJPjxTVFJPTkc+TWFpbnRhaW4gcGFja2FnZS1pbnRlcm5hbCBmaWxlcyBpbiBwbGFpbiB0ZXh0LjwvU1RST05HPgorICAgICBUaGUgZXhwZWN0ZWQgdmlld2VyIGZvciB0aGVtIDxFTT5tb3JlKDEpPC9FTT4gb3IgYW4gZWRpdG9yIHdpbmRvdzsgdGhlcmUncworICAgICBubyBwb2ludCBpbiBlbGFib3JhdGUgbWFyay11cC4KKworPExJPjxTVFJPTkc+TWFyayB1cCBtYW51YWwgcGFnZXMgaW4gdGhlIG1hbiBtYWNyb3MuPC9TVFJPTkc+ICBUaGVzZSBoYXZlIHRvIGJlIHZpZXdhYmxlCisgICAgIHRocm91Z2ggdHJhZGl0aW9uYWwgPEVNPm1hbigxKTwvRU0+IHByb2dyYW1zLgorCis8TEk+PFNUUk9ORz5Xcml0ZSBldmVyeXRoaW5nIGVsc2UgaW4gSFRNTC48L1NUUk9ORz4KKzwvT0w+CisKK1doZW4gaW4gZG91YnQsIEhUTUxpemUgYSBtYXN0ZXIgYW5kIHVzZSA8RU0+bHlueCgxKTwvRU0+IHRvIGdlbmVyYXRlCitwbGFpbiBBU0NJSSAoYXMgd2UgZG8gZm9yIHRoZSBhbm5vdW5jZW1lbnQgZG9jdW1lbnQpLiA8UD4KKworVGhlIHJlYXNvbiBmb3IgY2hvb3NpbmcgSFRNTCBpcyB0aGF0IGl0J3MgKGEpIHdlbGwtYWRhcHRlZCBmb3Igb24tbGluZQorYnJvd3NpbmcgdGhyb3VnaCB2aWV3ZXJzIHRoYXQgYXJlIGV2ZXJ5d2hlcmU7IChiKSBtb3JlIGVhc2lseSByZWFkYWJsZQorYXMgcGxhaW4gdGV4dCB0aGFuIG1vc3Qgb3RoZXIgbWFyay11cHMsIGlmIHlvdSBkb24ndCBoYXZlIGEgdmlld2VyOyBhbmQgKGMpCitjYXJyaWVzIGVub3VnaCBpbmZvcm1hdGlvbiB0aGF0IHlvdSBjYW4gZ2VuZXJhdGUgYSBuaWNlLWxvb2tpbmcgcHJpbnRlZAordmVyc2lvbiBmcm9tIGl0LiAgQWxzbywgb2YgY291cnNlLCBpdCBtYWtlIGV4cG9ydGluZyB0aGluZ3MgbGlrZSB0aGUKK2Fubm91bmNlbWVudCBkb2N1bWVudCB0byBXV1cgcHJldHR5IHRyaXZpYWwuCisKKzxIMT48QSBOQU1FPSJidWd0cmFjayI+SG93IHRvIFJlcG9ydCBCdWdzPC9BPjwvSDE+CisKK1RoZSA8QSBOQU1FPSJidWdyZXBvcnQiPnJlcG9ydGluZyBhZGRyZXNzIGZvciBidWdzPC9BPiBpcworPEEgSFJFRj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPmJ1Zy1uY3Vyc2VzQGdudS5vcmc8L0E+LgorVGhpcyBpcyBhIG1ham9yZG9tbyBsaXN0OyB0byBqb2luLCB3cml0ZQordG8gPENPREU+YnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnPC9DT0RFPiB3aXRoIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSBsaW5lOgorPFBSRT4KKyAgICAgICAgICAgICBzdWJzY3JpYmUgJmx0O25hbWUmZ3Q7QCZsdDtob3N0LmRvbWFpbiZndDsKKzwvUFJFPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gY29kZSBpcyBtYWludGFpbmVkIGJ5IGEgc21hbGwgZ3JvdXAgb2YKK3ZvbHVudGVlcnMuICBXaGlsZSB3ZSB0cnkgb3VyIGJlc3QgdG8gZml4IGJ1Z3MgcHJvbXB0bHksIHdlIHNpbXBseQorZG9uJ3QgaGF2ZSBhIGxvdCBvZiBob3VycyB0byBzcGVuZCBvbiBlbGVtZW50YXJ5IGhhbmQtaG9sZGluZy4gIFdlIHJlbHkKK29uIGludGVsbGlnZW50IGNvb3BlcmF0aW9uIGZyb20gb3VyIHVzZXJzLiAgSWYgeW91IHRoaW5rIHlvdSBoYXZlCitmb3VuZCBhIGJ1ZyBpbiA8Q09ERT5uY3Vyc2VzPC9DT0RFPiwgdGhlcmUgYXJlIHNvbWUgc3RlcHMgeW91IGNhbiB0YWtlCitiZWZvcmUgY29udGFjdGluZyB1cyB0aGF0IHdpbGwgaGVscCBnZXQgdGhlIGJ1ZyBmaXhlZCBxdWlja2x5LiA8UD4KKworSW4gb3JkZXIgdG8gdXNlIG91ciBidWctZml4aW5nIHRpbWUgZWZmaWNpZW50bHksIHdlIHB1dCBwZW9wbGUgd2hvCitzaG93IHVzIHRoZXkndmUgdGFrZW4gdGhlc2Ugc3RlcHMgYXQgdGhlIGhlYWQgb2Ygb3VyIHF1ZXVlLiAgVGhpcworbWVhbnMgdGhhdCBpZiB5b3UgZG9uJ3QsIHlvdSdsbCBwcm9iYWJseSBlbmQgdXAgYXQgdGhlIHRhaWwgZW5kIGFuZAoraGF2ZSB0byB3YWl0IGEgd2hpbGUuCisKKzxPTD4KKzxMST5EZXZlbG9wIGEgcmVjaXBlIHRvIHJlcHJvZHVjZSB0aGUgYnVnLgorPHA+CitCdWdzIHdlIGNhbiByZXByb2R1Y2UgYXJlIGxpa2VseSB0byBiZSBmaXhlZCB2ZXJ5IHF1aWNrbHksIG9mdGVuCit3aXRoaW4gZGF5cy4gIFRoZSBtb3N0IGVmZmVjdGl2ZSBzaW5nbGUgdGhpbmcgeW91IGNhbiBkbyB0byBnZXQgYQorcXVpY2sgZml4IGlzIGRldmVsb3AgYSB3YXkgd2UgY2FuIGR1cGxpY2F0ZSB0aGUgYmFkIGJlaGF2aW9yIC0tCitpZGVhbGx5LCBieSBnaXZpbmcgdXMgc291cmNlIGZvciBhIHNtYWxsLCBwb3J0YWJsZSB0ZXN0IHByb2dyYW0gdGhhdAorYnJlYWtzIHRoZSBsaWJyYXJ5LiAoRXZlbiBiZXR0ZXIgaXMgYSBrZXlzdHJva2UgcmVjaXBlIHVzaW5nIG9uZSBvZgordGhlIHRlc3QgcHJvZ3JhbXMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLikKKworPExJPlRyeSB0byByZXByb2R1Y2UgdGhlIGJ1ZyBvbiBhIGRpZmZlcmVudCB0ZXJtaW5hbCB0eXBlLiA8UD4KKworSW4gb3VyIGV4cGVyaWVuY2UsIG1vc3Qgb2YgdGhlIGJlaGF2aW9ycyBwZW9wbGUgcmVwb3J0IGFzIGxpYnJhcnkgYnVncworYXJlIGFjdHVhbGx5IGR1ZSB0byBzdWJ0bGUgcHJvYmxlbXMgaW4gdGVybWluYWwgZGVzY3JpcHRpb25zLiAgVGhpcyBpcworZXNwZWNpYWxseSBsaWtlbHkgdG8gYmUgdHJ1ZSBpZiB5b3UncmUgdXNpbmcgYSB0cmFkaXRpb25hbAorYXN5bmNocm9ub3VzIHRlcm1pbmFsIG9yIFBDLWJhc2VkIHRlcm1pbmFsIGVtdWxhdG9yLCByYXRoZXIgdGhhbiB4dGVybQorb3IgYSBVTklYIGNvbnNvbGUgZW50cnkuIDxQPgorCitJdCdzIHRoZXJlZm9yZSBleHRyZW1lbHkgaGVscGZ1bCBpZiB5b3UgY2FuIHRlbGwgdXMgd2hldGhlciBvciBub3QgeW91cgorcHJvYmxlbSByZXByb2R1Y2VzIG9uIG90aGVyIHRlcm1pbmFsIHR5cGVzLiAgVXN1YWxseSB5b3UnbGwgaGF2ZSBib3RoCithIGNvbnNvbGUgdHlwZSBhbmQgeHRlcm0gYXZhaWxhYmxlOyBwbGVhc2UgdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB5b3VyCitidWcgcmVwcm9kdWNlcyBvbiBib3RoLiA8UD4KKworSWYgeW91IGhhdmUgeHRlcm0gYXZhaWxhYmxlLCBpdCBpcyBhbHNvIGdvb2QgdG8gY29sbGVjdCB4dGVybSByZXBvcnRzIGZvcgorZGlmZmVyZW50IHdpbmRvdyBzaXplcy4gIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHlvdSBub3JtYWxseSB1c2UgYW4KK3VudXN1YWwgeHRlcm0gd2luZG93IHNpemUgLS0gYSBzdXJwcmlzaW5nIG51bWJlciBvZiB0aGUgYnVncyB3ZSd2ZSBzZWVuCithcmUgZWl0aGVyIHRyaWdnZXJlZCBvciBtYXNrZWQgYnkgdGhlc2UuIAorCis8TEk+R2VuZXJhdGUgYW5kIGV4YW1pbmUgYSB0cmFjZSBmaWxlIGZvciB0aGUgYnJva2VuIGJlaGF2aW9yLiA8UD4KKworUmVjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcmllcy4KK0luc2VydCBhIDxDT0RFPnRyYWNlKCk8L0NPREU+IGNhbGwgd2l0aCB0aGUgYXJndW1lbnQgc2V0IHRvIDxDT0RFPlRSQUNFX1VQREFURTwvQ09ERT4uCisoU2VlIDxBIEhSRUY9Im5jdXJzZXMtaW50cm8uaHRtbCNkZWJ1Z2dpbmciPiJXcml0aW5nIFByb2dyYW1zIHdpdGgKK05DVVJTRVMiPC9BPiBmb3IgZGV0YWlscyBvbiB0cmFjZSBsZXZlbHMuKQorUmVwcm9kdWNlIHlvdXIgYnVnLCB0aGVuIGxvb2sgYXQgdGhlIHRyYWNlIGZpbGUgdG8gc2VlIHdoYXQgdGhlIGxpYnJhcnkKK3dhcyBhY3R1YWxseSBkb2luZy4gPFA+CisKK0Fub3RoZXIgZnJlcXVlbnQgY2F1c2Ugb2YgYXBwYXJlbnQgYnVncyBpcyBhcHBsaWNhdGlvbiBjb2RpbmcgZXJyb3JzCit0aGF0IGNhdXNlIHRoZSB3cm9uZyB0aGluZ3MgdG8gYmUgcHV0IG9uIHRoZSB2aXJ0dWFsIHNjcmVlbi4gIExvb2tpbmcKK2F0IHRoZSB2aXJ0dWFsLXNjcmVlbiBkdW1wcyBpbiB0aGUgdHJhY2UgZmlsZSB3aWxsIHRlbGwgeW91IGltbWVkaWF0ZWx5IGlmCit0aGlzIGlzIGhhcHBlbmluZywgYW5kIHNhdmUgeW91IGZyb20gdGhlIHBvc3NpYmxlIGVtYmFycmFzc21lbnQgb2YgYmVpbmcKK3RvbGQgdGhhdCB0aGUgYnVnIGlzIGluIHlvdXIgY29kZSBhbmQgaXMgeW91ciBwcm9ibGVtIHJhdGhlciB0aGFuIG91cnMuIDxQPgorCitJZiB0aGUgdmlydHVhbC1zY3JlZW4gZHVtcHMgbG9vayBjb3JyZWN0IGJ1dCB0aGUgYnVnIHBlcnNpc3RzLCBpdCdzCitwb3NzaWJsZSB0byBjcmFuayB1cCB0aGUgdHJhY2UgbGV2ZWwgdG8gZ2l2ZSBtb3JlIGFuZCBtb3JlIGluZm9ybWF0aW9uCithYm91dCB0aGUgbGlicmFyeSdzIHVwZGF0ZSBhY3Rpb25zIGFuZCB0aGUgY29udHJvbCBzZXF1ZW5jZXMgaXQgaXNzdWVzCit0byBwZXJmb3JtIHRoZW0uICBUaGUgdGVzdCBkaXJlY3Rvcnkgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb250YWlucyBhCit0b29sIGZvciBkaWdlc3RpbmcgdGhlc2UgbG9ncyB0byBtYWtlIHRoZW0gbGVzcyB0ZWRpb3VzIHRvIHdhZGUKK3Rocm91Z2guIDxQPgorCitPZnRlbiB5b3UnbGwgZmluZCB0ZXJtaW5mbyBwcm9ibGVtcyBhdCB0aGlzIHN0YWdlIGJ5IG5vdGljaW5nIHRoYXQgdGhlCitlc2NhcGUgc2VxdWVuY2VzIHB1dCBvdXQgZm9yIHZhcmlvdXMgY2FwYWJpbGl0aWVzIGFyZSB3cm9uZy4gIElmIG5vdCwKK3lvdSdyZSBsaWtlbHkgdG8gbGVhcm4gZW5vdWdoIHRvIGJlIGFibGUgdG8gY2hhcmFjdGVyaXplIGFueSBidWcgaW4KK3RoZSBzY3JlZW4tdXBkYXRlIGxvZ2ljIHF1aXRlIGV4YWN0bHkuCisKKzxMST5SZXBvcnQgZGV0YWlscyBhbmQgc3ltcHRvbXMsIG5vdCBqdXN0IGludGVycHJldGF0aW9ucy4gPFA+CisKK0lmIHlvdSBkbyB0aGUgcHJlY2VkaW5nIHR3byBzdGVwcywgaXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB5b3UnbGwgZGlzY292ZXIKK3RoZSBuYXR1cmUgb2YgdGhlIHByb2JsZW0geW91cnNlbGYgYW5kIGJlIGFibGUgdG8gc2VuZCB1cyBhIGZpeC4gIFRoaXMKK3dpbGwgY3JlYXRlIGhhcHB5IGZlZWxpbmdzIGFsbCBhcm91bmQgYW5kIGVhcm4geW91IGdvb2Qga2FybWEgZm9yIHRoZSBmaXJzdAordGltZSB5b3UgcnVuIGludG8gYSBidWcgeW91IHJlYWxseSBjYW4ndCBjaGFyYWN0ZXJpemUgYW5kIGZpeCB5b3Vyc2VsZi4gPFA+CisKK0lmIHlvdSdyZSBzdGlsbCBzdHVjaywgYXQgbGVhc3QgeW91J2xsIGtub3cgd2hhdCB0byB0ZWxsIHVzLiAgUmVtZW1iZXIsIHdlCituZWVkIGRldGFpbHMuICBJZiB5b3UgZ3Vlc3MgYWJvdXQgd2hhdCBpcyBzYWZlIHRvIGxlYXZlIG91dCwgeW91IGFyZSB0b28KK2xpa2VseSB0byBiZSB3cm9uZy4gPFA+CisKK0lmIHlvdXIgYnVnIHByb2R1Y2VzIGEgYmFkIHVwZGF0ZSwgaW5jbHVkZSBhIHRyYWNlIGZpbGUuICBUcnkgdG8gbWFrZQordGhlIHRyYWNlIGF0IHRoZSA8RU0+bGVhc3Q8L0VNPiB2b2x1bWlub3VzIGxldmVsIHRoYXQgcGlucyBkb3duIHRoZQorYnVnLiAgTG9ncyB0aGF0IGhhdmUgYmVlbiB0aHJvdWdoIHRyYWNlbXVuY2ggYXJlIE9LLCBpdCBkb2Vzbid0IHRocm93Cithd2F5IGFueSBpbmZvcm1hdGlvbiAoYWN0dWFsbHkgdGhleSdyZSBiZXR0ZXIgdGhhbiB1bi1tdW5jaGVkIG9uZXMgYmVjYXVzZQordGhleSdyZSBlYXNpZXIgdG8gcmVhZCkuIDxQPgorCitJZiB5b3VyIGJ1ZyBwcm9kdWNlcyBhIGNvcmUtZHVtcCwgcGxlYXNlIGluY2x1ZGUgYSBzeW1ib2xpYyBzdGFjayB0cmFjZQorZ2VuZXJhdGVkIGJ5IGdkYigxKSBvciB5b3VyIGxvY2FsIGVxdWl2YWxlbnQuIDxQPgorCitUZWxsIHVzIGFib3V0IGV2ZXJ5IHRlcm1pbmFsIG9uIHdoaWNoIHlvdSd2ZSByZXByb2R1Y2VkIHRoZSBidWcgLS0gYW5kCitldmVyeSB0ZXJtaW5hbCBvbiB3aGljaCB5b3UgY2FuJ3QuICBJZGVhbGx5LCBzZW50IHVzIHRlcm1pbmZvIHNvdXJjZXMKK2ZvciBhbGwgb2YgdGhlc2UgKHlvdXJzIG1pZ2h0IGRpZmZlciBmcm9tIG91cnMpLiA8UD4KKworSW5jbHVkZSB5b3VyIG5jdXJzZXMgdmVyc2lvbiBhbmQgeW91ciBPUy9tYWNoaW5lIHR5cGUsIG9mIGNvdXJzZSEgIFlvdSBjYW4KK2ZpbmQgeW91ciBuY3Vyc2VzIHZlcnNpb24gaW4gdGhlIDxDT0RFPmN1cnNlcy5oPC9DT0RFPiBmaWxlLgorPC9PTD4KKworSWYgeW91ciBwcm9ibGVtIHNtZWxscyBsaWtlIGEgbG9naWMgZXJyb3Igb3IgaW4gY3Vyc29yIG1vdmVtZW50IG9yCitzY3JvbGxpbmcgb3IgYSBiYWQgY2FwYWJpbGl0eSwgdGhlcmUgYXJlIGEgY291cGxlIG9mIHRpbnkgdGVzdCBmcmFtZXMKK2ZvciB0aGUgbGlicmFyeSBhbGdvcml0aG1zIGluIHRoZSBwcm9ncyBkaXJlY3RvcnkgdGhhdCBtYXkgaGVscCB5b3UKK2lzb2xhdGUgaXQuICBUaGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBidWlsZCwgYnV0IGRvIGhhdmUgdGhlaXIKK293biBtYWtlIHByb2R1Y3Rpb25zLiAgPFA+CisKK1RoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZSBpcyA8Q09ERT5tdmN1cjwvQ09ERT4sIGEgdGVzdCBmcmFtZSBmb3IgdGhlCitjdXJzb3ItbW92ZW1lbnQgb3B0aW1pemF0aW9uIGNvZGUuICBXaXRoIHRoaXMgcHJvZ3JhbSwgeW91IGNhbiBzZWUKK2RpcmVjdGx5IHdoYXQgY29udHJvbCBzZXF1ZW5jZXMgd2lsbCBiZSBlbWl0dGVkIGZvciBhbnkgZ2l2ZW4gY3Vyc29yCittb3ZlbWVudCBvciBzY3JvbGwvaW5zZXJ0L2RlbGV0ZSBvcGVyYXRpb25zLiAgSWYgeW91IHRoaW5rIHlvdSd2ZSBnb3QKK2EgYmFkIGNhcGFiaWxpdHkgaWRlbnRpZmllZCwgeW91IGNhbiBkaXNhYmxlIGl0IGFuZCB0ZXN0IGFnYWluLiBUaGUKK3Byb2dyYW0gaXMgY29tbWFuZC1kcml2ZW4gYW5kIGhhcyBvbi1saW5lIGhlbHAuIDxQPgorCitJZiB5b3UgdGhpbmsgdGhlIHZlcnRpY2FsLXNjcm9sbCBvcHRpbWl6YXRpb24gaXMgYnJva2VuLCBvciBqdXN0IHdhbnQgdG8KK3VuZGVyc3RhbmQgaG93IGl0IHdvcmtzIGJldHRlciwgYnVpbGQgPENPREU+aGFzaG1hcDwvQ09ERT4gYW5kIHJlYWQgdGhlCitoZWFkZXIgY29tbWVudHMgb2YgPENPREU+aGFyZHNjcm9sbC5jPC9DT0RFPiBhbmQgPENPREU+aGFzaG1hcC5jPC9DT0RFPjsgdGhlbiB0cnkKK2l0IG91dC4gWW91IGNhbiBhbHNvIHRlc3QgdGhlIGhhcmR3YXJlLXNjcm9sbGluZyBvcHRpbWl6YXRpb24gc2VwYXJhdGVseQord2l0aCA8Q09ERT5oYXJkc2Nyb2xsPC9DT0RFPi4gPFA+CisKKzxIMT48QSBOQU1FPSJuY3Vyc2xpYiI+QSBUb3VyIG9mIHRoZSBOY3Vyc2VzIExpYnJhcnk8L0E+PC9IMT4KKworPEgyPjxBIE5BTUU9ImxvdmVydmlldyI+TGlicmFyeSBPdmVydmlldzwvQT48L0gyPgorCitNb3N0IG9mIHRoZSBsaWJyYXJ5IGlzIHN1cGVyc3RydWN0dXJlIC0tIGZhaXJseSB0cml2aWFsIGNvbnZlbmllbmNlCitpbnRlcmZhY2VzIHRvIGEgc21hbGwgc2V0IG9mIGJhc2ljIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQKK3RvIG1hbmlwdWxhdGUgdGhlIHZpcnR1YWwgc2NyZWVuIChpbiBwYXJ0aWN1bGFyLCBub25lIG9mIHRoaXMgY29kZQorZG9lcyBhbnkgSS9PIGV4Y2VwdCB0aHJvdWdoIGNhbGxzIHRvIG1vcmUgZnVuZGFtZW50YWwgbW9kdWxlcworZGVzY3JpYmVkIGJlbG93KS4gIFRoZSBmaWxlcworPGJsb2NrcXVvdGU+Cis8Q09ERT4KK2xpYl9hZGRjaC5jCitsaWJfYmtnZC5jCitsaWJfYm94LmMKK2xpYl9jaGdhdC5jCitsaWJfY2xlYXIuYworbGliX2NsZWFyb2suYworbGliX2NscmJvdC5jCitsaWJfY2xyZW9sLmMKK2xpYl9jb2xvcnNldC5jCitsaWJfZGF0YS5jCitsaWJfZGVsY2guYworbGliX2RlbHdpbi5jCitsaWJfZWNoby5jCitsaWJfZXJhc2UuYworbGliX2dlbi5jCitsaWJfZ2V0c3RyLmMKK2xpYl9obGluZS5jCitsaWJfaW1tZWRvay5jCitsaWJfaW5jaHN0ci5jCitsaWJfaW5zY2guYworbGliX2luc2RlbC5jCitsaWJfaW5zc3RyLmMKK2xpYl9pbnN0ci5jCitsaWJfaXNlbmR3aW4uYworbGliX2tleW5hbWUuYworbGliX2xlYXZlb2suYworbGliX21vdmUuYworbGliX212d2luLmMKK2xpYl9vdmVybGF5LmMKK2xpYl9wYWQuYworbGliX3ByaW50dy5jCitsaWJfcmVkcmF3bG4uYworbGliX3NjYW53LmMKK2xpYl9zY3JlZW4uYworbGliX3Njcm9sbC5jCitsaWJfc2Nyb2xsb2suYworbGliX3NjcnJlZy5jCitsaWJfc2V0X3Rlcm0uYworbGliX3Nsay5jCitsaWJfc2xrYXRyX3NldC5jCitsaWJfc2xrYXRyb2YuYworbGliX3Nsa2F0cm9uLmMKK2xpYl9zbGthdHJzZXQuYworbGliX3Nsa2F0dHIuYworbGliX3Nsa2NsZWFyLmMKK2xpYl9zbGtjb2xvci5jCitsaWJfc2xraW5pdC5jCitsaWJfc2xrbGFiLmMKK2xpYl9zbGtyZWZyLmMKK2xpYl9zbGtzZXQuYworbGliX3Nsa3RvdWNoLmMKK2xpYl90b3VjaC5jCitsaWJfdW5jdHJsLmMKK2xpYl92bGluZS5jCitsaWJfd2F0dHJvZmYuYworbGliX3dhdHRyb24uYworbGliX3dpbmRvdy5jCis8L0NPREU+Cis8L2Jsb2NrcXVvdGU+CithcmUgYWxsIGluIHRoaXMgY2F0ZWdvcnkuICBUaGV5IGFyZSB2ZXJ5Cit1bmxpa2VseSB0byBuZWVkIGNoYW5nZSwgYmFycmluZyBidWdzIG9yIHNvbWUgZnVuZGFtZW50YWwKK3Jlb3JnYW5pemF0aW9uIGluIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcy4gPFA+CisKK1RoZXNlIGZpbGVzIGFyZSB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZyBzdXBwb3J0OgorPGJsb2NrcXVvdGU+Cis8Y29kZT4KK2xpYl90cmFjZS5jCitsaWJfdHJhY2VhdHIuYworbGliX3RyYWNlYml0cy5jCitsaWJfdHJhY2VjaHIuYworbGliX3RyYWNlZG1wLmMKK2xpYl90cmFjZW1zZS5jCit0cmFjZV9idWYuYworPC9jb2RlPgorPC9ibG9ja3F1b3RlPgorSXQgaXMgcmF0aGVyIHVubGlrZWx5IHlvdSB3aWxsIGV2ZXIgbmVlZCB0byBjaGFuZ2UgdGhlc2UsIHVubGVzcworeW91IHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IGRlYnVnIHRyYWNlIGxldmVsIGZvciBzb21lIHJlYXNvbi48UD4KKworVGhlcmUgaXMgYW5vdGhlciBncm91cCBvZiBmaWxlcyB0aGF0IGRvIGRpcmVjdCBJL08gdmlhIDxFTT50cHV0cygpPC9FTT4sCitjb21wdXRhdGlvbnMgb24gdGhlIHRlcm1pbmFsIGNhcGFiaWxpdGllcywgb3IgcXVlcmllcyB0byB0aGUgT1MKK2Vudmlyb25tZW50LCBidXQgbmV2ZXJ0aGVsZXNzIGhhdmUgb25seSBmYWlybHkgbG93IGNvbXBsZXhpdHkuICBUaGVzZQoraW5jbHVkZToKKzxibG9ja3F1b3RlPgorPGNvZGU+CitsaWJfYWNzLmMKK2xpYl9iZWVwLmMKK2xpYl9jb2xvci5jCitsaWJfZW5kd2luLmMKK2xpYl9pbml0c2NyLmMKK2xpYl9sb25nbmFtZS5jCitsaWJfbmV3dGVybS5jCitsaWJfb3B0aW9ucy5jCitsaWJfdGVybWNhcC5jCitsaWJfdGkuYworbGliX3RwYXJtLmMKK2xpYl90cHV0cy5jCitsaWJfdmlkYXR0ci5jCityZWFkX2VudHJ5LmMuCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+CitUaGV5IGFyZSBsaWtlbHkgdG8gbmVlZCByZXZpc2lvbiBvbmx5IGlmCituY3Vyc2VzIGlzIGJlaW5nIHBvcnRlZCB0byBhbiBlbnZpcm9ubWVudCB3aXRob3V0IGFuIHVuZGVybHlpbmcKK3Rlcm1pbmZvIGNhcGFiaWxpdHkgcmVwcmVzZW50YXRpb24uIDxQPgorCitUaGVzZSBmaWxlcworaGF2ZSBzZXJpb3VzIGhvb2tzIGludG8KK3RoZSB0dHkgZHJpdmVyIGFuZCBzaWduYWwgZmFjaWxpdGllczoKKzxibG9ja3F1b3RlPgorPGNvZGU+CitsaWJfa2VybmVsLmMKK2xpYl9iYXVkcmF0ZS5jCitsaWJfcmF3LmMKK2xpYl90c3RwLmMKK2xpYl90d2FpdC5jCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+CitJZiB5b3UgcnVuIGludG8gcG9ydGluZyBzbmFmdXMKK21vdmluZyB0aGUgcGFja2FnZSB0byBhbm90aGVyIFVOSVgsIHRoZSBwcm9ibGVtIGlzIGxpa2VseSB0byBiZSBpbiBvbmUKK29mIHRoZXNlIGZpbGVzLgorVGhlIGZpbGUgPENPREU+bGliX3ByaW50LmM8L0NPREU+IHVzZXMgc2xlZXAoMikgYW5kIGFsc28KK2ZhbGxzIGluIHRoaXMgY2F0ZWdvcnkuPFA+CisKK0FsbW9zdCBhbGwgb2YgdGhlIHJlYWwgd29yayBpcyBkb25lIGluIHRoZSBmaWxlcworPGJsb2NrcXVvdGU+Cis8Y29kZT4KK2hhcmRzY3JvbGwuYworaGFzaG1hcC5jCitsaWJfYWRkY2guYworbGliX2RvdXBkYXRlLmMKK2xpYl9nZXRjaC5jCitsaWJfbW91c2UuYworbGliX212Y3VyLmMKK2xpYl9yZWZyZXNoLmMKK2xpYl9zZXR1cC5jCitsaWJfdmlkYXR0ci5jCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+CitNb3N0IG9mIHRoZSBhbGdvcml0aG1pYyBjb21wbGV4aXR5IGluIHRoZQorbGlicmFyeSBsaXZlcyBpbiB0aGVzZSBmaWxlcy4KK0lmIHRoZXJlIGlzIGEgcmVhbCBidWcgaW4gPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGl0c2VsZiwgaXQncyBwcm9iYWJseSBoZXJlLgorV2UnbGwgdG91ciBzb21lIG9mIHRoZXNlIGZpbGVzIGluIGRldGFpbAorYmVsb3cgKHNlZSA8QSBIUkVGPSIjZW5naW5lIj5UaGUgRW5naW5lIFJvb208L0E+KS4gPFA+CisKK0ZpbmFsbHksIHRoZXJlIGlzIGEgZ3JvdXAgb2YgZmlsZXMgdGhhdCBpcyBhY3R1YWxseSBtb3N0IG9mIHRoZQordGVybWluZm8gY29tcGlsZXIuICBUaGUgcmVhc29uIHRoaXMgY29kZSBsaXZlcyBpbiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+CitsaWJyYXJ5IGlzIHRvIHN1cHBvcnQgZmFsbGJhY2sgdG8gL2V0Yy90ZXJtY2FwLiAgVGhlc2UgZmlsZXMgaW5jbHVkZQorPGJsb2NrcXVvdGU+Cis8Y29kZT4KK2FsbG9jX2VudHJ5LmMKK2NhcHRvaW5mby5jCitjb21wX2NhcHRhYi5jCitjb21wX2Vycm9yLmMKK2NvbXBfaGFzaC5jCitjb21wX3BhcnNlLmMKK2NvbXBfc2Nhbi5jCitwYXJzZV9lbnRyeS5jCityZWFkX3Rlcm1jYXAuYword3JpdGVfZW50cnkuYworPC9jb2RlPgorPC9ibG9ja3F1b3RlPgorV2UnbGwgZGlzY3VzcyB0aGVzZSBpbiB0aGUgY29tcGlsZXIgdG91ci4KKworPEgyPjxBIE5BTUU9ImVuZ2luZSI+VGhlIEVuZ2luZSBSb29tPC9BPjwvSDI+CisKKzxIMz48QSBOQU1FPSJpbnB1dCI+S2V5Ym9hcmQgSW5wdXQ8L0E+PC9IMz4KKworQWxsIDxDT0RFPm5jdXJzZXM8L0NPREU+IGlucHV0IGZ1bm5lbHMgdGhyb3VnaCB0aGUgZnVuY3Rpb24KKzxDT0RFPndnZXRjaCgpPC9DT0RFPiwgZGVmaW5lZCBpbiA8Q09ERT5saWJfZ2V0Y2guYzwvQ09ERT4uICBUaGlzIGZ1bmN0aW9uIGlzCit0cmlja3k7IGl0IGhhcyB0byBwb2xsIGZvciBrZXlib2FyZCBhbmQgbW91c2UgZXZlbnRzIGFuZCBkbyBhIHJ1bm5pbmcKK21hdGNoIG9mIGluY29taW5nIGlucHV0IGFnYWluc3QgdGhlIHNldCBvZiBkZWZpbmVkIHNwZWNpYWwga2V5cy4gPFA+CisKK1RoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIGluIHRoaXMgbW9kdWxlIGlzIGEgRklGTyBxdWV1ZSwgdXNlZCB0bworbWF0Y2ggbXVsdGlwbGUtY2hhcmFjdGVyIGlucHV0IHNlcXVlbmNlcyBhZ2FpbnN0IHNwZWNpYWwta2V5CitjYXBhYmlsaXRpZXM7IGFsc28gdG8gaW1wbGVtZW50IHB1c2hiYWNrIHZpYSA8Q09ERT51bmdldGNoKCk8L0NPREU+LiA8UD4KKworVGhlIDxDT0RFPndnZXRjaCgpPC9DT0RFPiBjb2RlIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmdW5jdGlvbiBrZXkKK3NlcXVlbmNlcyBhbmQgdGhlIHNhbWUgc2VxdWVuY2VzIHR5cGVkIG1hbnVhbGx5IGJ5IGRvaW5nIGEgdGltZWQgd2FpdAorYWZ0ZXIgZWFjaCBpbnB1dCBjaGFyYWN0ZXIgdGhhdCBjb3VsZCBsZWFkIGEgZnVuY3Rpb24ga2V5IHNlcXVlbmNlLgorSWYgdGhlIGVudGlyZSBzZXF1ZW5jZSB0YWtlcyBsZXNzIHRoYW4gMSBzZWNvbmQsIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZQorYmVlbiBnZW5lcmF0ZWQgYnkgYSBmdW5jdGlvbiBrZXkgcHJlc3MuIDxQPgorCitIYWNrZXJzIGJydWlzZWQgYnkgcHJldmlvdXMgZW5jb3VudGVycyB3aXRoIHZhcmlhbnQgPENPREU+c2VsZWN0KDIpPC9DT0RFPgorY2FsbHMgbWF5IGZpbmQgdGhlIGNvZGUgaW4gPENPREU+bGliX3R3YWl0LmM8L0NPREU+IGludGVyZXN0aW5nLiAgSXQgZGVhbHMKK3dpdGggdGhlIHByb2JsZW0gdGhhdCBzb21lIEJTRCBzZWxlY3RzIGRvbid0IHJldHVybiBhIHJlbGlhYmxlCit0aW1lLWxlZnQgdmFsdWUuICBUaGUgZnVuY3Rpb24gPENPREU+dGltZWRfd2FpdCgpPC9DT0RFPiBlZmZlY3RpdmVseQorc2ltdWxhdGVzIGEgU3lzdGVtIFYgc2VsZWN0LgorCis8SDM+PEEgTkFNRT0ibW91c2UiPk1vdXNlIEV2ZW50czwvQT48L0gzPgorCitJZiB0aGUgbW91c2UgaW50ZXJmYWNlIGlzIGFjdGl2ZSwgPENPREU+d2dldGNoKCk8L0NPREU+IHBvbGxzIGZvciBtb3VzZQorZXZlbnRzIGVhY2ggY2FsbCwgYmVmb3JlIGl0IGdvZXMgdG8gdGhlIGtleWJvYXJkIGZvciBpbnB1dC4gIEl0IGlzCit1cCB0byA8Q09ERT5saWJfbW91c2UuYzwvQ09ERT4gaG93IHRoZSBwb2xsaW5nIGlzIGFjY29tcGxpc2hlZDsgaXQgbWF5IHZhcnkKK2ZvciBkaWZmZXJlbnQgZGV2aWNlcy4gPFA+CisKK1VuZGVyIHh0ZXJtLCBob3dldmVyLCBtb3VzZSBldmVudCBub3RpZmljYXRpb25zIGNvbWUgaW4gdmlhIHRoZSBrZXlib2FyZAoraW5wdXQgc3RyZWFtLiAgVGhleSBhcmUgcmVjb2duaXplZCBieSBoYXZpbmcgdGhlIDxTVFJPTkc+a21vdXM8L1NUUk9ORz4gY2FwYWJpbGl0eQorYXMgYSBwcmVmaXguICBUaGlzIGlzIGtpbmQgb2Yga2x1Z2V5LCBidXQgdHJ5aW5nIHRvIHdpcmUgaW4gcmVjb2duaXRpb24gb2YKK2EgbW91c2Uga2V5IHByZWZpeCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGZ1bmN0aW9uLWtleSBtYWNoaW5lcnkgd291bGQKK2JlIGp1c3QgdG9vIHBhaW5mdWwsIGFuZCB0aGlzIHR1cm5zIG91dCB0byBpbXBseSBoYXZpbmcgdGhlIHByZWZpeCBzb21ld2hlcmUKK2luIHRoZSBmdW5jdGlvbi1rZXkgY2FwYWJpbGl0aWVzIGF0IHRlcm1pbmFsLXR5cGUgaW5pdGlhbGl6YXRpb24uIDxQPgorCitUaGlzIGtsdWdlIG9ubHkgd29ya3MgYmVjYXVzZSA8U1RST05HPmttb3VzPC9TVFJPTkc+IGlzbid0IGFjdHVhbGx5IHVzZWQgYnkgYW55CitoaXN0b3JpYyB0ZXJtaW5hbCB0eXBlIG9yIGN1cnNlcyBpbXBsZW1lbnRhdGlvbiB3ZSBrbm93IG9mLiAgQmVzdAorZ3Vlc3MgaXMgaXQncyBhIHJlbGljIG9mIHNvbWUgZm9yZ290dGVuIGV4cGVyaW1lbnQgaW4taG91c2UgYXQgQmVsbAorTGFicyB0aGF0IGRpZG4ndCBsZWF2ZSBhbnkgdHJhY2VzIGluIHRoZSBwdWJsaWNseS1kaXN0cmlidXRlZCBTeXN0ZW0gVgordGVybWluZm8gZmlsZXMuICBJZiBTeXN0ZW0gViBvciBYUEc0IGV2ZXIgZ2V0cyBzZXJpb3VzIGFib3V0IHVzaW5nIGl0CithZ2FpbiwgdGhpcyBrbHVnZSBtYXkgaGF2ZSB0byBjaGFuZ2UuIDxQPgorCitIZXJlIGFyZSBzb21lIG1vcmUgZGV0YWlscyBhYm91dCBtb3VzZSBldmVudCBoYW5kbGluZzogPFA+CisKK1RoZSA8Q09ERT5saWJfbW91c2UoKTwvQ09ERT5jb2RlIGlzIGxvZ2ljYWxseSBzcGxpdCBpbnRvIGEgbG93ZXIgbGV2ZWwgdGhhdAorYWNjZXB0cyBldmVudCByZXBvcnRzIGluIGEgZGV2aWNlLWRlcGVuZGVudCBmb3JtYXQgYW5kIGFuIHVwcGVyIGxldmVsIHRoYXQKK3BhcnNlcyBtb3VzZSBnZXN0dXJlcyBhbmQgZmlsdGVycyBldmVudHMuICBUaGUgbWVkaWF0aW5nIGRhdGEgc3RydWN0dXJlIGlzIGEKK2NpcmN1bGFyIHF1ZXVlIG9mIGV2ZW50IHN0cnVjdHVyZXMuIDxQPgorCitGdW5jdGlvbmFsbHksIHRoZSBsb3dlciBsZXZlbCdzIGpvYiBpcyB0byBwaWNrIHVwIHByaW1pdGl2ZSBldmVudHMgYW5kCitwdXQgdGhlbSBvbiB0aGUgY2lyY3VsYXIgcXVldWUuICBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mIHR3byB3YXlzOgorZWl0aGVyIChhKSA8Q09ERT5fbmNfbW91c2VfZXZlbnQoKTwvQ09ERT4gZGV0ZWN0cyBhIHNlcmllcyBvZiBpbmNvbWluZworbW91c2UgcmVwb3J0cyBhbmQgcXVldWVzIHRoZW0sIG9yIChiKSBjb2RlIGluIDxDT0RFPmxpYl9nZXRjaC5jPC9DT0RFPiBkZXRlY3RzIHRoZQorPFNUUk9ORz5rbW91czwvU1RST05HPiBwcmVmaXggaW4gdGhlIGtleWJvYXJkIGlucHV0IHN0cmVhbSBhbmQgY2FsbHMgX25jX21vdXNlX2lubGluZQordG8gcXVldWUgdXAgYSBzZXJpZXMgb2YgYWRqYWNlbnQgbW91c2UgcmVwb3J0cy4gPFA+CisKK0luIGVpdGhlciBjYXNlLCA8Q09ERT5fbmNfbW91c2VfcGFyc2UoKTwvQ09ERT4gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUKK3NlcmllcyBpcyBhY2NlcHRlZCB0byBwYXJzZSB0aGUgZGlnZXN0ZWQgbW91c2UgcmVwb3J0cyAobG93LWxldmVsCitldmVudHMpIGludG8gYSBnZXN0dXJlIChhIGhpZ2gtbGV2ZWwgb3IgY29tcG9zaXRlIGV2ZW50KS4KKworPEgzPjxBIE5BTUU9Im91dHB1dCI+T3V0cHV0IGFuZCBTY3JlZW4gVXBkYXRpbmc8L0E+PC9IMz4KKworV2l0aCB0aGUgc2luZ2xlIGV4Y2VwdGlvbiBvZiBjaGFyYWN0ZXIgZWNob2VzIGR1cmluZyBhIDxDT0RFPndnZXRuc3RyKCk8L0NPREU+CitjYWxsICh3aGljaCBzaW11bGF0ZXMgY29va2VkLW1vZGUgbGluZSBlZGl0aW5nIGluIGFuIG5jdXJzZXMgd2luZG93KSwKK3RoZSBsaWJyYXJ5IG5vcm1hbGx5IGRvZXMgYWxsIGl0cyBvdXRwdXQgYXQgcmVmcmVzaCB0aW1lLiA8UD4KKworVGhlIG1haW4gam9iIGlzIHRvIGdvIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNjcmVlbiAoYXMgcmVwcmVzZW50ZWQKK2luIHRoZSA8Q09ERT5jdXJzY3I8L0NPREU+IHdpbmRvdyBzdHJ1Y3R1cmUpIHRvIHRoZSBkZXNpcmVkIG5ldyBzdGF0ZSAoYXMKK3JlcHJlc2VudGVkIGluIHRoZSA8Q09ERT5uZXdzY3I8L0NPREU+IHdpbmRvdyBzdHJ1Y3R1cmUpLCB3aGlsZSBkb2luZyBhcworbGl0dGxlIEkvTyBhcyBwb3NzaWJsZS4gPFA+CisKK1RoZSBicmFpbnMgb2YgdGhpcyBvcGVyYXRpb24gYXJlIHRoZSBtb2R1bGVzIDxDT0RFPmhhc2htYXAuYzwvQ09ERT4sCis8Q09ERT5oYXJkc2Nyb2xsLmM8L0NPREU+IGFuZCA8Q09ERT5saWJfZG91cGRhdGUuYzwvQ09ERT47IHRoZSBsYXR0ZXIgdHdvIHVzZQorPENPREU+bGliX212Y3VyLmM8L0NPREU+LiAgRXNzZW50aWFsbHksIHdoYXQgaGFwcGVucyBsb29rcyBsaWtlIHRoaXM6IDxQPgorCitUaGUgPENPREU+aGFzaG1hcC5jPC9DT0RFPiBtb2R1bGUgdHJpZXMgdG8gZGV0ZWN0IHZlcnRpY2FsIG1vdGlvbgorY2hhbmdlcyBiZXR3ZWVuIHRoZSByZWFsIGFuZCB2aXJ0dWFsIHNjcmVlbnMuICBUaGlzIGluZm9ybWF0aW9uCitpcyByZXByZXNlbnRlZCBieSB0aGUgb2xkaW5kZXggbWVtYmVycyBpbiB0aGUgbmV3c2NyIHN0cnVjdHVyZS4KK1RoZXNlIGFyZSBtb2RpZmllZCBieSB2ZXJ0aWNhbC1tb3Rpb24gYW5kIGNsZWFyIG9wZXJhdGlvbnMsIGFuZCBib3RoIGFyZQorcmUtaW5pdGlhbGl6ZWQgYWZ0ZXIgZWFjaCB1cGRhdGUuIFRvIHRoaXMgY2hhbmdlLWpvdXJuYWxsaW5nCitpbmZvcm1hdGlvbiwgdGhlIGhhc2htYXAgY29kZSBhZGRzIGRlZHVjdGlvbnMgbWFkZSB1c2luZyBhIG1vZGlmaWVkIEhlY2tlbAorYWxnb3JpdGhtIG9uIGhhc2ggdmFsdWVzIGdlbmVyYXRlZCBmcm9tIHRoZSBsaW5lIGNvbnRlbnRzLiA8UD4KKworVGhlIDxDT0RFPmhhcmRzY3JvbGwuYzwvQ09ERT4gbW9kdWxlIGNvbXB1dGVzIGFuIG9wdGltdW0gc2V0IG9mIHNjcm9sbCwKK2luc2VydGlvbiwgYW5kIGRlbGV0aW9uIG9wZXJhdGlvbnMgdG8gbWFrZSB0aGUgaW5kaWNlcyBtYXRjaC4gIEl0IGNhbGxzCis8Q09ERT5fbmNfbXZjdXJfc2Nyb2xsbigpPC9DT0RFPiBpbiA8Q09ERT5saWJfbXZjdXIuYzwvQ09ERT4gdG8gZG8gdGhvc2UgbW90aW9ucy4gPFA+CisKK1RoZW4gPENPREU+bGliX2RvdXBkYXRlLmM8L0NPREU+IGdvZXMgdG8gd29yay4gIEl0cyBqb2IgaXMgdG8gZG8gbGluZS1ieS1saW5lCit0cmFuc2Zvcm1hdGlvbnMgb2YgPENPREU+Y3Vyc2NyPC9DT0RFPiBsaW5lcyB0byA8Q09ERT5uZXdzY3I8L0NPREU+IGxpbmVzLiAgSXRzIG1haW4KK3Rvb2wgaXMgdGhlIHJvdXRpbmUgPENPREU+bXZjdXIoKTwvQ09ERT4gaW4gPENPREU+bGliX212Y3VyLmM8L0NPREU+LiAgVGhpcyByb3V0aW5lCitkb2VzIGN1cnNvci1tb3ZlbWVudCBvcHRpbWl6YXRpb24sIGF0dGVtcHRpbmcgdG8gZ2V0IGZyb20gZ2l2ZW4gc2NyZWVuCitsb2NhdGlvbiBBIHRvIGdpdmVuIGxvY2F0aW9uIEIgaW4gdGhlIGZld2VzdCBvdXRwdXQgY2hhcmFjdGVycyBwb3NzaWJsZS4gPFA+CisKK0lmIHlvdSB3YW50IHRvIHdvcmsgb24gc2NyZWVuIG9wdGltaXphdGlvbnMsIHlvdSBzaG91bGQgdXNlIHRoZSBmYWN0Cit0aGF0IChpbiB0aGUgdHJhY2UtZW5hYmxlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5KSBlbmFibGluZyB0aGUKKzxDT0RFPlRSQUNFX1RJTUVTPC9DT0RFPiB0cmFjZSBsZXZlbCBjYXVzZXMgYSByZXBvcnQgdG8gYmUgZW1pdHRlZCBhZnRlcgorZWFjaCBzY3JlZW4gdXBkYXRlIGdpdmluZyB0aGUgZWxhcHNlZCB0aW1lIGFuZCBhIGNvdW50IG9mIGNoYXJhY3RlcnMKK2VtaXR0ZWQgZHVyaW5nIHRoZSB1cGRhdGUuICBZb3UgY2FuIHVzZSB0aGlzIHRvIHRlbGwgd2hlbiBhbiB1cGRhdGUKK29wdGltaXphdGlvbiBpbXByb3ZlcyBlZmZpY2llbmN5LiA8UD4KKworSW4gdGhlIHRyYWNlLWVuYWJsZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxlCithbmQgcmUtZW5hYmxlIHZhcmlvdXMgb3B0aW1pemF0aW9ucyBhdCBydW50aW1lIGJ5IHR3ZWFraW5nIHRoZSB2YXJpYWJsZQorPENPREU+X25jX29wdGltaXplX2VuYWJsZTwvQ09ERT4uICBTZWUgdGhlIGZpbGUgPENPREU+aW5jbHVkZS9jdXJzZXMuaC5pbjwvQ09ERT4KK2ZvciBtYXNrIHZhbHVlcywgbmVhciB0aGUgZW5kLgorCis8SDE+PEEgTkFNRT0iZm1ub3RlIj5UaGUgRm9ybXMgYW5kIE1lbnUgTGlicmFyaWVzPC9BPjwvSDE+CisKK1RoZSBmb3JtcyBhbmQgbWVudSBsaWJyYXJpZXMgc2hvdWxkIHdvcmsgcmVsaWFibHkgaW4gYW55IGVudmlyb25tZW50IHlvdQorY2FuIHBvcnQgbmN1cnNlcyB0by4gVGhlIG9ubHkgcG9ydGFiaWxpdHkgaXNzdWUgYW55d2hlcmUgaW4gdGhlbSBpcyB3aGF0CitmbGF2b3Igb2YgcmVndWxhciBleHByZXNzaW9ucyB0aGUgYnVpbHQtaW4gZm9ybSBmaWVsZCB0eXBlIFRZUEVfUkVHRVhQCit3aWxsIHJlY29nbml6ZS4gPFA+CisKK1RoZSBjb25maWd1cmF0aW9uIGNvZGUgcHJlZmVycyB0aGUgUE9TSVggcmVnZXggZmFjaWxpdHksIG1vZGVsZWQgb24KK1N5c3RlbSBWJ3MsIGJ1dCB3aWxsIHNldHRsZSBmb3IgQlNEIHJlZ2V4cHMgaWYgdGhlIGZvcm1lciBpc24ndCBhdmFpbGFibGUuIDxQPgorCitIaXN0b3JpY2FsIG5vdGU6IHRoZSBwYW5lbHMgY29kZSB3YXMgd3JpdHRlbiBwcmltYXJpbHkgdG8gYXNzaXN0IGluCitwb3J0aW5nIHUzODZtb24gMi4wIChjb21wLnNvdXJjZXMubWlzYyB2MTRpMDAxLTQpIHRvIHN5c3RlbXMgbGFja2luZworcGFuZWxzIHN1cHBvcnQ7IHUzODZtb24gMi4xMCBhbmQgYmV5b25kIHVzZSBpdC4gIFRoaXMgdmVyc2lvbiBoYXMgYmVlbgorc2xpZ2h0bHkgY2xlYW5lZCB1cCBmb3IgPENPREU+bmN1cnNlczwvQ09ERT4uCisKKzxIMT48QSBOQU1FPSJ0aWMiPkEgVG91ciBvZiB0aGUgVGVybWluZm8gQ29tcGlsZXI8L0E+PC9IMT4KKworVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBpbXBsZW1lbnRhdGlvbiBvZiA8U1RST05HPnRpYzwvU1RST05HPiBpcyByYXRoZXIgY29tcGxleAoraW50ZXJuYWxseTsgaXQgaGFzIHRvIGRvIGEgdHJ5aW5nIGNvbWJpbmF0aW9uIG9mIG1pc3Npb25zLiBUaGlzIHN0YXJ0cword2l0aCB0aGUgZmFjdCB0aGF0LCBpbiBhZGRpdGlvbiB0byBpdHMgbm9ybWFsIGR1dHkgb2YgY29tcGlsaW5nCit0ZXJtaW5mbyBzb3VyY2VzIGludG8gbG9hZGFibGUgdGVybWluZm8gYmluYXJpZXMsIGl0IGhhcyB0byBiZSBhYmxlIHRvCitoYW5kbGUgdGVybWNhcCBzeW50YXggYW5kIGNvbXBpbGUgdGhhdCB0b28gaW50byB0ZXJtaW5mbyBlbnRyaWVzLiA8UD4KKworVGhlIGltcGxlbWVudGF0aW9uIHRoZXJlZm9yZSBzdGFydHMgd2l0aCBhIHRhYmxlLWRyaXZlbiwgZHVhbC1tb2RlCitsZXhpY2FsIGFuYWx5emVyIChpbiA8Q09ERT5jb21wX3NjYW4uYzwvQ09ERT4pLiAgVGhlIGxleGVyIGNob29zZXMgaXRzCittb2RlICh0ZXJtY2FwIG9yIHRlcm1pbmZvKSBiYXNlZCBvbiB0aGUgZmlyc3QgYCwnIG9yIGA6JyBpdCBmaW5kcyBpbgorZWFjaCBlbnRyeS4gIFRoZSBsZXhlciBkb2VzIGFsbCB0aGUgd29yayBvZiByZWNvZ25pemluZyBjYXBhYmlsaXR5CituYW1lcyBhbmQgdmFsdWVzOyB0aGUgZ3JhbW1hciBhYm92ZSBpdCBpcyB0cml2aWFsLCBqdXN0ICJwYXJzZSBlbnRyaWVzCit0aWxsIHlvdSBydW4gb3V0IG9mIGZpbGUiLgorCis8SDI+PEEgTkFNRT0ibm9udXNlIj5UcmFuc2xhdGlvbiBvZiBOb24tPFNUUk9ORz51c2U8L1NUUk9ORz4gQ2FwYWJpbGl0aWVzPC9BPjwvSDI+CisKK1RyYW5zbGF0aW9uIG9mIG1vc3QgdGhpbmdzIGJlc2lkZXMgPFNUUk9ORz51c2U8L1NUUk9ORz4gY2FwYWJpbGl0aWVzIGlzIHByZXR0eQorc3RyYWlnaHRmb3J3YXJkLiAgVGhlIGxleGljYWwgYW5hbHl6ZXIncyB0b2tlbml6ZXIgaGFuZHMgZWFjaCBjYXBhYmlsaXR5CituYW1lIHRvIGEgaGFzaCBmdW5jdGlvbiwgd2hpY2ggZHJpdmVzIGEgdGFibGUgbG9va3VwLiAgVGhlIHRhYmxlIGVudHJ5Cit5aWVsZHMgYW4gaW5kZXggd2hpY2ggaXMgdXNlZCB0byBsb29rIHVwIHRoZSB0b2tlbiB0eXBlIGluIGFub3RoZXIgdGFibGUsCithbmQgY29udHJvbHMgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHZhbHVlLiA8UD4KKworT25lIHBvc3NpYmx5IGludGVyZXN0aW5nIGFzcGVjdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgdGhlIHdheSB0aGUKK2NvbXBpbGVyIHRhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuICBBbGwgdGhlIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHZhcmlvdXMKK2F3ay9zZWQvc2ggc2NyaXB0cyBmcm9tIGEgbWFzdGVyIHRhYmxlIDxDT0RFPmluY2x1ZGUvQ2FwczwvQ09ERT47IHRoZXNlCitzY3JpcHRzIGFjdHVhbGx5IHdyaXRlIEMgaW5pdGlhbGl6ZXJzIHdoaWNoIGFyZSBsaW5rZWQgdG8gdGhlIGNvbXBpbGVyLgorRnVydGhlcm1vcmUsIHRoZSBoYXNoIHRhYmxlIGlzIGdlbmVyYXRlZCBpbiB0aGUgc2FtZSB3YXksIHNvIGl0IGRvZXNuJ3QKK2hhdmUgdG8gYmUgZ2VuZXJhdGVkIGF0IGNvbXBpbGVyIHN0YXJ0dXAgdGltZSAoYW5vdGhlciBiZW5lZml0IG9mIHRoaXMKK29yZ2FuaXphdGlvbiBpcyB0aGF0IHRoZSBoYXNoIHRhYmxlIGNhbiBiZSBpbiBzaGFyZWFibGUgdGV4dCBzcGFjZSkuIDxQPgorCitUaHVzLCBhZGRpbmcgYSBuZXcgY2FwYWJpbGl0eSBpcyB1c3VhbGx5IHByZXR0eSB0cml2aWFsLCBqdXN0IGEgbWF0dGVyCitvZiBhZGRpbmcgb25lIGxpbmUgdG8gdGhlIDxDT0RFPmluY2x1ZGUvQ2FwczwvQ09ERT4gZmlsZS4gIFdlJ2xsIGhhdmUgbW9yZQordG8gc2F5IGFib3V0IHRoaXMgaW4gdGhlIHNlY3Rpb24gb24gPEEgSFJFRj0iI3RyYW5zbGF0aW9uIj5Tb3VyY2UtRm9ybQorVHJhbnNsYXRpb248L0E+LgorCis8SDI+PEEgTkFNRT0idXNlcyI+VXNlIENhcGFiaWxpdHkgUmVzb2x1dGlvbjwvQT48L0gyPgorCitUaGUgYmFja2dyb3VuZCBwcm9ibGVtIHRoYXQgbWFrZXMgPFNUUk9ORz50aWM8L1NUUk9ORz4gdHJpY2t5IGlzbid0IHRoZSBjYXBhYmlsaXR5Cit0cmFuc2xhdGlvbiBpdHNlbGYsIGl0J3MgdGhlIHJlc29sdXRpb24gb2YgPFNUUk9ORz51c2U8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLiAgT2xkZXIKK3ZlcnNpb25zIHdvdWxkIG5vdCBoYW5kbGUgZm9yd2FyZCA8U1RST05HPnVzZTwvU1RST05HPiByZWZlcmVuY2VzIGZvciB0aGlzIHJlYXNvbgorKHRoYXQgaXMsIGEgdXNpbmcgdGVybWluYWwgYWx3YXlzIGhhZCB0byBmb2xsb3cgaXRzIHVzZSB0YXJnZXQgaW4gdGhlCitzb3VyY2UgZmlsZSkuICBCeSBkb2luZyB0aGlzLCB0aGV5IGdvdCBhd2F5IHdpdGggYSBzaW1wbGUgaW1wbGVtZW50YXRpb24KK3RhY3RpYzsgY29tcGlsZSBldmVyeXRoaW5nIGFzIGl0IGJsb3dzIGJ5LCB0aGVuIHJlc29sdmUgdXNlcyBmcm9tIGNvbXBpbGVkCitlbnRyaWVzLiA8UD4KKworVGhpcyB3b24ndCBkbyBmb3IgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+LiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGF0IHRoZSB3aG9sZQorY29tcGlsYXRpb24gcHJvY2VzcyBoYXMgdG8gYmUgZW1iZWRkYWJsZSBpbiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkKK3NvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBieSB0aGUgc3RhcnR1cCBjb2RlIHRvIHRyYW5zbGF0ZSB0ZXJtY2FwCitlbnRyaWVzIG9uIHRoZSBmbHkuICBUaGUgZW1iZWRkZWQgdmVyc2lvbiBjYW4ndCBnbyBwcm9taXNjdW91c2x5IHdyaXRpbmcKK2V2ZXJ5dGhpbmcgaXQgdHJhbnNsYXRlcyBvdXQgdG8gZGlzayAtLSBmb3Igb25lIHRoaW5nLCBpdCB3aWxsIHR5cGljYWxseQorYmUgcnVubmluZyB3aXRoIG5vbi1yb290IHBlcm1pc3Npb25zLiA8UD4KKworU28gb3VyIDxTVFJPTkc+dGljPC9TVFJPTkc+IGlzIGRlc2lnbmVkIHRvIHBhcnNlIGFuIGVudGlyZSB0ZXJtaW5mbyBmaWxlIGludG8gYQorZG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGVudHJ5IHN0cnVjdHVyZXMgaW4tY29yZSwgYW5kIHRoZW4gZG8KKzxTVFJPTkc+dXNlPC9TVFJPTkc+IHJlc29sdXRpb24gaW4tbWVtb3J5IGJlZm9yZSB3cml0aW5nIGV2ZXJ5dGhpbmcgb3V0LiAgVGhpcworZGVzaWduIGhhcyBvdGhlciBhZHZhbnRhZ2VzOiBpdCBtYWtlcyBmb3J3YXJkIGFuZCBiYWNrIHVzZS1yZWZlcmVuY2VzCitlcXVhbGx5IGVhc3kgKHNvIHdlIGdldCB0aGUgbGF0dGVyIGZvciBmcmVlKSwgYW5kIGl0IG1ha2VzIGNoZWNraW5nIGZvcgorbmFtZSBjb2xsaXNpb25zIGJlZm9yZSB0aGV5J3JlIHdyaXR0ZW4gb3V0IGVhc3kgdG8gZG8uIDxQPgorCitBbmQgdGhpcyBpcyBleGFjdGx5IGhvdyB0aGUgZW1iZWRkZWQgdmVyc2lvbiB3b3Jrcy4gIEJ1dCB0aGUgc3RhbmQtYWxvbmUKK3VzZXItYWNjZXNzaWJsZSB2ZXJzaW9uIG9mIDxTVFJPTkc+dGljPC9TVFJPTkc+IHBhcnRseSByZXZlcnRzIHRvIHRoZSBoaXN0b3JpY2FsCitzdHJhdGVneTsgaXQgd3JpdGVzIHRvIGRpc2sgKG5vdCBrZWVwaW5nIGluIGNvcmUpIGFueSBlbnRyeSB3aXRoIG5vCis8U1RST05HPnVzZTwvU1RST05HPiByZWZlcmVuY2VzLiA8UD4KKworVGhpcyBpcyBzdHJpY3RseSBhIGNvcmUtZWNvbm9teSBrbHVnZSwgaW1wbGVtZW50ZWQgYmVjYXVzZSB0aGUKK3Rlcm1pbmZvIG1hc3RlciBmaWxlIGlzIGxhcmdlIGVub3VnaCB0aGF0IHNvbWUgY29yZS1wb29yIHN5c3RlbXMgc3dhcAorbGlrZSBjcmF6eSB3aGVuIHlvdSBjb21waWxlIGl0IGFsbCBpbiBtZW1vcnkuLi50aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZgordGhpcyBwcm9jZXNzIHRha2luZyA8U1RST05HPnRocmVlIGhvdXJzPC9TVFJPTkc+LCByYXRoZXIgdGhhbiB0aGUgdHdlbnR5IHNlY29uZHMKK29yIGxlc3MgdHlwaWNhbCBvbiB0aGUgYXV0aG9yJ3MgZGV2ZWxvcG1lbnQgYm94LiA8UD4KKworU28uICBUaGUgZXhlY3V0YWJsZSA8U1RST05HPnRpYzwvU1RST05HPiBwYXNzZXMgdGhlIGVudHJ5LXBhcnNlciBhIGhvb2sgdGhhdAorPEVNPmltbWVkaWF0ZWx5PC9FTT4gd3JpdGVzIG91dCB0aGUgcmVmZXJlbmNlZCBlbnRyeSBpZiBpdCBoYXMgbm8gdXNlCitjYXBhYmlsaXRpZXMuICBUaGUgY29tcGlsZXIgbWFpbiBsb29wIHJlZnJhaW5zIGZyb20gYWRkaW5nIHRoZSBlbnRyeQordG8gdGhlIGluLWNvcmUgbGlzdCB3aGVuIHRoaXMgaG9vayBmaXJlcy4gIElmIHNvbWUgb3RoZXIgZW50cnkgbGF0ZXIKK25lZWRzIHRvIHJlZmVyZW5jZSBhbiBlbnRyeSB0aGF0IGdvdCB3cml0dGVuIGltbWVkaWF0ZWx5LCB0aGF0J3MgT0s7Cit0aGUgcmVzb2x1dGlvbiBjb2RlIHdpbGwgZmV0Y2ggaXQgb2ZmIGRpc2sgd2hlbiBpdCBjYW4ndCBmaW5kIGl0IGluCitjb3JlLiA8UD4KKworTmFtZSBjb2xsaXNpb25zIHdpbGwgc3RpbGwgYmUgZGV0ZWN0ZWQsIGp1c3Qgbm90IGFzIGNsZWFubHkuICBUaGUKKzxDT0RFPndyaXRlX2VudHJ5KCk8L0NPREU+IGNvZGUgY29tcGxhaW5zIGJlZm9yZSBvdmVyd3JpdGluZyBhbiBlbnRyeSB0aGF0Citwb3N0ZGF0ZXMgdGhlIHRpbWUgb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4ncyBmaXJzdCBjYWxsIHRvCis8Q09ERT53cml0ZV9lbnRyeSgpPC9DT0RFPiwgVGh1cyBpdCB3aWxsIGNvbXBsYWluIGFib3V0IG92ZXJ3cml0aW5nCitlbnRyaWVzIG5ld2x5IG1hZGUgZHVyaW5nIHRoZSA8U1RST05HPnRpYzwvU1RST05HPiBydW4sIGJ1dCBub3QgYWJvdXQKK292ZXJ3cml0aW5nIG9uZXMgdGhhdCBwcmVkYXRlIGl0LgorCis8SDI+PEEgTkFNRT0idHJhbnNsYXRpb24iPlNvdXJjZS1Gb3JtIFRyYW5zbGF0aW9uPC9BPjwvSDI+CisKK0Fub3RoZXIgdXNlIG9mIDxTVFJPTkc+dGljPC9TVFJPTkc+IGlzIHRvIGRvIHNvdXJjZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIHZhcmlvdXMgdGVybWNhcAorYW5kIHRlcm1pbmZvIGZvcm1hdHMuICBUaGVyZSBhcmUgbW9yZSB2YXJpYW50cyBvdXQgdGhlcmUgdGhhbiB5b3UgbWlnaHQKK3RoaW5rOyB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFyZSBkZXNjcmliZWQgaW4gdGhlIDxTVFJPTkc+Y2FwdG9pbmZvKDEpPC9TVFJPTkc+CittYW51YWwgcGFnZS4gPFA+CisKK1RoZSB0cmFuc2xhdGlvbiBvdXRwdXQgY29kZSAoPENPREU+ZHVtcF9lbnRyeSgpPC9DT0RFPiBpbgorPENPREU+bmN1cnNlcy9kdW1wX2VudHJ5LmM8L0NPREU+KSBpcyBzaGFyZWQgd2l0aCB0aGUgPFNUUk9ORz5pbmZvY21wKDEpPC9TVFJPTkc+Cit1dGlsaXR5LiAgSXQgdGFrZXMgdGhlIHNhbWUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdXNlZCB0byBnZW5lcmF0ZQordGhlIGJpbmFyeSBmb3JtIGFuZCBkdW1wcyBpdCB0byBzdGFuZGFyZCBvdXRwdXQgaW4gYSBzcGVjaWZpZWQKK2Zvcm1hdC4gPFA+CisKK1RoZSA8Q09ERT5pbmNsdWRlL0NhcHM8L0NPREU+IGZpbGUgaGFzIGEgaGVhZGVyIGNvbW1lbnQgZGVzY3JpYmluZyB3YXlzIHlvdQorY2FuIHNwZWNpZnkgc291cmNlIHRyYW5zbGF0aW9ucyBmb3Igbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIGp1c3QgYnkKK2FsdGVyaW5nIHRoZSBtYXN0ZXIgdGFibGUuICBJdCdzIHBvc3NpYmxlIHRvIHNldCB1cCBjYXBhYmlsaXR5IGFsaWFzaW5nCitvciB0ZWxsIHRoZSBjb21waWxlciB0byBwbGFpbiBpZ25vcmUgYSBnaXZlbiBjYXBhYmlsaXR5IHdpdGhvdXQgd3JpdGluZworYW55IEMgY29kZSBhdCBhbGwuIDxQPgorCitGb3IgY2lyY3Vtc3RhbmNlcyB3aGVyZSB5b3UgbmVlZCB0byBkbyBhbGdvcml0aG1pYyB0cmFuc2xhdGlvbiwgdGhlcmUKK2FyZSBmdW5jdGlvbnMgaW4gPENPREU+cGFyc2VfZW50cnkuYzwvQ09ERT4gY2FsbGVkIGFmdGVyIHRoZSBwYXJzZSBvZiBlYWNoCitlbnRyeSB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgc3VjaAordHJhbnNsYXRpb25zLiAgVGhpcywgZm9yIGV4YW1wbGUsIGlzIHdoZXJlIHRoZSBBSVggPFNUUk9ORz5ib3gxPC9TVFJPTkc+IGNhcGFiaWxpdHkKK2dldCB0cmFuc2xhdGVkIHRvIGFuIDxTVFJPTkc+YWNzYzwvU1RST05HPiBzdHJpbmcuCisKKzxIMT48QSBOQU1FPSJ1dGlscyI+T3RoZXIgVXRpbGl0aWVzPC9BPjwvSDE+CisKK1RoZSA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gdXRpbGl0eSBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIHNhbWUKK2VudHJ5LWR1bXBpbmcgY29kZSB1c2VkIGJ5IDxTVFJPTkc+dGljPC9TVFJPTkc+IGZvciBzb3VyY2UgdHJhbnNsYXRpb24uICBQZXJoYXBzCit0aGUgb25lIGludGVyZXN0aW5nIGFzcGVjdCBvZiB0aGUgY29kZSBpcyB0aGUgdXNlIG9mIGEgcHJlZGljYXRlCitmdW5jdGlvbiBwYXNzZWQgaW4gdG8gPENPREU+ZHVtcF9lbnRyeSgpPC9DT0RFPiB0byBjb250cm9sIHdoaWNoCitjYXBhYmlsaXRpZXMgYXJlIGR1bXBlZC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGhhbmRsZSBib3RoCit0aGUgb3JkaW5hcnkgRGUtY29tcGlsYXRpb24gY2FzZSBhbmQgZW50cnkgZGlmZmVyZW5jZSByZXBvcnRpbmcuIDxQPgorCitUaGUgPFNUUk9ORz50cHV0PC9TVFJPTkc+IGFuZCA8U1RST05HPmNsZWFyPC9TVFJPTkc+IHV0aWxpdGllcyBqdXN0IGRvIGFuIGVudHJ5IGxvYWQKK2ZvbGxvd2VkIGJ5IGEgPENPREU+dHB1dHMoKTwvQ09ERT4gb2YgYSBzZWxlY3RlZCBjYXBhYmlsaXR5LgorCis8SDE+PEEgTkFNRT0ic3R5bGUiPlN0eWxlIFRpcHMgZm9yIERldmVsb3BlcnM8L0E+PC9IMT4KKworU2VlIHRoZSBUTy1ETyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uCitmb3IgYWRkaXRpb25zIHRoYXQgd291bGQgYmUgcGFydGljdWxhcmx5IHVzZWZ1bC4gPFA+CisKK1RoZSBwcmVmaXggPENPREU+X25jXzwvQ09ERT4gc2hvdWxkIGJlIHVzZWQgb24gbGlicmFyeSBwdWJsaWMgZnVuY3Rpb25zIHRoYXQgYXJlCitub3QgcGFydCBvZiB0aGUgY3Vyc2VzIEFQSSBpbiBvcmRlciB0byBwcmV2ZW50IHBvbGx1dGlvbiBvZiB0aGUKK2FwcGxpY2F0aW9uIG5hbWVzcGFjZS4KKworSWYgeW91IGhhdmUgdG8gYWRkIHRvIG9yIG1vZGlmeSB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBpbiBjdXJzZXMuaC5pbiwKK3JlYWQgbmN1cnNlcy9NS2xpYl9nZW4uc2ggZmlyc3Qgc28geW91IGNhbiBhdm9pZCBicmVha2luZyBYU0kgY29uZm9ybWFuY2UuCisKK1BsZWFzZSBqb2luIHRoZSBuY3Vyc2VzIG1haWxpbmcgbGlzdC4gIFNlZSB0aGUgSU5TVEFMTCBmaWxlIGluIHRoZQordG9wIGxldmVsIG9mIHRoZSBkaXN0cmlidXRpb24gZm9yIGRldGFpbHMgb24gdGhlIGxpc3QuIDxQPgorCitMb29rIGZvciB0aGUgc3RyaW5nIDxDT0RFPkZJWE1FPC9DT0RFPiBpbiBzb3VyY2UgZmlsZXMgdG8gdGFnIG1pbm9yIGJ1Z3MKK2FuZCBwb3RlbnRpYWwgcHJvYmxlbXMgdGhhdCBjb3VsZCB1c2UgZml4aW5nLiA8UD4KKworRG9uJ3QgdHJ5IHRvIGF1dG8tZGV0ZWN0IE9TIGZlYXR1cmVzIGluIHRoZSBtYWluIGJvZHkgb2YgdGhlIEMgY29kZS4KK1RoYXQncyB0aGUgam9iIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gPFA+CisKK1RvIGhvbGQgZG93biBjb21wbGV4aXR5LCBkbyBtYWtlIHlvdXIgY29kZSBkYXRhLWRyaXZlbi4gIEVzcGVjaWFsbHksCitpZiB5b3UgY2FuIGRyaXZlIGxvZ2ljIGZyb20gYSB0YWJsZSBmaWx0ZXJlZCBvdXQgb2YKKzxDT0RFPmluY2x1ZGUvQ2FwczwvQ09ERT4sIGRvIGl0LiAgSWYgeW91IGZpbmQgeW91IG5lZWQgdG8gYXVnbWVudCB0aGUKK2RhdGEgaW4gdGhhdCBmaWxlIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBwcm9wZXIgdGFibGUsIHRoYXQncyBzdGlsbAorcHJlZmVyYWJsZSB0byBhZC1ob2MgY29kZSAtLSB0aGF0J3Mgd2h5IHRoZSBmaWZ0aCBmaWVsZCAoZmxhZ3MpIGlzCit0aGVyZS4gPFA+CisKK0hhdmUgZnVuIQorCis8SDE+PEEgTkFNRT0icG9ydCI+UG9ydGluZyBIaW50czwvQT48L0gxPgorCitUaGUgZm9sbG93aW5nIG5vdGVzIGFyZSBpbnRlbmRlZCB0byBiZSBhIGZpcnN0IHN0ZXAgdG93YXJkcyBET1MgYW5kIE1hY2ludG9zaAorcG9ydHMgb2YgdGhlIG5jdXJzZXMgbGlicmFyaWVzLiA8UD4KKworVGhlIGZvbGxvd2luZyBsaWJyYXJ5IG1vZHVsZXMgYXJlIGBwdXJlIGN1cnNlcyc7IHRoZXkgb3BlcmF0ZSBvbmx5IG9uCit0aGUgY3Vyc2VzIGludGVybmFsIHN0cnVjdHVyZXMsIGRvIGFsbCBvdXRwdXQgdGhyb3VnaCBvdGhlciBjdXJzZXMKK2NhbGxzIChub3QgaW5jbHVkaW5nIDxDT0RFPnRwdXRzKCk8L0NPREU+IGFuZCA8Q09ERT5wdXRwKCk8L0NPREU+KSBhbmQgZG8gbm90CitjYWxsIGFueSBvdGhlciBVTklYIHJvdXRpbmVzIHN1Y2ggYXMgc2lnbmFsKDIpIG9yIHRoZSBzdGRpbyBsaWJyYXJ5LgorVGh1cywgdGhleSBzaG91bGQgbm90IG5lZWQgdG8gYmUgbW9kaWZpZWQgZm9yIHNpbmdsZS10ZXJtaW5hbAorcG9ydHMuIAorCis8YmxvY2txdW90ZT4KKzxjb2RlPgorbGliX2FkZGNoLmMKK2xpYl9hZGRzdHIuYworbGliX2JrZ2QuYworbGliX2JveC5jCitsaWJfY2xlYXIuYworbGliX2NscmJvdC5jCitsaWJfY2xyZW9sLmMKK2xpYl9kZWxjaC5jCitsaWJfZGVsd2luLmMKK2xpYl9lcmFzZS5jCitsaWJfaW5jaHN0ci5jCitsaWJfaW5zY2guYworbGliX2luc2RlbC5jCitsaWJfaW5zc3RyLmMKK2xpYl9rZXluYW1lLmMKK2xpYl9tb3ZlLmMKK2xpYl9tdndpbi5jCitsaWJfbmV3d2luLmMKK2xpYl9vdmVybGF5LmMKK2xpYl9wYWQuYworbGliX3ByaW50dy5jCitsaWJfcmVmcmVzaC5jCitsaWJfc2NhbncuYworbGliX3Njcm9sbC5jCitsaWJfc2NycmVnLmMKK2xpYl9zZXRfdGVybS5jCitsaWJfdG91Y2guYworbGliX3RwYXJtLmMKK2xpYl90cHV0cy5jCitsaWJfdW5jdHJsLmMKK2xpYl93aW5kb3cuYworcGFuZWwuYworPC9jb2RlPgorPC9ibG9ja3F1b3RlPgorPFA+CisKK1RoaXMgbW9kdWxlIGlzIHB1cmUgY3Vyc2VzLCBidXQgY2FsbHMgb3V0c3RyKCk6CisKKzxibG9ja3F1b3RlPgorPGNvZGU+CitsaWJfZ2V0c3RyLmMKKzwvY29kZT4KKzwvYmxvY2txdW90ZT4KKzxQPgorCitUaGVzZSBtb2R1bGVzIGFyZSBwdXJlIGN1cnNlcywgZXhjZXB0IHRoYXQgdGhleSB1c2UgPENPREU+dHB1dHMoKTwvQ09ERT4KK2FuZCA8Q09ERT5wdXRwKCk8L0NPREU+OgorCis8YmxvY2txdW90ZT4KKzxjb2RlPgorbGliX2JlZXAuYworbGliX2NvbG9yLmMKK2xpYl9lbmR3aW4uYworbGliX29wdGlvbnMuYworbGliX3Nsay5jCitsaWJfdmlkYXR0ci5jCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+Cis8UD4KKworVGhpcyBtb2R1bGVzIGFzc2lzdCBpbiBQT1NJWCBlbXVsYXRpb24gb24gbm9uLVBPU0lYIHN5c3RlbXM6Cis8REw+Cis8RFQ+IHNpZ2FjdGlvbi5jCis8REQ+IHNpZ25hbCBjYWxscworPC9ETD4KKworVGhlIGZvbGxvd2luZyBzb3VyY2UgZmlsZXMgd2lsbCBub3QgYmUgbmVlZGVkIGZvciBhCitzaW5nbGUtdGVybWluYWwtdHlwZSBwb3J0LgorCis8YmxvY2txdW90ZT4KKzxjb2RlPgorYWxsb2NfZW50cnkuYworY2FwdG9pbmZvLmMKK2NsZWFyLmMKK2NvbXBfY2FwdGFiLmMKK2NvbXBfZXJyb3IuYworY29tcF9oYXNoLmMKK2NvbXBfbWFpbi5jCitjb21wX3BhcnNlLmMKK2NvbXBfc2Nhbi5jCitkdW1wX2VudHJ5LmMKK2luZm9jbXAuYworcGFyc2VfZW50cnkuYworcmVhZF9lbnRyeS5jCit0cHV0LmMKK3dyaXRlX2VudHJ5LmMKKzwvY29kZT4KKzwvYmxvY2txdW90ZT4KKzxQPgorCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgd2lsbCB1c2Ugb3BlbigpL3JlYWQoKS93cml0ZSgpL2Nsb3NlKCkvbHNlZWsoKSBvbiBmaWxlcywKK2J1dCBubyBvdGhlciBPUyBjYWxscy4KKworPERMPgorPERUPmxpYl9zY3JlZW4uYworPEREPnVzZWQgdG8gcmVhZC93cml0ZSBzY3JlZW4gZHVtcHMKKzxEVD5saWJfdHJhY2UuYworPEREPnVzZWQgdG8gd3JpdGUgdHJhY2UgZGF0YSB0byB0aGUgbG9nZmlsZQorPC9ETD4KKworTW9kdWxlcyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUgbW9kaWZpZWQgZm9yIGEgcG9ydCBzdGFydCBoZXJlOiA8UD4KKworVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBgcHVyZSBjdXJzZXMnIGJ1dCBjb250YWluIGFzc3VtcHRpb25zIGluYXBwcm9wcmlhdGUKK2ZvciBhIG1lbW9yeS1tYXBwZWQgcG9ydC4KKworPGRsPgorPGR0PmxpYl9sb25nbmFtZS5jPGRkPmFzc3VtZXMgdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRlcm1pbmFscworPGR0PmxpYl9hY3MuYzxkZD5hc3N1bWVzIGFjc19tYXAgYXMgYSBkb3VibGUgaW5kaXJlY3Rpb24KKzxkdD5saWJfbXZjdXIuYzxkZD5hc3N1bWVzIGN1cnNvciBtb3ZlcyBoYXZlIHZhcmlhYmxlIGNvc3QKKzxkdD5saWJfdGVybWNhcC5jPGRkPmFzc3VtZXMgdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRlcm1pbmFscworPGR0PmxpYl90aS5jPGRkPmFzc3VtZXMgdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRlcm1pbmFscworPC9kbD4KKworVGhlIGZvbGxvd2luZyBtb2R1bGVzIHVzZSBVTklYLXNwZWNpZmljIGNhbGxzOgorCis8ZGw+Cis8ZHQ+bGliX2RvdXBkYXRlLmM8ZGQ+aW5wdXQgY2hlY2tpbmcKKzxkdD5saWJfZ2V0Y2guYzxkZD5yZWFkKCkKKzxkdD5saWJfaW5pdHNjci5jPGRkPmdldGVudigpCis8ZHQ+bGliX25ld3Rlcm0uYworPGR0PmxpYl9iYXVkcmF0ZS5jCis8ZHQ+bGliX2tlcm5lbC5jPGRkPnZhcmlvdXMgdHR5LW1hbmlwdWxhdGlvbiBhbmQgc3lzdGVtIGNhbGxzCis8ZHQ+bGliX3Jhdy5jPGRkPnZhcmlvdXMgdHR5LW1hbmlwdWxhdGlvbiBjYWxscworPGR0PmxpYl9zZXR1cC5jPGRkPnZhcmlvdXMgdHR5LW1hbmlwdWxhdGlvbiBjYWxscworPGR0PmxpYl9yZXN0YXJ0LmM8ZGQ+dmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGNhbGxzCis8ZHQ+bGliX3RzdHAuYzxkZD5zaWduYWwtbWFuaXB1bGF0aW9uIGNhbGxzCis8ZHQ+bGliX3R3YWl0LmM8ZGQ+Z2V0dGltZW9mZGF5KCksIHNlbGVjdCgpLgorPC9kbD4KKworPEhSPgorPEFERFJFU1M+RXJpYyBTLiBSYXltb25kICZsdDtlc3JAc25hcmsudGh5cnN1cy5jb20mZ3Q7PC9BRERSRVNTPgorKE5vdGU6IFRoaXMgaXMgPEVNPm5vdDwvRU0+IHRoZSA8QSBIUkVGPSIjYnVndHJhY2siPmJ1ZyBhZGRyZXNzPC9BPiEpCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9pbmRleC5odG1sIGIvZG9jL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjJhOTBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDMuMC8vRU4iPgorPCEtLQorICAkSWQ6IGluZGV4Lmh0bWwsdiAxLjIgMjAwNi8wNC8yMiAyMjoyOToxMiB0b20gRXhwICQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5XZWxjb21lIHRvIG5jdXJzZXM8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPC9IRUFEPgorPEJPRFk+CisKKzxIMT5XZWxjb21lIHRvIG5jdXJzZXM8L0gxPgorRnJvbSB0aGlzIGluZGV4IHBhZ2UgeW91IGhhdmUgYWNjZXNzIHRvIHRoZXNlIGZ1cnRoZXIgZG9jdW1lbnRzCis8VUw+Cis8TEk+VGhlIDxhIGhyZWY9ImFubm91bmNlLmh0bWwiPkFubm91bmNlbWVudDwvYT4gb2YgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBuY3Vyc2VzLjwvTEk+Cis8TEk+QW4gPGEgaHJlZj0ibmN1cnNlcy1pbnRyby5odG1sIj5JbnRyb2R1Y3Rpb248L2E+IGludG8gKG4pY3Vyc2VzIHByb2dyYW1taW5nLjwvTEk+Cis8TEk+QSA8YSBocmVmPSJoYWNrZ3VpZGUuaHRtbCI+aGFja2VycyBndWlkZTwvYT4gdG8gbmN1cnNlcy48L0xJPgorPExJPkEgZGVzY3JpcHRpb24gb2YgdGhlIDxhIGhyZWY9IkFkYTk1Lmh0bWwiPkFkYTk1IGJpbmRpbmc8L2E+IHRvIG5jdXJzZXMuPC9MST4KKzwvVUw+PFA+CitXZSBhbHNvIGhhdmUgSFRNTCB2ZXJzaW9ucyBvZiBhbGwgdGhlIG5jdXJzZXMgPGEgaHJlZj0ibWFuIj5tYW5wYWdlczwvYT4uCis8L0JPRFk+Cis8L0hUTUw+Cis8IS0tCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOmh0bWwKKyMgY2FzZS1mb2xkLXNlYXJjaDpuaWwKKyMgZmlsbC1jb2x1bW46NzAKKyMgRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY2FwdG9pbmZvLjFtLmh0bWwgYi9kb2MvaHRtbC9tYW4vY2FwdG9pbmZvLjFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiMzE1MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jYXB0b2luZm8uMW0uaHRtbApAQCAtMCwwICsxLDIyNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY2FwdG9pbmZvLjFtLHYgMS4yMiAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmNhcHRvaW5mbyAxbTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmNhcHRvaW5mbyAxbTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY2FwdG9pbmZvLjFtLmh0bWwiPmNhcHRvaW5mbygxbSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvKDFtKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmNhcHRvaW5mbzwvU1RST05HPiAgLSBjb252ZXJ0IGEgPEVNPnRlcm1jYXA8L0VNPiBkZXNjcmlwdGlvbiBpbnRvIGEgPEVNPnRlcm1pbmZvPC9FTT4KKyAgICAgICBkZXNjcmlwdGlvbgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2FwdG9pbmZvPC9TVFJPTkc+IFs8U1RST05HPi12PC9TVFJPTkc+PEVNPm48L0VNPiA8RU0+d2lkdGg8L0VNPl0gIFs8U1RST05HPi1WPC9TVFJPTkc+XSBbPFNUUk9ORz4tMTwvU1RST05HPl0gWzxTVFJPTkc+LXc8L1NUUk9ORz4gPEVNPndpZHRoPC9FTT5dIDxFTT5maWxlPC9FTT4gLiAuIC4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmNhcHRvaW5mbzwvU1RST05HPiBsb29rcyBpbiA8RU0+ZmlsZTwvRU0+ICBmb3IgIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiAgZGVzY3JpcHRpb25zLiAgIEZvcgorICAgICAgIGVhY2ggIG9uZSAgZm91bmQsICBhbiAgZXF1aXZhbGVudCAgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkZXNjcmlwdGlvbiBpcworICAgICAgIHdyaXR0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0LiAgVGVybWNhcCA8U1RST05HPnRjPC9TVFJPTkc+ICBjYXBhYmlsaXRpZXMgIGFyZQorICAgICAgIHRyYW5zbGF0ZWQgZGlyZWN0bHkgdG8gdGVybWluZm8gPFNUUk9ORz51c2U8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLgorCisgICAgICAgSWYgbm8gPEVNPmZpbGU8L0VNPiBpcyBnaXZlbiwgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNQ0FQPC9TVFJPTkc+CisgICAgICAgaXMgdXNlZCBmb3IgdGhlIGZpbGVuYW1lIG9yIGVudHJ5LiAgSWYgPFNUUk9ORz5URVJNQ0FQPC9TVFJPTkc+IGlzICBhICBmdWxsCisgICAgICAgcGF0aG5hbWUgdG8gYSBmaWxlLCBvbmx5IHRoZSB0ZXJtaW5hbCB3aG9zZSBuYW1lIGlzIHNwZWNpLQorICAgICAgIGZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPiAgaXMgIGV4dHJhY3RlZCAgZnJvbQorICAgICAgIHRoYXQgIGZpbGUuICAgSWYgIHRoZSAgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNQ0FQPC9TVFJPTkc+IGlzIG5vdAorICAgICAgIHNldCwgdGhlbiB0aGUgZmlsZSA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm88L1NUUk9ORz4gaXMgcmVhZC4KKworICAgICAgIDxTVFJPTkc+LXY8L1NUUk9ORz4gICBwcmludCBvdXQgdHJhY2luZyBpbmZvcm1hdGlvbiBvbiAgc3RhbmRhcmQgIGVycm9yICBhcworICAgICAgICAgICAgdGhlIHByb2dyYW0gcnVucy4KKworICAgICAgIDxTVFJPTkc+LVY8L1NUUk9ORz4gICBwcmludCAgb3V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGluIHVzZSBvbiBzdGFuLQorICAgICAgICAgICAgZGFyZCBlcnJvciBhbmQgZXhpdC4KKworICAgICAgIDxTVFJPTkc+LTE8L1NUUk9ORz4gICBjYXVzZSB0aGUgZmllbGRzIHRvIHByaW50IG91dCBvbmUgdG8gYSBsaW5lLiAgIE90aGVyLQorICAgICAgICAgICAgd2lzZSwgdGhlIGZpZWxkcyB3aWxsIGJlIHByaW50ZWQgc2V2ZXJhbCB0byBhIGxpbmUgdG8KKyAgICAgICAgICAgIGEgbWF4aW11bSB3aWR0aCBvZiA2MCBjaGFyYWN0ZXJzLgorCisgICAgICAgPFNUUk9ORz4tdzwvU1RST05HPiAgIGNoYW5nZSB0aGUgb3V0cHV0IHRvIDxFTT53aWR0aDwvRU0+IGNoYXJhY3RlcnMuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mbyBDb21waWxlZCAgICAgdGVybWluYWwgICAgICBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UuCisKKworPC9QUkU+Cis8SDI+VFJBTlNMQVRJT05TIEZST00gTk9OU1RBTkRBUkQgQ0FQQUJJTElUSUVTPC9IMj48UFJFPgorICAgICAgIFNvbWUgIG9ic29sZXRlIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkKKyAgICAgICBiZSB0cmFuc2xhdGVkIGludG8gIHN0YW5kYXJkICAoU1ZyNC9YU0kgIEN1cnNlcykgIHRlcm1pbmZvCisgICAgICAgY2FwYWJpbGl0aWVzICBieSAgPFNUUk9ORz5jYXB0b2luZm88L1NUUk9ORz4uICAgV2hlbmV2ZXIgb25lIG9mIHRoZXNlIGF1dG8tCisgICAgICAgbWF0aWMgdHJhbnNsYXRpb25zIGlzIGRvbmUsICB0aGUgIHByb2dyYW0gIHdpbGwgIGlzc3VlICBhbgorICAgICAgIG5vdGlmaWNhdGlvbiB0byBzdGRlcnIsIGludml0aW5nIHRoZSB1c2VyIHRvIGNoZWNrIHRoYXQgaXQKKyAgICAgICBoYXMgbm90IG1pc3Rha2VubHkgdHJhbnNsYXRlZCAgYSAgY29tcGxldGVseSAgdW5rbm93biAgYW5kCisgICAgICAgcmFuZG9tIGNhcGFiaWxpdHkgYW5kL29yIHN5bnRheCBlcnJvci4KKworCisgICAgICAgTm9uc3RkICAgU3RkICAgIEZyb20gICAgICAgICAgIFRlcm1pbmZvCisgICAgICAgIG5hbWUgICAgbmFtZSAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eQorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQk8gICAgICAgbXIgICAgIEFUJmFtcDtUICAgIGVudGVyX3JldmVyc2VfbW9kZQorICAgICAgIENJICAgICAgIHZpICAgICBBVCZhbXA7VCAgICBjdXJzb3JfaW52aXNpYmxlCisgICAgICAgQ1YgICAgICAgdmUgICAgIEFUJmFtcDtUICAgIGN1cnNvcl9ub3JtYWwKKyAgICAgICBEUyAgICAgICBtaCAgICAgQVQmYW1wO1QgICAgZW50ZXJfZGltX21vZGUKKyAgICAgICBFRSAgICAgICBtZSAgICAgQVQmYW1wO1QgICAgZXhpdF9hdHRyaWJ1dGVfbW9kZQorICAgICAgIEZFICAgICAgIExGICAgICBBVCZhbXA7VCAgICBsYWJlbF9vbgorICAgICAgIEZMICAgICAgIExPICAgICBBVCZhbXA7VCAgICBsYWJlbF9vZmYKKyAgICAgICBYUyAgICAgICBtayAgICAgQVQmYW1wO1QgICAgZW50ZXJfc2VjdXJlX21vZGUKKyAgICAgICBFTiAgICAgICBANyAgICAgWEVOSVggICBrZXlfZW5kCisgICAgICAgR0UgICAgICAgYWUgICAgIFhFTklYICAgZXhpdF9hbHRfY2hhcnNldF9tb2RlCisgICAgICAgR1MgICAgICAgYXMgICAgIFhFTklYICAgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQorICAgICAgIEhNICAgICAgIGtoICAgICBYRU5JWCAgIGtleV9ob21lCisKKyAgICAgICBMRCAgICAgICBrTCAgICAgWEVOSVggICBrZXlfZGwKKyAgICAgICBQRCAgICAgICBrTiAgICAgWEVOSVggICBrZXlfbnBhZ2UKKyAgICAgICBQTiAgICAgICBwbyAgICAgWEVOSVggICBwcnRyX29mZgorICAgICAgIFBTICAgICAgIHBmICAgICBYRU5JWCAgIHBydHJfb24KKyAgICAgICBQVSAgICAgICBrUCAgICAgWEVOSVggICBrZXlfcHBhZ2UKKyAgICAgICBSVCAgICAgICBAOCAgICAgWEVOSVggICBrZW50CisgICAgICAgVVAgICAgICAga3UgICAgIFhFTklYICAga2N1dTEKKyAgICAgICBLQSAgICAgICBrOyAgICAgVGVrICAgICBrZXlfZjEwCisgICAgICAgS0IgICAgICAgRjEgICAgIFRlayAgICAga2V5X2YxMQorICAgICAgIEtDICAgICAgIEYyICAgICBUZWsgICAgIGtleV9mMTIKKyAgICAgICBLRCAgICAgICBGMyAgICAgVGVrICAgICBrZXlfZjEzCisgICAgICAgS0UgICAgICAgRjQgICAgIFRlayAgICAga2V5X2YxNAorICAgICAgIEtGICAgICAgIEY1ICAgICBUZWsgICAgIGtleV9mMTUKKyAgICAgICBCQyAgICAgICBTYiAgICAgVGVrICAgICBzZXRfYmFja2dyb3VuZAorICAgICAgIEZDICAgICAgIFNmICAgICBUZWsgICAgIHNldF9mb3JlZ3JvdW5kCisgICAgICAgSFMgICAgICAgbWggICAgIElyaXMgICAgZW50ZXJfZGltX21vZGUKKworICAgICAgIFhFTklYICB0ZXJtY2FwICBhbHNvIHVzZWQgdG8gaGF2ZSBhIHNldCBvZiBleHRlbnNpb24gY2FwYS0KKyAgICAgICBiaWxpdGllcyBmb3IgZm9ybXMgZHJhd2luZywgZGVzaWduZWQgdG8gdGFrZSBhZHZhbnRhZ2UgIG9mCisgICAgICAgdGhlIElCTSBQQyBoaWdoLWhhbGYgZ3JhcGhpY3MuICBUaGV5IHdlcmUgYXMgZm9sbG93czoKKworCisgICAgICAgQ2FwICAgICAgICAgIEdyYXBoaWMKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEcyICAgIHVwcGVyIGxlZnQKKyAgICAgICBHMyAgICBsb3dlciBsZWZ0CisgICAgICAgRzEgICAgdXBwZXIgcmlnaHQKKyAgICAgICBHNCAgICBsb3dlciByaWdodAorICAgICAgIEdSICAgIHBvaW50aW5nIHJpZ2h0CisgICAgICAgR0wgICAgcG9pbnRpbmcgbGVmdAorICAgICAgIEdVICAgIHBvaW50aW5nIHVwCisgICAgICAgR0QgICAgcG9pbnRpbmcgZG93bgorICAgICAgIEdIICAgIGhvcml6b250YWwgbGluZQorICAgICAgIEdWICAgIHZlcnRpY2FsIGxpbmUKKyAgICAgICBHQyAgICBpbnRlcnNlY3Rpb24KKyAgICAgICBHNiAgICB1cHBlciBsZWZ0CisgICAgICAgRzcgICAgbG93ZXIgbGVmdAorICAgICAgIEc1ICAgIHVwcGVyIHJpZ2h0CisgICAgICAgRzggICAgbG93ZXIgcmlnaHQKKyAgICAgICBHciAgICB0ZWUgcG9pbnRpbmcgcmlnaHQKKyAgICAgICBHciAgICB0ZWUgcG9pbnRpbmcgbGVmdAorICAgICAgIEd1ICAgIHRlZSBwb2ludGluZyB1cAorICAgICAgIEdkICAgIHRlZSBwb2ludGluZyBkb3duCisgICAgICAgR2ggICAgaG9yaXpvbnRhbCBsaW5lCisgICAgICAgR3YgICAgdmVydGljYWwgbGluZQorICAgICAgIEdjICAgIGludGVyc2VjdGlvbgorICAgICAgIEdHICAgIGFjcyBtYWdpYyBjb29raWUgY291bnQKKworICAgICAgIElmICB0aGUgIHNpbmdsZS1saW5lICBjYXBhYmlsaXRpZXMgb2NjdXIgaW4gYW4gZW50cnksIHRoZXkKKyAgICAgICB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29tcG9zZWQgaW50byBhbiA8RU0+YWNzYzwvRU0+ICBzdHJpbmcuICAgVGhlCisgICAgICAgZG91YmxlLWxpbmUgY2FwYWJpbGl0aWVzIGFuZCA8U1RST05HPkdHPC9TVFJPTkc+IGFyZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm4tCisgICAgICAgaW5nIG1lc3NhZ2UuCisKKyAgICAgICBJQk0ncyBBSVggaGFzIGEgdGVybWluZm8gZmFjaWxpdHkgZGVzY2VuZGVkIGZyb20gU1ZyMSB0ZXItCisgICAgICAgbWluZm8gYnV0IGluY29tcGF0aWJsZSB3aXRoIHRoZSBTVnI0IGZvcm1hdC4gVGhlIGZvbGxvd2luZworICAgICAgIEFJWCBleHRlbnNpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQ6CisKKyAgICAgICAgSUJNICAgIFhTSQorICAgICAgIC0tLS0tLS0tLS0tLS0KKyAgICAgICBrc2VsICAgIGtzbHQKKyAgICAgICBrYnRhYiAgIGtjYnQKKyAgICAgICBmb250MCAgIHMwZHMKKyAgICAgICBmb250MSAgIHMxZHMKKyAgICAgICBmb250MiAgIHMyZHMKKyAgICAgICBmb250MyAgIHMzZHMKKworICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIEFJWCA8RU0+Ym94MTwvRU0+IGNhcGFiaWxpdHkgIHdpbGwgIGJlICBhdXRvbWF0aS0KKyAgICAgICBjYWxseSB0cmFuc2xhdGVkIHRvIGFuIDxFTT5hY3NjPC9FTT4gc3RyaW5nLgorCisgICAgICAgSGV3bGV0dC1QYWNrYXJkJ3MgIHRlcm1pbmZvICBsaWJyYXJ5IHN1cHBvcnRzIHR3byBub25zdGFuLQorICAgICAgIGRhcmQgdGVybWluZm8gY2FwYWJpbGl0aWVzIDxFTT5tZW1sPC9FTT4gIChtZW1vcnkgIGxvY2spICBhbmQgIDxFTT5tZW11PC9FTT4KKyAgICAgICAobWVtb3J5ICB1bmxvY2spLiAgIFRoZXNlIHdpbGwgYmUgZGlzY2FyZGVkIHdpdGggYSB3YXJuaW5nCisgICAgICAgbWVzc2FnZS4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGlzIHV0aWxpdHkgaXMgYWN0dWFsbHkgYSBsaW5rIHRvIDxTVFJPTkc+PEEgSFJFRj0idGljLjFtLmh0bWwiPnRpYygxbSk8L0E+PC9TVFJPTkc+LCBydW5uaW5nIGluICA8RU0+LUk8L0VNPgorICAgICAgIG1vZGUuICBZb3UgY2FuIHVzZSBvdGhlciA8U1RST05HPnRpYzwvU1RST05HPiBvcHRpb25zIHN1Y2ggYXMgPFNUUk9ORz4tZjwvU1RST05HPiBhbmQgIDxTVFJPTkc+LXg8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIHRyYWNlIG9wdGlvbiBpcyBub3QgaWRlbnRpY2FsIHRvIFNWcjQncy4gIFVuZGVyIFNWcjQsCisgICAgICAgaW5zdGVhZCBvZiBmb2xsb3dpbmcgdGhlIDxTVFJPTkc+LXY8L1NUUk9ORz4gd2l0aCAgYSAgdHJhY2UgIGxldmVsICBuLCAgeW91CisgICAgICAgcmVwZWF0IGl0IG4gdGltZXMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+CisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgRXJpYyBTLiBSYXltb25kICZsdDtlc3JAc25hcmsudGh5cnN1cy5jb20mZ3Q7CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvKDFtKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2NsZWFyLjEuaHRtbCBiL2RvYy9odG1sL21hbi9jbGVhci4xLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2NjFiNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jbGVhci4xLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjbGVhci4xLHYgMS42IDIwMDYvMTIvMjQgMTg6MDc6NTMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y2xlYXIgMTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmNsZWFyIDE8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImNsZWFyLjEuaHRtbCI+Y2xlYXIoMSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY2xlYXIuMS5odG1sIj5jbGVhcigxKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmNsZWFyPC9TVFJPTkc+IC0gY2xlYXIgdGhlIHRlcm1pbmFsIHNjcmVlbgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmNsZWFyPC9TVFJPTkc+IGNsZWFycyB5b3VyIHNjcmVlbiBpZiB0aGlzIGlzIHBvc3NpYmxlLiAgSXQgbG9va3MgaW4KKyAgICAgICB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCB0aGVuIGluIHRoZSA8U1RST05HPnRlci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNsZWFyIHRoZSBzY3JlZW4uCisKKyAgICAgICA8U1RST05HPmNsZWFyPC9TVFJPTkc+ICBpZ25vcmVzICBhbnkgIGNvbW1hbmQtbGluZSAgcGFyYW1ldGVycyAgdGhhdCBtYXkgYmUKKyAgICAgICBwcmVzZW50LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idHB1dC4xLmh0bWwiPnRwdXQoMSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+CisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY2xlYXIuMS5odG1sIj5jbGVhcigxKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfYWRkX3djaC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfYWRkX3djaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmN2M4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19hZGRfd2NoLjN4Lmh0bWwKQEAgLTAsMCArMSwxNDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19hZGRfd2NoLjN4LHYgMS42IDIwMDYvMTIvMjQgMTU6MjI6MjIgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19hZGRfd2NoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19hZGRfd2NoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YWRkX3djaDwvU1RST05HPiwgICA8U1RST05HPndhZGRfd2NoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmFkZF93Y2g8L1NUUk9ORz4sICA8U1RST05HPm12d2FkZF93Y2g8L1NUUk9ORz4sICA8U1RST05HPmVjaG9fd2NoYXI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53ZWNob193Y2hhcjwvU1RST05HPiAtIGFkZCBhIGNvbXBsZXggY2hhcmFjdGVyIGFuZCByZW5kaXRpb24gIHRvICBhCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93LCB0aGVuIGFkdmFuY2UgdGhlIGN1cnNvcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZF93Y2goPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiA8U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkX3djaCg8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiA8U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmFkZF93Y2goPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4gPFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+ICA8U1RST05HPm12d2FkZF93Y2goPC9TVFJPTkc+ICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmVjaG9fd2NoYXIoPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiA8U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53ZWNob193Y2hhcig8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiA8U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+YWRkX3djaDwvU1RST05HPiwgPFNUUk9ORz53YWRkX3djaDwvU1RST05HPiwgPFNUUk9ORz5tdmFkZF93Y2g8L1NUUk9ORz4sIGFuZCA8U1RST05HPm12d2FkZF93Y2g8L1NUUk9ORz4gZnVuY3Rpb25zCisgICAgICAgcHV0IHRoZSBjb21wbGV4IGNoYXJhY3RlciA8RU0+d2NoPC9FTT4gaW50byB0aGUgZ2l2ZW4gd2luZG93IGF0IGl0cworICAgICAgIGN1cnJlbnQgcG9zaXRpb24sIHdoaWNoIGlzIHRoZW4gYWR2YW5jZWQuICBUaGVzZSBmdW5jdGlvbnMKKyAgICAgICBwZXJmb3JtICB3cmFwcGluZyBhbmQgc3BlY2lhbC1jaGFyYWN0ZXIgcHJvY2Vzc2luZyBhcyBmb2wtCisgICAgICAgbG93czoKKworICAgICAgIC0gICAgSWYgPEVNPndjaDwvRU0+IHJlZmVycyB0byBhIHNwYWNpbmcgY2hhcmFjdGVyLCB0aGVuIGFueSBwcmV2aS0KKyAgICAgICAgICAgIG91cyAgY2hhcmFjdGVyICBhdCAgdGhhdCAgbG9jYXRpb24gaXMgcmVtb3ZlZC4gIEEgbmV3CisgICAgICAgICAgICBjaGFyYWN0ZXIgc3BlY2lmaWVkIGJ5IDxFTT53Y2g8L0VNPiBpcyBwbGFjZWQgYXQgdGhhdCBsb2NhdGlvbgorICAgICAgICAgICAgd2l0aCAgcmVuZGl0aW9uICBzcGVjaWZpZWQgIGJ5ICA8RU0+d2NoPC9FTT4uICBUaGUgY3Vyc29yIHRoZW4KKyAgICAgICAgICAgIGFkdmFuY2VzIHRvIHRoZSBuZXh0IHNwYWNpbmcgY2hhcmFjdGVyIG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICAtICAgIElmICA8RU0+d2NoPC9FTT4gcmVmZXJzIHRvIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyLCBhbGwgcHJldmktCisgICAgICAgICAgICBvdXMgY2hhcmFjdGVycyBhdCB0aGF0IGxvY2F0aW9uIGFyZSAgcHJlc2VydmVkLiAgIFRoZQorICAgICAgICAgICAgbm9uLXNwYWNpbmcgIGNoYXJhY3RlcnMgb2YgPEVNPndjaDwvRU0+IGFyZSBhZGRlZCB0byB0aGUgc3BhYy0KKyAgICAgICAgICAgIGluZyBjb21wbGV4IGNoYXJhY3RlciwgYW5kIHRoZSByZW5kaXRpb24gc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICA8RU0+d2NoPC9FTT4gaXMgaWdub3JlZC4KKworICAgICAgIC0gICAgSWYgIHRoZSAgY2hhcmFjdGVyICBwYXJ0ICBvZiAgPEVNPndjaDwvRU0+ICBpcyBhIHRhYiwgbmV3bGluZSwKKyAgICAgICAgICAgIGJhY2tzcGFjZSBvciBvdGhlciBjb250cm9sIGNoYXJhY3RlciwgdGhlICB3aW5kb3cgIGlzCisgICAgICAgICAgICB1cGRhdGVkIGFuZCB0aGUgY3Vyc29yIG1vdmVzIGFzIGlmIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4gd2VyZSBjYWxsZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz5lY2hvX3djaGFyPC9TVFJPTkc+IGZ1bmN0aW9uIGlzIGZ1bmN0aW9uYWxseSAgZXF1aXZhbGVudCAgdG8gIGEKKyAgICAgICBjYWxsIHRvIDxTVFJPTkc+YWRkX3djaDwvU1RST05HPiBmb2xsb3dlZCBieSBhIGNhbGwgdG8gPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+LiAgU2ltaWxhcmx5LAorICAgICAgIHRoZSA8U1RST05HPndlY2hvX3djaGFyPC9TVFJPTkc+IGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvICBhICBjYWxsICB0bworICAgICAgIDxTVFJPTkc+d2FkZF93Y2g8L1NUUk9ORz4gIGZvbGxvd2VkICBieSAgYSBjYWxsIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4uICBUaGUga25vd2xlZGdlCisgICAgICAgdGhhdCBvbmx5IGEgc2luZ2xlIGNoYXJhY3RlciBpcyBiZWluZyBvdXRwdXQgaXMgdGFrZW4gaW50bworICAgICAgIGNvbnNpZGVyYXRpb24gYW5kLCBmb3Igbm9uLWNvbnRyb2wgY2hhcmFjdGVycywgYSBjb25zaWRlci0KKyAgICAgICBhYmxlIHBlcmZvcm1hbmNlIGdhaW4gbWlnaHQgYmUgc2VlbiBieSAgdXNpbmcgIHRoZSAgKjxTVFJPTkc+ZWNobzwvU1RST05HPioKKyAgICAgICBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGVpciBlcXVpdmFsZW50cy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IG9uCisgICAgICAgc3VjY2Vzcy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5hZGRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12YWRkX3djaDwvU1RST05HPiwgPFNUUk9ORz5tdndhZGRfd2NoPC9TVFJPTkc+LCAgYW5kICA8U1RST05HPmVjaG9fd2NoYXI8L1NUUk9ORz4KKyAgICAgICBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIEFsbCAgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3Rhbi0KKyAgICAgICBkYXJkLCBJc3N1ZSA0LiAgVGhlIGRlZmF1bHRzIHNwZWNpZmllZCAgZm9yICBmb3Jtcy1kcmF3aW5nCisgICAgICAgY2hhcmFjdGVycyBhcHBseSBpbiB0aGUgUE9TSVggbG9jYWxlLgorCisgICAgICAgWFNJICBkb2N1bWVudHMgIGNvbnN0YW50cyAgYmVnaW5uaW5nICB3aXRoIDxTVFJPTkc+V0FDU188L1NUUk9ORz4gd2hpY2ggYXJlCisgICAgICAgdXNlZCBmb3IgbGluZS1kcmF3aW5nLiAgVGhvc2UgIGFyZSAgbm90ICBjdXJyZW50bHkgIGltcGxlLQorICAgICAgIG1lbnRlZCBpbiA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0icHV0d2MuMy5odG1sIj5wdXR3YygzKTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkOTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2FkZF93Y2hzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2FkZF93Y2hzdHIuM3gsdiAxLjYgMjAwNS8wMS8wMiAwMToyODo0OSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2FkZF93Y2hzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2FkZF93Y2hzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5hZGRfd2Noc3RyPC9TVFJPTkc+LCAgICA8U1RST05HPmFkZF93Y2huc3RyPC9TVFJPTkc+LCAgIDxTVFJPTkc+d2FkZF93Y2hzdHI8L1NUUk9ORz4sICAgPFNUUk9ORz53YWRkX3djaG5zdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmFkZF93Y2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZhZGRfd2NobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndhZGRfd2Noc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZF93Y2huc3RyPC9TVFJPTkc+CisgICAgICAgLSBhZGQgYW4gYXJyYXkgb2YgY29tcGxleCBjaGFyYWN0ZXJzIChhbmQgYXR0cmlidXRlcykgdG8gYQorICAgICAgIGN1cnNlcyB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hZGRfd2Noc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hZGRfd2NobnN0cihjb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkX3djaHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IDxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkX3djaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPiA8RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmFkZF93Y2hzdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmFkZF93Y2huc3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndhZGRfd2Noc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2FkZF93Y2huc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGNvcHkgdGhlIGFycmF5IG9mIGNvbXBsZXggY2hhcmFjdGVycyA8RU0+d2Noc3RyPC9FTT4KKyAgICAgICBpbnRvICB0aGUgIHdpbmRvdyBpbWFnZSBzdHJ1Y3R1cmUgYXQgYW5kIGFmdGVyIHRoZSBjdXJyZW50CisgICAgICAgY3Vyc29yIHBvc2l0aW9uLiAgVGhlIGZvdXIgcm91dGluZXMgd2l0aCAgPEVNPm48L0VNPiAgYXMgIHRoZSAgbGFzdAorICAgICAgIGFyZ3VtZW50ICBjb3B5ICBhdCAgbW9zdCA8RU0+bjwvRU0+IGVsZW1lbnRzLCBidXQgbm8gbW9yZSB0aGFuIHdpbGwKKyAgICAgICBmaXQgb24gdGhlIGxpbmUuICBJZiA8U1RST05HPm48L1NUUk9ORz49PFNUUk9ORz4tMTwvU1RST05HPiB0aGVuIHRoZSB3aG9sZSBhcnJheSBpcyAgY29waWVkLAorICAgICAgIHRvICB0aGUgIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3aWxsIGZpdCBvbiB0aGUKKyAgICAgICBsaW5lLgorCisgICAgICAgVGhlIHdpbmRvdyBjdXJzb3IgaXMgPEVNPm5vdDwvRU0+IGFkdmFuY2VkLiAgIFRoZXNlICByb3V0aW5lcyAgd29yaworICAgICAgIGZhc3RlciB0aGFuIDxTVFJPTkc+d2FkZG5zdHI8L1NUUk9ORz4uICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBkbyBub3QgcGVyLQorICAgICAgIGZvcm0gY2hlY2tpbmcgKHN1Y2ggYXMgZm9yIHRoZSBuZXdsaW5lLCBiYWNrc3BhY2UsIG9yIGNhci0KKyAgICAgICByaWFnZSAgcmV0dXJuIGNoYXJhY3RlcnMpLCB0aGV5IGRvIG5vdCBhZHZhbmNlIHRoZSBjdXJyZW50CisgICAgICAgY3Vyc29yIHBvc2l0aW9uLCB0aGV5IGRvIG5vdCBleHBhbmQgb3RoZXIgY29udHJvbCAgY2hhcmFjLQorICAgICAgIHRlcnMgIHRvICBeLWVzY2FwZXMsICBhbmQgIHRoZXkgIHRydW5jYXRlIHRoZSBzdHJpbmcgaWYgaXQKKyAgICAgICBjcm9zc2VzIHRoZSByaWdodCBtYXJnaW4sIHJhdGhlciB0aGFuIHdyYXBwaW5nICBpdCAgYXJvdW5kCisgICAgICAgdG8gdGhlIG5ldyBsaW5lLgorCisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbmQgIHN1Y2Nlc3NmdWxseSAgb24gZW5jb3VudGVyaW5nIGEgbnVsbAorICAgICAgIDxFTT5jY2hhcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnQ8L0VNPiwgb3Igd2hlbiB0aGV5IGhhdmUgZmlsbGVkIHRoZSBjdXJyZW50IGxpbmUuICBJZiAgYQorICAgICAgIGNvbXBsZXggIGNoYXJhY3RlciBjYW5ub3QgY29tcGxldGVseSBmaXQgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICBjdXJyZW50IGxpbmUsIHRoZSByZW1haW5pbmcgY29sdW1ucyBhcmUgIGZpbGxlZCAgd2l0aCAgdGhlCisgICAgICAgYmFja2dyb3VuZCBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBBbGwgZnVuY3Rpb25zIGV4Y2VwdCA8U1RST05HPndhZGRfd2NobnN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24KKyAgICAgICBzdWNjZXNzLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIEFsbCB0aGVzZSBlbnRyeSBwb2ludHMgYXJlIGRlc2NyaWJlZCAgaW4gIHRoZSAgWFNJICBDdXJzZXMKKyAgICAgICBzdGFuZGFyZCwgSXNzdWUgNC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfYWRkY2guM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyNTMyYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwKQEAgLTAsMCArMSwyMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYWRkY2guM3gsdiAxLjI3IDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19hZGRjaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYWRkY2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmFkZGNoPC9TVFJPTkc+LCAgPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4sICA8U1RST05HPm12YWRkY2g8L1NUUk9ORz4sICA8U1RST05HPm12d2FkZGNoPC9TVFJPTkc+LCA8U1RST05HPmVjaG9jaGFyPC9TVFJPTkc+LCA8U1RST05HPndlY2hvY2hhcjwvU1RST05HPiAtCisgICAgICAgYWRkIGEgY2hhcmFjdGVyICh3aXRoIGF0dHJpYnV0ZXMpIHRvIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93LCB0aGVuCisgICAgICAgYWR2YW5jZSB0aGUgY3Vyc29yCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkY2goY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkY2goaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3YWRkY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5lY2hvY2hhcihjb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndlY2hvY2hhcihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5hZGRjaDwvU1RST05HPiwgIDxTVFJPTkc+d2FkZGNoPC9TVFJPTkc+LCA8U1RST05HPm12YWRkY2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bXZ3YWRkY2g8L1NUUk9ORz4gcm91dGluZXMgcHV0IHRoZQorICAgICAgIGNoYXJhY3RlciA8RU0+Y2g8L0VNPiBpbnRvIHRoZSBnaXZlbiB3aW5kb3cgYXQgaXRzICBjdXJyZW50ICB3aW5kb3cKKyAgICAgICBwb3NpdGlvbiwgIHdoaWNoICBpcyB0aGVuIGFkdmFuY2VkLiAgVGhleSBhcmUgYW5hbG9nb3VzIHRvCisgICAgICAgPFNUUk9ORz5wdXRjaGFyPC9TVFJPTkc+IGluIDxTVFJPTkc+PEEgSFJFRj0ic3RkaW8uMy5odG1sIj5zdGRpbygzKTwvQT48L1NUUk9ORz4uICBJZiB0aGUgYWR2YW5jZSBpcyBhdCB0aGUgcmlnaHQgIG1hci0KKyAgICAgICBnaW4sICB0aGUgIGN1cnNvciAgYXV0b21hdGljYWxseSB3cmFwcyB0byB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgdGhlIG5leHQgbGluZS4gIEF0IHRoZSBib3R0b20gIG9mICB0aGUgIGN1cnJlbnQgIHNjcm9sbGluZworICAgICAgIHJlZ2lvbiwgIGlmICA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+ICBpcyBlbmFibGVkLCB0aGUgc2Nyb2xsaW5nIHJlZ2lvbiBpcworICAgICAgIHNjcm9sbGVkIHVwIG9uZSBsaW5lLgorCisgICAgICAgSWYgPEVNPmNoPC9FTT4gaXMgYSB0YWIsIG5ld2xpbmUsIG9yIGJhY2tzcGFjZSwgdGhlIGN1cnNvciBpcyBtb3ZlZAorICAgICAgIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZSB3aW5kb3cuICBCYWNrc3BhY2UgbW92ZXMgdGhlIGN1ci0KKyAgICAgICBzb3Igb25lIGNoYXJhY3RlciBsZWZ0OyBhdCB0aGUgbGVmdCBlZGdlIG9mICBhICB3aW5kb3cgIGl0CisgICAgICAgZG9lcyAgbm90aGluZy4gICBOZXdsaW5lICBkb2VzICBhIDxTVFJPTkc+Y2xydG9lb2w8L1NUUk9ORz4sIHRoZW4gbW92ZXMgdGhlCisgICAgICAgY3Vyc29yIHRvICB0aGUgIHdpbmRvdyAgbGVmdCAgbWFyZ2luICBvbiAgdGhlICBuZXh0ICBsaW5lLAorICAgICAgIHNjcm9sbGluZyAgdGhlICB3aW5kb3cgaWYgb24gdGhlIGxhc3QgbGluZS4gIFRhYnMgYXJlIGNvbi0KKyAgICAgICBzaWRlcmVkIHRvIGJlIGF0IGV2ZXJ5IGVpZ2h0aCBjb2x1bW4uICAgVGhlICB0YWIgIGludGVydmFsCisgICAgICAgbWF5IGJlIGFsdGVyZWQgYnkgc2V0dGluZyB0aGUgPFNUUk9ORz5UQUJTSVpFPC9TVFJPTkc+IHZhcmlhYmxlLgorCisgICAgICAgSWYgPEVNPmNoPC9FTT4gaXMgYW55IGNvbnRyb2wgY2hhcmFjdGVyIG90aGVyIHRoYW4gdGFiLCBuZXdsaW5lLCBvcgorICAgICAgIGJhY2tzcGFjZSwgaXQgaXMgZHJhd24gIGluICA8U1RST05HPl48L1NUUk9ORz48RU0+WDwvRU0+ICBub3RhdGlvbi4gICBDYWxsaW5nICA8U1RST05HPndpbmNoPC9TVFJPTkc+CisgICAgICAgYWZ0ZXIgYWRkaW5nIGEgY29udHJvbCBjaGFyYWN0ZXIgZG9lcyBub3QgcmV0dXJuIHRoZSBjaGFyLQorICAgICAgIGFjdGVyIGl0c2VsZiwgYnV0IGluc3RlYWQgcmV0dXJucyB0aGUgXi1yZXByZXNlbnRhdGlvbiAgb2YKKyAgICAgICB0aGUgY29udHJvbCBjaGFyYWN0ZXIuCisKKyAgICAgICBWaWRlbyBhdHRyaWJ1dGVzIGNhbiBiZSBjb21iaW5lZCB3aXRoIGEgY2hhcmFjdGVyIGFyZ3VtZW50CisgICAgICAgcGFzc2VkIHRvIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4gb3IgcmVsYXRlZCBmdW5jdGlvbnMgYnkgbG9naWNhbC1PUmluZyB0aGVtCisgICAgICAgaW50byAgdGhlICBjaGFyYWN0ZXIuICAgKFRodXMsIHRleHQsIGluY2x1ZGluZyBhdHRyaWJ1dGVzLAorICAgICAgIGNhbiBiZSBjb3BpZWQgZnJvbSBvbmUgcGxhY2UgdG8gIGFub3RoZXIgIHVzaW5nICA8U1RST05HPmluY2g8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4uKSAgIFNlZSAgdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+IHBhZ2UgZm9yIHZhbHVlcyBvZiBwcmVkZS0KKyAgICAgICBmaW5lZCB2aWRlbyBhdHRyaWJ1dGUgY29uc3RhbnRzIHRoYXQgY2FuIGJlIHVzZWZ1bGx5IE9SJ2VkCisgICAgICAgaW50byBjaGFyYWN0ZXJzLgorCisgICAgICAgVGhlICA8U1RST05HPmVjaG9jaGFyPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+d2VjaG9jaGFyPC9TVFJPTkc+IHJvdXRpbmVzIGFyZSBlcXVpdmFsZW50IHRvIGEKKyAgICAgICBjYWxsIHRvIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4gZm9sbG93ZWQgYnkgYSBjYWxsIHRvIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiwgb3IgYSBjYWxsICB0bworICAgICAgIDxTVFJPTkc+d2FkZGNoPC9TVFJPTkc+IGZvbGxvd2VkIGJ5IGEgY2FsbCB0byA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+LiAgVGhlIGtub3dsZWRnZSB0aGF0CisgICAgICAgb25seSBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgYmVpbmcgb3V0cHV0IGlzIHVzZWQgIGFuZCwgIGZvcgorICAgICAgIG5vbi1jb250cm9sICBjaGFyYWN0ZXJzLCAgYSAgY29uc2lkZXJhYmxlIHBlcmZvcm1hbmNlIGdhaW4KKyAgICAgICBtYXkgYmUgc2VlbiBieSAgdXNpbmcgIHRoZXNlICByb3V0aW5lcyAgaW5zdGVhZCAgb2YgIHRoZWlyCisgICAgICAgZXF1aXZhbGVudHMuCisKKyAgIDxTVFJPTkc+TGluZTwvU1RST05HPiA8U1RST05HPkdyYXBoaWNzPC9TVFJPTkc+CisgICAgICAgVGhlICBmb2xsb3dpbmcgIHZhcmlhYmxlcyAgbWF5IGJlIHVzZWQgdG8gYWRkIGxpbmUgZHJhd2luZworICAgICAgIGNoYXJhY3RlcnMgdG8gdGhlIHNjcmVlbiB3aXRoIHJvdXRpbmVzIG9mIHRoZSAgPFNUUk9ORz5hZGRjaDwvU1RST05HPiAgZmFtLQorICAgICAgIGlseS4gICBUaGUgIGRlZmF1bHQgIGNoYXJhY3RlciBsaXN0ZWQgYmVsb3cgaXMgdXNlZCBpZiB0aGUKKyAgICAgICA8U1RST05HPmFjc2M8L1NUUk9ORz4gIGNhcGFiaWxpdHkgIGRvZXMgIG5vdCAgZGVmaW5lICBhICAgdGVybWluYWwtc3BlY2lmaWMKKyAgICAgICByZXBsYWNlbWVudCAgZm9yICBpdC4gICBUaGUgIG5hbWVzICBhcmUgIHRha2VuICBmcm9tIFZUMTAwCisgICAgICAgbm9tZW5jbGF0dXJlLgorCisKKyAgICAgICA8RU0+TmFtZTwvRU0+ICAgICAgICAgICA8RU0+RGVmYXVsdDwvRU0+ICAgPEVNPkRlc2NyaXB0aW9uPC9FTT4KKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEFDU19CTE9DSyAgICAgICMgICAgICAgICBzb2xpZCBzcXVhcmUgYmxvY2sKKyAgICAgICBBQ1NfQk9BUkQgICAgICAjICAgICAgICAgYm9hcmQgb2Ygc3F1YXJlcworICAgICAgIEFDU19CVEVFICAgICAgICsgICAgICAgICBib3R0b20gdGVlCisgICAgICAgQUNTX0JVTExFVCAgICAgbyAgICAgICAgIGJ1bGxldAorICAgICAgIEFDU19DS0JPQVJEICAgIDogICAgICAgICBjaGVja2VyIGJvYXJkIChzdGlwcGxlKQorICAgICAgIEFDU19EQVJST1cgICAgIHYgICAgICAgICBhcnJvdyBwb2ludGluZyBkb3duCisgICAgICAgQUNTX0RFR1JFRSAgICAgJyAgICAgICAgIGRlZ3JlZSBzeW1ib2wKKyAgICAgICBBQ1NfRElBTU9ORCAgICArICAgICAgICAgZGlhbW9uZAorICAgICAgIEFDU19HRVFVQUwgICAgICZndDsgICAgICAgICBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8KKyAgICAgICBBQ1NfSExJTkUgICAgICAtICAgICAgICAgaG9yaXpvbnRhbCBsaW5lCisgICAgICAgQUNTX0xBTlRFUk4gICAgIyAgICAgICAgIGxhbnRlcm4gc3ltYm9sCisgICAgICAgQUNTX0xBUlJPVyAgICAgJmx0OyAgICAgICAgIGFycm93IHBvaW50aW5nIGxlZnQKKyAgICAgICBBQ1NfTEVRVUFMICAgICAmbHQ7ICAgICAgICAgbGVzcy10aGFuLW9yLWVxdWFsLXRvCisgICAgICAgQUNTX0xMQ09STkVSICAgKyAgICAgICAgIGxvd2VyIGxlZnQtaGFuZCBjb3JuZXIKKyAgICAgICBBQ1NfTFJDT1JORVIgICArICAgICAgICAgbG93ZXIgcmlnaHQtaGFuZCBjb3JuZXIKKyAgICAgICBBQ1NfTFRFRSAgICAgICArICAgICAgICAgbGVmdCB0ZWUKKyAgICAgICBBQ1NfTkVRVUFMICAgICAhICAgICAgICAgbm90LWVxdWFsCisgICAgICAgQUNTX1BJICAgICAgICAgKiAgICAgICAgIGdyZWVrIHBpCisgICAgICAgQUNTX1BMTUlOVVMgICAgIyAgICAgICAgIHBsdXMvbWludXMKKyAgICAgICBBQ1NfUExVUyAgICAgICArICAgICAgICAgcGx1cworICAgICAgIEFDU19SQVJST1cgICAgICZndDsgICAgICAgICBhcnJvdyBwb2ludGluZyByaWdodAorICAgICAgIEFDU19SVEVFICAgICAgICsgICAgICAgICByaWdodCB0ZWUKKyAgICAgICBBQ1NfUzEgICAgICAgICAtICAgICAgICAgc2NhbiBsaW5lIDEKKyAgICAgICBBQ1NfUzMgICAgICAgICAtICAgICAgICAgc2NhbiBsaW5lIDMKKyAgICAgICBBQ1NfUzcgICAgICAgICAtICAgICAgICAgc2NhbiBsaW5lIDcKKyAgICAgICBBQ1NfUzkgICAgICAgICBfICAgICAgICAgc2NhbiBsaW5lIDkKKyAgICAgICBBQ1NfU1RFUkxJTkcgICBmICAgICAgICAgcG91bmQtc3Rlcmxpbmcgc3ltYm9sCisgICAgICAgQUNTX1RURUUgICAgICAgKyAgICAgICAgIHRvcCB0ZWUKKyAgICAgICBBQ1NfVUFSUk9XICAgICBeICAgICAgICAgYXJyb3cgcG9pbnRpbmcgdXAKKyAgICAgICBBQ1NfVUxDT1JORVIgICArICAgICAgICAgdXBwZXIgbGVmdC1oYW5kIGNvcm5lcgorICAgICAgIEFDU19VUkNPUk5FUiAgICsgICAgICAgICB1cHBlciByaWdodC1oYW5kIGNvcm5lcgorICAgICAgIEFDU19WTElORSAgICAgIHwgICAgICAgICB2ZXJ0aWNhbCBsaW5lCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IG9uCisgICAgICAgc3VjY2VzcyAgKHRoZSAgU1ZyNCBtYW51YWxzIHNwZWNpZnkgb25seSAiYW4gaW50ZWdlciB2YWx1ZQorICAgICAgIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyLQorICAgICAgIHdpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlICB0aGF0ICA8U1RST05HPmFkZGNoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmFkZGNoPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZGNoPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5lY2hvY2hhcjwvU1RST05HPiBtYXkgYmUKKyAgICAgICBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgQWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuLQorICAgICAgIGRhcmQsICBJc3N1ZSAgNC4gIFRoZSBkZWZhdWx0cyBzcGVjaWZpZWQgZm9yIGZvcm1zLWRyYXdpbmcKKyAgICAgICBjaGFyYWN0ZXJzIGFwcGx5IGluIHRoZSBQT1NJWCBsb2NhbGUuCisKKyAgICAgICBTb21lIEFDUyBzeW1ib2xzIChBQ1NfUzMsIEFDU19TNywgQUNTX0xFUVVBTCwgIEFDU19HRVFVQUwsCisgICAgICAgQUNTX1BJLCAgQUNTX05FUVVBTCwgIEFDU19TVEVSTElORykgd2VyZSBub3QgZG9jdW1lbnRlZCBpbgorICAgICAgIGFueSBwdWJsaWNseSByZWxlYXNlZCBTeXN0ZW0gVi4gICBIb3dldmVyLCAgbWFueSAgcHVibGljbHkKKyAgICAgICBhdmFpbGFibGUgIHRlcm1pbmZvcyAgaW5jbHVkZSAgPFNUUk9ORz5hY3NjPC9TVFJPTkc+IHN0cmluZ3MgaW4gd2hpY2ggdGhlaXIKKyAgICAgICBrZXkgY2hhcmFjdGVycyAocHJ5ent8fSkgYXJlIGVtYmVkZGVkLCBhbmQgIGEgIHNlY29uZC1oYW5kCisgICAgICAgbGlzdCAgb2YgIHRoZWlyICBjaGFyYWN0ZXIgZGVzY3JpcHRpb25zIGhhcyBjb21lIHRvIGxpZ2h0LgorICAgICAgIFRoZSAgQUNTLXByZWZpeGVkICBuYW1lcyAgZm9yICB0aGVtICB3ZXJlICAgaW52ZW50ZWQgICBmb3IKKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgVGhlICA8U1RST05HPlRBQlNJWkU8L1NUUk9ORz4gIHZhcmlhYmxlICBpcyBpbXBsZW1lbnRlZCBpbiBzb21lIHZlcnNpb25zIG9mCisgICAgICAgY3Vyc2VzLCBidXQgaXMgbm90IHBhcnQgb2YgWC9PcGVuIGN1cnNlcy4KKworICAgICAgIElmIDxFTT5jaDwvRU0+IGlzIGEgY2FycmlhZ2UgcmV0dXJuLCB0aGUgY3Vyc29yICBpcyAgbW92ZWQgIHRvICB0aGUKKyAgICAgICBiZWdpbm5pbmcgIG9mIHRoZSBjdXJyZW50IHJvdyBvZiB0aGUgd2luZG93LiAgVGhpcyBpcyB0cnVlCisgICAgICAgb2Ygb3RoZXIgaW1wbGVtZW50YXRpb25zLCBidXQgaXMgbm90IGRvY3VtZW50ZWQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJwdXRjLjMuaHRtbCI+cHV0YygzKTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBDb21wYXJhYmxlICBmdW5jdGlvbnMgIGluICB0aGUgIHdpZGUtY2hhcmFjdGVyICAobmN1cnNlc3cpCisgICAgICAgbGlicmFyeSBhcmUgZGVzY3JpYmVkIGluIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM0MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2FkZGNoc3RyLjN4LHYgMS4xMiAyMDA2LzEyLzAyIDE3OjAyOjQ1IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYWRkY2hzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2FkZGNoc3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5hZGRjaHN0cjwvU1RST05HPiwgPFNUUk9ORz5hZGRjaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2FkZGNoc3RyPC9TVFJPTkc+LCA8U1RST05HPndhZGRjaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZhZGRjaHN0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12YWRkY2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZGNoc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZGNobnN0cjwvU1RST05HPiAtIGFkZCBhIHN0cmluZyBvZgorICAgICAgIGNoYXJhY3RlcnMgKGFuZCBhdHRyaWJ1dGVzKSB0byBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZGNoc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZGNobnN0cihjb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRjaHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRjaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkY2hzdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkY2huc3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2FkZGNoc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+eCw8L1NUUk9ORz4gIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4qY2hzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+ICA8U1RST05HPm12d2FkZGNobnN0cihXSU5ET1c8L1NUUk9ORz4gIDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBjb3B5IDxFTT5jaHN0cjwvRU0+IGludG8gdGhlIHdpbmRvdyBpbWFnZSAgc3RydWN0dXJlCisgICAgICAgYXQgIGFuZCAgYWZ0ZXIgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLiAgVGhlIGZvdXIgcm91LQorICAgICAgIHRpbmVzIHdpdGggPEVNPm48L0VNPiBhcyB0aGUgbGFzdCBhcmd1bWVudCBjb3B5IGF0IG1vc3QgPEVNPm48L0VNPiBlbGVtZW50cywKKyAgICAgICBidXQgIG5vICBtb3JlIHRoYW4gd2lsbCBmaXQgb24gdGhlIGxpbmUuICBJZiA8U1RST05HPm48L1NUUk9ORz49PFNUUk9ORz4tMTwvU1RST05HPiB0aGVuIHRoZQorICAgICAgIHdob2xlIHN0cmluZyBpcyBjb3BpZWQsIHRvIHRoZSBtYXhpbXVtIG51bWJlciAgb2YgIGNoYXJhYy0KKyAgICAgICB0ZXJzIHRoYXQgd2lsbCBmaXQgb24gdGhlIGxpbmUuCisKKyAgICAgICBUaGUgd2luZG93IGN1cnNvciBpcyA8RU0+bm90PC9FTT4gYWR2YW5jZWQsIGFuZCB0aGVzZSByb3V0aW5lcyB3b3JrCisgICAgICAgZmFzdGVyIHRoYW4gPFNUUk9ORz53YWRkbnN0cjwvU1RST05HPi4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGV5IGRvIG5vdCBwZXItCisgICAgICAgZm9ybSAgYW55ICBraW5kICBvZiAgY2hlY2tpbmcgIChzdWNoICBhcyAgZm9yIHRoZSBuZXdsaW5lLAorICAgICAgIGJhY2tzcGFjZSwgb3IgY2FycmlhZ2UgcmV0dXJuIGNoYXJhY3RlcnMpLCB0aGV5IGRvIG5vdCBhZC0KKyAgICAgICB2YW5jZSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24sIHRoZXkgZG8gbm90IGV4cGFuZCBvdGgtCisgICAgICAgZXIgY29udHJvbCBjaGFyYWN0ZXJzIHRvIF4tZXNjYXBlcywgYW5kIHRoZXkgdHJ1bmNhdGUgIHRoZQorICAgICAgIHN0cmluZyAgaWYgIGl0IGNyb3NzZXMgdGhlIHJpZ2h0IG1hcmdpbiwgcmF0aGVyIHRoYW4gd3JhcC0KKyAgICAgICBwaW5nIGl0IGFyb3VuZCB0byB0aGUgbmV3IGxpbmUuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiBvbgorICAgICAgIHN1Y2Nlc3MgICh0aGUgIFNWcjQgbWFudWFscyBzcGVjaWZ5IG9ubHkgImFuIGludGVnZXIgdmFsdWUKKyAgICAgICBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlci0KKyAgICAgICB3aXNlIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisKKyAgICAgICBYL09wZW4gIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgaW1wbGUtCisgICAgICAgbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzICBudWxsLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0IDxTVFJPTkc+d2FkZGNobnN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBlbnRyeSAgcG9pbnRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3Rhbi0KKyAgICAgICBkYXJkLCBJc3N1ZSA0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPi4KKworICAgICAgIENvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpICBsaS0KKyAgICAgICBicmFyeSBhcmUgZGVzY3JpYmVkIGluIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19hZGRzdHIuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzkzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19hZGRzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2FkZHN0ci4zeCx2IDEuMTMgMjAwNS8wNS8xNSAxNjoxNzoxNCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2FkZHN0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYWRkc3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmFkZHN0cjwvU1RST05HPiwgPFNUUk9ORz5hZGRuc3RyPC9TVFJPTkc+LCA8U1RST05HPndhZGRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2FkZG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZhZGRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZhZGRuc3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZ3YWRkc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZG5zdHI8L1NUUk9ORz4gLSBhZGQgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0byBhCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93IGFuZCBhZHZhbmNlIGN1cnNvcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZHN0cihjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkbnN0cihjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2FkZG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkc3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZhZGRuc3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndhZGRzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3YWRkbnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyLDwvRU0+IDxFTT5pbnQ8L0VNPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSAobnVsbC10ZXJtaW5hdC0KKyAgICAgICBlZCkgY2hhcmFjdGVyIHN0cmluZyA8RU0+c3RyPC9FTT4gb24gdGhlIGdpdmVuIHdpbmRvdy4gIEl0IGlzIHNpbWktCisgICAgICAgbGFyICB0byAgY2FsbGluZyAgPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4gIG9uY2UgIGZvciAgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgc3RyaW5nLiAgVGhlIGZvdXIgcm91dGluZXMgd2l0aCA8RU0+bjwvRU0+ICBhcyAgdGhlICBsYXN0ICBhcmd1bWVudAorICAgICAgIHdyaXRlICBhdCAgbW9zdCA8RU0+bjwvRU0+IGNoYXJhY3RlcnMuICBJZiA8RU0+bjwvRU0+IGlzIC0xLCB0aGVuIHRoZSBlbnRpcmUKKyAgICAgICBzdHJpbmcgd2lsbCBiZSBhZGRlZCwgdXAgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mICBjaGFyYWMtCisgICAgICAgdGVycyAgdGhhdCAgd2lsbCAgZml0ICBvbiB0aGUgbGluZSwgb3IgdW50aWwgYSB0ZXJtaW5hdGluZworICAgICAgIG51bGwgaXMgcmVhY2hlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24KKyAgICAgICBzdWNjZXNzICAodGhlICBTVnI0IG1hbnVhbHMgc3BlY2lmeSBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlCisgICAgICAgb3RoZXIgdGhhbiA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgIGltcGxlLQorICAgICAgIG1lbnRhdGlvbiAgcmV0dXJucyAgYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwKKyAgICAgICBvciBpZiB0aGUgc3RyaW5nIHBvaW50ZXIgaXMgbnVsbCBvciBpZiAgdGhlICBjb3JyZXNwb25kaW5nCisgICAgICAgY2FsbHMgdG8gPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4gcmV0dXJuIGFuIGVycm9yLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgIHRoYXQgIGFsbCAgb2YgIHRoZXNlICByb3V0aW5lcyAgZXhjZXB0ICA8U1RST05HPndhZGRzdHI8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+d2FkZG5zdHI8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBBbGwgdGhlc2UgZW50cnkgcG9pbnRzIGFyZSBkZXNjcmliZWQgIGluICB0aGUgIFhTSSAgQ3Vyc2VzCisgICAgICAgc3RhbmRhcmQsICBJc3N1ZSAgNC4gIFRoZSBYU0kgZXJyb3JzIEVJTFNFUSBhbmQgRU9WRVJGTE9XLAorICAgICAgIGFzc29jaWF0ZWQgd2l0aCBleHRlbmRlZC1sZXZlbCBjb25mb3JtYW5jZSwgIGFyZSAgbm90ICB5ZXQKKyAgICAgICBkZXRlY3RlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19hZGR3c3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19hZGR3c3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiZDcyNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2FkZHdzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2FkZHdzdHIuM3gsdiAxLjcgMjAwNi8wMi8yNSAyMDo1OTowOCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2FkZHdzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2FkZHdzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5hZGR3c3RyPC9TVFJPTkc+LCA8U1RST05HPmFkZG53c3RyPC9TVFJPTkc+LCA8U1RST05HPndhZGR3c3RyPC9TVFJPTkc+LCA8U1RST05HPndhZGRud3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdmFkZHdzdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmFkZG53c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZHdzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkbndzdHI8L1NUUk9ORz4gLSBhZGQgYSBzdHJpbmcgb2Ygd2lkZQorICAgICAgIGNoYXJhY3RlcnMgdG8gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cgYW5kIGFkdmFuY2UgY3Vyc29yCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkd3N0cihjb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZG53c3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkd3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkbndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmFkZHdzdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZhZGRud3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2FkZHdzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2FkZG53c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyB3cml0ZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgKG51bGwtdGVybWluYXQtCisgICAgICAgZWQpIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiBjaGFyYWN0ZXIgc3RyaW5nIDxFTT53c3RyPC9FTT4gb24gdGhlIGdpdmVuIHdpbmRvdy4gIEl0CisgICAgICAgaXMgIHNpbWlsYXIgIHRvIGNvbnN0cnVjdGluZyBhIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBmb3IgZWFjaCB3Y2hhcl90IGluCisgICAgICAgdGhlICBzdHJpbmcsICB0aGVuICBjYWxsaW5nICA8U1RST05HPndhZGRfd2NoPC9TVFJPTkc+ICBmb3IgIHRoZSAgcmVzdWx0aW5nCisgICAgICAgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxFTT5tdjwvRU0+IHJvdXRpbmVzIHBlcmZvcm0gY3Vyc29yIG1vdmVtZW50IG9uY2UsIGJlZm9yZSB3cml0LQorICAgICAgIGluZyBhbnkgY2hhcmFjdGVycy4gIFRoZXJlYWZ0ZXIsIHRoZSBjdXJzb3IgaXMgYWR2YW5jZWQgYXMKKyAgICAgICBhIHNpZGUtZWZmZWN0IG9mIHdyaXRpbmcgdG8gdGhlIHdpbmRvdy4KKworICAgICAgIFRoZSAgZm91ciAgcm91dGluZXMgIHdpdGggIDxFTT5uPC9FTT4gYXMgdGhlIGxhc3QgYXJndW1lbnQgd3JpdGUgYXQKKyAgICAgICBtb3N0IDxFTT5uPC9FTT4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IGNoYXJhY3RlcnMuICBJZiA8RU0+bjwvRU0+IGlzIC0xLCAgdGhlbiAgdGhlICBlbnRpcmUKKyAgICAgICBzdHJpbmcgIHdpbGwgYmUgYWRkZWQsIHVwIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWMtCisgICAgICAgdGVycyB0aGF0IHdpbGwgZml0IG9uIHRoZSBsaW5lLCAgb3IgIHVudGlsICBhICB0ZXJtaW5hdGluZworICAgICAgIG51bGwgaXMgcmVhY2hlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IG9uCisgICAgICAgc3VjY2Vzcy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgYWxsIG9mIHRoZXNlIHJvdXRpbmVzIGV4Y2VwdCAgPFNUUk9ORz53YWRkbndzdHI8L1NUUk9ORz4gIG1heSAgYmUKKyAgICAgICBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgQWxsICB0aGVzZSAgZW50cnkgIHBvaW50cyAgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcworICAgICAgIHN0YW5kYXJkLCBJc3N1ZSA0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3YjJhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2F0dHIuM3guaHRtbApAQCAtMCwwICsxLDI2MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19hdHRyLjN4LHYgMS4zMSAyMDA3LzAzLzE3IDIwOjMwOjMzIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYXR0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYXR0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmF0dHJvZmY8L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJvZmY8L1NUUk9ORz4sIDxTVFJPTkc+YXR0cm9uPC9TVFJPTkc+LCA8U1RST05HPndhdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+YXR0cnNldDwvU1RST05HPiwgPFNUUk9ORz53YXR0cnNldDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPmNvbG9yX3NldDwvU1RST05HPiwgPFNUUk9ORz53Y29sb3Jfc2V0PC9TVFJPTkc+LCA8U1RST05HPnN0YW5kZW5kPC9TVFJPTkc+LCA8U1RST05HPndzdGFuZGVuZDwvU1RST05HPiwgPFNUUk9ORz5zdGFuZG91dDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPndzdGFuZG91dDwvU1RST05HPiwgPFNUUk9ORz5hdHRyX2dldDwvU1RST05HPiwgPFNUUk9ORz53YXR0cl9nZXQ8L1NUUk9ORz4sIDxTVFJPTkc+YXR0cl9vZmY8L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJfb2ZmPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+YXR0cl9vbjwvU1RST05HPiwgPFNUUk9ORz53YXR0cl9vbjwvU1RST05HPiwgPFNUUk9ORz5hdHRyX3NldDwvU1RST05HPiwgPFNUUk9ORz53YXR0cl9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+Y2hnYXQ8L1NUUk9ORz4sIDxTVFJPTkc+d2NoZ2F0PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZjaGdhdDwvU1RST05HPiwgPFNUUk9ORz5tdndjaGdhdDwvU1RST05HPiwgPFNUUk9ORz5QQUlSX05VTUJFUjwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGNoYXJhY3RlciBhbmQKKyAgICAgICB3aW5kb3cgYXR0cmlidXRlIGNvbnRyb2wgcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cm9mZihpbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YXR0cm9mZihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmF0dHJvbihpbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YXR0cm9uKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnNldChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YXR0cnNldChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNvbG9yX3NldChzaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yX3BhaXJfbnVtYmVyLDwvU1RST05HPiA8U1RST05HPnZvaWQqPC9TVFJPTkc+IDxTVFJPTkc+b3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Y29sb3Jfc2V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2xvcl9wYWlyX251bWJlciw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPnZvaWQqPC9TVFJPTkc+IDxTVFJPTkc+b3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zdGFuZGVuZCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndzdGFuZGVuZChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnN0YW5kb3V0KHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3N0YW5kb3V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cl9nZXQoYXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+KmF0dHJzLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+KnBhaXIsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhdHRyX2dldChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPiphdHRycyw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPipwYWlyLDwvU1RST05HPgorICAgICAgICAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qb3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX29mZihhdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2F0dHJfb2ZmKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmF0dHJfb24oYXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhdHRyX29uKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmF0dHJfc2V0KGF0dHJfdDwvU1RST05HPiA8U1RST05HPmF0dHJzLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+cGFpciw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2F0dHJfc2V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5wYWlyLDwvU1RST05HPiAgPFNUUk9ORz52b2lkPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4qb3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jaGdhdChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5uLDwvU1RST05HPiA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPmF0dHIsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2xvciw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2NoZ2F0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+biw8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRyLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2xvciw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qb3B0cyk8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12Y2hnYXQoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4sPC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0ciw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Y29sb3IsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndjaGdhdChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0ciw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgbWFuaXB1bGF0ZSAgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUKKyAgICAgICBuYW1lZCB3aW5kb3cuICBUaGUgY3VycmVudCBhdHRyaWJ1dGVzIG9mIGEgd2luZG93IGFwcGx5IHRvCisgICAgICAgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgd3JpdHRlbiBpbnRvIHRoZSB3aW5kb3cgd2l0aCA8U1RST05HPndhZGQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaDwvU1RST05HPiwgPFNUUk9ORz53YWRkc3RyPC9TVFJPTkc+IGFuZCA8U1RST05HPndwcmludHc8L1NUUk9ORz4uICBBdHRyaWJ1dGVzIGFyZSBhIHByb3BlcnR5IG9mIHRoZQorICAgICAgIGNoYXJhY3RlciwgICBhbmQgIG1vdmUgIHdpdGggIHRoZSAgY2hhcmFjdGVyICB0aHJvdWdoICBhbnkKKyAgICAgICBzY3JvbGxpbmcgYW5kIGluc2VydC9kZWxldGUgbGluZS9jaGFyYWN0ZXIgb3BlcmF0aW9ucy4gIFRvCisgICAgICAgdGhlICBleHRlbnQgIHBvc3NpYmxlLCAgdGhleSAgYXJlIGRpc3BsYXllZCBhcyBhcHByb3ByaWF0ZQorICAgICAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGdyYXBoaWMgcmVuZGl0aW9uIG9mICBjaGFyYWN0ZXJzICBwdXQKKyAgICAgICBvbiB0aGUgc2NyZWVuLgorCisgICAgICAgVGhlICByb3V0aW5lICA8U1RST05HPmF0dHJzZXQ8L1NUUk9ORz4gIHNldHMgIHRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgb2YgdGhlCisgICAgICAgZ2l2ZW4gd2luZG93IHRvIDxFTT5hdHRyczwvRU0+LiAgVGhlIHJvdXRpbmUgPFNUUk9ORz5hdHRyb2ZmPC9TVFJPTkc+IHR1cm5zIG9mZiAgdGhlCisgICAgICAgbmFtZWQgIGF0dHJpYnV0ZXMgIHdpdGhvdXQgdHVybmluZyBhbnkgb3RoZXIgYXR0cmlidXRlcyBvbgorICAgICAgIG9yIG9mZi4gIFRoZSByb3V0aW5lIDxTVFJPTkc+YXR0cm9uPC9TVFJPTkc+IHR1cm5zIG9uIHRoZSBuYW1lZCAgYXR0cmlidXRlcworICAgICAgIHdpdGhvdXQgYWZmZWN0aW5nIGFueSBvdGhlcnMuICBUaGUgcm91dGluZSA8U1RST05HPnN0YW5kb3V0PC9TVFJPTkc+IGlzIHRoZQorICAgICAgIHNhbWUgYXMgPFNUUk9ORz5hdHRyb24oQV9TVEFORE9VVCk8L1NUUk9ORz4uICBUaGUgcm91dGluZSA8U1RST05HPnN0YW5kZW5kPC9TVFJPTkc+ICBpcyAgdGhlCisgICAgICAgc2FtZSBhcyA8U1RST05HPmF0dHJzZXQoQV9OT1JNQUwpPC9TVFJPTkc+IG9yIDxTVFJPTkc+YXR0cnNldCgwKTwvU1RST05HPiwgdGhhdCBpcywgaXQgdHVybnMKKyAgICAgICBvZmYgYWxsIGF0dHJpYnV0ZXMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5hdHRyc2V0PC9TVFJPTkc+IGFuZCByZWxhdGVkIHJvdXRpbmVzIGRvICBub3QgIGFmZmVjdCAgdGhlICBhdC0KKyAgICAgICB0cmlidXRlcyAgdXNlZCAgd2hlbiAgZXJhc2luZyBwb3J0aW9ucyBvZiB0aGUgd2luZG93LiAgU2VlCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4gZm9yIGZ1bmN0aW9ucyB3aGljaCAgbW9kaWZ5ICB0aGUgIGF0dHJpYnV0ZXMKKyAgICAgICB1c2VkIGZvciBlcmFzaW5nIGFuZCBjbGVhcmluZy4KKworICAgICAgIFRoZSAgcm91dGluZSA8U1RST05HPmNvbG9yX3NldDwvU1RST05HPiBzZXRzIHRoZSBjdXJyZW50IGNvbG9yIG9mIHRoZSBnaXZlbgorICAgICAgIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbWJpbmF0aW9uICBkZXNjcmliZWQKKyAgICAgICBieSAgdGhlICBjb2xvcl9wYWlyX251bWJlci4gVGhlIHBhcmFtZXRlciBvcHRzIGlzIHJlc2VydmVkCisgICAgICAgZm9yIGZ1dHVyZSB1c2UsIGFwcGxpY2F0aW9ucyBtdXN0IHN1cHBseSBhIG51bGwgcG9pbnRlci4KKworICAgICAgIFRoZSByb3V0aW5lIDxTVFJPTkc+d2F0dHJfZ2V0PC9TVFJPTkc+IHJldHVybnMgdGhlICBjdXJyZW50ICBhdHRyaWJ1dGUgIGFuZAorICAgICAgIGNvbG9yIHBhaXIgZm9yIHRoZSBnaXZlbiB3aW5kb3c7IDxTVFJPTkc+YXR0cl9nZXQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgY3VyLQorICAgICAgIHJlbnQgYXR0cmlidXRlIGFuZCBjb2xvciBwYWlyIGZvciA8U1RST05HPnN0ZHNjcjwvU1RST05HPi4gICBUaGUgIHJlbWFpbmluZworICAgICAgIDxTVFJPTkc+YXR0cl88L1NUUk9ORz4qICBmdW5jdGlvbnMgIG9wZXJhdGUgIGV4YWN0bHkgbGlrZSB0aGUgY29ycmVzcG9uZGluZworICAgICAgIDxTVFJPTkc+YXR0cjwvU1RST05HPiogZnVuY3Rpb25zLCBleGNlcHQgdGhhdCB0aGV5IHRha2UgYXJndW1lbnRzICBvZiAgdHlwZQorICAgICAgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IHJhdGhlciB0aGFuIDxTVFJPTkc+aW50PC9TVFJPTkc+LgorCisgICAgICAgVGhlIHJvdXRpbmUgPFNUUk9ORz5jaGdhdDwvU1RST05HPiBjaGFuZ2VzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZ2l2ZW4gbnVtYmVyCisgICAgICAgb2YgY2hhcmFjdGVycyBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgIGxvY2F0aW9uICBvZgorICAgICAgIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+LiAgIEl0ICBkb2VzIG5vdCB1cGRhdGUgdGhlIGN1cnNvciBhbmQgZG9lcyBub3QgcGVyLQorICAgICAgIGZvcm0gd3JhcHBpbmcuICBBIGNoYXJhY3RlciBjb3VudCBvZiAtMSAgb3IgIGdyZWF0ZXIgIHRoYW4KKyAgICAgICB0aGUgIHJlbWFpbmluZyB3aW5kb3cgd2lkdGggbWVhbnMgdG8gY2hhbmdlIGF0dHJpYnV0ZXMgYWxsCisgICAgICAgdGhlIHdheSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuICBUaGUgPFNUUk9ORz53Y2hnYXQ8L1NUUk9ORz4gIGZ1bmMtCisgICAgICAgdGlvbiBnZW5lcmFsaXplcyB0aGlzIHRvIGFueSB3aW5kb3c7IHRoZSA8U1RST05HPm12d2NoZ2F0PC9TVFJPTkc+IGZ1bmN0aW9uCisgICAgICAgZG9lcyBhIGN1cnNvciBtb3ZlIGJlZm9yZSBhY3RpbmcuICBJbiB0aGVzZSBmdW5jdGlvbnMsIHRoZQorICAgICAgIGNvbG9yICBhcmd1bWVudCBpcyBhIGNvbG9yLXBhaXIgaW5kZXggKGFzIGluIHRoZSBmaXJzdCBhci0KKyAgICAgICBndW1lbnQgb2YgPEVNPmluaXQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5wYWlyPC9FTT4sIHNlZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+KS4gIFRoZSA8U1RST05HPm9wdHM8L1NUUk9ORz4gIGFyZ3UtCisgICAgICAgbWVudCBpcyBub3QgcHJlc2VudGx5IHVzZWQsIGJ1dCBpcyByZXNlcnZlZCBmb3IgdGhlIGZ1dHVyZQorICAgICAgIChsZWF2ZSBpdCA8U1RST05HPk5VTEw8L1NUUk9ORz4pLgorCisgICA8U1RST05HPkF0dHJpYnV0ZXM8L1NUUk9ORz4KKyAgICAgICBUaGUgZm9sbG93aW5nIHZpZGVvIGF0dHJpYnV0ZXMsIGRlZmluZWQgaW4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LCBjYW4KKyAgICAgICBiZSBwYXNzZWQgdG8gdGhlIHJvdXRpbmVzIDxTVFJPTkc+YXR0cm9uPC9TVFJPTkc+LCA8U1RST05HPmF0dHJvZmY8L1NUUk9ORz4sIGFuZCA8U1RST05HPmF0dHJzZXQ8L1NUUk9ORz4sIG9yCisgICAgICAgT1InZCB3aXRoIHRoZSBjaGFyYWN0ZXJzIHBhc3NlZCB0byA8U1RST05HPmFkZGNoPC9TVFJPTkc+LgorCisKKyAgICAgICAgPFNUUk9ORz5BX05PUk1BTDwvU1RST05HPiAgICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hsaWdodCkKKyAgICAgICAgPFNUUk9ORz5BX1NUQU5ET1VUPC9TVFJPTkc+ICAgICAgQmVzdCBoaWdobGlnaHRpbmcgbW9kZSBvZiB0aGUgdGVybWluYWwuCisgICAgICAgIDxTVFJPTkc+QV9VTkRFUkxJTkU8L1NUUk9ORz4gICAgIFVuZGVybGluaW5nCisgICAgICAgIDxTVFJPTkc+QV9SRVZFUlNFPC9TVFJPTkc+ICAgICAgIFJldmVyc2UgdmlkZW8KKyAgICAgICAgPFNUUk9ORz5BX0JMSU5LPC9TVFJPTkc+ICAgICAgICAgQmxpbmtpbmcKKyAgICAgICAgPFNUUk9ORz5BX0RJTTwvU1RST05HPiAgICAgICAgICAgSGFsZiBicmlnaHQKKyAgICAgICAgPFNUUk9ORz5BX0JPTEQ8L1NUUk9ORz4gICAgICAgICAgRXh0cmEgYnJpZ2h0IG9yIGJvbGQKKyAgICAgICAgPFNUUk9ORz5BX1BST1RFQ1Q8L1NUUk9ORz4gICAgICAgUHJvdGVjdGVkIG1vZGUKKyAgICAgICAgPFNUUk9ORz5BX0lOVklTPC9TVFJPTkc+ICAgICAgICAgSW52aXNpYmxlIG9yIGJsYW5rIG1vZGUKKyAgICAgICAgPFNUUk9ORz5BX0FMVENIQVJTRVQ8L1NUUk9ORz4gICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyAgICAgICAgPFNUUk9ORz5BX0NIQVJURVhUPC9TVFJPTkc+ICAgICAgQml0LW1hc2sgdG8gZXh0cmFjdCBhIGNoYXJhY3RlcgorICAgICAgICA8U1RST05HPkNPTE9SX1BBSVIoPC9TVFJPTkc+PEVNPm48L0VNPjxTVFJPTkc+KTwvU1RST05HPiAgIENvbG9yLXBhaXIgbnVtYmVyIDxFTT5uPC9FTT4KKworICAgICAgIFRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgdGhlIHJldmVyc2Ugb2YgPFNUUk9ORz5DT0xPUl9QQUlSKDwvU1RST05HPjxFTT5uPC9FTT48U1RST05HPik8L1NUUk9ORz46CisKKyAgICAgICA8U1RST05HPlBBSVJfTlVNQkVSKDwvU1RST05HPjxFTT5hdHRyczwvRU0+KSBSZXR1cm5zIHRoZSBwYWlyIG51bWJlciBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxTVFJPTkc+Q09MT1JfUEFJUig8L1NUUk9ORz48RU0+bjwvRU0+PFNUUk9ORz4pPC9TVFJPTkc+IGF0dHJpYnV0ZS4KKworICAgICAgIFRoZSByZXR1cm4gdmFsdWVzIG9mIG1hbnkgb2YgdGhlc2Ugcm91dGluZXMgYXJlIG5vdCAgbWVhbi0KKyAgICAgICBpbmdmdWwgKHRoZXkgYXJlIGltcGxlbWVudGVkIGFzIG1hY3JvLWV4cGFuZGVkIGFzc2lnbm1lbnRzCisgICAgICAgYW5kIHNpbXBseSByZXR1cm4gdGhlaXIgYXJndW1lbnQpLiAgVGhlIFNWcjQgIG1hbnVhbCAgcGFnZQorICAgICAgIGNsYWltcyAoZmFsc2VseSkgdGhhdCB0aGVzZSByb3V0aW5lcyBhbHdheXMgcmV0dXJuIDxTVFJPTkc+MTwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlICB0aGF0ICA8U1RST05HPmF0dHJvZmY8L1NUUk9ORz4sICA8U1RST05HPndhdHRyb2ZmPC9TVFJPTkc+LCAgPFNUUk9ORz5hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJvbjwvU1RST05HPiwgPFNUUk9ORz5hdHRyc2V0PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+d2F0dHJzZXQ8L1NUUk9ORz4sIDxTVFJPTkc+c3RhbmRlbmQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c3RhbmRvdXQ8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIDxTVFJPTkc+Q09MT1JfUEFJUjwvU1RST05HPiB2YWx1ZXMgY2FuIG9ubHkgYmUgT1InZCB3aXRoIGF0dHJpYnV0ZXMgaWYgIHRoZQorICAgICAgIHBhaXIgIG51bWJlciAgaXMgIGxlc3MgIHRoYW4gMjU2LiAgVGhlIGFsdGVybmF0ZSBmdW5jdGlvbnMKKyAgICAgICBzdWNoIGFzIDxTVFJPTkc+Y29sb3Jfc2V0PC9TVFJPTkc+IGNhbiBwYXNzIGEgY29sb3IgIHBhaXIgIHZhbHVlICBkaXJlY3RseS4KKyAgICAgICBIb3dldmVyLCAgbmN1cnNlcyAgQUJJIDQgYW5kIDUgc2ltcGx5IE9SIHRoaXMgdmFsdWUgd2l0aGluCisgICAgICAgdGhlIGFsdGVybmF0ZSBmdW5jdGlvbnMuICBZb3UgbXVzdCB1c2UgbmN1cnNlcyAgQUJJICA2ICB0bworICAgICAgIHN1cHBvcnQgbW9yZSB0aGFuIDI1NiBjb2xvciBwYWlycy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4gIFRoZSBzdGFuZGFyZCAgZGVmaW5lZCAgdGhlICBkZWRpY2F0ZWQgIHR5cGUgIGZvcgorICAgICAgIGhpZ2hsaWdodHMsICA8U1RST05HPmF0dHJfdDwvU1RST05HPiwgIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGluIFNWcjQgY3Vyc2VzLgorICAgICAgIFRoZSBmdW5jdGlvbnMgdGFraW5nIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IGFyZ3VtZW50cyAgYXJlICBub3QgIHN1cHBvcnRlZAorICAgICAgIHVuZGVyIFNWcjQuCisKKyAgICAgICBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBzdGF0ZXMgdGhhdCB3aGV0aGVyIHRoZSB0cmFkaXRpb24tCisgICAgICAgYWwgZnVuY3Rpb25zICA8U1RST05HPmF0dHJvbjwvU1RST05HPi88U1RST05HPmF0dHJvZmY8L1NUUk9ORz4vPFNUUk9ORz5hdHRyc2V0PC9TVFJPTkc+ICBjYW4gIG1hbmlwdWxhdGUgIGF0LQorICAgICAgIHRyaWJ1dGVzICBvdGhlciAgdGhhbiAgPFNUUk9ORz5BX0JMSU5LPC9TVFJPTkc+LCAgPFNUUk9ORz5BX0JPTEQ8L1NUUk9ORz4sIDxTVFJPTkc+QV9ESU08L1NUUk9ORz4sIDxTVFJPTkc+QV9SRVZFUlNFPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+QV9TVEFORE9VVDwvU1RST05HPiwgb3IgPFNUUk9ORz5BX1VOREVSTElORTwvU1RST05HPiBpcyAidW5zcGVjaWZpZWQiLiAgIFVuZGVyICB0aGlzCisgICAgICAgaW1wbGVtZW50YXRpb24gIGFzICB3ZWxsICBhcyAgU1ZyNCBjdXJzZXMsIHRoZXNlIGZ1bmN0aW9ucworICAgICAgIGNvcnJlY3RseSBtYW5pcHVsYXRlIGFsbCBvdGhlciAgaGlnaGxpZ2h0cyAgKHNwZWNpZmljYWxseSwKKyAgICAgICA8U1RST05HPkFfQUxUQ0hBUlNFVDwvU1RST05HPiwgPFNUUk9ORz5BX1BST1RFQ1Q8L1NUUk9ORz4sIGFuZCA8U1RST05HPkFfSU5WSVM8L1NUUk9ORz4pLgorCisgICAgICAgWFNJICBDdXJzZXMgYWRkZWQgdGhlIG5ldyBlbnRyeSBwb2ludHMsIDxTVFJPTkc+YXR0cl9nZXQ8L1NUUk9ORz4sIDxTVFJPTkc+YXR0cl9vbjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPmF0dHJfb2ZmPC9TVFJPTkc+LCA8U1RST05HPmF0dHJfc2V0PC9TVFJPTkc+LCA8U1RST05HPndhdHRyX29uPC9TVFJPTkc+LCA8U1RST05HPndhdHRyX29mZjwvU1RST05HPiwgIDxTVFJPTkc+d2F0dHJfZ2V0PC9TVFJPTkc+LCAgPFNUUk9ORz53YXQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz50cl9zZXQ8L1NUUk9ORz4uICAgVGhlc2UgIGFyZSBpbnRlbmRlZCB0byB3b3JrIHdpdGggYSBuZXcgc2VyaWVzIG9mCisgICAgICAgaGlnaGxpZ2h0IG1hY3JvcyBwcmVmaXhlZCB3aXRoIDxTVFJPTkc+V0FfPC9TVFJPTkc+LgorCisgICAgICAgT2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5IGRpZCBub3QgZm9yY2UgYW4gdXBkYXRlICBvZgorICAgICAgIHRoZSAgc2NyZWVuIHdoZW4gY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMuICBVc2UgPFNUUk9ORz50b3VjaHdpbjwvU1RST05HPiB0bworICAgICAgIGZvcmNlIHRoZSBzY3JlZW4gdG8gbWF0Y2ggdGhlIHVwZGF0ZWQgYXR0cmlidXRlcy4KKworCisgICAgICAgIDxTVFJPTkc+V0FfTk9STUFMPC9TVFJPTkc+ICAgICAgIE5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpCisgICAgICAgIDxTVFJPTkc+V0FfU1RBTkRPVVQ8L1NUUk9ORz4gICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLgorICAgICAgICA8U1RST05HPldBX1VOREVSTElORTwvU1RST05HPiAgICBVbmRlcmxpbmluZworICAgICAgICA8U1RST05HPldBX1JFVkVSU0U8L1NUUk9ORz4gICAgICBSZXZlcnNlIHZpZGVvCisgICAgICAgIDxTVFJPTkc+V0FfQkxJTks8L1NUUk9ORz4gICAgICAgIEJsaW5raW5nCisgICAgICAgIDxTVFJPTkc+V0FfRElNPC9TVFJPTkc+ICAgICAgICAgIEhhbGYgYnJpZ2h0CisgICAgICAgIDxTVFJPTkc+V0FfQk9MRDwvU1RST05HPiAgICAgICAgIEV4dHJhIGJyaWdodCBvciBib2xkCisgICAgICAgIDxTVFJPTkc+V0FfQUxUQ0hBUlNFVDwvU1RST05HPiAgIEFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisKKyAgICAgICBUaGUgWFNJIGN1cnNlcyBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBlYWNoIHBhaXIgb2YgY29ycmUtCisgICAgICAgc3BvbmRpbmcgIDxTVFJPTkc+QV88L1NUUk9ORz4gIGFuZCA8U1RST05HPldBXzwvU1RST05HPi11c2luZyBmdW5jdGlvbnMgb3BlcmF0ZXMgb24gdGhlIHNhbWUKKyAgICAgICBjdXJyZW50LWhpZ2hsaWdodCBpbmZvcm1hdGlvbi4KKworICAgICAgIFRoZSBYU0kgc3RhbmRhcmQgZXh0ZW5kZWQgY29uZm9ybWFuY2UgbGV2ZWwgYWRkcyBuZXcgaGlnaC0KKyAgICAgICBsaWdodHMgPFNUUk9ORz5BX0hPUklaT05UQUw8L1NUUk9ORz4sIDxTVFJPTkc+QV9MRUZUPC9TVFJPTkc+LCA8U1RST05HPkFfTE9XPC9TVFJPTkc+LCA8U1RST05HPkFfUklHSFQ8L1NUUk9ORz4sIDxTVFJPTkc+QV9UT1A8L1NUUk9ORz4sIDxTVFJPTkc+QV9WRVItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5USUNBTDwvU1RST05HPiAoYW5kIGNvcnJlc3BvbmRpbmcgPFNUUk9ORz5XQV88L1NUUk9ORz4gbWFjcm9zIGZvciBlYWNoKSAgd2hpY2ggIHRoaXMKKyAgICAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgc3VwcG9ydC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsICByb3V0aW5lcyAgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24gc3VjY2Vzcywgb3IgPFNUUk9ORz5FUlI8L1NUUk9ORz4gb24KKyAgICAgICBmYWlsdXJlLgorCisgICAgICAgWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KKworICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIKKyAgICAgICBpcyAgbnVsbC4gIFRoZSA8U1RST05HPndjb2xvcl9zZXQ8L1NUUk9ORz4gZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUKKyAgICAgICBjb2xvciAgcGFpciAgcGFyYW1ldGVyICBpcyAgb3V0c2lkZSAgdGhlICAgcmFuZ2UgICAwLi5DT0wtCisgICAgICAgT1JfUEFJUlMtMS4gICBUaGlzICBpbXBsZW1lbnRhdGlvbiAgYWxzbyBwcm92aWRlcyA8U1RST05HPmdldGF0dHJzPC9TVFJPTkc+CisgICAgICAgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBjdXJzZXMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPiwgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfYmVlcC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfYmVlcC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MWFjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19iZWVwLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19iZWVwLjN4LHYgMS4xMCAyMDA1LzAxLzA4IDE3OjU1OjUxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYmVlcCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYmVlcCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19iZWVwLjN4Lmh0bWwiPmN1cnNfYmVlcCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JlZXAuM3guaHRtbCI+Y3Vyc19iZWVwKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmJlZXA8L1NUUk9ORz4sIDxTVFJPTkc+Zmxhc2g8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiBiZWxsIGFuZCBzY3JlZW4gZmxhc2ggcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iZWVwKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Zmxhc2godm9pZCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+YmVlcDwvU1RST05HPiBhbmQgPFNUUk9ORz5mbGFzaDwvU1RST05HPiByb3V0aW5lcyBhcmUgdXNlZCB0byBhbGVydCB0aGUgdGVybWluYWwKKyAgICAgICB1c2VyLiAgVGhlIHJvdXRpbmUgPFNUUk9ORz5iZWVwPC9TVFJPTkc+IHNvdW5kcyBhbiAgYXVkaWJsZSAgYWxhcm0gIG9uICB0aGUKKyAgICAgICB0ZXJtaW5hbCwgIGlmICBwb3NzaWJsZTsgIG90aGVyd2lzZSAgaXQgZmxhc2hlcyB0aGUgc2NyZWVuCisgICAgICAgKHZpc2libGUgYmVsbCkuICBUaGUgcm91dGluZSA8U1RST05HPmZsYXNoPC9TVFJPTkc+IGZsYXNoZXMgdGhlIHNjcmVlbiwgYW5kCisgICAgICAgaWYgIHRoYXQgIGlzICBub3QgIHBvc3NpYmxlLCBzb3VuZHMgdGhlIGFsZXJ0LiAgSWYgbmVpdGhlcgorICAgICAgIGFsZXJ0IGlzIHBvc3NpYmxlLCBub3RoaW5nIGhhcHBlbnMuICBOZWFybHkgYWxsICB0ZXJtaW5hbHMKKyAgICAgICBoYXZlICBhbiAgYXVkaWJsZSAgYWxlcnQgKGJlbGwgb3IgYmVlcCksIGJ1dCBvbmx5IHNvbWUgY2FuCisgICAgICAgZmxhc2ggdGhlIHNjcmVlbi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIDxTVFJPTkc+T0s8L1NUUk9ORz4gaWYgdGhleSAgc3VjY2VlZCAgaW4gIGJlZXBpbmcgIG9yCisgICAgICAgZmxhc2hpbmcsIDxTVFJPTkc+RVJSPC9TVFJPTkc+IG90aGVyd2lzZS4KKworCis8L1BSRT4KKzxIMj5FWFRFTlNJT05TPC9IMj48UFJFPgorICAgICAgIFNWcjQncyAgYmVlcCAgYW5kIGZsYXNoIHJvdXRpbmVzIGFsd2F5cyByZXR1cm5lZCA8U1RST05HPk9LPC9TVFJPTkc+LCBzbyBpdAorICAgICAgIHdhcyBub3QgcG9zc2libGUgdG8gdGVsbCB3aGVuIHRoZSBiZWVwIG9yIGZsYXNoIGZhaWxlZC4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgIDQuICBMaWtlIFNWcjQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZXkgYWx3YXlzIHJldHVybgorICAgICAgIDxTVFJPTkc+T0s8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JlZXAuM3guaHRtbCI+Y3Vyc19iZWVwKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfYmtnZC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfYmtnZC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2Y5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19ia2dkLjN4LHYgMS4xOSAyMDAzLzEyLzI3IDE4OjUwOjQwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYmtnZCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYmtnZCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmJrZ2RzZXQ8L1NUUk9ORz4sICA8U1RST05HPndia2dkc2V0PC9TVFJPTkc+LCAgPFNUUk9ORz5ia2dkPC9TVFJPTkc+LCAgPFNUUk9ORz53YmtnZDwvU1RST05HPiwgPFNUUk9ORz5nZXRia2dkPC9TVFJPTkc+IC0gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisgICAgICAgYmFja2dyb3VuZCBtYW5pcHVsYXRpb24gcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+YmtnZHNldChjaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+d2JrZ2RzZXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ia2dkKGNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndia2dkKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Z2V0YmtnZChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5ia2dkc2V0PC9TVFJPTkc+IGFuZCA8U1RST05HPndia2dkc2V0PC9TVFJPTkc+ICByb3V0aW5lcyAgbWFuaXB1bGF0ZSAgdGhlICBiYWNrLQorICAgICAgIGdyb3VuZCAgb2YgIHRoZSAgbmFtZWQgd2luZG93LiAgVGhlIHdpbmRvdyBiYWNrZ3JvdW5kIGlzIGEKKyAgICAgICA8U1RST05HPmNodHlwZTwvU1RST05HPiBjb25zaXN0aW5nIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGVzICAoaS5lLiwKKyAgICAgICByZW5kaXRpb24pICBhbmQgIGEgIGNoYXJhY3Rlci4gICBUaGUgYXR0cmlidXRlIHBhcnQgb2YgdGhlCisgICAgICAgYmFja2dyb3VuZCBpcyBjb21iaW5lZCAoT1InZWQpIHdpdGggYWxsIG5vbi1ibGFuayAgY2hhcmFjLQorICAgICAgIHRlcnMgIHRoYXQgIGFyZSB3cml0dGVuIGludG8gdGhlIHdpbmRvdyB3aXRoIDxTVFJPTkc+d2FkZGNoPC9TVFJPTkc+LiAgQm90aAorICAgICAgIHRoZSBjaGFyYWN0ZXIgYW5kIGF0dHJpYnV0ZSBwYXJ0cyBvZiAgdGhlICBiYWNrZ3JvdW5kICBhcmUKKyAgICAgICBjb21iaW5lZCAgIHdpdGggIHRoZSAgYmxhbmsgIGNoYXJhY3RlcnMuICAgVGhlICBiYWNrZ3JvdW5kCisgICAgICAgYmVjb21lcyBhIHByb3BlcnR5IG9mIHRoZSBjaGFyYWN0ZXIgIGFuZCAgbW92ZXMgIHdpdGggIHRoZQorICAgICAgIGNoYXJhY3RlciAgIHRocm91Z2ggICBhbnkgICBzY3JvbGxpbmcgICBhbmQgIGluc2VydC9kZWxldGUKKyAgICAgICBsaW5lL2NoYXJhY3RlciBvcGVyYXRpb25zLgorCisgICAgICAgVG8gdGhlIGV4dGVudCAgcG9zc2libGUgIG9uICBhICBwYXJ0aWN1bGFyICB0ZXJtaW5hbCwgIHRoZQorICAgICAgIGF0dHJpYnV0ZSAgcGFydCAgb2YgIHRoZSAgYmFja2dyb3VuZCAgaXMgIGRpc3BsYXllZCBhcyB0aGUKKyAgICAgICBncmFwaGljIHJlbmRpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHB1dCBvbiB0aGUgc2NyZWVuLgorCisgICAgICAgVGhlIDxTVFJPTkc+YmtnZDwvU1RST05HPiBhbmQgPFNUUk9ORz53YmtnZDwvU1RST05HPiBmdW5jdGlvbnMgc2V0IHRoZSAgYmFja2dyb3VuZCAgcHJvcGVydHkKKyAgICAgICBvZiAgdGhlICBjdXJyZW50ICBvciAgc3BlY2lmaWVkIHdpbmRvdyBhbmQgdGhlbiBhcHBseSB0aGlzCisgICAgICAgc2V0dGluZyB0byBldmVyeSBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhhdCB3aW5kb3c6CisKKyAgICAgICAgICAgICAgVGhlIHJlbmRpdGlvbiBvZiBldmVyeSBjaGFyYWN0ZXIgb24gdGhlICBzY3JlZW4gIGlzCisgICAgICAgICAgICAgIGNoYW5nZWQgdG8gdGhlIG5ldyBiYWNrZ3JvdW5kIHJlbmRpdGlvbi4KKworICAgICAgICAgICAgICBXaGVyZXZlciAgdGhlICBmb3JtZXIgYmFja2dyb3VuZCBjaGFyYWN0ZXIgYXBwZWFycywKKyAgICAgICAgICAgICAgaXQgaXMgY2hhbmdlZCB0byB0aGUgbmV3IGJhY2tncm91bmQgY2hhcmFjdGVyLgorCisgICAgICAgVGhlIDxTVFJPTkc+Z2V0YmtnZDwvU1RST05HPiBmdW5jdGlvbiByZXR1cm5zIHRoZSAgZ2l2ZW4gIHdpbmRvdydzICBjdXJyZW50CisgICAgICAgYmFja2dyb3VuZCBjaGFyYWN0ZXIvYXR0cmlidXRlIHBhaXIuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSAgcm91dGluZXMgIDxTVFJPTkc+YmtnZDwvU1RST05HPiAgYW5kIDxTVFJPTkc+d2JrZ2Q8L1NUUk9ORz4gcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+T0s8L1NUUk9ORz4uICBUaGUKKyAgICAgICBTVnI0LjAgbWFudWFsIHNheXMgIm9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgIGlmICA8U1RST05HPmltbWVkb2s8L1NUUk9ORz4KKyAgICAgICBpcyBzZXQiLCBidXQgdGhpcyBhcHBlYXJzIHRvIGJlIGFuIGVycm9yLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmJrZ2RzZXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+YmtnZDwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LiAgSXQgc3BlY2lmaWVzIHRoYXQgPFNUUk9ORz5ia2dkPC9TVFJPTkc+IGFuZCA8U1RST05HPndia2dkPC9TVFJPTkc+IHJldHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gIG9uCisgICAgICAgZmFpbHVyZS4gIGJ1dCBnaXZlcyBubyBmYWlsdXJlIGNvbmRpdGlvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz5jdXJzX291dC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19ia2dybmQuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2JrZ3JuZC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzYxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19ia2dybmQuM3guaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2JrZ3JuZC4zeCx2IDEuMyAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYmtncm5kIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19ia2dybmQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtncm5kLjN4Lmh0bWwiPmN1cnNfYmtncm5kKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dybmQuM3guaHRtbCI+Y3Vyc19ia2dybmQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Ymtncm5kPC9TVFJPTkc+LCAgPFNUUk9ORz53Ymtncm5kPC9TVFJPTkc+LCAgPFNUUk9ORz5ia2dybmRzZXQ8L1NUUk9ORz4sIDxTVFJPTkc+d2JrZ3JuZHNldDwvU1RST05HPiwgPFNUUk9ORz5nZXRia2dybmQ8L1NUUk9ORz4sIDxTVFJPTkc+d2dldC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJrZ3JuZDwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICB3aW5kb3cgIGNvbXBsZXggIGJhY2tncm91bmQgIG1hbmlwdWxhdGlvbgorICAgICAgIHJvdXRpbmVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Ymtncm5kKDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Ymtncm5kKDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPmJrZ3JuZHNldChjb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz53Ymtncm5kc2V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0Ymtncm5kKGNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldGJrZ3JuZChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+Ymtncm5kc2V0PC9TVFJPTkc+IGFuZCA8U1RST05HPndia2dybmRzZXQ8L1NUUk9ORz4gcm91dGluZXMgbWFuaXB1bGF0ZSB0aGUgYmFjay0KKyAgICAgICBncm91bmQgb2YgdGhlIG5hbWVkIHdpbmRvdy4gIFRoZSB3aW5kb3cgIGJhY2tncm91bmQgIGlzICBhCisgICAgICAgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IGNvbnNpc3Rpbmcgb2YgYW55IGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgKGkuZS4sCisgICAgICAgcmVuZGl0aW9uKSBhbmQgYSBjb21wbGV4IGNoYXJhY3Rlci4gIFRoZSBhdHRyaWJ1dGUgcGFydCBvZgorICAgICAgIHRoZSAgYmFja2dyb3VuZCAgaXMgIGNvbWJpbmVkICAoT1InZWQpICB3aXRoIGFsbCBub24tYmxhbmsKKyAgICAgICBjaGFyYWN0ZXJzIHRoYXQgYXJlIHdyaXR0ZW4gaW50byB0aGUgd2luZG93ICB3aXRoICA8U1RST05HPndhZGRjaDwvU1RST05HPi4KKyAgICAgICBCb3RoICB0aGUgIGNoYXJhY3RlciBhbmQgYXR0cmlidXRlIHBhcnRzIG9mIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgYXJlIGNvbWJpbmVkIHdpdGggdGhlIGJsYW5rICBjaGFyYWN0ZXJzLiAgIFRoZSAgYmFja2dyb3VuZAorICAgICAgIGJlY29tZXMgIGEgIHByb3BlcnR5ICBvZiAgdGhlIGNoYXJhY3RlciBhbmQgbW92ZXMgd2l0aCB0aGUKKyAgICAgICBjaGFyYWN0ZXIgIHRocm91Z2ggICBhbnkgICBzY3JvbGxpbmcgICBhbmQgICBpbnNlcnQvZGVsZXRlCisgICAgICAgbGluZS9jaGFyYWN0ZXIgb3BlcmF0aW9ucy4KKworICAgICAgIFRvICB0aGUgIGV4dGVudCAgcG9zc2libGUgIG9uICBhICBwYXJ0aWN1bGFyIHRlcm1pbmFsLCB0aGUKKyAgICAgICBhdHRyaWJ1dGUgcGFydCBvZiAgdGhlICBiYWNrZ3JvdW5kICBpcyAgZGlzcGxheWVkICBhcyAgdGhlCisgICAgICAgZ3JhcGhpYyByZW5kaXRpb24gb2YgdGhlIGNoYXJhY3RlciBwdXQgb24gdGhlIHNjcmVlbi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5ia2dybmQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2JrZ3JuZDwvU1RST05HPiBmdW5jdGlvbnMgc2V0IHRoZSBiYWNrZ3JvdW5kIHByb3AtCisgICAgICAgZXJ0eSBvZiB0aGUgY3VycmVudCBvciBzcGVjaWZpZWQgIHdpbmRvdyAgYW5kICB0aGVuICBhcHBseQorICAgICAgIHRoaXMgc2V0dGluZyB0byBldmVyeSBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhhdCB3aW5kb3c6CisKKyAgICAgICAgICAgICAgVGhlICByZW5kaXRpb24gIG9mIGV2ZXJ5IGNoYXJhY3RlciBvbiB0aGUgc2NyZWVuIGlzCisgICAgICAgICAgICAgIGNoYW5nZWQgdG8gdGhlIG5ldyBiYWNrZ3JvdW5kIHJlbmRpdGlvbi4KKworICAgICAgICAgICAgICBXaGVyZXZlciB0aGUgZm9ybWVyIGJhY2tncm91bmQgIGNoYXJhY3RlciAgYXBwZWFycywKKyAgICAgICAgICAgICAgaXQgaXMgY2hhbmdlZCB0byB0aGUgbmV3IGJhY2tncm91bmQgY2hhcmFjdGVyLgorCisgICAgICAgVGhlICA8U1RST05HPmdldGJrZ3JuZDwvU1RST05HPiBmdW5jdGlvbiByZXR1cm5zIHRoZSBnaXZlbiB3aW5kb3cncyBjdXJyZW50CisgICAgICAgYmFja2dyb3VuZCBjaGFyYWN0ZXIvYXR0cmlidXRlIHBhaXIgdmlhIHRoZSA8U1RST05HPndjaDwvU1RST05HPiBwb2ludGVyLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmJrZ3JuZDwvU1RST05HPiwgPFNUUk9ORz5ia2dybmRzZXQ8L1NUUk9ORz4sIGFuZCA8U1RST05HPmdldGJrZ3JuZDwvU1RST05HPiBtYXkgYmUgIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5ia2dybmRzZXQ8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz53Ymtncm5kc2V0PC9TVFJPTkc+ICByb3V0aW5lcyAgZG8gbm90IHJldHVybiBhCisgICAgICAgdmFsdWUuCisKKyAgICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdGhlIG90aGVyIGZ1bmN0aW9ucyByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPi4KKyAgICAgICBPdGhlcndpc2UsICB0aGV5ICByZXR1cm4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+LiAgIEEgIG51bGwgd2luZG93IHBvaW50ZXIgaXMKKyAgICAgICB0cmVhdGVkIGFzIGFuIGVycm9yLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4NDgyNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2JvcmRlci4zeC5odG1sCkBAIC0wLDAgKzEsMTU4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYm9yZGVyLjN4LHYgMS4xOSAyMDA3LzAyLzI0IDE2OjE1OjM4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYm9yZGVyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19ib3JkZXIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Ym9yZGVyPC9TVFJPTkc+LCA8U1RST05HPndib3JkZXI8L1NUUk9ORz4sIDxTVFJPTkc+Ym94PC9TVFJPTkc+LCA8U1RST05HPmhsaW5lPC9TVFJPTkc+LCA8U1RST05HPndobGluZTwvU1RST05HPiwgPFNUUk9ORz52bGluZTwvU1RST05HPiwgPFNUUk9ORz53dmxpbmU8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmhsaW5lPC9TVFJPTkc+LCA8U1RST05HPm12d2hsaW5lPC9TVFJPTkc+LCA8U1RST05HPm12dmxpbmU8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3dmxpbmU8L1NUUk9ORz4gLSBjcmVhdGUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICBib3JkZXJzLCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsaW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ib3JkZXIoY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+bHMsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+cnMsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+dHMsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+YnMsPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50bCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50ciw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5ibCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5icik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Ym9yZGVyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+bHMsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+cnMsPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50cyw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5icyw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50bCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50ciw8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmJsLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmJyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJveChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPnZlcmNoLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmhvcmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmhsaW5lKGNodHlwZTwvU1RST05HPiA8U1RST05HPmNoLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2hsaW5lKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz52bGluZShjaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnd2bGluZShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZobGluZShpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndobGluZShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12dmxpbmUoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3dmxpbmUoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+Ym9yZGVyPC9TVFJPTkc+LCA8U1RST05HPndib3JkZXI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Ym94PC9TVFJPTkc+IHJvdXRpbmVzIGRyYXcgYSBib3ggYXJvdW5kIHRoZQorICAgICAgIGVkZ2VzIG9mIGEgd2luZG93LiAgT3RoZXIgdGhhbiB0aGUgd2luZG93LCAgZWFjaCAgYXJndW1lbnQKKyAgICAgICBpcyBhIGNoYXJhY3RlciB3aXRoIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgICAgPEVNPmxzPC9FTT4gLSBsZWZ0IHNpZGUsCisgICAgICAgICAgICAgIDxFTT5yczwvRU0+IC0gcmlnaHQgc2lkZSwKKyAgICAgICAgICAgICAgPEVNPnRzPC9FTT4gLSB0b3Agc2lkZSwKKyAgICAgICAgICAgICAgPEVNPmJzPC9FTT4gLSBib3R0b20gc2lkZSwKKyAgICAgICAgICAgICAgPEVNPnRsPC9FTT4gLSB0b3AgbGVmdC1oYW5kIGNvcm5lciwKKyAgICAgICAgICAgICAgPEVNPnRyPC9FTT4gLSB0b3AgcmlnaHQtaGFuZCBjb3JuZXIsCisgICAgICAgICAgICAgIDxFTT5ibDwvRU0+IC0gYm90dG9tIGxlZnQtaGFuZCBjb3JuZXIsIGFuZAorICAgICAgICAgICAgICA8RU0+YnI8L0VNPiAtIGJvdHRvbSByaWdodC1oYW5kIGNvcm5lci4KKworICAgICAgIElmICBhbnkgb2YgdGhlc2UgYXJndW1lbnRzIGlzIHplcm8sIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICBkZWZhdWx0IHZhbHVlcyAoZGVmaW5lZCBpbiA8U1RST05HPmN1cnNlcy5oPC9TVFJPTkc+KSBhcmUgdXNlZCBpbnN0ZWFkOgorCisgICAgICAgICAgICAgIDxTVFJPTkc+QUNTX1ZMSU5FPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPkFDU19WTElORTwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5BQ1NfSExJTkU8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+QUNTX0hMSU5FPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPkFDU19VTENPUk5FUjwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5BQ1NfVVJDT1JORVI8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+QUNTX0xMQ09STkVSPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPkFDU19MUkNPUk5FUjwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+Ym94KDwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8RU0+dmVyY2g8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8RU0+aG9yY2g8L0VNPjxTVFJPTkc+KTwvU1RST05HPiBpcyBhIHNob3J0aGFuZCAgZm9yICB0aGUgIGZvbGxvd2luZworICAgICAgIGNhbGw6ICA8U1RST05HPndib3JkZXIoPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+ICA8RU0+dmVyY2g8L0VNPjxTVFJPTkc+LDwvU1RST05HPiAgPEVNPnZlcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPEVNPmhvcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPEVNPmhvcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz4wLDwvU1RST05HPiA8U1RST05HPjAsPC9TVFJPTkc+IDxTVFJPTkc+MCw8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjApPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+aGxpbmU8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2hsaW5lPC9TVFJPTkc+IGZ1bmN0aW9ucyBkcmF3IGEgaG9yaXpvbnRhbCAobGVmdCAgdG8KKyAgICAgICByaWdodCkgIGxpbmUgdXNpbmcgPEVNPmNoPC9FTT4gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2ktCisgICAgICAgdGlvbiBpbiB0aGUgd2luZG93LiAgVGhlIGN1cnJlbnQgY3Vyc29yICBwb3NpdGlvbiAgaXMgIG5vdAorICAgICAgIGNoYW5nZWQuICAgVGhlICBsaW5lICBpcyAgYXQgbW9zdCA8RU0+bjwvRU0+IGNoYXJhY3RlcnMgbG9uZywgb3IgYXMKKyAgICAgICBtYW55IGFzIGZpdCBpbnRvIHRoZSB3aW5kb3cuCisKKyAgICAgICBUaGUgPFNUUk9ORz52bGluZTwvU1RST05HPiBhbmQgPFNUUk9ORz53dmxpbmU8L1NUUk9ORz4gZnVuY3Rpb25zIGRyYXcgIGEgIHZlcnRpY2FsICAodG9wICB0bworICAgICAgIGJvdHRvbSkgbGluZSB1c2luZyA8RU0+Y2g8L0VNPiBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaS0KKyAgICAgICB0aW9uIGluIHRoZSB3aW5kb3cuICBUaGUgY3VycmVudCBjdXJzb3IgIHBvc2l0aW9uICBpcyAgbm90CisgICAgICAgY2hhbmdlZC4gICBUaGUgIGxpbmUgIGlzICBhdCBtb3N0IDxFTT5uPC9FTT4gY2hhcmFjdGVycyBsb25nLCBvciBhcworICAgICAgIG1hbnkgYXMgZml0IGludG8gdGhlIHdpbmRvdy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciAgPFNUUk9ORz5PSzwvU1RST05HPi4gICBUaGUgIFNWcjQuMCAgbWFudWFsCisgICAgICAgc2F5cyAgIm9yICBhICBub24tbmVnYXRpdmUgaW50ZWdlciBpZiA8U1RST05HPmltbWVkb2s8L1NUUk9ORz4gaXMgc2V0IiwgYnV0CisgICAgICAgdGhpcyBhcHBlYXJzIHRvIGJlIGFuIGVycm9yLgorCisgICAgICAgWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgIGltcGxlLQorICAgICAgIG1lbnRhdGlvbiAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgYm9yZGVycyBnZW5lcmF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zIGFyZSAgPEVNPmluc2lkZTwvRU0+ICBib3ItCisgICAgICAgZGVycyAodGhpcyBpcyBhbHNvIHRydWUgb2YgU1ZyNCBjdXJzZXMsIHRob3VnaCB0aGUgZmFjdCBpcworICAgICAgIG5vdCBkb2N1bWVudGVkKS4KKworICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmJvcmRlcjwvU1RST05HPiBhbmQgPFNUUk9ORz5ib3g8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgIDQuICAgVGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IG9uCisgICAgICAgZmFpbHVyZSwgYnV0IHNwZWNpZmllcyBubyBlcnJvciBjb25kaXRpb25zLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1ZTgxMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2JvcmRlcl9zZXQuM3guaHRtbApAQCAtMCwwICsxLDE3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2JvcmRlcl9zZXQuM3gsdiAxLjYgMjAwNS8wNS8xNSAxNjoxNzozNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2JvcmRlcl9zZXQgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2JvcmRlcl9zZXQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5ib3JkZXJfc2V0PC9TVFJPTkc+LCA8U1RST05HPndib3JkZXJfc2V0PC9TVFJPTkc+LCA8U1RST05HPmJveF9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+aGxpbmVfc2V0PC9TVFJPTkc+LCA8U1RST05HPndobGluZV9zZXQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmhsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz5tdndobGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+dmxpbmVfc2V0PC9TVFJPTkc+LCA8U1RST05HPnd2bGluZV9zZXQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdnZsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz5tdnd2bGluZV9zZXQ8L1NUUk9ORz4gLSBjcmVhdGUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gYm9yZGVycyBvciBsaW5lcworICAgICAgIHVzaW5nIGNvbXBsZXggY2hhcmFjdGVycyBhbmQgcmVuZGl0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJvcmRlcl9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmxzPC9FTT4sIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5yczwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT50czwvRU0+LCA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+YnM8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dGw8L0VNPiwgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnRyPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmJsPC9FTT4sIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5icjwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndib3JkZXJfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KndpbjwvU1RST05HPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+bHM8L0VNPiwgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnJzPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnRzPC9FTT4sIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5iczwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT50bDwvRU0+LCA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dHI8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+Ymw8L0VNPiwgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmJyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ib3hfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KndpbjwvU1RST05HPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dmVyY2g8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+aG9yY2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmhsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aGxpbmVfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmhsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2hsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz52bGluZV9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3ZsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ2bGluZV9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdnd2bGluZV9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmJvcmRlcl9zZXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2JvcmRlcl9zZXQ8L1NUUk9ORz4gIGZ1bmN0aW9ucyAgZHJhdyAgYSAgYm9yZGVyCisgICAgICAgYXJvdW5kICB0aGUgIGVkZ2VzICBvZiAgdGhlICBjdXJyZW50ICBvciBzcGVjaWZpZWQgd2luZG93LgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgY2hhbmdlIHRoZSBjdXJzb3IgcG9zaXRpb24sIGFuZCAgZG8KKyAgICAgICBub3Qgd3JhcC4KKworICAgICAgIE90aGVyICB0aGFuIHRoZSB3aW5kb3csIGVhY2ggYXJndW1lbnQgaXMgYSBjb21wbGV4IGNoYXJhYy0KKyAgICAgICB0ZXIgd2l0aCBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICA8RU0+bHM8L0VNPiAtIGxlZnQgc2lkZSwKKyAgICAgICAgICAgICAgPEVNPnJzPC9FTT4gLSByaWdodCBzaWRlLAorICAgICAgICAgICAgICA8RU0+dHM8L0VNPiAtIHRvcCBzaWRlLAorICAgICAgICAgICAgICA8RU0+YnM8L0VNPiAtIGJvdHRvbSBzaWRlLAorICAgICAgICAgICAgICA8RU0+dGw8L0VNPiAtIHRvcCBsZWZ0LWhhbmQgY29ybmVyLAorICAgICAgICAgICAgICA8RU0+dHI8L0VNPiAtIHRvcCByaWdodC1oYW5kIGNvcm5lciwKKyAgICAgICAgICAgICAgPEVNPmJsPC9FTT4gLSBib3R0b20gbGVmdC1oYW5kIGNvcm5lciwgYW5kCisgICAgICAgICAgICAgIDxFTT5icjwvRU0+IC0gYm90dG9tIHJpZ2h0LWhhbmQgY29ybmVyLgorCisgICAgICAgSWYgYW55IG9mIHRoZXNlIGFyZ3VtZW50cyBpcyB6ZXJvLCB0aGVuIHRoZSAgY29ycmVzcG9uZGluZworICAgICAgIGRlZmF1bHQgdmFsdWVzIChkZWZpbmVkIGluIDxTVFJPTkc+Y3Vyc2VzLmg8L1NUUk9ORz4pIGFyZSB1c2VkIGluc3RlYWQ6CisgICAgICAgICAgICAgIDxTVFJPTkc+V0FDU19WTElORTwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5XQUNTX1ZMSU5FPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPldBQ1NfSExJTkU8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+V0FDU19ITElORTwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5XQUNTX1VMQ09STkVSPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPldBQ1NfVVJDT1JORVI8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+V0FDU19MTENPUk5FUjwvU1RST05HPiwgYW5kCisgICAgICAgICAgICAgIDxTVFJPTkc+V0FDU19MUkNPUk5FUjwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+Ym94X3NldCg8L1NUUk9ORz48RU0+d2luPC9FTT4sIDxFTT52ZXJjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxFTT5ob3JjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPiBpcyBhIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvdy0KKyAgICAgICBpbmcgY2FsbDoKKworICAgICAgIDxTVFJPTkc+d2JvcmRlcl9zZXQoPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxFTT52ZXJjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxFTT52ZXJjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgICAgIDxFTT5ob3JjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxFTT5ob3JjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+TlVMTCw8L1NUUk9ORz4gPFNUUk9ORz5OVUxMLDwvU1RST05HPiA8U1RST05HPk5VTEwsPC9TVFJPTkc+IDxTVFJPTkc+TlVMTCk7PC9TVFJPTkc+CisKKyAgICAgICBUaGUgPFNUUk9ORz4qbGluZV9zZXQ8L1NUUk9ORz4gZnVuY3Rpb25zIHVzZSA8RU0+d2NoPC9FTT4gdG8gZHJhdyBhIGxpbmUgc3RhcnRpbmcgYXQKKyAgICAgICB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHdpbmRvdy4gIFRoZSBsaW5lIGlzIGF0CisgICAgICAgbW9zdCA8RU0+bjwvRU0+IGNoYXJhY3RlcnMgbG9uZyBvciBhcyBtYW55IGFzIGZpdCBpbnRvIHRoZSAgd2luZG93LgorICAgICAgIFRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpcyBub3QgY2hhbmdlZC4KKworICAgICAgIFRoZSAgPFNUUk9ORz5obGluZV9zZXQ8L1NUUk9ORz4sICA8U1RST05HPm12aGxpbmVfc2V0PC9TVFJPTkc+LCA8U1RST05HPm12d2hsaW5lX3NldDwvU1RST05HPiwgYW5kIDxTVFJPTkc+d2hsaW5lX3NldDwvU1RST05HPgorICAgICAgIGZ1bmN0aW9ucyBkcmF3IGEgbGluZSBwcm9jZWVkaW5nIHRvd2FyZCB0aGUgbGFzdCBjb2x1bW4gb2YKKyAgICAgICB0aGUgc2FtZSBsaW5lLgorCisgICAgICAgVGhlICA8U1RST05HPnZsaW5lX3NldDwvU1RST05HPiwgIDxTVFJPTkc+bXZ2bGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3dmxpbmVfc2V0PC9TVFJPTkc+LCBhbmQgPFNUUk9ORz53dmxpbmVfc2V0PC9TVFJPTkc+CisgICAgICAgZnVuY3Rpb25zIGRyYXcgYSBsaW5lIHByb2NlZWRpbmcgdG93YXJkIHRoZSBsYXN0ICBsaW5lICBvZgorICAgICAgIHRoZSB3aW5kb3cuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+Ym9yZGVyX3NldDwvU1RST05HPiwgPFNUUk9ORz5obGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+bXZobGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+bXZ2bGluZV9zZXQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdndobGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3dmxpbmVfc2V0PC9TVFJPTkc+LCBhbmQgPFNUUk9ORz52bGluZV9zZXQ8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCAgdGhlc2UgIGZ1bmN0aW9ucyAgcmV0dXJuICA8U1RST05HPk9LPC9TVFJPTkc+LgorICAgICAgIE90aGVyd2lzZSwgdGhleSByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4uCisKKyAgICAgICBGdW5jdGlvbnMgIHVzaW5nICBhIHdpbmRvdyBwYXJhbWV0ZXIgcmV0dXJuIGFuIGVycm9yIGlmIGl0CisgICAgICAgaXMgbnVsbC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfY2xlYXIuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiYjQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwKQEAgLTAsMCArMSwxNDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19jbGVhci4zeCx2IDEuMTEgMjAwNy8xMi8yOSAxNTo1ODozOCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2NsZWFyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19jbGVhciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZXJhc2U8L1NUUk9ORz4sIDxTVFJPTkc+d2VyYXNlPC9TVFJPTkc+LCA8U1RST05HPmNsZWFyPC9TVFJPTkc+LCA8U1RST05HPndjbGVhcjwvU1RST05HPiwgPFNUUk9ORz5jbHJ0b2JvdDwvU1RST05HPiwgPFNUUk9ORz53Y2xydG9ib3Q8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5jbHJ0b2VvbDwvU1RST05HPiwgPFNUUk9ORz53Y2xydG9lb2w8L1NUUk9ORz4gLSBjbGVhciBhbGwgb3IgcGFydCBvZiBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+IzwvU1RST05HPiA8U1RST05HPmluY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmVyYXNlKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2VyYXNlKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y2xlYXIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Y2xlYXIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jbHJ0b2JvdCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndjbHJ0b2JvdChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNscnRvZW9sKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2NscnRvZW9sKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5lcmFzZTwvU1RST05HPiAgYW5kIDxTVFJPTkc+d2VyYXNlPC9TVFJPTkc+IHJvdXRpbmVzIGNvcHkgYmxhbmtzIHRvIGV2ZXJ5IHBvc2ktCisgICAgICAgdGlvbiBpbiB0aGUgd2luZG93LCBjbGVhcmluZyB0aGUgc2NyZWVuLgorCisgICAgICAgVGhlIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2NsZWFyPC9TVFJPTkc+IHJvdXRpbmVzIGFyZSBsaWtlIDxTVFJPTkc+ZXJhc2U8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz53ZXJhc2U8L1NUUk9ORz4sCisgICAgICAgYnV0ICB0aGV5IGFsc28gY2FsbCA8U1RST05HPmNsZWFyb2s8L1NUUk9ORz4sIHNvIHRoYXQgdGhlIHNjcmVlbiBpcyBjbGVhcmVkCisgICAgICAgY29tcGxldGVseSBvbiB0aGUgbmV4dCBjYWxsIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gIGZvciAgdGhhdCAgd2luZG93CisgICAgICAgYW5kIHJlcGFpbnRlZCBmcm9tIHNjcmF0Y2guCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Y2xydG9ib3Q8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2NscnRvYm90PC9TVFJPTkc+IHJvdXRpbmVzIGVyYXNlIGZyb20gdGhlIGN1cnNvcgorICAgICAgIHRvIHRoZSBlbmQgb2Ygc2NyZWVuLiAgVGhhdCBpcywgdGhleSBlcmFzZSBhbGwgbGluZXMgYmVsb3cKKyAgICAgICB0aGUgIGN1cnNvciAgaW4gdGhlIHdpbmRvdy4gIEFsc28sIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlCisgICAgICAgcmlnaHQgb2YgdGhlIGN1cnNvciwgaW5jbHVzaXZlLCBpcyBlcmFzZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz5jbHJ0b2VvbDwvU1RST05HPiBhbmQgPFNUUk9ORz53Y2xydG9lb2w8L1NUUk9ORz4gcm91dGluZXMgZXJhc2UgdGhlIGN1cnJlbnQgbGluZQorICAgICAgIHRvICB0aGUgIHJpZ2h0IG9mIHRoZSBjdXJzb3IsIGluY2x1c2l2ZSwgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAgICBjdXJyZW50IGxpbmUuCisKKyAgICAgICBCbGFua3MgY3JlYXRlZCBieSBlcmFzdXJlIGhhdmUgdGhlIGN1cnJlbnQgYmFja2dyb3VuZCByZW4tCisgICAgICAgZGl0aW9uIChhcyBzZXQgYnkgPFNUUk9ORz53YmtnZHNldDwvU1RST05HPikgbWVyZ2VkIGludG8gdGhlbS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsICByb3V0aW5lcyAgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24gc3VjY2VzcyBhbmQgPFNUUk9ORz5FUlI8L1NUUk9ORz4gb24KKyAgICAgICBmYWlsdXJlLiAgVGhlIFNWcjQuMCBtYW51YWwgc2F5cyAib3IgYSBub24tbmVnYXRpdmUgIGludGUtCisgICAgICAgZ2VyIGlmIDxTVFJPTkc+aW1tZWRvazwvU1RST05HPiBpcyBzZXQiLCBidXQgdGhpcyBhcHBlYXJzIHRvIGJlIGFuIGVycm9yLgorCisgICAgICAgWC9PcGVuICBkZWZpbmVzICBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyBpbXBsZW1lbnRhLQorICAgICAgIHRpb24sIGZ1bmN0aW9ucyB1c2luZyBhIHdpbmRvdyBwb2ludGVyIHBhcmFtZXRlciByZXR1cm4gYW4KKyAgICAgICBlcnJvciBpZiBpdCBpcyBudWxsLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmVyYXNlPC9TVFJPTkc+LCA8U1RST05HPndlcmFzZTwvU1RST05HPiwgPFNUUk9ORz5jbGVhcjwvU1RST05HPiwgPFNUUk9ORz53Y2xlYXI8L1NUUk9ORz4sIDxTVFJPTkc+Y2xydG9ib3Q8L1NUUk9ORz4sIGFuZCA8U1RST05HPmNsci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnRvZW9sPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgIHN0YW5kYXJkLAorICAgICAgIElzc3VlICA0LiAgIFRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGV5IHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiBvbgorICAgICAgIGZhaWx1cmUsIGJ1dCBzcGVjaWZpZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKworICAgICAgIFNvbWUgaGlzdG9yaWMgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBoYWQsICBhcyAgYW4gIHVuZG9jdS0KKyAgICAgICBtZW50ZWQgIGZlYXR1cmUsICB0aGUgIGFiaWxpdHkgIHRvICBkbyAgdGhlICBlcXVpdmFsZW50IG9mCisgICAgICAgPFNUUk9ORz5jbGVhcm9rKC4uLiw8L1NUUk9ORz4gPFNUUk9ORz4xKTwvU1RST05HPiBieSBzYXlpbmcgPFNUUk9ORz50b3VjaHdpbihzdGRzY3IpPC9TVFJPTkc+ICBvciAgPFNUUk9ORz5jbGVhcihzdGQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zY3IpPC9TVFJPTkc+LiAgVGhpcyB3aWxsIG5vdCB3b3JrIHVuZGVyIG5jdXJzZXMuCisKKyAgICAgICBUaGlzICBpbXBsZW1lbnRhdGlvbiwgYW5kIG90aGVycyBzdWNoIGFzIFNvbGFyaXMsIHNldHMgdGhlCisgICAgICAgY3VycmVudCBwb3NpdGlvbiB0byAwLDAgYWZ0ZXIgIGVyYXNpbmcgIHZpYSAgPFNUUk9ORz53ZXJhc2UoKTwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz53Y2xlYXIoKTwvU1RST05HPi4gICBUaGF0IGZhY3QgaXMgbm90IGRvY3VtZW50ZWQgaW4gb3RoZXIgaW1wbGVtZW4tCisgICAgICAgdGF0aW9ucywgYW5kIG1heSBub3QgYmUgdHJ1ZSBvZiBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggd2VyZQorICAgICAgIG5vdCBkZXJpdmVkIGZyb20gU1ZyNCBzb3VyY2UuCisKKyAgICAgICBOb3QgIG9idmlvdXMgIGZyb20gIHRoZSAgZGVzY3JpcHRpb24sIG1vc3QgaW1wbGVtZW50YXRpb25zCisgICAgICAgY2xlYXIgdGhlIHNjcmVlbiBhZnRlciA8U1RST05HPndjbGVhcjwvU1RST05HPiBldmVuIGZvciBhIHN1YndpbmRvdyBvciAgZGUtCisgICAgICAgcml2ZWQgd2luZG93LiAgSWYgeW91IGRvIG5vdCB3YW50IHRvIGNsZWFyIHRoZSBzY3JlZW4gZHVyLQorICAgICAgIGluZyB0aGUgbmV4dCA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+LCB1c2UgPFNUUk9ORz53ZXJhc2U8L1NUUk9ORz4gaW5zdGVhZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19jb2xvci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfY29sb3IuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ2MDVmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfY29sb3IuM3guaHRtbApAQCAtMCwwICsxLDI4MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2NvbG9yLjN4LHYgMS4yOCAyMDA1LzEyLzE4IDAwOjAwOjM3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfY29sb3IgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2NvbG9yIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5zdGFydF9jb2xvcjwvU1RST05HPiwgPFNUUk9ORz5pbml0X3BhaXI8L1NUUk9ORz4sIDxTVFJPTkc+aW5pdF9jb2xvcjwvU1RST05HPiwgPFNUUk9ORz5oYXNfY29sb3JzPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+Y2FuX2NoYW5nZV9jb2xvcjwvU1RST05HPiwgPFNUUk9ORz5jb2xvcl9jb250ZW50PC9TVFJPTkc+LCA8U1RST05HPnBhaXJfY29udGVudDwvU1RST05HPiwgPFNUUk9ORz5DT0xPUl9QQUlSPC9TVFJPTkc+CisgICAgICAgLSA8U1RST05HPmN1cnNlczwvU1RST05HPiBjb2xvciBtYW5pcHVsYXRpb24gcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiM8L1NUUk9ORz4gPFNUUk9ORz5pbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c3RhcnRfY29sb3Iodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbml0X3BhaXIoc2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5wYWlyLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Ziw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5pdF9jb2xvcihzaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+ciw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmcsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5iKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5oYXNfY29sb3JzKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmNhbl9jaGFuZ2VfY29sb3Iodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+Y29sb3JfY29udGVudChzaG9ydDwvU1RST05HPiAgPFNUUk9ORz5jb2xvciw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPipyLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+KmcsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPipiKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBhaXJfY29udGVudChzaG9ydDwvU1RST05HPiA8U1RST05HPnBhaXIsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz4qZiw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPipiKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgIDxTVFJPTkc+T3ZlcnZpZXc8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiBzdXBwb3J0IGNvbG9yIGF0dHJpYnV0ZXMgb24gdGVybWluYWxzIHdpdGggdGhhdCBjYS0KKyAgICAgICBwYWJpbGl0eS4gICBUbyAgdXNlICB0aGVzZSAgcm91dGluZXMgIDxTVFJPTkc+c3RhcnRfY29sb3I8L1NUUk9ORz4gIG11c3QgYmUKKyAgICAgICBjYWxsZWQsIHVzdWFsbHkgcmlnaHQgYWZ0ZXIgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+LiAgIENvbG9ycyAgYXJlICBhbHdheXMKKyAgICAgICB1c2VkICBpbiBwYWlycyAocmVmZXJyZWQgdG8gYXMgY29sb3ItcGFpcnMpLiAgQSBjb2xvci1wYWlyCisgICAgICAgY29uc2lzdHMgb2YgYSBmb3JlZ3JvdW5kICBjb2xvciAgKGZvciAgY2hhcmFjdGVycykgIGFuZCAgYQorICAgICAgIGJhY2tncm91bmQgY29sb3IgKGZvciB0aGUgYmxhbmsgZmllbGQgb24gd2hpY2ggdGhlIGNoYXJhYy0KKyAgICAgICB0ZXJzIGFyZSBkaXNwbGF5ZWQpLiAgQSBwcm9ncmFtbWVyICBpbml0aWFsaXplcyAgYSAgY29sb3ItCisgICAgICAgcGFpciAgd2l0aCAgdGhlIHJvdXRpbmUgPFNUUk9ORz5pbml0X3BhaXI8L1NUUk9ORz4uICBBZnRlciBpdCBoYXMgYmVlbiBpbmktCisgICAgICAgdGlhbGl6ZWQsIDxTVFJPTkc+Q09MT1JfUEFJUjwvU1RST05HPig8RU0+bjwvRU0+KSwgYSBtYWNybyAgZGVmaW5lZCAgaW4gIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiwKKyAgICAgICBjYW4gYmUgdXNlZCBhcyBhIG5ldyB2aWRlbyBhdHRyaWJ1dGUuCisKKyAgICAgICBJZiAgYSAgdGVybWluYWwgIGlzIGNhcGFibGUgb2YgcmVkZWZpbmluZyBjb2xvcnMsIHRoZSBwcm8tCisgICAgICAgZ3JhbW1lciBjYW4gdXNlIHRoZSByb3V0aW5lIDxTVFJPTkc+aW5pdF9jb2xvcjwvU1RST05HPiB0byBjaGFuZ2UgdGhlIGRlZmktCisgICAgICAgbml0aW9uICAgb2YgICBhICAgY29sb3IuICAgIFRoZSAgcm91dGluZXMgIDxTVFJPTkc+aGFzX2NvbG9yczwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5jYW5fY2hhbmdlX2NvbG9yPC9TVFJPTkc+ICByZXR1cm4gIDxTVFJPTkc+VFJVRTwvU1RST05HPiAgb3IgIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4sICBkZXBlbmRpbmcgICBvbgorICAgICAgIHdoZXRoZXIgIHRoZSAgdGVybWluYWwgIGhhcyBjb2xvciBjYXBhYmlsaXRpZXMgYW5kIHdoZXRoZXIKKyAgICAgICB0aGUgcHJvZ3JhbW1lciBjYW4gY2hhbmdlIHRoZSBjb2xvcnMuICAgVGhlICByb3V0aW5lICA8U1RST05HPmNvbC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm9yX2NvbnRlbnQ8L1NUUk9ORz4gIGFsbG93cyAgYSBwcm9ncmFtbWVyIHRvIGV4dHJhY3QgdGhlIGFtb3VudHMgb2YKKyAgICAgICByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIGFuICBpbml0aWFsaXplZCAgY29sb3IuCisgICAgICAgVGhlICByb3V0aW5lICA8U1RST05HPnBhaXJfY29udGVudDwvU1RST05HPiBhbGxvd3MgYSBwcm9ncmFtbWVyIHRvIGZpbmQgb3V0CisgICAgICAgaG93IGEgZ2l2ZW4gY29sb3ItcGFpciBpcyBjdXJyZW50bHkgZGVmaW5lZC4KKworICAgPFNUUk9ORz5Sb3V0aW5lPC9TVFJPTkc+IDxTVFJPTkc+RGVzY3JpcHRpb25zPC9TVFJPTkc+CisgICAgICAgVGhlIDxTVFJPTkc+c3RhcnRfY29sb3I8L1NUUk9ORz4gcm91dGluZSByZXF1aXJlcyBubyBhcmd1bWVudHMuICBJdCBtdXN0IGJlCisgICAgICAgY2FsbGVkICBpZiAgdGhlIHByb2dyYW1tZXIgd2FudHMgdG8gdXNlIGNvbG9ycywgYW5kIGJlZm9yZQorICAgICAgIGFueSBvdGhlciBjb2xvciBtYW5pcHVsYXRpb24gcm91dGluZSAgaXMgIGNhbGxlZC4gICBJdCAgaXMKKyAgICAgICBnb29kICBwcmFjdGljZSAgdG8gIGNhbGwgdGhpcyByb3V0aW5lIHJpZ2h0IGFmdGVyIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPi4KKyAgICAgICA8U1RST05HPnN0YXJ0X2NvbG9yPC9TVFJPTkc+IGluaXRpYWxpemVzIGVpZ2h0IGJhc2ljICBjb2xvcnMgIChibGFjaywgIHJlZCwKKyAgICAgICBncmVlbiwgIHllbGxvdywgIGJsdWUsICBtYWdlbnRhLCBjeWFuLCBhbmQgd2hpdGUpLCBhbmQgdHdvCisgICAgICAgZ2xvYmFsIHZhcmlhYmxlcywgIDxTVFJPTkc+Q09MT1JTPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+Q09MT1JfUEFJUlM8L1NUUk9ORz4gIChyZXNwZWN0aXZlbHkKKyAgICAgICBkZWZpbmluZyAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9ycyBhbmQgY29sb3ItcGFpcnMgdGhlCisgICAgICAgdGVybWluYWwgY2FuIHN1cHBvcnQpLiAgSXQgYWxzbyByZXN0b3JlcyB0aGUgY29sb3JzIG9uIHRoZQorICAgICAgIHRlcm1pbmFsIHRvIHRoZSB2YWx1ZXMgdGhleSBoYWQgd2hlbiB0aGUgdGVybWluYWwgd2FzIGp1c3QKKyAgICAgICB0dXJuZWQgb24uCisKKyAgICAgICBUaGUgPFNUUk9ORz5pbml0X3BhaXI8L1NUUk9ORz4gcm91dGluZSBjaGFuZ2VzIHRoZSBkZWZpbml0aW9uIG9mICBhICBjb2xvci0KKyAgICAgICBwYWlyLiAgIEl0IHRha2VzIHRocmVlIGFyZ3VtZW50czogdGhlIG51bWJlciBvZiB0aGUgY29sb3ItCisgICAgICAgcGFpciB0byBiZSBjaGFuZ2VkLCB0aGUgZm9yZWdyb3VuZCBjb2xvciBudW1iZXIsICBhbmQgIHRoZQorICAgICAgIGJhY2tncm91bmQgY29sb3IgbnVtYmVyLiAgRm9yIHBvcnRhYmxlIGFwcGxpY2F0aW9uczoKKworICAgICAgIC0gICAgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gPFNUUk9ORz4xPC9TVFJPTkc+IGFuZAorICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9QQUlSUy0xPC9TVFJPTkc+LgorCisgICAgICAgLSAgICBUaGUgdmFsdWUgb2YgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzICBtdXN0ICBiZQorICAgICAgICAgICAgYmV0d2VlbiAgMCBhbmQgPFNUUk9ORz5DT0xPUlM8L1NUUk9ORz4uICBDb2xvciBwYWlyIDAgaXMgYXNzdW1lZCB0byBiZQorICAgICAgICAgICAgd2hpdGUgb24gYmxhY2ssIGJ1dCBpcyBhY3R1YWxseSB3aGF0ZXZlciB0aGUgdGVybWluYWwKKyAgICAgICAgICAgIGltcGxlbWVudHMgYmVmb3JlIGNvbG9yIGlzIGluaXRpYWxpemVkLiAgSXQgY2Fubm90IGJlCisgICAgICAgICAgICBtb2RpZmllZCBieSB0aGUgYXBwbGljYXRpb24uCisKKyAgICAgICBJZiB0aGUgY29sb3ItcGFpciB3YXMgcHJldmlvdXNseSBpbml0aWFsaXplZCwgIHRoZSAgc2NyZWVuCisgICAgICAgaXMgIHJlZnJlc2hlZCAgYW5kICBhbGwgb2NjdXJyZW5jZXMgb2YgdGhhdCBjb2xvci1wYWlyIGFyZQorICAgICAgIGNoYW5nZWQgdG8gdGhlIG5ldyBkZWZpbml0aW9uLgorCisgICAgICAgQXMgYW4gZXh0ZW5zaW9uLCBuY3Vyc2VzIGFsbG93cyB5b3UgdG8gc2V0ICBjb2xvciAgcGFpciAgMAorICAgICAgIHZpYSAgdGhlICA8U1RST05HPmFzc3VtZV9kZWZhdWx0X2NvbG9yczwvU1RST05HPiByb3V0aW5lLCBvciB0byBzcGVjaWZ5IHRoZQorICAgICAgIHVzZSBvZiBkZWZhdWx0IGNvbG9ycyAoY29sb3IgbnVtYmVyIDxTVFJPTkc+LTE8L1NUUk9ORz4pIGlmIHlvdSAgZmlyc3QgIGluLQorICAgICAgIHZva2UgdGhlIDxTVFJPTkc+dXNlX2RlZmF1bHRfY29sb3JzPC9TVFJPTkc+IHJvdXRpbmUuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+aW5pdF9jb2xvcjwvU1RST05HPiByb3V0aW5lIGNoYW5nZXMgdGhlIGRlZmluaXRpb24gb2YgYSBjb2xvci4KKyAgICAgICBJdCB0YWtlcyBmb3VyIGFyZ3VtZW50czogdGhlIG51bWJlciBvZiAgdGhlICBjb2xvciAgdG8gIGJlCisgICAgICAgY2hhbmdlZCAgZm9sbG93ZWQgIGJ5IHRocmVlIFJHQiB2YWx1ZXMgKGZvciB0aGUgYW1vdW50cyBvZgorICAgICAgIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMpLiAgVGhlIHZhbHVlIG9mIHRoZSAgZmlyc3QKKyAgICAgICBhcmd1bWVudCAgbXVzdCAgYmUgYmV0d2VlbiA8U1RST05HPjA8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Q09MT1JTPC9TVFJPTkc+LiAgKFNlZSB0aGUgc2VjdGlvbgorICAgICAgIDxTVFJPTkc+Q29sb3JzPC9TVFJPTkc+IGZvciB0aGUgZGVmYXVsdCBjb2xvciBpbmRleC4pICAgRWFjaCAgb2YgIHRoZSAgbGFzdAorICAgICAgIHRocmVlICBhcmd1bWVudHMgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwMC4gIFdoZW4KKyAgICAgICA8U1RST05HPmluaXRfY29sb3I8L1NUUk9ORz4gaXMgdXNlZCwgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQgY29sb3IgIG9uICB0aGUKKyAgICAgICBzY3JlZW4gaW1tZWRpYXRlbHkgY2hhbmdlIHRvIHRoZSBuZXcgZGVmaW5pdGlvbi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5oYXNfY29sb3JzPC9TVFJPTkc+IHJvdXRpbmUgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgSXQgcmV0dXJucworICAgICAgIDxTVFJPTkc+VFJVRTwvU1RST05HPiBpZiB0aGUgdGVybWluYWwgY2FuIG1hbmlwdWxhdGUgY29sb3JzOyBvdGhlcndpc2UsICBpdAorICAgICAgIHJldHVybnMgPFNUUk9ORz5GQUxTRTwvU1RST05HPi4gIFRoaXMgcm91dGluZSBmYWNpbGl0YXRlcyB3cml0aW5nIHRlcm1pbmFsLQorICAgICAgIGluZGVwZW5kZW50IHByb2dyYW1zLiAgRm9yIGV4YW1wbGUsIGEgcHJvZ3JhbW1lciAgY2FuICB1c2UKKyAgICAgICBpdCAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gdXNlIGNvbG9yIG9yIHNvbWUgb3RoZXIgdmlkZW8gYXQtCisgICAgICAgdHJpYnV0ZS4KKworICAgICAgIFRoZSA8U1RST05HPmNhbl9jaGFuZ2VfY29sb3I8L1NUUk9ORz4gcm91dGluZSByZXF1aXJlcyAgbm8gIGFyZ3VtZW50cy4gICBJdAorICAgICAgIHJldHVybnMgIDxTVFJPTkc+VFJVRTwvU1RST05HPiAgaWYgIHRoZSAgdGVybWluYWwgIHN1cHBvcnRzICBjb2xvcnMgYW5kIGNhbgorICAgICAgIGNoYW5nZSB0aGVpciBkZWZpbml0aW9uczsgb3RoZXIsIGl0IHJldHVybnMgIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4uICAgVGhpcworICAgICAgIHJvdXRpbmUgZmFjaWxpdGF0ZXMgd3JpdGluZyB0ZXJtaW5hbC1pbmRlcGVuZGVudCBwcm9ncmFtcy4KKworICAgICAgIFRoZSA8U1RST05HPmNvbG9yX2NvbnRlbnQ8L1NUUk9ORz4gcm91dGluZSBnaXZlcyBwcm9ncmFtbWVycyBhIHdheSB0byAgZmluZAorICAgICAgIHRoZSBpbnRlbnNpdHkgb2YgdGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIChSR0IpIGNvbXBvbmVudHMKKyAgICAgICBpbiBhIGNvbG9yLiAgSXQgcmVxdWlyZXMgZm91ciBhcmd1bWVudHM6IHRoZSBjb2xvciBudW1iZXIsCisgICAgICAgYW5kICB0aHJlZSBhZGRyZXNzZXMgb2YgPFNUUk9ORz5zaG9ydDwvU1RST05HPnMgZm9yIHN0b3JpbmcgdGhlIGluZm9ybWF0aW9uCisgICAgICAgYWJvdXQgdGhlIGFtb3VudHMgb2YgcmVkLCBncmVlbiwgYW5kICBibHVlICBjb21wb25lbnRzICBpbgorICAgICAgIHRoZSAgZ2l2ZW4gY29sb3IuICBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUKKyAgICAgICBiZXR3ZWVuIDAgYW5kIDxTVFJPTkc+Q09MT1JTPC9TVFJPTkc+LiAgVGhlIHZhbHVlcyB0aGF0IGFyZSBzdG9yZWQgIGF0ICB0aGUKKyAgICAgICBhZGRyZXNzZXMgIHBvaW50ZWQgIHRvIGJ5IHRoZSBsYXN0IHRocmVlIGFyZ3VtZW50cyBhcmUgYmUtCisgICAgICAgdHdlZW4gMCAobm8gY29tcG9uZW50KSBhbmQgMTAwMCAobWF4aW11bSBhbW91bnQgb2YgIGNvbXBvLQorICAgICAgIG5lbnQpLgorCisgICAgICAgVGhlICA8U1RST05HPnBhaXJfY29udGVudDwvU1RST05HPiAgcm91dGluZSAgYWxsb3dzIHByb2dyYW1tZXJzIHRvIGZpbmQgb3V0CisgICAgICAgd2hhdCBjb2xvcnMgYSBnaXZlbiBjb2xvci1wYWlyIGNvbnNpc3RzIG9mLiAgIEl0ICByZXF1aXJlcworICAgICAgIHRocmVlICBhcmd1bWVudHM6IHRoZSBjb2xvci1wYWlyIG51bWJlciwgYW5kIHR3byBhZGRyZXNzZXMKKyAgICAgICBvZiA8U1RST05HPnNob3J0PC9TVFJPTkc+cyBmb3Igc3RvcmluZyB0aGUgZm9yZWdyb3VuZCAgYW5kICB0aGUgIGJhY2tncm91bmQKKyAgICAgICBjb2xvciAgbnVtYmVycy4gICBUaGUgIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlCisgICAgICAgYmV0d2VlbiAxIGFuZCA8U1RST05HPkNPTE9SX1BBSVJTLTE8L1NUUk9ORz4uICBUaGUgdmFsdWVzIHRoYXQgIGFyZSAgc3RvcmVkCisgICAgICAgYXQgIHRoZSBhZGRyZXNzZXMgcG9pbnRlZCB0byBieSB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1LQorICAgICAgIG1lbnRzIGFyZSBiZXR3ZWVuIDAgYW5kIDxTVFJPTkc+Q09MT1JTPC9TVFJPTkc+LgorCisgICA8U1RST05HPkNvbG9yczwvU1RST05HPgorICAgICAgIEluIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZGVmaW5lZC4gIFRoZXNlIGFyZQorICAgICAgIHRoZSAgZGVmYXVsdCBjb2xvcnMuICA8U1RST05HPmN1cnNlczwvU1RST05HPiBhbHNvIGFzc3VtZXMgdGhhdCA8U1RST05HPkNPTE9SX0JMQUNLPC9TVFJPTkc+CisgICAgICAgaXMgdGhlIGRlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIHRlcm1pbmFscy4KKworICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfQkxBQ0s8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPkNPTE9SX1JFRDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfR1JFRU48L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPkNPTE9SX1lFTExPVzwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfQkxVRTwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfTUFHRU5UQTwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfQ1lBTjwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfV0hJVEU8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIHJvdXRpbmVzIDxTVFJPTkc+Y2FuX2NoYW5nZV9jb2xvcigpPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+aGFzX2NvbG9ycygpPC9TVFJPTkc+ICByZXR1cm4KKyAgICAgICA8U1RST05HPlRSVUU8L1NUUk9ORz4gb3IgPFNUUk9ORz5GQUxTRTwvU1RST05HPi4KKworICAgICAgIEFsbCBvdGhlciByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZAorICAgICAgIGFuIDxTVFJPTkc+T0s8L1NUUk9ORz4gKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgIHZhbHVlICBvdGhlciAgdGhhbgorICAgICAgIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gIGRlZmluZXMgIG5vIGVycm9yIGNvbmRpdGlvbnMuICBUaGlzIGltcGxlbWVudGF0aW9uCisgICAgICAgd2lsbCByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gb24gYXR0ZW1wdHMgdG8gdXNlICBjb2xvciAgdmFsdWVzICBvdXRzaWRlCisgICAgICAgdGhlIHJhbmdlIDAgdG8gQ09MT1JTLTEgKGV4Y2VwdCBmb3IgdGhlIGRlZmF1bHQgY29sb3JzIGV4LQorICAgICAgIHRlbnNpb24pLCBvciB1c2UgY29sb3IgcGFpcnMgb3V0c2lkZSB0aGUgcmFuZ2UgMCAgdG8gIENPTC0KKyAgICAgICBPUl9QQUlSLTEuICBDb2xvciB2YWx1ZXMgdXNlZCBpbiA8U1RST05HPmluaXRfY29sb3I8L1NUUk9ORz4gbXVzdCBiZSBpbiB0aGUKKyAgICAgICByYW5nZSAwIHRvIDEwMDAuICBBbiBlcnJvciBpcyByZXR1cm5lZCBmcm9tIGFsbCAgZnVuY3Rpb25zCisgICAgICAgaWYgdGhlIHRlcm1pbmFsIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4gIEFuIGVycm9yIGlzIHJlLQorICAgICAgIHR1cm5lZCBmcm9tICBzZWNvbmRhcnkgIGZ1bmN0aW9ucyAgc3VjaCAgYXMgIDxTVFJPTkc+aW5pdF9wYWlyPC9TVFJPTkc+ICBpZgorICAgICAgIDxTVFJPTkc+c3RhcnRfY29sb3I8L1NUUk9ORz4gd2FzIG5vdCBjYWxsZWQuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5pbml0X2NvbG9yPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgZG9lcyBub3Qgc3VwLQorICAgICAgICAgICAgICAgICAgIHBvcnQgIHRoaXMgIGZlYXR1cmUsICBlLmcuLCAgaWYgIHRoZSAgPEVNPmluaXRpYWwtPC9FTT4KKyAgICAgICAgICAgICAgICAgICA8RU0+aXplPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3I8L0VNPiBjYXBhYmlsaXR5IGlzIGFic2VudCBmcm9tIHRoZSB0ZXJtaS0KKyAgICAgICAgICAgICAgICAgICBuYWwgZGVzY3JpcHRpb24uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zdGFydF9jb2xvcjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgSWYgdGhlIGNvbG9yIHRhYmxlIGNhbm5vdCAgYmUKKyAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgSW4gIHRoZSAgPEVNPm5jdXJzZXM8L0VNPiBpbXBsZW1lbnRhdGlvbiwgdGhlcmUgaXMgYSBzZXBhcmF0ZSBjb2xvcgorICAgICAgIGFjdGl2YXRpb24gZmxhZywgY29sb3IgcGFsZXR0ZSwgY29sb3IgcGFpcnMgdGFibGUsIGFuZCBhcy0KKyAgICAgICBzb2NpYXRlZCAgQ09MT1JTICBhbmQgIENPTE9SX1BBSVJTIGNvdW50cyBmb3IgZWFjaCBzY3JlZW47CisgICAgICAgdGhlIDxTVFJPTkc+c3RhcnRfY29sb3I8L1NUUk9ORz4gZnVuY3Rpb24gb25seSBhZmZlY3RzIHRoZSBjdXJyZW50ICBzY3JlZW4uCisgICAgICAgVGhlIFNWcjQvWFNJIGludGVyZmFjZSBpcyBub3QgcmVhbGx5IGRlc2lnbmVkIHdpdGggdGhpcyBpbgorICAgICAgIG1pbmQsIGFuZCBoaXN0b3JpY2FsICBpbXBsZW1lbnRhdGlvbnMgIG1heSAgdXNlICBhICBzaW5nbGUKKyAgICAgICBzaGFyZWQgY29sb3IgcGFsZXR0ZS4KKworICAgICAgIE5vdGUgdGhhdCBzZXR0aW5nIGFuIGltcGxpY2l0IGJhY2tncm91bmQgY29sb3IgdmlhIGEgY29sb3IKKyAgICAgICBwYWlyIGFmZmVjdHMgb25seSBjaGFyYWN0ZXIgY2VsbHMgdGhhdCBhICBjaGFyYWN0ZXIgIHdyaXRlCisgICAgICAgb3BlcmF0aW9uICBleHBsaWNpdGx5ICB0b3VjaGVzLiAgIFRvIGNoYW5nZSB0aGUgYmFja2dyb3VuZAorICAgICAgIGNvbG9yIHVzZWQgd2hlbiBwYXJ0cyBvZiBhIHdpbmRvdyBhcmUgYmxhbmtlZCAgYnkgIGVyYXNpbmcKKyAgICAgICBvciBzY3JvbGxpbmcgb3BlcmF0aW9ucywgc2VlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgU2V2ZXJhbCAgY2F2ZWF0cyAgYXBwbHkgIG9uIDM4NiBhbmQgNDg2IG1hY2hpbmVzIHdpdGggVkdBLQorICAgICAgIGNvbXBhdGlibGUgZ3JhcGhpY3M6CisKKyAgICAgICAtICAgIENPTE9SX1lFTExPVyBpcyBhY3R1YWxseSBicm93bi4gIFRvIGdldCAgeWVsbG93LCAgdXNlCisgICAgICAgICAgICBDT0xPUl9ZRUxMT1cgY29tYmluZWQgd2l0aCB0aGUgPFNUUk9ORz5BX0JPTEQ8L1NUUk9ORz4gYXR0cmlidXRlLgorCisgICAgICAgLSAgICBUaGUgIEFfQkxJTksgIGF0dHJpYnV0ZSAgc2hvdWxkICBpbiAgdGhlb3J5IGNhdXNlIHRoZQorICAgICAgICAgICAgYmFja2dyb3VuZCB0byBnbyBicmlnaHQuICBUaGlzIG9mdGVuIGZhaWxzICB0byAgd29yaywKKyAgICAgICAgICAgIGFuZCAgZXZlbiAgc29tZSBjYXJkcyBmb3Igd2hpY2ggaXQgbW9zdGx5IHdvcmtzIChzdWNoCisgICAgICAgICAgICBhcyB0aGUgUGFyYWRpc2UgYW5kIGNvbXBhdGlibGVzKSBkbyB0aGUgIHdyb25nICB0aGluZworICAgICAgICAgICAgd2hlbiB5b3UgdHJ5IHRvIHNldCBhIGJyaWdodCAieWVsbG93IiBiYWNrZ3JvdW5kICh5b3UKKyAgICAgICAgICAgIGdldCBhIGJsaW5raW5nIHllbGxvdyBmb3JlZ3JvdW5kIGluc3RlYWQpLgorCisgICAgICAgLSAgICBDb2xvciBSR0IgdmFsdWVzIGFyZSBub3Qgc2V0dGFibGUuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBzYXRpc2ZpZXMgWFNJIEN1cnNlcydzICBtaW5pbXVtICBtYXhpLQorICAgICAgIG11bXMgZm9yIDxTVFJPTkc+Q09MT1JTPC9TVFJPTkc+IGFuZCA8U1RST05HPkNPTE9SX1BBSVJTPC9TVFJPTkc+LgorCisgICAgICAgVGhlICA8U1RST05HPmluaXRfcGFpcjwvU1RST05HPiAgcm91dGluZSAgYWNjZXB0cyAgbmVnYXRpdmUgdmFsdWVzIG9mIGZvcmUtCisgICAgICAgZ3JvdW5kICBhbmQgIGJhY2tncm91bmQgIGNvbG9yICB0byAgc3VwcG9ydCAgdGhlICAgPFNUUk9ORz51c2VfZGUtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5mYXVsdF9jb2xvcnM8L1NUUk9ORz4gIGV4dGVuc2lvbiwgYnV0IG9ubHkgaWYgdGhhdCByb3V0aW5lIGhhcyBiZWVuCisgICAgICAgZmlyc3QgaW52b2tlZC4KKworICAgICAgIFRoZSBhc3N1bXB0aW9uIHRoYXQgPFNUUk9ORz5DT0xPUl9CTEFDSzwvU1RST05HPiBpcyB0aGUgZGVmYXVsdCAgYmFja2dyb3VuZAorICAgICAgIGNvbG9yICBmb3IgIGFsbCAgdGVybWluYWxzICBjYW4gIGJlIG1vZGlmaWVkIHVzaW5nIHRoZSA8U1RST05HPmFzLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+c3VtZV9kZWZhdWx0X2NvbG9yczwvU1RST05HPiBleHRlbnNpb24uCisKKyAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyB0aGUgIHBvaW50ZXJzLCAgZS5nLiwgIGZvciAgdGhlCisgICAgICAgdmFsdWVzICByZXR1cm5lZCAgYnkgIDxTVFJPTkc+Y29sb3JfY29udGVudDwvU1RST05HPiAgYW5kIDxTVFJPTkc+cGFpcl9jb250ZW50PC9TVFJPTkc+LCBhbmQKKyAgICAgICB3aWxsIHRyZWF0IHRob3NlIGFzIG9wdGlvbmFsIHBhcmFtZXRlcnMgd2hlbiBudWxsLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz5kZWZhdWx0X2NvbC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImRlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPm9ycygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19kZWxjaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjU2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19kZWxjaC4zeC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfZGVsY2guM3gsdiAxLjggMjAwNi8wMi8yNSAyMTo0Mjo1NyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2RlbGNoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19kZWxjaCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxjaC4zeC5odG1sIj5jdXJzX2RlbGNoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZGVsY2g8L1NUUk9ORz4sICA8U1RST05HPndkZWxjaDwvU1RST05HPiwgPFNUUk9ORz5tdmRlbGNoPC9TVFJPTkc+LCA8U1RST05HPm12d2RlbGNoPC9TVFJPTkc+IC0gZGVsZXRlIGNoYXJhY3RlciB1bmRlcgorICAgICAgIHRoZSBjdXJzb3IgaW4gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWxjaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndkZWxjaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12ZGVsY2goaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2RlbGNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBkZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yOyAgYWxsCisgICAgICAgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciBvbiB0aGUgc2FtZSBsaW5lIGFyZQorICAgICAgIG1vdmVkIHRvIHRoZSBsZWZ0IG9uZSBwb3NpdGlvbiBhbmQgdGhlIGxhc3QgIGNoYXJhY3RlciAgb24KKyAgICAgICB0aGUgbGluZSBpcyBmaWxsZWQgd2l0aCBhIGJsYW5rLiAgVGhlIGN1cnNvciBwb3NpdGlvbiBkb2VzCisgICAgICAgbm90IGNoYW5nZSAoYWZ0ZXIgbW92aW5nIHRvIDxFTT55PC9FTT4sIDxFTT54PC9FTT4sICBpZiAgc3BlY2lmaWVkKS4gICAoVGhpcworICAgICAgIGRvZXMgIG5vdCAgaW1wbHkgdXNlIG9mIHRoZSBoYXJkd2FyZSBkZWxldGUgY2hhcmFjdGVyIGZlYS0KKyAgICAgICB0dXJlLikKKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIGFuIDxTVFJPTkc+T0s8L1NUUk9ORz4KKyAgICAgICAoU1ZyNCAgc3BlY2lmaWVzICBvbmx5ICAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikKKyAgICAgICB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5kZWxjaDwvU1RST05HPiwgPFNUUk9ORz5tdmRlbGNoPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5tdndkZWxjaDwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSAgNC4gICBUaGUgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gb24KKyAgICAgICBmYWlsdXJlLCBidXQgc3BlY2lmaWVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsY2guM3guaHRtbCI+Y3Vyc19kZWxjaCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNzNjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sCkBAIC0wLDAgKzEsMTI2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfZGVsZXRlbG4uM3gsdiAxLjExIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19kZWxldGVsbiAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZGVsZXRlbG4gM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmRlbGV0ZWxuPC9TVFJPTkc+LCAgPFNUUk9ORz53ZGVsZXRlbG48L1NUUk9ORz4sICA8U1RST05HPmluc2RlbGxuPC9TVFJPTkc+LCA8U1RST05HPndpbnNkZWxsbjwvU1RST05HPiwgPFNUUk9ORz5pbnNlcnRsbjwvU1RST05HPiwgPFNUUk9ORz53aW4tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zZXJ0bG48L1NUUk9ORz4gLSBkZWxldGUgYW5kIGluc2VydCBsaW5lcyBpbiBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlbGV0ZWxuKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2RlbGV0ZWxuKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zZGVsbG4oaW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5zZGVsbG4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluc2VydGxuKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc2VydGxuKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmRlbGV0ZWxuPC9TVFJPTkc+IGFuZCA8U1RST05HPndkZWxldGVsbjwvU1RST05HPiByb3V0aW5lcyBkZWxldGUgdGhlIGxpbmUgIHVuZGVyCisgICAgICAgdGhlIGN1cnNvciBpbiB0aGUgd2luZG93OyBhbGwgbGluZXMgYmVsb3cgdGhlIGN1cnJlbnQgbGluZQorICAgICAgIGFyZSBtb3ZlZCB1cCBvbmUgbGluZS4gIFRoZSBib3R0b20gbGluZSBvZiB0aGUgIHdpbmRvdyAgaXMKKyAgICAgICBjbGVhcmVkLiAgVGhlIGN1cnNvciBwb3NpdGlvbiBkb2VzIG5vdCBjaGFuZ2UuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+aW5zZGVsbG48L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz53aW5zZGVsbG48L1NUUk9ORz4gIHJvdXRpbmVzLCAgZm9yICBwb3NpdGl2ZSA8RU0+bjwvRU0+LAorICAgICAgIGluc2VydCA8RU0+bjwvRU0+IGxpbmVzIGludG8gdGhlIHNwZWNpZmllZCB3aW5kb3cgYWJvdmUgdGhlIGN1cnJlbnQKKyAgICAgICBsaW5lLiAgIFRoZSAgPEVNPm48L0VNPiAgYm90dG9tICBsaW5lcyAgYXJlICBsb3N0LiAgRm9yIG5lZ2F0aXZlIDxFTT5uPC9FTT4sCisgICAgICAgZGVsZXRlIDxFTT5uPC9FTT4gbGluZXMgKHN0YXJ0aW5nIHdpdGggdGhlIG9uZSB1bmRlciAgdGhlICBjdXJzb3IpLAorICAgICAgIGFuZCAgbW92ZSAgdGhlIHJlbWFpbmluZyBsaW5lcyB1cC4gIFRoZSBib3R0b20gPEVNPm48L0VNPiBsaW5lcyBhcmUKKyAgICAgICBjbGVhcmVkLiAgVGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5pbnNlcnRsbjwvU1RST05HPiBhbmQgPFNUUk9ORz53aW5zZXJ0bG48L1NUUk9ORz4gcm91dGluZXMgaW5zZXJ0ICBhICBibGFuayAgbGluZQorICAgICAgIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUgYW5kIHRoZSBib3R0b20gbGluZSBpcyBsb3N0LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgYW4gPFNUUk9ORz5PSzwvU1RST05HPgorICAgICAgIChTVnI0IHNwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlICBvdGhlciAgdGhhbiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKQorICAgICAgIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgWC9PcGVuICBkZWZpbmVzICBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyBpbXBsZW1lbnRhLQorICAgICAgIHRpb24sIGlmICB0aGUgIHdpbmRvdyAgcGFyYW1ldGVyICBpcyAgbnVsbCwgIGFuICBlcnJvciAgaXMKKyAgICAgICByZXR1cm5lZC4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4gIFRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGV5IHJldHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gIG9uCisgICAgICAgZmFpbHVyZSwgYnV0IHNwZWNpZmllcyBubyBlcnJvciBjb25kaXRpb25zLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgYnV0IDxTVFJPTkc+d2luc2RlbGxuPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGRvICBub3QgcmVxdWlyZSBhIGhhcmR3YXJlIGxpbmUgZGVsZXRlIG9yCisgICAgICAgaW5zZXJ0IGZlYXR1cmUgaW4gdGhlIHRlcm1pbmFsLiAgSW4gZmFjdCwgIHRoZXkgIHdpbGwgIG5vdAorICAgICAgIHVzZSAgaGFyZHdhcmUgIGxpbmUgIGRlbGV0ZS9pbnNlcnQgdW5sZXNzIDxTVFJPTkc+aWRsb2soLi4uLDwvU1RST05HPiA8U1RST05HPlRSVUUpPC9TVFJPTkc+CisgICAgICAgaGFzIGJlZW4gc2V0IG9uIHRoZSBjdXJyZW50IHdpbmRvdy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfZXh0ZW5kLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19leHRlbmQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODMwMDNjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfZXh0ZW5kLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk5LW9uCisgICogQElkOiBjdXJzX2V4dGVuZC4zeCx2IDEuMTcgMjAwNi8xMi8yNCAxODowMTo0OCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2V4dGVuZCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZXh0ZW5kIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2V4dGVuZC4zeC5odG1sIj5jdXJzX2V4dGVuZCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZXh0ZW5kLjN4Lmh0bWwiPmN1cnNfZXh0ZW5kKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmN1cnNlc192ZXJzaW9uPC9TVFJPTkc+LCAgPFNUUk9ORz51c2VfZXh0ZW5kZWRfbmFtZXM8L1NUUk9ORz4gLSBtaXNjZWxsYW5lb3VzIGN1cnNlcworICAgICAgIGV4dGVuc2lvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IDxTVFJPTkc+Y3Vyc2VzX3ZlcnNpb24odm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz51c2VfZXh0ZW5kZWRfbmFtZXMoYm9vbDwvU1RST05HPiA8U1RST05HPmVuYWJsZSk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBleHRlbnNpb25zIHRvIHRoZSBjdXJzZXMgbGlicmFyeSB3aGljaAorICAgICAgIGRvIG5vdCBmaXQgZWFzaWx5IGludG8gb3RoZXIgY2F0ZWdvcmllcy4KKworICAgICAgIFVzZSAgPEVNPmN1cnNlczwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnZlcnNpb24oKTwvRU0+IHRvIGdldCB0aGUgdmVyc2lvbiBudW1iZXIsIGluY2x1ZGluZworICAgICAgIHBhdGNoIGxldmVsIG9mIHRoZSBsaWJyYXJ5LCBlLmcuLCA8U1RST05HPjUuMC4xOTk5MTAyMzwvU1RST05HPgorCisgICAgICAgVGhlIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5leHRlbmRlZDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPm5hbWVzKCk8L0VNPiAgZnVuY3Rpb24gIGNvbnRyb2xzICB3aGV0aGVyICB0aGUKKyAgICAgICBjYWxsaW5nICBhcHBsaWNhdGlvbiAgaXMgIGFibGUgdG8gdXNlIHVzZXItZGVmaW5lZCBvciBub24tCisgICAgICAgc3RhbmRhcmQgbmFtZXMgd2hpY2ggbWF5IGJlICBjb21waWxlZCAgaW50byAgdGhlICB0ZXJtaW5mbworICAgICAgIGRlc2NyaXB0aW9uLCBpLmUuLCB2aWEgdGhlIHRlcm1pbmZvIG9yIHRlcm1jYXAgaW50ZXJmYWNlcy4KKyAgICAgICBOb3JtYWxseSB0aGVzZSBuYW1lcyBhcmUgIGF2YWlsYWJsZSAgZm9yICB1c2UsICBzaW5jZSAgdGhlCisgICAgICAgZXNzZW50aWFsICBkZWNpc2lvbiAgaXMgbWFkZSBieSB1c2luZyB0aGUgPFNUUk9ORz4teDwvU1RST05HPiBvcHRpb24gb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4KKyAgICAgICB0byBjb21waWxlIGV4dGVuZGVkIHRlcm1pbmFsIGRlZmluaXRpb25zLiAgSG93ZXZlciB5b3UgY2FuCisgICAgICAgZGlzYWJsZSAgdGhpcyAgZmVhdHVyZSAgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlcgorICAgICAgIGltcGxlbWVudGF0aW9ucyBvZiBjdXJzZXMuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvICBuY3Vyc2VzLiAgIFRoZXkgIHdlcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlICBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4sICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4sICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50LjN4Lmh0bWwiPmN1cnNfcHJpbnQoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPmtleS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleWJvdW5kLjN4Lmh0bWwiPmJvdW5kKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIERpY2tleS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2V4dGVuZC4zeC5odG1sIj5jdXJzX2V4dGVuZCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2dldF93Y2guM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2dldF93Y2guM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE3N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3djaC4zeC5odG1sCkBAIC0wLDAgKzEsMTUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfZ2V0X3djaC4zeCx2IDEuNiAyMDA2LzAyLzI1IDIxOjQ3OjA2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfZ2V0X3djaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZ2V0X3djaCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd2NoLjN4Lmh0bWwiPmN1cnNfZ2V0X3djaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93Y2guM3guaHRtbCI+Y3Vyc19nZXRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldF93Y2g8L1NUUk9ORz4sICA8U1RST05HPndnZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0X3djaDwvU1RST05HPiwgPFNUUk9ORz5tdndnZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPnVuZ2V0X3djaDwvU1RST05HPiAtIGdldAorICAgICAgIChvciBwdXNoIGJhY2spIGEgd2lkZSBjaGFyYWN0ZXIgZnJvbSBjdXJzZXMgdGVybWluYWwgIGtleS0KKyAgICAgICBib2FyZAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldF93Y2god2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndnZXRfd2NoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZnZXRfd2NoKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3Z2V0X3djaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndpbnRfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz51bmdldF93Y2goY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxFTT53Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5nZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPndnZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0X3djaDwvU1RST05HPiwgYW5kIDxTVFJPTkc+bXZ3Z2V0X3djaDwvU1RST05HPiBmdW5jdGlvbnMKKyAgICAgICByZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlICB0ZXJtaW5hbCAgYXNzb2NpYXRlZCAgd2l0aCAgdGhlCisgICAgICAgY3VycmVudCAgb3IgIHNwZWNpZmllZCAgd2luZG93LiAgIEluICBuby1kZWxheSBtb2RlLCBpZiBubworICAgICAgIGlucHV0IGlzIHdhaXRpbmcsIHRoZSB2YWx1ZSA8U1RST05HPkVSUjwvU1RST05HPiAgaXMgIHJldHVybmVkLiAgIEluICBkZWxheQorICAgICAgIG1vZGUsICB0aGUgIHByb2dyYW0gIHdhaXRzICB1bnRpbCAgdGhlICBzeXN0ZW0gcGFzc2VzIHRleHQKKyAgICAgICB0aHJvdWdoIHRvIHRoZSAgcHJvZ3JhbS4gICBEZXBlbmRpbmcgIG9uICB0aGUgIHNldHRpbmcgIG9mCisgICAgICAgPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4sICB0aGlzICBpcyAgYWZ0ZXIgIG9uZSAgY2hhcmFjdGVyIChjYnJlYWsgbW9kZSksIG9yCisgICAgICAgYWZ0ZXIgdGhlIGZpcnN0IG5ld2xpbmUgKG5vY2JyZWFrICBtb2RlKS4gICBJbiAgaGFsZi1kZWxheQorICAgICAgIG1vZGUsICB0aGUgIHByb2dyYW0gd2FpdHMgdW50aWwgdGhlIHVzZXIgdHlwZXMgYSBjaGFyYWN0ZXIKKyAgICAgICBvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQuCisKKyAgICAgICBVbmxlc3MgPFNUUk9ORz5ub2VjaG88L1NUUk9ORz4gaGFzIGJlZW4gc2V0LCB0aGVzZSByb3V0aW5lcyBlY2hvIHRoZSAgY2hhci0KKyAgICAgICBhY3RlciBpbnRvIHRoZSBkZXNpZ25hdGVkIHdpbmRvdy4KKworICAgICAgIElmICB0aGUgd2luZG93IGlzIG5vdCBhIHBhZCBhbmQgaGFzIGJlZW4gbW92ZWQgb3IgbW9kaWZpZWQKKyAgICAgICBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gd2lsbCAgYmUgIGNhbGxlZAorICAgICAgIGJlZm9yZSBhbm90aGVyIGNoYXJhY3RlciBpcyByZWFkLgorCisgICAgICAgSWYgIDxTVFJPTkc+a2V5cGFkPC9TVFJPTkc+ICBpcyAgZW5hYmxlZCwgIHRoZXNlICBmdW5jdGlvbnMgIHJlc3BvbmQgdG8gdGhlCisgICAgICAgcHJlc3Npbmcgb2YgYSBmdW5jdGlvbiBrZXkgYnkgc2V0dGluZyB0aGUgIG9iamVjdCAgcG9pbnRlZAorICAgICAgIHRvICBieSAgPEVNPndjaDwvRU0+ICB0byAgdGhlICBjb3JyZXNwb25kaW5nICA8U1RST05HPktFWV88L1NUUk9ORz4gdmFsdWUgZGVmaW5lZCBpbgorICAgICAgIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiBhbmQgcmV0dXJuaW5nICA8U1RST05HPktFWV9DT0RFX1lFUzwvU1RST05HPi4gICBJZiAgYSAgY2hhcmFjdGVyCisgICAgICAgKHN1Y2ggYXMgZXNjYXBlKSB0aGF0IGNvdWxkIGJlIHRoZSBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbgorICAgICAgIGtleSBpcyByZWNlaXZlZCwgY3Vyc2VzIHNldHMgYSB0aW1lci4gIElmIHRoZSByZW1haW5kZXIgb2YKKyAgICAgICB0aGUgIHNlcXVlbmNlICBkb2VzICBhcnJpdmUgIHdpdGhpbiAgdGhlICBkZXNpZ25hdGVkIHRpbWUsCisgICAgICAgY3Vyc2VzIHBhc3NlcyB0aHJvdWdoICB0aGUgIGNoYXJhY3RlcjsgIG90aGVyd2lzZSwgIGN1cnNlcworICAgICAgIHJldHVybnMgIHRoZSAgZnVuY3Rpb24gIGtleSAgdmFsdWUuICBGb3IgdGhpcyByZWFzb24sIG1hbnkKKyAgICAgICB0ZXJtaW5hbHMgZXhwZXJpZW5jZSBhICBkZWxheSAgYmV0d2VlbiAgdGhlICB0aW1lICBhICB1c2VyCisgICAgICAgcHJlc3NlcyB0aGUgZXNjYXBlIGtleSBhbmQgdGhlIHRpbWUgdGhlIGVzY2FwZSBpcyByZXR1cm5lZAorICAgICAgIHRvIHRoZSBwcm9ncmFtLgorCisgICAgICAgVGhlIDxTVFJPTkc+dW5nZXRfd2NoPC9TVFJPTkc+IGZ1bmN0aW9uIHB1c2hlcyB0aGUgd2lkZSBjaGFyYWN0ZXIgPEVNPndjaDwvRU0+ICBiYWNrCisgICAgICAgb250byB0aGUgaGVhZCBvZiB0aGUgaW5wdXQgcXVldWUsIHNvIHRoZSB3aWRlIGNoYXJhY3RlciBpcworICAgICAgIHJldHVybmVkIGJ5IHRoZSBuZXh0IGNhbGwgdG8gPFNUUk9ORz5nZXRfd2NoPC9TVFJPTkc+LiAgVGhlIHB1c2hiYWNrIG9mIG9uZQorICAgICAgIGNoYXJhY3RlciAgaXMgIGd1YXJhbnRlZWQuICBJZiB0aGUgcHJvZ3JhbSBjYWxscyA8U1RST05HPnVuZ2V0X3djaDwvU1RST05HPgorICAgICAgIHRvbyBtYW55IHRpbWVzIHdpdGhvdXQgYW4gaW50ZXJ2ZW5pbmcgY2FsbCB0byA8U1RST05HPmdldF93Y2g8L1NUUk9ORz4sIHRoZQorICAgICAgIG9wZXJhdGlvbiBtYXkgZmFpbC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGhlYWRlciAgZmlsZSAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+ICBhdXRvbWF0aWNhbGx5ICBpbmNsdWRlcyB0aGUKKyAgICAgICBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtzdGRpby5oJmd0OzwvU1RST05HPi4KKworICAgICAgIEFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGRlZmluZSB0aGUgZXNjYXBlIGtleSBieSBpdHNlbGYgYXMKKyAgICAgICBhIHNpbmdsZS1jaGFyYWN0ZXIgZnVuY3Rpb24uCisKKyAgICAgICBXaGVuICB1c2luZyAgPFNUUk9ORz5nZXRfd2NoPC9TVFJPTkc+LCAgPFNUUk9ORz53Z2V0X3djaDwvU1RST05HPiwgPFNUUk9ORz5tdmdldF93Y2g8L1NUUk9ORz4sIG9yIDxTVFJPTkc+bXZ3Z2V0X3djaDwvU1RST05HPiwKKyAgICAgICBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCB1c2UgPFNUUk9ORz5ub2NicmVhazwvU1RST05HPiBtb2RlIGFuZCA8U1RST05HPmVjaG88L1NUUk9ORz4gbW9kZSBhdAorICAgICAgIHRoZSAgc2FtZSAgdGltZS4gIERlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHR0eSBkcml2ZXIKKyAgICAgICB3aGVuIGVhY2ggY2hhcmFjdGVyIGlzICB0eXBlZCwgIHRoZSAgcHJvZ3JhbSAgbWF5ICBwcm9kdWNlCisgICAgICAgdW5kZXNpcmFibGUgcmVzdWx0cy4KKworICAgICAgIEFsbCBmdW5jdGlvbnMgZXhjZXB0IDxTVFJPTkc+d2dldF93Y2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dW5nZXRfd2NoPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBXaGVuIDxTVFJPTkc+Z2V0X3djaDwvU1RST05HPiwgPFNUUk9ORz53Z2V0X3djaDwvU1RST05HPiwgPFNUUk9ORz5tdmdldF93Y2g8L1NUUk9ORz4sICBhbmQgIDxTVFJPTkc+bXZ3Z2V0X3djaDwvU1RST05HPiAgZnVuYy0KKyAgICAgICB0aW9ucyAgc3VjY2Vzc2Z1bGx5IHJlcG9ydCB0aGUgcHJlc3Npbmcgb2YgYSBmdW5jdGlvbiBrZXksCisgICAgICAgdGhleSByZXR1cm4gPFNUUk9ORz5LRVlfQ09ERV9ZRVM8L1NUUk9ORz4uICBXaGVuIHRoZXkgc3VjY2Vzc2Z1bGx5IHJlcG9ydCBhCisgICAgICAgd2lkZSAgY2hhcmFjdGVyLCAgdGhleSAgcmV0dXJuIDxTVFJPTkc+T0s8L1NUUk9ORz4uICBPdGhlcndpc2UsIHRoZXkgcmV0dXJuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4uCisKKyAgICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgPFNUUk9ORz51bmdldF93Y2g8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk9LPC9TVFJPTkc+LiAgIE90aGVyLQorICAgICAgIHdpc2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDxTVFJPTkc+RVJSPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4sICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdmUuM3guaHRtbCI+Y3Vyc19tb3ZlKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93Y2guM3guaHRtbCI+Y3Vyc19nZXRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3dzdHIuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2dldF93c3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5Y2ViZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2dldF93c3RyLjN4Lmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19nZXRfd3N0ci4zeCx2IDEuNiAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfZ2V0X3dzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2dldF93c3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5nZXRfd3N0cjwvU1RST05HPiwgPFNUUk9ORz5nZXRuX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2dldF93c3RyPC9TVFJPTkc+LCA8U1RST05HPndnZXRuX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRfd3N0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12Z2V0bl93c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2dldF93c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2dldG5fd3N0cjwvU1RST05HPiAtIGdldCBhbiBhcnJheSBvZgorICAgICAgIHdpZGUgY2hhcmFjdGVycyBmcm9tIGEgY3Vyc2VzIHRlcm1pbmFsIGtleWJvYXJkCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0X3dzdHIod2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRuX3dzdHIod2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndnZXRfd3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Z2V0bl93c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZnZXRfd3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmdldG5fd3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2dldF93c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndnZXRuX3dzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZWZmZWN0ICBvZiA8U1RST05HPmdldF93c3RyPC9TVFJPTkc+IGlzIGFzIHRob3VnaCBhIHNlcmllcyBvZiBjYWxscyB0bworICAgICAgIDxTVFJPTkc+Z2V0X3djaDwvU1RST05HPiB3ZXJlIG1hZGUsIHVudGlsIGEgbmV3bGluZSwgb3RoZXIgZW5kLW9mLWxpbmUsICBvcgorICAgICAgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBwcm9jZXNzZWQuICBBbiBlbmQtb2YtZmlsZSBjb25kaS0KKyAgICAgICB0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IDxTVFJPTkc+V0VPRjwvU1RST05HPiwgYXMgZGVmaW5lZCBpbiA8U1RST05HPiZsdDt3Y2hhci5oJmd0OzwvU1RST05HPi4gIFRoZQorICAgICAgIG5ld2xpbmUgIGFuZCBlbmQtb2YtbGluZSBjb25kaXRpb25zIGFyZSByZXByZXNlbnRlZCBieSB0aGUKKyAgICAgICA8U1RST05HPlxuPC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiB2YWx1ZS4gIEluIGFsbCBpbnN0YW5jZXMsIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgICAgIGlzICB0ZXJtaW5hdGVkICBieSBhIG51bGwgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+LiAgVGhlIHJvdXRpbmUgcGxhY2VzIHJlLQorICAgICAgIHN1bHRpbmcgdmFsdWVzIGluIHRoZSBhcmVhIHBvaW50ZWQgdG8gYnkgPEVNPndzdHI8L0VNPi4KKworICAgICAgIFRoZSB1c2VyJ3MgZXJhc2UgYW5kIGtpbGwgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQuICAgSWYKKyAgICAgICBrZXlwYWQgICBtb2RlICAgaXMgICBvbiAgIGZvciAgdGhlICB3aW5kb3csICA8U1RST05HPktFWV9MRUZUPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPktFWV9CQUNLU1BBQ0U8L1NUUk9ORz4gYXJlIGJvdGggY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIHRoZSB1c2VyJ3MKKyAgICAgICBraWxsIGNoYXJhY3Rlci4KKworICAgICAgIENoYXJhY3RlcnMgIGlucHV0IGFyZSBlY2hvZWQgb25seSBpZiA8U1RST05HPmVjaG88L1NUUk9ORz4gaXMgY3VycmVudGx5IG9uLgorICAgICAgIEluIHRoYXQgY2FzZSwgYmFja3NwYWNlIGlzIGVjaG9lZCBhcyBkZWxldGlvbiBvZiB0aGUgIHByZS0KKyAgICAgICB2aW91cyBjaGFyYWN0ZXIgKHR5cGljYWxseSBhIGxlZnQgbW90aW9uKS4KKworICAgICAgIFRoZSAgZWZmZWN0IG9mIDxTVFJPTkc+d2dldF93c3RyPC9TVFJPTkc+IGlzIGFzIHRob3VnaCBhIHNlcmllcyBvZiBjYWxscyB0bworICAgICAgIDxTVFJPTkc+d2dldF93Y2g8L1NUUk9ORz4gd2VyZSBtYWRlLgorCisgICAgICAgVGhlIGVmZmVjdCBvZiA8U1RST05HPm12Z2V0X3dzdHI8L1NUUk9ORz4gaXMgYXMgdGhvdWdoIGEgY2FsbCB0byAgPFNUUk9ORz5tb3ZlPC9TVFJPTkc+ICBhbmQKKyAgICAgICB0aGVuIGEgc2VyaWVzIG9mIGNhbGxzIHRvIDxTVFJPTkc+Z2V0X3djaDwvU1RST05HPiB3ZXJlIG1hZGUuCisKKyAgICAgICBUaGUgZWZmZWN0IG9mIDxTVFJPTkc+bXZ3Z2V0X3dzdHI8L1NUUk9ORz4gaXMgYXMgdGhvdWdoIGEgY2FsbCB0byA8U1RST05HPndtb3ZlPC9TVFJPTkc+IGFuZAorICAgICAgIHRoZW4gYSBzZXJpZXMgb2YgY2FsbHMgdG8gPFNUUk9ORz53Z2V0X3djaDwvU1RST05HPiB3ZXJlIG1hZGUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5nZXRuX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRuX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3Z2V0bl93c3RyPC9TVFJPTkc+LCAgYW5kICA8U1RST05HPndnZXRuX3dzdHI8L1NUUk9ORz4KKyAgICAgICBmdW5jdGlvbnMgIGFyZSAgaWRlbnRpY2FsICB0byAgdGhlICA8U1RST05HPmdldF93c3RyPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmdldF93c3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZ3Z2V0X3dzdHI8L1NUUk9ORz4sIGFuZCA8U1RST05HPndnZXRfd3N0cjwvU1RST05HPiBmdW5jdGlvbnMsIHJlc3BlY3RpdmVseSwgZXhjZXB0CisgICAgICAgdGhhdCAgdGhlIDxTVFJPTkc+Km5fKjwvU1RST05HPiB2ZXJzaW9ucyByZWFkIGF0IG1vc3QgPEVNPm48L0VNPiBjaGFyYWN0ZXJzLCBsZXR0aW5nCisgICAgICAgdGhlIGFwcGxpY2F0aW9uIHByZXZlbnQgb3ZlcmZsb3cgb2YgdGhlIGlucHV0IGJ1ZmZlci4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBVc2luZyA8U1RST05HPmdldF93c3RyPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0X3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3Z2V0X3dzdHI8L1NUUk9ORz4sIG9yICA8U1RST05HPndnZXRfd3N0cjwvU1RST05HPiAgdG8KKyAgICAgICByZWFkICBhICBsaW5lICB0aGF0IG92ZXJmbG93cyB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8U1RST05HPndzdHI8L1NUUk9ORz4KKyAgICAgICBjYXVzZXMgIHVuZGVmaW5lZCAgcmVzdWx0cy4gICAgVGhlICAgdXNlICAgb2YgICA8U1RST05HPmdldG5fd3N0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12Z2V0bl93c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2dldG5fd3N0cjwvU1RST05HPiwgb3IgPFNUUk9ORz53Z2V0bl93c3RyPC9TVFJPTkc+LCByZXNwZWN0aXZlbHksIGlzCisgICAgICAgcmVjb21tZW5kZWQuCisKKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgY2Fubm90IHJldHVybiA8U1RST05HPktFWV88L1NUUk9ORz4gdmFsdWVzIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgICBubyAgd2F5ICB0byAgZGlzdGluZ3Vpc2ggYSA8U1RST05HPktFWV88L1NUUk9ORz4gdmFsdWUgZnJvbSBhIHZhbGlkIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPgorICAgICAgIHZhbHVlLgorCisgICAgICAgQWxsIG9mIHRoZXNlIHJvdXRpbmVzIGV4Y2VwdCA8U1RST05HPndnZXRuX3dzdHI8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIDxTVFJPTkc+T0s8L1NUUk9ORz4gdXBvbiAgc3VjY2Vzc2Z1bCAgY29tcGxlLQorICAgICAgIHRpb24uICBPdGhlcndpc2UsIHRoZXkgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+LgorCisgICAgICAgRnVuY3Rpb25zICB1c2luZyAgYSB3aW5kb3cgcGFyYW1ldGVyIHJldHVybiBhbiBlcnJvciBpZiBpdAorICAgICAgIGlzIG51bGwuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz53Z2V0bl93c3RyPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiAgdGhlICBhc3NvY2lhdGVkICBjYWxsICB0bworICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+d2dldF93Y2g8L1NUUk9ORz4gZmFpbGVkLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiBUaGUgU2luZ2xlIFVuaXggU3BlY2lmaS0KKyAgICAgICBjYXRpb24sIFZlcnNpb24gMi4gIE5vIGVycm9yIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQuICBUaGlzCisgICAgICAgaW1wbGVtZW50YXRpb24gIHJldHVybnMgRVJSIGlmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLAorICAgICAgIG9yIGlmIHRoZSBsb3dlci1sZXZlbCA8U1RST05HPndnZXRfd2NoPC9TVFJPTkc+IGNhbGwgcmV0dXJucyAgYW4gIEVSUi4gICBJbgorICAgICAgIHRoZSAgbGF0dGVyICBjYXNlLCAgYW4gIEVSUiAgcmV0dXJuICB3aXRob3V0IG90aGVyIGRhdGEgaXMKKyAgICAgICB0cmVhdGVkIGFzIGFuIGVuZC1vZi1maWxlIGNvbmRpdGlvbiwgYW5kIHRoZSByZXR1cm5lZCAgYXItCisgICAgICAgcmF5IGNvbnRhaW5zIGEgPFNUUk9ORz5XRU9GPC9TVFJPTkc+IGZvbGxvd2VkIGJ5IGEgbnVsbCA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4uCisKKyAgICAgICBYL09wZW4gIGN1cnNlcyAgZG9jdW1lbnRzIHRoZXNlIGZ1bmN0aW9ucyB0byBwYXNzIGFuIGFycmF5CisgICAgICAgb2YgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+LCBidXQgYWxsIG9mIHRoZSB2ZW5kb3JzICBpbXBsZW1lbnQgIHRoaXMgIHVzaW5nCisgICAgICAgPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgRnVuY3Rpb25zOiAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19nZXRjY2hhci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0Y2NoYXIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTVjZTFkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0Y2NoYXIuM3guaHRtbApAQCAtMCwwICsxLDE1NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2dldGNjaGFyLjN4LHYgMS4xMSAyMDA4LzA1LzE3IDE5OjM3OjA1IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfZ2V0Y2NoYXIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2dldGNjaGFyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNjaGFyLjN4Lmh0bWwiPmN1cnNfZ2V0Y2NoYXIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2NoYXIuM3guaHRtbCI+Y3Vyc19nZXRjY2hhcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5nZXRjY2hhcjwvU1RST05HPiwgIDxTVFJPTkc+c2V0Y2NoYXI8L1NUUk9ORz4gLSBHZXQgYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgYW5kIHJlbi0KKyAgICAgICBkaXRpb24gZnJvbSBhIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBvciBzZXQgYSA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gZnJvbSBhIHdpZGUtY2hhcmFjLQorICAgICAgIHRlciBzdHJpbmcKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRjY2hhcig8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y3ZhbDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+YXR0cnM8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+Y29sb3I8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5wYWlyPC9FTT48U1RST05HPiw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+b3B0czwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0Y2NoYXIoPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjdmFsPC9FTT48U1RST05HPiw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8RU0+YXR0cnM8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8RU0+Y29sb3I8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5wYWlyPC9FTT48U1RST05HPiw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+b3B0czwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+Z2V0Y2NoYXI8L1NUUk9ORz4gIGZ1bmN0aW9uICBnZXRzICBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBhbmQKKyAgICAgICByZW5kaXRpb24gZnJvbSBhIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBhcmd1bWVudC4gIFdoZW4gPEVNPndjaDwvRU0+IGlzIG5vdCBhIG51bGwKKyAgICAgICBwb2ludGVyLCB0aGUgPFNUUk9ORz5nZXRjY2hhcjwvU1RST05HPiBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAtICAgIEV4dHJhY3RzIGluZm9ybWF0aW9uIGZyb20gYSA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gdmFsdWUgPEVNPndjdmFsPC9FTT4KKworICAgICAgIC0gICAgU3RvcmVzICB0aGUgIGNoYXJhY3RlciAgYXR0cmlidXRlcyAgaW4gIHRoZSAgbG9jYXRpb24KKyAgICAgICAgICAgIHBvaW50ZWQgdG8gYnkgPEVNPmF0dHJzPC9FTT4KKworICAgICAgIC0gICAgU3RvcmVzIHRoZSBjb2xvci1wYWlyIGluIHRoZSBsb2NhdGlvbiBwb2ludGVkICB0byAgYnkKKyAgICAgICAgICAgIDxFTT5jb2xvcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPgorCisgICAgICAgLSAgICBTdG9yZXMgIHRoZSAgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nLCBjaGFyYWN0ZXJzIHJlZmVyLQorICAgICAgICAgICAgZW5jZWQgYnkgPEVNPndjdmFsPC9FTT4sIGludG8gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgPEVNPndjaDwvRU0+LgorCisgICAgICAgV2hlbiA8RU0+d2NoPC9FTT4gaXMgYSBudWxsIHBvaW50ZXIsIHRoZSA8U1RST05HPmdldGNjaGFyPC9TVFJPTkc+IGZ1bmN0aW9uIGRvZXMgdGhlCisgICAgICAgZm9sbG93aW5nOgorCisgICAgICAgLSAgICBPYnRhaW5zICB0aGUgIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgcG9pbnRlZCB0byBieQorICAgICAgICAgICAgPEVNPndjdmFsPC9FTT4KKworICAgICAgIC0gICAgRG9lcyBub3QgY2hhbmdlICB0aGUgIGRhdGEgIHJlZmVyZW5jZWQgIGJ5ICA8RU0+YXR0cnM8L0VNPiAgb3IKKyAgICAgICAgICAgIDxFTT5jb2xvcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPgorCisgICAgICAgVGhlICA8U1RST05HPnNldGNjaGFyPC9TVFJPTkc+IGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvCisgICAgICAgYnkgPEVNPndjdmFsPC9FTT4gYnkgdXNpbmc6CisKKyAgICAgICAtICAgIFRoZSBjaGFyYWN0ZXIgYXR0cmlidXRlcyBpbiA8RU0+YXR0cnM8L0VNPgorCisgICAgICAgLSAgICBUaGUgY29sb3IgcGFpciBpbiA8RU0+Y29sb3I8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5wYWlyPC9FTT4KKworICAgICAgIC0gICAgVGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkICB0byAgYnkgIDxFTT53Y2g8L0VNPi4gICBUaGUKKyAgICAgICAgICAgIHN0cmluZyAgbXVzdCBiZSBMJ1wwJyB0ZXJtaW5hdGVkLCBjb250YWluIGF0IG1vc3Qgb25lCisgICAgICAgICAgICBzcGFjaW5nIGNoYXJhY3Rlciwgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3QuCisKKyAgICAgICAgICAgIFVwIHRvIDxTVFJPTkc+Q0NIQVJXX01BWDwvU1RST05HPi0xIG5vbnNwYWNpbmcgY2hhcmFjdGVycyBtYXkgIGZvbGxvdy4KKyAgICAgICAgICAgIEFkZGl0aW9uYWwgbm9uc3BhY2luZyBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkLgorCisgICAgICAgICAgICBUaGUgIHN0cmluZyAgbWF5ICBjb250YWluICBhIHNpbmdsZSBjb250cm9sIGNoYXJhY3RlcgorICAgICAgICAgICAgaW5zdGVhZC4gIEluIHRoYXQgY2FzZSwgbm8gbm9uc3BhY2luZyBjaGFyYWN0ZXJzICBhcmUKKyAgICAgICAgICAgIGFsbG93ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlICA8RU0+b3B0czwvRU0+IGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAgQ3VycmVudGx5LAorICAgICAgIGFuIGFwcGxpY2F0aW9uIG11c3QgcHJvdmlkZSBhIG51bGwgcG9pbnRlciBhcyA8RU0+b3B0czwvRU0+LgorCisgICAgICAgVGhlIDxFTT53Y3ZhbDwvRU0+IGFyZ3VtZW50IG1heSBiZSBhIHZhbHVlIGdlbmVyYXRlZCBieSBhICBjYWxsICB0bworICAgICAgIDxTVFJPTkc+c2V0Y2NoYXI8L1NUUk9ORz4gIG9yIGJ5IGEgZnVuY3Rpb24gdGhhdCBoYXMgYSA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gb3V0cHV0IGFyZ3UtCisgICAgICAgbWVudC4gIElmIDxFTT53Y3ZhbDwvRU0+IGlzIGNvbnN0cnVjdGVkIGJ5ICBhbnkgIG90aGVyICBtZWFucywgIHRoZQorICAgICAgIGVmZmVjdCBpcyB1bnNwZWNpZmllZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFdoZW4gPEVNPndjaDwvRU0+IGlzIGEgbnVsbCBwb2ludGVyLCA8U1RST05HPmdldGNjaGFyPC9TVFJPTkc+IHJldHVybnMgdGhlIG51bWJlciBvZgorICAgICAgIHdpZGUgY2hhcmFjdGVycyByZWZlcmVuY2VkIGJ5IDxFTT53Y3ZhbDwvRU0+LgorCisgICAgICAgV2hlbiA8RU0+d2NoPC9FTT4gaXMgbm90IGEgbnVsbCBwb2ludGVyLCA8U1RST05HPmdldGNjaGFyPC9TVFJPTkc+IHJldHVybnMgIDxTVFJPTkc+T0s8L1NUUk9ORz4gIHVwb24KKyAgICAgICBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGFuZCA8U1RST05HPkVSUjwvU1RST05HPiBvdGhlcndpc2UuCisKKyAgICAgICBVcG9uICBzdWNjZXNzZnVsICBjb21wbGV0aW9uLCA8U1RST05HPnNldGNjaGFyPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5PSzwvU1RST05HPi4gIE90aGVyLQorICAgICAgIHdpc2UsIGl0IHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgRnVuY3Rpb25zOiAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ3Y3dpZHRoLjMuaHRtbCI+d2N3aWR0aCgzKTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2NoYXIuM3guaHRtbCI+Y3Vyc19nZXRjY2hhcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRjaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGY2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRjaC4zeC5odG1sCkBAIC0wLDAgKzEsMzM4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2dldGNoLjN4LHYgMS4zMCAyMDA2LzEyLzAyIDE3OjAyOjUzIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfZ2V0Y2ggM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2dldGNoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5nZXRjaDwvU1RST05HPiwgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRjaDwvU1RST05HPiwgPFNUUk9ORz5tdndnZXRjaDwvU1RST05HPiwgPFNUUk9ORz51bmdldGNoPC9TVFJPTkc+LCA8U1RST05HPmhhc19rZXk8L1NUUk9ORz4gLSBnZXQKKyAgICAgICAob3IgcHVzaCBiYWNrKSBjaGFyYWN0ZXJzIGZyb20gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gdGVybWluYWwga2V5Ym9hcmQKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRjaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndnZXRjaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12Z2V0Y2goaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2dldGNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVuZ2V0Y2goaW50PC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aGFzX2tleShpbnQ8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4sIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0Y2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bXZ3Z2V0Y2g8L1NUUk9ORz4sIHJvdXRpbmVzICByZWFkICBhCisgICAgICAgY2hhcmFjdGVyICBmcm9tIHRoZSB3aW5kb3cuICBJbiBuby1kZWxheSBtb2RlLCBpZiBubyBpbnB1dAorICAgICAgIGlzIHdhaXRpbmcsIHRoZSB2YWx1ZSA8U1RST05HPkVSUjwvU1RST05HPiBpcyByZXR1cm5lZC4gIEluIGRlbGF5IG1vZGUsIHRoZQorICAgICAgIHByb2dyYW0gIHdhaXRzIHVudGlsIHRoZSBzeXN0ZW0gcGFzc2VzIHRleHQgdGhyb3VnaCB0byB0aGUKKyAgICAgICBwcm9ncmFtLiAgRGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5nIG9mIDxTVFJPTkc+Y2JyZWFrPC9TVFJPTkc+LCB0aGlzIGlzICBhZi0KKyAgICAgICB0ZXIgIG9uZSAgY2hhcmFjdGVyIChjYnJlYWsgbW9kZSksIG9yIGFmdGVyIHRoZSBmaXJzdCBuZXctCisgICAgICAgbGluZSAobm9jYnJlYWsgbW9kZSkuICBJbiAgaGFsZi1kZWxheSAgbW9kZSwgIHRoZSAgcHJvZ3JhbQorICAgICAgIHdhaXRzICB1bnRpbCBhIGNoYXJhY3RlciBpcyB0eXBlZCBvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQKKyAgICAgICBoYXMgYmVlbiByZWFjaGVkLgorCisgICAgICAgVW5sZXNzIDxTVFJPTkc+bm9lY2hvPC9TVFJPTkc+IGhhcyBiZWVuIHNldCwgdGhlbiB0aGUgY2hhcmFjdGVyICB3aWxsICBhbHNvCisgICAgICAgYmUgZWNob2VkIGludG8gdGhlIGRlc2lnbmF0ZWQgd2luZG93IGFjY29yZGluZyB0byB0aGUgZm9sLQorICAgICAgIGxvd2luZyBydWxlczogSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgY3VycmVudCBlcmFzZSAgY2hhci0KKyAgICAgICBhY3RlciwgIGxlZnQgIGFycm93LCBvciBiYWNrc3BhY2UsIHRoZSBjdXJzb3IgaXMgbW92ZWQgb25lCisgICAgICAgc3BhY2UgdG8gdGhlIGxlZnQgYW5kIHRoYXQgc2NyZWVuIHBvc2l0aW9uIGlzIGVyYXNlZCBhcyBpZgorICAgICAgIDxTVFJPTkc+ZGVsY2g8L1NUUk9ORz4gaGFkIGJlZW4gY2FsbGVkLiAgSWYgdGhlIGNoYXJhY3RlciB2YWx1ZSBpcyBhbnkgb3RoLQorICAgICAgIGVyIDxTVFJPTkc+S0VZXzwvU1RST05HPiBkZWZpbmUsIHRoZSB1c2VyIGlzICBhbGVydGVkICB3aXRoICBhICA8U1RST05HPmJlZXA8L1NUUk9ORz4gIGNhbGwuCisgICAgICAgT3RoZXJ3aXNlIHRoZSBjaGFyYWN0ZXIgaXMgc2ltcGx5IG91dHB1dCB0byB0aGUgc2NyZWVuLgorCisgICAgICAgSWYgdGhlIHdpbmRvdyBpcyBub3QgYSBwYWQsIGFuZCBpdCBoYXMgYmVlbiBtb3ZlZCBvciBtb2RpLQorICAgICAgIGZpZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiwgIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gIHdpbGwgIGJlCisgICAgICAgY2FsbGVkIGJlZm9yZSBhbm90aGVyIGNoYXJhY3RlciBpcyByZWFkLgorCisgICAgICAgSWYgIDxTVFJPTkc+a2V5cGFkPC9TVFJPTkc+IGlzIDxTVFJPTkc+VFJVRTwvU1RST05HPiwgYW5kIGEgZnVuY3Rpb24ga2V5IGlzIHByZXNzZWQsIHRoZSB0by0KKyAgICAgICBrZW4gZm9yIHRoYXQgZnVuY3Rpb24ga2V5IGlzIHJldHVybmVkIGluc3RlYWQgb2YgIHRoZSAgcmF3CisgICAgICAgY2hhcmFjdGVycy4gICBQb3NzaWJsZSBmdW5jdGlvbiBrZXlzIGFyZSBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O2N1cnMtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5lcy5oJmd0OzwvU1RST05HPiBhcyBtYWNyb3Mgd2l0aCB2YWx1ZXMgb3V0c2lkZSAgdGhlICByYW5nZSAgb2YgIDgtYml0CisgICAgICAgY2hhcmFjdGVycyAgd2hvc2UgIG5hbWVzIGJlZ2luIHdpdGggPFNUUk9ORz5LRVlfPC9TVFJPTkc+LiBUaHVzLCBhIHZhcmlhYmxlCisgICAgICAgaW50ZW5kZWQgdG8gaG9sZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gIGtleSAgbXVzdAorICAgICAgIGJlIG9mIHNob3J0IHNpemUgb3IgbGFyZ2VyLgorCisgICAgICAgV2hlbiBhIGNoYXJhY3RlciB0aGF0IGNvdWxkIGJlIHRoZSBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbgorICAgICAgIGtleSBpcyByZWNlaXZlZCAod2hpY2gsIG9uIG1vZGVybiB0ZXJtaW5hbHMsIG1lYW5zIGFuICBlcy0KKyAgICAgICBjYXBlIGNoYXJhY3RlciksIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHNldHMgYSB0aW1lci4gIElmIHRoZSByZW1haW5kZXIgb2YKKyAgICAgICB0aGUgc2VxdWVuY2UgZG9lcyBub3QgY29tZSBpbiB3aXRoaW4gdGhlIGRlc2lnbmF0ZWQgIHRpbWUsCisgICAgICAgdGhlICBjaGFyYWN0ZXIgIGlzIHBhc3NlZCB0aHJvdWdoOyBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbgorICAgICAgIGtleSB2YWx1ZSBpcyByZXR1cm5lZC4gIEZvciB0aGlzICByZWFzb24sICBtYW55ICB0ZXJtaW5hbHMKKyAgICAgICBleHBlcmllbmNlIGEgZGVsYXkgYmV0d2VlbiB0aGUgdGltZSBhIHVzZXIgcHJlc3NlcyB0aGUgZXMtCisgICAgICAgY2FwZSBrZXkgYW5kIHRoZSBlc2NhcGUgaXMgcmV0dXJuZWQgdG8gdGhlIHByb2dyYW0uCisKKyAgICAgICBUaGUgPFNUUk9ORz51bmdldGNoPC9TVFJPTkc+IHJvdXRpbmUgcGxhY2VzIDxFTT5jaDwvRU0+IGJhY2sgb250byB0aGUgaW5wdXQgcXVldWUgdG8KKyAgICAgICBiZSByZXR1cm5lZCBieSB0aGUgbmV4dCBjYWxsIHRvIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+LiAgVGhlcmUgaXMganVzdCBvbmUKKyAgICAgICBpbnB1dCBxdWV1ZSBmb3IgYWxsIHdpbmRvd3MuCisKKworICAgPFNUUk9ORz5GdW5jdGlvbjwvU1RST05HPiA8U1RST05HPktleXM8L1NUUk9ORz4KKyAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGtleXMsIGRlZmluZWQgaW4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LCAgbWlnaHQKKyAgICAgICBiZSAgcmV0dXJuZWQgIGJ5ICA8U1RST05HPmdldGNoPC9TVFJPTkc+ICBpZiA8U1RST05HPmtleXBhZDwvU1RST05HPiBoYXMgYmVlbiBlbmFibGVkLiAgTm90ZQorICAgICAgIHRoYXQgbm90IGFsbCBvZiB0aGVzZSBhcmUgIG5lY2Vzc2FyaWx5ICBzdXBwb3J0ZWQgIG9uICBhbnkKKyAgICAgICBwYXJ0aWN1bGFyIHRlcm1pbmFsLgorCisKKyAgICAgICAgICAgIDxFTT5OYW1lPC9FTT4gICAgICAgICAgICA8RU0+S2V5PC9FTT4gPEVNPm5hbWU8L0VNPgorICAgICAgICAgICAgS0VZX0JSRUFLICAgICAgIEJyZWFrIGtleQorICAgICAgICAgICAgS0VZX0RPV04gICAgICAgIFRoZSBmb3VyIGFycm93IGtleXMgLi4uCisgICAgICAgICAgICBLRVlfVVAKKyAgICAgICAgICAgIEtFWV9MRUZUCisgICAgICAgICAgICBLRVlfUklHSFQKKyAgICAgICAgICAgIEtFWV9IT01FICAgICAgICBIb21lIGtleSAodXB3YXJkK2xlZnQgYXJyb3cpCisgICAgICAgICAgICBLRVlfQkFDS1NQQUNFICAgQmFja3NwYWNlCisgICAgICAgICAgICBLRVlfRjAgICAgICAgICAgRnVuY3Rpb24ga2V5czsgc3BhY2UgZm9yIDY0IGtleXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXNlcnZlZC4KKyAgICAgICAgICAgIEtFWV9GKDxFTT5uPC9FTT4pICAgICAgICBGb3IgMCAmbHQ7PSA8RU0+bjwvRU0+ICZsdDs9IDYzCisgICAgICAgICAgICBLRVlfREwgICAgICAgICAgRGVsZXRlIGxpbmUKKyAgICAgICAgICAgIEtFWV9JTCAgICAgICAgICBJbnNlcnQgbGluZQorICAgICAgICAgICAgS0VZX0RDICAgICAgICAgIERlbGV0ZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIEtFWV9JQyAgICAgICAgICBJbnNlcnQgY2hhciBvciBlbnRlciBpbnNlcnQgbW9kZQorICAgICAgICAgICAgS0VZX0VJQyAgICAgICAgIEV4aXQgaW5zZXJ0IGNoYXIgbW9kZQorICAgICAgICAgICAgS0VZX0NMRUFSICAgICAgIENsZWFyIHNjcmVlbgorICAgICAgICAgICAgS0VZX0VPUyAgICAgICAgIENsZWFyIHRvIGVuZCBvZiBzY3JlZW4KKyAgICAgICAgICAgIEtFWV9FT0wgICAgICAgICBDbGVhciB0byBlbmQgb2YgbGluZQorICAgICAgICAgICAgS0VZX1NGICAgICAgICAgIFNjcm9sbCAxIGxpbmUgZm9yd2FyZAorICAgICAgICAgICAgS0VZX1NSICAgICAgICAgIFNjcm9sbCAxIGxpbmUgYmFja3dhcmQgKHJldmVyc2UpCisgICAgICAgICAgICBLRVlfTlBBR0UgICAgICAgTmV4dCBwYWdlCisgICAgICAgICAgICBLRVlfUFBBR0UgICAgICAgUHJldmlvdXMgcGFnZQorICAgICAgICAgICAgS0VZX1NUQUIgICAgICAgIFNldCB0YWIKKyAgICAgICAgICAgIEtFWV9DVEFCICAgICAgICBDbGVhciB0YWIKKyAgICAgICAgICAgIEtFWV9DQVRBQiAgICAgICBDbGVhciBhbGwgdGFicworICAgICAgICAgICAgS0VZX0VOVEVSICAgICAgIEVudGVyIG9yIHNlbmQKKyAgICAgICAgICAgIEtFWV9TUkVTRVQgICAgICBTb2Z0IChwYXJ0aWFsKSByZXNldAorICAgICAgICAgICAgS0VZX1JFU0VUICAgICAgIFJlc2V0IG9yIGhhcmQgcmVzZXQKKyAgICAgICAgICAgIEtFWV9QUklOVCAgICAgICBQcmludCBvciBjb3B5CisgICAgICAgICAgICBLRVlfTEwgICAgICAgICAgSG9tZSBkb3duIG9yIGJvdHRvbSAobG93ZXIgbGVmdCkKKyAgICAgICAgICAgIEtFWV9BMSAgICAgICAgICBVcHBlciBsZWZ0IG9mIGtleXBhZAorICAgICAgICAgICAgS0VZX0EzICAgICAgICAgIFVwcGVyIHJpZ2h0IG9mIGtleXBhZAorICAgICAgICAgICAgS0VZX0IyICAgICAgICAgIENlbnRlciBvZiBrZXlwYWQKKyAgICAgICAgICAgIEtFWV9DMSAgICAgICAgICBMb3dlciBsZWZ0IG9mIGtleXBhZAorICAgICAgICAgICAgS0VZX0MzICAgICAgICAgIExvd2VyIHJpZ2h0IG9mIGtleXBhZAorICAgICAgICAgICAgS0VZX0JUQUIgICAgICAgIEJhY2sgdGFiIGtleQorICAgICAgICAgICAgS0VZX0JFRyAgICAgICAgIEJlZyhpbm5pbmcpIGtleQorICAgICAgICAgICAgS0VZX0NBTkNFTCAgICAgIENhbmNlbCBrZXkKKyAgICAgICAgICAgIEtFWV9DTE9TRSAgICAgICBDbG9zZSBrZXkKKyAgICAgICAgICAgIEtFWV9DT01NQU5EICAgICBDbWQgKGNvbW1hbmQpIGtleQorICAgICAgICAgICAgS0VZX0NPUFkgICAgICAgIENvcHkga2V5CisgICAgICAgICAgICBLRVlfQ1JFQVRFICAgICAgQ3JlYXRlIGtleQorICAgICAgICAgICAgS0VZX0VORCAgICAgICAgIEVuZCBrZXkKKyAgICAgICAgICAgIEtFWV9FWElUICAgICAgICBFeGl0IGtleQorICAgICAgICAgICAgS0VZX0ZJTkQgICAgICAgIEZpbmQga2V5CisgICAgICAgICAgICBLRVlfSEVMUCAgICAgICAgSGVscCBrZXkKKyAgICAgICAgICAgIEtFWV9NQVJLICAgICAgICBNYXJrIGtleQorICAgICAgICAgICAgS0VZX01FU1NBR0UgICAgIE1lc3NhZ2Uga2V5CisgICAgICAgICAgICBLRVlfTU9VU0UgICAgICAgTW91c2UgZXZlbnQgcmVhZAorICAgICAgICAgICAgS0VZX01PVkUgICAgICAgIE1vdmUga2V5CisgICAgICAgICAgICBLRVlfTkVYVCAgICAgICAgTmV4dCBvYmplY3Qga2V5CisgICAgICAgICAgICBLRVlfT1BFTiAgICAgICAgT3BlbiBrZXkKKyAgICAgICAgICAgIEtFWV9PUFRJT05TICAgICBPcHRpb25zIGtleQorICAgICAgICAgICAgS0VZX1BSRVZJT1VTICAgIFByZXZpb3VzIG9iamVjdCBrZXkKKyAgICAgICAgICAgIEtFWV9SRURPICAgICAgICBSZWRvIGtleQorICAgICAgICAgICAgS0VZX1JFRkVSRU5DRSAgIFJlZihlcmVuY2UpIGtleQorICAgICAgICAgICAgS0VZX1JFRlJFU0ggICAgIFJlZnJlc2gga2V5CisgICAgICAgICAgICBLRVlfUkVQTEFDRSAgICAgUmVwbGFjZSBrZXkKKyAgICAgICAgICAgIEtFWV9SRVNJWkUgICAgICBTY3JlZW4gcmVzaXplZAorICAgICAgICAgICAgS0VZX1JFU1RBUlQgICAgIFJlc3RhcnQga2V5CisgICAgICAgICAgICBLRVlfUkVTVU1FICAgICAgUmVzdW1lIGtleQorCisgICAgICAgICAgICBLRVlfU0FWRSAgICAgICAgU2F2ZSBrZXkKKyAgICAgICAgICAgIEtFWV9TQkVHICAgICAgICBTaGlmdGVkIGJlZ2lubmluZyBrZXkKKyAgICAgICAgICAgIEtFWV9TQ0FOQ0VMICAgICBTaGlmdGVkIGNhbmNlbCBrZXkKKyAgICAgICAgICAgIEtFWV9TQ09NTUFORCAgICBTaGlmdGVkIGNvbW1hbmQga2V5CisgICAgICAgICAgICBLRVlfU0NPUFkgICAgICAgU2hpZnRlZCBjb3B5IGtleQorICAgICAgICAgICAgS0VZX1NDUkVBVEUgICAgIFNoaWZ0ZWQgY3JlYXRlIGtleQorICAgICAgICAgICAgS0VZX1NEQyAgICAgICAgIFNoaWZ0ZWQgZGVsZXRlIGNoYXIga2V5CisgICAgICAgICAgICBLRVlfU0RMICAgICAgICAgU2hpZnRlZCBkZWxldGUgbGluZSBrZXkKKyAgICAgICAgICAgIEtFWV9TRUxFQ1QgICAgICBTZWxlY3Qga2V5CisgICAgICAgICAgICBLRVlfU0VORCAgICAgICAgU2hpZnRlZCBlbmQga2V5CisgICAgICAgICAgICBLRVlfU0VPTCAgICAgICAgU2hpZnRlZCBjbGVhciBsaW5lIGtleQorICAgICAgICAgICAgS0VZX1NFWElUICAgICAgIFNoaWZ0ZWQgZXhpdCBrZXkKKyAgICAgICAgICAgIEtFWV9TRklORCAgICAgICBTaGlmdGVkIGZpbmQga2V5CisgICAgICAgICAgICBLRVlfU0hFTFAgICAgICAgU2hpZnRlZCBoZWxwIGtleQorICAgICAgICAgICAgS0VZX1NIT01FICAgICAgIFNoaWZ0ZWQgaG9tZSBrZXkKKyAgICAgICAgICAgIEtFWV9TSUMgICAgICAgICBTaGlmdGVkIGlucHV0IGtleQorICAgICAgICAgICAgS0VZX1NMRUZUICAgICAgIFNoaWZ0ZWQgbGVmdCBhcnJvdyBrZXkKKyAgICAgICAgICAgIEtFWV9TTUVTU0FHRSAgICBTaGlmdGVkIG1lc3NhZ2Uga2V5CisgICAgICAgICAgICBLRVlfU01PVkUgICAgICAgU2hpZnRlZCBtb3ZlIGtleQorICAgICAgICAgICAgS0VZX1NORVhUICAgICAgIFNoaWZ0ZWQgbmV4dCBrZXkKKyAgICAgICAgICAgIEtFWV9TT1BUSU9OUyAgICBTaGlmdGVkIG9wdGlvbnMga2V5CisgICAgICAgICAgICBLRVlfU1BSRVZJT1VTICAgU2hpZnRlZCBwcmV2IGtleQorICAgICAgICAgICAgS0VZX1NQUklOVCAgICAgIFNoaWZ0ZWQgcHJpbnQga2V5CisgICAgICAgICAgICBLRVlfU1JFRE8gICAgICAgU2hpZnRlZCByZWRvIGtleQorICAgICAgICAgICAgS0VZX1NSRVBMQUNFICAgIFNoaWZ0ZWQgcmVwbGFjZSBrZXkKKyAgICAgICAgICAgIEtFWV9TUklHSFQgICAgICBTaGlmdGVkIHJpZ2h0IGFycm93CisgICAgICAgICAgICBLRVlfU1JTVU1FICAgICAgU2hpZnRlZCByZXN1bWUga2V5CisgICAgICAgICAgICBLRVlfU1NBVkUgICAgICAgU2hpZnRlZCBzYXZlIGtleQorICAgICAgICAgICAgS0VZX1NTVVNQRU5EICAgIFNoaWZ0ZWQgc3VzcGVuZCBrZXkKKyAgICAgICAgICAgIEtFWV9TVU5ETyAgICAgICBTaGlmdGVkIHVuZG8ga2V5CisgICAgICAgICAgICBLRVlfU1VTUEVORCAgICAgU3VzcGVuZCBrZXkKKyAgICAgICAgICAgIEtFWV9VTkRPICAgICAgICBVbmRvIGtleQorCisgICAgICAgS2V5cGFkIGlzIGFycmFuZ2VkIGxpa2UgdGhpczoKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwgPFNUUk9ORz5BMTwvU1RST05HPiAgfCAgPFNUUk9ORz51cDwvU1RST05HPiAgfCAgPFNUUk9ORz5BMzwvU1RST05HPiAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfDxTVFJPTkc+bGVmdDwvU1RST05HPiB8ICA8U1RST05HPkIyPC9TVFJPTkc+ICB8IDxTVFJPTkc+cmlnaHQ8L1NUUk9ORz4gfAorICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IDxTVFJPTkc+QzE8L1NUUk9ORz4gIHwgPFNUUk9ORz5kb3duPC9TVFJPTkc+IHwgIDxTVFJPTkc+QzM8L1NUUk9ORz4gICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tKworICAgICAgIFRoZSA8U1RST05HPmhhc19rZXk8L1NUUk9ORz4gcm91dGluZSB0YWtlcyBhIGtleSB2YWx1ZSBmcm9tIHRoZSBhYm92ZSBsaXN0LAorICAgICAgIGFuZCByZXR1cm5zIFRSVUUgb3IgRkFMU0UgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGN1cnJlbnQKKyAgICAgICB0ZXJtaW5hbCB0eXBlIHJlY29nbml6ZXMgYSBrZXkgd2l0aCB0aGF0IHZhbHVlLiAgTm90ZSB0aGF0CisgICAgICAgYSAgZmV3ICB2YWx1ZXMgIGRvICBub3QgIGNvcnJlc3BvbmQgIHRvICBhIHJlYWwga2V5LCBlLmcuLAorICAgICAgIDxTVFJPTkc+S0VZX1JFU0laRTwvU1RST05HPiBhbmQgPFNUUk9ORz5LRVlfTU9VU0U8L1NUUk9ORz4uICBTZWUgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPiBmb3IgbW9yZSBkZS0KKyAgICAgICB0YWlscyAgYWJvdXQgIDxTVFJPTkc+S0VZX1JFU0laRTwvU1RST05HPiwgYW5kIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4gZm9yIGEgZGlzY3VzLQorICAgICAgIHNpb24gb2YgPFNUUk9ORz5LRVlfTU9VU0U8L1NUUk9ORz4uCisKKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uICBmYWlsdXJlICBhbmQgIGFuCisgICAgICAgaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+ICg8U1RST05HPk9LPC9TVFJPTkc+IGluIHRoZSBjYXNlIG9mIHVuZ2V0Y2goKSkKKyAgICAgICB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgICAgICAgICA8U1RST05HPnVuZ2V0Y2g8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgIHJvb20gIGluCisgICAgICAgICAgICAgICAgICAgdGhlIEZJRk8uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiAgZXJyb3IgIGlmICB0aGUgIHdpbmRvdyBwb2ludGVyIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbCwgb3IgaWYgaXRzIHRpbWVvdXQgZXhwaXJlcyB3aXRob3V0IGhhdmluZworICAgICAgICAgICAgICAgICAgIGFueSBkYXRhLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFVzZSBvZiB0aGUgZXNjYXBlIGtleSBieSBhIHByb2dyYW1tZXIgZm9yIGEgc2luZ2xlIGNoYXJhYy0KKyAgICAgICB0ZXIgZnVuY3Rpb24gaXMgZGlzY291cmFnZWQsIGFzIGl0IHdpbGwgY2F1c2UgYSAgZGVsYXkgIG9mCisgICAgICAgdXAgdG8gb25lIHNlY29uZCB3aGlsZSB0aGUga2V5cGFkIGNvZGUgbG9va3MgZm9yIGEgZm9sbG93LQorICAgICAgIGluZyBmdW5jdGlvbi1rZXkgc2VxdWVuY2UuCisKKyAgICAgICBOb3RlIHRoYXQgc29tZSBrZXlzIG1heSBiZSB0aGUgc2FtZSBhcyBjb21tb25seSB1c2VkICBjb24tCisgICAgICAgdHJvbCBrZXlzLCBlLmcuLCA8U1RST05HPktFWV9FTlRFUjwvU1RST05HPiB2ZXJzdXMgY29udHJvbC9NLCA8U1RST05HPktFWV9CQUNLU1BBQ0U8L1NUUk9ORz4KKyAgICAgICB2ZXJzdXMgY29udHJvbC9ILiAgU29tZSBjdXJzZXMgaW1wbGVtZW50YXRpb25zIG1heSAgZGlmZmVyCisgICAgICAgYWNjb3JkaW5nICB0byAgd2hldGhlciAgdGhleSB0cmVhdCB0aGVzZSBjb250cm9sIGtleXMgc3BlLQorICAgICAgIGNpYWxseSAoYW5kIGlnbm9yZSB0aGUgdGVybWluZm8pLCBvciB1c2UgdGhlIHRlcm1pbmZvIGRlZi0KKyAgICAgICBpbml0aW9ucy4gICA8U1RST05HPk5jdXJzZXM8L1NUUk9ORz4gIHVzZXMgIHRoZSB0ZXJtaW5mbyBkZWZpbml0aW9uLiAgSWYgaXQKKyAgICAgICBzYXlzICB0aGF0ICA8U1RST05HPktFWV9FTlRFUjwvU1RST05HPiAgaXMgIGNvbnRyb2wvTSwgIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4gIHdpbGwgIHJldHVybgorICAgICAgIDxTVFJPTkc+S0VZX0VOVEVSPC9TVFJPTkc+IHdoZW4geW91IHByZXNzIGNvbnRyb2wvTS4KKworICAgICAgIFdoZW4gIHVzaW5nICA8U1RST05HPmdldGNoPC9TVFJPTkc+LCA8U1RST05HPndnZXRjaDwvU1RST05HPiwgPFNUUk9ORz5tdmdldGNoPC9TVFJPTkc+LCBvciA8U1RST05HPm12d2dldGNoPC9TVFJPTkc+LCBub2NicmVhaworICAgICAgIG1vZGUgKDxTVFJPTkc+bm9jYnJlYWs8L1NUUk9ORz4pIGFuZCBlY2hvIG1vZGUgKDxTVFJPTkc+ZWNobzwvU1RST05HPikgc2hvdWxkIG5vdCBiZSB1c2VkIGF0CisgICAgICAgdGhlICBzYW1lICB0aW1lLiAgRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgdHR5IGRyaXZlcgorICAgICAgIHdoZW4gZWFjaCBjaGFyYWN0ZXIgaXMgdHlwZWQsIHRoZSBwcm9ncmFtIG1heSBwcm9kdWNlICB1bi0KKyAgICAgICBkZXNpcmFibGUgcmVzdWx0cy4KKworICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmdldGNoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0Y2g8L1NUUk9ORz4sIGFuZCA8U1RST05HPm12d2dldGNoPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKyAgICAgICBIaXN0b3JpY2FsbHksIHRoZSBzZXQgb2Yga2V5cGFkIG1hY3JvcyB3YXMgbGFyZ2VseSBkZWZpbmVkCisgICAgICAgYnkgdGhlIGV4dHJlbWVseSBmdW5jdGlvbi1rZXktcmljaCBrZXlib2FyZCAgb2YgIHRoZSAgQVQmYW1wO1QKKyAgICAgICA3MzAwLCAgYWthICAzQjEsICBha2EgU2FmYXJpIDQuICBNb2Rlcm4gcGVyc29uYWwgY29tcHV0ZXJzCisgICAgICAgdXN1YWxseSBoYXZlIG9ubHkgYSBzbWFsbCBzdWJzZXQgb2YgdGhlc2UuICAgSUJNICBQQy1zdHlsZQorICAgICAgIGNvbnNvbGVzICAgdHlwaWNhbGx5ICBzdXBwb3J0ICBsaXR0bGUgIG1vcmUgIHRoYW4gIDxTVFJPTkc+S0VZX1VQPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+S0VZX0RPV048L1NUUk9ORz4sICAgPFNUUk9ORz5LRVlfTEVGVDwvU1RST05HPiwgICA8U1RST05HPktFWV9SSUdIVDwvU1RST05HPiwgICA8U1RST05HPktFWV9IT01FPC9TVFJPTkc+LCAgICA8U1RST05HPktFWV9FTkQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5LRVlfTlBBR0U8L1NUUk9ORz4sIDxTVFJPTkc+S0VZX1BQQUdFPC9TVFJPTkc+LCBhbmQgZnVuY3Rpb24ga2V5cyAxIHRocm91Z2ggMTIuICBUaGUKKyAgICAgICBJbnMga2V5IGlzIHVzdWFsbHkgbWFwcGVkIHRvIDxTVFJPTkc+S0VZX0lDPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAqZ2V0KiBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3Rhbi0KKyAgICAgICBkYXJkLCAgSXNzdWUgIDQuICAgVGhleSAgcmVhZCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzIG9ubHkuCisgICAgICAgVGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiAgb24gIGZhaWx1cmUsCisgICAgICAgYnV0IHNwZWNpZmllcyBubyBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgVGhlICBlY2hvICBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMgb24gaW5wdXQgb2YgPFNUUk9ORz5LRVlfPC9TVFJPTkc+IG9yCisgICAgICAgYmFja3NwYWNlIGNoYXJhY3RlcnMgd2FzIG5vdCBzcGVjaWZpZWQgaW4gdGhlICBTVnI0ICBkb2N1LQorICAgICAgIG1lbnRhdGlvbi4gIFRoaXMgZGVzY3JpcHRpb24gaXMgYWRvcHRlZCBmcm9tIHRoZSBYU0kgQ3Vycy0KKyAgICAgICBlcyBzdGFuZGFyZC4KKworICAgICAgIFRoZSBiZWhhdmlvciBvZiA8U1RST05HPmdldGNoPC9TVFJPTkc+IGFuZCBmcmllbmRzIGluIHRoZSBwcmVzZW5jZSBvZiAgaGFuLQorICAgICAgIGRsZWQgIHNpZ25hbHMgIGlzICB1bnNwZWNpZmllZCAgaW4gdGhlIFNWcjQgYW5kIFhTSSBDdXJzZXMKKyAgICAgICBkb2N1bWVudGF0aW9uLiAgVW5kZXIgaGlzdG9yaWNhbCAgY3Vyc2VzICBpbXBsZW1lbnRhdGlvbnMsCisgICAgICAgaXQgIHZhcmllZCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIGltLQorICAgICAgIHBsZW1lbnRhdGlvbiAgb2YgIGhhbmRsZWQgIHNpZ25hbCAgcmVjZWlwdCAgaW50ZXJydXB0cyAgIGEKKyAgICAgICA8U1RST05HPjxBIEhSRUY9InJlYWQuMi5odG1sIj5yZWFkKDIpPC9BPjwvU1RST05HPiAgY2FsbCBpbiBwcm9ncmVzcyBvciBub3QsIGFuZCBhbHNvIChpbiBzb21lIGltcGxlLQorICAgICAgIG1lbnRhdGlvbnMpIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFuIGlucHV0IHRpbWVvdXQgb3IgIG5vbi0KKyAgICAgICBibG9ja2luZyBtb2RlIGhhcyBiZWVuIHNldC4KKworICAgICAgIFByb2dyYW1tZXJzIGNvbmNlcm5lZCBhYm91dCBwb3J0YWJpbGl0eSBzaG91bGQgYmUgcHJlcGFyZWQKKyAgICAgICBmb3IgZWl0aGVyIG9mIHR3byBjYXNlczogKGEpIHNpZ25hbCByZWNlaXB0IGRvZXMgIG5vdCAgaW4tCisgICAgICAgdGVycnVwdCAgPFNUUk9ORz5nZXRjaDwvU1RST05HPjsgIChiKSAgc2lnbmFsICByZWNlaXB0IGludGVycnVwdHMgPFNUUk9ORz5nZXRjaDwvU1RST05HPiBhbmQKKyAgICAgICBjYXVzZXMgaXQgdG8gcmV0dXJuIEVSUiB3aXRoIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4gc2V0ICB0byAgPFNUUk9ORz5FSU5UUjwvU1RST05HPi4gICBVbmRlcgorICAgICAgIHRoZSAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBpbXBsZW1lbnRhdGlvbiwgaGFuZGxlZCBzaWduYWxzIG5ldmVyIGludGVyLQorICAgICAgIHJ1cHQgPFNUUk9ORz5nZXRjaDwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPmhhc19rZXk8L1NUUk9ORz4gZnVuY3Rpb24gaXMgdW5pcXVlIHRvIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPi4gICBXZSAgcmVjb21tZW5kCisgICAgICAgdGhhdCAgYW55ICBjb2RlICB1c2luZyBpdCBiZSBjb25kaXRpb25hbGl6ZWQgb24gdGhlIDxTVFJPTkc+TkNVUlMtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5FU19WRVJTSU9OPC9TVFJPTkc+IGZlYXR1cmUgbWFjcm8uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW92ZS4zeC5odG1sIj5jdXJzX21vdmUoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0icmVzaXpldGVybS4zeC5odG1sIj5yZXNpemV0ZXJtKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBDb21wYXJhYmxlICBmdW5jdGlvbnMgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIChuY3Vyc2VzdykgbGktCisgICAgICAgYnJhcnkgYXJlIGRlc2NyaWJlZCBpbiA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWY5ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0c3RyLjN4Lmh0bWwKQEAgLTAsMCArMSwxNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19nZXRzdHIuM3gsdiAxLjE1IDIwMDYvMDEvMTIgMDA6MzA6NTggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19nZXRzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2dldHN0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5nZXRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0bnN0cjwvU1RST05HPiwgPFNUUk9ORz53Z2V0c3RyPC9TVFJPTkc+LCA8U1RST05HPndnZXRuc3RyPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0c3RyPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0bnN0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12d2dldHN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndnZXRuc3RyPC9TVFJPTkc+IC0gYWNjZXB0IGNoYXJhY3RlciBzdHJpbmdzIGZyb20KKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiB0ZXJtaW5hbCBrZXlib2FyZAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldHN0cihjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRuc3RyKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndnZXRuc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmdldHN0cihpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3Z2V0c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12Z2V0bnN0cihpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndnZXRuc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPiosPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5nZXRzdHI8L1NUUk9ORz4gaXMgZXF1aXZhbGVudCB0byBhIHNlcmllcyBvZiBjYWxscyB0bworICAgICAgIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4sIHVudGlsIGEgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1cm4gaXMgcmVjZWl2ZWQgKHRoZQorICAgICAgIHRlcm1pbmF0aW5nICBjaGFyYWN0ZXIgIGlzICBub3QgIGluY2x1ZGVkICBpbiB0aGUgcmV0dXJuZWQKKyAgICAgICBzdHJpbmcpLiAgVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBwbGFjZWQgaW4gdGhlIGFyZWEgcG9pbnQtCisgICAgICAgZWQgdG8gYnkgdGhlIGNoYXJhY3RlciBwb2ludGVyIDxFTT5zdHI8L0VNPi4KKworICAgICAgIDxTVFJPTkc+d2dldG5zdHI8L1NUUk9ORz4gIHJlYWRzICBhdCAgbW9zdCAgPEVNPm48L0VNPiBjaGFyYWN0ZXJzLCB0aHVzIHByZXZlbnRpbmcgYQorICAgICAgIHBvc3NpYmxlIG92ZXJmbG93IG9mIHRoZSBpbnB1dCBidWZmZXIuICBBbnkgYXR0ZW1wdCB0byBlbi0KKyAgICAgICB0ZXIgbW9yZSBjaGFyYWN0ZXJzIChvdGhlciB0aGFuIHRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9yCisgICAgICAgY2FycmlhZ2UgcmV0dXJuKSBjYXVzZXMgYSBiZWVwLiAgRnVuY3Rpb24ga2V5cyBhbHNvICBjYXVzZQorICAgICAgIGEgIGJlZXAgIGFuZCBhcmUgaWdub3JlZC4gIFRoZSA8U1RST05HPmdldG5zdHI8L1NUUk9ORz4gZnVuY3Rpb24gcmVhZHMgZnJvbQorICAgICAgIHRoZSA8RU0+c3Rkc2NyPC9FTT4gZGVmYXVsdCB3aW5kb3cuCisKKyAgICAgICBUaGUgdXNlcidzIGVyYXNlIGFuZCBraWxsIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkLiAgIElmCisgICAgICAga2V5cGFkICAgbW9kZSAgIGlzICAgb24gICBmb3IgIHRoZSAgd2luZG93LCAgPFNUUk9ORz5LRVlfTEVGVDwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5LRVlfQkFDS1NQQUNFPC9TVFJPTkc+IGFyZSBib3RoIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byB0aGUgdXNlcidzCisgICAgICAga2lsbCBjaGFyYWN0ZXIuCisKKyAgICAgICBDaGFyYWN0ZXJzICBpbnB1dCBhcmUgZWNob2VkIG9ubHkgaWYgPFNUUk9ORz5lY2hvPC9TVFJPTkc+IGlzIGN1cnJlbnRseSBvbi4KKyAgICAgICBJbiB0aGF0IGNhc2UsIGJhY2tzcGFjZSBpcyBlY2hvZWQgYXMgZGVsZXRpb24gb2YgdGhlICBwcmUtCisgICAgICAgdmlvdXMgY2hhcmFjdGVyICh0eXBpY2FsbHkgYSBsZWZ0IG1vdGlvbikuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCBhbiA8U1RST05HPk9LPC9TVFJPTkc+CisgICAgICAgKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgIG90aGVyICB0aGFuICA8U1RST05HPkVSUjwvU1RST05HPiIpCisgICAgICAgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBpZgorICAgICAgIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCAgb3IgIGlmICBpdHMgIHRpbWVvdXQgIGV4cGlyZXMKKyAgICAgICB3aXRob3V0IGhhdmluZyBhbnkgZGF0YS4KKworICAgICAgIFRoaXMgIGltcGxlbWVudGF0aW9uICBwcm92aWRlcyBhbiBleHRlbnNpb24gYXMgd2VsbC4gIElmIGEKKyAgICAgICBTSUdXSU5DSCBpbnRlcnJ1cHRzIHRoZSBmdW5jdGlvbiwgaXQgd2lsbCAgcmV0dXJuICA8U1RST05HPktFWV9SRS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlNJWkU8L1NUUk9ORz4gcmF0aGVyIHRoYW4gPFNUUk9ORz5PSzwvU1RST05HPiBvciA8U1RST05HPkVSUjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5nZXRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRzdHI8L1NUUk9ORz4sIGFuZCA8U1RST05HPm12d2dldHN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LiAgVGhleSAgcmVhZCAgc2luZ2xlLWJ5dGUgIGNoYXJhY3RlcnMgIG9ubHkuICAgVGhlCisgICAgICAgc3RhbmRhcmQgIGRvZXMgIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuICBUaGlzIGltLQorICAgICAgIHBsZW1lbnRhdGlvbiByZXR1cm5zIEVSUiBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwgb3IKKyAgICAgICBpZiB0aGUgbG93ZXItbGV2ZWwgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4gY2FsbCByZXR1cm5zIGFuIEVSUi4KKworICAgICAgIFNWcjMgIGFuZCBlYXJseSBTVnI0IGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgZGlkIG5vdCByZWplY3QKKyAgICAgICBmdW5jdGlvbiBrZXlzOyB0aGUgU1ZyNC4wIGRvY3VtZW50YXRpb24gY2xhaW1lZCB0aGF0ICJzcGUtCisgICAgICAgY2lhbCAga2V5cyIgIChzdWNoICBhcyAgZnVuY3Rpb24ga2V5cywgImhvbWUiIGtleSwgImNsZWFyIgorICAgICAgIGtleSwgPEVNPmV0YzwvRU0+LikgYXJlICJpbnRlcnByZXRlZCIsIHdpdGhvdXQgZ2l2aW5nIGRldGFpbHMuICAgSXQKKyAgICAgICBsaWVkLiAgIEluICBmYWN0LCAgdGhlICBgY2hhcmFjdGVyJyAgdmFsdWUgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgc3RyaW5nIGJ5IHRob3NlIGltcGxlbWVudGF0aW9ucyB3YXMgIHByZWRpY3RhYmxlICBidXQgIG5vdAorICAgICAgIHVzZWZ1bCAgKGJlaW5nLCAgaW4gIGZhY3QsIHRoZSBsb3ctb3JkZXIgZWlnaHQgYml0cyBvZiB0aGUKKyAgICAgICBrZXkncyBLRVlfIHZhbHVlKS4KKworICAgICAgIFRoZSBmdW5jdGlvbnMgIDxTVFJPTkc+Z2V0bnN0cjwvU1RST05HPiwgIDxTVFJPTkc+bXZnZXRuc3RyPC9TVFJPTkc+LCAgYW5kICA8U1RST05HPm12d2dldG5zdHI8L1NUUk9ORz4gIHdlcmUKKyAgICAgICBwcmVzZW50IGJ1dCBub3QgZG9jdW1lbnRlZCBpbiBTVnI0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19nZXR5eC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjNhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19nZXR5eC4zeC5odG1sCkBAIC0wLDAgKzEsMTMxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfZ2V0eXguM3gsdiAxLjE2IDIwMDcvMDUvMTIgMTY6MzQ6NDkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19nZXR5eCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZ2V0eXggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldHl4PC9TVFJPTkc+LCAgPFNUUk9ORz5nZXRwYXJ5eDwvU1RST05HPiwgIDxTVFJPTkc+Z2V0YmVneXg8L1NUUk9ORz4sICA8U1RST05HPmdldG1heHl4PC9TVFJPTkc+IC0gZ2V0IDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGN1cnNvcgorICAgICAgIGFuZCB3aW5kb3cgY29vcmRpbmF0ZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Z2V0eXgoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPmdldHBhcnl4KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRiZWd5eChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Z2V0bWF4eXgoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmdldHl4PC9TVFJPTkc+IG1hY3JvIHBsYWNlcyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gb2YgIHRoZQorICAgICAgIGdpdmVuIHdpbmRvdyBpbiB0aGUgdHdvIGludGVnZXIgdmFyaWFibGVzIDxFTT55PC9FTT4gYW5kIDxFTT54PC9FTT4uCisKKyAgICAgICBJZiAgPEVNPndpbjwvRU0+ICBpcyAgYSAgc3Vid2luZG93LCAgdGhlICA8U1RST05HPmdldHBhcnl4PC9TVFJPTkc+IG1hY3JvIHBsYWNlcyB0aGUKKyAgICAgICBiZWdpbm5pbmcgY29vcmRpbmF0ZXMgb2YgdGhlICBzdWJ3aW5kb3cgIHJlbGF0aXZlICB0byAgdGhlCisgICAgICAgcGFyZW50ICB3aW5kb3cgaW50byB0d28gaW50ZWdlciB2YXJpYWJsZXMgPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPi4gIE90aGVyLQorICAgICAgIHdpc2UsIDxTVFJPTkc+LTE8L1NUUk9ORz4gaXMgcGxhY2VkIGludG8gPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPi4KKworICAgICAgIExpa2UgPFNUUk9ORz5nZXR5eDwvU1RST05HPiwgdGhlIDxTVFJPTkc+Z2V0YmVneXg8L1NUUk9ORz4gYW5kICA8U1RST05HPmdldG1heHl4PC9TVFJPTkc+ICBtYWNyb3MgIHN0b3JlICB0aGUKKyAgICAgICBjdXJyZW50ICBiZWdpbm5pbmcgIGNvb3JkaW5hdGVzICBhbmQgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkCisgICAgICAgd2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgcmV0dXJuIHZhbHVlcyBvZiB0aGVzZSAgbWFjcm9zICBhcmUgIHVuZGVmaW5lZCAgKGkuZS4sCisgICAgICAgdGhleSAgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSByaWdodC1oYW5kIHNpZGUgb2YgYXNzaWduLQorICAgICAgIG1lbnQgc3RhdGVtZW50cykuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgQWxsIG9mIHRoZXNlIGludGVyZmFjZXMgYXJlIG1hY3Jvcy4gIEEgIjxTVFJPTkc+JmFtcDs8L1NUUk9ORz4iIGlzICBub3QgIG5lY2VzLQorICAgICAgIHNhcnkgYmVmb3JlIHRoZSB2YXJpYWJsZXMgPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+Z2V0eXg8L1NUUk9ORz4sICA8U1RST05HPmdldHBhcnl4PC9TVFJPTkc+LCAgPFNUUk9ORz5nZXRiZWd5eDwvU1RST05HPiAgYW5kICA8U1RST05HPmdldG1heHl4PC9TVFJPTkc+IG1hY3JvcyBhcmUKKyAgICAgICBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisKKyAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gcHJvdmlkZXMgZnVuY3Rpb25zIDxTVFJPTkc+Z2V0YmVneDwvU1RST05HPiwgPFNUUk9ORz5nZXRiLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+ZWd5PC9TVFJPTkc+LCAgPFNUUk9ORz5nZXRjdXJ4PC9TVFJPTkc+LCA8U1RST05HPmdldGN1cnk8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0bWF4eDwvU1RST05HPiwgPFNUUk9ORz5nZXRtYXh5PC9TVFJPTkc+LCA8U1RST05HPmdldHBhcng8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Z2V0LTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+cGFyeTwvU1RST05HPiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGN1cnNlcy4KKworICAgICAgIEFsdGhvdWdoIFgvT3BlbiBDdXJzZXMgZG9lcyBub3QgYWRkcmVzcyB0aGlzLCBtYW55ICBpbXBsZS0KKyAgICAgICBtZW50YXRpb25zICBwcm92aWRlICBtZW1iZXJzICBvZiB0aGUgV0lORE9XIHN0cnVjdHVyZSBjb24tCisgICAgICAgdGFpbmluZyB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGVzZSAgbWFjcm9zLiAgIEZvciAgYmVzdAorICAgICAgIHBvcnRhYmlsaXR5LCAgZG8gIG5vdCAgcmVseSAgb24gIHVzaW5nIHRoZSBkYXRhIGluIFdJTkRPVywKKyAgICAgICBzaW5jZSBzb21lIGltcGxlbWVudGF0aW9ucyAgbWFrZSAgV0lORE9XICBvcGFxdWUgIChkbyAgbm90CisgICAgICAgYWxsb3cgZGlyZWN0IHVzZSBvZiBpdHMgbWVtYmVycykuCisKKyAgICAgICBCZXNpZGVzICB0aGUgcHJvYmxlbSBvZiBvcGFxdWUgc3RydWN0dXJlcywgdGhlIGRhdGEgc3RvcmVkCisgICAgICAgaW4gbGlrZS1uYW1lZCBtZW1iZXJzIG1heSBub3QgaGF2ZSBsaWtlLXZhbHVlcyBpbiAgZGlmZmVyLQorICAgICAgIGVudCAgaW1wbGVtZW50YXRpb25zLiAgIEZvciAgZXhhbXBsZSwgdGhlIFdJTkRPVy5fbWF4eCBhbmQKKyAgICAgICBXSU5ET1cuX21heHkgIHZhbHVlcyAgaW4gIG5jdXJzZXMgIGhhdmUgIChhdCAgbGVhc3QgIHNpbmNlCisgICAgICAgcmVsZWFzZSAxLjguMSkgZGlmZmVyZWQgYnkgb25lIGZyb20gc29tZSBvdGhlciBpbXBsZW1lbnRhLQorICAgICAgIHRpb25zLiAgVGhlIGRpZmZlcmVuY2UgaXMgaGlkZGVuIGJ5ICBtZWFucyAgb2YgIHRoZSAgbWFjcm8KKyAgICAgICA8U1RST05HPmdldG1heHl4PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfaW5fd2NoLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2guM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQwODNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5fd2NoLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbl93Y2guM3gsdiAxLjIgMjAwNi8wMi8yNSAyMTo0MjoyMiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luX3djaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5fd2NoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaC4zeC5odG1sIj5jdXJzX2luX3djaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluX3djaDwvU1RST05HPiwgIDxTVFJPTkc+bXZpbl93Y2g8L1NUUk9ORz4sICA8U1RST05HPm12d2luX3djaDwvU1RST05HPiwgPFNUUk9ORz53aW5fd2NoPC9TVFJPTkc+IC0gZXh0cmFjdCBhIGNvbXBsZXgKKyAgICAgICBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbiBmcm9tIGEgd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5fd2NoKGNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjdmFsPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluX3djaChpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2N2YWw8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luX3djaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjdmFsPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5fd2NoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y3ZhbDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBleHRyYWN0IHRoZSBjb21wbGV4IGNoYXJhY3RlciAgYW5kICByZW5kaS0KKyAgICAgICB0aW9uICBmcm9tICB0aGUgIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIG5hbWVkIHdpbmRvdyBpbnRvCisgICAgICAgdGhlIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBvYmplY3QgcmVmZXJlbmNlZCBieSB3Y3ZhbC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgTm8gZXJyb3JzIGFyZSBkZWZpbmVkIGluIHRoZSBYU0kgIEN1cnNlcyAgc3RhbmRhcmQuICAgVGhpcworICAgICAgIGltcGxlbWVudGF0aW9uICBjaGVja3MgIGZvciAgbnVsbCBwb2ludGVycywgcmV0dXJucyBFUlIgaW4KKyAgICAgICB0aGF0IGNhc2UuICBBbHNvLCB0aGUgPEVNPm12PC9FTT4gcm91dGluZXMgY2hlY2sgZm9yICBlcnJvciAgbW92aW5nCisgICAgICAgdGhlICBjdXJzb3IsICByZXR1cm5pbmcgIEVSUiBpbiB0aGF0IGNhc2UuICBPdGhlcndpc2UgdGhleQorICAgICAgIHJldHVybiBPSworCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgb2YgdGhlc2Ugcm91dGluZXMgbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfaW5fd2Noc3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2hzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTc2Mjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5fd2Noc3RyLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbl93Y2hzdHIuM3gsdiAxLjYgMjAwNi8xMi8wMiAxNzowMzowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luX3djaHN0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5fd2Noc3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluX3djaHN0cjwvU1RST05HPiwgPFNUUk9ORz5pbl93Y2huc3RyPC9TVFJPTkc+LCA8U1RST05HPndpbl93Y2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2luX3djaG5zdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmluX3djaHN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmluX3djaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW5fd2Noc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luX3djaG5zdHI8L1NUUk9ORz4gLQorICAgICAgIGdldCBhbiBhcnJheSBvZiBjb21wbGV4IGNoYXJhY3RlcnMgYW5kIHJlbmRpdGlvbnMgZnJvbSBhCisgICAgICAgY3Vyc2VzIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluX3djaHN0cihjY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluX3djaG5zdHIoY2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbl93Y2hzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luX3djaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluX3djaHN0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluX3djaG5zdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbl93Y2hzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luX3djaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPiwgaW50IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhbiBhcnJheSBvZiBjb21wbGV4ICBjaGFyYWN0ZXJzICBpbgorICAgICAgIDxFTT53Y2hzdHI8L0VNPiwgIHN0YXJ0aW5nICBhdCAgdGhlICBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUKKyAgICAgICBuYW1lZCB3aW5kb3cuICBBdHRyaWJ1dGVzIChyZW5kaXRpb24pIGFyZSBzdG9yZWQgd2l0aCAgdGhlCisgICAgICAgY2hhcmFjdGVycy4KKworICAgICAgIFRoZSAgPFNUUk9ORz5pbl93Y2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5fd2NobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbl93Y2huc3RyPC9TVFJPTkc+IGFuZCA8U1RST05HPndpbl93Y2huLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+c3RyPC9TVFJPTkc+IGZpbGwgdGhlIGFycmF5IHdpdGggYXQgbW9zdCA8RU0+bjwvRU0+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBlbGVtZW50cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCA8U1RST05HPndpbl93Y2huc3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKyAgICAgICBSZWFkaW5nIGEgbGluZSB0aGF0IG92ZXJmbG93cyB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8RU0+d2NoLTwvRU0+CisgICAgICAgPEVNPnN0cjwvRU0+ICB3aXRoIDxTVFJPTkc+aW5fd2Noc3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5fd2Noc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luX3djaHN0cjwvU1RST05HPiBvciA8U1RST05HPndpbl93Y2gtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zdHI8L1NUUk9ORz4gIGNhdXNlcyAgdW5kZWZpbmVkICByZXN1bHRzLiAgVGhlcmVmb3JlLCAgdGhlICB1c2UgIG9mCisgICAgICAgPFNUUk9ORz5pbl93Y2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5fd2NobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbl93Y2huc3RyPC9TVFJPTkc+LCBvciA8U1RST05HPndpbl93Y2huc3RyPC9TVFJPTkc+IGlzCisgICAgICAgcmVjb21tZW5kZWQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgIHRoZXNlICBmdW5jdGlvbnMgIHJldHVybiAgPFNUUk9ORz5PSzwvU1RST05HPi4KKyAgICAgICBPdGhlcndpc2UsIHRoZXkgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgWFNJICBDdXJzZXMgZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLiAgVGhpcyBpbXBsZS0KKyAgICAgICBtZW50YXRpb24gY2hlY2tzIGZvciBudWxsIHBvaW50ZXJzLCByZXR1cm5pbmcgRVJSIGluICB0aGF0CisgICAgICAgY2FzZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICBGdW5jdGlvbnM6ICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPiA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfaW5jaC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5jaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MDE4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5jaC4zeCx2IDEuMTMgMjAwNi8xMi8wMiAxNjo1ODo1NSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luY2ggM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luY2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbmNoPC9TVFJPTkc+LCAgPFNUUk9ORz53aW5jaDwvU1RST05HPiwgIDxTVFJPTkc+bXZpbmNoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdndpbmNoPC9TVFJPTkc+ICAtICBnZXQgIGEgIGNoYXJhY3RlciAgYW5kCisgICAgICAgYXR0cmlidXRlcyBmcm9tIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+aW5jaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPndpbmNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+bXZpbmNoKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5tdndpbmNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gdGhlIGNoYXJhY3Rlciwgb2YgIHR5cGUgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+LCAgYXQKKyAgICAgICB0aGUgICBjdXJyZW50ICBwb3NpdGlvbiAgaW4gIHRoZSAgbmFtZWQgIHdpbmRvdy4gICBJZiAgYW55CisgICAgICAgYXR0cmlidXRlcyBhcmUgc2V0IGZvciB0aGF0ICBwb3NpdGlvbiwgIHRoZWlyICB2YWx1ZXMgIGFyZQorICAgICAgIE9SJ2VkICBpbnRvICB0aGUgIHZhbHVlICByZXR1cm5lZC4gICBDb25zdGFudHMgIGRlZmluZWQgaW4KKyAgICAgICA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4gY2FuIGJlIHVzZWQgd2l0aCB0aGUgPFNUUk9ORz4mYW1wOzwvU1RST05HPiAobG9naWNhbCAgQU5EKSAgb3BlcmF0b3IKKyAgICAgICB0byBleHRyYWN0IHRoZSBjaGFyYWN0ZXIgb3IgYXR0cmlidXRlcyBhbG9uZS4KKworICAgPFNUUk9ORz5BdHRyaWJ1dGVzPC9TVFJPTkc+CisgICAgICAgVGhlICBmb2xsb3dpbmcgIGJpdC1tYXNrcyAgbWF5ICBiZSAgQU5ELWVkIHdpdGggY2hhcmFjdGVycworICAgICAgIHJldHVybmVkIGJ5IDxTVFJPTkc+d2luY2g8L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPkFfQ0hBUlRFWFQ8L1NUUk9ORz4gICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgY2hhcmFjdGVyCisgICAgICAgPFNUUk9ORz5BX0FUVFJJQlVURVM8L1NUUk9ORz4gICBCaXQtbWFzayB0byBleHRyYWN0IGF0dHJpYnV0ZXMKKyAgICAgICA8U1RST05HPkFfQ09MT1I8L1NUUk9ORz4gICAgICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgY29sb3ItcGFpciBmaWVsZCBpbmZvcm1hdGlvbgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgb2YgdGhlc2Ugcm91dGluZXMgbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBDb21wYXJhYmxlICBmdW5jdGlvbnMgIGluICB0aGUgIHdpZGUtY2hhcmFjdGVyICAobmN1cnNlc3cpCisgICAgICAgbGlicmFyeSBhcmUgZGVzY3JpYmVkIGluIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoc3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoc3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3M2NjMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2luY2hzdHIuM3gsdiAxLjEyIDIwMDYvMTIvMDIgMTc6MDA6NTggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19pbmNoc3RyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbmNoc3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5jaHN0cjwvU1RST05HPiwgPFNUUk9ORz5pbmNobnN0cjwvU1RST05HPiwgPFNUUk9ORz53aW5jaHN0cjwvU1RST05HPiwgPFNUUk9ORz53aW5jaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbmNoc3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZpbmNobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbmNoc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luY2huc3RyPC9TVFJPTkc+IC0gZ2V0IGEgc3RyaW5nIG9mCisgICAgICAgY2hhcmFjdGVycyAoYW5kIGF0dHJpYnV0ZXMpIGZyb20gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbmNoc3RyKGNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbmNobnN0cihjaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5jaHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5jaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluY2hzdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluY2huc3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbmNoc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+bXZ3aW5jaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyLDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIGEgTlVMTC10ZXJtaW5hdGVkICBhcnJheSAgb2YgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+CisgICAgICAgcXVhbnRpdGllcywgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZQorICAgICAgIG5hbWVkIHdpbmRvdyBhbmQgZW5kaW5nIGF0IHRoZSByaWdodCBtYXJnaW4gb2YgdGhlIHdpbmRvdy4KKyAgICAgICBUaGUgIGZvdXIgIGZ1bmN0aW9ucyB3aXRoIDxFTT5uPC9FTT4gYXMgdGhlIGxhc3QgYXJndW1lbnQsIHJldHVybiBhCisgICAgICAgbGVhZGluZyBzdWJzdHJpbmcgYXQgbW9zdCA8RU0+bjwvRU0+IGNoYXJhY3RlcnMgbG9uZyAoZXhjbHVzaXZlICBvZgorICAgICAgIHRoZSAgdHJhaWxpbmcgKGNodHlwZSkwKS4gIENvbnN0YW50cyBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorICAgICAgIGNhbiBiZSB1c2VkIHdpdGggdGhlIDxTVFJPTkc+JmFtcDs8L1NUUk9ORz4gKGxvZ2ljYWwgQU5EKSBvcGVyYXRvciAgdG8gIGV4dHJhY3QKKyAgICAgICB0aGUgIGNoYXJhY3RlciBvciB0aGUgYXR0cmlidXRlIGFsb25lIGZyb20gYW55IHBvc2l0aW9uIGluCisgICAgICAgdGhlIDxFTT5jaHN0cjwvRU0+IFtzZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz5dLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gIGZhaWx1cmUgIGFuZCAgYW4KKyAgICAgICBpbnRlZ2VyICB2YWx1ZSAgb3RoZXIgIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24KKyAgICAgICAodGhlIG51bWJlciBvZiAgY2hhcmFjdGVycyAgcmV0cmlldmVkLCAgZXhjbHVzaXZlICBvZiAgdGhlCisgICAgICAgdHJhaWxpbmcgMCkuCisKKyAgICAgICBObyAgZXJyb3IgIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQuICBJZiB0aGUgPEVNPmNoc3RyPC9FTT4gcGFyYW1ldGVyCisgICAgICAgaXMgbnVsbCwgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgIHplLQorICAgICAgIHJvLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgIHRoYXQgIGFsbCAgcm91dGluZXMgIGV4Y2VwdCA8U1RST05HPndpbmNobnN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorICAgICAgIFNWcjQgZG9lcyBub3QgZG9jdW1lbnQgd2hldGhlciB0aGUgcmVzdWx0IHN0cmluZyBpcyAwLXRlci0KKyAgICAgICBtaW5hdGVkOyBpdCBkb2VzIG5vdCBkb2N1bWVudCB3aGV0aGVyIGEgbGVuZ3RoIGxpbWl0IGFyZ3UtCisgICAgICAgbWVudCBpbmNsdWRlcyBhbnkgdHJhaWxpbmcgMDsgYW5kIGl0IGRvZXMgbm90IGRvY3VtZW50IHRoZQorICAgICAgIG1lYW5pbmcgb2YgdGhlIHJldHVybiB2YWx1ZS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4gIEl0IGlzIG5vIG1vcmUgc3BlY2lmaWMgdGhhbiB0aGUgU1ZyNCAgZG9jdW1lbnRhLQorICAgICAgIHRpb24gb24gdGhlIHRyYWlsaW5nIDAuICBJdCBkb2VzIHNwZWNpZnkgdGhhdCB0aGUgc3VjY2Vzcy0KKyAgICAgICBmdWwgcmV0dXJuIG9mIHRoZSBmdW5jdGlvbnMgaXMgPFNUUk9ORz5PSzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgQ29tcGFyYWJsZSBmdW5jdGlvbnMgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIChuY3Vyc2VzdykgIGxpLQorICAgICAgIGJyYXJ5IGFyZSBkZXNjcmliZWQgaW4gPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWZkNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sCkBAIC0wLDAgKzEsMTY3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5pdHNjci4zeCx2IDEuMTQgMjAwNS8wNS8xNSAxNjoxODowMSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luaXRzY3IgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luaXRzY3IgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+LCA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4sIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+LCA8U1RST05HPmlzZW5kd2luPC9TVFJPTkc+LCA8U1RST05HPnNldF90ZXJtPC9TVFJPTkc+LCA8U1RST05HPmRlbHNjcmVlbjwvU1RST05HPiAtCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gc2NyZWVuIGluaXRpYWxpemF0aW9uIGFuZCBtYW5pcHVsYXRpb24gcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qaW5pdHNjcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmVuZHdpbih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc2VuZHdpbih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlNDUkVFTjwvU1RST05HPiA8U1RST05HPipuZXd0ZXJtKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qdHlwZSw8L1NUUk9ORz4gPFNUUk9ORz5GSUxFPC9TVFJPTkc+IDxTVFJPTkc+Km91dGZkLDwvU1RST05HPiA8U1RST05HPkZJTEU8L1NUUk9ORz4gPFNUUk9ORz4qaW5mZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5TQ1JFRU48L1NUUk9ORz4gPFNUUk9ORz4qc2V0X3Rlcm0oU0NSRUVOPC9TVFJPTkc+IDxTVFJPTkc+Km5ldyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+ZGVsc2NyZWVuKFNDUkVFTio8L1NUUk9ORz4gPFNUUk9ORz5zcCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IGlzIG5vcm1hbGx5IHRoZSBmaXJzdCA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lIHRvIGNhbGwgIHdoZW4KKyAgICAgICBpbml0aWFsaXppbmcgIGEgcHJvZ3JhbS4gIEEgZmV3IHNwZWNpYWwgcm91dGluZXMgc29tZXRpbWVzCisgICAgICAgbmVlZCB0byBiZSBjYWxsZWQgYmVmb3JlIGl0OyB0aGVzZSBhcmUgIDxTVFJPTkc+c2xrX2luaXQ8L1NUUk9ORz4sICA8U1RST05HPmZpbHRlcjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnJpcG9mZmxpbmU8L1NUUk9ORz4sICA8U1RST05HPnVzZV9lbnY8L1NUUk9ORz4uICBGb3IgbXVsdGlwbGUtdGVybWluYWwgYXBwbGljYXRpb25zLAorICAgICAgIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiBtYXkgYmUgY2FsbGVkIGJlZm9yZSA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgaW5pdHNjciBjb2RlIGRldGVybWluZXMgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIGluaXRpYWwtCisgICAgICAgaXplcyAgYWxsIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGRhdGEgc3RydWN0dXJlcy4gIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBhbHNvIGNhdXNlcyB0aGUKKyAgICAgICBmaXJzdCBjYWxsIHRvIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiB0byBjbGVhciB0aGUgc2NyZWVuLiAgSWYgZXJyb3JzICBvYy0KKyAgICAgICBjdXIsICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gd3JpdGVzIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgdG8gc3Rhbi0KKyAgICAgICBkYXJkIGVycm9yIGFuZCBleGl0czsgb3RoZXJ3aXNlLCBhIHBvaW50ZXIgaXMgcmV0dXJuZWQgIHRvCisgICAgICAgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4uCisKKyAgICAgICBBICBwcm9ncmFtICB0aGF0ICBvdXRwdXRzIHRvIG1vcmUgdGhhbiBvbmUgdGVybWluYWwgc2hvdWxkCisgICAgICAgdXNlIHRoZSA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4gIHJvdXRpbmUgIGZvciAgZWFjaCAgdGVybWluYWwgIGluc3RlYWQgIG9mCisgICAgICAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+LiAgQSBwcm9ncmFtIHRoYXQgbmVlZHMgdG8gaW5zcGVjdCBjYXBhYmlsaXRpZXMsIHNvCisgICAgICAgaXQgY2FuIGNvbnRpbnVlIHRvIHJ1biBpbiBhIGxpbmUtb3JpZW50ZWQgbW9kZSBpZiB0aGUgdGVyLQorICAgICAgIG1pbmFsIGNhbm5vdCBzdXBwb3J0IGEgc2NyZWVuLW9yaWVudGVkIHByb2dyYW0sIHdvdWxkIGFsc28KKyAgICAgICB1c2UgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+LiAgVGhlIHJvdXRpbmUgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IHNob3VsZCAgYmUgIGNhbGxlZCAgb25jZQorICAgICAgIGZvciBlYWNoIHRlcm1pbmFsLiAgSXQgcmV0dXJucyBhIHZhcmlhYmxlIG9mIHR5cGUgPFNUUk9ORz5TQ1JFRU48L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+CisgICAgICAgd2hpY2ggc2hvdWxkIGJlIHNhdmVkIGFzIGEgIHJlZmVyZW5jZSAgdG8gIHRoYXQgIHRlcm1pbmFsLgorICAgICAgIFRoZSAgYXJndW1lbnRzICBhcmUgdGhlIDxFTT50eXBlPC9FTT4gb2YgdGhlIHRlcm1pbmFsIHRvIGJlIHVzZWQgaW4KKyAgICAgICBwbGFjZSBvZiA8U1RST05HPiRURVJNPC9TVFJPTkc+LCBhIGZpbGUgcG9pbnRlciBmb3Igb3V0cHV0IHRvIHRoZSB0ZXJtaW5hbCwKKyAgICAgICBhbmQgIGFub3RoZXIgIGZpbGUgcG9pbnRlciBmb3IgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwgKGlmCisgICAgICAgPEVNPnR5cGU8L0VNPiBpcyA8U1RST05HPk5VTEw8L1NUUk9ORz4sIDxTVFJPTkc+JFRFUk08L1NUUk9ORz4gd2lsbCBiZSB1c2VkKS4gIFRoZSBwcm9ncmFtIG11c3QgIGFsc28KKyAgICAgICBjYWxsICA8U1RST05HPmVuZHdpbjwvU1RST05HPiAgZm9yICBlYWNoIHRlcm1pbmFsIGJlaW5nIHVzZWQgYmVmb3JlIGV4aXRpbmcKKyAgICAgICBmcm9tIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+LiAgSWYgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBmb3IgIHRoZQorICAgICAgIHNhbWUgIHRlcm1pbmFsLCB0aGUgZmlyc3QgdGVybWluYWwgcmVmZXJyZWQgdG8gbXVzdCBiZSB0aGUKKyAgICAgICBsYXN0IG9uZSBmb3Igd2hpY2ggPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gaXMgY2FsbGVkLgorCisgICAgICAgQSBwcm9ncmFtIHNob3VsZCBhbHdheXMgY2FsbCA8U1RST05HPmVuZHdpbjwvU1RST05HPiBiZWZvcmUgZXhpdGluZyBvciAgZXMtCisgICAgICAgY2FwaW5nICBmcm9tICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgbW9kZSAgdGVtcG9yYXJpbHkuICBUaGlzIHJvdXRpbmUgcmUtCisgICAgICAgc3RvcmVzIHR0eSBtb2RlcywgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbG93ZXIgIGxlZnQtaGFuZAorICAgICAgIGNvcm5lciAgb2YgIHRoZSAgc2NyZWVuICBhbmQgIHJlc2V0cyB0aGUgdGVybWluYWwgaW50byB0aGUKKyAgICAgICBwcm9wZXIgbm9uLXZpc3VhbCBtb2RlLiAgQ2FsbGluZyA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4gb3IgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiBhZnRlcgorICAgICAgIGEgIHRlbXBvcmFyeSAgZXNjYXBlICBjYXVzZXMgIHRoZSBwcm9ncmFtIHRvIHJlc3VtZSB2aXN1YWwKKyAgICAgICBtb2RlLgorCisgICAgICAgVGhlIDxTVFJPTkc+aXNlbmR3aW48L1NUUk9ORz4gcm91dGluZSAgcmV0dXJucyAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+ICBpZiAgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gIGhhcyAgYmVlbgorICAgICAgIGNhbGxlZCB3aXRob3V0IGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4sIGFuZCA8U1RST05HPkZBTFNFPC9TVFJPTkc+CisgICAgICAgb3RoZXJ3aXNlLgorCisgICAgICAgVGhlIDxTVFJPTkc+c2V0X3Rlcm08L1NUUk9ORz4gcm91dGluZSBpcyB1c2VkIHRvIHN3aXRjaCAgYmV0d2VlbiAgZGlmZmVyZW50CisgICAgICAgdGVybWluYWxzLiAgIFRoZSBzY3JlZW4gcmVmZXJlbmNlIDxTVFJPTkc+bmV3PC9TVFJPTkc+IGJlY29tZXMgdGhlIG5ldyBjdXItCisgICAgICAgcmVudCB0ZXJtaW5hbC4gIFRoZSBwcmV2aW91cyB0ZXJtaW5hbCBpcyByZXR1cm5lZCAgYnkgIHRoZQorICAgICAgIHJvdXRpbmUuICAgVGhpcyAgaXMgIHRoZSAgb25seSAgcm91dGluZSAgd2hpY2ggbWFuaXB1bGF0ZXMKKyAgICAgICA8U1RST05HPlNDUkVFTjwvU1RST05HPiBwb2ludGVyczsgYWxsIG90aGVyIHJvdXRpbmVzIGFmZmVjdCBvbmx5ICB0aGUgIGN1ci0KKyAgICAgICByZW50IHRlcm1pbmFsLgorCisgICAgICAgVGhlICA8U1RST05HPmRlbHNjcmVlbjwvU1RST05HPiAgcm91dGluZSAgZnJlZXMgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgPFNUUk9ORz5TQ1JFRU48L1NUUk9ORz4gZGF0YSBzdHJ1Y3R1cmUuICBUaGUgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gIHJvdXRpbmUgIGRvZXMgIG5vdCAgZG8KKyAgICAgICB0aGlzLCBzbyA8U1RST05HPmRlbHNjcmVlbjwvU1RST05HPiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+IGlmIGEgcGFyLQorICAgICAgIHRpY3VsYXIgPFNUUk9ORz5TQ1JFRU48L1NUUk9ORz4gaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gcmV0dXJucyB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgIGFuZCAgPFNUUk9ORz5PSzwvU1RST05HPiAgdXBvbgorICAgICAgIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIGFsd2F5cyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLgorCisgICAgICAgWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluICB0aGlzICBpbXBsZW1lbnRhLQorICAgICAgIHRpb24gIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+IHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIHdhcyBub3QgaW5pLQorICAgICAgIHRpYWxpemVkLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LiAgSXQgc3BlY2lmaWVzIHRoYXQgcG9ydGFibGUgYXBwbGljYXRpb25zIG11c3Qgbm90CisgICAgICAgY2FsbCA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgICBPbGQgdmVyc2lvbnMgb2YgY3Vyc2VzLCBlLmcuLCBCU0QgNC40LCBtYXkgaGF2ZSByZXR1cm5lZCBhCisgICAgICAgbnVsbCAgcG9pbnRlciAgZnJvbSAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+ICB3aGVuICBhbiAgZXJyb3IgaXMgZGV0ZWN0ZWQsCisgICAgICAgcmF0aGVyIHRoYW4gZXhpdGluZy4gIEl0IGlzIHNhZmUgYnV0ICByZWR1bmRhbnQgIHRvICBjaGVjaworICAgICAgIHRoZSByZXR1cm4gdmFsdWUgb2YgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IGluIFhTSSBDdXJzZXMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4sICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2lub3B0cy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWMzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbApAQCAtMCwwICsxLDI2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2lub3B0cy4zeCx2IDEuMTMgMjAwNS8wNS8xNSAxNjoxODowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2lub3B0cyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5vcHRzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmNicmVhazwvU1RST05HPiwgPFNUUk9ORz5ub2NicmVhazwvU1RST05HPiwgPFNUUk9ORz5lY2hvPC9TVFJPTkc+LCA8U1RST05HPm5vZWNobzwvU1RST05HPiwgPFNUUk9ORz5oYWxmZGVsYXk8L1NUUk9ORz4sIDxTVFJPTkc+aW50cmZsdXNoPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+a2V5cGFkPC9TVFJPTkc+LCA8U1RST05HPm1ldGE8L1NUUk9ORz4sIDxTVFJPTkc+bm9kZWxheTwvU1RST05HPiwgPFNUUk9ORz5ub3RpbWVvdXQ8L1NUUk9ORz4sIDxTVFJPTkc+cmF3PC9TVFJPTkc+LCA8U1RST05HPm5vcmF3PC9TVFJPTkc+LCA8U1RST05HPm5vcWlmbHVzaDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnFpZmx1c2g8L1NUUk9ORz4sIDxTVFJPTkc+dGltZW91dDwvU1RST05HPiwgPFNUUk9ORz53dGltZW91dDwvU1RST05HPiwgPFNUUk9ORz50eXBlYWhlYWQ8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiBpbnB1dAorICAgICAgIG9wdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jYnJlYWsodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ub2NicmVhayh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmVjaG8odm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ub2VjaG8odm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5oYWxmZGVsYXkoaW50PC9TVFJPTkc+IDxTVFJPTkc+dGVudGhzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmludHJmbHVzaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5iZik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5rZXlwYWQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bWV0YShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5iZik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ub2RlbGF5KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJhdyh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5vcmF3KHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPm5vcWlmbHVzaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5xaWZsdXNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bm90aW1lb3V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz50aW1lb3V0KGludDwvU1RST05HPiA8U1RST05HPmRlbGF5KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz53dGltZW91dChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlbGF5KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnR5cGVhaGVhZChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5mZCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgTm9ybWFsbHksIHRoZSB0dHkgZHJpdmVyIGJ1ZmZlcnMgdHlwZWQgY2hhcmFjdGVycyB1bnRpbCAgYQorICAgICAgIG5ld2xpbmUgIG9yICBjYXJyaWFnZSByZXR1cm4gaXMgdHlwZWQuICBUaGUgPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4gcm91dGluZQorICAgICAgIGRpc2FibGVzIGxpbmUgYnVmZmVyaW5nIGFuZCBlcmFzZS9raWxsICBjaGFyYWN0ZXItcHJvY2Vzcy0KKyAgICAgICBpbmcgIChpbnRlcnJ1cHQgIGFuZCBmbG93IGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgdW5hZmZlY3QtCisgICAgICAgZWQpLCBtYWtpbmcgIGNoYXJhY3RlcnMgIHR5cGVkICBieSAgdGhlICB1c2VyICBpbW1lZGlhdGVseQorICAgICAgIGF2YWlsYWJsZSAgdG8gIHRoZSAgcHJvZ3JhbS4gIFRoZSA8U1RST05HPm5vY2JyZWFrPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucworICAgICAgIHRoZSB0ZXJtaW5hbCB0byBub3JtYWwgKGNvb2tlZCkgbW9kZS4KKworICAgICAgIEluaXRpYWxseSB0aGUgdGVybWluYWwgbWF5IG9yIG1heSBub3QgYmUgaW4gIDxTVFJPTkc+Y2JyZWFrPC9TVFJPTkc+ICBtb2RlLAorICAgICAgIGFzIHRoZSBtb2RlIGlzIGluaGVyaXRlZDsgdGhlcmVmb3JlLCBhIHByb2dyYW0gc2hvdWxkIGNhbGwKKyAgICAgICA8U1RST05HPmNicmVhazwvU1RST05HPiBvciA8U1RST05HPm5vY2JyZWFrPC9TVFJPTkc+IGV4cGxpY2l0bHkuICBNb3N0IGludGVyYWN0aXZlICBwcm9ncmFtcworICAgICAgIHVzaW5nICA8U1RST05HPmN1cnNlczwvU1RST05HPiBzZXQgdGhlIDxTVFJPTkc+Y2JyZWFrPC9TVFJPTkc+IG1vZGUuICBOb3RlIHRoYXQgPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4gb3Zlci0KKyAgICAgICByaWRlcyA8U1RST05HPnJhdzwvU1RST05HPi4gIFtTZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPiBmb3IgYSAgZGlzY3Vzc2lvbiAgb2YgIGhvdworICAgICAgIHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IHdpdGggPFNUUk9ORz5lY2hvPC9TVFJPTkc+IGFuZCA8U1RST05HPm5vZWNobzwvU1RST05HPi5dCisKKyAgICAgICBUaGUgIDxTVFJPTkc+ZWNobzwvU1RST05HPiAgYW5kICA8U1RST05HPm5vZWNobzwvU1RST05HPiByb3V0aW5lcyBjb250cm9sIHdoZXRoZXIgY2hhcmFjdGVycworICAgICAgIHR5cGVkIGJ5IHRoZSB1c2VyIGFyZSBlY2hvZWQgYnkgPFNUUk9ORz5nZXRjaDwvU1RST05HPiBhcyB0aGV5ICBhcmUgIHR5cGVkLgorICAgICAgIEVjaG9pbmcgYnkgdGhlIHR0eSBkcml2ZXIgaXMgYWx3YXlzIGRpc2FibGVkLCBidXQgaW5pdGlhbC0KKyAgICAgICBseSA8U1RST05HPmdldGNoPC9TVFJPTkc+IGlzIGluIGVjaG8gbW9kZSwgc28gY2hhcmFjdGVycyB0eXBlZCBhcmUgIGVjaG9lZC4KKyAgICAgICBBdXRob3JzICBvZiAgbW9zdCAgaW50ZXJhY3RpdmUgcHJvZ3JhbXMgcHJlZmVyIHRvIGRvIHRoZWlyCisgICAgICAgb3duIGVjaG9pbmcgaW4gYSBjb250cm9sbGVkIGFyZWEgb2YgdGhlIHNjcmVlbiwgb3Igbm90ICB0bworICAgICAgIGVjaG8gIGF0ICBhbGwsICBzbyB0aGV5IGRpc2FibGUgZWNob2luZyBieSBjYWxsaW5nIDxTVFJPTkc+bm9lY2hvPC9TVFJPTkc+LgorICAgICAgIFtTZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPiBmb3IgYSBkaXNjdXNzaW9uIG9mIGhvdyB0aGVzZSByb3V0aW5lcworICAgICAgIGludGVyYWN0IHdpdGggPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bm9jYnJlYWs8L1NUUk9ORz4uXQorCisgICAgICAgVGhlICA8U1RST05HPmhhbGZkZWxheTwvU1RST05HPiAgcm91dGluZSBpcyB1c2VkIGZvciBoYWxmLWRlbGF5IG1vZGUsIHdoaWNoCisgICAgICAgaXMgc2ltaWxhciB0byA8U1RST05HPmNicmVhazwvU1RST05HPiBtb2RlIGluIHRoYXQgY2hhcmFjdGVycyB0eXBlZCBieSAgdGhlCisgICAgICAgdXNlciAgYXJlICBpbW1lZGlhdGVseSBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0uICBIb3dldmVyLAorICAgICAgIGFmdGVyIGJsb2NraW5nIGZvciA8RU0+dGVudGhzPC9FTT4gdGVudGhzIG9mIHNlY29uZHMsICBFUlIgIGlzICByZS0KKyAgICAgICB0dXJuZWQgIGlmICBub3RoaW5nICBoYXMgIGJlZW4gdHlwZWQuICBUaGUgdmFsdWUgb2YgPFNUUk9ORz50ZW50aHM8L1NUUk9ORz4KKyAgICAgICBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMjU1LiAgVXNlIDxTVFJPTkc+bm9jYnJlYWs8L1NUUk9ORz4gdG8gbGVhdmUKKyAgICAgICBoYWxmLWRlbGF5IG1vZGUuCisKKyAgICAgICBJZiAgdGhlIDxTVFJPTkc+aW50cmZsdXNoPC9TVFJPTkc+IG9wdGlvbiBpcyBlbmFibGVkLCAoPEVNPmJmPC9FTT4gaXMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+KSwgd2hlbiBhbgorICAgICAgIGludGVycnVwdCBrZXkgIGlzICBwcmVzc2VkICBvbiAgdGhlICBrZXlib2FyZCAgKGludGVycnVwdCwKKyAgICAgICBicmVhaywgIHF1aXQpICBhbGwgIG91dHB1dCBpbiB0aGUgdHR5IGRyaXZlciBxdWV1ZSB3aWxsIGJlCisgICAgICAgZmx1c2hlZCwgZ2l2aW5nIHRoZSBlZmZlY3Qgb2YgZmFzdGVyIHJlc3BvbnNlIHRvICB0aGUgIGluLQorICAgICAgIHRlcnJ1cHQsIGJ1dCBjYXVzaW5nIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHRvIGhhdmUgdGhlIHdyb25nIGlkZWEgb2Ygd2hhdAorICAgICAgIGlzIG9uIHRoZSBzY3JlZW4uICBEaXNhYmxpbmcgKDxFTT5iZjwvRU0+ICBpcyAgPFNUUk9ORz5GQUxTRTwvU1RST05HPiksICB0aGUgIG9wdGlvbgorICAgICAgIHByZXZlbnRzICB0aGUgZmx1c2guICBUaGUgZGVmYXVsdCBmb3IgdGhlIG9wdGlvbiBpcyBpbmhlci0KKyAgICAgICBpdGVkIGZyb20gdGhlIHR0eSBkcml2ZXIgc2V0dGluZ3MuICBUaGUgd2luZG93IGFyZ3VtZW50IGlzCisgICAgICAgaWdub3JlZC4KKworICAgICAgIFRoZSAgPFNUUk9ORz5rZXlwYWQ8L1NUUk9ORz4gb3B0aW9uIGVuYWJsZXMgdGhlIGtleXBhZCBvZiB0aGUgdXNlcidzIHRlcm1pLQorICAgICAgIG5hbC4gIElmIGVuYWJsZWQgKDxFTT5iZjwvRU0+IGlzIDxTVFJPTkc+VFJVRTwvU1RST05HPiksIHRoZSB1c2VyIGNhbiBwcmVzcyBhICBmdW5jLQorICAgICAgIHRpb24gIGtleSAoc3VjaCBhcyBhbiBhcnJvdyBrZXkpIGFuZCA8U1RST05HPndnZXRjaDwvU1RST05HPiByZXR1cm5zIGEgc2luLQorICAgICAgIGdsZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGtleSwgYXMgIGluICA8U1RST05HPktFWV9MRUZUPC9TVFJPTkc+LgorICAgICAgIElmICBkaXNhYmxlZCAoPEVNPmJmPC9FTT4gaXMgPFNUUk9ORz5GQUxTRTwvU1RST05HPiksIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGRvZXMgbm90IHRyZWF0IGZ1bmN0aW9uCisgICAgICAga2V5cyBzcGVjaWFsbHkgYW5kIHRoZSBwcm9ncmFtIGhhcyB0byBpbnRlcnByZXQgdGhlIGVzY2FwZQorICAgICAgIHNlcXVlbmNlcyAgaXRzZWxmLiAgIElmICB0aGUga2V5cGFkIGluIHRoZSB0ZXJtaW5hbCBjYW4gYmUKKyAgICAgICB0dXJuZWQgb24gKG1hZGUgdG8gdHJhbnNtaXQpIGFuZCBvZmYgKG1hZGUgdG8gd29yayAgbG9jYWwtCisgICAgICAgbHkpLCAgdHVybmluZyBvbiB0aGlzIG9wdGlvbiBjYXVzZXMgdGhlIHRlcm1pbmFsIGtleXBhZCB0bworICAgICAgIGJlIHR1cm5lZCBvbiB3aGVuIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+IGlzIGNhbGxlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgIGtleXBhZCBpcyBmYWxzZS4KKworICAgICAgIEluaXRpYWxseSwgd2hldGhlciB0aGUgdGVybWluYWwgcmV0dXJucyA3IG9yIDggc2lnbmlmaWNhbnQKKyAgICAgICBiaXRzIG9uIGlucHV0IGRlcGVuZHMgb24gdGhlIGNvbnRyb2wgbW9kZSBvZiB0aGUgdHR5IGRyaXYtCisgICAgICAgZXIgIFtzZWUgIDxTVFJPTkc+PEEgSFJFRj0idGVybWlvLjcuaHRtbCI+dGVybWlvKDcpPC9BPjwvU1RST05HPl0uICBUbyBmb3JjZSA4IGJpdHMgdG8gYmUgcmV0dXJuZWQsIGluLQorICAgICAgIHZva2UgPFNUUk9ORz5tZXRhPC9TVFJPTkc+KDxFTT53aW48L0VNPiwgPFNUUk9ORz5UUlVFPC9TVFJPTkc+KTsgdGhpcyBpcyBlcXVpdmFsZW50LCB1bmRlciBQT1NJWCwgIHRvCisgICAgICAgc2V0dGluZyAgdGhlIENTOCBmbGFnIG9uIHRoZSB0ZXJtaW5hbC4gIFRvIGZvcmNlIDcgYml0cyB0bworICAgICAgIGJlIHJldHVybmVkLCBpbnZva2UgPFNUUk9ORz5tZXRhPC9TVFJPTkc+KDxFTT53aW48L0VNPiwgPFNUUk9ORz5GQUxTRTwvU1RST05HPik7IHRoaXMgaXMgIGVxdWl2YWxlbnQsCisgICAgICAgdW5kZXIgUE9TSVgsIHRvIHNldHRpbmcgdGhlIENTNyBmbGFnIG9uIHRoZSB0ZXJtaW5hbC4gIFRoZQorICAgICAgIHdpbmRvdyBhcmd1bWVudCwgPEVNPndpbjwvRU0+LCBpcyBhbHdheXMgaWdub3JlZC4gIElmIHRoZSAgdGVybWluZm8KKyAgICAgICBjYXBhYmlsaXRpZXMgIDxTVFJPTkc+c21tPC9TVFJPTkc+IChtZXRhX29uKSBhbmQgPFNUUk9ORz5ybW08L1NUUk9ORz4gKG1ldGFfb2ZmKSBhcmUgZGVmaW5lZAorICAgICAgIGZvciB0aGUgIHRlcm1pbmFsLCAgPFNUUk9ORz5zbW08L1NUUk9ORz4gIGlzICBzZW50ICB0byAgdGhlICB0ZXJtaW5hbCAgd2hlbgorICAgICAgIDxTVFJPTkc+bWV0YTwvU1RST05HPig8RU0+d2luPC9FTT4sICA8U1RST05HPlRSVUU8L1NUUk9ORz4pICBpcyBjYWxsZWQgYW5kIDxTVFJPTkc+cm1tPC9TVFJPTkc+IGlzIHNlbnQgd2hlbiA8U1RST05HPm1ldGE8L1NUUk9ORz4oPEVNPndpbjwvRU0+LAorICAgICAgIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4pIGlzIGNhbGxlZC4KKworICAgICAgIFRoZSA8U1RST05HPm5vZGVsYXk8L1NUUk9ORz4gb3B0aW9uIGNhdXNlcyA8U1RST05HPmdldGNoPC9TVFJPTkc+IHRvIGJlIGEgbm9uLWJsb2NraW5nIGNhbGwuCisgICAgICAgSWYgIG5vIGlucHV0IGlzIHJlYWR5LCA8U1RST05HPmdldGNoPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4uICBJZiBkaXNhYmxlZCAoPEVNPmJmPC9FTT4KKyAgICAgICBpcyA8U1RST05HPkZBTFNFPC9TVFJPTkc+KSwgPFNUUk9ORz5nZXRjaDwvU1RST05HPiB3YWl0cyB1bnRpbCBhIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAgV2hpbGUgaW50ZXJwcmV0aW5nIGFuIGlucHV0IGVzY2FwZSBzZXF1ZW5jZSwgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4gc2V0cyBhCisgICAgICAgdGltZXIgIHdoaWxlICB3YWl0aW5nICBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLiAgSWYgPFNUUk9ORz5ub3RpbWUtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5vdXQoPC9TVFJPTkc+PEVNPndpbjwvRU0+LCA8U1RST05HPlRSVUU8L1NUUk9ORz4pIGlzIGNhbGxlZCwgIHRoZW4gIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+ICBkb2VzICBub3QgIHNldCAgYQorICAgICAgIHRpbWVyLiAgVGhlIHB1cnBvc2Ugb2YgdGhlIHRpbWVvdXQgaXMgdG8gZGlmZmVyZW50aWF0ZSBiZS0KKyAgICAgICB0d2VlbiBzZXF1ZW5jZXMgcmVjZWl2ZWQgZnJvbSBhICBmdW5jdGlvbiAga2V5ICBhbmQgIHRob3NlCisgICAgICAgdHlwZWQgYnkgYSB1c2VyLgorCisgICAgICAgVGhlICA8U1RST05HPnJhdzwvU1RST05HPiBhbmQgPFNUUk9ORz5ub3JhdzwvU1RST05HPiByb3V0aW5lcyBwbGFjZSB0aGUgdGVybWluYWwgaW50byBvciBvdXQKKyAgICAgICBvZiByYXcgbW9kZS4gIFJhdyBtb2RlIGlzIHNpbWlsYXIgdG8gPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4gbW9kZSwgaW4gIHRoYXQKKyAgICAgICBjaGFyYWN0ZXJzIHR5cGVkIGFyZSBpbW1lZGlhdGVseSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgdXMtCisgICAgICAgZXIgcHJvZ3JhbS4gIFRoZSBkaWZmZXJlbmNlcyBhcmUgdGhhdCBpbiByYXcgbW9kZSwgdGhlIGluLQorICAgICAgIHRlcnJ1cHQsICBxdWl0LCAgc3VzcGVuZCwgIGFuZCBmbG93IGNvbnRyb2wgY2hhcmFjdGVycyBhcmUKKyAgICAgICBhbGwgcGFzc2VkIHRocm91Z2ggdW5pbnRlcnByZXRlZCwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nICBhCisgICAgICAgc2lnbmFsLiAgIFRoZSAgYmVoYXZpb3IgIG9mIHRoZSBCUkVBSyBrZXkgZGVwZW5kcyBvbiBvdGhlcgorICAgICAgIGJpdHMgaW4gdGhlIHR0eSBkcml2ZXIgdGhhdCBhcmUgbm90IHNldCBieSA8U1RST05HPmN1cnNlczwvU1RST05HPi4KKworICAgICAgIFdoZW4gdGhlIDxTVFJPTkc+bm9xaWZsdXNoPC9TVFJPTkc+IHJvdXRpbmUgaXMgdXNlZCwgbm9ybWFsIGZsdXNoIG9mICBpbnB1dAorICAgICAgIGFuZCAgb3V0cHV0IHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIDxTVFJPTkc+SU5UUjwvU1RST05HPiwgPFNUUk9ORz5RVUlUPC9TVFJPTkc+IGFuZCA8U1RST05HPlNVU1A8L1NUUk9ORz4KKyAgICAgICBjaGFyYWN0ZXJzIHdpbGwgbm90IGJlIGRvbmUgW3NlZSA8U1RST05HPjxBIEhSRUY9InRlcm1pby43Lmh0bWwiPnRlcm1pbyg3KTwvQT48L1NUUk9ORz5dLiAgV2hlbiA8U1RST05HPnFpZmx1c2g8L1NUUk9ORz4KKyAgICAgICBpcyAgY2FsbGVkLCAgdGhlIHF1ZXVlcyB3aWxsIGJlIGZsdXNoZWQgd2hlbiB0aGVzZSBjb250cm9sCisgICAgICAgY2hhcmFjdGVycyBhcmUgcmVhZC4gIFlvdSBtYXkgd2FudCB0byBjYWxsIDxTVFJPTkc+bm9xaWZsdXNoKCk8L1NUUk9ORz4gIGluCisgICAgICAgYSAgc2lnbmFsIGhhbmRsZXIgaWYgeW91IHdhbnQgb3V0cHV0IHRvIGNvbnRpbnVlIGFzIHRob3VnaAorICAgICAgIHRoZSBpbnRlcnJ1cHQgaGFkIG5vdCBvY2N1cnJlZCwgYWZ0ZXIgdGhlIGhhbmRsZXIgZXhpdHMuCisKKyAgICAgICBUaGUgPFNUUk9ORz50aW1lb3V0PC9TVFJPTkc+IGFuZCA8U1RST05HPnd0aW1lb3V0PC9TVFJPTkc+IHJvdXRpbmVzICBzZXQgIGJsb2NraW5nICBvciAgbm9uLQorICAgICAgIGJsb2NraW5nICByZWFkICBmb3IgYSBnaXZlbiB3aW5kb3cuICBJZiA8RU0+ZGVsYXk8L0VNPiBpcyBuZWdhdGl2ZSwKKyAgICAgICBibG9ja2luZyByZWFkIGlzIHVzZWQgKGkuZS4sIHdhaXRzICBpbmRlZmluaXRlbHkgIGZvciAgaW4tCisgICAgICAgcHV0KS4gICBJZiAgPEVNPmRlbGF5PC9FTT4gIGlzIHplcm8sIHRoZW4gbm9uLWJsb2NraW5nIHJlYWQgaXMgdXNlZAorICAgICAgIChpLmUuLCByZWFkIHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4gaWYgbm8gaW5wdXQgaXMgd2FpdGluZykuICBJZiA8RU0+ZGVsYXk8L0VNPgorICAgICAgIGlzICBwb3NpdGl2ZSwgdGhlbiByZWFkIGJsb2NrcyBmb3IgPEVNPmRlbGF5PC9FTT4gbWlsbGlzZWNvbmRzLCBhbmQKKyAgICAgICByZXR1cm5zIDxTVFJPTkc+RVJSPC9TVFJPTkc+IGlmIHRoZXJlIGlzIHN0aWxsIG5vIGlucHV0LiAgSGVuY2UsIHRoZXNlIHJvdS0KKyAgICAgICB0aW5lcyAgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIDxTVFJPTkc+bm9kZWxheTwvU1RST05HPiwgcGx1cyB0aGUKKyAgICAgICBhZGRpdGlvbmFsIGNhcGFiaWxpdHkgb2YgYmVpbmcgYWJsZSB0byBibG9jayBmb3Igb25seSAgPEVNPmRlLTwvRU0+CisgICAgICAgPEVNPmxheTwvRU0+IG1pbGxpc2Vjb25kcyAod2hlcmUgPEVNPmRlbGF5PC9FTT4gaXMgcG9zaXRpdmUpLgorCisgICAgICAgVGhlICA8U1RST05HPmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGRvZXMgYGBsaW5lLWJyZWFrb3V0IG9wdGltaXphdGlvbicnIGJ5CisgICAgICAgbG9va2luZyBmb3IgIHR5cGVhaGVhZCAgcGVyaW9kaWNhbGx5ICB3aGlsZSAgdXBkYXRpbmcgIHRoZQorICAgICAgIHNjcmVlbi4gICBJZiAgaW5wdXQgaXMgZm91bmQsIGFuZCBpdCBpcyBjb21pbmcgZnJvbSBhIHR0eSwKKyAgICAgICB0aGUgY3VycmVudCB1cGRhdGUgaXMgcG9zdHBvbmVkIHVudGlsIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiBvciAgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPgorICAgICAgIGlzICBjYWxsZWQgYWdhaW4uICBUaGlzIGFsbG93cyBmYXN0ZXIgcmVzcG9uc2UgdG8gY29tbWFuZHMKKyAgICAgICB0eXBlZCBpbiBhZHZhbmNlLiAgTm9ybWFsbHksIHRoZSBpbnB1dCBGSUxFIHBvaW50ZXIgcGFzc2VkCisgICAgICAgdG8gIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiwgIG9yICA8U1RST05HPnN0ZGluPC9TVFJPTkc+IGluIHRoZSBjYXNlIHRoYXQgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IHdhcyB1c2VkLAorICAgICAgIHdpbGwgYmUgdXNlZCB0byBkbyB0aGlzIHR5cGVhaGVhZCBjaGVja2luZy4gIFRoZSA8U1RST05HPnR5cGVhaGVhZDwvU1RST05HPgorICAgICAgIHJvdXRpbmUgIHNwZWNpZmllcyAgdGhhdCAgdGhlICBmaWxlIGRlc2NyaXB0b3IgPEVNPmZkPC9FTT4gaXMgdG8gYmUKKyAgICAgICB1c2VkIHRvIGNoZWNrIGZvciB0eXBlYWhlYWQgaW5zdGVhZC4gIElmIDxFTT5mZDwvRU0+IGlzIC0xLCB0aGVuIG5vCisgICAgICAgdHlwZWFoZWFkIGNoZWNraW5nIGlzIGRvbmUuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCAgcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsLQorICAgICAgIHVyZSBhbmQgT0sgKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuICBpbnRlZ2VyICB2YWx1ZSAgb3RoZXIKKyAgICAgICB0aGFuICA8U1RST05HPkVSUjwvU1RST05HPiIpICB1cG9uICBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2UKKyAgICAgICBub3RlZCBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUgZGVzY3JpcHRpb25zLgorCisgICAgICAgWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIEluIHRoaXMgIGltLQorICAgICAgIHBsZW1lbnRhdGlvbiwgIGZ1bmN0aW9ucyAgd2l0aCBhIHdpbmRvdyBwYXJhbWV0ZXIgd2lsbCByZS0KKyAgICAgICB0dXJuIGFuIGVycm9yIGlmIGl0IGlzIG51bGwuICBBbnkgZnVuY3Rpb24gd2lsbCAgYWxzbyAgcmUtCisgICAgICAgdHVybiBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgd2FzIG5vdCBpbml0aWFsaXplZC4gIEFsc28sCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5oYWxmZGVsYXk8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiAgZXJyb3IgaWYgaXRzIHBhcmFtZXRlciBpcyBvdXRzaWRlCisgICAgICAgICAgICAgICAgICAgdGhlIHJhbmdlIDEuLjI1NS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4KKworICAgICAgIFRoZSAgbmN1cnNlcyAgbGlicmFyeSBvYmV5cyB0aGUgWFBHNCBzdGFuZGFyZCBhbmQgdGhlIGhpcy0KKyAgICAgICB0b3JpY2FsIHByYWN0aWNlIG9mIHRoZSBBVCZhbXA7VCAgY3Vyc2VzICBpbXBsZW1lbnRhdGlvbnMsICBpbgorICAgICAgIHRoYXQgIHRoZSAgZWNobyBiaXQgaXMgY2xlYXJlZCB3aGVuIGN1cnNlcyBpbml0aWFsaXplcyB0aGUKKyAgICAgICB0ZXJtaW5hbCBzdGF0ZS4gIEJTRCBjdXJzZXMgZGlmZmVyZWQgZnJvbSAgdGhpcyAgc2xpZ2h0bHk7CisgICAgICAgaXQgbGVmdCB0aGUgZWNobyBiaXQgb24gYXQgaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGUgQlNEIDxTVFJPTkc+cmF3PC9TVFJPTkc+CisgICAgICAgY2FsbCB0dXJuZWQgaXQgb2ZmIGFzIGEgc2lkZS1lZmZlY3QuICBGb3IgYmVzdCAgcG9ydGFiaWxpLQorICAgICAgIHR5LCAgc2V0ICBlY2hvIG9yIG5vZWNobyBleHBsaWNpdGx5IGp1c3QgYWZ0ZXIgaW5pdGlhbGl6YS0KKyAgICAgICB0aW9uLCBldmVuIGlmIHlvdXIgcHJvZ3JhbSByZW1haW5zIGluIGNvb2tlZCBtb2RlLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmVjaG88L1NUUk9ORz4sIDxTVFJPTkc+bm9lY2hvPC9TVFJPTkc+LCA8U1RST05HPmhhbGZkZWxheTwvU1RST05HPiwgPFNUUk9ORz5pbnRyZmx1c2g8L1NUUk9ORz4sIDxTVFJPTkc+bWV0YTwvU1RST05HPiwgIDxTVFJPTkc+bm9kZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmxheTwvU1RST05HPiwgIDxTVFJPTkc+bm90aW1lb3V0PC9TVFJPTkc+LCA8U1RST05HPm5vcWlmbHVzaDwvU1RST05HPiwgPFNUUk9ORz5xaWZsdXNoPC9TVFJPTkc+LCA8U1RST05HPnRpbWVvdXQ8L1NUUk9ORz4sIGFuZCA8U1RST05HPnd0aW1lb3V0PC9TVFJPTkc+CisgICAgICAgbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIFRoZSA8U1RST05HPm5vcmF3PC9TVFJPTkc+IGFuZCA8U1RST05HPm5vY2JyZWFrPC9TVFJPTkc+IGNhbGxzIGZvbGxvdyBoaXN0b3JpY2FsIHByYWN0aWNlIGluCisgICAgICAgdGhhdCAgdGhleSAgYXR0ZW1wdCAgdG8gIHJlc3RvcmUgdG8gbm9ybWFsIChgY29va2VkJykgbW9kZQorICAgICAgIGZyb20gcmF3IGFuZCBjYnJlYWsgbW9kZXMgcmVzcGVjdGl2ZWx5LiAgTWl4aW5nICByYXcvbm9yYXcKKyAgICAgICBhbmQgIGNicmVhay9ub2NicmVhayAgY2FsbHMgIGxlYWRzICB0byAgdHR5IGRyaXZlciBjb250cm9sCisgICAgICAgc3RhdGVzIHRoYXQgYXJlIGhhcmQgdG8gcHJlZGljdCBvciB1bmRlcnN0YW5kOyBpdCAgaXMgIG5vdAorICAgICAgIHJlY29tbWVuZGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWlvLjcuaHRtbCI+dGVybWlvKDcpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfaW5zX3djaC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5zX3djaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjlkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd2NoLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbnNfd2NoLjN4LHYgMS4zIDIwMDYvMDIvMjUgMjE6NDI6MjIgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19pbnNfd2NoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbnNfd2NoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193Y2guM3guaHRtbCI+Y3Vyc19pbnNfd2NoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5zX3djaDwvU1RST05HPiwgIDxTVFJPTkc+bXZpbnNfd2NoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdndpbnNfd2NoPC9TVFJPTkc+LCA8U1RST05HPndpbnNfd2NoPC9TVFJPTkc+IC0gaW5zZXJ0IGEgY29tLQorICAgICAgIHBsZXggY2hhcmFjdGVyIGFuZCByZW5kaXRpb24gaW50byBhIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgICNpbmNsdWRlICZsdDtjdXJzZXMuaCZndDsKKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zX3djaChjb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc193Y2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW4sPC9FTT4gPEVNPmNvbnN0PC9FTT4gPEVNPmNjaGFyPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+dDwvRU0+IDxFTT4qd2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluc193Y2goaW50PC9TVFJPTkc+IDxFTT55LDwvRU0+IDxFTT5pbnQ8L0VNPiA8RU0+eCw8L0VNPiA8RU0+Y29uc3Q8L0VNPiA8RU0+Y2NoYXI8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT50PC9FTT4gPEVNPip3Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luc193Y2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW4sPC9FTT4gPEVNPmludDwvRU0+IDxFTT55LDwvRU0+IDxFTT5pbnQ8L0VNPiAgPEVNPngsPC9FTT4gIDxFTT5jb25zdDwvRU0+ICA8RU0+Y2NoYXI8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT50PC9FTT4KKyAgICAgICA8RU0+KndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzLCBpbnNlcnQgdGhlIGNvbXBsZXggY2hhcmFjdGVyIDxFTT53Y2g8L0VNPiB3aXRoIHJlbi0KKyAgICAgICBkaXRpb24gYmVmb3JlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4gIEFsbCBjaGFyYWMtCisgICAgICAgdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciBhcmUgbW92ZWQgb25lIHNwYWNlIHRvIHRoZQorICAgICAgIHJpZ2h0LCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlciAgb24KKyAgICAgICB0aGUgIGxpbmUgIGJlaW5nICBsb3N0LiAgIFRoZSBpbnNlcnRpb24gb3BlcmF0aW9uIGRvZXMgbm90CisgICAgICAgY2hhbmdlIHRoZSBjdXJzb3IgcG9zaXRpb24uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIElmIHN1Y2Nlc3NmdWwsIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gT0suICAgSWYgIG5vdCwgIHRoZXkKKyAgICAgICByZXR1cm4gRVJSLgorCisKKzwvUFJFPgorPEgyPkVSUk9SUzwvSDI+PFBSRT4KKyAgICAgICBObyBlcnJvcnMgYXJlIGRlZmluZWQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zY2guM3guaHRtbCI+Y3Vyc19pbnNjaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2luc193c3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd3N0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODE4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd3N0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5zX3dzdHIuM3gsdiAxLjQgMjAwNS8wNS8xNSAxNzowMjo1NCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luc193c3RyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbnNfd3N0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5zX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+aW5zX253c3RyPC9TVFJPTkc+LCA8U1RST05HPndpbnNfd3N0cjwvU1RST05HPiwgPFNUUk9ORz53aW5zX253c3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5zX3dzdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmluc19ud3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbnNfd3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbnNfbndzdHI8L1NUUk9ORz4gLSBpbnNlcnQgYSB3aWRlLQorICAgICAgIGNoYXJhY3RlciBzdHJpbmcgaW50byBhIGN1cnNlcyB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbnNfd3N0cihjb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHIpOzwvRU0+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbnNfbndzdHIoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbnNfd3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5zX253c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbnNfd3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluc19ud3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luc193c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbnNfbndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyBpbnNlcnQgYSA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gY2hhcmFjdGVyIHN0cmluZyAoYXMgbWFueQorICAgICAgIGNoYXJhY3RlcnMgYXMgd2lsbCBmaXQgb24gdGhlIGxpbmUpIGJlZm9yZSAgdGhlICBjaGFyYWN0ZXIKKyAgICAgICB1bmRlciB0aGUgY3Vyc29yLiAgQWxsIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXItCisgICAgICAgc29yIGFyZSBzaGlmdGVkIHJpZ2h0LCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgIHJpZ2h0LQorICAgICAgIG1vc3QgIGNoYXJhY3RlcnMgIG9uICB0aGUgbGluZSBiZWluZyBsb3N0LiAgTm8gd3JhcHBpbmcgaXMKKyAgICAgICBwZXJmb3JtZWQuICBUaGUgY3Vyc29yIHBvc2l0aW9uICBkb2VzICBub3QgIGNoYW5nZSAgKGFmdGVyCisgICAgICAgbW92aW5nICB0byAgPEVNPnk8L0VNPiwgPEVNPng8L0VNPiwgaWYgc3BlY2lmaWVkKS4gIFRoZSBmb3VyIHJvdXRpbmVzIHdpdGggPEVNPm48L0VNPgorICAgICAgIGFzIHRoZSBsYXN0IGFyZ3VtZW50IGluc2VydCBhIGxlYWRpbmcgc3Vic3RyaW5nIG9mIGF0IG1vc3QKKyAgICAgICA8RU0+bjwvRU0+ICA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gIGNoYXJhY3RlcnMuICAgSWYgIDxFTT5uPC9FTT4gaXMgbGVzcyB0aGFuIDEsIHRoZSBlbnRpcmUKKyAgICAgICBzdHJpbmcgaXMgaW5zZXJ0ZWQuCisKKyAgICAgICBJZiBhIGNoYXJhY3RlciBpbiA8RU0+d3N0cjwvRU0+IGlzIGEgdGFiLCBuZXdsaW5lLCBjYXJyaWFnZSAgcmV0dXJuCisgICAgICAgb3IgYmFja3NwYWNlLCB0aGUgY3Vyc29yIGlzIG1vdmVkIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZQorICAgICAgIHdpbmRvdy4gIEEgbmV3bGluZSBhbHNvIGRvZXMgIGEgIDxTVFJPTkc+Y2xydG9lb2w8L1NUUk9ORz4gIGJlZm9yZSAgbW92aW5nLgorICAgICAgIFRhYnMgIGFyZSAgY29uc2lkZXJlZCAgdG8gYmUgYXQgZXZlcnkgZWlnaHRoIGNvbHVtbi4gIElmIGEKKyAgICAgICBjaGFyYWN0ZXIgaW4gPEVNPndzdHI8L0VNPiBpcyAgYW5vdGhlciAgY29udHJvbCAgY2hhcmFjdGVyLCAgaXQgIGlzCisgICAgICAgZHJhd24gIGluIHRoZSA8U1RST05HPl48L1NUUk9ORz48RU0+WDwvRU0+IG5vdGF0aW9uLiAgQ2FsbGluZyA8U1RST05HPndpbl93Y2g8L1NUUk9ORz4gYWZ0ZXIgYWRkaW5nIGEKKyAgICAgICBjb250cm9sIGNoYXJhY3RlciAoYW5kIG1vdmluZyB0byBpdCwgIGlmICBuZWNlc3NhcnkpICBkb2VzCisgICAgICAgbm90ICByZXR1cm4gIHRoZSAgY29udHJvbCBjaGFyYWN0ZXIsIGJ1dCBpbnN0ZWFkIHJldHVybnMgYQorICAgICAgIGNoYXJhY3RlciBpbiB0aGUgXi1yZXByZXNlbnRhdGlvbiBvZiB0aGUgIGNvbnRyb2wgIGNoYXJhYy0KKyAgICAgICB0ZXIuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCBidXQgd2luc19ud3N0ciBtYXkgYmUgbWFjcm9zLgorCisgICAgICAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIGEgbm9uc3BhY2luZyBjaGFyLQorICAgICAgIGFjdGVyLCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBmYWlsLiAgIFhTSSAgZG9lcyAgbm90ICBkZWZpbmUKKyAgICAgICB3aGF0ICB3aWxsIGhhcHBlbiBpZiBhIG5vbnNwYWNpbmcgY2hhcmFjdGVyIGZvbGxvd3MgYSBjb24tCisgICAgICAgdHJvbCBjaGFyYWN0ZXIuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgIHRoZXNlICBmdW5jdGlvbnMgIHJldHVybiAgT0suCisgICAgICAgT3RoZXJ3aXNlLCB0aGV5IHJldHVybiBFUlIuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+LCAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193Y2guM3guaHRtbCI+Y3Vyc19pbnNfd2NoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNjaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZmUwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNjaC4zeC5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5zY2guM3gsdiAxLjEwIDIwMDYvMTIvMDIgMTc6MDE6NTAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19pbnNjaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5zY2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zY2guM3guaHRtbCI+Y3Vyc19pbnNjaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluc2NoPC9TVFJPTkc+LCAgPFNUUk9ORz53aW5zY2g8L1NUUk9ORz4sICA8U1RST05HPm12aW5zY2g8L1NUUk9ORz4sICA8U1RST05HPm12d2luc2NoPC9TVFJPTkc+ICAtICBpbnNlcnQgYSBjaGFyYWN0ZXIKKyAgICAgICBiZWZvcmUgY3Vyc29yIGluIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zY2goY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc2NoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbnNjaChpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5zY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGluc2VydCB0aGUgY2hhcmFjdGVyIDxFTT5jaDwvRU0+IGJlZm9yZSB0aGUgIGNoYXJhYy0KKyAgICAgICB0ZXIgIHVuZGVyIHRoZSBjdXJzb3IuICBBbGwgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlCisgICAgICAgY3Vyc29yIGFyZSBtb3ZlZCBvbmUgc3BhY2UgdG8gdGhlIHJpZ2h0LCB3aXRoICB0aGUgIHBvc3NpLQorICAgICAgIGJpbGl0eSAgb2YgdGhlIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUgYmVpbmcgbG9zdC4KKyAgICAgICBUaGUgaW5zZXJ0aW9uIG9wZXJhdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlICBjdXJzb3IgIHBvc2ktCisgICAgICAgdGlvbi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsICByb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWwtCisgICAgICAgdXJlIGFuZCBPSyAoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4gIGludGVnZXIgIHZhbHVlICBvdGhlcgorICAgICAgIHRoYW4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgIHVwb24gIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZQorICAgICAgIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGltcGx5IHVzZSBvZiBhICBoYXJkd2FyZQorICAgICAgIGluc2VydCBjaGFyYWN0ZXIgZmVhdHVyZS4KKworICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmluc2NoPC9TVFJPTkc+LCA8U1RST05HPm12aW5zY2g8L1NUUk9ORz4sIGFuZCA8U1RST05HPm12d2luc2NoPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgQ29tcGFyYWJsZSAgZnVuY3Rpb25zICBpbiAgdGhlICB3aWRlLWNoYXJhY3RlciAgKG5jdXJzZXN3KQorICAgICAgIGxpYnJhcnkgYXJlIGRlc2NyaWJlZCBpbiA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQzOTUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbnNzdHIuM3gsdiAxLjE4IDIwMDYvMTIvMjQgMTQ6NTk6MzAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19pbnNzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luc3N0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbnNzdHI8L1NUUk9ORz4sICA8U1RST05HPmluc25zdHI8L1NUUk9ORz4sICA8U1RST05HPndpbnNzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2luc25zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbnNzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbnNuc3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZ3aW5zc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luc25zdHI8L1NUUk9ORz4gLSBpbnNlcnQgc3RyaW5nIGJlZm9yZSBjdXJzb3IgIGluICBhCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluc3N0cihjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluc25zdHIoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbnNzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbnNuc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5zc3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5zbnN0cihpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luc3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luc25zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyBpbnNlcnQgYSBjaGFyYWN0ZXIgc3RyaW5nIChhcyBtYW55IGNoYXJhYy0KKyAgICAgICB0ZXJzIGFzIHdpbGwgZml0IG9uIHRoZSBsaW5lKSBiZWZvcmUgdGhlICBjaGFyYWN0ZXIgIHVuZGVyCisgICAgICAgdGhlIGN1cnNvci4gIEFsbCBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIGFyZQorICAgICAgIHNoaWZ0ZWQgcmlnaHQgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHJpZ2h0bW9zdCAgY2hhci0KKyAgICAgICBhY3RlcnMgIG9uICB0aGUgbGluZSBiZWluZyBsb3N0LiAgVGhlIGN1cnNvciBwb3NpdGlvbiBkb2VzCisgICAgICAgbm90IGNoYW5nZSAoYWZ0ZXIgbW92aW5nIHRvICA8RU0+eTwvRU0+LCAgPEVNPng8L0VNPiwgIGlmICBzcGVjaWZpZWQpLiAgIFRoZQorICAgICAgIGZ1bmN0aW9ucyAgd2l0aCAgPEVNPm48L0VNPiAgYXMgIHRoZSBsYXN0IGFyZ3VtZW50IGluc2VydCBhIGxlYWRpbmcKKyAgICAgICBzdWJzdHJpbmcgb2YgYXQgbW9zdCA8RU0+bjwvRU0+ICBjaGFyYWN0ZXJzLiAgIElmICA8RU0+bjwvRU0+Jmx0Oz0wLCAgdGhlbiAgdGhlCisgICAgICAgZW50aXJlIHN0cmluZyBpcyBpbnNlcnRlZC4KKworICAgICAgIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgaGFuZGxlZCBhcyBpbiA8U1RST05HPmFkZGNoPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbC0KKyAgICAgICB1cmUgYW5kIE9LIChTVnI0IHNwZWNpZmllcyBvbmx5ICJhbiAgaW50ZWdlciAgdmFsdWUgIG90aGVyCisgICAgICAgdGhhbiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSAgdXBvbiAgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlCisgICAgICAgbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKworICAgICAgIFgvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiAgdGhpcyAgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uLCBpZiB0aGUgd2luZG93IHBhcmFtZXRlciBpcyBudWxsIG9yIHRoZSBzdHIgcGFyYW1ldGVyCisgICAgICAgaXMgbnVsbCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCBidXQgPFNUUk9ORz53aW5zbnN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LCB3aGljaCBhZGRzIGNvbnN0IHF1YWxpZmllcnMgdG8gdGhlIGFyZ3VtZW50cy4KKworICAgICAgIFRoZSAgU2luZ2xlICBVbml4ICBTcGVjaWZpY2F0aW9uLCAgVmVyc2lvbiAgMiAgc3RhdGVzIHRoYXQKKyAgICAgICA8U1RST05HPmluc25zdHI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2luc25zdHI8L1NUUk9ORz4gcGVyZm9ybSB3cmFwcGluZy4gIFRoaXMgIGlzICBwcm9iYWJseQorICAgICAgIGFuIGVycm9yLCBzaW5jZSBpdCBtYWtlcyB0aGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBpbmNvbnNpcy0KKyAgICAgICB0ZW50LiAgQWxzbywgbm8gaW1wbGVtZW50YXRpb24gb2YgIGN1cnNlcyAgZG9jdW1lbnRzICB0aGlzCisgICAgICAgaW5jb25zaXN0ZW5jeS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19pbnN0ci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5zdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGFlMzllCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfaW5zdHIuM3guaHRtbApAQCAtMCwwICsxLDExOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2luc3RyLjN4LHYgMS4xMyAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5zdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luc3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbnN0cjwvU1RST05HPiwgIDxTVFJPTkc+aW5uc3RyPC9TVFJPTkc+LCA8U1RST05HPndpbnN0cjwvU1RST05HPiwgPFNUUk9ORz53aW5uc3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbm5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW4tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW5uc3RyPC9TVFJPTkc+IC0gZ2V0IGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgZnJvbSBhICA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluc3RyKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmlubnN0cihjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbm5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5zdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5uc3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiAgPFNUUk9ORz5tdndpbm5zdHIoV0lORE9XPC9TVFJPTkc+ICA8U1RST05HPip3aW4sPC9TVFJPTkc+ICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHJldHVybiAgYSAgc3RyaW5nICBvZiAgY2hhcmFjdGVycyAgaW4gIDxFTT5zdHI8L0VNPiwKKyAgICAgICBleHRyYWN0ZWQgIHN0YXJ0aW5nICBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlCisgICAgICAgbmFtZWQgd2luZG93LiAgQXR0cmlidXRlcyBhcmUgc3RyaXBwZWQgIGZyb20gIHRoZSAgY2hhcmFjLQorICAgICAgIHRlcnMuICAgVGhlICBmb3VyICBmdW5jdGlvbnMgIHdpdGggIDxFTT5uPC9FTT4gYXMgdGhlIGxhc3QgYXJndW1lbnQKKyAgICAgICByZXR1cm4gYSBsZWFkaW5nICBzdWJzdHJpbmcgIGF0ICBtb3N0ICA8RU0+bjwvRU0+ICBjaGFyYWN0ZXJzICBsb25nCisgICAgICAgKGV4Y2x1c2l2ZSBvZiB0aGUgdHJhaWxpbmcgTlVMKS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsICBvZiB0aGUgZnVuY3Rpb25zIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUsIG9yIHRoZSBudW0tCisgICAgICAgYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgcmVhZCBpbnRvIHRoZSBzdHJpbmcuCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gIHRoaXMgIGltcGxlbWVudGEtCisgICAgICAgdGlvbiwgaWYgdGhlIHdpbmRvdyBwYXJhbWV0ZXIgaXMgbnVsbCBvciB0aGUgc3RyIHBhcmFtZXRlcgorICAgICAgIGlzIG51bGwsIGEgemVybyBpcyByZXR1cm5lZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCA8U1RST05HPndpbm5zdHI8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBTVnI0IGRvZXMgbm90IGRvY3VtZW50IHdoZXRoZXIgYSBsZW5ndGggbGltaXQgaW5jbHVkZXMgIG9yCisgICAgICAgZXhjbHVkZXMgdGhlIHRyYWlsaW5nIE5VTC4KKworICAgICAgIFRoZSAgbmN1cnNlcyBsaWJyYXJ5IGV4dGVuZHMgdGhlIFhTSSBkZXNjcmlwdGlvbiBieSBhbGxvdy0KKyAgICAgICBpbmcgYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgPEVNPm48L0VNPi4gIEluIHRoaXMgY2FzZSwgIHRoZSAgZnVuY3Rpb25zCisgICAgICAgcmV0dXJuIHRoZSBzdHJpbmcgZW5kaW5nIGF0IHRoZSByaWdodCBtYXJnaW4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19pbndzdHIuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX2lud3N0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTEzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19pbndzdHIuM3guaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2lud3N0ci4zeCx2IDEuNSAyMDA2LzAyLzI1IDIxOjIwOjIwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW53c3RyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbndzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW53c3RyPC9TVFJPTkc+LCAgPFNUUk9ORz5pbm53c3RyPC9TVFJPTkc+LCAgPFNUUk9ORz53aW53c3RyPC9TVFJPTkc+LCA8U1RST05HPndpbm53c3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW53c3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5ud3N0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12d2lud3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbm53c3RyPC9TVFJPTkc+IC0gZ2V0IGEgc3RyaW5nIG9mIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiBjaGFyYWN0ZXJzCisgICAgICAgZnJvbSBhIGN1cnNlcyB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbndzdHIod2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbm53c3RyKHdjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW53c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbm53c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbndzdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbm53c3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW53c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbm53c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIHJldHVybiAgYSBzdHJpbmcgb2YgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IGNoYXJhY3RlcnMgaW4KKyAgICAgICA8RU0+d3N0cjwvRU0+LCBleHRyYWN0ZWQgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluCisgICAgICAgdGhlICBuYW1lZCB3aW5kb3cuICBBdHRyaWJ1dGVzIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBjaGFyLQorICAgICAgIGFjdGVycy4gIFRoZSBmb3VyIGZ1bmN0aW9ucyB3aXRoIDxFTT5uPC9FTT4gYXMgIHRoZSAgbGFzdCAgYXJndW1lbnQKKyAgICAgICByZXR1cm4gYSBsZWFkaW5nIHN1YnN0cmluZyBhdCBtb3N0IDxFTT5uPC9FTT4gYnl0ZXMgbG9uZyAoZXhjbHVzaXZlCisgICAgICAgb2YgdGhlIHRyYWlsaW5nIE5VTCkuICBUcmFuc2ZlciBzdG9wcyBhdCB0aGUgIGVuZCAgb2YgIHRoZQorICAgICAgIGN1cnJlbnQgIGxpbmUsICBvciAgd2hlbiAgPEVNPm48L0VNPiAgYnl0ZXMgaGF2ZSBiZWVuIHN0b3JlZCBhdCB0aGUKKyAgICAgICBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5IDxFTT53c3RyPC9FTT4uCisKKyAgICAgICBJZiB0aGUgc2l6ZSA8RU0+bjwvRU0+IGlzIG5vdCBsYXJnZSAgZW5vdWdoICB0byAgc3RvcmUgIGEgIGNvbXBsZXRlCisgICAgICAgY2hhcmFjdGVyLCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCByb3V0aW5lcyBleGNlcHQgPFNUUk9ORz53aW5ud3N0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUuIFVwb24gc3VjY2Vzc2Z1bCBjb20tCisgICAgICAgcGxldGlvbiwgdGhlICo8U1RST05HPmlud3N0cjwvU1RST05HPiByb3V0aW5lcyByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPiwgYW5kIHRoZSAgKjxTVFJPTkc+aW5ud3N0cjwvU1RST05HPgorICAgICAgIHJvdXRpbmVzICByZXR1cm4gIHRoZSAgbnVtYmVyICBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB0aGUKKyAgICAgICBzdHJpbmcuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmNDFkMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sCkBAIC0wLDAgKzEsMjA1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2tlcm5lbC4zeCx2IDEuMTUgMjAwNS8wNS8xNSAxNjoxODoxMyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2tlcm5lbCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfa2VybmVsIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmRlZl9wcm9nX21vZGU8L1NUUk9ORz4sIDxTVFJPTkc+ZGVmX3NoZWxsX21vZGU8L1NUUk9ORz4sIDxTVFJPTkc+cmVzZXRfcHJvZ19tb2RlPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+cmVzZXRfc2hlbGxfbW9kZTwvU1RST05HPiwgPFNUUk9ORz5yZXNldHR5PC9TVFJPTkc+LCA8U1RST05HPnNhdmV0dHk8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0c3l4PC9TVFJPTkc+LCA8U1RST05HPnNldHN5eDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnJpcG9mZmxpbmU8L1NUUk9ORz4sIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+bmFwbXM8L1NUUk9ORz4gLSBsb3ctbGV2ZWwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWZfcHJvZ19tb2RlKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVmX3NoZWxsX21vZGUodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yZXNldF9wcm9nX21vZGUodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yZXNldF9zaGVsbF9tb2RlKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cmVzZXR0eSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNhdmV0dHkodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Z2V0c3l4KGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+c2V0c3l4KGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yaXBvZmZsaW5lKGludDwvU1RST05HPiA8U1RST05HPmxpbmUsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCppbml0KShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qLDwvU1RST05HPiA8U1RST05HPmludCkpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y3Vyc19zZXQoaW50PC9TVFJPTkc+IDxTVFJPTkc+dmlzaWJpbGl0eSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uYXBtcyhpbnQ8L1NUUk9ORz4gPFNUUk9ORz5tcyk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmb2xsb3dpbmcgIHJvdXRpbmVzICBnaXZlIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdmFyaW91cworICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGNhcGFiaWxpdGllcy4gIFRoZXNlcyByb3V0aW5lcyB0eXBpY2FsbHkgIGFyZSAgdXNlZAorICAgICAgIGluc2lkZSBsaWJyYXJ5IHJvdXRpbmVzLgorCisgICAgICAgVGhlICA8U1RST05HPmRlZl9wcm9nX21vZGU8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5kZWZfc2hlbGxfbW9kZTwvU1RST05HPiAgcm91dGluZXMgc2F2ZSB0aGUKKyAgICAgICBjdXJyZW50IHRlcm1pbmFsIG1vZGVzIGFzIHRoZSAgInByb2dyYW0iICAoaW4gIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+KSAgb3IKKyAgICAgICAic2hlbGwiICAgKG5vdCAgaW4gIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+KSAgc3RhdGUgIGZvciAgdXNlICBieSAgdGhlICA8U1RST05HPnJlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+c2V0X3Byb2dfbW9kZTwvU1RST05HPiBhbmQgPFNUUk9ORz5yZXNldF9zaGVsbF9tb2RlPC9TVFJPTkc+IHJvdXRpbmVzLiAgVGhpcyBpcyBkb25lCisgICAgICAgYXV0b21hdGljYWxseSBieSA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4uICBUaGVyZSBpcyBvbmUgc3VjaCBzYXZlIGFyZWEgZm9yCisgICAgICAgZWFjaCBzY3JlZW4gY29udGV4dCBhbGxvY2F0ZWQgYnkgPFNUUk9ORz5uZXd0ZXJtKCk8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5yZXNldF9wcm9nX21vZGU8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cmVzZXRfc2hlbGxfbW9kZTwvU1RST05HPiByb3V0aW5lcyAgcmVzdG9yZQorICAgICAgIHRoZSAgdGVybWluYWwgIHRvICJwcm9ncmFtIiAoaW4gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4pIG9yICJzaGVsbCIgKG91dCBvZgorICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+KSBzdGF0ZS4gIFRoZXNlIGFyZSAgZG9uZSAgYXV0b21hdGljYWxseSAgYnkgIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+CisgICAgICAgYW5kLCAgYWZ0ZXIgIGFuICA8U1RST05HPmVuZHdpbjwvU1RST05HPiwgYnkgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiwgc28gdGhleSBub3JtYWxseSBhcmUKKyAgICAgICBub3QgY2FsbGVkLgorCisgICAgICAgVGhlIDxTVFJPTkc+cmVzZXR0eTwvU1RST05HPiBhbmQgPFNUUk9ORz5zYXZldHR5PC9TVFJPTkc+ICByb3V0aW5lcyAgc2F2ZSAgYW5kICByZXN0b3JlICB0aGUKKyAgICAgICBzdGF0ZSAgb2YgIHRoZSAgdGVybWluYWwgbW9kZXMuICA8U1RST05HPnNhdmV0dHk8L1NUUk9ORz4gc2F2ZXMgdGhlIGN1cnJlbnQKKyAgICAgICBzdGF0ZSBpbiBhIGJ1ZmZlciBhbmQgPFNUUk9ORz5yZXNldHR5PC9TVFJPTkc+IHJlc3RvcmVzIHRoZSBzdGF0ZSAgdG8gIHdoYXQKKyAgICAgICBpdCB3YXMgYXQgdGhlIGxhc3QgY2FsbCB0byA8U1RST05HPnNhdmV0dHk8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Z2V0c3l4PC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyB0aGUgY3VycmVudCBjb29yZGluYXRlcyBvZiB0aGUKKyAgICAgICB2aXJ0dWFsIHNjcmVlbiBjdXJzb3IgaW4gPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPi4gIElmIDxTVFJPTkc+bGVhdmVvazwvU1RST05HPiBpcyBjdXJyZW50bHkKKyAgICAgICA8U1RST05HPlRSVUU8L1NUUk9ORz4sICB0aGVuIDxTVFJPTkc+LTE8L1NUUk9ORz4sPFNUUk9ORz4tMTwvU1RST05HPiBpcyByZXR1cm5lZC4gIElmIGxpbmVzIGhhdmUgYmVlbiByZW1vdmVkCisgICAgICAgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4sIHVzaW5nIDxTVFJPTkc+cmlwb2ZmbGluZTwvU1RST05HPiwgPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPiAgaW4tCisgICAgICAgY2x1ZGUgIHRoZXNlIGxpbmVzOyB0aGVyZWZvcmUsIDxFTT55PC9FTT4gYW5kIDxFTT54PC9FTT4gc2hvdWxkIGJlIHVzZWQgb25seQorICAgICAgIGFzIGFyZ3VtZW50cyBmb3IgPFNUUk9ORz5zZXRzeXg8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5zZXRzeXg8L1NUUk9ORz4gcm91dGluZSBzZXRzIHRoZSB2aXJ0dWFsIHNjcmVlbiBjdXJzb3IgdG8gPEVNPnk8L0VNPiwgPEVNPng8L0VNPi4KKyAgICAgICBJZiA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+IGFyZSBib3RoIDxTVFJPTkc+LTE8L1NUUk9ORz4sIHRoZW4gPFNUUk9ORz5sZWF2ZW9rPC9TVFJPTkc+IGlzIHNldC4gIFRoZSB0d28gcm91LQorICAgICAgIHRpbmVzIDxTVFJPTkc+Z2V0c3l4PC9TVFJPTkc+IGFuZCA8U1RST05HPnNldHN5eDwvU1RST05HPiBhcmUgZGVzaWduZWQgdG8gYmUgdXNlZCBieSAgYSAgbGktCisgICAgICAgYnJhcnkgIHJvdXRpbmUsICB3aGljaCBtYW5pcHVsYXRlcyA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3dzIGJ1dCBkb2VzCisgICAgICAgbm90IHdhbnQgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mICB0aGUgIHByb2dyYW0ncworICAgICAgIGN1cnNvci4gICBUaGUgbGlicmFyeSByb3V0aW5lIHdvdWxkIGNhbGwgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4gYXQgdGhlIGJlLQorICAgICAgIGdpbm5pbmcsIGRvIGl0cyBtYW5pcHVsYXRpb24gb2YgIGl0cyAgb3duICB3aW5kb3dzLCAgZG8gIGEKKyAgICAgICA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiAgb24gIGl0cyAgd2luZG93cywgY2FsbCA8U1RST05HPnNldHN5eDwvU1RST05HPiwgYW5kIHRoZW4gY2FsbAorICAgICAgIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5yaXBvZmZsaW5lPC9TVFJPTkc+IHJvdXRpbmUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBzYW1lIGZhY2lsaS0KKyAgICAgICB0eSAgdGhhdCAgPFNUUk9ORz5zbGtfaW5pdDwvU1RST05HPiAgW3NlZSAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+XSB1c2VzIHRvIHJlZHVjZSB0aGUKKyAgICAgICBzaXplIG9mIHRoZSBzY3JlZW4uICAgPFNUUk9ORz5yaXBvZmZsaW5lPC9TVFJPTkc+ICBtdXN0ICBiZSAgY2FsbGVkICBiZWZvcmUKKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gb3IgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IGlzIGNhbGxlZC4gIElmIDxFTT5saW5lPC9FTT4gaXMgcG9zaXRpdmUsIGEgbGluZQorICAgICAgIGlzIHJlbW92ZWQgZnJvbSB0aGUgdG9wIG9mIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+OyBpZiA8RU0+bGluZTwvRU0+IGlzIG5lZ2F0aXZlLCAgYQorICAgICAgIGxpbmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBib3R0b20uICBXaGVuIHRoaXMgaXMgZG9uZSBpbnNpZGUKKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4sIHRoZSByb3V0aW5lIDxTVFJPTkc+aW5pdDwvU1RST05HPiAoc3VwcGxpZWQgYnkgdGhlIHVzZXIpIGlzIGNhbGxlZAorICAgICAgIHdpdGggIHR3byBhcmd1bWVudHM6IGEgd2luZG93IHBvaW50ZXIgdG8gdGhlIG9uZS1saW5lIHdpbi0KKyAgICAgICBkb3cgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kIGFuIGludGVnZXIgd2l0aCB0aGUgbnVtYmVyCisgICAgICAgb2YgY29sdW1ucyBpbiB0aGUgd2luZG93LiAgSW5zaWRlIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91LQorICAgICAgIHRpbmUsIHRoZSBpbnRlZ2VyIHZhcmlhYmxlcyA8U1RST05HPkxJTkVTPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+Q09MUzwvU1RST05HPiAgKGRlZmluZWQgIGluCisgICAgICAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+KSBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUgYW5kIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4KKyAgICAgICBvciA8U1RST05HPmRvdXBkYXRlPC9TVFJPTkc+IG11c3Qgbm90IGJlIGNhbGxlZC4gIEl0IGlzIGFsbG93YWJsZSAgdG8gIGNhbGwKKyAgICAgICA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCisKKyAgICAgICA8U1RST05HPnJpcG9mZmxpbmU8L1NUUk9ORz4gIGNhbiAgYmUgY2FsbGVkIHVwIHRvIGZpdmUgdGltZXMgYmVmb3JlIGNhbGxpbmcKKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gb3IgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4gcm91dGluZSBzZXRzIHRoZSBjdXJzb3Igc3RhdGUgaXMgc2V0ICB0byAgaW4tCisgICAgICAgdmlzaWJsZSwgIG5vcm1hbCwgIG9yIHZlcnkgdmlzaWJsZSBmb3IgPFNUUk9ORz52aXNpYmlsaXR5PC9TVFJPTkc+IGVxdWFsIHRvCisgICAgICAgPFNUUk9ORz4wPC9TVFJPTkc+LCA8U1RST05HPjE8L1NUUk9ORz4sIG9yIDxTVFJPTkc+MjwvU1RST05HPiByZXNwZWN0aXZlbHkuICBJZiAgdGhlICB0ZXJtaW5hbCAgc3VwcG9ydHMgIHRoZQorICAgICAgIDxFTT52aXNpYmlsaXR5PC9FTT4gIHJlcXVlc3RlZCwgIHRoZSAgcHJldmlvdXMgIDxFTT5jdXJzb3I8L0VNPiBzdGF0ZSBpcyByZS0KKyAgICAgICB0dXJuZWQ7IG90aGVyd2lzZSwgPFNUUk9ORz5FUlI8L1NUUk9ORz4gaXMgcmV0dXJuZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uYXBtczwvU1RST05HPiByb3V0aW5lIGlzIHVzZWQgdG8gc2xlZXAgZm9yIDxFTT5tczwvRU0+IG1pbGxpc2Vjb25kcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgRXhjZXB0IGZvciA8U1RST05HPmN1cnNfc2V0PC9TVFJPTkc+LCB0aGVzZSByb3V0aW5lcyBhbHdheXMgcmV0dXJuIDxTVFJPTkc+T0s8L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPmN1cnNfc2V0PC9TVFJPTkc+IHJldHVybnMgdGhlIHByZXZpb3VzIGN1cnNvciBzdGF0ZSwgb3IgPFNUUk9ORz5FUlI8L1NUUk9ORz4gaWYgIHRoZQorICAgICAgIHJlcXVlc3RlZCA8RU0+dmlzaWJpbGl0eTwvRU0+IGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgICBYL09wZW4gIGRlZmluZXMgIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiB0aGlzIGltcGxlbWVudGEtCisgICAgICAgdGlvbgorCisgICAgICAgICAgICAgIDxTVFJPTkc+ZGVmX3Byb2dfbW9kZTwvU1RST05HPiwgPFNUUk9ORz5kZWZfc2hlbGxfbW9kZTwvU1RST05HPiwgPFNUUk9ORz5yZXNldF9wcm9nX21vZGU8L1NUUk9ORz4sIDxTVFJPTkc+cmUtPC9TVFJPTkc+CisgICAgICAgICAgICAgIDxTVFJPTkc+c2V0X3NoZWxsX21vZGU8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIHdhcyAgbm90ICBpbmktCisgICAgICAgICAgICAgICAgICAgdGlhbGl6ZWQsICBvciAgaWYgIHRoZSAgSS9PIGNhbGwgdG8gb2J0YWluIHRoZQorICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsIHNldHRpbmdzIGZhaWxzLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+cmlwb2ZmbGluZTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgIGlmICB0aGUgIG1heGltdW0gIG51bWJlciAgb2YKKyAgICAgICAgICAgICAgICAgICByaXBwZWQtb2ZmICBsaW5lcyBleGNlZWRzIHRoZSBtYXhpbXVtIChOUklQUyA9CisgICAgICAgICAgICAgICAgICAgNSkuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+Z2V0c3l4PC9TVFJPTkc+IGlzIGEgbWFjcm8sIHNvIDxTVFJPTkc+JmFtcDs8L1NUUk9ORz4gaXMgbm90IG5lY2Vzc2FyeSAgYmVmb3JlCisgICAgICAgdGhlIHZhcmlhYmxlcyA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+LgorCisgICAgICAgT2xkZXIgIFNWcjQgIG1hbiAgcGFnZXMgIHdhcm4gIHRoYXQgIHRoZSAgcmV0dXJuICB2YWx1ZSBvZgorICAgICAgIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4gImlzIGN1cnJlbnRseSAgaW5jb3JyZWN0Ii4gICBUaGlzICBpbXBsZW1lbnRhdGlvbgorICAgICAgIGdldHMgIGl0ICByaWdodCwgYnV0IGl0IG1heSBiZSB1bndpc2UgdG8gY291bnQgb24gdGhlIGNvci0KKyAgICAgICByZWN0bmVzcyBvZiB0aGUgcmV0dXJuIHZhbHVlIGFueXdoZXJlIGVsc2UuCisKKyAgICAgICBCb3RoIG5jdXJzZXMgYW5kIFNWcjQgd2lsbCAgY2FsbCAgPFNUUk9ORz5jdXJzX3NldDwvU1RST05HPiAgaW4gIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+ICBpZgorICAgICAgIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4gIGhhcyAgYmVlbiAgY2FsbGVkICB0byBtYWtlIHRoZSBjdXJzb3Igb3RoZXIgdGhhbgorICAgICAgIG5vcm1hbCwgaS5lLiwgZWl0aGVyIGludmlzaWJsZSBvciB2ZXJ5IHZpc2libGUuICBUaGVyZSAgaXMKKyAgICAgICBubyAgd2F5ICBmb3IgbmN1cnNlcyB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgY3Vyc29yIHN0YXRlCisgICAgICAgdG8gcmVzdG9yZSB0aGF0LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbnMgPFNUUk9ORz5zZXRzeXg8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Z2V0c3l4PC9TVFJPTkc+IGFyZSBub3QgZGVzY3JpYmVkICBpbiAgdGhlCisgICAgICAgWFNJICBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuICBBbGwgb3RoZXIgZnVuY3Rpb25zIGFyZSBhcworICAgICAgIGRlc2NyaWJlZCBpbiBYU0kgQ3Vyc2VzLgorCisgICAgICAgVGhlIFNWcjQgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgPFNUUk9ORz5zZXRzeXg8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Z2V0c3l4PC9TVFJPTkc+IGFzIGhhdi0KKyAgICAgICBpbmcgIHJldHVybiAgdHlwZSAgaW50LiAgVGhpcyAgaXMgIG1pc2xlYWRpbmcsIGFzIHRoZXkgYXJlCisgICAgICAgbWFjcm9zIHdpdGggbm8gZG9jdW1lbnRlZCBzZW1hbnRpY3MgZm9yIHRoZSByZXR1cm4gIHZhbHVlLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+Y3Vyc19yZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5mcmVzaCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX2xlZ2FjeS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfbGVnYWN5LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkZTU5MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX2xlZ2FjeS4zeC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfbGVnYWN5LjN4LHYgMS4xIDIwMDcvMDQvMDcgMjM6NTQ6MjkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19sZWdhY3kgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2xlZ2FjeSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19sZWdhY3kuM3guaHRtbCI+Y3Vyc19sZWdhY3koM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5nZXRiZWd4PC9TVFJPTkc+LCA8U1RST05HPmdldGJlZ3k8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0Y3VyeDwvU1RST05HPiwgPFNUUk9ORz5nZXRjdXJ5PC9TVFJPTkc+LCA8U1RST05HPmdldG1heHg8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0bWF4eTwvU1RST05HPiwgPFNUUk9ORz5nZXQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5wYXJ4PC9TVFJPTkc+LCA8U1RST05HPmdldHBhcnk8L1NUUk9ORz4gLSBnZXQgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gY3Vyc29yIGFuZCB3aW5kb3cgY29vcmRpbmF0ZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRiZWd4KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0YmVneShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldGN1cngoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRjdXJ5KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0bWF4eChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldG1heHkoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRwYXJ4KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0cGFyeShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5nZXRiZWd5PC9TVFJPTkc+IGFuZCA8U1RST05HPmdldGJlZ3g8L1NUUk9ORz4gZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZSBkYXRhICBhcworICAgICAgIDxTVFJPTkc+Z2V0YmVneXg8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Z2V0Y3VyeTwvU1RST05HPiBhbmQgPFNUUk9ORz5nZXRjdXJ4PC9TVFJPTkc+IGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNhbWUgZGF0YSBhcworICAgICAgIDxTVFJPTkc+Z2V0eXg8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5nZXRtYXh5PC9TVFJPTkc+IGFuZCA8U1RST05HPmdldG1heHg8L1NUUk9ORz4gZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZSBkYXRhICBhcworICAgICAgIDxTVFJPTkc+Z2V0bWF4eXg8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Z2V0cGFyeTwvU1RST05HPiBhbmQgPFNUUk9ORz5nZXRwYXJ4PC9TVFJPTkc+IGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNhbWUgZGF0YSBhcworICAgICAgIDxTVFJPTkc+Z2V0cGFyeXg8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYW4gaW50ZWdlciwgb3IgRVJSICBpZiAgdGhlICB3aW5kb3cKKyAgICAgICBwYXJhbWV0ZXIgaXMgbnVsbC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBBbGwgIG9mICB0aGVzZSBpbnRlcmZhY2VzIGFyZSBwcm92aWRlZCBhcyBtYWNyb3MgYW5kIGZ1bmMtCisgICAgICAgdGlvbnMuICBUaGUgbWFjcm9zIGFyZSBzdXBwcmVzc2VkIChhbmQgb25seSB0aGUgIGZ1bmN0aW9ucworICAgICAgIHByb3ZpZGVkKSAgd2hlbiAgPFNUUk9ORz5OQ1VSU0VTX09QQVFVRTwvU1RST05HPiAgaXMgZGVmaW5lZC4gIFRoZSBzdGFuZGFyZAorICAgICAgIGZvcm1zIHN1Y2ggYXMgPFNUUk9ORz5nZXR5eDwvU1RST05HPiBtdXN0IGJlIGltcGxlbWVudGVkIGFzIG1hY3JvcywgYW5kIChpbgorICAgICAgIHRoaXMgaW1wbGVtZW50YXRpb24pIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBmdW5jdGlvbnMKKyAgICAgICBkZXNjcmliZWQgaGVyZSwgdG8gYXZvaWQgcmVsaWFuY2Ugb24gaW50ZXJuYWwgIGRldGFpbHMgIG9mCisgICAgICAgdGhlIFdJTkRPVyBzdHJ1Y3R1cmUuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbQorICAgICAgIFYgaW1wbGVtZW50YXRpb25zLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHl4LjN4Lmh0bWwiPmN1cnNfZ2V0eXgoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19sZWdhY3kuM3guaHRtbCI+Y3Vyc19sZWdhY3koM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfbW91c2UuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA5NDgyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfbW91c2UuM3guaHRtbApAQCAtMCwwICsxLDMwOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19tb3VzZS4zeCx2IDEuMzAgMjAwNi8xMi8zMCAyMzo0MzozNCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX21vdXNlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19tb3VzZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Z2V0bW91c2U8L1NUUk9ORz4sIDxTVFJPTkc+dW5nZXRtb3VzZTwvU1RST05HPiwgPFNUUk9ORz5tb3VzZW1hc2s8L1NUUk9ORz4sIDxTVFJPTkc+d2VuY2xvc2U8L1NUUk9ORz4sIDxTVFJPTkc+bW91c2VfdHJhZm88L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53bW91c2VfdHJhZm88L1NUUk9ORz4sIDxTVFJPTkc+bW91c2VpbnRlcnZhbDwvU1RST05HPiAtIG1vdXNlIGludGVyZmFjZSB0aHJvdWdoCisgICAgICAgY3Vyc2VzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+dHlwZWRlZjwvU1RST05HPiA8U1RST05HPnVuc2lnbmVkPC9TVFJPTkc+IDxTVFJPTkc+bG9uZzwvU1RST05HPiA8U1RST05HPm1tYXNrX3Q7PC9TVFJPTkc+CisKKyAgICAgICB0eXBlZGVmIHN0cnVjdAorICAgICAgIHsKKyAgICAgICAgICAgc2hvcnQgaWQ7ICAgICAgICAgPEVNPi8qPC9FTT4gPEVNPklEPC9FTT4gPEVNPnRvPC9FTT4gPEVNPmRpc3Rpbmd1aXNoPC9FTT4gPEVNPm11bHRpcGxlPC9FTT4gPEVNPmRldmljZXM8L0VNPiA8RU0+Ki88L0VNPgorICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz56OzwvU1RST05HPiAgICAgIDxFTT4vKjwvRU0+IDxFTT5ldmVudDwvRU0+IDxFTT5jb29yZGluYXRlczwvRU0+IDxFTT4qLzwvRU0+CisgICAgICAgICAgIDxTVFJPTkc+bW1hc2tfdDwvU1RST05HPiA8U1RST05HPmJzdGF0ZTs8L1NUUk9ORz4gICA8RU0+Lyo8L0VNPiA8RU0+YnV0dG9uPC9FTT4gPEVNPnN0YXRlPC9FTT4gPEVNPmJpdHM8L0VNPiA8RU0+Ki88L0VNPgorICAgICAgIDxTVFJPTkc+fTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+TUVWRU5UOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0bW91c2UoTUVWRU5UPC9TVFJPTkc+IDxTVFJPTkc+KmV2ZW50KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVuZ2V0bW91c2UoTUVWRU5UPC9TVFJPTkc+IDxTVFJPTkc+KmV2ZW50KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm1tYXNrX3Q8L1NUUk9ORz4gPFNUUk9ORz5tb3VzZW1hc2sobW1hc2tfdDwvU1RST05HPiA8U1RST05HPm5ld21hc2ssPC9TVFJPTkc+IDxTVFJPTkc+bW1hc2tfdDwvU1RST05HPiA8U1RST05HPipvbGRtYXNrKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz53ZW5jbG9zZShjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5tb3VzZV90cmFmbyhpbnQqPC9TVFJPTkc+IDxTVFJPTkc+cFksPC9TVFJPTkc+IDxTVFJPTkc+aW50KjwvU1RST05HPiA8U1RST05HPnBYLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz50b19zY3JlZW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPndtb3VzZV90cmFmbyhjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVyo8L1NUUk9ORz4gPFNUUk9ORz53aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50KjwvU1RST05HPiA8U1RST05HPnBZLDwvU1RST05HPiA8U1RST05HPmludCo8L1NUUk9ORz4gPFNUUk9ORz5wWCw8L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPnRvX3NjcmVlbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tb3VzZWludGVydmFsKGludDwvU1RST05HPiA8U1RST05HPmVydmFsKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgZnVuY3Rpb25zIHByb3ZpZGUgYW4gaW50ZXJmYWNlIHRvIG1vdXNlIGV2ZW50cyBmcm9tCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPm5jdXJzZXMoM3gpPC9BPjwvU1RST05HPi4gIE1vdXNlIGV2ZW50cyBhcmUgIHJlcHJlc2VudGVkICBieSAgPFNUUk9ORz5LRVlfTU9VU0U8L1NUUk9ORz4KKyAgICAgICBwc2V1ZG8ta2V5IHZhbHVlcyBpbiB0aGUgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4gaW5wdXQgc3RyZWFtLgorCisgICAgICAgVG8gIG1ha2UgbW91c2UgZXZlbnRzIHZpc2libGUsIHVzZSB0aGUgPFNUUk9ORz5tb3VzZW1hc2s8L1NUUk9ORz4gZnVuY3Rpb24uCisgICAgICAgVGhpcyB3aWxsIHNldCB0aGUgbW91c2UgZXZlbnRzIHRvICBiZSAgcmVwb3J0ZWQuICAgQnkgIGRlLQorICAgICAgIGZhdWx0LCAgbm8gIG1vdXNlICBldmVudHMgYXJlIHJlcG9ydGVkLiAgVGhlIGZ1bmN0aW9uIHdpbGwKKyAgICAgICByZXR1cm4gYSBtYXNrIHRvIGluZGljYXRlIHdoaWNoICBvZiAgdGhlICBzcGVjaWZpZWQgIG1vdXNlCisgICAgICAgZXZlbnRzICBjYW4gYmUgcmVwb3J0ZWQ7IG9uIGNvbXBsZXRlIGZhaWx1cmUgaXQgcmV0dXJucyAwLgorICAgICAgIElmIG9sZG1hc2sgaXMgbm9uLU5VTEwsIHRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlICBpbmRpY2F0ZWQKKyAgICAgICBsb2NhdGlvbiAgd2l0aCAgdGhlICBwcmV2aW91cyAgdmFsdWUgb2YgdGhlIGdpdmVuIHdpbmRvdydzCisgICAgICAgbW91c2UgZXZlbnQgbWFzay4KKworICAgICAgIEFzIGEgc2lkZSBlZmZlY3QsIHNldHRpbmcgYSB6ZXJvIG1vdXNlbWFzayAgbWF5ICB0dXJuICBvZmYKKyAgICAgICB0aGUgIG1vdXNlIHBvaW50ZXI7IHNldHRpbmcgYSBub256ZXJvIG1hc2sgbWF5IHR1cm4gaXQgb24uCisgICAgICAgV2hldGhlciB0aGlzIGhhcHBlbnMgaXMgZGV2aWNlLWRlcGVuZGVudC4KKworICAgICAgIEhlcmUgYXJlIHRoZSBtb3VzZSBldmVudCB0eXBlIG1hc2tzIHdoaWNoIG1heSBiZSBkZWZpbmVkOgorCisKKyAgICAgICA8RU0+TmFtZTwvRU0+ICAgICAgICAgICAgICAgICAgICAgPEVNPkRlc2NyaXB0aW9uPC9FTT4KKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCVVRUT04xX1BSRVNTRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDEgZG93bgorICAgICAgIEJVVFRPTjFfUkVMRUFTRUQgICAgICAgICBtb3VzZSBidXR0b24gMSB1cAorICAgICAgIEJVVFRPTjFfQ0xJQ0tFRCAgICAgICAgICBtb3VzZSBidXR0b24gMSBjbGlja2VkCisgICAgICAgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAxIGRvdWJsZSBjbGlja2VkCisgICAgICAgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAxIHRyaXBsZSBjbGlja2VkCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQlVUVE9OMl9QUkVTU0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAyIGRvd24KKyAgICAgICBCVVRUT04yX1JFTEVBU0VEICAgICAgICAgbW91c2UgYnV0dG9uIDIgdXAKKyAgICAgICBCVVRUT04yX0NMSUNLRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDIgY2xpY2tlZAorICAgICAgIEJVVFRPTjJfRE9VQkxFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMiBkb3VibGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjJfVFJJUExFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMiB0cmlwbGUgY2xpY2tlZAorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgQlVUVE9OM19QUkVTU0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAzIGRvd24KKyAgICAgICBCVVRUT04zX1JFTEVBU0VEICAgICAgICAgbW91c2UgYnV0dG9uIDMgdXAKKyAgICAgICBCVVRUT04zX0NMSUNLRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDMgY2xpY2tlZAorICAgICAgIEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMyBkb3VibGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjNfVFJJUExFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMyB0cmlwbGUgY2xpY2tlZAorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEJVVFRPTjRfUFJFU1NFRCAgICAgICAgICBtb3VzZSBidXR0b24gNCBkb3duCisgICAgICAgQlVUVE9ONF9SRUxFQVNFRCAgICAgICAgIG1vdXNlIGJ1dHRvbiA0IHVwCisgICAgICAgQlVUVE9ONF9DTElDS0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiA0IGNsaWNrZWQKKyAgICAgICBCVVRUT040X0RPVUJMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDQgZG91YmxlIGNsaWNrZWQKKyAgICAgICBCVVRUT040X1RSSVBMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDQgdHJpcGxlIGNsaWNrZWQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCVVRUT041X1BSRVNTRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDUgZG93bgorICAgICAgIEJVVFRPTjVfUkVMRUFTRUQgICAgICAgICBtb3VzZSBidXR0b24gNSB1cAorICAgICAgIEJVVFRPTjVfQ0xJQ0tFRCAgICAgICAgICBtb3VzZSBidXR0b24gNSBjbGlja2VkCisgICAgICAgQlVUVE9ONV9ET1VCTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiA1IGRvdWJsZSBjbGlja2VkCisgICAgICAgQlVUVE9ONV9UUklQTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiA1IHRyaXBsZSBjbGlja2VkCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQlVUVE9OX1NISUZUICAgICAgICAgICAgIHNoaWZ0IHdhcyBkb3duIGR1cmluZyBidXR0b24gc3RhdGUgY2hhbmdlCisgICAgICAgQlVUVE9OX0NUUkwgICAgICAgICAgICAgIGNvbnRyb2wgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKKyAgICAgICBCVVRUT05fQUxUICAgICAgICAgICAgICAgYWx0IHdhcyBkb3duIGR1cmluZyBidXR0b24gc3RhdGUgY2hhbmdlCisgICAgICAgQUxMX01PVVNFX0VWRU5UUyAgICAgICAgIHJlcG9ydCBhbGwgYnV0dG9uIHN0YXRlIGNoYW5nZXMKKyAgICAgICBSRVBPUlRfTU9VU0VfUE9TSVRJT04gICAgcmVwb3J0IG1vdXNlIG1vdmVtZW50CisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICBPbmNlIGEgY2xhc3Mgb2YgbW91c2UgZXZlbnRzIGhhdmUgYmVlbiBtYWRlIHZpc2libGUgIGluICBhCisgICAgICAgd2luZG93LCBjYWxsaW5nIHRoZSA8U1RST05HPndnZXRjaDwvU1RST05HPiBmdW5jdGlvbiBvbiB0aGF0IHdpbmRvdyBtYXkgcmUtCisgICAgICAgdHVybiA8U1RST05HPktFWV9NT1VTRTwvU1RST05HPiBhcyBhbiBpbmRpY2F0b3IgdGhhdCBhIG1vdXNlIGV2ZW50IGhhcyBiZWVuCisgICAgICAgcXVldWVkLiAgIFRvIHJlYWQgdGhlIGV2ZW50IGRhdGEgYW5kIHBvcCB0aGUgZXZlbnQgb2ZmIHRoZQorICAgICAgIHF1ZXVlLCBjYWxsIDxTVFJPTkc+Z2V0bW91c2U8L1NUUk9ORz4uICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDxTVFJPTkc+T0s8L1NUUk9ORz4gIGlmICBhCisgICAgICAgbW91c2UgIGV2ZW50ICBpcyBhY3R1YWxseSB2aXNpYmxlIGluIHRoZSBnaXZlbiB3aW5kb3csIDxTVFJPTkc+RVJSPC9TVFJPTkc+CisgICAgICAgb3RoZXJ3aXNlLiAgV2hlbiA8U1RST05HPmdldG1vdXNlPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5PSzwvU1RST05HPiwgdGhlICBkYXRhICBkZXBvc2l0ZWQKKyAgICAgICBhcyAgeSAgYW5kICB4ICBpbiAgdGhlIGV2ZW50IHN0cnVjdHVyZSBjb29yZGluYXRlcyB3aWxsIGJlCisgICAgICAgc2NyZWVuLXJlbGF0aXZlIGNoYXJhY3Rlci1jZWxsIGNvb3JkaW5hdGVzLiAgVGhlICByZXR1cm5lZAorICAgICAgIHN0YXRlICBtYXNrICB3aWxsIGhhdmUgZXhhY3RseSBvbmUgYml0IHNldCB0byBpbmRpY2F0ZSB0aGUKKyAgICAgICBldmVudCB0eXBlLgorCisgICAgICAgVGhlIDxTVFJPTkc+dW5nZXRtb3VzZTwvU1RST05HPiBmdW5jdGlvbiBiZWhhdmVzICBhbmFsb2dvdXNseSAgdG8gIDxTVFJPTkc+dW5nZXRjaDwvU1RST05HPi4KKyAgICAgICBJdCAgcHVzaGVzIGEgPFNUUk9ORz5LRVlfTU9VU0U8L1NUUk9ORz4gZXZlbnQgb250byB0aGUgaW5wdXQgcXVldWUsIGFuZCBhcy0KKyAgICAgICBzb2NpYXRlcyB3aXRoIHRoYXQgZXZlbnQgdGhlIGdpdmVuIHN0YXRlIGRhdGEgYW5kICBzY3JlZW4tCisgICAgICAgcmVsYXRpdmUgY2hhcmFjdGVyLWNlbGwgY29vcmRpbmF0ZXMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+d2VuY2xvc2U8L1NUUk9ORz4gIGZ1bmN0aW9uICB0ZXN0cyAgd2hldGhlciAgYSAgZ2l2ZW4gIHBhaXIgb2YKKyAgICAgICBzY3JlZW4tcmVsYXRpdmUgY2hhcmFjdGVyLWNlbGwgY29vcmRpbmF0ZXMgaXMgZW5jbG9zZWQgIGJ5CisgICAgICAgYSAgZ2l2ZW4gIHdpbmRvdywgcmV0dXJuaW5nIFRSVUUgaWYgaXQgaXMgYW5kIEZBTFNFIG90aGVyLQorICAgICAgIHdpc2UuICBJdCBpcyB1c2VmdWwgZm9yIGRldGVybWluaW5nICB3aGF0ICBzdWJzZXQgIG9mICB0aGUKKyAgICAgICBzY3JlZW4gd2luZG93cyBlbmNsb3NlIHRoZSBsb2NhdGlvbiBvZiBhIG1vdXNlIGV2ZW50LgorCisgICAgICAgVGhlIDxTVFJPTkc+d21vdXNlX3RyYWZvPC9TVFJPTkc+IGZ1bmN0aW9uIHRyYW5zZm9ybXMgYSBnaXZlbiBwYWlyIG9mIGNvb3ItCisgICAgICAgZGluYXRlcyBmcm9tIHN0ZHNjci1yZWxhdGl2ZSAgY29vcmRpbmF0ZXMgIHRvICBjb29yZGluYXRlcworICAgICAgIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiB3aW5kb3cgb3IgdmljZSB2ZXJzYS4gIFBsZWFzZSByZW1lbS0KKyAgICAgICBiZXIsIHRoYXQgc3Rkc2NyLXJlbGF0aXZlIGNvb3JkaW5hdGVzIGFyZSBub3QgYWx3YXlzIGlkZW4tCisgICAgICAgdGljYWwgIHRvIHdpbmRvdy1yZWxhdGl2ZSBjb29yZGluYXRlcyBkdWUgdG8gdGhlIG1lY2hhbmlzbQorICAgICAgIHRvIHJlc2VydmUgbGluZXMgb24gdG9wIG9yIGJvdHRvbSBvZiB0aGUgc2NyZWVuIGZvciAgb3RoZXIKKyAgICAgICBwdXJwb3NlcyAoc2VlIHRoZSA8U1RST05HPnJpcG9mZmxpbmUoKTwvU1RST05HPiBhbmQgPFNUUk9ORz5zbGtfaW5pdDwvU1RST05HPiBjYWxscywgZm9yIGV4LQorICAgICAgIGFtcGxlKS4gIElmIHRoZSBwYXJhbWV0ZXIgPFNUUk9ORz50b19zY3JlZW48L1NUUk9ORz4gaXMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+LCB0aGUgIHBvaW50ZXJzCisgICAgICAgPFNUUk9ORz5wWSw8L1NUUk9ORz4gPFNUUk9ORz5wWDwvU1RST05HPiBtdXN0IHJlZmVyZW5jZSB0aGUgY29vcmRpbmF0ZXMgb2YgYSBsb2NhdGlvbiBpbnNpZGUKKyAgICAgICB0aGUgd2luZG93IDxTVFJPTkc+d2luPC9TVFJPTkc+LiAgVGhleSBhcmUgY29udmVydGVkIHRvIHdpbmRvdy1yZWxhdGl2ZSBjby0KKyAgICAgICBvcmRpbmF0ZXMgIGFuZCByZXR1cm5lZCB0aHJvdWdoIHRoZSBwb2ludGVycy4gIElmIHRoZSBjb24tCisgICAgICAgdmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+LiAgSWYgb25lCisgICAgICAgb2YgIHRoZSAgcGFyYW1ldGVycyB3YXMgTlVMTCBvciB0aGUgbG9jYXRpb24gaXMgbm90IGluc2lkZQorICAgICAgIHRoZSB3aW5kb3csIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4gaXMgcmV0dXJuZWQuICBJZiA8U1RST05HPnRvX3NjcmVlbjwvU1RST05HPiBpcyA8U1RST05HPkZBTFNFPC9TVFJPTkc+LCB0aGUKKyAgICAgICBwb2ludGVycyAgPFNUUk9ORz5wWSw8L1NUUk9ORz4gIDxTVFJPTkc+cFg8L1NUUk9ORz4gIG11c3QgIHJlZmVyZW5jZSB3aW5kb3ctcmVsYXRpdmUgY29vcmRpLQorICAgICAgIG5hdGVzLiAgVGhleSBhcmUgY29udmVydGVkIHRvIHN0ZHNjci1yZWxhdGl2ZSAgY29vcmRpbmF0ZXMKKyAgICAgICBpZiAgdGhlICB3aW5kb3cgPFNUUk9ORz53aW48L1NUUk9ORz4gZW5jbG9zZXMgdGhpcyBwb2ludC4gIEluIHRoaXMgY2FzZSB0aGUKKyAgICAgICBmdW5jdGlvbiByZXR1cm5zIDxTVFJPTkc+VFJVRTwvU1RST05HPi4gIElmIG9uZSBvZiB0aGUgcGFyYW1ldGVycyAgaXMgIE5VTEwKKyAgICAgICBvciAgdGhlIHBvaW50IGlzIG5vdCBpbnNpZGUgdGhlIHdpbmRvdywgPFNUUk9ORz5GQUxTRTwvU1RST05HPiBpcyByZXR1cm5lZC4KKyAgICAgICBQbGVhc2Ugbm90aWNlLCB0aGF0IHRoZSByZWZlcmVuY2VkICBjb29yZGluYXRlcyAgYXJlICBvbmx5CisgICAgICAgcmVwbGFjZWQgIGJ5ICB0aGUgY29udmVydGVkIGNvb3JkaW5hdGVzIGlmIHRoZSB0cmFuc2Zvcm1hLQorICAgICAgIHRpb24gd2FzIHN1Y2Nlc3NmdWwuCisKKyAgICAgICBUaGUgPFNUUk9ORz5tb3VzZV90cmFmbzwvU1RST05HPiBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgc2FtZSB0cmFuc2xhdGlvbiAgYXMKKyAgICAgICA8U1RST05HPndtb3VzZV90cmFmbzwvU1RST05HPiwgdXNpbmcgc3Rkc2NyIGZvciA8U1RST05HPndpbjwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPm1vdXNlaW50ZXJ2YWw8L1NUUk9ORz4gZnVuY3Rpb24gc2V0cyB0aGUgbWF4aW11bSB0aW1lIChpbiB0aG91LQorICAgICAgIHNhbmRzIG9mIGEgc2Vjb25kKSB0aGF0IGNhbiBlbGFwc2UgYmV0d2VlbiBwcmVzcyAgYW5kICByZS0KKyAgICAgICBsZWFzZSAgZXZlbnRzICBmb3IgIHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBhIGNsaWNrLiAgVXNlCisgICAgICAgPFNUUk9ORz5tb3VzZWludGVydmFsKDApPC9TVFJPTkc+IHRvIGRpc2FibGUgY2xpY2sgcmVzb2x1dGlvbi4gIFRoaXMgIGZ1bmMtCisgICAgICAgdGlvbiByZXR1cm5zIHRoZSBwcmV2aW91cyBpbnRlcnZhbCB2YWx1ZS4gIFVzZSA8U1RST05HPm1vdXNlaW50ZXItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52YWwoLTEpPC9TVFJPTkc+IHRvIG9idGFpbiB0aGUgaW50ZXJ2YWwgd2l0aG91dCBhbHRlcmluZyAgaXQuICAgVGhlCisgICAgICAgZGVmYXVsdCBpcyBvbmUgc2l4dGggb2YgYSBzZWNvbmQuCisKKyAgICAgICBOb3RlICB0aGF0ICBtb3VzZSAgZXZlbnRzIHdpbGwgYmUgaWdub3JlZCB3aGVuIGlucHV0IGlzIGluCisgICAgICAgY29va2VkIG1vZGUsIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGJlZXAgd2hlbiBjb29rZWQgbW9kZQorICAgICAgIGlzICBiZWluZyBzaW11bGF0ZWQgaW4gYSB3aW5kb3cgYnkgYSBmdW5jdGlvbiBzdWNoIGFzIDxTVFJPTkc+Z2V0LTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+c3RyPC9TVFJPTkc+IHRoYXQgZXhwZWN0cyBhIGxpbmVmZWVkIGZvciBpbnB1dC1sb29wIHRlcm1pbmF0aW9uLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldG1vdXNlPC9TVFJPTkc+IGFuZCA8U1RST05HPnVuZ2V0bW91c2U8L1NUUk9ORz4gcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gIGZhaWwtCisgICAgICAgdXJlIG9yIDxTVFJPTkc+T0s8L1NUUk9ORz4gdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5nZXRtb3VzZTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IuICBJZiBubyBtb3VzZSBkcml2ZXIgd2FzIGluaS0KKyAgICAgICAgICAgICAgICAgICB0aWFsaXplZCwgb3IgaWYgdGhlIG1hc2sgcGFyYW1ldGVyIGlzIHplcm8sCisKKyAgICAgICAgICAgICAgPFNUUk9ORz51bmdldG1vdXNlPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgRklGTyBpcyBmdWxsLgorCisgICAgICAgPFNUUk9ORz5tb3VzZW1hc2s8L1NUUk9ORz4gcmV0dXJucyB0aGUgbWFzayBvZiByZXBvcnRhYmxlIGV2ZW50cy4KKworICAgICAgIDxTVFJPTkc+bW91c2VpbnRlcnZhbDwvU1RST05HPiByZXR1cm5zIHRoZSBwcmV2aW91cyBpbnRlcnZhbCB2YWx1ZSwgIHVubGVzcworICAgICAgIHRoZSAgdGVybWluYWwgIHdhcyAgbm90IGluaXRpYWxpemVkLiAgSW4gdGhhdCBjYXNlLCBpdCByZS0KKyAgICAgICB0dXJucyB0aGUgbWF4aW11bSBpbnRlcnZhbCB2YWx1ZSAoMTY2KS4KKworICAgICAgIDxTVFJPTkc+d2VuY2xvc2U8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d21vdXNlX3RyYWZvPC9TVFJPTkc+IGFyZSBib29sZWFuIGZ1bmN0aW9ucyAgcmV0dXJuaW5nCisgICAgICAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+IG9yIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4gZGVwZW5kaW5nIG9uIHRoZWlyIHRlc3QgcmVzdWx0LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBjYWxscyAgd2VyZSAgZGVzaWduZWQgIGZvciA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCBhbmQgYXJlIG5vdAorICAgICAgIGZvdW5kIGluIFNWcjQgY3Vyc2VzLCA0LjRCU0QgY3Vyc2VzLCBvciBhbnkgb3RoZXIgcHJldmlvdXMKKyAgICAgICB2ZXJzaW9uIG9mIGN1cnNlcy4KKworICAgICAgIFRoZSBmZWF0dXJlIG1hY3JvIDxTVFJPTkc+TkNVUlNFU19NT1VTRV9WRVJTSU9OPC9TVFJPTkc+IGlzIHByb3ZpZGVkIHNvIHRoZQorICAgICAgIHByZXByb2Nlc3NvciBjYW4gYmUgdXNlZCB0byB0ZXN0ICB3aGV0aGVyICB0aGVzZSAgZmVhdHVyZXMKKyAgICAgICBhcmUgIHByZXNlbnQuICAgSWYgIHRoZSBpbnRlcmZhY2UgaXMgY2hhbmdlZCwgdGhlIHZhbHVlIG9mCisgICAgICAgPFNUUk9ORz5OQ1VSU0VTX01PVVNFX1ZFUlNJT048L1NUUk9ORz4gd2lsbCBiZSBpbmNyZW1lbnRlZC4gICBUaGVzZSAgdmFsdWVzCisgICAgICAgZm9yICA8U1RST05HPk5DVVJTRVNfTU9VU0VfVkVSU0lPTjwvU1RST05HPiBtYXkgYmUgc3BlY2lmaWVkIHdoZW4gY29uZmlndXItCisgICAgICAgaW5nIG5jdXJzZXM6CisKKyAgICAgICAgICAgICAgMSAgaGFzIGRlZmluaXRpb25zIGZvciByZXNlcnZlZCBldmVudHMuICAgVGhlICBtYXNrCisgICAgICAgICAgICAgICAgIHVzZXMgMjggYml0cy4KKworICAgICAgICAgICAgICAyICBhZGRzIGRlZmluaXRpb25zIGZvciBidXR0b24gNSwgcmVtb3ZlcyB0aGUgZGVmaS0KKyAgICAgICAgICAgICAgICAgbml0aW9ucyBmb3IgcmVzZXJ2ZWQgZXZlbnRzLiAgVGhlIG1hc2sgIHVzZXMgIDI5CisgICAgICAgICAgICAgICAgIGJpdHMuCisKKyAgICAgICBUaGUgIG9yZGVyICBvZiB0aGUgPFNUUk9ORz5NRVZFTlQ8L1NUUk9ORz4gc3RydWN0dXJlIG1lbWJlcnMgaXMgbm90IGd1YXJhbi0KKyAgICAgICB0ZWVkLiAgQWRkaXRpb25hbCBmaWVsZHMgbWF5IGJlIGFkZGVkIHRvIHRoZSBzdHJ1Y3R1cmUgIGluCisgICAgICAgdGhlIGZ1dHVyZS4KKworICAgICAgIFVuZGVyICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgdGhlc2UgY2FsbHMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGVpLQorICAgICAgIHRoZXIgeHRlcm0ncyBidWlsdC1pbiBtb3VzZS10cmFja2luZyBBUEkgb3IgIHBsYXRmb3JtLXNwZS0KKyAgICAgICBjaWZpYyBkcml2ZXJzIGluY2x1ZGluZworICAgICAgICAgICAgICBBbGVzc2FuZHJvIFJ1YmluaSdzIGdwbSBzZXJ2ZXIuCisgICAgICAgICAgICAgIEZyZWVCU0Qgc3lzbW91c2UKKyAgICAgICAgICAgICAgT1MvMiBFTVgKKyAgICAgICBJZiAgeW91ICBhcmUgIHVzaW5nICBhbiAgdW5zdXBwb3J0ZWQgIGNvbmZpZ3VyYXRpb24sIG1vdXNlCisgICAgICAgZXZlbnRzIHdpbGwgbm90IGJlIHZpc2libGUgdG8gPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPm5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiAoYW5kIHRoZSAgPFNUUk9ORz5tb3VzZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm1hc2s8L1NUUk9ORz4gZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIDxTVFJPTkc+MDwvU1RST05HPikuCisKKyAgICAgICBJZiAgdGhlICB0ZXJtaW5mbyBlbnRyeSBjb250YWlucyBhIDxTVFJPTkc+WE08L1NUUk9ORz4gc3RyaW5nLCB0aGlzIGlzIHVzZWQKKyAgICAgICBpbiB0aGUgeHRlcm0gbW91c2UgZHJpdmVyIHRvIGNvbnRyb2wgdGhlIHdheSB0aGUgIHRlcm1pbmFsCisgICAgICAgaXMgaW5pdGlhbGl6ZWQgZm9yIG1vdXNlIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0LCBpZiA8U1RST05HPlhNPC9TVFJPTkc+IGlzCisgICAgICAgbm90IGZvdW5kLCBjb3JyZXNwb25kcyB0byBwcml2YXRlIG1vZGUgMTAwMCBvZiB4dGVybToKKyAgICAgICAgICAgICAgXEVbPzEwMDAlPyVwMSV7MX0lPSV0aCVlbCU7CisgICAgICAgVGhlIHogbWVtYmVyIGluIHRoZSBldmVudCBzdHJ1Y3R1cmUgaXMgbm90IHByZXNlbnRseSB1c2VkLgorICAgICAgIEl0ICBpcyAgaW50ZW5kZWQgIGZvciB1c2Ugd2l0aCB0b3VjaCBzY3JlZW5zICh3aGljaCBtYXkgYmUKKyAgICAgICBwcmVzc3VyZS1zZW5zaXRpdmUpICAgb3IgICB3aXRoICAgM0QtbWljZS90cmFja2JhbGxzL3Bvd2VyCisgICAgICAgZ2xvdmVzLgorCisKKzwvUFJFPgorPEgyPkJVR1M8L0gyPjxQUkU+CisgICAgICAgTW91c2UgIGV2ZW50cyB1bmRlciB4dGVybSB3aWxsIG5vdCBpbiBmYWN0IGJlIGlnbm9yZWQgZHVyLQorICAgICAgIGluZyBjb29rZWQgbW9kZSwgaWYgdGhleSBoYXZlIGJlZW4gZW5hYmxlZCAgYnkgIDxTVFJPTkc+bW91c2VtYXNrPC9TVFJPTkc+LgorICAgICAgIEluc3RlYWQsICB0aGUgIHh0ZXJtICBtb3VzZSByZXBvcnQgc2VxdWVuY2Ugd2lsbCBhcHBlYXIgaW4KKyAgICAgICB0aGUgc3RyaW5nIHJlYWQuCisKKyAgICAgICBNb3VzZSBldmVudHMgdW5kZXIgeHRlcm0gd2lsbCBub3QgYmUgZGV0ZWN0ZWQgY29ycmVjdGx5IGluCisgICAgICAgYSAgd2luZG93ICB3aXRoICBpdHMga2V5cGFkIGJpdCBvZmYsIHNpbmNlIHRoZXkgYXJlIGludGVyLQorICAgICAgIHByZXRlZCBhcyBhIHZhcmlldHkgb2YgZnVuY3Rpb24ga2V5LiAgIFlvdXIgIHRlcm1pbmZvICBkZS0KKyAgICAgICBzY3JpcHRpb24gIHNob3VsZCAgaGF2ZSA8U1RST05HPmttb3VzPC9TVFJPTkc+IHNldCB0byAiXEVbTSIgKHRoZSBiZWdpbm5pbmcKKyAgICAgICBvZiB0aGUgcmVzcG9uc2UgZnJvbSB4dGVybSBmb3IgbW91c2UgY2xpY2tzKS4gIE90aGVyICB2YWwtCisgICAgICAgdWVzICBmb3IgIDxTVFJPTkc+a21vdXM8L1NUUk9ORz4gIGFyZSBwZXJtaXR0ZWQsIGJ1dCB1bmRlciB0aGUgc2FtZSBhc3N1bXAtCisgICAgICAgdGlvbiwgaS5lLiwgaXQgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVzcG9uc2UuCisKKyAgICAgICBCZWNhdXNlIHRoZXJlIGFyZSAgbm8gIHN0YW5kYXJkICB0ZXJtaW5hbCAgcmVzcG9uc2VzICB0aGF0CisgICAgICAgd291bGQgIHNlcnZlIHRvIGlkZW50aWZ5IHRlcm1pbmFscyB3aGljaCBzdXBwb3J0IHRoZSB4dGVybQorICAgICAgIG1vdXNlIHByb3RvY29sLCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gYXNzdW1lcyB0aGF0IGlmIHlvdXIgICRURVJNICBlbnZpLQorICAgICAgIHJvbm1lbnQgIHZhcmlhYmxlIGNvbnRhaW5zICJ4dGVybSIsIG9yIDxTVFJPTkc+a21vdXM8L1NUUk9ORz4gaXMgZGVmaW5lZCBpbgorICAgICAgIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbiwgdGhlbiB0aGUgdGVybWluYWwgbWF5IHNlbmQgbW91c2UKKyAgICAgICBldmVudHMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfbW92ZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfbW92ZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzUyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19tb3ZlLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19tb3ZlLjN4LHYgMS4xMiAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfbW92ZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfbW92ZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3ZlLjN4Lmh0bWwiPmN1cnNfbW92ZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdmUuM3guaHRtbCI+Y3Vyc19tb3ZlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1vdmU8L1NUUk9ORz4sIDxTVFJPTkc+d21vdmU8L1NUUk9ORz4gLSBtb3ZlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdyBjdXJzb3IKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tb3ZlKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53bW92ZShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzIG1vdmUgdGhlIGN1cnNvciBhc3NvY2lhdGVkIHdpdGggdGhlIHdpbmRvdworICAgICAgIHRvIGxpbmUgPEVNPnk8L0VNPiBhbmQgY29sdW1uIDxFTT54PC9FTT4uICBUaGlzIHJvdXRpbmUgZG9lcyAgbm90ICBtb3ZlICB0aGUKKyAgICAgICBwaHlzaWNhbCAgY3Vyc29yICBvZiB0aGUgdGVybWluYWwgdW50aWwgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+IGlzIGNhbGxlZC4KKyAgICAgICBUaGUgcG9zaXRpb24gc3BlY2lmaWVkIGlzIHJlbGF0aXZlIHRvIHRoZSB1cHBlciAgbGVmdC1oYW5kCisgICAgICAgY29ybmVyIG9mIHRoZSB3aW5kb3csIHdoaWNoIGlzICgwLDApLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNCBzcGVjaS0KKyAgICAgICBmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzcy0KKyAgICAgICBmdWwgY29tcGxldGlvbi4KKworICAgICAgIFNwZWNpZmljYWxseSwgIHRoZXkgIHJldHVybiBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIKKyAgICAgICBpcyBudWxsLCBvciBpZiB0aGUgcG9zaXRpb24gaXMgb3V0c2lkZSB0aGUgd2luZG93LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPm1vdmU8L1NUUk9ORz4gbWF5IGJlIGEgbWFjcm8uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3ZlLjN4Lmh0bWwiPmN1cnNfbW92ZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX29wYXF1ZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfb3BhcXVlLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwZjFhZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX29wYXF1ZS4zeC5odG1sCkBAIC0wLDAgKzEsMTUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfb3BhcXVlLjN4LHYgMS42IDIwMDcvMDkvMDggMTg6NDk6MTMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19vcGFxdWUgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX29wYXF1ZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pc19jbGVhcmVkPC9TVFJPTkc+LCA8U1RST05HPmlzX2lkbG9rPC9TVFJPTkc+LCA8U1RST05HPmlzX2lkY29rPC9TVFJPTkc+LCA8U1RST05HPmlzX2ltbWVkb2s8L1NUUk9ORz4sIDxTVFJPTkc+aXNfa2V5cGFkPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+aXNfbGVhdmVvazwvU1RST05HPiwgPFNUUk9ORz5pc19ub2RlbGF5PC9TVFJPTkc+LCA8U1RST05HPmlzX3RpbWVvdXQ8L1NUUk9ORz4sIDxTVFJPTkc+aXNfc2Nyb2xsb2s8L1NUUk9ORz4sIDxTVFJPTkc+aXNfc3luY29rPC9TVFJPTkc+CisgICAgICAgLSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cgcHJvcGVydGllcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19jbGVhcmVkKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfaWRjb2soY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19pZGxvayhjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX2ltbWVkb2soY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19rZXlwYWQoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19sZWF2ZW9rKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfbm9kZWxheShjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX25vdGltZW91dChjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX3Njcm9sbG9rKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfc3luY29rKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IDxTVFJPTkc+d2dldHBhcmVudChjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldHNjcnJlZyhjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KnRvcCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4qYm90dG9tKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzICBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgd2hpY2ggcmV0dXJuIHByb3AtCisgICAgICAgZXJ0aWVzIHNldCBpbiB0aGUgV0lORE9XICBzdHJ1Y3R1cmUsICBhbGxvd2luZyAgaXQgIHRvICBiZQorICAgICAgIGBgb3BhcXVlJycgaWYgdGhlIHN5bWJvbCA8U1RST05HPk5DVVJTRVNfT1BBUVVFPC9TVFJPTkc+IGlzIGRlZmluZWQ6CisKKyAgICAgICA8U1RST05HPmlzX2NsZWFyZWQ8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPmNsZWFyb2s8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aXNfaWRjb2s8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPmlkY29rPC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmlzX2lkbG9rPC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gPFNUUk9ORz5pZGxvazwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pc19pbW1lZG9rPC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gPFNUUk9ORz5pbW1lZG9rPC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmlzX2tleXBhZDwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+a2V5cGFkPC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmlzX2xlYXZlb2s8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPmxlYXZlb2s8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aXNfbm9kZWxheTwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+bm9kZWxheTwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pc19ub3RpbWVvdXQ8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPm5vdGltZW91dDwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pc19zY3JvbGxvazwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aXNfc3luY29rPC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gPFNUUk9ORz5zeW5jb2s8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+d2dldHBhcmVudDwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyAgdGhlIHBhcmVudCBXSU5ET1cgcG9pbnRlciBmb3Igc3Vid2luZG93cywgb3IKKyAgICAgICAgICAgIE5VTEwgZm9yIHdpbmRvd3MgaGF2aW5nIG5vIHBhcmVudC4KKworICAgICAgIDxTVFJPTkc+d2dldHNjcnJlZzwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdG9wIGFuZCBib3R0b20gIHJvd3MgIGZvciAgdGhlICBzY3JvbGxpbmcKKyAgICAgICAgICAgIG1hcmdpbiBhcyBzZXQgaW4gPFNUUk9ORz53c2V0c2NycmVnPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYWxsIHJldHVybiBUUlVFIG9yIEZBTFNFLCBleGNlcHQgYXMgbm90ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgQm90aCBhIG1hY3JvIGFuZCBhIGZ1bmN0aW9uIGFyZSBwcm92aWRlZCBmb3IgZWFjaCBuYW1lLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byAgbmN1cnNlcy4gICBUaGV5ICB3ZXJlICBub3QKKyAgICAgICBzdXBwb3J0ZWQgIG9uICBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gIG5jdXJzZXMgIGV4LQorICAgICAgIHRlbnNpb25zIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz5jdXJzX3dpbi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmRvdygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkNGEwNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX291dG9wdHMuM3guaHRtbApAQCAtMCwwICsxLDIzMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX291dG9wdHMuM3gsdiAxLjIxIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19vdXRvcHRzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19vdXRvcHRzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2xlYXJvazwvU1RST05HPiwgPFNUUk9ORz5pZGxvazwvU1RST05HPiwgPFNUUk9ORz5pZGNvazwvU1RST05HPiwgPFNUUk9ORz5pbW1lZG9rPC9TVFJPTkc+LCA8U1RST05HPmxlYXZlb2s8L1NUUk9ORz4sIDxTVFJPTkc+c2V0c2NycmVnPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+d3NldHNjcnJlZzwvU1RST05HPiwgPFNUUk9ORz5zY3JvbGxvazwvU1RST05HPiwgPFNUUk9ORz5ubDwvU1RST05HPiwgPFNUUk9ORz5ub25sPC9TVFJPTkc+IC0gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gb3V0cHV0IG9wdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jbGVhcm9rKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmlkbG9rKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5pZGNvayhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5iZik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+aW1tZWRvayhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5iZik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5sZWF2ZW9rKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNldHNjcnJlZyhpbnQ8L1NUUk9ORz4gPFNUUk9ORz50b3AsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Ym90KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndzZXRzY3JyZWcoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50b3AsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Ym90KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNjcm9sbG9rKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5sKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bm9ubCh2b2lkKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBzZXQgb3B0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc3R5bGUgb2Ygb3V0cHV0CisgICAgICAgd2l0aGluICA8U1RST05HPmN1cnNlczwvU1RST05HPi4gICBBbGwgIG9wdGlvbnMgYXJlIGluaXRpYWxseSA8U1RST05HPkZBTFNFPC9TVFJPTkc+LCB1bmxlc3MKKyAgICAgICBvdGhlcndpc2Ugc3RhdGVkLiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0dXJuICB0aGVzZSAgb3AtCisgICAgICAgdGlvbnMgb2ZmIGJlZm9yZSBjYWxsaW5nIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+LgorCisgICAgICAgSWYgIDxTVFJPTkc+Y2xlYXJvazwvU1RST05HPiBpcyBjYWxsZWQgd2l0aCA8U1RST05HPlRSVUU8L1NUUk9ORz4gYXMgYXJndW1lbnQsIHRoZSBuZXh0IGNhbGwKKyAgICAgICB0byA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+IHdpdGggdGhpcyB3aW5kb3cgd2lsbCBjbGVhciAgdGhlICBzY3JlZW4gIGNvbS0KKyAgICAgICBwbGV0ZWx5ICBhbmQgIHJlZHJhdyB0aGUgZW50aXJlIHNjcmVlbiBmcm9tIHNjcmF0Y2guICBUaGlzCisgICAgICAgaXMgdXNlZnVsIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzY3JlZW4gIGFyZSAgdW5jZXJ0YWluLAorICAgICAgIG9yICBpbiAgc29tZSAgY2FzZXMgZm9yIGEgbW9yZSBwbGVhc2luZyB2aXN1YWwgZWZmZWN0LiAgSWYKKyAgICAgICB0aGUgPEVNPndpbjwvRU0+IGFyZ3VtZW50IHRvIDxTVFJPTkc+Y2xlYXJvazwvU1RST05HPiBpcyB0aGUgZ2xvYmFsIHZhcmlhYmxlIDxTVFJPTkc+Y3Vyc2NyPC9TVFJPTkc+LAorICAgICAgIHRoZSAgbmV4dCAgY2FsbCAgdG8gIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gIHdpdGggIGFueSB3aW5kb3cgY2F1c2VzIHRoZQorICAgICAgIHNjcmVlbiB0byBiZSBjbGVhcmVkIGFuZCByZXBhaW50ZWQgZnJvbSBzY3JhdGNoLgorCisgICAgICAgSWYgPFNUUk9ORz5pZGxvazwvU1RST05HPiBpcyBjYWxsZWQgd2l0aCA8U1RST05HPlRSVUU8L1NUUk9ORz4gYXMgIHNlY29uZCAgYXJndW1lbnQsICA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIGNvbnNpZGVycyB1c2luZyB0aGUgaGFyZHdhcmUgaW5zZXJ0L2RlbGV0ZSBsaW5lIGZlYXR1cmUgb2YKKyAgICAgICB0ZXJtaW5hbHMgc28gZXF1aXBwZWQuICBDYWxsaW5nIDxTVFJPTkc+aWRsb2s8L1NUUk9ORz4gd2l0aCA8U1RST05HPkZBTFNFPC9TVFJPTkc+IGFzIHNlY29uZAorICAgICAgIGFyZ3VtZW50ICBkaXNhYmxlcyAgdXNlICBvZiAgbGluZSAgaW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4KKyAgICAgICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgIGVuYWJsZWQgIG9ubHkgIGlmICB0aGUgIGFwcGxpY2F0aW9uCisgICAgICAgbmVlZHMgIGluc2VydC9kZWxldGUgIGxpbmUsIGZvciBleGFtcGxlLCBmb3IgYSBzY3JlZW4gZWRpLQorICAgICAgIHRvci4gIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpbnNlcnQvZGVsZXRlIGxpbmUKKyAgICAgICB0ZW5kcyAgdG8gIGJlICB2aXN1YWxseSBhbm5veWluZyB3aGVuIHVzZWQgaW4gYXBwbGljYXRpb25zCisgICAgICAgd2hlcmUgaXQgaXMgbm90IHJlYWxseSBuZWVkZWQuICBJZiBpbnNlcnQvZGVsZXRlIGxpbmUgY2FuLQorICAgICAgIG5vdCAgYmUgIHVzZWQsICA8U1RST05HPmN1cnNlczwvU1RST05HPiByZWRyYXdzIHRoZSBjaGFuZ2VkIHBvcnRpb25zIG9mIGFsbAorICAgICAgIGxpbmVzLgorCisgICAgICAgSWYgPFNUUk9ORz5pZGNvazwvU1RST05HPiBpcyBjYWxsZWQgd2l0aCA8U1RST05HPkZBTFNFPC9TVFJPTkc+IGFzIHNlY29uZCAgYXJndW1lbnQsICA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIG5vIGxvbmdlciBjb25zaWRlcnMgdXNpbmcgdGhlIGhhcmR3YXJlIGluc2VydC9kZWxldGUgY2hhci0KKyAgICAgICBhY3RlciBmZWF0dXJlIG9mIHRlcm1pbmFscyBzbyBlcXVpcHBlZC4gIFVzZSBvZiAgY2hhcmFjdGVyCisgICAgICAgaW5zZXJ0L2RlbGV0ZSAgaXMgIGVuYWJsZWQgYnkgZGVmYXVsdC4gIENhbGxpbmcgPFNUUk9ORz5pZGNvazwvU1RST05HPiB3aXRoCisgICAgICAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+IGFzIHNlY29uZCBhcmd1bWVudCByZS1lbmFibGVzIHVzZSBvZiBjaGFyYWN0ZXIgaW5zZXItCisgICAgICAgdGlvbiBhbmQgZGVsZXRpb24uCisKKyAgICAgICBJZiAgPFNUUk9ORz5pbW1lZG9rPC9TVFJPTkc+IGlzIGNhbGxlZCB3aXRoIDxTVFJPTkc+VFJVRTwvU1RST05HPiA8U1RST05HPmFzPC9TVFJPTkc+IDxTVFJPTkc+YXJndW1lbnQ8L1NUUk9ORz4sIGFueSBjaGFuZ2UgaW4KKyAgICAgICB0aGUgd2luZG93IGltYWdlLCBzdWNoIGFzIHRoZSBvbmVzIGNhdXNlZCBieSA8U1RST05HPndhZGRjaCw8L1NUUk9ORz4gPFNUUk9ORz53Y2xyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dG9ib3QsPC9TVFJPTkc+ICA8U1RST05HPndzY3JsPC9TVFJPTkc+LCAgZXRjLiwgIGF1dG9tYXRpY2FsbHkgIGNhdXNlIGEgY2FsbCB0byA8U1RST05HPndyZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmZyZXNoPC9TVFJPTkc+LiAgSG93ZXZlciwgaXQgbWF5IGRlZ3JhZGUgcGVyZm9ybWFuY2UgIGNvbnNpZGVyYWJseSwKKyAgICAgICBkdWUgIHRvIHJlcGVhdGVkIGNhbGxzIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4uICBJdCBpcyBkaXNhYmxlZCBieSBkZS0KKyAgICAgICBmYXVsdC4KKworICAgICAgIE5vcm1hbGx5LCB0aGUgaGFyZHdhcmUgY3Vyc29yIGlzIGxlZnQgYXQgdGhlICBsb2NhdGlvbiAgb2YKKyAgICAgICB0aGUgd2luZG93IGN1cnNvciBiZWluZyByZWZyZXNoZWQuICBUaGUgPFNUUk9ORz5sZWF2ZW9rPC9TVFJPTkc+IG9wdGlvbiBhbC0KKyAgICAgICBsb3dzIHRoZSBjdXJzb3IgdG8gYmUgbGVmdCB3aGVyZXZlciB0aGUgdXBkYXRlIGhhcHBlbnMgIHRvCisgICAgICAgbGVhdmUgIGl0LiAgSXQgaXMgdXNlZnVsIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgdGhlIGN1cnNvcgorICAgICAgIGlzIG5vdCB1c2VkLCBzaW5jZSBpdCByZWR1Y2VzIHRoZSBuZWVkIGZvciBjdXJzb3IgbW90aW9ucy4KKworICAgICAgIFRoZSAgPFNUUk9ORz5zZXRzY3JyZWc8L1NUUk9ORz4gIGFuZCA8U1RST05HPndzZXRzY3JyZWc8L1NUUk9ORz4gcm91dGluZXMgYWxsb3cgdGhlIGFwcGxpY2EtCisgICAgICAgdGlvbiBwcm9ncmFtbWVyIHRvIHNldCBhIHNvZnR3YXJlIHNjcm9sbGluZyAgcmVnaW9uICBpbiAgYQorICAgICAgIHdpbmRvdy4gICA8RU0+dG9wPC9FTT4gIGFuZCA8RU0+Ym90PC9FTT4gYXJlIHRoZSBsaW5lIG51bWJlcnMgb2YgdGhlIHRvcCBhbmQKKyAgICAgICBib3R0b20gbWFyZ2luIG9mIHRoZSBzY3JvbGxpbmcgcmVnaW9uLiAgKExpbmUgMCBpcyB0aGUgdG9wCisgICAgICAgbGluZSAgb2YgdGhlIHdpbmRvdy4pICBJZiB0aGlzIG9wdGlvbiBhbmQgPFNUUk9ORz5zY3JvbGxvazwvU1RST05HPiBhcmUgZW4tCisgICAgICAgYWJsZWQsIGFuIGF0dGVtcHQgdG8gbW92ZSBvZmYgdGhlIGJvdHRvbSBtYXJnaW4gbGluZSBjYXVzLQorICAgICAgIGVzIGFsbCBsaW5lcyBpbiB0aGUgc2Nyb2xsaW5nIHJlZ2lvbiB0byBzY3JvbGwgb25lIGxpbmUgaW4KKyAgICAgICB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmaXJzdCBsaW5lLiAgT25seSAgdGhlICB0ZXh0ICBvZiAgdGhlCisgICAgICAgd2luZG93ICBpcyAgc2Nyb2xsZWQuICAgKE5vdGUgIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbworICAgICAgIHdpdGggdGhlIHVzZSBvZiBhIHBoeXNpY2FsIHNjcm9sbGluZyByZWdpb24gY2FwYWJpbGl0eSAgaW4KKyAgICAgICB0aGUgdGVybWluYWwsIGxpa2UgdGhhdCBpbiB0aGUgVlQxMDAuICBJZiA8U1RST05HPmlkbG9rPC9TVFJPTkc+IGlzIGVuYWJsZWQKKyAgICAgICBhbmQgdGhlIHRlcm1pbmFsIGhhcyBlaXRoZXIgIGEgIHNjcm9sbGluZyAgcmVnaW9uICBvciAgaW4tCisgICAgICAgc2VydC9kZWxldGUgbGluZSBjYXBhYmlsaXR5LCB0aGV5IHdpbGwgcHJvYmFibHkgYmUgdXNlZCBieQorICAgICAgIHRoZSBvdXRwdXQgcm91dGluZXMuKQorCisgICAgICAgVGhlIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4gb3B0aW9uIGNvbnRyb2xzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSAgY3Vyc29yCisgICAgICAgb2YgIGEgIHdpbmRvdyAgaXMgIG1vdmVkICBvZmYgIHRoZSAgZWRnZSAgb2YgdGhlIHdpbmRvdyBvcgorICAgICAgIHNjcm9sbGluZyByZWdpb24sIGVpdGhlciBhcyBhIHJlc3VsdCBvZiBhICBuZXdsaW5lICBhY3Rpb24KKyAgICAgICBvbiAgdGhlICBib3R0b20gIGxpbmUsIG9yIHR5cGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlCisgICAgICAgbGFzdCBsaW5lLiAgSWYgZGlzYWJsZWQsICg8RU0+YmY8L0VNPiBpcyA8U1RST05HPkZBTFNFPC9TVFJPTkc+KSwgdGhlIGN1cnNvciBpcyBsZWZ0CisgICAgICAgb24gIHRoZSBib3R0b20gbGluZS4gIElmIGVuYWJsZWQsICg8RU0+YmY8L0VNPiBpcyA8U1RST05HPlRSVUU8L1NUUk9ORz4pLCB0aGUgd2luZG93CisgICAgICAgaXMgc2Nyb2xsZWQgdXAgb25lIGxpbmUgKE5vdGUgdGhhdCAgdG8gIGdldCAgdGhlICBwaHlzaWNhbAorICAgICAgIHNjcm9sbGluZyAgZWZmZWN0IG9uIHRoZSB0ZXJtaW5hbCwgaXQgaXMgYWxzbyBuZWNlc3NhcnkgdG8KKyAgICAgICBjYWxsIDxTVFJPTkc+aWRsb2s8L1NUUk9ORz4pLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bm9ubDwvU1RST05HPiByb3V0aW5lcyBjb250cm9sICB3aGV0aGVyICB0aGUgIHVuZGVybHlpbmcKKyAgICAgICBkaXNwbGF5ICBkZXZpY2UgIHRyYW5zbGF0ZXMgdGhlIHJldHVybiBrZXkgaW50byBuZXdsaW5lIG9uCisgICAgICAgaW5wdXQsIGFuZCB3aGV0aGVyIGl0IHRyYW5zbGF0ZXMgbmV3bGluZSBpbnRvICByZXR1cm4gIGFuZAorICAgICAgIGxpbmUtZmVlZCAgb24gb3V0cHV0IChpbiBlaXRoZXIgY2FzZSwgdGhlIGNhbGwgPFNUUk9ORz5hZGRjaCgnXG4nKTwvU1RST05HPgorICAgICAgIGRvZXMgdGhlIGVxdWl2YWxlbnQgb2YgcmV0dXJuIGFuZCBsaW5lIGZlZWQgb24gdGhlIHZpcnR1YWwKKyAgICAgICBzY3JlZW4pLiAgIEluaXRpYWxseSwgdGhlc2UgdHJhbnNsYXRpb25zIGRvIG9jY3VyLiAgSWYgeW91CisgICAgICAgZGlzYWJsZSB0aGVtIHVzaW5nIDxTVFJPTkc+bm9ubDwvU1RST05HPiwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2lsbCBiZSBhYmxlIHRvIG1ha2UgIGJldC0KKyAgICAgICB0ZXIgIHVzZSAgb2YgdGhlIGxpbmUtZmVlZCBjYXBhYmlsaXR5LCByZXN1bHRpbmcgaW4gZmFzdGVyCisgICAgICAgY3Vyc29yIG1vdGlvbi4gIEFsc28sIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbGwgdGhlbiBiZSBhYmxlICB0byAgZGV0ZWN0CisgICAgICAgdGhlIHJldHVybiBrZXkuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbnMgPFNUUk9ORz5zZXRzY3JyZWc8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d3NldHNjcnJlZzwvU1RST05HPiByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPiB1cG9uIHN1Yy0KKyAgICAgICBjZXNzIGFuZCA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUuICBBbGwgb3RoZXIgcm91dGluZXMgdGhhdCByZXR1cm4KKyAgICAgICBhbiBpbnRlZ2VyIGFsd2F5cyByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPi4KKworICAgICAgIFgvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCisKKyAgICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCB0aG9zZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgd2luZG93CisgICAgICAgcG9pbnRlciB3aWxsIHJldHVybiBhbiBlcnJvciAgaWYgIHRoZSAgd2luZG93ICBwb2ludGVyICBpcworICAgICAgIG51bGwuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz53Y2xydG9lb2w8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiAgZXJyb3IgIGlmICB0aGUgY3Vyc29yIHBvc2l0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgYWJvdXQgdG8gd3JhcC4KKworICAgICAgICAgICAgICA8U1RST05HPndzZXRzY3JyZWc8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzY3JvbGxpbmcgcmVnaW9uICBsaW0tCisgICAgICAgICAgICAgICAgICAgaXRzIGV4dGVuZCBvdXRzaWRlIHRoZSB3aW5kb3cuCisKKyAgICAgICBYL09wZW4gIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgaW1wbGUtCisgICAgICAgbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzICBudWxsLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LgorCisgICAgICAgVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgaXMgYW1iaWd1b3VzIG9uICB0aGUgIHF1ZXN0aW9uICBvZgorICAgICAgIHdoZXRoZXIgIDxTVFJPTkc+cmF3PC9TVFJPTkc+KCkgIHNob3VsZCAgZGlzYWJsZSB0aGUgQ1JMRiB0cmFuc2xhdGlvbnMgY29uLQorICAgICAgIHRyb2xsZWQgYnkgPFNUUk9ORz5ubDwvU1RST05HPigpIGFuZCA8U1RST05HPm5vbmw8L1NUUk9ORz4oKS4gIEJTRCBjdXJzZXMgZGlkIHR1cm4gb2ZmIHRoZXNlCisgICAgICAgdHJhbnNsYXRpb25zOyAgQVQmYW1wO1QgIGN1cnNlcyAoYXQgbGVhc3QgYXMgbGF0ZSBhcyBTVnIxKSBkaWQKKyAgICAgICBub3QuICBXZSBjaG9vc2UgdG8gZG8gc28sIG9uIHRoZSB0aGVvcnkgdGhhdCBhICBwcm9ncmFtbWVyCisgICAgICAgcmVxdWVzdGluZyAgcmF3ICBpbnB1dCB3YW50cyBhIGNsZWFuIChpZGVhbGx5IDgtYml0IGNsZWFuKQorICAgICAgIGNvbm5lY3Rpb24gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIG5vdCBhbHRlci4KKworICAgICAgIFNvbWUgaGlzdG9yaWMgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBoYWQsICBhcyAgYW4gIHVuZG9jdS0KKyAgICAgICBtZW50ZWQgIGZlYXR1cmUsICB0aGUgIGFiaWxpdHkgIHRvICBkbyAgdGhlICBlcXVpdmFsZW50IG9mCisgICAgICAgPFNUUk9ORz5jbGVhcm9rKC4uLiw8L1NUUk9ORz4gPFNUUk9ORz4xKTwvU1RST05HPiBieSBzYXlpbmcgPFNUUk9ORz50b3VjaHdpbihzdGRzY3IpPC9TVFJPTkc+ICBvciAgPFNUUk9ORz5jbGVhcihzdGQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zY3IpPC9TVFJPTkc+LiAgVGhpcyB3aWxsIG5vdCB3b3JrIHVuZGVyIG5jdXJzZXMuCisKKyAgICAgICBFYXJsaWVyICBTeXN0ZW0gIFYgIGN1cnNlcyAgaW1wbGVtZW50YXRpb25zIHNwZWNpZmllZCB0aGF0CisgICAgICAgd2l0aCA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+IGVuYWJsZWQsIGFueSB3aW5kb3cgbW9kaWZpY2F0aW9uICB0cmlnZ2VyaW5nCisgICAgICAgYSAgc2Nyb2xsIGFsc28gZm9yY2VkIGEgcGh5c2ljYWwgcmVmcmVzaC4gIFhTSSBDdXJzZXMgZG9lcworICAgICAgIG5vdCByZXF1aXJlIHRoaXMsIGFuZCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gYXZvaWRzIGRvaW5nIGl0ICB0byAgcGVyZm9ybQorICAgICAgIGJldHRlciB2ZXJ0aWNhbC1tb3Rpb24gb3B0aW1pemF0aW9uIGF0IDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gdGltZS4KKworICAgICAgIFRoZSAgWFNJICBDdXJzZXMgc3RhbmRhcmQgZG9lcyBub3QgbWVudGlvbiB0aGF0IHRoZSBjdXJzb3IKKyAgICAgICBzaG91bGQgYmUgbWFkZSBpbnZpc2libGUgIGFzICBhICBzaWRlLWVmZmVjdCAgb2YgIDxTVFJPTkc+bGVhdmVvazwvU1RST05HPi4KKyAgICAgICBTVnI0ICBjdXJzZXMgIGRvY3VtZW50YXRpb24gIGRvZXMgIHRoaXMsIGJ1dCB0aGUgY29kZSBkb2VzCisgICAgICAgbm90LiAgVXNlIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4gdG8gbWFrZSB0aGUgY3Vyc29yIGludmlzaWJsZS4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5jbGVhcm9rPC9TVFJPTkc+LCA8U1RST05HPmxlYXZlb2s8L1NUUk9ORz4sIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4sIDxTVFJPTkc+aWRjb2s8L1NUUk9ORz4sIDxTVFJPTkc+bmw8L1NUUk9ORz4sIDxTVFJPTkc+bm9ubDwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5zZXRzY3JyZWc8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIFRoZSA8U1RST05HPmltbWVkb2s8L1NUUk9ORz4gcm91dGluZSBpcyB1c2VmdWwgZm9yIHdpbmRvd3MgdGhhdCBhcmUgdXNlZCBhcworICAgICAgIHRlcm1pbmFsIGVtdWxhdG9ycy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19vdmVybGF5LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19vdmVybGF5LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3MTg2YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX292ZXJsYXkuM3gsdiAxLjE0IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19vdmVybGF5IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19vdmVybGF5IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX292ZXJsYXkuM3guaHRtbCI+Y3Vyc19vdmVybGF5KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+b3ZlcmxheTwvU1RST05HPiwgPFNUUk9ORz5vdmVyd3JpdGU8L1NUUk9ORz4sIDxTVFJPTkc+Y29weXdpbjwvU1RST05HPiAtIG92ZXJsYXkgYW5kIG1hbmlwdWxhdGUKKyAgICAgICBvdmVybGFwcGVkIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvd3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5vdmVybGF5KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KnNyY3dpbiw8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qZHN0d2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm92ZXJ3cml0ZShjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipzcmN3aW4sPC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KmRzdHdpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jb3B5d2luKGNvbnN0PC9TVFJPTkc+ICA8U1RST05HPldJTkRPVzwvU1RST05HPiAgPFNUUk9ORz4qc3Jjd2luLDwvU1RST05HPiAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gIDxTVFJPTkc+KmRzdHdpbiw8L1NUUk9ORz4gIDxTVFJPTkc+aW50PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zbWlucm93LDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21pbmNvbCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kbWlucm93LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRtaW5jb2wsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZG1heHJvdyw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRtYXhjb2wsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+b3ZlcmxheSk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPm92ZXJsYXk8L1NUUk9ORz4gIGFuZCA8U1RST05HPm92ZXJ3cml0ZTwvU1RST05HPiByb3V0aW5lcyBvdmVybGF5IDxFTT5zcmN3aW48L0VNPiBvbiB0b3AKKyAgICAgICBvZiA8RU0+ZHN0d2luPC9FTT4uICA8RU0+c2Nyd2luPC9FTT4gYW5kIDxFTT5kc3R3aW48L0VNPiBhcmUgbm90IHJlcXVpcmVkIHRvICBiZSAgdGhlCisgICAgICAgc2FtZSAgc2l6ZTsgIG9ubHkgIHRleHQgIHdoZXJlICB0aGUgdHdvIHdpbmRvd3Mgb3ZlcmxhcCBpcworICAgICAgIGNvcGllZC4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgPFNUUk9ORz5vdmVybGF5PC9TVFJPTkc+IGlzIG5vbi1kZXN0cnVjdGl2ZQorICAgICAgIChibGFua3MgIGFyZSBub3QgY29waWVkKSB3aGVyZWFzIDxTVFJPTkc+b3ZlcndyaXRlPC9TVFJPTkc+IGlzIGRlc3RydWN0aXZlLgorCisgICAgICAgVGhlIDxTVFJPTkc+Y29weXdpbjwvU1RST05HPiByb3V0aW5lIHByb3ZpZGVzIGEgZmluZXIgZ3JhbnVsYXJpdHkgIG9mICBjb24tCisgICAgICAgdHJvbCBvdmVyIHRoZSA8U1RST05HPm92ZXJsYXk8L1NUUk9ORz4gYW5kIDxTVFJPTkc+b3ZlcndyaXRlPC9TVFJPTkc+IHJvdXRpbmVzLiAgTGlrZSBpbiB0aGUKKyAgICAgICA8U1RST05HPnByZWZyZXNoPC9TVFJPTkc+IHJvdXRpbmUsIGEgcmVjdGFuZ2xlIGlzIHNwZWNpZmllZCBpbiB0aGUgZGVzdGluYS0KKyAgICAgICB0aW9uICB3aW5kb3csICAoPEVNPmRtaW5yb3c8L0VNPiwgIDxFTT5kbWluY29sPC9FTT4pIGFuZCAoPEVNPmRtYXhyb3c8L0VNPiwgPEVNPmRtYXhjb2w8L0VNPiksCisgICAgICAgYW5kIHRoZSB1cHBlci1sZWZ0LWNvcm5lciBjb29yZGluYXRlcyBvZiB0aGUgIHNvdXJjZSAgd2luLQorICAgICAgIGRvdywgKDxFTT5zbWlucm93PC9FTT4sIDxFTT5zbWluY29sPC9FTT4pLiAgSWYgdGhlIGFyZ3VtZW50IDxFTT5vdmVybGF5PC9FTT4gaXMgPFNUUk9ORz50cnVlPC9TVFJPTkc+LAorICAgICAgIHRoZW4gY29weWluZyBpcyBub24tZGVzdHJ1Y3RpdmUsIGFzIGluIDxTVFJPTkc+b3ZlcmxheTwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gIHVwb24gIGZhaWx1cmUsCisgICAgICAgYW5kICA8U1RST05HPk9LPC9TVFJPTkc+ICAoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFgvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiAgdGhpcyAgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uLCAgPFNUUk9ORz5jb3B5d2luPC9TVFJPTkc+LCAgPFNUUk9ORz5vdmVybGF5PC9TVFJPTkc+ICBhbmQgPFNUUk9ORz5vdmVyd3JpdGU8L1NUUk9ORz4gcmV0dXJuIGFuIGVycm9yIGlmCisgICAgICAgZWl0aGVyIG9mIHRoZSB3aW5kb3cgcG9pbnRlcnMgYXJlIG51bGwsIG9yIGlmIHNvbWUgcGFydCBvZgorICAgICAgIHRoZSB3aW5kb3cgd291bGQgYmUgcGxhY2VkIG9mZi1zY3JlZW4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+b3ZlcmxheTwvU1RST05HPiBhbmQgPFNUUk9ORz5vdmVyd3JpdGU8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zCisgICAgICAgKGFkZGluZyB0aGUgY29uc3QgcXVhbGlmaWVycykuICBJdCBmdXJ0aGVyIHNwZWNpZmllcyB0aGVpcgorICAgICAgIGJlaGF2aW9yIGluIHRoZSBwcmVzZW5jZSBvZiBjaGFyYWN0ZXJzIHdpdGggbXVsdGlieXRlIHJlbi0KKyAgICAgICBkaXRpb25zIChub3QgeWV0IHN1cHBvcnRlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uKS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19wYWQuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3BhZC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTcxODEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19wYWQuM3guaHRtbApAQCAtMCwwICsxLDE4NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3BhZC4zeCx2IDEuMTQgMjAwNS8wNS8xNSAxNjoxODo0MyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3BhZCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfcGFkIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm5ld3BhZDwvU1RST05HPiwgPFNUUk9ORz5zdWJwYWQ8L1NUUk9ORz4sIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+cG5vdXRyZWZyZXNoPC9TVFJPTkc+LCA8U1RST05HPnBlY2hvY2hhcjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnBlY2hvX3djaGFyPC9TVFJPTkc+IC0gY3JlYXRlIGFuZCBkaXNwbGF5IDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHBhZHMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qbmV3cGFkKGludDwvU1RST05HPiA8U1RST05HPm5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uY29scyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qc3VicGFkKFdJTkRPVzwvU1RST05HPiA8U1RST05HPipvcmlnLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uY29scyw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ2luX3ksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnaW5feCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wcmVmcmVzaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qcGFkLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBtaW5yb3csPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cG1pbmNvbCw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNtaW5yb3csPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21pbmNvbCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbWF4cm93LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNtYXhjb2wpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cG5vdXRyZWZyZXNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPipwYWQsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cG1pbnJvdyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wbWluY29sLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21pbnJvdyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbWluY29sLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNtYXhyb3csPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21heGNvbCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wZWNob2NoYXIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KnBhZCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wZWNob193Y2hhcihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qcGFkLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPip3Y2gpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPm5ld3BhZDwvU1RST05HPiByb3V0aW5lIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgIG5ldworICAgICAgIHBhZCBkYXRhIHN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMsIDxFTT5ubGluZXM8L0VNPiwKKyAgICAgICBhbmQgY29sdW1ucywgPEVNPm5jb2xzPC9FTT4uICBBIHBhZCBpcyBsaWtlIGEgd2luZG93LCAgZXhjZXB0ICB0aGF0CisgICAgICAgaXQgaXMgbm90IHJlc3RyaWN0ZWQgYnkgdGhlIHNjcmVlbiBzaXplLCBhbmQgaXMgbm90IG5lY2VzLQorICAgICAgIHNhcmlseSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHBhcnQgIG9mICB0aGUgIHNjcmVlbi4KKyAgICAgICBQYWRzIGNhbiBiZSB1c2VkIHdoZW4gYSBsYXJnZSB3aW5kb3cgaXMgbmVlZGVkLCBhbmQgb25seSBhCisgICAgICAgcGFydCBvZiB0aGUgd2luZG93IHdpbGwgYmUgb24gdGhlIHNjcmVlbiBhdCBvbmUgdGltZS4gIEF1LQorICAgICAgIHRvbWF0aWMgcmVmcmVzaGVzIG9mIHBhZHMgKGUuZy4sIGZyb20gc2Nyb2xsaW5nIG9yIGVjaG9pbmcKKyAgICAgICBvZiBpbnB1dCkgZG8gbm90IG9jY3VyLiAgSXQgaXMgbm90IGxlZ2FsIHRvIGNhbGwgIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4KKyAgICAgICB3aXRoICBhICA8RU0+cGFkPC9FTT4gIGFzICBhbiAgYXJndW1lbnQ7ICB0aGUgIHJvdXRpbmVzIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4gb3IKKyAgICAgICA8U1RST05HPnBub3V0cmVmcmVzaDwvU1RST05HPiBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQuICAgTm90ZSAgdGhhdCAgdGhlc2UKKyAgICAgICByb3V0aW5lcyByZXF1aXJlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBzcGVjaWZ5IHRoZSBwYXJ0CisgICAgICAgb2YgdGhlIHBhZCB0byBiZSBkaXNwbGF5ZWQgYW5kIHRoZSBsb2NhdGlvbiBvbiB0aGUgIHNjcmVlbgorICAgICAgIHRvIGJlIHVzZWQgZm9yIHRoZSBkaXNwbGF5LgorCisgICAgICAgVGhlIDxTVFJPTkc+c3VicGFkPC9TVFJPTkc+IHJvdXRpbmUgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdWItCisgICAgICAgd2luZG93IHdpdGhpbiBhICBwYWQgIHdpdGggIHRoZSAgZ2l2ZW4gIG51bWJlciAgb2YgIGxpbmVzLAorICAgICAgIDxFTT5ubGluZXM8L0VNPiwgIGFuZCAgY29sdW1ucywgIDxFTT5uY29sczwvRU0+LiAgIFVubGlrZSA8U1RST05HPnN1YndpbjwvU1RST05HPiwgd2hpY2ggdXNlcworICAgICAgIHNjcmVlbiBjb29yZGluYXRlcywgdGhlIHdpbmRvdyBpcyAgYXQgIHBvc2l0aW9uICAoPEVNPmJlZ2luPC9FTT5fPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgIDxFTT5iZWdpbjwvRU0+XzxFTT55PC9FTT4pICBvbiB0aGUgcGFkLiAgVGhlIHdpbmRvdyBpcyBtYWRlIGluIHRoZSBtaWRkbGUgb2YKKyAgICAgICB0aGUgd2luZG93IDxFTT5vcmlnPC9FTT4sIHNvIHRoYXQgY2hhbmdlcyBtYWRlIHRvIG9uZSB3aW5kb3cgYWZmZWN0CisgICAgICAgYm90aCB3aW5kb3dzLiAgRHVyaW5nIHRoZSB1c2Ugb2YgdGhpcyByb3V0aW5lLCBpdCB3aWxsIG9mLQorICAgICAgIHRlbiBiZSBuZWNlc3NhcnkgdG8gY2FsbCA8U1RST05HPnRvdWNod2luPC9TVFJPTkc+IG9yIDxTVFJPTkc+dG91Y2hsaW5lPC9TVFJPTkc+IG9uIDxFTT5vcmlnPC9FTT4gYmUtCisgICAgICAgZm9yZSBjYWxsaW5nIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5wbm91dHJlZnJlc2g8L1NUUk9ORz4gcm91dGluZXMgYXJlIGFuYWxvZ291cyB0bworICAgICAgIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+IGV4Y2VwdCB0aGF0IHRoZXkgcmVsYXRlIHRvICBwYWRzCisgICAgICAgaW5zdGVhZCAgb2Ygd2luZG93cy4gIFRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIG5lZWRlZAorICAgICAgIHRvIGluZGljYXRlIHdoYXQgcGFydCBvZiB0aGUgcGFkIGFuZCBzY3JlZW4gYXJlICBpbnZvbHZlZC4KKyAgICAgICA8RU0+cG1pbnJvdzwvRU0+ICBhbmQgPEVNPnBtaW5jb2w8L0VNPiBzcGVjaWZ5IHRoZSB1cHBlciBsZWZ0LWhhbmQgY29ybmVyIG9mCisgICAgICAgdGhlIHJlY3RhbmdsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBhZC4gIDxFTT5zbWlucm93PC9FTT4sICA8RU0+c21pbi08L0VNPgorICAgICAgIDxFTT5jb2w8L0VNPiwgPEVNPnNtYXhyb3c8L0VNPiwgYW5kIDxFTT5zbWF4Y29sPC9FTT4gc3BlY2lmeSB0aGUgZWRnZXMgb2YgdGhlIHJlY3Rhbi0KKyAgICAgICBnbGUgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uICBUaGUgIGxvd2VyICByaWdodC1oYW5kCisgICAgICAgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwYWQgaXMgY2FsLQorICAgICAgIGN1bGF0ZWQgZnJvbSB0aGUgc2NyZWVuIGNvb3JkaW5hdGVzLCBzaW5jZSB0aGUgIHJlY3RhbmdsZXMKKyAgICAgICBtdXN0ICBiZSAgdGhlIHNhbWUgc2l6ZS4gIEJvdGggcmVjdGFuZ2xlcyBtdXN0IGJlIGVudGlyZWx5CisgICAgICAgY29udGFpbmVkIHdpdGhpbiB0aGVpciAgcmVzcGVjdGl2ZSAgc3RydWN0dXJlcy4gICBOZWdhdGl2ZQorICAgICAgIHZhbHVlcyBvZiA8RU0+cG1pbnJvdzwvRU0+LCA8RU0+cG1pbmNvbDwvRU0+LCA8RU0+c21pbnJvdzwvRU0+LCBvciA8RU0+c21pbmNvbDwvRU0+IGFyZSB0cmVhdC0KKyAgICAgICBlZCBhcyBpZiB0aGV5IHdlcmUgemVyby4KKworICAgICAgIFRoZSA8U1RST05HPnBlY2hvY2hhcjwvU1RST05HPiByb3V0aW5lIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIGEgY2FsbAorICAgICAgIHRvICA8U1RST05HPmFkZGNoPC9TVFJPTkc+ICBmb2xsb3dlZCBieSBhIGNhbGwgdG8gPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+LCBhIGNhbGwgdG8gPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4KKyAgICAgICBmb2xsb3dlZCBieSBhIGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiwgb3IgYSBjYWxsIHRvICA8U1RST05HPndhZGRjaDwvU1RST05HPiAgZm9sLQorICAgICAgIGxvd2VkICBieSAgYSAgY2FsbCB0byA8U1RST05HPnByZWZyZXNoPC9TVFJPTkc+LiAgVGhlIGtub3dsZWRnZSB0aGF0IG9ubHkgYQorICAgICAgIHNpbmdsZSBjaGFyYWN0ZXIgaXMgYmVpbmcgb3V0cHV0IGlzIHRha2VuIGludG8gIGNvbnNpZGVyYS0KKyAgICAgICB0aW9uICBhbmQsIGZvciBub24tY29udHJvbCBjaGFyYWN0ZXJzLCBhIGNvbnNpZGVyYWJsZSBwZXItCisgICAgICAgZm9ybWFuY2UgZ2FpbiBtaWdodCBiZSBzZWVuIGJ5IHVzaW5nICB0aGVzZSAgcm91dGluZXMgIGluLQorICAgICAgIHN0ZWFkIG9mIHRoZWlyIGVxdWl2YWxlbnRzLiAgSW4gdGhlIGNhc2Ugb2YgPFNUUk9ORz5wZWNob2NoYXI8L1NUUk9ORz4sIHRoZQorICAgICAgIGxhc3QgbG9jYXRpb24gb2YgdGhlIHBhZCBvbiB0aGUgc2NyZWVuIGlzIHJldXNlZCAgZm9yICB0aGUKKyAgICAgICBhcmd1bWVudHMgdG8gPFNUUk9ORz5wcmVmcmVzaDwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5wZWNob193Y2hhcjwvU1RST05HPiAgZnVuY3Rpb24gaXMgdGhlIGFuYWxvZ291cyB3aWRlLWNoYXJhY3RlcgorICAgICAgIGZvcm0gb2YgPFNUUk9ORz5wZWNob2NoYXI8L1NUUk9ORz4uICBJdCBvdXRwdXRzIG9uZSBjaGFyYWN0ZXIgdG8gYSBwYWQgIGFuZAorICAgICAgIGltbWVkaWF0ZWx5ICByZWZyZXNoZXMgdGhlIHBhZC4gIEl0IGRvZXMgdGhpcyBieSBhIGNhbGwgdG8KKyAgICAgICA8U1RST05HPndhZGRfd2NoPC9TVFJPTkc+IGZvbGxvd2VkIGJ5IGEgY2FsbCB0byA8U1RST05HPnByZWZyZXNoPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gIHVwb24gIGZhaWx1cmUKKyAgICAgICBhbmQgIDxTVFJPTkc+T0s8L1NUUk9ORz4gIChTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4KKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIDxTVFJPTkc+TlVMTDwvU1RST05HPiAgb24gIGVycm9yLCAgYW5kCisgICAgICAgc2V0IDxTVFJPTkc+ZXJybm88L1NUUk9ORz4gdG8gPFNUUk9ORz5FTk9NRU08L1NUUk9ORz4uCisKKyAgICAgICBYL09wZW4gIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIEluIHRoaXMgaW0tCisgICAgICAgcGxlbWVudGF0aW9uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5wcmVmcmVzaDwvU1RST05HPiBhbmQgPFNUUk9ORz5wbm91dHJlZnJlc2g8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsCisgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIHdpbmRvdyBpcyBub3QgcmVhbGx5IGEgcGFkIG9yIGlmIHRoZQorICAgICAgICAgICAgICAgICAgIGFyZWEgdG8gcmVmcmVzaCBleHRlbmRzIG9mZi1zY3JlZW4gb3IgIGlmICB0aGUKKyAgICAgICAgICAgICAgICAgICBtaW5pbXVtIGNvb3JkaW5hdGVzIGFyZSBncmVhdGVyIHRoYW4gdGhlIG1heGktCisgICAgICAgICAgICAgICAgICAgbXVtLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+cGVjaG9jaGFyPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IGlzIG5vdCByZWFsbHkgYQorICAgICAgICAgICAgICAgICAgIHBhZCwgIGFuZCB0aGUgYXNzb2NpYXRlZCBjYWxsIHRvIDxTVFJPTkc+d2VjaG9jaGFyPC9TVFJPTkc+IHJlLQorICAgICAgICAgICAgICAgICAgIHR1cm5zIGFuIGVycm9yLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+cGVjaG9fd2NoYXI8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgaXMgbm90IHJlYWxseSBhCisgICAgICAgICAgICAgICAgICAgcGFkLCAgYW5kICB0aGUgIGFzc29jaWF0ZWQgY2FsbCB0byA8U1RST05HPndlY2hvX3djaGFyPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvci4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5wZWNob2NoYXI8L1NUUk9ORz4gbWF5IGJlIGEgbWFjcm8uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlICA0ICBkZXNjcmliZXMgIHRoZXNlICBmdW5jLQorICAgICAgIHRpb25zLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+Y3Vyc19hZGQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmNoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19wcmludC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfcHJpbnQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWY3NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfcHJpbnQuM3guaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3ByaW50LjN4LHYgMS44IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19wcmludCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfcHJpbnQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnQuM3guaHRtbCI+Y3Vyc19wcmludCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1jcHJpbnQ8L1NUUk9ORz4gLSBzaGlwIGJpbmFyeSBkYXRhIHRvIHByaW50ZXIKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tY3ByaW50KGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZGF0YSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5sZW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoaXMgIGZ1bmN0aW9uICB1c2VzIHRoZSA8U1RST05HPm1jNXA8L1NUUk9ORz4gb3IgPFNUUk9ORz5tYzQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bWM1PC9TVFJPTkc+IGNhcGFiaWxpdGllcywKKyAgICAgICBpZiB0aGV5IGFyZSBwcmVzZW50LCB0byAgc2hpcCAgZ2l2ZW4gIGRhdGEgIHRvICBhICBwcmludGVyCisgICAgICAgYXR0YWNoZWQgdG8gdGhlIHRlcm1pbmFsLgorCisgICAgICAgTm90ZSAgdGhhdCAgdGhlIDxTVFJPTkc+bWNwcmludDwvU1RST05HPiBjb2RlIGhhcyBubyB3YXkgdG8gZG8gZmxvdyBjb250cm9sCisgICAgICAgd2l0aCB0aGUgcHJpbnRlciBvciB0byBrbm93IGhvdyAgbXVjaCAgYnVmZmVyaW5nICBpdCAgaGFzLgorICAgICAgIFlvdXIgIGFwcGxpY2F0aW9uICBpcyAgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdGhlIHJhdGUgb2YKKyAgICAgICB3cml0ZXMgdG8gdGhlIHByaW50ZXIgYmVsb3cgaXRzIGNvbnRpbnVvdXMgdGhyb3VnaHB1dCByYXRlCisgICAgICAgKHR5cGljYWxseSAgYWJvdXQgIGhhbGYgIG9mIGl0cyBub21pbmFsIGNwcyByYXRpbmcpLiAgRG90LQorICAgICAgIG1hdHJpeCBwcmludGVycyBhbmQgNi1wYWdlLXBlci1taW51dGUgbGFzZXJzIGNhbiB0eXBpY2FsbHkKKyAgICAgICBoYW5kbGUgIDgwY3BzLCAgc28gYSBnb29kIGNvbnNlcnZhdGl2ZSBydWxlIG9mIHRodW1iIGlzIHRvCisgICAgICAgc2xlZXAgZm9yIGEgc2Vjb25kIGFmdGVyIHNoaXBwaW5nIGVhY2ggODAtY2hhcmFjdGVyICBsaW5lLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+bWNwcmludDwvU1RST05HPiAgZnVuY3Rpb24gIHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4gaWYgdGhlIHdyaXRlIG9wZXJhdGlvbgorICAgICAgIGFib3J0ZWQgZm9yIHNvbWUgcmVhc29uLiAgSW4gdGhpcyBjYXNlLCBlcnJubyB3aWxsIGNvbnRhaW4KKyAgICAgICBlaXRoZXIgIGFuICBlcnJvciAgYXNzb2NpYXRlZCAgd2l0aCA8U1RST05HPndyaXRlKDIpPC9TVFJPTkc+IG9yIG9uZSBvZiB0aGUKKyAgICAgICBmb2xsb3dpbmc6CisKKyAgICAgICBFTk9ERVYKKyAgICAgICAgICAgIENhcGFiaWxpdGllcyBmb3IgcHJpbnRlciByZWRpcmVjdGlvbiBkbyBub3QgZXhpc3QuCisKKyAgICAgICBFTk9NRU0KKyAgICAgICAgICAgIENvdWxkbid0IGFsbG9jYXRlIHN1ZmZpY2llbnQgIG1lbW9yeSAgdG8gIGJ1ZmZlciAgdGhlCisgICAgICAgICAgICBwcmludGVyIHdyaXRlLgorCisgICAgICAgV2hlbiA8U1RST05HPm1jcHJpbnQ8L1NUUk9ORz4gc3VjY2VlZHMsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgICAgICAgYWN0dWFsbHkgc2VudCB0byB0aGUgcHJpbnRlci4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5tY3ByaW50PC9TVFJPTkc+IGNhbGwgd2FzIGRlc2lnbmVkIGZvciA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCBhbmQgaXMgIG5vdAorICAgICAgIGZvdW5kIGluIFNWcjQgY3Vyc2VzLCA0LjRCU0QgY3Vyc2VzLCBvciBhbnkgb3RoZXIgcHJldmlvdXMKKyAgICAgICB2ZXJzaW9uIG9mIGN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5CVUdTPC9IMj48UFJFPgorICAgICAgIFBhZGRpbmcgaW4gdGhlIDxTVFJPTkc+bWM1cDwvU1RST05HPiwgPFNUUk9ORz5tYzQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bWM1PC9TVFJPTkc+IGNhcGFiaWxpdGllcyB3aWxsIG5vdCAgYmUKKyAgICAgICBpbnRlcnByZXRlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfcHJpbnR3LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19wcmludHcuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg4ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfcHJpbnR3LjN4Lmh0bWwKQEAgLTAsMCArMSwxMjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19wcmludHcuM3gsdiAxLjE3IDIwMDYvMTIvMjQgMTY6MDU6MTcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19wcmludHcgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3ByaW50dyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludHcuM3guaHRtbCI+Y3Vyc19wcmludHcoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5wcmludHc8L1NUUk9ORz4sIDxTVFJPTkc+d3ByaW50dzwvU1RST05HPiwgPFNUUk9ORz5tdnByaW50dzwvU1RST05HPiwgPFNUUk9ORz5tdndwcmludHc8L1NUUk9ORz4sIDxTVFJPTkc+dndwcmludHc8L1NUUk9ORz4sIDxTVFJPTkc+dndfcHJpbnR3PC9TVFJPTkc+CisgICAgICAgLSBwcmludCBmb3JtYXR0ZWQgb3V0cHV0IGluIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvd3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wcmludHcoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz4uLi4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3ByaW50dyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12cHJpbnR3KGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndwcmludHcoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+ICA8U1RST05HPipmbXQsPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4uLi4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+ICA8U1RST05HPnZ3cHJpbnR3KFdJTkRPVzwvU1RST05HPiAgPFNUUk9ORz4qd2luLDwvU1RST05HPiAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiA8U1RST05HPnZhX2xpc3Q8L1NUUk9ORz4gPFNUUk9ORz52YXItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5nbGlzdCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz52d19wcmludHcoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiAgPFNUUk9ORz52YV9saXN0PC9TVFJPTkc+ICA8U1RST05HPnZhci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmdsaXN0KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+cHJpbnR3PC9TVFJPTkc+LCAgPFNUUk9ORz53cHJpbnR3PC9TVFJPTkc+LCA8U1RST05HPm12cHJpbnR3PC9TVFJPTkc+IGFuZCA8U1RST05HPm12d3ByaW50dzwvU1RST05HPiByb3V0aW5lcyBhcmUKKyAgICAgICBhbmFsb2dvdXMgdG8gIDxTVFJPTkc+cHJpbnRmPC9TVFJPTkc+ICBbc2VlICA8U1RST05HPjxBIEhSRUY9InByaW50Zi4zLmh0bWwiPnByaW50ZigzKTwvQT48L1NUUk9ORz5dLiAgIEluICBlZmZlY3QsICB0aGUKKyAgICAgICBzdHJpbmcgdGhhdCB3b3VsZCBiZSBvdXRwdXQgYnkgPFNUUk9ORz5wcmludGY8L1NUUk9ORz4gaXMgb3V0cHV0IGluc3RlYWQgYXMKKyAgICAgICB0aG91Z2ggPFNUUk9ORz53YWRkc3RyPC9TVFJPTkc+IHdlcmUgdXNlZCBvbiB0aGUgZ2l2ZW4gd2luZG93LgorCisgICAgICAgVGhlIDxTVFJPTkc+dndwcmludHc8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz53dl9wcmludHc8L1NUUk9ORz4gIHJvdXRpbmVzICBhcmUgIGFuYWxvZ291cyAgdG8KKyAgICAgICA8U1RST05HPnZwcmludGY8L1NUUk9ORz4gIFtzZWUgIDxTVFJPTkc+PEEgSFJFRj0icHJpbnRmLjMuaHRtbCI+cHJpbnRmKDMpPC9BPjwvU1RST05HPl0gIGFuZCAgcGVyZm9ybSAgYSA8U1RST05HPndwcmludHc8L1NUUk9ORz4gdXNpbmcgYQorICAgICAgIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgYSAgPFNUUk9ORz52YV9saXN0PC9TVFJPTkc+LAorICAgICAgIGEgICBwb2ludGVyICAgdG8gIGEgIGxpc3QgIG9mICBhcmd1bWVudHMsICBhcyAgZGVmaW5lZCAgaW4KKyAgICAgICA8U1RST05HPiZsdDtzdGRhcmcuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiAgdXBvbiAgZmFpbHVyZQorICAgICAgIGFuZCAgPFNUUk9ORz5PSzwvU1RST05HPiAgKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbgorICAgICAgIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gIHRoaXMgIGltcGxlbWVudGEtCisgICAgICAgdGlvbiwgIGFuICBlcnJvciAgbWF5ICBiZSAgcmV0dXJuZWQgIGlmIGl0IGNhbm5vdCBhbGxvY2F0ZQorICAgICAgIGVub3VnaCBtZW1vcnkgZm9yIHRoZSBidWZmZXIgdXNlZCB0byBmb3JtYXQgIHRoZSAgcmVzdWx0cy4KKyAgICAgICBJdCB3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbC4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMuICBUaGUgZnVuY3Rpb24gPFNUUk9ORz52d3ByaW50dzwvU1RST05HPiBpcyBtYXJrZWQgVE8gIEJFICBXSVRIRFJBV04sCisgICAgICAgYW5kICBpcyAgdG8gIGJlIHJlcGxhY2VkIGJ5IGEgZnVuY3Rpb24gPFNUUk9ORz52d19wcmludHc8L1NUUk9ORz4gdXNpbmcgdGhlCisgICAgICAgPFNUUk9ORz4mbHQ7c3RkYXJnLmgmZ3Q7PC9TVFJPTkc+IGludGVyZmFjZS4gIFRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uLCBWZXItCisgICAgICAgc2lvbiAgMiAgc3RhdGVzICB0aGF0ICA8U1RST05HPnZ3X3ByaW50dzwvU1RST05HPiAgaXMgcHJlZmVycmVkIHRvIDxTVFJPTkc+dndwcmludHc8L1NUUk9ORz4KKyAgICAgICBzaW5jZSB0aGUgbGF0dGVyICByZXF1aXJlcyAgaW5jbHVkaW5nICA8U1RST05HPiZsdDt2YXJhcmdzLmgmZ3Q7PC9TVFJPTkc+LCAgd2hpY2gKKyAgICAgICBjYW5ub3QgIGJlICB1c2VkIGluIHRoZSBzYW1lIGZpbGUgYXMgPFNUUk9ORz4mbHQ7c3RkYXJnLmgmZ3Q7PC9TVFJPTkc+LiAgVGhpcyBpbS0KKyAgICAgICBwbGVtZW50YXRpb24gdXNlcyA8U1RST05HPiZsdDtzdGRhcmcuaCZndDs8L1NUUk9ORz4gZm9yIGJvdGgsIGJlY2F1c2UgdGhhdCBoZWFkZXIKKyAgICAgICBpcyBpbmNsdWRlZCBpbiA8U1RST05HPiZsdDtjdXJzZXMuaDwvU1RST05HPiZndDsuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InByaW50Zi4zLmh0bWwiPnByaW50ZigzKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+dnByaW50ZigzKTwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwKQEAgLTAsMCArMSwxNzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19yZWZyZXNoLjN4LHYgMS4xMiAyMDA1LzA1LzE1IDE2OjE4OjQ5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfcmVmcmVzaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfcmVmcmVzaCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmRvdXBkYXRlPC9TVFJPTkc+LCA8U1RST05HPnJlZHJhd3dpbjwvU1RST05HPiwgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+LCA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiwgPFNUUk9ORz53cmVkcmF3bG48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiAtIHJlZnJlc2ggPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93cyBhbmQgbGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yZWZyZXNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3JlZnJlc2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53bm91dHJlZnJlc2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kb3VwZGF0ZSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlZHJhd3dpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndyZWRyYXdsbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ19saW5lLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm51bV9saW5lcyk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiBhbmQgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiAgcm91dGluZXMgIChvciAgPFNUUk9ORz53bm91dHJlZnJlc2g8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4pICBtdXN0IGJlIGNhbGxlZCB0byBnZXQgYWN0dWFsIG91dHB1dCB0byB0aGUgdGVyLQorICAgICAgIG1pbmFsLCBhcyBvdGhlciByb3V0aW5lcyAgbWVyZWx5ICBtYW5pcHVsYXRlICBkYXRhICBzdHJ1Yy0KKyAgICAgICB0dXJlcy4gICBUaGUgIHJvdXRpbmUgIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gY29waWVzIHRoZSBuYW1lZCB3aW5kb3cgdG8KKyAgICAgICB0aGUgcGh5c2ljYWwgdGVybWluYWwgc2NyZWVuLCB0YWtpbmcgaW50byBhY2NvdW50IHdoYXQgIGlzCisgICAgICAgYWxyZWFkeSB0aGVyZSB0byBkbyBvcHRpbWl6YXRpb25zLiAgVGhlIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiByb3V0aW5lIGlzCisgICAgICAgdGhlIHNhbWUsIHVzaW5nIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+ICBhcyAgdGhlICBkZWZhdWx0ICB3aW5kb3cuICAgVW5sZXNzCisgICAgICAgPFNUUk9ORz5sZWF2ZW9rPC9TVFJPTkc+ICBoYXMgYmVlbiBlbmFibGVkLCB0aGUgcGh5c2ljYWwgY3Vyc29yIG9mIHRoZSB0ZXItCisgICAgICAgbWluYWwgaXMgbGVmdCBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnNvciBmb3IgdGhhdCAgd2luLQorICAgICAgIGRvdy4KKworICAgICAgIFRoZSAgPFNUUk9ORz53bm91dHJlZnJlc2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4gcm91dGluZXMgYWxsb3cgbXVsdGlwbGUgdXAtCisgICAgICAgZGF0ZXMgd2l0aCBtb3JlIGVmZmljaWVuY3kgdGhhbiA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+IGFsb25lLiAgSW4gIGFkZGktCisgICAgICAgdGlvbiAgdG8gIGFsbCB0aGUgd2luZG93IHN0cnVjdHVyZXMsIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGtlZXBzIHR3byBkYXRhCisgICAgICAgc3RydWN0dXJlcyByZXByZXNlbnRpbmcgdGhlIHRlcm1pbmFsICBzY3JlZW46ICBhICBwaHlzaWNhbAorICAgICAgIHNjcmVlbiwgIGRlc2NyaWJpbmcgIHdoYXQgaXMgYWN0dWFsbHkgb24gdGhlIHNjcmVlbiwgYW5kIGEKKyAgICAgICB2aXJ0dWFsIHNjcmVlbiwgZGVzY3JpYmluZyB3aGF0IHRoZSAgcHJvZ3JhbW1lciAgd2FudHMgIHRvCisgICAgICAgaGF2ZSBvbiB0aGUgc2NyZWVuLgorCisgICAgICAgVGhlICByb3V0aW5lIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gd29ya3MgYnkgZmlyc3QgY2FsbGluZyA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiwKKyAgICAgICB3aGljaCBjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyB0byB0aGUgdmlydHVhbCAgc2NyZWVuLCAgYW5kCisgICAgICAgdGhlbiAgY2FsbGluZyAgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiwgd2hpY2ggY29tcGFyZXMgdGhlIHZpcnR1YWwgc2NyZWVuCisgICAgICAgdG8gdGhlIHBoeXNpY2FsIHNjcmVlbiBhbmQgZG9lcyB0aGUgYWN0dWFsIHVwZGF0ZS4gIElmIHRoZQorICAgICAgIHByb2dyYW1tZXIgd2lzaGVzIHRvIG91dHB1dCBzZXZlcmFsIHdpbmRvd3MgYXQgb25jZSwgYSBzZS0KKyAgICAgICByaWVzIG9mIGNhbGxzIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gcmVzdWx0cyBpbiBhbHRlcm5hdGluZyBjYWxscyAgdG8KKyAgICAgICA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiAgYW5kIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4sIGNhdXNpbmcgc2V2ZXJhbCBidXJzdHMgb2Ygb3V0LQorICAgICAgIHB1dCB0byB0aGUgc2NyZWVuLiAgQnkgZmlyc3QgY2FsbGluZyA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiBmb3IgZWFjaAorICAgICAgIHdpbmRvdywgaXQgaXMgdGhlbiBwb3NzaWJsZSB0byBjYWxsIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4gb25jZSwgcmVzdWx0LQorICAgICAgIGluZyBpbiBvbmx5IG9uZSBidXJzdCBvZiBvdXRwdXQsIHdpdGggZmV3ZXIgdG90YWwgIGNoYXJhYy0KKyAgICAgICB0ZXJzIHRyYW5zbWl0dGVkIGFuZCBsZXNzIENQVSB0aW1lIHVzZWQuICBJZiB0aGUgPEVNPndpbjwvRU0+IGFyZ3UtCisgICAgICAgbWVudCB0byA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+IGlzIHRoZSBnbG9iYWwgdmFyaWFibGUgPFNUUk9ORz5jdXJzY3I8L1NUUk9ORz4sIHRoZSBzY3JlZW4KKyAgICAgICBpcyBpbW1lZGlhdGVseSBjbGVhcmVkIGFuZCByZXBhaW50ZWQgZnJvbSBzY3JhdGNoLgorCisgICAgICAgVGhlIHBocmFzZSAiY29waWVzIHRoZSBuYW1lZCB3aW5kb3cgdG8gdGhlIHZpcnR1YWwgc2NyZWVuIgorICAgICAgIGFib3ZlIGlzIGFtYmlndW91cy4gIFdoYXQgYWN0dWFsbHkgIGhhcHBlbnMgIGlzICB0aGF0ICBhbGwKKyAgICAgICA8RU0+dG91Y2hlZDwvRU0+ICAoY2hhbmdlZCkgIGxpbmVzICBpbiB0aGUgd2luZG93IGFyZSBjb3BpZWQgdG8gdGhlCisgICAgICAgdmlydHVhbCBzY3JlZW4uICBUaGlzIGFmZmVjdHMgcHJvZ3JhbXMgdGhhdCAgdXNlICBvdmVybGFwLQorICAgICAgIHBpbmcgIHdpbmRvd3M7ICBpdCAgbWVhbnMgdGhhdCBpZiB0d28gd2luZG93cyBvdmVybGFwLCB5b3UKKyAgICAgICBjYW4gcmVmcmVzaCB0aGVtIGluIGVpdGhlciBvcmRlciBhbmQgIHRoZSAgb3ZlcmxhcCAgcmVnaW9uCisgICAgICAgd2lsbCBiZSBtb2RpZmllZCBvbmx5IHdoZW4gaXQgaXMgZXhwbGljaXRseSBjaGFuZ2VkLiAgKEJ1dAorICAgICAgIHNlZSB0aGUgc2VjdGlvbiBvbiA8U1RST05HPlBPUlRBQklMSVRZPC9TVFJPTkc+IGJlbG93IGZvciBhICB3YXJuaW5nICBhYm91dAorICAgICAgIGV4cGxvaXRpbmcgdGhpcyBiZWhhdmlvci4pCisKKyAgICAgICBUaGUgPFNUUk9ORz53cmVkcmF3bG48L1NUUk9ORz4gcm91dGluZSBpbmRpY2F0ZXMgdG8gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gdGhhdCBzb21lIHNjcmVlbgorICAgICAgIGxpbmVzIGFyZSBjb3JydXB0ZWQgYW5kIHNob3VsZCBiZSB0aHJvd24gYXdheSBiZWZvcmUgIGFueS0KKyAgICAgICB0aGluZyAgaXMgIHdyaXR0ZW4gIG92ZXIgIHRoZW0uICAgSXQgdG91Y2hlcyB0aGUgaW5kaWNhdGVkCisgICAgICAgbGluZXMgKG1hcmtpbmcgdGhlbSAgY2hhbmdlZCkuICAgVGhlICByb3V0aW5lICA8U1RST05HPnJlZHJhd3dpbjwvU1RST05HPigpCisgICAgICAgdG91Y2hlcyB0aGUgZW50aXJlIHdpbmRvdy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgIHRoYXQgIHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUsCisgICAgICAgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgIG90aGVyICB0aGFuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFgvT3BlbiAgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyBpbS0KKyAgICAgICBwbGVtZW50YXRpb24KKworICAgICAgICAgICAgICA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgIGlmICB0aGUgIHdpbmRvdyAgcG9pbnRlciAgaXMKKyAgICAgICAgICAgICAgICAgICBudWxsLCBvciBpZiB0aGUgd2luZG93IGlzIHJlYWxseSBhIHBhZC4KKworICAgICAgICAgICAgICA8U1RST05HPndyZWRyYXdsbjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuICBlcnJvciAgaWYgIHRoZSBhc3NvY2lhdGVkIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAgICA8U1RST05HPnRvdWNobG48L1NUUk9ORz4gcmV0dXJucyBhbiBlcnJvci4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+IGFuZCA8U1RST05HPnJlZHJhd3dpbjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSAgNCAgZGVzY3JpYmVzICB0aGVzZSAgZnVuYy0KKyAgICAgICB0aW9ucy4KKworICAgICAgIFdoZXRoZXIgIDxTVFJPTkc+d25vdXRyZWZyZXNoKCk8L1NUUk9ORz4gIGNvcGllcyAgdG8gdGhlIHZpcnR1YWwgc2NyZWVuIHRoZQorICAgICAgIGVudGlyZSBjb250ZW50cyBvZiBhIHdpbmRvdyBvciBqdXN0IGl0cyAgY2hhbmdlZCAgcG9ydGlvbnMKKyAgICAgICBoYXMgbmV2ZXIgYmVlbiB3ZWxsLWRvY3VtZW50ZWQgaW4gaGlzdG9yaWMgY3Vyc2VzIHZlcnNpb25zCisgICAgICAgKGluY2x1ZGluZyBTVnI0KS4gIEl0IG1pZ2h0IGJlIHVud2lzZSB0byAgcmVseSAgb24gIGVpdGhlcgorICAgICAgIGJlaGF2aW9yICBpbiAgcHJvZ3JhbXMgIHRoYXQgIG1pZ2h0IGhhdmUgdG8gYmUgbGlua2VkIHdpdGgKKyAgICAgICBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLiAgSW5zdGVhZCwgeW91IGNhbiBkbyBhbiAgZXgtCisgICAgICAgcGxpY2l0ICA8U1RST05HPnRvdWNod2luKCk8L1NUUk9ORz4gYmVmb3JlIHRoZSA8U1RST05HPndub3V0cmVmcmVzaCgpPC9TVFJPTkc+IGNhbGwgdG8gZ3Vhci0KKyAgICAgICBhbnRlZSBhbiBlbnRpcmUtY29udGVudHMgY29weSBhbnl3aGVyZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfc2NhbncuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3NjYW53LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2MThmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX3NjYW53LjN4Lmh0bWwKQEAgLTAsMCArMSwxMjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19zY2Fudy4zeCx2IDEuMTQgMjAwNi8xMi8yNCAxNjowNTo0OSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3NjYW53IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19zY2FudyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+c2Nhbnc8L1NUUk9ORz4sIDxTVFJPTkc+d3NjYW53PC9TVFJPTkc+LCA8U1RST05HPm12c2Nhbnc8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3c2Nhbnc8L1NUUk9ORz4sIDxTVFJPTkc+dndzY2FudzwvU1RST05HPiwgPFNUUk9ORz52d19zY2FudzwvU1RST05HPiAtIGNvbi0KKyAgICAgICB2ZXJ0IGZvcm1hdHRlZCBpbnB1dCBmcm9tIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2NhbncoY2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndzY2FudyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdnNjYW53KGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz4uLi4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3c2NhbncoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZ3X3NjYW53KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+dmFfbGlzdDwvU1RST05HPiA8U1RST05HPnZhcmdsaXN0KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZ3c2NhbncoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz52YV9saXN0PC9TVFJPTkc+IDxTVFJPTkc+dmFyZ2xpc3QpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPnNjYW53PC9TVFJPTkc+LCA8U1RST05HPndzY2FudzwvU1RST05HPiBhbmQgPFNUUk9ORz5tdnNjYW53PC9TVFJPTkc+IHJvdXRpbmVzICBhcmUgIGFuYWxvZ291cyAgdG8KKyAgICAgICA8U1RST05HPnNjYW5mPC9TVFJPTkc+ICBbc2VlIDxTVFJPTkc+PEEgSFJFRj0ic2NhbmYuMy5odG1sIj5zY2FuZigzKTwvQT48L1NUUk9ORz5dLiAgVGhlIGVmZmVjdCBvZiB0aGVzZSByb3V0aW5lcyBpcyBhcworICAgICAgIHRob3VnaCA8U1RST05HPndnZXRzdHI8L1NUUk9ORz4gd2VyZSBjYWxsZWQgb24gdGhlIHdpbmRvdywgYW5kIHRoZSAgcmVzdWx0LQorICAgICAgIGluZyBsaW5lIHVzZWQgYXMgaW5wdXQgZm9yIDxTVFJPTkc+PEEgSFJFRj0ic3NjYW5mLjMuaHRtbCI+c3NjYW5mKDMpPC9BPjwvU1RST05HPi4gIEZpZWxkcyB3aGljaCBkbyBub3QKKyAgICAgICBtYXAgdG8gYSB2YXJpYWJsZSBpbiB0aGUgPEVNPmZtdDwvRU0+IGZpZWxkIGFyZSBsb3N0LgorCisgICAgICAgVGhlIDxTVFJPTkc+dndzY2FudzwvU1RST05HPiBhbmQgPFNUUk9ORz52d19zY2FudzwvU1RST05HPiByb3V0aW5lcyBhcmUgYW5hbG9nb3VzIHRvIDxTVFJPTkc+dnNjYW5mPC9TVFJPTkc+LgorICAgICAgIFRoZXkgcGVyZm9ybSBhIDxTVFJPTkc+d3NjYW53PC9TVFJPTkc+IHVzaW5nIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gIFRoZQorICAgICAgIHRoaXJkIGFyZ3VtZW50IGlzIGEgPEVNPnZhPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+bGlzdDwvRU0+LCBhIHBvaW50ZXIgdG8gYSBsaXN0IG9mICBhcmd1LQorICAgICAgIG1lbnRzLCBhcyBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O3N0ZGFyZy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz52d3NjYW53PC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4gb24gZmFpbHVyZSBhbmQgYW4gaW50ZWdlciBlcXVhbCB0byB0aGUKKyAgICAgICBudW1iZXIgb2YgZmllbGRzIHNjYW5uZWQgb24gc3VjY2Vzcy4KKworICAgICAgIEFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZSAgcmV0dXJuICB2YWx1ZSAgZnJvbSAgdGhlICA8U1RST05HPnNjYW53PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+d3NjYW53PC9TVFJPTkc+LCAgPFNUUk9ORz5tdnNjYW53PC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+bXZ3c2Nhbnc8L1NUUk9ORz4gIHJvdXRpbmVzIHRvIGRldGVybWluZSB0aGUKKyAgICAgICBudW1iZXIgb2YgZmllbGRzIHdoaWNoIHdlcmUgbWFwcGVkIGluIHRoZSBjYWxsLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSAgNCAgZGVzY3JpYmVzICB0aGVzZSAgZnVuYy0KKyAgICAgICB0aW9ucy4gICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnZ3c2Nhbnc8L1NUUk9ORz4gaXMgbWFya2VkIFRPIEJFIFdJVEhEUkFXTiwKKyAgICAgICBhbmQgaXMgdG8gYmUgcmVwbGFjZWQgYnkgYSAgZnVuY3Rpb24gIDxTVFJPTkc+dndfc2Nhbnc8L1NUUk9ORz4gIHVzaW5nICB0aGUKKyAgICAgICA8U1RST05HPiZsdDtzdGRhcmcuaCZndDs8L1NUUk9ORz4gaW50ZXJmYWNlLiAgVGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24sIFZlci0KKyAgICAgICBzaW9uIDIgc3RhdGVzIHRoYXQgPFNUUk9ORz52d19zY2FudzwvU1RST05HPiAgaXMgcHJlZmVycmVkIHRvIDxTVFJPTkc+dndzY2FudzwvU1RST05HPiBzaW5jZQorICAgICAgIHRoZSBsYXR0ZXIgcmVxdWlyZXMgaW5jbHVkaW5nIDxTVFJPTkc+Jmx0O3ZhcmFyZ3MuaCZndDs8L1NUUk9ORz4sIHdoaWNoIGNhbm5vdCBiZQorICAgICAgIHVzZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyA8U1RST05HPiZsdDtzdGRhcmcuaCZndDs8L1NUUk9ORz4uICBUaGlzICBpbXBsZW1lbnRhdGlvbgorICAgICAgIHVzZXMgIDxTVFJPTkc+Jmx0O3N0ZGFyZy5oJmd0OzwvU1RST05HPiBmb3IgYm90aCwgYmVjYXVzZSB0aGF0IGhlYWRlciBpcyBpbmNsdWRlZAorICAgICAgIGluIDxTVFJPTkc+Jmx0O2N1cnNlcy5oPC9TVFJPTkc+Jmd0Oy4KKworICAgICAgIEJvdGggWFNJIGFuZCBUaGUgIFNpbmdsZSAgVW5peCAgU3BlY2lmaWNhdGlvbiwgIFZlcnNpb24gIDIKKyAgICAgICBzdGF0ZSAgdGhhdCAgdGhlc2UgIGZ1bmN0aW9ucyByZXR1cm4gRVJSIG9yIE9LLiAgU2luY2UgdGhlCisgICAgICAgdW5kZXJseWluZyA8U1RST05HPnNjYW5mPC9TVFJPTkc+IGNhbiByZXR1cm4gdGhlIG51bWJlciBvZiAgaXRlbXMgIHNjYW5uZWQsCisgICAgICAgYW5kIHRoZSBTVnI0IGNvZGUgd2FzIGRvY3VtZW50ZWQgdG8gdXNlIHRoaXMgZmVhdHVyZSwgdGhpcworICAgICAgIGlzIHByb2JhYmx5IGFuIGVkaXRpbmcgZXJyb3Igd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gIFhTSSwKKyAgICAgICByYXRoZXIgIHRoYW4gIGJlaW5nIGRvbmUgaW50ZW50aW9uYWxseS4gIFBvcnRhYmxlIGFwcGxpY2EtCisgICAgICAgdGlvbnMgc2hvdWxkIG9ubHkgdGVzdCBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzICBFUlIsICBzaW5jZQorICAgICAgIHRoZSAgT0sgdmFsdWUgKHplcm8pIGlzIGxpa2VseSB0byBiZSBtaXNsZWFkaW5nLiAgT25lIHBvcy0KKyAgICAgICBzaWJsZSB3YXkgdG8gZ2V0IHVzZWZ1bCByZXN1bHRzIHdvdWxkIGJlICB0byAgdXNlICBhICAiJW4iCisgICAgICAgY29udmVyc2lvbiAgYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byBlbnN1cmUgdGhhdAorICAgICAgIHNvbWV0aGluZyB3YXMgcHJvY2Vzc2VkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ic2NhbmYuMy5odG1sIj5zY2FuZigzKTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkNjMyMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19zY3JfZHVtcC4zeCx2IDEuNyAyMDA2LzEyLzI0IDE2OjA1OjQ5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfc2NyX2R1bXAgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3Njcl9kdW1wIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5zY3JfZHVtcDwvU1RST05HPiwgPFNUUk9ORz5zY3JfcmVzdG9yZTwvU1RST05HPiwgPFNUUk9ORz5zY3JfaW5pdDwvU1RST05HPiwgPFNUUk9ORz5zY3Jfc2V0PC9TVFJPTkc+IC0gcmVhZCAod3JpdGUpIGEKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiBzY3JlZW4gZnJvbSAodG8pIGEgZmlsZQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNjcl9kdW1wKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmaWxlbmFtZSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zY3JfcmVzdG9yZShjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZmlsZW5hbWUpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2NyX2luaXQoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZpbGVuYW1lKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNjcl9zZXQoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZpbGVuYW1lKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5zY3JfZHVtcDwvU1RST05HPiByb3V0aW5lIGR1bXBzIHRoZSAgY3VycmVudCAgY29udGVudHMgIG9mICB0aGUKKyAgICAgICB2aXJ0dWFsIHNjcmVlbiB0byB0aGUgZmlsZSA8RU0+ZmlsZW5hbWU8L0VNPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5zY3JfcmVzdG9yZTwvU1RST05HPiAgcm91dGluZSAgc2V0cyAgdGhlIHZpcnR1YWwgc2NyZWVuIHRvIHRoZQorICAgICAgIGNvbnRlbnRzIG9mIDxFTT5maWxlbmFtZTwvRU0+LCB3aGljaCBtdXN0IGhhdmUgYmVlbiAgd3JpdHRlbiAgdXNpbmcKKyAgICAgICA8U1RST05HPnNjcl9kdW1wPC9TVFJPTkc+LiAgIFRoZSAgbmV4dCBjYWxsIHRvIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4gcmVzdG9yZXMgdGhlIHNjcmVlbgorICAgICAgIHRvIHRoZSB3YXkgaXQgbG9va2VkIGluIHRoZSBkdW1wIGZpbGUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zY3JfaW5pdDwvU1RST05HPiByb3V0aW5lIHJlYWRzIGluIHRoZSBjb250ZW50cyBvZiA8RU0+ZmlsZW5hbWU8L0VNPiBhbmQKKyAgICAgICB1c2VzICB0aGVtICB0byBpbml0aWFsaXplIHRoZSA8U1RST05HPmN1cnNlczwvU1RST05HPiBkYXRhIHN0cnVjdHVyZXMgYWJvdXQKKyAgICAgICB3aGF0IHRoZSB0ZXJtaW5hbCBjdXJyZW50bHkgaGFzIG9uIGl0cyBzY3JlZW4uICBJZiB0aGUgZGEtCisgICAgICAgdGEgaXMgZGV0ZXJtaW5lZCB0byBiZSB2YWxpZCwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gYmFzZXMgaXRzIG5leHQgdXBkYXRlCisgICAgICAgb2YgdGhlIHNjcmVlbiBvbiB0aGlzIGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIGNsZWFyaW5nIHRoZQorICAgICAgIHNjcmVlbiAgYW5kIHN0YXJ0aW5nIGZyb20gc2NyYXRjaC4gIDxTVFJPTkc+c2NyX2luaXQ8L1NUUk9ORz4gaXMgdXNlZCBhZnRlcgorICAgICAgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBvciBhIDxTVFJPTkc+c3lzdGVtPC9TVFJPTkc+IGNhbGwgdG8gc2hhcmUgdGhlIHNjcmVlbiB3aXRoICBhbm90aGVyCisgICAgICAgcHJvY2VzcyAgd2hpY2ggIGhhcyBkb25lIGEgPFNUUk9ORz5zY3JfZHVtcDwvU1RST05HPiBhZnRlciBpdHMgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gY2FsbC4KKyAgICAgICBUaGUgZGF0YSBpcyBkZWNsYXJlZCBpbnZhbGlkIGlmIHRoZSB0ZXJtaW5mbyAgY2FwYWJpbGl0aWVzCisgICAgICAgPFNUUk9ORz5ybWN1cDwvU1RST05HPiBhbmQgPFNUUk9ORz5ucnJtYzwvU1RST05HPiBleGlzdDsgYWxzbyBpZiB0aGUgdGVybWluYWwgaGFzIGJlZW4gd3JpdC0KKyAgICAgICB0ZW4gdG8gc2luY2UgdGhlIHByZWNlZGluZyA8U1RST05HPnNjcl9kdW1wPC9TVFJPTkc+IGNhbGwuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zY3Jfc2V0PC9TVFJPTkc+IHJvdXRpbmUgaXMgYSBjb21iaW5hdGlvbiAgb2YgIDxTVFJPTkc+c2NyX3Jlc3RvcmU8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+c2NyX2luaXQ8L1NUUk9ORz4uICAgSXQgIHRlbGxzICB0aGUgcHJvZ3JhbSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbgorICAgICAgIDxFTT5maWxlbmFtZTwvRU0+IGlzIHdoYXQgaXMgY3VycmVudGx5IG9uIHRoZSBzY3JlZW4sIGFuZCBhbHNvIHdoYXQKKyAgICAgICB0aGUgIHByb2dyYW0gIHdhbnRzIG9uIHRoZSBzY3JlZW4uICBUaGlzIGNhbiBiZSB0aG91Z2h0IG9mCisgICAgICAgYXMgYSBzY3JlZW4gaW5oZXJpdGFuY2UgZnVuY3Rpb24uCisKKyAgICAgICBUbyByZWFkICh3cml0ZSkgYSB3aW5kb3cgZnJvbSAodG8pIGEgZmlsZSwgdXNlIHRoZSAgPFNUUk9ORz5nZXR3aW48L1NUUk9ORz4KKyAgICAgICBhbmQgPFNUUk9ORz5wdXR3aW48L1NUUk9ORz4gcm91dGluZXMgW3NlZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPl0uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCAgcm91dGluZXMgIHJldHVybiAgdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+CisgICAgICAgdXBvbiBzdWNjZXNzLgorCisgICAgICAgWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluICB0aGlzICBpbXBsZW1lbnRhLQorICAgICAgIHRpb24sICBlYWNoICB3aWxsICByZXR1cm4gIGFuICBlcnJvciBpZiB0aGUgZmlsZSBjYW5ub3QgYmUKKyAgICAgICBvcGVuZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSAgdGhhdCAgPFNUUk9ORz5zY3JfaW5pdDwvU1RST05HPiwgIDxTVFJPTkc+c2NyX3NldDwvU1RST05HPiwgIGFuZCAgPFNUUk9ORz5zY3JfcmVzdG9yZTwvU1RST05HPiAgbWF5ICBiZQorICAgICAgIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgSXNzdWUgNCwgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMgKGFkZGluZyB0aGUgY29uc3QgcXVhbGlmaWVycykuCisKKyAgICAgICBUaGUgU1ZyNCBkb2NzIG1lcmVseSBzYXkgdW5kZXIgPFNUUk9ORz5zY3JfaW5pdDwvU1RST05HPiB0aGF0IHRoZSBkdW1wIGRhdGEKKyAgICAgICBpcyAgYWxzbyAgY29uc2lkZXJlZCBpbnZhbGlkICJpZiB0aGUgdGltZS1zdGFtcCBvZiB0aGUgdHR5CisgICAgICAgaXMgb2xkIiBidXQgZG8gbm90IGRlZmluZSAib2xkIi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InN5c3RlbS4zLmh0bWwiPnN5c3RlbSgzKTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfc2Nyb2xsLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjQxNTcyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfc2Nyb2xsLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19zY3JvbGwuM3gsdiAxLjEzIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19zY3JvbGwgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3Njcm9sbCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5zY3JvbGw8L1NUUk9ORz4sIDxTVFJPTkc+c2NybDwvU1RST05HPiwgPFNUUk9ORz53c2NybDwvU1RST05HPiAtIHNjcm9sbCBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNjcm9sbChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNjcmwoaW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53c2NybChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5zY3JvbGw8L1NUUk9ORz4gIHJvdXRpbmUgc2Nyb2xscyB0aGUgd2luZG93IHVwIG9uZSBsaW5lLiAgVGhpcworICAgICAgIGludm9sdmVzIG1vdmluZyB0aGUgbGluZXMgaW4gdGhlICB3aW5kb3cgIGRhdGEgIHN0cnVjdHVyZS4KKyAgICAgICBBcyAgYW4gb3B0aW1pemF0aW9uLCBpZiB0aGUgc2Nyb2xsaW5nIHJlZ2lvbiBvZiB0aGUgd2luZG93CisgICAgICAgaXMgdGhlIGVudGlyZSBzY3JlZW4sIHRoZSBwaHlzaWNhbCBzY3JlZW4gbWF5IGJlICBzY3JvbGxlZAorICAgICAgIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgICAgICBGb3IgIHBvc2l0aXZlICA8RU0+bjwvRU0+LCAgdGhlICA8U1RST05HPnNjcmw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d3Njcmw8L1NUUk9ORz4gcm91dGluZXMgc2Nyb2xsIHRoZQorICAgICAgIHdpbmRvdyB1cCA8RU0+bjwvRU0+IGxpbmVzIChsaW5lIDxFTT5pPC9FTT4rPEVNPm48L0VNPiBiZWNvbWVzIDxFTT5pPC9FTT4pOyAgb3RoZXJ3aXNlICBzY3JvbGwKKyAgICAgICB0aGUgIHdpbmRvdyAgZG93biA8RU0+bjwvRU0+IGxpbmVzLiAgVGhpcyBpbnZvbHZlcyBtb3ZpbmcgdGhlIGxpbmVzCisgICAgICAgaW4gdGhlIHdpbmRvdyBjaGFyYWN0ZXIgaW1hZ2Ugc3RydWN0dXJlLiAgVGhlIGN1cnJlbnQgY3VyLQorICAgICAgIHNvciBwb3NpdGlvbiBpcyBub3QgY2hhbmdlZC4KKworICAgICAgIEZvciB0aGVzZSBmdW5jdGlvbnMgdG8gd29yaywgc2Nyb2xsaW5nIG11c3QgYmUgZW5hYmxlZCB2aWEKKyAgICAgICA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlLCBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCAgb25seQorICAgICAgIHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzLQorICAgICAgIGZ1bCBjb21wbGV0aW9uLgorCisgICAgICAgWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKworICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIKKyAgICAgICBpcyAgbnVsbCwgIG9yICBpZiAgc2Nyb2xsaW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSB3aW5kb3csCisgICAgICAgZS5nLiwgd2l0aCA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPnNjcmw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2Nyb2xsPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKyAgICAgICBUaGUgU1ZyNCBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9mIHBoeXMtCisgICAgICAgaWNhbGx5ICBzY3JvbGxpbmcgIGltbWVkaWF0ZWx5IGlmIHRoZSBzY3JvbGwgcmVnaW9uIGlzIHRoZQorICAgICAgIGVudGlyZSBzY3JlZW4gImlzIiAgcGVyZm9ybWVkLCAgbm90ICAibWF5ICBiZSIgIHBlcmZvcm1lZC4KKyAgICAgICBUaGlzICBpbXBsZW1lbnRhdGlvbiAgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0CisgICAgICAgdGhpcyB3aWxsIG9jY3VyLCB0byBsZWF2ZSBvcGVuIHRoZSBwb3NzaWJpbGl0eSBvZiAgc21hcnRlcgorICAgICAgIG9wdGltaXphdGlvbiAgb2YgIG11bHRpcGxlICBzY3JvbGwgYWN0aW9ucyBvbiB0aGUgbmV4dCB1cC0KKyAgICAgICBkYXRlLgorCisgICAgICAgTmVpdGhlciB0aGUgU1ZyNCBub3IgdGhlIFhTSSBkb2N1bWVudGF0aW9uIHNwZWNpZnkgd2hldGhlcgorICAgICAgIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSBvciBjdXJyZW50IGNvbG9yLXBhaXIgb2YgYmxhbmtzIGdlbi0KKyAgICAgICBlcmF0ZWQgYnkgdGhlIHNjcm9sbCBmdW5jdGlvbiBpcyB6ZXJvZWQuICBVbmRlciAgdGhpcyAgaW0tCisgICAgICAgcGxlbWVudGF0aW9uIGl0IGlzLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgWFNJICBDdXJzZXMgIHN0YW5kYXJkLCAgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuYy0KKyAgICAgICB0aW9ucy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc19zbGsuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3Nsay4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NmRjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc19zbGsuM3guaHRtbApAQCAtMCwwICsxLDIxOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3Nsay4zeCx2IDEuMTYgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3NsayAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfc2xrIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnNsa19pbml0PC9TVFJPTkc+LCA8U1RST05HPnNsa19zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX3JlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX25vdXRyZWZyZXNoPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+c2xrX2xhYmVsPC9TVFJPTkc+LCA8U1RST05HPnNsa19jbGVhcjwvU1RST05HPiwgPFNUUk9ORz5zbGtfcmVzdG9yZTwvU1RST05HPiwgPFNUUk9ORz5zbGtfdG91Y2g8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJvbjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnNsa19hdHRyc2V0PC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyb2ZmPC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyX29uPC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyX3NldDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnNsa19hdHRyX29mZjwvU1RST05HPiwgPFNUUk9ORz5zbGtfYXR0cjwvU1RST05HPiwgPFNUUk9ORz5zbGtfY29sb3I8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiBzb2Z0IGxhYmVsCisgICAgICAgcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfaW5pdChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5mbXQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX3NldChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5sYWJudW0sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmxhYmVsLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmZtdCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfcmVmcmVzaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19ub3V0cmVmcmVzaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc2xrX2xhYmVsKGludDwvU1RST05HPiA8U1RST05HPmxhYm51bSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfY2xlYXIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfcmVzdG9yZSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa190b3VjaCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19hdHRyb24oY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfYXR0cm9mZihjb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19hdHRyc2V0KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX2F0dHJfb24oYXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZCo8L1NUUk9ORz4gPFNUUk9ORz5vcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19hdHRyX29mZihjb25zdDwvU1RST05HPiA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPmF0dHJzLDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IDxTVFJPTkc+b3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfYXR0cl9zZXQoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2xvcl9wYWlyX251bWJlciw8L1NUUk9ORz4gPFNUUk9ORz52b2lkKjwvU1RST05HPiA8U1RST05HPm9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+c2xrX2F0dHIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfY29sb3Ioc2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2xvcl9wYWlyX251bWJlcik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIHNsayogZnVuY3Rpb25zIG1hbmlwdWxhdGUgdGhlIHNldCBvZiBzb2Z0IGZ1bmN0aW9uLWtleQorICAgICAgIGxhYmVscyB0aGF0IGV4aXN0IG9uIG1hbnkgdGVybWluYWxzLiAgRm9yIHRob3NlICB0ZXJtaW5hbHMKKyAgICAgICB0aGF0IGRvIG5vdCBoYXZlIHNvZnQgbGFiZWxzLCA8U1RST05HPmN1cnNlczwvU1RST05HPiB0YWtlcyBvdmVyIHRoZSBib3R0b20KKyAgICAgICBsaW5lIG9mIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+LCByZWR1Y2luZyB0aGUgc2l6ZSBvZiA8U1RST05HPnN0ZHNjcjwvU1RST05HPiBhbmQgdGhlICB2YXJpLQorICAgICAgIGFibGUgIDxTVFJPTkc+TElORVM8L1NUUk9ORz4uICA8U1RST05HPmN1cnNlczwvU1RST05HPiBzdGFuZGFyZGl6ZXMgb24gZWlnaHQgbGFiZWxzIG9mIHVwIHRvCisgICAgICAgZWlnaHQgY2hhcmFjdGVycyBlYWNoLiBJbiBhZGRpdGlvbiB0byAgdGhpcywgIHRoZSAgbmN1cnNlcworICAgICAgIGltcGxlbWVudGF0aW9uICBzdXBwb3J0cyAgYSBtb2RlIHdoZXJlIGl0IHNpbXVsYXRlcyAxMiBsYS0KKyAgICAgICBiZWxzIG9mIHVwIHRvIGZpdmUgY2hhcmFjdGVycyBlYWNoLiBUaGlzICBpcyAgbW9zdCAgY29tbW9uCisgICAgICAgZm9yICB0b2RheXMgIFBDICBsaWtlICBlbmR1c2VyICBkZXZpY2VzLiAgUGxlYXNlIG5vdGUgdGhhdAorICAgICAgIG5jdXJzZXMgc2ltdWxhdGVzIHRoaXMgbW9kZSBieSB0YWtpbmcgb3ZlciB1cCB0byB0d28gbGluZXMKKyAgICAgICBhdCAgdGhlICBib3R0b20gIG9mIHRoZSBzY3JlZW4sIGl0IGRvZXMgbm90IHRyeSB0byB1c2UgYW55CisgICAgICAgaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhpcyBtb2RlLgorCisgICAgICAgVGhlIDxTVFJPTkc+c2xrX2luaXQ8L1NUUk9ORz4gcm91dGluZSBtdXN0ICBiZSAgY2FsbGVkICBiZWZvcmUgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiAgb3IKKyAgICAgICA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4gaXMgY2FsbGVkLiAgSWYgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IGV2ZW50dWFsbHkgdXNlcyBhIGxpbmUgZnJvbQorICAgICAgIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+IHRvIGVtdWxhdGUgdGhlIHNvZnQgbGFiZWxzLCB0aGVuIDxFTT5mbXQ8L0VNPiBkZXRlcm1pbmVzIGhvdworICAgICAgIHRoZSAgbGFiZWxzICBhcmUgYXJyYW5nZWQgb24gdGhlIHNjcmVlbi4gIFNldHRpbmcgPEVNPmZtdDwvRU0+IHRvIDxTVFJPTkc+MDwvU1RST05HPgorICAgICAgIGluZGljYXRlcyBhIDMtMi0zIGFycmFuZ2VtZW50IG9mIHRoZSBsYWJlbHMsIDxTVFJPTkc+MTwvU1RST05HPiBpbmRpY2F0ZXMgYQorICAgICAgIDQtNCBhcnJhbmdlbWVudCBhbmQgPFNUUk9ORz4yPC9TVFJPTkc+IGluZGljYXRlcyB0aGUgUEMgbGlrZSA0LTQtNCBtb2RlLiBJZgorICAgICAgIDxTVFJPTkc+Zm10PC9TVFJPTkc+IGlzIHNldCB0byA8U1RST05HPjM8L1NUUk9ORz4sIGl0IGlzIGFnYWluIHRoZSBQQyBsaWtlIDQtNC00ICBtb2RlLCAgYnV0CisgICAgICAgaW4gIGFkZGl0aW9uICBhbiBpbmRleCBsaW5lIGlzIGdlbmVyYXRlZCwgaGVscGluZyB0aGUgdXNlcgorICAgICAgIHRvIGlkZW50aWZ5IHRoZSBrZXkgbnVtYmVycyBlYXNpbHkuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zbGtfc2V0PC9TVFJPTkc+IHJvdXRpbmUgcmVxdWlyZXMgPEVNPmxhYm51bTwvRU0+IHRvIGJlIGEgbGFiZWwgIG51bWJlciwKKyAgICAgICBmcm9tIDxTVFJPTkc+MTwvU1RST05HPiB0byA8U1RST05HPjg8L1NUUk9ORz4gKHJlc3AuIDxTVFJPTkc+MTI8L1NUUk9ORz4pOyA8RU0+bGFiZWw8L0VNPiBtdXN0IGJlIHRoZSBzdHJpbmcgdG8gYmUgcHV0CisgICAgICAgb24gdGhlIGxhYmVsLCB1cCAgdG8gIGVpZ2h0ICAocmVzcC4gIGZpdmUpICBjaGFyYWN0ZXJzICBpbgorICAgICAgIGxlbmd0aC4gICBBICBudWxsIHN0cmluZyBvciBhIG51bGwgcG9pbnRlciBzZXRzIHVwIGEgYmxhbmsKKyAgICAgICBsYWJlbC4gPEVNPmZtdDwvRU0+IGlzIGVpdGhlciA8U1RST05HPjA8L1NUUk9ORz4sIDxTVFJPTkc+MTwvU1RST05HPiwgb3IgPFNUUk9ORz4yPC9TVFJPTkc+LCAgaW5kaWNhdGluZyAgd2hldGhlciAgdGhlCisgICAgICAgbGFiZWwgIGlzICB0byBiZSBsZWZ0LWp1c3RpZmllZCwgY2VudGVyZWQsIG9yIHJpZ2h0LWp1c3RpLQorICAgICAgIGZpZWQsIHJlc3BlY3RpdmVseSwgd2l0aGluIHRoZSBsYWJlbC4KKworICAgICAgIFRoZSA8U1RST05HPnNsa19yZWZyZXNoPC9TVFJPTkc+IGFuZCA8U1RST05HPnNsa19ub3V0cmVmcmVzaDwvU1RST05HPiByb3V0aW5lcyBjb3JyZXNwb25kIHRvCisgICAgICAgdGhlIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+IHJvdXRpbmVzLgorCisgICAgICAgVGhlICA8U1RST05HPnNsa19sYWJlbDwvU1RST05HPiByb3V0aW5lIHJldHVybnMgdGhlIGN1cnJlbnQgbGFiZWwgZm9yIGxhYmVsCisgICAgICAgbnVtYmVyIDxFTT5sYWJudW08L0VNPiwgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyBibGFua3MgIHN0cmlwcGVkLgorCisgICAgICAgVGhlICA8U1RST05HPnNsa19jbGVhcjwvU1RST05HPiAgcm91dGluZSAgY2xlYXJzICB0aGUgIHNvZnQgbGFiZWxzIGZyb20gdGhlCisgICAgICAgc2NyZWVuLgorCisgICAgICAgVGhlIDxTVFJPTkc+c2xrX3Jlc3RvcmU8L1NUUk9ORz4gcm91dGluZSByZXN0b3JlcyB0aGUgc29mdCAgbGFiZWxzICB0byAgdGhlCisgICAgICAgc2NyZWVuIGFmdGVyIGEgPFNUUk9ORz5zbGtfY2xlYXI8L1NUUk9ORz4gaGFzIGJlZW4gcGVyZm9ybWVkLgorCisgICAgICAgVGhlICA8U1RST05HPnNsa190b3VjaDwvU1RST05HPiAgcm91dGluZSAgZm9yY2VzICBhbGwgdGhlIHNvZnQgbGFiZWxzIHRvIGJlCisgICAgICAgb3V0cHV0IHRoZSBuZXh0IHRpbWUgYSA8U1RST05HPnNsa19ub3V0cmVmcmVzaDwvU1RST05HPiBpcyBwZXJmb3JtZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zbGtfYXR0cm9uPC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyc2V0PC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyb2ZmPC9TVFJPTkc+IGFuZCA8U1RST05HPnNsa19hdHRyPC9TVFJPTkc+IHJvdS0KKyAgICAgICB0aW5lcyBjb3JyZXNwb25kIHRvIDxTVFJPTkc+YXR0cm9uPC9TVFJPTkc+LCA8U1RST05HPmF0dHJzZXQ8L1NUUk9ORz4sIDxTVFJPTkc+YXR0cm9mZjwvU1RST05HPiBhbmQgPFNUUk9ORz5hdHRyX2dldDwvU1RST05HPi4KKyAgICAgICBUaGV5IGhhdmUgYW4gZWZmZWN0IG9ubHkgaWYgc29mdCBsYWJlbHMgYXJlICBzaW11bGF0ZWQgIG9uCisgICAgICAgdGhlICBib3R0b20gbGluZSBvZiB0aGUgc2NyZWVuLiAgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0IGZvcgorICAgICAgIHNvZnQga2V5cyBpcyBBX1NUQU5ET1VUIChhcyBpbiBTeXN0ZW0gViBjdXJzZXMsIHdoaWNoIGRvZXMKKyAgICAgICBub3QgZG9jdW1lbnQgdGhpcyBmYWN0KS4KKworICAgICAgIFRoZSAgPFNUUk9ORz5zbGtfY29sb3I8L1NUUk9ORz4gcm91dGluZSBjb3JyZXNwb25kcyB0byA8U1RST05HPmNvbG9yX3NldDwvU1RST05HPi4gSXQgaGFzIGFuCisgICAgICAgZWZmZWN0IG9ubHkgaWYgc29mdCBsYWJlbHMgYXJlICBzaW11bGF0ZWQgIG9uICB0aGUgIGJvdHRvbQorICAgICAgIGxpbmUgb2YgdGhlIHNjcmVlbi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgT0sgKFNWcjQgc3BlY2ktCisgICAgICAgZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3MtCisgICAgICAgZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gIGRlZmluZXMgIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiB0aGlzIGltcGxlbWVudGEtCisgICAgICAgdGlvbgorCisgICAgICAgICAgICAgIDxTVFJPTkc+c2xrX2F0dHI8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdXNlZCBmb3IgdGhlIHNvZnQgIGtleXMuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfYXR0cm9mZjwvU1RST05HPiwgPFNUUk9ORz5zbGtfYXR0cm9uPC9TVFJPTkc+LCA8U1RST05HPnNsa19jbGVhcjwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfbm91dHJlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX3JlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX3RvdWNoPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJuICBhbiAgZXJyb3IgaWYgdGhlIHRlcm1pbmFsIG9yIHRoZSBzb2Z0LQorICAgICAgICAgICAgICAgICAgIGtleXMgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfYXR0cnNldDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIG9yIHRoZSAgc29mdC0KKyAgICAgICAgICAgICAgICAgICBrZXlzIHdlcmUgbm90IGluaXRpYWxpemVkLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+c2xrX2F0dHJfc2V0PC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyAgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIG9yIHRoZSBzb2Z0LQorICAgICAgICAgICAgICAgICAgIGtleXMgd2VyZSBub3QgaW5pdGlhbGl6ZWQsIG9yIHRoZSAgY29sb3IgIHBhaXIKKyAgICAgICAgICAgICAgICAgICBpcyBvdXRzaWRlIHRoZSByYW5nZSAwLi5DT0xPUl9QQUlSUy0xLCBvciBvcHRzCisgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfY29sb3I8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCBvciB0aGUgIHNvZnQtCisgICAgICAgICAgICAgICAgICAga2V5cyAgd2VyZSAgbm90IGluaXRpYWxpemVkLCBvciB0aGUgY29sb3IgcGFpcgorICAgICAgICAgICAgICAgICAgIGlzIG91dHNpZGUgdGhlIHJhbmdlIDAuLkNPTE9SX1BBSVJTLTEuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfaW5pdDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlICBmb3JtYXQgIHBhcmFtZXRlciAgaXMKKyAgICAgICAgICAgICAgICAgICBvdXRzaWRlIHRoZSByYW5nZSAwLi4zLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+c2xrX2xhYmVsPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfc2V0PC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyAgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIG9yIHRoZSBzb2Z0LQorICAgICAgICAgICAgICAgICAgIGtleXMgd2VyZSBub3QgaW5pdGlhbGl6ZWQsIG9yIHRoZSAgPEVNPmxhYm51bTwvRU0+ICBwYS0KKyAgICAgICAgICAgICAgICAgICByYW1ldGVyICBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBsYWJlbCBjb3VudHMsCisgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlICBmb3JtYXQgIHBhcmFtZXRlciAgaXMgIG91dHNpZGUgIHRoZQorICAgICAgICAgICAgICAgICAgIHJhbmdlIDAuLjIsIG9yIGlmIG1lbW9yeSBmb3IgdGhlIGxhYmVscyBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICBiZSBhbGxvY2F0ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTW9zdCBhcHBsaWNhdGlvbnMgd291bGQgdXNlIDxTVFJPTkc+c2xrX25vdXRyZWZyZXNoPC9TVFJPTkc+IGJlY2F1c2UgYSA8U1RST05HPndyZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmZyZXNoPC9TVFJPTkc+IGlzIGxpa2VseSB0byBmb2xsb3cgc29vbi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgSXNzdWUgNCwgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMuICBJdCBjaGFuZ2VzIHRoZSBhcmd1bWVudCB0eXBlIG9mIHRoZSAgYXR0cmlidXRlLW1hLQorICAgICAgIG5pcHVsYXRpb24gIGZ1bmN0aW9ucyA8U1RST05HPnNsa19hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJvZmY8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJzZXQ8L1NUUk9ORz4KKyAgICAgICB0byBiZSA8U1RST05HPmF0dHJfdDwvU1RST05HPiwgYW5kIGFkZHMgPFNUUk9ORz5jb25zdDwvU1RST05HPiBxdWFsaWZpZXJzLiBUaGUgZm9ybWF0ICBjb2RlcworICAgICAgIDxTVFJPTkc+MjwvU1RST05HPiAgYW5kIDxTVFJPTkc+MzwvU1RST05HPiBmb3IgPFNUUk9ORz5zbGtfaW5pdCgpPC9TVFJPTkc+IGFuZCB0aGUgZnVuY3Rpb24gPFNUUk9ORz5zbGtfYXR0cjwvU1RST05HPiBhcmUgc3BlLQorICAgICAgIGNpZmljIHRvIG5jdXJzZXMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz5jdXJzX3JlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmM2E3NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sCkBAIC0wLDAgKzEsMTYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfdGVybWF0dHJzLjN4LHYgMS4xMCAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfdGVybWF0dHJzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc190ZXJtYXR0cnMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YmF1ZHJhdGU8L1NUUk9ORz4sIDxTVFJPTkc+ZXJhc2VjaGFyPC9TVFJPTkc+LCA8U1RST05HPmVyYXNld2NoYXI8L1NUUk9ORz4sIDxTVFJPTkc+aGFzX2ljPC9TVFJPTkc+LCA8U1RST05HPmhhc19pbDwvU1RST05HPiwgPFNUUk9ORz5raWxsY2hhcjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPmtpbGx3Y2hhcjwvU1RST05HPiwgPFNUUk9ORz5sb25nbmFtZTwvU1RST05HPiwgIDxTVFJPTkc+dGVybV9hdHRyczwvU1RST05HPiwgIDxTVFJPTkc+dGVybWF0dHJzPC9TVFJPTkc+LCAgPFNUUk9ORz50ZXJtbmFtZTwvU1RST05HPiAgLQorICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGVudmlyb25tZW50IHF1ZXJ5IHJvdXRpbmVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmF1ZHJhdGUodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+ZXJhc2VjaGFyKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZXJhc2V3Y2hhcih3Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5jaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmhhc19pYyh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5oYXNfaWwodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+a2lsbGNoYXIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5raWxsd2NoYXIod2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qbG9uZ25hbWUodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz50ZXJtX2F0dHJzKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+dGVybWF0dHJzKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPip0ZXJtbmFtZSh2b2lkKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+YmF1ZHJhdGU8L1NUUk9ORz4gcm91dGluZSByZXR1cm5zIHRoZSBvdXRwdXQgc3BlZWQgb2YgdGhlIHRlci0KKyAgICAgICBtaW5hbC4gIFRoZSBudW1iZXIgcmV0dXJuZWQgaXMgaW4gIGJpdHMgIHBlciAgc2Vjb25kLCAgZm9yCisgICAgICAgZXhhbXBsZSA8U1RST05HPjk2MDA8L1NUUk9ORz4sIGFuZCBpcyBhbiBpbnRlZ2VyLgorCisgICAgICAgVGhlICA8U1RST05HPmVyYXNlY2hhcjwvU1RST05HPiAgcm91dGluZSAgcmV0dXJucyAgdGhlIHVzZXIncyBjdXJyZW50IGVyYXNlCisgICAgICAgY2hhcmFjdGVyLgorCisgICAgICAgVGhlIDxTVFJPTkc+ZXJhc2V3Y2hhcjwvU1RST05HPiByb3V0aW5lIHN0b3JlcyB0aGUgY3VycmVudCBlcmFzZSAgY2hhcmFjdGVyCisgICAgICAgaW4gIHRoZSAgbG9jYXRpb24gcmVmZXJlbmNlZCBieSA8RU0+Y2g8L0VNPi4gIElmIG5vIGVyYXNlIGNoYXJhY3RlcgorICAgICAgIGhhcyBiZWVuIGRlZmluZWQsIHRoZSByb3V0aW5lIGZhaWxzIGFuZCB0aGUgbG9jYXRpb24gIHJlZi0KKyAgICAgICBlcmVuY2VkIGJ5IDxFTT5jaDwvRU0+IGlzIG5vdCBjaGFuZ2VkLgorCisgICAgICAgVGhlIDxTVFJPTkc+aGFzX2ljPC9TVFJPTkc+IHJvdXRpbmUgaXMgdHJ1ZSBpZiB0aGUgdGVybWluYWwgaGFzIGluc2VydC0gYW5kCisgICAgICAgZGVsZXRlLSBjaGFyYWN0ZXIgY2FwYWJpbGl0aWVzLgorCisgICAgICAgVGhlIDxTVFJPTkc+aGFzX2lsPC9TVFJPTkc+IHJvdXRpbmUgaXMgdHJ1ZSBpZiB0aGUgdGVybWluYWwgaGFzIGluc2VydC0gYW5kCisgICAgICAgZGVsZXRlLWxpbmUgIGNhcGFiaWxpdGllcywgIG9yICBjYW4gIHNpbXVsYXRlICB0aGVtICB1c2luZworICAgICAgIHNjcm9sbGluZyByZWdpb25zLiAgVGhpcyBtaWdodCBiZSB1c2VkIHRvIGRldGVybWluZSBpZiAgaXQKKyAgICAgICB3b3VsZCAgYmUgIGFwcHJvcHJpYXRlIHRvIHR1cm4gb24gcGh5c2ljYWwgc2Nyb2xsaW5nIHVzaW5nCisgICAgICAgPFNUUk9ORz5zY3JvbGxvazwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPmtpbGxjaGFyPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyB0aGUgdXNlcidzIGN1cnJlbnQgbGluZSAga2lsbAorICAgICAgIGNoYXJhY3Rlci4KKworICAgICAgIFRoZSA8U1RST05HPmtpbGx3Y2hhcjwvU1RST05HPiByb3V0aW5lIHN0b3JlcyB0aGUgY3VycmVudCBsaW5lLWtpbGwgY2hhcmFjLQorICAgICAgIHRlciBpbiB0aGUgbG9jYXRpb24gcmVmZXJlbmNlZCBieSAgPEVNPmNoPC9FTT4uICAgSWYgIG5vICBsaW5lLWtpbGwKKyAgICAgICBjaGFyYWN0ZXIgIGhhcyAgYmVlbiAgZGVmaW5lZCwgIHRoZSAgcm91dGluZSBmYWlscyBhbmQgdGhlCisgICAgICAgbG9jYXRpb24gcmVmZXJlbmNlZCBieSA8RU0+Y2g8L0VNPiBpcyBub3QgY2hhbmdlZC4KKworICAgICAgIFRoZSA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyBhIHBvaW50ZXIgdG8gIGEgIHN0YXRpYyAgYXJlYQorICAgICAgIGNvbnRhaW5pbmcgIGEgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudCB0ZXJtaW5hbC4KKyAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSB2ZXJib3NlIGRlc2NyaXB0aW9uIGlzIDEyOCBjaGFyYWMtCisgICAgICAgdGVycy4gICBJdCAgaXMgIGRlZmluZWQgIG9ubHkgYWZ0ZXIgdGhlIGNhbGwgdG8gPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IG9yCisgICAgICAgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+LiAgVGhlIGFyZWEgaXMgb3ZlcndyaXR0ZW4gYnkgZWFjaCBjYWxsIHRvICA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4KKyAgICAgICBhbmQgIGlzICBub3QgIHJlc3RvcmVkIGJ5IDxTVFJPTkc+c2V0X3Rlcm08L1NUUk9ORz4sIHNvIHRoZSB2YWx1ZSBzaG91bGQgYmUKKyAgICAgICBzYXZlZCBiZXR3ZWVuIGNhbGxzIHRvIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiBpZiA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+IGlzIGdvaW5nIHRvICBiZQorICAgICAgIHVzZWQgd2l0aCBtdWx0aXBsZSB0ZXJtaW5hbHMuCisKKyAgICAgICBJZiAgYSAgZ2l2ZW4gIHRlcm1pbmFsICBkb2VzIG5vdCBzdXBwb3J0IGEgdmlkZW8gYXR0cmlidXRlCisgICAgICAgdGhhdCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIGlzIHRyeWluZyB0byB1c2UsICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgbWF5CisgICAgICAgc3Vic3RpdHV0ZSAgYSAgZGlmZmVyZW50ICB2aWRlbyAgYXR0cmlidXRlICBmb3IgIGl0LiAgIFRoZQorICAgICAgIDxTVFJPTkc+dGVybWF0dHJzPC9TVFJPTkc+IGFuZCA8U1RST05HPnRlcm1fYXR0cnM8L1NUUk9ORz4gZnVuY3Rpb25zIHJldHVybiBhIGxvZ2ljYWwgPFNUUk9ORz5PUjwvU1RST05HPiAgb2YKKyAgICAgICBhbGwgIHZpZGVvICBhdHRyaWJ1dGVzICBzdXBwb3J0ZWQgYnkgdGhlIHRlcm1pbmFsIHVzaW5nIDxFTT5BPC9FTT48U1RST05HPl88L1NUUk9ORz4KKyAgICAgICBhbmQgPEVNPldBPC9FTT48U1RST05HPl88L1NUUk9ORz4gY29uc3RhbnRzIHJlc3BlY3RpdmVseS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgIHVzZS0KKyAgICAgICBmdWwgIHdoZW4gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiBwcm9ncmFtIG5lZWRzIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB0aGUKKyAgICAgICBhcHBlYXJhbmNlIG9mIHRoZSBzY3JlZW4uCisKKyAgICAgICBUaGUgPFNUUk9ORz50ZXJtbmFtZTwvU1RST05HPiByb3V0aW5lIHJldHVybnMgdGhlICB0ZXJtaW5hbCAgbmFtZSAgdXNlZCAgYnkKKyAgICAgICA8U1RST05HPnNldHVwdGVybTwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5sb25nbmFtZTwvU1RST05HPiBhbmQgPFNUUk9ORz50ZXJtbmFtZTwvU1RST05HPiByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLgorCisgICAgICAgUm91dGluZXMgIHRoYXQgIHJldHVybiAgYW4gaW50ZWdlciByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlCisgICAgICAgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgIG90aGVyICB0aGFuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz50ZXJtYXR0cnM8L1NUUk9ORz4gbWF5IGJlIGEgbWFjcm8uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBYU0kgIEN1cnNlcyAgc3RhbmRhcmQsICBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jLQorICAgICAgIHRpb25zLiAgSXQgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2YgPFNUUk9ORz50ZXJtYXR0cnM8L1NUUk9ORz4gdG8gdGhlIG5ldworICAgICAgIHR5cGUgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+LiAgTW9zdCB2ZXJzaW9ucyBvZiBjdXJzZXMgdHJ1bmNhdGUgdGhlIHJlc3VsdAorICAgICAgIHJldHVybmVkIGJ5IDxTVFJPTkc+dGVybW5hbWU8L1NUUk9ORz4gdG8gMTQgY2hhcmFjdGVycy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWNhcC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWNhcC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDU3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtY2FwLjN4Lmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc190ZXJtY2FwLjN4LHYgMS4yMiAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfdGVybWNhcCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfdGVybWNhcCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRnZXRlbnQ8L1NUUk9ORz4sIDxTVFJPTkc+dGdldGZsYWc8L1NUUk9ORz4sIDxTVFJPTkc+dGdldG51bTwvU1RST05HPiwgPFNUUk9ORz50Z2V0c3RyPC9TVFJPTkc+LCA8U1RST05HPnRnb3RvPC9TVFJPTkc+LCA8U1RST05HPnRwdXRzPC9TVFJPTkc+IC0gZGlyZWN0CisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gaW50ZXJmYWNlIHRvIHRoZSB0ZXJtaW5mbyBjYXBhYmlsaXR5IGRhdGFiYXNlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O3Rlcm0uaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+ZXh0ZXJuPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPlBDOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+ZXh0ZXJuPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPFNUUk9ORz5VUDs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmV4dGVybjwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IDxTVFJPTkc+QkM7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5leHRlcm48L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPm9zcGVlZDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dGdldGVudChjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmJwLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipuYW1lKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnRnZXRmbGFnKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dGdldG51bShjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmlkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qdGdldHN0cihjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmlkLDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qKmFyZWEpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPip0Z290byhjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qY2FwLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNvbCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yb3cpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dHB1dHMoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hZmZjbnQsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCpwdXRjKShpbnQpKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBhcmUgaW5jbHVkZWQgYXMgYSBjb252ZXJzaW9uIGFpZCAgZm9yICBwcm8tCisgICAgICAgZ3JhbXMgIHRoYXQgdXNlIHRoZSA8RU0+dGVybWNhcDwvRU0+IGxpYnJhcnkuICBUaGVpciBwYXJhbWV0ZXJzIGFyZQorICAgICAgIHRoZSBzYW1lIGFuZCB0aGUgcm91dGluZXMgYXJlIGVtdWxhdGVkIHVzaW5nIHRoZSAgPEVNPnRlcm1pbmZvPC9FTT4KKyAgICAgICBkYXRhYmFzZS4gICBUaHVzLCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgdG8gcXVlcnkgdGhlIGNhcGEtCisgICAgICAgYmlsaXRpZXMgb2YgZW50cmllcyBmb3Igd2hpY2ggYSB0ZXJtaW5mbyAgZW50cnkgIGhhcyAgYmVlbgorICAgICAgIGNvbXBpbGVkLgorCisgICAgICAgVGhlICA8U1RST05HPnRnZXRlbnQ8L1NUUk9ORz4gcm91dGluZSBsb2FkcyB0aGUgZW50cnkgZm9yIDxFTT5uYW1lPC9FTT4uICBJdCByZXR1cm5zCisgICAgICAgMSBvbiBzdWNjZXNzLCAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZW50cnksIGFuZCAtMSAgaWYgIHRoZQorICAgICAgIHRlcm1pbmZvICBkYXRhYmFzZSAgY291bGQgIG5vdCAgYmUgIGZvdW5kLiAgIFRoZSBlbXVsYXRpb24KKyAgICAgICBpZ25vcmVzIHRoZSBidWZmZXIgcG9pbnRlciA8RU0+YnA8L0VNPi4KKworICAgICAgIFRoZSA8U1RST05HPnRnZXRmbGFnPC9TVFJPTkc+IHJvdXRpbmUgZ2V0cyB0aGUgYm9vbGVhbiAgZW50cnkgIGZvciAgPEVNPmlkPC9FTT4sICBvcgorICAgICAgIHplcm8gaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgIFRoZSAgPFNUUk9ORz50Z2V0bnVtPC9TVFJPTkc+ICByb3V0aW5lIGdldHMgdGhlIG51bWVyaWMgZW50cnkgZm9yIDxFTT5pZDwvRU0+LCBvciAtMQorICAgICAgIGlmIGl0IGlzIG5vdCBhdmFpbGFibGUuCisKKyAgICAgICBUaGUgPFNUUk9ORz50Z2V0c3RyPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyB0aGUgc3RyaW5nIGVudHJ5ICBmb3IgIDxFTT5pZDwvRU0+LCAgb3IKKyAgICAgICB6ZXJvICBpZiAgaXQgIGlzICBub3QgIGF2YWlsYWJsZS4gIFVzZSA8U1RST05HPnRwdXRzPC9TVFJPTkc+IHRvIG91dHB1dCB0aGUKKyAgICAgICByZXR1cm5lZCBzdHJpbmcuICBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBjb3BpZWQgIHRvCisgICAgICAgdGhlICBidWZmZXIgcG9pbnRlZCB0byBieSA8RU0+YXJlYTwvRU0+LCBhbmQgdGhlIDxFTT5hcmVhPC9FTT4gdmFsdWUgd2lsbCBiZQorICAgICAgIHVwZGF0ZWQgdG8gcG9pbnQgcGFzdCB0aGUgbnVsbCBlbmRpbmcgdGhpcyB2YWx1ZS4KKworICAgICAgIE9ubHkgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSA8U1RST05HPmlkPC9TVFJPTkc+IHBhcmFtZXRlciBvZiA8U1RST05HPnRnZXQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5mbGFnPC9TVFJPTkc+LCA8U1RST05HPnRnZXRudW08L1NUUk9ORz4gYW5kIDxTVFJPTkc+dGdldHN0cjwvU1RST05HPiBhcmUgY29tcGFyZWQgaW4gbG9va3Vwcy4KKworICAgICAgIFRoZSAgPFNUUk9ORz50Z290bzwvU1RST05HPiAgcm91dGluZSAgaW5zdGFudGlhdGVzICB0aGUgcGFyYW1ldGVycyBpbnRvIHRoZQorICAgICAgIGdpdmVuIGNhcGFiaWxpdHkuICBUaGUgb3V0cHV0IGZyb20gdGhpcyByb3V0aW5lIGlzICB0byAgYmUKKyAgICAgICBwYXNzZWQgdG8gPFNUUk9ORz50cHV0czwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz50cHV0czwvU1RST05HPiAgcm91dGluZSAgaXMgZGVzY3JpYmVkIG9uIHRoZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWFudWFsIHBhZ2UuICBJdCBjYW4gcmV0cmlldmUgY2FwYWJpbGl0aWVzIGJ5IGVpdGhlciB0ZXJtLQorICAgICAgIGNhcCBvciB0ZXJtaW5mbyBuYW1lLgorCisgICAgICAgVGhlIHZhcmlhYmxlcyA8U1RST05HPlBDPC9TVFJPTkc+LCA8U1RST05HPlVQPC9TVFJPTkc+IGFuZCA8U1RST05HPkJDPC9TVFJPTkc+IGFyZSBzZXQgYnkgPFNUUk9ORz50Z2V0ZW50PC9TVFJPTkc+IHRvIHRoZSB0ZXItCisgICAgICAgbWluZm8gICBlbnRyeSdzICAgZGF0YSAgIGZvciAgIDxTVFJPTkc+cGFkX2NoYXI8L1NUUk9ORz4sICAgPFNUUk9ORz5jdXJzb3JfdXA8L1NUUk9ORz4gICBhbmQKKyAgICAgICA8U1RST05HPmJhY2tzcGFjZV9pZl9ub3RfYnM8L1NUUk9ORz4sICByZXNwZWN0aXZlbHkuICAgPFNUUk9ORz5VUDwvU1RST05HPiAgaXMgIG5vdCAgdXNlZCBieQorICAgICAgIG5jdXJzZXMuICA8U1RST05HPlBDPC9TVFJPTkc+IGlzIHVzZWQgaW4gdGhlIDxTVFJPTkc+dGRlbGF5X291dHB1dDwvU1RST05HPiBmdW5jdGlvbi4gIDxTVFJPTkc+QkM8L1NUUk9ORz4gaXMKKyAgICAgICB1c2VkICBpbiAgdGhlIDxTVFJPTkc+dGdvdG88L1NUUk9ORz4gZW11bGF0aW9uLiAgVGhlIHZhcmlhYmxlIDxTVFJPTkc+b3NwZWVkPC9TVFJPTkc+IGlzIHNldAorICAgICAgIGJ5IG5jdXJzZXMgaW4gYSAgc3lzdGVtLXNwZWNpZmljICBjb2RpbmcgIHRvICByZWZsZWN0ICB0aGUKKyAgICAgICB0ZXJtaW5hbCBzcGVlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgRXhjZXB0ICB3aGVyZSAgZXhwbGljaXRseSAgbm90ZWQsICByb3V0aW5lcyB0aGF0IHJldHVybiBhbgorICAgICAgIGludGVnZXIgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCAgb25seSAgc3BlY2ktCisgICAgICAgZmllcyAgImFuICBpbnRlZ2VyICB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsCisgICAgICAgY29tcGxldGlvbi4KKworICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKworPC9QUkU+Cis8SDI+QlVHUzwvSDI+PFBSRT4KKyAgICAgICBJZiB5b3UgY2FsbCA8U1RST05HPnRnZXRzdHI8L1NUUk9ORz4gdG8gZmV0Y2ggPFNUUk9ORz5jYTwvU1RST05HPiBvciBhbnkgb3RoZXIgcGFyYW1ldGVyaXplZAorICAgICAgIHN0cmluZywgIGJlICBhd2FyZSAgdGhhdCAgaXQgIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGVybWluZm8KKyAgICAgICBub3RhdGlvbiwgbm90IHRoZSBvbGRlciBhbmQgIG5vdC1xdWl0ZS1jb21wYXRpYmxlICB0ZXJtY2FwCisgICAgICAgbm90YXRpb24uICBUaGlzIHdpbGwgbm90IGNhdXNlIHByb2JsZW1zIGlmIGFsbCB5b3UgZG8gd2l0aAorICAgICAgIGl0IGlzIGNhbGwgPFNUUk9ORz50Z290bzwvU1RST05HPiBvciA8U1RST05HPnRwYXJtPC9TVFJPTkc+LCAgd2hpY2ggIGJvdGggIGV4cGFuZCAgdGVybWluZm8tCisgICAgICAgc3R5bGUgIHN0cmluZ3MgIGFzIHRlcm1pbmZvLiAgKFRoZSA8U1RST05HPnRnb3RvPC9TVFJPTkc+IGZ1bmN0aW9uLCBpZiBjb24tCisgICAgICAgZmlndXJlZCB0byBzdXBwb3J0IHRlcm1jYXAsIHdpbGwgY2hlY2sgaWYgIHRoZSAgc3RyaW5nICBpcworICAgICAgIGluZGVlZCAgdGVybWluZm8tc3R5bGUgIGJ5ICBsb29raW5nIGZvciAiJXAiIHBhcmFtZXRlcnMgb3IKKyAgICAgICAiJCZsdDsuLiZndDsiIGRlbGF5cywgYW5kIGludm9rZSBhIHRlcm1jYXAtc3R5bGUgcGFyc2VyICBpZiAgdGhlCisgICAgICAgc3RyaW5nIGRvZXMgbm90IGFwcGVhciB0byBiZSB0ZXJtaW5mbykuCisKKyAgICAgICBCZWNhdXNlICB0ZXJtaW5mbyAgY29udmVudGlvbnMgZm9yIHJlcHJlc2VudGluZyBwYWRkaW5nIGluCisgICAgICAgc3RyaW5nIGNhcGFiaWxpdGllcyBkaWZmZXIgIGZyb20gIHRlcm1jYXAncywgIDxTVFJPTkc+dHB1dHMoIjUwIik7PC9TVFJPTkc+CisgICAgICAgd2lsbCAgcHV0ICBvdXQgYSBsaXRlcmFsICI1MCIgcmF0aGVyIHRoYW4gYnVzeS13YWl0aW5nIGZvcgorICAgICAgIDUwIG1pbGxpc2Vjb25kcy4gIENvcGUgd2l0aCBpdC4KKworICAgICAgIE5vdGUgdGhhdCB0ZXJtY2FwIGhhcyBub3RoaW5nIGFuYWxvZ291cyB0byB0ZXJtaW5mbydzICA8U1RST05HPnNncjwvU1RST05HPgorICAgICAgIHN0cmluZy4gICBPbmUgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IHRlcm1jYXAgYXBwbGljYS0KKyAgICAgICB0aW9ucyBhc3N1bWUgbWUgKHRlcm1pbmZvIDxTVFJPTkc+c2dyMDwvU1RST05HPikgZG9lcyBub3QgcmVzZXQgdGhlICBhbHRlci0KKyAgICAgICBuYXRlICBjaGFyYWN0ZXIgIHNldC4gIFRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIGZvciwgYW5kCisgICAgICAgbW9kaWZpZXMgdGhlIGRhdGEgc2hvd24gdG8gdGhlIHRlcm1jYXAgaW50ZXJmYWNlIHRvIGFjY29tLQorICAgICAgIG1vZGF0ZSB0ZXJtY2FwJ3MgbGltaXRhdGlvbiBpbiB0aGlzIHJlc3BlY3QuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBYU0kgIEN1cnNlcyAgc3RhbmRhcmQsICBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jLQorICAgICAgIHRpb25zLiAgSG93ZXZlciwgdGhleSBhcmUgbWFya2VkIFRPIEJFIFdJVEhEUkFXTiAgYW5kICBtYXkKKyAgICAgICBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4KKworICAgICAgIE5laXRoZXIgIHRoZSAgWFNJICBDdXJzZXMgIHN0YW5kYXJkIG5vciB0aGUgU1ZyNCBtYW4gcGFnZXMKKyAgICAgICBkb2N1bWVudGVkIHRoZSByZXR1cm4gdmFsdWVzIG9mIDxTVFJPTkc+dGdldGVudDwvU1RST05HPiBjb3JyZWN0bHksICB0aG91Z2gKKyAgICAgICBhbGwgIHRocmVlIHdlcmUgaW4gZmFjdCByZXR1cm5lZCBldmVyIHNpbmNlIFNWcjEuICBJbiBwYXItCisgICAgICAgdGljdWxhciwgYW4gb21pc3Npb24gaW4gdGhlIFhTSSBDdXJzZXMgIGRvY3VtZW50YXRpb24gIGhhcworICAgICAgIGJlZW4gIG1pc2ludGVycHJldGVkICB0byAgbWVhbiAgdGhhdCA8U1RST05HPnRnZXRlbnQ8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk9LPC9TVFJPTkc+IG9yCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4uICBCZWNhdXNlIHRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyB0byBwcm92aWRlCisgICAgICAgY29tcGF0aWJpbGl0eSAgd2l0aCAgdGhlIDxFTT50ZXJtY2FwPC9FTT4gbGlicmFyeSwgdGhhdCBpcyBhIGRlZmVjdAorICAgICAgIGluIFhDdXJzZXMsIElzc3VlIDQsIFZlcnNpb24gMiByYXRoZXIgdGhhbiBpbiBuY3Vyc2VzLgorCisgICAgICAgRXh0ZXJuYWwgdmFyaWFibGVzIGFyZSBwcm92aWRlZCAgZm9yICBzdXBwb3J0ICBvZiAgY2VydGFpbgorICAgICAgIHRlcm1jYXAgIGFwcGxpY2F0aW9ucy4gIEhvd2V2ZXIsIHRlcm1jYXAgYXBwbGljYXRpb25zJyB1c2UKKyAgICAgICBvZiB0aG9zZSB2YXJpYWJsZXMgaXMgcG9vcmx5IGRvY3VtZW50ZWQsIGUuZy4sIG5vdCBkaXN0aW4tCisgICAgICAgZ3Vpc2hpbmcgIGJldHdlZW4gIGlucHV0ICBhbmQgb3V0cHV0LiAgSW4gcGFydGljdWxhciwgc29tZQorICAgICAgIGFwcGxpY2F0aW9ucyBhcmUgcmVwb3J0ZWQgdG8gZGVjbGFyZSBhbmQvb3IgbW9kaWZ5IDxTVFJPTkc+b3NwZWVkPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJwdXRjLjMuaHRtbCI+cHV0YygzKTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWluZm8uM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3Rlcm1pbmZvLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3NzQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9jdXJzX3Rlcm1pbmZvLjN4Lmh0bWwKQEAgLTAsMCArMSwzNTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc190ZXJtaW5mby4zeCx2IDEuMzAgMjAwOC8wOC8xNiAyMDo1MzoyNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3Rlcm1pbmZvIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc190ZXJtaW5mbyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZGVsX2N1cnRlcm08L1NUUk9ORz4sIDxTVFJPTkc+bXZjdXI8L1NUUk9ORz4sIDxTVFJPTkc+cHV0cDwvU1RST05HPiwgPFNUUk9ORz5yZXN0YXJ0dGVybTwvU1RST05HPiwgPFNUUk9ORz5zZXRfY3VydGVybTwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnNldHRlcm08L1NUUk9ORz4sIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+LCA8U1RST05HPnRpZ2V0ZmxhZzwvU1RST05HPiwgPFNUUk9ORz50aWdldG51bTwvU1RST05HPiwgPFNUUk9ORz50aWdldHN0cjwvU1RST05HPiwgPFNUUk9ORz50cGFybTwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnRwdXRzPC9TVFJPTkc+LCA8U1RST05HPnZpZF9hdHRyPC9TVFJPTkc+LCA8U1RST05HPnZpZF9wdXRzPC9TVFJPTkc+LCA8U1RST05HPnZpZGF0dHI8L1NUUk9ORz4sIDxTVFJPTkc+dmlkcHV0czwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+CisgICAgICAgaW50ZXJmYWNlcyB0byB0ZXJtaW5mbyBkYXRhYmFzZQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDt0ZXJtLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNldHVwdGVybShjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT50ZXJtPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPmZpbGRlczwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5lcnJyZXQ8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNldHRlcm0oY2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dGVybTwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+VEVSTUlOQUw8L1NUUk9ORz4gPFNUUk9ORz4qc2V0X2N1cnRlcm0oVEVSTUlOQUw8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPm50ZXJtPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWxfY3VydGVybShURVJNSU5BTDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+b3Rlcm08L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlc3RhcnR0ZXJtKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnRlcm08L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+ZmlsZGVzPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmVycnJldDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPip0cGFybShjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50cHV0cyhjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5hZmZjbnQ8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPigqPC9TVFJPTkc+PEVNPnB1dGM8L0VNPjxTVFJPTkc+KShpbnQpKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnB1dHAoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZpZHB1dHMoY2h0eXBlPC9TVFJPTkc+IDxFTT5hdHRyczwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCo8L1NUUk9ORz48RU0+cHV0YzwvRU0+PFNUUk9ORz4pKGludCkpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dmlkYXR0cihjaHR5cGU8L1NUUk9ORz4gPEVNPmF0dHJzPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz52aWRfcHV0cyhhdHRyX3Q8L1NUUk9ORz4gPEVNPmF0dHJzPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8RU0+cGFpcjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+b3B0czwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCo8L1NUUk9ORz48RU0+cHV0YzwvRU0+PFNUUk9ORz4pKGNoYXIpKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZpZF9hdHRyKGF0dHJfdDwvU1RST05HPiA8RU0+YXR0cnM8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxFTT5wYWlyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5vcHRzPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmN1cihpbnQ8L1NUUk9ORz4gPEVNPm9sZHJvdzwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5vbGRjb2w8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bmV3cm93PC9FTT4sIGludCA8RU0+bmV3Y29sPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50aWdldGZsYWcoY2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+Y2FwbmFtZTwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dGlnZXRudW0oY2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+Y2FwbmFtZTwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPip0aWdldHN0cihjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5jYXBuYW1lPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgbG93LWxldmVsIHJvdXRpbmVzIG11c3QgYmUgY2FsbGVkIGJ5ICBwcm9ncmFtcyAgdGhhdAorICAgICAgIGhhdmUgdG8gZGVhbCBkaXJlY3RseSB3aXRoIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlIHRvIGhhbmRsZQorICAgICAgIGNlcnRhaW4gdGVybWluYWwgY2FwYWJpbGl0aWVzLCBzdWNoIGFzICBwcm9ncmFtbWluZyAgZnVuYy0KKyAgICAgICB0aW9uICBrZXlzLiAgIEZvciBhbGwgb3RoZXIgZnVuY3Rpb25hbGl0eSwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gcm91dGluZXMKKyAgICAgICBhcmUgbW9yZSBzdWl0YWJsZSBhbmQgdGhlaXIgdXNlIGlzIHJlY29tbWVuZGVkLgorCisgICAgICAgSW5pdGlhbGx5LCA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiBzaG91bGQgIGJlICBjYWxsZWQuICAgTm90ZSAgdGhhdCAgPFNUUk9ORz5zZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnR1cHRlcm08L1NUUk9ORz4gIGlzICBhdXRvbWF0aWNhbGx5ICBjYWxsZWQgYnkgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IGFuZCA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4uCisgICAgICAgVGhpcyAgZGVmaW5lcyAgdGhlICBzZXQgIG9mICB0ZXJtaW5hbC1kZXBlbmRlbnQgIHZhcmlhYmxlcworICAgICAgIFtsaXN0ZWQgaW4gPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPl0uICBUaGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiB2YXJpYWJsZXMgPFNUUk9ORz5saW5lczwvU1RST05HPiBhbmQKKyAgICAgICA8U1RST05HPmNvbHVtbnM8L1NUUk9ORz4gYXJlIGluaXRpYWxpemVkIGJ5IDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+IGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgSWYgPFNUUk9ORz51c2VfZW52KEZBTFNFKTwvU1RST05HPiBoYXMgYmVlbiBjYWxsZWQsIHZhbHVlcyBmb3IgPFNUUk9ORz5saW5lczwvU1RST05HPgorICAgICAgICAgICAgICBhbmQgPFNUUk9ORz5jb2x1bW5zPC9TVFJPTkc+IHNwZWNpZmllZCBpbiA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGFyZSB1c2VkLgorCisgICAgICAgICAgICAgIE90aGVyd2lzZSwgIGlmICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gYW5kCisgICAgICAgICAgICAgIDxTVFJPTkc+Q09MVU1OUzwvU1RST05HPiBleGlzdCwgdGhlaXIgdmFsdWVzIGFyZSB1c2VkLiAgSWYgdGhlc2UgZW4tCisgICAgICAgICAgICAgIHZpcm9ubWVudCB2YXJpYWJsZXMgZG8gbm90IGV4aXN0IGFuZCB0aGUgcHJvZ3JhbSBpcworICAgICAgICAgICAgICBydW5uaW5nIGluIGEgd2luZG93LCB0aGUgIGN1cnJlbnQgIHdpbmRvdyAgc2l6ZSAgaXMKKyAgICAgICAgICAgICAgdXNlZC4gICBPdGhlcndpc2UsICBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRvCisgICAgICAgICAgICAgIG5vdCBleGlzdCwgdGhlIHZhbHVlcyBmb3IgPFNUUk9ORz5saW5lczwvU1RST05HPiBhbmQgPFNUUk9ORz5jb2x1bW5zPC9TVFJPTkc+ICBzcGVjaS0KKyAgICAgICAgICAgICAgZmllZCBpbiB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZSBhcmUgdXNlZC4KKworICAgICAgIFRoZSAgaGVhZGVyICBmaWxlcyAgPFNUUk9ORz5jdXJzZXMuaDwvU1RST05HPiBhbmQgPFNUUk9ORz50ZXJtLmg8L1NUUk9ORz4gc2hvdWxkIGJlIGluY2x1ZGVkCisgICAgICAgKGluIHRoaXMgb3JkZXIpIHRvIGdldCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZXNlICBzdHJpbmdzLAorICAgICAgIG51bWJlcnMsICBhbmQgIGZsYWdzLiAgIFBhcmFtZXRlcml6ZWQgIHN0cmluZ3MgIHNob3VsZCAgYmUKKyAgICAgICBwYXNzZWQgdGhyb3VnaCA8U1RST05HPnRwYXJtPC9TVFJPTkc+IHRvIGluc3RhbnRpYXRlICB0aGVtLiAgIEFsbCAgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPgorICAgICAgIHN0cmluZ3MgIFtpbmNsdWRpbmcgdGhlIG91dHB1dCBvZiA8U1RST05HPnRwYXJtPC9TVFJPTkc+XSBzaG91bGQgYmUgcHJpbnRlZAorICAgICAgIHdpdGggPFNUUk9ORz50cHV0czwvU1RST05HPiBvciA8U1RST05HPnB1dHA8L1NUUk9ORz4uICBDYWxsIHRoZSA8U1RST05HPnJlc2V0X3NoZWxsX21vZGU8L1NUUk9ORz4gdG8gIHJlc3RvcmUKKyAgICAgICB0aGUgIHR0eSBtb2RlcyBiZWZvcmUgZXhpdGluZyBbc2VlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPl0uICBQcm8tCisgICAgICAgZ3JhbXMgIHdoaWNoICB1c2UgIGN1cnNvciAgYWRkcmVzc2luZyAgc2hvdWxkICBvdXRwdXQgIDxTVFJPTkc+ZW4tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz50ZXJfY2FfbW9kZTwvU1RST05HPiAgdXBvbiAgc3RhcnR1cCAgYW5kIHNob3VsZCBvdXRwdXQgPFNUUk9ORz5leGl0X2NhX21vZGU8L1NUUk9ORz4KKyAgICAgICBiZWZvcmUgZXhpdGluZy4gIFByb2dyYW1zIGRlc2lyaW5nICBzaGVsbCAgZXNjYXBlcyAgc2hvdWxkCisgICAgICAgY2FsbAorCisgICAgICAgPFNUUk9ORz5yZXNldF9zaGVsbF9tb2RlPC9TVFJPTkc+ICBhbmQgb3V0cHV0IDxTVFJPTkc+ZXhpdF9jYV9tb2RlPC9TVFJPTkc+IGJlZm9yZSB0aGUgc2hlbGwKKyAgICAgICBpcyBjYWxsZWQgYW5kIHNob3VsZCBvdXRwdXQgIDxTVFJPTkc+ZW50ZXJfY2FfbW9kZTwvU1RST05HPiAgYW5kICBjYWxsICA8U1RST05HPnJlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+c2V0X3Byb2dfbW9kZTwvU1RST05HPiBhZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgc2hlbGwuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4gcm91dGluZSByZWFkcyBpbiB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZSwgaW5pLQorICAgICAgIHRpYWxpemluZyB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBzdHJ1Y3R1cmVzLCBidXQgZG9lcyBub3Qgc2V0IHVwIHRoZQorICAgICAgIG91dHB1dCB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzIHVzZWQgYnkgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4uICBUaGUgdGVyLQorICAgICAgIG1pbmFsIHR5cGUgaXMgdGhlIGNoYXJhY3RlciBzdHJpbmcgPEVNPnRlcm08L0VNPjsgaWYgPEVNPnRlcm08L0VNPiBpcyAgbnVsbCwKKyAgICAgICB0aGUgIGVudmlyb25tZW50ICB2YXJpYWJsZSA8U1RST05HPlRFUk08L1NUUk9ORz4gaXMgdXNlZC4gIEFsbCBvdXRwdXQgaXMgdG8KKyAgICAgICBmaWxlIGRlc2NyaXB0b3IgPFNUUk9ORz5maWxkZXM8L1NUUk9ORz4gd2hpY2ggaXMgIGluaXRpYWxpemVkICBmb3IgIG91dHB1dC4KKyAgICAgICBJZiAgPEVNPmVycnJldDwvRU0+ICBpcyAgbm90IG51bGwsIHRoZW4gPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk9LPC9TVFJPTkc+IG9yIDxTVFJPTkc+RVJSPC9TVFJPTkc+CisgICAgICAgYW5kIHN0b3JlcyBhIHN0YXR1cyB2YWx1ZSBpbiB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IDxFTT5lci08L0VNPgorICAgICAgIDxFTT5ycmV0PC9FTT4uICAgQSAgcmV0dXJuIHZhbHVlIG9mIDxTVFJPTkc+T0s8L1NUUk9ORz4gY29tYmluZWQgd2l0aCBzdGF0dXMgb2YgPFNUUk9ORz4xPC9TVFJPTkc+IGluCisgICAgICAgPEVNPmVycnJldDwvRU0+IGlzIG5vcm1hbC4gIElmIDxTVFJPTkc+RVJSPC9TVFJPTkc+IGlzIHJldHVybmVkLCBleGFtaW5lIDxFTT5lcnJyZXQ8L0VNPjoKKworICAgICAgICAgICAgICA8U1RST05HPjE8L1NUUk9ORz4gICAgbWVhbnMgdGhhdCB0aGUgdGVybWluYWwgaXMgaGFyZGNvcHksIGNhbm5vdCBiZQorICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGN1cnNlcyBhcHBsaWNhdGlvbnMuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz4wPC9TVFJPTkc+ICAgIG1lYW5zIHRoYXQgdGhlIHRlcm1pbmFsIGNvdWxkIG5vdCBiZSBmb3VuZCwgb3IKKyAgICAgICAgICAgICAgICAgICB0aGF0IGl0IGlzIGEgZ2VuZXJpYyB0eXBlLCBoYXZpbmcgIHRvbyAgbGl0dGxlCisgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZm9yIGN1cnNlcyBhcHBsaWNhdGlvbnMgdG8gcnVuLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+LTE8L1NUUk9ORz4gICBtZWFucyAgdGhhdCB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZSBjb3VsZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICBmb3VuZC4KKworICAgICAgIElmIDxFTT5lcnJyZXQ8L0VNPiBpcyBudWxsLCA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSAgdXBvbgorICAgICAgIGZpbmRpbmcgYW4gZXJyb3IgYW5kIGV4aXRzLiAgVGh1cywgdGhlIHNpbXBsZXN0IGNhbGwgaXM6CisKKyAgICAgICAgICAgICA8U1RST05HPnNldHVwdGVybSgoY2hhcjwvU1RST05HPiA8U1RST05HPiopMCw8L1NUUk9ORz4gPFNUUk9ORz4xLDwvU1RST05HPiA8U1RST05HPihpbnQ8L1NUUk9ORz4gPFNUUk9ORz4qKTApOzwvU1RST05HPiwKKworICAgICAgIHdoaWNoICB1c2VzICBhbGwgdGhlIGRlZmF1bHRzIGFuZCBzZW5kcyB0aGUgb3V0cHV0IHRvIDxTVFJPTkc+c3RkLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+b3V0PC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+c2V0dGVybTwvU1RST05HPiByb3V0aW5lIGlzIGJlaW5nIHJlcGxhY2VkIGJ5ICA8U1RST05HPnNldHVwdGVybTwvU1RST05HPi4gICBUaGUKKyAgICAgICBjYWxsOgorCisgICAgICAgICAgICAgPFNUUk9ORz5zZXR1cHRlcm0oPC9TVFJPTkc+PEVNPnRlcm08L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPjEsPC9TVFJPTkc+IDxTVFJPTkc+KGludDwvU1RST05HPiA8U1RST05HPiopMCk8L1NUUk9ORz4KKworICAgICAgIHByb3ZpZGVzICB0aGUgIHNhbWUgIGZ1bmN0aW9uYWxpdHkgIGFzIDxTVFJPTkc+c2V0dGVybSg8L1NUUk9ORz48RU0+dGVybTwvRU0+PFNUUk9ORz4pPC9TVFJPTkc+LiAgVGhlCisgICAgICAgPFNUUk9ORz5zZXR0ZXJtPC9TVFJPTkc+IHJvdXRpbmUgaXMgaW5jbHVkZWQgaGVyZSAgZm9yICBCU0QgIGNvbXBhdGliaWxpdHksCisgICAgICAgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgbmV3IHByb2dyYW1zLgorCisgICAgICAgVGhlICA8U1RST05HPnNldF9jdXJ0ZXJtPC9TVFJPTkc+ICByb3V0aW5lICBzZXRzICB0aGUgIHZhcmlhYmxlIDxTVFJPTkc+Y3VyX3Rlcm08L1NUUk9ORz4gdG8KKyAgICAgICA8RU0+bnRlcm08L0VNPiwgYW5kIG1ha2VzIGFsbCBvZiB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBib29sZWFuLCBudW1lcmljLCBhbmQKKyAgICAgICBzdHJpbmcgIHZhcmlhYmxlcyAgdXNlICB0aGUgdmFsdWVzIGZyb20gPEVNPm50ZXJtPC9FTT4uICBJdCByZXR1cm5zCisgICAgICAgdGhlIG9sZCB2YWx1ZSBvZiA8U1RST05HPmN1cl90ZXJtPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+ZGVsX2N1cnRlcm08L1NUUk9ORz4gcm91dGluZSBmcmVlcyAgdGhlICBzcGFjZSAgcG9pbnRlZCAgdG8gIGJ5CisgICAgICAgPEVNPm90ZXJtPC9FTT4gYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgZnVydGhlciB1c2UuICBJZiA8RU0+b3Rlcm08L0VNPiBpcworICAgICAgIHRoZSBzYW1lIGFzIDxTVFJPTkc+Y3VyX3Rlcm08L1NUUk9ORz4sIHJlZmVyZW5jZXMgdG8gYW55ICBvZiAgdGhlICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+CisgICAgICAgYm9vbGVhbiwgIG51bWVyaWMsIGFuZCBzdHJpbmcgdmFyaWFibGVzIHRoZXJlYWZ0ZXIgbWF5IHJlLQorICAgICAgIGZlciB0byBpbnZhbGlkIG1lbW9yeSBsb2NhdGlvbnMgIHVudGlsICBhbm90aGVyICA8U1RST05HPnNldHVwdGVybTwvU1RST05HPgorICAgICAgIGhhcyBiZWVuIGNhbGxlZC4KKworICAgICAgIFRoZSAgPFNUUk9ORz5yZXN0YXJ0dGVybTwvU1RST05HPiAgcm91dGluZSAgaXMgIHNpbWlsYXIgIHRvICA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+LCBleGNlcHQgdGhhdCBpdCBpcyBjYWxsZWQgYWZ0ZXIgIHJlc3RvcmluZyAgbWVtb3J5CisgICAgICAgdG8gIGEgIHByZXZpb3VzICBzdGF0ZSAoZm9yIGV4YW1wbGUsIHdoZW4gcmVsb2FkaW5nIGEgZ2FtZQorICAgICAgIHNhdmVkIGFzIGEgY29yZSBpbWFnZSBkdW1wKS4gIEl0IGFzc3VtZXMgdGhhdCB0aGUgIHdpbmRvd3MKKyAgICAgICBhbmQgdGhlIGlucHV0IGFuZCBvdXRwdXQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgd2hlbiBtZW0tCisgICAgICAgb3J5IHdhcyBzYXZlZCwgYnV0IHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCBiYXVkIHJhdGUgbWF5ICBiZQorICAgICAgIGRpZmZlcmVudC4gICBBY2NvcmRpbmdseSwgaXQgc2F2ZXMgdmFyaW91cyB0dHkgc3RhdGUgYml0cywKKyAgICAgICBjYWxscyA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiwgYW5kIHRoZW4gcmVzdG9yZXMgdGhlIGJpdHMuCisKKyAgICAgICBUaGUgPFNUUk9ORz50cGFybTwvU1RST05HPiByb3V0aW5lIGluc3RhbnRpYXRlcyB0aGUgc3RyaW5nIDxFTT5zdHI8L0VNPiB3aXRoIHBhcmFtZS0KKyAgICAgICB0ZXJzICA8RU0+cGk8L0VNPi4gIEEgcG9pbnRlciBpcyByZXR1cm5lZCB0byB0aGUgcmVzdWx0IG9mIDxFTT5zdHI8L0VNPiB3aXRoCisgICAgICAgdGhlIHBhcmFtZXRlcnMgYXBwbGllZC4KKworICAgICAgIFRoZSA8U1RST05HPnRwdXRzPC9TVFJPTkc+ICByb3V0aW5lICBhcHBsaWVzICBwYWRkaW5nICBpbmZvcm1hdGlvbiAgdG8gIHRoZQorICAgICAgIHN0cmluZyAgPEVNPnN0cjwvRU0+ICBhbmQgIG91dHB1dHMgIGl0LiAgVGhlIDxFTT5zdHI8L0VNPiBtdXN0IGJlIGEgdGVybWluZm8KKyAgICAgICBzdHJpbmcgdmFyaWFibGUgb3IgdGhlIHJldHVybiB2YWx1ZSBmcm9tICA8U1RST05HPnRwYXJtPC9TVFJPTkc+LCAgPFNUUk9ORz50Z2V0c3RyPC9TVFJPTkc+LAorICAgICAgIG9yIDxTVFJPTkc+dGdvdG88L1NUUk9ORz4uICA8RU0+YWZmY250PC9FTT4gaXMgdGhlIG51bWJlciBvZiBsaW5lcyBhZmZlY3RlZCwgb3IgMSBpZgorICAgICAgIG5vdCBhcHBsaWNhYmxlLiAgPEVNPnB1dGM8L0VNPiBpcyBhIDxTVFJPTkc+cHV0Y2hhcjwvU1RST05HPi1saWtlIHJvdXRpbmUgIHRvICB3aGljaAorICAgICAgIHRoZSBjaGFyYWN0ZXJzIGFyZSBwYXNzZWQsIG9uZSBhdCBhIHRpbWUuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+cHV0cDwvU1RST05HPiByb3V0aW5lIGNhbGxzIDxTVFJPTkc+dHB1dHMoPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+MSw8L1NUUk9ORz4gPFNUUk9ORz5wdXRjaGFyKTwvU1RST05HPi4gIE5vdGUgdGhhdAorICAgICAgIHRoZSBvdXRwdXQgb2YgPFNUUk9ORz5wdXRwPC9TVFJPTkc+IGFsd2F5cyAgZ29lcyAgdG8gIDxTVFJPTkc+c3Rkb3V0PC9TVFJPTkc+LCAgbm90ICB0byAgdGhlCisgICAgICAgPEVNPmZpbGRlczwvRU0+IHNwZWNpZmllZCBpbiA8U1RST05HPnNldHVwdGVybTwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPnZpZHB1dHM8L1NUUk9ORz4gcm91dGluZSBkaXNwbGF5cyB0aGUgc3RyaW5nIG9uIHRoZSB0ZXJtaW5hbCBpbgorICAgICAgIHRoZSB2aWRlbyBhdHRyaWJ1dGUgbW9kZSA8RU0+YXR0cnM8L0VNPiwgd2hpY2ggaXMgIGFueSAgY29tYmluYXRpb24KKyAgICAgICBvZiAgdGhlICBhdHRyaWJ1dGVzICBsaXN0ZWQgaW4gPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LiAgVGhlIGNoYXJhY3RlcnMKKyAgICAgICBhcmUgcGFzc2VkIHRvIHRoZSA8U1RST05HPnB1dGNoYXI8L1NUUk9ORz4tbGlrZSByb3V0aW5lIDxFTT5wdXRjPC9FTT4uCisKKyAgICAgICBUaGUgPFNUUk9ORz52aWRhdHRyPC9TVFJPTkc+IHJvdXRpbmUgaXMgbGlrZSB0aGUgIDxTVFJPTkc+dmlkcHV0czwvU1RST05HPiAgcm91dGluZSwgIGV4Y2VwdAorICAgICAgIHRoYXQgaXQgb3V0cHV0cyB0aHJvdWdoIDxTVFJPTkc+cHV0Y2hhcjwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz52aWRfYXR0cjwvU1RST05HPiAgYW5kIDxTVFJPTkc+dmlkX3B1dHM8L1NUUk9ORz4gcm91dGluZXMgY29ycmVzcG9uZCB0byB2aWRhdHRyCisgICAgICAgYW5kIHZpZHB1dHMsIHJlc3BlY3RpdmVseS4gIFRoZXkgdXNlIGEgIHNldCAgb2YgIGFyZ3VtZW50cworICAgICAgIGZvciAgcmVwcmVzZW50aW5nICB0aGUgIHZpZGVvIGF0dHJpYnV0ZXMgcGx1cyBjb2xvciwgaS5lLiwKKyAgICAgICBvbmUgb2YgdHlwZSBhdHRyX3QgZm9yIHRoZSBhdHRyaWJ1dGVzIGFuZCBvbmUgb2Ygc2hvcnQgZm9yCisgICAgICAgdGhlIGNvbG9yX3BhaXIgbnVtYmVyLiAgVGhlIDxTVFJPTkc+dmlkX2F0dHI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dmlkX3B1dHM8L1NUUk9ORz4gcm91dGluZXMKKyAgICAgICBhcmUgZGVzaWduZWQgdG8gdXNlIHRoZSBhdHRyaWJ1dGUgY29uc3RhbnRzIHdpdGggIHRoZSAgPEVNPldBPC9FTT48U1RST05HPl88L1NUUk9ORz4KKyAgICAgICBwcmVmaXguICAgVGhlICBvcHRzICBhcmd1bWVudCAgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisgICAgICAgQ3VycmVudGx5LCBhcHBsaWNhdGlvbnMgbXVzdCBwcm92aWRlIGEgIG51bGwgIHBvaW50ZXIgIGZvcgorICAgICAgIHRoYXQgYXJndW1lbnQuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+bXZjdXI8L1NUUk9ORz4gIHJvdXRpbmUgIHByb3ZpZGVzIGxvdy1sZXZlbCBjdXJzb3IgbW90aW9uLiAgSXQKKyAgICAgICB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgKHJhdGhlciAgdGhhbiAgYXQgIHRoZSAgbmV4dCAgcmUtCisgICAgICAgZnJlc2gpLgorCisgICAgICAgVGhlICA8U1RST05HPnRpZ2V0ZmxhZzwvU1RST05HPiwgIDxTVFJPTkc+dGlnZXRudW08L1NUUk9ORz4gYW5kIDxTVFJPTkc+dGlnZXRzdHI8L1NUUk9ORz4gcm91dGluZXMgcmV0dXJuIHRoZQorICAgICAgIHZhbHVlIG9mIHRoZSBjYXBhYmlsaXR5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gPEVNPmNhcC08L0VNPgorICAgICAgIDxFTT5uYW1lPC9FTT4gcGFzc2VkIHRvIHRoZW0sIHN1Y2ggYXMgPFNUUk9ORz54ZW5sPC9TVFJPTkc+LgorCisgICAgICAgVGhlICA8U1RST05HPnRpZ2V0ZmxhZzwvU1RST05HPiAgcm91dGluZSByZXR1cm5zIHRoZSB2YWx1ZSA8U1RST05HPi0xPC9TVFJPTkc+IGlmIDxFTT5jYXBuYW1lPC9FTT4gaXMKKyAgICAgICBub3QgYSBib29sZWFuIGNhcGFiaWxpdHksIG9yIDxTVFJPTkc+MDwvU1RST05HPiBpZiBpdCBpcyBjYW5jZWxlZCBvciBhYnNlbnQKKyAgICAgICBmcm9tIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKworICAgICAgIFRoZSAgPFNUUk9ORz50aWdldG51bTwvU1RST05HPiAgcm91dGluZSAgcmV0dXJucyB0aGUgdmFsdWUgPFNUUk9ORz4tMjwvU1RST05HPiBpZiA8RU0+Y2FwbmFtZTwvRU0+IGlzCisgICAgICAgbm90IGEgbnVtZXJpYyBjYXBhYmlsaXR5LCBvciA8U1RST05HPi0xPC9TVFJPTkc+IGlmIGl0IGlzIGNhbmNlbGVkICBvciAgYWItCisgICAgICAgc2VudCBmcm9tIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKworICAgICAgIFRoZSAgPFNUUk9ORz50aWdldHN0cjwvU1RST05HPiByb3V0aW5lIHJldHVybnMgdGhlIHZhbHVlIDxTVFJPTkc+KGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qKS0xPC9TVFJPTkc+IGlmIDxFTT5jYXAtPC9FTT4KKyAgICAgICA8RU0+bmFtZTwvRU0+IGlzIG5vdCBhIHN0cmluZyBjYXBhYmlsaXR5LCBvciA8U1RST05HPjA8L1NUUk9ORz4gaWYgaXQgaXMgY2FuY2VsZWQgb3IKKyAgICAgICBhYnNlbnQgZnJvbSB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uCisKKyAgICAgICBUaGUgPEVNPmNhcG5hbWU8L0VNPiBmb3IgZWFjaCBjYXBhYmlsaXR5IGlzIGdpdmVuIGluIHRoZSB0YWJsZSBjb2wtCisgICAgICAgdW1uIGVudGl0bGVkIDxFTT5jYXBuYW1lPC9FTT4gY29kZSBpbiB0aGUgY2FwYWJpbGl0aWVzICBzZWN0aW9uICBvZgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmJvb2xuYW1lc1tdPC9TVFJPTkc+LCA8U1RST05HPipib29sY29kZXNbXTwvU1RST05HPiwgPFNUUk9ORz4qYm9vbGZuYW1lc1tdPC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Km51bW5hbWVzW108L1NUUk9ORz4sIDxTVFJPTkc+Km51bWNvZGVzW108L1NUUk9ORz4sIDxTVFJPTkc+Km51bWZuYW1lc1tdPC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0cm5hbWVzW108L1NUUk9ORz4sIDxTVFJPTkc+KnN0cmNvZGVzW108L1NUUk9ORz4sIDxTVFJPTkc+KnN0cmZuYW1lc1tdPC9TVFJPTkc+CisKKyAgICAgICBUaGVzZSAgbnVsbC10ZXJtaW5hdGVkICBhcnJheXMgIGNvbnRhaW4gIHRoZSA8RU0+Y2FwbmFtZXM8L0VNPiwgdGhlCisgICAgICAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IGNvZGVzLCBhbmQgdGhlIGZ1bGwgQyBuYW1lcywgZm9yIGVhY2ggb2YgdGhlICA8U1RST05HPnRlci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm1pbmZvPC9TVFJPTkc+IHZhcmlhYmxlcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgIHRoYXQgIHJldHVybiAgYW4gaW50ZWdlciByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlCisgICAgICAgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgIG90aGVyICB0aGFuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSAgdXBvbiAgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkCisgICAgICAgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKworICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIGFsd2F5cyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLgorCisgICAgICAgWC9PcGVuICBkZWZpbmVzICBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyBpbXBsZW1lbnRhLQorICAgICAgIHRpb24KKworICAgICAgICAgICAgICA8U1RST05HPmRlbF9jdXJ0ZXJtPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiBpdHMgdGVybWluYWwgcGFyYW1ldGVyICBpcworICAgICAgICAgICAgICAgICAgIG51bGwuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5wdXRwPC9TVFJPTkc+IGNhbGxzIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4sIHJldHVybmluZyB0aGUgc2FtZSBlcnJvci1jb2Rlcy4KKworICAgICAgICAgICAgICA8U1RST05HPnJlc3RhcnR0ZXJtPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgYXNzb2NpYXRlZCBjYWxsIHRvIDxTVFJPTkc+c2UtPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz50dXB0ZXJtPC9TVFJPTkc+IHJldHVybnMgYW4gZXJyb3IuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIGl0IGNhbm5vdCBhbGxvY2F0ZSAgZW5vdWdoCisgICAgICAgICAgICAgICAgICAgbWVtb3J5LCBvciBjcmVhdGUgdGhlIGluaXRpYWwgd2luZG93cyAoc3Rkc2NyLAorICAgICAgICAgICAgICAgICAgIGN1cnNjciwgbmV3c2NyKS4gIE90aGVyIGVycm9yICBjb25kaXRpb25zICBhcmUKKyAgICAgICAgICAgICAgICAgICBkb2N1bWVudGVkIGFib3ZlLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiAgZXJyb3IgIGlmIHRoZSBzdHJpbmcgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbC4gIEl0IGRvZXMgbm90IGRldGVjdCBJL08gIGVycm9yczogIFgvT3BlbgorICAgICAgICAgICAgICAgICAgIHN0YXRlcyAgdGhhdCA8U1RST05HPnRwdXRzPC9TVFJPTkc+IGlnbm9yZXMgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgZnVuY3Rpb24gPEVNPnB1dGM8L0VNPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4gcm91dGluZSBzaG91bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiAgPFNUUk9ORz5zZXR0ZXJtPC9TVFJPTkc+LgorICAgICAgIEl0ICBtYXkgYmUgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gdGVzdCBmb3IgdGVybWluYWwgY2FwYS0KKyAgICAgICBiaWxpdGllcyB3aXRob3V0IGNvbW1pdHRpbmcgdG8gdGhlIGFsbG9jYXRpb24gIG9mICBzdG9yYWdlCisgICAgICAgaW52b2x2ZWQgaW4gPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+LgorCisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+dmlkYXR0cjwvU1RST05HPiBhbmQgPFNUUk9ORz52aWRwdXRzPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXR0ZXJtPC9TVFJPTkc+IGlzIG5vdCBkZXNjcmliZWQgYnkgWC9PcGVuIGFuZCBtdXN0CisgICAgICAgYmUgY29uc2lkZXJlZCBub24tcG9ydGFibGUuICBBbGwgb3RoZXIgIGZ1bmN0aW9ucyAgYXJlICBhcworICAgICAgIGRlc2NyaWJlZCBieSBYL09wZW4uCisKKyAgICAgICA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiAgY29waWVzICB0aGUgdGVybWluYWwgbmFtZSB0byB0aGUgYXJyYXkgPFNUUk9ORz50dHl0eXBlPC9TVFJPTkc+LgorICAgICAgIFRoaXMgaXMgbm90IHBhcnQgb2YgWC9PcGVuIEN1cnNlcywgYnV0IGlzIGFzc3VtZWQgYnkgIHNvbWUKKyAgICAgICBhcHBsaWNhdGlvbnMuCisKKyAgICAgICBJbiAgU3lzdGVtIFYgUmVsZWFzZSA0LCA8U1RST05HPnNldF9jdXJ0ZXJtPC9TVFJPTkc+IGhhcyBhbiA8U1RST05HPmludDwvU1RST05HPiByZXR1cm4gdHlwZQorICAgICAgIGFuZCByZXR1cm5zIDxTVFJPTkc+T0s8L1NUUk9ORz4gb3IgPFNUUk9ORz5FUlI8L1NUUk9ORz4uICBXZSBoYXZlIGNob3NlbiAgdG8gIGltcGxlbWVudCAgdGhlCisgICAgICAgWC9PcGVuIEN1cnNlcyBzZW1hbnRpY3MuCisKKyAgICAgICBJbiBTeXN0ZW0gViBSZWxlYXNlIDQsIHRoZSB0aGlyZCBhcmd1bWVudCBvZiA8U1RST05HPnRwdXRzPC9TVFJPTkc+IGhhcyB0aGUKKyAgICAgICB0eXBlIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCpwdXRjKShjaGFyKTwvU1RST05HPi4KKworICAgICAgIEF0IGxlYXN0IG9uZSBpbXBsZW1lbnRhdGlvbiBvZiBYL09wZW4gQ3Vyc2VzIChTb2xhcmlzKSByZS0KKyAgICAgICB0dXJucyAgYSB2YWx1ZSBvdGhlciB0aGFuIE9LL0VSUiBmcm9tIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4uICBUaGF0IHJldHVybnMKKyAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIGFuZCBkb2VzIG5vIGVycm9yLWNoZWNraW5nLgorCisgICAgICAgWC9PcGVuIEN1cnNlcyBwcm90b3R5cGVzIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4gd2l0aCBhIGZpeGVkIG51bWJlciBvZiAgcGEtCisgICAgICAgcmFtZXRlcnMsICByYXRoZXIgdGhhbiBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuICBUaGlzIGltLQorICAgICAgIHBsZW1lbnRhdGlvbiB1c2VzIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gIFBvcnRhYmxlICBhcC0KKyAgICAgICBwbGljYXRpb25zICBzaG91bGQgIHByb3ZpZGUgOSBwYXJhbWV0ZXJzIGFmdGVyIHRoZSBmb3JtYXQ7CisgICAgICAgemVyb2VzIGFyZSBmaW5lIGZvciB0aGlzIHB1cnBvc2UuCisKKyAgICAgICBYL09wZW4gbm90ZXMgdGhhdCBhZnRlciBjYWxsaW5nIDxTVFJPTkc+bXZjdXI8L1NUUk9ORz4sICB0aGUgIGN1cnNlcyAgc3RhdGUKKyAgICAgICBtYXkgIG5vdCAgbWF0Y2ggdGhlIGFjdHVhbCB0ZXJtaW5hbCBzdGF0ZSwgYW5kIHRoYXQgYW4gYXAtCisgICAgICAgcGxpY2F0aW9uIHNob3VsZCB0b3VjaCBhbmQgcmVmcmVzaCB0aGUgd2luZG93ICBiZWZvcmUgIHJlLQorICAgICAgIHN1bWluZyBub3JtYWwgY3Vyc2VzIGNhbGxzLiAgQm90aCBuY3Vyc2VzIGFuZCBTeXN0ZW0gViBSZS0KKyAgICAgICBsZWFzZSA0IGN1cnNlcyBpbXBsZW1lbnQgPFNUUk9ORz5tdmN1cjwvU1RST05HPiB1c2luZyB0aGUgU0NSRUVOIGRhdGEgYWxsby0KKyAgICAgICBjYXRlZCBpbiBlaXRoZXIgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IG9yIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPi4gIFNvIHRob3VnaCBpdCBpcyBkb2N1LQorICAgICAgIG1lbnRlZCBhcyBhIHRlcm1pbmZvIGZ1bmN0aW9uLCA8U1RST05HPm12Y3VyPC9TVFJPTkc+IGlzICByZWFsbHkgIGEgIGN1cnNlcworICAgICAgIGZ1bmN0aW9uIHdoaWNoIGlzIG5vdCB3ZWxsIHNwZWNpZmllZC4KKworICAgICAgIFgvT3BlbiAgc3RhdGVzICB0aGF0ICB0aGUgIG9sZCAgbG9jYXRpb24gbXVzdCBiZSBnaXZlbiBmb3IKKyAgICAgICA8U1RST05HPm12Y3VyPC9TVFJPTkc+LiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0byB1c2UgIC0xJ3MKKyAgICAgICBmb3IgIHRoZSBvbGQgb3JkaW5hdGVzLiAgSW4gdGhhdCBjYXNlLCB0aGUgb2xkIGxvY2F0aW9uIGlzCisgICAgICAgdW5rbm93bi4KKworICAgICAgIEV4dGVuZGVkIHRlcm1pbmFsIGNhcGFiaWxpdHkgbmFtZXMsIGUuZy4sICBhcyAgZGVmaW5lZCAgYnkKKyAgICAgICA8U1RST05HPnRpYzwvU1RST05HPiA8U1RST05HPi14PC9TVFJPTkc+LCAgYXJlICBub3QgIHN0b3JlZCAgaW4gdGhlIGFycmF5cyBkZXNjcmliZWQgaW4gdGhpcworICAgICAgIHNlY3Rpb24uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz5jdXJzX3Rlcm0tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y2FwKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0icHV0Yy4zLmh0bWwiPnB1dGMoMyk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX3RocmVhZHMuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3RocmVhZHMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTJmMGZkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfdGhyZWFkcy4zeC5odG1sCkBAIC0wLDAgKzEsNjMxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfdGhyZWFkcy4zeCx2IDEuMTIgMjAwOC8wNC8xMiAxODoyMjo1MSB0b20gRXhwIEAKKyAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3RocmVhZHMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3RocmVhZHMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfdGhyZWFkcy4zeC5odG1sIj5jdXJzX3RocmVhZHMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190aHJlYWRzLjN4Lmh0bWwiPmN1cnNfdGhyZWFkcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz51c2Vfc2NyZWVuPC9TVFJPTkc+LCA8U1RST05HPnVzZV93aW5kb3c8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiB0aHJlYWQgc3VwcG9ydAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPnR5cGVkZWY8L1NUUk9ORz4gIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCpOQ1VSU0VTX1dJTkRPV19DQikoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kiw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Kik7PC9TVFJPTkc+IDxTVFJPTkc+dHlwZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmRlZjwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPigqTkNVUlNFU19TQ1JFRU5fQ0IpKFNDUkVFTjwvU1RST05HPiA8U1RST05HPiosPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPiopOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0X2VzY2RlbGF5KGludDwvU1RST05HPiA8U1RST05HPnNpemUpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0X3RhYnNpemUoaW50PC9TVFJPTkc+IDxTVFJPTkc+c2l6ZSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz51c2Vfc2NyZWVuKFNDUkVFTjwvU1RST05HPiA8U1RST05HPipzY3IsPC9TVFJPTkc+IDxTVFJPTkc+TkNVUlNFU19XSU5ET1dfQ0I8L1NUUk9ORz4gIDxTVFJPTkc+ZnVuYyw8L1NUUk9ORz4gIDxTVFJPTkc+dm9pZDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+KmRhdGEpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+ICA8U1RST05HPnVzZV93aW5kb3coV0lORE9XPC9TVFJPTkc+ICA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+TkNVUlNFU19TQ1JFRU5fQ0I8L1NUUk9ORz4gPFNUUk9ORz5mdW5jLDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPipkYXRhKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25maWd1cmVkIHRvIHByb3ZpZGUgIHJ1ZGltZW4tCisgICAgICAgdGFyeSAgc3VwcG9ydCBmb3IgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgVGhpcyBtYWtlcworICAgICAgIGEgZGlmZmVyZW50IHNldCBvZiBsaWJyYXJpZXMsIGUuZy4sIDxFTT5saWJuY3Vyc2VzdDwvRU0+IHNpbmNlICB0aGUKKyAgICAgICBiaW5hcnkgaW50ZXJmYWNlcyBhcmUgZGlmZmVyZW50LgorCisgICAgICAgUmF0aGVyICB0aGFuIG1vZGlmeSB0aGUgaW50ZXJmYWNlcyB0byBwYXNzIGEgdGhyZWFkIHNwZWNpLQorICAgICAgIGZpZXIgdG8gZWFjaCBmdW5jdGlvbiwgaXQgYWRkcyBhIGZldyBmdW5jdGlvbnMgIHdoaWNoICBjYW4KKyAgICAgICBiZSB1c2VkIGluIGFueSBjb25maWd1cmF0aW9uIHdoaWNoIGhpZGUgdGhlIG11dGV4J3MgbmVlZGVkCisgICAgICAgdG8gcHJldmVudCBjb25jdXJyZW50IHVzZSBvZiAgdGhlICBnbG9iYWwgIHZhcmlhYmxlcyAgd2hlbgorICAgICAgIGNvbmZpZ3VyZWQgZm9yIHRocmVhZGluZy4KKworICAgICAgIEluICBhZGRpdGlvbiAgdG8gIGZvcmNpbmcgIGFjY2VzcyB0byBtZW1iZXJzIG9mIHRoZSA8U1RST05HPldJTkRPVzwvU1RST05HPgorICAgICAgIHN0cnVjdHVyZSB0byBiZSB2aWEgZnVuY3Rpb25zICAoc2VlICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4pLCAgaXQKKyAgICAgICBtYWtlcyBmdW5jdGlvbnMgb2YgdGhlIGNvbW1vbiBnbG9iYWwgdmFyaWFibGVzLCBlLmcuLCBDT0wtCisgICAgICAgT1JTLCBDT0xPUl9QQUlSUywgQ09MUywgRVNDREVMQVksIExJTkVTLCAgVEFCU0laRSAgY3Vyc2NyLAorICAgICAgIG5ld3NjciAgYW5kICB0dHl0eXBlLiAgIFRob3NlICB2YXJpYWJsZXMgYXJlIG1haW50YWluZWQgYXMKKyAgICAgICByZWFkLW9ubHkgdmFsdWVzLCBzdG9yZWQgaW4gdGhlIDxTVFJPTkc+U0NSRUVOPC9TVFJPTkc+IHN0cnVjdHVyZS4KKworICAgICAgIEV2ZW4gdGhpcyBpcyBub3QgZW5vdWdoIHRvIG1ha2UgYSB0aHJlYWQtc2FmZSAgYXBwbGljYXRpb24KKyAgICAgICB1c2luZyAgY3Vyc2VzLiAgIEEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24gd291bGQgYmUgZXgtCisgICAgICAgcGVjdGVkIHRvIGhhdmUgdGhyZWFkcyB1cGRhdGluZyBzZXBhcmF0ZSAgd2luZG93cyAgKHdpdGhpbgorICAgICAgIHRoZSBzYW1lIGRldmljZSksIG9yIHVwZGF0aW5nIG9uIHNlcGFyYXRlIHNjcmVlbnMgKG9uIGRpZi0KKyAgICAgICBmZXJlbnQgZGV2aWNlcykuICBBbHNvLCBhIGZldyBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyAgYXJlCisgICAgICAgY29uc2lkZXJlZCAgd3JpdGFibGUgIGJ5IHNvbWUgYXBwbGljYXRpb25zLiAgVGhlIGZ1bmN0aW9ucworICAgICAgIGRlc2NyaWJlZCBoZXJlIGFkZHJlc3MgdGhlc2Ugc3BlY2lhbCBzaXR1YXRpb25zLgorCisgICAgICAgVGhlIEVTQ0RFTEFZIGFuZCBUQUJTSVpFIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG1vZGlmaWVkICBieQorICAgICAgIHNvbWUgIGFwcGxpY2F0aW9ucy4gICBUbyBtb2RpZnkgdGhlbSBpbiBhbnkgY29uZmlndXJhdGlvbiwKKyAgICAgICB1c2UgdGhlICA8U1RST05HPnNldF9lc2NkZWxheTwvU1RST05HPiAgb3IgIDxTVFJPTkc+c2V0X3RhYnNpemU8L1NUUk9ORz4gIGZ1bmN0aW9ucy4gICBPdGhlcgorICAgICAgIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG5vdCBtb2RpZmlhYmxlLgorCisgICAgICAgVGhlICA8U1RST05HPnVzZV93aW5kb3c8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz51c2Vfc2NyZWVuPC9TVFJPTkc+ICBmdW5jdGlvbnMgcHJvdmlkZSBjb2Fyc2UKKyAgICAgICBncmFudWxhcml0eSBtdXRleGVzIGZvciB0aGVpciByZXNwZWN0aXZlIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IGFuZCA8U1RST05HPlNDUkVFTjwvU1RST05HPgorICAgICAgIHBhcmFtZXRlcnMsICBhbmQgY2FsbCBhIHVzZXItc3VwcGxpZWQgZnVuY3Rpb24sIHBhc3NpbmcgaXQKKyAgICAgICBhIDxFTT5kYXRhPC9FTT4gcGFyYW1ldGVyLCBhbmQgcmV0dXJuaW5nIHRoZSB2YWx1ZSBmcm9tICB0aGUgIHVzZXItCisgICAgICAgc3VwcGxpZWQgZnVuY3Rpb24gdG8gdGhlIGFwcGxpY2F0aW9uLgorCisgICA8U1RST05HPlVTQUdFPC9TVFJPTkc+CisgICAgICAgQWxsICBvZiAgdGhlIG5jdXJzZXMgbGlicmFyeSBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGxvLQorICAgICAgIGNhbGUgaXMgbm90IGFsdGVyZWQgZHVyaW5nIG9wZXJhdGlvbi4gIEluICBhZGRpdGlvbiwgIHRoZXkKKyAgICAgICB1c2UgZGF0YSB3aGljaCBpcyBtYWludGFpbmVkIHdpdGhpbiBhIGhpZXJhcmNoeSBvZiBzY29wZXMuCisKKyAgICAgICAgICAgICAgLSAgZ2xvYmFsIGRhdGEsIGUuZy4sIHVzZWQgaW4gdGhlIGxvdy1sZXZlbCB0ZXJtaW4tCisgICAgICAgICAgICAgICAgIGZvIG9yIHRlcm1jYXAgaW50ZXJmYWNlcy4KKworICAgICAgICAgICAgICAtICB0ZXJtaW5hbCAgZGF0YSwgIGUuZy4sIGFzc29jaWF0ZWQgd2l0aCBhIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAgPEVNPnNldDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmN1cnRlcm08L0VNPi4gIFRoZSB0ZXJtaW5hbCBkYXRhIGFyZSAgaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgICAgICAgd2hlbiBzY3JlZW5zIGFyZSBjcmVhdGVkLgorCisgICAgICAgICAgICAgIC0gIHNjcmVlbiAgZGF0YSwgIGUuZy4sICBhc3NvY2lhdGVkICB3aXRoIGEgY2FsbCB0bworICAgICAgICAgICAgICAgICA8RU0+bmV3dGVybTwvRU0+IG9yIDxFTT5pbml0c2NyPC9FTT4uCisKKyAgICAgICAgICAgICAgLSAgd2luZG93IGRhdGEsIGUuZy4sIGFzc29jaWF0ZWQgIHdpdGggIGEgIGNhbGwgIHRvCisgICAgICAgICAgICAgICAgIDxFTT5uZXd3aW48L0VNPiAgb3IgIDxFTT5zdWJ3aW48L0VNPi4gIFdpbmRvd3MgYXJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICBzY3JlZW5zLiAgUGFkcyBhcmUgIG5vdCAgbmVjZXNzYXJpbHkgIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgd2l0aCBhIHBhcnRpY3VsYXIgc2NyZWVuLgorCisgICAgICAgICAgICAgICAgIE1vc3QgIGN1cnNlcyBhcHBsaWNhdGlvbnMgb3BlcmF0ZSBvbiBvbmUgb3IgbW9yZQorICAgICAgICAgICAgICAgICB3aW5kb3dzIHdpdGhpbiBhIHNpbmdsZSBzY3JlZW4uCisKKyAgICAgICAgICAgICAgLSAgcmVlbnRyYW50LCBpLmUuLCBpdCB1c2VzIG9ubHkgdGhlIGRhdGEgcGFzc2VkIGFzCisgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuCisKKyAgICAgICBUaGlzIHRhYmxlIGxpc3RzIHRoZSBzY29wZSBvZiBkYXRhIHVzZWQgZm9yIGVhY2ggc3ltYm9sIGluCisgICAgICAgdGhlIG5jdXJzZXMgbGlicmFyeSAgd2hlbiAgaXQgIGlzICBjb25maWd1cmVkICB0byAgc3VwcG9ydAorICAgICAgIHRocmVhZGluZzoKKworICAgICAgU3ltYm9sICAgICAgICAgICAgICAgICAgU2NvcGUKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIEJDICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgQ09MT1JTICAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIENPTE9SX1BBSVIgICAgICAgICAgICAgIHJlZW50cmFudAorICAgICAgQ09MT1JfUEFJUlMgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIENPTFMgICAgICAgICAgICAgICAgICAgIHNjcmVlbiAocmVhZG9ubHkpCisgICAgICBFU0NERUxBWSAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5LCBzZWUgPEVNPnNldDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmVzY2RlbGF5PC9FTT4pCisgICAgICBMSU5FUyAgICAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgUEFJUl9OVU1CRVIgICAgICAgICAgICAgcmVlbnRyYW50CisgICAgICBQQyAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwKKyAgICAgIFNQICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgVEFCU0laRSAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIFVQICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgYWNzX21hcCAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIGFkZF93Y2ggICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYWRkX3djaG5zdHIgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhZGRfd2Noc3RyICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGFkZGNoICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYWRkY2huc3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhZGRjaHN0ciAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGFkZG5zdHIgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYWRkbndzdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhZGRzdHIgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGFkZHdzdHIgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYXNzdW1lX2RlZmF1bHRfY29sb3JzICAgc2NyZWVuCisgICAgICBhdHRyX2dldCAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGF0dHJfb2ZmICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYXR0cl9vbiAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhdHRyX3NldCAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGF0dHJvZmYgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYXR0cm9uICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhdHRyc2V0ICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGJhdWRyYXRlICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgYmVlcCAgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBia2dkICAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGJrZ2RzZXQgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYmtncm5kICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBia2dybmRzZXQgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGJvb2xjb2RlcyAgICAgICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBib29sZm5hbWVzICAgICAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgYm9vbG5hbWVzICAgICAgICAgICAgICAgZ2xvYmFsIChyZWFkb25seSkKKyAgICAgIGJvcmRlciAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYm9yZGVyX3NldCAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBib3ggICAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGJveF9zZXQgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorCisgICAgICBjYW5fY2hhbmdlX2NvbG9yICAgICAgICB0ZXJtaW5hbAorICAgICAgY2JyZWFrICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBjaGdhdCAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGNsZWFyICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgY2xlYXJvayAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBjbHJ0b2JvdCAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGNscnRvZW9sICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgY29sb3JfY29udGVudCAgICAgICAgICAgc2NyZWVuCisgICAgICBjb2xvcl9zZXQgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGNvcHl3aW4gICAgICAgICAgICAgICAgIHdpbmRvdyBsb2Nrcyhzb3VyY2UsIHRhcmdldCkKKyAgICAgIGN1cl90ZXJtICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBjdXJzX3NldCAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGN1cnNjciAgICAgICAgICAgICAgICAgIHNjcmVlbiAocmVhZG9ubHkpCisgICAgICBjdXJzZXNfdmVyc2lvbiAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgZGVmX3Byb2dfbW9kZSAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGRlZl9zaGVsbF9tb2RlICAgICAgICAgIHRlcm1pbmFsCisgICAgICBkZWZpbmVfa2V5ICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGRlbF9jdXJ0ZXJtICAgICAgICAgICAgIHNjcmVlbgorICAgICAgZGVsYXlfb3V0cHV0ICAgICAgICAgICAgc2NyZWVuCisgICAgICBkZWxjaCAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGRlbGV0ZWxuICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgZGVsc2NyZWVuICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QsIHNjcmVlbikKKyAgICAgIGRlbHdpbiAgICAgICAgICAgICAgICAgIGdsb2JhbCBsb2Nrcyh3aW5kb3dsaXN0KQorICAgICAgZGVyd2luICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBkb3VwZGF0ZSAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGR1cHdpbiAgICAgICAgICAgICAgICAgIHNjcmVlbiBsb2Nrcyh3aW5kb3cpCisgICAgICBlY2hvICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGVjaG9fd2NoYXIgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgZWNob2NoYXIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBlbmR3aW4gICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGVyYXNlICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgZXJhc2VjaGFyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBlcmFzZXdjaGFyICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGZpbHRlciAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgZmxhc2ggICAgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGZsdXNoaW5wICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgZ2V0X3djaCAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBnZXRfd3N0ciAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIGdldGF0dHJzICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0YmVneCAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRiZWd5ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldGJrZ2QgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0Ymtncm5kICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRjY2hhciAgICAgICAgICAgICAgICByZWVudHJhbnQKKyAgICAgIGdldGNoICAgICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgZ2V0Y3VyeCAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRjdXJ5ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldG1heHggICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0bWF4eSAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRtb3VzZSAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIGdldG5fd3N0ciAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgZ2V0bnN0ciAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBnZXRwYXJ4ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldHBhcnkgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0c3RyICAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBnZXR3aW4gICAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIGhhbGZkZWxheSAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgaGFzX2NvbG9ycyAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGhhc19pYyAgICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBoYXNfaWwgICAgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgaGFzX2tleSAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBobGluZSAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGhsaW5lX3NldCAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaWRjb2sgICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBpZGxvayAgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGltbWVkb2sgICAgICAgICAgICAgICAgIHdpbmRvdworCisgICAgICBpbl93Y2ggICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluX3djaG5zdHIgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5fd2Noc3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbmNoICAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluY2huc3RyICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5jaHN0ciAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbml0X2NvbG9yICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGluaXRfcGFpciAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgaW5pdHNjciAgICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QpCisgICAgICBpbm5zdHIgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGlubndzdHIgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5zX253c3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnNfd2NoICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluc193c3RyICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5zY2ggICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnNkZWxsbiAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluc2VydGxuICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5zbnN0ciAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnNzdHIgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluc3RyICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW50cmZsdXNoICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGlud3N0ciAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaXNfY2xlYXJlZCAgICAgICAgICAgICAgd2luZG93CisgICAgICBpc19pZGNvayAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX2lkbG9rICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfaW1tZWRvayAgICAgICAgICAgICAgd2luZG93CisgICAgICBpc19rZXlwYWQgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX2xlYXZlb2sgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfbGluZXRvdWNoZWQgICAgICAgICAgd2luZG93CisgICAgICBpc19ub2RlbGF5ICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX25vdGltZW91dCAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfc2Nyb2xsb2sgICAgICAgICAgICAgd2luZG93CisgICAgICBpc19zeW5jb2sgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX3Rlcm1fcmVzaXplZCAgICAgICAgIHRlcm1pbmFsCisgICAgICBpc193aW50b3VjaGVkICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzZW5kd2luICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAga2V5X2RlZmluZWQgICAgICAgICAgICAgc2NyZWVuCisgICAgICBrZXlfbmFtZSAgICAgICAgICAgICAgICBnbG9iYWwgKHN0YXRpYyBkYXRhKQorICAgICAga2V5Ym91bmQgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBrZXluYW1lICAgICAgICAgICAgICAgICBnbG9iYWwgKHN0YXRpYyBkYXRhKQorICAgICAga2V5b2sgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBrZXlwYWQgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGtpbGxjaGFyICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBraWxsd2NoYXIgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgbGVhdmVvayAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBsb25nbmFtZSAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG1jcHJpbnQgICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBtZXRhICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG1vdXNlX3RyYWZvICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbW91c2VpbnRlcnZhbCAgICAgICAgICAgc2NyZWVuCisgICAgICBtb3VzZW1hc2sgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG1vdmUgICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGRfd2NoICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZF93Y2huc3RyICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12YWRkX3djaHN0ciAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGRjaCAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZGNobnN0ciAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12YWRkY2hzdHIgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGRuc3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZG53c3RyICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12YWRkc3RyICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGR3c3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmNoZ2F0ICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12Y3VyICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbXZkZWxjaCAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmRlcndpbiAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKworICAgICAgbXZnZXRfd2NoICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdmdldF93c3RyICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12Z2V0Y2ggICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZnZXRuX3dzdHIgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdmdldG5zdHIgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12Z2V0c3RyICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZobGluZSAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmhsaW5lX3NldCAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5fd2NoICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbl93Y2huc3RyICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluX3djaHN0ciAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5jaCAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbmNobnN0ciAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluY2hzdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5uc3RyICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbm53c3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluc19ud3N0ciAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5zX3djaCAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbnNfd3N0ciAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluc2NoICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5zbnN0ciAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbnNzdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluc3RyICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW53c3RyICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZwcmludHcgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdnNjYW53ICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG12dmxpbmUgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZ2bGluZV9zZXQgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdndhZGRfd2NoICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2FkZF93Y2huc3RyICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3YWRkX3djaHN0ciAgICAgICAgICAgd2luZG93CisgICAgICBtdndhZGRjaCAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2FkZGNobnN0ciAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3YWRkY2hzdHIgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndhZGRuc3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2FkZG53c3RyICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3YWRkc3RyICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndhZGR3c3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2NoZ2F0ICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3ZGVsY2ggICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndnZXRfd2NoICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12d2dldF93c3RyICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZ3Z2V0Y2ggICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdndnZXRuX3dzdHIgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12d2dldG5zdHIgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZ3Z2V0c3RyICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdndobGluZSAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2hsaW5lX3NldCAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW4gICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbl93Y2ggICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luX3djaG5zdHIgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5fd2Noc3RyICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbmNoICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luY2huc3RyICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5jaHN0ciAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbm5zdHIgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2lubndzdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5zX253c3RyICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbnNfd2NoICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luc193c3RyICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5zY2ggICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbnNuc3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luc3N0ciAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5zdHIgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbndzdHIgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d3ByaW50dyAgICAgICAgICAgICAgIHdpbmRvdworCisgICAgICBtdndzY2FudyAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG12d3ZsaW5lICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3dmxpbmVfc2V0ICAgICAgICAgICAgd2luZG93CisgICAgICBuYXBtcyAgICAgICAgICAgICAgICAgICByZWVudHJhbnQKKyAgICAgIG5ld3BhZCAgICAgICAgICAgICAgICAgIGdsb2JhbCBsb2Nrcyh3aW5kb3dsaXN0KQorICAgICAgbmV3c2NyICAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIG5ld3Rlcm0gICAgICAgICAgICAgICAgIGdsb2JhbCBsb2NrcyhzY3JlZW5saXN0KQorICAgICAgbmV3d2luICAgICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QpCisgICAgICBubCAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG5vY2JyZWFrICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbm9kZWxheSAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBub2VjaG8gICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG5vZmlsdGVyICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgbm9ubCAgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBub3FpZmx1c2ggICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgbm9yYXcgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBub3RpbWVvdXQgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG51bWNvZGVzICAgICAgICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBudW1mbmFtZXMgICAgICAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgbnVtbmFtZXMgICAgICAgICAgICAgICAgZ2xvYmFsIChyZWFkb25seSkKKyAgICAgIG9zcGVlZCAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgb3ZlcmxheSAgICAgICAgICAgICAgICAgd2luZG93IGxvY2tzKHNvdXJjZSwgdGFyZ2V0KQorICAgICAgb3ZlcndyaXRlICAgICAgICAgICAgICAgd2luZG93IGxvY2tzKHNvdXJjZSwgdGFyZ2V0KQorICAgICAgcGFpcl9jb250ZW50ICAgICAgICAgICAgc2NyZWVuCisgICAgICBwZWNob193Y2hhciAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHBlY2hvY2hhciAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgcG5vdXRyZWZyZXNoICAgICAgICAgICAgc2NyZWVuCisgICAgICBwcmVmcmVzaCAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHByaW50dyAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgcHV0cCAgICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBwdXR3aW4gICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHFpZmx1c2ggICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICByYXcgICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHJlZHJhd3dpbiAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgcmVmcmVzaCAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICByZXNldF9wcm9nX21vZGUgICAgICAgICBzY3JlZW4KKyAgICAgIHJlc2V0X3NoZWxsX21vZGUgICAgICAgIHNjcmVlbgorICAgICAgcmVzZXR0eSAgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIHJlc2l6ZV90ZXJtICAgICAgICAgICAgIHNjcmVlbiBsb2Nrcyh3aW5kb3dsaXN0KQorICAgICAgcmVzaXpldGVybSAgICAgICAgICAgICAgc2NyZWVuCisgICAgICByZXN0YXJ0dGVybSAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHJpcG9mZmxpbmUgICAgICAgICAgICAgIGdsb2JhbCAoc3RhdGljIGRhdGEpCisgICAgICBzYXZldHR5ICAgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgc2NhbncgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzY3JfZHVtcCAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNjcl9pbml0ICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2NyX3Jlc3RvcmUgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzY3Jfc2V0ICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNjcmwgICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgc2Nyb2xsICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBzY3JvbGxvayAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHNldF9jdXJ0ZXJtICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2V0X2VzY2RlbGF5ICAgICAgICAgICAgc2NyZWVuCisgICAgICBzZXRfdGFic2l6ZSAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNldF90ZXJtICAgICAgICAgICAgICAgIGdsb2JhbCBsb2NrcyhzY3JlZW5saXN0LCBzY3JlZW4pCisgICAgICBzZXRjY2hhciAgICAgICAgICAgICAgICByZWVudHJhbnQKKyAgICAgIHNldHNjcnJlZyAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgc2V0dXB0ZXJtICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBzbGtfYXR0ciAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19hdHRyX29mZiAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2F0dHJfb24gICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfYXR0cl9zZXQgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19hdHRyb2ZmICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2F0dHJvbiAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfYXR0cnNldCAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19jbGVhciAgICAgICAgICAgICAgIHNjcmVlbgorCisgICAgICBzbGtfY29sb3IgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19pbml0ICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2xhYmVsICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfbm91dHJlZnJlc2ggICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19yZWZyZXNoICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX3Jlc3RvcmUgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfc2V0ICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa190b3VjaCAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX3dzZXQgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzdGFuZGVuZCAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHN0YW5kb3V0ICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgc3RhcnRfY29sb3IgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzdGRzY3IgICAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgc3RyY29kZXMgICAgICAgICAgICAgICAgZ2xvYmFsIChyZWFkb25seSkKKyAgICAgIHN0cmZuYW1lcyAgICAgICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBzdHJuYW1lcyAgICAgICAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgc3VicGFkICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBzdWJ3aW4gICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHN5bmNvayAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgdGVybV9hdHRycyAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB0ZXJtYXR0cnMgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHRlcm1uYW1lICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICB0Z2V0ZW50ICAgICAgICAgICAgICAgICBnbG9iYWwKKyAgICAgIHRnZXRmbGFnICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgdGdldG51bSAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICB0Z2V0c3RyICAgICAgICAgICAgICAgICBnbG9iYWwKKyAgICAgIHRnb3RvICAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgdGlnZXRmbGFnICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIHRpZ2V0bnVtICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICB0aWdldHN0ciAgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgdGltZW91dCAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICB0b3VjaGxpbmUgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHRvdWNod2luICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgdHBhcm0gICAgICAgICAgICAgICAgICAgZ2xvYmFsIChzdGF0aWMgZGF0YSkKKyAgICAgIHRwdXRzICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdHJhY2UgICAgICAgICAgICAgICAgICAgZ2xvYmFsIChzdGF0aWMgZGF0YSkKKyAgICAgIHR0eXR5cGUgICAgICAgICAgICAgICAgIHNjcmVlbiAocmVhZG9ubHkpCisgICAgICB0eXBlYWhlYWQgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHVuY3RybCAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdW5nZXRfd2NoICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICB1bmdldGNoICAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIHVuZ2V0bW91c2UgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgdW50b3VjaHdpbiAgICAgICAgICAgICAgd2luZG93CisgICAgICB1c2VfZGVmYXVsdF9jb2xvcnMgICAgICBzY3JlZW4KKyAgICAgIHVzZV9lbnYgICAgICAgICAgICAgICAgIGdsb2JhbCAoc3RhdGljIGRhdGEpCisgICAgICB1c2VfZXh0ZW5kZWRfbmFtZXMgICAgICBnbG9iYWwgKHN0YXRpYyBkYXRhKQorICAgICAgdXNlX2xlZ2FjeV9jb2RpbmcgICAgICAgc2NyZWVuCisgICAgICB1c2Vfc2NyZWVuICAgICAgICAgICAgICBnbG9iYWwgbG9ja3Moc2NyZWVubGlzdCwgc2NyZWVuKQorICAgICAgdXNlX3dpbmRvdyAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QsIHdpbmRvdykKKyAgICAgIHZpZF9hdHRyICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdmlkX3B1dHMgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB2aWRhdHRyICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHZpZHB1dHMgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdmxpbmUgICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICB2bGluZV9zZXQgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIHZ3X3ByaW50dyAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgdndfc2NhbncgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB2d3ByaW50dyAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHZ3c2NhbncgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgd2FkZF93Y2ggICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YWRkX3djaG5zdHIgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhZGRfd2Noc3RyICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2FkZGNoICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YWRkY2huc3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhZGRjaHN0ciAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2FkZG5zdHIgICAgICAgICAgICAgICAgd2luZG93CisKKyAgICAgIHdhZGRud3N0ciAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2FkZHN0ciAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YWRkd3N0ciAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhdHRyX2dldCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2F0dHJfb2ZmICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YXR0cl9vbiAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhdHRyX3NldCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2F0dHJvZmYgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YXR0cm9uICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhdHRyc2V0ICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2JrZ2QgICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YmtnZHNldCAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdia2dybmQgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2JrZ3JuZHNldCAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Ym9yZGVyICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdib3JkZXJfc2V0ICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2NoZ2F0ICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Y2xlYXIgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdjbHJ0b2JvdCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2NscnRvZW9sICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Y29sb3Jfc2V0ICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdjdXJzeW5jdXAgICAgICAgICAgICAgIHNjcmVlbiAoYWZmZWN0cyB3aW5kb3cgcGx1cyBwYXJlbnRzKQorICAgICAgd2RlbGNoICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3ZGVsZXRlbG4gICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdlY2hvX3djaGFyICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2VjaG9jaGFyICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3ZW5jbG9zZSAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdlcmFzZSAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2dldF93Y2ggICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICB3Z2V0X3dzdHIgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIHdnZXRia2dybmQgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2dldGNoICAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICB3Z2V0bl93c3RyICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIHdnZXRuc3RyICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgd2dldHBhcmVudCAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Z2V0c2NycmVnICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdnZXRzdHIgICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgd2hsaW5lICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aGxpbmVfc2V0ICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbl93Y2ggICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luX3djaG5zdHIgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5fd2Noc3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbmNoICAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luY2huc3RyICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5jaHN0ciAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbm5zdHIgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2lubndzdHIgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5zX253c3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbnNfd2NoICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luc193c3RyICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5zY2ggICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbnNkZWxsbiAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luc2VydGxuICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5zbnN0ciAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbnNzdHIgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luc3RyICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW53c3RyICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdtb3VzZV90cmFmbyAgICAgICAgICAgIHdpbmRvdworICAgICAgd21vdmUgICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3bm91dHJlZnJlc2ggICAgICAgICAgICBzY3JlZW4KKyAgICAgIHdwcmludHcgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd3JlZHJhd2xuICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3cmVmcmVzaCAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHdyZXNpemUgICAgICAgICAgICAgICAgIHdpbmRvdyBsb2Nrcyh3aW5kb3dsaXN0KQorICAgICAgd3NjYW53ICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB3c2NybCAgICAgICAgICAgICAgICAgICB3aW5kb3cKKworICAgICAgd3NldHNjcnJlZyAgICAgICAgICAgICAgd2luZG93CisgICAgICB3c3RhbmRlbmQgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdzdGFuZG91dCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd3N5bmNkb3duICAgICAgICAgICAgICAgc2NyZWVuIChhZmZlY3RzIHdpbmRvdyBwbHVzIHBhcmVudHMpCisgICAgICB3c3luY3VwICAgICAgICAgICAgICAgICBzY3JlZW4gKGFmZmVjdHMgd2luZG93IHBsdXMgcGFyZW50cykKKyAgICAgIHd0aW1lb3V0ICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd3RvdWNobG4gICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3dW5jdHJsICAgICAgICAgICAgICAgICBnbG9iYWwgKHN0YXRpYyBkYXRhKQorICAgICAgd3ZsaW5lICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3dmxpbmVfc2V0ICAgICAgICAgICAgICB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFsbCByZXR1cm4gVFJVRSBvciBGQUxTRSwgZXhjZXB0IGFzIG5vdGVkLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIEJvdGggYSBtYWNybyBhbmQgYSBmdW5jdGlvbiBhcmUgcHJvdmlkZWQgZm9yIGVhY2ggbmFtZS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gIG5jdXJzZXMuICAgVGhleSAgd2VyZSAgbm90CisgICAgICAgc3VwcG9ydGVkICBvbiAgVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uICBuY3Vyc2VzICBleC0KKyAgICAgICB0ZW5zaW9ucyBiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGhyZWFkcy4zeC5odG1sIj5jdXJzX3RocmVhZHMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc190b3VjaC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfdG91Y2guM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmMwZmUyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfdG91Y2guM3guaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3RvdWNoLjN4LHYgMS4xMSAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfdG91Y2ggM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3RvdWNoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50b3VjaHdpbjwvU1RST05HPiwgPFNUUk9ORz50b3VjaGxpbmU8L1NUUk9ORz4sIDxTVFJPTkc+dW50b3VjaHdpbjwvU1RST05HPiwgPFNUUk9ORz53dG91Y2hsbjwvU1RST05HPiwgPFNUUk9ORz5pc19saW5ldG91Y2hlZDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPmlzX3dpbnRvdWNoZWQ8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiByZWZyZXNoIGNvbnRyb2wgcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dG91Y2h3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50b3VjaGxpbmUoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zdGFydCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jb3VudCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz51bnRvdWNod2luKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3RvdWNobG4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y2hhbmdlZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfbGluZXRvdWNoZWQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5saW5lKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc193aW50b3VjaGVkKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPnRvdWNod2luPC9TVFJPTkc+IGFuZCA8U1RST05HPnRvdWNobGluZTwvU1RST05HPiByb3V0aW5lcyB0aHJvdyBhd2F5ICBhbGwgIG9wdGktCisgICAgICAgbWl6YXRpb24gIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHBhcnRzIG9mIHRoZSB3aW5kb3cgaGF2ZQorICAgICAgIGJlZW4gdG91Y2hlZCwgYnkgcHJldGVuZGluZyB0aGF0ICB0aGUgIGVudGlyZSAgd2luZG93ICBoYXMKKyAgICAgICBiZWVuICBkcmF3biAgb24uICAgVGhpcyAgaXMgc29tZXRpbWVzIG5lY2Vzc2FyeSB3aGVuIHVzaW5nCisgICAgICAgb3ZlcmxhcHBpbmcgd2luZG93cywgc2luY2UgYSBjaGFuZ2UgdG8gb25lIHdpbmRvdyAgYWZmZWN0cworICAgICAgIHRoZSBvdGhlciB3aW5kb3csIGJ1dCB0aGUgcmVjb3JkcyBvZiB3aGljaCBsaW5lcyBoYXZlIGJlZW4KKyAgICAgICBjaGFuZ2VkIGluIHRoZSBvdGhlciB3aW5kb3cgZG8gIG5vdCAgcmVmbGVjdCAgdGhlICBjaGFuZ2UuCisgICAgICAgVGhlICByb3V0aW5lIDxTVFJPTkc+dG91Y2hsaW5lPC9TVFJPTkc+IG9ubHkgcHJldGVuZHMgdGhhdCA8RU0+Y291bnQ8L0VNPiBsaW5lcyBoYXZlCisgICAgICAgYmVlbiBjaGFuZ2VkLCBiZWdpbm5pbmcgd2l0aCBsaW5lIDxFTT5zdGFydDwvRU0+LgorCisgICAgICAgVGhlIDxTVFJPTkc+dW50b3VjaHdpbjwvU1RST05HPiByb3V0aW5lIG1hcmtzIGFsbCBsaW5lcyBpbiAgdGhlICB3aW5kb3cgIGFzCisgICAgICAgdW5jaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPnd0b3VjaGxuPC9TVFJPTkc+IHJvdXRpbmUgbWFrZXMgPEVNPm48L0VNPiBsaW5lcyBpbiB0aGUgd2luZG93LCBzdGFydGluZworICAgICAgIGF0IGxpbmUgPEVNPnk8L0VNPiwgbG9vayBhcyBpZiB0aGV5IGhhdmUgKDxFTT5jaGFuZ2VkPC9FTT48U1RST05HPj0xPC9TVFJPTkc+KSAgb3IgIGhhdmUgIG5vdAorICAgICAgICg8RU0+Y2hhbmdlZDwvRU0+PFNUUk9ORz49MDwvU1RST05HPikgIGJlZW4gY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5pc19saW5ldG91Y2hlZDwvU1RST05HPiBhbmQgPFNUUk9ORz5pc193aW50b3VjaGVkPC9TVFJPTkc+IHJvdXRpbmVzIHJldHVybiAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+CisgICAgICAgaWYgIHRoZSAgc3BlY2lmaWVkIGxpbmUvd2luZG93IHdhcyBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdAorICAgICAgIGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPjsgb3RoZXJ3aXNlIHRoZXkgcmV0dXJuIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4uICAgSW4gIGFkZGktCisgICAgICAgdGlvbiwgIDxTVFJPTkc+aXNfbGluZXRvdWNoZWQ8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPiBpZiA8RU0+bGluZTwvRU0+IGlzIG5vdCB2YWxpZCBmb3IKKyAgICAgICB0aGUgZ2l2ZW4gd2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gIGZhaWx1cmUgIGFuZCAgYW4KKyAgICAgICBpbnRlZ2VyICB2YWx1ZSAgb3RoZXIgdGhhbiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwKKyAgICAgICB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgIHJvdXRpbmUgIGRlc2NyaXAtCisgICAgICAgdGlvbnMuCisKKyAgICAgICBYL09wZW4gIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIEluIHRoaXMgaW0tCisgICAgICAgcGxlbWVudGF0aW9uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5pc19saW5ldG91Y2hlZDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgIGlmICB0aGUgIHdpbmRvdyAgcG9pbnRlciAgaXMKKyAgICAgICAgICAgICAgICAgICBudWxsLCAgb3IgIGlmICB0aGUgIGxpbmUgbnVtYmVyIGlzIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgd2luZG93LiAgTm90ZSB0aGF0IEVSUiBpcyBkaXN0aW5jdCAgZnJvbSAgVFJVRQorICAgICAgICAgICAgICAgICAgIGFuZCAgRkFMU0UsIHdoaWNoIGFyZSB0aGUgbm9ybWFsIHJldHVybiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICBvZiB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+d3RvdWNobG48L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yICBpZiAgdGhlICB3aW5kb3cgIHBvaW50ZXIgIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbCwgIG9yICBpZiAgdGhlICBsaW5lIG51bWJlciBpcyBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgIHdpbmRvdy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgIDQgIGRlc2NyaWJlcyAgdGhlc2UgIGZ1bmMtCisgICAgICAgdGlvbnMuCisKKyAgICAgICBTb21lICBoaXN0b3JpYyAgY3Vyc2VzICBpbXBsZW1lbnRhdGlvbnMgaGFkLCBhcyBhbiB1bmRvY3UtCisgICAgICAgbWVudGVkIGZlYXR1cmUsICB0aGUgIGFiaWxpdHkgIHRvICBkbyAgdGhlICBlcXVpdmFsZW50ICBvZgorICAgICAgIDxTVFJPTkc+Y2xlYXJvayguLi4sPC9TVFJPTkc+ICA8U1RST05HPjEpPC9TVFJPTkc+ICBieSBzYXlpbmcgPFNUUk9ORz50b3VjaHdpbihzdGRzY3IpPC9TVFJPTkc+IG9yIDxTVFJPTkc+Y2xlYXIoc3RkLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+c2NyKTwvU1RST05HPi4gIFRoaXMgd2lsbCBub3Qgd29yayB1bmRlciBuY3Vyc2VzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0IDxTVFJPTkc+d3RvdWNobG48L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vY3Vyc190cmFjZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2N1cnNfdHJhY2UuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjRhOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfdHJhY2UuM3guaHRtbApAQCAtMCwwICsxLDE3NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3RyYWNlLjN4LHYgMS44IDIwMDcvMDIvMjQgMTc6MzM6NDkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc190cmFjZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfdHJhY2UgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPl90cmFjZWY8L1NUUk9ORz4sIDxTVFJPTkc+X3RyYWNlZHVtcDwvU1RST05HPiwgPFNUUk9ORz5fdHJhY2VhdHRyPC9TVFJPTkc+LCA8U1RST05HPl90cmFjZWF0dHIyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+X25jX3RyYWNlYml0czwvU1RST05HPiwgPFNUUk9ORz5fdHJhY2VjaGFyPC9TVFJPTkc+LCA8U1RST05HPl90cmFjZWNodHlwZTwvU1RST05HPiwgPFNUUk9ORz5fdHJhY2VjaHR5cGUyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+X3RyYWNlbW91c2U8L1NUUk9ORz4sIDxTVFJPTkc+dHJhY2U8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiBkZWJ1Z2dpbmcgcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+X3RyYWNlZihjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm9ybWF0LDwvU1RST05HPiA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+X3RyYWNlZHVtcChjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qbGFiZWwsPC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Kl90cmFjZWF0dHIoYXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Kl90cmFjZWF0dHIyKGludDwvU1RST05HPiA8U1RST05HPmJ1ZmZlciw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Kl9uY190cmFjZWJpdHModm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Kl90cmFjZWNoYXIoaW50KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qX3RyYWNlY2h0eXBlKGNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qX3RyYWNlY2h0eXBlMihpbnQ8L1NUUk9ORz4gPFNUUk9ORz5idWZmZXIsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipfdHJhY2Vtb3VzZShjb25zdDwvU1RST05HPiA8U1RST05HPk1FVkVOVDwvU1RST05HPiA8U1RST05HPipldmVudCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+dHJhY2UoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz51bnNpZ25lZDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBhcmFtKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+dHJhY2U8L1NUUk9ORz4gcm91dGluZXMgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgbmN1cnNlcyBsaS0KKyAgICAgICBicmFyaWVzLCBhcyB3ZWxsIGFzIGFwcGxpY2F0aW9ucyB3aGljaCB1c2UgdGhlIG5jdXJzZXMgbGktCisgICAgICAgYnJhcmllcy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm9ybWFsbHkgYXZhaWxhYmxlIG9ubHkgd2l0aAorICAgICAgIHRoZSBkZWJ1Z2dpbmcgbGlicmFyeSA8RU0+bGlibmN1cnNlczwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmcuYTwvRU0+LCBidXQgbWF5IGJlICBjb21waWxlZAorICAgICAgIGludG8gIGFueSAgbW9kZWwgKHNoYXJlZCwgc3RhdGljLCBwcm9maWxlKSBieSBkZWZpbmluZyB0aGUKKyAgICAgICBzeW1ib2wgPFNUUk9ORz5UUkFDRTwvU1RST05HPi4KKworICAgICAgIFRoZSBwcmluY2lwYWwgcGFydHMgb2YgdGhpcyBpbnRlcmZhY2UgYXJlIHRoZSAgPFNUUk9ORz50cmFjZTwvU1RST05HPiAgcm91LQorICAgICAgIHRpbmUgd2hpY2ggc2VsZWN0aXZlbHkgZW5hYmxlcyBkaWZmZXJlbnQgdHJhY2luZyBmZWF0dXJlcywKKyAgICAgICBhbmQgdGhlIDxTVFJPTkc+X3RyYWNlZjwvU1RST05HPiByb3V0aW5lIHdoaWNoIHdyaXRlcyBmb3JtYXR0ZWQgZGF0YSB0byB0aGUKKyAgICAgICA8RU0+dHJhY2U8L0VNPiBmaWxlLgorCisgICAgICAgQ2FsbGluZyAgPFNUUk9ORz50cmFjZTwvU1RST05HPiAgd2l0aCAgYSAgbm9uemVybyAgcGFyYW1ldGVyIG9wZW5zIHRoZSBmaWxlCisgICAgICAgPFNUUk9ORz50cmFjZTwvU1RST05HPiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIG91dHB1dC4gIFRoZSAgcGFyYW1ldGVyCisgICAgICAgaXMgZm9ybWVkIGJ5IE9SJ2luZyB2YWx1ZXMgZnJvbSB0aGUgbGlzdCBvZiA8U1RST05HPlRSQUNFXzwvU1RST05HPjxFTT54eHg8L0VNPiBkZWYtCisgICAgICAgaW5pdGlvbnMgaW4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LiAgVGhlc2UgaW5jbHVkZToKKworICAgICAgIFRSQUNFX0RJU0FCTEUKKyAgICAgICAgICAgIHR1cm4gb2ZmIHRyYWNpbmcuCisKKyAgICAgICBUUkFDRV9USU1FUworICAgICAgICAgICAgdHJhY2UgdXNlciBhbmQgc3lzdGVtIHRpbWVzIG9mIHVwZGF0ZXMuCisKKyAgICAgICBUUkFDRV9UUFVUUworICAgICAgICAgICAgdHJhY2UgdHB1dHMgY2FsbHMuCisKKyAgICAgICBUUkFDRV9VUERBVEUKKyAgICAgICAgICAgIHRyYWNlIHVwZGF0ZSBhY3Rpb25zLCBvbGQgJmFtcDsgbmV3IHNjcmVlbnMuCisKKyAgICAgICBUUkFDRV9NT1ZFCisgICAgICAgICAgICB0cmFjZSBjdXJzb3IgbW92ZW1lbnQgYW5kIHNjcm9sbGluZy4KKworICAgICAgIFRSQUNFX0NIQVJQVVQKKyAgICAgICAgICAgIHRyYWNlIGFsbCBjaGFyYWN0ZXIgb3V0cHV0cy4KKworICAgICAgIFRSQUNFX09SRElOQVJZCisgICAgICAgICAgICB0cmFjZSBhbGwgdXBkYXRlIGFjdGlvbnMuICBUaGUgIG9sZCAgYW5kICBuZXcgIHNjcmVlbgorICAgICAgICAgICAgY29udGVudHMgIGFyZSAgd3JpdHRlbiB0byB0aGUgdHJhY2UgZmlsZSBmb3IgZWFjaCByZS0KKyAgICAgICAgICAgIGZyZXNoLgorCisgICAgICAgVFJBQ0VfQ0FMTFMKKyAgICAgICAgICAgIHRyYWNlIGFsbCBjdXJzZXMgY2FsbHMuICBUaGUgcGFyYW1ldGVycyBmb3IgZWFjaCBjYWxsCisgICAgICAgICAgICBhcmUgdHJhY2VkLCBhcyB3ZWxsIGFzIHJldHVybiB2YWx1ZXMuCisKKyAgICAgICBUUkFDRV9WSVJUUFVUCisgICAgICAgICAgICB0cmFjZSB2aXJ0dWFsIGNoYXJhY3RlciBwdXRzLCBpLmUuLCBjYWxscyB0byA8U1RST05HPmFkZGNoPC9TVFJPTkc+LgorCisgICAgICAgVFJBQ0VfSUVWRU5UCisgICAgICAgICAgICB0cmFjZSBsb3ctbGV2ZWwgaW5wdXQgcHJvY2Vzc2luZywgaW5jbHVkaW5nIHRpbWVvdXRzLgorCisgICAgICAgVFJBQ0VfQklUUworICAgICAgICAgICAgdHJhY2Ugc3RhdGUgb2YgVFRZIGNvbnRyb2wgYml0cy4KKworICAgICAgIFRSQUNFX0lDQUxMUworICAgICAgICAgICAgdHJhY2UgaW50ZXJuYWwvbmVzdGVkIGNhbGxzLgorCisgICAgICAgVFJBQ0VfQ0NBTExTCisgICAgICAgICAgICB0cmFjZSBwZXItY2hhcmFjdGVyIGNhbGxzLgorCisgICAgICAgVFJBQ0VfREFUQUJBU0UKKyAgICAgICAgICAgIHRyYWNlIHJlYWQvd3JpdGUgb2YgdGVybWluZm8vdGVybWNhcCBkYXRhLgorCisgICAgICAgVFJBQ0VfQVRUUlMKKyAgICAgICAgICAgIHRyYWNlIGNoYW5nZXMgdG8gdmlkZW8gYXR0cmlidXRlcyBhbmQgY29sb3JzLgorCisgICAgICAgVFJBQ0VfTUFYSU1VTQorICAgICAgICAgICAgbWF4aW11bSB0cmFjZSBsZXZlbCwgIGVuYWJsZXMgIGFsbCAgb2YgIHRoZSAgc2VwYXJhdGUKKyAgICAgICAgICAgIHRyYWNlIGZlYXR1cmVzLgorCisgICAgICAgU29tZSAgdHJhY2luZyAgZmVhdHVyZXMgYXJlIGVuYWJsZWQgd2hlbmV2ZXIgdGhlIDxTVFJPTkc+dHJhY2U8L1NUUk9ORz4gcGEtCisgICAgICAgcmFtZXRlciBpcyBub256ZXJvLiAgU29tZSBmZWF0dXJlcyBvdmVybGFwLiAgVGhlICBzcGVjaWZpYworICAgICAgIG5hbWVzIGFyZSB1c2VkIGFzIGEgZ3VpZGVsaW5lLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyAgd2hpY2ggIHJldHVybiBhIHZhbHVlIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIGFzCisgICAgICAgcGFyYW1ldGVycyB0byB0aGUgPFNUUk9ORz5fdHJhY2VmPC9TVFJPTkc+IHJvdXRpbmUuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgWFNJICBpbnRlcmZhY2UuICAgU29tZQorICAgICAgIG90aGVyICBjdXJzZXMgIGltcGxlbWVudGF0aW9ucyAgYXJlIGtub3duIHRvIGhhdmUgc2ltaWxhciwKKyAgICAgICB1bmRvY3VtZW50ZWQgZmVhdHVyZXMsIGJ1dCB0aGV5IGFyZSAgbm90ICBjb21wYXRpYmxlICB3aXRoCisgICAgICAgbmN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9jdXJzX3V0aWwuM3guaHRtbCBiL2RvYy9odG1sL21hbi9jdXJzX3V0aWwuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFhMzcyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfdXRpbC4zeC5odG1sCkBAIC0wLDAgKzEsMjYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfdXRpbC4zeCx2IDEuMjYgMjAwOC8xMC8xMSAyMDozMjo1NiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3V0aWwgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3V0aWwgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5kZWxheV9vdXRwdXQ8L1NUUk9ORz4sIDxTVFJPTkc+ZmlsdGVyPC9TVFJPTkc+LCA8U1RST05HPmZsdXNoaW5wPC9TVFJPTkc+LCA8U1RST05HPmdldHdpbjwvU1RST05HPiwgPFNUUk9ORz5rZXlfbmFtZTwvU1RST05HPiwgPFNUUk9ORz5rZXluYW1lPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bm9maWx0ZXI8L1NUUk9ORz4sIDxTVFJPTkc+cHV0d2luPC9TVFJPTkc+LCA8U1RST05HPnVuY3RybDwvU1RST05HPiwgPFNUUk9ORz51c2VfZW52PC9TVFJPTkc+LCA8U1RST05HPnd1bmN0cmw8L1NUUk9ORz4gLSBtaXNjZWxsYW5lb3VzCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gdXRpbGl0eSByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qdW5jdHJsKGNodHlwZTwvU1RST05HPiA8U1RST05HPmMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPip3dW5jdHJsKGNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qYyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmtleW5hbWUoaW50PC9TVFJPTkc+IDxTVFJPTkc+Yyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmtleV9uYW1lKHdjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz53KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5maWx0ZXIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+bm9maWx0ZXIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+dXNlX2Vudihib29sPC9TVFJPTkc+IDxTVFJPTkc+Zik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wdXR3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5GSUxFPC9TVFJPTkc+IDxTVFJPTkc+KmZpbGVwKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipnZXR3aW4oRklMRTwvU1RST05HPiA8U1RST05HPipmaWxlcCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWxheV9vdXRwdXQoaW50PC9TVFJPTkc+IDxTVFJPTkc+bXMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Zmx1c2hpbnAodm9pZCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPnVuY3RybDwvU1RST05HPiAgcm91dGluZSByZXR1cm5zIGEgY2hhcmFjdGVyIHN0cmluZyB3aGljaCBpcyBhCisgICAgICAgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgPEVNPmM8L0VNPiwgaWdub3JpbmcgIGF0LQorICAgICAgIHRyaWJ1dGVzLiAgIENvbnRyb2wgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGluIHRoZSA8U1RST05HPl48L1NUUk9ORz48RU0+WDwvRU0+IG5vLQorICAgICAgIHRhdGlvbi4gIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlICBkaXNwbGF5ZWQgIGFzICBpcy4gICBUaGUKKyAgICAgICBjb3JyZXNwb25kaW5nICA8U1RST05HPnd1bmN0cmw8L1NUUk9ORz4gIHJldHVybnMgYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24KKyAgICAgICBvZiBhIHdpZGUtY2hhcmFjdGVyLgorCisgICAgICAgVGhlIDxTVFJPTkc+a2V5bmFtZTwvU1RST05HPiByb3V0aW5lIHJldHVybnMgYSBjaGFyYWN0ZXIgc3RyaW5nIGNvcnJlc3BvbmQtCisgICAgICAgaW5nIHRvIHRoZSBrZXkgPEVNPmM8L0VNPjoKKworICAgICAgICAgIC0gIFByaW50YWJsZSAgY2hhcmFjdGVycyAgYXJlICBkaXNwbGF5ZWQgYXMgdGhlbXNlbHZlcywKKyAgICAgICAgICAgICBlLmcuLCBhIG9uZS1jaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGtleS4KKworICAgICAgICAgIC0gIENvbnRyb2wgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGluIHRoZSA8U1RST05HPl48L1NUUk9ORz48RU0+WDwvRU0+IG5vdGF0aW9uLgorCisgICAgICAgICAgLSAgREVMIChjaGFyYWN0ZXIgMTI3KSBpcyBkaXNwbGF5ZWQgYXMgPFNUUk9ORz5ePzwvU1RST05HPi4KKworICAgICAgICAgIC0gIFZhbHVlcyAgYWJvdmUgMTI4IGFyZSBlaXRoZXIgbWV0YSBjaGFyYWN0ZXJzIChpZiB0aGUKKyAgICAgICAgICAgICBzY3JlZW4gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLCBvciBpZiA8U1RST05HPm1ldGE8L1NUUk9ORz4gaGFzIGJlZW4KKyAgICAgICAgICAgICBjYWxsZWQgIHdpdGggYSBUUlVFIHBhcmFtZXRlciksIHNob3duIGluIHRoZSA8U1RST05HPk0tPC9TVFJPTkc+PEVNPlg8L0VNPiBuby0KKyAgICAgICAgICAgICB0YXRpb24sIG9yIGFyZSBkaXNwbGF5ZWQgYXMgdGhlbXNlbHZlcy4gIEluIHRoZSBsYXQtCisgICAgICAgICAgICAgdGVyIGNhc2UsIHRoZSB2YWx1ZXMgbWF5IG5vdCBiZSBwcmludGFibGU7IHRoaXMgZm9sLQorICAgICAgICAgICAgIGxvd3MgdGhlIFgvT3BlbiBzcGVjaWZpY2F0aW9uLgorCisgICAgICAgICAgLSAgVmFsdWVzIGFib3ZlIDI1NiBtYXkgYmUgdGhlIG5hbWVzIG9mICB0aGUgIG5hbWVzICBvZgorICAgICAgICAgICAgIGZ1bmN0aW9uIGtleXMuCisKKyAgICAgICAgICAtICBPdGhlcndpc2UgIChpZiAgdGhlcmUgIGlzIG5vIGNvcnJlc3BvbmRpbmcgbmFtZSkgdGhlCisgICAgICAgICAgICAgZnVuY3Rpb24gcmV0dXJucyBudWxsLCB0byBkZW5vdGUgYW4gIGVycm9yLiAgIFgvT3BlbgorICAgICAgICAgICAgIGFsc28gbGlzdHMgYW4gIlVOS05PV04gS0VZIiByZXR1cm4gdmFsdWUsIHdoaWNoIHNvbWUKKyAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgcmV0dXJuIHJhdGhlciB0aGFuIG51bGwuCisKKyAgICAgICBUaGUgY29ycmVzcG9uZGluZyA8U1RST05HPmtleV9uYW1lPC9TVFJPTkc+IHJldHVybnMgYSBjaGFyYWN0ZXIgc3RyaW5nIGNvci0KKyAgICAgICByZXNwb25kaW5nICB0byAgdGhlIHdpZGUtY2hhcmFjdGVyIHZhbHVlIDxFTT53PC9FTT4uICBUaGUgdHdvIGZ1bmMtCisgICAgICAgdGlvbnMgZG8gbm90IHJldHVybiB0aGUgc2FtZSBzZXQgb2YgIHN0cmluZ3M7ICB0aGUgIGxhdHRlcgorICAgICAgIHJldHVybnMgbnVsbCB3aGVyZSB0aGUgZm9ybWVyIHdvdWxkIGRpc3BsYXkgYSBtZXRhIGNoYXJhYy0KKyAgICAgICB0ZXIuCisKKyAgICAgICBUaGUgPFNUUk9ORz5maWx0ZXI8L1NUUk9ORz4gcm91dGluZSwgaWYgdXNlZCwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPgorICAgICAgIG9yICA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4gIGFyZSBjYWxsZWQuICBUaGUgZWZmZWN0IGlzIHRoYXQsIGR1cmluZyB0aG9zZQorICAgICAgIGNhbGxzLCA8U1RST05HPkxJTkVTPC9TVFJPTkc+IGlzIHNldCB0byAxOyAgdGhlICBjYXBhYmlsaXRpZXMgIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4sICA8U1RST05HPmN1cDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPmN1ZDwvU1RST05HPiwgIDxTVFJPTkc+Y3VkMTwvU1RST05HPiwgIDxTVFJPTkc+Y3V1MTwvU1RST05HPiwgIDxTVFJPTkc+Y3V1PC9TVFJPTkc+LCAgPFNUUk9ORz52cGE8L1NUUk9ORz4gIGFyZSAgZGlzYWJsZWQ7IGFuZCB0aGUgPFNUUk9ORz5ob21lPC9TVFJPTkc+CisgICAgICAgc3RyaW5nIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgPFNUUk9ORz5jcjwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPm5vZmlsdGVyPC9TVFJPTkc+IHJvdXRpbmUgY2FuY2VscyB0aGUgIGVmZmVjdCAgb2YgIGEgIHByZWNlZGluZworICAgICAgIDxTVFJPTkc+ZmlsdGVyPC9TVFJPTkc+ICBjYWxsLiAgIFRoYXQgIGFsbG93cyAgdGhlICBjYWxsZXIgIHRvIGluaXRpYWxpemUgYQorICAgICAgIHNjcmVlbiBvbiBhIGRpZmZlcmVudCBkZXZpY2UsIHVzaW5nIGEgZGlmZmVyZW50ICB2YWx1ZSAgb2YKKyAgICAgICA8U1RST05HPiRURVJNPC9TVFJPTkc+LiAgIFRoZSAgbGltaXRhdGlvbiBhcmlzZXMgYmVjYXVzZSB0aGUgPFNUUk9ORz5maWx0ZXI8L1NUUk9ORz4gcm91dGluZQorICAgICAgIG1vZGlmaWVzIHRoZSBpbi1tZW1vcnkgY29weSBvZiB0aGUgdGVybWluYWwgaW5mb3JtYXRpb24uCisKKyAgICAgICBUaGUgPFNUUk9ORz51c2VfZW52PC9TVFJPTkc+IHJvdXRpbmUsIGlmIHVzZWQsIGlzIGNhbGxlZCBiZWZvcmUgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+ICBvcgorICAgICAgIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiAgYXJlICBjYWxsZWQuICAgV2hlbiBjYWxsZWQgd2l0aCA8U1RST05HPkZBTFNFPC9TVFJPTkc+IGFzIGFuIGFyZ3UtCisgICAgICAgbWVudCwgdGhlIHZhbHVlcyBvZiA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGFuZCAgPFNUUk9ORz5jb2x1bW5zPC9TVFJPTkc+ICBzcGVjaWZpZWQgIGluICB0aGUKKyAgICAgICA8RU0+dGVybWluZm88L0VNPiAgZGF0YWJhc2Ugd2lsbCBiZSB1c2VkLCBldmVuIGlmIGVudmlyb25tZW50IHZhcmktCisgICAgICAgYWJsZXMgPFNUUk9ORz5MSU5FUzwvU1RST05HPiBhbmQgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+ICh1c2VkIGJ5IGRlZmF1bHQpIGFyZSBzZXQsICBvciAgaWYKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgaXMgIHJ1bm5pbmcgaW4gYSB3aW5kb3cgKGluIHdoaWNoIGNhc2UgZGVmYXVsdCBiZS0KKyAgICAgICBoYXZpb3Igd291bGQgYmUgdG8gIHVzZSAgdGhlICB3aW5kb3cgIHNpemUgIGlmICA8U1RST05HPkxJTkVTPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4gIGFyZSBub3Qgc2V0KS4gIE5vdGUgdGhhdCBzZXR0aW5nIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gb3IgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+CisgICAgICAgb3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIHNpemUgIHdoaWNoICBtYXkgIGJlICBvYnRhaW5lZAorICAgICAgIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+cHV0d2luPC9TVFJPTkc+IHJvdXRpbmUgd3JpdGVzIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB3aW5kb3cKKyAgICAgICA8RU0+d2luPC9FTT4gaW50byB0aGUgZmlsZSB0byB3aGljaCA8RU0+ZmlsZXA8L0VNPiBwb2ludHMuICBUaGlzIGluZm9ybWF0aW9uCisgICAgICAgY2FuIGJlIGxhdGVyIHJldHJpZXZlZCB1c2luZyB0aGUgPFNUUk9ORz5nZXR3aW48L1NUUk9ORz4gZnVuY3Rpb24uCisKKyAgICAgICBUaGUgPFNUUk9ORz5nZXR3aW48L1NUUk9ORz4gcm91dGluZSByZWFkcyB3aW5kb3cgcmVsYXRlZCBkYXRhIHN0b3JlZCBpbiB0aGUKKyAgICAgICBmaWxlIGJ5IDxTVFJPTkc+cHV0d2luPC9TVFJPTkc+LiAgVGhlIHJvdXRpbmUgdGhlbiBjcmVhdGVzIGFuZCAgaW5pdGlhbGl6ZXMKKyAgICAgICBhIG5ldyB3aW5kb3cgdXNpbmcgdGhhdCBkYXRhLiAgSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgICAgICAgbmV3IHdpbmRvdy4KKworICAgICAgIFRoZSA8U1RST05HPmRlbGF5X291dHB1dDwvU1RST05HPiByb3V0aW5lIGluc2VydHMgYW4gPEVNPm1zPC9FTT4gIG1pbGxpc2Vjb25kICBwYXVzZQorICAgICAgIGluICBvdXRwdXQuICAgVGhpcyAgcm91dGluZSBzaG91bGQgbm90IGJlIHVzZWQgZXh0ZW5zaXZlbHkKKyAgICAgICBiZWNhdXNlIHBhZGRpbmcgY2hhcmFjdGVycyBhcmUgIHVzZWQgIHJhdGhlciAgdGhhbiAgYSAgQ1BVCisgICAgICAgcGF1c2UuICAgSWYgIG5vICBwYWRkaW5nIGNoYXJhY3RlciBpcyBzcGVjaWZpZWQsIHRoaXMgdXNlcworICAgICAgIDxTVFJPTkc+bmFwbXM8L1NUUk9ORz4gdG8gcGVyZm9ybSB0aGUgZGVsYXkuCisKKyAgICAgICBUaGUgPFNUUk9ORz5mbHVzaGlucDwvU1RST05HPiByb3V0aW5lIHRocm93cyBhd2F5IGFueSAgdHlwZWFoZWFkICB0aGF0ICBoYXMKKyAgICAgICBiZWVuICB0eXBlZCAgYnkgIHRoZSB1c2VyIGFuZCBoYXMgbm90IHlldCBiZWVuIHJlYWQgYnkgdGhlCisgICAgICAgcHJvZ3JhbS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgRXhjZXB0IGZvciA8U1RST05HPmZsdXNoaW5wPC9TVFJPTkc+LCByb3V0aW5lcyB0aGF0IHJldHVybiBhbiAgaW50ZWdlciAgcmUtCisgICAgICAgdHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IChTVnI0IHNwZWNpZmllcyBvbmx5ICJhbiBpbi0KKyAgICAgICB0ZWdlciB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLgorCisgICAgICAgWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIEluIHRoaXMgIGltLQorICAgICAgIHBsZW1lbnRhdGlvbgorCisgICAgICAgICAgICAgIDxTVFJPTkc+Zmx1c2hpbnA8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgd2FzIG5vdCBpbmktCisgICAgICAgICAgICAgICAgICAgdGlhbGl6ZWQuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5wdXR3aW48L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuICBlcnJvciAgaWYgIHRoZSAgYXNzb2NpYXRlZCAgPFNUUk9ORz5md3JpdGU8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICBjYWxscyByZXR1cm4gYW4gZXJyb3IuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBYU0kgIEN1cnNlcyAgc3RhbmRhcmQsICBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jLQorICAgICAgIHRpb25zLiAgSXQgc3RhdGVzIHRoYXQgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d3VuY3RybDwvU1RST05HPiAgd2lsbCAgcmV0dXJuICBhCisgICAgICAgbnVsbCAgcG9pbnRlciBpZiB1bnN1Y2Nlc3NmdWwsIGJ1dCBkb2VzIG5vdCBkZWZpbmUgYW55IGVyLQorICAgICAgIHJvciBjb25kaXRpb25zLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yIHRocmVlIGNhcy0KKyAgICAgICBlczoKKworICAgICAgICAgICAgICAtICAgIHRoZSAgcGFyYW1ldGVyIGlzIGEgNy1iaXQgVVMtQVNDSUkgY29kZS4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICBpcyB0aGUgY2FzZSB0aGF0IFgvT3BlbiBDdXJzZXMgZG9jdW1lbnRlZC4KKworICAgICAgICAgICAgICAtICAgIHRoZSBwYXJhbWV0ZXIgaXMgaW4gdGhlIHJhbmdlIDEyOC0xNTksIGkuZS4sIGEKKyAgICAgICAgICAgICAgICAgICBDMSAgY29udHJvbCAgY29kZS4gICBJZiAgPFNUUk9ORz51c2VfbGVnYWN5X2NvZGluZzwvU1RST05HPiBoYXMKKyAgICAgICAgICAgICAgICAgICBiZWVuIGNhbGxlZCB3aXRoIGEgPFNUUk9ORz4yPC9TVFJPTkc+IHBhcmFtZXRlciwgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4gcmV0dXJucworICAgICAgICAgICAgICAgICAgIHRoZSAgcGFyYW1ldGVyLCAgaS5lLiwgIGEgb25lLWNoYXJhY3RlciBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBwYXJhbWV0ZXIgIGFzICB0aGUgIGZpcnN0ICBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCAgaXQgIHJldHVybnMgIGBgfkAnJywgYGB+QScnLCBldGMuLAorICAgICAgICAgICAgICAgICAgIGFuYWxvZ291cyB0byBgYF5AJycsIGBgXkEnJywgQzAgY29udHJvbHMuCisKKyAgICAgICAgICAgICAgICAgICBYL09wZW4gQ3Vyc2VzIGRvZXMgbm90IGRvY3VtZW50IHdoZXRoZXIgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICBjYW4gIGJlICBjYWxsZWQgIGJlZm9yZSAgaW5pdGlhbGl6aW5nICBjdXJzZXMuCisgICAgICAgICAgICAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBwZXJtaXRzIHRoYXQsIGFuZCAgcmV0dXJucworICAgICAgICAgICAgICAgICAgIHRoZSBgYH5AJycsIGV0Yy4sIHZhbHVlcyBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgICAgICAgLSAgICBwYXJhbWV0ZXIgIHZhbHVlcyAgb3V0c2lkZSB0aGUgMCB0byAyNTUgcmFuZ2UuCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4gcmV0dXJucyBhIG51bGwgcG9pbnRlci4KKworICAgICAgIFRoZSBTVnI0IGRvY3VtZW50YXRpb24gZGVzY3JpYmVzIHRoZSBhY3Rpb24gb2YgPFNUUk9ORz5maWx0ZXI8L1NUUk9ORz4gb25seQorICAgICAgIGluICB0aGUgIHZhZ3Vlc3QgIHRlcm1zLiAgIFRoZSBkZXNjcmlwdGlvbiBoZXJlIGlzIGFkYXB0ZWQKKyAgICAgICBmcm9tIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkICh3aGljaCBlcnJvbmVvdXNseSAgZmFpbHMgIHRvCisgICAgICAgZGVzY3JpYmUgdGhlIGRpc2FibGluZyBvZiA8U1RST05HPmN1dTwvU1RST05HPikuCisKKyAgICAgICBUaGUgIHN0cmluZ3MgcmV0dXJuZWQgYnkgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4gaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgICAgICBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZSwgc2hvd2luZyBDMSBjb250cm9scyAgZnJvbSAgdGhlCisgICAgICAgdXBwZXItMTI4ICBjb2RlcyB3aXRoIGEgYH4nIHByZWZpeCByYXRoZXIgdGhhbiBgXicuICBPdGhlcgorICAgICAgIGltcGxlbWVudGF0aW9ucyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucy4gIEZvciAgZXhhbXBsZSwKKyAgICAgICB0aGV5ICBtYXkgIHNob3cgIGJvdGggc2V0cyBvZiBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBgXicsCisgICAgICAgYW5kIHN0cmlwIHRoZSBwYXJhbWV0ZXIgdG8gNyBiaXRzLiAgT3IgdGhleSBtYXkgaWdub3JlICBDMQorICAgICAgIGNvbnRyb2xzICBhbmQgIHRyZWF0ICBhbGwgb2YgdGhlIHVwcGVyLTEyOCBjb2RlcyBhcyBwcmludC0KKyAgICAgICBhYmxlLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIDggYml0cyBidXQgZG9lcyBub3QgbW9kaWZ5CisgICAgICAgdGhlIHN0cmluZyB0byByZWZsZWN0IGxvY2FsZS4gIFRoZSA8U1RST05HPnVzZV9sZWdhY3lfY29kaW5nPC9TVFJPTkc+IGZ1bmMtCisgICAgICAgdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0byBjaGFuZ2UgdGhlIG91dHB1dCBvZiA8U1RST05HPnVuY3RybDwvU1RST05HPi4KKworICAgICAgIExpa2V3aXNlLCB0aGUgPFNUUk9ORz5tZXRhPC9TVFJPTkc+IGZ1bmN0aW9uIGFsbG93cyB0aGUgIGNhbGxlciAgdG8gIGNoYW5nZQorICAgICAgIHRoZSAgb3V0cHV0IG9mIDxTVFJPTkc+a2V5bmFtZTwvU1RST05HPiwgaS5lLiwgaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZQorICAgICAgIHRoZSBgTS0nIHByZWZpeCBmb3IgYGBtZXRhJycga2V5cyAoY29kZXMgaW4gdGhlIHJhbmdlICAxMjgKKyAgICAgICB0byAyNTUpLiAgQm90aCA8U1RST05HPnVzZV9sZWdhY3lfY29kaW5nPC9TVFJPTkc+IGFuZCA8U1RST05HPm1ldGE8L1NUUk9ORz4gc3VjY2VlZCBvbmx5IGFmLQorICAgICAgIHRlciBjdXJzZXMgaXMgaW5pdGlhbGl6ZWQuICBYL09wZW4gQ3Vyc2VzIGRvZXMgIG5vdCAgZG9jdS0KKyAgICAgICBtZW50ICB0aGUgIHRyZWF0bWVudCAgb2YgIGNvZGVzIDEyOCB0byAxNTkuICBXaGVuIHRyZWF0aW5nCisgICAgICAgdGhlbSBhcyBgYG1ldGEnJyBrZXlzIChvciBpZiA8U1RST05HPmtleW5hbWU8L1NUUk9ORz4gaXMgY2FsbGVkIGJlZm9yZSBpbmktCisgICAgICAgdGlhbGl6aW5nICBjdXJzZXMpLCAgdGhpcyAgaW1wbGVtZW50YXRpb24gIHJldHVybnMgc3RyaW5ncworICAgICAgIGBgTS1eQCcnLCBgYE0tXkEnJywgZXRjLgorCisgICAgICAgVGhlIDxTVFJPTkc+a2V5bmFtZTwvU1RST05HPiBmdW5jdGlvbiBtYXkgcmV0dXJuIHRoZSBuYW1lcyBvZiAgdXNlci1kZWZpbmVkCisgICAgICAgc3RyaW5nICBjYXBhYmlsaXRpZXMgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIHRlcm1pbmZvIGVuLQorICAgICAgIHRyeSB2aWEgdGhlIDxTVFJPTkc+LXg8L1NUUk9ORz4gb3B0aW9uIG9mIDxTVFJPTkc+dGljPC9TVFJPTkc+LiAgVGhpcyAgaW1wbGVtZW50YXRpb24gIGF1dG8tCisgICAgICAgbWF0aWNhbGx5ICBhc3NpZ25zICBhdCAgcnVuLXRpbWUgIGtleWNvZGVzIHRvIHVzZXItZGVmaW5lZAorICAgICAgIHN0cmluZ3Mgd2hpY2ggYmVnaW4gIHdpdGggICJrIi4gICBUaGUgIGtleWNvZGVzICBzdGFydCAgYXQKKyAgICAgICBLRVlfTUFYLCAgYnV0ICBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgdmFsdWUgZm9yCisgICAgICAgZGlmZmVyZW50IHJ1bnMgYmVjYXVzZSB1c2VyLWRlZmluZWQgY29kZXMgYXJlIG1lcmdlZCAgZnJvbQorICAgICAgIGFsbCAgdGVybWluYWwgIGRlc2NyaXB0aW9ucyAgd2hpY2ggIGhhdmUgYmVlbiBsb2FkZWQuICBUaGUKKyAgICAgICA8U1RST05HPnVzZV9leHRlbmRlZF9uYW1lczwvU1RST05HPiBmdW5jdGlvbiBjb250cm9scyB3aGV0aGVyIHRoaXMgZGF0YSAgaXMKKyAgICAgICBsb2FkZWQgIHdoZW4gIHRoZSAgdGVybWluYWwgZGVzY3JpcHRpb24gaXMgcmVhZCBieSB0aGUgbGktCisgICAgICAgYnJhcnkuCisKKyAgICAgICBUaGUgPFNUUk9ORz5ub2ZpbHRlcjwvU1RST05HPiByb3V0aW5lIGlzIHNwZWNpZmljIHRvIG5jdXJzZXMuICBJdCAgd2FzICBub3QKKyAgICAgICBzdXBwb3J0ZWQgIG9uICBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gIG5jdXJzZXMgIGV4LQorICAgICAgIHRlbnNpb25zIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImxlZ2FjeV9jb2RpbmcuM3guaHRtbCI+bGVnYWN5X2NvZGluZygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPmN1cnNfa2VyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+bmVsKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibGVnYWN5X2NvZGluZy4zeC5odG1sIj5sZWdhY3lfY29kaW5nKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vY3Vyc193aW5kb3cuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTYyMTlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwKQEAgLTAsMCArMSwyMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc193aW5kb3cuM3gsdiAxLjE0IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc193aW5kb3cgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3dpbmRvdyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5uZXd3aW48L1NUUk9ORz4sIDxTVFJPTkc+ZGVsd2luPC9TVFJPTkc+LCA8U1RST05HPm12d2luPC9TVFJPTkc+LCA8U1RST05HPnN1YndpbjwvU1RST05HPiwgPFNUUk9ORz5kZXJ3aW48L1NUUk9ORz4sIDxTVFJPTkc+bXZkZXJ3aW48L1NUUk9ORz4sIDxTVFJPTkc+ZHVwd2luPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+d3N5bmN1cDwvU1RST05HPiwgPFNUUk9ORz5zeW5jb2s8L1NUUk9ORz4sIDxTVFJPTkc+d2N1cnN5bmN1cDwvU1RST05HPiwgPFNUUk9ORz53c3luY2Rvd248L1NUUk9ORz4gLSBjcmVhdGUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICB3aW5kb3dzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Km5ld3dpbihpbnQ8L1NUUk9ORz4gPFNUUk9ORz5ubGluZXMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bmNvbHMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnaW5feSw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ2luX3gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVsd2luKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KnN1YndpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qb3JpZyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ubGluZXMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bmNvbHMsPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iZWdpbl95LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ2luX3gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KmRlcndpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qb3JpZyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ubGluZXMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bmNvbHMsPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iZWdpbl95LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ2luX3gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZkZXJ3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wYXJfeSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wYXJfeCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qZHVwd2luKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPndzeW5jdXAoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zeW5jb2soV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPndjdXJzeW5jdXAoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+d3N5bmNkb3duKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIENhbGxpbmcgPFNUUk9ORz5uZXd3aW48L1NUUk9ORz4gY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgd2luLQorICAgICAgIGRvdyB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMgYW5kIGNvbHVtbnMuICBUaGUgdXBwZXIKKyAgICAgICBsZWZ0LWhhbmQgIGNvcm5lciBvZiB0aGUgd2luZG93IGlzIGF0IGxpbmUgPEVNPmJlZ2luPC9FTT5fPEVNPnk8L0VNPiwgY29sdW1uCisgICAgICAgPEVNPmJlZ2luPC9FTT5fPEVNPng8L0VNPi4gIElmIGVpdGhlciA8RU0+bmxpbmVzPC9FTT4gb3IgPEVNPm5jb2xzPC9FTT4gaXMgemVybywgdGhleSAgZGVmYXVsdAorICAgICAgIHRvICA8U1RST05HPkxJTkVTPC9TVFJPTkc+IDxTVFJPTkc+LTwvU1RST05HPiA8RU0+YmVnaW48L0VNPl88RU0+eTwvRU0+IGFuZCA8U1RST05HPkNPTFM8L1NUUk9ORz4gPFNUUk9ORz4tPC9TVFJPTkc+IDxFTT5iZWdpbjwvRU0+XzxFTT54PC9FTT4uICBBIG5ldyBmdWxsLXNjcmVlbgorICAgICAgIHdpbmRvdyBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgPFNUUk9ORz5uZXd3aW4oMCwwLDAsMCk8L1NUUk9ORz4uCisKKyAgICAgICBDYWxsaW5nIDxTVFJPTkc+ZGVsd2luPC9TVFJPTkc+IGRlbGV0ZXMgdGhlIG5hbWVkIHdpbmRvdywgZnJlZWluZyBhbGwgbWVtby0KKyAgICAgICByeSBhc3NvY2lhdGVkIHdpdGggaXQgKGl0IGRvZXMgbm90IGFjdHVhbGx5IGVyYXNlIHRoZSB3aW4tCisgICAgICAgZG93J3Mgc2NyZWVuIGltYWdlKS4gIFN1YndpbmRvd3MgbXVzdCAgYmUgIGRlbGV0ZWQgIGJlZm9yZQorICAgICAgIHRoZSBtYWluIHdpbmRvdyBjYW4gYmUgZGVsZXRlZC4KKworICAgICAgIENhbGxpbmcgPFNUUk9ORz5tdndpbjwvU1RST05HPiBtb3ZlcyB0aGUgd2luZG93IHNvIHRoYXQgdGhlIHVwcGVyIGxlZnQtaGFuZAorICAgICAgIGNvcm5lciBpcyBhdCBwb3NpdGlvbiAoPEVNPng8L0VNPiwgPEVNPnk8L0VNPikuICBJZiB0aGUgbW92ZSB3b3VsZCBjYXVzZSB0aGUKKyAgICAgICB3aW5kb3cgdG8gYmUgb2ZmIHRoZSBzY3JlZW4sIGl0IGlzIGFuIGVycm9yIGFuZCB0aGUgd2luZG93CisgICAgICAgaXMgbm90IG1vdmVkLiAgTW92aW5nIHN1YndpbmRvd3MgaXMgYWxsb3dlZCwgYnV0IHNob3VsZCBiZQorICAgICAgIGF2b2lkZWQuCisKKyAgICAgICBDYWxsaW5nIDxTVFJPTkc+c3Vid2luPC9TVFJPTkc+IGNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3IHdpbi0KKyAgICAgICBkb3cgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzLCA8RU0+bmxpbmVzPC9FTT4sICBhbmQgIGNvbHVtbnMsCisgICAgICAgPEVNPm5jb2xzPC9FTT4uICAgVGhlICB3aW5kb3cgIGlzIGF0IHBvc2l0aW9uICg8RU0+YmVnaW48L0VNPl88RU0+eTwvRU0+LCA8RU0+YmVnaW48L0VNPl88RU0+eDwvRU0+KSBvbgorICAgICAgIHRoZSBzY3JlZW4uICAoVGhpcyBwb3NpdGlvbiBpcyByZWxhdGl2ZSB0byB0aGUgc2NyZWVuLCBhbmQKKyAgICAgICBub3QgdG8gdGhlIHdpbmRvdyA8RU0+b3JpZzwvRU0+LikgIFRoZSB3aW5kb3cgaXMgbWFkZSBpbiB0aGUgbWlkZGxlCisgICAgICAgb2YgdGhlIHdpbmRvdyA8RU0+b3JpZzwvRU0+LCBzbyB0aGF0IGNoYW5nZXMgIG1hZGUgIHRvICBvbmUgIHdpbmRvdworICAgICAgIHdpbGwgIGFmZmVjdCAgYm90aCAgd2luZG93cy4gICBUaGUgc3Vid2luZG93IHNoYXJlcyBtZW1vcnkKKyAgICAgICB3aXRoIHRoZSB3aW5kb3cgPEVNPm9yaWc8L0VNPi4gIFdoZW4gdXNpbmcgdGhpcyByb3V0aW5lLCBpdCBpcyBuZWMtCisgICAgICAgZXNzYXJ5ICB0byBjYWxsIDxTVFJPTkc+dG91Y2h3aW48L1NUUk9ORz4gb3IgPFNUUk9ORz50b3VjaGxpbmU8L1NUUk9ORz4gb24gPEVNPm9yaWc8L0VNPiBiZWZvcmUgY2FsbC0KKyAgICAgICBpbmcgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiBvbiB0aGUgc3Vid2luZG93LgorCisgICAgICAgQ2FsbGluZyA8U1RST05HPmRlcndpbjwvU1RST05HPiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIDxTVFJPTkc+c3Vid2luLDwvU1RST05HPiBleGNlcHQgIHRoYXQKKyAgICAgICA8RU0+YmVnaW48L0VNPl88RU0+eTwvRU0+IGFuZCA8RU0+YmVnaW48L0VNPl88RU0+eDwvRU0+IGFyZSByZWxhdGl2ZSB0byB0aGUgb3JpZ2luIG9mIHRoZSB3aW4tCisgICAgICAgZG93IDxFTT5vcmlnPC9FTT4gcmF0aGVyIHRoYW4gdGhlIHNjcmVlbi4gIFRoZXJlIGlzICBubyAgZGlmZmVyZW5jZQorICAgICAgIGJldHdlZW4gdGhlIHN1YndpbmRvd3MgYW5kIHRoZSBkZXJpdmVkIHdpbmRvd3MuCisKKyAgICAgICBDYWxsaW5nIDxTVFJPTkc+bXZkZXJ3aW48L1NUUk9ORz4gbW92ZXMgYSBkZXJpdmVkIHdpbmRvdyAob3Igc3Vid2luZG93KSBpbi0KKyAgICAgICBzaWRlIGl0cyBwYXJlbnQgd2luZG93LiAgVGhlIHNjcmVlbi1yZWxhdGl2ZSBwYXJhbWV0ZXJzIG9mCisgICAgICAgdGhlICB3aW5kb3cgYXJlIG5vdCBjaGFuZ2VkLiAgVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZGlzLQorICAgICAgIHBsYXkgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSAgcGFyZW50ICB3aW5kb3cgIGF0ICB0aGUgIHNhbWUKKyAgICAgICBwaHlzaWNhbCBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuLgorCisgICAgICAgQ2FsbGluZyAgPFNUUk9ORz5kdXB3aW48L1NUUk9ORz4gIGNyZWF0ZXMgIGFuIGV4YWN0IGR1cGxpY2F0ZSBvZiB0aGUgd2luZG93CisgICAgICAgPEVNPndpbjwvRU0+LgorCisgICAgICAgQ2FsbGluZyA8U1RST05HPndzeW5jdXA8L1NUUk9ORz4gdG91Y2hlcyBhbGwgbG9jYXRpb25zIGluIGFuY2VzdG9ycyBvZiAgPEVNPndpbjwvRU0+CisgICAgICAgdGhhdCAgYXJlIGNoYW5nZWQgaW4gPEVNPndpbjwvRU0+LiAgSWYgPFNUUk9ORz5zeW5jb2s8L1NUUk9ORz4gaXMgY2FsbGVkIHdpdGggc2Vjb25kCisgICAgICAgYXJndW1lbnQgPFNUUk9ORz5UUlVFPC9TVFJPTkc+IHRoZW4gPFNUUk9ORz53c3luY3VwPC9TVFJPTkc+IGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldi0KKyAgICAgICBlciB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgd2luZG93LgorCisgICAgICAgVGhlICA8U1RST05HPndzeW5jZG93bjwvU1RST05HPiAgcm91dGluZSAgdG91Y2hlcyBlYWNoIGxvY2F0aW9uIGluIDxFTT53aW48L0VNPiB0aGF0CisgICAgICAgaGFzIGJlZW4gdG91Y2hlZCBpbiBhbnkgb2YgIGl0cyAgYW5jZXN0b3IgIHdpbmRvd3MuICAgVGhpcworICAgICAgIHJvdXRpbmUgIGlzICBjYWxsZWQgYnkgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiwgc28gaXQgc2hvdWxkIGFsbW9zdCBuZXZlcgorICAgICAgIGJlIG5lY2Vzc2FyeSB0byBjYWxsIGl0IG1hbnVhbGx5LgorCisgICAgICAgVGhlIHJvdXRpbmUgPFNUUk9ORz53Y3Vyc3luY3VwPC9TVFJPTkc+IHVwZGF0ZXMgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uCisgICAgICAgb2YgIGFsbCB0aGUgYW5jZXN0b3JzIG9mIHRoZSB3aW5kb3cgdG8gcmVmbGVjdCB0aGUgY3VycmVudAorICAgICAgIGN1cnNvciBwb3NpdGlvbiBvZiB0aGUgd2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cC0KKyAgICAgICBvbiAgZmFpbHVyZSAgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUKKyAgICAgICBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLgorCisgICAgICAgWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluICB0aGlzICBpbXBsZW1lbnRhLQorICAgICAgIHRpb24KKworICAgICAgICAgICAgICA8U1RST05HPmRlbHdpbjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuICBlcnJvciAgaWYgIHRoZSAgd2luZG93IHBvaW50ZXIgaXMKKyAgICAgICAgICAgICAgICAgICBudWxsLCBvciBpZiB0aGUgd2luZG93IGlzIHRoZSBwYXJlbnQgb2YgYW5vdGgtCisgICAgICAgICAgICAgICAgICAgZXIgd2luZG93LgorCisgICAgICAgICAgICAgICAgICAgVGhpcyAgaW1wbGVtZW50YXRpb24gIGFsc28gbWFpbnRhaW5zIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgIHdpbmRvd3MsIGFuZCBjaGVja3MgdGhhdCB0aGUgcG9pbnRlciBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICA8U1RST05HPmRlbHdpbjwvU1RST05HPiAgaXMgIG9uZSAgdGhhdCBpdCBjcmVhdGVkLCByZXR1cm5pbmcgYW4KKyAgICAgICAgICAgICAgICAgICBlcnJvciBpZiBpdCB3YXMgbm90Li4KKworICAgICAgICAgICAgICA8U1RST05HPm12ZGVyd2luPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciAgaWYgIHRoZSAgd2luZG93ICBwb2ludGVyICBpcworICAgICAgICAgICAgICAgICAgIG51bGwsICBvciAgaWYgc29tZSBwYXJ0IG9mIHRoZSB3aW5kb3cgd291bGQgYmUKKyAgICAgICAgICAgICAgICAgICBwbGFjZWQgb2ZmLXNjcmVlbi4KKworICAgICAgICAgICAgICA8U1RST05HPm12d2luPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciAgaWYgIHRoZSAgd2luZG93ICBwb2ludGVyICBpcworICAgICAgICAgICAgICAgICAgIG51bGwsICBvciBpZiB0aGUgd2luZG93IGlzIHJlYWxseSBhIHBhZCwgb3IgaWYKKyAgICAgICAgICAgICAgICAgICBzb21lIHBhcnQgb2YgdGhlIHdpbmRvdyB3b3VsZCBiZSAgcGxhY2VkICBvZmYtCisgICAgICAgICAgICAgICAgICAgc2NyZWVuLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+c3luY29rPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyAgYW4gIGVycm9yICBpZiAgdGhlICB3aW5kb3cgcG9pbnRlciBpcworICAgICAgICAgICAgICAgICAgIG51bGwuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgSWYgbWFueSBzbWFsbCBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSB3aW5kb3csIHRoZSAgPFNUUk9ORz53c3luY3VwPC9TVFJPTkc+CisgICAgICAgb3B0aW9uIGNvdWxkIGRlZ3JhZGUgcGVyZm9ybWFuY2UuCisKKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5zeW5jb2s8L1NUUk9ORz4gbWF5IGJlIGEgbWFjcm8uCisKKworPC9QUkU+Cis8SDI+QlVHUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgIHN1YndpbmRvdyAgZnVuY3Rpb25zICg8RU0+c3Vid2luPC9FTT4sIDxFTT5kZXJ3aW48L0VNPiwgPEVNPm12ZGVyd2luPC9FTT4sIDxTVFJPTkc+d3N5bi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmN1cDwvU1RST05HPiwgPFNUUk9ORz53c3luY2Rvd248L1NUUk9ORz4sIDxTVFJPTkc+d2N1cnN5bmN1cDwvU1RST05HPiwgPFNUUk9ORz5zeW5jb2s8L1NUUk9ORz4pIGFyZSBmbGFreSwgaW5jb21wbGV0ZS0KKyAgICAgICBseSBpbXBsZW1lbnRlZCwgYW5kIG5vdCB3ZWxsIHRlc3RlZC4KKworICAgICAgIFRoZSAgU3lzdGVtICBWICBjdXJzZXMgZG9jdW1lbnRhdGlvbiBpcyB2ZXJ5IHVuY2xlYXIgYWJvdXQKKyAgICAgICB3aGF0IDxTVFJPTkc+d3N5bmN1cDwvU1RST05HPiBhbmQgPFNUUk9ORz53c3luY2Rvd248L1NUUk9ORz4gYWN0dWFsbHkgZG8uICBJdCBzZWVtcyB0byBpbXBseQorICAgICAgIHRoYXQgIHRoZXkgIGFyZSBvbmx5IHN1cHBvc2VkIHRvIHRvdWNoIGV4YWN0bHkgdGhvc2UgbGluZXMKKyAgICAgICB0aGF0IGFyZSBhZmZlY3RlZCBieSBhbmNlc3RvciBjaGFuZ2VzLiAgVGhlIGxhbmd1YWdlIGhlcmUsCisgICAgICAgYW5kICB0aGUgIGJlaGF2aW9yICBvZiAgdGhlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGltcGxlbWVudGF0aW9uLCBpcyBwYXQtCisgICAgICAgdGVybmVkIG9uIHRoZSBYUEc0IGN1cnNlcyBzdGFuZGFyZC4gIFRoZSB3ZWFrZXIgWFBHNCAgc3BlYworICAgICAgIG1heSByZXN1bHQgaW4gc2xvd2VyIHVwZGF0ZXMuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBYU0kgIEN1cnNlcyAgc3RhbmRhcmQsICBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jLQorICAgICAgIHRpb25zLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9kZWZhdWx0X2NvbG9ycy4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5ZTgwMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9kZWZhdWx0X2NvbG9ycy4zeC5odG1sCkBAIC0wLDAgKzEsMTgwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NywxOTk5LDIwMDAsMjAwNQorICAqIEBJZDogZGVmYXVsdF9jb2xvcnMuM3gsdiAxLjIwIDIwMDYvMTIvMjQgMTU6MDI6NTMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+ZGVmYXVsdF9jb2xvcnMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5kZWZhdWx0X2NvbG9ycyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJkZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz51c2VfZGVmYXVsdF9jb2xvcnM8L1NUUk9ORz4sIDxTVFJPTkc+YXNzdW1lX2RlZmF1bHRfY29sb3JzPC9TVFJPTkc+IC0gdXNlIHRlcm1pbmFsJ3MKKyAgICAgICBkZWZhdWx0IGNvbG9ycworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVzZV9kZWZhdWx0X2NvbG9ycyh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFzc3VtZV9kZWZhdWx0X2NvbG9ycyhpbnQ8L1NUUk9ORz4gPFNUUk9ORz5mZyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iZyk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk8L0VNPiBhbmQgPEVNPmFzc3VtZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmRlZmF1bHQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2xvcnMoKTwvRU0+IGZ1bmMtCisgICAgICAgdGlvbnMgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LiAgVGhleSBhcmUgdXNlZAorICAgICAgIHdpdGggdGVybWluYWxzIHRoYXQgc3VwcG9ydCBJU08gNjQyOSBjb2xvciwgb3IgZXF1aXZhbGVudC4KKyAgICAgICBUaGVzZSB0ZXJtaW5hbHMgYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIHJlc2V0IGNvbG9yIHRvIGFuCisgICAgICAgdW5zcGVjaWZpZWQgZGVmYXVsdCB2YWx1ZSAoZS5nLiwgd2l0aCBTR1IgMzkgb3IgU0dSIDQ5KS4KKworICAgICAgIEFwcGxpY2F0aW9ucyB0aGF0IHBhaW50ICBhICBjb2xvcmVkICBiYWNrZ3JvdW5kICBvdmVyICB0aGUKKyAgICAgICB3aG9sZSAgc2NyZWVuICBkbyBub3QgdGFrZSBhZHZhbnRhZ2Ugb2YgU0dSIDM5IGFuZCBTR1IgNDkuCisgICAgICAgU29tZSBhcHBsaWNhdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHdvcmsgIHdpdGggIHRoZSAgZGVmYXVsdAorICAgICAgIGJhY2tncm91bmQsICB1c2luZyAgY29sb3JzICBvbmx5ICBmb3IgIHRleHQuICBGb3IgZXhhbXBsZSwKKyAgICAgICB0aGVyZSBhcmUgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIDxTVFJPTkc+bHM8L1NUUk9ORz4gcHJvZ3JhbSAgd2hpY2gKKyAgICAgICB1c2UgIGNvbG9ycyB0byBkZW5vdGUgZGlmZmVyZW50IGZpbGUgdHlwZXMgb3IgcGVybWlzc2lvbnMuCisgICAgICAgVGhlc2UgImNvbG9yIGxzIiBwcm9ncmFtcyBkbyBub3QgIG5lY2Vzc2FyaWx5ICBtb2RpZnkgIHRoZQorICAgICAgIGJhY2tncm91bmQgIGNvbG9yLCB0eXBpY2FsbHkgdXNpbmcgb25seSB0aGUgPEVNPnNldGFmPC9FTT4gdGVybWluZm8KKyAgICAgICBjYXBhYmlsaXR5ICB0byAgc2V0ICB0aGUgIGZvcmVncm91bmQgIGNvbG9yLiAgIEZ1bGwtc2NyZWVuCisgICAgICAgYXBwbGljYXRpb25zICB0aGF0ICB1c2UgZGVmYXVsdCBjb2xvcnMgY2FuIGFjaGlldmUgc2ltaWxhcgorICAgICAgIHZpc3VhbCBlZmZlY3RzLgorCisgICAgICAgVGhlIGZpcnN0IGZ1bmN0aW9uLCA8RU0+dXNlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpPC9FTT4gdGVsbHMgdGhlICBjdXJzZXMKKyAgICAgICBsaWJyYXJ5ICB0byAgYXNzaWduIHRlcm1pbmFsIGRlZmF1bHQgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kCisgICAgICAgY29sb3JzIHRvIGNvbG9yIG51bWJlciAgLTEuICBTbyAgaW5pdF9wYWlyKHgsQ09MT1JfUkVELC0xKQorICAgICAgIHdpbGwgIGluaXRpYWxpemUgIHBhaXIgIHggYXMgcmVkIG9uIGRlZmF1bHQgYmFja2dyb3VuZCBhbmQKKyAgICAgICBpbml0X3BhaXIoeCwtMSxDT0xPUl9CTFVFKSAgd2lsbCAgaW5pdGlhbGl6ZSAgcGFpciAgeCAgIGFzCisgICAgICAgZGVmYXVsdCBmb3JlZ3JvdW5kIG9uIGJsdWUuCisKKyAgICAgICBUaGUgIG90aGVyLCAgPEVNPmFzc3VtZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmRlZmF1bHQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2xvcnMoKTwvRU0+IGlzIGEgcmVmaW5lbWVudCB3aGljaAorICAgICAgIHRlbGxzIHdoaWNoIGNvbG9ycyB0byBwYWludCBmb3IgY29sb3IgcGFpciAwLiAgVGhpcyAgZnVuYy0KKyAgICAgICB0aW9uICByZWNvZ25pemVzICBhIHNwZWNpYWwgY29sb3IgbnVtYmVyIC0xLCB3aGljaCBkZW5vdGVzCisgICAgICAgdGhlIGRlZmF1bHQgdGVybWluYWwgY29sb3IuCisKKyAgICAgICBUaGUgZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OgorICAgICAgICAgICAgICA8RU0+dXNlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpOzwvRU0+CisgICAgICAgICAgICAgIDxFTT5hc3N1bWU8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKC0xLC0xKTs8L0VNPgorCisgICAgICAgVGhlc2UgYXJlIG5jdXJzZXMgZXh0ZW5zaW9ucy4gIEZvciBvdGhlciBjdXJzZXMgIGltcGxlbWVuLQorICAgICAgIHRhdGlvbnMsICBjb2xvciAgbnVtYmVyIC0xIGRvZXMgbm90IG1lYW4gYW55dGhpbmcsIGp1c3QgYXMKKyAgICAgICBmb3IgbmN1cnNlcyBiZWZvcmUgYSBzdWNjZXNzZnVsIGNhbGwgIG9mICA8RU0+dXNlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbC08L0VNPgorICAgICAgIDxFTT5vcnMoKTwvRU0+IG9yIDxFTT5hc3N1bWU8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk8L0VNPi4KKworICAgICAgIE90aGVyICBjdXJzZXMgIGltcGxlbWVudGF0aW9ucyBkbyBub3QgYWxsb3cgYW4gYXBwbGljYXRpb24KKyAgICAgICB0byBtb2RpZnkgY29sb3IgcGFpciAwLiAgVGhleSBhc3N1bWUgdGhhdCAgdGhlICBiYWNrZ3JvdW5kCisgICAgICAgaXMgQ09MT1JfQkxBQ0ssIGJ1dCBkbyBub3QgZW5zdXJlIHRoYXQgdGhlIGNvbG9yIHBhaXIgMCBpcworICAgICAgIHBhaW50ZWQgdG8gbWF0Y2ggdGhlIGFzc3VtcHRpb24uICBJZiB5b3VyIGFwcGxpY2F0aW9uIGRvZXMKKyAgICAgICBub3QgdXNlIGVpdGhlciA8RU0+dXNlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpPC9FTT4gb3IgPEVNPmFzc3VtZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmRlZmF1bHQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2wtPC9FTT4KKyAgICAgICA8RU0+b3JzKCk8L0VNPiBuY3Vyc2VzIHdpbGwgcGFpbnQgYSB3aGl0ZSAgZm9yZWdyb3VuZCAgKHRleHQpICB3aXRoCisgICAgICAgYmxhY2sgYmFja2dyb3VuZCBmb3IgY29sb3IgcGFpciAwLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgPFNUUk9ORz5PSzwvU1RST05HPgorICAgICAgIG9uIHN1Y2Nlc3MuICBUaGV5IHdpbGwgZmFpbCBpZiBlaXRoZXIgIHRoZSAgdGVybWluYWwgIGRvZXMKKyAgICAgICBub3QgIHN1cHBvcnQgIHRoZSA8RU0+b3JpZzwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPiBvciA8RU0+b3JpZzwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9yczwvRU0+IGNhcGFiaWxpdHkuICBJZgorICAgICAgIHRoZSA8RU0+aW5pdGlhbGl6ZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPiBjYXBhYmlsaXR5IGlzIGZvdW5kLCAgdGhpcyAgY2F1c2VzICBhbgorICAgICAgIGVycm9yIGFzIHdlbGwuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgQXNzb2NpYXRlZCAgd2l0aCAgdGhpcyAgZXh0ZW5zaW9uLCAgdGhlIDxTVFJPTkc+aW5pdF9wYWlyPC9TVFJPTkc+IGZ1bmN0aW9uCisgICAgICAgYWNjZXB0cyBuZWdhdGl2ZSBhcmd1bWVudHMgdG8gc3BlY2lmeSAgZGVmYXVsdCAgZm9yZWdyb3VuZAorICAgICAgIG9yIGJhY2tncm91bmQgY29sb3JzLgorCisgICAgICAgVGhlICA8RU0+dXNlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpPC9FTT4gIGZ1bmN0aW9uICB3YXMgIGFkZGVkIHRvIHN1cHBvcnQKKyAgICAgICA8RU0+ZGVkPC9FTT4uICBUaGlzIGlzIGEgZnVsbC1zY3JlZW4gYXBwbGljYXRpb24gd2hpY2ggdXNlcyAgY3Vyc2VzCisgICAgICAgdG8gIG1hbmFnZSBvbmx5IHBhcnQgb2YgdGhlIHNjcmVlbi4gIFRoZSBib3R0b20gcG9ydGlvbiBvZgorICAgICAgIHRoZSBzY3JlZW4sIHdoaWNoIGlzIG9mIGFkanVzdGFibGUgc2l6ZSwgaXMgbGVmdCB1bmNvbG9yZWQKKyAgICAgICB0byAgZGlzcGxheSB0aGUgcmVzdWx0cyBmcm9tIHNoZWxsIGNvbW1hbmRzLiAgVGhlIHRvcCBwb3ItCisgICAgICAgdGlvbiBvZiB0aGUgc2NyZWVuIGNvbG9ycyBmaWxlbmFtZXMgdXNpbmcgIGEgIHNjaGVtZSAgbGlrZQorICAgICAgIHRoZSAgImNvbG9yICBscyIgcHJvZ3JhbXMuICBBdHRlbXB0aW5nIHRvIG1hbmFnZSB0aGUgYmFjay0KKyAgICAgICBncm91bmQgY29sb3Igb2YgdGhlIHNjcmVlbiBmb3IgdGhpcyBhcHBsaWNhdGlvbiB3b3VsZCBnaXZlCisgICAgICAgdW5zYXRpc2ZhY3RvcnkgIHJlc3VsdHMgIGZvciAgYSAgdmFyaWV0eSBvZiByZWFzb25zLiAgVGhpcworICAgICAgIGV4dGVuc2lvbiB3YXMgZGV2aXNlZCBhZnRlciBub3RpbmcgdGhhdCBjb2xvciAgeHRlcm0gIChhbmQKKyAgICAgICBzaW1pbGFyICBwcm9ncmFtcykgIHByb3ZpZGVzIGEgYmFja2dyb3VuZCBjb2xvciB3aGljaCBkb2VzCisgICAgICAgbm90IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gIGFueSAgb2YgIHRoZSAgQU5TSSAgY29sb3JzLgorICAgICAgIFdoaWxlICBhIHNwZWNpYWwgdGVybWluZm8gZW50cnkgY291bGQgYmUgY29uc3RydWN0ZWQgdXNpbmcKKyAgICAgICBuaW5lIGNvbG9ycywgdGhlcmUgd2FzIG5vIG1lY2hhbmlzbSBwcm92aWRlZCB3aXRoaW4gY3Vyc2VzCisgICAgICAgdG8gIGFjY291bnQgZm9yIHRoZSByZWxhdGVkIDxFTT5vcmlnPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+cGFpcjwvRU0+IGFuZCA8RU0+YmFjazwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9yPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZXJhc2U8L0VNPgorICAgICAgIGNhcGFiaWxpdGllcy4KKworICAgICAgIFRoZSA8RU0+YXNzdW1lPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpPC9FTT4gZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHNvbHZlICBhCisgICAgICAgZGlmZmVyZW50ICBwcm9ibGVtOiAgc3VwcG9ydCAgZm9yIGFwcGxpY2F0aW9ucyB3aGljaCB3b3VsZAorICAgICAgIHVzZSAgZW52aXJvbm1lbnQgIHZhcmlhYmxlcyAgYW5kICBvdGhlciAgY29uZmlndXJhdGlvbiAgdG8KKyAgICAgICBieXBhc3MgIGN1cnNlcycgIG5vdGlvbiAgb2YgdGhlIHRlcm1pbmFsJ3MgZGVmYXVsdCBjb2xvcnMsCisgICAgICAgc2V0dGluZyBzcGVjaWZpYyB2YWx1ZXMuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvICBuY3Vyc2VzLiAgIFRoZXkgIHdlcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlICBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZGVkLjEuaHRtbCI+ZGVkKDEpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzICBEaWNrZXkgIChmcm9tICBhbiBhbmFseXNpcyBvZiB0aGUgcmVxdWlyZW1lbnRzIGZvcgorICAgICAgIGNvbG9yIHh0ZXJtIGZvciBYRnJlZTg2IDMuMS4yQywgRmVicnVhcnkgMTk5NikuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZGVmaW5lX2tleS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2RlZmluZV9rZXkuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZiNTRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2RlZmluZV9rZXkuM3guaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTcKKyAgKiBASWQ6IGRlZmluZV9rZXkuM3gsdiAxLjEyIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+ZGVmaW5lX2tleSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmRlZmluZV9rZXkgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImRlZmluZV9rZXkuM3guaHRtbCI+ZGVmaW5lX2tleSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmRlZmluZV9rZXk8L1NUUk9ORz4gLSBkZWZpbmUgYSBrZXljb2RlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVmaW5lX2tleShjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZGVmaW5pdGlvbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5rZXljb2RlKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICBJdCBwZXJtaXRzIGFuCisgICAgICAgYXBwbGljYXRpb24gdG8gZGVmaW5lIGtleWNvZGVzICB3aXRoICB0aGVpciAgY29ycmVzcG9uZGluZworICAgICAgIGNvbnRyb2wgIHN0cmluZ3MsICBzbyB0aGF0IHRoZSBuY3Vyc2VzIGxpYnJhcnkgd2lsbCBpbnRlci0KKyAgICAgICBwcmV0IHRoZW0ganVzdCBhcyBpdCB3b3VsZCB0aGUgIHByZWRlZmluZWQgIGNvZGVzICBpbiAgdGhlCisgICAgICAgdGVybWluZm8gZGF0YWJhc2UuCisKKyAgICAgICBJZiAgdGhlICBnaXZlbiBzdHJpbmcgaXMgbnVsbCwgYW55IGV4aXN0aW5nIGRlZmluaXRpb24gZm9yCisgICAgICAgdGhlIGtleWNvZGUgaXMgcmVtb3ZlZC4gIFNpbWlsYXJseSwgaWYgdGhlICBnaXZlbiAga2V5Y29kZQorICAgICAgIGlzICBuZWdhdGl2ZSAgb3IgIHplcm8sICBhbnkgZXhpc3Rpbmcgc3RyaW5nIGZvciB0aGUgZ2l2ZW4KKyAgICAgICBkZWZpbml0aW9uIGlzIHJlbW92ZWQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBrZXljb2RlICBtdXN0ICBiZSAgZ3JlYXRlciAgdGhhbiAgemVybywgIGVsc2UgIEVSUiAgaXMKKyAgICAgICByZXR1cm5lZC4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGFyZSAgc3BlY2lmaWMgIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90CisgICAgICAgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSAgViAgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0ICBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlIGNvbi0KKyAgICAgICBkaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImtleV9kZWZpbmVkLjN4Lmh0bWwiPmtleV9kZWZpbmVkKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SPC9IMj48UFJFPgorICAgICAgIFRob21hcyBEaWNrZXkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImRlZmluZV9rZXkuM3guaHRtbCI+ZGVmaW5lX2tleSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTM1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybS4zeC5odG1sCkBAIC0wLDAgKzEsMjU4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtLjN4LHYgMS4yMiAyMDA4LzEwLzExIDIwOjQ4OjExIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm0gM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtPC9TVFJPTkc+IC0gY3Vyc2VzIGV4dGVuc2lvbiBmb3IgcHJvZ3JhbW1pbmcgZm9ybXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+Zm9ybTwvU1RST05HPiBsaWJyYXJ5IHByb3ZpZGVzIHRlcm1pbmFsLWluZGVwZW5kZW50IGZhY2lsaXRpZXMKKyAgICAgICBmb3IgY29tcG9zaW5nIGZvcm0gc2NyZWVucyAgb24gIGNoYXJhY3Rlci1jZWxsICB0ZXJtaW5hbHMuCisgICAgICAgVGhlICBsaWJyYXJ5ICBpbmNsdWRlczogIGZpZWxkICByb3V0aW5lcywgd2hpY2ggY3JlYXRlIGFuZAorICAgICAgIG1vZGlmeSBmb3JtIGZpZWxkczsgYW5kIGZvcm0gcm91dGluZXMsIHdoaWNoIGdyb3VwICBmaWVsZHMKKyAgICAgICBpbnRvIGZvcm1zLCBkaXNwbGF5IGZvcm1zIG9uIHRoZSBzY3JlZW4sIGFuZCBoYW5kbGUgaW50ZXItCisgICAgICAgYWN0aW9uIHdpdGggdGhlIHVzZXIuCisKKyAgICAgICBUaGUgPFNUUk9ORz5mb3JtPC9TVFJPTkc+IGxpYnJhcnkgdXNlcyB0aGUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gbGlicmFyaWVzLiAgIFRvICB1c2UgIHRoZQorICAgICAgIDxTVFJPTkc+Zm9ybTwvU1RST05HPiBsaWJyYXJ5LCBsaW5rIHdpdGggdGhlIG9wdGlvbnMgPFNUUk9ORz4tbGZvcm08L1NUUk9ORz4gPFNUUk9ORz4tbGN1cnNlczwvU1RST05HPi4KKworICAgICAgIFlvdXIgcHJvZ3JhbSBzaG91bGQgc2V0IHVwIHRoZSBsb2NhbGUsIGUuZy4sCisKKyAgICAgICAgICAgIDxTVFJPTkc+c2V0bG9jYWxlKExDX0FMTCw8L1NUUk9ORz4gPFNUUk9ORz4iIik7PC9TVFJPTkc+CisKKyAgICAgICBzbyB0aGF0IGlucHV0L291dHB1dCBwcm9jZXNzaW5nIHdpbGwgd29yay4KKworICAgICAgIEEgIGN1cnNlcyAgaW5pdGlhbGl6YXRpb24gIHJvdXRpbmUgc3VjaCBhcyA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gbXVzdCBiZQorICAgICAgIGNhbGxlZCBiZWZvcmUgdXNpbmcgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucy4KKworICAgPFNUUk9ORz5DdXJyZW50PC9TVFJPTkc+IDxTVFJPTkc+RGVmYXVsdDwvU1RST05HPiA8U1RST05HPlZhbHVlczwvU1RST05HPiA8U1RST05HPmZvcjwvU1RST05HPiA8U1RST05HPkZpZWxkPC9TVFJPTkc+IDxTVFJPTkc+QXR0cmlidXRlczwvU1RST05HPgorICAgICAgIFRoZSA8U1RST05HPmZvcm08L1NUUk9ORz4gbGlicmFyeSAgbWFpbnRhaW5zICBhICBkZWZhdWx0ICB2YWx1ZSAgZm9yICBmaWVsZAorICAgICAgIGF0dHJpYnV0ZXMuICAgWW91ICBjYW4gIGdldCBvciBzZXQgdGhpcyBkZWZhdWx0IGJ5IGNhbGxpbmcKKyAgICAgICB0aGUgYXBwcm9wcmlhdGUgPFNUUk9ORz5zZXRfPC9TVFJPTkc+IG9yICByZXRyaWV2YWwgIHJvdXRpbmUgIHdpdGggIGEgIDxTVFJPTkc+TlVMTDwvU1RST05HPgorICAgICAgIGZpZWxkIHBvaW50ZXIuICBDaGFuZ2luZyB0aGlzIGRlZmF1bHQgd2l0aCBhIDxTVFJPTkc+c2V0XzwvU1RST05HPiBmdW5jdGlvbgorICAgICAgIGFmZmVjdHMgZnV0dXJlIGZpZWxkIGNyZWF0aW9ucywgYnV0IGRvZXMgIG5vdCAgY2hhbmdlICB0aGUKKyAgICAgICByZW5kZXJpbmcgb2YgZmllbGRzIGFscmVhZHkgY3JlYXRlZC4KKworICAgPFNUUk9ORz5Sb3V0aW5lPC9TVFJPTkc+IDxTVFJPTkc+TmFtZTwvU1RST05HPiA8U1RST05HPkluZGV4PC9TVFJPTkc+CisgICAgICAgVGhlICBmb2xsb3dpbmcgIHRhYmxlIGxpc3RzIGVhY2ggPFNUUk9ORz5mb3JtPC9TVFJPTkc+IHJvdXRpbmUgYW5kIHRoZSBuYW1lCisgICAgICAgb2YgdGhlIG1hbnVhbCBwYWdlIG9uIHdoaWNoIGl0IGlzIGRlc2NyaWJlZC4KKworICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IFJvdXRpbmUgTmFtZSAgICBNYW51YWwgUGFnZSBOYW1lCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIGN1cnJlbnRfZmllbGQgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBkYXRhX2FoZWFkICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kYXRhLjN4Lmh0bWwiPmZvcm1fZGF0YSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZGF0YV9iZWhpbmQgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZGF0YS4zeC5odG1sIj5mb3JtX2RhdGEoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGR1cF9maWVsZCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZHluYW1pY19maWVsZF9pbmZvICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfaW5mby4zeC5odG1sIj5mb3JtX2ZpZWxkX2luZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX2FyZyAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+Zm9ybV9maWVsZF92YWxpZGF0aW9uKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9iYWNrICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfYnVmZmVyICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9jb3VudCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9mb3JlICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfaW5kZXggICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX2luZm8gICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2luZm8uM3guaHRtbCI+Zm9ybV9maWVsZF9pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9pbml0ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfanVzdCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX29wdHMgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9vcHRzX29mZiAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfb3B0c19vbiAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX3BhZCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9zdGF0dXMgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX3Rlcm0gICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF90eXBlICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwiPmZvcm1fZmllbGRfdmFsaWRhdGlvbigzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICBmaWVsZF91c2VycHRyICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9kcml2ZXIgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZHJpdmVyLjN4Lmh0bWwiPmZvcm1fZHJpdmVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX2ZpZWxkcyAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX2luaXQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9vcHRzICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fb3B0c19vZmYgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX29wdHNfb24gICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9wYWdlICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fcmVxdWVzdF9ieV9uYW1lICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwiPmZvcm1fcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fcmVxdWVzdF9uYW1lICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwiPmZvcm1fcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fc3ViICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV90ZXJtICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fdXNlcnB0ciAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX3dpbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZyZWVfZmllbGQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZnJlZV9maWVsZHR5cGUgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmcmVlX2Zvcm0gICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGxpbmtfZmllbGQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbGlua19maWVsZHR5cGUgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtb3ZlX2ZpZWxkICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBuZXdfZmllbGQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+Zm9ybV9maWVsZF9uZXcoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG5ld19maWVsZHR5cGUgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkdHlwZS4zeC5odG1sIj5mb3JtX2ZpZWxkdHlwZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbmV3X2Zvcm0gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fbmV3LjN4Lmh0bWwiPmZvcm1fbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBuZXdfcGFnZSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5mb3JtX25ld19wYWdlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBwb3NfZm9ybV9jdXJzb3IgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9jdXJzb3IuM3guaHRtbCI+Zm9ybV9jdXJzb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHBvc3RfZm9ybSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3Bvc3QuM3guaHRtbCI+Zm9ybV9wb3N0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzY2FsZV9mb3JtICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9jdXJyZW50X2ZpZWxkICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfYmFjayAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX2J1ZmZlciAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfZm9yZSAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX2luaXQgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF9qdXN0ICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2p1c3QuM3guaHRtbCI+Zm9ybV9maWVsZF9qdXN0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfb3B0cyAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX3BhZCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF9zdGF0dXMgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX3Rlcm0gICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF90eXBlICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+Zm9ybV9maWVsZF92YWxpZGF0aW9uKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfdXNlcnB0ciAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkdHlwZV9hcmcgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGR0eXBlX2Nob2ljZSAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9mb3JtX2ZpZWxkcyAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9mb3JtX2luaXQgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZm9ybV9vcHRzICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2Zvcm1fcGFnZSAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9mb3JtX3N1YiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2Zvcm1fdGVybSAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9mb3JtX3VzZXJwdHIgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZm9ybV93aW4gICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tYXhfZmllbGQgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X25ld19wYWdlICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fbmV3X3BhZ2UuM3guaHRtbCI+Zm9ybV9uZXdfcGFnZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgdW5wb3N0X2Zvcm0gICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcG9zdC4zeC5odG1sIj5mb3JtX3Bvc3QoM3gpPC9BPjwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+ICBvbiAgZXJyb3IsICBhbmQKKyAgICAgICBzZXQgIGVycm5vICB0byAgdGhlICBjb3JyZXNwb25kaW5nICBlcnJvci1jb2RlIHJldHVybmVkIGJ5CisgICAgICAgZnVuY3Rpb25zIHJldHVybmluZyBhbiBpbnRlZ2VyLiAgUm91dGluZXMgdGhhdCAgcmV0dXJuICBhbgorICAgICAgIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBmb3JtLgorCisgICAgICAgPFNUUk9ORz5FX0lOVkFMSURfRklFTEQ8L1NUUk9ORz4KKyAgICAgICAgICAgIENvbnRlbnRzIG9mIGEgZmllbGQgYXJlIG5vdCB2YWxpZC4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBmaWVsZHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZm9ybS4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBoYXMgbm90IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX05PX1JPT008L1NUUk9ORz4KKyAgICAgICAgICAgIEZvcm0gaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gaXMgYWxyZWFkeSBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfUkVRVUVTVF9ERU5JRUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX1VOS05PV05fQ09NTUFORDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gZHJpdmVyIGNvZGUgc2F3IGFuIHVua25vd24gcmVxdWVzdCBjb2RlLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvcgorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGVzIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiBhbmQgPFNUUk9ORz4mbHQ7ZXRpLmgmZ3Q7PC9TVFJPTkc+LgorCisgICAgICAgSW4gIHlvdXIgIGxpYnJhcnkgIGxpc3QsICBsaWJmb3JtLmEgc2hvdWxkIGJlIGJlZm9yZSBsaWJuLQorICAgICAgIGN1cnNlcy5hOyB0aGF0IGlzLCB5b3Ugd2FudCB0byBzYXkgYC1sZm9ybSAtbG5jdXJzZXMnLCBub3QKKyAgICAgICB0aGUgIG90aGVyICB3YXkgIGFyb3VuZCAod2hpY2ggd291bGQgZ2l2ZSB5b3UgYSBsaW5rIGVycm9yCisgICAgICAgdXNpbmcgbW9zdCBsaW5rZXJzKS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuY3Vyc2VzCisgICAgICAgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIFRoaXMgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9jdXJzb3IuM3guaHRtbCBiL2RvYy9odG1sL21hbi9mb3JtX2N1cnNvci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzQ3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV9jdXJzb3IuM3guaHRtbApAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9jdXJzb3IuM3gsdiAxLjYgMjAwNi8xMS8wNCAxODo1MDoyNCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2N1cnNvciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fY3Vyc29yIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2N1cnNvci4zeC5odG1sIj5mb3JtX2N1cnNvcigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fY3Vyc29yLjN4Lmh0bWwiPmZvcm1fY3Vyc29yKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fY3Vyc29yPC9TVFJPTkc+IC0gcG9zaXRpb24gYSBmb3JtIHdpbmRvdyBjdXJzb3IKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgcG9zX2Zvcm1fY3Vyc29yKEZPUk0gKmZvcm0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+cG9zX2Zvcm1fY3Vyc29yPC9TVFJPTkc+ICByZXN0b3JlcyB0aGUgY3Vyc29yIHRvIHRoZQorICAgICAgIHBvc2l0aW9uIHJlcXVpcmVkIGZvciB0aGUgZm9ybXMgZHJpdmVyICB0byAgY29udGludWUgIHByby0KKyAgICAgICBjZXNzaW5nICByZXF1ZXN0cy4gICBUaGlzICBpcyB1c2VmdWwgYWZ0ZXIgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gcm91dGluZXMKKyAgICAgICBoYXZlIGJlZW4gY2FsbGVkIHRvIGRvIHNjcmVlbi1wYWludGluZyBpbiAgcmVzcG9uc2UgIHRvICBhCisgICAgICAgZm9ybSBvcGVyYXRpb24uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX05PVF9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGhhcyBub3QgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9jdXJzb3IuM3guaHRtbCI+Zm9ybV9jdXJzb3IoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9kYXRhLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybV9kYXRhLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzMjk5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2RhdGEuM3guaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9kYXRhLjN4LHYgMS44IDIwMDYvMDIvMjUgMjE6Mzg6MjYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9kYXRhIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9kYXRhIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2RhdGEuM3guaHRtbCI+Zm9ybV9kYXRhKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZGF0YS4zeC5odG1sIj5mb3JtX2RhdGEoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9kYXRhPC9TVFJPTkc+IC0gdGVzdCBmb3Igb2ZmLXNjcmVlbiBkYXRhIGluIGdpdmVuIGZvcm1zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgYm9vbCBkYXRhX2FoZWFkKGNvbnN0IEZPUk0gKmZvcm0pOworICAgICAgIGJvb2wgZGF0YV9iZWhpbmQoY29uc3QgRk9STSAqZm9ybSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPmRhdGFfYWhlYWQ8L1NUUk9ORz4gdGVzdHMgd2hldGhlciB0aGVyZSBpcyBvZmYtc2NyZWVuCisgICAgICAgZGF0YSBhaGVhZCBpbiB0aGUgZ2l2ZW4gZm9ybS4gICBJdCAgcmV0dXJucyAgVFJVRSAgKDEpICBvcgorICAgICAgIEZBTFNFICgwKS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmRhdGFfYmVoaW5kPC9TVFJPTkc+IHRlc3RzIHdoZXRoZXIgdGhlcmUgaXMgb2ZmLXNjcmVlbgorICAgICAgIGRhdGEgYmVoaW5kIGluIHRoZSBnaXZlbiBmb3JtLiAgSXQgIHJldHVybnMgIFRSVUUgICgxKSAgb3IKKyAgICAgICBGQUxTRSAoMCkuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kYXRhLjN4Lmh0bWwiPmZvcm1fZGF0YSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtX2RyaXZlci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZHJpdmVyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlYjdlNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2RyaXZlci4zeC5odG1sCkBAIC0wLDAgKzEsMzc2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fZHJpdmVyLjN4LHYgMS4xNiAyMDA4LzA2LzIxIDIxOjU1OjM5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZHJpdmVyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9kcml2ZXIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZHJpdmVyLjN4Lmh0bWwiPmZvcm1fZHJpdmVyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kcml2ZXIuM3guaHRtbCI+Zm9ybV9kcml2ZXIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9kcml2ZXI8L1NUUk9ORz4gLSBjb21tYW5kLXByb2Nlc3NpbmcgbG9vcCBvZiB0aGUgZm9ybSBzeXN0ZW0KKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgZm9ybV9kcml2ZXIoRk9STSAqZm9ybSwgaW50IGMpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIE9uY2UgYSBmb3JtIGhhcyBiZWVuIHBvc3RlZCAoZGlzcGxheWVkKSwgeW91IHNob3VsZCBmdW5uZWwKKyAgICAgICBpbnB1dCBldmVudHMgdG8gaXQgdGhyb3VnaCA8U1RST05HPmZvcm1fZHJpdmVyPC9TVFJPTkc+LiAgVGhpcyByb3V0aW5lICBoYXMKKyAgICAgICB0aHJlZSBtYWpvciBpbnB1dCBjYXNlczoKKworICAgICAgIC0gIFRoZSAgaW5wdXQgIGlzICBhICBmb3JtIG5hdmlnYXRpb24gcmVxdWVzdC4gIE5hdmlnYXRpb24KKyAgICAgICAgICByZXF1ZXN0IGNvZGVzIGFyZSBjb25zdGFudHMgZGVmaW5lZCBpbiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+LCAgd2hpY2gKKyAgICAgICAgICBhcmUgZGlzdGluY3QgZnJvbSB0aGUga2V5LSBhbmQgY2hhcmFjdGVyIGNvZGVzIHJldHVybmVkCisgICAgICAgICAgYnkgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4uCisKKyAgICAgICAtICBUaGUgaW5wdXQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyLiAgUHJpbnRhYmxlICBjaGFyYWMtCisgICAgICAgICAgdGVycyAgKHdoaWNoICBtdXN0ICBiZSAgcG9zaXRpdmUsICBsZXNzICB0aGFuICAyNTYpIGFyZQorICAgICAgICAgIGNoZWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9ncmFtJ3MgbG9jYWxlIHNldHRpbmdzLgorCisgICAgICAgLSAgVGhlIGlucHV0IGlzIHRoZSBLRVlfTU9VU0Ugc3BlY2lhbCBrZXkgYXNzb2NpYXRlZCAgd2l0aAorICAgICAgICAgIGFuIG1vdXNlIGV2ZW50LgorCisgICAgICAgVGhlIGZvcm0gZHJpdmVyIHJlcXVlc3RzIGFyZSBhcyBmb2xsb3dzOgorCisgICAgICAgUkVRX05FWFRfUEFHRQorICAgICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBwYWdlLgorCisgICAgICAgUkVRX1BSRVZfUEFHRQorICAgICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZS4KKworICAgICAgIFJFUV9GSVJTVF9QQUdFCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBmaXJzdCBwYWdlLgorCisgICAgICAgUkVRX0xBU1RfUEFHRQorICAgICAgICAgICAgTW92ZSB0byB0aGUgbGFzdCBmaWVsZC4KKworCisgICAgICAgUkVRX05FWFRfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIG5leHQgZmllbGQuCisKKyAgICAgICBSRVFfUFJFVl9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgZmllbGQuCisKKyAgICAgICBSRVFfRklSU1RfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIGZpcnN0IGZpZWxkLgorCisgICAgICAgUkVRX0xBU1RfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIGxhc3QgZmllbGQuCisKKyAgICAgICBSRVFfU05FWFRfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHNvcnRlZCBuZXh0IGZpZWxkLgorCisgICAgICAgUkVRX1NQUkVWX0ZJRUxECisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBzb3J0ZWQgcHJldmlvdXMgZmllbGQuCisKKyAgICAgICBSRVFfU0ZJUlNUX0ZJRUxECisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBzb3J0ZWQgZmlyc3QgZmllbGQuCisKKyAgICAgICBSRVFfU0xBU1RfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHNvcnRlZCBsYXN0IGZpZWxkLgorCisgICAgICAgUkVRX0xFRlRfRklFTEQKKyAgICAgICAgICAgIE1vdmUgbGVmdCB0byBhIGZpZWxkLgorCisgICAgICAgUkVRX1JJR0hUX0ZJRUxECisgICAgICAgICAgICBNb3ZlIHJpZ2h0IHRvIGEgZmllbGQuCisKKyAgICAgICBSRVFfVVBfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdXAgdG8gYSBmaWVsZC4KKworICAgICAgIFJFUV9ET1dOX0ZJRUxECisgICAgICAgICAgICBNb3ZlIGRvd24gdG8gYSBmaWVsZC4KKworCisgICAgICAgUkVRX05FWFRfQ0hBUgorICAgICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBjaGFyLgorCisgICAgICAgUkVRX1BSRVZfQ0hBUgorICAgICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgY2hhci4KKworICAgICAgIFJFUV9ORVhUX0xJTkUKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIG5leHQgbGluZS4KKworICAgICAgIFJFUV9QUkVWX0xJTkUKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHByZXZpb3VzIGxpbmUuCisKKyAgICAgICBSRVFfTkVYVF9XT1JECisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IHdvcmQuCisKKyAgICAgICBSRVFfUFJFVl9XT1JECisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyB3b3JkLgorCisgICAgICAgUkVRX0JFR19GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWVsZC4KKworICAgICAgIFJFUV9FTkRfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgZmllbGQuCisKKyAgICAgICBSRVFfQkVHX0xJTkUKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KKworICAgICAgIFJFUV9FTkRfTElORQorICAgICAgICAgICAgTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCisgICAgICAgUkVRX0xFRlRfQ0hBUgorICAgICAgICAgICAgTW92ZSBsZWZ0IGluIHRoZSBmaWVsZC4KKworICAgICAgIFJFUV9SSUdIVF9DSEFSCisgICAgICAgICAgICBNb3ZlIHJpZ2h0IGluIHRoZSBmaWVsZC4KKworICAgICAgIFJFUV9VUF9DSEFSCisgICAgICAgICAgICBNb3ZlIHVwIGluIHRoZSBmaWVsZC4KKworICAgICAgIFJFUV9ET1dOX0NIQVIKKyAgICAgICAgICAgIE1vdmUgZG93biBpbiB0aGUgZmllbGQuCisKKworICAgICAgIFJFUV9ORVdfTElORQorICAgICAgICAgICAgSW5zZXJ0IG9yIG92ZXJsYXkgYSBuZXcgbGluZS4KKworICAgICAgIFJFUV9JTlNfQ0hBUgorICAgICAgICAgICAgSW5zZXJ0IGEgYmxhbmsgYXQgdGhlIGN1cnNvci4KKworICAgICAgIFJFUV9JTlNfTElORQorICAgICAgICAgICAgSW5zZXJ0IGEgYmxhbmsgbGluZSBhdCB0aGUgY3Vyc29yLgorCisgICAgICAgUkVRX0RFTF9DSEFSCisgICAgICAgICAgICBEZWxldGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJzb3IuCisKKyAgICAgICBSRVFfREVMX1BSRVYKKyAgICAgICAgICAgIERlbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IuCisKKyAgICAgICBSRVFfREVMX0xJTkUKKyAgICAgICAgICAgIERlbGV0ZSBsaW5lIGF0IHRoZSBjdXJzb3IuCisKKyAgICAgICBSRVFfREVMX1dPUkQKKyAgICAgICAgICAgIERlbGV0ZSBibGFuay1kZWxpbWl0ZWQgd29yZCBhdCB0aGUgY3Vyc29yLgorCisgICAgICAgUkVRX0NMUl9FT0wKKyAgICAgICAgICAgIENsZWFyIHRvIGVuZCBvZiBsaW5lIGZyb20gY3Vyc29yLgorCisgICAgICAgUkVRX0NMUl9FT0YKKyAgICAgICAgICAgIENsZWFyIHRvIGVuZCBvZiBmaWVsZCBmcm9tIGN1cnNvci4KKworICAgICAgIFJFUV9DTFJfRklFTEQKKyAgICAgICAgICAgIENsZWFyIHRoZSBlbnRpcmUgZmllbGQuCisKKyAgICAgICBSRVFfT1ZMX01PREUKKyAgICAgICAgICAgIEVudGVyIG92ZXJsYXkgbW9kZS4KKworICAgICAgIFJFUV9JTlNfTU9ERQorICAgICAgICAgICAgRW50ZXIgaW5zZXJ0IG1vZGUuCisKKworICAgICAgIFJFUV9TQ1JfRkxJTkUKKyAgICAgICAgICAgIFNjcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIGxpbmUuCisKKyAgICAgICBSRVFfU0NSX0JMSU5FCisgICAgICAgICAgICBTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgbGluZS4KKworICAgICAgIFJFUV9TQ1JfRlBBR0UKKyAgICAgICAgICAgIFNjcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIHBhZ2UuCisKKyAgICAgICBSRVFfU0NSX0JQQUdFCisgICAgICAgICAgICBTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgcGFnZS4KKworICAgICAgIFJFUV9TQ1JfRkhQQUdFCisgICAgICAgICAgICBTY3JvbGwgdGhlIGZpZWxkIGZvcndhcmQgaGFsZiBhIHBhZ2UuCisKKyAgICAgICBSRVFfU0NSX0JIUEFHRQorICAgICAgICAgICAgU2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBoYWxmIGEgcGFnZS4KKworCisgICAgICAgUkVRX1NDUl9GQ0hBUgorICAgICAgICAgICAgU2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgY2hhcmFjdGVyLgorCisgICAgICAgUkVRX1NDUl9CQ0hBUgorICAgICAgICAgICAgU2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBhIGNoYXJhY3Rlci4KKworICAgICAgIFJFUV9TQ1JfSEZMSU5FCisgICAgICAgICAgICBIb3Jpem9udGFsIHNjcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIGxpbmUuCisKKyAgICAgICBSRVFfU0NSX0hCTElORQorICAgICAgICAgICAgSG9yaXpvbnRhbCBzY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgbGluZS4KKworICAgICAgIFJFUV9TQ1JfSEZIQUxGCisgICAgICAgICAgICBIb3Jpem9udGFsIHNjcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBoYWxmIGEgbGluZS4KKworICAgICAgIFJFUV9TQ1JfSEJIQUxGCisgICAgICAgICAgICBIb3Jpem9udGFsIHNjcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgaGFsZiBhIGxpbmUuCisKKworICAgICAgIFJFUV9WQUxJREFUSU9OCisgICAgICAgICAgICBWYWxpZGF0ZSBmaWVsZC4KKworICAgICAgIFJFUV9ORVhUX0NIT0lDRQorICAgICAgICAgICAgRGlzcGxheSBuZXh0IGZpZWxkIGNob2ljZS4KKworICAgICAgIFJFUV9QUkVWX0NIT0lDRQorICAgICAgICAgICAgRGlzcGxheSBwcmV2aW91cyBmaWVsZCBjaG9pY2UuCisKKyAgICAgICBJZiAgdGhlICBzZWNvbmQgIGFyZ3VtZW50ICBpcyAgYSAgcHJpbnRhYmxlIGNoYXJhY3RlciwgdGhlCisgICAgICAgZHJpdmVyIHBsYWNlcyBpdCBpbiB0aGUgY3VycmVudCBwb3NpdGlvbiAgaW4gIHRoZSAgY3VycmVudAorICAgICAgIGZpZWxkLiAgIElmICBpdCBpcyBvbmUgb2YgdGhlIGZvcm1zIHJlcXVlc3RzIGxpc3RlZCBhYm92ZSwKKyAgICAgICB0aGF0IHJlcXVlc3QgaXMgZXhlY3V0ZWQuCisKKyAgIDxTVFJPTkc+TU9VU0U8L1NUUk9ORz4gPFNUUk9ORz5IQU5ETElORzwvU1RST05HPgorICAgICAgIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsICBrZXksICB0aGUKKyAgICAgICBhc3NvY2lhdGVkIG1vdXNlIGV2ZW50IGlzIHRyYW5zbGF0ZWQgaW50byBvbmUgb2YgdGhlIGFib3ZlCisgICAgICAgcHJlLWRlZmluZWQgcmVxdWVzdHMuICBDdXJyZW50bHkgb25seSBjbGlja3MgaW4gIHRoZSAgdXNlcgorICAgICAgIHdpbmRvdyAgKGUuZy4gIGluc2lkZSB0aGUgZm9ybSBkaXNwbGF5IGFyZWEgb3IgdGhlIGRlY29yYS0KKyAgICAgICB0aW9uIHdpbmRvdykgYXJlIGhhbmRsZWQuCisKKyAgICAgICBJZiB5b3UgY2xpY2sgYWJvdmUgdGhlIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBmb3JtOgorCisgICAgICAgICAgICAgIGEgUkVRX1BSRVZfRklFTEQgaXMgZ2VuZXJhdGVkIGZvciBhIHNpbmdsZSBjbGljaywKKworICAgICAgICAgICAgICBhIFJFUV9QUkVWX1BBR0UgaXMgZ2VuZXJhdGVkIGZvciBhIGRvdWJsZS1jbGljayBhbmQKKworICAgICAgICAgICAgICBhIFJFUV9GSVJTVF9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgIHRyaXBsZS1jbGljay4KKworICAgICAgIElmIHlvdSBjbGljayBiZWxvdyB0aGUgZGlzcGxheSByZWdpb24gb2YgdGhlIGZvcm06CisKKyAgICAgICAgICAgICAgYSBSRVFfTkVYVF9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorCisgICAgICAgICAgICAgIGEgUkVRX05FWFRfUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorCisgICAgICAgICAgICAgIGEgUkVRX0xBU1RfRklFTEQgaXMgZ2VuZXJhdGVkIGZvciBhIHRyaXBsZS1jbGljay4KKworICAgICAgIElmIHlvdSBjbGljayBhdCBhbiBmaWVsZCBpbnNpZGUgdGhlIGRpc3BsYXkgIGFyZWEgIG9mICB0aGUKKyAgICAgICBmb3JtOgorCisgICAgICAgICAgICAgIC0gIHRoZSBmb3JtIGN1cnNvciBpcyBwb3NpdGlvbmVkIHRvIHRoYXQgZmllbGQuCisKKyAgICAgICAgICAgICAgLSAgSWYgIHlvdSBkb3VibGUtY2xpY2sgYSBmaWVsZCwgdGhlIGZvcm0gY3Vyc29yIGlzCisgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgdG8gdGhhdCBmaWVsZCAgYW5kICA8U1RST05HPkVfVU5LTk9XTl9DT01NQU5EPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgIGlzICByZXR1cm5lZC4gICBUaGlzICByZXR1cm4gIHZhbHVlIG1ha2VzIHNlbnNlLAorICAgICAgICAgICAgICAgICBiZWNhdXNlIGEgZG91YmxlIGNsaWNrICB1c3VhbGx5ICBtZWFucyAgdGhhdCAgYW4KKyAgICAgICAgICAgICAgICAgZmllbGQtc3BlY2lmaWMgYWN0aW9uIHNob3VsZCBiZSByZXR1cm5lZC4gIEl0IGlzCisgICAgICAgICAgICAgICAgIGV4YWN0bHkgdGhlIHB1cnBvc2Ugb2YgdGhpcyByZXR1cm4gdmFsdWUgdG8gc2lnLQorICAgICAgICAgICAgICAgICBuYWwgIHRoYXQgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZCBzaG91bGQKKyAgICAgICAgICAgICAgICAgYmUgZXhlY3V0ZWQuCisKKyAgICAgICAgICAgICAgLSAgSWYgIGEgIHRyYW5zbGF0aW9uICBpbnRvICBhICByZXF1ZXN0ICB3YXMgIGRvbmUsCisgICAgICAgICAgICAgICAgIDxTVFJPTkc+Zm9ybV9kcml2ZXI8L1NUUk9ORz4gIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGlzIHJlcXVlc3QuCisKKyAgICAgICBJZiB5b3UgY2xpY2tlZCBvdXRzaWRlIHRoZSB1c2VyIHdpbmRvdyBvciB0aGUgbW91c2UgIGV2ZW50CisgICAgICAgY291bGQgICBub3QgICBiZSAgIHRyYW5zbGF0ZWQgICBpbnRvICBhICBmb3JtICByZXF1ZXN0ICBhbgorICAgICAgIDxTVFJPTkc+RV9SRVFVRVNUX0RFTklFRDwvU1RST05HPiBpcyByZXR1cm5lZC4KKworICAgPFNUUk9ORz5BUFBMSUNBVElPTi1ERUZJTkVEPC9TVFJPTkc+IDxTVFJPTkc+Q09NTUFORFM8L1NUUk9ORz4KKyAgICAgICBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5laXRoZXIgcHJpbnRhYmxlIG5vciBvbmUgb2YgdGhlCisgICAgICAgYWJvdmUgIHByZS1kZWZpbmVkIGZvcm0gcmVxdWVzdHMsIHRoZSBkcml2ZXIgYXNzdW1lcyBpdCBpcworICAgICAgIGFuIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbW1hbmQgYW5kIHJldHVybnMgPFNUUk9ORz5FX1VOS05PV05fQ09NLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+TUFORDwvU1RST05HPi4gIEFwcGxpY2F0aW9uLWRlZmluZWQgY29tbWFuZHMgc2hvdWxkIGJlIGRlZmluZWQgcmVsLQorICAgICAgIGF0aXZlIHRvIDxTVFJPTkc+TUFYX0NPTU1BTkQ8L1NUUk9ORz4sIHRoZSAgbWF4aW11bSAgdmFsdWUgIG9mICB0aGVzZSAgcHJlLQorICAgICAgIGRlZmluZWQgcmVxdWVzdHMuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9kcml2ZXI8L1NUUk9ORz4gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfU1RBVEU8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmEtCisgICAgICAgICAgICB0aW9uIGZ1bmN0aW9uLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGhhcyBub3QgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfSU5WQUxJRF9GSUVMRDwvU1RST05HPgorICAgICAgICAgICAgQ29udGVudHMgb2YgZmllbGQgaXMgaW52YWxpZC4KKworICAgICAgIDxTVFJPTkc+RV9SRVFVRVNUX0RFTklFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfVU5LTk9XTl9DT01NQU5EPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBkcml2ZXIgY29kZSBzYXcgYW4gdW5rbm93biByZXF1ZXN0IGNvZGUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9IndnZXRjaC4zeC5odG1sIj53Z2V0Y2goM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlcyA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kcml2ZXIuM3guaHRtbCI+Zm9ybV9kcml2ZXIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQzMzkwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGQuM3guaHRtbApAQCAtMCwwICsxLDE0MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZC4zeCx2IDEuOCAyMDA2LzExLzA0IDE4OjAxOjM4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZmllbGQgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkPC9TVFJPTkc+IC0gbWFrZSBhbmQgYnJlYWsgY29ubmVjdGlvbnMgYmV0d2VlbiBmaWVsZHMgYW5kCisgICAgICAgZm9ybXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2Zvcm1fZmllbGRzKEZPUk0gKmZvcm0sIEZJRUxEICoqZmllbGRzKTsKKyAgICAgICBGSUVMRCAqKmZvcm1fZmllbGRzKGNvbnN0IEZPUk0gKmZvcm0pOworICAgICAgIGludCBmaWVsZF9jb3VudChjb25zdCBGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgbW92ZV9maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2Zvcm1fZmllbGRzPC9TVFJPTkc+ICBjaGFuZ2VzICB0aGUgIGZpZWxkICBwb2ludGVyCisgICAgICAgYXJyYXkgIG9mIHRoZSBnaXZlbiA8RU0+Zm9ybTwvRU0+LiAgVGhlIGFycmF5IG11c3QgYmUgdGVybWluYXRlZCBieQorICAgICAgIGEgPFNUUk9ORz5OVUxMPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+Zm9ybV9maWVsZHM8L1NUUk9ORz4gcmV0dXJucyB0aGUgZmllbGQgIGFycmF5ICBvZiAgdGhlCisgICAgICAgZ2l2ZW4gZm9ybS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+ZmllbGRfY291bnQ8L1NUUk9ORz4gIHJldHVybnMgdGhlIGNvdW50IG9mIGZpZWxkcyBpbgorICAgICAgIDxFTT5mb3JtPC9FTT4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5tb3ZlX2ZpZWxkPC9TVFJPTkc+IG1vdmVzIHRoZSBnaXZlbiBmaWVsZCAod2hpY2ggIG11c3QKKyAgICAgICBiZSBkaXNjb25uZWN0ZWQpIHRvIGEgc3BlY2lmaWVkIGxvY2F0aW9uIG9uIHRoZSBzY3JlZW4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZvcm1fZmllbGRzPC9TVFJPTkc+IHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZmllbGRfY291bnQ8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPiBpZiB0aGUgPEVNPmZvcm08L0VNPiBwYXJhbWV0ZXIKKyAgICAgICBpcyA8U1RST05HPk5VTEw8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb25zIDxTVFJPTkc+c2V0X2Zvcm1fZmllbGRzPC9TVFJPTkc+IGFuZCA8U1RST05HPm1vdmVfZmllbGQ8L1NUUk9ORz4gcmV0dXJuIG9uZSBvZgorICAgICAgIHRoZSBmb2xsb3dpbmcgY29kZXMgb24gZXJyb3I6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBmb3JtLgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gaXMgYWxyZWFkeSBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgVGhlICAgU1ZyNCAgIGZvcm1zICBsaWJyYXJ5ICBkb2N1bWVudGF0aW9uICBzcGVjaWZpZXMgIHRoZQorICAgICAgIDxTVFJPTkc+ZmllbGRfY291bnQ8L1NUUk9ORz4gZXJyb3IgdmFsdWUgYXMgLTEgKHdoaWNoIGlzIHRoZSB2YWx1ZSBvZiA8U1RST05HPkVSUjwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDc3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fZmllbGRfYXR0cmlidXRlcy4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxODo1MToyNiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXM8L1NUUk9ORz4gIC0gIGNvbG9yICBhbmQgYXR0cmlidXRlIGNvbnRyb2wgZm9yCisgICAgICAgZm9ybSBmaWVsZHMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2ZpZWxkX2ZvcmUoRklFTEQgKmZpZWxkLCBjaHR5cGUgYXR0cik7CisgICAgICAgY2h0eXBlIGZpZWxkX2ZvcmUoY29uc3QgRklFTEQgKmZpZWxkKTsKKyAgICAgICBpbnQgc2V0X2ZpZWxkX2JhY2soRklFTEQgKmZpZWxkLCBjaHR5cGUgYXR0cik7CisgICAgICAgY2h0eXBlIGZpZWxkX2JhY2soY29uc3QgRklFTEQgKmZpZWxkKTsKKyAgICAgICBpbnQgc2V0X2ZpZWxkX3BhZChGSUVMRCAqZmllbGQsIGludCBwYWQpOworICAgICAgIGludCBmaWVsZF9wYWQoY29uc3QgRklFTEQgKmZpZWxkKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfZmllbGRfZm9yZTwvU1RST05HPiBzZXRzIHRoZSBmb3JlZ3JvdW5kICBhdHRyaWJ1dGUKKyAgICAgICBvZiAgPEVNPmZpZWxkPC9FTT4uIFRoaXMgaXMgdGhlIGhpZ2hsaWdodCB1c2VkIHRvIGRpc3BsYXkgdGhlIGZpZWxkCisgICAgICAgY29udGVudHMuICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF9mb3JlPC9TVFJPTkc+IHJldHVybnMgdGhlICBmb3JlZ3JvdW5kCisgICAgICAgYXR0cmlidXRlLiAgVGhlIGRlZmF1bHQgaXMgPFNUUk9ORz5BX1NUQU5ET1VUPC9TVFJPTkc+LgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZF9iYWNrPC9TVFJPTkc+IHNldHMgdGhlIGJhY2tncm91bmQgYXR0cmlidXRlCisgICAgICAgb2YgPEVNPmZvcm08L0VNPi4gVGhpcyBpcyB0aGUgaGlnaGxpZ2h0IHVzZWQgdG8gZGlzcGxheSB0aGUgIGV4dGVudAorICAgICAgIGZpZWxkcyAgaW4gIHRoZSBmb3JtLiAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZmllbGRfYmFjazwvU1RST05HPiByZXR1cm5zIHRoZQorICAgICAgIGJhY2tncm91bmQgYXR0cmlidXRlLiAgVGhlIGRlZmF1bHQgaXMgPFNUUk9ORz5BX05PUk1BTDwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZF9wYWQ8L1NUUk9ORz4gc2V0cyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gZmlsbAorICAgICAgIHRoZSAgZmllbGQuICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5maWVsZF9wYWQ8L1NUUk9ORz4gIHJldHVybnMgIHRoZSBnaXZlbgorICAgICAgIGZvcm0ncyBwYWQgY2hhcmFjdGVyLiAgVGhlIGRlZmF1bHQgaXMgYSBibGFuay4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+IGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJmb3JtXyIgZm9yCisgICAgICAgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwKQEAgLTAsMCArMSwxNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fZmllbGRfYnVmZmVyLjN4LHYgMS4xNCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZmllbGRfYnVmZmVyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9maWVsZF9idWZmZXIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9maWVsZF9idWZmZXI8L1NUUk9ORz4gLSBmaWVsZCBidWZmZXIgY29udHJvbAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCAgc2V0X2ZpZWxkX2J1ZmZlcihGSUVMRCAgKmZpZWxkLCAgaW50ICBidWYsIGNvbnN0IGNoYXIKKyAgICAgICAqdmFsdWUpOworICAgICAgIGNoYXIgKmZpZWxkX2J1ZmZlcihjb25zdCBGSUVMRCAqZmllbGQsIGludCBidWZmZXIpOworICAgICAgIGludCBzZXRfZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCwgYm9vbCBzdGF0dXMpOworICAgICAgIGJvb2wgZmllbGRfc3RhdHVzKGNvbnN0IEZJRUxEICpmaWVsZCk7CisgICAgICAgaW50IHNldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgbWF4KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfZmllbGRfYnVmZmVyPC9TVFJPTkc+IHNldHMgdGhlIG51bWJlcmVkIGJ1ZmZlciAgb2YKKyAgICAgICB0aGUgIGdpdmVuICBmaWVsZCAgdG8gY29udGFpbiBhIGdpdmVuIHN0cmluZy4gIEJ1ZmZlciAwIGlzCisgICAgICAgdGhlIGRpc3BsYXllZCB2YWx1ZSBvZiB0aGUgZmllbGQ7IG90aGVyICBudW1iZXJlZCAgYnVmZmVycworICAgICAgIG1heSBiZSBhbGxvY2F0ZWQgYnkgYXBwbGljYXRpb25zIHRocm91Z2ggdGhlIDxTVFJPTkc+bmJ1ZjwvU1RST05HPiBhcmd1bWVudAorICAgICAgIG9mIChzZWUgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+KSBidXQgYXJlIG5vdCBtYW5pcHVsYXRlZCBieSB0aGUKKyAgICAgICBmb3JtcyAgbGlicmFyeS4gICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZpZWxkX2J1ZmZlcjwvU1RST05HPiAgcmV0dXJucyB0aGUKKyAgICAgICBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgIGJ1ZmZlciAgaGFzCisgICAgICAgYWx3YXlzICB0aGUgIGxlbmd0aCAgb2YgdGhlIGJ1ZmZlciwgdGhhdCBtZWFucyB0aGF0IGl0IG1heQorICAgICAgIHR5cGljYWxseSBjb250YWluIHRyYWlsaW5nIHNwYWNlcy4gSWYgeW91IGVudGVyZWQgIGxlYWRpbmcKKyAgICAgICBzcGFjZXMgIHRoZSAgYnVmZmVyIG1heSBhbHNvIGNvbnRhaW4gdGhlbS4gSWYgeW91IHdhbnQgdGhlCisgICAgICAgcmF3IGRhdGEsIHlvdSBtdXN0IHdyaXRlIHlvdXIgb3duIHJvdXRpbmUgdGhhdCBjb3BpZXMgIHRoZQorICAgICAgIHZhbHVlIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZW1vdmVzIHRoZSBsZWFkaW5nIGFuZCB0cmFpbC0KKyAgICAgICBpbmcgc3BhY2VzLiBQbGVhc2Ugbm90ZSBhbHNvLCB0aGF0ICBzdWJzZXF1ZW50ICBvcGVyYXRpb25zCisgICAgICAgb24gIHRoZSAgZm9ybSAgd2lsbCAgcHJvYmFibHkgIGNoYW5nZSAgdGhlICBjb250ZW50IG9mIHRoZQorICAgICAgIGJ1ZmZlci4gU28gZG8gbm90IHVzZSBpdCBmb3IgIGxvbmcgIHRlcm0gIHN0b3JhZ2UgIG9mICB0aGUKKyAgICAgICBlbnRlcmVkIGZvcm0gZGF0YS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2ZpZWxkX3N0YXR1czwvU1RST05HPiBzZXRzIHRoZSBhc3NvY2lhdGVkIHN0YXR1cworICAgICAgIGZsYWcgb2YgPEVNPmZpZWxkPC9FTT47IDxTVFJPTkc+ZmllbGRfc3RhdHVzPC9TVFJPTkc+IGdldHMgdGhlIGN1cnJlbnQgIHZhbHVlLiAgIFRoZQorICAgICAgIHN0YXR1cyAgZmxhZyAgaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSB3aGVuZXZlciB0aGUgZmllbGQKKyAgICAgICBjaGFuZ2VzLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X21heF9maWVsZDwvU1RST05HPiBzZXRzIHRoZSAgbWF4aW11bSAgc2l6ZSAgZm9yICBhCisgICAgICAgZHluYW1pYyAgZmllbGQuICAgQW4gIGFyZ3VtZW50ICBvZiAwIHR1cm5zIG9mZiBhbnkgbWF4aW11bQorICAgICAgIHNpemUgdGhyZXNob2xkIGZvciB0aGF0IGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5maWVsZF9idWZmZXI8L1NUUk9ORz4gZnVuY3Rpb24gcmV0dXJucyBOVUxMIG9uIGVycm9yLiAgSXQgIHNldHMKKyAgICAgICBlcnJubyBhY2NvcmRpbmcgdG8gdGhlaXIgc3VjY2VzczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIFRoZSA8U1RST05HPmZpZWxkX3N0YXR1czwvU1RST05HPiBmdW5jdGlvbiByZXR1cm5zIDxTVFJPTkc+VFJVRTwvU1RST05HPiBvciA8U1RST05HPkZBTFNFPC9TVFJPTkc+LgorCisgICAgICAgVGhlIHJlbWFpbmluZyByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IKKyAgICAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlCisKKyAgICAgICBXaGVuICBjb25maWd1cmVkIGZvciB3aWRlLWNoYXJhY3RlcnMsIDxTVFJPTkc+ZmllbGRfYnVmZmVyPC9TVFJPTkc+IHJldHVybnMKKyAgICAgICBhIHBvaW50ZXIgdG8gdGVtcG9yYXJ5IHN0b3JhZ2UgKGFsbG9jYXRlZCBhbmQgZnJlZWQgYnkgdGhlCisgICAgICAgbGlicmFyeSkuICAgVGhlICBhcHBsaWNhdGlvbiAgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIG1vZGlmeQorICAgICAgIHRoZSAgZGF0YS4gICBJdCAgd2lsbCAgYmUgIGZyZWVkICBvbiAgdGhlICBuZXh0ICBjYWxsICAgdG8KKyAgICAgICA8U1RST05HPmZpZWxkX2J1ZmZlcjwvU1RST05HPiB0byByZXR1cm4gdGhlIHNhbWUgYnVmZmVyLiAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfaW5mby4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfaW5mby4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OGZjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fZmllbGRfaW5mby4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxNzoxNDozMSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkX2luZm8gM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX2luZm8gM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfaW5mby4zeC5odG1sIj5mb3JtX2ZpZWxkX2luZm8oM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmZvcm1fZmllbGRfaW5mbygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX2luZm88L1NUUk9ORz4gLSByZXRyaWV2ZSBmaWVsZCBjaGFyYWN0ZXJpc3RpY3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgZmllbGRfaW5mbyhjb25zdCBGSUVMRCAqZmllbGQsIGludCAqcm93cywgaW50ICpjb2xzLAorICAgICAgICAgICAgICAgICAgICAgaW50ICpmcm93LCBpbnQgKmZjb2wsIGludCAqbnJvdywgaW50ICpuYnVmKTsKKyAgICAgICBpbnQgZHluYW1pY19maWVsZF9pbmZvKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50ICpyb3dzLCAgaW50CisgICAgICAgKmNvbHMsIGludCAqbWF4KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZpZWxkX2luZm88L1NUUk9ORz4gIHJldHVybnMgIHRoZSAgc2l6ZXMgIGFuZCAgb3RoZXIKKyAgICAgICBhdHRyaWJ1dGVzIHBhc3NlZCBpbiB0byB0aGUgZmllbGQgYXQgIGl0cyAgY3JlYXRpb24gIHRpbWUuCisgICAgICAgVGhlICBhdHRyaWJ1dGVzIGFyZTogaGVpZ2h0LCB3aWR0aCwgcm93IG9mIHVwcGVyLWxlZnQgY29yLQorICAgICAgIG5lciwgY29sdW1uIG9mIHVwcGVyLWxlZnQgY29ybmVyLCBudW1iZXIgb2ZmLXNjcmVlbiAgcm93cywKKyAgICAgICBhbmQgbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycy4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmR5bmFtaWNfZmllbGRfaW5mbzwvU1RST05HPiByZXR1cm5zIHRoZSBhY3R1YWwgc2l6ZSBvZgorICAgICAgIHRoZSBmaWVsZCwgYW5kIGl0cyBtYXhpbXVtIHBvc3NpYmxlIHNpemUuICAgSWYgIHRoZSAgZmllbGQKKyAgICAgICBoYXMgIG5vICBzaXplICBsaW1pdCwgIHRoZSBsb2NhdGlvbiBhZGRyZXNzZWQgYnkgdGhlIHRoaXJkCisgICAgICAgYXJndW1lbnQgd2lsbCBiZSBzZXQgdG8gMC4gIEEgZmllbGQgY2FuIGJlIG1hZGUgZHluYW1pYyBieQorICAgICAgIHR1cm5pbmcgb2ZmIHRoZSA8U1RST05HPk9fU1RBVElDPC9TVFJPTkc+IG9wdGlvbiB3aXRoIDxTVFJPTkc+ZmllbGRfb3B0c19vZmY8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvcgorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworICAgICAgIEEgIG51bGwgICh6ZXJvICBwb2ludGVyKSBpcyBhY2NlcHRlZCBmb3IgYW55IG9mIHRoZSByZXR1cm4KKyAgICAgICB2YWx1ZXMsIHRvIGlnbm9yZSB0aGF0ICB2YWx1ZS4gICBOb3QgIGFsbCAgaW1wbGVtZW50YXRpb25zCisgICAgICAgYWxsb3cgdGhpcywgZS5nLiwgU29sYXJpcyAyLjcgZG9lcyBub3QuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfaW5mby4zeC5odG1sIj5mb3JtX2ZpZWxkX2luZm8oM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3MDIwZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3guaHRtbApAQCAtMCwwICsxLDExOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF9qdXN0LjN4LHYgMS45IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZF9qdXN0IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9maWVsZF9qdXN0IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2p1c3QuM3guaHRtbCI+Zm9ybV9maWVsZF9qdXN0KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9maWVsZF9qdXN0PC9TVFJPTkc+IC0gcmV0cmlldmUgZmllbGQgY2hhcmFjdGVyaXN0aWNzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9maWVsZF9qdXN0KEZJRUxEICpmaWVsZCwgaW50IGp1c3RpZmljYXRpb24pOworICAgICAgIGludCBmaWVsZF9qdXN0KGNvbnN0IEZJRUxEICpmaWVsZCk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICAgZnVuY3Rpb24gICA8U1RST05HPnNldF9maWVsZF9qdXN0PC9TVFJPTkc+ICAgc2V0cyAgdGhlICBqdXN0aWZpY2F0aW9uCisgICAgICAgYXR0cmlidXRlIG9mIGEgZmllbGQ7IDxTVFJPTkc+ZmllbGRfanVzdDwvU1RST05HPiByZXR1cm5zIGEgZmllbGQncyAganVzdGktCisgICAgICAgZmljYXRpb24gYXR0cmlidXRlLiAgVGhlIGF0dHJpYnV0ZSBtYXkgYmUgb25lIG9mIE5PX0pVU1RJLQorICAgICAgIEZJQ0FUSU9OLCBKVVNUSUZZX1JJR0hULCBKVVNUSUZZX0xFRlQsIG9yICBKVVNUSUZZX0NFTlRFUi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPmZpZWxkX2p1c3Q8L1NUUk9ORz4gcmV0dXJucyBvbmUgb2Y6IE5PX0pVU1RJRklDQVRJT04sCisgICAgICAgSlVTVElGWV9SSUdIVCwgSlVTVElGWV9MRUZULCBvciBKVVNUSUZZX0NFTlRFUi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZF9qdXN0PC9TVFJPTkc+IHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IKKyAgICAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbCBiL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDI2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbApAQCAtMCwwICsxLDE1MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF9uZXcuM3gsdiAxLjE2IDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZF9uZXcgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX25ldyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+Zm9ybV9maWVsZF9uZXcoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX25ldzwvU1RST05HPiAtIGNyZWF0ZSBhbmQgZGVzdHJveSBmb3JtIGZpZWxkcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIEZJRUxEICpuZXdfZmllbGQoaW50IGhlaWdodCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvcHJvdywgaW50IGxlZnRjb2wsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2NyZWVuLCBpbnQgbmJ1ZmZlcnMpOworICAgICAgIEZJRUxEICpkdXBfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgdG9wcm93LCBpbnQgbGVmdGNvbCk7CisgICAgICAgRklFTEQgKmxpbmtfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgdG9wcm93LCBpbnQgbGVmdGNvbCk7CisgICAgICAgaW50IGZyZWVfZmllbGQoRklFTEQgKmZpZWxkKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X2ZpZWxkPC9TVFJPTkc+IGFsbG9jYXRlcyBhIG5ldyBmaWVsZCBhbmQgaW5pdGlhbC0KKyAgICAgICBpemVzIGl0IGZyb20gdGhlIHBhcmFtZXRlcnMgZ2l2ZW46IGhlaWdodCwgd2lkdGgsICByb3cgIG9mCisgICAgICAgdXBwZXItbGVmdCAgY29ybmVyLCAgY29sdW1uICBvZiAgdXBwZXItbGVmdCBjb3JuZXIsIG51bWJlcgorICAgICAgIG9mZi1zY3JlZW4gcm93cywgYW5kIG51bWJlciBvZiBhZGRpdGlvbmFsIHdvcmtpbmcgYnVmZmVycy4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+ZHVwX2ZpZWxkPC9TVFJPTkc+IGR1cGxpY2F0ZXMgYSBmaWVsZCBhdCBhIG5ldyBsb2NhLQorICAgICAgIHRpb24uICBNb3N0IGF0dHJpYnV0ZXMgKGluY2x1ZGluZyBjdXJyZW50IGNvbnRlbnRzLCAgc2l6ZSwKKyAgICAgICB2YWxpZGF0aW9uICB0eXBlLCBidWZmZXIgY291bnQsIGdyb3d0aCB0aHJlc2hvbGQsIGp1c3RpZmktCisgICAgICAgY2F0aW9uLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCAgcGFkICBjaGFyYWN0ZXIsICBvcHRpb25zLAorICAgICAgIGFuZCAgdXNlciBwb2ludGVyKSBhcmUgY29waWVkLiAgRmllbGQgc3RhdHVzIGFuZCB0aGUgZmllbGQKKyAgICAgICBwYWdlIGJpdCBhcmUgbm90IGNvcGllZC4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmxpbmtfZmllbGQ8L1NUUk9ORz4gYWN0cyBsaWtlIDxTVFJPTkc+ZHVwX2ZpZWxkPC9TVFJPTkc+LCBidXQgIHRoZSAgbmV3CisgICAgICAgZmllbGQgIHNoYXJlcyAgYnVmZmVycyB3aXRoIGl0cyBwYXJlbnQuICBBdHRyaWJ1dGUgZGF0YSBpcworICAgICAgIHNlcGFyYXRlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9maWVsZDwvU1RST05HPiAgZGUtYWxsb2NhdGVzICBzdG9yYWdlICBhc3NvY2lhdGVkCisgICAgICAgd2l0aCBhIGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24sIDxTVFJPTkc+bmV3X2ZpZWxkPC9TVFJPTkc+LCA8U1RST05HPmR1cF9maWVsZDwvU1RST05HPiwgPFNUUk9ORz5saW5rX2ZpZWxkPC9TVFJPTkc+IHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4KKyAgICAgICBvbiBlcnJvci4gIFRoZXkgc2V0IGVycm5vIGFjY29yZGluZyB0byB0aGVpciBzdWNjZXNzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZyZWVfZmllbGQ8L1NUUk9ORz4gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIGZpZWxkIGlzIGNvbm5lY3RlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgSXQgbWF5IGJlIHVud2lzZSB0byBjb3VudCBvbiB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgIGNvcGllZAorICAgICAgIGJ5ICA8U1RST05HPmR1cF9maWVsZDwvU1RST05HPiAgYmVpbmcgIHBvcnRhYmxlOyB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeQorICAgICAgIGRvY3VtZW50cyBhcmUgbm90IHZlcnkgZXhwbGljaXQgYWJvdXQgd2hhdCBnZXRzIGNvcGllZCBhbmQKKyAgICAgICB3aGF0IGRvZXMgbm90LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+Zm9ybV9maWVsZF9uZXcoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlhMTMyMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbApAQCAtMCwwICsxLDE2NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF9vcHRzLjN4LHYgMS4xMyAyMDA3LzAyLzI0IDE3OjM0OjI3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZmllbGRfb3B0cyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fZmllbGRfb3B0cyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fZmllbGRfb3B0czwvU1RST05HPiAtIHNldCBhbmQgZ2V0IGZpZWxkIG9wdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2ZpZWxkX29wdHMoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBmaWVsZF9vcHRzX29uKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKyAgICAgICBpbnQgZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpOworICAgICAgIEZpZWxkX09wdGlvbnMgZmllbGRfb3B0cyhjb25zdCBGSUVMRCAqZmllbGQpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2ZpZWxkX29wdHM8L1NUUk9ORz4gIHNldHMgIGFsbCB0aGUgZ2l2ZW4gZmllbGQncworICAgICAgIG9wdGlvbiBiaXRzIChmaWVsZCAgb3B0aW9uICBiaXRzICBtYXkgIGJlICBsb2dpY2FsbHktT1InZWQKKyAgICAgICB0b2dldGhlcikuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF9vcHRzX29uPC9TVFJPTkc+IHR1cm5zIG9uIHRoZSBnaXZlbiBvcHRpb24gYml0cywKKyAgICAgICBhbmQgbGVhdmVzIG90aGVycyBhbG9uZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZpZWxkX29wdHNfb2ZmPC9TVFJPTkc+IHR1cm5zICBvZmYgIHRoZSAgZ2l2ZW4gIG9wdGlvbgorICAgICAgIGJpdHMsIGFuZCBsZWF2ZXMgb3RoZXJzIGFsb25lLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZmllbGRfb3B0czwvU1RST05HPiByZXR1cm5zIHRoZSBmaWVsZCdzIGN1cnJlbnQgb3B0aW9uCisgICAgICAgYml0cy4KKworICAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZGVmaW5lZCAoYWxsIGFyZSBvbiBieSBkZWZhdWx0KToKKworICAgICAgIE9fVklTSUJMRQorICAgICAgICAgICAgVGhlICBmaWVsZCBpcyBkaXNwbGF5ZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBvZmYsIGRpcy0KKyAgICAgICAgICAgIHBsYXkgb2YgdGhlIGZpZWxkIGlzIHN1cHByZXNzZWQuCisKKyAgICAgICBPX0FDVElWRQorICAgICAgICAgICAgVGhlIGZpZWxkIGlzICB2aXNpdGVkICBkdXJpbmcgIHByb2Nlc3NpbmcuICAgSWYgIHRoaXMKKyAgICAgICAgICAgIG9wdGlvbiAgaXMgIG9mZiwgIHRoZSAgZmllbGQgd2lsbCBub3QgYmUgcmVhY2hhYmxlIGJ5CisgICAgICAgICAgICBuYXZpZ2F0aW9uIGtleXMuICBQbGVhc2UgIG5vdGljZSAgdGhhdCAgYW4gIGludmlzaWJsZQorICAgICAgICAgICAgZmllbGQgYXBwZWFycyB0byBiZSBpbmFjdGl2ZSBhbHNvLgorCisgICAgICAgT19QVUJMSUMKKyAgICAgICAgICAgIFRoZSAgZmllbGQgY29udGVudHMgYXJlIGRpc3BsYXllZCBhcyBkYXRhIGlzIGVudGVyZWQuCisKKyAgICAgICBPX0VESVQKKyAgICAgICAgICAgIFRoZSBmaWVsZCBjYW4gYmUgZWRpdGVkLgorCisgICAgICAgT19XUkFQCisgICAgICAgICAgICBXb3JkcyB0aGF0IGRvIG5vdCBmaXQgb24gYSBsaW5lIGFyZSAgd3JhcHBlZCAgdG8gIHRoZQorICAgICAgICAgICAgbmV4dCBsaW5lLiAgV29yZHMgYXJlIGJsYW5rLXNlcGFyYXRlZC4KKworICAgICAgIE9fQkxBTksKKyAgICAgICAgICAgIFRoZSAgZmllbGQgaXMgY2xlYXJlZCB3aGVuZXZlciBhIGNoYXJhY3RlciBpcyBlbnRlcmVkCisgICAgICAgICAgICBhdCB0aGUgZmlyc3QgcG9zaXRpb24uCisKKyAgICAgICBPX0FVVE9TS0lQCisgICAgICAgICAgICBTa2lwIHRvIHRoZSBuZXh0IGZpZWxkIHdoZW4gdGhpcyBvbmUgZmlsbHMuCisKKyAgICAgICBPX05VTExPSworICAgICAgICAgICAgQWxsb3cgYSBibGFuayBmaWVsZC4KKworICAgICAgIE9fU1RBVElDCisgICAgICAgICAgICBGaWVsZCBidWZmZXJzIGFyZSBmaXhlZCAgdG8gIGZpZWxkJ3MgIG9yaWdpbmFsICBzaXplLgorICAgICAgICAgICAgVHVybiB0aGlzIG9wdGlvbiBvZmYgdG8gY3JlYXRlIGEgZHluYW1pYyBmaWVsZC4KKworICAgICAgIE9fUEFTU09LCisgICAgICAgICAgICBWYWxpZGF0ZSBmaWVsZCBvbmx5IGlmIG1vZGlmaWVkIGJ5IHVzZXIuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEV4Y2VwdCAgZm9yICA8U1RST05HPmZpZWxkX29wdHM8L1NUUk9ORz4sICBlYWNoICByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZQorICAgICAgIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9DVVJSRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZmllbGQgaXMgdGhlIGN1cnJlbnQgZmllbGQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworICAgICAgIDxTVFJPTkc+Tk9URVM8L1NUUk9ORz4gIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhNmFkNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF91c2VycHRyLjN4LHYgMS44IDIwMDYvMTEvMDQgMTg6MDQ6MzcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZF91c2VycHRyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9maWVsZF91c2VycHRyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5mb3JtX2ZpZWxkX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9maWVsZF91c2VycHRyPC9TVFJPTkc+ICAtICBhc3NvY2lhdGUgIGFwcGxpY2F0aW9uICBkYXRhIHdpdGggYQorICAgICAgIGZvcm0gZmllbGQKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2ZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkLCB2b2lkKnVzZXJwdHIpOworICAgICAgIHZvaWQgKmZpZWxkX3VzZXJwdHIoY29uc3QgRklFTEQgKmZpZWxkKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBFdmVyeSBmb3JtIGZpZWxkIGhhcyBhIGZpZWxkIHRoYXQgIGNhbiAgYmUgIHVzZWQgIHRvICBob2xkCisgICAgICAgYXBwbGljYXRpb24tc3BlY2lmaWMgIGRhdGEgICh0aGF0IGlzLCB0aGUgZm9ybS1kcml2ZXIgY29kZQorICAgICAgIGxlYXZlcyBpdCBhbG9uZSkuICBUaGVzZSBmdW5jdGlvbnMgZ2V0IGFuZCBzZXQgdGhhdCBmaWVsZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZmllbGRfdXNlcnB0cjwvU1RST05HPiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlCisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+KS4gIEl0IGRvZXMgbm90IHNldCBlcnJuby4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZF91c2VycHRyPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5FX09LPC9TVFJPTkc+IChzdWNjZXNzKS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgVGhlIHVzZXIgcG9pbnRlciBpcyBhIHZvaWQgcG9pbnRlci4gIFdlIGNob3NlIG5vdCB0byBsZWF2ZQorICAgICAgIGl0IGFzIGEgY2hhciBwb2ludGVyIGZvciBTVnI0IGNvbXBhdGliaWxpdHkuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5mb3JtX2ZpZWxkX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyODAzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbApAQCAtMCwwICsxLDE5NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gsdiAxLjE2IDIwMDYvMTIvMjQgMTY6MDg6MDggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZF92YWxpZGF0aW9uIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9maWVsZF92YWxpZGF0aW9uIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+Zm9ybV9maWVsZF92YWxpZGF0aW9uKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sIj5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9maWVsZF92YWxpZGF0aW9uPC9TVFJPTkc+IC0gZGF0YSB0eXBlIHZhbGlkYXRpb24gZm9yIGZpZWxkcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsIEZJRUxEVFlQRSAqdHlwZSwgLi4uKTsKKyAgICAgICBGSUVMRFRZUEUgKmZpZWxkX3R5cGUoY29uc3QgRklFTEQgKmZpZWxkKTsKKyAgICAgICB2b2lkICpmaWVsZF9hcmcoY29uc3QgRklFTEQgKmZpZWxkKTsKKworICAgICAgIEZJRUxEVFlQRSAqVFlQRV9BTE5VTTsKKyAgICAgICBGSUVMRFRZUEUgKlRZUEVfQUxQSEE7CisgICAgICAgRklFTERUWVBFICpUWVBFX0VOVU07CisgICAgICAgRklFTERUWVBFICpUWVBFX0lOVEVHRVI7CisgICAgICAgRklFTERUWVBFICpUWVBFX05VTUVSSUM7CisgICAgICAgRklFTERUWVBFICpUWVBFX1JFR0VYUDsKKyAgICAgICBGSUVMRFRZUEUgKlRZUEVfSVBWNDsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9maWVsZF90eXBlPC9TVFJPTkc+ICBkZWNsYXJlcyAgYSBkYXRhIHR5cGUgZm9yIGEKKyAgICAgICBnaXZlbiBmb3JtIGZpZWxkLiAgVGhpcyBpcyB0aGUgdHlwZSBjaGVja2VkIGJ5ICB2YWxpZGF0aW9uCisgICAgICAgZnVuY3Rpb25zLiAgVGhlIHByZWRlZmluZWQgdHlwZXMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICBUWVBFX0FMTlVNCisgICAgICAgICAgICBBbHBoYW51bWVyaWMgIGRhdGEuICBSZXF1aXJlcyBhIHRoaXJkIDxTVFJPTkc+aW50PC9TVFJPTkc+IGFyZ3VtZW50LCBhCisgICAgICAgICAgICBtaW5pbXVtIGZpZWxkIHdpZHRoLgorCisgICAgICAgVFlQRV9BTFBIQQorICAgICAgICAgICAgQ2hhcmFjdGVyIGRhdGEuICBSZXF1aXJlcyBhICB0aGlyZCAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIGFyZ3VtZW50LCAgYQorICAgICAgICAgICAgbWluaW11bSBmaWVsZCB3aWR0aC4KKworICAgICAgIFRZUEVfRU5VTQorICAgICAgICAgICAgQWNjZXB0IG9uZSBvZiBhIHNwZWNpZmllZCBzZXQgb2Ygc3RyaW5ncy4gIFJlcXVpcmVzIGEKKyAgICAgICAgICAgIHRoaXJkIDxTVFJPTkc+KGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qKik8L1NUUk9ORz4gYXJndW1lbnQgcG9pbnRpbmcgdG8gYSBzdHJpbmcgbGlzdDsgYQorICAgICAgICAgICAgZm91cnRoICA8U1RST05HPmludDwvU1RST05HPiBmbGFnIGFyZ3VtZW50IHRvIGVuYWJsZSBjYXNlLXNlbnNpdGl2aXR5OworICAgICAgICAgICAgYW5kIGEgZmlmdGggPFNUUk9ORz5pbnQ8L1NUUk9ORz4gZmxhZyBhcmd1bWVudCAgc3BlY2lmeWluZyAgd2hldGhlciAgYQorICAgICAgICAgICAgcGFydGlhbCAgbWF0Y2ggIG11c3QgYmUgYSB1bmlxdWUgb25lIChpZiB0aGlzIGZsYWcgaXMKKyAgICAgICAgICAgIG9mZiwgYSBwcmVmaXggbWF0Y2hlcyB0aGUgZmlyc3Qgb2YgYW55ICBzZXQgIG9mICBtb3JlCisgICAgICAgICAgICB0aGFuICBvbmUgIGxpc3QgIGVsZW1lbnRzICB3aXRoICB0aGF0IHByZWZpeCkuIFBsZWFzZQorICAgICAgICAgICAgbm90aWNlIHRoYXQgdGhlIHN0cmluZyBsaXN0IGlzICBub3QgIGNvcGllZCwgIG9ubHkgIGEKKyAgICAgICAgICAgIHJlZmVyZW5jZSB0byBpdCBpcyBzdG9yZWQgaW4gdGhlIGZpZWxkLiBTbyB5b3Ugc2hvdWxkCisgICAgICAgICAgICBhdm9pZCB1c2luZyBhIGxpc3QgdGhhdCBsaXZlcyBpbiBhdXRvbWF0aWMgIHZhcmlhYmxlcworICAgICAgICAgICAgb24gdGhlIHN0YWNrLgorCisgICAgICAgVFlQRV9JTlRFR0VSCisgICAgICAgICAgICBJbnRlZ2VyICBkYXRhLCAgcGFyc2FibGUgIHRvICBhbiAgaW50ZWdlciBieSA8U1RST05HPmF0b2koMyk8L1NUUk9ORz4uCisgICAgICAgICAgICBSZXF1aXJlcyBhIHRoaXJkIDxTVFJPTkc+aW50PC9TVFJPTkc+IGFyZ3VtZW50IGNvbnRyb2xsaW5nIHRoZSAgcHJlY2ktCisgICAgICAgICAgICBzaW9uLCAgYSAgZm91cnRoICA8U1RST05HPmxvbmc8L1NUUk9ORz4gIGFyZ3VtZW50IGNvbnN0cmFpbmluZyBtaW5pbXVtCisgICAgICAgICAgICB2YWx1ZSwgYW5kIGEgZmlmdGggPFNUUk9ORz5sb25nPC9TVFJPTkc+IGNvbnN0cmFpbmluZyAgbWF4aW11bSAgdmFsdWUuCisgICAgICAgICAgICBJZiAgdGhlICBtYXhpbXVtICB2YWx1ZSAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICAgICAgbWluaW11bSB2YWx1ZSwgdGhlIHJhbmdlIGlzIHNpbXBseSBpZ25vcmVkLiBPbiByZXR1cm4KKyAgICAgICAgICAgIHRoZSBmaWVsZCBidWZmZXIgaXMgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgPFNUUk9ORz5wcmludGY8L1NUUk9ORz4KKyAgICAgICAgICAgIGZvcm1hdCAgc3BlY2lmaWNhdGlvbiAgIi4qbGQiLCAgd2hlcmUgIHRoZSAgICcqJyAgIGlzCisgICAgICAgICAgICByZXBsYWNlZCAgYnkgIHRoZSBwcmVjaXNpb24gYXJndW1lbnQuICBGb3IgZGV0YWlscyBvZgorICAgICAgICAgICAgdGhlIHByZWNpc2lvbiBoYW5kbGluZyBzZWUgPFNUUk9ORz5wcmludGYnczwvU1RST05HPiBtYW4tcGFnZS4KKworICAgICAgIFRZUEVfTlVNRVJJQworICAgICAgICAgICAgTnVtZXJpYyAgZGF0YSAgKG1heSAgaGF2ZSAgYSAgIGRlY2ltYWwtcG9pbnQgICBwYXJ0KS4KKyAgICAgICAgICAgIFJlcXVpcmVzICBhIHRoaXJkIDxTVFJPTkc+aW50PC9TVFJPTkc+IGFyZ3VtZW50IGNvbnRyb2xsaW5nIHRoZSBwcmVjaS0KKyAgICAgICAgICAgIHNpb24sIGEgZm91cnRoIDxTVFJPTkc+ZG91YmxlPC9TVFJPTkc+IGFyZ3VtZW50ICBjb25zdHJhaW5pbmcgIG1pbmltdW0KKyAgICAgICAgICAgIHZhbHVlLCBhbmQgYSBmaWZ0aCA8U1RST05HPmRvdWJsZTwvU1RST05HPiBjb25zdHJhaW5pbmcgbWF4aW11bSB2YWx1ZS4KKyAgICAgICAgICAgIElmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGxvY2FsZXMsICB0aGUgIGRlY2ltYWwgIHBvaW50CisgICAgICAgICAgICBjaGFyYWN0ZXIgIHRvICBiZSAgdXNlZCAgbXVzdCBiZSB0aGUgb25lIHNwZWNpZmllZCBieQorICAgICAgICAgICAgeW91ciBsb2NhbGUuICBJZiB0aGUgbWF4aW11bSB2YWx1ZSBpcyAgbGVzcyAgdGhhbiAgb3IKKyAgICAgICAgICAgIGVxdWFsICB0byAgdGhlICBtaW5pbXVtICB2YWx1ZSwgIHRoZSAgcmFuZ2UgaXMgc2ltcGx5CisgICAgICAgICAgICBpZ25vcmVkLiBPbiByZXR1cm4gIHRoZSAgZmllbGQgIGJ1ZmZlciAgaXMgIGZvcm1hdHRlZAorICAgICAgICAgICAgYWNjb3JkaW5nICB0byAgdGhlIDxTVFJPTkc+cHJpbnRmPC9TVFJPTkc+IGZvcm1hdCBzcGVjaWZpY2F0aW9uICIuKmYiLAorICAgICAgICAgICAgd2hlcmUgdGhlICcqJyBpcyByZXBsYWNlZCBieSB0aGUgcHJlY2lzaW9uICBhcmd1bWVudC4KKyAgICAgICAgICAgIEZvciAgZGV0YWlscyAgb2YgIHRoZSBwcmVjaXNpb24gaGFuZGxpbmcgc2VlIDxTVFJPTkc+cHJpbnRmJ3M8L1NUUk9ORz4KKyAgICAgICAgICAgIG1hbi1wYWdlLgorCisgICAgICAgVFlQRV9SRUdFWFAKKyAgICAgICAgICAgIFJlZ3VsYXIgZXhwcmVzc2lvbiBkYXRhLiAgUmVxdWlyZXMgYSByZWd1bGFyICBleHByZXMtCisgICAgICAgICAgICBzaW9uICA8U1RST05HPihjaGFyPC9TVFJPTkc+ICA8U1RST05HPiopPC9TVFJPTkc+ICB0aGlyZCBhcmd1bWVudDsgdGhlIGRhdGEgaXMgdmFsaWQgaWYKKyAgICAgICAgICAgIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcyBpdC4gICBSZWd1bGFyICBleHByZXMtCisgICAgICAgICAgICBzaW9ucyAgYXJlICBpbiAgdGhlICBmb3JtYXQgIG9mICA8U1RST05HPnJlZ2NvbXA8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cmVnZXhlYzwvU1RST05HPi4KKyAgICAgICAgICAgIFBsZWFzZSBub3RpY2UgdGhhdCB0aGUgcmVndWxhciBleHByZXNzaW9uIG11c3QgIG1hdGNoCisgICAgICAgICAgICB0aGUgIHdob2xlICBmaWVsZC4gIElmICB5b3UgaGF2ZSBmb3IgZXhhbXBsZSBhbiBlaWdodAorICAgICAgICAgICAgY2hhcmFjdGVyIHdpZGUgZmllbGQsIGEgcmVndWxhciBleHByZXNzaW9uICJeWzAtOV0qJCIKKyAgICAgICAgICAgIGFsd2F5cyAgbWVhbnMgIHRoYXQgIHlvdSBoYXZlIHRvIGZpbGwgYWxsIGVpZ2h0IHBvc2ktCisgICAgICAgICAgICB0aW9ucyB3aXRoIGRpZ2l0cy4gSWYgeW91IHdhbnQgdG8gYWxsb3cgZmV3ZXIgZGlnaXRzLAorICAgICAgICAgICAgeW91ICBtYXkgIHVzZSAgZm9yIGV4YW1wbGUgIl5bMC05XSogKiQiIHdoaWNoIGlzIGdvb2QKKyAgICAgICAgICAgIGZvciB0cmFpbGluZyBzcGFjZXMgKHVwIHRvIGFuICBlbXB0eSAgZmllbGQpLCAgb3IgICJeCisgICAgICAgICAgICAqWzAtOV0qICAqJCIgIHdoaWNoICBpcyBnb29kIGZvciBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgICAgICAgICAgc3BhY2VzIGFyb3VuZCB0aGUgZGlnaXRzLgorCisgICAgICAgVFlQRV9JUFY0CisgICAgICAgICAgICBBbiBJbnRlcm5ldCBQcm90b2NvbCBWZXJzaW9uIDQgYWRkcmVzcy4gVGhpcyByZXF1aXJlcworICAgICAgICAgICAgbm8gIGFkZGl0aW9uYWwgYXJndW1lbnQuIEl0IGlzIGNoZWNrZWQgd2hldGhlciBvciBub3QKKyAgICAgICAgICAgIHRoZSBidWZmZXIgaGFzIHRoZSBmb3JtIGEuYi5jLmQsIHdoZXJlICBhLGIsYyAgYW5kICBkCisgICAgICAgICAgICBhcmUgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDI1NS4gVHJhaWxpbmcgYmxhbmtzIGluIHRoZQorICAgICAgICAgICAgYnVmZmVyIGFyZSBpZ25vcmVkLiBUaGUgYWRkcmVzcyBpdHNlbGYgaXMgIG5vdCAgdmFsaS0KKyAgICAgICAgICAgIGRhdGVkLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gbmN1cnNlcyBleHRlbnNpb24uCisgICAgICAgICAgICBUaGlzIGZpZWxkIHR5cGUgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW4gb3RoZXIgIGN1cnNlcworICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgSXQgIGlzICBwb3NzaWJsZSAgdG8gIHNldCAgdXAgbmV3IHByb2dyYW1tZXItZGVmaW5lZCBmaWVsZAorICAgICAgIHR5cGVzLiAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbnMgPFNUUk9ORz5maWVsZF90eXBlPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+ZmllbGRfYXJnPC9TVFJPTkc+ICByZXR1cm4gIDxTVFJPTkc+TlVMTDwvU1RST05HPiAgb24KKyAgICAgICBlcnJvci4gVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkX3R5cGU8L1NUUk9ORz4gcmV0dXJucyBvbmUgb2YgdGhlIGZvbC0KKyAgICAgICBsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwiPmZvcm1fZmllbGRfdmFsaWRhdGlvbigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkdHlwZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGR0eXBlLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkYWI0MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkdHlwZS4zeC5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkdHlwZS4zeCx2IDEuMTQgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkdHlwZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fZmllbGR0eXBlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkdHlwZS4zeC5odG1sIj5mb3JtX2ZpZWxkdHlwZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fZmllbGR0eXBlPC9TVFJPTkc+IC0gZGVmaW5lIHZhbGlkYXRpb24tZmllbGQgdHlwZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoCisgICAgICAgICAgIGJvb2wgKCogY29uc3QgZmllbGRfY2hlY2spKEZJRUxEICosIGNvbnN0IHZvaWQgKiksCisgICAgICAgICAgIGJvb2wgKCogY29uc3QgY2hhcl9jaGVjaykoaW50LCBjb25zdCB2b2lkICopKTsKKyAgICAgICBpbnQgZnJlZV9maWVsZHR5cGUoRklFTERUWVBFICpmaWVsZHR5cGUpOworICAgICAgIGludCBzZXRfZmllbGR0eXBlX2FyZygKKyAgICAgICAgICAgRklFTERUWVBFICpmaWVsZHR5cGUsCisgICAgICAgICAgIHZvaWQgKigqIGNvbnN0IG1ha2VfYXJnKSh2YV9saXN0ICopLAorICAgICAgICAgICB2b2lkICooKiBjb25zdCBjb3B5X2FyZykoY29uc3Qgdm9pZCAqKSwKKyAgICAgICAgICAgdm9pZCAgKCogY29uc3QgZnJlZV9hcmcpKHZvaWQgKikpOworICAgICAgIGludCBzZXRfZmllbGR0eXBlX2Nob2ljZSgKKyAgICAgICAgICAgRklFTERUWVBFICpmaWVsZHR5cGUsCisgICAgICAgICAgIGJvb2wgKCogY29uc3QgbmV4dF9jaG9pY2UpKEZJRUxEICosIGNvbnN0IHZvaWQgKiksCisgICAgICAgICAgIGJvb2wgKCogY29uc3QgcHJldl9jaG9pY2UpKEZJRUxEICosIGNvbnN0IHZvaWQgKikpOworICAgICAgIEZJRUxEVFlQRSAqbGlua19maWVsZHR5cGUoRklFTERUWVBFICp0eXBlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqdHlwZTIpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm5ld19maWVsZHR5cGU8L1NUUk9ORz4gY3JlYXRlcyBhIG5ldyBmaWVsZCB0eXBlIHVzYWJsZQorICAgICAgIGZvciBkYXRhIHZhbGlkYXRpb24uICBZb3Ugc3VwcGx5IGl0ICB3aXRoICA8RU0+ZmllbGQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jaGVjazwvRU0+LCAgYQorICAgICAgIHByZWRpY2F0ZSAgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGFuIGVudGVyZWQgZGF0YSBzdHJpbmcKKyAgICAgICB3aGVuZXZlciB0aGUgdXNlciBhdHRlbXB0cyB0byBsZWF2ZSBhIGZpZWxkLiAgIFRoZSAgKEZJRUxECisgICAgICAgKikgIGFyZ3VtZW50ICBpcyBwYXNzZWQgaW4gc28gdGhlIHZhbGlkYXRpb24gcHJlZGljYXRlIGNhbgorICAgICAgIHNlZSB0aGUgZmllbGQncyBidWZmZXIsIHNpemVzIGFuZCAgb3RoZXIgIGF0dHJpYnV0ZXM7ICB0aGUKKyAgICAgICBzZWNvbmQgIGFyZ3VtZW50ICBpcyAgYW4gIGFyZ3VtZW50LWJsb2NrICBzdHJ1Y3R1cmUsIGFib3V0CisgICAgICAgd2hpY2ggbW9yZSBiZWxvdy4KKworICAgICAgIFlvdSBhbHNvIHN1cHBseSA8U1RST05HPm5ld19maWVsZHR5cGU8L1NUUk9ORz4gd2l0aCA8RU0+Y2hhcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNoZWNrPC9FTT4sIGEgIGZ1bmN0aW9uCisgICAgICAgdG8gIHZhbGlkYXRlIGlucHV0IGNoYXJhY3RlcnMgYXMgdGhleSBhcmUgZW50ZXJlZDsgaXQgd2lsbAorICAgICAgIGJlIHBhc3NlZCB0aGUgY2hhcmFjdGVyIHRvIGJlIGNoZWNrZWQgYW5kIGEgcG9pbnRlciB0byAgYW4KKyAgICAgICBhcmd1bWVudC1ibG9jayBzdHJ1Y3R1cmUuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9maWVsZHR5cGU8L1NUUk9ORz4gZnJlZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBmb3IKKyAgICAgICBhIGdpdmVuIHZhbGlkYXRpb24gdHlwZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZHR5cGVfYXJnPC9TVFJPTkc+IGFzc29jaWF0ZXMgIHRocmVlICBzdG9yYWdlLQorICAgICAgIG1hbmFnZW1lbnQgIGZ1bmN0aW9ucyAgd2l0aCAgYSAgZmllbGQgIHR5cGUuICBUaGUgPEVNPm1ha2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5hcmc8L0VNPgorICAgICAgIGZ1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgYXBwbGllZCB0byB0aGUgbGlzdCBvZiBhcmd1bWVudHMKKyAgICAgICB5b3UgIGdpdmUgIDxTVFJPTkc+c2V0X2ZpZWxkX3R5cGU8L1NUUk9ORz4gIHdoZW4gIGF0dGFjaGluZyB2YWxpZGF0aW9uIHRvIGEKKyAgICAgICBmaWVsZDsgaXRzIGpvYiBpcyB0byBidW5kbGUgdGhlc2UgaW50byBhbiBhbGxvY2F0ZWQgIGFyZ3UtCisgICAgICAgbWVudC1ibG9jayAgb2JqZWN0IHdoaWNoIGNhbiBsYXRlciBiZSBwYXNzZWQgdG8gdmFsaWRhdGlvbgorICAgICAgIHByZWRpY2F0ZWQuICBUaGUgb3RoZXIgdHdvIGhvb2sgYXJndW1lbnRzIHNob3VsZCBjb3B5ICBhbmQKKyAgICAgICBmcmVlICBhcmd1bWVudC1ibG9jayBzdHJ1Y3R1cmVzLiAgVGhleSB3aWxsIGJlIHVzZWQgYnkgdGhlCisgICAgICAgZm9ybXMtZHJpdmVyIGNvZGUuICBZb3UgbXVzdCBzdXBwbHkgdGhlIDxFTT5tYWtlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+YXJnPC9FTT4gZnVuY3Rpb24sCisgICAgICAgdGhlICBvdGhlciB0d28gYXJlIG9wdGlvbmFsLCB5b3UgbWF5IHN1cHBseSBOVUxMIGZvciB0aGVtLgorICAgICAgIEluIHRoaXMgY2FzZSBpdCBpcyBhc3N1bWVkIHRoYXQgPEVNPm1ha2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5hcmc8L0VNPiBkb2VzIG5vdCBhbGxvY2F0ZQorICAgICAgIG1lbW9yeSAgYnV0IHNpbXBseSBsb2FkcyB0aGUgYXJndW1lbnQgaW50byBhIHNpbmdsZSBzY2FsYXIKKyAgICAgICB2YWx1ZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmxpbmtfZmllbGR0eXBlPC9TVFJPTkc+IGNyZWF0ZXMgYSBuZXcgZmllbGQgdHlwZSAgZnJvbQorICAgICAgIHRoZSAgdHdvICBnaXZlbiAgdHlwZXMuICAgVGhleSBhcmUgY29ubmVjdGVkIGJ5IGFuIGxvZ2ljYWwKKyAgICAgICAnT1InLgorCisgICAgICAgVGhlICAgZm9ybSAgICBkcml2ZXIgICAgcmVxdWVzdHMgICAgPFNUUk9ORz5SRVFfTkVYVF9DSE9JQ0U8L1NUUk9ORz4gICAgYW5kCisgICAgICAgPFNUUk9ORz5SRVFfUFJFVl9DSE9JQ0U8L1NUUk9ORz4gYXNzdW1lIHRoYXQgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBhIGZpZWxkCisgICAgICAgZm9ybSBhbiBvcmRlcmVkIHNldCwgYW5kIHByb3ZpZGUgdGhlIGZvcm1zIHVzZXIgd2l0aCBhIHdheQorICAgICAgIHRvICBtb3ZlICB0aHJvdWdoIHRoZSBzZXQuICBUaGUgPFNUUk9ORz5zZXRfZmllbGR0eXBlX2Nob2ljZTwvU1RST05HPiBmdW5jLQorICAgICAgIHRpb24gYWxsb3dzIGZvcm1zICBwcm9ncmFtbWVycyAgdG8gIGRlZmluZSAgc3VjY2Vzc29yICBhbmQKKyAgICAgICBwcmVkZWNlc3NvciBmdW5jdGlvbnMgZm9yIHRoZSBmaWVsZCB0eXBlLiAgVGhlc2UgZnVuY3Rpb25zCisgICAgICAgdGFrZSB0aGUgZmllbGQgcG9pbnRlciBhbmQgYW4gYXJndW1lbnQtYmxvY2sgc3RydWN0dXJlICBhcworICAgICAgIGFyZ3VtZW50cy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlICBwb2ludGVyLXZhbHVlZCAgcm91dGluZXMgIHJldHVybiBOVUxMIG9uIGVycm9yLiAgVGhleQorICAgICAgIHNldCBlcnJubyBhY2NvcmRpbmcgdG8gdGhlaXIgc3VjY2VzczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCwgZS5nLiwgbWFsbG9jIGZhaWx1cmUuCisKKyAgICAgICBUaGUgIGludGVnZXItdmFsdWVkICByb3V0aW5lcyAgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICAgY29kZXMgb24gZXJyb3I6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBmb3JtLgorCisgICAgICAgPFNUUk9ORz5FX0NVUlJFTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmaWVsZCBpcyB0aGUgY3VycmVudCBmaWVsZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworICAgICAgIEFsbCBvZiB0aGUgPFNUUk9ORz4oY2hhcjwvU1RST05HPiA8U1RST05HPiopPC9TVFJPTkc+IGFyZ3VtZW50cyBvZiAgdGhlc2UgIGZ1bmN0aW9ucyAgc2hvdWxkCisgICAgICAgYWN0dWFsbHkgIGJlIDxTVFJPTkc+KHZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qKTwvU1RST05HPi4gIFRoZSB0eXBlIGhhcyBiZWVuIGxlZnQgdW5jb3JyZWN0ZWQKKyAgICAgICBmb3Igc3RyaWN0IGNvbXBhdGliaWxpdHkgd2l0aCBTeXN0ZW0gVi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkdHlwZS4zeC5odG1sIj5mb3JtX2ZpZWxkdHlwZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtX2hvb2suM3guaHRtbCBiL2RvYy9odG1sL21hbi9mb3JtX2hvb2suM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhhYTFkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2Zvcm1faG9vay4zeC5odG1sCkBAIC0wLDAgKzEsMTM4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2hvb2suM3gsdiAxLjkgMjAwNy8wMi8yNCAxNzozNDoxOCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2hvb2sgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2hvb2sgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2hvb2s8L1NUUk9ORz4gLSBzZXQgaG9va3MgZm9yIGF1dG9tYXRpYyBpbnZvY2F0aW9uIGJ5IGFwcGxpY2EtCisgICAgICAgdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2ZpZWxkX2luaXQoRk9STSAqZm9ybSwgRm9ybV9Ib29rIGZ1bmMpOworICAgICAgIEZvcm1fSG9vayBmaWVsZF9pbml0KGNvbnN0IEZPUk0gKmZvcm0pOworICAgICAgIGludCBzZXRfZmllbGRfdGVybShGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisgICAgICAgRm9ybV9Ib29rIGZpZWxkX3Rlcm0oY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgaW50IHNldF9mb3JtX2luaXQoRk9STSAqZm9ybSwgRm9ybV9Ib29rIGZ1bmMpOworICAgICAgIEZvcm1fSG9vayBmb3JtX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgaW50IHNldF9mb3JtX3Rlcm0oRk9STSAqZm9ybSwgRm9ybV9Ib29rIGZ1bmMpOworICAgICAgIEZvcm1fSG9vayBmb3JtX3Rlcm0oY29uc3QgRk9STSAqZm9ybSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIG1ha2UgaXQgcG9zc2libGUgdG8gc2V0IGhvb2sgZnVuY3Rpb25zICB0bworICAgICAgIGJlIGNhbGxlZCBhdCB2YXJpb3VzIHBvaW50cyBpbiB0aGUgYXV0b21hdGljIHByb2Nlc3Npbmcgb2YKKyAgICAgICBpbnB1dCBldmVudCBjb2RlcyBieSA8U1RST05HPmZvcm1fZHJpdmVyPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkX2luaXQ8L1NUUk9ORz4gc2V0cyBhIGhvb2sgdG8gIGJlICBjYWxsZWQgIGF0CisgICAgICAgZm9ybS1wb3N0ICB0aW1lICBhbmQgIGVhY2ggdGltZSB0aGUgc2VsZWN0ZWQgZmllbGQgY2hhbmdlcworICAgICAgIChhZnRlciB0aGUgY2hhbmdlKS4gIDxTVFJPTkc+ZmllbGRfaW5pdDwvU1RST05HPiByZXR1cm5zIHRoZSBjdXJyZW50ICBmaWVsZAorICAgICAgIGluaXQgaG9vaywgaWYgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2ZpZWxkX3Rlcm08L1NUUk9ORz4gIHNldHMgYSBob29rIHRvIGJlIGNhbGxlZCBhdAorICAgICAgIGZvcm0tdW5wb3N0IHRpbWUgYW5kIGVhY2ggdGltZSB0aGUgc2VsZWN0ZWQgZmllbGQgIGNoYW5nZXMKKyAgICAgICAoYmVmb3JlIHRoZSBjaGFuZ2UpLiAgPFNUUk9ORz5maWVsZF90ZXJtPC9TVFJPTkc+IHJldHVybnMgdGhlIGN1cnJlbnQgZmllbGQKKyAgICAgICB0ZXJtIGhvb2ssIGlmIGFueSAoPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggaG9vaykuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfZm9ybV9pbml0PC9TVFJPTkc+IHNldHMgYSBob29rICB0byAgYmUgIGNhbGxlZCAgYXQKKyAgICAgICBmb3JtLXBvc3QgIHRpbWUgIGFuZCAganVzdCAgYWZ0ZXIgYSBwYWdlIGNoYW5nZSBvbmNlIGl0IGlzCisgICAgICAgcG9zdGVkLiAgPFNUUk9ORz5mb3JtX2luaXQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgY3VycmVudCBmb3JtIGluaXQgaG9vaywgIGlmCisgICAgICAgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2Zvcm1fdGVybTwvU1RST05HPiAgc2V0cyAgYSBob29rIHRvIGJlIGNhbGxlZCBhdAorICAgICAgIGZvcm0tdW5wb3N0IHRpbWUgYW5kIGp1c3QgYmVmb3JlIGEgcGFnZSBjaGFuZ2Ugb25jZSBpdCAgaXMKKyAgICAgICBwb3N0ZWQuICAgPFNUUk9ORz5mb3JtX2luaXQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgY3VycmVudCBmb3JtIHRlcm0gaG9vaywgaWYKKyAgICAgICBhbnkgKDxTVFJPTkc+TlVMTDwvU1RST05HPiBpZiB0aGVyZSBpcyBubyBzdWNoIGhvb2spLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLiAgT3RoZXIKKyAgICAgICByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtX25ldy4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fbmV3LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMzAxMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX25ldy4zeC5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX25ldy4zeCx2IDEuNyAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fbmV3IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9uZXcgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fbmV3LjN4Lmh0bWwiPmZvcm1fbmV3KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9uZXc8L1NUUk9ORz4gLSBjcmVhdGUgYW5kIGRlc3Ryb3kgZm9ybXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBGT1JNICpuZXdfZm9ybShGSUVMRCAqKmZpZWxkcyk7CisgICAgICAgaW50IGZyZWVfZm9ybShGT1JNICpmb3JtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPm5ld19mb3JtPC9TVFJPTkc+ICBjcmVhdGVzIGEgbmV3IGZvcm0gY29ubmVjdGVkIHRvIGEKKyAgICAgICBzcGVjaWZpZWQgZmllbGQgcG9pbnRlciBhcnJheSAod2hpY2ggbXVzdCAgYmUgIDxTVFJPTkc+TlVMTDwvU1RST05HPi10ZXJtaS0KKyAgICAgICBuYXRlZCkuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZyZWVfZm9ybTwvU1RST05HPiAgZGlzY29ubmVjdHMgIDxFTT5mb3JtPC9FTT4gZnJvbSBpdHMgZmllbGQKKyAgICAgICBhcnJheSBhbmQgZnJlZXMgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkIGZvciB0aGUgZm9ybS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X2Zvcm08L1NUUk9ORz4gcmV0dXJucyAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+ICBvbiAgZXJyb3IuICAgSXQgIHNldHMKKyAgICAgICBlcnJubyBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uJ3Mgc3VjY2VzczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQsIGUuZy4sIG1hbGxvYyBmYWlsdXJlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9mb3JtPC9TVFJPTkc+IHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fbmV3X3BhZ2UuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODYzMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2Zvcm1fbmV3X3BhZ2UuM3guaHRtbApAQCAtMCwwICsxLDExOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9uZXdfcGFnZS4zeCx2IDEuOCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fbmV3X3BhZ2UgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX25ld19wYWdlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX25ld19wYWdlLjN4Lmh0bWwiPmZvcm1fbmV3X3BhZ2UoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fbmV3X3BhZ2UuM3guaHRtbCI+Zm9ybV9uZXdfcGFnZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX25ld19wYWdlPC9TVFJPTkc+IC0gZm9ybSBwYWdpbmF0aW9uIGZ1bmN0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfbmV3X3BhZ2UoRklFTEQgKmZpZWxkLCBib29sIG5ld19wYWdlX2ZsYWcpOworICAgICAgIGJvb2wgbmV3X3BhZ2UoY29uc3QgRklFTEQgKmZpZWxkKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9uZXdfcGFnZTwvU1RST05HPiAgc2V0cyBvciByZXNldHMgYSBmbGFnIG1hcmtpbmcKKyAgICAgICB0aGUgZ2l2ZW4gZmllbGQgYXMgdGhlIGJlZ2lubmluZyBvZiAgYSAgbmV3ICBwYWdlICBvbiAgaXRzCisgICAgICAgZm9ybS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+bmV3X3BhZ2U8L1NUUk9ORz4gIGlzICBhICBwcmVkaWNhdGUgd2hpY2ggdGVzdHMgaWYgYQorICAgICAgIGdpdmVuIGZpZWxkIG1hcmtzIGEgcGFnZSBiZWdpbm5pbmcgb24gaXRzIGZvcm0uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm5ld19wYWdlPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+IG9yIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbmV3X3BhZ2U8L1NUUk9ORz4gcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGdpdmVuIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgZm9ybS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IKKyAgICAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5mb3JtX25ld19wYWdlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fb3B0cy4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fb3B0cy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzODY5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fb3B0cy4zeCx2IDEuOSAyMDA3LzAyLzI0IDE3OjM0OjM2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fb3B0cyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fb3B0cyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fb3B0czwvU1RST05HPiAtIHNldCBhbmQgZ2V0IGZvcm0gb3B0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZm9ybV9vcHRzKEZPUk0gKmZvcm0sIEZpZWxkX09wdGlvbnMgb3B0cyk7CisgICAgICAgaW50IGZvcm1fb3B0c19vbihGT1JNICpmb3JtLCBGaWVsZF9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBmb3JtX29wdHNfb2ZmKEZPUk0gKmZvcm0sIEZpZWxkX09wdGlvbnMgb3B0cyk7CisgICAgICAgRmllbGRfT3B0aW9ucyBmb3JtX29wdHMoY29uc3QgRk9STSAqZm9ybSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfZm9ybV9vcHRzPC9TVFJPTkc+ICBzZXRzICBhbGwgIHRoZSAgZ2l2ZW4gZm9ybSdzCisgICAgICAgb3B0aW9uIGJpdHMgIChmb3JtICBvcHRpb24gIGJpdHMgIG1heSAgYmUgIGxvZ2ljYWxseS1PUidlZAorICAgICAgIHRvZ2V0aGVyKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5mb3JtX29wdHNfb248L1NUUk9ORz4gdHVybnMgb24gdGhlIGdpdmVuIG9wdGlvbiBiaXRzLAorICAgICAgIGFuZCBsZWF2ZXMgb3RoZXJzIGFsb25lLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+Zm9ybV9vcHRzX29mZjwvU1RST05HPiAgdHVybnMgIG9mZiAgdGhlICBnaXZlbiAgb3B0aW9uCisgICAgICAgYml0cywgYW5kIGxlYXZlcyBvdGhlcnMgYWxvbmUuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZvcm1fb3B0czwvU1RST05HPiByZXR1cm5zIHRoZSBmb3JtJ3MgY3VycmVudCBvcHRpb24KKyAgICAgICBiaXRzLgorCisgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBkZWZpbmVkIChhbGwgYXJlIG9uIGJ5IGRlZmF1bHQpOgorCisgICAgICAgT19OTF9PVkVSTE9BRAorICAgICAgICAgICAgT3ZlcmxvYWQgIHRoZSAgPFNUUk9ORz5SRVFfTkVXX0xJTkU8L1NUUk9ORz4gIGZvcm1zICBkcml2ZXIgcmVxdWVzdCBzbworICAgICAgICAgICAgdGhhdCBjYWxsaW5nIGl0IGF0IHRoZSBlbmQgb2YgYSAgZmllbGQgIGdvZXMgIHRvICB0aGUKKyAgICAgICAgICAgIG5leHQgZmllbGQuCisKKyAgICAgICBPX0JTX09WRVJMT0FECisgICAgICAgICAgICBPdmVybG9hZCAgdGhlICA8U1RST05HPlJFUV9ERUxfUFJFVjwvU1RST05HPiAgZm9ybXMgIGRyaXZlciByZXF1ZXN0IHNvCisgICAgICAgICAgICB0aGF0IGNhbGxpbmcgaXQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkICBnb2VzICB0bworICAgICAgICAgICAgdGhlIHByZXZpb3VzIGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgZm9yIDxTVFJPTkc+Zm9ybV9vcHRzPC9TVFJPTkc+LCBlYWNoIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbC0KKyAgICAgICBsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtX3BhZ2UuM3guaHRtbCBiL2RvYy9odG1sL21hbi9mb3JtX3BhZ2UuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTMwNzViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2Zvcm1fcGFnZS4zeC5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX3BhZ2UuM3gsdiAxLjEwIDIwMDYvMTEvMDQgMTg6NTI6MzIgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9wYWdlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9wYWdlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9wYWdlPC9TVFJPTkc+IC0gc2V0IGFuZCBnZXQgZm9ybSBwYWdlIG51bWJlcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfY3VycmVudF9maWVsZChGT1JNICpmb3JtLCBGSUVMRCAqZmllbGQpOworICAgICAgIEZJRUxEICpjdXJyZW50X2ZpZWxkKGNvbnN0IEZPUk0gKik7CisgICAgICAgaW50IHNldF9mb3JtX3BhZ2UoRk9STSAqZm9ybSwgaW50IG4pOworICAgICAgIGludCBmb3JtX3BhZ2UoY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgaW50IGZpZWxkX2luZGV4KGNvbnN0IEZJRUxEICpmaWVsZCk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfY3VycmVudDwvU1RST05HPiA8U1RST05HPmZpZWxkPC9TVFJPTkc+IHNldHMgdGhlIGN1cnJlbnQgZmllbGQgb2YKKyAgICAgICB0aGUgZ2l2ZW4gZm9ybTsgPFNUUk9ORz5jdXJyZW50X2ZpZWxkPC9TVFJPTkc+IHJldHVybnMgdGhlIGN1cnJlbnQgZmllbGQgb2YKKyAgICAgICB0aGUgZ2l2ZW4gZm9ybS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2Zvcm1fcGFnZTwvU1RST05HPiAgc2V0cyAgdGhlIGZvcm0ncyBwYWdlIG51bWJlcgorICAgICAgIChnb2VzIHRvIHBhZ2UgPEVNPm48L0VNPiBvZiB0aGUgZm9ybSkuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5mb3JtX3BhZ2U8L1NUUk9ORz4gcmV0dXJucyAgdGhlICBmb3JtJ3MgIGN1cnJlbnQgIHBhZ2UKKyAgICAgICBudW1iZXIuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF9pbmRleDwvU1RST05HPiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmllbGQgaW4KKyAgICAgICB0aGUgZmllbGQgYXJyYXkgb2YgdGhlIGZvcm0gaXQgaXMgY29ubmVjdGVkIHRvLiBJdCByZXR1cm5zCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gIGlmICB0aGUgIGFyZ3VtZW50IGlzIHRoZSBudWxsIHBvaW50ZXIgb3IgdGhlIGZpZWxkIGlzCisgICAgICAgbm90IGNvbm5lY3RlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgRXhjZXB0IGZvciA8U1RST05HPmZvcm1fcGFnZTwvU1RST05HPiwgZWFjaCByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2wtCisgICAgICAgbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfSU5WQUxJRF9GSUVMRDwvU1RST05HPgorICAgICAgICAgICAgQ29udGVudHMgb2YgYSBmaWVsZCBhcmUgbm90IHZhbGlkLgorCisgICAgICAgPFNUUk9ORz5FX1JFUVVFU1RfREVOSUVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fcG9zdC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fcG9zdC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjVhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV9wb3N0LjN4Lmh0bWwKQEAgLTAsMCArMSwxMzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fcG9zdC4zeCx2IDEuNyAyMDA2LzExLzA0IDE4OjUzOjIwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fcG9zdCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fcG9zdCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9wb3N0LjN4Lmh0bWwiPmZvcm1fcG9zdCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3Bvc3QuM3guaHRtbCI+Zm9ybV9wb3N0KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fcG9zdDwvU1RST05HPiAgLSAgd3JpdGUgb3IgZXJhc2UgZm9ybXMgZnJvbSBhc3NvY2lhdGVkIHN1Yndpbi0KKyAgICAgICBkb3dzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHBvc3RfZm9ybShGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgdW5wb3N0X2Zvcm0oRk9STSAqZm9ybSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+cG9zdF9mb3JtPC9TVFJPTkc+IGRpc3BsYXlzIGEgZm9ybSB0byAgaXRzICBhc3NvY2lhdGVkCisgICAgICAgc3Vid2luZG93LiAgIFRvIHRyaWdnZXIgcGh5c2ljYWwgZGlzcGxheSBvZiB0aGUgc3Vid2luZG93LAorICAgICAgIHVzZSAgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+ICBvciAgc29tZSAgZXF1aXZhbGVudCAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gIHJvdXRpbmUgICAodGhlCisgICAgICAgaW1wbGljaXQgIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4gIHRyaWdnZXJlZCAgYnkgIGFuIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGlucHV0IHJlcXVlc3QKKyAgICAgICB3aWxsIGRvKS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnVucG9zdF9mb3JtPC9TVFJPTkc+IGVyYXNlcyBmb3JtIGZyb20gIGl0cyAgYXNzb2NpYXRlZAorICAgICAgIHN1YndpbmRvdy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfTk9UX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gaGFzIG5vdCBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBmb3JtLgorCisgICAgICAgPFNUUk9ORz5FX05PX1JPT008L1NUUk9ORz4KKyAgICAgICAgICAgIEZvcm0gaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3Bvc3QuM3guaHRtbCI+Zm9ybV9wb3N0KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3guaHRtbCBiL2RvYy9odG1sL21hbi9mb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwYzJiZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fcmVxdWVzdG5hbWUuM3gsdiAxLjcgMjAwNi8xMS8wNCAxNzo1Nzo0OSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX3JlcXVlc3RuYW1lIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9yZXF1ZXN0bmFtZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9yZXF1ZXN0bmFtZS4zeC5odG1sIj5mb3JtX3JlcXVlc3RuYW1lKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwiPmZvcm1fcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9yZXF1ZXN0bmFtZTwvU1RST05HPiAtIGhhbmRsZSBwcmludGFibGUgZm9ybSByZXF1ZXN0IG5hbWVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgY29uc3QgY2hhciAqZm9ybV9yZXF1ZXN0X25hbWUoaW50IHJlcXVlc3QpOworICAgICAgIGludCBmb3JtX3JlcXVlc3RfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+Zm9ybV9yZXF1ZXN0X25hbWU8L1NUUk9ORz4gcmV0dXJucyB0aGUgcHJpbnRhYmxlIG5hbWUKKyAgICAgICBvZiBhIGZvcm0gcmVxdWVzdCBjb2RlLgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZvcm1fcmVxdWVzdF9ieV9uYW1lPC9TVFJPTkc+IHNlYXJjaGVzIGluIHRoZSBuYW1lLXRhLQorICAgICAgIGJsZSAgZm9yICBhICByZXF1ZXN0ICB3aXRoICB0aGUgZ2l2ZW4gbmFtZSBhbmQgcmV0dXJucyBpdHMKKyAgICAgICByZXF1ZXN0IGNvZGUuIE90aGVyd2lzZSBFX05PX01BVENIIGlzIHJldHVybmVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fcmVxdWVzdF9uYW1lPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yIGFuZCBzZXRzIGVycm5vICB0bworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4uCisgICAgICAgPFNUUk9ORz5mb3JtX3JlcXVlc3RfYnlfbmFtZTwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+RV9OT19NQVRDSDwvU1RST05HPiBvbiBlcnJvci4gIEl0IGRvZXMKKyAgICAgICBub3Qgc2V0IGVycm5vLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGFyZSAgc3BlY2lmaWMgIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90CisgICAgICAgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSAgViAgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0ICBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlIGNvbi0KKyAgICAgICBkaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9yZXF1ZXN0bmFtZS4zeC5odG1sIj5mb3JtX3JlcXVlc3RuYW1lKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YTUwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fdXNlcnB0ci4zeCx2IDEuMTEgMjAwNi8xMS8wNCAxODo0MzoyNCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX3VzZXJwdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX3VzZXJwdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX3VzZXJwdHI8L1NUUk9ORz4gLSBhc3NvY2lhdGUgYXBwbGljYXRpb24gZGF0YSB3aXRoIGEgZm9ybSBpdGVtCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9mb3JtX3VzZXJwdHIoRk9STSAqZm9ybSwgdm9pZCAqdXNlcnB0cik7CisgICAgICAgdm9pZCogZm9ybV91c2VycHRyKGNvbnN0IEZPUk0gKmZvcm0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEV2ZXJ5IGZvcm0gYW5kIGV2ZXJ5IGZvcm0gaXRlbSBoYXMgYSAgZmllbGQgIHRoYXQgIGNhbiAgYmUKKyAgICAgICB1c2VkIHRvIGhvbGQgYXBwbGljYXRpb24tc3BlY2lmaWMgZGF0YSAodGhhdCBpcywgdGhlIGZvcm0tCisgICAgICAgZHJpdmVyIGNvZGUgbGVhdmVzIGl0IGFsb25lKS4gIFRoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldAorICAgICAgIHRoZSBmb3JtIHVzZXIgcG9pbnRlciBmaWVsZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPmZvcm1fdXNlcnB0cjwvU1RST05HPiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlCisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+KS4gIEl0IGRvZXMgbm90IHNldCBlcnJuby4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9mb3JtX3VzZXJwdHI8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVfT0s8L1NUUk9ORz4gKHN1Y2Nlc3MpLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgdXNlciBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyLiAgV2UgY2hvc2Ugbm90IHRvIGxlYXZlCisgICAgICAgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9mb3JtX3dpbi4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2Zvcm1fd2luLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyMTNkZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9mb3JtX3dpbi4zeC5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX3dpbi4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX3dpbiAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fd2luIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fd2luPC9TVFJPTkc+ICAtIG1ha2UgYW5kIGJyZWFrIGZvcm0gd2luZG93IGFuZCBzdWJ3aW5kb3cgYXNzby0KKyAgICAgICBjaWF0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZm9ybV93aW4oRk9STSAqZm9ybSwgV0lORE9XICp3aW4pOworICAgICAgIFdJTkRPVyAqZm9ybV93aW4oY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgaW50IHNldF9mb3JtX3N1YihGT1JNICpmb3JtLCBXSU5ET1cgKnN1Yik7CisgICAgICAgV0lORE9XICpmb3JtX3N1Yihjb25zdCBGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgc2NhbGVfZm9ybShjb25zdCBGT1JNICpmb3JtLCBpbnQgKnJvd3MsIGludCAqY29sdW1ucyk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgRXZlcnkgIGZvcm0gaGFzIGFuIGFzc29jaWF0ZWQgcGFpciBvZiA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3dzLiAgVGhlCisgICAgICAgZm9ybSB3aW5kb3cgZGlzcGxheXMgYW55IHRpdGxlIGFuZCBib3JkZXIgYXNzb2NpYXRlZCAgd2l0aAorICAgICAgIHRoZSAgd2luZG93OyAgdGhlIGZvcm0gc3Vid2luZG93IGRpc3BsYXlzIHRoZSBpdGVtcyBvZiB0aGUKKyAgICAgICBmb3JtIHRoYXQgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4KKworICAgICAgIFRoZSBmaXJzdCBmb3VyIGZ1bmN0aW9ucyBnZXQgYW5kIHNldCB0aG9zZSB3aW5kb3dzLiAgSXQgaXMKKyAgICAgICBub3QgbmVjZXNzYXJ5IHRvIHNldCBlaXRoZXIgd2luZG93OyBieSBkZWZhdWx0LCB0aGUgZHJpdmVyCisgICAgICAgY29kZSB1c2VzIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+IGZvciBib3RoLgorCisgICAgICAgSW4gdGhlIDxTVFJPTkc+c2V0XzwvU1RST05HPiBmdW5jdGlvbnMsIHdpbmRvdyBhcmd1bWVudCBvZiA8U1RST05HPk5VTEw8L1NUUk9ORz4gaXMgIHRyZWF0ZWQKKyAgICAgICBhcyAgdGhvdWdoICBpdCAgd2VyZSAgPFNUUk9ORz5zdHNkY3I8L1NUUk9ORz4uICAgQSBmb3JtIGFyZ3VtZW50IG9mIDxTVFJPTkc+TlVMTDwvU1RST05HPiBpcworICAgICAgIHRyZWF0ZWQgYXMgYSByZXF1ZXN0IHRvIGNoYW5nZSAgdGhlICBzeXN0ZW0gIGRlZmF1bHQgIGZvcm0KKyAgICAgICB3aW5kb3cgb3Igc3Vid2luZG93LgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPnNjYWxlX2Zvcm08L1NUUk9ORz4gcmV0dXJucyB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkCisgICAgICAgZm9yIHRoZSBzdWJ3aW5kb3cgb2YgPEVNPmZvcm08L0VNPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIDxTVFJPTkc+TlVMTDwvU1RST05HPiBvbiBlcnJvci4gICBSb3UtCisgICAgICAgdGluZXMgIHRoYXQgIHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgIGVycm9yIGNvZGVzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBmb3JtLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9pbmRleC5odG1sIGIvZG9jL2h0bWwvbWFuL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiM2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9pbmRleC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8IS0tCisgICRJZDogaW5kZXguaHRtbCx2IDEuMyAyMDA2LzEyLzI0IDIzOjA1OjM1IHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAtLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+TkNVUlNFUyAtIE1hbnVhbCBQYWdlczwvVElUTEU+Cis8TElOSyBSRVY9TUFERSBIUkVGPSJtYWlsdG86ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0Ij4KKzwvSEVBRD4KKzxCT0RZPgorPEhSPgorPHVsPgorPGxpPlByb2dyYW1zOgorPHVsPgorPGxpPjxhIGhyZWYgPSAiY2FwdG9pbmZvLjFtLmh0bWwiPmNhcHRvaW5mbyAtIGNvbnZlcnQgYSB0ZXJtY2FwIGRlc2NyaXB0aW9uIGludG8gYSB0ZXJtaW5mbyBkZXNjcmlwdGlvbjwvYT4KKzxsaT48YSBocmVmID0gImNsZWFyLjEuaHRtbCI+Y2xlYXIgLSBjbGVhciB0aGUgdGVybWluYWwgc2NyZWVuPC9hPgorPGxpPjxhIGhyZWYgPSAiaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wIC0gY29tcGFyZSBvciBwcmludCBvdXQgdGVybWluZm8gZGVzY3JpcHRpb25zPC9hPgorPGxpPjxhIGhyZWYgPSAiaW5mb3RvY2FwLjFtLmh0bWwiPmluZm90b2NhcCAtIGNvbnZlcnQgYSB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBpbnRvIGEgdGVybWNhcCBkZXNjcmlwdGlvbjwvYT4KKzxsaT48YSBocmVmID0gInRpYy4xbS5odG1sIj50aWMgLSB0aGUgdGVybWluZm8gZW50cnktZGVzY3JpcHRpb24gY29tcGlsZXI8L2E+Cis8bGk+PGEgaHJlZiA9ICJ0b2UuMW0uaHRtbCI+dG9lIC0gdGFibGUgb2YgKHRlcm1pbmZvKSBlbnRyaWVzPC9hPgorPGxpPjxhIGhyZWYgPSAidHB1dC4xLmh0bWwiPnRwdXQgLSAgaW5pdGlhbGl6ZSAgYSAgdGVybWluYWwgb3IgcXVlcnkgdGVybWluZm8gZGF0YWJhc2U8L2E+Cis8bGk+PGEgaHJlZiA9ICJ0c2V0LjEuaHRtbCI+dHNldCAtIHRlcm1pbmFsIGluaXRpYWxpemF0aW9uPC9hPgorPC91bD4KKzxsaT5MaWJyYXJpZXM6Cis8dWw+Cis8bGk+PGEgaHJlZiA9ICJuY3Vyc2VzLjN4Lmh0bWwiPm5jdXJzZXMgLSBDUlQgc2NyZWVuIGhhbmRsaW5nIGFuZCBvcHRpbWl6YXRpb24gcGFja2FnZTwvYT4KKzxsaT48YSBocmVmID0gInBhbmVsLjN4Lmh0bWwiPnBhbmVsLSBwYW5lbCBzdGFjayBleHRlbnNpb24gZm9yIGN1cnNlczwvYT4KKzxsaT48YSBocmVmID0gImZvcm0uM3guaHRtbCI+Zm9ybSAtIGN1cnNlcyBleHRlbnNpb24gZm9yIHByb2dyYW1taW5nIGZvcm1zPC9hPgorPGxpPjxhIGhyZWYgPSAibWVudS4zeC5odG1sIj5tZW51IC0gY3Vyc2VzIGV4dGVuc2lvbiBmb3IgcHJvZ3JhbW1pbmcgbWVudXM8L2E+Cis8L3VsPgorPGxpPkZpbGUgZm9ybWF0czoKKzx1bD4KKzxsaT48YSBocmVmID0gInRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8gLSB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGEgYmFzZTwvYT4KKzxsaT48YSBocmVmID0gInRlcm0uNS5odG1sIj50ZXJtIC0gZm9ybWF0IG9mIGNvbXBpbGVkIHRlcm0gZmlsZS48L2E+Cis8bGk+PGEgaHJlZiA9ICJ0ZXJtLjcuaHRtbCI+dGVybSAtIGNvbnZlbnRpb25zIGZvciBuYW1pbmcgdGVybWluYWwgdHlwZXM8L2E+Cis8L3VsPgorPC91bD4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9pbmZvY21wLjFtLmh0bWwgYi9kb2MvaHRtbC9tYW4vaW5mb2NtcC4xbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjM1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vaW5mb2NtcC4xbS5odG1sCkBAIC0wLDAgKzEsNDQ0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBpbmZvY21wLjFtLHYgMS40NCAyMDA2LzEyLzI0IDE4OjE2OjMxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmluZm9jbXAgMW08L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5pbmZvY21wIDFtPC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImluZm9jbXAuMW0uaHRtbCI+aW5mb2NtcCgxbSk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IC0gY29tcGFyZSBvciBwcmludCBvdXQgPEVNPnRlcm1pbmZvPC9FTT4gZGVzY3JpcHRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IFs8U1RST05HPi0xQ0VGR0lMVFVWY2RlZ2lsbnBxcnR1eDwvU1RST05HPl0KKyAgICAgICAgICAgICBbPFNUUk9ORz4tdjwvU1RST05HPiA8RU0+bjwvRU0+XSBbPFNUUk9ORz4tczwvU1RST05HPiA8U1RST05HPmQ8L1NUUk9ORz58IDxTVFJPTkc+aTwvU1RST05HPnwgPFNUUk9ORz5sPC9TVFJPTkc+fCA8U1RST05HPmM8L1NUUk9ORz5dIFs8U1RST05HPi1SPC9TVFJPTkc+IDxTVFJPTkc+c3Vic2V0PC9TVFJPTkc+XQorICAgICAgICAgICAgIFs8U1RST05HPi13PC9TVFJPTkc+IDxFTT53aWR0aDwvRU0+XSBbPFNUUk9ORz4tQTwvU1RST05HPiA8RU0+ZGlyZWN0b3J5PC9FTT5dIFs8U1RST05HPi1CPC9TVFJPTkc+IDxFTT5kaXJlY3Rvcnk8L0VNPl0KKyAgICAgICAgICAgICBbPEVNPnRlcm1uYW1lPC9FTT4uLi5dCisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+ICBjYW4gIGJlICB1c2VkICB0byBjb21wYXJlIGEgYmluYXJ5IDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZW50cnkKKyAgICAgICB3aXRoIG90aGVyIHRlcm1pbmZvIGVudHJpZXMsIHJld3JpdGUgYSAgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiAgZGVzY3JpcC0KKyAgICAgICB0aW9uICB0byAgdGFrZSAgYWR2YW50YWdlICBvZiAgdGhlIDxTVFJPTkc+dXNlPTwvU1RST05HPiB0ZXJtaW5mbyBmaWVsZCwgb3IKKyAgICAgICBwcmludCBvdXQgYSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBkZXNjcmlwdGlvbiAgZnJvbSAgdGhlICBiaW5hcnkgIGZpbGUKKyAgICAgICAoPFNUUk9ORz50ZXJtPC9TVFJPTkc+KSBpbiBhIHZhcmlldHkgb2YgZm9ybWF0cy4gIEluIGFsbCBjYXNlcywgdGhlIGJvb2xlYW4KKyAgICAgICBmaWVsZHMgd2lsbCBiZSBwcmludGVkICBmaXJzdCwgIGZvbGxvd2VkICBieSAgdGhlICBudW1lcmljCisgICAgICAgZmllbGRzLCBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIGZpZWxkcy4KKworICAgPFNUUk9ORz5EZWZhdWx0PC9TVFJPTkc+IDxTVFJPTkc+T3B0aW9uczwvU1RST05HPgorICAgICAgIElmICBubyBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYW5kIHplcm8gb3Igb25lIDxFTT50ZXJtbmFtZXM8L0VNPiBhcmUKKyAgICAgICBzcGVjaWZpZWQsIHRoZSA8U1RST05HPi1JPC9TVFJPTkc+IG9wdGlvbiB3aWxsIGJlIGFzc3VtZWQuICAgSWYgIG1vcmUgIHRoYW4KKyAgICAgICBvbmUgIDxFTT50ZXJtbmFtZTwvRU0+IGlzIHNwZWNpZmllZCwgdGhlIDxTVFJPTkc+LWQ8L1NUUk9ORz4gb3B0aW9uIHdpbGwgYmUgYXNzdW1lZC4KKworICAgPFNUUk9ORz5Db21wYXJpc29uPC9TVFJPTkc+IDxTVFJPTkc+T3B0aW9uczwvU1RST05HPiA8U1RST05HPlstZF08L1NUUk9ORz4gPFNUUk9ORz5bLWNdPC9TVFJPTkc+IDxTVFJPTkc+Wy1uXTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiBjb21wYXJlcyB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiAgZGVzY3JpcHRpb24gIG9mICB0aGUgIGZpcnN0CisgICAgICAgdGVybWluYWwgIDxFTT50ZXJtbmFtZTwvRU0+ICB3aXRoIGVhY2ggb2YgdGhlIGRlc2NyaXB0aW9ucyBnaXZlbiBieQorICAgICAgIHRoZSBlbnRyaWVzIGZvciB0aGUgIG90aGVyICB0ZXJtaW5hbCdzICA8RU0+dGVybW5hbWVzPC9FTT4uICAgSWYgIGEKKyAgICAgICBjYXBhYmlsaXR5ICBpcyAgZGVmaW5lZCBmb3Igb25seSBvbmUgb2YgdGhlIHRlcm1pbmFscywgdGhlCisgICAgICAgdmFsdWUgcmV0dXJuZWQgd2lsbCBkZXBlbmQgb24gdGhlIHR5cGUgb2YgdGhlICBjYXBhYmlsaXR5OgorICAgICAgIDxTVFJPTkc+RjwvU1RST05HPiAgZm9yICBib29sZWFuICB2YXJpYWJsZXMsICA8U1RST05HPi0xPC9TVFJPTkc+IGZvciBpbnRlZ2VyIHZhcmlhYmxlcywgYW5kCisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGZvciBzdHJpbmcgdmFyaWFibGVzLgorCisgICAgICAgVGhlIDxTVFJPTkc+LWQ8L1NUUk9ORz4gb3B0aW9uIHByb2R1Y2VzIGEgbGlzdCBvZiBlYWNoIGNhcGFiaWxpdHkgIHRoYXQgIGlzCisgICAgICAgZGlmZmVyZW50ICBiZXR3ZWVuICB0d28gZW50cmllcy4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB0bworICAgICAgIHNob3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZW50cmllcywgY3JlYXRlZCAgYnkgIGRpZi0KKyAgICAgICBmZXJlbnQgcGVvcGxlLCBmb3IgdGhlIHNhbWUgb3Igc2ltaWxhciB0ZXJtaW5hbHMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+LWM8L1NUUk9ORz4gIG9wdGlvbiBwcm9kdWNlcyBhIGxpc3Qgb2YgZWFjaCBjYXBhYmlsaXR5IHRoYXQgaXMKKyAgICAgICBjb21tb24gYmV0d2VlbiB0d28gZW50cmllcy4gIENhcGFiaWxpdGllcyB0aGF0IGFyZSBub3Qgc2V0CisgICAgICAgYXJlICBpZ25vcmVkLiAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgYXMgYSBxdWljayBjaGVjayB0bworICAgICAgIHNlZSBpZiB0aGUgPFNUUk9ORz4tdTwvU1RST05HPiBvcHRpb24gaXMgd29ydGggdXNpbmcuCisKKyAgICAgICBUaGUgPFNUUk9ORz4tbjwvU1RST05HPiBvcHRpb24gcHJvZHVjZXMgYSBsaXN0IG9mIGVhY2ggY2FwYWJpbGl0eSAgdGhhdCAgaXMKKyAgICAgICBpbiBuZWl0aGVyIGVudHJ5LiAgSWYgbm8gPEVNPnRlcm1uYW1lczwvRU0+IGFyZSBnaXZlbiwgdGhlIGVudmlyb24tCisgICAgICAgbWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk08L1NUUk9ORz4gd2lsbCBiZSB1c2VkIGZvciBib3RoIG9mIHRoZSA8RU0+dGVybW5hbWVzPC9FTT4uCisgICAgICAgVGhpcyAgY2FuICBiZSB1c2VkIGFzIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGFueXRoaW5nIHdhcworICAgICAgIGxlZnQgb3V0IG9mIGEgZGVzY3JpcHRpb24uCisKKyAgIDxTVFJPTkc+U291cmNlPC9TVFJPTkc+IDxTVFJPTkc+TGlzdGluZzwvU1RST05HPiA8U1RST05HPk9wdGlvbnM8L1NUUk9ORz4gPFNUUk9ORz5bLUldPC9TVFJPTkc+IDxTVFJPTkc+Wy1MXTwvU1RST05HPiA8U1RST05HPlstQ108L1NUUk9ORz4gPFNUUk9ORz5bLXJdPC9TVFJPTkc+CisgICAgICAgVGhlIDxTVFJPTkc+LUk8L1NUUk9ORz4sIDxTVFJPTkc+LUw8L1NUUk9ORz4sIGFuZCA8U1RST05HPi1DPC9TVFJPTkc+IG9wdGlvbnMgd2lsbCBwcm9kdWNlIGEgIHNvdXJjZSAgbGlzdGluZworICAgICAgIGZvciBlYWNoIHRlcm1pbmFsIG5hbWVkLgorCisgICAgICA8U1RST05HPi1JPC9TVFJPTkc+ICAgdXNlIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IG5hbWVzCisgICAgICA8U1RST05HPi1MPC9TVFJPTkc+ICAgdXNlIHRoZSBsb25nIEMgdmFyaWFibGUgbmFtZSBsaXN0ZWQgaW4gJmx0OzxTVFJPTkc+dGVybS5oPC9TVFJPTkc+Jmd0OworICAgICAgPFNUUk9ORz4tQzwvU1RST05HPiAgIHVzZSB0aGUgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IG5hbWVzCisgICAgICA8U1RST05HPi1yPC9TVFJPTkc+ICAgd2hlbiB1c2luZyA8U1RST05HPi1DPC9TVFJPTkc+LCBwdXQgb3V0IGFsbCBjYXBhYmlsaXRpZXMgaW4gPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IGZvcm0KKworICAgICAgIElmICBubyAgPEVNPnRlcm1uYW1lczwvRU0+IGFyZSBnaXZlbiwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPgorICAgICAgIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHRlcm1pbmFsIG5hbWUuCisKKyAgICAgICBUaGUgc291cmNlIHByb2R1Y2VkIGJ5IHRoZSA8U1RST05HPi1DPC9TVFJPTkc+IG9wdGlvbiBtYXkgYmUgdXNlZCAgZGlyZWN0bHkKKyAgICAgICBhcyAgYSA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gZW50cnksIGJ1dCBub3QgYWxsIHBhcmFtZXRlcml6ZWQgc3RyaW5ncyBjYW4KKyAgICAgICBiZSBjaGFuZ2VkIHRvIHRoZSA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gZm9ybWF0LiAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IHdpbGwgYXR0ZW1wdCB0bworICAgICAgIGNvbnZlcnQgIG1vc3QgIG9mICB0aGUgcGFyYW1ldGVyaXplZCBpbmZvcm1hdGlvbiwgYW5kIGFueS0KKyAgICAgICB0aGluZyBub3QgY29udmVydGVkIHdpbGwgYmUgcGxhaW5seSBtYXJrZWQgaW4gIHRoZSAgb3V0cHV0CisgICAgICAgYW5kIGNvbW1lbnRlZCBvdXQuICBUaGVzZSBzaG91bGQgYmUgZWRpdGVkIGJ5IGhhbmQuCisKKyAgICAgICBBbGwgIHBhZGRpbmcgIGluZm9ybWF0aW9uICBmb3IgIHN0cmluZ3MgIHdpbGwgYmUgY29sbGVjdGVkCisgICAgICAgdG9nZXRoZXIgYW5kIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAgc3RyaW5nICB3aGVyZQorICAgICAgIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiAgZXhwZWN0cyAgaXQuICBNYW5kYXRvcnkgcGFkZGluZyAocGFkZGluZyBpbmZvcm1hLQorICAgICAgIHRpb24gd2l0aCBhIHRyYWlsaW5nICcvJykgd2lsbCBiZWNvbWUgb3B0aW9uYWwuCisKKyAgICAgICBBbGwgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IHZhcmlhYmxlcyBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4sIGJ1dAorICAgICAgIHdoaWNoIGFyZSBkZXJpdmFibGUgZnJvbSBvdGhlciA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IHZhcmlhYmxlcywgd2lsbCBiZQorICAgICAgIG91dHB1dC4gIE5vdCBhbGwgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0cmFuc2xhdGVkOworICAgICAgIG9ubHkgIHRob3NlIHZhcmlhYmxlcyB3aGljaCB3ZXJlIHBhcnQgb2YgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IHdpbGwgbm9yLQorICAgICAgIG1hbGx5IGJlIG91dHB1dC4gIFNwZWNpZnlpbmcgdGhlIDxTVFJPTkc+LXI8L1NUUk9ORz4gb3B0aW9uIHdpbGwgIHRha2UgIG9mZgorICAgICAgIHRoaXMgIHJlc3RyaWN0aW9uLCAgYWxsb3dpbmcgYWxsIGNhcGFiaWxpdGllcyB0byBiZSBvdXRwdXQKKyAgICAgICBpbiA8RU0+dGVybWNhcDwvRU0+IGZvcm0uCisKKyAgICAgICBOb3RlIHRoYXQgYmVjYXVzZSBwYWRkaW5nIGlzIGNvbGxlY3RlZCB0byB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgdGhlICBjYXBhYmlsaXR5LCAgbm90IGFsbCBjYXBhYmlsaXRpZXMgYXJlIG91dHB1dC4gIE1hbmRhLQorICAgICAgIHRvcnkgcGFkZGluZyBpcyBub3Qgc3VwcG9ydGVkLiAgIEJlY2F1c2UgIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiAgc3RyaW5ncworICAgICAgIGFyZSAgbm90IGFzIGZsZXhpYmxlLCBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGNvbnZlcnQKKyAgICAgICBhIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gc3RyaW5nIGNhcGFiaWxpdHkgaW50byAgYW4gIGVxdWl2YWxlbnQgIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPgorICAgICAgIGZvcm1hdC4gICBBIHN1YnNlcXVlbnQgY29udmVyc2lvbiBvZiB0aGUgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IGZpbGUgYmFjaworICAgICAgIGludG8gPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBmb3JtYXQgd2lsbCBub3QgIG5lY2Vzc2FyaWx5ICByZXByb2R1Y2UgIHRoZQorICAgICAgIG9yaWdpbmFsIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gc291cmNlLgorCisgICAgICAgU29tZSAgY29tbW9uICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBwYXJhbWV0ZXIgc2VxdWVuY2VzLCB0aGVpciA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4KKyAgICAgICBlcXVpdmFsZW50cywgYW5kIHNvbWUgdGVybWluYWwgdHlwZXMgd2hpY2ggIGNvbW1vbmx5ICBoYXZlCisgICAgICAgc3VjaCBzZXF1ZW5jZXMsIGFyZToKKworICAgICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gICBSZXByZXNlbnRhdGl2ZSBUZXJtaW5hbHMKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIDxTVFJPTkc+JXAxJWM8L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+JS48L1NUUk9ORz4gICAgICAgIGFkbQorICAgICA8U1RST05HPiVwMSVkPC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPiVkPC9TVFJPTkc+ICAgICAgICBocCwgQU5TSSBzdGFuZGFyZCwgdnQxMDAKKyAgICAgPFNUUk9ORz4lcDElJ3gnJSslYzwvU1RST05HPiAgICAgICAgICAgICAgICAgPFNUUk9ORz4lK3g8L1NUUk9ORz4gICAgICAgY29uY2VwdAorICAgICA8U1RST05HPiVpPC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPiVpPC9TVFJPTkc+cSAgICAgICBBTlNJIHN0YW5kYXJkLCB2dDEwMAorICAgICA8U1RST05HPiVwMSU/JSd4JyUmZ3Q7JXQlcDElJ3knJSslOzwvU1RST05HPiAgICA8U1RST05HPiUmZ3Q7eHk8L1NUUk9ORz4gICAgICBjb25jZXB0CisgICAgIDxTVFJPTkc+JXAyPC9TVFJPTkc+IGlzIHByaW50ZWQgYmVmb3JlIDxTVFJPTkc+JXAxPC9TVFJPTkc+ICAgPFNUUk9ORz4lcjwvU1RST05HPiAgICAgICAgaHAKKworICAgPFNUUk9ORz5Vc2U9PC9TVFJPTkc+IDxTVFJPTkc+T3B0aW9uPC9TVFJPTkc+IDxTVFJPTkc+Wy11XTwvU1RST05HPgorICAgICAgIFRoZSAgPFNUUk9ORz4tdTwvU1RST05HPiAgb3B0aW9uICBwcm9kdWNlcyBhIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gc291cmNlIGRlc2NyaXB0aW9uIG9mCisgICAgICAgdGhlIGZpcnN0IHRlcm1pbmFsIDxFTT50ZXJtbmFtZTwvRU0+IHdoaWNoIGlzIHJlbGF0aXZlIHRvICB0aGUgIHN1bQorICAgICAgIG9mICB0aGUgIGRlc2NyaXB0aW9ucyAgZ2l2ZW4gIGJ5IHRoZSBlbnRyaWVzIGZvciB0aGUgb3RoZXIKKyAgICAgICB0ZXJtaW5hbHMgPEVNPnRlcm1uYW1lczwvRU0+LiAgSXQgZG9lcyB0aGlzIGJ5IGFuYWx5emluZyAgdGhlICBkaWYtCisgICAgICAgZmVyZW5jZXMgICBiZXR3ZWVuICAgdGhlICBmaXJzdCAgPEVNPnRlcm1uYW1lPC9FTT4gIGFuZCAgdGhlICBvdGhlcgorICAgICAgIDxFTT50ZXJtbmFtZXM8L0VNPiBhbmQgcHJvZHVjaW5nIGEgZGVzY3JpcHRpb24gd2l0aCA8U1RST05HPnVzZT08L1NUUk9ORz4gZmllbGRzIGZvcgorICAgICAgIHRoZSAgb3RoZXIgIHRlcm1pbmFscy4gICBJbiB0aGlzIG1hbm5lciwgaXQgaXMgcG9zc2libGUgdG8KKyAgICAgICByZXRyb2ZpdCAgZ2VuZXJpYyAgdGVybWluZm8gIGVudHJpZXMgIGludG8gIGEgICB0ZXJtaW5hbCdzCisgICAgICAgZGVzY3JpcHRpb24uICBPciwgaWYgdHdvIHNpbWlsYXIgdGVybWluYWxzIGV4aXN0LCBidXQgd2VyZQorICAgICAgIGNvZGVkIGF0IGRpZmZlcmVudCB0aW1lcyBvciBieSBkaWZmZXJlbnQgIHBlb3BsZSAgc28gIHRoYXQKKyAgICAgICBlYWNoIGRlc2NyaXB0aW9uIGlzIGEgZnVsbCBkZXNjcmlwdGlvbiwgdXNpbmcgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IHdpbGwKKyAgICAgICBzaG93IHdoYXQgY2FuIGJlIGRvbmUgdG8gY2hhbmdlIG9uZSBkZXNjcmlwdGlvbiB0byBiZSByZWwtCisgICAgICAgYXRpdmUgdG8gdGhlIG90aGVyLgorCisgICAgICAgQSBjYXBhYmlsaXR5IHdpbGwgZ2V0IHByaW50ZWQgd2l0aCBhbiBhdC1zaWduIChAKSBpZiBpdCBubworICAgICAgIGxvbmdlciBleGlzdHMgaW4gdGhlIGZpcnN0IDxFTT50ZXJtbmFtZTwvRU0+LCBidXQgb25lIG9mIHRoZSAgb3RoZXIKKyAgICAgICA8RU0+dGVybW5hbWU8L0VNPiAgZW50cmllcyBjb250YWlucyBhIHZhbHVlIGZvciBpdC4gIEEgY2FwYWJpbGl0eSdzCisgICAgICAgdmFsdWUgZ2V0cyBwcmludGVkIGlmIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgIDxFTT50ZXJtbmFtZTwvRU0+ICBpcworICAgICAgIG5vdCAgZm91bmQgaW4gYW55IG9mIHRoZSBvdGhlciA8RU0+dGVybW5hbWU8L0VNPiBlbnRyaWVzLCBvciBpZiB0aGUKKyAgICAgICBmaXJzdCBvZiB0aGUgb3RoZXIgPEVNPnRlcm1uYW1lPC9FTT4gZW50cmllcyB0aGF0IGhhcyB0aGlzIGNhcGFiaWwtCisgICAgICAgaXR5ICBnaXZlcyAgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBjYXBhYmlsaXR5IHRoYW4gdGhhdAorICAgICAgIGluIHRoZSBmaXJzdCA8RU0+dGVybW5hbWU8L0VNPi4KKworICAgICAgIFRoZSBvcmRlciBvZiB0aGUgb3RoZXIgPEVNPnRlcm1uYW1lPC9FTT4gIGVudHJpZXMgIGlzICBzaWduaWZpY2FudC4KKyAgICAgICBTaW5jZSAgdGhlIHRlcm1pbmZvIGNvbXBpbGVyIDxTVFJPTkc+dGljPC9TVFJPTkc+IGRvZXMgYSBsZWZ0LXRvLXJpZ2h0IHNjYW4KKyAgICAgICBvZiB0aGUgY2FwYWJpbGl0aWVzLCBzcGVjaWZ5aW5nIHR3byA8U1RST05HPnVzZT08L1NUUk9ORz4gZW50cmllcyB0aGF0IGNvbi0KKyAgICAgICB0YWluIGRpZmZlcmluZyBlbnRyaWVzIGZvciB0aGUgc2FtZSBjYXBhYmlsaXRpZXMgd2lsbCBwcm8tCisgICAgICAgZHVjZSBkaWZmZXJlbnQgcmVzdWx0cyBkZXBlbmRpbmcgb24gIHRoZSAgb3JkZXIgIHRoYXQgIHRoZQorICAgICAgIGVudHJpZXMgIGFyZSAgZ2l2ZW4gaW4uICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gd2lsbCBmbGFnIGFueSBzdWNoIGluY29uLQorICAgICAgIHNpc3RlbmNpZXMgYmV0d2VlbiB0aGUgb3RoZXIgPEVNPnRlcm1uYW1lPC9FTT4gZW50cmllcyBhcyB0aGV5ICBhcmUKKyAgICAgICBmb3VuZC4KKworICAgICAgIEFsdGVybmF0aXZlbHksICBzcGVjaWZ5aW5nIGEgY2FwYWJpbGl0eSA8RU0+YWZ0ZXI8L0VNPiBhIDxTVFJPTkc+dXNlPTwvU1RST05HPiBlbnRyeQorICAgICAgIHRoYXQgY29udGFpbnMgdGhhdCBjYXBhYmlsaXR5IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBzcGVjaS0KKyAgICAgICBmaWNhdGlvbiAgdG8gIGJlICBpZ25vcmVkLiAgIFVzaW5nICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gIHRvIHJlY3JlYXRlIGEKKyAgICAgICBkZXNjcmlwdGlvbiBjYW4gYmUgYSB1c2VmdWwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgZXZlcnktCisgICAgICAgdGhpbmcgIHdhcyAgc3BlY2lmaWVkICBjb3JyZWN0bHkgIGluICB0aGUgIG9yaWdpbmFsIHNvdXJjZQorICAgICAgIGRlc2NyaXB0aW9uLgorCisgICAgICAgQW5vdGhlciBlcnJvciAgdGhhdCAgZG9lcyAgbm90ICBjYXVzZSAgaW5jb3JyZWN0ICBjb21waWxlZAorICAgICAgIGZpbGVzLCAgYnV0IHdpbGwgc2xvdyBkb3duIHRoZSBjb21waWxhdGlvbiB0aW1lLCBpcyBzcGVjaS0KKyAgICAgICBmeWluZyBleHRyYSA8U1RST05HPnVzZT08L1NUUk9ORz4gZmllbGRzICB0aGF0ICBhcmUgIHN1cGVyZmx1b3VzLiAgIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPgorICAgICAgIHdpbGwgIGZsYWcgIGFueSAgb3RoZXIgIDxFTT50ZXJtbmFtZTwvRU0+IDxFTT51c2U9PC9FTT4gZmllbGRzIHRoYXQgd2VyZSBub3QKKyAgICAgICBuZWVkZWQuCisKKyAgIDxTVFJPTkc+Q2hhbmdpbmc8L1NUUk9ORz4gPFNUUk9ORz5EYXRhYmFzZXM8L1NUUk9ORz4gPFNUUk9ORz5bLUE8L1NUUk9ORz4gPEVNPmRpcmVjdG9yeTwvRU0+XSBbLUIgPEVNPmRpcmVjdG9yeTwvRU0+XQorICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgY29tcGlsZWQgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiAgZGF0YWJhc2UgIGlzICB0YWtlbgorICAgICAgIGZyb20gIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk1JTkZPPC9TVFJPTkc+IC4gIElmIHRoZSB2YXJpYWJsZQorICAgICAgIGlzIG5vdCBkZWZpbmVkLCBvciB0aGUgdGVybWluYWwgaXMgbm90IGZvdW5kIGluIHRoYXQgbG9jYS0KKyAgICAgICB0aW9uLCAgdGhlICBzeXN0ZW0gIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gIGRhdGFiYXNlLCBpbiA8U1RST05HPi91c3Ivc2hhcmUvdGVyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bWluZm88L1NUUk9ORz4sIHdpbGwgYmUgdXNlZC4gIFRoZSBvcHRpb25zIDxTVFJPTkc+LUE8L1NUUk9ORz4gYW5kIDxTVFJPTkc+LUI8L1NUUk9ORz4gbWF5IGJlIHVzZWQgdG8KKyAgICAgICBvdmVycmlkZSAgdGhpcyAgbG9jYXRpb24uICBUaGUgPFNUUk9ORz4tQTwvU1RST05HPiBvcHRpb24gd2lsbCBzZXQgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPgorICAgICAgIGZvciB0aGUgZmlyc3QgPEVNPnRlcm1uYW1lPC9FTT4gYW5kIHRoZSA8U1RST05HPi1CPC9TVFJPTkc+IG9wdGlvbiB3aWxsIHNldCA8U1RST05HPlRFUk1JTkZPPC9TVFJPTkc+CisgICAgICAgZm9yICB0aGUgIG90aGVyICA8RU0+dGVybW5hbWVzPC9FTT4uICAgV2l0aCB0aGlzLCBpdCBpcyBwb3NzaWJsZSB0bworICAgICAgIGNvbXBhcmUgZGVzY3JpcHRpb25zIGZvciBhIHRlcm1pbmFsICB3aXRoICB0aGUgIHNhbWUgIG5hbWUKKyAgICAgICBsb2NhdGVkICBpbiAgdHdvICBkaWZmZXJlbnQgZGF0YWJhc2VzLiAgVGhpcyBpcyB1c2VmdWwgZm9yCisgICAgICAgY29tcGFyaW5nIGRlc2NyaXB0aW9ucyBmb3IgdGhlIHNhbWUgIHRlcm1pbmFsICBjcmVhdGVkICBieQorICAgICAgIGRpZmZlcmVudCBwZW9wbGUuCisKKyAgIDxTVFJPTkc+T3RoZXI8L1NUUk9ORz4gPFNUUk9ORz5PcHRpb25zPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4tMTwvU1RST05HPiAgIGNhdXNlcyAgdGhlICBmaWVsZHMgIHRvIGJlIHByaW50ZWQgb3V0IG9uZSB0byBhIGxpbmUuCisgICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBmaWVsZHMgd2lsbCBiZSBwcmludGVkICBzZXZlcmFsICB0byAgYQorICAgICAgICAgICAgbGluZSB0byBhIG1heGltdW0gd2lkdGggb2YgNjAgY2hhcmFjdGVycy4KKworICAgICAgIDxTVFJPTkc+LWE8L1NUUk9ORz4gICB0ZWxscyAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+ICB0byAgcmV0YWluIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzCisgICAgICAgICAgICByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIHRoZW0uICBDYXBhYmlsaXRpZXMgIGFyZSAgY29tLQorICAgICAgICAgICAgbWVudGVkIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggYSBwZXJpb2QuCisKKyAgICAgICA8U1RST05HPi1FPC9TVFJPTkc+ICAgRHVtcCAgdGhlICBjYXBhYmlsaXRpZXMgIG9mICB0aGUgIGdpdmVuICB0ZXJtaW5hbCAgYXMKKyAgICAgICAgICAgIHRhYmxlcywgbmVlZGVkIGluIHRoZSBDIGluaXRpYWxpemVyICBmb3IgIGEgIFRFUk1UWVBFCisgICAgICAgICAgICBzdHJ1Y3R1cmUgICh0aGUgIHRlcm1pbmFsIGNhcGFiaWxpdHkgc3RydWN0dXJlIGluIHRoZQorICAgICAgICAgICAgPFNUUk9ORz4mbHQ7dGVybS5oJmd0OzwvU1RST05HPikuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIHByZXBhcmluZyAgdmVyLQorICAgICAgICAgICAgc2lvbnMgIG9mICB0aGUgIGN1cnNlcyAgbGlicmFyeSBoYXJkd2lyZWQgZm9yIGEgZ2l2ZW4KKyAgICAgICAgICAgIHRlcm1pbmFsIHR5cGUuICBUaGUgdGFibGVzIGFyZSBhbGwgIGRlY2xhcmVkICBzdGF0aWMsCisgICAgICAgICAgICBhbmQgIGFyZSAgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIGFuZCB0aGUgbmFtZSBvZgorICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgdGVybWluYWwgZW50cnkuCisKKyAgICAgICAgICAgIEJlZm9yZSBuY3Vyc2VzIDUuMCwgdGhlIHNwbGl0IGJldHdlZW4gdGhlIDxTVFJPTkc+LWU8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz4tRTwvU1RST05HPgorICAgICAgICAgICAgb3B0aW9ucyAgd2FzICBub3QgIG5lZWRlZDsgIGJ1dCAgc3VwcG9ydCBmb3IgZXh0ZW5kZWQKKyAgICAgICAgICAgIG5hbWVzIHJlcXVpcmVkIG1ha2luZyB0aGUgYXJyYXlzIG9mIHRlcm1pbmFsIGNhcGFiaWwtCisgICAgICAgICAgICBpdGllcyBzZXBhcmF0ZSBmcm9tIHRoZSBURVJNVFlQRSBzdHJ1Y3R1cmUuCisKKyAgICAgICA8U1RST05HPi1lPC9TVFJPTkc+ICAgRHVtcCAgdGhlICBjYXBhYmlsaXRpZXMgIG9mIHRoZSBnaXZlbiB0ZXJtaW5hbCBhcyBhIEMKKyAgICAgICAgICAgIGluaXRpYWxpemVyIGZvciBhIFRFUk1UWVBFICBzdHJ1Y3R1cmUgICh0aGUgIHRlcm1pbmFsCisgICAgICAgICAgICBjYXBhYmlsaXR5ICBzdHJ1Y3R1cmUgIGluIHRoZSA8U1RST05HPiZsdDt0ZXJtLmgmZ3Q7PC9TVFJPTkc+KS4gIFRoaXMgb3B0aW9uCisgICAgICAgICAgICBpcyAgdXNlZnVsICBmb3IgIHByZXBhcmluZyAgdmVyc2lvbnMgIG9mICB0aGUgIGN1cnNlcworICAgICAgICAgICAgbGlicmFyeSBoYXJkd2lyZWQgZm9yIGEgZ2l2ZW4gdGVybWluYWwgdHlwZS4KKworICAgICAgIDxTVFJPTkc+LUY8L1NUUk9ORz4gICBjb21wYXJlICB0ZXJtaW5mbyAgZmlsZXMuICBUaGlzIGFzc3VtZXMgdGhhdCB0d28gZm9sLQorICAgICAgICAgICAgbG93aW5nICBhcmd1bWVudHMgIGFyZSAgZmlsZW5hbWVzLiAgIFRoZSAgZmlsZXMgICBhcmUKKyAgICAgICAgICAgIHNlYXJjaGVkICBmb3IgIHBhaXJ3aXNlIG1hdGNoZXMgYmV0d2VlbiBlbnRyaWVzLCB3aXRoCisgICAgICAgICAgICB0d28gZW50cmllcyBjb25zaWRlcmVkIHRvIG1hdGNoIGlmIGFueSBvZiB0aGVpciBuYW1lcworICAgICAgICAgICAgZG8uICAgVGhlICByZXBvcnQgIHByaW50ZWQgIHRvICBzdGFuZGFyZCBvdXRwdXQgbGlzdHMKKyAgICAgICAgICAgIGVudHJpZXMgd2l0aCAgbm8gIG1hdGNoZXMgIGluICB0aGUgIG90aGVyICBmaWxlLCAgYW5kCisgICAgICAgICAgICBlbnRyaWVzICB3aXRoICBtb3JlIHRoYW4gb25lIG1hdGNoLiAgRm9yIGVudHJpZXMgd2l0aAorICAgICAgICAgICAgZXhhY3RseSBvbmUgbWF0Y2ggaXQgaW5jbHVkZXMgIGEgIGRpZmZlcmVuY2UgIHJlcG9ydC4KKyAgICAgICAgICAgIE5vcm1hbGx5LCAgdG8gIHJlZHVjZSAgdGhlICB2b2x1bWUgb2YgdGhlIHJlcG9ydCwgdXNlCisgICAgICAgICAgICByZWZlcmVuY2VzIGFyZSBub3QgcmVzb2x2ZWQgYmVmb3JlIGxvb2tpbmcgIGZvciAgZGlmLQorICAgICAgICAgICAgZmVyZW5jZXMsIGJ1dCByZXNvbHV0aW9uIGNhbiBiZSBmb3JjZWQgYnkgYWxzbyBzcGVjaS0KKyAgICAgICAgICAgIGZ5aW5nIDxTVFJPTkc+LXI8L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPi1mPC9TVFJPTkc+ICAgRGlzcGxheSAgY29tcGxleCAgdGVybWluZm8gIHN0cmluZ3MgICB3aGljaCAgIGNvbnRhaW4KKyAgICAgICAgICAgIGlmL3RoZW4vZWxzZS9lbmRpZiBleHByZXNzaW9ucyBpbmRlbnRlZCBmb3IgcmVhZGFiaWwtCisgICAgICAgICAgICBpdHkuCisKKyAgICAgICA8U1RST05HPi1HPC9TVFJPTkc+ICAgRGlzcGxheSBjb25zdGFudCBsaXRlcmFscyBpbiBkZWNpbWFsIGZvcm0gcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIHRoZWlyIGNoYXJhY3RlciBlcXVpdmFsZW50cy4KKworICAgICAgIDxTVFJPTkc+LWc8L1NUUk9ORz4gICBEaXNwbGF5ICBjb25zdGFudCAgY2hhcmFjdGVyICBsaXRlcmFscyBpbiBxdW90ZWQgZm9ybQorICAgICAgICAgICAgcmF0aGVyIHRoYW4gdGhlaXIgZGVjaW1hbCBlcXVpdmFsZW50cy4KKworICAgICAgIDxTVFJPTkc+LWk8L1NUUk9ORz4gICBBbmFseXplIHRoZSBpbml0aWFsaXphdGlvbiAoPFNUUk9ORz5pczE8L1NUUk9ORz4sIDxTVFJPTkc+aXMyPC9TVFJPTkc+LCA8U1RST05HPmlzMzwvU1RST05HPiksIGFuZCByZXNldAorICAgICAgICAgICAgKDxTVFJPTkc+cnMxPC9TVFJPTkc+LCAgPFNUUk9ORz5yczI8L1NUUk9ORz4sICA8U1RST05HPnJzMzwvU1RST05HPiksICBzdHJpbmdzICBpbiAgdGhlIGVudHJ5LiAgRm9yIGVhY2gKKyAgICAgICAgICAgIHN0cmluZywgdGhlIGNvZGUgdHJpZXMgdG8gYW5hbHl6ZSBpdCBpbnRvIGFjdGlvbnMgIGluCisgICAgICAgICAgICB0ZXJtcyBvZiB0aGUgb3RoZXIgY2FwYWJpbGl0aWVzIGluIHRoZSBlbnRyeSwgY2VydGFpbgorICAgICAgICAgICAgWDMuNjQvSVNPIDY0MjkvRUNNQS00OCBjYXBhYmlsaXRpZXMsIGFuZCBjZXJ0YWluICBERUMKKyAgICAgICAgICAgIFZULXNlcmllcyAgcHJpdmF0ZSAgbW9kZXMgKHRoZSBzZXQgb2YgcmVjb2duaXplZCBzcGUtCisgICAgICAgICAgICBjaWFsIHNlcXVlbmNlcyBoYXMgIGJlZW4gIHNlbGVjdGVkICBmb3IgIGNvbXBsZXRlbmVzcworICAgICAgICAgICAgb3ZlciAgdGhlICBleGlzdGluZyAgdGVybWluZm8gZGF0YWJhc2UpLiAgRWFjaCByZXBvcnQKKyAgICAgICAgICAgIGxpbmUgY29uc2lzdHMgb2YgdGhlIGNhcGFiaWxpdHkgbmFtZSwgZm9sbG93ZWQgIGJ5ICBhCisgICAgICAgICAgICBjb2xvbiBhbmQgc3BhY2UsIGZvbGxvd2VkIGJ5IGEgcHJpbnRhYmxlIGV4cGFuc2lvbiBvZgorICAgICAgICAgICAgdGhlIGNhcGFiaWxpdHkgc3RyaW5nIHdpdGggc2VjdGlvbnMgIG1hdGNoaW5nICByZWNvZy0KKyAgICAgICAgICAgIG5pemVkICBhY3Rpb25zICB0cmFuc2xhdGVkIGludG8ge30tYnJhY2tldGVkIGRlc2NyaXAtCisgICAgICAgICAgICB0aW9ucy4gIEhlcmUgIGlzICBhICBsaXN0ICBvZiAgdGhlICBERUMvQU5TSSAgc3BlY2lhbAorICAgICAgICAgICAgc2VxdWVuY2VzIHJlY29nbml6ZWQ6IGkuCisKKyAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgTWVhbmluZworICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIFJJUyAgICAgICAgICAgZnVsbCByZXNldAorICAgICAgICAgICAgICAgICAgU0MgICAgICAgICAgICBzYXZlIGN1cnNvcgorICAgICAgICAgICAgICAgICAgUkMgICAgICAgICAgICByZXN0b3JlIGN1cnNvcgorICAgICAgICAgICAgICAgICAgTEwgICAgICAgICAgICBob21lLWRvd24KKyAgICAgICAgICAgICAgICAgIFJTUiAgICAgICAgICAgcmVzZXQgc2Nyb2xsIHJlZ2lvbgorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIERFQ1NUUiAgICAgICAgc29mdCByZXNldCAoVlQzMjApCisgICAgICAgICAgICAgICAgICBTN0MxVCAgICAgICAgIDctYml0IGNvbnRyb2xzIChWVDIyMCkKKyAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBJU08gREVDIEcwICAgIGVuYWJsZSBERUMgZ3JhcGhpY3MgZm9yIEcwCisgICAgICAgICAgICAgICAgICBJU08gVUsgRzAgICAgIGVuYWJsZSBVSyBjaGFycyBmb3IgRzAKKyAgICAgICAgICAgICAgICAgIElTTyBVUyBHMCAgICAgZW5hYmxlIFVTIGNoYXJzIGZvciBHMAorICAgICAgICAgICAgICAgICAgSVNPIERFQyBHMSAgICBlbmFibGUgREVDIGdyYXBoaWNzIGZvciBHMQorICAgICAgICAgICAgICAgICAgSVNPIFVLIEcxICAgICBlbmFibGUgVUsgY2hhcnMgZm9yIEcxCisgICAgICAgICAgICAgICAgICBJU08gVVMgRzEgICAgIGVuYWJsZSBVUyBjaGFycyBmb3IgRzEKKyAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBERUNQQU0gICAgICAgIGFwcGxpY2F0aW9uIGtleXBhZCBtb2RlCisgICAgICAgICAgICAgICAgICBERUNQTk0gICAgICAgIG5vcm1hbCBrZXlwYWQgbW9kZQorICAgICAgICAgICAgICAgICAgREVDQU5TSSAgICAgICBlbnRlciBBTlNJIG1vZGUKKyAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBFQ01BWystXUFNICAgIGtleWJvYXJkIGFjdGlvbiBtb2RlCisgICAgICAgICAgICAgICAgICBFQ01BWystXUlSTSAgIGluc2VydCByZXBsYWNlIG1vZGUKKyAgICAgICAgICAgICAgICAgIEVDTUFbKy1dU1JNICAgc2VuZCByZWNlaXZlIG1vZGUKKyAgICAgICAgICAgICAgICAgIEVDTUFbKy1dTE5NICAgbGluZWZlZWQgbW9kZQorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIERFQ1srLV1DS00gICAgYXBwbGljYXRpb24gY3Vyc29yIGtleXMKKyAgICAgICAgICAgICAgICAgIERFQ1srLV1BTk0gICAgc2V0IFZUNTIgbW9kZQorICAgICAgICAgICAgICAgICAgREVDWystXUNPTE0gICAxMzItY29sdW1uIG1vZGUKKworICAgICAgICAgICAgICAgICAgREVDWystXVNDTE0gICBzbW9vdGggc2Nyb2xsCisgICAgICAgICAgICAgICAgICBERUNbKy1dU0NOTSAgIHJldmVyc2UgdmlkZW8gbW9kZQorICAgICAgICAgICAgICAgICAgREVDWystXU9NICAgICBvcmlnaW4gbW9kZQorICAgICAgICAgICAgICAgICAgREVDWystXUFXTSAgICB3cmFwYXJvdW5kIG1vZGUKKyAgICAgICAgICAgICAgICAgIERFQ1srLV1BUk0gICAgYXV0by1yZXBlYXQgbW9kZQorCisgICAgICAgICAgICBJdCAgYWxzbyAgcmVjb2duaXplcyAgYSAgU0dSICBhY3Rpb24gY29ycmVzcG9uZGluZyB0bworICAgICAgICAgICAgQU5TSS9JU08gNjQyOS9FQ01BIFNldCBHcmFwaGljcyBSZW5kaXRpb24sICB3aXRoICB0aGUKKyAgICAgICAgICAgIHZhbHVlcyAgTk9STUFMLCAgQk9MRCwgVU5ERVJMSU5FLCBCTElOSywgYW5kIFJFVkVSU0UuCisgICAgICAgICAgICBBbGwgYnV0IE5PUk1BTCBtYXkgYmUgcHJlZml4ZWQgd2l0aCBgKycgKHR1cm4gb24pICBvcgorICAgICAgICAgICAgYC0nICh0dXJuIG9mZikuCisKKyAgICAgICBBbiBTR1IwIGRlc2lnbmF0ZXMgYW4gZW1wdHkgaGlnaGxpZ2h0IHNlcXVlbmNlIChlcXVpdmFsZW50CisgICAgICAgdG8ge1NHUjpOT1JNQUx9KS4KKworICAgICAgIDxTVFJPTkc+LWw8L1NUUk9ORz4gICBTZXQgb3V0cHV0IGZvcm1hdCB0byB0ZXJtaW5mby4KKworICAgICAgIDxTVFJPTkc+LXA8L1NUUk9ORz4gICBJZ25vcmUgcGFkZGluZyBzcGVjaWZpY2F0aW9ucyB3aGVuIGNvbXBhcmluZyBzdHJpbmdzLgorCisgICAgICAgPFNUUk9ORz4tcTwvU1RST05HPiAgIE1ha2UgIHRoZSBjb21wYXJpc29uIGxpc3Rpbmcgc2hvcnRlciBieSBvbWl0dGluZyBzdWItCisgICAgICAgICAgICBoZWFkaW5ncywgYW5kIHVzaW5nICItIiBmb3IgYWJzZW50IGNhcGFiaWxpdGllcywgICJAIgorICAgICAgICAgICAgZm9yIGNhbmNlbGVkIHJhdGhlciB0aGFuICJOVUxMIi4KKworICAgICAgIDxTVFJPTkc+LVI8L1NUUk9ORz48RU0+c3Vic2V0PC9FTT4KKyAgICAgICAgICAgIFJlc3RyaWN0ICBvdXRwdXQgIHRvICBhIGdpdmVuIHN1YnNldC4gIFRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgICBmb3IgdXNlIHdpdGggYXJjaGFpYyB2ZXJzaW9ucyBvZiB0ZXJtaW5mbyBsaWtlICB0aG9zZQorICAgICAgICAgICAgb24gIFNWcjEsICBVbHRyaXgsICBvciAgSFAvVVggdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUKKyAgICAgICAgICAgIGZ1bGwgc2V0IG9mIFNWUjQvWFNJIEN1cnNlcyAgdGVybWluZm87ICBhbmQgIHZhcmlhbnRzCisgICAgICAgICAgICBzdWNoIGFzIEFJWCB0aGF0IGhhdmUgdGhlaXIgb3duIGV4dGVuc2lvbnMgaW5jb21wYXRpLQorICAgICAgICAgICAgYmxlIHdpdGggU1ZyNC9YU0kuICBBdmFpbGFibGUgIHRlcm1pbmZvICBzdWJzZXRzICBhcmUKKyAgICAgICAgICAgICJTVnIxIiwgICJVbHRyaXgiLCAgIkhQIiwgIGFuZCAiQUlYIjsgc2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgIGZvciBkZXRhaWxzLiAgWW91IGNhbiBhbHNvIGNob29zZSAgdGhlICBzdWJzZXQgICJCU0QiCisgICAgICAgICAgICB3aGljaCAgc2VsZWN0cyBvbmx5IGNhcGFiaWxpdGllcyB3aXRoIHRlcm1jYXAgZXF1aXZhLQorICAgICAgICAgICAgbGVudHMgcmVjb2duaXplZCBieSA0LjRCU0QuCisKKyAgICAgICA8U1RST05HPi1zPC9TVFJPTkc+IDxFTT5bZHxpfGx8Y108L0VNPgorICAgICAgICAgICAgVGhlIDxTVFJPTkc+LXM8L1NUUk9ORz4gb3B0aW9uICBzb3J0cyAgdGhlICBmaWVsZHMgIHdpdGhpbiAgZWFjaCAgdHlwZQorICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBhcmd1bWVudCBiZWxvdzoKKworICAgICAgICAgICAgPFNUUk9ORz5kPC9TVFJPTkc+ICAgIGxlYXZlICBmaWVsZHMgIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIHN0b3JlZAorICAgICAgICAgICAgICAgICBpbiB0aGUgPEVNPnRlcm1pbmZvPC9FTT4gZGF0YWJhc2UuCisKKyAgICAgICAgICAgIDxTVFJPTkc+aTwvU1RST05HPiAgICBzb3J0IGJ5IDxFTT50ZXJtaW5mbzwvRU0+IG5hbWUuCisKKyAgICAgICAgICAgIDxTVFJPTkc+bDwvU1RST05HPiAgICBzb3J0IGJ5IHRoZSBsb25nIEMgdmFyaWFibGUgbmFtZS4KKworICAgICAgICAgICAgPFNUUk9ORz5jPC9TVFJPTkc+ICAgIHNvcnQgYnkgdGhlIDxFTT50ZXJtY2FwPC9FTT4gbmFtZS4KKworICAgICAgICAgICAgSWYgdGhlIDxTVFJPTkc+LXM8L1NUUk9ORz4gb3B0aW9uIGlzIG5vdCBnaXZlbiwgdGhlIGZpZWxkcyBwcmludGVkIG91dAorICAgICAgICAgICAgd2lsbCAgYmUgIHNvcnRlZCAgYWxwaGFiZXRpY2FsbHkgYnkgdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gbmFtZQorICAgICAgICAgICAgd2l0aGluIGVhY2ggdHlwZSwgZXhjZXB0IGluIHRoZSBjYXNlIG9mIHRoZSA8U1RST05HPi1DPC9TVFJPTkc+IG9yIHRoZQorICAgICAgICAgICAgPFNUUk9ORz4tTDwvU1RST05HPiBvcHRpb25zLCB3aGljaCBjYXVzZSB0aGUgc29ydGluZyB0byBiZSBkb25lIGJ5IHRoZQorICAgICAgICAgICAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IG5hbWUgb3IgdGhlIGxvbmcgIEMgIHZhcmlhYmxlICBuYW1lLCAgcmVzcGVjLQorICAgICAgICAgICAgdGl2ZWx5LgorCisgICAgICAgPFNUUk9ORz4tVDwvU1RST05HPiAgIGVsaW1pbmF0ZXMgIHNpemUtcmVzdHJpY3Rpb25zICBvbiB0aGUgZ2VuZXJhdGVkIHRleHQuCisgICAgICAgICAgICBUaGlzIGlzIG1haW5seSB1c2VmdWwgZm9yIHRlc3RpbmcgYW5kIGFuYWx5c2lzLCBzaW5jZQorICAgICAgICAgICAgdGhlIGNvbXBpbGVkIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCAoZS5nLiwgMTAyMyBmb3IKKyAgICAgICAgICAgIHRlcm1jYXAsIDQwOTYgZm9yIHRlcm1pbmZvKS4KKworICAgICAgIDxTVFJPTkc+LXQ8L1NUUk9ORz4gICB0ZWxscyAgPFNUUk9ORz50aWM8L1NUUk9ORz4gIHRvICBkaXNjYXJkICBjb21tZW50ZWQtb3V0ICBjYXBhYmlsaXRpZXMuCisgICAgICAgICAgICBOb3JtYWxseSAgd2hlbiAgdHJhbnNsYXRpbmcgZnJvbSB0ZXJtaW5mbyB0byB0ZXJtY2FwLAorICAgICAgICAgICAgdW50cmFuc2xhdGFibGUgY2FwYWJpbGl0aWVzIGFyZSBjb21tZW50ZWQtb3V0LgorCisgICAgICAgPFNUUk9ORz4tVTwvU1RST05HPiAgIHRlbGxzIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiB0byAgbm90ICBwb3N0LXByb2Nlc3MgIHRoZSAgZGF0YSAgYWZ0ZXIKKyAgICAgICAgICAgIHBhcnNpbmcgIHRoZSAgc291cmNlICBmaWxlLiAgIFRoaXMgZmVhdHVyZSBoZWxwcyB3aGVuCisgICAgICAgICAgICBjb21wYXJpbmcgdGhlIGFjdHVhbCBjb250ZW50cyBvZiAgdHdvICBzb3VyY2UgIGZpbGVzLAorICAgICAgICAgICAgc2luY2UgIGl0ICBleGNsdWRlcyB0aGUgaW5mZXJlbmNlcyB0aGF0IDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiBtYWtlcworICAgICAgICAgICAgdG8gZmlsbCBpbiBtaXNzaW5nIGRhdGEuCisKKyAgICAgICA8U1RST05HPi1WPC9TVFJPTkc+ICAgcmVwb3J0cyB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzIHdoaWNoIHdhcyB1c2VkIGluIHRoaXMKKyAgICAgICAgICAgIHByb2dyYW0sIGFuZCBleGl0cy4KKworICAgICAgIDxTVFJPTkc+LXY8L1NUUk9ORz4gPEVNPm48L0VNPiBwcmludHMgIG91dCAgdHJhY2luZyBpbmZvcm1hdGlvbiBvbiBzdGFuZGFyZCBlcnJvciBhcworICAgICAgICAgICAgdGhlIHByb2dyYW0gcnVucy4gIEhpZ2hlciB2YWx1ZXMgb2YgbiBpbmR1Y2UgIGdyZWF0ZXIKKyAgICAgICAgICAgIHZlcmJvc2l0eS4KKworICAgICAgIDxTVFJPTkc+LXc8L1NUUk9ORz4gPEVNPndpZHRoPC9FTT4KKyAgICAgICAgICAgIGNoYW5nZXMgdGhlIG91dHB1dCB0byA8RU0+d2lkdGg8L0VNPiBjaGFyYWN0ZXJzLgorCisgICAgICAgPFNUUk9ORz4teDwvU1RST05HPiAgIHByaW50ICAgaW5mb3JtYXRpb24gIGZvciAgdXNlci1kZWZpbmVkICBjYXBhYmlsaXRpZXMuCisgICAgICAgICAgICBUaGVzZSBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgdGVybWluZm8gcmVwZXJ0b2lyZSB3aGljaAorICAgICAgICAgICAgY2FuIGJlIGxvYWRlZCB1c2luZyB0aGUgPFNUUk9ORz4teDwvU1RST05HPiBvcHRpb24gb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mbyBDb21waWxlZCAgICAgIHRlcm1pbmFsICAgICBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UuCisKKworPC9QUkU+Cis8SDI+RVhURU5TSU9OUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz4tRTwvU1RST05HPiwgPFNUUk9ORz4tRjwvU1RST05HPiwgPFNUUk9ORz4tRzwvU1RST05HPiwgPFNUUk9ORz4tUjwvU1RST05HPiwgPFNUUk9ORz4tVDwvU1RST05HPiwgPFNUUk9ORz4tVjwvU1RST05HPiwgPFNUUk9ORz4tYTwvU1RST05HPiwgPFNUUk9ORz4tZTwvU1RST05HPiwgPFNUUk9ORz4tZjwvU1RST05HPiwgPFNUUk9ORz4tZzwvU1RST05HPiwgPFNUUk9ORz4taTwvU1RST05HPiwgPFNUUk9ORz4tbDwvU1RST05HPiwgPFNUUk9ORz4tcDwvU1RST05HPiwgPFNUUk9ORz4tcTwvU1RST05HPgorICAgICAgIGFuZCA8U1RST05HPi10PC9TVFJPTkc+IG9wdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gU1ZyNCBjdXJzZXMuCisKKyAgICAgICBUaGUgPFNUUk9ORz4tcjwvU1RST05HPiBvcHRpb24ncyBub3Rpb24gb2YgYHRlcm1jYXAnIGNhcGFiaWxpdGllcyBpcyBTeXN0ZW0KKyAgICAgICBWIFJlbGVhc2UgNCdzLiAgQWN0dWFsIEJTRCBjdXJzZXMgIHZlcnNpb25zICB3aWxsICBoYXZlICBhCisgICAgICAgbW9yZSAgcmVzdHJpY3RlZCAgc2V0LiAgVG8gc2VlIG9ubHkgdGhlIDQuNEJTRCBzZXQsIHVzZSA8U1RST05HPi1yPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4tUkJTRDwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5CVUdTPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPi1GPC9TVFJPTkc+IG9wdGlvbiBvZiA8U1RST05HPjxBIEhSRUY9ImluZm9jbXAuMW0uaHRtbCI+aW5mb2NtcCgxbSk8L0E+PC9TVFJPTkc+IHNob3VsZCBiZSBhIDxTVFJPTkc+PEEgSFJFRj0idG9lLjFtLmh0bWwiPnRvZSgxbSk8L0E+PC9TVFJPTkc+IG1vZGUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvKDFtKTwvQT48L1NUUk9ORz4sICAgIDxTVFJPTkc+PEEgSFJFRj0iaW5mb3RvY2FwLjFtLmh0bWwiPmluZm90b2NhcCgxbSk8L0E+PC9TVFJPTkc+LCAgICAgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4sICAgICA8U1RST05HPjxBIEhSRUY9InRvZS4xbS5odG1sIj50b2UoMW0pPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgRXJpYyBTLiBSYXltb25kICZsdDtlc3JAc25hcmsudGh5cnN1cy5jb20mZ3Q7IGFuZAorICAgICAgIFRob21hcyBFLiBEaWNrZXkgJmx0O2RpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldCZndDsKKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2luZm90b2NhcC4xbS5odG1sIGIvZG9jL2h0bWwvbWFuL2luZm90b2NhcC4xbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzU5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vaW5mb3RvY2FwLjFtLmh0bWwKQEAgLTAsMCArMSwxMDggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGluZm90b2NhcC4xbSx2IDEuOCAyMDA2LzEyLzI0IDIwOjEzOjU2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmluZm90b2NhcCAxbTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmluZm90b2NhcCAxbTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iaW5mb3RvY2FwLjFtLmh0bWwiPmluZm90b2NhcCgxbSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwKDFtKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluZm90b2NhcDwvU1RST05HPiAgLSBjb252ZXJ0IGEgPEVNPnRlcm1pbmZvPC9FTT4gZGVzY3JpcHRpb24gaW50byBhIDxFTT50ZXJtY2FwPC9FTT4KKyAgICAgICBkZXNjcmlwdGlvbgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5mb3RvY2FwPC9TVFJPTkc+IFs8U1RST05HPi12PC9TVFJPTkc+PEVNPm48L0VNPiA8RU0+d2lkdGg8L0VNPl0gIFs8U1RST05HPi1WPC9TVFJPTkc+XSBbPFNUUk9ORz4tMTwvU1RST05HPl0gWzxTVFJPTkc+LXc8L1NUUk9ORz4gPEVNPndpZHRoPC9FTT5dIDxFTT5maWxlPC9FTT4gLiAuIC4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluZm90b2NhcDwvU1RST05HPiBsb29rcyBpbiA8RU0+ZmlsZTwvRU0+IGZvciAgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiAgZGVzY3JpcHRpb25zLiAgIEZvcgorICAgICAgIGVhY2ggb25lIGZvdW5kLCBhbiBlcXVpdmFsZW50IDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiBkZXNjcmlwdGlvbiBpcyB3cml0LQorICAgICAgIHRlbiB0byBzdGFuZGFyZCBvdXRwdXQuICAgVGVybWluZm8gIDxTVFJPTkc+dXNlPC9TVFJPTkc+ICBjYXBhYmlsaXRpZXMgIGFyZQorICAgICAgIHRyYW5zbGF0ZWQgZGlyZWN0bHkgdG8gdGVybWNhcCA8U1RST05HPnRjPC9TVFJPTkc+IGNhcGFiaWxpdGllcy4KKworICAgICAgIDxTVFJPTkc+LXY8L1NUUk9ORz4gICBwcmludCAgb3V0ICB0cmFjaW5nICBpbmZvcm1hdGlvbiBvbiBzdGFuZGFyZCBlcnJvciBhcworICAgICAgICAgICAgdGhlIHByb2dyYW0gcnVucy4KKworICAgICAgIDxTVFJPTkc+LVY8L1NUUk9ORz4gICBwcmludCBvdXQgdGhlIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gaW4gdXNlIG9uICBzdGFuLQorICAgICAgICAgICAgZGFyZCBlcnJvciBhbmQgZXhpdC4KKworICAgICAgIDxTVFJPTkc+LTE8L1NUUk9ORz4gICBjYXVzZSAgdGhlIGZpZWxkcyB0byBwcmludCBvdXQgb25lIHRvIGEgbGluZS4gIE90aGVyLQorICAgICAgICAgICAgd2lzZSwgdGhlIGZpZWxkcyB3aWxsIGJlIHByaW50ZWQgc2V2ZXJhbCB0byBhIGxpbmUgdG8KKyAgICAgICAgICAgIGEgbWF4aW11bSB3aWR0aCBvZiA2MCBjaGFyYWN0ZXJzLgorCisgICAgICAgPFNUUk9ORz4tdzwvU1RST05HPiAgIGNoYW5nZSB0aGUgb3V0cHV0IHRvIDxFTT53aWR0aDwvRU0+IGNoYXJhY3RlcnMuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mbyBDb21waWxlZCAgICAgIHRlcm1pbmFsICAgICBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhpcyB1dGlsaXR5IGlzIGFjdHVhbGx5IGEgbGluayAgdG8gIDxFTT50aWM8L0VNPiwgIHJ1bm5pbmcgIGluICA8RU0+LUM8L0VNPgorICAgICAgIG1vZGUuICBZb3UgY2FuIHVzZSBvdGhlciA8RU0+dGljPC9FTT4gb3B0aW9ucyBzdWNoIGFzIDxTVFJPTkc+LWY8L1NUUk9ORz4gYW5kICA8U1RST05HPi14PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKworICAgICAgIFRoaXMgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iaW5mb3RvY2FwLjFtLmh0bWwiPmluZm90b2NhcCgxbSk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9rZXlfZGVmaW5lZC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2tleV9kZWZpbmVkLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxZGViZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9rZXlfZGVmaW5lZC4zeC5odG1sCkBAIC0wLDAgKzEsMTAzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMjAwMworICAqIEBJZDoga2V5X2RlZmluZWQuM3gsdiAxLjQgMjAwNi8wMi8yNSAyMTo1MDowMSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5rZXlfZGVmaW5lZCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmtleV9kZWZpbmVkIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJrZXlfZGVmaW5lZC4zeC5odG1sIj5rZXlfZGVmaW5lZCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleV9kZWZpbmVkLjN4Lmh0bWwiPmtleV9kZWZpbmVkKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmtleV9kZWZpbmVkPC9TVFJPTkc+IC0gY2hlY2sgaWYgYSBrZXljb2RlIGlzIGRlZmluZWQKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5rZXlfZGVmaW5lZChjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZGVmaW5pdGlvbik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LiAgSXQgcGVybWl0cyBhbgorICAgICAgIGFwcGxpY2F0aW9uIHRvIGRldGVybWluZSBpZiBhIHN0cmluZyBpcyBjdXJyZW50bHkgYm91bmQgdG8KKyAgICAgICBhbnkga2V5Y29kZS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgSWYgIHRoZSAgc3RyaW5nICBpcyBib3VuZCB0byBhIGtleWNvZGUsIGl0cyB2YWx1ZSAoZ3JlYXRlcgorICAgICAgIHRoYW4gemVybykgaXMgcmV0dXJuZWQuICBJZiBubyBrZXljb2RlIGlzIGJvdW5kLCAgemVybyAgaXMKKyAgICAgICByZXR1cm5lZC4gICBJZiAgdGhlICBzdHJpbmcgIGNvbmZsaWN0cyB3aXRoIGxvbmdlciBzdHJpbmdzCisgICAgICAgd2hpY2ggYXJlIGJvdW5kIHRvIGtleXMsIC0xIGlzIHJldHVybmVkLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byAgbmN1cnNlcy4gICBUaGV5ICB3ZXJlICBub3QKKyAgICAgICBzdXBwb3J0ZWQgIG9uICBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSAgY29uLQorICAgICAgIGRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImRlZmluZV9rZXkuM3guaHRtbCI+ZGVmaW5lX2tleSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgRGlja2V5LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleV9kZWZpbmVkLjN4Lmh0bWwiPmtleV9kZWZpbmVkKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL2tleWJvdW5kLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4va2V5Ym91bmQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJkOWRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2tleWJvdW5kLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk5CisgICogQElkOiBrZXlib3VuZC4zeCx2IDEuNiAyMDA2LzAyLzI1IDIxOjQ3OjA2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmtleW9rIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+a2V5b2sgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImtleW9rLjN4Lmh0bWwiPmtleW9rKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+a2V5Ym91bmQ8L1NUUk9ORz4gLSByZXR1cm4gZGVmaW5pdGlvbiBvZiBrZXljb2RlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPFNUUk9ORz5rZXlib3VuZChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5rZXljb2RlLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNvdW50KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICBJdCBwZXJtaXRzIGFuCisgICAgICAgYXBwbGljYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBzdHJpbmcgd2hpY2ggIGlzICBkZWZpbmVkICBpbgorICAgICAgIHRoZSB0ZXJtaW5mbyBmb3Igc3BlY2lmaWMga2V5Y29kZXMuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSA8RU0+a2V5Y29kZTwvRU0+IHBhcmFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBlbHNlIE5VTEwKKyAgICAgICBpcyByZXR1cm5lZC4gIElmIGl0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBkZWZpbmVkICBrZXksCisgICAgICAgdGhlbiAgTlVMTCAgaXMgIHJldHVybmVkLiAgIFRoZSA8RU0+Y291bnQ8L0VNPiBwYXJhbWV0ZXIgaXMgdXNlZCB0bworICAgICAgIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggbXVsdGlwbGUgIGRlZmluaS0KKyAgICAgICB0aW9ucywgIGNvdW50aW5nIGZyb20gemVyby4gIFdoZW4gc3VjY2Vzc2Z1bCwgdGhlIGZ1bmN0aW9uCisgICAgICAgcmV0dXJucyBhIHN0cmluZyB3aGljaCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvICBuY3Vyc2VzLiAgIFRoZXkgIHdlcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlICBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIERpY2tleS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9rZXlvay4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2tleW9rLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzODYxMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9rZXlvay4zeC5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NworICAqIEBJZDoga2V5b2suM3gsdiAxLjkgMjAwNi8wMi8yNSAyMTo0NzowNiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5rZXlvayAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmtleW9rIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleW9rLjN4Lmh0bWwiPmtleW9rKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmtleW9rPC9TVFJPTkc+IC0gZW5hYmxlIG9yIGRpc2FibGUgYSBrZXljb2RlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+a2V5b2soaW50PC9TVFJPTkc+IDxTVFJPTkc+a2V5Y29kZSw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+ZW5hYmxlKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICBJdCBwZXJtaXRzIGFuCisgICAgICAgYXBwbGljYXRpb24gdG8gZGlzYWJsZSBzcGVjaWZpYyBrZXljb2RlcywgcmF0aGVyIHRoYW4gIHVzZQorICAgICAgIHRoZSAgPEVNPmtleXBhZDwvRU0+ICBmdW5jdGlvbiAgdG8gZGlzYWJsZSBhbGwga2V5Y29kZXMuICBLZXlzIHRoYXQKKyAgICAgICBoYXZlIGJlZW4gZGlzYWJsZWQgY2FuIGJlIHJlZW5hYmxlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGtleWNvZGUgIG11c3QgIGJlICBncmVhdGVyICB0aGFuICB6ZXJvLCAgZWxzZSAgRVJSICBpcworICAgICAgIHJldHVybmVkLiAgIElmICBpdCAgZG9lcyAgbm90IGNvcnJlc3BvbmQgdG8gYSBkZWZpbmVkIGtleSwKKyAgICAgICB0aGVuIEVSUiBpcyByZXR1cm5lZC4gIElmIHRoZSA8RU0+ZW5hYmxlPC9FTT4gIHBhcmFtZXRlciAgaXMgIHRydWUsCisgICAgICAgdGhlbiAgdGhlICBrZXkgIG11c3QgIGhhdmUgIGJlZW4gZGlzYWJsZWQsIGFuZCB2aWNlIHZlcnNhLgorICAgICAgIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgT0suCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvICBuY3Vyc2VzLiAgIFRoZXkgIHdlcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlICBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SPC9IMj48UFJFPgorICAgICAgIFRob21hcyBEaWNrZXkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vbGVnYWN5X2NvZGluZy4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL2xlZ2FjeV9jb2RpbmcuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk3YTdiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL2xlZ2FjeV9jb2RpbmcuM3guaHRtbApAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisgICogQElkOiBsZWdhY3lfY29kaW5nLjN4LHYgMS4zIDIwMDYvMTIvMjQgMTU6MTI6NTUgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bGVnYWN5X2NvZGluZyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmxlZ2FjeV9jb2RpbmcgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImxlZ2FjeV9jb2RpbmcuM3guaHRtbCI+bGVnYWN5X2NvZGluZygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibGVnYWN5X2NvZGluZy4zeC5odG1sIj5sZWdhY3lfY29kaW5nKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnVzZV9sZWdhY3lfY29kaW5nPC9TVFJPTkc+IC0gdXNlIHRlcm1pbmFsJ3MgZGVmYXVsdCBjb2xvcnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz51c2VfbGVnYWN5X2NvZGluZyhpbnQ8L1NUUk9ORz4gPFNUUk9ORz5sZXZlbCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8RU0+dXNlPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+bGVnYWN5PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29kaW5nKCk8L0VNPiAgZnVuY3Rpb24gIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUKKyAgICAgICBjdXJzZXMgbGlicmFyeS4gIEl0IGFsbG93cyB0aGUgY2FsbGVyIHRvIGNoYW5nZSB0aGUgcmVzdWx0CisgICAgICAgb2YgIDxTVFJPTkc+dW5jdHJsPC9TVFJPTkc+LCBhbmQgc3VwcHJlc3MgcmVsYXRlZCBjaGVja3Mgd2l0aGluIHRoZSBsaWJyYXJ5CisgICAgICAgdGhhdCB3b3VsZCBub3JtYWxseSBjYXVzZSAgbm9ucHJpbnRpbmcgIGNoYXJhY3RlcnMgIHRvICBiZQorICAgICAgIHJlbmRlcmVkIGluIHZpc2libGUgZm9ybS4gIFRoaXMgYWZmZWN0cyBvbmx5IDgtYml0IGNoYXJhYy0KKyAgICAgICB0ZXJzLgorCisgICAgICAgVGhlIDxFTT5sZXZlbDwvRU0+IHBhcmFtZXRlciBjb250cm9scyB0aGUgcmVzdWx0OgorCisgICAgICAgICAgICAgIDAgICAgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIG5vcm1hbGx5LCByZW5kZXJpbmcgbm9uLQorICAgICAgICAgICAgICAgICAgIHByaW50aW5nIGNoYXJhY3RlcnMgYXMgZGVzY3JpYmVkIGluIDxTVFJPTkc+dW5jdHJsPC9TVFJPTkc+LgorCisgICAgICAgICAgICAgIDEgICAgdGhlICBsaWJyYXJ5IGlnbm9yZXMgPFNUUk9ORz5pc3ByaW50ZjwvU1RST05HPiBmb3IgY29kZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgcmFuZ2UgMTYwLTI1NS4KKworICAgICAgICAgICAgICAyICAgIHRoZSBsaWJyYXJ5IGlnbm9yZXMgPFNUUk9ORz5pc3ByaW50ZjwvU1RST05HPiBmb3IgY29kZXMgaW4gIHRoZQorICAgICAgICAgICAgICAgICAgIHJhbmdlIDEyOC0yNTUuICBJdCBhbHNvIG1vZGlmaWVzIHRoZSBvdXRwdXQgb2YKKyAgICAgICAgICAgICAgICAgICA8U1RST05HPnVuY3RybDwvU1RST05HPiwgc2hvd2luZyBjb2RlcyBpbiB0aGUgcmFuZ2UgMTI4LTE1OSAgYXMKKyAgICAgICAgICAgICAgICAgICBpcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgSWYgIHRoZSAgc2NyZWVuICBoYXMgIG5vdCAgYmVlbiAgaW5pdGlhbGl6ZWQsIG9yIHRoZSA8RU0+bGV2ZWw8L0VNPgorICAgICAgIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDxTVFJPTkc+RVJSPC9TVFJPTkc+LiAgT3RoLQorICAgICAgIGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgcHJldmlvdXMgbGV2ZWw6IDxTVFJPTkc+MDwvU1RST05HPiwgPFNUUk9ORz4xPC9TVFJPTkc+IG9yIDxTVFJPTkc+MjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGlzIHJvdXRpbmUgaXMgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIEl0IHdhcyBub3Qgc3VwcG9ydGVkCisgICAgICAgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjLQorICAgICAgIG9tbWVuZGVkICB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiBuY3Vyc2VzIGV4dGVuc2lvbnMgYmUKKyAgICAgICBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SPC9IMj48UFJFPgorICAgICAgIFRob21hcyBEaWNrZXkgKHRvIHN1cHBvcnQgbHlueCdzIGZvbnQtc3dpdGNoaW5nICBmZWF0dXJlKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibGVnYWN5X2NvZGluZy4zeC5odG1sIj5sZWdhY3lfY29kaW5nKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnUuM3guaHRtbCBiL2RvYy9odG1sL21hbi9tZW51LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiOTE5NQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51LjN4Lmh0bWwKQEAgLTAsMCArMSwyNDEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnUuM3gsdiAxLjE5IDIwMDYvMTEvMDQgMTg6Mzg6MjkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnUgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnU8L1NUUk9ORz4gLSBjdXJzZXMgZXh0ZW5zaW9uIGZvciBwcm9ncmFtbWluZyBtZW51cworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5tZW51PC9TVFJPTkc+IGxpYnJhcnkgcHJvdmlkZXMgdGVybWluYWwtaW5kZXBlbmRlbnQgZmFjaWxpdGllcworICAgICAgIGZvciBjb21wb3NpbmcgbWVudSBzeXN0ZW1zICBvbiAgY2hhcmFjdGVyLWNlbGwgIHRlcm1pbmFscy4KKyAgICAgICBUaGUgbGlicmFyeSBpbmNsdWRlczogaXRlbSByb3V0aW5lcywgd2hpY2ggY3JlYXRlIGFuZCBtb2QtCisgICAgICAgaWZ5IG1lbnUgaXRlbXM7IGFuZCBtZW51IHJvdXRpbmVzLCB3aGljaCBncm91cCBpdGVtcyAgaW50bworICAgICAgIG1lbnVzLCBkaXNwbGF5IG1lbnVzIG9uIHRoZSBzY3JlZW4sIGFuZCBoYW5kbGUgaW50ZXJhY3Rpb24KKyAgICAgICB3aXRoIHRoZSB1c2VyLgorCisgICAgICAgVGhlIDxTVFJPTkc+bWVudTwvU1RST05HPiBsaWJyYXJ5IHVzZXMgdGhlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGxpYnJhcmllcywgYW5kICBhICBjdXJzZXMKKyAgICAgICBpbml0aWFsaXphdGlvbiAgcm91dGluZSAgc3VjaCAgYXMgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiAgbXVzdCBiZSBjYWxsZWQKKyAgICAgICBiZWZvcmUgdXNpbmcgYW55IG9mIHRoZXNlICBmdW5jdGlvbnMuICAgVG8gIHVzZSAgdGhlICA8U1RST05HPm1lbnU8L1NUUk9ORz4KKyAgICAgICBsaWJyYXJ5LCBsaW5rIHdpdGggdGhlIG9wdGlvbnMgPFNUUk9ORz4tbG1lbnU8L1NUUk9ORz4gPFNUUk9ORz4tbGN1cnNlczwvU1RST05HPi4KKworICAgPFNUUk9ORz5DdXJyZW50PC9TVFJPTkc+IDxTVFJPTkc+RGVmYXVsdDwvU1RST05HPiA8U1RST05HPlZhbHVlczwvU1RST05HPiA8U1RST05HPmZvcjwvU1RST05HPiA8U1RST05HPkl0ZW08L1NUUk9ORz4gPFNUUk9ORz5BdHRyaWJ1dGVzPC9TVFJPTkc+CisgICAgICAgVGhlICA8U1RST05HPm1lbnU8L1NUUk9ORz4gIGxpYnJhcnkgIG1haW50YWlucyAgYSAgZGVmYXVsdCAgdmFsdWUgIGZvciBpdGVtCisgICAgICAgYXR0cmlidXRlcy4gIFlvdSBjYW4gZ2V0IG9yIHNldCB0aGlzICBkZWZhdWx0ICBieSAgY2FsbGluZworICAgICAgIHRoZSAgYXBwcm9wcmlhdGUgIDxTVFJPTkc+Z2V0XzwvU1RST05HPiAgb3IgIDxTVFJPTkc+c2V0XzwvU1RST05HPiAgcm91dGluZSB3aXRoIGEgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGl0ZW0KKyAgICAgICBwb2ludGVyLiAgQ2hhbmdpbmcgIHRoaXMgIGRlZmF1bHQgIHdpdGggIGEgIDxTVFJPTkc+c2V0XzwvU1RST05HPiAgZnVuY3Rpb24KKyAgICAgICBhZmZlY3RzICBmdXR1cmUgIGl0ZW0gIGNyZWF0aW9ucywgIGJ1dCBkb2VzIG5vdCBjaGFuZ2UgdGhlCisgICAgICAgcmVuZGVyaW5nIG9mIGl0ZW1zIGFscmVhZHkgY3JlYXRlZC4KKworICAgPFNUUk9ORz5Sb3V0aW5lPC9TVFJPTkc+IDxTVFJPTkc+TmFtZTwvU1RST05HPiA8U1RST05HPkluZGV4PC9TVFJPTkc+CisgICAgICAgVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyBlYWNoIDxTVFJPTkc+bWVudTwvU1RST05HPiByb3V0aW5lIGFuZCAgdGhlICBuYW1lCisgICAgICAgb2YgdGhlIG1hbnVhbCBwYWdlIG9uIHdoaWNoIGl0IGlzIGRlc2NyaWJlZC4KKworICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IFJvdXRpbmUgTmFtZSAgICBNYW51YWwgUGFnZSBOYW1lCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBjdXJyZW50X2l0ZW0gICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmcmVlX2l0ZW0gICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZnJlZV9tZW51ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfbmV3LjN4Lmh0bWwiPm1lbnVfbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX2NvdW50ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX2Rlc2NyaXB0aW9uICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX2luZGV4ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX2luaXQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV9uYW1lICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX25hbWUuM3guaHRtbCI+bWl0ZW1fbmFtZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV9vcHRzICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV9vcHRzX29mZiAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV9vcHRzX29uICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV90ZXJtICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIGl0ZW1fdXNlcnB0ciAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGl0ZW1fdmFsdWUgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV92YWx1ZS4zeC5odG1sIj5taXRlbV92YWx1ZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV92aXNpYmxlICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3Zpc2libGUuM3guaHRtbCI+bWl0ZW1fdmlzaWJsZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9iYWNrICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfZHJpdmVyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2RyaXZlci4zeC5odG1sIj5tZW51X2RyaXZlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9mb3JlICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfZm9ybWF0ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9ncmV5ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfaW5pdCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X2l0ZW1zICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X21hcmsgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9tYXJrLjN4Lmh0bWwiPm1lbnVfbWFyaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9vcHRzICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfb3B0c19vZmYgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X29wdHNfb24gICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9wYWQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfcGF0dGVybiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuKDN4KTwvQT48L1NUUk9ORz4KKworICAgICAgIG1lbnVfcmVxdWVzdF9ieV9uYW1lICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwiPm1lbnVfcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfcmVxdWVzdF9uYW1lICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwiPm1lbnVfcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfc3BhY2luZyAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3NwYWNpbmcuM3guaHRtbCI+bWVudV9zcGFjaW5nKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X3N1YiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfdGVybSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X3VzZXJwdHIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV93aW4gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBuZXdfaXRlbSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbmV3X21lbnUgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfbmV3LjN4Lmh0bWwiPm1lbnVfbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBwb3NfbWVudV9jdXJzb3IgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9jdXJzb3IuM3guaHRtbCI+bWVudV9jdXJzb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHBvc3RfbWVudSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3Bvc3QuM3guaHRtbCI+bWVudV9wb3N0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzY2FsZV9tZW51ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9jdXJyZW50X2l0ZW0gICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9pdGVtX2luaXQgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfaXRlbV9vcHRzICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfaXRlbV90ZXJtICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2l0ZW1fdXNlcnB0ciAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2l0ZW1fdmFsdWUgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3ZhbHVlLjN4Lmh0bWwiPm1pdGVtX3ZhbHVlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9iYWNrICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfZm9yZSAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X2Zvcm1hdCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfZ3JleSAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X2luaXQgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9pdGVtcyAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9tYXJrICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9tYXJrLjN4Lmh0bWwiPm1lbnVfbWFyaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfb3B0cyAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfcGFkICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X3BhdHRlcm4gICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9zcGFjaW5nICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfc3ViICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV90ZXJtICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfdXNlcnB0ciAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfdXNlcnB0ci4zeC5odG1sIj5tZW51X3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X3dpbiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X3RvcF9yb3cgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgdG9wX3JvdyAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgdW5wb3N0X21lbnUgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcG9zdC4zeC5odG1sIj5tZW51X3Bvc3QoM3gpPC9BPjwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyAgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIDxTVFJPTkc+TlVMTDwvU1RST05HPiBvbiBlcnJvci4gIFJvdS0KKyAgICAgICB0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBvbmUgb2YgIHRoZSAgZm9sbG93aW5nCisgICAgICAgZXJyb3IgY29kZXM6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX1NUQVRFPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hLQorICAgICAgICAgICAgdGlvbiBmdW5jdGlvbi4KKworICAgICAgIDxTVFJPTkc+RV9OT19NQVRDSDwvU1RST05HPgorICAgICAgICAgICAgQ2hhcmFjdGVyIGZhaWxlZCB0byBtYXRjaC4KKworICAgICAgIDxTVFJPTkc+RV9OT19ST09NPC9TVFJPTkc+CisgICAgICAgICAgICBNZW51IGlzIHRvbyBsYXJnZSBmb3IgaXRzIHdpbmRvdy4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorCisgICAgICAgPFNUUk9ORz5FX05PVF9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGhhcyBub3QgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfTk9UX1NFTEVDVEFCTEU8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBkZXNpZ25hdGVkIGl0ZW0gY2Fubm90IGJlIHNlbGVjdGVkLgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfUkVRVUVTVF9ERU5JRUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX1VOS05PV05fQ09NTUFORDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgZHJpdmVyIGNvZGUgc2F3IGFuIHVua25vd24gcmVxdWVzdCBjb2RlLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAibWVudV8iIGZvcgorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGVzIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiBhbmQgPFNUUk9ORz4mbHQ7ZXRpLmgmZ3Q7PC9TVFJPTkc+LgorCisgICAgICAgSW4gIHlvdXIgIGxpYnJhcnkgIGxpc3QsICBsaWJtZW51LmEgc2hvdWxkIGJlIGJlZm9yZSBsaWJuLQorICAgICAgIGN1cnNlcy5hOyB0aGF0IGlzLCB5b3Ugd2FudCB0byBzYXkgYC1sbWVudSAtbG5jdXJzZXMnLCBub3QKKyAgICAgICB0aGUgIG90aGVyICB3YXkgIGFyb3VuZCAgKHdoaWNoIHdvdWxkIHVzdWFsbHkgZ2l2ZSBhIGxpbmstCisgICAgICAgZXJyb3IpLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWICBtZW51ICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5jdXJzZXMKKyAgICAgICBieSBFcmljIFMuIFJheW1vbmQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCBiL2RvYy9odG1sL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2MyYzZkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X2F0dHJpYnV0ZXMuM3gsdiAxLjEwIDIwMDgvMDgvMjMgMTg6MjQ6MjMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9hdHRyaWJ1dGVzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9hdHRyaWJ1dGVzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9hdHRyaWJ1dGVzPC9TVFJPTkc+IC0gY29sb3IgYW5kIGF0dHJpYnV0ZSBjb250cm9sIGZvciBtZW51cworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfbWVudV9mb3JlKE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKTsKKyAgICAgICBjaHR5cGUgbWVudV9mb3JlKGNvbnN0IE1FTlUgKm1lbnUpOworICAgICAgIGludCBzZXRfbWVudV9iYWNrKE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKTsKKyAgICAgICBjaHR5cGUgbWVudV9iYWNrKGNvbnN0IE1FTlUgKm1lbnUpOworICAgICAgIGludCBzZXRfbWVudV9ncmV5KE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKTsKKyAgICAgICBjaHR5cGUgbWVudV9ncmV5KGNvbnN0IE1FTlUgKm1lbnUpOworICAgICAgIGludCBzZXRfbWVudV9wYWQoTUVOVSAqbWVudSwgaW50IHBhZCk7CisgICAgICAgaW50IG1lbnVfcGFkKGNvbnN0IE1FTlUgKm1lbnUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X21lbnVfZm9yZTwvU1RST05HPiBzZXRzIHRoZSBmb3JlZ3JvdW5kIGF0dHJpYnV0ZQorICAgICAgIG9mIDxFTT5tZW51PC9FTT4uIFRoaXMgaXMgdGhlICBoaWdobGlnaHQgIHVzZWQgIGZvciAgc2VsZWN0ZWQgIG1lbnUKKyAgICAgICBpdGVtcy4gICA8U1RST05HPm1lbnVfZm9yZTwvU1RST05HPiAgcmV0dXJucyB0aGUgZm9yZWdyb3VuZCBhdHRyaWJ1dGUuICBUaGUKKyAgICAgICBkZWZhdWx0IGlzIDxTVFJPTkc+QV9SRVZFUlNFPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X21lbnVfYmFjazwvU1RST05HPiBzZXRzIHRoZSAgYmFja2dyb3VuZCAgYXR0cmlidXRlCisgICAgICAgb2YgIDxFTT5tZW51PC9FTT4uICBUaGlzICBpcyB0aGUgaGlnaGxpZ2h0IHVzZWQgZm9yIHNlbGVjdGFibGUgKGJ1dAorICAgICAgIG5vdCAgY3VycmVudGx5ICBzZWxlY3RlZCkgIG1lbnUgICBpdGVtcy4gICAgVGhlICAgZnVuY3Rpb24KKyAgICAgICA8U1RST05HPm1lbnVfYmFjazwvU1RST05HPiAgcmV0dXJucyAgdGhlIGJhY2tncm91bmQgYXR0cmlidXRlLiAgVGhlIGRlZmF1bHQKKyAgICAgICBpcyA8U1RST05HPkFfTk9STUFMPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X21lbnVfZ3JleTwvU1RST05HPiAgc2V0cyAgdGhlICBncmV5ICBhdHRyaWJ1dGUgIG9mCisgICAgICAgPEVNPm1lbnU8L0VNPi4gIFRoaXMgIGlzICB0aGUgaGlnaGxpZ2h0IHVzZWQgZm9yIHVuLXNlbGVjdGFibGUgbWVudQorICAgICAgIGl0ZW1zIGluIG1lbnVzIHRoYXQgcGVybWl0IG1vcmUgdGhhbiBvbmUgIHNlbGVjdGlvbi4gICBUaGUKKyAgICAgICBmdW5jdGlvbiAgIDxTVFJPTkc+bWVudV9ncmV5PC9TVFJPTkc+ICByZXR1cm5zICB0aGUgIGdyZXkgIGF0dHJpYnV0ZS4gICBUaGUKKyAgICAgICBkZWZhdWx0IGlzIDxTVFJPTkc+QV9VTkRFUkxJTkU8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9wYWQ8L1NUUk9ORz4gc2V0cyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gIGZpbGwKKyAgICAgICB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gcGFydHMgb2YgYSBtZW51CisgICAgICAgaXRlbS4gIDxTVFJPTkc+bWVudV9wYWQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgZ2l2ZW4gIG1lbnUncyAgcGFkICBjaGFyYWN0ZXIuCisgICAgICAgVGhlIGRlZmF1bHQgaXMgYSBibGFuay4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+IGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJtZW51XyIgZm9yCisgICAgICAgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfY3Vyc29yLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9jdXJzb3IuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTVkY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21lbnVfY3Vyc29yLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfY3Vyc29yLjN4LHYgMS42IDIwMDYvMTEvMDQgMTc6MTM6NTcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9jdXJzb3IgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X2N1cnNvciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9jdXJzb3IuM3guaHRtbCI+bWVudV9jdXJzb3IoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2N1cnNvci4zeC5odG1sIj5tZW51X2N1cnNvcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X2N1cnNvcjwvU1RST05HPiAtIHBvc2l0aW9uIGEgbWVudSdzIGN1cnNvcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBwb3NfbWVudV9jdXJzb3IoY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5wb3NfbWVudV9jdXJzb3I8L1NUUk9ORz4gIHJlc3RvcmVzIHRoZSBjdXJzb3IgdG8gdGhlCisgICAgICAgY3VycmVudCBwb3NpdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUncyBzZWxlY3RlZCBpdGVtLgorICAgICAgIFRoaXMgIGlzICB1c2VmdWwgYWZ0ZXIgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gcm91dGluZXMgaGF2ZSBiZWVuIGNhbGxlZCB0bworICAgICAgIGRvIHNjcmVlbi1wYWludGluZyBpbiByZXNwb25zZSB0byBhIG1lbnUgc2VsZWN0LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGlzIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX05PVF9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGhhcyBub3QgYmVlbiBwb3N0ZWQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWICBtZW51ICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfY3Vyc29yLjN4Lmh0bWwiPm1lbnVfY3Vyc29yKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfZHJpdmVyLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9kcml2ZXIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkyNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21lbnVfZHJpdmVyLjN4Lmh0bWwKQEAgLTAsMCArMSwyNTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9kcml2ZXIuM3gsdiAxLjE1IDIwMDgvMDYvMjEgMjE6NTU6MzAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9kcml2ZXIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X2RyaXZlciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9kcml2ZXIuM3guaHRtbCI+bWVudV9kcml2ZXIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2RyaXZlci4zeC5odG1sIj5tZW51X2RyaXZlcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X2RyaXZlcjwvU1RST05HPiAtIGNvbW1hbmQtcHJvY2Vzc2luZyBsb29wIG9mIHRoZSBtZW51IHN5c3RlbQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBtZW51X2RyaXZlcihNRU5VICptZW51LCBpbnQgYyk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgT25jZSBhIG1lbnUgaGFzIGJlZW4gcG9zdGVkIChkaXNwbGF5ZWQpLCB5b3Ugc2hvdWxkIGZ1bm5lbAorICAgICAgIGlucHV0IGV2ZW50cyB0byBpdCB0aHJvdWdoIDxTVFJPTkc+bWVudV9kcml2ZXI8L1NUUk9ORz4uICBUaGlzIHJvdXRpbmUgIGhhcworICAgICAgIHRocmVlIG1ham9yIGlucHV0IGNhc2VzOgorCisgICAgICAgLSAgVGhlICBpbnB1dCAgaXMgIGEgIGZvcm0gbmF2aWdhdGlvbiByZXF1ZXN0LiAgTmF2aWdhdGlvbgorICAgICAgICAgIHJlcXVlc3QgY29kZXMgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4sICB3aGljaAorICAgICAgICAgIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBrZXktIGFuZCBjaGFyYWN0ZXIgY29kZXMgcmV0dXJuZWQKKyAgICAgICAgICBieSA8U1RST05HPndnZXRjaDwvU1RST05HPi4KKworICAgICAgIC0gIFRoZSBpbnB1dCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIuICBQcmludGFibGUgIGNoYXJhYy0KKyAgICAgICAgICB0ZXJzICAod2hpY2ggIG11c3QgIGJlICBwb3NpdGl2ZSwgIGxlc3MgIHRoYW4gIDI1NikgYXJlCisgICAgICAgICAgY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHByb2dyYW0ncyBsb2NhbGUgc2V0dGluZ3MuCisKKyAgICAgICAtICBUaGUgaW5wdXQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsIGtleSBhc3NvY2lhdGVkICB3aXRoCisgICAgICAgICAgYW4gbW91c2UgZXZlbnQuCisKKyAgICAgICBUaGUgbWVudSBkcml2ZXIgcmVxdWVzdHMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICBSRVFfTEVGVF9JVEVNCisgICAgICAgICAgICBNb3ZlIGxlZnQgdG8gYW4gaXRlbS4KKworICAgICAgIFJFUV9SSUdIVF9JVEVNCisgICAgICAgICAgICBNb3ZlIHJpZ2h0IHRvIGFuIGl0ZW0uCisKKyAgICAgICBSRVFfVVBfSVRFTQorICAgICAgICAgICAgTW92ZSB1cCB0byBhbiBpdGVtLgorCisgICAgICAgUkVRX0RPV05fSVRFTQorICAgICAgICAgICAgTW92ZSBkb3duIHRvIGFuIGl0ZW0uCisKKyAgICAgICBSRVFfU0NSX1VMSU5FCisgICAgICAgICAgICBTY3JvbGwgdXAgYSBsaW5lLgorCisgICAgICAgUkVRX1NDUl9ETElORQorICAgICAgICAgICAgU2Nyb2xsIGRvd24gYSBsaW5lLgorCisgICAgICAgUkVRX1NDUl9EUEFHRQorICAgICAgICAgICAgU2Nyb2xsIGRvd24gYSBwYWdlLgorCisgICAgICAgUkVRX1NDUl9VUEFHRQorICAgICAgICAgICAgU2Nyb2xsIHVwIGEgcGFnZS4KKworICAgICAgIFJFUV9GSVJTVF9JVEVNCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBmaXJzdCBpdGVtLgorCisgICAgICAgUkVRX0xBU1RfSVRFTQorICAgICAgICAgICAgTW92ZSB0byB0aGUgbGFzdCBpdGVtLgorCisgICAgICAgUkVRX05FWFRfSVRFTQorICAgICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBpdGVtLgorCisgICAgICAgUkVRX1BSRVZfSVRFTQorICAgICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbS4KKworICAgICAgIFJFUV9UT0dHTEVfSVRFTQorICAgICAgICAgICAgU2VsZWN0L2Rlc2VsZWN0IGFuIGl0ZW0uCisKKyAgICAgICBSRVFfQ0xFQVJfUEFUVEVSTgorICAgICAgICAgICAgQ2xlYXIgdGhlIG1lbnUgcGF0dGVybiBidWZmZXIuCisKKyAgICAgICBSRVFfQkFDS19QQVRURVJOCisgICAgICAgICAgICBEZWxldGUgICB0aGUgIHByZXZpb3VzICBjaGFyYWN0ZXIgIGZyb20gIHRoZSAgcGF0dGVybgorICAgICAgICAgICAgYnVmZmVyLgorCisgICAgICAgUkVRX05FWFRfTUFUQ0gKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIG5leHQgaXRlbSBtYXRjaGluZyB0aGUgcGF0dGVybiBtYXRjaC4KKworICAgICAgIFJFUV9QUkVWX01BVENICisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIG1hdGNoLgorCisgICAgICAgSWYgIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyLCB0aGUgY29kZQorICAgICAgIGFwcGVuZHMgaXQgdG8gdGhlIHBhdHRlcm4gYnVmZmVyIGFuZCBhdHRlbXB0cyB0byAgbW92ZSAgdG8KKyAgICAgICB0aGUgIG5leHQgIGl0ZW0gIG1hdGNoaW5nIHRoZSBuZXcgcGF0dGVybi4gIElmIHRoZXJlIGlzIG5vCisgICAgICAgc3VjaCBtYXRjaCwgPFNUUk9ORz5tZW51X2RyaXZlcjwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+RV9OT19NQVRDSDwvU1RST05HPiBhbmQgZGVsZXRlcyB0aGUKKyAgICAgICBhcHBlbmRlZCBjaGFyYWN0ZXIgZnJvbSB0aGUgYnVmZmVyLgorCisgICAgICAgSWYgIHRoZSAgc2Vjb25kICBhcmd1bWVudCAgaXMgb25lIG9mIHRoZSBhYm92ZSBwcmUtZGVmaW5lZAorICAgICAgIHJlcXVlc3RzLCB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb24gaXMgcGVyZm9ybWVkLgorCisgICA8U1RST05HPk1PVVNFPC9TVFJPTkc+IDxTVFJPTkc+SEFORExJTkc8L1NUUk9ORz4KKyAgICAgICBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBLRVlfTU9VU0Ugc3BlY2lhbCAga2V5LCAgdGhlCisgICAgICAgYXNzb2NpYXRlZCBtb3VzZSBldmVudCBpcyB0cmFuc2xhdGVkIGludG8gb25lIG9mIHRoZSBhYm92ZQorICAgICAgIHByZS1kZWZpbmVkIHJlcXVlc3RzLiAgQ3VycmVudGx5IG9ubHkgY2xpY2tzIGluICB0aGUgIHVzZXIKKyAgICAgICB3aW5kb3cgIChlLmcuICBpbnNpZGUgdGhlIG1lbnUgZGlzcGxheSBhcmVhIG9yIHRoZSBkZWNvcmEtCisgICAgICAgdGlvbiB3aW5kb3cpIGFyZSBoYW5kbGVkLgorCisgICAgICAgSWYgeW91IGNsaWNrIGFib3ZlIHRoZSBkaXNwbGF5IHJlZ2lvbiBvZiB0aGUgbWVudToKKworICAgICAgICAgICAgICBhIFJFUV9TQ1JfVUxJTkUgaXMgZ2VuZXJhdGVkIGZvciBhIHNpbmdsZSBjbGljaywKKworICAgICAgICAgICAgICBhIFJFUV9TQ1JfVVBBR0UgaXMgZ2VuZXJhdGVkIGZvciBhIGRvdWJsZS1jbGljayBhbmQKKworICAgICAgICAgICAgICBhIFJFUV9GSVJTVF9JVEVNIGlzIGdlbmVyYXRlZCBmb3IgYSB0cmlwbGUtY2xpY2suCisKKyAgICAgICBJZiB5b3UgY2xpY2sgYmVsb3cgdGhlIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBtZW51OgorCisgICAgICAgICAgICAgIGEgUkVRX1NDUl9ETElORSBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorCisgICAgICAgICAgICAgIGEgUkVRX1NDUl9EUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorCisgICAgICAgICAgICAgIGEgUkVRX0xBU1RfSVRFTSBpcyBnZW5lcmF0ZWQgZm9yIGEgdHJpcGxlLWNsaWNrLgorCisgICAgICAgSWYgeW91IGNsaWNrIGF0IGFuIGl0ZW0gaW5zaWRlIHRoZSAgZGlzcGxheSAgYXJlYSAgb2YgIHRoZQorICAgICAgIG1lbnU6CisKKyAgICAgICAgICAgICAgLSAgdGhlIG1lbnUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgdG8gdGhhdCBpdGVtLgorCisgICAgICAgICAgICAgIC0gIElmIHlvdSBkb3VibGUtY2xpY2sgYW4gaXRlbSBhIFJFUV9UT0dHTEVfSVRFTSBpcworICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgIGFuZCAgPFNUUk9ORz5FX1VOS05PV05fQ09NTUFORDwvU1RST05HPiAgaXMgIHJldHVybmVkLgorICAgICAgICAgICAgICAgICBUaGlzICByZXR1cm4gdmFsdWUgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYSBkb3VibGUKKyAgICAgICAgICAgICAgICAgY2xpY2sgdXN1YWxseSBtZWFucyB0aGF0IGFuIGl0ZW0tc3BlY2lmaWMgYWN0aW9uCisgICAgICAgICAgICAgICAgIHNob3VsZCAgYmUgIHJldHVybmVkLiAgSXQgaXMgZXhhY3RseSB0aGUgcHVycG9zZQorICAgICAgICAgICAgICAgICBvZiB0aGlzIHJldHVybiB2YWx1ZSB0byBzaWduYWwgdGhhdCBhbiAgYXBwbGljYS0KKyAgICAgICAgICAgICAgICAgdGlvbiBzcGVjaWZpYyBjb21tYW5kIHNob3VsZCBiZSBleGVjdXRlZC4KKworICAgICAgICAgICAgICAtICBJZiAgYSAgdHJhbnNsYXRpb24gIGludG8gIGEgIHJlcXVlc3QgIHdhcyAgZG9uZSwKKyAgICAgICAgICAgICAgICAgPFNUUk9ORz5tZW51X2RyaXZlcjwvU1RST05HPiByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhpcyAgcmVxdWVzdC4KKworICAgICAgIElmICB5b3UgY2xpY2tlZCBvdXRzaWRlIHRoZSB1c2VyIHdpbmRvdyBvciB0aGUgbW91c2UgZXZlbnQKKyAgICAgICBjb3VsZCAgbm90ICBiZSAgdHJhbnNsYXRlZCAgaW50byAgIGEgICBtZW51ICAgcmVxdWVzdCAgIGFuCisgICAgICAgPFNUUk9ORz5FX1JFUVVFU1RfREVOSUVEPC9TVFJPTkc+IGlzIHJldHVybmVkLgorCisgICA8U1RST05HPkFQUExJQ0FUSU9OLURFRklORUQ8L1NUUk9ORz4gPFNUUk9ORz5DT01NQU5EUzwvU1RST05HPgorICAgICAgIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmVpdGhlciBwcmludGFibGUgbm9yIG9uZSBvZiB0aGUKKyAgICAgICBhYm92ZSBwcmUtZGVmaW5lZCBtZW51IHJlcXVlc3RzIG9yICBLRVlfTU9VU0UsICB0aGUgIGRyaXZlCisgICAgICAgYXNzdW1lcyAgaXQgaXMgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgY29tbWFuZCBhbmQgcmV0dXJucworICAgICAgIDxTVFJPTkc+RV9VTktOT1dOX0NPTU1BTkQ8L1NUUk9ORz4uICBBcHBsaWNhdGlvbi1kZWZpbmVkIGNvbW1hbmRzIHNob3VsZCBiZQorICAgICAgIGRlZmluZWQgIHJlbGF0aXZlICB0byAgPFNUUk9ORz5NQVhfQ09NTUFORDwvU1RST05HPiwgIHRoZSAgbWF4aW11bSB2YWx1ZSBvZgorICAgICAgIHRoZXNlIHByZS1kZWZpbmVkIHJlcXVlc3RzLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfZHJpdmVyPC9TVFJPTkc+IHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfTk9UX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9VTktOT1dOX0NPTU1BTkQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGRyaXZlciBjb2RlIHNhdyBhbiB1bmtub3duIHJlcXVlc3QgY29kZS4KKworICAgICAgIDxTVFJPTkc+RV9OT19NQVRDSDwvU1RST05HPgorICAgICAgICAgICAgQ2hhcmFjdGVyIGZhaWxlZCB0byBtYXRjaC4KKworICAgICAgIDxTVFJPTkc+RV9SRVFVRVNUX0RFTklFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ3Z2V0Y2guM3guaHRtbCI+d2dldGNoKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZXMgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSAgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4gVGhlICBzdXAtCisgICAgICAgcG9ydCBmb3IgbW91c2UgZXZlbnRzIGlzIG5jdXJzZXMgc3BlY2lmaWMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2RyaXZlci4zeC5odG1sIj5tZW51X2RyaXZlcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9tZW51X2Zvcm1hdC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiNzNjNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51X2Zvcm1hdC4zeC5odG1sCkBAIC0wLDAgKzEsMTMzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X2Zvcm1hdC4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X2Zvcm1hdCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfZm9ybWF0IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfZm9ybWF0LjN4Lmh0bWwiPm1lbnVfZm9ybWF0KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfZm9ybWF0PC9TVFJPTkc+IC0gc2V0IGFuZCBnZXQgbWVudSBzaXplcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfbWVudV9mb3JtYXQoTUVOVSAqbWVudSwgaW50IHJvd3MsIGludCBjb2xzKTsKKyAgICAgICB2b2lkIG1lbnVfZm9ybWF0KGNvbnN0IE1FTlUgKm1lbnUsIGludCAqcm93cywgaW50ICpjb2xzKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9mb3JtYXQ8L1NUUk9ORz4gc2V0cyB0aGUgbWF4aW11bSBkaXNwbGF5IHNpemUKKyAgICAgICBvZiB0aGUgZ2l2ZW4gbWVudS4gIElmIHRoaXMgc2l6ZSBpcyB0b28gc21hbGwgIHRvICBkaXNwbGF5CisgICAgICAgYWxsICBtZW51IGl0ZW1zLCB0aGUgbWVudSB3aWxsIGJlIG1hZGUgc2Nyb2xsYWJsZS4gSWYgdGhpcworICAgICAgIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIG1lbnVzIHN1YndpbmRvdyBhbmQgdGhlICBzdWJ3aW5kb3cKKyAgICAgICBpcyAgdG9vICBzbWFsbCB0byBkaXNwbGF5IGFsbCBtZW51IGl0ZW1zLCA8U1RST05HPnBvc3RfbWVudSgpPC9TVFJPTkc+IHdpbGwKKyAgICAgICBmYWlsLgorCisgICAgICAgVGhlICBkZWZhdWx0ICBmb3JtYXQgIGlzICAxNiAgcm93cywgIDEgIGNvbHVtbi4gICAgQ2FsbGluZworICAgICAgIDxTVFJPTkc+c2V0X21lbnVfZm9ybWF0PC9TVFJPTkc+ICB3aXRoIGEgbnVsbCBtZW51IHBvaW50ZXIgd2lsbCBjaGFuZ2UgdGhpcworICAgICAgIGRlZmF1bHQuICBBIHplcm8gcm93IG9yIGNvbHVtbiBhcmd1bWVudCB0byA8U1RST05HPnNldF9tZW51X2Zvcm1hdDwvU1RST05HPgorICAgICAgIGlzICBpbnRlcnByZXRlZCAgYXMgIGEgIHJlcXVlc3QgIG5vdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAgICB2YWx1ZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1lbnVfZm9ybWF0PC9TVFJPTkc+ICByZXR1cm5zICB0aGUgIG1heGltdW0tc2l6ZSAgY29uLQorICAgICAgIHN0cmFpbnRzICBmb3IgdGhlIGdpdmVuIG1lbnUgaW50byB0aGUgc3RvcmFnZSBhZGRyZXNzZWQgYnkKKyAgICAgICA8U1RST05HPnJvd3M8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Y29sczwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfTk9UX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9mb3JtYXQuM3guaHRtbCI+bWVudV9mb3JtYXQoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vbWVudV9ob29rLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9ob29rLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhZGRmNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51X2hvb2suM3guaHRtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9ob29rLjN4LHYgMS45IDIwMDcvMDIvMjQgMTc6MzQ6MDggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9ob29rIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9ob29rIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9ob29rPC9TVFJPTkc+IC0gc2V0IGhvb2tzIGZvciBhdXRvbWF0aWMgaW52b2NhdGlvbiBieSBhcHBsaWNhLQorICAgICAgIHRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9pdGVtX2luaXQoTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworICAgICAgIE1lbnVfSG9vayBpdGVtX2luaXQoY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNldF9pdGVtX3Rlcm0oTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworICAgICAgIE1lbnVfSG9vayBpdGVtX3Rlcm0oY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNldF9tZW51X2luaXQoTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworICAgICAgIE1lbnVfSG9vayBtZW51X2luaXQoY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNldF9tZW51X3Rlcm0oTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworICAgICAgIE1lbnVfSG9vayBtZW51X3Rlcm0oY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIG1ha2UgaXQgcG9zc2libGUgdG8gc2V0IGhvb2sgZnVuY3Rpb25zICB0bworICAgICAgIGJlIGNhbGxlZCBhdCB2YXJpb3VzIHBvaW50cyBpbiB0aGUgYXV0b21hdGljIHByb2Nlc3Npbmcgb2YKKyAgICAgICBpbnB1dCBldmVudCBjb2RlcyBieSA8U1RST05HPm1lbnVfZHJpdmVyPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2l0ZW1faW5pdDwvU1RST05HPiBzZXRzIGEgaG9vayAgdG8gIGJlICBjYWxsZWQgIGF0CisgICAgICAgbWVudS1wb3N0ICB0aW1lICBhbmQgIGVhY2ggIHRpbWUgdGhlIHNlbGVjdGVkIGl0ZW0gY2hhbmdlcworICAgICAgIChhZnRlciB0aGUgY2hhbmdlKS4gIDxTVFJPTkc+aXRlbV9pbml0PC9TVFJPTkc+IHJldHVybnMgIHRoZSAgY3VycmVudCAgaXRlbQorICAgICAgIGluaXQgaG9vaywgaWYgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2l0ZW1fdGVybTwvU1RST05HPiAgc2V0cyAgYSBob29rIHRvIGJlIGNhbGxlZCBhdAorICAgICAgIG1lbnUtdW5wb3N0IHRpbWUgYW5kIGVhY2ggdGltZSB0aGUgc2VsZWN0ZWQgIGl0ZW0gIGNoYW5nZXMKKyAgICAgICAoYmVmb3JlICB0aGUgIGNoYW5nZSkuICA8U1RST05HPml0ZW1fdGVybTwvU1RST05HPiByZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0KKyAgICAgICB0ZXJtIGhvb2ssIGlmIGFueSAoPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggaG9vaykuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9pbml0PC9TVFJPTkc+IHNldHMgYSBob29rICB0byAgYmUgIGNhbGxlZCAgYXQKKyAgICAgICBtZW51LXBvc3QgIHRpbWUgIGFuZCAganVzdCAgYWZ0ZXIgIHRoZSB0b3Agcm93IG9uIHRoZSBtZW51CisgICAgICAgY2hhbmdlcyBvbmNlIGl0IGlzIHBvc3RlZC4gIDxTVFJPTkc+bWVudV9pbml0PC9TVFJPTkc+IHJldHVybnMgdGhlICBjdXJyZW50CisgICAgICAgbWVudSBpbml0IGhvb2ssIGlmIGFueSAoPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggaG9vaykuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9tZW51X3Rlcm08L1NUUk9ORz4gIHNldHMgIGEgaG9vayB0byBiZSBjYWxsZWQgYXQKKyAgICAgICBtZW51LXVucG9zdCB0aW1lIGFuZCBqdXN0IGJlZm9yZSB0aGUgdG9wIHJvdyBvbiAgdGhlICBtZW51CisgICAgICAgY2hhbmdlcyAgb25jZSBpdCBpcyBwb3N0ZWQuICA8U1RST05HPm1lbnVfdGVybTwvU1RST05HPiByZXR1cm5zIHRoZSBjdXJyZW50CisgICAgICAgbWVudSB0ZXJtIGhvb2ssIGlmIGFueSAoPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggaG9vaykuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuICBPdGhlcgorICAgICAgIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfaXRlbXMuM3guaHRtbCBiL2RvYy9odG1sL21hbi9tZW51X2l0ZW1zLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2MDlmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51X2l0ZW1zLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfaXRlbXMuM3gsdiAxLjcgMjAwNi8xMS8wNCAxODozNTozMSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X2l0ZW1zIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9pdGVtcyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9pdGVtczwvU1RST05HPiAgLSBtYWtlIGFuZCBicmVhayBjb25uZWN0aW9ucyBiZXR3ZWVuIGl0ZW1zIGFuZAorICAgICAgIG1lbnVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X2l0ZW1zKE1FTlUgKm1lbnUsIElURU0gKippdGVtcyk7CisgICAgICAgSVRFTSAqKm1lbnVfaXRlbXMoY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IGl0ZW1fY291bnQoY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X21lbnVfaXRlbXM8L1NUUk9ORz4gY2hhbmdlcyB0aGUgaXRlbSBwb2ludGVyIGFycmF5CisgICAgICAgb2YgIHRoZSAgZ2l2ZW4gIDxFTT5tZW51PC9FTT4uICAgVGhlICBhcnJheSBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYQorICAgICAgIDxTVFJPTkc+TlVMTDwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1lbnVfaXRlbXM8L1NUUk9ORz4gcmV0dXJucyAgdGhlICBpdGVtICBhcnJheSAgb2YgIHRoZQorICAgICAgIGdpdmVuIG1lbnUuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPml0ZW1fY291bnQ8L1NUUk9ORz4gIHJldHVybnMgIHRoZSAgY291bnQgb2YgaXRlbXMgaW4KKyAgICAgICA8RU0+bWVudTwvRU0+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9pdGVtczwvU1RST05HPiByZXR1cm5zIGEgcG9pbnRlciAgKHdoaWNoICBtYXkgIGJlCisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+KS4gIEl0IGRvZXMgbm90IHNldCBlcnJuby4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+aXRlbV9jb3VudDwvU1RST05HPiAgcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPiAodGhlIGdlbmVyYWwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICBlcnJvciByZXR1cm4gdmFsdWUpIGlmIGl0cyA8RU0+bWVudTwvRU0+IHBhcmFtZXRlciBpcyA8U1RST05HPk5VTEw8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9pdGVtczwvU1RST05HPiByZXR1cm5zIG9uZSBvZiAgdGhlICBmb2xsb3dpbmcKKyAgICAgICBjb2RlcyBvbiBlcnJvcjoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgVGhlICBTVnI0ICBtZW51ICBsaWJyYXJ5ICAgZG9jdW1lbnRhdGlvbiAgIHNwZWNpZmllcyAgIHRoZQorICAgICAgIDxTVFJPTkc+aXRlbV9jb3VudDwvU1RST05HPiAgZXJyb3IgdmFsdWUgYXMgLTEgKHdoaWNoIGlzIHRoZSB2YWx1ZSBvZiA8U1RST05HPkVSUjwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfbWFyay4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL21lbnVfbWFyay4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Mjk5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbWVudV9tYXJrLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfbWFyay4zeCx2IDEuOSAyMDA2LzExLzA0IDE4OjMzOjE4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfbWFyayAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfbWFyayAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9tYXJrLjN4Lmh0bWwiPm1lbnVfbWFyaygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfbWFyazwvU1RST05HPiAtIGdldCBhbmQgc2V0IHRoZSBtZW51IG1hcmsgc3RyaW5nCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X21hcmsoTUVOVSAqbWVudSwgY29uc3QgY2hhciAqbWFyayk7CisgICAgICAgY29uc3QgY2hhciAqbWVudV9tYXJrKGNvbnN0IE1FTlUgKm1lbnUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEluICBvcmRlciAgdG8gbWFrZSBtZW51IHNlbGVjdGlvbnMgdmlzaWJsZSBvbiBvbGRlciB0ZXJtaS0KKyAgICAgICBuYWxzIHdpdGhvdXQgaGlnaGxpZ2h0aW5nIG9yIGNvbG9yICBjYXBhYmlsaXR5LCAgdGhlICBtZW51CisgICAgICAgbGlicmFyeSAgbWFya3MgIHNlbGVjdGVkICBpdGVtcyAgaW4gIGEgIG1lbnUgd2l0aCBhIHByZWZpeAorICAgICAgIHN0cmluZy4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X21hcms8L1NUUk9ORz4gc2V0cyB0aGUgbWFyayAgc3RyaW5nICBmb3IgIHRoZQorICAgICAgIGdpdmVuICBtZW51LiAgIENhbGxpbmcgPFNUUk9ORz5zZXRfbWVudV9tYXJrPC9TVFJPTkc+IHdpdGggYSBudWxsIG1lbnUgaXRlbQorICAgICAgIHdpbGwgYWJvbGlzaCB0aGUgbWFyayAgc3RyaW5nLiAgIE5vdGUgIHRoYXQgIGNoYW5naW5nICB0aGUKKyAgICAgICBsZW5ndGggIG9mICB0aGUgIG1hcmsgIHN0cmluZyBmb3IgYSBtZW51IHdoaWxlIHRoZSBtZW51IGlzCisgICAgICAgcG9zdGVkIGlzIGxpa2VseSB0byBwcm9kdWNlIHVuaGVscGZ1bCBiZWhhdmlvci4KKworICAgICAgIFRoZSBkZWZhdWx0IHN0cmluZyBpcyAiLSIgKGEgZGFzaCkuIENhbGxpbmcgIDxTVFJPTkc+c2V0X21lbnVfbWFyazwvU1RST05HPgorICAgICAgIHdpdGggYSBub24tPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG1lbnUgYXJndW1lbnQgd2lsbCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPm1lbnVfbWFyazwvU1RST05HPiByZXR1cm5zIHRoZSBtZW51J3MgbWFyayBzdHJpbmcgKG9yCisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIHRoZXJlIGlzIG5vbmUpLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5tZW51X21hcms8L1NUUk9ORz4gcmV0dXJucyBhICBwb2ludGVyICAod2hpY2ggIG1heSAgYmUKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X21hcms8L1NUUk9ORz4gbWF5IHJldHVybiB0aGUgZm9sbG93aW5nIGVycm9yCisgICAgICAgY29kZXM6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfbmV3LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9uZXcuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZkZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21lbnVfbmV3LjN4Lmh0bWwKQEAgLTAsMCArMSwxMjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfbmV3LjN4LHYgMS45IDIwMDYvMTEvMDQgMTg6MzE6MzcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9uZXcgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X25ldyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9uZXcuM3guaHRtbCI+bWVudV9uZXcoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X25ldy4zeC5odG1sIj5tZW51X25ldygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X25ldzwvU1RST05HPiAtIGNyZWF0ZSBhbmQgZGVzdHJveSBtZW51cworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIE1FTlUgKm5ld19tZW51KElURU0gKippdGVtcyk7CisgICAgICAgaW50IGZyZWVfbWVudShNRU5VICptZW51KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPm5ld19tZW51PC9TVFJPTkc+ICBjcmVhdGVzIGEgbmV3IG1lbnUgY29ubmVjdGVkIHRvIGEKKyAgICAgICBzcGVjaWZpZWQgaXRlbSBwb2ludGVyIGFycmF5ICh3aGljaCAgbXVzdCAgYmUgIDxTVFJPTkc+TlVMTDwvU1RST05HPi10ZXJtaS0KKyAgICAgICBuYXRlZCkuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZyZWVfbWVudTwvU1RST05HPiAgZGlzY29ubmVjdHMgIDxFTT5tZW51PC9FTT4gIGZyb20gaXRzIGl0ZW0KKyAgICAgICBhcnJheSBhbmQgZnJlZXMgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkIGZvciB0aGUgbWVudS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X21lbnU8L1NUUk9ORz4gcmV0dXJucyAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+ICBvbiAgZXJyb3IuICAgSXQgIHNldHMKKyAgICAgICBlcnJubyBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uJ3MgZmFpbHVyZToKKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZyZWVfbWVudTwvU1RST05HPiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9uZXcuM3guaHRtbCI+bWVudV9uZXcoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vbWVudV9vcHRzLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9vcHRzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiOTY3MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51X29wdHMuM3guaHRtbApAQCAtMCwwICsxLDE0OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9vcHRzLjN4LHYgMS4xMCAyMDA3LzAyLzI0IDE3OjMzOjU5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfb3B0cyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfb3B0cyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfb3B0czwvU1RST05HPiAtIHNldCBhbmQgZ2V0IG1lbnUgb3B0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfbWVudV9vcHRzKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKTsKKyAgICAgICBpbnQgbWVudV9vcHRzX29uKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKTsKKyAgICAgICBpbnQgbWVudV9vcHRzX29mZihNRU5VICptZW51LCBNZW51X09wdGlvbnMgb3B0cyk7CisgICAgICAgTWVudV9PcHRpb25zIG1lbnVfb3B0cyhjb25zdCBNRU5VICptZW51KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9tZW51X29wdHM8L1NUUk9ORz4gIHNldHMgIGFsbCAgdGhlICBnaXZlbiBtZW51J3MKKyAgICAgICBvcHRpb24gYml0cyAgKG1lbnUgIG9wdGlvbiAgYml0cyAgbWF5ICBiZSAgbG9naWNhbGx5LU9SJ2VkCisgICAgICAgdG9nZXRoZXIpLgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPm1lbnVfb3B0c19vbjwvU1RST05HPiB0dXJucyBvbiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsCisgICAgICAgYW5kIGxlYXZlcyBvdGhlcnMgYWxvbmUuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5tZW51X29wdHNfb2ZmPC9TVFJPTkc+ICB0dXJucyAgb2ZmICB0aGUgIGdpdmVuICBvcHRpb24KKyAgICAgICBiaXRzLCBhbmQgbGVhdmVzIG90aGVycyBhbG9uZS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+bWVudV9vcHRzPC9TVFJPTkc+IHJldHVybnMgdGhlIG1lbnUncyBjdXJyZW50IG9wdGlvbgorICAgICAgIGJpdHMuCisKKyAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRlZmluZWQgKGFsbCBhcmUgb24gYnkgZGVmYXVsdCk6CisKKyAgICAgICBPX09ORVZBTFVFCisgICAgICAgICAgICBPbmx5IG9uZSBpdGVtIGNhbiBiZSBzZWxlY3RlZCBmb3IgdGhpcyBtZW51LgorCisgICAgICAgT19TSE9XREVTQworICAgICAgICAgICAgRGlzcGxheSAgdGhlICBpdGVtICBkZXNjcmlwdGlvbnMgIHdoZW4gIHRoZSAgbWVudSAgaXMKKyAgICAgICAgICAgIHBvc3RlZC4KKworICAgICAgIE9fUk9XTUFKT1IKKyAgICAgICAgICAgIERpc3BsYXkgdGhlIG1lbnUgaW4gcm93LW1ham9yIG9yZGVyLgorCisgICAgICAgT19JR05PUkVDQVNFCisgICAgICAgICAgICBJZ25vcmUgdGhlIGNhc2Ugd2hlbiBwYXR0ZXJuLW1hdGNoaW5nLgorCisgICAgICAgT19TSE9XTUFUQ0gKKyAgICAgICAgICAgIE1vdmUgdGhlIGN1cnNvciB0byB3aXRoaW4gdGhlIGl0ZW0gIG5hbWUgIHdoaWxlICBwYXQtCisgICAgICAgICAgICB0ZXJuLW1hdGNoaW5nLgorCisgICAgICAgT19OT05DWUNMSUMKKyAgICAgICAgICAgIERvbid0ICAgd3JhcCAgIGFyb3VuZCAgbmV4dC1pdGVtICBhbmQgIHByZXZpb3VzLWl0ZW0sCisgICAgICAgICAgICByZXF1ZXN0cyB0byB0aGUgb3RoZXIgZW5kIG9mIHRoZSBtZW51LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgZm9yIDxTVFJPTkc+bWVudV9vcHRzPC9TVFJPTkc+LCBlYWNoIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbC0KKyAgICAgICBsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfcGF0dGVybi4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL21lbnVfcGF0dGVybi4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDVjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9wYXR0ZXJuLjN4LHYgMS4xMSAyMDA4LzA2LzIxIDIxOjU4OjIwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfcGF0dGVybiAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfcGF0dGVybiAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9wYXR0ZXJuLjN4Lmh0bWwiPm1lbnVfcGF0dGVybigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfcGF0dGVybjwvU1RST05HPiAtIGdldCBhbmQgc2V0IGEgbWVudSdzIHBhdHRlcm4gYnVmZmVyCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X3BhdHRlcm4oTUVOVSAqbWVudSwgY29uc3QgY2hhciAqcGF0dGVybik7CisgICAgICAgY2hhciAqbWVudV9wYXR0ZXJuKGNvbnN0IE1FTlUgKm1lbnUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEV2ZXJ5ICBtZW51ICBoYXMgIGFuICBhc3NvY2lhdGVkIHBhdHRlcm4gbWF0Y2ggYnVmZmVyLiAgQXMKKyAgICAgICBpbnB1dCBldmVudHMgdGhhdCBhcmUgcHJpbnRhYmxlIGNoYXJhY3RlcnMgY29tZSAgaW4sICB0aGV5CisgICAgICAgYXJlICBhcHBlbmRlZCB0byB0aGlzIG1hdGNoIGJ1ZmZlciBhbmQgdGVzdGVkIGZvciBhIG1hdGNoLAorICAgICAgIGFzIGRlc2NyaWJlZCBpbiA8U1RST05HPjxBIEhSRUY9Im1lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9wYXR0ZXJuPC9TVFJPTkc+IHNldHMgdGhlIHBhdHRlcm4gYnVmZmVyICBmb3IKKyAgICAgICB0aGUgIGdpdmVuIG1lbnUgYW5kIHRyaWVzIHRvIGZpbmQgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0uCisgICAgICAgSWYgaXQgc3VjY2VlZHMsIHRoYXQgaXRlbSBiZWNvbWVzICBjdXJyZW50OyAgaWYgIG5vdCwgIHRoZQorICAgICAgIGN1cnJlbnQgaXRlbSBkb2VzIG5vdCBjaGFuZ2UuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPm1lbnVfcGF0dGVybjwvU1RST05HPiAgcmV0dXJucyB0aGUgcGF0dGVybiBidWZmZXIgb2YKKyAgICAgICB0aGUgZ2l2ZW4gPEVNPm1lbnU8L0VNPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9wYXR0ZXJuPC9TVFJPTkc+IHJldHVybnMgYSBwb2ludGVyLCB3aGljaCBpcyA8U1RST05HPk5VTEw8L1NUUk9ORz4KKyAgICAgICBpZiB0aGUgPEVNPm1lbnU8L0VNPiBwYXJhbWV0ZXIgaXMgPFNUUk9ORz5OVUxMPC9TVFJPTkc+LiAgT3RoZXJ3aXNlLCBpdCBpcyBhIHBvaW50ZXIKKyAgICAgICB0byBhIHN0cmluZyB3aGljaCBpcyBlbXB0eSBpZiBubyBwYXR0ZXJuIGhhcyBiZWVuIHNldC4gIEl0CisgICAgICAgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfbWVudV9wYXR0ZXJuPC9TVFJPTkc+ICBtYXkgIHJldHVybiB0aGUgZm9sbG93aW5nCisgICAgICAgZXJyb3IgY29kZXM6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX1NUQVRFPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hLQorICAgICAgICAgICAgdGlvbiBmdW5jdGlvbi4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIG1lbnUuCisKKyAgICAgICA8U1RST05HPkVfTk9fTUFUQ0g8L1NUUk9ORz4KKyAgICAgICAgICAgIENoYXJhY3RlciBmYWlsZWQgdG8gbWF0Y2guCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21lbnVfcG9zdC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL21lbnVfcG9zdC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDU1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbWVudV9wb3N0LjN4Lmh0bWwKQEAgLTAsMCArMSwxMzggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfcG9zdC4zeCx2IDEuOSAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfcG9zdCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfcG9zdCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9wb3N0LjN4Lmh0bWwiPm1lbnVfcG9zdCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3Bvc3QuM3guaHRtbCI+bWVudV9wb3N0KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfcG9zdDwvU1RST05HPiAgLSAgd3JpdGUgb3IgZXJhc2UgbWVudXMgZnJvbSBhc3NvY2lhdGVkIHN1Yndpbi0KKyAgICAgICBkb3dzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHBvc3RfbWVudShNRU5VICptZW51KTsKKyAgICAgICBpbnQgdW5wb3N0X21lbnUoTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+cG9zdF9tZW51PC9TVFJPTkc+IGRpc3BsYXlzIGEgbWVudSB0byAgaXRzICBhc3NvY2lhdGVkCisgICAgICAgc3Vid2luZG93LiAgIFRvIHRyaWdnZXIgcGh5c2ljYWwgZGlzcGxheSBvZiB0aGUgc3Vid2luZG93LAorICAgICAgIHVzZSAgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+ICBvciAgc29tZSAgZXF1aXZhbGVudCAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gIHJvdXRpbmUgICAodGhlCisgICAgICAgaW1wbGljaXQgIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4gIHRyaWdnZXJlZCAgYnkgIGFuIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGlucHV0IHJlcXVlc3QKKyAgICAgICB3aWxsIGRvKS4gPFNUUk9ORz5wb3N0X21lbnU8L1NUUk9ORz4gcmVzZXRzIHRoZSAgc2VsZWN0aW9uICBzdGF0dXMgIG9mICBhbGwKKyAgICAgICBpdGVtcy4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+dW5wb3N0X21lbnU8L1NUUk9ORz4gZXJhc2VzIG1lbnUgZnJvbSBpdHMgYXNzb2NpYXRlZAorICAgICAgIHN1YndpbmRvdy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfU1RBVEU8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmEtCisgICAgICAgICAgICB0aW9uIGZ1bmN0aW9uLgorCisgICAgICAgPFNUUk9ORz5FX05PX1JPT008L1NUUk9ORz4KKyAgICAgICAgICAgIE1lbnUgaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LiBZb3Ugc2hvdWxkIGNvbnNpZGVyCisgICAgICAgICAgICB0byB1c2UgPFNUUk9ORz5zZXRfbWVudV9mb3JtYXQoKTwvU1RST05HPiB0byBzb2x2ZSB0aGUgcHJvYmxlbS4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBoYXMgbm90IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWICBtZW51ICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9wb3N0LjN4Lmh0bWwiPm1lbnVfcG9zdCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9tZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9yZXF1ZXN0bmFtZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTllZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbWVudV9yZXF1ZXN0bmFtZS4zeC5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X3JlcXVlc3RuYW1lLjN4LHYgMS43IDIwMDYvMTEvMDQgMTc6NTY6MDkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9yZXF1ZXN0bmFtZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfcmVxdWVzdG5hbWUgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfcmVxdWVzdG5hbWUuM3guaHRtbCI+bWVudV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9yZXF1ZXN0bmFtZS4zeC5odG1sIj5tZW51X3JlcXVlc3RuYW1lKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfcmVxdWVzdG5hbWU8L1NUUk9ORz4gLSBoYW5kbGUgcHJpbnRhYmxlIG1lbnUgcmVxdWVzdCBuYW1lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGNvbnN0IGNoYXIgKm1lbnVfcmVxdWVzdF9uYW1lKGludCByZXF1ZXN0KTsKKyAgICAgICBpbnQgbWVudV9yZXF1ZXN0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPm1lbnVfcmVxdWVzdF9uYW1lPC9TVFJPTkc+IHJldHVybnMgdGhlIHByaW50YWJsZSBuYW1lCisgICAgICAgb2YgYSBtZW51IHJlcXVlc3QgY29kZS4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5tZW51X3JlcXVlc3RfYnlfbmFtZTwvU1RST05HPiBzZWFyY2hlcyBpbiB0aGUgbmFtZS10YS0KKyAgICAgICBibGUgIGZvciAgYSAgcmVxdWVzdCAgd2l0aCAgdGhlIGdpdmVuIG5hbWUgYW5kIHJldHVybnMgaXRzCisgICAgICAgcmVxdWVzdCBjb2RlLiAgT3RoZXJ3aXNlIEVfTk9fTUFUQ0ggaXMgcmV0dXJuZWQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9yZXF1ZXN0X25hbWU8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IgYW5kIHNldHMgZXJybm8gIHRvCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPi4KKyAgICAgICA8U1RST05HPm1lbnVfcmVxdWVzdF9ieV9uYW1lPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5FX05PX01BVENIPC9TVFJPTkc+IG9uIGVycm9yLiAgSXQgZG9lcworICAgICAgIG5vdCBzZXQgZXJybm8uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgYXJlICBzcGVjaWZpYyAgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3QKKyAgICAgICBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtICBWICBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgIGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uLQorICAgICAgIGRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwiPm1lbnVfcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2ZTk1YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51X3NwYWNpbmcuM3guaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9zcGFjaW5nLjN4LHYgMS44IDIwMDQvMTIvMTEgMjM6Mzk6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9zcGFjaW5nIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9zcGFjaW5nIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X3NwYWNpbmcuM3guaHRtbCI+bWVudV9zcGFjaW5nKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfc3BhY2luZy4zeC5odG1sIj5tZW51X3NwYWNpbmcoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9zcGFjaW5nPC9TVFJPTkc+IC0gQ29udHJvbCBzcGFjaW5nIGJldHdlZW4gbWVudSBpdGVtcy4KKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X21lbnVfc3BhY2luZyhNRU5VICptZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcGNfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwY19yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcGNfY29sdW1ucyk7CisgICAgICAgaW50IG1lbnVfc3BhY2luZyhjb25zdCBNRU5VICptZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzcGNfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNwY19yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzcGNfY29sdW1ucyk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfbWVudV9zcGFjaW5nPC9TVFJPTkc+ICBzZXRzIHRoZSBzcGFjaW5nIGluZm9ybWEtCisgICAgICAgdGlvbnMgZm9yIHRoZSBtZW51LiAgPFNUUk9ORz5zcGNfZGVzY3JpcHRpb248L1NUUk9ORz4gY29udHJvbHMgIHRoZSAgbnVtYmVyCisgICAgICAgb2Ygc3BhY2VzIGJldHdlZW4gYW4gaXRlbSBuYW1lIGFuZCBhbiBpdGVtIGRlc2NyaXB0aW9uLiBJdAorICAgICAgIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDxTVFJPTkc+VEFCU0laRTwvU1RST05HPi4gVGhlIG1lbnUgc3lzdGVtICBwdXRzICBpbgorICAgICAgIHRoZSAgbWlkZGxlICBvZiAgdGhpcyAgc3BhY2luZyBhcmVhIHRoZSBwYWQgY2hhcmFjdGVyLiBUaGUKKyAgICAgICByZW1haW5pbmcgcGFydHMgYXJlIGZpbGxlZCB3aXRoIHNwYWNlcy4gIDxTVFJPTkc+c3BjX3Jvd3M8L1NUUk9ORz4gY29udHJvbHMKKyAgICAgICB0aGUgIG51bWJlciBvZiByb3dzIHRoYXQgYXJlIHVzZWQgZm9yIGFuIGl0ZW0uIEl0IG11c3Qgbm90CisgICAgICAgYmUgbGFyZ2VyIHRoYW4gMy4gVGhlIG1lbnUgc3lzdGVtIGluc2VydHMgdGhlIGJsYW5rICBsaW5lcworICAgICAgIGJldHdlZW4gIGl0ZW0gcm93cywgdGhlc2UgbGluZXMgd2lsbCBjb250YWluIHRoZSBwYWQgY2hhci0KKyAgICAgICBhY3RlciBpbiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb25zLiAgPFNUUk9ORz5zcGNfY29sdW1uczwvU1RST05HPiAgY29udHJvbHMKKyAgICAgICB0aGUgbnVtYmVyIG9mIGJsYW5rcyBiZXR3ZWVuIGNvbHVtbnMgb2YgaXRlbXMuIEl0IG11c3Qgbm90CisgICAgICAgYmUgbGFyZ2VyIHRoYW4gVEFCU0laRS4gIEEgdmFsdWUgb2YgMCBmb3IgYWxsIHRoZSAgc3BhY2luZworICAgICAgIHZhbHVlcyAgcmVzZXRzICB0aGVtIHRvIHRoZSBkZWZhdWx0LCB3aGljaCBpcyAxIGZvciBhbGwgb2YKKyAgICAgICB0aGVtLgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1lbnVfc3BhY2luZzwvU1RST05HPiBwYXNzZXMgYmFjayB0aGUgc3BhY2luZyBpbmZvIGZvcgorICAgICAgIHRoZSBtZW51LiBJZiBhIHBvaW50ZXIgaXMgTlVMTCwgdGhpcyBzcGVjaWZpYyBpbmZvIGlzIHNpbS0KKyAgICAgICBwbHkgbm90IHJldHVybmVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBCb3RoIHJvdXRpbmVzIHJldHVybiA8U1RST05HPkVfT0s8L1NUUk9ORz4gb24gc3VjY2Vzcy4gPFNUUk9ORz5zZXRfbWVudV9zcGFjaW5nPC9TVFJPTkc+IG1heQorICAgICAgIHJldHVybiAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPiAgaWYgdGhlIG1lbnUgaXMgcG9zdGVkLCBvciA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgaWYgb25lIG9mIHRoZSBzcGFjaW5nIHZhbHVlcyBpcyBvdXQgb2YgcmFuZ2UuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgYXJlICBzcGVjaWZpYyAgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3QKKyAgICAgICBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtICBWICBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgIGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uLQorICAgICAgIGRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbCBiL2RvYy9odG1sL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODM0MWNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X3VzZXJwdHIuM3gsdiAxLjggMjAwNi8xMS8wNCAxODoyMTowMyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X3VzZXJwdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X3VzZXJwdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfdXNlcnB0ci4zeC5odG1sIj5tZW51X3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X3VzZXJwdHI8L1NUUk9ORz4gLSBhc3NvY2lhdGUgYXBwbGljYXRpb24gZGF0YSB3aXRoIGEgbWVudSBpdGVtCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X3VzZXJwdHIoTUVOVSAqbWVudSwgdm9pZCAqdXNlcnB0cik7CisgICAgICAgdm9pZCAqbWVudV91c2VycHRyKGNvbnN0IE1FTlUgKm1lbnUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEV2ZXJ5IG1lbnUgYW5kIGV2ZXJ5IG1lbnUgaXRlbSBoYXMgYSAgZmllbGQgIHRoYXQgIGNhbiAgYmUKKyAgICAgICB1c2VkIHRvIGhvbGQgYXBwbGljYXRpb24tc3BlY2lmaWMgZGF0YSAodGhhdCBpcywgdGhlIG1lbnUtCisgICAgICAgZHJpdmVyIGNvZGUgbGVhdmVzIGl0IGFsb25lKS4gIFRoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldAorICAgICAgIHRoZSBtZW51IHVzZXIgcG9pbnRlciBmaWVsZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X3VzZXJwdHI8L1NUUk9ORz4gIHJldHVybnMgIGEgIHBvaW50ZXIgKHdoaWNoIG1heSBiZSA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQKKyAgICAgICBkb2VzIG5vdCBzZXQgZXJybm8uCisKKyAgICAgICA8U1RST05HPnNldF9tZW51X3VzZXJwdHI8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVfT0s8L1NUUk9ORz4gKHN1Y2Nlc3MpLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgdXNlciBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyLiAgV2UgY2hvc2Ugbm90IHRvIGxlYXZlCisgICAgICAgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9tZW51X3dpbi4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL21lbnVfd2luLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1MTFiZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9tZW51X3dpbi4zeC5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X3dpbi4zeCx2IDEuOCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfd2luIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV93aW4gM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV93aW48L1NUUk9ORz4gIC0gbWFrZSBhbmQgYnJlYWsgbWVudSB3aW5kb3cgYW5kIHN1YndpbmRvdyBhc3NvLQorICAgICAgIGNpYXRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X3dpbihNRU5VICptZW51LCBXSU5ET1cgKndpbik7CisgICAgICAgV0lORE9XICptZW51X3dpbihjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgc2V0X21lbnVfc3ViKE1FTlUgKm1lbnUsIFdJTkRPVyAqc3ViKTsKKyAgICAgICBXSU5ET1cgKm1lbnVfc3ViKGNvbnN0IE1FTlUgKm1lbnUpOworICAgICAgIGludCBzY2FsZV9tZW51KGNvbnN0IE1FTlUgKm1lbnUsIGludCAqcm93cywgaW50ICpjb2x1bW5zKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBFdmVyeSAgbWVudSBoYXMgYW4gYXNzb2NpYXRlZCBwYWlyIG9mIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvd3MuICBUaGUKKyAgICAgICBtZW51IHdpbmRvdyBkaXNwbGF5cyBhbnkgdGl0bGUgYW5kIGJvcmRlciBhc3NvY2lhdGVkICB3aXRoCisgICAgICAgdGhlICB3aW5kb3c7ICB0aGUgbWVudSBzdWJ3aW5kb3cgZGlzcGxheXMgdGhlIGl0ZW1zIG9mIHRoZQorICAgICAgIG1lbnUgdGhhdCBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLgorCisgICAgICAgVGhlIGZpcnN0IGZvdXIgZnVuY3Rpb25zIGdldCBhbmQgc2V0IHRob3NlIHdpbmRvd3MuICBJdCBpcworICAgICAgIG5vdCBuZWNlc3NhcnkgdG8gc2V0IGVpdGhlciB3aW5kb3c7IGJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIKKyAgICAgICBjb2RlIHVzZXMgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4gZm9yIGJvdGguCisKKyAgICAgICBJbiB0aGUgPFNUUk9ORz5zZXRfPC9TVFJPTkc+IGZ1bmN0aW9ucywgd2luZG93IGFyZ3VtZW50IG9mIDxTVFJPTkc+TlVMTDwvU1RST05HPiBpcyAgdHJlYXRlZAorICAgICAgIGFzICB0aG91Z2ggIGl0ICB3ZXJlICA8U1RST05HPnN0c2RjcjwvU1RST05HPi4gICBBIG1lbnUgYXJndW1lbnQgb2YgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlzCisgICAgICAgdHJlYXRlZCBhcyBhIHJlcXVlc3QgdG8gY2hhbmdlICB0aGUgIHN5c3RlbSAgZGVmYXVsdCAgbWVudQorICAgICAgIHdpbmRvdyBvciBzdWJ3aW5kb3cuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+c2NhbGVfbWVudTwvU1RST05HPiByZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgcmVxdWlyZWQKKyAgICAgICBmb3IgdGhlIHN1YndpbmRvdyBvZiA8RU0+bWVudTwvRU0+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLiAgIFJvdS0KKyAgICAgICB0aW5lcyAgdGhhdCAgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICAgZXJyb3IgY29kZXM6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWICBtZW51ICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCBiL2RvYy9odG1sL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyOTQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwKQEAgLTAsMCArMSwxNDYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1pdGVtX2N1cnJlbnQuM3gsdiAxLjExIDIwMDYvMTEvMDQgMTg6MTg6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWl0ZW1fY3VycmVudCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1pdGVtX2N1cnJlbnQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1pdGVtX2N1cnJlbnQ8L1NUUk9ORz4gLSBzZXQgYW5kIGdldCBjdXJyZW50X21lbnVfaXRlbQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfY3VycmVudF9pdGVtKE1FTlUgKm1lbnUsIGNvbnN0IElURU0gKml0ZW0pOworICAgICAgIElURU0gKmN1cnJlbnRfaXRlbShjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgc2V0X3RvcF9yb3coTUVOVSAqbWVudSwgaW50IHJvdyk7CisgICAgICAgaW50IHRvcF9yb3coY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IGl0ZW1faW5kZXgoY29uc3QgSVRFTSAqaXRlbSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfY3VycmVudF9pdGVtPC9TVFJPTkc+IHNldHMgdGhlIGN1cnJlbnQgaXRlbSAodGhlCisgICAgICAgaXRlbSBvbiAgd2hpY2ggIHRoZSAgbWVudSAgY3Vyc29yICBpcyAgcG9zaXRpb25lZCkuICAgPFNUUk9ORz5jdXItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5yZW50X2l0ZW08L1NUUk9ORz4gIHJldHVybnMgIGEgIHBvaW50ZXIgIHRvIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlCisgICAgICAgZ2l2ZW4gbWVudS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF90b3Bfcm93PC9TVFJPTkc+IHNldHMgdGhlIHRvcCByb3cgb2YgdGhlICBtZW51ICB0bworICAgICAgIHNob3cgIHRoZSAgZ2l2ZW4gIHJvdyAgKHRoZSB0b3Agcm93IGlzIGluaXRpYWxseSAwLCBhbmQgaXMKKyAgICAgICByZXNldCB0byB0aGlzIHZhbHVlIHdoZW5ldmVyIHRoZSA8U1RST05HPk9fUk9XTUFKT1I8L1NUUk9ORz4gb3B0aW9uIGlzIHRvZy0KKyAgICAgICBnbGVkKS4gICBUaGUgIGl0ZW0gIGxlZnRtb3N0IG9uIHRoZSBnaXZlbiByb3cgYmVjb21lcyBjdXItCisgICAgICAgcmVudC4gIFRoZSBmdW5jdGlvbiA8U1RST05HPnRvcF9yb3c8L1NUUk9ORz4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSAgdG9wCisgICAgICAgbWVudSByb3cgYmVpbmcgZGlzcGxheWVkLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+aXRlbV9pbmRleDwvU1RST05HPiByZXR1cm5zIHRoZSAoemVyby1vcmlnaW4pIGluZGV4IG9mCisgICAgICAgPEVNPml0ZW08L0VNPiBpbiB0aGUgbWVudSdzIGl0ZW0gcG9pbnRlciBsaXN0LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmN1cnJlbnRfaXRlbTwvU1RST05HPiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5ICBiZSAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+KS4gICBJdAorICAgICAgIGRvZXMgbm90IHNldCBlcnJuby4KKworICAgICAgIDxTVFJPTkc+dG9wX3JvdzwvU1RST05HPiAgYW5kICA8U1RST05HPml0ZW1faW5kZXg8L1NUUk9ORz4gIHJldHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gICh0aGUgZ2VuZXJhbCA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIGVycm9yIHZhbHVlKSBpZiB0aGVpciA8RU0+bWVudTwvRU0+IHBhcmFtZXRlciBpcyA8U1RST05HPk5VTEw8L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPnNldF9jdXJyZW50X2l0ZW08L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2V0X3RvcF9yb3c8L1NUUk9ORz4gcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93LQorICAgICAgIGluZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfU1RBVEU8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmEtCisgICAgICAgICAgICB0aW9uIGZ1bmN0aW9uLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgVGhlICBTVnI0IG1lbnUgbGlicmFyeSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyB0aGUgPFNUUk9ORz50b3Bfcm93PC9TVFJPTkc+CisgICAgICAgYW5kIDxTVFJPTkc+aW5kZXhfaXRlbTwvU1RST05HPiBlcnJvciB2YWx1ZSBhcyAtMSAod2hpY2ggaXMgIHRoZSAgdmFsdWUgIG9mCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODk1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtaXRlbV9uYW1lLjN4LHYgMS42IDIwMDYvMTEvMDQgMTc6NTM6NDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWl0ZW1fbmFtZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1pdGVtX25hbWUgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1pdGVtX25hbWUuM3guaHRtbCI+bWl0ZW1fbmFtZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1pdGVtX25hbWU8L1NUUk9ORz4gLSBnZXQgbWVudSBpdGVtIG5hbWUgYW5kIGRlc2NyaXB0aW9uIGZpZWxkcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGNvbnN0IGNoYXIgKml0ZW1fbmFtZShjb25zdCBJVEVNICppdGVtKTsKKyAgICAgICBjb25zdCBjaGFyICppdGVtX2Rlc2NyaXB0aW9uKGNvbnN0IElURU0gKml0ZW0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5pdGVtX25hbWU8L1NUUk9ORz4gcmV0dXJucyB0aGUgbmFtZSBwYXJ0IG9mIHRoZSBnaXZlbgorICAgICAgIGl0ZW0uCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+aXRlbV9kZXNjcmlwdGlvbjwvU1RST05HPiByZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBwYXJ0CisgICAgICAgb2YgdGhlIGdpdmVuIGl0ZW0uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHJldHVybiBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgVGhleQorICAgICAgIGRvIG5vdCBzZXQgZXJybm8uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSAgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uYW1lLjN4Lmh0bWwiPm1pdGVtX25hbWUoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2OWIxMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9taXRlbV9uZXcuM3guaHRtbApAQCAtMCwwICsxLDEzNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWl0ZW1fbmV3LjN4LHYgMS4xMCAyMDA2LzExLzA0IDE4OjE2OjM2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1pdGVtX25ldyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1pdGVtX25ldyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1pdGVtX25ldzwvU1RST05HPiAtIGNyZWF0ZSBhbmQgZGVzdHJveSBtZW51IGl0ZW1zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgSVRFTSAqbmV3X2l0ZW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworICAgICAgIGludCBmcmVlX2l0ZW0oSVRFTSAqaXRlbSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X2l0ZW08L1NUUk9ORz4gYWxsb2NhdGVzIGEgbmV3IGl0ZW0gYW5kIGluaXRpYWxpemVzCisgICAgICAgaXQgIGZyb20gIHRoZSA8U1RST05HPm5hbWU8L1NUUk9ORz4gYW5kIDxTVFJPTkc+ZGVzY3JpcHRpb248L1NUUk9ORz4gcG9pbnRlcnMuIFBsZWFzZSBub3RpY2UKKyAgICAgICB0aGF0IHRoZSBpdGVtIHN0b3JlcyBvbmx5IHRoZSBwb2ludGVycyAgdG8gIHRoZSAgbmFtZSAgYW5kCisgICAgICAgZGVzY3JpcHRpb24uIFRob3NlIHBvaW50ZXJzIG11c3QgYmUgdmFsaWQgZHVyaW5nIHRoZSBsaWZlLQorICAgICAgIHRpbWUgb2YgdGhlIGl0ZW0uIFNvIHlvdSBzaG91bGQgYmUgdmVyeSBjYXJlZnVsIHdpdGggbmFtZXMKKyAgICAgICBvciBkZXNjcmlwdGlvbnMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvZiBzb21lIHJvdXRpbmVzLgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZyZWVfaXRlbTwvU1RST05HPiBkZS1hbGxvY2F0ZXMgYW4gaXRlbS4gUGxlYXNlIG5vdGljZQorICAgICAgIHRoYXQgaXQgIGlzICB0aGUgIHJlc3BvbnNpYmlsaXR5ICBvZiAgdGhlICBhcHBsaWNhdGlvbiAgdG8KKyAgICAgICByZWxlYXNlICB0aGUgbWVtb3J5IGZvciB0aGUgbmFtZSBvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgaXRlbS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X2l0ZW08L1NUUk9ORz4gcmV0dXJucyAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+ICBvbiAgZXJyb3IuICAgSXQgIHNldHMKKyAgICAgICBlcnJubyBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uJ3MgZmFpbHVyZToKKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZyZWVfaXRlbTwvU1RST05HPiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgSXRlbSBpcyBjb25uZWN0ZWQgdG8gYSBtZW51LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWICBtZW51ICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmV3LjN4Lmh0bWwiPm1pdGVtX25ldygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTkzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sCkBAIC0wLDAgKzEsMTI2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtaXRlbV9vcHRzLjN4LHYgMS45IDIwMDcvMDIvMjQgMTc6MzM6MzIgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWl0ZW1fb3B0cyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1pdGVtX29wdHMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1pdGVtX29wdHM8L1NUUk9ORz4gLSBzZXQgYW5kIGdldCBtZW51IGl0ZW0gb3B0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfaXRlbV9vcHRzKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKTsKKyAgICAgICBpbnQgaXRlbV9vcHRzX29uKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKTsKKyAgICAgICBpbnQgaXRlbV9vcHRzX29mZihJVEVNICppdGVtLCBJdGVtX09wdGlvbnMgb3B0cyk7CisgICAgICAgSXRlbV9PcHRpb25zIGl0ZW1fb3B0cyhjb25zdCBJVEVNICppdGVtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9pdGVtX29wdHM8L1NUUk9ORz4gIHNldHMgIGFsbCAgdGhlICBnaXZlbiBpdGVtJ3MKKyAgICAgICBvcHRpb24gYml0cyAgKG1lbnUgIG9wdGlvbiAgYml0cyAgbWF5ICBiZSAgbG9naWNhbGx5LU9SJ2VkCisgICAgICAgdG9nZXRoZXIpLgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPml0ZW1fb3B0c19vbjwvU1RST05HPiB0dXJucyBvbiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsCisgICAgICAgYW5kIGxlYXZlcyBvdGhlcnMgYWxvbmUuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5pdGVtX29wdHNfb2ZmPC9TVFJPTkc+ICB0dXJucyAgb2ZmICB0aGUgIGdpdmVuICBvcHRpb24KKyAgICAgICBiaXRzLCBhbmQgbGVhdmVzIG90aGVycyBhbG9uZS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+aXRlbV9vcHRzPC9TVFJPTkc+IHJldHVybnMgdGhlIGl0ZW0ncyBjdXJyZW50IG9wdGlvbgorICAgICAgIGJpdHMuCisKKyAgICAgICBUaGVyZSBpcyBvbmx5IG9uZSBkZWZpbmVkIG9wdGlvbiBiaXQgIG1hc2ssICA8U1RST05HPk9fU0VMRUNUQUJMRTwvU1RST05HPi4KKyAgICAgICBXaGVuIHRoaXMgaXMgb24sIHRoZSBpdGVtIG1heSBiZSBzZWxlY3RlZCBkdXJpbmcgbWVudSBwcm8tCisgICAgICAgY2Vzc2luZy4gIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIG9uLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgZm9yIDxTVFJPTkc+aXRlbV9vcHRzPC9TVFJPTkc+LCBlYWNoIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbC0KKyAgICAgICBsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWICBtZW51ICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9vcHRzLjN4Lmh0bWwiPm1pdGVtX29wdHMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdjOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWl0ZW1fdXNlcnB0ci4zeCx2IDEuOSAyMDA2LzExLzA0IDE4OjIxOjAzIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1pdGVtX3VzZXJwdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5taXRlbV91c2VycHRyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtaXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5taXRlbV91c2VycHRyPC9TVFJPTkc+ICAtICBhc3NvY2lhdGUgIGFwcGxpY2F0aW9uICBkYXRhIHdpdGggYSBtZW51CisgICAgICAgaXRlbQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfaXRlbV91c2VycHRyKElURU0gKml0ZW0sIHZvaWQgKnVzZXJwdHIpOworICAgICAgIHZvaWQgKml0ZW1fdXNlcnB0cihjb25zdCBJVEVNICppdGVtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBFdmVyeSBtZW51IGl0ZW0gaGFzIGEgZmllbGQgIHRoYXQgIGNhbiAgYmUgIHVzZWQgIHRvICBob2xkCisgICAgICAgYXBwbGljYXRpb24tc3BlY2lmaWMgIGRhdGEgICh0aGF0IGlzLCB0aGUgbWVudS1kcml2ZXIgY29kZQorICAgICAgIGxlYXZlcyBpdCBhbG9uZSkuICBUaGVzZSBmdW5jdGlvbnMgZ2V0IGFuZCBzZXQgdGhhdCBmaWVsZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5pdGVtX3VzZXJwdHI8L1NUUk9ORz4gIHJldHVybnMgIGEgIHBvaW50ZXIgKHBvc3NpYmx5CisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+KS4gIEl0IGRvZXMgbm90IHNldCBlcnJuby4KKworICAgICAgIFRoZSA8U1RST05HPnNldF9pdGVtX3VzZXJwdHI8L1NUUk9ORz4gYWx3YXlzIHJldHVybnMgPFNUUk9ORz5FX09LPC9TVFJPTkc+IChzdWNjZXNzKS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgVGhlIHVzZXIgcG9pbnRlciBpcyBhIHZvaWQgcG9pbnRlci4gIFdlIGNob3NlIG5vdCB0byBsZWF2ZQorICAgICAgIGl0IGFzIGEgY2hhciBwb2ludGVyIGZvciBTVnI0IGNvbXBhdGliaWxpdHkuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdXNlcnB0ci4zeC5odG1sIj5taXRlbV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21pdGVtX3ZhbHVlLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODZjOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL21pdGVtX3ZhbHVlLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWl0ZW1fdmFsdWUuM3gsdiAxLjggMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5taXRlbV92YWx1ZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1pdGVtX3ZhbHVlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtaXRlbV92YWx1ZS4zeC5odG1sIj5taXRlbV92YWx1ZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3ZhbHVlLjN4Lmh0bWwiPm1pdGVtX3ZhbHVlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1pdGVtX3ZhbHVlPC9TVFJPTkc+IC0gc2V0IGFuZCBnZXQgbWVudSBpdGVtIHZhbHVlcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfaXRlbV92YWx1ZShJVEVNICppdGVtLCBib29sIHZhbHVlKTsKKyAgICAgICBib29sIGl0ZW1fdmFsdWUoY29uc3QgSVRFTSAqaXRlbSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgSWYgIHlvdSAgdHVybiAgb2ZmICB0aGUgbWVudSBvcHRpb24gPFNUUk9ORz5PX09ORVZBTFVFPC9TVFJPTkc+IChlLmcuLCB3aXRoCisgICAgICAgPFNUUk9ORz5zZXRfbWVudV9vcHRzPC9TVFJPTkc+IG9yIDxTVFJPTkc+bWVudV9vcHRzX29mZjwvU1RST05HPjsgIHNlZSAgPFNUUk9ORz48QSBIUkVGPSJtZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKDN4KTwvQT48L1NUUk9ORz4pLCAgdGhlCisgICAgICAgbWVudSBiZWNvbWVzIG11bHRpLXZhbHVlZDsgdGhhdCBpcywgbW9yZSB0aGFuIG9uZSBpdGVtIG1heQorICAgICAgIHNpbXVsdGFuZW91c2x5IGJlIHNlbGVjdGVkLgorCisgICAgICAgSW4gYSBtdWx0aV92YWx1ZWQgbWVudSwgeW91ICBjYW4gIHVzZWQgIDxTVFJPTkc+c2V0X2l0ZW1fdmFsdWU8L1NUUk9ORz4gIHRvCisgICAgICAgc2VsZWN0IHRoZSBnaXZlbiBtZW51IGl0ZW0gKHNlY29uZCBhcmd1bWVudCA8U1RST05HPlRSVUU8L1NUUk9ORz4pIG9yIGRlc2UtCisgICAgICAgbGVjdCBpdCAoc2Vjb25kIGFyZ3VtZW50IDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfaXRlbV92YWx1ZTwvU1RST05HPiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX1JFUVVFU1RfREVOSUVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSAgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3ZhbHVlLjN4Lmh0bWwiPm1pdGVtX3ZhbHVlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL21pdGVtX3Zpc2libGUuM3guaHRtbCBiL2RvYy9odG1sL21hbi9taXRlbV92aXNpYmxlLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZDAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9taXRlbV92aXNpYmxlLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1pdGVtX3Zpc2libGUuM3gsdiAxLjUgMTk5OC8xMS8yOSAwMToxMjo1NSBSaWNrLk9obmVtdXMgRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5taXRlbV92aXNpYmxlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWl0ZW1fdmlzaWJsZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdmlzaWJsZS4zeC5odG1sIj5taXRlbV92aXNpYmxlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV92aXNpYmxlLjN4Lmh0bWwiPm1pdGVtX3Zpc2libGUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWl0ZW1fdmlzaWJsZTwvU1RST05HPiAtIGNoZWNrIHZpc2liaWxpdHkgb2YgYSBtZW51IGl0ZW0KKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBib29sIGl0ZW1fdmlzaWJsZShjb25zdCBJVEVNICppdGVtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBBICBtZW51ICBpdGVtICBpcyAgdmlzaWJsZSAgd2hlbiBpdCBpcyBpbiB0aGUgcG9ydGlvbiBvZiBhCisgICAgICAgcG9zdGVkIG1lbnUgdGhhdCBpcyBtYXBwZWQgb250byB0aGUgc2NyZWVuIChpZiB0aGUgbWVudSBpcworICAgICAgIHNjcm9sbGFibGUsICBpbiAgcGFydGljdWxhciwgIHRoaXMgcG9ydGlvbiB3aWxsIGJlIHNtYWxsZXIKKyAgICAgICB0aGFuIHRoZSB3aG9sZSBtZW51KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3Zpc2libGUuM3guaHRtbCI+bWl0ZW1fdmlzaWJsZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9uY3Vyc2VzLjN4Lmh0bWwgYi9kb2MvaHRtbC9tYW4vbmN1cnNlcy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMWRlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vbmN1cnNlcy4zeC5odG1sCkBAIC0wLDAgKzEsMTIzMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbmN1cnNlcy4zeCx2IDEuOTEgMjAwOC8xMC8xMSAyMDo0MzoxMSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5uY3Vyc2VzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bmN1cnNlcyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPm5jdXJzZXMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAtIENSVCBzY3JlZW4gaGFuZGxpbmcgYW5kIG9wdGltaXphdGlvbiBwYWNrYWdlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAgbGlicmFyeSAgcm91dGluZXMgIGdpdmUgdGhlIHVzZXIgYSB0ZXJtaW5hbC0KKyAgICAgICBpbmRlcGVuZGVudCBtZXRob2Qgb2YgdXBkYXRpbmcgY2hhcmFjdGVyIHNjcmVlbnMgd2l0aCByZWEtCisgICAgICAgc29uYWJsZSAgIG9wdGltaXphdGlvbi4gICAgVGhpcyAgaW1wbGVtZW50YXRpb24gIGlzICBgYG5ldworICAgICAgIGN1cnNlcycnIChuY3Vyc2VzKSBhbmQgaXMgIHRoZSAgYXBwcm92ZWQgIHJlcGxhY2VtZW50ICBmb3IKKyAgICAgICA0LjRCU0QgIGNsYXNzaWMgY3Vyc2VzLCB3aGljaCBoYXMgYmVlbiBkaXNjb250aW51ZWQuICBUaGlzCisgICAgICAgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGVtdWxhdGVzICB0aGUgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiAgbGlicmFyeSAgb2YKKyAgICAgICBTeXN0ZW0gIFYgIFJlbGVhc2UgIDQgIFVOSVgsICBhbmQgWFBHNCAoWC9PcGVuIFBvcnRhYmlsaXR5CisgICAgICAgR3VpZGUpIGN1cnNlcyAoYWxzbyBrbm93biBhcyBYU0kgY3Vyc2VzKS4gIFhTSSBzdGFuZHMgIGZvcgorICAgICAgIFgvT3BlbiAgU3lzdGVtICBJbnRlcmZhY2VzIEV4dGVuc2lvbi4gIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeQorICAgICAgIGlzIGZyZWVseSByZWRpc3RyaWJ1dGFibGUgIGluICBzb3VyY2UgIGZvcm0uICAgRGlmZmVyZW5jZXMKKyAgICAgICBmcm9tICB0aGUgIFNWcjQgY3Vyc2VzIGFyZSBzdW1tYXJpemVkIHVuZGVyIHRoZSA8U1RST05HPkVYVEVOU0lPTlM8L1NUUk9ORz4KKyAgICAgICBhbmQgPFNUUk9ORz5QT1JUQUJJTElUWTwvU1RST05HPiBzZWN0aW9ucyBiZWxvdyBhbmQgZGVzY3JpYmVkIGluIGRldGFpbCAgaW4KKyAgICAgICB0aGUgIHJlc3BlY3RpdmUgIDxTVFJPTkc+RVhURU5TSU9OUzwvU1RST05HPiwgPFNUUk9ORz5QT1JUQUJJTElUWTwvU1RST05HPiBhbmQgPFNUUk9ORz5CVUdTPC9TVFJPTkc+IHNlY3Rpb25zCisgICAgICAgb2YgaW5kaXZpZHVhbCBtYW4gcGFnZXMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgYWxzbyBwcm92aWRlcyBtYW55IHVzZWZ1bCAgZXh0ZW5zaW9ucywKKyAgICAgICBpLmUuLCAgZmVhdHVyZXMgIHdoaWNoICBjYW5ub3QgIGJlIGltcGxlbWVudGVkIGJ5IGEgc2ltcGxlCisgICAgICAgYWRkLW9uIGxpYnJhcnkgYnV0IHdoaWNoIHJlcXVpcmUgYWNjZXNzIHRvICB0aGUgIGludGVybmFscworICAgICAgIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgQSAgcHJvZ3JhbSAgdXNpbmcgIHRoZXNlICByb3V0aW5lcyBtdXN0IGJlIGxpbmtlZCB3aXRoIHRoZQorICAgICAgIDxTVFJPTkc+LWxuY3Vyc2VzPC9TVFJPTkc+IG9wdGlvbiwgb3IgKGlmIGl0IGhhcyBiZWVuIGdlbmVyYXRlZCkgIHdpdGggIHRoZQorICAgICAgIGRlYnVnZ2luZyAgbGlicmFyeSAgPFNUUk9ORz4tbG5jdXJzZXNfZzwvU1RST05HPi4gICAoWW91ciBzeXN0ZW0gaW50ZWdyYXRvcgorICAgICAgIG1heSBhbHNvIGhhdmUgaW5zdGFsbGVkIHRoZXNlIGxpYnJhcmllcyAgdW5kZXIgIHRoZSAgbmFtZXMKKyAgICAgICA8U1RST05HPi1sY3Vyc2VzPC9TVFJPTkc+IGFuZCA8U1RST05HPi1sY3Vyc2VzX2c8L1NUUk9ORz4uKSAgVGhlIG5jdXJzZXNfZyBsaWJyYXJ5IGdlbmVyYXRlcworICAgICAgIHRyYWNlIGxvZ3MgKGluIGEgZmlsZSBjYWxsZWQgJ3RyYWNlJyBpbiB0aGUgY3VycmVudCBkaXJlYy0KKyAgICAgICB0b3J5KSAgdGhhdCBkZXNjcmliZSBjdXJzZXMgYWN0aW9ucy4gIFNlZSBhbHNvIHRoZSBzZWN0aW9uCisgICAgICAgb24gPFNUUk9ORz5BTFRFUk5BVEU8L1NUUk9ORz4gPFNUUk9ORz5DT05GSUdVUkFUSU9OUzwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gcGFja2FnZSBzdXBwb3J0czogb3ZlcmFsbCBzY3JlZW4sICB3aW5kb3cgIGFuZAorICAgICAgIHBhZCBtYW5pcHVsYXRpb247IG91dHB1dCB0byB3aW5kb3dzIGFuZCBwYWRzOyByZWFkaW5nIHRlci0KKyAgICAgICBtaW5hbCBpbnB1dDsgY29udHJvbCBvdmVyIHRlcm1pbmFsIGFuZCAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gIGlucHV0ICBhbmQKKyAgICAgICBvdXRwdXQgIG9wdGlvbnM7IGVudmlyb25tZW50IHF1ZXJ5IHJvdXRpbmVzOyBjb2xvciBtYW5pcHUtCisgICAgICAgbGF0aW9uOyB1c2Ugb2Ygc29mdCBsYWJlbCBrZXlzOyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXM7IGFuZAorICAgICAgIGFjY2VzcyB0byBsb3ctbGV2ZWwgdGVybWluYWwtbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgorCisgICAgICAgVGhlICBsaWJyYXJ5IHVzZXMgdGhlIGxvY2FsZSB3aGljaCB0aGUgY2FsbGluZyBwcm9ncmFtIGhhcworICAgICAgIGluaXRpYWxpemVkLiAgVGhhdCBpcyBub3JtYWxseSBkb25lIHdpdGggPFNUUk9ORz5zZXRsb2NhbGU8L1NUUk9ORz46CisKKyAgICAgICAgICAgICA8U1RST05HPnNldGxvY2FsZShMQ19BTEwsPC9TVFJPTkc+IDxTVFJPTkc+IiIpOzwvU1RST05HPgorCisgICAgICAgSWYgdGhlIGxvY2FsZSBpcyBub3QgaW5pdGlhbGl6ZWQsIHRoZSBsaWJyYXJ5IGFzc3VtZXMgdGhhdAorICAgICAgIGNoYXJhY3RlcnMgIGFyZSAgcHJpbnRhYmxlICBhcyBpbiBJU08tODg1OS0xLCB0byB3b3JrIHdpdGgKKyAgICAgICBjZXJ0YWluIGxlZ2FjeSBwcm9ncmFtcy4gIFlvdSBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgbG9jYWxlCisgICAgICAgYW5kICBub3QgIHJlbHkgb24gc3BlY2lmaWMgZGV0YWlscyBvZiB0aGUgbGlicmFyeSB3aGVuIHRoZQorICAgICAgIGxvY2FsZSBoYXMgbm90IGJlZW4gc2V0dXAuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IG9yIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiBtdXN0IGJlIGNhbGxlZCB0byBpbml0aWFsLQorICAgICAgIGl6ZSB0aGUgbGlicmFyeSBiZWZvcmUgYW55IG9mIHRoZSBvdGhlciByb3V0aW5lcyB0aGF0IGRlYWwKKyAgICAgICB3aXRoIHdpbmRvd3MgYW5kIHNjcmVlbnMgYXJlICB1c2VkLiAgIFRoZSAgcm91dGluZSAgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4KKyAgICAgICBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZXhpdGluZy4KKworICAgICAgIFRvICBnZXQgIGNoYXJhY3Rlci1hdC1hLXRpbWUgIGlucHV0ICB3aXRob3V0IGVjaG9pbmcgKG1vc3QKKyAgICAgICBpbnRlcmFjdGl2ZSwgc2NyZWVuIG9yaWVudGVkIHByb2dyYW1zIHdhbnQgdGhpcyksIHRoZSBmb2wtCisgICAgICAgbG93aW5nIHNlcXVlbmNlIHNob3VsZCBiZSB1c2VkOgorCisgICAgICAgICAgICAgPFNUUk9ORz5pbml0c2NyKCk7PC9TVFJPTkc+IDxTVFJPTkc+Y2JyZWFrKCk7PC9TVFJPTkc+IDxTVFJPTkc+bm9lY2hvKCk7PC9TVFJPTkc+CisKKyAgICAgICBNb3N0IHByb2dyYW1zIHdvdWxkIGFkZGl0aW9uYWxseSB1c2UgdGhlIHNlcXVlbmNlOgorCisgICAgICAgICAgICAgPFNUUk9ORz5ub25sKCk7PC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5pbnRyZmx1c2goc3Rkc2NyLDwvU1RST05HPiA8U1RST05HPkZBTFNFKTs8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmtleXBhZChzdGRzY3IsPC9TVFJPTkc+IDxTVFJPTkc+VFJVRSk7PC9TVFJPTkc+CisKKyAgICAgICBCZWZvcmUgIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gcHJvZ3JhbSBpcyBydW4sIHRoZSB0YWIgc3RvcHMgb2YgdGhlIHRlci0KKyAgICAgICBtaW5hbCBzaG91bGQgYmUgc2V0IGFuZCAgaXRzICBpbml0aWFsaXphdGlvbiAgc3RyaW5ncywgIGlmCisgICAgICAgZGVmaW5lZCwgIG11c3QgIGJlICBvdXRwdXQuICBUaGlzIGNhbiBiZSBkb25lIGJ5IGV4ZWN1dGluZworICAgICAgIHRoZSA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz5pbml0PC9TVFJPTkc+IGNvbW1hbmQgYWZ0ZXIgdGhlIHNoZWxsIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgPFNUUk9ORz5URVJNPC9TVFJPTkc+ICBoYXMgIGJlZW4gIGV4cG9ydGVkLiAgPFNUUk9ORz50c2V0KDEpPC9TVFJPTkc+IGlzIHVzdWFsbHkgcmVzcG9uc2libGUKKyAgICAgICBmb3IgZG9pbmcgdGhpcy4gIFtTZWUgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPiBmb3IgZnVydGhlciBkZXRhaWxzLl0KKworICAgICAgIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeSBwZXJtaXRzIG1hbmlwdWxhdGlvbiAgb2YgIGRhdGEgIHN0cnVjLQorICAgICAgIHR1cmVzLCAgY2FsbGVkICA8RU0+d2luZG93czwvRU0+LCAgd2hpY2ggIGNhbiBiZSB0aG91Z2h0IG9mIGFzIHR3by0KKyAgICAgICBkaW1lbnNpb25hbCBhcnJheXMgb2YgY2hhcmFjdGVycyByZXByZXNlbnRpbmcgYWxsIG9yICBwYXJ0CisgICAgICAgb2YgYSBDUlQgc2NyZWVuLiAgQSBkZWZhdWx0IHdpbmRvdyBjYWxsZWQgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4sIHdoaWNoIGlzCisgICAgICAgdGhlIHNpemUgb2YgdGhlIHRlcm1pbmFsIHNjcmVlbiwgaXMgc3VwcGxpZWQuICBPdGhlcnMgIG1heQorICAgICAgIGJlIGNyZWF0ZWQgd2l0aCA8U1RST05HPm5ld3dpbjwvU1RST05HPi4KKworICAgICAgIE5vdGUgIHRoYXQgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICBkb2VzICBub3QgIGhhbmRsZSBvdmVybGFwcGluZyB3aW5kb3dzLAorICAgICAgIHRoYXQncyBkb25lIGJ5IHRoZSA8U1RST05HPjxBIEhSRUY9InBhbmVsLjN4Lmh0bWwiPnBhbmVsKDN4KTwvQT48L1NUUk9ORz4gbGlicmFyeS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UKKyAgICAgICBjYW4gZWl0aGVyIHVzZSA8U1RST05HPnN0ZHNjcjwvU1RST05HPiBvciBkaXZpZGUgdGhlIHNjcmVlbiBpbnRvIHRpbGVkIHdpbi0KKyAgICAgICBkb3dzIGFuZCBub3QgdXNpbmcgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4gYXQgYWxsLiAgIE1peGluZyAgdGhlICB0d28gIHdpbGwKKyAgICAgICByZXN1bHQgaW4gdW5wcmVkaWN0YWJsZSwgYW5kIHVuZGVzaXJlZCwgZWZmZWN0cy4KKworICAgICAgIFdpbmRvd3MgYXJlIHJlZmVycmVkIHRvIGJ5IHZhcmlhYmxlcyBkZWNsYXJlZCBhcyA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4uCisgICAgICAgVGhlc2UgIGRhdGEgIHN0cnVjdHVyZXMgIGFyZSAgbWFuaXB1bGF0ZWQgIHdpdGggICByb3V0aW5lcworICAgICAgIGRlc2NyaWJlZCAgaGVyZSBhbmQgZWxzZXdoZXJlIGluIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbWFudWFsIHBhZ2VzLgorICAgICAgIEFtb25nIHRob3NlLCB0aGUgbW9zdCBiYXNpYyByb3V0aW5lcyBhcmUgPFNUUk9ORz5tb3ZlPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4uCisgICAgICAgTW9yZSAgZ2VuZXJhbCB2ZXJzaW9ucyBvZiB0aGVzZSByb3V0aW5lcyBhcmUgaW5jbHVkZWQgd2l0aAorICAgICAgIG5hbWVzIGJlZ2lubmluZyB3aXRoIDxTVFJPTkc+dzwvU1RST05HPiwgYWxsb3dpbmcgdGhlICB1c2VyICB0byAgc3BlY2lmeSAgYQorICAgICAgIHdpbmRvdy4gICBUaGUgcm91dGluZXMgbm90IGJlZ2lubmluZyB3aXRoIDxTVFJPTkc+dzwvU1RST05HPiBhZmZlY3QgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4uCisKKyAgICAgICBBZnRlciB1c2luZyByb3V0aW5lcyB0byBtYW5pcHVsYXRlIGEgIHdpbmRvdywgIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiAgaXMKKyAgICAgICBjYWxsZWQsICB0ZWxsaW5nIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHRvIG1ha2UgdGhlIHVzZXIncyBDUlQgc2NyZWVuIGxvb2sKKyAgICAgICBsaWtlIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+LiAgVGhlIGNoYXJhY3RlcnMgaW4gYSB3aW5kb3cgYXJlICBhY3R1YWxseSAgb2YKKyAgICAgICB0eXBlICA8U1RST05HPmNodHlwZTwvU1RST05HPiwgKGNoYXJhY3RlciBhbmQgYXR0cmlidXRlIGRhdGEpIHNvIHRoYXQgb3RoZXIKKyAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhcmFjdGVyIG1heSBhbHNvICBiZSAgc3RvcmVkICB3aXRoCisgICAgICAgZWFjaCBjaGFyYWN0ZXIuCisKKyAgICAgICBTcGVjaWFsICB3aW5kb3dzICBjYWxsZWQgIDxFTT5wYWRzPC9FTT4gIG1heSAgYWxzbyAgYmUgbWFuaXB1bGF0ZWQuCisgICAgICAgVGhlc2UgYXJlIHdpbmRvd3Mgd2hpY2ggYXJlIG5vdCBjb25zdHJhaW5lZCB0byB0aGUgc2l6ZSBvZgorICAgICAgIHRoZSAgc2NyZWVuIGFuZCB3aG9zZSBjb250ZW50cyBuZWVkIG5vdCBiZSBjb21wbGV0ZWx5IGRpcy0KKyAgICAgICBwbGF5ZWQuICBTZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgSW4gYWRkaXRpb24gdG8gZHJhd2luZyBjaGFyYWN0ZXJzICBvbiAgdGhlICBzY3JlZW4sICB2aWRlbworICAgICAgIGF0dHJpYnV0ZXMgIGFuZCBjb2xvcnMgbWF5IGJlIHN1cHBvcnRlZCwgY2F1c2luZyB0aGUgY2hhci0KKyAgICAgICBhY3RlcnMgdG8gc2hvdyB1cCBpbiBzdWNoIG1vZGVzIGFzIHVuZGVybGluZWQsIGluICByZXZlcnNlCisgICAgICAgdmlkZW8sICBvciBpbiBjb2xvciBvbiB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IHN1Y2ggZGlzcGxheQorICAgICAgIGVuaGFuY2VtZW50cy4gIExpbmUgZHJhd2luZyBjaGFyYWN0ZXJzIG1heSBiZSBzcGVjaWZpZWQgdG8KKyAgICAgICBiZSAgb3V0cHV0LiAgIE9uICBpbnB1dCwgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGlzIGFsc28gYWJsZSB0byB0cmFuc2xhdGUKKyAgICAgICBhcnJvdyBhbmQgZnVuY3Rpb24ga2V5cyAgdGhhdCAgdHJhbnNtaXQgIGVzY2FwZSAgc2VxdWVuY2VzCisgICAgICAgaW50byAgc2luZ2xlICB2YWx1ZXMuICAgVGhlIHZpZGVvIGF0dHJpYnV0ZXMsIGxpbmUgZHJhd2luZworICAgICAgIGNoYXJhY3RlcnMsICBhbmQgIGlucHV0ICB2YWx1ZXMgIHVzZSAgbmFtZXMsICBkZWZpbmVkICAgaW4KKyAgICAgICA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4sIHN1Y2ggYXMgPFNUUk9ORz5BX1JFVkVSU0U8L1NUUk9ORz4sIDxTVFJPTkc+QUNTX0hMSU5FPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5LRVlfTEVGVDwvU1RST05HPi4KKworICAgICAgIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgPFNUUk9ORz5MSU5FUzwvU1RST05HPiBhbmQgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+IGFyZSBzZXQsIG9yCisgICAgICAgaWYgdGhlIHByb2dyYW0gaXMgZXhlY3V0aW5nIGluIGEgd2luZG93IGVudmlyb25tZW50LCAgbGluZQorICAgICAgIGFuZCAgY29sdW1uICBpbmZvcm1hdGlvbiAgaW4gdGhlIGVudmlyb25tZW50IHdpbGwgb3ZlcnJpZGUKKyAgICAgICBpbmZvcm1hdGlvbiByZWFkIGJ5IDxFTT50ZXJtaW5mbzwvRU0+LiAgVGhpcyB3b3VsZCBhZmZlY3QgYSBwcm9ncmFtCisgICAgICAgcnVubmluZyAgaW4gYW4gQVQmYW1wO1QgNjMwIGxheWVyLCBmb3IgZXhhbXBsZSwgd2hlcmUgdGhlIHNpemUKKyAgICAgICBvZiBhIHNjcmVlbiBpcyBjaGFuZ2VhYmxlIChzZWUgPFNUUk9ORz5FTlZJUk9OTUVOVDwvU1RST05HPikuCisKKyAgICAgICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPiBpcyBkZWZpbmVkLCBhbnkgIHByby0KKyAgICAgICBncmFtICB1c2luZyAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gY2hlY2tzIGZvciBhIGxvY2FsIHRlcm1pbmFsIGRlZmluaXRpb24KKyAgICAgICBiZWZvcmUgY2hlY2tpbmcgaW4gdGhlIHN0YW5kYXJkIHBsYWNlLiAgIEZvciAgZXhhbXBsZSwgIGlmCisgICAgICAgPFNUUk9ORz5URVJNPC9TVFJPTkc+IGlzIHNldCB0byA8U1RST05HPmF0dDQ0MjQ8L1NUUk9ORz4sIHRoZW4gdGhlIGNvbXBpbGVkIHRlcm1pbmFsIGRlZmluaS0KKyAgICAgICB0aW9uIGlzIGZvdW5kIGluCisKKyAgICAgICAgICAgICA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm8vYS9hdHQ0NDI0PC9TVFJPTkc+LgorCisgICAgICAgKFRoZSA8U1RST05HPmE8L1NUUk9ORz4gaXMgY29waWVkIGZyb20gdGhlIGZpcnN0IGxldHRlciBvZiA8U1RST05HPmF0dDQ0MjQ8L1NUUk9ORz4gdG8gYXZvaWQKKyAgICAgICBjcmVhdGlvbiAgb2YgIGh1Z2UgIGRpcmVjdG9yaWVzLikgIEhvd2V2ZXIsIGlmIDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4gaXMKKyAgICAgICBzZXQgdG8gPFNUUk9ORz4kSE9NRS9teXRlcm1zPC9TVFJPTkc+LCA8U1RST05HPmN1cnNlczwvU1RST05HPiBmaXJzdCBjaGVja3MKKworICAgICAgICAgICAgIDxTVFJPTkc+JEhPTUUvbXl0ZXJtcy9hL2F0dDQ0MjQ8L1NUUk9ORz4sCisKKyAgICAgICBhbmQgaWYgdGhhdCBmYWlscywgaXQgdGhlbiBjaGVja3MKKworICAgICAgICAgICAgIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mby9hL2F0dDQ0MjQ8L1NUUk9ORz4uCisKKyAgICAgICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGV2ZWxvcGluZyBleHBlcmltZW50YWwgZGVmaW5pdGlvbnMgIG9yCisgICAgICAgd2hlbiB3cml0ZSBwZXJtaXNzaW9uIGluIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPiBpcyBub3QgYXZhaWwtCisgICAgICAgYWJsZS4KKworICAgICAgIFRoZSBpbnRlZ2VyICB2YXJpYWJsZXMgIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5DT0xTPC9TVFJPTkc+ICBhcmUgIGRlZmluZWQgIGluCisgICAgICAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+ICBhbmQgd2lsbCBiZSBmaWxsZWQgaW4gYnkgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IHdpdGggdGhlIHNpemUKKyAgICAgICBvZiB0aGUgc2NyZWVuLiAgVGhlIGNvbnN0YW50cyA8U1RST05HPlRSVUU8L1NUUk9ORz4gYW5kIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4gaGF2ZSB0aGUgdmFsLQorICAgICAgIHVlcyA8U1RST05HPjE8L1NUUk9ORz4gYW5kIDxTVFJPTkc+MDwvU1RST05HPiwgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgVGhlICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgcm91dGluZXMgIGFsc28gIGRlZmluZSAgdGhlIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPiB2YXJpYWJsZQorICAgICAgIDxTVFJPTkc+Y3Vyc2NyPC9TVFJPTkc+IHdoaWNoIGlzIHVzZWQgZm9yIGNlcnRhaW4gbG93LWxldmVsIG9wZXJhdGlvbnMgbGlrZQorICAgICAgIGNsZWFyaW5nICBhbmQgIHJlZHJhd2luZyBhIHNjcmVlbiBjb250YWluaW5nIGdhcmJhZ2UuICBUaGUKKyAgICAgICA8U1RST05HPmN1cnNjcjwvU1RST05HPiBjYW4gYmUgdXNlZCBpbiBvbmx5IGEgZmV3IHJvdXRpbmVzLgorCisgICA8U1RST05HPlJvdXRpbmU8L1NUUk9ORz4gPFNUUk9ORz5hbmQ8L1NUUk9ORz4gPFNUUk9ORz5Bcmd1bWVudDwvU1RST05HPiA8U1RST05HPk5hbWVzPC9TVFJPTkc+CisgICAgICAgTWFueSA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lcyBoYXZlIHR3byBvciBtb3JlIHZlcnNpb25zLiAgVGhlICByb3UtCisgICAgICAgdGluZXMgcHJlZml4ZWQgd2l0aCA8U1RST05HPnc8L1NUUk9ORz4gcmVxdWlyZSBhIHdpbmRvdyBhcmd1bWVudC4gIFRoZSByb3UtCisgICAgICAgdGluZXMgcHJlZml4ZWQgd2l0aCA8U1RST05HPnA8L1NUUk9ORz4gcmVxdWlyZSBhIHBhZCBhcmd1bWVudC4gIFRob3NlIHdpdGgtCisgICAgICAgb3V0IGEgcHJlZml4IGdlbmVyYWxseSB1c2UgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgcm91dGluZXMgcHJlZml4ZWQgd2l0aCA8U1RST05HPm12PC9TVFJPTkc+IHJlcXVpcmUgYSA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+IGNvb3JkaW5hdGUKKyAgICAgICB0byBtb3ZlIHRvIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uICAgVGhlCisgICAgICAgPFNUUk9ORz5tdjwvU1RST05HPiAgcm91dGluZXMgIGltcGx5ICBhIGNhbGwgdG8gPFNUUk9ORz5tb3ZlPC9TVFJPTkc+IGJlZm9yZSB0aGUgY2FsbCB0byB0aGUKKyAgICAgICBvdGhlciByb3V0aW5lLiAgVGhlIGNvb3JkaW5hdGUgPEVNPnk8L0VNPiBhbHdheXMgcmVmZXJzIHRvIHRoZSAgcm93CisgICAgICAgKG9mICB0aGUgIHdpbmRvdyksIGFuZCA8RU0+eDwvRU0+IGFsd2F5cyByZWZlcnMgdG8gdGhlIGNvbHVtbi4gIFRoZQorICAgICAgIHVwcGVyIGxlZnQtaGFuZCBjb3JuZXIgaXMgYWx3YXlzICgwLDApLCBub3QgKDEsMSkuCisKKyAgICAgICBUaGUgcm91dGluZXMgcHJlZml4ZWQgd2l0aCA8U1RST05HPm12dzwvU1RST05HPiB0YWtlIGJvdGggYSB3aW5kb3cgYXJndW1lbnQKKyAgICAgICBhbmQgIDxFTT54PC9FTT4gIGFuZCAgPEVNPnk8L0VNPiBjb29yZGluYXRlcy4gIFRoZSB3aW5kb3cgYXJndW1lbnQgaXMgYWx3YXlzCisgICAgICAgc3BlY2lmaWVkIGJlZm9yZSB0aGUgY29vcmRpbmF0ZXMuCisKKyAgICAgICBJbiBlYWNoIGNhc2UsIDxFTT53aW48L0VNPiBpcyB0aGUgd2luZG93IGFmZmVjdGVkLCBhbmQgPEVNPnBhZDwvRU0+ICBpcyAgdGhlCisgICAgICAgcGFkIGFmZmVjdGVkOyA8RU0+d2luPC9FTT4gYW5kIDxFTT5wYWQ8L0VNPiBhcmUgYWx3YXlzIHBvaW50ZXJzIHRvIHR5cGUgPFNUUk9ORz5XSU4tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ET1c8L1NUUk9ORz4uCisKKyAgICAgICBPcHRpb24gc2V0dGluZyByb3V0aW5lcyByZXF1aXJlIGEgQm9vbGVhbiBmbGFnIDxFTT5iZjwvRU0+IHdpdGggdGhlCisgICAgICAgdmFsdWUgIDxTVFJPTkc+VFJVRTwvU1RST05HPiAgb3IgPFNUUk9ORz5GQUxTRTwvU1RST05HPjsgPEVNPmJmPC9FTT4gaXMgYWx3YXlzIG9mIHR5cGUgPFNUUk9ORz5ib29sPC9TVFJPTkc+LiAgTW9zdCBvZgorICAgICAgIHRoZSBkYXRhIHR5cGVzIHVzZWQgaW4gdGhlIGxpYnJhcnkgcm91dGluZXMsIHN1Y2ggYXMgIDxTVFJPTkc+V0lOLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+RE9XPC9TVFJPTkc+LCAgPFNUUk9ORz5TQ1JFRU48L1NUUk9ORz4sICA8U1RST05HPmJvb2w8L1NUUk9ORz4sIGFuZCA8U1RST05HPmNodHlwZTwvU1RST05HPiBhcmUgZGVmaW5lZCBpbiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisgICAgICAgVHlwZXMgdXNlZCBmb3IgdGhlIHRlcm1pbmZvIHJvdXRpbmVzIHN1Y2ggYXMgPFNUUk9ORz5URVJNSU5BTDwvU1RST05HPiAgYXJlCisgICAgICAgZGVmaW5lZCBpbiA8U1RST05HPiZsdDt0ZXJtLmgmZ3Q7PC9TVFJPTkc+LgorCisgICAgICAgVGhpcyAgbWFudWFsICBwYWdlIGRlc2NyaWJlcyBmdW5jdGlvbnMgd2hpY2ggbWF5IGFwcGVhciBpbgorICAgICAgIGFueSBjb25maWd1cmF0aW9uIG9mIHRoZSBsaWJyYXJ5LiAgVGhlcmUgIGFyZSAgdHdvICBjb21tb24KKyAgICAgICBjb25maWd1cmF0aW9ucyBvZiB0aGUgbGlicmFyeToKKworICAgICAgICAgICAgICBuY3Vyc2VzCisgICAgICAgICAgICAgICAgICAgdGhlICAibm9ybWFsIiAgbGlicmFyeSwgIHdoaWNoICBoYW5kbGVzICA4LWJpdAorICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuICBUaGUgbm9ybWFsICg4LWJpdCkgbGlicmFyeSBzdG9yZXMKKyAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzICBjb21iaW5lZCB3aXRoIGF0dHJpYnV0ZXMgaW4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICBkYXRhLgorCisgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyBhbG9uZSAobm8gY29ycmVzcG9uZGluZyAgY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgIG1heSAgYmUgIHN0b3JlZCAgaW4gIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+ICBvciB0aGUgZXF1aXZhbGVudAorICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IGRhdGEuICBJbiAgZWl0aGVyICBjYXNlLCAgdGhlICBkYXRhICBpcworICAgICAgICAgICAgICAgICAgIHN0b3JlZCBpbiBzb21ldGhpbmcgbGlrZSBhbiBpbnRlZ2VyLgorCisgICAgICAgICAgICAgICAgICAgRWFjaCAgY2VsbCAgKHJvdyAgYW5kICBjb2x1bW4pICBpbiBhIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IGlzCisgICAgICAgICAgICAgICAgICAgc3RvcmVkIGFzIGEgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4uCisKKyAgICAgICAgICAgICAgbmN1cnNlc3cKKyAgICAgICAgICAgICAgICAgICB0aGUgc28tY2FsbGVkICJ3aWRlIiAgbGlicmFyeSwgIHdoaWNoICBoYW5kbGVzCisgICAgICAgICAgICAgICAgICAgbXVsdGlieXRlICAgY2hhcmFjdGVycyAgKFNlZSAgdGhlICBzZWN0aW9uICBvbgorICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+QUxURVJOQVRFPC9TVFJPTkc+IDxTVFJPTkc+Q09ORklHVVJBVElPTlM8L1NUUk9ORz4pLiAgVGhlICJ3aWRlIiBsaWJyYXJ5CisgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgIGFsbCAgb2YgIHRoZSBjYWxscyBmcm9tIHRoZSAibm9ybWFsIgorICAgICAgICAgICAgICAgICAgIGxpYnJhcnkuICBJdCBhZGRzIGFib3V0IG9uZSB0aGlyZCAgbW9yZSAgY2FsbHMKKyAgICAgICAgICAgICAgICAgICB1c2luZyBkYXRhIHR5cGVzIHdoaWNoIHN0b3JlIG11bHRpYnl0ZSBjaGFyYWMtCisgICAgICAgICAgICAgICAgICAgdGVyczoKKworICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4uICBIb3dldmVyIGl0ICBpcyAgYQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCAgYmVjYXVzZSAgbW9yZSAgZGF0YSBpcyBzdG9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gY2FuIGZpdCBpbnRvIGFuIGludGVnZXIuICBUaGUgIGNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICBhY3RlcnMgYXJlIGxhcmdlIGVub3VnaCB0byByZXF1aXJlIGEgZnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciB2YWx1ZSAtIGFuZCAgdGhlcmUgIG1heSAgYmUgIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gIG9uZSAgY2hhcmFjdGVyIHBlciBjZWxsLiAgVGhlIHZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIGFuZCBjb2xvciBhcmUgc3RvcmVkIGluICBzZXBhLQorICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZSBmaWVsZHMgb2YgdGhlIHN0cnVjdHVyZS4KKworICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBjZWxsIChyb3cgYW5kIGNvbHVtbikgaW4gYSA8U1RST05HPldJTkRPVzwvU1RST05HPiBpcworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVkIGFzIGEgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+LgorCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZXMgYSAid2lkZSIgY2hhcmFjdGVyLiAgTGlrZSAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4sCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1heSBiZSBhbiBpbnRlZ2VyLgorCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlcyAgYSA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gb3IgPFNUUk9ORz5XRU9GPC9TVFJPTkc+IC0gbm90IHRoZSBzYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhvdWdoIGJvdGggbWF5IGhhdmUgdGhlIHNhbWUgc2l6ZS4KKworICAgICAgICAgICAgICAgICAgIFRoZSAgIndpZGUiICBsaWJyYXJ5ICBwcm92aWRlcyAgbmV3ICBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICB3aGljaCAgYXJlIGFuYWxvZ291cyB0byBmdW5jdGlvbnMgaW4gdGhlICJub3ItCisgICAgICAgICAgICAgICAgICAgbWFsIiBsaWJyYXJ5LiAgVGhlcmUgaXMgIGEgIG5hbWluZyAgY29udmVudGlvbgorICAgICAgICAgICAgICAgICAgIHdoaWNoICByZWxhdGVzICBtYW55ICBvZiB0aGUgbm9ybWFsL3dpZGUgdmFyaS0KKyAgICAgICAgICAgICAgICAgICBhbnRzOiBhICJfdyIgaXMgaW5zZXJ0ZWQgaW50byB0aGUgIG5hbWUuICAgRm9yCisgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4gYmVjb21lcyA8U1RST05HPndhZGRfd2NoPC9TVFJPTkc+LgorCisKKyAgIDxTVFJPTkc+Um91dGluZTwvU1RST05HPiA8U1RST05HPk5hbWU8L1NUUk9ORz4gPFNUUk9ORz5JbmRleDwvU1RST05HPgorICAgICAgIFRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgZWFjaCA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lIGFuZCB0aGUgbmFtZQorICAgICAgIG9mIHRoZSBtYW51YWwgcGFnZSBvbiB3aGljaCAgaXQgIGlzICBkZXNjcmliZWQuICAgUm91dGluZXMKKyAgICAgICBmbGFnZ2VkICB3aXRoICBgKicgIGFyZSBuY3Vyc2VzLXNwZWNpZmljLCBub3QgZGVzY3JpYmVkIGJ5CisgICAgICAgWFBHNCBvciBwcmVzZW50IGluIFNWcjQuCisKKworICAgICAgICAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiBSb3V0aW5lIE5hbWUgICAgIE1hbnVhbCBQYWdlIE5hbWUKKyAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgQ09MT1JfUEFJUiAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBQQUlSX05VTUJFUiAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBfbmNfdHJhY2ViaXRzICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZSgzeCk8L0E+PC9TVFJPTkc+KgorCisgICAgICAgICAgICAgIF90cmFjZWF0dHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZWF0dHIyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZWNoYXIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZWNodHlwZSAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZWNodHlwZTIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZWR1bXAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZWYgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIF90cmFjZW1vdXNlICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGFkZF93Y2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZF93Y2huc3RyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZF93Y2hzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZGNoICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWRkY2huc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhZGRjaHN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZG5zdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhZGRud3N0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhZGRzdHIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWRkd3N0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYXNzdW1lX2RlZmF1bHRfY29sb3JzICAgPFNUUk9ORz48QSBIUkVGPSJkZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycygzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBhdHRyX2dldCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhdHRyX29mZiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhdHRyX29uICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhdHRyX3NldCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhdHRyb2ZmICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhdHRyb24gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhdHRyc2V0ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBiYXVkcmF0ZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYmVlcCAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JlZXAuM3guaHRtbCI+Y3Vyc19iZWVwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYmtnZCAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYmtnZHNldCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYmtncm5kICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGJrZ3JuZHNldCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dybmQuM3guaHRtbCI+Y3Vyc19ia2dybmQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBib3JkZXIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYm9yZGVyX3NldCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYm94ICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGJveF9zZXQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGNhbl9jaGFuZ2VfY29sb3IgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY2JyZWFrICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGNoZ2F0ICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGNsZWFyICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY2xlYXJvayAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY2xydG9ib3QgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjbHJ0b2VvbCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGNvbG9yX2NvbnRlbnQgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY29sb3Jfc2V0ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY29weXdpbiAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX292ZXJsYXkuM3guaHRtbCI+Y3Vyc19vdmVybGF5KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY3Vyc19zZXQgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGN1cnNlc192ZXJzaW9uICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19leHRlbmQuM3guaHRtbCI+Y3Vyc19leHRlbmQoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgZGVmX3Byb2dfbW9kZSAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRlZl9zaGVsbF9tb2RlICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBkZWZpbmVfa2V5ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImRlZmluZV9rZXkuM3guaHRtbCI+ZGVmaW5lX2tleSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBkZWxfY3VydGVybSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRlbGF5X291dHB1dCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRlbGNoICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxjaC4zeC5odG1sIj5jdXJzX2RlbGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZGVsZXRlbG4gICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBkZWxzY3JlZW4gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBkZWx3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZGVyd2luICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRvdXBkYXRlICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGR1cHdpbiAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBlY2hvICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZWNob193Y2hhciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZWNob2NoYXIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBlbmR3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBlcmFzZSAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgZXJhc2VjaGFyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGVyYXNld2NoYXIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBmaWx0ZXIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBmbGFzaCAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBmbHVzaGlucCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXRfd2NoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXRfd3N0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldGF0dHJzICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldGJlZ3ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19sZWdhY3kuM3guaHRtbCI+Y3Vyc19sZWdhY3koM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgZ2V0YmVneSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRiZWd5eCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldGJrZ2QgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldGJrZ3JuZCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dybmQuM3guaHRtbCI+Y3Vyc19ia2dybmQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXRjY2hhciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2NoYXIuM3guaHRtbCI+Y3Vyc19nZXRjY2hhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldGNoICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0Y3VyeCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRjdXJ5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGdldG1heHggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19sZWdhY3kuM3guaHRtbCI+Y3Vyc19sZWdhY3koM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgZ2V0bWF4eSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRtYXh5eCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldG1vdXNlICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGdldG5fd3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0bnN0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldHBhcnggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19sZWdhY3kuM3guaHRtbCI+Y3Vyc19sZWdhY3koM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgZ2V0cGFyeSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRwYXJ5eCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldHN0ciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXRzeXggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0d2luICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0eXggICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHl4LjN4Lmh0bWwiPmN1cnNfZ2V0eXgoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBoYWxmZGVsYXkgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaGFzX2NvbG9ycyAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBoYXNfaWMgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaGFzX2lsICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGhhc19rZXkgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGhsaW5lICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBobGluZV9zZXQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpZGNvayAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpZGxvayAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbW1lZG9rICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbl93Y2ggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5fd2NobnN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluX3djaHN0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbmNoICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbmNobnN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbmNoc3RyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbml0X2NvbG9yICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluaXRfcGFpciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5pdHNjciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5uc3RyICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbm53c3RyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5zX253c3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnNfd2NoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnNfd3N0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluc2NoICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5zZGVsbG4gICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnNlcnRsbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluc25zdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnNzdHIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5zdHIgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnRyZmx1c2ggICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW53c3RyICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGlzX2NsZWFyZWQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfaWRjb2sgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBpc19pZGxvayAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisKKyAgICAgICAgICAgICAgaXNfaW1tZWRvayAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBpc19rZXlwYWQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX2xlYXZlb2sgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfbGluZXRvdWNoZWQgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpc19ub2RlbGF5ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX25vdGltZW91dCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfc2Nyb2xsb2sgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBpc19zeW5jb2sgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX3Rlcm1fcmVzaXplZCAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0icmVzaXpldGVybS4zeC5odG1sIj5yZXNpemV0ZXJtKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX3dpbnRvdWNoZWQgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaXNlbmR3aW4gICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAga2V5X2RlZmluZWQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJrZXlfZGVmaW5lZC4zeC5odG1sIj5rZXlfZGVmaW5lZCgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBrZXlfbmFtZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBrZXlib3VuZCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleWJvdW5kLjN4Lmh0bWwiPmtleWJvdW5kKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGtleW5hbWUgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGtleW9rICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAga2V5cGFkICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGtpbGxjaGFyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBraWxsd2NoYXIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbGVhdmVvayAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbG9uZ25hbWUgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG1jcHJpbnQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIG1ldGEgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtb3VzZV90cmFmbyAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBtb3VzZWludGVydmFsICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBtb3VzZW1hc2sgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBtb3ZlICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW92ZS4zeC5odG1sIj5jdXJzX21vdmUoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZF93Y2ggICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZF93Y2huc3RyICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZF93Y2hzdHIgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZGNoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkY2huc3RyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZhZGRjaHN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZG5zdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZhZGRud3N0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZhZGRzdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkd3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12Y2hnYXQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12Y3VyICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZkZWxjaCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmRlcndpbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZnZXRfd2NoICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93Y2guM3guaHRtbCI+Y3Vyc19nZXRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZnZXRfd3N0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmdldGNoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12Z2V0bl93c3RyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZnZXRuc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12Z2V0c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmhsaW5lICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZobGluZV9zZXQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbl93Y2ggICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaC4zeC5odG1sIj5jdXJzX2luX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5fd2NobnN0ciAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluX3djaHN0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbmNoICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbmNobnN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbmNoc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbm5zdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmlubndzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbnNfbndzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluc193Y2ggICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluc193c3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5zY2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbnNuc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5zc3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluc3RyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW53c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorCisgICAgICAgICAgICAgIG12cHJpbnR3ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludHcuM3guaHRtbCI+Y3Vyc19wcmludHcoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdnNjYW53ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NhbncuM3guaHRtbCI+Y3Vyc19zY2FudygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12dmxpbmUgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdnZsaW5lX3NldCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRfd2NoICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRfd2NobnN0ciAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRfd2Noc3RyICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRjaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZGNobnN0ciAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3YWRkY2hzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRuc3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3YWRkbndzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3YWRkc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZHdzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2NoZ2F0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2RlbGNoICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxjaC4zeC5odG1sIj5jdXJzX2RlbGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3Z2V0X3djaCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93Y2guM3guaHRtbCI+Y3Vyc19nZXRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3Z2V0X3dzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndnZXRjaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2dldG5fd3N0ciAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3Z2V0bnN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2dldHN0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndobGluZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aGxpbmVfc2V0ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW4gICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luX3djaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbl93Y2huc3RyICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5fd2Noc3RyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luY2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luY2huc3RyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luY2hzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2lubnN0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5ud3N0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luc19ud3N0ciAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5zX3djaCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193Y2guM3guaHRtbCI+Y3Vyc19pbnNfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5zX3dzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbnNjaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zY2guM3guaHRtbCI+Y3Vyc19pbnNjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luc25zdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbnNzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5zdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbndzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3cHJpbnR3ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d3NjYW53ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3dmxpbmUgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d3ZsaW5lX3NldCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5hcG1zICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBuZXdwYWQgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbmV3dGVybSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbmV3d2luICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5sICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5vY2JyZWFrICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBub2RlbGF5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbm9lY2hvICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5vZmlsdGVyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBub25sICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBub3FpZmx1c2ggICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbm9yYXcgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5vdGltZW91dCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBvdmVybGF5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBvdmVyd3JpdGUgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBwYWlyX2NvbnRlbnQgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHBlY2hvY2hhciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBwbm91dHJlZnJlc2ggICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcHJlZnJlc2ggICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHByaW50dyAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludHcuM3guaHRtbCI+Y3Vyc19wcmludHcoM3gpPC9BPjwvU1RST05HPgorCisgICAgICAgICAgICAgIHB1dHAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcHV0d2luICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcWlmbHVzaCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJhdyAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICByZWRyYXd3aW4gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICByZWZyZXNoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICByZXNldF9wcm9nX21vZGUgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmVzZXRfc2hlbGxfbW9kZSAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlc2V0dHkgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICByZXNpemV0ZXJtICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICByZXN0YXJ0dGVybSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJpcG9mZmxpbmUgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzYXZldHR5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2NhbncgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzY3JfZHVtcCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNjcl9pbml0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2NyX3Jlc3RvcmUgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzY3Jfc2V0ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNjcmwgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzY3JvbGwgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2Nyb2xsLjN4Lmh0bWwiPmN1cnNfc2Nyb2xsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2Nyb2xsb2sgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2V0X2N1cnRlcm0gICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzZXRfdGVybSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzZXRjY2hhciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2NoYXIuM3guaHRtbCI+Y3Vyc19nZXRjY2hhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNldHNjcnJlZyAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNldHN5eCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzZXR0ZXJtICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNldHVwdGVybSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2F0dHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBzbGtfYXR0cl9vZmYgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2F0dHJfb24gICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19hdHRyX3NldCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfYXR0cm9mZiAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2F0dHJvbiAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19hdHRyc2V0ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfY2xlYXIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2NvbG9yICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19pbml0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfbGFiZWwgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX25vdXRyZWZyZXNoICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19yZWZyZXNoICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfcmVzdG9yZSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX3NldCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa190b3VjaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzdGFuZGVuZCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzdGFuZG91dCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzdGFydF9jb2xvciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHN1YnBhZCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzdWJ3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc3luY29rICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRlcm1fYXR0cnMgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0ZXJtYXR0cnMgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGVybW5hbWUgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRnZXRlbnQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRnZXRmbGFnICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRnZXRudW0gICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRnZXRzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRnb3RvICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRpZ2V0ZmxhZyAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGlnZXRudW0gICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0aWdldHN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRpbWVvdXQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0b3VjaGxpbmUgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRvdWNod2luICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdHBhcm0gICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorCisgICAgICAgICAgICAgIHRwdXRzICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtY2FwLjN4Lmh0bWwiPmN1cnNfdGVybWNhcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRwdXRzICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdHJhY2UgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgdHlwZWFoZWFkICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHVuY3RybCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHVuZ2V0X3djaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd2NoLjN4Lmh0bWwiPmN1cnNfZ2V0X3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHVuZ2V0Y2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdW5nZXRtb3VzZSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgdW50b3VjaHdpbiAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB1c2VfZGVmYXVsdF9jb2xvcnMgICAgICA8U1RST05HPjxBIEhSRUY9ImRlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmRlZmF1bHRfY29sb3JzKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIHVzZV9lbnYgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHVzZV9leHRlbmRlZF9uYW1lcyAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19leHRlbmQuM3guaHRtbCI+Y3Vyc19leHRlbmQoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgdXNlX2xlZ2FjeV9jb2RpbmcgICAgICAgPFNUUk9ORz48QSBIUkVGPSJsZWdhY3lfY29kaW5nLjN4Lmh0bWwiPmxlZ2FjeV9jb2RpbmcoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgdmlkX2F0dHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB2aWRfcHV0cyAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHZpZGF0dHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdmlkcHV0cyAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB2bGluZSAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdmxpbmVfc2V0ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdndfcHJpbnR3ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHZ3X3NjYW53ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdndwcmludHcgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHZ3c2NhbncgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZF93Y2ggICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZF93Y2huc3RyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZF93Y2hzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZGNoICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkY2huc3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhZGRjaHN0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZG5zdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhZGRud3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhZGRzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkd3N0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cl9nZXQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cl9vZmYgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cl9vbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cl9zZXQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cm9mZiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cm9uICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YXR0cnNldCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YmtnZCAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YmtnZHNldCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Ymtncm5kICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtncm5kLjN4Lmh0bWwiPmN1cnNfYmtncm5kKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2JrZ3JuZHNldCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdib3JkZXIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Ym9yZGVyX3NldCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Y2hnYXQgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Y2xlYXIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdjbHJ0b2JvdCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2NscnRvZW9sICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Y29sb3Jfc2V0ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Y3Vyc3luY3VwICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2RlbGNoICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3ZGVsZXRlbG4gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdlY2hvX3djaGFyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdlY2hvY2hhciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2VuY2xvc2UgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgd2VyYXNlICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Z2V0X3djaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Z2V0X3dzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdnZXRia2dybmQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dybmQuM3guaHRtbCI+Y3Vyc19ia2dybmQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Z2V0Y2ggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdnZXRuX3dzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2dldG5zdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdnZXRzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIoM3gpPC9BPjwvU1RST05HPgorCisgICAgICAgICAgICAgIHdobGluZSAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aGxpbmVfc2V0ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5fd2NoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luX3djaG5zdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbl93Y2hzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5jaCAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5jaG5zdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5jaHN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5uc3RyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbm53c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5zX253c3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnNfd2NoICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnNfd3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luc2NoICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5zZGVsbG4gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnNlcnRsbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luc25zdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnNzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5zdHIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbndzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3bW91c2VfdHJhZm8gICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB3bW92ZSAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW92ZS4zeC5odG1sIj5jdXJzX21vdmUoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3bm91dHJlZnJlc2ggICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3cHJpbnR3ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3JlZHJhd2xuICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3JlZnJlc2ggICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3Jlc2l6ZSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgd3NjYW53ICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3c2NybCAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2Nyb2xsLjN4Lmh0bWwiPmN1cnNfc2Nyb2xsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3NldHNjcnJlZyAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3N0YW5kZW5kICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3N0YW5kb3V0ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3N5bmNkb3duICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdzeW5jdXAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3dGltZW91dCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3RvdWNobG4gICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3dW5jdHJsICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3dmxpbmUgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3ZsaW5lX3NldCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+ICB1cG9uICBmYWlsdXJlCisgICAgICAgYW5kICBhbiAgaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gc3VjY2Vzc2Z1bCBjb20tCisgICAgICAgcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZSBub3RlZCBpbiAgdGhlICByb3V0aW5lICBkZXNjcmlwLQorICAgICAgIHRpb25zLgorCisgICAgICAgQWxsICBtYWNyb3MgIHJldHVybiAgdGhlICB2YWx1ZSAgb2YgIHRoZSA8U1RST05HPnc8L1NUUk9ORz4gdmVyc2lvbiwgZXhjZXB0CisgICAgICAgPFNUUk9ORz5zZXRzY3JyZWc8L1NUUk9ORz4sIDxTVFJPTkc+d3NldHNjcnJlZzwvU1RST05HPiwgPFNUUk9ORz5nZXR5eDwvU1RST05HPiwgPFNUUk9ORz5nZXRiZWd5eDwvU1RST05HPiwgYW5kIDxTVFJPTkc+Z2V0bWF4eXg8L1NUUk9ORz4uICBUaGUKKyAgICAgICByZXR1cm4gIHZhbHVlcyAgb2YgPFNUUk9ORz5zZXRzY3JyZWc8L1NUUk9ORz4sIDxTVFJPTkc+d3NldHNjcnJlZzwvU1RST05HPiwgPFNUUk9ORz5nZXR5eDwvU1RST05HPiwgPFNUUk9ORz5nZXRiZWd5eDwvU1RST05HPiwKKyAgICAgICBhbmQgPFNUUk9ORz5nZXRtYXh5eDwvU1RST05HPiBhcmUgdW5kZWZpbmVkIChpLmUuLCB0aGVzZSBzaG91bGQgbm90IGJlIHVzZWQKKyAgICAgICBhcyB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50cykuCisKKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLgorCisKKzwvUFJFPgorPEgyPkVOVklST05NRU5UPC9IMj48UFJFPgorICAgICAgIFRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgc3ltYm9scyBhcmUgdXNlZnVsIGZvciBjdXN0b21pei0KKyAgICAgICBpbmcgdGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5LiAgVGhlIG1vc3QKKyAgICAgICBpbXBvcnRhbnQgb25lcyBoYXZlIGJlZW4gYWxyZWFkeSBkaXNjdXNzZWQgaW4gZGV0YWlsLgorCisgICAgICAgQkFVRFJBVEUKKyAgICAgICAgICAgIFRoZSAgZGVidWdnaW5nIGxpYnJhcnkgY2hlY2tzIHRoaXMgZW52aXJvbm1lbnQgc3ltYm9sCisgICAgICAgICAgICB3aGVuIHRoZSBhcHBsaWNhdGlvbiBoYXMgcmVkaXJlY3RlZCBvdXRwdXQgdG8gYSBmaWxlLgorICAgICAgICAgICAgVGhlICBzeW1ib2wncyBudW1lcmljIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBiYXVkcmF0ZS4KKyAgICAgICAgICAgIElmIG5vIHZhbHVlIGlzIGZvdW5kLCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdXNlcyA5NjAwLiAgVGhpcyBhbGxvd3MKKyAgICAgICAgICAgIHRlc3RlcnMgIHRvIGNvbnN0cnVjdCByZXBlYXRhYmxlIHRlc3QtY2FzZXMgdGhhdCB0YWtlCisgICAgICAgICAgICBpbnRvIGFjY291bnQgY29zdHMgdGhhdCBkZXBlbmQgb24gYmF1ZHJhdGUuCisKKyAgICAgICBDQyAgIFdoZW4gc2V0LCBjaGFuZ2Ugb2NjdXJyZW5jZXMgb2YgdGhlIGNvbW1hbmRfY2hhcmFjdGVyCisgICAgICAgICAgICAoaS5lLiwgIHRoZSAgPFNUUk9ORz5jbWRjaDwvU1RST05HPiBjYXBhYmlsaXR5KSBvZiB0aGUgbG9hZGVkIHRlcm1pbmZvCisgICAgICAgICAgICBlbnRyaWVzIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHN5bWJvbC4gIFZlcnkgIGZldyAgdGVyLQorICAgICAgICAgICAgbWluZm8gZW50cmllcyBwcm92aWRlIHRoaXMgZmVhdHVyZS4KKworICAgICAgIENPTFVNTlMKKyAgICAgICAgICAgIFNwZWNpZnkgIHRoZSAgd2lkdGggIG9mICB0aGUgIHNjcmVlbiAgaW4gIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBBcHBsaWNhdGlvbnMgcnVubmluZyBpbiBhIHdpbmRvd2luZyBlbnZpcm9ubWVudCAgdXN1LQorICAgICAgICAgICAgYWxseSAgYXJlICBhYmxlICB0byBvYnRhaW4gdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cgaW4KKyAgICAgICAgICAgIHdoaWNoIHRoZXkgYXJlIGV4ZWN1dGluZy4gICBJZiAgbmVpdGhlciAgdGhlICA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4KKyAgICAgICAgICAgIHZhbHVlICBub3IgIHRoZSAgdGVybWluYWwncyBzY3JlZW4gc2l6ZSBpcyBhdmFpbGFibGUsCisgICAgICAgICAgICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdXNlcyB0aGUgc2l6ZSB3aGljaCBtYXkgYmUgc3BlY2lmaWVkICBpbiAgdGhlCisgICAgICAgICAgICB0ZXJtaW5mbyBkYXRhYmFzZSAoaS5lLiwgdGhlIDxTVFJPTkc+Y29sczwvU1RST05HPiBjYXBhYmlsaXR5KS4KKworICAgICAgICAgICAgSXQgIGlzICBpbXBvcnRhbnQgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHVzZSBhIGNvcnJlY3QKKyAgICAgICAgICAgIHNpemUgZm9yIHRoZSBzY3JlZW4uICBUaGlzICBpcyAgbm90ICBhbHdheXMgIHBvc3NpYmxlCisgICAgICAgICAgICBiZWNhdXNlICB5b3VyICBhcHBsaWNhdGlvbiAgbWF5ICBiZSBydW5uaW5nIG9uIGEgaG9zdAorICAgICAgICAgICAgd2hpY2ggZG9lcyBub3QgaG9ub3IgTkFXUyAoTmVnb3RpYXRpb25zIEFib3V0ICBXaW5kb3cKKyAgICAgICAgICAgIFNpemUpLCAgb3IgIGJlY2F1c2UgIHlvdSAgYXJlICB0ZW1wb3JhcmlseSBydW5uaW5nIGFzCisgICAgICAgICAgICBhbm90aGVyIHVzZXIuICBIb3dldmVyLCBzZXR0aW5nIDxTVFJPTkc+Q09MVU1OUzwvU1RST05HPiBhbmQvb3IgIDxTVFJPTkc+TElORVM8L1NUUk9ORz4KKyAgICAgICAgICAgIG92ZXJyaWRlcyAgdGhlICBsaWJyYXJ5J3MgIHVzZSAgb2YgIHRoZSAgc2NyZWVuICBzaXplCisgICAgICAgICAgICBvYnRhaW5lZCBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorCisgICAgICAgICAgICBFaXRoZXIgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+IG9yICA8U1RST05HPkxJTkVTPC9TVFJPTkc+ICBzeW1ib2xzICBtYXkgIGJlICBzcGVjaWZpZWQKKyAgICAgICAgICAgIGluZGVwZW5kZW50bHkuICAgVGhpcyAgaXMgbWFpbmx5IHVzZWZ1bCB0byBjaXJjdW12ZW50CisgICAgICAgICAgICBsZWdhY3kgbWlzZmVhdHVyZXMgb2YgIHRlcm1pbmFsICBkZXNjcmlwdGlvbnMsICBlLmcuLAorICAgICAgICAgICAgeHRlcm0gd2hpY2ggY29tbW9ubHkgc3BlY2lmaWVzIGEgNjUgbGluZSBzY3JlZW4uICBGb3IKKyAgICAgICAgICAgIGJlc3QgcmVzdWx0cywgPFNUUk9ORz5saW5lczwvU1RST05HPiBhbmQgPFNUUk9ORz5jb2xzPC9TVFJPTkc+IHNob3VsZCBub3QgYmUgIHNwZWNpZmllZAorICAgICAgICAgICAgaW4gYSB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBmb3IgdGVybWluYWxzIHdoaWNoIGFyZSBydW4KKyAgICAgICAgICAgIGFzIGVtdWxhdGlvbnMuCisKKyAgICAgICAgICAgIFVzZSB0aGUgPFNUUk9ORz51c2VfZW52PC9TVFJPTkc+IGZ1bmN0aW9uIHRvIGRpc2FibGUgYWxsIHVzZSBvZiBleHRlci0KKyAgICAgICAgICAgIG5hbCBlbnZpcm9ubWVudCAoaW5jbHVkaW5nIHN5c3RlbSBjYWxscykgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICB0aGUgc2NyZWVuIHNpemUuCisKKyAgICAgICBFU0NERUxBWQorICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0b3RhbCB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIGZvciAgd2hpY2gKKyAgICAgICAgICAgIG5jdXJzZXMgIHdpbGwgIGF3YWl0ICBhICBjaGFyYWN0ZXIgIHNlcXVlbmNlLCBlLmcuLCBhCisgICAgICAgICAgICBmdW5jdGlvbiBrZXkuICBUaGUgZGVmYXVsdCB2YWx1ZSwgMTAwMCAgbWlsbGlzZWNvbmRzLAorICAgICAgICAgICAgaXMgZW5vdWdoIGZvciBtb3N0IHVzZXMuICBIb3dldmVyLCBpdCBpcyBtYWRlIGEgdmFyaS0KKyAgICAgICAgICAgIGFibGUgdG8gYWNjb21tb2RhdGUgdW51c3VhbCBhcHBsaWNhdGlvbnMuCisKKyAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiBpbnN0YW5jZSB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gY2hhbmdlCisgICAgICAgICAgICB0aGlzICB2YWx1ZSBpcyB0byB3b3JrIHdpdGggc2xvdyBob3N0cywgZS5nLiwgcnVubmluZworICAgICAgICAgICAgb24gYSBuZXR3b3JrLiAgSWYgdGhlICBob3N0ICBjYW5ub3QgIHJlYWQgIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIHJhcGlkbHkgIGVub3VnaCwgIGl0ICB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzIGlmCisgICAgICAgICAgICB0aGUgdGVybWluYWwgZGlkIG5vdCBzZW5kIGNoYXJhY3RlcnMgcmFwaWRseSAgZW5vdWdoLgorICAgICAgICAgICAgVGhlIGxpYnJhcnkgd2lsbCBzdGlsbCBzZWUgYSB0aW1lb3V0LgorCisgICAgICAgICAgICBOb3RlICB0aGF0IHh0ZXJtIG1vdXNlIGV2ZW50cyBhcmUgYnVpbHQgdXAgZnJvbSBjaGFyLQorICAgICAgICAgICAgYWN0ZXIgc2VxdWVuY2VzIHJlY2VpdmVkIGZyb20gIHRoZSAgeHRlcm0uICAgSWYgIHlvdXIKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiBtdWx0aXBsZS1jbGlja2luZywgeW91CisgICAgICAgICAgICBtYXkgd2lzaCB0byBsZW5ndGhlbiB0aGlzIGRlZmF1bHQgdmFsdWUgIGJlY2F1c2UgIHRoZQorICAgICAgICAgICAgdGltZW91dCAgYXBwbGllcyB0byB0aGUgY29tcG9zZWQgbXVsdGktY2xpY2sgZXZlbnQgYXMKKyAgICAgICAgICAgIHdlbGwgYXMgdGhlIGluZGl2aWR1YWwgY2xpY2tzLgorCisgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoaXMgIGltcGxlLQorICAgICAgICAgICAgbWVudGF0aW9uICBwcm92aWRlcyAgYSAgZ2xvYmFsIHZhcmlhYmxlIHdpdGggdGhlIHNhbWUKKyAgICAgICAgICAgIG5hbWUuICBQb3J0YWJsZSBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCByZWx5IHVwb24gdGhlCisgICAgICAgICAgICBwcmVzZW5jZSAgb2YgRVNDREVMQVkgaW4gZWl0aGVyIGZvcm0sIGJ1dCBzZXR0aW5nIHRoZQorICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCAgdmFyaWFibGUKKyAgICAgICAgICAgIGRvZXMgIG5vdCAgY3JlYXRlIHByb2JsZW1zIHdoZW4gY29tcGlsaW5nIGFuIGFwcGxpY2EtCisgICAgICAgICAgICB0aW9uLgorCisgICAgICAgSE9NRSBUZWxscyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gd2hlcmUgeW91ciBob21lIGRpcmVjdG9yeSBpcy4gIFRoYXQgIGlzCisgICAgICAgICAgICB3aGVyZSAgaXQgIG1heSAgcmVhZCAgYW5kICB3cml0ZSAgYXV4aWxpYXJ5ICB0ZXJtaW5hbAorICAgICAgICAgICAgZGVzY3JpcHRpb25zOgorCisgICAgICAgICAgICAkSE9NRS8udGVybWNhcAorICAgICAgICAgICAgJEhPTUUvLnRlcm1pbmZvCisKKyAgICAgICBMSU5FUworICAgICAgICAgICAgTGlrZSBDT0xVTU5TLCBzcGVjaWZ5IHRoZSBoZWlnaHQgIG9mICB0aGUgIHNjcmVlbiAgaW4KKyAgICAgICAgICAgIGNoYXJhY3RlcnMuICAgU2VlIENPTFVNTlMgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisKKyAgICAgICBNT1VTRV9CVVRUT05TXzEyMworICAgICAgICAgICAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gdGhlIE9TLzIgRU1YIHBvcnQuICBJdCBzcGVjaWZpZXMKKyAgICAgICAgICAgIHRoZSAgb3JkZXIgIG9mICBidXR0b25zIG9uIHRoZSBtb3VzZS4gIE9TLzIgbnVtYmVycyBhCisgICAgICAgICAgICAzLWJ1dHRvbiBtb3VzZSBpbmNvbnNpc3RlbnRseSBmcm9tIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICAgICAgMSA9IGxlZnQKKyAgICAgICAgICAgIDIgPSByaWdodAorICAgICAgICAgICAgMyA9IG1pZGRsZS4KKworICAgICAgICAgICAgVGhpcyBzeW1ib2wgbGV0cyB5b3UgY3VzdG9taXplIHRoZSBtb3VzZS4gIFRoZSBzeW1ib2wKKyAgICAgICAgICAgIG11c3QgIGJlIHRocmVlIG51bWVyaWMgZGlnaXRzIDEtMyBpbiBhbnkgb3JkZXIsIGUuZy4sCisgICAgICAgICAgICAxMjMgb3IgMzIxLiAgSWYgaXQgaXMgIG5vdCAgc3BlY2lmaWVkLCAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICB1c2VzCisgICAgICAgICAgICAxMzIuCisKKyAgICAgICBOQ1VSU0VTX0FTU1VNRURfQ09MT1JTCisgICAgICAgICAgICBPdmVycmlkZSAgdGhlICBjb21waWxlZC1pbiBhc3N1bXB0aW9uIHRoYXQgdGhlIHRlcm1pLQorICAgICAgICAgICAgbmFsJ3MgIGRlZmF1bHQgICBjb2xvcnMgICBhcmUgICB3aGl0ZS1vbi1ibGFjayAgIChzZWUKKyAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMoM3gpPC9BPjwvU1RST05HPikuICAgWW91IG1heSBzZXQgdGhlIGZvcmVncm91bmQgYW5kCisgICAgICAgICAgICBiYWNrZ3JvdW5kIGNvbG9yIHZhbHVlcyB3aXRoIHRoaXMgIGVudmlyb25tZW50ICB2YXJpLQorICAgICAgICAgICAgYWJsZSAgYnkgIHByb3ZpbmcgIGEgMi1lbGVtZW50IGxpc3Q6IGZvcmVncm91bmQsYmFjay0KKyAgICAgICAgICAgIGdyb3VuZC4gIEZvciBleGFtcGxlLCB0byB0ZWxsIG5jdXJzZXMgdG8gIG5vdCAgYXNzdW1lCisgICAgICAgICAgICBhbnl0aGluZyAgYWJvdXQgIHRoZSBjb2xvcnMsIHNldCB0aGlzIHRvICItMSwtMSIuICBUbworICAgICAgICAgICAgbWFrZSBpdCBncmVlbi1vbi1ibGFjaywgc2V0IGl0IHRvICIyLDAiLiAgIEFueSAgcG9zaS0KKyAgICAgICAgICAgIHRpdmUgdmFsdWUgZnJvbSB6ZXJvIHRvIHRoZSB0ZXJtaW5mbyA8U1RST05HPm1heF9jb2xvcnM8L1NUUk9ORz4gdmFsdWUKKyAgICAgICAgICAgIGlzIGFsbG93ZWQuCisKKyAgICAgICBOQ1VSU0VTX0dQTV9URVJNUworICAgICAgICAgICAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gbmN1cnNlcyBjb25maWd1cmVkICB0byAgdXNlICB0aGUKKyAgICAgICAgICAgIEdQTSBpbnRlcmZhY2UuCisKKyAgICAgICAgICAgIElmIHByZXNlbnQsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhIGxpc3Qgb2Ygb25lCisgICAgICAgICAgICBvciBtb3JlIHRlcm1pbmFsIG5hbWVzIGFnYWluc3Qgd2hpY2ggdGhlICBURVJNICBlbnZpLQorICAgICAgICAgICAgcm9ubWVudCAgdmFyaWFibGUgaXMgbWF0Y2hlZC4gIFNldHRpbmcgaXQgdG8gYW4gZW1wdHkKKyAgICAgICAgICAgIHZhbHVlIGRpc2FibGVzIHRoZSBHUE0gaW50ZXJmYWNlOyB1c2luZyB0aGUgIGJ1aWx0LWluCisgICAgICAgICAgICBzdXBwb3J0IGZvciB4dGVybSwgZXRjLgorCisgICAgICAgICAgICBJZiAgdGhlICBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhYnNlbnQsIG5jdXJzZXMgd2lsbAorICAgICAgICAgICAgYXR0ZW1wdCB0byBvcGVuIEdQTSBpZiBURVJNIGNvbnRhaW5zICJsaW51eCIuCisKKyAgICAgICBOQ1VSU0VTX05PX0hBUkRfVEFCUworICAgICAgICAgICAgPFNUUk9ORz5OY3Vyc2VzPC9TVFJPTkc+IG1heSB1c2UgdGFicyBhcyBwYXJ0IG9mIHRoZSAgY3Vyc29yICBtb3ZlbWVudAorICAgICAgICAgICAgb3B0aW1pemF0aW9uLiAgIEluICBzb21lICBjYXNlcywgeW91ciB0ZXJtaW5hbCBkcml2ZXIKKyAgICAgICAgICAgIG1heSBub3QgaGFuZGxlIHRoZXNlIHByb3Blcmx5LiAgU2V0IHRoaXMgIGVudmlyb25tZW50CisgICAgICAgICAgICB2YXJpYWJsZSB0byBkaXNhYmxlIHRoZSBmZWF0dXJlLiAgWW91IGNhbiBhbHNvIGFkanVzdAorICAgICAgICAgICAgeW91ciA8U1RST05HPnN0dHk8L1NUUk9ORz4gc2V0dGluZ3MgdG8gYXZvaWQgdGhlIHByb2JsZW0uCisKKyAgICAgICBOQ1VSU0VTX05PX01BR0lDX0NPT0tJRVMKKyAgICAgICAgICAgIFNvbWUgIHRlcm1pbmFscyAgdXNlICBhICBtYWdpYy1jb29raWUgIGZlYXR1cmUgIHdoaWNoCisgICAgICAgICAgICByZXF1aXJlcyAgc3BlY2lhbCAgaGFuZGxpbmcgIHRvIG1ha2UgaGlnaGxpZ2h0aW5nIGFuZAorICAgICAgICAgICAgb3RoZXIgdmlkZW8gYXR0cmlidXRlcyAgZGlzcGxheSAgcHJvcGVybHkuICAgWW91ICBjYW4KKyAgICAgICAgICAgIHN1cHByZXNzICB0aGUgIGhpZ2hsaWdodGluZyBlbnRpcmVseSBmb3IgdGhlc2UgdGVybWktCisgICAgICAgICAgICBuYWxzIGJ5IHNldHRpbmcgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgIE5DVVJTRVNfTk9fUEFERElORworICAgICAgICAgICAgTW9zdCBvZiB0aGUgdGVybWluYWwgIGRlc2NyaXB0aW9ucyAgaW4gIHRoZSAgdGVybWluZm8KKyAgICAgICAgICAgIGRhdGFiYXNlICBhcmUgIHdyaXR0ZW4gZm9yIHJlYWwgImhhcmR3YXJlIiB0ZXJtaW5hbHMuCisgICAgICAgICAgICBNYW55IHBlb3BsZSB1c2UgdGVybWluYWwgZW11bGF0b3JzICB3aGljaCAgcnVuICBpbiAgYQorICAgICAgICAgICAgd2luZG93aW5nICAgIGVudmlyb25tZW50ICAgIGFuZCAgICB1c2UgICBjdXJzZXMtYmFzZWQKKyAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4gIFRlcm1pbmFsIGVtdWxhdG9ycyBjYW4gIGR1cGxpY2F0ZSAgYWxsCisgICAgICAgICAgICBvZiAgdGhlIGltcG9ydGFudCBhc3BlY3RzIG9mIGEgaGFyZHdhcmUgdGVybWluYWwsIGJ1dAorICAgICAgICAgICAgdGhleSBkbyBub3QgaGF2ZSB0aGUgIHNhbWUgIGxpbWl0YXRpb25zLiAgIFRoZSAgY2hpZWYKKyAgICAgICAgICAgIGxpbWl0YXRpb24gb2YgYSBoYXJkd2FyZSB0ZXJtaW5hbCBmcm9tIHRoZSBzdGFuZHBvaW50CisgICAgICAgICAgICBvZiB5b3VyIGFwcGxpY2F0aW9uIGlzIHRoZSAgbWFuYWdlbWVudCAgb2YgIGRhdGFmbG93LAorICAgICAgICAgICAgaS5lLiwgIHRpbWluZy4gICBVbmxlc3MgYSBoYXJkd2FyZSB0ZXJtaW5hbCBpcyBpbnRlci0KKyAgICAgICAgICAgIGZhY2VkIGludG8gYSB0ZXJtaW5hbCBjb25jZW50cmF0b3IgKHdoaWNoICBkb2VzICBmbG93CisgICAgICAgICAgICBjb250cm9sKSwgICBpdCAgKG9yICB5b3VyICBhcHBsaWNhdGlvbikgIG11c3QgIG1hbmFnZQorICAgICAgICAgICAgZGF0YWZsb3csIHByZXZlbnRpbmcgb3ZlcnJ1bnMuICBUaGUgY2hlYXBlc3Qgc29sdXRpb24KKyAgICAgICAgICAgIChubyAgaGFyZHdhcmUgY29zdCkgaXMgZm9yIHlvdXIgcHJvZ3JhbSB0byBkbyB0aGlzIGJ5CisgICAgICAgICAgICBwYXVzaW5nICBhZnRlciAgb3BlcmF0aW9ucyAgdGhhdCAgdGhlICB0ZXJtaW5hbCAgZG9lcworICAgICAgICAgICAgc2xvd2x5LCBzdWNoIGFzIGNsZWFyaW5nIHRoZSBkaXNwbGF5LgorCisgICAgICAgICAgICBBcyAgYSAgcmVzdWx0LCAgbWFueSB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgKGluY2x1ZGluZworICAgICAgICAgICAgdGhlIHZ0MTAwKSBoYXZlIGRlbGF5IHRpbWVzIGVtYmVkZGVkLiAgWW91ICBtYXkgIHdpc2gKKyAgICAgICAgICAgIHRvICB1c2UgIHRoZXNlICBkZXNjcmlwdGlvbnMsIGJ1dCBub3Qgd2FudCB0byBwYXkgdGhlCisgICAgICAgICAgICBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCisgICAgICAgICAgICBTZXQgdGhlIE5DVVJTRVNfTk9fUEFERElORyBzeW1ib2wgdG8gZGlzYWJsZSBhbGwgIGJ1dAorICAgICAgICAgICAgbWFuZGF0b3J5ICBwYWRkaW5nLiAgIE1hbmRhdG9yeSAgcGFkZGluZyBpcyB1c2VkIGFzIGEKKyAgICAgICAgICAgIHBhcnQgb2Ygc3BlY2lhbCBjb250cm9sIHNlcXVlbmNlcyBzdWNoIGFzIDxFTT5mbGFzaDwvRU0+LgorCisgICAgICAgTkNVUlNFU19OT19TRVRCVUYKKyAgICAgICAgICAgIE5vcm1hbGx5IDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBlbmFibGVzIGJ1ZmZlcmVkIG91dHB1dCBkdXJpbmcgIHRlci0KKyAgICAgICAgICAgIG1pbmFsICBpbml0aWFsaXphdGlvbi4gICBUaGlzICBpcyAgZG9uZSAgKGFzICBpbiBTVnI0CisgICAgICAgICAgICBjdXJzZXMpIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgIEZvciAgdGVzdGluZyAgcHVyLQorICAgICAgICAgICAgcG9zZXMsIGJvdGggb2YgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGFuZCBjZXJ0YWluIGFwcGxpY2F0aW9ucywgdGhpcworICAgICAgICAgICAgZmVhdHVyZSAgICBpcyAgICBtYWRlICAgIG9wdGlvbmFsLiAgICAgU2V0dGluZyAgICB0aGUKKyAgICAgICAgICAgIE5DVVJTRVNfTk9fU0VUQlVGIHZhcmlhYmxlIGRpc2FibGVzIG91dHB1dCBidWZmZXJpbmcsCisgICAgICAgICAgICBsZWF2aW5nIHRoZSBvdXRwdXQgIGluICB0aGUgIG9yaWdpbmFsICAodXN1YWxseSAgbGluZQorICAgICAgICAgICAgYnVmZmVyZWQpIG1vZGUuCisKKyAgICAgICBOQ1VSU0VTX05PX1VURjhfQUNTCisgICAgICAgICAgICBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeSBjaGVja3MgZm9yCisgICAgICAgICAgICBzcGVjaWFsIGNhc2VzIHdoZXJlIFZUMTAwIGxpbmUtZHJhd2luZyAoYW5kIHRoZSAgY29yLQorICAgICAgICAgICAgcmVzcG9uZGluZyAgIGFsdGVybmF0ZSAgY2hhcmFjdGVyICBzZXQgIGNhcGFiaWxpdGllcykKKyAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgdGVybWluZm8gYXJlIGtub3duICB0byAgYmUgIG1pc3NpbmcuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksICB3aGVuICBydW5uaW5nICBpbiAgYSBVVEYtOCBsb2NhbGUsIHRoZQorICAgICAgICAgICAgTGludXggY29uc29sZSBlbXVsYXRvciBhbmQgIHRoZSAgR05VICBzY3JlZW4gIHByb2dyYW0KKyAgICAgICAgICAgIGlnbm9yZSAgdGhlc2UuICAgTmN1cnNlcyAgY2hlY2tzIHRoZSBURVJNIGVudmlyb25tZW50CisgICAgICAgICAgICB2YXJpYWJsZSBmb3IgdGhlc2UuICBGb3IgIG90aGVyICBzcGVjaWFsICBjYXNlcywgIHlvdQorICAgICAgICAgICAgc2hvdWxkICBzZXQgIHRoaXMgIGVudmlyb25tZW50ICB2YXJpYWJsZS4gIERvaW5nIHRoaXMKKyAgICAgICAgICAgIHRlbGxzIG5jdXJzZXMgdG8gdXNlIFVuaWNvZGUgdmFsdWVzIHdoaWNoICBjb3JyZXNwb25kCisgICAgICAgICAgICB0byB0aGUgVlQxMDAgbGluZS1kcmF3aW5nIGdseXBocy4gIFRoYXQgd29ya3MgZm9yIHRoZQorICAgICAgICAgICAgc3BlY2lhbCBjYXNlcyBjaXRlZCwgYW5kIGlzIGxpa2VseSB0byB3b3JrIGZvciB0ZXJtaS0KKyAgICAgICAgICAgIG5hbCBlbXVsYXRvcnMuCisKKyAgICAgICAgICAgIFdoZW4gIHNldHRpbmcgIHRoaXMgIHZhcmlhYmxlLCB5b3Ugc2hvdWxkIHNldCBpdCB0byBhCisgICAgICAgICAgICBub256ZXJvIHZhbHVlLiAgU2V0dGluZyBpdCB0byB6ZXJvIChvciB0byAgYSAgbm9ubnVtLQorICAgICAgICAgICAgYmVyKSBkaXNhYmxlcyB0aGUgc3BlY2lhbCBjaGVjayBmb3IgTGludXggYW5kIHNjcmVlbi4KKworICAgICAgIE5DVVJTRVNfVFJBQ0UKKyAgICAgICAgICAgIER1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBkZWJ1Z2dpbmcgIGxpYnJhcnkKKyAgICAgICAgICAgIGNoZWNrcyAgdGhlICBOQ1VSU0VTX1RSQUNFIHN5bWJvbC4gIElmIGl0IGlzIGRlZmluZWQsCisgICAgICAgICAgICB0byBhIG51bWVyaWMgdmFsdWUsIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBjYWxscyB0aGUgPFNUUk9ORz50cmFjZTwvU1RST05HPiBmdW5jdGlvbiwKKyAgICAgICAgICAgIHVzaW5nIHRoYXQgdmFsdWUgYXMgdGhlIGFyZ3VtZW50LgorCisgICAgICAgICAgICBUaGUgIGFyZ3VtZW50ICB2YWx1ZXMsIHdoaWNoIGFyZSBkZWZpbmVkIGluIDxTVFJPTkc+Y3Vyc2VzLmg8L1NUUk9ORz4sCisgICAgICAgICAgICBwcm92aWRlIHNldmVyYWwgdHlwZXMgb2YgaW5mb3JtYXRpb24uICAgV2hlbiAgcnVubmluZworICAgICAgICAgICAgd2l0aCAgdHJhY2VzIGVuYWJsZWQsIHlvdXIgYXBwbGljYXRpb24gd2lsbCB3cml0ZSB0aGUKKyAgICAgICAgICAgIGZpbGUgPFNUUk9ORz50cmFjZTwvU1RST05HPiB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgICAgICBURVJNIERlbm90ZXMgeW91ciB0ZXJtaW5hbCB0eXBlLiAgRWFjaCAgdGVybWluYWwgIHR5cGUgIGlzCisgICAgICAgICAgICBkaXN0aW5jdCwgdGhvdWdoIG1hbnkgYXJlIHNpbWlsYXIuCisKKyAgICAgICBURVJNQ0FQCisgICAgICAgICAgICBJZiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIDxFTT50ZXJtLTwvRU0+CisgICAgICAgICAgICA8RU0+Y2FwPC9FTT4gc3VwcG9ydCwgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICB3aWxsICBjaGVjayAgZm9yICBhICB0ZXJtaW5hbCdzCisgICAgICAgICAgICBkZXNjcmlwdGlvbiBpbiB0ZXJtY2FwIGZvcm0gaWYgaXQgaXMgbm90IGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorCisgICAgICAgICAgICBUaGUgIFRFUk1DQVAgIHN5bWJvbCAgY29udGFpbnMgIGVpdGhlciAgIGEgICB0ZXJtaW5hbAorICAgICAgICAgICAgZGVzY3JpcHRpb24gICh3aXRoICBuZXdsaW5lcyBzdHJpcHBlZCBvdXQpLCBvciBhIGZpbGUKKyAgICAgICAgICAgIG5hbWUgdGVsbGluZyB3aGVyZSB0aGUgIGluZm9ybWF0aW9uICBkZW5vdGVkICBieSAgdGhlCisgICAgICAgICAgICBURVJNICBzeW1ib2wgIGV4aXN0cy4gICBJbiAgZWl0aGVyICBjYXNlLCAgc2V0dGluZyBpdAorICAgICAgICAgICAgZGlyZWN0cyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdG8gaWdub3JlIHRoZSB1c3VhbCAgcGxhY2UgIGZvciAgdGhpcworICAgICAgICAgICAgaW5mb3JtYXRpb24sIGUuZy4sIC9ldGMvdGVybWNhcC4KKworICAgICAgIFRFUk1JTkZPCisgICAgICAgICAgICBPdmVycmlkZXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gc2VhcmNoZXMgZm9yCisgICAgICAgICAgICB5b3VyIHRlcm1pbmFsIGRlc2NyaXB0aW9uLiAgVGhpcyBpcyB0aGUgc2ltcGxlc3QsIGJ1dAorICAgICAgICAgICAgbm90ICB0aGUgIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgbGlzdCBvZiBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIFRoZSBjb21wbGV0ZSBsaXN0IG9mIGRpcmVjdG9yaWVzIGluIG9yZGVyIGZvbGxvd3M6CisKKyAgICAgICAgICAgIC0gIHRoZSBsYXN0IGRpcmVjdG9yeSB0byB3aGljaCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gd3JvdGUsIGlmIGFueSwKKyAgICAgICAgICAgICAgIGlzIHNlYXJjaGVkIGZpcnN0CisKKyAgICAgICAgICAgIC0gIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSBURVJNSU5GTyBzeW1ib2wKKworICAgICAgICAgICAgLSAgJEhPTUUvLnRlcm1pbmZvCisKKyAgICAgICAgICAgIC0gIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiB0aGUgVEVSTUlORk9fRElSUyBzeW1ib2wKKworICAgICAgICAgICAgLSAgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgd2hvc2UgbmFtZXMgYXJlIGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICAgIGFuZCAgY29tcGlsZWQgIGludG8gIHRoZSAgbmN1cnNlcyAgbGlicmFyeSwgIGUuZy4sCisgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvCisKKyAgICAgICBURVJNSU5GT19ESVJTCisgICAgICAgICAgICBTcGVjaWZpZXMgIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIHRlcm1pLQorICAgICAgICAgICAgbmFsIGRlc2NyaXB0aW9ucy4gIFRoZSBsaXN0IGlzICBzZXBhcmF0ZWQgIGJ5ICBjb2xvbnMKKyAgICAgICAgICAgIChpLmUuLCAgIjoiKSBvbiBVbml4LCBzZW1pY29sb25zIG9uIE9TLzIgRU1YLiAgQWxsIG9mCisgICAgICAgICAgICB0aGUgdGVybWluYWwgZGVzY3JpcHRpb25zIGFyZSBpbiB0ZXJtaW5mbyBmb3JtLCB3aGljaAorICAgICAgICAgICAgbWFrZXMgIGEgIHN1YmRpcmVjdG9yeSAgbmFtZWQgZm9yIHRoZSBmaXJzdCBsZXR0ZXIgb2YKKyAgICAgICAgICAgIHRoZSB0ZXJtaW5hbCBuYW1lcyB0aGVyZWluLgorCisgICAgICAgVEVSTVBBVEgKKyAgICAgICAgICAgIElmIFRFUk1DQVAgZG9lcyBub3QgaG9sZCBhICBmaWxlICBuYW1lICB0aGVuICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICAgICAgIGNoZWNrcyAgdGhlIFRFUk1QQVRIIHN5bWJvbC4gIFRoaXMgaXMgYSBsaXN0IG9mIGZpbGUtCisgICAgICAgICAgICBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzIG9yIGNvbG9ucyAgKGkuZS4sICAiOiIpICBvbgorICAgICAgICAgICAgVW5peCwgc2VtaWNvbG9ucyBvbiBPUy8yIEVNWC4gIElmIHRoZSBURVJNUEFUSCBzeW1ib2wKKyAgICAgICAgICAgIGlzIG5vdCBzZXQsIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsb29rcyBpbiB0aGUgZmlsZXMgIC9ldGMvdGVybWNhcCwKKyAgICAgICAgICAgIC91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwICBhbmQgICRIT01FLy50ZXJtY2FwLCBpbiB0aGF0CisgICAgICAgICAgICBvcmRlci4KKworICAgICAgIFRoZSBsaWJyYXJ5IG1heSBiZSBjb25maWd1cmVkIHRvIGRpc3JlZ2FyZCAgdGhlICBmb2xsb3dpbmcKKyAgICAgICB2YXJpYWJsZXMgIHdoZW4gIHRoZSBjdXJyZW50IHVzZXIgaXMgdGhlIHN1cGVydXNlciAocm9vdCksCisgICAgICAgb3IgaWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMgc2V0dWlkIG9yICBzZXRnaWQgIHBlcm1pc3Npb25zOgorICAgICAgICRURVJNSU5GTywgJFRFUk1JTkZPX0RJUlMsICRURVJNUEFUSCwgYXMgd2VsbCBhcyAkSE9NRS4KKworCis8L1BSRT4KKzxIMj5BTFRFUk5BVEUgQ09ORklHVVJBVElPTlM8L0gyPjxQUkU+CisgICAgICAgU2V2ZXJhbCAgZGlmZmVyZW50ICBjb25maWd1cmF0aW9ucyBhcmUgcG9zc2libGUsIGRlcGVuZGluZworICAgICAgIG9uICB0aGUgIGNvbmZpZ3VyZSAgc2NyaXB0ICBvcHRpb25zICB1c2VkICB3aGVuICAgYnVpbGRpbmcKKyAgICAgICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4uICAgVGhlcmUgIGFyZSBhIGZldyBtYWluIG9wdGlvbnMgd2hvc2UgZWZmZWN0cyBhcmUKKyAgICAgICB2aXNpYmxlIHRvIHRoZSBhcHBsaWNhdGlvbnMgZGV2ZWxvcGVyIHVzaW5nIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPjoKKworICAgICAgIC0tZGlzYWJsZS1vdmVyd3JpdGUKKyAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBpbmNsdWRlIGZvciA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gaXMgYXMgbm90ZWQgaW4gIDxTVFJPTkc+U1lOLTwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz5PUFNJUzwvU1RST05HPjoKKworICAgICAgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgICAgICAgVGhpcyAgb3B0aW9uIGlzIHVzZWQgdG8gYXZvaWQgZmlsZW5hbWUgY29uZmxpY3RzIHdoZW4KKyAgICAgICAgICAgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBpcyBub3QgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gb2YgIGN1cnNlcyAgb2YKKyAgICAgICAgICAgIHRoZSAgY29tcHV0ZXIuICAgSWYgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAgaXMgIGluc3RhbGxlZCBkaXNhYmxpbmcKKyAgICAgICAgICAgIG92ZXJ3cml0ZSwgaXQgcHV0cyBpdHMgIGhlYWRlcnMgIGluICBhICBzdWJkaXJlY3RvcnksCisgICAgICAgICAgICBlLmcuLAorCisgICAgICAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O25jdXJzZXMvY3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICAgICAgIEl0ICBhbHNvICBvbWl0cyBhIHN5bWJvbGljIGxpbmsgd2hpY2ggd291bGQgYWxsb3cgeW91CisgICAgICAgICAgICB0byB1c2UgPFNUUk9ORz4tbGN1cnNlczwvU1RST05HPiB0byBidWlsZCBleGVjdXRhYmxlcy4KKworICAgICAgIC0tZW5hYmxlLXdpZGVjCisgICAgICAgICAgICBUaGUgY29uZmlndXJlIHNjcmlwdCByZW5hbWVzIHRoZSBsaWJyYXJ5IGFuZCAoaWYgIHRoZQorICAgICAgICAgICAgPFNUUk9ORz4tLWRpc2FibGUtb3ZlcndyaXRlPC9TVFJPTkc+ICBvcHRpb24gIGlzIHVzZWQpIHB1dHMgdGhlIGhlYWRlcgorICAgICAgICAgICAgZmlsZXMgIGluICBhICBkaWZmZXJlbnQgIHN1YmRpcmVjdG9yeS4gICBBbGwgIG9mICB0aGUKKyAgICAgICAgICAgIGxpYnJhcnkgIG5hbWVzICBoYXZlICBhICAidyIgIGFwcGVuZGVkIHRvIHRoZW0sIGkuZS4sCisgICAgICAgICAgICBpbnN0ZWFkIG9mCisKKyAgICAgICAgICAgIDxTVFJPTkc+LWxuY3Vyc2VzPC9TVFJPTkc+CisKKyAgICAgICAgICAgIHlvdSBsaW5rIHdpdGgKKworICAgICAgICAgICAgPFNUUk9ORz4tbG5jdXJzZXN3PC9TVFJPTkc+CisKKyAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gZGVmaW5lIDxTVFJPTkc+X1hPUEVOX1NPVVJDRV9FWFRFTkRFRDwvU1RST05HPiB3aGVuIGNvbS0KKyAgICAgICAgICAgIHBpbGluZyAgZm9yICB0aGUgIHdpZGUtY2hhcmFjdGVyICBsaWJyYXJ5ICB0byB1c2UgdGhlCisgICAgICAgICAgICBleHRlbmRlZCAod2lkZS1jaGFyYWN0ZXIpICBmdW5jdGlvbnMuICAgVGhlICA8U1RST05HPmN1cnNlcy5oPC9TVFJPTkc+CisgICAgICAgICAgICBmaWxlICAgd2hpY2ggIGlzICBpbnN0YWxsZWQgIGZvciAgdGhlICB3aWRlLWNoYXJhY3RlcgorICAgICAgICAgICAgbGlicmFyeSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlICBub3JtYWwKKyAgICAgICAgICAgIGxpYnJhcnkncyBoZWFkZXIuICBPbmx5IHRoZSBzaXplIG9mIHRoZSA8U1RST05HPldJTkRPVzwvU1RST05HPiBzdHJ1Yy0KKyAgICAgICAgICAgIHR1cmUgZGlmZmVycywgYW5kIHZlcnkgZmV3IGFwcGxpY2F0aW9ucyByZXF1aXJlICBtb3JlCisgICAgICAgICAgICB0aGFuICBhICBwb2ludGVyICB0byAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz5zLiAgIElmICB0aGUgIGhlYWRlcnMgYXJlCisgICAgICAgICAgICBpbnN0YWxsZWQgIGFsbG93aW5nICBvdmVyd3JpdGUsICB0aGUgICB3aWRlLWNoYXJhY3RlcgorICAgICAgICAgICAgbGlicmFyeSdzICBoZWFkZXJzIHNob3VsZCBiZSBpbnN0YWxsZWQgbGFzdCwgdG8gYWxsb3cKKyAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0byBiZSBidWlsdCB1c2luZyAgZWl0aGVyICBsaWJyYXJ5ICBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBzZXQgb2YgaGVhZGVycy4KKworICAgICAgIC0td2l0aC1zaGFyZWQKKworICAgICAgIC0td2l0aC1ub3JtYWwKKworICAgICAgIC0td2l0aC1kZWJ1ZworCisgICAgICAgLS13aXRoLXByb2ZpbGUKKyAgICAgICAgICAgIFRoZSAgc2hhcmVkICBhbmQgbm9ybWFsIChzdGF0aWMpIGxpYnJhcnkgbmFtZXMgZGlmZmVyCisgICAgICAgICAgICBieSB0aGVpciAgc3VmZml4ZXMsICBlLmcuLCAgPFNUUk9ORz5saWJuY3Vyc2VzLnNvPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+bGlibi08L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+Y3Vyc2VzLmE8L1NUUk9ORz4uICAgVGhlICBkZWJ1ZyAgYW5kIHByb2ZpbGluZyBsaWJyYXJpZXMgYWRkIGEKKyAgICAgICAgICAgICJfZyIgYW5kIGEgIl9wIiB0byB0aGUgcm9vdCBuYW1lcyByZXNwZWN0aXZlbHksIGUuZy4sCisgICAgICAgICAgICA8U1RST05HPmxpYm5jdXJzZXNfZy5hPC9TVFJPTkc+IGFuZCA8U1RST05HPmxpYm5jdXJzZXNfcC5hPC9TVFJPTkc+LgorCisgICAgICAgLS13aXRoLXRyYWNlCisgICAgICAgICAgICBUaGUgIDxTVFJPTkc+dHJhY2U8L1NUUk9ORz4gIGZ1bmN0aW9uICBub3JtYWxseSAgcmVzaWRlcyAgaW4gdGhlIGRlYnVnCisgICAgICAgICAgICBsaWJyYXJ5LCBidXQgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBjb25maWd1cmUgdGhpcworICAgICAgICAgICAgaW4gIHRoZSAgc2hhcmVkICBsaWJyYXJ5LiAgIENvbmZpZ3VyZSAgc2NyaXB0cyBzaG91bGQKKyAgICAgICAgICAgIGNoZWNrIGZvciB0aGUgZnVuY3Rpb24ncyBleGlzdGVuY2UgcmF0aGVyIHRoYW4gYXNzdW0tCisgICAgICAgICAgICBpbmcgaXQgaXMgYWx3YXlzIGluIHRoZSBkZWJ1ZyBsaWJyYXJ5LgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIC91c3Ivc2hhcmUvdGFic2V0CisgICAgICAgICAgICBkaXJlY3RvcnkgIGNvbnRhaW5pbmcgIGluaXRpYWxpemF0aW9uICBmaWxlcyAgZm9yIHRoZQorICAgICAgICAgICAgdGVybWluYWwgY2FwYWJpbGl0eSBkYXRhYmFzZSAvdXNyL3NoYXJlL3Rlcm1pbmZvIHRlci0KKyAgICAgICAgICAgIG1pbmFsIGNhcGFiaWxpdHkgZGF0YWJhc2UKKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+ICBhbmQgIHJlbGF0ZWQgIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJjdXJzXyIKKyAgICAgICBmb3IgZGV0YWlsZWQgcm91dGluZSBkZXNjcmlwdGlvbnMuCisKKworPC9QUkU+Cis8SDI+RVhURU5TSU9OUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAgbGlicmFyeSAgY2FuICBiZSAgY29tcGlsZWQgIHdpdGggIGFuICBvcHRpb24KKyAgICAgICAoPFNUUk9ORz4tRFVTRV9HRVRDQVA8L1NUUk9ORz4pIHRoYXQgZmFsbHMgYmFjayB0byB0aGUgb2xkLXN0eWxlIC9ldGMvdGVybS0KKyAgICAgICBjYXAgZmlsZSBpZiB0aGUgdGVybWluYWwgc2V0dXAgY29kZSBjYW5ub3QgZmluZCBhIHRlcm1pbmZvCisgICAgICAgZW50cnkgIGNvcnJlc3BvbmRpbmcgIHRvIDxTVFJPTkc+VEVSTTwvU1RST05HPi4gIFVzZSBvZiB0aGlzIGZlYXR1cmUgaXMgbm90CisgICAgICAgcmVjb21tZW5kZWQsIGFzIGl0IGVzc2VudGlhbGx5IGluY2x1ZGVzIGFuIGVudGlyZSAgdGVybWNhcAorICAgICAgIGNvbXBpbGVyICBpbiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHN0YXJ0dXAgY29kZSwgYXQgc2lnbmlmaWNhbnQgY29zdAorICAgICAgIGluIGNvcmUgYW5kIHN0YXJ0dXAgY3ljbGVzLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAgbGlicmFyeSAgaW5jbHVkZXMgIGZhY2lsaXRpZXMgIGZvciAgY2FwdHVyaW5nCisgICAgICAgbW91c2UgIGV2ZW50cyBvbiBjZXJ0YWluIHRlcm1pbmFscyAoaW5jbHVkaW5nIHh0ZXJtKS4gIFNlZQorICAgICAgIHRoZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+IG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGluY2x1ZGVzIGZhY2lsaXRpZXMgZm9yIHJlc3BvbmRpbmcgIHRvCisgICAgICAgd2luZG93ICByZXNpemluZyAgZXZlbnRzLCAgZS5nLiwgd2hlbiBydW5uaW5nIGluIGFuIHh0ZXJtLgorICAgICAgIFNlZSB0aGUgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPiBhbmQgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPiAgbWFudWFsICBwYWdlcyAgZm9yCisgICAgICAgZGV0YWlscy4gICBJbiBhZGRpdGlvbiwgdGhlIGxpYnJhcnkgbWF5IGJlIGNvbmZpZ3VyZWQgd2l0aAorICAgICAgIGEgU0lHV0lOQ0ggaGFuZGxlci4KKworICAgICAgIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeSBleHRlbmRzIHRoZSBmaXhlZCBzZXQgb2YgZnVuY3Rpb24gIGtleQorICAgICAgIGNhcGFiaWxpdGllcyAgb2YgIHRlcm1pbmFscyAgYnkgIGFsbG93aW5nICB0aGUgYXBwbGljYXRpb24KKyAgICAgICBkZXNpZ25lciB0byBkZWZpbmUgYWRkaXRpb25hbCBrZXkgIHNlcXVlbmNlcyAgYXQgIHJ1bnRpbWUuCisgICAgICAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9ImRlZmluZV9rZXkuM3guaHRtbCI+ZGVmaW5lX2tleSgzeCk8L0E+PC9TVFJPTkc+IDxTVFJPTkc+PEEgSFJFRj0ia2V5X2RlZmluZWQuM3guaHRtbCI+a2V5X2RlZmluZWQoM3gpPC9BPjwvU1RST05HPiwgYW5kIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPiBtYW4tCisgICAgICAgdWFsIHBhZ2VzIGZvciBkZXRhaWxzLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGNhbiBleHBsb2l0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGVybWktCisgICAgICAgbmFscyAgd2hpY2ggIGltcGxlbWVudCB0aGUgSVNPLTY0MjkgU0dSIDM5IGFuZCBTR1IgNDkgY29uLQorICAgICAgIHRyb2xzLCB3aGljaCBhbGxvdyBhbiBhcHBsaWNhdGlvbiB0byByZXNldCB0aGUgdGVybWluYWwgdG8KKyAgICAgICBpdHMgIG9yaWdpbmFsICBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycy4gIEZyb20gdGhlCisgICAgICAgdXNlcnMnIHBlcnNwZWN0aXZlLCB0aGUgYXBwbGljYXRpb24gaXMgYWJsZSB0byAgZHJhdyAgY29sLQorICAgICAgIG9yZWQgIHRleHQgIG9uICBhICBiYWNrZ3JvdW5kICB3aG9zZSBjb2xvciBpcyBzZXQgaW5kZXBlbi0KKyAgICAgICBkZW50bHksIHByb3ZpZGluZyBiZXR0ZXIgIGNvbnRyb2wgIG92ZXIgIGNvbG9yICBjb250cmFzdHMuCisgICAgICAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9ImRlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmRlZmF1bHRfY29sb3JzKDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAgbGlicmFyeSAgaW5jbHVkZXMgIGEgIGZ1bmN0aW9uIGZvciBkaXJlY3RpbmcKKyAgICAgICBhcHBsaWNhdGlvbiBvdXRwdXQgdG8gYSBwcmludGVyIGF0dGFjaGVkIHRvICB0aGUgIHRlcm1pbmFsCisgICAgICAgZGV2aWNlLiAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnQuM3guaHRtbCI+Y3Vyc19wcmludCgzeCk8L0E+PC9TVFJPTkc+IG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIGJlIEJBU0UtbGV2ZWwgY29uZm9yLQorICAgICAgIG1hbnQgd2l0aCBYU0kgQ3Vyc2VzLiAgVGhlIEVYVEVOREVEIFhTSSBDdXJzZXMgZnVuY3Rpb25hbC0KKyAgICAgICBpdHkgKGluY2x1ZGluZyBjb2xvciBzdXBwb3J0KSBpcyBzdXBwb3J0ZWQuCisKKyAgICAgICBBICBzbWFsbCAgbnVtYmVyIG9mIGxvY2FsIGRpZmZlcmVuY2VzICh0aGF0IGlzLCBpbmRpdmlkdWFsCisgICAgICAgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgWFNJIEN1cnNlcyBhbmQgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGNhbGxzKSAgYXJlCisgICAgICAgZGVzY3JpYmVkICBpbiAgPFNUUk9ORz5QT1JUQUJJTElUWTwvU1RST05HPiAgc2VjdGlvbnMgIG9mICB0aGUgIGxpYnJhcnkgbWFuCisgICAgICAgcGFnZXMuCisKKyAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gY29udGFpbnMgc2V2ZXJhbCBleHRlbnNpb25zOgorCisgICAgICAgICAgICBUaGUgcm91dGluZSA8U1RST05HPmhhc19rZXk8L1NUUk9ORz4gaXMgbm90IHBhcnQgb2YgWFBHNCwgIG5vciAgaXMgIGl0CisgICAgICAgICAgICBwcmVzZW50ICBpbiBTVnI0LiAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+IG1hbnVhbCBwYWdlCisgICAgICAgICAgICBmb3IgZGV0YWlscy4KKworICAgICAgICAgICAgVGhlIHJvdXRpbmUgPFNUUk9ORz5zbGtfYXR0cjwvU1RST05HPiBpcyBub3QgcGFydCBvZiBYUEc0LCBub3IgIGlzICBpdAorICAgICAgICAgICAgcHJlc2VudCAgaW4gIFNWcjQuICAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UKKyAgICAgICAgICAgIGZvciBkZXRhaWxzLgorCisgICAgICAgICAgICBUaGUgcm91dGluZXMgPFNUUk9ORz5nZXRtb3VzZTwvU1RST05HPiwgIDxTVFJPTkc+bW91c2VtYXNrPC9TVFJPTkc+LCAgPFNUUk9ORz51bmdldG1vdXNlPC9TVFJPTkc+LCAgPFNUUk9ORz5tb3UtPC9TVFJPTkc+CisgICAgICAgICAgICA8U1RST05HPnNlaW50ZXJ2YWw8L1NUUk9ORz4sICBhbmQgPFNUUk9ORz53ZW5jbG9zZTwvU1RST05HPiByZWxhdGluZyB0byBtb3VzZSBpbnRlcmZhYy0KKyAgICAgICAgICAgIGluZyBhcmUgbm90IHBhcnQgb2YgWFBHNCwgbm9yICBhcmUgIHRoZXkgIHByZXNlbnQgIGluCisgICAgICAgICAgICBTVnI0LiAgICBTZWUgICB0aGUgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4gIG1hbnVhbCAgcGFnZSAgZm9yCisgICAgICAgICAgICBkZXRhaWxzLgorCisgICAgICAgICAgICBUaGUgcm91dGluZSA8U1RST05HPm1jcHJpbnQ8L1NUUk9ORz4gd2FzIG5vdCBwcmVzZW50IGluICBhbnkgIHByZXZpb3VzCisgICAgICAgICAgICBjdXJzZXMgaW1wbGVtZW50YXRpb24uICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50KDN4KTwvQT48L1NUUk9ORz4gbWFudWFsCisgICAgICAgICAgICBwYWdlIGZvciBkZXRhaWxzLgorCisgICAgICAgICAgICBUaGUgcm91dGluZSA8U1RST05HPndyZXNpemU8L1NUUk9ORz4gaXMgbm90IHBhcnQgb2YgWFBHNCwgIG5vciAgaXMgIGl0CisgICAgICAgICAgICBwcmVzZW50IGluIFNWcjQuICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0id3Jlc2l6ZS4zeC5odG1sIj53cmVzaXplKDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UgZm9yCisgICAgICAgICAgICBkZXRhaWxzLgorCisgICAgICAgICAgICBUaGUgV0lORE9XIHN0cnVjdHVyZSdzIGludGVybmFsIGRldGFpbHMgY2FuIGJlIGhpZGRlbgorICAgICAgICAgICAgZnJvbSAgYXBwbGljYXRpb24gIHByb2dyYW1zLiAgU2VlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPiBmb3IKKyAgICAgICAgICAgIHRoZSBkaXNjdXNzaW9uIG9mIDxTVFJPTkc+aXNfc2Nyb2xsb2s8L1NUUk9ORz4sIGV0Yy4KKworICAgICAgIEluIGhpc3RvcmljIGN1cnNlcyB2ZXJzaW9ucywgZGVsYXlzIGVtYmVkZGVkIGluIHRoZSAgY2FwYS0KKyAgICAgICBiaWxpdGllcyA8U1RST05HPmNyPC9TVFJPTkc+LCA8U1RST05HPmluZDwvU1RST05HPiwgPFNUUk9ORz5jdWIxPC9TVFJPTkc+LCA8U1RST05HPmZmPC9TVFJPTkc+IGFuZCA8U1RST05HPnRhYjwvU1RST05HPiBhY3RpdmF0ZWQgY29ycmVzcG9uZGluZworICAgICAgIGRlbGF5IGJpdHMgaW4gdGhlIFVOSVggdHR5IGRyaXZlci4gICBJbiAgdGhpcyAgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uLCAgYWxsICBwYWRkaW5nICBpcyAgZG9uZSAgYnkgc2VuZGluZyBOVUwgYnl0ZXMuICBUaGlzCisgICAgICAgbWV0aG9kIGlzIHNsaWdodGx5IG1vcmUgZXhwZW5zaXZlLCBidXQgbmFycm93cyB0aGUgIGludGVyLQorICAgICAgIGZhY2UgIHRvICB0aGUgIFVOSVgga2VybmVsIHNpZ25pZmljYW50bHkgYW5kIGluY3JlYXNlcyB0aGUKKyAgICAgICBwYWNrYWdlJ3MgcG9ydGFiaWxpdHkgY29ycmVzcG9uZGluZ2x5LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgIGZpbGUgIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiAgYXV0b21hdGljYWxseSAgaW5jbHVkZXMgIHRoZQorICAgICAgIGhlYWRlciBmaWxlcyA8U1RST05HPiZsdDtzdGRpby5oJmd0OzwvU1RST05HPiBhbmQgPFNUUk9ORz4mbHQ7dW5jdHJsLmgmZ3Q7PC9TVFJPTkc+LgorCisgICAgICAgSWYgIHN0YW5kYXJkICBvdXRwdXQgZnJvbSBhIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBwcm9ncmFtIGlzIHJlLWRpcmVjdGVkCisgICAgICAgdG8gc29tZXRoaW5nIHdoaWNoIGlzIG5vdCBhIHR0eSwgc2NyZWVuICB1cGRhdGVzICB3aWxsICBiZQorICAgICAgIGRpcmVjdGVkIHRvIHN0YW5kYXJkIGVycm9yLiAgVGhpcyB3YXMgYW4gdW5kb2N1bWVudGVkIGZlYS0KKyAgICAgICB0dXJlIG9mIEFUJmFtcDtUIFN5c3RlbSBWIFJlbGVhc2UgMyBjdXJzZXMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBaZXlkIE0uIEJlbi1IYWxpbSwgRXJpYyAgUy4gIFJheW1vbmQsICBUaG9tYXMgIEUuICBEaWNrZXkuCisgICAgICAgQmFzZWQgb24gcGN1cnNlcyBieSBQYXZlbCBDdXJ0aXMuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi9wYW5lbC4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL3BhbmVsLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViNWEwNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi9wYW5lbC4zeC5odG1sCkBAIC0wLDAgKzEsMjQxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IHBhbmVsLjN4LHYgMS4xNCAyMDA3LzA1LzEyIDIwOjQ1OjIwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnBhbmVsIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+cGFuZWwgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9InBhbmVsLjN4Lmh0bWwiPnBhbmVsKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0icGFuZWwuM3guaHRtbCI+cGFuZWwoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIHBhbmVsIC0gcGFuZWwgc3RhY2sgZXh0ZW5zaW9uIGZvciBjdXJzZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O3BhbmVsLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmNjPC9TVFJPTkc+IDxTVFJPTkc+W2ZsYWdzXTwvU1RST05HPiA8U1RST05HPnNvdXJjZWZpbGVzPC9TVFJPTkc+IDxTVFJPTkc+LWxwYW5lbDwvU1RST05HPiA8U1RST05HPi1sbmN1cnNlczwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5QQU5FTDwvU1RST05HPiA8U1RST05HPipuZXdfcGFuZWwoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJvdHRvbV9wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50b3BfcGFuZWwoUEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2hvd19wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+dXBkYXRlX3BhbmVscygpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aGlkZV9wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qcGFuZWxfd2luZG93KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cmVwbGFjZV9wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4sPC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KndpbmRvdyk8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm1vdmVfcGFuZWwoUEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnN0YXJ0eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zdGFydHgpPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wYW5lbF9oaWRkZW4oY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5QQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5QQU5FTDwvU1RST05HPiA8U1RST05HPipwYW5lbF9hYm92ZShjb25zdDwvU1RST05HPiA8U1RST05HPlBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbmVsX2JlbG93KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0X3BhbmVsX3VzZXJwdHIoUEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipwdHIpPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qcGFuZWxfdXNlcnB0cihjb25zdDwvU1RST05HPiA8U1RST05HPlBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlbF9wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgUGFuZWxzICBhcmUgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiAgd2luZG93cyB3aXRoIHRoZSBhZGRlZCBmZWF0dXJlIG9mCisgICAgICAgZGVwdGguICBQYW5lbCBmdW5jdGlvbnMgYWxsb3cgdGhlIHVzZSBvZiAgc3RhY2tlZCAgd2luZG93cworICAgICAgIGFuZCAgZW5zdXJlICB0aGUgIHByb3BlciAgcG9ydGlvbnMgIG9mIGVhY2ggd2luZG93IGFuZCB0aGUKKyAgICAgICBjdXJzZXMgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4gd2luZG93IGFyZSBoaWRkZW4gb3IgZGlzcGxheWVkICB3aGVuICBwYW5lbHMKKyAgICAgICBhcmUgIGFkZGVkLCAgbW92ZWQsICBtb2RpZmllZCBvciByZW1vdmVkLiAgVGhlIHNldCBvZiBjdXItCisgICAgICAgcmVudGx5IHZpc2libGUgcGFuZWxzIGlzIHRoZSBzdGFjayBvZiBwYW5lbHMuICBUaGUgIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+CisgICAgICAgd2luZG93ICBpcyAgYmVuZWF0aCBhbGwgcGFuZWxzLCBhbmQgaXMgbm90IGNvbnNpZGVyZWQgcGFydAorICAgICAgIG9mIHRoZSBzdGFjay4KKworICAgICAgIEEgd2luZG93IGlzIGFzc29jaWF0ZWQgd2l0aCBldmVyeSBwYW5lbC4gIFRoZSAgcGFuZWwgIHJvdS0KKyAgICAgICB0aW5lcyAgZW5hYmxlICB5b3UgdG8gY3JlYXRlLCBtb3ZlLCBoaWRlLCBhbmQgc2hvdyBwYW5lbHMsCisgICAgICAgYXMgd2VsbCBhcyBwb3NpdGlvbiBhIHBhbmVsIGF0IGFueSBkZXNpcmVkIGxvY2F0aW9uIGluIHRoZQorICAgICAgIHN0YWNrLgorCisgICAgICAgUGFuZWwgcm91dGluZXMgYXJlIGEgZnVuY3Rpb25hbCBsYXllciBhZGRlZCB0byA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgbWFrZSBvbmx5IGhpZ2gtbGV2ZWwgY3Vyc2VzIGNhbGxzLCBhbmQgd29yayBhbnl3aGVyZSAgdGVyLQorICAgICAgIG1pbmZvIGN1cnNlcyBkb2VzLgorCisKKzwvUFJFPgorPEgyPkZVTkNUSU9OUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm5ld19wYW5lbCh3aW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIGFsbG9jYXRlcyAgIGEgICA8U1RST05HPlBBTkVMPC9TVFJPTkc+IHN0cnVjdHVyZSwgYXNzb2NpYXRlcyBpdCB3aXRoCisgICAgICAgICAgICAgIDxTVFJPTkc+d2luPC9TVFJPTkc+LCBwbGFjZXMgdGhlIHBhbmVsICBvbiAgdGhlICB0b3AgIG9mICB0aGUgIHN0YWNrCisgICAgICAgICAgICAgIChjYXVzZXMgICBpdCAgdG8gICBiZSAgIGRpc3BsYXllZCAgYWJvdmUgIGFueSBvdGhlcgorICAgICAgICAgICAgICBwYW5lbCkgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgcGFuZWwuCisKKyAgICAgICA8U1RST05HPnVwZGF0ZV9wYW5lbHMoKTwvU1RST05HPgorICAgICAgICAgICAgICByZWZyZXNoZXMgdGhlIHZpcnR1YWwgc2NyZWVuIHRvIHJlZmxlY3QgIHRoZSAgcmVsYS0KKyAgICAgICAgICAgICAgdGlvbnMgYmV0d2VlbiB0aGUgcGFuZWxzIGluIHRoZSBzdGFjaywgYnV0IGRvZXMgbm90CisgICAgICAgICAgICAgIGNhbGwgZG91cGRhdGUoKSB0byAgcmVmcmVzaCAgdGhlICBwaHlzaWNhbCAgc2NyZWVuLgorICAgICAgICAgICAgICBVc2UgdGhpcyBmdW5jdGlvbiBhbmQgbm90IHdyZWZyZXNoIG9yIHdub3V0cmVmcmVzaC4KKyAgICAgICAgICAgICAgdXBkYXRlX3BhbmVscygpIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlCisgICAgICAgICAgICAgIGEgIGNhbGwgIHRvIGRvdXBkYXRlKCksIGJ1dCBkb3VwZGF0ZSgpIGlzIHRoZSBmdW5jLQorICAgICAgICAgICAgICB0aW9uIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgcGh5c2ljYWwgIHNjcmVlbi4KKworICAgICAgIDxTVFJPTkc+ZGVsX3BhbmVsKHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmVtb3ZlcyB0aGUgZ2l2ZW4gcGFuZWwgZnJvbSB0aGUgIHN0YWNrIGFuZCBkZWFsbG8tCisgICAgICAgICAgICAgIGNhdGVzIHRoZSA8U1RST05HPlBBTkVMPC9TVFJPTkc+IHN0cnVjdHVyZSAoYnV0IG5vdCAgaXRzICBhc3NvY2lhdGVkCisgICAgICAgICAgICAgIHdpbmRvdykuCisKKyAgICAgICA8U1RST05HPmhpZGVfcGFuZWwocGFuKTwvU1RST05HPgorICAgICAgICAgICAgICByZW1vdmVzICB0aGUgIGdpdmVuICBwYW5lbCBmcm9tIHRoZSBwYW5lbCBzdGFjayBhbmQKKyAgICAgICAgICAgICAgdGh1cyBoaWRlcyBpdCBmcm9tIHZpZXcuIFRoZSA8U1RST05HPlBBTkVMPC9TVFJPTkc+IHN0cnVjdHVyZSBpcyBub3QKKyAgICAgICAgICAgICAgbG9zdCwgbWVyZWx5IHJlbW92ZWQgZnJvbSB0aGUgc3RhY2suCisKKyAgICAgICA8U1RST05HPnBhbmVsX2hpZGRlbihwYW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIHJldHVybnMgIFRSVUUgIGlmICB0aGUgcGFuZWwgaXMgaW4gdGhlIHBhbmVsIHN0YWNrLAorICAgICAgICAgICAgICBGQUxTRSBpZiBpdCAgaXMgIG5vdC4gICBJZiAgdGhlICBwYW5lbCAgaXMgIGEgIG51bGwKKyAgICAgICAgICAgICAgcG9pbnRlciwgcmV0dXJuIEVSUi4KKworICAgICAgIDxTVFJPTkc+c2hvd19wYW5lbChwYW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIG1ha2VzICBhICBoaWRkZW4gcGFuZWwgdmlzaWJsZSBieSBwbGFjaW5nIGl0IG9uIHRvcAorICAgICAgICAgICAgICBvZiB0aGUgcGFuZWxzIGluIHRoZSBwYW5lbCBzdGFjay4gU2VlIENPTVBBVElCSUxJVFkKKyAgICAgICAgICAgICAgYmVsb3cuCisKKyAgICAgICA8U1RST05HPnRvcF9wYW5lbChwYW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIHB1dHMgIHRoZSAgZ2l2ZW4gdmlzaWJsZSBwYW5lbCBvbiB0b3Agb2YgYWxsIHBhbmVscworICAgICAgICAgICAgICBpbiB0aGUgc3RhY2suICBTZWUgQ09NUEFUSUJJTElUWSBiZWxvdy4KKworICAgICAgIDxTVFJPTkc+Ym90dG9tX3BhbmVsKHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcHV0cyBwYW5lbCBhdCB0aGUgYm90dG9tIG9mIGFsbCBwYW5lbHMuCisKKyAgICAgICA8U1RST05HPm1vdmVfcGFuZWwocGFuLHN0YXJ0eSxzdGFydHgpPC9TVFJPTkc+CisgICAgICAgICAgICAgIG1vdmVzIHRoZSBnaXZlbiBwYW5lbCB3aW5kb3cgc28gdGhhdCBpdHMgdXBwZXItbGVmdAorICAgICAgICAgICAgICBjb3JuZXIgIGlzICBhdCAgPFNUUk9ORz5zdGFydHk8L1NUUk9ORz4sIDxTVFJPTkc+c3RhcnR4PC9TVFJPTkc+LiAgSXQgZG9lcyBub3QgY2hhbmdlCisgICAgICAgICAgICAgIHRoZSBwb3NpdGlvbiBvZiB0aGUgcGFuZWwgaW4gdGhlIHN0YWNrLiAgQmUgc3VyZSB0bworICAgICAgICAgICAgICB1c2UgIHRoaXMgIGZ1bmN0aW9uLCAgbm90ICA8U1RST05HPm12d2luKCk8L1NUUk9ORz4sIHRvIG1vdmUgYSBwYW5lbAorICAgICAgICAgICAgICB3aW5kb3cuCisKKyAgICAgICA8U1RST05HPnJlcGxhY2VfcGFuZWwocGFuLHdpbmRvdyk8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmVwbGFjZXMgdGhlIGN1cnJlbnQgd2luZG93IG9mICBwYW5lbCAgd2l0aCAgPFNUUk9ORz53aW5kb3c8L1NUUk9ORz4KKyAgICAgICAgICAgICAgKHVzZWZ1bCwgZm9yIGV4YW1wbGUgaWYgeW91IHdhbnQgdG8gcmVzaXplIGEgcGFuZWw7CisgICAgICAgICAgICAgIGlmIHlvdSdyZSB1c2luZyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4sIHlvdSBjYW4gY2FsbCA8U1RST05HPnJlcGxhY2VfcGFuZWw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgb24gIHRoZSBvdXRwdXQgb2YgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPikuICBJdCBkb2VzIG5vdCBjaGFuZ2UKKyAgICAgICAgICAgICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBwYW5lbCBpbiB0aGUgc3RhY2suCisKKyAgICAgICA8U1RST05HPnBhbmVsX2Fib3ZlKHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhbmVsIGFib3ZlIHBhbi4gICBJZiAgdGhlCisgICAgICAgICAgICAgIHBhbmVsICBhcmd1bWVudCBpcyA8U1RST05HPihQQU5FTDwvU1RST05HPiA8U1RST05HPiopMDwvU1RST05HPiwgaXQgcmV0dXJucyBhIHBvaW50ZXIKKyAgICAgICAgICAgICAgdG8gdGhlIGJvdHRvbSBwYW5lbCBpbiB0aGUgc3RhY2suCisKKyAgICAgICA8U1RST05HPnBhbmVsX2JlbG93KHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhbmVsIGp1c3QgYmVsb3cgcGFuLiAgIElmCisgICAgICAgICAgICAgIHRoZSAgcGFuZWwgIGFyZ3VtZW50ICBpcyAgPFNUUk9ORz4oUEFORUw8L1NUUk9ORz4gIDxTVFJPTkc+KikwPC9TVFJPTkc+LCBpdCByZXR1cm5zIGEKKyAgICAgICAgICAgICAgcG9pbnRlciB0byB0aGUgdG9wIHBhbmVsIGluIHRoZSBzdGFjay4KKworICAgICAgIDxTVFJPTkc+c2V0X3BhbmVsX3VzZXJwdHIocGFuLHB0cik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2V0cyB0aGUgcGFuZWwncyB1c2VyIHBvaW50ZXIuCisKKyAgICAgICA8U1RST05HPnBhbmVsX3VzZXJwdHIocGFuKTwvU1RST05HPgorICAgICAgICAgICAgICByZXR1cm5zIHRoZSB1c2VyIHBvaW50ZXIgZm9yIGEgZ2l2ZW4gcGFuZWwuCisKKyAgICAgICA8U1RST05HPnBhbmVsX3dpbmRvdyhwYW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB3aW5kb3cgb2YgdGhlIGdpdmVuIHBhbmVsLgorCisKKzwvUFJFPgorPEgyPkRJQUdOT1NUSUNTPC9IMj48UFJFPgorICAgICAgIEVhY2ggIHJvdXRpbmUgIHRoYXQgIHJldHVybnMgIGEgcG9pbnRlciByZXR1cm5zIDxTVFJPTkc+TlVMTDwvU1RST05HPiBpZiBhbgorICAgICAgIGVycm9yIG9jY3Vycy4gRWFjaCAgcm91dGluZSAgdGhhdCAgcmV0dXJucyAgYW4gIGludCAgdmFsdWUKKyAgICAgICByZXR1cm5zIDxTVFJPTkc+T0s8L1NUUk9ORz4gaWYgaXQgZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5IGFuZCA8U1RST05HPkVSUjwvU1RST05HPiBpZiBub3QuCisKKworPC9QUkU+Cis8SDI+Q09NUEFUSUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBSZWFzb25hYmxlICBjYXJlICBoYXMgYmVlbiB0YWtlbiB0byAgZW5zdXJlICBjb21wYXRpYmlsaXR5CisgICAgICAgd2l0aCAgdGhlICBuYXRpdmUgIHBhbmVsICBmYWNpbGl0eSAgaW50cm9kdWNlZCAgaW4gIFNWcjMuMgorICAgICAgIChpbnNwZWN0aW9uICAgb2YgICB0aGUgIFNWcjQgIG1hbnVhbCAgcGFnZXMgIHN1Z2dlc3RzICB0aGUKKyAgICAgICBwcm9ncmFtbWluZyAgaW50ZXJmYWNlICBpcyAgdW5jaGFuZ2VkKS4gICBUaGUgIDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gIGRhdGEKKyAgICAgICBzdHJ1Y3R1cmVzICBhcmUgIG1lcmVseSAgIHNpbWlsYXIuIFRoZSAgcHJvZ3JhbW1lciBpcyBjYXUtCisgICAgICAgdGlvbmVkIG5vdCB0byBkaXJlY3RseSB1c2UgPFNUUk9ORz5QQU5FTDwvU1RST05HPiBmaWVsZHMuCisKKyAgICAgICBUaGUgZnVuY3Rpb25zIDxTVFJPTkc+c2hvd19wYW5lbCgpPC9TVFJPTkc+IGFuZCA8U1RST05HPnRvcF9wYW5lbCgpPC9TVFJPTkc+ICBhcmUgIGlkZW50aWNhbAorICAgICAgIGluICB0aGlzICBpbXBsZW1lbnRhdGlvbiwgIGFuZCB3b3JrIGVxdWFsbHkgd2VsbCB3aXRoIGRpcy0KKyAgICAgICBwbGF5ZWQgb3IgaGlkZGVuIHBhbmVscy4gIEluIHRoZSBuYXRpdmUgU3lzdGVtIFYgaW1wbGVtZW4tCisgICAgICAgdGF0aW9uLCA8U1RST05HPnNob3dfcGFuZWwoKTwvU1RST05HPiBpcyBpbnRlbmRlZCBmb3IgbWFraW5nIGEgaGlkZGVuIHBhbmVsCisgICAgICAgdmlzaWJsZSAoYXQgdGhlIHRvcCAgb2YgIHRoZSAgc3RhY2spICBhbmQgIDxTVFJPTkc+dG9wX3BhbmVsKCk8L1NUUk9ORz4gIGlzCisgICAgICAgaW50ZW5kZWQgIGZvciAgbWFraW5nIGFuIGFscmVhZHktdmlzaWJsZSBwYW5lbCBtb3ZlIHRvIHRoZQorICAgICAgIHRvcCBvZiB0aGUgc3RhY2suIFlvdSBhcmUgY2F1dGlvbmVkICB0byAgdXNlICB0aGUgIGNvcnJlY3QKKyAgICAgICBmdW5jdGlvbiAgIHRvICAgZW5zdXJlICBjb21wYXRpYmlsaXR5ICB3aXRoICBuYXRpdmUgIHBhbmVsCisgICAgICAgbGlicmFyaWVzLgorCisKKzwvUFJFPgorPEgyPk5PVEU8L0gyPjxQUkU+CisgICAgICAgSW4geW91ciBsaWJyYXJ5IGxpc3QsIGxpYnBhbmVsLmEgc2hvdWxkICBiZSAgYmVmb3JlICBsaWJuLQorICAgICAgIGN1cnNlcy5hOyAgdGhhdCAgaXMsICB5b3Ugd2FudCB0byBzYXkgYC1scGFuZWwgLWxuY3Vyc2VzJywKKyAgICAgICBub3QgdGhlIG90aGVyIHdheSBhcm91bmQgKHdoaWNoIHdvdWxkIHVzdWFsbHkgZ2l2ZSBhIGxpbmstCisgICAgICAgZXJyb3IpLgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIHBhbmVsLmggaW50ZXJmYWNlIGZvciB0aGUgcGFuZWxzIGxpYnJhcnkKKworICAgICAgIGxpYnBhbmVsLmEgdGhlIHBhbmVscyBsaWJyYXJ5IGl0c2VsZgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPgorCisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SPC9IMj48UFJFPgorICAgICAgIE9yaWdpbmFsbHkgICB3cml0dGVuICAgYnkgICBXYXJyZW4gIFR1Y2tlciAgJmx0O3dodEBuNGhnZi5tdC0KKyAgICAgICBwYXJrLmdhLnVzJmd0OywgcHJpbWFyaWx5IHRvIGFzc2lzdCAgaW4gIHBvcnRpbmcgIHUzODZtb24gIHRvCisgICAgICAgc3lzdGVtcyAgd2l0aG91dCAgYSBuYXRpdmUgcGFuZWxzIGxpYnJhcnkuICBSZXBhY2thZ2VkIGZvcgorICAgICAgIG5jdXJzZXMgYnkgWmV5ZCBiZW4tSGFsaW0uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0icGFuZWwuM3guaHRtbCI+cGFuZWwoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vcmVzaXpldGVybS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL3Jlc2l6ZXRlcm0uM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2IwODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL3Jlc2l6ZXRlcm0uM3guaHRtbApAQCAtMCwwICsxLDE0MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtMjAwNQorICAqIEBJZDogcmVzaXpldGVybS4zeCx2IDEuMTEgMjAwNS8wNi8yNSAyMjoxOTo0MiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5yZXNpemV0ZXJtIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+cmVzaXpldGVybSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0icmVzaXpldGVybS4zeC5odG1sIj5yZXNpemV0ZXJtKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aXNfdGVybV9yZXNpemVkPC9TVFJPTkc+LCAgPFNUUk9ORz5yZXNpemVfdGVybTwvU1RST05HPiwgIDxTVFJPTkc+cmVzaXpldGVybTwvU1RST05HPiAgLSAgY2hhbmdlICB0aGUKKyAgICAgICBjdXJzZXMgdGVybWluYWwgc2l6ZQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc190ZXJtX3Jlc2l6ZWQoaW50PC9TVFJPTkc+IDxTVFJPTkc+bGluZXMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y29sdW1ucyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yZXNpemVfdGVybShpbnQ8L1NUUk9ORz4gPFNUUk9ORz5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2x1bW5zKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlc2l6ZXRlcm0oaW50PC9TVFJPTkc+IDxTVFJPTkc+bGluZXMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y29sdW1ucyk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LiAgIEl0ICBwcm92aWRlcworICAgICAgIGNhbGxlcnMgIHdpdGggIGEgaG9vayBpbnRvIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gZGF0YSB0byByZXNpemUgd2luLQorICAgICAgIGRvd3MsIHByaW1hcmlseSBmb3IgdXNlIGJ5IHByb2dyYW1zIHJ1bm5pbmcgaW4gYW4gWCBXaW5kb3cKKyAgICAgICB0ZXJtaW5hbCAgKGUuZy4sICB4dGVybSkuICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5yZXNpemV0ZXJtPC9TVFJPTkc+IHJlc2l6ZXMKKyAgICAgICB0aGUgc3RhbmRhcmQgYW5kIGN1cnJlbnQgd2luZG93cyB0byB0aGUgIHNwZWNpZmllZCAgZGltZW4tCisgICAgICAgc2lvbnMsICBhbmQgIGFkanVzdHMgIG90aGVyICBib29ra2VlcGluZyAgZGF0YSB1c2VkIGJ5IHRoZQorICAgICAgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IHRoYXQgcmVjb3JkIHRoZSB3aW5kb3cgZGltZW5zaW9ucy4KKworICAgICAgIE1vc3QgIG9mICB0aGUgIHdvcmsgIGlzICBkb25lICBieSAgIHRoZSAgIGlubmVyICAgZnVuY3Rpb24KKyAgICAgICA8U1RST05HPnJlc2l6ZV90ZXJtPC9TVFJPTkc+LiAgVGhlIG91dGVyIGZ1bmN0aW9uIDxTVFJPTkc+cmVzaXpldGVybTwvU1RST05HPiBhZGRzIGJvb2trZWVwLQorICAgICAgIGluZyBmb3IgdGhlIFNJR1dJTkNIIGhhbmRsZXIuICBXaGVuIHJlc2l6aW5nIHRoZSAgd2luZG93cywKKyAgICAgICA8U1RST05HPnJlc2l6ZV90ZXJtPC9TVFJPTkc+ICBibGFuay1maWxscyB0aGUgYXJlYXMgdGhhdCBhcmUgZXh0ZW5kZWQuICBUaGUKKyAgICAgICBjYWxsaW5nIGFwcGxpY2F0aW9uIHNob3VsZCBmaWxsIGluIHRoZXNlIGFyZWFzIHdpdGggYXBwcm8tCisgICAgICAgcHJpYXRlICBkYXRhLiAgVGhlIDxTVFJPTkc+cmVzaXplX3Rlcm08L1NUUk9ORz4gZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcmVzaXplCisgICAgICAgYWxsIHdpbmRvd3MuICBIb3dldmVyLCBkdWUgdG8gdGhlICBjYWxsaW5nICBjb252ZW50aW9uICBvZgorICAgICAgIHBhZHMsICBpdCAgaXMgIG5vdCAgcG9zc2libGUgdG8gcmVzaXplIHRoZXNlIHdpdGhvdXQgYWRkaS0KKyAgICAgICB0aW9uYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwbGljYXRpb24uCisKKyAgICAgICBBIHN1cHBvcnQgZnVuY3Rpb24gPFNUUk9ORz5pc190ZXJtX3Jlc2l6ZWQ8L1NUUk9ORz4gIGlzICBwcm92aWRlZCAgc28gIHRoYXQKKyAgICAgICBhcHBsaWNhdGlvbnMgIGNhbiAgY2hlY2sgaWYgdGhlIDxTVFJPTkc+cmVzaXplX3Rlcm08L1NUUk9ORz4gZnVuY3Rpb24gd291bGQKKyAgICAgICBtb2RpZnkgdGhlIHdpbmRvdyBzdHJ1Y3R1cmVzLiAgSXQgcmV0dXJucyBUUlVFIGlmIHRoZSB3aW4tCisgICAgICAgZG93cyB3b3VsZCBiZSBtb2RpZmllZCwgYW5kIEZBTFNFIG90aGVyd2lzZS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgRXhjZXB0ICBhcyAgbm90ZXMsICB0aGVzZSAgZnVuY3Rpb24gcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+CisgICAgICAgdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IG9uIHN1Y2Nlc3MuICBUaGV5IHdpbGwgZmFpbCBpZiAgZWl0aGVyCisgICAgICAgb2YgdGhlIGRpbWVuc2lvbnMgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBvciBpZiBhbgorICAgICAgIGVycm9yIG9jY3VycyB3aGlsZSAocmUpYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSAgd2luZG93cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBXaGlsZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gc3VwcG9ydCBhCisgICAgICAgc2lnbmFsIGhhbmRsZXIgKGkuZS4sIGZvciBTSUdXSU5DSCksIGNhcmUgc2hvdWxkIGJlICB0YWtlbgorICAgICAgIHRvICBhdm9pZCBpbnZva2luZyB0aGVtIGluIGEgY29udGV4dCB3aGVyZSA8U1RST05HPm1hbGxvYzwvU1RST05HPiBvciA8U1RST05HPnJlYWwtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5sb2M8L1NUUk9ORz4gbWF5IGhhdmUgYmVlbiBpbnRlcnJ1cHRlZCwgc2luY2UgaXQgdXNlcyAgdGhvc2UgIGZ1bmMtCisgICAgICAgdGlvbnMuCisKKyAgICAgICBJZiAgbmN1cnNlcyAgaXMgY29uZmlndXJlZCB0byBzdXBwbHkgaXRzIG93biBTSUdXSU5DSCBoYW4tCisgICAgICAgZGxlciwgdGhlIDxTVFJPTkc+cmVzaXpldGVybTwvU1RST05HPiBmdW5jdGlvbiB1bmdldGNoJ3MgYSA8U1RST05HPktFWV9SRVNJWkU8L1NUUk9ORz4gd2hpY2gKKyAgICAgICB3aWxsICBiZSAgcmVhZCBvbiB0aGUgbmV4dCBjYWxsIHRvIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4uICBUaGlzIGlzIHVzZWQgdG8KKyAgICAgICBhbGVydCBhbiBhcHBsaWNhdGlvbiB0aGF0IHRoZSBzY3JlZW4gc2l6ZSBoYXMgY2hhbmdlZCwgYW5kCisgICAgICAgdGhhdCAgaXQgc2hvdWxkIHJlcGFpbnQgc3BlY2lhbCBmZWF0dXJlcyBzdWNoIGFzIHBhZHMgdGhhdAorICAgICAgIGNhbm5vdCBiZSBkb25lIGF1dG9tYXRpY2FsbHkuCisKKyAgICAgICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gIG9yICA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4gIGFyZSAgc2V0LAorICAgICAgIHRoaXMgIG92ZXJyaWRlcyAgdGhlICBsaWJyYXJ5J3MgIHVzZSAgb2YgIHRoZSAgd2luZG93IHNpemUKKyAgICAgICBvYnRhaW5lZCBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgVGh1cywgZXZlbiBpZiBhICBTSUctCisgICAgICAgV0lOQ0ggIGlzIHJlY2VpdmVkLCBubyBzY3JlZW4gc2l6ZSBjaGFuZ2UgbWF5IGJlIHJlY29yZGVkLgorICAgICAgIEluIHRoYXQgY2FzZSwgbm8gPFNUUk9ORz5LRVlfUkVTSVpFPC9TVFJPTkc+IGlzIHF1ZXVlZCBmb3IgdGhlIG5leHQgY2FsbCB0bworICAgICAgIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz47IGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9IndyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgRGlja2V5IChmcm9tIGFuIGVxdWl2YWxlbnQgZnVuY3Rpb24gd3JpdHRlbiBpbiAxOTg4CisgICAgICAgZm9yIEJTRCBjdXJzZXMpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vdGVybS41Lmh0bWwgYi9kb2MvaHRtbC9tYW4vdGVybS41Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmZGM1NQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21hbi90ZXJtLjUuaHRtbApAQCAtMCwwICsxLDMwOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiB0ZXJtLjUsdiAxLjE5IDIwMDYvMTIvMjQgMTg6MTI6MzggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+dGVybSA1PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+dGVybSA1PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJ0ZXJtLjUuaHRtbCI+dGVybSg1KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRlcm0uNS5odG1sIj50ZXJtKDUpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIHRlcm0gLSBmb3JtYXQgb2YgY29tcGlsZWQgdGVybSBmaWxlLgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dGVybTwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgPFNUUk9ORz5TVE9SQUdFPC9TVFJPTkc+IDxTVFJPTkc+TE9DQVRJT048L1NUUk9ORz4KKyAgICAgICBDb21waWxlZCB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgYXJlIHBsYWNlZCB1bmRlciB0aGUgZGlyZWMtCisgICAgICAgdG9yeSA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm88L1NUUk9ORz4uICAgVHdvICBjb25maWd1cmF0aW9ucyAgYXJlICBzdXAtCisgICAgICAgcG9ydGVkICh3aGVuIGJ1aWxkaW5nIHRoZSBuY3Vyc2VzIGxpYnJhcmllcyk6CisKKyAgICAgICA8U1RST05HPmRpcmVjdG9yeTwvU1RST05HPiA8U1RST05HPnRyZWU8L1NUUk9ORz4KKyAgICAgICAgICAgIEEgIHR3by1sZXZlbCAgc2NoZW1lIGlzIHVzZWQgdG8gYXZvaWQgYSBsaW5lYXIgc2VhcmNoCisgICAgICAgICAgICBvZiBhICBodWdlICBVTklYICBzeXN0ZW0gIGRpcmVjdG9yeTogIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXItPC9TVFJPTkc+CisgICAgICAgICAgICA8U1RST05HPm1pbmZvL2MvbmFtZTwvU1RST05HPiAgd2hlcmUgPEVNPm5hbWU8L0VNPiBpcyB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwsCisgICAgICAgICAgICBhbmQgPEVNPmM8L0VNPiBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIDxFTT5uYW1lPC9FTT4uICBUaHVzLCA8RU0+YWN0NDwvRU0+IGNhbgorICAgICAgICAgICAgYmUgIGZvdW5kICBpbiAgdGhlICBmaWxlICA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm8vYS9hY3Q0PC9TVFJPTkc+LgorICAgICAgICAgICAgU3lub255bXMgZm9yIHRoZSBzYW1lICB0ZXJtaW5hbCAgYXJlICBpbXBsZW1lbnRlZCAgYnkKKyAgICAgICAgICAgIG11bHRpcGxlIGxpbmtzIHRvIHRoZSBzYW1lIGNvbXBpbGVkIGZpbGUuCisKKyAgICAgICA8U1RST05HPmhhc2hlZDwvU1RST05HPiA8U1RST05HPmRhdGFiYXNlPC9TVFJPTkc+CisgICAgICAgICAgICBVc2luZyAgQmVya2VsZXkgIGRhdGFiYXNlLCAgdHdvICB0eXBlcyBvZiByZWNvcmRzIGFyZQorICAgICAgICAgICAgc3RvcmVkOiB0aGUgdGVybWluZm8gIGRhdGEgIGluICB0aGUgIHNhbWUgIGZvcm1hdCAgYXMKKyAgICAgICAgICAgIHN0b3JlZCAgaW4gIGEgZGlyZWN0b3J5IHRyZWUgd2l0aCB0aGUgdGVybWluZm8ncyBwcmktCisgICAgICAgICAgICBtYXJ5IG5hbWUgYXMgIGEgIGtleSwgIGFuZCAgcmVjb3JkcyAgY29udGFpbmluZyAgb25seQorICAgICAgICAgICAgYWxpYXNlcyBwb2ludGluZyB0byB0aGUgcHJpbWFyeSBuYW1lLgorCisgICAgICAgICAgICBJZiBidWlsdCB0byB3cml0ZSBoYXNoZWQgZGF0YWJhc2VzLCBuY3Vyc2VzIGNhbiBzdGlsbAorICAgICAgICAgICAgcmVhZCB0ZXJtaW5mbyAgZGF0YWJhc2VzICBvcmdhbml6ZWQgIGFzICBhICBkaXJlY3RvcnkKKyAgICAgICAgICAgIHRyZWUsICBidXQgIGNhbm5vdCAgd3JpdGUgIGVudHJpZXMgaW50byB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICB0cmVlLiAgSXQgY2FuICB3cml0ZSAgKG9yICByZXdyaXRlKSAgZW50cmllcyAgaW4gIHRoZQorICAgICAgICAgICAgaGFzaGVkIGRhdGFiYXNlLgorCisgICAgICAgICAgICBuY3Vyc2VzICBkaXN0aW5ndWlzaGVzICB0aGUgdHdvIGNhc2VzIGluIHRoZSBURVJNSU5GTworICAgICAgICAgICAgYW5kIFRFUk1JTkZPX0RJUlMgZW52aXJvbm1lbnQgdmFyaWFibGUgYnkgYXNzdW1pbmcgIGEKKyAgICAgICAgICAgIGRpcmVjdG9yeSAgdHJlZSAgZm9yICBlbnRyaWVzICB0aGF0ICBjb3JyZXNwb25kIHRvIGFuCisgICAgICAgICAgICBleGlzdGluZyBkaXJlY3RvcnksIGFuZCBoYXNoZWQgZGF0YWJhc2Ugb3RoZXJ3aXNlLgorCisgICA8U1RST05HPlNUT1JBR0U8L1NUUk9ORz4gPFNUUk9ORz5GT1JNQVQ8L1NUUk9ORz4KKyAgICAgICBUaGUgZm9ybWF0IGhhcyBiZWVuIGNob3NlbiBzbyB0aGF0IGl0IHdpbGwgYmUgdGhlIHNhbWUgIG9uCisgICAgICAgYWxsICBoYXJkd2FyZS4gICBBbiAgOCBvciBtb3JlIGJpdCBieXRlIGlzIGFzc3VtZWQsIGJ1dCBubworICAgICAgIGFzc3VtcHRpb25zIGFib3V0IGJ5dGUgIG9yZGVyaW5nICBvciAgc2lnbiAgZXh0ZW5zaW9uICBhcmUKKyAgICAgICBtYWRlLgorCisgICAgICAgVGhlICBjb21waWxlZCAgZmlsZSAgaXMgIGNyZWF0ZWQgd2l0aCB0aGUgPFNUUk9ORz50aWM8L1NUUk9ORz4gcHJvZ3JhbSwgYW5kCisgICAgICAgcmVhZCBieSB0aGUgcm91dGluZSA8RU0+c2V0dXB0ZXJtPC9FTT4uICBUaGUgZmlsZSBpcyAgZGl2aWRlZCAgaW50bworICAgICAgIHNpeCBwYXJ0czogdGhlIGhlYWRlciwgdGVybWluYWwgbmFtZXMsIGJvb2xlYW4gZmxhZ3MsIG51bS0KKyAgICAgICBiZXJzLCBzdHJpbmdzLCBhbmQgc3RyaW5nIHRhYmxlLgorCisgICAgICAgVGhlIGhlYWRlciBzZWN0aW9uIGJlZ2lucyB0aGUgZmlsZS4gIFRoaXMgc2VjdGlvbiBjb250YWlucworICAgICAgIHNpeCAgc2hvcnQgIGludGVnZXJzIGluIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGJlbG93LiAgVGhlc2UKKyAgICAgICBpbnRlZ2VycyBhcmUKKworICAgICAgICAgICAgKDEpIHRoZSBtYWdpYyBudW1iZXIgKG9jdGFsIDA0MzIpOworCisgICAgICAgICAgICAoMikgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgbmFtZXMgc2VjdGlvbjsKKworICAgICAgICAgICAgKDMpIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJvb2xlYW4gc2VjdGlvbjsKKworICAgICAgICAgICAgKDQpIHRoZSBudW1iZXIgb2Ygc2hvcnQgaW50ZWdlcnMgaW4gdGhlIG51bWJlcnMgIHNlYy0KKyAgICAgICAgICAgIHRpb247CisKKyAgICAgICAgICAgICg1KSB0aGUgbnVtYmVyIG9mIG9mZnNldHMgIChzaG9ydCAgaW50ZWdlcnMpICBpbiAgdGhlCisgICAgICAgICAgICBzdHJpbmdzIHNlY3Rpb247CisKKyAgICAgICAgICAgICg2KSB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBzdHJpbmcgdGFibGUuCisKKyAgICAgICBTaG9ydCBpbnRlZ2VycyBhcmUgc3RvcmVkIGluIHR3byA4LWJpdCBieXRlcy4gICBUaGUgIGZpcnN0CisgICAgICAgYnl0ZSAgY29udGFpbnMgIHRoZSBsZWFzdCBzaWduaWZpY2FudCA4IGJpdHMgb2YgdGhlIHZhbHVlLAorICAgICAgIGFuZCB0aGUgc2Vjb25kIGJ5dGUgY29udGFpbnMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgOCAgYml0cy4KKyAgICAgICAoVGh1cywgIHRoZSAgdmFsdWUgIHJlcHJlc2VudGVkIGlzIDI1NipzZWNvbmQrZmlyc3QuKSAgVGhlCisgICAgICAgdmFsdWUgLTEgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHR3byBieXRlcyAwMzc3LCAwMzc3OyBvdGhlcgorICAgICAgIG5lZ2F0aXZlICB2YWx1ZXMgIGFyZSAgaWxsZWdhbC4gVGhpcyB2YWx1ZSBnZW5lcmFsbHkgbWVhbnMKKyAgICAgICB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGNhcGFiaWxpdHkgIGlzICBtaXNzaW5nICBmcm9tICB0aGlzCisgICAgICAgdGVybWluYWwuICAgTm90ZSB0aGF0IHRoaXMgZm9ybWF0IGNvcnJlc3BvbmRzIHRvIHRoZSBoYXJkLQorICAgICAgIHdhcmUgIG9mICB0aGUgIFZBWCAgYW5kICBQRFAtMTEgICh0aGF0ICBpcywgIGxpdHRsZS1lbmRpYW4KKyAgICAgICBtYWNoaW5lcykuICBNYWNoaW5lcyB3aGVyZSB0aGlzIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisgICAgICAgaGFyZHdhcmUgbXVzdCByZWFkIHRoZSBpbnRlZ2VycyBhcyB0d28gYnl0ZXMgIGFuZCAgY29tcHV0ZQorICAgICAgIHRoZSBsaXR0bGUtZW5kaWFuIHZhbHVlLgorCisgICAgICAgVGhlICB0ZXJtaW5hbCAgbmFtZXMgIHNlY3Rpb24gY29tZXMgbmV4dC4gIEl0IGNvbnRhaW5zIHRoZQorICAgICAgIGZpcnN0IGxpbmUgb2YgdGhlIHRlcm1pbmZvIGRlc2NyaXB0aW9uLCBsaXN0aW5nIHRoZSAgdmFyaS0KKyAgICAgICBvdXMgIG5hbWVzICBmb3IgdGhlIHRlcm1pbmFsLCBzZXBhcmF0ZWQgYnkgdGhlIGB8JyBjaGFyYWMtCisgICAgICAgdGVyLiAgVGhlIHNlY3Rpb24gaXMgdGVybWluYXRlZCB3aXRoIGFuIEFTQ0lJIE5VTCAgY2hhcmFjLQorICAgICAgIHRlci4KKworICAgICAgIFRoZSAgYm9vbGVhbiBmbGFncyBoYXZlIG9uZSBieXRlIGZvciBlYWNoIGZsYWcuICBUaGlzIGJ5dGUKKyAgICAgICBpcyBlaXRoZXIgMCBvciAxIGFzIHRoZSBmbGFnIGlzIHByZXNlbnQgIG9yICBhYnNlbnQuICAgVGhlCisgICAgICAgY2FwYWJpbGl0aWVzIGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgZmlsZSAmbHQ7dGVybS5oJmd0Oy4KKworICAgICAgIEJldHdlZW4gdGhlIGJvb2xlYW4gc2VjdGlvbiBhbmQgdGhlIG51bWJlciBzZWN0aW9uLCBhIG51bGwKKyAgICAgICBieXRlIHdpbGwgYmUgaW5zZXJ0ZWQsIGlmIG5lY2Vzc2FyeSwgdG8gIGVuc3VyZSAgdGhhdCAgdGhlCisgICAgICAgbnVtYmVyICBzZWN0aW9uIGJlZ2lucyBvbiBhbiBldmVuIGJ5dGUgKHRoaXMgaXMgYSByZWxpYyBvZgorICAgICAgIHRoZSAgUERQLTExJ3MgIHdvcmQtYWRkcmVzc2VkICAgYXJjaGl0ZWN0dXJlLCAgIG9yaWdpbmFsbHkKKyAgICAgICBkZXNpZ25lZCAgaW4gIHRvICBhdm9pZCAgSU9UIHRyYXBzIGluZHVjZWQgYnkgYWRkcmVzc2luZyBhCisgICAgICAgd29yZCBvbiBhbiBvZGQgYnl0ZSBib3VuZGFyeSkuICAgQWxsICBzaG9ydCAgaW50ZWdlcnMgIGFyZQorICAgICAgIGFsaWduZWQgb24gYSBzaG9ydCB3b3JkIGJvdW5kYXJ5LgorCisgICAgICAgVGhlIG51bWJlcnMgc2VjdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBmbGFncyBzZWN0aW9uLiAgRWFjaAorICAgICAgIGNhcGFiaWxpdHkgdGFrZXMgdXAgdHdvIGJ5dGVzLCBhbmQgaXMgc3RvcmVkIGFzIGEgIGxpdHRsZS0KKyAgICAgICBlbmRpYW4gc2hvcnQgaW50ZWdlci4gIElmIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBpcyAtMSwgdGhlCisgICAgICAgY2FwYWJpbGl0eSBpcyB0YWtlbiB0byBiZSBtaXNzaW5nLgorCisgICAgICAgVGhlIHN0cmluZ3Mgc2VjdGlvbiBpcyBhbHNvIHNpbWlsYXIuICBFYWNoICBjYXBhYmlsaXR5ICBpcworICAgICAgIHN0b3JlZCAgYXMgIGEgc2hvcnQgaW50ZWdlciwgaW4gdGhlIGZvcm1hdCBhYm92ZS4gIEEgdmFsdWUKKyAgICAgICBvZiAtMSBtZWFucyB0aGUgY2FwYWJpbGl0eSAgaXMgIG1pc3NpbmcuICAgT3RoZXJ3aXNlLCAgdGhlCisgICAgICAgdmFsdWUgIGlzICB0YWtlbiAgYXMgIGFuICBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAgIHN0cmluZyB0YWJsZS4gIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBeWCBvciBcYyBub3RhdGlvbiBhcmUKKyAgICAgICBzdG9yZWQgIGluIHRoZWlyIGludGVycHJldGVkIGZvcm0sIG5vdCB0aGUgcHJpbnRpbmcgcmVwcmUtCisgICAgICAgc2VudGF0aW9uLiAgUGFkZGluZyBpbmZvcm1hdGlvbiAkJmx0O25uJmd0OyBhbmQgcGFyYW1ldGVyIGluZm9yLQorICAgICAgIG1hdGlvbiAleCBhcmUgc3RvcmVkIGludGFjdCBpbiB1bmludGVycHJldGVkIGZvcm0uCisKKyAgICAgICBUaGUgIGZpbmFsICBzZWN0aW9uICBpcyB0aGUgc3RyaW5nIHRhYmxlLiAgSXQgY29udGFpbnMgYWxsCisgICAgICAgdGhlIHZhbHVlcyBvZiBzdHJpbmcgY2FwYWJpbGl0aWVzIHJlZmVyZW5jZWQgaW4gdGhlIHN0cmluZworICAgICAgIHNlY3Rpb24uICBFYWNoIHN0cmluZyBpcyBudWxsIHRlcm1pbmF0ZWQuCisKKyAgIDxTVFJPTkc+RVhURU5ERUQ8L1NUUk9ORz4gPFNUUk9ORz5TVE9SQUdFPC9TVFJPTkc+IDxTVFJPTkc+Rk9STUFUPC9TVFJPTkc+CisgICAgICAgVGhlICBwcmV2aW91cyAgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGNvbnZlbnRpb25hbCB0ZXJtaW5mbworICAgICAgIGJpbmFyeSBmb3JtYXQuICBXaXRoIHNvbWUgbWlub3IgdmFyaWF0aW9ucyBvZiB0aGUgIG9mZnNldHMKKyAgICAgICAoc2VlICBQT1JUQUJJTElUWSksICB0aGUgc2FtZSBiaW5hcnkgZm9ybWF0IGlzIHVzZWQgaW4gYWxsCisgICAgICAgbW9kZXJuIFVOSVggc3lzdGVtcy4gIEVhY2ggc3lzdGVtIHVzZXMgYSBwcmVkZWZpbmVkIHNldCBvZgorICAgICAgIGJvb2xlYW4sIG51bWJlciBvciBzdHJpbmcgY2FwYWJpbGl0aWVzLgorCisgICAgICAgVGhlICBuY3Vyc2VzICBsaWJyYXJpZXMgIGFuZCBhcHBsaWNhdGlvbnMgc3VwcG9ydCBleHRlbmRlZAorICAgICAgIHRlcm1pbmZvIGJpbmFyeSBmb3JtYXQsIGFsbG93aW5nIHVzZXJzIHRvIGRlZmluZSBjYXBhYmlsaS0KKyAgICAgICB0aWVzICB3aGljaCBhcmUgbG9hZGVkIGF0IHJ1bnRpbWUuICBUaGlzIGV4dGVuc2lvbiBpcyBtYWRlCisgICAgICAgcG9zc2libGUgYnkgdXNpbmcgdGhlIGZhY3QgdGhhdCB0aGUgb3RoZXIgIGltcGxlbWVudGF0aW9ucworICAgICAgIHN0b3AgIHJlYWRpbmcgdGhlIHRlcm1pbmZvIGRhdGEgd2hlbiB0aGV5IGhhdmUgcmVhY2hlZCB0aGUKKyAgICAgICBlbmQgb2YgdGhlIHNpemUgZ2l2ZW4gaW4gdGhlIGhlYWRlci4gIG5jdXJzZXMgIGNoZWNrcyAgdGhlCisgICAgICAgc2l6ZSwgIGFuZCAgaWYgaXQgZXhjZWVkcyB0aGF0IGR1ZSB0byB0aGUgcHJlZGVmaW5lZCBkYXRhLAorICAgICAgIGNvbnRpbnVlcyB0byBwYXJzZSBhY2NvcmRpbmcgdG8gaXRzIG93biBzY2hlbWUuCisKKyAgICAgICBGaXJzdCwgaXQgcmVhZHMgdGhlIGV4dGVuZGVkIGhlYWRlciAoNSBzaG9ydCBpbnRlZ2Vycyk6CisKKyAgICAgICAgICAgICgxKSAgY291bnQgb2YgZXh0ZW5kZWQgYm9vbGVhbiBjYXBhYmlsaXRpZXMKKworICAgICAgICAgICAgKDIpICBjb3VudCBvZiBleHRlbmRlZCBudW1lcmljIGNhcGFiaWxpdGllcworCisgICAgICAgICAgICAoMykgIGNvdW50IG9mIGV4dGVuZGVkIHN0cmluZyBjYXBhYmlsaXRpZXMKKworICAgICAgICAgICAgKDQpICBzaXplIG9mIHRoZSBleHRlbmRlZCBzdHJpbmcgdGFibGUgaW4gYnl0ZXMuCisKKyAgICAgICAgICAgICg1KSAgbGFzdCBvZmZzZXQgb2YgIHRoZSAgZXh0ZW5kZWQgIHN0cmluZyAgdGFibGUgIGluCisgICAgICAgICAgICAgICAgIGJ5dGVzLgorCisgICAgICAgVXNpbmcgIHRoZSAgY291bnRzIGFuZCBzaXplcywgbmN1cnNlcyBhbGxvY2F0ZXMgYXJyYXlzIGFuZAorICAgICAgIHJlYWRzIGRhdGEgZm9yIHRoZSBleHRlbmRlZCBjYXBhYmlsdGllcyBpbiB0aGUgc2FtZSAgb3JkZXIKKyAgICAgICBhcyB0aGUgaGVhZGVyIGluZm9ybWF0aW9uLgorCisgICAgICAgVGhlIGV4dGVuZGVkIHN0cmluZyB0YWJsZSBjb250YWlucyB2YWx1ZXMgZm9yIHN0cmluZyBjYXBhLQorICAgICAgIGJpbGl0aWVzLiAgQWZ0ZXIgdGhlIGVuZCBvZiB0aGVzZSB2YWx1ZXMsIGl0IGNvbnRhaW5zICB0aGUKKyAgICAgICBuYW1lcyAgZm9yICBlYWNoICBvZiAgdGhlICBleHRlbmRlZCBjYXBhYmlsaXRpZXMgaW4gb3JkZXIsCisgICAgICAgZS5nLiwgYm9vbGVhbnMsIHRoZW4gbnVtYmVycyBhbmQgZmluYWxseSBzdHJpbmdzLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgPEVNPnNldHVwdGVybTwvRU0+IHRvIGV4cGVjdCBhIGRpZmZlci0KKyAgICAgICBlbnQgIHNldCAgb2YgY2FwYWJpbGl0aWVzIHRoYW4gYXJlIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlCisgICAgICAgZmlsZS4gIEVpdGhlciB0aGUgZGF0YWJhc2UgbWF5ICBoYXZlICBiZWVuICB1cGRhdGVkICBzaW5jZQorICAgICAgIDxFTT5zZXR1cHRlcm08L0VNPiBoYXMgYmVlbiByZWNvbXBpbGVkIChyZXN1bHRpbmcgaW4gZXh0cmEgdW5yZWNvZy0KKyAgICAgICBuaXplZCBlbnRyaWVzIGluIHRoZSBmaWxlKSBvciB0aGUgcHJvZ3JhbSAgbWF5ICBoYXZlICBiZWVuCisgICAgICAgcmVjb21waWxlZCAgbW9yZSAgcmVjZW50bHkgIHRoYW4gIHRoZSBkYXRhYmFzZSB3YXMgdXBkYXRlZAorICAgICAgIChyZXN1bHRpbmcgaW4gbWlzc2luZyAgZW50cmllcykuICAgVGhlICByb3V0aW5lICA8RU0+c2V0dXB0ZXJtPC9FTT4KKyAgICAgICBtdXN0ICBiZSBwcmVwYXJlZCBmb3IgYm90aCBwb3NzaWJpbGl0aWVzIC0gdGhpcyBpcyB3aHkgdGhlCisgICAgICAgbnVtYmVycyBhbmQgc2l6ZXMgYXJlIGluY2x1ZGVkLiAgIEFsc28sICBuZXcgIGNhcGFiaWxpdGllcworICAgICAgIG11c3QgIGFsd2F5cyAgYmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdHMgb2YgYm9vbGVhbiwKKyAgICAgICBudW1iZXIsIGFuZCBzdHJpbmcgY2FwYWJpbGl0aWVzLgorCisgICAgICAgRGVzcGl0ZSB0aGUgY29uc2lzdGVudCB1c2Ugb2YgIGxpdHRsZS1lbmRpYW4gIGZvciAgbnVtYmVycworICAgICAgIGFuZCAgdGhlICBvdGhlcndpc2Ugc2VsZi1kZXNjcmliaW5nIGZvcm1hdCwgaXQgaXMgbm90IHdpc2UKKyAgICAgICB0byBjb3VudCBvbiBwb3J0YWJpbGl0eSBvZiBiaW5hcnkgdGVybWluZm8gZW50cmllcyBiZXR3ZWVuCisgICAgICAgY29tbWVyY2lhbCAgVU5JWCAgdmVyc2lvbnMuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZXJlIGFyZQorICAgICAgIGF0IGxlYXN0IHRocmVlIHZlcnNpb25zIG9mIHRlcm1pbmZvICh1bmRlciBIUC1VWCwgQUlYLCBhbmQKKyAgICAgICBPU0YvMSkgIHdoaWNoICBkaXZlcmdlZCBmcm9tIFN5c3RlbSBWIHRlcm1pbmZvIGFmdGVyIFNWcjEsCisgICAgICAgYW5kIGhhdmUgYWRkZWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcyB0byB0aGUgc3RyaW5nICB0YWJsZQorICAgICAgIHRoYXQgIChpbiB0aGUgYmluYXJ5IGZvcm1hdCkgY29sbGlkZSB3aXRoIFN5c3RlbSBWIGFuZCBYU0kKKyAgICAgICBDdXJzZXMgZXh0ZW5zaW9ucy4gIFNlZSA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+IGZvciAgZGV0YWlsZWQgIGRpc2N1cy0KKyAgICAgICBzaW9uIG9mIHRlcm1pbmZvIHNvdXJjZSBjb21wYXRpYmlsaXR5IGlzc3Vlcy4KKworCis8L1BSRT4KKzxIMj5FWEFNUExFPC9IMj48UFJFPgorICAgICAgIEFzICBhbiAgZXhhbXBsZSwgaGVyZSBpcyBhIGhleCBkdW1wIG9mIHRoZSBkZXNjcmlwdGlvbiBmb3IKKyAgICAgICB0aGUgTGVhci1TaWVnbGVyIEFETS0zLCBhICBwb3B1bGFyICB0aG91Z2ggIHJhdGhlciAgc3R1cGlkCisgICAgICAgZWFybHkgdGVybWluYWw6CisKKyAgICAgICBhZG0zYXxsc2kgYWRtM2EsCisgICAgICAgICAgICAgICBhbSwKKyAgICAgICAgICAgICAgIGNvbHMjODAsIGxpbmVzIzI0LAorICAgICAgICAgICAgICAgYmVsPV5HLCBjbGVhcj0gMzIkJmx0OzEmZ3Q7LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKyAgICAgICAgICAgICAgIGN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisgICAgICAgICAgICAgICBob21lPV5eLCBpbmQ9XkosCisKKyAgICAgICAwMDAwICAxYSAwMSAxMCAwMCAwMiAwMCAwMyAwMCAgODIgMDAgMzEgMDAgNjEgNjQgNmQgMzMgIC4uLi4uLi4uIC4uMS5hZG0zCisgICAgICAgMDAxMCAgNjEgN2MgNmMgNzMgNjkgMjAgNjEgNjQgIDZkIDMzIDYxIDAwIDAwIDAxIDUwIDAwICBhfGxzaSBhZCBtM2EuLi5QLgorICAgICAgIDAwMjAgIGZmIGZmIDE4IDAwIGZmIGZmIDAwIDAwICAwMiAwMCBmZiBmZiBmZiBmZiAwNCAwMCAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMDMwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgMGEgMDAgMjUgMDAgMjcgMDAgZmYgZmYgIC4uLi4uLi4uIC4uJS4nLi4uCisgICAgICAgMDA0MCAgMjkgMDAgZmYgZmYgZmYgZmYgMmIgMDAgIGZmIGZmIDJkIDAwIGZmIGZmIGZmIGZmICApLi4uLi4rLiAuLi0uLi4uLgorICAgICAgIDAwNTAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMDYwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDA3MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwODAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMDkwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDBhMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwYjAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMGMwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDBkMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwZTAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMGYwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDEwMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAxMTAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMTIwICBmZiBmZiBmZiBmZiBmZiBmZiAyZiAwMCAgMDcgMDAgMGQgMDAgMWEgMjQgM2MgMzEgIC4uLi4uLi8uIC4uLi4uJCZsdDsxCisgICAgICAgMDEzMCAgM2UgMDAgMWIgM2QgMjUgNzAgMzEgMjUgIDdiIDMzIDMyIDdkIDI1IDJiIDI1IDYzICAmZ3Q7Li49JXAxJSB7MzJ9JSslYworICAgICAgIDAxNDAgIDI1IDcwIDMyIDI1IDdiIDMzIDMyIDdkICAyNSAyYiAyNSA2MyAwMCAwYSAwMCAxZSAgJXAyJXszMn0gJSslYy4uLi4KKyAgICAgICAwMTUwICAwMCAwOCAwMCAwYyAwMCAwYiAwMCAwYSAgMDAgICAgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uIC4KKworCisKKzwvUFJFPgorPEgyPkxJTUlUUzwvSDI+PFBSRT4KKyAgICAgICBTb21lICBsaW1pdGF0aW9uczogIHRvdGFsICBjb21waWxlZCAgZW50cmllcyBjYW5ub3QgZXhjZWVkCisgICAgICAgNDA5NiBieXRlcy4gIFRoZSBuYW1lIGZpZWxkIGNhbm5vdCBleGNlZWQgMTI4IGJ5dGVzLgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIC91c3Ivc2hhcmUvdGVybWluZm8vKi8qICBjb21waWxlZCB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGEKKyAgICAgICBiYXNlCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIEUuIERpY2tleQorICAgICAgIGV4dGVuZGVkIHRlcm1pbmZvIGZvcm1hdCBmb3IgbmN1cnNlcyA1LjAKKyAgICAgICBoYXNoZWQgZGF0YWJhc2Ugc3VwcG9ydCBmb3IgbmN1cnNlcyA1LjYKKworICAgICAgIEVyaWMgUy4gUmF5bW9uZAorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybS41Lmh0bWwiPnRlcm0oNSk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21hbi90ZXJtLjcuaHRtbCBiL2RvYy9odG1sL21hbi90ZXJtLjcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2VhNjMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL3Rlcm0uNy5odG1sCkBAIC0wLDAgKzEsMjUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IHRlcm0uNyx2IDEuMTggMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT50ZXJtIDc8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT50ZXJtIDc8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9InRlcm0uNy5odG1sIj50ZXJtKDcpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybS43Lmh0bWwiPnRlcm0oNyk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgdGVybSAtIGNvbnZlbnRpb25zIGZvciBuYW1pbmcgdGVybWluYWwgdHlwZXMKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGVudmlyb25tZW50IHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPiBzaG91bGQgbm9ybWFsbHkgY29udGFpbiB0aGUKKyAgICAgICB0eXBlIG5hbWUgb2YgdGhlIHRlcm1pbmFsLCBjb25zb2xlIG9yIGRpc3BsYXktZGV2aWNlICB0eXBlCisgICAgICAgeW91ICBhcmUgIHVzaW5nLiAgIFRoaXMgIGluZm9ybWF0aW9uICBpcyAgY3JpdGljYWwgZm9yIGFsbAorICAgICAgIHNjcmVlbi1vcmllbnRlZCAgcHJvZ3JhbXMsICBpbmNsdWRpbmcgIHlvdXIgICBlZGl0b3IgICBhbmQKKyAgICAgICBtYWlsZXIuCisKKyAgICAgICBBICBkZWZhdWx0ICA8U1RST05HPlRFUk08L1NUUk9ORz4gIHZhbHVlIHdpbGwgYmUgc2V0IG9uIGEgcGVyLWxpbmUgYmFzaXMgYnkKKyAgICAgICBlaXRoZXIgPFNUUk9ORz4vZXRjL2luaXR0YWI8L1NUUk9ORz4gKExpbnV4IGFuZCAgU3lzdGVtLVYtbGlrZSAgVU5JWGVzKSAgb3IKKyAgICAgICA8U1RST05HPi9ldGMvdHR5czwvU1RST05HPiAgKEJTRCAgVU5JWGVzKS4gIFRoaXMgd2lsbCBuZWFybHkgYWx3YXlzIHN1ZmZpY2UKKyAgICAgICBmb3Igd29ya3N0YXRpb24gYW5kIG1pY3JvY29tcHV0ZXIgY29uc29sZXMuCisKKyAgICAgICBJZiB5b3UgdXNlIGEgZGlhbHVwIGxpbmUsIHRoZSB0eXBlIG9mIGRldmljZSAgYXR0YWNoZWQgIHRvCisgICAgICAgaXQgIG1heSB2YXJ5LiAgT2xkZXIgVU5JWCBzeXN0ZW1zIHByZS1zZXQgYSB2ZXJ5IGR1bWIgdGVyLQorICAgICAgIG1pbmFsIHR5cGUgbGlrZSBgZHVtYicgb3IgYGRpYWx1cCcgb24gZGlhbHVwIGxpbmVzLiAgTmV3ZXIKKyAgICAgICBvbmVzIG1heSBwcmUtc2V0IGB2dDEwMCcsIHJlZmxlY3RpbmcgdGhlIHByZXZhbGVuY2Ugb2YgREVDCisgICAgICAgVlQxMDAtY29tcGF0aWJsZSB0ZXJtaW5hbHMgIGFuZCAgcGVyc29uYWwtY29tcHV0ZXIgIGVtdWxhLQorICAgICAgIHRvcnMuCisKKyAgICAgICBNb2Rlcm4gIHRlbG5ldHMgIHBhc3MgIHlvdXIgPFNUUk9ORz5URVJNPC9TVFJPTkc+IGVudmlyb25tZW50IHZhcmlhYmxlIGZyb20KKyAgICAgICB0aGUgbG9jYWwgc2lkZSB0byB0aGUgcmVtb3RlIG9uZS4gIFRoZXJlIGNhbiAgYmUgIHByb2JsZW1zCisgICAgICAgaWYgIHRoZSAgcmVtb3RlIHRlcm1pbmZvIG9yIHRlcm1jYXAgZW50cnkgZm9yIHlvdXIgdHlwZSBpcworICAgICAgIG5vdCBjb21wYXRpYmxlIHdpdGggeW91cnMsIGJ1dCB0aGlzIHNpdHVhdGlvbiBpcyByYXJlICBhbmQKKyAgICAgICBjYW4gIGFsbW9zdCAgYWx3YXlzICBiZSAgYXZvaWRlZCAgYnkgIGV4cGxpY2l0bHkgZXhwb3J0aW5nCisgICAgICAgYHZ0MTAwJyAoYXNzdW1pbmcgeW91IGFyZSBpbiBmYWN0IHVzaW5nICBhICBWVDEwMC1zdXBlcnNldAorICAgICAgIGNvbnNvbGUsIHRlcm1pbmFsLCBvciB0ZXJtaW5hbCBlbXVsYXRvci4pCisKKyAgICAgICBJbiBhbnkgY2FzZSwgeW91IGFyZSBmcmVlIHRvIG92ZXJyaWRlIHRoZSBzeXN0ZW0gPFNUUk9ORz5URVJNPC9TVFJPTkc+IHNldC0KKyAgICAgICB0aW5nIHRvIHlvdXIgdGFzdGUgaW4geW91ciAgc2hlbGwgIHByb2ZpbGUuICAgVGhlICA8U1RST05HPjxBIEhSRUY9InRzZXQuMS5odG1sIj50c2V0KDEpPC9BPjwvU1RST05HPgorICAgICAgIHV0aWxpdHkgIG1heSAgYmUgIG9mICBhc3Npc3RhbmNlOyB5b3UgY2FuIGdpdmUgaXQgYSBzZXQgb2YKKyAgICAgICBydWxlcyBmb3IgZGVkdWNpbmcgb3IgcmVxdWVzdGluZyBhIHRlcm1pbmFsIHR5cGUgYmFzZWQgIG9uCisgICAgICAgdGhlIHR0eSBkZXZpY2UgYW5kIGJhdWQgcmF0ZS4KKworICAgICAgIFNldHRpbmcgeW91ciBvd24gPFNUUk9ORz5URVJNPC9TVFJPTkc+IHZhbHVlIG1heSBhbHNvIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZQorICAgICAgIGNyZWF0ZWQgYSBjdXN0b20gIGVudHJ5ICBpbmNvcnBvcmF0aW5nICBvcHRpb25zICAoc3VjaCAgYXMKKyAgICAgICB2aXN1YWwgIGJlbGwgIG9yIHJldmVyc2UtdmlkZW8pIHdoaWNoIHlvdSB3aXNoIHRvIG92ZXJyaWRlCisgICAgICAgdGhlIHN5c3RlbSBkZWZhdWx0IHR5cGUgZm9yIHlvdXIgbGluZS4KKworICAgICAgIFRlcm1pbmFsIHR5cGUgZGVzY3JpcHRpb25zIGFyZSBzdG9yZWQgYXMgZmlsZXMgb2YgY2FwYWJpbC0KKyAgICAgICBpdHkgZGF0YSB1bmRlcm5lYXRoIC91c3Ivc2hhcmUvdGVybWluZm8uICBUbyBicm93c2UgYSBsaXN0CisgICAgICAgb2YgYWxsIHRlcm1pbmFsIG5hbWVzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbSwgZG8KKworICAgICAgICAgICAgdG9lIHwgbW9yZQorCisgICAgICAgZnJvbSB5b3VyIHNoZWxsLiAgVGhlc2UgY2FwYWJpbGl0eSBmaWxlcyBhcmUgaW4gIGEgIGJpbmFyeQorICAgICAgIGZvcm1hdCBvcHRpbWl6ZWQgZm9yIHJldHJpZXZhbCBzcGVlZCAodW5saWtlIHRoZSBvbGQgdGV4dC0KKyAgICAgICBiYXNlZCA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gZm9ybWF0IHRoZXkgcmVwbGFjZSk7IHRvIGV4YW1pbmUgIGFuICBlbnRyeSwKKyAgICAgICB5b3UgIG11c3QgIHVzZSB0aGUgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiBjb21tYW5kLiAgSW52b2tlIGl0IGFzIGZvbC0KKyAgICAgICBsb3dzOgorCisgICAgICAgICAgICBpbmZvY21wIDxFTT5lbnRyeS1uYW1lPC9FTT4KKworICAgICAgIHdoZXJlIDxFTT5lbnRyeS1uYW1lPC9FTT4gaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUgeW91IHdpc2ggdG8gZXhhbS0KKyAgICAgICBpbmUgIChhbmQgdGhlIG5hbWUgb2YgaXRzIGNhcGFiaWxpdHkgZmlsZSB0aGUgc3ViZGlyZWN0b3J5CisgICAgICAgb2YgL3Vzci9zaGFyZS90ZXJtaW5mbyBuYW1lZCBmb3IgaXRzIGZpcnN0IGxldHRlcikuICAgVGhpcworICAgICAgIGNvbW1hbmQgIGR1bXBzICBhICBjYXBhYmlsaXR5ICBmaWxlICBpbiAgdGhlICB0ZXh0ICBmb3JtYXQKKyAgICAgICBkZXNjcmliZWQgYnkgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPi4KKworICAgICAgIFRoZSBmaXJzdCBsaW5lIG9mICBhICA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+ICBkZXNjcmlwdGlvbiAgZ2l2ZXMgIHRoZQorICAgICAgIG5hbWVzIGJ5IHdoaWNoIHRlcm1pbmZvIGtub3dzIGEgdGVybWluYWwsIHNlcGFyYXRlZCBieSBgfCcKKyAgICAgICAocGlwZS1iYXIpIGNoYXJhY3RlcnMgd2l0aCB0aGUgbGFzdCBuYW1lIGZpZWxkICB0ZXJtaW5hdGVkCisgICAgICAgYnkgIGEgIGNvbW1hLiAgIFRoZSBmaXJzdCBuYW1lIGZpZWxkIGlzIHRoZSB0eXBlJ3MgPEVNPnByaW1hcnk8L0VNPgorICAgICAgIDxFTT5uYW1lPC9FTT4sIGFuZCBpcyB0aGUgb25lIHRvIHVzZSB3aGVuIHNldHRpbmcgPFNUUk9ORz5URVJNPC9TVFJPTkc+LiAgIFRoZSAgbGFzdAorICAgICAgIG5hbWUgIGZpZWxkICAoaWYgIGRpc3RpbmN0ICBmcm9tICB0aGUgZmlyc3QpIGlzIGFjdHVhbGx5IGEKKyAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgdGVybWluYWwgdHlwZSAoaXQgbWF5ICBjb250YWluICBibGFua3M7CisgICAgICAgdGhlIG90aGVycyBtdXN0IGJlIHNpbmdsZSB3b3JkcykuICBOYW1lIGZpZWxkcyBiZXR3ZWVuIHRoZQorICAgICAgIGZpcnN0IGFuZCBsYXN0IChpZiBwcmVzZW50KSBhcmUgYWxpYXNlcyBmb3IgdGhlICB0ZXJtaW5hbCwKKyAgICAgICB1c3VhbGx5IGhpc3RvcmljYWwgbmFtZXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCisKKyAgICAgICBUaGVyZSBhcmUgc29tZSBjb252ZW50aW9ucyBmb3IgaG93IHRvIGNob29zZSB0ZXJtaW5hbCBwcmktCisgICAgICAgbWFyeSBuYW1lcyB0aGF0IGhlbHAga2VlcCAgdGhlbSAgaW5mb3JtYXRpdmUgIGFuZCAgdW5pcXVlLgorICAgICAgIEhlcmUgaXMgYSBzdGVwLWJ5LXN0ZXAgZ3VpZGUgdG8gbmFtaW5nIHRlcm1pbmFscyB0aGF0IGFsc28KKyAgICAgICBleHBsYWlucyBob3cgdG8gcGFyc2UgdGhlbToKKworICAgICAgIEZpcnN0LCBjaG9vc2UgYSByb290IG5hbWUuICBUaGUgcm9vdCAgd2lsbCAgY29uc2lzdCAgb2YgIGEKKyAgICAgICBsb3dlci1jYXNlICBsZXR0ZXIgZm9sbG93ZWQgYnkgdXAgdG8gc2V2ZW4gbG93ZXItY2FzZSBsZXQtCisgICAgICAgdGVycyBvciBkaWdpdHMuICBZb3UgbmVlZCB0byBhdm9pZCB1c2luZyBwdW5jdHVhdGlvbiBjaGFyLQorICAgICAgIGFjdGVycyAgaW4gIHJvb3QgIG5hbWVzLCAgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGFuZCBpbnRlci0KKyAgICAgICBwcmV0ZWQgYXMgZmlsZW5hbWVzIGFuZCBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgKHN1Y2ggYXMgICEsCisgICAgICAgJCwgICosID8sIGV0Yy4pIGVtYmVkZGVkIGluIHRoZW0gbWF5IGNhdXNlIG9kZCBhbmQgdW5oZWxwLQorICAgICAgIGZ1bCBiZWhhdmlvci4gIFRoZSBzbGFzaCAoLyksIG9yIGFueSBvdGhlciBjaGFyYWN0ZXIgIHRoYXQKKyAgICAgICBtYXkgIGJlICBpbnRlcnByZXRlZCBieSBhbnlvbmUncyBmaWxlIHN5c3RlbSAoXCwgJCwgWywgXSksCisgICAgICAgaXMgZXNwZWNpYWxseSBkYW5nZXJvdXMgKHRlcm1pbmZvIGlzIHBsYXRmb3JtLWluZGVwZW5kZW50LAorICAgICAgIGFuZCAgY2hvb3NpbmcgIG5hbWVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGNvdWxkIHNvbWVkYXkKKyAgICAgICBtYWtlIGxpZmUgZGlmZmljdWx0IGZvciB1c2VycyBvZiBhIGZ1dHVyZSBwb3J0KS4gIFRoZSAgZG90CisgICAgICAgKC4pICBjaGFyYWN0ZXIgIGlzICByZWxhdGl2ZWx5IHNhZmUgYXMgbG9uZyBhcyB0aGVyZSBpcyBhdAorICAgICAgIG1vc3Qgb25lIHBlciByb290IG5hbWU7IHNvbWUgaGlzdG9yaWNhbCB0ZXJtaW5mbyBuYW1lcyB1c2UKKyAgICAgICBpdC4KKworICAgICAgIFRoZSAgcm9vdCAgbmFtZSBmb3IgYSB0ZXJtaW5hbCBvciB3b3Jrc3RhdGlvbiBjb25zb2xlIHR5cGUKKyAgICAgICBzaG91bGQgYWxtb3N0IGFsd2F5cyBiZWdpbiB3aXRoIGEgdmVuZG9yIHByZWZpeCAgKHN1Y2ggIGFzCisgICAgICAgPFNUUk9ORz5ocDwvU1RST05HPiAgZm9yIEhld2xldHQtUGFja2FyZCwgPFNUUk9ORz53eTwvU1RST05HPiBmb3IgV3lzZSwgb3IgPFNUUk9ORz5hdHQ8L1NUUk9ORz4gZm9yIEFUJmFtcDtUIHRlci0KKyAgICAgICBtaW5hbHMpLCBvciBhIGNvbW1vbiBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBsaW5lICg8U1RST05HPnZ0PC9TVFJPTkc+IGZvciB0aGUKKyAgICAgICBWVCAgc2VyaWVzIG9mIHRlcm1pbmFscyBmcm9tIERFQywgb3IgPFNUUk9ORz5zdW48L1NUUk9ORz4gZm9yIFN1biBNaWNyb3N5cy0KKyAgICAgICB0ZW1zIHdvcmtzdGF0aW9uIGNvbnNvbGVzLCBvciA8U1RST05HPnJlZ2VudDwvU1RST05HPiBmb3IgdGhlICBBRERTICBSZWdlbnQKKyAgICAgICBzZXJpZXMuICAgWW91ICBjYW4gbGlzdCB0aGUgdGVybWluZm8gdHJlZSB0byBzZWUgd2hhdCBwcmUtCisgICAgICAgZml4ZXMgYXJlIGFscmVhZHkgaW4gY29tbW9uIHVzZS4gICBUaGUgIHJvb3QgIG5hbWUgIHByZWZpeAorICAgICAgIHNob3VsZCAgYmUgIGZvbGxvd2VkICB3aGVuICBhcHByb3ByaWF0ZSBieSBhIG1vZGVsIG51bWJlcjsKKyAgICAgICB0aHVzIDxTVFJPTkc+dnQxMDA8L1NUUk9ORz4sIDxTVFJPTkc+aHAyNjIxPC9TVFJPTkc+LCA8U1RST05HPnd5NTA8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgcm9vdCBuYW1lIGZvciBhIFBDLVVuaXggY29uc29sZSB0eXBlIHNob3VsZCBiZSB0aGUgIE9TCisgICAgICAgbmFtZSwgIGkuZS4gIDxTVFJPTkc+bGludXg8L1NUUk9ORz4sIDxTVFJPTkc+YnNkb3M8L1NUUk9ORz4sIDxTVFJPTkc+ZnJlZWJzZDwvU1RST05HPiwgPFNUUk9ORz5uZXRic2Q8L1NUUk9ORz4uICBJdCBzaG91bGQgPEVNPm5vdDwvRU0+CisgICAgICAgYmUgPFNUUk9ORz5jb25zb2xlPC9TVFJPTkc+IG9yIGFueSBvdGhlciBnZW5lcmljIHRoYXQgbWlnaHQgY2F1c2UgY29uZnVzaW9uCisgICAgICAgaW4gIGEgIG11bHRpLXBsYXRmb3JtIGVudmlyb25tZW50ISAgSWYgYSBtb2RlbCBudW1iZXIgZm9sLQorICAgICAgIGxvd3MsIGl0IHNob3VsZCBpbmRpY2F0ZSBlaXRoZXIgdGhlIE9TICByZWxlYXNlICBsZXZlbCAgb3IKKyAgICAgICB0aGUgY29uc29sZSBkcml2ZXIgcmVsZWFzZSBsZXZlbC4KKworICAgICAgIFRoZSAgcm9vdCAgbmFtZSAgZm9yIGEgdGVybWluYWwgZW11bGF0b3IgKGFzc3VtaW5nIGl0IGRvZXMKKyAgICAgICBub3QgZml0IG9uZSBvZiB0aGUgc3RhbmRhcmQgQU5TSSBvciB2dDEwMCB0eXBlcykgc2hvdWxkIGJlCisgICAgICAgdGhlIHByb2dyYW0gbmFtZSBvciBhIHJlYWRpbHkgcmVjb2duaXphYmxlIGFiYnJldmlhdGlvbiBvZgorICAgICAgIGl0IChpLmUuIDxTVFJPTkc+dmVyc2F0ZXJtPC9TVFJPTkc+LCA8U1RST05HPmN0cm08L1NUUk9ORz4pLgorCisgICAgICAgRm9sbG93aW5nIHRoZSByb290IG5hbWUsIHlvdSBtYXkgYWRkIGFueSByZWFzb25hYmxlIG51bWJlcgorICAgICAgIG9mIGh5cGhlbi1zZXBhcmF0ZWQgZmVhdHVyZSBzdWZmaXhlcy4KKworICAgICAgIDJwICAgSGFzIHR3byBwYWdlcyBvZiBtZW1vcnkuICBMaWtld2lzZSA0cCwgOHAsIGV0Yy4KKworICAgICAgIG1jICAgTWFnaWMtY29va2llLiAgIFNvbWUgIHRlcm1pbmFscyAobm90YWJseSBvbGRlciBXeXNlcykKKyAgICAgICAgICAgIGNhbiBvbmx5IHN1cHBvcnQgb25lIGF0dHJpYnV0ZSAgd2l0aG91dCAgbWFnaWMtY29va2llCisgICAgICAgICAgICBsb3NzYWdlLiAgIFRoZWlyICBiYXNlICBlbnRyeSAgaXMgdXN1YWxseSBwYWlyZWQgd2l0aAorICAgICAgICAgICAgYW5vdGhlciB0aGF0IGhhcyB0aGlzIHN1ZmZpeCBhbmQgdXNlcyAgbWFnaWMgIGNvb2tpZXMKKyAgICAgICAgICAgIHRvIHN1cHBvcnQgbXVsdGlwbGUgYXR0cmlidXRlcy4KKworICAgICAgIC1hbSAgRW5hYmxlIGF1dG8tbWFyZ2luIChyaWdodC1tYXJnaW4gd3JhcGFyb3VuZCkuCisKKyAgICAgICAtbSAgIE1vbm8gbW9kZSAtIHN1cHByZXNzIGNvbG9yIHN1cHBvcnQuCisKKyAgICAgICAtbmEgIE5vICBhcnJvdyBrZXlzIC0gdGVybWNhcCBpZ25vcmVzIGFycm93IGtleXMgd2hpY2ggYXJlCisgICAgICAgICAgICBhY3R1YWxseSB0aGVyZSBvbiB0aGUgdGVybWluYWwsIHNvIHRoZSB1c2VyICBjYW4gIHVzZQorICAgICAgICAgICAgdGhlIGFycm93IGtleXMgbG9jYWxseS4KKworICAgICAgIC1uYW0gTm8gYXV0by1tYXJnaW4gLSBzdXBwcmVzcyBhbSBjYXBhYmlsaXR5LgorCisgICAgICAgLW5sICBObyBsYWJlbHMgLSBzdXBwcmVzcyBzb2Z0IGxhYmVscy4KKworICAgICAgIC1uc2wgTm8gc3RhdHVzIGxpbmUgLSBzdXBwcmVzcyBzdGF0dXMgbGluZS4KKworICAgICAgIC1wcCAgSGFzIGEgcHJpbnRlciBwb3J0IHdoaWNoIGlzIHVzZWQuCisKKyAgICAgICAtcnYgIFRlcm1pbmFsIGluIHJldmVyc2UgdmlkZW8gbW9kZSAoYmxhY2sgb24gd2hpdGUpLgorCisgICAgICAgLXMgICBFbmFibGUgc3RhdHVzIGxpbmUuCisKKyAgICAgICAtdmIgIFVzZSB2aXNpYmxlIGJlbGwgKGZsYXNoKSByYXRoZXIgdGhhbiBiZWVwLgorCisgICAgICAgLXcgICBXaWRlOyB0ZXJtaW5hbCBpcyBpbiAxMzIgY29sdW1uIG1vZGUuCisKKyAgICAgICBDb252ZW50aW9uYWxseSwgICBpZiAgeW91ciAgdGVybWluYWwgIHR5cGUgIGlzICBhICB2YXJpYW50CisgICAgICAgaW50ZW5kZWQgdG8gc3BlY2lmeSBhIGxpbmUgaGVpZ2h0LCB0aGF0IHN1ZmZpeCAgc2hvdWxkICBnbworICAgICAgIGZpcnN0LiAgU28sIGZvciBhIGh5cG90aGV0aWNhbCBGdUJhckNvIG1vZGVsIDIzMTcgdGVybWluYWwKKyAgICAgICBpbiAzMC1saW5lIG1vZGUgd2l0aCByZXZlcnNlIHZpZGVvLCAgYmVzdCAgZm9ybSAgd291bGQgIGJlCisgICAgICAgPFNUUk9ORz5mdWJhci0zMC1ydjwvU1RST05HPiAocmF0aGVyIHRoYW4sIHNheSwgYGZ1YmFyLXJ2LTMwJykuCisKKyAgICAgICBUZXJtaW5hbCB0eXBlcyB0aGF0IGFyZSB3cml0dGVuIG5vdCBhcyBzdGFuZGFsb25lIGVudHJpZXMsCisgICAgICAgYnV0IHJhdGhlciBhcyBjb21wb25lbnRzIHRvIGJlIHBsdWdnZWQgaW50byBvdGhlciAgZW50cmllcworICAgICAgIHZpYSAgPFNUUk9ORz51c2U8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLCBhcmUgZGlzdGluZ3Vpc2hlZCBieSB1c2luZyBlbWJlZGRlZAorICAgICAgIHBsdXMgc2lnbnMgcmF0aGVyIHRoYW4gZGFzaGVzLgorCisgICAgICAgQ29tbWFuZHMgd2hpY2ggdXNlIGEgIHRlcm1pbmFsICB0eXBlICB0byAgY29udHJvbCAgZGlzcGxheQorICAgICAgIG9mdGVuICBhY2NlcHQgIGEgIC1UICBvcHRpb24gIHRoYXQgYWNjZXB0cyBhIHRlcm1pbmFsIG5hbWUKKyAgICAgICBhcmd1bWVudC4gIFN1Y2ggcHJvZ3JhbXMgc2hvdWxkICBmYWxsICBiYWNrICBvbiAgdGhlICA8U1RST05HPlRFUk08L1NUUk9ORz4KKyAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIG5vIC1UIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgRm9yICBtYXhpbXVtICBjb21wYXRpYmlsaXR5ICB3aXRoICBvbGRlciAgU3lzdGVtIFYgVU5JWGVzLAorICAgICAgIG5hbWVzIGFuZCBhbGlhc2VzIHNob3VsZCBiZSB1bmlxdWUgIHdpdGhpbiAgdGhlICBmaXJzdCAgMTQKKyAgICAgICBjaGFyYWN0ZXJzLgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIC91c3Ivc2hhcmUvdGVybWluZm8vPy8qCisgICAgICAgICAgICBjb21waWxlZCB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGEgYmFzZQorCisgICAgICAgL2V0Yy9pbml0dGFiCisgICAgICAgICAgICB0dHkgbGluZSBpbml0aWFsaXphdGlvbiAoQVQmYW1wO1QtbGlrZSBVTklYZXMpCisKKyAgICAgICAvZXRjL3R0eXMKKyAgICAgICAgICAgIHR0eSBsaW5lIGluaXRpYWxpemF0aW9uIChCU0QtbGlrZSBVTklYZXMpCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm0uNS5odG1sIj50ZXJtKDUpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRlcm0uNy5odG1sIj50ZXJtKDcpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vdGVybWluZm8uNS5odG1sIGIvZG9jL2h0bWwvbWFuL3Rlcm1pbmZvLjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjg0ZDAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL3Rlcm1pbmZvLjUuaHRtbApAQCAtMCwwICsxLDIzNzQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKiBETyBOT1QgRURJVCBUSElTIEZJTEUgQlkgSEFORCEKKyAgKiBJdCBpcyBnZW5lcmF0ZWQgZnJvbSB0ZXJtaW5mby5oZWFkLCBDYXBzLCBhbmQgdGVybWluZm8udGFpbC4KKyAgKiBOb3RlOiB0aGlzIG11c3QgYmUgcnVuIHRocm91Z2ggdGJsIGJlZm9yZSBucm9mZi4KKyAgKiBUaGUgbWFnaWMgY29va2llIG9uIHRoZSBmaXJzdCBsaW5lIHRyaWdnZXJzIHRoaXMgdW5kZXIgc29tZSBtYW4gcHJvZ3JhbXMuCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiB0ZXJtaW5mby5oZWFkLHYgMS4xNiAyMDA3LzAzLzA0IDAwOjA5OjQ2IHRvbSBFeHAgQAorICAqIEhlYWQgb2YgdGVybWluZm8gbWFuIHBhZ2UgZW5kcyBoZXJlCisgICogQElkOiB0ZXJtaW5mby50YWlsLHYgMS40OSAyMDA4LzAyLzE2IDIwOjU3OjQzIHRvbSBFeHAgQAorICAqIEJlZ2lubmluZyBvZiB0ZXJtaW5mby50YWlsIGZpbGUKKyAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBuY3Vyc2VzLgorICAqIFNlZSAidGVybWluZm8uaGVhZCIgZm9yIGNvcHlyaWdodC4KKyAgKi5pbiAtMgorICAqLmluICsyCisgICouaW4gLTIKKyAgKi5pbiArMgorICAqLlRICistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+dGVybWluZm8gNSAgIEZpbGUgRm9ybWF0czwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPnRlcm1pbmZvIDUgICBGaWxlIEZvcm1hdHM8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgIEZpbGUgRm9ybWF0cyAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICB0ZXJtaW5mbyAtIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YSBiYXNlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mby8qLyoKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8RU0+VGVybWluZm88L0VNPiAgaXMgIGEgIGRhdGEgIGJhc2UgIGRlc2NyaWJpbmcgdGVybWluYWxzLCB1c2VkIGJ5CisgICAgICAgc2NyZWVuLW9yaWVudGVkIHByb2dyYW1zICBzdWNoICBhcyAgPFNUUk9ORz48QSBIUkVGPSJudmkuMS5odG1sIj5udmkoMSk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJyb2d1ZS4xLmh0bWwiPnJvZ3VlKDEpPC9BPjwvU1RST05HPiAgYW5kCisgICAgICAgbGlicmFyaWVzICBzdWNoICBhcyA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uICA8RU0+VGVybWluZm88L0VNPiBkZXNjcmliZXMgdGVybWktCisgICAgICAgbmFscyBieSBnaXZpbmcgYSBzZXQgb2YgY2FwYWJpbGl0aWVzIHdoaWNoIHRoZXkgIGhhdmUsICBieQorICAgICAgIHNwZWNpZnlpbmcgaG93IHRvIHBlcmZvcm0gc2NyZWVuIG9wZXJhdGlvbnMsIGFuZCBieSBzcGVjaS0KKyAgICAgICBmeWluZyBwYWRkaW5nIHJlcXVpcmVtZW50cyBhbmQgIGluaXRpYWxpemF0aW9uICBzZXF1ZW5jZXMuCisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKyAgICAgICBFbnRyaWVzIGluIDxFTT50ZXJtaW5mbzwvRU0+IGNvbnNpc3Qgb2YgYSBzZXF1ZW5jZSBvZiBgLCcgc2VwYXJhdGVkCisgICAgICAgZmllbGRzIChlbWJlZGRlZCBjb21tYXMgbWF5IGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCBvcgorICAgICAgIG5vdGF0ZWQgIGFzIFwwNTQpLiAgV2hpdGUgc3BhY2UgYWZ0ZXIgdGhlIGAsJyBzZXBhcmF0b3IgaXMKKyAgICAgICBpZ25vcmVkLiAgVGhlIGZpcnN0IGVudHJ5ICBmb3IgIGVhY2ggIHRlcm1pbmFsICBnaXZlcyAgdGhlCisgICAgICAgbmFtZXMgIHdoaWNoICBhcmUga25vd24gZm9yIHRoZSB0ZXJtaW5hbCwgc2VwYXJhdGVkIGJ5IGB8JworICAgICAgIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgIG5hbWUgIGdpdmVuICBpcyAgdGhlICBtb3N0ICBjb21tb24KKyAgICAgICBhYmJyZXZpYXRpb24gIGZvciB0aGUgdGVybWluYWwsIHRoZSBsYXN0IG5hbWUgZ2l2ZW4gc2hvdWxkCisgICAgICAgYmUgYSBsb25nIG5hbWUgZnVsbHkgaWRlbnRpZnlpbmcgIHRoZSAgdGVybWluYWwsICBhbmQgIGFsbAorICAgICAgIG90aGVycyAgYXJlICB1bmRlcnN0b29kIGFzIHN5bm9ueW1zIGZvciB0aGUgdGVybWluYWwgbmFtZS4KKyAgICAgICBBbGwgbmFtZXMgYnV0IHRoZSBsYXN0IHNob3VsZCBiZSBpbiBsb3dlciBjYXNlIGFuZCBjb250YWluCisgICAgICAgbm8gIGJsYW5rczsgIHRoZSBsYXN0IG5hbWUgbWF5IHdlbGwgY29udGFpbiB1cHBlciBjYXNlIGFuZAorICAgICAgIGJsYW5rcyBmb3IgcmVhZGFiaWxpdHkuCisKKyAgICAgICBMaW5lcyBiZWdpbm5pbmcgd2l0aCBhIGAjJyBpbiB0aGUgZmlyc3QgY29sdW1uIGFyZSB0cmVhdGVkCisgICAgICAgYXMgIGNvbW1lbnRzLiAgV2hpbGUgY29tbWVudCBsaW5lcyBhcmUgbGVnYWwgYXQgYW55IHBvaW50LAorICAgICAgIHRoZSBvdXRwdXQgb2YgPFNUUk9ORz5jYXB0b2luZm88L1NUUk9ORz4gYW5kIDxTVFJPTkc+aW5mb3RvY2FwPC9TVFJPTkc+ICAoYWxpYXNlcyAgZm9yICA8U1RST05HPnRpYzwvU1RST05HPikKKyAgICAgICB3aWxsIG1vdmUgY29tbWVudHMgc28gdGhleSBvY2N1ciBvbmx5IGJldHdlZW4gZW50cmllcy4KKworICAgICAgIE5ld2xpbmVzICBhbmQgIGxlYWRpbmcgIHRhYnMgIG1heSAgYmUgIHVzZWQgZm9yIGZvcm1hdHRpbmcKKyAgICAgICBlbnRyaWVzIGZvciByZWFkYWJpbGl0eS4gIFRoZXNlIGFyZSAgcmVtb3ZlZCAgZnJvbSAgcGFyc2VkCisgICAgICAgZW50cmllcy4gICBUaGUgIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiA8U1RST05HPi1mPC9TVFJPTkc+IG9wdGlvbiByZWxpZXMgb24gdGhpcyB0byBmb3JtYXQKKyAgICAgICBpZi10aGVuLWVsc2UgZXhwcmVzc2lvbnM6IHRoZSByZXN1bHQgY2FuIGJlIHJlYWQgYnkgPFNUUk9ORz50aWM8L1NUUk9ORz4uCisKKyAgICAgICBUZXJtaW5hbCBuYW1lcyAoZXhjZXB0IGZvciB0aGUgbGFzdCwgdmVyYm9zZSBlbnRyeSkgc2hvdWxkCisgICAgICAgYmUgY2hvc2VuIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMuICBUaGUgcGFydGljdWxhcgorICAgICAgIHBpZWNlIG9mIGhhcmR3YXJlIG1ha2luZyB1cCB0aGUgIHRlcm1pbmFsICBzaG91bGQgIGhhdmUgIGEKKyAgICAgICByb290ICBuYW1lLCB0aHVzIGBgaHAyNjIxJycuICBUaGlzIG5hbWUgc2hvdWxkIG5vdCBjb250YWluCisgICAgICAgaHlwaGVucy4gIE1vZGVzIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBiZSBpbiwgb3IgdXNlciBwcmVmLQorICAgICAgIGVyZW5jZXMsICBzaG91bGQgIGJlIGluZGljYXRlZCBieSBhcHBlbmRpbmcgYSBoeXBoZW4gYW5kIGEKKyAgICAgICBtb2RlIHN1ZmZpeC4gIFRodXMsIGEgdnQxMDAgaW4gMTMyIGNvbHVtbiAgbW9kZSAgd291bGQgIGJlCisgICAgICAgdnQxMDAtdy4gIFRoZSBmb2xsb3dpbmcgc3VmZml4ZXMgc2hvdWxkIGJlIHVzZWQgd2hlcmUgcG9zLQorICAgICAgIHNpYmxlOgorCisKKyAgICAgIDxTVFJPTkc+U3VmZml4PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgPFNUUk9ORz5NZWFuaW5nPC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+RXhhbXBsZTwvU1RST05HPgorICAgICAgLTxFTT5ubjwvRU0+ICAgICAgTnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBzY3JlZW4gICAgICAgICAgICBhYWEtNjAKKyAgICAgIC08RU0+bjwvRU0+cCAgICAgIE51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgICAgICAgICAgICAgICAgYzEwMC00cAorICAgICAgLWFtICAgICAgV2l0aCBhdXRvbWFyZ2lucyAodXN1YWxseSB0aGUgZGVmYXVsdCkgICB2dDEwMC1hbQorICAgICAgLW0gICAgICAgTW9ubyBtb2RlOyBzdXBwcmVzcyBjb2xvciAgICAgICAgICAgICAgICBhbnNpLW0KKyAgICAgIC1tYyAgICAgIE1hZ2ljIGNvb2tpZTsgc3BhY2VzIHdoZW4gaGlnaGxpZ2h0aW5nICAgd3kzMC1tYworICAgICAgLW5hICAgICAgTm8gYXJyb3cga2V5cyAobGVhdmUgdGhlbSBpbiBsb2NhbCkgICAgICBjMTAwLW5hCisgICAgICAtbmFtICAgICBXaXRob3V0IGF1dG9tYXRpYyBtYXJnaW5zICAgICAgICAgICAgICAgIHZ0MTAwLW5hbQorICAgICAgLW5sICAgICAgTm8gc3RhdHVzIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHQ0NDE1LW5sCisgICAgICAtbnMgICAgICBObyBzdGF0dXMgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhwMjYyNi1ucworICAgICAgLXJ2ICAgICAgUmV2ZXJzZSB2aWRlbyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMTAwLXJ2CisgICAgICAtcyAgICAgICBFbmFibGUgc3RhdHVzIGxpbmUgICAgICAgICAgICAgICAgICAgICAgIHZ0MTAwLXMKKworICAgICAgLXZiICAgICAgVXNlIHZpc2libGUgYmVsbCBpbnN0ZWFkIG9mIGJlZXAgICAgICAgICB3eTM3MC12YgorICAgICAgLXcgICAgICAgV2lkZSBtb2RlICgmZ3Q7IDgwIGNvbHVtbnMsIHVzdWFsbHkgMTMyKSAgICB2dDEwMC13CisKKyAgICAgICBGb3IgbW9yZSBvbiB0ZXJtaW5hbCBuYW1pbmcgY29udmVudGlvbnMsIHNlZSAgdGhlICA8U1RST05HPnRlcm0oNyk8L1NUUk9ORz4KKyAgICAgICBtYW51YWwgcGFnZS4KKworICAgPFNUUk9ORz5DYXBhYmlsaXRpZXM8L1NUUk9ORz4KKyAgICAgICBUaGUgIGZvbGxvd2luZyAgaXMgIGEgIGNvbXBsZXRlICB0YWJsZSBvZiB0aGUgY2FwYWJpbGl0aWVzCisgICAgICAgaW5jbHVkZWQgaW4gYSB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBibG9jayBhbmQgYXZhaWxhYmxlICB0bworICAgICAgIHRlcm1pbmZvLXVzaW5nIGNvZGUuICBJbiBlYWNoIGxpbmUgb2YgdGhlIHRhYmxlLAorCisgICAgICAgVGhlICA8U1RST05HPnZhcmlhYmxlPC9TVFJPTkc+ICBpcyB0aGUgbmFtZSBieSB3aGljaCB0aGUgcHJvZ3JhbW1lciAoYXQgdGhlCisgICAgICAgdGVybWluZm8gbGV2ZWwpIGFjY2Vzc2VzIHRoZSBjYXBhYmlsaXR5LgorCisgICAgICAgVGhlIDxTVFJPTkc+Y2FwbmFtZTwvU1RST05HPiBpcyB0aGUgc2hvcnQgbmFtZSB1c2VkICBpbiAgdGhlICB0ZXh0ICBvZiAgdGhlCisgICAgICAgZGF0YWJhc2UsICBhbmQgIGlzIHVzZWQgYnkgYSBwZXJzb24gdXBkYXRpbmcgdGhlIGRhdGFiYXNlLgorICAgICAgIFdoZW5ldmVyIHBvc3NpYmxlLCBjYXBuYW1lcyBhcmUgY2hvc2VuIHRvIGJlIHRoZSAgc2FtZSAgYXMKKyAgICAgICBvciBzaW1pbGFyIHRvIHRoZSBBTlNJIFgzLjY0LTE5Nzkgc3RhbmRhcmQgKG5vdyBzdXBlcnNlZGVkCisgICAgICAgYnkgRUNNQS00OCwgd2hpY2ggdXNlcyBpZGVudGljYWwgb3IgdmVyeSAgc2ltaWxhciAgbmFtZXMpLgorICAgICAgIFNlbWFudGljcyBhcmUgYWxzbyBpbnRlbmRlZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgc3BlY2lmaS0KKyAgICAgICBjYXRpb24uCisKKyAgICAgICBUaGUgdGVybWNhcCBjb2RlIGlzIHRoZSBvbGQgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IGNhcGFiaWxpdHkgbmFtZSAgKHNvbWUKKyAgICAgICBjYXBhYmlsaXRpZXMgYXJlIG5ldywgYW5kIGhhdmUgbmFtZXMgd2hpY2ggdGVybWNhcCBkaWQgbm90CisgICAgICAgb3JpZ2luYXRlKS4KKworICAgICAgIENhcGFiaWxpdHkgbmFtZXMgaGF2ZSBubyBoYXJkIGxlbmd0aCBsaW1pdCwgYnV0IGFuICBpbmZvci0KKyAgICAgICBtYWwgIGxpbWl0ICBvZiAgNSBjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkb3B0ZWQgdG8ga2VlcCB0aGVtCisgICAgICAgc2hvcnQgYW5kIHRvIGFsbG93IHRoZSB0YWJzIGluIHRoZSAgc291cmNlICBmaWxlICA8U1RST05HPkNhcHM8L1NUUk9ORz4gIHRvCisgICAgICAgbGluZSB1cCBuaWNlbHkuCisKKyAgICAgICBGaW5hbGx5LCAgdGhlICBkZXNjcmlwdGlvbiAgZmllbGQgIGF0dGVtcHRzICB0byBjb252ZXkgdGhlCisgICAgICAgc2VtYW50aWNzIG9mIHRoZSBjYXBhYmlsaXR5LiAgWW91IG1heSBmaW5kIHNvbWUgIGNvZGVzICBpbgorICAgICAgIHRoZSBkZXNjcmlwdGlvbiBmaWVsZDoKKworICAgICAgIChQKSAgICBpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSBiZSBzcGVjaWZpZWQKKworICAgICAgICNbMS05XSBpbiAgdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgaXMgcGFzc2VkIHRocm91Z2ggdHBhcm0gd2l0aCBwYXJtcyBhcyBnaXZlbiAoIzxFTT5pPC9FTT4pLgorCisgICAgICAgKFAqKSAgIGluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IHZhcnkgIGluICBwcm9wb3J0aW9uICB0bworICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGxpbmVzIGFmZmVjdGVkCisKKyAgICAgICAoIzxFTT5pPC9FTT4pICAgaW5kaWNhdGVzIHRoZSA8RU0+aTwvRU0+dGggcGFyYW1ldGVyLgorCisKKyAgICAgICBUaGVzZSBhcmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0aWVzOgorCisKKyAgICAgICAgICAgICAgIDxTVFJPTkc+VmFyaWFibGU8L1NUUk9ORz4gICAgICAgICAgPFNUUk9ORz5DYXAtPC9TVFJPTkc+ICA8U1RST05HPlRDYXA8L1NUUk9ORz4gICAgICA8U1RST05HPkRlc2NyaXB0aW9uPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPkJvb2xlYW5zPC9TVFJPTkc+ICAgICAgICAgIDxTVFJPTkc+bmFtZTwvU1RST05HPiAgPFNUUk9ORz5Db2RlPC9TVFJPTkc+CisgICAgICAgYXV0b19sZWZ0X21hcmdpbiAgICAgICAgICBidyAgICBidyAgICBjdWIxIHdyYXBzIGZyb20gY29sLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW1uIDAgdG8gbGFzdCBjb2x1bW4KKyAgICAgICBhdXRvX3JpZ2h0X21hcmdpbiAgICAgICAgIGFtICAgIGFtICAgIHRlcm1pbmFsIGhhcyBhdXRvLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aWMgbWFyZ2lucworICAgICAgIGJhY2tfY29sb3JfZXJhc2UgICAgICAgICAgYmNlICAgdXQgICAgc2NyZWVuIGVyYXNlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kIGNvbG9yCisgICAgICAgY2FuX2NoYW5nZSAgICAgICAgICAgICAgICBjY2MgICBjYyAgICB0ZXJtaW5hbCBjYW4gcmUtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgZXhpc3RpbmcgY29sLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JzCisgICAgICAgY2VvbF9zdGFuZG91dF9nbGl0Y2ggICAgICB4aHAgICB4cyAgICBzdGFuZG91dCBub3QgZXJhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBvdmVyd3JpdGluZyAoaHApCisgICAgICAgY29sX2FkZHJfZ2xpdGNoICAgICAgICAgICB4aHBhICBZQSAgICBvbmx5IHBvc2l0aXZlIG1vdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhwYS9taHBhIGNhcHMKKworCisgICAgICAgY3BpX2NoYW5nZXNfcmVzICAgICAgICAgICBjcGl4ICBZRiAgICBjaGFuZ2luZyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoIGNoYW5nZXMgcmVzby0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1dGlvbgorICAgICAgIGNyX2NhbmNlbHNfbWljcm9fbW9kZSAgICAgY3J4bSAgWUIgICAgdXNpbmcgY3IgdHVybnMgb2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNybyBtb2RlCisgICAgICAgZGVzdF90YWJzX21hZ2ljX3Ntc28gICAgICB4dCAgICB4dCAgICB0YWJzIGRlc3RydWN0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWMgc28gY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQxMDYxKQorICAgICAgIGVhdF9uZXdsaW5lX2dsaXRjaCAgICAgICAgeGVubCAgeG4gICAgbmV3bGluZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciA4MCBjb2xzIChjb24tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXB0KQorICAgICAgIGVyYXNlX292ZXJzdHJpa2UgICAgICAgICAgZW8gICAgZW8gICAgY2FuIGVyYXNlIG92ZXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VzIHdpdGggYSBibGFuaworICAgICAgIGdlbmVyaWNfdHlwZSAgICAgICAgICAgICAgZ24gICAgZ24gICAgZ2VuZXJpYyBsaW5lIHR5cGUKKyAgICAgICBoYXJkX2NvcHkgICAgICAgICAgICAgICAgIGhjICAgIGhjICAgIGhhcmRjb3B5IHRlcm1pbmFsCisgICAgICAgaGFyZF9jdXJzb3IgICAgICAgICAgICAgICBjaHRzICBIQyAgICBjdXJzb3IgaXMgaGFyZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlCisgICAgICAgaGFzX21ldGFfa2V5ICAgICAgICAgICAgICBrbSAgICBrbSAgICBIYXMgYSBtZXRhIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4sIHNldHMgOHRoLWJpdCkKKyAgICAgICBoYXNfcHJpbnRfd2hlZWwgICAgICAgICAgIGRhaXN5IFlDICAgIHByaW50ZXIgbmVlZHMgb3BlcmEtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3IgdG8gY2hhbmdlIGNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RlciBzZXQKKyAgICAgICBoYXNfc3RhdHVzX2xpbmUgICAgICAgICAgIGhzICAgIGhzICAgIGhhcyBleHRyYSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUKKyAgICAgICBodWVfbGlnaHRuZXNzX3NhdHVyYXRpb24gIGhscyAgIGhsICAgIHRlcm1pbmFsIHVzZXMgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExTIGNvbG9yIG5vdGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVGVrdHJvbml4KQorICAgICAgIGluc2VydF9udWxsX2dsaXRjaCAgICAgICAgaW4gICAgaW4gICAgaW5zZXJ0IG1vZGUgZGlzdGluLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vpc2hlcyBudWxscworICAgICAgIGxwaV9jaGFuZ2VzX3JlcyAgICAgICAgICAgbHBpeCAgWUcgICAgY2hhbmdpbmcgbGluZSBwaXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyByZXNvbHV0aW9uCisgICAgICAgbWVtb3J5X2Fib3ZlICAgICAgICAgICAgICBkYSAgICBkYSAgICBkaXNwbGF5IG1heSBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluZWQgYWJvdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgICBtZW1vcnlfYmVsb3cgICAgICAgICAgICAgIGRiICAgIGRiICAgIGRpc3BsYXkgbWF5IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5lZCBiZWxvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgIG1vdmVfaW5zZXJ0X21vZGUgICAgICAgICAgbWlyICAgbWkgICAgc2FmZSB0byBtb3ZlIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBpbnNlcnQgbW9kZQorICAgICAgIG1vdmVfc3RhbmRvdXRfbW9kZSAgICAgICAgbXNnciAgbXMgICAgc2FmZSB0byBtb3ZlIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzdGFuZG91dCBtb2RlCisgICAgICAgbmVlZHNfeG9uX3hvZmYgICAgICAgICAgICBueG9uICBueCAgICBwYWRkaW5nIHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLCB4b24veG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKKyAgICAgICBub19lc2NfY3RsYyAgICAgICAgICAgICAgIHhzYiAgIHhiICAgIGJlZWhpdmUgKGYxPWVzY2FwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYyPWN0cmwgQykKKyAgICAgICBub19wYWRfY2hhciAgICAgICAgICAgICAgIG5wYyAgIE5QICAgIHBhZCBjaGFyYWN0ZXIgZG9lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGV4aXN0CisgICAgICAgbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbiAgICBuZHNjciBORCAgICBzY3JvbGxpbmcgcmVnaW9uIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tZGVzdHJ1Y3RpdmUKKyAgICAgICBub25fcmV2X3JtY3VwICAgICAgICAgICAgIG5ycm1jIE5SICAgIHNtY3VwIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlIHJtY3VwCisgICAgICAgb3Zlcl9zdHJpa2UgICAgICAgICAgICAgICBvcyAgICBvcyAgICB0ZXJtaW5hbCBjYW4gb3Zlci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZQorICAgICAgIHBydHJfc2lsZW50ICAgICAgICAgICAgICAgbWM1aSAgNWkgICAgcHJpbnRlciB3aWxsIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBvbiBzY3JlZW4KKyAgICAgICByb3dfYWRkcl9nbGl0Y2ggICAgICAgICAgIHh2cGEgIFlEICAgIG9ubHkgcG9zaXRpdmUgbW90aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdnBhL212cGEgY2FwcworICAgICAgIHNlbWlfYXV0b19yaWdodF9tYXJnaW4gICAgc2FtICAgWUUgICAgcHJpbnRpbmcgaW4gbGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIGNhdXNlcyBjcgorICAgICAgIHN0YXR1c19saW5lX2VzY19vayAgICAgICAgZXNsb2sgZXMgICAgZXNjYXBlIGNhbiBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgc3RhdHVzIGxpbmUKKyAgICAgICB0aWxkZV9nbGl0Y2ggICAgICAgICAgICAgIGh6ICAgIGh6ICAgIGNhbm5vdCBwcmludCB+J3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYXplbHRpbmUpCisKKworICAgICAgIHRyYW5zcGFyZW50X3VuZGVybGluZSAgICAgdWwgICAgdWwgICAgdW5kZXJsaW5lIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnN0cmlrZXMKKyAgICAgICB4b25feG9mZiAgICAgICAgICAgICAgICAgIHhvbiAgIHhvICAgIHRlcm1pbmFsIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvbi94b2ZmIGhhbmRzaGFraW5nCisKKyAgICAgICBUaGVzZSBhcmUgdGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzOgorCisKKyAgICAgICAgICAgIDxTVFJPTkc+VmFyaWFibGU8L1NUUk9ORz4gICAgICAgICA8U1RST05HPkNhcC08L1NUUk9ORz4gICAgIDxTVFJPTkc+VENhcDwvU1RST05HPiAgICAgICA8U1RST05HPkRlc2NyaXB0aW9uPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5OdW1lcmljPC9TVFJPTkc+ICAgICAgICAgPFNUUk9ORz5uYW1lPC9TVFJPTkc+ICAgICA8U1RST05HPkNvZGU8L1NUUk9ORz4KKyAgICAgICBjb2x1bW5zICAgICAgICAgICAgICAgY29scyAgICAgY28gICAgIG51bWJlciBvZiBjb2x1bW5zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGxpbmUKKyAgICAgICBpbml0X3RhYnMgICAgICAgICAgICAgaXQgICAgICAgaXQgICAgIHRhYnMgaW5pdGlhbGx5IGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNwYWNlcworICAgICAgIGxhYmVsX2hlaWdodCAgICAgICAgICBsaCAgICAgICBsaCAgICAgcm93cyBpbiBlYWNoIGxhYmVsCisgICAgICAgbGFiZWxfd2lkdGggICAgICAgICAgIGx3ICAgICAgIGx3ICAgICBjb2x1bW5zIGluIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsCisgICAgICAgbGluZXMgICAgICAgICAgICAgICAgIGxpbmVzICAgIGxpICAgICBudW1iZXIgb2YgbGluZXMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbiBvciBwYWdlCisgICAgICAgbGluZXNfb2ZfbWVtb3J5ICAgICAgIGxtICAgICAgIGxtICAgICBsaW5lcyBvZiBtZW1vcnkgaWYgJmd0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS4gMCBtZWFucyB2YXJpZXMKKyAgICAgICBtYWdpY19jb29raWVfZ2xpdGNoICAgeG1jICAgICAgc2cgICAgIG51bWJlciBvZiBibGFuaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBsZWZ0IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXNvIG9yIHJtc28KKyAgICAgICBtYXhfYXR0cmlidXRlcyAgICAgICAgbWEgICAgICAgbWEgICAgIG1heGltdW0gY29tYmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgdGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBoYW5kbGUKKyAgICAgICBtYXhfY29sb3JzICAgICAgICAgICAgY29sb3JzICAgQ28gICAgIG1heGltdW0gbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgb24gc2NyZWVuCisgICAgICAgbWF4X3BhaXJzICAgICAgICAgICAgIHBhaXJzICAgIHBhICAgICBtYXhpbXVtIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItcGFpcnMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgICBtYXhpbXVtX3dpbmRvd3MgICAgICAgd251bSAgICAgTVcgICAgIG1heGltdW0gbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVhYmxlIHdpbmRvd3MKKyAgICAgICBub19jb2xvcl92aWRlbyAgICAgICAgbmN2ICAgICAgTkMgICAgIHZpZGVvIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2Fubm90IGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggY29sb3JzCisgICAgICAgbnVtX2xhYmVscyAgICAgICAgICAgIG5sYWIgICAgIE5sICAgICBudW1iZXIgb2YgbGFiZWxzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgICBwYWRkaW5nX2JhdWRfcmF0ZSAgICAgcGIgICAgICAgcGIgICAgIGxvd2VzdCBiYXVkIHJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHBhZGRpbmcgbmVlZGVkCisgICAgICAgdmlydHVhbF90ZXJtaW5hbCAgICAgIHZ0ICAgICAgIHZ0ICAgICB2aXJ0dWFsIHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgKENCL3VuaXgpCisgICAgICAgd2lkdGhfc3RhdHVzX2xpbmUgICAgIHdzbCAgICAgIHdzICAgICBudW1iZXIgb2YgY29sdW1ucyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGxpbmUKKworICAgICAgIFRoZSBmb2xsb3dpbmcgbnVtZXJpYyAgY2FwYWJpbGl0aWVzICBhcmUgIHByZXNlbnQgIGluICB0aGUKKyAgICAgICBTVnI0LjAgIHRlcm0gIHN0cnVjdHVyZSwgYnV0IGFyZSBub3QgeWV0IGRvY3VtZW50ZWQgaW4gdGhlCisgICAgICAgbWFuIHBhZ2UuICBUaGV5IGNhbWUgaW4gd2l0aCBTVnI0J3MgcHJpbnRlciBzdXBwb3J0LgorCisKKyAgICAgICAgICAgICA8U1RST05HPlZhcmlhYmxlPC9TVFJPTkc+ICAgICAgICAgPFNUUk9ORz5DYXAtPC9TVFJPTkc+ICAgIDxTVFJPTkc+VENhcDwvU1RST05HPiAgICAgICA8U1RST05HPkRlc2NyaXB0aW9uPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5OdW1lcmljPC9TVFJPTkc+ICAgICAgICAgIDxTVFJPTkc+bmFtZTwvU1RST05HPiAgICA8U1RST05HPkNvZGU8L1NUUk9ORz4KKyAgICAgICBiaXRfaW1hZ2VfZW50d2luaW5nICAgIGJpdHdpbiAgWW8gICAgIG51bWJlciBvZiBwYXNzZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIGJpdC1pbWFnZSByb3cKKyAgICAgICBiaXRfaW1hZ2VfdHlwZSAgICAgICAgIGJpdHlwZSAgWXAgICAgIHR5cGUgb2YgYml0LWltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UKKyAgICAgICBidWZmZXJfY2FwYWNpdHkgICAgICAgIGJ1ZnN6ICAgWWEgICAgIG51bWJlcnMgb2YgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRpbmcKKyAgICAgICBidXR0b25zICAgICAgICAgICAgICAgIGJ0bnMgICAgQlQgICAgIG51bWJlciBvZiBidXR0b25zIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZQorICAgICAgIGRvdF9ob3J6X3NwYWNpbmcgICAgICAgc3BpbmggICBZYyAgICAgc3BhY2luZyBvZiBkb3RzIGhvci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl6b250YWxseSBpbiBkb3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXIgaW5jaAorCisgICAgICAgZG90X3ZlcnRfc3BhY2luZyAgICAgICBzcGludiAgIFliICAgICBzcGFjaW5nIG9mIHBpbnMgdmVyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGljYWxseSBpbiBwaW5zIHBlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jaAorICAgICAgIG1heF9taWNyb19hZGRyZXNzICAgICAgbWFkZHIgICBZZCAgICAgbWF4aW11bSB2YWx1ZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm9fLi4uX2FkZHJlc3MKKyAgICAgICBtYXhfbWljcm9fanVtcCAgICAgICAgIG1qdW1wICAgWWUgICAgIG1heGltdW0gdmFsdWUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1fLi4uX21pY3JvCisgICAgICAgbWljcm9fY29sX3NpemUgICAgICAgICBtY3MgICAgIFlmICAgICBjaGFyYWN0ZXIgc3RlcCBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGluIG1pY3JvIG1vZGUKKyAgICAgICBtaWNyb19saW5lX3NpemUgICAgICAgIG1scyAgICAgWWcgICAgIGxpbmUgc3RlcCBzaXplIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1pY3JvIG1vZGUKKyAgICAgICBudW1iZXJfb2ZfcGlucyAgICAgICAgIG5waW5zICAgWWggICAgIG51bWJlcnMgb2YgcGlucyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQtaGVhZAorICAgICAgIG91dHB1dF9yZXNfY2hhciAgICAgICAgb3JjICAgICBZaSAgICAgaG9yaXpvbnRhbCByZXNvbHUtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW9uIGluIHVuaXRzIHBlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZQorICAgICAgIG91dHB1dF9yZXNfaG9yel9pbmNoICAgb3JoaSAgICBZayAgICAgaG9yaXpvbnRhbCByZXNvbHUtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW9uIGluIHVuaXRzIHBlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jaAorICAgICAgIG91dHB1dF9yZXNfbGluZSAgICAgICAgb3JsICAgICBZaiAgICAgdmVydGljYWwgcmVzb2x1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5pdHMgcGVyIGxpbmUKKyAgICAgICBvdXRwdXRfcmVzX3ZlcnRfaW5jaCAgIG9ydmkgICAgWWwgICAgIHZlcnRpY2FsIHJlc29sdXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVuaXRzIHBlciBpbmNoCisgICAgICAgcHJpbnRfcmF0ZSAgICAgICAgICAgICBjcHMgICAgIFltICAgICBwcmludCByYXRlIGluIGNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RlcnMgcGVyIHNlY29uZAorICAgICAgIHdpZGVfY2hhcl9zaXplICAgICAgICAgd2lkY3MgICBZbiAgICAgY2hhcmFjdGVyIHN0ZXAgc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBpbiBkb3VibGUgd2lkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorCisgICAgICAgVGhlc2UgYXJlIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzOgorCisKKyAgICAgICAgICAgICAgIDxTVFJPTkc+VmFyaWFibGU8L1NUUk9ORz4gICAgICAgICAgPFNUUk9ORz5DYXAtPC9TVFJPTkc+ICAgPFNUUk9ORz5UQ2FwPC9TVFJPTkc+ICAgICA8U1RST05HPkRlc2NyaXB0aW9uPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgPFNUUk9ORz5TdHJpbmc8L1NUUk9ORz4gICAgICAgICAgIDxTVFJPTkc+bmFtZTwvU1RST05HPiAgIDxTVFJPTkc+Q29kZTwvU1RST05HPgorICAgICAgIGFjc19jaGFycyAgICAgICAgICAgICAgICAgYWNzYyAgIGFjICAgZ3JhcGhpY3MgY2hhcnNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMsIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dDEwMAorICAgICAgIGJhY2tfdGFiICAgICAgICAgICAgICAgICAgY2J0ICAgIGJ0ICAgYmFjayB0YWIgKFApCisgICAgICAgYmVsbCAgICAgICAgICAgICAgICAgICAgICBiZWwgICAgYmwgICBhdWRpYmxlIHNpZ25hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJlbGwpIChQKQorICAgICAgIGNhcnJpYWdlX3JldHVybiAgICAgICAgICAgY3IgICAgIGNyICAgY2FycmlhZ2UgcmV0dXJuIChQKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKikKKyAgICAgICBjaGFuZ2VfY2hhcl9waXRjaCAgICAgICAgIGNwaSAgICBaQSAgIENoYW5nZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgcGVyIGluY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICMxCisgICAgICAgY2hhbmdlX2xpbmVfcGl0Y2ggICAgICAgICBscGkgICAgWkIgICBDaGFuZ2UgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyBwZXIgaW5jaCB0byAjMQorICAgICAgIGNoYW5nZV9yZXNfaG9yeiAgICAgICAgICAgY2hyICAgIFpDICAgQ2hhbmdlIGhvcml6b250YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24gdG8gIzEKKyAgICAgICBjaGFuZ2VfcmVzX3ZlcnQgICAgICAgICAgIGN2ciAgICBaRCAgIENoYW5nZSB2ZXJ0aWNhbCByZXMtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbHV0aW9uIHRvICMxCisgICAgICAgY2hhbmdlX3Njcm9sbF9yZWdpb24gICAgICBjc3IgICAgY3MgICBjaGFuZ2UgcmVnaW9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICMxIHRvIGxpbmUgIzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKQorICAgICAgIGNoYXJfcGFkZGluZyAgICAgICAgICAgICAgcm1wICAgIHJQICAgbGlrZSBpcCBidXQgd2hlbiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IG1vZGUKKyAgICAgICBjbGVhcl9hbGxfdGFicyAgICAgICAgICAgIHRiYyAgICBjdCAgIGNsZWFyIGFsbCB0YWIgc3RvcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKQorICAgICAgIGNsZWFyX21hcmdpbnMgICAgICAgICAgICAgbWdjICAgIE1DICAgY2xlYXIgcmlnaHQgYW5kIGxlZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnQgbWFyZ2lucworICAgICAgIGNsZWFyX3NjcmVlbiAgICAgICAgICAgICAgY2xlYXIgIGNsICAgY2xlYXIgc2NyZWVuIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZSBjdXJzb3IgKFAqKQorICAgICAgIGNscl9ib2wgICAgICAgICAgICAgICAgICAgZWwxICAgIGNiICAgQ2xlYXIgdG8gYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBsaW5lCisKKworICAgICAgIGNscl9lb2wgICAgICAgICAgICAgICAgICAgZWwgICAgIGNlICAgY2xlYXIgdG8gZW5kIG9mIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKQorICAgICAgIGNscl9lb3MgICAgICAgICAgICAgICAgICAgZWQgICAgIGNkICAgY2xlYXIgdG8gZW5kIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4gKFAqKQorICAgICAgIGNvbHVtbl9hZGRyZXNzICAgICAgICAgICAgaHBhICAgIGNoICAgaG9yaXpvbnRhbCBwb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEsIGFic29sdXRlIChQKQorICAgICAgIGNvbW1hbmRfY2hhcmFjdGVyICAgICAgICAgY21kY2ggIENDICAgdGVybWluYWwgc2V0dGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCBjaGFyYWN0ZXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSAhPworICAgICAgIGNyZWF0ZV93aW5kb3cgICAgICAgICAgICAgY3dpbiAgIENXICAgZGVmaW5lIGEgd2luZG93ICMxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICMyLCMzIHRvICM0LCM1CisgICAgICAgY3Vyc29yX2FkZHJlc3MgICAgICAgICAgICBjdXAgICAgY20gICBtb3ZlIHRvIHJvdyAjMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyAjMgorICAgICAgIGN1cnNvcl9kb3duICAgICAgICAgICAgICAgY3VkMSAgIGRvICAgZG93biBvbmUgbGluZQorICAgICAgIGN1cnNvcl9ob21lICAgICAgICAgICAgICAgaG9tZSAgIGhvICAgaG9tZSBjdXJzb3IgKGlmIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXApCisgICAgICAgY3Vyc29yX2ludmlzaWJsZSAgICAgICAgICBjaXZpcyAgdmkgICBtYWtlIGN1cnNvciBpbnZpc2ktCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGUKKyAgICAgICBjdXJzb3JfbGVmdCAgICAgICAgICAgICAgIGN1YjEgICBsZSAgIG1vdmUgbGVmdCBvbmUgc3BhY2UKKyAgICAgICBjdXJzb3JfbWVtX2FkZHJlc3MgICAgICAgIG1yY3VwICBDTSAgIG1lbW9yeSByZWxhdGl2ZSBjdXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3IgYWRkcmVzc2luZywgbW92ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcm93ICMxIGNvbHVtbnMgIzIKKyAgICAgICBjdXJzb3Jfbm9ybWFsICAgICAgICAgICAgIGNub3JtICB2ZSAgIG1ha2UgY3Vyc29yIGFwcGVhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsICh1bmRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXZpcy9jdnZpcykKKyAgICAgICBjdXJzb3JfcmlnaHQgICAgICAgICAgICAgIGN1ZjEgICBuZCAgIG5vbi1kZXN0cnVjdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgKG1vdmUgcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBzcGFjZSkKKyAgICAgICBjdXJzb3JfdG9fbGwgICAgICAgICAgICAgIGxsICAgICBsbCAgIGxhc3QgbGluZSwgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAoaWYgbm8gY3VwKQorICAgICAgIGN1cnNvcl91cCAgICAgICAgICAgICAgICAgY3V1MSAgIHVwICAgdXAgb25lIGxpbmUKKyAgICAgICBjdXJzb3JfdmlzaWJsZSAgICAgICAgICAgIGN2dmlzICB2cyAgIG1ha2UgY3Vyc29yIHZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUKKyAgICAgICBkZWZpbmVfY2hhciAgICAgICAgICAgICAgIGRlZmMgICBaRSAgIERlZmluZSBhIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEsICMyIGRvdHMgd2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRlciAjMworICAgICAgIGRlbGV0ZV9jaGFyYWN0ZXIgICAgICAgICAgZGNoMSAgIGRjICAgZGVsZXRlIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFAqKQorICAgICAgIGRlbGV0ZV9saW5lICAgICAgICAgICAgICAgZGwxICAgIGRsICAgZGVsZXRlIGxpbmUgKFAqKQorICAgICAgIGRpYWxfcGhvbmUgICAgICAgICAgICAgICAgZGlhbCAgIERJICAgZGlhbCBudW1iZXIgIzEKKyAgICAgICBkaXNfc3RhdHVzX2xpbmUgICAgICAgICAgIGRzbCAgICBkcyAgIGRpc2FibGUgc3RhdHVzIGxpbmUKKyAgICAgICBkaXNwbGF5X2Nsb2NrICAgICAgICAgICAgIGRjbGsgICBESyAgIGRpc3BsYXkgY2xvY2sKKyAgICAgICBkb3duX2hhbGZfbGluZSAgICAgICAgICAgIGhkICAgICBoZCAgIGhhbGYgYSBsaW5lIGRvd24KKyAgICAgICBlbmFfYWNzICAgICAgICAgICAgICAgICAgIGVuYWNzICBlQSAgIGVuYWJsZSBhbHRlcm5hdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgc2V0CisgICAgICAgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSAgICBzbWFjcyAgYXMgICBzdGFydCBhbHRlcm5hdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBzZXQgKFApCisgICAgICAgZW50ZXJfYW1fbW9kZSAgICAgICAgICAgICBzbWFtICAgU0EgICB0dXJuIG9uIGF1dG9tYXRpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lucworICAgICAgIGVudGVyX2JsaW5rX21vZGUgICAgICAgICAgYmxpbmsgIG1iICAgdHVybiBvbiBibGlua2luZworICAgICAgIGVudGVyX2JvbGRfbW9kZSAgICAgICAgICAgYm9sZCAgIG1kICAgdHVybiBvbiBib2xkIChleHRyYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZ2h0KSBtb2RlCisgICAgICAgZW50ZXJfY2FfbW9kZSAgICAgICAgICAgICBzbWN1cCAgdGkgICBzdHJpbmcgdG8gc3RhcnQgcHJvLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbXMgdXNpbmcgY3VwCisgICAgICAgZW50ZXJfZGVsZXRlX21vZGUgICAgICAgICBzbWRjICAgZG0gICBlbnRlciBkZWxldGUgbW9kZQorICAgICAgIGVudGVyX2RpbV9tb2RlICAgICAgICAgICAgZGltICAgIG1oICAgdHVybiBvbiBoYWxmLWJyaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGVudGVyX2RvdWJsZXdpZGVfbW9kZSAgICAgc3dpZG0gIFpGICAgRW50ZXIgZG91YmxlLXdpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICBlbnRlcl9kcmFmdF9xdWFsaXR5ICAgICAgIHNkcmZxICBaRyAgIEVudGVyIGRyYWZ0LXF1YWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICBlbnRlcl9pbnNlcnRfbW9kZSAgICAgICAgIHNtaXIgICBpbSAgIGVudGVyIGluc2VydCBtb2RlCisgICAgICAgZW50ZXJfaXRhbGljc19tb2RlICAgICAgICBzaXRtICAgWkggICBFbnRlciBpdGFsaWMgbW9kZQorICAgICAgIGVudGVyX2xlZnR3YXJkX21vZGUgICAgICAgc2xtICAgIFpJICAgU3RhcnQgbGVmdHdhcmQgY2FyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlhZ2UgbW90aW9uCisKKyAgICAgICBlbnRlcl9taWNyb19tb2RlICAgICAgICAgIHNtaWNtICBaSiAgIFN0YXJ0IG1pY3JvLW1vdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGVudGVyX25lYXJfbGV0dGVyX3F1YWxpdHkgc25scSAgIFpLICAgRW50ZXIgTkxRIG1vZGUKKyAgICAgICBlbnRlcl9ub3JtYWxfcXVhbGl0eSAgICAgIHNucm1xICBaTCAgIEVudGVyIG5vcm1hbC1xdWFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZW50ZXJfcHJvdGVjdGVkX21vZGUgICAgICBwcm90ICAgbXAgICB0dXJuIG9uIHByb3RlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGVudGVyX3JldmVyc2VfbW9kZSAgICAgICAgcmV2ICAgIG1yICAgdHVybiBvbiByZXZlcnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlbyBtb2RlCisgICAgICAgZW50ZXJfc2VjdXJlX21vZGUgICAgICAgICBpbnZpcyAgbWsgICB0dXJuIG9uIGJsYW5rIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyYWN0ZXJzIGludmlzaS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZSkKKyAgICAgICBlbnRlcl9zaGFkb3dfbW9kZSAgICAgICAgIHNzaG0gICBaTSAgIEVudGVyIHNoYWRvdy1wcmludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGVudGVyX3N0YW5kb3V0X21vZGUgICAgICAgc21zbyAgIHNvICAgYmVnaW4gc3RhbmRvdXQgbW9kZQorICAgICAgIGVudGVyX3N1YnNjcmlwdF9tb2RlICAgICAgc3N1Ym0gIFpOICAgRW50ZXIgc3Vic2NyaXB0IG1vZGUKKyAgICAgICBlbnRlcl9zdXBlcnNjcmlwdF9tb2RlICAgIHNzdXBtICBaTyAgIEVudGVyIHN1cGVyc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZW50ZXJfdW5kZXJsaW5lX21vZGUgICAgICBzbXVsICAgdXMgICBiZWdpbiB1bmRlcmxpbmUgbW9kZQorICAgICAgIGVudGVyX3Vwd2FyZF9tb2RlICAgICAgICAgc3VtICAgIFpQICAgU3RhcnQgdXB3YXJkIGNhci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpYWdlIG1vdGlvbgorICAgICAgIGVudGVyX3hvbl9tb2RlICAgICAgICAgICAgc214b24gIFNYICAgdHVybiBvbiB4b24veG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtpbmcKKyAgICAgICBlcmFzZV9jaGFycyAgICAgICAgICAgICAgIGVjaCAgICBlYyAgIGVyYXNlICMxIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKQorICAgICAgIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSAgICAgcm1hY3MgIGFlICAgZW5kIGFsdGVybmF0ZSBjaGFyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0ZXIgc2V0IChQKQorICAgICAgIGV4aXRfYW1fbW9kZSAgICAgICAgICAgICAgcm1hbSAgIFJBICAgdHVybiBvZmYgYXV0b21hdGljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zCisgICAgICAgZXhpdF9hdHRyaWJ1dGVfbW9kZSAgICAgICBzZ3IwICAgbWUgICB0dXJuIG9mZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMKKyAgICAgICBleGl0X2NhX21vZGUgICAgICAgICAgICAgIHJtY3VwICB0ZSAgIHN0cmluZ3MgdG8gZW5kIHByby0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1zIHVzaW5nIGN1cAorICAgICAgIGV4aXRfZGVsZXRlX21vZGUgICAgICAgICAgcm1kYyAgIGVkICAgZW5kIGRlbGV0ZSBtb2RlCisgICAgICAgZXhpdF9kb3VibGV3aWRlX21vZGUgICAgICByd2lkbSAgWlEgICBFbmQgZG91YmxlLXdpZGUgbW9kZQorICAgICAgIGV4aXRfaW5zZXJ0X21vZGUgICAgICAgICAgcm1pciAgIGVpICAgZXhpdCBpbnNlcnQgbW9kZQorICAgICAgIGV4aXRfaXRhbGljc19tb2RlICAgICAgICAgcml0bSAgIFpSICAgRW5kIGl0YWxpYyBtb2RlCisgICAgICAgZXhpdF9sZWZ0d2FyZF9tb2RlICAgICAgICBybG0gICAgWlMgICBFbmQgbGVmdC1tb3Rpb24gbW9kZQorICAgICAgIGV4aXRfbWljcm9fbW9kZSAgICAgICAgICAgcm1pY20gIFpUICAgRW5kIG1pY3JvLW1vdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGV4aXRfc2hhZG93X21vZGUgICAgICAgICAgcnNobSAgIFpVICAgRW5kIHNoYWRvdy1wcmludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGV4aXRfc3RhbmRvdXRfbW9kZSAgICAgICAgcm1zbyAgIHNlICAgZXhpdCBzdGFuZG91dCBtb2RlCisgICAgICAgZXhpdF9zdWJzY3JpcHRfbW9kZSAgICAgICByc3VibSAgWlYgICBFbmQgc3Vic2NyaXB0IG1vZGUKKyAgICAgICBleGl0X3N1cGVyc2NyaXB0X21vZGUgICAgIHJzdXBtICBaVyAgIEVuZCBzdXBlcnNjcmlwdCBtb2RlCisgICAgICAgZXhpdF91bmRlcmxpbmVfbW9kZSAgICAgICBybXVsICAgdWUgICBleGl0IHVuZGVybGluZSBtb2RlCisgICAgICAgZXhpdF91cHdhcmRfbW9kZSAgICAgICAgICBydW0gICAgWlggICBFbmQgcmV2ZXJzZSBjaGFyYWMtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXIgbW90aW9uCisgICAgICAgZXhpdF94b25fbW9kZSAgICAgICAgICAgICBybXhvbiAgUlggICB0dXJuIG9mZiB4b24veG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtpbmcKKyAgICAgICBmaXhlZF9wYXVzZSAgICAgICAgICAgICAgIHBhdXNlICBQQSAgIHBhdXNlIGZvciAyLTMgc2VjLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25kcworICAgICAgIGZsYXNoX2hvb2sgICAgICAgICAgICAgICAgaG9vayAgIGZoICAgZmxhc2ggc3dpdGNoIGhvb2sKKyAgICAgICBmbGFzaF9zY3JlZW4gICAgICAgICAgICAgIGZsYXNoICB2YiAgIHZpc2libGUgYmVsbCAobWF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgbW92ZSBjdXJzb3IpCisgICAgICAgZm9ybV9mZWVkICAgICAgICAgICAgICAgICBmZiAgICAgZmYgICBoYXJkY29weSB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBlamVjdCAoUCopCisgICAgICAgZnJvbV9zdGF0dXNfbGluZSAgICAgICAgICBmc2wgICAgZnMgICByZXR1cm4gZnJvbSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUKKyAgICAgICBnb3RvX3dpbmRvdyAgICAgICAgICAgICAgIHdpbmdvICBXRyAgIGdvIHRvIHdpbmRvdyAjMQorICAgICAgIGhhbmd1cCAgICAgICAgICAgICAgICAgICAgaHVwICAgIEhVICAgaGFuZy11cCBwaG9uZQorICAgICAgIGluaXRfMXN0cmluZyAgICAgICAgICAgICAgaXMxICAgIGkxICAgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZworICAgICAgIGluaXRfMnN0cmluZyAgICAgICAgICAgICAgaXMyICAgIGlzICAgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZworCisgICAgICAgaW5pdF8zc3RyaW5nICAgICAgICAgICAgICBpczMgICAgaTMgICBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nCisgICAgICAgaW5pdF9maWxlICAgICAgICAgICAgICAgICBpZiAgICAgaWYgICBuYW1lIG9mIGluaXRpYWxpemEtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW9uIGZpbGUKKyAgICAgICBpbml0X3Byb2cgICAgICAgICAgICAgICAgIGlwcm9nICBpUCAgIHBhdGggbmFtZSBvZiBwcm9ncmFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5pdGlhbGl6YXRpb24KKyAgICAgICBpbml0aWFsaXplX2NvbG9yICAgICAgICAgIGluaXRjICBJYyAgIGluaXRpYWxpemUgY29sb3IgIzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICgjMiwjMywjNCkKKyAgICAgICBpbml0aWFsaXplX3BhaXIgICAgICAgICAgIGluaXRwICBJcCAgIEluaXRpYWxpemUgY29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgIzEgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPSgjMiwjMywjNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZz0oIzUsIzYsIzcpCisgICAgICAgaW5zZXJ0X2NoYXJhY3RlciAgICAgICAgICBpY2gxICAgaWMgICBpbnNlcnQgY2hhcmFjdGVyIChQKQorICAgICAgIGluc2VydF9saW5lICAgICAgICAgICAgICAgaWwxICAgIGFsICAgaW5zZXJ0IGxpbmUgKFAqKQorICAgICAgIGluc2VydF9wYWRkaW5nICAgICAgICAgICAgaXAgICAgIGlwICAgaW5zZXJ0IHBhZGRpbmcgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkIGNoYXJhY3RlcgorICAgICAgIGtleV9hMSAgICAgICAgICAgICAgICAgICAga2ExICAgIEsxICAgdXBwZXIgbGVmdCBvZiBrZXlwYWQKKyAgICAgICBrZXlfYTMgICAgICAgICAgICAgICAgICAgIGthMyAgICBLMyAgIHVwcGVyIHJpZ2h0IG9mIGtleS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZAorICAgICAgIGtleV9iMiAgICAgICAgICAgICAgICAgICAga2IyICAgIEsyICAgY2VudGVyIG9mIGtleXBhZAorICAgICAgIGtleV9iYWNrc3BhY2UgICAgICAgICAgICAga2JzICAgIGtiICAgYmFja3NwYWNlIGtleQorICAgICAgIGtleV9iZWcgICAgICAgICAgICAgICAgICAga2JlZyAgIEAxICAgYmVnaW4ga2V5CisgICAgICAga2V5X2J0YWIgICAgICAgICAgICAgICAgICBrY2J0ICAga0IgICBiYWNrLXRhYiBrZXkKKyAgICAgICBrZXlfYzEgICAgICAgICAgICAgICAgICAgIGtjMSAgICBLNCAgIGxvd2VyIGxlZnQgb2Yga2V5cGFkCisgICAgICAga2V5X2MzICAgICAgICAgICAgICAgICAgICBrYzMgICAgSzUgICBsb3dlciByaWdodCBvZiBrZXktCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQKKyAgICAgICBrZXlfY2FuY2VsICAgICAgICAgICAgICAgIGtjYW4gICBAMiAgIGNhbmNlbCBrZXkKKyAgICAgICBrZXlfY2F0YWIgICAgICAgICAgICAgICAgIGt0YmMgICBrYSAgIGNsZWFyLWFsbC10YWJzIGtleQorICAgICAgIGtleV9jbGVhciAgICAgICAgICAgICAgICAga2NsciAgIGtDICAgY2xlYXItc2NyZWVuIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcmFzZSBrZXkKKyAgICAgICBrZXlfY2xvc2UgICAgICAgICAgICAgICAgIGtjbG8gICBAMyAgIGNsb3NlIGtleQorICAgICAgIGtleV9jb21tYW5kICAgICAgICAgICAgICAga2NtZCAgIEA0ICAgY29tbWFuZCBrZXkKKyAgICAgICBrZXlfY29weSAgICAgICAgICAgICAgICAgIGtjcHkgICBANSAgIGNvcHkga2V5CisgICAgICAga2V5X2NyZWF0ZSAgICAgICAgICAgICAgICBrY3J0ICAgQDYgICBjcmVhdGUga2V5CisgICAgICAga2V5X2N0YWIgICAgICAgICAgICAgICAgICBrY3RhYiAga3QgICBjbGVhci10YWIga2V5CisgICAgICAga2V5X2RjICAgICAgICAgICAgICAgICAgICBrZGNoMSAga0QgICBkZWxldGUtY2hhcmFjdGVyIGtleQorICAgICAgIGtleV9kbCAgICAgICAgICAgICAgICAgICAga2RsMSAgIGtMICAgZGVsZXRlLWxpbmUga2V5CisgICAgICAga2V5X2Rvd24gICAgICAgICAgICAgICAgICBrY3VkMSAga2QgICBkb3duLWFycm93IGtleQorICAgICAgIGtleV9laWMgICAgICAgICAgICAgICAgICAga3JtaXIgIGtNICAgc2VudCBieSBybWlyIG9yIHNtaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGluc2VydCBtb2RlCisgICAgICAga2V5X2VuZCAgICAgICAgICAgICAgICAgICBrZW5kICAgQDcgICBlbmQga2V5CisgICAgICAga2V5X2VudGVyICAgICAgICAgICAgICAgICBrZW50ICAgQDggICBlbnRlci9zZW5kIGtleQorICAgICAgIGtleV9lb2wgICAgICAgICAgICAgICAgICAga2VsICAgIGtFICAgY2xlYXItdG8tZW5kLW9mLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleQorICAgICAgIGtleV9lb3MgICAgICAgICAgICAgICAgICAga2VkICAgIGtTICAgY2xlYXItdG8tZW5kLW9mLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuIGtleQorICAgICAgIGtleV9leGl0ICAgICAgICAgICAgICAgICAga2V4dCAgIEA5ICAgZXhpdCBrZXkKKyAgICAgICBrZXlfZjAgICAgICAgICAgICAgICAgICAgIGtmMCAgICBrMCAgIEYwIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMSAgICAgICAgICAgICAgICAgICAga2YxICAgIGsxICAgRjEgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxMCAgICAgICAgICAgICAgICAgICBrZjEwICAgazsgICBGMTAgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxMSAgICAgICAgICAgICAgICAgICBrZjExICAgRjEgICBGMTEgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxMiAgICAgICAgICAgICAgICAgICBrZjEyICAgRjIgICBGMTIgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxMyAgICAgICAgICAgICAgICAgICBrZjEzICAgRjMgICBGMTMgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxNCAgICAgICAgICAgICAgICAgICBrZjE0ICAgRjQgICBGMTQgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxNSAgICAgICAgICAgICAgICAgICBrZjE1ICAgRjUgICBGMTUgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxNiAgICAgICAgICAgICAgICAgICBrZjE2ICAgRjYgICBGMTYgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxNyAgICAgICAgICAgICAgICAgICBrZjE3ICAgRjcgICBGMTcgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxOCAgICAgICAgICAgICAgICAgICBrZjE4ICAgRjggICBGMTggZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxOSAgICAgICAgICAgICAgICAgICBrZjE5ICAgRjkgICBGMTkgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YyICAgICAgICAgICAgICAgICAgICBrZjIgICAgazIgICBGMiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjIwICAgICAgICAgICAgICAgICAgIGtmMjAgICBGQSAgIEYyMCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjIxICAgICAgICAgICAgICAgICAgIGtmMjEgICBGQiAgIEYyMSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjIyICAgICAgICAgICAgICAgICAgIGtmMjIgICBGQyAgIEYyMiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjIzICAgICAgICAgICAgICAgICAgIGtmMjMgICBGRCAgIEYyMyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjI0ICAgICAgICAgICAgICAgICAgIGtmMjQgICBGRSAgIEYyNCBmdW5jdGlvbiBrZXkKKworICAgICAgIGtleV9mMjUgICAgICAgICAgICAgICAgICAga2YyNSAgIEZGICAgRjI1IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjYgICAgICAgICAgICAgICAgICAga2YyNiAgIEZHICAgRjI2IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjcgICAgICAgICAgICAgICAgICAga2YyNyAgIEZIICAgRjI3IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjggICAgICAgICAgICAgICAgICAga2YyOCAgIEZJICAgRjI4IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjkgICAgICAgICAgICAgICAgICAga2YyOSAgIEZKICAgRjI5IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMyAgICAgICAgICAgICAgICAgICAga2YzICAgIGszICAgRjMgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzMCAgICAgICAgICAgICAgICAgICBrZjMwICAgRksgICBGMzAgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzMSAgICAgICAgICAgICAgICAgICBrZjMxICAgRkwgICBGMzEgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzMiAgICAgICAgICAgICAgICAgICBrZjMyICAgRk0gICBGMzIgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzMyAgICAgICAgICAgICAgICAgICBrZjMzICAgRk4gICBGMzMgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzNCAgICAgICAgICAgICAgICAgICBrZjM0ICAgRk8gICBGMzQgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzNSAgICAgICAgICAgICAgICAgICBrZjM1ICAgRlAgICBGMzUgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzNiAgICAgICAgICAgICAgICAgICBrZjM2ICAgRlEgICBGMzYgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzNyAgICAgICAgICAgICAgICAgICBrZjM3ICAgRlIgICBGMzcgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzOCAgICAgICAgICAgICAgICAgICBrZjM4ICAgRlMgICBGMzggZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzOSAgICAgICAgICAgICAgICAgICBrZjM5ICAgRlQgICBGMzkgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y0ICAgICAgICAgICAgICAgICAgICBrZjQgICAgazQgICBGNCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQwICAgICAgICAgICAgICAgICAgIGtmNDAgICBGVSAgIEY0MCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQxICAgICAgICAgICAgICAgICAgIGtmNDEgICBGViAgIEY0MSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQyICAgICAgICAgICAgICAgICAgIGtmNDIgICBGVyAgIEY0MiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQzICAgICAgICAgICAgICAgICAgIGtmNDMgICBGWCAgIEY0MyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQ0ICAgICAgICAgICAgICAgICAgIGtmNDQgICBGWSAgIEY0NCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQ1ICAgICAgICAgICAgICAgICAgIGtmNDUgICBGWiAgIEY0NSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQ2ICAgICAgICAgICAgICAgICAgIGtmNDYgICBGYSAgIEY0NiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQ3ICAgICAgICAgICAgICAgICAgIGtmNDcgICBGYiAgIEY0NyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQ4ICAgICAgICAgICAgICAgICAgIGtmNDggICBGYyAgIEY0OCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQ5ICAgICAgICAgICAgICAgICAgIGtmNDkgICBGZCAgIEY0OSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjUgICAgICAgICAgICAgICAgICAgIGtmNSAgICBrNSAgIEY1IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTAgICAgICAgICAgICAgICAgICAga2Y1MCAgIEZlICAgRjUwIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTEgICAgICAgICAgICAgICAgICAga2Y1MSAgIEZmICAgRjUxIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTIgICAgICAgICAgICAgICAgICAga2Y1MiAgIEZnICAgRjUyIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTMgICAgICAgICAgICAgICAgICAga2Y1MyAgIEZoICAgRjUzIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTQgICAgICAgICAgICAgICAgICAga2Y1NCAgIEZpICAgRjU0IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTUgICAgICAgICAgICAgICAgICAga2Y1NSAgIEZqICAgRjU1IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTYgICAgICAgICAgICAgICAgICAga2Y1NiAgIEZrICAgRjU2IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTcgICAgICAgICAgICAgICAgICAga2Y1NyAgIEZsICAgRjU3IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTggICAgICAgICAgICAgICAgICAga2Y1OCAgIEZtICAgRjU4IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNTkgICAgICAgICAgICAgICAgICAga2Y1OSAgIEZuICAgRjU5IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNiAgICAgICAgICAgICAgICAgICAga2Y2ICAgIGs2ICAgRjYgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y2MCAgICAgICAgICAgICAgICAgICBrZjYwICAgRm8gICBGNjAgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y2MSAgICAgICAgICAgICAgICAgICBrZjYxICAgRnAgICBGNjEgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y2MiAgICAgICAgICAgICAgICAgICBrZjYyICAgRnEgICBGNjIgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y2MyAgICAgICAgICAgICAgICAgICBrZjYzICAgRnIgICBGNjMgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y3ICAgICAgICAgICAgICAgICAgICBrZjcgICAgazcgICBGNyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjggICAgICAgICAgICAgICAgICAgIGtmOCAgICBrOCAgIEY4IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mOSAgICAgICAgICAgICAgICAgICAga2Y5ICAgIGs5ICAgRjkgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2ZpbmQgICAgICAgICAgICAgICAgICBrZm5kICAgQDAgICBmaW5kIGtleQorICAgICAgIGtleV9oZWxwICAgICAgICAgICAgICAgICAga2hscCAgICUxICAgaGVscCBrZXkKKyAgICAgICBrZXlfaG9tZSAgICAgICAgICAgICAgICAgIGtob21lICBraCAgIGhvbWUga2V5CisgICAgICAga2V5X2ljICAgICAgICAgICAgICAgICAgICBraWNoMSAga0kgICBpbnNlcnQtY2hhcmFjdGVyIGtleQorICAgICAgIGtleV9pbCAgICAgICAgICAgICAgICAgICAga2lsMSAgIGtBICAgaW5zZXJ0LWxpbmUga2V5CisgICAgICAga2V5X2xlZnQgICAgICAgICAgICAgICAgICBrY3ViMSAga2wgICBsZWZ0LWFycm93IGtleQorICAgICAgIGtleV9sbCAgICAgICAgICAgICAgICAgICAga2xsICAgIGtIICAgbG93ZXItbGVmdCBrZXkgKGhvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24pCisgICAgICAga2V5X21hcmsgICAgICAgICAgICAgICAgICBrbXJrICAgJTIgICBtYXJrIGtleQorICAgICAgIGtleV9tZXNzYWdlICAgICAgICAgICAgICAga21zZyAgICUzICAgbWVzc2FnZSBrZXkKKyAgICAgICBrZXlfbW92ZSAgICAgICAgICAgICAgICAgIGttb3YgICAlNCAgIG1vdmUga2V5CisgICAgICAga2V5X25leHQgICAgICAgICAgICAgICAgICBrbnh0ICAgJTUgICBuZXh0IGtleQorICAgICAgIGtleV9ucGFnZSAgICAgICAgICAgICAgICAga25wICAgIGtOICAgbmV4dC1wYWdlIGtleQorICAgICAgIGtleV9vcGVuICAgICAgICAgICAgICAgICAga29wbiAgICU2ICAgb3BlbiBrZXkKKyAgICAgICBrZXlfb3B0aW9ucyAgICAgICAgICAgICAgIGtvcHQgICAlNyAgIG9wdGlvbnMga2V5CisgICAgICAga2V5X3BwYWdlICAgICAgICAgICAgICAgICBrcHAgICAga1AgICBwcmV2aW91cy1wYWdlIGtleQorICAgICAgIGtleV9wcmV2aW91cyAgICAgICAgICAgICAga3BydiAgICU4ICAgcHJldmlvdXMga2V5CisgICAgICAga2V5X3ByaW50ICAgICAgICAgICAgICAgICBrcHJ0ICAgJTkgICBwcmludCBrZXkKKyAgICAgICBrZXlfcmVkbyAgICAgICAgICAgICAgICAgIGtyZG8gICAlMCAgIHJlZG8ga2V5CisKKyAgICAgICBrZXlfcmVmZXJlbmNlICAgICAgICAgICAgIGtyZWYgICAmYW1wOzEgICByZWZlcmVuY2Uga2V5CisgICAgICAga2V5X3JlZnJlc2ggICAgICAgICAgICAgICBrcmZyICAgJmFtcDsyICAgcmVmcmVzaCBrZXkKKyAgICAgICBrZXlfcmVwbGFjZSAgICAgICAgICAgICAgIGtycGwgICAmYW1wOzMgICByZXBsYWNlIGtleQorICAgICAgIGtleV9yZXN0YXJ0ICAgICAgICAgICAgICAga3JzdCAgICZhbXA7NCAgIHJlc3RhcnQga2V5CisgICAgICAga2V5X3Jlc3VtZSAgICAgICAgICAgICAgICBrcmVzICAgJmFtcDs1ICAgcmVzdW1lIGtleQorICAgICAgIGtleV9yaWdodCAgICAgICAgICAgICAgICAga2N1ZjEgIGtyICAgcmlnaHQtYXJyb3cga2V5CisgICAgICAga2V5X3NhdmUgICAgICAgICAgICAgICAgICBrc2F2ICAgJmFtcDs2ICAgc2F2ZSBrZXkKKyAgICAgICBrZXlfc2JlZyAgICAgICAgICAgICAgICAgIGtCRUcgICAmYW1wOzkgICBzaGlmdGVkIGJlZ2luIGtleQorICAgICAgIGtleV9zY2FuY2VsICAgICAgICAgICAgICAga0NBTiAgICZhbXA7MCAgIHNoaWZ0ZWQgY2FuY2VsIGtleQorICAgICAgIGtleV9zY29tbWFuZCAgICAgICAgICAgICAga0NNRCAgICoxICAgc2hpZnRlZCBjb21tYW5kIGtleQorICAgICAgIGtleV9zY29weSAgICAgICAgICAgICAgICAga0NQWSAgICoyICAgc2hpZnRlZCBjb3B5IGtleQorICAgICAgIGtleV9zY3JlYXRlICAgICAgICAgICAgICAga0NSVCAgICozICAgc2hpZnRlZCBjcmVhdGUga2V5CisgICAgICAga2V5X3NkYyAgICAgICAgICAgICAgICAgICBrREMgICAgKjQgICBzaGlmdGVkIGRlbGV0ZS1jaGFyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0ZXIga2V5CisgICAgICAga2V5X3NkbCAgICAgICAgICAgICAgICAgICBrREwgICAgKjUgICBzaGlmdGVkIGRlbGV0ZS1saW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkKKyAgICAgICBrZXlfc2VsZWN0ICAgICAgICAgICAgICAgIGtzbHQgICAqNiAgIHNlbGVjdCBrZXkKKyAgICAgICBrZXlfc2VuZCAgICAgICAgICAgICAgICAgIGtFTkQgICAqNyAgIHNoaWZ0ZWQgZW5kIGtleQorICAgICAgIGtleV9zZW9sICAgICAgICAgICAgICAgICAga0VPTCAgICo4ICAgc2hpZnRlZCBjbGVhci10by0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZC1vZi1saW5lIGtleQorICAgICAgIGtleV9zZXhpdCAgICAgICAgICAgICAgICAga0VYVCAgICo5ICAgc2hpZnRlZCBleGl0IGtleQorICAgICAgIGtleV9zZiAgICAgICAgICAgICAgICAgICAga2luZCAgIGtGICAgc2Nyb2xsLWZvcndhcmQga2V5CisgICAgICAga2V5X3NmaW5kICAgICAgICAgICAgICAgICBrRk5EICAgKjAgICBzaGlmdGVkIGZpbmQga2V5CisgICAgICAga2V5X3NoZWxwICAgICAgICAgICAgICAgICBrSExQICAgIzEgICBzaGlmdGVkIGhlbHAga2V5CisgICAgICAga2V5X3Nob21lICAgICAgICAgICAgICAgICBrSE9NICAgIzIgICBzaGlmdGVkIGhvbWUga2V5CisgICAgICAga2V5X3NpYyAgICAgICAgICAgICAgICAgICBrSUMgICAgIzMgICBzaGlmdGVkIGluc2VydC1jaGFyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0ZXIga2V5CisgICAgICAga2V5X3NsZWZ0ICAgICAgICAgICAgICAgICBrTEZUICAgIzQgICBzaGlmdGVkIGxlZnQtYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleQorICAgICAgIGtleV9zbWVzc2FnZSAgICAgICAgICAgICAga01TRyAgICVhICAgc2hpZnRlZCBtZXNzYWdlIGtleQorICAgICAgIGtleV9zbW92ZSAgICAgICAgICAgICAgICAga01PViAgICViICAgc2hpZnRlZCBtb3ZlIGtleQorICAgICAgIGtleV9zbmV4dCAgICAgICAgICAgICAgICAga05YVCAgICVjICAgc2hpZnRlZCBuZXh0IGtleQorICAgICAgIGtleV9zb3B0aW9ucyAgICAgICAgICAgICAga09QVCAgICVkICAgc2hpZnRlZCBvcHRpb25zIGtleQorICAgICAgIGtleV9zcHJldmlvdXMgICAgICAgICAgICAga1BSViAgICVlICAgc2hpZnRlZCBwcmV2aW91cyBrZXkKKyAgICAgICBrZXlfc3ByaW50ICAgICAgICAgICAgICAgIGtQUlQgICAlZiAgIHNoaWZ0ZWQgcHJpbnQga2V5CisgICAgICAga2V5X3NyICAgICAgICAgICAgICAgICAgICBrcmkgICAga1IgICBzY3JvbGwtYmFja3dhcmQga2V5CisgICAgICAga2V5X3NyZWRvICAgICAgICAgICAgICAgICBrUkRPICAgJWcgICBzaGlmdGVkIHJlZG8ga2V5CisgICAgICAga2V5X3NyZXBsYWNlICAgICAgICAgICAgICBrUlBMICAgJWggICBzaGlmdGVkIHJlcGxhY2Uga2V5CisgICAgICAga2V5X3NyaWdodCAgICAgICAgICAgICAgICBrUklUICAgJWkgICBzaGlmdGVkIHJpZ2h0LWFycm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkKKyAgICAgICBrZXlfc3JzdW1lICAgICAgICAgICAgICAgIGtSRVMgICAlaiAgIHNoaWZ0ZWQgcmVzdW1lIGtleQorICAgICAgIGtleV9zc2F2ZSAgICAgICAgICAgICAgICAga1NBViAgICExICAgc2hpZnRlZCBzYXZlIGtleQorICAgICAgIGtleV9zc3VzcGVuZCAgICAgICAgICAgICAga1NQRCAgICEyICAgc2hpZnRlZCBzdXNwZW5kIGtleQorICAgICAgIGtleV9zdGFiICAgICAgICAgICAgICAgICAga2h0cyAgIGtUICAgc2V0LXRhYiBrZXkKKyAgICAgICBrZXlfc3VuZG8gICAgICAgICAgICAgICAgIGtVTkQgICAhMyAgIHNoaWZ0ZWQgdW5kbyBrZXkKKyAgICAgICBrZXlfc3VzcGVuZCAgICAgICAgICAgICAgIGtzcGQgICAmYW1wOzcgICBzdXNwZW5kIGtleQorICAgICAgIGtleV91bmRvICAgICAgICAgICAgICAgICAga3VuZCAgICZhbXA7OCAgIHVuZG8ga2V5CisgICAgICAga2V5X3VwICAgICAgICAgICAgICAgICAgICBrY3V1MSAga3UgICB1cC1hcnJvdyBrZXkKKyAgICAgICBrZXlwYWRfbG9jYWwgICAgICAgICAgICAgIHJta3ggICBrZSAgIGxlYXZlICdrZXktCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZF90cmFuc21pdCcgbW9kZQorICAgICAgIGtleXBhZF94bWl0ICAgICAgICAgICAgICAgc21reCAgIGtzICAgZW50ZXIgJ2tleS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvYXJkX3RyYW5zbWl0JyBtb2RlCisgICAgICAgbGFiX2YwICAgICAgICAgICAgICAgICAgICBsZjAgICAgbDAgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGYwIGlmIG5vdCBmMAorICAgICAgIGxhYl9mMSAgICAgICAgICAgICAgICAgICAgbGYxICAgIGwxICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmMSBpZiBub3QgZjEKKyAgICAgICBsYWJfZjEwICAgICAgICAgICAgICAgICAgIGxmMTAgICBsYSAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjEwIGlmIG5vdCBmMTAKKyAgICAgICBsYWJfZjIgICAgICAgICAgICAgICAgICAgIGxmMiAgICBsMiAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjIgaWYgbm90IGYyCisgICAgICAgbGFiX2YzICAgICAgICAgICAgICAgICAgICBsZjMgICAgbDMgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGYzIGlmIG5vdCBmMworICAgICAgIGxhYl9mNCAgICAgICAgICAgICAgICAgICAgbGY0ICAgIGw0ICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmNCBpZiBub3QgZjQKKworCisgICAgICAgbGFiX2Y1ICAgICAgICAgICAgICAgICAgICBsZjUgICAgbDUgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGY1IGlmIG5vdCBmNQorICAgICAgIGxhYl9mNiAgICAgICAgICAgICAgICAgICAgbGY2ICAgIGw2ICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmNiBpZiBub3QgZjYKKyAgICAgICBsYWJfZjcgICAgICAgICAgICAgICAgICAgIGxmNyAgICBsNyAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjcgaWYgbm90IGY3CisgICAgICAgbGFiX2Y4ICAgICAgICAgICAgICAgICAgICBsZjggICAgbDggICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGY4IGlmIG5vdCBmOAorICAgICAgIGxhYl9mOSAgICAgICAgICAgICAgICAgICAgbGY5ICAgIGw5ICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmOSBpZiBub3QgZjkKKyAgICAgICBsYWJlbF9mb3JtYXQgICAgICAgICAgICAgIGZsbiAgICBMZiAgIGxhYmVsIGZvcm1hdAorICAgICAgIGxhYmVsX29mZiAgICAgICAgICAgICAgICAgcm1sbiAgIExGICAgdHVybiBvZmYgc29mdCBsYWJlbHMKKyAgICAgICBsYWJlbF9vbiAgICAgICAgICAgICAgICAgIHNtbG4gICBMTyAgIHR1cm4gb24gc29mdCBsYWJlbHMKKyAgICAgICBtZXRhX29mZiAgICAgICAgICAgICAgICAgIHJtbSAgICBtbyAgIHR1cm4gb2ZmIG1ldGEgbW9kZQorICAgICAgIG1ldGFfb24gICAgICAgICAgICAgICAgICAgc21tICAgIG1tICAgdHVybiBvbiBtZXRhIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4dGgtYml0IG9uKQorICAgICAgIG1pY3JvX2NvbHVtbl9hZGRyZXNzICAgICAgbWhwYSAgIFpZICAgTGlrZSBjb2x1bW5fYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWljcm8gbW9kZQorICAgICAgIG1pY3JvX2Rvd24gICAgICAgICAgICAgICAgbWN1ZDEgIFpaICAgTGlrZSBjdXJzb3JfZG93biBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm8gbW9kZQorICAgICAgIG1pY3JvX2xlZnQgICAgICAgICAgICAgICAgbWN1YjEgIFphICAgTGlrZSBjdXJzb3JfbGVmdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm8gbW9kZQorICAgICAgIG1pY3JvX3JpZ2h0ICAgICAgICAgICAgICAgbWN1ZjEgIFpiICAgTGlrZSBjdXJzb3JfcmlnaHQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3JvIG1vZGUKKyAgICAgICBtaWNyb19yb3dfYWRkcmVzcyAgICAgICAgIG12cGEgICBaYyAgIExpa2Ugcm93X2FkZHJlc3MgIzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1pY3JvIG1vZGUKKyAgICAgICBtaWNyb191cCAgICAgICAgICAgICAgICAgIG1jdXUxICBaZCAgIExpa2UgY3Vyc29yX3VwIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNybyBtb2RlCisgICAgICAgbmV3bGluZSAgICAgICAgICAgICAgICAgICBuZWwgICAgbncgICBuZXdsaW5lIChiZWhhdmUgbGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3IgZm9sbG93ZWQgYnkgbGYpCisgICAgICAgb3JkZXJfb2ZfcGlucyAgICAgICAgICAgICBwb3JkZXIgWmUgICBNYXRjaCBzb2Z0d2FyZSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcmludC1oZWFkIHBpbnMKKyAgICAgICBvcmlnX2NvbG9ycyAgICAgICAgICAgICAgIG9jICAgICBvYyAgIFNldCBhbGwgY29sb3IgcGFpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBvcmlnaW5hbCBvbmVzCisgICAgICAgb3JpZ19wYWlyICAgICAgICAgICAgICAgICBvcCAgICAgb3AgICBTZXQgZGVmYXVsdCBwYWlyIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHMgb3JpZ2luYWwgdmFsdWUKKyAgICAgICBwYWRfY2hhciAgICAgICAgICAgICAgICAgIHBhZCAgICBwYyAgIHBhZGRpbmcgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RlYWQgb2YgbnVsbCkKKyAgICAgICBwYXJtX2RjaCAgICAgICAgICAgICAgICAgIGRjaCAgICBEQyAgIGRlbGV0ZSAjMSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUCopCisgICAgICAgcGFybV9kZWxldGVfbGluZSAgICAgICAgICBkbCAgICAgREwgICBkZWxldGUgIzEgbGluZXMgKFAqKQorICAgICAgIHBhcm1fZG93bl9jdXJzb3IgICAgICAgICAgY3VkICAgIERPICAgZG93biAjMSBsaW5lcyAoUCopCisgICAgICAgcGFybV9kb3duX21pY3JvICAgICAgICAgICBtY3VkICAgWmYgICBMaWtlIHBhcm1fZG93bl9jdXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3IgaW4gbWljcm8gbW9kZQorICAgICAgIHBhcm1faWNoICAgICAgICAgICAgICAgICAgaWNoICAgIElDICAgaW5zZXJ0ICMxIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKikKKyAgICAgICBwYXJtX2luZGV4ICAgICAgICAgICAgICAgIGluZG4gICBTRiAgIHNjcm9sbCBmb3J3YXJkICMxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyAoUCkKKyAgICAgICBwYXJtX2luc2VydF9saW5lICAgICAgICAgIGlsICAgICBBTCAgIGluc2VydCAjMSBsaW5lcyAoUCopCisgICAgICAgcGFybV9sZWZ0X2N1cnNvciAgICAgICAgICBjdWIgICAgTEUgICBtb3ZlICMxIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsZWZ0IChQKQorICAgICAgIHBhcm1fbGVmdF9taWNybyAgICAgICAgICAgbWN1YiAgIFpnICAgTGlrZSBwYXJtX2xlZnRfY3VyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29yIGluIG1pY3JvIG1vZGUKKyAgICAgICBwYXJtX3JpZ2h0X2N1cnNvciAgICAgICAgIGN1ZiAgICBSSSAgIG1vdmUgIzEgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IChQKikKKyAgICAgICBwYXJtX3JpZ2h0X21pY3JvICAgICAgICAgIG1jdWYgICBaaCAgIExpa2UgcGFybV9yaWdodF9jdXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3IgaW4gbWljcm8gbW9kZQorICAgICAgIHBhcm1fcmluZGV4ICAgICAgICAgICAgICAgcmluICAgIFNSICAgc2Nyb2xsIGJhY2sgIzEgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKQorICAgICAgIHBhcm1fdXBfY3Vyc29yICAgICAgICAgICAgY3V1ICAgIFVQICAgdXAgIzEgbGluZXMgKFAqKQorICAgICAgIHBhcm1fdXBfbWljcm8gICAgICAgICAgICAgbWN1dSAgIFppICAgTGlrZSBwYXJtX3VwX2N1cnNvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWljcm8gbW9kZQorICAgICAgIHBrZXlfa2V5ICAgICAgICAgICAgICAgICAgcGZrZXkgIHBrICAgcHJvZ3JhbSBmdW5jdGlvbiBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIHRvIHR5cGUgc3RyaW5nICMyCisKKworICAgICAgIHBrZXlfbG9jYWwgICAgICAgICAgICAgICAgcGZsb2MgIHBsICAgcHJvZ3JhbSBmdW5jdGlvbiBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIHRvIGV4ZWN1dGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMgorICAgICAgIHBrZXlfeG1pdCAgICAgICAgICAgICAgICAgcGZ4ICAgIHB4ICAgcHJvZ3JhbSBmdW5jdGlvbiBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIHRvIHRyYW5zbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgIzIKKyAgICAgICBwbGFiX25vcm0gICAgICAgICAgICAgICAgIHBsbiAgICBwbiAgIHByb2dyYW0gbGFiZWwgIzEgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgc3RyaW5nICMyCisgICAgICAgcHJpbnRfc2NyZWVuICAgICAgICAgICAgICBtYzAgICAgcHMgICBwcmludCBjb250ZW50cyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICAgcHJ0cl9ub24gICAgICAgICAgICAgICAgICBtYzVwICAgcE8gICB0dXJuIG9uIHByaW50ZXIgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBieXRlcworICAgICAgIHBydHJfb2ZmICAgICAgICAgICAgICAgICAgbWM0ICAgIHBmICAgdHVybiBvZmYgcHJpbnRlcgorICAgICAgIHBydHJfb24gICAgICAgICAgICAgICAgICAgbWM1ICAgIHBvICAgdHVybiBvbiBwcmludGVyCisgICAgICAgcHVsc2UgICAgICAgICAgICAgICAgICAgICBwdWxzZSAgUFUgICBzZWxlY3QgcHVsc2UgZGlhbGluZworICAgICAgIHF1aWNrX2RpYWwgICAgICAgICAgICAgICAgcWRpYWwgIFFEICAgZGlhbCBudW1iZXIgIzEgd2l0aC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBjaGVja2luZworICAgICAgIHJlbW92ZV9jbG9jayAgICAgICAgICAgICAgcm1jbGsgIFJDICAgcmVtb3ZlIGNsb2NrCisgICAgICAgcmVwZWF0X2NoYXIgICAgICAgICAgICAgICByZXAgICAgcnAgICByZXBlYXQgY2hhciAjMSAjMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgKFAqKQorICAgICAgIHJlcV9mb3JfaW5wdXQgICAgICAgICAgICAgcmZpICAgIFJGICAgc2VuZCBuZXh0IGlucHV0IGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3IgcHR5cykKKyAgICAgICByZXNldF8xc3RyaW5nICAgICAgICAgICAgIHJzMSAgICByMSAgIHJlc2V0IHN0cmluZworICAgICAgIHJlc2V0XzJzdHJpbmcgICAgICAgICAgICAgcnMyICAgIHIyICAgcmVzZXQgc3RyaW5nCisgICAgICAgcmVzZXRfM3N0cmluZyAgICAgICAgICAgICByczMgICAgcjMgICByZXNldCBzdHJpbmcKKyAgICAgICByZXNldF9maWxlICAgICAgICAgICAgICAgIHJmICAgICByZiAgIG5hbWUgb2YgcmVzZXQgZmlsZQorICAgICAgIHJlc3RvcmVfY3Vyc29yICAgICAgICAgICAgcmMgICAgIHJjICAgcmVzdG9yZSBjdXJzb3IgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIG9mIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfY3Vyc29yCisgICAgICAgcm93X2FkZHJlc3MgICAgICAgICAgICAgICB2cGEgICAgY3YgICB2ZXJ0aWNhbCBwb3NpdGlvbiAjMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGUgKFApCisgICAgICAgc2F2ZV9jdXJzb3IgICAgICAgICAgICAgICBzYyAgICAgc2MgICBzYXZlIGN1cnJlbnQgY3Vyc29yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAoUCkKKyAgICAgICBzY3JvbGxfZm9yd2FyZCAgICAgICAgICAgIGluZCAgICBzZiAgIHNjcm9sbCB0ZXh0IHVwIChQKQorICAgICAgIHNjcm9sbF9yZXZlcnNlICAgICAgICAgICAgcmkgICAgIHNyICAgc2Nyb2xsIHRleHQgZG93biAoUCkKKyAgICAgICBzZWxlY3RfY2hhcl9zZXQgICAgICAgICAgIHNjcyAgICBaaiAgIFNlbGVjdCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCwgIzEKKyAgICAgICBzZXRfYXR0cmlidXRlcyAgICAgICAgICAgIHNnciAgICBzYSAgIGRlZmluZSB2aWRlbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyAjMS0jOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBHOSkKKyAgICAgICBzZXRfYmFja2dyb3VuZCAgICAgICAgICAgIHNldGIgICBTYiAgIFNldCBiYWNrZ3JvdW5kIGNvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMQorICAgICAgIHNldF9ib3R0b21fbWFyZ2luICAgICAgICAgc21nYiAgIFprICAgU2V0IGJvdHRvbSBtYXJnaW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgbGluZQorICAgICAgIHNldF9ib3R0b21fbWFyZ2luX3Bhcm0gICAgc21nYnAgIFpsICAgU2V0IGJvdHRvbSBtYXJnaW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgIzEgb3IgKGlmIHNtZ3RwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgZ2l2ZW4pICMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyBmcm9tIGJvdHRvbQorICAgICAgIHNldF9jbG9jayAgICAgICAgICAgICAgICAgc2NsayAgIFNDICAgc2V0IGNsb2NrLCAjMSBocnMgIzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnMgIzMgc2VjcworICAgICAgIHNldF9jb2xvcl9wYWlyICAgICAgICAgICAgc2NwICAgIHNwICAgU2V0IGN1cnJlbnQgY29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgdG8gIzEKKyAgICAgICBzZXRfZm9yZWdyb3VuZCAgICAgICAgICAgIHNldGYgICBTZiAgIFNldCBmb3JlZ3JvdW5kIGNvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMQorICAgICAgIHNldF9sZWZ0X21hcmdpbiAgICAgICAgICAgc21nbCAgIE1MICAgc2V0IGxlZnQgc29mdCBtYXJnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IGN1cnJlbnQgY29sdW1uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHNtZ2wuIChNTCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEJTRCB0ZXJtY2FwKS4KKyAgICAgICBzZXRfbGVmdF9tYXJnaW5fcGFybSAgICAgIHNtZ2xwICBabSAgIFNldCBsZWZ0IChyaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbiBhdCBjb2x1bW4gIzEKKyAgICAgICBzZXRfcmlnaHRfbWFyZ2luICAgICAgICAgIHNtZ3IgICBNUiAgIHNldCByaWdodCBzb2Z0IG1hci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbiBhdCBjdXJyZW50IGNvbC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVtbgorICAgICAgIHNldF9yaWdodF9tYXJnaW5fcGFybSAgICAgc21ncnAgIFpuICAgU2V0IHJpZ2h0IG1hcmdpbiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICMxCisKKyAgICAgICBzZXRfdGFiICAgICAgICAgICAgICAgICAgIGh0cyAgICBzdCAgIHNldCBhIHRhYiBpbiBldmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LCBjdXJyZW50IGNvbHVtbnMKKyAgICAgICBzZXRfdG9wX21hcmdpbiAgICAgICAgICAgIHNtZ3QgICBabyAgIFNldCB0b3AgbWFyZ2luIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IGxpbmUKKyAgICAgICBzZXRfdG9wX21hcmdpbl9wYXJtICAgICAgIHNtZ3RwICBacCAgIFNldCB0b3AgKGJvdHRvbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbiBhdCByb3cgIzEKKyAgICAgICBzZXRfd2luZG93ICAgICAgICAgICAgICAgIHdpbmQgICB3aSAgIGN1cnJlbnQgd2luZG93IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyAjMS0jMiBjb2xzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMy0jNAorICAgICAgIHN0YXJ0X2JpdF9pbWFnZSAgICAgICAgICAgc2JpbSAgIFpxICAgU3RhcnQgcHJpbnRpbmcgYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBncmFwaGljcworICAgICAgIHN0YXJ0X2NoYXJfc2V0X2RlZiAgICAgICAgc2NzZCAgIFpyICAgU3RhcnQgY2hhcmFjdGVyIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiAjMSwgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzIgY2hhcmFjdGVycyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldAorICAgICAgIHN0b3BfYml0X2ltYWdlICAgICAgICAgICAgcmJpbSAgIFpzICAgU3RvcCBwcmludGluZyBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIGdyYXBoaWNzCisgICAgICAgc3RvcF9jaGFyX3NldF9kZWYgICAgICAgICByY3NkICAgWnQgICBFbmQgZGVmaW5pdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNldCAjMQorICAgICAgIHN1YnNjcmlwdF9jaGFyYWN0ZXJzICAgICAgc3ViY3MgIFp1ICAgTGlzdCBvZiBzdWJzY3JpcHQtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmxlIGNoYXJhY3RlcnMKKyAgICAgICBzdXBlcnNjcmlwdF9jaGFyYWN0ZXJzICAgIHN1cGNzICBadiAgIExpc3Qgb2Ygc3VwZXJzY3JpcHQtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmxlIGNoYXJhY3RlcnMKKyAgICAgICB0YWIgICAgICAgICAgICAgICAgICAgICAgIGh0ICAgICB0YSAgIHRhYiB0byBuZXh0IDgtc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHRhYiBzdG9wCisgICAgICAgdGhlc2VfY2F1c2VfY3IgICAgICAgICAgICBkb2NyICAgWncgICBQcmludGluZyBhbnkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlcyBDUgorICAgICAgIHRvX3N0YXR1c19saW5lICAgICAgICAgICAgdHNsICAgIHRzICAgbW92ZSB0byBzdGF0dXMgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAjMQorICAgICAgIHRvbmUgICAgICAgICAgICAgICAgICAgICAgdG9uZSAgIFRPICAgc2VsZWN0IHRvdWNoIHRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxpbmcKKyAgICAgICB1bmRlcmxpbmVfY2hhciAgICAgICAgICAgIHVjICAgICB1YyAgIHVuZGVybGluZSBjaGFyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXN0IGl0CisgICAgICAgdXBfaGFsZl9saW5lICAgICAgICAgICAgICBodSAgICAgaHUgICBoYWxmIGEgbGluZSB1cAorICAgICAgIHVzZXIwICAgICAgICAgICAgICAgICAgICAgdTAgICAgIHUwICAgVXNlciBzdHJpbmcgIzAKKyAgICAgICB1c2VyMSAgICAgICAgICAgICAgICAgICAgIHUxICAgICB1MSAgIFVzZXIgc3RyaW5nICMxCisgICAgICAgdXNlcjIgICAgICAgICAgICAgICAgICAgICB1MiAgICAgdTIgICBVc2VyIHN0cmluZyAjMgorICAgICAgIHVzZXIzICAgICAgICAgICAgICAgICAgICAgdTMgICAgIHUzICAgVXNlciBzdHJpbmcgIzMKKyAgICAgICB1c2VyNCAgICAgICAgICAgICAgICAgICAgIHU0ICAgICB1NCAgIFVzZXIgc3RyaW5nICM0CisgICAgICAgdXNlcjUgICAgICAgICAgICAgICAgICAgICB1NSAgICAgdTUgICBVc2VyIHN0cmluZyAjNQorICAgICAgIHVzZXI2ICAgICAgICAgICAgICAgICAgICAgdTYgICAgIHU2ICAgVXNlciBzdHJpbmcgIzYKKyAgICAgICB1c2VyNyAgICAgICAgICAgICAgICAgICAgIHU3ICAgICB1NyAgIFVzZXIgc3RyaW5nICM3CisgICAgICAgdXNlcjggICAgICAgICAgICAgICAgICAgICB1OCAgICAgdTggICBVc2VyIHN0cmluZyAjOAorICAgICAgIHVzZXI5ICAgICAgICAgICAgICAgICAgICAgdTkgICAgIHU5ICAgVXNlciBzdHJpbmcgIzkKKyAgICAgICB3YWl0X3RvbmUgICAgICAgICAgICAgICAgIHdhaXQgICBXQSAgIHdhaXQgZm9yIGRpYWwtdG9uZQorICAgICAgIHhvZmZfY2hhcmFjdGVyICAgICAgICAgICAgeG9mZmMgIFhGICAgWE9GRiBjaGFyYWN0ZXIKKyAgICAgICB4b25fY2hhcmFjdGVyICAgICAgICAgICAgIHhvbmMgICBYTiAgIFhPTiBjaGFyYWN0ZXIKKyAgICAgICB6ZXJvX21vdGlvbiAgICAgICAgICAgICAgIHplcm9tICBaeCAgIE5vIG1vdGlvbiBmb3Igc3Vic2UtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVudCBjaGFyYWN0ZXIKKworICAgICAgIFRoZSAgZm9sbG93aW5nICBzdHJpbmcgIGNhcGFiaWxpdGllcyAgYXJlICBwcmVzZW50ICBpbiB0aGUKKyAgICAgICBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsIGJ1dCB3ZXJlIG9yaWdpbmFsbHkgbm90ICBkb2N1bWVudGVkCisgICAgICAgaW4gdGhlIG1hbiBwYWdlLgorCisKKyAgICAgICAgICAgICAgIDxTVFJPTkc+VmFyaWFibGU8L1NUUk9ORz4gICAgICAgICAgPFNUUk9ORz5DYXAtPC9TVFJPTkc+ICAgICA8U1RST05HPlRDYXA8L1NUUk9ORz4gICAgPFNUUk9ORz5EZXNjcmlwdGlvbjwvU1RST05HPgorICAgICAgICAgICAgICAgIDxTVFJPTkc+U3RyaW5nPC9TVFJPTkc+ICAgICAgICAgICA8U1RST05HPm5hbWU8L1NUUk9ORz4gICAgIDxTVFJPTkc+Q29kZTwvU1RST05HPgorICAgICAgIGFsdF9zY2FuY29kZV9lc2MgICAgICAgICAgc2Nlc2EgICAgUzggICBBbHRlcm5hdGUgZXNjYXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzY2FuY29kZSBlbXUtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGlvbgorICAgICAgIGJpdF9pbWFnZV9jYXJyaWFnZV9yZXR1cm4gYmljciAgICAgWXYgICBNb3ZlIHRvIGJlZ2lubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzYW1lIHJvdworICAgICAgIGJpdF9pbWFnZV9uZXdsaW5lICAgICAgICAgYmluZWwgICAgWnogICBNb3ZlIHRvIG5leHQgcm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBiaXQgaW1hZ2UKKworICAgICAgIGJpdF9pbWFnZV9yZXBlYXQgICAgICAgICAgYmlyZXAgICAgWHkgICBSZXBlYXQgYml0IGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgIzEgIzIgdGltZXMKKyAgICAgICBjaGFyX3NldF9uYW1lcyAgICAgICAgICAgIGNzbm0gICAgIFp5ICAgUHJvZHVjZSAjMSd0aCBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gbGlzdCBvZiBjaGFyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RlciBzZXQgbmFtZXMKKyAgICAgICBjb2RlX3NldF9pbml0ICAgICAgICAgICAgIGNzaW4gICAgIGNpICAgSW5pdCBzZXF1ZW5jZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgY29kZXNldHMKKyAgICAgICBjb2xvcl9uYW1lcyAgICAgICAgICAgICAgIGNvbG9ybm0gIFl3ICAgR2l2ZSBuYW1lIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciAjMQorICAgICAgIGRlZmluZV9iaXRfaW1hZ2VfcmVnaW9uICAgZGVmYmkgICAgWXggICBEZWZpbmUgcmVjdGFuLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWFsYXIgYml0IGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbgorICAgICAgIGRldmljZV90eXBlICAgICAgICAgICAgICAgZGV2dCAgICAgZHYgICBJbmRpY2F0ZSBsYW4tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1YWdlL2NvZGVzZXQgc3VwLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0CisgICAgICAgZGlzcGxheV9wY19jaGFyICAgICAgICAgICBkaXNwYyAgICBTMSAgIERpc3BsYXkgUEMgY2hhcmFjLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXIgIzEKKyAgICAgICBlbmRfYml0X2ltYWdlX3JlZ2lvbiAgICAgIGVuZGJpICAgIFl5ICAgRW5kIGEgYml0LWltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbgorICAgICAgIGVudGVyX3BjX2NoYXJzZXRfbW9kZSAgICAgc21wY2ggICAgUzIgICBFbnRlciBQQyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBtb2RlCisgICAgICAgZW50ZXJfc2NhbmNvZGVfbW9kZSAgICAgICBzbXNjICAgICBTNCAgIEVudGVyIFBDIHNjYW5jb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICBleGl0X3BjX2NoYXJzZXRfbW9kZSAgICAgIHJtcGNoICAgIFMzICAgRXhpdCBQQyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBtb2RlCisgICAgICAgZXhpdF9zY2FuY29kZV9tb2RlICAgICAgICBybXNjICAgICBTNSAgIEV4aXQgUEMgc2NhbmNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGdldF9tb3VzZSAgICAgICAgICAgICAgICAgZ2V0bSAgICAgR20gICBDdXJzZXMgc2hvdWxkIGdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgIzEgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ZWQuCisgICAgICAga2V5X21vdXNlICAgICAgICAgICAgICAgICBrbW91cyAgICBLbSAgIE1vdXNlIGV2ZW50IGhhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnJlZAorICAgICAgIG1vdXNlX2luZm8gICAgICAgICAgICAgICAgbWluZm8gICAgTWkgICBNb3VzZSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyAgICAgICBwY190ZXJtX29wdGlvbnMgICAgICAgICAgIHBjdHJtICAgIFM2ICAgUEMgdGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucworICAgICAgIHBrZXlfcGxhYiAgICAgICAgICAgICAgICAgcGZ4bCAgICAgeGwgICBQcm9ncmFtIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSAjMSB0byB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAjMiBhbmQgc2hvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgIzMKKyAgICAgICByZXFfbW91c2VfcG9zICAgICAgICAgICAgIHJlcW1wICAgIFJRICAgUmVxdWVzdCBtb3VzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbgorICAgICAgIHNjYW5jb2RlX2VzY2FwZSAgICAgICAgICAgc2Nlc2MgICAgUzcgICBFc2NhcGUgZm9yIHNjYW4tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgZW11bGF0aW9uCisgICAgICAgc2V0MF9kZXNfc2VxICAgICAgICAgICAgICBzMGRzICAgICBzMCAgIFNoaWZ0IHRvIGNvZGVzZXQgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRVVDIHNldCAwLCBBU0NJSSkKKyAgICAgICBzZXQxX2Rlc19zZXEgICAgICAgICAgICAgIHMxZHMgICAgIHMxICAgU2hpZnQgdG8gY29kZXNldCAxCisgICAgICAgc2V0Ml9kZXNfc2VxICAgICAgICAgICAgICBzMmRzICAgICBzMiAgIFNoaWZ0IHRvIGNvZGVzZXQgMgorICAgICAgIHNldDNfZGVzX3NlcSAgICAgICAgICAgICAgczNkcyAgICAgczMgICBTaGlmdCB0byBjb2Rlc2V0IDMKKyAgICAgICBzZXRfYV9iYWNrZ3JvdW5kICAgICAgICAgIHNldGFiICAgIEFCICAgU2V0IGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgdG8gIzEsIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOU0kgZXNjYXBlCisgICAgICAgc2V0X2FfZm9yZWdyb3VuZCAgICAgICAgICBzZXRhZiAgICBBRiAgIFNldCBmb3JlZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIHRvICMxLCB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTlNJIGVzY2FwZQorICAgICAgIHNldF9jb2xvcl9iYW5kICAgICAgICAgICAgc2V0Y29sb3IgWXogICBDaGFuZ2UgdG8gcmliYm9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yICMxCisgICAgICAgc2V0X2xyX21hcmdpbiAgICAgICAgICAgICBzbWdsciAgICBNTCAgIFNldCBib3RoIGxlZnQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IG1hcmdpbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEsICMyLiAgKE1MIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBpbiBCU0QgdGVybS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwKS4KKyAgICAgICBzZXRfcGFnZV9sZW5ndGggICAgICAgICAgIHNsaW5lcyAgIFlaICAgU2V0IHBhZ2UgbGVuZ3RoIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGxpbmVzCisKKyAgICAgICBzZXRfdGJfbWFyZ2luICAgICAgICAgICAgIHNtZ3RiICAgIE1UICAgU2V0cyBib3RoIHRvcCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tIG1hcmdpbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEsICMyCisKKyAgICAgICAgVGhlIFhTSSBDdXJzZXMgIHN0YW5kYXJkICBhZGRlZCAgdGhlc2UuICAgVGhleSAgYXJlICBzb21lCisgICAgICAgIHBvc3QtNC4xICB2ZXJzaW9ucyAgb2YgU3lzdGVtIFYgY3Vyc2VzLCBlLmcuLCBTb2xhcmlzIDIuNQorICAgICAgICBhbmQgSVJJWCA2LnguICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHRlcm1jYXAgIG5hbWVzICBmb3IgIHRoZW0gIGFyZQorICAgICAgICBpbnZlbnRlZDsgYWNjb3JkaW5nIHRvIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCB0aGV5IGhhdmUKKyAgICAgICAgbm8gdGVybWNhcCBuYW1lcy4gIElmIHlvdXIgY29tcGlsZWQgdGVybWluZm8gZW50cmllcyAgdXNlCisgICAgICAgIHRoZXNlLCAgdGhleSAgbWF5ICBub3QgYmUgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCBTeXN0ZW0gVgorICAgICAgICB0ZXJtaW5mbyBlbnRyaWVzIGFmdGVyIFNWcjQuMTsgYmV3YXJlIQorCisKKyAgICAgICAgICAgICAgICA8U1RST05HPlZhcmlhYmxlPC9TVFJPTkc+ICAgICAgICAgPFNUUk9ORz5DYXAtPC9TVFJPTkc+ICAgPFNUUk9ORz5UQ2FwPC9TVFJPTkc+ICAgICA8U1RST05HPkRlc2NyaXB0aW9uPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgIDxTVFJPTkc+U3RyaW5nPC9TVFJPTkc+ICAgICAgICAgIDxTVFJPTkc+bmFtZTwvU1RST05HPiAgIDxTVFJPTkc+Q29kZTwvU1RST05HPgorICAgICAgICBlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUgZWhobG0gIFhoICAgRW50ZXIgaG9yaXpvbnRhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0IG1vZGUKKyAgICAgICAgZW50ZXJfbGVmdF9obF9tb2RlICAgICAgIGVsaGxtICBYbCAgIEVudGVyIGxlZnQgaGlnaGxpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgIGVudGVyX2xvd19obF9tb2RlICAgICAgICBlbG9obG0gWG8gICBFbnRlciBsb3cgaGlnaGxpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgIGVudGVyX3JpZ2h0X2hsX21vZGUgICAgICBlcmhsbSAgWHIgICBFbnRlciByaWdodCBoaWdoLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgbW9kZQorICAgICAgICBlbnRlcl90b3BfaGxfbW9kZSAgICAgICAgZXRobG0gIFh0ICAgRW50ZXIgdG9wIGhpZ2hsaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgICBlbnRlcl92ZXJ0aWNhbF9obF9tb2RlICAgZXZobG0gIFh2ICAgRW50ZXIgdmVydGljYWwgaGlnaC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0IG1vZGUKKyAgICAgICAgc2V0X2FfYXR0cmlidXRlcyAgICAgICAgIHNncjEgICBzQSAgIERlZmluZSBzZWNvbmQgc2V0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlbyBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMS0jNgorICAgICAgICBzZXRfcGdsZW5faW5jaCAgICAgICAgICAgc2xlbmd0aHNMICAgWUkgU2V0IHBhZ2UgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byAjMSBodW5kcmVkdGggb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluY2gKKworICAgPFNUUk9ORz5BPC9TVFJPTkc+IDxTVFJPTkc+U2FtcGxlPC9TVFJPTkc+IDxTVFJPTkc+RW50cnk8L1NUUk9ORz4KKyAgICAgICBUaGUgZm9sbG93aW5nIGVudHJ5LCBkZXNjcmliaW5nIGFuIEFOU0ktc3RhbmRhcmQgdGVybWluYWwsCisgICAgICAgaXMgIHJlcHJlc2VudGF0aXZlICBvZiAgd2hhdCBhIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZW50cnkgZm9yIGEgbW9kZXJuCisgICAgICAgdGVybWluYWwgdHlwaWNhbGx5IGxvb2tzIGxpa2UuCisKKyAgICAgYW5zaXxhbnNpL3BjLXRlcm0gY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorICAgICAgICAgICAgIG1jNWksCisgICAgICAgICAgICAgY29sb3JzIzgsIG5jdiMzLCBwYWlycyM2NCwKKyAgICAgICAgICAgICBjdWI9XEVbJXAxJWRELCBjdWQ9XEVbJXAxJWRCLCBjdWY9XEVbJXAxJWRDLAorICAgICAgICAgICAgIGN1dT1cRVslcDElZEEsIGRjaD1cRVslcDElZFAsIGRsPVxFWyVwMSVkTSwKKyAgICAgICAgICAgICBlY2g9XEVbJXAxJWRYLCBlbDE9XEVbMUssIGhwYT1cRVslcDElZEcsIGh0PVxFW0ksCisgICAgICAgICAgICAgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbmRuPVxFWyVwMSVkUywgLmluZG49XEVbJXAxJWRULAorICAgICAgICAgICAgIGticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorICAgICAgICAgICAgIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRVtNLCBrZjEwPVxFW1YsCisgICAgICAgICAgICAga2YxMT1cRVtXLCBrZjEyPVxFW1gsIGtmMj1cRVtOLCBrZjM9XEVbTywga2Y0PVxFW1AsCisgICAgICAgICAgICAga2Y1PVxFW1EsIGtmNj1cRVtSLCBrZjc9XEVbUywga2Y4PVxFW1QsIGtmOT1cRVtVLAorICAgICAgICAgICAgIGtpY2gxPVxFW0wsIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBuZWw9XHJcRVtTLAorICAgICAgICAgICAgIG9wPVxFWzM3OzQwbSwgcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLAorICAgICAgICAgICAgIHJpbj1cRVslcDElZFQsIHMwZHM9XEUoQiwgczFkcz1cRSlCLCBzMmRzPVxFKkIsCisgICAgICAgICAgICAgczNkcz1cRStCLCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorICAgICAgICAgICAgIHNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKyAgICAgICAgICAgICBzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisgICAgICAgICAgICAgc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOCV0OzExJTslPyVwOSV0OzEyJTttLAorICAgICAgICAgICAgIHNncjA9XEVbMDsxMG0sIHRiYz1cRVsyZywgdTY9XEVbJWQ7JWRSLCB1Nz1cRVs2biwKKyAgICAgICAgICAgICB1OD1cRVs/JVs7MDEyMzQ1Njc4OV1jLCB1OT1cRVtjLCB2cGE9XEVbJXAxJWRkLAorCisgICAgICAgRW50cmllcyBtYXkgY29udGludWUgb250byBtdWx0aXBsZSBsaW5lcyBieSBwbGFjaW5nICB3aGl0ZQorICAgICAgIHNwYWNlICBhdCAgdGhlICBiZWdpbm5pbmcgIG9mICBlYWNoIGxpbmUgZXhjZXB0IHRoZSBmaXJzdC4KKyAgICAgICBDb21tZW50cyBtYXkgYmUgaW5jbHVkZWQgb24gbGluZXMgIGJlZ2lubmluZyAgd2l0aCAgYGAjJycuCisgICAgICAgQ2FwYWJpbGl0aWVzIGluIDxFTT50ZXJtaW5mbzwvRU0+IGFyZSBvZiB0aHJlZSB0eXBlczogQm9vbGVhbiBjYXBhLQorICAgICAgIGJpbGl0aWVzIHdoaWNoIGluZGljYXRlIHRoYXQgdGhlIHRlcm1pbmFsIGhhcyBzb21lIHBhcnRpYy0KKyAgICAgICB1bGFyICBmZWF0dXJlLCBudW1lcmljIGNhcGFiaWxpdGllcyBnaXZpbmcgdGhlIHNpemUgb2YgdGhlCisgICAgICAgdGVybWluYWwgb3IgdGhlIHNpemUgIG9mICBwYXJ0aWN1bGFyICBkZWxheXMsICBhbmQgIHN0cmluZworICAgICAgIGNhcGFiaWxpdGllcywgIHdoaWNoICBnaXZlIGEgc2VxdWVuY2Ugd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgICAgICBwZXJmb3JtIHBhcnRpY3VsYXIgdGVybWluYWwgb3BlcmF0aW9ucy4KKworCisgICA8U1RST05HPlR5cGVzPC9TVFJPTkc+IDxTVFJPTkc+b2Y8L1NUUk9ORz4gPFNUUk9ORz5DYXBhYmlsaXRpZXM8L1NUUk9ORz4KKyAgICAgICBBbGwgY2FwYWJpbGl0aWVzIGhhdmUgbmFtZXMuICBGb3IgaW5zdGFuY2UsIHRoZSBmYWN0ICB0aGF0CisgICAgICAgQU5TSS1zdGFuZGFyZCAgdGVybWluYWxzICBoYXZlIDxFTT5hdXRvbWF0aWM8L0VNPiA8RU0+bWFyZ2luczwvRU0+IChpLmUuLCBhbgorICAgICAgIGF1dG9tYXRpYyByZXR1cm4gYW5kIGxpbmUtZmVlZCB3aGVuIHRoZSBlbmQgb2YgYSAgbGluZSAgaXMKKyAgICAgICByZWFjaGVkKSAgaXMgIGluZGljYXRlZCAgYnkgIHRoZSBjYXBhYmlsaXR5IDxTVFJPTkc+YW08L1NUUk9ORz4uICBIZW5jZSB0aGUKKyAgICAgICBkZXNjcmlwdGlvbiBvZiBhbnNpIGluY2x1ZGVzIDxTVFJPTkc+YW08L1NUUk9ORz4uICBOdW1lcmljIGNhcGFiaWxpdGllcyBhcmUKKyAgICAgICBmb2xsb3dlZCAgYnkgIHRoZSBjaGFyYWN0ZXIgYCMnIGFuZCB0aGVuIGEgcG9zaXRpdmUgdmFsdWUuCisgICAgICAgVGh1cyA8U1RST05HPmNvbHM8L1NUUk9ORz4sIHdoaWNoIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlICB0ZXItCisgICAgICAgbWluYWwgIGhhcywgIGdpdmVzICB0aGUgIHZhbHVlICBgODAnIGZvciBhbnNpLiAgVmFsdWVzIGZvcgorICAgICAgIG51bWVyaWMgY2FwYWJpbGl0aWVzIG1heSBiZSBzcGVjaWZpZWQgaW4gZGVjaW1hbCwgb2N0YWwgb3IKKyAgICAgICBoZXhhZGVjaW1hbCwgIHVzaW5nIHRoZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlIGNvbnZlbnRpb25zCisgICAgICAgKGUuZy4sIDI1NSwgMDM3NyBhbmQgMHhmZiBvciAweEZGKS4KKworICAgICAgIEZpbmFsbHksIHN0cmluZyB2YWx1ZWQgY2FwYWJpbGl0aWVzLCBzdWNoIGFzIDxTVFJPTkc+ZWw8L1NUUk9ORz4gKGNsZWFyICB0bworICAgICAgIGVuZCBvZiBsaW5lIHNlcXVlbmNlKSBhcmUgZ2l2ZW4gYnkgdGhlIHR3by1jaGFyYWN0ZXIgY29kZSwKKyAgICAgICBhbiBgPScsIGFuZCB0aGVuIGEgc3RyaW5nIGVuZGluZyAgYXQgIHRoZSAgbmV4dCAgZm9sbG93aW5nCisgICAgICAgYCwnLgorCisgICAgICAgQSAgbnVtYmVyICBvZiAgZXNjYXBlIHNlcXVlbmNlcyBhcmUgcHJvdmlkZWQgaW4gdGhlIHN0cmluZworICAgICAgIHZhbHVlZCBjYXBhYmlsaXRpZXMgZm9yIGVhc3kgZW5jb2Rpbmcgb2YgY2hhcmFjdGVycyB0aGVyZS4KKyAgICAgICBCb3RoICA8U1RST05HPlxFPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+XGU8L1NUUk9ORz4gbWFwIHRvIGFuIEVTQ0FQRSBjaGFyYWN0ZXIsIDxTVFJPTkc+Xng8L1NUUk9ORz4gbWFwcyB0byBhCisgICAgICAgY29udHJvbC14IGZvciBhbnkgYXBwcm9wcmlhdGUgeCwgYW5kIHRoZSBzZXF1ZW5jZXMgIDxTVFJPTkc+XG48L1NUUk9ORz4gIDxTVFJPTkc+XGw8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlxyPC9TVFJPTkc+ICA8U1RST05HPlx0PC9TVFJPTkc+ICA8U1RST05HPlxiPC9TVFJPTkc+ICA8U1RST05HPlxmPC9TVFJPTkc+ICA8U1RST05HPlxzPC9TVFJPTkc+IGdpdmUgYSBuZXdsaW5lLCBsaW5lLWZlZWQsIHJldHVybiwgdGFiLAorICAgICAgIGJhY2tzcGFjZSwgZm9ybS1mZWVkLCBhbmQgc3BhY2UuICBPdGhlciBlc2NhcGVzIGluY2x1ZGUgPFNUUk9ORz5cXjwvU1RST05HPgorICAgICAgIGZvciAgPFNUUk9ORz5ePC9TVFJPTkc+LCA8U1RST05HPlxcPC9TVFJPTkc+IGZvciA8U1RST05HPlw8L1NUUk9ORz4sIDxTVFJPTkc+XDwvU1RST05HPiwgZm9yIGNvbW1hLCA8U1RST05HPlw6PC9TVFJPTkc+IGZvciA8U1RST05HPjo8L1NUUk9ORz4sIGFuZCA8U1RST05HPlwwPC9TVFJPTkc+IGZvciBudWxsLgorICAgICAgICg8U1RST05HPlwwPC9TVFJPTkc+IHdpbGwgcHJvZHVjZSBcMjAwLCB3aGljaCBkb2VzIG5vdCB0ZXJtaW5hdGUgIGEgIHN0cmluZworICAgICAgIGJ1dCBiZWhhdmVzIGFzIGEgbnVsbCBjaGFyYWN0ZXIgb24gbW9zdCB0ZXJtaW5hbHMsIHByb3ZpZC0KKyAgICAgICBpbmcgQ1M3IGlzIHNwZWNpZmllZC4gIFNlZSA8U1RST05HPjxBIEhSRUY9InN0dHkuMS5odG1sIj5zdHR5KDEpPC9BPjwvU1RST05HPi4pICBGaW5hbGx5LCAgY2hhcmFjdGVycworICAgICAgIG1heSBiZSBnaXZlbiBhcyB0aHJlZSBvY3RhbCBkaWdpdHMgYWZ0ZXIgYSA8U1RST05HPlw8L1NUUk9ORz4uCisKKyAgICAgICBBICBkZWxheSAgaW4gIG1pbGxpc2Vjb25kcyBtYXkgYXBwZWFyIGFueXdoZXJlIGluIGEgc3RyaW5nCisgICAgICAgY2FwYWJpbGl0eSwgZW5jbG9zZWQgaW4gJCZsdDsuLiZndDsgYnJhY2tldHMsIGFzIGluICA8U1RST05HPmVsPC9TVFJPTkc+PVxFSyQmbHQ7NSZndDssCisgICAgICAgYW5kICBwYWRkaW5nICBjaGFyYWN0ZXJzICBhcmUgc3VwcGxpZWQgYnkgPEVNPnRwdXRzPC9FTT4gdG8gcHJvdmlkZQorICAgICAgIHRoaXMgZGVsYXkuICBUaGUgZGVsYXkgbXVzdCBiZSBhIG51bWJlciB3aXRoIGF0ICBtb3N0ICBvbmUKKyAgICAgICBkZWNpbWFsIHBsYWNlIG9mIHByZWNpc2lvbjsgaXQgbWF5IGJlIGZvbGxvd2VkIGJ5IHN1ZmZpeGVzCisgICAgICAgYConIG9yICcvJyBvciBib3RoLiAgQSAgYConICBpbmRpY2F0ZXMgIHRoYXQgIHRoZSAgcGFkZGluZworICAgICAgIHJlcXVpcmVkICBpcyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgYWZmZWN0ZWQKKyAgICAgICBieSB0aGUgIG9wZXJhdGlvbiwgIGFuZCAgdGhlICBhbW91bnQgIGdpdmVuICBpcyAgdGhlICBwZXItCisgICAgICAgYWZmZWN0ZWQtdW5pdCAgcGFkZGluZyAgcmVxdWlyZWQuICAgKEluIHRoZSBjYXNlIG9mIGluc2VydAorICAgICAgIGNoYXJhY3RlciwgIHRoZSAgZmFjdG9yICBpcyAgc3RpbGwgIHRoZSAgbnVtYmVyICBvZiAgPEVNPmxpbmVzPC9FTT4KKyAgICAgICBhZmZlY3RlZC4pICAgTm9ybWFsbHksICBwYWRkaW5nICBpcyBhZHZpc29yeSBpZiB0aGUgZGV2aWNlCisgICAgICAgaGFzIHRoZSA8U1RST05HPnhvbjwvU1RST05HPiBjYXBhYmlsaXR5OyBpdCBpcyB1c2VkICBmb3IgIGNvc3QgIGNvbXB1dGF0aW9uCisgICAgICAgYnV0ICBkb2VzIG5vdCB0cmlnZ2VyIGRlbGF5cy4gIEEgYC8nIHN1ZmZpeCBpbmRpY2F0ZXMgdGhhdAorICAgICAgIHRoZSBwYWRkaW5nIGlzIG1hbmRhdG9yeSBhbmQgZm9yY2VzIGEgZGVsYXkgb2YgIHRoZSAgZ2l2ZW4KKyAgICAgICBudW1iZXIgIG9mICBtaWxsaXNlY29uZHMgIGV2ZW4gb24gZGV2aWNlcyBmb3Igd2hpY2ggPFNUUk9ORz54b248L1NUUk9ORz4gaXMKKyAgICAgICBwcmVzZW50IHRvIGluZGljYXRlIGZsb3cgY29udHJvbC4KKworICAgICAgIFNvbWV0aW1lcyBpbmRpdmlkdWFsIGNhcGFiaWxpdGllcyBtdXN0IGJlICBjb21tZW50ZWQgIG91dC4KKyAgICAgICBUbyAgZG8gdGhpcywgcHV0IGEgcGVyaW9kIGJlZm9yZSB0aGUgY2FwYWJpbGl0eSBuYW1lLiAgRm9yCisgICAgICAgZXhhbXBsZSwgc2VlIHRoZSBzZWNvbmQgPFNUUk9ORz5pbmQ8L1NUUk9ORz4gaW4gdGhlIGV4YW1wbGUgYWJvdmUuCisKKworICAgPFNUUk9ORz5GZXRjaGluZzwvU1RST05HPiA8U1RST05HPkNvbXBpbGVkPC9TVFJPTkc+IDxTVFJPTkc+RGVzY3JpcHRpb25zPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRFUk1JTkZPIGlzIHNldCwgaXQgaXMgIGludGVyLQorICAgICAgIHByZXRlZCAgYXMgdGhlIHBhdGhuYW1lIG9mIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGNvbS0KKyAgICAgICBwaWxlZCBkZXNjcmlwdGlvbiB5b3UgYXJlIHdvcmtpbmcgb24uICBPbmx5IHRoYXQgZGlyZWN0b3J5CisgICAgICAgaXMgc2VhcmNoZWQuCisKKyAgICAgICBJZiAgVEVSTUlORk8gIGlzICBub3Qgc2V0LCB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gb2YgdGhlIHRlci0KKyAgICAgICBtaW5mbyByZWFkZXIgY29kZSAgd2lsbCAgaW5zdGVhZCAgbG9vayAgaW4gIHRoZSAgZGlyZWN0b3J5CisgICAgICAgPFNUUk9ORz4kSE9NRS8udGVybWluZm88L1NUUk9ORz4gIGZvciAgYSBjb21waWxlZCBkZXNjcmlwdGlvbi4gIElmIGl0IGZhaWxzCisgICAgICAgdG8gZmluZCBvbmUgIHRoZXJlLCAgYW5kICB0aGUgIGVudmlyb25tZW50ICB2YXJpYWJsZSAgVEVSLQorICAgICAgIE1JTkZPX0RJUlMgIGlzIHNldCwgaXQgd2lsbCBpbnRlcnByZXQgdGhlIGNvbnRlbnRzIG9mIHRoYXQKKyAgICAgICB2YXJpYWJsZSBhcyBhIGxpc3Qgb2YgY29sb24tIHNlcGFyYXRlZCBkaXJlY3RvcmllcyAgdG8gIGJlCisgICAgICAgc2VhcmNoZWQgIChhbiAgZW1wdHkgIGVudHJ5IGlzIGludGVycHJldGVkIGFzIGEgY29tbWFuZCB0bworICAgICAgIHNlYXJjaCA8RU0+L3Vzci9zaGFyZS90ZXJtaW5mbzwvRU0+KS4gIElmIG5vIGRlc2NyaXB0aW9uICBpcyAgZm91bmQKKyAgICAgICBpbiAgYW55IG9mIHRoZSBURVJNSU5GT19ESVJTIGRpcmVjdG9yaWVzLCB0aGUgZmV0Y2ggZmFpbHMuCisKKyAgICAgICBJZiBuZWl0aGVyIFRFUk1JTkZPIG5vciBURVJNSU5GT19ESVJTICBpcyAgc2V0LCAgdGhlICBsYXN0CisgICAgICAgcGxhY2UgICB0cmllZCAgd2lsbCAgYmUgIHRoZSAgc3lzdGVtICB0ZXJtaW5mbyAgZGlyZWN0b3J5LAorICAgICAgIDxFTT4vdXNyL3NoYXJlL3Rlcm1pbmZvPC9FTT4uCisKKyAgICAgICAoTmVpdGhlciB0aGUgIDxTVFJPTkc+JEhPTUUvLnRlcm1pbmZvPC9TVFJPTkc+ICBsb29rdXBzICBub3IgIFRFUk1JTkZPX0RJUlMKKyAgICAgICBleHRlbnNpb25zICAgYXJlICBzdXBwb3J0ZWQgIHVuZGVyICBzdG9jayAgU3lzdGVtICBWICB0ZXItCisgICAgICAgbWluZm8vY3Vyc2VzLikKKworCisgICA8U1RST05HPlByZXBhcmluZzwvU1RST05HPiA8U1RST05HPkRlc2NyaXB0aW9uczwvU1RST05HPgorICAgICAgIFdlIG5vdyBvdXRsaW5lIGhvdyB0byBwcmVwYXJlIGRlc2NyaXB0aW9ucyAgb2YgIHRlcm1pbmFscy4KKyAgICAgICBUaGUgIG1vc3QgIGVmZmVjdGl2ZSB3YXkgdG8gcHJlcGFyZSBhIHRlcm1pbmFsIGRlc2NyaXB0aW9uCisgICAgICAgaXMgYnkgaW1pdGF0aW5nIHRoZSBkZXNjcmlwdGlvbiBvZiBhIHNpbWlsYXIgIHRlcm1pbmFsICBpbgorICAgICAgIDxFTT50ZXJtaW5mbzwvRU0+ICBhbmQgIHRvICBidWlsZCB1cCBhIGRlc2NyaXB0aW9uIGdyYWR1YWxseSwgdXNpbmcKKyAgICAgICBwYXJ0aWFsIGRlc2NyaXB0aW9ucyB3aXRoIDxFTT52aTwvRU0+IG9yIHNvbWUgb3RoZXIgc2NyZWVuLW9yaWVudGVkCisgICAgICAgcHJvZ3JhbSAgdG8gIGNoZWNrIHRoYXQgdGhleSBhcmUgY29ycmVjdC4gIEJlIGF3YXJlIHRoYXQgYQorICAgICAgIHZlcnkgdW51c3VhbCB0ZXJtaW5hbCBtYXkgZXhwb3NlIGRlZmljaWVuY2llcyBpbiB0aGUgYWJpbC0KKyAgICAgICBpdHkgIG9mICB0aGUgIDxFTT50ZXJtaW5mbzwvRU0+ICBmaWxlIHRvIGRlc2NyaWJlIGl0IG9yIGJ1Z3MgaW4gdGhlCisgICAgICAgc2NyZWVuLWhhbmRsaW5nIGNvZGUgb2YgdGhlIHRlc3QgcHJvZ3JhbS4KKworICAgICAgIFRvIGdldCB0aGUgcGFkZGluZyBmb3IgaW5zZXJ0IGxpbmUgcmlnaHQgKGlmIHRoZSAgdGVybWluYWwKKyAgICAgICBtYW51ZmFjdHVyZXIgZGlkIG5vdCBkb2N1bWVudCBpdCkgYSBzZXZlcmUgdGVzdCBpcyB0byBlZGl0CisgICAgICAgYSBsYXJnZSBmaWxlIGF0IDk2MDAgYmF1ZCwgZGVsZXRlIDE2IG9yIHNvIGxpbmVzIGZyb20gIHRoZQorICAgICAgIG1pZGRsZSAgb2YgIHRoZSBzY3JlZW4sIHRoZW4gaGl0IHRoZSBgdScga2V5IHNldmVyYWwgdGltZXMKKyAgICAgICBxdWlja2x5LiAgSWYgdGhlIHRlcm1pbmFsIG1lc3NlcyB1cCwgbW9yZSBwYWRkaW5nIGlzICB1c3UtCisgICAgICAgYWxseSAgbmVlZGVkLiAgQSBzaW1pbGFyIHRlc3QgY2FuIGJlIHVzZWQgZm9yIGluc2VydCBjaGFyLQorICAgICAgIGFjdGVyLgorCisKKyAgIDxTVFJPTkc+QmFzaWM8L1NUUk9ORz4gPFNUUk9ORz5DYXBhYmlsaXRpZXM8L1NUUk9ORz4KKyAgICAgICBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgb24gZWFjaCBsaW5lICBmb3IgIHRoZSAgdGVybWluYWwgIGlzCisgICAgICAgZ2l2ZW4gIGJ5IHRoZSA8U1RST05HPmNvbHM8L1NUUk9ORz4gbnVtZXJpYyBjYXBhYmlsaXR5LiAgSWYgdGhlIHRlcm1pbmFsIGlzCisgICAgICAgYSBDUlQsIHRoZW4gdGhlIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgc2NyZWVuIGlzIGdpdmVuICBieQorICAgICAgIHRoZSA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGNhcGFiaWxpdHkuICBJZiB0aGUgdGVybWluYWwgd3JhcHMgYXJvdW5kIHRvIHRoZQorICAgICAgIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lIHdoZW4gaXQgcmVhY2hlcyB0aGUgcmlnaHQgIG1hci0KKyAgICAgICBnaW4sIHRoZW4gaXQgc2hvdWxkIGhhdmUgdGhlIDxTVFJPTkc+YW08L1NUUk9ORz4gY2FwYWJpbGl0eS4gIElmIHRoZSB0ZXJtaS0KKyAgICAgICBuYWwgY2FuIGNsZWFyIGl0cyBzY3JlZW4sIGxlYXZpbmcgdGhlIGN1cnNvciBpbiAgdGhlICBob21lCisgICAgICAgcG9zaXRpb24sICB0aGVuIHRoaXMgaXMgZ2l2ZW4gYnkgdGhlIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gc3RyaW5nIGNhcGFiaWwtCisgICAgICAgaXR5LiAgSWYgdGhlIHRlcm1pbmFsIG92ZXJzdHJpa2VzIChyYXRoZXIgdGhhbiBjbGVhcmluZyAgYQorICAgICAgIHBvc2l0aW9uICB3aGVuICBhIGNoYXJhY3RlciBpcyBzdHJ1Y2sgb3ZlcikgdGhlbiBpdCBzaG91bGQKKyAgICAgICBoYXZlIHRoZSA8U1RST05HPm9zPC9TVFJPTkc+IGNhcGFiaWxpdHkuICBJZiB0aGUgIHRlcm1pbmFsICBpcyAgYSAgcHJpbnRpbmcKKyAgICAgICB0ZXJtaW5hbCwgIHdpdGggbm8gc29mdCBjb3B5IHVuaXQsIGdpdmUgaXQgYm90aCA8U1RST05HPmhjPC9TVFJPTkc+IGFuZCA8U1RST05HPm9zPC9TVFJPTkc+LgorICAgICAgICg8U1RST05HPm9zPC9TVFJPTkc+IGFwcGxpZXMgdG8gc3RvcmFnZSBzY29wZSB0ZXJtaW5hbHMsIHN1Y2ggYXMgIFRFS1RST05JWAorICAgICAgIDQwMTAgIHNlcmllcywgYXMgd2VsbCBhcyBoYXJkIGNvcHkgYW5kIEFQTCB0ZXJtaW5hbHMuKSAgSWYKKyAgICAgICB0aGVyZSBpcyBhIGNvZGUgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlCisgICAgICAgY3VycmVudCByb3csIGdpdmUgdGhpcyBhcyA8U1RST05HPmNyPC9TVFJPTkc+LiAgKE5vcm1hbGx5IHRoaXMgd2lsbCBiZSBjYXItCisgICAgICAgcmlhZ2UgcmV0dXJuLCBjb250cm9sIE0uKSAgSWYgdGhlcmUgaXMgYSBjb2RlICB0byAgcHJvZHVjZQorICAgICAgIGFuIGF1ZGlibGUgc2lnbmFsIChiZWxsLCBiZWVwLCBldGMpIGdpdmUgdGhpcyBhcyA8U1RST05HPmJlbDwvU1RST05HPi4KKworICAgICAgIElmICB0aGVyZSBpcyBhIGNvZGUgdG8gbW92ZSB0aGUgY3Vyc29yIG9uZSBwb3NpdGlvbiB0byB0aGUKKyAgICAgICBsZWZ0IChzdWNoIGFzIGJhY2tzcGFjZSkgdGhhdCBjYXBhYmlsaXR5IHNob3VsZCAgYmUgIGdpdmVuCisgICAgICAgYXMgIDxTVFJPTkc+Y3ViMTwvU1RST05HPi4gICBTaW1pbGFybHksIGNvZGVzIHRvIG1vdmUgdG8gdGhlIHJpZ2h0LCB1cCwgYW5kCisgICAgICAgZG93biBzaG91bGQgYmUgZ2l2ZW4gYXMgPFNUUk9ORz5jdWYxPC9TVFJPTkc+LCA8U1RST05HPmN1dTE8L1NUUk9ORz4sIGFuZCA8U1RST05HPmN1ZDE8L1NUUk9ORz4uICBUaGVzZSBsb2NhbAorICAgICAgIGN1cnNvciAgbW90aW9ucyAgc2hvdWxkIG5vdCBhbHRlciB0aGUgdGV4dCB0aGV5IHBhc3Mgb3ZlciwKKyAgICAgICBmb3IgZXhhbXBsZSwgeW91IHdvdWxkIG5vdCBub3JtYWxseSB1c2UgIGA8U1RST05HPmN1ZjE8L1NUUk9ORz49ICcgIGJlY2F1c2UKKyAgICAgICB0aGUgc3BhY2Ugd291bGQgZXJhc2UgdGhlIGNoYXJhY3RlciBtb3ZlZCBvdmVyLgorCisgICAgICAgQSAgdmVyeSAgaW1wb3J0YW50ICBwb2ludCAgaGVyZSAgaXMgIHRoYXQgdGhlIGxvY2FsIGN1cnNvcgorICAgICAgIG1vdGlvbnMgZW5jb2RlZCBpbiA8RU0+dGVybWluZm88L0VNPiBhcmUgdW5kZWZpbmVkIGF0IHRoZSBsZWZ0ICBhbmQKKyAgICAgICB0b3AgIGVkZ2VzICBvZiAgYSAgQ1JUICB0ZXJtaW5hbC4gICBQcm9ncmFtcyAgc2hvdWxkIG5ldmVyCisgICAgICAgYXR0ZW1wdCB0byBiYWNrc3BhY2UgYXJvdW5kIHRoZSBsZWZ0IGVkZ2UsICB1bmxlc3MgIDxTVFJPTkc+Ync8L1NUUk9ORz4gIGlzCisgICAgICAgZ2l2ZW4sIGFuZCBuZXZlciBhdHRlbXB0IHRvIGdvIHVwIGxvY2FsbHkgb2ZmIHRoZSB0b3AuICBJbgorICAgICAgIG9yZGVyIHRvIHNjcm9sbCB0ZXh0IHVwLCBhIHByb2dyYW0gd2lsbCBnbyB0byAgdGhlICBib3R0b20KKyAgICAgICBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCBzZW5kIHRoZSA8U1RST05HPmluZDwvU1RST05HPiAoaW5kZXgpIHN0cmluZy4KKworICAgICAgIFRvIHNjcm9sbCB0ZXh0IGRvd24sIGEgcHJvZ3JhbSBnb2VzIHRvIHRoZSB0b3AgbGVmdCBjb3JuZXIKKyAgICAgICBvZiAgdGhlICBzY3JlZW4gIGFuZCAgc2VuZHMgdGhlIDxTVFJPTkc+cmk8L1NUUk9ORz4gKHJldmVyc2UgaW5kZXgpIHN0cmluZy4KKyAgICAgICBUaGUgc3RyaW5ncyA8U1RST05HPmluZDwvU1RST05HPiBhbmQgPFNUUk9ORz5yaTwvU1RST05HPiBhcmUgdW5kZWZpbmVkICB3aGVuICBub3QgIG9uICB0aGVpcgorICAgICAgIHJlc3BlY3RpdmUgY29ybmVycyBvZiB0aGUgc2NyZWVuLgorCisgICAgICAgUGFyYW1ldGVyaXplZCB2ZXJzaW9ucyBvZiB0aGUgc2Nyb2xsaW5nIHNlcXVlbmNlcyBhcmUgPFNUUk9ORz5pbmRuPC9TVFJPTkc+CisgICAgICAgYW5kIDxTVFJPTkc+cmluPC9TVFJPTkc+IHdoaWNoIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIDxTVFJPTkc+aW5kPC9TVFJPTkc+IGFuZCA8U1RST05HPnJpPC9TVFJPTkc+IGV4Y2VwdAorICAgICAgIHRoYXQgIHRoZXkgdGFrZSBvbmUgcGFyYW1ldGVyLCBhbmQgc2Nyb2xsIHRoYXQgbWFueSBsaW5lcy4KKyAgICAgICBUaGV5IGFyZSBhbHNvIHVuZGVmaW5lZCBleGNlcHQgYXQgdGhlIGFwcHJvcHJpYXRlIGVkZ2UgIG9mCisgICAgICAgdGhlIHNjcmVlbi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5hbTwvU1RST05HPiAgY2FwYWJpbGl0eSB0ZWxscyB3aGV0aGVyIHRoZSBjdXJzb3Igc3RpY2tzIGF0IHRoZQorICAgICAgIHJpZ2h0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB3aGVuIHRleHQgIGlzICBvdXRwdXQsICBidXQgIHRoaXMKKyAgICAgICBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byBhIDxTVFJPTkc+Y3VmMTwvU1RST05HPiBmcm9tIHRoZSBsYXN0IGNvbHVtbi4KKyAgICAgICBUaGUgb25seSBsb2NhbCBtb3Rpb24gd2hpY2ggaXMgZGVmaW5lZCBmcm9tIHRoZSBsZWZ0ICBlZGdlCisgICAgICAgaXMgIGlmICA8U1RST05HPmJ3PC9TVFJPTkc+ICBpcyAgZ2l2ZW4sIHRoZW4gYSA8U1RST05HPmN1YjE8L1NUUk9ORz4gZnJvbSB0aGUgbGVmdCBlZGdlIHdpbGwKKyAgICAgICBtb3ZlIHRvIHRoZSByaWdodCBlZGdlIG9mIHRoZSBwcmV2aW91cyByb3cuICBJZiA8U1RST05HPmJ3PC9TVFJPTkc+IGlzICBub3QKKyAgICAgICBnaXZlbiwgIHRoZSBlZmZlY3QgaXMgdW5kZWZpbmVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGRyYXctCisgICAgICAgaW5nIGEgYm94IGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgc2NyZWVuLCBmb3IgZXhhbXBsZS4gICBJZgorICAgICAgIHRoZSAgdGVybWluYWwgaGFzIHN3aXRjaCBzZWxlY3RhYmxlIGF1dG9tYXRpYyBtYXJnaW5zLCB0aGUKKyAgICAgICA8RU0+dGVybWluZm88L0VNPiBmaWxlIHVzdWFsbHkgYXNzdW1lcyB0aGF0IHRoaXMgaXMgb247ICBpLmUuLCAgPFNUUk9ORz5hbTwvU1RST05HPi4KKyAgICAgICBJZiAgdGhlICB0ZXJtaW5hbCAgaGFzICBhIGNvbW1hbmQgd2hpY2ggbW92ZXMgdG8gdGhlIGZpcnN0CisgICAgICAgY29sdW1uIG9mIHRoZSBuZXh0IGxpbmUsIHRoYXQgY29tbWFuZCBjYW4gYmUgZ2l2ZW4gYXMgIDxTVFJPTkc+bmVsPC9TVFJPTkc+CisgICAgICAgKG5ld2xpbmUpLiAgIEl0ICBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIGNvbW1hbmQgY2xlYXJzIHRoZQorICAgICAgIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBsaW5lLCBzbyBpZiB0aGUgdGVybWluYWwgIGhhcyAgbm8KKyAgICAgICA8U1RST05HPmNyPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz5sZjwvU1RST05HPiBpdCBtYXkgc3RpbGwgYmUgcG9zc2libGUgdG8gY3JhZnQgYSB3b3JraW5nIDxTVFJPTkc+bmVsPC9TVFJPTkc+CisgICAgICAgb3V0IG9mIG9uZSBvciBib3RoIG9mIHRoZW0uCisKKyAgICAgICBUaGVzZSAgY2FwYWJpbGl0aWVzICBzdWZmaWNlICB0byAgZGVzY3JpYmUgIGhhcmQtY29weSAgYW5kCisgICAgICAgImdsYXNzLXR0eSIgIHRlcm1pbmFscy4gICBUaHVzICB0aGUgIG1vZGVsICAzMyB0ZWxldHlwZSBpcworICAgICAgIGRlc2NyaWJlZCBhcworCisgICAgICAgMzN8dHR5MzN8dHR5fG1vZGVsIDMzIHRlbGV0eXBlLAorICAgICAgICAgICAgYmVsPV5HLCBjb2xzIzcyLCBjcj1eTSwgY3VkMT1eSiwgaGMsIGluZD1eSiwgb3MsCisKKyAgICAgICB3aGlsZSB0aGUgTGVhciBTaWVnbGVyIEFETS0zIGlzIGRlc2NyaWJlZCBhcworCisgICAgICAgYWRtM3wzfGxzaSBhZG0zLAorICAgICAgICAgICAgYW0sIGJlbD1eRywgY2xlYXI9XlosIGNvbHMjODAsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorICAgICAgICAgICAgaW5kPV5KLCBsaW5lcyMyNCwKKworCisgICA8U1RST05HPlBhcmFtZXRlcml6ZWQ8L1NUUk9ORz4gPFNUUk9ORz5TdHJpbmdzPC9TVFJPTkc+CisgICAgICAgQ3Vyc29yIGFkZHJlc3NpbmcgYW5kIG90aGVyIHN0cmluZ3MgIHJlcXVpcmluZyAgcGFyYW1ldGVycworICAgICAgIGluICB0aGUgIHRlcm1pbmFsICBhcmUgZGVzY3JpYmVkIGJ5IGEgcGFyYW1ldGVyaXplZCBzdHJpbmcKKyAgICAgICBjYXBhYmlsaXR5LCB3aXRoIDxTVFJPTkc+PEEgSFJFRj0icHJpbnRmLjMuaHRtbCI+cHJpbnRmKDMpPC9BPjwvU1RST05HPiBsaWtlIGVzY2FwZXMgIDxTVFJPTkc+JXg8L1NUUk9ORz4gIGluICBpdC4gICBGb3IKKyAgICAgICBleGFtcGxlLCAgdG8gIGFkZHJlc3MgIHRoZSAgY3Vyc29yLCAgdGhlIDxTVFJPTkc+Y3VwPC9TVFJPTkc+IGNhcGFiaWxpdHkgaXMKKyAgICAgICBnaXZlbiwgdXNpbmcgdHdvIHBhcmFtZXRlcnM6IHRoZSByb3cgYW5kIGNvbHVtbiB0byBhZGRyZXNzCisgICAgICAgdG8uICAoUm93cyBhbmQgY29sdW1ucyBhcmUgbnVtYmVyZWQgZnJvbSB6ZXJvIGFuZCByZWZlciB0bworICAgICAgIHRoZSBwaHlzaWNhbCBzY3JlZW4gdmlzaWJsZSB0byB0aGUgdXNlciwgbm90IHRvIGFueSB1bnNlZW4KKyAgICAgICBtZW1vcnkuKSAgIElmICB0aGUgIHRlcm1pbmFsICBoYXMgIG1lbW9yeSAgcmVsYXRpdmUgY3Vyc29yCisgICAgICAgYWRkcmVzc2luZywgdGhhdCBjYW4gYmUgaW5kaWNhdGVkIGJ5IDxTVFJPTkc+bXJjdXA8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgcGFyYW1ldGVyIG1lY2hhbmlzbSB1c2VzIGEgc3RhY2sgYW5kIHNwZWNpYWwgIDxTVFJPTkc+JTwvU1RST05HPiAgY29kZXMKKyAgICAgICB0byAgbWFuaXB1bGF0ZSAgaXQuICBUeXBpY2FsbHkgYSBzZXF1ZW5jZSB3aWxsIHB1c2ggb25lIG9mCisgICAgICAgdGhlIHBhcmFtZXRlcnMgb250byB0aGUgc3RhY2sgYW5kIHRoZW4gcHJpbnQgIGl0ICBpbiAgc29tZQorICAgICAgIGZvcm1hdC4gICBQcmludCAgKGUuZy4sICAiJWQiKSAgaXMgIGEgc3BlY2lhbCBjYXNlLiAgT3RoZXIKKyAgICAgICBvcGVyYXRpb25zLCBpbmNsdWRpbmcgIiV0IiAgcG9wICB0aGVpciAgb3BlcmFuZCAgZnJvbSAgdGhlCisgICAgICAgc3RhY2suICBJdCBpcyBub3RlZCB0aGF0IG1vcmUgY29tcGxleCBvcGVyYXRpb25zIGFyZSBvZnRlbgorICAgICAgIG5lY2Vzc2FyeSwgZS5nLiwgaW4gdGhlIDxTVFJPTkc+c2dyPC9TVFJPTkc+IHN0cmluZy4KKworICAgICAgIFRoZSA8U1RST05HPiU8L1NUUk9ORz4gZW5jb2RpbmdzIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczoKKworCisgICAgICAgJSUgICBvdXRwdXRzIGAlJworCisgICAgICAgJTxFTT5bWzwvRU0+OjxFTT5dZmxhZ3NdW3dpZHRoWy5wcmVjaXNpb25dXVs8L0VNPmRveFhzPEVNPl08L0VNPgorICAgICAgICAgICAgYXMgaW4gPFNUUk9ORz5wcmludGY8L1NUUk9ORz4sIGZsYWdzIGFyZSBbLSsjXSBhbmQgc3BhY2UuICBVc2UgIGEgIGA6JworICAgICAgICAgICAgdG8gIGFsbG93IHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBhIGAtJyBmbGFnLCBhdm9pZC0KKyAgICAgICAgICAgIGluZyBpbnRlcnByZXRpbmcgIiUtIiBhcyBhbiBvcGVyYXRvci4KKworICAgICAgICVjICAgcHJpbnQgcG9wKCkgbGlrZSAlYyBpbiA8U1RST05HPnByaW50ZjwvU1RST05HPgorCisgICAgICAgJXMgICBwcmludCBwb3AoKSBsaWtlICVzIGluIDxTVFJPTkc+cHJpbnRmPC9TVFJPTkc+CisKKyAgICAgICAlcFsxLTldCisgICAgICAgICAgICBwdXNoIDxFTT5pPC9FTT4ndGggcGFyYW1ldGVyCisKKyAgICAgICAlUFthLXpdCisgICAgICAgICAgICBzZXQgZHluYW1pYyB2YXJpYWJsZSBbYS16XSB0byBwb3AoKQorCisgICAgICAgJWdbYS16XQorICAgICAgICAgICAgZ2V0IGR5bmFtaWMgdmFyaWFibGUgW2Etel0gYW5kIHB1c2ggaXQKKworICAgICAgICVQW0EtWl0KKyAgICAgICAgICAgIHNldCBzdGF0aWMgdmFyaWFibGUgW2Etel0gdG8gcG9wKCkKKworICAgICAgICVnW0EtWl0KKyAgICAgICAgICAgIGdldCBzdGF0aWMgdmFyaWFibGUgW2Etel0gYW5kIHB1c2ggaXQKKworICAgICAgICAgICAgVGhlIHRlcm1zICAic3RhdGljIiAgYW5kICAiZHluYW1pYyIgIGFyZSAgbWlzbGVhZGluZy4KKyAgICAgICAgICAgIEhpc3RvcmljYWxseSwgIHRoZXNlIGFyZSBzaW1wbHkgdHdvIGRpZmZlcmVudCBzZXRzIG9mCisgICAgICAgICAgICB2YXJpYWJsZXMsIHdob3NlIHZhbHVlcyBhcmUgbm90IHJlc2V0ICBiZXR3ZWVuICBjYWxscworICAgICAgICAgICAgdG8gIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4uICAgSG93ZXZlciwgIHRoYXQgZmFjdCBpcyBub3QgZG9jdW1lbnRlZCBpbgorICAgICAgICAgICAgb3RoZXIgaW1wbGVtZW50YXRpb25zLiAgUmVseWluZyBvbiBpdCB3aWxsICBhZHZlcnNlbHkKKyAgICAgICAgICAgIGltcGFjdCBwb3J0YWJpbGl0eSB0byBvdGhlciBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAlJzxFTT5jPC9FTT4nIGNoYXIgY29uc3RhbnQgPEVNPmM8L0VNPgorCisgICAgICAgJXs8RU0+bm48L0VNPn0KKyAgICAgICAgICAgIGludGVnZXIgY29uc3RhbnQgPEVNPm5uPC9FTT4KKworICAgICAgICVsICAgcHVzaCBzdHJsZW4ocG9wKQorCisgICAgICAgJSsgJS0gJSogJS8gJW0KKyAgICAgICAgICAgIGFyaXRobWV0aWMgKCVtIGlzIG1vZCk6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisKKyAgICAgICAlJmFtcDsgJXwgJV4KKyAgICAgICAgICAgIGJpdCBvcGVyYXRpb25zIChBTkQsIE9SIGFuZCBleGNsdXNpdmUtT1IpOiBwdXNoKHBvcCgpCisgICAgICAgICAgICBvcCBwb3AoKSkKKworICAgICAgICU9ICUmZ3Q7ICUmbHQ7CisgICAgICAgICAgICBsb2dpY2FsIG9wZXJhdGlvbnM6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisKKyAgICAgICAlQSwgJU8KKyAgICAgICAgICAgIGxvZ2ljYWwgQU5EIGFuZCBPUiBvcGVyYXRpb25zIChmb3IgY29uZGl0aW9uYWxzKQorCisgICAgICAgJSEgJX4KKyAgICAgICAgICAgIHVuYXJ5ICBvcGVyYXRpb25zICAobG9naWNhbCAgYW5kICAgYml0ICAgY29tcGxlbWVudCk6CisgICAgICAgICAgICBwdXNoKG9wIHBvcCgpKQorCisgICAgICAgJWkgICBhZGQgMSB0byBmaXJzdCB0d28gcGFyYW1ldGVycyAoZm9yIEFOU0kgdGVybWluYWxzKQorCisgICAgICAgJT8gPEVNPmV4cHI8L0VNPiAldCA8RU0+dGhlbnBhcnQ8L0VNPiAlZSA8RU0+ZWxzZXBhcnQ8L0VNPiAlOworICAgICAgICAgICAgVGhpcyAgZm9ybXMgIGFuICBpZi10aGVuLWVsc2UuICAgVGhlICAlZSAgPEVNPmVsc2VwYXJ0PC9FTT4gaXMKKyAgICAgICAgICAgIG9wdGlvbmFsLiAgVXN1YWxseSB0aGUgJT8gPEVNPmV4cHI8L0VNPiBwYXJ0ICBwdXNoZXMgIGEgIHZhbHVlCisgICAgICAgICAgICBvbnRvICB0aGUgc3RhY2ssIGFuZCAldCBwb3BzIGl0IGZyb20gdGhlIHN0YWNrLCB0ZXN0LQorICAgICAgICAgICAgaW5nIGlmIGl0IGlzIG5vbnplcm8gKHRydWUpLiAgSWYgaXQgaXMgemVybyAgKGZhbHNlKSwKKyAgICAgICAgICAgIGNvbnRyb2wgcGFzc2VzIHRvIHRoZSAlZSAoZWxzZSkgcGFydC4KKworICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gZm9ybSBlbHNlLWlmJ3MgYSBsYSBBbGdvbCA2ODoKKyAgICAgICAgICAgICU/IGMxICV0IGIxICVlIGMyICV0IGIyICVlIGMzICV0IGIzICVlIGM0ICV0IGI0ICVlICU7CisKKyAgICAgICAgICAgIHdoZXJlIGNpIGFyZSBjb25kaXRpb25zLCBiaSBhcmUgYm9kaWVzLgorCisgICAgICAgICAgICBVc2UgdGhlIDxTVFJPTkc+LWY8L1NUUk9ORz4gb3B0aW9uIG9mIDxTVFJPTkc+dGljPC9TVFJPTkc+IG9yIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiB0byBzZWUgdGhlIHN0cnVjLQorICAgICAgICAgICAgdHVyZSAgb2YgIGlmLXRoZS1lbHNlJ3MuICBTb21lIHN0cmluZ3MsIGUuZy4sIDxTVFJPTkc+c2dyPC9TVFJPTkc+IGNhbgorICAgICAgICAgICAgYmUgdmVyeSBjb21wbGljYXRlZCB3aGVuIHdyaXR0ZW4gb24gb25lIGxpbmUuICBUaGUgPFNUUk9ORz4tZjwvU1RST05HPgorICAgICAgICAgICAgb3B0aW9uICBzcGxpdHMgIHRoZSAgc3RyaW5nIGludG8gbGluZXMgd2l0aCB0aGUgcGFydHMKKyAgICAgICAgICAgIGluZGVudGVkLgorCisgICAgICAgQmluYXJ5IG9wZXJhdGlvbnMgYXJlIGluIHBvc3RmaXggZm9ybSB3aXRoIHRoZSBvcGVyYW5kcyBpbgorICAgICAgIHRoZSAgdXN1YWwgIG9yZGVyLiAgIFRoYXQgIGlzLCAgdG8gIGdldCAgeC01IG9uZSB3b3VsZCB1c2UKKyAgICAgICAiJWd4JXs1fSUtIi4gICVQIGFuZCAlZyB2YXJpYWJsZXMgIGFyZSAgcGVyc2lzdGVudCAgYWNyb3NzCisgICAgICAgZXNjYXBlLXN0cmluZyBldmFsdWF0aW9ucy4KKworICAgICAgIENvbnNpZGVyIHRoZSBIUDI2NDUsIHdoaWNoLCB0byBnZXQgdG8gcm93IDMgYW5kIGNvbHVtbiAxMiwKKyAgICAgICBuZWVkcyB0byBiZSBzZW50IFxFJmFtcDthMTJjMDNZICBwYWRkZWQgIGZvciAgNiAgbWlsbGlzZWNvbmRzLgorICAgICAgIE5vdGUgIHRoYXQgIHRoZSAgb3JkZXIgb2YgdGhlIHJvd3MgYW5kIGNvbHVtbnMgaXMgaW52ZXJ0ZWQKKyAgICAgICBoZXJlLCBhbmQgdGhhdCB0aGUgcm93IGFuZCBjb2x1bW4gYXJlIHByaW50ZWQgYXMgdHdvICBkaWctCisgICAgICAgaXRzLiAgVGh1cyBpdHMgPFNUUk9ORz5jdXA8L1NUUk9ORz4gY2FwYWJpbGl0eSBpcyAiY3VwPTZcRSZhbXA7JXAyJTJkYyVwMSUyZFkiLgorCisgICAgICAgVGhlIE1pY3JvdGVybSBBQ1QtSVYgbmVlZHMgdGhlIGN1cnJlbnQgcm93IGFuZCBjb2x1bW4gc2VudAorICAgICAgIHByZWNlZGVkICBieSAgYSA8U1RST05HPl5UPC9TVFJPTkc+LCB3aXRoIHRoZSByb3cgYW5kIGNvbHVtbiBzaW1wbHkgZW5jb2RlZAorICAgICAgIGluIGJpbmFyeSwgImN1cD1eVCVwMSVjJXAyJWMiLiAgVGVybWluYWxzIHdoaWNoICB1c2UgICIlYyIKKyAgICAgICBuZWVkICB0byAgYmUgIGFibGUgIHRvIGJhY2tzcGFjZSB0aGUgY3Vyc29yICg8U1RST05HPmN1YjE8L1NUUk9ORz4pLCBhbmQgdG8KKyAgICAgICBtb3ZlIHRoZSBjdXJzb3IgdXAgb25lIGxpbmUgb24gdGhlIHNjcmVlbiAoPFNUUk9ORz5jdXUxPC9TVFJPTkc+KS4gIFRoaXMgaXMKKyAgICAgICBuZWNlc3NhcnkgIGJlY2F1c2UgaXQgaXMgbm90IGFsd2F5cyBzYWZlIHRvIHRyYW5zbWl0IDxTVFJPTkc+XG48L1NUUk9ORz4gPFNUUk9ORz5eRDwvU1RST05HPgorICAgICAgIGFuZCA8U1RST05HPlxyPC9TVFJPTkc+LCBhcyB0aGUgc3lzdGVtIG1heSBjaGFuZ2Ugb3IgIGRpc2NhcmQgIHRoZW0uICAgKFRoZQorICAgICAgIGxpYnJhcnkgIHJvdXRpbmVzICBkZWFsaW5nICB3aXRoIHRlcm1pbmZvIHNldCB0dHkgbW9kZXMgc28KKyAgICAgICB0aGF0IHRhYnMgYXJlIG5ldmVyIGV4cGFuZGVkLCBzbyBcdCBpcyBzYWZlIHRvIHNlbmQuICBUaGlzCisgICAgICAgdHVybnMgb3V0IHRvIGJlIGVzc2VudGlhbCBmb3IgdGhlIEFubiBBcmJvciA0MDgwLikKKworICAgICAgIEEgZmluYWwgZXhhbXBsZSBpcyB0aGUgTFNJIEFETS0zYSwgd2hpY2ggdXNlcyByb3cgYW5kIGNvbC0KKyAgICAgICB1bW4gIG9mZnNldCAgYnkgIGEgIGJsYW5rICBjaGFyYWN0ZXIsICB0aHVzICAiY3VwPVxFPSVwMSUnCisgICAgICAgJyUrJWMlcDIlJyAgJyUrJWMiLiAgIEFmdGVyIHNlbmRpbmcgYFxFPScsIHRoaXMgcHVzaGVzIHRoZQorICAgICAgIGZpcnN0IHBhcmFtZXRlciwgcHVzaGVzIHRoZSBBU0NJSSB2YWx1ZSBmb3IgYSBzcGFjZSAgKDMyKSwKKyAgICAgICBhZGRzICB0aGVtICAocHVzaGluZyAgdGhlIHN1bSBvbiB0aGUgc3RhY2sgaW4gcGxhY2Ugb2YgdGhlCisgICAgICAgdHdvIHByZXZpb3VzIHZhbHVlcykgYW5kIG91dHB1dHMgdGhhdCB2YWx1ZSBhcyAgYSAgY2hhcmFjLQorICAgICAgIHRlci4gICBUaGVuICB0aGUgIHNhbWUgIGlzICBkb25lIGZvciB0aGUgc2Vjb25kIHBhcmFtZXRlci4KKyAgICAgICBNb3JlIGNvbXBsZXggYXJpdGhtZXRpYyBpcyBwb3NzaWJsZSB1c2luZyB0aGUgc3RhY2suCisKKworICAgPFNUUk9ORz5DdXJzb3I8L1NUUk9ORz4gPFNUUk9ORz5Nb3Rpb25zPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIHRlcm1pbmFsIGhhcyBhIGZhc3Qgd2F5IHRvIGhvbWUgdGhlIGN1cnNvciAodG8gdmVyeQorICAgICAgIHVwcGVyICBsZWZ0ICBjb3JuZXIgIG9mICBzY3JlZW4pIHRoZW4gdGhpcyBjYW4gYmUgZ2l2ZW4gYXMKKyAgICAgICA8U1RST05HPmhvbWU8L1NUUk9ORz47IHNpbWlsYXJseSBhIGZhc3Qgd2F5IG9mIGdldHRpbmcgdG8gdGhlICBsb3dlciAgbGVmdC0KKyAgICAgICBoYW5kICBjb3JuZXIgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+bGw8L1NUUk9ORz47IHRoaXMgbWF5IGludm9sdmUgZ29pbmcgdXAKKyAgICAgICB3aXRoIDxTVFJPTkc+Y3V1MTwvU1RST05HPiBmcm9tIHRoZSBob21lIHBvc2l0aW9uLCAgYnV0ICBhICBwcm9ncmFtICBzaG91bGQKKyAgICAgICBuZXZlciAgZG8gdGhpcyBpdHNlbGYgKHVubGVzcyA8U1RST05HPmxsPC9TVFJPTkc+IGRvZXMpIGJlY2F1c2UgaXQgY2FuIG1ha2UKKyAgICAgICBubyBhc3N1bXB0aW9uIGFib3V0IHRoZSBlZmZlY3Qgb2YgbW92aW5nIHVwIGZyb20gdGhlICBob21lCisgICAgICAgcG9zaXRpb24uICAgTm90ZSAgdGhhdCAgdGhlICBob21lICBwb3NpdGlvbiBpcyB0aGUgc2FtZSBhcworICAgICAgIGFkZHJlc3NpbmcgdG8gKDAsMCk6IHRvIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiwKKyAgICAgICBub3QgIG9mICBtZW1vcnkuICAgKFRodXMsIHRoZSBcRUggc2VxdWVuY2Ugb24gSFAgdGVybWluYWxzCisgICAgICAgY2Fubm90IGJlIHVzZWQgZm9yIDxTVFJPTkc+aG9tZTwvU1RST05HPi4pCisKKyAgICAgICBJZiB0aGUgdGVybWluYWwgaGFzIHJvdyBvciBjb2x1bW4gYWJzb2x1dGUgY3Vyc29yIGFkZHJlc3MtCisgICAgICAgaW5nLCAgdGhlc2UgIGNhbiBiZSBnaXZlbiBhcyBzaW5nbGUgcGFyYW1ldGVyIGNhcGFiaWxpdGllcworICAgICAgIDxTVFJPTkc+aHBhPC9TVFJPTkc+IChob3Jpem9udGFsIHBvc2l0aW9uIGFic29sdXRlKSBhbmQgPFNUUk9ORz52cGE8L1NUUk9ORz4gKHZlcnRpY2FsIHBvc2ktCisgICAgICAgdGlvbiBhYnNvbHV0ZSkuICBTb21ldGltZXMgdGhlc2UgYXJlIHNob3J0ZXIgdGhhbiB0aGUgbW9yZQorICAgICAgIGdlbmVyYWwgdHdvIHBhcmFtZXRlciBzZXF1ZW5jZSAoYXMgd2l0aCAgdGhlICBocDI2NDUpICBhbmQKKyAgICAgICBjYW4gICBiZSAgIHVzZWQgIGluICBwcmVmZXJlbmNlICB0byAgPFNUUk9ORz5jdXA8L1NUUk9ORz4uICAgSWYgIHRoZXJlICBhcmUKKyAgICAgICBwYXJhbWV0ZXJpemVkIGxvY2FsIG1vdGlvbnMgKGUuZy4sIG1vdmUgPEVNPm48L0VNPiAgc3BhY2VzICB0byAgdGhlCisgICAgICAgcmlnaHQpIHRoZXNlIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPmN1ZDwvU1RST05HPiwgPFNUUk9ORz5jdWI8L1NUUk9ORz4sIDxTVFJPTkc+Y3VmPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5jdXU8L1NUUk9ORz4gd2l0aCBhCisgICAgICAgc2luZ2xlIHBhcmFtZXRlciAgaW5kaWNhdGluZyAgaG93ICBtYW55ICBzcGFjZXMgIHRvICBtb3ZlLgorICAgICAgIFRoZXNlICBhcmUgIHByaW1hcmlseSB1c2VmdWwgaWYgdGhlIHRlcm1pbmFsIGRvZXMgbm90IGhhdmUKKyAgICAgICA8U1RST05HPmN1cDwvU1RST05HPiwgc3VjaCBhcyB0aGUgVEVLVFJPTklYIDQwMjUuCisKKyAgICAgICBJZiB0aGUgdGVybWluYWwgbmVlZHMgdG8gYmUgaW4gYSBzcGVjaWFsIG1vZGUgd2hlbiBydW5uaW5nCisgICAgICAgYSBwcm9ncmFtIHRoYXQgdXNlcyB0aGVzZSBjYXBhYmlsaXRpZXMsIHRoZSBjb2RlcyB0byBlbnRlcgorICAgICAgIGFuZCBleGl0IHRoaXMgbW9kZSBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5zbWN1cDwvU1RST05HPiBhbmQgPFNUUk9ORz5ybWN1cDwvU1RST05HPi4gICBUaGlzCisgICAgICAgYXJpc2VzLCAgZm9yIGV4YW1wbGUsIGZyb20gdGVybWluYWxzIGxpa2UgdGhlIENvbmNlcHQgd2l0aAorICAgICAgIG1vcmUgdGhhbiBvbmUgcGFnZSBvZiBtZW1vcnkuICBJZiB0aGUgIHRlcm1pbmFsICBoYXMgIG9ubHkKKyAgICAgICBtZW1vcnkgIHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nIGFuZCBub3Qgc2NyZWVuIHJlbGF0aXZlCisgICAgICAgY3Vyc29yIGFkZHJlc3NpbmcsIGEgb25lIHNjcmVlbi1zaXplZCB3aW5kb3cgbXVzdCBiZSBmaXhlZAorICAgICAgIGludG8gIHRoZSB0ZXJtaW5hbCBmb3IgY3Vyc29yIGFkZHJlc3NpbmcgdG8gd29yayBwcm9wZXJseS4KKyAgICAgICBUaGlzIGlzIGFsc28gdXNlZCBmb3IgdGhlIFRFS1RST05JWCA0MDI1LCB3aGVyZSA8U1RST05HPnNtY3VwPC9TVFJPTkc+IHNldHMKKyAgICAgICB0aGUgIGNvbW1hbmQgY2hhcmFjdGVyIHRvIGJlIHRoZSBvbmUgdXNlZCBieSB0ZXJtaW5mby4gIElmCisgICAgICAgdGhlIDxTVFJPTkc+c21jdXA8L1NUUk9ORz4gc2VxdWVuY2Ugd2lsbCBub3QgcmVzdG9yZSB0aGUgIHNjcmVlbiAgYWZ0ZXIgIGFuCisgICAgICAgPFNUUk9ORz5ybWN1cDwvU1RST05HPiBzZXF1ZW5jZSBpcyBvdXRwdXQgKHRvIHRoZSBzdGF0ZSBwcmlvciB0byBvdXRwdXR0aW5nCisgICAgICAgPFNUUk9ORz5ybWN1cDwvU1RST05HPiksIHNwZWNpZnkgPFNUUk9ORz5ucnJtYzwvU1RST05HPi4KKworCisgICA8U1RST05HPkFyZWE8L1NUUk9ORz4gPFNUUk9ORz5DbGVhcnM8L1NUUk9ORz4KKyAgICAgICBJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlCisgICAgICAgZW5kICBvZiAgdGhlICBsaW5lLCAgbGVhdmluZyAgdGhlIGN1cnNvciB3aGVyZSBpdCBpcywgdGhpcworICAgICAgIHNob3VsZCBiZSBnaXZlbiBhcyA8U1RST05HPmVsPC9TVFJPTkc+LiAgSWYgdGhlIHRlcm1pbmFsIGNhbiBjbGVhciBmcm9tIHRoZQorICAgICAgIGJlZ2lubmluZyAgb2YgIHRoZSBsaW5lIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluY2x1c2l2ZSwKKyAgICAgICBsZWF2aW5nIHRoZSBjdXJzb3Igd2hlcmUgaXQgaXMsIHRoaXMgc2hvdWxkICBiZSAgZ2l2ZW4gIGFzCisgICAgICAgPFNUUk9ORz5lbDE8L1NUUk9ORz4uICAgSWYgdGhlIHRlcm1pbmFsIGNhbiBjbGVhciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uCisgICAgICAgdG8gdGhlIGVuZCBvZiB0aGUgZGlzcGxheSwgdGhlbiB0aGlzIHNob3VsZCAgYmUgIGdpdmVuICBhcworICAgICAgIDxTVFJPTkc+ZWQ8L1NUUk9ORz4uICAgPFNUUk9ORz5FZDwvU1RST05HPiAgaXMgb25seSBkZWZpbmVkIGZyb20gdGhlIGZpcnN0IGNvbHVtbiBvZiBhIGxpbmUuCisgICAgICAgKFRodXMsIGl0IGNhbiBiZSBzaW11bGF0ZWQgYnkgYSByZXF1ZXN0IHRvIGRlbGV0ZSBhICBsYXJnZQorICAgICAgIG51bWJlciBvZiBsaW5lcywgaWYgYSB0cnVlIDxTVFJPTkc+ZWQ8L1NUUk9ORz4gaXMgbm90IGF2YWlsYWJsZS4pCisKKworICAgPFNUUk9ORz5JbnNlcnQvZGVsZXRlPC9TVFJPTkc+IDxTVFJPTkc+bGluZTwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPnZlcnRpY2FsPC9TVFJPTkc+IDxTVFJPTkc+bW90aW9uczwvU1RST05HPgorICAgICAgIElmICB0aGUgdGVybWluYWwgY2FuIG9wZW4gYSBuZXcgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGxpbmUKKyAgICAgICB3aGVyZSB0aGUgY3Vyc29yIGlzLCB0aGlzIHNob3VsZCBiZSBnaXZlbiBhcyA8U1RST05HPmlsMTwvU1RST05HPjsgdGhpcyAgaXMKKyAgICAgICBkb25lICBvbmx5ICBmcm9tIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiBhIGxpbmUuICBUaGUgY3Vyc29yCisgICAgICAgbXVzdCB0aGVuIGFwcGVhciBvbiB0aGUgbmV3bHkgYmxhbmsgbGluZS4gIElmIHRoZSB0ZXJtaW5hbAorICAgICAgIGNhbiAgZGVsZXRlICB0aGUgIGxpbmUgIHdoaWNoICB0aGUgY3Vyc29yIGlzIG9uLCB0aGVuIHRoaXMKKyAgICAgICBzaG91bGQgYmUgZ2l2ZW4gYXMgPFNUUk9ORz5kbDE8L1NUUk9ORz47IHRoaXMgaXMgZG9uZSBvbmx5IGZyb20gIHRoZSAgZmlyc3QKKyAgICAgICBwb3NpdGlvbiAgb24gIHRoZSBsaW5lIHRvIGJlIGRlbGV0ZWQuICBWZXJzaW9ucyBvZiA8U1RST05HPmlsMTwvU1RST05HPiBhbmQKKyAgICAgICA8U1RST05HPmRsMTwvU1RST05HPiB3aGljaCB0YWtlIGEgc2luZ2xlIHBhcmFtZXRlciAgYW5kICBpbnNlcnQgIG9yICBkZWxldGUKKyAgICAgICB0aGF0IG1hbnkgbGluZXMgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+aWw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+ZGw8L1NUUk9ORz4uCisKKyAgICAgICBJZiAgdGhlIHRlcm1pbmFsIGhhcyBhIHNldHRhYmxlIHNjcm9sbGluZyByZWdpb24gKGxpa2UgdGhlCisgICAgICAgdnQxMDApIHRoZSBjb21tYW5kIHRvIHNldCB0aGlzIGNhbiBiZSBkZXNjcmliZWQgIHdpdGggIHRoZQorICAgICAgIDxTVFJPTkc+Y3NyPC9TVFJPTkc+ICBjYXBhYmlsaXR5LCAgd2hpY2ggIHRha2VzIHR3byBwYXJhbWV0ZXJzOiB0aGUgdG9wIGFuZAorICAgICAgIGJvdHRvbSBsaW5lcyBvZiB0aGUgc2Nyb2xsaW5nIHJlZ2lvbi4gIFRoZSBjdXJzb3IgcG9zaXRpb24KKyAgICAgICBpcywgYWxhcywgdW5kZWZpbmVkIGFmdGVyIHVzaW5nIHRoaXMgY29tbWFuZC4KKworICAgICAgIEl0ICBpcyBwb3NzaWJsZSB0byBnZXQgdGhlIGVmZmVjdCBvZiBpbnNlcnQgb3IgZGVsZXRlIGxpbmUKKyAgICAgICB1c2luZyA8U1RST05HPmNzcjwvU1RST05HPiBvbiBhIHByb3Blcmx5IGNob3NlbiByZWdpb247IHRoZSA8U1RST05HPnNjPC9TVFJPTkc+IGFuZCA8U1RST05HPnJjPC9TVFJPTkc+IChzYXZlCisgICAgICAgYW5kICByZXN0b3JlICBjdXJzb3IpICBjb21tYW5kcyBtYXkgYmUgdXNlZnVsIGZvciBlbnN1cmluZworICAgICAgIHRoYXQgeW91ciBzeW50aGVzaXplZCBpbnNlcnQvZGVsZXRlIHN0cmluZyBkb2VzICBub3QgIG1vdmUKKyAgICAgICB0aGUgIGN1cnNvci4gIChOb3RlIHRoYXQgdGhlIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gbGlicmFyeSBkb2VzIHRoaXMKKyAgICAgICBzeW50aGVzaXMgIGF1dG9tYXRpY2FsbHksICBzbyAgIHlvdSAgIG5lZWQgICBub3QgICBjb21wb3NlCisgICAgICAgaW5zZXJ0L2RlbGV0ZSBzdHJpbmdzIGZvciBhbiBlbnRyeSB3aXRoIDxTVFJPTkc+Y3NyPC9TVFJPTkc+KS4KKworICAgICAgIFlldCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgaW5zZXJ0IGFuZCBkZWxldGUgbWlnaHQgYmUgdG8KKyAgICAgICB1c2UgYSBjb21iaW5hdGlvbiBvZiBpbmRleCB3aXRoICB0aGUgIG1lbW9yeS1sb2NrICBmZWF0dXJlCisgICAgICAgZm91bmQgIG9uIHNvbWUgdGVybWluYWxzIChsaWtlIHRoZSBIUC03MDAvOTAgc2VyaWVzLCB3aGljaAorICAgICAgIGhvd2V2ZXIgYWxzbyBoYXMgaW5zZXJ0L2RlbGV0ZSkuCisKKyAgICAgICBJbnNlcnRpbmcgbGluZXMgYXQgdGhlIHRvcCBvciBib3R0b20gIG9mICB0aGUgIHNjcmVlbiAgY2FuCisgICAgICAgYWxzbyAgYmUgIGRvbmUgdXNpbmcgPFNUUk9ORz5yaTwvU1RST05HPiBvciA8U1RST05HPmluZDwvU1RST05HPiBvbiBtYW55IHRlcm1pbmFscyB3aXRob3V0IGEKKyAgICAgICB0cnVlIGluc2VydC9kZWxldGUgbGluZSwgYW5kIGlzIG9mdGVuIGZhc3RlciBldmVuIG9uICB0ZXItCisgICAgICAgbWluYWxzIHdpdGggdGhvc2UgZmVhdHVyZXMuCisKKyAgICAgICBUaGUgIGJvb2xlYW4gIDxTVFJPTkc+bm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbjwvU1RST05HPiBzaG91bGQgYmUgc2V0IGlmIGVhY2gKKyAgICAgICBzY3JvbGxpbmcgd2luZG93IGlzIGVmZmVjdGl2ZWx5IGEgdmlldyBwb3J0IG9uICBhICBzY3JlZW4tCisgICAgICAgc2l6ZWQgIGNhbnZhcy4gICBUbyAgdGVzdCAgZm9yICB0aGlzICBjYXBhYmlsaXR5LCBjcmVhdGUgYQorICAgICAgIHNjcm9sbGluZyByZWdpb24gaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuLCB3cml0ZSAgc29tZS0KKyAgICAgICB0aGluZyAgdG8gIHRoZSAgYm90dG9tIGxpbmUsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgdG9wIG9mCisgICAgICAgdGhlIHJlZ2lvbiwgYW5kIGRvIDxTVFJPTkc+cmk8L1NUUk9ORz4gZm9sbG93ZWQgYnkgPFNUUk9ORz5kbDE8L1NUUk9ORz4gb3IgPFNUUk9ORz5pbmQ8L1NUUk9ORz4uICBJZiB0aGUgZGF0YQorICAgICAgIHNjcm9sbGVkICBvZmYgIHRoZSAgYm90dG9tICBvZiAgdGhlICByZWdpb24gIGJ5IHRoZSA8U1RST05HPnJpPC9TVFJPTkc+IHJlLQorICAgICAgIGFwcGVhcnMsIHRoZW4gc2Nyb2xsaW5nIGlzIG5vbi1kZXN0cnVjdGl2ZS4gIFN5c3RlbSBWICBhbmQKKyAgICAgICBYU0kgIEN1cnNlcyAgZXhwZWN0IHRoYXQgPFNUUk9ORz5pbmQ8L1NUUk9ORz4sIDxTVFJPTkc+cmk8L1NUUk9ORz4sIDxTVFJPTkc+aW5kbjwvU1RST05HPiwgYW5kIDxTVFJPTkc+cmluPC9TVFJPTkc+IHdpbGwgc2ltdS0KKyAgICAgICBsYXRlIGRlc3RydWN0aXZlIHNjcm9sbGluZzsgdGhlaXIgIGRvY3VtZW50YXRpb24gIGNhdXRpb25zCisgICAgICAgeW91ICBub3QgIHRvICBkZWZpbmUgPFNUUk9ORz5jc3I8L1NUUk9ORz4gdW5sZXNzIHRoaXMgaXMgdHJ1ZS4gIFRoaXMgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICBpbXBsZW1lbnRhdGlvbiBpcyBtb3JlIGxpYmVyYWwgYW5kIHdpbGwgZG8gZXhwbGljaXQgZXJhc2VzCisgICAgICAgYWZ0ZXIgc2Nyb2xsaW5nIGlmIDxTVFJPTkc+bmRzdHI8L1NUUk9ORz4gaXMgZGVmaW5lZC4KKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCBoYXMgdGhlIGFiaWxpdHkgdG8gZGVmaW5lIGEgd2luZG93IGFzIHBhcnQKKyAgICAgICBvZiBtZW1vcnksIHdoaWNoIGFsbCBjb21tYW5kcyBhZmZlY3QsIGl0IHNob3VsZCAgYmUgIGdpdmVuCisgICAgICAgYXMgdGhlIHBhcmFtZXRlcml6ZWQgc3RyaW5nIDxTVFJPTkc+d2luZDwvU1RST05HPi4gIFRoZSBmb3VyIHBhcmFtZXRlcnMgYXJlCisgICAgICAgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgbGluZXMgaW4gbWVtb3J5IGFuZCAgdGhlICBzdGFydGluZworICAgICAgIGFuZCBlbmRpbmcgY29sdW1ucyBpbiBtZW1vcnksIGluIHRoYXQgb3JkZXIuCisKKyAgICAgICBJZiAgdGhlIHRlcm1pbmFsIGNhbiByZXRhaW4gZGlzcGxheSBtZW1vcnkgYWJvdmUsIHRoZW4gdGhlCisgICAgICAgPFNUUk9ORz5kYTwvU1RST05HPiBjYXBhYmlsaXR5IHNob3VsZCBiZSBnaXZlbjsgaWYgZGlzcGxheSAgbWVtb3J5ICBjYW4gIGJlCisgICAgICAgcmV0YWluZWQgIGJlbG93LCAgdGhlbiA8U1RST05HPmRiPC9TVFJPTkc+IHNob3VsZCBiZSBnaXZlbi4gIFRoZXNlIGluZGljYXRlCisgICAgICAgdGhhdCBkZWxldGluZyBhIGxpbmUgIG9yICBzY3JvbGxpbmcgIG1heSAgYnJpbmcgIG5vbi1ibGFuaworICAgICAgIGxpbmVzICB1cCAgZnJvbSAgYmVsb3cgIG9yIHRoYXQgc2Nyb2xsaW5nIGJhY2sgd2l0aCA8U1RST05HPnJpPC9TVFJPTkc+IG1heQorICAgICAgIGJyaW5nIGRvd24gbm9uLWJsYW5rIGxpbmVzLgorCisKKyAgIDxTVFJPTkc+SW5zZXJ0L0RlbGV0ZTwvU1RST05HPiA8U1RST05HPkNoYXJhY3RlcjwvU1RST05HPgorICAgICAgIFRoZXJlIGFyZSB0d28gYmFzaWMga2luZHMgb2YgIGludGVsbGlnZW50ICB0ZXJtaW5hbHMgIHdpdGgKKyAgICAgICByZXNwZWN0ICB0byBpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciB3aGljaCBjYW4gYmUgZGVzY3JpYmVkCisgICAgICAgdXNpbmcgPEVNPnRlcm1pbmZvLjwvRU0+ICBUaGUgbW9zdCBjb21tb24gIGluc2VydC9kZWxldGUgIGNoYXJhY3RlcgorICAgICAgIG9wZXJhdGlvbnMgIGFmZmVjdCBvbmx5IHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBjdXJyZW50IGxpbmUKKyAgICAgICBhbmQgc2hpZnQgY2hhcmFjdGVycyBvZmYgdGhlICBlbmQgIG9mICB0aGUgIGxpbmUgIHJpZ2lkbHkuCisgICAgICAgT3RoZXIgIHRlcm1pbmFscywgIHN1Y2ggIGFzIHRoZSBDb25jZXB0IDEwMCBhbmQgdGhlIFBlcmtpbgorICAgICAgIEVsbWVyIE93bCwgbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gIHR5cGVkICBhbmQgIHVudHlwZWQKKyAgICAgICBibGFua3MgIG9uICB0aGUgIHNjcmVlbiwgc2hpZnRpbmcgdXBvbiBhbiBpbnNlcnQgb3IgZGVsZXRlCisgICAgICAgb25seSB0byBhbiB1bnR5cGVkIGJsYW5rIG9uIHRoZSAgc2NyZWVuICB3aGljaCAgaXMgIGVpdGhlcgorICAgICAgIGVsaW1pbmF0ZWQsICBvciAgZXhwYW5kZWQgIHRvIHR3byB1bnR5cGVkIGJsYW5rcy4gIFlvdSBjYW4KKyAgICAgICBkZXRlcm1pbmUgdGhlIGtpbmQgb2YgdGVybWluYWwgeW91IGhhdmUgIGJ5ICBjbGVhcmluZyAgdGhlCisgICAgICAgc2NyZWVuICBhbmQgIHRoZW4gdHlwaW5nIHRleHQgc2VwYXJhdGVkIGJ5IGN1cnNvciBtb3Rpb25zLgorICAgICAgIFR5cGUgImFiYyAgICBkZWYiIHVzaW5nIGxvY2FsIGN1cnNvciBtb3Rpb25zIChub3QgIHNwYWNlcykKKyAgICAgICBiZXR3ZWVuIHRoZSAiYWJjIiBhbmQgdGhlICJkZWYiLiAgVGhlbiBwb3NpdGlvbiB0aGUgY3Vyc29yCisgICAgICAgYmVmb3JlIHRoZSAiYWJjIiBhbmQgcHV0IHRoZSB0ZXJtaW5hbCBpbiBpbnNlcnQgbW9kZS4gICBJZgorICAgICAgIHR5cGluZyAgY2hhcmFjdGVycyAgY2F1c2VzICB0aGUgIHJlc3Qgb2YgdGhlIGxpbmUgdG8gc2hpZnQKKyAgICAgICByaWdpZGx5IGFuZCBjaGFyYWN0ZXJzIHRvIGZhbGwgb2ZmIHRoZSBlbmQsIHRoZW4geW91ciB0ZXItCisgICAgICAgbWluYWwgIGRvZXMgIG5vdCAgZGlzdGluZ3Vpc2ggIGJldHdlZW4gIGJsYW5rcyBhbmQgdW50eXBlZAorICAgICAgIHBvc2l0aW9ucy4gIElmIHRoZSAiYWJjIiBzaGlmdHMgb3ZlciB0byAgdGhlICAiZGVmIiAgd2hpY2gKKyAgICAgICB0aGVuICBtb3ZlIHRvZ2V0aGVyIGFyb3VuZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUgYW5kCisgICAgICAgb250byB0aGUgbmV4dCBhcyB5b3UgaW5zZXJ0LCB5b3UgaGF2ZSB0aGUgc2Vjb25kICB0eXBlICBvZgorICAgICAgIHRlcm1pbmFsLCAgYW5kIHNob3VsZCBnaXZlIHRoZSBjYXBhYmlsaXR5IDxTVFJPTkc+aW48L1NUUk9ORz4sIHdoaWNoIHN0YW5kcworICAgICAgIGZvciAiaW5zZXJ0IG51bGwiLiAgV2hpbGUgdGhlc2UgYXJlIHR3byBsb2dpY2FsbHkgc2VwYXJhdGUKKyAgICAgICBhdHRyaWJ1dGVzICAob25lICBsaW5lICB2ZXJzdXMgbXVsdGktbGluZSBpbnNlcnQgbW9kZSwgYW5kCisgICAgICAgc3BlY2lhbCB0cmVhdG1lbnQgb2YgdW50eXBlZCBzcGFjZXMpIHdlIGhhdmUgc2VlbiBubyAgdGVyLQorICAgICAgIG1pbmFscyB3aG9zZSBpbnNlcnQgbW9kZSBjYW5ub3QgYmUgZGVzY3JpYmVkIHdpdGggdGhlIHNpbi0KKyAgICAgICBnbGUgYXR0cmlidXRlLgorCisgICAgICAgVGVybWluZm8gY2FuIGRlc2NyaWJlIGJvdGggdGVybWluYWxzIHdoaWNoIGhhdmUgYW4gIGluc2VydAorICAgICAgIG1vZGUsIGFuZCB0ZXJtaW5hbHMgd2hpY2ggc2VuZCBhIHNpbXBsZSBzZXF1ZW5jZSB0byBvcGVuIGEKKyAgICAgICBibGFuayBwb3NpdGlvbiBvbiB0aGUgY3VycmVudCAgbGluZS4gICBHaXZlICBhcyAgPFNUUk9ORz5zbWlyPC9TVFJPTkc+ICB0aGUKKyAgICAgICBzZXF1ZW5jZSAgdG8gIGdldCAgaW50byAgaW5zZXJ0ICBtb2RlLiAgIEdpdmUgIGFzIDxTVFJPTkc+cm1pcjwvU1RST05HPiB0aGUKKyAgICAgICBzZXF1ZW5jZSB0byBsZWF2ZSBpbnNlcnQgIG1vZGUuICAgTm93ICBnaXZlICBhcyAgPFNUUk9ORz5pY2gxPC9TVFJPTkc+ICBhbnkKKyAgICAgICBzZXF1ZW5jZSAgbmVlZGVkICB0byAgYmUgIHNlbnQgIGp1c3QgIGJlZm9yZSAgc2VuZGluZyAgdGhlCisgICAgICAgY2hhcmFjdGVyIHRvIGJlIGluc2VydGVkLiAgIE1vc3QgIHRlcm1pbmFscyAgd2l0aCAgYSAgdHJ1ZQorICAgICAgIGluc2VydCAgbW9kZSAgd2lsbCAgbm90ICBnaXZlIDxTVFJPTkc+aWNoMTwvU1RST05HPjsgdGVybWluYWxzIHdoaWNoIHNlbmQgYQorICAgICAgIHNlcXVlbmNlIHRvIG9wZW4gYSBzY3JlZW4gcG9zaXRpb24gc2hvdWxkIGdpdmUgaXQgaGVyZS4KKworICAgICAgIElmIHlvdXIgdGVybWluYWwgaGFzIGJvdGgsIGluc2VydCBtb2RlIGlzIHVzdWFsbHkgIHByZWZlci0KKyAgICAgICBhYmxlICB0byAgPFNUUk9ORz5pY2gxPC9TVFJPTkc+LiAgIFRlY2huaWNhbGx5LCAgeW91ICBzaG91bGQgIG5vdCBnaXZlIGJvdGgKKyAgICAgICB1bmxlc3MgdGhlIHRlcm1pbmFsIGFjdHVhbGx5IHJlcXVpcmVzIGJvdGggdG8gYmUgIHVzZWQgIGluCisgICAgICAgY29tYmluYXRpb24uICAgQWNjb3JkaW5nbHksICBzb21lICBub24tY3Vyc2VzIGFwcGxpY2F0aW9ucworICAgICAgIGdldCBjb25mdXNlZCBpZiBib3RoIGFyZSBwcmVzZW50OyB0aGUgc3ltcHRvbSAgaXMgIGRvdWJsZWQKKyAgICAgICBjaGFyYWN0ZXJzIGluIGFuIHVwZGF0ZSB1c2luZyBpbnNlcnQuICBUaGlzIHJlcXVpcmVtZW50IGlzCisgICAgICAgbm93IHJhcmU7IG1vc3QgPFNUUk9ORz5pY2g8L1NUUk9ORz4gc2VxdWVuY2VzIGRvIG5vdCByZXF1aXJlIHByZXZpb3VzIHNtaXIsCisgICAgICAgYW5kIG1vc3Qgc21pciBpbnNlcnQgbW9kZXMgZG8gbm90IHJlcXVpcmUgPFNUUk9ORz5pY2gxPC9TVFJPTkc+IGJlZm9yZSBlYWNoCisgICAgICAgY2hhcmFjdGVyLiAgVGhlcmVmb3JlLCB0aGUgIG5ldyAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gIGFjdHVhbGx5ICBhc3N1bWVzCisgICAgICAgdGhpcyAgaXMgdGhlIGNhc2UgYW5kIHVzZXMgZWl0aGVyIDxTVFJPTkc+cm1pcjwvU1RST05HPi88U1RST05HPnNtaXI8L1NUUk9ORz4gb3IgPFNUUk9ORz5pY2g8L1NUUk9ORz4vPFNUUk9ORz5pY2gxPC9TVFJPTkc+IGFzCisgICAgICAgYXBwcm9wcmlhdGUgKGJ1dCBub3QgYm90aCkuICBJZiB5b3UgaGF2ZSB0byB3cml0ZSBhbiBlbnRyeQorICAgICAgIHRvICBiZSAgdXNlZCB1bmRlciBuZXcgY3Vyc2VzIGZvciBhIHRlcm1pbmFsIG9sZCBlbm91Z2ggdG8KKyAgICAgICBuZWVkIGJvdGgsIGluY2x1ZGUgdGhlIDxTVFJPTkc+cm1pcjwvU1RST05HPi88U1RST05HPnNtaXI8L1NUUk9ORz4gc2VxdWVuY2VzIGluIDxTVFJPTkc+aWNoMTwvU1RST05HPi4KKworICAgICAgIElmIHBvc3QgaW5zZXJ0IHBhZGRpbmcgaXMgbmVlZGVkLCBnaXZlIHRoaXMgYXMgYSBudW1iZXIgb2YKKyAgICAgICBtaWxsaXNlY29uZHMgIGluIDxTVFJPTkc+aXA8L1NUUk9ORz4gKGEgc3RyaW5nIG9wdGlvbikuICBBbnkgb3RoZXIgc2VxdWVuY2UKKyAgICAgICB3aGljaCBtYXkgbmVlZCB0byBiZSBzZW50IGFmdGVyICBhbiAgaW5zZXJ0ICBvZiAgYSAgc2luZ2xlCisgICAgICAgY2hhcmFjdGVyIG1heSBhbHNvIGJlIGdpdmVuIGluIDxTVFJPTkc+aXA8L1NUUk9ORz4uICBJZiB5b3VyIHRlcm1pbmFsIG5lZWRzCisgICAgICAgYm90aCB0byBiZSBwbGFjZWQgaW50byBhbiBgaW5zZXJ0IG1vZGUnIGFuZCBhIHNwZWNpYWwgY29kZQorICAgICAgIHRvICBwcmVjZWRlICBlYWNoICBpbnNlcnRlZCBjaGFyYWN0ZXIsIHRoZW4gYm90aCA8U1RST05HPnNtaXI8L1NUUk9ORz4vPFNUUk9ORz5ybWlyPC9TVFJPTkc+CisgICAgICAgYW5kIDxTVFJPTkc+aWNoMTwvU1RST05HPiBjYW4gYmUgZ2l2ZW4sIGFuZCBib3RoIHdpbGwgIGJlICB1c2VkLiAgIFRoZSAgPFNUUk9ORz5pY2g8L1NUUk9ORz4KKyAgICAgICBjYXBhYmlsaXR5LCB3aXRoIG9uZSBwYXJhbWV0ZXIsIDxFTT5uPC9FTT4sIHdpbGwgcmVwZWF0IHRoZSBlZmZlY3RzCisgICAgICAgb2YgPFNUUk9ORz5pY2gxPC9TVFJPTkc+IDxFTT5uPC9FTT4gdGltZXMuCisKKyAgICAgICBJZiBwYWRkaW5nIGlzIG5lY2Vzc2FyeSBiZXR3ZWVuIGNoYXJhY3RlcnMgdHlwZWQgd2hpbGUgbm90CisgICAgICAgaW4gIGluc2VydCAgbW9kZSwgIGdpdmUgIHRoaXMgIGFzIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcworICAgICAgIHBhZGRpbmcgaW4gPFNUUk9ORz5ybXA8L1NUUk9ORz4uCisKKyAgICAgICBJdCBpcyBvY2Nhc2lvbmFsbHkgIG5lY2Vzc2FyeSAgdG8gIG1vdmUgIGFyb3VuZCAgd2hpbGUgIGluCisgICAgICAgaW5zZXJ0ICBtb2RlICB0byBkZWxldGUgY2hhcmFjdGVycyBvbiB0aGUgc2FtZSBsaW5lIChlLmcuLAorICAgICAgIGlmIHRoZXJlIGlzIGEgdGFiIGFmdGVyIHRoZSBpbnNlcnRpb24gcG9zaXRpb24pLiAgSWYgIHlvdXIKKyAgICAgICB0ZXJtaW5hbCAgYWxsb3dzICBtb3Rpb24gd2hpbGUgaW4gaW5zZXJ0IG1vZGUgeW91IGNhbiBnaXZlCisgICAgICAgdGhlIGNhcGFiaWxpdHkgPFNUUk9ORz5taXI8L1NUUk9ORz4gdG8gc3BlZWQgdXAgIGluc2VydGluZyAgaW4gIHRoaXMgIGNhc2UuCisgICAgICAgT21pdHRpbmcgIDxTVFJPTkc+bWlyPC9TVFJPTkc+ICB3aWxsICBhZmZlY3QgIG9ubHkgIHNwZWVkLiAgIFNvbWUgdGVybWluYWxzCisgICAgICAgKG5vdGFibHkgRGF0YW1lZGlhJ3MpIG11c3Qgbm90IGhhdmUgPFNUUk9ORz5taXI8L1NUUk9ORz4gYmVjYXVzZSBvZiB0aGUgd2F5CisgICAgICAgdGhlaXIgaW5zZXJ0IG1vZGUgd29ya3MuCisKKyAgICAgICBGaW5hbGx5LCAgeW91ICBjYW4gc3BlY2lmeSA8U1RST05HPmRjaDE8L1NUUk9ORz4gdG8gZGVsZXRlIGEgc2luZ2xlIGNoYXJhYy0KKyAgICAgICB0ZXIsIDxTVFJPTkc+ZGNoPC9TVFJPTkc+IHdpdGggb25lIHBhcmFtZXRlciwgPEVNPm48L0VNPiwgdG8gIGRlbGV0ZSAgPEVNPm48L0VNPiAgPEVNPmNoYXJhY3RlcnMsPC9FTT4KKyAgICAgICBhbmQgIGRlbGV0ZSBtb2RlIGJ5IGdpdmluZyA8U1RST05HPnNtZGM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cm1kYzwvU1RST05HPiB0byBlbnRlciBhbmQgZXhpdAorICAgICAgIGRlbGV0ZSBtb2RlIChhbnkgbW9kZSB0aGUgdGVybWluYWwgbmVlZHMgdG8gYmUgIHBsYWNlZCAgaW4KKyAgICAgICBmb3IgPFNUUk9ORz5kY2gxPC9TVFJPTkc+IHRvIHdvcmspLgorCisgICAgICAgQSAgY29tbWFuZCB0byBlcmFzZSA8RU0+bjwvRU0+IGNoYXJhY3RlcnMgKGVxdWl2YWxlbnQgdG8gb3V0cHV0dGluZworICAgICAgIDxFTT5uPC9FTT4gYmxhbmtzIHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3IpIGNhbiBiZSAgZ2l2ZW4gIGFzICA8U1RST05HPmVjaDwvU1RST05HPgorICAgICAgIHdpdGggb25lIHBhcmFtZXRlci4KKworCisgICA8U1RST05HPkhpZ2hsaWdodGluZyw8L1NUUk9ORz4gPFNUUk9ORz5VbmRlcmxpbmluZyw8L1NUUk9ORz4gPFNUUk9ORz5hbmQ8L1NUUk9ORz4gPFNUUk9ORz5WaXNpYmxlPC9TVFJPTkc+IDxTVFJPTkc+QmVsbHM8L1NUUk9ORz4KKyAgICAgICBJZiAgeW91ciAgdGVybWluYWwgIGhhcyAgb25lICBvciAgbW9yZSAga2luZHMgIG9mICBkaXNwbGF5CisgICAgICAgYXR0cmlidXRlcywgdGhlc2UgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgbnVtYmVyICBvZiAgZGlmLQorICAgICAgIGZlcmVudCB3YXlzLiAgWW91IHNob3VsZCBjaG9vc2Ugb25lIGRpc3BsYXkgZm9ybSBhcyA8RU0+c3RhbmQtPC9FTT4KKyAgICAgICA8RU0+b3V0PC9FTT4gPEVNPm1vZGU8L0VNPiwgcmVwcmVzZW50aW5nIGEgZ29vZCwgaGlnaCBjb250cmFzdCwgZWFzeS1vbi10aGUtCisgICAgICAgZXllcywgIGZvcm1hdCAgZm9yICBoaWdobGlnaHRpbmcgIGVycm9yIG1lc3NhZ2VzIGFuZCBvdGhlcgorICAgICAgIGF0dGVudGlvbiBnZXR0ZXJzLiAgKElmIHlvdSBoYXZlIGEgY2hvaWNlLCAgcmV2ZXJzZSAgdmlkZW8KKyAgICAgICBwbHVzICBoYWxmLWJyaWdodCAgaXMgIGdvb2QsIG9yIHJldmVyc2UgdmlkZW8gYWxvbmUuKSAgVGhlCisgICAgICAgc2VxdWVuY2VzIHRvIGVudGVyIGFuZCBleGl0IHN0YW5kb3V0ICBtb2RlICBhcmUgIGdpdmVuICBhcworICAgICAgIDxTVFJPTkc+c21zbzwvU1RST05HPiAgYW5kICA8U1RST05HPnJtc288L1NUUk9ORz4sIHJlc3BlY3RpdmVseS4gIElmIHRoZSBjb2RlIHRvIGNoYW5nZSBpbnRvCisgICAgICAgb3Igb3V0IG9mIHN0YW5kb3V0IG1vZGUgIGxlYXZlcyAgb25lICBvciAgZXZlbiAgdHdvICBibGFuaworICAgICAgIHNwYWNlcyAgb24gdGhlIHNjcmVlbiwgYXMgdGhlIFRWSSA5MTIgYW5kIFRlbGVyYXkgMTA2MSBkbywKKyAgICAgICB0aGVuIDxTVFJPTkc+eG1jPC9TVFJPTkc+IHNob3VsZCBiZSBnaXZlbiB0byB0ZWxsIGhvdyBtYW55IHNwYWNlcyBhcmUgbGVmdC4KKworICAgICAgIENvZGVzICB0byAgYmVnaW4gIHVuZGVybGluaW5nICBhbmQgIGVuZCB1bmRlcmxpbmluZyBjYW4gYmUKKyAgICAgICBnaXZlbiBhcyA8U1RST05HPnNtdWw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cm11bDwvU1RST05HPiByZXNwZWN0aXZlbHkuICBJZiB0aGUgdGVybWluYWwgIGhhcworICAgICAgIGEgIGNvZGUgIHRvICB1bmRlcmxpbmUgIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhbmQgbW92ZSB0aGUKKyAgICAgICBjdXJzb3Igb25lIHNwYWNlIHRvIHRoZSByaWdodCwgc3VjaCBhcyB0aGUgTWljcm90ZXJtIE1pbWUsCisgICAgICAgdGhpcyBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz51YzwvU1RST05HPi4KKworICAgICAgIE90aGVyICBjYXBhYmlsaXRpZXMgIHRvICBlbnRlciAgdmFyaW91cyBoaWdobGlnaHRpbmcgbW9kZXMKKyAgICAgICBpbmNsdWRlIDxTVFJPTkc+Ymxpbms8L1NUUk9ORz4gKGJsaW5raW5nKSA8U1RST05HPmJvbGQ8L1NUUk9ORz4gKGJvbGQgb3IgZXh0cmEgIGJyaWdodCkgIDxTVFJPTkc+ZGltPC9TVFJPTkc+CisgICAgICAgKGRpbSAgb3IgIGhhbGYtYnJpZ2h0KSAgPFNUUk9ORz5pbnZpczwvU1RST05HPiAoYmxhbmtpbmcgb3IgaW52aXNpYmxlIHRleHQpCisgICAgICAgPFNUUk9ORz5wcm90PC9TVFJPTkc+IChwcm90ZWN0ZWQpIDxTVFJPTkc+cmV2PC9TVFJPTkc+IChyZXZlcnNlIHZpZGVvKSA8U1RST05HPnNncjA8L1NUUk9ORz4gICh0dXJuICBvZmYgIDxFTT5hbGw8L0VNPgorICAgICAgIGF0dHJpYnV0ZSAgbW9kZXMpICA8U1RST05HPnNtYWNzPC9TVFJPTkc+ICAoZW50ZXIgIGFsdGVybmF0ZSAgY2hhcmFjdGVyIHNldAorICAgICAgIG1vZGUpIGFuZCAgPFNUUk9ORz5ybWFjczwvU1RST05HPiAgKGV4aXQgIGFsdGVybmF0ZSAgY2hhcmFjdGVyICBzZXQgIG1vZGUpLgorICAgICAgIFR1cm5pbmcgIG9uICBhbnkgb2YgdGhlc2UgbW9kZXMgc2luZ2x5IG1heSBvciBtYXkgbm90IHR1cm4KKyAgICAgICBvZmYgb3RoZXIgbW9kZXMuCisKKyAgICAgICBJZiB0aGVyZSBpcyBhIHNlcXVlbmNlIHRvIHNldCAgYXJiaXRyYXJ5ICBjb21iaW5hdGlvbnMgIG9mCisgICAgICAgbW9kZXMsICB0aGlzIHNob3VsZCBiZSBnaXZlbiBhcyA8U1RST05HPnNncjwvU1RST05HPiAoc2V0IGF0dHJpYnV0ZXMpLCB0YWstCisgICAgICAgaW5nIDkgcGFyYW1ldGVycy4gIEVhY2ggcGFyYW1ldGVyIGlzIGVpdGhlciAwIG9yICBub256ZXJvLAorICAgICAgIGFzIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBvbiBvciBvZmYuICBUaGUgOSBwYXJhbS0KKyAgICAgICBldGVycyBhcmUsIGluIG9yZGVyOiBzdGFuZG91dCwgdW5kZXJsaW5lLCByZXZlcnNlLCAgYmxpbmssCisgICAgICAgZGltLCAgYm9sZCwgIGJsYW5rLCBwcm90ZWN0LCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldC4gIE5vdAorICAgICAgIGFsbCBtb2RlcyBuZWVkIGJlIHN1cHBvcnRlZCBieSA8U1RST05HPnNncjwvU1RST05HPiwgb25seSB0aG9zZSAgZm9yICB3aGljaAorICAgICAgIGNvcnJlc3BvbmRpbmcgc2VwYXJhdGUgYXR0cmlidXRlIGNvbW1hbmRzIGV4aXN0LgorCisgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBERUMgdnQyMjAgc3VwcG9ydHMgbW9zdCBvZiB0aGUgbW9kZXM6CisKKworICAgICAgICAgICA8U1RST05HPnRwYXJtPC9TVFJPTkc+IDxTVFJPTkc+cGFyYW1ldGVyPC9TVFJPTkc+ICAgPFNUUk9ORz5hdHRyaWJ1dGU8L1NUUk9ORz4gICAgPFNUUk9ORz5lc2NhcGU8L1NUUk9ORz4gPFNUUk9ORz5zZXF1ZW5jZTwvU1RST05HPgorCisgICAgICAgICAgIG5vbmUgICAgICAgICAgICAgIG5vbmUgICAgICAgICBcRVswbQorICAgICAgICAgICBwMSAgICAgICAgICAgICAgICBzdGFuZG91dCAgICAgXEVbMDsxOzdtCisgICAgICAgICAgIHAyICAgICAgICAgICAgICAgIHVuZGVybGluZSAgICBcRVswOzRtCisgICAgICAgICAgIHAzICAgICAgICAgICAgICAgIHJldmVyc2UgICAgICBcRVswOzdtCisgICAgICAgICAgIHA0ICAgICAgICAgICAgICAgIGJsaW5rICAgICAgICBcRVswOzVtCisgICAgICAgICAgIHA1ICAgICAgICAgICAgICAgIGRpbSAgICAgICAgICBub3QgYXZhaWxhYmxlCisgICAgICAgICAgIHA2ICAgICAgICAgICAgICAgIGJvbGQgICAgICAgICBcRVswOzFtCisgICAgICAgICAgIHA3ICAgICAgICAgICAgICAgIGludmlzICAgICAgICBcRVswOzhtCisgICAgICAgICAgIHA4ICAgICAgICAgICAgICAgIHByb3RlY3QgICAgICBub3QgdXNlZAorICAgICAgICAgICBwOSAgICAgICAgICAgICAgICBhbHRjaGFyc2V0ICAgXk8gKG9mZikgXk4gKG9uKQorCisgICAgICAgV2UgIGJlZ2luIGVhY2ggZXNjYXBlIHNlcXVlbmNlIGJ5IHR1cm5pbmcgb2ZmIGFueSBleGlzdGluZworICAgICAgIG1vZGVzLCBzaW5jZSB0aGVyZSBpcyBubyBxdWljayB3YXkgIHRvICBkZXRlcm1pbmUgIHdoZXRoZXIKKyAgICAgICB0aGV5IGFyZSBhY3RpdmUuICBTdGFuZG91dCBpcyBzZXQgdXAgdG8gYmUgdGhlIGNvbWJpbmF0aW9uCisgICAgICAgb2YgcmV2ZXJzZSBhbmQgYm9sZC4gIFRoZSB2dDIyMCAgdGVybWluYWwgIGhhcyAgYSAgcHJvdGVjdAorICAgICAgIG1vZGUsICB0aG91Z2ggIGl0ICBpcyAgbm90IGNvbW1vbmx5IHVzZWQgaW4gc2dyIGJlY2F1c2UgaXQKKyAgICAgICBwcm90ZWN0cyBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW4gIGZyb20gIHRoZSAgaG9zdCdzICBlcmEtCisgICAgICAgc3VyZXMuICAgVGhlICBhbHRjaGFyc2V0IG1vZGUgYWxzbyBpcyBkaWZmZXJlbnQgaW4gdGhhdCBpdAorICAgICAgIGlzIGVpdGhlciBeTyBvciBeTiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgb2ZmIG9yICBvbi4KKyAgICAgICBJZiAgYWxsICBtb2RlcyAgYXJlICB0dXJuZWQgIG9uLCB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlIGlzCisgICAgICAgXEVbMDsxOzQ7NTs3OzhtXk4uCisKKyAgICAgICBTb21lIHNlcXVlbmNlcyBhcmUgY29tbW9uIHRvIGRpZmZlcmVudCBtb2Rlcy4gICBGb3IgIGV4YW0tCisgICAgICAgcGxlLCAgOzcgIGlzIG91dHB1dCB3aGVuIGVpdGhlciBwMSBvciBwMyBpcyB0cnVlLCB0aGF0IGlzLAorICAgICAgIGlmIGVpdGhlciBzdGFuZG91dCBvciByZXZlcnNlIG1vZGVzIGFyZSB0dXJuZWQgb24uCisKKyAgICAgICBXcml0aW5nIG91dCB0aGUgYWJvdmUgc2VxdWVuY2VzLCBhbG9uZyB3aXRoICB0aGVpciAgZGVwZW4tCisgICAgICAgZGVuY2llcyB5aWVsZHMKKworCisgICAgICAgICA8U1RST05HPnNlcXVlbmNlPC9TVFJPTkc+ICAgIDxTVFJPTkc+d2hlbjwvU1RST05HPiA8U1RST05HPnRvPC9TVFJPTkc+IDxTVFJPTkc+b3V0cHV0PC9TVFJPTkc+ICAgICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IDxTVFJPTkc+dHJhbnNsYXRpb248L1NUUk9ORz4KKworICAgICAgICAgXEVbMCAgICAgICBhbHdheXMgICAgICAgICAgICAgIFxFWzAKKyAgICAgICAgIDsxICAgICAgICAgaWYgcDEgb3IgcDYgICAgICAgICAlPyVwMSVwNiV8JXQ7MSU7CisgICAgICAgICA7NCAgICAgICAgIGlmIHAyICAgICAgICAgICAgICAgJT8lcDIlfCV0OzQlOworICAgICAgICAgOzUgICAgICAgICBpZiBwNCAgICAgICAgICAgICAgICU/JXA0JXwldDs1JTsKKworICAgICAgICAgOzcgICAgICAgICBpZiBwMSBvciBwMyAgICAgICAgICU/JXAxJXAzJXwldDs3JTsKKyAgICAgICAgIDs4ICAgICAgICAgaWYgcDcgICAgICAgICAgICAgICAlPyVwNyV8JXQ7OCU7CisgICAgICAgICBtICAgICAgICAgIGFsd2F5cyAgICAgICAgICAgICAgbQorICAgICAgICAgXk4gb3IgXk8gICBpZiBwOSBeTiwgZWxzZSBeTyAgICU/JXA5JXReTiVlXk8lOworCisgICAgICAgUHV0dGluZyB0aGlzIGFsbCB0b2dldGhlciBpbnRvIHRoZSBzZ3Igc2VxdWVuY2UgZ2l2ZXM6CisKKyAgICAgICAgICAgc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7CisgICAgICAgICAgICAgICAlPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisKKyAgICAgICBSZW1lbWJlciAgdGhhdCAgaWYgIHlvdSBzcGVjaWZ5IHNnciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5CisgICAgICAgc2dyMC4gIEFsc28sIHNvbWUgaW1wbGVtZW50YXRpb25zIHJlbHkgb24gc2dyIGJlaW5nICBnaXZlbgorICAgICAgIGlmICBzZ3IwICBpcywgTm90IGFsbCB0ZXJtaW5mbyBlbnRyaWVzIG5lY2Vzc2FyaWx5IGhhdmUgYW4KKyAgICAgICBzZ3Igc3RyaW5nLCBob3dldmVyLiAgTWFueSB0ZXJtaW5mbyAgZW50cmllcyAgYXJlICBkZXJpdmVkCisgICAgICAgZnJvbSAgdGVybWNhcCAgZW50cmllcyB3aGljaCBoYXZlIG5vIHNnciBzdHJpbmcuICBUaGUgb25seQorICAgICAgIGRyYXdiYWNrIHRvIGFkZGluZyBhbiBzZ3IgIHN0cmluZyAgaXMgIHRoYXQgIHRlcm1jYXAgIGFsc28KKyAgICAgICBhc3N1bWVzICB0aGF0ICBzZ3IwICBkb2VzIG5vdCBleGl0IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisgICAgICAgbW9kZS4KKworICAgICAgIFRlcm1pbmFscyB3aXRoIHRoZSBgYG1hZ2ljIGNvb2tpZScnIGdsaXRjaCAgKDxTVFJPTkc+eG1jPC9TVFJPTkc+KSAgZGVwb3NpdAorICAgICAgIHNwZWNpYWwgICBgYGNvb2tpZXMnJyAgIHdoZW4gICB0aGV5ICByZWNlaXZlICBtb2RlLXNldHRpbmcKKyAgICAgICBzZXF1ZW5jZXMsIHdoaWNoIGFmZmVjdCB0aGUgZGlzcGxheSBhbGdvcml0aG0gcmF0aGVyICB0aGFuCisgICAgICAgaGF2aW5nICBleHRyYSAgYml0cyAgZm9yICBlYWNoIGNoYXJhY3Rlci4gIFNvbWUgdGVybWluYWxzLAorICAgICAgIHN1Y2ggYXMgdGhlIEhQIDI2MjEsICBhdXRvbWF0aWNhbGx5ICBsZWF2ZSAgc3RhbmRvdXQgIG1vZGUKKyAgICAgICB3aGVuICB0aGV5ICBtb3ZlIHRvIGEgbmV3IGxpbmUgb3IgdGhlIGN1cnNvciBpcyBhZGRyZXNzZWQuCisgICAgICAgUHJvZ3JhbXMgdXNpbmcgc3RhbmRvdXQgbW9kZSAgc2hvdWxkICBleGl0ICBzdGFuZG91dCAgbW9kZQorICAgICAgIGJlZm9yZSAgbW92aW5nIHRoZSBjdXJzb3Igb3Igc2VuZGluZyBhIG5ld2xpbmUsIHVubGVzcyB0aGUKKyAgICAgICA8U1RST05HPm1zZ3I8L1NUUk9ORz4gY2FwYWJpbGl0eSwgYXNzZXJ0aW5nIHRoYXQgaXQgIGlzICBzYWZlICB0byAgbW92ZSAgaW4KKyAgICAgICBzdGFuZG91dCBtb2RlLCBpcyBwcmVzZW50LgorCisgICAgICAgSWYgIHRoZSB0ZXJtaW5hbCBoYXMgYSB3YXkgb2YgZmxhc2hpbmcgdGhlIHNjcmVlbiB0byBpbmRpLQorICAgICAgIGNhdGUgYW4gZXJyb3IgcXVpZXRseSAoYSBiZWxsIHJlcGxhY2VtZW50KSB0aGVuICB0aGlzICBjYW4KKyAgICAgICBiZSBnaXZlbiBhcyA8U1RST05HPmZsYXNoPC9TVFJPTkc+OyBpdCBtdXN0IG5vdCBtb3ZlIHRoZSBjdXJzb3IuCisKKyAgICAgICBJZiAgdGhlICBjdXJzb3IgIG5lZWRzIHRvIGJlIG1hZGUgbW9yZSB2aXNpYmxlIHRoYW4gbm9ybWFsCisgICAgICAgd2hlbiBpdCBpcyBub3Qgb24gdGhlIGJvdHRvbSBsaW5lICh0byBtYWtlLCBmb3IgZXhhbXBsZSwgYQorICAgICAgIG5vbi1ibGlua2luZyAgdW5kZXJsaW5lICBpbnRvICBhbiAgZWFzaWVyIHRvIGZpbmQgYmxvY2sgb3IKKyAgICAgICBibGlua2luZyB1bmRlcmxpbmUpIGdpdmUgdGhpcyBzZXF1ZW5jZSBhcyA8U1RST05HPmN2dmlzPC9TVFJPTkc+LiAgSWYgdGhlcmUKKyAgICAgICBpcyAgYSAgd2F5ICB0byAgbWFrZSB0aGUgY3Vyc29yIGNvbXBsZXRlbHkgaW52aXNpYmxlLCBnaXZlCisgICAgICAgdGhhdCBhcyA8U1RST05HPmNpdmlzPC9TVFJPTkc+LiAgVGhlIGNhcGFiaWxpdHkgPFNUUk9ORz5jbm9ybTwvU1RST05HPiBzaG91bGQgYmUgZ2l2ZW4gd2hpY2gKKyAgICAgICB1bmRvZXMgdGhlIGVmZmVjdHMgb2YgYm90aCBvZiB0aGVzZSBtb2Rlcy4KKworICAgICAgIElmIHlvdXIgdGVybWluYWwgY29ycmVjdGx5IGdlbmVyYXRlcyB1bmRlcmxpbmVkIGNoYXJhY3RlcnMKKyAgICAgICAod2l0aCBubyBzcGVjaWFsIGNvZGVzIG5lZWRlZCkgZXZlbiAgdGhvdWdoICBpdCAgZG9lcyAgbm90CisgICAgICAgb3ZlcnN0cmlrZSwgIHRoZW4geW91IHNob3VsZCBnaXZlIHRoZSBjYXBhYmlsaXR5IDxTVFJPTkc+dWw8L1NUUk9ORz4uICBJZiBhCisgICAgICAgY2hhcmFjdGVyIG92ZXJzdHJpa2luZyBhbm90aGVyIGxlYXZlcyBib3RoICBjaGFyYWN0ZXJzICBvbgorICAgICAgIHRoZSBzY3JlZW4sIHNwZWNpZnkgdGhlIGNhcGFiaWxpdHkgPFNUUk9ORz5vczwvU1RST05HPi4gIElmIG92ZXJzdHJpa2VzIGFyZQorICAgICAgIGVyYXNhYmxlIHdpdGggYSBibGFuaywgdGhlbiB0aGlzIHNob3VsZCAgYmUgIGluZGljYXRlZCAgYnkKKyAgICAgICBnaXZpbmcgPFNUUk9ORz5lbzwvU1RST05HPi4KKworCisgICA8U1RST05HPktleXBhZDwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPkZ1bmN0aW9uPC9TVFJPTkc+IDxTVFJPTkc+S2V5czwvU1RST05HPgorICAgICAgIElmIHRoZSB0ZXJtaW5hbCBoYXMgYSBrZXlwYWQgdGhhdCB0cmFuc21pdHMgY29kZXMgd2hlbiB0aGUKKyAgICAgICBrZXlzIGFyZSBwcmVzc2VkLCB0aGlzIGluZm9ybWF0aW9uICBjYW4gIGJlICBnaXZlbi4gICBOb3RlCisgICAgICAgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGFuZGxlIHRlcm1pbmFscyB3aGVyZSB0aGUga2V5LQorICAgICAgIHBhZCBvbmx5IHdvcmtzIGluIGxvY2FsICh0aGlzIGFwcGxpZXMsIGZvciBleGFtcGxlLCB0byB0aGUKKyAgICAgICB1bnNoaWZ0ZWQgIEhQICAyNjIxICBrZXlzKS4gICBJZiAgdGhlIGtleXBhZCBjYW4gYmUgc2V0IHRvCisgICAgICAgdHJhbnNtaXQgb3Igbm90IHRyYW5zbWl0LCBnaXZlIHRoZXNlICBjb2RlcyAgYXMgIDxTVFJPTkc+c21reDwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5ybWt4PC9TVFJPTkc+LiAgT3RoZXJ3aXNlIHRoZSBrZXlwYWQgaXMgYXNzdW1lZCB0byBhbHdheXMgdHJhbnNtaXQuCisgICAgICAgVGhlIGNvZGVzIHNlbnQgYnkgdGhlIGxlZnQgYXJyb3csIHJpZ2h0IGFycm93LCAgdXAgIGFycm93LAorICAgICAgIGRvd24gIGFycm93LCAgYW5kICBob21lIGtleXMgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+a2N1YjEsPC9TVFJPTkc+IDxTVFJPTkc+a2N1ZjEsPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5rY3V1MSw8L1NUUk9ORz4gPFNUUk9ORz5rY3VkMSw8L1NUUk9ORz4gYW5kIDxTVFJPTkc+a2hvbWU8L1NUUk9ORz4gcmVzcGVjdGl2ZWx5LiAgSWYgdGhlcmUgYXJlICBmdW5jLQorICAgICAgIHRpb24gIGtleXMgIHN1Y2ggIGFzIGYwLCBmMSwgLi4uLCBmMTAsIHRoZSBjb2RlcyB0aGV5IHNlbmQKKyAgICAgICBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5rZjAsPC9TVFJPTkc+IDxTVFJPTkc+a2YxLDwvU1RST05HPiA8U1RST05HPi4uLiw8L1NUUk9ORz4gPFNUUk9ORz5rZjEwPC9TVFJPTkc+LiAgSWYgdGhlc2UgIGtleXMgIGhhdmUKKyAgICAgICBsYWJlbHMgIG90aGVyICB0aGFuIHRoZSBkZWZhdWx0IGYwIHRocm91Z2ggZjEwLCB0aGUgbGFiZWxzCisgICAgICAgY2FuICBiZSAgZ2l2ZW4gIGFzICA8U1RST05HPmxmMCw8L1NUUk9ORz4gIDxTVFJPTkc+bGYxLDwvU1RST05HPiAgPFNUUk9ORz4uLi4sPC9TVFJPTkc+ICA8U1RST05HPmxmMTA8L1NUUk9ORz4uICAgIFRoZSAgIGNvZGVzCisgICAgICAgdHJhbnNtaXR0ZWQgIGJ5ICBjZXJ0YWluICBvdGhlciBzcGVjaWFsIGtleXMgY2FuIGJlIGdpdmVuOgorICAgICAgIDxTVFJPTkc+a2xsPC9TVFJPTkc+IChob21lIGRvd24pLCA8U1RST05HPmticzwvU1RST05HPiAoYmFja3NwYWNlKSwgPFNUUk9ORz5rdGJjPC9TVFJPTkc+IChjbGVhciAgYWxsICB0YWJzKSwKKyAgICAgICA8U1RST05HPmtjdGFiPC9TVFJPTkc+ICAoY2xlYXIgIHRoZSAgdGFiICBzdG9wIGluIHRoaXMgY29sdW1uKSwgPFNUUk9ORz5rY2xyPC9TVFJPTkc+IChjbGVhcgorICAgICAgIHNjcmVlbiBvciAgZXJhc2UgIGtleSksICA8U1RST05HPmtkY2gxPC9TVFJPTkc+ICAoZGVsZXRlICBjaGFyYWN0ZXIpLCAgPFNUUk9ORz5rZGwxPC9TVFJPTkc+CisgICAgICAgKGRlbGV0ZSBsaW5lKSwgPFNUUk9ORz5rcm1pcjwvU1RST05HPiAoZXhpdCBpbnNlcnQgbW9kZSksIDxTVFJPTkc+a2VsPC9TVFJPTkc+IChjbGVhciB0byBlbmQKKyAgICAgICBvZiBsaW5lKSwgPFNUUk9ORz5rZWQ8L1NUUk9ORz4gKGNsZWFyIHRvICBlbmQgIG9mICBzY3JlZW4pLCAgPFNUUk9ORz5raWNoMTwvU1RST05HPiAgKGluc2VydAorICAgICAgIGNoYXJhY3RlciAgb3IgIGVudGVyIGluc2VydCBtb2RlKSwgPFNUUk9ORz5raWwxPC9TVFJPTkc+IChpbnNlcnQgbGluZSksIDxTVFJPTkc+a25wPC9TVFJPTkc+CisgICAgICAgKG5leHQgIHBhZ2UpLCAgPFNUUk9ORz5rcHA8L1NUUk9ORz4gIChwcmV2aW91cyAgcGFnZSksICA8U1RST05HPmtpbmQ8L1NUUk9ORz4gIChzY3JvbGwgIGZvci0KKyAgICAgICB3YXJkL2Rvd24pLCA8U1RST05HPmtyaTwvU1RST05HPiAoc2Nyb2xsIGJhY2t3YXJkL3VwKSwgPFNUUk9ORz5raHRzPC9TVFJPTkc+IChzZXQgYSB0YWIgc3RvcAorICAgICAgIGluIHRoaXMgY29sdW1uKS4gIEluIGFkZGl0aW9uLCBpZiB0aGUga2V5cGFkIGhhcyBhIDMgYnkgIDMKKyAgICAgICBhcnJheSAgb2YgIGtleXMgIGluY2x1ZGluZyAgdGhlIGZvdXIgYXJyb3cga2V5cywgdGhlIG90aGVyCisgICAgICAgZml2ZSBrZXlzIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPmthMTwvU1RST05HPiwgPFNUUk9ORz5rYTM8L1NUUk9ORz4sICA8U1RST05HPmtiMjwvU1RST05HPiwgIDxTVFJPTkc+a2MxPC9TVFJPTkc+LCAgYW5kICA8U1RST05HPmtjMzwvU1RST05HPi4KKyAgICAgICBUaGVzZSAga2V5cyBhcmUgdXNlZnVsIHdoZW4gdGhlIGVmZmVjdHMgb2YgYSAzIGJ5IDMgZGlyZWMtCisgICAgICAgdGlvbmFsIHBhZCBhcmUgbmVlZGVkLgorCisgICAgICAgU3RyaW5ncyB0byBwcm9ncmFtIGZ1bmN0aW9uIGtleXMgY2FuIGJlICBnaXZlbiAgYXMgIDxTVFJPTkc+cGZrZXk8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5wZmxvYzwvU1RST05HPiwgIGFuZCA8U1RST05HPnBmeDwvU1RST05HPi4gIEEgc3RyaW5nIHRvIHByb2dyYW0gc2NyZWVuIGxhYmVscyBzaG91bGQKKyAgICAgICBiZSBzcGVjaWZpZWQgYXMgPFNUUk9ORz5wbG48L1NUUk9ORz4uICBFYWNoICBvZiAgdGhlc2UgIHN0cmluZ3MgIHRha2VzICB0d28KKyAgICAgICBwYXJhbWV0ZXJzOiAgdGhlIGZ1bmN0aW9uIGtleSBudW1iZXIgdG8gcHJvZ3JhbSAoZnJvbSAwIHRvCisgICAgICAgMTApIGFuZCB0aGUgc3RyaW5nIHRvIHByb2dyYW0gaXQgd2l0aC4gIEZ1bmN0aW9uIGtleSAgbnVtLQorICAgICAgIGJlcnMgIG91dCAgb2YgIHRoaXMgIHJhbmdlIG1heSBwcm9ncmFtIHVuZGVmaW5lZCBrZXlzIGluIGEKKyAgICAgICB0ZXJtaW5hbCBkZXBlbmRlbnQgbWFubmVyLiAgIFRoZSAgZGlmZmVyZW5jZSAgYmV0d2VlbiAgdGhlCisgICAgICAgY2FwYWJpbGl0aWVzICBpcyAgdGhhdCA8U1RST05HPnBma2V5PC9TVFJPTkc+IGNhdXNlcyBwcmVzc2luZyB0aGUgZ2l2ZW4ga2V5CisgICAgICAgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHVzZXIgdHlwaW5nIHRoZSBnaXZlbiBzdHJpbmc7ICA8U1RST05HPnBmbG9jPC9TVFJPTkc+CisgICAgICAgY2F1c2VzIHRoZSBzdHJpbmcgdG8gYmUgZXhlY3V0ZWQgYnkgdGhlIHRlcm1pbmFsIGluIGxvY2FsOworICAgICAgIGFuZCA8U1RST05HPnBmeDwvU1RST05HPiBjYXVzZXMgdGhlIHN0cmluZyB0byBiZSB0cmFuc21pdHRlZCAgdG8gIHRoZSAgY29tLQorICAgICAgIHB1dGVyLgorCisgICAgICAgVGhlIGNhcGFiaWxpdGllcyA8U1RST05HPm5sYWI8L1NUUk9ORz4sIDxTVFJPTkc+bHc8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bGg8L1NUUk9ORz4gZGVmaW5lIHRoZSBudW1iZXIgb2YgcHJvLQorICAgICAgIGdyYW1tYWJsZSBzY3JlZW4gbGFiZWxzIGFuZCB0aGVpciB3aWR0aCAgYW5kICBoZWlnaHQuICAgSWYKKyAgICAgICB0aGVyZSAgYXJlICBjb21tYW5kcyAgdG8gIHR1cm4gdGhlIGxhYmVscyBvbiBhbmQgb2ZmLCBnaXZlCisgICAgICAgdGhlbSBpbiA8U1RST05HPnNtbG48L1NUUk9ORz4gYW5kIDxTVFJPTkc+cm1sbjwvU1RST05HPi4gIDxTVFJPTkc+c21sbjwvU1RST05HPiBpcyBub3JtYWxseSBvdXRwdXQgYWZ0ZXIgIG9uZQorICAgICAgIG9yIG1vcmUgcGxuIHNlcXVlbmNlcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGJlY29tZXMKKyAgICAgICB2aXNpYmxlLgorCisKKyAgIDxTVFJPTkc+VGFiczwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPkluaXRpYWxpemF0aW9uPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIHRlcm1pbmFsIGhhcyBoYXJkd2FyZSB0YWJzLCB0aGUgY29tbWFuZCB0byAgYWR2YW5jZQorICAgICAgIHRvICB0aGUgIG5leHQgdGFiIHN0b3AgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+aHQ8L1NUUk9ORz4gKHVzdWFsbHkgY29udHJvbAorICAgICAgIEkpLiAgQSBgYGJhY2stdGFiJycgY29tbWFuZCB3aGljaCBtb3ZlcyAgbGVmdHdhcmQgIHRvICB0aGUKKyAgICAgICBwcmVjZWRpbmcgdGFiIHN0b3AgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+Y2J0PC9TVFJPTkc+LiAgQnkgY29udmVudGlvbiwgaWYKKyAgICAgICB0aGUgdGVsZXR5cGUgbW9kZXMgaW5kaWNhdGUgdGhhdCB0YWJzIGFyZSAgYmVpbmcgIGV4cGFuZGVkCisgICAgICAgYnkgIHRoZSAgY29tcHV0ZXIgIHJhdGhlciB0aGFuIGJlaW5nIHNlbnQgdG8gdGhlIHRlcm1pbmFsLAorICAgICAgIHByb2dyYW1zIHNob3VsZCBub3QgIHVzZSAgPFNUUk9ORz5odDwvU1RST05HPiAgb3IgIDxTVFJPTkc+Y2J0PC9TVFJPTkc+ICBldmVuICBpZiAgdGhleSAgYXJlCisgICAgICAgcHJlc2VudCwgIHNpbmNlICB0aGUgdXNlciBtYXkgbm90IGhhdmUgdGhlIHRhYiBzdG9wcyBwcm9wLQorICAgICAgIGVybHkgc2V0LiAgSWYgdGhlIHRlcm1pbmFsIGhhcyAgaGFyZHdhcmUgIHRhYnMgIHdoaWNoICBhcmUKKyAgICAgICBpbml0aWFsbHkgIHNldCBldmVyeSA8RU0+bjwvRU0+IHNwYWNlcyB3aGVuIHRoZSB0ZXJtaW5hbCBpcyBwb3dlcmVkCisgICAgICAgdXAsIHRoZSBudW1lcmljIHBhcmFtZXRlciA8U1RST05HPml0PC9TVFJPTkc+IGlzIGdpdmVuLCBzaG93aW5nIHRoZSAgbnVtYmVyCisgICAgICAgb2YgIHNwYWNlcyAgdGhlIHRhYnMgYXJlIHNldCB0by4gIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCBieQorICAgICAgIHRoZSA8RU0+dHNldDwvRU0+IGNvbW1hbmQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2V0IHRoZSBtb2RlICBmb3IKKyAgICAgICBoYXJkd2FyZSAgdGFiIGV4cGFuc2lvbiwgYW5kIHdoZXRoZXIgdG8gc2V0IHRoZSB0YWIgc3RvcHMuCisgICAgICAgSWYgdGhlIHRlcm1pbmFsIGhhcyB0YWIgc3RvcHMgdGhhdCBjYW4gYmUgIHNhdmVkICBpbiAgbm9uLQorICAgICAgIHZvbGF0aWxlICBtZW1vcnksIHRoZSB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBjYW4gYXNzdW1lIHRoYXQKKyAgICAgICB0aGV5IGFyZSBwcm9wZXJseSBzZXQuCisKKyAgICAgICBPdGhlciBjYXBhYmlsaXRpZXMgaW5jbHVkZSA8U1RST05HPmlzMTwvU1RST05HPiwgPFNUUk9ORz5pczI8L1NUUk9ORz4sIGFuZCA8U1RST05HPmlzMzwvU1RST05HPiwgIGluaXRpYWxpemEtCisgICAgICAgdGlvbiAgc3RyaW5ncyAgZm9yIHRoZSB0ZXJtaW5hbCwgPFNUUk9ORz5pcHJvZzwvU1RST05HPiwgdGhlIHBhdGggbmFtZSBvZiBhCisgICAgICAgcHJvZ3JhbSB0byBiZSBydW4gdG8gaW5pdGlhbGl6ZSB0aGUgdGVybWluYWwsIGFuZCA8U1RST05HPmlmPC9TVFJPTkc+LCAgdGhlCisgICAgICAgbmFtZSAgb2YgIGEgIGZpbGUgIGNvbnRhaW5pbmcgbG9uZyBpbml0aWFsaXphdGlvbiBzdHJpbmdzLgorICAgICAgIFRoZXNlIHN0cmluZ3MgYXJlIGV4cGVjdGVkIHRvIHNldCB0aGUgdGVybWluYWwgaW50byAgbW9kZXMKKyAgICAgICBjb25zaXN0ZW50ICB3aXRoICB0aGUgIHJlc3QgIG9mICB0aGUgdGVybWluZm8gZGVzY3JpcHRpb24uCisgICAgICAgVGhleSBhcmUgbm9ybWFsbHkgc2VudCB0byB0aGUgdGVybWluYWwsIGJ5IHRoZSA8RU0+aW5pdDwvRU0+IG9wdGlvbgorICAgICAgIG9mICB0aGUgIDxFTT50cHV0PC9FTT4gIHByb2dyYW0sICBlYWNoIHRpbWUgdGhlIHVzZXIgbG9ncyBpbi4gIFRoZXkKKyAgICAgICB3aWxsIGJlIHByaW50ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKworICAgICAgICAgICAgICBydW4gdGhlIHByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+aXByb2c8L1NUUk9ORz4KKworICAgICAgICAgICAgICBvdXRwdXQgPFNUUk9ORz5pczE8L1NUUk9ORz4gPFNUUk9ORz5pczI8L1NUUk9ORz4KKworICAgICAgICAgICAgICBzZXQgdGhlIG1hcmdpbnMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+bWdjPC9TVFJPTkc+LCA8U1RST05HPnNtZ2w8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c21ncjwvU1RST05HPgorCisgICAgICAgICAgICAgIHNldCB0YWJzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICA8U1RST05HPnRiYzwvU1RST05HPiBhbmQgPFNUUk9ORz5odHM8L1NUUk9ORz4KKworICAgICAgICAgICAgICBwcmludCB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz5pZjwvU1RST05HPgorCisgICAgICAgICAgICAgIGFuZCBmaW5hbGx5CisgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPFNUUk9ORz5pczM8L1NUUk9ORz4uCisKKyAgICAgICBNb3N0IGluaXRpYWxpemF0aW9uIGlzIGRvbmUgd2l0aCAgPFNUUk9ORz5pczI8L1NUUk9ORz4uICAgU3BlY2lhbCAgdGVybWluYWwKKyAgICAgICBtb2RlcyBjYW4gYmUgc2V0IHVwIHdpdGhvdXQgZHVwbGljYXRpbmcgc3RyaW5ncyBieSBwdXR0aW5nCisgICAgICAgdGhlIGNvbW1vbiBzZXF1ZW5jZXMgaW4gPFNUUk9ORz5pczI8L1NUUk9ORz4gYW5kIHNwZWNpYWwgY2FzZXMgaW4gIDxTVFJPTkc+aXMxPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPmlzMzwvU1RST05HPi4KKworICAgICAgIEEgc2V0IG9mIHNlcXVlbmNlcyB0aGF0IGRvZXMgYSBoYXJkZXIgcmVzZXQgZnJvbSBhIHRvdGFsbHkKKyAgICAgICB1bmtub3duIHN0YXRlIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPnJzMTwvU1RST05HPiwgPFNUUk9ORz5yczI8L1NUUk9ORz4sIDxTVFJPTkc+cmY8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cnMzPC9TVFJPTkc+LCBhbmFsby0KKyAgICAgICBnb3VzICB0byAgPFNUUk9ORz5pczE8L1NUUk9ORz4gIDxTVFJPTkc+LDwvU1RST05HPiAgPFNUUk9ORz5pczI8L1NUUk9ORz4gIDxTVFJPTkc+LDwvU1RST05HPiAgPFNUUk9ORz5pZjwvU1RST05HPiAgYW5kIDxTVFJPTkc+aXMzPC9TVFJPTkc+IHJlc3BlY3RpdmVseS4gIFRoZXNlCisgICAgICAgc3RyaW5ncyBhcmUgb3V0cHV0IGJ5IHRoZSA8RU0+cmVzZXQ8L0VNPiAgcHJvZ3JhbSwgIHdoaWNoICBpcyAgdXNlZAorICAgICAgIHdoZW4gIHRoZSB0ZXJtaW5hbCBnZXRzIGludG8gYSB3ZWRnZWQgc3RhdGUuICBDb21tYW5kcyBhcmUKKyAgICAgICBub3JtYWxseSBwbGFjZWQgaW4gPFNUUk9ORz5yczE8L1NUUk9ORz4sIDxTVFJPTkc+cnMyPC9TVFJPTkc+IDxTVFJPTkc+cnMzPC9TVFJPTkc+IGFuZCA8U1RST05HPnJmPC9TVFJPTkc+IG9ubHkgaWYgIHRoZXkgIHByby0KKyAgICAgICBkdWNlICBhbm5veWluZyBlZmZlY3RzIG9uIHRoZSBzY3JlZW4gYW5kIGFyZSBub3QgbmVjZXNzYXJ5CisgICAgICAgd2hlbiBsb2dnaW5nIGluLiAgRm9yIGV4YW1wbGUsICB0aGUgIGNvbW1hbmQgIHRvICBzZXQgIHRoZQorICAgICAgIHZ0MTAwICBpbnRvICA4MC1jb2x1bW4gbW9kZSB3b3VsZCBub3JtYWxseSBiZSBwYXJ0IG9mIDxTVFJPTkc+aXMyPC9TVFJPTkc+LAorICAgICAgIGJ1dCBpdCBjYXVzZXMgYW4gYW5ub3lpbmcgZ2xpdGNoIG9mIHRoZSBzY3JlZW4gYW5kIGlzICBub3QKKyAgICAgICBub3JtYWxseSAgbmVlZGVkICBzaW5jZSB0aGUgdGVybWluYWwgaXMgdXN1YWxseSBhbHJlYWR5IGluCisgICAgICAgODAgY29sdW1uIG1vZGUuCisKKyAgICAgICBUaGUgPEVNPnJlc2V0PC9FTT4gcHJvZ3JhbSB3cml0ZXMgc3RyaW5ncyBpbmNsdWRpbmcgPFNUUk9ORz5pcHJvZzwvU1RST05HPiwgZXRjLiwgaW4KKyAgICAgICB0aGUgIHNhbWUgIG9yZGVyICBhcyAgdGhlICA8RU0+aW5pdDwvRU0+ICBwcm9ncmFtLCB1c2luZyA8U1RST05HPnJzMTwvU1RST05HPiwgZXRjLiwKKyAgICAgICBpbnN0ZWFkIG9mIDxTVFJPTkc+aXMxPC9TVFJPTkc+LCBldGMuICBJZiBhbnkgb2YgPFNUUk9ORz5yczE8L1NUUk9ORz4sIDxTVFJPTkc+cnMyPC9TVFJPTkc+LCA8U1RST05HPnJzMzwvU1RST05HPiwgb3IgPFNUUk9ORz5yZjwvU1RST05HPiByZXNldAorICAgICAgIGNhcGFiaWxpdHkgIHN0cmluZ3MgIGFyZSAgbWlzc2luZywgdGhlIDxFTT5yZXNldDwvRU0+IHByb2dyYW0gZmFsbHMKKyAgICAgICBiYWNrICB1cG9uICB0aGUgIGNvcnJlc3BvbmRpbmcgIGluaXRpYWxpemF0aW9uICBjYXBhYmlsaXR5CisgICAgICAgc3RyaW5nLgorCisgICAgICAgSWYgdGhlcmUgYXJlIGNvbW1hbmRzIHRvIHNldCBhbmQgY2xlYXIgdGFiIHN0b3BzLCB0aGV5IGNhbgorICAgICAgIGJlIGdpdmVuIGFzIDxTVFJPTkc+dGJjPC9TVFJPTkc+IChjbGVhciBhbGwgdGFiIHN0b3BzKSBhbmQgPFNUUk9ORz5odHM8L1NUUk9ORz4gKHNldCAgYSAgdGFiCisgICAgICAgc3RvcCAgaW4gdGhlIGN1cnJlbnQgY29sdW1uIG9mIGV2ZXJ5IHJvdykuICBJZiBhIG1vcmUgY29tLQorICAgICAgIHBsZXggc2VxdWVuY2UgaXMgbmVlZGVkICB0byAgc2V0ICB0aGUgIHRhYnMgIHRoYW4gIGNhbiAgYmUKKyAgICAgICBkZXNjcmliZWQgIGJ5ICB0aGlzLCAgdGhlIHNlcXVlbmNlIGNhbiBiZSBwbGFjZWQgaW4gPFNUUk9ORz5pczI8L1NUUk9ORz4gb3IKKyAgICAgICA8U1RST05HPmlmPC9TVFJPTkc+LgorCisgICA8U1RST05HPkRlbGF5czwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPlBhZGRpbmc8L1NUUk9ORz4KKyAgICAgICBNYW55IG9sZGVyIGFuZCBzbG93ZXIgIHRlcm1pbmFscyAgZG8gIG5vdCAgc3VwcG9ydCAgZWl0aGVyCisgICAgICAgWE9OL1hPRkYgb3IgRFRSIGhhbmRzaGFraW5nLCBpbmNsdWRpbmcgaGFyZCBjb3B5IHRlcm1pbmFscworICAgICAgIGFuZCBzb21lIHZlcnkgYXJjaGFpYyBDUlRzIChpbmNsdWRpbmcsICBmb3IgIGV4YW1wbGUsICBERUMKKyAgICAgICBWVDEwMHMpLiAgIFRoZXNlIG1heSByZXF1aXJlIHBhZGRpbmcgY2hhcmFjdGVycyBhZnRlciBjZXItCisgICAgICAgdGFpbiBjdXJzb3IgbW90aW9ucyBhbmQgc2NyZWVuIGNoYW5nZXMuCisKKyAgICAgICBJZiB0aGUgdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZyBmb3IgZmxvdyBjb250cm9sCisgICAgICAgKHRoYXQgIGlzLCBpdCBhdXRvbWF0aWNhbGx5IGVtaXRzIF5TIGJhY2sgdG8gdGhlIGhvc3Qgd2hlbgorICAgICAgIGl0cyBpbnB1dCBidWZmZXJzIGFyZSBjbG9zZSB0byBmdWxsKSwgc2V0IDxTVFJPTkc+eG9uPC9TVFJPTkc+LiAgVGhpcyBjYXBhLQorICAgICAgIGJpbGl0eSAgc3VwcHJlc3NlcyAgdGhlIGVtaXNzaW9uIG9mIHBhZGRpbmcuICBZb3UgY2FuIGFsc28KKyAgICAgICBzZXQgaXQgZm9yIG1lbW9yeS1tYXBwZWQgY29uc29sZSBkZXZpY2VzIGVmZmVjdGl2ZWx5ICB0aGF0CisgICAgICAgZG8gIG5vdCAgaGF2ZSAgYSAgc3BlZWQgbGltaXQuICBQYWRkaW5nIGluZm9ybWF0aW9uIHNob3VsZAorICAgICAgIHN0aWxsIGJlIGluY2x1ZGVkIHNvIHRoYXQgcm91dGluZXMgY2FuIG1ha2UgIGJldHRlciAgZGVjaS0KKyAgICAgICBzaW9ucyBhYm91dCByZWxhdGl2ZSBjb3N0cywgYnV0IGFjdHVhbCBwYWQgY2hhcmFjdGVycyB3aWxsCisgICAgICAgbm90IGJlIHRyYW5zbWl0dGVkLgorCisgICAgICAgSWYgPFNUUk9ORz5wYjwvU1RST05HPiAocGFkZGluZyBiYXVkIHJhdGUpIGlzIGdpdmVuLCBwYWRkaW5nIGlzICBzdXBwcmVzc2VkCisgICAgICAgYXQgIGJhdWQgcmF0ZXMgYmVsb3cgdGhlIHZhbHVlIG9mIDxTVFJPTkc+cGI8L1NUUk9ORz4uICBJZiB0aGUgZW50cnkgaGFzIG5vCisgICAgICAgcGFkZGluZyBiYXVkIHJhdGUsIHRoZW4gd2hldGhlciBwYWRkaW5nIGlzIGVtaXR0ZWQgb3IgIG5vdAorICAgICAgIGlzIGNvbXBsZXRlbHkgY29udHJvbGxlZCBieSA8U1RST05HPnhvbjwvU1RST05HPi4KKworICAgICAgIElmICB0aGUgdGVybWluYWwgcmVxdWlyZXMgb3RoZXIgdGhhbiBhIG51bGwgKHplcm8pIGNoYXJhYy0KKyAgICAgICB0ZXIgYXMgYSBwYWQsIHRoZW4gdGhpcyBjYW4gYmUgZ2l2ZW4gIGFzICA8U1RST05HPnBhZDwvU1RST05HPi4gICBPbmx5ICB0aGUKKyAgICAgICBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIDxTVFJPTkc+cGFkPC9TVFJPTkc+IHN0cmluZyBpcyB1c2VkLgorCisKKyAgIDxTVFJPTkc+U3RhdHVzPC9TVFJPTkc+IDxTVFJPTkc+TGluZXM8L1NUUk9ORz4KKyAgICAgICBTb21lICB0ZXJtaW5hbHMgIGhhdmUgIGFuIGV4dHJhIGBzdGF0dXMgbGluZScgd2hpY2ggaXMgbm90CisgICAgICAgbm9ybWFsbHkgdXNlZCBieSBzb2Z0d2FyZSAoYW5kIHRodXMgIG5vdCAgY291bnRlZCAgaW4gIHRoZQorICAgICAgIHRlcm1pbmFsJ3MgPFNUUk9ORz5saW5lczwvU1RST05HPiBjYXBhYmlsaXR5KS4KKworICAgICAgIFRoZSAgc2ltcGxlc3QgIGNhc2UgIGlzICBhICBzdGF0dXMgIGxpbmUgIHdoaWNoIGlzIGN1cnNvci0KKyAgICAgICBhZGRyZXNzYWJsZSBidXQgbm90IHBhcnQgb2YgdGhlIG1haW4gc2Nyb2xsaW5nICByZWdpb24gIG9uCisgICAgICAgdGhlICBzY3JlZW47ICB0aGUgIEhlYXRoa2l0ICBIMTkgaGFzIGEgc3RhdHVzIGxpbmUgb2YgdGhpcworICAgICAgIGtpbmQsIGFzIHdvdWxkIGEgMjQtbGluZSBWVDEwMCB3aXRoICBhICAyMy1saW5lICBzY3JvbGxpbmcKKyAgICAgICByZWdpb24gIHNldCB1cCBvbiBpbml0aWFsaXphdGlvbi4gIFRoaXMgc2l0dWF0aW9uIGlzIGluZGktCisgICAgICAgY2F0ZWQgYnkgdGhlIDxTVFJPTkc+aHM8L1NUUk9ORz4gY2FwYWJpbGl0eS4KKworICAgICAgIFNvbWUgdGVybWluYWxzIHdpdGggc3RhdHVzIGxpbmVzIG5lZWQgc3BlY2lhbCBzZXF1ZW5jZXMgdG8KKyAgICAgICBhY2Nlc3MgIHRoZSAgc3RhdHVzICBsaW5lLiAgIFRoZXNlICBtYXkgIGJlIGV4cHJlc3NlZCBhcyBhCisgICAgICAgc3RyaW5nIHdpdGggc2luZ2xlIHBhcmFtZXRlciA8U1RST05HPnRzbDwvU1RST05HPiB3aGljaCB0YWtlcyB0aGUgY3Vyc29yIHRvCisgICAgICAgYSAgZ2l2ZW4gemVyby1vcmlnaW4gY29sdW1uIG9uIHRoZSBzdGF0dXMgbGluZS4gIFRoZSBjYXBhLQorICAgICAgIGJpbGl0eSA8U1RST05HPmZzbDwvU1RST05HPiBtdXN0IHJldHVybiB0byB0aGUgbWFpbi1zY3JlZW4gY3Vyc29yIHBvc2l0aW9ucworICAgICAgIGJlZm9yZSAgdGhlICBsYXN0ICA8U1RST05HPnRzbDwvU1RST05HPi4gICBZb3UgbWF5IG5lZWQgdG8gZW1iZWQgdGhlIHN0cmluZworICAgICAgIHZhbHVlcyBvZiA8U1RST05HPnNjPC9TVFJPTkc+IChzYXZlIGN1cnNvcikgYW5kIDxTVFJPTkc+cmM8L1NUUk9ORz4gKHJlc3RvcmUgY3Vyc29yKSBpbiAgPFNUUk9ORz50c2w8L1NUUk9ORz4KKyAgICAgICBhbmQgPFNUUk9ORz5mc2w8L1NUUk9ORz4gdG8gYWNjb21wbGlzaCB0aGlzLgorCisgICAgICAgVGhlICBzdGF0dXMgIGxpbmUgaXMgbm9ybWFsbHkgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSB3aWR0aAorICAgICAgIGFzIHRoZSB3aWR0aCBvZiB0aGUgdGVybWluYWwuICBJZiB0aGlzIGlzIHVudHJ1ZSwgeW91ICBjYW4KKyAgICAgICBzcGVjaWZ5IGl0IHdpdGggdGhlIG51bWVyaWMgY2FwYWJpbGl0eSA8U1RST05HPndzbDwvU1RST05HPi4KKworICAgICAgIEEgIGNvbW1hbmQgdG8gZXJhc2Ugb3IgYmxhbmsgdGhlIHN0YXR1cyBsaW5lIG1heSBiZSBzcGVjaS0KKyAgICAgICBmaWVkIGFzIDxTVFJPTkc+ZHNsPC9TVFJPTkc+LgorCisgICAgICAgVGhlICBib29sZWFuICBjYXBhYmlsaXR5ICA8U1RST05HPmVzbG9rPC9TVFJPTkc+ICBzcGVjaWZpZXMgICB0aGF0ICAgZXNjYXBlCisgICAgICAgc2VxdWVuY2VzLCB0YWJzLCBldGMuLCB3b3JrIG9yZGluYXJpbHkgaW4gdGhlIHN0YXR1cyBsaW5lLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgdXNlIGFueSAgb2YgIHRoZXNlCisgICAgICAgY2FwYWJpbGl0aWVzLiAgIFRoZXkgYXJlIGRvY3VtZW50ZWQgaGVyZSBpbiBjYXNlIHRoZXkgZXZlcgorICAgICAgIGJlY29tZSBpbXBvcnRhbnQuCisKKworICAgPFNUUk9ORz5MaW5lPC9TVFJPTkc+IDxTVFJPTkc+R3JhcGhpY3M8L1NUUk9ORz4KKyAgICAgICBNYW55IHRlcm1pbmFscyBoYXZlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgIHNldHMgIHVzZWZ1bCAgZm9yCisgICAgICAgZm9ybXMtZHJhd2luZy4gICBUZXJtaW5mbyAgYW5kIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGJ1aWxkIGluIHN1cHBvcnQgZm9yCisgICAgICAgdGhlIGRyYXdpbmcgY2hhcmFjdGVycyBzdXBwb3J0ZWQgYnkgdGhlIFZUMTAwLCAgd2l0aCAgc29tZQorICAgICAgIGNoYXJhY3RlcnMgIGZyb20gIHRoZSAgQVQmYW1wO1QgIDQ0MTB2MSBhZGRlZC4gIFRoaXMgYWx0ZXJuYXRlCisgICAgICAgY2hhcmFjdGVyIHNldCBtYXkgYmUgc3BlY2lmaWVkIGJ5IHRoZSA8U1RST05HPmFjc2M8L1NUUk9ORz4gY2FwYWJpbGl0eS4KKworCisgICAgICAgICAgICAgICAgPFNUUk9ORz5HbHlwaDwvU1RST05HPiAgICAgICAgICAgICA8U1RST05HPkFDUzwvU1RST05HPiAgICAgICAgICAgIDxTVFJPTkc+QXNjaWk8L1NUUk9ORz4gICAgICA8U1RST05HPlZUMTAwPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgIDxTVFJPTkc+TmFtZTwvU1RST05HPiAgICAgICAgICAgICA8U1RST05HPk5hbWU8L1NUUk9ORz4gICAgICAgICAgIDxTVFJPTkc+RGVmYXVsdDwvU1RST05HPiAgICA8U1RST05HPk5hbWU8L1NUUk9ORz4KKyAgICAgICBVSyBwb3VuZCBzaWduICAgICAgICAgICAgICBBQ1NfU1RFUkxJTkcgICBmICAgICAgICAgIH0KKyAgICAgICBhcnJvdyBwb2ludGluZyBkb3duICAgICAgICBBQ1NfREFSUk9XICAgICB2ICAgICAgICAgIC4KKyAgICAgICBhcnJvdyBwb2ludGluZyBsZWZ0ICAgICAgICBBQ1NfTEFSUk9XICAgICAmbHQ7ICAgICAgICAgICwKKyAgICAgICBhcnJvdyBwb2ludGluZyByaWdodCAgICAgICBBQ1NfUkFSUk9XICAgICAmZ3Q7ICAgICAgICAgICsKKyAgICAgICBhcnJvdyBwb2ludGluZyB1cCAgICAgICAgICBBQ1NfVUFSUk9XICAgICBeICAgICAgICAgIC0KKyAgICAgICBib2FyZCBvZiBzcXVhcmVzICAgICAgICAgICBBQ1NfQk9BUkQgICAgICAjICAgICAgICAgIGgKKyAgICAgICBidWxsZXQgICAgICAgICAgICAgICAgICAgICBBQ1NfQlVMTEVUICAgICBvICAgICAgICAgIH4KKyAgICAgICBjaGVja2VyIGJvYXJkIChzdGlwcGxlKSAgICBBQ1NfQ0tCT0FSRCAgICA6ICAgICAgICAgIGEKKyAgICAgICBkZWdyZWUgc3ltYm9sICAgICAgICAgICAgICBBQ1NfREVHUkVFICAgICBcICAgICAgICAgIGYKKyAgICAgICBkaWFtb25kICAgICAgICAgICAgICAgICAgICBBQ1NfRElBTU9ORCAgICArICAgICAgICAgIGAKKyAgICAgICBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gICBBQ1NfR0VRVUFMICAgICAmZ3Q7ICAgICAgICAgIHoKKyAgICAgICBncmVlayBwaSAgICAgICAgICAgICAgICAgICBBQ1NfUEkgICAgICAgICAqICAgICAgICAgIHsKKyAgICAgICBob3Jpem9udGFsIGxpbmUgICAgICAgICAgICBBQ1NfSExJTkUgICAgICAtICAgICAgICAgIHEKKyAgICAgICBsYW50ZXJuIHN5bWJvbCAgICAgICAgICAgICBBQ1NfTEFOVEVSTiAgICAjICAgICAgICAgIGkKKyAgICAgICBsYXJnZSBwbHVzIG9yIGNyb3Nzb3ZlciAgICBBQ1NfUExVUyAgICAgICArICAgICAgICAgIG4KKyAgICAgICBsZXNzLXRoYW4tb3ItZXF1YWwtdG8gICAgICBBQ1NfTEVRVUFMICAgICAmbHQ7ICAgICAgICAgIHkKKworICAgICAgIGxvd2VyIGxlZnQgY29ybmVyICAgICAgICAgIEFDU19MTENPUk5FUiAgICsgICAgICAgICAgbQorICAgICAgIGxvd2VyIHJpZ2h0IGNvcm5lciAgICAgICAgIEFDU19MUkNPUk5FUiAgICsgICAgICAgICAgagorICAgICAgIG5vdC1lcXVhbCAgICAgICAgICAgICAgICAgIEFDU19ORVFVQUwgICAgICEgICAgICAgICAgfAorICAgICAgIHBsdXMvbWludXMgICAgICAgICAgICAgICAgIEFDU19QTE1JTlVTICAgICMgICAgICAgICAgZworICAgICAgIHNjYW4gbGluZSAxICAgICAgICAgICAgICAgIEFDU19TMSAgICAgICAgIH4gICAgICAgICAgbworICAgICAgIHNjYW4gbGluZSAzICAgICAgICAgICAgICAgIEFDU19TMyAgICAgICAgIC0gICAgICAgICAgcAorICAgICAgIHNjYW4gbGluZSA3ICAgICAgICAgICAgICAgIEFDU19TNyAgICAgICAgIC0gICAgICAgICAgcgorICAgICAgIHNjYW4gbGluZSA5ICAgICAgICAgICAgICAgIEFDU19TOSAgICAgICAgIF8gICAgICAgICAgcworICAgICAgIHNvbGlkIHNxdWFyZSBibG9jayAgICAgICAgIEFDU19CTE9DSyAgICAgICMgICAgICAgICAgMAorICAgICAgIHRlZSBwb2ludGluZyBkb3duICAgICAgICAgIEFDU19UVEVFICAgICAgICsgICAgICAgICAgdworICAgICAgIHRlZSBwb2ludGluZyBsZWZ0ICAgICAgICAgIEFDU19SVEVFICAgICAgICsgICAgICAgICAgdQorICAgICAgIHRlZSBwb2ludGluZyByaWdodCAgICAgICAgIEFDU19MVEVFICAgICAgICsgICAgICAgICAgdAorICAgICAgIHRlZSBwb2ludGluZyB1cCAgICAgICAgICAgIEFDU19CVEVFICAgICAgICsgICAgICAgICAgdgorICAgICAgIHVwcGVyIGxlZnQgY29ybmVyICAgICAgICAgIEFDU19VTENPUk5FUiAgICsgICAgICAgICAgbAorICAgICAgIHVwcGVyIHJpZ2h0IGNvcm5lciAgICAgICAgIEFDU19VUkNPUk5FUiAgICsgICAgICAgICAgaworICAgICAgIHZlcnRpY2FsIGxpbmUgICAgICAgICAgICAgIEFDU19WTElORSAgICAgIHwgICAgICAgICAgeAorCisgICAgICAgVGhlIGJlc3Qgd2F5IHRvIGRlZmluZSBhIG5ldyBkZXZpY2UncyBncmFwaGljcyBzZXQgIGlzICB0bworICAgICAgIGFkZCAgYSAgY29sdW1uICB0byBhIGNvcHkgb2YgdGhpcyB0YWJsZSBmb3IgeW91ciB0ZXJtaW5hbCwKKyAgICAgICBnaXZpbmcgIHRoZSAgY2hhcmFjdGVyICAgd2hpY2ggICAod2hlbiAgIGVtaXR0ZWQgICBiZXR3ZWVuCisgICAgICAgPFNUUk9ORz5zbWFjczwvU1RST05HPi88U1RST05HPnJtYWNzPC9TVFJPTkc+ICBzd2l0Y2hlcykgd2lsbCBiZSByZW5kZXJlZCBhcyB0aGUgY29ycmVzcG9uZC0KKyAgICAgICBpbmcgZ3JhcGhpYy4gIFRoZW4gcmVhZCBvZmYgdGhlIFZUMTAwL3lvdXIgdGVybWluYWwgIGNoYXItCisgICAgICAgYWN0ZXIgIHBhaXJzICByaWdodCAgdG8gbGVmdCBpbiBzZXF1ZW5jZTsgdGhlc2UgYmVjb21lIHRoZQorICAgICAgIEFDU0Mgc3RyaW5nLgorCisKKyAgIDxTVFJPTkc+Q29sb3I8L1NUUk9ORz4gPFNUUk9ORz5IYW5kbGluZzwvU1RST05HPgorICAgICAgIE1vc3QgY29sb3IgdGVybWluYWxzIGFyZSBlaXRoZXIgYFRla3Ryb25peC1saWtlJyAgb3IgIGBIUC0KKyAgICAgICBsaWtlJy4gICBUZWt0cm9uaXgtbGlrZSB0ZXJtaW5hbHMgaGF2ZSBhIHByZWRlZmluZWQgc2V0IG9mCisgICAgICAgTiBjb2xvcnMgKHdoZXJlIE4gdXN1YWxseSA4KSwgYW5kIGNhbiAgc2V0ICBjaGFyYWN0ZXItY2VsbAorICAgICAgIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY2hhcmFjdGVycyBpbmRlcGVuZGVudGx5LCBtaXhpbmcKKyAgICAgICB0aGVtIGludG8gTiAqIE4gY29sb3ItcGFpcnMuICBPbiAgSFAtbGlrZSAgdGVybWluYWxzLCAgdGhlCisgICAgICAgdXNlIG11c3Qgc2V0IGVhY2ggY29sb3IgcGFpciB1cCBzZXBhcmF0ZWx5IChmb3JlZ3JvdW5kIGFuZAorICAgICAgIGJhY2tncm91bmQgYXJlICBub3QgIGluZGVwZW5kZW50bHkgIHNldHRhYmxlKS4gICBVcCAgdG8gIE0KKyAgICAgICBjb2xvci1wYWlycyAgbWF5ICBiZSAgc2V0ICB1cCAgZnJvbSAgMipNIGRpZmZlcmVudCBjb2xvcnMuCisgICAgICAgQU5TSS1jb21wYXRpYmxlIHRlcm1pbmFscyBhcmUgVGVrdHJvbml4LWxpa2UuCisKKyAgICAgICBTb21lIGJhc2ljIGNvbG9yIGNhcGFiaWxpdGllcyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbG9yCisgICAgICAgbWV0aG9kLiAgVGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzIDxTVFJPTkc+Y29sb3JzPC9TVFJPTkc+IGFuZCA8U1RST05HPnBhaXJzPC9TVFJPTkc+IHNwZWNpZnkKKyAgICAgICB0aGUgbWF4aW11bSBudW1iZXJzIG9mIGNvbG9ycyBhbmQgY29sb3ItcGFpcnMgdGhhdCBjYW4gIGJlCisgICAgICAgZGlzcGxheWVkICBzaW11bHRhbmVvdXNseS4gICBUaGUgPFNUUk9ORz5vcDwvU1RST05HPiAob3JpZ2luYWwgcGFpcikgc3RyaW5nCisgICAgICAgcmVzZXRzIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIHRvICB0aGVpciAgZGVmYXVsdAorICAgICAgIHZhbHVlcyAgZm9yIHRoZSB0ZXJtaW5hbC4gIFRoZSA8U1RST05HPm9jPC9TVFJPTkc+IHN0cmluZyByZXNldHMgYWxsIGNvbG9ycworICAgICAgIG9yIGNvbG9yLXBhaXJzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGZvciAgdGhlICB0ZXJtaW5hbC4KKyAgICAgICBTb21lICB0ZXJtaW5hbHMgIChpbmNsdWRpbmcgIG1hbnkgIFBDICB0ZXJtaW5hbCBlbXVsYXRvcnMpCisgICAgICAgZXJhc2Ugc2NyZWVuICBhcmVhcyAgd2l0aCAgdGhlICBjdXJyZW50ICBiYWNrZ3JvdW5kICBjb2xvcgorICAgICAgIHJhdGhlciAgdGhhbiB0aGUgcG93ZXItdXAgZGVmYXVsdCBiYWNrZ3JvdW5kOyB0aGVzZSBzaG91bGQKKyAgICAgICBoYXZlIHRoZSBib29sZWFuIGNhcGFiaWxpdHkgPFNUUk9ORz5iY2U8L1NUUk9ORz4uCisKKyAgICAgICBUbyBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9yIG9uICBhCisgICAgICAgVGVrdHJvbml4LXR5cGUgIHRlcm1pbmFsLCAgdXNlIDxTVFJPTkc+c2V0YWY8L1NUUk9ORz4gKHNldCBBTlNJIGZvcmVncm91bmQpCisgICAgICAgYW5kIDxTVFJPTkc+c2V0YWI8L1NUUk9ORz4gKHNldCBBTlNJIGJhY2tncm91bmQpIG9yIDxTVFJPTkc+c2V0ZjwvU1RST05HPiAgKHNldCAgZm9yZWdyb3VuZCkKKyAgICAgICBhbmQgIDxTVFJPTkc+c2V0YjwvU1RST05HPiAoc2V0IGJhY2tncm91bmQpLiAgVGhlc2UgdGFrZSBvbmUgcGFyYW1ldGVyLCB0aGUKKyAgICAgICBjb2xvciAgbnVtYmVyLiAgIFRoZSAgU1ZyNCAgZG9jdW1lbnRhdGlvbiAgZGVzY3JpYmVzICBvbmx5CisgICAgICAgPFNUUk9ORz5zZXRhZjwvU1RST05HPi88U1RST05HPnNldGFiPC9TVFJPTkc+OyAgdGhlICBYUEc0ICBkcmFmdCAgc2F5cyB0aGF0ICJJZiB0aGUgdGVybWluYWwKKyAgICAgICBzdXBwb3J0cyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gc2V0IGJhY2tncm91bmQgYW5kIGZvcmUtCisgICAgICAgZ3JvdW5kLCAgdGhleSAgc2hvdWxkIGJlIGNvZGVkIGFzIDxTVFJPTkc+c2V0YWY8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2V0YWI8L1NUUk9ORz4sIHJlc3BlYy0KKyAgICAgICB0aXZlbHkuICBJZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgb3RoZXIgIGVzY2FwZSAgc2VxdWVuY2VzCisgICAgICAgdG8gIHNldCBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kLCB0aGV5IHNob3VsZCBiZSBjb2RlZCBhcworICAgICAgIDxTVFJPTkc+c2V0ZjwvU1RST05HPiBhbmQgPFNUUk9ORz5zZXRiPC9TVFJPTkc+LCByZXNwZWN0aXZlbHkuICBUaGUgPEVNPnZpZHB1dHMoKTwvRU0+ICBmdW5jdGlvbiAgYW5kCisgICAgICAgdGhlICByZWZyZXNoICBmdW5jdGlvbnMgIHVzZSAgPFNUUk9ORz5zZXRhZjwvU1RST05HPiAgYW5kIDxTVFJPTkc+c2V0YWI8L1NUUk9ORz4gaWYgdGhleSBhcmUKKyAgICAgICBkZWZpbmVkLiIKKworICAgICAgIFRoZSA8U1RST05HPnNldGFmPC9TVFJPTkc+LzxTVFJPTkc+c2V0YWI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2V0ZjwvU1RST05HPi88U1RST05HPnNldGI8L1NUUk9ORz4gY2FwYWJpbGl0aWVzIHRha2UgIGEgIHNpbmdsZQorICAgICAgIG51bWVyaWMgYXJndW1lbnQgZWFjaC4gIEFyZ3VtZW50IHZhbHVlcyAwLTcgb2YgPFNUUk9ORz5zZXRhZjwvU1RST05HPi88U1RST05HPnNldGFiPC9TVFJPTkc+CisgICAgICAgYXJlIHBvcnRhYmx5IGRlZmluZWQgYXMgZm9sbG93cyAodGhlIG1pZGRsZSBjb2x1bW4gaXMgIHRoZQorICAgICAgIHN5bWJvbGljICNkZWZpbmUgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXIgZm9yIHRoZSA8U1RST05HPmN1cnNlczwvU1RST05HPiBvcgorICAgICAgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJpZXMpLiAgVGhlIHRlcm1pbmFsIGhhcmR3YXJlIGlzIGZyZWUgdG8gIG1hcAorICAgICAgIHRoZXNlICBhcyAgaXQgIGxpa2VzLCAgYnV0ICB0aGUgUkdCIHZhbHVlcyBpbmRpY2F0ZSBub3JtYWwKKyAgICAgICBsb2NhdGlvbnMgaW4gY29sb3Igc3BhY2UuCisKKworICAgICAgICAgICAgIDxTVFJPTkc+Q29sb3I8L1NUUk9ORz4gICAgICAgPFNUUk9ORz4jZGVmaW5lPC9TVFJPTkc+ICAgICAgIDxTVFJPTkc+VmFsdWU8L1NUUk9ORz4gICAgICAgPFNUUk9ORz5SR0I8L1NUUk9ORz4KKyAgICAgICAgICAgICBibGFjayAgICAgPFNUUk9ORz5DT0xPUl9CTEFDSzwvU1RST05HPiAgICAgICAwICAgICAwLCAwLCAwCisgICAgICAgICAgICAgcmVkICAgICAgIDxTVFJPTkc+Q09MT1JfUkVEPC9TVFJPTkc+ICAgICAgICAgMSAgICAgbWF4LDAsMAorICAgICAgICAgICAgIGdyZWVuICAgICA8U1RST05HPkNPTE9SX0dSRUVOPC9TVFJPTkc+ICAgICAgIDIgICAgIDAsbWF4LDAKKyAgICAgICAgICAgICB5ZWxsb3cgICAgPFNUUk9ORz5DT0xPUl9ZRUxMT1c8L1NUUk9ORz4gICAgICAzICAgICBtYXgsbWF4LDAKKyAgICAgICAgICAgICBibHVlICAgICAgPFNUUk9ORz5DT0xPUl9CTFVFPC9TVFJPTkc+ICAgICAgICA0ICAgICAwLDAsbWF4CisgICAgICAgICAgICAgbWFnZW50YSAgIDxTVFJPTkc+Q09MT1JfTUFHRU5UQTwvU1RST05HPiAgICAgNSAgICAgbWF4LDAsbWF4CisgICAgICAgICAgICAgY3lhbiAgICAgIDxTVFJPTkc+Q09MT1JfQ1lBTjwvU1RST05HPiAgICAgICAgNiAgICAgMCxtYXgsbWF4CisgICAgICAgICAgICAgd2hpdGUgICAgIDxTVFJPTkc+Q09MT1JfV0hJVEU8L1NUUk9ORz4gICAgICAgNyAgICAgbWF4LG1heCxtYXgKKworICAgICAgIFRoZSBhcmd1bWVudCB2YWx1ZXMgb2YgPFNUUk9ORz5zZXRmPC9TVFJPTkc+LzxTVFJPTkc+c2V0YjwvU1RST05HPiAgaGlzdG9yaWNhbGx5ICBjb3JyZXNwb25kCisgICAgICAgdG8gYSBkaWZmZXJlbnQgbWFwcGluZywgaS5lLiwKKworICAgICAgICAgICAgIDxTVFJPTkc+Q29sb3I8L1NUUk9ORz4gICAgICAgPFNUUk9ORz4jZGVmaW5lPC9TVFJPTkc+ICAgICAgIDxTVFJPTkc+VmFsdWU8L1NUUk9ORz4gICAgICAgPFNUUk9ORz5SR0I8L1NUUk9ORz4KKyAgICAgICAgICAgICBibGFjayAgICAgPFNUUk9ORz5DT0xPUl9CTEFDSzwvU1RST05HPiAgICAgICAwICAgICAwLCAwLCAwCisgICAgICAgICAgICAgYmx1ZSAgICAgIDxTVFJPTkc+Q09MT1JfQkxVRTwvU1RST05HPiAgICAgICAgMSAgICAgMCwwLG1heAorICAgICAgICAgICAgIGdyZWVuICAgICA8U1RST05HPkNPTE9SX0dSRUVOPC9TVFJPTkc+ICAgICAgIDIgICAgIDAsbWF4LDAKKyAgICAgICAgICAgICBjeWFuICAgICAgPFNUUk9ORz5DT0xPUl9DWUFOPC9TVFJPTkc+ICAgICAgICAzICAgICAwLG1heCxtYXgKKyAgICAgICAgICAgICByZWQgICAgICAgPFNUUk9ORz5DT0xPUl9SRUQ8L1NUUk9ORz4gICAgICAgICA0ICAgICBtYXgsMCwwCisgICAgICAgICAgICAgbWFnZW50YSAgIDxTVFJPTkc+Q09MT1JfTUFHRU5UQTwvU1RST05HPiAgICAgNSAgICAgbWF4LDAsbWF4CisgICAgICAgICAgICAgeWVsbG93ICAgIDxTVFJPTkc+Q09MT1JfWUVMTE9XPC9TVFJPTkc+ICAgICAgNiAgICAgbWF4LG1heCwwCisgICAgICAgICAgICAgd2hpdGUgICAgIDxTVFJPTkc+Q09MT1JfV0hJVEU8L1NUUk9ORz4gICAgICAgNyAgICAgbWF4LG1heCxtYXgKKyAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90IGNvbmZ1c2UgdGhlIHR3byBzZXRzIG9mIGNvbG9yIGNhcGEtCisgICAgICAgYmlsaXRpZXM7IG90aGVyd2lzZSByZWQvYmx1ZSB3aWxsIGJlIGludGVyY2hhbmdlZCAgb24gIHRoZQorICAgICAgIGRpc3BsYXkuCisKKyAgICAgICBPbiAgYW4gIEhQLWxpa2UgdGVybWluYWwsIHVzZSA8U1RST05HPnNjcDwvU1RST05HPiB3aXRoIGEgY29sb3ItcGFpciBudW1iZXIKKyAgICAgICBwYXJhbWV0ZXIgdG8gc2V0IHdoaWNoIGNvbG9yIHBhaXIgaXMgY3VycmVudC4KKworICAgICAgIE9uIGEgVGVrdHJvbml4LWxpa2UgdGVybWluYWwsIHRoZSBjYXBhYmlsaXR5ICA8U1RST05HPmNjYzwvU1RST05HPiAgbWF5ICBiZQorICAgICAgIHByZXNlbnQgIHRvICBpbmRpY2F0ZSB0aGF0IGNvbG9ycyBjYW4gYmUgbW9kaWZpZWQuICBJZiBzbywKKyAgICAgICB0aGUgPFNUUk9ORz5pbml0YzwvU1RST05HPiBjYXBhYmlsaXR5IHdpbGwgdGFrZSBhIGNvbG9yIG51bWJlciAoMCB0byA8U1RST05HPmNvbG9yczwvU1RST05HPgorICAgICAgIC0gIDEpYW5kICB0aHJlZSAgbW9yZSBwYXJhbWV0ZXJzIHdoaWNoIGRlc2NyaWJlIHRoZSBjb2xvci4KKyAgICAgICBUaGVzZSB0aHJlZSBwYXJhbWV0ZXJzIGRlZmF1bHQgdG8gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgUkdCCisgICAgICAgKFJlZCwgIEdyZWVuLCBCbHVlKSB2YWx1ZXMuICBJZiB0aGUgYm9vbGVhbiBjYXBhYmlsaXR5IDxTVFJPTkc+aGxzPC9TVFJPTkc+CisgICAgICAgaXMgcHJlc2VudCwgdGhleSBhcmUgaW5zdGVhZCBhcyBITFMgKEh1ZSwgTGlnaHRuZXNzLCBTYXR1LQorICAgICAgIHJhdGlvbikgaW5kaWNlcy4gIFRoZSByYW5nZXMgYXJlIHRlcm1pbmFsLWRlcGVuZGVudC4KKworICAgICAgIE9uICBhbiAgSFAtbGlrZSAgdGVybWluYWwsIDxTVFJPTkc+aW5pdHA8L1NUUk9ORz4gbWF5IGdpdmUgYSBjYXBhYmlsaXR5IGZvcgorICAgICAgIGNoYW5naW5nIGEgY29sb3ItcGFpciB2YWx1ZS4gIEl0IHdpbGwgdGFrZSAgc2V2ZW4gIHBhcmFtZS0KKyAgICAgICB0ZXJzOyAgYSAgY29sb3ItcGFpciAgbnVtYmVyICgwIHRvIDxTVFJPTkc+bWF4X3BhaXJzPC9TVFJPTkc+IC0gMSksIGFuZCB0d28KKyAgICAgICB0cmlwbGVzIGRlc2NyaWJpbmcgZmlyc3QgYmFja2dyb3VuZCAgYW5kICB0aGVuICBmb3JlZ3JvdW5kCisgICAgICAgY29sb3JzLiAgIFRoZXNlICBwYXJhbWV0ZXJzICBtdXN0IGJlIChSZWQsIEdyZWVuLCBCbHVlKSBvcgorICAgICAgIChIdWUsIExpZ2h0bmVzcywgU2F0dXJhdGlvbikgZGVwZW5kaW5nIG9uIDxTVFJPTkc+aGxzPC9TVFJPTkc+LgorCisgICAgICAgT24gc29tZSBjb2xvciB0ZXJtaW5hbHMsIGNvbG9ycyBjb2xsaWRlICB3aXRoICBoaWdobGlnaHRzLgorICAgICAgIFlvdSBjYW4gcmVnaXN0ZXIgdGhlc2UgY29sbGlzaW9ucyB3aXRoIHRoZSA8U1RST05HPm5jdjwvU1RST05HPiBjYXBhYmlsaXR5LgorICAgICAgIFRoaXMgaXMgYSBiaXQtbWFzayBvZiBhdHRyaWJ1dGVzIG5vdCB0byBiZSB1c2VkIHdoZW4gIGNvbC0KKyAgICAgICBvcnMgIGFyZSAgZW5hYmxlZC4gIFRoZSBjb3JyZXNwb25kZW5jZSB3aXRoIHRoZSBhdHRyaWJ1dGVzCisgICAgICAgdW5kZXJzdG9vZCBieSA8U1RST05HPmN1cnNlczwvU1RST05HPiBpcyBhcyBmb2xsb3dzOgorCisKKyAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPkF0dHJpYnV0ZTwvU1RST05HPiAgICAgIDxTVFJPTkc+Qml0PC9TVFJPTkc+ICAgPFNUUk9ORz5EZWNpbWFsPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgICAgQV9TVEFORE9VVCAgICAgMCAgICAgMQorICAgICAgICAgICAgICAgICAgICAgIEFfVU5ERVJMSU5FICAgIDEgICAgIDIKKyAgICAgICAgICAgICAgICAgICAgICBBX1JFVkVSU0UgICAgICAyICAgICA0CisgICAgICAgICAgICAgICAgICAgICAgQV9CTElOSyAgICAgICAgMyAgICAgOAorICAgICAgICAgICAgICAgICAgICAgIEFfRElNICAgICAgICAgIDQgICAgIDE2CisgICAgICAgICAgICAgICAgICAgICAgQV9CT0xEICAgICAgICAgNSAgICAgMzIKKyAgICAgICAgICAgICAgICAgICAgICBBX0lOVklTICAgICAgICA2ICAgICA2NAorICAgICAgICAgICAgICAgICAgICAgIEFfUFJPVEVDVCAgICAgIDcgICAgIDEyOAorICAgICAgICAgICAgICAgICAgICAgIEFfQUxUQ0hBUlNFVCAgIDggICAgIDI1NgorCisgICAgICAgRm9yIGV4YW1wbGUsICBvbiAgbWFueSAgSUJNICBQQyAgY29uc29sZXMsICB0aGUgIHVuZGVybGluZQorICAgICAgIGF0dHJpYnV0ZSAgY29sbGlkZXMgIHdpdGggdGhlIGZvcmVncm91bmQgY29sb3IgYmx1ZSBhbmQgaXMKKyAgICAgICBub3QgYXZhaWxhYmxlIGluIGNvbG9yIG1vZGUuICBUaGVzZSAgc2hvdWxkICBoYXZlICBhbiAgPFNUUk9ORz5uY3Y8L1NUUk9ORz4KKyAgICAgICBjYXBhYmlsaXR5IG9mIDIuCisKKyAgICAgICBTVnI0ICBjdXJzZXMgIGRvZXMgbm90aGluZyB3aXRoIDxTVFJPTkc+bmN2PC9TVFJPTkc+LCBuY3Vyc2VzIHJlY29nbml6ZXMgaXQKKyAgICAgICBhbmQgb3B0aW1pemVzIHRoZSBvdXRwdXQgaW4gZmF2b3Igb2YgY29sb3JzLgorCisKKyAgIDxTVFJPTkc+TWlzY2VsbGFuZW91czwvU1RST05HPgorICAgICAgIElmIHRoZSB0ZXJtaW5hbCByZXF1aXJlcyBvdGhlciB0aGFuIGEgbnVsbCAoemVybykgIGNoYXJhYy0KKyAgICAgICB0ZXIgIGFzICBhICBwYWQsICB0aGVuIHRoaXMgY2FuIGJlIGdpdmVuIGFzIHBhZC4gIE9ubHkgdGhlCisgICAgICAgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwYWQgc3RyaW5nIGlzIHVzZWQuICBJZiB0aGUgIHRlcm1pLQorICAgICAgIG5hbCBkb2VzIG5vdCBoYXZlIGEgcGFkIGNoYXJhY3Rlciwgc3BlY2lmeSBucGMuICBOb3RlIHRoYXQKKyAgICAgICBuY3Vyc2VzIGltcGxlbWVudHMgIHRoZSAgdGVybWNhcC1jb21wYXRpYmxlICA8U1RST05HPlBDPC9TVFJPTkc+ICB2YXJpYWJsZTsKKyAgICAgICB0aG91Z2ggIHRoZSAgYXBwbGljYXRpb24gIG1heSAgc2V0IHRoaXMgdmFsdWUgdG8gc29tZXRoaW5nCisgICAgICAgb3RoZXIgdGhhbiBhIG51bGwsIG5jdXJzZXMgd2lsbCB0ZXN0ICA8U1RST05HPm5wYzwvU1RST05HPiAgZmlyc3QgIGFuZCAgdXNlCisgICAgICAgbmFwbXMgaWYgdGhlIHRlcm1pbmFsIGhhcyBubyBwYWQgY2hhcmFjdGVyLgorCisgICAgICAgSWYgIHRoZSB0ZXJtaW5hbCBjYW4gbW92ZSB1cCBvciBkb3duIGhhbGYgYSBsaW5lLCB0aGlzIGNhbgorICAgICAgIGJlIGluZGljYXRlZCB3aXRoIDxTVFJPTkc+aHU8L1NUUk9ORz4gIChoYWxmLWxpbmUgIHVwKSAgYW5kICA8U1RST05HPmhkPC9TVFJPTkc+ICAoaGFsZi1saW5lCisgICAgICAgZG93bikuICBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIHN1cGVyc2NyaXB0cyBhbmQgc3ViLQorICAgICAgIHNjcmlwdHMgb24gaGFyZC1jb3B5IHRlcm1pbmFscy4gIElmIGEgIGhhcmQtY29weSAgdGVybWluYWwKKyAgICAgICBjYW4gIGVqZWN0ICB0byAgdGhlIG5leHQgcGFnZSAoZm9ybSBmZWVkKSwgZ2l2ZSB0aGlzIGFzIDxTVFJPTkc+ZmY8L1NUUk9ORz4KKyAgICAgICAodXN1YWxseSBjb250cm9sIEwpLgorCisgICAgICAgSWYgdGhlcmUgaXMgYSBjb21tYW5kIHRvIHJlcGVhdCBhIGdpdmVuIGNoYXJhY3RlciBhICBnaXZlbgorICAgICAgIG51bWJlciAgb2YgdGltZXMgKHRvIHNhdmUgdGltZSB0cmFuc21pdHRpbmcgYSBsYXJnZSBudW1iZXIKKyAgICAgICBvZiBpZGVudGljYWwgY2hhcmFjdGVycykgdGhpcyBjYW4gYmUgIGluZGljYXRlZCAgd2l0aCAgdGhlCisgICAgICAgcGFyYW1ldGVyaXplZCAgc3RyaW5nICA8U1RST05HPnJlcDwvU1RST05HPi4gICBUaGUgIGZpcnN0ICBwYXJhbWV0ZXIgaXMgdGhlCisgICAgICAgY2hhcmFjdGVyIHRvIGJlIHJlcGVhdGVkIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSAgbnVtYmVyICBvZgorICAgICAgIHRpbWVzICB0byByZXBlYXQgaXQuICBUaHVzLCB0cGFybShyZXBlYXRfY2hhciwgJ3gnLCAxMCkgaXMKKyAgICAgICB0aGUgc2FtZSBhcyBgeHh4eHh4eHh4eCcuCisKKyAgICAgICBJZiB0aGUgdGVybWluYWwgaGFzIGEgc2V0dGFibGUgY29tbWFuZCBjaGFyYWN0ZXIsIHN1Y2ggIGFzCisgICAgICAgdGhlICBURUtUUk9OSVggIDQwMjUsIHRoaXMgY2FuIGJlIGluZGljYXRlZCB3aXRoIDxTVFJPTkc+Y21kY2g8L1NUUk9ORz4uICBBCisgICAgICAgcHJvdG90eXBlIGNvbW1hbmQgY2hhcmFjdGVyIGlzIGNob3NlbiB3aGljaCBpcyB1c2VkIGluIGFsbAorICAgICAgIGNhcGFiaWxpdGllcy4gICBUaGlzIGNoYXJhY3RlciBpcyBnaXZlbiBpbiB0aGUgPFNUUk9ORz5jbWRjaDwvU1RST05HPiBjYXBhLQorICAgICAgIGJpbGl0eSB0byBpZGVudGlmeSBpdC4gIFRoZSBmb2xsb3dpbmcgY29udmVudGlvbiAgaXMgIHN1cC0KKyAgICAgICBwb3J0ZWQgIG9uICBzb21lICBVTklYICBzeXN0ZW1zOiAgVGhlIGVudmlyb25tZW50IGlzIHRvIGJlCisgICAgICAgc2VhcmNoZWQgZm9yIGEgPFNUUk9ORz5DQzwvU1RST05HPiB2YXJpYWJsZSwgYW5kIGlmIGZvdW5kLCBhbGwgIG9jY3VycmVuY2VzCisgICAgICAgb2YgdGhlIHByb3RvdHlwZSBjaGFyYWN0ZXIgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGNoYXJhY3RlcgorICAgICAgIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgIFRlcm1pbmFsIGRlc2NyaXB0aW9ucyB0aGF0IGRvICBub3QgIHJlcHJlc2VudCAgYSAgc3BlY2lmaWMKKyAgICAgICBraW5kIG9mIGtub3duIHRlcm1pbmFsLCBzdWNoIGFzIDxFTT5zd2l0Y2g8L0VNPiwgPEVNPmRpYWx1cDwvRU0+LCA8RU0+cGF0Y2g8L0VNPiwgYW5kCisgICAgICAgPEVNPm5ldHdvcms8L0VNPiwgc2hvdWxkIGluY2x1ZGUgdGhlICA8U1RST05HPmduPC9TVFJPTkc+ICAoZ2VuZXJpYykgIGNhcGFiaWxpdHkgIHNvCisgICAgICAgdGhhdCAgcHJvZ3JhbXMgIGNhbiAgY29tcGxhaW4gdGhhdCB0aGV5IGRvIG5vdCBrbm93IGhvdyB0bworICAgICAgIHRhbGsgdG8gdGhlIHRlcm1pbmFsLiAgKFRoaXMgY2FwYWJpbGl0eSBkb2VzIG5vdCBhcHBseSAgdG8KKyAgICAgICA8RU0+dmlydHVhbDwvRU0+ICAgdGVybWluYWwgICBkZXNjcmlwdGlvbnMgIGZvciAgd2hpY2ggIHRoZSAgZXNjYXBlCisgICAgICAgc2VxdWVuY2VzIGFyZSBrbm93bi4pCisKKyAgICAgICBJZiB0aGUgdGVybWluYWwgaGFzIGEgYGBtZXRhIGtleScnIHdoaWNoIGFjdHMgYXMgIGEgIHNoaWZ0CisgICAgICAga2V5LCAgc2V0dGluZyAgdGhlICA4dGggIGJpdCBvZiBhbnkgY2hhcmFjdGVyIHRyYW5zbWl0dGVkLAorICAgICAgIHRoaXMgZmFjdCBjYW4gYmUgaW5kaWNhdGVkIHdpdGggPFNUUk9ORz5rbTwvU1RST05HPi4gICBPdGhlcndpc2UsICBzb2Z0d2FyZQorICAgICAgIHdpbGwgYXNzdW1lIHRoYXQgdGhlIDh0aCBiaXQgaXMgcGFyaXR5IGFuZCBpdCB3aWxsIHVzdWFsbHkKKyAgICAgICBiZSBjbGVhcmVkLiAgSWYgc3RyaW5ncyBleGlzdCB0byB0dXJuIHRoaXMgIGBgbWV0YSAgbW9kZScnCisgICAgICAgb24gYW5kIG9mZiwgdGhleSBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5zbW08L1NUUk9ORz4gYW5kIDxTVFJPTkc+cm1tPC9TVFJPTkc+LgorCisgICAgICAgSWYgIHRoZSB0ZXJtaW5hbCBoYXMgbW9yZSBsaW5lcyBvZiBtZW1vcnkgdGhhbiB3aWxsIGZpdCBvbgorICAgICAgIHRoZSBzY3JlZW4gYXQgb25jZSwgdGhlIG51bWJlciBvZiBsaW5lcyBvZiBtZW1vcnkgIGNhbiAgYmUKKyAgICAgICBpbmRpY2F0ZWQgIHdpdGggIDxTVFJPTkc+bG08L1NUUk9ORz4uICAgQSAgdmFsdWUgb2YgPFNUUk9ORz5sbTwvU1RST05HPiMwIGluZGljYXRlcyB0aGF0IHRoZQorICAgICAgIG51bWJlciBvZiBsaW5lcyBpcyBub3QgZml4ZWQsIGJ1dCB0aGF0IHRoZXJlIGlzIHN0aWxsIG1vcmUKKyAgICAgICBtZW1vcnkgdGhhbiBmaXRzIG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICBJZiB0aGUgdGVybWluYWwgaXMgb25lIG9mIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgVU5JWCB2aXItCisgICAgICAgdHVhbCB0ZXJtaW5hbCBwcm90b2NvbCwgdGhlIHRlcm1pbmFsIG51bWJlciBjYW4gIGJlICBnaXZlbgorICAgICAgIGFzIDxTVFJPTkc+dnQ8L1NUUk9ORz4uCisKKyAgICAgICBNZWRpYSBjb3B5IHN0cmluZ3Mgd2hpY2ggY29udHJvbCBhbiBhdXhpbGlhcnkgcHJpbnRlciBjb24tCisgICAgICAgbmVjdGVkIHRvIHRoZSB0ZXJtaW5hbCBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5tYzA8L1NUUk9ORz46IHByaW50IHRoZSBjb24tCisgICAgICAgdGVudHMgIG9mICB0aGUgc2NyZWVuLCA8U1RST05HPm1jNDwvU1RST05HPjogdHVybiBvZmYgdGhlIHByaW50ZXIsIGFuZCA8U1RST05HPm1jNTwvU1RST05HPjoKKyAgICAgICB0dXJuIG9uIHRoZSBwcmludGVyLiAgV2hlbiB0aGUgcHJpbnRlciAgaXMgIG9uLCAgYWxsICB0ZXh0CisgICAgICAgc2VudCAgdG8gIHRoZSB0ZXJtaW5hbCB3aWxsIGJlIHNlbnQgdG8gdGhlIHByaW50ZXIuICBJdCBpcworICAgICAgIHVuZGVmaW5lZCB3aGV0aGVyIHRoZSB0ZXh0IGlzIGFsc28gZGlzcGxheWVkIG9uIHRoZSB0ZXJtaS0KKyAgICAgICBuYWwgc2NyZWVuIHdoZW4gdGhlIHByaW50ZXIgaXMgb24uICBBIHZhcmlhdGlvbiA8U1RST05HPm1jNXA8L1NUUk9ORz4gdGFrZXMKKyAgICAgICBvbmUgcGFyYW1ldGVyLCBhbmQgbGVhdmVzIHRoZSBwcmludGVyIG9uIGZvciBhcyBtYW55IGNoYXItCisgICAgICAgYWN0ZXJzICBhcyAgdGhlICB2YWx1ZSAgb2YgIHRoZSAgcGFyYW1ldGVyLCB0aGVuIHR1cm5zIHRoZQorICAgICAgIHByaW50ZXIgb2ZmLiAgVGhlIHBhcmFtZXRlciBzaG91bGQgbm90ICBleGNlZWQgIDI1NS4gICBBbGwKKyAgICAgICB0ZXh0LCAgaW5jbHVkaW5nICA8U1RST05HPm1jNDwvU1RST05HPiwgIGlzICB0cmFuc3BhcmVudGx5ICBwYXNzZWQgIHRvICB0aGUKKyAgICAgICBwcmludGVyIHdoaWxlIGFuIDxTVFJPTkc+bWM1cDwvU1RST05HPiBpcyBpbiBlZmZlY3QuCisKKworICAgPFNUUk9ORz5HbGl0Y2hlczwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPkJyYWluZGFtYWdlPC9TVFJPTkc+CisgICAgICAgSGF6ZWx0aW5lIHRlcm1pbmFscywgd2hpY2ggZG8gbm90IGFsbG93IGB+JyBjaGFyYWN0ZXJzICB0bworICAgICAgIGJlIGRpc3BsYXllZCBzaG91bGQgaW5kaWNhdGUgPFNUUk9ORz5oejwvU1RST05HPi4KKworICAgICAgIFRlcm1pbmFscyB3aGljaCBpZ25vcmUgYSBsaW5lLWZlZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gPFNUUk9ORz5hbTwvU1RST05HPgorICAgICAgIHdyYXAsIHN1Y2ggYXMgdGhlIENvbmNlcHQgYW5kIHZ0MTAwLCBzaG91bGQgaW5kaWNhdGUgPFNUUk9ORz54ZW5sPC9TVFJPTkc+LgorCisgICAgICAgSWYgIDxTVFJPTkc+ZWw8L1NUUk9ORz4gIGlzICByZXF1aXJlZCAgdG8gIGdldCAgcmlkIG9mIHN0YW5kb3V0IChpbnN0ZWFkIG9mCisgICAgICAgbWVyZWx5IHdyaXRpbmcgbm9ybWFsIHRleHQgb24gdG9wIG9mIGl0KSwgIDxTVFJPTkc+eGhwPC9TVFJPTkc+ICBzaG91bGQgIGJlCisgICAgICAgZ2l2ZW4uCisKKyAgICAgICBUZWxlcmF5ICB0ZXJtaW5hbHMsICB3aGVyZSAgdGFicyB0dXJuIGFsbCBjaGFyYWN0ZXJzIG1vdmVkCisgICAgICAgb3ZlciB0byBibGFua3MsIHNob3VsZCAgaW5kaWNhdGUgIDxTVFJPTkc+eHQ8L1NUUk9ORz4gIChkZXN0cnVjdGl2ZSAgdGFicykuCisgICAgICAgTm90ZTogICAgdGhlICAgIHZhcmlhYmxlICAgIGluZGljYXRpbmcgICAgdGhpcyAgICBpcyAgIG5vdworICAgICAgIGBkZXN0X3RhYnNfbWFnaWNfc21zbyc7IGluIG9sZGVyICB2ZXJzaW9ucywgIGl0ICB3YXMgIHRlbC0KKyAgICAgICBlcmF5X2dsaXRjaC4gIFRoaXMgZ2xpdGNoIGlzIGFsc28gdGFrZW4gdG8gbWVhbiB0aGF0IGl0IGlzCisgICAgICAgbm90IHBvc3NpYmxlIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdG9wICBvZiAgYSAgYGBtYWdpYworICAgICAgIGNvb2tpZScnLCB0aGF0IHRvIGVyYXNlIHN0YW5kb3V0IG1vZGUgaXQgaXMgaW5zdGVhZCBuZWNlcy0KKyAgICAgICBzYXJ5IHRvIHVzZSBkZWxldGUgYW5kIGluc2VydCBsaW5lLiAgVGhlIG5jdXJzZXMgaW1wbGVtZW4tCisgICAgICAgdGF0aW9uIGlnbm9yZXMgdGhpcyBnbGl0Y2guCisKKyAgICAgICBUaGUgIEJlZWhpdmUgU3VwZXJiZWUsIHdoaWNoIGlzIHVuYWJsZSB0byBjb3JyZWN0bHkgdHJhbnMtCisgICAgICAgbWl0IHRoZSBlc2NhcGUgb3IgY29udHJvbCBDIGNoYXJhY3RlcnMsIGhhcyA8U1RST05HPnhzYjwvU1RST05HPiwgIGluZGljYXQtCisgICAgICAgaW5nICB0aGF0IHRoZSBmMSBrZXkgaXMgdXNlZCBmb3IgZXNjYXBlIGFuZCBmMiBmb3IgY29udHJvbAorICAgICAgIEMuICAoT25seSBjZXJ0YWluIFN1cGVyYmVlcyBoYXZlIHRoaXMgIHByb2JsZW0sICBkZXBlbmRpbmcKKyAgICAgICBvbiAgdGhlICBST00uKSAgTm90ZSB0aGF0IGluIG9sZGVyIHRlcm1pbmZvIHZlcnNpb25zLCB0aGlzCisgICAgICAgY2FwYWJpbGl0eSAgd2FzICBjYWxsZWQgIGBiZWVoaXZlX2dsaXRjaCc7ICAgaXQgICBpcyAgIG5vdworICAgICAgIGBub19lc2NfY3RsX2MnLgorCisgICAgICAgT3RoZXIgIHNwZWNpZmljICB0ZXJtaW5hbCAgcHJvYmxlbXMgIG1heSAgYmUgIGNvcnJlY3RlZCBieQorICAgICAgIGFkZGluZyBtb3JlIGNhcGFiaWxpdGllcyBvZiB0aGUgZm9ybSA8U1RST05HPng8L1NUUk9ORz48RU0+eDwvRU0+LgorCisKKyAgIDxTVFJPTkc+U2ltaWxhcjwvU1RST05HPiA8U1RST05HPlRlcm1pbmFsczwvU1RST05HPgorICAgICAgIElmIHRoZXJlIGFyZSB0d28gdmVyeSBzaW1pbGFyIHRlcm1pbmFscywgb25lICh0aGUgdmFyaWFudCkKKyAgICAgICBjYW4gIGJlICBkZWZpbmVkICBhcyAgYmVpbmcganVzdCBsaWtlIHRoZSBvdGhlciAodGhlIGJhc2UpCisgICAgICAgd2l0aCBjZXJ0YWluIGV4Y2VwdGlvbnMuICBJbiB0aGUgZGVmaW5pdGlvbiBvZiAgdGhlICB2YXJpLQorICAgICAgIGFudCwgIHRoZSBzdHJpbmcgY2FwYWJpbGl0eSA8U1RST05HPnVzZTwvU1RST05HPiBjYW4gYmUgZ2l2ZW4gd2l0aCB0aGUgbmFtZQorICAgICAgIG9mIHRoZSBiYXNlIHRlcm1pbmFsLiAgVGhlIGNhcGFiaWxpdGllcyBnaXZlbiAgYmVmb3JlICA8U1RST05HPnVzZTwvU1RST05HPgorICAgICAgIG92ZXJyaWRlICB0aG9zZSAgaW4gIHRoZSBiYXNlIHR5cGUgbmFtZWQgYnkgPFNUUk9ORz51c2U8L1NUUk9ORz4uICBJZiB0aGVyZQorICAgICAgIGFyZSBtdWx0aXBsZSA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsaXRpZXMsIHRoZXkgYXJlIG1lcmdlZCBpbiAgcmV2ZXJzZQorICAgICAgIG9yZGVyLiAgIFRoYXQgaXMsIHRoZSByaWdodG1vc3QgPFNUUk9ORz51c2U8L1NUUk9ORz4gcmVmZXJlbmNlIGlzIHByb2Nlc3NlZAorICAgICAgIGZpcnN0LCB0aGVuIHRoZSBvbmUgdG8gaXRzIGxlZnQsIGFuZCBzbyBmb3J0aC4gICBDYXBhYmlsaS0KKyAgICAgICB0aWVzICBnaXZlbiBleHBsaWNpdGx5IGluIHRoZSBlbnRyeSBvdmVycmlkZSB0aG9zZSBicm91Z2h0CisgICAgICAgaW4gYnkgPFNUUk9ORz51c2U8L1NUUk9ORz4gcmVmZXJlbmNlcy4KKworICAgICAgIEEgY2FwYWJpbGl0eSBjYW4gYmUgY2FuY2VsZWQgYnkgcGxhY2luZyA8U1RST05HPnh4QDwvU1RST05HPiB0byB0aGUgbGVmdCBvZgorICAgICAgIHRoZSAgdXNlICByZWZlcmVuY2UgdGhhdCBpbXBvcnRzIGl0LCB3aGVyZSA8RU0+eHg8L0VNPiBpcyB0aGUgY2FwYS0KKyAgICAgICBiaWxpdHkuICBGb3IgZXhhbXBsZSwgdGhlIGVudHJ5CisKKyAgICAgICAgICAgICAgICAgICAyNjIxLW5sLCBzbWt4QCwgcm1reEAsIHVzZT0yNjIxLAorCisgICAgICAgZGVmaW5lcyBhIDI2MjEtbmwgdGhhdCBkb2VzIG5vdCAgaGF2ZSAgdGhlICA8U1RST05HPnNta3g8L1NUUk9ORz4gIG9yICA8U1RST05HPnJta3g8L1NUUk9ORz4KKyAgICAgICBjYXBhYmlsaXRpZXMsICBhbmQgaGVuY2UgZG9lcyBub3QgdHVybiBvbiB0aGUgZnVuY3Rpb24ga2V5CisgICAgICAgbGFiZWxzIHdoZW4gaW4gdmlzdWFsIG1vZGUuICBUaGlzIGlzIHVzZWZ1bCBmb3IgIGRpZmZlcmVudAorICAgICAgIG1vZGVzIGZvciBhIHRlcm1pbmFsLCBvciBmb3IgZGlmZmVyZW50IHVzZXIgcHJlZmVyZW5jZXMuCisKKworICAgPFNUUk9ORz5QaXRmYWxsczwvU1RST05HPiA8U1RST05HPm9mPC9TVFJPTkc+IDxTVFJPTkc+TG9uZzwvU1RST05HPiA8U1RST05HPkVudHJpZXM8L1NUUk9ORz4KKyAgICAgICBMb25nICB0ZXJtaW5mbyAgZW50cmllcyAgYXJlICB1bmxpa2VseSB0byBiZSBhIHByb2JsZW07IHRvCisgICAgICAgZGF0ZSwgbm8gZW50cnkgaGFzIGV2ZW4gIGFwcHJvYWNoZWQgIHRlcm1pbmZvJ3MgIDQwOTYtYnl0ZQorICAgICAgIHN0cmluZy10YWJsZSBtYXhpbXVtLiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlcm1jYXAgdHJhbnNsYS0KKyAgICAgICB0aW9ucyBhcmUgbXVjaCBtb3JlIHN0cmljdGx5IGxpbWl0ZWQgKHRvIDEwMjMgYnl0ZXMpLCB0aHVzCisgICAgICAgdGVybWNhcCAgdHJhbnNsYXRpb25zICBvZiAgbG9uZyB0ZXJtaW5mbyBlbnRyaWVzIGNhbiBjYXVzZQorICAgICAgIHByb2JsZW1zLgorCisgICAgICAgVGhlIG1hbiBwYWdlcyBmb3IgNC4zQlNEIGFuZCBvbGRlciB2ZXJzaW9ucyAgb2YgIDxTVFJPTkc+dGdldGVudCgpPC9TVFJPTkc+CisgICAgICAgaW5zdHJ1Y3QgIHRoZSAgdXNlciB0byBhbGxvY2F0ZSBhIDEwMjQtYnl0ZSBidWZmZXIgZm9yIHRoZQorICAgICAgIHRlcm1jYXAgZW50cnkuICBUaGUgIGVudHJ5ICBnZXRzICBudWxsLXRlcm1pbmF0ZWQgIGJ5ICB0aGUKKyAgICAgICB0ZXJtY2FwIGxpYnJhcnksIHNvIHRoYXQgbWFrZXMgdGhlIG1heGltdW0gc2FmZSBsZW5ndGggZm9yCisgICAgICAgYSB0ZXJtY2FwIGVudHJ5IDFrLTEgKDEwMjMpIGJ5dGVzLiAgRGVwZW5kaW5nIG9uIHdoYXQgIHRoZQorICAgICAgIGFwcGxpY2F0aW9uICBhbmQgIHRoZSB0ZXJtY2FwIGxpYnJhcnkgYmVpbmcgdXNlZCBkb2VzLCBhbmQKKyAgICAgICB3aGVyZSBpbiB0aGUgdGVybWNhcCBmaWxlIHRoZSB0ZXJtaW5hbCB0eXBlIHRoYXQgPFNUUk9ORz50Z2V0ZW50KCk8L1NUUk9ORz4KKyAgICAgICBpcyBzZWFyY2hpbmcgZm9yIGlzLCBzZXZlcmFsIGJhZCB0aGluZ3MgY2FuIGhhcHBlbi4KKworICAgICAgIFNvbWUgIHRlcm1jYXAgbGlicmFyaWVzIHByaW50IGEgd2FybmluZyBtZXNzYWdlIG9yIGV4aXQgaWYKKyAgICAgICB0aGV5IGZpbmQgYW4gZW50cnkgdGhhdCdzIGxvbmdlciB0aGFuIDEwMjMgIGJ5dGVzOyAgb3RoZXJzCisgICAgICAgZG8gIG5vdDsgIG90aGVycyB0cnVuY2F0ZSB0aGUgZW50cmllcyB0byAxMDIzIGJ5dGVzLiAgU29tZQorICAgICAgIGFwcGxpY2F0aW9uIHByb2dyYW1zIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGUgcmVjb21tZW5kZWQgMUsKKyAgICAgICBmb3IgdGhlIHRlcm1jYXAgZW50cnk7IG90aGVycyBkbyBub3QuCisKKyAgICAgICBFYWNoIHRlcm1jYXAgZW50cnkgaGFzIHR3byBpbXBvcnRhbnQgc2l6ZXMgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgaXQ6IGJlZm9yZSAidGMiIGV4cGFuc2lvbiwgYW5kIGFmdGVyICJ0YyIgZXhwYW5zaW9uLiAgInRjIgorICAgICAgIGlzICB0aGUgIGNhcGFiaWxpdHkgdGhhdCB0YWNrcyBvbiBhbm90aGVyIHRlcm1jYXAgZW50cnkgdG8KKyAgICAgICB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9uZSwgdG8gYWRkICBvbiAgaXRzICBjYXBhYmlsaXRpZXMuCisgICAgICAgSWYgIGEgdGVybWNhcCBlbnRyeSBkb2VzIG5vdCB1c2UgdGhlICJ0YyIgY2FwYWJpbGl0eSwgdGhlbgorICAgICAgIG9mIGNvdXJzZSB0aGUgdHdvIGxlbmd0aHMgYXJlIHRoZSBzYW1lLgorCisgICAgICAgVGhlICJiZWZvcmUgdGMgZXhwYW5zaW9uIiBsZW5ndGggIGlzICB0aGUgIG1vc3QgIGltcG9ydGFudAorICAgICAgIG9uZSwgIGJlY2F1c2UgaXQgYWZmZWN0cyBtb3JlIHRoYW4ganVzdCB1c2VycyBvZiB0aGF0IHBhci0KKyAgICAgICB0aWN1bGFyIHRlcm1pbmFsLiAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRyeSAgYXMgIGl0CisgICAgICAgZXhpc3RzIGluIC9ldGMvdGVybWNhcCwgbWludXMgdGhlIGJhY2tzbGFzaC1uZXdsaW5lIHBhaXJzLAorICAgICAgIHdoaWNoIDxTVFJPTkc+dGdldGVudCgpPC9TVFJPTkc+IHN0cmlwcyBvdXQgd2hpbGUgcmVhZGluZyBpdC4gIFNvbWUgdGVybWNhcAorICAgICAgIGxpYnJhcmllcyAgc3RyaXAgIG9mZiAgdGhlIGZpbmFsIG5ld2xpbmUsIHRvbyAoR05VIHRlcm1jYXAKKyAgICAgICBkb2VzIG5vdCkuICBOb3cgc3VwcG9zZToKKworICAgICAgICogICAgYSB0ZXJtY2FwIGVudHJ5IGJlZm9yZSBleHBhbnNpb24gaXMgIG1vcmUgIHRoYW4gIDEwMjMKKyAgICAgICAgICAgIGJ5dGVzIGxvbmcsCisKKyAgICAgICAqICAgIGFuZCB0aGUgYXBwbGljYXRpb24gaGFzIG9ubHkgYWxsb2NhdGVkIGEgMWsgYnVmZmVyLAorCisgICAgICAgKiAgICBhbmQgIHRoZSAgdGVybWNhcCBsaWJyYXJ5IChsaWtlIHRoZSBvbmUgaW4gQlNEL09TIDEuMQorICAgICAgICAgICAgYW5kIEdOVSkgcmVhZHMgdGhlIHdob2xlIGVudHJ5IGludG8gIHRoZSAgYnVmZmVyLCAgbm8KKyAgICAgICAgICAgIG1hdHRlciAgd2hhdCBpdHMgbGVuZ3RoLCB0byBzZWUgaWYgaXQgaXMgdGhlIGVudHJ5IGl0CisgICAgICAgICAgICB3YW50cywKKworICAgICAgICogICAgYW5kIDxTVFJPTkc+dGdldGVudCgpPC9TVFJPTkc+IGlzIHNlYXJjaGluZyBmb3IgYSB0ZXJtaW5hbCAgdHlwZSAgdGhhdAorICAgICAgICAgICAgZWl0aGVyIGlzIHRoZSBsb25nIGVudHJ5LCBhcHBlYXJzIGluIHRoZSB0ZXJtY2FwIGZpbGUKKyAgICAgICAgICAgIGFmdGVyIHRoZSBsb25nIGVudHJ5LCBvciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlICBmaWxlCisgICAgICAgICAgICBhdCAgYWxsICAoc28gIHRoYXQgIDxTVFJPTkc+dGdldGVudCgpPC9TVFJPTkc+IGhhcyB0byBzZWFyY2ggdGhlIHdob2xlCisgICAgICAgICAgICB0ZXJtY2FwIGZpbGUpLgorCisgICAgICAgVGhlbiA8U1RST05HPnRnZXRlbnQoKTwvU1RST05HPiB3aWxsIG92ZXJ3cml0ZSBtZW1vcnksIHBlcmhhcHMgIGl0cyAgc3RhY2ssCisgICAgICAgYW5kICBwcm9iYWJseSBjb3JlIGR1bXAgdGhlIHByb2dyYW0uICBQcm9ncmFtcyBsaWtlIHRlbG5ldAorICAgICAgIGFyZSBwYXJ0aWN1bGFybHkgdnVsbmVyYWJsZTsgIG1vZGVybiAgdGVsbmV0cyAgcGFzcyAgYWxvbmcKKyAgICAgICB2YWx1ZXMgIGxpa2UgdGhlIHRlcm1pbmFsIHR5cGUgYXV0b21hdGljYWxseS4gIFRoZSByZXN1bHRzCisgICAgICAgYXJlIGFsbW9zdCBhcyB1bmRlc2lyYWJsZSB3aXRoICBhICB0ZXJtY2FwICBsaWJyYXJ5LCAgbGlrZQorICAgICAgIFN1bk9TICA0LjEuMyAgYW5kIFVsdHJpeCA0LjQsIHRoYXQgcHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMKKyAgICAgICB3aGVuIGl0IHJlYWRzIGFuIG92ZXJseSBsb25nIHRlcm1jYXAgZW50cnkuICBJZiBhICB0ZXJtY2FwCisgICAgICAgbGlicmFyeSAgdHJ1bmNhdGVzICBsb25nICBlbnRyaWVzLCAgbGlrZSAgT1NGLzEgMy4wLCBpdCBpcworICAgICAgIGltbXVuZSB0byBkeWluZyBoZXJlIGJ1dCB3aWxsIHJldHVybiAgaW5jb3JyZWN0ICBkYXRhICBmb3IKKyAgICAgICB0aGUgdGVybWluYWwuCisKKyAgICAgICBUaGUgImFmdGVyIHRjIGV4cGFuc2lvbiIgbGVuZ3RoIHdpbGwgaGF2ZSBhIHNpbWlsYXIgZWZmZWN0CisgICAgICAgdG8gdGhlIGFib3ZlLCBidXQgb25seSBmb3IgcGVvcGxlIHdobyBhY3R1YWxseSBzZXQgVEVSTSB0bworICAgICAgIHRoYXQgIHRlcm1pbmFsIHR5cGUsIHNpbmNlIDxTVFJPTkc+dGdldGVudCgpPC9TVFJPTkc+IG9ubHkgZG9lcyAidGMiIGV4cGFuLQorICAgICAgIHNpb24gb25jZSBpdCBpcyBmb3VuZCB0aGUgdGVybWluYWwgIHR5cGUgIGl0ICB3YXMgIGxvb2tpbmcKKyAgICAgICBmb3IsIG5vdCB3aGlsZSBzZWFyY2hpbmcuCisKKyAgICAgICBJbiBzdW1tYXJ5LCBhIHRlcm1jYXAgZW50cnkgdGhhdCBpcyBsb25nZXIgdGhhbiAxMDIzIGJ5dGVzCisgICAgICAgY2FuIGNhdXNlLCBvbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyAgb2YgIHRlcm1jYXAgIGxpYnJhcmllcworICAgICAgIGFuZCAgYXBwbGljYXRpb25zLCAgYSAgY29yZSAgZHVtcCwgIHdhcm5pbmdzLCBvciBpbmNvcnJlY3QKKyAgICAgICBvcGVyYXRpb24uICBJZiBpdCBpcyB0b28gbG9uZyBldmVuIGJlZm9yZSAidGMiICBleHBhbnNpb24sCisgICAgICAgaXQgd2lsbCBoYXZlIHRoaXMgZWZmZWN0IGV2ZW4gZm9yIHVzZXJzIG9mIHNvbWUgb3RoZXIgdGVyLQorICAgICAgIG1pbmFsIHR5cGVzIGFuZCB1c2VycyB3aG9zZSBURVJNIHZhcmlhYmxlIGRvZXMgbm90IGhhdmUgIGEKKyAgICAgICB0ZXJtY2FwIGVudHJ5LgorCisgICAgICAgV2hlbiBpbiAtQyAodHJhbnNsYXRlIHRvIHRlcm1jYXApIG1vZGUsIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gaW1wbGUtCisgICAgICAgbWVudGF0aW9uIG9mIDxTVFJPTkc+PEEgSFJFRj0idGljLjFtLmh0bWwiPnRpYygxbSk8L0E+PC9TVFJPTkc+IGlzc3VlcyB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gdGhlIHByZS0KKyAgICAgICB0YyAgbGVuZ3RoICBvZiAgYSB0ZXJtY2FwIHRyYW5zbGF0aW9uIGlzIHRvbyBsb25nLiAgVGhlIC1jCisgICAgICAgKGNoZWNrKSBvcHRpb24gYWxzbyBjaGVja3MgcmVzb2x2ZWQgKGFmdGVyICB0YyAgZXhwYW5zaW9uKQorICAgICAgIGxlbmd0aHMuCisKKyAgIDxTVFJPTkc+QmluYXJ5PC9TVFJPTkc+IDxTVFJPTkc+Q29tcGF0aWJpbGl0eTwvU1RST05HPgorICAgICAgIEl0ICBpcyBub3Qgd2lzZSB0byBjb3VudCBvbiBwb3J0YWJpbGl0eSBvZiBiaW5hcnkgdGVybWluZm8KKyAgICAgICBlbnRyaWVzIGJldHdlZW4gY29tbWVyY2lhbCBVTklYIHZlcnNpb25zLiAgVGhlIHByb2JsZW0gIGlzCisgICAgICAgdGhhdCAgdGhlcmUgIGFyZSAgYXQgbGVhc3QgdHdvIHZlcnNpb25zIG9mIHRlcm1pbmZvICh1bmRlcgorICAgICAgIEhQLVVYIGFuZCBBSVgpIHdoaWNoIGRpdmVyZ2VkIGZyb20gU3lzdGVtIFYgdGVybWluZm8gYWZ0ZXIKKyAgICAgICBTVnIxLCAgYW5kIGhhdmUgYWRkZWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcyB0byB0aGUgc3RyaW5nCisgICAgICAgdGFibGUgdGhhdCAoaW4gdGhlIGJpbmFyeSBmb3JtYXQpIGNvbGxpZGUgIHdpdGggIFN5c3RlbSAgVgorICAgICAgIGFuZCBYU0kgQ3Vyc2VzIGV4dGVuc2lvbnMuCisKKworPC9QUkU+Cis8SDI+RVhURU5TSU9OUzwvSDI+PFBSRT4KKyAgICAgICBTb21lICBTVnI0ICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgaW1wbGVtZW50YXRpb25zLCAgYW5kICBhbGwgcHJldmlvdXMgdG8KKyAgICAgICBTVnI0LCBkbyBub3QgaW50ZXJwcmV0IHRoZSAlQSBhbmQgJU8gb3BlcmF0b3JzIGluICBwYXJhbWUtCisgICAgICAgdGVyIHN0cmluZ3MuCisKKyAgICAgICBTVnI0L1hQRzQgIGRvICBub3QgIHNwZWNpZnkgd2hldGhlciA8U1RST05HPm1zZ3I8L1NUUk9ORz4gbGljZW5zZXMgbW92ZW1lbnQKKyAgICAgICB3aGlsZSBpbiBhbiBhbHRlcm5hdGUtY2hhcmFjdGVyLXNldCBtb2RlIChzdWNoIG1vZGVzICBtYXksCisgICAgICAgYW1vbmcgIG90aGVyICB0aGluZ3MsICBtYXAgQ1IgYW5kIE5MIHRvIGNoYXJhY3RlcnMgdGhhdCBkbworICAgICAgIG5vdCB0cmlnZ2VyIGxvY2FsIG1vdGlvbnMpLiAgIFRoZSAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBpbXBsZW1lbnRhdGlvbgorICAgICAgIGlnbm9yZXMgIDxTVFJPTkc+bXNncjwvU1RST05HPiAgaW4gPFNUUk9ORz5BTFRDSEFSU0VUPC9TVFJPTkc+IG1vZGUuICBUaGlzIHJhaXNlcyB0aGUgcG9zc2ktCisgICAgICAgYmlsaXR5IHRoYXQgYW4gWFBHNCAgaW1wbGVtZW50YXRpb24gIG1ha2luZyAgdGhlICBvcHBvc2l0ZQorICAgICAgIGludGVycHJldGF0aW9uICBtYXkgbmVlZCB0ZXJtaW5mbyBlbnRyaWVzIG1hZGUgZm9yIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPgorICAgICAgIHRvIGhhdmUgPFNUUk9ORz5tc2dyPC9TVFJPTkc+IHR1cm5lZCBvZmYuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgaGFuZGxlcyBpbnNlcnQtY2hhcmFjdGVyICBhbmQgIGluc2VydC0KKyAgICAgICBjaGFyYWN0ZXIgbW9kZXMgaW4gYSBzbGlnaHRseSBub24tc3RhbmRhcmQgd2F5IHRvIGdldCBiZXQtCisgICAgICAgdGVyIHVwZGF0ZSBlZmZpY2llbmN5LiAgU2VlICB0aGUgIDxTVFJPTkc+SW5zZXJ0L0RlbGV0ZTwvU1RST05HPiAgPFNUUk9ORz5DaGFyYWN0ZXI8L1NUUk9ORz4KKyAgICAgICBzdWJzZWN0aW9uIGFib3ZlLgorCisgICAgICAgVGhlICAgcGFyYW1ldGVyICAgc3Vic3RpdHV0aW9ucyAgZm9yICA8U1RST05HPnNldF9jbG9jazwvU1RST05HPiAgYW5kICA8U1RST05HPmRpcy08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnBsYXlfY2xvY2s8L1NUUk9ORz4gYXJlIG5vdCBkb2N1bWVudGVkIGluIFNWcjQgb3IgIHRoZSAgWFNJICBDdXJzZXMKKyAgICAgICBzdGFuZGFyZC4gIFRoZXkgYXJlIGRlZHVjZWQgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICAgICAgQVQmYW1wO1QgNTA1IHRlcm1pbmFsLgorCisgICAgICAgQmUgY2FyZWZ1bCBhc3NpZ25pbmcgdGhlIDxTVFJPTkc+a21vdXM8L1NUUk9ORz4gIGNhcGFiaWxpdHkuICAgVGhlICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICB3YW50cyAgdG8gIGludGVycHJldCBpdCBhcyA8U1RST05HPktFWV9NT1VTRTwvU1RST05HPiwgZm9yIHVzZSBieSB0ZXJtaW5hbHMKKyAgICAgICBhbmQgZW11bGF0b3JzIGxpa2UgeHRlcm0gdGhhdCAgY2FuICByZXR1cm4gIG1vdXNlLXRyYWNraW5nCisgICAgICAgaW5mb3JtYXRpb24gaW4gdGhlIGtleWJvYXJkLWlucHV0IHN0cmVhbS4KKworICAgICAgIERpZmZlcmVudCAgY29tbWVyY2lhbCBwb3J0cyBvZiB0ZXJtaW5mbyBhbmQgY3Vyc2VzIHN1cHBvcnQKKyAgICAgICBkaWZmZXJlbnQgc3Vic2V0cyBvZiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBhbmQgKGluICBzb21lCisgICAgICAgY2FzZXMpIGRpZmZlcmVudCBleHRlbnNpb24gc2V0cy4gIEhlcmUgaXMgYSBzdW1tYXJ5LCBhY2N1LQorICAgICAgIHJhdGUgYXMgb2YgT2N0b2JlciAxOTk1OgorCisgICAgICAgPFNUUk9ORz5TVlI0LDwvU1RST05HPiA8U1RST05HPlNvbGFyaXMsPC9TVFJPTkc+IDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAtLSBUaGVzZSBzdXBwb3J0IGFsbCBTVnI0IGNhcGFiaWxpLQorICAgICAgIHRpZXMuCisKKyAgICAgICA8U1RST05HPlNHSTwvU1RST05HPiAgLS0gIFN1cHBvcnRzICB0aGUgIFNWcjQgIHNldCwgIGFkZHMgIG9uZSB1bmRvY3VtZW50ZWQKKyAgICAgICBleHRlbmRlZCBzdHJpbmcgY2FwYWJpbGl0eSAoPFNUUk9ORz5zZXRfcGdsZW48L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5TVnIxLDwvU1RST05HPiA8U1RST05HPlVsdHJpeDwvU1RST05HPiAtLSBUaGVzZSBzdXBwb3J0IGEgcmVzdHJpY3RlZCBzdWJzZXQgb2YgIHRlci0KKyAgICAgICBtaW5mbyAgY2FwYWJpbGl0aWVzLiAgIFRoZSBib29sZWFucyBlbmQgd2l0aCA8U1RST05HPnhvbl94b2ZmPC9TVFJPTkc+OyB0aGUKKyAgICAgICBudW1lcmljcyB3aXRoICA8U1RST05HPndpZHRoX3N0YXR1c19saW5lPC9TVFJPTkc+OyAgYW5kICB0aGUgIHN0cmluZ3MgIHdpdGgKKyAgICAgICA8U1RST05HPnBydHJfbm9uPC9TVFJPTkc+LgorCisgICAgICAgPFNUUk9ORz5IUC9VWDwvU1RST05HPiAgLS0gIFN1cHBvcnRzICB0aGUgIFNWcjEgIHN1YnNldCwgIHBsdXMgdGhlIFNWclsyMzRdCisgICAgICAgbnVtZXJpY3MgPFNUUk9ORz5udW1fbGFiZWxzPC9TVFJPTkc+LCA8U1RST05HPmxhYmVsX2hlaWdodDwvU1RST05HPiwgPFNUUk9ORz5sYWJlbF93aWR0aDwvU1RST05HPiwgcGx1cyBmdW5jLQorICAgICAgIHRpb24gIGtleXMgIDExICB0aHJvdWdoICA2MywgcGx1cyA8U1RST05HPnBsYWJfbm9ybTwvU1RST05HPiwgPFNUUk9ORz5sYWJlbF9vbjwvU1RST05HPiwgYW5kCisgICAgICAgPFNUUk9ORz5sYWJlbF9vZmY8L1NUUk9ORz4sIHBsdXMgc29tZSBpbmNvbXBhdGlibGUgZXh0ZW5zaW9ucyBpbiB0aGUgc3RyaW5nCisgICAgICAgdGFibGUuCisKKyAgICAgICA8U1RST05HPkFJWDwvU1RST05HPiAgLS0gIFN1cHBvcnRzICB0aGUgIFNWcjEgc3Vic2V0LCBwbHVzIGZ1bmN0aW9uIGtleXMgMTEKKyAgICAgICB0aHJvdWdoIDYzLCBwbHVzIGEgbnVtYmVyICBvZiAgaW5jb21wYXRpYmxlICBzdHJpbmcgIHRhYmxlCisgICAgICAgZXh0ZW5zaW9ucy4KKworICAgICAgIDxTVFJPTkc+T1NGPC9TVFJPTkc+ICAtLSBTdXBwb3J0cyBib3RoIHRoZSBTVnI0IHNldCBhbmQgdGhlIEFJWCBleHRlbnNpb25zLgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIC91c3Ivc2hhcmUvdGVybWluZm8vPy8qICBmaWxlcyAgICAgY29udGFpbmluZyAgICAgdGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJwcmludGYuMy5odG1sIj5wcmludGYoMyk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm0uNS5odG1sIj50ZXJtKDUpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIFpleWQgIE0uICBCZW4tSGFsaW0sICBFcmljICBTLiAgUmF5bW9uZCwgVGhvbWFzIEUuIERpY2tleS4KKyAgICAgICBCYXNlZCBvbiBwY3Vyc2VzIGJ5IFBhdmVsIEN1cnRpcy4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL3RpYy4xbS5odG1sIGIvZG9jL2h0bWwvbWFuL3RpYy4xbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTAzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vdGljLjFtLmh0bWwKQEAgLTAsMCArMSwzMjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogdGljLjFtLHYgMS40NCAyMDA2LzEyLzI0IDE3OjU5OjExIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnRpYyAxbTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPnRpYyAxbTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0idGljLjFtLmh0bWwiPnRpYygxbSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRpYzwvU1RST05HPiAtIHRoZSA8RU0+dGVybWluZm88L0VNPiBlbnRyeS1kZXNjcmlwdGlvbiBjb21waWxlcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dGljPC9TVFJPTkc+ICBbPFNUUk9ORz4tMUNHSUxOVFVWYWNmZ3JzdHg8L1NUUk9ORz5dICBbPFNUUk9ORz4tZTwvU1RST05HPiA8RU0+bmFtZXM8L0VNPl0gWzxTVFJPTkc+LW88L1NUUk9ORz4gPEVNPmRpcjwvRU0+XSBbPFNUUk9ORz4tUjwvU1RST05HPiA8RU0+c3Vic2V0PC9FTT5dCisgICAgICAgWzxTVFJPTkc+LXY8L1NUUk9ORz5bPEVNPm48L0VNPl1dIFs8U1RST05HPi13PC9TVFJPTkc+WzxFTT5uPC9FTT5dXSA8RU0+ZmlsZTwvRU0+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGNvbW1hbmQgPFNUUk9ORz50aWM8L1NUUk9ORz4gdHJhbnNsYXRlcyBhICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBmaWxlICBmcm9tICBzb3VyY2UKKyAgICAgICBmb3JtYXQgIGludG8gY29tcGlsZWQgZm9ybWF0LiAgVGhlIGNvbXBpbGVkIGZvcm1hdCBpcyBuZWMtCisgICAgICAgZXNzYXJ5IGZvciB1c2Ugd2l0aCB0aGUgbGlicmFyeSByb3V0aW5lcyBpbiA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgVGhlIHJlc3VsdHMgYXJlIG5vcm1hbGx5IHBsYWNlZCAgaW4gIHRoZSAgc3lzdGVtICB0ZXJtaW5mbworICAgICAgIGRpcmVjdG9yeSAgPFNUUk9ORz4vdXNyL3NoYXJlL3Rlcm1pbmZvPC9TVFJPTkc+LiAgIFRoZXJlICBhcmUgIHR3byAgd2F5cyB0bworICAgICAgIGNoYW5nZSB0aGlzIGJlaGF2aW9yLgorCisgICAgICAgRmlyc3QsIHlvdSBtYXkgb3ZlcnJpZGUgdGhlIHN5c3RlbSBkZWZhdWx0IGJ5IHNldHRpbmcgIHRoZQorICAgICAgIHZhcmlhYmxlICA8U1RST05HPlRFUk1JTkZPPC9TVFJPTkc+ICBpbiAgeW91ciAgc2hlbGwgZW52aXJvbm1lbnQgdG8gYSB2YWxpZAorICAgICAgIChleGlzdGluZykgZGlyZWN0b3J5IG5hbWUuCisKKyAgICAgICBTZWNvbmRseSwgaWYgPFNUUk9ORz50aWM8L1NUUk9ORz4gY2Fubm90IGdldCBhY2Nlc3MgdG8gIDxFTT4vdXNyL3NoYXJlL3Rlcm1pbmZvPC9FTT4KKyAgICAgICBvciAgeW91ciAgVEVSTUlORk8gIGRpcmVjdG9yeSwgIGl0IGxvb2tzIGZvciB0aGUgZGlyZWN0b3J5CisgICAgICAgPEVNPiRIT01FLy50ZXJtaW5mbzwvRU0+OyBpZiB0aGF0IGRpcmVjdG9yeSBleGlzdHMsICB0aGUgIGVudHJ5ICBpcworICAgICAgIHBsYWNlZCB0aGVyZS4KKworICAgICAgIExpYnJhcmllcyB0aGF0IHJlYWQgdGVybWluZm8gZW50cmllcyBhcmUgZXhwZWN0ZWQgdG8gY2hlY2sKKyAgICAgICBmb3IgYSBURVJNSU5GTyBkaXJlY3RvcnkgZmlyc3QsIGxvb2sgYXQgPEVNPiRIT01FLy50ZXJtaW5mbzwvRU0+IGlmCisgICAgICAgVEVSTUlORk8gIGlzICBub3Qgc2V0LCBhbmQgZmluYWxseSBsb29rIGluIDxFTT4vdXNyL3NoYXJlL3Rlci08L0VNPgorICAgICAgIDxFTT5taW5mbzwvRU0+LgorCisgICAgICAgPFNUUk9ORz4tMTwvU1RST05HPiAgICAgcmVzdHJpY3RzIHRoZSBvdXRwdXQgdG8gYSBzaW5nbGUgY29sdW1uCisKKyAgICAgICA8U1RST05HPi1hPC9TVFJPTkc+ICAgICB0ZWxscyAgPFNUUk9ORz50aWM8L1NUUk9ORz4gIHRvICByZXRhaW4gIGNvbW1lbnRlZC1vdXQgIGNhcGFiaWxpdGllcworICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIHRoZW0uICBDYXBhYmlsaXRpZXMgYXJlIGNvbS0KKyAgICAgICAgICAgICAgbWVudGVkIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggYSBwZXJpb2QuICBUaGlzICBzZXRzCisgICAgICAgICAgICAgIHRoZSAgPFNUUk9ORz4teDwvU1RST05HPiBvcHRpb24sIGJlY2F1c2UgaXQgdHJlYXRzIHRoZSBjb21tZW50ZWQtb3V0CisgICAgICAgICAgICAgIGVudHJpZXMgYXMgdXNlci1kZWZpbmVkIG5hbWVzLiAgSWYgIHRoZSAgc291cmNlICBpcworICAgICAgICAgICAgICB0ZXJtY2FwLCAgYWNjZXB0ICB0aGUgMi1jaGFyYWN0ZXIgbmFtZXMgcmVxdWlyZWQgYnkKKyAgICAgICAgICAgICAgdmVyc2lvbiA2LiAgT3RoZXJ3aXNlIHRoZXNlIGFyZSBpZ25vcmVkLgorCisgICAgICAgPFNUUk9ORz4tQzwvU1RST05HPiAgICAgRm9yY2Ugc291cmNlIHRyYW5zbGF0aW9uIHRvIHRlcm1jYXAgZm9ybWF0LiAgIE5vdGU6CisgICAgICAgICAgICAgIHRoaXMgIGRpZmZlcnMgIGZyb20gdGhlIDxTVFJPTkc+LUM8L1NUUk9ORz4gb3B0aW9uIG9mIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4gaW4KKyAgICAgICAgICAgICAgdGhhdCBpdCBkb2VzIG5vdCBtZXJlbHkgdHJhbnNsYXRlIGNhcGFiaWxpdHkgbmFtZXMsCisgICAgICAgICAgICAgIGJ1dCAgYWxzbyAgdHJhbnNsYXRlcyAgdGVybWluZm8gIHN0cmluZ3MgdG8gdGVybWNhcAorICAgICAgICAgICAgICBmb3JtYXQuICBDYXBhYmlsaXRpZXMgdGhhdCBhcmUgbm90IHRyYW5zbGF0YWJsZSBhcmUKKyAgICAgICAgICAgICAgbGVmdCAgaW4gIHRoZSAgZW50cnkgdW5kZXIgdGhlaXIgdGVybWluZm8gbmFtZXMgYnV0CisgICAgICAgICAgICAgIGNvbW1lbnRlZCBvdXQgd2l0aCB0d28gcHJlY2VkaW5nIGRvdHMuCisKKyAgICAgICA8U1RST05HPi1jPC9TVFJPTkc+ICAgICB0ZWxscyA8U1RST05HPnRpYzwvU1RST05HPiB0byBvbmx5IGNoZWNrIDxFTT5maWxlPC9FTT4gZm9yIGVycm9ycywgIGluY2x1ZGluZworICAgICAgICAgICAgICBzeW50YXggIHByb2JsZW1zIGFuZCBiYWQgdXNlIGxpbmtzLiAgSWYgeW91IHNwZWNpZnkKKyAgICAgICAgICAgICAgPFNUUk9ORz4tQzwvU1RST05HPiAoPFNUUk9ORz4tSTwvU1RST05HPikgd2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvZGUgd2lsbCBwcmludCB3YXJuLQorICAgICAgICAgICAgICBpbmdzIGFib3V0IGVudHJpZXMgd2hpY2gsIGFmdGVyIHVzZSByZXNvbHV0aW9uLCBhcmUKKyAgICAgICAgICAgICAgbW9yZSB0aGFuIDEwMjMgKDQwOTYpIGJ5dGVzIGxvbmcuICBEdWUgdG8gIGEgIGZpeGVkCisgICAgICAgICAgICAgIGJ1ZmZlciAgbGVuZ3RoICBpbiAgb2xkZXIgIHRlcm1jYXAgbGlicmFyaWVzIChhbmQgYQorICAgICAgICAgICAgICBkb2N1bWVudGVkIGxpbWl0IGluIHRlcm1pbmZvKSwgIHRoZXNlICBlbnRyaWVzICBtYXkKKyAgICAgICAgICAgICAgY2F1c2UgY29yZSBkdW1wcy4KKworICAgICAgIDxTVFJPTkc+LWU8L1NUUk9ORz4gPEVNPm5hbWVzPC9FTT4KKyAgICAgICAgICAgICAgTGltaXQgIHdyaXRlcyAgYW5kICB0cmFuc2xhdGlvbnMgIHRvICB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRlcm1pbmFscy4gIElmIGFueSBuYW1lICBvcgorICAgICAgICAgICAgICBhbGlhcyBvZiBhIHRlcm1pbmFsIG1hdGNoZXMgb25lIG9mIHRoZSBuYW1lcyBpbiB0aGUKKyAgICAgICAgICAgICAgbGlzdCwgdGhlIGVudHJ5IHdpbGwgYmUgd3JpdHRlbiAgb3IgIHRyYW5zbGF0ZWQgIGFzCisgICAgICAgICAgICAgIG5vcm1hbC4gICBPdGhlcndpc2Ugbm8gb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkIGZvcgorICAgICAgICAgICAgICBpdC4gIFRoZSBvcHRpb24gdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBmaWxlIGNvbi0KKyAgICAgICAgICAgICAgdGFpbmluZyAgdGhlICBsaXN0ICBpZiAgaXQgIGNvbnRhaW5zIGEgJy8nLiAgKE5vdGU6CisgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiBob3cgdGljIHdhcyBjb21waWxlZCwgdGhpcyBvcHRpb24gIG1heQorICAgICAgICAgICAgICByZXF1aXJlIDxTVFJPTkc+LUk8L1NUUk9ORz4gb3IgPFNUUk9ORz4tQzwvU1RST05HPi4pCisKKyAgICAgICA8U1RST05HPi1mPC9TVFJPTkc+ICAgICBEaXNwbGF5ICBjb21wbGV4ICB0ZXJtaW5mbyAgc3RyaW5ncyAgd2hpY2ggIGNvbnRhaW4KKyAgICAgICAgICAgICAgaWYvdGhlbi9lbHNlL2VuZGlmIGV4cHJlc3Npb25zIGluZGVudGVkICBmb3IgIHJlYWQtCisgICAgICAgICAgICAgIGFiaWxpdHkuCisKKyAgICAgICA8U1RST05HPi1HPC9TVFJPTkc+ICAgICBEaXNwbGF5ICBjb25zdGFudCAgbGl0ZXJhbHMgIGluIGRlY2ltYWwgZm9ybSByYXRoZXIKKyAgICAgICAgICAgICAgdGhhbiB0aGVpciBjaGFyYWN0ZXIgZXF1aXZhbGVudHMuCisKKyAgICAgICA8U1RST05HPi1nPC9TVFJPTkc+ICAgICBEaXNwbGF5IGNvbnN0YW50IGNoYXJhY3RlciBsaXRlcmFscyBpbiBxdW90ZWQgIGZvcm0KKyAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gdGhlaXIgZGVjaW1hbCBlcXVpdmFsZW50cy4KKworICAgICAgIDxTVFJPTkc+LUk8L1NUUk9ORz4gICAgIEZvcmNlIHNvdXJjZSB0cmFuc2xhdGlvbiB0byB0ZXJtaW5mbyBmb3JtYXQuCisKKyAgICAgICA8U1RST05HPi1MPC9TVFJPTkc+ICAgICBGb3JjZSAgc291cmNlICB0cmFuc2xhdGlvbiB0byB0ZXJtaW5mbyBmb3JtYXQgdXNpbmcKKyAgICAgICAgICAgICAgdGhlIGxvbmcgQyB2YXJpYWJsZSBuYW1lcyBsaXN0ZWQgaW4gJmx0OzxTVFJPTkc+dGVybS5oPC9TVFJPTkc+Jmd0OworCisgICAgICAgPFNUUk9ORz4tTjwvU1RST05HPiAgICAgRGlzYWJsZSBzbWFydCBkZWZhdWx0cy4gIE5vcm1hbGx5LCB3aGVuIHRyYW5zbGF0aW5nCisgICAgICAgICAgICAgIGZyb20gdGVybWNhcCB0byB0ZXJtaW5mbywgdGhlIGNvbXBpbGVyIG1ha2VzIGEgbnVtLQorICAgICAgICAgICAgICBiZXIgb2YgYXNzdW1wdGlvbnMgYWJvdXQgIHRoZSAgZGVmYXVsdHMgIG9mICBzdHJpbmcKKyAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzICA8U1RST05HPnJlc2V0MV9zdHJpbmc8L1NUUk9ORz4sICA8U1RST05HPmNhcnJpYWdlX3JldHVybjwvU1RST05HPiwgPFNUUk9ORz5jdXItPC9TVFJPTkc+CisgICAgICAgICAgICAgIDxTVFJPTkc+c29yX2xlZnQ8L1NUUk9ORz4sIDxTVFJPTkc+Y3Vyc29yX2Rvd248L1NUUk9ORz4sICA8U1RST05HPnNjcm9sbF9mb3J3YXJkPC9TVFJPTkc+LCAgPFNUUk9ORz50YWI8L1NUUk9ORz4sICA8U1RST05HPm5ldy08L1NUUk9ORz4KKyAgICAgICAgICAgICAgPFNUUk9ORz5saW5lPC9TVFJPTkc+LCAgPFNUUk9ORz5rZXlfYmFja3NwYWNlPC9TVFJPTkc+LCAgPFNUUk9ORz5rZXlfbGVmdDwvU1RST05HPiwgYW5kIDxTVFJPTkc+a2V5X2Rvd248L1NUUk9ORz4sIHRoZW4KKyAgICAgICAgICAgICAgYXR0ZW1wdHMgdG8gdXNlIG9ic29sZXRlICB0ZXJtY2FwICBjYXBhYmlsaXRpZXMgIHRvCisgICAgICAgICAgICAgIGRlZHVjZSBjb3JyZWN0IHZhbHVlcy4gIEl0IGFsc28gbm9ybWFsbHkgc3VwcHJlc3NlcworICAgICAgICAgICAgICBvdXRwdXQgb2Ygb2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMgc3VjaCBhcyA8U1RST05HPmJzPC9TVFJPTkc+LgorICAgICAgICAgICAgICBUaGlzICBvcHRpb24gZm9yY2VzIGEgbW9yZSBsaXRlcmFsIHRyYW5zbGF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgYWxzbyBwcmVzZXJ2ZXMgdGhlIG9ic29sZXRlIGNhcGFiaWxpdGllcy4KKworICAgICAgIDxTVFJPTkc+LW88L1NUUk9ORz48RU0+ZGlyPC9FTT4gIFdyaXRlIGNvbXBpbGVkIGVudHJpZXMgdG8gZ2l2ZW4gIGRpcmVjdG9yeS4gICBPdmVyLQorICAgICAgICAgICAgICByaWRlcyB0aGUgVEVSTUlORk8gZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyAgICAgICA8U1RST05HPi1SPC9TVFJPTkc+PEVNPnN1YnNldDwvRU0+CisgICAgICAgICAgICAgIFJlc3RyaWN0ICBvdXRwdXQgdG8gYSBnaXZlbiBzdWJzZXQuICBUaGlzIG9wdGlvbiBpcworICAgICAgICAgICAgICBmb3IgdXNlIHdpdGggIGFyY2hhaWMgIHZlcnNpb25zICBvZiAgdGVybWluZm8gIGxpa2UKKyAgICAgICAgICAgICAgdGhvc2Ugb24gU1ZyMSwgVWx0cml4LCBvciBIUC9VWCB0aGF0IGRvIG5vdCBzdXBwb3J0CisgICAgICAgICAgICAgIHRoZSBmdWxsIHNldCBvZiBTVlI0L1hTSSBDdXJzZXMgdGVybWluZm87IGFuZCAgb3V0LQorICAgICAgICAgICAgICByaWdodCBicm9rZW4gcG9ydHMgbGlrZSBBSVggMy54IHRoYXQgaGF2ZSB0aGVpciBvd24KKyAgICAgICAgICAgICAgZXh0ZW5zaW9ucyBpbmNvbXBhdGlibGUgd2l0aCAgU1ZyNC9YU0kuICAgQXZhaWxhYmxlCisgICAgICAgICAgICAgIHN1YnNldHMgIGFyZSAgIlNWcjEiLCAgIlVsdHJpeCIsICAiSFAiLCAgIkJTRCIgIGFuZAorICAgICAgICAgICAgICAiQUlYIjsgc2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4gZm9yIGRldGFpbHMuCisKKyAgICAgICA8U1RST05HPi1yPC9TVFJPTkc+ICAgICBGb3JjZSBlbnRyeSByZXNvbHV0aW9uIChzbyB0aGVyZSBhcmUgIG5vICByZW1haW5pbmcKKyAgICAgICAgICAgICAgdGMgIGNhcGFiaWxpdGllcykgIGV2ZW4gIHdoZW4gIGRvaW5nIHRyYW5zbGF0aW9uIHRvCisgICAgICAgICAgICAgIHRlcm1jYXAgZm9ybWF0LiAgVGhpcyBtYXkgIGJlICBuZWVkZWQgIGlmICB5b3UgIGFyZQorICAgICAgICAgICAgICBwcmVwYXJpbmcgIGEgIHRlcm1jYXAgIGZpbGUgIGZvciAgYSB0ZXJtY2FwIGxpYnJhcnkKKyAgICAgICAgICAgICAgKHN1Y2ggYXMgR05VIHRlcm1jYXAgdGhyb3VnaCAgdmVyc2lvbiAgMS4zICBvciAgQlNECisgICAgICAgICAgICAgIHRlcm1jYXAgdGhyb3VnaCA0LjNCU0QpIHRoYXQgZG9lcyBub3QgaGFuZGxlIG11bHRpLQorICAgICAgICAgICAgICBwbGUgdGMgY2FwYWJpbGl0aWVzIHBlciBlbnRyeS4KKworICAgICAgIDxTVFJPTkc+LXM8L1NUUk9ORz4gICAgIFN1bW1hcml6ZSB0aGUgY29tcGlsZSBieSBzaG93aW5nIHRoZSBkaXJlY3RvcnkgaW50bworICAgICAgICAgICAgICB3aGljaCAgZW50cmllcyAgYXJlICB3cml0dGVuLCAgYW5kICB0aGUgIG51bWJlciAgb2YKKyAgICAgICAgICAgICAgZW50cmllcyB3aGljaCBhcmUgY29tcGlsZWQuCisKKyAgICAgICA8U1RST05HPi1UPC9TVFJPTkc+ICAgICBlbGltaW5hdGVzIHNpemUtcmVzdHJpY3Rpb25zIG9uIHRoZSBnZW5lcmF0ZWQgdGV4dC4KKyAgICAgICAgICAgICAgVGhpcyAgaXMgIG1haW5seSAgdXNlZnVsICBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMsCisgICAgICAgICAgICAgIHNpbmNlIHRoZSBjb21waWxlZCBkZXNjcmlwdGlvbnMgYXJlIGxpbWl0ZWQgIChlLmcuLAorICAgICAgICAgICAgICAxMDIzIGZvciB0ZXJtY2FwLCA0MDk2IGZvciB0ZXJtaW5mbykuCisKKyAgICAgICA8U1RST05HPi10PC9TVFJPTkc+ICAgICB0ZWxscyAgPFNUUk9ORz50aWM8L1NUUk9ORz4gIHRvICBkaXNjYXJkIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzLgorICAgICAgICAgICAgICBOb3JtYWxseSB3aGVuIHRyYW5zbGF0aW5nIGZyb20gdGVybWluZm8gdG8gdGVybWNhcCwKKyAgICAgICAgICAgICAgdW50cmFuc2xhdGFibGUgY2FwYWJpbGl0aWVzIGFyZSBjb21tZW50ZWQtb3V0LgorCisgICAgICAgPFNUUk9ORz4tVTwvU1RST05HPiAgIHRlbGxzICA8U1RST05HPnRpYzwvU1RST05HPiB0byBub3QgcG9zdC1wcm9jZXNzIHRoZSBkYXRhIGFmdGVyIHBhcnNpbmcKKyAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZS4gIE5vcm1hbGx5LCBpdCBpbmZlcnMgZGF0YSAgd2hpY2ggIGlzCisgICAgICAgICAgICBjb21tb25seSAgbWlzc2luZyBpbiBvbGRlciB0ZXJtaW5mbyBkYXRhLCBvciBpbiB0ZXJtLQorICAgICAgICAgICAgY2Fwcy4KKworICAgICAgIDxTVFJPTkc+LVY8L1NUUk9ORz4gICByZXBvcnRzIHRoZSB2ZXJzaW9uIG9mIG5jdXJzZXMgd2hpY2ggd2FzIHVzZWQgaW4gdGhpcworICAgICAgICAgICAgcHJvZ3JhbSwgYW5kIGV4aXRzLgorCisgICAgICAgPFNUUk9ORz4tdjwvU1RST05HPjxFTT5uPC9FTT4gIHNwZWNpZmllcyAgdGhhdCAgKHZlcmJvc2UpIG91dHB1dCBiZSB3cml0dGVuIHRvIHN0YW4tCisgICAgICAgICAgICBkYXJkIGVycm9yIHRyYWNlIGluZm9ybWF0aW9uIHNob3dpbmcgPFNUUk9ORz50aWM8L1NUUk9ORz4ncyAgcHJvZ3Jlc3MuCisgICAgICAgICAgICBUaGUgIG9wdGlvbmFsICBwYXJhbWV0ZXIgIDxFTT5uPC9FTT4gaXMgYSBudW1iZXIgZnJvbSAxIHRvIDEwLAorICAgICAgICAgICAgaW5jbHVzaXZlLCBpbmRpY2F0aW5nIHRoZSBkZXNpcmVkIGxldmVsIG9mIGRldGFpbCAgb2YKKyAgICAgICAgICAgIGluZm9ybWF0aW9uLiAgIElmICA8RU0+bjwvRU0+IGlzIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGxldmVsIGlzCisgICAgICAgICAgICAxLiAgSWYgPEVNPm48L0VNPiBpcyBzcGVjaWZpZWQgYW5kIGdyZWF0ZXIgdGhhbiAxLCAgdGhlICBsZXZlbAorICAgICAgICAgICAgb2YgZGV0YWlsIGlzIGluY3JlYXNlZC4KKworICAgICAgIDxTVFJPTkc+LXc8L1NUUk9ORz48RU0+bjwvRU0+ICBzcGVjaWZpZXMgIHRoZSB3aWR0aCBvZiB0aGUgb3V0cHV0LiAgVGhlIHBhcmFtZXRlciBpcworICAgICAgICAgICAgb3B0aW9uYWwuICBJZiBpdCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byA2MC4KKworICAgICAgIDxTVFJPTkc+LXg8L1NUUk9ORz4gICBUcmVhdCB1bmtub3duIGNhcGFiaWxpdGllcyBhcyB1c2VyLWRlZmluZWQuICBUaGF0IGlzLAorICAgICAgICAgICAgaWYgIHlvdSAgc3VwcGx5ICBhIGNhcGFiaWxpdHkgbmFtZSB3aGljaCA8U1RST05HPnRpYzwvU1RST05HPiBkb2VzIG5vdAorICAgICAgICAgICAgcmVjb2duaXplLCBpdCB3aWxsIGluZmVyIGl0cyB0eXBlIChib29sZWFuLCBudW1iZXIgb3IKKyAgICAgICAgICAgIHN0cmluZykgIGZyb20gIHRoZSAgc3ludGF4IGFuZCBtYWtlIGFuIGV4dGVuZGVkIHRhYmxlCisgICAgICAgICAgICBlbnRyeSAgZm9yICB0aGF0LiAgIFVzZXItZGVmaW5lZCAgY2FwYWJpbGl0eSAgc3RyaW5ncworICAgICAgICAgICAgd2hvc2UgIG5hbWUgYmVnaW5zIHdpdGggYGBrJycgYXJlIHRyZWF0ZWQgYXMgZnVuY3Rpb24KKyAgICAgICAgICAgIGtleXMuCisKKyAgICAgICA8RU0+ZmlsZTwvRU0+IGNvbnRhaW5zIG9uZSBvciBtb3JlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gIHRlcm1pbmFsICBkZXNjcmlwdGlvbnMKKyAgICAgICAgICAgIGluIHNvdXJjZSBmb3JtYXQgW3NlZSA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+XS4gIEVhY2ggZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGluIHRoZSBmaWxlIGRlc2NyaWJlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgIHBhcnRpY3UtCisgICAgICAgICAgICBsYXIgdGVybWluYWwuCisKKyAgICAgICBUaGUgZGVidWcgZmxhZyBsZXZlbHMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICAxICAgICAgTmFtZXMgb2YgZmlsZXMgY3JlYXRlZCBhbmQgbGlua2VkCisKKyAgICAgICAyICAgICAgSW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgYGB1c2UnJyBmYWNpbGl0eQorCisgICAgICAgMyAgICAgIFN0YXRpc3RpY3MgZnJvbSB0aGUgaGFzaGluZyBhbGdvcml0aG0KKworICAgICAgIDUgICAgICBTdHJpbmctdGFibGUgbWVtb3J5IGFsbG9jYXRpb25zCisKKyAgICAgICA3ICAgICAgRW50cmllcyBpbnRvIHRoZSBzdHJpbmctdGFibGUKKworICAgICAgIDggICAgICBMaXN0IG9mIHRva2VucyBlbmNvdW50ZXJlZCBieSBzY2FubmVyCisKKyAgICAgICA5ICAgICAgQWxsIHZhbHVlcyBjb21wdXRlZCBpbiBjb25zdHJ1Y3Rpb24gb2YgdGhlIGhhc2ggdGEtCisgICAgICAgICAgICAgIGJsZQorCisgICAgICAgSWYgdGhlIGRlYnVnIGxldmVsIDxFTT5uPC9FTT4gaXMgbm90IGdpdmVuLCBpdCBpcyB0YWtlbiB0byBiZSAgb25lLgorCisgICAgICAgQWxsIGJ1dCBvbmUgb2YgdGhlIGNhcGFiaWxpdGllcyByZWNvZ25pemVkIGJ5IDxTVFJPTkc+dGljPC9TVFJPTkc+IGFyZSBkb2MtCisgICAgICAgdW1lbnRlZCBpbiA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LiAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgPFNUUk9ORz51c2U8L1NUUk9ORz4gY2FwYWJpbC0KKyAgICAgICBpdHkuCisKKyAgICAgICBXaGVuICBhICA8U1RST05HPnVzZTwvU1RST05HPj08RU0+ZW50cnk8L0VNPi08RU0+bmFtZTwvRU0+ICBmaWVsZCBpcyBkaXNjb3ZlcmVkIGluIGEgdGVybWluYWwKKyAgICAgICBlbnRyeSBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQsIDxTVFJPTkc+dGljPC9TVFJPTkc+IHJlYWRzICBpbiAgdGhlICBiaW5hcnkKKyAgICAgICBmcm9tICA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm88L1NUUk9ORz4gdG8gY29tcGxldGUgdGhlIGVudHJ5LiAgKEVudHJpZXMKKyAgICAgICBjcmVhdGVkIGZyb20gPEVNPmZpbGU8L0VNPiB3aWxsIGJlIHVzZWQgZmlyc3QuICBJZiB0aGUgIGVudmlyb25tZW50CisgICAgICAgdmFyaWFibGUgIDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4gIGlzICBzZXQsICB0aGF0ICBkaXJlY3RvcnkgIGlzIHNlYXJjaGVkCisgICAgICAgaW5zdGVhZCBvZiA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm88L1NUUk9ORz4uKSAgPFNUUk9ORz50aWM8L1NUUk9ORz4gZHVwbGljYXRlcyB0aGUgY2FwYS0KKyAgICAgICBiaWxpdGllcyAgaW4gIDxFTT5lbnRyeTwvRU0+LTxFTT5uYW1lPC9FTT4gIGZvciAgdGhlIGN1cnJlbnQgZW50cnksIHdpdGggdGhlCisgICAgICAgZXhjZXB0aW9uICBvZiAgdGhvc2UgIGNhcGFiaWxpdGllcyAgdGhhdCAgZXhwbGljaXRseSAgIGFyZQorICAgICAgIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgZW50cnkuCisKKyAgICAgICBXaGVuICAgIGFuICAgZW50cnksICAgZS5nLiwgICA8U1RST05HPmVudHJ5X25hbWVfMTwvU1RST05HPiwgICBjb250YWlucyAgIGEKKyAgICAgICA8U1RST05HPnVzZT08L1NUUk9ORz48RU0+ZW50cnk8L0VNPl88RU0+bmFtZTwvRU0+XzxFTT4yPC9FTT4gIGZpZWxkLCAgYW55ICBjYW5jZWxlZCAgY2FwYWJpbGl0aWVzICAgaW4KKyAgICAgICA8RU0+ZW50cnk8L0VNPl88RU0+bmFtZTwvRU0+XzxFTT4yPC9FTT4gIG11c3QgYWxzbyBhcHBlYXIgaW4gPFNUUk9ORz5lbnRyeV9uYW1lXzE8L1NUUk9ORz4gYmVmb3JlIDxTVFJPTkc+dXNlPTwvU1RST05HPgorICAgICAgIGZvciB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gYmUgY2FuY2VsZWQgaW4gPFNUUk9ORz5lbnRyeV9uYW1lXzE8L1NUUk9ORz4uCisKKyAgICAgICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPiBpcyBzZXQsIHRoZSAgY29tcGlsZWQKKyAgICAgICByZXN1bHRzIGFyZSBwbGFjZWQgdGhlcmUgaW5zdGVhZCBvZiA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm88L1NUUk9ORz4uCisKKyAgICAgICBUb3RhbCBjb21waWxlZCBlbnRyaWVzIGNhbm5vdCBleGNlZWQgNDA5NiBieXRlcy4gIFRoZSBuYW1lCisgICAgICAgZmllbGQgY2Fubm90IGV4Y2VlZCA1MTIgYnl0ZXMuICBUZXJtaW5hbCAgbmFtZXMgIGV4Y2VlZGluZworICAgICAgIHRoZSAgbWF4aW11bSAgYWxpYXMgIGxlbmd0aCAoMzIgY2hhcmFjdGVycyBvbiBzeXN0ZW1zIHdpdGgKKyAgICAgICBsb25nIGZpbGVuYW1lcywgMTQgY2hhcmFjdGVycyBvdGhlcndpc2UpIHdpbGwgYmUgdHJ1bmNhdGVkCisgICAgICAgdG8gIHRoZSBtYXhpbXVtIGFsaWFzIGxlbmd0aCBhbmQgYSB3YXJuaW5nIG1lc3NhZ2Ugd2lsbCBiZQorICAgICAgIHByaW50ZWQuCisKKworPC9QUkU+Cis8SDI+Q09NUEFUSUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVyZSBpcyBzb21lIGV2aWRlbmNlIHRoYXQgaGlzdG9yaWMgIDxTVFJPTkc+dGljPC9TVFJPTkc+ICBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICB0cmVhdGVkICBkZXNjcmlwdGlvbiAgZmllbGRzIHdpdGggbm8gd2hpdGVzcGFjZSBpbiB0aGVtIGFzCisgICAgICAgYWRkaXRpb25hbCBhbGlhc2VzIG9yIHNob3J0IG5hbWVzLiAgVGhpcyA8U1RST05HPnRpYzwvU1RST05HPiBkb2VzICBub3QgIGRvCisgICAgICAgdGhhdCwgIGJ1dCAgaXQgIGRvZXMgIHdhcm4gIHdoZW4gZGVzY3JpcHRpb24gZmllbGRzIG1heSBiZQorICAgICAgIHRyZWF0ZWQgdGhhdCB3YXkgYW5kIGNoZWNrIHRoZW0gZm9yIGRhbmdlcm91cyAgY2hhcmFjdGVycy4KKworCis8L1BSRT4KKzxIMj5FWFRFTlNJT05TPC9IMj48UFJFPgorICAgICAgIFVubGlrZSB0aGUgc3RvY2sgU1ZyNCA8U1RST05HPnRpYzwvU1RST05HPiBjb21tYW5kLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbgorICAgICAgIGFjdHVhbGx5IGNvbXBpbGUgdGVybWNhcCBzb3VyY2VzLiAgIEluICBmYWN0LCAgZW50cmllcyAgaW4KKyAgICAgICB0ZXJtaW5mbyAgYW5kICB0ZXJtY2FwICBzeW50YXggIGNhbiAgYmUgIG1peGVkIGluIGEgc2luZ2xlCisgICAgICAgc291cmNlIGZpbGUuICBTZWUgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPiAgZm9yICB0aGUgIGxpc3QgIG9mICB0ZXJtY2FwCisgICAgICAgbmFtZXMgdGFrZW4gdG8gYmUgZXF1aXZhbGVudCB0byB0ZXJtaW5mbyBuYW1lcy4KKworICAgICAgIFRoZSAgU1ZyNCAgbWFudWFsICBwYWdlcyAgYXJlICBub3QgY2xlYXIgb24gdGhlIHJlc29sdXRpb24KKyAgICAgICBydWxlcyBmb3IgPFNUUk9ORz51c2U8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLiAgVGhpcyAgaW1wbGVtZW50YXRpb24gIG9mICA8U1RST05HPnRpYzwvU1RST05HPgorICAgICAgIHdpbGwgZmluZCA8U1RST05HPnVzZTwvU1RST05HPiB0YXJnZXRzIGFueXdoZXJlIGluIHRoZSBzb3VyY2UgZmlsZSwgb3IgYW55LQorICAgICAgIHdoZXJlIGluIHRoZSBmaWxlIHRyZWUgcm9vdGVkIGF0IDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4gKGlmIDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4gIGlzCisgICAgICAgZGVmaW5lZCksICBvciAgaW4gdGhlIHVzZXIncyA8RU0+JEhPTUUvLnRlcm1pbmZvPC9FTT4gZGlyZWN0b3J5IChpZgorICAgICAgIGl0IGV4aXN0cyksIG9yIChmaW5hbGx5KSBhbnl3aGVyZSAgaW4gIHRoZSAgc3lzdGVtJ3MgIGZpbGUKKyAgICAgICB0cmVlIG9mIGNvbXBpbGVkIGVudHJpZXMuCisKKyAgICAgICBUaGUgIGVycm9yICBtZXNzYWdlcyBmcm9tIHRoaXMgPFNUUk9ORz50aWM8L1NUUk9ORz4gaGF2ZSB0aGUgc2FtZSBmb3JtYXQgYXMKKyAgICAgICBHTlUgQyBlcnJvciBtZXNzYWdlcywgYW5kIGNhbiBiZSAgcGFyc2VkICBieSAgR05VICBFbWFjcydzCisgICAgICAgY29tcGlsZSBmYWNpbGl0eS4KKworICAgICAgIFRoZSAgPFNUUk9ORz4tQzwvU1RST05HPiwgIDxTVFJPTkc+LUc8L1NUUk9ORz4sICA8U1RST05HPi1JPC9TVFJPTkc+LCA8U1RST05HPi1OPC9TVFJPTkc+LCA8U1RST05HPi1SPC9TVFJPTkc+LCA8U1RST05HPi1UPC9TVFJPTkc+LCA8U1RST05HPi1WPC9TVFJPTkc+LCA8U1RST05HPi1hPC9TVFJPTkc+LCA8U1RST05HPi1lPC9TVFJPTkc+LCA8U1RST05HPi1mPC9TVFJPTkc+LCA8U1RST05HPi1nPC9TVFJPTkc+LCA8U1RST05HPi1vPC9TVFJPTkc+LCA8U1RST05HPi1yPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+LXM8L1NUUk9ORz4sIDxTVFJPTkc+LXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+LXg8L1NUUk9ORz4gb3B0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCB1bmRlciAgU1ZyNC4gICBUaGUKKyAgICAgICBTVnI0IDxTVFJPTkc+LWM8L1NUUk9ORz4gbW9kZSBkb2VzIG5vdCByZXBvcnQgYmFkIHVzZSBsaW5rcy4KKworICAgICAgIFN5c3RlbSAgViBkb2VzIG5vdCBjb21waWxlIGVudHJpZXMgdG8gb3IgcmVhZCBlbnRyaWVzIGZyb20KKyAgICAgICB5b3VyIDxFTT4kSE9NRS8udGVybWluZm88L0VNPiBkaXJlY3RvcnkgdW5sZXNzIFRFUk1JTkZPIGlzICBleHBsaWMtCisgICAgICAgaXRseSBzZXQgdG8gaXQuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4vdXNyL3NoYXJlL3Rlcm1pbmZvLz8vKjwvU1RST05HPgorICAgICAgICAgICAgQ29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb24gZGF0YWJhc2UuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiwgICAgPFNUUk9ORz48QSBIUkVGPSJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvKDFtKTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwKDFtKTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJ0b2UuMW0uaHRtbCI+dG9lKDFtKTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL3RvZS4xbS5odG1sIGIvZG9jL2h0bWwvbWFuL3RvZS4xbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDM3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vdG9lLjFtLmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogdG9lLjFtLHYgMS4yMSAyMDA4LzAxLzA1IDIwOjU3OjE2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnRvZSAxbTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPnRvZSAxbTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0idG9lLjFtLmh0bWwiPnRvZSgxbSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0b2UuMW0uaHRtbCI+dG9lKDFtKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRvZTwvU1RST05HPiAtIHRhYmxlIG9mICh0ZXJtaW5mbykgZW50cmllcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dG9lPC9TVFJPTkc+IFs8U1RST05HPi12PC9TVFJPTkc+WzxFTT5uPC9FTT5dXSBbPFNUUk9ORz4tYWh1VVY8L1NUUk9ORz5dIDxFTT5maWxlLi4uPC9FTT4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBXaXRoIG5vIG9wdGlvbnMsIDxTVFJPTkc+dG9lPC9TVFJPTkc+IGxpc3RzIGFsbCBhdmFpbGFibGUgdGVybWluYWwgdHlwZXMgYnkKKyAgICAgICBwcmltYXJ5IG5hbWUgd2l0aCBkZXNjcmlwdGlvbnMuICAgRmlsZSAgYXJndW1lbnRzICBzcGVjaWZ5CisgICAgICAgdGhlICBkaXJlY3RvcmllcyAgdG8gIGJlIHNjYW5uZWQ7IGlmIG5vIHN1Y2ggYXJndW1lbnRzIGFyZQorICAgICAgIGdpdmVuLCB5b3VyIGRlZmF1bHQgdGVybWluZm8gZGlyZWN0b3J5IGlzIHNjYW5uZWQuICBJZiB5b3UKKyAgICAgICBhbHNvICBzcGVjaWZ5ICB0aGUgIDxTVFJPTkc+LWg8L1NUUk9ORz4gIG9wdGlvbiwgYSBkaXJlY3RvcnkgaGVhZGVyIHdpbGwgYmUKKyAgICAgICBpc3N1ZWQgYXMgZWFjaCBkaXJlY3RvcnkgaXMgZW50ZXJlZC4KKworICAgICAgIFRoZXJlIGFyZSBvdGhlciBvcHRpb25zIGludGVuZGVkIGZvciB1c2UgYnkgdGVybWluZm8gIGZpbGUKKyAgICAgICBtYWludGFpbmVyczoKKworICAgICAgIDxTVFJPTkc+LWE8L1NUUk9ORz4gICAgIHJlcG9ydCAgb24gIGFsbCAgb2YgIHRoZSAgdGVybWluYWwgIGRhdGFiYXNlcyB3aGljaAorICAgICAgICAgICAgICBuY3Vyc2VzIHdvdWxkIHNlYXJjaCwgcmF0aGVyIHRoYW4gIG9ubHkgIHRoZSAgZmlyc3QKKyAgICAgICAgICAgICAgb25lIHRoYXQgaXQgZmluZHMuCisKKyAgICAgICA8U1RST05HPi11PC9TVFJPTkc+IDxFTT5maWxlPC9FTT4KKyAgICAgICAgICAgICAgc2F5cyAgdG8gIHdyaXRlICBhICByZXBvcnQgIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsCisgICAgICAgICAgICAgIGxpc3RpbmcgZGVwZW5kZW5jaWVzIGluIHRoZSBnaXZlbiAgdGVybWluZm8vdGVybWNhcAorICAgICAgICAgICAgICBzb3VyY2UgIGZpbGUuICBUaGUgcmVwb3J0IGNvbmRlbnNlcyB0aGUgYHVzZScgcmVsYS0KKyAgICAgICAgICAgICAgdGlvbjogZWFjaCBsaW5lIGNvbnNpc3RzIG9mIHRoZSBwcmltYXJ5IG5hbWUgIG9mICBhCisgICAgICAgICAgICAgIHRlcm1pbmFsICB0aGF0ICBoYXMgdXNlIGNhcGFiaWxpdGllcywgZm9sbG93ZWQgYnkgYQorICAgICAgICAgICAgICBjb2xvbiwgZm9sbG93ZWQgYnkgdGhlIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHByaW1hcnkKKyAgICAgICAgICAgICAgbmFtZXMgIG9mICBhbGwgIHRlcm1pbmFscyAgd2hpY2ggb2NjdXIgaW4gdGhvc2UgdXNlCisgICAgICAgICAgICAgIGNhcGFiaWxpdGllcywgZm9sbG93ZWQgYnkgYSBuZXdsaW5lCisKKyAgICAgICA8U1RST05HPi1VPC9TVFJPTkc+IDxFTT5maWxlPC9FTT4KKyAgICAgICAgICAgICAgc2F5cyB0byB3cml0ZSBhICByZXBvcnQgIHRvICB0aGUgIHN0YW5kYXJkICBvdXRwdXQsCisgICAgICAgICAgICAgIGxpc3RpbmcgIHJldmVyc2UgIGRlcGVuZGVuY2llcyAgaW4gIHRoZSAgZ2l2ZW4gdGVyLQorICAgICAgICAgICAgICBtaW5mby90ZXJtY2FwIHNvdXJjZSBmaWxlLiAgVGhlIHJlcG9ydCByZXZlcnNlcyB0aGUKKyAgICAgICAgICAgICAgYHVzZScgIHJlbGF0aW9uOiAgZWFjaCBsaW5lIGNvbnNpc3RzIG9mIHRoZSBwcmltYXJ5CisgICAgICAgICAgICAgIG5hbWUgb2YgYSB0ZXJtaW5hbCB0aGF0IG9jY3VycyBpbiB1c2UgY2FwYWJpbGl0aWVzLAorICAgICAgICAgICAgICBmb2xsb3dlZCAgYnkgIGEgIGNvbG9uLCBmb2xsb3dlZCBieSB0aGUgd2hpdGVzcGFjZS0KKyAgICAgICAgICAgICAgc2VwYXJhdGVkIHByaW1hcnkgIG5hbWVzICBvZiAgYWxsICB0ZXJtaW5hbHMgIHdoaWNoCisgICAgICAgICAgICAgIGRlcGVuZCBvbiBpdCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgorCisgICAgICAgPFNUUk9ORz4tdjwvU1RST05HPjxFTT5uPC9FTT4gICAgc3BlY2lmaWVzIHRoYXQgKHZlcmJvc2UpIG91dHB1dCBiZSB3cml0dGVuIHRvIHN0YW4tCisgICAgICAgICAgICAgIGRhcmQgZXJyb3IsIHNob3dpbmcgPFNUUk9ORz50b2U8L1NUUk9ORz4ncyBwcm9ncmVzcy4gICBUaGUgIG9wdGlvbmFsCisgICAgICAgICAgICAgIHBhcmFtZXRlciAgPEVNPm48L0VNPiAgaXMgYSBudW1iZXIgZnJvbSAxIHRvIDEwLCBpbnRlcnByZXRlZAorICAgICAgICAgICAgICBhcyBmb3IgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPi1WPC9TVFJPTkc+ICAgICByZXBvcnRzIHRoZSB2ZXJzaW9uIG9mIG5jdXJzZXMgd2hpY2ggIHdhcyAgdXNlZCAgaW4KKyAgICAgICAgICAgICAgdGhpcyBwcm9ncmFtLCBhbmQgZXhpdHMuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4vdXNyL3NoYXJlL3Rlcm1pbmZvLz8vKjwvU1RST05HPgorICAgICAgICAgICAgQ29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb24gZGF0YWJhc2UuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4sICAgIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvKDFtKTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwKDFtKTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0b2UuMW0uaHRtbCI+dG9lKDFtKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL3RwdXQuMS5odG1sIGIvZG9jL2h0bWwvbWFuL3RwdXQuMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzFhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vdHB1dC4xLmh0bWwKQEAgLTAsMCArMSwzNDMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IHRwdXQuMSx2IDEuMjcgMjAwNi8xMi8yNCAxODoxMTozMSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT50cHV0IDE8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT50cHV0IDE8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9InRwdXQuMS5odG1sIj50cHV0KDEpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idHB1dC4xLmh0bWwiPnRwdXQoMSk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+LCAgPFNUUk9ORz5yZXNldDwvU1RST05HPiAgLSAgaW5pdGlhbGl6ZSAgYSAgdGVybWluYWwgb3IgcXVlcnkgdGVybWluZm8KKyAgICAgICBkYXRhYmFzZQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiBbPFNUUk9ORz4tVDwvU1RST05HPjxFTT50eXBlPC9FTT5dIDxFTT5jYXBuYW1lPC9FTT4gWzxFTT5wYXJtczwvRU0+IC4uLiBdCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IFs8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPl0gPFNUUk9ORz5pbml0PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IFs8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPl0gPFNUUk9ORz5yZXNldDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiBbPFNUUk9ORz4tVDwvU1RST05HPjxFTT50eXBlPC9FTT5dIDxTVFJPTkc+bG9uZ25hbWU8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz4tUzwvU1RST05HPiAgPFNUUk9ORz4mbHQ7Jmx0OzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1WPC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+dHB1dDwvU1RST05HPiB1dGlsaXR5IHVzZXMgdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZGF0YWJhc2UgIHRvICBtYWtlICB0aGUKKyAgICAgICB2YWx1ZXMgIG9mIHRlcm1pbmFsLWRlcGVuZGVudCBjYXBhYmlsaXRpZXMgYW5kIGluZm9ybWF0aW9uCisgICAgICAgYXZhaWxhYmxlIHRvIHRoZSBzaGVsbCAoc2VlIDxTVFJPTkc+PEEgSFJFRj0ic2guMS5odG1sIj5zaCgxKTwvQT48L1NUUk9ORz4pLCB0byBpbml0aWFsaXplIG9yIHJlc2V0CisgICAgICAgdGhlICB0ZXJtaW5hbCwgIG9yICByZXR1cm4gIHRoZSBsb25nIG5hbWUgb2YgdGhlIHJlcXVlc3RlZAorICAgICAgIHRlcm1pbmFsIHR5cGUuICBUaGUgcmVzdWx0IGRlcGVuZHMgdXBvbiAgdGhlICBjYXBhYmlsaXR5J3MKKyAgICAgICB0eXBlOgorCisgICAgICAgICAgICAgIHN0cmluZworICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiB3cml0ZXMgdGhlIHN0cmluZyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgIE5vIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3VwcGxpZWQuCisKKyAgICAgICAgICAgICAgaW50ZWdlcgorICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiB3cml0ZXMgdGhlIGRlY2ltYWwgdmFsdWUgdG8gdGhlICBzdGFuZGFyZAorICAgICAgICAgICAgICAgICAgIG91dHB1dCwgd2l0aCBhIHRyYWlsaW5nIG5ld2xpbmUuCisKKyAgICAgICAgICAgICAgYm9vbGVhbgorICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiAgc2ltcGx5IHNldHMgdGhlIGV4aXQgY29kZSAoPFNUUk9ORz4wPC9TVFJPTkc+IGZvciBUUlVFIGlmCisgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1pbmFsIGhhcyB0aGUgY2FwYWJpbGl0eSwgPFNUUk9ORz4xPC9TVFJPTkc+ICBmb3IgIEZBTFNFCisgICAgICAgICAgICAgICAgICAgaWYgIGl0ICBkb2VzICBub3QpLCAgYW5kIHdyaXRlcyBub3RoaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIG91dHB1dC4KKworICAgICAgIEJlZm9yZSB1c2luZyBhIHZhbHVlIHJldHVybmVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQsICB0aGUKKyAgICAgICBhcHBsaWNhdGlvbiAgc2hvdWxkICB0ZXN0ICB0aGUgIGV4aXQgIGNvZGUgIChlLmcuLCA8U1RST05HPiQ/PC9TVFJPTkc+LCBzZWUKKyAgICAgICA8U1RST05HPjxBIEhSRUY9InNoLjEuaHRtbCI+c2goMSk8L0E+PC9TVFJPTkc+KSB0byBiZSBzdXJlIGl0IGlzIDxTVFJPTkc+MDwvU1RST05HPi4gIChTZWUgdGhlIDxTVFJPTkc+RVhJVDwvU1RST05HPiA8U1RST05HPkNPREVTPC9TVFJPTkc+IGFuZCAgPFNUUk9ORz5ESUFHLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Tk9TVElDUzwvU1RST05HPiAgc2VjdGlvbnMuKSAgIEZvciAgYSBjb21wbGV0ZSBsaXN0IG9mIGNhcGFiaWxpdGllcworICAgICAgIGFuZCB0aGUgPEVNPmNhcG5hbWU8L0VNPiBhc3NvY2lhdGVkIHdpdGggZWFjaCwgc2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPiBpbmRpY2F0ZXMgdGhlICA8RU0+dHlwZTwvRU0+ICBvZiAgdGVybWluYWwuICAgTm9ybWFsbHkgIHRoaXMKKyAgICAgICAgICAgICAgb3B0aW9uIGlzIHVubmVjZXNzYXJ5LCBiZWNhdXNlIHRoZSBkZWZhdWx0IGlzIHRha2VuCisgICAgICAgICAgICAgIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPi4gIElmIDxTVFJPTkc+LVQ8L1NUUk9ORz4gaXMgc3BlYy0KKyAgICAgICAgICAgICAgaWZpZWQsICB0aGVuICB0aGUgc2hlbGwgdmFyaWFibGVzIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Q09MVU1OUzwvU1RST05HPgorICAgICAgICAgICAgICB3aWxsIGJlIGlnbm9yZWQsYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtICB3aWxsICBub3QKKyAgICAgICAgICAgICAgYmUgcXVlcmllZCBmb3IgdGhlIGFjdHVhbCBzY3JlZW4gc2l6ZS4KKworICAgICAgIDxFTT5jYXBuYW1lPC9FTT4KKyAgICAgICAgICAgICAgaW5kaWNhdGVzICAgdGhlICAgY2FwYWJpbGl0eSAgIGZyb20gICB0aGUgIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4KKyAgICAgICAgICAgICAgZGF0YWJhc2UuICBXaGVuIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiBzdXBwb3J0IGlzIGNvbXBpbGVkIGluLCB0aGUKKyAgICAgICAgICAgICAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IG5hbWUgZm9yIHRoZSBjYXBhYmlsaXR5IGlzIGFsc28gYWNjZXB0ZWQuCisKKyAgICAgICA8RU0+cGFybXM8L0VNPiAgSWYgIHRoZSAgY2FwYWJpbGl0eSAgaXMgYSBzdHJpbmcgdGhhdCB0YWtlcyBwYXJhbWUtCisgICAgICAgICAgICAgIHRlcnMsIHRoZSBhcmd1bWVudHMgPEVNPnBhcm1zPC9FTT4gd2lsbCBiZSBpbnN0YW50aWF0ZWQgaW50bworICAgICAgICAgICAgICB0aGUgc3RyaW5nLgorCisgICAgICAgICAgICAgIE1vc3QgIHBhcmFtZXRlcnMgIGFyZSBudW1iZXJzLiAgT25seSBhIGZldyB0ZXJtaW5mbworICAgICAgICAgICAgICBjYXBhYmlsaXRpZXMgcmVxdWlyZSBzdHJpbmcgcGFyYW1ldGVyczsgPFNUUk9ORz50cHV0PC9TVFJPTkc+IHVzZXMgYQorICAgICAgICAgICAgICB0YWJsZSB0byBkZWNpZGUgd2hpY2ggdG8gcGFzcyBhcyBzdHJpbmdzLiAgTm9ybWFsbHkKKyAgICAgICAgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IHVzZXMgPFNUUk9ORz50cGFybTwvU1RST05HPiAoM3gpIHRvIHBlcmZvcm0gIHRoZSAgc3Vic3RpdHV0aW9uLgorICAgICAgICAgICAgICBJZiBubyBwYXJhbWV0ZXJzIGFyZSBnaXZlbiBmb3IgdGhlIGNhcGFiaWxpdHksIDxTVFJPTkc+dHB1dDwvU1RST05HPgorICAgICAgICAgICAgICB3cml0ZXMgICB0aGUgICBzdHJpbmcgICB3aXRob3V0ICAgcGVyZm9ybWluZyAgICB0aGUKKyAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLgorCisgICAgICAgPFNUUk9ORz4tUzwvU1RST05HPiAgICAgYWxsb3dzICBtb3JlICB0aGFuIG9uZSBjYXBhYmlsaXR5IHBlciBpbnZvY2F0aW9uIG9mCisgICAgICAgICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPi4gIFRoZSBjYXBhYmlsaXRpZXMgbXVzdCBiZSBwYXNzZWQgdG8gPFNUUk9ORz50cHV0PC9TVFJPTkc+IGZyb20KKyAgICAgICAgICAgICAgdGhlIHN0YW5kYXJkIGlucHV0IGluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgICAgICAgIChzZWUgZXhhbXBsZSkuICBPbmx5IG9uZSAgPEVNPmNhcG5hbWU8L0VNPiAgaXMgIGFsbG93ZWQgIHBlcgorICAgICAgICAgICAgICBsaW5lLiAgIFRoZSAgPFNUUk9ORz4tUzwvU1RST05HPiBvcHRpb24gY2hhbmdlcyB0aGUgbWVhbmluZyBvZiB0aGUgPFNUUk9ORz4wPC9TVFJPTkc+CisgICAgICAgICAgICAgIGFuZCA8U1RST05HPjE8L1NUUk9ORz4gYm9vbGVhbiBhbmQgc3RyaW5nIGV4aXQgY29kZXMgKHNlZSAgdGhlICBFWElUCisgICAgICAgICAgICAgIENPREVTIHNlY3Rpb24pLgorCisgICAgICAgICAgICAgIEFnYWluLCA8U1RST05HPnRwdXQ8L1NUUk9ORz4gdXNlcyBhIHRhYmxlIGFuZCB0aGUgcHJlc2VuY2Ugb2YgcGFyYW0tCisgICAgICAgICAgICAgIGV0ZXJzIGluIGl0cyBpbnB1dCB0byBkZWNpZGUgd2hldGhlciB0byAgdXNlICA8U1RST05HPnRwYXJtPC9TVFJPTkc+CisgICAgICAgICAgICAgICgzeCksIGFuZCBob3cgdG8gaW50ZXJwcmV0IHRoZSBwYXJhbWV0ZXJzLgorCisgICAgICAgPFNUUk9ORz4tVjwvU1RST05HPiAgICAgcmVwb3J0cyAgdGhlICB2ZXJzaW9uICBvZiBuY3Vyc2VzIHdoaWNoIHdhcyB1c2VkIGluCisgICAgICAgICAgICAgIHRoaXMgcHJvZ3JhbSwgYW5kIGV4aXRzLgorCisgICAgICAgPFNUUk9ORz5pbml0PC9TVFJPTkc+ICAgSWYgdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZGF0YWJhc2UgaXMgcHJlc2VudCAgYW5kICBhbiAgZW50cnkKKyAgICAgICAgICAgICAgZm9yIHRoZSB1c2VyJ3MgdGVybWluYWwgZXhpc3RzIChzZWUgPFNUUk9ORz4tVDwvU1RST05HPjxFTT50eXBlPC9FTT4sIGFib3ZlKSwKKyAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyB3aWxsIG9jY3VyOgorCisgICAgICAgICAgICAgICgxKSAgICBpZiBwcmVzZW50LCAgdGhlICB0ZXJtaW5hbCdzICBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyAgd2lsbCAgYmUgIG91dHB1dCBhcyBkZXRhaWxlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4gc2VjdGlvbiBvbiA8RU0+VGFiczwvRU0+IDxFTT5hbmQ8L0VNPiAgPEVNPkluaXRpYWxpemEtPC9FTT4KKyAgICAgICAgICAgICAgICAgICAgIDxFTT50aW9uPC9FTT4sCisKKyAgICAgICAgICAgICAgKDIpICAgIGFueSAgZGVsYXlzIChlLmcuLCBuZXdsaW5lKSBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICBlbnRyeSB3aWxsIGJlIHNldCBpbiB0aGUgdHR5IGRyaXZlciwKKworICAgICAgICAgICAgICAoMykgICAgdGFicyBleHBhbnNpb24gd2lsbCAgYmUgIHR1cm5lZCAgb24gIG9yICBvZmYKKyAgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZW50cnksCisgICAgICAgICAgICAgICAgICAgICBhbmQKKworICAgICAgICAgICAgICAoNCkgICAgaWYgdGFicyBhcmUgbm90IGV4cGFuZGVkLCBzdGFuZGFyZCB0YWJzIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgIGJlIHNldCAoZXZlcnkgOCBzcGFjZXMpLgorCisgICAgICAgICAgICAgIElmIGFuIGVudHJ5IGRvZXMgbm90IGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIG5lZWRlZAorICAgICAgICAgICAgICBmb3IgYW55IG9mIHRoZSBmb3VyIGFib3ZlIGFjdGl2aXRpZXMsIHRoYXQgYWN0aXZpdHkKKyAgICAgICAgICAgICAgd2lsbCBzaWxlbnRseSBiZSBza2lwcGVkLgorCisgICAgICAgPFNUUk9ORz5yZXNldDwvU1RST05HPiAgSW5zdGVhZCAgb2YgcHV0dGluZyBvdXQgaW5pdGlhbGl6YXRpb24gc3RyaW5ncywgdGhlCisgICAgICAgICAgICAgIHRlcm1pbmFsJ3MgcmVzZXQgc3RyaW5ncyB3aWxsIGJlIG91dHB1dCBpZiAgcHJlc2VudAorICAgICAgICAgICAgICAoPFNUUk9ORz5yczE8L1NUUk9ORz4sICA8U1RST05HPnJzMjwvU1RST05HPiwgPFNUUk9ORz5yczM8L1NUUk9ORz4sIDxTVFJPTkc+cmY8L1NUUk9ORz4pLiAgSWYgdGhlIHJlc2V0IHN0cmluZ3MgYXJlIG5vdAorICAgICAgICAgICAgICBwcmVzZW50LCBidXQgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyBhcmUsICB0aGUgIGluaS0KKyAgICAgICAgICAgICAgdGlhbGl6YXRpb24gIHN0cmluZ3MgIHdpbGwgIGJlICBvdXRwdXQuICBPdGhlcndpc2UsCisgICAgICAgICAgICAgIDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4gYWN0cyBpZGVudGljYWxseSB0byA8U1RST05HPmluaXQ8L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+CisgICAgICAgICAgICAgIElmIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlIGlzIHByZXNlbnQgIGFuZCAgYW4gIGVudHJ5CisgICAgICAgICAgICAgIGZvciAgdGhlIHVzZXIncyB0ZXJtaW5hbCBleGlzdHMgKHNlZSA8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPiBhYm92ZSksCisgICAgICAgICAgICAgIHRoZW4gdGhlIGxvbmcgbmFtZSBvZiB0aGUgdGVybWluYWwgd2lsbCBiZSBwdXQgb3V0LgorICAgICAgICAgICAgICBUaGUgbG9uZyBuYW1lIGlzIHRoZSBsYXN0IG5hbWUgaW4gdGhlIGZpcnN0IGxpbmUgb2YKKyAgICAgICAgICAgICAgdGhlIHRlcm1pbmFsJ3MgZGVzY3JpcHRpb24gaW4gdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZGF0YWJhc2UKKyAgICAgICAgICAgICAgW3NlZSA8U1RST05HPjxBIEhSRUY9InRlcm0uNS5odG1sIj50ZXJtKDUpPC9BPjwvU1RST05HPl0uCisKKyAgICAgICBJZiAgPFNUUk9ORz50cHV0PC9TVFJPTkc+ICBpcyAgaW52b2tlZCAgYnkgYSBsaW5rIG5hbWVkIDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4sIHRoaXMgaGFzIHRoZQorICAgICAgIHNhbWUgZWZmZWN0IGFzIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPnJlc2V0PC9TVFJPTkc+LiAgU2VlIDxTVFJPTkc+dHNldDwvU1RST05HPiBmb3IgY29tcGFyaXNvbiwgd2hpY2gKKyAgICAgICBoYXMgc2ltaWxhciBiZWhhdmlvci4KKworCis8L1BSRT4KKzxIMj5FWEFNUExFUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz5pbml0PC9TVFJPTkc+CisgICAgICAgICAgICBJbml0aWFsaXplIHRoZSB0ZXJtaW5hbCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2YgdGVyLQorICAgICAgICAgICAgbWluYWwgaW4gdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+LiAgVGhpcyAgY29tLQorICAgICAgICAgICAgbWFuZCAgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGV2ZXJ5b25lJ3MgLnByb2ZpbGUgYWZ0ZXIKKyAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPiBoYXMgYmVlbiBleHBvcnRlZCwgYXMKKyAgICAgICAgICAgIGlsbHVzdHJhdGVkIG9uIHRoZSA8U1RST05HPjxBIEhSRUY9InByb2ZpbGUuNS5odG1sIj5wcm9maWxlKDUpPC9BPjwvU1RST05HPiBtYW51YWwgcGFnZS4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1UNTYyMDwvU1RST05HPiA8U1RST05HPnJlc2V0PC9TVFJPTkc+CisgICAgICAgICAgICBSZXNldCAgYW4gIEFUJmFtcDtUIDU2MjAgdGVybWluYWwsIG92ZXJyaWRpbmcgdGhlIHR5cGUgb2YKKyAgICAgICAgICAgIHRlcm1pbmFsIGluIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmN1cDwvU1RST05HPiA8U1RST05HPjA8L1NUUk9ORz4gPFNUUk9ORz4wPC9TVFJPTkc+CisgICAgICAgICAgICBTZW5kIHRoZSBzZXF1ZW5jZSB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gcm93IDxTVFJPTkc+MDwvU1RST05HPiwgY29sdW1uCisgICAgICAgICAgICA8U1RST05HPjA8L1NUUk9ORz4gKHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuLCB1c3VhbGx5IGtub3duCisgICAgICAgICAgICBhcyB0aGUgImhvbWUiIGN1cnNvciBwb3NpdGlvbikuCisKKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz5jbGVhcjwvU1RST05HPgorICAgICAgICAgICAgRWNobyB0aGUgY2xlYXItc2NyZWVuIHNlcXVlbmNlIGZvciB0aGUgY3VycmVudCB0ZXJtaS0KKyAgICAgICAgICAgIG5hbC4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmNvbHM8L1NUUk9ORz4KKyAgICAgICAgICAgIFByaW50IHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIGN1cnJlbnQgdGVybWluYWwuCisKKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz4tVDQ1MDwvU1RST05HPiA8U1RST05HPmNvbHM8L1NUUk9ORz4KKyAgICAgICAgICAgIFByaW50IHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIDQ1MCB0ZXJtaW5hbC4KKworICAgICAgIDxTVFJPTkc+Ym9sZD1gdHB1dDwvU1RST05HPiA8U1RST05HPnNtc29gPC9TVFJPTkc+IDxTVFJPTkc+b2ZmYm9sZD1gdHB1dDwvU1RST05HPiA8U1RST05HPnJtc29gPC9TVFJPTkc+CisgICAgICAgICAgICBTZXQgdGhlIHNoZWxsIHZhcmlhYmxlcyA8U1RST05HPmJvbGQ8L1NUUk9ORz4sIHRvIGJlZ2luIHN0YW5kLW91dCBtb2RlCisgICAgICAgICAgICBzZXF1ZW5jZSwgYW5kIDxTVFJPTkc+b2ZmYm9sZDwvU1RST05HPiwgdG8gZW5kIHN0YW5kb3V0IG1vZGUgc2VxdWVuY2UsCisgICAgICAgICAgICBmb3IgdGhlIGN1cnJlbnQgdGVybWluYWwuICBUaGlzIG1pZ2h0IGJlIGZvbGxvd2VkICBieQorICAgICAgICAgICAgYSAgcHJvbXB0OiAgPFNUUk9ORz5lY2hvPC9TVFJPTkc+ICA8U1RST05HPiIke2JvbGR9UGxlYXNlPC9TVFJPTkc+ICA8U1RST05HPnR5cGU8L1NUUk9ORz4gIDxTVFJPTkc+aW48L1NUUk9ORz4gPFNUUk9ORz55b3VyPC9TVFJPTkc+IDxTVFJPTkc+bmFtZTo8L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+JHtvZmZib2xkfVxjIjwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+aGM8L1NUUk9ORz4KKyAgICAgICAgICAgIFNldCBleGl0IGNvZGUgdG8gaW5kaWNhdGUgaWYgdGhlIGN1cnJlbnQgdGVybWluYWwgIGlzCisgICAgICAgICAgICBhIGhhcmQgY29weSB0ZXJtaW5hbC4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmN1cDwvU1RST05HPiA8U1RST05HPjIzPC9TVFJPTkc+IDxTVFJPTkc+NDwvU1RST05HPgorICAgICAgICAgICAgU2VuZCAgdGhlIHNlcXVlbmNlIHRvIG1vdmUgdGhlIGN1cnNvciB0byByb3cgMjMsIGNvbC0KKyAgICAgICAgICAgIHVtbiA0LgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+Y3VwPC9TVFJPTkc+CisgICAgICAgICAgICBTZW5kIHRoZSB0ZXJtaW5mbyBzdHJpbmcgZm9yIGN1cnNvci1tb3ZlbWVudCwgd2l0aCBubworICAgICAgICAgICAgcGFyYW1ldGVycyBzdWJzdGl0dXRlZC4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+CisgICAgICAgICAgICBQcmludCAgdGhlICBsb25nICBuYW1lIGZyb20gdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZGF0YWJhc2UgZm9yCisgICAgICAgICAgICB0aGUgdHlwZSBvZiB0ZXJtaW5hbCBzcGVjaWZpZWQgaW4gIHRoZSAgZW52aXJvbm1lbnRhbAorICAgICAgICAgICAgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+LgorCisgICAgICAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz4tUzwvU1RST05HPiA8U1RST05HPiZsdDsmbHQ7ITwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz4mZ3Q7PC9TVFJPTkc+IDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+Jmd0OzwvU1RST05HPiA8U1RST05HPmN1cDwvU1RST05HPiA8U1RST05HPjEwPC9TVFJPTkc+IDxTVFJPTkc+MTA8L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+Jmd0OzwvU1RST05HPiA8U1RST05HPmJvbGQ8L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+Jmd0OzwvU1RST05HPiA8U1RST05HPiE8L1NUUk9ORz4KKworICAgICAgICAgICAgVGhpcyAgZXhhbXBsZSBzaG93cyA8U1RST05HPnRwdXQ8L1NUUk9ORz4gcHJvY2Vzc2luZyBzZXZlcmFsIGNhcGFiaWxpLQorICAgICAgICAgICAgdGllcyBpbiBvbmUgaW52b2NhdGlvbi4gIEl0IGNsZWFycyB0aGUgc2NyZWVuLCAgbW92ZXMKKyAgICAgICAgICAgIHRoZSAgY3Vyc29yICB0byAgcG9zaXRpb24gIDEwLCAgMTAgIGFuZCB0dXJucyBvbiBib2xkCisgICAgICAgICAgICAoZXh0cmEgYnJpZ2h0KSBtb2RlLiAgVGhlIGxpc3QgaXMgIHRlcm1pbmF0ZWQgIGJ5ICBhbgorICAgICAgICAgICAgZXhjbGFtYXRpb24gbWFyayAoPFNUUk9ORz4hPC9TVFJPTkc+KSBvbiBhIGxpbmUgYnkgaXRzZWxmLgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPgorICAgICAgICAgICAgICBjb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZQorCisgICAgICAgPFNUUk9ORz4vdXNyL3NoYXJlL3RhYnNldC8qPC9TVFJPTkc+CisgICAgICAgICAgICAgIHRhYiBzZXR0aW5ncyBmb3Igc29tZSB0ZXJtaW5hbHMsIGluIGEgZm9ybWF0IGFwcHJvLQorICAgICAgICAgICAgICBwcmlhdGUgIHRvICBiZSAgb3V0cHV0ICB0byAgdGhlICB0ZXJtaW5hbCAgIChlc2NhcGUKKyAgICAgICAgICAgICAgc2VxdWVuY2VzICB0aGF0ICBzZXQgIG1hcmdpbnMgIGFuZCAgdGFicyk7IGZvciBtb3JlCisgICAgICAgICAgICAgIGluZm9ybWF0aW9uLCBzZWUgdGhlICJUYWJzIGFuZCBJbml0aWFsaXphdGlvbiIgc2VjLQorICAgICAgICAgICAgICB0aW9uIG9mIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5FWElUIENPREVTPC9IMj48UFJFPgorICAgICAgIElmIHRoZSA8U1RST05HPi1TPC9TVFJPTkc+IG9wdGlvbiBpcyB1c2VkLCA8U1RST05HPnRwdXQ8L1NUUk9ORz4gY2hlY2tzIGZvciBlcnJvcnMgZnJvbSBlYWNoCisgICAgICAgbGluZSwgYW5kIGlmIGFueSBlcnJvcnMgYXJlIGZvdW5kLCB3aWxsIHNldCB0aGUgZXhpdCAgY29kZQorICAgICAgIHRvICA0ICBwbHVzIHRoZSBudW1iZXIgb2YgbGluZXMgd2l0aCBlcnJvcnMuICBJZiBubyBlcnJvcnMKKyAgICAgICBhcmUgZm91bmQsIHRoZSBleGl0IGNvZGUgaXMgPFNUUk9ORz4wPC9TVFJPTkc+LiAgIE5vICBpbmRpY2F0aW9uICBvZiAgd2hpY2gKKyAgICAgICBsaW5lIGZhaWxlZCBjYW4gYmUgZ2l2ZW4gc28gZXhpdCBjb2RlIDxTVFJPTkc+MTwvU1RST05HPiB3aWxsIG5ldmVyIGFwcGVhci4KKyAgICAgICBFeGl0IGNvZGVzIDxTVFJPTkc+MjwvU1RST05HPiwgPFNUUk9ORz4zPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz40PC9TVFJPTkc+IHJldGFpbiB0aGVpciB1c3VhbCAgaW50ZXJwcmV0YXRpb24uCisgICAgICAgSWYgdGhlIDxTVFJPTkc+LVM8L1NUUk9ORz4gb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgZXhpdCBjb2RlIGRlcGVuZHMgb24gdGhlCisgICAgICAgdHlwZSBvZiA8RU0+Y2FwbmFtZTwvRU0+OgorCisgICAgICAgICAgICA8RU0+Ym9vbGVhbjwvRU0+CisgICAgICAgICAgICAgICAgICAgYSB2YWx1ZSBvZiA8U1RST05HPjA8L1NUUk9ORz4gaXMgc2V0IGZvciBUUlVFIGFuZCA8U1RST05HPjE8L1NUUk9ORz4gZm9yICBGQUxTRS4KKworICAgICAgICAgICAgPEVNPnN0cmluZzwvRU0+IGEgIHZhbHVlIG9mIDxTVFJPTkc+MDwvU1RST05HPiBpcyBzZXQgaWYgdGhlIDxFTT5jYXBuYW1lPC9FTT4gaXMgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHRlcm1pbmFsIDxFTT50eXBlPC9FTT4gKHRoZSB2YWx1ZSAgb2YgIDxFTT5jYXBuYW1lPC9FTT4KKyAgICAgICAgICAgICAgICAgICBpcyAgcmV0dXJuZWQgb24gc3RhbmRhcmQgb3V0cHV0KTsgYSB2YWx1ZSBvZiA8U1RST05HPjE8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICBpcyBzZXQgaWYgPEVNPmNhcG5hbWU8L0VNPiBpcyBub3QgZGVmaW5lZCBmb3IgdGhpcyB0ZXItCisgICAgICAgICAgICAgICAgICAgbWluYWwgIDxFTT50eXBlPC9FTT4gIChub3RoaW5nICBpcyAgd3JpdHRlbiB0byBzdGFuZGFyZAorICAgICAgICAgICAgICAgICAgIG91dHB1dCkuCisKKyAgICAgICAgICAgIDxFTT5pbnRlZ2VyPC9FTT4KKyAgICAgICAgICAgICAgICAgICBhIHZhbHVlIG9mIDxTVFJPTkc+MDwvU1RST05HPiBpcyBhbHdheXMgIHNldCwgIHdoZXRoZXIgIG9yICBub3QKKyAgICAgICAgICAgICAgICAgICA8RU0+Y2FwbmFtZTwvRU0+IGlzIGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwgPEVNPnR5cGU8L0VNPi4gIFRvCisgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIGlmIDxFTT5jYXBuYW1lPC9FTT4gaXMgZGVmaW5lZCBmb3IgdGhpcyAgdGVyLQorICAgICAgICAgICAgICAgICAgIG1pbmFsIDxFTT50eXBlPC9FTT4sIHRoZSB1c2VyIG11c3QgdGVzdCB0aGUgdmFsdWUgd3JpdC0KKyAgICAgICAgICAgICAgICAgICB0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0LiAgQSB2YWx1ZSBvZiAgPFNUUk9ORz4tMTwvU1RST05HPiAgbWVhbnMKKyAgICAgICAgICAgICAgICAgICB0aGF0ICA8RU0+Y2FwbmFtZTwvRU0+IGlzIG5vdCBkZWZpbmVkIGZvciB0aGlzIHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgPEVNPnR5cGU8L0VNPi4KKworICAgICAgICAgICAgPEVNPm90aGVyPC9FTT4gIDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4gb3IgPFNUUk9ORz5pbml0PC9TVFJPTkc+IG1heSBmYWlsIHRvIGZpbmQgIHRoZWlyICByZXNwZWMtCisgICAgICAgICAgICAgICAgICAgdGl2ZSAgZmlsZXMuICAgSW4gIHRoYXQgY2FzZSwgdGhlIGV4aXQgY29kZSBpcworICAgICAgICAgICAgICAgICAgIHNldCB0byA0ICsgPFNUUk9ORz5lcnJubzwvU1RST05HPi4KKworICAgICAgIEFueSBvdGhlciBleGl0IGNvZGUgaW5kaWNhdGVzIGFuIGVycm9yOyBzZWUgIHRoZSAgRElBR05PUy0KKyAgICAgICBUSUNTIHNlY3Rpb24uCisKKworPC9QUkU+Cis8SDI+RElBR05PU1RJQ1M8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IHByaW50cyB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2VzIGFuZCBzZXRzIHRoZSBjb3ItCisgICAgICAgcmVzcG9uZGluZyBleGl0IGNvZGVzLgorCisKKyAgICAgICBleGl0IGNvZGUgICBlcnJvciBtZXNzYWdlCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgPFNUUk9ORz4wPC9TVFJPTkc+ICAgICAgICAgICAoPEVNPmNhcG5hbWU8L0VNPiBpcyBhIG51bWVyaWMgdmFyaWFibGUgdGhhdCBpcyBub3Qgc3BlY2lmaWVkICBpbgorICAgICAgICAgICAgICAgICAgIHRoZSAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPiAgZGF0YWJhc2UgIGZvciB0aGlzIHRlcm1pbmFsIHR5cGUsIGUuZy4KKyAgICAgICAgICAgICAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz4tVDQ1MDwvU1RST05HPiA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGFuZCA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz4tVDI2MjE8L1NUUk9ORz4gPFNUUk9ORz54bWM8L1NUUk9ORz4pCisgICAgICAgPFNUUk9ORz4xPC9TVFJPTkc+ICAgICAgICAgICBubyBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQsIHNlZSB0aGUgPFNUUk9ORz5FWElUPC9TVFJPTkc+IDxTVFJPTkc+Q09ERVM8L1NUUk9ORz4gc2VjdGlvbi4KKyAgICAgICA8U1RST05HPjI8L1NUUk9ORz4gICAgICAgICAgIHVzYWdlIGVycm9yCisgICAgICAgPFNUUk9ORz4zPC9TVFJPTkc+ICAgICAgICAgICB1bmtub3duIHRlcm1pbmFsIDxFTT50eXBlPC9FTT4gb3Igbm8gPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZQorICAgICAgIDxTVFJPTkc+NDwvU1RST05HPiAgICAgICAgICAgdW5rbm93biA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGNhcGFiaWxpdHkgPEVNPmNhcG5hbWU8L0VNPgorICAgICAgIDxTVFJPTkc+Jmd0OzQ8L1NUUk9ORz4gICAgICAgICAgZXJyb3Igb2NjdXJyZWQgaW4gLVMKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5sb25nbmFtZTwvU1RST05HPiBhbmQgPFNUUk9ORz4tUzwvU1RST05HPiBvcHRpb25zLCBhbmQgIHRoZSAgcGFyYW1ldGVyLXN1YnN0aXR1LQorICAgICAgIHRpb24gIGZlYXR1cmVzICB1c2VkIGluIHRoZSA8U1RST05HPmN1cDwvU1RST05HPiBleGFtcGxlLCBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgIGluIEJTRCBjdXJzZXMgb3IgaW4gQVQmYW1wO1QvVVNMIGN1cnNlcyBiZWZvcmUgU1ZyNC4KKworICAgICAgIFgvT3BlbiBkb2N1bWVudHMgb25seSB0aGUgb3BlcmFuZHMgIGZvciAgPFNUUk9ORz5jbGVhcjwvU1RST05HPiwgIDxTVFJPTkc+aW5pdDwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5yZXNldDwvU1RST05HPi4gICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCA8U1RST05HPmNsZWFyPC9TVFJPTkc+IGlzIHBhcnQgb2YgdGhlIDxFTT5jYXAtPC9FTT4KKyAgICAgICA8RU0+bmFtZTwvRU0+IHN1cHBvcnQuICBPdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgPFNUUk9ORz50cHV0PC9TVFJPTkc+IG9uIFNWcjQtYmFzZWQKKyAgICAgICBzeXN0ZW1zIHN1Y2ggYXMgU29sYXJpcywgSVJJWDY0IGFuZCBIUFVYIGFzIHdlbGwgYXMgb3RoZXJzCisgICAgICAgc3VjaCAgYXMgIEFJWCAgYW5kICBUcnU2NCAgcHJvdmlkZSAgc3VwcG9ydCAgZm9yICAgPEVNPmNhcG5hbWU8L0VNPgorICAgICAgIG9wZXJhbmRzLiAgQSBmZXcgcGxhdGZvcm1zIHN1Y2ggYXMgRnJlZUJTRCBhbmQgTmV0QlNEIHJlYy0KKyAgICAgICBvZ25pemUgdGVybWNhcCBuYW1lcyByYXRoZXIgdGhhbiB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWVzCisgICAgICAgaW4gdGhlaXIgcmVzcGVjdGl2ZSA8U1RST05HPnRwdXQ8L1NUUk9ORz4gY29tbWFuZHMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjbGVhci4xLmh0bWwiPmNsZWFyKDEpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJzdHR5LjEuaHRtbCI+c3R0eSgxKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGFicy4xLmh0bWwiPnRhYnMoMSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0cHV0LjEuaHRtbCI+dHB1dCgxKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbWFuL3RzZXQuMS5odG1sIGIvZG9jL2h0bWwvbWFuL3RzZXQuMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWZkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9tYW4vdHNldC4xLmh0bWwKQEAgLTAsMCArMSwzMzMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogdHNldC4xLHYgMS4xOSAyMDA2LzEyLzI0IDE1OjAwOjMwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnRzZXQgMTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPnRzZXQgMTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0idHNldC4xLmh0bWwiPnRzZXQoMSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0c2V0LjEuaHRtbCI+dHNldCgxKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRzZXQ8L1NUUk9ORz4sIDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4gLSB0ZXJtaW5hbCBpbml0aWFsaXphdGlvbgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dHNldDwvU1RST05HPiAgWzxTVFJPTkc+LUlRVmNxcnN3PC9TVFJPTkc+XSBbPFNUUk9ORz4tPC9TVFJPTkc+XSBbPFNUUk9ORz4tZTwvU1RST05HPiA8RU0+Y2g8L0VNPl0gWzxTVFJPTkc+LWk8L1NUUk9ORz4gPEVNPmNoPC9FTT5dIFs8U1RST05HPi1rPC9TVFJPTkc+IDxFTT5jaDwvRU0+XSBbPFNUUk9ORz4tbTwvU1RST05HPiA8RU0+bWFwcGluZzwvRU0+XQorICAgICAgIFs8RU0+dGVybWluYWw8L0VNPl0KKyAgICAgICA8U1RST05HPnJlc2V0PC9TVFJPTkc+IFs8U1RST05HPi1JUVZjcXJzdzwvU1RST05HPl0gWzxTVFJPTkc+LTwvU1RST05HPl0gWzxTVFJPTkc+LWU8L1NUUk9ORz4gPEVNPmNoPC9FTT5dIFs8U1RST05HPi1pPC9TVFJPTkc+IDxFTT5jaDwvRU0+XSBbPFNUUk9ORz4tazwvU1RST05HPiA8RU0+Y2g8L0VNPl0gWzxTVFJPTkc+LW08L1NUUk9ORz4gPEVNPm1hcHBpbmc8L0VNPl0KKyAgICAgICBbPEVNPnRlcm1pbmFsPC9FTT5dCisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5Uc2V0PC9TVFJPTkc+ICBpbml0aWFsaXplcyAgdGVybWluYWxzLiAgIDxTVFJPTkc+VHNldDwvU1RST05HPiAgZmlyc3QgZGV0ZXJtaW5lcyB0aGUKKyAgICAgICB0eXBlIG9mIHRlcm1pbmFsIHRoYXQgeW91IGFyZSB1c2luZy4gICBUaGlzICBkZXRlcm1pbmF0aW9uCisgICAgICAgaXMgZG9uZSBhcyBmb2xsb3dzLCB1c2luZyB0aGUgZmlyc3QgdGVybWluYWwgdHlwZSBmb3VuZC4KKworICAgICAgIDEuIFRoZSA8U1RST05HPnRlcm1pbmFsPC9TVFJPTkc+IGFyZ3VtZW50IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgICAgMi4gVGhlIHZhbHVlIG9mIHRoZSA8U1RST05HPlRFUk08L1NUUk9ORz4gZW52aXJvbm1lbnRhbCB2YXJpYWJsZS4KKworICAgICAgIDMuICAoQlNEICBzeXN0ZW1zIG9ubHkuKSBUaGUgdGVybWluYWwgdHlwZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGRldmljZSBpbiAgdGhlICA8RU0+L2V0Yy90dHlzPC9FTT4gIGZpbGUuCisgICAgICAgKE9uIExpbnV4IGFuZCBTeXN0ZW0tVi1saWtlIFVOSVhlcywgPEVNPmdldHR5PC9FTT4gZG9lcyB0aGlzIGpvYiBieQorICAgICAgIHNldHRpbmcgPFNUUk9ORz5URVJNPC9TVFJPTkc+ICBhY2NvcmRpbmcgIHRvICB0aGUgIHR5cGUgIHBhc3NlZCAgdG8gIGl0ICBieQorICAgICAgIDxFTT4vZXRjL2luaXR0YWI8L0VNPi4pCisKKyAgICAgICA0LiBUaGUgZGVmYXVsdCB0ZXJtaW5hbCB0eXBlLCBgYHVua25vd24nJy4KKworICAgICAgIElmICB0aGUgIHRlcm1pbmFsICB0eXBlICB3YXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC0KKyAgICAgICBsaW5lLCB0aGUgPFNUUk9ORz4tbTwvU1RST05HPiBvcHRpb24gbWFwcGluZ3MgYXJlICB0aGVuICBhcHBsaWVkICAoc2VlICB0aGUKKyAgICAgICBzZWN0aW9uICA8U1RST05HPlRFUk1JTkFMPC9TVFJPTkc+ICA8U1RST05HPlRZUEU8L1NUUk9ORz4gIDxTVFJPTkc+TUFQUElORzwvU1RST05HPiAgZm9yICBtb3JlICBpbmZvcm1hdGlvbikuCisgICAgICAgVGhlbiwgaWYgdGhlIHRlcm1pbmFsIHR5cGUgYmVnaW5zICB3aXRoICBhICBxdWVzdGlvbiAgbWFyaworICAgICAgIChgYD8nJyksIHRoZSB1c2VyIGlzIHByb21wdGVkIGZvciBjb25maXJtYXRpb24gb2YgdGhlIHRlci0KKyAgICAgICBtaW5hbCB0eXBlLiAgQW4gZW1wdHkgIHJlc3BvbnNlICBjb25maXJtcyAgdGhlICB0eXBlLCAgb3IsCisgICAgICAgYW5vdGhlciAgdHlwZSAgY2FuIGJlIGVudGVyZWQgdG8gc3BlY2lmeSBhIG5ldyB0eXBlLiAgT25jZQorICAgICAgIHRoZSB0ZXJtaW5hbCB0eXBlIGhhcyBiZWVuIGRldGVybWluZWQsIHRoZSB0ZXJtaW5mbyAgZW50cnkKKyAgICAgICBmb3IgIHRoZSAgdGVybWluYWwgIGlzIHJldHJpZXZlZC4gIElmIG5vIHRlcm1pbmZvIGVudHJ5IGlzCisgICAgICAgZm91bmQgZm9yIHRoZSB0eXBlLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBmb3IgYW5vdGhlciAgdGVyLQorICAgICAgIG1pbmFsIHR5cGUuCisKKyAgICAgICBPbmNlICB0aGUgIHRlcm1pbmZvICBlbnRyeSAgaXMgcmV0cmlldmVkLCB0aGUgd2luZG93IHNpemUsCisgICAgICAgYmFja3NwYWNlLCBpbnRlcnJ1cHQgYW5kIGxpbmUga2lsbCBjaGFyYWN0ZXJzIChhbW9uZyAgbWFueQorICAgICAgIG90aGVyIHRoaW5ncykgYXJlIHNldCBhbmQgdGhlIHRlcm1pbmFsIGFuZCB0YWIgaW5pdGlhbGl6YS0KKyAgICAgICB0aW9uIHN0cmluZ3MgIGFyZSAgc2VudCAgdG8gIHRoZSAgc3RhbmRhcmQgIGVycm9yICBvdXRwdXQuCisgICAgICAgRmluYWxseSwgIGlmIHRoZSBlcmFzZSwgaW50ZXJydXB0IGFuZCBsaW5lIGtpbGwgY2hhcmFjdGVycworICAgICAgIGhhdmUgY2hhbmdlZCwgb3IgYXJlIG5vdCAgc2V0ICB0byAgdGhlaXIgIGRlZmF1bHQgIHZhbHVlcywKKyAgICAgICB0aGVpciAgdmFsdWVzICBhcmUgZGlzcGxheWVkIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQuCisgICAgICAgVXNlIHRoZSA8U1RST05HPi1jPC9TVFJPTkc+IG9yIDxTVFJPTkc+LXc8L1NUUk9ORz4gb3B0aW9uIHRvIHNlbGVjdCBvbmx5IHRoZSAgd2luZG93ICBzaXppbmcKKyAgICAgICB2ZXJzdXMgIHRoZSAgb3RoZXIgIGluaXRpYWxpemF0aW9uLiAgIElmIG5laXRoZXIgb3B0aW9uIGlzCisgICAgICAgZ2l2ZW4sIGJvdGggYXJlIGFzc3VtZWQuCisKKyAgICAgICBXaGVuIGludm9rZWQgYXMgPFNUUk9ORz5yZXNldDwvU1RST05HPiwgPFNUUk9ORz50c2V0PC9TVFJPTkc+IHNldHMgY29va2VkICBhbmQgIGVjaG8gIG1vZGVzLAorICAgICAgIHR1cm5zICBvZmYgY2JyZWFrIGFuZCByYXcgbW9kZXMsIHR1cm5zIG9uIG5ld2xpbmUgdHJhbnNsYS0KKyAgICAgICB0aW9uIGFuZCByZXNldHMgYW55ICB1bnNldCAgc3BlY2lhbCAgY2hhcmFjdGVycyAgdG8gIHRoZWlyCisgICAgICAgZGVmYXVsdCAgdmFsdWVzICBiZWZvcmUgIGRvaW5nIHRoZSB0ZXJtaW5hbCBpbml0aWFsaXphdGlvbgorICAgICAgIGRlc2NyaWJlZCBhYm92ZS4gIFRoaXMgaXMgIHVzZWZ1bCAgYWZ0ZXIgIGEgIHByb2dyYW0gIGRpZXMKKyAgICAgICBsZWF2aW5nICBhICB0ZXJtaW5hbCAgaW4gYW4gYWJub3JtYWwgc3RhdGUuICBOb3RlLCB5b3UgbWF5CisgICAgICAgaGF2ZSB0byB0eXBlCisKKyAgICAgICAgICAgPFNUUk9ORz4mbHQ7TEYmZ3Q7cmVzZXQmbHQ7TEYmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICAodGhlIGxpbmUtZmVlZCBjaGFyYWN0ZXIgaXMgbm9ybWFsbHkgY29udHJvbC1KKSB0byBnZXQgdGhlCisgICAgICAgdGVybWluYWwgdG8gd29yaywgYXMgY2FycmlhZ2UtcmV0dXJuIG1heSBubyBsb25nZXIgd29yayBpbgorICAgICAgIHRoZSBhYm5vcm1hbCBzdGF0ZS4gIEFsc28sIHRoZSAgdGVybWluYWwgIHdpbGwgIG9mdGVuICBub3QKKyAgICAgICBlY2hvIHRoZSBjb21tYW5kLgorCisgICAgICAgVGhlIG9wdGlvbnMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICA8U1RST05HPi1jPC9TVFJPTkc+ICAgU2V0ICBjb250cm9sICBjaGFyYWN0ZXJzIGFuZCBtb2Rlcy4gIDxTVFJPTkc+LWU8L1NUUk9ORz4gU2V0IHRoZSBlcmFzZQorICAgICAgICAgICAgY2hhcmFjdGVyIHRvIDxFTT5jaDwvRU0+LgorCisgICAgICAgPFNUUk9ORz4tSTwvU1RST05HPiAgIERvICBub3QgIHNlbmQgIHRoZSAgdGVybWluYWwgIG9yICB0YWIgIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICBzdHJpbmdzIHRvIHRoZSB0ZXJtaW5hbC4KKworICAgICAgIDxTVFJPTkc+LWk8L1NUUk9ORz4gICBTZXQgdGhlIGludGVycnVwdCBjaGFyYWN0ZXIgdG8gPEVNPmNoPC9FTT4uCisKKyAgICAgICA8U1RST05HPi1rPC9TVFJPTkc+ICAgU2V0IHRoZSBsaW5lIGtpbGwgY2hhcmFjdGVyIHRvIDxFTT5jaDwvRU0+LgorCisgICAgICAgPFNUUk9ORz4tbTwvU1RST05HPiAgIFNwZWNpZnkgIGEgIG1hcHBpbmcgIGZyb20gIGEgcG9ydCB0eXBlIHRvIGEgdGVybWluYWwuCisgICAgICAgICAgICBTZWUgdGhlIHNlY3Rpb24gPFNUUk9ORz5URVJNSU5BTDwvU1RST05HPiA8U1RST05HPlRZUEU8L1NUUk9ORz4gPFNUUk9ORz5NQVBQSU5HPC9TVFJPTkc+IGZvciBtb3JlIGluZm9yLQorICAgICAgICAgICAgbWF0aW9uLgorCisgICAgICAgPFNUUk9ORz4tUTwvU1RST05HPiAgIERvICBub3QgIGRpc3BsYXkgIGFueSB2YWx1ZXMgZm9yIHRoZSBlcmFzZSwgaW50ZXJydXB0CisgICAgICAgICAgICBhbmQgbGluZSBraWxsIGNoYXJhY3RlcnMuICBOb3JtYWxseSA8U1RST05HPnRzZXQ8L1NUUk9ORz4gZGlzcGxheXMgdGhlCisgICAgICAgICAgICB2YWx1ZXMgIGZvciAgY29udHJvbCBjaGFyYWN0ZXJzIHdoaWNoIGRpZmZlciBmcm9tIHRoZQorICAgICAgICAgICAgc3lzdGVtJ3MgZGVmYXVsdCB2YWx1ZXMuCisKKyAgICAgICA8U1RST05HPi1xPC9TVFJPTkc+ICAgVGhlIHRlcm1pbmFsIHR5cGUgaXMgZGlzcGxheWVkIHRvIHRoZSAgc3RhbmRhcmQgIG91dC0KKyAgICAgICAgICAgIHB1dCwgIGFuZCB0aGUgdGVybWluYWwgaXMgbm90IGluaXRpYWxpemVkIGluIGFueSB3YXkuCisgICAgICAgICAgICBUaGUgb3B0aW9uIGAtJyBieSBpdHNlbGYgaXMgZXF1aXZhbGVudCBidXQgYXJjaGFpYy4KKworICAgICAgIDxTVFJPTkc+LXI8L1NUUk9ORz4gICBQcmludCB0aGUgdGVybWluYWwgdHlwZSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LgorCisgICAgICAgPFNUUk9ORz4tczwvU1RST05HPiAgIFByaW50ICB0aGUgIHNlcXVlbmNlICBvZiBzaGVsbCBjb21tYW5kcyB0byBpbml0aWFsaXplCisgICAgICAgICAgICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisgICAgICAgICAgICBTZWUgIHRoZSBzZWN0aW9uIDxTVFJPTkc+U0VUVElORzwvU1RST05HPiA8U1RST05HPlRIRTwvU1RST05HPiA8U1RST05HPkVOVklST05NRU5UPC9TVFJPTkc+IGZvciBkZXRhaWxzLgorCisgICAgICAgPFNUUk9ORz4tVjwvU1RST05HPiAgIHJlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCB3YXMgdXNlZCBpbiB0aGlzCisgICAgICAgICAgICBwcm9ncmFtLCBhbmQgZXhpdHMuCisKKyAgICAgICA8U1RST05HPi13PC9TVFJPTkc+ICAgUmVzaXplICB0aGUgIHdpbmRvdyAgdG8gIG1hdGNoICB0aGUgIHNpemUgZGVkdWNlZCB2aWEKKyAgICAgICAgICAgIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+LiAgIE5vcm1hbGx5ICB0aGlzICBoYXMgIG5vICBlZmZlY3QsICB1bmxlc3MKKyAgICAgICAgICAgIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+IGlzIG5vdCBhYmxlIHRvIGRldGVjdCB0aGUgd2luZG93IHNpemUuCisKKyAgICAgICBUaGUgYXJndW1lbnRzIGZvciB0aGUgPFNUUk9ORz4tZTwvU1RST05HPiwgPFNUUk9ORz4taTwvU1RST05HPiwgYW5kIDxTVFJPTkc+LWs8L1NUUk9ORz4gb3B0aW9ucyBtYXkgZWl0aGVyIGJlCisgICAgICAgZW50ZXJlZCBhcyBhY3R1YWwgY2hhcmFjdGVycyBvciBieSB1c2luZyB0aGUgIGBoYXQnICBub3RhLQorICAgICAgIHRpb24sIGkuZS4gY29udHJvbC1oIG1heSBiZSBzcGVjaWZpZWQgYXMgYGBeSCcnIG9yIGBgXmgnJy4KKworCis8L1BSRT4KKzxIMj5TRVRUSU5HIFRIRSBFTlZJUk9OTUVOVDwvSDI+PFBSRT4KKyAgICAgICBJdCBpcyBvZnRlbiBkZXNpcmFibGUgIHRvICBlbnRlciAgdGhlICB0ZXJtaW5hbCAgdHlwZSAgYW5kCisgICAgICAgaW5mb3JtYXRpb24gIGFib3V0ICB0aGUgIHRlcm1pbmFsJ3MgIGNhcGFiaWxpdGllcyBpbnRvIHRoZQorICAgICAgIHNoZWxsJ3MgZW52aXJvbm1lbnQuICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIDxTVFJPTkc+LXM8L1NUUk9ORz4gb3B0aW9uLgorCisgICAgICAgV2hlbiB0aGUgPFNUUk9ORz4tczwvU1RST05HPiBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZHMgdG8gZW50ZXIgdGhlCisgICAgICAgaW5mb3JtYXRpb24gIGludG8gIHRoZSAgc2hlbGwncyBlbnZpcm9ubWVudCBhcmUgd3JpdHRlbiB0bworICAgICAgIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBJZiB0aGUgPFNUUk9ORz5TSEVMTDwvU1RST05HPiBlbnZpcm9ubWVudGFsICB2YXJpYWJsZQorICAgICAgIGVuZHMgaW4gYGBjc2gnJywgdGhlIGNvbW1hbmRzIGFyZSBmb3IgPFNUUk9ORz5jc2g8L1NUUk9ORz4sIG90aGVyd2lzZSwgdGhleQorICAgICAgIGFyZSBmb3IgPFNUUk9ORz5zaDwvU1RST05HPi4gIE5vdGUsIHRoZSA8U1RST05HPmNzaDwvU1RST05HPiAgY29tbWFuZHMgIHNldCAgYW5kICB1bnNldCAgdGhlCisgICAgICAgc2hlbGwgIHZhcmlhYmxlICA8U1RST05HPm5vZ2xvYjwvU1RST05HPiwgIGxlYXZpbmcgaXQgdW5zZXQuICBUaGUgZm9sbG93aW5nCisgICAgICAgbGluZSBpbiB0aGUgPFNUUk9ORz4ubG9naW48L1NUUk9ORz4gb3IgPFNUUk9ORz4ucHJvZmlsZTwvU1RST05HPiBmaWxlcyB3aWxsICBpbml0aWFsaXplICB0aGUKKyAgICAgICBlbnZpcm9ubWVudCBjb3JyZWN0bHk6CisKKyAgICAgICAgICAgZXZhbCBgdHNldCAtcyBvcHRpb25zIC4uLiBgCisKKworPC9QUkU+Cis8SDI+VEVSTUlOQUwgVFlQRSBNQVBQSU5HPC9IMj48UFJFPgorICAgICAgIFdoZW4gdGhlIHRlcm1pbmFsIGlzIG5vdCBoYXJkd2lyZWQgaW50byB0aGUgc3lzdGVtIChvciB0aGUKKyAgICAgICBjdXJyZW50IHN5c3RlbSBpbmZvcm1hdGlvbiBpcyBpbmNvcnJlY3QpIHRoZSB0ZXJtaW5hbCB0eXBlCisgICAgICAgZGVyaXZlZCAgZnJvbSB0aGUgPEVNPi9ldGMvdHR5czwvRU0+IGZpbGUgb3IgdGhlIDxTVFJPTkc+VEVSTTwvU1RST05HPiBlbnZpcm9ubWVudGFsCisgICAgICAgdmFyaWFibGUgaXMgb2Z0ZW4gc29tZXRoaW5nIGdlbmVyaWMgbGlrZSA8U1RST05HPm5ldHdvcms8L1NUUk9ORz4sICA8U1RST05HPmRpYWx1cDwvU1RST05HPiwKKyAgICAgICBvciAgPFNUUk9ORz51bmtub3duPC9TVFJPTkc+LiAgIFdoZW4gPFNUUk9ORz50c2V0PC9TVFJPTkc+IGlzIHVzZWQgaW4gYSBzdGFydHVwIHNjcmlwdCBpdCBpcworICAgICAgIG9mdGVuIGRlc2lyYWJsZSB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSAgdHlwZSAgb2YKKyAgICAgICB0ZXJtaW5hbCB1c2VkIG9uIHN1Y2ggcG9ydHMuCisKKyAgICAgICBUaGUgIHB1cnBvc2UgIG9mICB0aGUgPFNUUk9ORz4tbTwvU1RST05HPiBvcHRpb24gaXMgdG8gbWFwIGZyb20gc29tZSBzZXQgb2YKKyAgICAgICBjb25kaXRpb25zIHRvIGEgdGVybWluYWwgdHlwZSwgdGhhdCBpcywgdG8gdGVsbCA8U1RST05HPnRzZXQ8L1NUUk9ORz4gIGBgSWYKKyAgICAgICBJJ20gIG9uIHRoaXMgcG9ydCBhdCBhIHBhcnRpY3VsYXIgc3BlZWQsIGd1ZXNzIHRoYXQgSSdtIG9uCisgICAgICAgdGhhdCBraW5kIG9mIHRlcm1pbmFsJycuCisKKyAgICAgICBUaGUgYXJndW1lbnQgdG8gdGhlIDxTVFJPTkc+LW08L1NUUk9ORz4gb3B0aW9uIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIHBvcnQKKyAgICAgICB0eXBlLCBhbiBvcHRpb25hbCBvcGVyYXRvciwgYW4gb3B0aW9uYWwgYmF1ZCByYXRlIHNwZWNpZmktCisgICAgICAgY2F0aW9uLCBhbiBvcHRpb25hbCBjb2xvbiAoYGA6JycpIGNoYXJhY3RlciBhbmQgYSB0ZXJtaW5hbAorICAgICAgIHR5cGUuICAgVGhlIHBvcnQgdHlwZSBpcyBhIHN0cmluZyAoZGVsaW1pdGVkIGJ5IGVpdGhlciB0aGUKKyAgICAgICBvcGVyYXRvciBvciB0aGUgY29sb24gY2hhcmFjdGVyKS4gIFRoZSBvcGVyYXRvciBtYXkgYmUgYW55CisgICAgICAgY29tYmluYXRpb24gb2YgYGAmZ3Q7JycsIGBgJmx0OycnLCBgYEAnJywgYW5kIGBgIScnOyBgYCZndDsnJyBtZWFucworICAgICAgIGdyZWF0ZXIgdGhhbiwgYGAmbHQ7JycgbWVhbnMgbGVzcyB0aGFuLCBgYEAnJyBtZWFucyBlcXVhbCAgdG8KKyAgICAgICBhbmQgYGAhJycgaW52ZXJ0cyB0aGUgc2Vuc2Ugb2YgdGhlIHRlc3QuICBUaGUgYmF1ZCByYXRlIGlzCisgICAgICAgc3BlY2lmaWVkIGFzIGEgbnVtYmVyIGFuZCBpcyBjb21wYXJlZCB3aXRoICB0aGUgIHNwZWVkICBvZgorICAgICAgIHRoZSAgc3RhbmRhcmQgIGVycm9yICBvdXRwdXQgICh3aGljaCBzaG91bGQgYmUgdGhlIGNvbnRyb2wKKyAgICAgICB0ZXJtaW5hbCkuICBUaGUgdGVybWluYWwgdHlwZSBpcyBhIHN0cmluZy4KKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCB0eXBlIGlzIG5vdCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAgICAgICB0aGUgIDxTVFJPTkc+LW08L1NUUk9ORz4gbWFwcGluZ3MgYXJlIGFwcGxpZWQgdG8gdGhlIHRlcm1pbmFsIHR5cGUuICBJZiB0aGUKKyAgICAgICBwb3J0IHR5cGUgYW5kIGJhdWQgcmF0ZSBtYXRjaCB0aGUgIG1hcHBpbmcsICB0aGUgIHRlcm1pbmFsCisgICAgICAgdHlwZSAgc3BlY2lmaWVkICBpbiB0aGUgbWFwcGluZyByZXBsYWNlcyB0aGUgY3VycmVudCB0eXBlLgorICAgICAgIElmIG1vcmUgdGhhbiBvbmUgbWFwcGluZyBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCAgYXBwbGljYS0KKyAgICAgICBibGUgbWFwcGluZyBpcyB1c2VkLgorCisgICAgICAgRm9yICAgIGV4YW1wbGUsICAgIGNvbnNpZGVyICAgIHRoZSAgICBmb2xsb3dpbmcgICBtYXBwaW5nOgorICAgICAgIDxTVFJPTkc+ZGlhbHVwJmd0Ozk2MDA6dnQxMDA8L1NUUk9ORz4uICBUaGUgcG9ydCB0eXBlIGlzIGRpYWx1cCAsIHRoZSBvcGVyYXRvcgorICAgICAgIGlzICAmZ3Q7LCB0aGUgYmF1ZCByYXRlIHNwZWNpZmljYXRpb24gaXMgOTYwMCwgYW5kIHRoZSB0ZXJtaS0KKyAgICAgICBuYWwgdHlwZSBpcyB2dDEwMC4gIFRoZSByZXN1bHQgb2YgdGhpcyBtYXBwaW5nIGlzIHRvIHNwZWMtCisgICAgICAgaWZ5IHRoYXQgaWYgdGhlIHRlcm1pbmFsIHR5cGUgaXMgPFNUUk9ORz5kaWFsdXA8L1NUUk9ORz4sIGFuZCB0aGUgYmF1ZCByYXRlCisgICAgICAgaXMgZ3JlYXRlciB0aGFuIDk2MDAgYmF1ZCwgYSB0ZXJtaW5hbCB0eXBlIG9mICA8U1RST05HPnZ0MTAwPC9TVFJPTkc+ICB3aWxsCisgICAgICAgYmUgdXNlZC4KKworICAgICAgIElmIG5vIGJhdWQgcmF0ZSBpcyBzcGVjaWZpZWQsIHRoZSB0ZXJtaW5hbCB0eXBlIHdpbGwgbWF0Y2gKKyAgICAgICBhbnkgYmF1ZCByYXRlLiAgSWYgbm8gcG9ydCB0eXBlIGlzIHNwZWNpZmllZCwgdGhlIHRlcm1pbmFsCisgICAgICAgdHlwZSAgIHdpbGwgICBtYXRjaCAgIGFueSAgcG9ydCAgdHlwZS4gICBGb3IgIGV4YW1wbGUsICA8U1RST05HPi1tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5kaWFsdXA6dnQxMDA8L1NUUk9ORz4gIDxTVFJPTkc+LW08L1NUUk9ORz4gIDxTVFJPTkc+Oj94dGVybTwvU1RST05HPiAgd2lsbCAgY2F1c2UgIGFueSAgZGlhbHVwICBwb3J0LAorICAgICAgIHJlZ2FyZGxlc3Mgb2YgYmF1ZCByYXRlLCB0byBtYXRjaCB0aGUgdGVybWluYWwgdHlwZSB2dDEwMCwKKyAgICAgICBhbmQgYW55IG5vbi1kaWFsdXAgcG9ydCB0eXBlIHRvIG1hdGNoICB0aGUgIHRlcm1pbmFsICB0eXBlCisgICAgICAgP3h0ZXJtLiAgIE5vdGUsICBiZWNhdXNlIG9mIHRoZSBsZWFkaW5nIHF1ZXN0aW9uIG1hcmssIHRoZQorICAgICAgIHVzZXIgd2lsbCBiZSBxdWVyaWVkIG9uIGEgZGVmYXVsdCBwb3J0IGFzIHRvIHdoZXRoZXIgIHRoZXkKKyAgICAgICBhcmUgYWN0dWFsbHkgdXNpbmcgYW4geHRlcm0gdGVybWluYWwuCisKKyAgICAgICBObyAgd2hpdGVzcGFjZSAgY2hhcmFjdGVycyAgYXJlIHBlcm1pdHRlZCBpbiB0aGUgPFNUUk9ORz4tbTwvU1RST05HPiBvcHRpb24KKyAgICAgICBhcmd1bWVudC4gIEFsc28sIHRvIGF2b2lkIHByb2JsZW1zICB3aXRoICBtZXRhLWNoYXJhY3RlcnMsCisgICAgICAgaXQgIGlzICBzdWdnZXN0ZWQgIHRoYXQgIHRoZSAgZW50aXJlIDxTVFJPTkc+LW08L1NUUk9ORz4gb3B0aW9uIGFyZ3VtZW50IGJlCisgICAgICAgcGxhY2VkIHdpdGhpbiBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycywgYW5kIHRoYXQgPFNUUk9ORz5jc2g8L1NUUk9ORz4gIHVzZXJzCisgICAgICAgaW5zZXJ0ICBhICBiYWNrc2xhc2ggY2hhcmFjdGVyIChgYFwnJykgYmVmb3JlIGFueSBleGNsYW1hLQorICAgICAgIHRpb24gbWFya3MgKGBgIScnKS4KKworCis8L1BSRT4KKzxIMj5ISVNUT1JZPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPnRzZXQ8L1NUUk9ORz4gY29tbWFuZCBhcHBlYXJlZCBpbiBCU0QgMy4wLiAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiAgaW1wbGUtCisgICAgICAgbWVudGF0aW9uICB3YXMgbGlnaHRseSBhZGFwdGVkIGZyb20gdGhlIDQuNEJTRCBzb3VyY2VzIGZvcgorICAgICAgIGEgdGVybWluZm8gZW52aXJvbm1lbnQgYnkgRXJpYyBTLiBSYXltb25kICZsdDtlc3JAc25hcmsudGh5ci0KKyAgICAgICBzdXMuY29tJmd0Oy4KKworCis8L1BSRT4KKzxIMj5DT01QQVRJQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz50c2V0PC9TVFJPTkc+ICB1dGlsaXR5IGhhcyBiZWVuIHByb3ZpZGVkIGZvciBiYWNrd2FyZC1jb21wYXRpLQorICAgICAgIGJpbGl0eSB3aXRoIEJTRCBlbnZpcm9ubWVudHMgKHVuZGVyICBtb3N0ICBtb2Rlcm4gIFVOSVhlcywKKyAgICAgICA8U1RST05HPi9ldGMvaW5pdHRhYjwvU1RST05HPiAgYW5kICA8U1RST05HPjxBIEhSRUY9ImdldHR5LjEuaHRtbCI+Z2V0dHkoMSk8L0E+PC9TVFJPTkc+IGNhbiBzZXQgPFNUUk9ORz5URVJNPC9TVFJPTkc+IGFwcHJvcHJpYXRlbHkgZm9yCisgICAgICAgZWFjaCBkaWFsLXVwIGxpbmU7IHRoaXMgIG9idmlhdGVzICB3aGF0ICB3YXMgIDxTVFJPTkc+dHNldDwvU1RST05HPidzICBtb3N0CisgICAgICAgaW1wb3J0YW50ICB1c2UpLiAgIFRoaXMgaW1wbGVtZW50YXRpb24gYmVoYXZlcyBsaWtlIDQuNEJTRAorICAgICAgIHRzZXQsIHdpdGggYSBmZXcgZXhjZXB0aW9ucyBzcGVjaWZpZWQgaGVyZS4KKworICAgICAgIFRoZSA8U1RST05HPi1TPC9TVFJPTkc+IG9wdGlvbiBvZiBCU0QgdHNldCBubyBsb25nZXIgd29ya3M7ICBpdCAgcHJpbnRzICBhbgorICAgICAgIGVycm9yIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZCBkaWVzLiAgVGhlIDxTVFJPTkc+LXM8L1NUUk9ORz4gb3B0aW9uIG9ubHkgc2V0cworICAgICAgIDxTVFJPTkc+VEVSTTwvU1RST05HPiwgbm90IDxTVFJPTkc+VEVSTUNBUDwvU1RST05HPi4gIEJvdGggdGhlc2UgIGNoYW5nZXMgIGFyZSAgYmVjYXVzZSAgdGhlCisgICAgICAgPFNUUk9ORz5URVJNQ0FQPC9TVFJPTkc+ICB2YXJpYWJsZSAgaXMgIG5vIGxvbmdlciBzdXBwb3J0ZWQgdW5kZXIgdGVybWluZm8tCisgICAgICAgYmFzZWQgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+LCB3aGljaCBtYWtlcyA8U1RST05HPnRzZXQ8L1NUUk9ORz4gPFNUUk9ORz4tUzwvU1RST05HPiB1c2VsZXNzICh3ZSBtYWRlIGl0IGRpZQorICAgICAgIG5vaXNpbHkgcmF0aGVyIHRoYW4gc2lsZW50bHkgaW5kdWNlIGxvc3NhZ2UpLgorCisgICAgICAgVGhlcmUgIHdhcyAgYW4gIHVuZG9jdW1lbnRlZCAgNC40QlNEIGZlYXR1cmUgdGhhdCBpbnZva2luZworICAgICAgIHRzZXQgdmlhIGEgbGluayBuYW1lZCBgVFNFVGAgKG9yIHZpYSBhbnkgb3RoZXIgbmFtZSBiZWdpbi0KKyAgICAgICBuaW5nICB3aXRoICBhbiAgdXBwZXItY2FzZSBsZXR0ZXIpIHNldCB0aGUgdGVybWluYWwgdG8gdXNlCisgICAgICAgdXBwZXItY2FzZSBvbmx5LiAgVGhpcyBmZWF0dXJlIGhhcyBiZWVuIG9taXR0ZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz4tQTwvU1RST05HPiwgPFNUUk9ORz4tRTwvU1RST05HPiwgPFNUUk9ORz4taDwvU1RST05HPiwgPFNUUk9ORz4tdTwvU1RST05HPiBhbmQgPFNUUk9ORz4tdjwvU1RST05HPiBvcHRpb25zIHdlcmUgIGRlbGV0ZWQgIGZyb20gIHRoZQorICAgICAgIDxTVFJPTkc+dHNldDwvU1RST05HPiAgdXRpbGl0eSAgaW4gNC40QlNELiAgTm9uZSBvZiB0aGVtIHdlcmUgZG9jdW1lbnRlZCBpbgorICAgICAgIDQuM0JTRCBhbmQgYWxsIGFyZSBvZiBsaW1pdGVkIHV0aWxpdHkgYXQgIGJlc3QuICAgVGhlICA8U1RST05HPi1hPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+LWQ8L1NUUk9ORz4sIGFuZCA8U1RST05HPi1wPC9TVFJPTkc+IG9wdGlvbnMgYXJlIHNpbWlsYXJseSBub3QgZG9jdW1lbnRlZCBvciB1c2VmdWwsCisgICAgICAgYnV0IHdlcmUgcmV0YWluZWQgYXMgdGhleSBhcHBlYXIgdG8gYmUgaW4gd2lkZXNwcmVhZCAgdXNlLgorICAgICAgIEl0ICBpcyAgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBhbnkgdXNhZ2Ugb2YgdGhlc2UgdGhyZWUKKyAgICAgICBvcHRpb25zIGJlIGNoYW5nZWQgdG8gdXNlIHRoZSA8U1RST05HPi1tPC9TVFJPTkc+IG9wdGlvbiBpbnN0ZWFkLiAgIFRoZSAgLW4KKyAgICAgICBvcHRpb24gIHJlbWFpbnMsIGJ1dCBoYXMgbm8gZWZmZWN0LiAgVGhlIDxTVFJPTkc+LWFkbnA8L1NUUk9ORz4gb3B0aW9ucyBhcmUKKyAgICAgICB0aGVyZWZvcmUgb21pdHRlZCBmcm9tIHRoZSB1c2FnZSBzdW1tYXJ5IGFib3ZlLgorCisgICAgICAgSXQgaXMgc3RpbGwgcGVybWlzc2libGUgdG8gc3BlY2lmeSAgdGhlICA8U1RST05HPi1lPC9TVFJPTkc+LCAgPFNUUk9ORz4taTwvU1RST05HPiwgIGFuZCAgPFNUUk9ORz4tazwvU1RST05HPgorICAgICAgIG9wdGlvbnMgIHdpdGhvdXQgYXJndW1lbnRzLCBhbHRob3VnaCBpdCBpcyBzdHJvbmdseSByZWNvbS0KKyAgICAgICBtZW5kZWQgdGhhdCBzdWNoIHVzYWdlIGJlIGZpeGVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSAgdGhlCisgICAgICAgY2hhcmFjdGVyLgorCisgICAgICAgQXMgIG9mICA0LjRCU0QsICBleGVjdXRpbmcgPFNUUk9ORz50c2V0PC9TVFJPTkc+IGFzIDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4gbm8gbG9uZ2VyIGltcGxpZXMKKyAgICAgICB0aGUgPFNUUk9ORz4tUTwvU1RST05HPiBvcHRpb24uICBBbHNvLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgLSBvcHRpb24KKyAgICAgICBhbmQgdGhlIDxFTT50ZXJtaW5hbDwvRU0+IGFyZ3VtZW50IGluIHNvbWUgaGlzdG9yaWMgaW1wbGVtZW50YXRpb25zCisgICAgICAgb2YgPFNUUk9ORz50c2V0PC9TVFJPTkc+IGhhcyBiZWVuIHJlbW92ZWQuCisKKworPC9QUkU+Cis8SDI+RU5WSVJPTk1FTlQ8L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+dHNldDwvU1RST05HPiBjb21tYW5kIHVzZXMgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorCisgICAgICAgU0hFTEwKKyAgICAgICAgICAgIHRlbGxzIDxTVFJPTkc+dHNldDwvU1RST05HPiB3aGV0aGVyIHRvIGluaXRpYWxpemUgPFNUUk9ORz5URVJNPC9TVFJPTkc+IHVzaW5nIDxTVFJPTkc+c2g8L1NUUk9ORz4gb3IgPFNUUk9ORz5jc2g8L1NUUk9ORz4KKyAgICAgICAgICAgIHN5bnRheC4KKworICAgICAgIFRFUk0gRGVub3RlcyAgeW91ciAgdGVybWluYWwgIHR5cGUuICBFYWNoIHRlcm1pbmFsIHR5cGUgaXMKKyAgICAgICAgICAgIGRpc3RpbmN0LCB0aG91Z2ggbWFueSBhcmUgc2ltaWxhci4KKworICAgICAgIFRFUk1DQVAKKyAgICAgICAgICAgIG1heSBkZW5vdGUgdGhlIGxvY2F0aW9uIG9mIGEgdGVybWNhcCBkYXRhYmFzZS4gIElmIGl0CisgICAgICAgICAgICBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aG5hbWUsIGUuZy4sIGJlZ2lucyB3aXRoIGEgYC8nLAorICAgICAgICAgICAgPFNUUk9ORz50c2V0PC9TVFJPTkc+IHJlbW92ZXMgdGhlIHZhcmlhYmxlIGZyb20gdGhlIGVudmlyb25tZW50IGJlZm9yZQorICAgICAgICAgICAgbG9va2luZyBmb3IgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorCisKKzwvUFJFPgorPEgyPkZJTEVTPC9IMj48UFJFPgorICAgICAgIC9ldGMvdHR5cworICAgICAgICAgICAgc3lzdGVtICBwb3J0ICBuYW1lICB0byB0ZXJtaW5hbCB0eXBlIG1hcHBpbmcgZGF0YWJhc2UKKyAgICAgICAgICAgIChCU0QgdmVyc2lvbnMgb25seSkuCisKKyAgICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvCisgICAgICAgICAgICB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGFiYXNlCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjc2guMS5odG1sIj5jc2goMSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InNoLjEuaHRtbCI+c2goMSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InN0dHkuMS5odG1sIj5zdHR5KDEpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9InR0eS40Lmh0bWwiPnR0eSg0KTwvQT48L1NUUk9ORz4sICB0ZXItCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaW5mby41Lmh0bWwiPm1pbmZvKDUpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0dHlzLjUuaHRtbCI+dHR5cyg1KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZW52aXJvbi43Lmh0bWwiPmVudmlyb24oNyk8L0E+PC9TVFJPTkc+CisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRzZXQuMS5odG1sIj50c2V0KDEpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tYW4vd3Jlc2l6ZS4zeC5odG1sIGIvZG9jL2h0bWwvbWFuL3dyZXNpemUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRlZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvbWFuL3dyZXNpemUuM3guaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYKKyAgKiBASWQ6IHdyZXNpemUuM3gsdiAxLjkgMjAwNi8wMi8yNSAyMTo0NzowNiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT53cmVzaXplIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+d3Jlc2l6ZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0id3Jlc2l6ZS4zeC5odG1sIj53cmVzaXplKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+d3Jlc2l6ZTwvU1RST05HPiAtIHJlc2l6ZSBhIGN1cnNlcyB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53cmVzaXplKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bGluZXMsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y29sdW1ucyk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPndyZXNpemU8L1NUUk9ORz4gIGZ1bmN0aW9uICByZWFsbG9jYXRlcyBzdG9yYWdlIGZvciBhbiA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICB3aW5kb3cgdG8gYWRqdXN0IGl0cyBkaW1lbnNpb25zIHRvIHRoZSAgc3BlY2lmaWVkICB2YWx1ZXMuCisgICAgICAgSWYgZWl0aGVyIGRpbWVuc2lvbiBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZXMsIHRoZQorICAgICAgIHdpbmRvdydzIGRhdGEgaXMgZmlsbGVkIHdpdGggYmxhbmtzIHRoYXQgaGF2ZSB0aGUgIGN1cnJlbnQKKyAgICAgICBiYWNrZ3JvdW5kICByZW5kaXRpb24gIChhcyAgc2V0ICBieSA8U1RST05HPndia2duZHNldDwvU1RST05HPikgbWVyZ2VkIGludG8KKyAgICAgICB0aGVtLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgIGFuZCAgPFNUUk9ORz5PSzwvU1RST05HPgorICAgICAgIG9uIHN1Y2Nlc3MuICBJdCB3aWxsIGZhaWwgaWYgZWl0aGVyIG9mIHRoZSBkaW1lbnNpb25zIGxlc3MKKyAgICAgICB0aGFuIG9yIGVxdWFsICB0byAgemVybywgIG9yICBpZiAgYW4gIGVycm9yICBvY2N1cnMgIHdoaWxlCisgICAgICAgKHJlKWFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgd2luZG93LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBvbmx5IHJlc3RyaWN0aW9uIHBsYWNlZCBvbiB0aGUgZGltZW5zaW9ucyBpcyB0aGF0IHRoZXkKKyAgICAgICBiZSBncmVhdGVyIHRoYW4gemVyby4gIFRoZSBkaW1lbnNpb25zIGFyZSBub3QgY29tcGFyZWQgIHRvCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gICBzY3JlZW4gICBkaW1lbnNpb25zICB0byAgc2ltcGxpZnkgIHRoZSAgbG9naWMgIG9mCisgICAgICAgPFNUUk9ORz5yZXNpemV0ZXJtPC9TVFJPTkc+LiAgVGhlIGNhbGxlciAgbXVzdCAgZW5zdXJlICB0aGF0ICB0aGUgIHdpbmRvdydzCisgICAgICAgZGltZW5zaW9ucyBmaXQgd2l0aGluIHRoZSBhY3R1YWwgc2NyZWVuIGRpbWVuc2lvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIERpY2tleSAoZnJvbSBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uIHdyaXR0ZW4gaW4gMTk4OAorICAgICAgIGZvciBCU0QgY3Vyc2VzKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0id3Jlc2l6ZS4zeC5odG1sIj53cmVzaXplKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvbmN1cnNlcy1pbnRyby5odG1sIGIvZG9jL2h0bWwvbmN1cnNlcy1pbnRyby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MWU3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9uY3Vyc2VzLWludHJvLmh0bWwKQEAgLTAsMCArMSwyNzIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDMuMC8vRU4iPgorPCEtLQorICAkSWQ6IG5jdXJzZXMtaW50cm8uaHRtbCx2IDEuNDMgMjAwNy8wMy8wMyAxOTozMTo1MCB0b20gRXhwICQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5Xcml0aW5nIFByb2dyYW1zIHdpdGggTkNVUlNFUzwvVElUTEU+Cis8bGluayByZXY9Im1hZGUiIGhyZWY9Im1haWx0bzpidWdzLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorCis8SDE+V3JpdGluZyBQcm9ncmFtcyB3aXRoIE5DVVJTRVM8L0gxPgorCis8QkxPQ0tRVU9URT4KK2J5IEVyaWMgUy4gUmF5bW9uZCBhbmQgWmV5ZCBNLiBCZW4tSGFsaW08QlI+Cit1cGRhdGVzIHNpbmNlIHJlbGVhc2UgMS45LjllIGJ5IFRob21hcyBEaWNrZXkKKzwvQkxPQ0tRVU9URT4KKworPEgxPkNvbnRlbnRzPC9IMT4KKzxVTD4KKzxMST48QSBIUkVGPSIjaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI2hpc3RvcnkiPkEgQnJpZWYgSGlzdG9yeSBvZiBDdXJzZXM8L0E+Cis8TEk+PEEgSFJFRj0iI3Njb3BlIj5TY29wZSBvZiBUaGlzIERvY3VtZW50PC9BPgorPExJPjxBIEhSRUY9IiN0ZXJtaW5vbG9neSI+VGVybWlub2xvZ3k8L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiNjdXJzZXMiPlRoZSBDdXJzZXMgTGlicmFyeTwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjb3ZlcnZpZXciPkFuIE92ZXJ2aWV3IG9mIEN1cnNlczwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjY29tcGlsaW5nIj5Db21waWxpbmcgUHJvZ3JhbXMgdXNpbmcgQ3Vyc2VzPC9BPgorPExJPjxBIEhSRUY9IiN1cGRhdGluZyI+VXBkYXRpbmcgdGhlIFNjcmVlbjwvQT4KKzxMST48QSBIUkVGPSIjc3Rkc2NyIj5TdGFuZGFyZCBXaW5kb3dzIGFuZCBGdW5jdGlvbiBOYW1pbmcgQ29udmVudGlvbnM8L0E+Cis8TEk+PEEgSFJFRj0iI3ZhcmlhYmxlcyI+VmFyaWFibGVzPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjdXNpbmciPlVzaW5nIHRoZSBMaWJyYXJ5PC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNzdGFydGluZyI+U3RhcnRpbmcgdXA8L0E+Cis8TEk+PEEgSFJFRj0iI291dHB1dCI+T3V0cHV0PC9BPgorPExJPjxBIEhSRUY9IiNpbnB1dCI+SW5wdXQ8L0E+Cis8TEk+PEEgSFJFRj0iI2Zvcm1zY2hhcnMiPlVzaW5nIEZvcm1zIENoYXJhY3RlcnM8L0E+Cis8TEk+PEEgSFJFRj0iI2F0dHJpYnV0ZXMiPkNoYXJhY3RlciBBdHRyaWJ1dGVzIGFuZCBDb2xvcjwvQT4KKzxMST48QSBIUkVGPSIjbW91c2UiPk1vdXNlIEludGVyZmFjaW5nPC9BPgorPExJPjxBIEhSRUY9IiNmaW5pc2hpbmciPkZpbmlzaGluZyBVcDwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2Z1bmN0aW9ucyI+RnVuY3Rpb24gRGVzY3JpcHRpb25zPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNpbml0Ij5Jbml0aWFsaXphdGlvbiBhbmQgV3JhcHVwPC9BPgorPExJPjxBIEhSRUY9IiNmbHVzaCI+Q2F1c2luZyBPdXRwdXQgdG8gdGhlIFRlcm1pbmFsPC9BPgorPExJPjxBIEhSRUY9IiNsb3dsZXZlbCI+TG93LUxldmVsIENhcGFiaWxpdHkgQWNjZXNzPC9BPgorPExJPjxBIEhSRUY9IiNkZWJ1Z2dpbmciPkRlYnVnZ2luZzwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2hpbnRzIj5IaW50cywgVGlwcywgYW5kIFRyaWNrczwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjY2F1dGlvbiI+U29tZSBOb3RlcyBvZiBDYXV0aW9uPC9BPgorPExJPjxBIEhSRUY9IiNsZWF2aW5nIj5UZW1wb3JhcmlseSBMZWF2aW5nIG5jdXJzZXMgTW9kZTwvQT4KKzxMST48QSBIUkVGPSIjeHRlcm0iPlVzaW5nIDxDT0RFPm5jdXJzZXM8L0NPREU+IHVuZGVyIDxDT0RFPnh0ZXJtPC9DT0RFPjwvQT4KKzxMST48QSBIUkVGPSIjc2NyZWVucyI+SGFuZGxpbmcgTXVsdGlwbGUgVGVybWluYWwgU2NyZWVuczwvQT4KKzxMST48QSBIUkVGPSIjdGVzdGluZyI+VGVzdGluZyBmb3IgVGVybWluYWwgQ2FwYWJpbGl0aWVzPC9BPgorPExJPjxBIEhSRUY9IiN0dW5pbmciPlR1bmluZyBmb3IgU3BlZWQ8L0E+Cis8TEk+PEEgSFJFRj0iI3NwZWNpYWwiPlNwZWNpYWwgRmVhdHVyZXMgb2YgPENPREU+bmN1cnNlczwvQ09ERT48L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiNjb21wYXQiPkNvbXBhdGliaWxpdHkgd2l0aCBPbGRlciBWZXJzaW9uczwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjcmVmYnVnIj5SZWZyZXNoIG9mIE92ZXJsYXBwaW5nIFdpbmRvd3M8L0E+Cis8TEk+PEEgSFJFRj0iI2JhY2tidWciPkJhY2tncm91bmQgRXJhc2U8L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiN4c2lmdW5jcyI+WFNJIEN1cnNlcyBDb25mb3JtYW5jZTwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI3BhbmVscyI+VGhlIFBhbmVscyBMaWJyYXJ5PC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNwY29tcGlsZSI+Q29tcGlsaW5nIFdpdGggdGhlIFBhbmVscyBMaWJyYXJ5PC9BPgorPExJPjxBIEhSRUY9IiNwb3ZlcnZpZXciPk92ZXJ2aWV3IG9mIFBhbmVsczwvQT4KKzxMST48QSBIUkVGPSIjcHN0ZHNjciI+UGFuZWxzLCBJbnB1dCwgYW5kIHRoZSBTdGFuZGFyZCBTY3JlZW48L0E+Cis8TEk+PEEgSFJFRj0iI2hpZGluZyI+SGlkaW5nIFBhbmVsczwvQT4KKzxMST48QSBIUkVGPSIjcG1pc2MiPk1pc2NlbGxhbmVvdXMgT3RoZXIgRmFjaWxpdGllczwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI21lbnUiPlRoZSBNZW51IExpYnJhcnk8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI21jb21waWxlIj5Db21waWxpbmcgd2l0aCB0aGUgbWVudSBMaWJyYXJ5PC9BPgorPExJPjxBIEhSRUY9IiNtb3ZlcnZpZXciPk92ZXJ2aWV3IG9mIE1lbnVzPC9BPgorPExJPjxBIEhSRUY9IiNtc2VsZWN0Ij5TZWxlY3RpbmcgaXRlbXM8L0E+Cis8TEk+PEEgSFJFRj0iI21kaXNwbGF5Ij5NZW51IERpc3BsYXk8L0E+Cis8TEk+PEEgSFJFRj0iI213aW5kb3dzIj5NZW51IFdpbmRvd3M8L0E+Cis8TEk+PEEgSFJFRj0iI21pbnB1dCI+UHJvY2Vzc2luZyBNZW51IElucHV0PC9BPgorPExJPjxBIEhSRUY9IiNtbWlzYyI+TWlzY2VsbGFuZW91cyBPdGhlciBGZWF0dXJlczwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2Zvcm0iPlRoZSBGb3JtcyBMaWJyYXJ5PC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNmY29tcGlsZSI+Q29tcGlsaW5nIHdpdGggdGhlIGZvcm1zIExpYnJhcnk8L0E+Cis8TEk+PEEgSFJFRj0iI2ZvdmVydmlldyI+T3ZlcnZpZXcgb2YgRm9ybXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZjcmVhdGUiPkNyZWF0aW5nIGFuZCBGcmVlaW5nIEZpZWxkcyBhbmQgRm9ybXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZhdHRyaWJ1dGVzIj5GZXRjaGluZyBhbmQgQ2hhbmdpbmcgRmllbGQgQXR0cmlidXRlczwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjZnNpemVzIj5GZXRjaGluZyBTaXplIGFuZCBMb2NhdGlvbiBEYXRhPC9BPgorPExJPjxBIEhSRUY9IiNmbG9jYXRpb24iPkNoYW5naW5nIHRoZSBGaWVsZCBMb2NhdGlvbjwvQT4KKzxMST48QSBIUkVGPSIjZmp1c3QiPlRoZSBKdXN0aWZpY2F0aW9uIEF0dHJpYnV0ZTwvQT4KKzxMST48QSBIUkVGPSIjZmRpc3BhdHRzIj5GaWVsZCBEaXNwbGF5IEF0dHJpYnV0ZXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZvcHRpb25zIj5GaWVsZCBPcHRpb24gQml0czwvQT4KKzxMST48QSBIUkVGPSIjZnN0YXR1cyI+RmllbGQgU3RhdHVzPC9BPgorPExJPjxBIEhSRUY9IiNmdXNlciI+RmllbGQgVXNlciBQb2ludGVyPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjZmR5bmFtaWMiPlZhcmlhYmxlLVNpemVkIEZpZWxkczwvQT4KKzxMST48QSBIUkVGPSIjZnZhbGlkYXRpb24iPkZpZWxkIFZhbGlkYXRpb248L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI2Z0eXBlX2FscGhhIj5UWVBFX0FMUEhBPC9BPgorPExJPjxBIEhSRUY9IiNmdHlwZV9hbG51bSI+VFlQRV9BTE5VTTwvQT4KKzxMST48QSBIUkVGPSIjZnR5cGVfZW51bSI+VFlQRV9FTlVNPC9BPgorPExJPjxBIEhSRUY9IiNmdHlwZV9pbnRlZ2VyIj5UWVBFX0lOVEVHRVI8L0E+Cis8TEk+PEEgSFJFRj0iI2Z0eXBlX251bWVyaWMiPlRZUEVfTlVNRVJJQzwvQT4KKzxMST48QSBIUkVGPSIjZnR5cGVfcmVnZXhwIj5UWVBFX1JFR0VYUDwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2ZidWZmZXIiPkRpcmVjdCBGaWVsZCBCdWZmZXIgTWFuaXB1bGF0aW9uPC9BPgorPExJPjxBIEhSRUY9IiNmb3JtYXR0cnMiPkF0dHJpYnV0ZXMgb2YgRm9ybXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZkaXNwbGF5Ij5Db250cm9sIG9mIEZvcm0gRGlzcGxheTwvQT4KKzxMST48QSBIUkVGPSIjZmRyaXZlciI+SW5wdXQgUHJvY2Vzc2luZyBpbiB0aGUgRm9ybXMgRHJpdmVyPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNmcGFnZSI+UGFnZSBOYXZpZ2F0aW9uIFJlcXVlc3RzPC9BPgorPExJPjxBIEhSRUY9IiNmZmllbGQiPkludGVyLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZpZmllbGQiPkludHJhLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZzY3JvbGwiPlNjcm9sbGluZyBSZXF1ZXN0czwvQT4KKzxMST48QSBIUkVGPSIjZmVkaXQiPkZpZWxkIEVkaXRpbmcgUmVxdWVzdHM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZvcmRlciI+T3JkZXIgUmVxdWVzdHM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZhcHBjbWRzIj5BcHBsaWNhdGlvbiBDb21tYW5kczwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2Zob29rcyI+RmllbGQgQ2hhbmdlIEhvb2tzPC9BPgorPExJPjxBIEhSRUY9IiNmZm9jdXMiPkZpZWxkIENoYW5nZSBDb21tYW5kczwvQT4KKzxMST48QSBIUkVGPSIjZnJtb3B0aW9ucyI+Rm9ybSBPcHRpb25zPC9BPgorPExJPjxBIEhSRUY9IiNmY3VzdG9tIj5DdXN0b20gVmFsaWRhdGlvbiBUeXBlczwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjZmxpbmt0eXBlcyI+VW5pb24gVHlwZXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZuZXd0eXBlcyI+TmV3IEZpZWxkIFR5cGVzPC9BPgorPExJPjxBIEhSRUY9IiNmY2hlY2thcmdzIj5WYWxpZGF0aW9uIEZ1bmN0aW9uIEFyZ3VtZW50czwvQT4KKzxMST48QSBIUkVGPSIjZmN1c3RvcmRlciI+T3JkZXIgRnVuY3Rpb25zIEZvciBDdXN0b20gVHlwZXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZjdXN0cHJvYnMiPkF2b2lkaW5nIFByb2JsZW1zPC9BPgorPC9VTD4KKzwvVUw+Cis8L1VMPgorCis8SFI+Cis8SDE+PEEgTkFNRT0iaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L0E+PC9IMT4KKworVGhpcyBkb2N1bWVudCBpcyBhbiBpbnRyb2R1Y3Rpb24gdG8gcHJvZ3JhbW1pbmcgd2l0aCA8Q09ERT5jdXJzZXM8L0NPREU+LiBJdCBpcworbm90IGFuIGV4aGF1c3RpdmUgcmVmZXJlbmNlIGZvciB0aGUgY3Vyc2VzIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZQorKEFQSSk7IHRoYXQgcm9sZSBpcyBmaWxsZWQgYnkgdGhlIDxDT0RFPmN1cnNlczwvQ09ERT4gbWFudWFsIHBhZ2VzLiAgUmF0aGVyLCBpdAoraXMgaW50ZW5kZWQgdG8gaGVscCBDIHByb2dyYW1tZXJzIGVhc2UgaW50byB1c2luZyB0aGUgcGFja2FnZS4gPFA+CisKK1RoaXMgZG9jdW1lbnQgaXMgYWltZWQgYXQgQyBhcHBsaWNhdGlvbnMgcHJvZ3JhbW1lcnMgbm90IHlldCBzcGVjaWZpY2FsbHkKK2ZhbWlsaWFyIHdpdGggbmN1cnNlcy4gIElmIHlvdSBhcmUgYWxyZWFkeSBhbiBleHBlcmllbmNlZCA8Q09ERT5jdXJzZXM8L0NPREU+Citwcm9ncmFtbWVyLCB5b3Ugc2hvdWxkIG5ldmVydGhlbGVzcyByZWFkIHRoZSBzZWN0aW9ucyBvbgorPEEgSFJFRj0iI21vdXNlIj5Nb3VzZSBJbnRlcmZhY2luZzwvQT4sIDxBIEhSRUY9IiNkZWJ1Z2dpbmciPkRlYnVnZ2luZzwvQT4sCis8QSBIUkVGPSIjY29tcGF0Ij5Db21wYXRpYmlsaXR5IHdpdGggT2xkZXIgVmVyc2lvbnM8L0E+LAorYW5kIDxBIEhSRUY9IiNoaW50cyI+SGludHMsIFRpcHMsIGFuZCBUcmlja3M8L0E+LiAgVGhlc2Ugd2lsbCBicmluZyB5b3UgdXAKK3RvIHNwZWVkIG9uIHRoZSBzcGVjaWFsIGZlYXR1cmVzIGFuZCBxdWlya3Mgb2YgdGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+CitpbXBsZW1lbnRhdGlvbi4gIElmIHlvdSBhcmUgbm90IHNvIGV4cGVyaWVuY2VkLCBrZWVwIHJlYWRpbmcuIDxQPgorCitUaGUgPENPREU+Y3Vyc2VzPC9DT0RFPiBwYWNrYWdlIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5IGZvcgordGVybWluYWwtaW5kZXBlbmRlbnQgc2NyZWVuLXBhaW50aW5nIGFuZCBpbnB1dC1ldmVudCBoYW5kbGluZyB3aGljaAorcHJlc2VudHMgYSBoaWdoIGxldmVsIHNjcmVlbiBtb2RlbCB0byB0aGUgcHJvZ3JhbW1lciwgaGlkaW5nIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRlcm1pbmFsIHR5cGVzIGFuZCBkb2luZyBhdXRvbWF0aWMgb3B0aW1pemF0aW9uIG9mIG91dHB1dCB0byBjaGFuZ2UKK29uZSBzY3JlZW4gZnVsbCBvZiB0ZXh0IGludG8gYW5vdGhlci4gIDxDT0RFPkN1cnNlczwvQ09ERT4gdXNlcyB0ZXJtaW5mbywgd2hpY2gKK2lzIGEgZGF0YWJhc2UgZm9ybWF0IHRoYXQgY2FuIGRlc2NyaWJlIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhvdXNhbmRzIG9mCitkaWZmZXJlbnQgdGVybWluYWxzLiA8UD4KKworVGhlIDxDT0RFPmN1cnNlczwvQ09ERT4gQVBJIG1heSBzZWVtIHNvbWV0aGluZyBvZiBhbiBhcmNoYWlzbSBvbiBVTklYIGRlc2t0b3BzCitpbmNyZWFzaW5nbHkgZG9taW5hdGVkIGJ5IFgsIE1vdGlmLCBhbmQgVGNsL1RrLiAgTmV2ZXJ0aGVsZXNzLCBVTklYIHN0aWxsCitzdXBwb3J0cyB0dHkgbGluZXMgYW5kIFggc3VwcG9ydHMgPEVNPnh0ZXJtKDEpPC9FTT47IHRoZSA8Q09ERT5jdXJzZXM8L0NPREU+CitBUEkgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgKGEpIGJhY2stcG9ydGFiaWxpdHkgdG8gY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzLAorYW5kIChiKSBzaW1wbGljaXR5LiAgRm9yIGFuIGFwcGxpY2F0aW9uIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBiaXQtbWFwcGVkCitncmFwaGljcyBhbmQgbXVsdGlwbGUgZm9udHMsIGFuIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiB1c2luZyA8Q09ERT5jdXJzZXM8L0NPREU+Cit3aWxsIHR5cGljYWxseSBiZSBhIGdyZWF0IGRlYWwgc2ltcGxlciBhbmQgbGVzcyBleHBlbnNpdmUgdGhhbiBvbmUgdXNpbmcgYW4KK1ggdG9vbGtpdC4KKworPEgyPjxBIE5BTUU9Imhpc3RvcnkiPkEgQnJpZWYgSGlzdG9yeSBvZiBDdXJzZXM8L0E+PC9IMj4KKworSGlzdG9yaWNhbGx5LCB0aGUgZmlyc3QgYW5jZXN0b3Igb2YgPENPREU+Y3Vyc2VzPC9DT0RFPiB3YXMgdGhlIHJvdXRpbmVzIHdyaXR0ZW4gdG8KK3Byb3ZpZGUgc2NyZWVuLWhhbmRsaW5nIGZvciB0aGUgZ2FtZSA8Q09ERT5yb2d1ZTwvQ09ERT47IHRoZXNlIHVzZWQgdGhlCithbHJlYWR5LWV4aXN0aW5nIDxDT0RFPnRlcm1jYXA8L0NPREU+IGRhdGFiYXNlIGZhY2lsaXR5IGZvciBkZXNjcmliaW5nIHRlcm1pbmFsCitjYXBhYmlsaXRpZXMuICBUaGVzZSByb3V0aW5lcyB3ZXJlIGFic3RyYWN0ZWQgaW50byBhIGRvY3VtZW50ZWQgbGlicmFyeSBhbmQKK2ZpcnN0IHJlbGVhc2VkIHdpdGggdGhlIGVhcmx5IEJTRCBVTklYIHZlcnNpb25zLiA8UD4KKworU3lzdGVtIElJSSBVTklYIGZyb20gQmVsbCBMYWJzIGZlYXR1cmVkIGEgcmV3cml0dGVuIGFuZCBtdWNoLWltcHJvdmVkCis8Q09ERT5jdXJzZXM8L0NPREU+IGxpYnJhcnkuICBJdCBpbnRyb2R1Y2VkIHRoZSB0ZXJtaW5mbyBmb3JtYXQuICBUZXJtaW5mbyBpcyBiYXNlZAorb24gQmVya2VsZXkncyB0ZXJtY2FwIGRhdGFiYXNlLCBidXQgY29udGFpbnMgYSBudW1iZXIgb2YgaW1wcm92ZW1lbnRzIGFuZAorZXh0ZW5zaW9ucy4gUGFyYW1ldGVyaXplZCBjYXBhYmlsaXRpZXMgc3RyaW5ncyB3ZXJlIGludHJvZHVjZWQsIG1ha2luZyBpdAorcG9zc2libGUgdG8gZGVzY3JpYmUgbXVsdGlwbGUgdmlkZW8gYXR0cmlidXRlcywgYW5kIGNvbG9ycyBhbmQgdG8gaGFuZGxlIGZhcgorbW9yZSB1bnVzdWFsIHRlcm1pbmFscyB0aGFuIHBvc3NpYmxlIHdpdGggdGVybWNhcC4gIEluIHRoZSBsYXRlciBBVCZhbXA7VAorU3lzdGVtIFYgcmVsZWFzZXMsIDxDT0RFPmN1cnNlczwvQ09ERT4gZXZvbHZlZCB0byB1c2UgbW9yZSBmYWNpbGl0aWVzIGFuZCBvZmZlcgorbW9yZSBjYXBhYmlsaXRpZXMsIGdvaW5nIGZhciBiZXlvbmQgQlNEIGN1cnNlcyBpbiBwb3dlciBhbmQgZmxleGliaWxpdHkuCisKKzxIMj48QSBOQU1FPSJzY29wZSI+U2NvcGUgb2YgVGhpcyBEb2N1bWVudDwvQT48L0gyPgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyA8Q09ERT5uY3Vyc2VzPC9DT0RFPiwgYSBmcmVlIGltcGxlbWVudGF0aW9uIG9mCit0aGUgU3lzdGVtIFYgPENPREU+Y3Vyc2VzPC9DT0RFPiBBUEkgd2l0aCBzb21lIGNsZWFybHkgbWFya2VkIGV4dGVuc2lvbnMuCitJdCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIFN5c3RlbSBWIGN1cnNlcyBmZWF0dXJlczoKKzxVTD4KKzxMST5TdXBwb3J0IGZvciBtdWx0aXBsZSBzY3JlZW4gaGlnaGxpZ2h0cyAoQlNEIGN1cnNlcyBjb3VsZCBvbmx5CitoYW5kbGUgb25lIGBzdGFuZG91dCcgaGlnaGxpZ2h0LCB1c3VhbGx5IHJldmVyc2UtdmlkZW8pLgorPExJPlN1cHBvcnQgZm9yIGxpbmUtIGFuZCBib3gtZHJhd2luZyB1c2luZyBmb3JtcyBjaGFyYWN0ZXJzLgorPExJPlJlY29nbml0aW9uIG9mIGZ1bmN0aW9uIGtleXMgb24gaW5wdXQuCis8TEk+Q29sb3Igc3VwcG9ydC4KKzxMST5TdXBwb3J0IGZvciBwYWRzICh3aW5kb3dzIG9mIGxhcmdlciB0aGFuIHNjcmVlbiBzaXplIG9uIHdoaWNoIHRoZQorc2NyZWVuIG9yIGEgc3Vid2luZG93IGRlZmluZXMgYSB2aWV3cG9ydCkuCis8L1VMPgorCitBbHNvLCB0aGlzIHBhY2thZ2UgbWFrZXMgdXNlIG9mIHRoZSBpbnNlcnQgYW5kIGRlbGV0ZSBsaW5lIGFuZCBjaGFyYWN0ZXIKK2ZlYXR1cmVzIG9mIHRlcm1pbmFscyBzbyBlcXVpcHBlZCwgYW5kIGRldGVybWluZXMgaG93IHRvIG9wdGltYWxseSB1c2UgdGhlc2UKK2ZlYXR1cmVzIHdpdGggbm8gaGVscCBmcm9tIHRoZSBwcm9ncmFtbWVyLiAgSXQgYWxsb3dzIGFyYml0cmFyeSBjb21iaW5hdGlvbnMgb2YKK3ZpZGVvIGF0dHJpYnV0ZXMgdG8gYmUgZGlzcGxheWVkLCBldmVuIG9uIHRlcm1pbmFscyB0aGF0IGxlYXZlIGBgbWFnaWMKK2Nvb2tpZXMnJyBvbiB0aGUgc2NyZWVuIHRvIG1hcmsgY2hhbmdlcyBpbiBhdHRyaWJ1dGVzLiA8UD4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IHBhY2thZ2UgY2FuIGFsc28gY2FwdHVyZSBhbmQgdXNlIGV2ZW50IHJlcG9ydHMgZnJvbSBhCittb3VzZSBpbiBzb21lIGVudmlyb25tZW50cyAobm90YWJseSwgeHRlcm0gdW5kZXIgdGhlIFggd2luZG93IHN5c3RlbSkuICBUaGlzCitkb2N1bWVudCBpbmNsdWRlcyB0aXBzIGZvciB1c2luZyB0aGUgbW91c2UuIDxQPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gcGFja2FnZSB3YXMgb3JpZ2luYXRlZCBieSBQYXZlbCBDdXJ0aXMuICBUaGUgb3JpZ2luYWwKK21haW50YWluZXIgb2YgdGhpcyBwYWNrYWdlIGlzCis8QSBIUkVGPSJtYWlsdG86em1iZW5oYWxAbmV0Y29tLmNvbSI+WmV5ZCBCZW4tSGFsaW08L0E+CismbHQ7em1iZW5oYWxAbmV0Y29tLmNvbSZndDsuCis8QSBIUkVGPSJtYWlsdG86ZXNyQHNuYXJrLnRoeXJzdXMuY29tIj5FcmljIFMuIFJheW1vbmQ8L0E+CismbHQ7ZXNyQHNuYXJrLnRoeXJzdXMuY29tJmd0Oword3JvdGUgbWFueSBvZiB0aGUgbmV3IGZlYXR1cmVzIGluIHZlcnNpb25zIGFmdGVyIDEuOC4xCithbmQgd3JvdGUgbW9zdCBvZiB0aGlzIGludHJvZHVjdGlvbi4KK0omdXVtbDtyZ2VuIFBmZWlmZXIKK3dyb3RlIGFsbCBvZiB0aGUgbWVudSBhbmQgZm9ybXMgY29kZSBhcyB3ZWxsIGFzIHRoZQorPEEgSFJFRj0iaHR0cDovL3d3dy5hZGFob21lLmNvbSI+QWRhOTU8L0E+IGJpbmRpbmcuCitPbmdvaW5nIHdvcmsgaXMgYmVpbmcgZG9uZSBieQorPEEgSFJFRj0ibWFpbHRvOmRpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldCI+VGhvbWFzIERpY2tleTwvQT4gKG1haW50YWluZXIpLgorQ29udGFjdCB0aGUgY3VycmVudCBtYWludGFpbmVycyBhdAorPEEgSFJFRj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPmJ1Zy1uY3Vyc2VzQGdudS5vcmc8L0E+LgorPFA+CisKK1RoaXMgZG9jdW1lbnQgYWxzbyBkZXNjcmliZXMgdGhlIDxBIEhSRUY9IiNwYW5lbHMiPnBhbmVsczwvQT4gZXh0ZW5zaW9uIGxpYnJhcnksCitzaW1pbGFybHkgbW9kZWxlZCBvbiB0aGUgU1ZyNCBwYW5lbHMgZmFjaWxpdHkuICBUaGlzIGxpYnJhcnkgYWxsb3dzIHlvdSB0bworYXNzb2NpYXRlIGJhY2tpbmcgc3RvcmUgd2l0aCBlYWNoIG9mIGEgc3RhY2sgb3IgZGVjayBvZiBvdmVybGFwcGluZyB3aW5kb3dzLAorYW5kIHByb3ZpZGVzIG9wZXJhdGlvbnMgZm9yIG1vdmluZyB3aW5kb3dzIGFyb3VuZCBpbiB0aGUgc3RhY2sgdGhhdCBjaGFuZ2UKK3RoZWlyIHZpc2liaWxpdHkgaW4gdGhlIG5hdHVyYWwgd2F5IChoYW5kbGluZyB3aW5kb3cgb3ZlcmxhcHMpLiA8UD4KKworRmluYWxseSwgdGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSA8QSBIUkVGPSIjbWVudSI+bWVudXM8L0E+IGFuZCA8QQorSFJFRj0iI2Zvcm0iPmZvcm1zPC9BPiBleHRlbnNpb24gbGlicmFyaWVzLCBhbHNvIGNsb25lZCBmcm9tIFN5c3RlbSBWLAord2hpY2ggc3VwcG9ydCBlYXN5IGNvbnN0cnVjdGlvbiBhbmQgc2VxdWVuY2VzIG9mIG1lbnVzIGFuZCBmaWxsLWluCitmb3Jtcy4KKworCis8SDI+PEEgTkFNRT0idGVybWlub2xvZ3kiPlRlcm1pbm9sb2d5PC9BPjwvSDI+CisKK0luIHRoaXMgZG9jdW1lbnQsIHRoZSBmb2xsb3dpbmcgdGVybWlub2xvZ3kgaXMgdXNlZCB3aXRoIHJlYXNvbmFibGUKK2NvbnNpc3RlbmN5OgorCis8REw+Cis8RFQ+IHdpbmRvdworPEREPgorQSBkYXRhIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc3ViLXJlY3RhbmdsZSBvZiB0aGUgc2NyZWVuIChwb3NzaWJseSB0aGUKK2VudGlyZSBzY3JlZW4pLiAgWW91IGNhbiB3cml0ZSB0byBhIHdpbmRvdyBhcyB0aG91Z2ggaXQgd2VyZSBhIG1pbmlhdHVyZQorc2NyZWVuLCBzY3JvbGxpbmcgaW5kZXBlbmRlbnRseSBvZiBvdGhlciB3aW5kb3dzIG9uIHRoZSBwaHlzaWNhbCBzY3JlZW4uCis8RFQ+IHNjcmVlbnMKKzxERD4KK0Egc3Vic2V0IG9mIHdpbmRvd3Mgd2hpY2ggYXJlIGFzIGxhcmdlIGFzIHRoZSB0ZXJtaW5hbCBzY3JlZW4sIGkuZS4sIHRoZXkgc3RhcnQKK2F0IHRoZSB1cHBlciBsZWZ0IGhhbmQgY29ybmVyIGFuZCBlbmNvbXBhc3MgdGhlIGxvd2VyIHJpZ2h0IGhhbmQgY29ybmVyLiAgT25lCitvZiB0aGVzZSwgPENPREU+c3Rkc2NyPC9DT0RFPiwgaXMgYXV0b21hdGljYWxseSBwcm92aWRlZCBmb3IgdGhlIHByb2dyYW1tZXIuCis8RFQ+IHRlcm1pbmFsIHNjcmVlbgorPEREPgorVGhlIHBhY2thZ2UncyBpZGVhIG9mIHdoYXQgdGhlIHRlcm1pbmFsIGRpc3BsYXkgY3VycmVudGx5IGxvb2tzIGxpa2UsIGkuZS4sCit3aGF0IHRoZSB1c2VyIHNlZXMgbm93LiAgVGhpcyBpcyBhIHNwZWNpYWwgc2NyZWVuLgorPC9ETD4KKworPEgxPjxBIE5BTUU9ImN1cnNlcyI+VGhlIEN1cnNlcyBMaWJyYXJ5PC9BPjwvSDE+CisKKzxIMj48QSBOQU1FPSJvdmVydmlldyI+QW4gT3ZlcnZpZXcgb2YgQ3Vyc2VzPC9BPjwvSDI+CisKKzxIMz48QSBOQU1FPSJjb21waWxpbmciPkNvbXBpbGluZyBQcm9ncmFtcyB1c2luZyBDdXJzZXM8L0E+PC9IMz4KKworSW4gb3JkZXIgdG8gdXNlIHRoZSBsaWJyYXJ5LCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBjZXJ0YWluIHR5cGVzIGFuZAordmFyaWFibGVzIGRlZmluZWQuICBUaGVyZWZvcmUsIHRoZSBwcm9ncmFtbWVyIG11c3QgaGF2ZSBhIGxpbmU6CisKKzxQUkU+CisJICAjaW5jbHVkZSAmbHQ7Y3Vyc2VzLmgmZ3Q7Cis8L1BSRT4KKworYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSBzb3VyY2UuICBUaGUgc2NyZWVuIHBhY2thZ2UgdXNlcyB0aGUgU3RhbmRhcmQgSS9PCitsaWJyYXJ5LCBzbyA8Q09ERT4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9DT0RFPiBpbmNsdWRlcworPENPREU+Jmx0O3N0ZGlvLmgmZ3Q7PC9DT0RFPi4gPENPREU+Jmx0O2N1cnNlcy5oJmd0OzwvQ09ERT4gYWxzbyBpbmNsdWRlcworPENPREU+Jmx0O3Rlcm1pb3MuaCZndDs8L0NPREU+LCA8Q09ERT4mbHQ7dGVybWlvLmgmZ3Q7PC9DT0RFPiwgb3IKKzxDT0RFPiZsdDtzZ3R0eS5oJmd0OzwvQ09ERT4gZGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLiAgSXQgaXMgcmVkdW5kYW50IChidXQKK2hhcm1sZXNzKSBmb3IgdGhlIHByb2dyYW1tZXIgdG8gZG8gdGhlc2UgaW5jbHVkZXMsIHRvby4gSW4gbGlua2luZyB3aXRoCis8Q09ERT5jdXJzZXM8L0NPREU+IHlvdSBuZWVkIHRvIGhhdmUgPENPREU+LWxuY3Vyc2VzPC9DT0RFPiBpbiB5b3VyIExERkxBR1Mgb3Igb24gdGhlCitjb21tYW5kIGxpbmUuICBUaGVyZSBpcyBubyBuZWVkIGZvciBhbnkgb3RoZXIgbGlicmFyaWVzLgorCis8SDM+PEEgTkFNRT0idXBkYXRpbmciPlVwZGF0aW5nIHRoZSBTY3JlZW48L0E+PC9IMz4KKworSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBzY3JlZW4gb3B0aW1hbGx5LCBpdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSByb3V0aW5lcyB0bwora25vdyB3aGF0IHRoZSBzY3JlZW4gY3VycmVudGx5IGxvb2tzIGxpa2UgYW5kIHdoYXQgdGhlIHByb2dyYW1tZXIgd2FudHMgaXQgdG8KK2xvb2sgbGlrZSBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlLCBhIGRhdGEgdHlwZSAoc3RydWN0dXJlKSBuYW1lZCBXSU5ET1cgaXMKK2RlZmluZWQgd2hpY2ggZGVzY3JpYmVzIGEgd2luZG93IGltYWdlIHRvIHRoZSByb3V0aW5lcywgaW5jbHVkaW5nIGl0cyBzdGFydGluZworcG9zaXRpb24gb24gdGhlIHNjcmVlbiAodGhlICh5LCB4KSBjb29yZGluYXRlcyBvZiB0aGUgdXBwZXIgbGVmdCBoYW5kIGNvcm5lcikKK2FuZCBpdHMgc2l6ZS4gIE9uZSBvZiB0aGVzZSAoY2FsbGVkIDxDT0RFPmN1cnNjcjwvQ09ERT4sIGZvciBjdXJyZW50IHNjcmVlbikgaXMgYQorc2NyZWVuIGltYWdlIG9mIHdoYXQgdGhlIHRlcm1pbmFsIGN1cnJlbnRseSBsb29rcyBsaWtlLiAgQW5vdGhlciBzY3JlZW4gKGNhbGxlZAorPENPREU+c3Rkc2NyPC9DT0RFPiwgZm9yIHN0YW5kYXJkIHNjcmVlbikgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCB0byBtYWtlIGNoYW5nZXMKK29uLiA8UD4KKworQSB3aW5kb3cgaXMgYSBwdXJlbHkgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uIEl0IGlzIHVzZWQgdG8gYnVpbGQgYW5kIHN0b3JlIGEKK3BvdGVudGlhbCBpbWFnZSBvZiBhIHBvcnRpb24gb2YgdGhlIHRlcm1pbmFsLiAgSXQgZG9lc24ndCBiZWFyIGFueSBuZWNlc3NhcnkKK3JlbGF0aW9uIHRvIHdoYXQgaXMgcmVhbGx5IG9uIHRoZSB0ZXJtaW5hbCBzY3JlZW47IGl0J3MgbW9yZSBsaWtlIGEKK3NjcmF0Y2hwYWQgb3Igd3JpdGUgYnVmZmVyLiA8UD4KKworVG8gbWFrZSB0aGUgc2VjdGlvbiBvZiBwaHlzaWNhbCBzY3JlZW4gY29ycmVzcG9uZGluZyB0byBhIHdpbmRvdyByZWZsZWN0IHRoZQorY29udGVudHMgb2YgdGhlIHdpbmRvdyBzdHJ1Y3R1cmUsIHRoZSByb3V0aW5lIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4gKG9yCis8Q09ERT53cmVmcmVzaCgpPC9DT0RFPiBpZiB0aGUgd2luZG93IGlzIG5vdCA8Q09ERT5zdGRzY3I8L0NPREU+KSBpcyBjYWxsZWQuIDxQPgorCitBIGdpdmVuIHBoeXNpY2FsIHNjcmVlbiBzZWN0aW9uIG1heSBiZSB3aXRoaW4gdGhlIHNjb3BlIG9mIGFueSBudW1iZXIgb2YKK292ZXJsYXBwaW5nIHdpbmRvd3MuICBBbHNvLCBjaGFuZ2VzIGNhbiBiZSBtYWRlIHRvIHdpbmRvd3MgaW4gYW55IG9yZGVyLAord2l0aG91dCByZWdhcmQgdG8gbW90aW9uIGVmZmljaWVuY3kuICBUaGVuLCBhdCB3aWxsLCB0aGUgcHJvZ3JhbW1lciBjYW4KK2VmZmVjdGl2ZWx5IHNheSBgYG1ha2UgaXQgbG9vayBsaWtlIHRoaXMsJycgYW5kIGxldCB0aGUgcGFja2FnZSBpbXBsZW1lbnRhdGlvbgorZGV0ZXJtaW5lIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcmVwYWludCB0aGUgc2NyZWVuLgorCis8SDM+PEEgTkFNRT0ic3Rkc2NyIj5TdGFuZGFyZCBXaW5kb3dzIGFuZCBGdW5jdGlvbiBOYW1pbmcgQ29udmVudGlvbnM8L0E+PC9IMz4KKworQXMgaGludGVkIGFib3ZlLCB0aGUgcm91dGluZXMgY2FuIHVzZSBzZXZlcmFsIHdpbmRvd3MsIGJ1dCB0d28gYXJlCithdXRvbWF0aWNhbGx5IGdpdmVuOiA8Q09ERT5jdXJzY3I8L0NPREU+LCB3aGljaCBrbm93cyB3aGF0IHRoZSB0ZXJtaW5hbCBsb29rcyBsaWtlLAorYW5kIDxDT0RFPnN0ZHNjcjwvQ09ERT4sIHdoaWNoIGlzIHdoYXQgdGhlIHByb2dyYW1tZXIgd2FudHMgdGhlIHRlcm1pbmFsIHRvIGxvb2sKK2xpa2UgbmV4dC4gIFRoZSB1c2VyIHNob3VsZCBuZXZlciBhY3R1YWxseSBhY2Nlc3MgPENPREU+Y3Vyc2NyPC9DT0RFPiBkaXJlY3RseS4KK0NoYW5nZXMgc2hvdWxkIGJlIG1hZGUgdG8gdGhyb3VnaCB0aGUgQVBJLCBhbmQgdGhlbiB0aGUgcm91dGluZQorPENPREU+cmVmcmVzaCgpPC9DT0RFPiAob3IgPENPREU+d3JlZnJlc2goKTwvQ09ERT4pIGNhbGxlZC4gPFA+CisKK01hbnkgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHRvIHVzZSA8Q09ERT5zdGRzY3I8L0NPREU+IGFzIGEgZGVmYXVsdCBzY3JlZW4uICBGb3IKK2V4YW1wbGUsIHRvIGFkZCBhIGNoYXJhY3RlciB0byA8Q09ERT5zdGRzY3I8L0NPREU+LCBvbmUgY2FsbHMgPENPREU+YWRkY2goKTwvQ09ERT4gd2l0aAordGhlIGRlc2lyZWQgY2hhcmFjdGVyIGFzIGFyZ3VtZW50LiAgVG8gd3JpdGUgdG8gYSBkaWZmZXJlbnQgd2luZG93LiB1c2UgdGhlCityb3V0aW5lIDxDT0RFPndhZGRjaCgpPC9DT0RFPiAoZm9yIGB3J2luZG93LXNwZWNpZmljIGFkZGNoKCkpIGlzIHByb3ZpZGVkLiAgVGhpcworY29udmVudGlvbiBvZiBwcmVwZW5kaW5nIGZ1bmN0aW9uIG5hbWVzIHdpdGggYSBgdycgd2hlbiB0aGV5IGFyZSB0byBiZQorYXBwbGllZCB0byBzcGVjaWZpYyB3aW5kb3dzIGlzIGNvbnNpc3RlbnQuICBUaGUgb25seSByb3V0aW5lcyB3aGljaCBkbyBub3QKK2ZvbGxvdyBpdCBhcmUgdGhvc2UgZm9yIHdoaWNoIGEgd2luZG93IG11c3QgYWx3YXlzIGJlIHNwZWNpZmllZC4gPFA+CisKK0luIG9yZGVyIHRvIG1vdmUgdGhlIGN1cnJlbnQgKHksIHgpIGNvb3JkaW5hdGVzIGZyb20gb25lIHBvaW50IHRvIGFub3RoZXIsIHRoZQorcm91dGluZXMgPENPREU+bW92ZSgpPC9DT0RFPiBhbmQgPENPREU+d21vdmUoKTwvQ09ERT4gYXJlIHByb3ZpZGVkLiAgSG93ZXZlciwgaXQgaXMKK29mdGVuIGRlc2lyYWJsZSB0byBmaXJzdCBtb3ZlIGFuZCB0aGVuIHBlcmZvcm0gc29tZSBJL08gb3BlcmF0aW9uLiAgSW4gb3JkZXIgdG8KK2F2b2lkIGNsdW1zaW5lc3MsIG1vc3QgSS9PIHJvdXRpbmVzIGNhbiBiZSBwcmVjZWRlZCBieSB0aGUgcHJlZml4ICdtdicgYW5kCit0aGUgZGVzaXJlZCAoeSwgeCkgY29vcmRpbmF0ZXMgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLiAgRm9yCitleGFtcGxlLCB0aGUgY2FsbHMKKworPFBSRT4KKwkgIG1vdmUoeSwgeCk7CisJICBhZGRjaChjaCk7Cis8L1BSRT4KKworY2FuIGJlIHJlcGxhY2VkIGJ5CisKKzxQUkU+CisJICBtdmFkZGNoKHksIHgsIGNoKTsKKzwvUFJFPgorCithbmQKKworPFBSRT4KKwkgIHdtb3ZlKHdpbiwgeSwgeCk7CisJICB3YWRkY2god2luLCBjaCk7Cis8L1BSRT4KKworY2FuIGJlIHJlcGxhY2VkIGJ5CisKKzxQUkU+CisJICBtdndhZGRjaCh3aW4sIHksIHgsIGNoKTsKKzwvUFJFPgorCitOb3RlIHRoYXQgdGhlIHdpbmRvdyBkZXNjcmlwdGlvbiBwb2ludGVyICh3aW4pIGNvbWVzIGJlZm9yZSB0aGUgYWRkZWQgKHksIHgpCitjb29yZGluYXRlcy4gIElmIGEgZnVuY3Rpb24gcmVxdWlyZXMgYSB3aW5kb3cgcG9pbnRlciwgaXQgaXMgYWx3YXlzIHRoZSBmaXJzdAorcGFyYW1ldGVyIHBhc3NlZC4KKworPEgzPjxBIE5BTUU9InZhcmlhYmxlcyI+VmFyaWFibGVzPC9BPjwvSDM+CisKK1RoZSA8Q09ERT5jdXJzZXM8L0NPREU+IGxpYnJhcnkgc2V0cyBzb21lIHZhcmlhYmxlcyBkZXNjcmliaW5nIHRoZSB0ZXJtaW5hbAorY2FwYWJpbGl0aWVzLgorCis8UFJFPgorICAgICAgdHlwZSAgIG5hbWUgICAgICBkZXNjcmlwdGlvbgorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBpbnQgICAgTElORVMgICAgIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgdGVybWluYWwKKyAgICAgIGludCAgICBDT0xTICAgICAgbnVtYmVyIG9mIGNvbHVtbnMgb24gdGhlIHRlcm1pbmFsCis8L1BSRT4KKworVGhlIDxDT0RFPmN1cnNlcy5oPC9DT0RFPiBhbHNvIGludHJvZHVjZXMgc29tZSA8Q09ERT4jZGVmaW5lPC9DT0RFPiBjb25zdGFudHMgYW5kIHR5cGVzCitvZiBnZW5lcmFsIHVzZWZ1bG5lc3M6CisKKzxETD4KKzxEVD4gPENPREU+Ym9vbDwvQ09ERT4KKzxERD4gYm9vbGVhbiB0eXBlLCBhY3R1YWxseSBhIGBjaGFyJyAoZS5nLiwgPENPREU+Ym9vbCBkb25laXQ7PC9DT0RFPikKKzxEVD4gPENPREU+VFJVRTwvQ09ERT4KKzxERD4gYm9vbGVhbiBgdHJ1ZScgZmxhZyAoMSkuCis8RFQ+IDxDT0RFPkZBTFNFPC9DT0RFPgorPEREPiBib29sZWFuIGBmYWxzZScgZmxhZyAoMCkuCis8RFQ+IDxDT0RFPkVSUjwvQ09ERT4KKzxERD4gZXJyb3IgZmxhZyByZXR1cm5lZCBieSByb3V0aW5lcyBvbiBhIGZhaWx1cmUgKC0xKS4KKzxEVD4gPENPREU+T0s8L0NPREU+Cis8REQ+IGVycm9yIGZsYWcgcmV0dXJuZWQgYnkgcm91dGluZXMgd2hlbiB0aGluZ3MgZ28gcmlnaHQuCis8L0RMPgorCis8SDI+PEEgTkFNRT0idXNpbmciPlVzaW5nIHRoZSBMaWJyYXJ5PC9BPjwvSDI+CisKK05vdyB3ZSBkZXNjcmliZSBob3cgdG8gYWN0dWFsbHkgdXNlIHRoZSBzY3JlZW4gcGFja2FnZS4gIEluIGl0LCB3ZSBhc3N1bWUgYWxsCit1cGRhdGluZywgcmVhZGluZywgZXRjLiBpcyBhcHBsaWVkIHRvIDxDT0RFPnN0ZHNjcjwvQ09ERT4uICBUaGVzZSBpbnN0cnVjdGlvbnMgd2lsbAord29yayBvbiBhbnkgd2luZG93LCBwcm92aWRpbmcgeW91IGNoYW5nZSB0aGUgZnVuY3Rpb24gbmFtZXMgYW5kIHBhcmFtZXRlcnMgYXMKK21lbnRpb25lZCBhYm92ZS4gPFA+CisKK0hlcmUgaXMgYSBzYW1wbGUgcHJvZ3JhbSB0byBtb3RpdmF0ZSB0aGUgZGlzY3Vzc2lvbjoKKworPFBSRT4KKyNpbmNsdWRlICZsdDtjdXJzZXMuaCZndDsKKyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKKworc3RhdGljIHZvaWQgZmluaXNoKGludCBzaWcpOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgbnVtID0gMDsKKworICAgIC8qIGluaXRpYWxpemUgeW91ciBub24tY3Vyc2VzIGRhdGEgc3RydWN0dXJlcyBoZXJlICovCisKKyAgICAodm9pZCkgc2lnbmFsKFNJR0lOVCwgZmluaXNoKTsgICAgICAvKiBhcnJhbmdlIGludGVycnVwdHMgdG8gdGVybWluYXRlICovCisKKyAgICAodm9pZCkgaW5pdHNjcigpOyAgICAgIC8qIGluaXRpYWxpemUgdGhlIGN1cnNlcyBsaWJyYXJ5ICovCisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7ICAvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBub25sKCk7ICAgICAgICAgLyogdGVsbCBjdXJzZXMgbm90IHRvIGRvIE5MLSZndDtDUi9OTCBvbiBvdXRwdXQgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7ICAgICAgIC8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgZWNobygpOyAgICAgICAgIC8qIGVjaG8gaW5wdXQgLSBpbiBjb2xvciAqLworCisgICAgaWYgKGhhc19jb2xvcnMoKSkKKyAgICB7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2ltcGxlIGNvbG9yIGFzc2lnbm1lbnQsIG9mdGVuIGFsbCB3ZSBuZWVkLiAgQ29sb3IgcGFpciAwIGNhbm5vdAorCSAqIGJlIHJlZGVmaW5lZC4gIFRoaXMgZXhhbXBsZSB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgY29sb3IKKwkgKiBwYWlyIGFzIGZvciB0aGUgZm9yZWdyb3VuZCBjb2xvciwgdGhvdWdoIG9mIGNvdXJzZSB0aGF0IGlzIG5vdAorCSAqIG5lY2Vzc2FyeToKKyAgICAgICAgICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsICAgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9HUkVFTiwgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigzLCBDT0xPUl9ZRUxMT1csICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig0LCBDT0xPUl9CTFVFLCAgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig1LCBDT0xPUl9DWUFOLCAgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig2LCBDT0xPUl9NQUdFTlRBLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig3LCBDT0xPUl9XSElURSwgICBDT0xPUl9CTEFDSyk7CisgICAgfQorCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGludCBjID0gZ2V0Y2goKTsgICAgIC8qIHJlZnJlc2gsIGFjY2VwdCBzaW5nbGUga2V5c3Ryb2tlIG9mIGlucHV0ICovCisJYXR0cnNldChDT0xPUl9QQUlSKG51bSAlIDgpKTsKKwludW0rKzsKKworICAgICAgICAvKiBwcm9jZXNzIHRoZSBjb21tYW5kIGtleXN0cm9rZSAqLworICAgIH0KKworICAgIGZpbmlzaCgwKTsgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lICovCit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaChpbnQgc2lnKQoreworICAgIGVuZHdpbigpOworCisgICAgLyogZG8geW91ciBub24tY3Vyc2VzIHdyYXB1cCBoZXJlICovCisKKyAgICBleGl0KDApOworfQorPC9QUkU+CisKKzxIMz48QSBOQU1FPSJzdGFydGluZyI+U3RhcnRpbmcgdXA8L0E+PC9IMz4KKworSW4gb3JkZXIgdG8gdXNlIHRoZSBzY3JlZW4gcGFja2FnZSwgdGhlIHJvdXRpbmVzIG11c3Qga25vdyBhYm91dCB0ZXJtaW5hbAorY2hhcmFjdGVyaXN0aWNzLCBhbmQgdGhlIHNwYWNlIGZvciA8Q09ERT5jdXJzY3I8L0NPREU+IGFuZCA8Q09ERT5zdGRzY3I8L0NPREU+IG11c3QgYmUKK2FsbG9jYXRlZC4gIFRoZXNlIGZ1bmN0aW9uIDxDT0RFPmluaXRzY3IoKTwvQ09ERT4gZG9lcyBib3RoIHRoZXNlIHRoaW5ncy4gU2luY2UgaXQKK211c3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB3aW5kb3dzLCBpdCBjYW4gb3ZlcmZsb3cgbWVtb3J5IHdoZW4gYXR0ZW1wdGluZyB0bworZG8gc28uIE9uIHRoZSByYXJlIG9jY2FzaW9ucyB0aGlzIGhhcHBlbnMsIDxDT0RFPmluaXRzY3IoKTwvQ09ERT4gd2lsbCB0ZXJtaW5hdGUKK3RoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4gIDxDT0RFPmluaXRzY3IoKTwvQ09ERT4gbXVzdCBhbHdheXMgYmUgY2FsbGVkCitiZWZvcmUgYW55IG9mIHRoZSByb3V0aW5lcyB3aGljaCBhZmZlY3Qgd2luZG93cyBhcmUgdXNlZC4gIElmIGl0IGlzIG5vdCwgdGhlCitwcm9ncmFtIHdpbGwgY29yZSBkdW1wIGFzIHNvb24gYXMgZWl0aGVyIDxDT0RFPmN1cnNjcjwvQ09ERT4gb3IgPENPREU+c3Rkc2NyPC9DT0RFPiBhcmUKK3JlZmVyZW5jZWQuICBIb3dldmVyLCBpdCBpcyB1c3VhbGx5IGJlc3QgdG8gd2FpdCB0byBjYWxsIGl0IHVudGlsIGFmdGVyIHlvdSBhcmUKK3N1cmUgeW91IHdpbGwgbmVlZCBpdCwgbGlrZSBhZnRlciBjaGVja2luZyBmb3Igc3RhcnR1cCBlcnJvcnMuICBUZXJtaW5hbCBzdGF0dXMKK2NoYW5naW5nIHJvdXRpbmVzIGxpa2UgPENPREU+bmwoKTwvQ09ERT4gYW5kIDxDT0RFPmNicmVhaygpPC9DT0RFPiBzaG91bGQgYmUgY2FsbGVkCithZnRlciA8Q09ERT5pbml0c2NyKCk8L0NPREU+LiA8UD4KKworT25jZSB0aGUgc2NyZWVuIHdpbmRvd3MgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgeW91IGNhbiBzZXQgdGhlbSB1cCBmb3IKK3lvdXIgcHJvZ3JhbS4gIElmIHlvdSB3YW50IHRvLCBzYXksIGFsbG93IGEgc2NyZWVuIHRvIHNjcm9sbCwgdXNlCis8Q09ERT5zY3JvbGxvaygpPC9DT0RFPi4gIElmIHlvdSB3YW50IHRoZSBjdXJzb3IgdG8gYmUgbGVmdCBpbiBwbGFjZSBhZnRlcgordGhlIGxhc3QgY2hhbmdlLCB1c2UgPENPREU+bGVhdmVvaygpPC9DT0RFPi4gIElmIHRoaXMgaXNuJ3QgZG9uZSwKKzxDT0RFPnJlZnJlc2goKTwvQ09ERT4gd2lsbCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHdpbmRvdydzIGN1cnJlbnQgKHksIHgpCitjb29yZGluYXRlcyBhZnRlciB1cGRhdGluZyBpdC4gPFA+CisKK1lvdSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzIG9mIHlvdXIgb3duIHVzaW5nIHRoZSBmdW5jdGlvbnMgPENPREU+bmV3d2luKCk8L0NPREU+LAorPENPREU+ZGVyd2luKCk8L0NPREU+LCBhbmQgPENPREU+c3Vid2luKCk8L0NPREU+LiAgVGhlIHJvdXRpbmUgPENPREU+ZGVsd2luKCk8L0NPREU+IHdpbGwKK2FsbG93IHlvdSB0byBnZXQgcmlkIG9mIG9sZCB3aW5kb3dzLiAgQWxsIHRoZSBvcHRpb25zIGRlc2NyaWJlZCBhYm92ZSBjYW4gYmUKK2FwcGxpZWQgdG8gYW55IHdpbmRvdy4KKworPEgzPjxBIE5BTUU9Im91dHB1dCI+T3V0cHV0PC9BPjwvSDM+CisKK05vdyB0aGF0IHdlIGhhdmUgc2V0IHRoaW5ncyB1cCwgd2Ugd2lsbCB3YW50IHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgdGVybWluYWwuCitUaGUgYmFzaWMgZnVuY3Rpb25zIHVzZWQgdG8gY2hhbmdlIHdoYXQgd2lsbCBnbyBvbiBhIHdpbmRvdyBhcmUKKzxDT0RFPmFkZGNoKCk8L0NPREU+IGFuZCA8Q09ERT5tb3ZlKCk8L0NPREU+LiAgPENPREU+YWRkY2goKTwvQ09ERT4gYWRkcyBhIGNoYXJhY3RlciBhdCB0aGUKK2N1cnJlbnQgKHksIHgpIGNvb3JkaW5hdGVzLiAgPENPREU+bW92ZSgpPC9DT0RFPiBjaGFuZ2VzIHRoZSBjdXJyZW50ICh5LCB4KQorY29vcmRpbmF0ZXMgdG8gd2hhdGV2ZXIgeW91IHdhbnQgdGhlbSB0byBiZS4gIEl0IHJldHVybnMgPENPREU+RVJSPC9DT0RFPiBpZiB5b3UKK3RyeSB0byBtb3ZlIG9mZiB0aGUgd2luZG93LiAgQXMgbWVudGlvbmVkIGFib3ZlLCB5b3UgY2FuIGNvbWJpbmUgdGhlIHR3byBpbnRvCis8Q09ERT5tdmFkZGNoKCk8L0NPREU+IHRvIGRvIGJvdGggdGhpbmdzIGF0IG9uY2UuIDxQPgorCitUaGUgb3RoZXIgb3V0cHV0IGZ1bmN0aW9ucywgc3VjaCBhcyA8Q09ERT5hZGRzdHIoKTwvQ09ERT4gYW5kIDxDT0RFPnByaW50dygpPC9DT0RFPiwKK2FsbCBjYWxsIDxDT0RFPmFkZGNoKCk8L0NPREU+IHRvIGFkZCBjaGFyYWN0ZXJzIHRvIHRoZSB3aW5kb3cuIDxQPgorCitBZnRlciB5b3UgaGF2ZSBwdXQgb24gdGhlIHdpbmRvdyB3aGF0IHlvdSB3YW50IHRoZXJlLCB3aGVuIHlvdSB3YW50IHRoZSBwb3J0aW9uCitvZiB0aGUgdGVybWluYWwgY292ZXJlZCBieSB0aGUgd2luZG93IHRvIGJlIG1hZGUgdG8gbG9vayBsaWtlIGl0LCB5b3UgbXVzdCBjYWxsCis8Q09ERT5yZWZyZXNoKCk8L0NPREU+LiAgSW4gb3JkZXIgdG8gb3B0aW1pemUgZmluZGluZyBjaGFuZ2VzLCA8Q09ERT5yZWZyZXNoKCk8L0NPREU+Cithc3N1bWVzIHRoYXQgYW55IHBhcnQgb2YgdGhlIHdpbmRvdyBub3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAorPENPREU+cmVmcmVzaCgpPC9DT0RFPiBvZiB0aGF0IHdpbmRvdyBoYXMgbm90IGJlZW4gY2hhbmdlZCBvbiB0aGUgdGVybWluYWwsIGkuZS4sCit0aGF0IHlvdSBoYXZlIG5vdCByZWZyZXNoZWQgYSBwb3J0aW9uIG9mIHRoZSB0ZXJtaW5hbCB3aXRoIGFuIG92ZXJsYXBwaW5nCit3aW5kb3cuICBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgdGhlIHJvdXRpbmUgPENPREU+dG91Y2h3aW4oKTwvQ09ERT4gaXMgcHJvdmlkZWQKK3RvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBlbnRpcmUgd2luZG93IGhhcyBiZWVuIGNoYW5nZWQsIHRodXMgbWFraW5nCis8Q09ERT5yZWZyZXNoKCk8L0NPREU+IGNoZWNrIHRoZSB3aG9sZSBzdWJzZWN0aW9uIG9mIHRoZSB0ZXJtaW5hbCBmb3IgY2hhbmdlcy4gPFA+CisKK0lmIHlvdSBjYWxsIDxDT0RFPndyZWZyZXNoKCk8L0NPREU+IHdpdGggPENPREU+Y3Vyc2NyPC9DT0RFPiBhcyBpdHMgYXJndW1lbnQsIGl0IHdpbGwKK21ha2UgdGhlIHNjcmVlbiBsb29rIGxpa2UgPENPREU+Y3Vyc2NyPC9DT0RFPiB0aGlua3MgaXQgbG9va3MgbGlrZS4gIFRoaXMgaXMgdXNlZnVsCitmb3IgaW1wbGVtZW50aW5nIGEgY29tbWFuZCB3aGljaCB3b3VsZCByZWRyYXcgdGhlIHNjcmVlbiBpbiBjYXNlIGl0IGdldCBtZXNzZWQKK3VwLgorCis8SDM+PEEgTkFNRT0iaW5wdXQiPklucHV0PC9BPjwvSDM+CisKK1RoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uIHRvIDxDT0RFPmFkZGNoKCk8L0NPREU+IGlzIDxDT0RFPmdldGNoKCk8L0NPREU+IHdoaWNoLCBpZgorZWNobyBpcyBzZXQsIHdpbGwgY2FsbCA8Q09ERT5hZGRjaCgpPC9DT0RFPiB0byBlY2hvIHRoZSBjaGFyYWN0ZXIuICBTaW5jZSB0aGUKK3NjcmVlbiBwYWNrYWdlIG5lZWRzIHRvIGtub3cgd2hhdCBpcyBvbiB0aGUgdGVybWluYWwgYXQgYWxsIHRpbWVzLCBpZgorY2hhcmFjdGVycyBhcmUgdG8gYmUgZWNob2VkLCB0aGUgdHR5IG11c3QgYmUgaW4gcmF3IG9yIGNicmVhayBtb2RlLiAgU2luY2UKK2luaXRpYWxseSB0aGUgdGVybWluYWwgaGFzIGVjaG9pbmcgZW5hYmxlZCBhbmQgaXMgaW4gb3JkaW5hcnkgYGBjb29rZWQnJyBtb2RlLAorb25lIG9yIHRoZSBvdGhlciBoYXMgdG8gY2hhbmdlZCBiZWZvcmUgY2FsbGluZyA8Q09ERT5nZXRjaCgpPC9DT0RFPjsgb3RoZXJ3aXNlLAordGhlIHByb2dyYW0ncyBvdXRwdXQgd2lsbCBiZSB1bnByZWRpY3RhYmxlLiA8UD4KKworV2hlbiB5b3UgbmVlZCB0byBhY2NlcHQgbGluZS1vcmllbnRlZCBpbnB1dCBpbiBhIHdpbmRvdywgdGhlIGZ1bmN0aW9ucworPENPREU+d2dldHN0cigpPC9DT0RFPiBhbmQgZnJpZW5kcyBhcmUgYXZhaWxhYmxlLiAgVGhlcmUgaXMgZXZlbiBhIDxDT0RFPndzY2FudygpPC9DT0RFPgorZnVuY3Rpb24gdGhhdCBjYW4gZG8gPENPREU+c2NhbmYoKTwvQ09ERT4oMyktc3R5bGUgbXVsdGktZmllbGQgcGFyc2luZyBvbiB3aW5kb3cKK2lucHV0LiAgVGhlc2UgcHNldWRvLWxpbmUtb3JpZW50ZWQgZnVuY3Rpb25zIHR1cm4gb24gZWNob2luZyB3aGlsZSB0aGV5CitleGVjdXRlLiA8UD4KKworVGhlIGV4YW1wbGUgY29kZSBhYm92ZSB1c2VzIHRoZSBjYWxsIDxDT0RFPmtleXBhZChzdGRzY3IsIFRSVUUpPC9DT0RFPiB0byBlbmFibGUKK3N1cHBvcnQgZm9yIGZ1bmN0aW9uLWtleSBtYXBwaW5nLiAgV2l0aCB0aGlzIGZlYXR1cmUsIHRoZSA8Q09ERT5nZXRjaCgpPC9DT0RFPiBjb2RlCit3YXRjaGVzIHRoZSBpbnB1dCBzdHJlYW0gZm9yIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIGFycm93IGFuZAorZnVuY3Rpb24ga2V5cy4gIFRoZXNlIHNlcXVlbmNlcyBhcmUgcmV0dXJuZWQgYXMgcHNldWRvLWNoYXJhY3RlciB2YWx1ZXMuICBUaGUKKzxDT0RFPiNkZWZpbmU8L0NPREU+IHZhbHVlcyByZXR1cm5lZCBhcmUgbGlzdGVkIGluIHRoZSA8Q09ERT5jdXJzZXMuaDwvQ09ERT4gVGhlCittYXBwaW5nIGZyb20gc2VxdWVuY2VzIHRvIDxDT0RFPiNkZWZpbmU8L0NPREU+IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5Cis8Q09ERT5rZXlfPC9DT0RFPiBjYXBhYmlsaXRpZXMgaW4gdGhlIHRlcm1pbmFsJ3MgdGVybWluZm8gZW50cnkuCisKKzxIMz48QSBOQU1FPSJmb3Jtc2NoYXJzIj5Vc2luZyBGb3JtcyBDaGFyYWN0ZXJzPC9BPjwvSDM+CisKK1RoZSA8Q09ERT5hZGRjaCgpPC9DT0RFPiBmdW5jdGlvbiAoYW5kIHNvbWUgb3RoZXJzLCBpbmNsdWRpbmcgPENPREU+Ym94KCk8L0NPREU+IGFuZAorPENPREU+Ym9yZGVyKCk8L0NPREU+KSBjYW4gYWNjZXB0IHNvbWUgcHNldWRvLWNoYXJhY3RlciBhcmd1bWVudHMgd2hpY2ggYXJlIHNwZWNpYWxseQorZGVmaW5lZCBieSA8Q09ERT5uY3Vyc2VzPC9DT0RFPi4gIFRoZXNlIGFyZSA8Q09ERT4jZGVmaW5lPC9DT0RFPiB2YWx1ZXMgc2V0IHVwIGluCit0aGUgPENPREU+Y3Vyc2VzLmg8L0NPREU+IGhlYWRlcjsgc2VlIHRoZXJlIGZvciBhIGNvbXBsZXRlIGxpc3QgKGxvb2sgZm9yCit0aGUgcHJlZml4IDxDT0RFPkFDU188L0NPREU+KS4gPFA+CisKK1RoZSBtb3N0IHVzZWZ1bCBvZiB0aGUgQUNTIGRlZmluZXMgYXJlIHRoZSBmb3Jtcy1kcmF3aW5nIGNoYXJhY3RlcnMuICBZb3UgY2FuCit1c2UgdGhlc2UgdG8gZHJhdyBib3hlcyBhbmQgc2ltcGxlIGdyYXBocyBvbiB0aGUgc2NyZWVuLiAgSWYgdGhlIHRlcm1pbmFsCitkb2VzIG5vdCBoYXZlIHN1Y2ggY2hhcmFjdGVycywgPENPREU+Y3Vyc2VzLmg8L0NPREU+IHdpbGwgbWFwIHRoZW0gdG8gYQorcmVjb2duaXphYmxlICh0aG91Z2ggdWdseSkgc2V0IG9mIEFTQ0lJIGRlZmF1bHRzLgorCis8SDM+PEEgTkFNRT0iYXR0cmlidXRlcyI+Q2hhcmFjdGVyIEF0dHJpYnV0ZXMgYW5kIENvbG9yPC9BPjwvSDM+CisKK1RoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBwYWNrYWdlIHN1cHBvcnRzIHNjcmVlbiBoaWdobGlnaHRzIGluY2x1ZGluZyBzdGFuZG91dCwKK3JldmVyc2UtdmlkZW8sIHVuZGVybGluZSwgYW5kIGJsaW5rLiAgSXQgYWxzbyBzdXBwb3J0cyBjb2xvciwgd2hpY2ggaXMgdHJlYXRlZAorYXMgYW5vdGhlciBraW5kIG9mIGhpZ2hsaWdodC4gPFA+CisKK0hpZ2hsaWdodHMgYXJlIGVuY29kZWQsIGludGVybmFsbHksIGFzIGhpZ2ggYml0cyBvZiB0aGUgcHNldWRvLWNoYXJhY3RlciB0eXBlCisoPENPREU+Y2h0eXBlPC9DT0RFPikgdGhhdCA8Q09ERT5jdXJzZXMuaDwvQ09ERT4gdXNlcyB0byByZXByZXNlbnQgdGhlIGNvbnRlbnRzIG9mIGEKK3NjcmVlbiBjZWxsLiAgU2VlIHRoZSA8Q09ERT5jdXJzZXMuaDwvQ09ERT4gaGVhZGVyIGZpbGUgZm9yIGEgY29tcGxldGUgbGlzdCBvZgoraGlnaGxpZ2h0IG1hc2sgdmFsdWVzIChsb29rIGZvciB0aGUgcHJlZml4IDxDT0RFPkFfPC9DT0RFPikuPFA+CisKK1RoZXJlIGFyZSB0d28gd2F5cyB0byBtYWtlIGhpZ2hsaWdodHMuICBPbmUgaXMgdG8gbG9naWNhbC1vciB0aGUgdmFsdWUgb2YgdGhlCitoaWdobGlnaHRzIHlvdSB3YW50IGludG8gdGhlIGNoYXJhY3RlciBhcmd1bWVudCBvZiBhbiA8Q09ERT5hZGRjaCgpPC9DT0RFPiBjYWxsLAorb3IgYW55IG90aGVyIG91dHB1dCBjYWxsIHRoYXQgdGFrZXMgYSA8Q09ERT5jaHR5cGU8L0NPREU+IGFyZ3VtZW50LiA8UD4KKworVGhlIG90aGVyIGlzIHRvIHNldCB0aGUgY3VycmVudC1oaWdobGlnaHQgdmFsdWUuICBUaGlzIGlzIGxvZ2ljYWwtb3InZWQgd2l0aAorYW55IGhpZ2hsaWdodCB5b3Ugc3BlY2lmeSB0aGUgZmlyc3Qgd2F5LiAgWW91IGRvIHRoaXMgd2l0aCB0aGUgZnVuY3Rpb25zCis8Q09ERT5hdHRyb24oKTwvQ09ERT4sIDxDT0RFPmF0dHJvZmYoKTwvQ09ERT4sIGFuZCA8Q09ERT5hdHRyc2V0KCk8L0NPREU+OyBzZWUgdGhlIG1hbnVhbAorcGFnZXMgZm9yIGRldGFpbHMuCisKK0NvbG9yIGlzIGEgc3BlY2lhbCBraW5kIG9mIGhpZ2hsaWdodC4gIFRoZSBwYWNrYWdlIGFjdHVhbGx5IHRoaW5rcyBpbiB0ZXJtcworb2YgY29sb3IgcGFpcnMsIGNvbWJpbmF0aW9ucyBvZiBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycy4gIFRoZSBzYW1wbGUKK2NvZGUgYWJvdmUgc2V0cyB1cCBlaWdodCBjb2xvciBwYWlycywgYWxsIG9mIHRoZSBndWFyYW50ZWVkLWF2YWlsYWJsZSBjb2xvcnMKK29uIGJsYWNrLiAgTm90ZSB0aGF0IGVhY2ggY29sb3IgcGFpciBpcywgaW4gZWZmZWN0LCBnaXZlbiB0aGUgbmFtZSBvZiBpdHMKK2ZvcmVncm91bmQgY29sb3IuICBBbnkgb3RoZXIgcmFuZ2Ugb2YgZWlnaHQgbm9uLWNvbmZsaWN0aW5nIHZhbHVlcyBjb3VsZAoraGF2ZSBiZWVuIHVzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50cyBvZiB0aGUgPENPREU+aW5pdF9wYWlyKCk8L0NPREU+IHZhbHVlcy4gPFA+CisKK09uY2UgeW91J3ZlIGRvbmUgYW4gPENPREU+aW5pdF9wYWlyKCk8L0NPREU+IHRoYXQgY3JlYXRlcyBjb2xvci1wYWlyIE4sIHlvdSBjYW4KK3VzZSA8Q09ERT5DT0xPUl9QQUlSKE4pPC9DT0RFPiBhcyBhIGhpZ2hsaWdodCB0aGF0IGludm9rZXMgdGhhdCBwYXJ0aWN1bGFyCitjb2xvciBjb21iaW5hdGlvbi4gIE5vdGUgdGhhdCA8Q09ERT5DT0xPUl9QQUlSKE4pPC9DT0RFPiwgZm9yIGNvbnN0YW50IE4sCitpcyBpdHNlbGYgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgYW5kIGNhbiBiZSB1c2VkIGluIGluaXRpYWxpemVycy4KKworPEgzPjxBIE5BTUU9Im1vdXNlIj5Nb3VzZSBJbnRlcmZhY2luZzwvQT48L0gzPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSBhbHNvIHByb3ZpZGVzIGEgbW91c2UgaW50ZXJmYWNlLgorPCEtLSBUaGUgJ25vdGUnIHRhZyBpcyBub3QgcG9ydGFibGUgZW5vdWdoIC0tPgorPGJsb2NrcXVvdGU+Cis8c3Ryb25nPk5PVEU6PC9zdHJvbmc+IHRoaXMgZmFjaWxpdHkgaXMgc3BlY2lmaWMgdG8gPENPREU+bmN1cnNlczwvQ09ERT4sIGl0IGlzIG5vdCBwYXJ0IG9mIGVpdGhlcgordGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIG5vciBvZiBTeXN0ZW0gViBSZWxlYXNlIDQsIG5vciBCU0QgY3Vyc2VzLgorU3lzdGVtIFYgUmVsZWFzZSA0IGN1cnNlcyBjb250YWlucyBjb2RlIHdpdGggc2ltaWxhciBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsCitob3dldmVyIGl0IGlzIG5vdCBkb2N1bWVudGVkLiAgT3RoZXIgdGhhbiBieSBkaXNhc3NlbWJsaW5nIHRoZSBsaWJyYXJ5LCB3ZQoraGF2ZSBubyB3YXkgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoYXQgbW91c2UgY29kZSB3b3Jrcy4KK1RodXMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB3cmFwIG1vdXNlLXJlbGF0ZWQgY29kZSBpbiBhbiAjaWZkZWYgdXNpbmcgdGhlCitmZWF0dXJlIG1hY3JvIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiBzbyBpdCB3aWxsIG5vdCBiZSBjb21waWxlZCBhbmQgbGlua2VkCitvbiBub24tbmN1cnNlcyBzeXN0ZW1zLgorPC9ibG9ja3F1b3RlPgorCitQcmVzZW50bHksIG1vdXNlIGV2ZW50IHJlcG9ydGluZyB3b3JrcyBpbiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50czoKKzx1bD4KKzxsaT54dGVybSBhbmQgc2ltaWxhciBwcm9ncmFtcyBzdWNoIGFzIHJ4dnQuCis8bGk+TGludXggY29uc29sZSwgd2hlbiBjb25maWd1cmVkIHdpdGggPENPREU+Z3BtPC9DT0RFPigxKSwgQWxlc3NhbmRybworUnViaW5pJ3MgbW91c2Ugc2VydmVyLgorPGxpPkZyZWVCU0Qgc3lzbW91c2UgKGNvbnNvbGUpCis8bGk+T1MvMiBFTVgKKzwvdWw+Cis8UD4KK1RoZSBtb3VzZSBpbnRlcmZhY2UgaXMgdmVyeSBzaW1wbGUuICBUbyBhY3RpdmF0ZSBpdCwgeW91IHVzZSB0aGUgZnVuY3Rpb24KKzxDT0RFPm1vdXNlbWFzaygpPC9DT0RFPiwgcGFzc2luZyBpdCBhcyBmaXJzdCBhcmd1bWVudCBhIGJpdC1tYXNrIHRoYXQgc3BlY2lmaWVzCit3aGF0IGtpbmRzIG9mIGV2ZW50cyB5b3Ugd2FudCB5b3VyIHByb2dyYW0gdG8gYmUgYWJsZSB0byBzZWUuICBJdCB3aWxsCityZXR1cm4gdGhlIGJpdC1tYXNrIG9mIGV2ZW50cyB0aGF0IGFjdHVhbGx5IGJlY29tZSB2aXNpYmxlLCB3aGljaCBtYXkgZGlmZmVyCitmcm9tIHRoZSBhcmd1bWVudCBpZiB0aGUgbW91c2UgZGV2aWNlIGlzIG5vdCBjYXBhYmxlIG9mIHJlcG9ydGluZyBzb21lIG9mCit0aGUgZXZlbnQgdHlwZXMgeW91IHNwZWNpZnkuIDxQPgorCitPbmNlIHRoZSBtb3VzZSBpcyBhY3RpdmUsIHlvdXIgYXBwbGljYXRpb24ncyBjb21tYW5kIGxvb3Agc2hvdWxkIHdhdGNoCitmb3IgYSByZXR1cm4gdmFsdWUgb2YgPENPREU+S0VZX01PVVNFPC9DT0RFPiBmcm9tIDxDT0RFPndnZXRjaCgpPC9DT0RFPi4gIFdoZW4KK3lvdSBzZWUgdGhpcywgYSBtb3VzZSBldmVudCByZXBvcnQgaGFzIGJlZW4gcXVldWVkLiAgVG8gcGljayBpdCBvZmYKK3RoZSBxdWV1ZSwgdXNlIHRoZSBmdW5jdGlvbiA8Q09ERT5nZXRtb3VzZSgpPC9DT0RFPiAoeW91IG11c3QgZG8gdGhpcyBiZWZvcmUKK3RoZSBuZXh0IDxDT0RFPndnZXRjaCgpPC9DT0RFPiwgb3RoZXJ3aXNlIGFub3RoZXIgbW91c2UgZXZlbnQgbWlnaHQgY29tZQoraW4gYW5kIG1ha2UgdGhlIGZpcnN0IG9uZSBpbmFjY2Vzc2libGUpLiA8UD4KKworRWFjaCBjYWxsIHRvIDxDT0RFPmdldG1vdXNlKCk8L0NPREU+IGZpbGxzIGEgc3RydWN0dXJlICh0aGUgYWRkcmVzcyBvZiB3aGljaCB5b3UnbGwKK3Bhc3MgaXQpIHdpdGggbW91c2UgZXZlbnQgZGF0YS4gIFRoZSBldmVudCBkYXRhIGluY2x1ZGVzIHplcm8tb3JpZ2luLAorc2NyZWVuLXJlbGF0aXZlIGNoYXJhY3Rlci1jZWxsIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyLiAgSXQgYWxzbworaW5jbHVkZXMgYW4gZXZlbnQgbWFzay4gIEJpdHMgaW4gdGhpcyBtYXNrIHdpbGwgYmUgc2V0LCBjb3JyZXNwb25kaW5nCit0byB0aGUgZXZlbnQgdHlwZSBiZWluZyByZXBvcnRlZC4gPFA+CisKK1RoZSBtb3VzZSBzdHJ1Y3R1cmUgY29udGFpbnMgdHdvIGFkZGl0aW9uYWwgZmllbGRzIHdoaWNoIG1heSBiZQorc2lnbmlmaWNhbnQgaW4gdGhlIGZ1dHVyZSBhcyBuY3Vyc2VzIGludGVyZmFjZXMgdG8gbmV3IGtpbmRzIG9mCitwb2ludGluZyBkZXZpY2UuICBJbiBhZGRpdGlvbiB0byB4IGFuZCB5IGNvb3JkaW5hdGVzLCB0aGVyZSBpcyBhIHNsb3QKK2ZvciBhIHogY29vcmRpbmF0ZTsgdGhpcyBtaWdodCBiZSB1c2VmdWwgd2l0aCB0b3VjaC1zY3JlZW5zIHRoYXQgY2FuCityZXR1cm4gYSBwcmVzc3VyZSBvciBkdXJhdGlvbiBwYXJhbWV0ZXIuICBUaGVyZSBpcyBhbHNvIGEgZGV2aWNlIElECitmaWVsZCwgd2hpY2ggY291bGQgYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHBvaW50aW5nCitkZXZpY2VzLiA8UD4KKworVGhlIGNsYXNzIG9mIHZpc2libGUgZXZlbnRzIG1heSBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIHZpYSA8Q09ERT5tb3VzZW1hc2soKTwvQ09ERT4uCitFdmVudHMgdGhhdCBjYW4gYmUgcmVwb3J0ZWQgaW5jbHVkZSBwcmVzc2VzLCByZWxlYXNlcywgc2luZ2xlLSwgZG91YmxlLSBhbmQKK3RyaXBsZS1jbGlja3MgKHlvdSBjYW4gc2V0IHRoZSBtYXhpbXVtIGJ1dHRvbi1kb3duIHRpbWUgZm9yIGNsaWNrcykuICBJZgoreW91IGRvbid0IG1ha2UgY2xpY2tzIHZpc2libGUsIHRoZXkgd2lsbCBiZSByZXBvcnRlZCBhcyBwcmVzcy1yZWxlYXNlCitwYWlycy4gIEluIHNvbWUgZW52aXJvbm1lbnRzLCB0aGUgZXZlbnQgbWFzayBtYXkgaW5jbHVkZSBiaXRzIHJlcG9ydGluZwordGhlIHN0YXRlIG9mIHNoaWZ0LCBhbHQsIGFuZCBjdHJsIGtleXMgb24gdGhlIGtleWJvYXJkIGR1cmluZyB0aGUgZXZlbnQuIDxQPgorCitBIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYSBtb3VzZSBldmVudCBmZWxsIHdpdGhpbiBhIGdpdmVuIHdpbmRvdyBpcworYWxzbyBzdXBwbGllZC4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gc2VlIHdoZXRoZXIgYSBnaXZlbiB3aW5kb3cgc2hvdWxkCitjb25zaWRlciBhIG1vdXNlIGV2ZW50IHJlbGV2YW50IHRvIGl0LiA8UD4KKworQmVjYXVzZSBtb3VzZSBldmVudCByZXBvcnRpbmcgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGluIGFsbAorZW52aXJvbm1lbnRzLCBpdCB3b3VsZCBiZSB1bndpc2UgdG8gYnVpbGQgPENPREU+bmN1cnNlczwvQ09ERT4KK2FwcGxpY2F0aW9ucyB0aGF0IDxFTT5yZXF1aXJlPC9FTT4gdGhlIHVzZSBvZiBhIG1vdXNlLiAgUmF0aGVyLCB5b3Ugc2hvdWxkCit1c2UgdGhlIG1vdXNlIGFzIGEgc2hvcnRjdXQgZm9yIHBvaW50LWFuZC1zaG9vdCBjb21tYW5kcyB5b3VyIGFwcGxpY2F0aW9uCit3b3VsZCBub3JtYWxseSBhY2NlcHQgZnJvbSB0aGUga2V5Ym9hcmQuICBUd28gb2YgdGhlIHRlc3QgZ2FtZXMgaW4gdGhlCis8Q09ERT5uY3Vyc2VzPC9DT0RFPiBkaXN0cmlidXRpb24gKDxDT0RFPmJzPC9DT0RFPiBhbmQgPENPREU+a25pZ2h0PC9DT0RFPikgY29udGFpbgorY29kZSB0aGF0IGlsbHVzdHJhdGVzIGhvdyB0aGlzIGNhbiBiZSBkb25lLiA8UD4KKworU2VlIHRoZSBtYW51YWwgcGFnZSA8Q09ERT5jdXJzX21vdXNlKDNYKTwvQ09ERT4gZm9yIGZ1bGwgZGV0YWlscyBvZiB0aGUKK21vdXNlLWludGVyZmFjZSBmdW5jdGlvbnMuCisKKzxIMz48QSBOQU1FPSJmaW5pc2hpbmciPkZpbmlzaGluZyBVcDwvQT48L0gzPgorCitJbiBvcmRlciB0byBjbGVhbiB1cCBhZnRlciB0aGUgPENPREU+bmN1cnNlczwvQ09ERT4gcm91dGluZXMsIHRoZSByb3V0aW5lCis8Q09ERT5lbmR3aW4oKTwvQ09ERT4gaXMgcHJvdmlkZWQuICBJdCByZXN0b3JlcyB0dHkgbW9kZXMgdG8gd2hhdCB0aGV5IHdlcmUgd2hlbgorPENPREU+aW5pdHNjcigpPC9DT0RFPiB3YXMgZmlyc3QgY2FsbGVkLCBhbmQgbW92ZXMgdGhlIGN1cnNvciBkb3duIHRvIHRoZQorbG93ZXItbGVmdCBjb3JuZXIuICBUaHVzLCBhbnl0aW1lIGFmdGVyIHRoZSBjYWxsIHRvIGluaXRzY3IsIDxDT0RFPmVuZHdpbigpPC9DT0RFPgorc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZXhpdGluZy4KKworPEgyPjxBIE5BTUU9ImZ1bmN0aW9ucyI+RnVuY3Rpb24gRGVzY3JpcHRpb25zPC9BPjwvSDI+CisKK1dlIGRlc2NyaWJlIHRoZSBkZXRhaWxlZCBiZWhhdmlvciBvZiBzb21lIGltcG9ydGFudCBjdXJzZXMgZnVuY3Rpb25zIGhlcmUsIGFzIGEKK3N1cHBsZW1lbnQgdG8gdGhlIG1hbnVhbCBwYWdlIGRlc2NyaXB0aW9ucy4KKworPEgzPjxBIE5BTUU9ImluaXQiPkluaXRpYWxpemF0aW9uIGFuZCBXcmFwdXA8L0E+PC9IMz4KKworPERMPgorPERUPiA8Q09ERT5pbml0c2NyKCk8L0NPREU+Cis8REQ+IFRoZSBmaXJzdCBmdW5jdGlvbiBjYWxsZWQgc2hvdWxkIGFsbW9zdCBhbHdheXMgYmUgPENPREU+aW5pdHNjcigpPC9DT0RFPi4KK1RoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHRlcm1pbmFsIHR5cGUgYW5kCitpbml0aWFsaXplIGN1cnNlcyBkYXRhIHN0cnVjdHVyZXMuIDxDT0RFPmluaXRzY3IoKTwvQ09ERT4gYWxzbyBhcnJhbmdlcyB0aGF0Cit0aGUgZmlyc3QgY2FsbCB0byA8Q09ERT5yZWZyZXNoKCk8L0NPREU+IHdpbGwgY2xlYXIgdGhlIHNjcmVlbi4gIElmIGFuIGVycm9yCitvY2N1cnMgYSBtZXNzYWdlIGlzIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHRoZSBwcm9ncmFtCitleGl0cy4gT3RoZXJ3aXNlIGl0IHJldHVybnMgYSBwb2ludGVyIHRvIHN0ZHNjci4gIEEgZmV3IGZ1bmN0aW9ucyBtYXkgYmUKK2NhbGxlZCBiZWZvcmUgaW5pdHNjciAoPENPREU+c2xrX2luaXQoKTwvQ09ERT4sIDxDT0RFPmZpbHRlcigpPC9DT0RFPiwKKzxDT0RFPnJpcG9mZmxpbmUoKTwvQ09ERT4sIDxDT0RFPnVzZV9lbnYoKTwvQ09ERT4sIGFuZCwgaWYgeW91IGFyZSB1c2luZyBtdWx0aXBsZQordGVybWluYWxzLCA8Q09ERT5uZXd0ZXJtKCk8L0NPREU+LikKKzxEVD4gPENPREU+ZW5kd2luKCk8L0NPREU+Cis8REQ+IFlvdXIgcHJvZ3JhbSBzaG91bGQgYWx3YXlzIGNhbGwgPENPREU+ZW5kd2luKCk8L0NPREU+IGJlZm9yZSBleGl0aW5nIG9yCitzaGVsbGluZyBvdXQgb2YgdGhlIHByb2dyYW0uIFRoaXMgZnVuY3Rpb24gd2lsbCByZXN0b3JlIHR0eSBtb2RlcywKK21vdmUgdGhlIGN1cnNvciB0byB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiwgcmVzZXQgdGhlCit0ZXJtaW5hbCBpbnRvIHRoZSBwcm9wZXIgbm9uLXZpc3VhbCBtb2RlLiAgQ2FsbGluZyA8Q09ERT5yZWZyZXNoKCk8L0NPREU+CitvciA8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPiBhZnRlciBhIHRlbXBvcmFyeSBlc2NhcGUgZnJvbSB0aGUgcHJvZ3JhbSB3aWxsCityZXN0b3JlIHRoZSBuY3Vyc2VzIHNjcmVlbiBmcm9tIGJlZm9yZSB0aGUgZXNjYXBlLgorPERUPiA8Q09ERT5uZXd0ZXJtKHR5cGUsIG9mcCwgaWZwKTwvQ09ERT4KKzxERD4gQSBwcm9ncmFtIHdoaWNoIG91dHB1dHMgdG8gbW9yZSB0aGFuIG9uZSB0ZXJtaW5hbCBzaG91bGQgdXNlCis8Q09ERT5uZXd0ZXJtKCk8L0NPREU+IGluc3RlYWQgb2YgPENPREU+aW5pdHNjcigpPC9DT0RFPi4gIDxDT0RFPm5ld3Rlcm0oKTwvQ09ERT4gc2hvdWxkCitiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCB0ZXJtaW5hbC4gIEl0IHJldHVybnMgYSB2YXJpYWJsZSBvZiB0eXBlCis8Q09ERT5TQ1JFRU4gKjwvQ09ERT4gd2hpY2ggc2hvdWxkIGJlIHNhdmVkIGFzIGEgcmVmZXJlbmNlIHRvIHRoYXQKK3Rlcm1pbmFsLgorKE5PVEU6IGEgU0NSRUVOIHZhcmlhYmxlIGlzIG5vdCBhIDxlbT5zY3JlZW48L2VtPiBpbiB0aGUgc2Vuc2Ugd2UKK2FyZSBkZXNjcmliaW5nIGluIHRoaXMgaW50cm9kdWN0aW9uLCBidXQgYSBjb2xsZWN0aW9uIG9mIAorcGFyYW1ldGVycyB1c2VkIHRvIGFzc2lzdCBpbiBvcHRpbWl6aW5nIHRoZSBkaXNwbGF5LikKK1RoZSBhcmd1bWVudHMgYXJlIHRoZSB0eXBlIG9mIHRoZSB0ZXJtaW5hbCAoYSBzdHJpbmcpIGFuZAorPENPREU+RklMRTwvQ09ERT4gcG9pbnRlcnMgZm9yIHRoZSBvdXRwdXQgYW5kIGlucHV0IG9mIHRoZSB0ZXJtaW5hbC4gIElmCit0eXBlIGlzIE5VTEwgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPENPREU+JFRFUk08L0NPREU+IGlzIHVzZWQuCis8Q09ERT5lbmR3aW4oKTwvQ09ERT4gc2hvdWxkIGNhbGxlZCBvbmNlIGF0IHdyYXB1cCB0aW1lIGZvciBlYWNoIHRlcm1pbmFsCitvcGVuZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKzxEVD4gPENPREU+c2V0X3Rlcm0obmV3KTwvQ09ERT4KKzxERD4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0ZXJtaW5hbCBwcmV2aW91c2x5CitvcGVuZWQgYnkgPENPREU+bmV3dGVybSgpPC9DT0RFPi4gIFRoZSBzY3JlZW4gcmVmZXJlbmNlIGZvciB0aGUgbmV3IHRlcm1pbmFsCitpcyBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlci4gIFRoZSBwcmV2aW91cyB0ZXJtaW5hbCBpcyByZXR1cm5lZCBieSB0aGUKK2Z1bmN0aW9uLiAgQWxsIG90aGVyIGNhbGxzIGFmZmVjdCBvbmx5IHRoZSBjdXJyZW50IHRlcm1pbmFsLgorPERUPiA8Q09ERT5kZWxzY3JlZW4oc3ApPC9DT0RFPgorPEREPiBUaGUgaW52ZXJzZSBvZiA8Q09ERT5uZXd0ZXJtKCk8L0NPREU+OyBkZWFsbG9jYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzCithc3NvY2lhdGVkIHdpdGggYSBnaXZlbiA8Q09ERT5TQ1JFRU48L0NPREU+IHJlZmVyZW5jZS4KKzwvREw+CisKKzxIMz48QSBOQU1FPSJmbHVzaCI+Q2F1c2luZyBPdXRwdXQgdG8gdGhlIFRlcm1pbmFsPC9BPjwvSDM+CisKKzxETD4KKzxEVD4gPENPREU+cmVmcmVzaCgpPC9DT0RFPiBhbmQgPENPREU+d3JlZnJlc2god2luKTwvQ09ERT4KKzxERD4gVGhlc2UgZnVuY3Rpb25zIG11c3QgYmUgY2FsbGVkIHRvIGFjdHVhbGx5IGdldCBhbnkgb3V0cHV0IG9uCit0aGUgIHRlcm1pbmFsLCAgYXMgIG90aGVyICByb3V0aW5lcyAgbWVyZWx5ICBtYW5pcHVsYXRlIGRhdGEKK3N0cnVjdHVyZXMuICA8Q09ERT53cmVmcmVzaCgpPC9DT0RFPiBjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyAgdG8gdGhlIHBoeXNpY2FsCit0ZXJtaW5hbCBzY3JlZW4sICB0YWtpbmcgIGludG8gYWNjb3VudCAgd2hhdCBpcyBhbHJlYWR5Cit0aGVyZSBpbiAgb3JkZXIgdG8gIGRvIG9wdGltaXphdGlvbnMuICA8Q09ERT5yZWZyZXNoKCk8L0NPREU+IGRvZXMgYQorcmVmcmVzaCBvZiA8Q09ERT5zdGRzY3I8L0NPREU+LiAgIFVubGVzcyA8Q09ERT5sZWF2ZW9rKCk8L0NPREU+IGhhcyBiZWVuCitlbmFibGVkLCB0aGUgcGh5c2ljYWwgY3Vyc29yIG9mIHRoZSB0ZXJtaW5hbCBpcyBsZWZ0IGF0ICB0aGUKK2xvY2F0aW9uIG9mIHRoZSB3aW5kb3cncyBjdXJzb3IuCis8RFQ+IDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+IGFuZCA8Q09ERT53bm91dHJlZnJlc2god2luKTwvQ09ERT4KKzxERD4gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhbGxvdyBtdWx0aXBsZSB1cGRhdGVzIHdpdGggbW9yZSBlZmZpY2llbmN5Cit0aGFuIHdyZWZyZXNoLiAgVG8gdXNlIHRoZW0sIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyBjdXJzZXMKK3dvcmtzLiAgSW4gYWRkaXRpb24gdG8gYWxsIHRoZSB3aW5kb3cgc3RydWN0dXJlcywgY3Vyc2VzIGtlZXBzIHR3bworZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgdGVybWluYWwgc2NyZWVuOiBhIHBoeXNpY2FsIHNjcmVlbiwKK2Rlc2NyaWJpbmcgd2hhdCBpcyBhY3R1YWxseSBvbiB0aGUgc2NyZWVuLCBhbmQgYSB2aXJ0dWFsIHNjcmVlbiwKK2Rlc2NyaWJpbmcgd2hhdCB0aGUgcHJvZ3JhbW1lciB3YW50cyB0byBoYXZlIG9uIHRoZSBzY3JlZW4uICB3cmVmcmVzaAord29ya3MgYnkgZmlyc3QgY29weWluZyB0aGUgbmFtZWQgd2luZG93IHRvIHRoZSB2aXJ0dWFsIHNjcmVlbgorKDxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiksIGFuZCB0aGVuIGNhbGxpbmcgdGhlIHJvdXRpbmUgdG8gdXBkYXRlIHRoZQorc2NyZWVuICg8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPikuICBJZiB0aGUgcHJvZ3JhbW1lciB3aXNoZXMgdG8gb3V0cHV0CitzZXZlcmFsIHdpbmRvd3MgYXQgb25jZSwgYSBzZXJpZXMgb2YgY2FsbHMgdG8gPENPREU+d3JlZnJlc2g8L0NPREU+IHdpbGwgcmVzdWx0CitpbiBhbHRlcm5hdGluZyBjYWxscyB0byA8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4gYW5kIDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+LAorY2F1c2luZyBzZXZlcmFsIGJ1cnN0cyBvZiBvdXRwdXQgdG8gdGhlIHNjcmVlbi4gIEJ5IGNhbGxpbmcKKzxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBmb3IgZWFjaCB3aW5kb3csIGl0IGlzIHRoZW4gcG9zc2libGUgdG8gY2FsbAorPENPREU+ZG91cGRhdGUoKTwvQ09ERT4gb25jZSwgcmVzdWx0aW5nIGluIG9ubHkgb25lIGJ1cnN0IG9mIG91dHB1dCwgd2l0aAorZmV3ZXIgdG90YWwgY2hhcmFjdGVycyB0cmFuc21pdHRlZCAodGhpcyBhbHNvIGF2b2lkcyBhIHZpc3VhbGx5IGFubm95aW5nCitmbGlja2VyIGF0IGVhY2ggdXBkYXRlKS4KKzwvREw+CisKKzxIMz48QSBOQU1FPSJsb3dsZXZlbCI+TG93LUxldmVsIENhcGFiaWxpdHkgQWNjZXNzPC9BPjwvSDM+CisKKzxETD4KKzxEVD4gPENPREU+c2V0dXB0ZXJtKHRlcm0sIGZpbGVudW0sIGVycnJldCk8L0NPREU+Cis8REQ+IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBhIHRlcm1pbmFsJ3MgZGVzY3JpcHRpb24sIHdpdGhvdXQgc2V0dGluZwordXAgdGhlIGN1cnNlcyBzY3JlZW4gc3RydWN0dXJlcyBvciBjaGFuZ2luZyB0aGUgdHR5LWRyaXZlciBtb2RlIGJpdHMuCis8Q09ERT50ZXJtPC9DT0RFPiBpcyB0aGUgY2hhcmFjdGVyIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsCitiZWluZyB1c2VkLiAgPENPREU+ZmlsZW51bTwvQ09ERT4gaXMgdGhlIFVOSVggZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSB0ZXJtaW5hbCB0bworYmUgdXNlZCBmb3Igb3V0cHV0LiAgPENPREU+ZXJycmV0PC9DT0RFPiBpcyBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciwgaW4gd2hpY2ggYQorc3VjY2VzcyBvciBmYWlsdXJlIGluZGljYXRpb24gaXMgcmV0dXJuZWQuICBUaGUgdmFsdWVzIHJldHVybmVkIGNhbiBiZSAxIChhbGwKK2lzIHdlbGwpLCAwIChubyBzdWNoIHRlcm1pbmFsKSwgb3IgLTEgKHNvbWUgcHJvYmxlbSBsb2NhdGluZyB0aGUgdGVybWluZm8KK2RhdGFiYXNlKS4gPFA+CisKK1RoZSB2YWx1ZSBvZiA8Q09ERT50ZXJtPC9DT0RFPiBjYW4gYmUgZ2l2ZW4gYXMgTlVMTCwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgdmFsdWUgb2YKKzxDT0RFPlRFUk08L0NPREU+IGluIHRoZSBlbnZpcm9ubWVudCB0byBiZSB1c2VkLiAgVGhlIDxDT0RFPmVycnJldDwvQ09ERT4gcG9pbnRlciBjYW4KK2Fsc28gYmUgZ2l2ZW4gYXMgTlVMTCwgbWVhbmluZyBubyBlcnJvciBjb2RlIGlzIHdhbnRlZC4gIElmIDxDT0RFPmVycnJldDwvQ09ERT4gaXMKK2RlZmF1bHRlZCwgYW5kIHNvbWV0aGluZyBnb2VzIHdyb25nLCA8Q09ERT5zZXR1cHRlcm0oKTwvQ09ERT4gd2lsbCBwcmludCBhbgorYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nLiAgVGh1cywgYSBzaW1wbGUKK3Byb2dyYW0gY2FuIGNhbGwgc2V0dXB0ZXJtKDAsIDEsIDApIGFuZCBub3Qgd29ycnkgYWJvdXQgaW5pdGlhbGl6YXRpb24KK2Vycm9ycy4gPFA+CisKK0FmdGVyIHRoZSBjYWxsIHRvIDxDT0RFPnNldHVwdGVybSgpPC9DT0RFPiwgdGhlIGdsb2JhbCB2YXJpYWJsZSA8Q09ERT5jdXJfdGVybTwvQ09ERT4gaXMKK3NldCB0byBwb2ludCB0byB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgdGVybWluYWwgY2FwYWJpbGl0aWVzLiBCeSBjYWxsaW5nCis8Q09ERT5zZXR1cHRlcm0oKTwvQ09ERT4gZm9yIGVhY2ggdGVybWluYWwsIGFuZCBzYXZpbmcgYW5kIHJlc3RvcmluZworPENPREU+Y3VyX3Rlcm08L0NPREU+LCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBwcm9ncmFtIHRvIHVzZSB0d28gb3IgbW9yZSB0ZXJtaW5hbHMgYXQKK29uY2UuICA8Q09ERT5TZXR1cHRlcm0oKTwvQ09ERT4gYWxzbyBzdG9yZXMgdGhlIG5hbWVzIHNlY3Rpb24gb2YgdGhlIHRlcm1pbmFsCitkZXNjcmlwdGlvbiBpbiB0aGUgZ2xvYmFsIGNoYXJhY3RlciBhcnJheSA8Q09ERT50dHl0eXBlW108L0NPREU+LiAgU3Vic2VxdWVudCBjYWxscwordG8gPENPREU+c2V0dXB0ZXJtKCk8L0NPREU+IHdpbGwgb3ZlcndyaXRlIHRoaXMgYXJyYXksIHNvIHlvdSdsbCBoYXZlIHRvIHNhdmUgaXQKK3lvdXJzZWxmIGlmIG5lZWQgYmUuCis8L0RMPgorCis8SDM+PEEgTkFNRT0iZGVidWdnaW5nIj5EZWJ1Z2dpbmc8L0E+PC9IMz4KKworPCEtLSBUaGUgJ25vdGUnIHRhZyBpcyBub3QgcG9ydGFibGUgZW5vdWdoIC0tPgorPGJsb2NrcXVvdGU+Cis8c3Ryb25nPk5PVEU6PC9zdHJvbmc+IFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIGN1cnNlcyBBUEkhCis8L2Jsb2NrcXVvdGU+CisKKzxETD4KKzxEVD4gPENPREU+dHJhY2UoKTwvQ09ERT4KKzxERD4KK1RoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBzZXQgYSB0cmFjZSBsZXZlbC4gIElmIHRoZQordHJhY2UgbGV2ZWwgaXMgbm9uemVybywgZXhlY3V0aW9uIG9mIHlvdXIgcHJvZ3JhbSB3aWxsIGdlbmVyYXRlIGEgZmlsZQorY2FsbGVkIGB0cmFjZScgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgY29udGFpbmluZyBhIHJlcG9ydCBvbgordGhlIGxpYnJhcnkncyBhY3Rpb25zLiAgSGlnaGVyIHRyYWNlIGxldmVscyBlbmFibGUgbW9yZSBkZXRhaWxlZCAoYW5kCit2ZXJib3NlKSByZXBvcnRpbmcgLS0gc2VlIGNvbW1lbnRzIGF0dGFjaGVkIHRvIDxDT0RFPlRSQUNFXzwvQ09ERT4gZGVmaW5lcworaW4gdGhlIDxDT0RFPmN1cnNlcy5oPC9DT0RFPiBmaWxlIGZvciBkZXRhaWxzLiAgKEl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0CithIHRyYWNlIGxldmVsIGJ5IGFzc2lnbmluZyBhIHRyYWNlIGxldmVsIHZhbHVlIHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorPENPREU+TkNVUlNFU19UUkFDRTwvQ09ERT4pLgorPERUPiA8Q09ERT5fdHJhY2VmKCk8L0NPREU+Cis8REQ+CitUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIG91dHB1dCB5b3VyIG93biBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBJdCBpcyBvbmx5CithdmFpbGFibGUgb25seSBpZiB5b3UgbGluayB3aXRoIC1sbmN1cnNlc19nLiAgSXQgY2FuIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzCis8Q09ERT5wcmludGYoKTwvQ09ERT4sIG9ubHkgaXQgb3V0cHV0cyBhIG5ld2xpbmUgYWZ0ZXIgdGhlIGVuZCBvZiBhcmd1bWVudHMuCitUaGUgb3V0cHV0IGdvZXMgdG8gYSBmaWxlIGNhbGxlZCA8Q09ERT50cmFjZTwvQ09ERT4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorPC9ETD4KKworVHJhY2UgbG9ncyBjYW4gYmUgZGlmZmljdWx0IHRvIGludGVycHJldCBkdWUgdG8gdGhlIHNoZWVyIHZvbHVtZSBvZgorZGF0YSBkdW1wZWQgaW4gdGhlbS4gIFRoZXJlIGlzIGEgc2NyaXB0IGNhbGxlZCA8U1RST05HPnRyYWNlbXVuY2g8L1NUUk9ORz4KK2luY2x1ZGVkIHdpdGggdGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IGRpc3RyaWJ1dGlvbiB0aGF0IGNhbiBhbGxldmlhdGUKK3RoaXMgcHJvYmxlbSBzb21ld2hhdDsgaXQgY29tcGFjdHMgbG9uZyBzZXF1ZW5jZXMgb2Ygc2ltaWxhciBvcGVyYXRpb25zIGludG8KK21vcmUgc3VjY2luY3Qgc2luZ2xlLWxpbmUgcHNldWRvLW9wZXJhdGlvbnMuIFRoZXNlIHBzZXVkby1vcHMgY2FuIGJlCitkaXN0aW5ndWlzaGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgbmFtZWQgaW4gY2FwaXRhbCBsZXR0ZXJzLgorCis8SDI+PEEgTkFNRT0iaGludHMiPkhpbnRzLCBUaXBzLCBhbmQgVHJpY2tzPC9BPjwvSDI+CisKK1RoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBtYW51YWwgcGFnZXMgYXJlIGEgY29tcGxldGUgcmVmZXJlbmNlIGZvciB0aGlzIGxpYnJhcnkuCitJbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZG9jdW1lbnQsIHdlIGRpc2N1c3MgdmFyaW91cyB1c2VmdWwgbWV0aG9kcyB0aGF0CittYXkgbm90IGJlIG9idmlvdXMgZnJvbSB0aGUgbWFudWFsIHBhZ2UgZGVzY3JpcHRpb25zLgorCis8SDM+PEEgTkFNRT0iY2F1dGlvbiI+U29tZSBOb3RlcyBvZiBDYXV0aW9uPC9BPjwvSDM+CisKK0lmIHlvdSBmaW5kIHlvdXJzZWxmIHRoaW5raW5nIHlvdSBuZWVkIHRvIHVzZSA8Q09ERT5ub3JhdygpPC9DT0RFPiBvcgorPENPREU+bm9jYnJlYWsoKTwvQ09ERT4sIHRoaW5rIGFnYWluIGFuZCBtb3ZlIGNhcmVmdWxseS4gIEl0J3MgcHJvYmFibHkKK2JldHRlciBkZXNpZ24gdG8gdXNlIDxDT0RFPmdldHN0cigpPC9DT0RFPiBvciBvbmUgb2YgaXRzIHJlbGF0aXZlcyB0bworc2ltdWxhdGUgY29va2VkIG1vZGUuICBUaGUgPENPREU+bm9yYXcoKTwvQ09ERT4gYW5kIDxDT0RFPm5vY2JyZWFrKCk8L0NPREU+CitmdW5jdGlvbnMgdHJ5IHRvIHJlc3RvcmUgY29va2VkIG1vZGUsIGJ1dCB0aGV5IG1heSBlbmQgdXAgY2xvYmJlcmluZworc29tZSBjb250cm9sIGJpdHMgc2V0IGJlZm9yZSB5b3Ugc3RhcnRlZCB5b3VyIGFwcGxpY2F0aW9uLiAgQWxzbywgdGhleQoraGF2ZSBhbHdheXMgYmVlbiBwb29ybHkgZG9jdW1lbnRlZCwgYW5kIGFyZSBsaWtlbHkgdG8gaHVydCB5b3VyCithcHBsaWNhdGlvbidzIHVzYWJpbGl0eSB3aXRoIG90aGVyIGN1cnNlcyBsaWJyYXJpZXMuIDxQPgorCitCZWFyIGluIG1pbmQgdGhhdCA8Q09ERT5yZWZyZXNoKCk8L0NPREU+IGlzIGEgc3lub255bSBmb3IgPENPREU+d3JlZnJlc2goc3Rkc2NyKTwvQ09ERT4uCitEb24ndCB0cnkgdG8gbWl4IHVzZSBvZiA8Q09ERT5zdGRzY3I8L0NPREU+IHdpdGggdXNlIG9mIHdpbmRvd3MgZGVjbGFyZWQKK2J5IDxDT0RFPm5ld3dpbigpPC9DT0RFPjsgYSA8Q09ERT5yZWZyZXNoKCk8L0NPREU+IGNhbGwgd2lsbCBibG93IHRoZW0gb2ZmIHRoZQorc2NyZWVuLiAgVGhlIHJpZ2h0IHdheSB0byBoYW5kbGUgdGhpcyBpcyB0byB1c2UgPENPREU+c3Vid2luKCk8L0NPREU+LCBvcgorbm90IHRvdWNoIDxDT0RFPnN0ZHNjcjwvQ09ERT4gYXQgYWxsIGFuZCB0aWxlIHlvdXIgc2NyZWVuIHdpdGggZGVjbGFyZWQKK3dpbmRvd3Mgd2hpY2ggeW91IHRoZW4gPENPREU+d25vdXRyZWZyZXNoKCk8L0NPREU+IHNvbWV3aGVyZSBpbiB5b3VyIHByb2dyYW0KK2V2ZW50IGxvb3AsIHdpdGggYSBzaW5nbGUgPENPREU+ZG91cGRhdGUoKTwvQ09ERT4gY2FsbCB0byB0cmlnZ2VyIGFjdHVhbAorcmVwYWludGluZy4gPFA+CisKK1lvdSBhcmUgbXVjaCBsZXNzIGxpa2VseSB0byBydW4gaW50byBwcm9ibGVtcyBpZiB5b3UgZGVzaWduIHlvdXIgc2NyZWVuCitsYXlvdXRzIHRvIHVzZSB0aWxlZCByYXRoZXIgdGhhbiBvdmVybGFwcGluZyB3aW5kb3dzLiAgSGlzdG9yaWNhbGx5LAorY3Vyc2VzIHN1cHBvcnQgZm9yIG92ZXJsYXBwaW5nIHdpbmRvd3MgaGFzIGJlZW4gd2VhaywgZnJhZ2lsZSwgYW5kIHBvb3JseQorZG9jdW1lbnRlZC4gIFRoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBsaWJyYXJ5IGlzIG5vdCB5ZXQgYW4gZXhjZXB0aW9uIHRvIHRoaXMKK3J1bGUuIDxQPgorCitUaGVyZSBpcyBhIHBhbmVscyBsaWJyYXJ5IGluY2x1ZGVkIGluIHRoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPgorZGlzdHJpYnV0aW9uIHRoYXQgZG9lcyBhIHByZXR0eSBnb29kIGpvYiBvZiBzdHJlbmd0aGVuaW5nIHRoZQorb3ZlcmxhcHBpbmctd2luZG93cyBmYWNpbGl0aWVzLiA8UD4KKworVHJ5IHRvIGF2b2lkIHVzaW5nIHRoZSBnbG9iYWwgdmFyaWFibGVzIExJTkVTIGFuZCBDT0xTLiAgVXNlCis8Q09ERT5nZXRtYXh5eCgpPC9DT0RFPiBvbiB0aGUgPENPREU+c3Rkc2NyPC9DT0RFPiBjb250ZXh0IGluc3RlYWQuICBSZWFzb246Cit5b3VyIGNvZGUgbWF5IGJlIHBvcnRlZCB0byBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2l0aCB3aW5kb3cgcmVzaXplcywKK2luIHdoaWNoIGNhc2Ugc2V2ZXJhbCBzY3JlZW5zIGNvdWxkIGJlIG9wZW4gd2l0aCBkaWZmZXJlbnQgc2l6ZXMuCisKKzxIMz48QSBOQU1FPSJsZWF2aW5nIj5UZW1wb3JhcmlseSBMZWF2aW5nIE5DVVJTRVMgTW9kZTwvQT48L0gzPgorCitTb21ldGltZXMgeW91IHdpbGwgd2FudCB0byB3cml0ZSBhIHByb2dyYW0gdGhhdCBzcGVuZHMgbW9zdCBvZiBpdHMgdGltZSBpbgorc2NyZWVuIG1vZGUsIGJ1dCBvY2Nhc2lvbmFsbHkgcmV0dXJucyB0byBvcmRpbmFyeSBgY29va2VkJyBtb2RlLiAgQSBjb21tb24KK3JlYXNvbiBmb3IgdGhpcyBpcyB0byBzdXBwb3J0IHNoZWxsLW91dC4gIFRoaXMgYmVoYXZpb3IgaXMgc2ltcGxlIHRvIGFycmFuZ2UKK2luIDxDT0RFPm5jdXJzZXM8L0NPREU+LiA8UD4KKworVG8gbGVhdmUgPENPREU+bmN1cnNlczwvQ09ERT4gbW9kZSwgY2FsbCA8Q09ERT5lbmR3aW4oKTwvQ09ERT4gYXMgeW91IHdvdWxkIGlmIHlvdQord2VyZSBpbnRlbmRpbmcgdG8gdGVybWluYXRlIHRoZSBwcm9ncmFtLiAgVGhpcyB3aWxsIHRha2UgdGhlIHNjcmVlbiBiYWNrIHRvCitjb29rZWQgbW9kZTsgeW91IGNhbiBkbyB5b3VyIHNoZWxsLW91dC4gIFdoZW4geW91IHdhbnQgdG8gcmV0dXJuIHRvCis8Q09ERT5uY3Vyc2VzPC9DT0RFPiBtb2RlLCBzaW1wbHkgY2FsbCA8Q09ERT5yZWZyZXNoKCk8L0NPREU+IG9yIDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+LgorVGhpcyB3aWxsIHJlcGFpbnQgdGhlIHNjcmVlbi4gPFA+CisKK1RoZXJlIGlzIGEgYm9vbGVhbiBmdW5jdGlvbiwgPENPREU+aXNlbmR3aW4oKTwvQ09ERT4sIHdoaWNoIGNvZGUgY2FuIHVzZSB0bwordGVzdCB3aGV0aGVyIDxDT0RFPm5jdXJzZXM8L0NPREU+IHNjcmVlbiBtb2RlIGlzIGFjdGl2ZS4gIEl0IHJldHVybnMgPENPREU+VFJVRTwvQ09ERT4KK2luIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIGFuIDxDT0RFPmVuZHdpbigpPC9DT0RFPiBjYWxsIGFuZCB0aGUgZm9sbG93aW5nCis8Q09ERT5yZWZyZXNoKCk8L0NPREU+LCA8Q09ERT5GQUxTRTwvQ09ERT4gb3RoZXJ3aXNlLiAgPFA+CisKK0hlcmUgaXMgc29tZSBzYW1wbGUgY29kZSBmb3Igc2hlbGxvdXQ6CisKKzxQUkU+CisgICAgYWRkc3RyKCJTaGVsbGluZyBvdXQuLi4iKTsKKyAgICBkZWZfcHJvZ19tb2RlKCk7ICAgICAgICAgICAvKiBzYXZlIGN1cnJlbnQgdHR5IG1vZGVzICovCisgICAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBvcmlnaW5hbCB0dHkgbW9kZXMgKi8KKyAgICBzeXN0ZW0oInNoIik7ICAgICAgICAgICAgICAvKiBydW4gc2hlbGwgKi8KKyAgICBhZGRzdHIoInJldHVybmVkLlxuIik7ICAgICAvKiBwcmVwYXJlIHJldHVybiBtZXNzYWdlICovCisgICAgcmVmcmVzaCgpOyAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBzYXZlIG1vZGVzLCByZXBhaW50IHNjcmVlbiAqLworPC9QUkU+CisKKzxIMz48QSBOQU1FPSJ4dGVybSI+VXNpbmcgTkNVUlNFUyB1bmRlciBYVEVSTTwvQT48L0gzPgorCitBIHJlc2l6ZSBvcGVyYXRpb24gaW4gWCBzZW5kcyA8Q09ERT5TSUdXSU5DSDwvQ09ERT4gdG8gdGhlIGFwcGxpY2F0aW9uIHJ1bm5pbmcKK3VuZGVyIHh0ZXJtLgorCitUaGUgZWFzaWVzdCB3YXkgdG8gaGFuZGxlIDxDT0RFPlNJR1dJTkNIPC9DT0RFPgoraXMgdG8gZG8gYW4gPENPREU+ZW5kd2luPC9DT0RFPiwKK2ZvbGxvd2VkIGJ5IGFuIDxDT0RFPnJlZnJlc2g8L0NPREU+IGFuZCBhIHNjcmVlbiByZXBhaW50IHlvdSBjb2RlCit5b3Vyc2VsZi4KK1RoZSA8Q09ERT5yZWZyZXNoPC9DT0RFPiB3aWxsIHBpY2sgdXAgdGhlIG5ldyBzY3JlZW4gc2l6ZSBmcm9tIHRoZQoreHRlcm0ncyBlbnZpcm9ubWVudC4gPFA+CisKK1RoYXQgaXMgdGhlIHN0YW5kYXJkIHdheSwgb2YgY291cnNlIChpdCBldmVuIHdvcmtzIHdpdGggc29tZSB2ZW5kb3IncyBjdXJzZXMKK2ltcGxlbWVudGF0aW9ucykuCitJdHMgZHJhd2JhY2sgaXMgdGhhdCBpdCBjbGVhcnMgdGhlIHNjcmVlbiB0byByZWluaXRpYWxpemUgdGhlIGRpc3BsYXksIGFuZCBkb2VzCitub3QgcmVzaXplIHN1YndpbmRvd3Mgd2hpY2ggbXVzdCBiZSBzaHJ1bmsuCis8Q09ERT5OY3Vyc2VzPC9DT0RFPiBwcm92aWRlcyBhbiBleHRlbnNpb24gd2hpY2ggd29ya3MgYmV0dGVyLCB0aGUKKzxDT0RFPnJlc2l6ZXRlcm08L0NPREU+IGZ1bmN0aW9uLiAgVGhhdCBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYWxsIHdpbmRvd3MKK2FyZSBsaW1pdGVkIHRvIHRoZSBuZXcgc2NyZWVuIGRpbWVuc2lvbnMsIGFuZCBwYWRzIDxDT0RFPnN0ZHNjcjwvQ09ERT4KK3dpdGggYmxhbmtzIGlmIHRoZSBzY3JlZW4gaXMgbGFyZ2VyLiA8UD4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgcHJvdmlkZXMgYSBTSUdXSU5DSCBzaWduYWwgaGFuZGxlciwKK3doaWNoIHB1c2hlcyBhIDxDT0RFPktFWV9SRVNJWkU8L0NPREU+IHZpYSB0aGUgd2dldGNoKCkgY2FsbHMuCitXaGVuIDxDT0RFPm5jdXJzZXM8L0NPREU+IHJldHVybnMgdGhhdCBjb2RlLAoraXQgY2FsbHMgPGNvZGU+cmVzaXpldGVybTwvQ09ERT4KK3RvIHVwZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3RhbmRhcmQgc2NyZWVuJ3Mgd2luZG93LCByZXBhaW50aW5nIHRoYXQKKyhmaWxsaW5nIHdpdGggYmxhbmtzIG9yIHRydW5jYXRpbmcgYXMgbmVlZGVkKS4KK0l0IGFsc28gcmVzaXplcyBvdGhlciB3aW5kb3dzLAorYnV0IGl0cyBlZmZlY3QgbWF5IGJlIGxlc3Mgc2F0aXNmYWN0b3J5IGJlY2F1c2UgaXQgY2Fubm90Citrbm93IGhvdyB5b3Ugd2FudCB0aGUgc2NyZWVuIHJlLXBhaW50ZWQuCitZb3Ugd2lsbCB1c3VhbGx5IGhhdmUgdG8gd3JpdGUgc3BlY2lhbC1wdXJwb3NlIGNvZGUgdG8gaGFuZGxlCis8Q09ERT5LRVlfUkVTSVpFPC9DT0RFPiB5b3Vyc2VsZi4KKworPEgzPjxBIE5BTUU9InNjcmVlbnMiPkhhbmRsaW5nIE11bHRpcGxlIFRlcm1pbmFsIFNjcmVlbnM8L0E+PC9IMz4KKworVGhlIDxDT0RFPmluaXRzY3IoKTwvQ09ERT4gZnVuY3Rpb24gYWN0dWFsbHkgY2FsbHMgYSBmdW5jdGlvbiBuYW1lZAorPENPREU+bmV3dGVybSgpPC9DT0RFPiB0byBkbyBtb3N0IG9mIGl0cyB3b3JrLiAgSWYgeW91IGFyZSB3cml0aW5nIGEgcHJvZ3JhbSB0aGF0CitvcGVucyBtdWx0aXBsZSB0ZXJtaW5hbHMsIHVzZSA8Q09ERT5uZXd0ZXJtKCk8L0NPREU+IGRpcmVjdGx5LiA8UD4KKworRm9yIGVhY2ggY2FsbCwgeW91IHdpbGwgaGF2ZSB0byBzcGVjaWZ5IGEgdGVybWluYWwgdHlwZSBhbmQgYSBwYWlyIG9mIGZpbGUKK3BvaW50ZXJzOyBlYWNoIGNhbGwgd2lsbCByZXR1cm4gYSBzY3JlZW4gcmVmZXJlbmNlLCBhbmQgPENPREU+c3Rkc2NyPC9DT0RFPiB3aWxsIGJlCitzZXQgdG8gdGhlIGxhc3Qgb25lIGFsbG9jYXRlZC4gIFlvdSB3aWxsIHN3aXRjaCBiZXR3ZWVuIHNjcmVlbnMgd2l0aCB0aGUKKzxDT0RFPnNldF90ZXJtPC9DT0RFPiBjYWxsLiAgTm90ZSB0aGF0IHlvdSB3aWxsIGFsc28gaGF2ZSB0byBjYWxsCis8Q09ERT5kZWZfc2hlbGxfbW9kZTwvQ09ERT4gYW5kIDxDT0RFPmRlZl9wcm9nX21vZGU8L0NPREU+IG9uIGVhY2ggdHR5IHlvdXJzZWxmLgorCis8SDM+PEEgTkFNRT0idGVzdGluZyI+VGVzdGluZyBmb3IgVGVybWluYWwgQ2FwYWJpbGl0aWVzPC9BPjwvSDM+CisKK1NvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gd3JpdGUgcHJvZ3JhbXMgdGhhdCB0ZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2YgdmFyaW91cworY2FwYWJpbGl0aWVzIGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRvIGdvIGludG8gPENPREU+bmN1cnNlczwvQ09ERT4gbW9kZS4gIEFuIGVhc3kKK3dheSB0byBkbyB0aGlzIGlzIHRvIGNhbGwgPENPREU+c2V0dXB0ZXJtKCk8L0NPREU+LCB0aGVuIHVzZSB0aGUgZnVuY3Rpb25zCis8Q09ERT50aWdldGZsYWcoKTwvQ09ERT4sIDxDT0RFPnRpZ2V0bnVtKCk8L0NPREU+LCBhbmQgPENPREU+dGlnZXRzdHIoKTwvQ09ERT4gdG8gZG8geW91cgordGVzdGluZy4gPFA+CisKK0EgcGFydGljdWxhcmx5IHVzZWZ1bCBjYXNlIG9mIHRoaXMgb2Z0ZW4gY29tZXMgdXAgd2hlbiB5b3Ugd2FudCB0bwordGVzdCB3aGV0aGVyIGEgZ2l2ZW4gdGVybWluYWwgdHlwZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBgc21hcnQnCisoY3Vyc29yLWFkZHJlc3NhYmxlKSBvciBgc3R1cGlkJy4gIFRoZSByaWdodCB3YXkgdG8gdGVzdCB0aGlzIGlzIHRvIHNlZQoraWYgdGhlIHJldHVybiB2YWx1ZSBvZiA8Q09ERT50aWdldHN0cigiY3VwIik8L0NPREU+IGlzIG5vbi1OVUxMLiAgQWx0ZXJuYXRpdmVseSwKK3lvdSBjYW4gaW5jbHVkZSB0aGUgPENPREU+dGVybS5oPC9DT0RFPiBmaWxlIGFuZCB0ZXN0IHRoZSB2YWx1ZSBvZiB0aGUKK21hY3JvIDxDT0RFPmN1cnNvcl9hZGRyZXNzPC9DT0RFPi4KKworPEgzPjxBIE5BTUU9InR1bmluZyI+VHVuaW5nIGZvciBTcGVlZDwvQT48L0gzPgorCitVc2UgdGhlIDxDT0RFPmFkZGNoc3RyKCk8L0NPREU+IGZhbWlseSBvZiBmdW5jdGlvbnMgZm9yIGZhc3QKK3NjcmVlbi1wYWludGluZyBvZiB0ZXh0IHdoZW4geW91IGtub3cgdGhlIHRleHQgZG9lc24ndCBjb250YWluIGFueQorY29udHJvbCBjaGFyYWN0ZXJzLiAgVHJ5IHRvIG1ha2UgYXR0cmlidXRlIGNoYW5nZXMgaW5mcmVxdWVudCBvbiB5b3VyCitzY3JlZW5zLiAgRG9uJ3QgdXNlIHRoZSA8Q09ERT5pbW1lZG9rKCk8L0NPREU+IG9wdGlvbiEKKworPEgzPjxBIE5BTUU9InNwZWNpYWwiPlNwZWNpYWwgRmVhdHVyZXMgb2YgTkNVUlNFUzwvQT48L0gzPgorCitUaGUgPENPREU+d3Jlc2l6ZSgpPC9DT0RFPiBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHJlc2l6ZSBhIHdpbmRvdyBpbiBwbGFjZS4KK1RoZSBhc3NvY2lhdGVkIDxDT0RFPnJlc2l6ZXRlcm0oKTwvQ09ERT4gZnVuY3Rpb24gc2ltcGxpZmllcyB0aGUgY29uc3RydWN0aW9uCitvZiA8YSBIUkVGPSIjeHRlcm0iPlNJR1dJTkNIPC9hPiBoYW5kbGVycywgZm9yIHJlc2l6aW5nIGFsbCB3aW5kb3dzLiAgPFA+CisKK1RoZSA8Q09ERT5kZWZpbmVfa2V5KCk8L0NPREU+IGZ1bmN0aW9uIGFsbG93cyB5b3UKK3RvIGRlZmluZSBhdCBydW50aW1lIGZ1bmN0aW9uLWtleSBjb250cm9sIHNlcXVlbmNlcyB3aGljaCBhcmUgbm90IGluIHRoZQordGVybWluYWwgZGVzY3JpcHRpb24uCitUaGUgPENPREU+a2V5b2soKTwvQ09ERT4gZnVuY3Rpb24gYWxsb3dzIHlvdSB0byB0ZW1wb3JhcmlseQorZW5hYmxlIG9yIGRpc2FibGUgaW50ZXJwcmV0YXRpb24gb2YgYW55IGZ1bmN0aW9uLWtleSBjb250cm9sIHNlcXVlbmNlLiA8UD4KKworVGhlIDxDT0RFPnVzZV9kZWZhdWx0X2NvbG9ycygpPC9DT0RFPiBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdAorYXBwbGljYXRpb25zIHdoaWNoIGNhbiB1c2UgdGhlIHRlcm1pbmFsJ3MgZGVmYXVsdCBmb3JlZ3JvdW5kIGFuZAorYmFja2dyb3VuZCBjb2xvcnMgYXMgYW4gYWRkaXRpb25hbCAiZGVmYXVsdCIgY29sb3IuCitTZXZlcmFsIHRlcm1pbmFsIGVtdWxhdG9ycyBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgd2hpY2ggaXMgYmFzZWQgb24gSVNPIDY0MjkuIDxQPgorCitOY3Vyc2VzIHN1cHBvcnRzIHVwIDE2IGNvbG9ycywgdW5saWtlIFNWcjQgY3Vyc2VzIHdoaWNoIGRlZmluZXMgb25seSA4LgorV2hpbGUgbW9zdCB0ZXJtaW5hbHMgd2hpY2ggcHJvdmlkZSBjb2xvciBhbGxvdyBvbmx5IDggY29sb3JzLCBhYm91dAorYSBxdWFydGVyIChpbmNsdWRpbmcgWEZyZWU4NiB4dGVybSkgc3VwcG9ydCAxNiBjb2xvcnMuCisKKzxIMj48QSBOQU1FPSJjb21wYXQiPkNvbXBhdGliaWxpdHkgd2l0aCBPbGRlciBWZXJzaW9uczwvQT48L0gyPgorCitEZXNwaXRlIG91ciBiZXN0IGVmZm9ydHMsIHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gPENPREU+bmN1cnNlczwvQ09ERT4KK2FuZCB0aGUgKHVuZG9jdW1lbnRlZCEpIGJlaGF2aW9yIG9mIG9sZGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMuICBUaGVzZSBhcmlzZQorZnJvbSBhbWJpZ3VpdGllcyBvciBvbWlzc2lvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIEFQSS4KKworPEgzPjxBIE5BTUU9InJlZmJ1ZyI+UmVmcmVzaCBvZiBPdmVybGFwcGluZyBXaW5kb3dzPC9BPjwvSDM+CisKK0lmIHlvdSBkZWZpbmUgdHdvIHdpbmRvd3MgQSBhbmQgQiB0aGF0IG92ZXJsYXAsIGFuZCB0aGVuIGFsdGVybmF0ZWx5IHNjcmliYmxlCitvbiBhbmQgcmVmcmVzaCB0aGVtLCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBvdmVybGFwcGluZyByZWdpb24gdW5kZXIgaGlzdG9yaWMKKzxDT0RFPmN1cnNlczwvQ09ERT4gdmVyc2lvbnMgd2VyZSBvZnRlbiBub3QgZG9jdW1lbnRlZCBwcmVjaXNlbHkuIDxQPgorCitUbyB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGEgcHJvYmxlbSwgcmVtZW1iZXIgdGhhdCBzY3JlZW4gdXBkYXRlcyBhcmUKK2NhbGN1bGF0ZWQgYmV0d2VlbiB0d28gcmVwcmVzZW50YXRpb25zIG9mIHRoZSA8RU0+ZW50aXJlPC9FTT4gZGlzcGxheS4gVGhlCitkb2N1bWVudGF0aW9uIHNheXMgdGhhdCB3aGVuIHlvdSByZWZyZXNoIGEgd2luZG93LCBpdCBpcyBmaXJzdCBjb3BpZWQgdG8gdGhlCit2aXJ0dWFsIHNjcmVlbiwgYW5kIHRoZW4gY2hhbmdlcyBhcmUgY2FsY3VsYXRlZCB0byB1cGRhdGUgdGhlIHBoeXNpY2FsIHNjcmVlbgorKGFuZCBhcHBsaWVkIHRvIHRoZSB0ZXJtaW5hbCkuICBCdXQgImNvcGllZCB0byIgaXMgbm90IHZlcnkgc3BlY2lmaWMsIGFuZAorc3VidGxlIGRpZmZlcmVuY2VzIGluIGhvdyBjb3B5aW5nIHdvcmtzIGNhbiBwcm9kdWNlIGRpZmZlcmVudCBiZWhhdmlvcnMgaW4gdGhlCitjYXNlIHdoZXJlIHR3byBvdmVybGFwcGluZyB3aW5kb3dzIGFyZSBlYWNoIGJlaW5nIHJlZnJlc2hlZCBhdCB1bnByZWRpY3RhYmxlCitpbnRlcnZhbHMuIDxQPgorCitXaGF0IGhhcHBlbnMgdG8gdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbiBkZXBlbmRzIG9uIHdoYXQgPENPREU+d25vdXRyZWZyZXNoKCk8L0NPREU+Citkb2VzIHdpdGggaXRzIGFyZ3VtZW50IC0tIHdoYXQgcG9ydGlvbnMgb2YgdGhlIGFyZ3VtZW50IHdpbmRvdyBpdCBjb3BpZXMgdG8gdGhlCit2aXJ0dWFsIHNjcmVlbi4gIFNvbWUgaW1wbGVtZW50YXRpb25zIGRvICJjaGFuZ2UgY29weSIsIGNvcHlpbmcgZG93biBvbmx5Citsb2NhdGlvbnMgaW4gdGhlIHdpbmRvdyB0aGF0IGhhdmUgY2hhbmdlZCAob3IgYmVlbiBtYXJrZWQgY2hhbmdlZCB3aXRoCis8Q09ERT53dG91Y2hsbigpPC9DT0RFPiBhbmQgZnJpZW5kcykuICBTb21lIGltcGxlbWVudGF0aW9ucyBkbyAgImVudGlyZSBjb3B5IiwKK2NvcHlpbmcgPEVNPmFsbDwvRU0+IHdpbmRvdyBsb2NhdGlvbnMgdG8gdGhlIHZpcnR1YWwgc2NyZWVuIHdoZXRoZXIgb3Igbm90Cit0aGV5IGhhdmUgY2hhbmdlZC4gPFA+CisKK1RoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBsaWJyYXJ5IGl0c2VsZiBoYXMgbm90IGFsd2F5cyBiZWVuIGNvbnNpc3RlbnQgb24gdGhpcworc2NvcmUuICBEdWUgdG8gYSBidWcsIHZlcnNpb25zIDEuOC43IHRvIDEuOS44YSBkaWQgZW50aXJlIGNvcHkuICBWZXJzaW9ucworMS44LjYgYW5kIG9sZGVyLCBhbmQgdmVyc2lvbnMgMS45LjkgYW5kIG5ld2VyLCBkbyBjaGFuZ2UgY29weS4gPFA+CisKK0ZvciBtb3N0IGNvbW1lcmNpYWwgY3Vyc2VzIGltcGxlbWVudGF0aW9ucywgaXQgaXMgbm90IGRvY3VtZW50ZWQgYW5kIG5vdCBrbm93bgorZm9yIHN1cmUgKGF0IGxlYXN0IG5vdCB0byB0aGUgPENPREU+bmN1cnNlczwvQ09ERT4gbWFpbnRhaW5lcnMpIHdoZXRoZXIgdGhleSBkbworY2hhbmdlIGNvcHkgb3IgZW50aXJlIGNvcHkuICBXZSBrbm93IHRoYXQgU3lzdGVtIFYgcmVsZWFzZSAzIGN1cnNlcyBoYXMgbG9naWMKK2luIGl0IHRoYXQgbG9va3MgbGlrZSBhbiBhdHRlbXB0IHRvIGRvIGNoYW5nZSBjb3B5LCBidXQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljCithbmQgZGF0YSByZXByZXNlbnRhdGlvbnMgYXJlIHN1ZmZpY2llbnRseSBjb21wbGV4LCBhbmQgb3VyIGtub3dsZWRnZQorc3VmZmljaWVudGx5IGluZGlyZWN0LCB0aGF0IGl0J3MgaGFyZCB0byBrbm93IHdoZXRoZXIgdGhpcyBpcyByZWxpYWJsZS4KKworSXQgaXMgbm90IGNsZWFyIHdoYXQgdGhlIFNWcjQgZG9jdW1lbnRhdGlvbiBhbmQgWFNJIHN0YW5kYXJkIGludGVuZC4gIFRoZSBYU0kKK0N1cnNlcyBzdGFuZGFyZCBiYXJlbHkgbWVudGlvbnMgd25vdXRyZWZyZXNoKCk7IHRoZSBTVnI0IGRvY3VtZW50cyBzZWVtIHRvIGJlCitkZXNjcmliaW5nIGVudGlyZS1jb3B5LCBidXQgaXQgaXMgcG9zc2libGUgd2l0aCBzb21lIGVmZm9ydCBhbmQgc3RyYWluaW5nIHRvCityZWFkIHRoZW0gdGhlIG90aGVyIHdheS4gPFA+CisKK0l0IG1pZ2h0IHRoZXJlZm9yZSBiZSB1bndpc2UgdG8gcmVseSBvbiBlaXRoZXIgYmVoYXZpb3IgaW4gcHJvZ3JhbXMgdGhhdCBtaWdodAoraGF2ZSB0byBiZSBsaW5rZWQgd2l0aCBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLiAgSW5zdGVhZCwgeW91IGNhbiBkbyBhbgorZXhwbGljaXQgPENPREU+dG91Y2h3aW4oKTwvQ09ERT4gYmVmb3JlIHRoZSA8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4gY2FsbCB0bworZ3VhcmFudGVlIGFuIGVudGlyZS1jb250ZW50cyBjb3B5IGFueXdoZXJlLiA8UD4KKworVGhlIHJlYWxseSBjbGVhbiB3YXkgdG8gaGFuZGxlIHRoaXMgaXMgdG8gdXNlIHRoZSBwYW5lbHMgbGlicmFyeS4gIElmLAord2hlbiB5b3Ugd2FudCBhIHNjcmVlbiB1cGRhdGUsIHlvdSBkbyA8Q09ERT51cGRhdGVfcGFuZWxzKCk8L0NPREU+LCBpdCB3aWxsCitkbyBhbGwgdGhlIG5lY2Vzc2FyeSA8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4gY2FsbHMgZm9yIHdoYXRldmVyIHBhbmVsCitzdGFja2luZyBvcmRlciB5b3UgaGF2ZSBkZWZpbmVkLiAgVGhlbiB5b3UgY2FuIGRvIG9uZSA8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPgorYW5kIHRoZXJlIHdpbGwgYmUgYSA8RU0+c2luZ2xlPC9FTT4gYnVyc3Qgb2YgcGh5c2ljYWwgSS9PIHRoYXQgd2lsbCBkbworYWxsIHlvdXIgdXBkYXRlcy4KKworPEgzPjxBIE5BTUU9ImJhY2tidWciPkJhY2tncm91bmQgRXJhc2U8L0E+PC9IMz4KKworSWYgeW91IGhhdmUgYmVlbiB1c2luZyBhIHZlcnkgb2xkIHZlcnNpb25zIG9mIDxDT0RFPm5jdXJzZXM8L0NPREU+ICgxLjguNyBvcgorb2xkZXIpIHlvdSBtYXkgYmUgc3VycHJpc2VkIGJ5IHRoZSBiZWhhdmlvciBvZiB0aGUgZXJhc2UgZnVuY3Rpb25zLiAgSW4gb2xkZXIKK3ZlcnNpb25zLCBlcmFzZWQgYXJlYXMgb2YgYSB3aW5kb3cgd2VyZSBmaWxsZWQgd2l0aCBhIGJsYW5rIG1vZGlmaWVkIGJ5IHRoZQord2luZG93J3MgY3VycmVudCBhdHRyaWJ1dGUgKGFzIHNldCBieSA8U1RST05HPndhdHRyc2V0KCk8L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJvbigpPC9TVFJPTkc+LAorPFNUUk9ORz53YXR0cm9mZigpPC9TVFJPTkc+IGFuZCBmcmllbmRzKS4gPFA+CisKK0luIG5ld2VyIHZlcnNpb25zLCB0aGlzIGlzIG5vdCBzby4gIEluc3RlYWQsIHRoZSBhdHRyaWJ1dGUgb2YgZXJhc2VkIGJsYW5rcworaXMgbm9ybWFsIHVubGVzcyBhbmQgdW50aWwgaXQgaXMgbW9kaWZpZWQgYnkgdGhlIGZ1bmN0aW9ucyA8Q09ERT5ia2dkc2V0KCk8L0NPREU+CitvciA8Q09ERT53YmtnZHNldCgpPC9DT0RFPi4gPFA+CisKK1RoaXMgY2hhbmdlIGluIGJlaGF2aW9yIGNvbmZvcm1zIDxDT0RFPm5jdXJzZXM8L0NPREU+IHRvIFN5c3RlbSBWIFJlbGVhc2UgNCBhbmQKK3RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLgorCis8SDI+PEEgTkFNRT0ieHNpZnVuY3MiPlhTSSBDdXJzZXMgQ29uZm9ybWFuY2U8L0E+PC9IMj4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgaXMgaW50ZW5kZWQgdG8gYmUgYmFzZS1sZXZlbCBjb25mb3JtYW50IHdpdGggdGhlCitYU0kgQ3Vyc2VzIHN0YW5kYXJkIGZyb20gWC9PcGVuLiAgTWFueSBleHRlbmRlZC1sZXZlbCBmZWF0dXJlcyAoaW4gZmFjdCwgYWxtb3N0CithbGwgZmVhdHVyZXMgbm90IGRpcmVjdGx5IGNvbmNlcm5lZCB3aXRoIHdpZGUgY2hhcmFjdGVycyBhbmQKK2ludGVybmF0aW9uYWxpemF0aW9uKSBhcmUgYWxzbyBzdXBwb3J0ZWQuIDxQPgorCitPbmUgZWZmZWN0IG9mIFhTSSBjb25mb3JtYW5jZSBpcyB0aGUgY2hhbmdlIGluIGJlaGF2aW9yIGRlc2NyaWJlZCB1bmRlcgorPEEgSFJFRj0iI2JhY2tidWciPiJCYWNrZ3JvdW5kIEVyYXNlIC0tIENvbXBhdGliaWxpdHkgd2l0aCBPbGQgVmVyc2lvbnMiPC9BPi4gPFA+CisKK0Fsc28sIDxDT0RFPm5jdXJzZXM8L0NPREU+IG1lZXRzIHRoZSBYU0kgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBtYWNybworZW50cnkgcG9pbnQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gd2hpY2ggbWF5IGJlIGxpbmtlZCAoYW5kCit3aWxsIGJlIHByb3RvdHlwZS1jaGVja2VkKSBpZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpcyBkaXNhYmxlZCB3aXRoCis8Q09ERT4jdW5kZWY8L0NPREU+LgorCis8SDE+PEEgTkFNRT0icGFuZWxzIj5UaGUgUGFuZWxzIExpYnJhcnk8L0E+PC9IMT4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgYnkgaXRzZWxmIHByb3ZpZGVzIGdvb2Qgc3VwcG9ydCBmb3Igc2NyZWVuCitkaXNwbGF5cyBpbiB3aGljaCB0aGUgd2luZG93cyBhcmUgdGlsZWQgKG5vbi1vdmVybGFwcGluZykuICBJbiB0aGUgbW9yZQorZ2VuZXJhbCBjYXNlIHRoYXQgd2luZG93cyBtYXkgb3ZlcmxhcCwgeW91IGhhdmUgdG8gdXNlIGEgc2VyaWVzIG9mCis8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4gY2FsbHMgZm9sbG93ZWQgYnkgYSA8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPiwgYW5kIGJlCitjYXJlZnVsIGFib3V0IHRoZSBvcmRlciB5b3UgZG8gdGhlIHdpbmRvdyByZWZyZXNoZXMgaW4uICBJdCBoYXMgdG8gYmUKK2JvdHRvbS11cHdhcmRzLCBvdGhlcndpc2UgcGFydHMgb2Ygd2luZG93cyB0aGF0IHNob3VsZCBiZSBvYnNjdXJlZCB3aWxsCitzaG93IHRocm91Z2guIDxQPgorCitXaGVuIHlvdXIgaW50ZXJmYWNlIGRlc2lnbiBpcyBzdWNoIHRoYXQgd2luZG93cyBtYXkgZGl2ZSBkZWVwZXIgaW50byB0aGUKK3Zpc2liaWxpdHkgc3RhY2sgb3IgcG9wIHRvIHRoZSB0b3AgYXQgcnVudGltZSwgdGhlIHJlc3VsdGluZyBib29rLWtlZXBpbmcKK2NhbiBiZSB0ZWRpb3VzIGFuZCBkaWZmaWN1bHQgdG8gZ2V0IHJpZ2h0LiAgSGVuY2UgdGhlIHBhbmVscyBsaWJyYXJ5LiA8UD4KKworVGhlIDxDT0RFPnBhbmVsPC9DT0RFPiBsaWJyYXJ5IGZpcnN0IGFwcGVhcmVkIGluIEFUJmFtcDtUIFN5c3RlbSBWLiAgVGhlCit2ZXJzaW9uIGRvY3VtZW50ZWQgaGVyZSBpcyB0aGUgPENPREU+cGFuZWw8L0NPREU+IGNvZGUgZGlzdHJpYnV0ZWQKK3dpdGggPENPREU+bmN1cnNlczwvQ09ERT4uCisKKzxIMj48QSBOQU1FPSJwY29tcGlsZSI+Q29tcGlsaW5nIFdpdGggdGhlIFBhbmVscyBMaWJyYXJ5PC9BPjwvSDI+CisKK1lvdXIgcGFuZWxzLXVzaW5nIG1vZHVsZXMgbXVzdCBpbXBvcnQgdGhlIHBhbmVscyBsaWJyYXJ5IGRlY2xhcmF0aW9ucyB3aXRoCisKKzxQUkU+CisJICAjaW5jbHVkZSAmbHQ7cGFuZWwuaCZndDsKKzwvUFJFPgorCithbmQgbXVzdCBiZSBsaW5rZWQgZXhwbGljaXRseSB3aXRoIHRoZSBwYW5lbHMgbGlicmFyeSB1c2luZyBhbgorPENPREU+LWxwYW5lbDwvQ09ERT4gYXJndW1lbnQuICBOb3RlIHRoYXQgdGhleSBtdXN0IGFsc28gbGluayB0aGUKKzxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgd2l0aCA8Q09ERT4tbG5jdXJzZXM8L0NPREU+LiAgTWFueSBsaW5rZXJzCithcmUgdHdvLXBhc3MgYW5kIHdpbGwgYWNjZXB0IGVpdGhlciBvcmRlciwgYnV0IGl0IGlzIHN0aWxsIGdvb2QgcHJhY3RpY2UKK3RvIHB1dCA8Q09ERT4tbHBhbmVsPC9DT0RFPiBmaXJzdCBhbmQgPENPREU+LWxuY3Vyc2VzPC9DT0RFPiBzZWNvbmQuCisKKzxIMj48QSBOQU1FPSJwb3ZlcnZpZXciPk92ZXJ2aWV3IG9mIFBhbmVsczwvQT48L0gyPgorCitBIHBhbmVsIG9iamVjdCBpcyBhIHdpbmRvdyB0aGF0IGlzIGltcGxpY2l0bHkgdHJlYXRlZCBhcyBwYXJ0IG9mIGEKKzxERk4+ZGVjazwvREZOPiBpbmNsdWRpbmcgYWxsIG90aGVyIHBhbmVsIG9iamVjdHMuICBUaGUgZGVjayBoYXMgYW4gaW1wbGljaXQKK2JvdHRvbS10by10b3AgdmlzaWJpbGl0eSBvcmRlci4gIFRoZSBwYW5lbHMgbGlicmFyeSBpbmNsdWRlcyBhbiB1cGRhdGUKK2Z1bmN0aW9uIChhbmFsb2dvdXMgdG8gPENPREU+cmVmcmVzaCgpPC9DT0RFPikgdGhhdCBkaXNwbGF5cyBhbGwgcGFuZWxzIGluIHRoZQorZGVjayBpbiB0aGUgcHJvcGVyIG9yZGVyIHRvIHJlc29sdmUgb3ZlcmxhcHMuICBUaGUgc3RhbmRhcmQgd2luZG93LAorPENPREU+c3Rkc2NyPC9DT0RFPiwgaXMgY29uc2lkZXJlZCBiZWxvdyBhbGwgcGFuZWxzLiA8UD4KKworRGV0YWlscyBvbiB0aGUgcGFuZWxzIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBtYW4gcGFnZXMuICBXZSdsbCBqdXN0CitoaXQgdGhlIGhpZ2hsaWdodHMgaGVyZS4gPFA+CisKK1lvdSBjcmVhdGUgYSBwYW5lbCBmcm9tIGEgd2luZG93IGJ5IGNhbGxpbmcgPENPREU+bmV3X3BhbmVsKCk8L0NPREU+IG9uIGEKK3dpbmRvdyBwb2ludGVyLiAgSXQgdGhlbiBiZWNvbWVzIHRoZSB0b3Agb2YgdGhlIGRlY2suICBUaGUgcGFuZWwncyB3aW5kb3cKK2lzIGF2YWlsYWJsZSBhcyB0aGUgdmFsdWUgb2YgPENPREU+cGFuZWxfd2luZG93KCk8L0NPREU+IGNhbGxlZCB3aXRoIHRoZQorcGFuZWwgcG9pbnRlciBhcyBhcmd1bWVudC48UD4KKworWW91IGNhbiBkZWxldGUgYSBwYW5lbCAocmVtb3ZpbmcgaXQgZnJvbSB0aGUgZGVjaykgd2l0aCA8Q09ERT5kZWxfcGFuZWw8L0NPREU+LgorVGhpcyB3aWxsIG5vdCBkZWFsbG9jYXRlIHRoZSBhc3NvY2lhdGVkIHdpbmRvdzsgeW91IGhhdmUgdG8gZG8gdGhhdCB5b3Vyc2VsZi4KKworWW91IGNhbiByZXBsYWNlIGEgcGFuZWwncyB3aW5kb3cgd2l0aCBhIGRpZmZlcmVudCB3aW5kb3cgYnkgY2FsbGluZworPENPREU+cmVwbGFjZV93aW5kb3c8L0NPREU+LiAgVGhlIG5ldyB3aW5kb3cgbWF5IGJlIG9mIGRpZmZlcmVudCBzaXplOwordGhlIHBhbmVsIGNvZGUgd2lsbCByZS1jb21wdXRlIGFsbCBvdmVybGFwcy4gIFRoaXMgb3BlcmF0aW9uIGRvZXNuJ3QKK2NoYW5nZSB0aGUgcGFuZWwncyBwb3NpdGlvbiBpbiB0aGUgZGVjay4gPFA+CisKK1RvIG1vdmUgYSBwYW5lbCdzIHdpbmRvdywgdXNlIDxDT0RFPm1vdmVfcGFuZWwoKTwvQ09ERT4uICBUaGUKKzxDT0RFPm12d2luKCk8L0NPREU+IGZ1bmN0aW9uIG9uIHRoZSBwYW5lbCdzIHdpbmRvdyBpc24ndCBzdWZmaWNpZW50IGJlY2F1c2UgaXQKK2RvZXNuJ3QgdXBkYXRlIHRoZSBwYW5lbHMgbGlicmFyeSdzIHJlcHJlc2VudGF0aW9uIG9mIHdoZXJlIHRoZSB3aW5kb3dzIGFyZS4KK1RoaXMgb3BlcmF0aW9uIGxlYXZlcyB0aGUgcGFuZWwncyBkZXB0aCwgY29udGVudHMsIGFuZCBzaXplIHVuY2hhbmdlZC4gPFA+CisKK1R3byBmdW5jdGlvbnMgKDxDT0RFPnRvcF9wYW5lbCgpPC9DT0RFPiwgPENPREU+Ym90dG9tX3BhbmVsKCk8L0NPREU+KSBhcmUKK3Byb3ZpZGVkIGZvciByZWFycmFuZ2luZyB0aGUgZGVjay4gIFRoZSBmaXJzdCBwb3BzIGl0cyBhcmd1bWVudCB3aW5kb3cgdG8gdGhlCit0b3Agb2YgdGhlIGRlY2s7IHRoZSBzZWNvbmQgc2VuZHMgaXQgdG8gdGhlIGJvdHRvbS4gIEVpdGhlciBvcGVyYXRpb24gbGVhdmVzCit0aGUgcGFuZWwncyBzY3JlZW4gbG9jYXRpb24sIGNvbnRlbnRzLCBhbmQgc2l6ZSB1bmNoYW5nZWQuIDxQPgorCitUaGUgZnVuY3Rpb24gPENPREU+dXBkYXRlX3BhbmVscygpPC9DT0RFPiBkb2VzIGFsbCB0aGUKKzxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBjYWxscyBuZWVkZWQgdG8gcHJlcGFyZSBmb3IKKzxDT0RFPmRvdXBkYXRlKCk8L0NPREU+ICh3aGljaCB5b3UgbXVzdCBjYWxsIHlvdXJzZWxmLCBhZnRlcndhcmRzKS4gPFA+CisKK1R5cGljYWxseSwgeW91IHdpbGwgd2FudCB0byBjYWxsIDxDT0RFPnVwZGF0ZV9wYW5lbHMoKTwvQ09ERT4gYW5kCis8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPiBqdXN0IGJlZm9yZSBhY2NlcHRpbmcgY29tbWFuZCBpbnB1dCwgb25jZSBpbiBlYWNoIGN5Y2xlCitvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1c2VyLiAgSWYgeW91IGNhbGwgPENPREU+dXBkYXRlX3BhbmVscygpPC9DT0RFPiBhZnRlcgorZWFjaCBhbmQgZXZlcnkgcGFuZWwgd3JpdGUsIHlvdSdsbCBnZW5lcmF0ZSBhIGxvdCBvZiB1bm5lY2Vzc2FyeSByZWZyZXNoCithY3Rpdml0eSBhbmQgc2NyZWVuIGZsaWNrZXIuCisKKzxIMj48QSBOQU1FPSJwc3Rkc2NyIj5QYW5lbHMsIElucHV0LCBhbmQgdGhlIFN0YW5kYXJkIFNjcmVlbjwvQT48L0gyPgorCitZb3Ugc2hvdWxkbid0IG1peCA8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4gb3IgPENPREU+d3JlZnJlc2goKTwvQ09ERT4KK29wZXJhdGlvbnMgd2l0aCBwYW5lbHMgY29kZTsgdGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgYXJndW1lbnQgd2luZG93CitpcyBlaXRoZXIgaW4gdGhlIHRvcCBwYW5lbCBvciB1bm9ic2N1cmVkIGJ5IGFueSBvdGhlciBwYW5lbHMuIDxQPgorCitUaGUgPENPREU+c3RzZGNyPC9DT0RFPiB3aW5kb3cgaXMgYSBzcGVjaWFsIGNhc2UuICBJdCBpcyBjb25zaWRlcmVkIGJlbG93IGFsbAorcGFuZWxzLiAgQmVjYXVzZSBjaGFuZ2VzIHRvIHBhbmVscyBtYXkgb2JzY3VyZSBwYXJ0cyBvZiA8Q09ERT5zdGRzY3I8L0NPREU+LAordGhvdWdoLCB5b3Ugc2hvdWxkIGNhbGwgPENPREU+dXBkYXRlX3BhbmVscygpPC9DT0RFPiBiZWZvcmUKKzxDT0RFPmRvdXBkYXRlKCk8L0NPREU+IGV2ZW4gd2hlbiB5b3Ugb25seSBjaGFuZ2UgPENPREU+c3Rkc2NyPC9DT0RFPi4gPFA+CisKK05vdGUgdGhhdCA8Q09ERT53Z2V0Y2g8L0NPREU+IGF1dG9tYXRpY2FsbHkgY2FsbHMgPENPREU+d3JlZnJlc2g8L0NPREU+LgorVGhlcmVmb3JlLCBiZWZvcmUgcmVxdWVzdGluZyBpbnB1dCBmcm9tIGEgcGFuZWwgd2luZG93LCB5b3UgbmVlZCB0byBiZSBzdXJlCit0aGF0IHRoZSBwYW5lbCBpcyB0b3RhbGx5IHVub2JzY3VyZWQuIDxQPgorCitUaGVyZSBpcyBwcmVzZW50bHkgbm8gd2F5IHRvIGRpc3BsYXkgY2hhbmdlcyB0byBvbmUgb2JzY3VyZWQgcGFuZWwgd2l0aG91dAorcmVwYWludGluZyBhbGwgcGFuZWxzLgorCis8SDI+PEEgTkFNRT0iaGlkaW5nIj5IaWRpbmcgUGFuZWxzPC9BPjwvSDI+CisKK0l0J3MgcG9zc2libGUgdG8gcmVtb3ZlIGEgcGFuZWwgZnJvbSB0aGUgZGVjayB0ZW1wb3JhcmlseTsgdXNlCis8Q09ERT5oaWRlX3BhbmVsPC9DT0RFPiBmb3IgdGhpcy4gIFVzZSA8Q09ERT5zaG93X3BhbmVsKCk8L0NPREU+IHRvIHJlbmRlciBpdAordmlzaWJsZSBhZ2Fpbi4gIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gPENPREU+cGFuZWxfaGlkZGVuPC9DT0RFPgordGVzdHMgd2hldGhlciBvciBub3QgYSBwYW5lbCBpcyBoaWRkZW4uIDxQPgorCitUaGUgPENPREU+cGFuZWxfdXBkYXRlPC9DT0RFPiBjb2RlIGlnbm9yZXMgaGlkZGVuIHBhbmVscy4gIFlvdSBjYW5ub3QgZG8KKzxDT0RFPnRvcF9wYW5lbCgpPC9DT0RFPiBvciA8Q09ERT5ib3R0b21fcGFuZWw8L0NPREU+IG9uIGEgaGlkZGVuIHBhbmVsKCkuCitPdGhlciBwYW5lbHMgb3BlcmF0aW9ucyBhcmUgYXBwbGljYWJsZS4KKworPEgyPjxBIE5BTUU9InBtaXNjIj5NaXNjZWxsYW5lb3VzIE90aGVyIEZhY2lsaXRpZXM8L0E+PC9IMj4KKworSXQncyBwb3NzaWJsZSB0byBuYXZpZ2F0ZSB0aGUgZGVjayB1c2luZyB0aGUgZnVuY3Rpb25zCis8Q09ERT5wYW5lbF9hYm92ZSgpPC9DT0RFPiBhbmQgPENPREU+cGFuZWxfYmVsb3c8L0NPREU+LiAgSGFuZGVkIGEgcGFuZWwKK3BvaW50ZXIsIHRoZXkgcmV0dXJuIHRoZSBwYW5lbCBhYm92ZSBvciBiZWxvdyB0aGF0IHBhbmVsLiAgSGFuZGVkCis8Q09ERT5OVUxMPC9DT0RFPiwgdGhleSByZXR1cm4gdGhlIGJvdHRvbS1tb3N0IG9yIHRvcC1tb3N0IHBhbmVsLiA8UD4KKworRXZlcnkgcGFuZWwgaGFzIGFuIGFzc29jaWF0ZWQgdXNlciBwb2ludGVyLCBub3QgdXNlZCBieSB0aGUgcGFuZWwgY29kZSwgdG8KK3doaWNoIHlvdSBjYW4gYXR0YWNoIGFwcGxpY2F0aW9uIGRhdGEuICBTZWUgdGhlIG1hbiBwYWdlIGRvY3VtZW50YXRpb24KK29mIDxDT0RFPnNldF9wYW5lbF91c2VycHRyKCk8L0NPREU+IGFuZCA8Q09ERT5wYW5lbF91c2VycHRyPC9DT0RFPiBmb3IKK2RldGFpbHMuCisKKzxIMT48QSBOQU1FPSJtZW51Ij5UaGUgTWVudSBMaWJyYXJ5PC9BPjwvSDE+CisKK0EgbWVudSBpcyBhIHNjcmVlbiBkaXNwbGF5IHRoYXQgYXNzaXN0cyB0aGUgdXNlciB0byBjaG9vc2Ugc29tZSBzdWJzZXQKK29mIGEgZ2l2ZW4gc2V0IG9mIGl0ZW1zLiAgVGhlIDxDT0RFPm1lbnU8L0NPREU+IGxpYnJhcnkgaXMgYSBjdXJzZXMKK2V4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIGVhc3kgcHJvZ3JhbW1pbmcgb2YgbWVudSBoaWVyYXJjaGllcyB3aXRoIGEKK3VuaWZvcm0gYnV0IGZsZXhpYmxlIGludGVyZmFjZS4gPFA+CisKK1RoZSA8Q09ERT5tZW51PC9DT0RFPiBsaWJyYXJ5IGZpcnN0IGFwcGVhcmVkIGluIEFUJmFtcDtUIFN5c3RlbSBWLiAgVGhlCit2ZXJzaW9uIGRvY3VtZW50ZWQgaGVyZSBpcyB0aGUgPENPREU+bWVudTwvQ09ERT4gY29kZSBkaXN0cmlidXRlZAord2l0aCA8Q09ERT5uY3Vyc2VzPC9DT0RFPi4KKworPEgyPjxBIE5BTUU9Im1jb21waWxlIj5Db21waWxpbmcgV2l0aCB0aGUgbWVudSBMaWJyYXJ5PC9BPjwvSDI+CisKK1lvdXIgbWVudS11c2luZyBtb2R1bGVzIG11c3QgaW1wb3J0IHRoZSBtZW51IGxpYnJhcnkgZGVjbGFyYXRpb25zIHdpdGgKKworPFBSRT4KKwkgICNpbmNsdWRlICZsdDttZW51LmgmZ3Q7Cis8L1BSRT4KKworYW5kIG11c3QgYmUgbGlua2VkIGV4cGxpY2l0bHkgd2l0aCB0aGUgbWVudXMgbGlicmFyeSB1c2luZyBhbgorPENPREU+LWxtZW51PC9DT0RFPiBhcmd1bWVudC4gIE5vdGUgdGhhdCB0aGV5IG11c3QgYWxzbyBsaW5rIHRoZQorPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSB3aXRoIDxDT0RFPi1sbmN1cnNlczwvQ09ERT4uICBNYW55IGxpbmtlcnMKK2FyZSB0d28tcGFzcyBhbmQgd2lsbCBhY2NlcHQgZWl0aGVyIG9yZGVyLCBidXQgaXQgaXMgc3RpbGwgZ29vZCBwcmFjdGljZQordG8gcHV0IDxDT0RFPi1sbWVudTwvQ09ERT4gZmlyc3QgYW5kIDxDT0RFPi1sbmN1cnNlczwvQ09ERT4gc2Vjb25kLgorCis8SDI+PEEgTkFNRT0ibW92ZXJ2aWV3Ij5PdmVydmlldyBvZiBNZW51czwvQT48L0gyPgorCitUaGUgbWVudXMgY3JlYXRlZCBieSB0aGlzIGxpYnJhcnkgY29uc2lzdCBvZiBjb2xsZWN0aW9ucyBvZgorPERGTj5pdGVtczwvREZOPiBpbmNsdWRpbmcgYSBuYW1lIHN0cmluZyBwYXJ0IGFuZCBhIGRlc2NyaXB0aW9uIHN0cmluZworcGFydC4gIFRvIG1ha2UgbWVudXMsIHlvdSBjcmVhdGUgZ3JvdXBzIG9mIHRoZXNlIGl0ZW1zIGFuZCBjb25uZWN0Cit0aGVtIHdpdGggbWVudSBmcmFtZSBvYmplY3RzLiA8UD4KKworVGhlIG1lbnUgY2FuIHRoZW4gYnkgPERGTj5wb3N0ZWQ8L0RGTj4sIHRoYXQgaXMgd3JpdHRlbiB0byBhbgorYXNzb2NpYXRlZCB3aW5kb3cuICBBY3R1YWxseSwgZWFjaCBtZW51IGhhcyB0d28gYXNzb2NpYXRlZCB3aW5kb3dzOyBhCitjb250YWluaW5nIHdpbmRvdyBpbiB3aGljaCB0aGUgcHJvZ3JhbW1lciBjYW4gc2NyaWJibGUgdGl0bGVzIG9yCitib3JkZXJzLCBhbmQgYSBzdWJ3aW5kb3cgaW4gd2hpY2ggdGhlIG1lbnUgaXRlbXMgcHJvcGVyIGFyZSBkaXNwbGF5ZWQuCitJZiB0aGlzIHN1YndpbmRvdyBpcyB0b28gc21hbGwgdG8gZGlzcGxheSBhbGwgdGhlIGl0ZW1zLCBpdCB3aWxsIGJlIGEKK3Njcm9sbGFibGUgdmlld3BvcnQgb24gdGhlIGNvbGxlY3Rpb24gb2YgaXRlbXMuIDxQPgorCitBIG1lbnUgbWF5IGFsc28gYmUgPERGTj51bnBvc3RlZDwvREZOPiAodGhhdCBpcywgdW5kaXNwbGF5ZWQpLCBhbmQgZmluYWxseQorZnJlZWQgdG8gbWFrZSB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGl0cyBpdGVtcyBhdmFpbGFibGUgZm9yCityZS11c2UuIDxQPgorCitUaGUgZ2VuZXJhbCBmbG93IG9mIGNvbnRyb2wgb2YgYSBtZW51IHByb2dyYW0gbG9va3MgbGlrZSB0aGlzOgorCis8T0w+Cis8TEk+SW5pdGlhbGl6ZSA8Q09ERT5jdXJzZXM8L0NPREU+LgorPExJPkNyZWF0ZSB0aGUgbWVudSBpdGVtcywgdXNpbmcgPENPREU+bmV3X2l0ZW0oKTwvQ09ERT4uCis8TEk+Q3JlYXRlIHRoZSBtZW51IHVzaW5nIDxDT0RFPm5ld19tZW51KCk8L0NPREU+LgorPExJPlBvc3QgdGhlIG1lbnUgdXNpbmcgPENPREU+cG9zdF9tZW51KCk8L0NPREU+LgorPExJPlJlZnJlc2ggdGhlIHNjcmVlbi4KKzxMST5Qcm9jZXNzIHVzZXIgcmVxdWVzdHMgdmlhIGFuIGlucHV0IGxvb3AuCis8TEk+VW5wb3N0IHRoZSBtZW51IHVzaW5nIDxDT0RFPnVucG9zdF9tZW51KCk8L0NPREU+LgorPExJPkZyZWUgdGhlIG1lbnUsIHVzaW5nIDxDT0RFPmZyZWVfbWVudSgpPC9DT0RFPi4KKzxMST5GcmVlIHRoZSBpdGVtcyB1c2luZyA8Q09ERT5mcmVlX2l0ZW0oKTwvQ09ERT4uCis8TEk+VGVybWluYXRlIDxDT0RFPmN1cnNlczwvQ09ERT4uCis8L09MPgorCis8SDI+PEEgTkFNRT0ibXNlbGVjdCI+U2VsZWN0aW5nIGl0ZW1zPC9BPjwvSDI+CisKK01lbnVzIG1heSBiZSBtdWx0aS12YWx1ZWQgb3IgKHRoZSBkZWZhdWx0KSBzaW5nbGUtdmFsdWVkIChzZWUgdGhlIG1hbnVhbAorcGFnZSA8Q09ERT5tZW51X29wdHMoM3gpPC9DT0RFPiB0byBzZWUgaG93IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCkuCitCb3RoIHR5cGVzIGFsd2F5cyBoYXZlIGEgPERGTj5jdXJyZW50IGl0ZW08L0RGTj4uIDxQPgorCitGcm9tIGEgc2luZ2xlLXZhbHVlZCBtZW51IHlvdSBjYW4gcmVhZCB0aGUgc2VsZWN0ZWQgdmFsdWUgc2ltcGx5IGJ5IGxvb2tpbmcKK2F0IHRoZSBjdXJyZW50IGl0ZW0uICBGcm9tIGEgbXVsdGktdmFsdWVkIG1lbnUsIHlvdSBnZXQgdGhlIHNlbGVjdGVkIHNldAorYnkgbG9vcGluZyB0aHJvdWdoIHRoZSBpdGVtcyBhcHBseWluZyB0aGUgPENPREU+aXRlbV92YWx1ZSgpPC9DT0RFPgorcHJlZGljYXRlIGZ1bmN0aW9uLiAgWW91ciBtZW51LXByb2Nlc3NpbmcgY29kZSBjYW4gdXNlIHRoZSBmdW5jdGlvbgorPENPREU+c2V0X2l0ZW1fdmFsdWUoKTwvQ09ERT4gdG8gZmxhZyB0aGUgaXRlbXMgaW4gdGhlIHNlbGVjdCBzZXQuIDxQPgorCitNZW51IGl0ZW1zIGNhbiBiZSBtYWRlIHVuc2VsZWN0YWJsZSB1c2luZyA8Q09ERT5zZXRfaXRlbV9vcHRzKCk8L0NPREU+CitvciA8Q09ERT5pdGVtX29wdHNfb2ZmKCk8L0NPREU+IHdpdGggdGhlIDxDT0RFPk9fU0VMRUNUQUJMRTwvQ09ERT4KK2FyZ3VtZW50LiAgVGhpcyBpcyB0aGUgb25seSBvcHRpb24gc28gZmFyIGRlZmluZWQgZm9yIG1lbnVzLCBidXQgaXQKK2lzIGdvb2QgcHJhY3RpY2UgdG8gY29kZSBhcyB0aG91Z2ggb3RoZXIgb3B0aW9uIGJpdHMgbWlnaHQgYmUgb24uCisKKzxIMj48QSBOQU1FPSJtZGlzcGxheSI+TWVudSBEaXNwbGF5PC9BPjwvSDI+CisKK1RoZSBtZW51IGxpYnJhcnkgY2FsY3VsYXRlcyBhIG1pbmltdW0gZGlzcGxheSBzaXplIGZvciB5b3VyIHdpbmRvdywgYmFzZWQKK29uIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCis8VUw+Cis8TEk+VGhlIG51bWJlciBhbmQgbWF4aW11bSBsZW5ndGggb2YgdGhlIG1lbnUgaXRlbXMKKzxMST5XaGV0aGVyIHRoZSBPX1JPV01BSk9SIG9wdGlvbiBpcyBlbmFibGVkCis8TEk+V2hldGhlciBkaXNwbGF5IG9mIGRlc2NyaXB0aW9ucyBpcyBlbmFibGVkCis8TEk+V2hhdGV2ZXIgbWVudSBmb3JtYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgdGhlIHByb2dyYW1tZXIKKzxMST5UaGUgbGVuZ3RoIG9mIHRoZSBtZW51IG1hcmsgc3RyaW5nIHVzZWQgZm9yIGhpZ2hsaWdodGluZyBzZWxlY3RlZCBpdGVtcworPC9VTD4KKworVGhlIGZ1bmN0aW9uIDxDT0RFPnNldF9tZW51X2Zvcm1hdCgpPC9DT0RFPiBhbGxvd3MgeW91IHRvIHNldCB0aGUKK21heGltdW0gc2l6ZSBvZiB0aGUgdmlld3BvcnQgb3IgPERGTj5tZW51IHBhZ2U8L0RGTj4gdGhhdCB3aWxsIGJlIHVzZWQKK3RvIGRpc3BsYXkgbWVudSBpdGVtcy4gIFlvdSBjYW4gcmV0cmlldmUgYW55IGZvcm1hdCBhc3NvY2lhdGVkIHdpdGggYQorbWVudSB3aXRoIDxDT0RFPm1lbnVfZm9ybWF0KCk8L0NPREU+LiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgcm93cz0xNiwKK2NvbHVtbnM9MS4gPFA+CisKK1RoZSBhY3R1YWwgbWVudSBwYWdlIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIGZvcm1hdCBzaXplLiAgVGhpcyBkZXBlbmRzCitvbiB0aGUgaXRlbSBudW1iZXIgYW5kIHNpemUgYW5kIHdoZXRoZXIgT19ST1dNQUpPUiBpcyBvbi4gIFRoaXMgb3B0aW9uCisob24gYnkgZGVmYXVsdCkgY2F1c2VzIG1lbnUgaXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIGEgYHJhc3Rlci1zY2FuJworcGF0dGVybiwgc28gdGhhdCBpZiBtb3JlIHRoYW4gb25lIGl0ZW0gd2lsbCBmaXQgaG9yaXpvbnRhbGx5IHRoZSBmaXJzdAorY291cGxlIG9mIGl0ZW1zIGFyZSBzaWRlLWJ5LXNpZGUgaW4gdGhlIHRvcCByb3cuICBUaGUgYWx0ZXJuYXRpdmUgaXMKK2NvbHVtbi1tYWpvciBkaXNwbGF5LCB3aGljaCB0cmllcyB0byBwdXQgdGhlIGZpcnN0IHNldmVyYWwgaXRlbXMgaW4KK3RoZSBmaXJzdCBjb2x1bW4uIDxQPgorCitBcyBtZW50aW9uZWQgYWJvdmUsIGEgbWVudSBmb3JtYXQgbm90IGxhcmdlIGVub3VnaCB0byBhbGxvdyBhbGwgaXRlbXMgdG8gZml0Citvbi1zY3JlZW4gd2lsbCByZXN1bHQgaW4gYSBtZW51IGRpc3BsYXkgdGhhdCBpcyB2ZXJ0aWNhbGx5IHNjcm9sbGFibGUuIDxQPgorWW91IGNhbiBzY3JvbGwgaXQgd2l0aCByZXF1ZXN0cyB0byB0aGUgbWVudSBkcml2ZXIsIHdoaWNoIHdpbGwgYmUgZGVzY3JpYmVkCitpbiB0aGUgc2VjdGlvbiBvbiA8QSBIUkVGPSIjbWlucHV0Ij5tZW51IGlucHV0IGhhbmRsaW5nPC9BPi4gPFA+CisKK0VhY2ggbWVudSBoYXMgYSA8REZOPm1hcmsgc3RyaW5nPC9ERk4+IHVzZWQgdG8gdmlzdWFsbHkgdGFnIHNlbGVjdGVkIGl0ZW1zOworc2VlIHRoZSA8Q09ERT5tZW51X21hcmsoM3gpPC9DT0RFPiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4gIFRoZSBtYXJrCitzdHJpbmcgbGVuZ3RoIGFsc28gaW5mbHVlbmNlcyB0aGUgbWVudSBwYWdlIHNpemUuIDxQPgorCitUaGUgZnVuY3Rpb24gPENPREU+c2NhbGVfbWVudSgpPC9DT0RFPiByZXR1cm5zIHRoZSBtaW5pbXVtIGRpc3BsYXkgc2l6ZQordGhhdCB0aGUgbWVudSBjb2RlIGNvbXB1dGVzIGZyb20gYWxsIHRoZXNlIGZhY3RvcnMuCisKK1RoZXJlIGFyZSBvdGhlciBtZW51IGRpc3BsYXkgYXR0cmlidXRlcyBpbmNsdWRpbmcgYSBzZWxlY3QgYXR0cmlidXRlLAorYW4gYXR0cmlidXRlIGZvciBzZWxlY3RhYmxlIGl0ZW1zLCBhbiBhdHRyaWJ1dGUgZm9yIHVuc2VsZWN0YWJsZSBpdGVtcywKK2FuZCBhIHBhZCBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBpdGVtIG5hbWUgdGV4dCBmcm9tIGRlc2NyaXB0aW9uCit0ZXh0LiAgVGhlc2UgaGF2ZSByZWFzb25hYmxlIGRlZmF1bHRzIHdoaWNoIHRoZSBsaWJyYXJ5IGFsbG93cyB5b3UgdG8KK2NoYW5nZSAoc2VlIHRoZSA8Q09ERT5tZW51X2F0dHJpYnMoM3gpPC9DT0RFPiBtYW51YWwgcGFnZS4KKworPEgyPjxBIE5BTUU9Im13aW5kb3dzIj5NZW51IFdpbmRvd3M8L0E+PC9IMj4KKworRWFjaCBtZW51IGhhcywgYXMgbWVudGlvbmVkIHByZXZpb3VzbHksIGEgcGFpciBvZiBhc3NvY2lhdGVkIHdpbmRvd3MuCitCb3RoIHRoZXNlIHdpbmRvd3MgYXJlIHBhaW50ZWQgd2hlbiB0aGUgbWVudSBpcyBwb3N0ZWQgYW5kIGVyYXNlZCB3aGVuCit0aGUgbWVudSBpcyB1bnBvc3RlZC4gPFA+CisKK1RoZSBvdXRlciBvciBmcmFtZSB3aW5kb3cgaXMgbm90IG90aGVyd2lzZSB0b3VjaGVkIGJ5IHRoZSBtZW51Cityb3V0aW5lcy4gIEl0IGV4aXN0cyBzbyB0aGUgcHJvZ3JhbW1lciBjYW4gYXNzb2NpYXRlIGEgdGl0bGUsIGEKK2JvcmRlciwgb3IgcGVyaGFwcyBoZWxwIHRleHQgd2l0aCB0aGUgbWVudSBhbmQgaGF2ZSBpdCBwcm9wZXJseQorcmVmcmVzaGVkIG9yIGVyYXNlZCBhdCBwb3N0L3VucG9zdCB0aW1lLiAgVGhlIGlubmVyIHdpbmRvdyBvcgorPERGTj5zdWJ3aW5kb3c8L0RGTj4gaXMgd2hlcmUgdGhlIGN1cnJlbnQgbWVudSBwYWdlIGlzIGRpc3BsYXllZC4gPFA+CisKK0J5IGRlZmF1bHQsIGJvdGggd2luZG93cyBhcmUgPENPREU+c3Rkc2NyPC9DT0RFPi4gIFlvdSBjYW4gc2V0IHRoZW0gd2l0aCB0aGUKK2Z1bmN0aW9ucyBpbiA8Q09ERT5tZW51X3dpbigzeCk8L0NPREU+LiA8UD4KKworV2hlbiB5b3UgY2FsbCA8Q09ERT5wb3N0X21lbnUoKTwvQ09ERT4sIHlvdSB3cml0ZSB0aGUgbWVudSB0byBpdHMKK3N1YndpbmRvdy4gIFdoZW4geW91IGNhbGwgPENPREU+dW5wb3N0X21lbnUoKTwvQ09ERT4sIHlvdSBlcmFzZSB0aGUKK3N1YndpbmRvdywgSG93ZXZlciwgbmVpdGhlciBvZiB0aGVzZSBhY3R1YWxseSBtb2RpZmllcyB0aGUgc2NyZWVuLiAgVG8KK2RvIHRoYXQsIGNhbGwgPENPREU+d3JlZnJlc2goKTwvQ09ERT4gb3Igc29tZSBlcXVpdmFsZW50LgorCis8SDI+PEEgTkFNRT0ibWlucHV0Ij5Qcm9jZXNzaW5nIE1lbnUgSW5wdXQ8L0E+PC9IMj4KKworVGhlIG1haW4gbG9vcCBvZiB5b3VyIG1lbnUtcHJvY2Vzc2luZyBjb2RlIHNob3VsZCBjYWxsCis8Q09ERT5tZW51X2RyaXZlcigpPC9DT0RFPiByZXBlYXRlZGx5LiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhpcyByb3V0aW5lCitpcyBhIG1lbnUgcG9pbnRlcjsgdGhlIHNlY29uZCBpcyBhIG1lbnUgY29tbWFuZCBjb2RlLiAgWW91IHNob3VsZCB3cml0ZSBhbgoraW5wdXQtZmV0Y2hpbmcgcm91dGluZSB0aGF0IG1hcHMgaW5wdXQgY2hhcmFjdGVycyB0byBtZW51IGNvbW1hbmQgY29kZXMsIGFuZAorcGFzcyBpdHMgb3V0cHV0IHRvIDxDT0RFPm1lbnVfZHJpdmVyKCk8L0NPREU+LiAgVGhlIG1lbnUgY29tbWFuZCBjb2RlcyBhcmUKK2Z1bGx5IGRvY3VtZW50ZWQgaW4gPENPREU+bWVudV9kcml2ZXIoM3gpPC9DT0RFPi4gPFA+CisKK1RoZSBzaW1wbGVzdCBncm91cCBvZiBjb21tYW5kIGNvZGVzIGlzIDxDT0RFPlJFUV9ORVhUX0lURU08L0NPREU+LAorPENPREU+UkVRX1BSRVZfSVRFTTwvQ09ERT4sIDxDT0RFPlJFUV9GSVJTVF9JVEVNPC9DT0RFPiwKKzxDT0RFPlJFUV9MQVNUX0lURU08L0NPREU+LCA8Q09ERT5SRVFfVVBfSVRFTTwvQ09ERT4sCis8Q09ERT5SRVFfRE9XTl9JVEVNPC9DT0RFPiwgPENPREU+UkVRX0xFRlRfSVRFTTwvQ09ERT4sCis8Q09ERT5SRVFfUklHSFRfSVRFTTwvQ09ERT4uICBUaGVzZSBjaGFuZ2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAoraXRlbS4gIFRoZXNlIHJlcXVlc3RzIG1heSBjYXVzZSBzY3JvbGxpbmcgb2YgdGhlIG1lbnUgcGFnZSBpZiBpdCBvbmx5CitwYXJ0aWFsbHkgZGlzcGxheWVkLiA8UD4KKworVGhlcmUgYXJlIGV4cGxpY2l0IHJlcXVlc3RzIGZvciBzY3JvbGxpbmcgd2hpY2ggYWxzbyBjaGFuZ2UgdGhlCitjdXJyZW50IGl0ZW0gKGJlY2F1c2UgdGhlIHNlbGVjdCBsb2NhdGlvbiBkb2VzIG5vdCBjaGFuZ2UsIGJ1dCB0aGUKK2l0ZW0gdGhlcmUgZG9lcykuICBUaGVzZSBhcmUgPENPREU+UkVRX1NDUl9ETElORTwvQ09ERT4sCis8Q09ERT5SRVFfU0NSX1VMSU5FPC9DT0RFPiwgPENPREU+UkVRX1NDUl9EUEFHRTwvQ09ERT4sIGFuZAorPENPREU+UkVRX1NDUl9VUEFHRTwvQ09ERT4uIDxQPgorCitUaGUgPENPREU+UkVRX1RPR0dMRV9JVEVNPC9DT0RFPiBzZWxlY3RzIG9yIGRlc2VsZWN0cyB0aGUgY3VycmVudCBpdGVtLgorSXQgaXMgZm9yIHVzZSBpbiBtdWx0aS12YWx1ZWQgbWVudXM7IGlmIHlvdSB1c2UgaXQgd2l0aCA8Q09ERT5PX09ORVZBTFVFPC9DT0RFPgorb24sIHlvdSdsbCBnZXQgYW4gZXJyb3IgcmV0dXJuICg8Q09ERT5FX1JFUVVFU1RfREVOSUVEPC9DT0RFPikuIDxQPgorCitFYWNoIG1lbnUgaGFzIGFuIGFzc29jaWF0ZWQgcGF0dGVybiBidWZmZXIuICBUaGUKKzxDT0RFPm1lbnVfZHJpdmVyKCk8L0NPREU+IGxvZ2ljIHRyaWVzIHRvIGFjY3VtdWxhdGUgcHJpbnRhYmxlIEFTQ0lJCitjaGFyYWN0ZXJzIHBhc3NlZCBpbiBpbiB0aGF0IGJ1ZmZlcjsgd2hlbiBpdCBtYXRjaGVzIGEgcHJlZml4IG9mIGFuCitpdGVtIG5hbWUsIHRoYXQgaXRlbSAob3IgdGhlIG5leHQgbWF0Y2hpbmcgaXRlbSkgaXMgc2VsZWN0ZWQuICBJZgorYXBwZW5kaW5nIGEgY2hhcmFjdGVyIHlpZWxkcyBubyBuZXcgbWF0Y2gsIHRoYXQgY2hhcmFjdGVyIGlzIGRlbGV0ZWQKK2Zyb20gdGhlIHBhdHRlcm4gYnVmZmVyLCBhbmQgPENPREU+bWVudV9kcml2ZXIoKTwvQ09ERT4gcmV0dXJucworPENPREU+RV9OT19NQVRDSDwvQ09ERT4uIDxQPgorCitTb21lIHJlcXVlc3RzIGNoYW5nZSB0aGUgcGF0dGVybiBidWZmZXIgZGlyZWN0bHk6Cis8Q09ERT5SRVFfQ0xFQVJfUEFUVEVSTjwvQ09ERT4sIDxDT0RFPlJFUV9CQUNLX1BBVFRFUk48L0NPREU+LAorPENPREU+UkVRX05FWFRfTUFUQ0g8L0NPREU+LCA8Q09ERT5SRVFfUFJFVl9NQVRDSDwvQ09ERT4uICBUaGUgbGF0dGVyCit0d28gYXJlIHVzZWZ1bCB3aGVuIHBhdHRlcm4gYnVmZmVyIGlucHV0IG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBpdGVtCitpbiBhIG11bHRpLXZhbHVlZCBtZW51LiA8UD4KKworRWFjaCBzdWNjZXNzZnVsIHNjcm9sbCBvciBpdGVtIG5hdmlnYXRpb24gcmVxdWVzdCBjbGVhcnMgdGhlIHBhdHRlcm4KK2J1ZmZlci4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSBwYXR0ZXJuIGJ1ZmZlciBleHBsaWNpdGx5Cit3aXRoIDxDT0RFPnNldF9tZW51X3BhdHRlcm4oKTwvQ09ERT4uIDxQPgorCitGaW5hbGx5LCBtZW51IGRyaXZlciByZXF1ZXN0cyBhYm92ZSB0aGUgY29uc3RhbnQgPENPREU+TUFYX0NPTU1BTkQ8L0NPREU+CithcmUgY29uc2lkZXJlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb21tYW5kcy4gIFRoZSA8Q09ERT5tZW51X2RyaXZlcigpPC9DT0RFPgorY29kZSBpZ25vcmVzIHRoZW0gYW5kIHJldHVybnMgPENPREU+RV9VTktOT1dOX0NPTU1BTkQ8L0NPREU+LgorCis8SDI+PEEgTkFNRT0ibW1pc2MiPk1pc2NlbGxhbmVvdXMgT3RoZXIgRmVhdHVyZXM8L0E+PC9IMj4KKworVmFyaW91cyBtZW51IG9wdGlvbnMgY2FuIGFmZmVjdCB0aGUgcHJvY2Vzc2luZyBhbmQgdmlzdWFsIGFwcGVhcmFuY2UKK2FuZCBpbnB1dCBwcm9jZXNzaW5nIG9mIG1lbnVzLiAgU2VlIDxDT0RFPm1lbnVfb3B0cygzeCkgZm9yCitkZXRhaWxzLjwvQ09ERT4gPFA+CisKK0l0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgY3VycmVudCBpdGVtIGZyb20gYXBwbGljYXRpb24gY29kZTsgdGhpcworaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIG5hdmlnYXRpb24gcmVxdWVzdHMuICBJdCBpcworYWxzbyBwb3NzaWJsZSB0byBleHBsaWNpdGx5IHNldCB0aGUgdG9wIHJvdyBvZiB0aGUgbWVudSBkaXNwbGF5LiAgU2VlCis8Q09ERT5taXRlbV9jdXJyZW50KDN4KTwvQ09ERT4uCisKK0lmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgdG8gY2hhbmdlIHRoZSBtZW51IHN1YndpbmRvdyBjdXJzb3IgZm9yCithbnkgcmVhc29uLCA8Q09ERT5wb3NfbWVudV9jdXJzb3IoKTwvQ09ERT4gd2lsbCByZXN0b3JlIGl0IHRvIHRoZQorY29ycmVjdCBsb2NhdGlvbiBmb3IgY29udGludWluZyBtZW51IGRyaXZlciBwcm9jZXNzaW5nLiA8UD4KKworSXQgaXMgcG9zc2libGUgdG8gc2V0IGhvb2tzIHRvIGJlIGNhbGxlZCBhdCBtZW51IGluaXRpYWxpemF0aW9uIGFuZAord3JhcHVwIHRpbWUsIGFuZCB3aGVuZXZlciB0aGUgc2VsZWN0ZWQgaXRlbSBjaGFuZ2VzLiAgU2VlCis8Q09ERT5tZW51X2hvb2soM3gpPC9DT0RFPi4gPFA+CisKK0VhY2ggaXRlbSwgYW5kIGVhY2ggbWVudSwgaGFzIGFuIGFzc29jaWF0ZWQgdXNlciBwb2ludGVyIG9uIHdoaWNoIHlvdQorY2FuIGhhbmcgYXBwbGljYXRpb24gZGF0YS4gIFNlZSA8Q09ERT5taXRlbV91c2VycHRyKDN4KTwvQ09ERT4gYW5kCis8Q09ERT5tZW51X3VzZXJwdHIoM3gpPC9DT0RFPi4KKworPEgxPjxBIE5BTUU9ImZvcm0iPlRoZSBGb3JtcyBMaWJyYXJ5PC9BPjwvSDE+CisKK1RoZSA8Q09ERT5mb3JtPC9DT0RFPiBsaWJyYXJ5IGlzIGEgY3Vyc2VzIGV4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIGVhc3kKK3Byb2dyYW1taW5nIG9mIG9uLXNjcmVlbiBmb3JtcyBmb3IgZGF0YSBlbnRyeSBhbmQgcHJvZ3JhbSBjb250cm9sLiA8UD4KKworVGhlIDxDT0RFPmZvcm08L0NPREU+IGxpYnJhcnkgZmlyc3QgYXBwZWFyZWQgaW4gQVQmYW1wO1QgU3lzdGVtIFYuICBUaGUKK3ZlcnNpb24gZG9jdW1lbnRlZCBoZXJlIGlzIHRoZSA8Q09ERT5mb3JtPC9DT0RFPiBjb2RlIGRpc3RyaWJ1dGVkCit3aXRoIDxDT0RFPm5jdXJzZXM8L0NPREU+LgorCis8SDI+PEEgTkFNRT0iZmNvbXBpbGUiPkNvbXBpbGluZyBXaXRoIHRoZSBmb3JtIExpYnJhcnk8L0E+PC9IMj4KKworWW91ciBmb3JtLXVzaW5nIG1vZHVsZXMgbXVzdCBpbXBvcnQgdGhlIGZvcm0gbGlicmFyeSBkZWNsYXJhdGlvbnMgd2l0aAorCis8UFJFPgorCSAgI2luY2x1ZGUgJmx0O2Zvcm0uaCZndDsKKzwvUFJFPgorCithbmQgbXVzdCBiZSBsaW5rZWQgZXhwbGljaXRseSB3aXRoIHRoZSBmb3JtcyBsaWJyYXJ5IHVzaW5nIGFuCis8Q09ERT4tbGZvcm08L0NPREU+IGFyZ3VtZW50LiAgTm90ZSB0aGF0IHRoZXkgbXVzdCBhbHNvIGxpbmsgdGhlCis8Q09ERT5uY3Vyc2VzPC9DT0RFPiBsaWJyYXJ5IHdpdGggPENPREU+LWxuY3Vyc2VzPC9DT0RFPi4gIE1hbnkgbGlua2VycworYXJlIHR3by1wYXNzIGFuZCB3aWxsIGFjY2VwdCBlaXRoZXIgb3JkZXIsIGJ1dCBpdCBpcyBzdGlsbCBnb29kIHByYWN0aWNlCit0byBwdXQgPENPREU+LWxmb3JtPC9DT0RFPiBmaXJzdCBhbmQgPENPREU+LWxuY3Vyc2VzPC9DT0RFPiBzZWNvbmQuCisKKzxIMj48QSBOQU1FPSJmb3ZlcnZpZXciPk92ZXJ2aWV3IG9mIEZvcm1zPC9BPjwvSDI+CisKK0EgZm9ybSBpcyBhIGNvbGxlY3Rpb24gb2YgZmllbGRzOyBlYWNoIGZpZWxkIG1heSBiZSBlaXRoZXIgYSBsYWJlbAorKGV4cGxhbmF0b3J5IHRleHQpIG9yIGEgZGF0YS1lbnRyeSBsb2NhdGlvbi4gIExvbmcgZm9ybXMgbWF5IGJlCitzZWdtZW50ZWQgaW50byBwYWdlczsgZWFjaCBlbnRyeSB0byBhIG5ldyBwYWdlIGNsZWFycyB0aGUgc2NyZWVuLiA8UD4KK1RvIG1ha2UgZm9ybXMsIHlvdSBjcmVhdGUgZ3JvdXBzIG9mIGZpZWxkcyBhbmQgY29ubmVjdCB0aGVtIHdpdGggZm9ybQorZnJhbWUgb2JqZWN0czsgdGhlIGZvcm0gbGlicmFyeSBtYWtlcyB0aGlzIHJlbGF0aXZlbHkgc2ltcGxlLiA8UD4KKworT25jZSBkZWZpbmVkLCBhIGZvcm0gY2FuIGJlIDxERk4+cG9zdGVkPC9ERk4+LCB0aGF0IGlzIHdyaXR0ZW4gdG8gYW4KK2Fzc29jaWF0ZWQgd2luZG93LiAgQWN0dWFsbHksIGVhY2ggZm9ybSBoYXMgdHdvIGFzc29jaWF0ZWQgd2luZG93czsgYQorY29udGFpbmluZyB3aW5kb3cgaW4gd2hpY2ggdGhlIHByb2dyYW1tZXIgY2FuIHNjcmliYmxlIHRpdGxlcyBvcgorYm9yZGVycywgYW5kIGEgc3Vid2luZG93IGluIHdoaWNoIHRoZSBmb3JtIGZpZWxkcyBwcm9wZXIgYXJlIGRpc3BsYXllZC4gPFA+CisKK0FzIHRoZSBmb3JtIHVzZXIgZmlsbHMgb3V0IHRoZSBwb3N0ZWQgZm9ybSwgbmF2aWdhdGlvbiBhbmQgZWRpdGluZwora2V5cyBzdXBwb3J0IG1vdmVtZW50IGJldHdlZW4gZmllbGRzLCBlZGl0aW5nIGtleXMgc3VwcG9ydCBtb2RpZnlpbmcKK2ZpZWxkLCBhbmQgcGxhaW4gdGV4dCBhZGRzIHRvIG9yIGNoYW5nZXMgZGF0YSBpbiBhIGN1cnJlbnQgZmllbGQuICBUaGUKK2Zvcm0gbGlicmFyeSBhbGxvd3MgeW91ICh0aGUgZm9ybXMgZGVzaWduZXIpIHRvIGJpbmQgZWFjaCBuYXZpZ2F0aW9uCithbmQgZWRpdGluZyBrZXkgdG8gYW55IGtleXN0cm9rZSBhY2NlcHRlZCBieSA8Q09ERT5jdXJzZXM8L0NPREU+CisKK0ZpZWxkcyBtYXkgaGF2ZSB2YWxpZGF0aW9uIGNvbmRpdGlvbnMgb24gdGhlbSwgc28gdGhhdCB0aGV5IGNoZWNrIGlucHV0CitkYXRhIGZvciB0eXBlIGFuZCB2YWx1ZS4gIFRoZSBmb3JtIGxpYnJhcnkgc3VwcGxpZXMgYSByaWNoIHNldCBvZgorcHJlLWRlZmluZWQgZmllbGQgdHlwZXMsIGFuZCBtYWtlcyBpdCByZWxhdGl2ZWx5IGVhc3kgdG8gZGVmaW5lIG5ldyBvbmVzLiA8UD4KKworT25jZSBpdHMgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIChvciBhYm9ydGVkKSwgYSBmb3JtIG1heSBiZQorPERGTj51bnBvc3RlZDwvREZOPiAodGhhdCBpcywgdW5kaXNwbGF5ZWQpLCBhbmQgZmluYWxseSBmcmVlZCB0byBtYWtlCit0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGl0cyBpdGVtcyBhdmFpbGFibGUgZm9yIHJlLXVzZS4gPFA+CisKK1RoZSBnZW5lcmFsIGZsb3cgb2YgY29udHJvbCBvZiBhIGZvcm0gcHJvZ3JhbSBsb29rcyBsaWtlIHRoaXM6CisKKzxPTD4KKzxMST5Jbml0aWFsaXplIDxDT0RFPmN1cnNlczwvQ09ERT4uCis8TEk+Q3JlYXRlIHRoZSBmb3JtIGZpZWxkcywgdXNpbmcgPENPREU+bmV3X2ZpZWxkKCk8L0NPREU+LgorPExJPkNyZWF0ZSB0aGUgZm9ybSB1c2luZyA8Q09ERT5uZXdfZm9ybSgpPC9DT0RFPi4KKzxMST5Qb3N0IHRoZSBmb3JtIHVzaW5nIDxDT0RFPnBvc3RfZm9ybSgpPC9DT0RFPi4KKzxMST5SZWZyZXNoIHRoZSBzY3JlZW4uCis8TEk+UHJvY2VzcyB1c2VyIHJlcXVlc3RzIHZpYSBhbiBpbnB1dCBsb29wLgorPExJPlVucG9zdCB0aGUgZm9ybSB1c2luZyA8Q09ERT51bnBvc3RfZm9ybSgpPC9DT0RFPi4KKzxMST5GcmVlIHRoZSBmb3JtLCB1c2luZyA8Q09ERT5mcmVlX2Zvcm0oKTwvQ09ERT4uCis8TEk+RnJlZSB0aGUgZmllbGRzIHVzaW5nIDxDT0RFPmZyZWVfZmllbGQoKTwvQ09ERT4uCis8TEk+VGVybWluYXRlIDxDT0RFPmN1cnNlczwvQ09ERT4uCis8L09MPgorCitOb3RlIHRoYXQgdGhpcyBsb29rcyBtdWNoIGxpa2UgYSBtZW51IHByb2dyYW07IHRoZSBmb3JtIGxpYnJhcnkgaGFuZGxlcwordGFza3Mgd2hpY2ggYXJlIGluIG1hbnkgd2F5cyBzaW1pbGFyLCBhbmQgaXRzIGludGVyZmFjZSB3YXMgb2J2aW91c2x5CitkZXNpZ25lZCB0byByZXNlbWJsZSB0aGF0IG9mIHRoZSA8QSBIUkVGPSIjbWVudSI+bWVudSBsaWJyYXJ5PC9BPgord2hlcmV2ZXIgcG9zc2libGUuIDxQPgorCitJbiBmb3JtcyBwcm9ncmFtcywgaG93ZXZlciwgdGhlIGBwcm9jZXNzIHVzZXIgcmVxdWVzdHMnIGlzIHNvbWV3aGF0IG1vcmUKK2NvbXBsaWNhdGVkIHRoYW4gZm9yIG1lbnVzLiAgQmVzaWRlcyBtZW51LWxpa2UgbmF2aWdhdGlvbiBvcGVyYXRpb25zLAordGhlIG1lbnUgZHJpdmVyIGxvb3AgaGFzIHRvIHN1cHBvcnQgZmllbGQgZWRpdGluZyBhbmQgZGF0YSB2YWxpZGF0aW9uLgorCis8SDI+PEEgTkFNRT0iZmNyZWF0ZSI+Q3JlYXRpbmcgYW5kIEZyZWVpbmcgRmllbGRzIGFuZCBGb3JtczwvQT48L0gyPgorCitUaGUgYmFzaWMgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGZpZWxkcyBpcyA8Q09ERT5uZXdfZmllbGQoKTwvQ09ERT46CisKKzxQUkU+CitGSUVMRCAqbmV3X2ZpZWxkKGludCBoZWlnaHQsIGludCB3aWR0aCwgICAvKiBuZXcgZmllbGQgc2l6ZSAqLworICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCwgICAgICAgLyogdXBwZXIgbGVmdCBjb3JuZXIgKi8KKyAgICAgICAgICAgICAgICAgaW50IG9mZnNjcmVlbiwgICAgICAgICAgIC8qIG51bWJlciBvZiBvZmZzY3JlZW4gcm93cyAqLworICAgICAgICAgICAgICAgICBpbnQgbmJ1Zik7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycyAqLworPC9QUkU+CisKK01lbnUgaXRlbXMgYWx3YXlzIG9jY3VweSBhIHNpbmdsZSByb3csIGJ1dCBmb3JtcyBmaWVsZHMgbWF5IGhhdmUKK211bHRpcGxlIHJvd3MuICBTbyA8Q09ERT5uZXdfZmllbGQoKTwvQ09ERT4gcmVxdWlyZXMgeW91IHRvIHNwZWNpZnkgYQord2lkdGggYW5kIGhlaWdodCAodGhlIGZpcnN0IHR3byBhcmd1bWVudHMsIHdoaWNoIG1pc3QgYm90aCBiZSBncmVhdGVyCit0aGFuIHplcm8pLiA8UD4KKworWW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmllbGQncyB1cHBlciBsZWZ0IGNvcm5lciBvbgordGhlIHNjcmVlbiAodGhlIHRoaXJkIGFuZCBmb3VydGggYXJndW1lbnRzLCB3aGljaCBtdXN0IGJlIHplcm8gb3IKK2dyZWF0ZXIpLiBOb3RlIHRoYXQgdGhlc2UgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmb3JtCitzdWJ3aW5kb3csIHdoaWNoIHdpbGwgY29pbmNpZGUgd2l0aCA8Q09ERT5zdGRzY3I8L0NPREU+IGJ5IGRlZmF1bHQgYnV0CituZWVkIG5vdCBiZSA8Q09ERT5zdGRzY3I8L0NPREU+IGlmIHlvdSd2ZSBkb25lIGFuIGV4cGxpY2l0Cis8Q09ERT5zZXRfZm9ybV93aW4oKTwvQ09ERT4gY2FsbC4gPFA+CisKK1RoZSBmaWZ0aCBhcmd1bWVudCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBudW1iZXIgb2Ygb2ZmLXNjcmVlbiByb3dzLiAgSWYKK3RoaXMgaXMgemVybywgdGhlIGVudGlyZSBmaWVsZCB3aWxsIGFsd2F5cyBiZSBkaXNwbGF5ZWQuICBJZiBpdCBpcworbm9uemVybywgdGhlIGZvcm0gd2lsbCBiZSBzY3JvbGxhYmxlLCB3aXRoIG9ubHkgb25lIHNjcmVlbi1mdWxsIChpbml0aWFsbHkKK3RoZSB0b3AgcGFydCkgZGlzcGxheWVkIGF0IGFueSBnaXZlbiB0aW1lLiAgSWYgeW91IG1ha2UgYSBmaWVsZCBkeW5hbWljCithbmQgZ3JvdyBpdCBzbyBpdCB3aWxsIG5vIGxvbmdlciBmaXQgb24gdGhlIHNjcmVlbiwgdGhlIGZvcm0gd2lsbCBiZWNvbWUKK3Njcm9sbGFibGUgZXZlbiBpZiB0aGUgPENPREU+b2Zmc2NyZWVuPC9DT0RFPiBhcmd1bWVudCB3YXMgaW5pdGlhbGx5IHplcm8uIDxQPgorCitUaGUgZm9ybXMgbGlicmFyeSBhbGxvY2F0ZXMgb25lIHdvcmtpbmcgYnVmZmVyIHBlciBmaWVsZDsgdGhlIHNpemUgb2YKK2VhY2ggYnVmZmVyIGlzIDxDT0RFPigoaGVpZ2h0ICsgb2Zmc2NyZWVuKSp3aWR0aCArIDE8L0NPREU+LCBvbmUgY2hhcmFjdGVyCitmb3IgZWFjaCBwb3NpdGlvbiBpbiB0aGUgZmllbGQgcGx1cyBhIE5VTCB0ZXJtaW5hdG9yLiAgVGhlIHNpeHRoCithcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgZGF0YSBidWZmZXJzIHRvIGFsbG9jYXRlIGZvciB0aGUKK2ZpZWxkOyB5b3VyIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlbSBmb3IgaXRzIG93biBwdXJwb3Nlcy4KKworPFBSRT4KK0ZJRUxEICpkdXBfZmllbGQoRklFTEQgKmZpZWxkLCAgICAgICAgICAgIC8qIGZpZWxkIHRvIGNvcHkgKi8KKyAgICAgICAgICAgICAgICAgaW50IHRvcCwgaW50IGxlZnQpOyAgICAgIC8qIGxvY2F0aW9uIG9mIG5ldyBjb3B5ICovCis8L1BSRT4KKworVGhlIGZ1bmN0aW9uIDxDT0RFPmR1cF9maWVsZCgpPC9DT0RFPiBkdXBsaWNhdGVzIGFuIGV4aXN0aW5nIGZpZWxkIGF0IGEKK25ldyBsb2NhdGlvbi4gIFNpemUgYW5kIGJ1ZmZlcmluZyBpbmZvcm1hdGlvbiBhcmUgY29waWVkOyBzb21lCithdHRyaWJ1dGUgZmxhZ3MgYW5kIHN0YXR1cyBiaXRzIGFyZSBub3QgKHNlZSB0aGUKKzxDT0RFPmZvcm1fZmllbGRfbmV3KDNYKTwvQ09ERT4gZm9yIGRldGFpbHMpLgorCis8UFJFPgorRklFTEQgKmxpbmtfZmllbGQoRklFTEQgKmZpZWxkLCAgICAgICAgICAgLyogZmllbGQgdG8gY29weSAqLworICAgICAgICAgICAgICAgICAgaW50IHRvcCwgaW50IGxlZnQpOyAgICAgLyogbG9jYXRpb24gb2YgbmV3IGNvcHkgKi8KKzwvUFJFPgorCitUaGUgZnVuY3Rpb24gPENPREU+bGlua19maWVsZCgpPC9DT0RFPiBhbHNvIGR1cGxpY2F0ZXMgYW4gZXhpc3RpbmcgZmllbGQKK2F0IGEgbmV3IGxvY2F0aW9uLiAgVGhlIGRpZmZlcmVuY2UgZnJvbSA8Q09ERT5kdXBfZmllbGQoKTwvQ09ERT4gaXMgdGhhdAoraXQgYXJyYW5nZXMgZm9yIHRoZSBuZXcgZmllbGQncyBidWZmZXIgdG8gYmUgc2hhcmVkIHdpdGggdGhlIG9sZCBvbmUuIDxQPgorCitCZXNpZGVzIHRoZSBvYnZpb3VzIHVzZSBpbiBtYWtpbmcgYSBmaWVsZCBlZGl0YWJsZSBmcm9tIHR3byBkaWZmZXJlbnQKK2Zvcm0gcGFnZXMsIGxpbmtlZCBmaWVsZHMgZ2l2ZSB5b3UgYSB3YXkgdG8gaGFjayBpbiBkeW5hbWljIGxhYmVscy4gIElmCit5b3UgZGVjbGFyZSBzZXZlcmFsIGZpZWxkcyBsaW5rZWQgdG8gYW4gb3JpZ2luYWwsIGFuZCB0aGVuIG1ha2UgdGhlbQoraW5hY3RpdmUsIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgd2lsbCBzdGlsbCBiZSBwcm9wYWdhdGVkIHRvIHRoZQorbGlua2VkIGZpZWxkcy4gPFA+CisKK0FzIHdpdGggZHVwbGljYXRlZCBmaWVsZHMsIGxpbmtlZCBmaWVsZHMgaGF2ZSBhdHRyaWJ1dGUgYml0cyBzZXBhcmF0ZQorZnJvbSB0aGUgb3JpZ2luYWwuIDxQPgorCitBcyB5b3UgbWlnaHQgZ3Vlc3MsIGFsbCB0aGVzZSBmaWVsZC1hbGxvY2F0aW9ucyByZXR1cm4gPENPREU+TlVMTDwvQ09ERT4gaWYKK3RoZSBmaWVsZCBhbGxvY2F0aW9uIGlzIG5vdCBwb3NzaWJsZSBkdWUgdG8gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBvcgorb3V0LW9mLWJvdW5kcyBhcmd1bWVudHMuIDxQPgorCitUbyBjb25uZWN0IGZpZWxkcyB0byBhIGZvcm0sIHVzZQorCis8UFJFPgorRk9STSAqbmV3X2Zvcm0oRklFTEQgKipmaWVsZHMpOworPC9QUkU+CisKK1RoaXMgZnVuY3Rpb24gZXhwZWN0cyB0byBzZWUgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgZmllbGQgcG9pbnRlcnMuCitTYWlkIGZpZWxkcyBhcmUgY29ubmVjdGVkIHRvIGEgbmV3bHktYWxsb2NhdGVkIGZvcm0gb2JqZWN0OyBpdHMgYWRkcmVzcworaXMgcmV0dXJuZWQgKG9yIGVsc2UgTlVMTCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscykuICAgPFA+CisKK05vdGUgdGhhdCA8Q09ERT5uZXdfZmllbGQoKTwvQ09ERT4gZG9lcyA8RU0+bm90PC9FTT4gY29weSB0aGUgcG9pbnRlciBhcnJheQoraW50byBwcml2YXRlIHN0b3JhZ2U7IGlmIHlvdSBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBwb2ludGVyIGFycmF5CitkdXJpbmcgZm9ybXMgcHJvY2Vzc2luZywgYWxsIG1hbm5lciBvZiBiaXphcnJlIHRoaW5ncyBtaWdodCBoYXBwZW4uICBBbHNvCitub3RlIHRoYXQgYW55IGdpdmVuIGZpZWxkIG1heSBvbmx5IGJlIGNvbm5lY3RlZCB0byBvbmUgZm9ybS4gPFA+CisKK1RoZSBmdW5jdGlvbnMgPENPREU+ZnJlZV9maWVsZCgpPC9DT0RFPiBhbmQgPENPREU+ZnJlZV9mb3JtPC9DT0RFPiBhcmUgYXZhaWxhYmxlCit0byBmcmVlIGZpZWxkIGFuZCBmb3JtIG9iamVjdHMuICBJdCBpcyBhbiBlcnJvciB0byBhdHRlbXB0IHRvIGZyZWUgYSBmaWVsZAorY29ubmVjdGVkIHRvIGEgZm9ybSwgYnV0IG5vdCB2aWNlLXZlcnNhOyB0aHVzLCB5b3Ugd2lsbCBnZW5lcmFsbHkgZnJlZQoreW91ciBmb3JtIG9iamVjdHMgZmlyc3QuCisKKzxIMj48QSBOQU1FPSJmYXR0cmlidXRlcyI+RmV0Y2hpbmcgYW5kIENoYW5naW5nIEZpZWxkIEF0dHJpYnV0ZXM8L0E+PC9IMj4KKworRWFjaCBmb3JtIGZpZWxkIGhhcyBhIG51bWJlciBvZiBsb2NhdGlvbiBhbmQgc2l6ZSBhdHRyaWJ1dGVzCithc3NvY2lhdGVkIHdpdGggaXQuIFRoZXJlIGFyZSBvdGhlciBmaWVsZCBhdHRyaWJ1dGVzIHVzZWQgdG8gY29udHJvbAorZGlzcGxheSBhbmQgZWRpdGluZyBvZiB0aGUgZmllbGQuICBTb21lIChmb3IgZXhhbXBsZSwgdGhlIDxDT0RFPk9fU1RBVElDPC9DT0RFPiBiaXQpCitpbnZvbHZlIHN1ZmZpY2llbnQgY29tcGxpY2F0aW9ucyB0byBiZSBjb3ZlcmVkIGluIHNlY3Rpb25zIG9mIHRoZWlyIG93bgorbGF0ZXIgb24uICBXZSBjb3ZlciB0aGUgZnVuY3Rpb25zIHVzZWQgdG8gZ2V0IGFuZCBzZXQgc2V2ZXJhbCBiYXNpYworYXR0cmlidXRlcyBoZXJlLiA8UD4KKworV2hlbiBhIGZpZWxkIGlzIGNyZWF0ZWQsIHRoZSBhdHRyaWJ1dGVzIG5vdCBzcGVjaWZpZWQgYnkgdGhlCis8Q09ERT5uZXdfZmllbGQ8L0NPREU+IGZ1bmN0aW9uIGFyZSBjb3BpZWQgZnJvbSBhbiBpbnZpc2libGUgc3lzdGVtCitkZWZhdWx0IGZpZWxkLiAgSW4gYXR0cmlidXRlLXNldHRpbmcgYW5kIC1mZXRjaGluZyBmdW5jdGlvbnMsIHRoZQorYXJndW1lbnQgTlVMTCBpcyB0YWtlbiB0byBtZWFuIHRoaXMgZmllbGQuICBDaGFuZ2VzIHRvIGl0IHBlcnNpc3QKK2FzIGRlZmF1bHRzIHVudGlsIHlvdXIgZm9ybXMgYXBwbGljYXRpb24gdGVybWluYXRlcy4KKworPEgzPjxBIE5BTUU9ImZzaXplcyI+RmV0Y2hpbmcgU2l6ZSBhbmQgTG9jYXRpb24gRGF0YTwvQT48L0gzPgorCitZb3UgY2FuIHJldHJpZXZlIGZpZWxkIHNpemVzIGFuZCBsb2NhdGlvbnMgdGhyb3VnaDoKKworPFBSRT4KK2ludCBmaWVsZF9pbmZvKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAgIC8qIGZpZWxkIGZyb20gd2hpY2ggdG8gZmV0Y2ggKi8KKyAgICAgICAgICAgICAgIGludCAqaGVpZ2h0LCAqaW50IHdpZHRoLCAgIC8qIGZpZWxkIHNpemUgKi8KKyAgICAgICAgICAgICAgIGludCAqdG9wLCBpbnQgKmxlZnQsICAgICAgIC8qIHVwcGVyIGxlZnQgY29ybmVyICovCisgICAgICAgICAgICAgICBpbnQgKm9mZnNjcmVlbiwgICAgICAgICAgICAvKiBudW1iZXIgb2Ygb2Zmc2NyZWVuIHJvd3MgKi8KKyAgICAgICAgICAgICAgIGludCAqbmJ1Zik7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB3b3JraW5nIGJ1ZmZlcnMgKi8KKzwvUFJFPgorCitUaGlzIGZ1bmN0aW9uIGlzIGEgc29ydCBvZiBpbnZlcnNlIG9mIDxDT0RFPm5ld19maWVsZCgpPC9DT0RFPjsgaW5zdGVhZCBvZgorc2V0dGluZyBzaXplIGFuZCBsb2NhdGlvbiBhdHRyaWJ1dGVzIG9mIGEgbmV3IGZpZWxkLCBpdCBmZXRjaGVzIHRoZW0KK2Zyb20gYW4gZXhpc3Rpbmcgb25lLgorCis8SDM+PEEgTkFNRT0iZmxvY2F0aW9uIj5DaGFuZ2luZyB0aGUgRmllbGQgTG9jYXRpb248L0E+PC9IMz4KKworSXQgaXMgcG9zc2libGUgdG8gbW92ZSBhIGZpZWxkJ3MgbG9jYXRpb24gb24gdGhlIHNjcmVlbjoKKworPFBSRT4KK2ludCBtb3ZlX2ZpZWxkKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAgICAvKiBuZXcgdXBwZXItbGVmdCBjb3JuZXIgKi8KKzwvUFJFPgorCitZb3UgY2FuLCBvZiBjb3Vyc2UuIHF1ZXJ5IHRoZSBjdXJyZW50IGxvY2F0aW9uIHRocm91Z2ggPENPREU+ZmllbGRfaW5mbygpPC9DT0RFPi4KKworPEgzPjxBIE5BTUU9ImZqdXN0Ij5UaGUgSnVzdGlmaWNhdGlvbiBBdHRyaWJ1dGU8L0E+PC9IMz4KKworT25lLWxpbmUgZmllbGRzIG1heSBiZSB1bmp1c3RpZmllZCwganVzdGlmaWVkIHJpZ2h0LCBqdXN0aWZpZWQgbGVmdCwKK29yIGNlbnRlcmVkLiAgSGVyZSBpcyBob3cgeW91IG1hbmlwdWxhdGUgdGhpcyBhdHRyaWJ1dGU6CisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX2p1c3QoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBqdXN0bW9kZSk7ICAgICAgICAgLyogbW9kZSB0byBzZXQgKi8KKworaW50IGZpZWxkX2p1c3QoRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAgLyogZmV0Y2ggbW9kZSBvZiBmaWVsZCAqLworPC9QUkU+CisKK1RoZSBtb2RlIHZhbHVlcyBhY2NlcHRlZCBhbmQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbnMgYXJlCitwcmVwcm9jZXNzb3IgbWFjcm9zIDxDT0RFPk5PX0pVU1RJRklDQVRJT048L0NPREU+LCA8Q09ERT5KVVNUSUZZX1JJR0hUPC9DT0RFPiwKKzxDT0RFPkpVU1RJRllfTEVGVDwvQ09ERT4sIG9yIDxDT0RFPkpVU1RJRllfQ0VOVEVSPC9DT0RFPi4KKworPEgzPjxBIE5BTUU9ImZkaXNwYXR0cyI+RmllbGQgRGlzcGxheSBBdHRyaWJ1dGVzPC9BPjwvSDM+CisKK0ZvciBlYWNoIGZpZWxkLCB5b3UgY2FuIHNldCBhIGZvcmVncm91bmQgYXR0cmlidXRlIGZvciBlbnRlcmVkCitjaGFyYWN0ZXJzLCBhIGJhY2tncm91bmQgYXR0cmlidXRlIGZvciB0aGUgZW50aXJlIGZpZWxkLCBhbmQgYSBwYWQKK2NoYXJhY3RlciBmb3IgdGhlIHVuZmlsbGVkIHBvcnRpb24gb2YgdGhlIGZpZWxkLiAgWW91IGNhbiBhbHNvCitjb250cm9sIHBhZ2luYXRpb24gb2YgdGhlIGZvcm0uIDxQPgorCitUaGlzIGdyb3VwIG9mIGZvdXIgZmllbGQgYXR0cmlidXRlcyBjb250cm9scyB0aGUgdmlzdWFsIGFwcGVhcmFuY2UKK29mIHRoZSBmaWVsZCBvbiB0aGUgc2NyZWVuLCB3aXRob3V0IGFmZmVjdGluZyBpbiBhbnkgd2F5IHRoZSBkYXRhCitpbiB0aGUgZmllbGQgYnVmZmVyLgorCis8UFJFPgoraW50IHNldF9maWVsZF9mb3JlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjaHR5cGUgYXR0cik7ICAgICAgICAgIC8qIGF0dHJpYnV0ZSB0byBzZXQgKi8KKworY2h0eXBlIGZpZWxkX2ZvcmUoRklFTEQgKmZpZWxkKTsgICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKworaW50IHNldF9maWVsZF9iYWNrKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjaHR5cGUgYXR0cik7ICAgICAgICAgIC8qIGF0dHJpYnV0ZSB0byBzZXQgKi8KKworY2h0eXBlIGZpZWxkX2JhY2soRklFTEQgKmZpZWxkKTsgICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKworaW50IHNldF9maWVsZF9wYWQoRklFTEQgKmZpZWxkLCAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgaW50IHBhZCk7ICAgICAgICAgICAgICAgIC8qIHBhZCBjaGFyYWN0ZXIgdG8gc2V0ICovCisKK2NodHlwZSBmaWVsZF9wYWQoRklFTEQgKmZpZWxkKTsKKworaW50IHNldF9uZXdfcGFnZShGSUVMRCAqZmllbGQsICAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgaW50IGZsYWcpOyAgICAgICAgICAgICAgIC8qIFRSVUUgdG8gZm9yY2UgbmV3IHBhZ2UgKi8KKworY2h0eXBlIG5ld19wYWdlKEZJRUxEICpmaWVsZCk7ICAgICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKzwvUFJFPgorCitUaGUgYXR0cmlidXRlcyBzZXQgYW5kIHJldHVybmVkIGJ5IHRoZSBmaXJzdCBmb3VyIGZ1bmN0aW9ucyBhcmUgbm9ybWFsCis8Q09ERT5jdXJzZXMoM3gpPC9DT0RFPiBkaXNwbGF5IGF0dHJpYnV0ZSB2YWx1ZXMgKDxDT0RFPkFfU1RBTkRPVVQ8L0NPREU+LAorPENPREU+QV9CT0xEPC9DT0RFPiwgPENPREU+QV9SRVZFUlNFPC9DT0RFPiBldGMpLgorCitUaGUgcGFnZSBiaXQgb2YgYSBmaWVsZCBjb250cm9scyB3aGV0aGVyIGl0IGlzIGRpc3BsYXllZCBhdCB0aGUgc3RhcnQgb2YKK2EgbmV3IGZvcm0gc2NyZWVuLgorCis8SDM+PEEgTkFNRT0iZm9wdGlvbnMiPkZpZWxkIE9wdGlvbiBCaXRzPC9BPjwvSDM+CisKK1RoZXJlIGlzIGFsc28gYSBsYXJnZSBjb2xsZWN0aW9uIG9mIGZpZWxkIG9wdGlvbiBiaXRzIHlvdSBjYW4gc2V0IHRvIGNvbnRyb2wKK3ZhcmlvdXMgYXNwZWN0cyBvZiBmb3JtcyBwcm9jZXNzaW5nLiAgWW91IGNhbiBtYW5pcHVsYXRlIHRoZW0gd2l0aCB0aGVzZQorZnVuY3Rpb25zOgorCis8UFJFPgoraW50IHNldF9maWVsZF9vcHRzKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZSB0byBzZXQgKi8KKworaW50IGZpZWxkX29wdHNfb24oRklFTEQgKmZpZWxkLCAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvbiAqLworCitpbnQgZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9mZiAqLworCitpbnQgZmllbGRfb3B0cyhGSUVMRCAqZmllbGQpOyAgICAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworPC9QUkU+CisKK0J5IGRlZmF1bHQsIGFsbCBvcHRpb25zIGFyZSBvbi4gIEhlcmUgYXJlIHRoZSBhdmFpbGFibGUgb3B0aW9uIGJpdHM6Cis8REw+Cis8RFQ+IE9fVklTSUJMRQorPEREPiBDb250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCBpcyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uICBDYW4gYmUgdXNlZAorZHVyaW5nIGZvcm0gcHJvY2Vzc2luZyB0byBoaWRlIG9yIHBvcCB1cCBmaWVsZHMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZQorb2YgcGFyZW50IGZpZWxkcy4KKzxEVD4gT19BQ1RJVkUKKzxERD4gQ29udHJvbHMgd2hldGhlciB0aGUgZmllbGQgaXMgYWN0aXZlIGR1cmluZyBmb3JtcyBwcm9jZXNzaW5nIChpLmUuCit2aXNpdGVkIGJ5IGZvcm0gbmF2aWdhdGlvbiBrZXlzKS4gIENhbiBiZSB1c2VkIHRvIG1ha2UgbGFiZWxzIG9yIGRlcml2ZWQKK2ZpZWxkcyB3aXRoIGJ1ZmZlciB2YWx1ZXMgYWx0ZXJhYmxlIGJ5IHRoZSBmb3JtcyBhcHBsaWNhdGlvbiwgbm90IHRoZSB1c2VyLgorPERUPiBPX1BVQkxJQworPEREPiBDb250cm9scyB3aGV0aGVyIGRhdGEgaXMgZGlzcGxheWVkIGR1cmluZyBmaWVsZCBlbnRyeS4gIElmIHRoaXMgb3B0aW9uIGlzCit0dXJuZWQgb2ZmIG9uIGEgZmllbGQsIHRoZSBsaWJyYXJ5IHdpbGwgYWNjZXB0IGFuZCBlZGl0IGRhdGEgaW4gdGhhdCBmaWVsZCwKK2J1dCBpdCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgYW5kIHRoZSB2aXNpYmxlIGZpZWxkIGN1cnNvciB3aWxsIG5vdCBtb3ZlLgorWW91IGNhbiB0dXJuIG9mZiB0aGUgT19QVUJMSUMgYml0IHRvIGRlZmluZSBwYXNzd29yZCBmaWVsZHMuCis8RFQ+IE9fRURJVAorPEREPiBDb250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCdzIGRhdGEgY2FuIGJlIG1vZGlmaWVkLiAgV2hlbiB0aGlzIG9wdGlvbiBpcworb2ZmLCBhbGwgZWRpdGluZyByZXF1ZXN0cyBleGNlcHQgPENPREU+UkVRX1BSRVZfQ0hPSUNFPC9DT0RFPiBhbmQKKzxDT0RFPlJFUV9ORVhUX0NIT0lDRTwvQ09ERT4gd2lsbCBmYWlsLiAgU3VjaCByZWFkLW9ubHkgZmllbGRzIG1heSBiZSB1c2VmdWwgZm9yCitoZWxwIG1lc3NhZ2VzLgorPERUPiBPX1dSQVAKKzxERD4gQ29udHJvbHMgd29yZC13cmFwcGluZyBpbiBtdWx0aS1saW5lIGZpZWxkcy4gIE5vcm1hbGx5LCB3aGVuIGFueQorY2hhcmFjdGVyIG9mIGEgKGJsYW5rLXNlcGFyYXRlZCkgd29yZCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSwgdGhlCitlbnRpcmUgd29yZCBpcyB3cmFwcGVkIHRvIHRoZSBuZXh0IGxpbmUgKGFzc3VtaW5nIHRoZXJlIGlzIG9uZSkuICBXaGVuIHRoaXMKK29wdGlvbiBpcyBvZmYsIHRoZSB3b3JkIHdpbGwgYmUgc3BsaXQgYWNyb3NzIHRoZSBsaW5lIGJyZWFrLgorPERUPiBPX0JMQU5LCis8REQ+IENvbnRyb2xzIGZpZWxkIGJsYW5raW5nLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBvbiwgZW50ZXJpbmcgYSBjaGFyYWN0ZXIgYXQKK3RoZSBmaXJzdCBmaWVsZCBwb3NpdGlvbiBlcmFzZXMgdGhlIGVudGlyZSBmaWVsZCAoZXhjZXB0IGZvciB0aGUganVzdC1lbnRlcmVkCitjaGFyYWN0ZXIpLgorPERUPiBPX0FVVE9TS0lQCis8REQ+IENvbnRyb2xzIGF1dG9tYXRpYyBza2lwIHRvIG5leHQgZmllbGQgd2hlbiB0aGlzIG9uZSBmaWxscy4gIE5vcm1hbGx5LAord2hlbiB0aGUgZm9ybXMgdXNlciB0cmllcyB0byB0eXBlIG1vcmUgZGF0YSBpbnRvIGEgZmllbGQgdGhhbiB3aWxsIGZpdCwKK3RoZSBlZGl0aW5nIGxvY2F0aW9uIGp1bXBzIHRvIG5leHQgZmllbGQuICBXaGVuIHRoaXMgb3B0aW9uIGlzIG9mZiwgdGhlCit1c2VyJ3MgY3Vyc29yIHdpbGwgaGFuZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWVsZC4gIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQKK2luIGR5bmFtaWMgZmllbGRzIHRoYXQgaGF2ZSBub3QgcmVhY2hlZCB0aGVpciBzaXplIGxpbWl0LgorPERUPiBPX05VTExPSworPEREPiBDb250cm9scyB3aGV0aGVyIDxBIEhSRUY9IiNmdmFsaWRhdGlvbiI+dmFsaWRhdGlvbjwvQT4gaXMgYXBwbGllZCB0bworYmxhbmsgZmllbGRzLiAgTm9ybWFsbHksIGl0IGlzIG5vdDsgdGhlIHVzZXIgY2FuIGxlYXZlIGEgZmllbGQgYmxhbmsKK3dpdGhvdXQgaW52b2tpbmcgdGhlIHVzdWFsIHZhbGlkYXRpb24gY2hlY2sgb24gZXhpdC4gIElmIHRoaXMgb3B0aW9uIGlzCitvZmYgb24gYSBmaWVsZCwgZXhpdCBmcm9tIGl0IHdpbGwgaW52b2tlIGEgdmFsaWRhdGlvbiBjaGVjay4KKzxEVD4gT19QQVNTT0sKKzxERD4gQ29udHJvbHMgd2hldGhlciB2YWxpZGF0aW9uIG9jY3VycyBvbiBldmVyeSBleGl0LCBvciBvbmx5IGFmdGVyCit0aGUgZmllbGQgaXMgbW9kaWZpZWQuICBOb3JtYWxseSB0aGUgbGF0dGVyIGlzIHRydWUuICBTZXR0aW5nIE9fUEFTU09LCittYXkgYmUgdXNlZnVsIGlmIHlvdXIgZmllbGQncyB2YWxpZGF0aW9uIGZ1bmN0aW9uIG1heSBjaGFuZ2UgZHVyaW5nCitmb3JtcyBwcm9jZXNzaW5nLgorPERUPiBPX1NUQVRJQworPEREPiBDb250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBmaXhlZCB0byBpdHMgaW5pdGlhbCBkaW1lbnNpb25zLiAgSWYgeW91Cit0dXJuIHRoaXMgb2ZmLCB0aGUgZmllbGQgYmVjb21lcyA8QSBIUkVGPSIjZmR5bmFtaWMiPmR5bmFtaWM8L0E+IGFuZCB3aWxsCitzdHJldGNoIHRvIGZpdCBlbnRlcmVkIGRhdGEuCis8L0RMPgorCitBIGZpZWxkJ3Mgb3B0aW9ucyBjYW5ub3QgYmUgY2hhbmdlZCB3aGlsZSB0aGUgZmllbGQgaXMgY3VycmVudGx5IHNlbGVjdGVkLgorSG93ZXZlciwgb3B0aW9ucyBtYXkgYmUgY2hhbmdlZCBvbiBwb3N0ZWQgZmllbGRzIHRoYXQgYXJlIG5vdCBjdXJyZW50LiA8UD4KKworVGhlIG9wdGlvbiB2YWx1ZXMgYXJlIGJpdC1tYXNrcyBhbmQgY2FuIGJlIGNvbXBvc2VkIHdpdGggbG9naWNhbC1vciBpbgordGhlIG9idmlvdXMgd2F5LgorCis8SDI+PEEgTkFNRT0iZnN0YXR1cyI+RmllbGQgU3RhdHVzPC9BPjwvSDI+CisKK0V2ZXJ5IGZpZWxkIGhhcyBhIHN0YXR1cyBmbGFnLCB3aGljaCBpcyBzZXQgdG8gRkFMU0Ugd2hlbiB0aGUgZmllbGQgaXMKK2NyZWF0ZWQgYW5kIFRSVUUgd2hlbiB0aGUgdmFsdWUgaW4gZmllbGQgYnVmZmVyIDAgY2hhbmdlcy4gIFRoaXMgZmxhZyBjYW4KK2JlIHF1ZXJpZWQgYW5kIHNldCBkaXJlY3RseToKKworPFBSRT4KK2ludCBzZXRfZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCwgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMpOyAgICAgICAgIC8qIG1vZGUgdG8gc2V0ICovCisKK2ludCBmaWVsZF9zdGF0dXMoRklFTEQgKmZpZWxkKTsgICAgICAgICAvKiBmZXRjaCBtb2RlIG9mIGZpZWxkICovCis8L1BSRT4KKworU2V0dGluZyB0aGlzIGZsYWcgdW5kZXIgcHJvZ3JhbSBjb250cm9sIGNhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSB0aGUgc2FtZQorZm9ybSByZXBlYXRlZGx5LCBsb29raW5nIGZvciBtb2RpZmllZCBmaWVsZHMgZWFjaCB0aW1lLiA8UD4KKworQ2FsbGluZyA8Q09ERT5maWVsZF9zdGF0dXMoKTwvQ09ERT4gb24gYSBmaWVsZCBub3QgY3VycmVudGx5IHNlbGVjdGVkCitmb3IgaW5wdXQgd2lsbCByZXR1cm4gYSBjb3JyZWN0IHZhbHVlLiAgQ2FsbGluZyA8Q09ERT5maWVsZF9zdGF0dXMoKTwvQ09ERT4gb24gYQorZmllbGQgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIGlucHV0IG1heSBub3QgbmVjZXNzYXJpbHkgZ2l2ZSBhCitjb3JyZWN0IGZpZWxkIHN0YXR1cyB2YWx1ZSwgYmVjYXVzZSBlbnRlcmVkIGRhdGEgaXNuJ3QgbmVjZXNzYXJpbHkgY29waWVkIHRvCitidWZmZXIgemVybyBiZWZvcmUgdGhlIGV4aXQgdmFsaWRhdGlvbiBjaGVjay4KKworVG8gZ3VhcmFudGVlIHRoYXQgdGhlIHJldHVybmVkIHN0YXR1cyB2YWx1ZSByZWZsZWN0cyByZWFsaXR5LCBjYWxsCis8Q09ERT5maWVsZF9zdGF0dXMoKTwvQ09ERT4gZWl0aGVyICgxKSBpbiB0aGUgZmllbGQncyBleGl0IHZhbGlkYXRpb24gY2hlY2sKK3JvdXRpbmUsICgyKSBmcm9tIHRoZSBmaWVsZCdzIG9yIGZvcm0ncyBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbgoraG9va3MsIG9yICgzKSBqdXN0IGFmdGVyIGEgPENPREU+UkVRX1ZBTElEQVRJT048L0NPREU+IHJlcXVlc3QgaGFzIGJlZW4KK3Byb2Nlc3NlZCBieSB0aGUgZm9ybXMgZHJpdmVyLgorCis8SDI+PEEgTkFNRT0iZnVzZXIiPkZpZWxkIFVzZXIgUG9pbnRlcjwvQT48L0gyPgorCitFYWNoIGZpZWxkIHN0cnVjdHVyZSBjb250YWlucyBvbmUgY2hhcmFjdGVyIHBvaW50ZXIgc2xvdCB0aGF0IGlzIG5vdCB1c2VkCitieSB0aGUgZm9ybXMgbGlicmFyeS4gIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zIHRvIHN0b3JlCitwcml2YXRlIHBlci1maWVsZCBkYXRhLiAgWW91IGNhbiBtYW5pcHVsYXRlIGl0IHdpdGg6CisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkLCAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzZXJwdHIpOyAgICAgICAgLyogbW9kZSB0byBzZXQgKi8KKworY2hhciAqZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQpOyAgICAgICAgLyogZmV0Y2ggbW9kZSBvZiBmaWVsZCAqLworPC9QUkU+CisKKyhQcm9wZXJseSwgdGhpcyB1c2VyIHBvaW50ZXIgZmllbGQgb3VnaHQgdG8gaGF2ZSA8Q09ERT4odm9pZCAqKTwvQ09ERT4gdHlwZS4KK1RoZSA8Q09ERT4oY2hhciAqKTwvQ09ERT4gdHlwZSBpcyByZXRhaW5lZCBmb3IgU3lzdGVtIFYgY29tcGF0aWJpbGl0eS4pIDxQPgorCitJdCBpcyB2YWxpZCB0byBzZXQgdGhlIHVzZXIgcG9pbnRlciBvZiB0aGUgZGVmYXVsdCBmaWVsZCAod2l0aCBhCis8Q09ERT5zZXRfZmllbGRfdXNlcnB0cigpPC9DT0RFPiBjYWxsIHBhc3NlZCBhIE5VTEwgZmllbGQgcG9pbnRlci4pCitXaGVuIGEgbmV3IGZpZWxkIGlzIGNyZWF0ZWQsIHRoZSBkZWZhdWx0LWZpZWxkIHVzZXIgcG9pbnRlciBpcyBjb3BpZWQKK3RvIGluaXRpYWxpemUgdGhlIG5ldyBmaWVsZCdzIHVzZXIgcG9pbnRlci4KKworPEgyPjxBIE5BTUU9ImZkeW5hbWljIj5WYXJpYWJsZS1TaXplZCBGaWVsZHM8L0E+PC9IMj4KKworTm9ybWFsbHksIGEgZmllbGQgaXMgZml4ZWQgYXQgdGhlIHNpemUgc3BlY2lmaWVkIGZvciBpdCBhdCBjcmVhdGlvbgordGltZS4gIElmLCBob3dldmVyLCB5b3UgdHVybiBvZmYgaXRzIE9fU1RBVElDIGJpdCwgaXQgYmVjb21lcworPERGTj5keW5hbWljPC9ERk4+IGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzaXplIGl0c2VsZiB0byBhY2NvbW1vZGF0ZQorZGF0YSBhcyBpdCBpcyBlbnRlcmVkLiAgSWYgdGhlIGZpZWxkIGhhcyBleHRyYSBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBpdCwKK3RoZXkgd2lsbCBncm93IHJpZ2h0IGFsb25nIHdpdGggdGhlIG1haW4gaW5wdXQgYnVmZmVyLiAgPFA+CisKK0Egb25lLWxpbmUgZHluYW1pYyBmaWVsZCB3aWxsIGhhdmUgYSBmaXhlZCBoZWlnaHQgKDEpIGJ1dCB2YXJpYWJsZQord2lkdGgsIHNjcm9sbGluZyBob3Jpem9udGFsbHkgdG8gZGlzcGxheSBkYXRhIHdpdGhpbiB0aGUgZmllbGQgYXJlYSBhcworb3JpZ2luYWxseSBkaW1lbnNpb25lZCBhbmQgbG9jYXRlZC4gIEEgbXVsdGktbGluZSBkeW5hbWljIGZpZWxkIHdpbGwKK2hhdmUgYSBmaXhlZCB3aWR0aCwgYnV0IHZhcmlhYmxlIGhlaWdodCAobnVtYmVyIG9mIHJvd3MpLCBzY3JvbGxpbmcKK3ZlcnRpY2FsbHkgdG8gZGlzcGxheSBkYXRhIHdpdGhpbiB0aGUgZmllbGQgYXJlYSBhcyBvcmlnaW5hbGx5CitkaW1lbnNpb25lZCBhbmQgbG9jYXRlZC4gPFA+CisKK05vcm1hbGx5LCBhIGR5bmFtaWMgZmllbGQgaXMgYWxsb3dlZCB0byBncm93IHdpdGhvdXQgbGltaXQuICBCdXQgaXQgaXMKK3Bvc3NpYmxlIHRvIHNldCBhbiB1cHBlciBsaW1pdCBvbiB0aGUgc2l6ZSBvZiBhIGR5bmFtaWMgZmllbGQuICBZb3UgZG8KK2l0IHdpdGggdGhpcyBmdW5jdGlvbjoKKworPFBSRT4KK2ludCBzZXRfbWF4X2ZpZWxkKEZJRUxEICpmaWVsZCwgICAgIC8qIGZpZWxkIHRvIGFsdGVyIChtYXkgbm90IGJlIE5VTEwpICovCisgICAgICAgICAgICAgICAgICAgaW50IG1heF9zaXplKTsgICAvKiB1cHBlciBsaW1pdCBvbiBmaWVsZCBzaXplICovCis8L1BSRT4KKworSWYgdGhlIGZpZWxkIGlzIG9uZS1saW5lLCA8Q09ERT5tYXhfc2l6ZTwvQ09ERT4gaXMgdGFrZW4gdG8gYmUgYSBjb2x1bW4gc2l6ZQorbGltaXQ7IGlmIGl0IGlzIG11bHRpLWxpbmUsIGl0IGlzIHRha2VuIHRvIGJlIGEgbGluZSBzaXplIGxpbWl0LiAgVG8gZGlzYWJsZQorYW55IGxpbWl0LCB1c2UgYW4gYXJndW1lbnQgb2YgemVyby4gIFRoZSBncm93dGggbGltaXQgY2FuIGJlIGNoYW5nZWQgd2hldGhlcgorb3Igbm90IHRoZSBPX1NUQVRJQyBiaXQgaXMgb24sIGJ1dCBoYXMgbm8gZWZmZWN0IHVudGlsIGl0IGlzLiA8UD4KKworVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9mIGEgZmllbGQgY2hhbmdlIHdoZW4gaXQgYmVjb21lcyBkeW5hbWljOgorCis8VUw+Cis8TEk+SWYgdGhlcmUgaXMgbm8gZ3Jvd3RoIGxpbWl0LCB0aGVyZSBpcyBubyBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZmllbGQ7Cit0aGVyZWZvcmUgPENPREU+T19BVVRPU0tJUDwvQ09ERT4gYW5kIDxDT0RFPk9fTkxfT1ZFUkxPQUQ8L0NPREU+IGFyZSBpZ25vcmVkLgorPExJPkZpZWxkIGp1c3RpZmljYXRpb24gd2lsbCBiZSBpZ25vcmVkICh0aG91Z2ggd2hhdGV2ZXIganVzdGlmaWNhdGlvbiBpcworc2V0IHVwIHdpbGwgYmUgcmV0YWluZWQgaW50ZXJuYWxseSBhbmQgY2FuIGJlIHF1ZXJpZWQpLgorPExJPlRoZSA8Q09ERT5kdXBfZmllbGQoKTwvQ09ERT4gYW5kIDxDT0RFPmxpbmtfZmllbGQoKTwvQ09ERT4gY2FsbHMgY29weQorZHluYW1pYy1idWZmZXIgc2l6ZXMuICBJZiB0aGUgPENPREU+T19TVEFUSUM8L0NPREU+IG9wdGlvbiBpcyBzZXQgb24gb25lIG9mIGEKK2NvbGxlY3Rpb24gb2YgbGlua3MsIGJ1ZmZlciByZXNpemluZyB3aWxsIG9jY3VyIG9ubHkgd2hlbiB0aGUgZmllbGQgaXMKK2VkaXRlZCB0aHJvdWdoIHRoYXQgbGluay4KKzxMST5UaGUgY2FsbCA8Q09ERT5maWVsZF9pbmZvKCk8L0NPREU+IHdpbGwgcmV0cmlldmUgdGhlIG9yaWdpbmFsIHN0YXRpYyBzaXplIG9mCit0aGUgZmllbGQ7IHVzZSA8Q09ERT5keW5hbWljX2ZpZWxkX2luZm8oKTwvQ09ERT4gdG8gZ2V0IHRoZSBhY3R1YWwgZHluYW1pYyBzaXplLgorPC9VTD4KKworPEgyPjxBIE5BTUU9ImZ2YWxpZGF0aW9uIj5GaWVsZCBWYWxpZGF0aW9uPC9BPjwvSDI+CisKK0J5IGRlZmF1bHQsIGEgZmllbGQgd2lsbCBhY2NlcHQgYW55IGRhdGEgdGhhdCB3aWxsIGZpdCBpbiBpdHMgaW5wdXQgYnVmZmVyLgorSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGEgdmFsaWRhdGlvbiB0eXBlIHRvIGEgZmllbGQuICBJZiB5b3UgZG8KK3RoaXMsIGFueSBhdHRlbXB0IHRvIGxlYXZlIHRoZSBmaWVsZCB3aGlsZSBpdCBjb250YWlucyBkYXRhIHRoYXQgZG9lc24ndAorbWF0Y2ggdGhlIHZhbGlkYXRpb24gdHlwZSB3aWxsIGZhaWwuICBTb21lIHZhbGlkYXRpb24gdHlwZXMgYWxzbyBoYXZlIGEKK2NoYXJhY3Rlci12YWxpZGl0eSBjaGVjayBmb3IgZWFjaCB0aW1lIGEgY2hhcmFjdGVyIGlzIGVudGVyZWQgaW4gdGhlIGZpZWxkLiA8UD4KKworQSBmaWVsZCdzIHZhbGlkYXRpb24gY2hlY2sgKGlmIGFueSkgaXMgbm90IGNhbGxlZCB3aGVuCis8Q09ERT5zZXRfZmllbGRfYnVmZmVyKCk8L0NPREU+IG1vZGlmaWVzIHRoZSBpbnB1dCBidWZmZXIsIG5vciB3aGVuIHRoYXQgYnVmZmVyCitpcyBjaGFuZ2VkIHRocm91Z2ggYSBsaW5rZWQgZmllbGQuIDxQPgorCitUaGUgPENPREU+Zm9ybTwvQ09ERT4gbGlicmFyeSBwcm92aWRlcyBhIHJpY2ggc2V0IG9mIHByZS1kZWZpbmVkIHZhbGlkYXRpb24KK3R5cGVzLCBhbmQgZ2l2ZXMgeW91IHRoZSBjYXBhYmlsaXR5IHRvIGRlZmluZSBjdXN0b20gb25lcyBvZiB5b3VyIG93bi4gIFlvdQorY2FuIGV4YW1pbmUgYW5kIGNoYW5nZSBmaWVsZCB2YWxpZGF0aW9uIGF0dHJpYnV0ZXMgd2l0aCB0aGUgZm9sbG93aW5nCitmdW5jdGlvbnM6CisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqZnR5cGUsICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAuLi4pOyAgICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgYXJndW1lbnRzKi8KKworRklFTERUWVBFICpmaWVsZF90eXBlKEZJRUxEICpmaWVsZCk7ICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKzwvUFJFPgorCitUaGUgdmFsaWRhdGlvbiB0eXBlIG9mIGEgZmllbGQgaXMgY29uc2lkZXJlZCBhbiBhdHRyaWJ1dGUgb2YgdGhlIGZpZWxkLiAgQXMKK3dpdGggb3RoZXIgZmllbGQgYXR0cmlidXRlcywgQWxzbywgZG9pbmcgPENPREU+c2V0X2ZpZWxkX3R5cGUoKTwvQ09ERT4gd2l0aCBhCis8Q09ERT5OVUxMPC9DT0RFPiBmaWVsZCBkZWZhdWx0IHdpbGwgY2hhbmdlIHRoZSBzeXN0ZW0gZGVmYXVsdCBmb3IgdmFsaWRhdGlvbiBvZgorbmV3bHktY3JlYXRlZCBmaWVsZHMuIDxQPgorCitIZXJlIGFyZSB0aGUgcHJlLWRlZmluZWQgdmFsaWRhdGlvbiB0eXBlczoKKworPEgzPjxBIE5BTUU9ImZ0eXBlX2FscGhhIj5UWVBFX0FMUEhBPC9BPjwvSDM+CisKK1RoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGFscGhhYmV0aWMgZGF0YTsgbm8gYmxhbmtzLCBubyBkaWdpdHMsIG5vIHNwZWNpYWwKK2NoYXJhY3RlcnMgKHRoaXMgaXMgY2hlY2tlZCBhdCBjaGFyYWN0ZXItZW50cnkgdGltZSkuICBJdCBpcyBzZXQgdXAgd2l0aDoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9BTFBIQSwgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7ICAgICAgICAgICAgLyogbWF4aW11bSB3aWR0aCBvZiBmaWVsZCAqLworPC9QUkU+CisKK1RoZSA8Q09ERT53aWR0aDwvQ09ERT4gYXJndW1lbnQgc2V0cyBhIG1pbmltdW0gd2lkdGggb2YgZGF0YS4gIFR5cGljYWxseQoreW91J2xsIHdhbnQgdG8gc2V0IHRoaXMgdG8gdGhlIGZpZWxkIHdpZHRoOyBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUKK2ZpZWxkIHdpZHRoLCB0aGUgdmFsaWRhdGlvbiBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLiAgQSBtaW5pbXVtIHdpZHRoCitvZiB6ZXJvIG1ha2VzIGZpZWxkIGNvbXBsZXRpb24gb3B0aW9uYWwuCisKKzxIMz48QSBOQU1FPSJmdHlwZV9hbG51bSI+VFlQRV9BTE5VTTwvQT48L0gzPgorCitUaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhbHBoYWJldGljIGRhdGEgYW5kIGRpZ2l0czsgbm8gYmxhbmtzLCBubyBzcGVjaWFsCitjaGFyYWN0ZXJzICh0aGlzIGlzIGNoZWNrZWQgYXQgY2hhcmFjdGVyLWVudHJ5IHRpbWUpLiAgSXQgaXMgc2V0IHVwIHdpdGg6CisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfQUxOVU0sICAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgpOyAgICAgICAgICAgIC8qIG1heGltdW0gd2lkdGggb2YgZmllbGQgKi8KKzwvUFJFPgorCitUaGUgPENPREU+d2lkdGg8L0NPREU+IGFyZ3VtZW50IHNldHMgYSBtaW5pbXVtIHdpZHRoIG9mIGRhdGEuICBBcyB3aXRoCitUWVBFX0FMUEhBLCB0eXBpY2FsbHkgeW91J2xsIHdhbnQgdG8gc2V0IHRoaXMgdG8gdGhlIGZpZWxkIHdpZHRoOyBpZiBpdCdzCitncmVhdGVyIHRoYW4gdGhlIGZpZWxkIHdpZHRoLCB0aGUgdmFsaWRhdGlvbiBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLiAgQQorbWluaW11bSB3aWR0aCBvZiB6ZXJvIG1ha2VzIGZpZWxkIGNvbXBsZXRpb24gb3B0aW9uYWwuCisKKzxIMz48QSBOQU1FPSJmdHlwZV9lbnVtIj5UWVBFX0VOVU08L0E+PC9IMz4KKworVGhpcyB0eXBlIGFsbG93cyB5b3UgdG8gcmVzdHJpY3QgYSBmaWVsZCdzIHZhbHVlcyB0byBiZSBhbW9uZyBhIHNwZWNpZmllZAorc2V0IG9mIHN0cmluZyB2YWx1ZXMgKGZvciBleGFtcGxlLCB0aGUgdHdvLWxldHRlciBwb3N0YWwgY29kZXMgZm9yIFUuUy4KK3N0YXRlcykuICBJdCBpcyBzZXQgdXAgd2l0aDoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9FTlVNLCAgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKip2YWx1ZWxpc3Q7ICAgICAgLyogbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgY2hlY2tjYXNlOyAgICAgICAgIC8qIGNhc2Utc2Vuc2l0aXZlPyAqLworICAgICAgICAgICAgICAgICAgIGludCBjaGVja3VuaXF1ZSk7ICAgICAgLyogbXVzdCBzcGVjaWZ5IHVuaXF1ZWx5PyAqLworPC9QUkU+CisKK1RoZSA8Q09ERT52YWx1ZWxpc3Q8L0NPREU+IHBhcmFtZXRlciBtdXN0IHBvaW50IGF0IGEgTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YKK3ZhbGlkIHN0cmluZ3MuICBUaGUgPENPREU+Y2hlY2tjYXNlPC9DT0RFPiBhcmd1bWVudCwgaWYgdHJ1ZSwgbWFrZXMgY29tcGFyaXNvbgord2l0aCB0aGUgc3RyaW5nIGNhc2Utc2Vuc2l0aXZlLiA8UD4KKworV2hlbiB0aGUgdXNlciBleGl0cyBhIFRZUEVfRU5VTSBmaWVsZCwgdGhlIHZhbGlkYXRpb24gcHJvY2VkdXJlIHRyaWVzIHRvCitjb21wbGV0ZSB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIHRvIGEgdmFsaWQgZW50cnkuICBJZiBhIGNvbXBsZXRlIGNob2ljZSBzdHJpbmcKK2hhcyBiZWVuIGVudGVyZWQsIGl0IGlzIG9mIGNvdXJzZSB2YWxpZC4gIEJ1dCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGVudGVyIGEKK3ByZWZpeCBvZiBhIHZhbGlkIHN0cmluZyBhbmQgaGF2ZSBpdCBjb21wbGV0ZWQgZm9yIHlvdS4gPFA+CisKK0J5IGRlZmF1bHQsIGlmIHlvdSBlbnRlciBzdWNoIGEgcHJlZml4IGFuZCBpdCBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgdmFsdWUKK2luIHRoZSBzdHJpbmcgbGlzdCwgdGhlIHByZWZpeCB3aWxsIGJlIGNvbXBsZXRlZCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcKK3ZhbHVlLiAgQnV0IHRoZSA8Q09ERT5jaGVja3VuaXF1ZTwvQ09ERT4gYXJndW1lbnQsIGlmIHRydWUsIHJlcXVpcmVzIHByZWZpeAorbWF0Y2hlcyB0byBiZSB1bmlxdWUgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIDxQPgorCitUaGUgPENPREU+UkVRX05FWFRfQ0hPSUNFPC9DT0RFPiBhbmQgPENPREU+UkVRX1BSRVZfQ0hPSUNFPC9DT0RFPiBpbnB1dCByZXF1ZXN0cworY2FuIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwgd2l0aCB0aGVzZSBmaWVsZHMuCisKKzxIMz48QSBOQU1FPSJmdHlwZV9pbnRlZ2VyIj5UWVBFX0lOVEVHRVI8L0E+PC9IMz4KKworVGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgYW4gaW50ZWdlci4gIEl0IGlzIHNldCB1cCBhcyBmb2xsb3dzOgorCis8UFJFPgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0lOVEVHRVIsICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsICAgICAgICAgICAvKiAjIHBsYWNlcyB0byB6ZXJvLXBhZCB0byAqLworICAgICAgICAgICAgICAgICAgIGludCB2bWluLCBpbnQgdm1heCk7ICAgLyogdmFsaWQgcmFuZ2UgKi8KKzwvUFJFPgorCitWYWxpZCBjaGFyYWN0ZXJzIGNvbnNpc3Qgb2YgYW4gb3B0aW9uYWwgbGVhZGluZyBtaW51cyBhbmQgZGlnaXRzLgorVGhlIHJhbmdlIGNoZWNrIGlzIHBlcmZvcm1lZCBvbiBleGl0LiAgSWYgdGhlIHJhbmdlIG1heGltdW0gaXMgbGVzcwordGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuIDxQPgorCitJZiB0aGUgdmFsdWUgcGFzc2VzIGl0cyByYW5nZSBjaGVjaywgaXQgaXMgcGFkZGVkIHdpdGggYXMgbWFueSBsZWFkaW5nCit6ZXJvIGRpZ2l0cyBhcyBuZWNlc3NhcnkgdG8gbWVldCB0aGUgcGFkZGluZyBhcmd1bWVudC4gPFA+CisKK0EgPENPREU+VFlQRV9JTlRFR0VSPC9DT0RFPiB2YWx1ZSBidWZmZXIgY2FuIGNvbnZlbmllbnRseSBiZSBpbnRlcnByZXRlZAord2l0aCB0aGUgQyBsaWJyYXJ5IGZ1bmN0aW9uIDxDT0RFPmF0b2koMyk8L0NPREU+LgorCis8SDM+PEEgTkFNRT0iZnR5cGVfbnVtZXJpYyI+VFlQRV9OVU1FUklDPC9BPjwvSDM+CisKK1RoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGEgZGVjaW1hbCBudW1iZXIuICBJdCBpcyBzZXQgdXAgYXMgZm9sbG93czoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfTlVNRVJJQywgICAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsICAgICAgICAgICAgICAgLyogIyBwbGFjZXMgb2YgcHJlY2lzaW9uICovCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHZtaW4sIGRvdWJsZSB2bWF4KTsgLyogdmFsaWQgcmFuZ2UgKi8KKzwvUFJFPgorCitWYWxpZCBjaGFyYWN0ZXJzIGNvbnNpc3Qgb2YgYW4gb3B0aW9uYWwgbGVhZGluZyBtaW51cyBhbmQgZGlnaXRzLiBwb3NzaWJseQoraW5jbHVkaW5nIGEgZGVjaW1hbCBwb2ludC4gSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgbG9jYWxlJ3MsIHRoZSBkZWNpbWFsIHBvaW50CitjaGFyYWN0ZXIgdXNlZCBtdXN0IGJlIHRoZSBvbmUgZGVmaW5lZCBieSB5b3VyIGxvY2FsZS4gVGhlIHJhbmdlIGNoZWNrIGlzCitwZXJmb3JtZWQgb24gZXhpdC4gSWYgdGhlIHJhbmdlIG1heGltdW0gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5pbXVtLAordGhlIHJhbmdlIGlzIGlnbm9yZWQuIDxQPgorCitJZiB0aGUgdmFsdWUgcGFzc2VzIGl0cyByYW5nZSBjaGVjaywgaXQgaXMgcGFkZGVkIHdpdGggYXMgbWFueSB0cmFpbGluZworemVybyBkaWdpdHMgYXMgbmVjZXNzYXJ5IHRvIG1lZXQgdGhlIHBhZGRpbmcgYXJndW1lbnQuIDxQPgorCitBIDxDT0RFPlRZUEVfTlVNRVJJQzwvQ09ERT4gdmFsdWUgYnVmZmVyIGNhbiBjb252ZW5pZW50bHkgYmUgaW50ZXJwcmV0ZWQKK3dpdGggdGhlIEMgbGlicmFyeSBmdW5jdGlvbiA8Q09ERT5hdG9mKDMpPC9DT0RFPi4KKworPEgzPjxBIE5BTUU9ImZ0eXBlX3JlZ2V4cCI+VFlQRV9SRUdFWFA8L0E+PC9IMz4KKworVGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgZGF0YSBtYXRjaGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gIEl0IGlzIHNldCB1cAorYXMgZm9sbG93czoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9SRUdFWFAsICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlZ2V4cCk7ICAgICAgICAgLyogZXhwcmVzc2lvbiB0byBtYXRjaCAqLworPC9QUkU+CisKK1RoZSBzeW50YXggZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaXMgdGhhdCBvZiA8Q09ERT5yZWdjb21wKDMpPC9DT0RFPi4KK1RoZSBjaGVjayBmb3IgcmVndWxhci1leHByZXNzaW9uIG1hdGNoIGlzIHBlcmZvcm1lZCBvbiBleGl0LgorCis8SDI+PEEgTkFNRT0iZmJ1ZmZlciI+RGlyZWN0IEZpZWxkIEJ1ZmZlciBNYW5pcHVsYXRpb248L0E+PC9IMj4KKworVGhlIGNoaWVmIGF0dHJpYnV0ZSBvZiBhIGZpZWxkIGlzIGl0cyBidWZmZXIgY29udGVudHMuICBXaGVuIGEgZm9ybSBoYXMKK2JlZW4gY29tcGxldGVkLCB5b3VyIGFwcGxpY2F0aW9uIHVzdWFsbHkgbmVlZHMgdG8ga25vdyB0aGUgc3RhdGUgb2YgZWFjaAorZmllbGQgYnVmZmVyLiAgWW91IGNhbiBmaW5kIHRoaXMgb3V0IHdpdGg6CisKKzxQUkU+CitjaGFyICpmaWVsZF9idWZmZXIoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworICAgICAgICAgICAgICAgICAgIGludCBidWZpbmRleCk7ICAgICAgICAgLyogbnVtYmVyIG9mIGJ1ZmZlciB0byBxdWVyeSAqLworPC9QUkU+CisKK05vcm1hbGx5LCB0aGUgc3RhdGUgb2YgdGhlIHplcm8tbnVtYmVyZWQgYnVmZmVyIGZvciBlYWNoIGZpZWxkIGlzIHNldCBieQordGhlIHVzZXIncyBlZGl0aW5nIGFjdGlvbnMgb24gdGhhdCBmaWVsZC4gIEl0J3Mgc29tZXRpbWVzIHVzZWZ1bCB0byBiZSBhYmxlCit0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSB6ZXJvLW51bWJlcmVkIChvciBzb21lIG90aGVyKSBidWZmZXIgZnJvbSB5b3VyCithcHBsaWNhdGlvbjoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfYnVmZmVyKEZJRUxEICpmaWVsZCwgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmluZGV4LCAgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVyIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUpOyAgICAgICAgICAvKiBzdHJpbmcgdmFsdWUgdG8gc2V0ICovCis8L1BSRT4KKworSWYgdGhlIGZpZWxkIGlzIG5vdCBsYXJnZSBlbm91Z2ggYW5kIGNhbm5vdCBiZSByZXNpemVkIHRvIGEgc3VmZmljaWVudGx5CitsYXJnZSBzaXplIHRvIGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZSwgdGhlIHZhbHVlIHdpbGwgYmUgdHJ1bmNhdGVkCit0byBmaXQuIDxQPgorCitDYWxsaW5nIDxDT0RFPmZpZWxkX2J1ZmZlcigpPC9DT0RFPiB3aXRoIGEgbnVsbCBmaWVsZCBwb2ludGVyIHdpbGwgcmFpc2UgYW4KK2Vycm9yLiAgQ2FsbGluZyA8Q09ERT5maWVsZF9idWZmZXIoKTwvQ09ERT4gb24gYSBmaWVsZCBub3QgY3VycmVudGx5IHNlbGVjdGVkCitmb3IgaW5wdXQgd2lsbCByZXR1cm4gYSBjb3JyZWN0IHZhbHVlLiAgQ2FsbGluZyA8Q09ERT5maWVsZF9idWZmZXIoKTwvQ09ERT4gb24gYQorZmllbGQgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIGlucHV0IG1heSBub3QgbmVjZXNzYXJpbHkgZ2l2ZSBhCitjb3JyZWN0IGZpZWxkIGJ1ZmZlciB2YWx1ZSwgYmVjYXVzZSBlbnRlcmVkIGRhdGEgaXNuJ3QgbmVjZXNzYXJpbHkgY29waWVkIHRvCitidWZmZXIgemVybyBiZWZvcmUgdGhlIGV4aXQgdmFsaWRhdGlvbiBjaGVjay4KKworVG8gZ3VhcmFudGVlIHRoYXQgdGhlIHJldHVybmVkIGJ1ZmZlciB2YWx1ZSByZWZsZWN0cyBvbi1zY3JlZW4gcmVhbGl0eSwKK2NhbGwgPENPREU+ZmllbGRfYnVmZmVyKCk8L0NPREU+IGVpdGhlciAoMSkgaW4gdGhlIGZpZWxkJ3MgZXhpdCB2YWxpZGF0aW9uCitjaGVjayByb3V0aW5lLCAoMikgZnJvbSB0aGUgZmllbGQncyBvciBmb3JtJ3MgaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24KK2hvb2tzLCBvciAoMykganVzdCBhZnRlciBhIDxDT0RFPlJFUV9WQUxJREFUSU9OPC9DT0RFPiByZXF1ZXN0IGhhcyBiZWVuIHByb2Nlc3NlZAorYnkgdGhlIGZvcm1zIGRyaXZlci4KKworPEgyPjxBIE5BTUU9ImZvcm1hdHRycyI+QXR0cmlidXRlcyBvZiBGb3JtczwvQT48L0gyPgorCitBcyB3aXRoIGZpZWxkIGF0dHJpYnV0ZXMsIGZvcm0gYXR0cmlidXRlcyBpbmhlcml0IGEgZGVmYXVsdCBmcm9tIGEKK3N5c3RlbSBkZWZhdWx0IGZvcm0gc3RydWN0dXJlLiAgVGhlc2UgZGVmYXVsdHMgY2FuIGJlIHF1ZXJpZWQgb3Igc2V0IGJ5CitvZiB0aGVzZSBmdW5jdGlvbnMgdXNpbmcgYSBmb3JtLXBvaW50ZXIgYXJndW1lbnQgb2YgPENPREU+TlVMTDwvQ09ERT4uIDxQPgorCitUaGUgcHJpbmNpcGFsIGF0dHJpYnV0ZSBvZiBhIGZvcm0gaXMgaXRzIGZpZWxkIGxpc3QuICBZb3UgY2FuIHF1ZXJ5CithbmQgY2hhbmdlIHRoaXMgbGlzdCB3aXRoOgorCis8UFJFPgoraW50IHNldF9mb3JtX2ZpZWxkcyhGT1JNICpmb3JtLCAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICBGSUVMRCAqKmZpZWxkcyk7ICAgICAgLyogZmllbGRzIHRvIGNvbm5lY3QgKi8KKworY2hhciAqZm9ybV9maWVsZHMoRk9STSAqZm9ybSk7ICAgICAgICAgICAgLyogZmV0Y2ggZmllbGRzIG9mIGZvcm0gKi8KKworaW50IGZpZWxkX2NvdW50KEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgLyogY291bnQgY29ubmVjdCBmaWVsZHMgKi8KKzwvUFJFPgorCitUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIDxDT0RFPnNldF9mb3JtX2ZpZWxkcygpPC9DT0RFPiBtYXkgYmUgYQorTlVMTC10ZXJtaW5hdGVkIGZpZWxkIHBvaW50ZXIgYXJyYXkgbGlrZSB0aGUgb25lIHJlcXVpcmVkIGJ5Cis8Q09ERT5uZXdfZm9ybSgpPC9DT0RFPi4gSW4gdGhhdCBjYXNlLCB0aGUgb2xkIGZpZWxkcyBvZiB0aGUgZm9ybSBhcmUKK2Rpc2Nvbm5lY3RlZCBidXQgbm90IGZyZWVkIChhbmQgZWxpZ2libGUgdG8gYmUgY29ubmVjdGVkIHRvIG90aGVyCitmb3JtcyksIHRoZW4gdGhlIG5ldyBmaWVsZHMgYXJlIGNvbm5lY3RlZC4gPFA+CisKK0l0IG1heSBhbHNvIGJlIG51bGwsIGluIHdoaWNoIGNhc2UgdGhlIG9sZCBmaWVsZHMgYXJlIGRpc2Nvbm5lY3RlZAorKGFuZCBub3QgZnJlZWQpIGJ1dCBubyBuZXcgb25lcyBhcmUgY29ubmVjdGVkLiA8UD4KKworVGhlIDxDT0RFPmZpZWxkX2NvdW50KCk8L0NPREU+IGZ1bmN0aW9uIHNpbXBseSBjb3VudHMgdGhlIG51bWJlciBvZiBmaWVsZHMKK2Nvbm5lY3RlZCB0byBhIGdpdmVuIGZyb20uICBJdCByZXR1cm5zIC0xIGlmIHRoZSBmb3JtLXBvaW50ZXIgYXJndW1lbnQKK2lzIE5VTEwuCisKKzxIMj48QSBOQU1FPSJmZGlzcGxheSI+Q29udHJvbCBvZiBGb3JtIERpc3BsYXk8L0E+PC9IMj4KKworSW4gdGhlIG92ZXJ2aWV3IHNlY3Rpb24sIHlvdSBzYXcgdGhhdCB0byBkaXNwbGF5IGEgZm9ybSB5b3Ugbm9ybWFsbHkKK3N0YXJ0IGJ5IGRlZmluaW5nIGl0cyBzaXplIChhbmQgZmllbGRzKSwgcG9zdGluZyBpdCwgYW5kIHJlZnJlc2hpbmcKK3RoZSBzY3JlZW4uICBUaGVyZSBpcyBhbiBoaWRkZW4gc3RlcCBiZWZvcmUgcG9zdGluZywgd2hpY2ggaXMgdGhlCithc3NvY2lhdGlvbiBvZiB0aGUgZm9ybSB3aXRoIGEgZnJhbWUgd2luZG93IChhY3R1YWxseSwgYSBwYWlyIG9mCit3aW5kb3dzKSB3aXRoaW4gd2hpY2ggaXQgd2lsbCBiZSBkaXNwbGF5ZWQuICBCeSBkZWZhdWx0LCB0aGUgZm9ybXMKK2xpYnJhcnkgYXNzb2NpYXRlcyBldmVyeSBmb3JtIHdpdGggdGhlIGZ1bGwtc2NyZWVuIHdpbmRvdworPENPREU+c3Rkc2NyPC9DT0RFPi4gPFA+CisKK0J5IG1ha2luZyB0aGlzIHN0ZXAgZXhwbGljaXQsIHlvdSBjYW4gYXNzb2NpYXRlIGEgZm9ybSB3aXRoIGEgZGVjbGFyZWQKK2ZyYW1lIHdpbmRvdyBvbiB5b3VyIHNjcmVlbiBkaXNwbGF5LiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvCithZGFwdCB0aGUgZm9ybSBkaXNwbGF5IHRvIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMsIGR5bmFtaWNhbGx5IHRpbGUKK2Zvcm1zIG9uIHRoZSBzY3JlZW4sIG9yIHVzZSBhIGZvcm0gYXMgcGFydCBvZiBhbiBpbnRlcmZhY2UgbGF5b3V0CittYW5hZ2VkIGJ5IDxBIEhSRUY9IiNwYW5lbHMiPnBhbmVsczwvQT4uIDxQPgorCitUaGUgdHdvIHdpbmRvd3MgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZm9ybSBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9ucyBhcwordGhlaXIgYW5hbG9ndWVzIGluIHRoZSA8QSBIUkVGPSIjbWVudSI+bWVudSBsaWJyYXJ5PC9BPi4gIEJvdGggdGhlc2UKK3dpbmRvd3MgYXJlIHBhaW50ZWQgd2hlbiB0aGUgZm9ybSBpcyBwb3N0ZWQgYW5kIGVyYXNlZCB3aGVuIHRoZSBmb3JtCitpcyB1bnBvc3RlZC4gPFA+CisKK1RoZSBvdXRlciBvciBmcmFtZSB3aW5kb3cgaXMgbm90IG90aGVyd2lzZSB0b3VjaGVkIGJ5IHRoZSBmb3JtCityb3V0aW5lcy4gIEl0IGV4aXN0cyBzbyB0aGUgcHJvZ3JhbW1lciBjYW4gYXNzb2NpYXRlIGEgdGl0bGUsIGEKK2JvcmRlciwgb3IgcGVyaGFwcyBoZWxwIHRleHQgd2l0aCB0aGUgZm9ybSBhbmQgaGF2ZSBpdCBwcm9wZXJseQorcmVmcmVzaGVkIG9yIGVyYXNlZCBhdCBwb3N0L3VucG9zdCB0aW1lLiBUaGUgaW5uZXIgd2luZG93IG9yIHN1YndpbmRvdworaXMgd2hlcmUgdGhlIGN1cnJlbnQgZm9ybSBwYWdlIGlzIGFjdHVhbGx5IGRpc3BsYXllZC4gPFA+CisKK0luIG9yZGVyIHRvIGRlY2xhcmUgeW91ciBvd24gZnJhbWUgd2luZG93IGZvciBhIGZvcm0sIHlvdSdsbCBuZWVkIHRvCitrbm93IHRoZSBzaXplIG9mIHRoZSBmb3JtJ3MgYm91bmRpbmcgcmVjdGFuZ2xlLiAgWW91IGNhbiBnZXQgdGhpcworaW5mb3JtYXRpb24gd2l0aDoKKworPFBSRT4KK2ludCBzY2FsZV9mb3JtKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKyAgICAgICAgICAgICAgIGludCAqcm93cywgICAgICAgICAgICAgICAgIC8qIGZvcm0gcm93cyAqLworICAgICAgICAgICAgICAgaW50ICpjb2xzKTsgICAgICAgICAgICAgICAgLyogZm9ybSBjb2xzICovCis8L1BSRT4KKworVGhlIGZvcm0gZGltZW5zaW9ucyBhcmUgcGFzc2VkIGJhY2sgaW4gdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGJ5Cit0aGUgYXJndW1lbnRzLiAgT25jZSB5b3UgaGF2ZSB0aGlzIGluZm9ybWF0aW9uLCB5b3UgY2FuIHVzZSBpdCB0bworZGVjbGFyZSBvZiB3aW5kb3dzLCB0aGVuIHVzZSBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zOgorCis8UFJFPgoraW50IHNldF9mb3JtX3dpbihGT1JNICpmb3JtLCAgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBXSU5ET1cgKndpbik7ICAgICAgICAgICAgLyogZnJhbWUgd2luZG93IHRvIGNvbm5lY3QgKi8KKworV0lORE9XICpmb3JtX3dpbihGT1JNICpmb3JtKTsgICAgICAgICAgICAgLyogZmV0Y2ggZnJhbWUgd2luZG93IG9mIGZvcm0gKi8KKworaW50IHNldF9mb3JtX3N1YihGT1JNICpmb3JtLCAgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBXSU5ET1cgKndpbik7ICAgICAgICAgICAgLyogZm9ybSBzdWJ3aW5kb3cgdG8gY29ubmVjdCAqLworCitXSU5ET1cgKmZvcm1fc3ViKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAvKiBmZXRjaCBmb3JtIHN1YndpbmRvdyBvZiBmb3JtICovCis8L1BSRT4KKworTm90ZSB0aGF0IGN1cnNlcyBvcGVyYXRpb25zLCBpbmNsdWRpbmcgPENPREU+cmVmcmVzaCgpPC9DT0RFPiwgb24gdGhlIGZvcm0sCitzaG91bGQgYmUgZG9uZSBvbiB0aGUgZnJhbWUgd2luZG93LCBub3QgdGhlIGZvcm0gc3Vid2luZG93LiA8UD4KKworSXQgaXMgcG9zc2libGUgdG8gY2hlY2sgZnJvbSB5b3VyIGFwcGxpY2F0aW9uIHdoZXRoZXIgYWxsIG9mIGEKK3Njcm9sbGFibGUgZmllbGQgaXMgYWN0dWFsbHkgZGlzcGxheWVkIHdpdGhpbiB0aGUgbWVudSBzdWJ3aW5kb3cuICBVc2UKK3RoZXNlIGZ1bmN0aW9uczoKKworPFBSRT4KK2ludCBkYXRhX2FoZWFkKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYmUgcXVlcmllZCAqLworCitpbnQgZGF0YV9iZWhpbmQoRk9STSAqZm9ybSk7ICAgICAgICAgICAgICAvKiBmb3JtIHRvIGJlIHF1ZXJpZWQgKi8KKzwvUFJFPgorCitUaGUgZnVuY3Rpb24gPENPREU+ZGF0YV9haGVhZCgpPC9DT0RFPiByZXR1cm5zIFRSVUUgaWYgKGEpIHRoZSBjdXJyZW50CitmaWVsZCBpcyBvbmUtbGluZSBhbmQgaGFzIHVuZGlzcGxheWVkIGRhdGEgb2ZmIHRvIHRoZSByaWdodCwgKGIpIHRoZSBjdXJyZW50CitmaWVsZCBpcyBtdWx0aS1saW5lIGFuZCB0aGVyZSBpcyBkYXRhIG9mZi1zY3JlZW4gYmVsb3cgaXQuIDxQPgorCitUaGUgZnVuY3Rpb24gPENPREU+ZGF0YV9iZWhpbmQoKTwvQ09ERT4gcmV0dXJucyBUUlVFIGlmIHRoZSBmaXJzdCAodXBwZXIKK2xlZnQgaGFuZCkgY2hhcmFjdGVyIHBvc2l0aW9uIGlzIG9mZi1zY3JlZW4gKG5vdCBiZWluZyBkaXNwbGF5ZWQpLiA8UD4KKworRmluYWxseSwgdGhlcmUgaXMgYSBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBmb3JtIHdpbmRvdydzIGN1cnNvciB0byB0aGUKK3ZhbHVlIGV4cGVjdGVkIGJ5IHRoZSBmb3JtcyBkcml2ZXI6CisKKzxQUkU+CitpbnQgcG9zX2Zvcm1fY3Vyc29yKEZPUk0gKikgICAgICAgICAgICAgICAvKiBmb3JtIHRvIGJlIHF1ZXJpZWQgKi8KKzwvUFJFPgorCitJZiB5b3VyIGFwcGxpY2F0aW9uIGNoYW5nZXMgdGhlIGZvcm0gd2luZG93IGN1cnNvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZQoraGFuZGluZyBjb250cm9sIGJhY2sgdG8gdGhlIGZvcm1zIGRyaXZlciBpbiBvcmRlciB0byByZS1zeW5jaHJvbml6ZSBpdC4KKworPEgyPjxBIE5BTUU9ImZkcml2ZXIiPklucHV0IFByb2Nlc3NpbmcgaW4gdGhlIEZvcm1zIERyaXZlcjwvQT48L0gyPgorCitUaGUgZnVuY3Rpb24gPENPREU+Zm9ybV9kcml2ZXIoKTwvQ09ERT4gaGFuZGxlcyB2aXJ0dWFsaXplZCBpbnB1dCByZXF1ZXN0cworZm9yIGZvcm0gbmF2aWdhdGlvbiwgZWRpdGluZywgYW5kIHZhbGlkYXRpb24gcmVxdWVzdHMsIGp1c3QgYXMKKzxDT0RFPm1lbnVfZHJpdmVyPC9DT0RFPiBkb2VzIGZvciBtZW51cyAoc2VlIHRoZSBzZWN0aW9uIG9uIDxBCitIUkVGPSIjbWlucHV0Ij5tZW51IGlucHV0IGhhbmRsaW5nPC9BPikuCisKKzxQUkU+CitpbnQgZm9ybV9kcml2ZXIoRk9STSAqZm9ybSwgICAgICAgICAgICAgICAvKiBmb3JtIHRvIHBhc3MgaW5wdXQgdG8gKi8KKyAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdCk7ICAgICAgICAgICAgIC8qIGZvcm0gcmVxdWVzdCBjb2RlICovCis8L1BSRT4KKworWW91ciBpbnB1dCB2aXJ0dWFsaXphdGlvbiBmdW5jdGlvbiBuZWVkcyB0byB0YWtlIGlucHV0IGFuZCB0aGVuIGNvbnZlcnQgaXQKK3RvIGVpdGhlciBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyICh3aGljaCBpcyB0cmVhdGVkIGFzIGRhdGEgdG8gYmUKK2VudGVyZWQgaW4gdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBmaWVsZCksIG9yIGEgZm9ybXMgcHJvY2Vzc2luZyByZXF1ZXN0LiA8UD4KKworVGhlIGZvcm1zIGRyaXZlciBwcm92aWRlcyBob29rcyAodGhyb3VnaCBpbnB1dC12YWxpZGF0aW9uIGFuZAorZmllbGQtdGVybWluYXRpb24gZnVuY3Rpb25zKSB3aXRoIHdoaWNoIHlvdXIgYXBwbGljYXRpb24gY29kZSBjYW4gY2hlY2sKK3RoYXQgdGhlIGlucHV0IHRha2VuIGJ5IHRoZSBkcml2ZXIgbWF0Y2hlZCB3aGF0IHdhcyBleHBlY3RlZC4KKworPEgzPjxBIE5BTUU9ImZwYWdlIj5QYWdlIE5hdmlnYXRpb24gUmVxdWVzdHM8L0E+PC9IMz4KKworVGhlc2UgcmVxdWVzdHMgY2F1c2UgcGFnZS1sZXZlbCBtb3ZlcyB0aHJvdWdoIHRoZSBmb3JtLAordHJpZ2dlcmluZyBkaXNwbGF5IG9mIGEgbmV3IGZvcm0gc2NyZWVuLgorCis8REw+Cis8RFQ+IDxDT0RFPlJFUV9ORVhUX1BBR0U8L0NPREU+Cis8REQ+IE1vdmUgdG8gdGhlIG5leHQgZm9ybSBwYWdlLgorPERUPiA8Q09ERT5SRVFfUFJFVl9QQUdFPC9DT0RFPgorPEREPiBNb3ZlIHRvIHRoZSBwcmV2aW91cyBmb3JtIHBhZ2UuCis8RFQ+IDxDT0RFPlJFUV9GSVJTVF9QQUdFPC9DT0RFPgorPEREPiBNb3ZlIHRvIHRoZSBmaXJzdCBmb3JtIHBhZ2UuCis8RFQ+IDxDT0RFPlJFUV9MQVNUX1BBR0U8L0NPREU+Cis8REQ+IE1vdmUgdG8gdGhlIGxhc3QgZm9ybSBwYWdlLgorPC9ETD4KKworVGhlc2UgcmVxdWVzdHMgdHJlYXQgdGhlIGxpc3QgYXMgY3ljbGljOyB0aGF0IGlzLCA8Q09ERT5SRVFfTkVYVF9QQUdFPC9DT0RFPgorZnJvbSB0aGUgbGFzdCBwYWdlIGdvZXMgdG8gdGhlIGZpcnN0LCBhbmQgPENPREU+UkVRX1BSRVZfUEFHRTwvQ09ERT4gZnJvbQordGhlIGZpcnN0IHBhZ2UgZ29lcyB0byB0aGUgbGFzdC4KKworPEgzPjxBIE5BTUU9ImZmaWVsZCI+SW50ZXItRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0czwvQT48L0gzPgorCitUaGVzZSByZXF1ZXN0cyBoYW5kbGUgbmF2aWdhdGlvbiBiZXR3ZWVuIGZpZWxkcyBvbiB0aGUgc2FtZSBwYWdlLgorCis8REw+Cis8RFQ+IDxDT0RFPlJFUV9ORVhUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIG5leHQgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9QUkVWX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIHByZXZpb3VzIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfRklSU1RfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gdGhlIGZpcnN0IGZpZWxkLgorPERUPiA8Q09ERT5SRVFfTEFTVF9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSB0byB0aGUgbGFzdCBmaWVsZC4KKzxEVD4gPENPREU+UkVRX1NORVhUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIHNvcnRlZCBuZXh0IGZpZWxkLgorPERUPiA8Q09ERT5SRVFfU1BSRVZfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gc29ydGVkIHByZXZpb3VzIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfU0ZJUlNUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIHRoZSBzb3J0ZWQgZmlyc3QgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9TTEFTVF9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSB0byB0aGUgc29ydGVkIGxhc3QgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9MRUZUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIGxlZnQgdG8gZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9SSUdIVF9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSByaWdodCB0byBmaWVsZC4KKzxEVD4gPENPREU+UkVRX1VQX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHVwIHRvIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfRE9XTl9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSBkb3duIHRvIGZpZWxkLgorPC9ETD4KKworVGhlc2UgcmVxdWVzdHMgdHJlYXQgdGhlIGxpc3Qgb2YgZmllbGRzIG9uIGEgcGFnZSBhcyBjeWNsaWM7IHRoYXQgaXMsCis8Q09ERT5SRVFfTkVYVF9GSUVMRDwvQ09ERT4gZnJvbSB0aGUgbGFzdCBmaWVsZCBnb2VzIHRvIHRoZSBmaXJzdCwgYW5kCis8Q09ERT5SRVFfUFJFVl9GSUVMRDwvQ09ERT4gZnJvbSB0aGUgZmlyc3QgZmllbGQgZ29lcyB0byB0aGUgbGFzdC4gVGhlCitvcmRlciBvZiB0aGUgZmllbGRzIGZvciB0aGVzZSAoYW5kIHRoZSA8Q09ERT5SRVFfRklSU1RfRklFTEQ8L0NPREU+IGFuZAorPENPREU+UkVRX0xBU1RfRklFTEQ8L0NPREU+IHJlcXVlc3RzKSBpcyBzaW1wbHkgdGhlIG9yZGVyIG9mIHRoZSBmaWVsZAorcG9pbnRlcnMgaW4gdGhlIGZvcm0gYXJyYXkgKGFzIHNldCB1cCBieSA8Q09ERT5uZXdfZm9ybSgpPC9DT0RFPiBvcgorPENPREU+c2V0X2Zvcm1fZmllbGRzKCk8L0NPREU+IDxQPgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHRyYXZlcnNlIHRoZSBmaWVsZHMgYXMgaWYgdGhleSBoYWQgYmVlbiBzb3J0ZWQgaW4KK3NjcmVlbi1wb3NpdGlvbiBvcmRlciwgc28gdGhlIHNlcXVlbmNlIGdvZXMgbGVmdC10by1yaWdodCBhbmQgdG9wLXRvLWJvdHRvbS4KK1RvIGRvIHRoaXMsIHVzZSB0aGUgc2Vjb25kIGdyb3VwIG9mIGZvdXIgc29ydGVkLW1vdmVtZW50IHJlcXVlc3RzLiAgPFA+CisKK0ZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgYmV0d2VlbiBmaWVsZHMgdXNpbmcgdmlzdWFsIGRpcmVjdGlvbnMgdXAsCitkb3duLCByaWdodCwgYW5kIGxlZnQuICBUbyBhY2NvbXBsaXNoIHRoaXMsIHVzZSB0aGUgdGhpcmQgZ3JvdXAgb2YgZm91cgorcmVxdWVzdHMuICBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBwb3NpdGlvbiBvZiBhIGZvcm0gZm9yIHB1cnBvc2VzIG9mIHRoZXNlCityZXF1ZXN0cyBpcyBpdHMgdXBwZXItbGVmdCBjb3JuZXIuIDxQPgorCitGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIG11bHRpLWxpbmUgZmllbGQgQiwgYW5kIHR3bworc2luZ2xlLWxpbmUgZmllbGRzIEEgYW5kIEMgb24gdGhlIHNhbWUgbGluZSB3aXRoIEIsIHdpdGggQSB0byB0aGUgbGVmdAorb2YgQiBhbmQgQyB0byB0aGUgcmlnaHQgb2YgQi4gIEEgPENPREU+UkVRX01PVkVfUklHSFQ8L0NPREU+IGZyb20gQSB3aWxsCitnbyB0byBCIG9ubHkgaWYgQSwgQiwgYW5kIEMgPEVNPmFsbDwvRU0+IHNoYXJlIHRoZSBzYW1lIGZpcnN0IGxpbmU7CitvdGhlcndpc2UgaXQgd2lsbCBza2lwIG92ZXIgQiB0byBDLgorCis8SDM+PEEgTkFNRT0iZmlmaWVsZCI+SW50cmEtRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0czwvQT48L0gzPgorCitUaGVzZSByZXF1ZXN0cyBkcml2ZSBtb3ZlbWVudCBvZiB0aGUgZWRpdCBjdXJzb3Igd2l0aGluIHRoZSBjdXJyZW50bHkKK3NlbGVjdGVkIGZpZWxkLgorCis8REw+Cis8RFQ+IDxDT0RFPlJFUV9ORVhUX0NIQVI8L0NPREU+Cis8REQ+IE1vdmUgdG8gbmV4dCBjaGFyYWN0ZXIuCis8RFQ+IDxDT0RFPlJFUV9QUkVWX0NIQVI8L0NPREU+Cis8REQ+IE1vdmUgdG8gcHJldmlvdXMgY2hhcmFjdGVyLgorPERUPiA8Q09ERT5SRVFfTkVYVF9MSU5FPC9DT0RFPgorPEREPiBNb3ZlIHRvIG5leHQgbGluZS4KKzxEVD4gPENPREU+UkVRX1BSRVZfTElORTwvQ09ERT4KKzxERD4gTW92ZSB0byBwcmV2aW91cyBsaW5lLgorPERUPiA8Q09ERT5SRVFfTkVYVF9XT1JEPC9DT0RFPgorPEREPiBNb3ZlIHRvIG5leHQgd29yZC4KKzxEVD4gPENPREU+UkVRX1BSRVZfV09SRDwvQ09ERT4KKzxERD4gTW92ZSB0byBwcmV2aW91cyB3b3JkLgorPERUPiA8Q09ERT5SRVFfQkVHX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIGJlZ2lubmluZyBvZiBmaWVsZC4KKzxEVD4gPENPREU+UkVRX0VORF9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSB0byBlbmQgb2YgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9CRUdfTElORTwvQ09ERT4KKzxERD4gTW92ZSB0byBiZWdpbm5pbmcgb2YgbGluZS4KKzxEVD4gPENPREU+UkVRX0VORF9MSU5FPC9DT0RFPgorPEREPiBNb3ZlIHRvIGVuZCBvZiBsaW5lLgorPERUPiA8Q09ERT5SRVFfTEVGVF9DSEFSPC9DT0RFPgorPEREPiBNb3ZlIGxlZnQgaW4gZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9SSUdIVF9DSEFSPC9DT0RFPgorPEREPiBNb3ZlIHJpZ2h0IGluIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfVVBfQ0hBUjwvQ09ERT4KKzxERD4gTW92ZSB1cCBpbiBmaWVsZC4KKzxEVD4gPENPREU+UkVRX0RPV05fQ0hBUjwvQ09ERT4KKzxERD4gTW92ZSBkb3duIGluIGZpZWxkLgorPC9ETD4KKworRWFjaCA8RU0+d29yZDwvRU0+IGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBjaGFyYWN0ZXJzCitieSB3aGl0ZXNwYWNlLiAgVGhlIGNvbW1hbmRzIHRvIG1vdmUgdG8gYmVnaW5uaW5nIGFuZCBlbmQgb2YgbGluZSBvciBmaWVsZAorbG9vayBmb3IgdGhlIGZpcnN0IG9yIGxhc3Qgbm9uLXBhZCBjaGFyYWN0ZXIgaW4gdGhlaXIgcmFuZ2VzLgorCis8SDM+PEEgTkFNRT0iZnNjcm9sbCI+U2Nyb2xsaW5nIFJlcXVlc3RzPC9BPjwvSDM+CisKK0ZpZWxkcyB0aGF0IGFyZSBkeW5hbWljIGFuZCBoYXZlIGdyb3duIGFuZCBmaWVsZHMgZXhwbGljaXRseSBjcmVhdGVkCit3aXRoIG9mZnNjcmVlbiByb3dzIGFyZSBzY3JvbGxhYmxlLiAgT25lLWxpbmUgZmllbGRzIHNjcm9sbCBob3Jpem9udGFsbHk7CittdWx0aS1saW5lIGZpZWxkcyBzY3JvbGwgdmVydGljYWxseS4gIE1vc3Qgc2Nyb2xsaW5nIGlzIHRyaWdnZXJlZCBieQorZWRpdGluZyBhbmQgaW50cmEtZmllbGQgbW92ZW1lbnQgKHRoZSBsaWJyYXJ5IHNjcm9sbHMgdGhlIGZpZWxkIHRvIGtlZXAgdGhlCitjdXJzb3IgdmlzaWJsZSkuICBJdCBpcyBwb3NzaWJsZSB0byBleHBsaWNpdGx5IHJlcXVlc3Qgc2Nyb2xsaW5nIHdpdGggdGhlCitmb2xsb3dpbmcgcmVxdWVzdHM6CisKKzxETD4KKzxEVD4gPENPREU+UkVRX1NDUl9GTElORTwvQ09ERT4KKzxERD4gU2Nyb2xsIHZlcnRpY2FsbHkgZm9yd2FyZCBhIGxpbmUuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfQkxJTkU8L0NPREU+Cis8REQ+IFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGEgbGluZS4KKzxEVD4gPENPREU+UkVRX1NDUl9GUEFHRTwvQ09ERT4KKzxERD4gU2Nyb2xsIHZlcnRpY2FsbHkgZm9yd2FyZCBhIHBhZ2UuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfQlBBR0U8L0NPREU+Cis8REQ+IFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGEgcGFnZS4KKzxEVD4gPENPREU+UkVRX1NDUl9GSFBBR0U8L0NPREU+Cis8REQ+IFNjcm9sbCB2ZXJ0aWNhbGx5IGZvcndhcmQgaGFsZiBhIHBhZ2UuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfQkhQQUdFPC9DT0RFPgorPEREPiBTY3JvbGwgdmVydGljYWxseSBiYWNrd2FyZCBoYWxmIGEgcGFnZS4KKzxEVD4gPENPREU+UkVRX1NDUl9GQ0hBUjwvQ09ERT4KKzxERD4gU2Nyb2xsIGhvcml6b250YWxseSBmb3J3YXJkIGEgY2hhcmFjdGVyLgorPERUPiA8Q09ERT5SRVFfU0NSX0JDSEFSPC9DT0RFPgorPEREPiBTY3JvbGwgaG9yaXpvbnRhbGx5IGJhY2t3YXJkIGEgY2hhcmFjdGVyLgorPERUPiA8Q09ERT5SRVFfU0NSX0hGTElORTwvQ09ERT4KKzxERD4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgZmllbGQgd2lkdGggZm9yd2FyZC4KKzxEVD4gPENPREU+UkVRX1NDUl9IQkxJTkU8L0NPREU+Cis8REQ+IFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGZpZWxkIHdpZHRoIGJhY2t3YXJkLgorPERUPiA8Q09ERT5SRVFfU0NSX0hGSEFMRjwvQ09ERT4KKzxERD4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgaGFsZiBmaWVsZCB3aWR0aCBmb3J3YXJkLgorPERUPiA8Q09ERT5SRVFfU0NSX0hCSEFMRjwvQ09ERT4KKzxERD4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgaGFsZiBmaWVsZCB3aWR0aCBiYWNrd2FyZC4KKzwvREw+CisKK0ZvciBzY3JvbGxpbmcgcHVycG9zZXMsIGEgPEVNPnBhZ2U8L0VNPiBvZiBhIGZpZWxkIGlzIHRoZSBoZWlnaHQKK29mIGl0cyB2aXNpYmxlIHBhcnQuCisKKzxIMz48QSBOQU1FPSJmZWRpdCI+RWRpdGluZyBSZXF1ZXN0czwvQT48L0gzPgorCitXaGVuIHlvdSBwYXNzIHRoZSBmb3JtcyBkcml2ZXIgYW4gQVNDSUkgY2hhcmFjdGVyLCBpdCBpcyB0cmVhdGVkIGFzIGEKK3JlcXVlc3QgdG8gYWRkIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGZpZWxkJ3MgZGF0YSBidWZmZXIuICBXaGV0aGVyIHRoaXMKK2lzIGFuIGluc2VydGlvbiBvciBhIHJlcGxhY2VtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkJ3MgZWRpdCBtb2RlCisoaW5zZXJ0aW9uIGlzIHRoZSBkZWZhdWx0LiA8UD4KKworVGhlIGZvbGxvd2luZyByZXF1ZXN0cyBzdXBwb3J0IGVkaXRpbmcgdGhlIGZpZWxkIGFuZCBjaGFuZ2luZyB0aGUgZWRpdAorbW9kZToKKworPERMPgorPERUPiA8Q09ERT5SRVFfSU5TX01PREU8L0NPREU+Cis8REQ+IFNldCBpbnNlcnRpb24gbW9kZS4KKzxEVD4gPENPREU+UkVRX09WTF9NT0RFPC9DT0RFPgorPEREPiBTZXQgb3ZlcmxheSBtb2RlLgorPERUPiA8Q09ERT5SRVFfTkVXX0xJTkU8L0NPREU+Cis8REQ+IE5ldyBsaW5lIHJlcXVlc3QgKHNlZSBiZWxvdyBmb3IgZXhwbGFuYXRpb24pLgorPERUPiA8Q09ERT5SRVFfSU5TX0NIQVI8L0NPREU+Cis8REQ+IEluc2VydCBzcGFjZSBhdCBjaGFyYWN0ZXIgbG9jYXRpb24uCis8RFQ+IDxDT0RFPlJFUV9JTlNfTElORTwvQ09ERT4KKzxERD4gSW5zZXJ0IGJsYW5rIGxpbmUgYXQgY2hhcmFjdGVyIGxvY2F0aW9uLgorPERUPiA8Q09ERT5SRVFfREVMX0NIQVI8L0NPREU+Cis8REQ+IERlbGV0ZSBjaGFyYWN0ZXIgYXQgY3Vyc29yLgorPERUPiA8Q09ERT5SRVFfREVMX1BSRVY8L0NPREU+Cis8REQ+IERlbGV0ZSBwcmV2aW91cyB3b3JkIGF0IGN1cnNvci4KKzxEVD4gPENPREU+UkVRX0RFTF9MSU5FPC9DT0RFPgorPEREPiBEZWxldGUgbGluZSBhdCBjdXJzb3IuCis8RFQ+IDxDT0RFPlJFUV9ERUxfV09SRDwvQ09ERT4KKzxERD4gRGVsZXRlIHdvcmQgYXQgY3Vyc29yLgorPERUPiA8Q09ERT5SRVFfQ0xSX0VPTDwvQ09ERT4KKzxERD4gQ2xlYXIgdG8gZW5kIG9mIGxpbmUuCis8RFQ+IDxDT0RFPlJFUV9DTFJfRU9GPC9DT0RFPgorPEREPiBDbGVhciB0byBlbmQgb2YgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9DTEVBUl9GSUVMRDwvQ09ERT4KKzxERD4gQ2xlYXIgZW50aXJlIGZpZWxkLgorPC9ETD4KKworVGhlIGJlaGF2aW9yIG9mIHRoZSA8Q09ERT5SRVFfTkVXX0xJTkU8L0NPREU+IGFuZCA8Q09ERT5SRVFfREVMX1BSRVY8L0NPREU+IHJlcXVlc3RzCitpcyBjb21wbGljYXRlZCBhbmQgcGFydGx5IGNvbnRyb2xsZWQgYnkgYSBwYWlyIG9mIGZvcm1zIG9wdGlvbnMuCitUaGUgc3BlY2lhbCBjYXNlcyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mCithIGZpZWxkLCBvciBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWVsZC4gPFA+CisKK0ZpcnN0LCB3ZSBjb25zaWRlciA8Q09ERT5SRVFfTkVXX0xJTkU8L0NPREU+OiA8UD4KKworVGhlIG5vcm1hbCBiZWhhdmlvciBvZiA8Q09ERT5SRVFfTkVXX0xJTkU8L0NPREU+IGluIGluc2VydCBtb2RlIGlzIHRvIGJyZWFrIHRoZQorY3VycmVudCBsaW5lIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZWRpdCBjdXJzb3IsIGluc2VydGluZyB0aGUgcG9ydGlvbiBvZgordGhlIGN1cnJlbnQgbGluZSBhZnRlciB0aGUgY3Vyc29yIGFzIGEgbmV3IGxpbmUgZm9sbG93aW5nIHRoZSBjdXJyZW50CithbmQgbW92aW5nIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGF0IG5ldyBsaW5lICh5b3UgbWF5IHRoaW5rCitvZiB0aGlzIGFzIGluc2VydGluZyBhIG5ld2xpbmUgaW4gdGhlIGZpZWxkIGJ1ZmZlcikuIDxQPgorCitUaGUgbm9ybWFsIGJlaGF2aW9yIG9mIDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT4gaW4gb3ZlcmxheSBtb2RlIGlzIHRvIGNsZWFyIHRoZQorY3VycmVudCBsaW5lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBlZGl0IGN1cnNvciB0byBlbmQgb2YgbGluZS4KK1RoZSBjdXJzb3IgaXMgdGhlbiBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuIDxQPgorCitIb3dldmVyLCA8Q09ERT5SRVFfTkVXX0xJTkU8L0NPREU+IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCwgb3Igb24gdGhlCitsYXN0IGxpbmUgb2YgYSBmaWVsZCwgaW5zdGVhZCBkb2VzIGEgPENPREU+UkVRX05FWFRfRklFTEQ8L0NPREU+LgorPENPREU+T19OTF9PVkVSTE9BRDwvQ09ERT4gb3B0aW9uIGlzIG9mZiwgdGhpcyBzcGVjaWFsIGFjdGlvbiBpcworZGlzYWJsZWQuIDxQPgorCitOb3csIGxldCB1cyBjb25zaWRlciA8Q09ERT5SRVFfREVMX1BSRVY8L0NPREU+OiA8UD4KKworVGhlIG5vcm1hbCBiZWhhdmlvciBvZiA8Q09ERT5SRVFfREVMX1BSRVY8L0NPREU+IGlzIHRvIGRlbGV0ZSB0aGUgcHJldmlvdXMKK2NoYXJhY3Rlci4gIElmIGluc2VydCBtb2RlIGlzIG9uLCBhbmQgdGhlIGN1cnNvciBpcyBhdCB0aGUgc3RhcnQgb2YgYQorbGluZSwgYW5kIHRoZSB0ZXh0IG9uIHRoYXQgbGluZSB3aWxsIGZpdCBvbiB0aGUgcHJldmlvdXMgb25lLCBpdAoraW5zdGVhZCBhcHBlbmRzIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBsaW5lIHRvIHRoZSBwcmV2aW91cyBvbmUKK2FuZCBkZWxldGVzIHRoZSBjdXJyZW50IGxpbmUgKHlvdSBtYXkgdGhpbmsgb2YgdGhpcyBhcyBkZWxldGluZyBhCituZXdsaW5lIGZyb20gdGhlIGZpZWxkIGJ1ZmZlcikuIDxQPgorCitIb3dldmVyLCA8Q09ERT5SRVFfREVMX1BSRVY8L0NPREU+IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCBpcyBpbnN0ZWFkCit0cmVhdGVkIGFzIGEgPENPREU+UkVRX1BSRVZfRklFTEQ8L0NPREU+LiA8UD4gSWYgdGhlCis8Q09ERT5PX0JTX09WRVJMT0FEPC9DT0RFPiBvcHRpb24gaXMgb2ZmLCB0aGlzIHNwZWNpYWwgYWN0aW9uIGlzCitkaXNhYmxlZCBhbmQgdGhlIGZvcm1zIGRyaXZlciBqdXN0IHJldHVybnMgPENPREU+RV9SRVFVRVNUX0RFTklFRDwvQ09ERT4uIDxQPgorCitTZWUgPEEgSFJFRj0iI2ZybW9wdGlvbnMiPkZvcm0gT3B0aW9uczwvQT4gZm9yIGRpc2N1c3Npb24gb2YgaG93IHRvIHNldAorYW5kIGNsZWFyIHRoZSBvdmVybG9hZCBvcHRpb25zLgorCis8SDM+PEEgTkFNRT0iZm9yZGVyIj5PcmRlciBSZXF1ZXN0czwvQT48L0gzPgorCitJZiB0aGUgdHlwZSBvZiB5b3VyIGZpZWxkIGlzIG9yZGVyZWQsIGFuZCBoYXMgYXNzb2NpYXRlZCBmdW5jdGlvbnMKK2ZvciBnZXR0aW5nIHRoZSBuZXh0IGFuZCBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIHR5cGUgZnJvbSBhIGdpdmVuIHZhbHVlLAordGhlcmUgYXJlIHJlcXVlc3RzIHRoYXQgY2FuIGZldGNoIHRoYXQgdmFsdWUgaW50byB0aGUgZmllbGQgYnVmZmVyOgorCis8REw+Cis8RFQ+IDxDT0RFPlJFUV9ORVhUX0NIT0lDRTwvQ09ERT4KKzxERD4gUGxhY2UgdGhlIHN1Y2Nlc3NvciB2YWx1ZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgYnVmZmVyLgorPERUPiA8Q09ERT5SRVFfUFJFVl9DSE9JQ0U8L0NPREU+Cis8REQ+IFBsYWNlIHRoZSBwcmVkZWNlc3NvciB2YWx1ZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgYnVmZmVyLgorPC9ETD4KKworT2YgdGhlIGJ1aWx0LWluIGZpZWxkIHR5cGVzLCBvbmx5IDxDT0RFPlRZUEVfRU5VTTwvQ09ERT4gaGFzIGJ1aWx0LWluIHN1Y2Nlc3NvcgorYW5kIHByZWRlY2Vzc29yIGZ1bmN0aW9ucy4gIFdoZW4geW91IGRlZmluZSBhIGZpZWxkIHR5cGUgb2YgeW91ciBvd24KKyhzZWUgPEEgSFJFRj0iI2ZjdXN0b20iPkN1c3RvbSBWYWxpZGF0aW9uIFR5cGVzPC9BPiksIHlvdSBjYW4gYXNzb2NpYXRlCitvdXIgb3duIG9yZGVyaW5nIGZ1bmN0aW9ucy4KKworPEgzPjxBIE5BTUU9ImZhcHBjbWRzIj5BcHBsaWNhdGlvbiBDb21tYW5kczwvQT48L0gzPgorCitGb3JtIHJlcXVlc3RzIGFyZSByZXByZXNlbnRlZCBhcyBpbnRlZ2VycyBhYm92ZSB0aGUgPENPREU+Y3Vyc2VzPC9DT0RFPiB2YWx1ZQorZ3JlYXRlciB0aGFuIDxDT0RFPktFWV9NQVg8L0NPREU+IGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbnN0YW50Cis8Q09ERT5NQVhfQ09NTUFORDwvQ09ERT4uICBJZiB5b3VyIGlucHV0LXZpcnR1YWxpemF0aW9uIHJvdXRpbmUgcmV0dXJucyBhCit2YWx1ZSBhYm92ZSA8Q09ERT5NQVhfQ09NTUFORDwvQ09ERT4sIHRoZSBmb3JtcyBkcml2ZXIgd2lsbCBpZ25vcmUgaXQuCisKKzxIMj48QSBOQU1FPSJmaG9va3MiPkZpZWxkIENoYW5nZSBIb29rczwvQT48L0gyPgorCitJdCBpcyBwb3NzaWJsZSB0byBzZXQgZnVuY3Rpb24gaG9va3MgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlCitjdXJyZW50IGZpZWxkIG9yIGZvcm0gY2hhbmdlcy4gIEhlcmUgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzdXBwb3J0IHRoaXM6CisKKzxQUkU+Cit0eXBlZGVmIHZvaWQJKCpIT09LKSgpOyAgICAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkICovCisKK2ludCBzZXRfZm9ybV9pbml0KEZPUk0gKmZvcm0sICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIEhPT0sgaG9vayk7ICAgIC8qIGluaXRpYWxpemF0aW9uIGhvb2sgKi8KKworSE9PSyBmb3JtX2luaXQoRk9STSAqZm9ybSk7ICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworCitpbnQgc2V0X2Zvcm1fdGVybShGT1JNICpmb3JtLCAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBIT09LIGhvb2spOyAgICAvKiB0ZXJtaW5hdGlvbiBob29rICovCisKK0hPT0sgZm9ybV90ZXJtKEZPUk0gKmZvcm0pOyAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKworaW50IHNldF9maWVsZF9pbml0KEZPUk0gKmZvcm0sICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgSE9PSyBob29rKTsgICAgLyogaW5pdGlhbGl6YXRpb24gaG9vayAqLworCitIT09LIGZpZWxkX2luaXQoRk9STSAqZm9ybSk7ICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKK2ludCBzZXRfZmllbGRfdGVybShGT1JNICpmb3JtLCAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIEhPT0sgaG9vayk7ICAgIC8qIHRlcm1pbmF0aW9uIGhvb2sgKi8KKworSE9PSyBmaWVsZF90ZXJtKEZPUk0gKmZvcm0pOyAgICAgLyogZm9ybSB0byBxdWVyeSAqLworPC9QUkU+CisKK1RoZXNlIGZ1bmN0aW9ucyBhbGxvdyB5b3UgdG8gZWl0aGVyIHNldCBvciBxdWVyeSBmb3VyIGRpZmZlcmVudCBob29rcy4KK0luIGVhY2ggb2YgdGhlIHNldCBmdW5jdGlvbnMsIHRoZSBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIGJlIHRoZQorYWRkcmVzcyBvZiBhIGhvb2sgZnVuY3Rpb24uICBUaGVzZSBmdW5jdGlvbnMgZGlmZmVyIG9ubHkgaW4gdGhlIHRpbWluZworb2YgdGhlIGhvb2sgY2FsbC4KKworPERMPgorPERUPiBmb3JtX2luaXQKKzxERD4gVGhpcyBob29rIGlzIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZDsgYWxzbywganVzdCBhZnRlcgorZWFjaCBwYWdlIGNoYW5nZSBvcGVyYXRpb24uCis8RFQ+IGZpZWxkX2luaXQKKzxERD4gVGhpcyBob29rIGlzIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZDsgYWxzbywganVzdCBhZnRlcgorZWFjaCBmaWVsZCBjaGFuZ2UKKzxEVD4gZmllbGRfdGVybQorPEREPiBUaGlzIGhvb2sgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgZmllbGQgdmFsaWRhdGlvbjsgdGhhdCBpcywganVzdCBiZWZvcmUKK3RoZSBmaWVsZCBpcyBhbHRlcmVkLiAgSXQgaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcyB1bnBvc3RlZC4KKzxEVD4gZm9ybV90ZXJtCis8REQ+IFRoaXMgaG9vayBpcyBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcyB1bnBvc3RlZDsgYWxzbywganVzdCBiZWZvcmUKK2VhY2ggcGFnZSBjaGFuZ2Ugb3BlcmF0aW9uLgorPC9ETD4KKworQ2FsbHMgdG8gdGhlc2UgaG9va3MgbWF5IGJlIHRyaWdnZXJlZAorPE9MPgorPExJPldoZW4gdXNlciBlZGl0aW5nIHJlcXVlc3RzIGFyZSBwcm9jZXNzZWQgYnkgdGhlIGZvcm1zIGRyaXZlcgorPExJPldoZW4gdGhlIGN1cnJlbnQgcGFnZSBpcyBjaGFuZ2VkIGJ5IDxDT0RFPnNldF9jdXJyZW50X2ZpZWxkKCk8L0NPREU+IGNhbGwKKzxMST5XaGVuIHRoZSBjdXJyZW50IGZpZWxkIGlzIGNoYW5nZWQgYnkgYSA8Q09ERT5zZXRfZm9ybV9wYWdlKCk8L0NPREU+IGNhbGwKKzwvT0w+CisKK1NlZSA8QSBOQU1FPSJmZm9jdXMiPkZpZWxkIENoYW5nZSBDb21tYW5kczwvQT4gZm9yIGRpc2N1c3Npb24gb2YgdGhlIGxhdHRlcgordHdvIGNhc2VzLiA8UD4KKworWW91IGNhbiBzZXQgYSBkZWZhdWx0IGhvb2sgZm9yIGFsbCBmaWVsZHMgYnkgcGFzc2luZyBvbmUgb2YgdGhlIHNldCBmdW5jdGlvbnMKK2EgTlVMTCBmaXJzdCBhcmd1bWVudC4gPFA+CisKK1lvdSBjYW4gZGlzYWJsZSBhbnkgb2YgdGhlc2UgaG9va3MgYnkgKHJlKXNldHRpbmcgdGhlbSB0byBOVUxMLCB0aGUgZGVmYXVsdAordmFsdWUuCisKKzxIMj48QSBIUkVGPSIjZmZvY3VzIj5GaWVsZCBDaGFuZ2UgQ29tbWFuZHM8L0E+PC9IMj4KKworTm9ybWFsbHksIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZm9ybSB3aWxsIGJlIGRyaXZlbiBieSB0aGUgdXNlcidzCitpbnB1dCByZXF1ZXN0cy4gIEJ1dCBzb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gbW92ZSB0aGUKK2ZvY3VzIGZvciBlZGl0aW5nIGFuZCB2aWV3aW5nIHVuZGVyIGNvbnRyb2wgb2YgeW91ciBhcHBsaWNhdGlvbiwgb3IKK2FzayB3aGljaCBmaWVsZCBpdCBjdXJyZW50bHkgaXMgaW4uICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoZWxwIHlvdQorYWNjb21wbGlzaCB0aGlzOgorCis8UFJFPgoraW50IHNldF9jdXJyZW50X2ZpZWxkKEZPUk0gKmZvcm0sICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICpmaWVsZCk7ICAgICAgLyogZmllbGQgdG8gc2hpZnQgdG8gKi8KKworRklFTEQgKmN1cnJlbnRfZmllbGQoRk9STSAqZm9ybSk7ICAgICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworCitpbnQgZmllbGRfaW5kZXgoRk9STSAqZm9ybSwgICAgICAgICAgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICAgRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAvKiBmaWVsZCB0byBnZXQgaW5kZXggb2YgKi8KKzwvUFJFPgorCitUaGUgZnVuY3Rpb24gPENPREU+ZmllbGRfaW5kZXgoKTwvQ09ERT4gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIGZpZWxkCitpbiB0aGUgZ2l2ZW4gZm9ybSdzIGZpZWxkIGFycmF5ICh0aGUgYXJyYXkgcGFzc2VkIHRvIDxDT0RFPm5ld19mb3JtKCk8L0NPREU+IG9yCis8Q09ERT5zZXRfZm9ybV9maWVsZHMoKTwvQ09ERT4pLiA8UD4KKworVGhlIGluaXRpYWwgY3VycmVudCBmaWVsZCBvZiBhIGZvcm0gaXMgdGhlIGZpcnN0IGFjdGl2ZSBmaWVsZCBvbiB0aGUKK2ZpcnN0IHBhZ2UuIFRoZSBmdW5jdGlvbiA8Q09ERT5zZXRfZm9ybV9maWVsZHMoKTwvQ09ERT4gcmVzZXRzIHRoaXMuPFA+CisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gbW92ZSBhcm91bmQgYnkgcGFnZXMuCisKKzxQUkU+CitpbnQgc2V0X2Zvcm1fcGFnZShGT1JNICpmb3JtLCAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgcGFnZSk7ICAgICAgICAgICAgICAvKiBwYWdlIHRvIGdvIHRvICgwLW9yaWdpbikgKi8KKworaW50IGZvcm1fcGFnZShGT1JNICpmb3JtKTsgICAgICAgICAgICAgICAgLyogcmV0dXJuIGZvcm0ncyBjdXJyZW50IHBhZ2UgKi8KKzwvUFJFPgorCitUaGUgaW5pdGlhbCBwYWdlIG9mIGEgbmV3bHktY3JlYXRlZCBmb3JtIGlzIDAuICBUaGUgZnVuY3Rpb24KKzxDT0RFPnNldF9mb3JtX2ZpZWxkcygpPC9DT0RFPiByZXNldHMgdGhpcy4KKworPEgyPjxBIE5BTUU9ImZybW9wdGlvbnMiPkZvcm0gT3B0aW9uczwvQT48L0gyPgorCitMaWtlIGZpZWxkcywgZm9ybXMgbWF5IGhhdmUgY29udHJvbCBvcHRpb24gYml0cy4gIFRoZXkgY2FuIGJlIGNoYW5nZWQKK29yIHF1ZXJpZWQgd2l0aCB0aGVzZSBmdW5jdGlvbnM6CisKKzxQUkU+CitpbnQgc2V0X2Zvcm1fb3B0cyhGT1JNICpmb3JtLCAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovCisKK2ludCBmb3JtX29wdHNfb24oRk9STSAqZm9ybSwgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvbiAqLworCitpbnQgZm9ybV9vcHRzX29mZihGT1JNICpmb3JtLCAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgICAvKiBhdHRyaWJ1dGVzIHRvIHR1cm4gb2ZmICovCisKK2ludCBmb3JtX29wdHMoRk9STSAqZm9ybSk7ICAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKzwvUFJFPgorCitCeSBkZWZhdWx0LCBhbGwgb3B0aW9ucyBhcmUgb24uICBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIG9wdGlvbiBiaXRzOgorCis8REw+Cis8RFQ+IE9fTkxfT1ZFUkxPQUQKKzxERD4gRW5hYmxlIG92ZXJsb2FkaW5nIG9mIDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT4gYXMgZGVzY3JpYmVkIGluIDxBCitocmVmPSIjZmVkaXQiPkVkaXRpbmcgUmVxdWVzdHM8L0E+LiAgVGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIGlzCitpZ25vcmVkIG9uIGR5bmFtaWMgZmllbGRzIHRoYXQgaGF2ZSBub3QgcmVhY2hlZCB0aGVpciBzaXplIGxpbWl0OwordGhlc2UgaGF2ZSBubyBsYXN0IGxpbmUsIHNvIHRoZSBjaXJjdW1zdGFuY2VzIGZvciB0cmlnZ2VyaW5nIGEKKzxDT0RFPlJFUV9ORVhUX0ZJRUxEPC9DT0RFPiBuZXZlciBhcmlzZS4KKzxEVD4gT19CU19PVkVSTE9BRAorPEREPiBFbmFibGUgb3ZlcmxvYWRpbmcgb2YgPENPREU+UkVRX0RFTF9QUkVWPC9DT0RFPiBhcyBkZXNjcmliZWQgaW4KKzxBIGhyZWY9IiNmZWRpdCI+RWRpdGluZyBSZXF1ZXN0czwvQT4uCis8L0RMPgorCitUaGUgb3B0aW9uIHZhbHVlcyBhcmUgYml0LW1hc2tzIGFuZCBjYW4gYmUgY29tcG9zZWQgd2l0aCBsb2dpY2FsLW9yIGluCit0aGUgb2J2aW91cyB3YXkuCisKKzxIMj48QSBOQU1FPSJmY3VzdG9tIj5DdXN0b20gVmFsaWRhdGlvbiBUeXBlczwvQT48L0gyPgorCitUaGUgPENPREU+Zm9ybTwvQ09ERT4gbGlicmFyeSBnaXZlcyB5b3UgdGhlIGNhcGFiaWxpdHkgdG8gZGVmaW5lIGN1c3RvbQordmFsaWRhdGlvbiB0eXBlcyBvZiB5b3VyIG93bi4gIEZ1cnRoZXIsIHRoZSBvcHRpb25hbCBhZGRpdGlvbmFsIGFyZ3VtZW50cworb2YgPENPREU+c2V0X2ZpZWxkX3R5cGU8L0NPREU+IGVmZmVjdGl2ZWx5IGFsbG93IHlvdSB0byBwYXJhbWV0ZXJpemUgdmFsaWRhdGlvbgordHlwZXMuICBNb3N0IG9mIHRoZSBjb21wbGljYXRpb25zIGluIHRoZSB2YWxpZGF0aW9uLXR5cGUgaW50ZXJmYWNlIGhhdmUgdG8KK2RvIHdpdGggdGhlIGhhbmRsaW5nIG9mIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aXRoaW4gY3VzdG9tIHZhbGlkYXRpb24KK2Z1bmN0aW9ucy4KKworPEgzPjxBIE5BTUU9ImZsaW5rdHlwZXMiPlVuaW9uIFR5cGVzPC9BPjwvSDM+CisKK1RoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGEgY3VzdG9tIGRhdGEgdHlwZSBpcyB0byBjb21wb3NlIGl0IGZyb20gdHdvCitwcmVleGlzdGluZyBvbmVzOgorCis8UFJFPgorRklFTEQgKmxpbmtfZmllbGR0eXBlKEZJRUxEVFlQRSAqdHlwZTEsCisgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXBlMik7Cis8L1BSRT4KKworVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgZmllbGQgdHlwZSB0aGF0IHdpbGwgYWNjZXB0IGFueSBvZiB0aGUgdmFsdWVzCitsZWdhbCBmb3IgZWl0aGVyIG9mIGl0cyBhcmd1bWVudCBmaWVsZCB0eXBlcyAod2hpY2ggbWF5IGJlIGVpdGhlcgorcHJlZGVmaW5lZCBvciBwcm9ncmFtbWVyLWRlZmluZWQpLgorCitJZiBhIDxDT0RFPnNldF9maWVsZF90eXBlKCk8L0NPREU+IGNhbGwgbGF0ZXIgcmVxdWlyZXMgYXJndW1lbnRzLCB0aGUgbmV3Citjb21wb3NpdGUgdHlwZSBleHBlY3RzIGFsbCBhcmd1bWVudHMgZm9yIHRoZSBmaXJzdCB0eXBlLCB0aGFuIGFsbCBhcmd1bWVudHMKK2ZvciB0aGUgc2Vjb25kLiAgT3JkZXIgZnVuY3Rpb25zIChzZWUgPEEgSFJFRj0iI2ZvcmRlciI+T3JkZXIgUmVxdWVzdHM8L0E+KQorYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnQgdHlwZXMgd2lsbCB3b3JrIG9uIHRoZSBjb21wb3NpdGU7IHdoYXQgaXQgZG9lcworaXMgY2hlY2sgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmaXJzdCB0eXBlLCB0aGVuIGZvciB0aGUgc2Vjb25kLCB0bworZmlndXJlIHdoYXQgdHlwZSB0aGUgYnVmZmVyIGNvbnRlbnRzIHNob3VsZCBiZSB0cmVhdGVkIGFzLgorCis8SDM+PEEgTkFNRT0iZm5ld3R5cGVzIj5OZXcgRmllbGQgVHlwZXM8L0E+PC9IMz4KKworVG8gY3JlYXRlIGEgZmllbGQgdHlwZSBmcm9tIHNjcmF0Y2gsIHlvdSBuZWVkIHRvIHNwZWNpZnkgb25lIG9yIGJvdGggb2YgdGhlCitmb2xsb3dpbmcgdGhpbmdzOgorCis8VUw+Cis8TEk+QSBjaGFyYWN0ZXItdmFsaWRhdGlvbiBmdW5jdGlvbiwgdG8gY2hlY2sgZWFjaCBjaGFyYWN0ZXIgYXMgaXQgaXMgZW50ZXJlZC4KKzxMST5BIGZpZWxkLXZhbGlkYXRpb24gZnVuY3Rpb24gdG8gYmUgYXBwbGllZCBvbiBleGl0IGZyb20gdGhlIGZpZWxkLgorPC9VTD4KKworSGVyZSdzIGhvdyB5b3UgZG8gdGhhdDoKKzxQUkU+Cit0eXBlZGVmIGludAkoKkhPT0spKCk7ICAgICAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIGludCAqLworCitGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoSE9PSyBmX3ZhbGlkYXRlLCAvKiBmaWVsZCB2YWxpZGF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBIT09LIGNfdmFsaWRhdGUpIC8qIGNoYXJhY3RlciB2YWxpZGF0b3IgKi8KKworCitpbnQgZnJlZV9maWVsZHR5cGUoRklFTERUWVBFICpmdHlwZSk7ICAgICAvKiB0eXBlIHRvIGZyZWUgKi8KKzwvUFJFPgorCitBdCBsZWFzdCBvbmUgb2YgdGhlIGFyZ3VtZW50cyBvZiA8Q09ERT5uZXdfZmllbGR0eXBlKCk8L0NPREU+IG11c3QgYmUKK25vbi1OVUxMLiAgVGhlIGZvcm1zIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGUgbmV3IHR5cGUncwordmFsaWRhdGlvbiBmdW5jdGlvbnMgYXQgYXBwcm9wcmlhdGUgcG9pbnRzIGluIHByb2Nlc3NpbmcgYSBmaWVsZCBvZgordGhlIG5ldyB0eXBlLiA8UD4KKworVGhlIGZ1bmN0aW9uIDxDT0RFPmZyZWVfZmllbGR0eXBlKCk8L0NPREU+IGRlYWxsb2NhdGVzIHRoZSBhcmd1bWVudAorZmllbGR0eXBlLCBmcmVlaW5nIGFsbCBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC4gPFA+CisKK05vcm1hbGx5LCBhIGZpZWxkIHZhbGlkYXRvciBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworbGVhdmUgdGhlIGZpZWxkLiAgSXRzIGZpcnN0IGFyZ3VtZW50IGlzIGEgZmllbGQgcG9pbnRlciwgZnJvbSB3aGljaCBpdAorY2FuIGdldCB0byBmaWVsZCBidWZmZXIgMCBhbmQgdGVzdCBpdC4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFRSVUUsCit0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzOyBpZiBpdCByZXR1cm5zIEZBTFNFLCB0aGUgZWRpdCBjdXJzb3Igc3RheXMgaW4KK3RoZSBmaWVsZC4gPFA+CisKK0EgY2hhcmFjdGVyIHZhbGlkYXRvciBnZXRzIHRoZSBjaGFyYWN0ZXIgcGFzc2VkIGluIGFzIGEgZmlyc3QgYXJndW1lbnQuCitJdCB0b28gc2hvdWxkIHJldHVybiBUUlVFIGlmIHRoZSBjaGFyYWN0ZXIgaXMgdmFsaWQsIEZBTFNFIG90aGVyd2lzZS4KKworPEgzPjxBIE5BTUU9ImZjaGVja2FyZ3MiPlZhbGlkYXRpb24gRnVuY3Rpb24gQXJndW1lbnRzPC9BPjwvSDM+CisKK1lvdXIgZmllbGQtIGFuZCBjaGFyYWN0ZXItIHZhbGlkYXRpb24gZnVuY3Rpb25zIHdpbGwgYmUgcGFzc2VkIGEKK3NlY29uZCBhcmd1bWVudCBhcyB3ZWxsLiAgVGhpcyBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFkZHJlc3Mgb2YgYQorc3RydWN0dXJlICh3aGljaCB3ZSdsbCBjYWxsIGEgPEVNPnBpbGU8L0VNPikgYnVpbHQgZnJvbSBhbnkgb2YgdGhlCitmaWVsZC10eXBlLXNwZWNpZmljIGFyZ3VtZW50cyBwYXNzZWQgdG8gPENPREU+c2V0X2ZpZWxkX3R5cGUoKTwvQ09ERT4uICBJZgorbm8gc3VjaCBhcmd1bWVudHMgYXJlIGRlZmluZWQgZm9yIHRoZSBmaWVsZCB0eXBlLCB0aGlzIHBpbGUgcG9pbnRlcgorYXJndW1lbnQgd2lsbCBiZSBOVUxMLiA8UD4KKworSW4gb3JkZXIgdG8gYXJyYW5nZSBmb3Igc3VjaCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHlvdXIgdmFsaWRhdGlvbgorZnVuY3Rpb25zLCB5b3UgbXVzdCBhc3NvY2lhdGUgYSBzbWFsbCBzZXQgb2Ygc3RvcmFnZS1tYW5hZ2VtZW50IGZ1bmN0aW9ucword2l0aCB0aGUgdHlwZS4gIFRoZSBmb3JtcyBkcml2ZXIgd2lsbCB1c2UgdGhlc2UgdG8gc3ludGhlc2l6ZSBhIHBpbGUKK2Zyb20gdGhlIHRyYWlsaW5nIGFyZ3VtZW50cyBvZiBlYWNoIDxDT0RFPnNldF9maWVsZF90eXBlKCk8L0NPREU+IGFyZ3VtZW50LCBhbmQKK2EgcG9pbnRlciB0byB0aGUgcGlsZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbnMuIDxQPgorCitIZXJlIGlzIGhvdyB5b3UgbWFrZSB0aGUgYXNzb2NpYXRpb246CisKKzxQUkU+Cit0eXBlZGVmIGNoYXIJKigqUFRSSE9PSykoKTsgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgKGNoYXIgKikgKi8KK3R5cGVkZWYgdm9pZAkoKlZPSURIT09LKSgpOyAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkICovCisKK2ludCBzZXRfZmllbGR0eXBlX2FyZyhGSUVMRFRZUEUgKnR5cGUsICAgIC8qIHR5cGUgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBQVFJIT09LIG1ha2Vfc3RyLCAgIC8qIG1ha2Ugc3RydWN0dXJlIGZyb20gYXJncyAqLworICAgICAgICAgICAgICAgICAgICAgIFBUUkhPT0sgY29weV9zdHIsICAgLyogbWFrZSBjb3B5IG9mIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgIFZPSURIT09LIGZyZWVfc3RyKTsgLyogZnJlZSBzdHJ1Y3R1cmUgc3RvcmFnZSAqLworPC9QUkU+CisKK0hlcmUgaXMgaG93IHRoZSBzdG9yYWdlLW1hbmFnZW1lbnQgaG9va3MgYXJlIHVzZWQ6CisKKzxETD4KKzxEVD4gPENPREU+bWFrZV9zdHI8L0NPREU+Cis8REQ+IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IDxDT0RFPnNldF9maWVsZF90eXBlKCk8L0NPREU+LiAgSXQgZ2V0cyBvbmUKK2FyZ3VtZW50LCBhIDxDT0RFPnZhX2xpc3Q8L0NPREU+IG9mIHRoZSB0eXBlLXNwZWNpZmljIGFyZ3VtZW50cyBwYXNzZWQgdG8KKzxDT0RFPnNldF9maWVsZF90eXBlKCk8L0NPREU+LiAgSXQgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcGlsZSBwb2ludGVyIHRvIGEgZGF0YQorc3RydWN0dXJlIHRoYXQgZW5jYXBzdWxhdGVzIHRob3NlIGFyZ3VtZW50cy4KKzxEVD4gPENPREU+Y29weV9zdHI8L0NPREU+Cis8REQ+IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGZvcm0gbGlicmFyeSBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSBuZXcKK2ZpZWxkIGluc3RhbmNlcy4gIEl0IGlzIGV4cGVjdGVkIHRvIHRha2UgYSBwaWxlIHBvaW50ZXIsIGNvcHkgdGhlIHBpbGUKK3RvIGFsbG9jYXRlZCBzdG9yYWdlLCBhbmQgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBwaWxlIGNvcHkuCis8RFQ+IDxDT0RFPmZyZWVfc3RyPC9DT0RFPgorPEREPiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBmaWVsZC0gYW5kIHR5cGUtZGVhbGxvY2F0aW9uIHJvdXRpbmVzIGluIHRoZQorbGlicmFyeS4gIEl0IHRha2VzIGEgcGlsZSBwb2ludGVyIGFyZ3VtZW50LCBhbmQgaXMgZXhwZWN0ZWQgdG8gZnJlZSB0aGUKK3N0b3JhZ2Ugb2YgdGhhdCBwaWxlLgorPC9ETD4KKworVGhlIDxDT0RFPm1ha2Vfc3RyPC9DT0RFPiBhbmQgPENPREU+Y29weV9zdHI8L0NPREU+IGZ1bmN0aW9ucyBtYXkgcmV0dXJuIE5VTEwgdG8KK3NpZ25hbCBhbGxvY2F0aW9uIGZhaWx1cmUuICBUaGUgbGlicmFyeSByb3V0aW5lcyB3aWxsIHRoYXQgY2FsbCB0aGVtIHdpbGwKK3JldHVybiBlcnJvciBpbmRpY2F0aW9uIHdoZW4gdGhpcyBoYXBwZW5zLiAgVGh1cywgeW91ciB2YWxpZGF0aW9uIGZ1bmN0aW9ucworc2hvdWxkIG5ldmVyIHNlZSBhIE5VTEwgZmlsZSBwb2ludGVyIGFuZCBuZWVkIG5vdCBjaGVjayBzcGVjaWFsbHkgZm9yIGl0LgorCis8SDM+PEEgTkFNRT0iZmN1c3RvcmRlciI+T3JkZXIgRnVuY3Rpb25zIEZvciBDdXN0b20gVHlwZXM8L0E+PC9IMz4KKworU29tZSBjdXN0b20gZmllbGQgdHlwZXMgYXJlIHNpbXBseSBvcmRlcmVkIGluIHRoZSBzYW1lIHdlbGwtZGVmaW5lZCB3YXkKK3RoYXQgPENPREU+VFlQRV9FTlVNPC9DT0RFPiBpcy4gIEZvciBzdWNoIHR5cGVzLCBpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUKK3N1Y2Nlc3NvciBhbmQgcHJlZGVjZXNzb3IgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIDxDT0RFPlJFUV9ORVhUX0NIT0lDRTwvQ09ERT4KK2FuZCA8Q09ERT5SRVFfUFJFVl9DSE9JQ0U8L0NPREU+IHJlcXVlc3RzLiBIZXJlJ3MgaG93OgorCis8UFJFPgordHlwZWRlZiBpbnQJKCpJTlRIT09LKSgpOyAgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgaW50ICovCisKK2ludCBzZXRfZmllbGR0eXBlX2FyZyhGSUVMRFRZUEUgKnR5cGUsICAgIC8qIHR5cGUgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBJTlRIT09LIHN1Y2MsICAgICAgIC8qIGdldCBzdWNjZXNzb3IgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBJTlRIT09LIHByZWQpOyAgICAgIC8qIGdldCBwcmVkZWNlc3NvciB2YWx1ZSAqLworPC9QUkU+CisKK1RoZSBzdWNjZXNzb3IgYW5kIHByZWRlY2Vzc29yIGFyZ3VtZW50cyB3aWxsIGVhY2ggYmUgcGFzc2VkIHR3byBhcmd1bWVudHM7CithIGZpZWxkIHBvaW50ZXIsIGFuZCBhIHBpbGUgcG9pbnRlciAoYXMgZm9yIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucykuICBUaGV5CithcmUgZXhwZWN0ZWQgdG8gdXNlIHRoZSBmdW5jdGlvbiA8Q09ERT5maWVsZF9idWZmZXIoKTwvQ09ERT4gdG8gcmVhZCB0aGUKK2N1cnJlbnQgdmFsdWUsIGFuZCA8Q09ERT5zZXRfZmllbGRfYnVmZmVyKCk8L0NPREU+IG9uIGJ1ZmZlciAwIHRvIHNldCB0aGUgbmV4dAorb3IgcHJldmlvdXMgdmFsdWUuICBFaXRoZXIgaG9vayBtYXkgcmV0dXJuIFRSVUUgdG8gaW5kaWNhdGUgc3VjY2VzcyAoYQorbGVnYWwgbmV4dCBvciBwcmV2aW91cyB2YWx1ZSB3YXMgc2V0KSBvciBGQUxTRSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorCis8SDM+PEEgTkFNRT0iZmN1c3Rwcm9icyI+QXZvaWRpbmcgUHJvYmxlbXM8L0E+PC9IMz4KKworVGhlIGludGVyZmFjZSBmb3IgZGVmaW5pbmcgY3VzdG9tIHR5cGVzIGlzIGNvbXBsaWNhdGVkIGFuZCB0cmlja3kuCitSYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIGN1c3RvbSB0eXBlIGVudGlyZWx5IGZyb20gc2NyYXRjaCwKK3lvdSBzaG91bGQgc3RhcnQgYnkgc3R1ZHlpbmcgdGhlIGxpYnJhcnkgc291cmNlIGNvZGUgZm9yIHdoaWNoZXZlciBvZgordGhlIHByZS1kZWZpbmVkIHR5cGVzIHNlZW1zIHRvIGJlIGNsb3Nlc3QgdG8gd2hhdCB5b3Ugd2FudC4gPFA+CisKK1VzZSB0aGF0IGNvZGUgYXMgYSBtb2RlbCwgYW5kIGV2b2x2ZSBpdCB0b3dhcmRzIHdoYXQgeW91IHJlYWxseSB3YW50LgorWW91IHdpbGwgYXZvaWQgbWFueSBwcm9ibGVtcyBhbmQgYW5ub3lhbmNlcyB0aGF0IHdheS4gIFRoZSBjb2RlCitpbiB0aGUgPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSBoYXMgYmVlbiBzcGVjaWZpY2FsbHkgZXhlbXB0ZWQgZnJvbQordGhlIHBhY2thZ2UgY29weXJpZ2h0IHRvIHN1cHBvcnQgdGhpcy4gPFA+CisKK0lmIHlvdXIgY3VzdG9tIHR5cGUgZGVmaW5lcyBvcmRlciBmdW5jdGlvbnMsIGhhdmUgZG8gc29tZXRoaW5nIGludHVpdGl2ZQord2l0aCBhIGJsYW5rIGZpZWxkLiAgQSB1c2VmdWwgY29udmVudGlvbiBpcyB0byBtYWtlIHRoZSBzdWNjZXNzb3Igb2YgYQorYmxhbmsgZmllbGQgdGhlIHR5cGVzIG1pbmltdW0gdmFsdWUsIGFuZCBpdHMgcHJlZGVjZXNzb3IgdGhlIG1heGltdW0uCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvbmN1cnNlcy1pbnRyby5kb2MgYi9kb2MvbmN1cnNlcy1pbnRyby5kb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUxNzlkMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9uY3Vyc2VzLWludHJvLmRvYwpAQCAtMCwwICsxLDI1MDEgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBXcml0aW5nIFByb2dyYW1zIHdpdGggTkNVUlNFUworCisgICAgIGJ5IEVyaWMgUy4gUmF5bW9uZCBhbmQgWmV5ZCBNLiBCZW4tSGFsaW0KKyAgICAgdXBkYXRlcyBzaW5jZSByZWxlYXNlIDEuOS45ZSBieSBUaG9tYXMgRGlja2V5CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudHMKKworICAgICAqIEludHJvZHVjdGlvbgorICAgICAgICAgICsgQSBCcmllZiBIaXN0b3J5IG9mIEN1cnNlcworICAgICAgICAgICsgU2NvcGUgb2YgVGhpcyBEb2N1bWVudAorICAgICAgICAgICsgVGVybWlub2xvZ3kKKyAgICAgKiBUaGUgQ3Vyc2VzIExpYnJhcnkKKyAgICAgICAgICArIEFuIE92ZXJ2aWV3IG9mIEN1cnNlcworICAgICAgICAgICAgICAgbyBDb21waWxpbmcgUHJvZ3JhbXMgdXNpbmcgQ3Vyc2VzCisgICAgICAgICAgICAgICBvIFVwZGF0aW5nIHRoZSBTY3JlZW4KKyAgICAgICAgICAgICAgIG8gU3RhbmRhcmQgV2luZG93cyBhbmQgRnVuY3Rpb24gTmFtaW5nIENvbnZlbnRpb25zCisgICAgICAgICAgICAgICBvIFZhcmlhYmxlcworICAgICAgICAgICsgVXNpbmcgdGhlIExpYnJhcnkKKyAgICAgICAgICAgICAgIG8gU3RhcnRpbmcgdXAKKyAgICAgICAgICAgICAgIG8gT3V0cHV0CisgICAgICAgICAgICAgICBvIElucHV0CisgICAgICAgICAgICAgICBvIFVzaW5nIEZvcm1zIENoYXJhY3RlcnMKKyAgICAgICAgICAgICAgIG8gQ2hhcmFjdGVyIEF0dHJpYnV0ZXMgYW5kIENvbG9yCisgICAgICAgICAgICAgICBvIE1vdXNlIEludGVyZmFjaW5nCisgICAgICAgICAgICAgICBvIEZpbmlzaGluZyBVcAorICAgICAgICAgICsgRnVuY3Rpb24gRGVzY3JpcHRpb25zCisgICAgICAgICAgICAgICBvIEluaXRpYWxpemF0aW9uIGFuZCBXcmFwdXAKKyAgICAgICAgICAgICAgIG8gQ2F1c2luZyBPdXRwdXQgdG8gdGhlIFRlcm1pbmFsCisgICAgICAgICAgICAgICBvIExvdy1MZXZlbCBDYXBhYmlsaXR5IEFjY2VzcworICAgICAgICAgICAgICAgbyBEZWJ1Z2dpbmcKKyAgICAgICAgICArIEhpbnRzLCBUaXBzLCBhbmQgVHJpY2tzCisgICAgICAgICAgICAgICBvIFNvbWUgTm90ZXMgb2YgQ2F1dGlvbgorICAgICAgICAgICAgICAgbyBUZW1wb3JhcmlseSBMZWF2aW5nIG5jdXJzZXMgTW9kZQorICAgICAgICAgICAgICAgbyBVc2luZyBuY3Vyc2VzIHVuZGVyIHh0ZXJtCisgICAgICAgICAgICAgICBvIEhhbmRsaW5nIE11bHRpcGxlIFRlcm1pbmFsIFNjcmVlbnMKKyAgICAgICAgICAgICAgIG8gVGVzdGluZyBmb3IgVGVybWluYWwgQ2FwYWJpbGl0aWVzCisgICAgICAgICAgICAgICBvIFR1bmluZyBmb3IgU3BlZWQKKyAgICAgICAgICAgICAgIG8gU3BlY2lhbCBGZWF0dXJlcyBvZiBuY3Vyc2VzCisgICAgICAgICAgKyBDb21wYXRpYmlsaXR5IHdpdGggT2xkZXIgVmVyc2lvbnMKKyAgICAgICAgICAgICAgIG8gUmVmcmVzaCBvZiBPdmVybGFwcGluZyBXaW5kb3dzCisgICAgICAgICAgICAgICBvIEJhY2tncm91bmQgRXJhc2UKKyAgICAgICAgICArIFhTSSBDdXJzZXMgQ29uZm9ybWFuY2UKKyAgICAgKiBUaGUgUGFuZWxzIExpYnJhcnkKKyAgICAgICAgICArIENvbXBpbGluZyBXaXRoIHRoZSBQYW5lbHMgTGlicmFyeQorICAgICAgICAgICsgT3ZlcnZpZXcgb2YgUGFuZWxzCisgICAgICAgICAgKyBQYW5lbHMsIElucHV0LCBhbmQgdGhlIFN0YW5kYXJkIFNjcmVlbgorICAgICAgICAgICsgSGlkaW5nIFBhbmVscworICAgICAgICAgICsgTWlzY2VsbGFuZW91cyBPdGhlciBGYWNpbGl0aWVzCisgICAgICogVGhlIE1lbnUgTGlicmFyeQorICAgICAgICAgICsgQ29tcGlsaW5nIHdpdGggdGhlIG1lbnUgTGlicmFyeQorICAgICAgICAgICsgT3ZlcnZpZXcgb2YgTWVudXMKKyAgICAgICAgICArIFNlbGVjdGluZyBpdGVtcworICAgICAgICAgICsgTWVudSBEaXNwbGF5CisgICAgICAgICAgKyBNZW51IFdpbmRvd3MKKyAgICAgICAgICArIFByb2Nlc3NpbmcgTWVudSBJbnB1dAorICAgICAgICAgICsgTWlzY2VsbGFuZW91cyBPdGhlciBGZWF0dXJlcworICAgICAqIFRoZSBGb3JtcyBMaWJyYXJ5CisgICAgICAgICAgKyBDb21waWxpbmcgd2l0aCB0aGUgZm9ybXMgTGlicmFyeQorICAgICAgICAgICsgT3ZlcnZpZXcgb2YgRm9ybXMKKyAgICAgICAgICArIENyZWF0aW5nIGFuZCBGcmVlaW5nIEZpZWxkcyBhbmQgRm9ybXMKKyAgICAgICAgICArIEZldGNoaW5nIGFuZCBDaGFuZ2luZyBGaWVsZCBBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICBvIEZldGNoaW5nIFNpemUgYW5kIExvY2F0aW9uIERhdGEKKyAgICAgICAgICAgICAgIG8gQ2hhbmdpbmcgdGhlIEZpZWxkIExvY2F0aW9uCisgICAgICAgICAgICAgICBvIFRoZSBKdXN0aWZpY2F0aW9uIEF0dHJpYnV0ZQorICAgICAgICAgICAgICAgbyBGaWVsZCBEaXNwbGF5IEF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgIG8gRmllbGQgT3B0aW9uIEJpdHMKKyAgICAgICAgICAgICAgIG8gRmllbGQgU3RhdHVzCisgICAgICAgICAgICAgICBvIEZpZWxkIFVzZXIgUG9pbnRlcgorICAgICAgICAgICsgVmFyaWFibGUtU2l6ZWQgRmllbGRzCisgICAgICAgICAgKyBGaWVsZCBWYWxpZGF0aW9uCisgICAgICAgICAgICAgICBvIFRZUEVfQUxQSEEKKyAgICAgICAgICAgICAgIG8gVFlQRV9BTE5VTQorICAgICAgICAgICAgICAgbyBUWVBFX0VOVU0KKyAgICAgICAgICAgICAgIG8gVFlQRV9JTlRFR0VSCisgICAgICAgICAgICAgICBvIFRZUEVfTlVNRVJJQworICAgICAgICAgICAgICAgbyBUWVBFX1JFR0VYUAorICAgICAgICAgICsgRGlyZWN0IEZpZWxkIEJ1ZmZlciBNYW5pcHVsYXRpb24KKyAgICAgICAgICArIEF0dHJpYnV0ZXMgb2YgRm9ybXMKKyAgICAgICAgICArIENvbnRyb2wgb2YgRm9ybSBEaXNwbGF5CisgICAgICAgICAgKyBJbnB1dCBQcm9jZXNzaW5nIGluIHRoZSBGb3JtcyBEcml2ZXIKKyAgICAgICAgICAgICAgIG8gUGFnZSBOYXZpZ2F0aW9uIFJlcXVlc3RzCisgICAgICAgICAgICAgICBvIEludGVyLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHMKKyAgICAgICAgICAgICAgIG8gSW50cmEtRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0cworICAgICAgICAgICAgICAgbyBTY3JvbGxpbmcgUmVxdWVzdHMKKyAgICAgICAgICAgICAgIG8gRmllbGQgRWRpdGluZyBSZXF1ZXN0cworICAgICAgICAgICAgICAgbyBPcmRlciBSZXF1ZXN0cworICAgICAgICAgICAgICAgbyBBcHBsaWNhdGlvbiBDb21tYW5kcworICAgICAgICAgICsgRmllbGQgQ2hhbmdlIEhvb2tzCisgICAgICAgICAgKyBGaWVsZCBDaGFuZ2UgQ29tbWFuZHMKKyAgICAgICAgICArIEZvcm0gT3B0aW9ucworICAgICAgICAgICsgQ3VzdG9tIFZhbGlkYXRpb24gVHlwZXMKKyAgICAgICAgICAgICAgIG8gVW5pb24gVHlwZXMKKyAgICAgICAgICAgICAgIG8gTmV3IEZpZWxkIFR5cGVzCisgICAgICAgICAgICAgICBvIFZhbGlkYXRpb24gRnVuY3Rpb24gQXJndW1lbnRzCisgICAgICAgICAgICAgICBvIE9yZGVyIEZ1bmN0aW9ucyBGb3IgQ3VzdG9tIFR5cGVzCisgICAgICAgICAgICAgICBvIEF2b2lkaW5nIFByb2JsZW1zCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludHJvZHVjdGlvbgorCisgICBUaGlzIGRvY3VtZW50IGlzIGFuIGludHJvZHVjdGlvbiB0byBwcm9ncmFtbWluZyB3aXRoIGN1cnNlcy4gSXQgaXMgbm90CisgICBhbiAgIGV4aGF1c3RpdmUgIHJlZmVyZW5jZSAgZm9yICB0aGUgIGN1cnNlcyAgQXBwbGljYXRpb24gIFByb2dyYW1taW5nCisgICBJbnRlcmZhY2UgIChBUEkpOyAgdGhhdCAgcm9sZSAgaXMgIGZpbGxlZCAgYnkgdGhlIGN1cnNlcyBtYW51YWwgcGFnZXMuCisgICBSYXRoZXIsICBpdCAgaXMgIGludGVuZGVkICB0byAgaGVscCAgQyBwcm9ncmFtbWVycyBlYXNlIGludG8gdXNpbmcgdGhlCisgICBwYWNrYWdlLgorCisgICBUaGlzICAgZG9jdW1lbnQgIGlzICBhaW1lZCAgYXQgIEMgIGFwcGxpY2F0aW9ucyAgcHJvZ3JhbW1lcnMgIG5vdCAgeWV0CisgICBzcGVjaWZpY2FsbHkgIGZhbWlsaWFyIHdpdGggbmN1cnNlcy4gSWYgeW91IGFyZSBhbHJlYWR5IGFuIGV4cGVyaWVuY2VkCisgICBjdXJzZXMgIHByb2dyYW1tZXIsIHlvdSBzaG91bGQgbmV2ZXJ0aGVsZXNzIHJlYWQgdGhlIHNlY3Rpb25zIG9uIE1vdXNlCisgICBJbnRlcmZhY2luZywgIERlYnVnZ2luZywgQ29tcGF0aWJpbGl0eSB3aXRoIE9sZGVyIFZlcnNpb25zLCBhbmQgSGludHMsCisgICBUaXBzLCAgYW5kICBUcmlja3MuICBUaGVzZSAgd2lsbCAgYnJpbmcgeW91IHVwIHRvIHNwZWVkIG9uIHRoZSBzcGVjaWFsCisgICBmZWF0dXJlcyAgYW5kICBxdWlya3Mgb2YgdGhlIG5jdXJzZXMgaW1wbGVtZW50YXRpb24uIElmIHlvdSBhcmUgbm90IHNvCisgICBleHBlcmllbmNlZCwga2VlcCByZWFkaW5nLgorCisgICBUaGUgIGN1cnNlcyAgcGFja2FnZSAgaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnkgZm9yIHRlcm1pbmFsLWluZGVwZW5kZW50CisgICBzY3JlZW4tcGFpbnRpbmcgIGFuZCAgaW5wdXQtZXZlbnQgaGFuZGxpbmcgd2hpY2ggcHJlc2VudHMgYSBoaWdoIGxldmVsCisgICBzY3JlZW4gIG1vZGVsICB0byAgdGhlIHByb2dyYW1tZXIsIGhpZGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRlcm1pbmFsCisgICB0eXBlcyAgYW5kIGRvaW5nIGF1dG9tYXRpYyBvcHRpbWl6YXRpb24gb2Ygb3V0cHV0IHRvIGNoYW5nZSBvbmUgc2NyZWVuCisgICBmdWxsICBvZiAgdGV4dCBpbnRvIGFub3RoZXIuIEN1cnNlcyB1c2VzIHRlcm1pbmZvLCB3aGljaCBpcyBhIGRhdGFiYXNlCisgICBmb3JtYXQgIHRoYXQgIGNhbiAgZGVzY3JpYmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aG91c2FuZHMgb2YgZGlmZmVyZW50CisgICB0ZXJtaW5hbHMuCisKKyAgIFRoZSAgY3Vyc2VzICBBUEkgIG1heSAgc2VlbSAgc29tZXRoaW5nIG9mIGFuIGFyY2hhaXNtIG9uIFVOSVggZGVza3RvcHMKKyAgIGluY3JlYXNpbmdseSAgZG9taW5hdGVkICBieSAgWCwgIE1vdGlmLCBhbmQgVGNsL1RrLiBOZXZlcnRoZWxlc3MsIFVOSVgKKyAgIHN0aWxsICBzdXBwb3J0cyAgdHR5IGxpbmVzIGFuZCBYIHN1cHBvcnRzIHh0ZXJtKDEpOyB0aGUgY3Vyc2VzIEFQSSBoYXMKKyAgIHRoZSBhZHZhbnRhZ2Ugb2YgKGEpIGJhY2stcG9ydGFiaWxpdHkgdG8gY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzLCBhbmQKKyAgIChiKSAgc2ltcGxpY2l0eS4gIEZvciAgYW4gYXBwbGljYXRpb24gdGhhdCBkb2VzIG5vdCByZXF1aXJlIGJpdC1tYXBwZWQKKyAgIGdyYXBoaWNzICBhbmQgbXVsdGlwbGUgZm9udHMsIGFuIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBjdXJzZXMKKyAgIHdpbGwgIHR5cGljYWxseSAgYmUgIGEgIGdyZWF0IGRlYWwgc2ltcGxlciBhbmQgbGVzcyBleHBlbnNpdmUgdGhhbiBvbmUKKyAgIHVzaW5nIGFuIFggdG9vbGtpdC4KKworQSBCcmllZiBIaXN0b3J5IG9mIEN1cnNlcworCisgICBIaXN0b3JpY2FsbHksIHRoZSBmaXJzdCBhbmNlc3RvciBvZiBjdXJzZXMgd2FzIHRoZSByb3V0aW5lcyB3cml0dGVuIHRvCisgICBwcm92aWRlICAgc2NyZWVuLWhhbmRsaW5nICAgZm9yICAgdGhlICAgZ2FtZSAgcm9ndWU7ICB0aGVzZSAgdXNlZCAgdGhlCisgICBhbHJlYWR5LWV4aXN0aW5nICB0ZXJtY2FwICBkYXRhYmFzZSAgZmFjaWxpdHkgIGZvciBkZXNjcmliaW5nIHRlcm1pbmFsCisgICBjYXBhYmlsaXRpZXMuIFRoZXNlIHJvdXRpbmVzIHdlcmUgYWJzdHJhY3RlZCBpbnRvIGEgZG9jdW1lbnRlZCBsaWJyYXJ5CisgICBhbmQgZmlyc3QgcmVsZWFzZWQgd2l0aCB0aGUgZWFybHkgQlNEIFVOSVggdmVyc2lvbnMuCisKKyAgIFN5c3RlbSAgSUlJIFVOSVggZnJvbSBCZWxsIExhYnMgZmVhdHVyZWQgYSByZXdyaXR0ZW4gYW5kIG11Y2gtaW1wcm92ZWQKKyAgIGN1cnNlcyAgbGlicmFyeS4gIEl0IGludHJvZHVjZWQgdGhlIHRlcm1pbmZvIGZvcm1hdC4gVGVybWluZm8gaXMgYmFzZWQKKyAgIG9uICBCZXJrZWxleSdzIHRlcm1jYXAgZGF0YWJhc2UsIGJ1dCBjb250YWlucyBhIG51bWJlciBvZiBpbXByb3ZlbWVudHMKKyAgIGFuZCAgZXh0ZW5zaW9ucy4gIFBhcmFtZXRlcml6ZWQgIGNhcGFiaWxpdGllcyBzdHJpbmdzIHdlcmUgaW50cm9kdWNlZCwKKyAgIG1ha2luZyAgaXQgIHBvc3NpYmxlIHRvIGRlc2NyaWJlIG11bHRpcGxlIHZpZGVvIGF0dHJpYnV0ZXMsIGFuZCBjb2xvcnMKKyAgIGFuZCAgdG8gIGhhbmRsZSBmYXIgbW9yZSB1bnVzdWFsIHRlcm1pbmFscyB0aGFuIHBvc3NpYmxlIHdpdGggdGVybWNhcC4KKyAgIEluICB0aGUgIGxhdGVyICBBVCZUICBTeXN0ZW0gIFYgIHJlbGVhc2VzLCAgY3Vyc2VzIGV2b2x2ZWQgdG8gdXNlIG1vcmUKKyAgIGZhY2lsaXRpZXMgYW5kIG9mZmVyIG1vcmUgY2FwYWJpbGl0aWVzLCBnb2luZyBmYXIgYmV5b25kIEJTRCBjdXJzZXMgaW4KKyAgIHBvd2VyIGFuZCBmbGV4aWJpbGl0eS4KKworU2NvcGUgb2YgVGhpcyBEb2N1bWVudAorCisgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBuY3Vyc2VzLCBhIGZyZWUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFN5c3RlbSBWCisgICBjdXJzZXMgIEFQSSAgd2l0aCAgc29tZSAgY2xlYXJseSAgbWFya2VkICBleHRlbnNpb25zLiAgSXQgaW5jbHVkZXMgdGhlCisgICBmb2xsb3dpbmcgU3lzdGVtIFYgY3Vyc2VzIGZlYXR1cmVzOgorICAgICAqIFN1cHBvcnQgIGZvciAgbXVsdGlwbGUgIHNjcmVlbiAgaGlnaGxpZ2h0cyAgKEJTRCBjdXJzZXMgY291bGQgb25seQorICAgICAgIGhhbmRsZSBvbmUgYHN0YW5kb3V0JyBoaWdobGlnaHQsIHVzdWFsbHkgcmV2ZXJzZS12aWRlbykuCisgICAgICogU3VwcG9ydCBmb3IgbGluZS0gYW5kIGJveC1kcmF3aW5nIHVzaW5nIGZvcm1zIGNoYXJhY3RlcnMuCisgICAgICogUmVjb2duaXRpb24gb2YgZnVuY3Rpb24ga2V5cyBvbiBpbnB1dC4KKyAgICAgKiBDb2xvciBzdXBwb3J0LgorICAgICAqIFN1cHBvcnQgIGZvciBwYWRzICh3aW5kb3dzIG9mIGxhcmdlciB0aGFuIHNjcmVlbiBzaXplIG9uIHdoaWNoIHRoZQorICAgICAgIHNjcmVlbiBvciBhIHN1YndpbmRvdyBkZWZpbmVzIGEgdmlld3BvcnQpLgorCisgICBBbHNvLCAgdGhpcyAgcGFja2FnZSAgbWFrZXMgIHVzZSAgb2YgIHRoZSAgaW5zZXJ0ICBhbmQgZGVsZXRlIGxpbmUgYW5kCisgICBjaGFyYWN0ZXIgIGZlYXR1cmVzICBvZiAgdGVybWluYWxzICBzbyBlcXVpcHBlZCwgYW5kIGRldGVybWluZXMgaG93IHRvCisgICBvcHRpbWFsbHkgIHVzZSAgdGhlc2UgIGZlYXR1cmVzICB3aXRoICBubyBoZWxwIGZyb20gdGhlIHByb2dyYW1tZXIuIEl0CisgICBhbGxvd3MgIGFyYml0cmFyeSAgY29tYmluYXRpb25zICBvZiAgdmlkZW8gYXR0cmlidXRlcyB0byBiZSBkaXNwbGF5ZWQsCisgICBldmVuICBvbiAgdGVybWluYWxzIHRoYXQgbGVhdmUgYGBtYWdpYyBjb29raWVzJycgb24gdGhlIHNjcmVlbiB0byBtYXJrCisgICBjaGFuZ2VzIGluIGF0dHJpYnV0ZXMuCisKKyAgIFRoZSAgbmN1cnNlcyAgcGFja2FnZSAgY2FuICBhbHNvICBjYXB0dXJlIGFuZCB1c2UgZXZlbnQgcmVwb3J0cyBmcm9tIGEKKyAgIG1vdXNlIGluIHNvbWUgZW52aXJvbm1lbnRzIChub3RhYmx5LCB4dGVybSB1bmRlciB0aGUgWCB3aW5kb3cgc3lzdGVtKS4KKyAgIFRoaXMgZG9jdW1lbnQgaW5jbHVkZXMgdGlwcyBmb3IgdXNpbmcgdGhlIG1vdXNlLgorCisgICBUaGUgIG5jdXJzZXMgIHBhY2thZ2UgIHdhcyAgb3JpZ2luYXRlZCAgYnkgIFBhdmVsIEN1cnRpcy4gVGhlIG9yaWdpbmFsCisgICBtYWludGFpbmVyICBvZiAgdGhpcyAgcGFja2FnZSBpcyBaZXlkIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4uCisgICBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gd3JvdGUgbWFueSBvZiB0aGUgbmV3IGZlYXR1cmVzCisgICBpbiAgdmVyc2lvbnMgIGFmdGVyIDEuOC4xIGFuZCB3cm90ZSBtb3N0IG9mIHRoaXMgaW50cm9kdWN0aW9uLiBKdWVyZ2VuCisgICBQZmVpZmVyICB3cm90ZSAgYWxsICBvZiAgdGhlICBtZW51IGFuZCBmb3JtcyBjb2RlIGFzIHdlbGwgYXMgdGhlIEFkYTk1CisgICBiaW5kaW5nLiAgT25nb2luZyAgd29yayAgaXMgIGJlaW5nIGRvbmUgYnkgVGhvbWFzIERpY2tleSAobWFpbnRhaW5lcikuCisgICBDb250YWN0IHRoZSBjdXJyZW50IG1haW50YWluZXJzIGF0IGJ1Zy1uY3Vyc2VzQGdudS5vcmcuCisKKyAgIFRoaXMgIGRvY3VtZW50ICBhbHNvIGRlc2NyaWJlcyB0aGUgcGFuZWxzIGV4dGVuc2lvbiBsaWJyYXJ5LCBzaW1pbGFybHkKKyAgIG1vZGVsZWQgIG9uICB0aGUgIFNWcjQgIHBhbmVscyAgZmFjaWxpdHkuICBUaGlzICBsaWJyYXJ5IGFsbG93cyB5b3UgdG8KKyAgIGFzc29jaWF0ZSAgYmFja2luZyAgc3RvcmUgIHdpdGggZWFjaCBvZiBhIHN0YWNrIG9yIGRlY2sgb2Ygb3ZlcmxhcHBpbmcKKyAgIHdpbmRvd3MsICBhbmQgIHByb3ZpZGVzICBvcGVyYXRpb25zICBmb3IgIG1vdmluZyB3aW5kb3dzIGFyb3VuZCBpbiB0aGUKKyAgIHN0YWNrIHRoYXQgY2hhbmdlIHRoZWlyIHZpc2liaWxpdHkgaW4gdGhlIG5hdHVyYWwgd2F5IChoYW5kbGluZyB3aW5kb3cKKyAgIG92ZXJsYXBzKS4KKworICAgRmluYWxseSwgIHRoaXMgIGRvY3VtZW50ICBkZXNjcmliZXMgIGluICBkZXRhaWwgIHRoZSAgbWVudXMgIGFuZCBmb3JtcworICAgZXh0ZW5zaW9uICBsaWJyYXJpZXMsICBhbHNvICBjbG9uZWQgIGZyb20gU3lzdGVtIFYsIHdoaWNoIHN1cHBvcnQgZWFzeQorICAgY29uc3RydWN0aW9uIGFuZCBzZXF1ZW5jZXMgb2YgbWVudXMgYW5kIGZpbGwtaW4gZm9ybXMuCisKK1Rlcm1pbm9sb2d5CisKKyAgIEluICB0aGlzICBkb2N1bWVudCwgIHRoZSBmb2xsb3dpbmcgdGVybWlub2xvZ3kgaXMgdXNlZCB3aXRoIHJlYXNvbmFibGUKKyAgIGNvbnNpc3RlbmN5OgorCisgICB3aW5kb3cKKyAgICAgICAgICBBICBkYXRhICBzdHJ1Y3R1cmUgIGRlc2NyaWJpbmcgIGEgIHN1Yi1yZWN0YW5nbGUgIG9mIHRoZSBzY3JlZW4KKyAgICAgICAgICAocG9zc2libHkgIHRoZSAgZW50aXJlICBzY3JlZW4pLiAgWW91ICBjYW4gd3JpdGUgdG8gYSB3aW5kb3cgYXMKKyAgICAgICAgICB0aG91Z2ggIGl0ICB3ZXJlIGEgbWluaWF0dXJlIHNjcmVlbiwgc2Nyb2xsaW5nIGluZGVwZW5kZW50bHkgb2YKKyAgICAgICAgICBvdGhlciB3aW5kb3dzIG9uIHRoZSBwaHlzaWNhbCBzY3JlZW4uCisKKyAgIHNjcmVlbnMKKyAgICAgICAgICBBICBzdWJzZXQgb2Ygd2luZG93cyB3aGljaCBhcmUgYXMgbGFyZ2UgYXMgdGhlIHRlcm1pbmFsIHNjcmVlbiwKKyAgICAgICAgICBpLmUuLCAgdGhleSAgc3RhcnQgIGF0IHRoZSB1cHBlciBsZWZ0IGhhbmQgY29ybmVyIGFuZCBlbmNvbXBhc3MKKyAgICAgICAgICB0aGUgICBsb3dlciAgcmlnaHQgIGhhbmQgIGNvcm5lci4gIE9uZSAgb2YgIHRoZXNlLCAgc3Rkc2NyLCAgaXMKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIGZvciB0aGUgcHJvZ3JhbW1lci4KKworICAgdGVybWluYWwgc2NyZWVuCisgICAgICAgICAgVGhlIHBhY2thZ2UncyBpZGVhIG9mIHdoYXQgdGhlIHRlcm1pbmFsIGRpc3BsYXkgY3VycmVudGx5IGxvb2tzCisgICAgICAgICAgbGlrZSwgaS5lLiwgd2hhdCB0aGUgdXNlciBzZWVzIG5vdy4gVGhpcyBpcyBhIHNwZWNpYWwgc2NyZWVuLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ3Vyc2VzIExpYnJhcnkKKworQW4gT3ZlcnZpZXcgb2YgQ3Vyc2VzCisKKyAgQ29tcGlsaW5nIFByb2dyYW1zIHVzaW5nIEN1cnNlcworCisgICBJbiBvcmRlciB0byB1c2UgdGhlIGxpYnJhcnksIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIGNlcnRhaW4gdHlwZXMgYW5kCisgICB2YXJpYWJsZXMgZGVmaW5lZC4gVGhlcmVmb3JlLCB0aGUgcHJvZ3JhbW1lciBtdXN0IGhhdmUgYSBsaW5lOgorICAgICAgICAgICNpbmNsdWRlIDxjdXJzZXMuaD4KKworICAgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSBzb3VyY2UuIFRoZSBzY3JlZW4gcGFja2FnZSB1c2VzIHRoZSBTdGFuZGFyZAorICAgSS9PICAgbGlicmFyeSwgIHNvICA8Y3Vyc2VzLmg+ICBpbmNsdWRlcyAgPHN0ZGlvLmg+LiAgPGN1cnNlcy5oPiAgYWxzbworICAgaW5jbHVkZXMgIDx0ZXJtaW9zLmg+LCAgPHRlcm1pby5oPiwgIG9yICA8c2d0dHkuaD4gIGRlcGVuZGluZyAgb24geW91cgorICAgc3lzdGVtLiAgSXQgaXMgcmVkdW5kYW50IChidXQgaGFybWxlc3MpIGZvciB0aGUgcHJvZ3JhbW1lciB0byBkbyB0aGVzZQorICAgaW5jbHVkZXMsICB0b28uICBJbiAgbGlua2luZyB3aXRoIGN1cnNlcyB5b3UgbmVlZCB0byBoYXZlIC1sbmN1cnNlcyBpbgorICAgeW91ciAgTERGTEFHUyAgb3IgIG9uIHRoZSBjb21tYW5kIGxpbmUuIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGFueSBvdGhlcgorICAgbGlicmFyaWVzLgorCisgIFVwZGF0aW5nIHRoZSBTY3JlZW4KKworICAgSW4gIG9yZGVyICB0byAgdXBkYXRlICB0aGUgIHNjcmVlbiAgb3B0aW1hbGx5LCBpdCBpcyBuZWNlc3NhcnkgZm9yIHRoZQorICAgcm91dGluZXMgIHRvICBrbm93ICB3aGF0ICB0aGUgc2NyZWVuIGN1cnJlbnRseSBsb29rcyBsaWtlIGFuZCB3aGF0IHRoZQorICAgcHJvZ3JhbW1lciAgd2FudHMgIGl0IHRvIGxvb2sgbGlrZSBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlLCBhIGRhdGEgdHlwZQorICAgKHN0cnVjdHVyZSkgIG5hbWVkIFdJTkRPVyBpcyBkZWZpbmVkIHdoaWNoIGRlc2NyaWJlcyBhIHdpbmRvdyBpbWFnZSB0bworICAgdGhlICByb3V0aW5lcywgIGluY2x1ZGluZyBpdHMgc3RhcnRpbmcgcG9zaXRpb24gb24gdGhlIHNjcmVlbiAodGhlICh5LAorICAgeCkgIGNvb3JkaW5hdGVzICBvZiAgdGhlICB1cHBlciBsZWZ0IGhhbmQgY29ybmVyKSBhbmQgaXRzIHNpemUuIE9uZSBvZgorICAgdGhlc2UgIChjYWxsZWQgIGN1cnNjciwgIGZvciBjdXJyZW50IHNjcmVlbikgaXMgYSBzY3JlZW4gaW1hZ2Ugb2Ygd2hhdAorICAgdGhlICB0ZXJtaW5hbCBjdXJyZW50bHkgbG9va3MgbGlrZS4gQW5vdGhlciBzY3JlZW4gKGNhbGxlZCBzdGRzY3IsIGZvcgorICAgc3RhbmRhcmQgc2NyZWVuKSBpcyBwcm92aWRlZCBieSBkZWZhdWx0IHRvIG1ha2UgY2hhbmdlcyBvbi4KKworICAgQSAgd2luZG93IGlzIGEgcHVyZWx5IGludGVybmFsIHJlcHJlc2VudGF0aW9uLiBJdCBpcyB1c2VkIHRvIGJ1aWxkIGFuZAorICAgc3RvcmUgIGEgcG90ZW50aWFsIGltYWdlIG9mIGEgcG9ydGlvbiBvZiB0aGUgdGVybWluYWwuIEl0IGRvZXNuJ3QgYmVhcgorICAgYW55ICBuZWNlc3NhcnkgcmVsYXRpb24gdG8gd2hhdCBpcyByZWFsbHkgb24gdGhlIHRlcm1pbmFsIHNjcmVlbjsgaXQncworICAgbW9yZSBsaWtlIGEgc2NyYXRjaHBhZCBvciB3cml0ZSBidWZmZXIuCisKKyAgIFRvICBtYWtlICB0aGUgIHNlY3Rpb24gIG9mICBwaHlzaWNhbCAgc2NyZWVuIGNvcnJlc3BvbmRpbmcgdG8gYSB3aW5kb3cKKyAgIHJlZmxlY3QgIHRoZSAgY29udGVudHMgIG9mIHRoZSB3aW5kb3cgc3RydWN0dXJlLCB0aGUgcm91dGluZSByZWZyZXNoKCkKKyAgIChvciB3cmVmcmVzaCgpIGlmIHRoZSB3aW5kb3cgaXMgbm90IHN0ZHNjcikgaXMgY2FsbGVkLgorCisgICBBICBnaXZlbiBwaHlzaWNhbCBzY3JlZW4gc2VjdGlvbiBtYXkgYmUgd2l0aGluIHRoZSBzY29wZSBvZiBhbnkgbnVtYmVyCisgICBvZiAgb3ZlcmxhcHBpbmcgIHdpbmRvd3MuICBBbHNvLCBjaGFuZ2VzIGNhbiBiZSBtYWRlIHRvIHdpbmRvd3MgaW4gYW55CisgICBvcmRlciwgIHdpdGhvdXQgIHJlZ2FyZCAgdG8gIG1vdGlvbiAgZWZmaWNpZW5jeS4gIFRoZW4sICBhdCAgd2lsbCwgdGhlCisgICBwcm9ncmFtbWVyIGNhbiBlZmZlY3RpdmVseSBzYXkgYGBtYWtlIGl0IGxvb2sgbGlrZSB0aGlzLCcnIGFuZCBsZXQgdGhlCisgICBwYWNrYWdlIGltcGxlbWVudGF0aW9uIGRldGVybWluZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHJlcGFpbnQgdGhlCisgICBzY3JlZW4uCisKKyAgU3RhbmRhcmQgV2luZG93cyBhbmQgRnVuY3Rpb24gTmFtaW5nIENvbnZlbnRpb25zCisKKyAgIEFzICBoaW50ZWQgIGFib3ZlLCAgdGhlICByb3V0aW5lcyBjYW4gdXNlIHNldmVyYWwgd2luZG93cywgYnV0IHR3byBhcmUKKyAgIGF1dG9tYXRpY2FsbHkgZ2l2ZW46IGN1cnNjciwgd2hpY2gga25vd3Mgd2hhdCB0aGUgdGVybWluYWwgbG9va3MgbGlrZSwKKyAgIGFuZCAgc3Rkc2NyLCAgd2hpY2ggIGlzIHdoYXQgdGhlIHByb2dyYW1tZXIgd2FudHMgdGhlIHRlcm1pbmFsIHRvIGxvb2sKKyAgIGxpa2UgIG5leHQuICBUaGUgIHVzZXIgIHNob3VsZCAgbmV2ZXIgYWN0dWFsbHkgYWNjZXNzIGN1cnNjciBkaXJlY3RseS4KKyAgIENoYW5nZXMgIHNob3VsZCAgYmUgIG1hZGUgIHRvICB0aHJvdWdoICB0aGUgIEFQSSwgYW5kIHRoZW4gdGhlIHJvdXRpbmUKKyAgIHJlZnJlc2goKSAob3Igd3JlZnJlc2goKSkgY2FsbGVkLgorCisgICBNYW55ICBmdW5jdGlvbnMgIGFyZSAgZGVmaW5lZCAgdG8gIHVzZSBzdGRzY3IgYXMgYSBkZWZhdWx0IHNjcmVlbi4gRm9yCisgICBleGFtcGxlLCAgdG8gIGFkZCAgYSAgY2hhcmFjdGVyICB0byBzdGRzY3IsIG9uZSBjYWxscyBhZGRjaCgpIHdpdGggdGhlCisgICBkZXNpcmVkIGNoYXJhY3RlciBhcyBhcmd1bWVudC4gVG8gd3JpdGUgdG8gYSBkaWZmZXJlbnQgd2luZG93LiB1c2UgdGhlCisgICByb3V0aW5lICB3YWRkY2goKSAgKGZvciAgYHcnaW5kb3ctc3BlY2lmaWMgIGFkZGNoKCkpIGlzIHByb3ZpZGVkLiBUaGlzCisgICBjb252ZW50aW9uIG9mIHByZXBlbmRpbmcgZnVuY3Rpb24gbmFtZXMgd2l0aCBhIGB3JyB3aGVuIHRoZXkgYXJlIHRvIGJlCisgICBhcHBsaWVkICB0byBzcGVjaWZpYyB3aW5kb3dzIGlzIGNvbnNpc3RlbnQuIFRoZSBvbmx5IHJvdXRpbmVzIHdoaWNoIGRvCisgICBub3QgZm9sbG93IGl0IGFyZSB0aG9zZSBmb3Igd2hpY2ggYSB3aW5kb3cgbXVzdCBhbHdheXMgYmUgc3BlY2lmaWVkLgorCisgICBJbiAgb3JkZXIgIHRvICBtb3ZlICB0aGUgIGN1cnJlbnQgKHksIHgpIGNvb3JkaW5hdGVzIGZyb20gb25lIHBvaW50IHRvCisgICBhbm90aGVyLCAgdGhlIHJvdXRpbmVzIG1vdmUoKSBhbmQgd21vdmUoKSBhcmUgcHJvdmlkZWQuIEhvd2V2ZXIsIGl0IGlzCisgICBvZnRlbiAgZGVzaXJhYmxlIHRvIGZpcnN0IG1vdmUgYW5kIHRoZW4gcGVyZm9ybSBzb21lIEkvTyBvcGVyYXRpb24uIEluCisgICBvcmRlciAgdG8gIGF2b2lkICBjbHVtc2luZXNzLCBtb3N0IEkvTyByb3V0aW5lcyBjYW4gYmUgcHJlY2VkZWQgYnkgdGhlCisgICBwcmVmaXggICdtdicgIGFuZCAgdGhlICBkZXNpcmVkICAoeSwgIHgpICBjb29yZGluYXRlcyBwcmVwZW5kZWQgdG8gdGhlCisgICBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgdGhlIGNhbGxzCisgICAgICAgICAgbW92ZSh5LCB4KTsKKyAgICAgICAgICBhZGRjaChjaCk7CisKKyAgIGNhbiBiZSByZXBsYWNlZCBieQorICAgICAgICAgIG12YWRkY2goeSwgeCwgY2gpOworCisgICBhbmQKKyAgICAgICAgICB3bW92ZSh3aW4sIHksIHgpOworICAgICAgICAgIHdhZGRjaCh3aW4sIGNoKTsKKworICAgY2FuIGJlIHJlcGxhY2VkIGJ5CisgICAgICAgICAgbXZ3YWRkY2god2luLCB5LCB4LCBjaCk7CisKKyAgIE5vdGUgIHRoYXQgdGhlIHdpbmRvdyBkZXNjcmlwdGlvbiBwb2ludGVyICh3aW4pIGNvbWVzIGJlZm9yZSB0aGUgYWRkZWQKKyAgICh5LCAgeCkgIGNvb3JkaW5hdGVzLiAgSWYgIGEgZnVuY3Rpb24gcmVxdWlyZXMgYSB3aW5kb3cgcG9pbnRlciwgaXQgaXMKKyAgIGFsd2F5cyB0aGUgZmlyc3QgcGFyYW1ldGVyIHBhc3NlZC4KKworICBWYXJpYWJsZXMKKworICAgVGhlICBjdXJzZXMgIGxpYnJhcnkgIHNldHMgIHNvbWUgIHZhcmlhYmxlcyAgZGVzY3JpYmluZyAgdGhlICB0ZXJtaW5hbAorICAgY2FwYWJpbGl0aWVzLgorICAgICAgdHlwZSAgIG5hbWUgICAgICBkZXNjcmlwdGlvbgorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBpbnQgICAgTElORVMgICAgIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgdGVybWluYWwKKyAgICAgIGludCAgICBDT0xTICAgICAgbnVtYmVyIG9mIGNvbHVtbnMgb24gdGhlIHRlcm1pbmFsCisKKyAgIFRoZSAgY3Vyc2VzLmggIGFsc28gIGludHJvZHVjZXMgIHNvbWUgICNkZWZpbmUgIGNvbnN0YW50cyBhbmQgdHlwZXMgb2YKKyAgIGdlbmVyYWwgdXNlZnVsbmVzczoKKworICAgYm9vbAorICAgICAgICAgIGJvb2xlYW4gdHlwZSwgYWN0dWFsbHkgYSBgY2hhcicgKGUuZy4sIGJvb2wgZG9uZWl0OykKKworICAgVFJVRQorICAgICAgICAgIGJvb2xlYW4gYHRydWUnIGZsYWcgKDEpLgorCisgICBGQUxTRQorICAgICAgICAgIGJvb2xlYW4gYGZhbHNlJyBmbGFnICgwKS4KKworICAgRVJSCisgICAgICAgICAgZXJyb3IgZmxhZyByZXR1cm5lZCBieSByb3V0aW5lcyBvbiBhIGZhaWx1cmUgKC0xKS4KKworICAgT0sKKyAgICAgICAgICBlcnJvciBmbGFnIHJldHVybmVkIGJ5IHJvdXRpbmVzIHdoZW4gdGhpbmdzIGdvIHJpZ2h0LgorCitVc2luZyB0aGUgTGlicmFyeQorCisgICBOb3cgIHdlICBkZXNjcmliZSAgaG93ICB0byAgYWN0dWFsbHkgdXNlIHRoZSBzY3JlZW4gcGFja2FnZS4gSW4gaXQsIHdlCisgICBhc3N1bWUgIGFsbCAgdXBkYXRpbmcsICByZWFkaW5nLCAgZXRjLiAgaXMgIGFwcGxpZWQgIHRvICBzdGRzY3IuIFRoZXNlCisgICBpbnN0cnVjdGlvbnMgIHdpbGwgIHdvcmsgIG9uICBhbnkgIHdpbmRvdywgIHByb3ZpZGluZyAgeW91ICBjaGFuZ2UgdGhlCisgICBmdW5jdGlvbiBuYW1lcyBhbmQgcGFyYW1ldGVycyBhcyBtZW50aW9uZWQgYWJvdmUuCisKKyAgIEhlcmUgaXMgYSBzYW1wbGUgcHJvZ3JhbSB0byBtb3RpdmF0ZSB0aGUgZGlzY3Vzc2lvbjoKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworc3RhdGljIHZvaWQgZmluaXNoKGludCBzaWcpOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgbnVtID0gMDsKKworICAgIC8qIGluaXRpYWxpemUgeW91ciBub24tY3Vyc2VzIGRhdGEgc3RydWN0dXJlcyBoZXJlICovCisKKyAgICAodm9pZCkgc2lnbmFsKFNJR0lOVCwgZmluaXNoKTsgICAgICAvKiBhcnJhbmdlIGludGVycnVwdHMgdG8gdGVybWluYXRlICovCisKKyAgICAodm9pZCkgaW5pdHNjcigpOyAgICAgIC8qIGluaXRpYWxpemUgdGhlIGN1cnNlcyBsaWJyYXJ5ICovCisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7ICAvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBub25sKCk7ICAgICAgICAgLyogdGVsbCBjdXJzZXMgbm90IHRvIGRvIE5MLT5DUi9OTCBvbiBvdXRwdXQgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7ICAgICAgIC8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgZWNobygpOyAgICAgICAgIC8qIGVjaG8gaW5wdXQgLSBpbiBjb2xvciAqLworCisgICAgaWYgKGhhc19jb2xvcnMoKSkKKyAgICB7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2ltcGxlIGNvbG9yIGFzc2lnbm1lbnQsIG9mdGVuIGFsbCB3ZSBuZWVkLiAgQ29sb3IgcGFpciAwIGNhbm5vdAorICAgICAgICAgKiBiZSByZWRlZmluZWQuICBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgdGhlIGNvbG9yCisgICAgICAgICAqIHBhaXIgYXMgZm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLCB0aG91Z2ggb2YgY291cnNlIHRoYXQgaXMgbm90CisgICAgICAgICAqIG5lY2Vzc2FyeToKKyAgICAgICAgICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsICAgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9HUkVFTiwgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigzLCBDT0xPUl9ZRUxMT1csICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig0LCBDT0xPUl9CTFVFLCAgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig1LCBDT0xPUl9DWUFOLCAgICBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig2LCBDT0xPUl9NQUdFTlRBLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig3LCBDT0xPUl9XSElURSwgICBDT0xPUl9CTEFDSyk7CisgICAgfQorCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGludCBjID0gZ2V0Y2goKTsgICAgIC8qIHJlZnJlc2gsIGFjY2VwdCBzaW5nbGUga2V5c3Ryb2tlIG9mIGlucHV0ICovCisgICAgICAgIGF0dHJzZXQoQ09MT1JfUEFJUihudW0gJSA4KSk7CisgICAgICAgIG51bSsrOworCisgICAgICAgIC8qIHByb2Nlc3MgdGhlIGNvbW1hbmQga2V5c3Ryb2tlICovCisgICAgfQorCisgICAgZmluaXNoKDApOyAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgKi8KK30KKworc3RhdGljIHZvaWQgZmluaXNoKGludCBzaWcpCit7CisgICAgZW5kd2luKCk7CisKKyAgICAvKiBkbyB5b3VyIG5vbi1jdXJzZXMgd3JhcHVwIGhlcmUgKi8KKworICAgIGV4aXQoMCk7Cit9CisKKyAgU3RhcnRpbmcgdXAKKworICAgSW4gIG9yZGVyICB0byAgdXNlICB0aGUgIHNjcmVlbiAgcGFja2FnZSwgdGhlIHJvdXRpbmVzIG11c3Qga25vdyBhYm91dAorICAgdGVybWluYWwgIGNoYXJhY3RlcmlzdGljcywgYW5kIHRoZSBzcGFjZSBmb3IgY3Vyc2NyIGFuZCBzdGRzY3IgbXVzdCBiZQorICAgYWxsb2NhdGVkLiAgVGhlc2UgIGZ1bmN0aW9uIGluaXRzY3IoKSBkb2VzIGJvdGggdGhlc2UgdGhpbmdzLiBTaW5jZSBpdAorICAgbXVzdCAgYWxsb2NhdGUgIHNwYWNlICBmb3IgIHRoZSAgd2luZG93cywgIGl0IGNhbiBvdmVyZmxvdyBtZW1vcnkgd2hlbgorICAgYXR0ZW1wdGluZyAgdG8gIGRvICBzby4gIE9uIHRoZSByYXJlIG9jY2FzaW9ucyB0aGlzIGhhcHBlbnMsIGluaXRzY3IoKQorICAgd2lsbCAgdGVybWluYXRlICB0aGUgIHByb2dyYW0gIHdpdGggIGFuICBlcnJvciBtZXNzYWdlLiBpbml0c2NyKCkgbXVzdAorICAgYWx3YXlzICBiZSAgY2FsbGVkIGJlZm9yZSBhbnkgb2YgdGhlIHJvdXRpbmVzIHdoaWNoIGFmZmVjdCB3aW5kb3dzIGFyZQorICAgdXNlZC4gIElmICBpdCAgaXMgIG5vdCwgIHRoZSAgcHJvZ3JhbSB3aWxsIGNvcmUgZHVtcCBhcyBzb29uIGFzIGVpdGhlcgorICAgY3Vyc2NyICBvciAgc3Rkc2NyIGFyZSByZWZlcmVuY2VkLiBIb3dldmVyLCBpdCBpcyB1c3VhbGx5IGJlc3QgdG8gd2FpdAorICAgdG8gIGNhbGwgIGl0ICB1bnRpbCAgYWZ0ZXIgIHlvdSAgYXJlIHN1cmUgeW91IHdpbGwgbmVlZCBpdCwgbGlrZSBhZnRlcgorICAgY2hlY2tpbmcgIGZvciAgc3RhcnR1cCAgZXJyb3JzLiBUZXJtaW5hbCBzdGF0dXMgY2hhbmdpbmcgcm91dGluZXMgbGlrZQorICAgbmwoKSBhbmQgY2JyZWFrKCkgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBpbml0c2NyKCkuCisKKyAgIE9uY2UgIHRoZSAgc2NyZWVuIHdpbmRvd3MgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgeW91IGNhbiBzZXQgdGhlbSB1cCBmb3IKKyAgIHlvdXIgIHByb2dyYW0uICBJZiAgeW91ICB3YW50ICB0bywgIHNheSwgYWxsb3cgYSBzY3JlZW4gdG8gc2Nyb2xsLCB1c2UKKyAgIHNjcm9sbG9rKCkuICBJZiB5b3Ugd2FudCB0aGUgY3Vyc29yIHRvIGJlIGxlZnQgaW4gcGxhY2UgYWZ0ZXIgdGhlIGxhc3QKKyAgIGNoYW5nZSwgIHVzZSAgbGVhdmVvaygpLiAgSWYgIHRoaXMgaXNuJ3QgZG9uZSwgcmVmcmVzaCgpIHdpbGwgbW92ZSB0aGUKKyAgIGN1cnNvciB0byB0aGUgd2luZG93J3MgY3VycmVudCAoeSwgeCkgY29vcmRpbmF0ZXMgYWZ0ZXIgdXBkYXRpbmcgaXQuCisKKyAgIFlvdSAgY2FuICBjcmVhdGUgbmV3IHdpbmRvd3Mgb2YgeW91ciBvd24gdXNpbmcgdGhlIGZ1bmN0aW9ucyBuZXd3aW4oKSwKKyAgIGRlcndpbigpLCBhbmQgc3Vid2luKCkuIFRoZSByb3V0aW5lIGRlbHdpbigpIHdpbGwgYWxsb3cgeW91IHRvIGdldCByaWQKKyAgIG9mICBvbGQgd2luZG93cy4gQWxsIHRoZSBvcHRpb25zIGRlc2NyaWJlZCBhYm92ZSBjYW4gYmUgYXBwbGllZCB0byBhbnkKKyAgIHdpbmRvdy4KKworICBPdXRwdXQKKworICAgTm93ICB0aGF0ICB3ZSAgaGF2ZSBzZXQgdGhpbmdzIHVwLCB3ZSB3aWxsIHdhbnQgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZQorICAgdGVybWluYWwuICBUaGUgYmFzaWMgZnVuY3Rpb25zIHVzZWQgdG8gY2hhbmdlIHdoYXQgd2lsbCBnbyBvbiBhIHdpbmRvdworICAgYXJlIGFkZGNoKCkgYW5kIG1vdmUoKS4gYWRkY2goKSBhZGRzIGEgY2hhcmFjdGVyIGF0IHRoZSBjdXJyZW50ICh5LCB4KQorICAgY29vcmRpbmF0ZXMuIG1vdmUoKSBjaGFuZ2VzIHRoZSBjdXJyZW50ICh5LCB4KSBjb29yZGluYXRlcyB0byB3aGF0ZXZlcgorICAgeW91IHdhbnQgdGhlbSB0byBiZS4gSXQgcmV0dXJucyBFUlIgaWYgeW91IHRyeSB0byBtb3ZlIG9mZiB0aGUgd2luZG93LgorICAgQXMgIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBjb21iaW5lIHRoZSB0d28gaW50byBtdmFkZGNoKCkgdG8gZG8gYm90aAorICAgdGhpbmdzIGF0IG9uY2UuCisKKyAgIFRoZSAgb3RoZXIgIG91dHB1dCAgZnVuY3Rpb25zLCBzdWNoIGFzIGFkZHN0cigpIGFuZCBwcmludHcoKSwgYWxsIGNhbGwKKyAgIGFkZGNoKCkgdG8gYWRkIGNoYXJhY3RlcnMgdG8gdGhlIHdpbmRvdy4KKworICAgQWZ0ZXIgIHlvdSAgaGF2ZSAgcHV0IG9uIHRoZSB3aW5kb3cgd2hhdCB5b3Ugd2FudCB0aGVyZSwgd2hlbiB5b3Ugd2FudAorICAgdGhlICBwb3J0aW9uICBvZiB0aGUgdGVybWluYWwgY292ZXJlZCBieSB0aGUgd2luZG93IHRvIGJlIG1hZGUgdG8gbG9vaworICAgbGlrZSAgaXQsICB5b3UgIG11c3QgIGNhbGwgIHJlZnJlc2goKS4gIEluICBvcmRlciAgdG8gb3B0aW1pemUgZmluZGluZworICAgY2hhbmdlcywgIHJlZnJlc2goKSAgYXNzdW1lcyAgdGhhdCAgYW55IHBhcnQgb2YgdGhlIHdpbmRvdyBub3QgY2hhbmdlZAorICAgc2luY2UgIHRoZSAgbGFzdCAgcmVmcmVzaCgpIG9mIHRoYXQgd2luZG93IGhhcyBub3QgYmVlbiBjaGFuZ2VkIG9uIHRoZQorICAgdGVybWluYWwsICBpLmUuLCB0aGF0IHlvdSBoYXZlIG5vdCByZWZyZXNoZWQgYSBwb3J0aW9uIG9mIHRoZSB0ZXJtaW5hbAorICAgd2l0aCAgYW4gIG92ZXJsYXBwaW5nICB3aW5kb3cuICBJZiAgdGhpcyAgaXMgbm90IHRoZSBjYXNlLCB0aGUgcm91dGluZQorICAgdG91Y2h3aW4oKSBpcyBwcm92aWRlZCB0byBtYWtlIGl0IGxvb2sgbGlrZSB0aGUgZW50aXJlIHdpbmRvdyBoYXMgYmVlbgorICAgY2hhbmdlZCwgIHRodXMgIG1ha2luZyAgcmVmcmVzaCgpICBjaGVjayAgdGhlICB3aG9sZSBzdWJzZWN0aW9uIG9mIHRoZQorICAgdGVybWluYWwgZm9yIGNoYW5nZXMuCisKKyAgIElmICB5b3UgIGNhbGwgd3JlZnJlc2goKSB3aXRoIGN1cnNjciBhcyBpdHMgYXJndW1lbnQsIGl0IHdpbGwgbWFrZSB0aGUKKyAgIHNjcmVlbiAgbG9vayAgbGlrZSAgY3Vyc2NyICB0aGlua3MgIGl0ICBsb29rcyBsaWtlLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAgIGltcGxlbWVudGluZyAgYSAgY29tbWFuZCAgd2hpY2ggd291bGQgcmVkcmF3IHRoZSBzY3JlZW4gaW4gY2FzZSBpdCBnZXQKKyAgIG1lc3NlZCB1cC4KKworICBJbnB1dAorCisgICBUaGUgIGNvbXBsZW1lbnRhcnkgIGZ1bmN0aW9uICB0byAgYWRkY2goKSBpcyBnZXRjaCgpIHdoaWNoLCBpZiBlY2hvIGlzCisgICBzZXQsIHdpbGwgY2FsbCBhZGRjaCgpIHRvIGVjaG8gdGhlIGNoYXJhY3Rlci4gU2luY2UgdGhlIHNjcmVlbiBwYWNrYWdlCisgICBuZWVkcyAgdG8ga25vdyB3aGF0IGlzIG9uIHRoZSB0ZXJtaW5hbCBhdCBhbGwgdGltZXMsIGlmIGNoYXJhY3RlcnMgYXJlCisgICB0byAgYmUgIGVjaG9lZCwgdGhlIHR0eSBtdXN0IGJlIGluIHJhdyBvciBjYnJlYWsgbW9kZS4gU2luY2UgaW5pdGlhbGx5CisgICB0aGUgIHRlcm1pbmFsICBoYXMgZWNob2luZyBlbmFibGVkIGFuZCBpcyBpbiBvcmRpbmFyeSBgYGNvb2tlZCcnIG1vZGUsCisgICBvbmUgb3IgdGhlIG90aGVyIGhhcyB0byBjaGFuZ2VkIGJlZm9yZSBjYWxsaW5nIGdldGNoKCk7IG90aGVyd2lzZSwgdGhlCisgICBwcm9ncmFtJ3Mgb3V0cHV0IHdpbGwgYmUgdW5wcmVkaWN0YWJsZS4KKworICAgV2hlbiB5b3UgbmVlZCB0byBhY2NlcHQgbGluZS1vcmllbnRlZCBpbnB1dCBpbiBhIHdpbmRvdywgdGhlIGZ1bmN0aW9ucworICAgd2dldHN0cigpIGFuZCBmcmllbmRzIGFyZSBhdmFpbGFibGUuIFRoZXJlIGlzIGV2ZW4gYSB3c2NhbncoKSBmdW5jdGlvbgorICAgdGhhdCAgY2FuICBkbyAgc2NhbmYoKSgzKS1zdHlsZSAgbXVsdGktZmllbGQgIHBhcnNpbmcgb24gd2luZG93IGlucHV0LgorICAgVGhlc2UgIHBzZXVkby1saW5lLW9yaWVudGVkICBmdW5jdGlvbnMgIHR1cm4gIG9uICBlY2hvaW5nICB3aGlsZSAgdGhleQorICAgZXhlY3V0ZS4KKworICAgVGhlICBleGFtcGxlICBjb2RlICBhYm92ZSB1c2VzIHRoZSBjYWxsIGtleXBhZChzdGRzY3IsIFRSVUUpIHRvIGVuYWJsZQorICAgc3VwcG9ydCAgZm9yIGZ1bmN0aW9uLWtleSBtYXBwaW5nLiBXaXRoIHRoaXMgZmVhdHVyZSwgdGhlIGdldGNoKCkgY29kZQorICAgd2F0Y2hlcyAgdGhlICBpbnB1dCAgc3RyZWFtIGZvciBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgY29ycmVzcG9uZCB0bworICAgYXJyb3cgICBhbmQgICBmdW5jdGlvbiAgIGtleXMuICAgVGhlc2UgICBzZXF1ZW5jZXMgICBhcmUgIHJldHVybmVkICBhcworICAgcHNldWRvLWNoYXJhY3RlciB2YWx1ZXMuIFRoZSAjZGVmaW5lIHZhbHVlcyByZXR1cm5lZCBhcmUgbGlzdGVkIGluIHRoZQorICAgY3Vyc2VzLmggVGhlIG1hcHBpbmcgZnJvbSBzZXF1ZW5jZXMgdG8gI2RlZmluZSB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieQorICAga2V5XyBjYXBhYmlsaXRpZXMgaW4gdGhlIHRlcm1pbmFsJ3MgdGVybWluZm8gZW50cnkuCisKKyAgVXNpbmcgRm9ybXMgQ2hhcmFjdGVycworCisgICBUaGUgIGFkZGNoKCkgIGZ1bmN0aW9uIChhbmQgc29tZSBvdGhlcnMsIGluY2x1ZGluZyBib3goKSBhbmQgYm9yZGVyKCkpCisgICBjYW4gYWNjZXB0IHNvbWUgcHNldWRvLWNoYXJhY3RlciBhcmd1bWVudHMgd2hpY2ggYXJlIHNwZWNpYWxseSBkZWZpbmVkCisgICBieSAgbmN1cnNlcy4gIFRoZXNlICBhcmUgI2RlZmluZSB2YWx1ZXMgc2V0IHVwIGluIHRoZSBjdXJzZXMuaCBoZWFkZXI7CisgICBzZWUgdGhlcmUgZm9yIGEgY29tcGxldGUgbGlzdCAobG9vayBmb3IgdGhlIHByZWZpeCBBQ1NfKS4KKworICAgVGhlICBtb3N0ICB1c2VmdWwgb2YgdGhlIEFDUyBkZWZpbmVzIGFyZSB0aGUgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzLgorICAgWW91ICBjYW4gIHVzZSAgdGhlc2UgdG8gZHJhdyBib3hlcyBhbmQgc2ltcGxlIGdyYXBocyBvbiB0aGUgc2NyZWVuLiBJZgorICAgdGhlICB0ZXJtaW5hbCBkb2VzIG5vdCBoYXZlIHN1Y2ggY2hhcmFjdGVycywgY3Vyc2VzLmggd2lsbCBtYXAgdGhlbSB0bworICAgYSByZWNvZ25pemFibGUgKHRob3VnaCB1Z2x5KSBzZXQgb2YgQVNDSUkgZGVmYXVsdHMuCisKKyAgQ2hhcmFjdGVyIEF0dHJpYnV0ZXMgYW5kIENvbG9yCisKKyAgIFRoZSAgbmN1cnNlcyAgcGFja2FnZSAgc3VwcG9ydHMgIHNjcmVlbiBoaWdobGlnaHRzIGluY2x1ZGluZyBzdGFuZG91dCwKKyAgIHJldmVyc2UtdmlkZW8sICB1bmRlcmxpbmUsIGFuZCBibGluay4gSXQgYWxzbyBzdXBwb3J0cyBjb2xvciwgd2hpY2ggaXMKKyAgIHRyZWF0ZWQgYXMgYW5vdGhlciBraW5kIG9mIGhpZ2hsaWdodC4KKworICAgSGlnaGxpZ2h0cyAgIGFyZSAgIGVuY29kZWQsICAgaW50ZXJuYWxseSwgICBhcyAgIGhpZ2ggICBiaXRzICAgb2YgIHRoZQorICAgcHNldWRvLWNoYXJhY3RlciAgdHlwZSAgKGNodHlwZSkgIHRoYXQgIGN1cnNlcy5oIHVzZXMgdG8gcmVwcmVzZW50IHRoZQorICAgY29udGVudHMgb2YgYSBzY3JlZW4gY2VsbC4gU2VlIHRoZSBjdXJzZXMuaCBoZWFkZXIgZmlsZSBmb3IgYSBjb21wbGV0ZQorICAgbGlzdCBvZiBoaWdobGlnaHQgbWFzayB2YWx1ZXMgKGxvb2sgZm9yIHRoZSBwcmVmaXggQV8pLgorCisgICBUaGVyZSAgYXJlIHR3byB3YXlzIHRvIG1ha2UgaGlnaGxpZ2h0cy4gT25lIGlzIHRvIGxvZ2ljYWwtb3IgdGhlIHZhbHVlCisgICBvZiAgdGhlICBoaWdobGlnaHRzIHlvdSB3YW50IGludG8gdGhlIGNoYXJhY3RlciBhcmd1bWVudCBvZiBhbiBhZGRjaCgpCisgICBjYWxsLCBvciBhbnkgb3RoZXIgb3V0cHV0IGNhbGwgdGhhdCB0YWtlcyBhIGNodHlwZSBhcmd1bWVudC4KKworICAgVGhlIG90aGVyIGlzIHRvIHNldCB0aGUgY3VycmVudC1oaWdobGlnaHQgdmFsdWUuIFRoaXMgaXMgbG9naWNhbC1vcidlZAorICAgd2l0aCAgYW55ICBoaWdobGlnaHQgIHlvdSAgc3BlY2lmeSB0aGUgZmlyc3Qgd2F5LiBZb3UgZG8gdGhpcyB3aXRoIHRoZQorICAgZnVuY3Rpb25zIGF0dHJvbigpLCBhdHRyb2ZmKCksIGFuZCBhdHRyc2V0KCk7IHNlZSB0aGUgbWFudWFsIHBhZ2VzIGZvcgorICAgZGV0YWlscy4gIENvbG9yICBpcyAgYSBzcGVjaWFsIGtpbmQgb2YgaGlnaGxpZ2h0LiBUaGUgcGFja2FnZSBhY3R1YWxseQorICAgdGhpbmtzICBpbiAgdGVybXMgIG9mICBjb2xvciAgcGFpcnMsICBjb21iaW5hdGlvbnMgIG9mICBmb3JlZ3JvdW5kIGFuZAorICAgYmFja2dyb3VuZCAgY29sb3JzLiAgVGhlICBzYW1wbGUgY29kZSBhYm92ZSBzZXRzIHVwIGVpZ2h0IGNvbG9yIHBhaXJzLAorICAgYWxsICBvZiB0aGUgZ3VhcmFudGVlZC1hdmFpbGFibGUgY29sb3JzIG9uIGJsYWNrLiBOb3RlIHRoYXQgZWFjaCBjb2xvcgorICAgcGFpciAgaXMsIGluIGVmZmVjdCwgZ2l2ZW4gdGhlIG5hbWUgb2YgaXRzIGZvcmVncm91bmQgY29sb3IuIEFueSBvdGhlcgorICAgcmFuZ2UgIG9mICBlaWdodCAgbm9uLWNvbmZsaWN0aW5nICB2YWx1ZXMgIGNvdWxkIGhhdmUgYmVlbiB1c2VkIGFzIHRoZQorICAgZmlyc3QgYXJndW1lbnRzIG9mIHRoZSBpbml0X3BhaXIoKSB2YWx1ZXMuCisKKyAgIE9uY2UgeW91J3ZlIGRvbmUgYW4gaW5pdF9wYWlyKCkgdGhhdCBjcmVhdGVzIGNvbG9yLXBhaXIgTiwgeW91IGNhbiB1c2UKKyAgIENPTE9SX1BBSVIoTikgIGFzICBhICBoaWdobGlnaHQgIHRoYXQgIGludm9rZXMgIHRoYXQgIHBhcnRpY3VsYXIgY29sb3IKKyAgIGNvbWJpbmF0aW9uLiAgTm90ZSAgdGhhdCAgQ09MT1JfUEFJUihOKSwgIGZvciAgY29uc3RhbnQgTiwgaXMgaXRzZWxmIGEKKyAgIGNvbXBpbGUtdGltZSBjb25zdGFudCBhbmQgY2FuIGJlIHVzZWQgaW4gaW5pdGlhbGl6ZXJzLgorCisgIE1vdXNlIEludGVyZmFjaW5nCisKKyAgIFRoZSBuY3Vyc2VzIGxpYnJhcnkgYWxzbyBwcm92aWRlcyBhIG1vdXNlIGludGVyZmFjZS4KKworICAgICBOT1RFOiAgdGhpcyAgZmFjaWxpdHkgIGlzICBzcGVjaWZpYyAgdG8gIG5jdXJzZXMsIGl0IGlzIG5vdCBwYXJ0IG9mCisgICAgIGVpdGhlciAgdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIG5vciBvZiBTeXN0ZW0gViBSZWxlYXNlIDQsIG5vciBCU0QKKyAgICAgY3Vyc2VzLiAgU3lzdGVtICBWICBSZWxlYXNlICA0ICBjdXJzZXMgIGNvbnRhaW5zICBjb2RlIHdpdGggc2ltaWxhcgorICAgICBpbnRlcmZhY2UgIGRlZmluaXRpb25zLCBob3dldmVyIGl0IGlzIG5vdCBkb2N1bWVudGVkLiBPdGhlciB0aGFuIGJ5CisgICAgIGRpc2Fzc2VtYmxpbmcgIHRoZSBsaWJyYXJ5LCB3ZSBoYXZlIG5vIHdheSB0byBkZXRlcm1pbmUgZXhhY3RseSBob3cKKyAgICAgdGhhdCAgIG1vdXNlICAgY29kZSAgIHdvcmtzLiAgVGh1cywgIHdlICByZWNvbW1lbmQgIHRoYXQgIHlvdSAgd3JhcAorICAgICBtb3VzZS1yZWxhdGVkICAgY29kZSAgIGluICAgYW4gICAjaWZkZWYgIHVzaW5nICB0aGUgIGZlYXR1cmUgIG1hY3JvCisgICAgIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiAgc28gIGl0ICB3aWxsICBub3QgIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgb24KKyAgICAgbm9uLW5jdXJzZXMgc3lzdGVtcy4KKworICAgUHJlc2VudGx5LCBtb3VzZSBldmVudCByZXBvcnRpbmcgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudHM6CisgICAgICogeHRlcm0gYW5kIHNpbWlsYXIgcHJvZ3JhbXMgc3VjaCBhcyByeHZ0LgorICAgICAqIExpbnV4ICBjb25zb2xlLCAgd2hlbiAgY29uZmlndXJlZCB3aXRoIGdwbSgxKSwgQWxlc3NhbmRybyBSdWJpbmkncworICAgICAgIG1vdXNlIHNlcnZlci4KKyAgICAgKiBGcmVlQlNEIHN5c21vdXNlIChjb25zb2xlKQorICAgICAqIE9TLzIgRU1YCisKKyAgIFRoZSAgbW91c2UgIGludGVyZmFjZSAgaXMgIHZlcnkgIHNpbXBsZS4gIFRvICBhY3RpdmF0ZSBpdCwgeW91IHVzZSB0aGUKKyAgIGZ1bmN0aW9uICBtb3VzZW1hc2soKSwgIHBhc3NpbmcgIGl0ICBhcyBmaXJzdCBhcmd1bWVudCBhIGJpdC1tYXNrIHRoYXQKKyAgIHNwZWNpZmllcyAgd2hhdCAga2luZHMgIG9mICBldmVudHMgeW91IHdhbnQgeW91ciBwcm9ncmFtIHRvIGJlIGFibGUgdG8KKyAgIHNlZS4gIEl0ICB3aWxsICByZXR1cm4gIHRoZSAgYml0LW1hc2sgIG9mICBldmVudHMgdGhhdCBhY3R1YWxseSBiZWNvbWUKKyAgIHZpc2libGUsIHdoaWNoIG1heSBkaWZmZXIgZnJvbSB0aGUgYXJndW1lbnQgaWYgdGhlIG1vdXNlIGRldmljZSBpcyBub3QKKyAgIGNhcGFibGUgb2YgcmVwb3J0aW5nIHNvbWUgb2YgdGhlIGV2ZW50IHR5cGVzIHlvdSBzcGVjaWZ5LgorCisgICBPbmNlIHRoZSBtb3VzZSBpcyBhY3RpdmUsIHlvdXIgYXBwbGljYXRpb24ncyBjb21tYW5kIGxvb3Agc2hvdWxkIHdhdGNoCisgICBmb3IgIGEgIHJldHVybiAgdmFsdWUgb2YgS0VZX01PVVNFIGZyb20gd2dldGNoKCkuIFdoZW4geW91IHNlZSB0aGlzLCBhCisgICBtb3VzZSAgZXZlbnQgcmVwb3J0IGhhcyBiZWVuIHF1ZXVlZC4gVG8gcGljayBpdCBvZmYgdGhlIHF1ZXVlLCB1c2UgdGhlCisgICBmdW5jdGlvbiAgZ2V0bW91c2UoKSAgKHlvdSAgbXVzdCAgZG8gIHRoaXMgIGJlZm9yZSAgdGhlIG5leHQgd2dldGNoKCksCisgICBvdGhlcndpc2UgIGFub3RoZXIgIG1vdXNlICBldmVudCAgbWlnaHQgY29tZSBpbiBhbmQgbWFrZSB0aGUgZmlyc3Qgb25lCisgICBpbmFjY2Vzc2libGUpLgorCisgICBFYWNoIGNhbGwgdG8gZ2V0bW91c2UoKSBmaWxscyBhIHN0cnVjdHVyZSAodGhlIGFkZHJlc3Mgb2Ygd2hpY2ggeW91J2xsCisgICBwYXNzICBpdCkgIHdpdGggbW91c2UgZXZlbnQgZGF0YS4gVGhlIGV2ZW50IGRhdGEgaW5jbHVkZXMgemVyby1vcmlnaW4sCisgICBzY3JlZW4tcmVsYXRpdmUgIGNoYXJhY3Rlci1jZWxsICBjb29yZGluYXRlcyAgb2YgdGhlIG1vdXNlIHBvaW50ZXIuIEl0CisgICBhbHNvICBpbmNsdWRlcyAgYW4gIGV2ZW50ICBtYXNrLiAgQml0cyAgaW4gIHRoaXMgIG1hc2sgIHdpbGwgIGJlICBzZXQsCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBldmVudCB0eXBlIGJlaW5nIHJlcG9ydGVkLgorCisgICBUaGUgIG1vdXNlICBzdHJ1Y3R1cmUgIGNvbnRhaW5zICB0d28gIGFkZGl0aW9uYWwgIGZpZWxkcyAgd2hpY2ggbWF5IGJlCisgICBzaWduaWZpY2FudCAgaW4gIHRoZSAgZnV0dXJlICBhcyAgbmN1cnNlcyAgaW50ZXJmYWNlcyAgdG8gbmV3IGtpbmRzIG9mCisgICBwb2ludGluZyAgZGV2aWNlLiAgSW4gYWRkaXRpb24gdG8geCBhbmQgeSBjb29yZGluYXRlcywgdGhlcmUgaXMgYSBzbG90CisgICBmb3IgIGEgIHogY29vcmRpbmF0ZTsgdGhpcyBtaWdodCBiZSB1c2VmdWwgd2l0aCB0b3VjaC1zY3JlZW5zIHRoYXQgY2FuCisgICByZXR1cm4gIGEgIHByZXNzdXJlICBvciAgZHVyYXRpb24gcGFyYW1ldGVyLiBUaGVyZSBpcyBhbHNvIGEgZGV2aWNlIElECisgICBmaWVsZCwgIHdoaWNoICBjb3VsZCAgYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHBvaW50aW5nCisgICBkZXZpY2VzLgorCisgICBUaGUgICBjbGFzcyAgb2YgIHZpc2libGUgIGV2ZW50cyAgbWF5ICBiZSAgY2hhbmdlZCAgYXQgIGFueSAgdGltZSAgdmlhCisgICBtb3VzZW1hc2soKS4gIEV2ZW50cyAgdGhhdCAgY2FuIGJlIHJlcG9ydGVkIGluY2x1ZGUgcHJlc3NlcywgcmVsZWFzZXMsCisgICBzaW5nbGUtLCAgIGRvdWJsZS0gICBhbmQgICB0cmlwbGUtY2xpY2tzICAoeW91ICBjYW4gIHNldCAgdGhlICBtYXhpbXVtCisgICBidXR0b24tZG93biAgdGltZSAgZm9yIGNsaWNrcykuIElmIHlvdSBkb24ndCBtYWtlIGNsaWNrcyB2aXNpYmxlLCB0aGV5CisgICB3aWxsICBiZSAgcmVwb3J0ZWQgIGFzICBwcmVzcy1yZWxlYXNlIHBhaXJzLiBJbiBzb21lIGVudmlyb25tZW50cywgdGhlCisgICBldmVudCAgbWFzayAgbWF5ICBpbmNsdWRlICBiaXRzIHJlcG9ydGluZyB0aGUgc3RhdGUgb2Ygc2hpZnQsIGFsdCwgYW5kCisgICBjdHJsIGtleXMgb24gdGhlIGtleWJvYXJkIGR1cmluZyB0aGUgZXZlbnQuCisKKyAgIEEgIGZ1bmN0aW9uICB0byBjaGVjayB3aGV0aGVyIGEgbW91c2UgZXZlbnQgZmVsbCB3aXRoaW4gYSBnaXZlbiB3aW5kb3cKKyAgIGlzICBhbHNvICBzdXBwbGllZC4gIFlvdSAgY2FuICB1c2UgIHRoaXMgdG8gc2VlIHdoZXRoZXIgYSBnaXZlbiB3aW5kb3cKKyAgIHNob3VsZCBjb25zaWRlciBhIG1vdXNlIGV2ZW50IHJlbGV2YW50IHRvIGl0LgorCisgICBCZWNhdXNlICAgbW91c2UgICBldmVudCAgIHJlcG9ydGluZyAgd2lsbCAgbm90ICBiZSAgYXZhaWxhYmxlICBpbiAgYWxsCisgICBlbnZpcm9ubWVudHMsICBpdCAgd291bGQgIGJlIHVud2lzZSB0byBidWlsZCBuY3Vyc2VzIGFwcGxpY2F0aW9ucyB0aGF0CisgICByZXF1aXJlICB0aGUgIHVzZSAgb2YgIGEgIG1vdXNlLiBSYXRoZXIsIHlvdSBzaG91bGQgdXNlIHRoZSBtb3VzZSBhcyBhCisgICBzaG9ydGN1dCAgZm9yIHBvaW50LWFuZC1zaG9vdCBjb21tYW5kcyB5b3VyIGFwcGxpY2F0aW9uIHdvdWxkIG5vcm1hbGx5CisgICBhY2NlcHQgIGZyb20gIHRoZSAga2V5Ym9hcmQuICBUd28gIG9mICB0aGUgIHRlc3QgIGdhbWVzIGluIHRoZSBuY3Vyc2VzCisgICBkaXN0cmlidXRpb24gIChicyAgYW5kICBrbmlnaHQpIGNvbnRhaW4gY29kZSB0aGF0IGlsbHVzdHJhdGVzIGhvdyB0aGlzCisgICBjYW4gYmUgZG9uZS4KKworICAgU2VlICAgdGhlICAgbWFudWFsICAgcGFnZSAgY3Vyc19tb3VzZSgzWCkgIGZvciAgZnVsbCAgZGV0YWlscyAgb2YgIHRoZQorICAgbW91c2UtaW50ZXJmYWNlIGZ1bmN0aW9ucy4KKworICBGaW5pc2hpbmcgVXAKKworICAgSW4gIG9yZGVyIHRvIGNsZWFuIHVwIGFmdGVyIHRoZSBuY3Vyc2VzIHJvdXRpbmVzLCB0aGUgcm91dGluZSBlbmR3aW4oKQorICAgaXMgIHByb3ZpZGVkLiAgSXQgIHJlc3RvcmVzIHR0eSBtb2RlcyB0byB3aGF0IHRoZXkgd2VyZSB3aGVuIGluaXRzY3IoKQorICAgd2FzICBmaXJzdCBjYWxsZWQsIGFuZCBtb3ZlcyB0aGUgY3Vyc29yIGRvd24gdG8gdGhlIGxvd2VyLWxlZnQgY29ybmVyLgorICAgVGh1cywgIGFueXRpbWUgIGFmdGVyICB0aGUgIGNhbGwgdG8gaW5pdHNjciwgZW5kd2luKCkgc2hvdWxkIGJlIGNhbGxlZAorICAgYmVmb3JlIGV4aXRpbmcuCisKK0Z1bmN0aW9uIERlc2NyaXB0aW9ucworCisgICBXZSAgZGVzY3JpYmUgIHRoZSBkZXRhaWxlZCBiZWhhdmlvciBvZiBzb21lIGltcG9ydGFudCBjdXJzZXMgZnVuY3Rpb25zCisgICBoZXJlLCBhcyBhIHN1cHBsZW1lbnQgdG8gdGhlIG1hbnVhbCBwYWdlIGRlc2NyaXB0aW9ucy4KKworICBJbml0aWFsaXphdGlvbiBhbmQgV3JhcHVwCisKKyAgIGluaXRzY3IoKQorICAgICAgICAgIFRoZSAgZmlyc3QgIGZ1bmN0aW9uICBjYWxsZWQgc2hvdWxkIGFsbW9zdCBhbHdheXMgYmUgaW5pdHNjcigpLgorICAgICAgICAgIFRoaXMgIHdpbGwgIGRldGVybWluZSAgdGhlICB0ZXJtaW5hbCB0eXBlIGFuZCBpbml0aWFsaXplIGN1cnNlcworICAgICAgICAgIGRhdGEgc3RydWN0dXJlcy4gaW5pdHNjcigpIGFsc28gYXJyYW5nZXMgdGhhdCB0aGUgZmlyc3QgY2FsbCB0bworICAgICAgICAgIHJlZnJlc2goKSAgd2lsbCAgY2xlYXIgdGhlIHNjcmVlbi4gSWYgYW4gZXJyb3Igb2NjdXJzIGEgbWVzc2FnZQorICAgICAgICAgIGlzICB3cml0dGVuICB0byBzdGFuZGFyZCBlcnJvciBhbmQgdGhlIHByb2dyYW0gZXhpdHMuIE90aGVyd2lzZQorICAgICAgICAgIGl0ICByZXR1cm5zICBhIHBvaW50ZXIgdG8gc3Rkc2NyLiBBIGZldyBmdW5jdGlvbnMgbWF5IGJlIGNhbGxlZAorICAgICAgICAgIGJlZm9yZSAgaW5pdHNjciAoc2xrX2luaXQoKSwgZmlsdGVyKCksIHJpcG9mZmxpbmUoKSwgdXNlX2VudigpLAorICAgICAgICAgIGFuZCwgaWYgeW91IGFyZSB1c2luZyBtdWx0aXBsZSB0ZXJtaW5hbHMsIG5ld3Rlcm0oKS4pCisKKyAgIGVuZHdpbigpCisgICAgICAgICAgWW91ciAgcHJvZ3JhbSAgc2hvdWxkICBhbHdheXMgIGNhbGwgIGVuZHdpbigpIGJlZm9yZSBleGl0aW5nIG9yCisgICAgICAgICAgc2hlbGxpbmcgIG91dCAgb2YgIHRoZSAgcHJvZ3JhbS4gVGhpcyBmdW5jdGlvbiB3aWxsIHJlc3RvcmUgdHR5CisgICAgICAgICAgbW9kZXMsICBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4sCisgICAgICAgICAgcmVzZXQgIHRoZSAgdGVybWluYWwgIGludG8gIHRoZSBwcm9wZXIgbm9uLXZpc3VhbCBtb2RlLiBDYWxsaW5nCisgICAgICAgICAgcmVmcmVzaCgpICBvciAgZG91cGRhdGUoKSAgYWZ0ZXIgIGEgIHRlbXBvcmFyeSAgZXNjYXBlIGZyb20gdGhlCisgICAgICAgICAgcHJvZ3JhbSB3aWxsIHJlc3RvcmUgdGhlIG5jdXJzZXMgc2NyZWVuIGZyb20gYmVmb3JlIHRoZSBlc2NhcGUuCisKKyAgIG5ld3Rlcm0odHlwZSwgb2ZwLCBpZnApCisgICAgICAgICAgQSAgcHJvZ3JhbSAgd2hpY2ggIG91dHB1dHMgdG8gbW9yZSB0aGFuIG9uZSB0ZXJtaW5hbCBzaG91bGQgdXNlCisgICAgICAgICAgbmV3dGVybSgpIGluc3RlYWQgb2YgaW5pdHNjcigpLiBuZXd0ZXJtKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmNlCisgICAgICAgICAgZm9yIGVhY2ggdGVybWluYWwuIEl0IHJldHVybnMgYSB2YXJpYWJsZSBvZiB0eXBlIFNDUkVFTiAqIHdoaWNoCisgICAgICAgICAgc2hvdWxkICBiZSAgc2F2ZWQgIGFzICBhICByZWZlcmVuY2UgIHRvIHRoYXQgdGVybWluYWwuIChOT1RFOiBhCisgICAgICAgICAgU0NSRUVOICB2YXJpYWJsZSBpcyBub3QgYSBzY3JlZW4gaW4gdGhlIHNlbnNlIHdlIGFyZSBkZXNjcmliaW5nCisgICAgICAgICAgaW4gIHRoaXMgIGludHJvZHVjdGlvbiwgIGJ1dCBhIGNvbGxlY3Rpb24gb2YgcGFyYW1ldGVycyB1c2VkIHRvCisgICAgICAgICAgYXNzaXN0ICBpbiAgb3B0aW1pemluZyB0aGUgZGlzcGxheS4pIFRoZSBhcmd1bWVudHMgYXJlIHRoZSB0eXBlCisgICAgICAgICAgb2YgdGhlIHRlcm1pbmFsIChhIHN0cmluZykgYW5kIEZJTEUgcG9pbnRlcnMgZm9yIHRoZSBvdXRwdXQgYW5kCisgICAgICAgICAgaW5wdXQgIG9mICB0aGUgIHRlcm1pbmFsLiAgSWYgdHlwZSBpcyBOVUxMIHRoZW4gdGhlIGVudmlyb25tZW50CisgICAgICAgICAgdmFyaWFibGUgICRURVJNICBpcyB1c2VkLiBlbmR3aW4oKSBzaG91bGQgY2FsbGVkIG9uY2UgYXQgd3JhcHVwCisgICAgICAgICAgdGltZSBmb3IgZWFjaCB0ZXJtaW5hbCBvcGVuZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKworICAgc2V0X3Rlcm0obmV3KQorICAgICAgICAgIFRoaXMgIGZ1bmN0aW9uICBpcyAgdXNlZCAgdG8gIHN3aXRjaCAgdG8gIGEgIGRpZmZlcmVudCB0ZXJtaW5hbAorICAgICAgICAgIHByZXZpb3VzbHkgIG9wZW5lZCAgYnkgIG5ld3Rlcm0oKS4gVGhlIHNjcmVlbiByZWZlcmVuY2UgZm9yIHRoZQorICAgICAgICAgIG5ldyAgdGVybWluYWwgaXMgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIuIFRoZSBwcmV2aW91cyB0ZXJtaW5hbAorICAgICAgICAgIGlzICByZXR1cm5lZCAgYnkgIHRoZSBmdW5jdGlvbi4gQWxsIG90aGVyIGNhbGxzIGFmZmVjdCBvbmx5IHRoZQorICAgICAgICAgIGN1cnJlbnQgdGVybWluYWwuCisKKyAgIGRlbHNjcmVlbihzcCkKKyAgICAgICAgICBUaGUgIGludmVyc2UgIG9mICBuZXd0ZXJtKCk7ICBkZWFsbG9jYXRlcyAgdGhlICBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBTQ1JFRU4gcmVmZXJlbmNlLgorCisgIENhdXNpbmcgT3V0cHV0IHRvIHRoZSBUZXJtaW5hbAorCisgICByZWZyZXNoKCkgYW5kIHdyZWZyZXNoKHdpbikKKyAgICAgICAgICBUaGVzZSAgZnVuY3Rpb25zICBtdXN0ICBiZSBjYWxsZWQgdG8gYWN0dWFsbHkgZ2V0IGFueSBvdXRwdXQgb24KKyAgICAgICAgICB0aGUgICB0ZXJtaW5hbCwgICBhcyAgb3RoZXIgIHJvdXRpbmVzICBtZXJlbHkgIG1hbmlwdWxhdGUgIGRhdGEKKyAgICAgICAgICBzdHJ1Y3R1cmVzLiAgd3JlZnJlc2goKSBjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyB0byB0aGUgcGh5c2ljYWwKKyAgICAgICAgICB0ZXJtaW5hbCAgc2NyZWVuLCAgdGFraW5nIGludG8gYWNjb3VudCB3aGF0IGlzIGFscmVhZHkgdGhlcmUgaW4KKyAgICAgICAgICBvcmRlciAgdG8gZG8gb3B0aW1pemF0aW9ucy4gcmVmcmVzaCgpIGRvZXMgYSByZWZyZXNoIG9mIHN0ZHNjci4KKyAgICAgICAgICBVbmxlc3MgIGxlYXZlb2soKSAgaGFzIGJlZW4gZW5hYmxlZCwgdGhlIHBoeXNpY2FsIGN1cnNvciBvZiB0aGUKKyAgICAgICAgICB0ZXJtaW5hbCBpcyBsZWZ0IGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgd2luZG93J3MgY3Vyc29yLgorCisgICBkb3VwZGF0ZSgpIGFuZCB3bm91dHJlZnJlc2god2luKQorICAgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMgYWxsb3cgbXVsdGlwbGUgdXBkYXRlcyB3aXRoIG1vcmUgZWZmaWNpZW5jeQorICAgICAgICAgIHRoYW4gIHdyZWZyZXNoLiAgVG8gdXNlIHRoZW0sIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdworICAgICAgICAgIGN1cnNlcyAgd29ya3MuIEluIGFkZGl0aW9uIHRvIGFsbCB0aGUgd2luZG93IHN0cnVjdHVyZXMsIGN1cnNlcworICAgICAgICAgIGtlZXBzICB0d28gIGRhdGEgc3RydWN0dXJlcyByZXByZXNlbnRpbmcgdGhlIHRlcm1pbmFsIHNjcmVlbjogYQorICAgICAgICAgIHBoeXNpY2FsIHNjcmVlbiwgZGVzY3JpYmluZyB3aGF0IGlzIGFjdHVhbGx5IG9uIHRoZSBzY3JlZW4sIGFuZAorICAgICAgICAgIGEgIHZpcnR1YWwgc2NyZWVuLCBkZXNjcmliaW5nIHdoYXQgdGhlIHByb2dyYW1tZXIgd2FudHMgdG8gaGF2ZQorICAgICAgICAgIG9uIHRoZSBzY3JlZW4uIHdyZWZyZXNoIHdvcmtzIGJ5IGZpcnN0IGNvcHlpbmcgdGhlIG5hbWVkIHdpbmRvdworICAgICAgICAgIHRvICB0aGUgIHZpcnR1YWwgIHNjcmVlbiAod25vdXRyZWZyZXNoKCkpLCBhbmQgdGhlbiBjYWxsaW5nIHRoZQorICAgICAgICAgIHJvdXRpbmUgIHRvICB1cGRhdGUgIHRoZSBzY3JlZW4gKGRvdXBkYXRlKCkpLiBJZiB0aGUgcHJvZ3JhbW1lcgorICAgICAgICAgIHdpc2hlcyAgdG8gb3V0cHV0IHNldmVyYWwgd2luZG93cyBhdCBvbmNlLCBhIHNlcmllcyBvZiBjYWxscyB0bworICAgICAgICAgIHdyZWZyZXNoIHdpbGwgcmVzdWx0IGluIGFsdGVybmF0aW5nIGNhbGxzIHRvIHdub3V0cmVmcmVzaCgpIGFuZAorICAgICAgICAgIGRvdXBkYXRlKCksICBjYXVzaW5nIHNldmVyYWwgYnVyc3RzIG9mIG91dHB1dCB0byB0aGUgc2NyZWVuLiBCeQorICAgICAgICAgIGNhbGxpbmcgIHdub3V0cmVmcmVzaCgpIGZvciBlYWNoIHdpbmRvdywgaXQgaXMgdGhlbiBwb3NzaWJsZSB0bworICAgICAgICAgIGNhbGwgIGRvdXBkYXRlKCkgIG9uY2UsICByZXN1bHRpbmcgaW4gb25seSBvbmUgYnVyc3Qgb2Ygb3V0cHV0LAorICAgICAgICAgIHdpdGggIGZld2VyICB0b3RhbCAgY2hhcmFjdGVycyAgdHJhbnNtaXR0ZWQgKHRoaXMgYWxzbyBhdm9pZHMgYQorICAgICAgICAgIHZpc3VhbGx5IGFubm95aW5nIGZsaWNrZXIgYXQgZWFjaCB1cGRhdGUpLgorCisgIExvdy1MZXZlbCBDYXBhYmlsaXR5IEFjY2VzcworCisgICBzZXR1cHRlcm0odGVybSwgZmlsZW51bSwgZXJycmV0KQorICAgICAgICAgIFRoaXMgIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGluaXRpYWxpemUgYSB0ZXJtaW5hbCdzIGRlc2NyaXB0aW9uLAorICAgICAgICAgIHdpdGhvdXQgc2V0dGluZyB1cCB0aGUgY3Vyc2VzIHNjcmVlbiBzdHJ1Y3R1cmVzIG9yIGNoYW5naW5nIHRoZQorICAgICAgICAgIHR0eS1kcml2ZXIgbW9kZSBiaXRzLiB0ZXJtIGlzIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIHJlcHJlc2VudGluZworICAgICAgICAgIHRoZSAgbmFtZSAgb2YgdGhlIHRlcm1pbmFsIGJlaW5nIHVzZWQuIGZpbGVudW0gaXMgdGhlIFVOSVggZmlsZQorICAgICAgICAgIGRlc2NyaXB0b3IgIG9mICB0aGUgdGVybWluYWwgdG8gYmUgdXNlZCBmb3Igb3V0cHV0LiBlcnJyZXQgaXMgYQorICAgICAgICAgIHBvaW50ZXIgdG8gYW4gaW50ZWdlciwgaW4gd2hpY2ggYSBzdWNjZXNzIG9yIGZhaWx1cmUgaW5kaWNhdGlvbgorICAgICAgICAgIGlzICByZXR1cm5lZC4gVGhlIHZhbHVlcyByZXR1cm5lZCBjYW4gYmUgMSAoYWxsIGlzIHdlbGwpLCAwIChubworICAgICAgICAgIHN1Y2ggIHRlcm1pbmFsKSwgIG9yICAtMSAgKHNvbWUgIHByb2JsZW0gIGxvY2F0aW5nIHRoZSB0ZXJtaW5mbworICAgICAgICAgIGRhdGFiYXNlKS4KKworICAgICAgICAgIFRoZSAgdmFsdWUgIG9mICB0ZXJtIGNhbiBiZSBnaXZlbiBhcyBOVUxMLCB3aGljaCB3aWxsIGNhdXNlIHRoZQorICAgICAgICAgIHZhbHVlIG9mIFRFUk0gaW4gdGhlIGVudmlyb25tZW50IHRvIGJlIHVzZWQuIFRoZSBlcnJyZXQgcG9pbnRlcgorICAgICAgICAgIGNhbiAgYWxzbyBiZSBnaXZlbiBhcyBOVUxMLCBtZWFuaW5nIG5vIGVycm9yIGNvZGUgaXMgd2FudGVkLiBJZgorICAgICAgICAgIGVycnJldCBpcyBkZWZhdWx0ZWQsIGFuZCBzb21ldGhpbmcgZ29lcyB3cm9uZywgc2V0dXB0ZXJtKCkgd2lsbAorICAgICAgICAgIHByaW50ICBhbiAgYXBwcm9wcmlhdGUgIGVycm9yICBtZXNzYWdlICBhbmQgIGV4aXQsICByYXRoZXIgdGhhbgorICAgICAgICAgIHJldHVybmluZy4gIFRodXMsICBhIHNpbXBsZSBwcm9ncmFtIGNhbiBjYWxsIHNldHVwdGVybSgwLCAxLCAwKQorICAgICAgICAgIGFuZCBub3Qgd29ycnkgYWJvdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JzLgorCisgICAgICAgICAgQWZ0ZXIgIHRoZSBjYWxsIHRvIHNldHVwdGVybSgpLCB0aGUgZ2xvYmFsIHZhcmlhYmxlIGN1cl90ZXJtIGlzCisgICAgICAgICAgc2V0IHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMuCisgICAgICAgICAgQnkgIGNhbGxpbmcgIHNldHVwdGVybSgpICBmb3IgIGVhY2ggIHRlcm1pbmFsLCAgYW5kICBzYXZpbmcgYW5kCisgICAgICAgICAgcmVzdG9yaW5nICBjdXJfdGVybSwgaXQgaXMgcG9zc2libGUgZm9yIGEgcHJvZ3JhbSB0byB1c2UgdHdvIG9yCisgICAgICAgICAgbW9yZSAgdGVybWluYWxzICBhdCAgb25jZS4gIFNldHVwdGVybSgpICBhbHNvICBzdG9yZXMgdGhlIG5hbWVzCisgICAgICAgICAgc2VjdGlvbiAgb2YgIHRoZSAgdGVybWluYWwgIGRlc2NyaXB0aW9uIGluIHRoZSBnbG9iYWwgY2hhcmFjdGVyCisgICAgICAgICAgYXJyYXkgdHR5dHlwZVtdLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHNldHVwdGVybSgpIHdpbGwgb3ZlcndyaXRlCisgICAgICAgICAgdGhpcyBhcnJheSwgc28geW91J2xsIGhhdmUgdG8gc2F2ZSBpdCB5b3Vyc2VsZiBpZiBuZWVkIGJlLgorCisgIERlYnVnZ2luZworCisgICAgIE5PVEU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIGN1cnNlcyBBUEkhCisKKyAgIHRyYWNlKCkKKyAgICAgICAgICBUaGlzICBmdW5jdGlvbiAgY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBzZXQgYSB0cmFjZSBsZXZlbC4gSWYKKyAgICAgICAgICB0aGUgIHRyYWNlICBsZXZlbCAgaXMgIG5vbnplcm8sICBleGVjdXRpb24gb2YgeW91ciBwcm9ncmFtIHdpbGwKKyAgICAgICAgICBnZW5lcmF0ZSBhIGZpbGUgY2FsbGVkIGB0cmFjZScgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICBjb250YWluaW5nICBhICByZXBvcnQgIG9uICB0aGUgIGxpYnJhcnkncyBhY3Rpb25zLiBIaWdoZXIgdHJhY2UKKyAgICAgICAgICBsZXZlbHMgIGVuYWJsZSAgbW9yZSAgZGV0YWlsZWQgIChhbmQgIHZlcmJvc2UpIHJlcG9ydGluZyAtLSBzZWUKKyAgICAgICAgICBjb21tZW50cyAgYXR0YWNoZWQgIHRvICBUUkFDRV8gZGVmaW5lcyBpbiB0aGUgY3Vyc2VzLmggZmlsZSBmb3IKKyAgICAgICAgICBkZXRhaWxzLiAoSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgYSB0cmFjZSBsZXZlbCBieSBhc3NpZ25pbmcKKyAgICAgICAgICBhIHRyYWNlIGxldmVsIHZhbHVlIHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBOQ1VSU0VTX1RSQUNFKS4KKworICAgX3RyYWNlZigpCisgICAgICAgICAgVGhpcyAgZnVuY3Rpb24gIGNhbiAgYmUgIHVzZWQgIHRvICBvdXRwdXQgIHlvdXIgIG93biAgZGVidWdnaW5nCisgICAgICAgICAgaW5mb3JtYXRpb24uICBJdCAgaXMgIG9ubHkgIGF2YWlsYWJsZSAgb25seSAgaWYgIHlvdSAgbGluayB3aXRoCisgICAgICAgICAgLWxuY3Vyc2VzX2cuICBJdCAgY2FuIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIHByaW50ZigpLCBvbmx5IGl0CisgICAgICAgICAgb3V0cHV0cyAgYSAgbmV3bGluZSBhZnRlciB0aGUgZW5kIG9mIGFyZ3VtZW50cy4gVGhlIG91dHB1dCBnb2VzCisgICAgICAgICAgdG8gYSBmaWxlIGNhbGxlZCB0cmFjZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgIFRyYWNlICBsb2dzICBjYW4gIGJlIGRpZmZpY3VsdCB0byBpbnRlcnByZXQgZHVlIHRvIHRoZSBzaGVlciB2b2x1bWUgb2YKKyAgIGRhdGEgZHVtcGVkIGluIHRoZW0uIFRoZXJlIGlzIGEgc2NyaXB0IGNhbGxlZCB0cmFjZW11bmNoIGluY2x1ZGVkIHdpdGgKKyAgIHRoZSAgbmN1cnNlcyBkaXN0cmlidXRpb24gdGhhdCBjYW4gYWxsZXZpYXRlIHRoaXMgcHJvYmxlbSBzb21ld2hhdDsgaXQKKyAgIGNvbXBhY3RzICBsb25nICBzZXF1ZW5jZXMgIG9mICBzaW1pbGFyICBvcGVyYXRpb25zICBpbnRvIG1vcmUgc3VjY2luY3QKKyAgIHNpbmdsZS1saW5lICBwc2V1ZG8tb3BlcmF0aW9ucy4gIFRoZXNlIHBzZXVkby1vcHMgY2FuIGJlIGRpc3Rpbmd1aXNoZWQKKyAgIGJ5IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgbmFtZWQgaW4gY2FwaXRhbCBsZXR0ZXJzLgorCitIaW50cywgVGlwcywgYW5kIFRyaWNrcworCisgICBUaGUgbmN1cnNlcyBtYW51YWwgcGFnZXMgYXJlIGEgY29tcGxldGUgcmVmZXJlbmNlIGZvciB0aGlzIGxpYnJhcnkuIEluCisgICB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZG9jdW1lbnQsIHdlIGRpc2N1c3MgdmFyaW91cyB1c2VmdWwgbWV0aG9kcyB0aGF0CisgICBtYXkgbm90IGJlIG9idmlvdXMgZnJvbSB0aGUgbWFudWFsIHBhZ2UgZGVzY3JpcHRpb25zLgorCisgIFNvbWUgTm90ZXMgb2YgQ2F1dGlvbgorCisgICBJZiAgeW91ICBmaW5kIHlvdXJzZWxmIHRoaW5raW5nIHlvdSBuZWVkIHRvIHVzZSBub3JhdygpIG9yIG5vY2JyZWFrKCksCisgICB0aGluayAgYWdhaW4gIGFuZCAgbW92ZSAgY2FyZWZ1bGx5LiBJdCdzIHByb2JhYmx5IGJldHRlciBkZXNpZ24gdG8gdXNlCisgICBnZXRzdHIoKSAgb3Igb25lIG9mIGl0cyByZWxhdGl2ZXMgdG8gc2ltdWxhdGUgY29va2VkIG1vZGUuIFRoZSBub3JhdygpCisgICBhbmQgIG5vY2JyZWFrKCkgZnVuY3Rpb25zIHRyeSB0byByZXN0b3JlIGNvb2tlZCBtb2RlLCBidXQgdGhleSBtYXkgZW5kCisgICB1cCAgIGNsb2JiZXJpbmcgICBzb21lICBjb250cm9sICBiaXRzICBzZXQgIGJlZm9yZSAgeW91ICBzdGFydGVkICB5b3VyCisgICBhcHBsaWNhdGlvbi4gIEFsc28sICB0aGV5ICBoYXZlIGFsd2F5cyBiZWVuIHBvb3JseSBkb2N1bWVudGVkLCBhbmQgYXJlCisgICBsaWtlbHkgICB0byAgaHVydCAgeW91ciAgYXBwbGljYXRpb24ncyAgdXNhYmlsaXR5ICB3aXRoICBvdGhlciAgY3Vyc2VzCisgICBsaWJyYXJpZXMuCisKKyAgIEJlYXIgIGluICBtaW5kIHRoYXQgcmVmcmVzaCgpIGlzIGEgc3lub255bSBmb3Igd3JlZnJlc2goc3Rkc2NyKS4gRG9uJ3QKKyAgIHRyeSAgdG8gIG1peCB1c2Ugb2Ygc3Rkc2NyIHdpdGggdXNlIG9mIHdpbmRvd3MgZGVjbGFyZWQgYnkgbmV3d2luKCk7IGEKKyAgIHJlZnJlc2goKSAgY2FsbCB3aWxsIGJsb3cgdGhlbSBvZmYgdGhlIHNjcmVlbi4gVGhlIHJpZ2h0IHdheSB0byBoYW5kbGUKKyAgIHRoaXMgIGlzICB0byAgdXNlICBzdWJ3aW4oKSwgIG9yIG5vdCB0b3VjaCBzdGRzY3IgYXQgYWxsIGFuZCB0aWxlIHlvdXIKKyAgIHNjcmVlbiAgd2l0aCAgZGVjbGFyZWQgd2luZG93cyB3aGljaCB5b3UgdGhlbiB3bm91dHJlZnJlc2goKSBzb21ld2hlcmUKKyAgIGluICB5b3VyICBwcm9ncmFtIGV2ZW50IGxvb3AsIHdpdGggYSBzaW5nbGUgZG91cGRhdGUoKSBjYWxsIHRvIHRyaWdnZXIKKyAgIGFjdHVhbCByZXBhaW50aW5nLgorCisgICBZb3UgIGFyZSAgbXVjaCAgbGVzcyAgbGlrZWx5ICB0byAgcnVuIGludG8gcHJvYmxlbXMgaWYgeW91IGRlc2lnbiB5b3VyCisgICBzY3JlZW4gICBsYXlvdXRzICAgdG8gIHVzZSAgdGlsZWQgIHJhdGhlciAgdGhhbiAgb3ZlcmxhcHBpbmcgIHdpbmRvd3MuCisgICBIaXN0b3JpY2FsbHksICBjdXJzZXMgIHN1cHBvcnQgIGZvciBvdmVybGFwcGluZyB3aW5kb3dzIGhhcyBiZWVuIHdlYWssCisgICBmcmFnaWxlLCAgYW5kICBwb29ybHkgIGRvY3VtZW50ZWQuICBUaGUgIG5jdXJzZXMgbGlicmFyeSBpcyBub3QgeWV0IGFuCisgICBleGNlcHRpb24gdG8gdGhpcyBydWxlLgorCisgICBUaGVyZSAgaXMgIGEgIHBhbmVscyBsaWJyYXJ5IGluY2x1ZGVkIGluIHRoZSBuY3Vyc2VzIGRpc3RyaWJ1dGlvbiB0aGF0CisgICBkb2VzICBhICBwcmV0dHkgIGdvb2QgIGpvYiAgb2YgIHN0cmVuZ3RoZW5pbmcgIHRoZSBvdmVybGFwcGluZy13aW5kb3dzCisgICBmYWNpbGl0aWVzLgorCisgICBUcnkgdG8gYXZvaWQgdXNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZXMgTElORVMgYW5kIENPTFMuIFVzZSBnZXRtYXh5eCgpCisgICBvbiAgdGhlIHN0ZHNjciBjb250ZXh0IGluc3RlYWQuIFJlYXNvbjogeW91ciBjb2RlIG1heSBiZSBwb3J0ZWQgdG8gcnVuCisgICBpbiAgYW4gIGVudmlyb25tZW50IHdpdGggd2luZG93IHJlc2l6ZXMsIGluIHdoaWNoIGNhc2Ugc2V2ZXJhbCBzY3JlZW5zCisgICBjb3VsZCBiZSBvcGVuIHdpdGggZGlmZmVyZW50IHNpemVzLgorCisgIFRlbXBvcmFyaWx5IExlYXZpbmcgTkNVUlNFUyBNb2RlCisKKyAgIFNvbWV0aW1lcyAgeW91ICB3aWxsICB3YW50ICB0byB3cml0ZSBhIHByb2dyYW0gdGhhdCBzcGVuZHMgbW9zdCBvZiBpdHMKKyAgIHRpbWUgIGluICBzY3JlZW4gIG1vZGUsICBidXQgb2NjYXNpb25hbGx5IHJldHVybnMgdG8gb3JkaW5hcnkgYGNvb2tlZCcKKyAgIG1vZGUuICBBIGNvbW1vbiByZWFzb24gZm9yIHRoaXMgaXMgdG8gc3VwcG9ydCBzaGVsbC1vdXQuIFRoaXMgYmVoYXZpb3IKKyAgIGlzIHNpbXBsZSB0byBhcnJhbmdlIGluIG5jdXJzZXMuCisKKyAgIFRvICBsZWF2ZSAgbmN1cnNlcyAgbW9kZSwgIGNhbGwgIGVuZHdpbigpICBhcyAgeW91ICB3b3VsZCAgaWYgeW91IHdlcmUKKyAgIGludGVuZGluZyAgdG8gdGVybWluYXRlIHRoZSBwcm9ncmFtLiBUaGlzIHdpbGwgdGFrZSB0aGUgc2NyZWVuIGJhY2sgdG8KKyAgIGNvb2tlZCAgbW9kZTsgIHlvdSAgY2FuICBkbyB5b3VyIHNoZWxsLW91dC4gV2hlbiB5b3Ugd2FudCB0byByZXR1cm4gdG8KKyAgIG5jdXJzZXMgIG1vZGUsICBzaW1wbHkgY2FsbCByZWZyZXNoKCkgb3IgZG91cGRhdGUoKS4gVGhpcyB3aWxsIHJlcGFpbnQKKyAgIHRoZSBzY3JlZW4uCisKKyAgIFRoZXJlICBpcyAgYSAgYm9vbGVhbiBmdW5jdGlvbiwgaXNlbmR3aW4oKSwgd2hpY2ggY29kZSBjYW4gdXNlIHRvIHRlc3QKKyAgIHdoZXRoZXIgbmN1cnNlcyBzY3JlZW4gbW9kZSBpcyBhY3RpdmUuIEl0IHJldHVybnMgVFJVRSBpbiB0aGUgaW50ZXJ2YWwKKyAgIGJldHdlZW4gYW4gZW5kd2luKCkgY2FsbCBhbmQgdGhlIGZvbGxvd2luZyByZWZyZXNoKCksIEZBTFNFIG90aGVyd2lzZS4KKworICAgSGVyZSBpcyBzb21lIHNhbXBsZSBjb2RlIGZvciBzaGVsbG91dDoKKyAgICBhZGRzdHIoIlNoZWxsaW5nIG91dC4uLiIpOworICAgIGRlZl9wcm9nX21vZGUoKTsgICAgICAgICAgIC8qIHNhdmUgY3VycmVudCB0dHkgbW9kZXMgKi8KKyAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIG9yaWdpbmFsIHR0eSBtb2RlcyAqLworICAgIHN5c3RlbSgic2giKTsgICAgICAgICAgICAgIC8qIHJ1biBzaGVsbCAqLworICAgIGFkZHN0cigicmV0dXJuZWQuXG4iKTsgICAgIC8qIHByZXBhcmUgcmV0dXJuIG1lc3NhZ2UgKi8KKyAgICByZWZyZXNoKCk7ICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIHNhdmUgbW9kZXMsIHJlcGFpbnQgc2NyZWVuICovCisKKyAgVXNpbmcgTkNVUlNFUyB1bmRlciBYVEVSTQorCisgICBBICByZXNpemUgIG9wZXJhdGlvbiAgaW4gIFggIHNlbmRzIFNJR1dJTkNIIHRvIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nCisgICB1bmRlciAgeHRlcm0uICBUaGUgIGVhc2llc3Qgd2F5IHRvIGhhbmRsZSBTSUdXSU5DSCBpcyB0byBkbyBhbiBlbmR3aW4sCisgICBmb2xsb3dlZCAgYnkgIGFuICByZWZyZXNoICBhbmQgYSBzY3JlZW4gcmVwYWludCB5b3UgY29kZSB5b3Vyc2VsZi4gVGhlCisgICByZWZyZXNoIHdpbGwgcGljayB1cCB0aGUgbmV3IHNjcmVlbiBzaXplIGZyb20gdGhlIHh0ZXJtJ3MgZW52aXJvbm1lbnQuCisKKyAgIFRoYXQgIGlzIHRoZSBzdGFuZGFyZCB3YXksIG9mIGNvdXJzZSAoaXQgZXZlbiB3b3JrcyB3aXRoIHNvbWUgdmVuZG9yJ3MKKyAgIGN1cnNlcyAgaW1wbGVtZW50YXRpb25zKS4gSXRzIGRyYXdiYWNrIGlzIHRoYXQgaXQgY2xlYXJzIHRoZSBzY3JlZW4gdG8KKyAgIHJlaW5pdGlhbGl6ZSB0aGUgZGlzcGxheSwgYW5kIGRvZXMgbm90IHJlc2l6ZSBzdWJ3aW5kb3dzIHdoaWNoIG11c3QgYmUKKyAgIHNocnVuay4gICBOY3Vyc2VzICBwcm92aWRlcyAgYW4gIGV4dGVuc2lvbiAgd2hpY2ggIHdvcmtzICBiZXR0ZXIsICB0aGUKKyAgIHJlc2l6ZXRlcm0gIGZ1bmN0aW9uLiAgVGhhdCAgZnVuY3Rpb24gIGVuc3VyZXMgIHRoYXQgIGFsbCAgd2luZG93cyBhcmUKKyAgIGxpbWl0ZWQgIHRvICB0aGUgbmV3IHNjcmVlbiBkaW1lbnNpb25zLCBhbmQgcGFkcyBzdGRzY3Igd2l0aCBibGFua3MgaWYKKyAgIHRoZSBzY3JlZW4gaXMgbGFyZ2VyLgorCisgICBUaGUgbmN1cnNlcyBsaWJyYXJ5IHByb3ZpZGVzIGEgU0lHV0lOQ0ggc2lnbmFsIGhhbmRsZXIsIHdoaWNoIHB1c2hlcyBhCisgICBLRVlfUkVTSVpFICB2aWEgdGhlIHdnZXRjaCgpIGNhbGxzLiBXaGVuIG5jdXJzZXMgcmV0dXJucyB0aGF0IGNvZGUsIGl0CisgICBjYWxscyAgcmVzaXpldGVybSAgdG8gdXBkYXRlIHRoZSBzaXplIG9mIHRoZSBzdGFuZGFyZCBzY3JlZW4ncyB3aW5kb3csCisgICByZXBhaW50aW5nIHRoYXQgKGZpbGxpbmcgd2l0aCBibGFua3Mgb3IgdHJ1bmNhdGluZyBhcyBuZWVkZWQpLiBJdCBhbHNvCisgICByZXNpemVzIG90aGVyIHdpbmRvd3MsIGJ1dCBpdHMgZWZmZWN0IG1heSBiZSBsZXNzIHNhdGlzZmFjdG9yeSBiZWNhdXNlCisgICBpdCAgY2Fubm90ICBrbm93ICBob3cgeW91IHdhbnQgdGhlIHNjcmVlbiByZS1wYWludGVkLiBZb3Ugd2lsbCB1c3VhbGx5CisgICBoYXZlIHRvIHdyaXRlIHNwZWNpYWwtcHVycG9zZSBjb2RlIHRvIGhhbmRsZSBLRVlfUkVTSVpFIHlvdXJzZWxmLgorCisgIEhhbmRsaW5nIE11bHRpcGxlIFRlcm1pbmFsIFNjcmVlbnMKKworICAgVGhlIGluaXRzY3IoKSBmdW5jdGlvbiBhY3R1YWxseSBjYWxscyBhIGZ1bmN0aW9uIG5hbWVkIG5ld3Rlcm0oKSB0byBkbworICAgbW9zdCAgb2YgIGl0cyAgd29yay4gIElmIHlvdSBhcmUgd3JpdGluZyBhIHByb2dyYW0gdGhhdCBvcGVucyBtdWx0aXBsZQorICAgdGVybWluYWxzLCB1c2UgbmV3dGVybSgpIGRpcmVjdGx5LgorCisgICBGb3IgIGVhY2ggY2FsbCwgeW91IHdpbGwgaGF2ZSB0byBzcGVjaWZ5IGEgdGVybWluYWwgdHlwZSBhbmQgYSBwYWlyIG9mCisgICBmaWxlICBwb2ludGVyczsgIGVhY2ggIGNhbGwgd2lsbCByZXR1cm4gYSBzY3JlZW4gcmVmZXJlbmNlLCBhbmQgc3Rkc2NyCisgICB3aWxsIGJlIHNldCB0byB0aGUgbGFzdCBvbmUgYWxsb2NhdGVkLiBZb3Ugd2lsbCBzd2l0Y2ggYmV0d2VlbiBzY3JlZW5zCisgICB3aXRoICB0aGUgIHNldF90ZXJtICBjYWxsLiAgTm90ZSAgdGhhdCAgeW91ICB3aWxsICBhbHNvICBoYXZlICB0byBjYWxsCisgICBkZWZfc2hlbGxfbW9kZSBhbmQgZGVmX3Byb2dfbW9kZSBvbiBlYWNoIHR0eSB5b3Vyc2VsZi4KKworICBUZXN0aW5nIGZvciBUZXJtaW5hbCBDYXBhYmlsaXRpZXMKKworICAgU29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byB3cml0ZSBwcm9ncmFtcyB0aGF0IHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZgorICAgdmFyaW91cyAgY2FwYWJpbGl0aWVzIGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRvIGdvIGludG8gbmN1cnNlcyBtb2RlLgorICAgQW4gIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY2FsbCBzZXR1cHRlcm0oKSwgdGhlbiB1c2UgdGhlIGZ1bmN0aW9ucworICAgdGlnZXRmbGFnKCksIHRpZ2V0bnVtKCksIGFuZCB0aWdldHN0cigpIHRvIGRvIHlvdXIgdGVzdGluZy4KKworICAgQSAgcGFydGljdWxhcmx5ICB1c2VmdWwgIGNhc2UgIG9mIHRoaXMgb2Z0ZW4gY29tZXMgdXAgd2hlbiB5b3Ugd2FudCB0bworICAgdGVzdCAgd2hldGhlciAgYSAgZ2l2ZW4gIHRlcm1pbmFsICB0eXBlICBzaG91bGQgIGJlIHRyZWF0ZWQgYXMgYHNtYXJ0JworICAgKGN1cnNvci1hZGRyZXNzYWJsZSkgb3IgYHN0dXBpZCcuIFRoZSByaWdodCB3YXkgdG8gdGVzdCB0aGlzIGlzIHRvIHNlZQorICAgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiB0aWdldHN0cigiY3VwIikgaXMgbm9uLU5VTEwuIEFsdGVybmF0aXZlbHksIHlvdQorICAgY2FuICBpbmNsdWRlICB0aGUgIHRlcm0uaCAgZmlsZSAgYW5kICB0ZXN0ICB0aGUgIHZhbHVlICBvZiAgdGhlICBtYWNybworICAgY3Vyc29yX2FkZHJlc3MuCisKKyAgVHVuaW5nIGZvciBTcGVlZAorCisgICBVc2UgIHRoZSAgYWRkY2hzdHIoKSAgZmFtaWx5ICBvZiBmdW5jdGlvbnMgZm9yIGZhc3Qgc2NyZWVuLXBhaW50aW5nIG9mCisgICB0ZXh0ICB3aGVuICB5b3UgIGtub3cgdGhlIHRleHQgZG9lc24ndCBjb250YWluIGFueSBjb250cm9sIGNoYXJhY3RlcnMuCisgICBUcnkgIHRvICBtYWtlICBhdHRyaWJ1dGUgY2hhbmdlcyBpbmZyZXF1ZW50IG9uIHlvdXIgc2NyZWVucy4gRG9uJ3QgdXNlCisgICB0aGUgaW1tZWRvaygpIG9wdGlvbiEKKworICBTcGVjaWFsIEZlYXR1cmVzIG9mIE5DVVJTRVMKKworICAgVGhlICB3cmVzaXplKCkgIGZ1bmN0aW9uICBhbGxvd3MgIHlvdSB0byByZXNpemUgYSB3aW5kb3cgaW4gcGxhY2UuIFRoZQorICAgYXNzb2NpYXRlZCAgIHJlc2l6ZXRlcm0oKSAgZnVuY3Rpb24gIHNpbXBsaWZpZXMgIHRoZSAgY29uc3RydWN0aW9uICBvZgorICAgU0lHV0lOQ0ggaGFuZGxlcnMsIGZvciByZXNpemluZyBhbGwgd2luZG93cy4KKworICAgVGhlIGRlZmluZV9rZXkoKSBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGRlZmluZSBhdCBydW50aW1lIGZ1bmN0aW9uLWtleQorICAgY29udHJvbCAgc2VxdWVuY2VzICB3aGljaCAgYXJlICBub3QgIGluICB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uIFRoZQorICAga2V5b2soKSAgIGZ1bmN0aW9uICAgYWxsb3dzICB5b3UgIHRvICB0ZW1wb3JhcmlseSAgZW5hYmxlICBvciAgZGlzYWJsZQorICAgaW50ZXJwcmV0YXRpb24gb2YgYW55IGZ1bmN0aW9uLWtleSBjb250cm9sIHNlcXVlbmNlLgorCisgICBUaGUgdXNlX2RlZmF1bHRfY29sb3JzKCkgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgYXBwbGljYXRpb25zCisgICB3aGljaCAgY2FuIHVzZSB0aGUgdGVybWluYWwncyBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzCisgICBhcyAgYW4gIGFkZGl0aW9uYWwgImRlZmF1bHQiIGNvbG9yLiBTZXZlcmFsIHRlcm1pbmFsIGVtdWxhdG9ycyBzdXBwb3J0CisgICB0aGlzIGZlYXR1cmUsIHdoaWNoIGlzIGJhc2VkIG9uIElTTyA2NDI5LgorCisgICBOY3Vyc2VzICBzdXBwb3J0cyAgdXAgMTYgY29sb3JzLCB1bmxpa2UgU1ZyNCBjdXJzZXMgd2hpY2ggZGVmaW5lcyBvbmx5CisgICA4LiBXaGlsZSBtb3N0IHRlcm1pbmFscyB3aGljaCBwcm92aWRlIGNvbG9yIGFsbG93IG9ubHkgOCBjb2xvcnMsIGFib3V0CisgICBhIHF1YXJ0ZXIgKGluY2x1ZGluZyBYRnJlZTg2IHh0ZXJtKSBzdXBwb3J0IDE2IGNvbG9ycy4KKworQ29tcGF0aWJpbGl0eSB3aXRoIE9sZGVyIFZlcnNpb25zCisKKyAgIERlc3BpdGUgIG91ciAgYmVzdCBlZmZvcnRzLCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5jdXJzZXMKKyAgIGFuZCAgdGhlICAodW5kb2N1bWVudGVkISkgIGJlaGF2aW9yICBvZiAgb2xkZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucy4KKyAgIFRoZXNlICBhcmlzZSBmcm9tIGFtYmlndWl0aWVzIG9yIG9taXNzaW9ucyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUKKyAgIEFQSS4KKworICBSZWZyZXNoIG9mIE92ZXJsYXBwaW5nIFdpbmRvd3MKKworICAgSWYgIHlvdSAgZGVmaW5lIHR3byB3aW5kb3dzIEEgYW5kIEIgdGhhdCBvdmVybGFwLCBhbmQgdGhlbiBhbHRlcm5hdGVseQorICAgc2NyaWJibGUgIG9uICBhbmQgIHJlZnJlc2ggIHRoZW0sICB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBvdmVybGFwcGluZworICAgcmVnaW9uICB1bmRlciAgaGlzdG9yaWMgIGN1cnNlcyAgdmVyc2lvbnMgIHdlcmUgIG9mdGVuICBub3QgZG9jdW1lbnRlZAorICAgcHJlY2lzZWx5LgorCisgICBUbyAgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBhIHByb2JsZW0sIHJlbWVtYmVyIHRoYXQgc2NyZWVuIHVwZGF0ZXMgYXJlCisgICBjYWxjdWxhdGVkICBiZXR3ZWVuICB0d28gIHJlcHJlc2VudGF0aW9ucyAgb2YgIHRoZSBlbnRpcmUgZGlzcGxheS4gVGhlCisgICBkb2N1bWVudGF0aW9uICBzYXlzIHRoYXQgd2hlbiB5b3UgcmVmcmVzaCBhIHdpbmRvdywgaXQgaXMgZmlyc3QgY29waWVkCisgICB0byAgdGhlICB2aXJ0dWFsIHNjcmVlbiwgYW5kIHRoZW4gY2hhbmdlcyBhcmUgY2FsY3VsYXRlZCB0byB1cGRhdGUgdGhlCisgICBwaHlzaWNhbCAgc2NyZWVuIChhbmQgYXBwbGllZCB0byB0aGUgdGVybWluYWwpLiBCdXQgImNvcGllZCB0byIgaXMgbm90CisgICB2ZXJ5IHNwZWNpZmljLCBhbmQgc3VidGxlIGRpZmZlcmVuY2VzIGluIGhvdyBjb3B5aW5nIHdvcmtzIGNhbiBwcm9kdWNlCisgICBkaWZmZXJlbnQgYmVoYXZpb3JzIGluIHRoZSBjYXNlIHdoZXJlIHR3byBvdmVybGFwcGluZyB3aW5kb3dzIGFyZSBlYWNoCisgICBiZWluZyByZWZyZXNoZWQgYXQgdW5wcmVkaWN0YWJsZSBpbnRlcnZhbHMuCisKKyAgIFdoYXQgIGhhcHBlbnMgdG8gdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbiBkZXBlbmRzIG9uIHdoYXQgd25vdXRyZWZyZXNoKCkKKyAgIGRvZXMgIHdpdGggIGl0cyAgYXJndW1lbnQgIC0tICB3aGF0IHBvcnRpb25zIG9mIHRoZSBhcmd1bWVudCB3aW5kb3cgaXQKKyAgIGNvcGllcyAgdG8gIHRoZSB2aXJ0dWFsIHNjcmVlbi4gU29tZSBpbXBsZW1lbnRhdGlvbnMgZG8gImNoYW5nZSBjb3B5IiwKKyAgIGNvcHlpbmcgIGRvd24gIG9ubHkgbG9jYXRpb25zIGluIHRoZSB3aW5kb3cgdGhhdCBoYXZlIGNoYW5nZWQgKG9yIGJlZW4KKyAgIG1hcmtlZCAgY2hhbmdlZCAgd2l0aCB3dG91Y2hsbigpIGFuZCBmcmllbmRzKS4gU29tZSBpbXBsZW1lbnRhdGlvbnMgZG8KKyAgICJlbnRpcmUgIGNvcHkiLCAgY29weWluZyAgYWxsICB3aW5kb3cgIGxvY2F0aW9ucyB0byB0aGUgdmlydHVhbCBzY3JlZW4KKyAgIHdoZXRoZXIgb3Igbm90IHRoZXkgaGF2ZSBjaGFuZ2VkLgorCisgICBUaGUgIG5jdXJzZXMgIGxpYnJhcnkgIGl0c2VsZiAgaGFzICBub3QgYWx3YXlzIGJlZW4gY29uc2lzdGVudCBvbiB0aGlzCisgICBzY29yZS4gIER1ZSAgdG8gIGEgIGJ1ZywgIHZlcnNpb25zICAxLjguNyAgdG8gIDEuOS44YSBkaWQgZW50aXJlIGNvcHkuCisgICBWZXJzaW9ucyAgMS44LjYgIGFuZCAgb2xkZXIsICBhbmQgIHZlcnNpb25zIDEuOS45IGFuZCBuZXdlciwgZG8gY2hhbmdlCisgICBjb3B5LgorCisgICBGb3IgIG1vc3QgIGNvbW1lcmNpYWwgY3Vyc2VzIGltcGxlbWVudGF0aW9ucywgaXQgaXMgbm90IGRvY3VtZW50ZWQgYW5kCisgICBub3QgIGtub3duICBmb3Igc3VyZSAoYXQgbGVhc3Qgbm90IHRvIHRoZSBuY3Vyc2VzIG1haW50YWluZXJzKSB3aGV0aGVyCisgICB0aGV5ICBkbyAgY2hhbmdlICBjb3B5IG9yIGVudGlyZSBjb3B5LiBXZSBrbm93IHRoYXQgU3lzdGVtIFYgcmVsZWFzZSAzCisgICBjdXJzZXMgIGhhcyAgbG9naWMgaW4gaXQgdGhhdCBsb29rcyBsaWtlIGFuIGF0dGVtcHQgdG8gZG8gY2hhbmdlIGNvcHksCisgICBidXQgIHRoZSAgc3Vycm91bmRpbmcgIGxvZ2ljIGFuZCBkYXRhIHJlcHJlc2VudGF0aW9ucyBhcmUgc3VmZmljaWVudGx5CisgICBjb21wbGV4LCAgYW5kICBvdXIgIGtub3dsZWRnZSBzdWZmaWNpZW50bHkgaW5kaXJlY3QsIHRoYXQgaXQncyBoYXJkIHRvCisgICBrbm93ICB3aGV0aGVyICB0aGlzICBpcyAgcmVsaWFibGUuICBJdCAgaXMgIG5vdCAgY2xlYXIgIHdoYXQgIHRoZSBTVnI0CisgICBkb2N1bWVudGF0aW9uICBhbmQgWFNJIHN0YW5kYXJkIGludGVuZC4gVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgYmFyZWx5CisgICBtZW50aW9ucyAgd25vdXRyZWZyZXNoKCk7ICB0aGUgIFNWcjQgIGRvY3VtZW50cyAgc2VlbSB0byBiZSBkZXNjcmliaW5nCisgICBlbnRpcmUtY29weSwgYnV0IGl0IGlzIHBvc3NpYmxlIHdpdGggc29tZSBlZmZvcnQgYW5kIHN0cmFpbmluZyB0byByZWFkCisgICB0aGVtIHRoZSBvdGhlciB3YXkuCisKKyAgIEl0ICBtaWdodCAgdGhlcmVmb3JlICBiZSB1bndpc2UgdG8gcmVseSBvbiBlaXRoZXIgYmVoYXZpb3IgaW4gcHJvZ3JhbXMKKyAgIHRoYXQgIG1pZ2h0ICBoYXZlICB0byAgYmUgIGxpbmtlZCAgd2l0aCAgb3RoZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucy4KKyAgIEluc3RlYWQsICB5b3UgIGNhbiBkbyBhbiBleHBsaWNpdCB0b3VjaHdpbigpIGJlZm9yZSB0aGUgd25vdXRyZWZyZXNoKCkKKyAgIGNhbGwgdG8gZ3VhcmFudGVlIGFuIGVudGlyZS1jb250ZW50cyBjb3B5IGFueXdoZXJlLgorCisgICBUaGUgIHJlYWxseSBjbGVhbiB3YXkgdG8gaGFuZGxlIHRoaXMgaXMgdG8gdXNlIHRoZSBwYW5lbHMgbGlicmFyeS4gSWYsCisgICB3aGVuICB5b3Ugd2FudCBhIHNjcmVlbiB1cGRhdGUsIHlvdSBkbyB1cGRhdGVfcGFuZWxzKCksIGl0IHdpbGwgZG8gYWxsCisgICB0aGUgIG5lY2Vzc2FyeSAgd25vdXRyZWZyZXNoKCkgY2FsbHMgZm9yIHdoYXRldmVyIHBhbmVsIHN0YWNraW5nIG9yZGVyCisgICB5b3UgIGhhdmUgIGRlZmluZWQuIFRoZW4geW91IGNhbiBkbyBvbmUgZG91cGRhdGUoKSBhbmQgdGhlcmUgd2lsbCBiZSBhCisgICBzaW5nbGUgYnVyc3Qgb2YgcGh5c2ljYWwgSS9PIHRoYXQgd2lsbCBkbyBhbGwgeW91ciB1cGRhdGVzLgorCisgIEJhY2tncm91bmQgRXJhc2UKKworICAgSWYgeW91IGhhdmUgYmVlbiB1c2luZyBhIHZlcnkgb2xkIHZlcnNpb25zIG9mIG5jdXJzZXMgKDEuOC43IG9yIG9sZGVyKQorICAgeW91ICBtYXkgYmUgc3VycHJpc2VkIGJ5IHRoZSBiZWhhdmlvciBvZiB0aGUgZXJhc2UgZnVuY3Rpb25zLiBJbiBvbGRlcgorICAgdmVyc2lvbnMsICBlcmFzZWQgIGFyZWFzIG9mIGEgd2luZG93IHdlcmUgZmlsbGVkIHdpdGggYSBibGFuayBtb2RpZmllZAorICAgYnkgIHRoZSAgd2luZG93J3MgIGN1cnJlbnQgYXR0cmlidXRlIChhcyBzZXQgYnkgd2F0dHJzZXQoKSwgd2F0dHJvbigpLAorICAgd2F0dHJvZmYoKSBhbmQgZnJpZW5kcykuCisKKyAgIEluICBuZXdlciAgdmVyc2lvbnMsICB0aGlzIGlzIG5vdCBzby4gSW5zdGVhZCwgdGhlIGF0dHJpYnV0ZSBvZiBlcmFzZWQKKyAgIGJsYW5rcyAgaXMgIG5vcm1hbCAgdW5sZXNzICBhbmQgIHVudGlsIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSBmdW5jdGlvbnMKKyAgIGJrZ2RzZXQoKSBvciB3YmtnZHNldCgpLgorCisgICBUaGlzIGNoYW5nZSBpbiBiZWhhdmlvciBjb25mb3JtcyBuY3Vyc2VzIHRvIFN5c3RlbSBWIFJlbGVhc2UgNCBhbmQgdGhlCisgICBYU0kgQ3Vyc2VzIHN0YW5kYXJkLgorCitYU0kgQ3Vyc2VzIENvbmZvcm1hbmNlCisKKyAgIFRoZSAgbmN1cnNlcyAgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBiZSBiYXNlLWxldmVsIGNvbmZvcm1hbnQgd2l0aCB0aGUKKyAgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCAgZnJvbSAgWC9PcGVuLiAgTWFueSBleHRlbmRlZC1sZXZlbCBmZWF0dXJlcyAoaW4KKyAgIGZhY3QsICBhbG1vc3QgYWxsIGZlYXR1cmVzIG5vdCBkaXJlY3RseSBjb25jZXJuZWQgd2l0aCB3aWRlIGNoYXJhY3RlcnMKKyAgIGFuZCBpbnRlcm5hdGlvbmFsaXphdGlvbikgYXJlIGFsc28gc3VwcG9ydGVkLgorCisgICBPbmUgIGVmZmVjdCAgb2YgIFhTSSAgY29uZm9ybWFuY2UgIGlzIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IgZGVzY3JpYmVkCisgICB1bmRlciAiQmFja2dyb3VuZCBFcmFzZSAtLSBDb21wYXRpYmlsaXR5IHdpdGggT2xkIFZlcnNpb25zIi4KKworICAgQWxzbywgIG5jdXJzZXMgIG1lZXRzIHRoZSBYU0kgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBtYWNybyBlbnRyeSBwb2ludAorICAgaGF2ZSAgYSAgY29ycmVzcG9uZGluZyAgZnVuY3Rpb24gIHdoaWNoICBtYXkgIGJlICBsaW5rZWQgIChhbmQgd2lsbCBiZQorICAgcHJvdG90eXBlLWNoZWNrZWQpIGlmIHRoZSBtYWNybyBkZWZpbml0aW9uIGlzIGRpc2FibGVkIHdpdGggI3VuZGVmLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUGFuZWxzIExpYnJhcnkKKworICAgVGhlICBuY3Vyc2VzICBsaWJyYXJ5ICBieSAgaXRzZWxmICBwcm92aWRlcyAgZ29vZCAgc3VwcG9ydCAgZm9yIHNjcmVlbgorICAgZGlzcGxheXMgaW4gd2hpY2ggdGhlIHdpbmRvd3MgYXJlIHRpbGVkIChub24tb3ZlcmxhcHBpbmcpLiBJbiB0aGUgbW9yZQorICAgZ2VuZXJhbCAgY2FzZSAgdGhhdCAgd2luZG93cyAgbWF5IG92ZXJsYXAsIHlvdSBoYXZlIHRvIHVzZSBhIHNlcmllcyBvZgorICAgd25vdXRyZWZyZXNoKCkgIGNhbGxzICBmb2xsb3dlZCAgYnkgYSBkb3VwZGF0ZSgpLCBhbmQgYmUgY2FyZWZ1bCBhYm91dAorICAgdGhlIG9yZGVyIHlvdSBkbyB0aGUgd2luZG93IHJlZnJlc2hlcyBpbi4gSXQgaGFzIHRvIGJlIGJvdHRvbS11cHdhcmRzLAorICAgb3RoZXJ3aXNlIHBhcnRzIG9mIHdpbmRvd3MgdGhhdCBzaG91bGQgYmUgb2JzY3VyZWQgd2lsbCBzaG93IHRocm91Z2guCisKKyAgIFdoZW4gIHlvdXIgIGludGVyZmFjZSBkZXNpZ24gaXMgc3VjaCB0aGF0IHdpbmRvd3MgbWF5IGRpdmUgZGVlcGVyIGludG8KKyAgIHRoZSAgdmlzaWJpbGl0eSAgc3RhY2sgIG9yICBwb3AgIHRvICB0aGUgdG9wIGF0IHJ1bnRpbWUsIHRoZSByZXN1bHRpbmcKKyAgIGJvb2sta2VlcGluZyAgY2FuICBiZSAgdGVkaW91cyAgYW5kICBkaWZmaWN1bHQgdG8gZ2V0IHJpZ2h0LiBIZW5jZSB0aGUKKyAgIHBhbmVscyBsaWJyYXJ5LgorCisgICBUaGUgIHBhbmVsICBsaWJyYXJ5ICBmaXJzdCAgYXBwZWFyZWQgIGluICBBVCZUICBTeXN0ZW0gIFYuIFRoZSB2ZXJzaW9uCisgICBkb2N1bWVudGVkIGhlcmUgaXMgdGhlIHBhbmVsIGNvZGUgZGlzdHJpYnV0ZWQgd2l0aCBuY3Vyc2VzLgorCitDb21waWxpbmcgV2l0aCB0aGUgUGFuZWxzIExpYnJhcnkKKworICAgWW91ciAgcGFuZWxzLXVzaW5nIG1vZHVsZXMgbXVzdCBpbXBvcnQgdGhlIHBhbmVscyBsaWJyYXJ5IGRlY2xhcmF0aW9ucworICAgd2l0aAorICAgICAgICAgICNpbmNsdWRlIDxwYW5lbC5oPgorCisgICBhbmQgbXVzdCBiZSBsaW5rZWQgZXhwbGljaXRseSB3aXRoIHRoZSBwYW5lbHMgbGlicmFyeSB1c2luZyBhbiAtbHBhbmVsCisgICBhcmd1bWVudC4gIE5vdGUgIHRoYXQgIHRoZXkgIG11c3QgIGFsc28gIGxpbmsgdGhlIG5jdXJzZXMgbGlicmFyeSB3aXRoCisgICAtbG5jdXJzZXMuIE1hbnkgbGlua2VycyBhcmUgdHdvLXBhc3MgYW5kIHdpbGwgYWNjZXB0IGVpdGhlciBvcmRlciwgYnV0CisgICBpdCBpcyBzdGlsbCBnb29kIHByYWN0aWNlIHRvIHB1dCAtbHBhbmVsIGZpcnN0IGFuZCAtbG5jdXJzZXMgc2Vjb25kLgorCitPdmVydmlldyBvZiBQYW5lbHMKKworICAgQSAgcGFuZWwgIG9iamVjdCAgaXMgIGEgd2luZG93IHRoYXQgaXMgaW1wbGljaXRseSB0cmVhdGVkIGFzIHBhcnQgb2YgYQorICAgZGVjayAgaW5jbHVkaW5nICBhbGwgIG90aGVyICBwYW5lbCAgb2JqZWN0cy4gIFRoZSBkZWNrIGhhcyBhbiBpbXBsaWNpdAorICAgYm90dG9tLXRvLXRvcCAgdmlzaWJpbGl0eSBvcmRlci4gVGhlIHBhbmVscyBsaWJyYXJ5IGluY2x1ZGVzIGFuIHVwZGF0ZQorICAgZnVuY3Rpb24gKGFuYWxvZ291cyB0byByZWZyZXNoKCkpIHRoYXQgZGlzcGxheXMgYWxsIHBhbmVscyBpbiB0aGUgZGVjaworICAgaW4gIHRoZSBwcm9wZXIgb3JkZXIgdG8gcmVzb2x2ZSBvdmVybGFwcy4gVGhlIHN0YW5kYXJkIHdpbmRvdywgc3Rkc2NyLAorICAgaXMgY29uc2lkZXJlZCBiZWxvdyBhbGwgcGFuZWxzLgorCisgICBEZXRhaWxzICBvbiB0aGUgcGFuZWxzIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBtYW4gcGFnZXMuIFdlJ2xsCisgICBqdXN0IGhpdCB0aGUgaGlnaGxpZ2h0cyBoZXJlLgorCisgICBZb3UgIGNyZWF0ZSAgYSAgcGFuZWwgZnJvbSBhIHdpbmRvdyBieSBjYWxsaW5nIG5ld19wYW5lbCgpIG9uIGEgd2luZG93CisgICBwb2ludGVyLiAgSXQgIHRoZW4gIGJlY29tZXMgdGhlIHRvcCBvZiB0aGUgZGVjay4gVGhlIHBhbmVsJ3Mgd2luZG93IGlzCisgICBhdmFpbGFibGUgYXMgdGhlIHZhbHVlIG9mIHBhbmVsX3dpbmRvdygpIGNhbGxlZCB3aXRoIHRoZSBwYW5lbCBwb2ludGVyCisgICBhcyBhcmd1bWVudC4KKworICAgWW91ICBjYW4gIGRlbGV0ZSAgYSAgcGFuZWwgKHJlbW92aW5nIGl0IGZyb20gdGhlIGRlY2spIHdpdGggZGVsX3BhbmVsLgorICAgVGhpcyAgd2lsbCAgbm90ICBkZWFsbG9jYXRlIHRoZSBhc3NvY2lhdGVkIHdpbmRvdzsgeW91IGhhdmUgdG8gZG8gdGhhdAorICAgeW91cnNlbGYuICBZb3UgY2FuIHJlcGxhY2UgYSBwYW5lbCdzIHdpbmRvdyB3aXRoIGEgZGlmZmVyZW50IHdpbmRvdyBieQorICAgY2FsbGluZyAgcmVwbGFjZV93aW5kb3cuICBUaGUgbmV3IHdpbmRvdyBtYXkgYmUgb2YgZGlmZmVyZW50IHNpemU7IHRoZQorICAgcGFuZWwgY29kZSB3aWxsIHJlLWNvbXB1dGUgYWxsIG92ZXJsYXBzLiBUaGlzIG9wZXJhdGlvbiBkb2Vzbid0IGNoYW5nZQorICAgdGhlIHBhbmVsJ3MgcG9zaXRpb24gaW4gdGhlIGRlY2suCisKKyAgIFRvICBtb3ZlICBhICBwYW5lbCdzIHdpbmRvdywgdXNlIG1vdmVfcGFuZWwoKS4gVGhlIG12d2luKCkgZnVuY3Rpb24gb24KKyAgIHRoZSAgcGFuZWwncyAgd2luZG93ICBpc24ndCAgc3VmZmljaWVudCAgYmVjYXVzZSBpdCBkb2Vzbid0IHVwZGF0ZSB0aGUKKyAgIHBhbmVscyAgbGlicmFyeSdzICByZXByZXNlbnRhdGlvbiAgb2YgIHdoZXJlICB0aGUgIHdpbmRvd3MgIGFyZS4gIFRoaXMKKyAgIG9wZXJhdGlvbiBsZWF2ZXMgdGhlIHBhbmVsJ3MgZGVwdGgsIGNvbnRlbnRzLCBhbmQgc2l6ZSB1bmNoYW5nZWQuCisKKyAgIFR3byAgIGZ1bmN0aW9ucyAgICh0b3BfcGFuZWwoKSwgICBib3R0b21fcGFuZWwoKSkgICBhcmUgIHByb3ZpZGVkICBmb3IKKyAgIHJlYXJyYW5naW5nIHRoZSBkZWNrLiBUaGUgZmlyc3QgcG9wcyBpdHMgYXJndW1lbnQgd2luZG93IHRvIHRoZSB0b3Agb2YKKyAgIHRoZSAgZGVjazsgIHRoZSBzZWNvbmQgc2VuZHMgaXQgdG8gdGhlIGJvdHRvbS4gRWl0aGVyIG9wZXJhdGlvbiBsZWF2ZXMKKyAgIHRoZSBwYW5lbCdzIHNjcmVlbiBsb2NhdGlvbiwgY29udGVudHMsIGFuZCBzaXplIHVuY2hhbmdlZC4KKworICAgVGhlICBmdW5jdGlvbiB1cGRhdGVfcGFuZWxzKCkgZG9lcyBhbGwgdGhlIHdub3V0cmVmcmVzaCgpIGNhbGxzIG5lZWRlZAorICAgdG8gcHJlcGFyZSBmb3IgZG91cGRhdGUoKSAod2hpY2ggeW91IG11c3QgY2FsbCB5b3Vyc2VsZiwgYWZ0ZXJ3YXJkcykuCisKKyAgIFR5cGljYWxseSwgIHlvdSAgd2lsbCB3YW50IHRvIGNhbGwgdXBkYXRlX3BhbmVscygpIGFuZCBkb3VwZGF0ZSgpIGp1c3QKKyAgIGJlZm9yZSBhY2NlcHRpbmcgY29tbWFuZCBpbnB1dCwgb25jZSBpbiBlYWNoIGN5Y2xlIG9mIGludGVyYWN0aW9uIHdpdGgKKyAgIHRoZSAgdXNlci4gIElmICB5b3UgIGNhbGwgIHVwZGF0ZV9wYW5lbHMoKSAgYWZ0ZXIgZWFjaCBhbmQgZXZlcnkgcGFuZWwKKyAgIHdyaXRlLCAgeW91J2xsICBnZW5lcmF0ZSAgYSAgbG90ICBvZiAgdW5uZWNlc3NhcnkgcmVmcmVzaCBhY3Rpdml0eSBhbmQKKyAgIHNjcmVlbiBmbGlja2VyLgorCitQYW5lbHMsIElucHV0LCBhbmQgdGhlIFN0YW5kYXJkIFNjcmVlbgorCisgICBZb3UgIHNob3VsZG4ndCBtaXggd25vdXRyZWZyZXNoKCkgb3Igd3JlZnJlc2goKSBvcGVyYXRpb25zIHdpdGggcGFuZWxzCisgICBjb2RlOyAgdGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgYXJndW1lbnQgd2luZG93IGlzIGVpdGhlciBpbiB0aGUgdG9wCisgICBwYW5lbCBvciB1bm9ic2N1cmVkIGJ5IGFueSBvdGhlciBwYW5lbHMuCisKKyAgIFRoZSAgc3RzZGNyICB3aW5kb3cgIGlzICBhICBzcGVjaWFsICBjYXNlLiAgSXQgaXMgY29uc2lkZXJlZCBiZWxvdyBhbGwKKyAgIHBhbmVscy4gQmVjYXVzZSBjaGFuZ2VzIHRvIHBhbmVscyBtYXkgb2JzY3VyZSBwYXJ0cyBvZiBzdGRzY3IsIHRob3VnaCwKKyAgIHlvdSAgc2hvdWxkICBjYWxsIHVwZGF0ZV9wYW5lbHMoKSBiZWZvcmUgZG91cGRhdGUoKSBldmVuIHdoZW4geW91IG9ubHkKKyAgIGNoYW5nZSBzdGRzY3IuCisKKyAgIE5vdGUgIHRoYXQgIHdnZXRjaCAgYXV0b21hdGljYWxseSAgY2FsbHMgIHdyZWZyZXNoLiAgVGhlcmVmb3JlLCBiZWZvcmUKKyAgIHJlcXVlc3RpbmcgIGlucHV0ICBmcm9tICBhICBwYW5lbCB3aW5kb3csIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUKKyAgIHBhbmVsIGlzIHRvdGFsbHkgdW5vYnNjdXJlZC4KKworICAgVGhlcmUgIGlzICBwcmVzZW50bHkgIG5vICB3YXkgdG8gZGlzcGxheSBjaGFuZ2VzIHRvIG9uZSBvYnNjdXJlZCBwYW5lbAorICAgd2l0aG91dCByZXBhaW50aW5nIGFsbCBwYW5lbHMuCisKK0hpZGluZyBQYW5lbHMKKworICAgSXQncyAgcG9zc2libGUgIHRvICByZW1vdmUgIGEgIHBhbmVsICBmcm9tICB0aGUgIGRlY2sgdGVtcG9yYXJpbHk7IHVzZQorICAgaGlkZV9wYW5lbCAgZm9yIHRoaXMuIFVzZSBzaG93X3BhbmVsKCkgdG8gcmVuZGVyIGl0IHZpc2libGUgYWdhaW4uIFRoZQorICAgcHJlZGljYXRlICBmdW5jdGlvbiAgcGFuZWxfaGlkZGVuICB0ZXN0cyAgd2hldGhlciAgb3IgIG5vdCAgYSBwYW5lbCBpcworICAgaGlkZGVuLgorCisgICBUaGUgcGFuZWxfdXBkYXRlIGNvZGUgaWdub3JlcyBoaWRkZW4gcGFuZWxzLiBZb3UgY2Fubm90IGRvIHRvcF9wYW5lbCgpCisgICBvciAgYm90dG9tX3BhbmVsICBvbiAgYSAgaGlkZGVuICBwYW5lbCgpLiAgT3RoZXIgcGFuZWxzIG9wZXJhdGlvbnMgYXJlCisgICBhcHBsaWNhYmxlLgorCitNaXNjZWxsYW5lb3VzIE90aGVyIEZhY2lsaXRpZXMKKworICAgSXQncyAgcG9zc2libGUgIHRvIG5hdmlnYXRlIHRoZSBkZWNrIHVzaW5nIHRoZSBmdW5jdGlvbnMgcGFuZWxfYWJvdmUoKQorICAgYW5kICBwYW5lbF9iZWxvdy4gIEhhbmRlZCBhIHBhbmVsIHBvaW50ZXIsIHRoZXkgcmV0dXJuIHRoZSBwYW5lbCBhYm92ZQorICAgb3IgIGJlbG93ICB0aGF0ICBwYW5lbC4gIEhhbmRlZCAgTlVMTCwgIHRoZXkgcmV0dXJuIHRoZSBib3R0b20tbW9zdCBvcgorICAgdG9wLW1vc3QgcGFuZWwuCisKKyAgIEV2ZXJ5ICBwYW5lbCAgaGFzICBhbiAgYXNzb2NpYXRlZCAgdXNlciBwb2ludGVyLCBub3QgdXNlZCBieSB0aGUgcGFuZWwKKyAgIGNvZGUsICB0byAgd2hpY2ggIHlvdSAgY2FuICBhdHRhY2ggIGFwcGxpY2F0aW9uIGRhdGEuIFNlZSB0aGUgbWFuIHBhZ2UKKyAgIGRvY3VtZW50YXRpb24gb2Ygc2V0X3BhbmVsX3VzZXJwdHIoKSBhbmQgcGFuZWxfdXNlcnB0ciBmb3IgZGV0YWlscy4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBNZW51IExpYnJhcnkKKworICAgQSBtZW51IGlzIGEgc2NyZWVuIGRpc3BsYXkgdGhhdCBhc3Npc3RzIHRoZSB1c2VyIHRvIGNob29zZSBzb21lIHN1YnNldAorICAgb2YgIGEgIGdpdmVuIHNldCBvZiBpdGVtcy4gVGhlIG1lbnUgbGlicmFyeSBpcyBhIGN1cnNlcyBleHRlbnNpb24gdGhhdAorICAgc3VwcG9ydHMgIGVhc3kgIHByb2dyYW1taW5nICBvZiAgbWVudSAgaGllcmFyY2hpZXMgIHdpdGggYSB1bmlmb3JtIGJ1dAorICAgZmxleGlibGUgaW50ZXJmYWNlLgorCisgICBUaGUgIG1lbnUgIGxpYnJhcnkgIGZpcnN0ICBhcHBlYXJlZCAgaW4gIEFUJlQgIFN5c3RlbSAgVi4gIFRoZSB2ZXJzaW9uCisgICBkb2N1bWVudGVkIGhlcmUgaXMgdGhlIG1lbnUgY29kZSBkaXN0cmlidXRlZCB3aXRoIG5jdXJzZXMuCisKK0NvbXBpbGluZyBXaXRoIHRoZSBtZW51IExpYnJhcnkKKworICAgWW91ciBtZW51LXVzaW5nIG1vZHVsZXMgbXVzdCBpbXBvcnQgdGhlIG1lbnUgbGlicmFyeSBkZWNsYXJhdGlvbnMgd2l0aAorICAgICAgICAgICNpbmNsdWRlIDxtZW51Lmg+CisKKyAgIGFuZCAgbXVzdCAgYmUgbGlua2VkIGV4cGxpY2l0bHkgd2l0aCB0aGUgbWVudXMgbGlicmFyeSB1c2luZyBhbiAtbG1lbnUKKyAgIGFyZ3VtZW50LiAgTm90ZSAgdGhhdCAgdGhleSAgbXVzdCAgYWxzbyAgbGluayB0aGUgbmN1cnNlcyBsaWJyYXJ5IHdpdGgKKyAgIC1sbmN1cnNlcy4gTWFueSBsaW5rZXJzIGFyZSB0d28tcGFzcyBhbmQgd2lsbCBhY2NlcHQgZWl0aGVyIG9yZGVyLCBidXQKKyAgIGl0IGlzIHN0aWxsIGdvb2QgcHJhY3RpY2UgdG8gcHV0IC1sbWVudSBmaXJzdCBhbmQgLWxuY3Vyc2VzIHNlY29uZC4KKworT3ZlcnZpZXcgb2YgTWVudXMKKworICAgVGhlICBtZW51cyAgY3JlYXRlZCAgYnkgIHRoaXMgIGxpYnJhcnkgY29uc2lzdCBvZiBjb2xsZWN0aW9ucyBvZiBpdGVtcworICAgaW5jbHVkaW5nICBhICBuYW1lICBzdHJpbmcgcGFydCBhbmQgYSBkZXNjcmlwdGlvbiBzdHJpbmcgcGFydC4gVG8gbWFrZQorICAgbWVudXMsICB5b3UgIGNyZWF0ZSAgZ3JvdXBzICBvZiB0aGVzZSBpdGVtcyBhbmQgY29ubmVjdCB0aGVtIHdpdGggbWVudQorICAgZnJhbWUgb2JqZWN0cy4KKworICAgVGhlICBtZW51IGNhbiB0aGVuIGJ5IHBvc3RlZCwgdGhhdCBpcyB3cml0dGVuIHRvIGFuIGFzc29jaWF0ZWQgd2luZG93LgorICAgQWN0dWFsbHksIGVhY2ggbWVudSBoYXMgdHdvIGFzc29jaWF0ZWQgd2luZG93czsgYSBjb250YWluaW5nIHdpbmRvdyBpbgorICAgd2hpY2ggIHRoZSAgcHJvZ3JhbW1lciBjYW4gc2NyaWJibGUgdGl0bGVzIG9yIGJvcmRlcnMsIGFuZCBhIHN1YndpbmRvdworICAgaW4gd2hpY2ggdGhlIG1lbnUgaXRlbXMgcHJvcGVyIGFyZSBkaXNwbGF5ZWQuIElmIHRoaXMgc3Vid2luZG93IGlzIHRvbworICAgc21hbGwgIHRvICBkaXNwbGF5ICBhbGwgdGhlIGl0ZW1zLCBpdCB3aWxsIGJlIGEgc2Nyb2xsYWJsZSB2aWV3cG9ydCBvbgorICAgdGhlIGNvbGxlY3Rpb24gb2YgaXRlbXMuCisKKyAgIEEgIG1lbnUgbWF5IGFsc28gYmUgdW5wb3N0ZWQgKHRoYXQgaXMsIHVuZGlzcGxheWVkKSwgYW5kIGZpbmFsbHkgZnJlZWQKKyAgIHRvICBtYWtlICB0aGUgIHN0b3JhZ2UgIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgaXRzIGl0ZW1zIGF2YWlsYWJsZSBmb3IKKyAgIHJlLXVzZS4KKworICAgVGhlIGdlbmVyYWwgZmxvdyBvZiBjb250cm9sIG9mIGEgbWVudSBwcm9ncmFtIGxvb2tzIGxpa2UgdGhpczoKKyAgICAxLiBJbml0aWFsaXplIGN1cnNlcy4KKyAgICAyLiBDcmVhdGUgdGhlIG1lbnUgaXRlbXMsIHVzaW5nIG5ld19pdGVtKCkuCisgICAgMy4gQ3JlYXRlIHRoZSBtZW51IHVzaW5nIG5ld19tZW51KCkuCisgICAgNC4gUG9zdCB0aGUgbWVudSB1c2luZyBwb3N0X21lbnUoKS4KKyAgICA1LiBSZWZyZXNoIHRoZSBzY3JlZW4uCisgICAgNi4gUHJvY2VzcyB1c2VyIHJlcXVlc3RzIHZpYSBhbiBpbnB1dCBsb29wLgorICAgIDcuIFVucG9zdCB0aGUgbWVudSB1c2luZyB1bnBvc3RfbWVudSgpLgorICAgIDguIEZyZWUgdGhlIG1lbnUsIHVzaW5nIGZyZWVfbWVudSgpLgorICAgIDkuIEZyZWUgdGhlIGl0ZW1zIHVzaW5nIGZyZWVfaXRlbSgpLgorICAgMTAuIFRlcm1pbmF0ZSBjdXJzZXMuCisKK1NlbGVjdGluZyBpdGVtcworCisgICBNZW51cyAgbWF5ICBiZSAgbXVsdGktdmFsdWVkICBvciAgKHRoZSBkZWZhdWx0KSBzaW5nbGUtdmFsdWVkIChzZWUgdGhlCisgICBtYW51YWwgIHBhZ2UgIG1lbnVfb3B0cygzeCkgIHRvICBzZWUgIGhvdyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQpLiBCb3RoCisgICB0eXBlcyBhbHdheXMgaGF2ZSBhIGN1cnJlbnQgaXRlbS4KKworICAgRnJvbSAgYSAgc2luZ2xlLXZhbHVlZCAgbWVudSB5b3UgY2FuIHJlYWQgdGhlIHNlbGVjdGVkIHZhbHVlIHNpbXBseSBieQorICAgbG9va2luZyAgYXQgIHRoZSAgY3VycmVudCAgaXRlbS4gRnJvbSBhIG11bHRpLXZhbHVlZCBtZW51LCB5b3UgZ2V0IHRoZQorICAgc2VsZWN0ZWQgIHNldCAgYnkgIGxvb3BpbmcgdGhyb3VnaCB0aGUgaXRlbXMgYXBwbHlpbmcgdGhlIGl0ZW1fdmFsdWUoKQorICAgcHJlZGljYXRlICBmdW5jdGlvbi4gIFlvdXIgIG1lbnUtcHJvY2Vzc2luZyAgY29kZSBjYW4gdXNlIHRoZSBmdW5jdGlvbgorICAgc2V0X2l0ZW1fdmFsdWUoKSB0byBmbGFnIHRoZSBpdGVtcyBpbiB0aGUgc2VsZWN0IHNldC4KKworICAgTWVudSAgIGl0ZW1zICAgY2FuICBiZSAgbWFkZSAgdW5zZWxlY3RhYmxlICB1c2luZyAgc2V0X2l0ZW1fb3B0cygpICBvcgorICAgaXRlbV9vcHRzX29mZigpICB3aXRoICB0aGUgIE9fU0VMRUNUQUJMRSAgYXJndW1lbnQuICBUaGlzICBpcyB0aGUgb25seQorICAgb3B0aW9uICBzbyAgZmFyICBkZWZpbmVkIGZvciBtZW51cywgYnV0IGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gY29kZSBhcworICAgdGhvdWdoIG90aGVyIG9wdGlvbiBiaXRzIG1pZ2h0IGJlIG9uLgorCitNZW51IERpc3BsYXkKKworICAgVGhlICBtZW51ICBsaWJyYXJ5ICBjYWxjdWxhdGVzIGEgbWluaW11bSBkaXNwbGF5IHNpemUgZm9yIHlvdXIgd2luZG93LAorICAgYmFzZWQgb24gdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgICAgICogVGhlIG51bWJlciBhbmQgbWF4aW11bSBsZW5ndGggb2YgdGhlIG1lbnUgaXRlbXMKKyAgICAgKiBXaGV0aGVyIHRoZSBPX1JPV01BSk9SIG9wdGlvbiBpcyBlbmFibGVkCisgICAgICogV2hldGhlciBkaXNwbGF5IG9mIGRlc2NyaXB0aW9ucyBpcyBlbmFibGVkCisgICAgICogV2hhdGV2ZXIgbWVudSBmb3JtYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgdGhlIHByb2dyYW1tZXIKKyAgICAgKiBUaGUgIGxlbmd0aCBvZiB0aGUgbWVudSBtYXJrIHN0cmluZyB1c2VkIGZvciBoaWdobGlnaHRpbmcgc2VsZWN0ZWQKKyAgICAgICBpdGVtcworCisgICBUaGUgIGZ1bmN0aW9uICBzZXRfbWVudV9mb3JtYXQoKSBhbGxvd3MgeW91IHRvIHNldCB0aGUgbWF4aW11bSBzaXplIG9mCisgICB0aGUgdmlld3BvcnQgb3IgbWVudSBwYWdlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgbWVudSBpdGVtcy4gWW91CisgICBjYW4gcmV0cmlldmUgYW55IGZvcm1hdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51IHdpdGggbWVudV9mb3JtYXQoKS4gVGhlCisgICBkZWZhdWx0IGZvcm1hdCBpcyByb3dzPTE2LCBjb2x1bW5zPTEuCisKKyAgIFRoZSBhY3R1YWwgbWVudSBwYWdlIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIGZvcm1hdCBzaXplLiBUaGlzIGRlcGVuZHMKKyAgIG9uICB0aGUgaXRlbSBudW1iZXIgYW5kIHNpemUgYW5kIHdoZXRoZXIgT19ST1dNQUpPUiBpcyBvbi4gVGhpcyBvcHRpb24KKyAgIChvbiAgYnkgIGRlZmF1bHQpIGNhdXNlcyBtZW51IGl0ZW1zIHRvIGJlIGRpc3BsYXllZCBpbiBhIGByYXN0ZXItc2NhbicKKyAgIHBhdHRlcm4sIHNvIHRoYXQgaWYgbW9yZSB0aGFuIG9uZSBpdGVtIHdpbGwgZml0IGhvcml6b250YWxseSB0aGUgZmlyc3QKKyAgIGNvdXBsZSAgb2YgIGl0ZW1zICBhcmUgc2lkZS1ieS1zaWRlIGluIHRoZSB0b3Agcm93LiBUaGUgYWx0ZXJuYXRpdmUgaXMKKyAgIGNvbHVtbi1tYWpvciAgZGlzcGxheSwgIHdoaWNoICB0cmllcyB0byBwdXQgdGhlIGZpcnN0IHNldmVyYWwgaXRlbXMgaW4KKyAgIHRoZSBmaXJzdCBjb2x1bW4uCisKKyAgIEFzICBtZW50aW9uZWQgYWJvdmUsIGEgbWVudSBmb3JtYXQgbm90IGxhcmdlIGVub3VnaCB0byBhbGxvdyBhbGwgaXRlbXMKKyAgIHRvICBmaXQgIG9uLXNjcmVlbiAgd2lsbCAgcmVzdWx0ICBpbiBhIG1lbnUgZGlzcGxheSB0aGF0IGlzIHZlcnRpY2FsbHkKKyAgIHNjcm9sbGFibGUuCisKKyAgIFlvdSAgY2FuICBzY3JvbGwgIGl0ICB3aXRoICByZXF1ZXN0cyB0byB0aGUgbWVudSBkcml2ZXIsIHdoaWNoIHdpbGwgYmUKKyAgIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBvbiBtZW51IGlucHV0IGhhbmRsaW5nLgorCisgICBFYWNoICBtZW51ICBoYXMgYSBtYXJrIHN0cmluZyB1c2VkIHRvIHZpc3VhbGx5IHRhZyBzZWxlY3RlZCBpdGVtczsgc2VlCisgICB0aGUgbWVudV9tYXJrKDN4KSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4gVGhlIG1hcmsgc3RyaW5nIGxlbmd0aCBhbHNvCisgICBpbmZsdWVuY2VzIHRoZSBtZW51IHBhZ2Ugc2l6ZS4KKworICAgVGhlICBmdW5jdGlvbiAgc2NhbGVfbWVudSgpICByZXR1cm5zIHRoZSBtaW5pbXVtIGRpc3BsYXkgc2l6ZSB0aGF0IHRoZQorICAgbWVudSAgY29kZSAgY29tcHV0ZXMgIGZyb20gIGFsbCAgdGhlc2UgIGZhY3RvcnMuICBUaGVyZSBhcmUgb3RoZXIgbWVudQorICAgZGlzcGxheSAgYXR0cmlidXRlcyAgaW5jbHVkaW5nICBhICBzZWxlY3QgIGF0dHJpYnV0ZSwgYW4gYXR0cmlidXRlIGZvcgorICAgc2VsZWN0YWJsZSAgaXRlbXMsICBhbiAgYXR0cmlidXRlICBmb3IgIHVuc2VsZWN0YWJsZSAgaXRlbXMsIGFuZCBhIHBhZAorICAgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgaXRlbSBuYW1lIHRleHQgZnJvbSBkZXNjcmlwdGlvbiB0ZXh0LiBUaGVzZQorICAgaGF2ZSAgcmVhc29uYWJsZSAgZGVmYXVsdHMgd2hpY2ggdGhlIGxpYnJhcnkgYWxsb3dzIHlvdSB0byBjaGFuZ2UgKHNlZQorICAgdGhlIG1lbnVfYXR0cmlicygzeCkgbWFudWFsIHBhZ2UuCisKK01lbnUgV2luZG93cworCisgICBFYWNoICBtZW51IGhhcywgYXMgbWVudGlvbmVkIHByZXZpb3VzbHksIGEgcGFpciBvZiBhc3NvY2lhdGVkIHdpbmRvd3MuCisgICBCb3RoIHRoZXNlIHdpbmRvd3MgYXJlIHBhaW50ZWQgd2hlbiB0aGUgbWVudSBpcyBwb3N0ZWQgYW5kIGVyYXNlZCB3aGVuCisgICB0aGUgbWVudSBpcyB1bnBvc3RlZC4KKworICAgVGhlICBvdXRlciAgb3IgIGZyYW1lICB3aW5kb3cgIGlzICBub3QgIG90aGVyd2lzZSAgdG91Y2hlZCBieSB0aGUgbWVudQorICAgcm91dGluZXMuIEl0IGV4aXN0cyBzbyB0aGUgcHJvZ3JhbW1lciBjYW4gYXNzb2NpYXRlIGEgdGl0bGUsIGEgYm9yZGVyLAorICAgb3IgIHBlcmhhcHMgIGhlbHAgdGV4dCB3aXRoIHRoZSBtZW51IGFuZCBoYXZlIGl0IHByb3Blcmx5IHJlZnJlc2hlZCBvcgorICAgZXJhc2VkIGF0IHBvc3QvdW5wb3N0IHRpbWUuIFRoZSBpbm5lciB3aW5kb3cgb3Igc3Vid2luZG93IGlzIHdoZXJlIHRoZQorICAgY3VycmVudCBtZW51IHBhZ2UgaXMgZGlzcGxheWVkLgorCisgICBCeSAgZGVmYXVsdCwgIGJvdGggIHdpbmRvd3MgIGFyZSAgc3Rkc2NyLiAgWW91ICBjYW4gIHNldCB0aGVtIHdpdGggdGhlCisgICBmdW5jdGlvbnMgaW4gbWVudV93aW4oM3gpLgorCisgICBXaGVuICB5b3UgIGNhbGwgcG9zdF9tZW51KCksIHlvdSB3cml0ZSB0aGUgbWVudSB0byBpdHMgc3Vid2luZG93LiBXaGVuCisgICB5b3UgIGNhbGwgIHVucG9zdF9tZW51KCksIHlvdSBlcmFzZSB0aGUgc3Vid2luZG93LCBIb3dldmVyLCBuZWl0aGVyIG9mCisgICB0aGVzZSAgYWN0dWFsbHkgIG1vZGlmaWVzICB0aGUgIHNjcmVlbi4gVG8gZG8gdGhhdCwgY2FsbCB3cmVmcmVzaCgpIG9yCisgICBzb21lIGVxdWl2YWxlbnQuCisKK1Byb2Nlc3NpbmcgTWVudSBJbnB1dAorCisgICBUaGUgIG1haW4gIGxvb3Agb2YgeW91ciBtZW51LXByb2Nlc3NpbmcgY29kZSBzaG91bGQgY2FsbCBtZW51X2RyaXZlcigpCisgICByZXBlYXRlZGx5LiAgVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoaXMgcm91dGluZSBpcyBhIG1lbnUgcG9pbnRlcjsgdGhlCisgICBzZWNvbmQgIGlzICBhICBtZW51ICBjb21tYW5kICBjb2RlLiBZb3Ugc2hvdWxkIHdyaXRlIGFuIGlucHV0LWZldGNoaW5nCisgICByb3V0aW5lIHRoYXQgbWFwcyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1lbnUgY29tbWFuZCBjb2RlcywgYW5kIHBhc3MgaXRzCisgICBvdXRwdXQgIHRvICBtZW51X2RyaXZlcigpLiBUaGUgbWVudSBjb21tYW5kIGNvZGVzIGFyZSBmdWxseSBkb2N1bWVudGVkCisgICBpbiBtZW51X2RyaXZlcigzeCkuCisKKyAgIFRoZSAgc2ltcGxlc3QgIGdyb3VwIG9mIGNvbW1hbmQgY29kZXMgaXMgUkVRX05FWFRfSVRFTSwgUkVRX1BSRVZfSVRFTSwKKyAgIFJFUV9GSVJTVF9JVEVNLCAgICAgUkVRX0xBU1RfSVRFTSwgICAgIFJFUV9VUF9JVEVNLCAgICAgUkVRX0RPV05fSVRFTSwKKyAgIFJFUV9MRUZUX0lURU0sICBSRVFfUklHSFRfSVRFTS4gIFRoZXNlICBjaGFuZ2UgIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKyAgIGl0ZW0uICBUaGVzZSAgcmVxdWVzdHMgbWF5IGNhdXNlIHNjcm9sbGluZyBvZiB0aGUgbWVudSBwYWdlIGlmIGl0IG9ubHkKKyAgIHBhcnRpYWxseSBkaXNwbGF5ZWQuCisKKyAgIFRoZXJlICBhcmUgIGV4cGxpY2l0ICByZXF1ZXN0cyAgZm9yICBzY3JvbGxpbmcgIHdoaWNoICBhbHNvIGNoYW5nZSB0aGUKKyAgIGN1cnJlbnQgIGl0ZW0gIChiZWNhdXNlICB0aGUgIHNlbGVjdCBsb2NhdGlvbiBkb2VzIG5vdCBjaGFuZ2UsIGJ1dCB0aGUKKyAgIGl0ZW0gICAgdGhlcmUgICBkb2VzKS4gICBUaGVzZSAgIGFyZSAgIFJFUV9TQ1JfRExJTkUsICAgUkVRX1NDUl9VTElORSwKKyAgIFJFUV9TQ1JfRFBBR0UsIGFuZCBSRVFfU0NSX1VQQUdFLgorCisgICBUaGUgIFJFUV9UT0dHTEVfSVRFTSAgc2VsZWN0cyBvciBkZXNlbGVjdHMgdGhlIGN1cnJlbnQgaXRlbS4gSXQgaXMgZm9yCisgICB1c2UgIGluICBtdWx0aS12YWx1ZWQgIG1lbnVzOyBpZiB5b3UgdXNlIGl0IHdpdGggT19PTkVWQUxVRSBvbiwgeW91J2xsCisgICBnZXQgYW4gZXJyb3IgcmV0dXJuIChFX1JFUVVFU1RfREVOSUVEKS4KKworICAgRWFjaCAgbWVudSAgaGFzICBhbiBhc3NvY2lhdGVkIHBhdHRlcm4gYnVmZmVyLiBUaGUgbWVudV9kcml2ZXIoKSBsb2dpYworICAgdHJpZXMgIHRvICBhY2N1bXVsYXRlICBwcmludGFibGUgIEFTQ0lJICBjaGFyYWN0ZXJzICBwYXNzZWQgaW4gaW4gdGhhdAorICAgYnVmZmVyOyAgd2hlbiAgaXQgIG1hdGNoZXMgYSBwcmVmaXggb2YgYW4gaXRlbSBuYW1lLCB0aGF0IGl0ZW0gKG9yIHRoZQorICAgbmV4dCAgbWF0Y2hpbmcgIGl0ZW0pICBpcyBzZWxlY3RlZC4gSWYgYXBwZW5kaW5nIGEgY2hhcmFjdGVyIHlpZWxkcyBubworICAgbmV3ICBtYXRjaCwgIHRoYXQgIGNoYXJhY3RlciAgaXMgIGRlbGV0ZWQgZnJvbSB0aGUgcGF0dGVybiBidWZmZXIsIGFuZAorICAgbWVudV9kcml2ZXIoKSByZXR1cm5zIEVfTk9fTUFUQ0guCisKKyAgIFNvbWUgIHJlcXVlc3RzICBjaGFuZ2UgdGhlIHBhdHRlcm4gYnVmZmVyIGRpcmVjdGx5OiBSRVFfQ0xFQVJfUEFUVEVSTiwKKyAgIFJFUV9CQUNLX1BBVFRFUk4sICBSRVFfTkVYVF9NQVRDSCwgIFJFUV9QUkVWX01BVENILiBUaGUgbGF0dGVyIHR3byBhcmUKKyAgIHVzZWZ1bCAgd2hlbiAgcGF0dGVybiAgYnVmZmVyICBpbnB1dCAgbWF0Y2hlcyAgbW9yZSB0aGFuIG9uZSBpdGVtIGluIGEKKyAgIG11bHRpLXZhbHVlZCBtZW51LgorCisgICBFYWNoICBzdWNjZXNzZnVsICBzY3JvbGwgb3IgaXRlbSBuYXZpZ2F0aW9uIHJlcXVlc3QgY2xlYXJzIHRoZSBwYXR0ZXJuCisgICBidWZmZXIuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUgcGF0dGVybiBidWZmZXIgZXhwbGljaXRseSB3aXRoCisgICBzZXRfbWVudV9wYXR0ZXJuKCkuCisKKyAgIEZpbmFsbHksICBtZW51ICBkcml2ZXIgIHJlcXVlc3RzICBhYm92ZSAgdGhlICBjb25zdGFudCBNQVhfQ09NTUFORCBhcmUKKyAgIGNvbnNpZGVyZWQgICBhcHBsaWNhdGlvbi1zcGVjaWZpYyAgY29tbWFuZHMuICBUaGUgIG1lbnVfZHJpdmVyKCkgIGNvZGUKKyAgIGlnbm9yZXMgdGhlbSBhbmQgcmV0dXJucyBFX1VOS05PV05fQ09NTUFORC4KKworTWlzY2VsbGFuZW91cyBPdGhlciBGZWF0dXJlcworCisgICBWYXJpb3VzICBtZW51ICBvcHRpb25zIGNhbiBhZmZlY3QgdGhlIHByb2Nlc3NpbmcgYW5kIHZpc3VhbCBhcHBlYXJhbmNlCisgICBhbmQgaW5wdXQgcHJvY2Vzc2luZyBvZiBtZW51cy4gU2VlIG1lbnVfb3B0cygzeCkgZm9yIGRldGFpbHMuCisKKyAgIEl0ICBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgaXRlbSBmcm9tIGFwcGxpY2F0aW9uIGNvZGU7IHRoaXMKKyAgIGlzICB1c2VmdWwgIGlmICB5b3UgIHdhbnQgdG8gd3JpdGUgeW91ciBvd24gbmF2aWdhdGlvbiByZXF1ZXN0cy4gSXQgaXMKKyAgIGFsc28gIHBvc3NpYmxlICB0byBleHBsaWNpdGx5IHNldCB0aGUgdG9wIHJvdyBvZiB0aGUgbWVudSBkaXNwbGF5LiBTZWUKKyAgIG1pdGVtX2N1cnJlbnQoM3gpLiAgSWYgIHlvdXIgIGFwcGxpY2F0aW9uICBuZWVkcyAgdG8gIGNoYW5nZSAgdGhlIG1lbnUKKyAgIHN1YndpbmRvdyAgY3Vyc29yIGZvciBhbnkgcmVhc29uLCBwb3NfbWVudV9jdXJzb3IoKSB3aWxsIHJlc3RvcmUgaXQgdG8KKyAgIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGZvciBjb250aW51aW5nIG1lbnUgZHJpdmVyIHByb2Nlc3NpbmcuCisKKyAgIEl0ICBpcyAgcG9zc2libGUgIHRvIHNldCBob29rcyB0byBiZSBjYWxsZWQgYXQgbWVudSBpbml0aWFsaXphdGlvbiBhbmQKKyAgIHdyYXB1cCAgIHRpbWUsICAgYW5kICAgd2hlbmV2ZXIgICB0aGUgICBzZWxlY3RlZCAgIGl0ZW0gIGNoYW5nZXMuICBTZWUKKyAgIG1lbnVfaG9vaygzeCkuCisKKyAgIEVhY2ggIGl0ZW0sIGFuZCBlYWNoIG1lbnUsIGhhcyBhbiBhc3NvY2lhdGVkIHVzZXIgcG9pbnRlciBvbiB3aGljaCB5b3UKKyAgIGNhbiBoYW5nIGFwcGxpY2F0aW9uIGRhdGEuIFNlZSBtaXRlbV91c2VycHRyKDN4KSBhbmQgbWVudV91c2VycHRyKDN4KS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBGb3JtcyBMaWJyYXJ5CisKKyAgIFRoZSAgZm9ybSBsaWJyYXJ5IGlzIGEgY3Vyc2VzIGV4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIGVhc3kgcHJvZ3JhbW1pbmcKKyAgIG9mIG9uLXNjcmVlbiBmb3JtcyBmb3IgZGF0YSBlbnRyeSBhbmQgcHJvZ3JhbSBjb250cm9sLgorCisgICBUaGUgIGZvcm0gIGxpYnJhcnkgIGZpcnN0ICBhcHBlYXJlZCAgaW4gIEFUJlQgIFN5c3RlbSAgVi4gIFRoZSB2ZXJzaW9uCisgICBkb2N1bWVudGVkIGhlcmUgaXMgdGhlIGZvcm0gY29kZSBkaXN0cmlidXRlZCB3aXRoIG5jdXJzZXMuCisKK0NvbXBpbGluZyBXaXRoIHRoZSBmb3JtIExpYnJhcnkKKworICAgWW91ciBmb3JtLXVzaW5nIG1vZHVsZXMgbXVzdCBpbXBvcnQgdGhlIGZvcm0gbGlicmFyeSBkZWNsYXJhdGlvbnMgd2l0aAorICAgICAgICAgICNpbmNsdWRlIDxmb3JtLmg+CisKKyAgIGFuZCAgbXVzdCAgYmUgbGlua2VkIGV4cGxpY2l0bHkgd2l0aCB0aGUgZm9ybXMgbGlicmFyeSB1c2luZyBhbiAtbGZvcm0KKyAgIGFyZ3VtZW50LiAgTm90ZSAgdGhhdCAgdGhleSAgbXVzdCAgYWxzbyAgbGluayB0aGUgbmN1cnNlcyBsaWJyYXJ5IHdpdGgKKyAgIC1sbmN1cnNlcy4gTWFueSBsaW5rZXJzIGFyZSB0d28tcGFzcyBhbmQgd2lsbCBhY2NlcHQgZWl0aGVyIG9yZGVyLCBidXQKKyAgIGl0IGlzIHN0aWxsIGdvb2QgcHJhY3RpY2UgdG8gcHV0IC1sZm9ybSBmaXJzdCBhbmQgLWxuY3Vyc2VzIHNlY29uZC4KKworT3ZlcnZpZXcgb2YgRm9ybXMKKworICAgQSAgZm9ybSAgaXMgIGEgIGNvbGxlY3Rpb24gb2YgZmllbGRzOyBlYWNoIGZpZWxkIG1heSBiZSBlaXRoZXIgYSBsYWJlbAorICAgKGV4cGxhbmF0b3J5ICB0ZXh0KSAgb3IgIGEgIGRhdGEtZW50cnkgIGxvY2F0aW9uLiAgTG9uZyAgZm9ybXMgIG1heSBiZQorICAgc2VnbWVudGVkIGludG8gcGFnZXM7IGVhY2ggZW50cnkgdG8gYSBuZXcgcGFnZSBjbGVhcnMgdGhlIHNjcmVlbi4KKworICAgVG8gIG1ha2UgZm9ybXMsIHlvdSBjcmVhdGUgZ3JvdXBzIG9mIGZpZWxkcyBhbmQgY29ubmVjdCB0aGVtIHdpdGggZm9ybQorICAgZnJhbWUgb2JqZWN0czsgdGhlIGZvcm0gbGlicmFyeSBtYWtlcyB0aGlzIHJlbGF0aXZlbHkgc2ltcGxlLgorCisgICBPbmNlICBkZWZpbmVkLCAgYSBmb3JtIGNhbiBiZSBwb3N0ZWQsIHRoYXQgaXMgd3JpdHRlbiB0byBhbiBhc3NvY2lhdGVkCisgICB3aW5kb3cuICBBY3R1YWxseSwgIGVhY2ggZm9ybSBoYXMgdHdvIGFzc29jaWF0ZWQgd2luZG93czsgYSBjb250YWluaW5nCisgICB3aW5kb3cgIGluICB3aGljaCB0aGUgcHJvZ3JhbW1lciBjYW4gc2NyaWJibGUgdGl0bGVzIG9yIGJvcmRlcnMsIGFuZCBhCisgICBzdWJ3aW5kb3cgaW4gd2hpY2ggdGhlIGZvcm0gZmllbGRzIHByb3BlciBhcmUgZGlzcGxheWVkLgorCisgICBBcyAgdGhlICBmb3JtICB1c2VyICBmaWxscyBvdXQgdGhlIHBvc3RlZCBmb3JtLCBuYXZpZ2F0aW9uIGFuZCBlZGl0aW5nCisgICBrZXlzICBzdXBwb3J0ICBtb3ZlbWVudCBiZXR3ZWVuIGZpZWxkcywgZWRpdGluZyBrZXlzIHN1cHBvcnQgbW9kaWZ5aW5nCisgICBmaWVsZCwgIGFuZCBwbGFpbiB0ZXh0IGFkZHMgdG8gb3IgY2hhbmdlcyBkYXRhIGluIGEgY3VycmVudCBmaWVsZC4gVGhlCisgICBmb3JtICBsaWJyYXJ5ICBhbGxvd3MgeW91ICh0aGUgZm9ybXMgZGVzaWduZXIpIHRvIGJpbmQgZWFjaCBuYXZpZ2F0aW9uCisgICBhbmQgIGVkaXRpbmcgIGtleSAgdG8gYW55IGtleXN0cm9rZSBhY2NlcHRlZCBieSBjdXJzZXMgRmllbGRzIG1heSBoYXZlCisgICB2YWxpZGF0aW9uICBjb25kaXRpb25zIG9uIHRoZW0sIHNvIHRoYXQgdGhleSBjaGVjayBpbnB1dCBkYXRhIGZvciB0eXBlCisgICBhbmQgIHZhbHVlLiAgVGhlIGZvcm0gbGlicmFyeSBzdXBwbGllcyBhIHJpY2ggc2V0IG9mIHByZS1kZWZpbmVkIGZpZWxkCisgICB0eXBlcywgYW5kIG1ha2VzIGl0IHJlbGF0aXZlbHkgZWFzeSB0byBkZWZpbmUgbmV3IG9uZXMuCisKKyAgIE9uY2UgaXRzIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCAob3IgYWJvcnRlZCksIGEgZm9ybSBtYXkgYmUgdW5wb3N0ZWQKKyAgICh0aGF0ICBpcywgIHVuZGlzcGxheWVkKSwgIGFuZCAgZmluYWxseSAgZnJlZWQgIHRvICBtYWtlICB0aGUgIHN0b3JhZ2UKKyAgIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgaXRzIGl0ZW1zIGF2YWlsYWJsZSBmb3IgcmUtdXNlLgorCisgICBUaGUgZ2VuZXJhbCBmbG93IG9mIGNvbnRyb2wgb2YgYSBmb3JtIHByb2dyYW0gbG9va3MgbGlrZSB0aGlzOgorICAgIDEuIEluaXRpYWxpemUgY3Vyc2VzLgorICAgIDIuIENyZWF0ZSB0aGUgZm9ybSBmaWVsZHMsIHVzaW5nIG5ld19maWVsZCgpLgorICAgIDMuIENyZWF0ZSB0aGUgZm9ybSB1c2luZyBuZXdfZm9ybSgpLgorICAgIDQuIFBvc3QgdGhlIGZvcm0gdXNpbmcgcG9zdF9mb3JtKCkuCisgICAgNS4gUmVmcmVzaCB0aGUgc2NyZWVuLgorICAgIDYuIFByb2Nlc3MgdXNlciByZXF1ZXN0cyB2aWEgYW4gaW5wdXQgbG9vcC4KKyAgICA3LiBVbnBvc3QgdGhlIGZvcm0gdXNpbmcgdW5wb3N0X2Zvcm0oKS4KKyAgICA4LiBGcmVlIHRoZSBmb3JtLCB1c2luZyBmcmVlX2Zvcm0oKS4KKyAgICA5LiBGcmVlIHRoZSBmaWVsZHMgdXNpbmcgZnJlZV9maWVsZCgpLgorICAgMTAuIFRlcm1pbmF0ZSBjdXJzZXMuCisKKyAgIE5vdGUgIHRoYXQgIHRoaXMgIGxvb2tzICBtdWNoICBsaWtlICBhICBtZW51IHByb2dyYW07IHRoZSBmb3JtIGxpYnJhcnkKKyAgIGhhbmRsZXMgIHRhc2tzICB3aGljaCAgYXJlIGluIG1hbnkgd2F5cyBzaW1pbGFyLCBhbmQgaXRzIGludGVyZmFjZSB3YXMKKyAgIG9idmlvdXNseSAgZGVzaWduZWQgIHRvICByZXNlbWJsZSAgdGhhdCAgb2YgIHRoZSBtZW51IGxpYnJhcnkgd2hlcmV2ZXIKKyAgIHBvc3NpYmxlLgorCisgICBJbiAgZm9ybXMgIHByb2dyYW1zLCAgaG93ZXZlciwgdGhlIGBwcm9jZXNzIHVzZXIgcmVxdWVzdHMnIGlzIHNvbWV3aGF0CisgICBtb3JlICAgY29tcGxpY2F0ZWQgICB0aGFuICBmb3IgIG1lbnVzLiAgQmVzaWRlcyAgbWVudS1saWtlICBuYXZpZ2F0aW9uCisgICBvcGVyYXRpb25zLCB0aGUgbWVudSBkcml2ZXIgbG9vcCBoYXMgdG8gc3VwcG9ydCBmaWVsZCBlZGl0aW5nIGFuZCBkYXRhCisgICB2YWxpZGF0aW9uLgorCitDcmVhdGluZyBhbmQgRnJlZWluZyBGaWVsZHMgYW5kIEZvcm1zCisKKyAgIFRoZSBiYXNpYyBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZmllbGRzIGlzIG5ld19maWVsZCgpOgorRklFTEQgKm5ld19maWVsZChpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsICAgLyogbmV3IGZpZWxkIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgaW50IHRvcCwgaW50IGxlZnQsICAgICAgIC8qIHVwcGVyIGxlZnQgY29ybmVyICovCisgICAgICAgICAgICAgICAgIGludCBvZmZzY3JlZW4sICAgICAgICAgICAvKiBudW1iZXIgb2Ygb2Zmc2NyZWVuIHJvd3MgKi8KKyAgICAgICAgICAgICAgICAgaW50IG5idWYpOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB3b3JraW5nIGJ1ZmZlcnMgKi8KKworICAgTWVudSAgaXRlbXMgIGFsd2F5cyAgb2NjdXB5ICBhICBzaW5nbGUgIHJvdywgYnV0IGZvcm1zIGZpZWxkcyBtYXkgaGF2ZQorICAgbXVsdGlwbGUgIHJvd3MuICBTbyAgbmV3X2ZpZWxkKCkgIHJlcXVpcmVzICB5b3UgdG8gc3BlY2lmeSBhIHdpZHRoIGFuZAorICAgaGVpZ2h0ICAodGhlICBmaXJzdCAgdHdvICBhcmd1bWVudHMsICB3aGljaCAgbWlzdCBib3RoIGJlIGdyZWF0ZXIgdGhhbgorICAgemVybykuCisKKyAgIFlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpZWxkJ3MgdXBwZXIgbGVmdCBjb3JuZXIgb24KKyAgIHRoZSAgc2NyZWVuICAodGhlICB0aGlyZCAgYW5kICBmb3VydGggYXJndW1lbnRzLCB3aGljaCBtdXN0IGJlIHplcm8gb3IKKyAgIGdyZWF0ZXIpLiAgTm90ZSAgdGhhdCAgdGhlc2UgIGNvb3JkaW5hdGVzICBhcmUgIHJlbGF0aXZlICB0byAgdGhlIGZvcm0KKyAgIHN1YndpbmRvdywgIHdoaWNoIHdpbGwgY29pbmNpZGUgd2l0aCBzdGRzY3IgYnkgZGVmYXVsdCBidXQgbmVlZCBub3QgYmUKKyAgIHN0ZHNjciBpZiB5b3UndmUgZG9uZSBhbiBleHBsaWNpdCBzZXRfZm9ybV93aW4oKSBjYWxsLgorCisgICBUaGUgIGZpZnRoIGFyZ3VtZW50IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBvZmYtc2NyZWVuIHJvd3MuCisgICBJZiAgdGhpcyAgaXMgemVybywgdGhlIGVudGlyZSBmaWVsZCB3aWxsIGFsd2F5cyBiZSBkaXNwbGF5ZWQuIElmIGl0IGlzCisgICBub256ZXJvLCAgdGhlICBmb3JtICB3aWxsICBiZSAgc2Nyb2xsYWJsZSwgIHdpdGggIG9ubHkgb25lIHNjcmVlbi1mdWxsCisgICAoaW5pdGlhbGx5ICB0aGUgIHRvcCAgcGFydCkgZGlzcGxheWVkIGF0IGFueSBnaXZlbiB0aW1lLiBJZiB5b3UgbWFrZSBhCisgICBmaWVsZCAgZHluYW1pYyBhbmQgZ3JvdyBpdCBzbyBpdCB3aWxsIG5vIGxvbmdlciBmaXQgb24gdGhlIHNjcmVlbiwgdGhlCisgICBmb3JtICB3aWxsICBiZWNvbWUgIHNjcm9sbGFibGUgIGV2ZW4gIGlmICB0aGUgIG9mZnNjcmVlbiAgYXJndW1lbnQgd2FzCisgICBpbml0aWFsbHkgemVyby4KKworICAgVGhlICBmb3JtcyBsaWJyYXJ5IGFsbG9jYXRlcyBvbmUgd29ya2luZyBidWZmZXIgcGVyIGZpZWxkOyB0aGUgc2l6ZSBvZgorICAgZWFjaCBidWZmZXIgaXMgKChoZWlnaHQgKyBvZmZzY3JlZW4pKndpZHRoICsgMSwgb25lIGNoYXJhY3RlciBmb3IgZWFjaAorICAgcG9zaXRpb24gaW4gdGhlIGZpZWxkIHBsdXMgYSBOVUwgdGVybWluYXRvci4gVGhlIHNpeHRoIGFyZ3VtZW50IGlzIHRoZQorICAgbnVtYmVyICBvZiAgYWRkaXRpb25hbCAgZGF0YSAgYnVmZmVycyAgdG8gYWxsb2NhdGUgZm9yIHRoZSBmaWVsZDsgeW91cgorICAgYXBwbGljYXRpb24gY2FuIHVzZSB0aGVtIGZvciBpdHMgb3duIHB1cnBvc2VzLgorRklFTEQgKmR1cF9maWVsZChGSUVMRCAqZmllbGQsICAgICAgICAgICAgLyogZmllbGQgdG8gY29weSAqLworICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAgLyogbG9jYXRpb24gb2YgbmV3IGNvcHkgKi8KKworICAgVGhlICBmdW5jdGlvbiAgZHVwX2ZpZWxkKCkgIGR1cGxpY2F0ZXMgIGFuICBleGlzdGluZyAgZmllbGQgIGF0ICBhIG5ldworICAgbG9jYXRpb24uICBTaXplICBhbmQgIGJ1ZmZlcmluZyBpbmZvcm1hdGlvbiBhcmUgY29waWVkOyBzb21lIGF0dHJpYnV0ZQorICAgZmxhZ3MgIGFuZCAgc3RhdHVzICBiaXRzICBhcmUgIG5vdCAgKHNlZSAgdGhlICBmb3JtX2ZpZWxkX25ldygzWCkgIGZvcgorICAgZGV0YWlscykuCitGSUVMRCAqbGlua19maWVsZChGSUVMRCAqZmllbGQsICAgICAgICAgICAvKiBmaWVsZCB0byBjb3B5ICovCisgICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAvKiBsb2NhdGlvbiBvZiBuZXcgY29weSAqLworCisgICBUaGUgIGZ1bmN0aW9uICBsaW5rX2ZpZWxkKCkgYWxzbyBkdXBsaWNhdGVzIGFuIGV4aXN0aW5nIGZpZWxkIGF0IGEgbmV3CisgICBsb2NhdGlvbi4gIFRoZSBkaWZmZXJlbmNlIGZyb20gZHVwX2ZpZWxkKCkgaXMgdGhhdCBpdCBhcnJhbmdlcyBmb3IgdGhlCisgICBuZXcgZmllbGQncyBidWZmZXIgdG8gYmUgc2hhcmVkIHdpdGggdGhlIG9sZCBvbmUuCisKKyAgIEJlc2lkZXMgIHRoZSBvYnZpb3VzIHVzZSBpbiBtYWtpbmcgYSBmaWVsZCBlZGl0YWJsZSBmcm9tIHR3byBkaWZmZXJlbnQKKyAgIGZvcm0gcGFnZXMsIGxpbmtlZCBmaWVsZHMgZ2l2ZSB5b3UgYSB3YXkgdG8gaGFjayBpbiBkeW5hbWljIGxhYmVscy4gSWYKKyAgIHlvdSAgZGVjbGFyZSAgc2V2ZXJhbCBmaWVsZHMgbGlua2VkIHRvIGFuIG9yaWdpbmFsLCBhbmQgdGhlbiBtYWtlIHRoZW0KKyAgIGluYWN0aXZlLCAgY2hhbmdlcyAgZnJvbSAgdGhlIG9yaWdpbmFsIHdpbGwgc3RpbGwgYmUgcHJvcGFnYXRlZCB0byB0aGUKKyAgIGxpbmtlZCBmaWVsZHMuCisKKyAgIEFzICB3aXRoIGR1cGxpY2F0ZWQgZmllbGRzLCBsaW5rZWQgZmllbGRzIGhhdmUgYXR0cmlidXRlIGJpdHMgc2VwYXJhdGUKKyAgIGZyb20gdGhlIG9yaWdpbmFsLgorCisgICBBcyAgeW91ICBtaWdodCAgZ3Vlc3MsICBhbGwgdGhlc2UgZmllbGQtYWxsb2NhdGlvbnMgcmV0dXJuIE5VTEwgaWYgdGhlCisgICBmaWVsZCAgYWxsb2NhdGlvbiAgaXMgIG5vdCAgcG9zc2libGUgIGR1ZSB0byBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIG9yCisgICBvdXQtb2YtYm91bmRzIGFyZ3VtZW50cy4KKworICAgVG8gY29ubmVjdCBmaWVsZHMgdG8gYSBmb3JtLCB1c2UKK0ZPUk0gKm5ld19mb3JtKEZJRUxEICoqZmllbGRzKTsKKworICAgVGhpcyAgZnVuY3Rpb24gIGV4cGVjdHMgIHRvICBzZWUgIGEgIE5VTEwtdGVybWluYXRlZCAgYXJyYXkgIG9mICBmaWVsZAorICAgcG9pbnRlcnMuICBTYWlkIGZpZWxkcyBhcmUgY29ubmVjdGVkIHRvIGEgbmV3bHktYWxsb2NhdGVkIGZvcm0gb2JqZWN0OworICAgaXRzIGFkZHJlc3MgaXMgcmV0dXJuZWQgKG9yIGVsc2UgTlVMTCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscykuCisKKyAgIE5vdGUgIHRoYXQgIG5ld19maWVsZCgpICBkb2VzICBub3QgY29weSB0aGUgcG9pbnRlciBhcnJheSBpbnRvIHByaXZhdGUKKyAgIHN0b3JhZ2U7ICBpZiB5b3UgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgcG9pbnRlciBhcnJheSBkdXJpbmcgZm9ybXMKKyAgIHByb2Nlc3NpbmcsICBhbGwgbWFubmVyIG9mIGJpemFycmUgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gQWxzbyBub3RlIHRoYXQKKyAgIGFueSBnaXZlbiBmaWVsZCBtYXkgb25seSBiZSBjb25uZWN0ZWQgdG8gb25lIGZvcm0uCisKKyAgIFRoZSAgZnVuY3Rpb25zICBmcmVlX2ZpZWxkKCkgYW5kIGZyZWVfZm9ybSBhcmUgYXZhaWxhYmxlIHRvIGZyZWUgZmllbGQKKyAgIGFuZCAgZm9ybSBvYmplY3RzLiBJdCBpcyBhbiBlcnJvciB0byBhdHRlbXB0IHRvIGZyZWUgYSBmaWVsZCBjb25uZWN0ZWQKKyAgIHRvIGEgZm9ybSwgYnV0IG5vdCB2aWNlLXZlcnNhOyB0aHVzLCB5b3Ugd2lsbCBnZW5lcmFsbHkgZnJlZSB5b3VyIGZvcm0KKyAgIG9iamVjdHMgZmlyc3QuCisKK0ZldGNoaW5nIGFuZCBDaGFuZ2luZyBGaWVsZCBBdHRyaWJ1dGVzCisKKyAgIEVhY2ggIGZvcm0gIGZpZWxkICBoYXMgIGEgIG51bWJlciAgb2YgIGxvY2F0aW9uICBhbmQgIHNpemUgIGF0dHJpYnV0ZXMKKyAgIGFzc29jaWF0ZWQgIHdpdGggIGl0LiBUaGVyZSBhcmUgb3RoZXIgZmllbGQgYXR0cmlidXRlcyB1c2VkIHRvIGNvbnRyb2wKKyAgIGRpc3BsYXkgYW5kIGVkaXRpbmcgb2YgdGhlIGZpZWxkLiBTb21lIChmb3IgZXhhbXBsZSwgdGhlIE9fU1RBVElDIGJpdCkKKyAgIGludm9sdmUgIHN1ZmZpY2llbnQgIGNvbXBsaWNhdGlvbnMgIHRvIGJlIGNvdmVyZWQgaW4gc2VjdGlvbnMgb2YgdGhlaXIKKyAgIG93biBsYXRlciBvbi4gV2UgY292ZXIgdGhlIGZ1bmN0aW9ucyB1c2VkIHRvIGdldCBhbmQgc2V0IHNldmVyYWwgYmFzaWMKKyAgIGF0dHJpYnV0ZXMgaGVyZS4KKworICAgV2hlbiBhIGZpZWxkIGlzIGNyZWF0ZWQsIHRoZSBhdHRyaWJ1dGVzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIG5ld19maWVsZAorICAgZnVuY3Rpb24gIGFyZSAgY29waWVkICBmcm9tICBhbiAgaW52aXNpYmxlICBzeXN0ZW0gIGRlZmF1bHQgIGZpZWxkLiBJbgorICAgYXR0cmlidXRlLXNldHRpbmcgIGFuZCAtZmV0Y2hpbmcgZnVuY3Rpb25zLCB0aGUgYXJndW1lbnQgTlVMTCBpcyB0YWtlbgorICAgdG8gbWVhbiB0aGlzIGZpZWxkLiBDaGFuZ2VzIHRvIGl0IHBlcnNpc3QgYXMgZGVmYXVsdHMgdW50aWwgeW91ciBmb3JtcworICAgYXBwbGljYXRpb24gdGVybWluYXRlcy4KKworICBGZXRjaGluZyBTaXplIGFuZCBMb2NhdGlvbiBEYXRhCisKKyAgIFlvdSBjYW4gcmV0cmlldmUgZmllbGQgc2l6ZXMgYW5kIGxvY2F0aW9ucyB0aHJvdWdoOgoraW50IGZpZWxkX2luZm8oRklFTEQgKmZpZWxkLCAgICAgICAgICAgICAgLyogZmllbGQgZnJvbSB3aGljaCB0byBmZXRjaCAqLworICAgICAgICAgICAgICAgaW50ICpoZWlnaHQsICppbnQgd2lkdGgsICAgLyogZmllbGQgc2l6ZSAqLworICAgICAgICAgICAgICAgaW50ICp0b3AsIGludCAqbGVmdCwgICAgICAgLyogdXBwZXIgbGVmdCBjb3JuZXIgKi8KKyAgICAgICAgICAgICAgIGludCAqb2Zmc2NyZWVuLCAgICAgICAgICAgIC8qIG51bWJlciBvZiBvZmZzY3JlZW4gcm93cyAqLworICAgICAgICAgICAgICAgaW50ICpuYnVmKTsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycyAqLworCisgICBUaGlzICBmdW5jdGlvbiBpcyBhIHNvcnQgb2YgaW52ZXJzZSBvZiBuZXdfZmllbGQoKTsgaW5zdGVhZCBvZiBzZXR0aW5nCisgICBzaXplICBhbmQgIGxvY2F0aW9uIGF0dHJpYnV0ZXMgb2YgYSBuZXcgZmllbGQsIGl0IGZldGNoZXMgdGhlbSBmcm9tIGFuCisgICBleGlzdGluZyBvbmUuCisKKyAgQ2hhbmdpbmcgdGhlIEZpZWxkIExvY2F0aW9uCisKKyAgIEl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgYSBmaWVsZCdzIGxvY2F0aW9uIG9uIHRoZSBzY3JlZW46CitpbnQgbW92ZV9maWVsZChGSUVMRCAqZmllbGQsICAgICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgaW50IHRvcCwgaW50IGxlZnQpOyAgICAgICAgLyogbmV3IHVwcGVyLWxlZnQgY29ybmVyICovCisKKyAgIFlvdSBjYW4sIG9mIGNvdXJzZS4gcXVlcnkgdGhlIGN1cnJlbnQgbG9jYXRpb24gdGhyb3VnaCBmaWVsZF9pbmZvKCkuCisKKyAgVGhlIEp1c3RpZmljYXRpb24gQXR0cmlidXRlCisKKyAgIE9uZS1saW5lICBmaWVsZHMgIG1heSBiZSB1bmp1c3RpZmllZCwganVzdGlmaWVkIHJpZ2h0LCBqdXN0aWZpZWQgbGVmdCwKKyAgIG9yIGNlbnRlcmVkLiBIZXJlIGlzIGhvdyB5b3UgbWFuaXB1bGF0ZSB0aGlzIGF0dHJpYnV0ZToKK2ludCBzZXRfZmllbGRfanVzdChGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGp1c3Rtb2RlKTsgICAgICAgICAvKiBtb2RlIHRvIHNldCAqLworCitpbnQgZmllbGRfanVzdChGSUVMRCAqZmllbGQpOyAgICAgICAgICAgICAvKiBmZXRjaCBtb2RlIG9mIGZpZWxkICovCisKKyAgIFRoZSAgIG1vZGUgICB2YWx1ZXMgIGFjY2VwdGVkICBhbmQgIHJldHVybmVkICBieSAgdGhpcyAgZnVuY3Rpb25zICBhcmUKKyAgIHByZXByb2Nlc3NvciAgbWFjcm9zIE5PX0pVU1RJRklDQVRJT04sIEpVU1RJRllfUklHSFQsIEpVU1RJRllfTEVGVCwgb3IKKyAgIEpVU1RJRllfQ0VOVEVSLgorCisgIEZpZWxkIERpc3BsYXkgQXR0cmlidXRlcworCisgICBGb3IgIGVhY2ggIGZpZWxkLCAgeW91ICBjYW4gIHNldCAgYSAgZm9yZWdyb3VuZCAgYXR0cmlidXRlIGZvciBlbnRlcmVkCisgICBjaGFyYWN0ZXJzLCAgYSAgYmFja2dyb3VuZCAgYXR0cmlidXRlICBmb3IgdGhlIGVudGlyZSBmaWVsZCwgYW5kIGEgcGFkCisgICBjaGFyYWN0ZXIgIGZvciB0aGUgdW5maWxsZWQgcG9ydGlvbiBvZiB0aGUgZmllbGQuIFlvdSBjYW4gYWxzbyBjb250cm9sCisgICBwYWdpbmF0aW9uIG9mIHRoZSBmb3JtLgorCisgICBUaGlzICBncm91cCBvZiBmb3VyIGZpZWxkIGF0dHJpYnV0ZXMgY29udHJvbHMgdGhlIHZpc3VhbCBhcHBlYXJhbmNlIG9mCisgICB0aGUgIGZpZWxkIG9uIHRoZSBzY3JlZW4sIHdpdGhvdXQgYWZmZWN0aW5nIGluIGFueSB3YXkgdGhlIGRhdGEgaW4gdGhlCisgICBmaWVsZCBidWZmZXIuCitpbnQgc2V0X2ZpZWxkX2ZvcmUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGNodHlwZSBhdHRyKTsgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLworCitjaHR5cGUgZmllbGRfZm9yZShGSUVMRCAqZmllbGQpOyAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX2JhY2soRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGNodHlwZSBhdHRyKTsgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLworCitjaHR5cGUgZmllbGRfYmFjayhGSUVMRCAqZmllbGQpOyAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX3BhZChGSUVMRCAqZmllbGQsICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBpbnQgcGFkKTsgICAgICAgICAgICAgICAgLyogcGFkIGNoYXJhY3RlciB0byBzZXQgKi8KKworY2h0eXBlIGZpZWxkX3BhZChGSUVMRCAqZmllbGQpOworCitpbnQgc2V0X25ld19wYWdlKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBpbnQgZmxhZyk7ICAgICAgICAgICAgICAgLyogVFJVRSB0byBmb3JjZSBuZXcgcGFnZSAqLworCitjaHR5cGUgbmV3X3BhZ2UoRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCisgICBUaGUgYXR0cmlidXRlcyBzZXQgYW5kIHJldHVybmVkIGJ5IHRoZSBmaXJzdCBmb3VyIGZ1bmN0aW9ucyBhcmUgbm9ybWFsCisgICBjdXJzZXMoM3gpICBkaXNwbGF5ICBhdHRyaWJ1dGUgIHZhbHVlcyAgKEFfU1RBTkRPVVQsIEFfQk9MRCwgQV9SRVZFUlNFCisgICBldGMpLiAgVGhlIHBhZ2UgYml0IG9mIGEgZmllbGQgY29udHJvbHMgd2hldGhlciBpdCBpcyBkaXNwbGF5ZWQgYXQgdGhlCisgICBzdGFydCBvZiBhIG5ldyBmb3JtIHNjcmVlbi4KKworICBGaWVsZCBPcHRpb24gQml0cworCisgICBUaGVyZSAgaXMgIGFsc28gYSBsYXJnZSBjb2xsZWN0aW9uIG9mIGZpZWxkIG9wdGlvbiBiaXRzIHlvdSBjYW4gc2V0IHRvCisgICBjb250cm9sICB2YXJpb3VzICBhc3BlY3RzIG9mIGZvcm1zIHByb2Nlc3NpbmcuIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGVtCisgICB3aXRoIHRoZXNlIGZ1bmN0aW9uczoKK2ludCBzZXRfZmllbGRfb3B0cyhGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovCisKK2ludCBmaWVsZF9vcHRzX29uKEZJRUxEICpmaWVsZCwgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgICAvKiBhdHRyaWJ1dGVzIHRvIHR1cm4gb24gKi8KKworaW50IGZpZWxkX29wdHNfb2ZmKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvZmYgKi8KKworaW50IGZpZWxkX29wdHMoRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKworICAgQnkgZGVmYXVsdCwgYWxsIG9wdGlvbnMgYXJlIG9uLiBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIG9wdGlvbiBiaXRzOgorCisgICBPX1ZJU0lCTEUKKyAgICAgICAgICBDb250cm9scyAgd2hldGhlciAgdGhlICBmaWVsZCAgaXMgdmlzaWJsZSBvbiB0aGUgc2NyZWVuLiBDYW4gYmUKKyAgICAgICAgICB1c2VkICBkdXJpbmcgZm9ybSBwcm9jZXNzaW5nIHRvIGhpZGUgb3IgcG9wIHVwIGZpZWxkcyBkZXBlbmRpbmcKKyAgICAgICAgICBvbiB0aGUgdmFsdWUgb2YgcGFyZW50IGZpZWxkcy4KKworICAgT19BQ1RJVkUKKyAgICAgICAgICBDb250cm9scyAgd2hldGhlciAgdGhlICBmaWVsZCBpcyBhY3RpdmUgZHVyaW5nIGZvcm1zIHByb2Nlc3NpbmcKKyAgICAgICAgICAoaS5lLiAgdmlzaXRlZCAgYnkgIGZvcm0gIG5hdmlnYXRpb24ga2V5cykuIENhbiBiZSB1c2VkIHRvIG1ha2UKKyAgICAgICAgICBsYWJlbHMgIG9yICBkZXJpdmVkICBmaWVsZHMgd2l0aCBidWZmZXIgdmFsdWVzIGFsdGVyYWJsZSBieSB0aGUKKyAgICAgICAgICBmb3JtcyBhcHBsaWNhdGlvbiwgbm90IHRoZSB1c2VyLgorCisgICBPX1BVQkxJQworICAgICAgICAgIENvbnRyb2xzICB3aGV0aGVyIGRhdGEgaXMgZGlzcGxheWVkIGR1cmluZyBmaWVsZCBlbnRyeS4gSWYgdGhpcworICAgICAgICAgIG9wdGlvbiAgaXMgIHR1cm5lZCAgb2ZmIG9uIGEgZmllbGQsIHRoZSBsaWJyYXJ5IHdpbGwgYWNjZXB0IGFuZAorICAgICAgICAgIGVkaXQgIGRhdGEgIGluIHRoYXQgZmllbGQsIGJ1dCBpdCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgYW5kIHRoZQorICAgICAgICAgIHZpc2libGUgIGZpZWxkICBjdXJzb3IgIHdpbGwgIG5vdCAgbW92ZS4gIFlvdSAgY2FuIHR1cm4gb2ZmIHRoZQorICAgICAgICAgIE9fUFVCTElDIGJpdCB0byBkZWZpbmUgcGFzc3dvcmQgZmllbGRzLgorCisgICBPX0VESVQKKyAgICAgICAgICBDb250cm9scyAgd2hldGhlciAgdGhlICBmaWVsZCdzIGRhdGEgY2FuIGJlIG1vZGlmaWVkLiBXaGVuIHRoaXMKKyAgICAgICAgICBvcHRpb24gIGlzIG9mZiwgYWxsIGVkaXRpbmcgcmVxdWVzdHMgZXhjZXB0IFJFUV9QUkVWX0NIT0lDRSBhbmQKKyAgICAgICAgICBSRVFfTkVYVF9DSE9JQ0UgIHdpbGwgZmFpbC4gU3VjaCByZWFkLW9ubHkgZmllbGRzIG1heSBiZSB1c2VmdWwKKyAgICAgICAgICBmb3IgaGVscCBtZXNzYWdlcy4KKworICAgT19XUkFQCisgICAgICAgICAgQ29udHJvbHMgd29yZC13cmFwcGluZyBpbiBtdWx0aS1saW5lIGZpZWxkcy4gTm9ybWFsbHksIHdoZW4gYW55CisgICAgICAgICAgY2hhcmFjdGVyICBvZiAgYSAgKGJsYW5rLXNlcGFyYXRlZCkgd29yZCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgY3VycmVudCAgbGluZSwgIHRoZSAgZW50aXJlICB3b3JkICBpcyAgd3JhcHBlZCB0byB0aGUgbmV4dCBsaW5lCisgICAgICAgICAgKGFzc3VtaW5nIHRoZXJlIGlzIG9uZSkuIFdoZW4gdGhpcyBvcHRpb24gaXMgb2ZmLCB0aGUgd29yZCB3aWxsCisgICAgICAgICAgYmUgc3BsaXQgYWNyb3NzIHRoZSBsaW5lIGJyZWFrLgorCisgICBPX0JMQU5LCisgICAgICAgICAgQ29udHJvbHMgIGZpZWxkICBibGFua2luZy4gIFdoZW4gIHRoaXMgb3B0aW9uIGlzIG9uLCBlbnRlcmluZyBhCisgICAgICAgICAgY2hhcmFjdGVyICBhdCAgdGhlIGZpcnN0IGZpZWxkIHBvc2l0aW9uIGVyYXNlcyB0aGUgZW50aXJlIGZpZWxkCisgICAgICAgICAgKGV4Y2VwdCBmb3IgdGhlIGp1c3QtZW50ZXJlZCBjaGFyYWN0ZXIpLgorCisgICBPX0FVVE9TS0lQCisgICAgICAgICAgQ29udHJvbHMgIGF1dG9tYXRpYyAgc2tpcCAgdG8gIG5leHQgIGZpZWxkIHdoZW4gdGhpcyBvbmUgZmlsbHMuCisgICAgICAgICAgTm9ybWFsbHksICB3aGVuICB0aGUgIGZvcm1zIHVzZXIgdHJpZXMgdG8gdHlwZSBtb3JlIGRhdGEgaW50byBhCisgICAgICAgICAgZmllbGQgIHRoYW4gd2lsbCBmaXQsIHRoZSBlZGl0aW5nIGxvY2F0aW9uIGp1bXBzIHRvIG5leHQgZmllbGQuCisgICAgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyBvZmYsIHRoZSB1c2VyJ3MgY3Vyc29yIHdpbGwgaGFuZyBhdCB0aGUgZW5kCisgICAgICAgICAgb2YgIHRoZSAgZmllbGQuICBUaGlzICBvcHRpb24gaXMgaWdub3JlZCBpbiBkeW5hbWljIGZpZWxkcyB0aGF0CisgICAgICAgICAgaGF2ZSBub3QgcmVhY2hlZCB0aGVpciBzaXplIGxpbWl0LgorCisgICBPX05VTExPSworICAgICAgICAgIENvbnRyb2xzICAgd2hldGhlciAgdmFsaWRhdGlvbiAgaXMgIGFwcGxpZWQgIHRvICBibGFuayAgZmllbGRzLgorICAgICAgICAgIE5vcm1hbGx5LCAgaXQgIGlzIG5vdDsgdGhlIHVzZXIgY2FuIGxlYXZlIGEgZmllbGQgYmxhbmsgd2l0aG91dAorICAgICAgICAgIGludm9raW5nICB0aGUgdXN1YWwgdmFsaWRhdGlvbiBjaGVjayBvbiBleGl0LiBJZiB0aGlzIG9wdGlvbiBpcworICAgICAgICAgIG9mZiBvbiBhIGZpZWxkLCBleGl0IGZyb20gaXQgd2lsbCBpbnZva2UgYSB2YWxpZGF0aW9uIGNoZWNrLgorCisgICBPX1BBU1NPSworICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdmFsaWRhdGlvbiBvY2N1cnMgb24gZXZlcnkgZXhpdCwgb3Igb25seSBhZnRlcgorICAgICAgICAgIHRoZSAgZmllbGQgIGlzICBtb2RpZmllZC4gIE5vcm1hbGx5IHRoZSBsYXR0ZXIgaXMgdHJ1ZS4gU2V0dGluZworICAgICAgICAgIE9fUEFTU09LICBtYXkgYmUgdXNlZnVsIGlmIHlvdXIgZmllbGQncyB2YWxpZGF0aW9uIGZ1bmN0aW9uIG1heQorICAgICAgICAgIGNoYW5nZSBkdXJpbmcgZm9ybXMgcHJvY2Vzc2luZy4KKworICAgT19TVEFUSUMKKyAgICAgICAgICBDb250cm9scyAgd2hldGhlciB0aGUgZmllbGQgaXMgZml4ZWQgdG8gaXRzIGluaXRpYWwgZGltZW5zaW9ucy4KKyAgICAgICAgICBJZiAgeW91ICB0dXJuICB0aGlzICBvZmYsICB0aGUgIGZpZWxkICBiZWNvbWVzIGR5bmFtaWMgYW5kIHdpbGwKKyAgICAgICAgICBzdHJldGNoIHRvIGZpdCBlbnRlcmVkIGRhdGEuCisKKyAgIEEgIGZpZWxkJ3MgIG9wdGlvbnMgIGNhbm5vdCAgYmUgIGNoYW5nZWQgIHdoaWxlIHRoZSBmaWVsZCBpcyBjdXJyZW50bHkKKyAgIHNlbGVjdGVkLiAgSG93ZXZlciwgIG9wdGlvbnMgIG1heSBiZSBjaGFuZ2VkIG9uIHBvc3RlZCBmaWVsZHMgdGhhdCBhcmUKKyAgIG5vdCBjdXJyZW50LgorCisgICBUaGUgb3B0aW9uIHZhbHVlcyBhcmUgYml0LW1hc2tzIGFuZCBjYW4gYmUgY29tcG9zZWQgd2l0aCBsb2dpY2FsLW9yIGluCisgICB0aGUgb2J2aW91cyB3YXkuCisKK0ZpZWxkIFN0YXR1cworCisgICBFdmVyeSBmaWVsZCBoYXMgYSBzdGF0dXMgZmxhZywgd2hpY2ggaXMgc2V0IHRvIEZBTFNFIHdoZW4gdGhlIGZpZWxkIGlzCisgICBjcmVhdGVkICBhbmQgIFRSVUUgd2hlbiB0aGUgdmFsdWUgaW4gZmllbGQgYnVmZmVyIDAgY2hhbmdlcy4gVGhpcyBmbGFnCisgICBjYW4gYmUgcXVlcmllZCBhbmQgc2V0IGRpcmVjdGx5OgoraW50IHNldF9maWVsZF9zdGF0dXMoRklFTEQgKmZpZWxkLCAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cyk7ICAgICAgICAgLyogbW9kZSB0byBzZXQgKi8KKworaW50IGZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQpOyAgICAgICAgIC8qIGZldGNoIG1vZGUgb2YgZmllbGQgKi8KKworICAgU2V0dGluZyAgdGhpcyAgZmxhZyB1bmRlciBwcm9ncmFtIGNvbnRyb2wgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgdXNlIHRoZQorICAgc2FtZSBmb3JtIHJlcGVhdGVkbHksIGxvb2tpbmcgZm9yIG1vZGlmaWVkIGZpZWxkcyBlYWNoIHRpbWUuCisKKyAgIENhbGxpbmcgIGZpZWxkX3N0YXR1cygpICBvbiAgYSAgZmllbGQgbm90IGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgaW5wdXQKKyAgIHdpbGwgcmV0dXJuIGEgY29ycmVjdCB2YWx1ZS4gQ2FsbGluZyBmaWVsZF9zdGF0dXMoKSBvbiBhIGZpZWxkIHRoYXQgaXMKKyAgIGN1cnJlbnRseSAgc2VsZWN0ZWQgZm9yIGlucHV0IG1heSBub3QgbmVjZXNzYXJpbHkgZ2l2ZSBhIGNvcnJlY3QgZmllbGQKKyAgIHN0YXR1cyAgdmFsdWUsIGJlY2F1c2UgZW50ZXJlZCBkYXRhIGlzbid0IG5lY2Vzc2FyaWx5IGNvcGllZCB0byBidWZmZXIKKyAgIHplcm8gIGJlZm9yZSB0aGUgZXhpdCB2YWxpZGF0aW9uIGNoZWNrLiBUbyBndWFyYW50ZWUgdGhhdCB0aGUgcmV0dXJuZWQKKyAgIHN0YXR1cyAgdmFsdWUgIHJlZmxlY3RzIHJlYWxpdHksIGNhbGwgZmllbGRfc3RhdHVzKCkgZWl0aGVyICgxKSBpbiB0aGUKKyAgIGZpZWxkJ3MgIGV4aXQgdmFsaWRhdGlvbiBjaGVjayByb3V0aW5lLCAoMikgZnJvbSB0aGUgZmllbGQncyBvciBmb3JtJ3MKKyAgIGluaXRpYWxpemF0aW9uICAgb3IgICB0ZXJtaW5hdGlvbiAgIGhvb2tzLCAgIG9yICAgKDMpICAganVzdCAgYWZ0ZXIgIGEKKyAgIFJFUV9WQUxJREFUSU9OIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBmb3JtcyBkcml2ZXIuCisKK0ZpZWxkIFVzZXIgUG9pbnRlcgorCisgICBFYWNoICBmaWVsZCAgc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBjaGFyYWN0ZXIgcG9pbnRlciBzbG90IHRoYXQgaXMgbm90CisgICB1c2VkICBieSAgdGhlIGZvcm1zIGxpYnJhcnkuIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zCisgICB0byBzdG9yZSBwcml2YXRlIHBlci1maWVsZCBkYXRhLiBZb3UgY2FuIG1hbmlwdWxhdGUgaXQgd2l0aDoKK2ludCBzZXRfZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQsICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqdXNlcnB0cik7ICAgICAgICAvKiBtb2RlIHRvIHNldCAqLworCitjaGFyICpmaWVsZF91c2VycHRyKEZJRUxEICpmaWVsZCk7ICAgICAgICAvKiBmZXRjaCBtb2RlIG9mIGZpZWxkICovCisKKyAgIChQcm9wZXJseSwgIHRoaXMgIHVzZXIgIHBvaW50ZXIgZmllbGQgb3VnaHQgdG8gaGF2ZSAodm9pZCAqKSB0eXBlLiBUaGUKKyAgIChjaGFyICopIHR5cGUgaXMgcmV0YWluZWQgZm9yIFN5c3RlbSBWIGNvbXBhdGliaWxpdHkuKQorCisgICBJdCAgaXMgIHZhbGlkICB0byAgc2V0ICB0aGUgIHVzZXIgcG9pbnRlciBvZiB0aGUgZGVmYXVsdCBmaWVsZCAod2l0aCBhCisgICBzZXRfZmllbGRfdXNlcnB0cigpICBjYWxsICBwYXNzZWQgIGEgIE5VTEwgIGZpZWxkIHBvaW50ZXIuKSBXaGVuIGEgbmV3CisgICBmaWVsZCAgaXMgIGNyZWF0ZWQsICB0aGUgIGRlZmF1bHQtZmllbGQgIHVzZXIgIHBvaW50ZXIgIGlzICBjb3BpZWQgIHRvCisgICBpbml0aWFsaXplIHRoZSBuZXcgZmllbGQncyB1c2VyIHBvaW50ZXIuCisKK1ZhcmlhYmxlLVNpemVkIEZpZWxkcworCisgICBOb3JtYWxseSwgIGEgIGZpZWxkICBpcyBmaXhlZCBhdCB0aGUgc2l6ZSBzcGVjaWZpZWQgZm9yIGl0IGF0IGNyZWF0aW9uCisgICB0aW1lLiAgSWYsICBob3dldmVyLCB5b3UgdHVybiBvZmYgaXRzIE9fU1RBVElDIGJpdCwgaXQgYmVjb21lcyBkeW5hbWljCisgICBhbmQgIHdpbGwgIGF1dG9tYXRpY2FsbHkgIHJlc2l6ZSAgaXRzZWxmICB0byBhY2NvbW1vZGF0ZSBkYXRhIGFzIGl0IGlzCisgICBlbnRlcmVkLiAgSWYgdGhlIGZpZWxkIGhhcyBleHRyYSBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhleSB3aWxsCisgICBncm93IHJpZ2h0IGFsb25nIHdpdGggdGhlIG1haW4gaW5wdXQgYnVmZmVyLgorCisgICBBICBvbmUtbGluZSAgZHluYW1pYyAgZmllbGQgIHdpbGwgaGF2ZSBhIGZpeGVkIGhlaWdodCAoMSkgYnV0IHZhcmlhYmxlCisgICB3aWR0aCwgc2Nyb2xsaW5nIGhvcml6b250YWxseSB0byBkaXNwbGF5IGRhdGEgd2l0aGluIHRoZSBmaWVsZCBhcmVhIGFzCisgICBvcmlnaW5hbGx5ICBkaW1lbnNpb25lZCAgYW5kICBsb2NhdGVkLiBBIG11bHRpLWxpbmUgZHluYW1pYyBmaWVsZCB3aWxsCisgICBoYXZlICBhICBmaXhlZCAgd2lkdGgsIGJ1dCB2YXJpYWJsZSBoZWlnaHQgKG51bWJlciBvZiByb3dzKSwgc2Nyb2xsaW5nCisgICB2ZXJ0aWNhbGx5ICB0byAgZGlzcGxheSAgZGF0YSAgd2l0aGluICB0aGUgIGZpZWxkICBhcmVhICBhcyBvcmlnaW5hbGx5CisgICBkaW1lbnNpb25lZCBhbmQgbG9jYXRlZC4KKworICAgTm9ybWFsbHksICBhIGR5bmFtaWMgZmllbGQgaXMgYWxsb3dlZCB0byBncm93IHdpdGhvdXQgbGltaXQuIEJ1dCBpdCBpcworICAgcG9zc2libGUgIHRvIHNldCBhbiB1cHBlciBsaW1pdCBvbiB0aGUgc2l6ZSBvZiBhIGR5bmFtaWMgZmllbGQuIFlvdSBkbworICAgaXQgd2l0aCB0aGlzIGZ1bmN0aW9uOgoraW50IHNldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCAgICAgLyogZmllbGQgdG8gYWx0ZXIgKG1heSBub3QgYmUgTlVMTCkgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3NpemUpOyAgIC8qIHVwcGVyIGxpbWl0IG9uIGZpZWxkIHNpemUgKi8KKworICAgSWYgdGhlIGZpZWxkIGlzIG9uZS1saW5lLCBtYXhfc2l6ZSBpcyB0YWtlbiB0byBiZSBhIGNvbHVtbiBzaXplIGxpbWl0OworICAgaWYgIGl0ICBpcyBtdWx0aS1saW5lLCBpdCBpcyB0YWtlbiB0byBiZSBhIGxpbmUgc2l6ZSBsaW1pdC4gVG8gZGlzYWJsZQorICAgYW55ICBsaW1pdCwgIHVzZSAgYW4gYXJndW1lbnQgb2YgemVyby4gVGhlIGdyb3d0aCBsaW1pdCBjYW4gYmUgY2hhbmdlZAorICAgd2hldGhlciBvciBub3QgdGhlIE9fU1RBVElDIGJpdCBpcyBvbiwgYnV0IGhhcyBubyBlZmZlY3QgdW50aWwgaXQgaXMuCisKKyAgIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBvZiBhIGZpZWxkIGNoYW5nZSB3aGVuIGl0IGJlY29tZXMgZHluYW1pYzoKKyAgICAgKiBJZiAgdGhlcmUgIGlzICBubyAgZ3Jvd3RoIGxpbWl0LCB0aGVyZSBpcyBubyBmaW5hbCBwb3NpdGlvbiBvZiB0aGUKKyAgICAgICBmaWVsZDsgdGhlcmVmb3JlIE9fQVVUT1NLSVAgYW5kIE9fTkxfT1ZFUkxPQUQgYXJlIGlnbm9yZWQuCisgICAgICogRmllbGQganVzdGlmaWNhdGlvbiB3aWxsIGJlIGlnbm9yZWQgKHRob3VnaCB3aGF0ZXZlciBqdXN0aWZpY2F0aW9uCisgICAgICAgaXMgc2V0IHVwIHdpbGwgYmUgcmV0YWluZWQgaW50ZXJuYWxseSBhbmQgY2FuIGJlIHF1ZXJpZWQpLgorICAgICAqIFRoZSAgZHVwX2ZpZWxkKCkgYW5kIGxpbmtfZmllbGQoKSBjYWxscyBjb3B5IGR5bmFtaWMtYnVmZmVyIHNpemVzLgorICAgICAgIElmICB0aGUgIE9fU1RBVElDICBvcHRpb24gIGlzIHNldCBvbiBvbmUgb2YgYSBjb2xsZWN0aW9uIG9mIGxpbmtzLAorICAgICAgIGJ1ZmZlciAgcmVzaXppbmcgIHdpbGwgb2NjdXIgb25seSB3aGVuIHRoZSBmaWVsZCBpcyBlZGl0ZWQgdGhyb3VnaAorICAgICAgIHRoYXQgbGluay4KKyAgICAgKiBUaGUgIGNhbGwgIGZpZWxkX2luZm8oKSAgd2lsbCByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgc3RhdGljIHNpemUgb2YKKyAgICAgICB0aGUgIGZpZWxkOyAgdXNlICBkeW5hbWljX2ZpZWxkX2luZm8oKSAgdG8gIGdldCB0aGUgYWN0dWFsIGR5bmFtaWMKKyAgICAgICBzaXplLgorCitGaWVsZCBWYWxpZGF0aW9uCisKKyAgIEJ5ICBkZWZhdWx0LCAgYSAgZmllbGQgd2lsbCBhY2NlcHQgYW55IGRhdGEgdGhhdCB3aWxsIGZpdCBpbiBpdHMgaW5wdXQKKyAgIGJ1ZmZlci4gIEhvd2V2ZXIsICBpdCAgaXMgIHBvc3NpYmxlICB0byAgYXR0YWNoIGEgdmFsaWRhdGlvbiB0eXBlIHRvIGEKKyAgIGZpZWxkLiAgSWYgIHlvdSAgZG8gIHRoaXMsICBhbnkgIGF0dGVtcHQgIHRvICBsZWF2ZSB0aGUgZmllbGQgd2hpbGUgaXQKKyAgIGNvbnRhaW5zICBkYXRhICB0aGF0IGRvZXNuJ3QgbWF0Y2ggdGhlIHZhbGlkYXRpb24gdHlwZSB3aWxsIGZhaWwuIFNvbWUKKyAgIHZhbGlkYXRpb24gIHR5cGVzIGFsc28gaGF2ZSBhIGNoYXJhY3Rlci12YWxpZGl0eSBjaGVjayBmb3IgZWFjaCB0aW1lIGEKKyAgIGNoYXJhY3RlciBpcyBlbnRlcmVkIGluIHRoZSBmaWVsZC4KKworICAgQSAgIGZpZWxkJ3MgICB2YWxpZGF0aW9uICAgY2hlY2sgICAoaWYgICBhbnkpICAgaXMgICBub3QgIGNhbGxlZCAgd2hlbgorICAgc2V0X2ZpZWxkX2J1ZmZlcigpICBtb2RpZmllcyB0aGUgaW5wdXQgYnVmZmVyLCBub3Igd2hlbiB0aGF0IGJ1ZmZlciBpcworICAgY2hhbmdlZCB0aHJvdWdoIGEgbGlua2VkIGZpZWxkLgorCisgICBUaGUgIGZvcm0gbGlicmFyeSBwcm92aWRlcyBhIHJpY2ggc2V0IG9mIHByZS1kZWZpbmVkIHZhbGlkYXRpb24gdHlwZXMsCisgICBhbmQgIGdpdmVzICB5b3UgIHRoZSBjYXBhYmlsaXR5IHRvIGRlZmluZSBjdXN0b20gb25lcyBvZiB5b3VyIG93bi4gWW91CisgICBjYW4gIGV4YW1pbmUgYW5kIGNoYW5nZSBmaWVsZCB2YWxpZGF0aW9uIGF0dHJpYnV0ZXMgd2l0aCB0aGUgZm9sbG93aW5nCisgICBmdW5jdGlvbnM6CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqZnR5cGUsICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAuLi4pOyAgICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgYXJndW1lbnRzKi8KKworRklFTERUWVBFICpmaWVsZF90eXBlKEZJRUxEICpmaWVsZCk7ICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKworICAgVGhlICB2YWxpZGF0aW9uICB0eXBlICBvZiAgYSAgZmllbGQgIGlzIGNvbnNpZGVyZWQgYW4gYXR0cmlidXRlIG9mIHRoZQorICAgZmllbGQuICBBcyAgd2l0aCAgb3RoZXIgZmllbGQgYXR0cmlidXRlcywgQWxzbywgZG9pbmcgc2V0X2ZpZWxkX3R5cGUoKQorICAgd2l0aCAgYSAgTlVMTCAgZmllbGQgIGRlZmF1bHQgIHdpbGwgIGNoYW5nZSAgdGhlICBzeXN0ZW0gIGRlZmF1bHQgIGZvcgorICAgdmFsaWRhdGlvbiBvZiBuZXdseS1jcmVhdGVkIGZpZWxkcy4KKworICAgSGVyZSBhcmUgdGhlIHByZS1kZWZpbmVkIHZhbGlkYXRpb24gdHlwZXM6CisKKyAgVFlQRV9BTFBIQQorCisgICBUaGlzICBmaWVsZCAgdHlwZSAgYWNjZXB0cyAgYWxwaGFiZXRpYyAgZGF0YTsgbm8gYmxhbmtzLCBubyBkaWdpdHMsIG5vCisgICBzcGVjaWFsICBjaGFyYWN0ZXJzICAodGhpcyAgaXMgY2hlY2tlZCBhdCBjaGFyYWN0ZXItZW50cnkgdGltZSkuIEl0IGlzCisgICBzZXQgdXAgd2l0aDoKK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9BTFBIQSwgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7ICAgICAgICAgICAgLyogbWF4aW11bSB3aWR0aCBvZiBmaWVsZCAqLworCisgICBUaGUgd2lkdGggYXJndW1lbnQgc2V0cyBhIG1pbmltdW0gd2lkdGggb2YgZGF0YS4gVHlwaWNhbGx5IHlvdSdsbCB3YW50CisgICB0byAgc2V0IHRoaXMgdG8gdGhlIGZpZWxkIHdpZHRoOyBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgZmllbGQgd2lkdGgsCisgICB0aGUgIHZhbGlkYXRpb24gIGNoZWNrIHdpbGwgYWx3YXlzIGZhaWwuIEEgbWluaW11bSB3aWR0aCBvZiB6ZXJvIG1ha2VzCisgICBmaWVsZCBjb21wbGV0aW9uIG9wdGlvbmFsLgorCisgIFRZUEVfQUxOVU0KKworICAgVGhpcyAgZmllbGQgIHR5cGUgIGFjY2VwdHMgIGFscGhhYmV0aWMgIGRhdGEgYW5kIGRpZ2l0czsgbm8gYmxhbmtzLCBubworICAgc3BlY2lhbCAgY2hhcmFjdGVycyAgKHRoaXMgIGlzIGNoZWNrZWQgYXQgY2hhcmFjdGVyLWVudHJ5IHRpbWUpLiBJdCBpcworICAgc2V0IHVwIHdpdGg6CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfQUxOVU0sICAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgpOyAgICAgICAgICAgIC8qIG1heGltdW0gd2lkdGggb2YgZmllbGQgKi8KKworICAgVGhlICB3aWR0aCAgYXJndW1lbnQgc2V0cyBhIG1pbmltdW0gd2lkdGggb2YgZGF0YS4gQXMgd2l0aCBUWVBFX0FMUEhBLAorICAgdHlwaWNhbGx5ICB5b3UnbGwgd2FudCB0byBzZXQgdGhpcyB0byB0aGUgZmllbGQgd2lkdGg7IGlmIGl0J3MgZ3JlYXRlcgorICAgdGhhbiB0aGUgZmllbGQgd2lkdGgsIHRoZSB2YWxpZGF0aW9uIGNoZWNrIHdpbGwgYWx3YXlzIGZhaWwuIEEgbWluaW11bQorICAgd2lkdGggb2YgemVybyBtYWtlcyBmaWVsZCBjb21wbGV0aW9uIG9wdGlvbmFsLgorCisgIFRZUEVfRU5VTQorCisgICBUaGlzICB0eXBlICBhbGxvd3MgIHlvdSAgdG8gIHJlc3RyaWN0ICBhICBmaWVsZCdzIHZhbHVlcyB0byBiZSBhbW9uZyBhCisgICBzcGVjaWZpZWQgIHNldCAgb2YgIHN0cmluZyAgdmFsdWVzIChmb3IgZXhhbXBsZSwgdGhlIHR3by1sZXR0ZXIgcG9zdGFsCisgICBjb2RlcyBmb3IgVS5TLiBzdGF0ZXMpLiBJdCBpcyBzZXQgdXAgd2l0aDoKK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9FTlVNLCAgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKip2YWx1ZWxpc3Q7ICAgICAgLyogbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgY2hlY2tjYXNlOyAgICAgICAgIC8qIGNhc2Utc2Vuc2l0aXZlPyAqLworICAgICAgICAgICAgICAgICAgIGludCBjaGVja3VuaXF1ZSk7ICAgICAgLyogbXVzdCBzcGVjaWZ5IHVuaXF1ZWx5PyAqLworCisgICBUaGUgIHZhbHVlbGlzdCBwYXJhbWV0ZXIgbXVzdCBwb2ludCBhdCBhIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIHZhbGlkCisgICBzdHJpbmdzLiAgVGhlICBjaGVja2Nhc2UgIGFyZ3VtZW50LCBpZiB0cnVlLCBtYWtlcyBjb21wYXJpc29uIHdpdGggdGhlCisgICBzdHJpbmcgY2FzZS1zZW5zaXRpdmUuCisKKyAgIFdoZW4gIHRoZSB1c2VyIGV4aXRzIGEgVFlQRV9FTlVNIGZpZWxkLCB0aGUgdmFsaWRhdGlvbiBwcm9jZWR1cmUgdHJpZXMKKyAgIHRvICBjb21wbGV0ZSAgdGhlICBkYXRhICBpbiB0aGUgYnVmZmVyIHRvIGEgdmFsaWQgZW50cnkuIElmIGEgY29tcGxldGUKKyAgIGNob2ljZSAgc3RyaW5nIGhhcyBiZWVuIGVudGVyZWQsIGl0IGlzIG9mIGNvdXJzZSB2YWxpZC4gQnV0IGl0IGlzIGFsc28KKyAgIHBvc3NpYmxlIHRvIGVudGVyIGEgcHJlZml4IG9mIGEgdmFsaWQgc3RyaW5nIGFuZCBoYXZlIGl0IGNvbXBsZXRlZCBmb3IKKyAgIHlvdS4KKworICAgQnkgIGRlZmF1bHQsICBpZiAgeW91IGVudGVyIHN1Y2ggYSBwcmVmaXggYW5kIGl0IG1hdGNoZXMgbW9yZSB0aGFuIG9uZQorICAgdmFsdWUgIGluICB0aGUgIHN0cmluZyBsaXN0LCB0aGUgcHJlZml4IHdpbGwgYmUgY29tcGxldGVkIHRvIHRoZSBmaXJzdAorICAgbWF0Y2hpbmcgdmFsdWUuIEJ1dCB0aGUgY2hlY2t1bmlxdWUgYXJndW1lbnQsIGlmIHRydWUsIHJlcXVpcmVzIHByZWZpeAorICAgbWF0Y2hlcyB0byBiZSB1bmlxdWUgaW4gb3JkZXIgdG8gYmUgdmFsaWQuCisKKyAgIFRoZSAgIFJFUV9ORVhUX0NIT0lDRSAgIGFuZCAgUkVRX1BSRVZfQ0hPSUNFICBpbnB1dCAgcmVxdWVzdHMgIGNhbiAgYmUKKyAgIHBhcnRpY3VsYXJseSB1c2VmdWwgd2l0aCB0aGVzZSBmaWVsZHMuCisKKyAgVFlQRV9JTlRFR0VSCisKKyAgIFRoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGFuIGludGVnZXIuIEl0IGlzIHNldCB1cCBhcyBmb2xsb3dzOgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0lOVEVHRVIsICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsICAgICAgICAgICAvKiAjIHBsYWNlcyB0byB6ZXJvLXBhZCB0byAqLworICAgICAgICAgICAgICAgICAgIGludCB2bWluLCBpbnQgdm1heCk7ICAgLyogdmFsaWQgcmFuZ2UgKi8KKworICAgVmFsaWQgIGNoYXJhY3RlcnMgY29uc2lzdCBvZiBhbiBvcHRpb25hbCBsZWFkaW5nIG1pbnVzIGFuZCBkaWdpdHMuIFRoZQorICAgcmFuZ2UgY2hlY2sgaXMgcGVyZm9ybWVkIG9uIGV4aXQuIElmIHRoZSByYW5nZSBtYXhpbXVtIGlzIGxlc3MgdGhhbiBvcgorICAgZXF1YWwgdG8gdGhlIG1pbmltdW0sIHRoZSByYW5nZSBpcyBpZ25vcmVkLgorCisgICBJZiB0aGUgdmFsdWUgcGFzc2VzIGl0cyByYW5nZSBjaGVjaywgaXQgaXMgcGFkZGVkIHdpdGggYXMgbWFueSBsZWFkaW5nCisgICB6ZXJvIGRpZ2l0cyBhcyBuZWNlc3NhcnkgdG8gbWVldCB0aGUgcGFkZGluZyBhcmd1bWVudC4KKworICAgQSBUWVBFX0lOVEVHRVIgdmFsdWUgYnVmZmVyIGNhbiBjb252ZW5pZW50bHkgYmUgaW50ZXJwcmV0ZWQgd2l0aCB0aGUgQworICAgbGlicmFyeSBmdW5jdGlvbiBhdG9pKDMpLgorCisgIFRZUEVfTlVNRVJJQworCisgICBUaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhIGRlY2ltYWwgbnVtYmVyLiBJdCBpcyBzZXQgdXAgYXMgZm9sbG93czoKK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfTlVNRVJJQywgICAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsICAgICAgICAgICAgICAgLyogIyBwbGFjZXMgb2YgcHJlY2lzaW9uICovCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHZtaW4sIGRvdWJsZSB2bWF4KTsgLyogdmFsaWQgcmFuZ2UgKi8KKworICAgVmFsaWQgIGNoYXJhY3RlcnMgIGNvbnNpc3QgIG9mICBhbiAgb3B0aW9uYWwgbGVhZGluZyBtaW51cyBhbmQgZGlnaXRzLgorICAgcG9zc2libHkgIGluY2x1ZGluZyBhIGRlY2ltYWwgcG9pbnQuIElmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGxvY2FsZSdzLAorICAgdGhlICBkZWNpbWFsICBwb2ludCAgY2hhcmFjdGVyICB1c2VkICBtdXN0ICBiZSB0aGUgb25lIGRlZmluZWQgYnkgeW91cgorICAgbG9jYWxlLiAgVGhlIHJhbmdlIGNoZWNrIGlzIHBlcmZvcm1lZCBvbiBleGl0LiBJZiB0aGUgcmFuZ2UgbWF4aW11bSBpcworICAgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5pbXVtLCB0aGUgcmFuZ2UgaXMgaWdub3JlZC4KKworICAgSWYgIHRoZSAgdmFsdWUgIHBhc3NlcyAgaXRzICByYW5nZSAgY2hlY2ssICBpdCAgaXMgcGFkZGVkIHdpdGggYXMgbWFueQorICAgdHJhaWxpbmcgemVybyBkaWdpdHMgYXMgbmVjZXNzYXJ5IHRvIG1lZXQgdGhlIHBhZGRpbmcgYXJndW1lbnQuCisKKyAgIEEgVFlQRV9OVU1FUklDIHZhbHVlIGJ1ZmZlciBjYW4gY29udmVuaWVudGx5IGJlIGludGVycHJldGVkIHdpdGggdGhlIEMKKyAgIGxpYnJhcnkgZnVuY3Rpb24gYXRvZigzKS4KKworICBUWVBFX1JFR0VYUAorCisgICBUaGlzICBmaWVsZCB0eXBlIGFjY2VwdHMgZGF0YSBtYXRjaGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSXQgaXMgc2V0CisgICB1cCBhcyBmb2xsb3dzOgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX1JFR0VYUCwgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqcmVnZXhwKTsgICAgICAgICAvKiBleHByZXNzaW9uIHRvIG1hdGNoICovCisKKyAgIFRoZSAgc3ludGF4ICBmb3IgIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaXMgdGhhdCBvZiByZWdjb21wKDMpLiBUaGUgY2hlY2sKKyAgIGZvciByZWd1bGFyLWV4cHJlc3Npb24gbWF0Y2ggaXMgcGVyZm9ybWVkIG9uIGV4aXQuCisKK0RpcmVjdCBGaWVsZCBCdWZmZXIgTWFuaXB1bGF0aW9uCisKKyAgIFRoZSBjaGllZiBhdHRyaWJ1dGUgb2YgYSBmaWVsZCBpcyBpdHMgYnVmZmVyIGNvbnRlbnRzLiBXaGVuIGEgZm9ybSBoYXMKKyAgIGJlZW4gIGNvbXBsZXRlZCwgIHlvdXIgIGFwcGxpY2F0aW9uIHVzdWFsbHkgbmVlZHMgdG8ga25vdyB0aGUgc3RhdGUgb2YKKyAgIGVhY2ggZmllbGQgYnVmZmVyLiBZb3UgY2FuIGZpbmQgdGhpcyBvdXQgd2l0aDoKK2NoYXIgKmZpZWxkX2J1ZmZlcihGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmluZGV4KTsgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVyIHRvIHF1ZXJ5ICovCisKKyAgIE5vcm1hbGx5LCAgdGhlIHN0YXRlIG9mIHRoZSB6ZXJvLW51bWJlcmVkIGJ1ZmZlciBmb3IgZWFjaCBmaWVsZCBpcyBzZXQKKyAgIGJ5ICB0aGUgdXNlcidzIGVkaXRpbmcgYWN0aW9ucyBvbiB0aGF0IGZpZWxkLiBJdCdzIHNvbWV0aW1lcyB1c2VmdWwgdG8KKyAgIGJlICBhYmxlICB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSB6ZXJvLW51bWJlcmVkIChvciBzb21lIG90aGVyKSBidWZmZXIKKyAgIGZyb20geW91ciBhcHBsaWNhdGlvbjoKK2ludCBzZXRfZmllbGRfYnVmZmVyKEZJRUxEICpmaWVsZCwgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmluZGV4LCAgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVyIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUpOyAgICAgICAgICAvKiBzdHJpbmcgdmFsdWUgdG8gc2V0ICovCisKKyAgIElmICB0aGUgIGZpZWxkICBpcyAgbm90ICBsYXJnZSAgZW5vdWdoICBhbmQgIGNhbm5vdCAgYmUgIHJlc2l6ZWQgIHRvIGEKKyAgIHN1ZmZpY2llbnRseSBsYXJnZSBzaXplIHRvIGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZSwgdGhlIHZhbHVlIHdpbGwKKyAgIGJlIHRydW5jYXRlZCB0byBmaXQuCisKKyAgIENhbGxpbmcgIGZpZWxkX2J1ZmZlcigpIHdpdGggYSBudWxsIGZpZWxkIHBvaW50ZXIgd2lsbCByYWlzZSBhbiBlcnJvci4KKyAgIENhbGxpbmcgIGZpZWxkX2J1ZmZlcigpICBvbiAgYSAgZmllbGQgbm90IGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgaW5wdXQKKyAgIHdpbGwgcmV0dXJuIGEgY29ycmVjdCB2YWx1ZS4gQ2FsbGluZyBmaWVsZF9idWZmZXIoKSBvbiBhIGZpZWxkIHRoYXQgaXMKKyAgIGN1cnJlbnRseSAgc2VsZWN0ZWQgZm9yIGlucHV0IG1heSBub3QgbmVjZXNzYXJpbHkgZ2l2ZSBhIGNvcnJlY3QgZmllbGQKKyAgIGJ1ZmZlciAgdmFsdWUsIGJlY2F1c2UgZW50ZXJlZCBkYXRhIGlzbid0IG5lY2Vzc2FyaWx5IGNvcGllZCB0byBidWZmZXIKKyAgIHplcm8gIGJlZm9yZSB0aGUgZXhpdCB2YWxpZGF0aW9uIGNoZWNrLiBUbyBndWFyYW50ZWUgdGhhdCB0aGUgcmV0dXJuZWQKKyAgIGJ1ZmZlciAgdmFsdWUgIHJlZmxlY3RzICBvbi1zY3JlZW4gcmVhbGl0eSwgY2FsbCBmaWVsZF9idWZmZXIoKSBlaXRoZXIKKyAgICgxKSBpbiB0aGUgZmllbGQncyBleGl0IHZhbGlkYXRpb24gY2hlY2sgcm91dGluZSwgKDIpIGZyb20gdGhlIGZpZWxkJ3MKKyAgIG9yICBmb3JtJ3MgIGluaXRpYWxpemF0aW9uICBvciAgdGVybWluYXRpb24gaG9va3MsIG9yICgzKSBqdXN0IGFmdGVyIGEKKyAgIFJFUV9WQUxJREFUSU9OIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBmb3JtcyBkcml2ZXIuCisKK0F0dHJpYnV0ZXMgb2YgRm9ybXMKKworICAgQXMgIHdpdGggIGZpZWxkICBhdHRyaWJ1dGVzLCAgZm9ybSBhdHRyaWJ1dGVzIGluaGVyaXQgYSBkZWZhdWx0IGZyb20gYQorICAgc3lzdGVtIGRlZmF1bHQgZm9ybSBzdHJ1Y3R1cmUuIFRoZXNlIGRlZmF1bHRzIGNhbiBiZSBxdWVyaWVkIG9yIHNldCBieQorICAgb2YgdGhlc2UgZnVuY3Rpb25zIHVzaW5nIGEgZm9ybS1wb2ludGVyIGFyZ3VtZW50IG9mIE5VTEwuCisKKyAgIFRoZSBwcmluY2lwYWwgYXR0cmlidXRlIG9mIGEgZm9ybSBpcyBpdHMgZmllbGQgbGlzdC4gWW91IGNhbiBxdWVyeSBhbmQKKyAgIGNoYW5nZSB0aGlzIGxpc3Qgd2l0aDoKK2ludCBzZXRfZm9ybV9maWVsZHMoRk9STSAqZm9ybSwgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgRklFTEQgKipmaWVsZHMpOyAgICAgIC8qIGZpZWxkcyB0byBjb25uZWN0ICovCisKK2NoYXIgKmZvcm1fZmllbGRzKEZPUk0gKmZvcm0pOyAgICAgICAgICAgIC8qIGZldGNoIGZpZWxkcyBvZiBmb3JtICovCisKK2ludCBmaWVsZF9jb3VudChGT1JNICpmb3JtKTsgICAgICAgICAgICAgIC8qIGNvdW50IGNvbm5lY3QgZmllbGRzICovCisKKyAgIFRoZSAgc2Vjb25kICBhcmd1bWVudCAgb2YgIHNldF9mb3JtX2ZpZWxkcygpICBtYXkgYmUgYSBOVUxMLXRlcm1pbmF0ZWQKKyAgIGZpZWxkIHBvaW50ZXIgYXJyYXkgbGlrZSB0aGUgb25lIHJlcXVpcmVkIGJ5IG5ld19mb3JtKCkuIEluIHRoYXQgY2FzZSwKKyAgIHRoZSAgb2xkICBmaWVsZHMgIG9mICB0aGUgIGZvcm0gIGFyZSAgZGlzY29ubmVjdGVkICBidXQgbm90IGZyZWVkIChhbmQKKyAgIGVsaWdpYmxlICB0byAgYmUgIGNvbm5lY3RlZCAgdG8gIG90aGVyIGZvcm1zKSwgdGhlbiB0aGUgbmV3IGZpZWxkcyBhcmUKKyAgIGNvbm5lY3RlZC4KKworICAgSXQgIG1heSAgYWxzbyAgYmUgIG51bGwsIGluIHdoaWNoIGNhc2UgdGhlIG9sZCBmaWVsZHMgYXJlIGRpc2Nvbm5lY3RlZAorICAgKGFuZCBub3QgZnJlZWQpIGJ1dCBubyBuZXcgb25lcyBhcmUgY29ubmVjdGVkLgorCisgICBUaGUgICBmaWVsZF9jb3VudCgpICBmdW5jdGlvbiAgc2ltcGx5ICBjb3VudHMgIHRoZSAgbnVtYmVyICBvZiAgZmllbGRzCisgICBjb25uZWN0ZWQgIHRvIGEgZ2l2ZW4gZnJvbS4gSXQgcmV0dXJucyAtMSBpZiB0aGUgZm9ybS1wb2ludGVyIGFyZ3VtZW50CisgICBpcyBOVUxMLgorCitDb250cm9sIG9mIEZvcm0gRGlzcGxheQorCisgICBJbiAgdGhlICBvdmVydmlldyBzZWN0aW9uLCB5b3Ugc2F3IHRoYXQgdG8gZGlzcGxheSBhIGZvcm0geW91IG5vcm1hbGx5CisgICBzdGFydCAgYnkgIGRlZmluaW5nICBpdHMgc2l6ZSAoYW5kIGZpZWxkcyksIHBvc3RpbmcgaXQsIGFuZCByZWZyZXNoaW5nCisgICB0aGUgIHNjcmVlbi4gIFRoZXJlICBpcyAgYW4gIGhpZGRlbiAgc3RlcCBiZWZvcmUgcG9zdGluZywgd2hpY2ggaXMgdGhlCisgICBhc3NvY2lhdGlvbiAgb2YgIHRoZSAgZm9ybSAgd2l0aCAgYSAgZnJhbWUgd2luZG93IChhY3R1YWxseSwgYSBwYWlyIG9mCisgICB3aW5kb3dzKSAgd2l0aGluICB3aGljaCAgaXQgIHdpbGwgIGJlIGRpc3BsYXllZC4gQnkgZGVmYXVsdCwgdGhlIGZvcm1zCisgICBsaWJyYXJ5IGFzc29jaWF0ZXMgZXZlcnkgZm9ybSB3aXRoIHRoZSBmdWxsLXNjcmVlbiB3aW5kb3cgc3Rkc2NyLgorCisgICBCeSBtYWtpbmcgdGhpcyBzdGVwIGV4cGxpY2l0LCB5b3UgY2FuIGFzc29jaWF0ZSBhIGZvcm0gd2l0aCBhIGRlY2xhcmVkCisgICBmcmFtZSB3aW5kb3cgb24geW91ciBzY3JlZW4gZGlzcGxheS4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvCisgICBhZGFwdCAgdGhlICBmb3JtICBkaXNwbGF5ICB0byBkaWZmZXJlbnQgc2NyZWVuIHNpemVzLCBkeW5hbWljYWxseSB0aWxlCisgICBmb3JtcyAgb24gIHRoZSAgc2NyZWVuLCAgb3IgIHVzZSBhIGZvcm0gYXMgcGFydCBvZiBhbiBpbnRlcmZhY2UgbGF5b3V0CisgICBtYW5hZ2VkIGJ5IHBhbmVscy4KKworICAgVGhlICB0d28gIHdpbmRvd3MgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZm9ybSBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9ucyBhcworICAgdGhlaXIgIGFuYWxvZ3VlcyAgaW4gIHRoZSBtZW51IGxpYnJhcnkuIEJvdGggdGhlc2Ugd2luZG93cyBhcmUgcGFpbnRlZAorICAgd2hlbiB0aGUgZm9ybSBpcyBwb3N0ZWQgYW5kIGVyYXNlZCB3aGVuIHRoZSBmb3JtIGlzIHVucG9zdGVkLgorCisgICBUaGUgIG91dGVyICBvciAgZnJhbWUgIHdpbmRvdyAgaXMgIG5vdCAgb3RoZXJ3aXNlICB0b3VjaGVkIGJ5IHRoZSBmb3JtCisgICByb3V0aW5lcy4gSXQgZXhpc3RzIHNvIHRoZSBwcm9ncmFtbWVyIGNhbiBhc3NvY2lhdGUgYSB0aXRsZSwgYSBib3JkZXIsCisgICBvciAgcGVyaGFwcyAgaGVscCB0ZXh0IHdpdGggdGhlIGZvcm0gYW5kIGhhdmUgaXQgcHJvcGVybHkgcmVmcmVzaGVkIG9yCisgICBlcmFzZWQgYXQgcG9zdC91bnBvc3QgdGltZS4gVGhlIGlubmVyIHdpbmRvdyBvciBzdWJ3aW5kb3cgaXMgd2hlcmUgdGhlCisgICBjdXJyZW50IGZvcm0gcGFnZSBpcyBhY3R1YWxseSBkaXNwbGF5ZWQuCisKKyAgIEluICBvcmRlciAgdG8gZGVjbGFyZSB5b3VyIG93biBmcmFtZSB3aW5kb3cgZm9yIGEgZm9ybSwgeW91J2xsIG5lZWQgdG8KKyAgIGtub3cgIHRoZSAgc2l6ZSAgb2YgIHRoZSAgZm9ybSdzICBib3VuZGluZyByZWN0YW5nbGUuIFlvdSBjYW4gZ2V0IHRoaXMKKyAgIGluZm9ybWF0aW9uIHdpdGg6CitpbnQgc2NhbGVfZm9ybShGT1JNICpmb3JtLCAgICAgICAgICAgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICBpbnQgKnJvd3MsICAgICAgICAgICAgICAgICAvKiBmb3JtIHJvd3MgKi8KKyAgICAgICAgICAgICAgIGludCAqY29scyk7ICAgICAgICAgICAgICAgIC8qIGZvcm0gY29scyAqLworCisgICBUaGUgZm9ybSBkaW1lbnNpb25zIGFyZSBwYXNzZWQgYmFjayBpbiB0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkgdGhlCisgICBhcmd1bWVudHMuICBPbmNlICB5b3UgaGF2ZSB0aGlzIGluZm9ybWF0aW9uLCB5b3UgY2FuIHVzZSBpdCB0byBkZWNsYXJlCisgICBvZiB3aW5kb3dzLCB0aGVuIHVzZSBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zOgoraW50IHNldF9mb3JtX3dpbihGT1JNICpmb3JtLCAgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBXSU5ET1cgKndpbik7ICAgICAgICAgICAgLyogZnJhbWUgd2luZG93IHRvIGNvbm5lY3QgKi8KKworV0lORE9XICpmb3JtX3dpbihGT1JNICpmb3JtKTsgICAgICAgICAgICAgLyogZmV0Y2ggZnJhbWUgd2luZG93IG9mIGZvcm0gKi8KKworaW50IHNldF9mb3JtX3N1YihGT1JNICpmb3JtLCAgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBXSU5ET1cgKndpbik7ICAgICAgICAgICAgLyogZm9ybSBzdWJ3aW5kb3cgdG8gY29ubmVjdCAqLworCitXSU5ET1cgKmZvcm1fc3ViKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAvKiBmZXRjaCBmb3JtIHN1YndpbmRvdyBvZiBmb3JtICovCisKKyAgIE5vdGUgIHRoYXQgY3Vyc2VzIG9wZXJhdGlvbnMsIGluY2x1ZGluZyByZWZyZXNoKCksIG9uIHRoZSBmb3JtLCBzaG91bGQKKyAgIGJlIGRvbmUgb24gdGhlIGZyYW1lIHdpbmRvdywgbm90IHRoZSBmb3JtIHN1YndpbmRvdy4KKworICAgSXQgIGlzICBwb3NzaWJsZSAgdG8gIGNoZWNrICBmcm9tICB5b3VyICBhcHBsaWNhdGlvbiAgd2hldGhlciBhbGwgb2YgYQorICAgc2Nyb2xsYWJsZSAgZmllbGQgaXMgYWN0dWFsbHkgZGlzcGxheWVkIHdpdGhpbiB0aGUgbWVudSBzdWJ3aW5kb3cuIFVzZQorICAgdGhlc2UgZnVuY3Rpb25zOgoraW50IGRhdGFfYWhlYWQoRk9STSAqZm9ybSk7ICAgICAgICAgICAgICAgLyogZm9ybSB0byBiZSBxdWVyaWVkICovCisKK2ludCBkYXRhX2JlaGluZChGT1JNICpmb3JtKTsgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYmUgcXVlcmllZCAqLworCisgICBUaGUgIGZ1bmN0aW9uICBkYXRhX2FoZWFkKCkgIHJldHVybnMgIFRSVUUgaWYgKGEpIHRoZSBjdXJyZW50IGZpZWxkIGlzCisgICBvbmUtbGluZSAgYW5kICBoYXMgIHVuZGlzcGxheWVkIGRhdGEgb2ZmIHRvIHRoZSByaWdodCwgKGIpIHRoZSBjdXJyZW50CisgICBmaWVsZCBpcyBtdWx0aS1saW5lIGFuZCB0aGVyZSBpcyBkYXRhIG9mZi1zY3JlZW4gYmVsb3cgaXQuCisKKyAgIFRoZSBmdW5jdGlvbiBkYXRhX2JlaGluZCgpIHJldHVybnMgVFJVRSBpZiB0aGUgZmlyc3QgKHVwcGVyIGxlZnQgaGFuZCkKKyAgIGNoYXJhY3RlciBwb3NpdGlvbiBpcyBvZmYtc2NyZWVuIChub3QgYmVpbmcgZGlzcGxheWVkKS4KKworICAgRmluYWxseSwgIHRoZXJlICBpcyAgYSBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBmb3JtIHdpbmRvdydzIGN1cnNvciB0bworICAgdGhlIHZhbHVlIGV4cGVjdGVkIGJ5IHRoZSBmb3JtcyBkcml2ZXI6CitpbnQgcG9zX2Zvcm1fY3Vyc29yKEZPUk0gKikgICAgICAgICAgICAgICAvKiBmb3JtIHRvIGJlIHF1ZXJpZWQgKi8KKworICAgSWYgeW91ciBhcHBsaWNhdGlvbiBjaGFuZ2VzIHRoZSBmb3JtIHdpbmRvdyBjdXJzb3IsIGNhbGwgdGhpcyBmdW5jdGlvbgorICAgYmVmb3JlICAgaGFuZGluZyAgY29udHJvbCAgYmFjayAgdG8gIHRoZSAgZm9ybXMgIGRyaXZlciAgaW4gIG9yZGVyICB0bworICAgcmUtc3luY2hyb25pemUgaXQuCisKK0lucHV0IFByb2Nlc3NpbmcgaW4gdGhlIEZvcm1zIERyaXZlcgorCisgICBUaGUgZnVuY3Rpb24gZm9ybV9kcml2ZXIoKSBoYW5kbGVzIHZpcnR1YWxpemVkIGlucHV0IHJlcXVlc3RzIGZvciBmb3JtCisgICBuYXZpZ2F0aW9uLCBlZGl0aW5nLCBhbmQgdmFsaWRhdGlvbiByZXF1ZXN0cywganVzdCBhcyBtZW51X2RyaXZlciBkb2VzCisgICBmb3IgbWVudXMgKHNlZSB0aGUgc2VjdGlvbiBvbiBtZW51IGlucHV0IGhhbmRsaW5nKS4KK2ludCBmb3JtX2RyaXZlcihGT1JNICpmb3JtLCAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcGFzcyBpbnB1dCB0byAqLworICAgICAgICAgICAgICAgIGludCByZXF1ZXN0KTsgICAgICAgICAgICAgLyogZm9ybSByZXF1ZXN0IGNvZGUgKi8KKworICAgWW91ciAgaW5wdXQgIHZpcnR1YWxpemF0aW9uICBmdW5jdGlvbiAgbmVlZHMgIHRvICB0YWtlICBpbnB1dCBhbmQgdGhlbgorICAgY29udmVydCAgaXQgIHRvICBlaXRoZXIgYW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciAod2hpY2ggaXMgdHJlYXRlZCBhcworICAgZGF0YSAgdG8gIGJlICBlbnRlcmVkICBpbiAgdGhlICBjdXJyZW50bHktc2VsZWN0ZWQgIGZpZWxkKSwgb3IgYSBmb3JtcworICAgcHJvY2Vzc2luZyByZXF1ZXN0LgorCisgICBUaGUgICBmb3JtcyAgIGRyaXZlciAgcHJvdmlkZXMgIGhvb2tzICAodGhyb3VnaCAgaW5wdXQtdmFsaWRhdGlvbiAgYW5kCisgICBmaWVsZC10ZXJtaW5hdGlvbiAgZnVuY3Rpb25zKSAgd2l0aCAgd2hpY2ggIHlvdXIgIGFwcGxpY2F0aW9uIGNvZGUgY2FuCisgICBjaGVjayB0aGF0IHRoZSBpbnB1dCB0YWtlbiBieSB0aGUgZHJpdmVyIG1hdGNoZWQgd2hhdCB3YXMgZXhwZWN0ZWQuCisKKyAgUGFnZSBOYXZpZ2F0aW9uIFJlcXVlc3RzCisKKyAgIFRoZXNlICByZXF1ZXN0cyAgY2F1c2UgIHBhZ2UtbGV2ZWwgIG1vdmVzIHRocm91Z2ggdGhlIGZvcm0sIHRyaWdnZXJpbmcKKyAgIGRpc3BsYXkgb2YgYSBuZXcgZm9ybSBzY3JlZW4uCisKKyAgIFJFUV9ORVhUX1BBR0UKKyAgICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IGZvcm0gcGFnZS4KKworICAgUkVRX1BSRVZfUEFHRQorICAgICAgICAgIE1vdmUgdG8gdGhlIHByZXZpb3VzIGZvcm0gcGFnZS4KKworICAgUkVRX0ZJUlNUX1BBR0UKKyAgICAgICAgICBNb3ZlIHRvIHRoZSBmaXJzdCBmb3JtIHBhZ2UuCisKKyAgIFJFUV9MQVNUX1BBR0UKKyAgICAgICAgICBNb3ZlIHRvIHRoZSBsYXN0IGZvcm0gcGFnZS4KKworICAgVGhlc2UgIHJlcXVlc3RzICB0cmVhdCB0aGUgbGlzdCBhcyBjeWNsaWM7IHRoYXQgaXMsIFJFUV9ORVhUX1BBR0UgZnJvbQorICAgdGhlIGxhc3QgcGFnZSBnb2VzIHRvIHRoZSBmaXJzdCwgYW5kIFJFUV9QUkVWX1BBR0UgZnJvbSB0aGUgZmlyc3QgcGFnZQorICAgZ29lcyB0byB0aGUgbGFzdC4KKworICBJbnRlci1GaWVsZCBOYXZpZ2F0aW9uIFJlcXVlc3RzCisKKyAgIFRoZXNlIHJlcXVlc3RzIGhhbmRsZSBuYXZpZ2F0aW9uIGJldHdlZW4gZmllbGRzIG9uIHRoZSBzYW1lIHBhZ2UuCisKKyAgIFJFUV9ORVhUX0ZJRUxECisgICAgICAgICAgTW92ZSB0byBuZXh0IGZpZWxkLgorCisgICBSRVFfUFJFVl9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gcHJldmlvdXMgZmllbGQuCisKKyAgIFJFUV9GSVJTVF9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gdGhlIGZpcnN0IGZpZWxkLgorCisgICBSRVFfTEFTVF9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gdGhlIGxhc3QgZmllbGQuCisKKyAgIFJFUV9TTkVYVF9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gc29ydGVkIG5leHQgZmllbGQuCisKKyAgIFJFUV9TUFJFVl9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gc29ydGVkIHByZXZpb3VzIGZpZWxkLgorCisgICBSRVFfU0ZJUlNUX0ZJRUxECisgICAgICAgICAgTW92ZSB0byB0aGUgc29ydGVkIGZpcnN0IGZpZWxkLgorCisgICBSRVFfU0xBU1RfRklFTEQKKyAgICAgICAgICBNb3ZlIHRvIHRoZSBzb3J0ZWQgbGFzdCBmaWVsZC4KKworICAgUkVRX0xFRlRfRklFTEQKKyAgICAgICAgICBNb3ZlIGxlZnQgdG8gZmllbGQuCisKKyAgIFJFUV9SSUdIVF9GSUVMRAorICAgICAgICAgIE1vdmUgcmlnaHQgdG8gZmllbGQuCisKKyAgIFJFUV9VUF9GSUVMRAorICAgICAgICAgIE1vdmUgdXAgdG8gZmllbGQuCisKKyAgIFJFUV9ET1dOX0ZJRUxECisgICAgICAgICAgTW92ZSBkb3duIHRvIGZpZWxkLgorCisgICBUaGVzZSAgcmVxdWVzdHMgdHJlYXQgdGhlIGxpc3Qgb2YgZmllbGRzIG9uIGEgcGFnZSBhcyBjeWNsaWM7IHRoYXQgaXMsCisgICBSRVFfTkVYVF9GSUVMRCAgIGZyb20gICB0aGUgICBsYXN0ICAgZmllbGQgIGdvZXMgIHRvICB0aGUgIGZpcnN0LCAgYW5kCisgICBSRVFfUFJFVl9GSUVMRCBmcm9tIHRoZSBmaXJzdCBmaWVsZCBnb2VzIHRvIHRoZSBsYXN0LiBUaGUgb3JkZXIgb2YgdGhlCisgICBmaWVsZHMgZm9yIHRoZXNlIChhbmQgdGhlIFJFUV9GSVJTVF9GSUVMRCBhbmQgUkVRX0xBU1RfRklFTEQgcmVxdWVzdHMpCisgICBpcyBzaW1wbHkgdGhlIG9yZGVyIG9mIHRoZSBmaWVsZCBwb2ludGVycyBpbiB0aGUgZm9ybSBhcnJheSAoYXMgc2V0IHVwCisgICBieSBuZXdfZm9ybSgpIG9yIHNldF9mb3JtX2ZpZWxkcygpCisKKyAgIEl0ICBpcyBhbHNvIHBvc3NpYmxlIHRvIHRyYXZlcnNlIHRoZSBmaWVsZHMgYXMgaWYgdGhleSBoYWQgYmVlbiBzb3J0ZWQKKyAgIGluICBzY3JlZW4tcG9zaXRpb24gIG9yZGVyLCAgc28gIHRoZSAgc2VxdWVuY2UgIGdvZXMgbGVmdC10by1yaWdodCBhbmQKKyAgIHRvcC10by1ib3R0b20uICAgVG8gICBkbyAgIHRoaXMsICAgdXNlICAgdGhlICAgc2Vjb25kICBncm91cCAgb2YgIGZvdXIKKyAgIHNvcnRlZC1tb3ZlbWVudCByZXF1ZXN0cy4KKworICAgRmluYWxseSwgaXQgaXMgcG9zc2libGUgdG8gbW92ZSBiZXR3ZWVuIGZpZWxkcyB1c2luZyB2aXN1YWwgZGlyZWN0aW9ucworICAgdXAsICBkb3duLCByaWdodCwgYW5kIGxlZnQuIFRvIGFjY29tcGxpc2ggdGhpcywgdXNlIHRoZSB0aGlyZCBncm91cCBvZgorICAgZm91ciByZXF1ZXN0cy4gTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgcG9zaXRpb24gb2YgYSBmb3JtIGZvciBwdXJwb3NlcworICAgb2YgdGhlc2UgcmVxdWVzdHMgaXMgaXRzIHVwcGVyLWxlZnQgY29ybmVyLgorCisgICBGb3IgICBleGFtcGxlLCAgc3VwcG9zZSAgeW91ICBoYXZlICBhICBtdWx0aS1saW5lICBmaWVsZCAgQiwgIGFuZCAgdHdvCisgICBzaW5nbGUtbGluZSBmaWVsZHMgQSBhbmQgQyBvbiB0aGUgc2FtZSBsaW5lIHdpdGggQiwgd2l0aCBBIHRvIHRoZSBsZWZ0CisgICBvZiAgQiAgYW5kICBDICB0byB0aGUgcmlnaHQgb2YgQi4gQSBSRVFfTU9WRV9SSUdIVCBmcm9tIEEgd2lsbCBnbyB0byBCCisgICBvbmx5ICBpZiAgQSwgQiwgYW5kIEMgYWxsIHNoYXJlIHRoZSBzYW1lIGZpcnN0IGxpbmU7IG90aGVyd2lzZSBpdCB3aWxsCisgICBza2lwIG92ZXIgQiB0byBDLgorCisgIEludHJhLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHMKKworICAgVGhlc2UgIHJlcXVlc3RzIGRyaXZlIG1vdmVtZW50IG9mIHRoZSBlZGl0IGN1cnNvciB3aXRoaW4gdGhlIGN1cnJlbnRseQorICAgc2VsZWN0ZWQgZmllbGQuCisKKyAgIFJFUV9ORVhUX0NIQVIKKyAgICAgICAgICBNb3ZlIHRvIG5leHQgY2hhcmFjdGVyLgorCisgICBSRVFfUFJFVl9DSEFSCisgICAgICAgICAgTW92ZSB0byBwcmV2aW91cyBjaGFyYWN0ZXIuCisKKyAgIFJFUV9ORVhUX0xJTkUKKyAgICAgICAgICBNb3ZlIHRvIG5leHQgbGluZS4KKworICAgUkVRX1BSRVZfTElORQorICAgICAgICAgIE1vdmUgdG8gcHJldmlvdXMgbGluZS4KKworICAgUkVRX05FWFRfV09SRAorICAgICAgICAgIE1vdmUgdG8gbmV4dCB3b3JkLgorCisgICBSRVFfUFJFVl9XT1JECisgICAgICAgICAgTW92ZSB0byBwcmV2aW91cyB3b3JkLgorCisgICBSRVFfQkVHX0ZJRUxECisgICAgICAgICAgTW92ZSB0byBiZWdpbm5pbmcgb2YgZmllbGQuCisKKyAgIFJFUV9FTkRfRklFTEQKKyAgICAgICAgICBNb3ZlIHRvIGVuZCBvZiBmaWVsZC4KKworICAgUkVRX0JFR19MSU5FCisgICAgICAgICAgTW92ZSB0byBiZWdpbm5pbmcgb2YgbGluZS4KKworICAgUkVRX0VORF9MSU5FCisgICAgICAgICAgTW92ZSB0byBlbmQgb2YgbGluZS4KKworICAgUkVRX0xFRlRfQ0hBUgorICAgICAgICAgIE1vdmUgbGVmdCBpbiBmaWVsZC4KKworICAgUkVRX1JJR0hUX0NIQVIKKyAgICAgICAgICBNb3ZlIHJpZ2h0IGluIGZpZWxkLgorCisgICBSRVFfVVBfQ0hBUgorICAgICAgICAgIE1vdmUgdXAgaW4gZmllbGQuCisKKyAgIFJFUV9ET1dOX0NIQVIKKyAgICAgICAgICBNb3ZlIGRvd24gaW4gZmllbGQuCisKKyAgIEVhY2ggIHdvcmQgIGlzICBzZXBhcmF0ZWQgIGZyb20gIHRoZSAgcHJldmlvdXMgIGFuZCBuZXh0IGNoYXJhY3RlcnMgYnkKKyAgIHdoaXRlc3BhY2UuIFRoZSBjb21tYW5kcyB0byBtb3ZlIHRvIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxpbmUgb3IgZmllbGQKKyAgIGxvb2sgZm9yIHRoZSBmaXJzdCBvciBsYXN0IG5vbi1wYWQgY2hhcmFjdGVyIGluIHRoZWlyIHJhbmdlcy4KKworICBTY3JvbGxpbmcgUmVxdWVzdHMKKworICAgRmllbGRzICB0aGF0ICBhcmUgZHluYW1pYyBhbmQgaGF2ZSBncm93biBhbmQgZmllbGRzIGV4cGxpY2l0bHkgY3JlYXRlZAorICAgd2l0aCAgIG9mZnNjcmVlbiAgIHJvd3MgICBhcmUgICBzY3JvbGxhYmxlLiAgIE9uZS1saW5lICBmaWVsZHMgIHNjcm9sbAorICAgaG9yaXpvbnRhbGx5OyAgbXVsdGktbGluZSAgZmllbGRzIHNjcm9sbCB2ZXJ0aWNhbGx5LiBNb3N0IHNjcm9sbGluZyBpcworICAgdHJpZ2dlcmVkIGJ5IGVkaXRpbmcgYW5kIGludHJhLWZpZWxkIG1vdmVtZW50ICh0aGUgbGlicmFyeSBzY3JvbGxzIHRoZQorICAgZmllbGQgIHRvICBrZWVwICB0aGUgIGN1cnNvciAgdmlzaWJsZSkuICBJdCAgaXMgcG9zc2libGUgdG8gZXhwbGljaXRseQorICAgcmVxdWVzdCBzY3JvbGxpbmcgd2l0aCB0aGUgZm9sbG93aW5nIHJlcXVlc3RzOgorCisgICBSRVFfU0NSX0ZMSU5FCisgICAgICAgICAgU2Nyb2xsIHZlcnRpY2FsbHkgZm9yd2FyZCBhIGxpbmUuCisKKyAgIFJFUV9TQ1JfQkxJTkUKKyAgICAgICAgICBTY3JvbGwgdmVydGljYWxseSBiYWNrd2FyZCBhIGxpbmUuCisKKyAgIFJFUV9TQ1JfRlBBR0UKKyAgICAgICAgICBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGEgcGFnZS4KKworICAgUkVRX1NDUl9CUEFHRQorICAgICAgICAgIFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGEgcGFnZS4KKworICAgUkVRX1NDUl9GSFBBR0UKKyAgICAgICAgICBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGhhbGYgYSBwYWdlLgorCisgICBSRVFfU0NSX0JIUEFHRQorICAgICAgICAgIFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGhhbGYgYSBwYWdlLgorCisgICBSRVFfU0NSX0ZDSEFSCisgICAgICAgICAgU2Nyb2xsIGhvcml6b250YWxseSBmb3J3YXJkIGEgY2hhcmFjdGVyLgorCisgICBSRVFfU0NSX0JDSEFSCisgICAgICAgICAgU2Nyb2xsIGhvcml6b250YWxseSBiYWNrd2FyZCBhIGNoYXJhY3Rlci4KKworICAgUkVRX1NDUl9IRkxJTkUKKyAgICAgICAgICBTY3JvbGwgaG9yaXpvbnRhbGx5IG9uZSBmaWVsZCB3aWR0aCBmb3J3YXJkLgorCisgICBSRVFfU0NSX0hCTElORQorICAgICAgICAgIFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGZpZWxkIHdpZHRoIGJhY2t3YXJkLgorCisgICBSRVFfU0NSX0hGSEFMRgorICAgICAgICAgIFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGhhbGYgZmllbGQgd2lkdGggZm9yd2FyZC4KKworICAgUkVRX1NDUl9IQkhBTEYKKyAgICAgICAgICBTY3JvbGwgaG9yaXpvbnRhbGx5IG9uZSBoYWxmIGZpZWxkIHdpZHRoIGJhY2t3YXJkLgorCisgICBGb3Igc2Nyb2xsaW5nIHB1cnBvc2VzLCBhIHBhZ2Ugb2YgYSBmaWVsZCBpcyB0aGUgaGVpZ2h0IG9mIGl0cyB2aXNpYmxlCisgICBwYXJ0LgorCisgIEVkaXRpbmcgUmVxdWVzdHMKKworICAgV2hlbiAgeW91IHBhc3MgdGhlIGZvcm1zIGRyaXZlciBhbiBBU0NJSSBjaGFyYWN0ZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYQorICAgcmVxdWVzdCAgdG8gYWRkIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGZpZWxkJ3MgZGF0YSBidWZmZXIuIFdoZXRoZXIgdGhpcworICAgaXMgIGFuICBpbnNlcnRpb24gIG9yICBhICByZXBsYWNlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCdzIGVkaXQgbW9kZQorICAgKGluc2VydGlvbiBpcyB0aGUgZGVmYXVsdC4KKworICAgVGhlIGZvbGxvd2luZyByZXF1ZXN0cyBzdXBwb3J0IGVkaXRpbmcgdGhlIGZpZWxkIGFuZCBjaGFuZ2luZyB0aGUgZWRpdAorICAgbW9kZToKKworICAgUkVRX0lOU19NT0RFCisgICAgICAgICAgU2V0IGluc2VydGlvbiBtb2RlLgorCisgICBSRVFfT1ZMX01PREUKKyAgICAgICAgICBTZXQgb3ZlcmxheSBtb2RlLgorCisgICBSRVFfTkVXX0xJTkUKKyAgICAgICAgICBOZXcgbGluZSByZXF1ZXN0IChzZWUgYmVsb3cgZm9yIGV4cGxhbmF0aW9uKS4KKworICAgUkVRX0lOU19DSEFSCisgICAgICAgICAgSW5zZXJ0IHNwYWNlIGF0IGNoYXJhY3RlciBsb2NhdGlvbi4KKworICAgUkVRX0lOU19MSU5FCisgICAgICAgICAgSW5zZXJ0IGJsYW5rIGxpbmUgYXQgY2hhcmFjdGVyIGxvY2F0aW9uLgorCisgICBSRVFfREVMX0NIQVIKKyAgICAgICAgICBEZWxldGUgY2hhcmFjdGVyIGF0IGN1cnNvci4KKworICAgUkVRX0RFTF9QUkVWCisgICAgICAgICAgRGVsZXRlIHByZXZpb3VzIHdvcmQgYXQgY3Vyc29yLgorCisgICBSRVFfREVMX0xJTkUKKyAgICAgICAgICBEZWxldGUgbGluZSBhdCBjdXJzb3IuCisKKyAgIFJFUV9ERUxfV09SRAorICAgICAgICAgIERlbGV0ZSB3b3JkIGF0IGN1cnNvci4KKworICAgUkVRX0NMUl9FT0wKKyAgICAgICAgICBDbGVhciB0byBlbmQgb2YgbGluZS4KKworICAgUkVRX0NMUl9FT0YKKyAgICAgICAgICBDbGVhciB0byBlbmQgb2YgZmllbGQuCisKKyAgIFJFUV9DTEVBUl9GSUVMRAorICAgICAgICAgIENsZWFyIGVudGlyZSBmaWVsZC4KKworICAgVGhlICAgYmVoYXZpb3IgIG9mICB0aGUgIFJFUV9ORVdfTElORSAgYW5kICBSRVFfREVMX1BSRVYgIHJlcXVlc3RzICBpcworICAgY29tcGxpY2F0ZWQgIGFuZCAgcGFydGx5ICBjb250cm9sbGVkICBieSAgYSBwYWlyIG9mIGZvcm1zIG9wdGlvbnMuIFRoZQorICAgc3BlY2lhbCAgY2FzZXMgIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYQorICAgZmllbGQsIG9yIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGZpZWxkLgorCisgICBGaXJzdCwgd2UgY29uc2lkZXIgUkVRX05FV19MSU5FOgorCisgICBUaGUgIG5vcm1hbCAgYmVoYXZpb3IgIG9mICBSRVFfTkVXX0xJTkUgaW4gaW5zZXJ0IG1vZGUgaXMgdG8gYnJlYWsgdGhlCisgICBjdXJyZW50IGxpbmUgYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlZGl0IGN1cnNvciwgaW5zZXJ0aW5nIHRoZSBwb3J0aW9uCisgICBvZiAgdGhlICBjdXJyZW50ICBsaW5lICBhZnRlciAgdGhlICBjdXJzb3IgYXMgYSBuZXcgbGluZSBmb2xsb3dpbmcgdGhlCisgICBjdXJyZW50ICBhbmQgIG1vdmluZyB0aGUgY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBuZXcgbGluZSAoeW91CisgICBtYXkgdGhpbmsgb2YgdGhpcyBhcyBpbnNlcnRpbmcgYSBuZXdsaW5lIGluIHRoZSBmaWVsZCBidWZmZXIpLgorCisgICBUaGUgIG5vcm1hbCAgYmVoYXZpb3IgIG9mIFJFUV9ORVdfTElORSBpbiBvdmVybGF5IG1vZGUgaXMgdG8gY2xlYXIgdGhlCisgICBjdXJyZW50ICBsaW5lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBlZGl0IGN1cnNvciB0byBlbmQgb2YgbGluZS4gVGhlCisgICBjdXJzb3IgaXMgdGhlbiBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuCisKKyAgIEhvd2V2ZXIsIFJFUV9ORVdfTElORSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQsIG9yIG9uIHRoZSBsYXN0IGxpbmUKKyAgIG9mICBhICBmaWVsZCwgIGluc3RlYWQgIGRvZXMgYSBSRVFfTkVYVF9GSUVMRC4gT19OTF9PVkVSTE9BRCBvcHRpb24gaXMKKyAgIG9mZiwgdGhpcyBzcGVjaWFsIGFjdGlvbiBpcyBkaXNhYmxlZC4KKworICAgTm93LCBsZXQgdXMgY29uc2lkZXIgUkVRX0RFTF9QUkVWOgorCisgICBUaGUgIG5vcm1hbCAgYmVoYXZpb3IgIG9mICBSRVFfREVMX1BSRVYgIGlzICB0byAgZGVsZXRlICB0aGUgIHByZXZpb3VzCisgICBjaGFyYWN0ZXIuICBJZiAgaW5zZXJ0IG1vZGUgaXMgb24sIGFuZCB0aGUgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZiBhCisgICBsaW5lLCAgYW5kICB0aGUgIHRleHQgIG9uICB0aGF0ICBsaW5lIHdpbGwgZml0IG9uIHRoZSBwcmV2aW91cyBvbmUsIGl0CisgICBpbnN0ZWFkICBhcHBlbmRzICB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUgcHJldmlvdXMgb25lCisgICBhbmQgIGRlbGV0ZXMgIHRoZSAgY3VycmVudCAgbGluZSAgKHlvdSBtYXkgdGhpbmsgb2YgdGhpcyBhcyBkZWxldGluZyBhCisgICBuZXdsaW5lIGZyb20gdGhlIGZpZWxkIGJ1ZmZlcikuCisKKyAgIEhvd2V2ZXIsICBSRVFfREVMX1BSRVYgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCBpcyBpbnN0ZWFkIHRyZWF0ZWQKKyAgIGFzIGEgUkVRX1BSRVZfRklFTEQuCisKKyAgIElmICB0aGUgIE9fQlNfT1ZFUkxPQUQgIG9wdGlvbiBpcyBvZmYsIHRoaXMgc3BlY2lhbCBhY3Rpb24gaXMgZGlzYWJsZWQKKyAgIGFuZCB0aGUgZm9ybXMgZHJpdmVyIGp1c3QgcmV0dXJucyBFX1JFUVVFU1RfREVOSUVELgorCisgICBTZWUgIEZvcm0gIE9wdGlvbnMgZm9yIGRpc2N1c3Npb24gb2YgaG93IHRvIHNldCBhbmQgY2xlYXIgdGhlIG92ZXJsb2FkCisgICBvcHRpb25zLgorCisgIE9yZGVyIFJlcXVlc3RzCisKKyAgIElmIHRoZSB0eXBlIG9mIHlvdXIgZmllbGQgaXMgb3JkZXJlZCwgYW5kIGhhcyBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBmb3IKKyAgIGdldHRpbmcgIHRoZSAgbmV4dCBhbmQgcHJldmlvdXMgdmFsdWVzIG9mIHRoZSB0eXBlIGZyb20gYSBnaXZlbiB2YWx1ZSwKKyAgIHRoZXJlIGFyZSByZXF1ZXN0cyB0aGF0IGNhbiBmZXRjaCB0aGF0IHZhbHVlIGludG8gdGhlIGZpZWxkIGJ1ZmZlcjoKKworICAgUkVRX05FWFRfQ0hPSUNFCisgICAgICAgICAgUGxhY2UgdGhlIHN1Y2Nlc3NvciB2YWx1ZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgYnVmZmVyLgorCisgICBSRVFfUFJFVl9DSE9JQ0UKKyAgICAgICAgICBQbGFjZSB0aGUgcHJlZGVjZXNzb3IgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlIGJ1ZmZlci4KKworICAgT2YgdGhlIGJ1aWx0LWluIGZpZWxkIHR5cGVzLCBvbmx5IFRZUEVfRU5VTSBoYXMgYnVpbHQtaW4gc3VjY2Vzc29yIGFuZAorICAgcHJlZGVjZXNzb3IgIGZ1bmN0aW9ucy4gIFdoZW4geW91IGRlZmluZSBhIGZpZWxkIHR5cGUgb2YgeW91ciBvd24gKHNlZQorICAgQ3VzdG9tICAgVmFsaWRhdGlvbiAgIFR5cGVzKSwgIHlvdSAgY2FuICBhc3NvY2lhdGUgIG91ciAgb3duICBvcmRlcmluZworICAgZnVuY3Rpb25zLgorCisgIEFwcGxpY2F0aW9uIENvbW1hbmRzCisKKyAgIEZvcm0gIHJlcXVlc3RzICBhcmUgIHJlcHJlc2VudGVkICBhcyAgaW50ZWdlcnMgIGFib3ZlIHRoZSBjdXJzZXMgdmFsdWUKKyAgIGdyZWF0ZXIgICB0aGFuICBLRVlfTUFYICBhbmQgIGxlc3MgIHRoYW4gIG9yICBlcXVhbCAgdG8gIHRoZSAgY29uc3RhbnQKKyAgIE1BWF9DT01NQU5ELiAgSWYgIHlvdXIgIGlucHV0LXZpcnR1YWxpemF0aW9uICByb3V0aW5lICByZXR1cm5zIGEgdmFsdWUKKyAgIGFib3ZlIE1BWF9DT01NQU5ELCB0aGUgZm9ybXMgZHJpdmVyIHdpbGwgaWdub3JlIGl0LgorCitGaWVsZCBDaGFuZ2UgSG9va3MKKworICAgSXQgIGlzICBwb3NzaWJsZSAgdG8gIHNldCAgZnVuY3Rpb24gIGhvb2tzIHRvIGJlIGV4ZWN1dGVkIHdoZW5ldmVyIHRoZQorICAgY3VycmVudCAgZmllbGQgIG9yICBmb3JtICBjaGFuZ2VzLiBIZXJlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgc3VwcG9ydAorICAgdGhpczoKK3R5cGVkZWYgdm9pZCAgICAoKkhPT0spKCk7ICAgICAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQgKi8KKworaW50IHNldF9mb3JtX2luaXQoRk9STSAqZm9ybSwgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgSE9PSyBob29rKTsgICAgLyogaW5pdGlhbGl6YXRpb24gaG9vayAqLworCitIT09LIGZvcm1faW5pdChGT1JNICpmb3JtKTsgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKK2ludCBzZXRfZm9ybV90ZXJtKEZPUk0gKmZvcm0sICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIEhPT0sgaG9vayk7ICAgIC8qIHRlcm1pbmF0aW9uIGhvb2sgKi8KKworSE9PSyBmb3JtX3Rlcm0oRk9STSAqZm9ybSk7ICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX2luaXQoRk9STSAqZm9ybSwgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBIT09LIGhvb2spOyAgICAvKiBpbml0aWFsaXphdGlvbiBob29rICovCisKK0hPT0sgZmllbGRfaW5pdChGT1JNICpmb3JtKTsgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKworaW50IHNldF9maWVsZF90ZXJtKEZPUk0gKmZvcm0sICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgSE9PSyBob29rKTsgICAgLyogdGVybWluYXRpb24gaG9vayAqLworCitIT09LIGZpZWxkX3Rlcm0oRk9STSAqZm9ybSk7ICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyB5b3UgdG8gZWl0aGVyIHNldCBvciBxdWVyeSBmb3VyIGRpZmZlcmVudCBob29rcy4KKyAgIEluICBlYWNoICBvZiAgdGhlICBzZXQgIGZ1bmN0aW9ucywgIHRoZSAgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUKKyAgIGFkZHJlc3MgIG9mIGEgaG9vayBmdW5jdGlvbi4gVGhlc2UgZnVuY3Rpb25zIGRpZmZlciBvbmx5IGluIHRoZSB0aW1pbmcKKyAgIG9mIHRoZSBob29rIGNhbGwuCisKKyAgIGZvcm1faW5pdAorICAgICAgICAgIFRoaXMgIGhvb2sgIGlzIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZDsgYWxzbywganVzdCBhZnRlcgorICAgICAgICAgIGVhY2ggcGFnZSBjaGFuZ2Ugb3BlcmF0aW9uLgorCisgICBmaWVsZF9pbml0CisgICAgICAgICAgVGhpcyAgaG9vayAgaXMgY2FsbGVkIHdoZW4gdGhlIGZvcm0gaXMgcG9zdGVkOyBhbHNvLCBqdXN0IGFmdGVyCisgICAgICAgICAgZWFjaCBmaWVsZCBjaGFuZ2UKKworICAgZmllbGRfdGVybQorICAgICAgICAgIFRoaXMgIGhvb2sgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgZmllbGQgdmFsaWRhdGlvbjsgdGhhdCBpcywganVzdAorICAgICAgICAgIGJlZm9yZSB0aGUgZmllbGQgaXMgYWx0ZXJlZC4gSXQgaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcworICAgICAgICAgIHVucG9zdGVkLgorCisgICBmb3JtX3Rlcm0KKyAgICAgICAgICBUaGlzICBob29rICBpcyAgY2FsbGVkICB3aGVuICB0aGUgIGZvcm0gaXMgdW5wb3N0ZWQ7IGFsc28sIGp1c3QKKyAgICAgICAgICBiZWZvcmUgZWFjaCBwYWdlIGNoYW5nZSBvcGVyYXRpb24uCisKKyAgIENhbGxzIHRvIHRoZXNlIGhvb2tzIG1heSBiZSB0cmlnZ2VyZWQKKyAgICAxLiBXaGVuIHVzZXIgZWRpdGluZyByZXF1ZXN0cyBhcmUgcHJvY2Vzc2VkIGJ5IHRoZSBmb3JtcyBkcml2ZXIKKyAgICAyLiBXaGVuIHRoZSBjdXJyZW50IHBhZ2UgaXMgY2hhbmdlZCBieSBzZXRfY3VycmVudF9maWVsZCgpIGNhbGwKKyAgICAzLiBXaGVuIHRoZSBjdXJyZW50IGZpZWxkIGlzIGNoYW5nZWQgYnkgYSBzZXRfZm9ybV9wYWdlKCkgY2FsbAorCisgICBTZWUgRmllbGQgQ2hhbmdlIENvbW1hbmRzIGZvciBkaXNjdXNzaW9uIG9mIHRoZSBsYXR0ZXIgdHdvIGNhc2VzLgorCisgICBZb3UgIGNhbiAgc2V0ICBhIGRlZmF1bHQgaG9vayBmb3IgYWxsIGZpZWxkcyBieSBwYXNzaW5nIG9uZSBvZiB0aGUgc2V0CisgICBmdW5jdGlvbnMgYSBOVUxMIGZpcnN0IGFyZ3VtZW50LgorCisgICBZb3UgIGNhbiAgZGlzYWJsZSAgYW55IG9mIHRoZXNlIGhvb2tzIGJ5IChyZSlzZXR0aW5nIHRoZW0gdG8gTlVMTCwgdGhlCisgICBkZWZhdWx0IHZhbHVlLgorCitGaWVsZCBDaGFuZ2UgQ29tbWFuZHMKKworICAgTm9ybWFsbHksICBuYXZpZ2F0aW9uICB0aHJvdWdoICB0aGUgIGZvcm0gd2lsbCBiZSBkcml2ZW4gYnkgdGhlIHVzZXIncworICAgaW5wdXQgIHJlcXVlc3RzLiAgQnV0ICBzb21ldGltZXMgIGl0ICBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBtb3ZlIHRoZQorICAgZm9jdXMgIGZvciAgZWRpdGluZyAgYW5kIHZpZXdpbmcgdW5kZXIgY29udHJvbCBvZiB5b3VyIGFwcGxpY2F0aW9uLCBvcgorICAgYXNrICB3aGljaCAgZmllbGQgaXQgY3VycmVudGx5IGlzIGluLiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoZWxwIHlvdQorICAgYWNjb21wbGlzaCB0aGlzOgoraW50IHNldF9jdXJyZW50X2ZpZWxkKEZPUk0gKmZvcm0sICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICpmaWVsZCk7ICAgICAgLyogZmllbGQgdG8gc2hpZnQgdG8gKi8KKworRklFTEQgKmN1cnJlbnRfZmllbGQoRk9STSAqZm9ybSk7ICAgICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworCitpbnQgZmllbGRfaW5kZXgoRk9STSAqZm9ybSwgICAgICAgICAgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICAgRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAvKiBmaWVsZCB0byBnZXQgaW5kZXggb2YgKi8KKworICAgVGhlIGZ1bmN0aW9uIGZpZWxkX2luZGV4KCkgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIGZpZWxkIGluIHRoZQorICAgZ2l2ZW4gICBmb3JtJ3MgICBmaWVsZCAgYXJyYXkgICh0aGUgIGFycmF5ICBwYXNzZWQgIHRvICBuZXdfZm9ybSgpICBvcgorICAgc2V0X2Zvcm1fZmllbGRzKCkpLgorCisgICBUaGUgIGluaXRpYWwgIGN1cnJlbnQgZmllbGQgb2YgYSBmb3JtIGlzIHRoZSBmaXJzdCBhY3RpdmUgZmllbGQgb24gdGhlCisgICBmaXJzdCBwYWdlLiBUaGUgZnVuY3Rpb24gc2V0X2Zvcm1fZmllbGRzKCkgcmVzZXRzIHRoaXMuCisKKyAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gbW92ZSBhcm91bmQgYnkgcGFnZXMuCitpbnQgc2V0X2Zvcm1fcGFnZShGT1JNICpmb3JtLCAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgcGFnZSk7ICAgICAgICAgICAgICAvKiBwYWdlIHRvIGdvIHRvICgwLW9yaWdpbikgKi8KKworaW50IGZvcm1fcGFnZShGT1JNICpmb3JtKTsgICAgICAgICAgICAgICAgLyogcmV0dXJuIGZvcm0ncyBjdXJyZW50IHBhZ2UgKi8KKworICAgVGhlICAgaW5pdGlhbCAgcGFnZSAgb2YgIGEgIG5ld2x5LWNyZWF0ZWQgIGZvcm0gIGlzICAwLiAgVGhlICBmdW5jdGlvbgorICAgc2V0X2Zvcm1fZmllbGRzKCkgcmVzZXRzIHRoaXMuCisKK0Zvcm0gT3B0aW9ucworCisgICBMaWtlICBmaWVsZHMsICBmb3JtcyBtYXkgaGF2ZSBjb250cm9sIG9wdGlvbiBiaXRzLiBUaGV5IGNhbiBiZSBjaGFuZ2VkCisgICBvciBxdWVyaWVkIHdpdGggdGhlc2UgZnVuY3Rpb25zOgoraW50IHNldF9mb3JtX29wdHMoRk9STSAqZm9ybSwgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLworCitpbnQgZm9ybV9vcHRzX29uKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgICAvKiBhdHRyaWJ1dGVzIHRvIHR1cm4gb24gKi8KKworaW50IGZvcm1fb3B0c19vZmYoRk9STSAqZm9ybSwgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9mZiAqLworCitpbnQgZm9ybV9vcHRzKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKKyAgIEJ5IGRlZmF1bHQsIGFsbCBvcHRpb25zIGFyZSBvbi4gSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBvcHRpb24gYml0czoKKworICAgT19OTF9PVkVSTE9BRAorICAgICAgICAgIEVuYWJsZSAgb3ZlcmxvYWRpbmcgIG9mICBSRVFfTkVXX0xJTkUgIGFzICBkZXNjcmliZWQgaW4gRWRpdGluZworICAgICAgICAgIFJlcXVlc3RzLiBUaGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gaXMgaWdub3JlZCBvbiBkeW5hbWljIGZpZWxkcworICAgICAgICAgIHRoYXQgIGhhdmUgIG5vdCAgcmVhY2hlZCAgdGhlaXIgIHNpemUgbGltaXQ7IHRoZXNlIGhhdmUgbm8gbGFzdAorICAgICAgICAgIGxpbmUsICBzbyAgdGhlICBjaXJjdW1zdGFuY2VzICBmb3IgIHRyaWdnZXJpbmcgYSBSRVFfTkVYVF9GSUVMRAorICAgICAgICAgIG5ldmVyIGFyaXNlLgorCisgICBPX0JTX09WRVJMT0FECisgICAgICAgICAgRW5hYmxlICBvdmVybG9hZGluZyAgb2YgIFJFUV9ERUxfUFJFViAgYXMgIGRlc2NyaWJlZCBpbiBFZGl0aW5nCisgICAgICAgICAgUmVxdWVzdHMuCisKKyAgIFRoZSBvcHRpb24gdmFsdWVzIGFyZSBiaXQtbWFza3MgYW5kIGNhbiBiZSBjb21wb3NlZCB3aXRoIGxvZ2ljYWwtb3IgaW4KKyAgIHRoZSBvYnZpb3VzIHdheS4KKworQ3VzdG9tIFZhbGlkYXRpb24gVHlwZXMKKworICAgVGhlICBmb3JtIGxpYnJhcnkgZ2l2ZXMgeW91IHRoZSBjYXBhYmlsaXR5IHRvIGRlZmluZSBjdXN0b20gdmFsaWRhdGlvbgorICAgdHlwZXMgIG9mICB5b3VyICBvd24uICBGdXJ0aGVyLCAgdGhlICBvcHRpb25hbCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBvZgorICAgc2V0X2ZpZWxkX3R5cGUgZWZmZWN0aXZlbHkgYWxsb3cgeW91IHRvIHBhcmFtZXRlcml6ZSB2YWxpZGF0aW9uIHR5cGVzLgorICAgTW9zdCAgb2YgdGhlIGNvbXBsaWNhdGlvbnMgaW4gdGhlIHZhbGlkYXRpb24tdHlwZSBpbnRlcmZhY2UgaGF2ZSB0byBkbworICAgd2l0aCB0aGUgaGFuZGxpbmcgb2YgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIHdpdGhpbiBjdXN0b20gdmFsaWRhdGlvbgorICAgZnVuY3Rpb25zLgorCisgIFVuaW9uIFR5cGVzCisKKyAgIFRoZSAgc2ltcGxlc3QgIHdheSAgdG8gY3JlYXRlIGEgY3VzdG9tIGRhdGEgdHlwZSBpcyB0byBjb21wb3NlIGl0IGZyb20KKyAgIHR3byBwcmVleGlzdGluZyBvbmVzOgorRklFTEQgKmxpbmtfZmllbGR0eXBlKEZJRUxEVFlQRSAqdHlwZTEsCisgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXBlMik7CisKKyAgIFRoaXMgIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmaWVsZCB0eXBlIHRoYXQgd2lsbCBhY2NlcHQgYW55IG9mIHRoZSB2YWx1ZXMKKyAgIGxlZ2FsICBmb3IgIGVpdGhlciAgb2YgIGl0cyAgYXJndW1lbnQgZmllbGQgdHlwZXMgKHdoaWNoIG1heSBiZSBlaXRoZXIKKyAgIHByZWRlZmluZWQgIG9yICBwcm9ncmFtbWVyLWRlZmluZWQpLiAgSWYgYSBzZXRfZmllbGRfdHlwZSgpIGNhbGwgbGF0ZXIKKyAgIHJlcXVpcmVzICBhcmd1bWVudHMsICB0aGUgbmV3IGNvbXBvc2l0ZSB0eXBlIGV4cGVjdHMgYWxsIGFyZ3VtZW50cyBmb3IKKyAgIHRoZSAgZmlyc3QgIHR5cGUsICB0aGFuICBhbGwgYXJndW1lbnRzIGZvciB0aGUgc2Vjb25kLiBPcmRlciBmdW5jdGlvbnMKKyAgIChzZWUgIE9yZGVyIFJlcXVlc3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudCB0eXBlcyB3aWxsIHdvcmsgb24KKyAgIHRoZSAgY29tcG9zaXRlOyAgd2hhdCBpdCBkb2VzIGlzIGNoZWNrIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUKKyAgIGZpcnN0ICB0eXBlLCAgdGhlbiAgZm9yICB0aGUgIHNlY29uZCwgIHRvICBmaWd1cmUgd2hhdCB0eXBlIHRoZSBidWZmZXIKKyAgIGNvbnRlbnRzIHNob3VsZCBiZSB0cmVhdGVkIGFzLgorCisgIE5ldyBGaWVsZCBUeXBlcworCisgICBUbyAgY3JlYXRlICBhIGZpZWxkIHR5cGUgZnJvbSBzY3JhdGNoLCB5b3UgbmVlZCB0byBzcGVjaWZ5IG9uZSBvciBib3RoCisgICBvZiB0aGUgZm9sbG93aW5nIHRoaW5nczoKKyAgICAgKiBBICBjaGFyYWN0ZXItdmFsaWRhdGlvbiBmdW5jdGlvbiwgdG8gY2hlY2sgZWFjaCBjaGFyYWN0ZXIgYXMgaXQgaXMKKyAgICAgICBlbnRlcmVkLgorICAgICAqIEEgZmllbGQtdmFsaWRhdGlvbiBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIG9uIGV4aXQgZnJvbSB0aGUgZmllbGQuCisKKyAgIEhlcmUncyBob3cgeW91IGRvIHRoYXQ6Cit0eXBlZGVmIGludCAgICAgKCpIT09LKSgpOyAgICAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyBpbnQgKi8KKworRklFTERUWVBFICpuZXdfZmllbGR0eXBlKEhPT0sgZl92YWxpZGF0ZSwgLyogZmllbGQgdmFsaWRhdG9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgSE9PSyBjX3ZhbGlkYXRlKSAvKiBjaGFyYWN0ZXIgdmFsaWRhdG9yICovCisKKworaW50IGZyZWVfZmllbGR0eXBlKEZJRUxEVFlQRSAqZnR5cGUpOyAgICAgLyogdHlwZSB0byBmcmVlICovCisKKyAgIEF0IGxlYXN0IG9uZSBvZiB0aGUgYXJndW1lbnRzIG9mIG5ld19maWVsZHR5cGUoKSBtdXN0IGJlIG5vbi1OVUxMLiBUaGUKKyAgIGZvcm1zICBkcml2ZXIgIHdpbGwgIGF1dG9tYXRpY2FsbHkgIGNhbGwgIHRoZSAgbmV3ICB0eXBlJ3MgIHZhbGlkYXRpb24KKyAgIGZ1bmN0aW9ucyBhdCBhcHByb3ByaWF0ZSBwb2ludHMgaW4gcHJvY2Vzc2luZyBhIGZpZWxkIG9mIHRoZSBuZXcgdHlwZS4KKworICAgVGhlICBmdW5jdGlvbiAgZnJlZV9maWVsZHR5cGUoKSAgZGVhbGxvY2F0ZXMgIHRoZSAgYXJndW1lbnQgZmllbGR0eXBlLAorICAgZnJlZWluZyBhbGwgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggaXQuCisKKyAgIE5vcm1hbGx5LCAgYSBmaWVsZCB2YWxpZGF0b3IgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgYXR0ZW1wdHMgdG8gbGVhdmUKKyAgIHRoZSAgZmllbGQuICBJdHMgIGZpcnN0IGFyZ3VtZW50IGlzIGEgZmllbGQgcG9pbnRlciwgZnJvbSB3aGljaCBpdCBjYW4KKyAgIGdldCAgdG8gIGZpZWxkIGJ1ZmZlciAwIGFuZCB0ZXN0IGl0LiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBUUlVFLCB0aGUKKyAgIG9wZXJhdGlvbiAgc3VjY2VlZHM7IGlmIGl0IHJldHVybnMgRkFMU0UsIHRoZSBlZGl0IGN1cnNvciBzdGF5cyBpbiB0aGUKKyAgIGZpZWxkLgorCisgICBBICBjaGFyYWN0ZXIgIHZhbGlkYXRvciAgZ2V0cyAgdGhlICBjaGFyYWN0ZXIgIHBhc3NlZCAgaW4gIGFzICBhIGZpcnN0CisgICBhcmd1bWVudC4gIEl0ICB0b28gc2hvdWxkIHJldHVybiBUUlVFIGlmIHRoZSBjaGFyYWN0ZXIgaXMgdmFsaWQsIEZBTFNFCisgICBvdGhlcndpc2UuCisKKyAgVmFsaWRhdGlvbiBGdW5jdGlvbiBBcmd1bWVudHMKKworICAgWW91ciAgZmllbGQtICBhbmQgIGNoYXJhY3Rlci0gIHZhbGlkYXRpb24gIGZ1bmN0aW9ucyAgd2lsbCBiZSBwYXNzZWQgYQorICAgc2Vjb25kICBhcmd1bWVudCAgYXMgIHdlbGwuICBUaGlzICBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFkZHJlc3Mgb2YgYQorICAgc3RydWN0dXJlICAgKHdoaWNoICAgd2UnbGwgICBjYWxsICBhICBwaWxlKSAgYnVpbHQgIGZyb20gIGFueSAgb2YgIHRoZQorICAgZmllbGQtdHlwZS1zcGVjaWZpYyAgYXJndW1lbnRzICBwYXNzZWQgdG8gc2V0X2ZpZWxkX3R5cGUoKS4gSWYgbm8gc3VjaAorICAgYXJndW1lbnRzICBhcmUgIGRlZmluZWQgZm9yIHRoZSBmaWVsZCB0eXBlLCB0aGlzIHBpbGUgcG9pbnRlciBhcmd1bWVudAorICAgd2lsbCBiZSBOVUxMLgorCisgICBJbiBvcmRlciB0byBhcnJhbmdlIGZvciBzdWNoIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8geW91ciB2YWxpZGF0aW9uCisgICBmdW5jdGlvbnMsICB5b3UgIG11c3QgIGFzc29jaWF0ZSAgYSAgc21hbGwgIHNldCAgb2Ygc3RvcmFnZS1tYW5hZ2VtZW50CisgICBmdW5jdGlvbnMgd2l0aCB0aGUgdHlwZS4gVGhlIGZvcm1zIGRyaXZlciB3aWxsIHVzZSB0aGVzZSB0byBzeW50aGVzaXplCisgICBhICBwaWxlIGZyb20gdGhlIHRyYWlsaW5nIGFyZ3VtZW50cyBvZiBlYWNoIHNldF9maWVsZF90eXBlKCkgYXJndW1lbnQsCisgICBhbmQgYSBwb2ludGVyIHRvIHRoZSBwaWxlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KKworICAgSGVyZSBpcyBob3cgeW91IG1ha2UgdGhlIGFzc29jaWF0aW9uOgordHlwZWRlZiBjaGFyICAgICooKlBUUkhPT0spKCk7ICAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIChjaGFyICopICovCit0eXBlZGVmIHZvaWQgICAgKCpWT0lESE9PSykoKTsgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgdm9pZCAqLworCitpbnQgc2V0X2ZpZWxkdHlwZV9hcmcoRklFTERUWVBFICp0eXBlLCAgICAvKiB0eXBlIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgUFRSSE9PSyBtYWtlX3N0ciwgICAvKiBtYWtlIHN0cnVjdHVyZSBmcm9tIGFyZ3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICBQVFJIT09LIGNvcHlfc3RyLCAgIC8qIG1ha2UgY29weSBvZiBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBWT0lESE9PSyBmcmVlX3N0cik7IC8qIGZyZWUgc3RydWN0dXJlIHN0b3JhZ2UgKi8KKworICAgSGVyZSBpcyBob3cgdGhlIHN0b3JhZ2UtbWFuYWdlbWVudCBob29rcyBhcmUgdXNlZDoKKworICAgbWFrZV9zdHIKKyAgICAgICAgICBUaGlzICBmdW5jdGlvbiAgaXMgIGNhbGxlZCAgYnkgIHNldF9maWVsZF90eXBlKCkuICBJdCAgZ2V0cyBvbmUKKyAgICAgICAgICBhcmd1bWVudCwgIGEgIHZhX2xpc3QgIG9mIHRoZSB0eXBlLXNwZWNpZmljIGFyZ3VtZW50cyBwYXNzZWQgdG8KKyAgICAgICAgICBzZXRfZmllbGRfdHlwZSgpLiAgSXQgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcGlsZSBwb2ludGVyIHRvIGEKKyAgICAgICAgICBkYXRhIHN0cnVjdHVyZSB0aGF0IGVuY2Fwc3VsYXRlcyB0aG9zZSBhcmd1bWVudHMuCisKKyAgIGNvcHlfc3RyCisgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZm9ybSBsaWJyYXJ5IGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlCisgICAgICAgICAgbmV3ICBmaWVsZCAgaW5zdGFuY2VzLiAgSXQgIGlzIGV4cGVjdGVkIHRvIHRha2UgYSBwaWxlIHBvaW50ZXIsCisgICAgICAgICAgY29weSAgdGhlICBwaWxlIHRvIGFsbG9jYXRlZCBzdG9yYWdlLCBhbmQgcmV0dXJuIHRoZSBhZGRyZXNzIG9mCisgICAgICAgICAgdGhlIHBpbGUgY29weS4KKworICAgZnJlZV9zdHIKKyAgICAgICAgICBUaGlzICAgZnVuY3Rpb24gIGlzICBjYWxsZWQgIGJ5ICBmaWVsZC0gIGFuZCAgdHlwZS1kZWFsbG9jYXRpb24KKyAgICAgICAgICByb3V0aW5lcyAgaW4gdGhlIGxpYnJhcnkuIEl0IHRha2VzIGEgcGlsZSBwb2ludGVyIGFyZ3VtZW50LCBhbmQKKyAgICAgICAgICBpcyBleHBlY3RlZCB0byBmcmVlIHRoZSBzdG9yYWdlIG9mIHRoYXQgcGlsZS4KKworICAgVGhlICBtYWtlX3N0ciAgYW5kICBjb3B5X3N0ciAgZnVuY3Rpb25zICBtYXkgIHJldHVybiAgTlVMTCAgdG8gIHNpZ25hbAorICAgYWxsb2NhdGlvbiAgZmFpbHVyZS4gIFRoZSAgbGlicmFyeSAgcm91dGluZXMgIHdpbGwgdGhhdCBjYWxsIHRoZW0gd2lsbAorICAgcmV0dXJuICBlcnJvciAgaW5kaWNhdGlvbiAgd2hlbiAgdGhpcyAgaGFwcGVucy4gIFRodXMsIHlvdXIgdmFsaWRhdGlvbgorICAgZnVuY3Rpb25zICBzaG91bGQgIG5ldmVyICBzZWUgIGEgIE5VTEwgZmlsZSBwb2ludGVyIGFuZCBuZWVkIG5vdCBjaGVjaworICAgc3BlY2lhbGx5IGZvciBpdC4KKworICBPcmRlciBGdW5jdGlvbnMgRm9yIEN1c3RvbSBUeXBlcworCisgICBTb21lICBjdXN0b20gIGZpZWxkICB0eXBlcyBhcmUgc2ltcGx5IG9yZGVyZWQgaW4gdGhlIHNhbWUgd2VsbC1kZWZpbmVkCisgICB3YXkgIHRoYXQgIFRZUEVfRU5VTSAgaXMuICBGb3IgIHN1Y2ggIHR5cGVzLCAgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lCisgICBzdWNjZXNzb3IgYW5kIHByZWRlY2Vzc29yIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBSRVFfTkVYVF9DSE9JQ0UgYW5kCisgICBSRVFfUFJFVl9DSE9JQ0UgcmVxdWVzdHMuIEhlcmUncyBob3c6Cit0eXBlZGVmIGludCAgICAgKCpJTlRIT09LKSgpOyAgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgaW50ICovCisKK2ludCBzZXRfZmllbGR0eXBlX2FyZyhGSUVMRFRZUEUgKnR5cGUsICAgIC8qIHR5cGUgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBJTlRIT09LIHN1Y2MsICAgICAgIC8qIGdldCBzdWNjZXNzb3IgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBJTlRIT09LIHByZWQpOyAgICAgIC8qIGdldCBwcmVkZWNlc3NvciB2YWx1ZSAqLworCisgICBUaGUgIHN1Y2Nlc3NvciAgYW5kICBwcmVkZWNlc3NvciAgYXJndW1lbnRzICB3aWxsICBlYWNoICBiZSBwYXNzZWQgdHdvCisgICBhcmd1bWVudHM7ICBhIGZpZWxkIHBvaW50ZXIsIGFuZCBhIHBpbGUgcG9pbnRlciAoYXMgZm9yIHRoZSB2YWxpZGF0aW9uCisgICBmdW5jdGlvbnMpLiAgVGhleSAgYXJlICBleHBlY3RlZCB0byB1c2UgdGhlIGZ1bmN0aW9uIGZpZWxkX2J1ZmZlcigpIHRvCisgICByZWFkICB0aGUgY3VycmVudCB2YWx1ZSwgYW5kIHNldF9maWVsZF9idWZmZXIoKSBvbiBidWZmZXIgMCB0byBzZXQgdGhlCisgICBuZXh0ICBvciAgcHJldmlvdXMgIHZhbHVlLiAgRWl0aGVyICBob29rICBtYXkgIHJldHVybiBUUlVFIHRvIGluZGljYXRlCisgICBzdWNjZXNzICAoYSBsZWdhbCBuZXh0IG9yIHByZXZpb3VzIHZhbHVlIHdhcyBzZXQpIG9yIEZBTFNFIHRvIGluZGljYXRlCisgICBmYWlsdXJlLgorCisgIEF2b2lkaW5nIFByb2JsZW1zCisKKyAgIFRoZSAgaW50ZXJmYWNlICBmb3IgIGRlZmluaW5nICBjdXN0b20gdHlwZXMgaXMgY29tcGxpY2F0ZWQgYW5kIHRyaWNreS4KKyAgIFJhdGhlciAgdGhhbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIGN1c3RvbSB0eXBlIGVudGlyZWx5IGZyb20gc2NyYXRjaCwKKyAgIHlvdSAgc2hvdWxkIHN0YXJ0IGJ5IHN0dWR5aW5nIHRoZSBsaWJyYXJ5IHNvdXJjZSBjb2RlIGZvciB3aGljaGV2ZXIgb2YKKyAgIHRoZSBwcmUtZGVmaW5lZCB0eXBlcyBzZWVtcyB0byBiZSBjbG9zZXN0IHRvIHdoYXQgeW91IHdhbnQuCisKKyAgIFVzZSAgdGhhdCBjb2RlIGFzIGEgbW9kZWwsIGFuZCBldm9sdmUgaXQgdG93YXJkcyB3aGF0IHlvdSByZWFsbHkgd2FudC4KKyAgIFlvdSAgd2lsbCBhdm9pZCBtYW55IHByb2JsZW1zIGFuZCBhbm5veWFuY2VzIHRoYXQgd2F5LiBUaGUgY29kZSBpbiB0aGUKKyAgIG5jdXJzZXMgIGxpYnJhcnkgIGhhcyAgYmVlbiAgc3BlY2lmaWNhbGx5ICBleGVtcHRlZCAgZnJvbSAgdGhlIHBhY2thZ2UKKyAgIGNvcHlyaWdodCB0byBzdXBwb3J0IHRoaXMuCisKKyAgIElmICB5b3VyICBjdXN0b20gIHR5cGUgIGRlZmluZXMgIG9yZGVyICBmdW5jdGlvbnMsICBoYXZlICBkbyBzb21ldGhpbmcKKyAgIGludHVpdGl2ZSAgd2l0aCAgYSAgYmxhbmsgIGZpZWxkLiAgQSAgdXNlZnVsIGNvbnZlbnRpb24gaXMgdG8gbWFrZSB0aGUKKyAgIHN1Y2Nlc3NvciAgIG9mICBhICBibGFuayAgZmllbGQgIHRoZSAgdHlwZXMgIG1pbmltdW0gIHZhbHVlLCAgYW5kICBpdHMKKyAgIHByZWRlY2Vzc29yIHRoZSBtYXhpbXVtLgpkaWZmIC0tZ2l0IGEvZm9ybS9NYWtlZmlsZS5pbiBiL2Zvcm0vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmMzFlMQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxNjUgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuNDcgMjAwNy8wNC8yOCAxNDo1NjoxMSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtb24KKyMKKyMgTWFrZWZpbGUgZm9yIGZvcm0gc291cmNlIGNvZGUuCisjCisjIFRoaXMgbWFrZXMgdGhlIGZvbGxvd2luZzoKKyMJbGlicmFyaWVzIChub3JtYWwvZGVidWcvcHJvZmlsZS9zaGFyZWQpCisjCisjIFRoZSB2YXJpYWJsZSAnc3JjZGlyJyByZWZlcnMgdG8gdGhlIHNvdXJjZS1kaXN0cmlidXRpb24sIGFuZCBjYW4gYmUgc2V0IHdpdGgKKyMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnkgIi0tc3JjZGlyPURJUiIuCisjCisjIFRoZSBydWxlcyBhcmUgb3JnYW5pemVkIHRvIHByb2R1Y2UgdGhlIGxpYnJhcmllcyBmb3IgdGhlIGNvbmZpZ3VyZWQgbW9kZWxzLAorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IEBERlRfTFdSX01PREVMQAorREVTVERJUgkJPSBAREVTVERJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorbGliZGlyCQk9IEBsaWJkaXJACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACisKK0xJQlRPT0wJCT0gQExJQlRPT0xACitMSUJUT09MX0NMRUFOCT0gQExJQl9DTEVBTkAKK0xJQlRPT0xfQ09NUElMRQk9IEBMSUJfQ09NUElMRUAKK0xJQlRPT0xfTElOSwk9IEBMSUJfTElOS0AKK0xJQlRPT0xfSU5TVEFMTAk9IEBMSUJfSU5TVEFMTEAKK0xJQlRPT0xfVU5JTlNUQUxMID0gQExJQl9VTklOU1RBTExACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0xJQgk9IEBJTlNUQUxMQCBASU5TVEFMTF9MSUJACitJTlNUQUxMX1BST0cJPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKKworQVIJCT0gQEFSQAorQVJfT1BUUwkJPSBAQVJfT1BUU0AKK0FXSwkJPSBAQVdLQAorTEQJCT0gQExEQAorTE5fUwkJPSBATE5fU0AKKworQ0MJCT0gQENDQAorQ1BQCQk9IEBDUFBACitDRkxBR1MJCT0gQENGTEFHU0AKKworQ1BQRkxBR1MJPSAtSUB0b3Bfc3JjZGlyQC9uY3Vyc2VzIC1ESEFWRV9DT05GSUdfSCBAQ1BQRkxBR1NACisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0NGTEFHU19MSUJUT09MCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX05PUk1BTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19ERUJVRwk9ICQoQ0NGTEFHUykgQENDX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitMSU5LCQk9ICQoTElCVE9PTF9MSU5LKQorTERGTEFHUwkJPSBATERGTEFHU0AgQExEX01PREVMQCBATElCU0AKKworU0hMSUJfRElSUwk9IC1MLi4vbGliCitTSExJQl9MSVNUCT0gJChTSExJQl9ESVJTKSAtbG5jdXJzZXNATElCX1NVRkZJWEAgQFNITElCX0xJU1RACisKK01LX1NIQVJFRF9MSUIJPSBATUtfU0hBUkVEX0xJQkAKKworTkNVUlNFU19NQUpPUgk9IEBOQ1VSU0VTX01BSk9SQAorTkNVUlNFU19NSU5PUgk9IEBOQ1VSU0VTX01JTk9SQAorUkVMX1ZFUlNJT04JPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKKworUkFOTElCCQk9IEBMSUJfUFJFUEAKKworTElCUkFSSUVTCT0gQExJQlNfVE9fTUFLRUAKKworTElOVAkJPSBATElOVEAKK0xJTlRfT1BUUwk9IEBMSU5UX09QVFNACitMSU5UX0xJQlMJPSAtbGZvcm0gLWxuY3Vyc2VzIEBMSUJTQAorCitBVVRPX1NSQwk9IFwKKwkJLi4vaW5jbHVkZS9mb3JtLmgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FsbCBcCitsaWJzIFwKK2luc3RhbGwgOjoJJChBVVRPX1NSQykgJChMSUJSQVJJRVMpCisKK3NvdXJjZXMgOgkkKEFVVE9fU1JDKQorCiskKERFU1RESVIpJChiaW5kaXIpIFwKKyQoREVTVERJUikkKGxpYmRpcikgOgorCXNoICQoc3JjZGlyKS8uLi9ta2RpcnMuc2ggJEAKKworIyBtYWtlIGNvcGllcyB0byBzaW1wbGlmeSBpbmNsdWRlLXBhdGhzIHdoaWxlIHN0aWxsIGtlZXBpbmcgZm9ybSdzIGluY2x1ZGUKKyMgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KKy4uL2luY2x1ZGUvZm9ybS5oIDogJChzcmNkaXIpL2Zvcm0uaAorCS1ybSAtZiAkQAorCWNwICQoc3JjZGlyKS9mb3JtLmggJEAKKworRk9STV9QUklWX0ggPSBcCisJJChzcmNkaXIpL2Zvcm0ucHJpdi5oIFwKKwkkKHNyY2RpcikvZm9ybS5oIFwKKwkuLi9pbmNsdWRlL21mX2NvbW1vbi5oIFwKKwkuLi9pbmNsdWRlL2N1cnNlcy5oIFwKKwkuLi9pbmNsdWRlL2V0aS5oCisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktcm0gLWYgJChBVVRPX1NSQykKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworLi4vaW5jbHVkZS9tZl9jb21tb24uaCBcCisuLi9pbmNsdWRlL2V0aS5oIDoKKwljZCAuLi9tZW51ICYmICQoTUFLRSkgJEAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZm9ybS9SRUFELk1FIGIvZm9ybS9SRUFELk1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhODZiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL1JFQUQuTUUKQEAgLTAsMCArMSw0MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFELk1FLHYgMC43IDIwMDYvMDQvMjIgMjM6MTM6MDUgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBjbG9uZSBvZiB0aGUgZm9ybSBsaWJyYXJ5IHRoYXQgaXMgYXZhaWxhYmxlIHdpdGggdHlwaWNhbAorU3lzdGVtIFYgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyAoRVRJKS4KKworSXQgaXMgbW9kZWxsZWQgYWZ0ZXIgdGhlIGRvY3VtZW50YXRpb24gdGhhdCBjb21lcyBmb3IgdGhpcyBsaWJyYXJ5IHdpdGgKK2EgMzg2IGJhc2VkIFNWUjQgaW1wbGVtZW50YXRpb24gKEVTSVgpLiAgCisKK1RoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB3YXMgYW5kIGlzIGFuIEVMRiBiYXNlZCBMaW51eCBzeXN0ZW0uCisKK0ZvciB0aGluZ3MgdGhhdCBzdGlsbCBuZWVkIGRvaW5nLCBzZWUgdGhlIFRPLURPIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCAKK2RpcmVjdG9yeS4KKworSnVlcmdlbiBQZmVpZmVyCmRpZmYgLS1naXQgYS9mb3JtL2ZfdHJhY2UuYyBiL2Zvcm0vZl90cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjRjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZfdHJhY2UuYwpAQCAtMCwwICsxLDcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmX3RyYWNlLmMsdiAxLjEgMjAwNC8xMi8yNSAyMzoyODo0OSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKikKK19uY19yZXRyYWNlX2ZpZWxkX3B0cihGSUVMRCAqKmNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQorX25jX3JldHJhY2VfZmllbGQoRklFTEQgKmNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikKK19uY19yZXRyYWNlX2ZpZWxkX3R5cGUoRklFTERUWVBFICpjb2RlKQoreworICBUKChUX1JFVFVSTigiJXAiKSwgY29kZSkpOworICByZXR1cm4gY29kZTsKK30KKworTkNVUlNFU19FWFBPUlQoRk9STSAqKQorX25jX3JldHJhY2VfZm9ybShGT1JNICpjb2RlKQoreworICBUKChUX1JFVFVSTigiJXAiKSwgY29kZSkpOworICByZXR1cm4gY29kZTsKK30KKworTkNVUlNFU19FWFBPUlQoRm9ybV9Ib29rKQorX25jX3JldHJhY2VfZm9ybV9ob29rKEZvcm1fSG9vayBjb2RlKQoreworICBUKChUX1JFVFVSTigiJXAiKSwgY29kZSkpOworICByZXR1cm4gY29kZTsKK30KZGlmZiAtLWdpdCBhL2Zvcm0vZmxkX2FyZy5jIGIvZm9ybS9mbGRfYXJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5YTE1NwotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX2FyZy5jCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9hcmcuYyx2IDEuMTEgMjAwNC8xMi8yNSAyMjoyMDoxOCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGR0eXBlX2FyZygKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKiBjb25zdCBtYWtlX2FyZykodmFfbGlzdCAqKSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqICgqIGNvbnN0IGNvcHlfYXJnKShjb25zdCB2b2lkICopLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgKCogY29uc3QgZnJlZV9hcmcpKHZvaWQgKikgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ29ubmVjdHMgdG8gdGhlIHR5cGUgYWRkaXRpb25hbCBhcmd1bWVudHMgbmVjZXNzYXJ5Cit8ICAgICAgICAgICAgICAgICAgICBmb3IgYSBzZXRfZmllbGRfdHlwZSBjYWxsLiBUaGUgdmFyaW91cyBmdW5jdGlvbiBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgYXJlOgorfCAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9hcmcgOiBhbGxvY2F0ZXMgYSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaWVsZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBwYXJhbWV0ZXJzLgorfCAgICAgICAgICAgICAgICAgICAgICAgY29weV9hcmcgOiBkdXBsaWNhdGUgdGhlIHN0cnVjdHVyZSBjcmVhdGVkIGJ5Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfYXJnCit8ICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2FyZyA6IFJlbGVhc2UgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgbWFrZV9hcmcKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgY29weV9hcmcKK3wKK3wgICAgICAgICAgICAgICAgICAgIEF0IGxlYXN0IG1ha2VfYXJnIG11c3QgYmUgbm9uLU5VTEwuCit8ICAgICAgICAgICAgICAgICAgICBZb3UgbWF5IHBhc3MgTlVMTCBmb3IgY29weV9hcmcgYW5kIGZyZWVfYXJnIGlmIHlvdXIKK3wgICAgICAgICAgICAgICAgICAgIG1ha2VfYXJnIGZ1bmN0aW9uIGRvZXNuJ3QgYWxsb2NhdGUgbWVtb3J5IGFuZCB5b3VyCit8ICAgICAgICAgICAgICAgICAgICBhcmcgZml0cyBpbnRvIHRoZSBzdG9yYWdlIGZvciBhICh2b2lkKikuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9maWVsZHR5cGVfYXJnKEZJRUxEVFlQRSAqdHlwLAorCQkgIHZvaWQgKigqY29uc3QgbWFrZV9hcmcpKHZhX2xpc3QgKiksCisJCSAgdm9pZCAqKCpjb25zdCBjb3B5X2FyZykoY29uc3Qgdm9pZCAqKSwKKwkJICB2b2lkICgqY29uc3QgZnJlZV9hcmcpICh2b2lkICopKQoreworICBUKChUX0NBTExFRCgic2V0X2ZpZWxkdHlwZV9hcmcoJXAsJXAsJXAsJXApIiksCisgICAgIHR5cCwgbWFrZV9hcmcsIGNvcHlfYXJnLCBmcmVlX2FyZykpOworCisgIGlmICh0eXAgIT0gMCAmJiBtYWtlX2FyZyAhPSAodm9pZCAqKTApCisgICAgeworICAgICAgdHlwLT5zdGF0dXMgfD0gX0hBU19BUkdTOworICAgICAgdHlwLT5tYWtlYXJnID0gbWFrZV9hcmc7CisgICAgICB0eXAtPmNvcHlhcmcgPSBjb3B5X2FyZzsKKyAgICAgIHR5cC0+ZnJlZWFyZyA9IGZyZWVfYXJnOworICAgICAgUkVUVVJOKEVfT0spOworICAgIH0KKyAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkICpmaWVsZF9hcmcoY29uc3QgRklFTEQgKmZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgcG9pbnRlciB0byB0aGUgZmllbGRzIGFyZ3VtZW50IHN0cnVjdHVyZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gc3RydWN0dXJlIG9yIE5VTEwgaWYgbm9uZSBpcyBkZWZpbmVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQgKikKK2ZpZWxkX2FyZyhjb25zdCBGSUVMRCAqZmllbGQpCit7CisgIFQoKFRfQ0FMTEVEKCJmaWVsZF9hcmcoJXApIiksIGZpZWxkKSk7CisgIHJldHVyblZvaWRQdHIoTm9ybWFsaXplX0ZpZWxkKGZpZWxkKS0+YXJnKTsKK30KKworLyogZmxkX2FyZy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mbGRfYXR0ci5jIGIvZm9ybS9mbGRfYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YzA4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF9hdHRyLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9hdHRyLmMsdiAxLjEwIDIwMDQvMTIvMTEgMjE6MzM6MTUgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZpZWxkLUF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIlRlbXBsYXRlIiBtYWNybyB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHRvIHNldCBhIGZpZWxkcyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgR0VOX0ZJRUxEX0FUVFJfU0VUX0ZDVCggbmFtZSApIFwKK05DVVJTRVNfSU1QRVhQIGludCBOQ1VSU0VTX0FQSSBzZXRfZmllbGRfICMjIG5hbWUgKEZJRUxEICogZmllbGQsIGNodHlwZSBhdHRyKVwKK3tcCisgICBpbnQgcmVzID0gRV9CQURfQVJHVU1FTlQ7XAorICAgVCgoVF9DQUxMRUQoInNldF9maWVsZF8iICNuYW1lICIoJXAsJXMpIiksIGZpZWxkLCBfdHJhY2VhdHRyKGF0dHIpKSk7XAorICAgaWYgKCBhdHRyPT1BX05PUk1BTCB8fCAoKGF0dHIgJiBBX0FUVFJJQlVURVMpPT1hdHRyKSApXAorICAgICB7XAorICAgICAgIE5vcm1hbGl6ZV9GaWVsZCggZmllbGQgKTtcCisgICAgICAgaWYgKGZpZWxkICE9IDApIFwKKwkgeyBcCisJIGlmICgoZmllbGQgLT4gbmFtZSkgIT0gYXR0cilcCisJICAge1wKKwkgICAgIGZpZWxkIC0+IG5hbWUgPSBhdHRyO1wKKwkgICAgIHJlcyA9IF9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzKCBmaWVsZCApO1wKKwkgICB9XAorCSBlbHNlXAorCSAgIHtcCisJICAgICByZXMgPSBFX09LO1wKKwkgICB9XAorCSB9XAorICAgICB9XAorICAgUkVUVVJOKHJlcyk7XAorfQorCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gZ2V0IGEgZmllbGRzIGF0dHJpYnV0ZSAqLworI2RlZmluZSBHRU5fRklFTERfQVRUUl9HRVRfRkNUKCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgY2h0eXBlIE5DVVJTRVNfQVBJIGZpZWxkXyAjIyBuYW1lIChjb25zdCBGSUVMRCAqIGZpZWxkKVwKK3tcCisgICBUKChUX0NBTExFRCgiZmllbGRfIiAjbmFtZSAiKCVwKSIpLCBmaWVsZCkpO1wKKyAgIHJldHVybkF0dHIoIEFfQVRUUklCVVRFUyAmIChOb3JtYWxpemVfRmllbGQoIGZpZWxkICkgLT4gbmFtZSkgKTtcCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZF9mb3JlKEZJRUxEICpmaWVsZCwgY2h0eXBlIGF0dHIpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXRzIHRoZSBmb3JlZ3JvdW5kIG9mIHRoZSBmaWVsZCB1c2VkIHRvIGRpc3BsYXkgdGhlCit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCBjb250ZW50cy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgIC0gaW52YWxpZCBhdHRyaWJ1dGVzCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0ZJRUxEX0FUVFJfU0VUX0ZDVChmb3JlKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGNodHlwZSBmaWVsZF9mb3JlKGNvbnN0IEZJRUxEICopCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBmaWVsZHMgZm9yZWdyb3VuZCBhdHRyaWJ1dGUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBmb3JlZ3JvdW5kIGF0dHJpYnV0ZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9GSUVMRF9BVFRSX0dFVF9GQ1QoZm9yZSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX2JhY2soRklFTEQgKmZpZWxkLCBjaHR5cGUgYXR0cikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldHMgdGhlIGJhY2tncm91bmQgb2YgdGhlIGZpZWxkIHVzZWQgdG8gZGlzcGxheSB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkcyBleHRlbmQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAtIGludmFsaWQgYXR0cmlidXRlcworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9GSUVMRF9BVFRSX1NFVF9GQ1QoYmFjaykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBjaHR5cGUgZmllbGRfYmFjayhjb25zdAorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgZmllbGRzIGJhY2tncm91bmQgYXR0cmlidXRlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgYmFja2dyb3VuZCBhdHRyaWJ1dGUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fRklFTERfQVRUUl9HRVRfRkNUKGJhY2spCisKKy8qIGZsZF9hdHRyLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9jdXJyZW50LmMgYi9mb3JtL2ZsZF9jdXJyZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzYTkwYQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX2N1cnJlbnQuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2N1cnJlbnQuYyx2IDEuMTEgMjAwNC8xMi8yNSAyMjo0MDoxMyB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfY3VycmVudF9maWVsZChGT1JNICAqIGZvcm0sRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgY3VycmVudCBmaWVsZCBvZiB0aGUgZm9ybSB0byB0aGUgc3BlY2lmaWVkIG9uZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBpbnZhbGlkIGZvcm0gb3IgZmllbGQgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBmaWVsZCBub3Qgc2VsZWN0YWJsZQorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfU1RBVEUgICAgICAgLSBjYWxsZWQgZnJvbSBhIGhvb2sgcm91dGluZQorfCAgICAgICAgICAgICAgICAgICAgRV9JTlZBTElEX0ZJRUxEICAgLSBjdXJyZW50IGZpZWxkIGNhbid0IGJlIGxlZnQKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2N1cnJlbnRfZmllbGQoRk9STSAqZm9ybSwgRklFTEQgKmZpZWxkKQoreworICBpbnQgZXJyID0gRV9PSzsKKworICBUKChUX0NBTExFRCgic2V0X2N1cnJlbnRfZmllbGQoJXAsJXApIiksIGZvcm0sIGZpZWxkKSk7CisgIGlmIChmb3JtID09IDAgfHwgZmllbGQgPT0gMCkKKyAgICB7CisgICAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICAgIH0KKyAgZWxzZSBpZiAoKGZvcm0gIT0gZmllbGQtPmZvcm0pIHx8IEZpZWxkX0lzX05vdF9TZWxlY3RhYmxlKGZpZWxkKSkKKyAgICB7CisgICAgICBSRVRVUk4oRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICBlbHNlIGlmICgoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkgPT0gMCkKKyAgICB7CisgICAgICBmb3JtLT5jdXJyZW50ID0gZmllbGQ7CisgICAgICBmb3JtLT5jdXJwYWdlID0gZmllbGQtPnBhZ2U7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKChmb3JtLT5zdGF0dXMgJiBfSU5fRFJJVkVSKSAhPSAwKQorCXsKKwkgIGVyciA9IEVfQkFEX1NUQVRFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoZm9ybS0+Y3VycmVudCAhPSBmaWVsZCkKKwkgICAgeworCSAgICAgIGlmICghX25jX0ludGVybmFsX1ZhbGlkYXRpb24oZm9ybSkpCisJCXsKKwkJICBlcnIgPSBFX0lOVkFMSURfRklFTEQ7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBDYWxsX0hvb2soZm9ybSwgZmllbGR0ZXJtKTsKKwkJICBpZiAoZmllbGQtPnBhZ2UgIT0gZm9ybS0+Y3VycGFnZSkKKwkJICAgIHsKKwkJICAgICAgQ2FsbF9Ib29rKGZvcm0sIGZvcm10ZXJtKTsKKwkJICAgICAgZXJyID0gX25jX1NldF9Gb3JtX1BhZ2UoZm9ybSwgKGludClmaWVsZC0+cGFnZSwgZmllbGQpOworCQkgICAgICBDYWxsX0hvb2soZm9ybSwgZm9ybWluaXQpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZXJyID0gX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sIGZpZWxkKTsKKwkJICAgIH0KKwkJICBDYWxsX0hvb2soZm9ybSwgZmllbGRpbml0KTsKKwkJICAodm9pZClfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKGZvcm0pOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICBSRVRVUk4oZXJyKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRCAqY3VycmVudF9maWVsZChjb25zdCBGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgY3VycmVudCBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTEQgKikKK2N1cnJlbnRfZmllbGQoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoImN1cnJlbnRfZmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuRmllbGQoTm9ybWFsaXplX0Zvcm0oZm9ybSktPmN1cnJlbnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmaWVsZF9pbmRleChjb25zdCBGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmllbGQgaW4gdGhlIGZpZWxkLWFycmF5IG9mCit8ICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogID49IDAgICA6IGZpZWxkIGluZGV4Cit8ICAgICAgICAgICAgICAgICAgICAtMSAgICAgOiBmaWVsZHBvaW50ZXIgaW52YWxpZCBvciBmaWVsZCBub3QgY29ubmVjdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZmllbGRfaW5kZXgoY29uc3QgRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgiZmllbGRfaW5kZXgoJXApIiksIGZpZWxkKSk7CisgIHJldHVybkNvZGUoKGZpZWxkICE9IDAgJiYgZmllbGQtPmZvcm0gIT0gMCkgPyAoaW50KWZpZWxkLT5pbmRleCA6IC0xKTsKK30KKworLyogZmxkX2N1cnJlbnQuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZmxkX2RlZi5jIGIvZm9ybS9mbGRfZGVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU1OWJhNgotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX2RlZi5jCkBAIC0wLDAgKzEsMzk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfZGVmLmMsdiAxLjM2IDIwMDcvMTAvMTMgMTk6Mjk6NTggdG9tIEV4cCAkIikKKworLyogdGhpcyBjYW4ndCBiZSByZWFkb25seSAqLworc3RhdGljIEZJRUxEIGRlZmF1bHRfZmllbGQgPQoreworICAwLAkJCQkvKiBzdGF0dXMgICovCisgIDAsCQkJCS8qIHJvd3MgICAgKi8KKyAgMCwJCQkJLyogY29scyAgICAqLworICAwLAkJCQkvKiBmcm93ICAgICovCisgIDAsCQkJCS8qIGZjb2wgICAgKi8KKyAgMCwJCQkJLyogZHJvd3MgICAqLworICAwLAkJCQkvKiBkY29scyAgICovCisgIDAsCQkJCS8qIG1heGdyb3cgKi8KKyAgMCwJCQkJLyogbnJvdyAgICAqLworICAwLAkJCQkvKiBuYnVmICAgICovCisgIE5PX0pVU1RJRklDQVRJT04sCQkvKiBqdXN0ICAgICovCisgIDAsCQkJCS8qIHBhZ2UgICAgKi8KKyAgMCwJCQkJLyogaW5kZXggICAqLworICAoaW50KScgJywJCQkvKiBwYWQgICAgICovCisgIEFfTk9STUFMLAkJCS8qIGZvcmUgICAgKi8KKyAgQV9OT1JNQUwsCQkJLyogYmFjayAgICAqLworICBBTExfRklFTERfT1BUUywJCS8qIG9wdHMgICAgKi8KKyAgKEZJRUxEICopMCwJCQkvKiBzbmV4dCAgICovCisgIChGSUVMRCAqKTAsCQkJLyogc3ByZXYgICAqLworICAoRklFTEQgKikwLAkJCS8qIGxpbmsgICAgKi8KKyAgKEZPUk0gKikwLAkJCS8qIGZvcm0gICAgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCQkvKiB0eXBlICAgICovCisgIChjaGFyICopMCwJCQkvKiBhcmcgICAgICovCisgIChGSUVMRF9DRUxMICopMCwJCS8qIGJ1ZiAgICAgKi8KKyAgKGNoYXIgKikwCQkJLyogdXNycHRyICAqLworICBOQ1VSU0VTX0ZJRUxEX0VYVEVOU0lPTgorfTsKKworTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEICopCitfbmNfRGVmYXVsdF9GaWVsZCA9ICZkZWZhdWx0X2ZpZWxkOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIFR5cGVBcmd1bWVudCAqX25jX01ha2VfQXJndW1lbnQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRklFTERUWVBFICp0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAqYXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnIgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlIGFuIGFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgdGhlIHNwZWNpZmllZCB0eXBlLgorfCAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB0eXBlLWRlcGVuZGVudCBhcmd1bWVudCBsaXN0IHRvIGNvbnN0cnVjdAorfCAgICAgICAgICAgICAgICAgICAgaXQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZS4gTWF5YmUgTlVMTC4KK3wgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gKmVyciBhbiBlcnJvciBjb3VudGVyIGlzIGluY3JlYXNlZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChUeXBlQXJndW1lbnQgKikKK19uY19NYWtlX0FyZ3VtZW50KGNvbnN0IEZJRUxEVFlQRSAqdHlwLCB2YV9saXN0ICphcCwgaW50ICplcnIpCit7CisgIFR5cGVBcmd1bWVudCAqcmVzID0gKFR5cGVBcmd1bWVudCAqKTA7CisgIFR5cGVBcmd1bWVudCAqcDsKKworICBpZiAodHlwICE9IDAgJiYgKHR5cC0+c3RhdHVzICYgX0hBU19BUkdTKSAhPSAwKQorICAgIHsKKyAgICAgIGFzc2VydChlcnIgIT0gMCAmJiBhcCAhPSAodmFfbGlzdCAqKTApOworICAgICAgaWYgKCh0eXAtPnN0YXR1cyAmIF9MSU5LRURfVFlQRSkgIT0gMCkKKwl7CisJICBwID0gdHlwZU1hbGxvYyhUeXBlQXJndW1lbnQsIDEpOworCisJICBpZiAocCAhPSAwKQorCSAgICB7CisJICAgICAgcC0+bGVmdCA9IF9uY19NYWtlX0FyZ3VtZW50KHR5cC0+bGVmdCwgYXAsIGVycik7CisJICAgICAgcC0+cmlnaHQgPSBfbmNfTWFrZV9Bcmd1bWVudCh0eXAtPnJpZ2h0LCBhcCwgZXJyKTsKKwkgICAgICByZXR1cm4gcDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgKmVyciArPSAxOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGFzc2VydCh0eXAtPm1ha2VhcmcgIT0gKHZvaWQgKikwKTsKKwkgIGlmICghKHJlcyA9IChUeXBlQXJndW1lbnQgKil0eXAtPm1ha2VhcmcoYXApKSkKKwkgICAgeworCSAgICAgICplcnIgKz0gMTsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgVHlwZUFyZ3VtZW50ICpfbmNfQ29weV9Bcmd1bWVudChjb25zdCBGSUVMRFRZUEUgKnR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHlwZUFyZ3VtZW50ICphcmdwLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVyciApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDcmVhdGUgYSBjb3B5IG9mIGFuIGFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgdGhlIHNwZWNpZmllZAorfCAgICAgICAgICAgICAgICAgICAgdHlwZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlLiBNYXliZSBOVUxMLgorfCAgICAgICAgICAgICAgICAgICAgSW4gY2FzZSBvZiBhbiBlcnJvciBpbiAqZXJyIGFuIGVycm9yIGNvdW50ZXIgaXMgaW5jcmVhc2VkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKFR5cGVBcmd1bWVudCAqKQorX25jX0NvcHlfQXJndW1lbnQoY29uc3QgRklFTERUWVBFICp0eXAsIGNvbnN0IFR5cGVBcmd1bWVudCAqYXJncCwgaW50ICplcnIpCit7CisgIFR5cGVBcmd1bWVudCAqcmVzID0gKFR5cGVBcmd1bWVudCAqKTA7CisgIFR5cGVBcmd1bWVudCAqcDsKKworICBpZiAodHlwICE9IDAgJiYgKHR5cC0+c3RhdHVzICYgX0hBU19BUkdTKSAhPSAwKQorICAgIHsKKyAgICAgIGFzc2VydChlcnIgIT0gMCAmJiBhcmdwICE9IDApOworICAgICAgaWYgKCh0eXAtPnN0YXR1cyAmIF9MSU5LRURfVFlQRSkgIT0gMCkKKwl7CisJICBwID0gdHlwZU1hbGxvYyhUeXBlQXJndW1lbnQsIDEpOworCisJICBpZiAocCAhPSAwKQorCSAgICB7CisJICAgICAgcC0+bGVmdCA9IF9uY19Db3B5X0FyZ3VtZW50KHR5cCwgYXJncC0+bGVmdCwgZXJyKTsKKwkgICAgICBwLT5yaWdodCA9IF9uY19Db3B5X0FyZ3VtZW50KHR5cCwgYXJncC0+cmlnaHQsIGVycik7CisJICAgICAgcmV0dXJuIHA7CisJICAgIH0KKwkgICplcnIgKz0gMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHR5cC0+Y29weWFyZyAhPSAodm9pZCAqKTApCisJICAgIHsKKwkgICAgICBpZiAoIShyZXMgPSAoVHlwZUFyZ3VtZW50ICopKHR5cC0+Y29weWFyZygoY29uc3Qgdm9pZCAqKWFyZ3ApKSkpCisJCXsKKwkJICAqZXJyICs9IDE7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVzID0gKFR5cGVBcmd1bWVudCAqKWFyZ3A7CisJICAgIH0KKwl9CisgICAgfQorICByZXR1cm4gcmVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX0ZyZWVfQXJndW1lbnQoY29uc3QgRklFTERUWVBFICp0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVBcmd1bWVudCAqIGFyZ3AgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmVsZWFzZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcmd1bWVudCBzdHJ1Y3R1cmUKK3wgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2l2ZW4gZmllbGR0eXBlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfRnJlZV9Bcmd1bWVudChjb25zdCBGSUVMRFRZUEUgKnR5cCwgVHlwZUFyZ3VtZW50ICphcmdwKQoreworICBpZiAodHlwICE9IDAgJiYgKHR5cC0+c3RhdHVzICYgX0hBU19BUkdTKSAhPSAwKQorICAgIHsKKyAgICAgIGlmICgodHlwLT5zdGF0dXMgJiBfTElOS0VEX1RZUEUpICE9IDApCisJeworCSAgYXNzZXJ0KGFyZ3AgIT0gMCk7CisJICBfbmNfRnJlZV9Bcmd1bWVudCh0eXAtPmxlZnQsIGFyZ3AtPmxlZnQpOworCSAgX25jX0ZyZWVfQXJndW1lbnQodHlwLT5yaWdodCwgYXJncC0+cmlnaHQpOworCSAgZnJlZShhcmdwKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHR5cC0+ZnJlZWFyZyAhPSAodm9pZCAqKTApCisJICAgIHsKKwkgICAgICB0eXAtPmZyZWVhcmcoKHZvaWQgKilhcmdwKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBfbmNfQ29weV9UeXBlKCBGSUVMRCAqZHN0LCBGSUVMRCBjb25zdCAqc3JjICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgYXJndW1lbnQgc3RydWN0dXJlIG9mIGZpZWxkIHNyYyB0byBmaWVsZCBkc3QKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgICAgLSBjb3B5IHdvcmtlZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgICAgICAtIGVycm9yIG9jY3VycmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19Db3B5X1R5cGUoRklFTEQgKmRzdCwgRklFTEQgY29uc3QgKnNyYykKK3sKKyAgaW50IGVyciA9IDA7CisKKyAgYXNzZXJ0KGRzdCAhPSAwICYmIHNyYyAhPSAwKTsKKworICBkc3QtPnR5cGUgPSBzcmMtPnR5cGU7CisgIGRzdC0+YXJnID0gKHZvaWQgKilfbmNfQ29weV9Bcmd1bWVudChzcmMtPnR5cGUsIChUeXBlQXJndW1lbnQgKikoc3JjLT5hcmcpLCAmZXJyKTsKKworICBpZiAoZXJyICE9IDApCisgICAgeworICAgICAgX25jX0ZyZWVfQXJndW1lbnQoZHN0LT50eXBlLCAoVHlwZUFyZ3VtZW50ICopKGRzdC0+YXJnKSk7CisgICAgICBkc3QtPnR5cGUgPSAoRklFTERUWVBFICopMDsKKyAgICAgIGRzdC0+YXJnID0gKHZvaWQgKikwOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChkc3QtPnR5cGUgIT0gMCkKKwl7CisJICBkc3QtPnR5cGUtPnJlZisrOworCX0KKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkIF9uY19GcmVlX1R5cGUoIEZJRUxEICpmaWVsZCApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZWxlYXNlIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgdGhpcyBmaWVsZAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfRnJlZV9UeXBlKEZJRUxEICpmaWVsZCkKK3sKKyAgYXNzZXJ0KGZpZWxkICE9IDApOworICBpZiAoZmllbGQtPnR5cGUgIT0gMCkKKyAgICB7CisgICAgICBmaWVsZC0+dHlwZS0+cmVmLS07CisgICAgfQorICBfbmNfRnJlZV9Bcmd1bWVudChmaWVsZC0+dHlwZSwgKFR5cGVBcmd1bWVudCAqKShmaWVsZC0+YXJnKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRklFTEQgKm5ld19maWVsZCggaW50IHJvd3MsIGludCBjb2xzLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb3csIGludCBmY29sLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5yb3csIGludCBuYnVmICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZSBhIG5ldyBmaWVsZCB3aXRoIHRoaXMgbWFueSAncm93cycgYW5kICdjb2xzJywKK3wgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0ICdmcm93L2Zjb2wnIGluIHRoZSBzdWJ3aW5kb3cgb2YgdGhlIGZvcm0uCit8ICAgICAgICAgICAgICAgICAgICBBbGxvY2F0ZSAnbnJvdycgb2ZmLXNjcmVlbiByb3dzIGFuZCAnbmJ1ZicgYWRkaXRpb25hbAorfCAgICAgICAgICAgICAgICAgICAgYnVmZmVycy4gSWYgYW4gZXJyb3Igb2NjdXJzLCBlcnJubyBpcyBzZXQgdG8KK3wKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgLSBzeXN0ZW0gZXJyb3IKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIG5ldyBmaWVsZCBvciBOVUxMIGlmIGZhaWx1cmUuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTEQgKikKK25ld19maWVsZChpbnQgcm93cywgaW50IGNvbHMsIGludCBmcm93LCBpbnQgZmNvbCwgaW50IG5yb3csIGludCBuYnVmKQoreworICBzdGF0aWMgY29uc3QgRklFTERfQ0VMTCBibGFuayA9IEJMQU5LOworICBzdGF0aWMgY29uc3QgRklFTERfQ0VMTCB6ZXJvcyA9IFpFUk9TOworCisgIEZJRUxEICpOZXdfRmllbGQgPSAoRklFTEQgKikwOworICBpbnQgZXJyID0gRV9CQURfQVJHVU1FTlQ7CisKKyAgVCgoVF9DQUxMRUQoIm5ld19maWVsZCglZCwlZCwlZCwlZCwlZCwlZCkiKSwgcm93cywgY29scywgZnJvdywgZmNvbCwgbnJvdywgbmJ1ZikpOworICBpZiAocm93cyA+IDAgJiYKKyAgICAgIGNvbHMgPiAwICYmCisgICAgICBmcm93ID49IDAgJiYKKyAgICAgIGZjb2wgPj0gMCAmJgorICAgICAgbnJvdyA+PSAwICYmCisgICAgICBuYnVmID49IDAgJiYKKyAgICAgICgoZXJyID0gRV9TWVNURU1fRVJST1IpICE9IDApICYmCS8qIHRyaWNrOiB0aGlzIHJlc2V0cyB0aGUgZGVmYXVsdCBlcnJvciAqLworICAgICAgKE5ld19GaWVsZCA9IHR5cGVNYWxsb2MoRklFTEQsIDEpKSAhPSAwKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJmaWVsZCAlcCIpLCBOZXdfRmllbGQpKTsKKyAgICAgICpOZXdfRmllbGQgPSBkZWZhdWx0X2ZpZWxkOworICAgICAgTmV3X0ZpZWxkLT5yb3dzID0gcm93czsKKyAgICAgIE5ld19GaWVsZC0+Y29scyA9IGNvbHM7CisgICAgICBOZXdfRmllbGQtPmRyb3dzID0gcm93cyArIG5yb3c7CisgICAgICBOZXdfRmllbGQtPmRjb2xzID0gY29sczsKKyAgICAgIE5ld19GaWVsZC0+ZnJvdyA9IGZyb3c7CisgICAgICBOZXdfRmllbGQtPmZjb2wgPSBmY29sOworICAgICAgTmV3X0ZpZWxkLT5ucm93ID0gbnJvdzsKKyAgICAgIE5ld19GaWVsZC0+bmJ1ZiA9IG5idWY7CisgICAgICBOZXdfRmllbGQtPmxpbmsgPSBOZXdfRmllbGQ7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgICAgTmV3X0ZpZWxkLT53b3JraW5nID0gbmV3cGFkKDEsIEJ1ZmZlcl9MZW5ndGgoTmV3X0ZpZWxkKSArIDEpOworICAgICAgTmV3X0ZpZWxkLT5leHBhbmRlZCA9IHR5cGVDYWxsb2MoY2hhciAqLCAxICsgKHVuc2lnbmVkKW5idWYpOworI2VuZGlmCisKKyAgICAgIGlmIChfbmNfQ29weV9UeXBlKE5ld19GaWVsZCwgJmRlZmF1bHRfZmllbGQpKQorCXsKKwkgIHNpemVfdCBsZW47CisKKwkgIGxlbiA9IFRvdGFsX0J1ZmZlcl9TaXplKE5ld19GaWVsZCk7CisJICBpZiAoKE5ld19GaWVsZC0+YnVmID0gKEZJRUxEX0NFTEwgKiltYWxsb2MobGVuKSkpCisJICAgIHsKKwkgICAgICAvKiBQcmVmaWxsIGJ1ZmZlcnMgd2l0aCBibGFua3MgYW5kIGluc2VydCB0ZXJtaW5hdGluZyB6ZXJvZXMKKwkgICAgICAgICBiZXR3ZWVuIGJ1ZmZlcnMgKi8KKwkgICAgICBpbnQgaSwgajsKKwkgICAgICBpbnQgY2VsbHMgPSBCdWZmZXJfTGVuZ3RoKE5ld19GaWVsZCk7CisKKwkgICAgICBmb3IgKGkgPSAwOyBpIDw9IE5ld19GaWVsZC0+bmJ1ZjsgaSsrKQorCQl7CisJCSAgRklFTERfQ0VMTCAqYnVmZmVyID0gJihOZXdfRmllbGQtPmJ1ZlsoY2VsbHMgKyAxKSAqIGldKTsKKworCQkgIGZvciAoaiA9IDA7IGogPCBjZWxsczsgKytqKQorCQkgICAgeworCQkgICAgICBidWZmZXJbal0gPSBibGFuazsKKwkJICAgIH0KKwkJICBidWZmZXJbal0gPSB6ZXJvczsKKwkJfQorCSAgICAgIHJldHVybkZpZWxkKE5ld19GaWVsZCk7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmIChOZXdfRmllbGQpCisgICAgZnJlZV9maWVsZChOZXdfRmllbGQpOworCisgIFNFVF9FUlJPUihlcnIpOworICByZXR1cm5GaWVsZCgoRklFTEQgKikwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZnJlZV9maWVsZCggRklFTEQgKmZpZWxkICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEZyZWVzIHRoZSBzdG9yYWdlIGFsbG9jYXRlZCBmb3IgdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgZmllbGQgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgLSBmaWVsZCBpcyBjb25uZWN0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmcmVlX2ZpZWxkKEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoImZyZWVfZmllbGQoJXApIiksIGZpZWxkKSk7CisgIGlmICghZmllbGQpCisgICAgeworICAgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKyAgICB9CisgIGVsc2UgaWYgKGZpZWxkLT5mb3JtICE9IDApCisgICAgeworICAgICAgUkVUVVJOKEVfQ09OTkVDVEVEKTsKKyAgICB9CisgIGVsc2UgaWYgKGZpZWxkID09IGZpZWxkLT5saW5rKQorICAgIHsKKyAgICAgIGlmIChmaWVsZC0+YnVmICE9IDApCisJZnJlZShmaWVsZC0+YnVmKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBGSUVMRCAqZjsKKworICAgICAgZm9yIChmID0gZmllbGQ7IGYtPmxpbmsgIT0gZmllbGQ7IGYgPSBmLT5saW5rKQorCXsKKwl9CisgICAgICBmLT5saW5rID0gZmllbGQtPmxpbms7CisgICAgfQorICBfbmNfRnJlZV9UeXBlKGZpZWxkKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICBpZiAoZmllbGQtPmV4cGFuZGVkICE9IDApCisgICAgeworICAgICAgaW50IG47CisKKyAgICAgIGZvciAobiA9IDA7IG4gPD0gZmllbGQtPm5idWY7ICsrbikKKwl7CisJICBGcmVlSWZOZWVkZWQoZmllbGQtPmV4cGFuZGVkW25dKTsKKwl9CisgICAgICBmcmVlKGZpZWxkLT5leHBhbmRlZCk7CisgICAgICAodm9pZClkZWx3aW4oZmllbGQtPndvcmtpbmcpOworICAgIH0KKyNlbmRpZgorICBmcmVlKGZpZWxkKTsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmbGRfZGVmLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9kdXAuYyBiL2Zvcm0vZmxkX2R1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF9kdXAuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2R1cC5jLHYgMS4xMiAyMDA3LzEwLzEzIDE5OjMwOjIxIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRklFTEQgKmR1cF9maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIER1cGxpY2F0ZXMgdGhlIGZpZWxkIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uIEFsbAorfCAgICAgICAgICAgICAgICAgICAgZmllbGQgYXR0cmlidXRlcyBhbmQgdGhlIGJ1ZmZlcnMgYXJlIGNvcGllZC4KK3wgICAgICAgICAgICAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycywgZXJybm8gaXMgc2V0IHRvCit8Cit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgYXJndW1lbnQKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SIC0gc3lzdGVtIGVycm9yCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIHRoZSBuZXcgZmllbGQgb3IgTlVMTCBpZiBmYWlsdXJlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTEQgKikKK2R1cF9maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCkKK3sKKyAgRklFTEQgKk5ld19GaWVsZCA9IChGSUVMRCAqKTA7CisgIGludCBlcnIgPSBFX0JBRF9BUkdVTUVOVDsKKworICBUKChUX0NBTExFRCgiZHVwX2ZpZWxkKCVwLCVkLCVkKSIpLCBmaWVsZCwgZnJvdywgZmNvbCkpOworICBpZiAoZmllbGQgJiYgKGZyb3cgPj0gMCkgJiYgKGZjb2wgPj0gMCkgJiYKKyAgICAgICgoZXJyID0gRV9TWVNURU1fRVJST1IpICE9IDApICYmCS8qIHRyaWNrIDogdGhpcyByZXNldHMgdGhlIGRlZmF1bHQgZXJyb3IgKi8KKyAgICAgIChOZXdfRmllbGQgPSB0eXBlTWFsbG9jKEZJRUxELCAxKSkpCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoImZpZWxkICVwIiksIE5ld19GaWVsZCkpOworICAgICAgKk5ld19GaWVsZCA9ICpfbmNfRGVmYXVsdF9GaWVsZDsKKyAgICAgIE5ld19GaWVsZC0+ZnJvdyA9IGZyb3c7CisgICAgICBOZXdfRmllbGQtPmZjb2wgPSBmY29sOworICAgICAgTmV3X0ZpZWxkLT5saW5rID0gTmV3X0ZpZWxkOworICAgICAgTmV3X0ZpZWxkLT5yb3dzID0gZmllbGQtPnJvd3M7CisgICAgICBOZXdfRmllbGQtPmNvbHMgPSBmaWVsZC0+Y29sczsKKyAgICAgIE5ld19GaWVsZC0+bnJvdyA9IGZpZWxkLT5ucm93OworICAgICAgTmV3X0ZpZWxkLT5kcm93cyA9IGZpZWxkLT5kcm93czsKKyAgICAgIE5ld19GaWVsZC0+ZGNvbHMgPSBmaWVsZC0+ZGNvbHM7CisgICAgICBOZXdfRmllbGQtPm1heGdyb3cgPSBmaWVsZC0+bWF4Z3JvdzsKKyAgICAgIE5ld19GaWVsZC0+bmJ1ZiA9IGZpZWxkLT5uYnVmOworICAgICAgTmV3X0ZpZWxkLT5qdXN0ID0gZmllbGQtPmp1c3Q7CisgICAgICBOZXdfRmllbGQtPmZvcmUgPSBmaWVsZC0+Zm9yZTsKKyAgICAgIE5ld19GaWVsZC0+YmFjayA9IGZpZWxkLT5iYWNrOworICAgICAgTmV3X0ZpZWxkLT5wYWQgPSBmaWVsZC0+cGFkOworICAgICAgTmV3X0ZpZWxkLT5vcHRzID0gZmllbGQtPm9wdHM7CisgICAgICBOZXdfRmllbGQtPnVzcnB0ciA9IGZpZWxkLT51c3JwdHI7CisKKyAgICAgIGlmIChfbmNfQ29weV9UeXBlKE5ld19GaWVsZCwgZmllbGQpKQorCXsKKwkgIHNpemVfdCBpLCBsZW47CisKKwkgIGxlbiA9IFRvdGFsX0J1ZmZlcl9TaXplKE5ld19GaWVsZCk7CisJICBpZiAoKE5ld19GaWVsZC0+YnVmID0gKEZJRUxEX0NFTEwgKiltYWxsb2MobGVuKSkpCisJICAgIHsKKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJCU5ld19GaWVsZC0+YnVmW2ldID0gZmllbGQtPmJ1ZltpXTsKKwkgICAgICByZXR1cm5GaWVsZChOZXdfRmllbGQpOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAoTmV3X0ZpZWxkKQorICAgIGZyZWVfZmllbGQoTmV3X0ZpZWxkKTsKKworICBTRVRfRVJST1IoZXJyKTsKKyAgcmV0dXJuRmllbGQoKEZJRUxEICopMCk7Cit9CisKKy8qIGZsZF9kdXAuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZmxkX2Z0Y2hvaWNlLmMgYi9mb3JtL2ZsZF9mdGNob2ljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMzdmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF9mdGNob2ljZS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9mdGNob2ljZS5jLHYgMS45IDIwMDQvMTIvMTEgMjE6NDQ6NTcgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGR0eXBlX2Nob2ljZSgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqdHlwLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAoKiBjb25zdCBuZXh0X2Nob2ljZSkoRklFTEQgKixjb25zdCB2b2lkICopLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAoKiBjb25zdCBwcmV2X2Nob2ljZSkoRklFTEQgKixjb25zdCB2b2lkICopKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRGVmaW5lIGltcGxlbWVudGF0aW9uIG9mIGVudW1lcmF0aW9uIHJlcXVlc3RzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgYXJndW1lbnRzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2ZpZWxkdHlwZV9jaG9pY2UoRklFTERUWVBFICp0eXAsCisJCSAgICAgYm9vbCAoKmNvbnN0IG5leHRfY2hvaWNlKSAoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSwKKwkJICAgICBib29sICgqY29uc3QgcHJldl9jaG9pY2UpIChGSUVMRCAqLCBjb25zdCB2b2lkICopKQoreworICBUKChUX0NBTExFRCgic2V0X2ZpZWxkdHlwZV9jaG9pY2UoJXAsJXAsJXApIiksIHR5cCwgbmV4dF9jaG9pY2UsIHByZXZfY2hvaWNlKSk7CisKKyAgaWYgKCF0eXAgfHwgIW5leHRfY2hvaWNlIHx8ICFwcmV2X2Nob2ljZSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIHR5cC0+c3RhdHVzIHw9IF9IQVNfQ0hPSUNFOworICB0eXAtPm5leHQgPSBuZXh0X2Nob2ljZTsKKyAgdHlwLT5wcmV2ID0gcHJldl9jaG9pY2U7CisgIFJFVFVSTihFX09LKTsKK30KKworLyogZmxkX2Z0Y2hvaWNlLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9mdGxpbmsuYyBiL2Zvcm0vZmxkX2Z0bGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDIyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF9mdGxpbmsuYwpAQCAtMCwwICsxLDg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfZnRsaW5rLmMsdiAxLjEzIDIwMDcvMTAvMTMgMTk6MzA6MzUgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIEZJRUxEVFlQRSAqbGlua19maWVsZHR5cGUoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKnR5cGUxLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXBlMikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZSBhIG5ldyBmaWVsZHR5cGUgYnVpbHQgZnJvbSB0aGUgdHdvIGdpdmVuIHR5cGVzLgorfCAgICAgICAgICAgICAgICAgICAgVGhleSBhcmUgY29ubmVjdGVkIGJ5IGFuIGxvZ2ljYWwgJ09SJy4KK3wgICAgICAgICAgICAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycywgZXJybm8gaXMgc2V0IHRvICAgICAgICAgICAgICAgICAgICAKK3wgICAgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgYXJndW1lbnRzCit8ICAgICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBzeXN0ZW0gZXJyb3IgKG5vIG1lbW9yeSkKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEZpZWxkdHlwZSBwb2ludGVyIG9yIE5VTEwgaWYgZXJyb3Igb2NjdXJyZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTERUWVBFICopCitsaW5rX2ZpZWxkdHlwZShGSUVMRFRZUEUgKnR5cGUxLCBGSUVMRFRZUEUgKnR5cGUyKQoreworICBGSUVMRFRZUEUgKm5mdHlwID0gKEZJRUxEVFlQRSAqKTA7CisKKyAgVCgoVF9DQUxMRUQoImxpbmtfZmllbGR0eXBlKCVwLCVwKSIpLCB0eXBlMSwgdHlwZTIpKTsKKyAgaWYgKHR5cGUxICYmIHR5cGUyKQorICAgIHsKKyAgICAgIG5mdHlwID0gdHlwZU1hbGxvYyhGSUVMRFRZUEUsIDEpOworCisgICAgICBpZiAobmZ0eXApCisJeworCSAgVCgoVF9DUkVBVEUoImZpZWxkdHlwZSAlcCIpLCBuZnR5cCkpOworCSAgKm5mdHlwID0gKl9uY19EZWZhdWx0X0ZpZWxkVHlwZTsKKwkgIG5mdHlwLT5zdGF0dXMgfD0gX0xJTktFRF9UWVBFOworCSAgaWYgKCh0eXBlMS0+c3RhdHVzICYgX0hBU19BUkdTKSB8fCAodHlwZTItPnN0YXR1cyAmIF9IQVNfQVJHUykpCisJICAgIG5mdHlwLT5zdGF0dXMgfD0gX0hBU19BUkdTOworCSAgaWYgKCh0eXBlMS0+c3RhdHVzICYgX0hBU19DSE9JQ0UpIHx8ICh0eXBlMi0+c3RhdHVzICYgX0hBU19DSE9JQ0UpKQorCSAgICBuZnR5cC0+c3RhdHVzIHw9IF9IQVNfQ0hPSUNFOworCSAgbmZ0eXAtPmxlZnQgPSB0eXBlMTsKKwkgIG5mdHlwLT5yaWdodCA9IHR5cGUyOworCSAgdHlwZTEtPnJlZisrOworCSAgdHlwZTItPnJlZisrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBTRVRfRVJST1IoRV9TWVNURU1fRVJST1IpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBTRVRfRVJST1IoRV9CQURfQVJHVU1FTlQpOworICAgIH0KKyAgcmV0dXJuRmllbGRUeXBlKG5mdHlwKTsKK30KKworLyogZmxkX2Z0bGluay5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mbGRfaW5mby5jIGIvZm9ybS9mbGRfaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDE5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF9pbmZvLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9pbmZvLmMsdiAxLjEwIDIwMDQvMTIvMTEgMjI6MjQ6NTcgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmaWVsZF9pbmZvKGNvbnN0IEZJRUxEICpmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcm93cywgaW50ICpjb2xzLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmcm93LCBpbnQgKmZjb2wsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5yb3csIGludCAqbmJ1ZikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGluZm9zIGFib3V0IHRoZSBmaWVsZHMgY3JlYXRpb24gcGFyYW1ldGVycy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGZpZWxkIHBvaW50ZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmaWVsZF9pbmZvKGNvbnN0IEZJRUxEICpmaWVsZCwKKwkgICBpbnQgKnJvd3MsIGludCAqY29scywKKwkgICBpbnQgKmZyb3csIGludCAqZmNvbCwKKwkgICBpbnQgKm5yb3csIGludCAqbmJ1ZikKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX2luZm8oJXAsJXAsJXAsJXAsJXAsJXAsJXApIiksCisgICAgIGZpZWxkLAorICAgICByb3dzLCBjb2xzLAorICAgICBmcm93LCBmY29sLAorICAgICBucm93LCBuYnVmKSk7CisKKyAgaWYgKCFmaWVsZCkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChyb3dzKQorICAgICpyb3dzID0gZmllbGQtPnJvd3M7CisgIGlmIChjb2xzKQorICAgICpjb2xzID0gZmllbGQtPmNvbHM7CisgIGlmIChmcm93KQorICAgICpmcm93ID0gZmllbGQtPmZyb3c7CisgIGlmIChmY29sKQorICAgICpmY29sID0gZmllbGQtPmZjb2w7CisgIGlmIChucm93KQorICAgICpucm93ID0gZmllbGQtPm5yb3c7CisgIGlmIChuYnVmKQorICAgICpuYnVmID0gZmllbGQtPm5idWY7CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBkeW5hbWljX2ZpZWxkX2luZm8oY29uc3QgRklFTEQgKmZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRyb3dzLCBpbnQgKmRjb2xzLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1heGdyb3cpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBpbmZvcm1hdGlvbnMgYWJvdXQgYSBkeW5hbWljIGZpZWxkcyBjdXJyZW50Cit8ICAgICAgICAgICAgICAgICAgICBkeW5hbWljIHBhcmFtZXRlcnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2R5bmFtaWNfZmllbGRfaW5mbyhjb25zdCBGSUVMRCAqZmllbGQsIGludCAqZHJvd3MsIGludCAqZGNvbHMsIGludCAqbWF4Z3JvdykKK3sKKyAgVCgoVF9DQUxMRUQoImR5bmFtaWNfZmllbGRfaW5mbyglcCwlcCwlcCwlcCkiKSwgZmllbGQsIGRyb3dzLCBkY29scywgbWF4Z3JvdykpOworCisgIGlmICghZmllbGQpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoZHJvd3MpCisgICAgKmRyb3dzID0gZmllbGQtPmRyb3dzOworICBpZiAoZGNvbHMpCisgICAgKmRjb2xzID0gZmllbGQtPmRjb2xzOworICBpZiAobWF4Z3JvdykKKyAgICAqbWF4Z3JvdyA9IGZpZWxkLT5tYXhncm93OworCisgIFJFVFVSTihFX09LKTsKK30KKworLyogZmxkX2luZm8uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZmxkX2p1c3QuYyBiL2Zvcm0vZmxkX2p1c3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDIxZmIxCi0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mbGRfanVzdC5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9qdXN0LmMsdiAxLjExIDIwMDQvMTIvMTEgMjI6NTU6NDggdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfanVzdChGSUVMRCAqZmllbGQsIGludCBqdXN0KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBmaWVsZHMgdHlwZSBvZiBqdXN0aWZpY2F0aW9uLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gb25lIG9mIHRoZSBhcmd1bWVudHMgd2FzIGluY29ycmVjdAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2ZpZWxkX2p1c3QoRklFTEQgKmZpZWxkLCBpbnQganVzdCkKK3sKKyAgaW50IHJlcyA9IEVfQkFEX0FSR1VNRU5UOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGRfanVzdCglcCwlZCkiKSwgZmllbGQsIGp1c3QpKTsKKworICBpZiAoKGp1c3QgPT0gTk9fSlVTVElGSUNBVElPTikgfHwKKyAgICAgIChqdXN0ID09IEpVU1RJRllfTEVGVCkgfHwKKyAgICAgIChqdXN0ID09IEpVU1RJRllfQ0VOVEVSKSB8fAorICAgICAgKGp1c3QgPT0gSlVTVElGWV9SSUdIVCkpCisgICAgeworICAgICAgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKTsKKyAgICAgIGlmIChmaWVsZC0+anVzdCAhPSBqdXN0KQorCXsKKwkgIGZpZWxkLT5qdXN0ID0ganVzdDsKKwkgIHJlcyA9IF9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzKGZpZWxkKTsKKwl9CisgICAgICBlbHNlCisJcmVzID0gRV9PSzsKKyAgICB9CisgIFJFVFVSTihyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZpZWxkX2p1c3QoIGNvbnN0IEZJRUxEICpmaWVsZCApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSB0aGUgZmllbGRzIHR5cGUgb2YganVzdGlmaWNhdGlvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGp1c3RpZmljYXRpb24gdHlwZS4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmaWVsZF9qdXN0KGNvbnN0IEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX2p1c3QoJXApIiksIGZpZWxkKSk7CisgIHJldHVybkNvZGUoTm9ybWFsaXplX0ZpZWxkKGZpZWxkKS0+anVzdCk7Cit9CisKKy8qIGZsZF9qdXN0LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9saW5rLmMgYi9mb3JtL2ZsZF9saW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhYzdkYgotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX2xpbmsuYwpAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfbGluay5jLHYgMS4xMSAyMDA3LzEwLzEzIDE5OjMwOjQzIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRCAqbGlua19maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCkgIAorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgRHVwbGljYXRlcyB0aGUgZmllbGQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4gVGhlCit8ICAgICAgICAgICAgICAgICAgICBuZXcgZmllbGQgc2hhcmVzIGl0cyBidWZmZXJzIHdpdGggdGhlIG9yaWdpbmFsIG9uZSwKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbmRlcGVuZGVudC4KK3wgICAgICAgICAgICAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycywgZXJybm8gaXMgc2V0IHRvCit8ICAgICAgICAgICAgICAgICAgICAKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgLSBzeXN0ZW0gZXJyb3IKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIG5ldyBmaWVsZCBvciBOVUxMIGlmIGZhaWx1cmUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQorbGlua19maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCkKK3sKKyAgRklFTEQgKk5ld19GaWVsZCA9IChGSUVMRCAqKTA7CisgIGludCBlcnIgPSBFX0JBRF9BUkdVTUVOVDsKKworICBUKChUX0NBTExFRCgibGlua19maWVsZCglcCwlZCwlZCkiKSwgZmllbGQsIGZyb3csIGZjb2wpKTsKKyAgaWYgKGZpZWxkICYmIChmcm93ID49IDApICYmIChmY29sID49IDApICYmCisgICAgICAoKGVyciA9IEVfU1lTVEVNX0VSUk9SKSAhPSAwKSAmJgkvKiB0cmljazogdGhpcyByZXNldHMgdGhlIGRlZmF1bHQgZXJyb3IgKi8KKyAgICAgIChOZXdfRmllbGQgPSB0eXBlTWFsbG9jKEZJRUxELCAxKSkpCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoImZpZWxkICVwIiksIE5ld19GaWVsZCkpOworICAgICAgKk5ld19GaWVsZCA9ICpfbmNfRGVmYXVsdF9GaWVsZDsKKyAgICAgIE5ld19GaWVsZC0+ZnJvdyA9IGZyb3c7CisgICAgICBOZXdfRmllbGQtPmZjb2wgPSBmY29sOworCisgICAgICBOZXdfRmllbGQtPmxpbmsgPSBmaWVsZC0+bGluazsKKyAgICAgIGZpZWxkLT5saW5rID0gTmV3X0ZpZWxkOworCisgICAgICBOZXdfRmllbGQtPmJ1ZiA9IGZpZWxkLT5idWY7CisgICAgICBOZXdfRmllbGQtPnJvd3MgPSBmaWVsZC0+cm93czsKKyAgICAgIE5ld19GaWVsZC0+Y29scyA9IGZpZWxkLT5jb2xzOworICAgICAgTmV3X0ZpZWxkLT5ucm93ID0gZmllbGQtPm5yb3c7CisgICAgICBOZXdfRmllbGQtPm5idWYgPSBmaWVsZC0+bmJ1ZjsKKyAgICAgIE5ld19GaWVsZC0+ZHJvd3MgPSBmaWVsZC0+ZHJvd3M7CisgICAgICBOZXdfRmllbGQtPmRjb2xzID0gZmllbGQtPmRjb2xzOworICAgICAgTmV3X0ZpZWxkLT5tYXhncm93ID0gZmllbGQtPm1heGdyb3c7CisgICAgICBOZXdfRmllbGQtPmp1c3QgPSBmaWVsZC0+anVzdDsKKyAgICAgIE5ld19GaWVsZC0+Zm9yZSA9IGZpZWxkLT5mb3JlOworICAgICAgTmV3X0ZpZWxkLT5iYWNrID0gZmllbGQtPmJhY2s7CisgICAgICBOZXdfRmllbGQtPnBhZCA9IGZpZWxkLT5wYWQ7CisgICAgICBOZXdfRmllbGQtPm9wdHMgPSBmaWVsZC0+b3B0czsKKyAgICAgIE5ld19GaWVsZC0+dXNycHRyID0gZmllbGQtPnVzcnB0cjsKKworICAgICAgaWYgKF9uY19Db3B5X1R5cGUoTmV3X0ZpZWxkLCBmaWVsZCkpCisJcmV0dXJuRmllbGQoTmV3X0ZpZWxkKTsKKyAgICB9CisKKyAgaWYgKE5ld19GaWVsZCkKKyAgICBmcmVlX2ZpZWxkKE5ld19GaWVsZCk7CisKKyAgU0VUX0VSUk9SKGVycik7CisgIHJldHVybkZpZWxkKChGSUVMRCAqKTApOworfQorCisvKiBmbGRfbGluay5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mbGRfbWF4LmMgYi9mb3JtL2ZsZF9tYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjUzNTJlCi0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mbGRfbWF4LmMKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX21heC5jLHYgMS45IDIwMDQvMTIvMTEgMjE6NTE6NTQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWF4X2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IG1heGdyb3cpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIG1heGltdW0gZ3Jvd3RoIGZvciBhIGR5bmFtaWMgZmllbGQuIElmIG1heGdyb3c9MAorfCAgICAgICAgICAgICAgICAgICAgdGhlIGZpZWxkIG1heSBncm93IHRvIGFueSBwb3NzaWJsZSBzaXplLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgYXJndW1lbnQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWF4X2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IG1heGdyb3cpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbWF4X2ZpZWxkKCVwLCVkKSIpLCBmaWVsZCwgbWF4Z3JvdykpOworCisgIGlmICghZmllbGQgfHwgKG1heGdyb3cgPCAwKSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgYm9vbCBzaW5nbGVfbGluZV9maWVsZCA9IFNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKTsKKworICAgICAgaWYgKG1heGdyb3cgPiAwKQorCXsKKwkgIGlmICgoc2luZ2xlX2xpbmVfZmllbGQgJiYgKG1heGdyb3cgPCBmaWVsZC0+ZGNvbHMpKSB8fAorCSAgICAgICghc2luZ2xlX2xpbmVfZmllbGQgJiYgKG1heGdyb3cgPCBmaWVsZC0+ZHJvd3MpKSkKKwkgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKwl9CisgICAgICBmaWVsZC0+bWF4Z3JvdyA9IG1heGdyb3c7CisgICAgICBmaWVsZC0+c3RhdHVzICY9IH5fTUFZX0dST1c7CisgICAgICBpZiAoIShmaWVsZC0+b3B0cyAmIE9fU1RBVElDKSkKKwl7CisJICBpZiAoKG1heGdyb3cgPT0gMCkgfHwKKwkgICAgICAoc2luZ2xlX2xpbmVfZmllbGQgJiYgKGZpZWxkLT5kY29scyA8IG1heGdyb3cpKSB8fAorCSAgICAgICghc2luZ2xlX2xpbmVfZmllbGQgJiYgKGZpZWxkLT5kcm93cyA8IG1heGdyb3cpKSkKKwkgICAgZmllbGQtPnN0YXR1cyB8PSBfTUFZX0dST1c7CisJfQorICAgIH0KKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmbGRfbWF4LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9tb3ZlLmMgYi9mb3JtL2ZsZF9tb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljZWFhZQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX21vdmUuYwpAQCAtMCwwICsxLDY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfbW92ZS5jLHYgMS45IDIwMDQvMTIvMTEgMjE6NTI6NDQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtb3ZlX2ZpZWxkKEZJRUxEICpmaWVsZCxpbnQgZnJvdywgaW50IGZjb2wpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlcyB0aGUgZGlzY29ubmVjdGVkIGZpZWxkIHRvIHRoZSBuZXcgbG9jYXRpb24gaW4KK3wgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtcyBzdWJ3aW5kb3cuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIGFyZ3VtZW50IHBhc3NlZAorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgIC0gZmllbGQgaXMgY29ubmVjdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorbW92ZV9maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCkKK3sKKyAgVCgoVF9DQUxMRUQoIm1vdmVfZmllbGQoJXAsJWQsJWQpIiksIGZpZWxkLCBmcm93LCBmY29sKSk7CisKKyAgaWYgKCFmaWVsZCB8fCAoZnJvdyA8IDApIHx8IChmY29sIDwgMCkpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoZmllbGQtPmZvcm0pCisgICAgUkVUVVJOKEVfQ09OTkVDVEVEKTsKKworICBmaWVsZC0+ZnJvdyA9IGZyb3c7CisgIGZpZWxkLT5mY29sID0gZmNvbDsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmbGRfbW92ZS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mbGRfbmV3ZnR5cC5jIGIvZm9ybS9mbGRfbmV3ZnR5cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOTg0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF9uZXdmdHlwLmMKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9uZXdmdHlwLmMsdiAxLjE1IDIwMDcvMTAvMTMgMTk6MzA6NTUgdG9tIEV4cCAkIikKKworc3RhdGljIEZJRUxEVFlQRSBjb25zdCBkZWZhdWx0X2ZpZWxkdHlwZSA9Cit7CisgIDAsCQkJCS8qIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMEwsCQkJCS8qIHJlZmVyZW5jZSBjb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCQkvKiBwb2ludGVyIHRvIGxlZnQgIG9wZXJhbmQgICAgICAgICAgICAgICAgICAgICovCisgIChGSUVMRFRZUEUgKikwLAkJLyogcG9pbnRlciB0byByaWdodCBvcGVyYW5kICAgICAgICAgICAgICAgICAgICAqLworICBOVUxMLAkJCQkvKiBtYWtlYXJnIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIE5VTEwsCQkJCS8qIGNvcHlhcmcgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgTlVMTCwJCQkJLyogZnJlZWFyZyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBOVUxMLAkJCQkvKiBmaWVsZCB2YWxpZGF0aW9uIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICovCisgIE5VTEwsCQkJCS8qIENoYXJhY3RlciBjaGVjayBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgKi8KKyAgTlVMTCwJCQkJLyogZW51bWVyYXRlIG5leHQgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAqLworICBOVUxMCQkJCS8qIGVudW1lcmF0ZSBwcmV2aW91cyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgKi8KK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihjb25zdCBGSUVMRFRZUEUgKikKK19uY19EZWZhdWx0X0ZpZWxkVHlwZSA9ICZkZWZhdWx0X2ZpZWxkdHlwZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoCit8ICAgICAgICAgICAgICAgICAgICAgICBib29sICgqIGNvbnN0IGZpZWxkX2NoZWNrKShGSUVMRCAqLGNvbnN0IHZvaWQgKiksCit8ICAgICAgICAgICAgICAgICAgICAgICBib29sICgqIGNvbnN0IGNoYXJfY2hlY2spIChpbnQsIGNvbnN0IHZvaWQgKikgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlIGEgbmV3IGZpZWxkdHlwZS4gVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgbXVzdAorfCAgICAgICAgICAgICAgICAgICAgd3JpdGUgYSBmaWVsZF9jaGVjayBhbmQgYSBjaGFyX2NoZWNrIGZ1bmN0aW9uIGFuZCBnaXZlCit8ICAgICAgICAgICAgICAgICAgICB0aGVtIGFzIGlucHV0IHRvIHRoaXMgY2FsbC4KK3wgICAgICAgICAgICAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycywgZXJybm8gaXMgc2V0IHRvCit8ICAgICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIGFyZ3VtZW50cworfCAgICAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gc3lzdGVtIGVycm9yIChubyBtZW1vcnkpCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBGaWVsZHR5cGUgcG9pbnRlciBvciBOVUxMIGlmIGVycm9yIG9jY3VycmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTERUWVBFICopCituZXdfZmllbGR0eXBlKGJvb2wgKCpjb25zdCBmaWVsZF9jaGVjaykgKEZJRUxEICosIGNvbnN0IHZvaWQgKiksCisJICAgICAgYm9vbCAoKmNvbnN0IGNoYXJfY2hlY2spIChpbnQsIGNvbnN0IHZvaWQgKikpCit7CisgIEZJRUxEVFlQRSAqbmZ0eXAgPSAoRklFTERUWVBFICopMDsKKworICBUKChUX0NBTExFRCgibmV3X2ZpZWxkdHlwZSglcCwlcCkiKSwgZmllbGRfY2hlY2ssIGNoYXJfY2hlY2spKTsKKyAgaWYgKChmaWVsZF9jaGVjaykgfHwgKGNoYXJfY2hlY2spKQorICAgIHsKKyAgICAgIG5mdHlwID0gdHlwZU1hbGxvYyhGSUVMRFRZUEUsIDEpOworCisgICAgICBpZiAobmZ0eXApCisJeworCSAgVCgoVF9DUkVBVEUoImZpZWxkdHlwZSAlcCIpLCBuZnR5cCkpOworCSAgKm5mdHlwID0gZGVmYXVsdF9maWVsZHR5cGU7CisJICBuZnR5cC0+ZmNoZWNrID0gZmllbGRfY2hlY2s7CisJICBuZnR5cC0+Y2NoZWNrID0gY2hhcl9jaGVjazsKKwl9CisgICAgICBlbHNlCisJeworCSAgU0VUX0VSUk9SKEVfU1lTVEVNX0VSUk9SKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgU0VUX0VSUk9SKEVfQkFEX0FSR1VNRU5UKTsKKyAgICB9CisgIHJldHVybkZpZWxkVHlwZShuZnR5cCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZyZWVfZmllbGR0eXBlKEZJRUxEVFlQRSAqdHlwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkdHlwZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQ09OTkVDVEVEICAgICAtIHRoZXJlIGFyZSBmaWVsZHMgcmVmZXJlbmNpbmcgdGhlIHR5cGUKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgZmllbGR0eXBlIHBvaW50ZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmcmVlX2ZpZWxkdHlwZShGSUVMRFRZUEUgKnR5cCkKK3sKKyAgVCgoVF9DQUxMRUQoImZyZWVfZmllbGR0eXBlKCVwKSIpLCB0eXApKTsKKworICBpZiAoIXR5cCkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmICh0eXAtPnJlZiAhPSAwKQorICAgIFJFVFVSTihFX0NPTk5FQ1RFRCk7CisKKyAgaWYgKHR5cC0+c3RhdHVzICYgX1JFU0lERU5UKQorICAgIFJFVFVSTihFX0NPTk5FQ1RFRCk7CisKKyAgaWYgKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKQorICAgIHsKKyAgICAgIGlmICh0eXAtPmxlZnQpCisJdHlwLT5sZWZ0LT5yZWYtLTsKKyAgICAgIGlmICh0eXAtPnJpZ2h0KQorCXR5cC0+cmlnaHQtPnJlZi0tOworICAgIH0KKyAgZnJlZSh0eXApOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIGZsZF9uZXdmdHlwLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9vcHRzLmMgYi9mb3JtL2ZsZF9vcHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4ODFhYwotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX29wdHMuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX29wdHMuYyx2IDEuMTEgMjAwNC8xMi8xMSAyMTo1NTo0NiB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRmllbGQtT3B0aW9ucyBtYW5pcHVsYXRpb24gcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZF9vcHRzKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVHVybnMgb24gdGhlIG5hbWVkIG9wdGlvbnMgZm9yIHRoaXMgZmllbGQgYW5kIHR1cm5zCit8ICAgICAgICAgICAgICAgICAgICBvZmYgYWxsIHRoZSByZW1haW5pbmcgb3B0aW9ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQ1VSUkVOVCAgICAgICAtIHRoZSBmaWVsZCBpcyB0aGUgY3VycmVudCBmaWVsZAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBvcHRpb25zCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZmllbGRfb3B0cyhGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgb3B0cykKK3sKKyAgaW50IHJlcyA9IEVfQkFEX0FSR1VNRU5UOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGRfb3B0cyglcCwlZCkiKSwgZmllbGQsIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9GSUVMRF9PUFRTOworICBpZiAoIShvcHRzICYgfkFMTF9GSUVMRF9PUFRTKSkKKyAgICByZXMgPSBfbmNfU3luY2hyb25pemVfT3B0aW9ucyhOb3JtYWxpemVfRmllbGQoZmllbGQpLCBvcHRzKTsKKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBGaWVsZF9PcHRpb25zIGZpZWxkX29wdHMoY29uc3QgRklFTEQgKmZpZWxkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIGZpZWxkcyBvcHRpb25zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIG9wdGlvbnMuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRmllbGRfT3B0aW9ucykKK2ZpZWxkX29wdHMoY29uc3QgRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgiZmllbGRfb3B0cyglcCkiKSwgZmllbGQpKTsKKworICByZXR1cm5Db2RlKEFMTF9GSUVMRF9PUFRTICYgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKS0+b3B0cyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZmllbGRfb3B0c19vbihGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgb3B0cykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFR1cm5zIG9uIHRoZSBuYW1lZCBvcHRpb25zIGZvciB0aGlzIGZpZWxkIGFuZCBhbGwgdGhlIAorfCAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIG9wdGlvbnMgYXJlIHVuY2hhbmdlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQ1VSUkVOVCAgICAgICAtIHRoZSBmaWVsZCBpcyB0aGUgY3VycmVudCBmaWVsZAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBvcHRpb25zCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmaWVsZF9vcHRzX29uKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKQoreworICBpbnQgcmVzID0gRV9CQURfQVJHVU1FTlQ7CisKKyAgVCgoVF9DQUxMRUQoImZpZWxkX29wdHNfb24oJXAsJWQpIiksIGZpZWxkLCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfRklFTERfT1BUUzsKKyAgaWYgKCEob3B0cyAmIH5BTExfRklFTERfT1BUUykpCisgICAgeworICAgICAgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKTsKKyAgICAgIHJlcyA9IF9uY19TeW5jaHJvbml6ZV9PcHRpb25zKGZpZWxkLCBmaWVsZC0+b3B0cyB8IG9wdHMpOworICAgIH0KKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBUdXJucyBvZmYgdGhlIG5hbWVkIG9wdGlvbnMgZm9yIHRoaXMgZmllbGQgYW5kIGFsbCB0aGUgCit8ICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgb3B0aW9ucyBhcmUgdW5jaGFuZ2VkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9DVVJSRU5UICAgICAgIC0gdGhlIGZpZWxkIGlzIHRoZSBjdXJyZW50IGZpZWxkCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZpZWxkX29wdHNfb2ZmKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKQoreworICBpbnQgcmVzID0gRV9CQURfQVJHVU1FTlQ7CisKKyAgVCgoVF9DQUxMRUQoImZpZWxkX29wdHNfb2ZmKCVwLCVkKSIpLCBmaWVsZCwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX0ZJRUxEX09QVFM7CisgIGlmICghKG9wdHMgJiB+QUxMX0ZJRUxEX09QVFMpKQorICAgIHsKKyAgICAgIE5vcm1hbGl6ZV9GaWVsZChmaWVsZCk7CisgICAgICByZXMgPSBfbmNfU3luY2hyb25pemVfT3B0aW9ucyhmaWVsZCwgZmllbGQtPm9wdHMgJiB+b3B0cyk7CisgICAgfQorICBSRVRVUk4ocmVzKTsKK30KKworLyogZmxkX29wdHMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZmxkX3BhZC5jIGIvZm9ybS9mbGRfcGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkOGFkMQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX3BhZC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9wYWQuYyx2IDEuOSAyMDA0LzEyLzExIDIxOjU2OjQ5IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX3BhZChGSUVMRCAqZmllbGQsIGludCBjaCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgcGFkIGNoYXJhY3RlciB1c2VkIHRvIGZpbGwgdGhlIGZpZWxkLiBUaGlzIG11c3QKK3wgICAgICAgICAgICAgICAgICAgIGJlIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGZpZWxkIHBvaW50ZXIgb3IgcGFkIGNoYXJhY3RlcgorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZmllbGRfcGFkKEZJRUxEICpmaWVsZCwgaW50IGNoKQoreworICBpbnQgcmVzID0gRV9CQURfQVJHVU1FTlQ7CisKKyAgVCgoVF9DQUxMRUQoInNldF9maWVsZF9wYWQoJXAsJWQpIiksIGZpZWxkLCBjaCkpOworCisgIE5vcm1hbGl6ZV9GaWVsZChmaWVsZCk7CisgIGlmIChpc3ByaW50KFVDaGFyKGNoKSkpCisgICAgeworICAgICAgaWYgKGZpZWxkLT5wYWQgIT0gY2gpCisJeworCSAgZmllbGQtPnBhZCA9IGNoOworCSAgcmVzID0gX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMoZmllbGQpOworCX0KKyAgICAgIGVsc2UKKwlyZXMgPSBFX09LOworICAgIH0KKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZmllbGRfcGFkKGNvbnN0IEZJRUxEICpmaWVsZCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIHRoZSBmaWVsZHMgcGFkIGNoYXJhY3Rlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBwYWQgY2hhcmFjdGVyLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZpZWxkX3BhZChjb25zdCBGSUVMRCAqZmllbGQpCit7CisgIFQoKFRfQ0FMTEVEKCJmaWVsZF9wYWQoJXApIiksIGZpZWxkKSk7CisKKyAgcmV0dXJuQ29kZShOb3JtYWxpemVfRmllbGQoZmllbGQpLT5wYWQpOworfQorCisvKiBmbGRfcGFkLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9wYWdlLmMgYi9mb3JtL2ZsZF9wYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhZjQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX3BhZ2UuYwpAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfcGFnZS5jLHYgMS45IDIwMDQvMTIvMTEgMjE6NTg6MTkgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbmV3X3BhZ2UoRklFTEQgKmZpZWxkLCBib29sIG5ld19wYWdlX2ZsYWcpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBNYXJrcyB0aGUgZmllbGQgYXMgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBwYWdlIG9mIAorfCAgICAgICAgICAgICAgICAgICAgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgLSBmaWVsZCBpcyBjb25uZWN0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbmV3X3BhZ2UoRklFTEQgKmZpZWxkLCBib29sIG5ld19wYWdlX2ZsYWcpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbmV3X3BhZ2UoJXAsJWQpIiksIGZpZWxkLCBuZXdfcGFnZV9mbGFnKSk7CisKKyAgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKTsKKyAgaWYgKGZpZWxkLT5mb3JtKQorICAgIFJFVFVSTihFX0NPTk5FQ1RFRCk7CisKKyAgaWYgKG5ld19wYWdlX2ZsYWcpCisgICAgZmllbGQtPnN0YXR1cyB8PSBfTkVXUEFHRTsKKyAgZWxzZQorICAgIGZpZWxkLT5zdGF0dXMgJj0gfl9ORVdQQUdFOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGJvb2wgbmV3X3BhZ2UoY29uc3QgRklFTEQgKmZpZWxkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIGluZm8gd2hldGhlciBvciBub3QgdGhlIGZpZWxkIHN0YXJ0cyBhCit8ICAgICAgICAgICAgICAgICAgICBuZXcgcGFnZSBvbiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gZmllbGQgc3RhcnRzIGEgbmV3IHBhZ2UKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gZmllbGQgZG9lc24ndCBzdGFydCBhIG5ldyBwYWdlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK25ld19wYWdlKGNvbnN0IEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoIm5ld19wYWdlKCVwKSIpLCBmaWVsZCkpOworCisgIHJldHVybkJvb2woKE5vcm1hbGl6ZV9GaWVsZChmaWVsZCktPnN0YXR1cyAmIF9ORVdQQUdFKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qIGZsZF9wYWdlLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF9zdGF0LmMgYi9mb3JtL2ZsZF9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1YjRkNQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX3N0YXQuYwpAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfc3RhdC5jLHYgMS4xMSAyMDA0LzEyLzExIDIyOjI4OjAwIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQsIGJvb2wgc3RhdHVzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IG9yIGNsZWFyIHRoZSAnY2hhbmdlZCcgaW5kaWNhdGlvbiBmbGFnIGZvciB0aGF0Cit8ICAgICAgICAgICAgICAgICAgICBmaWVsZHMgcHJpbWFyeSBidWZmZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2ZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQsIGJvb2wgc3RhdHVzKQoreworICBUKChUX0NBTExFRCgic2V0X2ZpZWxkX3N0YXR1cyglcCwlZCkiKSwgZmllbGQsIHN0YXR1cykpOworCisgIE5vcm1hbGl6ZV9GaWVsZChmaWVsZCk7CisKKyAgaWYgKHN0YXR1cykKKyAgICBmaWVsZC0+c3RhdHVzIHw9IF9DSEFOR0VEOworICBlbHNlCisgICAgZmllbGQtPnN0YXR1cyAmPSB+X0NIQU5HRUQ7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBmaWVsZF9zdGF0dXMoY29uc3QgRklFTEQgKmZpZWxkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSAnY2hhbmdlZCcgaW5kaWNhdGlvbiBmbGFnCit8ICAgICAgICAgICAgICAgICAgICBmb3IgdGhhdCBmaWVsZHMgcHJpbWFyeSBidWZmZXIuIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBidWZmZXIgaGFzIGJlZW4gY2hhbmdlZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBidWZmZXIgaGFzIG5vdCBiZWVuIGNoYW5nZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChib29sKQorZmllbGRfc3RhdHVzKGNvbnN0IEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX3N0YXR1cyglcCkiKSwgZmllbGQpKTsKKworICByZXR1cm5Cb29sKChOb3JtYWxpemVfRmllbGQoZmllbGQpLT5zdGF0dXMgJiBfQ0hBTkdFRCkgPyBUUlVFIDogRkFMU0UpOworfQorCisvKiBmbGRfc3RhdC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mbGRfdHlwZS5jIGIvZm9ybS9mbGRfdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YTNmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZsZF90eXBlLmMKQEAgLTAsMCArMSw5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX3R5cGUuYyx2IDEuMTUgMjAwNC8xMi8yNSAyMjoyNDoxMCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgRklFTERUWVBFICp0eXBlLC4uLikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFzc29jaWF0ZSB0aGUgc3BlY2lmaWVkIGZpZWxkdHlwZSB3aXRoIHRoZSBmaWVsZC4KK3wgICAgICAgICAgICAgICAgICAgIENlcnRhaW4gZmllbGQgdHlwZXMgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gTG9vaworfCAgICAgICAgICAgICAgICAgICAgYXQgdGhlIHNwZWMgb2YgdGhlIGZpZWxkIHR5cGVzICEKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsIEZJRUxEVFlQRSAqdHlwZSwuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIGludCByZXMgPSBFX1NZU1RFTV9FUlJPUjsKKyAgaW50IGVyciA9IDA7CisKKyAgVCgoVF9DQUxMRUQoInNldF9maWVsZF90eXBlKCVwLCVwKSIpLCBmaWVsZCwgdHlwZSkpOworCisgIHZhX3N0YXJ0KGFwLCB0eXBlKTsKKworICBOb3JtYWxpemVfRmllbGQoZmllbGQpOworICBfbmNfRnJlZV9UeXBlKGZpZWxkKTsKKworICBmaWVsZC0+dHlwZSA9IHR5cGU7CisgIGZpZWxkLT5hcmcgPSAodm9pZCAqKV9uY19NYWtlX0FyZ3VtZW50KGZpZWxkLT50eXBlLCAmYXAsICZlcnIpOworCisgIGlmIChlcnIpCisgICAgeworICAgICAgX25jX0ZyZWVfQXJndW1lbnQoZmllbGQtPnR5cGUsIChUeXBlQXJndW1lbnQgKikoZmllbGQtPmFyZykpOworICAgICAgZmllbGQtPnR5cGUgPSAoRklFTERUWVBFICopMDsKKyAgICAgIGZpZWxkLT5hcmcgPSAodm9pZCAqKTA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVzID0gRV9PSzsKKyAgICAgIGlmIChmaWVsZC0+dHlwZSkKKwlmaWVsZC0+dHlwZS0+cmVmKys7CisgICAgfQorCisgIHZhX2VuZChhcCk7CisgIFJFVFVSTihyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgRklFTERUWVBFICpmaWVsZF90eXBlKGNvbnN0IEZJRUxEICpmaWVsZCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIHRoZSBhc3NvY2lhdGVkIGZpZWxkdHlwZSBmb3IgdGhpcyBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gZmllbGR0eXBlIG9mIE5VTEwgaWYgbm9uZSBpcyBkZWZpbmVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKEZJRUxEVFlQRSAqKQorZmllbGRfdHlwZShjb25zdCBGSUVMRCAqZmllbGQpCit7CisgIFQoKFRfQ0FMTEVEKCJmaWVsZF90eXBlKCVwKSIpLCBmaWVsZCkpOworICByZXR1cm5GaWVsZFR5cGUoTm9ybWFsaXplX0ZpZWxkKGZpZWxkKS0+dHlwZSk7Cit9CisKKy8qIGZsZF90eXBlLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZsZF91c2VyLmMgYi9mb3JtL2ZsZF91c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzNjIyYwotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZmxkX3VzZXIuYwpAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfdXNlci5jLHYgMS4xNSAyMDA0LzEyLzI1IDIyOjI0OjUwIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkLCB2b2lkICp1c3JwdHIpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIHBvaW50ZXIgdGhhdCBpcyByZXNlcnZlZCBpbiBhbnkgZmllbGQgdG8gc3RvcmUKK3wgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgIC0gb24gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9maWVsZF91c2VycHRyKEZJRUxEICpmaWVsZCwgdm9pZCAqdXNycHRyKQoreworICBUKChUX0NBTExFRCgic2V0X2ZpZWxkX3VzZXJwdHIoJXAsJXApIiksIGZpZWxkLCB1c3JwdHIpKTsKKworICBOb3JtYWxpemVfRmllbGQoZmllbGQpLT51c3JwdHIgPSB1c3JwdHI7CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKmZpZWxkX3VzZXJwdHIoY29uc3QgRklFTEQgKmZpZWxkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IGZpZWxkIHRvCit8ICAgICAgICAgICAgICAgICAgICBzdG9yZSBhcHBsaWNhdGlvbiByZWxldmFudCBpbmZvcm1hdGlvbnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBWYWx1ZSBvZiBwb2ludGVyLiBJZiBubyBzdWNoIHBvaW50ZXIgaGFzIGJlZW4gc2V0LAorfCAgICAgICAgICAgICAgICAgICAgTlVMTCBpcyByZXR1cm5lZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQgKikKK2ZpZWxkX3VzZXJwdHIoY29uc3QgRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgiZmllbGRfdXNlcnB0ciglcCkiKSwgZmllbGQpKTsKKyAgcmV0dXJuVm9pZFB0cihOb3JtYWxpemVfRmllbGQoZmllbGQpLT51c3JwdHIpOworfQorCisvKiBmbGRfdXNlci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mb3JtLmggYi9mb3JtL2Zvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDY5MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mb3JtLmgKQEAgLTAsMCArMSw0MDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogZm9ybS5oLHYgMC4yMCAyMDA0LzEyLzA0IDIyOjIyOjEwIHRvbSBFeHAgJCAqLworCisjaWZuZGVmIEZPUk1fSAorI2RlZmluZSBGT1JNX0gKKworI2luY2x1ZGUgPGN1cnNlcy5oPgorI2luY2x1ZGUgPGV0aS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBGT1JNX1BSSVZfSAordHlwZWRlZiB2b2lkICpGSUVMRF9DRUxMOworI2VuZGlmCisKKyNpZm5kZWYgTkNVUlNFU19GSUVMRF9JTlRFUk5BTFMKKyNkZWZpbmUgTkNVUlNFU19GSUVMRF9JTlRFUk5BTFMgLyogbm90aGluZyAqLworI2VuZGlmCisKK3R5cGVkZWYgaW50IEZvcm1fT3B0aW9uczsKK3R5cGVkZWYgaW50IEZpZWxkX09wdGlvbnM7CisKKwkvKioqKioqKioqKgorCSogIF9QQUdFICAqCisJKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzaG9ydCBwbWluOwkJLyogaW5kZXggb2YgZmlyc3QgZmllbGQgb24gcGFnZQkJCSovCisgIHNob3J0IHBtYXg7CQkvKiBpbmRleCBvZiBsYXN0IGZpZWxkIG9uIHBhZ2UJCQkqLworICBzaG9ydCBzbWluOwkJLyogaW5kZXggb2YgdG9wIGxlZnRtb3N0IGZpZWxkIG9uIHBhZ2UJCSovCisgIHNob3J0IHNtYXg7CQkvKiBpbmRleCBvZiBib3R0b20gcmlnaHRtb3N0IGZpZWxkIG9uIHBhZ2UJKi8KK30gX1BBR0U7CisKKwkvKioqKioqKioqKgorCSogIEZJRUxEICAqCisJKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgZmllbGRub2RlIHsKKyAgdW5zaWduZWQgc2hvcnQJc3RhdHVzOwkJLyogZmxhZ3MJCQkqLworICBzaG9ydAkJCXJvd3M7CQkvKiBzaXplIGluIHJvd3MJCQkqLworICBzaG9ydAkJCWNvbHM7CQkvKiBzaXplIGluIGNvbHMJCQkqLworICBzaG9ydAkJCWZyb3c7CQkvKiBmaXJzdCByb3cJCQkqLworICBzaG9ydAkJCWZjb2w7CQkvKiBmaXJzdCBjb2wJCQkqLworICBpbnQJCQlkcm93czsJCS8qIGR5bmFtaWMgcm93cwkJCSovCisgIGludAkJCWRjb2xzOwkJLyogZHluYW1pYyBjb2xzCQkJKi8KKyAgaW50CQkJbWF4Z3JvdzsJLyogbWF4aW11bSBmaWVsZCBncm93dGgJCSovCisgIGludAkJCW5yb3c7CQkvKiBvZmYtc2NyZWVuIHJvd3MJCSovCisgIHNob3J0CQkJbmJ1ZjsJCS8qIGFkZGl0aW9uYWwgYnVmZmVycwkJKi8KKyAgc2hvcnQJCQlqdXN0OwkJLyoganVzdGlmaWNhdGlvbgkJKi8KKyAgc2hvcnQJCQlwYWdlOwkJLyogcGFnZSBvbiBmb3JtCQkJKi8KKyAgc2hvcnQJCQlpbmRleDsJCS8qIGludG8gZm9ybSAtPiBmaWVsZAkJKi8KKyAgaW50CQkJcGFkOwkJLyogcGFkIGNoYXJhY3RlcgkJKi8KKyAgY2h0eXBlCQlmb3JlOwkJLyogZm9yZWdyb3VuZCBhdHRyaWJ1dGUJCSovCisgIGNodHlwZQkJYmFjazsJCS8qIGJhY2tncm91bmQgYXR0cmlidXRlCQkqLworICBGaWVsZF9PcHRpb25zCQlvcHRzOwkJLyogb3B0aW9ucwkJCSovCisgIHN0cnVjdCBmaWVsZG5vZGUgKglzbmV4dDsJCS8qIHNvcnRlZCBvcmRlciBwb2ludGVyCQkqLworICBzdHJ1Y3QgZmllbGRub2RlICoJc3ByZXY7CQkvKiBzb3J0ZWQgb3JkZXIgcG9pbnRlcgkJKi8KKyAgc3RydWN0IGZpZWxkbm9kZSAqCWxpbms7CQkvKiBsaW5rZWQgZmllbGQgY2hhaW4JCSovCisgIHN0cnVjdCBmb3Jtbm9kZSAqCWZvcm07CQkvKiBjb250YWluaW5nIGZvcm0JCSovCisgIHN0cnVjdCB0eXBlbm9kZSAqCXR5cGU7CQkvKiBmaWVsZCB0eXBlCQkJKi8KKyAgdm9pZCAqCQlhcmc7CQkvKiBhcmd1bWVudCBmb3IgdHlwZQkJKi8KKyAgRklFTERfQ0VMTCAqCQlidWY7CQkvKiBmaWVsZCBidWZmZXJzCQkqLworICB2b2lkICoJCXVzcnB0cjsJCS8qIHVzZXIgcG9pbnRlcgkJCSovCisgIC8qCisgICAqIFRoZSB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGV4dHJhIGluZm9ybWF0aW9uLiAgQmVjYXVzZQorICAgKiB0aGVyZSBhcmUgZXhpc3RpbmcgYXBwbGljYXRpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgbWVtYmVycyBvZiBGSUVMRAorICAgKiBkaXJlY3RseSwgd2UgY2Fubm90IG1ha2UgdGhlIHN0cnVjdCBvcGFxdWUuICBPZmZzZXRzIG9mIG1lbWJlcnMgdXAgdG8KKyAgICogdGhpcyBwb2ludCBhcmUgdGhlIHNhbWUgaW4gdGhlIG5hcnJvdy0gYW5kIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisgICAqIEJ1dCBub3RlIHRoYXQgdGhlIHR5cGUgb2YgYnVmIGRlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24sIGFuZCBpcyBtYWRlCisgICAqIG9wYXF1ZSBmb3IgdGhhdCByZWFzb24uCisgICAqLworICBOQ1VSU0VTX0ZJRUxEX0lOVEVSTkFMUworfSBGSUVMRDsKKworCS8qKioqKioqKioqKioqKgorCSogIEZJRUxEVFlQRSAgKgorCSoqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB0eXBlbm9kZSB7CisgIHVuc2lnbmVkIHNob3J0CXN0YXR1czsJCQkvKiBmbGFncwkJKi8KKyAgbG9uZwkJCXJlZjsJCQkvKiByZWZlcmVuY2UgY291bnQJKi8KKyAgc3RydWN0IHR5cGVub2RlICoJbGVmdDsJCQkvKiBwdHIgdG8gb3BlcmFuZCBmb3IgfCAqLworICBzdHJ1Y3QgdHlwZW5vZGUgKglyaWdodDsJCQkvKiBwdHIgdG8gb3BlcmFuZCBmb3IgfCAqLworCisgIHZvaWQqICgqbWFrZWFyZykodmFfbGlzdCAqKTsJCQkvKiBtYWtlIGZpZWxkdHlwZSBhcmcJKi8KKyAgdm9pZCogKCpjb3B5YXJnKShjb25zdCB2b2lkICopOwkJLyogY29weSBmaWVsZHR5cGUgYXJnCSovCisgIHZvaWQJKCpmcmVlYXJnKSh2b2lkICopOwkJCS8qIGZyZWUgZmllbGR0eXBlIGFyZwkqLworCisgIGJvb2wJKCpmY2hlY2spKEZJRUxEICosY29uc3Qgdm9pZCAqKTsJLyogZmllbGQgdmFsaWRhdGlvbgkqLworICBib29sCSgqY2NoZWNrKShpbnQsY29uc3Qgdm9pZCAqKTsJCS8qIGNoYXJhY3RlciB2YWxpZGF0aW9uICovCisKKyAgYm9vbAkoKm5leHQpKEZJRUxEICosY29uc3Qgdm9pZCAqKTsJCS8qIGVudW1lcmF0ZSBuZXh0IHZhbHVlICovCisgIGJvb2wJKCpwcmV2KShGSUVMRCAqLGNvbnN0IHZvaWQgKik7CQkvKiBlbnVtZXJhdGUgcHJldiB2YWx1ZSAqLworCit9IEZJRUxEVFlQRTsKKworCS8qKioqKioqKioKKwkqICBGT1JNICAqCisJKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBmb3Jtbm9kZSB7CisgIHVuc2lnbmVkIHNob3J0CXN0YXR1czsJCS8qIGZsYWdzCQkJKi8KKyAgc2hvcnQJCQlyb3dzOwkJLyogc2l6ZSBpbiByb3dzCQkJKi8KKyAgc2hvcnQJCQljb2xzOwkJLyogc2l6ZSBpbiBjb2xzCQkJKi8KKyAgaW50CQkJY3Vycm93OwkJLyogY3VycmVudCByb3cgaW4gZmllbGQgd2luZG93CSovCisgIGludAkJCWN1cmNvbDsJCS8qIGN1cnJlbnQgY29sIGluIGZpZWxkIHdpbmRvdwkqLworICBpbnQJCQl0b3Byb3c7CQkvKiBpbiBzY3JvbGxhYmxlIGZpZWxkIHdpbmRvdwkqLworICBpbnQJCQliZWdpbmNvbDsJLyogaW4gaG9yaXouIHNjcm9sbGFibGUgZmllbGQJKi8KKyAgc2hvcnQJCQltYXhmaWVsZDsJLyogbnVtYmVyIG9mIGZpZWxkcwkJKi8KKyAgc2hvcnQJCQltYXhwYWdlOwkvKiBudW1iZXIgb2YgcGFnZXMJCSovCisgIHNob3J0CQkJY3VycGFnZTsJLyogaW5kZXggaW50byBwYWdlCQkqLworICBGb3JtX09wdGlvbnMJCW9wdHM7CQkvKiBvcHRpb25zCQkJKi8KKyAgV0lORE9XICoJCXdpbjsJCS8qIHdpbmRvdwkJCSovCisgIFdJTkRPVyAqCQlzdWI7CQkvKiBzdWJ3aW5kb3cJCQkqLworICBXSU5ET1cgKgkJdzsJCS8qIHdpbmRvdyBmb3IgY3VycmVudCBmaWVsZAkqLworICBGSUVMRCAqKgkJZmllbGQ7CQkvKiBmaWVsZCBbbWF4ZmllbGRdCQkqLworICBGSUVMRCAqCQljdXJyZW50OwkvKiBjdXJyZW50IGZpZWxkCQkqLworICBfUEFHRSAqCQlwYWdlOwkJLyogcGFnZSBbbWF4cGFnZV0JCSovCisgIHZvaWQgKgkJdXNycHRyOwkJLyogdXNlciBwb2ludGVyCQkJKi8KKworICB2b2lkCQkJKCpmb3JtaW5pdCkoc3RydWN0IGZvcm1ub2RlICopOworICB2b2lkCQkJKCpmb3JtdGVybSkoc3RydWN0IGZvcm1ub2RlICopOworICB2b2lkCQkJKCpmaWVsZGluaXQpKHN0cnVjdCBmb3Jtbm9kZSAqKTsKKyAgdm9pZAkJCSgqZmllbGR0ZXJtKShzdHJ1Y3QgZm9ybW5vZGUgKik7CisKK30gRk9STTsKKwordHlwZWRlZiB2b2lkICgqRm9ybV9Ib29rKShGT1JNICopOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSogIG1pc2NlbGxhbmVvdXMgI2RlZmluZXMgICoKKwkqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGZpZWxkIGp1c3RpZmljYXRpb24gKi8KKyNkZWZpbmUgTk9fSlVTVElGSUNBVElPTgkoMCkKKyNkZWZpbmUgSlVTVElGWV9MRUZUCQkoMSkKKyNkZWZpbmUgSlVTVElGWV9DRU5URVIJCSgyKQorI2RlZmluZSBKVVNUSUZZX1JJR0hUCQkoMykKKworLyogZmllbGQgb3B0aW9ucyAqLworI2RlZmluZSBPX1ZJU0lCTEUJCSgweDAwMDFVKQorI2RlZmluZSBPX0FDVElWRQkJKDB4MDAwMlUpCisjZGVmaW5lIE9fUFVCTElDCQkoMHgwMDA0VSkKKyNkZWZpbmUgT19FRElUCQkJKDB4MDAwOFUpCisjZGVmaW5lIE9fV1JBUAkJCSgweDAwMTBVKQorI2RlZmluZSBPX0JMQU5LCQkJKDB4MDAyMFUpCisjZGVmaW5lIE9fQVVUT1NLSVAJCSgweDAwNDBVKQorI2RlZmluZSBPX05VTExPSwkJKDB4MDA4MFUpCisjZGVmaW5lIE9fUEFTU09LCQkoMHgwMTAwVSkKKyNkZWZpbmUgT19TVEFUSUMJCSgweDAyMDBVKQorCisvKiBmb3JtIG9wdGlvbnMgKi8KKyNkZWZpbmUgT19OTF9PVkVSTE9BRAkJKDB4MDAwMVUpCisjZGVmaW5lIE9fQlNfT1ZFUkxPQUQJCSgweDAwMDJVKQorCisvKiBmb3JtIGRyaXZlciBjb21tYW5kcyAqLworI2RlZmluZSBSRVFfTkVYVF9QQUdFCSAoS0VZX01BWCArIDEpCS8qIG1vdmUgdG8gbmV4dCBwYWdlCQkqLworI2RlZmluZSBSRVFfUFJFVl9QQUdFCSAoS0VZX01BWCArIDIpCS8qIG1vdmUgdG8gcHJldmlvdXMgcGFnZQkqLworI2RlZmluZSBSRVFfRklSU1RfUEFHRQkgKEtFWV9NQVggKyAzKQkvKiBtb3ZlIHRvIGZpcnN0IHBhZ2UJCSovCisjZGVmaW5lIFJFUV9MQVNUX1BBR0UJIChLRVlfTUFYICsgNCkJLyogbW92ZSB0byBsYXN0IHBhZ2UJCSovCisKKyNkZWZpbmUgUkVRX05FWFRfRklFTEQJIChLRVlfTUFYICsgNSkJLyogbW92ZSB0byBuZXh0IGZpZWxkCQkqLworI2RlZmluZSBSRVFfUFJFVl9GSUVMRAkgKEtFWV9NQVggKyA2KQkvKiBtb3ZlIHRvIHByZXZpb3VzIGZpZWxkCSovCisjZGVmaW5lIFJFUV9GSVJTVF9GSUVMRAkgKEtFWV9NQVggKyA3KQkvKiBtb3ZlIHRvIGZpcnN0IGZpZWxkCQkqLworI2RlZmluZSBSRVFfTEFTVF9GSUVMRAkgKEtFWV9NQVggKyA4KQkvKiBtb3ZlIHRvIGxhc3QgZmllbGQJCSovCisjZGVmaW5lIFJFUV9TTkVYVF9GSUVMRAkgKEtFWV9NQVggKyA5KQkvKiBtb3ZlIHRvIHNvcnRlZCBuZXh0IGZpZWxkCSovCisjZGVmaW5lIFJFUV9TUFJFVl9GSUVMRAkgKEtFWV9NQVggKyAxMCkJLyogbW92ZSB0byBzb3J0ZWQgcHJldiBmaWVsZAkqLworI2RlZmluZSBSRVFfU0ZJUlNUX0ZJRUxEIChLRVlfTUFYICsgMTEpCS8qIG1vdmUgdG8gc29ydGVkIGZpcnN0IGZpZWxkCSovCisjZGVmaW5lIFJFUV9TTEFTVF9GSUVMRAkgKEtFWV9NQVggKyAxMikJLyogbW92ZSB0byBzb3J0ZWQgbGFzdCBmaWVsZAkqLworI2RlZmluZSBSRVFfTEVGVF9GSUVMRAkgKEtFWV9NQVggKyAxMykJLyogbW92ZSB0byBsZWZ0IHRvIGZpZWxkCSovCisjZGVmaW5lIFJFUV9SSUdIVF9GSUVMRAkgKEtFWV9NQVggKyAxNCkJLyogbW92ZSB0byByaWdodCB0byBmaWVsZAkqLworI2RlZmluZSBSRVFfVVBfRklFTEQJIChLRVlfTUFYICsgMTUpCS8qIG1vdmUgdG8gdXAgdG8gZmllbGQJCSovCisjZGVmaW5lIFJFUV9ET1dOX0ZJRUxECSAoS0VZX01BWCArIDE2KQkvKiBtb3ZlIHRvIGRvd24gdG8gZmllbGQJKi8KKworI2RlZmluZSBSRVFfTkVYVF9DSEFSCSAoS0VZX01BWCArIDE3KQkvKiBtb3ZlIHRvIG5leHQgY2hhciBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfUFJFVl9DSEFSCSAoS0VZX01BWCArIDE4KQkvKiBtb3ZlIHRvIHByZXYgY2hhciBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfTkVYVF9MSU5FCSAoS0VZX01BWCArIDE5KQkvKiBtb3ZlIHRvIG5leHQgbGluZSBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfUFJFVl9MSU5FCSAoS0VZX01BWCArIDIwKQkvKiBtb3ZlIHRvIHByZXYgbGluZSBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfTkVYVF9XT1JECSAoS0VZX01BWCArIDIxKQkvKiBtb3ZlIHRvIG5leHQgd29yZCBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfUFJFVl9XT1JECSAoS0VZX01BWCArIDIyKQkvKiBtb3ZlIHRvIHByZXYgd29yZCBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfQkVHX0ZJRUxECSAoS0VZX01BWCArIDIzKQkvKiBtb3ZlIHRvIGZpcnN0IGNoYXIgaW4gZmllbGQJKi8KKyNkZWZpbmUgUkVRX0VORF9GSUVMRAkgKEtFWV9NQVggKyAyNCkJLyogbW92ZSBhZnRlciBsYXN0IGNoYXIgaW4gZmxkCSovCisjZGVmaW5lIFJFUV9CRUdfTElORQkgKEtFWV9NQVggKyAyNSkJLyogbW92ZSB0byBiZWdpbm5pbmcgb2YgbGluZQkqLworI2RlZmluZSBSRVFfRU5EX0xJTkUJIChLRVlfTUFYICsgMjYpCS8qIG1vdmUgYWZ0ZXIgbGFzdCBjaGFyIGluIGxpbmUJKi8KKyNkZWZpbmUgUkVRX0xFRlRfQ0hBUgkgKEtFWV9NQVggKyAyNykJLyogbW92ZSBsZWZ0IGluIGZpZWxkCQkqLworI2RlZmluZSBSRVFfUklHSFRfQ0hBUgkgKEtFWV9NQVggKyAyOCkJLyogbW92ZSByaWdodCBpbiBmaWVsZAkJKi8KKyNkZWZpbmUgUkVRX1VQX0NIQVIJIChLRVlfTUFYICsgMjkpCS8qIG1vdmUgdXAgaW4gZmllbGQJCSovCisjZGVmaW5lIFJFUV9ET1dOX0NIQVIJIChLRVlfTUFYICsgMzApCS8qIG1vdmUgZG93biBpbiBmaWVsZAkJKi8KKworI2RlZmluZSBSRVFfTkVXX0xJTkUJIChLRVlfTUFYICsgMzEpCS8qIGluc2VydC9vdmVybGF5IG5ldyBsaW5lCSovCisjZGVmaW5lIFJFUV9JTlNfQ0hBUgkgKEtFWV9NQVggKyAzMikJLyogaW5zZXJ0IGJsYW5rIGNoYXIgYXQgY3Vyc29yCSovCisjZGVmaW5lIFJFUV9JTlNfTElORQkgKEtFWV9NQVggKyAzMykJLyogaW5zZXJ0IGJsYW5rIGxpbmUgYXQgY3Vyc29yCSovCisjZGVmaW5lIFJFUV9ERUxfQ0hBUgkgKEtFWV9NQVggKyAzNCkJLyogZGVsZXRlIGNoYXIgYXQgY3Vyc29yCSovCisjZGVmaW5lIFJFUV9ERUxfUFJFVgkgKEtFWV9NQVggKyAzNSkJLyogZGVsZXRlIGNoYXIgYmVmb3JlIGN1cnNvcgkqLworI2RlZmluZSBSRVFfREVMX0xJTkUJIChLRVlfTUFYICsgMzYpCS8qIGRlbGV0ZSBsaW5lIGF0IGN1cnNvcgkqLworI2RlZmluZSBSRVFfREVMX1dPUkQJIChLRVlfTUFYICsgMzcpCS8qIGRlbGV0ZSB3b3JkIGF0IGN1cnNvcgkqLworI2RlZmluZSBSRVFfQ0xSX0VPTAkgKEtFWV9NQVggKyAzOCkJLyogY2xlYXIgdG8gZW5kIG9mIGxpbmUJCSovCisjZGVmaW5lIFJFUV9DTFJfRU9GCSAoS0VZX01BWCArIDM5KQkvKiBjbGVhciB0byBlbmQgb2YgZmllbGQJKi8KKyNkZWZpbmUgUkVRX0NMUl9GSUVMRAkgKEtFWV9NQVggKyA0MCkJLyogY2xlYXIgZW50aXJlIGZpZWxkCQkqLworI2RlZmluZSBSRVFfT1ZMX01PREUJIChLRVlfTUFYICsgNDEpCS8qIGJlZ2luIG92ZXJsYXkgbW9kZQkJKi8KKyNkZWZpbmUgUkVRX0lOU19NT0RFCSAoS0VZX01BWCArIDQyKQkvKiBiZWdpbiBpbnNlcnQgbW9kZQkJKi8KKyNkZWZpbmUgUkVRX1NDUl9GTElORQkgKEtFWV9NQVggKyA0MykJLyogc2Nyb2xsIGZpZWxkIGZvcndhcmQgYSBsaW5lCSovCisjZGVmaW5lIFJFUV9TQ1JfQkxJTkUJIChLRVlfTUFYICsgNDQpCS8qIHNjcm9sbCBmaWVsZCBiYWNrd2FyZCBhIGxpbmUJKi8KKyNkZWZpbmUgUkVRX1NDUl9GUEFHRQkgKEtFWV9NQVggKyA0NSkJLyogc2Nyb2xsIGZpZWxkIGZvcndhcmQgYSBwYWdlCSovCisjZGVmaW5lIFJFUV9TQ1JfQlBBR0UJIChLRVlfTUFYICsgNDYpCS8qIHNjcm9sbCBmaWVsZCBiYWNrd2FyZCBhIHBhZ2UJKi8KKyNkZWZpbmUgUkVRX1NDUl9GSFBBR0UJIChLRVlfTUFYICsgNDcpIC8qIHNjcm9sbCBmaWVsZCBmb3J3YXJkCSBoYWxmIHBhZ2UgKi8KKyNkZWZpbmUgUkVRX1NDUl9CSFBBR0UJIChLRVlfTUFYICsgNDgpIC8qIHNjcm9sbCBmaWVsZCBiYWNrd2FyZCBoYWxmIHBhZ2UgKi8KKyNkZWZpbmUgUkVRX1NDUl9GQ0hBUgkgKEtFWV9NQVggKyA0OSkgLyogaG9yaXpvbnRhbCBzY3JvbGwgY2hhcgkqLworI2RlZmluZSBSRVFfU0NSX0JDSEFSCSAoS0VZX01BWCArIDUwKSAvKiBob3Jpem9udGFsIHNjcm9sbCBjaGFyCSovCisjZGVmaW5lIFJFUV9TQ1JfSEZMSU5FCSAoS0VZX01BWCArIDUxKSAvKiBob3Jpem9udGFsIHNjcm9sbCBsaW5lCSovCisjZGVmaW5lIFJFUV9TQ1JfSEJMSU5FCSAoS0VZX01BWCArIDUyKSAvKiBob3Jpem9udGFsIHNjcm9sbCBsaW5lCSovCisjZGVmaW5lIFJFUV9TQ1JfSEZIQUxGCSAoS0VZX01BWCArIDUzKSAvKiBob3Jpem9udGFsIHNjcm9sbCBoYWxmIGxpbmUJKi8KKyNkZWZpbmUgUkVRX1NDUl9IQkhBTEYJIChLRVlfTUFYICsgNTQpIC8qIGhvcml6b250YWwgc2Nyb2xsIGhhbGYgbGluZQkqLworCisjZGVmaW5lIFJFUV9WQUxJREFUSU9OCSAoS0VZX01BWCArIDU1KQkvKiB2YWxpZGF0ZSBmaWVsZAkJKi8KKyNkZWZpbmUgUkVRX05FWFRfQ0hPSUNFCSAoS0VZX01BWCArIDU2KQkvKiBkaXNwbGF5IG5leHQgZmllbGQgY2hvaWNlCSovCisjZGVmaW5lIFJFUV9QUkVWX0NIT0lDRQkgKEtFWV9NQVggKyA1NykJLyogZGlzcGxheSBwcmV2IGZpZWxkIGNob2ljZQkqLworCisjZGVmaW5lIE1JTl9GT1JNX0NPTU1BTkQgKEtFWV9NQVggKyAxKQkvKiB1c2VkIGJ5IGZvcm1fZHJpdmVyCQkqLworI2RlZmluZSBNQVhfRk9STV9DT01NQU5EIChLRVlfTUFYICsgNTcpCS8qIHVzZWQgYnkgZm9ybV9kcml2ZXIJCSovCisKKyNpZiBkZWZpbmVkKE1BWF9DT01NQU5EKQorIyAgaWYgKE1BWF9GT1JNX0NPTU1BTkQgPiBNQVhfQ09NTUFORCkKKyMgICAgZXJyb3IgU29tZXRoaW5nIGlzIHdyb25nIC0tIE1BWF9GT1JNX0NPTU1BTkQgaXMgZ3JlYXRlciB0aGFuIE1BWF9DT01NQU5ECisjICBlbGlmIChNQVhfQ09NTUFORCAhPSAoS0VZX01BWCArIDEyOCkpCisjICAgIGVycm9yIFNvbWV0aGluZyBpcyB3cm9uZyAtLSBNQVhfQ09NTUFORCBpcyBhbHJlYWR5IGluY29uc2lzdGVudGx5IGRlZmluZWQuCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBNQVhfQ09NTUFORCAoS0VZX01BWCArIDEyOCkKKyNlbmRpZgorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioKKwkqICBzdGFuZGFyZCBmaWVsZCB0eXBlcyAgKgorCSoqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEVFlQRSAqKSBUWVBFX0FMUEhBOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikgVFlQRV9BTE5VTTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFICopIFRZUEVfRU5VTTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFICopIFRZUEVfSU5URUdFUjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFICopIFRZUEVfTlVNRVJJQzsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFICopIFRZUEVfUkVHRVhQOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSogIGJ1aWx0LWluIGFkZGl0aW9uYWwgZmllbGQgdHlwZXMgICoKKwkqICBUaGV5IGFyZSBub3QgZGVmaW5lZCBpbiBTVnI0ICAgICAqCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikgVFlQRV9JUFY0OyAgICAgIC8qIEludGVybmV0IElQIFZlcnNpb24gNCBhZGRyZXNzICovCisKKwkvKioqKioqKioqKioqKioqKioqKioqKioKKwkqICAgRGVmYXVsdCBvYmplY3RzICAgICoKKwkqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRk9STSAqKQlfbmNfRGVmYXVsdF9Gb3JtOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRCAqKQlfbmNfRGVmYXVsdF9GaWVsZDsKKworCisJLyoqKioqKioqKioqKioqKioqKioqKioqCisJKiAgRklFTERUWVBFIHJvdXRpbmVzICAqCisJKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTERUWVBFICopIG5ld19maWVsZHR5cGUgKAorCQkgICAgYm9vbCAoKiBjb25zdCBmaWVsZF9jaGVjaykoRklFTEQgKixjb25zdCB2b2lkICopLAorCQkgICAgYm9vbCAoKiBjb25zdCBjaGFyX2NoZWNrKShpbnQsY29uc3Qgdm9pZCAqKSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTERUWVBFICopIGxpbmtfZmllbGR0eXBlKAorCQkgICAgRklFTERUWVBFICosIEZJRUxEVFlQRSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZnJlZV9maWVsZHR5cGUgKEZJRUxEVFlQRSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZHR5cGVfYXJnIChGSUVMRFRZUEUgKiwKKwkJICAgIHZvaWQgKiAoKiBjb25zdCBtYWtlX2FyZykodmFfbGlzdCAqKSwKKwkJICAgIHZvaWQgKiAoKiBjb25zdCBjb3B5X2FyZykoY29uc3Qgdm9pZCAqKSwKKwkJICAgIHZvaWQgKCogY29uc3QgZnJlZV9hcmcpKHZvaWQgKikpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJIHNldF9maWVsZHR5cGVfY2hvaWNlIChGSUVMRFRZUEUgKiwKKwkJICAgIGJvb2wgKCogY29uc3QgbmV4dF9jaG9pY2UpKEZJRUxEICosY29uc3Qgdm9pZCAqKSwKKwkgICAgICAJICAgIGJvb2wgKCogY29uc3QgcHJldl9jaG9pY2UpKEZJRUxEICosY29uc3Qgdm9pZCAqKSk7CisKKwkvKioqKioqKioqKioqKioqKioqKgorCSogIEZJRUxEIHJvdXRpbmVzICAqCisJKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQluZXdfZmllbGQgKGludCxpbnQsaW50LGludCxpbnQsaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQlkdXBfZmllbGQgKEZJRUxEICosaW50LGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTEQgKikJbGlua19maWVsZCAoRklFTEQgKixpbnQsaW50KTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZnJlZV9maWVsZCAoRklFTEQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmaWVsZF9pbmZvIChjb25zdCBGSUVMRCAqLGludCAqLGludCAqLGludCAqLGludCAqLGludCAqLGludCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWR5bmFtaWNfZmllbGRfaW5mbyAoY29uc3QgRklFTEQgKixpbnQgKixpbnQgKixpbnQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWF4X2ZpZWxkICggRklFTEQgKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJbW92ZV9maWVsZCAoRklFTEQgKixpbnQsaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF90eXBlIChGSUVMRCAqLEZJRUxEVFlQRSAqLC4uLik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbmV3X3BhZ2UgKEZJRUxEICosYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfanVzdCAoRklFTEQgKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZmllbGRfanVzdCAoY29uc3QgRklFTEQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfZm9yZSAoRklFTEQgKixjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkX2JhY2sgKEZJRUxEICosY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF9wYWQgKEZJRUxEICosaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZpZWxkX3BhZCAoY29uc3QgRklFTEQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfYnVmZmVyIChGSUVMRCAqLGludCxjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkX3N0YXR1cyAoRklFTEQgKixib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF91c2VycHRyIChGSUVMRCAqLCB2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkX29wdHMgKEZJRUxEICosRmllbGRfT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmaWVsZF9vcHRzX29uIChGSUVMRCAqLEZpZWxkX09wdGlvbnMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZmllbGRfb3B0c19vZmYgKEZJRUxEICosRmllbGRfT3B0aW9ucyk7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpCWZpZWxkX2ZvcmUgKGNvbnN0IEZJRUxEICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkJZmllbGRfYmFjayAoY29uc3QgRklFTEQgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKQluZXdfcGFnZSAoY29uc3QgRklFTEQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkJZmllbGRfc3RhdHVzIChjb25zdCBGSUVMRCAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQgKikJZmllbGRfYXJnIChjb25zdCBGSUVMRCAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQgKikJZmllbGRfdXNlcnB0ciAoY29uc3QgRklFTEQgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikJZmllbGRfdHlwZSAoY29uc3QgRklFTEQgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopCWZpZWxkX2J1ZmZlciAoY29uc3QgRklFTEQgKixpbnQpOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRmllbGRfT3B0aW9ucykJZmllbGRfb3B0cyAoY29uc3QgRklFTEQgKik7CisKKwkvKioqKioqKioqKioqKioqKioqCisJKiAgRk9STSByb3V0aW5lcyAgKgorCSoqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZPUk0gKikJbmV3X2Zvcm0gKEZJRUxEICoqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEICoqKQlmb3JtX2ZpZWxkcyAoY29uc3QgRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQljdXJyZW50X2ZpZWxkIChjb25zdCBGT1JNICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopCWZvcm1fd2luIChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQlmb3JtX3N1YiAoY29uc3QgRk9STSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZvcm1fSG9vaykJZm9ybV9pbml0IChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZvcm1fSG9vaykJZm9ybV90ZXJtIChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZvcm1fSG9vaykJZmllbGRfaW5pdCAoY29uc3QgRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGb3JtX0hvb2spCWZpZWxkX3Rlcm0gKGNvbnN0IEZPUk0gKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZyZWVfZm9ybSAoRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9mb3JtX2ZpZWxkcyAoRk9STSAqLEZJRUxEICoqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZpZWxkX2NvdW50IChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fd2luIChGT1JNICosV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fc3ViIChGT1JNICosV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2N1cnJlbnRfZmllbGQgKEZPUk0gKixGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZpZWxkX2luZGV4IChjb25zdCBGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9mb3JtX3BhZ2UgKEZPUk0gKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZm9ybV9wYWdlIChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2NhbGVfZm9ybSAoY29uc3QgRk9STSAqLGludCAqLGludCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9mb3JtX2luaXQgKEZPUk0gKixGb3JtX0hvb2spOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fdGVybSAoRk9STSAqLEZvcm1fSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfaW5pdCAoRk9STSAqLEZvcm1fSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfdGVybSAoRk9STSAqLEZvcm1fSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlwb3N0X2Zvcm0gKEZPUk0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQl1bnBvc3RfZm9ybSAoRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXBvc19mb3JtX2N1cnNvciAoRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZvcm1fZHJpdmVyIChGT1JNICosaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9mb3JtX3VzZXJwdHIgKEZPUk0gKix2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fb3B0cyAoRk9STSAqLEZvcm1fT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmb3JtX29wdHNfb24gKEZPUk0gKixGb3JtX09wdGlvbnMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZm9ybV9vcHRzX29mZiAoRk9STSAqLEZvcm1fT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmb3JtX3JlcXVlc3RfYnlfbmFtZSAoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikJZm9ybV9yZXF1ZXN0X25hbWUgKGludCk7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkICopCWZvcm1fdXNlcnB0ciAoY29uc3QgRk9STSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZvcm1fT3B0aW9ucykJZm9ybV9vcHRzIChjb25zdCBGT1JNICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkJZGF0YV9haGVhZCAoY29uc3QgRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKQlkYXRhX2JlaGluZCAoY29uc3QgRk9STSAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIH0KKyNlbmRpZgorCisjZW5kaWYJLyogRk9STV9IICovCmRpZmYgLS1naXQgYS9mb3JtL2Zvcm0ucHJpdi5oIGIvZm9ybS9mb3JtLnByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWE2MjdkCi0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mb3JtLnByaXYuaApAQCAtMCwwICsxLDI1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiBmb3JtLnByaXYuaCx2IDAuMjcgMjAwOC8wOS8wOCAyMDoyOTowNSB0b20gRXhwICQgKi8KKworI2lmbmRlZiBGT1JNX1BSSVZfSAorI2RlZmluZSBGT1JNX1BSSVZfSCAxCisKKyNpbmNsdWRlICJjdXJzZXMucHJpdi5oIgorI2luY2x1ZGUgIm1mX2NvbW1vbi5oIgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNpZiBIQVZFX1dDVFlQRV9ICisjaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYKKworI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggOCAvKiBzaG91bGQgYmUgPj0gTUJfQ1VSX01BWCwgYnV0IHRoYXQgbWF5IGJlIGEgZnVuY3Rpb24gKi8KKyNlbmRpZgorCisjZGVmaW5lIEZJRUxEX0NFTEwgTkNVUlNFU19DSF9UCisKKyNkZWZpbmUgTkNVUlNFU19GSUVMRF9JTlRFUk5BTFMgY2hhcioqIGV4cGFuZGVkOyBXSU5ET1cgKndvcmtpbmc7CisjZGVmaW5lIE5DVVJTRVNfRklFTERfRVhURU5TSU9OICwgKGNoYXIgKiopMCwgKFdJTkRPVyAqKTAKKworI2Vsc2UKKworI2RlZmluZSBGSUVMRF9DRUxMIGNoYXIKKworI2RlZmluZSBOQ1VSU0VTX0ZJRUxEX0VYVEVOU0lPTiAvKiBub3RoaW5nICovCisKKyNlbmRpZgorCisjaW5jbHVkZSAiZm9ybS5oIgorCisvKiBmb3JtICBzdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIF9PVkxNT0RFICAgICAgICAgKDB4MDRVKSAvKiBGb3JtIGlzIGluIG92ZXJsYXkgbW9kZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfV0lORE9XX01PRElGSUVEICgweDEwVSkgLyogQ3VycmVudCBmaWVsZCB3aW5kb3cgaGFzIGJlZW4gbW9kaWZpZWQgKi8KKyNkZWZpbmUgX0ZDSEVDS19SRVFVSVJFRCAoMHgyMFUpIC8qIEN1cnJlbnQgZmllbGQgbmVlZHMgdmFsaWRhdGlvbiAgICAgICAgICovCisKKy8qIGZpZWxkIHN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgX0NIQU5HRUQgICAgICAgICAoMHgwMVUpIC8qIEZpZWxkIGhhcyBiZWVuIGNoYW5nZWQgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9ORVdUT1AgICAgICAgICAgKDB4MDJVKSAvKiBWZXJ0aWNhbCBzY3JvbGxpbmcgb2NjdXJyZWQgICAgICAgICAgICAqLworI2RlZmluZSBfTkVXUEFHRSAgICAgICAgICgweDA0VSkgLyogZmllbGQgYmVnaW5zIG5ldyBwYWdlIG9mIGZvcm0gICAgICAgICAgKi8KKyNkZWZpbmUgX01BWV9HUk9XICAgICAgICAoMHgwOFUpIC8qIGR5bmFtaWMgZmllbGQgbWF5IHN0aWxsIGdyb3cgICAgICAgICAgICovCisKKy8qIGZpZWxkdHlwZSBzdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIF9MSU5LRURfVFlQRSAgICAgKDB4MDFVKSAvKiBUeXBlIGlzIGEgbGlua2VkIHR5cGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfSEFTX0FSR1MgICAgICAgICgweDAyVSkgLyogVHlwZSBoYXMgYXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX0hBU19DSE9JQ0UgICAgICAoMHgwNFUpIC8qIFR5cGUgaGFzIGNob2ljZSBtZXRob2RzICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9SRVNJREVOVCAgICAgICAgKDB4MDhVKSAvKiBUeXBlIGlzIGJ1aWx0LWluICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBUaGlzIGFyZSB0aGUgZmllbGQgb3B0aW9ucyByZXF1aXJlZCB0byBiZSBhIHNlbGVjdGFibGUgZmllbGQgaW4gZmllbGQKKyAgIG5hdmlnYXRpb24gcmVxdWVzdHMgKi8KKyNkZWZpbmUgT19TRUxFQ1RBQkxFIChPX0FDVElWRSB8IE9fVklTSUJMRSkKKworLyogSWYgZm9ybSBpcyBOVUxMIHJlcGxhY2UgZm9ybSBhcmd1bWVudCBieSBkZWZhdWx0LWZvcm0gKi8KKyNkZWZpbmUgTm9ybWFsaXplX0Zvcm0oZm9ybSkgXAorICAoKGZvcm0pID0gKGZvcm0gIT0gMCkgPyAoZm9ybSkgOiBfbmNfRGVmYXVsdF9Gb3JtKQorCisvKiBJZiBmaWVsZCBpcyBOVUxMIHJlcGxhY2UgZmllbGQgYXJndW1lbnQgYnkgZGVmYXVsdC1maWVsZCAqLworI2RlZmluZSBOb3JtYWxpemVfRmllbGQoZmllbGQpIFwKKyAgKChmaWVsZCkgPSAoZmllbGQgIT0gMCkgPyAoZmllbGQpIDogX25jX0RlZmF1bHRfRmllbGQpCisKKy8qIFJldHJpZXZlIGZvcm1zIHdpbmRvdyAqLworI2RlZmluZSBHZXRfRm9ybV9XaW5kb3coZm9ybSkgXAorICAoKGZvcm0pLT5zdWI/KGZvcm0pLT5zdWI6KChmb3JtKS0+d2luPyhmb3JtKS0+d2luOnN0ZHNjcikpCisKKy8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBmb3IgYSBzaW5nbGUgYnVmZmVyIGZvciB0aGlzIGZpZWxkICovCisjZGVmaW5lIEJ1ZmZlcl9MZW5ndGgoZmllbGQpICgoZmllbGQpLT5kcm93cyAqIChmaWVsZCktPmRjb2xzKQorCisvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgb2YgYWxsIGJ1ZmZlcnMgZm9yIHRoaXMgZmllbGQgKi8KKyNkZWZpbmUgVG90YWxfQnVmZmVyX1NpemUoZmllbGQpIFwKKyAgICggKEJ1ZmZlcl9MZW5ndGgoZmllbGQpICsgMSkgKiAoMSsoZmllbGQpLT5uYnVmKSAqIHNpemVvZihGSUVMRF9DRUxMKSApCisKKy8qIExvZ2ljIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIGZpZWxkIGlzIHNpbmdsZSBsaW5lZCAqLworI2RlZmluZSBTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgXAorICAgKCgoZmllbGQpLT5yb3dzICsgKGZpZWxkKS0+bnJvdykgPT0gMSkKKworLyogTG9naWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgZmllbGQgaXMgc2VsZWN0YWJsZSAqLworI2RlZmluZSBGaWVsZF9Jc19TZWxlY3RhYmxlKGYpICAgICAoKCh1bnNpZ25lZCkoKGYpLT5vcHRzKSAmIE9fU0VMRUNUQUJMRSk9PU9fU0VMRUNUQUJMRSkKKyNkZWZpbmUgRmllbGRfSXNfTm90X1NlbGVjdGFibGUoZikgKCgodW5zaWduZWQpKChmKS0+b3B0cykgJiBPX1NFTEVDVEFCTEUpIT1PX1NFTEVDVEFCTEUpCisKK3R5cGVkZWYgc3RydWN0IHR5cGVhcmcKKyAgeworICAgIHN0cnVjdCB0eXBlYXJnICpsZWZ0OworICAgIHN0cnVjdCB0eXBlYXJnICpyaWdodDsKKyAgfQorVHlwZUFyZ3VtZW50OworCisvKiBUaGlzIGlzIGEgZHVtbXkgcmVxdWVzdCBjb2RlIChub3JtYWxseSBpbnZhbGlkKSB0byBiZSB1c2VkIGludGVybmFsbHkKKyAgIHdpdGggdGhlIGZvcm1fZHJpdmVyKCkgcm91dGluZSB0byBwb3NpdGlvbiB0byB0aGUgZmlyc3QgYWN0aXZlIGZpZWxkCisgICBvbiB0aGUgZm9ybQorKi8KKyNkZWZpbmUgRklSU1RfQUNUSVZFX01BR0lDICgtMjkxMDU2KQorCisjZGVmaW5lIEFMTF9GT1JNX09QVFMgICggICAgICAgICAgICAgICAgXAorCQkJT19OTF9PVkVSTE9BRCAgfFwKKwkJCU9fQlNfT1ZFUkxPQUQgICApCisKKyNkZWZpbmUgQUxMX0ZJRUxEX09QVFMgKEZpZWxkX09wdGlvbnMpKCBcCisJCQlPX1ZJU0lCTEUgfFwKKwkJCU9fQUNUSVZFICB8XAorCQkJT19QVUJMSUMgIHxcCisJCQlPX0VESVQgICAgfFwKKwkJCU9fV1JBUCAgICB8XAorCQkJT19CTEFOSyAgIHxcCisJCQlPX0FVVE9TS0lQfFwKKwkJCU9fTlVMTE9LICB8XAorCQkJT19QQVNTT0sgIHxcCisJCQlPX1NUQVRJQyAgICkKKworI2RlZmluZSBDX0JMQU5LICcgJworI2RlZmluZSBpc19ibGFuayhjKSAoKGMpPT1DX0JMQU5LKQorCisjZGVmaW5lIENfWkVST1MgJ1wwJworCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNvbnN0IEZJRUxEVFlQRSAqKSBfbmNfRGVmYXVsdF9GaWVsZFR5cGU7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChUeXBlQXJndW1lbnQgKikgX25jX01ha2VfQXJndW1lbnQgKGNvbnN0IEZJRUxEVFlQRSosIHZhX2xpc3QqLCBpbnQqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChUeXBlQXJndW1lbnQgKikgX25jX0NvcHlfQXJndW1lbnQgKGNvbnN0IEZJRUxEVFlQRSosIGNvbnN0IFR5cGVBcmd1bWVudCosIGludCopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19GcmVlX0FyZ3VtZW50IChjb25zdCBGSUVMRFRZUEUqLCBUeXBlQXJndW1lbnQqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfQ29weV9UeXBlIChGSUVMRCosIEZJRUxEIGNvbnN0ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19GcmVlX1R5cGUgKEZJRUxEICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcyAoRklFTEQqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19TeW5jaHJvbml6ZV9PcHRpb25zIChGSUVMRCosIEZpZWxkX09wdGlvbnMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX1NldF9Gb3JtX1BhZ2UgKEZPUk0qLCBpbnQsIEZJRUxEKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkIChGT1JNKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTEQgKikgX25jX0ZpcnN0X0FjdGl2ZV9GaWVsZCAoRk9STSopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19JbnRlcm5hbF9WYWxpZGF0aW9uIChGT1JNKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfU2V0X0N1cnJlbnRfRmllbGQgKEZPUk0qLCBGSUVMRCopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yIChGT1JNKik7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHdjaGFyX3QgKikgX25jX1dpZGVuX1N0cmluZyhjaGFyICosIGludCAqKTsKKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKKworI2RlZmluZSByZXR1cm5GaWVsZChjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxmaWVsZCkKKyNkZWZpbmUgcmV0dXJuRmllbGRQdHIoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsZmllbGRfcHRyKQorI2RlZmluZSByZXR1cm5Gb3JtKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGZvcm0pCisjZGVmaW5lIHJldHVybkZpZWxkVHlwZShjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxmaWVsZF90eXBlKQorI2RlZmluZSByZXR1cm5Gb3JtSG9vayhjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxmb3JtX2hvb2spCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKikJICAgIF9uY19yZXRyYWNlX2ZpZWxkX3B0ciAoRklFTEQgKiopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEICopCSAgICBfbmNfcmV0cmFjZV9maWVsZCAoRklFTEQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTERUWVBFICopICBfbmNfcmV0cmFjZV9maWVsZF90eXBlIChGSUVMRFRZUEUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRk9STSAqKSAgX25jX3JldHJhY2VfZm9ybSAoRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGb3JtX0hvb2spICBfbmNfcmV0cmFjZV9mb3JtX2hvb2sgKEZvcm1fSG9vayk7CisKKyNlbHNlIC8qICFUUkFDRSAqLworCisjZGVmaW5lIHJldHVybkZpZWxkUHRyKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkZpZWxkVHlwZShjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5GaWVsZChjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5Gb3JtKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkZvcm1Ib29rKGNvZGUpCXJldHVybiBjb2RlCisKKyNlbmRpZiAvKiBUUkFDRS8hVFJBQ0UgKi8KKworLyoKKyAqIFVzZSBDaGVja19DVFlQRV9GaWVsZCgpIHRvIHNpbXBsaWZ5IEZJRUxEVFlQRSdzIHRoYXQgdXNlIG9ubHkgdGhlIGNjaGVjaygpCisgKiBmdW5jdGlvbi4KKyAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIENoZWNrX0NUWVBFX0ZpZWxkKHJlc3VsdCwgYnVmZmVyLCB3aWR0aCwgY2NoZWNrKSBcCisgIHdoaWxlICgqYnVmZmVyICYmICpidWZmZXIgPT0gJyAnKSBcCisgICAgYnVmZmVyKys7IFwKKyAgaWYgKCpidWZmZXIpIFwKKyAgICB7IFwKKyAgICAgIGJvb2wgYmxhbmsgPSBGQUxTRTsgXAorICAgICAgaW50IGxlbjsgXAorICAgICAgaW50IG47IFwKKyAgICAgIHdjaGFyX3QgKmxpc3QgPSBfbmNfV2lkZW5fU3RyaW5nKChjaGFyICopYnVmZmVyLCAmbGVuKTsgXAorICAgICAgaWYgKGxpc3QgIT0gMCkgXAorCXsgXAorCSAgcmVzdWx0ID0gVFJVRTsgXAorCSAgZm9yIChuID0gMDsgbiA8IGxlbjsgKytuKSBcCisJICAgIHsgXAorCSAgICAgIGlmIChibGFuaykgXAorCQl7IFwKKwkJICBpZiAobGlzdFtuXSAhPSAnICcpIFwKKwkJICAgIHsgXAorCQkgICAgICByZXN1bHQgPSBGQUxTRTsgXAorCQkgICAgICBicmVhazsgXAorCQkgICAgfSBcCisJCX0gXAorCSAgICAgIGVsc2UgaWYgKGxpc3Rbbl0gPT0gJyAnKSBcCisJCXsgXAorCQkgIGJsYW5rID0gVFJVRTsgXAorCQkgIHJlc3VsdCA9IChuICsgMSA+PSB3aWR0aCk7IFwKKwkJfSBcCisJICAgICAgZWxzZSBpZiAoIWNjaGVjayhsaXN0W25dLCBOVUxMKSkgXAorCQl7IFwKKwkJICByZXN1bHQgPSBGQUxTRTsgXAorCQkgIGJyZWFrOyBcCisJCX0gXAorCSAgICB9IFwKKwkgIGZyZWUobGlzdCk7IFwKKwl9IFwKKyAgICB9CisjZWxzZQorI2RlZmluZSBDaGVja19DVFlQRV9GaWVsZChyZXN1bHQsIGJ1ZmZlciwgd2lkdGgsIGNjaGVjaykgXAorICB3aGlsZSAoKmJ1ZmZlciAmJiAqYnVmZmVyID09ICcgJykgXAorICAgIGJ1ZmZlcisrOyBcCisgIGlmICgqYnVmZmVyKSBcCisgICAgeyBcCisgICAgICB1bnNpZ25lZCBjaGFyICpzID0gYnVmZmVyOyBcCisgICAgICBpbnQgbCA9IC0xOyBcCisgICAgICB3aGlsZSAoKmJ1ZmZlciAmJiBjY2hlY2soKmJ1ZmZlciwgTlVMTCkpIFwKKwlidWZmZXIrKzsgXAorICAgICAgbCA9IChpbnQpKGJ1ZmZlciAtIHMpOyBcCisgICAgICB3aGlsZSAoKmJ1ZmZlciAmJiAqYnVmZmVyID09ICcgJykgXAorCWJ1ZmZlcisrOyBcCisgICAgICByZXN1bHQgPSAoKCpidWZmZXIgfHwgKGwgPCB3aWR0aCkpID8gRkFMU0UgOiBUUlVFKTsgXAorICAgIH0KKyNlbmRpZgorCisjZW5kaWYgLyogRk9STV9QUklWX0ggKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX2N1cnNvci5jIGIvZm9ybS9mcm1fY3Vyc29yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkYWJhYgotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnJtX2N1cnNvci5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9jdXJzb3IuYyx2IDEuOSAyMDA0LzEyLzExIDIyOjAxOjAzIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgcG9zX2Zvcm1fY3Vyc29yKEZPUk0gKiBmb3JtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZXMgdGhlIGZvcm0gd2luZG93IGN1cnNvciB0byB0aGUgbG9jYXRpb24gcmVxdWlyZWQKK3wgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBmb3JtIGRyaXZlciB0byByZXN1bWUgZm9ybSBwcm9jZXNzaW5nLiBUaGlzIG1heQorfCAgICAgICAgICAgICAgICAgICAgYmUgbmVlZGVkIGFmdGVyIHRoZSBhcHBsaWNhdGlvbiBjYWxscyBhIGN1cnNlcyBsaWJyYXJ5Cit8ICAgICAgICAgICAgICAgICAgICBJL08gcm91dGluZSB0aGF0IG1vZGlmaWVzIHRoZSBjdXJzb3IgcG9zaXRpb24uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgICAgICAgICAtIFN5c3RlbSBlcnJvci4KK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAgICAgICAgLSBJbnZhbGlkIGZvcm0gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfUE9TVEVEICAgICAgICAgICAgICAtIEZvcm0gaXMgbm90IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Bvc19mb3JtX2N1cnNvcihGT1JNICpmb3JtKQoreworICBpbnQgcmVzOworCisgIFQoKFRfQ0FMTEVEKCJwb3NfZm9ybV9jdXJzb3IoJXApIiksIGZvcm0pKTsKKworICBpZiAoIWZvcm0pCisgICAgcmVzID0gRV9CQURfQVJHVU1FTlQ7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIShmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSkKKwlyZXMgPSBFX05PVF9QT1NURUQ7CisgICAgICBlbHNlCisJcmVzID0gX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yKGZvcm0pOworICAgIH0KKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qIGZybV9jdXJzb3IuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX2RhdGEuYyBiL2Zvcm0vZnJtX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODdhMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mcm1fZGF0YS5jCkBAIC0wLDAgKzEsMTkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmcm1fZGF0YS5jLHYgMS4xNCAyMDA1LzExLzI2IDE1OjM0OjAxIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBib29sIGRhdGFfYmVoaW5kKGNvbnN0IEZPUk0gKmZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBmb3Igb2ZmLXNjcmVlbiBkYXRhIGJlaGluZC4gVGhpcyBpcyBuZWFybHkgdHJpdmlhbAorfCAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQgaXMgZml4ZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgLSB0aGVyZSBhcmUgb2ZmLXNjcmVlbiBkYXRhIGJlaGluZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgIC0gdGhlcmUgYXJlIG5vIG9mZi1zY3JlZW4gZGF0YSBiZWhpbmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChib29sKQorZGF0YV9iZWhpbmQoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICBUKChUX0NBTExFRCgiZGF0YV9iZWhpbmQoJXApIiksIGZvcm0pKTsKKworICBpZiAoZm9ybSAmJiAoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkgJiYgZm9ybS0+Y3VycmVudCkKKyAgICB7CisgICAgICBGSUVMRCAqZmllbGQ7CisKKyAgICAgIGZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgICAgIGlmICghU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpKQorCXsKKwkgIHJlc3VsdCA9IChmb3JtLT50b3Byb3cgPT0gMCkgPyBGQUxTRSA6IFRSVUU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlc3VsdCA9IChmb3JtLT5iZWdpbmNvbCA9PSAwKSA/IEZBTFNFIDogVFJVRTsKKwl9CisgICAgfQorICByZXR1cm5Cb29sKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgY2hhciAqIE9ubHlfUGFkZGluZygKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1cgKncsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVGVzdCBpZiAnbGVuZ3RoJyBjZWxscyBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbgorfCAgICAgICAgICAgICAgICAgICAgY29udGFpbiBhIHBhZGRpbmcgY2hhcmFjdGVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgdHJ1ZSBpZiBvbmx5IHBhZGRpbmcgY2VsbHMgYXJlIGZvdW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIGJvb2wKK09ubHlfUGFkZGluZyhXSU5ET1cgKncsIGludCBsZW4sIGludCBwYWQpCit7CisgIGJvb2wgcmVzdWx0ID0gVFJVRTsKKyAgaW50IHksIHgsIGo7CisgIEZJRUxEX0NFTEwgY2VsbDsKKworICBnZXR5eCh3LCB5LCB4KTsKKyAgZm9yIChqID0gMDsgaiA8IGxlbjsgKytqKQorICAgIHsKKyAgICAgIGlmICh3bW92ZSh3LCB5LCB4ICsgaikgIT0gRVJSKQorCXsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSAgaWYgKHdpbl93Y2godywgJmNlbGwpICE9IEVSUikKKwkgICAgeworCSAgICAgIGlmICgoY2h0eXBlKUNoYXJPZihjZWxsKSAhPSBDaENoYXJPZihwYWQpCisJCSAgfHwgY2VsbC5jaGFyc1sxXSAhPSAwKQorCQl7CisJCSAgcmVzdWx0ID0gRkFMU0U7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorI2Vsc2UKKwkgIGNlbGwgPSB3aW5jaCh3KTsKKwkgIGlmIChDaENoYXJPZihjZWxsKSAhPSBDaENoYXJPZihwYWQpKQorCSAgICB7CisJICAgICAgcmVzdWx0ID0gRkFMU0U7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBpZiBhbiBlcnJvciwgcmV0dXJuIHRydWU6IG5vIG5vbi1wYWRkaW5nIHRleHQgZm91bmQgKi8KKwkgIGJyZWFrOworCX0KKyAgICB9CisgIC8qIG5vIG5lZWQgdG8gcmVzZXQgdGhlIGN1cnNvciBwb3NpdGlvbjsgY2FsbGVyIGRvZXMgdGhpcyAqLworICByZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBkYXRhX2FoZWFkKGNvbnN0IEZPUk0gKmZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBmb3Igb2ZmLXNjcmVlbiBkYXRhIGFoZWFkLiBUaGlzIGlzIG1vcmUgZGlmZmljdWx0Cit8ICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGEgZHluYW1pYyBmaWVsZCBoYXMgYSB2YXJpYWJsZSBlbmQuIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgIC0gdGhlcmUgYXJlIG9mZi1zY3JlZW4gZGF0YSBhaGVhZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgIC0gdGhlcmUgYXJlIG5vIG9mZi1zY3JlZW4gZGF0YSBhaGVhZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitkYXRhX2FoZWFkKGNvbnN0IEZPUk0gKmZvcm0pCit7CisgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgVCgoVF9DQUxMRUQoImRhdGFfYWhlYWQoJXApIiksIGZvcm0pKTsKKworICBpZiAoZm9ybSAmJiAoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkgJiYgZm9ybS0+Y3VycmVudCkKKyAgICB7CisgICAgICBGSUVMRCAqZmllbGQ7CisgICAgICBib29sIGN1cnNvcl9tb3ZlZCA9IEZBTFNFOworICAgICAgaW50IHBvczsKKworICAgICAgZmllbGQgPSBmb3JtLT5jdXJyZW50OworICAgICAgYXNzZXJ0KGZvcm0tPncpOworCisgICAgICBpZiAoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpKQorCXsKKwkgIGludCBjaGVja19sZW47CisKKwkgIHBvcyA9IGZvcm0tPmJlZ2luY29sICsgZmllbGQtPmNvbHM7CisJICB3aGlsZSAocG9zIDwgZmllbGQtPmRjb2xzKQorCSAgICB7CisJICAgICAgY2hlY2tfbGVuID0gZmllbGQtPmRjb2xzIC0gcG9zOworCSAgICAgIGlmIChjaGVja19sZW4gPj0gZmllbGQtPmNvbHMpCisJCWNoZWNrX2xlbiA9IGZpZWxkLT5jb2xzOworCSAgICAgIGN1cnNvcl9tb3ZlZCA9IFRSVUU7CisJICAgICAgd21vdmUoZm9ybS0+dywgMCwgcG9zKTsKKwkgICAgICBpZiAoT25seV9QYWRkaW5nKGZvcm0tPncsIGNoZWNrX2xlbiwgZmllbGQtPnBhZCkpCisJCXBvcyArPSBmaWVsZC0+Y29sczsKKwkgICAgICBlbHNlCisJCXsKKwkJICByZXN1bHQgPSBUUlVFOworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgcG9zID0gZm9ybS0+dG9wcm93ICsgZmllbGQtPnJvd3M7CisJICB3aGlsZSAocG9zIDwgZmllbGQtPmRyb3dzKQorCSAgICB7CisJICAgICAgY3Vyc29yX21vdmVkID0gVFJVRTsKKwkgICAgICB3bW92ZShmb3JtLT53LCBwb3MsIDApOworCSAgICAgIHBvcysrOworCSAgICAgIGlmICghT25seV9QYWRkaW5nKGZvcm0tPncsIGZpZWxkLT5jb2xzLCBmaWVsZC0+cGFkKSkKKwkJeworCQkgIHJlc3VsdCA9IFRSVUU7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKworICAgICAgaWYgKGN1cnNvcl9tb3ZlZCkKKwl3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisgICAgfQorICByZXR1cm5Cb29sKHJlc3VsdCk7Cit9CisKKy8qIGZybV9kYXRhLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZybV9kZWYuYyBiL2Zvcm0vZnJtX2RlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODk3NTEKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZybV9kZWYuYwpAQCAtMCwwICsxLDQxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX2RlZi5jLHYgMS4yMyAyMDA4LzA4LzA0IDAwOjA3OjU1IHRvbSBFeHAgJCIpCisKKy8qIHRoaXMgY2FuJ3QgYmUgcmVhZG9ubHkgKi8KK3N0YXRpYyBGT1JNIGRlZmF1bHRfZm9ybSA9Cit7CisgIDAsCQkJCS8qIHN0YXR1cyAgICAgKi8KKyAgMCwJCQkJLyogcm93cyAgICAgICAqLworICAwLAkJCQkvKiBjb2xzICAgICAgICovCisgIDAsCQkJCS8qIGN1cnJvdyAgICAgKi8KKyAgMCwJCQkJLyogY3VyY29sICAgICAqLworICAwLAkJCQkvKiB0b3Byb3cgICAgICovCisgIDAsCQkJCS8qIGJlZ2luY29sICAgKi8KKyAgLTEsCQkJCS8qIG1heGZpZWxkICAgKi8KKyAgLTEsCQkJCS8qIG1heHBhZ2UgICAgKi8KKyAgLTEsCQkJCS8qIGN1cnBhZ2UgICAgKi8KKyAgQUxMX0ZPUk1fT1BUUywJCS8qIG9wdHMgICAgICAgKi8KKyAgKFdJTkRPVyAqKTAsCQkJLyogd2luICAgICAgICAqLworICAoV0lORE9XICopMCwJCQkvKiBzdWIgICAgICAgICovCisgIChXSU5ET1cgKikwLAkJCS8qIHcgICAgICAgICAgKi8KKyAgKEZJRUxEICoqKTAsCQkJLyogZmllbGQgICAgICAqLworICAoRklFTEQgKikwLAkJCS8qIGN1cnJlbnQgICAgKi8KKyAgKF9QQUdFICopIDAsCQkJLyogcGFnZSAgICAgICAqLworICAoY2hhciAqKTAsCQkJLyogdXNycHRyICAgICAqLworICBOVUxMLAkJCQkvKiBmb3JtaW5pdCAgICovCisgIE5VTEwsCQkJCS8qIGZvcm10ZXJtICAgKi8KKyAgTlVMTCwJCQkJLyogZmllbGRpbml0ICAqLworICBOVUxMCQkJCS8qIGZpZWxkdGVybSAgKi8KK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihGT1JNICopIF9uY19EZWZhdWx0X0Zvcm0gPSAmZGVmYXVsdF9mb3JtOworDAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqSW5zZXJ0X0ZpZWxkX0J5X1Bvc2l0aW9uKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqbmV3X2ZpZWxkLCAKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKmhlYWQgKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgSW5zZXJ0IG5ld19maWVsZCBpbnRvIHNvcnRlZCBmaWVsZGxpc3Qgd2l0aCBoZWFkICJoZWFkIgorfCAgICAgICAgICAgICAgICAgICAgYW5kIHJldHVybiBuZXcgaGVhZCBvZiBzb3J0ZWQgZmllbGRsaXN0LiBTb3J0aW5nCit8ICAgICAgICAgICAgICAgICAgICBjcml0ZXJpYSBpcyAocm93LGNvbHVtbikuIFRoaXMgaXMgYSBjaXJjdWxhciBsaXN0LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTmV3IGhlYWQgb2Ygc29ydGVkIGZpZWxkbGlzdAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBGSUVMRCAqCitJbnNlcnRfRmllbGRfQnlfUG9zaXRpb24oRklFTEQgKm5ld2ZpZWxkLCBGSUVMRCAqaGVhZCkKK3sKKyAgRklFTEQgKmN1cnJlbnQsICpuZXdoZWFkOworCisgIGFzc2VydChuZXdmaWVsZCk7CisKKyAgaWYgKCFoZWFkKQorICAgIHsJCQkJLyogZW1wdHkgbGlzdCBpcyB0cml2aWFsICovCisgICAgICBuZXdoZWFkID0gbmV3ZmllbGQtPnNuZXh0ID0gbmV3ZmllbGQtPnNwcmV2ID0gbmV3ZmllbGQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3aGVhZCA9IGN1cnJlbnQgPSBoZWFkOworICAgICAgd2hpbGUgKChjdXJyZW50LT5mcm93IDwgbmV3ZmllbGQtPmZyb3cpIHx8CisJICAgICAoKGN1cnJlbnQtPmZyb3cgPT0gbmV3ZmllbGQtPmZyb3cpICYmCisJICAgICAgKGN1cnJlbnQtPmZjb2wgPCBuZXdmaWVsZC0+ZmNvbCkpKQorCXsKKwkgIGN1cnJlbnQgPSBjdXJyZW50LT5zbmV4dDsKKwkgIGlmIChjdXJyZW50ID09IGhlYWQpCisJICAgIHsJCQkvKiBXZSBjeWNsZWQgdGhyb3VnaC4gUmVzZXQgaGVhZCB0byBpbmRpY2F0ZSB0aGF0ICovCisJICAgICAgaGVhZCA9IChGSUVMRCAqKTA7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICAvKiB3ZSBsZWF2ZSB0aGUgbG9vcCB3aXRoIGN1cnJlbnQgcG9pbnRpbmcgdG8gdGhlIGZpZWxkIGFmdGVyIG5ld2ZpZWxkICovCisgICAgICBuZXdmaWVsZC0+c25leHQgPSBjdXJyZW50OworICAgICAgbmV3ZmllbGQtPnNwcmV2ID0gY3VycmVudC0+c3ByZXY7CisgICAgICBuZXdmaWVsZC0+c25leHQtPnNwcmV2ID0gbmV3ZmllbGQ7CisgICAgICBuZXdmaWVsZC0+c3ByZXYtPnNuZXh0ID0gbmV3ZmllbGQ7CisgICAgICBpZiAoY3VycmVudCA9PSBoZWFkKQorCW5ld2hlYWQgPSBuZXdmaWVsZDsKKyAgICB9CisgIHJldHVybiAobmV3aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBEaXNjb25uZWN0X0ZpZWxkcyhGT1JNICpmb3JtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQnJlYWsgYXNzb2NpYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBhcnJheSBvZiBmaWVsZHMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK0Rpc2Nvbm5lY3RfRmllbGRzKEZPUk0gKmZvcm0pCit7CisgIGlmIChmb3JtLT5maWVsZCkKKyAgICB7CisgICAgICBGSUVMRCAqKmZpZWxkczsKKworICAgICAgZm9yIChmaWVsZHMgPSBmb3JtLT5maWVsZDsgKmZpZWxkczsgZmllbGRzKyspCisJeworCSAgaWYgKGZvcm0gPT0gKCpmaWVsZHMpLT5mb3JtKQorCSAgICAoKmZpZWxkcyktPmZvcm0gPSAoRk9STSAqKTA7CisJfQorCisgICAgICBmb3JtLT5yb3dzID0gZm9ybS0+Y29scyA9IDA7CisgICAgICBmb3JtLT5tYXhmaWVsZCA9IGZvcm0tPm1heHBhZ2UgPSAtMTsKKyAgICAgIGZvcm0tPmZpZWxkID0gKEZJRUxEICoqKTA7CisgICAgICBpZiAoZm9ybS0+cGFnZSkKKwlmcmVlKGZvcm0tPnBhZ2UpOworICAgICAgZm9ybS0+cGFnZSA9IChfUEFHRSAqKSAwOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgQ29ubmVjdF9GaWVsZHMoRk9STSAqZm9ybSwgRklFTEQgKipmaWVsZHMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgYXNzb2NpYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBhcnJheSBvZiBmaWVsZHMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBubyBlcnJvcgorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgIC0gYSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gSW52YWxpZCBmb3JtIHBvaW50ZXIgb3IgZmllbGQgYXJyYXkKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIG5vdCBlbm91Z2ggbWVtb3J5CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorQ29ubmVjdF9GaWVsZHMoRk9STSAqZm9ybSwgRklFTEQgKipmaWVsZHMpCit7CisgIGludCBmaWVsZF9jbnQsIGo7CisgIGludCBwYWdlX25yOworICBpbnQgbWF4aW11bV9yb3dfaW5fZmllbGQsIG1heGltdW1fY29sX2luX2ZpZWxkOworICBfUEFHRSAqcGc7CisKKyAgVCgoVF9DQUxMRUQoIkNvbm5lY3RfRmllbGRzKCVwLCVwKSIpLCBmb3JtLCBmaWVsZHMpKTsKKworICBhc3NlcnQoZm9ybSk7CisKKyAgZm9ybS0+ZmllbGQgPSBmaWVsZHM7CisgIGZvcm0tPm1heGZpZWxkID0gMDsKKyAgZm9ybS0+bWF4cGFnZSA9IDA7CisKKyAgaWYgKCFmaWVsZHMpCisgICAgUkVUVVJOKEVfT0spOworCisgIHBhZ2VfbnIgPSAwOworICAvKiBzdG9yZSBmb3JtcG9pbnRlciBpbiBmaWVsZHMgYW5kIGNvdW50IHBhZ2VzICovCisgIGZvciAoZmllbGRfY250ID0gMDsgZmllbGRzW2ZpZWxkX2NudF07IGZpZWxkX2NudCsrKQorICAgIHsKKyAgICAgIGlmIChmaWVsZHNbZmllbGRfY250XS0+Zm9ybSkKKwlSRVRVUk4oRV9DT05ORUNURUQpOworICAgICAgaWYgKGZpZWxkX2NudCA9PSAwIHx8CisJICAoZmllbGRzW2ZpZWxkX2NudF0tPnN0YXR1cyAmIF9ORVdQQUdFKSkKKwlwYWdlX25yKys7CisgICAgICBmaWVsZHNbZmllbGRfY250XS0+Zm9ybSA9IGZvcm07CisgICAgfQorICBpZiAoZmllbGRfY250ID09IDAgfHwgKHNob3J0KWZpZWxkX2NudCA8IDApCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICAvKiBhbGxvY2F0ZSBwYWdlIHN0cnVjdHVyZXMgKi8KKyAgaWYgKChwZyA9IHR5cGVNYWxsb2MoX1BBR0UsIHBhZ2VfbnIpKSAhPSAoX1BBR0UgKikgMCkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgiX1BBR0UgJXAiKSwgcGcpKTsKKyAgICAgIGZvcm0tPnBhZ2UgPSBwZzsKKyAgICB9CisgIGVsc2UKKyAgICBSRVRVUk4oRV9TWVNURU1fRVJST1IpOworCisgIC8qIEN5Y2xlIHRocm91Z2ggZmllbGRzIGFuZCBjYWxjdWxhdGUgcGFnZSBib3VuZGFyaWVzIGFzIHdlbGwgYXMKKyAgICAgc2l6ZSBvZiB0aGUgZm9ybSAqLworICBmb3IgKGogPSAwOyBqIDwgZmllbGRfY250OyBqKyspCisgICAgeworICAgICAgaWYgKGogPT0gMCkKKwlwZy0+cG1pbiA9IGo7CisgICAgICBlbHNlCisJeworCSAgaWYgKGZpZWxkc1tqXS0+c3RhdHVzICYgX05FV1BBR0UpCisJICAgIHsKKwkgICAgICBwZy0+cG1heCA9IGogLSAxOworCSAgICAgIHBnKys7CisJICAgICAgcGctPnBtaW4gPSBqOworCSAgICB9CisJfQorCisgICAgICBtYXhpbXVtX3Jvd19pbl9maWVsZCA9IGZpZWxkc1tqXS0+ZnJvdyArIGZpZWxkc1tqXS0+cm93czsKKyAgICAgIG1heGltdW1fY29sX2luX2ZpZWxkID0gZmllbGRzW2pdLT5mY29sICsgZmllbGRzW2pdLT5jb2xzOworCisgICAgICBpZiAoZm9ybS0+cm93cyA8IG1heGltdW1fcm93X2luX2ZpZWxkKQorCWZvcm0tPnJvd3MgPSBtYXhpbXVtX3Jvd19pbl9maWVsZDsKKyAgICAgIGlmIChmb3JtLT5jb2xzIDwgbWF4aW11bV9jb2xfaW5fZmllbGQpCisJZm9ybS0+Y29scyA9IG1heGltdW1fY29sX2luX2ZpZWxkOworICAgIH0KKworICBwZy0+cG1heCA9IGZpZWxkX2NudCAtIDE7CisgIGZvcm0tPm1heGZpZWxkID0gZmllbGRfY250OworICBmb3JtLT5tYXhwYWdlID0gcGFnZV9ucjsKKworICAvKiBTb3J0IGZpZWxkcyBvbiBmb3JtIHBhZ2VzICovCisgIGZvciAocGFnZV9uciA9IDA7IHBhZ2VfbnIgPCBmb3JtLT5tYXhwYWdlOyBwYWdlX25yKyspCisgICAgeworICAgICAgRklFTEQgKmZsZCA9IChGSUVMRCAqKTA7CisKKyAgICAgIGZvciAoaiA9IGZvcm0tPnBhZ2VbcGFnZV9ucl0ucG1pbjsgaiA8PSBmb3JtLT5wYWdlW3BhZ2VfbnJdLnBtYXg7IGorKykKKwl7CisJICBmaWVsZHNbal0tPmluZGV4ID0gajsKKwkgIGZpZWxkc1tqXS0+cGFnZSA9IHBhZ2VfbnI7CisJICBmbGQgPSBJbnNlcnRfRmllbGRfQnlfUG9zaXRpb24oZmllbGRzW2pdLCBmbGQpOworCX0KKyAgICAgIGlmIChmbGQpCisJeworCSAgZm9ybS0+cGFnZVtwYWdlX25yXS5zbWluID0gZmxkLT5pbmRleDsKKwkgIGZvcm0tPnBhZ2VbcGFnZV9ucl0uc21heCA9IGZsZC0+c3ByZXYtPmluZGV4OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBmb3JtLT5wYWdlW3BhZ2VfbnJdLnNtaW4gPSAwOworCSAgZm9ybS0+cGFnZVtwYWdlX25yXS5zbWF4ID0gMDsKKwl9CisgICAgfQorICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEFzc29jaWF0ZV9GaWVsZHMoRk9STSAqZm9ybSwgRklFTEQgKipmaWVsZHMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgYXNzb2NpYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBhcnJheSBvZiBmaWVsZHMuIAorfCAgICAgICAgICAgICAgICAgICAgSWYgdGhlcmUgYXJlIGZpZWxkcywgcG9zaXRpb24gdG8gZmlyc3QgYWN0aXZlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gSW52YWxpZCBmb3JtIHBvaW50ZXIgb3IgZmllbGQgYXJyYXkKK3wgICAgICAgICAgICAgICAgICAgIEVfQ09OTkVDVEVEICAgICAtIGEgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIG5vdCBlbm91Z2ggbWVtb3J5CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIGludAorQXNzb2NpYXRlX0ZpZWxkcyhGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcykKK3sKKyAgaW50IHJlcyA9IENvbm5lY3RfRmllbGRzKGZvcm0sIGZpZWxkcyk7CisKKyAgaWYgKHJlcyA9PSBFX09LKQorICAgIHsKKyAgICAgIGlmIChmb3JtLT5tYXhwYWdlID4gMCkKKwl7CisJICBmb3JtLT5jdXJwYWdlID0gMDsKKwkgIGZvcm1fZHJpdmVyKGZvcm0sIEZJUlNUX0FDVElWRV9NQUdJQyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGZvcm0tPmN1cnBhZ2UgPSAtMTsKKwkgIGZvcm0tPmN1cnJlbnQgPSAoRklFTEQgKikwOworCX0KKyAgICB9CisgIHJldHVybiAocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIEZPUk0gKm5ld19mb3JtKCBGSUVMRCAqKmZpZWxkcyApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDcmVhdGUgbmV3IGZvcm0gd2l0aCBnaXZlbiBhcnJheSBvZiBmaWVsZHMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGZvcm0uIE5VTEwgaWYgZXJyb3Igb2NjdXJyZWQuCishICAgICAgICAgICAgICAgICAgICBTZXQgZXJybm86Cit8ICAgICAgICAgICAgICAgICAgICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBJbnZhbGlkIGZvcm0gcG9pbnRlciBvciBmaWVsZCBhcnJheQorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgIC0gYSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gbm90IGVub3VnaCBtZW1vcnkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGT1JNICopCituZXdfZm9ybShGSUVMRCAqKmZpZWxkcykKK3sKKyAgaW50IGVyciA9IEVfU1lTVEVNX0VSUk9SOworCisgIEZPUk0gKmZvcm0gPSB0eXBlTWFsbG9jKEZPUk0sIDEpOworCisgIFQoKFRfQ0FMTEVEKCJuZXdfZm9ybSglcCkiKSwgZmllbGRzKSk7CisgIGlmIChmb3JtKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJmb3JtICVwIiksIGZvcm0pKTsKKyAgICAgICpmb3JtID0gKl9uY19EZWZhdWx0X0Zvcm07CisgICAgICBpZiAoKGVyciA9IEFzc29jaWF0ZV9GaWVsZHMoZm9ybSwgZmllbGRzKSkgIT0gRV9PSykKKwl7CisJICBmcmVlX2Zvcm0oZm9ybSk7CisJICBmb3JtID0gKEZPUk0gKikwOworCX0KKyAgICB9CisKKyAgaWYgKCFmb3JtKQorICAgIFNFVF9FUlJPUihlcnIpOworCisgIHJldHVybkZvcm0oZm9ybSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZnJlZV9mb3JtKCBGT1JNICpmb3JtICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJlbGVhc2UgaW50ZXJuYWwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBubyBlcnJvcgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGZvcm0gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgLSBmb3JtIGlzIHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZyZWVfZm9ybShGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiZnJlZV9mb3JtKCVwKSIpLCBmb3JtKSk7CisKKyAgaWYgKCFmb3JtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpCisgICAgUkVUVVJOKEVfUE9TVEVEKTsKKworICBEaXNjb25uZWN0X0ZpZWxkcyhmb3JtKTsKKyAgaWYgKGZvcm0tPnBhZ2UpCisgICAgZnJlZShmb3JtLT5wYWdlKTsKKyAgZnJlZShmb3JtKTsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2Zvcm1fZmllbGRzKCBGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcyApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgYSBuZXcgYXNzb2NpYXRpb24gb2YgYW4gYXJyYXkgb2YgZmllbGRzIHRvIGEgZm9ybQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gbm8gZXJyb3IKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIEludmFsaWQgZm9ybSBwb2ludGVyIG9yIGZpZWxkIGFycmF5Cit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAgLSBhIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAgLSBmb3JtIGlzIHBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gbm90IGVub3VnaCBtZW1vcnkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZm9ybV9maWVsZHMoRk9STSAqZm9ybSwgRklFTEQgKipmaWVsZHMpCit7CisgIEZJRUxEICoqb2xkOworICBpbnQgcmVzOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfZm9ybV9maWVsZHMoJXAsJXApIiksIGZvcm0sIGZpZWxkcykpOworCisgIGlmICghZm9ybSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgb2xkID0gZm9ybS0+ZmllbGQ7CisgIERpc2Nvbm5lY3RfRmllbGRzKGZvcm0pOworCisgIGlmICgocmVzID0gQXNzb2NpYXRlX0ZpZWxkcyhmb3JtLCBmaWVsZHMpKSAhPSBFX09LKQorICAgIENvbm5lY3RfRmllbGRzKGZvcm0sIG9sZCk7CisKKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRCAqKmZvcm1fZmllbGRzKCBjb25zdCBGT1JNICpmb3JtICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGFycmF5IG9mIGZpZWxkcworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBmaWVsZCBhcnJheQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKEZJRUxEICoqKQorZm9ybV9maWVsZHMoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoImZvcm1fZmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuRmllbGRQdHIoTm9ybWFsaXplX0Zvcm0oZm9ybSktPmZpZWxkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmaWVsZF9jb3VudCggY29uc3QgRk9STSAqZm9ybSApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBudW1iZXIgb2YgZmllbGRzCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBOdW1iZXIgb2YgZmllbGRzLCAtMSBpZiBub25lIGFyZSBkZWZpbmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZmllbGRfY291bnQoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX2NvdW50KCVwKSIpLCBmb3JtKSk7CisKKyAgcmV0dXJuQ29kZShOb3JtYWxpemVfRm9ybShmb3JtKS0+bWF4ZmllbGQpOworfQorCisvKiBmcm1fZGVmLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZybV9kcml2ZXIuYyBiL2Zvcm0vZnJtX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MzIzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZybV9kcml2ZXIuYwpAQCAtMCwwICsxLDQ1NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9kcml2ZXIuYyx2IDEuODggMjAwOC8xMC8xOCAxNjoyNTowMCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyBpcyB0aGUgY29yZSBtb2R1bGUgb2YgdGhlIGZvcm0gbGlicmFyeS4gSXQgY29udGFpbnMgdGhlIG1ham9yaXR5CisgIG9mIHRoZSBkcml2ZXIgcm91dGluZXMgYXMgd2VsbCBhcyB0aGUgZm9ybV9kcml2ZXIgZnVuY3Rpb24uCisKKyAgRXNzZW50aWFsbHkgdGhpcyBtb2R1bGUgaXMgbmVhcmx5IHRoZSB3aG9sZSBsaWJyYXJ5LiBUaGlzIGlzIGJlY2F1c2UKKyAgYWxsIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZGVwZW5kcyBvbiBzb21lIG90aGVycyBpbiB0aGUgbW9kdWxlLAorICBzbyBpdCBtYWtlcyBubyBzZW5zZSB0byBzcGxpdCB0aGVtIGludG8gc2VwYXJhdGUgZmlsZXMgYmVjYXVzZSB0aGV5CisgIHdpbGwgYWx3YXlzIGJlIGxpbmtlZCB0b2dldGhlci4gVGhlIG9ubHkgYWNjZXB0YWJsZSBjb25jZXJuIGlzIHR1cm5hcm91bmQKKyAgdGltZSBmb3IgdGhpcyBtb2R1bGUsIGJ1dCBub3cgd2UgaGF2ZSBhbGwgUGVudGl1bXMgb3IgUklTQ3MsIHNvIHdoYXQhCisKKyAgVGhlIGRyaXZlciByb3V0aW5lcyBhcmUgZ3JvdXBlZCBpbnRvIG5pbmUgZ2VuZXJpYyBjYXRlZ29yaWVzOgorCisgICBhKSAgIFBhZ2UgTmF2aWdhdGlvbiAgICAgICAgICAgICggYWxsIGZ1bmN0aW9ucyBwcmVmaXhlZCBieSBQTl8gKQorICAgICAgICBUaGUgY3VycmVudCBwYWdlIG9mIHRoZSBmb3JtIGlzIGxlZnQgYW5kIHNvbWUgbmV3IHBhZ2UgaXMKKyAgICAgICAgZW50ZXJlZC4KKyAgIGIpICAgSW50ZXItRmllbGQgTmF2aWdhdGlvbiAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IEZOXyApCisgICAgICAgIFRoZSBjdXJyZW50IGZpZWxkIG9mIHRoZSBmb3JtIGlzIGxlZnQgYW5kIHNvbWUgbmV3IGZpZWxkIGlzCisgICAgICAgIGVudGVyZWQuCisgICBjKSAgIEludHJhLUZpZWxkIE5hdmlnYXRpb24gICAgICggYWxsIGZ1bmN0aW9ucyBwcmVmaXhlZCBieSBJRk5fICkKKyAgICAgICAgVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgZmllbGQgaXMgY2hhbmdlZC4KKyAgIGQpICAgVmVydGljYWwgU2Nyb2xsaW5nICAgICAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IFZTQ18gKQorICAgICAgICBFc3NlbnRpYWxseSB0aGlzIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgSW50cmEtRmllbGQgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQgaGFzIHRvIGNoZWNrIGZvciBhIG11bHRpLWxpbmUgZmllbGQuCisgICBlKSAgIEhvcml6b250YWwgU2Nyb2xsaW5nICAgICAgICggYWxsIGZ1bmN0aW9ucyBwcmVmaXhlZCBieSBIU0NfICkKKyAgICAgICAgRXNzZW50aWFsbHkgdGhpcyBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIEludHJhLUZpZWxkIG5hdmlnYXRpb24uCisgICAgICAgIEl0IGhhcyB0byBjaGVjayBmb3IgYSBzaW5nbGUtbGluZSBmaWVsZC4KKyAgIGYpICAgRmllbGQgRWRpdGluZyAgICAgICAgICAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IEZFXyApCisgICAgICAgIFRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IGZpZWxkIGlzIGNoYW5nZWQKKyAgIGcpICAgRWRpdCBNb2RlIHJlcXVlc3RzICAgICAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IEVNXyApCisgICAgICAgIFN3aXRjaGluZyBiZXR3ZWVuIGluc2VydCBhbmQgb3ZlcmxheSBtb2RlCisgICBoKSAgIEZpZWxkLVZhbGlkYXRpb24gcmVxdWVzdHMgICggYWxsIGZ1bmN0aW9ucyBwcmVmaXhlZCBieSBGVl8gKQorICAgICAgICBQZXJmb3JtIHZlcmlmaWNhdGlvbnMgb2YgdGhlIGZpZWxkLgorICAgaSkgICBDaG9pY2UgcmVxdWVzdHMgICAgICAgICAgICAoIGFsbCBmdW5jdGlvbnMgcHJlZml4ZWQgYnkgQ1JfICkKKyAgICAgICAgUmVxdWVzdHMgdG8gZW51bWVyYXRlIHBvc3NpYmxlIGZpZWxkIHZhbHVlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTb21lIHJlbWFya3Mgb24gdGhlIHBsYWNlbWVudHMgb2YgYXNzZXJ0KCkgbWFjcm9zIDoKKyAgSSB1c2UgdGhlbSBvbmx5IG9uICJzdHJhdGVnaWMiIHBsYWNlcywgaS5lLiB0b3AgbGV2ZWwgZW50cmllcyB3aGVyZQorICBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpbmdzIGFyZSBzZXQgY29ycmVjdGx5LiBUaHJvdWdob3V0IHN1Ym9yZGluYXRlCisgIHJvdXRpbmVzIEkgb21pdCB0aGVtIG1vc3RseS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorU29tZSBvcHRpb25zIHRoYXQgbWF5IGVmZmVjdCBjb21wYXRpYmlsaXR5IGluIGJlaGF2aW9yIHRvIFNWcjQgZm9ybXMsCitidXQgdGhleSBhcmUgaGVyZSB0byBhbGxvdyBhIG1vcmUgaW50dWl0aXZlIGFuZCB1c2VyIGZyaWVuZGx5IGJlaGF2aW9yIG9mCitvdXIgZm9ybSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUgQVBJLCBzbyB3ZSBmZWVsIGl0IGlzCit1bmNyaXRpY2FsLgorCitUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiB0cmllcyB0byBzdGF5IHZlcnkgY2xvc2Ugd2l0aCB0aGUgYmVoYXZpb3IKK29mIHRoZSBvcmlnaW5hbCBTVnI0IGltcGxlbWVudGF0aW9uLCBhbHRob3VnaCBpbiBzb21lIGFyZWFzIGl0IGlzIHF1aXRlCitjbGVhciB0aGF0IHRoaXMgaXNuJ3QgdGhlIG1vc3QgYXBwcm9wcmlhdGUgd2F5LiBBcyBmYXIgYXMgcG9zc2libGUgdGhpcworc291cmNlcyB3aWxsIGFsbG93IHlvdSB0byBidWlsZCBhIGZvcm1zIGxpYiB0aGF0IGJlaGF2ZXMgcXVpdGUgc2ltaWxhcgordG8gU1ZyNCwgYnV0IG5vdyBhbmQgaW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIGdpdmUgeW91IGJldHRlciBvcHRpb25zLgorUGVyaGFwcyBhdCBzb21lIHRpbWUgd2Ugd2lsbCBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGF0IHJ1bnRpbWUuCisqLworCisvKiBJbXBsZW1lbnQgYSBtb3JlIHVzZXItZnJpZW5kbHkgcHJldmlvdXMvbmV4dCB3b3JkIGJlaGF2aW9yICovCisjZGVmaW5lIEZSSUVORExZX1BSRVZfTkVYVF9XT1JEICgxKQorLyogRml4IHRoZSB3cm9uZyBiZWhhdmlvciBmb3IgZm9ybXMgd2l0aCBhbGwgZmllbGRzIGluYWN0aXZlICovCisjZGVmaW5lIEZJWF9GT1JNX0lOQUNUSVZFX0JVRyAoMSkKKy8qIEFsbG93IGR5bmFtaWMgZmllbGQgZ3Jvd3RoIGFsc28gd2hlbiBuYXZpZ2F0aW5nIHBhc3QgdGhlIGVuZCAqLworI2RlZmluZSBHUk9XX0lGX05BVklHQVRFICgxKQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgbXlBREROU1RSKHcsIHMsIG4pIHdhZGRfd2NobnN0cih3LCBzLCBuKQorI2RlZmluZSBteUlOU05TVFIodywgcywgbikgd2luc193Y2huc3RyKHcsIHMsIG4pCisjZGVmaW5lIG15SU5OU1RSKHcsIHMsIG4pICBmaXhfd2NobnN0cih3LCBzLCBuKQorI2RlZmluZSBteVdDV0lEVEgodywgeSwgeCkgY2VsbF93aWR0aCh3LCB5LCB4KQorI2Vsc2UKKyNkZWZpbmUgbXlBREROU1RSKHcsIHMsIG4pIHdhZGRuc3RyKHcsIHMsIG4pCisjZGVmaW5lIG15SU5TTlNUUih3LCBzLCBuKSB3aW5zbnN0cih3LCBzLCBuKQorI2RlZmluZSBteUlOTlNUUih3LCBzLCBuKSAgd2lubnN0cih3LCBzLCBuKQorI2RlZmluZSBteVdDV0lEVEgodywgeSwgeCkgMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBGb3J3YXJkIHJlZmVyZW5jZXMgdG8gc29tZSBpbnRlcm5hbGx5IHVzZWQgc3RhdGljIGZ1bmN0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IEludGVyX0ZpZWxkX05hdmlnYXRpb24oaW50ICgqY29uc3QgZmN0KSAoRk9STSAqKSwgRk9STSAqZm9ybSk7CitzdGF0aWMgaW50IEZOX05leHRfRmllbGQoRk9STSAqZm9ybSk7CitzdGF0aWMgaW50IEZOX1ByZXZpb3VzX0ZpZWxkKEZPUk0gKmZvcm0pOworc3RhdGljIGludCBGRV9OZXdfTGluZShGT1JNICopOworc3RhdGljIGludCBGRV9EZWxldGVfUHJldmlvdXMoRk9STSAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIE1hY3JvIERlZmluaXRpb25zLgorCisgIFNvbWUgUmVtYXJrcyBvbiB0aGF0OiBJIHVzZSB0aGUgY29udmVudGlvbiB0byB1c2UgVVBQRVJDQVNFIGZvciBjb25zdGFudHMKKyAgZGVmaW5lZCBieSBNYWNyb3MuIElmIEkgcHJvdmlkZSBhIG1hY3JvIGFzIGEga2luZCBvZiBpbmxpbmUgcm91dGluZSB0bworICBwcm92aWRlIHNvbWUgbG9naWMsIEkgdXNlIG15IFVwcGVyX0xvd2VyIGNhc2Ugc3R5bGUuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiBhIHNpbmdsZSByb3cgaW4gYSBmaWVsZCBidWZmZXIgKi8KKyNkZWZpbmUgUG9zaXRpb25fT2ZfUm93X0luX0J1ZmZlcihmaWVsZCxyb3cpICgocm93KSooZmllbGQpLT5kY29scykKKworLyogQ2FsY3VsYXRlIHN0YXJ0IGFkZHJlc3MgZm9yIHRoZSBmaWVsZHMgYnVmZmVyIyBOICovCisjZGVmaW5lIEFkZHJlc3NfT2ZfTnRoX0J1ZmZlcihmaWVsZCxOKSBcCisgICgoZmllbGQpLT5idWYgKyAoTikqKDErQnVmZmVyX0xlbmd0aChmaWVsZCkpKQorCisvKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJvdyBpbiB0aGUgZmllbGRzIHNwZWNpZmllZCBidWZmZXIjIE4gKi8KKyNkZWZpbmUgQWRkcmVzc19PZl9Sb3dfSW5fTnRoX0J1ZmZlcihmaWVsZCxOLHJvdykgXAorICAoQWRkcmVzc19PZl9OdGhfQnVmZmVyKGZpZWxkLE4pICsgUG9zaXRpb25fT2ZfUm93X0luX0J1ZmZlcihmaWVsZCxyb3cpKQorCisvKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJvdyBpbiB0aGUgZmllbGRzIHByaW1hcnkgYnVmZmVyICovCisjZGVmaW5lIEFkZHJlc3NfT2ZfUm93X0luX0J1ZmZlcihmaWVsZCxyb3cpIFwKKyAgQWRkcmVzc19PZl9Sb3dfSW5fTnRoX0J1ZmZlcihmaWVsZCwwLHJvdykKKworLyogQ2FsY3VsYXRlIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSByb3cgaW4gdGhlIGZvcm1zIGN1cnJlbnQgZmllbGQKKyAgIGJ1ZmZlciMgTiAqLworI2RlZmluZSBBZGRyZXNzX09mX0N1cnJlbnRfUm93X0luX050aF9CdWZmZXIoZm9ybSxOKSBcCisgICBBZGRyZXNzX09mX1Jvd19Jbl9OdGhfQnVmZmVyKChmb3JtKS0+Y3VycmVudCxOLChmb3JtKS0+Y3Vycm93KQorCisvKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJvdyBpbiB0aGUgZm9ybXMgY3VycmVudCBmaWVsZAorICAgcHJpbWFyeSBidWZmZXIgKi8KKyNkZWZpbmUgQWRkcmVzc19PZl9DdXJyZW50X1Jvd19Jbl9CdWZmZXIoZm9ybSkgXAorICAgQWRkcmVzc19PZl9DdXJyZW50X1Jvd19Jbl9OdGhfQnVmZmVyKGZvcm0sMCkKKworLyogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJzb3IgaW4gdGhlIGZvcm1zIGN1cnJlbnQgZmllbGQKKyAgIHByaW1hcnkgYnVmZmVyICovCisjZGVmaW5lIEFkZHJlc3NfT2ZfQ3VycmVudF9Qb3NpdGlvbl9Jbl9OdGhfQnVmZmVyKGZvcm0sTikgXAorICAgKEFkZHJlc3NfT2ZfQ3VycmVudF9Sb3dfSW5fTnRoX0J1ZmZlcihmb3JtLE4pICsgKGZvcm0pLT5jdXJjb2wpCisKKy8qIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgY3Vyc29yIGluIHRoZSBmb3JtcyBjdXJyZW50IGZpZWxkCisgICBidWZmZXIjIE4gKi8KKyNkZWZpbmUgQWRkcmVzc19PZl9DdXJyZW50X1Bvc2l0aW9uX0luX0J1ZmZlcihmb3JtKSBcCisgIEFkZHJlc3NfT2ZfQ3VycmVudF9Qb3NpdGlvbl9Jbl9OdGhfQnVmZmVyKGZvcm0sMCkKKworLyogTG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgZmllbGQgaXMgYWN0dWFsbHkgYSBmaWVsZCB3aXRoCisgICB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIHNjcm9sbGluZyAqLworI2RlZmluZSBJc19TY3JvbGxfRmllbGQoZmllbGQpICAgICAgICAgIFwKKyAgICgoKGZpZWxkKS0+ZHJvd3MgPiAoZmllbGQpLT5yb3dzKSB8fCBcCisgICAgKChmaWVsZCktPmRjb2xzID4gKGZpZWxkKS0+Y29scykpCisKKy8qIExvZ2ljIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCBhIGZpZWxkIG5lZWRzIHRvIGhhdmUgYW4gaW5kaXZpZHVhbCB3aW5kb3cKKyAgIGluc3RlYWQgb2YgYSBkZXJpdmVkIHdpbmRvdyBiZWNhdXNlIGl0IGNvbnRhaW5zIGludmlzaWJsZSBwYXJ0cy4KKyAgIFRoaXMgaXMgdHJ1ZSBmb3Igbm9uLXB1YmxpYyBmaWVsZHMgYW5kIGZvciBzY3JvbGxhYmxlIGZpZWxkcy4gKi8KKyNkZWZpbmUgSGFzX0ludmlzaWJsZV9QYXJ0cyhmaWVsZCkgICAgIFwKKyAgKCEoKGZpZWxkKS0+b3B0cyAmIE9fUFVCTElDKSAgICAgIHx8IFwKKyAgIElzX1Njcm9sbF9GaWVsZChmaWVsZCkpCisKKy8qIExvZ2ljIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCBhIGZpZWxkIG5lZWRzIGp1c3RpZmljYXRpb24gKi8KKyNkZWZpbmUgSnVzdGlmaWNhdGlvbl9BbGxvd2VkKGZpZWxkKSAgICAgICAgXAorICAgKCgoZmllbGQpLT5qdXN0ICE9IE5PX0pVU1RJRklDQVRJT04pICAmJiBcCisgICAgKFNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSkgICAgICAgICAgICYmIFwKKyAgICAoKChmaWVsZCktPmRjb2xzID09IChmaWVsZCktPmNvbHMpICAgJiYgXAorICAgICgoZmllbGQpLT5vcHRzICYgT19TVEFUSUMpKSAgICAgICAgICAgICApCisKKy8qIExvZ2ljIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIGR5bmFtaWMgZmllbGQgbWF5IHN0aWxsIGdyb3cgKi8KKyNkZWZpbmUgR3Jvd2FibGUoZmllbGQpICgoZmllbGQpLT5zdGF0dXMgJiBfTUFZX0dST1cpCisKKy8qIE1hY3JvIHRvIHNldCB0aGUgYXR0cmlidXRlcyBmb3IgYSBmaWVsZHMgd2luZG93ICovCisjZGVmaW5lIFNldF9GaWVsZF9XaW5kb3dfQXR0cmlidXRlcyhmaWVsZCx3aW4pIFwKKyggIHdia2dkc2V0KCh3aW4pLChjaHR5cGUpKChmaWVsZCktPnBhZCB8IChmaWVsZCktPmJhY2spKSwgXAorICAgd2F0dHJzZXQoKHdpbiksKGZpZWxkKS0+Zm9yZSkgKQorCisvKiBMb2dpYyB0byBkZWNpZGUgd2hldGhlciBvciBub3QgYSBmaWVsZCByZWFsbHkgYXBwZWFycyBvbiB0aGUgZm9ybSAqLworI2RlZmluZSBGaWVsZF9SZWFsbHlfQXBwZWFycyhmaWVsZCkgICAgICAgICBcCisgICgoZmllbGQtPmZvcm0pICAgICAgICAgICAgICAgICAgICAgICAgICAmJlwKKyAgIChmaWVsZC0+Zm9ybS0+c3RhdHVzICYgX1BPU1RFRCkgICAgICAgICYmXAorICAgKGZpZWxkLT5vcHRzICYgT19WSVNJQkxFKSAgICAgICAgICAgICAgJiZcCisgICAoZmllbGQtPnBhZ2UgPT0gZmllbGQtPmZvcm0tPmN1cnBhZ2UpKQorCisvKiBMb2dpYyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgYXJlIG9uIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUKKyAgIGN1cnJlbnQgZmllbGQgKi8KKyNkZWZpbmUgRmlyc3RfUG9zaXRpb25fSW5fQ3VycmVudF9GaWVsZChmb3JtKSBcCisgICgoKGZvcm0pLT5jdXJyb3c9PTApICYmICgoZm9ybSktPmN1cmNvbD09MCkpCisKKyNkZWZpbmUgTWluaW11bShhLGIpICgoKGEpPD0oYikpID8gKGEpIDogKGIpKQorI2RlZmluZSBNYXhpbXVtKGEsYikgKCgoYSk+PShiKSkgPyAoYSkgOiAoYikpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBVc2VmdWwgY29uc3RhbnRzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBGSUVMRF9DRUxMIG15QkxBTksgPSBCTEFOSzsKK3N0YXRpYyBGSUVMRF9DRUxMIG15WkVST1M7CisKKyNpZmRlZiBUUkFDRQorc3RhdGljIHZvaWQKK2NoZWNrX3BvcyhGT1JNICpmb3JtLCBpbnQgbGluZW5vKQoreworICBpbnQgeSwgeDsKKworICBpZiAoZm9ybSAmJiBmb3JtLT53KQorICAgIHsKKyAgICAgIGdldHl4KGZvcm0tPncsIHksIHgpOworICAgICAgaWYgKHkgIT0gZm9ybS0+Y3Vycm93IHx8IHggIT0gZm9ybS0+Y3VyY29sKQorCXsKKwkgIFQoKCJDSEVDS1BPUyAlc0AlZCBoYXZlIHBvc2l0aW9uICVkLCVkIHZzIHdhbnQgJWQsJWQiLAorCSAgICAgX19GSUxFX18sIGxpbmVubywKKwkgICAgIHksIHgsCisJICAgICBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCkpOworCX0KKyAgICB9Cit9CisjZGVmaW5lIENIRUNLUE9TKGZvcm0pIGNoZWNrX3Bvcyhmb3JtLCBfX0xJTkVfXykKKyNlbHNlCisjZGVmaW5lIENIRUNLUE9TKGZvcm0pCQkvKiBub3RoaW5nICovCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdpZGUtY2hhcmFjdGVyIHNwZWNpYWwgZnVuY3Rpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorLyogbGlrZSB3aW5zbnN0ciAqLworc3RhdGljIGludAord2luc193Y2huc3RyKFdJTkRPVyAqdywgY2NoYXJfdCAqcywgaW50IG4pCit7CisgIGludCBjb2RlID0gRVJSOworICBpbnQgeSwgeDsKKworICB3aGlsZSAobi0tID4gMCkKKyAgICB7CisgICAgICBnZXR5eCh3LCB5LCB4KTsKKyAgICAgIGlmICgoY29kZSA9IHdpbnNfd2NoKHcsIHMrKykpICE9IE9LKQorCWJyZWFrOworICAgICAgaWYgKChjb2RlID0gd21vdmUodywgeSwgeCArIDEpKSAhPSBPSykKKwlicmVhazsKKyAgICB9CisgIHJldHVybiBjb2RlOworfQorCisvKiB3aW5fd2NobnN0ciBpcyBpbmNvbnNpc3RlbnQgd2l0aCB3aW5uc3RyLCBzaW5jZSBpdCByZXR1cm5zIE9LIHJhdGhlciB0aGFuCisgKiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRyYW5zZmVycmVkLgorICovCitzdGF0aWMgaW50CitmaXhfd2NobnN0cihXSU5ET1cgKncsIGNjaGFyX3QgKnMsIGludCBuKQoreworICBpbnQgeDsKKworICB3aW5fd2NobnN0cih3LCBzLCBuKTsKKyAgLyoKKyAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGV4dHJhY3QgdGhlIHRleHQgb25seSBmcm9tIHRoZSB3aW5kb3cuCisgICAqIFN0cmlwIGF0dHJpYnV0ZXMgYW5kIGNvbG9yIGZyb20gdGhlIHN0cmluZyBzbyB0aGV5IHdpbGwgbm90IGJlIGFkZGVkCisgICAqIGJhY2sgd2hlbiBjb3B5aW5nIHRoZSBzdHJpbmcgdG8gdGhlIHdpbmRvdy4KKyAgICovCisgIGZvciAoeCA9IDA7IHggPCBuOyArK3gpCisgICAgeworICAgICAgUmVtQXR0cihzW3hdLCBBX0FUVFJJQlVURVMpOworICAgICAgU2V0UGFpcihzW3hdLCAwKTsKKyAgICB9CisgIHJldHVybiBuOworfQorCisvKgorICogUmV0dXJucyB0aGUgY29sdW1uIG9mIHRoZSBiYXNlIG9mIHRoZSBnaXZlbiBjZWxsLgorICovCitzdGF0aWMgaW50CitjZWxsX2Jhc2UoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKK3sKKyAgaW50IHJlc3VsdCA9IHg7CisKKyAgd2hpbGUgKExFR0FMWVgod2luLCB5LCB4KSkKKyAgICB7CisgICAgICBjY2hhcl90ICpkYXRhID0gJih3aW4tPl9saW5lW3ldLnRleHRbeF0pOworCisgICAgICBpZiAoaXNXaWRlY0Jhc2UoQ0hERVJFRihkYXRhKSkgfHwgIWlzV2lkZWNFeHQoQ0hERVJFRihkYXRhKSkpCisJeworCSAgcmVzdWx0ID0geDsKKwkgIGJyZWFrOworCX0KKyAgICAgIC0teDsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29sdW1ucyBuZWVkZWQgZm9yIHRoZSBnaXZlbiBjZWxsIGluIGEgd2luZG93LgorICovCitzdGF0aWMgaW50CitjZWxsX3dpZHRoKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpCit7CisgIGludCByZXN1bHQgPSAxOworCisgIGlmIChMRUdBTFlYKHdpbiwgeSwgeCkpCisgICAgeworICAgICAgY2NoYXJfdCAqZGF0YSA9ICYod2luLT5fbGluZVt5XS50ZXh0W3hdKTsKKworICAgICAgaWYgKGlzV2lkZWNFeHQoQ0hERVJFRihkYXRhKSkpCisJeworCSAgLyogcmVjdXIsIHByb3ZpZGluZyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gdGhlIG5leHQgY2hhcmFjdGVyICovCisJICByZXN1bHQgPSBjZWxsX3dpZHRoKHdpbiwgeSwgeCAtIDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICByZXN1bHQgPSB3Y3dpZHRoKENoYXJPZihDSERFUkVGKGRhdGEpKSk7CisJfQorICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoZXJlIGlzIG5vIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9uIHN1Y2ggYXMgd2RlbF93Y2goKSwgc28gd2UgbXVzdCBmaW5kCisgKiBhbGwgb2YgdGhlIGNlbGxzIHRoYXQgY29tcHJpc2UgYSBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyIGFuZCBkZWxldGUgdGhlbQorICogb25lLWJ5LW9uZS4KKyAqLworc3RhdGljIHZvaWQKK2RlbGV0ZV9jaGFyKEZPUk0gKmZvcm0pCit7CisgIGludCBjZWxscyA9IGNlbGxfd2lkdGgoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworCisgIGZvcm0tPmN1cmNvbCA9IGNlbGxfYmFzZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgd2hpbGUgKGNlbGxzLS0gPiAwKQorICAgIHsKKyAgICAgIHdkZWxjaChmb3JtLT53KTsKKyAgICB9Cit9CisjZGVmaW5lIERlbGV0ZUNoYXIoZm9ybSkgZGVsZXRlX2NoYXIoZm9ybSkKKyNlbHNlCisjZGVmaW5lIERlbGV0ZUNoYXIoZm9ybSkgXAorCSAgd21vdmUoKGZvcm0pLT53LCAoZm9ybSktPmN1cnJvdywgKGZvcm0pLT5jdXJjb2wpLCBcCisJICB3ZGVsY2goKGZvcm0pLT53KQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGNoYXIgKkdldF9TdGFydF9PZl9EYXRhKGNoYXIgKiBidWYsIGludCBibGVuKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHBvaW50ZXIgdG8gZmlyc3Qgbm9uLWJsYW5rIHBvc2l0aW9uIGluIGJ1ZmZlci4KK3wgICAgICAgICAgICAgICAgICAgIElmIGJ1ZmZlciBpcyBlbXB0eSByZXR1cm4gcG9pbnRlciB0byBidWZmZXIgaXRzZWxmLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBmaXJzdCBub24tYmxhbmsgcG9zaXRpb24gaW4gYnVmZmVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEX0NFTEwgKgorR2V0X1N0YXJ0X09mX0RhdGEoRklFTERfQ0VMTCAqYnVmLCBpbnQgYmxlbikKK3sKKyAgRklFTERfQ0VMTCAqcCA9IGJ1ZjsKKyAgRklFTERfQ0VMTCAqZW5kID0gJmJ1ZltibGVuXTsKKworICBhc3NlcnQoYnVmICYmIGJsZW4gPj0gMCk7CisgIHdoaWxlICgocCA8IGVuZCkgJiYgSVNCTEFOSygqcCkpCisgICAgcCsrOworICByZXR1cm4gKChwID09IGVuZCkgPyBidWYgOiBwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgY2hhciAqQWZ0ZXJfRW5kX09mX0RhdGEoY2hhciAqIGJ1ZiwgaW50IGJsZW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gcG9pbnRlciBhZnRlciBsYXN0IG5vbi1ibGFuayBwb3NpdGlvbiBpbiBidWZmZXIuCit8ICAgICAgICAgICAgICAgICAgICBJZiBidWZmZXIgaXMgZW1wdHksIHJldHVybiBwb2ludGVyIHRvIGJ1ZmZlciBpdHNlbGYuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIHBvc2l0aW9uIGFmdGVyIGxhc3Qgbm9uLWJsYW5rIHBvc2l0aW9uIGluCit8ICAgICAgICAgICAgICAgICAgICBidWZmZXIuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEX0NFTEwgKgorQWZ0ZXJfRW5kX09mX0RhdGEoRklFTERfQ0VMTCAqYnVmLCBpbnQgYmxlbikKK3sKKyAgRklFTERfQ0VMTCAqcCA9ICZidWZbYmxlbl07CisKKyAgYXNzZXJ0KGJ1ZiAmJiBibGVuID49IDApOworICB3aGlsZSAoKHAgPiBidWYpICYmIElTQkxBTksocFstMV0pKQorICAgIHAtLTsKKyAgcmV0dXJuIChwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgY2hhciAqR2V0X0ZpcnN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYnVmLCBpbnQgICBibGVuKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUG9zaXRpb24gdG8gdGhlIGZpcnN0IHdoaXRlc3BhY2UgY2hhcmFjdGVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBmaXJzdCB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiBidWZmZXIuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEX0NFTEwgKgorR2V0X0ZpcnN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKEZJRUxEX0NFTEwgKmJ1ZiwgaW50IGJsZW4pCit7CisgIEZJRUxEX0NFTEwgKnAgPSBidWY7CisgIEZJRUxEX0NFTEwgKmVuZCA9ICZwW2JsZW5dOworCisgIGFzc2VydChidWYgJiYgYmxlbiA+PSAwKTsKKyAgd2hpbGUgKChwIDwgZW5kKSAmJiAhSVNCTEFOSygqcCkpCisgICAgcCsrOworICByZXR1cm4gKChwID09IGVuZCkgPyBidWYgOiBwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgY2hhciAqQWZ0ZXJfTGFzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGJ1ZiwgaW50IGJsZW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IHdoaXRlc3BhY2UgY2hhcmFjdGVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBwb3NpdGlvbiBhZnRlciBsYXN0IHdoaXRlc3BhY2UgY2hhcmFjdGVyIGluCit8ICAgICAgICAgICAgICAgICAgICBidWZmZXIuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEX0NFTEwgKgorQWZ0ZXJfTGFzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcihGSUVMRF9DRUxMICpidWYsIGludCBibGVuKQoreworICBGSUVMRF9DRUxMICpwID0gJmJ1ZltibGVuXTsKKworICBhc3NlcnQoYnVmICYmIGJsZW4gPj0gMCk7CisgIHdoaWxlICgocCA+IGJ1ZikgJiYgIUlTQkxBTksocFstMV0pKQorICAgIHAtLTsKKyAgcmV0dXJuIChwKTsKK30KKworLyogU2V0IHRoaXMgdG8gMSB0byB1c2UgdGhlIGRpdl90IHZlcnNpb24uIFRoaXMgaXMgYSBnb29kIGlkZWEgaWYgeW91cgorICAgY29tcGlsZXIgaGFzIGFuIGludHJpbnNpYyBkaXYoKSBzdXBwb3J0LiBVbmZvcnR1bmF0ZWx5IEdOVS1DIGhhcyBpdAorICAgbm90IHlldC4KKyAgIE4uQi46IFRoaXMgb25seSB3b3JrcyBpZiBmb3JtLT5jdXJjb2wgZm9sbG93cyBpbW1lZGlhdGVseSBmb3JtLT5jdXJyb3cKKyAgICAgICAgIGFuZCBib3RoIGFyZSBvZiB0eXBlIGludC4KKyovCisjZGVmaW5lIFVTRV9ESVZfVCAoMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBBZGp1c3RfQ3Vyc29yX1Bvc2l0aW9uKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk0gKiBmb3JtLCBjb25zdCBjaGFyICogcG9zKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IGN1cnJlbnQgcm93IGFuZCBjb2x1bW4gb2YgdGhlIGZvcm0gdG8gdmFsdWVzCit8ICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBidWZmZXIgcG9zaXRpb24uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIHZvaWQKK0FkanVzdF9DdXJzb3JfUG9zaXRpb24oRk9STSAqZm9ybSwgY29uc3QgRklFTERfQ0VMTCAqcG9zKQoreworICBGSUVMRCAqZmllbGQ7CisgIGludCBpZHg7CisKKyAgZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBhc3NlcnQocG9zID49IGZpZWxkLT5idWYgJiYgZmllbGQtPmRjb2xzID4gMCk7CisgIGlkeCA9IChpbnQpKHBvcyAtIGZpZWxkLT5idWYpOworI2lmIFVTRV9ESVZfVAorICAqKChkaXZfdCAqKSAmIChmb3JtLT5jdXJyb3cpKSA9IGRpdihpZHgsIGZpZWxkLT5kY29scyk7CisjZWxzZQorICBmb3JtLT5jdXJyb3cgPSBpZHggLyBmaWVsZC0+ZGNvbHM7CisgIGZvcm0tPmN1cmNvbCA9IGlkeCAtIGZpZWxkLT5jb2xzICogZm9ybS0+Y3Vycm93OworI2VuZGlmCisgIGlmIChmaWVsZC0+ZHJvd3MgPCBmb3JtLT5jdXJyb3cpCisgICAgZm9ybS0+Y3Vycm93ID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBCdWZmZXJfVG9fV2luZG93KAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRklFTEQgICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1cgKiB3aW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHRoZSBidWZmZXIgdG8gdGhlIHdpbmRvdy4gSWYgaXQgaXMgYSBtdWx0aS1saW5lCit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCwgdGhlIGJ1ZmZlciBpcyBzcGxpdCB0byB0aGUgbGluZXMgb2YgdGhlCit8ICAgICAgICAgICAgICAgICAgICB3aW5kb3cgd2l0aG91dCBhbnkgZWRpdGluZy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorQnVmZmVyX1RvX1dpbmRvdyhjb25zdCBGSUVMRCAqZmllbGQsIFdJTkRPVyAqd2luKQoreworICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgaW50IHksIHg7CisgIGludCBsZW47CisgIGludCByb3c7CisgIEZJRUxEX0NFTEwgKnBCdWZmZXI7CisKKyAgYXNzZXJ0KHdpbiAmJiBmaWVsZCk7CisKKyAgZ2V0eXgod2luLCB5LCB4KTsKKyAgd2lkdGggPSBnZXRtYXh4KHdpbik7CisgIGhlaWdodCA9IGdldG1heHkod2luKTsKKworICBmb3IgKHJvdyA9IDAsIHBCdWZmZXIgPSBmaWVsZC0+YnVmOworICAgICAgIHJvdyA8IGhlaWdodDsKKyAgICAgICByb3crKywgcEJ1ZmZlciArPSB3aWR0aCkKKyAgICB7CisgICAgICBpZiAoKGxlbiA9IChpbnQpKEFmdGVyX0VuZF9PZl9EYXRhKHBCdWZmZXIsIHdpZHRoKSAtIHBCdWZmZXIpKSA+IDApCisJeworCSAgd21vdmUod2luLCByb3csIDApOworCSAgbXlBREROU1RSKHdpbiwgcEJ1ZmZlciwgbGVuKTsKKwl9CisgICAgfQorICB3bW92ZSh3aW4sIHksIHgpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIFdpbmRvd19Ub19CdWZmZXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORE9XICogd2luLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ29weSB0aGUgY29udGVudCBvZiB0aGUgd2luZG93IGludG8gdGhlIGJ1ZmZlci4KK3wgICAgICAgICAgICAgICAgICAgIFRoZSBtdWx0aXBsZSBsaW5lcyBvZiBhIHdpbmRvdyBhcmUgc2ltcGx5Cit8ICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZWQgaW50byB0aGUgYnVmZmVyLiBQYWQgY2hhcmFjdGVycyBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIHdpbmRvdyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGJsYW5rcyBpbiB0aGUgYnVmZmVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitXaW5kb3dfVG9fQnVmZmVyKFdJTkRPVyAqd2luLCBGSUVMRCAqZmllbGQpCit7CisgIGludCBwYWQ7CisgIGludCBsZW4gPSAwOworICBGSUVMRF9DRUxMICpwOworICBpbnQgcm93LCBoZWlnaHQ7CisKKyAgYXNzZXJ0KHdpbiAmJiBmaWVsZCAmJiBmaWVsZC0+YnVmKTsKKworICBwYWQgPSBmaWVsZC0+cGFkOworICBwID0gZmllbGQtPmJ1ZjsKKyAgaGVpZ2h0ID0gZ2V0bWF4eSh3aW4pOworCisgIGZvciAocm93ID0gMDsgKHJvdyA8IGhlaWdodCkgJiYgKHJvdyA8IGZpZWxkLT5kcm93cyk7IHJvdysrKQorICAgIHsKKyAgICAgIHdtb3ZlKHdpbiwgcm93LCAwKTsKKyAgICAgIGxlbiArPSBteUlOTlNUUih3aW4sIHAgKyBsZW4sIGZpZWxkLT5kY29scyk7CisgICAgfQorICBwW2xlbl0gPSBteVpFUk9TOworCisgIC8qIHJlcGxhY2UgdmlzdWFsIHBhZGRpbmcgY2hhcmFjdGVyIGJ5IGJsYW5rcyBpbiBidWZmZXIgKi8KKyAgaWYgKHBhZCAhPSBDX0JMQU5LKQorICAgIHsKKyAgICAgIGludCBpOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHArKykKKwl7CisJICBpZiAoKHVuc2lnbmVkIGxvbmcpQ2hhck9mKCpwKSA9PSBDaENoYXJPZihwYWQpCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkgICAgICAmJiBwLT5jaGFyc1sxXSA9PSAwCisjZW5kaWYKKwkgICAgKQorCSAgICAqcCA9IG15QkxBTks7CisJfQorICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBTeW5jaHJvbml6ZV9CdWZmZXIoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBJZiB0aGVyZSB3YXMgYSBjaGFuZ2UsIGNvcHkgdGhlIGNvbnRlbnQgb2YgdGhlCit8ICAgICAgICAgICAgICAgICAgICB3aW5kb3cgaW50byB0aGUgYnVmZmVyLCBzbyB0aGUgYnVmZmVyIGlzIHN5bmNocm9uaXplZAorfCAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgd2luZG93cyBjb250ZW50LiBXZSBoYXZlIHRvIGluZGljYXRlIHRoYXQgdGhlCit8ICAgICAgICAgICAgICAgICAgICBidWZmZXIgbmVlZHMgdmFsaWRhdGlvbiBkdWUgdG8gdGhlIGNoYW5nZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgdm9pZAorU3luY2hyb25pemVfQnVmZmVyKEZPUk0gKmZvcm0pCit7CisgIGlmIChmb3JtLT5zdGF0dXMgJiBfV0lORE9XX01PRElGSUVEKQorICAgIHsKKyAgICAgIGZvcm0tPnN0YXR1cyAmPSB+X1dJTkRPV19NT0RJRklFRDsKKyAgICAgIGZvcm0tPnN0YXR1cyB8PSBfRkNIRUNLX1JFUVVJUkVEOworICAgICAgV2luZG93X1RvX0J1ZmZlcihmb3JtLT53LCBmb3JtLT5jdXJyZW50KTsKKyAgICAgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgRmllbGRfR3Jvd24oIEZJRUxEICpmaWVsZCwgaW50IGFtb3VudCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBncm93YWJsZSBkeW5hbWljIGZpZWxkcworfCAgICAgICAgICAgICAgICAgICAgb25seS4gSXQgaGFzIHRvIGluY3JlYXNlIHRoZSBidWZmZXJzIGFuZCB0byBhbGxvY2F0ZQorfCAgICAgICAgICAgICAgICAgICAgYSBuZXcgd2luZG93IGZvciB0aGlzIGZpZWxkLgorfCAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNpZGUgZWZmZWN0IHRvIHNldCBhIG5ldworfCAgICAgICAgICAgICAgICAgICAgZmllbGQtYnVmZmVyIHBvaW50ZXIsIHRoZSBkY29scyBhbmQgZHJvd3MgdmFsdWVzCit8ICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGEgbmV3IGN1cnJlbnQgV2luZG93IGZvciB0aGUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgICAtIGZpZWxkIHN1Y2Nlc3NmdWxseSBpbmNyZWFzZWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgIC0gdGhlcmUgd2FzIHNvbWUgZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorRmllbGRfR3Jvd24oRklFTEQgKmZpZWxkLCBpbnQgYW1vdW50KQoreworICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgIGlmIChmaWVsZCAmJiBHcm93YWJsZShmaWVsZCkpCisgICAgeworICAgICAgYm9vbCBzaW5nbGVfbGluZV9maWVsZCA9IFNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKTsKKyAgICAgIGludCBvbGRfYnVmbGVuID0gQnVmZmVyX0xlbmd0aChmaWVsZCk7CisgICAgICBpbnQgbmV3X2J1ZmxlbjsKKyAgICAgIGludCBvbGRfZGNvbHMgPSBmaWVsZC0+ZGNvbHM7CisgICAgICBpbnQgb2xkX2Ryb3dzID0gZmllbGQtPmRyb3dzOworICAgICAgRklFTERfQ0VMTCAqb2xkYnVmID0gZmllbGQtPmJ1ZjsKKyAgICAgIEZJRUxEX0NFTEwgKm5ld2J1ZjsKKworICAgICAgaW50IGdyb3d0aDsKKyAgICAgIEZPUk0gKmZvcm0gPSBmaWVsZC0+Zm9ybTsKKyAgICAgIGJvb2wgbmVlZF92aXN1YWxfdXBkYXRlID0gKChmb3JtICE9IChGT1JNICopMCkgJiYKKwkJCQkgKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpICYmCisJCQkJIChmb3JtLT5jdXJyZW50ID09IGZpZWxkKSk7CisKKyAgICAgIGlmIChuZWVkX3Zpc3VhbF91cGRhdGUpCisJU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworCisgICAgICBpZiAoc2luZ2xlX2xpbmVfZmllbGQpCisJeworCSAgZ3Jvd3RoID0gZmllbGQtPmNvbHMgKiBhbW91bnQ7CisJICBpZiAoZmllbGQtPm1heGdyb3cpCisJICAgIGdyb3d0aCA9IE1pbmltdW0oZmllbGQtPm1heGdyb3cgLSBmaWVsZC0+ZGNvbHMsIGdyb3d0aCk7CisJICBmaWVsZC0+ZGNvbHMgKz0gZ3Jvd3RoOworCSAgaWYgKGZpZWxkLT5kY29scyA9PSBmaWVsZC0+bWF4Z3JvdykKKwkgICAgZmllbGQtPnN0YXR1cyAmPSB+X01BWV9HUk9XOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBncm93dGggPSAoZmllbGQtPnJvd3MgKyBmaWVsZC0+bnJvdykgKiBhbW91bnQ7CisJICBpZiAoZmllbGQtPm1heGdyb3cpCisJICAgIGdyb3d0aCA9IE1pbmltdW0oZmllbGQtPm1heGdyb3cgLSBmaWVsZC0+ZHJvd3MsIGdyb3d0aCk7CisJICBmaWVsZC0+ZHJvd3MgKz0gZ3Jvd3RoOworCSAgaWYgKGZpZWxkLT5kcm93cyA9PSBmaWVsZC0+bWF4Z3JvdykKKwkgICAgZmllbGQtPnN0YXR1cyAmPSB+X01BWV9HUk9XOworCX0KKyAgICAgIC8qIGRyb3dzLCBkY29scyBjaGFuZ2VkLCBzbyB3ZSBnZXQgcmVhbGx5IHRoZSBuZXcgYnVmZmVyIGxlbmd0aCAqLworICAgICAgbmV3X2J1ZmxlbiA9IEJ1ZmZlcl9MZW5ndGgoZmllbGQpOworICAgICAgbmV3YnVmID0gKEZJRUxEX0NFTEwgKiltYWxsb2MoVG90YWxfQnVmZmVyX1NpemUoZmllbGQpKTsKKyAgICAgIGlmICghbmV3YnVmKQorCXsKKwkgIC8qIHJlc3RvcmUgdG8gcHJldmlvdXMgc3RhdGUgKi8KKwkgIGZpZWxkLT5kY29scyA9IG9sZF9kY29sczsKKwkgIGZpZWxkLT5kcm93cyA9IG9sZF9kcm93czsKKwkgIGlmICgoc2luZ2xlX2xpbmVfZmllbGQgJiYgKGZpZWxkLT5kY29scyAhPSBmaWVsZC0+bWF4Z3JvdykpIHx8CisJICAgICAgKCFzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRyb3dzICE9IGZpZWxkLT5tYXhncm93KSkpCisJICAgIGZpZWxkLT5zdGF0dXMgfD0gX01BWV9HUk9XOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBDb3B5IGFsbCB0aGUgYnVmZmVycy4gIFRoaXMgaXMgdGhlIHJlYXNvbiB3aHkgd2UgY2FuJ3QganVzdCB1c2UKKwkgICAqIHJlYWxsb2MoKS4KKwkgICAqLworCSAgaW50IGksIGo7CisJICBGSUVMRF9DRUxMICpvbGRfYnA7CisJICBGSUVMRF9DRUxMICpuZXdfYnA7CisKKwkgIHJlc3VsdCA9IFRSVUU7CS8qIGFsbG93IHNoYXJpbmcgb2YgcmVjb3Zlcnkgb24gZmFpbHVyZSAqLworCisJICBUKChUX0NSRUFURSgiZmllbGRjZWxsICVwIiksIG5ld2J1ZikpOworCSAgZmllbGQtPmJ1ZiA9IG5ld2J1ZjsKKwkgIGZvciAoaSA9IDA7IGkgPD0gZmllbGQtPm5idWY7IGkrKykKKwkgICAgeworCSAgICAgIG5ld19icCA9IEFkZHJlc3NfT2ZfTnRoX0J1ZmZlcihmaWVsZCwgaSk7CisJICAgICAgb2xkX2JwID0gb2xkYnVmICsgaSAqICgxICsgb2xkX2J1Zmxlbik7CisJICAgICAgZm9yIChqID0gMDsgaiA8IG9sZF9idWZsZW47ICsraikKKwkJbmV3X2JwW2pdID0gb2xkX2JwW2pdOworCSAgICAgIHdoaWxlIChqIDwgbmV3X2J1ZmxlbikKKwkJbmV3X2JwW2orK10gPSBteUJMQU5LOworCSAgICAgIG5ld19icFtuZXdfYnVmbGVuXSA9IG15WkVST1M7CisJICAgIH0KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUICYmIE5DVVJTRVNfRVhUX0ZVTkNTCisJICBpZiAod3Jlc2l6ZShmaWVsZC0+d29ya2luZywgMSwgQnVmZmVyX0xlbmd0aChmaWVsZCkgKyAxKSA9PSBFUlIpCisJICAgIHJlc3VsdCA9IEZBTFNFOworI2VuZGlmCisKKwkgIGlmIChuZWVkX3Zpc3VhbF91cGRhdGUgJiYgcmVzdWx0KQorCSAgICB7CisJICAgICAgV0lORE9XICpuZXdfd2luZG93ID0gbmV3cGFkKGZpZWxkLT5kcm93cywgZmllbGQtPmRjb2xzKTsKKworCSAgICAgIGlmIChuZXdfd2luZG93ICE9IDApCisJCXsKKwkJICBhc3NlcnQoZm9ybSAhPSAoRk9STSAqKTApOworCQkgIGlmIChmb3JtLT53KQorCQkgICAgZGVsd2luKGZvcm0tPncpOworCQkgIGZvcm0tPncgPSBuZXdfd2luZG93OworCQkgIFNldF9GaWVsZF9XaW5kb3dfQXR0cmlidXRlcyhmaWVsZCwgZm9ybS0+dyk7CisJCSAgd2VyYXNlKGZvcm0tPncpOworCQkgIEJ1ZmZlcl9Ub19XaW5kb3coZmllbGQsIGZvcm0tPncpOworCQkgIHVudG91Y2h3aW4oZm9ybS0+dyk7CisJCSAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworCQl9CisJICAgICAgZWxzZQorCQlyZXN1bHQgPSBGQUxTRTsKKwkgICAgfQorCisJICBpZiAocmVzdWx0KQorCSAgICB7CisJICAgICAgZnJlZShvbGRidWYpOworCSAgICAgIC8qIHJlZmxlY3QgY2hhbmdlcyBpbiBsaW5rZWQgZmllbGRzICovCisJICAgICAgaWYgKGZpZWxkICE9IGZpZWxkLT5saW5rKQorCQl7CisJCSAgRklFTEQgKmxpbmtlZF9maWVsZDsKKworCQkgIGZvciAobGlua2VkX2ZpZWxkID0gZmllbGQtPmxpbms7CisJCSAgICAgICBsaW5rZWRfZmllbGQgIT0gZmllbGQ7CisJCSAgICAgICBsaW5rZWRfZmllbGQgPSBsaW5rZWRfZmllbGQtPmxpbmspCisJCSAgICB7CisJCSAgICAgIGxpbmtlZF9maWVsZC0+YnVmID0gZmllbGQtPmJ1ZjsKKwkJICAgICAgbGlua2VkX2ZpZWxkLT5kcm93cyA9IGZpZWxkLT5kcm93czsKKwkJICAgICAgbGlua2VkX2ZpZWxkLT5kY29scyA9IGZpZWxkLT5kY29sczsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiByZXN0b3JlIG9sZCBzdGF0ZSAqLworCSAgICAgIGZpZWxkLT5kY29scyA9IG9sZF9kY29sczsKKwkgICAgICBmaWVsZC0+ZHJvd3MgPSBvbGRfZHJvd3M7CisJICAgICAgZmllbGQtPmJ1ZiA9IG9sZGJ1ZjsKKwkgICAgICBpZiAoKHNpbmdsZV9saW5lX2ZpZWxkICYmCisJCSAgIChmaWVsZC0+ZGNvbHMgIT0gZmllbGQtPm1heGdyb3cpKSB8fAorCQkgICghc2luZ2xlX2xpbmVfZmllbGQgJiYKKwkJICAgKGZpZWxkLT5kcm93cyAhPSBmaWVsZC0+bWF4Z3JvdykpKQorCQlmaWVsZC0+c3RhdHVzIHw9IF9NQVlfR1JPVzsKKwkgICAgICBmcmVlKG5ld2J1Zik7CisJICAgIH0KKwl9CisgICAgfQorICByZXR1cm4gKHJlc3VsdCk7Cit9CisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IEZpZWxkX2VuY2xvc2VzKEZJRUxEICpmaWVsZCwgaW50IHJ5LCBpbnQgcngpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBpZiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgbGllIHdpdGhpbiB0aGUgZ2l2ZW4gZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gZm9ybSBoYXMgbm8gY3VycmVudCBmaWVsZCBvcgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC13aW5kb3cKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGaWVsZF9lbmNsb3NlcyhGSUVMRCAqZmllbGQsIGludCByeSwgaW50IHJ4KQoreworICBUKChUX0NBTExFRCgiRmllbGRfZW5jbG9zZXMoJXApIiksIGZpZWxkKSk7CisgIGlmIChmaWVsZCAhPSAwCisgICAgICAmJiBmaWVsZC0+ZnJvdyA8PSByeQorICAgICAgJiYgKGZpZWxkLT5mcm93ICsgZmllbGQtPnJvd3MpID4gcnkKKyAgICAgICYmIGZpZWxkLT5mY29sIDw9IHJ4CisgICAgICAmJiAoZmllbGQtPmZjb2wgKyBmaWVsZC0+Y29scykgPiByeCkKKyAgICB7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorICBSRVRVUk4oRV9JTlZBTElEX0ZJRUxEKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSB3aW5kb3cgZm9yIHRoZSBjdXJyZW50Cit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCB0byBiZSBpbiBzeW5jLiB3aXRoIHRoZSBjdXJyb3cgYW5kIGN1cmNvbAorfCAgICAgICAgICAgICAgICAgICAgdmFsdWVzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgZm9ybSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAtIGZvcm0gaGFzIG5vIGN1cnJlbnQgZmllbGQgb3IKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtd2luZG93CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZDsKKyAgV0lORE9XICpmb3Jtd2luOworCisgIGlmICghZm9ybSkKKyAgICByZXR1cm4gKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoIWZvcm0tPncgfHwgIWZvcm0tPmN1cnJlbnQpCisgICAgcmV0dXJuIChFX1NZU1RFTV9FUlJPUik7CisKKyAgZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBmb3Jtd2luID0gR2V0X0Zvcm1fV2luZG93KGZvcm0pOworCisgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgaWYgKEhhc19JbnZpc2libGVfUGFydHMoZmllbGQpKQorICAgIHsKKyAgICAgIC8qIGluIHRoaXMgY2FzZSBmaWVsZHdpbiBpc24ndCBkZXJpdmVkIGZyb20gZm9ybXdpbiwgc28gd2UgaGF2ZQorICAgICAgICAgdG8gbW92ZSB0aGUgY3Vyc29yIGluIGZvcm13aW4gYnkgaGFuZC4uLiAqLworICAgICAgd21vdmUoZm9ybXdpbiwKKwkgICAgZmllbGQtPmZyb3cgKyBmb3JtLT5jdXJyb3cgLSBmb3JtLT50b3Byb3csCisJICAgIGZpZWxkLT5mY29sICsgZm9ybS0+Y3VyY29sIC0gZm9ybS0+YmVnaW5jb2wpOworICAgICAgd2N1cnN5bmN1cChmb3Jtd2luKTsKKyAgICB9CisgIGVsc2UKKyAgICB3Y3Vyc3luY3VwKGZvcm0tPncpOworICByZXR1cm4gKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUHJvcGFnYXRlIHRoZSBjaGFuZ2VzIGluIHRoZSBmaWVsZHMgd2luZG93IHRvIHRoZQorfCAgICAgICAgICAgICAgICAgICAgd2luZG93IG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgZm9ybSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAtIGdlbmVyYWwgZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFdJTkRPVyAqZm9ybXdpbjsKKyAgRklFTEQgKmZpZWxkOworCisgIFQoKFRfQ0FMTEVEKCJfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisKKyAgaWYgKCFmb3JtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCFmb3JtLT53IHx8ICFmb3JtLT5jdXJyZW50KQorICAgIFJFVFVSTihFX1NZU1RFTV9FUlJPUik7CisKKyAgZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBmb3Jtd2luID0gR2V0X0Zvcm1fV2luZG93KGZvcm0pOworCisgIGlmIChmaWVsZC0+b3B0cyAmIE9fUFVCTElDKQorICAgIHsKKyAgICAgIGlmIChJc19TY3JvbGxfRmllbGQoZmllbGQpKQorCXsKKwkgIC8qIEFnYWluLCBpbiB0aGlzIGNhc2UgdGhlIGZpZWxkd2luIGlzbid0IGRlcml2ZWQgZnJvbSBmb3Jtd2luLAorCSAgICAgc28gd2UgaGF2ZSB0byBwZXJmb3JtIGEgY29weSBvcGVyYXRpb24uICovCisJICBpZiAoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpKQorCSAgICB7CisJICAgICAgLyogaG9yaXpvbnRhbCBzY3JvbGxpbmcgKi8KKwkgICAgICBpZiAoZm9ybS0+Y3VyY29sIDwgZm9ybS0+YmVnaW5jb2wpCisJCWZvcm0tPmJlZ2luY29sID0gZm9ybS0+Y3VyY29sOworCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChmb3JtLT5jdXJjb2wgPj0gKGZvcm0tPmJlZ2luY29sICsgZmllbGQtPmNvbHMpKQorCQkgICAgZm9ybS0+YmVnaW5jb2wgPSBmb3JtLT5jdXJjb2wgLSBmaWVsZC0+Y29scyArIDE7CisJCX0KKwkgICAgICBjb3B5d2luKGZvcm0tPncsCisJCSAgICAgIGZvcm13aW4sCisJCSAgICAgIDAsCisJCSAgICAgIGZvcm0tPmJlZ2luY29sLAorCQkgICAgICBmaWVsZC0+ZnJvdywKKwkJICAgICAgZmllbGQtPmZjb2wsCisJCSAgICAgIGZpZWxkLT5mcm93LAorCQkgICAgICBmaWVsZC0+Y29scyArIGZpZWxkLT5mY29sIC0gMSwKKwkJICAgICAgMCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIEEgbXVsdGktbGluZSwgaS5lLiB2ZXJ0aWNhbCBzY3JvbGxpbmcgZmllbGQgKi8KKwkgICAgICBpbnQgcm93X2FmdGVyX2JvdHRvbSwgZmlyc3RfbW9kaWZpZWRfcm93LCBmaXJzdF91bm1vZGlmaWVkX3JvdzsKKworCSAgICAgIGlmIChmaWVsZC0+ZHJvd3MgPiBmaWVsZC0+cm93cykKKwkJeworCQkgIHJvd19hZnRlcl9ib3R0b20gPSBmb3JtLT50b3Byb3cgKyBmaWVsZC0+cm93czsKKwkJICBpZiAoZm9ybS0+Y3Vycm93IDwgZm9ybS0+dG9wcm93KQorCQkgICAgeworCQkgICAgICBmb3JtLT50b3Byb3cgPSBmb3JtLT5jdXJyb3c7CisJCSAgICAgIGZpZWxkLT5zdGF0dXMgfD0gX05FV1RPUDsKKwkJICAgIH0KKwkJICBpZiAoZm9ybS0+Y3Vycm93ID49IHJvd19hZnRlcl9ib3R0b20pCisJCSAgICB7CisJCSAgICAgIGZvcm0tPnRvcHJvdyA9IGZvcm0tPmN1cnJvdyAtIGZpZWxkLT5yb3dzICsgMTsKKwkJICAgICAgZmllbGQtPnN0YXR1cyB8PSBfTkVXVE9QOworCQkgICAgfQorCQkgIGlmIChmaWVsZC0+c3RhdHVzICYgX05FV1RPUCkKKwkJICAgIHsKKwkJICAgICAgLyogbWVhbnMgd2UgaGF2ZSB0byBjb3B5IHdob2xlIHJhbmdlICovCisJCSAgICAgIGZpcnN0X21vZGlmaWVkX3JvdyA9IGZvcm0tPnRvcHJvdzsKKwkJICAgICAgZmlyc3RfdW5tb2RpZmllZF9yb3cgPSBmaXJzdF9tb2RpZmllZF9yb3cgKyBmaWVsZC0+cm93czsKKwkJICAgICAgZmllbGQtPnN0YXR1cyAmPSB+X05FV1RPUDsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIC8qIHdlIHRyeSB0byBvcHRpbWl6ZSA6IGZpbmRpbmcgdGhlIHJhbmdlIG9mIHRvdWNoZWQKKwkJICAgICAgICAgbGluZXMgKi8KKwkJICAgICAgZmlyc3RfbW9kaWZpZWRfcm93ID0gZm9ybS0+dG9wcm93OworCQkgICAgICB3aGlsZSAoZmlyc3RfbW9kaWZpZWRfcm93IDwgcm93X2FmdGVyX2JvdHRvbSkKKwkJCXsKKwkJCSAgaWYgKGlzX2xpbmV0b3VjaGVkKGZvcm0tPncsIGZpcnN0X21vZGlmaWVkX3JvdykpCisJCQkgICAgYnJlYWs7CisJCQkgIGZpcnN0X21vZGlmaWVkX3JvdysrOworCQkJfQorCQkgICAgICBmaXJzdF91bm1vZGlmaWVkX3JvdyA9IGZpcnN0X21vZGlmaWVkX3JvdzsKKwkJICAgICAgd2hpbGUgKGZpcnN0X3VubW9kaWZpZWRfcm93IDwgcm93X2FmdGVyX2JvdHRvbSkKKwkJCXsKKwkJCSAgaWYgKCFpc19saW5ldG91Y2hlZChmb3JtLT53LCBmaXJzdF91bm1vZGlmaWVkX3JvdykpCisJCQkgICAgYnJlYWs7CisJCQkgIGZpcnN0X3VubW9kaWZpZWRfcm93Kys7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBmaXJzdF9tb2RpZmllZF9yb3cgPSBmb3JtLT50b3Byb3c7CisJCSAgZmlyc3RfdW5tb2RpZmllZF9yb3cgPSBmaXJzdF9tb2RpZmllZF9yb3cgKyBmaWVsZC0+cm93czsKKwkJfQorCSAgICAgIGlmIChmaXJzdF91bm1vZGlmaWVkX3JvdyAhPSBmaXJzdF9tb2RpZmllZF9yb3cpCisJCWNvcHl3aW4oZm9ybS0+dywKKwkJCWZvcm13aW4sCisJCQlmaXJzdF9tb2RpZmllZF9yb3csCisJCQkwLAorCQkJZmllbGQtPmZyb3cgKyBmaXJzdF9tb2RpZmllZF9yb3cgLSBmb3JtLT50b3Byb3csCisJCQlmaWVsZC0+ZmNvbCwKKwkJCWZpZWxkLT5mcm93ICsgZmlyc3RfdW5tb2RpZmllZF9yb3cgLSBmb3JtLT50b3Byb3cgLSAxLAorCQkJZmllbGQtPmNvbHMgKyBmaWVsZC0+ZmNvbCAtIDEsCisJCQkwKTsKKwkgICAgfQorCSAgd3N5bmN1cChmb3Jtd2luKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogaWYgdGhlIGZpZWxkLXdpbmRvdyBpcyBzaW1wbHkgYSBkZXJpdmVkIHdpbmRvdywgaS5lLiBjb250YWlucyBubworCSAgICogaW52aXNpYmxlIHBhcnRzLCB0aGUgd2hvbGUgdGhpbmcgaXMgdHJpdmlhbAorCSAgICovCisJICB3c3luY3VwKGZvcm0tPncpOworCX0KKyAgICB9CisgIHVudG91Y2h3aW4oZm9ybS0+dyk7CisgIHJldHVybkNvZGUoX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yKGZvcm0pKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBQZXJmb3JtX0p1c3RpZmljYXRpb24oCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1cgKiB3aW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBPdXRwdXQgZmllbGQgd2l0aCByZXF1ZXN0ZWQganVzdGlmaWNhdGlvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitQZXJmb3JtX0p1c3RpZmljYXRpb24oRklFTEQgKmZpZWxkLCBXSU5ET1cgKndpbikKK3sKKyAgRklFTERfQ0VMTCAqYnA7CisgIGludCBsZW47CisgIGludCBjb2wgPSAwOworCisgIGJwID0gR2V0X1N0YXJ0X09mX0RhdGEoZmllbGQtPmJ1ZiwgQnVmZmVyX0xlbmd0aChmaWVsZCkpOworICBsZW4gPSAoaW50KShBZnRlcl9FbmRfT2ZfRGF0YShmaWVsZC0+YnVmLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSkgLSBicCk7CisKKyAgaWYgKGxlbiA+IDApCisgICAgeworICAgICAgYXNzZXJ0KHdpbiAmJiAoZmllbGQtPmRyb3dzID09IDEpICYmIChmaWVsZC0+ZGNvbHMgPT0gZmllbGQtPmNvbHMpKTsKKworICAgICAgc3dpdGNoIChmaWVsZC0+anVzdCkKKwl7CisJY2FzZSBKVVNUSUZZX0xFRlQ6CisJICBicmVhazsKKwljYXNlIEpVU1RJRllfQ0VOVEVSOgorCSAgY29sID0gKGZpZWxkLT5jb2xzIC0gbGVuKSAvIDI7CisJICBicmVhazsKKwljYXNlIEpVU1RJRllfUklHSFQ6CisJICBjb2wgPSBmaWVsZC0+Y29scyAtIGxlbjsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisKKyAgICAgIHdtb3ZlKHdpbiwgMCwgY29sKTsKKyAgICAgIG15QURETlNUUih3aW4sIGJwLCBsZW4pOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBVbmRvX0p1c3RpZmljYXRpb24oCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1cgKiB3aW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEaXNwbGF5IGZpZWxkIHdpdGhvdXQgYW55IGp1c3RpZmljYXRpb24sIGkuZS4KK3wgICAgICAgICAgICAgICAgICAgIGxlZnQganVzdGlmaWVkCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK1VuZG9fSnVzdGlmaWNhdGlvbihGSUVMRCAqZmllbGQsIFdJTkRPVyAqd2luKQoreworICBGSUVMRF9DRUxMICpicDsKKyAgaW50IGxlbjsKKworICBicCA9IEdldF9TdGFydF9PZl9EYXRhKGZpZWxkLT5idWYsIEJ1ZmZlcl9MZW5ndGgoZmllbGQpKTsKKyAgbGVuID0gKGludCkoQWZ0ZXJfRW5kX09mX0RhdGEoZmllbGQtPmJ1ZiwgQnVmZmVyX0xlbmd0aChmaWVsZCkpIC0gYnApOworCisgIGlmIChsZW4gPiAwKQorICAgIHsKKyAgICAgIGFzc2VydCh3aW4pOworICAgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICAgIG15QURETlNUUih3aW4sIGJwLCBsZW4pOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19DaGFyKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKiB0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUFyZ3VtZW50ICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGVyZm9ybSBhIHNpbmdsZSBjaGFyYWN0ZXIgY2hlY2sgZm9yIGNoYXJhY3RlciBjaAorfCAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBmaWVsZHR5cGUgaW5zdGFuY2UuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgICAgICAgICAgIC0gQ2hhcmFjdGVyIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgIC0gQ2hhcmFjdGVyIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfQ2hhcihGSUVMRFRZUEUgKnR5cCwgaW50IGNoLCBUeXBlQXJndW1lbnQgKmFyZ3ApCit7CisgIGlmICh0eXApCisgICAgeworICAgICAgaWYgKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKQorCXsKKwkgIGFzc2VydChhcmdwKTsKKwkgIHJldHVybiAoCisJCSAgIENoZWNrX0NoYXIodHlwLT5sZWZ0LCBjaCwgYXJncC0+bGVmdCkgfHwKKwkJICAgQ2hlY2tfQ2hhcih0eXAtPnJpZ2h0LCBjaCwgYXJncC0+cmlnaHQpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHR5cC0+Y2NoZWNrKQorCSAgICByZXR1cm4gdHlwLT5jY2hlY2soY2gsICh2b2lkICopYXJncCk7CisJfQorICAgIH0KKyAgcmV0dXJuICghaXNjbnRybChVQ2hhcihjaCkpID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IERpc3BsYXlfT3JfRXJhc2VfRmllbGQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkVyYXNlRmxhZykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZSBhIHN1YndpbmRvdyBmb3IgdGhlIGZpZWxkIGFuZCBkaXNwbGF5IHRoZQorfCAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGNvbnRlbnRzIChhcHBseSBqdXN0aWZpY2F0aW9uIGlmIHJlcXVpcmVkKQorfCAgICAgICAgICAgICAgICAgICAgb3Igc2ltcGx5IGVyYXNlIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgLSBzb21lIGVycm9yICh0eXBpY2FsIG5vIG1lbW9yeSkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitEaXNwbGF5X09yX0VyYXNlX0ZpZWxkKEZJRUxEICpmaWVsZCwgYm9vbCBiRXJhc2VGbGFnKQoreworICBXSU5ET1cgKndpbjsKKyAgV0lORE9XICpmd2luOworCisgIGlmICghZmllbGQpCisgICAgcmV0dXJuIEVfU1lTVEVNX0VSUk9SOworCisgIGZ3aW4gPSBHZXRfRm9ybV9XaW5kb3coZmllbGQtPmZvcm0pOworICB3aW4gPSBkZXJ3aW4oZndpbiwKKwkgICAgICAgZmllbGQtPnJvd3MsIGZpZWxkLT5jb2xzLCBmaWVsZC0+ZnJvdywgZmllbGQtPmZjb2wpOworCisgIGlmICghd2luKQorICAgIHJldHVybiBFX1NZU1RFTV9FUlJPUjsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmaWVsZC0+b3B0cyAmIE9fVklTSUJMRSkKKwlTZXRfRmllbGRfV2luZG93X0F0dHJpYnV0ZXMoZmllbGQsIHdpbik7CisgICAgICBlbHNlCisJd2F0dHJzZXQod2luLCBXSU5ET1dfQVRUUlMoZndpbikpOworICAgICAgd2VyYXNlKHdpbik7CisgICAgfQorCisgIGlmICghYkVyYXNlRmxhZykKKyAgICB7CisgICAgICBpZiAoZmllbGQtPm9wdHMgJiBPX1BVQkxJQykKKwl7CisJICBpZiAoSnVzdGlmaWNhdGlvbl9BbGxvd2VkKGZpZWxkKSkKKwkgICAgUGVyZm9ybV9KdXN0aWZpY2F0aW9uKGZpZWxkLCB3aW4pOworCSAgZWxzZQorCSAgICBCdWZmZXJfVG9fV2luZG93KGZpZWxkLCB3aW4pOworCX0KKyAgICAgIGZpZWxkLT5zdGF0dXMgJj0gfl9ORVdUT1A7CisgICAgfQorICB3c3luY3VwKHdpbik7CisgIGRlbHdpbih3aW4pOworICByZXR1cm4gRV9PSzsKK30KKworLyogTWFjcm9zIHRvIHByZXNldCB0aGUgYkVyYXNlRmxhZyAqLworI2RlZmluZSBEaXNwbGF5X0ZpZWxkKGZpZWxkKSBEaXNwbGF5X09yX0VyYXNlX0ZpZWxkKGZpZWxkLEZBTFNFKQorI2RlZmluZSBFcmFzZV9GaWVsZChmaWVsZCkgICBEaXNwbGF5X09yX0VyYXNlX0ZpZWxkKGZpZWxkLFRSVUUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBTeW5jaHJvbml6ZV9GaWVsZChGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3luY2hyb25pemUgdGhlIHdpbmRvd3MgY29udGVudCB3aXRoIHRoZSB2YWx1ZSBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgIC0gaW52YWxpZCBmaWVsZCBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgIC0gc29tZSBzZXZlcmUgYmFzaWMgZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitTeW5jaHJvbml6ZV9GaWVsZChGSUVMRCAqZmllbGQpCit7CisgIEZPUk0gKmZvcm07CisgIGludCByZXMgPSBFX09LOworCisgIGlmICghZmllbGQpCisgICAgcmV0dXJuIChFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCgoZm9ybSA9IGZpZWxkLT5mb3JtKSAhPSAoRk9STSAqKTApCisgICAgICAmJiBGaWVsZF9SZWFsbHlfQXBwZWFycyhmaWVsZCkpCisgICAgeworICAgICAgaWYgKGZpZWxkID09IGZvcm0tPmN1cnJlbnQpCisJeworCSAgZm9ybS0+Y3Vycm93ID0gZm9ybS0+Y3VyY29sID0gZm9ybS0+dG9wcm93ID0gZm9ybS0+YmVnaW5jb2wgPSAwOworCSAgd2VyYXNlKGZvcm0tPncpOworCisJICBpZiAoKGZpZWxkLT5vcHRzICYgT19QVUJMSUMpICYmIEp1c3RpZmljYXRpb25fQWxsb3dlZChmaWVsZCkpCisJICAgIFVuZG9fSnVzdGlmaWNhdGlvbihmaWVsZCwgZm9ybS0+dyk7CisJICBlbHNlCisJICAgIEJ1ZmZlcl9Ub19XaW5kb3coZmllbGQsIGZvcm0tPncpOworCisJICBmaWVsZC0+c3RhdHVzIHw9IF9ORVdUT1A7CisJICByZXMgPSBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKGZvcm0pOworCX0KKyAgICAgIGVsc2UKKwlyZXMgPSBEaXNwbGF5X0ZpZWxkKGZpZWxkKTsKKyAgICB9CisgIGZpZWxkLT5zdGF0dXMgfD0gX0NIQU5HRUQ7CisgIHJldHVybiAocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFN5bmNocm9uaXplX0xpbmtlZF9GaWVsZHMoRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFByb3BhZ2F0ZSB0aGUgU3luY2hyb25pemVfRmllbGQgZnVuY3Rpb24gdG8gYWxsIGxpbmtlZAorfCAgICAgICAgICAgICAgICAgICAgZmllbGRzLiBUaGUgZmlyc3QgZXJyb3IgdGhhdCBvY2N1cnMgaW4gdGhlIHNlcXVlbmNlCit8ICAgICAgICAgICAgICAgICAgICBvZiB1cGRhdGVzIGlzIHRoZSByZXR1cm4gdmFsdWUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgICAtIGludmFsaWQgZmllbGQgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgICAtIHNvbWUgc2V2ZXJlIGJhc2ljIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorU3luY2hyb25pemVfTGlua2VkX0ZpZWxkcyhGSUVMRCAqZmllbGQpCit7CisgIEZJRUxEICpsaW5rZWRfZmllbGQ7CisgIGludCByZXMgPSBFX09LOworICBpbnQgc3luY3JlczsKKworICBpZiAoIWZpZWxkKQorICAgIHJldHVybiAoRV9CQURfQVJHVU1FTlQpOworCisgIGlmICghZmllbGQtPmxpbmspCisgICAgcmV0dXJuIChFX1NZU1RFTV9FUlJPUik7CisKKyAgZm9yIChsaW5rZWRfZmllbGQgPSBmaWVsZC0+bGluazsKKyAgICAgICBsaW5rZWRfZmllbGQgIT0gZmllbGQ7CisgICAgICAgbGlua2VkX2ZpZWxkID0gbGlua2VkX2ZpZWxkLT5saW5rKQorICAgIHsKKyAgICAgIGlmICgoKHN5bmNyZXMgPSBTeW5jaHJvbml6ZV9GaWVsZChsaW5rZWRfZmllbGQpKSAhPSBFX09LKSAmJgorCSAgKHJlcyA9PSBFX09LKSkKKwlyZXMgPSBzeW5jcmVzOworICAgIH0KKyAgcmV0dXJuIChyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcyhGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgSWYgYSBmaWVsZHMgdmlzdWFsIGF0dHJpYnV0ZXMgaGF2ZSBjaGFuZ2VkLCB0aGlzCit8ICAgICAgICAgICAgICAgICAgICByb3V0aW5lIGlzIGNhbGxlZCB0byBwcm9wYWdhdGUgdGhvc2UgY2hhbmdlcyB0byB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHNjcmVlbi4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgIC0gaW52YWxpZCBmaWVsZCBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgIC0gc29tZSBzZXZlcmUgYmFzaWMgZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcyhGSUVMRCAqZmllbGQpCit7CisgIEZPUk0gKmZvcm07CisgIGludCByZXMgPSBFX09LOworICBXSU5ET1cgKmZvcm13aW47CisKKyAgVCgoVF9DQUxMRUQoIl9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzKCVwKSIpLCBmaWVsZCkpOworCisgIGlmICghZmllbGQpCisgICAgcmV0dXJuQ29kZShFX0JBRF9BUkdVTUVOVCk7CisKKyAgQ0hFQ0tQT1MoZmllbGQtPmZvcm0pOworICBpZiAoKChmb3JtID0gZmllbGQtPmZvcm0pICE9IChGT1JNICopMCkKKyAgICAgICYmIEZpZWxkX1JlYWxseV9BcHBlYXJzKGZpZWxkKSkKKyAgICB7CisgICAgICBpZiAoZm9ybS0+Y3VycmVudCA9PSBmaWVsZCkKKwl7CisJICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisJICBTZXRfRmllbGRfV2luZG93X0F0dHJpYnV0ZXMoZmllbGQsIGZvcm0tPncpOworCSAgd2VyYXNlKGZvcm0tPncpOworCSAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworCisJICBpZiAoZmllbGQtPm9wdHMgJiBPX1BVQkxJQykKKwkgICAgeworCSAgICAgIGlmIChKdXN0aWZpY2F0aW9uX0FsbG93ZWQoZmllbGQpKQorCQlVbmRvX0p1c3RpZmljYXRpb24oZmllbGQsIGZvcm0tPncpOworCSAgICAgIGVsc2UKKwkJQnVmZmVyX1RvX1dpbmRvdyhmaWVsZCwgZm9ybS0+dyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGZvcm13aW4gPSBHZXRfRm9ybV9XaW5kb3coZm9ybSk7CisJICAgICAgY29weXdpbihmb3JtLT53LCBmb3Jtd2luLAorCQkgICAgICAwLCAwLAorCQkgICAgICBmaWVsZC0+ZnJvdywgZmllbGQtPmZjb2wsCisJCSAgICAgIGZpZWxkLT5yb3dzIC0gMSwgZmllbGQtPmNvbHMgLSAxLCAwKTsKKwkgICAgICB3c3luY3VwKGZvcm13aW4pOworCSAgICAgIEJ1ZmZlcl9Ub19XaW5kb3coZmllbGQsIGZvcm0tPncpOworCSAgICAgIGZpZWxkLT5zdGF0dXMgfD0gX05FV1RPUDsJCS8qIGZha2UgcmVmcmVzaCB0byBwYWludCBhbGwgKi8KKwkgICAgICBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKGZvcm0pOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlcyA9IERpc3BsYXlfRmllbGQoZmllbGQpOworCX0KKyAgICB9CisgIENIRUNLUE9TKGZvcm0pOworICByZXR1cm5Db2RlKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IF9uY19TeW5jaHJvbml6ZV9PcHRpb25zKEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRfT3B0aW9ucyBuZXdvcHRzKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgSWYgYSBmaWVsZHMgb3B0aW9ucyBoYXZlIGNoYW5nZWQsIHRoaXMgcm91dGluZSBpcworfCAgICAgICAgICAgICAgICAgICAgY2FsbGVkIHRvIHByb3BhZ2F0ZSB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBzY3JlZW4gYW5kCit8ICAgICAgICAgICAgICAgICAgICB0byByZWFsbHkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgICAtIGludmFsaWQgZmllbGQgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9DVVJSRU5UICAgICAgICAgICAtIGZpZWxkIGlzIHRoZSBjdXJyZW50IG9uZQorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgICAtIHNvbWUgc2V2ZXJlIGJhc2ljIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX1N5bmNocm9uaXplX09wdGlvbnMoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG5ld29wdHMpCit7CisgIEZpZWxkX09wdGlvbnMgb2xkb3B0czsKKyAgRmllbGRfT3B0aW9ucyBjaGFuZ2VkX29wdHM7CisgIEZPUk0gKmZvcm07CisgIGludCByZXMgPSBFX09LOworCisgIFQoKFRfQ0FMTEVEKCJfbmNfU3luY2hyb25pemVfT3B0aW9ucyglcCwlI3gpIiksIGZpZWxkLCBuZXdvcHRzKSk7CisKKyAgaWYgKCFmaWVsZCkKKyAgICByZXR1cm5Db2RlKEVfQkFEX0FSR1VNRU5UKTsKKworICBvbGRvcHRzID0gZmllbGQtPm9wdHM7CisgIGNoYW5nZWRfb3B0cyA9IG9sZG9wdHMgXiBuZXdvcHRzOworICBmaWVsZC0+b3B0cyA9IG5ld29wdHM7CisgIGZvcm0gPSBmaWVsZC0+Zm9ybTsKKworICBpZiAoZm9ybSkKKyAgICB7CisgICAgICBpZiAoZm9ybS0+Y3VycmVudCA9PSBmaWVsZCkKKwl7CisJICBmaWVsZC0+b3B0cyA9IG9sZG9wdHM7CisJICByZXR1cm5Db2RlKEVfQ1VSUkVOVCk7CisJfQorCisgICAgICBpZiAoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkKKwl7CisJICBpZiAoKGZvcm0tPmN1cnBhZ2UgPT0gZmllbGQtPnBhZ2UpKQorCSAgICB7CisJICAgICAgaWYgKGNoYW5nZWRfb3B0cyAmIE9fVklTSUJMRSkKKwkJeworCQkgIGlmIChuZXdvcHRzICYgT19WSVNJQkxFKQorCQkgICAgcmVzID0gRGlzcGxheV9GaWVsZChmaWVsZCk7CisJCSAgZWxzZQorCQkgICAgcmVzID0gRXJhc2VfRmllbGQoZmllbGQpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKChjaGFuZ2VkX29wdHMgJiBPX1BVQkxJQykgJiYKKwkJICAgICAgKG5ld29wdHMgJiBPX1ZJU0lCTEUpKQorCQkgICAgcmVzID0gRGlzcGxheV9GaWVsZChmaWVsZCk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKGNoYW5nZWRfb3B0cyAmIE9fU1RBVElDKQorICAgIHsKKyAgICAgIGJvb2wgc2luZ2xlX2xpbmVfZmllbGQgPSBTaW5nbGVfTGluZV9GaWVsZChmaWVsZCk7CisgICAgICBpbnQgcmVzMiA9IEVfT0s7CisKKyAgICAgIGlmIChuZXdvcHRzICYgT19TVEFUSUMpCisJeworCSAgLyogdGhlIGZpZWxkIGJlY29tZXMgbm93IHN0YXRpYyAqLworCSAgZmllbGQtPnN0YXR1cyAmPSB+X01BWV9HUk9XOworCSAgLyogaWYgYWN0dWFsbHkgd2UgaGF2ZSBubyBoaWRkZW4gY29sdW1ucywganVzdGlmaWNhdGlvbiBtYXkKKwkgICAgIG9jY3VyIGFnYWluICovCisJICBpZiAoc2luZ2xlX2xpbmVfZmllbGQgJiYKKwkgICAgICAoZmllbGQtPmNvbHMgPT0gZmllbGQtPmRjb2xzKSAmJgorCSAgICAgIChmaWVsZC0+anVzdCAhPSBOT19KVVNUSUZJQ0FUSU9OKSAmJgorCSAgICAgIEZpZWxkX1JlYWxseV9BcHBlYXJzKGZpZWxkKSkKKwkgICAgeworCSAgICAgIHJlczIgPSBEaXNwbGF5X0ZpZWxkKGZpZWxkKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBmaWVsZCBpcyBubyBsb25nZXIgc3RhdGljICovCisJICBpZiAoKGZpZWxkLT5tYXhncm93ID09IDApIHx8CisJICAgICAgKHNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZGNvbHMgPCBmaWVsZC0+bWF4Z3JvdykpIHx8CisJICAgICAgKCFzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRyb3dzIDwgZmllbGQtPm1heGdyb3cpKSkKKwkgICAgeworCSAgICAgIGZpZWxkLT5zdGF0dXMgfD0gX01BWV9HUk9XOworCSAgICAgIC8qIGEgZmllbGQgd2l0aCBqdXN0aWZpY2F0aW9uIG5vdyBjaGFuZ2VzIGl0cyBiZWhhdmlvciwKKwkgICAgICAgICBzbyB3ZSBtdXN0IHJlZGlzcGxheSBpdCAqLworCSAgICAgIGlmIChzaW5nbGVfbGluZV9maWVsZCAmJgorCQkgIChmaWVsZC0+anVzdCAhPSBOT19KVVNUSUZJQ0FUSU9OKSAmJgorCQkgIEZpZWxkX1JlYWxseV9BcHBlYXJzKGZpZWxkKSkKKwkJeworCQkgIHJlczIgPSBEaXNwbGF5X0ZpZWxkKGZpZWxkKTsKKwkJfQorCSAgICB9CisJfQorICAgICAgaWYgKHJlczIgIT0gRV9PSykKKwlyZXMgPSByZXMyOworICAgIH0KKworICByZXR1cm5Db2RlKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IF9uY19TZXRfQ3VycmVudF9GaWVsZChGT1JNICAqIGZvcm0sCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogbmV3ZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNYWtlIHRoZSBuZXdmaWVsZCB0aGUgbmV3IGN1cnJlbnQgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIG9yIGZpZWxkIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gc29tZSBzZXZlcmUgYmFzaWMgZXJyb3IKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgIC0gbm8gZmllbGRzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGZvcm0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfU2V0X0N1cnJlbnRfRmllbGQoRk9STSAqZm9ybSwgRklFTEQgKm5ld2ZpZWxkKQoreworICBGSUVMRCAqZmllbGQ7CisgIFdJTkRPVyAqbmV3X3dpbmRvdzsKKworICBUKChUX0NBTExFRCgiX25jX1NldF9DdXJyZW50X0ZpZWxkKCVwLCVwKSIpLCBmb3JtLCBuZXdmaWVsZCkpOworCisgIGlmICghZm9ybSB8fCAhbmV3ZmllbGQgfHwgIWZvcm0tPmN1cnJlbnQgfHwgKG5ld2ZpZWxkLT5mb3JtICE9IGZvcm0pKQorICAgIHJldHVybkNvZGUoRV9CQURfQVJHVU1FTlQpOworCisgIGlmICgoZm9ybS0+c3RhdHVzICYgX0lOX0RSSVZFUikpCisgICAgcmV0dXJuQ29kZShFX0JBRF9TVEFURSk7CisKKyAgaWYgKCEoZm9ybS0+ZmllbGQpKQorICAgIHJldHVybkNvZGUoRV9OT1RfQ09OTkVDVEVEKTsKKworICBmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgaWYgKChmaWVsZCAhPSBuZXdmaWVsZCkgfHwKKyAgICAgICEoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkpCisgICAgeworICAgICAgaWYgKChmb3JtLT53KSAmJgorCSAgKGZpZWxkLT5vcHRzICYgT19WSVNJQkxFKSAmJgorCSAgKGZpZWxkLT5mb3JtLT5jdXJwYWdlID09IGZpZWxkLT5wYWdlKSkKKwl7CisJICBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKGZvcm0pOworCSAgaWYgKGZpZWxkLT5vcHRzICYgT19QVUJMSUMpCisJICAgIHsKKwkgICAgICBpZiAoZmllbGQtPmRyb3dzID4gZmllbGQtPnJvd3MpCisJCXsKKwkJICBpZiAoZm9ybS0+dG9wcm93ID09IDApCisJCSAgICBmaWVsZC0+c3RhdHVzICY9IH5fTkVXVE9QOworCQkgIGVsc2UKKwkJICAgIGZpZWxkLT5zdGF0dXMgfD0gX05FV1RPUDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChKdXN0aWZpY2F0aW9uX0FsbG93ZWQoZmllbGQpKQorCQkgICAgeworCQkgICAgICBXaW5kb3dfVG9fQnVmZmVyKGZvcm0tPncsIGZpZWxkKTsKKwkJICAgICAgd2VyYXNlKGZvcm0tPncpOworCQkgICAgICBQZXJmb3JtX0p1c3RpZmljYXRpb24oZmllbGQsIGZvcm0tPncpOworCQkgICAgICB3c3luY3VwKGZvcm0tPncpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIGRlbHdpbihmb3JtLT53KTsKKwkgIGZvcm0tPncgPSAoV0lORE9XICopMDsKKwl9CisKKyAgICAgIGZpZWxkID0gbmV3ZmllbGQ7CisKKyAgICAgIGlmIChIYXNfSW52aXNpYmxlX1BhcnRzKGZpZWxkKSkKKwluZXdfd2luZG93ID0gbmV3cGFkKGZpZWxkLT5kcm93cywgZmllbGQtPmRjb2xzKTsKKyAgICAgIGVsc2UKKwluZXdfd2luZG93ID0gZGVyd2luKEdldF9Gb3JtX1dpbmRvdyhmb3JtKSwKKwkJCSAgICBmaWVsZC0+cm93cywgZmllbGQtPmNvbHMsIGZpZWxkLT5mcm93LCBmaWVsZC0+ZmNvbCk7CisKKyAgICAgIGlmICghbmV3X3dpbmRvdykKKwlyZXR1cm5Db2RlKEVfU1lTVEVNX0VSUk9SKTsKKworICAgICAgZm9ybS0+Y3VycmVudCA9IGZpZWxkOworCisgICAgICBpZiAoZm9ybS0+dykKKwlkZWx3aW4oZm9ybS0+dyk7CisgICAgICBmb3JtLT53ID0gbmV3X3dpbmRvdzsKKworICAgICAgZm9ybS0+c3RhdHVzICY9IH5fV0lORE9XX01PRElGSUVEOworICAgICAgU2V0X0ZpZWxkX1dpbmRvd19BdHRyaWJ1dGVzKGZpZWxkLCBmb3JtLT53KTsKKworICAgICAgaWYgKEhhc19JbnZpc2libGVfUGFydHMoZmllbGQpKQorCXsKKwkgIHdlcmFzZShmb3JtLT53KTsKKwkgIEJ1ZmZlcl9Ub19XaW5kb3coZmllbGQsIGZvcm0tPncpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoSnVzdGlmaWNhdGlvbl9BbGxvd2VkKGZpZWxkKSkKKwkgICAgeworCSAgICAgIHdlcmFzZShmb3JtLT53KTsKKwkgICAgICBVbmRvX0p1c3RpZmljYXRpb24oZmllbGQsIGZvcm0tPncpOworCSAgICAgIHdzeW5jdXAoZm9ybS0+dyk7CisJICAgIH0KKwl9CisKKyAgICAgIHVudG91Y2h3aW4oZm9ybS0+dyk7CisgICAgfQorCisgIGZvcm0tPmN1cnJvdyA9IGZvcm0tPmN1cmNvbCA9IGZvcm0tPnRvcHJvdyA9IGZvcm0tPmJlZ2luY29sID0gMDsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEludHJhLUZpZWxkIE5hdmlnYXRpb24gcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX05leHRfQ2hhcmFjdGVyKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIGZpZWxkLiBJbiBhIG11bHRpLWxpbmUKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIHRoaXMgd3JhcHMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gYXQgdGhlIHJpZ2h0bW9zdCBwb3NpdGlvbgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0lGTl9OZXh0X0NoYXJhY3RlcihGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBpbnQgc3RlcCA9IG15V0NXSURUSChmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9OZXh0X0NoYXJhY3RlciglcCkiKSwgZm9ybSkpOworICBpZiAoKGZvcm0tPmN1cmNvbCArPSBzdGVwKSA9PSBmaWVsZC0+ZGNvbHMpCisgICAgeworICAgICAgaWYgKCgrKyhmb3JtLT5jdXJyb3cpKSA9PSBmaWVsZC0+ZHJvd3MpCisJeworI2lmIEdST1dfSUZfTkFWSUdBVEUKKwkgIGlmICghU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpICYmIEZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgeworCSAgICAgIGZvcm0tPmN1cmNvbCA9IDA7CisJICAgICAgcmV0dXJuQ29kZShFX09LKTsKKwkgICAgfQorI2VuZGlmCisJICBmb3JtLT5jdXJyb3ctLTsKKyNpZiBHUk9XX0lGX05BVklHQVRFCisJICBpZiAoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpICYmIEZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgcmV0dXJuQ29kZShFX09LKTsKKyNlbmRpZgorCSAgZm9ybS0+Y3VyY29sIC09IHN0ZXA7CisJICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworCX0KKyAgICAgIGZvcm0tPmN1cmNvbCA9IDA7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX1ByZXZpb3VzX0NoYXJhY3RlcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpbiB0aGUgZmllbGQuIEluIGEKK3wgICAgICAgICAgICAgICAgICAgIG11bHRpLWxpbmUgZmllbGQgdGhpcyB3cmFwcyBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIGF0IHRoZSBsZWZ0bW9zdCBwb3NpdGlvbgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0lGTl9QcmV2aW91c19DaGFyYWN0ZXIoRk9STSAqZm9ybSkKK3sKKyAgaW50IGFtb3VudCA9IG15V0NXSURUSChmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCAtIDEpOworICBpbnQgb2xkY29sID0gZm9ybS0+Y3VyY29sOworCisgIFQoKFRfQ0FMTEVEKCJJRk5fUHJldmlvdXNfQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoZm9ybS0+Y3VyY29sIC09IGFtb3VudCkgPCAwKQorICAgIHsKKyAgICAgIGlmICgoLS0oZm9ybS0+Y3Vycm93KSkgPCAwKQorCXsKKwkgIGZvcm0tPmN1cnJvdysrOworCSAgZm9ybS0+Y3VyY29sID0gb2xkY29sOworCSAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKwl9CisgICAgICBmb3JtLT5jdXJjb2wgPSBmb3JtLT5jdXJyZW50LT5kY29scyAtIDE7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX05leHRfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lIGluIHRoZSBmaWVsZAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBhdCB0aGUgbGFzdCBsaW5lCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX05leHRfTGluZShGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgIFQoKFRfQ0FMTEVEKCJJRk5fTmV4dF9MaW5lKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoKysoZm9ybS0+Y3Vycm93KSkgPT0gZmllbGQtPmRyb3dzKQorICAgIHsKKyNpZiBHUk9XX0lGX05BVklHQVRFCisgICAgICBpZiAoIVNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSAmJiBGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJcmV0dXJuQ29kZShFX09LKTsKKyNlbmRpZgorICAgICAgZm9ybS0+Y3Vycm93LS07CisgICAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworICAgIH0KKyAgZm9ybS0+Y3VyY29sID0gMDsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9QcmV2aW91c19MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91cyBsaW5lIGluIHRoZSBmaWVsZAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBhdCB0aGUgZmlyc3QgbGluZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0lGTl9QcmV2aW91c19MaW5lKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJJRk5fUHJldmlvdXNfTGluZSglcCkiKSwgZm9ybSkpOworICBpZiAoKC0tKGZvcm0tPmN1cnJvdykpIDwgMCkKKyAgICB7CisgICAgICBmb3JtLT5jdXJyb3crKzsKKyAgICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICBmb3JtLT5jdXJjb2wgPSAwOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX05leHRfV29yZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCB3b3JkIGluIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEIC0gdGhlcmUgaXMgbm8gbmV4dCB3b3JkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX05leHRfV29yZChGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpicCA9IEFkZHJlc3NfT2ZfQ3VycmVudF9Qb3NpdGlvbl9Jbl9CdWZmZXIoZm9ybSk7CisgIEZJRUxEX0NFTEwgKnM7CisgIEZJRUxEX0NFTEwgKnQ7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9OZXh0X1dvcmQoJXApIiksIGZvcm0pKTsKKworICAvKiBXZSByZWFsbHkgbmVlZCBhY2Nlc3MgdG8gdGhlIGRhdGEsIHNvIHdlIGhhdmUgdG8gc3luY2hyb25pemUgKi8KKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworCisgIC8qIEdvIHRvIHRoZSBmaXJzdCB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIChpbmNsdWRpbmcKKyAgICAgY3VycmVudCBwb3NpdGlvbikuIFRoaXMgaXMgdGhlbiB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gbG9vayBmb3IgdGhlCisgICAgIG5leHQgbm9uLWJsYW5rIGRhdGEgKi8KKyAgcyA9IEdldF9GaXJzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcihicCwgQnVmZmVyX0xlbmd0aChmaWVsZCkgLQorCQkJCSAgICAgKGludCkoYnAgLSBmaWVsZC0+YnVmKSk7CisKKyAgLyogRmluZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgd29yZCAqLworICB0ID0gR2V0X1N0YXJ0X09mX0RhdGEocywgQnVmZmVyX0xlbmd0aChmaWVsZCkgLQorCQkJKGludCkocyAtIGZpZWxkLT5idWYpKTsKKyNpZiAhRlJJRU5ETFlfUFJFVl9ORVhUX1dPUkQKKyAgaWYgKHMgPT0gdCkKKyAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBBZGp1c3RfQ3Vyc29yX1Bvc2l0aW9uKGZvcm0sIHQpOworICAgICAgcmV0dXJuQ29kZShFX09LKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fUHJldmlvdXNfV29yZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJldmlvdXMgd29yZCBpbiB0aGUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAtIHRoZXJlIGlzIG5vIHByZXZpb3VzIHdvcmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fUHJldmlvdXNfV29yZChGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpicCA9IEFkZHJlc3NfT2ZfQ3VycmVudF9Qb3NpdGlvbl9Jbl9CdWZmZXIoZm9ybSk7CisgIEZJRUxEX0NFTEwgKnM7CisgIEZJRUxEX0NFTEwgKnQ7CisgIGJvb2wgYWdhaW4gPSBGQUxTRTsKKworICBUKChUX0NBTExFRCgiSUZOX1ByZXZpb3VzX1dvcmQoJXApIiksIGZvcm0pKTsKKworICAvKiBXZSByZWFsbHkgbmVlZCBhY2Nlc3MgdG8gdGhlIGRhdGEsIHNvIHdlIGhhdmUgdG8gc3luY2hyb25pemUgKi8KKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworCisgIHMgPSBBZnRlcl9FbmRfT2ZfRGF0YShmaWVsZC0+YnVmLCAoaW50KShicCAtIGZpZWxkLT5idWYpKTsKKyAgLyogcyBwb2ludHMgbm93IHJpZ2h0IGFmdGVyIHRoZSBsYXN0IG5vbi1ibGFuayBpbiB0aGUgYnVmZmVyIGJlZm9yZSBicC4KKyAgICAgSWYgYnAgd2FzIGluIGEgd29yZCwgcyBlcXVhbHMgYnAuIEluIHRoaXMgY2FzZSB3ZSBtdXN0IGZpbmQgdGhlIGxhc3QKKyAgICAgd2hpdGVzcGFjZSBpbiB0aGUgYnVmZmVyIGJlZm9yZSBicCBhbmQgcmVwZWF0IHRoZSBnYW1lIHRvIHJlYWxseSBmaW5kCisgICAgIHRoZSBwcmV2aW91cyB3b3JkISAqLworICBpZiAocyA9PSBicCkKKyAgICBhZ2FpbiA9IFRSVUU7CisKKyAgLyogQW5kIG5leHQgY2FsbCBub3cgZ29lcyBiYWNrd2FyZCB0byBsb29rIGZvciB0aGUgbGFzdCB3aGl0ZXNwYWNlCisgICAgIGJlZm9yZSB0aGF0LCBwb2ludGluZyByaWdodCBhZnRlciB0aGlzLCBzbyBpdCBwb2ludHMgdG8gdGhlIGJlZ2luCisgICAgIG9mIHRoZSBwcmV2aW91cyB3b3JkLgorICAgKi8KKyAgdCA9IEFmdGVyX0xhc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoZmllbGQtPmJ1ZiwgKGludCkocyAtIGZpZWxkLT5idWYpKTsKKyNpZiAhRlJJRU5ETFlfUFJFVl9ORVhUX1dPUkQKKyAgaWYgKHMgPT0gdCkKKyAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworI2VuZGlmCisgIGlmIChhZ2FpbikKKyAgICB7CisgICAgICAvKiBhbmQgZG8gaXQgYWdhaW4sIHJlcGxhY2luZyBicCBieSB0ICovCisgICAgICBzID0gQWZ0ZXJfRW5kX09mX0RhdGEoZmllbGQtPmJ1ZiwgKGludCkodCAtIGZpZWxkLT5idWYpKTsKKyAgICAgIHQgPSBBZnRlcl9MYXN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKGZpZWxkLT5idWYsIChpbnQpKHMgLSBmaWVsZC0+YnVmKSk7CisjaWYgIUZSSUVORExZX1BSRVZfTkVYVF9XT1JECisgICAgICBpZiAocyA9PSB0KQorCXJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisjZW5kaWYKKyAgICB9CisgIEFkanVzdF9DdXJzb3JfUG9zaXRpb24oZm9ybSwgdCk7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fQmVnaW5uaW5nX09mX0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGxhY2UgdGhlIGN1cnNvciBhdCB0aGUgZmlyc3Qgbm9uLXBhZCBjaGFyYWN0ZXIgaW4KK3wgICAgICAgICAgICAgICAgICAgIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX0JlZ2lubmluZ19PZl9GaWVsZChGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgIFQoKFRfQ0FMTEVEKCJJRk5fQmVnaW5uaW5nX09mX0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihmb3JtLAorCQkJIEdldF9TdGFydF9PZl9EYXRhKGZpZWxkLT5idWYsIEJ1ZmZlcl9MZW5ndGgoZmllbGQpKSk7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fRW5kX09mX0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgbGFzdCBub24tcGFkIGNoYXJhY3RlciBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGZpZWxkLiBJZiB0aGUgZmllbGQgb2NjdXBpZXMgdGhlIGxhc3QgcG9zaXRpb24gaW4KK3wgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIsIHRoZSBjdXJzb3IgaXMgcG9zaXRpb25lZCBvbiB0aGUgbGFzdAorfCAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX0VuZF9PZl9GaWVsZChGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpwb3M7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9FbmRfT2ZfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICBwb3MgPSBBZnRlcl9FbmRfT2ZfRGF0YShmaWVsZC0+YnVmLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSk7CisgIGlmIChwb3MgPT0gKGZpZWxkLT5idWYgKyBCdWZmZXJfTGVuZ3RoKGZpZWxkKSkpCisgICAgcG9zLS07CisgIEFkanVzdF9DdXJzb3JfUG9zaXRpb24oZm9ybSwgcG9zKTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9CZWdpbm5pbmdfT2ZfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBsYWNlIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IG5vbi1wYWQgY2hhcmFjdGVyIGluCit8ICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fQmVnaW5uaW5nX09mX0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKworICBUKChUX0NBTExFRCgiSUZOX0JlZ2lubmluZ19PZl9MaW5lKCVwKSIpLCBmb3JtKSk7CisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihmb3JtLAorCQkJIEdldF9TdGFydF9PZl9EYXRhKEFkZHJlc3NfT2ZfQ3VycmVudF9Sb3dfSW5fQnVmZmVyKGZvcm0pLAorCQkJCQkgICBmaWVsZC0+ZGNvbHMpKTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9FbmRfT2ZfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIGxhc3Qgbm9uLXBhZCBjaGFyYWN0ZXIgaW4gdGhlCit8ICAgICAgICAgICAgICAgICAgICBjdXJyZW50IGxpbmUgb2YgdGhlIGZpZWxkLiBJZiB0aGUgZmllbGQgb2NjdXBpZXMgdGhlCit8ICAgICAgICAgICAgICAgICAgICBsYXN0IGNvbHVtbiBpbiB0aGUgbGluZSwgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZQorfCAgICAgICAgICAgICAgICAgICAgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fRW5kX09mX0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgRklFTERfQ0VMTCAqcG9zOworICBGSUVMRF9DRUxMICpicDsKKworICBUKChUX0NBTExFRCgiSUZOX0VuZF9PZl9MaW5lKCVwKSIpLCBmb3JtKSk7CisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgYnAgPSBBZGRyZXNzX09mX0N1cnJlbnRfUm93X0luX0J1ZmZlcihmb3JtKTsKKyAgcG9zID0gQWZ0ZXJfRW5kX09mX0RhdGEoYnAsIGZpZWxkLT5kY29scyk7CisgIGlmIChwb3MgPT0gKGJwICsgZmllbGQtPmRjb2xzKSkKKyAgICBwb3MtLTsKKyAgQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihmb3JtLCBwb3MpOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX0xlZnRfQ2hhcmFjdGVyKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSBvbmUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IGluIHRoZSBjdXJyZW50IGxpbmUuCit8ICAgICAgICAgICAgICAgICAgICBUaGlzIGRvZXNuJ3QgY3ljbGUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAtIGFscmVhZHkgaW4gZmlyc3QgY29sdW1uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX0xlZnRfQ2hhcmFjdGVyKEZPUk0gKmZvcm0pCit7CisgIGludCBhbW91bnQgPSBteVdDV0lEVEgoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wgLSAxKTsKKyAgaW50IG9sZGNvbCA9IGZvcm0tPmN1cmNvbDsKKworICBUKChUX0NBTExFRCgiSUZOX0xlZnRfQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoZm9ybS0+Y3VyY29sIC09IGFtb3VudCkgPCAwKQorICAgIHsKKyAgICAgIGZvcm0tPmN1cmNvbCA9IG9sZGNvbDsKKyAgICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX1JpZ2h0X0NoYXJhY3RlcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgb25lIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgaW4gdGhlIGN1cnJlbnQgbGluZS4KK3wgICAgICAgICAgICAgICAgICAgIFRoaXMgZG9lc24ndCBjeWNsZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBhbHJlYWR5IGluIGxhc3QgY29sdW1uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX1JpZ2h0X0NoYXJhY3RlcihGT1JNICpmb3JtKQoreworICBpbnQgYW1vdW50ID0gbXlXQ1dJRFRIKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgaW50IG9sZGNvbCA9IGZvcm0tPmN1cmNvbDsKKworICBUKChUX0NBTExFRCgiSUZOX1JpZ2h0X0NoYXJhY3RlciglcCkiKSwgZm9ybSkpOworICBpZiAoKGZvcm0tPmN1cmNvbCArPSBhbW91bnQpID49IGZvcm0tPmN1cnJlbnQtPmRjb2xzKQorICAgIHsKKyNpZiBHUk9XX0lGX05BVklHQVRFCisgICAgICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgICAgICBpZiAoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpICYmIEZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwlyZXR1cm5Db2RlKEVfT0spOworI2VuZGlmCisgICAgICBmb3JtLT5jdXJjb2wgPSBvbGRjb2w7CisgICAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworICAgIH0KKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9VcF9DaGFyYWN0ZXIoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIG9uZSBsaW5lIHVwLiBUaGlzIGRvZXNuJ3QgY3ljbGUgdGhyb3VnaCB0aGUgbGluZXMKK3wgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBhbHJlYWR5IGluIGxhc3QgY29sdW1uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX1VwX0NoYXJhY3RlcihGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiSUZOX1VwX0NoYXJhY3RlciglcCkiKSwgZm9ybSkpOworICBpZiAoKC0tKGZvcm0tPmN1cnJvdykpIDwgMCkKKyAgICB7CisgICAgICBmb3JtLT5jdXJyb3crKzsKKyAgICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX0Rvd25fQ2hhcmFjdGVyKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSBvbmUgbGluZSBkb3duLiBUaGlzIGRvZXNuJ3QgY3ljbGUgdGhyb3VnaCB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGxpbmVzIG9mIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBhbHJlYWR5IGluIGxhc3QgY29sdW1uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX0Rvd25fQ2hhcmFjdGVyKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9Eb3duX0NoYXJhY3RlciglcCkiKSwgZm9ybSkpOworICBpZiAoKCsrKGZvcm0tPmN1cnJvdykpID09IGZpZWxkLT5kcm93cykKKyAgICB7CisjaWYgR1JPV19JRl9OQVZJR0FURQorICAgICAgaWYgKCFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgJiYgRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCXJldHVybkNvZGUoRV9PSyk7CisjZW5kaWYKKyAgICAgIC0tKGZvcm0tPmN1cnJvdyk7CisgICAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworICAgIH0KKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFTkQgb2YgSW50cmEtRmllbGQgTmF2aWdhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBWZXJ0aWNhbCBzY3JvbGxpbmcgaGVscGVyIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFZTQ19HZW5lcmljKEZPUk0gKmZvcm0sIGludCBubGluZXMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgbXVsdGktbGluZSBmaWVsZCBmb3J3YXJkIChubGluZXM+MCkgb3IKK3wgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkIChubGluZXM8MCkgdGhpcyBtYW55IGxpbmVzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGNhbid0IHNjcm9sbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1ZTQ19HZW5lcmljKEZPUk0gKmZvcm0sIGludCBubGluZXMpCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGludCByZXMgPSBFX1JFUVVFU1RfREVOSUVEOworICBpbnQgcm93c190b19nbyA9IChubGluZXMgPiAwID8gbmxpbmVzIDogLW5saW5lcyk7CisKKyAgaWYgKG5saW5lcyA+IDApCisgICAgeworICAgICAgaWYgKChyb3dzX3RvX2dvICsgZm9ybS0+dG9wcm93KSA+IChmaWVsZC0+ZHJvd3MgLSBmaWVsZC0+cm93cykpCisJcm93c190b19nbyA9IChmaWVsZC0+ZHJvd3MgLSBmaWVsZC0+cm93cyAtIGZvcm0tPnRvcHJvdyk7CisKKyAgICAgIGlmIChyb3dzX3RvX2dvID4gMCkKKwl7CisJICBmb3JtLT5jdXJyb3cgKz0gcm93c190b19nbzsKKwkgIGZvcm0tPnRvcHJvdyArPSByb3dzX3RvX2dvOworCSAgcmVzID0gRV9PSzsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJvd3NfdG9fZ28gPiBmb3JtLT50b3Byb3cpCisJcm93c190b19nbyA9IGZvcm0tPnRvcHJvdzsKKworICAgICAgaWYgKHJvd3NfdG9fZ28gPiAwKQorCXsKKwkgIGZvcm0tPmN1cnJvdyAtPSByb3dzX3RvX2dvOworCSAgZm9ybS0+dG9wcm93IC09IHJvd3NfdG9fZ287CisJICByZXMgPSBFX09LOworCX0KKyAgICB9CisgIHJldHVybiAocmVzKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2YgVmVydGljYWwgc2Nyb2xsaW5nIGhlbHBlciByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBWZXJ0aWNhbCBzY3JvbGxpbmcgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgVmVydGljYWxfU2Nyb2xsaW5nKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCogY29uc3QgZmN0KSAoRk9STSAqKSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQZXJmb3JtcyB0aGUgZ2VuZXJpYyB2ZXJ0aWNhbCBzY3JvbGxpbmcgcm91dGluZXMuCit8ICAgICAgICAgICAgICAgICAgICBUaGlzIGhhcyB0byBjaGVjayBmb3IgYSBtdWx0aS1saW5lIGZpZWxkIGFuZCB0byBzZXQKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBfTkVXVE9QIGZsYWcgaWYgc2Nyb2xsaW5nIHJlYWxseSBvY2N1cnJlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFByb3BhZ2F0ZWQgZXJyb3IgY29kZSBmcm9tIGxvdy1sZXZlbCBkcml2ZXIgY2FsbHMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWZXJ0aWNhbF9TY3JvbGxpbmcoaW50ICgqY29uc3QgZmN0KSAoRk9STSAqKSwgRk9STSAqZm9ybSkKK3sKKyAgaW50IHJlcyA9IEVfUkVRVUVTVF9ERU5JRUQ7CisKKyAgaWYgKCFTaW5nbGVfTGluZV9GaWVsZChmb3JtLT5jdXJyZW50KSkKKyAgICB7CisgICAgICByZXMgPSBmY3QoZm9ybSk7CisgICAgICBpZiAocmVzID09IEVfT0spCisJZm9ybS0+Y3VycmVudC0+c3RhdHVzIHw9IF9ORVdUT1A7CisgICAgfQorICByZXR1cm4gKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBWU0NfU2Nyb2xsX0xpbmVfRm9yd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBtdWx0aS1saW5lIGZpZWxkIGZvcndhcmQgYSBsaW5lCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIG5vIGRhdGEgYWhlYWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWU0NfU2Nyb2xsX0xpbmVfRm9yd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiVlNDX1Njcm9sbF9MaW5lX0ZvcndhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShWU0NfR2VuZXJpYyhmb3JtLCAxKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBWU0NfU2Nyb2xsX0xpbmVfQmFja3dhcmQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgbXVsdGktbGluZSBmaWVsZCBiYWNrd2FyZCBhIGxpbmUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gbm8gZGF0YSBiZWhpbmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWU0NfU2Nyb2xsX0xpbmVfQmFja3dhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlZTQ19TY3JvbGxfTGluZV9CYWNrd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKFZTQ19HZW5lcmljKGZvcm0sIC0xKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBWU0NfU2Nyb2xsX1BhZ2VfRm9yd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBhIG11bHRpLWxpbmUgZmllbGQgZm9yd2FyZCBhIHBhZ2UKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBubyBkYXRhIGFoZWFkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorVlNDX1Njcm9sbF9QYWdlX0ZvcndhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlZTQ19TY3JvbGxfUGFnZV9Gb3J3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoVlNDX0dlbmVyaWMoZm9ybSwgZm9ybS0+Y3VycmVudC0+cm93cykpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgVlNDX1Njcm9sbF9IYWxmX1BhZ2VfRm9yd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBhIG11bHRpLWxpbmUgZmllbGQgZm9yd2FyZCBoYWxmIGEgcGFnZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIG5vIGRhdGEgYWhlYWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWU0NfU2Nyb2xsX0hhbGZfUGFnZV9Gb3J3YXJkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJWU0NfU2Nyb2xsX0hhbGZfUGFnZV9Gb3J3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoVlNDX0dlbmVyaWMoZm9ybSwgKGZvcm0tPmN1cnJlbnQtPnJvd3MgKyAxKSAvIDIpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFZTQ19TY3JvbGxfUGFnZV9CYWNrd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBhIG11bHRpLWxpbmUgZmllbGQgYmFja3dhcmQgYSBwYWdlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gbm8gZGF0YSBiZWhpbmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWU0NfU2Nyb2xsX1BhZ2VfQmFja3dhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlZTQ19TY3JvbGxfUGFnZV9CYWNrd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKFZTQ19HZW5lcmljKGZvcm0sIC0oZm9ybS0+Y3VycmVudC0+cm93cykpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFZTQ19TY3JvbGxfSGFsZl9QYWdlX0JhY2t3YXJkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIGEgbXVsdGktbGluZSBmaWVsZCBiYWNrd2FyZCBoYWxmIGEgcGFnZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIG5vIGRhdGEgYmVoaW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorVlNDX1Njcm9sbF9IYWxmX1BhZ2VfQmFja3dhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlZTQ19TY3JvbGxfSGFsZl9QYWdlX0JhY2t3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoVlNDX0dlbmVyaWMoZm9ybSwgLSgoZm9ybS0+Y3VycmVudC0+cm93cyArIDEpIC8gMikpKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2YgVmVydGljYWwgc2Nyb2xsaW5nIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhvcml6b250YWwgc2Nyb2xsaW5nIGhlbHBlciByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfR2VuZXJpYyhGT1JNICpmb3JtLCBpbnQgbmNvbHVtbnMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgc2luZ2xlLWxpbmUgZmllbGQgZm9yd2FyZCAobmNvbHVtbnM+MCkgb3IKK3wgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkIChuY29sdW1uczwwKSB0aGlzIG1hbnkgY29sdW1ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBjYW4ndCBzY3JvbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitIU0NfR2VuZXJpYyhGT1JNICpmb3JtLCBpbnQgbmNvbHVtbnMpCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGludCByZXMgPSBFX1JFUVVFU1RfREVOSUVEOworICBpbnQgY29sc190b19nbyA9IChuY29sdW1ucyA+IDAgPyBuY29sdW1ucyA6IC1uY29sdW1ucyk7CisKKyAgaWYgKG5jb2x1bW5zID4gMCkKKyAgICB7CisgICAgICBpZiAoKGNvbHNfdG9fZ28gKyBmb3JtLT5iZWdpbmNvbCkgPiAoZmllbGQtPmRjb2xzIC0gZmllbGQtPmNvbHMpKQorCWNvbHNfdG9fZ28gPSBmaWVsZC0+ZGNvbHMgLSBmaWVsZC0+Y29scyAtIGZvcm0tPmJlZ2luY29sOworCisgICAgICBpZiAoY29sc190b19nbyA+IDApCisJeworCSAgZm9ybS0+Y3VyY29sICs9IGNvbHNfdG9fZ287CisJICBmb3JtLT5iZWdpbmNvbCArPSBjb2xzX3RvX2dvOworCSAgcmVzID0gRV9PSzsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGNvbHNfdG9fZ28gPiBmb3JtLT5iZWdpbmNvbCkKKwljb2xzX3RvX2dvID0gZm9ybS0+YmVnaW5jb2w7CisKKyAgICAgIGlmIChjb2xzX3RvX2dvID4gMCkKKwl7CisJICBmb3JtLT5jdXJjb2wgLT0gY29sc190b19nbzsKKwkgIGZvcm0tPmJlZ2luY29sIC09IGNvbHNfdG9fZ287CisJICByZXMgPSBFX09LOworCX0KKyAgICB9CisgIHJldHVybiAocmVzKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2YgSG9yaXpvbnRhbCBzY3JvbGxpbmcgaGVscGVyIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhvcml6b250YWwgc2Nyb2xsaW5nIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhvcml6b250YWxfU2Nyb2xsaW5nKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKiBjb25zdCBmY3QpIChGT1JNICopLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGVyZm9ybXMgdGhlIGdlbmVyaWMgaG9yaXpvbnRhbCBzY3JvbGxpbmcgcm91dGluZXMuCit8ICAgICAgICAgICAgICAgICAgICBUaGlzIGhhcyB0byBjaGVjayBmb3IgYSBzaW5nbGUtbGluZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFByb3BhZ2F0ZWQgZXJyb3IgY29kZSBmcm9tIGxvdy1sZXZlbCBkcml2ZXIgY2FsbHMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitIb3Jpem9udGFsX1Njcm9sbGluZyhpbnQgKCpjb25zdCBmY3QpIChGT1JNICopLCBGT1JNICpmb3JtKQoreworICBpZiAoU2luZ2xlX0xpbmVfRmllbGQoZm9ybS0+Y3VycmVudCkpCisgICAgcmV0dXJuIGZjdChmb3JtKTsKKyAgZWxzZQorICAgIHJldHVybiAoRV9SRVFVRVNUX0RFTklFRCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfU2Nyb2xsX0NoYXJfRm9yd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBzaW5nbGUtbGluZSBmaWVsZCBmb3J3YXJkIGEgY2hhcmFjdGVyCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIG5vIGRhdGEgYWhlYWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitIU0NfU2Nyb2xsX0NoYXJfRm9yd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiSFNDX1Njcm9sbF9DaGFyX0ZvcndhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShIU0NfR2VuZXJpYyhmb3JtLCAxKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfU2Nyb2xsX0NoYXJfQmFja3dhcmQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgc2luZ2xlLWxpbmUgZmllbGQgYmFja3dhcmQgYSBjaGFyYWN0ZXIKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gbm8gZGF0YSBiZWhpbmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitIU0NfU2Nyb2xsX0NoYXJfQmFja3dhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkhTQ19TY3JvbGxfQ2hhcl9CYWNrd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKEhTQ19HZW5lcmljKGZvcm0sIC0xKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfSG9yaXpvbnRhbF9MaW5lX0ZvcndhcmQoRk9STSogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBzaW5nbGUtbGluZSBmaWVsZCBmb3J3YXJkIGEgbGluZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBubyBkYXRhIGFoZWFkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSFNDX0hvcml6b250YWxfTGluZV9Gb3J3YXJkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJIU0NfSG9yaXpvbnRhbF9MaW5lX0ZvcndhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShIU0NfR2VuZXJpYyhmb3JtLCBmb3JtLT5jdXJyZW50LT5jb2xzKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfSG9yaXpvbnRhbF9IYWxmX0xpbmVfRm9yd2FyZChGT1JNKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIHNpbmdsZS1saW5lIGZpZWxkIGZvcndhcmQgaGFsZiBhIGxpbmUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAtIG5vIGRhdGEgYWhlYWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitIU0NfSG9yaXpvbnRhbF9IYWxmX0xpbmVfRm9yd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiSFNDX0hvcml6b250YWxfSGFsZl9MaW5lX0ZvcndhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShIU0NfR2VuZXJpYyhmb3JtLCAoZm9ybS0+Y3VycmVudC0+Y29scyArIDEpIC8gMikpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSFNDX0hvcml6b250YWxfTGluZV9CYWNrd2FyZChGT1JNKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIHNpbmdsZS1saW5lIGZpZWxkIGJhY2t3YXJkIGEgbGluZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBubyBkYXRhIGJlaGluZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hTQ19Ib3Jpem9udGFsX0xpbmVfQmFja3dhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkhTQ19Ib3Jpem9udGFsX0xpbmVfQmFja3dhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShIU0NfR2VuZXJpYyhmb3JtLCAtKGZvcm0tPmN1cnJlbnQtPmNvbHMpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfSG9yaXpvbnRhbF9IYWxmX0xpbmVfQmFja3dhcmQoRk9STSogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBzaW5nbGUtbGluZSBmaWVsZCBiYWNrd2FyZCBoYWxmIGEgbGluZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBubyBkYXRhIGJlaGluZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hTQ19Ib3Jpem9udGFsX0hhbGZfTGluZV9CYWNrd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiSFNDX0hvcml6b250YWxfSGFsZl9MaW5lX0JhY2t3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoSFNDX0dlbmVyaWMoZm9ybSwgLSgoZm9ybS0+Y3VycmVudC0+Y29scyArIDEpIC8gMikpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVuZCBvZiBIb3Jpem9udGFsIHNjcm9sbGluZyByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIZWxwZXIgcm91dGluZXMgZm9yIEZpZWxkIEVkaXRpbmcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIElzX1RoZXJlX1Jvb21fRm9yX0FfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHRoZQorfCAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHRvIGVudGVyIGEgd2hvbGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAtIHRoZXJlIGlzIGVub3VnaCBzcGFjZQorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgIC0gdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfSU5MSU5FIHN0YXRpYyBib29sCitJc19UaGVyZV9Sb29tX0Zvcl9BX0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgRklFTERfQ0VMTCAqYmVnaW5fb2ZfbGFzdF9saW5lLCAqczsKKworICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisgIGJlZ2luX29mX2xhc3RfbGluZSA9IEFkZHJlc3NfT2ZfUm93X0luX0J1ZmZlcihmaWVsZCwgKGZpZWxkLT5kcm93cyAtIDEpKTsKKyAgcyA9IEFmdGVyX0VuZF9PZl9EYXRhKGJlZ2luX29mX2xhc3RfbGluZSwgZmllbGQtPmRjb2xzKTsKKyAgcmV0dXJuICgocyA9PSBiZWdpbl9vZl9sYXN0X2xpbmUpID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBJc19UaGVyZV9Sb29tX0Zvcl9BX0NoYXJfSW5fTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyByb29tIGZvciBhIG5ldyBjaGFyYWN0ZXIKK3wgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjdXJyZW50IGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgIC0gdGhlcmUgaXMgcm9vbQorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgICAtIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSAobGluZSBmdWxsKQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfSU5MSU5FIHN0YXRpYyBib29sCitJc19UaGVyZV9Sb29tX0Zvcl9BX0NoYXJfSW5fTGluZShGT1JNICpmb3JtKQoreworICBpbnQgbGFzdF9jaGFyX2luX2xpbmU7CisKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJyZW50LT5kY29scyAtIDEpOworICBsYXN0X2NoYXJfaW5fbGluZSA9IChpbnQpKHdpbmNoKGZvcm0tPncpICYgQV9DSEFSVEVYVCk7CisgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgcmV0dXJuICgoKGxhc3RfY2hhcl9pbl9saW5lID09IGZvcm0tPmN1cnJlbnQtPnBhZCkgfHwKKwkgICBpc19ibGFuayhsYXN0X2NoYXJfaW5fbGluZSkpID8gVFJVRSA6IEZBTFNFKTsKK30KKworI2RlZmluZSBUaGVyZV9Jc19Ob19Sb29tX0Zvcl9BX0NoYXJfSW5fTGluZShmKSBcCisgICFJc19UaGVyZV9Sb29tX0Zvcl9BX0NoYXJfSW5fTGluZShmKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSW5zZXJ0X1N0cmluZygKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNICogZm9ybSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm93LAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnR4dCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGxlbiApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBJbnNlcnQgdGhlICdsZW4nIGNoYXJhY3RlcnMgYmVnaW5uaW5nIGF0IHBvaW50ZXIgJ3R4dCcKK3wgICAgICAgICAgICAgICAgICAgIGludG8gdGhlICdyb3cnIG9mIHRoZSAnZm9ybScuIFRoZSBpbnNlcnRpb24gb2NjdXJzCit8ICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSByb3csIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZQorfCAgICAgICAgICAgICAgICAgICAgbW92ZWQgdG8gdGhlIHJpZ2h0LiBBZnRlciB0aGUgdGV4dCBhIHBhZCBjaGFyYWN0ZXIgd2lsbAorfCAgICAgICAgICAgICAgICAgICAgYmUgaW5zZXJ0ZWQgdG8gc2VwYXJhdGUgdGhlIHRleHQgZnJvbSB0aGUgcmVzdC4gSWYKK3wgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSB0aGUgaW5zZXJ0aW9uIG1vdmVzIGNoYXJhY3RlcnMgb24gdGhlIG5leHQKK3wgICAgICAgICAgICAgICAgICAgIGxpbmUgdG8gbWFrZSBwbGFjZSBmb3IgdGhlIHJlcXVlc3RlZCBpbnNlcnRpb24gc3RyaW5nLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0luc2VydF9TdHJpbmcoRk9STSAqZm9ybSwgaW50IHJvdywgRklFTERfQ0VMTCAqdHh0LCBpbnQgbGVuKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpicCA9IEFkZHJlc3NfT2ZfUm93X0luX0J1ZmZlcihmaWVsZCwgcm93KTsKKyAgaW50IGRhdGFsZW4gPSAoaW50KShBZnRlcl9FbmRfT2ZfRGF0YShicCwgZmllbGQtPmRjb2xzKSAtIGJwKTsKKyAgaW50IGZyZWVsZW4gPSBmaWVsZC0+ZGNvbHMgLSBkYXRhbGVuOworICBpbnQgcmVxdWlyZWRsZW4gPSBsZW4gKyAxOworICBGSUVMRF9DRUxMICpzcGxpdDsKKyAgaW50IHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisKKyAgaWYgKGZyZWVsZW4gPj0gcmVxdWlyZWRsZW4pCisgICAgeworICAgICAgd21vdmUoZm9ybS0+dywgcm93LCAwKTsKKyAgICAgIG15SU5TTlNUUihmb3JtLT53LCB0eHQsIGxlbik7CisgICAgICB3bW92ZShmb3JtLT53LCByb3csIGxlbik7CisgICAgICBteUlOU05TVFIoZm9ybS0+dywgJm15QkxBTkssIDEpOworICAgICAgcmV0dXJuIEVfT0s7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogd2UgaGF2ZSB0byBtb3ZlIGNoYXJhY3RlcnMgb24gdGhlIG5leHQgbGluZS4gSWYgd2UgYXJlIG9uIHRoZQorICAgICAgICAgbGFzdCBsaW5lIHRoaXMgbWF5IHdvcmssIGlmIHRoZSBmaWVsZCBpcyBncm93YWJsZSAqLworICAgICAgaWYgKChyb3cgPT0gKGZpZWxkLT5kcm93cyAtIDEpKSAmJiBHcm93YWJsZShmaWVsZCkpCisJeworCSAgaWYgKCFGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJICAgIHJldHVybiAoRV9TWVNURU1fRVJST1IpOworCSAgLyogISEhU2lkZS1FZmZlY3QgOiBtaWdodCBiZSBjaGFuZ2VkIGR1ZSB0byBncm93dGghISEgKi8KKwkgIGJwID0gQWRkcmVzc19PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLCByb3cpOworCX0KKworICAgICAgaWYgKHJvdyA8IChmaWVsZC0+ZHJvd3MgLSAxKSkKKwl7CisJICBzcGxpdCA9CisJICAgIEFmdGVyX0xhc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoYnAsCisJCQkJCSAgICAoaW50KShHZXRfU3RhcnRfT2ZfRGF0YShicAorCQkJCQkJCQkgICAgKyBmaWVsZC0+ZGNvbHMKKwkJCQkJCQkJICAgIC0gcmVxdWlyZWRsZW4sCisJCQkJCQkJCSAgICByZXF1aXJlZGxlbikKKwkJCQkJCSAgLSBicCkpOworCSAgLyogc3BsaXQgcG9pbnRzIG5vdyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwb3J0aW9uIG9mIHRoZQorCSAgICAgbGluZSB0aGF0IG11c3QgYmUgbW92ZWQgdG8gdGhlIG5leHQgbGluZSAqLworCSAgZGF0YWxlbiA9IChpbnQpKHNwbGl0IC0gYnApOwkvKiArIGZyZWVsZW4gaGFzIHRvIHN0YXkgb24gdGhpcyBsaW5lICAgKi8KKwkgIGZyZWVsZW4gPSBmaWVsZC0+ZGNvbHMgLSAoZGF0YWxlbiArIGZyZWVsZW4pOwkJLyogZm9yIHRoZSBuZXh0IGxpbmUgKi8KKworCSAgaWYgKChyZXN1bHQgPSBJbnNlcnRfU3RyaW5nKGZvcm0sIHJvdyArIDEsIHNwbGl0LCBmcmVlbGVuKSkgPT0gRV9PSykKKwkgICAgeworCSAgICAgIHdtb3ZlKGZvcm0tPncsIHJvdywgZGF0YWxlbik7CisJICAgICAgd2NscnRvZW9sKGZvcm0tPncpOworCSAgICAgIHdtb3ZlKGZvcm0tPncsIHJvdywgMCk7CisJICAgICAgbXlJTlNOU1RSKGZvcm0tPncsIHR4dCwgbGVuKTsKKwkgICAgICB3bW92ZShmb3JtLT53LCByb3csIGxlbik7CisJICAgICAgbXlJTlNOU1RSKGZvcm0tPncsICZteUJMQU5LLCAxKTsKKwkgICAgICByZXR1cm4gRV9PSzsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiAocmVzdWx0KTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBXcmFwcGluZ19Ob3RfTmVjZXNzYXJ5X09yX1dyYXBwaW5nX09rKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgSWYgYSBjaGFyYWN0ZXIgaGFzIGJlZW4gZW50ZXJlZCBpbnRvIGEgZmllbGQsIGl0IG1heQorfCAgICAgICAgICAgICAgICAgICAgYmUgdGhhdCB3cmFwcGluZyBoYXMgdG8gb2NjdXIuIFRoaXMgcm91dGluZSBjaGVja3MKK3wgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHdyYXBwaW5nIGlzIHJlcXVpcmVkIGFuZCBpZiBzbywgcGVyZm9ybXMKK3wgICAgICAgICAgICAgICAgICAgIHRoZSB3cmFwcGluZy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gbm8gd3JhcHBpbmcgcmVxdWlyZWQgb3Igd3JhcHBpbmcKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIHN1Y2Nlc3NmdWwKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0KK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gc29tZSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitXcmFwcGluZ19Ob3RfTmVjZXNzYXJ5X09yX1dyYXBwaW5nX09rKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGludCByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworICBib29sIExhc3RfUm93ID0gKChmaWVsZC0+ZHJvd3MgLSAxKSA9PSBmb3JtLT5jdXJyb3cpOworCisgIGlmICgoZmllbGQtPm9wdHMgJiBPX1dSQVApICYmCS8qIHdyYXBwaW5nIHdhbnRlZCAgICAgKi8KKyAgICAgICghU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpKSAmJgkvKiBtdXN0IGJlIG11bHRpLWxpbmUgICovCisgICAgICAoVGhlcmVfSXNfTm9fUm9vbV9Gb3JfQV9DaGFyX0luX0xpbmUoZm9ybSkpICYmCS8qIGxpbmUgaXMgZnVsbCAgICAgICAgKi8KKyAgICAgICghTGFzdF9Sb3cgfHwgR3Jvd2FibGUoZmllbGQpKSkJLyogdGhlcmUgYXJlIG1vcmUgbGluZXMgKi8KKyAgICB7CisgICAgICBGSUVMRF9DRUxMICpicDsKKyAgICAgIEZJRUxEX0NFTEwgKnNwbGl0OworICAgICAgaW50IGNoYXJzX3RvX2JlX3dyYXBwZWQ7CisgICAgICBpbnQgY2hhcnNfdG9fcmVtYWluX29uX2xpbmU7CisKKyAgICAgIGlmIChMYXN0X1JvdykKKwl7CisJICAvKiB0aGUgYWJvdmUgbG9naWMgYWxyZWFkeSBlbnN1cmVzLCB0aGF0IGluIHRoaXMgY2FzZSB0aGUgZmllbGQKKwkgICAgIGlzIGdyb3dhYmxlICovCisJICBpZiAoIUZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgcmV0dXJuIEVfU1lTVEVNX0VSUk9SOworCX0KKyAgICAgIGJwID0gQWRkcmVzc19PZl9DdXJyZW50X1Jvd19Jbl9CdWZmZXIoZm9ybSk7CisgICAgICBXaW5kb3dfVG9fQnVmZmVyKGZvcm0tPncsIGZpZWxkKTsKKyAgICAgIHNwbGl0ID0gQWZ0ZXJfTGFzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcihicCwgZmllbGQtPmRjb2xzKTsKKyAgICAgIC8qIHNwbGl0IHBvaW50cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZXF1ZW5jZSB0byBiZSBicm91Z2h0CisgICAgICAgICBvbiB0aGUgbmV4dCBsaW5lICovCisgICAgICBjaGFyc190b19yZW1haW5fb25fbGluZSA9IChpbnQpKHNwbGl0IC0gYnApOworICAgICAgY2hhcnNfdG9fYmVfd3JhcHBlZCA9IGZpZWxkLT5kY29scyAtIGNoYXJzX3RvX3JlbWFpbl9vbl9saW5lOworICAgICAgaWYgKGNoYXJzX3RvX3JlbWFpbl9vbl9saW5lID4gMCkKKwl7CisJICBpZiAoKHJlc3VsdCA9IEluc2VydF9TdHJpbmcoZm9ybSwgZm9ybS0+Y3Vycm93ICsgMSwgc3BsaXQsCisJCQkJICAgICAgY2hhcnNfdG9fYmVfd3JhcHBlZCkpID09IEVfT0spCisJICAgIHsKKwkgICAgICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGNoYXJzX3RvX3JlbWFpbl9vbl9saW5lKTsKKwkgICAgICB3Y2xydG9lb2woZm9ybS0+dyk7CisJICAgICAgaWYgKGZvcm0tPmN1cmNvbCA+PSBjaGFyc190b19yZW1haW5fb25fbGluZSkKKwkJeworCQkgIGZvcm0tPmN1cnJvdysrOworCQkgIGZvcm0tPmN1cmNvbCAtPSBjaGFyc190b19yZW1haW5fb25fbGluZTsKKwkJfQorCSAgICAgIHJldHVybiBFX09LOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXJldHVybiBFX09LOworICAgICAgaWYgKHJlc3VsdCAhPSBFX09LKQorCXsKKwkgIERlbGV0ZUNoYXIoZm9ybSk7CisJICBXaW5kb3dfVG9fQnVmZmVyKGZvcm0tPncsIGZpZWxkKTsKKwkgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IEVfT0s7CQkvKiB3cmFwcGluZyB3YXMgbm90IG5lY2Vzc2FyeSAqLworICByZXR1cm4gKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBGaWVsZCBFZGl0aW5nIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZpZWxkX0VkaXRpbmcoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqIGNvbnN0IGZjdCkgKEZPUk0gKiksCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZW5lcmljIHJvdXRpbmUgZm9yIGZpZWxkIGVkaXRpbmcgcmVxdWVzdHMuIFRoZSBkcml2ZXIKK3wgICAgICAgICAgICAgICAgICAgIHJvdXRpbmVzIGFyZSBvbmx5IGNhbGxlZCBmb3IgZWRpdGFibGUgZmllbGRzLCB0aGUKK3wgICAgICAgICAgICAgICAgICAgIF9XSU5ET1dfTU9ESUZJRUQgZmxhZyBpcyBzZXQgaWYgZWRpdGluZyBvY2N1cnJlZC4KK3wgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc29tZXdoYXQgc3BlY2lhbCBkdWUgdG8gdGhlIG92ZXJsb2FkIHNlbWFudGljcworfCAgICAgICAgICAgICAgICAgICAgb2YgdGhlIE5FV19MSU5FIGFuZCBERUxfUFJFViByZXF1ZXN0cy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVycm9yIGNvZGUgZnJvbSBsb3cgbGV2ZWwgZHJpdmVycy4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGaWVsZF9FZGl0aW5nKGludCAoKmNvbnN0IGZjdCkgKEZPUk0gKiksIEZPUk0gKmZvcm0pCit7CisgIGludCByZXMgPSBFX1JFUVVFU1RfREVOSUVEOworCisgIC8qIFdlIGhhdmUgdG8gZGVhbCBoZXJlIHdpdGggdGhlIHNwZWNpZmljIGNhc2Ugb2YgdGhlIG92ZXJsb2FkZWQKKyAgICAgYmVoYXZpb3Igb2YgTmV3X0xpbmUgYW5kIERlbGV0ZV9QcmV2aW91cyByZXF1ZXN0cy4KKyAgICAgVGhleSBtYXkgZW5kIHVwIGluIG5hdmlnYXRpb25hbCByZXF1ZXN0cyBpZiB3ZSBhcmUgb24gdGhlIGZpcnN0CisgICAgIGNoYXJhY3RlciBpbiBhIGZpZWxkLiBCdXQgbmF2aWdhdGlvbiBpcyBhbHNvIGFsbG93ZWQgb24gbm9uLQorICAgICBlZGl0YWJsZSBmaWVsZHMuCisgICAqLworICBpZiAoKGZjdCA9PSBGRV9EZWxldGVfUHJldmlvdXMpICYmCisgICAgICAoZm9ybS0+b3B0cyAmIE9fQlNfT1ZFUkxPQUQpICYmCisgICAgICBGaXJzdF9Qb3NpdGlvbl9Jbl9DdXJyZW50X0ZpZWxkKGZvcm0pKQorICAgIHsKKyAgICAgIHJlcyA9IEludGVyX0ZpZWxkX05hdmlnYXRpb24oRk5fUHJldmlvdXNfRmllbGQsIGZvcm0pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmY3QgPT0gRkVfTmV3X0xpbmUpCisJeworCSAgaWYgKChmb3JtLT5vcHRzICYgT19OTF9PVkVSTE9BRCkgJiYKKwkgICAgICBGaXJzdF9Qb3NpdGlvbl9Jbl9DdXJyZW50X0ZpZWxkKGZvcm0pKQorCSAgICB7CisJICAgICAgcmVzID0gSW50ZXJfRmllbGRfTmF2aWdhdGlvbihGTl9OZXh0X0ZpZWxkLCBmb3JtKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICAvKiBGRV9OZXdfTGluZSBkZWFscyBpdHNlbGYgd2l0aCB0aGUgX1dJTkRPV19NT0RJRklFRCBmbGFnICovCisJICAgIHJlcyA9IGZjdChmb3JtKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogRnJvbSBub3cgb24sIGV2ZXJ5dGhpbmcgbXVzdCBiZSBlZGl0YWJsZSAqLworCSAgaWYgKGZvcm0tPmN1cnJlbnQtPm9wdHMgJiBPX0VESVQpCisJICAgIHsKKwkgICAgICByZXMgPSBmY3QoZm9ybSk7CisJICAgICAgaWYgKHJlcyA9PSBFX09LKQorCQlmb3JtLT5zdGF0dXMgfD0gX1dJTkRPV19NT0RJRklFRDsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9OZXdfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBlcmZvcm0gYSBuZXcgbGluZSByZXF1ZXN0LiBUaGlzIGlzIHJhdGhlciBjb21wbGV4Cit8ICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB0byBvdGhlciByb3V0aW5lcyBpbiB0aGlzIGNvZGUgZHVlIHRvIHRoZQorfCAgICAgICAgICAgICAgICAgICAgcmF0aGVyIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGRlc2NyaXB0aW9uIGluIHRoZQorfCAgICAgICAgICAgICAgICAgICAgbWFudWFscy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAtIG5ldyBsaW5lIG5vdCBhbGxvd2VkCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9OZXdfTGluZShGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpicCwgKnQ7CisgIGJvb2wgTGFzdF9Sb3cgPSAoKGZpZWxkLT5kcm93cyAtIDEpID09IGZvcm0tPmN1cnJvdyk7CisKKyAgVCgoVF9DQUxMRUQoIkZFX05ld19MaW5lKCVwKSIpLCBmb3JtKSk7CisgIGlmIChmb3JtLT5zdGF0dXMgJiBfT1ZMTU9ERSkKKyAgICB7CisgICAgICBpZiAoTGFzdF9Sb3cgJiYKKwkgICghKEdyb3dhYmxlKGZpZWxkKSAmJiAhU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpKSkpCisJeworCSAgaWYgKCEoZm9ybS0+b3B0cyAmIE9fTkxfT1ZFUkxPQUQpKQorCSAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworCSAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworCSAgd2NscnRvZW9sKGZvcm0tPncpOworCSAgLyogd2UgaGF2ZSB0byBzZXQgdGhpcyBoZXJlLCBhbHRob3VnaCBpdCBpcyBhbHNvCisJICAgICBoYW5kbGVkIGluIHRoZSBnZW5lcmljIHJvdXRpbmUuIFRoZSByZWFzb24gaXMsCisJICAgICB0aGF0IEZOX05leHRfRmllbGQgbWF5IGZhaWwsIGJ1dCB0aGUgZm9ybSBpcworCSAgICAgZGVmaW5pdGl2ZWx5IGNoYW5nZWQgKi8KKwkgIGZvcm0tPnN0YXR1cyB8PSBfV0lORE9XX01PRElGSUVEOworCSAgcmV0dXJuQ29kZShJbnRlcl9GaWVsZF9OYXZpZ2F0aW9uKEZOX05leHRfRmllbGQsIGZvcm0pKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKExhc3RfUm93ICYmICFGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJICAgIHsKKwkgICAgICAvKiBOLkIuOiBkdWUgdG8gdGhlIGxvZ2ljIGluIHRoZSAnaWYnLCBMYXN0Um93PT1UUlVFCisJICAgICAgICAgbWVhbnMgaGVyZSB0aGF0IHRoZSBmaWVsZCBpcyBncm93YWJsZSBhbmQgbm90CisJICAgICAgICAgYSBzaW5nbGUtbGluZSBmaWVsZCAqLworCSAgICAgIHJldHVybkNvZGUoRV9TWVNURU1fRVJST1IpOworCSAgICB9CisJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisJICB3Y2xydG9lb2woZm9ybS0+dyk7CisJICBmb3JtLT5jdXJyb3crKzsKKwkgIGZvcm0tPmN1cmNvbCA9IDA7CisJICBmb3JtLT5zdGF0dXMgfD0gX1dJTkRPV19NT0RJRklFRDsKKwkgIHJldHVybkNvZGUoRV9PSyk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEluc2VydCBNb2RlICovCisgICAgICBpZiAoTGFzdF9Sb3cgJiYKKwkgICEoR3Jvd2FibGUoZmllbGQpICYmICFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkpKQorCXsKKwkgIGlmICghKGZvcm0tPm9wdHMgJiBPX05MX09WRVJMT0FEKSkKKwkgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKwkgIHJldHVybkNvZGUoSW50ZXJfRmllbGRfTmF2aWdhdGlvbihGTl9OZXh0X0ZpZWxkLCBmb3JtKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGJvb2wgTWF5X0RvX0l0ID0gIUxhc3RfUm93ICYmIElzX1RoZXJlX1Jvb21fRm9yX0FfTGluZShmb3JtKTsKKworCSAgaWYgKCEoTWF5X0RvX0l0IHx8IEdyb3dhYmxlKGZpZWxkKSkpCisJICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisJICBpZiAoIU1heV9Eb19JdCAmJiAhRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCSAgICByZXR1cm5Db2RlKEVfU1lTVEVNX0VSUk9SKTsKKworCSAgYnAgPSBBZGRyZXNzX09mX0N1cnJlbnRfUG9zaXRpb25fSW5fQnVmZmVyKGZvcm0pOworCSAgdCA9IEFmdGVyX0VuZF9PZl9EYXRhKGJwLCBmaWVsZC0+ZGNvbHMgLSBmb3JtLT5jdXJjb2wpOworCSAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworCSAgd2NscnRvZW9sKGZvcm0tPncpOworCSAgZm9ybS0+Y3Vycm93Kys7CisJICBmb3JtLT5jdXJjb2wgPSAwOworCSAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworCSAgd2luc2VydGxuKGZvcm0tPncpOworCSAgbXlBREROU1RSKGZvcm0tPncsIGJwLCAoaW50KSh0IC0gYnApKTsKKwkgIGZvcm0tPnN0YXR1cyB8PSBfV0lORE9XX01PRElGSUVEOworCSAgcmV0dXJuQ29kZShFX09LKTsKKwl9CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfSW5zZXJ0X0NoYXJhY3RlcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEluc2VydCBibGFuayBjaGFyYWN0ZXIgYXQgdGhlIGN1cnNvciBwb3NpdGlvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZFX0luc2VydF9DaGFyYWN0ZXIoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgaW50IHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisKKyAgVCgoVF9DQUxMRUQoIkZFX0luc2VydF9DaGFyYWN0ZXIoJXApIiksIGZvcm0pKTsKKyAgaWYgKENoZWNrX0NoYXIoZmllbGQtPnR5cGUsIChpbnQpQ19CTEFOSywgKFR5cGVBcmd1bWVudCAqKShmaWVsZC0+YXJnKSkpCisgICAgeworICAgICAgYm9vbCBUaGVyZV9Jc19Sb29tID0gSXNfVGhlcmVfUm9vbV9Gb3JfQV9DaGFyX0luX0xpbmUoZm9ybSk7CisKKyAgICAgIGlmIChUaGVyZV9Jc19Sb29tIHx8CisJICAoKFNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSAmJiBHcm93YWJsZShmaWVsZCkpKSkKKwl7CisJICBpZiAoIVRoZXJlX0lzX1Jvb20gJiYgIUZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgcmVzdWx0ID0gRV9TWVNURU1fRVJST1I7CisJICBlbHNlCisJICAgIHsKKwkgICAgICB3aW5zY2goZm9ybS0+dywgKGNodHlwZSlDX0JMQU5LKTsKKwkgICAgICByZXN1bHQgPSBXcmFwcGluZ19Ob3RfTmVjZXNzYXJ5X09yX1dyYXBwaW5nX09rKGZvcm0pOworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfSW5zZXJ0X0xpbmUoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBJbnNlcnQgYSBibGFuayBsaW5lIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAtIGxpbmUgY2FuIG5vdCBiZSBpbnNlcnRlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZFX0luc2VydF9MaW5lKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGludCByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCisgIFQoKFRfQ0FMTEVEKCJGRV9JbnNlcnRfTGluZSglcCkiKSwgZm9ybSkpOworICBpZiAoQ2hlY2tfQ2hhcihmaWVsZC0+dHlwZSwgKGludClDX0JMQU5LLCAoVHlwZUFyZ3VtZW50ICopKGZpZWxkLT5hcmcpKSkKKyAgICB7CisgICAgICBib29sIE1heWJlX0RvbmUgPSAoZm9ybS0+Y3Vycm93ICE9IChmaWVsZC0+ZHJvd3MgLSAxKSkgJiYKKyAgICAgIElzX1RoZXJlX1Jvb21fRm9yX0FfTGluZShmb3JtKTsKKworICAgICAgaWYgKCFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgJiYKKwkgIChNYXliZV9Eb25lIHx8IEdyb3dhYmxlKGZpZWxkKSkpCisJeworCSAgaWYgKCFNYXliZV9Eb25lICYmICFGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJICAgIHJlc3VsdCA9IEVfU1lTVEVNX0VSUk9SOworCSAgZWxzZQorCSAgICB7CisJICAgICAgZm9ybS0+Y3VyY29sID0gMDsKKwkgICAgICB3aW5zZXJ0bG4oZm9ybS0+dyk7CisJICAgICAgcmVzdWx0ID0gRV9PSzsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZFX0RlbGV0ZV9DaGFyYWN0ZXIoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEZWxldGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfRGVsZXRlX0NoYXJhY3RlcihGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRkVfRGVsZXRlX0NoYXJhY3RlciglcCkiKSwgZm9ybSkpOworICBEZWxldGVDaGFyKGZvcm0pOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfRGVsZXRlX1ByZXZpb3VzKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRGVsZXRlIGNoYXJhY3RlciBiZWZvcmUgY3Vyc29yLiBBZ2FpbiB0aGlzIGlzIGEgcmF0aGVyCit8ICAgICAgICAgICAgICAgICAgICBkaWZmaWN1bHQgcGllY2UgY29tcGFyZWQgdG8gb3RoZXJzIGR1ZSB0byB0aGUgb3ZlcmxvYWRpbmcKK3wgICAgICAgICAgICAgICAgICAgIHNlbWFudGljcyBvZiBiYWNrc3BhY2UuCit8ICAgICAgICAgICAgICAgICAgICBOLkIuOiBUaGUgY2FzZSBvZiBvdmVybG9hZGVkIEJTIG9uIGZpcnN0IGZpZWxkIHBvc2l0aW9uCit8ICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHJlYWR5IGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgcm91dGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gQ2hhcmFjdGVyIGNhbid0IGJlIGRlbGV0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9EZWxldGVfUHJldmlvdXMoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKworICBUKChUX0NBTExFRCgiRkVfRGVsZXRlX1ByZXZpb3VzKCVwKSIpLCBmb3JtKSk7CisgIGlmIChGaXJzdF9Qb3NpdGlvbl9Jbl9DdXJyZW50X0ZpZWxkKGZvcm0pKQorICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisKKyAgaWYgKCgtLShmb3JtLT5jdXJjb2wpKSA8IDApCisgICAgeworICAgICAgRklFTERfQ0VMTCAqdGhpc19saW5lLCAqcHJldl9saW5lLCAqcHJldl9lbmQsICp0aGlzX2VuZDsKKyAgICAgIGludCB0aGlzX3JvdyA9IGZvcm0tPmN1cnJvdzsKKworICAgICAgZm9ybS0+Y3VyY29sKys7CisgICAgICBpZiAoZm9ybS0+c3RhdHVzICYgX09WTE1PREUpCisJcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKworICAgICAgcHJldl9saW5lID0gQWRkcmVzc19PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLCAoZm9ybS0+Y3Vycm93IC0gMSkpOworICAgICAgdGhpc19saW5lID0gQWRkcmVzc19PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLCAoZm9ybS0+Y3Vycm93KSk7CisgICAgICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisgICAgICBwcmV2X2VuZCA9IEFmdGVyX0VuZF9PZl9EYXRhKHByZXZfbGluZSwgZmllbGQtPmRjb2xzKTsKKyAgICAgIHRoaXNfZW5kID0gQWZ0ZXJfRW5kX09mX0RhdGEodGhpc19saW5lLCBmaWVsZC0+ZGNvbHMpOworICAgICAgaWYgKChpbnQpKHRoaXNfZW5kIC0gdGhpc19saW5lKSA+CisJICAoZmllbGQtPmNvbHMgLSAoaW50KShwcmV2X2VuZCAtIHByZXZfbGluZSkpKQorCXJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisgICAgICB3ZGVsZXRlbG4oZm9ybS0+dyk7CisgICAgICBBZGp1c3RfQ3Vyc29yX1Bvc2l0aW9uKGZvcm0sIHByZXZfZW5kKTsKKyAgICAgIC8qCisgICAgICAgKiBJZiB3ZSBkaWQgbm90IHJlYWxseSBtb3ZlIHRvIHRoZSBwcmV2aW91cyBsaW5lLCBoZWxwIHRoZSB1c2VyIGEKKyAgICAgICAqIGxpdHRsZS4gIEl0IGlzIGhvd2V2ZXIgYSBsaXR0bGUgaW5jb25zaXN0ZW50LiAgTm9ybWFsbHksIHdoZW4KKyAgICAgICAqIGJhY2tzcGFjaW5nIGFyb3VuZCB0aGUgcG9pbnQgd2hlcmUgdGV4dCB3cmFwcyB0byBhIG5ldyBsaW5lIGluIGEKKyAgICAgICAqIG11bHRpLWxpbmUgZm9ybSwgd2UgYWJzb3JiIG9uZSBrZXlzdHJva2UgZm9yIHRoZSB3cmFwcGluZyBwb2ludC4gIFRoYXQKKyAgICAgICAqIGlzIGNvbnNpc3RlbnQgd2l0aCBTVnI0IGZvcm1zLiAgSG93ZXZlciwgU1ZyNCBkb2VzIG5vdCBhbGxvdyB0eXBpbmcKKyAgICAgICAqIGludG8gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBmaWVsZCwgYW5kIHJlcXVpcmVzIHRoZSB1c2VyIHRvIGVudGVyIGEKKyAgICAgICAqIG5ld2xpbmUgdG8gbW92ZSB0byB0aGUgbmV4dCBsaW5lLiAgVGhlcmVmb3JlIGl0IGNhbiBjb25zaXN0ZW50bHkgZWF0CisgICAgICAgKiB0aGF0IGtleXN0cm9rZS4gIFNpbmNlIG5jdXJzZXMgYWxsb3dzIHRoZSBsYXN0IGNvbHVtbiwgaXQgd3JhcHMKKyAgICAgICAqIGF1dG9tYXRpY2FsbHkgKGdpdmVuIHRoZSBwcm9wZXIgb3B0aW9ucykuICBCdXQgd2UgY2Fubm90IGVhdCB0aGUKKyAgICAgICAqIGtleXN0cm9rZSB0byBiYWNrIG92ZXIgdGhlIHdyYXBwaW5nIHBvaW50LCBzaW5jZSB0aGF0IHdvdWxkIHB1dCB0aGUKKyAgICAgICAqIGN1cnNvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGZvcm0gZmllbGQuICBJbiB0aGlzIGNhc2UsIGp1c3QgZGVsZXRlIHRoZQorICAgICAgICogY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgdGhlIGZpZWxkLgorICAgICAgICovCisgICAgICBpZiAoZm9ybS0+Y3Vycm93ID09IHRoaXNfcm93ICYmIHRoaXNfcm93ID4gMCkKKwl7CisJICBmb3JtLT5jdXJyb3cgLT0gMTsKKwkgIGZvcm0tPmN1cmNvbCA9IGZpZWxkLT5kY29scyAtIDE7CisJICBEZWxldGVDaGFyKGZvcm0pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisJICBteUFERE5TVFIoZm9ybS0+dywgdGhpc19saW5lLCAoaW50KSh0aGlzX2VuZCAtIHRoaXNfbGluZSkpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBEZWxldGVDaGFyKGZvcm0pOworICAgIH0KKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZFX0RlbGV0ZV9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRGVsZXRlIGxpbmUgYXQgY3Vyc29yIHBvc2l0aW9uLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfRGVsZXRlX0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZFX0RlbGV0ZV9MaW5lKCVwKSIpLCBmb3JtKSk7CisgIGZvcm0tPmN1cmNvbCA9IDA7CisgIHdkZWxldGVsbihmb3JtLT53KTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZFX0RlbGV0ZV9Xb3JkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRGVsZXRlIHdvcmQgYXQgY3Vyc29yIHBvc2l0aW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgLSBmYWlsdXJlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfRGVsZXRlX1dvcmQoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgRklFTERfQ0VMTCAqYnAgPSBBZGRyZXNzX09mX0N1cnJlbnRfUm93X0luX0J1ZmZlcihmb3JtKTsKKyAgRklFTERfQ0VMTCAqZXAgPSBicCArIGZpZWxkLT5kY29sczsKKyAgRklFTERfQ0VMTCAqY3AgPSBicCArIGZvcm0tPmN1cmNvbDsKKyAgRklFTERfQ0VMTCAqczsKKworICBUKChUX0NBTExFRCgiRkVfRGVsZXRlX1dvcmQoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICBpZiAoSVNCTEFOSygqY3ApKQorICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CS8qIG5vdCBpbiB3b3JkICovCisKKyAgLyogbW92ZSBjdXJzb3IgdG8gYmVnaW4gb2Ygd29yZCBhbmQgZXJhc2UgdG8gZW5kIG9mIHNjcmVlbi1saW5lICovCisgIEFkanVzdF9DdXJzb3JfUG9zaXRpb24oZm9ybSwKKwkJCSBBZnRlcl9MYXN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKGJwLCBmb3JtLT5jdXJjb2wpKTsKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICB3Y2xydG9lb2woZm9ybS0+dyk7CisKKyAgLyogc2tpcCBvdmVyIHdvcmQgaW4gYnVmZmVyICovCisgIHMgPSBHZXRfRmlyc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoY3AsIChpbnQpKGVwIC0gY3ApKTsKKyAgLyogdG8gYmVnaW4gb2YgbmV4dCB3b3JkICAgICovCisgIHMgPSBHZXRfU3RhcnRfT2ZfRGF0YShzLCAoaW50KShlcCAtIHMpKTsKKyAgaWYgKChzICE9IGNwKSAmJiAhSVNCTEFOSygqcykpCisgICAgeworICAgICAgLyogY29weSByZW1haW5pbmcgbGluZSB0byB3aW5kb3cgKi8KKyAgICAgIG15QURETlNUUihmb3JtLT53LCBzLCAoaW50KShzIC0gQWZ0ZXJfRW5kX09mX0RhdGEocywgKGludCkoZXAgLSBzKSkpKTsKKyAgICB9CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9DbGVhcl9Ub19FbmRfT2ZfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENsZWFyIHRvIGVuZCBvZiBjdXJyZW50IGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfQ2xlYXJfVG9fRW5kX09mX0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZFX0NsZWFyX1RvX0VuZF9PZl9MaW5lKCVwKSIpLCBmb3JtKSk7CisgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgd2NscnRvZW9sKGZvcm0tPncpOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfQ2xlYXJfVG9fRW5kX09mX0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2xlYXIgdG8gZW5kIG9mIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZFX0NsZWFyX1RvX0VuZF9PZl9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRkVfQ2xlYXJfVG9fRW5kX09mX0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgd2NscnRvYm90KGZvcm0tPncpOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfQ2xlYXJfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDbGVhciBlbnRpcmUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfQ2xlYXJfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZFX0NsZWFyX0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIGZvcm0tPmN1cnJvdyA9IGZvcm0tPmN1cmNvbCA9IDA7CisgIHdlcmFzZShmb3JtLT53KTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFTkQgb2YgRmllbGQgRWRpdGluZyByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFZGl0IE1vZGUgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRU1fT3ZlcmxheV9Nb2RlKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3dpdGNoIHRvIG92ZXJsYXkgbW9kZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitFTV9PdmVybGF5X01vZGUoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkVNX092ZXJsYXlfTW9kZSglcCkiKSwgZm9ybSkpOworICBmb3JtLT5zdGF0dXMgfD0gX09WTE1PREU7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBFTV9JbnNlcnRfTW9kZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFN3aXRjaCB0byBpbnNlcnQgbW9kZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0VNX0luc2VydF9Nb2RlKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJFTV9JbnNlcnRfTW9kZSglcCkiKSwgZm9ybSkpOworICBmb3JtLT5zdGF0dXMgJj0gfl9PVkxNT0RFOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRU5EIG9mIEVkaXQgTW9kZSByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIZWxwZXIgcm91dGluZXMgZm9yIENob2ljZSBSZXF1ZXN0cworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgTmV4dF9DaG9pY2UoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKiB0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUFyZ3VtZW50ICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBuZXh0IGZpZWxkIGNob2ljZS4gRm9yIGxpbmtlZCB0eXBlcyB0aGlzIGlzCit8ICAgICAgICAgICAgICAgICAgICBkb25lIHJlY3Vyc2l2ZWx5LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgICAtIG5leHQgY2hvaWNlIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgLSBjb3VsZG4ndCByZXRyaWV2ZSBuZXh0IGNob2ljZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitOZXh0X0Nob2ljZShGSUVMRFRZUEUgKnR5cCwgRklFTEQgKmZpZWxkLCBUeXBlQXJndW1lbnQgKmFyZ3ApCit7CisgIGlmICghdHlwIHx8ICEodHlwLT5zdGF0dXMgJiBfSEFTX0NIT0lDRSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmICh0eXAtPnN0YXR1cyAmIF9MSU5LRURfVFlQRSkKKyAgICB7CisgICAgICBhc3NlcnQoYXJncCk7CisgICAgICByZXR1cm4gKAorCSAgICAgICBOZXh0X0Nob2ljZSh0eXAtPmxlZnQsIGZpZWxkLCBhcmdwLT5sZWZ0KSB8fAorCSAgICAgICBOZXh0X0Nob2ljZSh0eXAtPnJpZ2h0LCBmaWVsZCwgYXJncC0+cmlnaHQpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBhc3NlcnQodHlwLT5uZXh0KTsKKyAgICAgIHJldHVybiB0eXAtPm5leHQoZmllbGQsICh2b2lkICopYXJncCk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIFByZXZpb3VzX0Nob2ljZSgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKiB0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQXJndW1lbnQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIHByZXZpb3VzIGZpZWxkIGNob2ljZS4gRm9yIGxpbmtlZCB0eXBlcyB0aGlzCit8ICAgICAgICAgICAgICAgICAgICBpcyBkb25lIHJlY3Vyc2l2ZWx5LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgICAtIHByZXZpb3VzIGNob2ljZSBzdWNjZXNzZnVsbHkgcmV0cmlldmVkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgIC0gY291bGRuJ3QgcmV0cmlldmUgcHJldmlvdXMgY2hvaWNlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK1ByZXZpb3VzX0Nob2ljZShGSUVMRFRZUEUgKnR5cCwgRklFTEQgKmZpZWxkLCBUeXBlQXJndW1lbnQgKmFyZ3ApCit7CisgIGlmICghdHlwIHx8ICEodHlwLT5zdGF0dXMgJiBfSEFTX0NIT0lDRSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmICh0eXAtPnN0YXR1cyAmIF9MSU5LRURfVFlQRSkKKyAgICB7CisgICAgICBhc3NlcnQoYXJncCk7CisgICAgICByZXR1cm4gKAorCSAgICAgICBQcmV2aW91c19DaG9pY2UodHlwLT5sZWZ0LCBmaWVsZCwgYXJncC0+bGVmdCkgfHwKKwkgICAgICAgUHJldmlvdXNfQ2hvaWNlKHR5cC0+cmlnaHQsIGZpZWxkLCBhcmdwLT5yaWdodCkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFzc2VydCh0eXAtPnByZXYpOworICAgICAgcmV0dXJuIHR5cC0+cHJldihmaWVsZCwgKHZvaWQgKilhcmdwKTsKKyAgICB9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRW5kIG9mIEhlbHBlciByb3V0aW5lcyBmb3IgQ2hvaWNlIFJlcXVlc3RzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJvdXRpbmVzIGZvciBDaG9pY2UgUmVxdWVzdHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgQ1JfTmV4dF9DaG9pY2UoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIG5leHQgZmllbGQgY2hvaWNlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIG5leHQgY2hvaWNlIGNvdWxkbid0IGJlIHJldHJpZXZlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0NSX05leHRfQ2hvaWNlKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgVCgoVF9DQUxMRUQoIkNSX05leHRfQ2hvaWNlKCVwKSIpLCBmb3JtKSk7CisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgcmV0dXJuQ29kZSgoTmV4dF9DaG9pY2UoZmllbGQtPnR5cGUsIGZpZWxkLCAoVHlwZUFyZ3VtZW50ICopKGZpZWxkLT5hcmcpKSkKKwkgICAgID8gRV9PSworCSAgICAgOiBFX1JFUVVFU1RfREVOSUVEKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IENSX1ByZXZpb3VzX0Nob2ljZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgcHJldmlvdXMgZmllbGQgY2hvaWNlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIHByZXYuIGNob2ljZSBjb3VsZG4ndCBiZSByZXRyaWV2ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitDUl9QcmV2aW91c19DaG9pY2UoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKworICBUKChUX0NBTExFRCgiQ1JfUHJldmlvdXNfQ2hvaWNlKCVwKSIpLCBmb3JtKSk7CisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgcmV0dXJuQ29kZSgoUHJldmlvdXNfQ2hvaWNlKGZpZWxkLT50eXBlLCBmaWVsZCwgKFR5cGVBcmd1bWVudCAqKShmaWVsZC0+YXJnKSkpCisJICAgICA/IEVfT0sKKwkgICAgIDogRV9SRVFVRVNUX0RFTklFRCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRW5kIG9mIFJvdXRpbmVzIGZvciBDaG9pY2UgUmVxdWVzdHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSGVscGVyIHJvdXRpbmVzIGZvciBGaWVsZCBWYWxpZGF0aW9ucy4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX0ZpZWxkKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICogdHlwLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVBcmd1bWVudCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayB0aGUgZmllbGQgYWNjb3JkaW5nIHRvIGl0cyBmaWVsZHR5cGUgYW5kIGl0cworfCAgICAgICAgICAgICAgICAgICAgYWN0dWFsIGFyZ3VtZW50cy4gRm9yIGxpbmtlZCBmaWVsZHR5cGVzIHRoaXMgaXMgZG9uZQorfCAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHkuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgICAgIC0gZmllbGQgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgICAgLSBmaWVsZCBpcyBpbnZhbGlkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19GaWVsZChGSUVMRFRZUEUgKnR5cCwgRklFTEQgKmZpZWxkLCBUeXBlQXJndW1lbnQgKmFyZ3ApCit7CisgIGlmICh0eXApCisgICAgeworICAgICAgaWYgKGZpZWxkLT5vcHRzICYgT19OVUxMT0spCisJeworCSAgRklFTERfQ0VMTCAqYnAgPSBmaWVsZC0+YnVmOworCisJICBhc3NlcnQoYnApOworCSAgd2hpbGUgKElTQkxBTksoKmJwKSkKKwkgICAgeworCSAgICAgIGJwKys7CisJICAgIH0KKwkgIGlmIChDaGFyT2YoKmJwKSA9PSAwKQorCSAgICByZXR1cm4gVFJVRTsKKwl9CisKKyAgICAgIGlmICh0eXAtPnN0YXR1cyAmIF9MSU5LRURfVFlQRSkKKwl7CisJICBhc3NlcnQoYXJncCk7CisJICByZXR1cm4gKAorCQkgICBDaGVja19GaWVsZCh0eXAtPmxlZnQsIGZpZWxkLCBhcmdwLT5sZWZ0KSB8fAorCQkgICBDaGVja19GaWVsZCh0eXAtPnJpZ2h0LCBmaWVsZCwgYXJncC0+cmlnaHQpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHR5cC0+ZmNoZWNrKQorCSAgICByZXR1cm4gdHlwLT5mY2hlY2soZmllbGQsICh2b2lkICopYXJncCk7CisJfQorICAgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbihGT1JNICogZm9ybSApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSB0aGUgY3VycmVudCBmaWVsZCBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gZmllbGQgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gZmllbGQgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbihGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQ7CisKKyAgZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgaWYgKChmb3JtLT5zdGF0dXMgJiBfRkNIRUNLX1JFUVVJUkVEKSB8fAorICAgICAgKCEoZmllbGQtPm9wdHMgJiBPX1BBU1NPSykpKQorICAgIHsKKyAgICAgIGlmICghQ2hlY2tfRmllbGQoZmllbGQtPnR5cGUsIGZpZWxkLCAoVHlwZUFyZ3VtZW50ICopKGZpZWxkLT5hcmcpKSkKKwlyZXR1cm4gRkFMU0U7CisgICAgICBmb3JtLT5zdGF0dXMgJj0gfl9GQ0hFQ0tfUkVRVUlSRUQ7CisgICAgICBmaWVsZC0+c3RhdHVzIHw9IF9DSEFOR0VEOworICAgICAgU3luY2hyb25pemVfTGlua2VkX0ZpZWxkcyhmaWVsZCk7CisgICAgfQorICByZXR1cm4gVFJVRTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2YgSGVscGVyIHJvdXRpbmVzIGZvciBGaWVsZCBWYWxpZGF0aW9ucy4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUm91dGluZXMgZm9yIEZpZWxkIFZhbGlkYXRpb24uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZWX1ZhbGlkYXRpb24oRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSB0aGUgY3VycmVudCBmaWVsZCBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBmaWVsZCB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRV9JTlZBTElEX0ZJRUxEICAtIGZpZWxkIG5vdCB2YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZWX1ZhbGlkYXRpb24oRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZWX1ZhbGlkYXRpb24oJXApIiksIGZvcm0pKTsKKyAgaWYgKF9uY19JbnRlcm5hbF9WYWxpZGF0aW9uKGZvcm0pKQorICAgIHJldHVybkNvZGUoRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm5Db2RlKEVfSU5WQUxJRF9GSUVMRCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRW5kIG9mIHJvdXRpbmVzIGZvciBGaWVsZCBWYWxpZGF0aW9uLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIZWxwZXIgcm91dGluZXMgZm9yIEludGVyLUZpZWxkIE5hdmlnYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqTmV4dF9GaWVsZF9Pbl9QYWdlKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIG5leHQgZmllbGQgYWZ0ZXIgdGhlIGdpdmVuIGZpZWxkIG9uIHRoZSBjdXJyZW50Cit8ICAgICAgICAgICAgICAgICAgICBwYWdlLiBUaGUgb3JkZXIgb2YgZmllbGRzIGlzIHRoZSBvbmUgZGVmaW5lZCBieSB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkcyBhcnJheS4gT25seSB2aXNpYmxlIGFuZCBhY3RpdmUgZmllbGRzIGFyZQorfCAgICAgICAgICAgICAgICAgICAgY291bnRlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIG5leHQgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEICoKK05leHRfRmllbGRfT25fUGFnZShGSUVMRCAqZmllbGQpCit7CisgIEZPUk0gKmZvcm0gPSBmaWVsZC0+Zm9ybTsKKyAgRklFTEQgKipmaWVsZF9vbl9wYWdlID0gJmZvcm0tPmZpZWxkW2ZpZWxkLT5pbmRleF07CisgIEZJRUxEICoqZmlyc3Rfb25fcGFnZSA9ICZmb3JtLT5maWVsZFtmb3JtLT5wYWdlW2Zvcm0tPmN1cnBhZ2VdLnBtaW5dOworICBGSUVMRCAqKmxhc3Rfb25fcGFnZSA9ICZmb3JtLT5maWVsZFtmb3JtLT5wYWdlW2Zvcm0tPmN1cnBhZ2VdLnBtYXhdOworCisgIGRvCisgICAgeworICAgICAgZmllbGRfb25fcGFnZSA9CisJKGZpZWxkX29uX3BhZ2UgPT0gbGFzdF9vbl9wYWdlKSA/IGZpcnN0X29uX3BhZ2UgOiBmaWVsZF9vbl9wYWdlICsgMTsKKyAgICAgIGlmIChGaWVsZF9Jc19TZWxlY3RhYmxlKCpmaWVsZF9vbl9wYWdlKSkKKwlicmVhazsKKyAgICB9CisgIHdoaWxlIChmaWVsZCAhPSAoKmZpZWxkX29uX3BhZ2UpKTsKKyAgcmV0dXJuICgqZmllbGRfb25fcGFnZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRklFTEQqIF9uY19GaXJzdF9BY3RpdmVfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIGZpcnN0IGFjdGl2ZSBmaWVsZCBvbiB0aGUgY3VycmVudCBwYWdlLAorfCAgICAgICAgICAgICAgICAgICAgaWYgdGhlcmUgYXJlIHN1Y2guIElmIHRoZXJlIGFyZSBub25lLCBnZXQgdGhlIGZpcnN0Cit8ICAgICAgICAgICAgICAgICAgICB2aXNpYmxlIGZpZWxkIG9uIHRoZSBwYWdlLiBJZiB0aGVyZSBhcmUgYWxzbyBub25lLAorfCAgICAgICAgICAgICAgICAgICAgd2UgcmV0dXJuIHRoZSBmaXJzdCBmaWVsZCBvbiBwYWdlIGFuZCBob3BlIHRoZSBiZXN0LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBjYWxjdWxhdGVkIGZpZWxkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKEZJRUxEICopCitfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICoqbGFzdF9vbl9wYWdlID0gJmZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1heF07CisgIEZJRUxEICpwcm9wb3NlZCA9IE5leHRfRmllbGRfT25fUGFnZSgqbGFzdF9vbl9wYWdlKTsKKworICBpZiAocHJvcG9zZWQgPT0gKmxhc3Rfb25fcGFnZSkKKyAgICB7CisgICAgICAvKiB0aGVyZSBtaWdodCBiZSB0aGUgc3BlY2lhbCBzaXR1YXRpb24sIHdoZXJlIHRoZXJlIGlzIG5vCisgICAgICAgICBhY3RpdmUgYW5kIHZpc2libGUgZmllbGQgb24gdGhlIGN1cnJlbnQgcGFnZS4gV2UgdGhlbiBzZWxlY3QKKyAgICAgICAgIHRoZSBmaXJzdCB2aXNpYmxlIGZpZWxkIG9uIHRoaXMgcmVhZG9ubHkgcGFnZQorICAgICAgICovCisgICAgICBpZiAoRmllbGRfSXNfTm90X1NlbGVjdGFibGUocHJvcG9zZWQpKQorCXsKKwkgIEZJRUxEICoqZmllbGQgPSAmZm9ybS0+ZmllbGRbcHJvcG9zZWQtPmluZGV4XTsKKwkgIEZJRUxEICoqZmlyc3QgPSAmZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWluXTsKKworCSAgZG8KKwkgICAgeworCSAgICAgIGZpZWxkID0gKGZpZWxkID09IGxhc3Rfb25fcGFnZSkgPyBmaXJzdCA6IGZpZWxkICsgMTsKKwkgICAgICBpZiAoKCgqZmllbGQpLT5vcHRzICYgT19WSVNJQkxFKSkKKwkJYnJlYWs7CisJICAgIH0KKwkgIHdoaWxlIChwcm9wb3NlZCAhPSAoKmZpZWxkKSk7CisKKwkgIHByb3Bvc2VkID0gKmZpZWxkOworCisJICBpZiAoKHByb3Bvc2VkID09ICpsYXN0X29uX3BhZ2UpICYmICEocHJvcG9zZWQtPm9wdHMgJiBPX1ZJU0lCTEUpKQorCSAgICB7CisJICAgICAgLyogVGhpcyBtZWFucywgdGhlcmUgaXMgYWxzbyBubyB2aXNpYmxlIGZpZWxkIG9uIHRoZSBwYWdlLgorCSAgICAgICAgIFNvIHdlIHByb3Bvc2UgdGhlIGZpcnN0IG9uZSBhbmQgaG9wZSB0aGUgdmVyeSBiZXN0Li4uCisJICAgICAgICAgU29tZSB2ZXJ5IGNsZXZlciB1c2VyIGhhcyBkZXNpZ25lZCBhIHJlYWRvbmx5IGFuZCBpbnZpc2libGUKKwkgICAgICAgICBwYWdlIG9uIHRoaXMgZm9ybS4KKwkgICAgICAgKi8KKwkgICAgICBwcm9wb3NlZCA9ICpmaXJzdDsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiAocHJvcG9zZWQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqUHJldmlvdXNfRmllbGRfT25fUGFnZShGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBwcmV2aW91cyBmaWVsZCBiZWZvcmUgdGhlIGdpdmVuIGZpZWxkIG9uIHRoZQorfCAgICAgICAgICAgICAgICAgICAgY3VycmVudCBwYWdlLiBUaGUgb3JkZXIgb2YgZmllbGRzIGlzIHRoZSBvbmUgZGVmaW5lZCBieQorfCAgICAgICAgICAgICAgICAgICAgdGhlIGZpZWxkcyBhcnJheS4gT25seSB2aXNpYmxlIGFuZCBhY3RpdmUgZmllbGRzIGFyZQorfCAgICAgICAgICAgICAgICAgICAgY291bnRlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIGZpZWxkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfSU5MSU5FIHN0YXRpYyBGSUVMRCAqCitQcmV2aW91c19GaWVsZF9Pbl9QYWdlKEZJRUxEICpmaWVsZCkKK3sKKyAgRk9STSAqZm9ybSA9IGZpZWxkLT5mb3JtOworICBGSUVMRCAqKmZpZWxkX29uX3BhZ2UgPSAmZm9ybS0+ZmllbGRbZmllbGQtPmluZGV4XTsKKyAgRklFTEQgKipmaXJzdF9vbl9wYWdlID0gJmZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1pbl07CisgIEZJRUxEICoqbGFzdF9vbl9wYWdlID0gJmZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1heF07CisKKyAgZG8KKyAgICB7CisgICAgICBmaWVsZF9vbl9wYWdlID0KKwkoZmllbGRfb25fcGFnZSA9PSBmaXJzdF9vbl9wYWdlKSA/IGxhc3Rfb25fcGFnZSA6IGZpZWxkX29uX3BhZ2UgLSAxOworICAgICAgaWYgKEZpZWxkX0lzX1NlbGVjdGFibGUoKmZpZWxkX29uX3BhZ2UpKQorCWJyZWFrOworICAgIH0KKyAgd2hpbGUgKGZpZWxkICE9ICgqZmllbGRfb25fcGFnZSkpOworCisgIHJldHVybiAoKmZpZWxkX29uX3BhZ2UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqU29ydGVkX05leHRfRmllbGQoRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgbmV4dCBmaWVsZCBhZnRlciB0aGUgZ2l2ZW4gZmllbGQgb24gdGhlIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIHBhZ2UuIFRoZSBvcmRlciBvZiBmaWVsZHMgaXMgdGhlIG9uZSBkZWZpbmVkIGJ5IHRoZQorfCAgICAgICAgICAgICAgICAgICAgKHJvdyxjb2x1bW4pIGdlb21ldHJ5LCByb3dzIGFyZSBtYWpvci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIG5leHQgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEICoKK1NvcnRlZF9OZXh0X0ZpZWxkKEZJRUxEICpmaWVsZCkKK3sKKyAgRklFTEQgKmZpZWxkX29uX3BhZ2UgPSBmaWVsZDsKKworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPSBmaWVsZF9vbl9wYWdlLT5zbmV4dDsKKyAgICAgIGlmIChGaWVsZF9Jc19TZWxlY3RhYmxlKGZpZWxkX29uX3BhZ2UpKQorCWJyZWFrOworICAgIH0KKyAgd2hpbGUgKGZpZWxkX29uX3BhZ2UgIT0gZmllbGQpOworCisgIHJldHVybiAoZmllbGRfb25fcGFnZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpTb3J0ZWRfUHJldmlvdXNfRmllbGQoRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgcHJldmlvdXMgZmllbGQgYmVmb3JlIHRoZSBnaXZlbiBmaWVsZCBvbiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgcGFnZS4gVGhlIG9yZGVyIG9mIGZpZWxkcyBpcyB0aGUgb25lIGRlZmluZWQKK3wgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSAocm93LGNvbHVtbikgZ2VvbWV0cnksIHJvd3MgYXJlIG1ham9yLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgcHJldmlvdXMgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEICoKK1NvcnRlZF9QcmV2aW91c19GaWVsZChGSUVMRCAqZmllbGQpCit7CisgIEZJRUxEICpmaWVsZF9vbl9wYWdlID0gZmllbGQ7CisKKyAgZG8KKyAgICB7CisgICAgICBmaWVsZF9vbl9wYWdlID0gZmllbGRfb25fcGFnZS0+c3ByZXY7CisgICAgICBpZiAoRmllbGRfSXNfU2VsZWN0YWJsZShmaWVsZF9vbl9wYWdlKSkKKwlicmVhazsKKyAgICB9CisgIHdoaWxlIChmaWVsZF9vbl9wYWdlICE9IGZpZWxkKTsKKworICByZXR1cm4gKGZpZWxkX29uX3BhZ2UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqTGVmdF9OZWlnaGJvcl9GaWVsZChGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBsZWZ0IG5laWdoYm9yIG9mIHRoZSBmaWVsZCBvbiB0aGUgc2FtZSBsaW5lCit8ICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNhbWUgcGFnZS4gQ3ljbGVzIHRocm91Z2ggdGhlIGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGxlZnQgbmVpZ2hib3IgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEICoKK0xlZnRfTmVpZ2hib3JfRmllbGQoRklFTEQgKmZpZWxkKQoreworICBGSUVMRCAqZmllbGRfb25fcGFnZSA9IGZpZWxkOworCisgIC8qIEZvciBhIGZpZWxkIHRoYXQgaGFzIHJlYWxseSBhIGxlZnQgbmVpZ2hib3IsIHRoZSB3aGlsZSBjbGF1c2UKKyAgICAgaW1tZWRpYXRlbHkgZmFpbHMgYW5kIHRoZSBsb29wIGlzIGxlZnQsIHBvc2l0aW9uZWQgYXQgdGhlIHJpZ2h0CisgICAgIG5laWdoYm9yLiBPdGhlcndpc2Ugd2UgY3ljbGUgYmFja3dhcmRzIHRocm91Z2ggdGhlIHNvcnRlZCBmaWVsZCBsaXN0CisgICAgIHVudGlsIHdlIGVudGVyIHRoZSBzYW1lIGxpbmUgKGZyb20gdGhlIHJpZ2h0IGVuZCkuCisgICAqLworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPSBTb3J0ZWRfUHJldmlvdXNfRmllbGQoZmllbGRfb25fcGFnZSk7CisgICAgfQorICB3aGlsZSAoZmllbGRfb25fcGFnZS0+ZnJvdyAhPSBmaWVsZC0+ZnJvdyk7CisKKyAgcmV0dXJuIChmaWVsZF9vbl9wYWdlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgRklFTEQgKlJpZ2h0X05laWdoYm9yX0ZpZWxkKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIHJpZ2h0IG5laWdoYm9yIG9mIHRoZSBmaWVsZCBvbiB0aGUgc2FtZSBsaW5lCit8ICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNhbWUgcGFnZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gcmlnaHQgbmVpZ2hib3IgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEICoKK1JpZ2h0X05laWdoYm9yX0ZpZWxkKEZJRUxEICpmaWVsZCkKK3sKKyAgRklFTEQgKmZpZWxkX29uX3BhZ2UgPSBmaWVsZDsKKworICAvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExlZnRfTmVpZ2hib3JfRmllbGQgdG8gdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgKi8KKyAgZG8KKyAgICB7CisgICAgICBmaWVsZF9vbl9wYWdlID0gU29ydGVkX05leHRfRmllbGQoZmllbGRfb25fcGFnZSk7CisgICAgfQorICB3aGlsZSAoZmllbGRfb25fcGFnZS0+ZnJvdyAhPSBmaWVsZC0+ZnJvdyk7CisKKyAgcmV0dXJuIChmaWVsZF9vbl9wYWdlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgRklFTEQgKlVwcGVyX05laWdoYm9yX0ZpZWxkKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBCZWNhdXNlIG9mIHRoZSByb3ctbWFqb3IgbmF0dXJlIG9mIHNvcnRpbmcgdGhlIGZpZWxkcywKK3wgICAgICAgICAgICAgICAgICAgIGl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIGRlZmluZSB3aGF0cyB0aGUgdXBwZXIgbmVpZ2hib3IKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIHJlYWxseSBtZWFucy4gV2UgZGVmaW5lIHRoYXQgaXQgbXVzdCBiZSBvbiBhCit8ICAgICAgICAgICAgICAgICAgICAncHJldmlvdXMnIGxpbmUgKGN5Y2xpYyBvcmRlciEpIGFuZCBpcyB0aGUgcmlnaHRtb3N0Cit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCBsYXlpbmcgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZ2l2ZW4gZmllbGQuIElmCit8ICAgICAgICAgICAgICAgICAgICB0aGlzIHNldCBpcyBlbXB0eSwgd2UgdGFrZSB0aGUgZmlyc3QgZmllbGQgb24gdGhlIGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIHRoZSB1cHBlciBuZWlnaGJvciBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgRklFTEQgKgorVXBwZXJfTmVpZ2hib3JfRmllbGQoRklFTEQgKmZpZWxkKQoreworICBGSUVMRCAqZmllbGRfb25fcGFnZSA9IGZpZWxkOworICBpbnQgZnJvdyA9IGZpZWxkLT5mcm93OworICBpbnQgZmNvbCA9IGZpZWxkLT5mY29sOworCisgIC8qIFdhbGsgYmFjayB0byB0aGUgJ3ByZXZpb3VzJyBsaW5lLiBUaGUgc2Vjb25kIHRlcm0gaW4gdGhlIHdoaWxlIGNsYXVzZQorICAgICBqdXN0IGd1YXJhbnRlZXMgdGhhdCB3ZSBzdG9wIGlmIHdlIGN5Y2xlZCB0aHJvdWdoIHRoZSBsaW5lIGJlY2F1c2UKKyAgICAgdGhlcmUgbWlnaHQgYmUgbm8gJ3ByZXZpb3VzJyBsaW5lIGlmIHRoZSBwYWdlIGhhcyBqdXN0IG9uZSBsaW5lLgorICAgKi8KKyAgZG8KKyAgICB7CisgICAgICBmaWVsZF9vbl9wYWdlID0gU29ydGVkX1ByZXZpb3VzX0ZpZWxkKGZpZWxkX29uX3BhZ2UpOworICAgIH0KKyAgd2hpbGUgKGZpZWxkX29uX3BhZ2UtPmZyb3cgPT0gZnJvdyAmJiBmaWVsZF9vbl9wYWdlLT5mY29sICE9IGZjb2wpOworCisgIGlmIChmaWVsZF9vbl9wYWdlLT5mcm93ICE9IGZyb3cpCisgICAgeworICAgICAgLyogV2UgcmVhbGx5IGZvdW5kIGEgJ3ByZXZpb3VzJyBsaW5lLiBXZSBhcmUgcG9zaXRpb25lZCBhdCB0aGUKKyAgICAgICAgIHJpZ2h0bW9zdCBmaWVsZCBvbiB0aGlzIGxpbmUgKi8KKyAgICAgIGZyb3cgPSBmaWVsZF9vbl9wYWdlLT5mcm93OworCisgICAgICAvKiBXZSB3YWxrIHRvIHRoZSBsZWZ0IGFzIGxvbmcgYXMgd2UgYXJlIHJlYWxseSByaWdodCBvZiB0aGUKKyAgICAgICAgIGZpZWxkLiAqLworICAgICAgd2hpbGUgKGZpZWxkX29uX3BhZ2UtPmZyb3cgPT0gZnJvdyAmJiBmaWVsZF9vbl9wYWdlLT5mY29sID4gZmNvbCkKKwlmaWVsZF9vbl9wYWdlID0gU29ydGVkX1ByZXZpb3VzX0ZpZWxkKGZpZWxkX29uX3BhZ2UpOworCisgICAgICAvKiBJZiB3ZSB3cmFwcGVkLCBqdXN0IGdvIHRvIHRoZSByaWdodCB3aGljaCBpcyB0aGUgZmlyc3QgZmllbGQgb24KKyAgICAgICAgIHRoZSByb3cgKi8KKyAgICAgIGlmIChmaWVsZF9vbl9wYWdlLT5mcm93ICE9IGZyb3cpCisJZmllbGRfb25fcGFnZSA9IFNvcnRlZF9OZXh0X0ZpZWxkKGZpZWxkX29uX3BhZ2UpOworICAgIH0KKworICByZXR1cm4gKGZpZWxkX29uX3BhZ2UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqRG93bl9OZWlnaGJvcl9GaWVsZChGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQmVjYXVzZSBvZiB0aGUgcm93LW1ham9yIG5hdHVyZSBvZiBzb3J0aW5nIHRoZSBmaWVsZHMsCit8ICAgICAgICAgICAgICAgICAgICBpdHMgbW9yZSBkaWZmaWN1bHQgdG8gZGVmaW5lIHdoYXRzIHRoZSBkb3duIG5laWdoYm9yCit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCByZWFsbHkgbWVhbnMuIFdlIGRlZmluZSB0aGF0IGl0IG11c3QgYmUgb24gYQorfCAgICAgICAgICAgICAgICAgICAgJ25leHQnIGxpbmUgKGN5Y2xpYyBvcmRlciEpIGFuZCBpcyB0aGUgbGVmdG1vc3QKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIGxheWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZ2l2ZW4gZmllbGQuIElmCit8ICAgICAgICAgICAgICAgICAgICB0aGlzIHNldCBpcyBlbXB0eSwgd2UgdGFrZSB0aGUgbGFzdCBmaWVsZCBvbiB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIHVwcGVyIG5laWdoYm9yIGZpZWxkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBGSUVMRCAqCitEb3duX05laWdoYm9yX0ZpZWxkKEZJRUxEICpmaWVsZCkKK3sKKyAgRklFTEQgKmZpZWxkX29uX3BhZ2UgPSBmaWVsZDsKKyAgaW50IGZyb3cgPSBmaWVsZC0+ZnJvdzsKKyAgaW50IGZjb2wgPSBmaWVsZC0+ZmNvbDsKKworICAvKiBXYWxrIGZvcndhcmQgdG8gdGhlICduZXh0JyBsaW5lLiBUaGUgc2Vjb25kIHRlcm0gaW4gdGhlIHdoaWxlIGNsYXVzZQorICAgICBqdXN0IGd1YXJhbnRlZXMgdGhhdCB3ZSBzdG9wIGlmIHdlIGN5Y2xlZCB0aHJvdWdoIHRoZSBsaW5lIGJlY2F1c2UKKyAgICAgdGhlcmUgbWlnaHQgYmUgbm8gJ25leHQnIGxpbmUgaWYgdGhlIHBhZ2UgaGFzIGp1c3Qgb25lIGxpbmUuCisgICAqLworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPSBTb3J0ZWRfTmV4dF9GaWVsZChmaWVsZF9vbl9wYWdlKTsKKyAgICB9CisgIHdoaWxlIChmaWVsZF9vbl9wYWdlLT5mcm93ID09IGZyb3cgJiYgZmllbGRfb25fcGFnZS0+ZmNvbCAhPSBmY29sKTsKKworICBpZiAoZmllbGRfb25fcGFnZS0+ZnJvdyAhPSBmcm93KQorICAgIHsKKyAgICAgIC8qIFdlIHJlYWxseSBmb3VuZCBhICduZXh0JyBsaW5lLiBXZSBhcmUgcG9zaXRpb25lZCBhdCB0aGUgcmlnaHRtb3N0CisgICAgICAgICBmaWVsZCBvbiB0aGlzIGxpbmUgKi8KKyAgICAgIGZyb3cgPSBmaWVsZF9vbl9wYWdlLT5mcm93OworCisgICAgICAvKiBXZSB3YWxrIHRvIHRoZSByaWdodCBhcyBsb25nIGFzIHdlIGFyZSByZWFsbHkgbGVmdCBvZiB0aGUKKyAgICAgICAgIGZpZWxkLiAqLworICAgICAgd2hpbGUgKGZpZWxkX29uX3BhZ2UtPmZyb3cgPT0gZnJvdyAmJiBmaWVsZF9vbl9wYWdlLT5mY29sIDwgZmNvbCkKKwlmaWVsZF9vbl9wYWdlID0gU29ydGVkX05leHRfRmllbGQoZmllbGRfb25fcGFnZSk7CisKKyAgICAgIC8qIElmIHdlIHdyYXBwZWQsIGp1c3QgZ28gdG8gdGhlIGxlZnQgd2hpY2ggaXMgdGhlIGxhc3QgZmllbGQgb24KKyAgICAgICAgIHRoZSByb3cgKi8KKyAgICAgIGlmIChmaWVsZF9vbl9wYWdlLT5mcm93ICE9IGZyb3cpCisJZmllbGRfb25fcGFnZSA9IFNvcnRlZF9QcmV2aW91c19GaWVsZChmaWVsZF9vbl9wYWdlKTsKKyAgICB9CisKKyAgcmV0dXJuIChmaWVsZF9vbl9wYWdlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEludGVyLUZpZWxkIE5hdmlnYXRpb24gcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSW50ZXJfRmllbGRfTmF2aWdhdGlvbigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqIGNvbnN0IGZjdCkgKEZPUk0gKiksCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2VuZXJpYyBiZWhhdmlvciBmb3IgY2hhbmdpbmcgdGhlIGN1cnJlbnQgZmllbGQsIHRoZQorfCAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgbGVmdCBhbmQgYSBuZXcgZmllbGQgaXMgZW50ZXJlZC4gU28gdGhlIGZpZWxkCit8ICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHZhbGlkYXRlZCBhbmQgdGhlIGZpZWxkIGluaXQvdGVybSBob29rcyBtdXN0Cit8ICAgICAgICAgICAgICAgICAgICBiZSBjYWxsZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9JTlZBTElEX0ZJRUxEICAgICAtIGZpZWxkIGlzIGludmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJbnRlcl9GaWVsZF9OYXZpZ2F0aW9uKGludCAoKmNvbnN0IGZjdCkgKEZPUk0gKiksIEZPUk0gKmZvcm0pCit7CisgIGludCByZXM7CisKKyAgaWYgKCFfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbihmb3JtKSkKKyAgICByZXMgPSBFX0lOVkFMSURfRklFTEQ7CisgIGVsc2UKKyAgICB7CisgICAgICBDYWxsX0hvb2soZm9ybSwgZmllbGR0ZXJtKTsKKyAgICAgIHJlcyA9IGZjdChmb3JtKTsKKyAgICAgIENhbGxfSG9vayhmb3JtLCBmaWVsZGluaXQpOworICAgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX05leHRfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBuZXh0IGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2Ugb2YgdGhlIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9OZXh0X0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGTl9OZXh0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgTmV4dF9GaWVsZF9Pbl9QYWdlKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9QcmV2aW91c19GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIHByZXZpb3VzIGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2Ugb2YgdGhlCit8ICAgICAgICAgICAgICAgICAgICBmb3JtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fUHJldmlvdXNfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX1ByZXZpb3VzX0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgUHJldmlvdXNfRmllbGRfT25fUGFnZShmb3JtLT5jdXJyZW50KSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRk5fRmlyc3RfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBmaXJzdCBmaWVsZCBvbiB0aGUgY3VycmVudCBwYWdlIG9mIHRoZSBmb3JtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fRmlyc3RfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX0ZpcnN0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgTmV4dF9GaWVsZF9Pbl9QYWdlKGZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1heF0pKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9MYXN0X0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgbGFzdCBmaWVsZCBvbiB0aGUgY3VycmVudCBwYWdlIG9mIHRoZSBmb3JtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fTGFzdF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fTGFzdF9GaWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKAorCSAgICAgIF9uY19TZXRfQ3VycmVudF9GaWVsZChmb3JtLAorCQkJCSAgICBQcmV2aW91c19GaWVsZF9Pbl9QYWdlKGZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1pbl0pKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9Tb3J0ZWRfTmV4dF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIHNvcnRlZCBuZXh0IGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2UKK3wgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fU29ydGVkX05leHRfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX1NvcnRlZF9OZXh0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgU29ydGVkX05leHRfRmllbGQoZm9ybS0+Y3VycmVudCkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX1NvcnRlZF9QcmV2aW91c19GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIHNvcnRlZCBwcmV2aW91cyBmaWVsZCBvbiB0aGUgY3VycmVudCBwYWdlCit8ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX1NvcnRlZF9QcmV2aW91c19GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fU29ydGVkX1ByZXZpb3VzX0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgU29ydGVkX1ByZXZpb3VzX0ZpZWxkKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9Tb3J0ZWRfRmlyc3RfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBzb3J0ZWQgZmlyc3QgZmllbGQgb24gdGhlIGN1cnJlbnQgcGFnZQorfCAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9Tb3J0ZWRfRmlyc3RfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX1NvcnRlZF9GaXJzdF9GaWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfQ3VycmVudF9GaWVsZChmb3JtLAorCQkJCSAgIFNvcnRlZF9OZXh0X0ZpZWxkKGZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0uc21heF0pKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9Tb3J0ZWRfTGFzdF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIHNvcnRlZCBsYXN0IGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2UKK3wgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fU29ydGVkX0xhc3RfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX1NvcnRlZF9MYXN0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgU29ydGVkX1ByZXZpb3VzX0ZpZWxkKGZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0uc21pbl0pKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9MZWZ0X0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBmaWVsZCBvbiB0aGUgbGVmdCBvZiB0aGUgY3VycmVudCBmaWVsZCBvbiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHNhbWUgbGluZSBhbmQgdGhlIHNhbWUgcGFnZS4gQ3ljbGVzIHRocm91Z2ggdGhlIGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9MZWZ0X0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGTl9MZWZ0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgTGVmdF9OZWlnaGJvcl9GaWVsZChmb3JtLT5jdXJyZW50KSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRk5fUmlnaHRfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIGZpZWxkIG9uIHRoZSByaWdodCBvZiB0aGUgY3VycmVudCBmaWVsZCBvbiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHNhbWUgbGluZSBhbmQgdGhlIHNhbWUgcGFnZS4gQ3ljbGVzIHRocm91Z2ggdGhlIGxpbmUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9SaWdodF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fUmlnaHRfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBSaWdodF9OZWlnaGJvcl9GaWVsZChmb3JtLT5jdXJyZW50KSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRk5fVXBfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIHVwcGVyIG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IGZpZWxkLiBUaGlzCit8ICAgICAgICAgICAgICAgICAgICBjeWNsZXMgdGhyb3VnaCB0aGUgcGFnZS4gU2VlIHRoZSBjb21tZW50cyBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIFVwcGVyX05laWdoYm9yX0ZpZWxkIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93Cit8ICAgICAgICAgICAgICAgICAgICAndXBwZXInIGlzIGRlZmluZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9VcF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fVXBfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBVcHBlcl9OZWlnaGJvcl9GaWVsZChmb3JtLT5jdXJyZW50KSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRk5fRG93bl9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgZG93biBuZWlnaGJvciBvZiB0aGUgY3VycmVudCBmaWVsZC4gVGhpcworfCAgICAgICAgICAgICAgICAgICAgY3ljbGVzIHRocm91Z2ggdGhlIHBhZ2UuIFNlZSB0aGUgY29tbWVudHMgb2YgdGhlCit8ICAgICAgICAgICAgICAgICAgICBEb3duX05laWdoYm9yX0ZpZWxkIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93Cit8ICAgICAgICAgICAgICAgICAgICAnZG93bicgaXMgZGVmaW5lZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX0Rvd25fRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX0Rvd25fRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBEb3duX05laWdoYm9yX0ZpZWxkKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRU5EIG9mIEZpZWxkIE5hdmlnYXRpb24gcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSGVscGVyIHJvdXRpbmVzIGZvciBQYWdlIE5hdmlnYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBfbmNfU2V0X0Zvcm1fUGFnZShGT1JNICogZm9ybSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFnZSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTWFrZSB0aGUgZ2l2ZW4gcGFnZSBudW1iZXIgdGhlIGN1cnJlbnQgcGFnZSBhbmQgbWFrZQorfCAgICAgICAgICAgICAgICAgICAgdGhlIGdpdmVuIGZpZWxkIHRoZSBjdXJyZW50IGZpZWxkIG9uIHRoZSBwYWdlLiBJZgorfCAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBmaWVsZCBOVUxMIGlzIGdpdmVuLCBtYWtlIHRoZSBmaXJzdCBmaWVsZCBvbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIHBhZ2UgdGhlIGN1cnJlbnQgZmllbGQuIFRoZSByb3V0aW5lIGFjdHMgb25seQorfCAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlcXVlc3RlZCBwYWdlIGlzIG5vdCB0aGUgY3VycmVudCBwYWdlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAgLSBpbnZhbGlkIGZpZWxkIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgICAgLSBzb21lIHNldmVyZSBiYXNpYyBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19TZXRfRm9ybV9QYWdlKEZPUk0gKmZvcm0sIGludCBwYWdlLCBGSUVMRCAqZmllbGQpCit7CisgIGludCByZXMgPSBFX09LOworCisgIGlmICgoZm9ybS0+Y3VycGFnZSAhPSBwYWdlKSkKKyAgICB7CisgICAgICBGSUVMRCAqbGFzdF9maWVsZCwgKmZpZWxkX29uX3BhZ2U7CisKKyAgICAgIHdlcmFzZShHZXRfRm9ybV9XaW5kb3coZm9ybSkpOworICAgICAgZm9ybS0+Y3VycGFnZSA9IHBhZ2U7CisgICAgICBsYXN0X2ZpZWxkID0gZmllbGRfb25fcGFnZSA9IGZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbcGFnZV0uc21pbl07CisgICAgICBkbworCXsKKwkgIGlmIChmaWVsZF9vbl9wYWdlLT5vcHRzICYgT19WSVNJQkxFKQorCSAgICBpZiAoKHJlcyA9IERpc3BsYXlfRmllbGQoZmllbGRfb25fcGFnZSkpICE9IEVfT0spCisJICAgICAgcmV0dXJuIChyZXMpOworCSAgZmllbGRfb25fcGFnZSA9IGZpZWxkX29uX3BhZ2UtPnNuZXh0OworCX0KKyAgICAgIHdoaWxlIChmaWVsZF9vbl9wYWdlICE9IGxhc3RfZmllbGQpOworCisgICAgICBpZiAoZmllbGQpCisJcmVzID0gX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sIGZpZWxkKTsKKyAgICAgIGVsc2UKKwkvKiBOLkIuOiB3ZSBkb24ndCBlbmNhcHN1bGF0ZSB0aGlzIGJ5IEludGVyX0ZpZWxkX05hdmlnYXRpb24oKSwKKwkgICBiZWNhdXNlIHRoaXMgaXMgYWxyZWFkeSBleGVjdXRlZCBpbiBhIHBhZ2UgbmF2aWdhdGlvbgorCSAgIGNvbnRleHQgdGhhdCBjb250YWlucyBmaWVsZCBuYXZpZ2F0aW9uCisJICovCisJcmVzID0gRk5fRmlyc3RfRmllbGQoZm9ybSk7CisgICAgfQorICByZXR1cm4gKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBOZXh0X1BhZ2VfTnVtYmVyKGNvbnN0IEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2FsY3VsYXRlIHRoZSBwYWdlIG51bWJlciBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgcGFnZQorfCAgICAgICAgICAgICAgICAgICAgbnVtYmVyLiBUaGlzIGN5Y2xlcyBpZiB0aGUgaGlnaGVzdCBwYWdlIG51bWJlciBpcworfCAgICAgICAgICAgICAgICAgICAgcmVhY2hlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBuZXh0IHBhZ2UgbnVtYmVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIGludAorTmV4dF9QYWdlX051bWJlcihjb25zdCBGT1JNICpmb3JtKQoreworICByZXR1cm4gKGZvcm0tPmN1cnBhZ2UgKyAxKSAlIGZvcm0tPm1heHBhZ2U7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBQcmV2aW91c19QYWdlX051bWJlcihjb25zdCBGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENhbGN1bGF0ZSB0aGUgcGFnZSBudW1iZXIgYmVmb3JlIHRoZSBjdXJyZW50IHBhZ2UKK3wgICAgICAgICAgICAgICAgICAgIG51bWJlci4gVGhpcyBjeWNsZXMgaWYgdGhlIGZpcnN0IHBhZ2UgbnVtYmVyIGlzCit8ICAgICAgICAgICAgICAgICAgICByZWFjaGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIHByZXZpb3VzIHBhZ2UgbnVtYmVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIGludAorUHJldmlvdXNfUGFnZV9OdW1iZXIoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgcmV0dXJuIChmb3JtLT5jdXJwYWdlICE9IDAgPyBmb3JtLT5jdXJwYWdlIC0gMSA6IGZvcm0tPm1heHBhZ2UgLSAxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFBhZ2UgTmF2aWdhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBQYWdlX05hdmlnYXRpb24oCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCogY29uc3QgZmN0KSAoRk9STSAqKSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2VuZXJpYyBiZWhhdmlvciBmb3IgY2hhbmdpbmcgYSBwYWdlLiBUaGlzIG1lYW5zCit8ICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBmaWVsZCBpcyBsZWZ0IGFuZCBhIG5ldyBmaWVsZCBpcyBlbnRlcmVkLgorfCAgICAgICAgICAgICAgICAgICAgU28gdGhlIGZpZWxkIG11c3QgYmUgdmFsaWRhdGVkIGFuZCB0aGUgZmllbGQgaW5pdC90ZXJtCit8ICAgICAgICAgICAgICAgICAgICBob29rcyBtdXN0IGJlIGNhbGxlZC4gQmVjYXVzZSBhbHNvIHRoZSBwYWdlIGlzIGNoYW5nZWQsCit8ICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybXMgaW5pdC90ZXJtIGhvb2tzIG11c3QgYmUgY2FsbGVkIGFsc28uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9JTlZBTElEX0ZJRUxEICAgICAtIGZpZWxkIGlzIGludmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitQYWdlX05hdmlnYXRpb24oaW50ICgqY29uc3QgZmN0KSAoRk9STSAqKSwgRk9STSAqZm9ybSkKK3sKKyAgaW50IHJlczsKKworICBpZiAoIV9uY19JbnRlcm5hbF9WYWxpZGF0aW9uKGZvcm0pKQorICAgIHJlcyA9IEVfSU5WQUxJRF9GSUVMRDsKKyAgZWxzZQorICAgIHsKKyAgICAgIENhbGxfSG9vayhmb3JtLCBmaWVsZHRlcm0pOworICAgICAgQ2FsbF9Ib29rKGZvcm0sIGZvcm10ZXJtKTsKKyAgICAgIHJlcyA9IGZjdChmb3JtKTsKKyAgICAgIENhbGxfSG9vayhmb3JtLCBmb3JtaW5pdCk7CisgICAgICBDYWxsX0hvb2soZm9ybSwgZmllbGRpbml0KTsKKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBQTl9OZXh0X1BhZ2UoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorUE5fTmV4dF9QYWdlKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJQTl9OZXh0X1BhZ2UoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCBOZXh0X1BhZ2VfTnVtYmVyKGZvcm0pLCAoRklFTEQgKikwKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBQTl9QcmV2aW91c19QYWdlKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgZm9ybQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1BOX1ByZXZpb3VzX1BhZ2UoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlBOX1ByZXZpb3VzX1BhZ2UoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCBQcmV2aW91c19QYWdlX051bWJlcihmb3JtKSwgKEZJRUxEICopMCkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgUE5fRmlyc3RfUGFnZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitQTl9GaXJzdF9QYWdlKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJQTl9GaXJzdF9QYWdlKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9Gb3JtX1BhZ2UoZm9ybSwgMCwgKEZJRUxEICopMCkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgUE5fTGFzdF9QYWdlKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgbGFzdCBwYWdlIG9mIHRoZSBmb3JtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorUE5fTGFzdF9QYWdlKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJQTl9MYXN0X1BhZ2UoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCBmb3JtLT5tYXhwYWdlIC0gMSwgKEZJRUxEICopMCkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRU5EIG9mIEZpZWxkIE5hdmlnYXRpb24gcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSGVscGVyIHJvdXRpbmVzIGZvciB0aGUgY29yZSBmb3JtIGRyaXZlci4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRGF0YV9FbnRyeShGT1JNICogZm9ybSxpbnQgYykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEVudGVyIGNoYXJhY3RlciBjIGludG8gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlCit8ICAgICAgICAgICAgICAgICAgICBjdXJyZW50IGZpZWxkIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0RhdGFfRW50cnkoRk9STSAqZm9ybSwgaW50IGMpCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGludCByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCisgIFQoKFRfQ0FMTEVEKCJEYXRhX0VudHJ5KCVwLCVzKSIpLCBmb3JtLCBfdHJhY2VjaHR5cGUoKGNodHlwZSljKSkpOworICBpZiAoKGZpZWxkLT5vcHRzICYgT19FRElUKQorI2lmIEZJWF9GT1JNX0lOQUNUSVZFX0JVRworICAgICAgJiYgKGZpZWxkLT5vcHRzICYgT19BQ1RJVkUpCisjZW5kaWYKKyAgICApCisgICAgeworICAgICAgaWYgKChmaWVsZC0+b3B0cyAmIE9fQkxBTkspICYmCisJICBGaXJzdF9Qb3NpdGlvbl9Jbl9DdXJyZW50X0ZpZWxkKGZvcm0pICYmCisJICAhKGZvcm0tPnN0YXR1cyAmIF9GQ0hFQ0tfUkVRVUlSRUQpICYmCisJICAhKGZvcm0tPnN0YXR1cyAmIF9XSU5ET1dfTU9ESUZJRUQpKQorCXdlcmFzZShmb3JtLT53KTsKKworICAgICAgaWYgKGZvcm0tPnN0YXR1cyAmIF9PVkxNT0RFKQorCXsKKwkgIHdhZGRjaChmb3JtLT53LCAoY2h0eXBlKWMpOworCX0KKyAgICAgIGVsc2UKKwkvKiBubyBfT1ZMTU9ERSAqLworCXsKKwkgIGJvb2wgVGhlcmVfSXNfUm9vbSA9IElzX1RoZXJlX1Jvb21fRm9yX0FfQ2hhcl9Jbl9MaW5lKGZvcm0pOworCisJICBpZiAoIShUaGVyZV9Jc19Sb29tIHx8CisJCSgoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpICYmIEdyb3dhYmxlKGZpZWxkKSkpKSkKKwkgICAgUkVUVVJOKEVfUkVRVUVTVF9ERU5JRUQpOworCisJICBpZiAoIVRoZXJlX0lzX1Jvb20gJiYgIUZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgUkVUVVJOKEVfU1lTVEVNX0VSUk9SKTsKKworCSAgd2luc2NoKGZvcm0tPncsIChjaHR5cGUpYyk7CisJfQorCisgICAgICBpZiAoKHJlc3VsdCA9IFdyYXBwaW5nX05vdF9OZWNlc3NhcnlfT3JfV3JhcHBpbmdfT2soZm9ybSkpID09IEVfT0spCisJeworCSAgYm9vbCBFbmRfT2ZfRmllbGQgPSAoKChmaWVsZC0+ZHJvd3MgLSAxKSA9PSBmb3JtLT5jdXJyb3cpICYmCisJCQkgICAgICAgKChmaWVsZC0+ZGNvbHMgLSAxKSA9PSBmb3JtLT5jdXJjb2wpKTsKKworCSAgZm9ybS0+c3RhdHVzIHw9IF9XSU5ET1dfTU9ESUZJRUQ7CisJICBpZiAoRW5kX09mX0ZpZWxkICYmICFHcm93YWJsZShmaWVsZCkgJiYgKGZpZWxkLT5vcHRzICYgT19BVVRPU0tJUCkpCisJICAgIHJlc3VsdCA9IEludGVyX0ZpZWxkX05hdmlnYXRpb24oRk5fTmV4dF9GaWVsZCwgZm9ybSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoRW5kX09mX0ZpZWxkICYmIEdyb3dhYmxlKGZpZWxkKSAmJiAhRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCQlyZXN1bHQgPSBFX1NZU1RFTV9FUlJPUjsKKwkgICAgICBlbHNlCisJCXsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCQkgIC8qCisJCSAgICogV2UgaGF2ZSBqdXN0IGFkZGVkIGEgYnl0ZSB0byB0aGUgZm9ybSBmaWVsZC4gIEl0IG1heSBoYXZlCisJCSAgICogYmVlbiBwYXJ0IG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gIElmIGl0IHdhcywgdGhlCisJCSAgICogYWRkY2hfdXNlZCBmaWVsZCBpcyBub256ZXJvIGFuZCB3ZSBzaG91bGQgbm90IHRyeSB0byBtb3ZlCisJCSAgICogdG8gYSBuZXcgY29sdW1uLgorCQkgICAqLworCQkgIGlmIChXSU5ET1dfRVhUKGZvcm0tPncsIGFkZGNoX3VzZWQpID09IDApCisJCSAgICBJRk5fTmV4dF9DaGFyYWN0ZXIoZm9ybSk7CisjZWxzZQorCQkgIElGTl9OZXh0X0NoYXJhY3Rlcihmb3JtKTsKKyNlbmRpZgorCQkgIHJlc3VsdCA9IEVfT0s7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIFJFVFVSTihyZXN1bHQpOworfQorCisvKiBTdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgdGhlIGJpbmRpbmcgb2YgYSByZXF1ZXN0IGNvZGUgdG8gYSBmdW5jdGlvbi4KKyAgIFRoZSBtZW1iZXIga2V5Y29kZSBjb2RlcyB0aGUgcmVxdWVzdCB2YWx1ZSBhcyB3ZWxsIGFzIHRoZSBnZW5lcmljCisgICByb3V0aW5lIHRvIHVzZSBmb3IgdGhlIHJlcXVlc3QuIFRoZSBjb2RlIGZvciB0aGUgZ2VuZXJpYyByb3V0aW5lCisgICBpcyBjb2RlZCBpbiB0aGUgdXBwZXIgMTYgQml0cyB3aGlsZSB0aGUgcmVxdWVzdCBjb2RlIGlzIGNvZGVkIGluCisgICB0aGUgbG93ZXIgMTYgYml0cy4KKworICAgSW4gdGVybXMgb2YgQysrIHlvdSBtaWdodCB0aGluayBvZiBhIHJlcXVlc3QgYXMgYSBjbGFzcyB3aXRoIGEKKyAgIHZpcnR1YWwgbWV0aG9kICJwZXJmb3JtIi4gVGhlIGRpZmZlcmVudCB0eXBlcyBvZiByZXF1ZXN0IGFyZQorICAgZGVyaXZlZCBmcm9tIHRoaXMgYmFzZSBjbGFzcyBhbmQgb3ZlcmxvYWQgKG9yIG5vdCkgdGhlIGJhc2UgY2xhc3MKKyAgIGltcGxlbWVudGF0aW9uIG9mIHBlcmZvcm0uCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IGtleWNvZGU7CQkJLyogbXVzdCBiZSBhdCBsZWFzdCAzMiBiaXQ6IGhpOm1vZGUsIGxvOiBrZXkgKi8KKyAgaW50ICgqY21kKSAoRk9STSAqKTsJCS8qIGxvdyBsZXZlbCBkcml2ZXIgcm91dGluZSBmb3IgdGhpcyBrZXkgICAgICovCit9CitCaW5kaW5nX0luZm87CisKKy8qIFlvdSBtYXkgc2VlIHRoaXMgaXMgdGhlIGNsYXNzLWlkIG9mIHRoZSByZXF1ZXN0IHR5cGUgY2xhc3MgKi8KKyNkZWZpbmUgSURfUE4gICAgKDB4MDAwMDAwMDApCS8qIFBhZ2UgbmF2aWdhdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSURfRk4gICAgKDB4MDAwMTAwMDApCS8qIEludGVyLUZpZWxkIG5hdmlnYXRpb24gICAgKi8KKyNkZWZpbmUgSURfSUZOICAgKDB4MDAwMjAwMDApCS8qIEludHJhLUZpZWxkIG5hdmlnYXRpb24gICAgKi8KKyNkZWZpbmUgSURfVlNDICAgKDB4MDAwMzAwMDApCS8qIFZlcnRpY2FsIFNjcm9sbGluZyAgICAgICAgKi8KKyNkZWZpbmUgSURfSFNDICAgKDB4MDAwNDAwMDApCS8qIEhvcml6b250YWwgU2Nyb2xsaW5nICAgICAgKi8KKyNkZWZpbmUgSURfRkUgICAgKDB4MDAwNTAwMDApCS8qIEZpZWxkIEVkaXRpbmcgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSURfRU0gICAgKDB4MDAwNjAwMDApCS8qIEVkaXQgTW9kZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSURfRlYgICAgKDB4MDAwNzAwMDApCS8qIEZpZWxkIFZhbGlkYXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSURfQ0ggICAgKDB4MDAwODAwMDApCS8qIENob2ljZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSURfTWFzayAgKDB4ZmZmZjAwMDApCisjZGVmaW5lIEtleV9NYXNrICgweDAwMDBmZmZmKQorI2RlZmluZSBJRF9TaGZ0ICAoMTYpCisKKy8qIFRoaXMgYXJyYXkgaG9sZHMgYWxsIHRoZSBCaW5kaW5nIEluZm9zICovCisvKiAqSU5ERU5ULU9GRiogKi8KK3N0YXRpYyBjb25zdCBCaW5kaW5nX0luZm8gYmluZGluZ3NbTUFYX0ZPUk1fQ09NTUFORCAtIE1JTl9GT1JNX0NPTU1BTkQgKyAxXSA9Cit7CisgIHsgUkVRX05FWFRfUEFHRSAgICB8SURfUE4gICxQTl9OZXh0X1BhZ2V9LAorICB7IFJFUV9QUkVWX1BBR0UgICAgfElEX1BOICAsUE5fUHJldmlvdXNfUGFnZX0sCisgIHsgUkVRX0ZJUlNUX1BBR0UgICB8SURfUE4gICxQTl9GaXJzdF9QYWdlfSwKKyAgeyBSRVFfTEFTVF9QQUdFICAgIHxJRF9QTiAgLFBOX0xhc3RfUGFnZX0sCisKKyAgeyBSRVFfTkVYVF9GSUVMRCAgIHxJRF9GTiAgLEZOX05leHRfRmllbGR9LAorICB7IFJFUV9QUkVWX0ZJRUxEICAgfElEX0ZOICAsRk5fUHJldmlvdXNfRmllbGR9LAorICB7IFJFUV9GSVJTVF9GSUVMRCAgfElEX0ZOICAsRk5fRmlyc3RfRmllbGR9LAorICB7IFJFUV9MQVNUX0ZJRUxEICAgfElEX0ZOICAsRk5fTGFzdF9GaWVsZH0sCisgIHsgUkVRX1NORVhUX0ZJRUxEICB8SURfRk4gICxGTl9Tb3J0ZWRfTmV4dF9GaWVsZH0sCisgIHsgUkVRX1NQUkVWX0ZJRUxEICB8SURfRk4gICxGTl9Tb3J0ZWRfUHJldmlvdXNfRmllbGR9LAorICB7IFJFUV9TRklSU1RfRklFTEQgfElEX0ZOICAsRk5fU29ydGVkX0ZpcnN0X0ZpZWxkfSwKKyAgeyBSRVFfU0xBU1RfRklFTEQgIHxJRF9GTiAgLEZOX1NvcnRlZF9MYXN0X0ZpZWxkfSwKKyAgeyBSRVFfTEVGVF9GSUVMRCAgIHxJRF9GTiAgLEZOX0xlZnRfRmllbGR9LAorICB7IFJFUV9SSUdIVF9GSUVMRCAgfElEX0ZOICAsRk5fUmlnaHRfRmllbGR9LAorICB7IFJFUV9VUF9GSUVMRCAgICAgfElEX0ZOICAsRk5fVXBfRmllbGR9LAorICB7IFJFUV9ET1dOX0ZJRUxEICAgfElEX0ZOICAsRk5fRG93bl9GaWVsZH0sCisKKyAgeyBSRVFfTkVYVF9DSEFSICAgIHxJRF9JRk4gLElGTl9OZXh0X0NoYXJhY3Rlcn0sCisgIHsgUkVRX1BSRVZfQ0hBUiAgICB8SURfSUZOICxJRk5fUHJldmlvdXNfQ2hhcmFjdGVyfSwKKyAgeyBSRVFfTkVYVF9MSU5FICAgIHxJRF9JRk4gLElGTl9OZXh0X0xpbmV9LAorICB7IFJFUV9QUkVWX0xJTkUgICAgfElEX0lGTiAsSUZOX1ByZXZpb3VzX0xpbmV9LAorICB7IFJFUV9ORVhUX1dPUkQgICAgfElEX0lGTiAsSUZOX05leHRfV29yZH0sCisgIHsgUkVRX1BSRVZfV09SRCAgICB8SURfSUZOICxJRk5fUHJldmlvdXNfV29yZH0sCisgIHsgUkVRX0JFR19GSUVMRCAgICB8SURfSUZOICxJRk5fQmVnaW5uaW5nX09mX0ZpZWxkfSwKKyAgeyBSRVFfRU5EX0ZJRUxEICAgIHxJRF9JRk4gLElGTl9FbmRfT2ZfRmllbGR9LAorICB7IFJFUV9CRUdfTElORSAgICAgfElEX0lGTiAsSUZOX0JlZ2lubmluZ19PZl9MaW5lfSwKKyAgeyBSRVFfRU5EX0xJTkUgICAgIHxJRF9JRk4gLElGTl9FbmRfT2ZfTGluZX0sCisgIHsgUkVRX0xFRlRfQ0hBUiAgICB8SURfSUZOICxJRk5fTGVmdF9DaGFyYWN0ZXJ9LAorICB7IFJFUV9SSUdIVF9DSEFSICAgfElEX0lGTiAsSUZOX1JpZ2h0X0NoYXJhY3Rlcn0sCisgIHsgUkVRX1VQX0NIQVIgICAgICB8SURfSUZOICxJRk5fVXBfQ2hhcmFjdGVyfSwKKyAgeyBSRVFfRE9XTl9DSEFSICAgIHxJRF9JRk4gLElGTl9Eb3duX0NoYXJhY3Rlcn0sCisKKyAgeyBSRVFfTkVXX0xJTkUgICAgIHxJRF9GRSAgLEZFX05ld19MaW5lfSwKKyAgeyBSRVFfSU5TX0NIQVIgICAgIHxJRF9GRSAgLEZFX0luc2VydF9DaGFyYWN0ZXJ9LAorICB7IFJFUV9JTlNfTElORSAgICAgfElEX0ZFICAsRkVfSW5zZXJ0X0xpbmV9LAorICB7IFJFUV9ERUxfQ0hBUiAgICAgfElEX0ZFICAsRkVfRGVsZXRlX0NoYXJhY3Rlcn0sCisgIHsgUkVRX0RFTF9QUkVWICAgICB8SURfRkUgICxGRV9EZWxldGVfUHJldmlvdXN9LAorICB7IFJFUV9ERUxfTElORSAgICAgfElEX0ZFICAsRkVfRGVsZXRlX0xpbmV9LAorICB7IFJFUV9ERUxfV09SRCAgICAgfElEX0ZFICAsRkVfRGVsZXRlX1dvcmR9LAorICB7IFJFUV9DTFJfRU9MICAgICAgfElEX0ZFICAsRkVfQ2xlYXJfVG9fRW5kX09mX0xpbmV9LAorICB7IFJFUV9DTFJfRU9GICAgICAgfElEX0ZFICAsRkVfQ2xlYXJfVG9fRW5kX09mX0ZpZWxkfSwKKyAgeyBSRVFfQ0xSX0ZJRUxEICAgIHxJRF9GRSAgLEZFX0NsZWFyX0ZpZWxkfSwKKworICB7IFJFUV9PVkxfTU9ERSAgICAgfElEX0VNICAsRU1fT3ZlcmxheV9Nb2RlfSwKKyAgeyBSRVFfSU5TX01PREUgICAgIHxJRF9FTSAgLEVNX0luc2VydF9Nb2RlfSwKKworICB7IFJFUV9TQ1JfRkxJTkUgICAgfElEX1ZTQyAsVlNDX1Njcm9sbF9MaW5lX0ZvcndhcmR9LAorICB7IFJFUV9TQ1JfQkxJTkUgICAgfElEX1ZTQyAsVlNDX1Njcm9sbF9MaW5lX0JhY2t3YXJkfSwKKyAgeyBSRVFfU0NSX0ZQQUdFICAgIHxJRF9WU0MgLFZTQ19TY3JvbGxfUGFnZV9Gb3J3YXJkfSwKKyAgeyBSRVFfU0NSX0JQQUdFICAgIHxJRF9WU0MgLFZTQ19TY3JvbGxfUGFnZV9CYWNrd2FyZH0sCisgIHsgUkVRX1NDUl9GSFBBR0UgICB8SURfVlNDICxWU0NfU2Nyb2xsX0hhbGZfUGFnZV9Gb3J3YXJkfSwKKyAgeyBSRVFfU0NSX0JIUEFHRSAgIHxJRF9WU0MgLFZTQ19TY3JvbGxfSGFsZl9QYWdlX0JhY2t3YXJkfSwKKworICB7IFJFUV9TQ1JfRkNIQVIgICAgfElEX0hTQyAsSFNDX1Njcm9sbF9DaGFyX0ZvcndhcmR9LAorICB7IFJFUV9TQ1JfQkNIQVIgICAgfElEX0hTQyAsSFNDX1Njcm9sbF9DaGFyX0JhY2t3YXJkfSwKKyAgeyBSRVFfU0NSX0hGTElORSAgIHxJRF9IU0MgLEhTQ19Ib3Jpem9udGFsX0xpbmVfRm9yd2FyZH0sCisgIHsgUkVRX1NDUl9IQkxJTkUgICB8SURfSFNDICxIU0NfSG9yaXpvbnRhbF9MaW5lX0JhY2t3YXJkfSwKKyAgeyBSRVFfU0NSX0hGSEFMRiAgIHxJRF9IU0MgLEhTQ19Ib3Jpem9udGFsX0hhbGZfTGluZV9Gb3J3YXJkfSwKKyAgeyBSRVFfU0NSX0hCSEFMRiAgIHxJRF9IU0MgLEhTQ19Ib3Jpem9udGFsX0hhbGZfTGluZV9CYWNrd2FyZH0sCisKKyAgeyBSRVFfVkFMSURBVElPTiAgIHxJRF9GViAgLEZWX1ZhbGlkYXRpb259LAorCisgIHsgUkVRX05FWFRfQ0hPSUNFICB8SURfQ0ggICxDUl9OZXh0X0Nob2ljZX0sCisgIHsgUkVRX1BSRVZfQ0hPSUNFICB8SURfQ0ggICxDUl9QcmV2aW91c19DaG9pY2V9Cit9OworLyogKklOREVOVC1PTiogKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZm9ybV9kcml2ZXIoRk9STSAqIGZvcm0saW50ICBjKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgVGhpcyBpcyB0aGUgd29ya2hvcnNlIG9mIHRoZSBmb3JtcyBzeXN0ZW0uIEl0IGNoZWNrcworfCAgICAgICAgICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjIGlzIGEgcmVxdWVzdCBvcgorfCAgICAgICAgICAgICAgICAgICAgZGF0YS4gSWYgaXQgaXMgYSByZXF1ZXN0LCB0aGUgZm9ybSBkcml2ZXIgZXhlY3V0ZXMKK3wgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIElmIGl0IGlzIGRhdGEKK3wgICAgICAgICAgICAgICAgICAgIChwcmludGFibGUgY2hhcmFjdGVyKSwgaXQgZW50ZXJzIHRoZSBkYXRhIGludG8gdGhlCit8ICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGZpZWxkLiBJZiBpdCBpcyBub3QKK3wgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZWQsIHRoZSBmb3JtIGRyaXZlciBhc3N1bWVzIGl0IGlzIGFuIGFwcGxpY2F0aW9uCit8ICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbW1hbmQgYW5kIHJldHVybnMgRV9VTktOT1dOX0NPTU1BTkQuCit8ICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBkZWZpbmVkIGNvbW1hbmQgc2hvdWxkIGJlIGRlZmluZWQgcmVsYXRpdmUKK3wgICAgICAgICAgICAgICAgICAgIHRvIE1BWF9GT1JNX0NPTU1BTkQsIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgcmVxdWVzdC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBzeXN0ZW0gZXJyb3IKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gYW4gYXJndW1lbnQgaXMgaW5jb3JyZWN0Cit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9QT1NURUQgICAgICAtIGZvcm0gaXMgbm90IHBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9JTlZBTElEX0ZJRUxEICAgLSBmaWVsZCBjb250ZW50cyBhcmUgaW52YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfU1RBVEUgICAgICAgLSBjYWxsZWQgZnJvbSBpbnNpZGUgYSBob29rIHJvdXRpbmUKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gcmVxdWVzdCBmYWlsZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgIC0gbm8gZmllbGRzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGZvcm0KK3wgICAgICAgICAgICAgICAgICAgIEVfVU5LTk9XTl9DT01NQU5EIC0gY29tbWFuZCBub3Qga25vd24KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmb3JtX2RyaXZlcihGT1JNICpmb3JtLCBpbnQgYykKK3sKKyAgY29uc3QgQmluZGluZ19JbmZvICpCSSA9IChCaW5kaW5nX0luZm8gKikgMDsKKyAgaW50IHJlcyA9IEVfVU5LTk9XTl9DT01NQU5EOworCisgIFQoKFRfQ0FMTEVEKCJmb3JtX2RyaXZlciglcCwlZCkiKSwgZm9ybSwgYykpOworCisgIGlmICghZm9ybSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmICghKGZvcm0tPmZpZWxkKSkKKyAgICBSRVRVUk4oRV9OT1RfQ09OTkVDVEVEKTsKKworICBhc3NlcnQoZm9ybS0+cGFnZSk7CisKKyAgaWYgKGMgPT0gRklSU1RfQUNUSVZFX01BR0lDKQorICAgIHsKKyAgICAgIGZvcm0tPmN1cnJlbnQgPSBfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkKGZvcm0pOworICAgICAgUkVUVVJOKEVfT0spOworICAgIH0KKworICBhc3NlcnQoZm9ybS0+Y3VycmVudCAmJgorCSBmb3JtLT5jdXJyZW50LT5idWYgJiYKKwkgKGZvcm0tPmN1cnJlbnQtPmZvcm0gPT0gZm9ybSkKKyAgICApOworCisgIGlmIChmb3JtLT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorICAgIFJFVFVSTihFX0JBRF9TVEFURSk7CisKKyAgaWYgKCEoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkpCisgICAgUkVUVVJOKEVfTk9UX1BPU1RFRCk7CisKKyAgaWYgKChjID49IE1JTl9GT1JNX0NPTU1BTkQgJiYgYyA8PSBNQVhfRk9STV9DT01NQU5EKSAmJgorICAgICAgKChiaW5kaW5nc1tjIC0gTUlOX0ZPUk1fQ09NTUFORF0ua2V5Y29kZSAmIEtleV9NYXNrKSA9PSBjKSkKKyAgICBCSSA9ICYoYmluZGluZ3NbYyAtIE1JTl9GT1JNX0NPTU1BTkRdKTsKKworICBpZiAoQkkpCisgICAgeworICAgICAgdHlwZWRlZiBpbnQgKCpHZW5lcmljX01ldGhvZCkgKGludCAoKmNvbnN0KSAoRk9STSAqKSwgRk9STSAqKTsKKyAgICAgIHN0YXRpYyBjb25zdCBHZW5lcmljX01ldGhvZCBHZW5lcmljX01ldGhvZHNbXSA9CisgICAgICB7CisJUGFnZV9OYXZpZ2F0aW9uLAkvKiBvdmVybG9hZGVkIHRvIGNhbGwgZmllbGQmZm9ybSBob29rcyAqLworCUludGVyX0ZpZWxkX05hdmlnYXRpb24sCS8qIG92ZXJsb2FkZWQgdG8gY2FsbCBmaWVsZCBob29rcyAgICAgICovCisJTlVMTCwJCQkvKiBJbnRyYS1GaWVsZCBpcyBnZW5lcmljICAgICAgICAgICAgICAqLworCVZlcnRpY2FsX1Njcm9sbGluZywJLyogT3ZlcmxvYWRlZCB0byBjaGVjayBtdWx0aS1saW5lICAgICAgKi8KKwlIb3Jpem9udGFsX1Njcm9sbGluZywJLyogT3ZlcmxvYWRlZCB0byBjaGVjayBzaW5nbGUtbGluZSAgICAgKi8KKwlGaWVsZF9FZGl0aW5nLAkJLyogT3ZlcmxvYWRlZCB0byBtYXJrIG1vZGlmaWNhdGlvbiAgICAgKi8KKwlOVUxMLAkJCS8qIEVkaXQgTW9kZSBpcyBnZW5lcmljICAgICAgICAgICAgICAgICovCisJTlVMTCwJCQkvKiBGaWVsZCBWYWxpZGF0aW9uIGlzIGdlbmVyaWMgICAgICAgICAqLworCU5VTEwJCQkvKiBDaG9pY2UgUmVxdWVzdCBpcyBnZW5lcmljICAgICAgICAgICAqLworICAgICAgfTsKKyAgICAgIHNpemVfdCBuTWV0aG9kcyA9IChzaXplb2YoR2VuZXJpY19NZXRob2RzKSAvIHNpemVvZihHZW5lcmljX01ldGhvZHNbMF0pKTsKKyAgICAgIHNpemVfdCBtZXRob2QgPSAoQkktPmtleWNvZGUgPj4gSURfU2hmdCkgJiAweGZmZmY7CS8qIHNlZSBJRF9NYXNrICovCisKKyAgICAgIGlmICgobWV0aG9kID49IG5NZXRob2RzKSB8fCAhKEJJLT5jbWQpKQorCXJlcyA9IEVfU1lTVEVNX0VSUk9SOworICAgICAgZWxzZQorCXsKKwkgIEdlbmVyaWNfTWV0aG9kIGZjdCA9IEdlbmVyaWNfTWV0aG9kc1ttZXRob2RdOworCisJICBpZiAoZmN0KQorCSAgICByZXMgPSBmY3QoQkktPmNtZCwgZm9ybSk7CisJICBlbHNlCisJICAgIHJlcyA9IChCSS0+Y21kKSAoZm9ybSk7CisJfQorICAgIH0KKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgZWxzZSBpZiAoS0VZX01PVVNFID09IGMpCisgICAgeworICAgICAgTUVWRU5UIGV2ZW50OworICAgICAgV0lORE9XICp3aW4gPSBmb3JtLT53aW4gPyBmb3JtLT53aW4gOiBzdGRzY3I7CisgICAgICBXSU5ET1cgKnN1YiA9IGZvcm0tPnN1YiA/IGZvcm0tPnN1YiA6IHdpbjsKKworICAgICAgZ2V0bW91c2UoJmV2ZW50KTsKKyAgICAgIGlmICgoZXZlbnQuYnN0YXRlICYgKEJVVFRPTjFfQ0xJQ0tFRCB8CisJCQkgICBCVVRUT04xX0RPVUJMRV9DTElDS0VEIHwKKwkJCSAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpKQorCSAgJiYgd2VuY2xvc2Uod2luLCBldmVudC55LCBldmVudC54KSkKKwl7CQkJLyogd2UgcmVhY3Qgb25seSBpZiB0aGUgY2xpY2sgd2FzIGluIHRoZSB1c2Vyd2luLCB0aGF0IG1lYW5zCisJCQkJICogaW5zaWRlIHRoZSBmb3JtIGRpc3BsYXkgYXJlYSBvciBhdCB0aGUgZGVjb3JhdGlvbiB3aW5kb3cuCisJCQkJICovCisJICBpbnQgcnkgPSBldmVudC55LCByeCA9IGV2ZW50Lng7CS8qIHNjcmVlbiBjb29yZGluYXRlcyAqLworCisJICByZXMgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgaWYgKG1vdXNlX3RyYWZvKCZyeSwgJnJ4LCBGQUxTRSkpCisJICAgIHsJCQkvKiByeCwgcnkgYXJlIG5vdyAiY3Vyc2VzIiBjb29yZGluYXRlcyAqLworCSAgICAgIGlmIChyeSA8IHN1Yi0+X2JlZ3kpCisJCXsJCS8qIHdlIGNsaWNrZWQgYWJvdmUgdGhlIGRpc3BsYXkgcmVnaW9uOyB0aGlzIGlzCisJCQkJICogaW50ZXJwcmV0ZWQgYXMgInNjcm9sbCB1cCIgcmVxdWVzdAorCQkJCSAqLworCQkgIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0NMSUNLRUQpCisJCSAgICByZXMgPSBmb3JtX2RyaXZlcihmb3JtLCBSRVFfUFJFVl9GSUVMRCk7CisJCSAgZWxzZSBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCkKKwkJICAgIHJlcyA9IGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9QUkVWX1BBR0UpOworCQkgIGVsc2UgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpCisJCSAgICByZXMgPSBmb3JtX2RyaXZlcihmb3JtLCBSRVFfRklSU1RfRklFTEQpOworCQl9CisJICAgICAgZWxzZSBpZiAocnkgPiBzdWItPl9iZWd5ICsgc3ViLT5fbWF4eSkKKwkJewkJLyogd2UgY2xpY2tlZCBiZWxvdyB0aGUgZGlzcGxheSByZWdpb247IHRoaXMgaXMKKwkJCQkgKiBpbnRlcnByZXRlZCBhcyAic2Nyb2xsIGRvd24iIHJlcXVlc3QKKwkJCQkgKi8KKwkJICBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9DTElDS0VEKQorCQkgICAgcmVzID0gZm9ybV9kcml2ZXIoZm9ybSwgUkVRX05FWFRfRklFTEQpOworCQkgIGVsc2UgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpCisJCSAgICByZXMgPSBmb3JtX2RyaXZlcihmb3JtLCBSRVFfTkVYVF9QQUdFKTsKKwkJICBlbHNlIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX1RSSVBMRV9DTElDS0VEKQorCQkgICAgcmVzID0gZm9ybV9kcml2ZXIoZm9ybSwgUkVRX0xBU1RfRklFTEQpOworCQl9CisJICAgICAgZWxzZSBpZiAod2VuY2xvc2Uoc3ViLCBldmVudC55LCBldmVudC54KSkKKwkJewkJLyogSW5zaWRlIHRoZSBhcmVhIHdlIHRyeSB0byBmaW5kIHRoZSBoaXQgaXRlbSAqLworCQkgIGludCBpOworCisJCSAgcnkgPSBldmVudC55OworCQkgIHJ4ID0gZXZlbnQueDsKKwkJICBpZiAod21vdXNlX3RyYWZvKHN1YiwgJnJ5LCAmcngsIEZBTFNFKSkKKwkJICAgIHsKKwkJICAgICAgaW50IG1pbl9maWVsZCA9IGZvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1pbjsKKwkJICAgICAgaW50IG1heF9maWVsZCA9IGZvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1heDsKKworCQkgICAgICBmb3IgKGkgPSBtaW5fZmllbGQ7IGkgPD0gbWF4X2ZpZWxkOyArK2kpCisJCQl7CisJCQkgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmZpZWxkW2ldOworCisJCQkgIGlmIChGaWVsZF9Jc19TZWxlY3RhYmxlKGZpZWxkKQorCQkJICAgICAgJiYgRmllbGRfZW5jbG9zZXMoZmllbGQsIHJ5LCByeCkgPT0gRV9PSykKKwkJCSAgICB7CisJCQkgICAgICByZXMgPSBfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwgZmllbGQpOworCQkJICAgICAgaWYgKHJlcyA9PSBFX09LKQorCQkJCXJlcyA9IF9uY19Qb3NpdGlvbl9Gb3JtX0N1cnNvcihmb3JtKTsKKwkJCSAgICAgIGlmIChyZXMgPT0gRV9PSworCQkJCSAgJiYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpKQorCQkJCXJlcyA9IEVfVU5LTk9XTl9DT01NQU5EOworCQkJICAgICAgYnJlYWs7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJcmVzID0gRV9SRVFVRVNUX0RFTklFRDsKKyAgICB9CisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisgIGVsc2UgaWYgKCEoYyAmICh+KGludClNQVhfUkVHVUxBUl9DSEFSQUNURVIpKSkKKyAgICB7CisgICAgICAvKgorICAgICAgICogSWYgd2UncmUgdXNpbmcgOC1iaXQgY2hhcmFjdGVycywgaXNjbnRybCtpc3ByaW50IGNvdmVyIHRoZSB3aG9sZSBzZXQuCisgICAgICAgKiBCdXQgd2l0aCBtdWx0aWJ5dGUgY2hhcmFjdGVycywgdGhlcmUgaXMgYSB0aGlyZCBwb3NzaWJpbGl0eSwgaS5lLiwKKyAgICAgICAqIHBhcnRzIG9mIGNoYXJhY3RlcnMgdGhhdCBidWlsZCB1cCBpbnRvIHByaW50YWJsZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZQorICAgICAgICogbm90IGNvbnNpZGVyZWQgcHJpbnRhYmxlLgorICAgICAgICoKKyAgICAgICAqIEZJWE1FOiB0aGUgd2lkZS1jaGFyYWN0ZXIgYnJhbmNoIHNob3VsZCBhbHNvIHVzZSBDaGVja19DaGFyKCkuCisgICAgICAgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgICAgaWYgKCFpc2NudHJsKFVDaGFyKGMpKSkKKyNlbHNlCisgICAgICBpZiAoaXNwcmludChVQ2hhcihjKSkgJiYKKwkgIENoZWNrX0NoYXIoZm9ybS0+Y3VycmVudC0+dHlwZSwgYywKKwkJICAgICAoVHlwZUFyZ3VtZW50ICopKGZvcm0tPmN1cnJlbnQtPmFyZykpKQorI2VuZGlmCisJcmVzID0gRGF0YV9FbnRyeShmb3JtLCBjKTsKKyAgICB9CisgIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisgIFJFVFVSTihyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRmllbGQtQnVmZmVyIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAgVGhlIGVmZmVjdHMgb2Ygc2V0dGluZyBhIGJ1ZmZlciBhcmUgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBjb3JlIG9mIHRoZSBmb3JtCisgIGRyaXZlciBsb2dpYy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaW4gdGhlIGNhc2Ugb2YgZ3Jvd2FibGUgZmllbGRzLgorICBTbyBJIGRvbid0IHNlcGFyYXRlIHRoaXMgaW50byBhIHNlcGFyYXRlIG1vZHVsZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfYnVmZmVyKEZJRUxEICpmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXIsIGNoYXIgKnZhbHVlKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBnaXZlbiBidWZmZXIgb2YgdGhlIGZpZWxkIHRvIHRoZSBnaXZlbiB2YWx1ZS4KK3wgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciAwIHN0b3JlcyB0aGUgZGlzcGxheWVkIGNvbnRlbnQgb2YgdGhlIGZpZWxkLgorfCAgICAgICAgICAgICAgICAgICAgRm9yIGR5bmFtaWMgZmllbGRzIHRoaXMgbWF5IGdyb3cgdGhlIGZpZWxkYnVmZmVycyBpZgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgZXhjZWVkcyB0aGUgY3VycmVudCBidWZmZXIKK3wgICAgICAgICAgICAgICAgICAgIGxlbmd0aC4gRm9yIGJ1ZmZlciAwIG9ubHkgcHJpbnRhYmxlIHZhbHVlcyBhcmUgYWxsb3dlZC4KK3wgICAgICAgICAgICAgICAgICAgIEZvciBzdGF0aWMgZmllbGRzLCB0aGUgdmFsdWUgbmVlZHMgbm90IHRvIGJlIHplcm8gdGVyLQorfCAgICAgICAgICAgICAgICAgICAgbWluYXRlZC4gSXQgaXMgY29waWVkIHVwIHRvIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgYXJndW1lbnQKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9maWVsZF9idWZmZXIoRklFTEQgKmZpZWxkLCBpbnQgYnVmZmVyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgRklFTERfQ0VMTCAqcDsKKyAgaW50IHJlcyA9IEVfT0s7CisgIHVuc2lnbmVkIGludCBpOworICB1bnNpZ25lZCBpbnQgbGVuOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgRklFTERfQ0VMTCAqd2lkZXZhbHVlID0gMDsKKyNlbmRpZgorCisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGRfYnVmZmVyKCVwLCVkLCVzKSIpLCBmaWVsZCwgYnVmZmVyLCBfbmNfdmlzYnVmKHZhbHVlKSkpOworCisgIGlmICghZmllbGQgfHwgIXZhbHVlIHx8ICgoYnVmZmVyIDwgMCkgfHwgKGJ1ZmZlciA+IGZpZWxkLT5uYnVmKSkpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBsZW4gPSBCdWZmZXJfTGVuZ3RoKGZpZWxkKTsKKworICBpZiAoR3Jvd2FibGUoZmllbGQpKQorICAgIHsKKyAgICAgIC8qIGZvciBhIGdyb3dhYmxlIGZpZWxkIHdlIG11c3QgYXNzdW1lIHplcm8gdGVybWluYXRlZCBzdHJpbmdzLCBiZWNhdXNlCisgICAgICAgICBzb21laG93IHdlIGhhdmUgdG8gZGV0ZWN0IHRoZSBsZW5ndGggb2Ygd2hhdCBzaG91bGQgYmUgY29waWVkLgorICAgICAgICovCisgICAgICB1bnNpZ25lZCBpbnQgdmxlbiA9IHN0cmxlbih2YWx1ZSk7CisKKyAgICAgIGlmICh2bGVuID4gbGVuKQorCXsKKwkgIGlmICghRmllbGRfR3Jvd24oZmllbGQsCisJCQkgICAoaW50KSgxICsgKHZsZW4gLSBsZW4pIC8gKChmaWVsZC0+cm93cyArIGZpZWxkLT5ucm93KQorCQkJCQkJICAgICAqIGZpZWxkLT5jb2xzKSkpKQorCSAgICBSRVRVUk4oRV9TWVNURU1fRVJST1IpOworCisJICBsZW4gPSB2bGVuOworCX0KKyAgICB9CisKKyAgcCA9IEFkZHJlc3NfT2ZfTnRoX0J1ZmZlcihmaWVsZCwgYnVmZmVyKTsKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgIC8qCisgICAqIFVzZSBhZGRzdHIncyBsb2dpYyBmb3IgY29udmVydGluZyBhIHN0cmluZyB0byBhbiBhcnJheSBvZiBjY2hhcl90J3MuCisgICAqIFRoZXJlIHNob3VsZCBiZSBhIGJldHRlciB3YXksIGJ1dCB0aGlzIGhhbmRsZXMgbm9uc3BhY2luZyBjaGFyYWN0ZXJzCisgICAqIGFuZCBvdGhlciBzcGVjaWFsIGNhc2VzIHRoYXQgd2UgcmVhbGx5IGRvIG5vdCB3YW50IHRvIGhhbmRsZSBoZXJlLgorICAgKi8KKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICBpZiAod3Jlc2l6ZShmaWVsZC0+d29ya2luZywgZmllbGQtPmRyb3dzLCBmaWVsZC0+ZGNvbHMpID09IEVSUikKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlbHdpbihmaWVsZC0+d29ya2luZyk7CisgICAgICBmaWVsZC0+d29ya2luZyA9IG5ld3BhZChmaWVsZC0+ZHJvd3MsIGZpZWxkLT5kY29scyk7CisgICAgfQorICB3Y2xlYXIoZmllbGQtPndvcmtpbmcpOworICBtdndhZGRzdHIoZmllbGQtPndvcmtpbmcsIDAsIDAsIHZhbHVlKTsKKworICBpZiAoKHdpZGV2YWx1ZSA9IHR5cGVDYWxsb2MoRklFTERfQ0VMTCwgbGVuICsgMSkpID09IDApCisgICAgeworICAgICAgUkVUVVJOKEVfU1lTVEVNX0VSUk9SKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkKWZpZWxkLT5kcm93czsgKytpKQorCXsKKwkgIG12d2luX3djaG5zdHIoZmllbGQtPndvcmtpbmcsIGksIDAsCisJCQl3aWRldmFsdWUgKyAoaSAqIGZpZWxkLT5kY29scyksCisJCQlmaWVsZC0+ZGNvbHMpOworCX0KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwl7CisJICBpZiAoQ2hhckVxKG15WkVST1MsIHdpZGV2YWx1ZVtpXSkpCisJICAgIHsKKwkgICAgICB3aGlsZSAoaSA8IGxlbikKKwkJcFtpKytdID0gbXlCTEFOSzsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgcFtpXSA9IHdpZGV2YWx1ZVtpXTsKKwl9CisgICAgICBmcmVlKHdpZGV2YWx1ZSk7CisgICAgfQorI2Vsc2UKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorICAgIHsKKyAgICAgIGlmICh2YWx1ZVtpXSA9PSAnXDAnKQorCXsKKwkgIHdoaWxlIChpIDwgbGVuKQorCSAgICBwW2krK10gPSBteUJMQU5LOworCSAgYnJlYWs7CisJfQorICAgICAgcFtpXSA9IHZhbHVlW2ldOworICAgIH0KKyNlbmRpZgorCisgIGlmIChidWZmZXIgPT0gMCkKKyAgICB7CisgICAgICBpbnQgc3luY3JlczsKKworICAgICAgaWYgKCgoc3luY3JlcyA9IFN5bmNocm9uaXplX0ZpZWxkKGZpZWxkKSkgIT0gRV9PSykgJiYKKwkgIChyZXMgPT0gRV9PSykpCisJcmVzID0gc3luY3JlczsKKyAgICAgIGlmICgoKHN5bmNyZXMgPSBTeW5jaHJvbml6ZV9MaW5rZWRfRmllbGRzKGZpZWxkKSkgIT0gRV9PSykgJiYKKwkgIChyZXMgPT0gRV9PSykpCisJcmVzID0gc3luY3JlczsKKyAgICB9CisgIFJFVFVSTihyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGNoYXIgKmZpZWxkX2J1ZmZlcihjb25zdCBGSUVMRCAqZmllbGQsaW50IGJ1ZmZlcikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGZvciB0aGUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGJ1ZmZlciBvciBOVUxMIGlmIGFyZ3VtZW50cyB3ZXJlIGludmFsaWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorZmllbGRfYnVmZmVyKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50IGJ1ZmZlcikKK3sKKyAgY2hhciAqcmVzdWx0ID0gMDsKKworICBUKChUX0NBTExFRCgiZmllbGRfYnVmZmVyKCVwLCVkKSIpLCBmaWVsZCwgYnVmZmVyKSk7CisKKyAgaWYgKGZpZWxkICYmIChidWZmZXIgPj0gMCkgJiYgKGJ1ZmZlciA8PSBmaWVsZC0+bmJ1ZikpCisgICAgeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgICBGSUVMRF9DRUxMICpkYXRhID0gQWRkcmVzc19PZl9OdGhfQnVmZmVyKGZpZWxkLCBidWZmZXIpOworICAgICAgdW5zaWduZWQgbmVlZCA9IDA7CisgICAgICBpbnQgc2l6ZSA9IEJ1ZmZlcl9MZW5ndGgoZmllbGQpOworICAgICAgaW50IG47CisKKyAgICAgIC8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBzdG9yZSB0aGUgZXhwYW5kZWQgc3RyaW5nICovCisgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgKytuKQorCXsKKwkgIGlmICghaXNXaWRlY0V4dChkYXRhW25dKSkKKwkgICAgeworCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKwkgICAgICBzaXplX3QgbmV4dDsKKworCSAgICAgIGluaXRfbWIoc3RhdGUpOworCSAgICAgIG5leHQgPSBfbmNfd2NydG9tYigwLCBkYXRhW25dLmNoYXJzWzBdLCAmc3RhdGUpOworCSAgICAgIGlmICghaXNFSUxTRVEobmV4dCkpCisJCW5lZWQgKz0gbmV4dDsKKwkgICAgfQorCX0KKworICAgICAgLyogYWxsb2NhdGUgYSBwbGFjZSB0byBzdG9yZSB0aGUgZXhwYW5kZWQgc3RyaW5nICovCisgICAgICBpZiAoZmllbGQtPmV4cGFuZGVkW2J1ZmZlcl0gIT0gMCkKKwlmcmVlKGZpZWxkLT5leHBhbmRlZFtidWZmZXJdKTsKKyAgICAgIGZpZWxkLT5leHBhbmRlZFtidWZmZXJdID0gdHlwZU1hbGxvYyhjaGFyLCBuZWVkICsgMSk7CisKKyAgICAgIC8qIGV4cGFuZCB0aGUgbXVsdGlieXRlIGRhdGEgKi8KKyAgICAgIGlmICgocmVzdWx0ID0gZmllbGQtPmV4cGFuZGVkW2J1ZmZlcl0pICE9IDApCisJeworCSAgd2NsZWFyKGZpZWxkLT53b3JraW5nKTsKKwkgIG12d2FkZF93Y2huc3RyKGZpZWxkLT53b3JraW5nLCAwLCAwLCBkYXRhLCBzaXplKTsKKwkgIG12d2lubnN0cihmaWVsZC0+d29ya2luZywgMCwgMCwgcmVzdWx0LCAoaW50KW5lZWQpOworCX0KKyNlbHNlCisgICAgICByZXN1bHQgPSBBZGRyZXNzX09mX050aF9CdWZmZXIoZmllbGQsIGJ1ZmZlcik7CisjZW5kaWYKKyAgICB9CisgIHJldHVyblB0cihyZXN1bHQpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKworLyogRklYTUU6IHNlZSBsaWJfZ2V0X3djaC5jICovCisjaWYgSEFWRV9NQlRPV0MgJiYgSEFWRV9NQkxFTgorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIG1ibGVuKE5VTEwsIDApLCBtYnRvd2MoTlVMTCwgTlVMTCwgMCkKKyNkZWZpbmUgY291bnRfbWJ5dGVzKGJ1ZmZlcixsZW5ndGgsc3RhdGUpIG1ibGVuKGJ1ZmZlcixsZW5ndGgpCisjZGVmaW5lIHRyYW5zX21ieXRlcyh3Y2gsYnVmZmVyLGxlbmd0aCxzdGF0ZSkgXAorCShpbnQpIG1idG93Yygmd2NoLCBidWZmZXIsIGxlbmd0aCkKKyNlbGlmIEhBVkVfTUJSVE9XQyAmJiBIQVZFX01CUkxFTgorI2RlZmluZSBORUVEX1NUQVRFCisjZGVmaW5lIHJlc2V0X21ieXRlcyhzdGF0ZSkgaW5pdF9tYihzdGF0ZSkKKyNkZWZpbmUgY291bnRfbWJ5dGVzKGJ1ZmZlcixsZW5ndGgsc3RhdGUpIG1icmxlbihidWZmZXIsbGVuZ3RoLCZzdGF0ZSkKKyNkZWZpbmUgdHJhbnNfbWJ5dGVzKHdjaCxidWZmZXIsbGVuZ3RoLHN0YXRlKSBcCisJKGludCkgbWJydG93Yygmd2NoLCBidWZmZXIsIGxlbmd0aCwgJnN0YXRlKQorI2Vsc2UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCBDb252ZXJ0IGEgbXVsdGlieXRlIHN0cmluZyB0byBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZy4gIFRoZSByZXN1bHQgbXVzdCBiZQorfCBmcmVlZCBieSB0aGUgY2FsbGVyLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHdjaGFyX3QgKikKK19uY19XaWRlbl9TdHJpbmcoY2hhciAqc291cmNlLCBpbnQgKmxlbmd0aHApCit7CisgIHdjaGFyX3QgKnJlc3VsdCA9IDA7CisgIHdjaGFyX3Qgd2NoOworICBzaXplX3QgZ2l2ZW4gPSBzdHJsZW4oc291cmNlKTsKKyAgc2l6ZV90IHRyaWVzOworICBpbnQgcGFzczsKKyAgaW50IHN0YXR1czsKKworI2lmZGVmIE5FRURfU1RBVEUKKyAgbWJzdGF0ZV90IHN0YXRlOworI2VuZGlmCisKKyAgZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7ICsrcGFzcykKKyAgICB7CisgICAgICB1bnNpZ25lZCBuZWVkID0gMDsKKyAgICAgIHNpemVfdCBwYXNzZWQgPSAwOworCisgICAgICB3aGlsZSAocGFzc2VkIDwgZ2l2ZW4pCisJeworCSAgYm9vbCBmb3VuZCA9IEZBTFNFOworCisJICBmb3IgKHRyaWVzID0gMSwgc3RhdHVzID0gMDsgdHJpZXMgPD0gKGdpdmVuIC0gcGFzc2VkKTsgKyt0cmllcykKKwkgICAgeworCSAgICAgIGludCBzYXZlID0gc291cmNlW3Bhc3NlZCArIHRyaWVzXTsKKworCSAgICAgIHNvdXJjZVtwYXNzZWQgKyB0cmllc10gPSAwOworCSAgICAgIHJlc2V0X21ieXRlcyhzdGF0ZSk7CisJICAgICAgc3RhdHVzID0gdHJhbnNfbWJ5dGVzKHdjaCwgc291cmNlICsgcGFzc2VkLCB0cmllcywgc3RhdGUpOworCSAgICAgIHNvdXJjZVtwYXNzZWQgKyB0cmllc10gPSBzYXZlOworCisJICAgICAgaWYgKHN0YXR1cyA+IDApCisJCXsKKwkJICBmb3VuZCA9IFRSVUU7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgaWYgKGZvdW5kKQorCSAgICB7CisJICAgICAgaWYgKHBhc3MpCisJCXsKKwkJICByZXN1bHRbbmVlZF0gPSB3Y2g7CisJCX0KKwkgICAgICBwYXNzZWQgKz0gc3RhdHVzOworCSAgICAgICsrbmVlZDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKHBhc3MpCisJCXsKKwkJICByZXN1bHRbbmVlZF0gPSBzb3VyY2VbcGFzc2VkXTsKKwkJfQorCSAgICAgICsrbmVlZDsKKwkgICAgICArK3Bhc3NlZDsKKwkgICAgfQorCX0KKworICAgICAgaWYgKCFwYXNzKQorCXsKKwkgIGlmICghbmVlZCkKKwkgICAgYnJlYWs7CisJICByZXN1bHQgPSB0eXBlQ2FsbG9jKHdjaGFyX3QsIG5lZWQpOworCisJICAqbGVuZ3RocCA9IG5lZWQ7CisJICBpZiAocmVzdWx0ID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisvKiBmcm1fZHJpdmVyLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZybV9ob29rLmMgYi9mb3JtL2ZybV9ob29rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNmQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnJtX2hvb2suYwpAQCAtMCwwICsxLDE0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX2hvb2suYyx2IDEuMTQgMjAwNC8xMi8yNSAyMjozNzoyNyB0b20gRXhwICQiKQorCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGZ1bmN0aW9uIHRvIHNldCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBob29rICovCisjZGVmaW5lIEdFTl9IT09LX1NFVF9GVU5DVElPTiggdHlwLCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgaW50IE5DVVJTRVNfQVBJIHNldF8gIyMgdHlwICMjIF8gIyMgbmFtZSAoRk9STSAqZm9ybSwgRm9ybV9Ib29rIGZ1bmMpXAore1wKKyAgIFQoKFRfQ0FMTEVEKCJzZXRfIiAjdHlwIl8iI25hbWUiKCVwLCVwKSIpLCBmb3JtLCBmdW5jKSk7XAorICAgKE5vcm1hbGl6ZV9Gb3JtKCBmb3JtICkgLT4gdHlwICMjIG5hbWUpID0gZnVuYyA7XAorICAgUkVUVVJOKEVfT0spO1wKK30KKworLyogIlRlbXBsYXRlIiBtYWNybyB0byBnZW5lcmF0ZSBmdW5jdGlvbiB0byBnZXQgYXBwbGljYXRpb24gc3BlY2lmaWMgaG9vayAqLworI2RlZmluZSBHRU5fSE9PS19HRVRfRlVOQ1RJT04oIHR5cCwgbmFtZSApIFwKK05DVVJTRVNfSU1QRVhQIEZvcm1fSG9vayBOQ1VSU0VTX0FQSSB0eXAgIyMgXyAjIyBuYW1lICggY29uc3QgRk9STSAqZm9ybSApXAore1wKKyAgIFQoKFRfQ0FMTEVEKCN0eXAgIl8iICNuYW1lICIoJXApIiksIGZvcm0pKTtcCisgICByZXR1cm5Gb3JtSG9vayggTm9ybWFsaXplX0Zvcm0oIGZvcm0gKSAtPiB0eXAgIyMgbmFtZSApO1wKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX2luaXQoRk9STSAqZm9ybSwgRm9ybV9Ib29rIGYpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBBc3NpZ25zIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KK3wgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZCBhbmQganVzdCBhZnRlcgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZmllbGQgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19TRVRfRlVOQ1RJT04oZmllbGQsIGluaXQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRm9ybV9Ib29rIGZpZWxkX2luaXQoY29uc3QgRk9STSAqZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGZpZWxkIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgYWRkcmVzcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBhZGRyZXNzIG9yIE5VTEwgaWYgbm8gaG9vayBkZWZpbmVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX0dFVF9GVU5DVElPTihmaWVsZCwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX3Rlcm0oRk9STSAqZm9ybSwgRm9ybV9Ib29rIGYpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBBc3NpZ25zIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgZmluYWxpemF0aW9uIGZ1bmN0aW9uCit8ICAgICAgICAgICAgICAgICAgICB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcyB1bnBvc3RlZCBhbmQganVzdCBiZWZvcmUKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGZpZWxkIGNoYW5nZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfU0VUX0ZVTkNUSU9OKGZpZWxkLCB0ZXJtKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIEZvcm1fSG9vayBmaWVsZF90ZXJtKGNvbnN0IEZPUk0gKmZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBmaWVsZCBmaW5hbGl6YXRpb24gcm91dGluZSBhZGRyZXNzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGFkZHJlc3Mgb3IgTlVMTCBpZiBubyBob29rIGRlZmluZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKGZpZWxkLCB0ZXJtKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZm9ybV9pbml0KEZPUk0gKmZvcm0sIEZvcm1fSG9vayBmKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQXNzaWducyBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCit8ICAgICAgICAgICAgICAgICAgICB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcyBwb3N0ZWQgYW5kIGp1c3QgYWZ0ZXIKK3wgICAgICAgICAgICAgICAgICAgIGEgcGFnZSBjaGFuZ2UuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX1NFVF9GVU5DVElPTihmb3JtLCBpbml0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIEZvcm1fSG9vayBmb3JtX2luaXQoY29uc3QgRk9STSAqZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGZvcm0gaW5pdGlhbGl6YXRpb24gcm91dGluZSBhZGRyZXNzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGFkZHJlc3Mgb3IgTlVMTCBpZiBubyBob29rIGRlZmluZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKGZvcm0sIGluaXQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9mb3JtX3Rlcm0oRk9STSAqZm9ybSwgRm9ybV9Ib29rIGYpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBBc3NpZ25zIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgZmluYWxpemF0aW9uIGZ1bmN0aW9uCit8ICAgICAgICAgICAgICAgICAgICB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcyB1bnBvc3RlZCBhbmQganVzdCBiZWZvcmUKK3wgICAgICAgICAgICAgICAgICAgIGEgcGFnZSBjaGFuZ2UuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX1NFVF9GVU5DVElPTihmb3JtLCB0ZXJtKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIEZvcm1fSG9vayBmb3JtX3Rlcm0oY29uc3QgRk9STSAqZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGZvcm0gZmluYWxpemF0aW9uIHJvdXRpbmUgYWRkcmVzcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBhZGRyZXNzIG9yIE5VTEwgaWYgbm8gaG9vayBkZWZpbmVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX0dFVF9GVU5DVElPTihmb3JtLCB0ZXJtKQorCisvKiBmcm1faG9vay5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mcm1fb3B0cy5jIGIvZm9ybS9mcm1fb3B0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNmQ2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZybV9vcHRzLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9vcHRzLmMsdiAxLjE0IDIwMDUvMDQvMTYgMTY6NTk6MTggdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZm9ybV9vcHRzKEZPUk0gKmZvcm0sIEZvcm1fT3B0aW9ucyBvcHRzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVHVybnMgb24gdGhlIG5hbWVkIG9wdGlvbnMgYW5kIHR1cm5zIG9mZiBhbGwgdGhlCit8ICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgb3B0aW9ucyBmb3IgdGhhdCBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgb3B0aW9ucworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9mb3JtX29wdHMoRk9STSAqZm9ybSwgRm9ybV9PcHRpb25zIG9wdHMpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZm9ybV9vcHRzKCVwLCVkKSIpLCBmb3JtLCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfRk9STV9PUFRTOworICBpZiAob3B0cyAmIH5BTExfRk9STV9PUFRTKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgIGVsc2UKKyAgICB7CisgICAgICBOb3JtYWxpemVfRm9ybShmb3JtKS0+b3B0cyA9IG9wdHM7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgRm9ybV9PcHRpb25zIGZvcm1fb3B0cyhjb25zdCBGT1JNICopCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZm9ybSBvcHRpb25zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIG9wdGlvbiBmbGFncy4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGb3JtX09wdGlvbnMpCitmb3JtX29wdHMoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoImZvcm1fb3B0cyglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKChpbnQpKE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5vcHRzICYgQUxMX0ZPUk1fT1BUUykpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZvcm1fb3B0c19vbihGT1JNICpmb3JtLCBGb3JtX09wdGlvbnMgb3B0cykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFR1cm5zIG9uIHRoZSBuYW1lZCBvcHRpb25zOyBubyBvdGhlciBvcHRpb25zIGFyZSAKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzIAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBvcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZm9ybV9vcHRzX29uKEZPUk0gKmZvcm0sIEZvcm1fT3B0aW9ucyBvcHRzKQoreworICBUKChUX0NBTExFRCgiZm9ybV9vcHRzX29uKCVwLCVkKSIpLCBmb3JtLCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfRk9STV9PUFRTOworICBpZiAob3B0cyAmIH5BTExfRk9STV9PUFRTKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgIGVsc2UKKyAgICB7CisgICAgICBOb3JtYWxpemVfRm9ybShmb3JtKS0+b3B0cyB8PSBvcHRzOworICAgICAgUkVUVVJOKEVfT0spOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmb3JtX29wdHNfb2ZmKEZPUk0gKmZvcm0sIEZvcm1fT3B0aW9ucyBvcHRzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVHVybnMgb2ZmIHRoZSBuYW1lZCBvcHRpb25zOyBubyBvdGhlciBvcHRpb25zIGFyZSAKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzIAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBvcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZm9ybV9vcHRzX29mZihGT1JNICpmb3JtLCBGb3JtX09wdGlvbnMgb3B0cykKK3sKKyAgVCgoVF9DQUxMRUQoImZvcm1fb3B0c19vZmYoJXAsJWQpIiksIGZvcm0sIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9GT1JNX09QVFM7CisgIGlmIChvcHRzICYgfkFMTF9GT1JNX09QVFMpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5vcHRzICY9IH5vcHRzOworICAgICAgUkVUVVJOKEVfT0spOworICAgIH0KK30KKworLyogZnJtX29wdHMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX3BhZ2UuYyBiL2Zvcm0vZnJtX3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzcxODM4Ci0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mcm1fcGFnZS5jCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmcm1fcGFnZS5jLHYgMS4xMCAyMDA0LzEyLzExIDIyOjA4OjIxIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2Zvcm1fcGFnZShGT1JNICogZm9ybSxpbnQgIHBhZ2UpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgZm9ybSBwb2ludGVyIG9yIHBhZ2UgbnVtYmVyCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9TVEFURSAgICAgICAtIGNhbGxlZCBmcm9tIGEgaG9vayByb3V0aW5lCit8ICAgICAgICAgICAgICAgICAgICBFX0lOVkFMSURfRklFTEQgICAtIGN1cnJlbnQgZmllbGQgY2FuJ3QgYmUgbGVmdAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZm9ybV9wYWdlKEZPUk0gKmZvcm0sIGludCBwYWdlKQoreworICBpbnQgZXJyID0gRV9PSzsKKworICBUKChUX0NBTExFRCgic2V0X2Zvcm1fcGFnZSglcCwlZCkiKSwgZm9ybSwgcGFnZSkpOworCisgIGlmICghZm9ybSB8fCAocGFnZSA8IDApIHx8IChwYWdlID49IGZvcm0tPm1heHBhZ2UpKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCEoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkpCisgICAgeworICAgICAgZm9ybS0+Y3VycGFnZSA9IHBhZ2U7CisgICAgICBmb3JtLT5jdXJyZW50ID0gX25jX0ZpcnN0X0FjdGl2ZV9GaWVsZChmb3JtKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoZm9ybS0+c3RhdHVzICYgX0lOX0RSSVZFUikKKwllcnIgPSBFX0JBRF9TVEFURTsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAoZm9ybS0+Y3VycGFnZSAhPSBwYWdlKQorCSAgICB7CisJICAgICAgaWYgKCFfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbihmb3JtKSkKKwkJZXJyID0gRV9JTlZBTElEX0ZJRUxEOworCSAgICAgIGVsc2UKKwkJeworCQkgIENhbGxfSG9vayhmb3JtLCBmaWVsZHRlcm0pOworCQkgIENhbGxfSG9vayhmb3JtLCBmb3JtdGVybSk7CisJCSAgZXJyID0gX25jX1NldF9Gb3JtX1BhZ2UoZm9ybSwgcGFnZSwgKEZJRUxEICopMCk7CisJCSAgQ2FsbF9Ib29rKGZvcm0sIGZvcm1pbml0KTsKKwkJICBDYWxsX0hvb2soZm9ybSwgZmllbGRpbml0KTsKKwkJICBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKGZvcm0pOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICBSRVRVUk4oZXJyKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmb3JtX3BhZ2UoY29uc3QgRk9STSAqIGZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogID49IDAgIDogY3VycmVudCBwYWdlIG51bWJlcgorfCAgICAgICAgICAgICAgICAgICAgLTEgICAgOiBpbnZhbGlkIGZvcm0gcG9pbnRlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2Zvcm1fcGFnZShjb25zdCBGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiZm9ybV9wYWdlKCVwKSIpLCBmb3JtKSk7CisKKyAgcmV0dXJuQ29kZShOb3JtYWxpemVfRm9ybShmb3JtKS0+Y3VycGFnZSk7Cit9CisKKy8qIGZybV9wYWdlLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2ZybV9wb3N0LmMgYi9mb3JtL2ZybV9wb3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5MzdlOQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnJtX3Bvc3QuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX3Bvc3QuYyx2IDEuOSAyMDA0LzEyLzExIDIyOjE5OjA2IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgcG9zdF9mb3JtKEZPUk0gKiBmb3JtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgV3JpdGVzIHRoZSBmb3JtIGludG8gaXRzIGFzc29jaWF0ZWQgc3Vid2luZG93LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgZm9ybSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAgICAtIGZvcm0gYWxyZWFkeSBwb3N0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgIC0gbm8gZmllbGRzIGNvbm5lY3RlZCB0byBmb3JtCit8ICAgICAgICAgICAgICAgICAgICBFX05PX1JPT00gICAgICAgICAtIGZvcm0gZG9lc24ndCBmaXQgaW50byBzdWJ3aW5kb3cKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorcG9zdF9mb3JtKEZPUk0gKmZvcm0pCit7CisgIFdJTkRPVyAqZm9ybXdpbjsKKyAgaW50IGVycjsKKyAgaW50IHBhZ2U7CisKKyAgVCgoVF9DQUxMRUQoInBvc3RfZm9ybSglcCkiKSwgZm9ybSkpOworCisgIGlmICghZm9ybSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgaWYgKCEoZm9ybS0+ZmllbGQpKQorICAgIFJFVFVSTihFX05PVF9DT05ORUNURUQpOworCisgIGZvcm13aW4gPSBHZXRfRm9ybV9XaW5kb3coZm9ybSk7CisgIGlmICgoZm9ybS0+Y29scyA+IGdldG1heHgoZm9ybXdpbikpIHx8IChmb3JtLT5yb3dzID4gZ2V0bWF4eShmb3Jtd2luKSkpCisgICAgUkVUVVJOKEVfTk9fUk9PTSk7CisKKyAgLyogcmVzZXQgZm9ybS0+Y3VycGFnZSB0byBhbiBpbnZhbGQgdmFsdWUuIFRoaXMgZm9yY2VzIFNldF9Gb3JtX1BhZ2UKKyAgICAgdG8gZG8gdGhlIHBhZ2UgaW5pdGlhbGl6YXRpb24gd2hpY2ggaXMgcmVxdWlyZWQgYnkgcG9zdF9mb3JtLgorICAgKi8KKyAgcGFnZSA9IGZvcm0tPmN1cnBhZ2U7CisgIGZvcm0tPmN1cnBhZ2UgPSAtMTsKKyAgaWYgKChlcnIgPSBfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCBwYWdlLCBmb3JtLT5jdXJyZW50KSkgIT0gRV9PSykKKyAgICBSRVRVUk4oZXJyKTsKKworICBmb3JtLT5zdGF0dXMgfD0gX1BPU1RFRDsKKworICBDYWxsX0hvb2soZm9ybSwgZm9ybWluaXQpOworICBDYWxsX0hvb2soZm9ybSwgZmllbGRpbml0KTsKKworICBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKGZvcm0pOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgdW5wb3N0X2Zvcm0oRk9STSAqIGZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBFcmFzZSBmb3JtIGZyb20gaXRzIGFzc29jaWF0ZWQgc3Vid2luZG93LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX1BPU1RFRCAgICAtIGZvcm0gaXNuJ3QgcG9zdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9TVEFURSAgICAgLSBjYWxsZWQgZnJvbSBhIGhvb2sgcm91dGluZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3VucG9zdF9mb3JtKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJ1bnBvc3RfZm9ybSglcCkiKSwgZm9ybSkpOworCisgIGlmICghZm9ybSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmICghKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpKQorICAgIFJFVFVSTihFX05PVF9QT1NURUQpOworCisgIGlmIChmb3JtLT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorICAgIFJFVFVSTihFX0JBRF9TVEFURSk7CisKKyAgQ2FsbF9Ib29rKGZvcm0sIGZpZWxkdGVybSk7CisgIENhbGxfSG9vayhmb3JtLCBmb3JtdGVybSk7CisKKyAgd2VyYXNlKEdldF9Gb3JtX1dpbmRvdyhmb3JtKSk7CisgIGRlbHdpbihmb3JtLT53KTsKKyAgZm9ybS0+dyA9IChXSU5ET1cgKikwOworICBmb3JtLT5zdGF0dXMgJj0gfl9QT1NURUQ7CisgIFJFVFVSTihFX09LKTsKK30KKworLyogZnJtX3Bvc3QuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX3JlcV9uYW1lLmMgYi9mb3JtL2ZybV9yZXFfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzlhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZybV9yZXFfbmFtZS5jCkBAIC0wLDAgKzEsMTcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBmb3JtX3JlcXVlc3RfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFJvdXRpbmVzIHRvIGhhbmRsZSBleHRlcm5hbCBuYW1lcyBvZiBtZW51IHJlcXVlc3RzICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9yZXFfbmFtZS5jLHYgMS4xNiAyMDA4LzA3LzA1IDIzOjIyOjA4IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X25hbWVzW01BWF9GT1JNX0NPTU1BTkQgLSBNSU5fRk9STV9DT01NQU5EICsgMV0gPQoreworICAiTkVYVF9QQUdFIiwKKyAgIlBSRVZfUEFHRSIsCisgICJGSVJTVF9QQUdFIiwKKyAgIkxBU1RfUEFHRSIsCisKKyAgIk5FWFRfRklFTEQiLAorICAiUFJFVl9GSUVMRCIsCisgICJGSVJTVF9GSUVMRCIsCisgICJMQVNUX0ZJRUxEIiwKKyAgIlNORVhUX0ZJRUxEIiwKKyAgIlNQUkVWX0ZJRUxEIiwKKyAgIlNGSVJTVF9GSUVMRCIsCisgICJTTEFTVF9GSUVMRCIsCisgICJMRUZUX0ZJRUxEIiwKKyAgIlJJR0hUX0ZJRUxEIiwKKyAgIlVQX0ZJRUxEIiwKKyAgIkRPV05fRklFTEQiLAorCisgICJORVhUX0NIQVIiLAorICAiUFJFVl9DSEFSIiwKKyAgIk5FWFRfTElORSIsCisgICJQUkVWX0xJTkUiLAorICAiTkVYVF9XT1JEIiwKKyAgIlBSRVZfV09SRCIsCisgICJCRUdfRklFTEQiLAorICAiRU5EX0ZJRUxEIiwKKyAgIkJFR19MSU5FIiwKKyAgIkVORF9MSU5FIiwKKyAgIkxFRlRfQ0hBUiIsCisgICJSSUdIVF9DSEFSIiwKKyAgIlVQX0NIQVIiLAorICAiRE9XTl9DSEFSIiwKKworICAiTkVXX0xJTkUiLAorICAiSU5TX0NIQVIiLAorICAiSU5TX0xJTkUiLAorICAiREVMX0NIQVIiLAorICAiREVMX1BSRVYiLAorICAiREVMX0xJTkUiLAorICAiREVMX1dPUkQiLAorICAiQ0xSX0VPTCIsCisgICJDTFJfRU9GIiwKKyAgIkNMUl9GSUVMRCIsCisgICJPVkxfTU9ERSIsCisgICJJTlNfTU9ERSIsCisgICJTQ1JfRkxJTkUiLAorICAiU0NSX0JMSU5FIiwKKyAgIlNDUl9GUEFHRSIsCisgICJTQ1JfQlBBR0UiLAorICAiU0NSX0ZIUEFHRSIsCisgICJTQ1JfQkhQQUdFIiwKKyAgIlNDUl9GQ0hBUiIsCisgICJTQ1JfQkNIQVIiLAorICAiU0NSX0hGTElORSIsCisgICJTQ1JfSEJMSU5FIiwKKyAgIlNDUl9IRkhBTEYiLAorICAiU0NSX0hCSEFMRiIsCisKKyAgIlZBTElEQVRJT04iLAorICAiTkVYVF9DSE9JQ0UiLAorICAiUFJFVl9DSE9JQ0UiCit9OworCisjZGVmaW5lIEFfU0laRSAoc2l6ZW9mKHJlcXVlc3RfbmFtZXMpL3NpemVvZihyZXF1ZXN0X25hbWVzWzBdKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGNvbnN0IGNoYXIgKiBmb3JtX3JlcXVlc3RfbmFtZSAoaW50IHJlcXVlc3QpOworfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBleHRlcm5hbCBuYW1lIG9mIGEgZm9ybSByZXF1ZXN0LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBuYW1lICAgICAgLSBvbiBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAtIG9uIGludmFsaWQgcmVxdWVzdCBjb2RlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorZm9ybV9yZXF1ZXN0X25hbWUoaW50IHJlcXVlc3QpCit7CisgIFQoKFRfQ0FMTEVEKCJmb3JtX3JlcXVlc3RfbmFtZSglZCkiKSwgcmVxdWVzdCkpOworCisgIGlmICgocmVxdWVzdCA8IE1JTl9GT1JNX0NPTU1BTkQpIHx8IChyZXF1ZXN0ID4gTUFYX0ZPUk1fQ09NTUFORCkpCisgICAgeworICAgICAgU0VUX0VSUk9SKEVfQkFEX0FSR1VNRU5UKTsKKyAgICAgIHJldHVybkNQdHIoKGNvbnN0IGNoYXIgKikwKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm5DUHRyKHJlcXVlc3RfbmFtZXNbcmVxdWVzdCAtIE1JTl9GT1JNX0NPTU1BTkRdKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmb3JtX3JlcXVlc3RfYnlfbmFtZSAoY29uc3QgY2hhciAqc3RyKTsKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNlYXJjaCBmb3IgYSByZXF1ZXN0IHdpdGggdGhpcyBuYW1lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUmVxdWVzdCBJZCAgICAgICAtIG9uIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9fTUFUQ0ggICAgICAgLSByZXF1ZXN0IG5vdCBmb3VuZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2Zvcm1fcmVxdWVzdF9ieV9uYW1lKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgLyogYmVjYXVzZSB0aGUgdGFibGUgaXMgc28gc21hbGwsIGl0IGRvZXNuJ3QgcmVhbGx5IGh1cnQKKyAgICAgdG8gcnVuIHNlcXVlbnRpYWxseSB0aHJvdWdoIGl0LgorICAgKi8KKyAgdW5zaWduZWQgaW50IGkgPSAwOworICBjaGFyIGJ1ZlsxNl07CisKKyAgVCgoVF9DQUxMRUQoImZvcm1fcmVxdWVzdF9ieV9uYW1lKCVzKSIpLCBfbmNfdmlzYnVmKHN0cikpKTsKKworICBpZiAoc3RyKQorICAgIHsKKyAgICAgIHN0cm5jcHkoYnVmLCBzdHIsIHNpemVvZihidWYpKTsKKyAgICAgIHdoaWxlICgoaSA8IHNpemVvZihidWYpKSAmJiAoYnVmW2ldICE9ICdcMCcpKQorCXsKKwkgIGJ1ZltpXSA9IHRvdXBwZXIoVUNoYXIoYnVmW2ldKSk7CisJICBpKys7CisJfQorCisgICAgICBmb3IgKGkgPSAwOyBpIDwgQV9TSVpFOyBpKyspCisJeworCSAgaWYgKHN0cm5jbXAocmVxdWVzdF9uYW1lc1tpXSwgYnVmLCBzaXplb2YoYnVmKSkgPT0gMCkKKwkgICAgcmV0dXJuQ29kZShNSU5fRk9STV9DT01NQU5EICsgKGludCkgaSk7CisJfQorICAgIH0KKyAgUkVUVVJOKEVfTk9fTUFUQ0gpOworfQorCisvKiBmcm1fcmVxX25hbWUuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX3NjYWxlLmMgYi9mb3JtL2ZybV9zY2FsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmY3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2ZybV9zY2FsZS5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9zY2FsZS5jLHYgMS45IDIwMDQvMTIvMTEgMjI6MTI6MzQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzY2FsZV9mb3JtKCBjb25zdCBGT1JNICpmb3JtLCBpbnQgKnJvd3MsIGludCAqY29scyApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBzaXplIG9mIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gbm8gZXJyb3IKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgIC0gbm8gZmllbGRzIGNvbm5lY3RlZCB0byBmb3JtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2NhbGVfZm9ybShjb25zdCBGT1JNICpmb3JtLCBpbnQgKnJvd3MsIGludCAqY29scykKK3sKKyAgVCgoVF9DQUxMRUQoInNjYWxlX2Zvcm0oJXAsJXAsJXApIiksIGZvcm0sIHJvd3MsIGNvbHMpKTsKKworICBpZiAoIWZvcm0pCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoIShmb3JtLT5maWVsZCkpCisgICAgUkVUVVJOKEVfTk9UX0NPTk5FQ1RFRCk7CisKKyAgaWYgKHJvd3MpCisgICAgKnJvd3MgPSBmb3JtLT5yb3dzOworICBpZiAoY29scykKKyAgICAqY29scyA9IGZvcm0tPmNvbHM7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmcm1fc2NhbGUuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX3N1Yi5jIGIvZm9ybS9mcm1fc3ViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiMDAyMwotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnJtX3N1Yi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9zdWIuYyx2IDEuOSAyMDA0LzEyLzExIDIyOjEzOjM5IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2Zvcm1fc3ViKEZPUk0gKmZvcm0sIFdJTkRPVyAqd2luKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBzdWJ3aW5kb3cgb2YgdGhlIGZvcm0gdG8gd2luLiAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgIC0gZm9ybSBpcyBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZm9ybV9zdWIoRk9STSAqZm9ybSwgV0lORE9XICp3aW4pCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZm9ybV9zdWIoJXAsJXApIiksIGZvcm0sIHdpbikpOworCisgIGlmIChmb3JtICYmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSkKKyAgICBSRVRVUk4oRV9QT1NURUQpOworCisgIE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5zdWIgPSB3aW47CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIFdJTkRPVyAqZm9ybV9zdWIoY29uc3QgRk9STSAqKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIHdpbmRvdyBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBwb2ludGVyIHRvIHRoZSBTdWJ3aW5kb3cuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitmb3JtX3N1Yihjb25zdCBGT1JNICpmb3JtKQoreworICBjb25zdCBGT1JNICpmOworCisgIFQoKFRfQ0FMTEVEKCJmb3JtX3N1YiglcCkiKSwgZm9ybSkpOworCisgIGYgPSBOb3JtYWxpemVfRm9ybShmb3JtKTsKKyAgcmV0dXJuV2luKEdldF9Gb3JtX1dpbmRvdyhmKSk7Cit9CisKKy8qIGZybV9zdWIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX3VzZXIuYyBiL2Zvcm0vZnJtX3VzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVlMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mcm1fdXNlci5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV91c2VyLmMsdiAxLjE0IDIwMDQvMTIvMjUgMjI6Mzc6NTYgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZm9ybV91c2VycHRyKEZPUk0gKmZvcm0sIHZvaWQgKnVzcnB0cikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgcG9pbnRlciB0aGF0IGlzIHJlc2VydmVkIGluIGFueSBmb3JtIHRvIHN0b3JlCit8ICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiByZWxldmFudCBpbmZvcm1hdGlvbnMKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAtIG9uIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZm9ybV91c2VycHRyKEZPUk0gKmZvcm0sIHZvaWQgKnVzcnB0cikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9mb3JtX3VzZXJwdHIoJXAsJXApIiksIGZvcm0sIHVzcnB0cikpOworCisgIE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT51c3JwdHIgPSB1c3JwdHI7CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKmZvcm1fdXNlcnB0cihjb25zdCBGT1JNICpmb3JtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IGZvcm0gdG8KK3wgICAgICAgICAgICAgICAgICAgIHN0b3JlIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFZhbHVlIG9mIHBvaW50ZXIuIElmIG5vIHN1Y2ggcG9pbnRlciBoYXMgYmVlbiBzZXQsCit8ICAgICAgICAgICAgICAgICAgICBOVUxMIGlzIHJldHVybmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCAqKQorZm9ybV91c2VycHRyKGNvbnN0IEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJmb3JtX3VzZXJwdHIoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuVm9pZFB0cihOb3JtYWxpemVfRm9ybShmb3JtKS0+dXNycHRyKTsKK30KKworLyogZnJtX3VzZXIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnJtX3dpbi5jIGIvZm9ybS9mcm1fd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1OGYwYQotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnJtX3dpbi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV93aW4uYyx2IDEuMTMgMjAwNC8xMi8xMSAyMjoxNToyNyB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9mb3JtX3dpbihGT1JNICpmb3JtLFdJTkRPVyAqd2luKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSB3aW5kb3cgb2YgdGhlIGZvcm0gdG8gd2luLiAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgIC0gZm9ybSBpcyBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZm9ybV93aW4oRk9STSAqZm9ybSwgV0lORE9XICp3aW4pCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZm9ybV93aW4oJXAsJXApIiksIGZvcm0sIHdpbikpOworCisgIGlmIChmb3JtICYmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSkKKyAgICBSRVRVUk4oRV9QT1NURUQpOworCisgIE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT53aW4gPSB3aW47CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIFdJTkRPVyAqZm9ybV93aW4oY29uc3QgRk9STSAqKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIHdpbmRvdyBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBwb2ludGVyIHRvIHRoZSBXaW5kb3cgb3Igc3Rkc2NyIGlmIHRoZXJlIGlzIG5vbmUuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitmb3JtX3dpbihjb25zdCBGT1JNICpmb3JtKQoreworICBjb25zdCBGT1JNICpmOworCisgIFQoKFRfQ0FMTEVEKCJmb3JtX3dpbiglcCkiKSwgZm9ybSkpOworCisgIGYgPSBOb3JtYWxpemVfRm9ybShmb3JtKTsKKyAgcmV0dXJuV2luKGYtPndpbiA/IGYtPndpbiA6IHN0ZHNjcik7Cit9CisKKy8qIGZybV93aW4uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnR5X2FsbnVtLmMgYi9mb3JtL2Z0eV9hbG51bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZGQyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2Z0eV9hbG51bS5jCkBAIC0wLDAgKzEsMTY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdXRob3IgOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZ0eV9hbG51bS5jLHYgMS4yMSAyMDA3LzEwLzEzIDE5OjMxOjUyIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgdGhpc0FSRyBhbG51bUFSRworCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50IHdpZHRoOworICB9Cit0aGlzQVJHOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpNYWtlX1RoaXNfVHlwZSh2YV9saXN0ICphcCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgYWxwaGFudW1lcmljIHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZSBvciBOVUxMIG9uIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorTWFrZV9UaGlzX1R5cGUodmFfbGlzdCAqYXApCit7CisgIHRoaXNBUkcgKmFyZ3AgPSB0eXBlTWFsbG9jKHRoaXNBUkcsIDEpOworCisgIGlmIChhcmdwKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJ0aGlzQVJHICVwIiksIGFyZ3ApKTsKKyAgICAgIGFyZ3AtPndpZHRoID0gdmFfYXJnKCphcCwgaW50KTsKKyAgICB9CisKKyAgcmV0dXJuICgodm9pZCAqKWFyZ3ApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpDb3B5X1RoaXNUeXBlKGNvbnN0IHZvaWQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHN0cnVjdHVyZSBmb3IgYWxwaGFudW1lcmljIHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZSBvciBOVUxMIG9uIGVycm9yLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK0NvcHlfVGhpc19UeXBlKGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNvbnN0IHRoaXNBUkcgKmFwID0gKGNvbnN0IHRoaXNBUkcgKilhcmdwOworICB0aGlzQVJHICpyZXN1bHQgPSB0eXBlTWFsbG9jKHRoaXNBUkcsIDEpOworCisgIGlmIChyZXN1bHQpCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoInRoaXNBUkcgJXAiKSwgcmVzdWx0KSk7CisgICAgICAqcmVzdWx0ID0gKmFwOworICAgIH0KKworICByZXR1cm4gKCh2b2lkICopcmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBGcmVlX1RoaXNfVHlwZSh2b2lkICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRnJlZSBzdHJ1Y3R1cmUgZm9yIGFscGhhbnVtZXJpYyB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitGcmVlX1RoaXNfVHlwZSh2b2lkICphcmdwKQoreworICBpZiAoYXJncCkKKyAgICBmcmVlKGFyZ3ApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfQ2hhcmFjdGVyKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgYSBjaGFyYWN0ZXIgZm9yIHRoZSBhbHBoYW51bWVyaWMgdHlwZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gY2hhcmFjdGVyIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGNoYXJhY3RlciBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX1RoaXNfQ2hhcmFjdGVyKGludCBjLCBjb25zdCB2b2lkICphcmdwIEdDQ19VTlVTRUQpCit7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgaWYgKGlzd2FsbnVtKCh3aW50X3QpIGMpKQorICAgIHJldHVybiBUUlVFOworI2VuZGlmCisgIHJldHVybiAoaXNhbG51bShVQ2hhcihjKSkgPyBUUlVFIDogRkFMU0UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfRmllbGQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgVmFsaWRhdGUgYnVmZmVyIGNvbnRlbnQgdG8gYmUgYSB2YWxpZCBhbHBoYW51bWVyaWMgdmFsdWUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gZmllbGQgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gZmllbGQgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19UaGlzX0ZpZWxkKEZJRUxEICpmaWVsZCwgY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgaW50IHdpZHRoID0gKChjb25zdCB0aGlzQVJHICopYXJncCktPndpZHRoOworICB1bnNpZ25lZCBjaGFyICpicCA9ICh1bnNpZ25lZCBjaGFyICopZmllbGRfYnVmZmVyKGZpZWxkLCAwKTsKKyAgYm9vbCByZXN1bHQgPSAod2lkdGggPCAwKTsKKworICBDaGVja19DVFlQRV9GaWVsZChyZXN1bHQsIGJwLCB3aWR0aCwgQ2hlY2tfVGhpc19DaGFyYWN0ZXIpOworICByZXR1cm4gKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBGSUVMRFRZUEUgdHlwZVRISVMgPQoreworICBfSEFTX0FSR1MgfCBfUkVTSURFTlQsCisgIDEsCQkJCS8qIHRoaXMgaXMgbXV0YWJsZSwgc28gd2UgY2FuJ3QgYmUgY29uc3QgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCisgIChGSUVMRFRZUEUgKikwLAorICBNYWtlX1RoaXNfVHlwZSwKKyAgQ29weV9UaGlzX1R5cGUsCisgIEZyZWVfVGhpc19UeXBlLAorICBDaGVja19UaGlzX0ZpZWxkLAorICBDaGVja19UaGlzX0NoYXJhY3RlciwKKyAgTlVMTCwKKyAgTlVMTAorfTsKKworTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEVFlQRSopIFRZUEVfQUxOVU0gPSAmdHlwZVRISVM7CisKKy8qIGZ0eV9hbG51bS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mdHlfYWxwaGEuYyBiL2Zvcm0vZnR5X2FscGhhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0OTU0NAotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnR5X2FscGhhLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIEF1dGhvciA6IEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnR5X2FscGhhLmMsdiAxLjIzIDIwMDcvMTAvMTMgMTk6MzI6MDkgdG9tIEV4cCAkIikKKworI2RlZmluZSB0aGlzQVJHIGFscGhhQVJHCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgd2lkdGg7CisgIH0KK3RoaXNBUkc7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKk1ha2VfVGhpc19UeXBlKHZhX2xpc3QgKmFwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQWxsb2NhdGUgc3RydWN0dXJlIGZvciBhbHBoYSB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK01ha2VfVGhpc19UeXBlKHZhX2xpc3QgKmFwKQoreworICB0aGlzQVJHICphcmdwID0gdHlwZU1hbGxvYyh0aGlzQVJHLCAxKTsKKworICBpZiAoYXJncCkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCBhcmdwKSk7CisgICAgICBhcmdwLT53aWR0aCA9IHZhX2FyZygqYXAsIGludCk7CisgICAgfQorCisgIHJldHVybiAoKHZvaWQgKilhcmdwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqQ29weV9UaGlzX1R5cGUoY29uc3Qgdm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHN0cnVjdHVyZSBmb3IgYWxwaGEgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorQ29weV9UaGlzX1R5cGUoY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgY29uc3QgdGhpc0FSRyAqYXAgPSAoY29uc3QgdGhpc0FSRyAqKWFyZ3A7CisgIHRoaXNBUkcgKnJlc3VsdCA9IHR5cGVNYWxsb2ModGhpc0FSRywgMSk7CisKKyAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCByZXN1bHQpKTsKKyAgICAgICpyZXN1bHQgPSAqYXA7CisgICAgfQorCisgIHJldHVybiAoKHZvaWQgKilyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEZyZWVfVGhpc19UeXBlKHZvaWQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBGcmVlIHN0cnVjdHVyZSBmb3IgYWxwaGEgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorRnJlZV9UaGlzX1R5cGUodm9pZCAqYXJncCkKK3sKKyAgaWYgKGFyZ3ApCisgICAgZnJlZShhcmdwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19UaGlzX0NoYXJhY3RlcigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGEgY2hhcmFjdGVyIGZvciB0aGUgYWxwaGEgdHlwZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gY2hhcmFjdGVyIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGNoYXJhY3RlciBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX1RoaXNfQ2hhcmFjdGVyKGludCBjLCBjb25zdCB2b2lkICphcmdwIEdDQ19VTlVTRUQpCit7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgaWYgKGlzd2FscGhhKCh3aW50X3QpIGMpKQorICAgIHJldHVybiBUUlVFOworI2VuZGlmCisgIHJldHVybiAoaXNhbHBoYShVQ2hhcihjKSkgPyBUUlVFIDogRkFMU0UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfRmllbGQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgVmFsaWRhdGUgYnVmZmVyIGNvbnRlbnQgdG8gYmUgYSB2YWxpZCBhbHBoYSB2YWx1ZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBmaWVsZCBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBmaWVsZCBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX1RoaXNfRmllbGQoRklFTEQgKmZpZWxkLCBjb25zdCB2b2lkICphcmdwKQoreworICBpbnQgd2lkdGggPSAoKGNvbnN0IHRoaXNBUkcgKilhcmdwKS0+d2lkdGg7CisgIHVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilmaWVsZF9idWZmZXIoZmllbGQsIDApOworICBib29sIHJlc3VsdCA9ICh3aWR0aCA8IDApOworCisgIENoZWNrX0NUWVBFX0ZpZWxkKHJlc3VsdCwgYnAsIHdpZHRoLCBDaGVja19UaGlzX0NoYXJhY3Rlcik7CisgIHJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIEZJRUxEVFlQRSB0eXBlVEhJUyA9Cit7CisgIF9IQVNfQVJHUyB8IF9SRVNJREVOVCwKKyAgMSwJCQkJLyogdGhpcyBpcyBtdXRhYmxlLCBzbyB3ZSBjYW4ndCBiZSBjb25zdCAqLworICAoRklFTERUWVBFICopMCwKKyAgKEZJRUxEVFlQRSAqKTAsCisgIE1ha2VfVGhpc19UeXBlLAorICBDb3B5X1RoaXNfVHlwZSwKKyAgRnJlZV9UaGlzX1R5cGUsCisgIENoZWNrX1RoaXNfRmllbGQsCisgIENoZWNrX1RoaXNfQ2hhcmFjdGVyLAorICBOVUxMLAorICBOVUxMCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFKikgVFlQRV9BTFBIQSA9ICZ0eXBlVEhJUzsKKworLyogZnR5X2FscGhhLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2Z0eV9lbnVtLmMgYi9mb3JtL2Z0eV9lbnVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YTA4MAotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vZnR5X2VudW0uYwpAQCAtMCwwICsxLDMzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQXV0aG9yIDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmdHlfZW51bS5jLHYgMS4yMiAyMDA3LzEwLzEzIDE5OjMyOjI2IHRvbSBFeHAgJCIpCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBjaGFyICoqa3dkczsKKyAgICBpbnQgY291bnQ7CisgICAgYm9vbCBjaGVja2Nhc2U7CisgICAgYm9vbCBjaGVja3VuaXF1ZTsKKyAgfQorZW51bUFSRzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpNYWtlX0VudW1fVHlwZSggdmFfbGlzdCAqIGFwICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgZW51bWVyYXRpb24gdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitNYWtlX0VudW1fVHlwZSh2YV9saXN0ICphcCkKK3sKKyAgZW51bUFSRyAqYXJncCA9IHR5cGVNYWxsb2MoZW51bUFSRywgMSk7CisKKyAgaWYgKGFyZ3ApCisgICAgeworICAgICAgaW50IGNudCA9IDA7CisgICAgICBjaGFyICoqa3AgPSAoY2hhciAqKikwOworICAgICAgaW50IGNjYXNlLCBjdW5pcXVlOworCisgICAgICBUKChUX0NSRUFURSgiZW51bUFSRyAlcCIpLCBhcmdwKSk7CisgICAgICBhcmdwLT5rd2RzID0gdmFfYXJnKCphcCwgY2hhciAqKik7CisgICAgICBjY2FzZSA9IHZhX2FyZygqYXAsIGludCk7CisgICAgICBjdW5pcXVlID0gdmFfYXJnKCphcCwgaW50KTsKKworICAgICAgYXJncC0+Y2hlY2tjYXNlID0gY2Nhc2UgPyBUUlVFIDogRkFMU0U7CisgICAgICBhcmdwLT5jaGVja3VuaXF1ZSA9IGN1bmlxdWUgPyBUUlVFIDogRkFMU0U7CisKKyAgICAgIGtwID0gYXJncC0+a3dkczsKKyAgICAgIHdoaWxlIChrcCAmJiAoKmtwKyspKQorCWNudCsrOworICAgICAgYXJncC0+Y291bnQgPSBjbnQ7CisgICAgfQorICByZXR1cm4gKHZvaWQgKilhcmdwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKkNvcHlfRW51bV9UeXBlKCBjb25zdCB2b2lkICogYXJncCApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHN0cnVjdHVyZSBmb3IgZW51bWVyYXRpb24gdHlwZSBhcmd1bWVudC4gIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitDb3B5X0VudW1fVHlwZShjb25zdCB2b2lkICphcmdwKQoreworICBlbnVtQVJHICpyZXN1bHQgPSAoZW51bUFSRyAqKTA7CisKKyAgaWYgKGFyZ3ApCisgICAgeworICAgICAgY29uc3QgZW51bUFSRyAqYXAgPSAoY29uc3QgZW51bUFSRyAqKWFyZ3A7CisKKyAgICAgIHJlc3VsdCA9IHR5cGVNYWxsb2MoZW51bUFSRywgMSk7CisKKyAgICAgIGlmIChyZXN1bHQpCisJeworCSAgVCgoVF9DUkVBVEUoImVudW1BUkcgJXAiKSwgcmVzdWx0KSk7CisJICAqcmVzdWx0ID0gKmFwOworCX0KKyAgICB9CisgIHJldHVybiAodm9pZCAqKXJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEZyZWVfRW51bV9UeXBlKCB2b2lkICogYXJncCApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBGcmVlIHN0cnVjdHVyZSBmb3IgZW51bWVyYXRpb24gdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorRnJlZV9FbnVtX1R5cGUodm9pZCAqYXJncCkKK3sKKyAgaWYgKGFyZ3ApCisgICAgZnJlZShhcmdwKTsKK30KKworI2RlZmluZSBTS0lQX1NQQUNFKHgpIHdoaWxlKCgoKih4KSkhPSdcMCcpICYmIChpc19ibGFuaygqKHgpKSkpICh4KSsrCisjZGVmaW5lIE5PTUFUQ0ggMAorI2RlZmluZSBQQVJUSUFMIDEKKyNkZWZpbmUgRVhBQ1QgICAyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IENvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqIHMsICAKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgIGNjYXNlICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSB0ZXh0IGluICdidWYnIG1hdGNoZXMgdGhlCit8ICAgICAgICAgICAgICAgICAgICB0ZXh0IGluICdzJywgYXQgbGVhc3QgcGFydGlhbC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE5PTUFUQ0ggICAtIGJ1ZmZlciBkb2Vzbid0IG1hdGNoCit8ICAgICAgICAgICAgICAgICAgICBQQVJUSUFMICAgLSBidWZmZXIgbWF0Y2hlcyBwYXJ0aWFsbHkKK3wgICAgICAgICAgICAgICAgICAgIEVYQUNUICAgICAtIGJ1ZmZlciBtYXRjaGVzIGV4YWN0bHkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitDb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwlib29sIGNjYXNlKQoreworICBTS0lQX1NQQUNFKGJ1Zik7CQkvKiBTa2lwIGxlYWRpbmcgc3BhY2VzIGluIGJvdGggdGV4dHMgKi8KKyAgU0tJUF9TUEFDRShzKTsKKworICBpZiAoKmJ1ZiA9PSAnXDAnKQorICAgIHsKKyAgICAgIHJldHVybiAoKCgqcykgIT0gJ1wwJykgPyBOT01BVENIIDogRVhBQ1QpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChjY2FzZSkKKwl7CisJICB3aGlsZSAoKnMrKyA9PSAqYnVmKQorCSAgICB7CisJICAgICAgaWYgKCpidWYrKyA9PSAnXDAnKQorCQlyZXR1cm4gRVhBQ1Q7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKHRvdXBwZXIoKnMrKykgPT0gdG91cHBlcigqYnVmKSkKKwkgICAgeworCSAgICAgIGlmICgqYnVmKysgPT0gJ1wwJykKKwkJcmV0dXJuIEVYQUNUOworCSAgICB9CisJfQorICAgIH0KKyAgLyogQXQgdGhpcyBsb2NhdGlvbiBidWYgcG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hlcmUgaXQgbm8gbG9uZ2VyCisgICAgIG1hdGNoZXMgd2l0aCBzLiBTbyBpZiBvbmx5IGJsYW5rcyBhcmUgZm9sbG93aW5nLCB3ZSBoYXZlIGEgcGFydGlhbAorICAgICBtYXRjaCBvdGhlcndpc2UgdGhlcmUgaXMgbm8gbWF0Y2ggKi8KKyAgU0tJUF9TUEFDRShidWYpOworICBpZiAoKmJ1ZikKKyAgICByZXR1cm4gTk9NQVRDSDsKKworICAvKiBJZiBpdCBoYXBwZW5zIHRoYXQgdGhlIHJlZmVyZW5jZSBidWZmZXIgaXMgYXQgaXRzIGVuZCwgdGhlIHBhcnRpYWwKKyAgICAgbWF0Y2ggaXMgYWN0dWFsbHkgYW4gZXhhY3QgbWF0Y2guICovCisgIHJldHVybiAoKHNbLTFdICE9ICdcMCcpID8gUEFSVElBTCA6IEVYQUNUKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX0VudW1fRmllbGQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVmFsaWRhdGUgYnVmZmVyIGNvbnRlbnQgdG8gYmUgYSB2YWxpZCBlbnVtZXJhdGlvbiB2YWx1ZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBmaWVsZCBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBmaWVsZCBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX0VudW1fRmllbGQoRklFTEQgKmZpZWxkLCBjb25zdCB2b2lkICphcmdwKQoreworICBjaGFyICoqa3dkcyA9ICgoY29uc3QgZW51bUFSRyAqKWFyZ3ApLT5rd2RzOworICBib29sIGNjYXNlID0gKChjb25zdCBlbnVtQVJHICopYXJncCktPmNoZWNrY2FzZTsKKyAgYm9vbCB1bmlxdWUgPSAoKGNvbnN0IGVudW1BUkcgKilhcmdwKS0+Y2hlY2t1bmlxdWU7CisgIHVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilmaWVsZF9idWZmZXIoZmllbGQsIDApOworICBjaGFyICpzLCAqdCwgKnA7CisgIGludCByZXM7CisKKyAgd2hpbGUgKGt3ZHMgJiYgKHMgPSAoKmt3ZHMrKykpKQorICAgIHsKKyAgICAgIGlmICgocmVzID0gQ29tcGFyZSgodW5zaWduZWQgY2hhciAqKXMsIGJwLCBjY2FzZSkpICE9IE5PTUFUQ0gpCisJeworCSAgcCA9IHQgPSBzOwkJLyogdCBpcyBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggKi8KKwkgIGlmICgodW5pcXVlICYmIHJlcyAhPSBFWEFDVCkpCisJICAgIHsKKwkgICAgICB3aGlsZSAoa3dkcyAmJiAocCA9ICprd2RzKyspKQorCQl7CisJCSAgaWYgKChyZXMgPSBDb21wYXJlKCh1bnNpZ25lZCBjaGFyICopcCwgYnAsIGNjYXNlKSkgIT0gTk9NQVRDSCkKKwkJICAgIHsKKwkJICAgICAgaWYgKHJlcyA9PSBFWEFDVCkKKwkJCXsKKwkJCSAgdCA9IHA7CisJCQkgIGJyZWFrOworCQkJfQorCQkgICAgICBlbHNlCisJCQl0ID0gKGNoYXIgKikwOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIGlmICh0KQorCSAgICB7CisJICAgICAgc2V0X2ZpZWxkX2J1ZmZlcihmaWVsZCwgMCwgdCk7CisJICAgICAgcmV0dXJuIFRSVUU7CisJICAgIH0KKwkgIGlmICghcCkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZHVtbXlbXSA9Cit7KGNoYXIgKikwfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIE5leHRfRW51bShGSUVMRCAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgZm9yIHRoZSBuZXh0IGVudW1lcmF0aW9uIHZhbHVlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIG5leHQgdmFsdWUgZm91bmQgYW5kIGxvYWRlZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBubyBuZXh0IHZhbHVlIGxvYWRlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitOZXh0X0VudW0oRklFTEQgKmZpZWxkLCBjb25zdCB2b2lkICphcmdwKQoreworICBjb25zdCBlbnVtQVJHICphcmdzID0gKGNvbnN0IGVudW1BUkcgKilhcmdwOworICBjaGFyICoqa3dkcyA9IGFyZ3MtPmt3ZHM7CisgIGJvb2wgY2Nhc2UgPSBhcmdzLT5jaGVja2Nhc2U7CisgIGludCBjbnQgPSBhcmdzLT5jb3VudDsKKyAgdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisKKyAgaWYgKGt3ZHMpCisgICAgeworICAgICAgd2hpbGUgKGNudC0tKQorCXsKKwkgIGlmIChDb21wYXJlKCh1bnNpZ25lZCBjaGFyICopKCprd2RzKyspLCBicCwgY2Nhc2UpID09IEVYQUNUKQorCSAgICBicmVhazsKKwl9CisgICAgICBpZiAoY250IDw9IDApCisJa3dkcyA9IGFyZ3MtPmt3ZHM7CisgICAgICBpZiAoKGNudCA+PSAwKSB8fCAoQ29tcGFyZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKWR1bW15LCBicCwgY2Nhc2UpID09IEVYQUNUKSkKKwl7CisJICBzZXRfZmllbGRfYnVmZmVyKGZpZWxkLCAwLCAqa3dkcyk7CisJICByZXR1cm4gVFJVRTsKKwl9CisgICAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBQcmV2aW91c19FbnVtKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIGFyZ3ApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBmb3IgdGhlIHByZXZpb3VzIGVudW1lcmF0aW9uIHZhbHVlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIHByZXZpb3VzIHZhbHVlIGZvdW5kIGFuZCBsb2FkZWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gbm8gcHJldmlvdXMgdmFsdWUgbG9hZGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK1ByZXZpb3VzX0VudW0oRklFTEQgKmZpZWxkLCBjb25zdCB2b2lkICphcmdwKQoreworICBjb25zdCBlbnVtQVJHICphcmdzID0gKGNvbnN0IGVudW1BUkcgKilhcmdwOworICBpbnQgY250ID0gYXJncy0+Y291bnQ7CisgIGNoYXIgKiprd2RzID0gJmFyZ3MtPmt3ZHNbY250IC0gMV07CisgIGJvb2wgY2Nhc2UgPSBhcmdzLT5jaGVja2Nhc2U7CisgIHVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilmaWVsZF9idWZmZXIoZmllbGQsIDApOworCisgIGlmIChrd2RzKQorICAgIHsKKyAgICAgIHdoaWxlIChjbnQtLSkKKwl7CisJICBpZiAoQ29tcGFyZSgodW5zaWduZWQgY2hhciAqKSgqa3dkcy0tKSwgYnAsIGNjYXNlKSA9PSBFWEFDVCkKKwkgICAgYnJlYWs7CisJfQorCisgICAgICBpZiAoY250IDw9IDApCisJa3dkcyA9ICZhcmdzLT5rd2RzW2FyZ3MtPmNvdW50IC0gMV07CisKKyAgICAgIGlmICgoY250ID49IDApIHx8IChDb21wYXJlKChjb25zdCB1bnNpZ25lZCBjaGFyICopZHVtbXksIGJwLCBjY2FzZSkgPT0gRVhBQ1QpKQorCXsKKwkgIHNldF9maWVsZF9idWZmZXIoZmllbGQsIDAsICprd2RzKTsKKwkgIHJldHVybiBUUlVFOworCX0KKyAgICB9CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEZJRUxEVFlQRSB0eXBlRU5VTSA9Cit7CisgIF9IQVNfQVJHUyB8IF9IQVNfQ0hPSUNFIHwgX1JFU0lERU5ULAorICAxLAkJCQkvKiB0aGlzIGlzIG11dGFibGUsIHNvIHdlIGNhbid0IGJlIGNvbnN0ICovCisgIChGSUVMRFRZUEUgKikwLAorICAoRklFTERUWVBFICopMCwKKyAgTWFrZV9FbnVtX1R5cGUsCisgIENvcHlfRW51bV9UeXBlLAorICBGcmVlX0VudW1fVHlwZSwKKyAgQ2hlY2tfRW51bV9GaWVsZCwKKyAgTlVMTCwKKyAgTmV4dF9FbnVtLAorICBQcmV2aW91c19FbnVtCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFICopCitUWVBFX0VOVU0gPSAmdHlwZUVOVU07CisKKy8qIGZ0eV9lbnVtLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2Z0eV9pbnQuYyBiL2Zvcm0vZnR5X2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNTM2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2Z0eV9pbnQuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQXV0aG9yIDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmdHlfaW50LmMsdiAxLjIyIDIwMDcvMTAvMTMgMTk6MzI6NDAgdG9tIEV4cCAkIikKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIGlzRGlnaXQoYykgKGlzd2RpZ2l0KCh3aW50X3QpKGMpKSB8fCBpc2RpZ2l0KFVDaGFyKGMpKSkKKyNlbHNlCisjZGVmaW5lIGlzRGlnaXQoYykgaXNkaWdpdChVQ2hhcihjKSkKKyNlbmRpZgorCisjZGVmaW5lIHRoaXNBUkcgaW50ZWdlckFSRworCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50IHByZWNpc2lvbjsKKyAgICBsb25nIGxvdzsKKyAgICBsb25nIGhpZ2g7CisgIH0KK3RoaXNBUkc7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqTWFrZV9UaGlzX1R5cGUoIHZhX2xpc3QgKiBhcCApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBBbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yIGludGVnZXIgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitNYWtlX1RoaXNfVHlwZSh2YV9saXN0ICphcCkKK3sKKyAgdGhpc0FSRyAqYXJncCA9IHR5cGVNYWxsb2ModGhpc0FSRywgMSk7CisKKyAgaWYgKGFyZ3ApCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoInRoaXNBUkcgJXAiKSwgYXJncCkpOworICAgICAgYXJncC0+cHJlY2lzaW9uID0gdmFfYXJnKCphcCwgaW50KTsKKyAgICAgIGFyZ3AtPmxvdyA9IHZhX2FyZygqYXAsIGxvbmcpOworICAgICAgYXJncC0+aGlnaCA9IHZhX2FyZygqYXAsIGxvbmcpOworICAgIH0KKyAgcmV0dXJuICh2b2lkICopYXJncDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpDb3B5X1RoaXNfVHlwZShjb25zdCB2b2lkICogYXJncCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgc3RydWN0dXJlIGZvciBpbnRlZ2VyIHR5cGUgYXJndW1lbnQuICAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorQ29weV9UaGlzX1R5cGUoY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgY29uc3QgdGhpc0FSRyAqYXAgPSAoY29uc3QgdGhpc0FSRyAqKWFyZ3A7CisgIHRoaXNBUkcgKnJlc3VsdCA9ICh0aGlzQVJHICopIDA7CisKKyAgaWYgKGFyZ3ApCisgICAgeworICAgICAgcmVzdWx0ID0gdHlwZU1hbGxvYyh0aGlzQVJHLCAxKTsKKyAgICAgIGlmIChyZXN1bHQpCisJeworCSAgVCgoVF9DUkVBVEUoInRoaXNBUkcgJXAiKSwgcmVzdWx0KSk7CisJICAqcmVzdWx0ID0gKmFwOworCX0KKyAgICB9CisgIHJldHVybiAodm9pZCAqKXJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEZyZWVfVGhpc19UeXBlKHZvaWQgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgRnJlZSBzdHJ1Y3R1cmUgZm9yIGludGVnZXIgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorRnJlZV9UaGlzX1R5cGUodm9pZCAqYXJncCkKK3sKKyAgaWYgKGFyZ3ApCisgICAgZnJlZShhcmdwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfRmllbGQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVmFsaWRhdGUgYnVmZmVyIGNvbnRlbnQgdG8gYmUgYSB2YWxpZCBpbnRlZ2VyIHZhbHVlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGZpZWxkIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGZpZWxkIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfVGhpc19GaWVsZChGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNvbnN0IHRoaXNBUkcgKmFyZ2kgPSAoY29uc3QgdGhpc0FSRyAqKWFyZ3A7CisgIGxvbmcgbG93ID0gYXJnaS0+bG93OworICBsb25nIGhpZ2ggPSBhcmdpLT5oaWdoOworICBpbnQgcHJlYyA9IGFyZ2ktPnByZWNpc2lvbjsKKyAgdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisgIGNoYXIgKnMgPSAoY2hhciAqKWJwOworICBsb25nIHZhbDsKKyAgY2hhciBidWZbMTAwXTsKKyAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICB3aGlsZSAoKmJwICYmICpicCA9PSAnICcpCisgICAgYnArKzsKKyAgaWYgKCpicCkKKyAgICB7CisgICAgICBpZiAoKmJwID09ICctJykKKwlicCsrOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgICBpZiAoKmJwKQorCXsKKwkgIGJvb2wgYmxhbmsgPSBGQUxTRTsKKwkgIGludCBsZW47CisJICBpbnQgbjsKKwkgIHdjaGFyX3QgKmxpc3QgPSBfbmNfV2lkZW5fU3RyaW5nKChjaGFyICopYnAsICZsZW4pOworCisJICBpZiAobGlzdCAhPSAwKQorCSAgICB7CisJICAgICAgcmVzdWx0ID0gVFJVRTsKKwkgICAgICBmb3IgKG4gPSAwOyBuIDwgbGVuOyArK24pCisJCXsKKwkJICBpZiAoYmxhbmspCisJCSAgICB7CisJCSAgICAgIGlmIChsaXN0W25dICE9ICcgJykKKwkJCXsKKwkJCSAgcmVzdWx0ID0gRkFMU0U7CisJCQkgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQkgIGVsc2UgaWYgKGxpc3Rbbl0gPT0gJyAnKQorCQkgICAgeworCQkgICAgICBibGFuayA9IFRSVUU7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoIWlzRGlnaXQobGlzdFtuXSkpCisJCSAgICB7CisJCSAgICAgIHJlc3VsdCA9IEZBTFNFOworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICAgIGZyZWUobGlzdCk7CisJICAgIH0KKwl9CisjZWxzZQorICAgICAgd2hpbGUgKCpicCkKKwl7CisJICBpZiAoIWlzZGlnaXQoVUNoYXIoKmJwKSkpCisJICAgIGJyZWFrOworCSAgYnArKzsKKwl9CisgICAgICB3aGlsZSAoKmJwICYmICpicCA9PSAnICcpCisJYnArKzsKKyAgICAgIHJlc3VsdCA9ICgqYnAgPT0gJ1wwJyk7CisjZW5kaWYKKyAgICAgIGlmIChyZXN1bHQpCisJeworCSAgdmFsID0gYXRvbChzKTsKKwkgIGlmIChsb3cgPCBoaWdoKQorCSAgICB7CisJICAgICAgaWYgKHZhbCA8IGxvdyB8fCB2YWwgPiBoaWdoKQorCQlyZXN1bHQgPSBGQUxTRTsKKwkgICAgfQorCSAgaWYgKHJlc3VsdCkKKwkgICAgeworCSAgICAgIHNwcmludGYoYnVmLCAiJS4qbGQiLCAocHJlYyA+IDAgPyBwcmVjIDogMCksIHZhbCk7CisJICAgICAgc2V0X2ZpZWxkX2J1ZmZlcihmaWVsZCwgMCwgYnVmKTsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiAocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfQ2hhcmFjdGVyKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogYXJncCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGEgY2hhcmFjdGVyIGZvciB0aGUgaW50ZWdlciB0eXBlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBjaGFyYWN0ZXIgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gY2hhcmFjdGVyIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfVGhpc19DaGFyYWN0ZXIoaW50IGMsIGNvbnN0IHZvaWQgKmFyZ3AgR0NDX1VOVVNFRCkKK3sKKyAgcmV0dXJuICgoaXNEaWdpdChVQ2hhcihjKSkgfHwgKGMgPT0gJy0nKSkgPyBUUlVFIDogRkFMU0UpOworfQorCitzdGF0aWMgRklFTERUWVBFIHR5cGVUSElTID0KK3sKKyAgX0hBU19BUkdTIHwgX1JFU0lERU5ULAorICAxLAkJCQkvKiB0aGlzIGlzIG11dGFibGUsIHNvIHdlIGNhbid0IGJlIGNvbnN0ICovCisgIChGSUVMRFRZUEUgKikwLAorICAoRklFTERUWVBFICopMCwKKyAgTWFrZV9UaGlzX1R5cGUsCisgIENvcHlfVGhpc19UeXBlLAorICBGcmVlX1RoaXNfVHlwZSwKKyAgQ2hlY2tfVGhpc19GaWVsZCwKKyAgQ2hlY2tfVGhpc19DaGFyYWN0ZXIsCisgIE5VTEwsCisgIE5VTEwKK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUqKSBUWVBFX0lOVEVHRVIgPSAmdHlwZVRISVM7CisKKy8qIGZ0eV9pbnQuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2Zvcm0vZnR5X2lwdjQuYyBiL2Zvcm0vZnR5X2lwdjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFhMjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mdHlfaXB2NC5jCkBAIC0wLDAgKzEsMTA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdXRob3IgOiBQZXIgRm9yZWJ5LCBwZXJmQGVmZC5sdGguc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZ0eV9pcHY0LmMsdiAxLjggMjAwNi8xMi8wMiAxOTozMzowMiB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfSVBWNF9GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogYXJncCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFZhbGlkYXRlIGJ1ZmZlciBjb250ZW50IHRvIGJlIGEgdmFsaWQgSVAgbnVtYmVyIChWZXIuIDQpCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGZpZWxkIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGZpZWxkIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfSVBWNF9GaWVsZChGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3AgR0NDX1VOVVNFRCkKK3sKKyAgY2hhciAqYnAgPSBmaWVsZF9idWZmZXIoZmllbGQsIDApOworICBpbnQgbnVtID0gMCwgbGVuOworICB1bnNpZ25lZCBpbnQgZDEsIGQyLCBkMywgZDQ7CisKKyAgaWYgKGlzZGlnaXQoVUNoYXIoKmJwKSkpCS8qIE11c3Qgc3RhcnQgd2l0aCBkaWdpdCAqLworICAgIHsKKyAgICAgIG51bSA9IHNzY2FuZihicCwgIiV1LiV1LiV1LiV1JW4iLCAmZDEsICZkMiwgJmQzLCAmZDQsICZsZW4pOworICAgICAgaWYgKG51bSA9PSA0KQorCXsKKwkgIGJwICs9IGxlbjsJCS8qIE1ha2UgYnAgcG9pbnQgdG8gd2hhdCBzc2NhbmYoKSBsZWZ0ICovCisJICB3aGlsZSAoaXNzcGFjZShVQ2hhcigqYnApKSkKKwkgICAgYnArKzsJCS8qIEFsbG93IHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKwl9CisgICAgfQorICByZXR1cm4gKChudW0gIT0gNCB8fCAqYnAgfHwgZDEgPiAyNTUgfHwgZDIgPiAyNTUKKwkgICB8fCBkMyA+IDI1NSB8fCBkNCA+IDI1NSkgPyBGQUxTRSA6IFRSVUUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfSVBWNF9DaGFyYWN0ZXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYywgCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICphcmdwICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGEgY2hhcmFjdGVyIGZvciB1bnNpZ25lZCB0eXBlIG9yIHBlcmlvZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gY2hhcmFjdGVyIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGNoYXJhY3RlciBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX0lQVjRfQ2hhcmFjdGVyKGludCBjLCBjb25zdCB2b2lkICphcmdwIEdDQ19VTlVTRUQpCit7CisgIHJldHVybiAoKGlzZGlnaXQoVUNoYXIoYykpIHx8IChjID09ICcuJykpID8gVFJVRSA6IEZBTFNFKTsKK30KKworc3RhdGljIEZJRUxEVFlQRSB0eXBlSVBWNCA9Cit7CisgIF9SRVNJREVOVCwKKyAgMSwJCQkJLyogdGhpcyBpcyBtdXRhYmxlLCBzbyB3ZSBjYW4ndCBiZSBjb25zdCAqLworICAoRklFTERUWVBFICopMCwKKyAgKEZJRUxEVFlQRSAqKTAsCisgIE5VTEwsCisgIE5VTEwsCisgIE5VTEwsCisgIENoZWNrX0lQVjRfRmllbGQsCisgIENoZWNrX0lQVjRfQ2hhcmFjdGVyLAorICBOVUxMLAorICBOVUxMCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFKikgVFlQRV9JUFY0ID0gJnR5cGVJUFY0OworCisvKiBmdHlfaXB2NC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9mdHlfbnVtLmMgYi9mb3JtL2Z0eV9udW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRlOGUzCi0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mdHlfbnVtLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIEF1dGhvciA6IEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnR5X251bS5jLHYgMS4yNSAyMDA3LzEwLzEzIDE5OjMyOjU0IHRvbSBFeHAgJCIpCisKKyNpZiBIQVZFX0xPQ0FMRV9ICisjaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworI2lmIEhBVkVfTE9DQUxFX0gKKyNkZWZpbmUgaXNEZWNpbWFsUG9pbnQoYykgKChjKSA9PSAoKEwgJiYgTC0+ZGVjaW1hbF9wb2ludCkgPyAqKEwtPmRlY2ltYWxfcG9pbnQpIDogJy4nKSkKKyNlbHNlCisjZGVmaW5lIGlzRGVjaW1hbFBvaW50KGMpICgoYykgPT0gJy4nKQorI2VuZGlmCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2RlZmluZSBpc0RpZ2l0KGMpIChpc3dkaWdpdCgod2ludF90KShjKSkgfHwgaXNkaWdpdChVQ2hhcihjKSkpCisjZWxzZQorI2RlZmluZSBpc0RpZ2l0KGMpIGlzZGlnaXQoVUNoYXIoYykpCisjZW5kaWYKKworI2RlZmluZSB0aGlzQVJHIG51bWVyaWNBUkcKKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCBwcmVjaXNpb247CisgICAgZG91YmxlIGxvdzsKKyAgICBkb3VibGUgaGlnaDsKKyAgICBzdHJ1Y3QgbGNvbnYgKkw7CisgIH0KK3RoaXNBUkc7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKk1ha2VfVGhpc19UeXBlKHZhX2xpc3QgKiBhcCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgbnVtZXJpYyB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK01ha2VfVGhpc19UeXBlKHZhX2xpc3QgKmFwKQoreworICB0aGlzQVJHICphcmduID0gdHlwZU1hbGxvYyh0aGlzQVJHLCAxKTsKKworICBpZiAoYXJnbikKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCBhcmduKSk7CisgICAgICBhcmduLT5wcmVjaXNpb24gPSB2YV9hcmcoKmFwLCBpbnQpOworICAgICAgYXJnbi0+bG93ID0gdmFfYXJnKCphcCwgZG91YmxlKTsKKyAgICAgIGFyZ24tPmhpZ2ggPSB2YV9hcmcoKmFwLCBkb3VibGUpOworCisjaWYgSEFWRV9MT0NBTEVfSAorICAgICAgYXJnbi0+TCA9IGxvY2FsZWNvbnYoKTsKKyNlbHNlCisgICAgICBhcmduLT5MID0gTlVMTDsKKyNlbmRpZgorICAgIH0KKyAgcmV0dXJuICh2b2lkICopYXJnbjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqQ29weV9UaGlzX1R5cGUoY29uc3Qgdm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHN0cnVjdHVyZSBmb3IgbnVtZXJpYyB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitDb3B5X1RoaXNfVHlwZShjb25zdCB2b2lkICphcmdwKQoreworICBjb25zdCB0aGlzQVJHICphcCA9IChjb25zdCB0aGlzQVJHICopYXJncDsKKyAgdGhpc0FSRyAqcmVzdWx0ID0gKHRoaXNBUkcgKikgMDsKKworICBpZiAoYXJncCkKKyAgICB7CisgICAgICByZXN1bHQgPSB0eXBlTWFsbG9jKHRoaXNBUkcsIDEpOworICAgICAgaWYgKHJlc3VsdCkKKwl7CisJICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCByZXN1bHQpKTsKKwkgICpyZXN1bHQgPSAqYXA7CisJfQorICAgIH0KKyAgcmV0dXJuICh2b2lkICopcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEZyZWVfVGhpc19UeXBlKHZvaWQgKiBhcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRnJlZSBzdHJ1Y3R1cmUgZm9yIG51bWVyaWMgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorRnJlZV9UaGlzX1R5cGUodm9pZCAqYXJncCkKK3sKKyAgaWYgKGFyZ3ApCisgICAgZnJlZShhcmdwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19UaGlzX0ZpZWxkKEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiBhcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgVmFsaWRhdGUgYnVmZmVyIGNvbnRlbnQgdG8gYmUgYSB2YWxpZCBudW1lcmljIHZhbHVlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGZpZWxkIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGZpZWxkIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfVGhpc19GaWVsZChGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNvbnN0IHRoaXNBUkcgKmFyZ24gPSAoY29uc3QgdGhpc0FSRyAqKWFyZ3A7CisgIGRvdWJsZSBsb3cgPSBhcmduLT5sb3c7CisgIGRvdWJsZSBoaWdoID0gYXJnbi0+aGlnaDsKKyAgaW50IHByZWMgPSBhcmduLT5wcmVjaXNpb247CisgIHVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilmaWVsZF9idWZmZXIoZmllbGQsIDApOworICBjaGFyICpzID0gKGNoYXIgKilicDsKKyAgZG91YmxlIHZhbCA9IDAuMDsKKyAgc3RydWN0IGxjb252ICpMID0gYXJnbi0+TDsKKyAgY2hhciBidWZbNjRdOworICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgIHdoaWxlICgqYnAgJiYgKmJwID09ICcgJykKKyAgICBicCsrOworICBpZiAoKmJwKQorICAgIHsKKyAgICAgIGlmICgqYnAgPT0gJy0nIHx8ICpicCA9PSAnKycpCisJYnArKzsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgICAgaWYgKCpicCkKKwl7CisJICBib29sIGJsYW5rID0gRkFMU0U7CisJICBpbnQgc3RhdGUgPSAwOworCSAgaW50IGxlbjsKKwkgIGludCBuOworCSAgd2NoYXJfdCAqbGlzdCA9IF9uY19XaWRlbl9TdHJpbmcoKGNoYXIgKilicCwgJmxlbik7CisKKwkgIGlmIChsaXN0ICE9IDApCisJICAgIHsKKwkgICAgICByZXN1bHQgPSBUUlVFOworCSAgICAgIGZvciAobiA9IDA7IG4gPCBsZW47ICsrbikKKwkJeworCQkgIGlmIChibGFuaykKKwkJICAgIHsKKwkJICAgICAgaWYgKGxpc3Rbbl0gIT0gJyAnKQorCQkJeworCQkJICByZXN1bHQgPSBGQUxTRTsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCSAgZWxzZSBpZiAobGlzdFtuXSA9PSAnICcpCisJCSAgICB7CisJCSAgICAgIGJsYW5rID0gVFJVRTsKKwkJICAgIH0KKwkJICBlbHNlIGlmIChpc0RlY2ltYWxQb2ludChsaXN0W25dKSkKKwkJICAgIHsKKwkJICAgICAgaWYgKCsrc3RhdGUgPiAxKQorCQkJeworCQkJICByZXN1bHQgPSBGQUxTRTsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCSAgZWxzZSBpZiAoIWlzRGlnaXQobGlzdFtuXSkpCisJCSAgICB7CisJCSAgICAgIHJlc3VsdCA9IEZBTFNFOworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICAgIGZyZWUobGlzdCk7CisJICAgIH0KKwl9CisjZWxzZQorICAgICAgd2hpbGUgKCpicCkKKwl7CisJICBpZiAoIWlzZGlnaXQoVUNoYXIoKmJwKSkpCisJICAgIGJyZWFrOworCSAgYnArKzsKKwl9CisgICAgICBpZiAoaXNEZWNpbWFsUG9pbnQoKmJwKSkKKwl7CisJICBicCsrOworCSAgd2hpbGUgKCpicCkKKwkgICAgeworCSAgICAgIGlmICghaXNkaWdpdChVQ2hhcigqYnApKSkKKwkJYnJlYWs7CisJICAgICAgYnArKzsKKwkgICAgfQorCX0KKyAgICAgIHdoaWxlICgqYnAgJiYgKmJwID09ICcgJykKKwlicCsrOworICAgICAgcmVzdWx0ID0gKCpicCA9PSAnXDAnKTsKKyNlbmRpZgorICAgICAgaWYgKHJlc3VsdCkKKwl7CisJICB2YWwgPSBhdG9mKHMpOworCSAgaWYgKGxvdyA8IGhpZ2gpCisJICAgIHsKKwkgICAgICBpZiAodmFsIDwgbG93IHx8IHZhbCA+IGhpZ2gpCisJCXJlc3VsdCA9IEZBTFNFOworCSAgICB9CisJICBpZiAocmVzdWx0KQorCSAgICB7CisJICAgICAgc3ByaW50ZihidWYsICIlLipmIiwgKHByZWMgPiAwID8gcHJlYyA6IDApLCB2YWwpOworCSAgICAgIHNldF9maWVsZF9idWZmZXIoZmllbGQsIDAsIGJ1Zik7CisJICAgIH0KKwl9CisgICAgfQorICByZXR1cm4gKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfVGhpc19DaGFyYWN0ZXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYywKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiBhcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgYSBjaGFyYWN0ZXIgZm9yIHRoZSBudW1lcmljIHR5cGUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGNoYXJhY3RlciBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBjaGFyYWN0ZXIgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19UaGlzX0NoYXJhY3RlcihpbnQgYywgY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgY29uc3QgdGhpc0FSRyAqYXJnbiA9IChjb25zdCB0aGlzQVJHICopYXJncDsKKyAgc3RydWN0IGxjb252ICpMID0gYXJnbi0+TDsKKworICByZXR1cm4gKChpc0RpZ2l0KGMpIHx8CisJICAgYyA9PSAnKycgfHwKKwkgICBjID09ICctJyB8fAorCSAgIGlzRGVjaW1hbFBvaW50KGMpKQorCSAgPyBUUlVFCisJICA6IEZBTFNFKTsKK30KKworc3RhdGljIEZJRUxEVFlQRSB0eXBlVEhJUyA9Cit7CisgIF9IQVNfQVJHUyB8IF9SRVNJREVOVCwKKyAgMSwJCQkJLyogdGhpcyBpcyBtdXRhYmxlLCBzbyB3ZSBjYW4ndCBiZSBjb25zdCAqLworICAoRklFTERUWVBFICopMCwKKyAgKEZJRUxEVFlQRSAqKTAsCisgIE1ha2VfVGhpc19UeXBlLAorICBDb3B5X1RoaXNfVHlwZSwKKyAgRnJlZV9UaGlzX1R5cGUsCisgIENoZWNrX1RoaXNfRmllbGQsCisgIENoZWNrX1RoaXNfQ2hhcmFjdGVyLAorICBOVUxMLAorICBOVUxMCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFKikgVFlQRV9OVU1FUklDID0gJnR5cGVUSElTOworCisvKiBmdHlfbnVtLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9mb3JtL2Z0eV9yZWdleC5jIGIvZm9ybS9mdHlfcmVnZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDc3NzlmCi0tLSAvZGV2L251bGwKKysrIGIvZm9ybS9mdHlfcmVnZXguYwpAQCAtMCwwICsxLDMwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQXV0aG9yIDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmdHlfcmVnZXguYyx2IDEuMjEgMjAwNy8xMC8xMyAxOTozMzo1MCB0b20gRXhwICQiKQorCisjaWYgSEFWRV9SRUdFWF9IX0ZVTkNTCQkvKiBXZSBwcmVmZXIgUE9TSVggcmVnZXggKi8KKyNpbmNsdWRlIDxyZWdleC5oPgorCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgcmVnZXhfdCAqcFJlZ0V4cDsKKyAgICB1bnNpZ25lZCBsb25nICpyZWZDb3VudDsKKyAgfQorUmVnRXhwX0FyZzsKKworI2VsaWYgSEFWRV9SRUdFWFBfSF9GVU5DUyB8IEhBVkVfUkVHRVhQUl9IX0ZVTkNTCisjdW5kZWYgUkVUVVJOCitzdGF0aWMgaW50IHJlZ19lcnJubzsKKworc3RhdGljIGNoYXIgKgorUmVnRXhfSW5pdChjaGFyICppbnN0cmluZykKK3sKKyAgcmVnX2Vycm5vID0gMDsKKyAgcmV0dXJuIGluc3RyaW5nOworfQorCitzdGF0aWMgY2hhciAqCitSZWdFeF9FcnJvcihpbnQgY29kZSkKK3sKKyAgcmVnX2Vycm5vID0gY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgSU5JVCAJCXJlZ2lzdGVyIGNoYXIgKnNwID0gUmVnRXhfSW5pdChpbnN0cmluZyk7CisjZGVmaW5lIEdFVEMoKQkJKCpzcCsrKQorI2RlZmluZSBQRUVLQygpCQkoKnNwKQorI2RlZmluZSBVTkdFVEMoYykJKC0tc3ApCisjZGVmaW5lIFJFVFVSTihjKQlyZXR1cm4oYykKKyNkZWZpbmUgRVJST1IoYykJcmV0dXJuIFJlZ0V4X0Vycm9yKGMpCisKKyNpZiBIQVZFX1JFR0VYUF9IX0ZVTkNTCisjaW5jbHVkZSA8cmVnZXhwLmg+CisjZWxzZQorI2luY2x1ZGUgPHJlZ2V4cHIuaD4KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICBjaGFyICpjb21waWxlZF9leHByZXNzaW9uOworICB1bnNpZ25lZCBsb25nICpyZWZDb3VudDsKK30KK1JlZ0V4cF9Bcmc7CisKKy8qIE1heGltdW0gTGVuZ3RoIHdlIGFsbG93IGZvciBhIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiAqLworI2RlZmluZSBNQVhfUlhfTEVOICAgKDIwNDgpCisjZGVmaW5lIFJYX0lOQ1JFTUVOVCAoMjU2KQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqTWFrZV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlKHZhX2xpc3QgKiBhcCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgcmVnZXggdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitNYWtlX1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUodmFfbGlzdCAqYXApCit7CisjaWYgSEFWRV9SRUdFWF9IX0ZVTkNTCisgIGNoYXIgKnJ4ID0gdmFfYXJnKCphcCwgY2hhciAqKTsKKyAgUmVnRXhwX0FyZyAqcHJlZzsKKworICBwcmVnID0gdHlwZU1hbGxvYyhSZWdFeHBfQXJnLCAxKTsKKworICBpZiAocHJlZykKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgiUmVnRXhwX0FyZyAlcCIpLCBwcmVnKSk7CisgICAgICBpZiAoKChwcmVnLT5wUmVnRXhwID0gdHlwZU1hbGxvYyhyZWdleF90LCAxKSkgIT0gMCkKKwkgICYmICFyZWdjb21wKHByZWctPnBSZWdFeHAsIHJ4LAorCQkgICAgICAoUkVHX0VYVEVOREVEIHwgUkVHX05PU1VCIHwgUkVHX05FV0xJTkUpKSkKKwl7CisJICBUKChUX0NSRUFURSgicmVnZXhfdCAlcCIpLCBwcmVnLT5wUmVnRXhwKSk7CisJICBwcmVnLT5yZWZDb3VudCA9IHR5cGVNYWxsb2ModW5zaWduZWQgbG9uZywgMSk7CisKKwkgICoocHJlZy0+cmVmQ291bnQpID0gMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHByZWctPnBSZWdFeHApCisJICAgIGZyZWUocHJlZy0+cFJlZ0V4cCk7CisJICBmcmVlKHByZWcpOworCSAgcHJlZyA9IChSZWdFeHBfQXJnICopMDsKKwl9CisgICAgfQorICByZXR1cm4gKCh2b2lkICopcHJlZyk7CisjZWxpZiBIQVZFX1JFR0VYUF9IX0ZVTkNTIHwgSEFWRV9SRUdFWFBSX0hfRlVOQ1MKKyAgY2hhciAqcnggPSB2YV9hcmcoKmFwLCBjaGFyICopOworICBSZWdFeHBfQXJnICpwQXJnOworCisgIHBBcmcgPSB0eXBlTWFsbG9jKFJlZ0V4cF9BcmcsIDEpOworCisgIGlmIChwQXJnKQorICAgIHsKKyAgICAgIGludCBibGVuID0gUlhfSU5DUkVNRU5UOworCisgICAgICBUKChUX0NSRUFURSgiUmVnRXhwX0FyZyAlcCIpLCBwQXJnKSk7CisgICAgICBwQXJnLT5jb21waWxlZF9leHByZXNzaW9uID0gTlVMTDsKKyAgICAgIHBBcmctPnJlZkNvdW50ID0gdHlwZU1hbGxvYyh1bnNpZ25lZCBsb25nLCAxKTsKKworICAgICAgKihwQXJnLT5yZWZDb3VudCkgPSAxOworCisgICAgICBkbworCXsKKwkgIGNoYXIgKmJ1ZiA9IHR5cGVNYWxsb2MoY2hhciwgYmxlbik7CisKKwkgIGlmIChidWYpCisJICAgIHsKKyNpZiBIQVZFX1JFR0VYUF9IX0ZVTkNTCisJICAgICAgY2hhciAqbGFzdF9wb3MgPSBjb21waWxlKHJ4LCBidWYsICZidWZbYmxlbl0sICdcMCcpOworCisjZWxzZSAvKiBIQVZFX1JFR0VYUFJfSF9GVU5DUyAqLworCSAgICAgIGNoYXIgKmxhc3RfcG9zID0gY29tcGlsZShyeCwgYnVmLCAmYnVmW2JsZW5dKTsKKyNlbmRpZgorCSAgICAgIGlmIChyZWdfZXJybm8pCisJCXsKKwkJICBmcmVlKGJ1Zik7CisJCSAgaWYgKHJlZ19lcnJubyA9PSA1MCkKKwkJICAgIGJsZW4gKz0gUlhfSU5DUkVNRU5UOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZnJlZShwQXJnKTsKKwkJICAgICAgcEFyZyA9IE5VTEw7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgcEFyZy0+Y29tcGlsZWRfZXhwcmVzc2lvbiA9IGJ1ZjsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgICAgd2hpbGUgKGJsZW4gPD0gTUFYX1JYX0xFTik7CisgICAgfQorICBpZiAocEFyZyAmJiAhcEFyZy0+Y29tcGlsZWRfZXhwcmVzc2lvbikKKyAgICB7CisgICAgICBmcmVlKHBBcmcpOworICAgICAgcEFyZyA9IE5VTEw7CisgICAgfQorICByZXR1cm4gKHZvaWQgKilwQXJnOworI2Vsc2UKKyAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqQ29weV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHN0cnVjdHVyZSBmb3IgcmVnZXggdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorQ29weV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlKGNvbnN0IHZvaWQgKmFyZ3ApCit7CisjaWYgKEhBVkVfUkVHRVhfSF9GVU5DUyB8IEhBVkVfUkVHRVhQX0hfRlVOQ1MgfCBIQVZFX1JFR0VYUFJfSF9GVU5DUykKKyAgY29uc3QgUmVnRXhwX0FyZyAqYXAgPSAoY29uc3QgUmVnRXhwX0FyZyAqKWFyZ3A7CisgIGNvbnN0IFJlZ0V4cF9BcmcgKnJlc3VsdCA9IChjb25zdCBSZWdFeHBfQXJnICopMDsKKworICBpZiAoYXApCisgICAgeworICAgICAgKihhcC0+cmVmQ291bnQpICs9IDE7CisgICAgICByZXN1bHQgPSBhcDsKKyAgICB9CisgIHJldHVybiAodm9pZCAqKXJlc3VsdDsKKyNlbHNlCisgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgRnJlZV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlKHZvaWQgKiBhcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRnJlZSBzdHJ1Y3R1cmUgZm9yIHJlZ2V4IHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK0ZyZWVfUmVndWxhckV4cHJlc3Npb25fVHlwZSh2b2lkICphcmdwKQoreworI2lmIEhBVkVfUkVHRVhfSF9GVU5DUyB8IEhBVkVfUkVHRVhQX0hfRlVOQ1MgfCBIQVZFX1JFR0VYUFJfSF9GVU5DUworICBSZWdFeHBfQXJnICphcCA9IChSZWdFeHBfQXJnICopYXJncDsKKworICBpZiAoYXApCisgICAgeworICAgICAgaWYgKC0tKCooYXAtPnJlZkNvdW50KSkgPT0gMCkKKwl7CisjaWYgSEFWRV9SRUdFWF9IX0ZVTkNTCisJICBpZiAoYXAtPnBSZWdFeHApCisJICAgIHsKKwkgICAgICBmcmVlKGFwLT5yZWZDb3VudCk7CisJICAgICAgcmVnZnJlZShhcC0+cFJlZ0V4cCk7CisJICAgIH0KKyNlbGlmIEhBVkVfUkVHRVhQX0hfRlVOQ1MgfCBIQVZFX1JFR0VYUFJfSF9GVU5DUworCSAgaWYgKGFwLT5jb21waWxlZF9leHByZXNzaW9uKQorCSAgICB7CisJICAgICAgZnJlZShhcC0+cmVmQ291bnQpOworCSAgICAgIGZyZWUoYXAtPmNvbXBpbGVkX2V4cHJlc3Npb24pOworCSAgICB9CisjZW5kaWYKKwkgIGZyZWUoYXApOworCX0KKyAgICB9CisjZW5kaWYKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19SZWd1bGFyRXhwcmVzc2lvbl9GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSBidWZmZXIgY29udGVudCB0byBiZSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBmaWVsZCBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBmaWVsZCBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX1JlZ3VsYXJFeHByZXNzaW9uX0ZpZWxkKEZJRUxEICpmaWVsZCwgY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgYm9vbCBtYXRjaCA9IEZBTFNFOworCisjaWYgSEFWRV9SRUdFWF9IX0ZVTkNTCisgIGNvbnN0IFJlZ0V4cF9BcmcgKmFwID0gKGNvbnN0IFJlZ0V4cF9BcmcgKilhcmdwOworCisgIGlmIChhcCAmJiBhcC0+cFJlZ0V4cCkKKyAgICBtYXRjaCA9IChyZWdleGVjKGFwLT5wUmVnRXhwLCBmaWVsZF9idWZmZXIoZmllbGQsIDApLCAwLCBOVUxMLCAwKQorCSAgICAgPyBGQUxTRQorCSAgICAgOiBUUlVFKTsKKyNlbGlmIEhBVkVfUkVHRVhQX0hfRlVOQ1MgfCBIQVZFX1JFR0VYUFJfSF9GVU5DUworICBSZWdFeHBfQXJnICphcCA9IChSZWdFeHBfQXJnICopYXJncDsKKworICBpZiAoYXAgJiYgYXAtPmNvbXBpbGVkX2V4cHJlc3Npb24pCisgICAgbWF0Y2ggPSAoc3RlcChmaWVsZF9idWZmZXIoZmllbGQsIDApLCBhcC0+Y29tcGlsZWRfZXhwcmVzc2lvbikKKwkgICAgID8gVFJVRQorCSAgICAgOiBGQUxTRSk7CisjZW5kaWYKKyAgcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgRklFTERUWVBFIHR5cGVSRUdFWFAgPQoreworICBfSEFTX0FSR1MgfCBfUkVTSURFTlQsCisgIDEsCQkJCS8qIHRoaXMgaXMgbXV0YWJsZSwgc28gd2UgY2FuJ3QgYmUgY29uc3QgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCisgIChGSUVMRFRZUEUgKikwLAorICBNYWtlX1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUsCisgIENvcHlfUmVndWxhckV4cHJlc3Npb25fVHlwZSwKKyAgRnJlZV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlLAorICBDaGVja19SZWd1bGFyRXhwcmVzc2lvbl9GaWVsZCwKKyAgTlVMTCwKKyAgTlVMTCwKKyAgTlVMTAorfTsKKworTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEVFlQRSopIFRZUEVfUkVHRVhQID0gJnR5cGVSRUdFWFA7CisKKy8qIGZ0eV9yZWdleC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZm9ybS9oZWFkZXJzIGIvZm9ybS9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDcyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2hlYWRlcnMKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTYKKyMKKyQoc3JjZGlyKS9mb3JtLmgKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvZm9ybS9sbGliLWxmb3JtIGIvZm9ybS9sbGliLWxmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkN2MzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL2xsaWItbGZvcm0KQEAgLTAsMCArMSw3MzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgIDE5OTYsMTk5NywyMDAyLDIwMDUgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMSU5UTElCUkFSWSAqLworCisvKiAuL2ZfdHJhY2UuYyAqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKKyN1bmRlZiBfbmNfcmV0cmFjZV9maWVsZF9wdHIKK0ZJRUxECSoqX25jX3JldHJhY2VfZmllbGRfcHRyKAorCQlGSUVMRAkqKmNvZGUpCisJCXsgcmV0dXJuKCooRklFTEQgKioqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9maWVsZAorRklFTEQJKl9uY19yZXRyYWNlX2ZpZWxkKAorCQlGSUVMRAkqY29kZSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfZmllbGRfdHlwZQorRklFTERUWVBFICpfbmNfcmV0cmFjZV9maWVsZF90eXBlKAorCQlGSUVMRFRZUEUgKmNvZGUpCisJCXsgcmV0dXJuKCooRklFTERUWVBFICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9mb3JtCitGT1JNCSpfbmNfcmV0cmFjZV9mb3JtKAorCQlGT1JNCSpjb2RlKQorCQl7IHJldHVybigqKEZPUk0gKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2Zvcm1faG9vaworRm9ybV9Ib29rIF9uY19yZXRyYWNlX2Zvcm1faG9vaygKKwkJRm9ybV9Ib29rIGNvZGUpCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworLyogLi9mbGRfYXJnLmMgKi8KKworI3VuZGVmIHNldF9maWVsZHR5cGVfYXJnCitpbnQJc2V0X2ZpZWxkdHlwZV9hcmcoCisJCUZJRUxEVFlQRSAqdHlwLCAKKwkJdm9pZAkqKCpjb25zdCBtYWtlX2FyZykoCisJCXZhX2xpc3QJKnAxKSwgCisJCXZvaWQJKigqY29uc3QgY29weV9hcmcpKAorCQljb25zdCB2b2lkICpwMSksIAorCQl2b2lkCSgqY29uc3QgZnJlZV9hcmcpKAorCQl2b2lkCSpwMSkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2FyZwordm9pZAkqZmllbGRfYXJnKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL2ZsZF9hdHRyLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9mb3JlCitpbnQJc2V0X2ZpZWxkX2ZvcmUoCisJCUZJRUxECSpmaWVsZCwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9mb3JlCitjaHR5cGUJZmllbGRfZm9yZSgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBzZXRfZmllbGRfYmFjaworaW50CXNldF9maWVsZF9iYWNrKAorCQlGSUVMRAkqZmllbGQsIAorCQljaHR5cGUJYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfYmFjaworY2h0eXBlCWZpZWxkX2JhY2soCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2ZsZF9jdXJyZW50LmMgKi8KKworI3VuZGVmIHNldF9jdXJyZW50X2ZpZWxkCitpbnQJc2V0X2N1cnJlbnRfZmllbGQoCisJCUZPUk0JKmZvcm0sIAorCQlGSUVMRAkqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGN1cnJlbnRfZmllbGQKK0ZJRUxECSpjdXJyZW50X2ZpZWxkKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9pbmRleAoraW50CWZpZWxkX2luZGV4KAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfZGVmLmMgKi8KKworI3VuZGVmIF9uY19EZWZhdWx0X0ZpZWxkCitGSUVMRAkqX25jX0RlZmF1bHRfRmllbGQ7CisKKyN1bmRlZiBfbmNfTWFrZV9Bcmd1bWVudAorVHlwZUFyZ3VtZW50ICpfbmNfTWFrZV9Bcmd1bWVudCgKKwkJY29uc3QgRklFTERUWVBFICp0eXAsIAorCQl2YV9saXN0CSphcCwgCisJCWludAkqZXJyKQorCQl7IHJldHVybigqKFR5cGVBcmd1bWVudCAqKikwKTsgfQorCisjdW5kZWYgX25jX0NvcHlfQXJndW1lbnQKK1R5cGVBcmd1bWVudCAqX25jX0NvcHlfQXJndW1lbnQoCisJCWNvbnN0IEZJRUxEVFlQRSAqdHlwLCAKKwkJY29uc3QgVHlwZUFyZ3VtZW50ICphcmdwLCAKKwkJaW50CSplcnIpCisJCXsgcmV0dXJuKCooVHlwZUFyZ3VtZW50ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfRnJlZV9Bcmd1bWVudAordm9pZAlfbmNfRnJlZV9Bcmd1bWVudCgKKwkJY29uc3QgRklFTERUWVBFICp0eXAsIAorCQlUeXBlQXJndW1lbnQgKmFyZ3ApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfQ29weV9UeXBlCitOQ1VSU0VTX0JPT0wgX25jX0NvcHlfVHlwZSgKKwkJRklFTEQJKmRzdCwgCisJCUZJRUxEIGNvbnN0ICpzcmMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19GcmVlX1R5cGUKK3ZvaWQJX25jX0ZyZWVfVHlwZSgKKwkJRklFTEQJKmZpZWxkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbmV3X2ZpZWxkCitGSUVMRAkqbmV3X2ZpZWxkKAorCQlpbnQJcm93cywgCisJCWludAljb2xzLCAKKwkJaW50CWZyb3csIAorCQlpbnQJZmNvbCwgCisJCWludAlucm93LCAKKwkJaW50CW5idWYpCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworI3VuZGVmIGZyZWVfZmllbGQKK2ludAlmcmVlX2ZpZWxkKAorCQlGSUVMRAkqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfZHVwLmMgKi8KKworI3VuZGVmIGR1cF9maWVsZAorRklFTEQJKmR1cF9maWVsZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWZyb3csIAorCQlpbnQJZmNvbCkKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisvKiAuL2ZsZF9mdGNob2ljZS5jICovCisKKyN1bmRlZiBzZXRfZmllbGR0eXBlX2Nob2ljZQoraW50CXNldF9maWVsZHR5cGVfY2hvaWNlKAorCQlGSUVMRFRZUEUgKnR5cCwgCisJCU5DVVJTRVNfQk9PTCAoKmNvbnN0IG5leHRfY2hvaWNlKSgKKwkJRklFTEQJKnAxLCAKKwkJY29uc3Qgdm9pZCAqcDIpLCAKKwkJTkNVUlNFU19CT09MICgqY29uc3QgcHJldl9jaG9pY2UpKAorCQlGSUVMRAkqcDEsIAorCQljb25zdCB2b2lkICpwMikpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfZnRsaW5rLmMgKi8KKworI3VuZGVmIGxpbmtfZmllbGR0eXBlCitGSUVMRFRZUEUgKmxpbmtfZmllbGR0eXBlKAorCQlGSUVMRFRZUEUgKnR5cGUxLCAKKwkJRklFTERUWVBFICp0eXBlMikKKwkJeyByZXR1cm4oKihGSUVMRFRZUEUgKiopMCk7IH0KKworLyogLi9mbGRfaW5mby5jICovCisKKyN1bmRlZiBmaWVsZF9pbmZvCitpbnQJZmllbGRfaW5mbygKKwkJY29uc3QgRklFTEQgKmZpZWxkLCAKKwkJaW50CSpyb3dzLCAKKwkJaW50CSpjb2xzLCAKKwkJaW50CSpmcm93LCAKKwkJaW50CSpmY29sLCAKKwkJaW50CSpucm93LCAKKwkJaW50CSpuYnVmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkeW5hbWljX2ZpZWxkX2luZm8KK2ludAlkeW5hbWljX2ZpZWxkX2luZm8oCisJCWNvbnN0IEZJRUxEICpmaWVsZCwgCisJCWludAkqZHJvd3MsIAorCQlpbnQJKmRjb2xzLCAKKwkJaW50CSptYXhncm93KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX2p1c3QuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX2p1c3QKK2ludAlzZXRfZmllbGRfanVzdCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWp1c3QpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2p1c3QKK2ludAlmaWVsZF9qdXN0KAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfbGluay5jICovCisKKyN1bmRlZiBsaW5rX2ZpZWxkCitGSUVMRAkqbGlua19maWVsZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWZyb3csIAorCQlpbnQJZmNvbCkKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisvKiAuL2ZsZF9tYXguYyAqLworCisjdW5kZWYgc2V0X21heF9maWVsZAoraW50CXNldF9tYXhfZmllbGQoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAltYXhncm93KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX21vdmUuYyAqLworCisjdW5kZWYgbW92ZV9maWVsZAoraW50CW1vdmVfZmllbGQoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAlmcm93LCAKKwkJaW50CWZjb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfbmV3ZnR5cC5jICovCisKKyN1bmRlZiBfbmNfRGVmYXVsdF9GaWVsZFR5cGUKK2NvbnN0IEZJRUxEVFlQRSAqX25jX0RlZmF1bHRfRmllbGRUeXBlID0gezB9OworCisjdW5kZWYgbmV3X2ZpZWxkdHlwZQorRklFTERUWVBFICpuZXdfZmllbGR0eXBlKAorCQlOQ1VSU0VTX0JPT0wgKCpjb25zdCBmaWVsZF9jaGVjaykoCisJCUZJRUxECSpwMSwgCisJCWNvbnN0IHZvaWQgKnAyKSwgCisJCU5DVVJTRVNfQk9PTCAoKmNvbnN0IGNoYXJfY2hlY2spKAorCQlpbnQJcDEsIAorCQljb25zdCB2b2lkICpwMikpCisJCXsgcmV0dXJuKCooRklFTERUWVBFICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX2ZpZWxkdHlwZQoraW50CWZyZWVfZmllbGR0eXBlKAorCQlGSUVMRFRZUEUgKnR5cCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9vcHRzLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9vcHRzCitpbnQJc2V0X2ZpZWxkX29wdHMoCisJCUZJRUxECSpmaWVsZCwgCisJCUZpZWxkX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfb3B0cworRmllbGRfT3B0aW9ucyBmaWVsZF9vcHRzKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooRmllbGRfT3B0aW9ucyAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9vcHRzX29uCitpbnQJZmllbGRfb3B0c19vbigKKwkJRklFTEQJKmZpZWxkLCAKKwkJRmllbGRfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9vcHRzX29mZgoraW50CWZpZWxkX29wdHNfb2ZmKAorCQlGSUVMRAkqZmllbGQsIAorCQlGaWVsZF9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfcGFkLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9wYWQKK2ludAlzZXRfZmllbGRfcGFkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3BhZAoraW50CWZpZWxkX3BhZCgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX3BhZ2UuYyAqLworCisjdW5kZWYgc2V0X25ld19wYWdlCitpbnQJc2V0X25ld19wYWdlKAorCQlGSUVMRAkqZmllbGQsIAorCQlOQ1VSU0VTX0JPT0wgbmV3X3BhZ2VfZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbmV3X3BhZ2UKK05DVVJTRVNfQk9PTCBuZXdfcGFnZSgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vZmxkX3N0YXQuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX3N0YXR1cworaW50CXNldF9maWVsZF9zdGF0dXMoCisJCUZJRUxECSpmaWVsZCwgCisJCU5DVVJTRVNfQk9PTCBzdGF0dXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3N0YXR1cworTkNVUlNFU19CT09MIGZpZWxkX3N0YXR1cygKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vZmxkX3R5cGUuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX3R5cGUKK2ludAlzZXRfZmllbGRfdHlwZSgKKwkJRklFTEQJKmZpZWxkLCAKKwkJRklFTERUWVBFICp0eXBlLCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF90eXBlCitGSUVMRFRZUEUgKmZpZWxkX3R5cGUoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihGSUVMRFRZUEUgKiopMCk7IH0KKworLyogLi9mbGRfdXNlci5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfdXNlcnB0cgoraW50CXNldF9maWVsZF91c2VycHRyKAorCQlGSUVMRAkqZmllbGQsIAorCQl2b2lkCSp1c3JwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3VzZXJwdHIKK3ZvaWQJKmZpZWxkX3VzZXJwdHIoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vZnJtX2N1cnNvci5jICovCisKKyN1bmRlZiBwb3NfZm9ybV9jdXJzb3IKK2ludAlwb3NfZm9ybV9jdXJzb3IoCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fZGF0YS5jICovCisKKyN1bmRlZiBkYXRhX2JlaGluZAorTkNVUlNFU19CT09MIGRhdGFfYmVoaW5kKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBkYXRhX2FoZWFkCitOQ1VSU0VTX0JPT0wgZGF0YV9haGVhZCgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2ZybV9kZWYuYyAqLworCisjdW5kZWYgX25jX0RlZmF1bHRfRm9ybQorRk9STQkqX25jX0RlZmF1bHRfRm9ybTsKKworI3VuZGVmIG5ld19mb3JtCitGT1JNCSpuZXdfZm9ybSgKKwkJRklFTEQJKipmaWVsZHMpCisJCXsgcmV0dXJuKCooRk9STSAqKikwKTsgfQorCisjdW5kZWYgZnJlZV9mb3JtCitpbnQJZnJlZV9mb3JtKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRfZm9ybV9maWVsZHMKK2ludAlzZXRfZm9ybV9maWVsZHMoCisJCUZPUk0JKmZvcm0sIAorCQlGSUVMRAkqKmZpZWxkcykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV9maWVsZHMKK0ZJRUxECSoqZm9ybV9maWVsZHMoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRklFTEQgKioqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9jb3VudAoraW50CWZpZWxkX2NvdW50KAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZnJtX2RyaXZlci5jICovCisKKyN1bmRlZiBfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IKK2ludAlfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IoCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQKK2ludAlfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcworaW50CV9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzKAorCQlGSUVMRAkqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19TeW5jaHJvbml6ZV9PcHRpb25zCitpbnQJX25jX1N5bmNocm9uaXplX09wdGlvbnMoCisJCUZJRUxECSpmaWVsZCwgCisJCUZpZWxkX09wdGlvbnMgbmV3b3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1NldF9DdXJyZW50X0ZpZWxkCitpbnQJX25jX1NldF9DdXJyZW50X0ZpZWxkKAorCQlGT1JNCSpmb3JtLCAKKwkJRklFTEQJKm5ld2ZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbgorTkNVUlNFU19CT09MIF9uY19JbnRlcm5hbF9WYWxpZGF0aW9uKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkCitGSUVMRAkqX25jX0ZpcnN0X0FjdGl2ZV9GaWVsZCgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisjdW5kZWYgX25jX1NldF9Gb3JtX1BhZ2UKK2ludAlfbmNfU2V0X0Zvcm1fUGFnZSgKKwkJRk9STQkqZm9ybSwgCisJCWludAlwYWdlLCAKKwkJRklFTEQJKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBrZXljb2RlOyAKKyAgaW50ICgqY21kKSAoRk9STSAqKTsgCit9CitCaW5kaW5nX0luZm87CisKKyN1bmRlZiBmb3JtX2RyaXZlcgoraW50CWZvcm1fZHJpdmVyKAorCQlGT1JNCSpmb3JtLCAKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF9maWVsZF9idWZmZXIKK2ludAlzZXRfZmllbGRfYnVmZmVyKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJYnVmZmVyLCAKKwkJY29uc3QgY2hhciAqdmFsdWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2J1ZmZlcgorY2hhcgkqZmllbGRfYnVmZmVyKAorCQljb25zdCBGSUVMRCAqZmllbGQsIAorCQlpbnQJYnVmZmVyKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9mcm1faG9vay5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfaW5pdAoraW50CXNldF9maWVsZF9pbml0KAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2luaXQKK0Zvcm1fSG9vayBmaWVsZF9pbml0KAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfZmllbGRfdGVybQoraW50CXNldF9maWVsZF90ZXJtKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3Rlcm0KK0Zvcm1fSG9vayBmaWVsZF90ZXJtKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfZm9ybV9pbml0CitpbnQJc2V0X2Zvcm1faW5pdCgKKwkJRk9STQkqZm9ybSwgCisJCUZvcm1fSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX2luaXQKK0Zvcm1fSG9vayBmb3JtX2luaXQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9mb3JtX3Rlcm0KK2ludAlzZXRfZm9ybV90ZXJtKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fdGVybQorRm9ybV9Ib29rIGZvcm1fdGVybSgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGb3JtX0hvb2sgKikwKTsgfQorCisvKiAuL2ZybV9vcHRzLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX29wdHMKK2ludAlzZXRfZm9ybV9vcHRzKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fb3B0cworRm9ybV9PcHRpb25zIGZvcm1fb3B0cygKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGb3JtX09wdGlvbnMgKikwKTsgfQorCisjdW5kZWYgZm9ybV9vcHRzX29uCitpbnQJZm9ybV9vcHRzX29uKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fb3B0c19vZmYKK2ludAlmb3JtX29wdHNfb2ZmKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fcGFnZS5jICovCisKKyN1bmRlZiBzZXRfZm9ybV9wYWdlCitpbnQJc2V0X2Zvcm1fcGFnZSgKKwkJRk9STQkqZm9ybSwgCisJCWludAlwYWdlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX3BhZ2UKK2ludAlmb3JtX3BhZ2UoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fcG9zdC5jICovCisKKyN1bmRlZiBwb3N0X2Zvcm0KK2ludAlwb3N0X2Zvcm0oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVucG9zdF9mb3JtCitpbnQJdW5wb3N0X2Zvcm0oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fcmVxX25hbWUuYyAqLworCisjdW5kZWYgZm9ybV9yZXF1ZXN0X25hbWUKK2NvbnN0IGNoYXIgKmZvcm1fcmVxdWVzdF9uYW1lKAorCQlpbnQJcmVxdWVzdCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBmb3JtX3JlcXVlc3RfYnlfbmFtZQoraW50CWZvcm1fcmVxdWVzdF9ieV9uYW1lKAorCQljb25zdCBjaGFyICpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fc2NhbGUuYyAqLworCisjdW5kZWYgc2NhbGVfZm9ybQoraW50CXNjYWxlX2Zvcm0oCisJCWNvbnN0IEZPUk0gKmZvcm0sIAorCQlpbnQJKnJvd3MsIAorCQlpbnQJKmNvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fc3ViLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX3N1YgoraW50CXNldF9mb3JtX3N1YigKKwkJRk9STQkqZm9ybSwgCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX3N1YgorV0lORE9XCSpmb3JtX3N1YigKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9mcm1fdXNlci5jICovCisKKyN1bmRlZiBzZXRfZm9ybV91c2VycHRyCitpbnQJc2V0X2Zvcm1fdXNlcnB0cigKKwkJRk9STQkqZm9ybSwgCisJCXZvaWQJKnVzcnB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV91c2VycHRyCit2b2lkCSpmb3JtX3VzZXJwdHIoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL2ZybV93aW4uYyAqLworCisjdW5kZWYgc2V0X2Zvcm1fd2luCitpbnQJc2V0X2Zvcm1fd2luKAorCQlGT1JNCSpmb3JtLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fd2luCitXSU5ET1cJKmZvcm1fd2luKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Z0eV9hbG51bS5jICovCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgd2lkdGg7CisgIH0KK2FsbnVtQVJHOworCisjdW5kZWYgVFlQRV9BTE5VTQorRklFTERUWVBFICpUWVBFX0FMTlVNOworCisvKiAuL2Z0eV9hbHBoYS5jICovCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgd2lkdGg7CisgIH0KK2FscGhhQVJHOworCisjdW5kZWYgVFlQRV9BTFBIQQorRklFTERUWVBFICpUWVBFX0FMUEhBOworCisvKiAuL2Z0eV9lbnVtLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGNoYXIgKiprd2RzOworICAgIGludCBjb3VudDsKKyAgICBOQ1VSU0VTX0JPT0wgY2hlY2tjYXNlOworICAgIE5DVVJTRVNfQk9PTCBjaGVja3VuaXF1ZTsKKyAgfQorZW51bUFSRzsKKworI3VuZGVmIFRZUEVfRU5VTQorRklFTERUWVBFICpUWVBFX0VOVU07CisKKy8qIC4vZnR5X2ludC5jICovCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgcHJlY2lzaW9uOworICAgIGxvbmcgbG93OworICAgIGxvbmcgaGlnaDsKKyAgfQoraW50ZWdlckFSRzsKKworI3VuZGVmIFRZUEVfSU5URUdFUgorRklFTERUWVBFICpUWVBFX0lOVEVHRVI7CisKKy8qIC4vZnR5X2lwdjQuYyAqLworI3VuZGVmIFRZUEVfSVBWNAorRklFTERUWVBFICpUWVBFX0lQVjQ7CisKKy8qIC4vZnR5X251bS5jICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCBwcmVjaXNpb247CisgICAgZG91YmxlIGxvdzsKKyAgICBkb3VibGUgaGlnaDsKKyAgICBzdHJ1Y3QgbGNvbnYgKkw7CisgIH0KK251bWVyaWNBUkc7CisKKyN1bmRlZiBUWVBFX05VTUVSSUMKK0ZJRUxEVFlQRSAqVFlQRV9OVU1FUklDOworCisvKiAuL2Z0eV9yZWdleC5jICovCisKKyNpbmNsdWRlIDxyZWdleC5oPgorCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgcmVnZXhfdCAqcFJlZ0V4cDsKKyAgICB1bnNpZ25lZCBsb25nICpyZWZDb3VudDsKKyAgfQorUmVnRXhwX0FyZzsKKworI3VuZGVmIFRZUEVfUkVHRVhQCitGSUVMRFRZUEUgKlRZUEVfUkVHRVhQOwpkaWZmIC0tZ2l0IGEvZm9ybS9sbGliLWxmb3JtdyBiL2Zvcm0vbGxpYi1sZm9ybXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MGM1YgotLS0gL2Rldi9udWxsCisrKyBiL2Zvcm0vbGxpYi1sZm9ybXcKQEAgLTAsMCArMSw3NDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDIwMDIsMjAwNSAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vZl90cmFjZS5jICovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworI3VuZGVmIF9uY19yZXRyYWNlX2ZpZWxkX3B0cgorRklFTEQJKipfbmNfcmV0cmFjZV9maWVsZF9wdHIoCisJCUZJRUxECSoqY29kZSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2ZpZWxkCitGSUVMRAkqX25jX3JldHJhY2VfZmllbGQoCisJCUZJRUxECSpjb2RlKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9maWVsZF90eXBlCitGSUVMRFRZUEUgKl9uY19yZXRyYWNlX2ZpZWxkX3R5cGUoCisJCUZJRUxEVFlQRSAqY29kZSkKKwkJeyByZXR1cm4oKihGSUVMRFRZUEUgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2Zvcm0KK0ZPUk0JKl9uY19yZXRyYWNlX2Zvcm0oCisJCUZPUk0JKmNvZGUpCisJCXsgcmV0dXJuKCooRk9STSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfZm9ybV9ob29rCitGb3JtX0hvb2sgX25jX3JldHJhY2VfZm9ybV9ob29rKAorCQlGb3JtX0hvb2sgY29kZSkKKwkJeyByZXR1cm4oKihGb3JtX0hvb2sgKikwKTsgfQorCisvKiAuL2ZsZF9hcmcuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkdHlwZV9hcmcKK2ludAlzZXRfZmllbGR0eXBlX2FyZygKKwkJRklFTERUWVBFICp0eXAsIAorCQl2b2lkCSooKmNvbnN0IG1ha2VfYXJnKSgKKwkJdmFfbGlzdAkqcDEpLCAKKwkJdm9pZAkqKCpjb25zdCBjb3B5X2FyZykoCisJCWNvbnN0IHZvaWQgKnAxKSwgCisJCXZvaWQJKCpjb25zdCBmcmVlX2FyZykoCisJCXZvaWQJKnAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfYXJnCit2b2lkCSpmaWVsZF9hcmcoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vZmxkX2F0dHIuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX2ZvcmUKK2ludAlzZXRfZmllbGRfZm9yZSgKKwkJRklFTEQJKmZpZWxkLCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2ZvcmUKK2NodHlwZQlmaWVsZF9mb3JlKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIHNldF9maWVsZF9iYWNrCitpbnQJc2V0X2ZpZWxkX2JhY2soCisJCUZJRUxECSpmaWVsZCwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9iYWNrCitjaHR5cGUJZmllbGRfYmFjaygKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKy8qIC4vZmxkX2N1cnJlbnQuYyAqLworCisjdW5kZWYgc2V0X2N1cnJlbnRfZmllbGQKK2ludAlzZXRfY3VycmVudF9maWVsZCgKKwkJRk9STQkqZm9ybSwgCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY3VycmVudF9maWVsZAorRklFTEQJKmN1cnJlbnRfZmllbGQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworI3VuZGVmIGZpZWxkX2luZGV4CitpbnQJZmllbGRfaW5kZXgoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9kZWYuYyAqLworCisjdW5kZWYgX25jX0RlZmF1bHRfRmllbGQKK0ZJRUxECSpfbmNfRGVmYXVsdF9GaWVsZDsKKworI3VuZGVmIF9uY19NYWtlX0FyZ3VtZW50CitUeXBlQXJndW1lbnQgKl9uY19NYWtlX0FyZ3VtZW50KAorCQljb25zdCBGSUVMRFRZUEUgKnR5cCwgCisJCXZhX2xpc3QJKmFwLCAKKwkJaW50CSplcnIpCisJCXsgcmV0dXJuKCooVHlwZUFyZ3VtZW50ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfQ29weV9Bcmd1bWVudAorVHlwZUFyZ3VtZW50ICpfbmNfQ29weV9Bcmd1bWVudCgKKwkJY29uc3QgRklFTERUWVBFICp0eXAsIAorCQljb25zdCBUeXBlQXJndW1lbnQgKmFyZ3AsIAorCQlpbnQJKmVycikKKwkJeyByZXR1cm4oKihUeXBlQXJndW1lbnQgKiopMCk7IH0KKworI3VuZGVmIF9uY19GcmVlX0FyZ3VtZW50Cit2b2lkCV9uY19GcmVlX0FyZ3VtZW50KAorCQljb25zdCBGSUVMRFRZUEUgKnR5cCwgCisJCVR5cGVBcmd1bWVudCAqYXJncCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19Db3B5X1R5cGUKK05DVVJTRVNfQk9PTCBfbmNfQ29weV9UeXBlKAorCQlGSUVMRAkqZHN0LCAKKwkJRklFTEQgY29uc3QgKnNyYykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX0ZyZWVfVHlwZQordm9pZAlfbmNfRnJlZV9UeXBlKAorCQlGSUVMRAkqZmllbGQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBuZXdfZmllbGQKK0ZJRUxECSpuZXdfZmllbGQoCisJCWludAlyb3dzLCAKKwkJaW50CWNvbHMsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sLCAKKwkJaW50CW5yb3csIAorCQlpbnQJbmJ1ZikKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisjdW5kZWYgZnJlZV9maWVsZAoraW50CWZyZWVfZmllbGQoCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9kdXAuYyAqLworCisjdW5kZWYgZHVwX2ZpZWxkCitGSUVMRAkqZHVwX2ZpZWxkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKy8qIC4vZmxkX2Z0Y2hvaWNlLmMgKi8KKworI3VuZGVmIHNldF9maWVsZHR5cGVfY2hvaWNlCitpbnQJc2V0X2ZpZWxkdHlwZV9jaG9pY2UoCisJCUZJRUxEVFlQRSAqdHlwLCAKKwkJTkNVUlNFU19CT09MICgqY29uc3QgbmV4dF9jaG9pY2UpKAorCQlGSUVMRAkqcDEsIAorCQljb25zdCB2b2lkICpwMiksIAorCQlOQ1VSU0VTX0JPT0wgKCpjb25zdCBwcmV2X2Nob2ljZSkoCisJCUZJRUxECSpwMSwgCisJCWNvbnN0IHZvaWQgKnAyKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9mdGxpbmsuYyAqLworCisjdW5kZWYgbGlua19maWVsZHR5cGUKK0ZJRUxEVFlQRSAqbGlua19maWVsZHR5cGUoCisJCUZJRUxEVFlQRSAqdHlwZTEsIAorCQlGSUVMRFRZUEUgKnR5cGUyKQorCQl7IHJldHVybigqKEZJRUxEVFlQRSAqKikwKTsgfQorCisvKiAuL2ZsZF9pbmZvLmMgKi8KKworI3VuZGVmIGZpZWxkX2luZm8KK2ludAlmaWVsZF9pbmZvKAorCQljb25zdCBGSUVMRCAqZmllbGQsIAorCQlpbnQJKnJvd3MsIAorCQlpbnQJKmNvbHMsIAorCQlpbnQJKmZyb3csIAorCQlpbnQJKmZjb2wsIAorCQlpbnQJKm5yb3csIAorCQlpbnQJKm5idWYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGR5bmFtaWNfZmllbGRfaW5mbworaW50CWR5bmFtaWNfZmllbGRfaW5mbygKKwkJY29uc3QgRklFTEQgKmZpZWxkLCAKKwkJaW50CSpkcm93cywgCisJCWludAkqZGNvbHMsIAorCQlpbnQJKm1heGdyb3cpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfanVzdC5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfanVzdAoraW50CXNldF9maWVsZF9qdXN0KAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJanVzdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfanVzdAoraW50CWZpZWxkX2p1c3QoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9saW5rLmMgKi8KKworI3VuZGVmIGxpbmtfZmllbGQKK0ZJRUxECSpsaW5rX2ZpZWxkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKy8qIC4vZmxkX21heC5jICovCisKKyN1bmRlZiBzZXRfbWF4X2ZpZWxkCitpbnQJc2V0X21heF9maWVsZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CW1heGdyb3cpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfbW92ZS5jICovCisKKyN1bmRlZiBtb3ZlX2ZpZWxkCitpbnQJbW92ZV9maWVsZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWZyb3csIAorCQlpbnQJZmNvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9uZXdmdHlwLmMgKi8KKworI3VuZGVmIF9uY19EZWZhdWx0X0ZpZWxkVHlwZQorY29uc3QgRklFTERUWVBFICpfbmNfRGVmYXVsdF9GaWVsZFR5cGUgPSB7MH07CisKKyN1bmRlZiBuZXdfZmllbGR0eXBlCitGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoCisJCU5DVVJTRVNfQk9PTCAoKmNvbnN0IGZpZWxkX2NoZWNrKSgKKwkJRklFTEQJKnAxLCAKKwkJY29uc3Qgdm9pZCAqcDIpLCAKKwkJTkNVUlNFU19CT09MICgqY29uc3QgY2hhcl9jaGVjaykoCisJCWludAlwMSwgCisJCWNvbnN0IHZvaWQgKnAyKSkKKwkJeyByZXR1cm4oKihGSUVMRFRZUEUgKiopMCk7IH0KKworI3VuZGVmIGZyZWVfZmllbGR0eXBlCitpbnQJZnJlZV9maWVsZHR5cGUoCisJCUZJRUxEVFlQRSAqdHlwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX29wdHMuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX29wdHMKK2ludAlzZXRfZmllbGRfb3B0cygKKwkJRklFTEQJKmZpZWxkLCAKKwkJRmllbGRfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9vcHRzCitGaWVsZF9PcHRpb25zIGZpZWxkX29wdHMoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihGaWVsZF9PcHRpb25zICopMCk7IH0KKworI3VuZGVmIGZpZWxkX29wdHNfb24KK2ludAlmaWVsZF9vcHRzX29uKAorCQlGSUVMRAkqZmllbGQsIAorCQlGaWVsZF9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX29wdHNfb2ZmCitpbnQJZmllbGRfb3B0c19vZmYoCisJCUZJRUxECSpmaWVsZCwgCisJCUZpZWxkX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9wYWQuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX3BhZAoraW50CXNldF9maWVsZF9wYWQoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfcGFkCitpbnQJZmllbGRfcGFkKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfcGFnZS5jICovCisKKyN1bmRlZiBzZXRfbmV3X3BhZ2UKK2ludAlzZXRfbmV3X3BhZ2UoCisJCUZJRUxECSpmaWVsZCwgCisJCU5DVVJTRVNfQk9PTCBuZXdfcGFnZV9mbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBuZXdfcGFnZQorTkNVUlNFU19CT09MIG5ld19wYWdlKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9mbGRfc3RhdC5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfc3RhdHVzCitpbnQJc2V0X2ZpZWxkX3N0YXR1cygKKwkJRklFTEQJKmZpZWxkLCAKKwkJTkNVUlNFU19CT09MIHN0YXR1cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfc3RhdHVzCitOQ1VSU0VTX0JPT0wgZmllbGRfc3RhdHVzKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9mbGRfdHlwZS5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfdHlwZQoraW50CXNldF9maWVsZF90eXBlKAorCQlGSUVMRAkqZmllbGQsIAorCQlGSUVMRFRZUEUgKnR5cGUsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3R5cGUKK0ZJRUxEVFlQRSAqZmllbGRfdHlwZSgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKEZJRUxEVFlQRSAqKikwKTsgfQorCisvKiAuL2ZsZF91c2VyLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF91c2VycHRyCitpbnQJc2V0X2ZpZWxkX3VzZXJwdHIoCisJCUZJRUxECSpmaWVsZCwgCisJCXZvaWQJKnVzcnB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfdXNlcnB0cgordm9pZAkqZmllbGRfdXNlcnB0cigKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9mcm1fY3Vyc29yLmMgKi8KKworI3VuZGVmIHBvc19mb3JtX2N1cnNvcgoraW50CXBvc19mb3JtX2N1cnNvcigKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9kYXRhLmMgKi8KKworI3VuZGVmIGRhdGFfYmVoaW5kCitOQ1VSU0VTX0JPT0wgZGF0YV9iZWhpbmQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGRhdGFfYWhlYWQKK05DVVJTRVNfQk9PTCBkYXRhX2FoZWFkKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vZnJtX2RlZi5jICovCisKKyN1bmRlZiBfbmNfRGVmYXVsdF9Gb3JtCitGT1JNCSpfbmNfRGVmYXVsdF9Gb3JtOworCisjdW5kZWYgbmV3X2Zvcm0KK0ZPUk0JKm5ld19mb3JtKAorCQlGSUVMRAkqKmZpZWxkcykKKwkJeyByZXR1cm4oKihGT1JNICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX2Zvcm0KK2ludAlmcmVlX2Zvcm0oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF9mb3JtX2ZpZWxkcworaW50CXNldF9mb3JtX2ZpZWxkcygKKwkJRk9STQkqZm9ybSwgCisJCUZJRUxECSoqZmllbGRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX2ZpZWxkcworRklFTEQJKipmb3JtX2ZpZWxkcygKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKiopMCk7IH0KKworI3VuZGVmIGZpZWxkX2NvdW50CitpbnQJZmllbGRfY291bnQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fZHJpdmVyLmMgKi8KKworI3VuZGVmIF9uY19Qb3NpdGlvbl9Gb3JtX0N1cnNvcgoraW50CV9uY19Qb3NpdGlvbl9Gb3JtX0N1cnNvcigKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1JlZnJlc2hfQ3VycmVudF9GaWVsZAoraW50CV9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzCitpbnQJX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMoCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1N5bmNocm9uaXplX09wdGlvbnMKK2ludAlfbmNfU3luY2hyb25pemVfT3B0aW9ucygKKwkJRklFTEQJKmZpZWxkLCAKKwkJRmllbGRfT3B0aW9ucyBuZXdvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfU2V0X0N1cnJlbnRfRmllbGQKK2ludAlfbmNfU2V0X0N1cnJlbnRfRmllbGQoCisJCUZPUk0JKmZvcm0sIAorCQlGSUVMRAkqbmV3ZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19JbnRlcm5hbF9WYWxpZGF0aW9uCitOQ1VSU0VTX0JPT0wgX25jX0ludGVybmFsX1ZhbGlkYXRpb24oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19GaXJzdF9BY3RpdmVfRmllbGQKK0ZJRUxECSpfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKyN1bmRlZiBfbmNfU2V0X0Zvcm1fUGFnZQoraW50CV9uY19TZXRfRm9ybV9QYWdlKAorCQlGT1JNCSpmb3JtLCAKKwkJaW50CXBhZ2UsIAorCQlGSUVMRAkqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IGtleWNvZGU7IAorICBpbnQgKCpjbWQpIChGT1JNICopOyAKK30KK0JpbmRpbmdfSW5mbzsKKworI3VuZGVmIGZvcm1fZHJpdmVyCitpbnQJZm9ybV9kcml2ZXIoCisJCUZPUk0JKmZvcm0sIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0X2ZpZWxkX2J1ZmZlcgoraW50CXNldF9maWVsZF9idWZmZXIoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAlidWZmZXIsIAorCQljb25zdCBjaGFyICp2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfYnVmZmVyCitjaGFyCSpmaWVsZF9idWZmZXIoCisJCWNvbnN0IEZJRUxEICpmaWVsZCwgCisJCWludAlidWZmZXIpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX1dpZGVuX1N0cmluZword2NoYXJfdAkqX25jX1dpZGVuX1N0cmluZygKKwkJY2hhcgkqc291cmNlLCAKKwkJaW50CSpsZW5ndGhwKQorCQl7IHJldHVybigqKHdjaGFyX3QgKiopMCk7IH0KKworLyogLi9mcm1faG9vay5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfaW5pdAoraW50CXNldF9maWVsZF9pbml0KAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2luaXQKK0Zvcm1fSG9vayBmaWVsZF9pbml0KAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfZmllbGRfdGVybQoraW50CXNldF9maWVsZF90ZXJtKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3Rlcm0KK0Zvcm1fSG9vayBmaWVsZF90ZXJtKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfZm9ybV9pbml0CitpbnQJc2V0X2Zvcm1faW5pdCgKKwkJRk9STQkqZm9ybSwgCisJCUZvcm1fSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX2luaXQKK0Zvcm1fSG9vayBmb3JtX2luaXQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9mb3JtX3Rlcm0KK2ludAlzZXRfZm9ybV90ZXJtKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fdGVybQorRm9ybV9Ib29rIGZvcm1fdGVybSgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGb3JtX0hvb2sgKikwKTsgfQorCisvKiAuL2ZybV9vcHRzLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX29wdHMKK2ludAlzZXRfZm9ybV9vcHRzKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fb3B0cworRm9ybV9PcHRpb25zIGZvcm1fb3B0cygKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGb3JtX09wdGlvbnMgKikwKTsgfQorCisjdW5kZWYgZm9ybV9vcHRzX29uCitpbnQJZm9ybV9vcHRzX29uKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fb3B0c19vZmYKK2ludAlmb3JtX29wdHNfb2ZmKAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fcGFnZS5jICovCisKKyN1bmRlZiBzZXRfZm9ybV9wYWdlCitpbnQJc2V0X2Zvcm1fcGFnZSgKKwkJRk9STQkqZm9ybSwgCisJCWludAlwYWdlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX3BhZ2UKK2ludAlmb3JtX3BhZ2UoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fcG9zdC5jICovCisKKyN1bmRlZiBwb3N0X2Zvcm0KK2ludAlwb3N0X2Zvcm0oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVucG9zdF9mb3JtCitpbnQJdW5wb3N0X2Zvcm0oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fcmVxX25hbWUuYyAqLworCisjdW5kZWYgZm9ybV9yZXF1ZXN0X25hbWUKK2NvbnN0IGNoYXIgKmZvcm1fcmVxdWVzdF9uYW1lKAorCQlpbnQJcmVxdWVzdCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBmb3JtX3JlcXVlc3RfYnlfbmFtZQoraW50CWZvcm1fcmVxdWVzdF9ieV9uYW1lKAorCQljb25zdCBjaGFyICpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fc2NhbGUuYyAqLworCisjdW5kZWYgc2NhbGVfZm9ybQoraW50CXNjYWxlX2Zvcm0oCisJCWNvbnN0IEZPUk0gKmZvcm0sIAorCQlpbnQJKnJvd3MsIAorCQlpbnQJKmNvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fc3ViLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX3N1YgoraW50CXNldF9mb3JtX3N1YigKKwkJRk9STQkqZm9ybSwgCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX3N1YgorV0lORE9XCSpmb3JtX3N1YigKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9mcm1fdXNlci5jICovCisKKyN1bmRlZiBzZXRfZm9ybV91c2VycHRyCitpbnQJc2V0X2Zvcm1fdXNlcnB0cigKKwkJRk9STQkqZm9ybSwgCisJCXZvaWQJKnVzcnB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV91c2VycHRyCit2b2lkCSpmb3JtX3VzZXJwdHIoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL2ZybV93aW4uYyAqLworCisjdW5kZWYgc2V0X2Zvcm1fd2luCitpbnQJc2V0X2Zvcm1fd2luKAorCQlGT1JNCSpmb3JtLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fd2luCitXSU5ET1cJKmZvcm1fd2luKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Z0eV9hbG51bS5jICovCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgd2lkdGg7CisgIH0KK2FsbnVtQVJHOworCisjdW5kZWYgVFlQRV9BTE5VTQorRklFTERUWVBFICpUWVBFX0FMTlVNOworCisvKiAuL2Z0eV9hbHBoYS5jICovCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgd2lkdGg7CisgIH0KK2FscGhhQVJHOworCisjdW5kZWYgVFlQRV9BTFBIQQorRklFTERUWVBFICpUWVBFX0FMUEhBOworCisvKiAuL2Z0eV9lbnVtLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGNoYXIgKiprd2RzOworICAgIGludCBjb3VudDsKKyAgICBOQ1VSU0VTX0JPT0wgY2hlY2tjYXNlOworICAgIE5DVVJTRVNfQk9PTCBjaGVja3VuaXF1ZTsKKyAgfQorZW51bUFSRzsKKworI3VuZGVmIFRZUEVfRU5VTQorRklFTERUWVBFICpUWVBFX0VOVU07CisKKy8qIC4vZnR5X2ludC5jICovCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgcHJlY2lzaW9uOworICAgIGxvbmcgbG93OworICAgIGxvbmcgaGlnaDsKKyAgfQoraW50ZWdlckFSRzsKKworI3VuZGVmIFRZUEVfSU5URUdFUgorRklFTERUWVBFICpUWVBFX0lOVEVHRVI7CisKKy8qIC4vZnR5X2lwdjQuYyAqLworI3VuZGVmIFRZUEVfSVBWNAorRklFTERUWVBFICpUWVBFX0lQVjQ7CisKKy8qIC4vZnR5X251bS5jICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCBwcmVjaXNpb247CisgICAgZG91YmxlIGxvdzsKKyAgICBkb3VibGUgaGlnaDsKKyAgICBzdHJ1Y3QgbGNvbnYgKkw7CisgIH0KK251bWVyaWNBUkc7CisKKyN1bmRlZiBUWVBFX05VTUVSSUMKK0ZJRUxEVFlQRSAqVFlQRV9OVU1FUklDOworCisvKiAuL2Z0eV9yZWdleC5jICovCisKKyNpbmNsdWRlIDxyZWdleC5oPgorCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgcmVnZXhfdCAqcFJlZ0V4cDsKKyAgICB1bnNpZ25lZCBsb25nICpyZWZDb3VudDsKKyAgfQorUmVnRXhwX0FyZzsKKworI3VuZGVmIFRZUEVfUkVHRVhQCitGSUVMRFRZUEUgKlRZUEVfUkVHRVhQOwpkaWZmIC0tZ2l0IGEvZm9ybS9tb2R1bGVzIGIvZm9ybS9tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjlmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtL21vZHVsZXMKQEAgLTAsMCArMSw3NiBAQAorIyAkSWQ6IG1vZHVsZXMsdiAxLjE1IDIwMDYvMTIvMjQgMDA6NTI6NTggdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQkxOTk1LW9uCisjCisKK0AgYmFzZQorIyBMaWJyYXJ5IG9iamVjdHMKK2ZfdHJhY2UJCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfYXJnCQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2F0dHIJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9jdXJyZW50CWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfZGVmCQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2R1cAkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9mdGNob2ljZQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2Z0bGluawlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2luZm8JbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9qdXN0CWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfbGluawlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX21heAkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9tb3ZlCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfbmV3ZnR5cAlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX29wdHMJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9wYWQJCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfcGFnZQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX3N0YXQJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF90eXBlCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfdXNlcglsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX2N1cnNvcglsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX2RhdGEJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9kZWYJCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fZHJpdmVyCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1faG9vawlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX29wdHMJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9wYWdlCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fcG9zdAlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX3JlcV9uYW1lCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fc2NhbGUJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9zdWIJCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fdXNlcglsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX3dpbgkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2Z0eV9hbG51bQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnR5X2FscGhhCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmdHlfZW51bQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnR5X2ludAkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2Z0eV9pcHY0CWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmdHlfbnVtCQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnR5X3JlZ2V4CWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9DYXBzIGIvaW5jbHVkZS9DYXBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjNjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL0NhcHMKQEAgLTAsMCArMSwxMjY0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NQorIyAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgorIworIyAkSWQ6IENhcHMsdiAxLjM2IDIwMDYvMDUvMjcgMTU6MzM6MDQgdG9tIEV4cCAkCisjCisjIFRoaXMgaXMgdGhlIG1hc3RlciB0ZXJtY2FwL3Rlcm1pbmZvIGNhcGFiaWxpdHkgdGFibGUuCisjCisjIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBpbml0aWFsaXplcnMgZm9yIHRhYmxlcyB0aGF0IGRyaXZlIHRpYywKKyMgaW5mb2NtcCwgYW5kIHRoZSBsaWJyYXJ5IGNvbXBpbGF0aW9uIGNvZGUgdXNlZCB0byBzdXBwb3J0IHRoZSB0ZXJtY2FwIAorIyBjb21wYXRpYmlsaXR5IGhhY2suICBJdCBpcyBhbHNvIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYnVsYXIgcG9ydGlvbiBvZiB0aGUKKyMgdGVybWluZm8oNSkgbWFuIHBhZ2U7IGxpbmVzIGJlZ2lubmluZyB3aXRoIGAjJScgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGJlY29tZQorIyB0aGUgdGVybWluZm8gdGFibGUuCisjCisjIFRoaXMgZmlsZSBoYXMgdGhyZWUgbWFqb3Igc2VjdGlvbnM7IGEgc3RhbmRhcmQtY2FwYWJpbGl0aWVzIHRhYmxlLCB0d28KKyMgZXh0ZW5zaW9uLWNhcGFiaWxpdHkgdGFibGVzLCBhbmQgYSBzZWN0aW9uIG9mIGFsaWFzZXMgZGVjbGFyYXRpb25zLgorIyBUaGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgZm9ybWF0LCBhcyBmb2xsb3dzOgorIworIyBGSUxFIEZPUk1BVAorIworIyBDb2x1bW4gMTogdGVybWluZm8gdmFyaWFibGUgbmFtZQorIyBDb2x1bW4gMjogdGVybWluZm8gY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiAzOiBjYXBhYmlsaXR5IHR5cGUgKGJvb2xlYW4sIG51bWVyaWMsIG9yIHN0cmluZykKKyMgQ29sdW1uIDQ6IHRlcm1jYXAgY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiA1OiBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNjogdmFsdWUgZm9yIEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA3OiBMZWFkIHdpdGggYFknIGlmIGNhcGFiaWxpdHkgc2hvdWxkIGJlIGVtaXR0ZWQgaW4gdGVybWNhcAorIyAgICAgICAgICAgdHJhbnNsYXRpb25zLCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA4OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uCisjCisjIFRoZSBjb2RlcyBmb2xsb3dpbmcgW1ktXSBpbiBjb2x1bW4gNyBkZXNjcmliZSB0aGUgdmVyc2lvbnMgb2YgdGVybWNhcCB3aGljaAorIyB1c2UgdGhlIGdpdmVuIGNhcGFiaWxpdHkuICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJzZXMgbGlicmFyeQorIyBwcm9wZXI7IHJhdGhlciwgaXQncyB0aGVyZSB0byBoZWxwIHRoZSB0ZXJtaW5mbyBtYWludGFpbmVyIGF2b2lkIGVtaXR0aW5nCisjIHRlcm1jYXAgZW50cnkgdHJhbnNsYXRpb25zIHRoYXQgYXJlIG1vcmUgdGhhbiAxMDIzIGJ5dGVzIGxvbmcgKGFuZCB0YW5rIGEKKyMgbG90IG9mIG9sZCB0ZXJtY2FwLXVzaW5nIHByb2dyYW1zKS4gIFRoZSBjb2RlcyByZWFkIGFzIGZvbGxvd3M6CisjCUIgPSBtZW50aW9uZWQgaW4gdGhlIEJTRCBtYW4gcGFnZSBmb3IgNC40QlNEIGN1cnNlcworIwlDID0gdXNlZCBieSB0aGUgNC40QlNEIGN1cnNlcyBsaWJyYXJ5CisjCUcgPSBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIEdOVSB0ZXJtY2FwCisjCUUgPSB1c2VkIGJ5IEdOVSBFbWFjcworIwlLID0gcmVtb3ZlIHRoaXMgdGVybWluZm8gY2FwYWJpbGl0eSB3aGVuIHRyYW5zbGF0aW5nIHRvIHN0YW5kYXJkIGZvcm1hdAorIyBUaGUgaW1wb3J0YW50IGNvZGVzIGFyZSBDIGFuZCBFLiAgQSBjYXAgd2l0aCBDIG9yIEUgc2hvdWxkIGJlIHByZXNlcnZlZCBpbgorIyB0cmFuc2xhdGlvbiBpZiBwb3NzaWJsZS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgcHJlc2VydmluZyBhbGwgc3VjaCBjYXBzIG1heQorIyBsZWFkIHRvIHNvbWUgdGVybWNhcCB0cmFuc2xhdGlvbnMgYmVpbmcgdG9vIGxvbmcuICBUaGUgdGVybWNhcCBtYWludGFpbmVyCisjIGhhcyBhIGJpdCBvZiBhIGp1Z2dsaW5nIGFjdCB0byBkby4uLnBvdGVudGlhbCBwcm9ibGVtIGNhc2VzIGFyZSBtYXJrZWQgd2l0aAorIyBhbiBhc3RlcmlzayAoKikuCisjCisjIFRoZSBhbGlhc2VzIHNlY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIworIyBDb2x1bW4gMTogZWl0aGVyIGBjYXBhbGlhcycgb3IgYGluZm9hbGlhcycKKyMgQ29sdW1uIDI6IG5hbWUgdG8gYmUgYWxpYXNlZAorIyBDb2x1bW4gMzogd2hhdCBuYW1lIGl0IHNob3VsZCB0cmFuc2xhdGUgdG8uICBUaGUgbmFtZSBJR05PUkUgbWVhbnMgaXQKKyMgICAgICAgICAgIHNob3VsZCBiZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS4KKyMgQ29sdW1uIDQ6IG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBzZXQgKHVzZWQgZm9yIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMpCisjIENvbHVtbiA1OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uICh1c3VhbGx5IGFuIGFzc29jaWF0ZWQgdGVybWluZm8gdmFyaWFibGUpCisjCisjIEhBTkRMSU5HIFRFUk1DQVAgQU5EIFRFUk1JTkZPIEVYVEVOU0lPTlMKKyMKKyMgVGhlcmUgYXJlIGJhc2ljYWxseSBmaXZlIGRpZmZlcmVudCB3YXlzIHRvIGhhbmRsZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbworIyBleHRlbnNpb25zOgorIworIyAxLiBEb24ndCBsaXN0IHRoZSBjYXBuYW1lIGhlcmUsIG9yIGxpc3QgaXQgYnV0IGNvbW1lbnQgaXQgb3V0ICh0aGUgbGF0dGVyCisjIGlzIHByZWZlcmFibGU7IHNvbWVvbmUgbWlnaHQgd2FudCB0byBoYW5kbGUgaXQgaW4gdGhlIGZ1dHVyZSkuICBJZiB5b3UgZG8KKyMgdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSB0cmVhdGVkIGFzIHVua25vd24gYW5kIHJhaXNlIGEgd2FybmluZyBmcm9tCisjIHRoZSBjb21waWxlci4KKyMKKyMgMi4gQWxpYXMgaXQuICBUaGlzIGlzIGFwcHJvcHJpYXRlIGlmIHRoZSBjYXBhYmlsaXR5IGhhcyB0aGUgc2FtZSBtZWFuaW5nCisjIGFzIGFuIGFscmVhZHktc3VwcG9ydGVkIG9uZS4gIFRoZSBjb21waWxlciB3aWxsIGhhbmRsZSBhbGlhc2luZywgZW1pdHRpbmcKKyMgYW4gYXBwcm9wcmlhdGUgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdoZW5ldmVyIGFuIGFsaWFzIGZpcmVzLgorIworIyAzLiBMaXN0IGl0IGluIHRoZSBzdGFuZGFyZCB0YWJsZS4gIFlvdSBhbG1vc3QgY2VydGFpbmx5IGRvICpub3QqIHdhbnQKKyMgdG8gZG8gdGhpcyAtLSB0aGUgY2FwYWJpbGl0aWVzIGluIHRoYXQgb25lLCBhbmQgdGhlaXIgb3JkZXIsIGhhdmUgYmVlbgorIyBjYXJlZnVsbHkgY2hvc2VuIHRvIGJlIFNWcjQtYmluYXJ5LWNvbXBhdGlibGUgd2hlbiB0aGV5J3JlIHdyaXR0ZW4gb3V0CisjIGFzIGEgdGVybWluZm8gb2JqZWN0LCBhbmQgYnJlYWtpbmcgdGhpcyB3b3VsZCBiZSBiYWQuICBJdCdzIHVwIHRoZSBuY3Vyc2VzCisjIGxpYnJhcnkgd2hhdCB0byBkbyB3aXRoIHRoZSB0ZXJtaW5mbyBkYXRhIGFmdGVyIGl0J3MgcmVhZCBpbi4KKyMKKyMgNC4gTGlzdCBpdCBpbiB0aGUgYWxpYXNlcyB0YWJsZSB3aXRoIGFuIElHTk9SRSB0YXJnZXQgZmllbGQuICBJZiB5b3UKKyMgZG8gdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkIG9uIGlucHV0ICh0aG91Z2ggdGhlIHVzZXIgd2lsbAorIyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgaXQpLgorIworIyA1LiBMaXN0IGl0IGluIHRoZSBleHRlbnNpb25zIHRhYmxlLiBJZiB5b3UgZG8gdGhpcywgdGhlIGNvbXBpbGVyIHdpbGwKKyMgc2lsZW50bHkgYWNjZXB0IHRoZSBjYXBhYmlsaXR5LCBidXQgdGhlIGN1cnNlcyBsaWJyYXJ5IHByb3BlciB3aWxsIG5ldmVyCisjIHNlZSBpdCAoYmVjYXVzZSBpdCB3b24ndCBiZSB3cml0dGVuIG91dCBhcyBwYXJ0IG9mIHRoZSB0ZXJtaW5mbyBvYmplY3QKKyMgZm9ybWF0KS4gIEl0J3MgdXAgdG8geW91IHdoYXQgeW91IGhhdmUgdGhlIGNvbXBpbGVyIGRvIHdpdGggaXQuCisjCisjIFRoZXJlIGFyZSB0d28gb3Bwb3NpdGUgcmVhc29ucyB0byBjaG9vc2Ugb3B0aW9uIDUuICBPbmUgaXMgd2hlbiB5b3Ugd2FudAorIyB0byBlYXQgdGhlIGNhcGFiaWxpdHkgc2lsZW50bHkgYW5kIGRpc2NhcmQgaXQgd2hlbiBkb2luZyB0cmFuc2xhdGlvbnMKKyMgdG8gdGVybWluZm8gd2l0aCB0aWMgLUkuICBTb21lIHZlcnkgb2xkIG9ic29sZXRlIEJTRCBjYXBzIGxpa2UgOmtuOiBhcmUKKyMgaW4gdGhpcyBjbGFzcy4gIE5vdGhpbmcgd2lsbCBldmVyIHVzZSB0aGVtIGFnYWluLgorIworIyBNb3JlIHVzdWFsbHksIHlvdSB3YW50IHRoZSBjb21waWxlciB0byB0cnkgdG8gZGVkdWNlIHNvbWV0aGluZyBmcm9tIHRoZQorIyBjYXBhYmlsaXR5IHZhbHVlIHRoYXQgaXQgY2FuIHVzZSB0byB0cmFuc2xhdGUgaXQgaW50byB5b3VyIG91dHB1dCBmb3JtYXQuCisjIFlvdSdsbCBuZWVkIHRvIHdyaXRlIGN1c3RvbSBjb2RlLCBwcm9iYWJseSBpbiBwb3N0cHJvY2Vzc190ZXJtY2FwKCkgb3IKKyMgcG9zdHByb2Nlc3NfdGVybWluZm8oKSwgdG8gaGFuZGxlIHRoZSB0cmFuc2xhdGlvbi4KKyMKKyMgQ09OVFJPTExJTkcgRU5UUlkgTEVOR1RIIAorIworIyBOb3RlcyBvbiBzcGVjaWZpYyBlbGlzaW9ucyBtYWRlIHRvIGZpdCB0cmFuc2xhdGlvbnMgd2l0aGluIDEwMjMgYnl0ZXM6CisjCisjIE1hY2hpbmVzIHdpdGggSUJNIFBDLWxpa2Uga2V5Ym9hcmRzIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZworIyBrZXlzOiBrZXlfbnBhZ2UsIGtleV9wcGFnZSwga2V5X2hvbWUsIGtleV9sbCAod2hpY2ggaXMgdXNlZCBmb3IgaW4gdGVybWNhcC0KKyMgb25seSBlbnZpcm9ubWVudHMgZm9yIEVuZCBvciBIb21lLURvd24pLCBrZXlfZGMsIGFuZCBrZXlfaWMuICBUaGlzIGlzIGFsc28KKyMgdGhlIHNldCBvZiBrZXlzIHRoZSBgam9lJyBlZGl0b3Igd2lsbCBiZSB1cHNldCBpZiBpdCBjYW4ndCBzZWUuICBTbyBkb24ndCAKKyMgdHJpbSB0aG9zZSBvdXQgb2YgdGhlIHNldCB0byBiZSB0cmFuc2xhdGVkIHRvIHRlcm1jYXAsIG9yIHZhcmlvdXMgdXNlcnMgb2YKKyMgdGhlIHRlcm1jYXAgZmlsZSB3aWxsIGJlY29tZSBpcmF0ZS4KKyMKKyMgSXQgbWlnaHQgbG9vayB0ZW1wdGluZyB0byBsZWF2ZSB0aG9zZSBsb25nIGluaXQgc3RyaW5ncyBvdXQgb2YgdHJhbnNsYXRpb25zLgorIyBXZSBjYW4ndCBkbyBpdCAoeWV0KTsgNC40QlNEIHRwdXQgYW5kIHRzZXQgdXNlIHRoZW0uCisjCisjIFdlIHJldGFpbiB0aGUgc2dyIGNhcGFiaWxpdHkgaW4gdHJhbnNsYXRpb24gaW4gc3BpdGUgb2YgdGhlIGZhY3QgdGhhdCBuZWl0aGVyCisjIDQuNEJTRCBub3IgR05VIEVtYWNzIHVzZXMgaXQsIGJlY2F1c2UgKGEpIHNvbWUgZW50cnkgbmFtaW5nIGRpc3RpbmN0aW9ucyBhcmUKKyMgaGFyZCB0byB1bmRlcnN0YW5kIHdpdGhvdXQgaXQsIGFuZCAoYikgdGhlIGVudHJpZXMgaW4gd2hpY2ggaXQgaXMgbG9uZyB0ZW5kCisjIHRvIGJlIG9sZGVyIHR5cGVzIHRoYXQgZG9uJ3QgdXNlIHVwIGEgbG90IG9mIHN0cmluZyBzcGFjZSBvbiBmdW5jdGlvbiBrZXlzLgorIyBUaGUgdGljKDEpIHRyYW5zbGF0aW9uIGNvZGUgd2lsbCBjb21wbGFpbiBhbmQgZWxpZGUgaXQgaWYgaXQgbWFrZXMgYSBjcml0aWNhbAorIyBkaWZmZXJlbmNlICh0aGVyZSBpcyBzcGVjaWFsIGNvZGUgaW4gdGljIHRvIHJlY29nbml6ZSB0aGlzIHNpdHVhdGlvbikuCisjCisjIFllcywgQlNEIHRzZXQoMSkgdXNlcyBocGEuICBXZSBlbGlkZSBocGEvdnBhIGFueXdheSBiZWNhdXNlIHRoZSBtb3Rpb24KKyMgb3B0aW1pemVyIGluIEJTRCBjdXJzZXMgZGlkbid0IHVzZSB0aGVtLiAgVGhpcyBvbWlzc2lvbiBzZWVtcyB0byBiZSB0aGUKKyMgc2luZ2xlIG1vc3QgZWZmZWN0aXZlIG9uZSwgaXQgc2hvcnRlbmVkIHRoZSByZXNvbHZlZCBsZW5ndGggb2YgYWxsIHRoaXJ0ZWVuCisjIHByb2JsZW0gZW50cmllcyBpbiB0aGUgOS45LjAgdmVyc2lvbiBvZiB0aGUgdGVybWluZm8gbWFzdGVyIGJlbG93IGNyaXRpY2FsLgorIworIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGtlZXAgZjExIGFuZCBmMTIgZm9yIEVtYWNzIHVzZSwgYnV0IGEgY291cGxlIG9mIHRlcm1jYXAKKyMgdHJhbnNsYXRpb25zIGdvIGJhY2sgb3ZlciBjcml0aWNhbCBpZiB3ZSBkbyB0aGlzLiAgQXMgNC40QlNEIGN1cnNlcyBmYWRlcworIyBpbnRvIGhpc3RvcnkgYW5kIEdOVSB0ZXJtY2FwJ3MgYXBwbGljYXRpb24gYmFzZSBzaHJpbmtzIHRvd2FyZHMgYmVpbmcgR05VIAorIyBFbWFjcyBvbmx5LCB3ZSdsbCBwcm9iYWJseSBlbGlkZSBvdXQgc29tZSBCU0Qtb25seSBjYXBhYmlsaXRpZXMgaW4gb3JkZXIKKyMgdG8gYnV5IHNwYWNlIGZvciBub24tZXNzZW50aWFscyBFbWFjcyBpcyBzdGlsbCB1c2luZy4gIENhcGFiaWxpdGllcyBoaWdoCisjIG9uIHRoYXQgaGl0IGxpc3Q6IHJjLCBzYywgdWMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBTVEFOREFSRCBDQVBBQklMSVRJRVMKKyMKKyMlVGhlIGZvbGxvd2luZyBpcyBhIGNvbXBsZXRlIHRhYmxlIG9mIHRoZSBjYXBhYmlsaXRpZXMgaW5jbHVkZWQgaW4gYQorIyV0ZXJtaW5mbyBkZXNjcmlwdGlvbiBibG9jayBhbmQgYXZhaWxhYmxlIHRvIHRlcm1pbmZvLXVzaW5nIGNvZGUuICBJbiBlYWNoCisjJWxpbmUgb2YgdGhlIHRhYmxlLAorIyUKKyMlVGhlIFxmQnZhcmlhYmxlXGZSIGlzIHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBwcm9ncmFtbWVyIChhdCB0aGUgdGVybWluZm8gbGV2ZWwpCisjJWFjY2Vzc2VzIHRoZSBjYXBhYmlsaXR5LgorIyUKKyMlVGhlIFxmQmNhcG5hbWVcZlIgaXMgdGhlIHNob3J0IG5hbWUgdXNlZCBpbiB0aGUgdGV4dCBvZiB0aGUgZGF0YWJhc2UsCisjJWFuZCBpcyB1c2VkIGJ5IGEgcGVyc29uIHVwZGF0aW5nIHRoZSBkYXRhYmFzZS4KKyMlV2hlbmV2ZXIgcG9zc2libGUsIGNhcG5hbWVzIGFyZSBjaG9zZW4gdG8gYmUgdGhlIHNhbWUgYXMgb3Igc2ltaWxhciB0bworIyV0aGUgQU5TSSBYMy42NC0xOTc5IHN0YW5kYXJkIChub3cgc3VwZXJzZWRlZCBieSBFQ01BLTQ4LCB3aGljaCB1c2VzIAorIyVpZGVudGljYWwgb3IgdmVyeSBzaW1pbGFyIG5hbWVzKS4gIFNlbWFudGljcyBhcmUgYWxzbyBpbnRlbmRlZCB0byBtYXRjaAorIyV0aG9zZSBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKyMlCisjJVRoZSB0ZXJtY2FwIGNvZGUgaXMgdGhlIG9sZAorIyUuQiB0ZXJtY2FwCisjJWNhcGFiaWxpdHkgbmFtZSAoc29tZSBjYXBhYmlsaXRpZXMgYXJlIG5ldywgYW5kIGhhdmUgbmFtZXMgd2hpY2ggdGVybWNhcAorIyVkaWQgbm90IG9yaWdpbmF0ZSkuCisjJS5QCisjJUNhcGFiaWxpdHkgbmFtZXMgaGF2ZSBubyBoYXJkIGxlbmd0aCBsaW1pdCwgYnV0IGFuIGluZm9ybWFsIGxpbWl0IG9mIDUKKyMlY2hhcmFjdGVycyBoYXMgYmVlbiBhZG9wdGVkIHRvIGtlZXAgdGhlbSBzaG9ydCBhbmQgdG8gYWxsb3cgdGhlIHRhYnMgaW4KKyMldGhlIHNvdXJjZSBmaWxlCisjJS5CIENhcHMKKyMldG8gbGluZSB1cCBuaWNlbHkuCisjJQorIyVGaW5hbGx5LCB0aGUgZGVzY3JpcHRpb24gZmllbGQgYXR0ZW1wdHMgdG8gY29udmV5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlCisjJWNhcGFiaWxpdHkuICBZb3UgbWF5IGZpbmQgc29tZSBjb2RlcyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQ6CisjJS5UUAorIyUoUCkKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgYmUgc3BlY2lmaWVkCisjJS5UUAorIyUjWzEtOV0KKyMlaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRocm91Z2ggdHBhcm0gd2l0aAorIyVwYXJtcyBhcyBnaXZlbiAoI1xmSWlcZlApLgorIyUuVFAKKyMlKFAqKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSB2YXJ5IGluIHByb3BvcnRpb24gdG8gdGhlIG51bWJlciBvZgorIyVsaW5lcyBhZmZlY3RlZAorIyUuVFAKKyMlKCNcZFxmSWlcZlBcdSkKKyMlaW5kaWNhdGVzIHRoZSBcZklpXGZQXHV0aFxkIHBhcmFtZXRlci4KKyMlCisjJS5QUAorIyUgVGhlc2UgYXJlIHRoZSBib29sZWFuIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJCb29sZWFucwluYW1lCUNvZGVcZlIKK2F1dG9fbGVmdF9tYXJnaW4JCWJ3CWJvb2wJYncJLQktCVlCLUctCWN1YjEgd3JhcHMgZnJvbSBjb2x1bW4gMCB0byBsYXN0IGNvbHVtbgorYXV0b19yaWdodF9tYXJnaW4JCWFtCWJvb2wJYW0JLQktCVlCQ0dFCXRlcm1pbmFsIGhhcyBhdXRvbWF0aWMgbWFyZ2lucworbm9fZXNjX2N0bGMJCQl4c2IJYm9vbAl4YgktCS0JWUJDRy0JYmVlaGl2ZSAoZjE9ZXNjYXBlLCBmMj1jdHJsIEMpCitjZW9sX3N0YW5kb3V0X2dsaXRjaAkJeGhwCWJvb2wJeHMJLQktCVlCQ0dFCXN0YW5kb3V0IG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcgKGhwKQorZWF0X25ld2xpbmVfZ2xpdGNoCQl4ZW5sCWJvb2wJeG4JLQktCVlCQ0dFCW5ld2xpbmUgaWdub3JlZCBhZnRlciA4MCBjb2xzIChjb25jZXB0KQorZXJhc2Vfb3ZlcnN0cmlrZQkJZW8JYm9vbAllbwktCS0JWUJDRy0JY2FuIGVyYXNlIG92ZXJzdHJpa2VzIHdpdGggYSBibGFuaworZ2VuZXJpY190eXBlCQkJZ24JYm9vbAlnbgktCS0JWUItRy0JZ2VuZXJpYyBsaW5lIHR5cGUKK2hhcmRfY29weQkJCWhjCWJvb2wJaGMJLQktCVlCQ0ctCWhhcmRjb3B5IHRlcm1pbmFsCitoYXNfbWV0YV9rZXkJCQlrbQlib29sCWttCS0JLQlZQi1HRQlIYXMgYSBtZXRhIGtleSAoaS5lLiwgc2V0cyA4dGgtYml0KQoraGFzX3N0YXR1c19saW5lCQkJaHMJYm9vbAlocwktCS0JWUItRy0JaGFzIGV4dHJhIHN0YXR1cyBsaW5lCitpbnNlcnRfbnVsbF9nbGl0Y2gJCWluCWJvb2wJaW4JLQktCVlCQ0dFCWluc2VydCBtb2RlIGRpc3Rpbmd1aXNoZXMgbnVsbHMKK21lbW9yeV9hYm92ZQkJCWRhCWJvb2wJZGEJLQktCVlCQ0ctCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGFib3ZlIHRoZSBzY3JlZW4KK21lbW9yeV9iZWxvdwkJCWRiCWJvb2wJZGIJLQktCVlCLUdFCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGJlbG93IHRoZSBzY3JlZW4KK21vdmVfaW5zZXJ0X21vZGUJCW1pcglib29sCW1pCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gaW5zZXJ0IG1vZGUKK21vdmVfc3RhbmRvdXRfbW9kZQkJbXNncglib29sCW1zCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gc3RhbmRvdXQgbW9kZQorb3Zlcl9zdHJpa2UJCQlvcwlib29sCW9zCS0JLQlZQkNHLQl0ZXJtaW5hbCBjYW4gb3ZlcnN0cmlrZQorc3RhdHVzX2xpbmVfZXNjX29rCQllc2xvawlib29sCWVzCS0JLQlZQi1HLQllc2NhcGUgY2FuIGJlIHVzZWQgb24gdGhlIHN0YXR1cyBsaW5lCitkZXN0X3RhYnNfbWFnaWNfc21zbwkJeHQJYm9vbAl4dAktCS0JWUJDR0UJdGFicyBkZXN0cnVjdGl2ZSwgbWFnaWMgc28gY2hhciAodDEwNjEpCit0aWxkZV9nbGl0Y2gJCQloeglib29sCWh6CS0JLQlZQi1HRQljYW5ub3QgcHJpbnQgfidzIChoYXplbHRpbmUpCit0cmFuc3BhcmVudF91bmRlcmxpbmUJCXVsCWJvb2wJdWwJLQktCVlCQ0dFCXVuZGVybGluZSBjaGFyYWN0ZXIgb3ZlcnN0cmlrZXMKK3hvbl94b2ZmCQkJeG9uCWJvb2wJeG8JLQktCVlCLS0tCXRlcm1pbmFsIHVzZXMgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK25lZWRzX3hvbl94b2ZmCQkJbnhvbglib29sCW54CS0JLQktLS0tLQlwYWRkaW5nIHdpbGwgbm90IHdvcmssIHhvbi94b2ZmIHJlcXVpcmVkCitwcnRyX3NpbGVudAkJCW1jNWkJYm9vbAk1aQktCS0JLS0tLS0JcHJpbnRlciB3aWxsIG5vdCBlY2hvIG9uIHNjcmVlbgoraGFyZF9jdXJzb3IJCQljaHRzCWJvb2wJSEMJLQktCS0tLS0tCWN1cnNvciBpcyBoYXJkIHRvIHNlZQorbm9uX3Jldl9ybWN1cAkJCW5ycm1jCWJvb2wJTlIJLQktCS0tLS0tCXNtY3VwIGRvZXMgbm90IHJldmVyc2Ugcm1jdXAKK25vX3BhZF9jaGFyCQkJbnBjCWJvb2wJTlAJLQktCS0tLS0tCXBhZCBjaGFyYWN0ZXIgZG9lcyBub3QgZXhpc3QKK25vbl9kZXN0X3Njcm9sbF9yZWdpb24JCW5kc2NyCWJvb2wJTkQJLQktCS0tLS0tCXNjcm9sbGluZyByZWdpb24gaXMgbm9uLWRlc3RydWN0aXZlCitjYW5fY2hhbmdlCQkJY2NjCWJvb2wJY2MJLQktCS0tLS0tCXRlcm1pbmFsIGNhbiByZS1kZWZpbmUgZXhpc3RpbmcgY29sb3JzCitiYWNrX2NvbG9yX2VyYXNlCQliY2UJYm9vbAl1dAktCS0JLS0tLS0Jc2NyZWVuIGVyYXNlZCB3aXRoIGJhY2tncm91bmQgY29sb3IKK2h1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbglobHMJYm9vbAlobAktCS0JLS0tLS0JdGVybWluYWwgdXNlcyBvbmx5IEhMUyBjb2xvciBub3RhdGlvbiAoVGVrdHJvbml4KQorY29sX2FkZHJfZ2xpdGNoCQkJeGhwYQlib29sCVlBCS0JLQktLS0tLQlvbmx5IHBvc2l0aXZlIG1vdGlvbiBmb3IgaHBhL21ocGEgY2FwcworY3JfY2FuY2Vsc19taWNyb19tb2RlCQljcnhtCWJvb2wJWUIJLQktCS0tLS0tCXVzaW5nIGNyIHR1cm5zIG9mZiBtaWNybyBtb2RlCitoYXNfcHJpbnRfd2hlZWwJCQlkYWlzeQlib29sCVlDCS0JLQktLS0tLQlwcmludGVyIG5lZWRzIG9wZXJhdG9yIHRvIGNoYW5nZSBjaGFyYWN0ZXIgc2V0Cityb3dfYWRkcl9nbGl0Y2gJCQl4dnBhCWJvb2wJWUQJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciB2cGEvbXZwYSBjYXBzCitzZW1pX2F1dG9fcmlnaHRfbWFyZ2luCQlzYW0JYm9vbAlZRQktCS0JLS0tLS0JcHJpbnRpbmcgaW4gbGFzdCBjb2x1bW4gY2F1c2VzIGNyCitjcGlfY2hhbmdlc19yZXMJCQljcGl4CWJvb2wJWUYJLQktCS0tLS0tCWNoYW5naW5nIGNoYXJhY3RlciBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KK2xwaV9jaGFuZ2VzX3JlcwkJCWxwaXgJYm9vbAlZRwktCS0JLS0tLS0JY2hhbmdpbmcgbGluZSBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBudW1lcmljIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorY29sdW1ucwkJCQljb2xzCW51bQljbwktCS0JWUJDR0UJbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBsaW5lCitpbml0X3RhYnMJCQlpdAludW0JaXQJLQktCVlCLUctCXRhYnMgaW5pdGlhbGx5IGV2ZXJ5ICMgc3BhY2VzCitsaW5lcwkJCQlsaW5lcwludW0JbGkJLQktCVlCQ0dFCW51bWJlciBvZiBsaW5lcyBvbiBzY3JlZW4gb3IgcGFnZQorbGluZXNfb2ZfbWVtb3J5CQkJbG0JbnVtCWxtCS0JLQlZQi1HLQlsaW5lcyBvZiBtZW1vcnkgaWYgPiBsaW5lLiAwIG1lYW5zIHZhcmllcworbWFnaWNfY29va2llX2dsaXRjaAkJeG1jCW51bQlzZwktCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rIGNoYXJhY3RlcnMgbGVmdCBieSBzbXNvIG9yIHJtc28KK3BhZGRpbmdfYmF1ZF9yYXRlCQlwYgludW0JcGIJLQktCVlCLUdFCWxvd2VzdCBiYXVkIHJhdGUgd2hlcmUgcGFkZGluZyBuZWVkZWQKK3ZpcnR1YWxfdGVybWluYWwJCXZ0CW51bQl2dAktCS0JWUItLS0JdmlydHVhbCB0ZXJtaW5hbCBudW1iZXIgKENCL3VuaXgpCit3aWR0aF9zdGF0dXNfbGluZQkJd3NsCW51bQl3cwktCS0JWUItRy0JbnVtYmVyIG9mIGNvbHVtbnMgaW4gc3RhdHVzIGxpbmUKK251bV9sYWJlbHMJCQlubGFiCW51bQlObAktCS0JLS0tLS0JbnVtYmVyIG9mIGxhYmVscyBvbiBzY3JlZW4KK2xhYmVsX2hlaWdodAkJCWxoCW51bQlsaAktCS0JLS0tLS0Jcm93cyBpbiBlYWNoIGxhYmVsCitsYWJlbF93aWR0aAkJCWx3CW51bQlsdwktCS0JLS0tLS0JY29sdW1ucyBpbiBlYWNoIGxhYmVsCittYXhfYXR0cmlidXRlcwkJCW1hCW51bQltYQktCS0JWUJDLS0JbWF4aW11bSBjb21iaW5lZCBhdHRyaWJ1dGVzIHRlcm1pbmFsIGNhbiBoYW5kbGUKK21heGltdW1fd2luZG93cwkJCXdudW0JbnVtCU1XCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBkZWZpbmVhYmxlIHdpbmRvd3MKKyMgVGhlc2UgY2FtZSBpbiB3aXRoIFNWcjQncyBjb2xvciBzdXBwb3J0CittYXhfY29sb3JzCQkJY29sb3JzCW51bQlDbwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIG9uIHNjcmVlbgorbWF4X3BhaXJzCQkJcGFpcnMJbnVtCXBhCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvci1wYWlycyBvbiB0aGUgc2NyZWVuCitub19jb2xvcl92aWRlbwkJCW5jdgludW0JTkMJLQktCS0tLS0tCXZpZGVvIGF0dHJpYnV0ZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCB3aXRoIGNvbG9ycworIyUuVEUKKyMlLmFkCisjJQorIyVUaGUgZm9sbG93aW5nIG51bWVyaWMgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCBhcmUgbm90IHlldCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4gIFRoZXkgY2FtZSBpbiB3aXRoIFNWcjQncworIyVwcmludGVyIHN1cHBvcnQuCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCTnVtZXJpYwluYW1lCUNvZGVcZlIKK2J1ZmZlcl9jYXBhY2l0eQkJCWJ1ZnN6CW51bQlZYQktCS0JLS0tLS0JbnVtYmVycyBvZiBieXRlcyBidWZmZXJlZCBiZWZvcmUgcHJpbnRpbmcKK2RvdF92ZXJ0X3NwYWNpbmcJCXNwaW52CW51bQlZYgktCS0JLS0tLS0Jc3BhY2luZyBvZiBwaW5zIHZlcnRpY2FsbHkgaW4gcGlucyBwZXIgaW5jaAorZG90X2hvcnpfc3BhY2luZwkJc3BpbmgJbnVtCVljCS0JLQktLS0tLQlzcGFjaW5nIG9mIGRvdHMgaG9yaXpvbnRhbGx5IGluIGRvdHMgcGVyIGluY2gKK21heF9taWNyb19hZGRyZXNzCQltYWRkcgludW0JWWQJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gbWljcm9fLi4uX2FkZHJlc3MKK21heF9taWNyb19qdW1wCQkJbWp1bXAJbnVtCVllCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIHBhcm1fLi4uX21pY3JvCittaWNyb19jb2xfc2l6ZQkJCW1jcwludW0JWWYJLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBtaWNybyBtb2RlCittaWNyb19saW5lX3NpemUJCQltbHMJbnVtCVlnCS0JLQktLS0tLQlsaW5lIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK251bWJlcl9vZl9waW5zCQkJbnBpbnMJbnVtCVloCS0JLQktLS0tLQludW1iZXJzIG9mIHBpbnMgaW4gcHJpbnQtaGVhZAorb3V0cHV0X3Jlc19jaGFyCQkJb3JjCW51bQlZaQktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBsaW5lCitvdXRwdXRfcmVzX2xpbmUJCQlvcmwJbnVtCVlqCS0JLQktLS0tLQl2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBsaW5lCitvdXRwdXRfcmVzX2hvcnpfaW5jaAkJb3JoaQludW0JWWsJLQktCS0tLS0tCWhvcml6b250YWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgaW5jaAorb3V0cHV0X3Jlc192ZXJ0X2luY2gJCW9ydmkJbnVtCVlsCS0JLQktLS0tLQl2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitwcmludF9yYXRlCQkJY3BzCW51bQlZbQktCS0JLS0tLS0JcHJpbnQgcmF0ZSBpbiBjaGFyYWN0ZXJzIHBlciBzZWNvbmQKK3dpZGVfY2hhcl9zaXplCQkJd2lkY3MJbnVtCVluCS0JLQktLS0tLQljaGFyYWN0ZXIgc3RlcCBzaXplIHdoZW4gaW4gZG91YmxlIHdpZGUgbW9kZQorYnV0dG9ucwkJCQlidG5zCW51bQlCVAktCS0JLS0tLS0JbnVtYmVyIG9mIGJ1dHRvbnMgb24gbW91c2UKK2JpdF9pbWFnZV9lbnR3aW5pbmcJCWJpdHdpbgludW0JWW8JLQktCS0tLS0tCW51bWJlciBvZiBwYXNzZXMgZm9yIGVhY2ggYml0LWltYWdlIHJvdworYml0X2ltYWdlX3R5cGUJCQliaXR5cGUJbnVtCVlwCS0JLQktLS0tLQl0eXBlIG9mIGJpdC1pbWFnZSBkZXZpY2UKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2JhY2tfdGFiCQkJY2J0CXN0cglidAktCQktCVlCQ0dFCWJhY2sgdGFiIChQKQorYmVsbAkJCQliZWwJc3RyCWJsCS0JCS0JWUItR0UJYXVkaWJsZSBzaWduYWwgKGJlbGwpIChQKQorY2FycmlhZ2VfcmV0dXJuCQkJY3IJc3RyCWNyCS0JCS0JWUJDR0UJY2FycmlhZ2UgcmV0dXJuIChQKikgKFAqKQorY2hhbmdlX3Njcm9sbF9yZWdpb24JCWNzcglzdHIJY3MJLQkJLQlZQkNHRQljaGFuZ2UgcmVnaW9uIHRvIGxpbmUgIzEgdG8gbGluZSAjMiAoUCkKK2NsZWFyX2FsbF90YWJzCQkJdGJjCXN0cgljdAktCQktCVlCLUctCWNsZWFyIGFsbCB0YWIgc3RvcHMgKFApCitjbGVhcl9zY3JlZW4JCQljbGVhcglzdHIJY2wJLQkJLQlZQkNHRQljbGVhciBzY3JlZW4gYW5kIGhvbWUgY3Vyc29yIChQKikKK2Nscl9lb2wJCQkJZWwJc3RyCWNlCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIGxpbmUgKFApCitjbHJfZW9zCQkJCWVkCXN0cgljZAktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBzY3JlZW4gKFAqKQorY29sdW1uX2FkZHJlc3MJCQlocGEJc3RyCWNoCS0JCS0JLUItR0UqCWhvcml6b250YWwgcG9zaXRpb24gIzEsIGFic29sdXRlIChQKQorY29tbWFuZF9jaGFyYWN0ZXIJCWNtZGNoCXN0cglDQwktCQktCVlCLUctCXRlcm1pbmFsIHNldHRhYmxlIGNtZCBjaGFyYWN0ZXIgaW4gcHJvdG90eXBlICE/CitjdXJzb3JfYWRkcmVzcwkJCWN1cAlzdHIJY20JLQkJLQlZQkNHRQltb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3JfZG93bgkJCWN1ZDEJc3RyCWRvCS0JCS0JWUJDR0UJZG93biBvbmUgbGluZQorY3Vyc29yX2hvbWUJCQlob21lCXN0cglobwktCQktCVlCQ0dFCWhvbWUgY3Vyc29yIChpZiBubyBjdXApCitjdXJzb3JfaW52aXNpYmxlCQljaXZpcwlzdHIJdmkJLQkJLQlZQi1HLQltYWtlIGN1cnNvciBpbnZpc2libGUKK2N1cnNvcl9sZWZ0CQkJY3ViMQlzdHIJbGUJLQkJLQlZQkNHRQltb3ZlIGxlZnQgb25lIHNwYWNlCitjdXJzb3JfbWVtX2FkZHJlc3MJCW1yY3VwCXN0cglDTQktCQktCVlCLUctCW1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywgbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX25vcm1hbAkJCWNub3JtCXN0cgl2ZQktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIGFwcGVhciBub3JtYWwgKHVuZG8gY2l2aXMvY3Z2aXMpCitjdXJzb3JfcmlnaHQJCQljdWYxCXN0cgluZAktCQktCVlCQ0dFCW5vbi1kZXN0cnVjdGl2ZSBzcGFjZSAobW92ZSByaWdodCBvbmUgc3BhY2UpCitjdXJzb3JfdG9fbGwJCQlsbAlzdHIJbGwJLQkJLQlZQkNHRQlsYXN0IGxpbmUsIGZpcnN0IGNvbHVtbiAoaWYgbm8gY3VwKQorY3Vyc29yX3VwCQkJY3V1MQlzdHIJdXAJLQkJLQlZQkNHRQl1cCBvbmUgbGluZQorY3Vyc29yX3Zpc2libGUJCQljdnZpcwlzdHIJdnMJLQkJLQlZQkNHRQltYWtlIGN1cnNvciB2ZXJ5IHZpc2libGUKK2RlbGV0ZV9jaGFyYWN0ZXIJCWRjaDEJc3RyCWRjCS0JCS0JWUJDR0UJZGVsZXRlIGNoYXJhY3RlciAoUCopCitkZWxldGVfbGluZQkJCWRsMQlzdHIJZGwJLQkJLQlZQkNHRQlkZWxldGUgbGluZSAoUCopCitkaXNfc3RhdHVzX2xpbmUJCQlkc2wJc3RyCWRzCS0JCS0JWUItRy0JZGlzYWJsZSBzdGF0dXMgbGluZQorZG93bl9oYWxmX2xpbmUJCQloZAlzdHIJaGQJLQkJLQlZQi1HLQloYWxmIGEgbGluZSBkb3duCitlbnRlcl9hbHRfY2hhcnNldF9tb2RlCQlzbWFjcwlzdHIJYXMJLQkJLQlZQi1HLQlzdGFydCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2VudGVyX2JsaW5rX21vZGUJCWJsaW5rCXN0cgltYgktCQktCVlCLUctCXR1cm4gb24gYmxpbmtpbmcKK2VudGVyX2JvbGRfbW9kZQkJCWJvbGQJc3RyCW1kCS0JCS0JWUItRy0JdHVybiBvbiBib2xkIChleHRyYSBicmlnaHQpIG1vZGUKK2VudGVyX2NhX21vZGUJCQlzbWN1cAlzdHIJdGkJLQkJLQlZQkNHRQlzdHJpbmcgdG8gc3RhcnQgcHJvZ3JhbXMgdXNpbmcgY3VwCitlbnRlcl9kZWxldGVfbW9kZQkJc21kYwlzdHIJZG0JLQkJLQlZQkNHRQllbnRlciBkZWxldGUgbW9kZQorZW50ZXJfZGltX21vZGUJCQlkaW0Jc3RyCW1oCS0JCS0JWUItRy0JdHVybiBvbiBoYWxmLWJyaWdodCBtb2RlCitlbnRlcl9pbnNlcnRfbW9kZQkJc21pcglzdHIJaW0JLQkJLQlZQkNHRQllbnRlciBpbnNlcnQgbW9kZQorZW50ZXJfc2VjdXJlX21vZGUJCWludmlzCXN0cgltawktCQktCS1CLUctKgl0dXJuIG9uIGJsYW5rIG1vZGUgKGNoYXJhY3RlcnMgaW52aXNpYmxlKQorZW50ZXJfcHJvdGVjdGVkX21vZGUJCXByb3QJc3RyCW1wCS0JCS0JLUItRy0qCXR1cm4gb24gcHJvdGVjdGVkIG1vZGUKK2VudGVyX3JldmVyc2VfbW9kZQkJcmV2CXN0cgltcgktCQktCVlCLUctCXR1cm4gb24gcmV2ZXJzZSB2aWRlbyBtb2RlCitlbnRlcl9zdGFuZG91dF9tb2RlCQlzbXNvCXN0cglzbwktCQktCVlCQ0dFCWJlZ2luIHN0YW5kb3V0IG1vZGUKK2VudGVyX3VuZGVybGluZV9tb2RlCQlzbXVsCXN0cgl1cwktCQktCVlCQ0dFCWJlZ2luIHVuZGVybGluZSBtb2RlCitlcmFzZV9jaGFycwkJCWVjaAlzdHIJZWMJLQkJLQlZQi1HLQllcmFzZSAjMSBjaGFyYWN0ZXJzIChQKQorZXhpdF9hbHRfY2hhcnNldF9tb2RlCQlybWFjcwlzdHIJYWUJLQkJLQlZQi1HLQllbmQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitleGl0X2F0dHJpYnV0ZV9tb2RlCQlzZ3IwCXN0cgltZQktCQktCVlCLUdFCXR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzCitleGl0X2NhX21vZGUJCQlybWN1cAlzdHIJdGUJLQkJLQlZQkNHRQlzdHJpbmdzIHRvIGVuZCBwcm9ncmFtcyB1c2luZyBjdXAKK2V4aXRfZGVsZXRlX21vZGUJCXJtZGMJc3RyCWVkCS0JCS0JWUJDR0UJZW5kIGRlbGV0ZSBtb2RlCitleGl0X2luc2VydF9tb2RlCQlybWlyCXN0cgllaQktCQktCVlCQ0dFCWV4aXQgaW5zZXJ0IG1vZGUKK2V4aXRfc3RhbmRvdXRfbW9kZQkJcm1zbwlzdHIJc2UJLQkJLQlZQkNHRQlleGl0IHN0YW5kb3V0IG1vZGUKK2V4aXRfdW5kZXJsaW5lX21vZGUJCXJtdWwJc3RyCXVlCS0JCS0JWUJDR0UJZXhpdCB1bmRlcmxpbmUgbW9kZQorZmxhc2hfc2NyZWVuCQkJZmxhc2gJc3RyCXZiCS0JCS0JWUJDR0UJdmlzaWJsZSBiZWxsIChtYXkgbm90IG1vdmUgY3Vyc29yKQorZm9ybV9mZWVkCQkJZmYJc3RyCWZmCS0JCS0JWUItRy0JaGFyZGNvcHkgdGVybWluYWwgcGFnZSBlamVjdCAoUCopCitmcm9tX3N0YXR1c19saW5lCQlmc2wJc3RyCWZzCS0JCS0JWUItRy0JcmV0dXJuIGZyb20gc3RhdHVzIGxpbmUKK2luaXRfMXN0cmluZwkJCWlzMQlzdHIJaTEJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfMnN0cmluZwkJCWlzMglzdHIJaXMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfM3N0cmluZwkJCWlzMwlzdHIJaTMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfZmlsZQkJCWlmCXN0cglpZgktCQktCVlCLUctCW5hbWUgb2YgaW5pdGlhbGl6YXRpb24gZmlsZQoraW5zZXJ0X2NoYXJhY3RlcgkJaWNoMQlzdHIJaWMJLQkJLQlZQkNHRQlpbnNlcnQgY2hhcmFjdGVyIChQKQoraW5zZXJ0X2xpbmUJCQlpbDEJc3RyCWFsCS0JCS0JWUJDR0UJaW5zZXJ0IGxpbmUgKFAqKQoraW5zZXJ0X3BhZGRpbmcJCQlpcAlzdHIJaXAJLQkJLQlZQkNHRQlpbnNlcnQgcGFkZGluZyBhZnRlciBpbnNlcnRlZCBjaGFyYWN0ZXIKK2tleV9iYWNrc3BhY2UJCQlrYnMJc3RyCWtiCUtFWV9CQUNLU1BBQ0UJMDQwNwlZQi1HLQliYWNrc3BhY2Uga2V5CitrZXlfY2F0YWIJCQlrdGJjCXN0cglrYQlLRVlfQ0FUQUIJMDUyNgktQi1HLSoJY2xlYXItYWxsLXRhYnMga2V5CitrZXlfY2xlYXIJCQlrY2xyCXN0cglrQwlLRVlfQ0xFQVIJMDUxNQktQi1HLSoJY2xlYXItc2NyZWVuIG9yIGVyYXNlIGtleQora2V5X2N0YWIJCQlrY3RhYglzdHIJa3QJS0VZX0NUQUIJMDUyNQktQi1HLSoJY2xlYXItdGFiIGtleQora2V5X2RjCQkJCWtkY2gxCXN0cglrRAlLRVlfREMJCTA1MTIJWUItRy0JZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9kbAkJCQlrZGwxCXN0cglrTAlLRVlfREwJCTA1MTAJLUItRy0qCWRlbGV0ZS1saW5lIGtleQora2V5X2Rvd24JCQlrY3VkMQlzdHIJa2QJS0VZX0RPV04JMDQwMglZQkNHRQlkb3duLWFycm93IGtleQora2V5X2VpYwkJCQlrcm1pcglzdHIJa00JS0VZX0VJQwkJMDUxNAktQi1HLSoJc2VudCBieSBybWlyIG9yIHNtaXIgaW4gaW5zZXJ0IG1vZGUKK2tleV9lb2wJCQkJa2VsCXN0cglrRQlLRVlfRU9MCQkwNTE3CS1CLUctKgljbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9lb3MJCQkJa2VkCXN0cglrUwlLRVlfRU9TCQkwNTE2CS1CLUctKgljbGVhci10by1lbmQtb2Ytc2NyZWVuIGtleQora2V5X2YwCQkJCWtmMAlzdHIJazAJS0VZX0YoMCkJMDQxMAlZQkNHRQlGMCBmdW5jdGlvbiBrZXkKK2tleV9mMQkJCQlrZjEJc3RyCWsxCUtFWV9GKDEpCS0JWUJDR0UJRjEgZnVuY3Rpb24ga2V5CitrZXlfZjEwCQkJCWtmMTAJc3RyCWs7CUtFWV9GKDEwKQktCS0tLS1FCUYxMCBmdW5jdGlvbiBrZXkKK2tleV9mMgkJCQlrZjIJc3RyCWsyCUtFWV9GKDIpCS0JWUJDR0UJRjIgZnVuY3Rpb24ga2V5CitrZXlfZjMJCQkJa2YzCXN0cglrMwlLRVlfRigzKQktCVlCQ0dFCUYzIGZ1bmN0aW9uIGtleQora2V5X2Y0CQkJCWtmNAlzdHIJazQJS0VZX0YoNCkJLQlZQkNHRQlGNCBmdW5jdGlvbiBrZXkKK2tleV9mNQkJCQlrZjUJc3RyCWs1CUtFWV9GKDUpCS0JWUJDR0UJRjUgZnVuY3Rpb24ga2V5CitrZXlfZjYJCQkJa2Y2CXN0cglrNglLRVlfRig2KQktCVlCQ0dFCUY2IGZ1bmN0aW9uIGtleQora2V5X2Y3CQkJCWtmNwlzdHIJazcJS0VZX0YoNykJLQlZQkNHRQlGNyBmdW5jdGlvbiBrZXkKK2tleV9mOAkJCQlrZjgJc3RyCWs4CUtFWV9GKDgpCS0JWUJDR0UJRjggZnVuY3Rpb24ga2V5CitrZXlfZjkJCQkJa2Y5CXN0cglrOQlLRVlfRig5KQktCVlCQ0dFCUY5IGZ1bmN0aW9uIGtleQora2V5X2hvbWUJCQlraG9tZQlzdHIJa2gJS0VZX0hPTUUJMDQwNglZQkNHRQlob21lIGtleQora2V5X2ljCQkJCWtpY2gxCXN0cglrSQlLRVlfSUMJCTA1MTMJWUItR0UJaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9pbAkJCQlraWwxCXN0cglrQQlLRVlfSUwJCTA1MTEJLUItRy0qCWluc2VydC1saW5lIGtleQora2V5X2xlZnQJCQlrY3ViMQlzdHIJa2wJS0VZX0xFRlQJMDQwNAlZQkNHRQlsZWZ0LWFycm93IGtleQora2V5X2xsCQkJCWtsbAlzdHIJa0gJS0VZX0xMCQkwNTMzCVlCLUctCWxvd2VyLWxlZnQga2V5IChob21lIGRvd24pCitrZXlfbnBhZ2UJCQlrbnAJc3RyCWtOCUtFWV9OUEFHRQkwNTIyCVlCLUdFCW5leHQtcGFnZSBrZXkKK2tleV9wcGFnZQkJCWtwcAlzdHIJa1AJS0VZX1BQQUdFCTA1MjMJWUItR0UJcHJldmlvdXMtcGFnZSBrZXkKK2tleV9yaWdodAkJCWtjdWYxCXN0cglrcglLRVlfUklHSFQJMDQwNQlZQkNHRQlyaWdodC1hcnJvdyBrZXkKK2tleV9zZgkJCQlraW5kCXN0cglrRglLRVlfU0YJCTA1MjAJLUItRy0qCXNjcm9sbC1mb3J3YXJkIGtleQora2V5X3NyCQkJCWtyaQlzdHIJa1IJS0VZX1NSCQkwNTIxCS1CLUctKglzY3JvbGwtYmFja3dhcmQga2V5CitrZXlfc3RhYgkJCWtodHMJc3RyCWtUCUtFWV9TVEFCCTA1MjQJLUItRy0qCXNldC10YWIga2V5CitrZXlfdXAJCQkJa2N1dTEJc3RyCWt1CUtFWV9VUAkJMDQwMwlZQkNHRQl1cC1hcnJvdyBrZXkKK2tleXBhZF9sb2NhbAkJCXJta3gJc3RyCWtlCS0JCS0JWUJDR0UJbGVhdmUgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitrZXlwYWRfeG1pdAkJCXNta3gJc3RyCWtzCS0JCS0JWUJDR0UJZW50ZXIgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitsYWJfZjAJCQkJbGYwCXN0cglsMAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjAgaWYgbm90IGYwCitsYWJfZjEJCQkJbGYxCXN0cglsMQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEgaWYgbm90IGYxCitsYWJfZjEwCQkJCWxmMTAJc3RyCWxhCS0JCS0JLS0tLS0JbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxMCBpZiBub3QgZjEwCitsYWJfZjIJCQkJbGYyCXN0cglsMgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjIgaWYgbm90IGYyCitsYWJfZjMJCQkJbGYzCXN0cglsMwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjMgaWYgbm90IGYzCitsYWJfZjQJCQkJbGY0CXN0cglsNAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjQgaWYgbm90IGY0CitsYWJfZjUJCQkJbGY1CXN0cglsNQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjUgaWYgbm90IGY1CitsYWJfZjYJCQkJbGY2CXN0cglsNgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjYgaWYgbm90IGY2CitsYWJfZjcJCQkJbGY3CXN0cglsNwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjcgaWYgbm90IGY3CitsYWJfZjgJCQkJbGY4CXN0cglsOAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjggaWYgbm90IGY4CitsYWJfZjkJCQkJbGY5CXN0cglsOQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjkgaWYgbm90IGY5CittZXRhX29mZgkJCXJtbQlzdHIJbW8JLQkJLQlZQi1HLSoJdHVybiBvZmYgbWV0YSBtb2RlCittZXRhX29uCQkJCXNtbQlzdHIJbW0JLQkJLQlZQi1HLSoJdHVybiBvbiBtZXRhIG1vZGUgKDh0aC1iaXQgb24pCituZXdsaW5lCQkJCW5lbAlzdHIJbncJLQkJLQlZQi1HLSoJbmV3bGluZSAoYmVoYXZlIGxpa2UgY3IgZm9sbG93ZWQgYnkgbGYpCitwYWRfY2hhcgkJCXBhZAlzdHIJcGMJLQkJLQlZQkNHRQlwYWRkaW5nIGNoYXIgKGluc3RlYWQgb2YgbnVsbCkKK3Bhcm1fZGNoCQkJZGNoCXN0cglEQwktCQktCVlCLUdFCWRlbGV0ZSAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1fZGVsZXRlX2xpbmUJCWRsCXN0cglETAktCQktCVlCQ0dFCWRlbGV0ZSAjMSBsaW5lcyAoUCopCitwYXJtX2Rvd25fY3Vyc29yCQljdWQJc3RyCURPCS0JCS0JWUJDR0UJZG93biAjMSBsaW5lcyAoUCopCitwYXJtX2ljaAkJCWljaAlzdHIJSUMJLQkJLQlZQi1HRQlpbnNlcnQgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2luZGV4CQkJaW5kbglzdHIJU0YJLQkJLQlZQkNHLQlzY3JvbGwgZm9yd2FyZCAjMSBsaW5lcyAoUCkKK3Bhcm1faW5zZXJ0X2xpbmUJCWlsCXN0cglBTAktCQktCVlCQ0dFCWluc2VydCAjMSBsaW5lcyAoUCopCitwYXJtX2xlZnRfY3Vyc29yCQljdWIJc3RyCUxFCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IChQKQorcGFybV9yaWdodF9jdXJzb3IJCWN1ZglzdHIJUkkJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IChQKikKK3Bhcm1fcmluZGV4CQkJcmluCXN0cglTUgktCQktCVlCQ0ctCXNjcm9sbCBiYWNrICMxIGxpbmVzIChQKQorcGFybV91cF9jdXJzb3IJCQljdXUJc3RyCVVQCS0JCS0JWUJDR0UJdXAgIzEgbGluZXMgKFAqKQorcGtleV9rZXkJCQlwZmtleQlzdHIJcGsJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMgorcGtleV9sb2NhbAkJCXBmbG9jCXN0cglwbAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIGV4ZWN1dGUgc3RyaW5nICMyCitwa2V5X3htaXQJCQlwZngJc3RyCXB4CS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHJhbnNtaXQgc3RyaW5nICMyCitwcmludF9zY3JlZW4JCQltYzAJc3RyCXBzCS0JCS0JLUItRy0qCXByaW50IGNvbnRlbnRzIG9mIHNjcmVlbgorcHJ0cl9vZmYJCQltYzQJc3RyCXBmCS0JCS0JLUItRy0qCXR1cm4gb2ZmIHByaW50ZXIKK3BydHJfb24JCQkJbWM1CXN0cglwbwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIKK3JlcGVhdF9jaGFyCQkJcmVwCXN0cglycAktCQktCVlCLUdFCXJlcGVhdCBjaGFyICMxICMyIHRpbWVzIChQKikKK3Jlc2V0XzFzdHJpbmcJCQlyczEJc3RyCXIxCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8yc3RyaW5nCQkJcnMyCXN0cglyMgktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfM3N0cmluZwkJCXJzMwlzdHIJcjMJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0X2ZpbGUJCQlyZglzdHIJcmYJLQkJLQktQi0tLQluYW1lIG9mIHJlc2V0IGZpbGUKK3Jlc3RvcmVfY3Vyc29yCQkJcmMJc3RyCXJjCS0JCS0JWUJDRy0JcmVzdG9yZSBjdXJzb3IgdG8gcG9zaXRpb24gb2YgbGFzdCBzYXZlX2N1cnNvcgorcm93X2FkZHJlc3MJCQl2cGEJc3RyCWN2CS0JCS0JLUItR0UqCXZlcnRpY2FsIHBvc2l0aW9uICMxIGFic29sdXRlIChQKQorc2F2ZV9jdXJzb3IJCQlzYwlzdHIJc2MJLQkJLQlZQkNHLQlzYXZlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIChQKQorc2Nyb2xsX2ZvcndhcmQJCQlpbmQJc3RyCXNmCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgdXAgKFApCitzY3JvbGxfcmV2ZXJzZQkJCXJpCXN0cglzcgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IGRvd24gKFApCitzZXRfYXR0cmlidXRlcwkJCXNncglzdHIJc2EJLQkJLQlZQi1HLQlkZWZpbmUgdmlkZW8gYXR0cmlidXRlcyAjMS0jOSAoUEc5KQorc2V0X3RhYgkJCQlodHMJc3RyCXN0CS0JCS0JWUItRy0Jc2V0IGEgdGFiIGluIGV2ZXJ5IHJvdywgY3VycmVudCBjb2x1bW5zCitzZXRfd2luZG93CQkJd2luZAlzdHIJd2kJLQkJLQktQi1HRQljdXJyZW50IHdpbmRvdyBpcyBsaW5lcyAjMS0jMiBjb2xzICMzLSM0Cit0YWIJCQkJaHQJc3RyCXRhCS0JCS0JWUJDR0UJdGFiIHRvIG5leHQgOC1zcGFjZSBoYXJkd2FyZSB0YWIgc3RvcAordG9fc3RhdHVzX2xpbmUJCQl0c2wJc3RyCXRzCS0JCS0JWUItRy0JbW92ZSB0byBzdGF0dXMgbGluZSwgY29sdW1uICMxCit1bmRlcmxpbmVfY2hhcgkJCXVjCXN0cgl1YwktCQktCVlCQ0ctCXVuZGVybGluZSBjaGFyIGFuZCBtb3ZlIHBhc3QgaXQKK3VwX2hhbGZfbGluZQkJCWh1CXN0cglodQktCQktCVlCLUctCWhhbGYgYSBsaW5lIHVwCitpbml0X3Byb2cJCQlpcHJvZwlzdHIJaVAJLQkJLQktQi0tLQlwYXRoIG5hbWUgb2YgcHJvZ3JhbSBmb3IgaW5pdGlhbGl6YXRpb24KK2tleV9hMQkJCQlrYTEJc3RyCUsxCUtFWV9BMQkJMDUzNAlZQi1HRQl1cHBlciBsZWZ0IG9mIGtleXBhZAora2V5X2EzCQkJCWthMwlzdHIJSzMJS0VZX0EzCQkwNTM1CVlCLUdFCXVwcGVyIHJpZ2h0IG9mIGtleXBhZAora2V5X2IyCQkJCWtiMglzdHIJSzIJS0VZX0IyCQkwNTM2CVlCLUdFCWNlbnRlciBvZiBrZXlwYWQKK2tleV9jMQkJCQlrYzEJc3RyCUs0CUtFWV9DMQkJMDUzNwlZQi1HRQlsb3dlciBsZWZ0IG9mIGtleXBhZAora2V5X2MzCQkJCWtjMwlzdHIJSzUJS0VZX0MzCQkwNTQwCVlCLUdFCWxvd2VyIHJpZ2h0IG9mIGtleXBhZAorcHJ0cl9ub24JCQltYzVwCXN0cglwTwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIgZm9yICMxIGJ5dGVzCisjCisjIFNWcjEgY2FwYWJpbGl0aWVzIHN0b3AgaGVyZS4JSUJNJ3MgdmVyc2lvbiBvZiB0ZXJtaW5mbyBpcyB0aGUgc2FtZSBhcworIyBTVnI0IHVwIHRvIHRoaXMgcG9pbnQsIGJ1dCBoYXMgYSBkaWZmZXJlbnQgc2V0IGFmdGVyd2FyZHMuCisjCitjaGFyX3BhZGRpbmcJCQlybXAJc3RyCXJQCS0JCS0JLS0tLS0JbGlrZSBpcCBidXQgd2hlbiBpbiBpbnNlcnQgbW9kZQorYWNzX2NoYXJzCQkJYWNzYwlzdHIJYWMJLQkJLQktLS0tLQlncmFwaGljcyBjaGFyc2V0IHBhaXJzLCBiYXNlZCBvbiB2dDEwMAorcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKK2tleV9idGFiCQkJa2NidAlzdHIJa0IJS0VZX0JUQUIJMDU0MQktLS0tLQliYWNrLXRhYiBrZXkKK2VudGVyX3hvbl9tb2RlCQkJc214b24Jc3RyCVNYCS0JCS0JLS0tLS0JdHVybiBvbiB4b24veG9mZiBoYW5kc2hha2luZworZXhpdF94b25fbW9kZQkJCXJteG9uCXN0cglSWAktCQktCS0tLS0tCXR1cm4gb2ZmIHhvbi94b2ZmIGhhbmRzaGFraW5nCitlbnRlcl9hbV9tb2RlCQkJc21hbQlzdHIJU0EJLQkJLQktLS0tLQl0dXJuIG9uIGF1dG9tYXRpYyBtYXJnaW5zCitleGl0X2FtX21vZGUJCQlybWFtCXN0cglSQQktCQktCS0tLS0tCXR1cm4gb2ZmIGF1dG9tYXRpYyBtYXJnaW5zCit4b25fY2hhcmFjdGVyCQkJeG9uYwlzdHIJWE4JLQkJLQktLS0tLQlYT04gY2hhcmFjdGVyCit4b2ZmX2NoYXJhY3RlcgkJCXhvZmZjCXN0cglYRgktCQktCS0tLS0tCVhPRkYgY2hhcmFjdGVyCitlbmFfYWNzCQkJCWVuYWNzCXN0cgllQQktCQktCS0tLS0tCWVuYWJsZSBhbHRlcm5hdGUgY2hhciBzZXQKK2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCitsYWJlbF9vZmYJCQlybWxuCXN0cglMRgktCQktCS0tLS0tCXR1cm4gb2ZmIHNvZnQgbGFiZWxzCitrZXlfYmVnCQkJCWtiZWcJc3RyCUAxCUtFWV9CRUcJCTA1NDIJLS0tLS0JYmVnaW4ga2V5CitrZXlfY2FuY2VsCQkJa2NhbglzdHIJQDIJS0VZX0NBTkNFTAkwNTQzCS0tLS0tCWNhbmNlbCBrZXkKK2tleV9jbG9zZQkJCWtjbG8Jc3RyCUAzCUtFWV9DTE9TRQkwNTQ0CS0tLS0tCWNsb3NlIGtleQora2V5X2NvbW1hbmQJCQlrY21kCXN0cglANAlLRVlfQ09NTUFORAkwNTQ1CS0tLS0tCWNvbW1hbmQga2V5CitrZXlfY29weQkJCWtjcHkJc3RyCUA1CUtFWV9DT1BZCTA1NDYJLS0tLS0JY29weSBrZXkKK2tleV9jcmVhdGUJCQlrY3J0CXN0cglANglLRVlfQ1JFQVRFCTA1NDcJLS0tLS0JY3JlYXRlIGtleQora2V5X2VuZAkJCQlrZW5kCXN0cglANwlLRVlfRU5ECQkwNTUwCS0tLS0tCWVuZCBrZXkKK2tleV9lbnRlcgkJCWtlbnQJc3RyCUA4CUtFWV9FTlRFUgkwNTI3CS0tLS0tCWVudGVyL3NlbmQga2V5CitrZXlfZXhpdAkJCWtleHQJc3RyCUA5CUtFWV9FWElUCTA1NTEJLS0tLS0JZXhpdCBrZXkKK2tleV9maW5kCQkJa2ZuZAlzdHIJQDAJS0VZX0ZJTkQJMDU1MgktLS0tLQlmaW5kIGtleQora2V5X2hlbHAJCQlraGxwCXN0cgklMQlLRVlfSEVMUAkwNTUzCS0tLS0tCWhlbHAga2V5CitrZXlfbWFyawkJCWttcmsJc3RyCSUyCUtFWV9NQVJLCTA1NTQJLS0tLS0JbWFyayBrZXkKK2tleV9tZXNzYWdlCQkJa21zZwlzdHIJJTMJS0VZX01FU1NBR0UJMDU1NQktLS0tLQltZXNzYWdlIGtleQora2V5X21vdmUJCQlrbW92CXN0cgklNAlLRVlfTU9WRQkwNTU2CS0tLS0tCW1vdmUga2V5CitrZXlfbmV4dAkJCWtueHQJc3RyCSU1CUtFWV9ORVhUCTA1NTcJLS0tLS0JbmV4dCBrZXkKK2tleV9vcGVuCQkJa29wbglzdHIJJTYJS0VZX09QRU4JMDU2MAktLS0tLQlvcGVuIGtleQora2V5X29wdGlvbnMJCQlrb3B0CXN0cgklNwlLRVlfT1BUSU9OUwkwNTYxCS0tLS0tCW9wdGlvbnMga2V5CitrZXlfcHJldmlvdXMJCQlrcHJ2CXN0cgklOAlLRVlfUFJFVklPVVMJMDU2MgktLS0tLQlwcmV2aW91cyBrZXkKK2tleV9wcmludAkJCWtwcnQJc3RyCSU5CUtFWV9QUklOVAkwNTMyCS0tLS0tCXByaW50IGtleQora2V5X3JlZG8JCQlrcmRvCXN0cgklMAlLRVlfUkVETwkwNTYzCS0tLS0tCXJlZG8ga2V5CitrZXlfcmVmZXJlbmNlCQkJa3JlZglzdHIJJjEJS0VZX1JFRkVSRU5DRQkwNTY0CS0tLS0tCXJlZmVyZW5jZSBrZXkKK2tleV9yZWZyZXNoCQkJa3JmcglzdHIJJjIJS0VZX1JFRlJFU0gJMDU2NQktLS0tLQlyZWZyZXNoIGtleQora2V5X3JlcGxhY2UJCQlrcnBsCXN0cgkmMwlLRVlfUkVQTEFDRQkwNTY2CS0tLS0tCXJlcGxhY2Uga2V5CitrZXlfcmVzdGFydAkJCWtyc3QJc3RyCSY0CUtFWV9SRVNUQVJUCTA1NjcJLS0tLS0JcmVzdGFydCBrZXkKK2tleV9yZXN1bWUJCQlrcmVzCXN0cgkmNQlLRVlfUkVTVU1FCTA1NzAJLS0tLS0JcmVzdW1lIGtleQora2V5X3NhdmUJCQlrc2F2CXN0cgkmNglLRVlfU0FWRQkwNTcxCS0tLS0tCXNhdmUga2V5CitrZXlfc3VzcGVuZAkJCWtzcGQJc3RyCSY3CUtFWV9TVVNQRU5ECTA2MjcJLS0tLS0Jc3VzcGVuZCBrZXkKK2tleV91bmRvCQkJa3VuZAlzdHIJJjgJS0VZX1VORE8JMDYzMAktLS0tLQl1bmRvIGtleQora2V5X3NiZWcJCQlrQkVHCXN0cgkmOQlLRVlfU0JFRwkwNTcyCS0tLS0tCXNoaWZ0ZWQgYmVnaW4ga2V5CitrZXlfc2NhbmNlbAkJCWtDQU4Jc3RyCSYwCUtFWV9TQ0FOQ0VMCTA1NzMJLS0tLS0Jc2hpZnRlZCBjYW5jZWwga2V5CitrZXlfc2NvbW1hbmQJCQlrQ01ECXN0cgkqMQlLRVlfU0NPTU1BTkQJMDU3NAktLS0tLQlzaGlmdGVkIGNvbW1hbmQga2V5CitrZXlfc2NvcHkJCQlrQ1BZCXN0cgkqMglLRVlfU0NPUFkJMDU3NQktLS0tLQlzaGlmdGVkIGNvcHkga2V5CitrZXlfc2NyZWF0ZQkJCWtDUlQJc3RyCSozCUtFWV9TQ1JFQVRFCTA1NzYJLS0tLS0Jc2hpZnRlZCBjcmVhdGUga2V5CitrZXlfc2RjCQkJCWtEQwlzdHIJKjQJS0VZX1NEQwkJMDU3NwktLS0tLQlzaGlmdGVkIGRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfc2RsCQkJCWtETAlzdHIJKjUJS0VZX1NETAkJMDYwMAktLS0tLQlzaGlmdGVkIGRlbGV0ZS1saW5lIGtleQora2V5X3NlbGVjdAkJCWtzbHQJc3RyCSo2CUtFWV9TRUxFQ1QJMDYwMQktLS0tLQlzZWxlY3Qga2V5CitrZXlfc2VuZAkJCWtFTkQJc3RyCSo3CUtFWV9TRU5ECTA2MDIJLS0tLS0Jc2hpZnRlZCBlbmQga2V5CitrZXlfc2VvbAkJCWtFT0wJc3RyCSo4CUtFWV9TRU9MCTA2MDMJLS0tLS0Jc2hpZnRlZCBjbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9zZXhpdAkJCWtFWFQJc3RyCSo5CUtFWV9TRVhJVAkwNjA0CS0tLS0tCXNoaWZ0ZWQgZXhpdCBrZXkKK2tleV9zZmluZAkJCWtGTkQJc3RyCSowCUtFWV9TRklORAkwNjA1CS0tLS0tCXNoaWZ0ZWQgZmluZCBrZXkKK2tleV9zaGVscAkJCWtITFAJc3RyCSMxCUtFWV9TSEVMUAkwNjA2CS0tLS0tCXNoaWZ0ZWQgaGVscCBrZXkKK2tleV9zaG9tZQkJCWtIT00Jc3RyCSMyCUtFWV9TSE9NRQkwNjA3CS0tLS0tCXNoaWZ0ZWQgaG9tZSBrZXkKK2tleV9zaWMJCQkJa0lDCXN0cgkjMwlLRVlfU0lDCQkwNjEwCS0tLS0tCXNoaWZ0ZWQgaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9zbGVmdAkJCWtMRlQJc3RyCSM0CUtFWV9TTEVGVAkwNjExCS0tLS0tCXNoaWZ0ZWQgbGVmdC1hcnJvdyBrZXkKK2tleV9zbWVzc2FnZQkJCWtNU0cJc3RyCSVhCUtFWV9TTUVTU0FHRQkwNjEyCS0tLS0tCXNoaWZ0ZWQgbWVzc2FnZSBrZXkKK2tleV9zbW92ZQkJCWtNT1YJc3RyCSViCUtFWV9TTU9WRQkwNjEzCS0tLS0tCXNoaWZ0ZWQgbW92ZSBrZXkKK2tleV9zbmV4dAkJCWtOWFQJc3RyCSVjCUtFWV9TTkVYVAkwNjE0CS0tLS0tCXNoaWZ0ZWQgbmV4dCBrZXkKK2tleV9zb3B0aW9ucwkJCWtPUFQJc3RyCSVkCUtFWV9TT1BUSU9OUwkwNjE1CS0tLS0tCXNoaWZ0ZWQgb3B0aW9ucyBrZXkKK2tleV9zcHJldmlvdXMJCQlrUFJWCXN0cgklZQlLRVlfU1BSRVZJT1VTCTA2MTYJLS0tLS0Jc2hpZnRlZCBwcmV2aW91cyBrZXkKK2tleV9zcHJpbnQJCQlrUFJUCXN0cgklZglLRVlfU1BSSU5UCTA2MTcJLS0tLS0Jc2hpZnRlZCBwcmludCBrZXkKK2tleV9zcmVkbwkJCWtSRE8Jc3RyCSVnCUtFWV9TUkVETwkwNjIwCS0tLS0tCXNoaWZ0ZWQgcmVkbyBrZXkKK2tleV9zcmVwbGFjZQkJCWtSUEwJc3RyCSVoCUtFWV9TUkVQTEFDRQkwNjIxCS0tLS0tCXNoaWZ0ZWQgcmVwbGFjZSBrZXkKK2tleV9zcmlnaHQJCQlrUklUCXN0cgklaQlLRVlfU1JJR0hUCTA2MjIJLS0tLS0Jc2hpZnRlZCByaWdodC1hcnJvdyBrZXkKK2tleV9zcnN1bWUJCQlrUkVTCXN0cgklaglLRVlfU1JTVU1FCTA2MjMJLS0tLS0Jc2hpZnRlZCByZXN1bWUga2V5CitrZXlfc3NhdmUJCQlrU0FWCXN0cgkhMQlLRVlfU1NBVkUJMDYyNAktLS0tLQlzaGlmdGVkIHNhdmUga2V5CitrZXlfc3N1c3BlbmQJCQlrU1BECXN0cgkhMglLRVlfU1NVU1BFTkQJMDYyNQktLS0tLQlzaGlmdGVkIHN1c3BlbmQga2V5CitrZXlfc3VuZG8JCQlrVU5ECXN0cgkhMwlLRVlfU1VORE8JMDYyNgktLS0tLQlzaGlmdGVkIHVuZG8ga2V5CityZXFfZm9yX2lucHV0CQkJcmZpCXN0cglSRgktCQktCS0tLS0tCXNlbmQgbmV4dCBpbnB1dCBjaGFyIChmb3IgcHR5cykKK2tleV9mMTEJCQkJa2YxMQlzdHIJRjEJS0VZX0YoMTEpCS0JLS0tLUUJRjExIGZ1bmN0aW9uIGtleQora2V5X2YxMgkJCQlrZjEyCXN0cglGMglLRVlfRigxMikJLQktLS0tRQlGMTIgZnVuY3Rpb24ga2V5CitrZXlfZjEzCQkJCWtmMTMJc3RyCUYzCUtFWV9GKDEzKQktCS0tLS1FCUYxMyBmdW5jdGlvbiBrZXkKK2tleV9mMTQJCQkJa2YxNAlzdHIJRjQJS0VZX0YoMTQpCS0JLS0tLUUJRjE0IGZ1bmN0aW9uIGtleQora2V5X2YxNQkJCQlrZjE1CXN0cglGNQlLRVlfRigxNSkJLQktLS0tRQlGMTUgZnVuY3Rpb24ga2V5CitrZXlfZjE2CQkJCWtmMTYJc3RyCUY2CUtFWV9GKDE2KQktCS0tLS1FCUYxNiBmdW5jdGlvbiBrZXkKK2tleV9mMTcJCQkJa2YxNwlzdHIJRjcJS0VZX0YoMTcpCS0JLS0tLUUJRjE3IGZ1bmN0aW9uIGtleQora2V5X2YxOAkJCQlrZjE4CXN0cglGOAlLRVlfRigxOCkJLQktLS0tRQlGMTggZnVuY3Rpb24ga2V5CitrZXlfZjE5CQkJCWtmMTkJc3RyCUY5CUtFWV9GKDE5KQktCS0tLS1FCUYxOSBmdW5jdGlvbiBrZXkKK2tleV9mMjAJCQkJa2YyMAlzdHIJRkEJS0VZX0YoMjApCS0JLS0tLUUJRjIwIGZ1bmN0aW9uIGtleQora2V5X2YyMQkJCQlrZjIxCXN0cglGQglLRVlfRigyMSkJLQktLS0tRQlGMjEgZnVuY3Rpb24ga2V5CitrZXlfZjIyCQkJCWtmMjIJc3RyCUZDCUtFWV9GKDIyKQktCS0tLS1FCUYyMiBmdW5jdGlvbiBrZXkKK2tleV9mMjMJCQkJa2YyMwlzdHIJRkQJS0VZX0YoMjMpCS0JLS0tLUUJRjIzIGZ1bmN0aW9uIGtleQora2V5X2YyNAkJCQlrZjI0CXN0cglGRQlLRVlfRigyNCkJLQktLS0tRQlGMjQgZnVuY3Rpb24ga2V5CitrZXlfZjI1CQkJCWtmMjUJc3RyCUZGCUtFWV9GKDI1KQktCS0tLS1FCUYyNSBmdW5jdGlvbiBrZXkKK2tleV9mMjYJCQkJa2YyNglzdHIJRkcJS0VZX0YoMjYpCS0JLS0tLUUJRjI2IGZ1bmN0aW9uIGtleQora2V5X2YyNwkJCQlrZjI3CXN0cglGSAlLRVlfRigyNykJLQktLS0tRQlGMjcgZnVuY3Rpb24ga2V5CitrZXlfZjI4CQkJCWtmMjgJc3RyCUZJCUtFWV9GKDI4KQktCS0tLS1FCUYyOCBmdW5jdGlvbiBrZXkKK2tleV9mMjkJCQkJa2YyOQlzdHIJRkoJS0VZX0YoMjkpCS0JLS0tLUUJRjI5IGZ1bmN0aW9uIGtleQora2V5X2YzMAkJCQlrZjMwCXN0cglGSwlLRVlfRigzMCkJLQktLS0tRQlGMzAgZnVuY3Rpb24ga2V5CitrZXlfZjMxCQkJCWtmMzEJc3RyCUZMCUtFWV9GKDMxKQktCS0tLS1FCUYzMSBmdW5jdGlvbiBrZXkKK2tleV9mMzIJCQkJa2YzMglzdHIJRk0JS0VZX0YoMzIpCS0JLS0tLUUJRjMyIGZ1bmN0aW9uIGtleQora2V5X2YzMwkJCQlrZjMzCXN0cglGTglLRVlfRigzMykJLQktLS0tRQlGMzMgZnVuY3Rpb24ga2V5CitrZXlfZjM0CQkJCWtmMzQJc3RyCUZPCUtFWV9GKDM0KQktCS0tLS1FCUYzNCBmdW5jdGlvbiBrZXkKK2tleV9mMzUJCQkJa2YzNQlzdHIJRlAJS0VZX0YoMzUpCS0JLS0tLUUJRjM1IGZ1bmN0aW9uIGtleQora2V5X2YzNgkJCQlrZjM2CXN0cglGUQlLRVlfRigzNikJLQktLS0tRQlGMzYgZnVuY3Rpb24ga2V5CitrZXlfZjM3CQkJCWtmMzcJc3RyCUZSCUtFWV9GKDM3KQktCS0tLS1FCUYzNyBmdW5jdGlvbiBrZXkKK2tleV9mMzgJCQkJa2YzOAlzdHIJRlMJS0VZX0YoMzgpCS0JLS0tLUUJRjM4IGZ1bmN0aW9uIGtleQora2V5X2YzOQkJCQlrZjM5CXN0cglGVAlLRVlfRigzOSkJLQktLS0tRQlGMzkgZnVuY3Rpb24ga2V5CitrZXlfZjQwCQkJCWtmNDAJc3RyCUZVCUtFWV9GKDQwKQktCS0tLS1FCUY0MCBmdW5jdGlvbiBrZXkKK2tleV9mNDEJCQkJa2Y0MQlzdHIJRlYJS0VZX0YoNDEpCS0JLS0tLUUJRjQxIGZ1bmN0aW9uIGtleQora2V5X2Y0MgkJCQlrZjQyCXN0cglGVwlLRVlfRig0MikJLQktLS0tRQlGNDIgZnVuY3Rpb24ga2V5CitrZXlfZjQzCQkJCWtmNDMJc3RyCUZYCUtFWV9GKDQzKQktCS0tLS1FCUY0MyBmdW5jdGlvbiBrZXkKK2tleV9mNDQJCQkJa2Y0NAlzdHIJRlkJS0VZX0YoNDQpCS0JLS0tLUUJRjQ0IGZ1bmN0aW9uIGtleQora2V5X2Y0NQkJCQlrZjQ1CXN0cglGWglLRVlfRig0NSkJLQktLS0tRQlGNDUgZnVuY3Rpb24ga2V5CitrZXlfZjQ2CQkJCWtmNDYJc3RyCUZhCUtFWV9GKDQ2KQktCS0tLS1FCUY0NiBmdW5jdGlvbiBrZXkKK2tleV9mNDcJCQkJa2Y0NwlzdHIJRmIJS0VZX0YoNDcpCS0JLS0tLUUJRjQ3IGZ1bmN0aW9uIGtleQora2V5X2Y0OAkJCQlrZjQ4CXN0cglGYwlLRVlfRig0OCkJLQktLS0tRQlGNDggZnVuY3Rpb24ga2V5CitrZXlfZjQ5CQkJCWtmNDkJc3RyCUZkCUtFWV9GKDQ5KQktCS0tLS1FCUY0OSBmdW5jdGlvbiBrZXkKK2tleV9mNTAJCQkJa2Y1MAlzdHIJRmUJS0VZX0YoNTApCS0JLS0tLUUJRjUwIGZ1bmN0aW9uIGtleQora2V5X2Y1MQkJCQlrZjUxCXN0cglGZglLRVlfRig1MSkJLQktLS0tRQlGNTEgZnVuY3Rpb24ga2V5CitrZXlfZjUyCQkJCWtmNTIJc3RyCUZnCUtFWV9GKDUyKQktCS0tLS1FCUY1MiBmdW5jdGlvbiBrZXkKK2tleV9mNTMJCQkJa2Y1MwlzdHIJRmgJS0VZX0YoNTMpCS0JLS0tLUUJRjUzIGZ1bmN0aW9uIGtleQora2V5X2Y1NAkJCQlrZjU0CXN0cglGaQlLRVlfRig1NCkJLQktLS0tRQlGNTQgZnVuY3Rpb24ga2V5CitrZXlfZjU1CQkJCWtmNTUJc3RyCUZqCUtFWV9GKDU1KQktCS0tLS1FCUY1NSBmdW5jdGlvbiBrZXkKK2tleV9mNTYJCQkJa2Y1NglzdHIJRmsJS0VZX0YoNTYpCS0JLS0tLUUJRjU2IGZ1bmN0aW9uIGtleQora2V5X2Y1NwkJCQlrZjU3CXN0cglGbAlLRVlfRig1NykJLQktLS0tRQlGNTcgZnVuY3Rpb24ga2V5CitrZXlfZjU4CQkJCWtmNTgJc3RyCUZtCUtFWV9GKDU4KQktCS0tLS1FCUY1OCBmdW5jdGlvbiBrZXkKK2tleV9mNTkJCQkJa2Y1OQlzdHIJRm4JS0VZX0YoNTkpCS0JLS0tLUUJRjU5IGZ1bmN0aW9uIGtleQora2V5X2Y2MAkJCQlrZjYwCXN0cglGbwlLRVlfRig2MCkJLQktLS0tRQlGNjAgZnVuY3Rpb24ga2V5CitrZXlfZjYxCQkJCWtmNjEJc3RyCUZwCUtFWV9GKDYxKQktCS0tLS1FCUY2MSBmdW5jdGlvbiBrZXkKK2tleV9mNjIJCQkJa2Y2MglzdHIJRnEJS0VZX0YoNjIpCS0JLS0tLUUJRjYyIGZ1bmN0aW9uIGtleQora2V5X2Y2MwkJCQlrZjYzCXN0cglGcglLRVlfRig2MykJLQktLS0tRQlGNjMgZnVuY3Rpb24ga2V5CitjbHJfYm9sCQkJCWVsMQlzdHIJY2IJLQkJLQktLS0tLQlDbGVhciB0byBiZWdpbm5pbmcgb2YgbGluZQorY2xlYXJfbWFyZ2lucwkJCW1nYwlzdHIJTUMJLQkJLQktLS0tLQljbGVhciByaWdodCBhbmQgbGVmdCBzb2Z0IG1hcmdpbnMKK3NldF9sZWZ0X21hcmdpbgkJCXNtZ2wJc3RyCU1MCS0JCS0JLS0tLS0Jc2V0IGxlZnQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4uCSBTZWUgc21nbC4gKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfcmlnaHRfbWFyZ2luCQlzbWdyCXN0cglNUgktCQktCS0tLS0tCXNldCByaWdodCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbgorbGFiZWxfZm9ybWF0CQkJZmxuCXN0cglMZgktCQktCS0tLS0tCWxhYmVsIGZvcm1hdAorc2V0X2Nsb2NrCQkJc2NsawlzdHIJU0MJLQkJLQktLS0tLQlzZXQgY2xvY2ssICMxIGhycyAjMiBtaW5zICMzIHNlY3MKK2Rpc3BsYXlfY2xvY2sJCQlkY2xrCXN0cglESwktCQktCS0tLS0tCWRpc3BsYXkgY2xvY2sKK3JlbW92ZV9jbG9jawkJCXJtY2xrCXN0cglSQwktCQktCS0tLS0tCXJlbW92ZSBjbG9jaworY3JlYXRlX3dpbmRvdwkJCWN3aW4Jc3RyCUNXCS0JCS0JLS0tLS0JZGVmaW5lIGEgd2luZG93ICMxIGZyb20gIzIsIzMgdG8gIzQsIzUKK2dvdG9fd2luZG93CQkJd2luZ28Jc3RyCVdHCS0JCS0JLS0tLS0JZ28gdG8gd2luZG93ICMxCitoYW5ndXAJCQkJaHVwCXN0cglIVQktCQktCS0tLS0tCWhhbmctdXAgcGhvbmUKK2RpYWxfcGhvbmUJCQlkaWFsCXN0cglESQktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxCitxdWlja19kaWFsCQkJcWRpYWwJc3RyCVFECS0JCS0JLS0tLS0JZGlhbCBudW1iZXIgIzEgd2l0aG91dCBjaGVja2luZwordG9uZQkJCQl0b25lCXN0cglUTwktCQktCS0tLS0tCXNlbGVjdCB0b3VjaCB0b25lIGRpYWxpbmcKK3B1bHNlCQkJCXB1bHNlCXN0cglQVQktCQktCS0tLS0tCXNlbGVjdCBwdWxzZSBkaWFsaW5nCitmbGFzaF9ob29rCQkJaG9vawlzdHIJZmgJLQkJLQktLS0tLQlmbGFzaCBzd2l0Y2ggaG9vaworZml4ZWRfcGF1c2UJCQlwYXVzZQlzdHIJUEEJLQkJLQktLS0tLQlwYXVzZSBmb3IgMi0zIHNlY29uZHMKK3dhaXRfdG9uZQkJCXdhaXQJc3RyCVdBCS0JCS0JLS0tLS0Jd2FpdCBmb3IgZGlhbC10b25lCit1c2VyMAkJCQl1MAlzdHIJdTAJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMAordXNlcjEJCQkJdTEJc3RyCXUxCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzEKK3VzZXIyCQkJCXUyCXN0cgl1MgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMyCit1c2VyMwkJCQl1MwlzdHIJdTMJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMwordXNlcjQJCQkJdTQJc3RyCXU0CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzQKK3VzZXI1CQkJCXU1CXN0cgl1NQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM1Cit1c2VyNgkJCQl1NglzdHIJdTYJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNgordXNlcjcJCQkJdTcJc3RyCXU3CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzcKK3VzZXI4CQkJCXU4CXN0cgl1OAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM4Cit1c2VyOQkJCQl1OQlzdHIJdTkJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IGNvbG9yCisjCitvcmlnX3BhaXIJCQlvcAlzdHIJb3AJLQkJLQktLS0tLQlTZXQgZGVmYXVsdCBwYWlyIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorb3JpZ19jb2xvcnMJCQlvYwlzdHIJb2MJLQkJLQktLS0tLQlTZXQgYWxsIGNvbG9yIHBhaXJzIHRvIHRoZSBvcmlnaW5hbCBvbmVzCitpbml0aWFsaXplX2NvbG9yCQlpbml0YwlzdHIJSWMJLQkJLQktLS0tLQlpbml0aWFsaXplIGNvbG9yICMxIHRvICgjMiwjMywjNCkKK2luaXRpYWxpemVfcGFpcgkJCWluaXRwCXN0cglJcAktCQktCS0tLS0tCUluaXRpYWxpemUgY29sb3IgcGFpciAjMSB0byBmZz0oIzIsIzMsIzQpLCBiZz0oIzUsIzYsIzcpCitzZXRfY29sb3JfcGFpcgkJCXNjcAlzdHIJc3AJLQkJLQktLS0tLQlTZXQgY3VycmVudCBjb2xvciBwYWlyIHRvICMxCitzZXRfZm9yZWdyb3VuZAkJCXNldGYJc3RyCVNmCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgIzEKK3NldF9iYWNrZ3JvdW5kCQkJc2V0YglzdHIJU2IJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciAjMQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IHByaW50ZXJzCisjCitjaGFuZ2VfY2hhcl9waXRjaAkJY3BpCXN0cglaQQktCQktCS0tLS0tCUNoYW5nZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX2xpbmVfcGl0Y2gJCWxwaQlzdHIJWkIJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGxpbmVzIHBlciBpbmNoIHRvICMxCitjaGFuZ2VfcmVzX2hvcnoJCQljaHIJc3RyCVpDCS0JCS0JLS0tLS0JQ2hhbmdlIGhvcml6b250YWwgcmVzb2x1dGlvbiB0byAjMQorY2hhbmdlX3Jlc192ZXJ0CQkJY3ZyCXN0cglaRAktCQktCS0tLS0tCUNoYW5nZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIHRvICMxCitkZWZpbmVfY2hhcgkJCWRlZmMJc3RyCVpFCS0JCS0JLS0tLS0JRGVmaW5lIGEgY2hhcmFjdGVyICMxLCAjMiBkb3RzIHdpZGUsIGRlc2NlbmRlciAjMworZW50ZXJfZG91Ymxld2lkZV9tb2RlCQlzd2lkbQlzdHIJWkYJLQkJLQktLS0tLQlFbnRlciBkb3VibGUtd2lkZSBtb2RlCitlbnRlcl9kcmFmdF9xdWFsaXR5CQlzZHJmcQlzdHIJWkcJLQkJLQktLS0tLQlFbnRlciBkcmFmdC1xdWFsaXR5IG1vZGUKK2VudGVyX2l0YWxpY3NfbW9kZQkJc2l0bQlzdHIJWkgJLQkJLQktLS0tLQlFbnRlciBpdGFsaWMgbW9kZQorZW50ZXJfbGVmdHdhcmRfbW9kZQkJc2xtCXN0cglaSQktCQktCS0tLS0tCVN0YXJ0IGxlZnR3YXJkIGNhcnJpYWdlIG1vdGlvbgorZW50ZXJfbWljcm9fbW9kZQkJc21pY20Jc3RyCVpKCS0JCS0JLS0tLS0JU3RhcnQgbWljcm8tbW90aW9uIG1vZGUKK2VudGVyX25lYXJfbGV0dGVyX3F1YWxpdHkJc25scQlzdHIJWksJLQkJLQktLS0tLQlFbnRlciBOTFEgbW9kZQorZW50ZXJfbm9ybWFsX3F1YWxpdHkJCXNucm1xCXN0cglaTAktCQktCS0tLS0tCUVudGVyIG5vcm1hbC1xdWFsaXR5IG1vZGUKK2VudGVyX3NoYWRvd19tb2RlCQlzc2htCXN0cglaTQktCQktCS0tLS0tCUVudGVyIHNoYWRvdy1wcmludCBtb2RlCitlbnRlcl9zdWJzY3JpcHRfbW9kZQkJc3N1Ym0Jc3RyCVpOCS0JCS0JLS0tLS0JRW50ZXIgc3Vic2NyaXB0IG1vZGUKK2VudGVyX3N1cGVyc2NyaXB0X21vZGUJCXNzdXBtCXN0cglaTwktCQktCS0tLS0tCUVudGVyIHN1cGVyc2NyaXB0IG1vZGUKK2VudGVyX3Vwd2FyZF9tb2RlCQlzdW0Jc3RyCVpQCS0JCS0JLS0tLS0JU3RhcnQgdXB3YXJkIGNhcnJpYWdlIG1vdGlvbgorZXhpdF9kb3VibGV3aWRlX21vZGUJCXJ3aWRtCXN0cglaUQktCQktCS0tLS0tCUVuZCBkb3VibGUtd2lkZSBtb2RlCitleGl0X2l0YWxpY3NfbW9kZQkJcml0bQlzdHIJWlIJLQkJLQktLS0tLQlFbmQgaXRhbGljIG1vZGUKK2V4aXRfbGVmdHdhcmRfbW9kZQkJcmxtCXN0cglaUwktCQktCS0tLS0tCUVuZCBsZWZ0LW1vdGlvbiBtb2RlCitleGl0X21pY3JvX21vZGUJCQlybWljbQlzdHIJWlQJLQkJLQktLS0tLQlFbmQgbWljcm8tbW90aW9uIG1vZGUKK2V4aXRfc2hhZG93X21vZGUJCXJzaG0Jc3RyCVpVCS0JCS0JLS0tLS0JRW5kIHNoYWRvdy1wcmludCBtb2RlCitleGl0X3N1YnNjcmlwdF9tb2RlCQlyc3VibQlzdHIJWlYJLQkJLQktLS0tLQlFbmQgc3Vic2NyaXB0IG1vZGUKK2V4aXRfc3VwZXJzY3JpcHRfbW9kZQkJcnN1cG0Jc3RyCVpXCS0JCS0JLS0tLS0JRW5kIHN1cGVyc2NyaXB0IG1vZGUKK2V4aXRfdXB3YXJkX21vZGUJCXJ1bQlzdHIJWlgJLQkJLQktLS0tLQlFbmQgcmV2ZXJzZSBjaGFyYWN0ZXIgbW90aW9uCittaWNyb19jb2x1bW5fYWRkcmVzcwkJbWhwYQlzdHIJWlkJLQkJLQktLS0tLQlMaWtlIGNvbHVtbl9hZGRyZXNzIGluIG1pY3JvIG1vZGUKK21pY3JvX2Rvd24JCQltY3VkMQlzdHIJWloJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9kb3duIGluIG1pY3JvIG1vZGUKK21pY3JvX2xlZnQJCQltY3ViMQlzdHIJWmEJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9sZWZ0IGluIG1pY3JvIG1vZGUKK21pY3JvX3JpZ2h0CQkJbWN1ZjEJc3RyCVpiCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfcmlnaHQgaW4gbWljcm8gbW9kZQorbWljcm9fcm93X2FkZHJlc3MJCW12cGEJc3RyCVpjCS0JCS0JLS0tLS0JTGlrZSByb3dfYWRkcmVzcyAjMSBpbiBtaWNybyBtb2RlCittaWNyb191cAkJCW1jdXUxCXN0cglaZAktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3VwIGluIG1pY3JvIG1vZGUKK29yZGVyX29mX3BpbnMJCQlwb3JkZXIJc3RyCVplCS0JCS0JLS0tLS0JTWF0Y2ggc29mdHdhcmUgYml0cyB0byBwcmludC1oZWFkIHBpbnMKK3Bhcm1fZG93bl9taWNybwkJCW1jdWQJc3RyCVpmCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2Rvd25fY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fbGVmdF9taWNybwkJCW1jdWIJc3RyCVpnCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2xlZnRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fcmlnaHRfbWljcm8JCW1jdWYJc3RyCVpoCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3JpZ2h0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3VwX21pY3JvCQkJbWN1dQlzdHIJWmkJLQkJLQktLS0tLQlMaWtlIHBhcm1fdXBfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3NlbGVjdF9jaGFyX3NldAkJCXNjcwlzdHIJWmoJLQkJLQktLS0tLQlTZWxlY3QgY2hhcmFjdGVyIHNldCwgIzEKK3NldF9ib3R0b21fbWFyZ2luCQlzbWdiCXN0cglaawktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X2JvdHRvbV9tYXJnaW5fcGFybQkJc21nYnAJc3RyCVpsCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgbGluZSAjMSBvciAoaWYgc21ndHAgaXMgbm90IGdpdmVuKSAjMiBsaW5lcyBmcm9tIGJvdHRvbQorc2V0X2xlZnRfbWFyZ2luX3Bhcm0JCXNtZ2xwCXN0cglabQktCQktCS0tLS0tCVNldCBsZWZ0IChyaWdodCkgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3JpZ2h0X21hcmdpbl9wYXJtCQlzbWdycAlzdHIJWm4JLQkJLQktLS0tLQlTZXQgcmlnaHQgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3RvcF9tYXJnaW4JCQlzbWd0CXN0cglabwktCQktCS0tLS0tCVNldCB0b3AgbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X3RvcF9tYXJnaW5fcGFybQkJc21ndHAJc3RyCVpwCS0JCS0JLS0tLS0JU2V0IHRvcCAoYm90dG9tKSBtYXJnaW4gYXQgcm93ICMxCitzdGFydF9iaXRfaW1hZ2UJCQlzYmltCXN0cglacQktCQktCS0tLS0tCVN0YXJ0IHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RhcnRfY2hhcl9zZXRfZGVmCQlzY3NkCXN0cglacgktCQktCS0tLS0tCVN0YXJ0IGNoYXJhY3RlciBzZXQgZGVmaW5pdGlvbiAjMSwgd2l0aCAjMiBjaGFyYWN0ZXJzIGluIHRoZSBzZXQKK3N0b3BfYml0X2ltYWdlCQkJcmJpbQlzdHIJWnMJLQkJLQktLS0tLQlTdG9wIHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RvcF9jaGFyX3NldF9kZWYJCXJjc2QJc3RyCVp0CS0JCS0JLS0tLS0JRW5kIGRlZmluaXRpb24gb2YgY2hhcmFjdGVyIHNldCAjMQorc3Vic2NyaXB0X2NoYXJhY3RlcnMJCXN1YmNzCXN0cgladQktCQktCS0tLS0tCUxpc3Qgb2Ygc3Vic2NyaXB0YWJsZSBjaGFyYWN0ZXJzCitzdXBlcnNjcmlwdF9jaGFyYWN0ZXJzCQlzdXBjcwlzdHIJWnYJLQkJLQktLS0tLQlMaXN0IG9mIHN1cGVyc2NyaXB0YWJsZSBjaGFyYWN0ZXJzCit0aGVzZV9jYXVzZV9jcgkJCWRvY3IJc3RyCVp3CS0JCS0JLS0tLS0JUHJpbnRpbmcgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgY2F1c2VzIENSCit6ZXJvX21vdGlvbgkJCXplcm9tCXN0cglaeAktCQktCS0tLS0tCU5vIG1vdGlvbiBmb3Igc3Vic2VxdWVudCBjaGFyYWN0ZXIKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlIGZvbGxvd2luZyBzdHJpbmcgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCB3ZXJlIG9yaWdpbmFsbHkgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcxOC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2NoYXJfc2V0X25hbWVzCQkJY3NubQlzdHIJWnkJLQkJLQktLS0tLQlQcm9kdWNlICMxJ3RoIGl0ZW0gZnJvbSBsaXN0IG9mIGNoYXJhY3RlciBzZXQgbmFtZXMKK2tleV9tb3VzZQkJCWttb3VzCXN0cglLbQlLRVlfTU9VU0UJMDYzMQktLS0tLQlNb3VzZSBldmVudCBoYXMgb2NjdXJyZWQKK21vdXNlX2luZm8JCQltaW5mbwlzdHIJTWkJLQkJLQktLS0tLQlNb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KK3JlcV9tb3VzZV9wb3MJCQlyZXFtcAlzdHIJUlEJLQkJLQktLS0tLQlSZXF1ZXN0IG1vdXNlIHBvc2l0aW9uCitnZXRfbW91c2UJCQlnZXRtCXN0cglHbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgZ2V0IGJ1dHRvbiBldmVudHMsIHBhcmFtZXRlciAjMSBub3QgZG9jdW1lbnRlZC4KK3NldF9hX2ZvcmVncm91bmQJCXNldGFmCXN0cglBRgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2FfYmFja2dyb3VuZAkJc2V0YWIJc3RyCUFCCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitwa2V5X3BsYWIJCQlwZnhsCXN0cgl4bAktCQktCS0tLS0tCVByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyIGFuZCBzaG93IHN0cmluZyAjMworZGV2aWNlX3R5cGUJCQlkZXZ0CXN0cglkdgktCQktCS0tLS0tCUluZGljYXRlIGxhbmd1YWdlL2NvZGVzZXQgc3VwcG9ydAorY29kZV9zZXRfaW5pdAkJCWNzaW4Jc3RyCWNpCS0JCS0JLS0tLS0JSW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgY29kZXNldHMKK3NldDBfZGVzX3NlcQkJCXMwZHMJc3RyCXMwCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAwIChFVUMgc2V0IDAsIEFTQ0lJKQorc2V0MV9kZXNfc2VxCQkJczFkcwlzdHIJczEJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDEKK3NldDJfZGVzX3NlcQkJCXMyZHMJc3RyCXMyCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAyCitzZXQzX2Rlc19zZXEJCQlzM2RzCXN0cglzMwktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMworc2V0X2xyX21hcmdpbgkJCXNtZ2xyCXN0cglNTAktCQktCS0tLS0tCVNldCBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMgdG8gIzEsICMyLiAgKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfdGJfbWFyZ2luCQkJc21ndGIJc3RyCU1UCS0JCS0JLS0tLS0JU2V0cyBib3RoIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgdG8gIzEsICMyCitiaXRfaW1hZ2VfcmVwZWF0CQliaXJlcAlzdHIJWHkJLQkJLQktLS0tLQlSZXBlYXQgYml0IGltYWdlIGNlbGwgIzEgIzIgdGltZXMKK2JpdF9pbWFnZV9uZXdsaW5lCQliaW5lbAlzdHIJWnoJLQkJLQktLS0tLQlNb3ZlIHRvIG5leHQgcm93IG9mIHRoZSBiaXQgaW1hZ2UKK2JpdF9pbWFnZV9jYXJyaWFnZV9yZXR1cm4JYmljcglzdHIJWXYJLQkJLQktLS0tLQlNb3ZlIHRvIGJlZ2lubmluZyBvZiBzYW1lIHJvdworY29sb3JfbmFtZXMJCQljb2xvcm5tCXN0cglZdwktCQktCS0tLS0tCUdpdmUgbmFtZSBmb3IgY29sb3IgIzEKK2RlZmluZV9iaXRfaW1hZ2VfcmVnaW9uCQlkZWZiaQlzdHIJWXgJLQkJLQktLS0tLQlEZWZpbmUgcmVjdGFuZ3VhbGFyIGJpdCBpbWFnZSByZWdpb24KK2VuZF9iaXRfaW1hZ2VfcmVnaW9uCQllbmRiaQlzdHIJWXkJLQkJLQktLS0tLQlFbmQgYSBiaXQtaW1hZ2UgcmVnaW9uCitzZXRfY29sb3JfYmFuZAkJc2V0Y29sb3IJc3RyCVl6CS0JCS0JLS0tLS0JQ2hhbmdlIHRvIHJpYmJvbiBjb2xvciAjMQorc2V0X3BhZ2VfbGVuZ3RoCQkJc2xpbmVzCXN0cglZWgktCQktCS0tLS0tCVNldCBwYWdlIGxlbmd0aCB0byAjMSBsaW5lcworIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyBmb3IgZGlyZWN0IFBDLWNsb25lIHN1cHBvcnQKKyMKK2Rpc3BsYXlfcGNfY2hhcgkJCWRpc3BjCXN0cglTMQktCQktCS0tLS0tCURpc3BsYXkgUEMgY2hhcmFjdGVyICMxCitlbnRlcl9wY19jaGFyc2V0X21vZGUJCXNtcGNoCXN0cglTMgktCQktCS0tLS0tCUVudGVyIFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2V4aXRfcGNfY2hhcnNldF9tb2RlCQlybXBjaAlzdHIJUzMJLQkJLQktLS0tLQlFeGl0IFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2VudGVyX3NjYW5jb2RlX21vZGUJCXNtc2MJc3RyCVM0CS0JCS0JLS0tLS0JRW50ZXIgUEMgc2NhbmNvZGUgbW9kZQorZXhpdF9zY2FuY29kZV9tb2RlCQlybXNjCXN0cglTNQktCQktCS0tLS0tCUV4aXQgUEMgc2NhbmNvZGUgbW9kZQorcGNfdGVybV9vcHRpb25zCQkJcGN0cm0Jc3RyCVM2CS0JCS0JLS0tLS0JUEMgdGVybWluYWwgb3B0aW9ucworc2NhbmNvZGVfZXNjYXBlCQkJc2Nlc2MJc3RyCVM3CS0JCS0JLS0tLS0JRXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KK2FsdF9zY2FuY29kZV9lc2MJCXNjZXNhCXN0cglTOAktCQktCS0tLS0tCUFsdGVybmF0ZSBlc2NhcGUgZm9yIHNjYW5jb2RlIGVtdWxhdGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyUuaW4gLjhpCisjJVRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGFkZGVkIHRoZXNlLiAgVGhleSBhcmUgc29tZSBwb3N0LTQuMSAKKyMldmVyc2lvbnMgb2YgU3lzdGVtIFYgY3Vyc2VzLCBlLmcuLCBTb2xhcmlzIDIuNSBhbmQgSVJJWCA2LnguCisjJVRoZSBcZkJuY3Vyc2VzXGZSIHRlcm1jYXAgbmFtZXMgZm9yIHRoZW0gYXJlIGludmVudGVkOyBhY2NvcmRpbmcgdG8gdGhlCisjJVhTSSBDdXJzZXMgc3RhbmRhcmQsIHRoZXkgaGF2ZSBubyB0ZXJtY2FwIG5hbWVzLiAgSWYgeW91ciBjb21waWxlZCB0ZXJtaW5mbworIyVlbnRyaWVzIHVzZSB0aGVzZSwgdGhleSBtYXkgbm90IGJlIGJpbmFyeS1jb21wYXRpYmxlIHdpdGggU3lzdGVtIFYgdGVybWluZm8KKyMlZW50cmllcyBhZnRlciBTVnI0LjE7IGJld2FyZSEKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUJZWhobG0Jc3RyCVhoCS0JCS0JLS0tLS0JRW50ZXIgaG9yaXpvbnRhbCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbGVmdF9obF9tb2RlCQllbGhsbQlzdHIJWGwJLQkJLQktLS0tLQlFbnRlciBsZWZ0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl9sb3dfaGxfbW9kZQkJZWxvaGxtCXN0cglYbwktCQktCS0tLS0tCUVudGVyIGxvdyBoaWdobGlnaHQgbW9kZQorZW50ZXJfcmlnaHRfaGxfbW9kZQkJZXJobG0Jc3RyCVhyCS0JCS0JLS0tLS0JRW50ZXIgcmlnaHQgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3RvcF9obF9tb2RlCQlldGhsbQlzdHIJWHQJLQkJLQktLS0tLQlFbnRlciB0b3AgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3ZlcnRpY2FsX2hsX21vZGUJCWV2aGxtCXN0cglYdgktCQktCS0tLS0tCUVudGVyIHZlcnRpY2FsIGhpZ2hsaWdodCBtb2RlCitzZXRfYV9hdHRyaWJ1dGVzCQlzZ3IxCXN0cglzQQktCQktCS0tLS0tCURlZmluZSBzZWNvbmQgc2V0IG9mIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzYKK3NldF9wZ2xlbl9pbmNoCQkJc2xlbmd0aAlzdHIJc0wJLQkJLQktLS0tLQlZSSBTZXQgcGFnZSBsZW5ndGggdG8gIzEgaHVuZHJlZHRoIG9mIGFuIGluY2gKKyMlLlRFCisjJS5hZAorIworIyBUaGUgbWFnaWMgdG9rZW4gYmVsb3cgdGVsbHMgdGhlIHRpYyBjb21waWxlci1nZW5lcmF0b3IgY29kZSB0aGF0IGFsbCB0aGUgY2FwcworIyBwYXN0IGl0IHNob3VsZCBiZSBpZ25vcmVkIChub3Qgd3JpdHRlbiBvdXQpIHdoZW4gZHVtcGluZyB0ZXJtaW5mbyBvYmplY3RzLiBJdAorIyBhbHNvIHRlbGxzIHRoZSBtYW4gcGFnZSB0YWJsZSBnZW5lcmF0b3Igbm90IHRvIHBhc3MgdGhyb3VnaCBmb2xsb3dpbmcgbGluZXMKKyMgVGhpcyBtZWFucyB3ZSBjYW4gaGF2ZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgYW5kIHBzZXVkby1jYXBhYmlsaXRpZXMgdGhhdCBhcmUKKyMgcmVjb2duaXplZCBmb3IgdGVybWNhcCBvciB0ZXJtaW5mbyBjb21waWxhdGlvbiwgYnV0IG5vdCBvdXRwdXQuCisjCisjICUlLVNUT1AtSEVSRS0lJQorIworIyBEb24ndCBtb3ZlIHRoaXMgY2FzdWFsbHkhICBJbiBmYWN0LCBkb24ndCBtb3ZlIGl0IGF0IGFsbCB1bmxlc3MgeW91J3JlCisjIGVpdGhlciBkb2luZyBpdCB0byBhZGQgU3lzdGVtIFYgb3IgWFBHNCBleHRlbnNpb25zLCBvciBoYXZlIGRlY2lkZWQgeW91CisjIGRvbid0IGNhcmUgYWJvdXQgU1ZyNCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1DQVAgRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGUgY2FwYWJpbGl0aWVzIGJlbG93IGFyZSBlaXRoZXIgb2Jzb2xldGUgb3IgZXh0ZW5zaW9ucyBvbiBjZXJ0YWluIHN5c3RlbXMuCisjIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNWUjQgdGVybWluZm8uICBTb21lIGFyZSB1c2VkIGJ5IGNhcHRvaW5mbyB0byB0cmFuc2xhdGUKKyMgdGVybWNhcCBzb3VyY2VzOyB0aGUgcmVzdCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBpbiBjYXNlIHNvbWVib2R5CisjIGNhcmVzIGFib3V0IHRoZW0gZW5vdWdoIHRvIGhhY2sgaW4gY29kZSB0aGF0IHdpbGwgdHJhbnNsYXRlIHRoZW0gaW50bworIyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMuCisjCisjIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaXN0IGlzIGZyb20gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlCisjIChjb21wLnNvdXJjZXMudW5peCwgdm9sdW1lIDI2KTsgdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCB0ZXJtaW5mbyBuYW1lcyAoYXMKKyMgd2VsbCBhcyB0aGUgdGVybWNhcCBjb2RlcykgbWF0Y2ggaGlzIGxpc3QuCisjCisjIFRoaXMgZ3JvdXAgb2YgY29kZXMgaXMgbm90IG1hcmtlZCBvYnNvbGV0ZSBpbiA0LjRCU0QsIGJ1dCBoYXZlIG5vIGRpcmVjdAorIyB0ZXJtaW5mbyBlcXVpdmFsZW50cy4gIFRoZSBycyBjYXBhYmlsaXR5IGlzIHNwZWNpYWxseSB0cmFuc2xhdGVkIHRvIHRlcm1pbmZvCisjIHIyLCBhbmQgdmljZSB2ZXJzYSwgaWYgYW4gZW50cnkgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIHIyLiAgU2ltaWxhcmx5LAorIyBpMiBpcyB0cmFuc2xhdGVkIHRvIHIzIGlmIHRoZXJlIGlzIG5vIHIzIChiZWNhdXNlIFNWIHRlcm1pbmZvIG1hcHMgaXMgdG8gaTIpLgorIyBUaGUgdWcgY2FwYWJpbGl0eSBpcyB0aHJvd24gYXdheSwgYnV0IGFzc3VtZWQgdG8gYmUgd2hhdGV2ZXIgc2cgaXMgaWYgdGhlCisjIGxhdHRlciBpcyBub256ZXJvIGFuZCB3ZSdyZSBkdW1waW5nIGluIHRlcm1jYXAgZm9ybWF0LgorIwordGVybWNhcF9pbml0MgkJCU9UaTIJc3RyCWkyCS0JCS0JWUItLS0Jc2Vjb25kYXJ5IGluaXRpYWxpemF0aW9uIHN0cmluZwordGVybWNhcF9yZXNldAkJCU9UcnMJc3RyCXJzCS0JCS0JWUItRy0JdGVybWluYWwgcmVzZXQgc3RyaW5nCittYWdpY19jb29raWVfZ2xpdGNoX3VsCQlPVHVnCW51bQl1ZwktCQktCVlCQ0dFCW51bWJlciBvZiBibGFua3MgbGVmdCBieSB1bAorIworIyBPYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFNvbWUgYXJlIHVzZWQgZm9yIHRlcm1jYXAgdHJhbnNsYXRpb24uICBUaGUKKyMgY29kZSB1c2VzIHRoZSAnT1QnIHByZWZpeCB3ZSBwdXQgb24gb2Jzb2xldGUgY2FwYWJpbGl0aWVzIHRvIHN1cHByZXNzCisjIHByaW50aW5nIHRoZW0gaW4gdGVybWluZm8gc291cmNlIGR1bXBzIG9mIGNvbXBpbGVkIGVudHJpZXMuCisjCitiYWNrc3BhY2VzX3dpdGhfYnMJCU9UYnMJYm9vbAlicwktCQktCVlCQ0dFCXVzZXMgXkggdG8gbW92ZSBsZWZ0CitjcnRfbm9fc2Nyb2xsaW5nCQlPVG5zCWJvb2wJbnMJLQkJLQlZQkNHLQljcnQgY2Fubm90IHNjcm9sbAorbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IJCU9UbmMJYm9vbAluYwktCQktCVlCQ0ctCW5vIHdheSB0byBnbyB0byBzdGFydCBvZiBsaW5lCitjYXJyaWFnZV9yZXR1cm5fZGVsYXkJCU9UZEMJbnVtCWRDCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgQ1IKK25ld19saW5lX2RlbGF5CQkJT1RkTgludW0JZE4JLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBMRgorbGluZWZlZWRfaWZfbm90X2xmCQlPVG5sCXN0cglubAktCQktCVlCQ0dFCXVzZSB0byBtb3ZlIGRvd24KK2JhY2tzcGFjZV9pZl9ub3RfYnMJCU9UYmMJc3RyCWJjCS0JCS0JWUJDR0UJbW92ZSBsZWZ0LCBpZiBub3QgXkgKKyMKKyMgR05VIHRlcm1jYXAgbGlicmFyeSBleHRlbnNpb25zLiAgVGhlIEdOVSB0ZXJtY2FwIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyBFbWFjcyBubyBsb25nZXIgdXNlcyB0aGVzZSwgYnV0IE1UIHNob3dlZCB1cCBpbiBwcmUtOS4wIHZlcnNpb25zIG9mIHRoZQorIyBCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbyBNVCBpcyByZXNvbHZlZCBieSB0eXBlCisjIGluZm87IE1UIGlzIGNvbnZlcnRlZCB0byBrbS4KKyMKK2dudV9oYXNfbWV0YV9rZXkJCU9UTVQJYm9vbAlNVAktCQktCS0tLS1FCWhhcyBtZXRhIGtleQorIyBnbnVfdGFiX3dpZHRoCQkJT1R0dwludW0JdHcJLQkJLQktLS0tRQl0YWIgd2lkdGggaW4gc3BhY2VzCisjCisjIEdOVSB0ZXJtY2FwICpkb2VzKiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0eSwgIE9ubHkgdGhlCisjIG5vdy1vYnNvbGV0ZSBBbm4gQXJib3IgdGVybWluYWxzIHVzZWQgaXQuCisjCisjIGdudV9jaGFuZ2Vfc2Nyb2xsX3JlZ2lvbglPVGNTCXN0cgljUwktCQktCS0tLUdFCWFsdGVybmF0ZSBzZXQgc2Nyb2xsaW5nIHJlZ2lvbiAKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21tZW50cyBkZXNjcmliZSBjYXBuYW1lcyBzbyBhbmNpZW50IHRoYXQgSSBiZWxpZXZlIG5vCisjIHNvZnR3YXJlIHVzZXMgdGhlbSBhbnkgbG9uZ2VyLiAgU29tZSBvZiB0aGVzZSBoYXZlIHRvIGdvIGJlY2F1c2UgdGhleQorIyBjbGFzaCB3aXRoIHRlcm1pbmZvIG5hbWVzIGluIHdheXMgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlc2UgbXl0aW5mbyBjb2RlcyBhcmUgbm90IHVzZWQgaW4gdGhlIDQuNEJTRCBjdXJzZXMgY29kZS4gIFRoZXkgYXJlCisjIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgNC40QlNEIG1hbnVhbCBwYWdlcy4KKyMKKyMgVGhlcmUgaXMgb25lIGNvbmZsaWN0IHdpdGggdGVybWluZm87IG1hIGlzIGluIGJvdGguICBUaGlzIGNvbmZsaWN0IGlzCisjIHJlc29sdmVkIGJ5IHR5cGUgaW5mb3JtYXRpb24uCisjCisjIFRoZSBga28nIGNhcGFiaWxpdHkgaXMgdHJhbnNsYXRlZCBieSBzcGVjaWFsIGNvZGUuICBJdCBzaG91bGQgY29udGFpbiBhCisjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhcGFiaWxpdGllcyBmb3Igd2hpY2ggdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyMgVGhlIGBrbicgY29kZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyMKKyMgVGhlIGBtYScgY2FwYWJpbGl0eSBzZWVtcyB0byBoYXZlIGJlZW4gZGVzaWduZWQgdG8gbWFwIGJldHdlZW4gdGhlIHJvZ3VlKDIpCisjIG1vdGlvbiBrZXlzIChpbmNsdWRpbmcgamtobCkgYW5kIGNoYXJhY3RlcnMgZW1pdHRlZCBieSBhcnJvdyBrZXlzIG9uIHNvbWUKKyMgcHJpbWl0aXZlIHByZS1BTlNJIHRlcm1pbmFscy4gIEl0J3Mgc28gb2Jzb2xldGUgaXQncyBmb3NzaWxpemVkLi4uCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBtZW1vcnlfbG9ja19hYm92ZSBhbmQgbWVtb3J5X3VubG9jazoKKyMgIllvdSBjYW4gJ2ZyZWV6ZScgZGF0YSBvbiB0aGUgc2NyZWVuIGJ5IHR1cm5pbmcgb24gTWVtb3J5IExvY2sgaW4gYSBsaW5lIG9mCisjIHRleHQuICBBbGwgbGluZXMgYWJvdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbGluZSBiZWNvbWUgbG9ja2VkIGluIHBsYWNlIG9uCisjIHRoZSBzY3JlZW4uICBUaGVuIGVudGVyIGRhdGEgbm9ybWFsbHkuICBXaGVuIHRoZSBzY3JlZW4gZmlsbHMgdXAsIGFueQorIyBmdXJ0aGVyIGRhdGEgZW50ZXJlZCBmb3JjZXMgdGhlIGZpcnN0IGxpbmUgb2YgdW5mcm96ZW4gbGluZSB0ZXh0IHRvIHNjcm9sbAorIyB1bmRlciB0aGUgZnJvemVuIGRhdGEuICBMaW5lcyBzY3JvbGxlZCBvZmYgdGhlIHNjcmVlbiBhcmUgaW5zZXJ0ZWQgaW50bworIyBtZW1vcnkgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBmaXJzdCBmcm96ZW4gbGluZS4iIChmcm9tIHRoZSBIUCA3MDAvOTYKKyMgVXNlcidzIG1hbnVhbCkuICBWVDEwMC9BTlNJIG1lbW9yeSBsb2NrIHNldCBpcyBcRVs+MmgsIHJlc2V0IGlzIFxFWz4ybC4KKyMKKyMgQXBwbGljYXRpb25zIHRoYXQgdXNlIHRlcm1pbmZvIGFyZSBzdXBwb3NlZCB0byBiZWhhdmUgYXMgdGhvdWdoIHhyIGlzCisjIGFsd2F5cyB0cnVlLgorIworbGluZWZlZWRfaXNfbmV3bGluZQkJT1ROTAlib29sCU5MCS0JCS0JWUItLS0JbW92ZSBkb3duIHdpdGggXG4KKyMgZXZlbl9wYXJpdHkJCQlPVEVQCWJvb2wJRVAJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBldmVuIHBhcml0eQorIyBvZGRfcGFyaXR5CQkJT1RPUAlib29sCU9QCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgb2RkIHBhcml0eQorIyBoYWxmX2R1cGxleAkJCU9USEQJYm9vbAlIRAktCQktCS1CLS0tCXRlcm1pbmFsIGlzIGhhbGYtZHVwbGV4CisjIGxvd2VyX2Nhc2Vfb25seQkJT1RMQwlib29sCUxDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgbG93ZXIgY2FzZQorIyB1cHBlcl9jYXNlX29ubHkJCU9UVUMJYm9vbAlVQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IHVwcGVyIGNhc2UKK2JhY2tzcGFjZV9kZWxheQkJCU9UZEIJbnVtCWRCCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkgKKyMgZm9ybV9mZWVkX2RlbGF5CQlPVGRGCW51bQlkRgktCQktCS1CLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5MCitob3Jpem9udGFsX3RhYl9kZWxheQkJT1RkVAludW0JZFQJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSQorIyB2ZXJ0aWNhbF90YWJfZGVsYXkJCU9UZFYJbnVtCWRWCS0JCS0JLUItLS0JcGFkZGluZyByZXF1aXJlZCBmb3IgXlYKK251bWJlcl9vZl9mdW5jdGlvbl9rZXlzCQlPVGtuCW51bQlrbgktCQktCS1CLUctCWNvdW50IG9mIGZ1bmN0aW9uIGtleXMKK290aGVyX25vbl9mdW5jdGlvbl9rZXlzCQlPVGtvCXN0cglrbwktCQktCS1CLUctCWxpc3Qgb2Ygc2VsZi1tYXBwZWQga2V5Y2FwcworYXJyb3dfa2V5X21hcAkJCU9UbWEJc3RyCW1hCS0JCS0JWUJDLS0JbWFwIGFycm93IGtleXMgcm9ndWUoMSkgbW90aW9uIGtleXMKKyMgbWVtb3J5X2xvY2tfYWJvdmUJCU9UbWwJc3RyCW1sCS0JCS0JLUItLS0JbG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorIyBtZW1vcnlfdW5sb2NrCQkJT1RtdQlzdHIJbXUJLQkJLQktQi0tLQl1bmxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKK2hhc19oYXJkd2FyZV90YWJzCQlPVHB0CWJvb2wJcHQJLQkJLQlZQi0tLQloYXMgOC1jaGFyIHRhYnMgaW52b2tlZCB3aXRoIF5JCityZXR1cm5fZG9lc19jbHJfZW9sCQlPVHhyCWJvb2wJeHIJLQkJLQlZQi0tLQlyZXR1cm4gY2xlYXJzIHRoZSBsaW5lCisjIHRla180MDI1X2luc2VydF9saW5lCQlPVHh4CWJvb2wJeHgJLQkJLQktQkMtLQlUZWt0cm9uaXggNDAyNSBpbnNlcnQtbGluZSBnbGl0Y2gKKyMKKyMgbXl0aW5mbyBkZXNjcmliZWQgdGhpcyBhcyBhIHRlcm1jYXAgY2FwYWJpbGl0eSwgYnV0IGl0J3Mgbm90IGxpc3RlZCBpbiB0aGUKKyMgNC40QlNEIG1hbiBwYWdlcywgYW5kIG5vdCBmb3VuZCBpbiB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuY3Vyc2VzCisjIHBhY2thZ2UsIGxpa2UgU3lzdGVtIFYsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFsd2F5cyB0cnVlLgorIworIyByaW5kX29ubHlfYXRfdG9wCQlPVHhxCWJvb2wJeHEJLQkJLQktLS0tLQlyZXZlcnNlIGluZGV4IG9ubHkgd29ya3MgZnJvbSB0b3AgbGluZQorIworIyBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIHRlcm1jYXAgZXh0ZW5zaW9ucyAoYXMgZGVzY3JpYmVkIGluIG15dGluZm8pLgorIyBUaGUgYHhsJyB0ZXJtY2FwIGZpbGUgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90CisjIGJlIHJlc29sdmVkIGJ5IGEgdHlwZSBjaGVjay4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGd1ZXNzZXMgZnJvbSB3aGF0IHdhcworIyBpbiB0aGUgbXl0aW5mbyB0YWJsZXMuIAorIworIyBrZXlfaW50ZXJydXB0X2NoYXIJCU9Ua2kJc3RyCWtpCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBpbnRlcnJ1cHQga2V5ICg/KQorIyBrZXlfa2lsbF9jaGFyCQkJT1RrawlzdHIJa2sJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGtpbGwga2V5ICg/KQorIyBrZXlfc3VzcGVuZF9jaGFyCQlPVGt6CXN0cglregktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgc3VzcGVuZCBrZXkgKD8pCisjIGluaXRpYWxpemF0aW9uX21lc3N5CQlPVHhjCWJvb2wJeGMJLQkJLQktLS0tLQlpbml0aWFsaXphdGlvbiBsZWF2ZXMgZ2FyYmFnZSBvbiB0aGUgc2NyZWVuICg/KQorIyBpbmRfYXRfYm90dG9tX2RvZXNfY3IJCU9UeGwJYm9vbAl4bAktCQktCS0tLS0tCWluZGV4IGRvZXMgYSBjYXJyaWFnZSByZXR1cm4KKyMKKyMgTm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHVuaXF1ZSB0byBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UuCisjIFNSIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdCBiZSByZXNvbHZlZCBieSBhIHR5cGUKKyMgY2hlY2suCisjCisjIHNjcm9sbF9sZWZ0CQkJT1RzbDEJc3RyCVNsCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZAorIyBzY3JvbGxfcmlnaHQJCQlPVHNyMQlzdHIJU3IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZAorIyBwYXJtX3Njcm9sbF9sZWZ0CQlPVHNsCXN0cglTTAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQgIzEgY2hhcmFjdGVycworIyBwYXJtX3Njcm9sbF9yaWdodAkJT1RzcglzdHIJU1IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZCAjMSBjaGFyYWN0ZXJzCisjCisjIFRoZSBteXRpbmZvIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgWGVuaXggZGVmaW5lZCBpdHMgb3duIHNldCBvZiBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMgY2FwCUlCTSBBU0NJSQlkZXNjcmlwdGlvbiAgICAgICAgICAgICBBQ1MgICAgICAgICAJQVNDSUkKKyMgLS0tCS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0JLS0tLS0tCisjIEcxCTE5MSBcMjc3IE0tPwlzaW5nbGUgdXBwZXIgcmlnaHQgICAJQUNTX1VSQ09STkVSCisjIEcyCTIxOCBcMzMyIE0tWglzaW5nbGUgdXBwZXIgbGVmdAlBQ1NfVUxDT1JORVIKKyMgRzMJMTkyIFwzMDAgTS1ACXNpbmdsZSBsb3dlciBsZWZ0CUFDU19MTENPUk5FUgorIyBHNAkyMTcgXDMzMSBNLVkJc2luZ2xlIGxvd2VyIHJpZ2h0CUFDU19MUkNPUk5FUgorIyBHNQkxODcgXDI3MyBNLTsJZG91YmxlIHVwcGVyIHJpZ2h0CisjIEc2CTIwMSBcMzExIE0tSQlkb3VibGUgdXBwZXIgbGVmdAorIyBHNwkyMDAgXDMxMCBNLUgJZG91YmxlIGxvd2VyIGxlZnQKKyMgRzgJMTg4IFwyNzQgTS08CWRvdWJsZSBsb3dlciByaWdodAorIyBHQwkxOTcgXDMwNSBNLUUJc2luZ2xlIGludGVyc2VjdGlvbglBQ1NfUExVUwlfIF8KKyMgR0QJMTk0IFwzMDIgTS1CCXNpbmdsZSBkb3duLXRpY2sJQUNTX1RURUUJIHwKKyMgR0gJMTk2IFwzMDQgTS1ECXNpbmdsZSBob3Jpem9udGFsIGxpbmUJQUNTX0hMSU5FCisjIEdMCTE4MCBcMjY0IE0tNAlzaW5nbGUgbGVmdCB0aWNrCUFDU19SVEVFCS18CisjIEdSCTE5NSBcMzAzIE0tQwlzaW5nbGUgcmlnaHQgdGljawlBQ1NfTFRFRQl8LQorIyBHVQkxOTMgXDMwMSBNLUEJc2luZ2xlIHVwIHRpY2sJCUFDU19CVEVFCV98XworIyBHVgkxNzkgXDI2MyBNLTMJc2luZ2xlIHZlcnRpY2FsIGxpbmUJQUNTX1ZMSU5FCisjIEdjCTIwNiBcMzE2IE0tTglkb3VibGUgaW50ZXJzZWN0aW9uCisjIEdkCTIwMyBcMzEzIE0tSwlkb3VibGUgZG93biB0aWNrCisjIEdoCTIwNSBcMzE1IE0tTQlkb3VibGUgaG9yaXpvbnRhbCBsaW5lCisjIEdsCTIwNCBcMjA0IE0tTAlkb3VibGUgbGVmdCB0aWNrCisjIEdyCTE4NSBcMjcxIE0tOQlkb3VibGUgcmlnaHQgdGljaworIyBHdQkyMDIgXDMxMiBNLUoJZG91YmxlIHVwIHRpY2sKKyMgR3YJMTg2IFwyNzIgTS06CWRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisjCisjIFRoZSBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSB0aGUgc2luZ2xlLWxpbmUgY2FwcyBhbmQgZGlzY2FyZCB0aGUgb3RoZXJzCisjICh2aWEgSUdOT1JFIGFsaWFzZXMgZnVydGhlciBkb3duKS4gIFdlIGRvbid0IHdhbnQgdG8gZG8gbm9ybWFsIHBhZCAKKyMgdHJhbnNsYXRpb24gb24gdGhlc2UsIHRoZXkncmUgb2Z0ZW4gc2luZ2xlLWNoYXJhY3RlciBwcmludGFibGUgQVNDSUkKKyMgc3RyaW5ncyB0aGF0IGhhcHBlbiB0byBiZSBudW1lcmljcy4gIFRoZXJlJ3MgYXdrIGNvZGUgaW4gcGFyYW1ldHJpemVkLnNoCisjIHRoYXQgZGV0ZWN0cyB0aGUgYWNzXyBwcmVmaXggYW5kIHVzZXMgaXQgdG8gc3VwcHJlc3MgcGFkIHRyYW5zbGF0aW9uLgorIyBUaGVzZSB0ZXJtaW5mbyBuYW1lcyBhcmUgaW52ZW50ZWQuCisjCithY3NfdWxjb3JuZXIJCQlPVEcyCXN0cglHMgktCQktCS0tLS0tCXNpbmdsZSB1cHBlciBsZWZ0CithY3NfbGxjb3JuZXIJCQlPVEczCXN0cglHMwktCQktCS0tLS0tCXNpbmdsZSBsb3dlciBsZWZ0CithY3NfdXJjb3JuZXIJCQlPVEcxCXN0cglHMQktCQktCS0tLS0tCXNpbmdsZSB1cHBlciByaWdodAorYWNzX2xyY29ybmVyCQkJT1RHNAlzdHIJRzQJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgcmlnaHQKK2Fjc19sdGVlCQkJT1RHUglzdHIJR1IJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgcmlnaHQKK2Fjc19ydGVlCQkJT1RHTAlzdHIJR0wJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgbGVmdAorYWNzX2J0ZWUJCQlPVEdVCXN0cglHVQktCQktCS0tLS0tCXRlZSBwb2ludGluZyB1cAorYWNzX3R0ZWUJCQlPVEdECXN0cglHRAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBkb3duCithY3NfaGxpbmUJCQlPVEdICXN0cglHSAktCQktCS0tLS0tCXNpbmdsZSBob3Jpem9udGFsIGxpbmUKK2Fjc192bGluZQkJCU9UR1YJc3RyCUdWCS0JCS0JLS0tLS0Jc2luZ2xlIHZlcnRpY2FsIGxpbmUKK2Fjc19wbHVzCQkJT1RHQwlzdHIJR0MJLQkJLQktLS0tLQlzaW5nbGUgaW50ZXJzZWN0aW9uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNSU5GTyBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBhbG1vc3QgYWxsIGNvbW1lbnRzLiAgV2hhdCBpdCdzIG1haW5seSBmb3IgaXMgdG8gZGVzY3JpYmUKKyMgd2hhdCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBzcXVlZXplZCBvdXQgdG8gZ2V0IGRvd24gdG8gdGhlIFhTSSBDdXJzZXMKKyMgc3RhbmRhcmQgc2V0LiAgVGhleSBhcmUgZmxhZ2dlZCB3aXRoIEsuCisjCisjIEhQIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIEhQCisjIHRlcm1pbmZvIGZpbGVzLiAgRXhjZXB0IGZvciBtZW1vcnlfbG9jayBhbmQgbWVtb3J5X3VubG9jaywgdGhleSBhcmUKKyMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBTVnI0IGV4dGVuc2lvbnMsIGJ1dCB0aGV5IG1ha2UgdGhlIGJpbmFyeSBmb3JtYXQKKyMgZGlmZmVyZW50LiAgR3Jyci4uLi4KKyMKK21lbW9yeV9sb2NrCQkJbWVtbAlzdHIJbWwJLQkJLQktLS0tSwlsb2NrIG1lbW9yeSBhYm92ZSBjdXJzb3IKK21lbW9yeV91bmxvY2sJCQltZW11CXN0cgltdQktCQktCS0tLS1LCXVubG9jayBtZW1vcnkKKyNwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorI2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCisjbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscworI2tleV9mMTEJCQlrZjExCXN0cglGMQktCQktCS0tLS0tCUYxMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjEyCQkJa2YxMglzdHIJRjIJLQkJLQktLS0tLQlGMTIgZnVuY3Rpb24ga2V5Cisja2V5X2YxMwkJCWtmMTMJc3RyCUYzCS0JCS0JLS0tLS0JRjEzIGZ1bmN0aW9uIGtleQorI2tleV9mMTQJCQlrZjE0CXN0cglGNAktCQktCS0tLS0tCUYxNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE1CQkJa2YxNQlzdHIJRjUJLQkJLQktLS0tLQlGMTUgZnVuY3Rpb24ga2V5Cisja2V5X2YxNgkJCWtmMTYJc3RyCUY2CS0JCS0JLS0tLS0JRjE2IGZ1bmN0aW9uIGtleQorI2tleV9mMTcJCQlrZjE3CXN0cglGNwktCQktCS0tLS0tCUYxNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE4CQkJa2YxOAlzdHIJRjgJLQkJLQktLS0tLQlGMTggZnVuY3Rpb24ga2V5Cisja2V5X2YxOQkJCWtmMTkJc3RyCUY5CS0JCS0JLS0tLS0JRjE5IGZ1bmN0aW9uIGtleQorI2tleV9mMjAJCQlrZjIwCXN0cglGQQktCQktCS0tLS0tCUYyMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjIxCQkJa2YyMQlzdHIJRkIJLQkJLQktLS0tLQlGMjEgZnVuY3Rpb24ga2V5Cisja2V5X2YyMgkJCWtmMjIJc3RyCUZDCS0JCS0JLS0tLS0JRjIyIGZ1bmN0aW9uIGtleQorI2tleV9mMjMJCQlrZjIzCXN0cglGRAktCQktCS0tLS0tCUYyMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI0CQkJa2YyNAlzdHIJRkUJLQkJLQktLS0tLQlGMjQgZnVuY3Rpb24ga2V5Cisja2V5X2YyNQkJCWtmMjUJc3RyCUZGCS0JCS0JLS0tLS0JRjI1IGZ1bmN0aW9uIGtleQorI2tleV9mMjYJCQlrZjI2CXN0cglGRwktCQktCS0tLS0tCUYyNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjI3CQkJa2YyNwlzdHIJRkgJLQkJLQktLS0tLQlGMjcgZnVuY3Rpb24ga2V5Cisja2V5X2YyOAkJCWtmMjgJc3RyCUZJCS0JCS0JLS0tLS0JRjI4IGZ1bmN0aW9uIGtleQorI2tleV9mMjkJCQlrZjI5CXN0cglGSgktCQktCS0tLS0tCUYyOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMwCQkJa2YzMAlzdHIJRksJLQkJLQktLS0tLQlGMzAgZnVuY3Rpb24ga2V5Cisja2V5X2YzMQkJCWtmMzEJc3RyCUZMCS0JCS0JLS0tLS0JRjMxIGZ1bmN0aW9uIGtleQorI2tleV9mMzIJCQlrZjMyCXN0cglGTQktCQktCS0tLS0tCUYzMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjMzCQkJa2YzMwlzdHIJRk4JLQkJLQktLS0tLQlGMzMgZnVuY3Rpb24ga2V5Cisja2V5X2YzNAkJCWtmMzQJc3RyCUZPCS0JCS0JLS0tLS0JRjM0IGZ1bmN0aW9uIGtleQorI2tleV9mMzUJCQlrZjM1CXN0cglGUAktCQktCS0tLS0tCUYzNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjM2CQkJa2YzNglzdHIJRlEJLQkJLQktLS0tLQlGMzYgZnVuY3Rpb24ga2V5Cisja2V5X2YzNwkJCWtmMzcJc3RyCUZSCS0JCS0JLS0tLS0JRjM3IGZ1bmN0aW9uIGtleQorI2tleV9mMzgJCQlrZjM4CXN0cglGUwktCQktCS0tLS0tCUYzOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM5CQkJa2YzOQlzdHIJRlQJLQkJLQktLS0tLQlGMzkgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MAkJCWtmNDAJc3RyCUZVCS0JCS0JLS0tLS0JRjQwIGZ1bmN0aW9uIGtleQorI2tleV9mNDEJCQlrZjQxCXN0cglGVgktCQktCS0tLS0tCUY0MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQyCQkJa2Y0MglzdHIJRlcJLQkJLQktLS0tLQlGNDIgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MwkJCWtmNDMJc3RyCUZYCS0JCS0JLS0tLS0JRjQzIGZ1bmN0aW9uIGtleQorI2tleV9mNDQJCQlrZjQ0CXN0cglGWQktCQktCS0tLS0tCUY0NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ1CQkJa2Y0NQlzdHIJRloJLQkJLQktLS0tLQlGNDUgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NgkJCWtmNDYJc3RyCUZhCS0JCS0JLS0tLS0JRjQ2IGZ1bmN0aW9uIGtleQorI2tleV9mNDcJCQlrZjQ3CXN0cglGYgktCQktCS0tLS0tCUY0NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ4CQkJa2Y0OAlzdHIJRmMJLQkJLQktLS0tLQlGNDggZnVuY3Rpb24ga2V5Cisja2V5X2Y0OQkJCWtmNDkJc3RyCUZkCS0JCS0JLS0tLS0JRjQ5IGZ1bmN0aW9uIGtleQorI2tleV9mNTAJCQlrZjUwCXN0cglGZQktCQktCS0tLS0tCUY1MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjUxCQkJa2Y1MQlzdHIJRmYJLQkJLQktLS0tLQlGNTEgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MgkJCWtmNTIJc3RyCUZnCS0JCS0JLS0tLS0JRjUyIGZ1bmN0aW9uIGtleQorI2tleV9mNTMJCQlrZjUzCXN0cglGaAktCQktCS0tLS0tCUY1MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU0CQkJa2Y1NAlzdHIJRmkJLQkJLQktLS0tLQlGNTQgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NQkJCWtmNTUJc3RyCUZqCS0JCS0JLS0tLS0JRjU1IGZ1bmN0aW9uIGtleQorI2tleV9mNTYJCQlrZjU2CXN0cglGawktCQktCS0tLS0tCUY1NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjU3CQkJa2Y1NwlzdHIJRmwJLQkJLQktLS0tLQlGNTcgZnVuY3Rpb24ga2V5Cisja2V5X2Y1OAkJCWtmNTgJc3RyCUZtCS0JCS0JLS0tLS0JRjU4IGZ1bmN0aW9uIGtleQorI2tleV9mNTkJCQlrZjU5CXN0cglGbgktCQktCS0tLS0tCUY1OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYwCQkJa2Y2MAlzdHIJRm8JLQkJLQktLS0tLQlGNjAgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MQkJCWtmNjEJc3RyCUZwCS0JCS0JLS0tLS0JRjYxIGZ1bmN0aW9uIGtleQorI2tleV9mNjIJCQlrZjYyCXN0cglGcQktCQktCS0tLS0tCUY2MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjYzCQkJa2Y2MwlzdHIJRnIJLQkJLQktLS0tLQlGNjMgZnVuY3Rpb24ga2V5CisjCisjIElCTSBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBJQk0KKyMgdGVybWluZm8gZmlsZXMuCisjCisjIFRoZSBwbGFjZXMgaW4gdGhlIGJveFsxMl0gY2FwYWJpbGl0aWVzIGNvcnJlc3BvbmQgdG8gYWNzYyBjaGFyYWN0ZXJzLCBoZXJlIGlzCisjIHRoZSBtYXBwaW5nOgorIworIwlib3gxWzBdICA9IEFDU19VTENPUk5FUgorIwlib3gxWzFdICA9IEFDU19ITElORQkKKyMJYm94MVsyXSAgPSBBQ1NfVVJDT1JORVIKKyMJYm94MVszXSAgPSBBQ1NfVkxJTkUKKyMJYm94MVs0XSAgPSBBQ1NfTFJDT1JORVIKKyMJYm94MVs1XSAgPSBBQ1NfTExDT1JORVIKKyMJYm94MVs2XSAgPSBBQ1NfVFRFRQorIwlib3gxWzddICA9IEFDU19SVEVFCisjCWJveDFbOF0gID0gQUNTX0JURUUKKyMJYm94MVs5XSAgPSBBQ1NfTFRFRQorIwlib3gxWzEwXSA9IEFDU19QTFVTCisjCisjIFRoZSBib3gyIGNoYXJhY3RlcnMgYXJlIHRoZSBkb3VibGUtbGluZSB2ZXJzaW9ucyBvZiB0aGVzZSBmb3JtcyBncmFwaGljcy4KKyMKK2JveF9jaGFyc18xCQkJYm94MQlzdHIJYngJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBwcmltYXJ5IHNldAorI2JveF9jaGFyc18yCQkJYm94MglzdHIJYnkJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBzZWNvbmRhcnkgc2V0CisjYm94X2F0dHJfMQkJCWJhdHQxCXN0cglCeAktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDEKKyNib3hfYXR0cl8yCQkJYmF0dDIJc3RyCUJ5CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MgorI2NvbG9yX2JnXzAJCQljb2xiMAlzdHIJZDAJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9iZ18xCQkJY29sYjEJc3RyCWQxCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAxCisjY29sb3JfYmdfMgkJCWNvbGIyCXN0cglkMgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMgorI2NvbG9yX2JnXzMJCQljb2xiMwlzdHIJZDMJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9iZ180CQkJY29sYjQJc3RyCWQ0CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA0CisjY29sb3JfYmdfNQkJCWNvbGI1CXN0cglkNQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNQorI2NvbG9yX2JnXzYJCQljb2xiNglzdHIJZDYJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9iZ183CQkJY29sYjcJc3RyCWQ3CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA3CisjY29sb3JfZmdfMAkJCWNvbGYwCXN0cgljMAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMAorI2NvbG9yX2ZnXzEJCQljb2xmMQlzdHIJYzEJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDEKKyNjb2xvcl9mZ18yCQkJY29sZjIJc3RyCWMyCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAyCisjY29sb3JfZmdfMwkJCWNvbGYzCXN0cgljMwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMworI2NvbG9yX2ZnXzQJCQljb2xmNAlzdHIJYzQJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDQKKyNjb2xvcl9mZ181CQkJY29sZjUJc3RyCWM1CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA1CisjY29sb3JfZmdfNgkJCWNvbGY2CXN0cgljNgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNgorI2NvbG9yX2ZnXzcJCQljb2xmNwlzdHIJYzcJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDcKKyNmb250XzAJCQkJZm9udDAJc3RyCWYwCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMAorI2ZvbnRfMQkJCQlmb250MQlzdHIJZjEJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAxCisjZm9udF8yCQkJCWZvbnQyCXN0cglmMgktCQktCS0tLS0tCXNlbGVjdCBmb250IDIKKyNmb250XzMJCQkJZm9udDMJc3RyCWYzCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMworI2ZvbnRfNAkJCQlmb250NAlzdHIJZjQJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA0CisjZm9udF81CQkJCWZvbnQ1CXN0cglmNQktCQktCS0tLS1LCXNlbGVjdCBmb250IDUKKyNmb250XzYJCQkJZm9udDYJc3RyCWY2CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNgorI2ZvbnRfNwkJCQlmb250NwlzdHIJZjcJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA3Cisja2V5X2JhY2tfdGFiCQkJa2J0YWIJc3RyCWswCS0JCS0JLS0tLS0JYmFja3RhYiBrZXkKKyNrZXlfZG8JCQkJa2RvCXN0cglraQktCQktCS0tLS1LCWRvIHJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmQJCQlrY21kCXN0cglrZAktCQktCS0tLS1LCWNvbW1hbmQtcmVxdWVzdCBrZXkKKyNrZXlfY29tbWFuZF9wYW5lCQlrY3BuCXN0cglrVwktCQktCS0tLS1LCWNvbW1hbmQtcGFuZSBrZXkKKyNrZXlfZW5kCQkJa2VuZAlzdHIJa3cJLQkJLQktLS0tLQllbmQga2V5Cisja2V5X2hlbHAJCQlraGxwCXN0cglrcQktCQktCS0tLS0tCWhlbHAga2V5Cisja2V5X25ld2xpbmUJCQlrbmwJc3RyCW5sCS0JCS0JLS0tLUsJbmV3bGluZSBrZXkKKyNrZXlfbmV4dF9wYW5lCQkJa25wbglzdHIJa3YJLQkJLQktLS0tSwluZXh0LXBhbmUga2V5Cisja2V5X3ByZXZfY21kCQkJa3BwbglzdHIJa3AJLQkJLQktLS0tSwlwcmV2aW91cy1jb21tYW5kIGtleQorI2tleV9wcmV2X3BhbmUJCQlrcHBuCXN0cglrVgktCQktCS0tLS1LCXByZXZpb3VzLXBhbmUga2V5Cisja2V5X3F1aXQJCQlrcXVpdAlzdHIJa1EJLQkJLQktLS0tSwlxdWl0IGtleQorI2tleV9zZWxlY3QJCQlrc2VsCXN0cglrVQktCQktCS0tLS0tCXNlbGVjdCBrZXkKKyNrZXlfc2Nyb2xsX2xlZnQJCWtzY2wJc3RyCWt6CS0JCS0JLS0tLUsJc2Nyb2xsIGxlZnQKKyNrZXlfc2Nyb2xsX3JpZ2h0CQlrc2NyCXN0cglrWgktCQktCS0tLS1LCXNjcm9sbCByaWdodAorI2tleV90YWIJCQlrdGFiCXN0cglrbwktCQktCS0tLS1LCXRhYiBrZXkKKyNrZXlfc21hcF9pbjEJCQlrbXBmMQlzdHIJS3YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBpbnB1dAorI2tleV9zbWFwX291dDEJCQlrbXB0MQlzdHIJS1YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBvdXRwdXQKKyNrZXlfc21hcF9pbjIJCQlrbXBmMglzdHIJS3cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBpbnB1dAorI2tleV9zbWFwX291dDIJCQlrbXB0MglzdHIJS1cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBvdXRwdXQKKyNrZXlfc21hcF9pbjMJCQlrbXBmMwlzdHIJS3gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBpbnB1dAorI2tleV9zbWFwX291dDMJCQlrbXB0MwlzdHIJS1gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBvdXRwdXQKKyNrZXlfc21hcF9pbjQJCQlrbXBmNAlzdHIJS3kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBpbnB1dAorI2tleV9zbWFwX291dDQJCQlrbXB0NAlzdHIJS1kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBvdXRwdXQKKyNrZXlfc21hcF9pbjUJCQlrbXBmNQlzdHIJS3oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBpbnB1dAorI2tleV9zbWFwX291dDUJCQlrbXB0NQlzdHIJS1oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBvdXRwdXQKKyNhcHBsX2RlZmluZWRfc3RyCQlhcHN0cglzdHIJemEJLQkJLQktLS0tSwlhcHBsaWNhdGlvbi1kZWZpbmVkIHN0cmluZworIyBUaGUga2V5X3NtYXBfaW5bNjc4OV0gYW5kIGtleV9zbWFwX291dFs2Nzg5XSBjYXBhYmlsaXRpZXMgYXJlbid0IGRlc2NyaWJlZCBpbgorIyB0aGUgSUJNIG1hbnVhbCBwYWdlcywgc28gdGhlIGNhcCBuYW1lIHN0cmluZ3MgYXJlIGd1ZXNzZXMuICBUaGUgdGVybWluZm8KKyMgbmFtZXMgYXJlIGFsbW9zdCBjZXJ0YWlubHkgcmlnaHQsIHRoZSB0ZXJtY2FwIG9uZXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZy4KKyNrZXlfc21hcF9pbjYJCQlrbXBmNglzdHIJayEJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBpbnB1dAorI2tleV9zbWFwX291dDYJCQlrbXB0NglzdHIJS0AJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBvdXRwdXQKKyNrZXlfc21hcF9pbjcJCQlrbXBmNwlzdHIJayMJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBpbnB1dAorI2tleV9zbWFwX291dDcJCQlrbXB0NwlzdHIJSyQJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBvdXRwdXQKKyNrZXlfc21hcF9pbjgJCQlrbXBmOAlzdHIJayUJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBpbnB1dAorI2tleV9zbWFwX291dDgJCQlrbXB0OAlzdHIJS14JLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBvdXRwdXQKKyNrZXlfc21hcF9pbjkJCQlrbXBmOQlzdHIJayYJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBpbnB1dAorI2tleV9zbWFwX291dDkJCQlrbXB0OQlzdHIJSyoJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBvdXRwdXQKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZQorI2tleV9zZjEJCQlrc2YxCXN0cglTMQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEKKyNrZXlfc2YyCQkJa3NmMglzdHIJUzIJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAyCisja2V5X3NmMwkJCWtzZjMJc3RyCVMzCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMworI2tleV9zZjQJCQlrc2Y0CXN0cglTNAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDQKKyNrZXlfc2Y1CQkJa3NmNQlzdHIJUzUJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA1Cisja2V5X3NmNgkJCWtzZjYJc3RyCVM2CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNgorI2tleV9zZjcJCQlrc2Y3CXN0cglTNwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDcKKyNrZXlfc2Y4CQkJa3NmOAlzdHIJUzgJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA4Cisja2V5X3NmOQkJCWtzZjkJc3RyCVM5CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOQorI2tleV9zZjEwCQkJa3NmMTAJc3RyCVNBCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMTAKKyMgQUlYIHZlcnNpb24gMyBkb2N1bWVudHMgZGlmZmVyZW50IGNvZGVzIGZvciBGMTEsIEYxMiBhbmQgZG9lcyBub3QgbWVudGlvbgorIyBGMTMtRjY0LiAgQUlYIHZlcnNpb24gNCB1c2VzIHRoZSBzYW1lIG5hbWluZyBmb3IgRjAtRjYzIGFzIGFib3ZlLgorI2tleV9mMTEJCQlrZjExCXN0cglrPAktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMQorI2tleV9mMTIJCQlrZjEyCXN0cglrPgktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMgorIyBVbmRvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIGVuZCBoZXJlLgorI2tleV9hY3Rpb24JCQlrYWN0CXN0cglrSgktCQktCS0tLS1LCXNlbnQgYnkgYWN0aW9uIGtleQorIyBUaGUgSUJNIGRvY3Mgc2F5IHRoZXNlIGNhcGFiaWxpdGllcyBhcmUgZm9yIHRhYmxlLWRyYXdpbmcsIGFuZCBhcmUKKyMgdmFsaWQgb25seSBmb3IgYWl4dGVybSBkZXNjcmlwdGlvbnMuCisjZW50ZXJfdG9wbGluZV9tb2RlCQl0b3BsCXN0cgl0cAktCQktCS0tLS1LCXN0YXJ0IHRvcC1saW5lIG1vZGUKKyNlbnRlcl9ib3R0b21fbW9kZQkJYnRtbAlzdHIJYm0JLQkJLQktLS0tSwlzdGFydCBib3R0b20tbGluZSBtb2RlCisjZW50ZXJfcnZlcnRfbW9kZQkJcnZlcnQJc3RyCXJ2CS0JCS0JLS0tLUsJc3RhcnQgcmlnaHQtdmVydGljYWwgbW9kZQorI2VudGVyX2x2ZXJ0X21vZGUJCWx2ZXJ0CXN0cglsdgktCQktCS0tLS1LCXN0YXJ0IGxlZnQtdmVydGljYWwgbW9kZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQUxJQVMgREVDTEFSQVRJT05TCisjCisjIEhlcmUgd2Ugc2V0IHVwIGFsaWFzZXMgZm9yIHRyYW5zbGF0aW5nIGV4dGVuc2lvbnMgaW50byBzdGFuZGFyZCB0ZXJtaW5mby4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1jYXAgYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEJTRCBhbGlhc2VzOgorIworIyBUaGlzIGlzIGEgY29tbW9uIGVycm9yIGluIG1hbnkgdGVybWNhcCBmaWxlcy4gIFdlJ2xsIGdldCBub3RpZmllZCBkdXJpbmcKKyMgdHJhbnNsYXRpb24gd2hlbiB0aGlzIChvciBhbnkgb3RoZXIgYWxpYXMpIGZpcmVzLgorIworY2FwYWxpYXMJc2IJc3IJQlNECXNjcm9sbCB0ZXh0IGRvd24KKyMKKyMgQVQmVCBleHRlbnNpb25zOgorIworIyBUaGUgb2xkIEFUJlQgNTQxMCwgNTQyMCwgNTQyNSwgcGM2MzAwcGx1cywgNjEwLCBhbmQgczQgZW50cmllcyB1c2VkIGEgc2V0IG9mCisjIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcy4gIEl0cyBzaWduYXR1cmUgaXMgdGhlIEtNIGNhcGFiaWxpdHksIHVzZWQgdG8gbmFtZQorIyBzb21lIHNvcnQgb2Yga2V5bWFwIGZpbGUuICBFRSwgQk8sIENJLCBDViwgWFMsIERTLCBGTCBhbmQgRkUgYXJlIGluIHRoaXMKKyMgc2V0LiAgQ29tbWVudHMgaW4gdGhlIG9yaWdpbmFsLCBhbmQgYSBsaXR0bGUgY3Jvc3MtY2hlY2tpbmcgd2l0aCBvdGhlciBBVCZUCisjIGRvY3VtZW50YXRpb24sIHNlZW0gdG8gZXN0YWJsaXNoIHRoZSBmb2xsb3dpbmcgbWFwcGluZ3M6CisjCitjYXBhbGlhcwlCTwltcglBVCZUCWVudGVyX3JldmVyc2VfbW9kZQorY2FwYWxpYXMJQ0kJdmkJQVQmVAljdXJzb3JfaW52aXNpYmxlCitjYXBhbGlhcwlDVgl2ZQlBVCZUCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCURTCW1oCUFUJlQJZW50ZXJfZGltX21vZGUKKyNjYXBhbGlhcwlFRQltZQlBVCZUCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlGRQlMRglBVCZUCWxhYmVsX29uCitjYXBhbGlhcwlGTAlMTwlBVCZUCWxhYmVsX29mZgorY2FwYWxpYXMJWFMJbWsJQVQmVAllbnRlcl9zZWN1cmVfbW9kZQorIworIyBXZSBjb21tZW50IG91dCBFRSBiZWNhdXNlIHRoZSBjb25mbGljdGluZyBYRU5JWCBFRSBpcyBtb3JlIGNvbW1vbiBpbiAKKyMgb2xkIGVudHJpZXMuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFRoZXNlIGFyZSB0aGUgb25lcyB3ZSBrbm93IGhvdyB0byB0cmFuc2xhdGUgZGlyZWN0bHk6CisjCitjYXBhbGlhcwlFRQltaAlYRU5JWAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJR0UJYWUJWEVOSVgJZXhpdF9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlHUwlhcwlYRU5JWAllbnRlcl9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlDRgl2aQlYRU5JWAljdXJzb3JfaW52aXMKK2NhcGFsaWFzCUNPCXZlCVhFTklYCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCUVOCUA3CVhFTklYCWtleV9lbmQKK2NhcGFsaWFzCUhNCWtoCVhFTklYCWtleV9ob21lCitjYXBhbGlhcwlMRAlrTAlYRU5JWAlrZXlfZGwKK2NhcGFsaWFzCVBECWtOCVhFTklYCWtleV9ucGFnZQorY2FwYWxpYXMJUE4JcG8JWEVOSVgJcHJ0cl9vZmYKK2NhcGFsaWFzCVBTCXBmCVhFTklYCXBydHJfb24KK2NhcGFsaWFzCVBVCWtQCVhFTklYCWtleV9wcGFnZQorY2FwYWxpYXMJUlQJQDgJWEVOSVgJa2VudAorY2FwYWxpYXMJVVAJa3UJWEVOSVgJa2N1dTEKK2NhcGFsaWFzCUc2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VMQ09STkVSCitjYXBhbGlhcwlHNwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MTENPUk5FUgorY2FwYWxpYXMJRzUJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVVJDT1JORVIKK2NhcGFsaWFzCUc4CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xSQ09STkVSCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MVEVFCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19SVEVFCitjYXBhbGlhcwlHdQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19CVEVFCitjYXBhbGlhcwlHZAlJR05PUkUJWEVOSVgJZG91YmxlIEFDU19UVEVFCitjYXBhbGlhcwlHaAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19ITElORQorY2FwYWxpYXMJR3YJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVkxJTkUKK2NhcGFsaWFzCUdjCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1BMVVMKK2NhcGFsaWFzCUdHCUlHTk9SRQlYRU5JWAlhY3MtZ2xpdGNoCisjCisjIElCTSBleHRlbnNpb25zOgorIworY2FwYWxpYXMJa3EJJTEJSUJNCWtleV9oZWxwCisjCisjIElyaXMgZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUhTCW1oCUlSSVMJZW50ZXJfZGltX21vZGUKKyMKKyMgVGVrdHJvbml4IGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlLQQlrOwlUZWsJa2V5X2YxMAorY2FwYWxpYXMJS0IJRjEJVGVrCWtleV9mMTEKK2NhcGFsaWFzCUtDCUYyCVRlawlrZXlfZjEyCitjYXBhbGlhcwlLRAlGMwlUZWsJa2V5X2YxMworY2FwYWxpYXMJS0UJRjQJVGVrCWtleV9mMTQKK2NhcGFsaWFzCUtGCUY1CVRlawlrZXlfZjE1CitjYXBhbGlhcwlCQwlTYglUZWsJc2V0X2JhY2tncm91bmQKK2NhcGFsaWFzCUZDCVNmCVRlawlzZXRfZm9yZWdyb3VuZAorIworIyBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nOgorIworIwlYRU5JWAlYRU5JWCB2YXJpYWJsZSBuYW1lCW5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbz8KKyMJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUNMCWtleV9jaGFyX2xlZnQKKyMJQ1IJa2V5X2NoYXJfcmlnaHQKKyMJQ1cJa2V5X2NoYW5nZV93aW5kb3cKKyMJSFAJPz8KKyMJTEYJa2V5X2xpbmVmZWVkIAkJbGFiZWxfb2ZmCisjCU5VCWtleV9uZXh0X3VubG9ja2VkX2NlbGwKKyMJUEwJPz8KKyMJUFIJPz8KKyMJUkMJa2V5X3JlY2FsYwkJcmVtb3ZlX2Nsb2NrCisjCVJGCWtleV90b2dnbGVfcmVmCQlyZXFfZm9yX2lucHV0CisjCVdMCWtleV93b3JkX2xlZnQKKyMJV1IJa2V5X3dvcmRfcmlnaHQKKyMKKyMgSWYgeW91IGtub3cgd2hhdCBhbnkgb2YgdGhlIHF1ZXN0aW9uLW1hcmtlZCBvbmVzIG1lYW4sIHBsZWFzZSB0ZWxsIHVzLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtaW5mbyBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2luZm9hbGlhcwlmb250MAlzMGRzCUlCTQlzZXQwX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MQlzMWRzCUlCTQlzZXQxX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MglzMmRzCUlCTQlzZXQyX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MwlzM2RzCUlCTQlzZXQzX2Rlc19zZXEKK2luZm9hbGlhcwlrYnRhYglrY2J0CUlCTQlrZXlfYmFja3RhYgoraW5mb2FsaWFzCWtzZWwJa3NsdAlJQk0Ja2V5X3NlbGVjdAorIworIyBTb21lIG90aGVycyBhcmUgaWRlbnRpY2FsIHRvIFNWcjQvWFBHNCBjYXBhYmlsaXRpZXMsIGluIHBhcnRpY3VsYXI6CisjIGtjbWQsIGtlbmQsIGtobHAsIGFuZCBrZjExLi4ua2Y2My4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyB0cnVuY2F0ZS1saW5lczp0CisjIEVuZDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvQ2Fwcy5haXg0IGIvaW5jbHVkZS9DYXBzLmFpeDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5MTNkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvQ2Fwcy5haXg0CkBAIC0wLDAgKzEsMTI1NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBEaWNrZXkKKyMKKyMgJElkOiBDYXBzLmFpeDQsdiAxLjcgMjAwNi8wNS8yNyAxNTozMzowNCB0b20gRXhwICQKKyMKKyMgVGhpcyBpcyBhbiBhZGFwdGF0aW9uIG9mIG5jdXJzZXMnIHRlcm1jYXAvdGVybWluZm8gY2FwYWJpbGl0eSB0YWJsZSwgd2hpY2gKKyMgaXMgZGVzaWduZWQgdG8gYWxpZ24gd2l0aCBBSVggNC54J3MgdGVybWluZm8uCisjCisjIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBpbml0aWFsaXplcnMgZm9yIHRhYmxlcyB0aGF0IGRyaXZlIHRpYywKKyMgaW5mb2NtcCwgYW5kIHRoZSBsaWJyYXJ5IGNvbXBpbGF0aW9uIGNvZGUgdXNlZCB0byBzdXBwb3J0IHRoZSB0ZXJtY2FwIAorIyBjb21wYXRpYmlsaXR5IGhhY2suICBJdCBpcyBhbHNvIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYnVsYXIgcG9ydGlvbiBvZiB0aGUKKyMgdGVybWluZm8oNSkgbWFuIHBhZ2U7IGxpbmVzIGJlZ2lubmluZyB3aXRoIGAjJScgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGJlY29tZQorIyB0aGUgdGVybWluZm8gdGFibGUuCisjCisjIFRoaXMgZmlsZSBoYXMgdGhyZWUgbWFqb3Igc2VjdGlvbnM7IGEgc3RhbmRhcmQtY2FwYWJpbGl0aWVzIHRhYmxlLCB0d28KKyMgZXh0ZW5zaW9uLWNhcGFiaWxpdHkgdGFibGVzLCBhbmQgYSBzZWN0aW9uIG9mIGFsaWFzZXMgZGVjbGFyYXRpb25zLgorIyBUaGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgZm9ybWF0LCBhcyBmb2xsb3dzOgorIworIyBGSUxFIEZPUk1BVAorIworIyBDb2x1bW4gMTogdGVybWluZm8gdmFyaWFibGUgbmFtZQorIyBDb2x1bW4gMjogdGVybWluZm8gY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiAzOiBjYXBhYmlsaXR5IHR5cGUgKGJvb2xlYW4sIG51bWVyaWMsIG9yIHN0cmluZykKKyMgQ29sdW1uIDQ6IHRlcm1jYXAgY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiA1OiBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNjogdmFsdWUgZm9yIEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA3OiBMZWFkIHdpdGggYFknIGlmIGNhcGFiaWxpdHkgc2hvdWxkIGJlIGVtaXR0ZWQgaW4gdGVybWNhcAorIyAgICAgICAgICAgdHJhbnNsYXRpb25zLCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA4OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uCisjCisjIFRoZSBjb2RlcyBmb2xsb3dpbmcgW1ktXSBpbiBjb2x1bW4gNyBkZXNjcmliZSB0aGUgdmVyc2lvbnMgb2YgdGVybWNhcCB3aGljaAorIyB1c2UgdGhlIGdpdmVuIGNhcGFiaWxpdHkuICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJzZXMgbGlicmFyeQorIyBwcm9wZXI7IHJhdGhlciwgaXQncyB0aGVyZSB0byBoZWxwIHRoZSB0ZXJtaW5mbyBtYWludGFpbmVyIGF2b2lkIGVtaXR0aW5nCisjIHRlcm1jYXAgZW50cnkgdHJhbnNsYXRpb25zIHRoYXQgYXJlIG1vcmUgdGhhbiAxMDIzIGJ5dGVzIGxvbmcgKGFuZCB0YW5rIGEKKyMgbG90IG9mIG9sZCB0ZXJtY2FwLXVzaW5nIHByb2dyYW1zKS4gIFRoZSBjb2RlcyByZWFkIGFzIGZvbGxvd3M6CisjCUIgPSBtZW50aW9uZWQgaW4gdGhlIEJTRCBtYW4gcGFnZSBmb3IgNC40QlNEIGN1cnNlcworIwlDID0gdXNlZCBieSB0aGUgNC40QlNEIGN1cnNlcyBsaWJyYXJ5CisjCUcgPSBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIEdOVSB0ZXJtY2FwCisjCUUgPSB1c2VkIGJ5IEdOVSBFbWFjcworIwlLID0gcmVtb3ZlIHRoaXMgdGVybWluZm8gY2FwYWJpbGl0eSB3aGVuIHRyYW5zbGF0aW5nIHRvIHN0YW5kYXJkIGZvcm1hdAorIyBUaGUgaW1wb3J0YW50IGNvZGVzIGFyZSBDIGFuZCBFLiAgQSBjYXAgd2l0aCBDIG9yIEUgc2hvdWxkIGJlIHByZXNlcnZlZCBpbgorIyB0cmFuc2xhdGlvbiBpZiBwb3NzaWJsZS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgcHJlc2VydmluZyBhbGwgc3VjaCBjYXBzIG1heQorIyBsZWFkIHRvIHNvbWUgdGVybWNhcCB0cmFuc2xhdGlvbnMgYmVpbmcgdG9vIGxvbmcuICBUaGUgdGVybWNhcCBtYWludGFpbmVyCisjIGhhcyBhIGJpdCBvZiBhIGp1Z2dsaW5nIGFjdCB0byBkby4uLnBvdGVudGlhbCBwcm9ibGVtIGNhc2VzIGFyZSBtYXJrZWQgd2l0aAorIyBhbiBhc3RlcmlzayAoKikuCisjCisjIFRoZSBhbGlhc2VzIHNlY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIworIyBDb2x1bW4gMTogZWl0aGVyIGBjYXBhbGlhcycgb3IgYGluZm9hbGlhcycKKyMgQ29sdW1uIDI6IG5hbWUgdG8gYmUgYWxpYXNlZAorIyBDb2x1bW4gMzogd2hhdCBuYW1lIGl0IHNob3VsZCB0cmFuc2xhdGUgdG8uICBUaGUgbmFtZSBJR05PUkUgbWVhbnMgaXQKKyMgICAgICAgICAgIHNob3VsZCBiZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS4KKyMgQ29sdW1uIDQ6IG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBzZXQgKHVzZWQgZm9yIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMpCisjIENvbHVtbiA1OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uICh1c3VhbGx5IGFuIGFzc29jaWF0ZWQgdGVybWluZm8gdmFyaWFibGUpCisjCisjIEhBTkRMSU5HIFRFUk1DQVAgQU5EIFRFUk1JTkZPIEVYVEVOU0lPTlMKKyMKKyMgVGhlcmUgYXJlIGJhc2ljYWxseSBmaXZlIGRpZmZlcmVudCB3YXlzIHRvIGhhbmRsZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbworIyBleHRlbnNpb25zOgorIworIyAxLiBEb24ndCBsaXN0IHRoZSBjYXBuYW1lIGhlcmUsIG9yIGxpc3QgaXQgYnV0IGNvbW1lbnQgaXQgb3V0ICh0aGUgbGF0dGVyCisjIGlzIHByZWZlcmFibGU7IHNvbWVvbmUgbWlnaHQgd2FudCB0byBoYW5kbGUgaXQgaW4gdGhlIGZ1dHVyZSkuICBJZiB5b3UgZG8KKyMgdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSB0cmVhdGVkIGFzIHVua25vd24gYW5kIHJhaXNlIGEgd2FybmluZyBmcm9tCisjIHRoZSBjb21waWxlci4KKyMKKyMgMi4gQWxpYXMgaXQuICBUaGlzIGlzIGFwcHJvcHJpYXRlIGlmIHRoZSBjYXBhYmlsaXR5IGhhcyB0aGUgc2FtZSBtZWFuaW5nCisjIGFzIGFuIGFscmVhZHktc3VwcG9ydGVkIG9uZS4gIFRoZSBjb21waWxlciB3aWxsIGhhbmRsZSBhbGlhc2luZywgZW1pdHRpbmcKKyMgYW4gYXBwcm9wcmlhdGUgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdoZW5ldmVyIGFuIGFsaWFzIGZpcmVzLgorIworIyAzLiBMaXN0IGl0IGluIHRoZSBzdGFuZGFyZCB0YWJsZS4gIFlvdSBhbG1vc3QgY2VydGFpbmx5IGRvICpub3QqIHdhbnQKKyMgdG8gZG8gdGhpcyAtLSB0aGUgY2FwYWJpbGl0aWVzIGluIHRoYXQgb25lLCBhbmQgdGhlaXIgb3JkZXIsIGhhdmUgYmVlbgorIyBjYXJlZnVsbHkgY2hvc2VuIHRvIGJlIFNWcjQtYmluYXJ5LWNvbXBhdGlibGUgd2hlbiB0aGV5J3JlIHdyaXR0ZW4gb3V0CisjIGFzIGEgdGVybWluZm8gb2JqZWN0LCBhbmQgYnJlYWtpbmcgdGhpcyB3b3VsZCBiZSBiYWQuICBJdCdzIHVwIHRoZSBuY3Vyc2VzCisjIGxpYnJhcnkgd2hhdCB0byBkbyB3aXRoIHRoZSB0ZXJtaW5mbyBkYXRhIGFmdGVyIGl0J3MgcmVhZCBpbi4KKyMKKyMgNC4gTGlzdCBpdCBpbiB0aGUgYWxpYXNlcyB0YWJsZSB3aXRoIGFuIElHTk9SRSB0YXJnZXQgZmllbGQuICBJZiB5b3UKKyMgZG8gdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkIG9uIGlucHV0ICh0aG91Z2ggdGhlIHVzZXIgd2lsbAorIyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgaXQpLgorIworIyA1LiBMaXN0IGl0IGluIHRoZSBleHRlbnNpb25zIHRhYmxlLiBJZiB5b3UgZG8gdGhpcywgdGhlIGNvbXBpbGVyIHdpbGwKKyMgc2lsZW50bHkgYWNjZXB0IHRoZSBjYXBhYmlsaXR5LCBidXQgdGhlIGN1cnNlcyBsaWJyYXJ5IHByb3BlciB3aWxsIG5ldmVyCisjIHNlZSBpdCAoYmVjYXVzZSBpdCB3b24ndCBiZSB3cml0dGVuIG91dCBhcyBwYXJ0IG9mIHRoZSB0ZXJtaW5mbyBvYmplY3QKKyMgZm9ybWF0KS4gIEl0J3MgdXAgdG8geW91IHdoYXQgeW91IGhhdmUgdGhlIGNvbXBpbGVyIGRvIHdpdGggaXQuCisjCisjIFRoZXJlIGFyZSB0d28gb3Bwb3NpdGUgcmVhc29ucyB0byBjaG9vc2Ugb3B0aW9uIDUuICBPbmUgaXMgd2hlbiB5b3Ugd2FudAorIyB0byBlYXQgdGhlIGNhcGFiaWxpdHkgc2lsZW50bHkgYW5kIGRpc2NhcmQgaXQgd2hlbiBkb2luZyB0cmFuc2xhdGlvbnMKKyMgdG8gdGVybWluZm8gd2l0aCB0aWMgLUkuICBTb21lIHZlcnkgb2xkIG9ic29sZXRlIEJTRCBjYXBzIGxpa2UgOmtuOiBhcmUKKyMgaW4gdGhpcyBjbGFzcy4gIE5vdGhpbmcgd2lsbCBldmVyIHVzZSB0aGVtIGFnYWluLgorIworIyBNb3JlIHVzdWFsbHksIHlvdSB3YW50IHRoZSBjb21waWxlciB0byB0cnkgdG8gZGVkdWNlIHNvbWV0aGluZyBmcm9tIHRoZQorIyBjYXBhYmlsaXR5IHZhbHVlIHRoYXQgaXQgY2FuIHVzZSB0byB0cmFuc2xhdGUgaXQgaW50byB5b3VyIG91dHB1dCBmb3JtYXQuCisjIFlvdSdsbCBuZWVkIHRvIHdyaXRlIGN1c3RvbSBjb2RlLCBwcm9iYWJseSBpbiBwb3N0cHJvY2Vzc190ZXJtY2FwKCkgb3IKKyMgcG9zdHByb2Nlc3NfdGVybWluZm8oKSwgdG8gaGFuZGxlIHRoZSB0cmFuc2xhdGlvbi4KKyMKKyMgQ09OVFJPTExJTkcgRU5UUlkgTEVOR1RIIAorIworIyBOb3RlcyBvbiBzcGVjaWZpYyBlbGlzaW9ucyBtYWRlIHRvIGZpdCB0cmFuc2xhdGlvbnMgd2l0aGluIDEwMjMgYnl0ZXM6CisjCisjIE1hY2hpbmVzIHdpdGggSUJNIFBDLWxpa2Uga2V5Ym9hcmRzIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZworIyBrZXlzOiBrZXlfbnBhZ2UsIGtleV9wcGFnZSwga2V5X2hvbWUsIGtleV9sbCAod2hpY2ggaXMgdXNlZCBmb3IgaW4gdGVybWNhcC0KKyMgb25seSBlbnZpcm9ubWVudHMgZm9yIEVuZCBvciBIb21lLURvd24pLCBrZXlfZGMsIGFuZCBrZXlfaWMuICBUaGlzIGlzIGFsc28KKyMgdGhlIHNldCBvZiBrZXlzIHRoZSBgam9lJyBlZGl0b3Igd2lsbCBiZSB1cHNldCBpZiBpdCBjYW4ndCBzZWUuICBTbyBkb24ndCAKKyMgdHJpbSB0aG9zZSBvdXQgb2YgdGhlIHNldCB0byBiZSB0cmFuc2xhdGVkIHRvIHRlcm1jYXAsIG9yIHZhcmlvdXMgdXNlcnMgb2YKKyMgdGhlIHRlcm1jYXAgZmlsZSB3aWxsIGJlY29tZSBpcmF0ZS4KKyMKKyMgSXQgbWlnaHQgbG9vayB0ZW1wdGluZyB0byBsZWF2ZSB0aG9zZSBsb25nIGluaXQgc3RyaW5ncyBvdXQgb2YgdHJhbnNsYXRpb25zLgorIyBXZSBjYW4ndCBkbyBpdCAoeWV0KTsgNC40QlNEIHRwdXQgYW5kIHRzZXQgdXNlIHRoZW0uCisjCisjIFdlIHJldGFpbiB0aGUgc2dyIGNhcGFiaWxpdHkgaW4gdHJhbnNsYXRpb24gaW4gc3BpdGUgb2YgdGhlIGZhY3QgdGhhdCBuZWl0aGVyCisjIDQuNEJTRCBub3IgR05VIEVtYWNzIHVzZXMgaXQsIGJlY2F1c2UgKGEpIHNvbWUgZW50cnkgbmFtaW5nIGRpc3RpbmN0aW9ucyBhcmUKKyMgaGFyZCB0byB1bmRlcnN0YW5kIHdpdGhvdXQgaXQsIGFuZCAoYikgdGhlIGVudHJpZXMgaW4gd2hpY2ggaXQgaXMgbG9uZyB0ZW5kCisjIHRvIGJlIG9sZGVyIHR5cGVzIHRoYXQgZG9uJ3QgdXNlIHVwIGEgbG90IG9mIHN0cmluZyBzcGFjZSBvbiBmdW5jdGlvbiBrZXlzLgorIyBUaGUgdGljKDEpIHRyYW5zbGF0aW9uIGNvZGUgd2lsbCBjb21wbGFpbiBhbmQgZWxpZGUgaXQgaWYgaXQgbWFrZXMgYSBjcml0aWNhbAorIyBkaWZmZXJlbmNlICh0aGVyZSBpcyBzcGVjaWFsIGNvZGUgaW4gdGljIHRvIHJlY29nbml6ZSB0aGlzIHNpdHVhdGlvbikuCisjCisjIFllcywgQlNEIHRzZXQoMSkgdXNlcyBocGEuICBXZSBlbGlkZSBocGEvdnBhIGFueXdheSBiZWNhdXNlIHRoZSBtb3Rpb24KKyMgb3B0aW1pemVyIGluIEJTRCBjdXJzZXMgZGlkbid0IHVzZSB0aGVtLiAgVGhpcyBvbWlzc2lvbiBzZWVtcyB0byBiZSB0aGUKKyMgc2luZ2xlIG1vc3QgZWZmZWN0aXZlIG9uZSwgaXQgc2hvcnRlbmVkIHRoZSByZXNvbHZlZCBsZW5ndGggb2YgYWxsIHRoaXJ0ZWVuCisjIHByb2JsZW0gZW50cmllcyBpbiB0aGUgOS45LjAgdmVyc2lvbiBvZiB0aGUgdGVybWluZm8gbWFzdGVyIGJlbG93IGNyaXRpY2FsLgorIworIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGtlZXAgZjExIGFuZCBmMTIgZm9yIEVtYWNzIHVzZSwgYnV0IGEgY291cGxlIG9mIHRlcm1jYXAKKyMgdHJhbnNsYXRpb25zIGdvIGJhY2sgb3ZlciBjcml0aWNhbCBpZiB3ZSBkbyB0aGlzLiAgQXMgNC40QlNEIGN1cnNlcyBmYWRlcworIyBpbnRvIGhpc3RvcnkgYW5kIEdOVSB0ZXJtY2FwJ3MgYXBwbGljYXRpb24gYmFzZSBzaHJpbmtzIHRvd2FyZHMgYmVpbmcgR05VIAorIyBFbWFjcyBvbmx5LCB3ZSdsbCBwcm9iYWJseSBlbGlkZSBvdXQgc29tZSBCU0Qtb25seSBjYXBhYmlsaXRpZXMgaW4gb3JkZXIKKyMgdG8gYnV5IHNwYWNlIGZvciBub24tZXNzZW50aWFscyBFbWFjcyBpcyBzdGlsbCB1c2luZy4gIENhcGFiaWxpdGllcyBoaWdoCisjIG9uIHRoYXQgaGl0IGxpc3Q6IHJjLCBzYywgdWMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBTVEFOREFSRCBDQVBBQklMSVRJRVMKKyMKKyMlVGhlIGZvbGxvd2luZyBpcyBhIGNvbXBsZXRlIHRhYmxlIG9mIHRoZSBjYXBhYmlsaXRpZXMgaW5jbHVkZWQgaW4gYQorIyV0ZXJtaW5mbyBkZXNjcmlwdGlvbiBibG9jayBhbmQgYXZhaWxhYmxlIHRvIHRlcm1pbmZvLXVzaW5nIGNvZGUuICBJbiBlYWNoCisjJWxpbmUgb2YgdGhlIHRhYmxlLAorIyUKKyMlVGhlIFxmQnZhcmlhYmxlXGZSIGlzIHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBwcm9ncmFtbWVyIChhdCB0aGUgdGVybWluZm8gbGV2ZWwpCisjJWFjY2Vzc2VzIHRoZSBjYXBhYmlsaXR5LgorIyUKKyMlVGhlIFxmQmNhcG5hbWVcZlIgaXMgdGhlIHNob3J0IG5hbWUgdXNlZCBpbiB0aGUgdGV4dCBvZiB0aGUgZGF0YWJhc2UsCisjJWFuZCBpcyB1c2VkIGJ5IGEgcGVyc29uIHVwZGF0aW5nIHRoZSBkYXRhYmFzZS4KKyMlV2hlbmV2ZXIgcG9zc2libGUsIGNhcG5hbWVzIGFyZSBjaG9zZW4gdG8gYmUgdGhlIHNhbWUgYXMgb3Igc2ltaWxhciB0bworIyV0aGUgQU5TSSBYMy42NC0xOTc5IHN0YW5kYXJkIChub3cgc3VwZXJzZWRlZCBieSBFQ01BLTQ4LCB3aGljaCB1c2VzIAorIyVpZGVudGljYWwgb3IgdmVyeSBzaW1pbGFyIG5hbWVzKS4gIFNlbWFudGljcyBhcmUgYWxzbyBpbnRlbmRlZCB0byBtYXRjaAorIyV0aG9zZSBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKyMlCisjJVRoZSB0ZXJtY2FwIGNvZGUgaXMgdGhlIG9sZAorIyUuQiB0ZXJtY2FwCisjJWNhcGFiaWxpdHkgbmFtZSAoc29tZSBjYXBhYmlsaXRpZXMgYXJlIG5ldywgYW5kIGhhdmUgbmFtZXMgd2hpY2ggdGVybWNhcAorIyVkaWQgbm90IG9yaWdpbmF0ZSkuCisjJS5QCisjJUNhcGFiaWxpdHkgbmFtZXMgaGF2ZSBubyBoYXJkIGxlbmd0aCBsaW1pdCwgYnV0IGFuIGluZm9ybWFsIGxpbWl0IG9mIDUKKyMlY2hhcmFjdGVycyBoYXMgYmVlbiBhZG9wdGVkIHRvIGtlZXAgdGhlbSBzaG9ydCBhbmQgdG8gYWxsb3cgdGhlIHRhYnMgaW4KKyMldGhlIHNvdXJjZSBmaWxlCisjJS5CIENhcHMKKyMldG8gbGluZSB1cCBuaWNlbHkuCisjJQorIyVGaW5hbGx5LCB0aGUgZGVzY3JpcHRpb24gZmllbGQgYXR0ZW1wdHMgdG8gY29udmV5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlCisjJWNhcGFiaWxpdHkuICBZb3UgbWF5IGZpbmQgc29tZSBjb2RlcyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQ6CisjJS5UUAorIyUoUCkKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgYmUgc3BlY2lmaWVkCisjJS5UUAorIyUjWzEtOV0KKyMlaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRocm91Z2ggdHBhcm0gd2l0aAorIyVwYXJtcyBhcyBnaXZlbiAoI1xmSWlcZlApLgorIyUuVFAKKyMlKFAqKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSB2YXJ5IGluIHByb3BvcnRpb24gdG8gdGhlIG51bWJlciBvZgorIyVsaW5lcyBhZmZlY3RlZAorIyUuVFAKKyMlKCNcZFxmSWlcZlBcdSkKKyMlaW5kaWNhdGVzIHRoZSBcZklpXGZQXHV0aFxkIHBhcmFtZXRlci4KKyMlCisjJS5QUAorIyUgVGhlc2UgYXJlIHRoZSBib29sZWFuIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJCb29sZWFucwluYW1lCUNvZGVcZlIKK2F1dG9fbGVmdF9tYXJnaW4JCWJ3CWJvb2wJYncJLQktCVlCLUctCWN1YjEgd3JhcHMgZnJvbSBjb2x1bW4gMCB0byBsYXN0IGNvbHVtbgorYXV0b19yaWdodF9tYXJnaW4JCWFtCWJvb2wJYW0JLQktCVlCQ0dFCXRlcm1pbmFsIGhhcyBhdXRvbWF0aWMgbWFyZ2lucworbm9fZXNjX2N0bGMJCQl4c2IJYm9vbAl4YgktCS0JWUJDRy0JYmVlaGl2ZSAoZjE9ZXNjYXBlLCBmMj1jdHJsIEMpCitjZW9sX3N0YW5kb3V0X2dsaXRjaAkJeGhwCWJvb2wJeHMJLQktCVlCQ0dFCXN0YW5kb3V0IG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcgKGhwKQorZWF0X25ld2xpbmVfZ2xpdGNoCQl4ZW5sCWJvb2wJeG4JLQktCVlCQ0dFCW5ld2xpbmUgaWdub3JlZCBhZnRlciA4MCBjb2xzIChjb25jZXB0KQorZXJhc2Vfb3ZlcnN0cmlrZQkJZW8JYm9vbAllbwktCS0JWUJDRy0JY2FuIGVyYXNlIG92ZXJzdHJpa2VzIHdpdGggYSBibGFuaworZ2VuZXJpY190eXBlCQkJZ24JYm9vbAlnbgktCS0JWUItRy0JZ2VuZXJpYyBsaW5lIHR5cGUKK2hhcmRfY29weQkJCWhjCWJvb2wJaGMJLQktCVlCQ0ctCWhhcmRjb3B5IHRlcm1pbmFsCitoYXNfbWV0YV9rZXkJCQlrbQlib29sCWttCS0JLQlZQi1HRQlIYXMgYSBtZXRhIGtleSAoaS5lLiwgc2V0cyA4dGgtYml0KQoraGFzX3N0YXR1c19saW5lCQkJaHMJYm9vbAlocwktCS0JWUItRy0JaGFzIGV4dHJhIHN0YXR1cyBsaW5lCitpbnNlcnRfbnVsbF9nbGl0Y2gJCWluCWJvb2wJaW4JLQktCVlCQ0dFCWluc2VydCBtb2RlIGRpc3Rpbmd1aXNoZXMgbnVsbHMKK21lbW9yeV9hYm92ZQkJCWRhCWJvb2wJZGEJLQktCVlCQ0ctCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGFib3ZlIHRoZSBzY3JlZW4KK21lbW9yeV9iZWxvdwkJCWRiCWJvb2wJZGIJLQktCVlCLUdFCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGJlbG93IHRoZSBzY3JlZW4KK21vdmVfaW5zZXJ0X21vZGUJCW1pcglib29sCW1pCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gaW5zZXJ0IG1vZGUKK21vdmVfc3RhbmRvdXRfbW9kZQkJbXNncglib29sCW1zCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gc3RhbmRvdXQgbW9kZQorb3Zlcl9zdHJpa2UJCQlvcwlib29sCW9zCS0JLQlZQkNHLQl0ZXJtaW5hbCBjYW4gb3ZlcnN0cmlrZQorc3RhdHVzX2xpbmVfZXNjX29rCQllc2xvawlib29sCWVzCS0JLQlZQi1HLQllc2NhcGUgY2FuIGJlIHVzZWQgb24gdGhlIHN0YXR1cyBsaW5lCitkZXN0X3RhYnNfbWFnaWNfc21zbwkJeHQJYm9vbAl4dAktCS0JWUJDR0UJdGFicyBkZXN0cnVjdGl2ZSwgbWFnaWMgc28gY2hhciAodDEwNjEpCit0aWxkZV9nbGl0Y2gJCQloeglib29sCWh6CS0JLQlZQi1HRQljYW5ub3QgcHJpbnQgfidzIChoYXplbHRpbmUpCit0cmFuc3BhcmVudF91bmRlcmxpbmUJCXVsCWJvb2wJdWwJLQktCVlCQ0dFCXVuZGVybGluZSBjaGFyYWN0ZXIgb3ZlcnN0cmlrZXMKK3hvbl94b2ZmCQkJeG9uCWJvb2wJeG8JLQktCVlCLS0tCXRlcm1pbmFsIHVzZXMgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK25lZWRzX3hvbl94b2ZmCQkJbnhvbglib29sCW54CS0JLQktLS0tLQlwYWRkaW5nIHdpbGwgbm90IHdvcmssIHhvbi94b2ZmIHJlcXVpcmVkCitwcnRyX3NpbGVudAkJCW1jNWkJYm9vbAk1aQktCS0JLS0tLS0JcHJpbnRlciB3aWxsIG5vdCBlY2hvIG9uIHNjcmVlbgoraGFyZF9jdXJzb3IJCQljaHRzCWJvb2wJSEMJLQktCS0tLS0tCWN1cnNvciBpcyBoYXJkIHRvIHNlZQorbm9uX3Jldl9ybWN1cAkJCW5ycm1jCWJvb2wJTlIJLQktCS0tLS0tCXNtY3VwIGRvZXMgbm90IHJldmVyc2Ugcm1jdXAKK25vX3BhZF9jaGFyCQkJbnBjCWJvb2wJTlAJLQktCS0tLS0tCXBhZCBjaGFyYWN0ZXIgZG9lcyBub3QgZXhpc3QKK25vbl9kZXN0X3Njcm9sbF9yZWdpb24JCW5kc2NyCWJvb2wJTkQJLQktCS0tLS0tCXNjcm9sbGluZyByZWdpb24gaXMgbm9uLWRlc3RydWN0aXZlCitjYW5fY2hhbmdlCQkJY2NjCWJvb2wJY2MJLQktCS0tLS0tCXRlcm1pbmFsIGNhbiByZS1kZWZpbmUgZXhpc3RpbmcgY29sb3JzCitiYWNrX2NvbG9yX2VyYXNlCQliY2UJYm9vbAl1dAktCS0JLS0tLS0Jc2NyZWVuIGVyYXNlZCB3aXRoIGJhY2tncm91bmQgY29sb3IKK2h1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbglobHMJYm9vbAlobAktCS0JLS0tLS0JdGVybWluYWwgdXNlcyBvbmx5IEhMUyBjb2xvciBub3RhdGlvbiAoVGVrdHJvbml4KQorY29sX2FkZHJfZ2xpdGNoCQkJeGhwYQlib29sCVlBCS0JLQktLS0tLQlvbmx5IHBvc2l0aXZlIG1vdGlvbiBmb3IgaHBhL21ocGEgY2FwcworY3JfY2FuY2Vsc19taWNyb19tb2RlCQljcnhtCWJvb2wJWUIJLQktCS0tLS0tCXVzaW5nIGNyIHR1cm5zIG9mZiBtaWNybyBtb2RlCitoYXNfcHJpbnRfd2hlZWwJCQlkYWlzeQlib29sCVlDCS0JLQktLS0tLQlwcmludGVyIG5lZWRzIG9wZXJhdG9yIHRvIGNoYW5nZSBjaGFyYWN0ZXIgc2V0Cityb3dfYWRkcl9nbGl0Y2gJCQl4dnBhCWJvb2wJWUQJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciB2cGEvbXZwYSBjYXBzCitzZW1pX2F1dG9fcmlnaHRfbWFyZ2luCQlzYW0JYm9vbAlZRQktCS0JLS0tLS0JcHJpbnRpbmcgaW4gbGFzdCBjb2x1bW4gY2F1c2VzIGNyCitjcGlfY2hhbmdlc19yZXMJCQljcGl4CWJvb2wJWUYJLQktCS0tLS0tCWNoYW5naW5nIGNoYXJhY3RlciBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KK2xwaV9jaGFuZ2VzX3JlcwkJCWxwaXgJYm9vbAlZRwktCS0JLS0tLS0JY2hhbmdpbmcgbGluZSBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBudW1lcmljIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorY29sdW1ucwkJCQljb2xzCW51bQljbwktCS0JWUJDR0UJbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBsaW5lCitpbml0X3RhYnMJCQlpdAludW0JaXQJLQktCVlCLUctCXRhYnMgaW5pdGlhbGx5IGV2ZXJ5ICMgc3BhY2VzCitsaW5lcwkJCQlsaW5lcwludW0JbGkJLQktCVlCQ0dFCW51bWJlciBvZiBsaW5lcyBvbiBzY3JlZW4gb3IgcGFnZQorbGluZXNfb2ZfbWVtb3J5CQkJbG0JbnVtCWxtCS0JLQlZQi1HLQlsaW5lcyBvZiBtZW1vcnkgaWYgPiBsaW5lLiAwIG1lYW5zIHZhcmllcworbWFnaWNfY29va2llX2dsaXRjaAkJeG1jCW51bQlzZwktCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rIGNoYXJhY3RlcnMgbGVmdCBieSBzbXNvIG9yIHJtc28KK3BhZGRpbmdfYmF1ZF9yYXRlCQlwYgludW0JcGIJLQktCVlCLUdFCWxvd2VzdCBiYXVkIHJhdGUgd2hlcmUgcGFkZGluZyBuZWVkZWQKK3ZpcnR1YWxfdGVybWluYWwJCXZ0CW51bQl2dAktCS0JWUItLS0JdmlydHVhbCB0ZXJtaW5hbCBudW1iZXIgKENCL3VuaXgpCit3aWR0aF9zdGF0dXNfbGluZQkJd3NsCW51bQl3cwktCS0JWUItRy0JbnVtYmVyIG9mIGNvbHVtbnMgaW4gc3RhdHVzIGxpbmUKK251bV9sYWJlbHMJCQlubGFiCW51bQlObAktCS0JLS0tLS0JbnVtYmVyIG9mIGxhYmVscyBvbiBzY3JlZW4KK2xhYmVsX2hlaWdodAkJCWxoCW51bQlsaAktCS0JLS0tLS0Jcm93cyBpbiBlYWNoIGxhYmVsCitsYWJlbF93aWR0aAkJCWx3CW51bQlsdwktCS0JLS0tLS0JY29sdW1ucyBpbiBlYWNoIGxhYmVsCittYXhfYXR0cmlidXRlcwkJCW1hCW51bQltYQktCS0JWUJDLS0JbWF4aW11bSBjb21iaW5lZCBhdHRyaWJ1dGVzIHRlcm1pbmFsIGNhbiBoYW5kbGUKK21heGltdW1fd2luZG93cwkJCXdudW0JbnVtCU1XCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBkZWZpbmVhYmxlIHdpbmRvd3MKKyMgVGhlc2UgY2FtZSBpbiB3aXRoIFNWcjQncyBjb2xvciBzdXBwb3J0CittYXhfY29sb3JzCQkJY29sb3JzCW51bQlDbwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIG9uIHNjcmVlbgorbWF4X3BhaXJzCQkJcGFpcnMJbnVtCXBhCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvci1wYWlycyBvbiB0aGUgc2NyZWVuCitub19jb2xvcl92aWRlbwkJCW5jdgludW0JTkMJLQktCS0tLS0tCXZpZGVvIGF0dHJpYnV0ZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCB3aXRoIGNvbG9ycworIyUuVEUKKyMlLmFkCisjJQorIyVUaGUgZm9sbG93aW5nIG51bWVyaWMgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCBhcmUgbm90IHlldCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4gIFRoZXkgY2FtZSBpbiB3aXRoIFNWcjQncworIyVwcmludGVyIHN1cHBvcnQuCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCTnVtZXJpYwluYW1lCUNvZGVcZlIKK2J1ZmZlcl9jYXBhY2l0eQkJCWJ1ZnN6CW51bQlZYQktCS0JLS0tLS0JbnVtYmVycyBvZiBieXRlcyBidWZmZXJlZCBiZWZvcmUgcHJpbnRpbmcKK2RvdF92ZXJ0X3NwYWNpbmcJCXNwaW52CW51bQlZYgktCS0JLS0tLS0Jc3BhY2luZyBvZiBwaW5zIHZlcnRpY2FsbHkgaW4gcGlucyBwZXIgaW5jaAorZG90X2hvcnpfc3BhY2luZwkJc3BpbmgJbnVtCVljCS0JLQktLS0tLQlzcGFjaW5nIG9mIGRvdHMgaG9yaXpvbnRhbGx5IGluIGRvdHMgcGVyIGluY2gKK21heF9taWNyb19hZGRyZXNzCQltYWRkcgludW0JWWQJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gbWljcm9fLi4uX2FkZHJlc3MKK21heF9taWNyb19qdW1wCQkJbWp1bXAJbnVtCVllCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIHBhcm1fLi4uX21pY3JvCittaWNyb19jb2xfc2l6ZQkJCW1jcwludW0JWWYJLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBtaWNybyBtb2RlCittaWNyb19saW5lX3NpemUJCQltbHMJbnVtCVlnCS0JLQktLS0tLQlsaW5lIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK251bWJlcl9vZl9waW5zCQkJbnBpbnMJbnVtCVloCS0JLQktLS0tLQludW1iZXJzIG9mIHBpbnMgaW4gcHJpbnQtaGVhZAorb3V0cHV0X3Jlc19jaGFyCQkJb3JjCW51bQlZaQktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBsaW5lCitvdXRwdXRfcmVzX2xpbmUJCQlvcmwJbnVtCVlqCS0JLQktLS0tLQl2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBsaW5lCitvdXRwdXRfcmVzX2hvcnpfaW5jaAkJb3JoaQludW0JWWsJLQktCS0tLS0tCWhvcml6b250YWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgaW5jaAorb3V0cHV0X3Jlc192ZXJ0X2luY2gJCW9ydmkJbnVtCVlsCS0JLQktLS0tLQl2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitwcmludF9yYXRlCQkJY3BzCW51bQlZbQktCS0JLS0tLS0JcHJpbnQgcmF0ZSBpbiBjaGFyYWN0ZXJzIHBlciBzZWNvbmQKK3dpZGVfY2hhcl9zaXplCQkJd2lkY3MJbnVtCVluCS0JLQktLS0tLQljaGFyYWN0ZXIgc3RlcCBzaXplIHdoZW4gaW4gZG91YmxlIHdpZGUgbW9kZQorYnV0dG9ucwkJCQlidG5zCW51bQlCVAktCS0JLS0tLS0JbnVtYmVyIG9mIGJ1dHRvbnMgb24gbW91c2UKK2JpdF9pbWFnZV9lbnR3aW5pbmcJCWJpdHdpbgludW0JWW8JLQktCS0tLS0tCW51bWJlciBvZiBwYXNzZXMgZm9yIGVhY2ggYml0LWltYWdlIHJvdworYml0X2ltYWdlX3R5cGUJCQliaXR5cGUJbnVtCVlwCS0JLQktLS0tLQl0eXBlIG9mIGJpdC1pbWFnZSBkZXZpY2UKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2JhY2tfdGFiCQkJY2J0CXN0cglidAktCQktCVlCQ0dFCWJhY2sgdGFiIChQKQorYmVsbAkJCQliZWwJc3RyCWJsCS0JCS0JWUItR0UJYXVkaWJsZSBzaWduYWwgKGJlbGwpIChQKQorY2FycmlhZ2VfcmV0dXJuCQkJY3IJc3RyCWNyCS0JCS0JWUJDR0UJY2FycmlhZ2UgcmV0dXJuIChQKikgKFAqKQorY2hhbmdlX3Njcm9sbF9yZWdpb24JCWNzcglzdHIJY3MJLQkJLQlZQkNHRQljaGFuZ2UgcmVnaW9uIHRvIGxpbmUgIzEgdG8gbGluZSAjMiAoUCkKK2NsZWFyX2FsbF90YWJzCQkJdGJjCXN0cgljdAktCQktCVlCLUctCWNsZWFyIGFsbCB0YWIgc3RvcHMgKFApCitjbGVhcl9zY3JlZW4JCQljbGVhcglzdHIJY2wJLQkJLQlZQkNHRQljbGVhciBzY3JlZW4gYW5kIGhvbWUgY3Vyc29yIChQKikKK2Nscl9lb2wJCQkJZWwJc3RyCWNlCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIGxpbmUgKFApCitjbHJfZW9zCQkJCWVkCXN0cgljZAktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBzY3JlZW4gKFAqKQorY29sdW1uX2FkZHJlc3MJCQlocGEJc3RyCWNoCS0JCS0JLUItR0UqCWhvcml6b250YWwgcG9zaXRpb24gIzEsIGFic29sdXRlIChQKQorY29tbWFuZF9jaGFyYWN0ZXIJCWNtZGNoCXN0cglDQwktCQktCVlCLUctCXRlcm1pbmFsIHNldHRhYmxlIGNtZCBjaGFyYWN0ZXIgaW4gcHJvdG90eXBlICE/CitjdXJzb3JfYWRkcmVzcwkJCWN1cAlzdHIJY20JLQkJLQlZQkNHRQltb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3JfZG93bgkJCWN1ZDEJc3RyCWRvCS0JCS0JWUJDR0UJZG93biBvbmUgbGluZQorY3Vyc29yX2hvbWUJCQlob21lCXN0cglobwktCQktCVlCQ0dFCWhvbWUgY3Vyc29yIChpZiBubyBjdXApCitjdXJzb3JfaW52aXNpYmxlCQljaXZpcwlzdHIJdmkJLQkJLQlZQi1HLQltYWtlIGN1cnNvciBpbnZpc2libGUKK2N1cnNvcl9sZWZ0CQkJY3ViMQlzdHIJbGUJLQkJLQlZQkNHRQltb3ZlIGxlZnQgb25lIHNwYWNlCitjdXJzb3JfbWVtX2FkZHJlc3MJCW1yY3VwCXN0cglDTQktCQktCVlCLUctCW1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywgbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX25vcm1hbAkJCWNub3JtCXN0cgl2ZQktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIGFwcGVhciBub3JtYWwgKHVuZG8gY2l2aXMvY3Z2aXMpCitjdXJzb3JfcmlnaHQJCQljdWYxCXN0cgluZAktCQktCVlCQ0dFCW5vbi1kZXN0cnVjdGl2ZSBzcGFjZSAobW92ZSByaWdodCBvbmUgc3BhY2UpCitjdXJzb3JfdG9fbGwJCQlsbAlzdHIJbGwJLQkJLQlZQkNHRQlsYXN0IGxpbmUsIGZpcnN0IGNvbHVtbiAoaWYgbm8gY3VwKQorY3Vyc29yX3VwCQkJY3V1MQlzdHIJdXAJLQkJLQlZQkNHRQl1cCBvbmUgbGluZQorY3Vyc29yX3Zpc2libGUJCQljdnZpcwlzdHIJdnMJLQkJLQlZQkNHRQltYWtlIGN1cnNvciB2ZXJ5IHZpc2libGUKK2RlbGV0ZV9jaGFyYWN0ZXIJCWRjaDEJc3RyCWRjCS0JCS0JWUJDR0UJZGVsZXRlIGNoYXJhY3RlciAoUCopCitkZWxldGVfbGluZQkJCWRsMQlzdHIJZGwJLQkJLQlZQkNHRQlkZWxldGUgbGluZSAoUCopCitkaXNfc3RhdHVzX2xpbmUJCQlkc2wJc3RyCWRzCS0JCS0JWUItRy0JZGlzYWJsZSBzdGF0dXMgbGluZQorZG93bl9oYWxmX2xpbmUJCQloZAlzdHIJaGQJLQkJLQlZQi1HLQloYWxmIGEgbGluZSBkb3duCitlbnRlcl9hbHRfY2hhcnNldF9tb2RlCQlzbWFjcwlzdHIJYXMJLQkJLQlZQi1HLQlzdGFydCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2VudGVyX2JsaW5rX21vZGUJCWJsaW5rCXN0cgltYgktCQktCVlCLUctCXR1cm4gb24gYmxpbmtpbmcKK2VudGVyX2JvbGRfbW9kZQkJCWJvbGQJc3RyCW1kCS0JCS0JWUItRy0JdHVybiBvbiBib2xkIChleHRyYSBicmlnaHQpIG1vZGUKK2VudGVyX2NhX21vZGUJCQlzbWN1cAlzdHIJdGkJLQkJLQlZQkNHRQlzdHJpbmcgdG8gc3RhcnQgcHJvZ3JhbXMgdXNpbmcgY3VwCitlbnRlcl9kZWxldGVfbW9kZQkJc21kYwlzdHIJZG0JLQkJLQlZQkNHRQllbnRlciBkZWxldGUgbW9kZQorZW50ZXJfZGltX21vZGUJCQlkaW0Jc3RyCW1oCS0JCS0JWUItRy0JdHVybiBvbiBoYWxmLWJyaWdodCBtb2RlCitlbnRlcl9pbnNlcnRfbW9kZQkJc21pcglzdHIJaW0JLQkJLQlZQkNHRQllbnRlciBpbnNlcnQgbW9kZQorZW50ZXJfc2VjdXJlX21vZGUJCWludmlzCXN0cgltawktCQktCS1CLUctKgl0dXJuIG9uIGJsYW5rIG1vZGUgKGNoYXJhY3RlcnMgaW52aXNpYmxlKQorZW50ZXJfcHJvdGVjdGVkX21vZGUJCXByb3QJc3RyCW1wCS0JCS0JLUItRy0qCXR1cm4gb24gcHJvdGVjdGVkIG1vZGUKK2VudGVyX3JldmVyc2VfbW9kZQkJcmV2CXN0cgltcgktCQktCVlCLUctCXR1cm4gb24gcmV2ZXJzZSB2aWRlbyBtb2RlCitlbnRlcl9zdGFuZG91dF9tb2RlCQlzbXNvCXN0cglzbwktCQktCVlCQ0dFCWJlZ2luIHN0YW5kb3V0IG1vZGUKK2VudGVyX3VuZGVybGluZV9tb2RlCQlzbXVsCXN0cgl1cwktCQktCVlCQ0dFCWJlZ2luIHVuZGVybGluZSBtb2RlCitlcmFzZV9jaGFycwkJCWVjaAlzdHIJZWMJLQkJLQlZQi1HLQllcmFzZSAjMSBjaGFyYWN0ZXJzIChQKQorZXhpdF9hbHRfY2hhcnNldF9tb2RlCQlybWFjcwlzdHIJYWUJLQkJLQlZQi1HLQllbmQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitleGl0X2F0dHJpYnV0ZV9tb2RlCQlzZ3IwCXN0cgltZQktCQktCVlCLUdFCXR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzCitleGl0X2NhX21vZGUJCQlybWN1cAlzdHIJdGUJLQkJLQlZQkNHRQlzdHJpbmdzIHRvIGVuZCBwcm9ncmFtcyB1c2luZyBjdXAKK2V4aXRfZGVsZXRlX21vZGUJCXJtZGMJc3RyCWVkCS0JCS0JWUJDR0UJZW5kIGRlbGV0ZSBtb2RlCitleGl0X2luc2VydF9tb2RlCQlybWlyCXN0cgllaQktCQktCVlCQ0dFCWV4aXQgaW5zZXJ0IG1vZGUKK2V4aXRfc3RhbmRvdXRfbW9kZQkJcm1zbwlzdHIJc2UJLQkJLQlZQkNHRQlleGl0IHN0YW5kb3V0IG1vZGUKK2V4aXRfdW5kZXJsaW5lX21vZGUJCXJtdWwJc3RyCXVlCS0JCS0JWUJDR0UJZXhpdCB1bmRlcmxpbmUgbW9kZQorZmxhc2hfc2NyZWVuCQkJZmxhc2gJc3RyCXZiCS0JCS0JWUJDR0UJdmlzaWJsZSBiZWxsIChtYXkgbm90IG1vdmUgY3Vyc29yKQorZm9ybV9mZWVkCQkJZmYJc3RyCWZmCS0JCS0JWUItRy0JaGFyZGNvcHkgdGVybWluYWwgcGFnZSBlamVjdCAoUCopCitmcm9tX3N0YXR1c19saW5lCQlmc2wJc3RyCWZzCS0JCS0JWUItRy0JcmV0dXJuIGZyb20gc3RhdHVzIGxpbmUKK2luaXRfMXN0cmluZwkJCWlzMQlzdHIJaTEJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfMnN0cmluZwkJCWlzMglzdHIJaXMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfM3N0cmluZwkJCWlzMwlzdHIJaTMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfZmlsZQkJCWlmCXN0cglpZgktCQktCVlCLUctCW5hbWUgb2YgaW5pdGlhbGl6YXRpb24gZmlsZQoraW5zZXJ0X2NoYXJhY3RlcgkJaWNoMQlzdHIJaWMJLQkJLQlZQkNHRQlpbnNlcnQgY2hhcmFjdGVyIChQKQoraW5zZXJ0X2xpbmUJCQlpbDEJc3RyCWFsCS0JCS0JWUJDR0UJaW5zZXJ0IGxpbmUgKFAqKQoraW5zZXJ0X3BhZGRpbmcJCQlpcAlzdHIJaXAJLQkJLQlZQkNHRQlpbnNlcnQgcGFkZGluZyBhZnRlciBpbnNlcnRlZCBjaGFyYWN0ZXIKK2tleV9iYWNrc3BhY2UJCQlrYnMJc3RyCWtiCUtFWV9CQUNLU1BBQ0UJMDQwNwlZQi1HLQliYWNrc3BhY2Uga2V5CitrZXlfY2F0YWIJCQlrdGJjCXN0cglrYQlLRVlfQ0FUQUIJMDUyNgktQi1HLSoJY2xlYXItYWxsLXRhYnMga2V5CitrZXlfY2xlYXIJCQlrY2xyCXN0cglrQwlLRVlfQ0xFQVIJMDUxNQktQi1HLSoJY2xlYXItc2NyZWVuIG9yIGVyYXNlIGtleQora2V5X2N0YWIJCQlrY3RhYglzdHIJa3QJS0VZX0NUQUIJMDUyNQktQi1HLSoJY2xlYXItdGFiIGtleQora2V5X2RjCQkJCWtkY2gxCXN0cglrRAlLRVlfREMJCTA1MTIJWUItRy0JZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9kbAkJCQlrZGwxCXN0cglrTAlLRVlfREwJCTA1MTAJLUItRy0qCWRlbGV0ZS1saW5lIGtleQora2V5X2Rvd24JCQlrY3VkMQlzdHIJa2QJS0VZX0RPV04JMDQwMglZQkNHRQlkb3duLWFycm93IGtleQora2V5X2VpYwkJCQlrcm1pcglzdHIJa00JS0VZX0VJQwkJMDUxNAktQi1HLSoJc2VudCBieSBybWlyIG9yIHNtaXIgaW4gaW5zZXJ0IG1vZGUKK2tleV9lb2wJCQkJa2VsCXN0cglrRQlLRVlfRU9MCQkwNTE3CS1CLUctKgljbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9lb3MJCQkJa2VkCXN0cglrUwlLRVlfRU9TCQkwNTE2CS1CLUctKgljbGVhci10by1lbmQtb2Ytc2NyZWVuIGtleQora2V5X2YwCQkJCWtmMAlzdHIJazAJS0VZX0YoMCkJMDQxMAlZQkNHRQlGMCBmdW5jdGlvbiBrZXkKK2tleV9mMQkJCQlrZjEJc3RyCWsxCUtFWV9GKDEpCS0JWUJDR0UJRjEgZnVuY3Rpb24ga2V5CitrZXlfZjEwCQkJCWtmMTAJc3RyCWs7CUtFWV9GKDEwKQktCS0tLS1FCUYxMCBmdW5jdGlvbiBrZXkKK2tleV9mMgkJCQlrZjIJc3RyCWsyCUtFWV9GKDIpCS0JWUJDR0UJRjIgZnVuY3Rpb24ga2V5CitrZXlfZjMJCQkJa2YzCXN0cglrMwlLRVlfRigzKQktCVlCQ0dFCUYzIGZ1bmN0aW9uIGtleQora2V5X2Y0CQkJCWtmNAlzdHIJazQJS0VZX0YoNCkJLQlZQkNHRQlGNCBmdW5jdGlvbiBrZXkKK2tleV9mNQkJCQlrZjUJc3RyCWs1CUtFWV9GKDUpCS0JWUJDR0UJRjUgZnVuY3Rpb24ga2V5CitrZXlfZjYJCQkJa2Y2CXN0cglrNglLRVlfRig2KQktCVlCQ0dFCUY2IGZ1bmN0aW9uIGtleQora2V5X2Y3CQkJCWtmNwlzdHIJazcJS0VZX0YoNykJLQlZQkNHRQlGNyBmdW5jdGlvbiBrZXkKK2tleV9mOAkJCQlrZjgJc3RyCWs4CUtFWV9GKDgpCS0JWUJDR0UJRjggZnVuY3Rpb24ga2V5CitrZXlfZjkJCQkJa2Y5CXN0cglrOQlLRVlfRig5KQktCVlCQ0dFCUY5IGZ1bmN0aW9uIGtleQora2V5X2hvbWUJCQlraG9tZQlzdHIJa2gJS0VZX0hPTUUJMDQwNglZQkNHRQlob21lIGtleQora2V5X2ljCQkJCWtpY2gxCXN0cglrSQlLRVlfSUMJCTA1MTMJWUItR0UJaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9pbAkJCQlraWwxCXN0cglrQQlLRVlfSUwJCTA1MTEJLUItRy0qCWluc2VydC1saW5lIGtleQora2V5X2xlZnQJCQlrY3ViMQlzdHIJa2wJS0VZX0xFRlQJMDQwNAlZQkNHRQlsZWZ0LWFycm93IGtleQora2V5X2xsCQkJCWtsbAlzdHIJa0gJS0VZX0xMCQkwNTMzCVlCLUctCWxvd2VyLWxlZnQga2V5IChob21lIGRvd24pCitrZXlfbnBhZ2UJCQlrbnAJc3RyCWtOCUtFWV9OUEFHRQkwNTIyCVlCLUdFCW5leHQtcGFnZSBrZXkKK2tleV9wcGFnZQkJCWtwcAlzdHIJa1AJS0VZX1BQQUdFCTA1MjMJWUItR0UJcHJldmlvdXMtcGFnZSBrZXkKK2tleV9yaWdodAkJCWtjdWYxCXN0cglrcglLRVlfUklHSFQJMDQwNQlZQkNHRQlyaWdodC1hcnJvdyBrZXkKK2tleV9zZgkJCQlraW5kCXN0cglrRglLRVlfU0YJCTA1MjAJLUItRy0qCXNjcm9sbC1mb3J3YXJkIGtleQora2V5X3NyCQkJCWtyaQlzdHIJa1IJS0VZX1NSCQkwNTIxCS1CLUctKglzY3JvbGwtYmFja3dhcmQga2V5CitrZXlfc3RhYgkJCWtodHMJc3RyCWtUCUtFWV9TVEFCCTA1MjQJLUItRy0qCXNldC10YWIga2V5CitrZXlfdXAJCQkJa2N1dTEJc3RyCWt1CUtFWV9VUAkJMDQwMwlZQkNHRQl1cC1hcnJvdyBrZXkKK2tleXBhZF9sb2NhbAkJCXJta3gJc3RyCWtlCS0JCS0JWUJDR0UJbGVhdmUgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitrZXlwYWRfeG1pdAkJCXNta3gJc3RyCWtzCS0JCS0JWUJDR0UJZW50ZXIgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitsYWJfZjAJCQkJbGYwCXN0cglsMAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjAgaWYgbm90IGYwCitsYWJfZjEJCQkJbGYxCXN0cglsMQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEgaWYgbm90IGYxCitsYWJfZjEwCQkJCWxmMTAJc3RyCWxhCS0JCS0JLS0tLS0JbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxMCBpZiBub3QgZjEwCitsYWJfZjIJCQkJbGYyCXN0cglsMgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjIgaWYgbm90IGYyCitsYWJfZjMJCQkJbGYzCXN0cglsMwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjMgaWYgbm90IGYzCitsYWJfZjQJCQkJbGY0CXN0cglsNAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjQgaWYgbm90IGY0CitsYWJfZjUJCQkJbGY1CXN0cglsNQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjUgaWYgbm90IGY1CitsYWJfZjYJCQkJbGY2CXN0cglsNgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjYgaWYgbm90IGY2CitsYWJfZjcJCQkJbGY3CXN0cglsNwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjcgaWYgbm90IGY3CitsYWJfZjgJCQkJbGY4CXN0cglsOAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjggaWYgbm90IGY4CitsYWJfZjkJCQkJbGY5CXN0cglsOQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjkgaWYgbm90IGY5CittZXRhX29mZgkJCXJtbQlzdHIJbW8JLQkJLQlZQi1HLSoJdHVybiBvZmYgbWV0YSBtb2RlCittZXRhX29uCQkJCXNtbQlzdHIJbW0JLQkJLQlZQi1HLSoJdHVybiBvbiBtZXRhIG1vZGUgKDh0aC1iaXQgb24pCituZXdsaW5lCQkJCW5lbAlzdHIJbncJLQkJLQlZQi1HLSoJbmV3bGluZSAoYmVoYXZlIGxpa2UgY3IgZm9sbG93ZWQgYnkgbGYpCitwYWRfY2hhcgkJCXBhZAlzdHIJcGMJLQkJLQlZQkNHRQlwYWRkaW5nIGNoYXIgKGluc3RlYWQgb2YgbnVsbCkKK3Bhcm1fZGNoCQkJZGNoCXN0cglEQwktCQktCVlCLUdFCWRlbGV0ZSAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1fZGVsZXRlX2xpbmUJCWRsCXN0cglETAktCQktCVlCQ0dFCWRlbGV0ZSAjMSBsaW5lcyAoUCopCitwYXJtX2Rvd25fY3Vyc29yCQljdWQJc3RyCURPCS0JCS0JWUJDR0UJZG93biAjMSBsaW5lcyAoUCopCitwYXJtX2ljaAkJCWljaAlzdHIJSUMJLQkJLQlZQi1HRQlpbnNlcnQgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2luZGV4CQkJaW5kbglzdHIJU0YJLQkJLQlZQkNHLQlzY3JvbGwgZm9yd2FyZCAjMSBsaW5lcyAoUCkKK3Bhcm1faW5zZXJ0X2xpbmUJCWlsCXN0cglBTAktCQktCVlCQ0dFCWluc2VydCAjMSBsaW5lcyAoUCopCitwYXJtX2xlZnRfY3Vyc29yCQljdWIJc3RyCUxFCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IChQKQorcGFybV9yaWdodF9jdXJzb3IJCWN1ZglzdHIJUkkJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IChQKikKK3Bhcm1fcmluZGV4CQkJcmluCXN0cglTUgktCQktCVlCQ0ctCXNjcm9sbCBiYWNrICMxIGxpbmVzIChQKQorcGFybV91cF9jdXJzb3IJCQljdXUJc3RyCVVQCS0JCS0JWUJDR0UJdXAgIzEgbGluZXMgKFAqKQorcGtleV9rZXkJCQlwZmtleQlzdHIJcGsJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMgorcGtleV9sb2NhbAkJCXBmbG9jCXN0cglwbAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIGV4ZWN1dGUgc3RyaW5nICMyCitwa2V5X3htaXQJCQlwZngJc3RyCXB4CS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHJhbnNtaXQgc3RyaW5nICMyCitwcmludF9zY3JlZW4JCQltYzAJc3RyCXBzCS0JCS0JLUItRy0qCXByaW50IGNvbnRlbnRzIG9mIHNjcmVlbgorcHJ0cl9vZmYJCQltYzQJc3RyCXBmCS0JCS0JLUItRy0qCXR1cm4gb2ZmIHByaW50ZXIKK3BydHJfb24JCQkJbWM1CXN0cglwbwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIKK3JlcGVhdF9jaGFyCQkJcmVwCXN0cglycAktCQktCVlCLUdFCXJlcGVhdCBjaGFyICMxICMyIHRpbWVzIChQKikKK3Jlc2V0XzFzdHJpbmcJCQlyczEJc3RyCXIxCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8yc3RyaW5nCQkJcnMyCXN0cglyMgktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfM3N0cmluZwkJCXJzMwlzdHIJcjMJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0X2ZpbGUJCQlyZglzdHIJcmYJLQkJLQktQi0tLQluYW1lIG9mIHJlc2V0IGZpbGUKK3Jlc3RvcmVfY3Vyc29yCQkJcmMJc3RyCXJjCS0JCS0JWUJDRy0JcmVzdG9yZSBjdXJzb3IgdG8gcG9zaXRpb24gb2YgbGFzdCBzYXZlX2N1cnNvcgorcm93X2FkZHJlc3MJCQl2cGEJc3RyCWN2CS0JCS0JLUItR0UqCXZlcnRpY2FsIHBvc2l0aW9uICMxIGFic29sdXRlIChQKQorc2F2ZV9jdXJzb3IJCQlzYwlzdHIJc2MJLQkJLQlZQkNHLQlzYXZlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIChQKQorc2Nyb2xsX2ZvcndhcmQJCQlpbmQJc3RyCXNmCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgdXAgKFApCitzY3JvbGxfcmV2ZXJzZQkJCXJpCXN0cglzcgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IGRvd24gKFApCitzZXRfYXR0cmlidXRlcwkJCXNncglzdHIJc2EJLQkJLQlZQi1HLQlkZWZpbmUgdmlkZW8gYXR0cmlidXRlcyAjMS0jOSAoUEc5KQorc2V0X3RhYgkJCQlodHMJc3RyCXN0CS0JCS0JWUItRy0Jc2V0IGEgdGFiIGluIGV2ZXJ5IHJvdywgY3VycmVudCBjb2x1bW5zCitzZXRfd2luZG93CQkJd2luZAlzdHIJd2kJLQkJLQktQi1HRQljdXJyZW50IHdpbmRvdyBpcyBsaW5lcyAjMS0jMiBjb2xzICMzLSM0Cit0YWIJCQkJaHQJc3RyCXRhCS0JCS0JWUJDR0UJdGFiIHRvIG5leHQgOC1zcGFjZSBoYXJkd2FyZSB0YWIgc3RvcAordG9fc3RhdHVzX2xpbmUJCQl0c2wJc3RyCXRzCS0JCS0JWUItRy0JbW92ZSB0byBzdGF0dXMgbGluZSwgY29sdW1uICMxCit1bmRlcmxpbmVfY2hhcgkJCXVjCXN0cgl1YwktCQktCVlCQ0ctCXVuZGVybGluZSBjaGFyIGFuZCBtb3ZlIHBhc3QgaXQKK3VwX2hhbGZfbGluZQkJCWh1CXN0cglodQktCQktCVlCLUctCWhhbGYgYSBsaW5lIHVwCitpbml0X3Byb2cJCQlpcHJvZwlzdHIJaVAJLQkJLQktQi0tLQlwYXRoIG5hbWUgb2YgcHJvZ3JhbSBmb3IgaW5pdGlhbGl6YXRpb24KK2tleV9hMQkJCQlrYTEJc3RyCUsxCUtFWV9BMQkJMDUzNAlZQi1HRQl1cHBlciBsZWZ0IG9mIGtleXBhZAora2V5X2EzCQkJCWthMwlzdHIJSzMJS0VZX0EzCQkwNTM1CVlCLUdFCXVwcGVyIHJpZ2h0IG9mIGtleXBhZAora2V5X2IyCQkJCWtiMglzdHIJSzIJS0VZX0IyCQkwNTM2CVlCLUdFCWNlbnRlciBvZiBrZXlwYWQKK2tleV9jMQkJCQlrYzEJc3RyCUs0CUtFWV9DMQkJMDUzNwlZQi1HRQlsb3dlciBsZWZ0IG9mIGtleXBhZAora2V5X2MzCQkJCWtjMwlzdHIJSzUJS0VZX0MzCQkwNTQwCVlCLUdFCWxvd2VyIHJpZ2h0IG9mIGtleXBhZAorcHJ0cl9ub24JCQltYzVwCXN0cglwTwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIgZm9yICMxIGJ5dGVzCisjCisjIElCTSBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBJQk0KKyMgdGVybWluZm8gZmlsZXMuCisjCisjIFRoZSBwbGFjZXMgaW4gdGhlIGJveFsxMl0gY2FwYWJpbGl0aWVzIGNvcnJlc3BvbmQgdG8gYWNzYyBjaGFyYWN0ZXJzLCBoZXJlIGlzCisjIHRoZSBtYXBwaW5nOgorIworIwlib3gxWzBdICA9IEFDU19VTENPUk5FUgorIwlib3gxWzFdICA9IEFDU19ITElORQkKKyMJYm94MVsyXSAgPSBBQ1NfVVJDT1JORVIKKyMJYm94MVszXSAgPSBBQ1NfVkxJTkUKKyMJYm94MVs0XSAgPSBBQ1NfTFJDT1JORVIKKyMJYm94MVs1XSAgPSBBQ1NfTExDT1JORVIKKyMJYm94MVs2XSAgPSBBQ1NfVFRFRQorIwlib3gxWzddICA9IEFDU19SVEVFCisjCWJveDFbOF0gID0gQUNTX0JURUUKKyMJYm94MVs5XSAgPSBBQ1NfTFRFRQorIwlib3gxWzEwXSA9IEFDU19QTFVTCisjCisjIFRoZSBib3gyIGNoYXJhY3RlcnMgYXJlIHRoZSBkb3VibGUtbGluZSB2ZXJzaW9ucyBvZiB0aGVzZSBmb3JtcyBncmFwaGljcy4KKyMKK2JveF9jaGFyc18xCQkJYm94MQlzdHIJYngJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBwcmltYXJ5IHNldAorYm94X2NoYXJzXzIJCQlib3gyCXN0cglieQktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHNlY29uZGFyeSBzZXQKK2JveF9hdHRyXzEJCQliYXR0MQlzdHIJQngJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gxCitib3hfYXR0cl8yCQkJYmF0dDIJc3RyCUJ5CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MgorY29sb3JfYmdfMAkJCWNvbGIwCXN0cglkMAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMAorY29sb3JfYmdfMQkJCWNvbGIxCXN0cglkMQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMQorY29sb3JfYmdfMgkJCWNvbGIyCXN0cglkMgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMgorY29sb3JfYmdfMwkJCWNvbGIzCXN0cglkMwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMworY29sb3JfYmdfNAkJCWNvbGI0CXN0cglkNAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNAorY29sb3JfYmdfNQkJCWNvbGI1CXN0cglkNQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNQorY29sb3JfYmdfNgkJCWNvbGI2CXN0cglkNgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNgorY29sb3JfYmdfNwkJCWNvbGI3CXN0cglkNwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNworY29sb3JfZmdfMAkJCWNvbGYwCXN0cgljMAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMAorY29sb3JfZmdfMQkJCWNvbGYxCXN0cgljMQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMQorY29sb3JfZmdfMgkJCWNvbGYyCXN0cgljMgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMgorY29sb3JfZmdfMwkJCWNvbGYzCXN0cgljMwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMworY29sb3JfZmdfNAkJCWNvbGY0CXN0cgljNAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNAorY29sb3JfZmdfNQkJCWNvbGY1CXN0cgljNQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNQorY29sb3JfZmdfNgkJCWNvbGY2CXN0cgljNgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNgorY29sb3JfZmdfNwkJCWNvbGY3CXN0cgljNwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNworZm9udF8wCQkJCWZvbnQwCXN0cglmMAktCQktCS0tLS1LCXNlbGVjdCBmb250IDAKK2ZvbnRfMQkJCQlmb250MQlzdHIJZjEJLQkJLQktLS0tSwlzZWxlY3QgZm9udCAxCitmb250XzIJCQkJZm9udDIJc3RyCWYyCS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgMgorZm9udF8zCQkJCWZvbnQzCXN0cglmMwktCQktCS0tLS1LCXNlbGVjdCBmb250IDMKK2ZvbnRfNAkJCQlmb250NAlzdHIJZjQJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA0Citmb250XzUJCQkJZm9udDUJc3RyCWY1CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNQorZm9udF82CQkJCWZvbnQ2CXN0cglmNgktCQktCS0tLS1LCXNlbGVjdCBmb250IDYKK2ZvbnRfNwkJCQlmb250NwlzdHIJZjcJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA3CitrZXlfYmFja190YWIJCQlrYnRhYglzdHIJazAJLQkJLQktLS0tSwliYWNrdGFiIGtleQora2V5X2RvCQkJCWtkbwlzdHIJa2kJLQkJLQktLS0tSwlkbyByZXF1ZXN0IGtleQora2V5X2NvbW1hbmQJCQlrY21kCXN0cglrZAktCQktCS0tLS1LCWNvbW1hbmQtcmVxdWVzdCBrZXkKK2tleV9jb21tYW5kX3BhbmUJCWtjcG4Jc3RyCWtXCS0JCS0JLS0tLUsJY29tbWFuZC1wYW5lIGtleQora2V5X2VuZAkJCQlrZW5kCXN0cglrdwlLRVlfRU5ECQkwNTUwCS0tLS0tCWVuZCBrZXkKK2tleV9oZWxwCQkJa2hscAlzdHIJa3EJLQkJLQktLS0tLQloZWxwIGtleQora2V5X25ld2xpbmUJCQlrbmwJc3RyCW5sCS0JCS0JLS0tLUsJbmV3bGluZSBrZXkKK2tleV9uZXh0X3BhbmUJCQlrbnBuCXN0cglrdgktCQktCS0tLS1LCW5leHQtcGFuZSBrZXkKK2tleV9wcmV2X2NtZAkJCWtwcG4Jc3RyCWtwCS0JCS0JLS0tLUsJcHJldmlvdXMtY29tbWFuZCBrZXkKK2tleV9wcmV2X3BhbmUJCQlrcHBuCXN0cglrVgktCQktCS0tLS1LCXByZXZpb3VzLXBhbmUga2V5CitrZXlfcXVpdAkJCWtxdWl0CXN0cglrUQktCQktCS0tLS1LCXF1aXQga2V5CitrZXlfc2VsZWN0X2FpeAkJCWtzZWwJc3RyCWtVCS0JCS0JLS0tLS0Jc2VsZWN0IGtleQora2V5X3Njcm9sbF9sZWZ0CQkJa3NjbAlzdHIJa3oJLQkJLQktLS0tSwlzY3JvbGwgbGVmdAora2V5X3Njcm9sbF9yaWdodAkJa3NjcglzdHIJa1oJLQkJLQktLS0tSwlzY3JvbGwgcmlnaHQKK2tleV90YWIJCQkJa3RhYglzdHIJa28JLQkJLQktLS0tSwl0YWIga2V5CitrZXlfc21hcF9pbjEJCQlrbXBmMQlzdHIJS3YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBpbnB1dAora2V5X3NtYXBfb3V0MQkJCWttcHQxCXN0cglLVgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIG91dHB1dAora2V5X3NtYXBfaW4yCQkJa21wZjIJc3RyCUt3CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgaW5wdXQKK2tleV9zbWFwX291dDIJCQlrbXB0MglzdHIJS1cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBvdXRwdXQKK2tleV9zbWFwX2luMwkJCWttcGYzCXN0cglLeAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIGlucHV0CitrZXlfc21hcF9vdXQzCQkJa21wdDMJc3RyCUtYCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgb3V0cHV0CitrZXlfc21hcF9pbjQJCQlrbXBmNAlzdHIJS3kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBpbnB1dAora2V5X3NtYXBfb3V0NAkJCWttcHQ0CXN0cglLWQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IG91dHB1dAora2V5X3NtYXBfaW41CQkJa21wZjUJc3RyCUt6CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgaW5wdXQKK2tleV9zbWFwX291dDUJCQlrbXB0NQlzdHIJS1oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBvdXRwdXQKK2FwcGxfZGVmaW5lZF9zdHIJCWFwc3RyCXN0cgl6YQktCQktCS0tLS1LCWFwcGxpY2F0aW9uLWRlZmluZWQgc3RyaW5nCitrZXlfc21hcF9pbjYJCQlrbXBmNglzdHIJa3IJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBpbnB1dAora2V5X3NtYXBfb3V0NgkJCWttcHQ2CXN0cglLUgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IG91dHB1dAora2V5X3NtYXBfaW43CQkJa21wZjcJc3RyCWtzCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgaW5wdXQKK2tleV9zbWFwX291dDcJCQlrbXB0NwlzdHIJS1MJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBvdXRwdXQKK2tleV9zbWFwX2luOAkJCWttcGY4CXN0cglrdAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IGlucHV0CitrZXlfc21hcF9vdXQ4CQkJa21wdDgJc3RyCUtUCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggb3V0cHV0CitrZXlfc21hcF9pbjkJCQlrbXBmOQlzdHIJa3UJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBpbnB1dAora2V5X3NtYXBfb3V0OQkJCWttcHQ5CXN0cglLVQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IG91dHB1dAora2V5X3NmMQkJCQlrc2YxCXN0cglTMQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEKK2tleV9zZjIJCQkJa3NmMglzdHIJUzIJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAyCitrZXlfc2YzCQkJCWtzZjMJc3RyCVMzCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMwora2V5X3NmNAkJCQlrc2Y0CXN0cglTNAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDQKK2tleV9zZjUJCQkJa3NmNQlzdHIJUzUJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA1CitrZXlfc2Y2CQkJCWtzZjYJc3RyCVM2CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNgora2V5X3NmNwkJCQlrc2Y3CXN0cglTNwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDcKK2tleV9zZjgJCQkJa3NmOAlzdHIJUzgJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA4CitrZXlfc2Y5CQkJCWtzZjkJc3RyCVM5CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOQora2V5X3NmMTAJCQlrc2YxMAlzdHIJUzAJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxMAora2V5X2YxMQkJCQlrZjExCXN0cglGMQlLRVlfRigxMSkJLQktLS0tRQlGMTEgZnVuY3Rpb24ga2V5CitrZXlfZjEyCQkJCWtmMTIJc3RyCUYyCUtFWV9GKDEyKQktCS0tLS1FCUYxMiBmdW5jdGlvbiBrZXkKK2tleV9mMTMJCQkJa2YxMwlzdHIJRjMJS0VZX0YoMTMpCS0JLS0tLUUJRjEzIGZ1bmN0aW9uIGtleQora2V5X2YxNAkJCQlrZjE0CXN0cglGNAlLRVlfRigxNCkJLQktLS0tRQlGMTQgZnVuY3Rpb24ga2V5CitrZXlfZjE1CQkJCWtmMTUJc3RyCUY1CUtFWV9GKDE1KQktCS0tLS1FCUYxNSBmdW5jdGlvbiBrZXkKK2tleV9mMTYJCQkJa2YxNglzdHIJRjYJS0VZX0YoMTYpCS0JLS0tLUUJRjE2IGZ1bmN0aW9uIGtleQora2V5X2YxNwkJCQlrZjE3CXN0cglGNwlLRVlfRigxNykJLQktLS0tRQlGMTcgZnVuY3Rpb24ga2V5CitrZXlfZjE4CQkJCWtmMTgJc3RyCUY4CUtFWV9GKDE4KQktCS0tLS1FCUYxOCBmdW5jdGlvbiBrZXkKK2tleV9mMTkJCQkJa2YxOQlzdHIJRjkJS0VZX0YoMTkpCS0JLS0tLUUJRjE5IGZ1bmN0aW9uIGtleQora2V5X2YyMAkJCQlrZjIwCXN0cglGQQlLRVlfRigyMCkJLQktLS0tRQlGMjAgZnVuY3Rpb24ga2V5CitrZXlfZjIxCQkJCWtmMjEJc3RyCUZCCUtFWV9GKDIxKQktCS0tLS1FCUYyMSBmdW5jdGlvbiBrZXkKK2tleV9mMjIJCQkJa2YyMglzdHIJRkMJS0VZX0YoMjIpCS0JLS0tLUUJRjIyIGZ1bmN0aW9uIGtleQora2V5X2YyMwkJCQlrZjIzCXN0cglGRAlLRVlfRigyMykJLQktLS0tRQlGMjMgZnVuY3Rpb24ga2V5CitrZXlfZjI0CQkJCWtmMjQJc3RyCUZFCUtFWV9GKDI0KQktCS0tLS1FCUYyNCBmdW5jdGlvbiBrZXkKK2tleV9mMjUJCQkJa2YyNQlzdHIJRkYJS0VZX0YoMjUpCS0JLS0tLUUJRjI1IGZ1bmN0aW9uIGtleQora2V5X2YyNgkJCQlrZjI2CXN0cglGRwlLRVlfRigyNikJLQktLS0tRQlGMjYgZnVuY3Rpb24ga2V5CitrZXlfZjI3CQkJCWtmMjcJc3RyCUZICUtFWV9GKDI3KQktCS0tLS1FCUYyNyBmdW5jdGlvbiBrZXkKK2tleV9mMjgJCQkJa2YyOAlzdHIJRkkJS0VZX0YoMjgpCS0JLS0tLUUJRjI4IGZ1bmN0aW9uIGtleQora2V5X2YyOQkJCQlrZjI5CXN0cglGSglLRVlfRigyOSkJLQktLS0tRQlGMjkgZnVuY3Rpb24ga2V5CitrZXlfZjMwCQkJCWtmMzAJc3RyCUZLCUtFWV9GKDMwKQktCS0tLS1FCUYzMCBmdW5jdGlvbiBrZXkKK2tleV9mMzEJCQkJa2YzMQlzdHIJRkwJS0VZX0YoMzEpCS0JLS0tLUUJRjMxIGZ1bmN0aW9uIGtleQora2V5X2YzMgkJCQlrZjMyCXN0cglGTQlLRVlfRigzMikJLQktLS0tRQlGMzIgZnVuY3Rpb24ga2V5CitrZXlfZjMzCQkJCWtmMzMJc3RyCUZOCUtFWV9GKDMzKQktCS0tLS1FCUYzMyBmdW5jdGlvbiBrZXkKK2tleV9mMzQJCQkJa2YzNAlzdHIJRk8JS0VZX0YoMzQpCS0JLS0tLUUJRjM0IGZ1bmN0aW9uIGtleQora2V5X2YzNQkJCQlrZjM1CXN0cglGUAlLRVlfRigzNSkJLQktLS0tRQlGMzUgZnVuY3Rpb24ga2V5CitrZXlfZjM2CQkJCWtmMzYJc3RyCUZRCUtFWV9GKDM2KQktCS0tLS1FCUYzNiBmdW5jdGlvbiBrZXkKK2tleV9mMzcJCQkJa2YzNwlzdHIJRlIJS0VZX0YoMzcpCS0JLS0tLUUJRjM3IGZ1bmN0aW9uIGtleQora2V5X2YzOAkJCQlrZjM4CXN0cglGUwlLRVlfRigzOCkJLQktLS0tRQlGMzggZnVuY3Rpb24ga2V5CitrZXlfZjM5CQkJCWtmMzkJc3RyCUZUCUtFWV9GKDM5KQktCS0tLS1FCUYzOSBmdW5jdGlvbiBrZXkKK2tleV9mNDAJCQkJa2Y0MAlzdHIJRlUJS0VZX0YoNDApCS0JLS0tLUUJRjQwIGZ1bmN0aW9uIGtleQora2V5X2Y0MQkJCQlrZjQxCXN0cglGVglLRVlfRig0MSkJLQktLS0tRQlGNDEgZnVuY3Rpb24ga2V5CitrZXlfZjQyCQkJCWtmNDIJc3RyCUZXCUtFWV9GKDQyKQktCS0tLS1FCUY0MiBmdW5jdGlvbiBrZXkKK2tleV9mNDMJCQkJa2Y0MwlzdHIJRlgJS0VZX0YoNDMpCS0JLS0tLUUJRjQzIGZ1bmN0aW9uIGtleQora2V5X2Y0NAkJCQlrZjQ0CXN0cglGWQlLRVlfRig0NCkJLQktLS0tRQlGNDQgZnVuY3Rpb24ga2V5CitrZXlfZjQ1CQkJCWtmNDUJc3RyCUZaCUtFWV9GKDQ1KQktCS0tLS1FCUY0NSBmdW5jdGlvbiBrZXkKK2tleV9mNDYJCQkJa2Y0NglzdHIJRmEJS0VZX0YoNDYpCS0JLS0tLUUJRjQ2IGZ1bmN0aW9uIGtleQora2V5X2Y0NwkJCQlrZjQ3CXN0cglGYglLRVlfRig0NykJLQktLS0tRQlGNDcgZnVuY3Rpb24ga2V5CitrZXlfZjQ4CQkJCWtmNDgJc3RyCUZjCUtFWV9GKDQ4KQktCS0tLS1FCUY0OCBmdW5jdGlvbiBrZXkKK2tleV9mNDkJCQkJa2Y0OQlzdHIJRmQJS0VZX0YoNDkpCS0JLS0tLUUJRjQ5IGZ1bmN0aW9uIGtleQora2V5X2Y1MAkJCQlrZjUwCXN0cglGZQlLRVlfRig1MCkJLQktLS0tRQlGNTAgZnVuY3Rpb24ga2V5CitrZXlfZjUxCQkJCWtmNTEJc3RyCUZmCUtFWV9GKDUxKQktCS0tLS1FCUY1MSBmdW5jdGlvbiBrZXkKK2tleV9mNTIJCQkJa2Y1MglzdHIJRmcJS0VZX0YoNTIpCS0JLS0tLUUJRjUyIGZ1bmN0aW9uIGtleQora2V5X2Y1MwkJCQlrZjUzCXN0cglGaAlLRVlfRig1MykJLQktLS0tRQlGNTMgZnVuY3Rpb24ga2V5CitrZXlfZjU0CQkJCWtmNTQJc3RyCUZpCUtFWV9GKDU0KQktCS0tLS1FCUY1NCBmdW5jdGlvbiBrZXkKK2tleV9mNTUJCQkJa2Y1NQlzdHIJRmoJS0VZX0YoNTUpCS0JLS0tLUUJRjU1IGZ1bmN0aW9uIGtleQora2V5X2Y1NgkJCQlrZjU2CXN0cglGawlLRVlfRig1NikJLQktLS0tRQlGNTYgZnVuY3Rpb24ga2V5CitrZXlfZjU3CQkJCWtmNTcJc3RyCUZsCUtFWV9GKDU3KQktCS0tLS1FCUY1NyBmdW5jdGlvbiBrZXkKK2tleV9mNTgJCQkJa2Y1OAlzdHIJRm0JS0VZX0YoNTgpCS0JLS0tLUUJRjU4IGZ1bmN0aW9uIGtleQora2V5X2Y1OQkJCQlrZjU5CXN0cglGbglLRVlfRig1OSkJLQktLS0tRQlGNTkgZnVuY3Rpb24ga2V5CitrZXlfZjYwCQkJCWtmNjAJc3RyCUZvCUtFWV9GKDYwKQktCS0tLS1FCUY2MCBmdW5jdGlvbiBrZXkKK2tleV9mNjEJCQkJa2Y2MQlzdHIJRnAJS0VZX0YoNjEpCS0JLS0tLUUJRjYxIGZ1bmN0aW9uIGtleQora2V5X2Y2MgkJCQlrZjYyCXN0cglGcQlLRVlfRig2MikJLQktLS0tRQlGNjIgZnVuY3Rpb24ga2V5CitrZXlfZjYzCQkJCWtmNjMJc3RyCUZyCUtFWV9GKDYzKQktCS0tLS1FCUY2MyBmdW5jdGlvbiBrZXkKK2tleV9hY3Rpb24JCQlrYWN0CXN0cglrSgktCQktCS0tLS1LCXNlbnQgYnkgYWN0aW9uIGtleQorCisjIFRoZSBJQk0gZG9jcyBzYXkgdGhlc2UgY2FwYWJpbGl0aWVzIGFyZSBmb3IgdGFibGUtZHJhd2luZywgYW5kIGFyZQorIyB2YWxpZCBvbmx5IGZvciBhaXh0ZXJtIGRlc2NyaXB0aW9ucy4KK2VudGVyX3RvcGxpbmVfbW9kZQkJdG9wbAlzdHIJdHAJLQkJLQktLS0tSwlzdGFydCB0b3AtbGluZSBtb2RlCitlbnRlcl9ib3R0b21fbW9kZQkJYnRtbAlzdHIJYm0JLQkJLQktLS0tSwlzdGFydCBib3R0b20tbGluZSBtb2RlCitlbnRlcl9ydmVydF9tb2RlCQlydmVydAlzdHIJcnYJLQkJLQktLS0tSwlzdGFydCByaWdodC12ZXJ0aWNhbCBtb2RlCitlbnRlcl9sdmVydF9tb2RlCQlsdmVydAlzdHIJbHYJLQkJLQktLS0tSwlzdGFydCBsZWZ0LXZlcnRpY2FsIG1vZGUKKyMKKyMgU1ZyNCBjYXBhYmlsaXRpZXMgcmVzdW1lIGhlcmUuICBOb3RlIHRoYXQga2V5X2VuZCBpcyBpbiB0aGUgSUJNLWV4dGVuc2lvbnMuCisjCitjaGFyX3BhZGRpbmcJCQlybXAJc3RyCXJQCS0JCS0JLS0tLS0JbGlrZSBpcCBidXQgd2hlbiBpbiBpbnNlcnQgbW9kZQorYWNzX2NoYXJzCQkJYWNzYwlzdHIJYWMJLQkJLQktLS0tLQlncmFwaGljcyBjaGFyc2V0IHBhaXJzLCBiYXNlZCBvbiB2dDEwMAorcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKK2tleV9idGFiCQkJa2NidAlzdHIJa0IJS0VZX0JUQUIJMDU0MQktLS0tLQliYWNrLXRhYiBrZXkKK2VudGVyX3hvbl9tb2RlCQkJc214b24Jc3RyCVNYCS0JCS0JLS0tLS0JdHVybiBvbiB4b24veG9mZiBoYW5kc2hha2luZworZXhpdF94b25fbW9kZQkJCXJteG9uCXN0cglSWAktCQktCS0tLS0tCXR1cm4gb2ZmIHhvbi94b2ZmIGhhbmRzaGFraW5nCitlbnRlcl9hbV9tb2RlCQkJc21hbQlzdHIJU0EJLQkJLQktLS0tLQl0dXJuIG9uIGF1dG9tYXRpYyBtYXJnaW5zCitleGl0X2FtX21vZGUJCQlybWFtCXN0cglSQQktCQktCS0tLS0tCXR1cm4gb2ZmIGF1dG9tYXRpYyBtYXJnaW5zCit4b25fY2hhcmFjdGVyCQkJeG9uYwlzdHIJWE4JLQkJLQktLS0tLQlYT04gY2hhcmFjdGVyCit4b2ZmX2NoYXJhY3RlcgkJCXhvZmZjCXN0cglYRgktCQktCS0tLS0tCVhPRkYgY2hhcmFjdGVyCitlbmFfYWNzCQkJCWVuYWNzCXN0cgllQQktCQktCS0tLS0tCWVuYWJsZSBhbHRlcm5hdGUgY2hhciBzZXQKK2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCitsYWJlbF9vZmYJCQlybWxuCXN0cglMRgktCQktCS0tLS0tCXR1cm4gb2ZmIHNvZnQgbGFiZWxzCitrZXlfYmVnCQkJCWtiZWcJc3RyCUAxCUtFWV9CRUcJCTA1NDIJLS0tLS0JYmVnaW4ga2V5CitrZXlfY2FuY2VsCQkJa2NhbglzdHIJQDIJS0VZX0NBTkNFTAkwNTQzCS0tLS0tCWNhbmNlbCBrZXkKK2tleV9jbG9zZQkJCWtjbG8Jc3RyCUAzCUtFWV9DTE9TRQkwNTQ0CS0tLS0tCWNsb3NlIGtleQorI2tleV9jb21tYW5kCQkJa2NtZAlzdHIJQDQJS0VZX0NPTU1BTkQJMDU0NQktLS0tLQljb21tYW5kIGtleQora2V5X2NvcHkJCQlrY3B5CXN0cglANQlLRVlfQ09QWQkwNTQ2CS0tLS0tCWNvcHkga2V5CitrZXlfY3JlYXRlCQkJa2NydAlzdHIJQDYJS0VZX0NSRUFURQkwNTQ3CS0tLS0tCWNyZWF0ZSBrZXkKKyNrZXlfZW5kCQkJa2VuZAlzdHIJQDcJS0VZX0VORAkJMDU1MAktLS0tLQllbmQga2V5CitrZXlfZW50ZXIJCQlrZW50CXN0cglAOAlLRVlfRU5URVIJMDUyNwktLS0tLQllbnRlci9zZW5kIGtleQora2V5X2V4aXQJCQlrZXh0CXN0cglAOQlLRVlfRVhJVAkwNTUxCS0tLS0tCWV4aXQga2V5CitrZXlfZmluZAkJCWtmbmQJc3RyCUAwCUtFWV9GSU5ECTA1NTIJLS0tLS0JZmluZCBrZXkKKyNrZXlfaGVscAkJCWtobHAJc3RyCSUxCUtFWV9IRUxQCTA1NTMJLS0tLS0JaGVscCBrZXkKK2tleV9tYXJrCQkJa21yawlzdHIJJTIJS0VZX01BUksJMDU1NAktLS0tLQltYXJrIGtleQora2V5X21lc3NhZ2UJCQlrbXNnCXN0cgklMwlLRVlfTUVTU0FHRQkwNTU1CS0tLS0tCW1lc3NhZ2Uga2V5CitrZXlfbW92ZQkJCWttb3YJc3RyCSU0CUtFWV9NT1ZFCTA1NTYJLS0tLS0JbW92ZSBrZXkKK2tleV9uZXh0CQkJa254dAlzdHIJJTUJS0VZX05FWFQJMDU1NwktLS0tLQluZXh0IGtleQora2V5X29wZW4JCQlrb3BuCXN0cgklNglLRVlfT1BFTgkwNTYwCS0tLS0tCW9wZW4ga2V5CitrZXlfb3B0aW9ucwkJCWtvcHQJc3RyCSU3CUtFWV9PUFRJT05TCTA1NjEJLS0tLS0Jb3B0aW9ucyBrZXkKK2tleV9wcmV2aW91cwkJCWtwcnYJc3RyCSU4CUtFWV9QUkVWSU9VUwkwNTYyCS0tLS0tCXByZXZpb3VzIGtleQora2V5X3ByaW50CQkJa3BydAlzdHIJJTkJS0VZX1BSSU5UCTA1MzIJLS0tLS0JcHJpbnQga2V5CitrZXlfcmVkbwkJCWtyZG8Jc3RyCSUwCUtFWV9SRURPCTA1NjMJLS0tLS0JcmVkbyBrZXkKK2tleV9yZWZlcmVuY2UJCQlrcmVmCXN0cgkmMQlLRVlfUkVGRVJFTkNFCTA1NjQJLS0tLS0JcmVmZXJlbmNlIGtleQora2V5X3JlZnJlc2gJCQlrcmZyCXN0cgkmMglLRVlfUkVGUkVTSAkwNTY1CS0tLS0tCXJlZnJlc2gga2V5CitrZXlfcmVwbGFjZQkJCWtycGwJc3RyCSYzCUtFWV9SRVBMQUNFCTA1NjYJLS0tLS0JcmVwbGFjZSBrZXkKK2tleV9yZXN0YXJ0CQkJa3JzdAlzdHIJJjQJS0VZX1JFU1RBUlQJMDU2NwktLS0tLQlyZXN0YXJ0IGtleQora2V5X3Jlc3VtZQkJCWtyZXMJc3RyCSY1CUtFWV9SRVNVTUUJMDU3MAktLS0tLQlyZXN1bWUga2V5CitrZXlfc2F2ZQkJCWtzYXYJc3RyCSY2CUtFWV9TQVZFCTA1NzEJLS0tLS0Jc2F2ZSBrZXkKK2tleV9zdXNwZW5kCQkJa3NwZAlzdHIJJjcJS0VZX1NVU1BFTkQJMDYyNwktLS0tLQlzdXNwZW5kIGtleQora2V5X3VuZG8JCQlrdW5kCXN0cgkmOAlLRVlfVU5ETwkwNjMwCS0tLS0tCXVuZG8ga2V5CitrZXlfc2JlZwkJCWtCRUcJc3RyCSY5CUtFWV9TQkVHCTA1NzIJLS0tLS0Jc2hpZnRlZCBiZWdpbiBrZXkKK2tleV9zY2FuY2VsCQkJa0NBTglzdHIJJjAJS0VZX1NDQU5DRUwJMDU3MwktLS0tLQlzaGlmdGVkIGNhbmNlbCBrZXkKK2tleV9zY29tbWFuZAkJCWtDTUQJc3RyCSoxCUtFWV9TQ09NTUFORAkwNTc0CS0tLS0tCXNoaWZ0ZWQgY29tbWFuZCBrZXkKK2tleV9zY29weQkJCWtDUFkJc3RyCSoyCUtFWV9TQ09QWQkwNTc1CS0tLS0tCXNoaWZ0ZWQgY29weSBrZXkKK2tleV9zY3JlYXRlCQkJa0NSVAlzdHIJKjMJS0VZX1NDUkVBVEUJMDU3NgktLS0tLQlzaGlmdGVkIGNyZWF0ZSBrZXkKK2tleV9zZGMJCQkJa0RDCXN0cgkqNAlLRVlfU0RDCQkwNTc3CS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9zZGwJCQkJa0RMCXN0cgkqNQlLRVlfU0RMCQkwNjAwCS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWxpbmUga2V5CitrZXlfc2VsZWN0CQkJa3NsdAlzdHIJKjYJS0VZX1NFTEVDVAkwNjAxCS0tLS0tCXNlbGVjdCBrZXkKK2tleV9zZW5kCQkJa0VORAlzdHIJKjcJS0VZX1NFTkQJMDYwMgktLS0tLQlzaGlmdGVkIGVuZCBrZXkKK2tleV9zZW9sCQkJa0VPTAlzdHIJKjgJS0VZX1NFT0wJMDYwMwktLS0tLQlzaGlmdGVkIGNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X3NleGl0CQkJa0VYVAlzdHIJKjkJS0VZX1NFWElUCTA2MDQJLS0tLS0Jc2hpZnRlZCBleGl0IGtleQora2V5X3NmaW5kCQkJa0ZORAlzdHIJKjAJS0VZX1NGSU5ECTA2MDUJLS0tLS0Jc2hpZnRlZCBmaW5kIGtleQora2V5X3NoZWxwCQkJa0hMUAlzdHIJIzEJS0VZX1NIRUxQCTA2MDYJLS0tLS0Jc2hpZnRlZCBoZWxwIGtleQora2V5X3Nob21lCQkJa0hPTQlzdHIJIzIJS0VZX1NIT01FCTA2MDcJLS0tLS0Jc2hpZnRlZCBob21lIGtleQora2V5X3NpYwkJCQlrSUMJc3RyCSMzCUtFWV9TSUMJCTA2MTAJLS0tLS0Jc2hpZnRlZCBpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X3NsZWZ0CQkJa0xGVAlzdHIJIzQJS0VZX1NMRUZUCTA2MTEJLS0tLS0Jc2hpZnRlZCBsZWZ0LWFycm93IGtleQora2V5X3NtZXNzYWdlCQkJa01TRwlzdHIJJWEJS0VZX1NNRVNTQUdFCTA2MTIJLS0tLS0Jc2hpZnRlZCBtZXNzYWdlIGtleQora2V5X3Ntb3ZlCQkJa01PVglzdHIJJWIJS0VZX1NNT1ZFCTA2MTMJLS0tLS0Jc2hpZnRlZCBtb3ZlIGtleQora2V5X3NuZXh0CQkJa05YVAlzdHIJJWMJS0VZX1NORVhUCTA2MTQJLS0tLS0Jc2hpZnRlZCBuZXh0IGtleQora2V5X3NvcHRpb25zCQkJa09QVAlzdHIJJWQJS0VZX1NPUFRJT05TCTA2MTUJLS0tLS0Jc2hpZnRlZCBvcHRpb25zIGtleQora2V5X3NwcmV2aW91cwkJCWtQUlYJc3RyCSVlCUtFWV9TUFJFVklPVVMJMDYxNgktLS0tLQlzaGlmdGVkIHByZXZpb3VzIGtleQora2V5X3NwcmludAkJCWtQUlQJc3RyCSVmCUtFWV9TUFJJTlQJMDYxNwktLS0tLQlzaGlmdGVkIHByaW50IGtleQora2V5X3NyZWRvCQkJa1JETwlzdHIJJWcJS0VZX1NSRURPCTA2MjAJLS0tLS0Jc2hpZnRlZCByZWRvIGtleQora2V5X3NyZXBsYWNlCQkJa1JQTAlzdHIJJWgJS0VZX1NSRVBMQUNFCTA2MjEJLS0tLS0Jc2hpZnRlZCByZXBsYWNlIGtleQora2V5X3NyaWdodAkJCWtSSVQJc3RyCSVpCUtFWV9TUklHSFQJMDYyMgktLS0tLQlzaGlmdGVkIHJpZ2h0LWFycm93IGtleQora2V5X3Nyc3VtZQkJCWtSRVMJc3RyCSVqCUtFWV9TUlNVTUUJMDYyMwktLS0tLQlzaGlmdGVkIHJlc3VtZSBrZXkKK2tleV9zc2F2ZQkJCWtTQVYJc3RyCSExCUtFWV9TU0FWRQkwNjI0CS0tLS0tCXNoaWZ0ZWQgc2F2ZSBrZXkKK2tleV9zc3VzcGVuZAkJCWtTUEQJc3RyCSEyCUtFWV9TU1VTUEVORAkwNjI1CS0tLS0tCXNoaWZ0ZWQgc3VzcGVuZCBrZXkKK2tleV9zdW5kbwkJCWtVTkQJc3RyCSEzCUtFWV9TVU5ETwkwNjI2CS0tLS0tCXNoaWZ0ZWQgdW5kbyBrZXkKK3JlcV9mb3JfaW5wdXQJCQlyZmkJc3RyCVJGCS0JCS0JLS0tLS0Jc2VuZCBuZXh0IGlucHV0IGNoYXIgKGZvciBwdHlzKQorY2xyX2JvbAkJCQllbDEJc3RyCWNiCS0JCS0JLS0tLS0JQ2xlYXIgdG8gYmVnaW5uaW5nIG9mIGxpbmUKK2NsZWFyX21hcmdpbnMJCQltZ2MJc3RyCU1DCS0JCS0JLS0tLS0JY2xlYXIgcmlnaHQgYW5kIGxlZnQgc29mdCBtYXJnaW5zCitzZXRfbGVmdF9tYXJnaW4JCQlzbWdsCXN0cglNTAktCQktCS0tLS0tCXNldCBsZWZ0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uLgkgU2VlIHNtZ2wuIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3JpZ2h0X21hcmdpbgkJc21ncglzdHIJTVIJLQkJLQktLS0tLQlzZXQgcmlnaHQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4KK2xhYmVsX2Zvcm1hdAkJCWZsbglzdHIJTGYJLQkJLQktLS0tLQlsYWJlbCBmb3JtYXQKK3NldF9jbG9jawkJCXNjbGsJc3RyCVNDCS0JCS0JLS0tLS0Jc2V0IGNsb2NrLCAjMSBocnMgIzIgbWlucyAjMyBzZWNzCitkaXNwbGF5X2Nsb2NrCQkJZGNsawlzdHIJREsJLQkJLQktLS0tLQlkaXNwbGF5IGNsb2NrCityZW1vdmVfY2xvY2sJCQlybWNsawlzdHIJUkMJLQkJLQktLS0tLQlyZW1vdmUgY2xvY2sKK2NyZWF0ZV93aW5kb3cJCQljd2luCXN0cglDVwktCQktCS0tLS0tCWRlZmluZSBhIHdpbmRvdyAjMSBmcm9tICMyLCMzIHRvICM0LCM1Citnb3RvX3dpbmRvdwkJCXdpbmdvCXN0cglXRwktCQktCS0tLS0tCWdvIHRvIHdpbmRvdyAjMQoraGFuZ3VwCQkJCWh1cAlzdHIJSFUJLQkJLQktLS0tLQloYW5nLXVwIHBob25lCitkaWFsX3Bob25lCQkJZGlhbAlzdHIJREkJLQkJLQktLS0tLQlkaWFsIG51bWJlciAjMQorcXVpY2tfZGlhbAkJCXFkaWFsCXN0cglRRAktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxIHdpdGhvdXQgY2hlY2tpbmcKK3RvbmUJCQkJdG9uZQlzdHIJVE8JLQkJLQktLS0tLQlzZWxlY3QgdG91Y2ggdG9uZSBkaWFsaW5nCitwdWxzZQkJCQlwdWxzZQlzdHIJUFUJLQkJLQktLS0tLQlzZWxlY3QgcHVsc2UgZGlhbGluZworZmxhc2hfaG9vawkJCWhvb2sJc3RyCWZoCS0JCS0JLS0tLS0JZmxhc2ggc3dpdGNoIGhvb2sKK2ZpeGVkX3BhdXNlCQkJcGF1c2UJc3RyCVBBCS0JCS0JLS0tLS0JcGF1c2UgZm9yIDItMyBzZWNvbmRzCit3YWl0X3RvbmUJCQl3YWl0CXN0cglXQQktCQktCS0tLS0tCXdhaXQgZm9yIGRpYWwtdG9uZQordXNlcjAJCQkJdTAJc3RyCXUwCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzAKK3VzZXIxCQkJCXUxCXN0cgl1MQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMxCit1c2VyMgkJCQl1MglzdHIJdTIJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMgordXNlcjMJCQkJdTMJc3RyCXUzCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzMKK3VzZXI0CQkJCXU0CXN0cgl1NAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM0Cit1c2VyNQkJCQl1NQlzdHIJdTUJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNQordXNlcjYJCQkJdTYJc3RyCXU2CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzYKK3VzZXI3CQkJCXU3CXN0cgl1NwktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM3Cit1c2VyOAkJCQl1OAlzdHIJdTgJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOAordXNlcjkJCQkJdTkJc3RyCXU5CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzkKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCBjb2xvcgorIworb3JpZ19wYWlyCQkJb3AJc3RyCW9wCS0JCS0JLS0tLS0JU2V0IGRlZmF1bHQgcGFpciB0byBpdHMgb3JpZ2luYWwgdmFsdWUKK29yaWdfY29sb3JzCQkJb2MJc3RyCW9jCS0JCS0JLS0tLS0JU2V0IGFsbCBjb2xvciBwYWlycyB0byB0aGUgb3JpZ2luYWwgb25lcworaW5pdGlhbGl6ZV9jb2xvcgkJaW5pdGMJc3RyCUljCS0JCS0JLS0tLS0JaW5pdGlhbGl6ZSBjb2xvciAjMSB0byAoIzIsIzMsIzQpCitpbml0aWFsaXplX3BhaXIJCQlpbml0cAlzdHIJSXAJLQkJLQktLS0tLQlJbml0aWFsaXplIGNvbG9yIHBhaXIgIzEgdG8gZmc9KCMyLCMzLCM0KSwgYmc9KCM1LCM2LCM3KQorc2V0X2NvbG9yX3BhaXIJCQlzY3AJc3RyCXNwCS0JCS0JLS0tLS0JU2V0IGN1cnJlbnQgY29sb3IgcGFpciB0byAjMQorc2V0X2ZvcmVncm91bmQJCQlzZXRmCXN0cglTZgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yICMxCitzZXRfYmFja2dyb3VuZAkJCXNldGIJc3RyCVNiCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgIzEKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCBwcmludGVycworIworY2hhbmdlX2NoYXJfcGl0Y2gJCWNwaQlzdHIJWkEJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGluY2ggdG8gIzEKK2NoYW5nZV9saW5lX3BpdGNoCQlscGkJc3RyCVpCCS0JCS0JLS0tLS0JQ2hhbmdlIG51bWJlciBvZiBsaW5lcyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX3Jlc19ob3J6CQkJY2hyCXN0cglaQwktCQktCS0tLS0tCUNoYW5nZSBob3Jpem9udGFsIHJlc29sdXRpb24gdG8gIzEKK2NoYW5nZV9yZXNfdmVydAkJCWN2cglzdHIJWkQJLQkJLQktLS0tLQlDaGFuZ2UgdmVydGljYWwgcmVzb2x1dGlvbiB0byAjMQorZGVmaW5lX2NoYXIJCQlkZWZjCXN0cglaRQktCQktCS0tLS0tCURlZmluZSBhIGNoYXJhY3RlciAjMSwgIzIgZG90cyB3aWRlLCBkZXNjZW5kZXIgIzMKK2VudGVyX2RvdWJsZXdpZGVfbW9kZQkJc3dpZG0Jc3RyCVpGCS0JCS0JLS0tLS0JRW50ZXIgZG91YmxlLXdpZGUgbW9kZQorZW50ZXJfZHJhZnRfcXVhbGl0eQkJc2RyZnEJc3RyCVpHCS0JCS0JLS0tLS0JRW50ZXIgZHJhZnQtcXVhbGl0eSBtb2RlCitlbnRlcl9pdGFsaWNzX21vZGUJCXNpdG0Jc3RyCVpICS0JCS0JLS0tLS0JRW50ZXIgaXRhbGljIG1vZGUKK2VudGVyX2xlZnR3YXJkX21vZGUJCXNsbQlzdHIJWkkJLQkJLQktLS0tLQlTdGFydCBsZWZ0d2FyZCBjYXJyaWFnZSBtb3Rpb24KK2VudGVyX21pY3JvX21vZGUJCXNtaWNtCXN0cglaSgktCQktCS0tLS0tCVN0YXJ0IG1pY3JvLW1vdGlvbiBtb2RlCitlbnRlcl9uZWFyX2xldHRlcl9xdWFsaXR5CXNubHEJc3RyCVpLCS0JCS0JLS0tLS0JRW50ZXIgTkxRIG1vZGUKK2VudGVyX25vcm1hbF9xdWFsaXR5CQlzbnJtcQlzdHIJWkwJLQkJLQktLS0tLQlFbnRlciBub3JtYWwtcXVhbGl0eSBtb2RlCitlbnRlcl9zaGFkb3dfbW9kZQkJc3NobQlzdHIJWk0JLQkJLQktLS0tLQlFbnRlciBzaGFkb3ctcHJpbnQgbW9kZQorZW50ZXJfc3Vic2NyaXB0X21vZGUJCXNzdWJtCXN0cglaTgktCQktCS0tLS0tCUVudGVyIHN1YnNjcmlwdCBtb2RlCitlbnRlcl9zdXBlcnNjcmlwdF9tb2RlCQlzc3VwbQlzdHIJWk8JLQkJLQktLS0tLQlFbnRlciBzdXBlcnNjcmlwdCBtb2RlCitlbnRlcl91cHdhcmRfbW9kZQkJc3VtCXN0cglaUAktCQktCS0tLS0tCVN0YXJ0IHVwd2FyZCBjYXJyaWFnZSBtb3Rpb24KK2V4aXRfZG91Ymxld2lkZV9tb2RlCQlyd2lkbQlzdHIJWlEJLQkJLQktLS0tLQlFbmQgZG91YmxlLXdpZGUgbW9kZQorZXhpdF9pdGFsaWNzX21vZGUJCXJpdG0Jc3RyCVpSCS0JCS0JLS0tLS0JRW5kIGl0YWxpYyBtb2RlCitleGl0X2xlZnR3YXJkX21vZGUJCXJsbQlzdHIJWlMJLQkJLQktLS0tLQlFbmQgbGVmdC1tb3Rpb24gbW9kZQorZXhpdF9taWNyb19tb2RlCQkJcm1pY20Jc3RyCVpUCS0JCS0JLS0tLS0JRW5kIG1pY3JvLW1vdGlvbiBtb2RlCitleGl0X3NoYWRvd19tb2RlCQlyc2htCXN0cglaVQktCQktCS0tLS0tCUVuZCBzaGFkb3ctcHJpbnQgbW9kZQorZXhpdF9zdWJzY3JpcHRfbW9kZQkJcnN1Ym0Jc3RyCVpWCS0JCS0JLS0tLS0JRW5kIHN1YnNjcmlwdCBtb2RlCitleGl0X3N1cGVyc2NyaXB0X21vZGUJCXJzdXBtCXN0cglaVwktCQktCS0tLS0tCUVuZCBzdXBlcnNjcmlwdCBtb2RlCitleGl0X3Vwd2FyZF9tb2RlCQlydW0Jc3RyCVpYCS0JCS0JLS0tLS0JRW5kIHJldmVyc2UgY2hhcmFjdGVyIG1vdGlvbgorbWljcm9fY29sdW1uX2FkZHJlc3MJCW1ocGEJc3RyCVpZCS0JCS0JLS0tLS0JTGlrZSBjb2x1bW5fYWRkcmVzcyBpbiBtaWNybyBtb2RlCittaWNyb19kb3duCQkJbWN1ZDEJc3RyCVpaCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfZG93biBpbiBtaWNybyBtb2RlCittaWNyb19sZWZ0CQkJbWN1YjEJc3RyCVphCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfbGVmdCBpbiBtaWNybyBtb2RlCittaWNyb19yaWdodAkJCW1jdWYxCXN0cglaYgktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3JpZ2h0IGluIG1pY3JvIG1vZGUKK21pY3JvX3Jvd19hZGRyZXNzCQltdnBhCXN0cglaYwktCQktCS0tLS0tCUxpa2Ugcm93X2FkZHJlc3MgIzEgaW4gbWljcm8gbW9kZQorbWljcm9fdXAJCQltY3V1MQlzdHIJWmQJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl91cCBpbiBtaWNybyBtb2RlCitvcmRlcl9vZl9waW5zCQkJcG9yZGVyCXN0cglaZQktCQktCS0tLS0tCU1hdGNoIHNvZnR3YXJlIGJpdHMgdG8gcHJpbnQtaGVhZCBwaW5zCitwYXJtX2Rvd25fbWljcm8JCQltY3VkCXN0cglaZgktCQktCS0tLS0tCUxpa2UgcGFybV9kb3duX2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX2xlZnRfbWljcm8JCQltY3ViCXN0cglaZwktCQktCS0tLS0tCUxpa2UgcGFybV9sZWZ0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3JpZ2h0X21pY3JvCQltY3VmCXN0cglaaAktCQktCS0tLS0tCUxpa2UgcGFybV9yaWdodF9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV91cF9taWNybwkJCW1jdXUJc3RyCVppCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3VwX2N1cnNvciBpbiBtaWNybyBtb2RlCitzZWxlY3RfY2hhcl9zZXQJCQlzY3MJc3RyCVpqCS0JCS0JLS0tLS0JU2VsZWN0IGNoYXJhY3RlciBzZXQsICMxCitzZXRfYm90dG9tX21hcmdpbgkJc21nYglzdHIJWmsJLQkJLQktLS0tLQlTZXQgYm90dG9tIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF9ib3R0b21fbWFyZ2luX3Bhcm0JCXNtZ2JwCXN0cglabAktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGxpbmUgIzEgb3IgKGlmIHNtZ3RwIGlzIG5vdCBnaXZlbikgIzIgbGluZXMgZnJvbSBib3R0b20KK3NldF9sZWZ0X21hcmdpbl9wYXJtCQlzbWdscAlzdHIJWm0JLQkJLQktLS0tLQlTZXQgbGVmdCAocmlnaHQpIG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF9yaWdodF9tYXJnaW5fcGFybQkJc21ncnAJc3RyCVpuCS0JCS0JLS0tLS0JU2V0IHJpZ2h0IG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF90b3BfbWFyZ2luCQkJc21ndAlzdHIJWm8JLQkJLQktLS0tLQlTZXQgdG9wIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF90b3BfbWFyZ2luX3Bhcm0JCXNtZ3RwCXN0cglacAktCQktCS0tLS0tCVNldCB0b3AgKGJvdHRvbSkgbWFyZ2luIGF0IHJvdyAjMQorc3RhcnRfYml0X2ltYWdlCQkJc2JpbQlzdHIJWnEJLQkJLQktLS0tLQlTdGFydCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0YXJ0X2NoYXJfc2V0X2RlZgkJc2NzZAlzdHIJWnIJLQkJLQktLS0tLQlTdGFydCBjaGFyYWN0ZXIgc2V0IGRlZmluaXRpb24gIzEsIHdpdGggIzIgY2hhcmFjdGVycyBpbiB0aGUgc2V0CitzdG9wX2JpdF9pbWFnZQkJCXJiaW0Jc3RyCVpzCS0JCS0JLS0tLS0JU3RvcCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0b3BfY2hhcl9zZXRfZGVmCQlyY3NkCXN0cgladAktCQktCS0tLS0tCUVuZCBkZWZpbml0aW9uIG9mIGNoYXJhY3RlciBzZXQgIzEKK3N1YnNjcmlwdF9jaGFyYWN0ZXJzCQlzdWJjcwlzdHIJWnUJLQkJLQktLS0tLQlMaXN0IG9mIHN1YnNjcmlwdGFibGUgY2hhcmFjdGVycworc3VwZXJzY3JpcHRfY2hhcmFjdGVycwkJc3VwY3MJc3RyCVp2CS0JCS0JLS0tLS0JTGlzdCBvZiBzdXBlcnNjcmlwdGFibGUgY2hhcmFjdGVycwordGhlc2VfY2F1c2VfY3IJCQlkb2NyCXN0cgladwktCQktCS0tLS0tCVByaW50aW5nIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzIGNhdXNlcyBDUgoremVyb19tb3Rpb24JCQl6ZXJvbQlzdHIJWngJLQkJLQktLS0tLQlObyBtb3Rpb24gZm9yIHN1YnNlcXVlbnQgY2hhcmFjdGVyCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgc3RyaW5nIGNhcGFiaWxpdGllcyBhcmUgcHJlc2VudCBpbiB0aGUgU1ZyNC4wIHRlcm0gc3RydWN0dXJlLAorIyVidXQgd2VyZSBvcmlnaW5hbGx5IG5vdCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4KKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MTguCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitjaGFyX3NldF9uYW1lcwkJCWNzbm0Jc3RyCVp5CS0JCS0JLS0tLS0JUHJvZHVjZSAjMSd0aCBpdGVtIGZyb20gbGlzdCBvZiBjaGFyYWN0ZXIgc2V0IG5hbWVzCitrZXlfbW91c2UJCQlrbW91cwlzdHIJS20JS0VZX01PVVNFCTA2MzEJLS0tLS0JTW91c2UgZXZlbnQgaGFzIG9jY3VycmVkCittb3VzZV9pbmZvCQkJbWluZm8Jc3RyCU1pCS0JCS0JLS0tLS0JTW91c2Ugc3RhdHVzIGluZm9ybWF0aW9uCityZXFfbW91c2VfcG9zCQkJcmVxbXAJc3RyCVJRCS0JCS0JLS0tLS0JUmVxdWVzdCBtb3VzZSBwb3NpdGlvbgorZ2V0X21vdXNlCQkJZ2V0bQlzdHIJR20JLQkJLQktLS0tLQlDdXJzZXMgc2hvdWxkIGdldCBidXR0b24gZXZlbnRzLCBwYXJhbWV0ZXIgIzEgbm90IGRvY3VtZW50ZWQuCitzZXRfYV9mb3JlZ3JvdW5kCQlzZXRhZglzdHIJQUYJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciB0byAjMSwgdXNpbmcgQU5TSSBlc2NhcGUKK3NldF9hX2JhY2tncm91bmQJCXNldGFiCXN0cglBQgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorcGtleV9wbGFiCQkJcGZ4bAlzdHIJeGwJLQkJLQktLS0tLQlQcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMiBhbmQgc2hvdyBzdHJpbmcgIzMKK2RldmljZV90eXBlCQkJZGV2dAlzdHIJZHYJLQkJLQktLS0tLQlJbmRpY2F0ZSBsYW5ndWFnZS9jb2Rlc2V0IHN1cHBvcnQKK2NvZGVfc2V0X2luaXQJCQljc2luCXN0cgljaQktCQktCS0tLS0tCUluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIGNvZGVzZXRzCitzZXQwX2Rlc19zZXEJCQlzMGRzCXN0cglzMAktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMCAoRVVDIHNldCAwLCBBU0NJSSkKK3NldDFfZGVzX3NlcQkJCXMxZHMJc3RyCXMxCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAxCitzZXQyX2Rlc19zZXEJCQlzMmRzCXN0cglzMgktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMgorc2V0M19kZXNfc2VxCQkJczNkcwlzdHIJczMJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDMKK3NldF9scl9tYXJnaW4JCQlzbWdscglzdHIJTUwJLQkJLQktLS0tLQlTZXQgYm90aCBsZWZ0IGFuZCByaWdodCBtYXJnaW5zIHRvICMxLCAjMi4gIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3RiX21hcmdpbgkJCXNtZ3RiCXN0cglNVAktCQktCS0tLS0tCVNldHMgYm90aCB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIHRvICMxLCAjMgorYml0X2ltYWdlX3JlcGVhdAkJYmlyZXAJc3RyCVh5CS0JCS0JLS0tLS0JUmVwZWF0IGJpdCBpbWFnZSBjZWxsICMxICMyIHRpbWVzCitiaXRfaW1hZ2VfbmV3bGluZQkJYmluZWwJc3RyCVp6CS0JCS0JLS0tLS0JTW92ZSB0byBuZXh0IHJvdyBvZiB0aGUgYml0IGltYWdlCitiaXRfaW1hZ2VfY2FycmlhZ2VfcmV0dXJuCWJpY3IJc3RyCVl2CS0JCS0JLS0tLS0JTW92ZSB0byBiZWdpbm5pbmcgb2Ygc2FtZSByb3cKK2NvbG9yX25hbWVzCQkJY29sb3JubQlzdHIJWXcJLQkJLQktLS0tLQlHaXZlIG5hbWUgZm9yIGNvbG9yICMxCitkZWZpbmVfYml0X2ltYWdlX3JlZ2lvbgkJZGVmYmkJc3RyCVl4CS0JCS0JLS0tLS0JRGVmaW5lIHJlY3Rhbmd1YWxhciBiaXQgaW1hZ2UgcmVnaW9uCitlbmRfYml0X2ltYWdlX3JlZ2lvbgkJZW5kYmkJc3RyCVl5CS0JCS0JLS0tLS0JRW5kIGEgYml0LWltYWdlIHJlZ2lvbgorc2V0X2NvbG9yX2JhbmQJCXNldGNvbG9yCXN0cglZegktCQktCS0tLS0tCUNoYW5nZSB0byByaWJib24gY29sb3IgIzEKK3NldF9wYWdlX2xlbmd0aAkJCXNsaW5lcwlzdHIJWVoJLQkJLQktLS0tLQlTZXQgcGFnZSBsZW5ndGggdG8gIzEgbGluZXMKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgZm9yIGRpcmVjdCBQQy1jbG9uZSBzdXBwb3J0CisjCitkaXNwbGF5X3BjX2NoYXIJCQlkaXNwYwlzdHIJUzEJLQkJLQktLS0tLQlEaXNwbGF5IFBDIGNoYXJhY3RlciAjMQorZW50ZXJfcGNfY2hhcnNldF9tb2RlCQlzbXBjaAlzdHIJUzIJLQkJLQktLS0tLQlFbnRlciBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitleGl0X3BjX2NoYXJzZXRfbW9kZQkJcm1wY2gJc3RyCVMzCS0JCS0JLS0tLS0JRXhpdCBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitlbnRlcl9zY2FuY29kZV9tb2RlCQlzbXNjCXN0cglTNAktCQktCS0tLS0tCUVudGVyIFBDIHNjYW5jb2RlIG1vZGUKK2V4aXRfc2NhbmNvZGVfbW9kZQkJcm1zYwlzdHIJUzUJLQkJLQktLS0tLQlFeGl0IFBDIHNjYW5jb2RlIG1vZGUKK3BjX3Rlcm1fb3B0aW9ucwkJCXBjdHJtCXN0cglTNgktCQktCS0tLS0tCVBDIHRlcm1pbmFsIG9wdGlvbnMKK3NjYW5jb2RlX2VzY2FwZQkJCXNjZXNjCXN0cglTNwktCQktCS0tLS0tCUVzY2FwZSBmb3Igc2NhbmNvZGUgZW11bGF0aW9uCithbHRfc2NhbmNvZGVfZXNjCQlzY2VzYQlzdHIJUzgJLQkJLQktLS0tLQlBbHRlcm5hdGUgZXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlLmluIC44aQorIyVUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBhZGRlZCB0aGVzZS4gIFRoZXkgYXJlIHNvbWUgcG9zdC00LjEgCisjJXZlcnNpb25zIG9mIFN5c3RlbSBWIGN1cnNlcywgZS5nLiwgU29sYXJpcyAyLjUgYW5kIElSSVggNi54LgorIyVUaGUgXGZCbmN1cnNlc1xmUiB0ZXJtY2FwIG5hbWVzIGZvciB0aGVtIGFyZSBpbnZlbnRlZDsgYWNjb3JkaW5nIHRvIHRoZQorIyVYU0kgQ3Vyc2VzIHN0YW5kYXJkLCB0aGV5IGhhdmUgbm8gdGVybWNhcCBuYW1lcy4gIElmIHlvdXIgY29tcGlsZWQgdGVybWluZm8KKyMlZW50cmllcyB1c2UgdGhlc2UsIHRoZXkgbWF5IG5vdCBiZSBiaW5hcnktY29tcGF0aWJsZSB3aXRoIFN5c3RlbSBWIHRlcm1pbmZvCisjJWVudHJpZXMgYWZ0ZXIgU1ZyNC4xOyBiZXdhcmUhCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorZW50ZXJfaG9yaXpvbnRhbF9obF9tb2RlCWVoaGxtCXN0cglYaAktCQktCS0tLS0tCUVudGVyIGhvcml6b250YWwgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX2xlZnRfaGxfbW9kZQkJZWxobG0Jc3RyCVhsCS0JCS0JLS0tLS0JRW50ZXIgbGVmdCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbG93X2hsX21vZGUJCWVsb2hsbQlzdHIJWG8JLQkJLQktLS0tLQlFbnRlciBsb3cgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3JpZ2h0X2hsX21vZGUJCWVyaGxtCXN0cglYcgktCQktCS0tLS0tCUVudGVyIHJpZ2h0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl90b3BfaGxfbW9kZQkJZXRobG0Jc3RyCVh0CS0JCS0JLS0tLS0JRW50ZXIgdG9wIGhpZ2hsaWdodCBtb2RlCitlbnRlcl92ZXJ0aWNhbF9obF9tb2RlCQlldmhsbQlzdHIJWHYJLQkJLQktLS0tLQlFbnRlciB2ZXJ0aWNhbCBoaWdobGlnaHQgbW9kZQorc2V0X2FfYXR0cmlidXRlcwkJc2dyMQlzdHIJc0EJLQkJLQktLS0tLQlEZWZpbmUgc2Vjb25kIHNldCBvZiB2aWRlbyBhdHRyaWJ1dGVzICMxLSM2CitzZXRfcGdsZW5faW5jaAkJCXNsZW5ndGgJc3RyCXNMCS0JCS0JLS0tLS0JWUkgU2V0IHBhZ2UgbGVuZ3RoIHRvICMxIGh1bmRyZWR0aCBvZiBhbiBpbmNoCisjJS5URQorIyUuYWQKKyMKKyMgVGhlIG1hZ2ljIHRva2VuIGJlbG93IHRlbGxzIHRoZSB0aWMgY29tcGlsZXItZ2VuZXJhdG9yIGNvZGUgdGhhdCBhbGwgdGhlIGNhcHMKKyMgcGFzdCBpdCBzaG91bGQgYmUgaWdub3JlZCAobm90IHdyaXR0ZW4gb3V0KSB3aGVuIGR1bXBpbmcgdGVybWluZm8gb2JqZWN0cy4gSXQKKyMgYWxzbyB0ZWxscyB0aGUgbWFuIHBhZ2UgdGFibGUgZ2VuZXJhdG9yIG5vdCB0byBwYXNzIHRocm91Z2ggZm9sbG93aW5nIGxpbmVzCisjIFRoaXMgbWVhbnMgd2UgY2FuIGhhdmUgb2Jzb2xldGUgY2FwYWJpbGl0aWVzIGFuZCBwc2V1ZG8tY2FwYWJpbGl0aWVzIHRoYXQgYXJlCisjIHJlY29nbml6ZWQgZm9yIHRlcm1jYXAgb3IgdGVybWluZm8gY29tcGlsYXRpb24sIGJ1dCBub3Qgb3V0cHV0LgorIworIyAlJS1TVE9QLUhFUkUtJSUKKyMKKyMgRG9uJ3QgbW92ZSB0aGlzIGNhc3VhbGx5ISAgSW4gZmFjdCwgZG9uJ3QgbW92ZSBpdCBhdCBhbGwgdW5sZXNzIHlvdSdyZQorIyBlaXRoZXIgZG9pbmcgaXQgdG8gYWRkIFN5c3RlbSBWIG9yIFhQRzQgZXh0ZW5zaW9ucywgb3IgaGF2ZSBkZWNpZGVkIHlvdQorIyBkb24ndCBjYXJlIGFib3V0IFNWcjQgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNQ0FQIEVYVEVOU0lPTiBDQVBBQklMSVRJRVMKKyMKKyMgVGhlIGNhcGFiaWxpdGllcyBiZWxvdyBhcmUgZWl0aGVyIG9ic29sZXRlIG9yIGV4dGVuc2lvbnMgb24gY2VydGFpbiBzeXN0ZW1zLgorIyBUaGV5IGFyZSBub3QgdXNlZCBieSBTVlI0IHRlcm1pbmZvLiAgU29tZSBhcmUgdXNlZCBieSBjYXB0b2luZm8gdG8gdHJhbnNsYXRlCisjIHRlcm1jYXAgc291cmNlczsgdGhlIHJlc3QgYXJlIGxpc3RlZCBmb3IgY29tcGxldGVuZXNzLCBhbmQgaW4gY2FzZSBzb21lYm9keQorIyBjYXJlcyBhYm91dCB0aGVtIGVub3VnaCB0byBoYWNrIGluIGNvZGUgdGhhdCB3aWxsIHRyYW5zbGF0ZSB0aGVtIGludG8KKyMgdGVybWluZm8gY2FwYWJpbGl0aWVzLgorIworIyBUaGUgZmlyc3QgcGFydCBvZiB0aGUgbGlzdCBpcyBmcm9tIFJvc3MgUmlkZ2UncyBgbXl0aW5mbycgcGFja2FnZQorIyAoY29tcC5zb3VyY2VzLnVuaXgsIHZvbHVtZSAyNik7IHRoZSB2YXJpYWJsZSBuYW1lcyBhbmQgdGVybWluZm8gbmFtZXMgKGFzCisjIHdlbGwgYXMgdGhlIHRlcm1jYXAgY29kZXMpIG1hdGNoIGhpcyBsaXN0LgorIworIyBUaGlzIGdyb3VwIG9mIGNvZGVzIGlzIG5vdCBtYXJrZWQgb2Jzb2xldGUgaW4gNC40QlNELCBidXQgaGF2ZSBubyBkaXJlY3QKKyMgdGVybWluZm8gZXF1aXZhbGVudHMuICBUaGUgcnMgY2FwYWJpbGl0eSBpcyBzcGVjaWFsbHkgdHJhbnNsYXRlZCB0byB0ZXJtaW5mbworIyByMiwgYW5kIHZpY2UgdmVyc2EsIGlmIGFuIGVudHJ5IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiByMi4gIFNpbWlsYXJseSwKKyMgaTIgaXMgdHJhbnNsYXRlZCB0byByMyBpZiB0aGVyZSBpcyBubyByMyAoYmVjYXVzZSBTViB0ZXJtaW5mbyBtYXBzIGlzIHRvIGkyKS4KKyMgVGhlIHVnIGNhcGFiaWxpdHkgaXMgdGhyb3duIGF3YXksIGJ1dCBhc3N1bWVkIHRvIGJlIHdoYXRldmVyIHNnIGlzIGlmIHRoZQorIyBsYXR0ZXIgaXMgbm9uemVybyBhbmQgd2UncmUgZHVtcGluZyBpbiB0ZXJtY2FwIGZvcm1hdC4KKyMKK3Rlcm1jYXBfaW5pdDIJCQlPVGkyCXN0cglpMgktCQktCVlCLS0tCXNlY29uZGFyeSBpbml0aWFsaXphdGlvbiBzdHJpbmcKK3Rlcm1jYXBfcmVzZXQJCQlPVHJzCXN0cglycwktCQktCVlCLUctCXRlcm1pbmFsIHJlc2V0IHN0cmluZworbWFnaWNfY29va2llX2dsaXRjaF91bAkJT1R1ZwludW0JdWcJLQkJLQlZQkNHRQludW1iZXIgb2YgYmxhbmtzIGxlZnQgYnkgdWwKKyMKKyMgT2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMuICBTb21lIGFyZSB1c2VkIGZvciB0ZXJtY2FwIHRyYW5zbGF0aW9uLiAgVGhlCisjIGNvZGUgdXNlcyB0aGUgJ09UJyBwcmVmaXggd2UgcHV0IG9uIG9ic29sZXRlIGNhcGFiaWxpdGllcyB0byBzdXBwcmVzcworIyBwcmludGluZyB0aGVtIGluIHRlcm1pbmZvIHNvdXJjZSBkdW1wcyBvZiBjb21waWxlZCBlbnRyaWVzLgorIworYmFja3NwYWNlc193aXRoX2JzCQlPVGJzCWJvb2wJYnMJLQkJLQlZQkNHRQl1c2VzIF5IIHRvIG1vdmUgbGVmdAorY3J0X25vX3Njcm9sbGluZwkJT1Rucwlib29sCW5zCS0JCS0JWUJDRy0JY3J0IGNhbm5vdCBzY3JvbGwKK25vX2NvcnJlY3RseV93b3JraW5nX2NyCQlPVG5jCWJvb2wJbmMJLQkJLQlZQkNHLQlubyB3YXkgdG8gZ28gdG8gc3RhcnQgb2YgbGluZQorY2FycmlhZ2VfcmV0dXJuX2RlbGF5CQlPVGRDCW51bQlkQwktCQktCVlCLUctCXBhZCBuZWVkZWQgZm9yIENSCituZXdfbGluZV9kZWxheQkJCU9UZE4JbnVtCWROCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgTEYKK2xpbmVmZWVkX2lmX25vdF9sZgkJT1RubAlzdHIJbmwJLQkJLQlZQkNHRQl1c2UgdG8gbW92ZSBkb3duCitiYWNrc3BhY2VfaWZfbm90X2JzCQlPVGJjCXN0cgliYwktCQktCVlCQ0dFCW1vdmUgbGVmdCwgaWYgbm90IF5ICisjCisjIEdOVSB0ZXJtY2FwIGxpYnJhcnkgZXh0ZW5zaW9ucy4gIFRoZSBHTlUgdGVybWNhcCBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgRW1hY3Mgbm8gbG9uZ2VyIHVzZXMgdGhlc2UsIGJ1dCBNVCBzaG93ZWQgdXAgaW4gcHJlLTkuMCB2ZXJzaW9ucyBvZiB0aGUKKyMgQlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuYW1lIGNsYXNoIHdpdGggdGVybWluZm8gTVQgaXMgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvOyBNVCBpcyBjb252ZXJ0ZWQgdG8ga20uCisjCitnbnVfaGFzX21ldGFfa2V5CQlPVE1UCWJvb2wJTVQJLQkJLQktLS0tRQloYXMgbWV0YSBrZXkKKyMgZ251X3RhYl93aWR0aAkJCU9UdHcJbnVtCXR3CS0JCS0JLS0tLUUJdGFiIHdpZHRoIGluIHNwYWNlcworIworIyBHTlUgdGVybWNhcCAqZG9lcyogaW5jbHVkZSB0aGUgZm9sbG93aW5nIGV4dGVuZGVkIGNhcGFiaWxpdHksICBPbmx5IHRoZQorIyBub3ctb2Jzb2xldGUgQW5uIEFyYm9yIHRlcm1pbmFscyB1c2VkIGl0LgorIworIyBnbnVfY2hhbmdlX3Njcm9sbF9yZWdpb24JT1RjUwlzdHIJY1MJLQkJLQktLS1HRQlhbHRlcm5hdGUgc2V0IHNjcm9sbGluZyByZWdpb24gCisjCisjIFRoZSBmb2xsb3dpbmcgY29tbWVudHMgZGVzY3JpYmUgY2FwbmFtZXMgc28gYW5jaWVudCB0aGF0IEkgYmVsaWV2ZSBubworIyBzb2Z0d2FyZSB1c2VzIHRoZW0gYW55IGxvbmdlci4gIFNvbWUgb2YgdGhlc2UgaGF2ZSB0byBnbyBiZWNhdXNlIHRoZXkKKyMgY2xhc2ggd2l0aCB0ZXJtaW5mbyBuYW1lcyBpbiB3YXlzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHR5cGUKKyMgaW5mb3JtYXRpb24uCisjCisjIFRoZXNlIG15dGluZm8gY29kZXMgYXJlIG5vdCB1c2VkIGluIHRoZSA0LjRCU0QgY3Vyc2VzIGNvZGUuICBUaGV5IGFyZQorIyBtYXJrZWQgb2Jzb2xldGUgaW4gdGhlIDQuNEJTRCBtYW51YWwgcGFnZXMuCisjCisjIFRoZXJlIGlzIG9uZSBjb25mbGljdCB3aXRoIHRlcm1pbmZvOyBtYSBpcyBpbiBib3RoLiAgVGhpcyBjb25mbGljdCBpcworIyByZXNvbHZlZCBieSB0eXBlIGluZm9ybWF0aW9uLgorIworIyBUaGUgYGtvJyBjYXBhYmlsaXR5IGlzIHRyYW5zbGF0ZWQgYnkgc3BlY2lhbCBjb2RlLiAgSXQgc2hvdWxkIGNvbnRhaW4gYQorIyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGtleXMuCisjIFRoZSBga24nIGNvZGUgaXMgYWNjZXB0ZWQgYnV0IGlnbm9yZWQuCisjCisjIFRoZSBgbWEnIGNhcGFiaWxpdHkgc2VlbXMgdG8gaGF2ZSBiZWVuIGRlc2lnbmVkIHRvIG1hcCBiZXR3ZWVuIHRoZSByb2d1ZSgyKQorIyBtb3Rpb24ga2V5cyAoaW5jbHVkaW5nIGpraGwpIGFuZCBjaGFyYWN0ZXJzIGVtaXR0ZWQgYnkgYXJyb3cga2V5cyBvbiBzb21lCisjIHByaW1pdGl2ZSBwcmUtQU5TSSB0ZXJtaW5hbHMuICBJdCdzIHNvIG9ic29sZXRlIGl0J3MgZm9zc2lsaXplZC4uLgorIworIyBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2YgbWVtb3J5X2xvY2tfYWJvdmUgYW5kIG1lbW9yeV91bmxvY2s6CisjICJZb3UgY2FuICdmcmVlemUnIGRhdGEgb24gdGhlIHNjcmVlbiBieSB0dXJuaW5nIG9uIE1lbW9yeSBMb2NrIGluIGEgbGluZSBvZgorIyB0ZXh0LiAgQWxsIGxpbmVzIGFib3ZlIHRoZSBjdXJzb3IncyBjdXJyZW50IGxpbmUgYmVjb21lIGxvY2tlZCBpbiBwbGFjZSBvbgorIyB0aGUgc2NyZWVuLiAgVGhlbiBlbnRlciBkYXRhIG5vcm1hbGx5LiAgV2hlbiB0aGUgc2NyZWVuIGZpbGxzIHVwLCBhbnkKKyMgZnVydGhlciBkYXRhIGVudGVyZWQgZm9yY2VzIHRoZSBmaXJzdCBsaW5lIG9mIHVuZnJvemVuIGxpbmUgdGV4dCB0byBzY3JvbGwKKyMgdW5kZXIgdGhlIGZyb3plbiBkYXRhLiAgTGluZXMgc2Nyb2xsZWQgb2ZmIHRoZSBzY3JlZW4gYXJlIGluc2VydGVkIGludG8KKyMgbWVtb3J5IGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgZmlyc3QgZnJvemVuIGxpbmUuIiAoZnJvbSB0aGUgSFAgNzAwLzk2CisjIFVzZXIncyBtYW51YWwpLiAgVlQxMDAvQU5TSSBtZW1vcnkgbG9jayBzZXQgaXMgXEVbPjJoLCByZXNldCBpcyBcRVs+MmwuCisjCisjIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0ZXJtaW5mbyBhcmUgc3VwcG9zZWQgdG8gYmVoYXZlIGFzIHRob3VnaCB4ciBpcworIyBhbHdheXMgdHJ1ZS4KKyMKK2xpbmVmZWVkX2lzX25ld2xpbmUJCU9UTkwJYm9vbAlOTAktCQktCVlCLS0tCW1vdmUgZG93biB3aXRoIFxuCisjIGV2ZW5fcGFyaXR5CQkJT1RFUAlib29sCUVQCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgZXZlbiBwYXJpdHkKKyMgb2RkX3Bhcml0eQkJCU9UT1AJYm9vbAlPUAktCQktCS1CLS0tCXRlcm1pbmFsIHJlcXVpcmVzIG9kZCBwYXJpdHkKKyMgaGFsZl9kdXBsZXgJCQlPVEhECWJvb2wJSEQJLQkJLQktQi0tLQl0ZXJtaW5hbCBpcyBoYWxmLWR1cGxleAorIyBsb3dlcl9jYXNlX29ubHkJCU9UTEMJYm9vbAlMQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IGxvd2VyIGNhc2UKKyMgdXBwZXJfY2FzZV9vbmx5CQlPVFVDCWJvb2wJVUMJLQkJLQktQi0tLQl0ZXJtaW5hbCBoYXMgb25seSB1cHBlciBjYXNlCitiYWNrc3BhY2VfZGVsYXkJCQlPVGRCCW51bQlkQgktCQktCVlCLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5ICisjIGZvcm1fZmVlZF9kZWxheQkJT1RkRgludW0JZEYJLQkJLQktQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeTAoraG9yaXpvbnRhbF90YWJfZGVsYXkJCU9UZFQJbnVtCWRUCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkkKKyMgdmVydGljYWxfdGFiX2RlbGF5CQlPVGRWCW51bQlkVgktCQktCS1CLS0tCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5WCitudW1iZXJfb2ZfZnVuY3Rpb25fa2V5cwkJT1RrbgludW0Ja24JLQkJLQktQi1HLQljb3VudCBvZiBmdW5jdGlvbiBrZXlzCitvdGhlcl9ub25fZnVuY3Rpb25fa2V5cwkJT1RrbwlzdHIJa28JLQkJLQktQi1HLQlsaXN0IG9mIHNlbGYtbWFwcGVkIGtleWNhcHMKK2Fycm93X2tleV9tYXAJCQlPVG1hCXN0cgltYQktCQktCVlCQy0tCW1hcCBhcnJvdyBrZXlzIHJvZ3VlKDEpIG1vdGlvbiBrZXlzCisjIG1lbW9yeV9sb2NrX2Fib3ZlCQlPVG1sCXN0cgltbAktCQktCS1CLS0tCWxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKKyMgbWVtb3J5X3VubG9jawkJCU9UbXUJc3RyCW11CS0JCS0JLUItLS0JdW5sb2NrIHZpc2libGUgc2NyZWVuIG1lbW9yeSBhYm92ZSB0aGUgY3VycmVudCBsaW5lCitoYXNfaGFyZHdhcmVfdGFicwkJT1RwdAlib29sCXB0CS0JCS0JWUItLS0JaGFzIDgtY2hhciB0YWJzIGludm9rZWQgd2l0aCBeSQorcmV0dXJuX2RvZXNfY2xyX2VvbAkJT1R4cglib29sCXhyCS0JCS0JWUItLS0JcmV0dXJuIGNsZWFycyB0aGUgbGluZQorIyB0ZWtfNDAyNV9pbnNlcnRfbGluZQkJT1R4eAlib29sCXh4CS0JCS0JLUJDLS0JVGVrdHJvbml4IDQwMjUgaW5zZXJ0LWxpbmUgZ2xpdGNoCisjCisjIG15dGluZm8gZGVzY3JpYmVkIHRoaXMgYXMgYSB0ZXJtY2FwIGNhcGFiaWxpdHksIGJ1dCBpdCdzIG5vdCBsaXN0ZWQgaW4gdGhlCisjIDQuNEJTRCBtYW4gcGFnZXMsIGFuZCBub3QgZm91bmQgaW4gdGhlIDQuNEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgbmN1cnNlcworIyBwYWNrYWdlLCBsaWtlIFN5c3RlbSBWLCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbHdheXMgdHJ1ZS4KKyMKKyMgcmluZF9vbmx5X2F0X3RvcAkJT1R4cQlib29sCXhxCS0JCS0JLS0tLS0JcmV2ZXJzZSBpbmRleCBvbmx5IHdvcmtzIGZyb20gdG9wIGxpbmUKKyMKKyMgVW5pdmVyc2l0eSBvZiBXYXRlcmxvbyB0ZXJtY2FwIGV4dGVuc2lvbnMgKGFzIGRlc2NyaWJlZCBpbiBteXRpbmZvKS4KKyMgVGhlIGB4bCcgdGVybWNhcCBmaWxlIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdAorIyBiZSByZXNvbHZlZCBieSBhIHR5cGUgY2hlY2suICBUaGUgZGVzY3JpcHRpb25zIGFyZSBndWVzc2VzIGZyb20gd2hhdCB3YXMKKyMgaW4gdGhlIG15dGluZm8gdGFibGVzLiAKKyMKKyMga2V5X2ludGVycnVwdF9jaGFyCQlPVGtpCXN0cglraQktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgaW50ZXJydXB0IGtleSAoPykKKyMga2V5X2tpbGxfY2hhcgkJCU9Ua2sJc3RyCWtrCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBraWxsIGtleSAoPykKKyMga2V5X3N1c3BlbmRfY2hhcgkJT1RreglzdHIJa3oJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IHN1c3BlbmQga2V5ICg/KQorIyBpbml0aWFsaXphdGlvbl9tZXNzeQkJT1R4Ywlib29sCXhjCS0JCS0JLS0tLS0JaW5pdGlhbGl6YXRpb24gbGVhdmVzIGdhcmJhZ2Ugb24gdGhlIHNjcmVlbiAoPykKKyMgaW5kX2F0X2JvdHRvbV9kb2VzX2NyCQlPVHhsCWJvb2wJeGwJLQkJLQktLS0tLQlpbmRleCBkb2VzIGEgY2FycmlhZ2UgcmV0dXJuCisjCisjIE5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyB1bmlxdWUgdG8gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlLgorIyBTUiBjbGFzaGVzIHdpdGggYSB0ZXJtaW5mbyBuYW1lOyB0aGlzIGFtYmlndWl0eSBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgYSB0eXBlCisjIGNoZWNrLgorIworIyBzY3JvbGxfbGVmdAkJCU9Uc2wxCXN0cglTbAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQKKyMgc2Nyb2xsX3JpZ2h0CQkJT1RzcjEJc3RyCVNyCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQKKyMgcGFybV9zY3JvbGxfbGVmdAkJT1RzbAlzdHIJU0wJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIGxlZnR3YXJkICMxIGNoYXJhY3RlcnMKKyMgcGFybV9zY3JvbGxfcmlnaHQJCU9Uc3IJc3RyCVNSCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQgIzEgY2hhcmFjdGVycworIworIyBUaGUgbXl0aW5mbyBjYXBhYmlsaXRpZXMgZW5kIGhlcmUuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFhlbml4IGRlZmluZWQgaXRzIG93biBzZXQgb2YgZm9ybXMtZHJhd2luZyBjYXBhYmlsaXRpZXM6CisjCisjIGNhcAlJQk0gQVNDSUkJZGVzY3JpcHRpb24gICAgICAgICAgICAgQUNTICAgICAgICAgCUFTQ0lJCisjIC0tLQktLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tCS0tLS0tLQorIyBHMQkxOTEgXDI3NyBNLT8Jc2luZ2xlIHVwcGVyIHJpZ2h0ICAgCUFDU19VUkNPUk5FUgorIyBHMgkyMTggXDMzMiBNLVoJc2luZ2xlIHVwcGVyIGxlZnQJQUNTX1VMQ09STkVSCisjIEczCTE5MiBcMzAwIE0tQAlzaW5nbGUgbG93ZXIgbGVmdAlBQ1NfTExDT1JORVIKKyMgRzQJMjE3IFwzMzEgTS1ZCXNpbmdsZSBsb3dlciByaWdodAlBQ1NfTFJDT1JORVIKKyMgRzUJMTg3IFwyNzMgTS07CWRvdWJsZSB1cHBlciByaWdodAorIyBHNgkyMDEgXDMxMSBNLUkJZG91YmxlIHVwcGVyIGxlZnQKKyMgRzcJMjAwIFwzMTAgTS1ICWRvdWJsZSBsb3dlciBsZWZ0CisjIEc4CTE4OCBcMjc0IE0tPAlkb3VibGUgbG93ZXIgcmlnaHQKKyMgR0MJMTk3IFwzMDUgTS1FCXNpbmdsZSBpbnRlcnNlY3Rpb24JQUNTX1BMVVMJXyBfCisjIEdECTE5NCBcMzAyIE0tQglzaW5nbGUgZG93bi10aWNrCUFDU19UVEVFCSB8CisjIEdICTE5NiBcMzA0IE0tRAlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCUFDU19ITElORQorIyBHTAkxODAgXDI2NCBNLTQJc2luZ2xlIGxlZnQgdGljawlBQ1NfUlRFRQktfAorIyBHUgkxOTUgXDMwMyBNLUMJc2luZ2xlIHJpZ2h0IHRpY2sJQUNTX0xURUUJfC0KKyMgR1UJMTkzIFwzMDEgTS1BCXNpbmdsZSB1cCB0aWNrCQlBQ1NfQlRFRQlffF8KKyMgR1YJMTc5IFwyNjMgTS0zCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCUFDU19WTElORQorIyBHYwkyMDYgXDMxNiBNLU4JZG91YmxlIGludGVyc2VjdGlvbgorIyBHZAkyMDMgXDMxMyBNLUsJZG91YmxlIGRvd24gdGljaworIyBHaAkyMDUgXDMxNSBNLU0JZG91YmxlIGhvcml6b250YWwgbGluZQorIyBHbAkyMDQgXDIwNCBNLUwJZG91YmxlIGxlZnQgdGljaworIyBHcgkxODUgXDI3MSBNLTkJZG91YmxlIHJpZ2h0IHRpY2sKKyMgR3UJMjAyIFwzMTIgTS1KCWRvdWJsZSB1cCB0aWNrCisjIEd2CTE4NiBcMjcyIE0tOglkb3VibGUgdmVydGljYWwgbGluZQorIworIyBUaGUgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUgdGhlIHNpbmdsZS1saW5lIGNhcHMgYW5kIGRpc2NhcmQgdGhlIG90aGVycworIyAodmlhIElHTk9SRSBhbGlhc2VzIGZ1cnRoZXIgZG93bikuICBXZSBkb24ndCB3YW50IHRvIGRvIG5vcm1hbCBwYWQgCisjIHRyYW5zbGF0aW9uIG9uIHRoZXNlLCB0aGV5J3JlIG9mdGVuIHNpbmdsZS1jaGFyYWN0ZXIgcHJpbnRhYmxlIEFTQ0lJCisjIHN0cmluZ3MgdGhhdCBoYXBwZW4gdG8gYmUgbnVtZXJpY3MuICBUaGVyZSdzIGF3ayBjb2RlIGluIHBhcmFtZXRyaXplZC5zaAorIyB0aGF0IGRldGVjdHMgdGhlIGFjc18gcHJlZml4IGFuZCB1c2VzIGl0IHRvIHN1cHByZXNzIHBhZCB0cmFuc2xhdGlvbi4KKyMgVGhlc2UgdGVybWluZm8gbmFtZXMgYXJlIGludmVudGVkLgorIworYWNzX3VsY29ybmVyCQkJT1RHMglzdHIJRzIJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgbGVmdAorYWNzX2xsY29ybmVyCQkJT1RHMwlzdHIJRzMJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgbGVmdAorYWNzX3VyY29ybmVyCQkJT1RHMQlzdHIJRzEJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgcmlnaHQKK2Fjc19scmNvcm5lcgkJCU9URzQJc3RyCUc0CS0JCS0JLS0tLS0Jc2luZ2xlIGxvd2VyIHJpZ2h0CithY3NfbHRlZQkJCU9UR1IJc3RyCUdSCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIHJpZ2h0CithY3NfcnRlZQkJCU9UR0wJc3RyCUdMCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIGxlZnQKK2Fjc19idGVlCQkJT1RHVQlzdHIJR1UJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgdXAKK2Fjc190dGVlCQkJT1RHRAlzdHIJR0QJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgZG93bgorYWNzX2hsaW5lCQkJT1RHSAlzdHIJR0gJLQkJLQktLS0tLQlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCithY3NfdmxpbmUJCQlPVEdWCXN0cglHVgktCQktCS0tLS0tCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCithY3NfcGx1cwkJCU9UR0MJc3RyCUdDCS0JCS0JLS0tLS0Jc2luZ2xlIGludGVyc2VjdGlvbgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVEVSTUlORk8gRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGlzIHNlY3Rpb24gaXMgYWxtb3N0IGFsbCBjb21tZW50cy4gIFdoYXQgaXQncyBtYWlubHkgZm9yIGlzIHRvIGRlc2NyaWJlCisjIHdoYXQgY2FwYWJpbGl0aWVzIG5lZWQgdG8gYmUgc3F1ZWV6ZWQgb3V0IHRvIGdldCBkb3duIHRvIHRoZSBYU0kgQ3Vyc2VzCisjIHN0YW5kYXJkIHNldC4gIFRoZXkgYXJlIGZsYWdnZWQgd2l0aCBLLgorIworIyBIUCBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBIUAorIyB0ZXJtaW5mbyBmaWxlcy4gIEV4Y2VwdCBmb3IgbWVtb3J5X2xvY2sgYW5kIG1lbW9yeV91bmxvY2ssIHRoZXkgYXJlCisjIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gU1ZyNCBleHRlbnNpb25zLCBidXQgdGhleSBtYWtlIHRoZSBiaW5hcnkgZm9ybWF0CisjIGRpZmZlcmVudC4gIEdycnIuLi4uCisjCittZW1vcnlfbG9jawkJCW1lbWwJc3RyCW1sCS0JCS0JLS0tLUsJbG9jayBtZW1vcnkgYWJvdmUgY3Vyc29yCittZW1vcnlfdW5sb2NrCQkJbWVtdQlzdHIJbXUJLQkJLQktLS0tSwl1bmxvY2sgbWVtb3J5CisjcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKKyNsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworI2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKKyNrZXlfZjExCQkJa2YxMQlzdHIJRjEJLQkJLQktLS0tLQlGMTEgZnVuY3Rpb24ga2V5Cisja2V5X2YxMgkJCWtmMTIJc3RyCUYyCS0JCS0JLS0tLS0JRjEyIGZ1bmN0aW9uIGtleQorI2tleV9mMTMJCQlrZjEzCXN0cglGMwktCQktCS0tLS0tCUYxMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE0CQkJa2YxNAlzdHIJRjQJLQkJLQktLS0tLQlGMTQgZnVuY3Rpb24ga2V5Cisja2V5X2YxNQkJCWtmMTUJc3RyCUY1CS0JCS0JLS0tLS0JRjE1IGZ1bmN0aW9uIGtleQorI2tleV9mMTYJCQlrZjE2CXN0cglGNgktCQktCS0tLS0tCUYxNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjE3CQkJa2YxNwlzdHIJRjcJLQkJLQktLS0tLQlGMTcgZnVuY3Rpb24ga2V5Cisja2V5X2YxOAkJCWtmMTgJc3RyCUY4CS0JCS0JLS0tLS0JRjE4IGZ1bmN0aW9uIGtleQorI2tleV9mMTkJCQlrZjE5CXN0cglGOQktCQktCS0tLS0tCUYxOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIwCQkJa2YyMAlzdHIJRkEJLQkJLQktLS0tLQlGMjAgZnVuY3Rpb24ga2V5Cisja2V5X2YyMQkJCWtmMjEJc3RyCUZCCS0JCS0JLS0tLS0JRjIxIGZ1bmN0aW9uIGtleQorI2tleV9mMjIJCQlrZjIyCXN0cglGQwktCQktCS0tLS0tCUYyMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjIzCQkJa2YyMwlzdHIJRkQJLQkJLQktLS0tLQlGMjMgZnVuY3Rpb24ga2V5Cisja2V5X2YyNAkJCWtmMjQJc3RyCUZFCS0JCS0JLS0tLS0JRjI0IGZ1bmN0aW9uIGtleQorI2tleV9mMjUJCQlrZjI1CXN0cglGRgktCQktCS0tLS0tCUYyNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjI2CQkJa2YyNglzdHIJRkcJLQkJLQktLS0tLQlGMjYgZnVuY3Rpb24ga2V5Cisja2V5X2YyNwkJCWtmMjcJc3RyCUZICS0JCS0JLS0tLS0JRjI3IGZ1bmN0aW9uIGtleQorI2tleV9mMjgJCQlrZjI4CXN0cglGSQktCQktCS0tLS0tCUYyOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI5CQkJa2YyOQlzdHIJRkoJLQkJLQktLS0tLQlGMjkgZnVuY3Rpb24ga2V5Cisja2V5X2YzMAkJCWtmMzAJc3RyCUZLCS0JCS0JLS0tLS0JRjMwIGZ1bmN0aW9uIGtleQorI2tleV9mMzEJCQlrZjMxCXN0cglGTAktCQktCS0tLS0tCUYzMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMyCQkJa2YzMglzdHIJRk0JLQkJLQktLS0tLQlGMzIgZnVuY3Rpb24ga2V5Cisja2V5X2YzMwkJCWtmMzMJc3RyCUZOCS0JCS0JLS0tLS0JRjMzIGZ1bmN0aW9uIGtleQorI2tleV9mMzQJCQlrZjM0CXN0cglGTwktCQktCS0tLS0tCUYzNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM1CQkJa2YzNQlzdHIJRlAJLQkJLQktLS0tLQlGMzUgZnVuY3Rpb24ga2V5Cisja2V5X2YzNgkJCWtmMzYJc3RyCUZRCS0JCS0JLS0tLS0JRjM2IGZ1bmN0aW9uIGtleQorI2tleV9mMzcJCQlrZjM3CXN0cglGUgktCQktCS0tLS0tCUYzNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM4CQkJa2YzOAlzdHIJRlMJLQkJLQktLS0tLQlGMzggZnVuY3Rpb24ga2V5Cisja2V5X2YzOQkJCWtmMzkJc3RyCUZUCS0JCS0JLS0tLS0JRjM5IGZ1bmN0aW9uIGtleQorI2tleV9mNDAJCQlrZjQwCXN0cglGVQktCQktCS0tLS0tCUY0MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQxCQkJa2Y0MQlzdHIJRlYJLQkJLQktLS0tLQlGNDEgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MgkJCWtmNDIJc3RyCUZXCS0JCS0JLS0tLS0JRjQyIGZ1bmN0aW9uIGtleQorI2tleV9mNDMJCQlrZjQzCXN0cglGWAktCQktCS0tLS0tCUY0MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ0CQkJa2Y0NAlzdHIJRlkJLQkJLQktLS0tLQlGNDQgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NQkJCWtmNDUJc3RyCUZaCS0JCS0JLS0tLS0JRjQ1IGZ1bmN0aW9uIGtleQorI2tleV9mNDYJCQlrZjQ2CXN0cglGYQktCQktCS0tLS0tCUY0NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ3CQkJa2Y0NwlzdHIJRmIJLQkJLQktLS0tLQlGNDcgZnVuY3Rpb24ga2V5Cisja2V5X2Y0OAkJCWtmNDgJc3RyCUZjCS0JCS0JLS0tLS0JRjQ4IGZ1bmN0aW9uIGtleQorI2tleV9mNDkJCQlrZjQ5CXN0cglGZAktCQktCS0tLS0tCUY0OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUwCQkJa2Y1MAlzdHIJRmUJLQkJLQktLS0tLQlGNTAgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MQkJCWtmNTEJc3RyCUZmCS0JCS0JLS0tLS0JRjUxIGZ1bmN0aW9uIGtleQorI2tleV9mNTIJCQlrZjUyCXN0cglGZwktCQktCS0tLS0tCUY1MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjUzCQkJa2Y1MwlzdHIJRmgJLQkJLQktLS0tLQlGNTMgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NAkJCWtmNTQJc3RyCUZpCS0JCS0JLS0tLS0JRjU0IGZ1bmN0aW9uIGtleQorI2tleV9mNTUJCQlrZjU1CXN0cglGagktCQktCS0tLS0tCUY1NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjU2CQkJa2Y1NglzdHIJRmsJLQkJLQktLS0tLQlGNTYgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NwkJCWtmNTcJc3RyCUZsCS0JCS0JLS0tLS0JRjU3IGZ1bmN0aW9uIGtleQorI2tleV9mNTgJCQlrZjU4CXN0cglGbQktCQktCS0tLS0tCUY1OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU5CQkJa2Y1OQlzdHIJRm4JLQkJLQktLS0tLQlGNTkgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MAkJCWtmNjAJc3RyCUZvCS0JCS0JLS0tLS0JRjYwIGZ1bmN0aW9uIGtleQorI2tleV9mNjEJCQlrZjYxCXN0cglGcAktCQktCS0tLS0tCUY2MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYyCQkJa2Y2MglzdHIJRnEJLQkJLQktLS0tLQlGNjIgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MwkJCWtmNjMJc3RyCUZyCS0JCS0JLS0tLS0JRjYzIGZ1bmN0aW9uIGtleQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQUxJQVMgREVDTEFSQVRJT05TCisjCisjIEhlcmUgd2Ugc2V0IHVwIGFsaWFzZXMgZm9yIHRyYW5zbGF0aW5nIGV4dGVuc2lvbnMgaW50byBzdGFuZGFyZCB0ZXJtaW5mby4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1jYXAgYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEJTRCBhbGlhc2VzOgorIworIyBUaGlzIGlzIGEgY29tbW9uIGVycm9yIGluIG1hbnkgdGVybWNhcCBmaWxlcy4gIFdlJ2xsIGdldCBub3RpZmllZCBkdXJpbmcKKyMgdHJhbnNsYXRpb24gd2hlbiB0aGlzIChvciBhbnkgb3RoZXIgYWxpYXMpIGZpcmVzLgorIworY2FwYWxpYXMJc2IJc3IJQlNECXNjcm9sbCB0ZXh0IGRvd24KKyMKKyMgQVQmVCBleHRlbnNpb25zOgorIworIyBUaGUgb2xkIEFUJlQgNTQxMCwgNTQyMCwgNTQyNSwgcGM2MzAwcGx1cywgNjEwLCBhbmQgczQgZW50cmllcyB1c2VkIGEgc2V0IG9mCisjIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcy4gIEl0cyBzaWduYXR1cmUgaXMgdGhlIEtNIGNhcGFiaWxpdHksIHVzZWQgdG8gbmFtZQorIyBzb21lIHNvcnQgb2Yga2V5bWFwIGZpbGUuICBFRSwgQk8sIENJLCBDViwgWFMsIERTLCBGTCBhbmQgRkUgYXJlIGluIHRoaXMKKyMgc2V0LiAgQ29tbWVudHMgaW4gdGhlIG9yaWdpbmFsLCBhbmQgYSBsaXR0bGUgY3Jvc3MtY2hlY2tpbmcgd2l0aCBvdGhlciBBVCZUCisjIGRvY3VtZW50YXRpb24sIHNlZW0gdG8gZXN0YWJsaXNoIHRoZSBmb2xsb3dpbmcgbWFwcGluZ3M6CisjCitjYXBhbGlhcwlCTwltcglBVCZUCWVudGVyX3JldmVyc2VfbW9kZQorY2FwYWxpYXMJQ0kJdmkJQVQmVAljdXJzb3JfaW52aXNpYmxlCitjYXBhbGlhcwlDVgl2ZQlBVCZUCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCURTCW1oCUFUJlQJZW50ZXJfZGltX21vZGUKKyNjYXBhbGlhcwlFRQltZQlBVCZUCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlGRQlMRglBVCZUCWxhYmVsX29uCitjYXBhbGlhcwlGTAlMTwlBVCZUCWxhYmVsX29mZgorY2FwYWxpYXMJWFMJbWsJQVQmVAllbnRlcl9zZWN1cmVfbW9kZQorIworIyBXZSBjb21tZW50IG91dCBFRSBiZWNhdXNlIHRoZSBjb25mbGljdGluZyBYRU5JWCBFRSBpcyBtb3JlIGNvbW1vbiBpbiAKKyMgb2xkIGVudHJpZXMuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFRoZXNlIGFyZSB0aGUgb25lcyB3ZSBrbm93IGhvdyB0byB0cmFuc2xhdGUgZGlyZWN0bHk6CisjCitjYXBhbGlhcwlFRQltaAlYRU5JWAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJR0UJYWUJWEVOSVgJZXhpdF9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlHUwlhcwlYRU5JWAllbnRlcl9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlDRgl2aQlYRU5JWAljdXJzb3JfaW52aXMKK2NhcGFsaWFzCUNPCXZlCVhFTklYCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCUVOCUA3CVhFTklYCWtleV9lbmQKK2NhcGFsaWFzCUhNCWtoCVhFTklYCWtleV9ob21lCitjYXBhbGlhcwlMRAlrTAlYRU5JWAlrZXlfZGwKK2NhcGFsaWFzCVBECWtOCVhFTklYCWtleV9ucGFnZQorY2FwYWxpYXMJUE4JcG8JWEVOSVgJcHJ0cl9vZmYKK2NhcGFsaWFzCVBTCXBmCVhFTklYCXBydHJfb24KK2NhcGFsaWFzCVBVCWtQCVhFTklYCWtleV9wcGFnZQorY2FwYWxpYXMJUlQJQDgJWEVOSVgJa2VudAorY2FwYWxpYXMJVVAJa3UJWEVOSVgJa2N1dTEKK2NhcGFsaWFzCUc2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VMQ09STkVSCitjYXBhbGlhcwlHNwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MTENPUk5FUgorY2FwYWxpYXMJRzUJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVVJDT1JORVIKK2NhcGFsaWFzCUc4CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xSQ09STkVSCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MVEVFCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19SVEVFCitjYXBhbGlhcwlHdQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19CVEVFCitjYXBhbGlhcwlHZAlJR05PUkUJWEVOSVgJZG91YmxlIEFDU19UVEVFCitjYXBhbGlhcwlHaAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19ITElORQorY2FwYWxpYXMJR3YJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVkxJTkUKK2NhcGFsaWFzCUdjCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1BMVVMKK2NhcGFsaWFzCUdHCUlHTk9SRQlYRU5JWAlhY3MtZ2xpdGNoCisjCisjIElCTSBleHRlbnNpb25zOgorIworY2FwYWxpYXMJa3EJJTEJSUJNCWtleV9oZWxwCisjCisjIElyaXMgZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUhTCW1oCUlSSVMJZW50ZXJfZGltX21vZGUKKyMKKyMgVGVrdHJvbml4IGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlLQQlrOwlUZWsJa2V5X2YxMAorY2FwYWxpYXMJS0IJRjEJVGVrCWtleV9mMTEKK2NhcGFsaWFzCUtDCUYyCVRlawlrZXlfZjEyCitjYXBhbGlhcwlLRAlGMwlUZWsJa2V5X2YxMworY2FwYWxpYXMJS0UJRjQJVGVrCWtleV9mMTQKK2NhcGFsaWFzCUtGCUY1CVRlawlrZXlfZjE1CitjYXBhbGlhcwlCQwlTYglUZWsJc2V0X2JhY2tncm91bmQKK2NhcGFsaWFzCUZDCVNmCVRlawlzZXRfZm9yZWdyb3VuZAorIworIyBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nOgorIworIwlYRU5JWAlYRU5JWCB2YXJpYWJsZSBuYW1lCW5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbz8KKyMJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUNMCWtleV9jaGFyX2xlZnQKKyMJQ1IJa2V5X2NoYXJfcmlnaHQKKyMJQ1cJa2V5X2NoYW5nZV93aW5kb3cKKyMJSFAJPz8KKyMJTEYJa2V5X2xpbmVmZWVkIAkJbGFiZWxfb2ZmCisjCU5VCWtleV9uZXh0X3VubG9ja2VkX2NlbGwKKyMJUEwJPz8KKyMJUFIJPz8KKyMJUkMJa2V5X3JlY2FsYwkJcmVtb3ZlX2Nsb2NrCisjCVJGCWtleV90b2dnbGVfcmVmCQlyZXFfZm9yX2lucHV0CisjCVdMCWtleV93b3JkX2xlZnQKKyMJV1IJa2V5X3dvcmRfcmlnaHQKKyMKKyMgSWYgeW91IGtub3cgd2hhdCBhbnkgb2YgdGhlIHF1ZXN0aW9uLW1hcmtlZCBvbmVzIG1lYW4sIHBsZWFzZSB0ZWxsIHVzLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtaW5mbyBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2luZm9hbGlhcwlmb250MAlzMGRzCUlCTQlzZXQwX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MQlzMWRzCUlCTQlzZXQxX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MglzMmRzCUlCTQlzZXQyX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MwlzM2RzCUlCTQlzZXQzX2Rlc19zZXEKK2luZm9hbGlhcwlrYnRhYglrY2J0CUlCTQlrZXlfYmFja3RhYgoraW5mb2FsaWFzCWtzZWwJa3NsdAlJQk0Ja2V5X3NlbGVjdAorIworIyBTb21lIG90aGVycyBhcmUgaWRlbnRpY2FsIHRvIFNWcjQvWFBHNCBjYXBhYmlsaXRpZXMsIGluIHBhcnRpY3VsYXI6CisjIGtjbWQsIGtlbmQsIGtobHAsIGFuZCBrZjExLi4ua2Y2My4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyB0cnVuY2F0ZS1saW5lczp0CisjIEVuZDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvQ2Fwcy5ocHV4MTEgYi9pbmNsdWRlL0NhcHMuaHB1eDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL0NhcHMuaHB1eDExCkBAIC0wLDAgKzEsMTI3OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBEaWNrZXkKKyMKKyMgJElkOiBDYXBzLmhwdXgxMSx2IDEuNCAyMDA2LzA1LzI3IDE1OjMzOjA0IHRvbSBFeHAgJAorIworIyBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgbmN1cnNlcycgdGVybWNhcC90ZXJtaW5mbyBjYXBhYmlsaXR5IHRhYmxlLCB3aGljaAorIyBpcyBkZXNpZ25lZCB0byBhbGlnbiB3aXRoIEhQVVggMTEueCdzIHRlcm1pbmZvLgorIworIyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgaW5pdGlhbGl6ZXJzIGZvciB0YWJsZXMgdGhhdCBkcml2ZSB0aWMsCisjIGluZm9jbXAsIGFuZCB0aGUgbGlicmFyeSBjb21waWxhdGlvbiBjb2RlIHVzZWQgdG8gc3VwcG9ydCB0aGUgdGVybWNhcCAKKyMgY29tcGF0aWJpbGl0eSBoYWNrLiAgSXQgaXMgYWxzbyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0YWJ1bGFyIHBvcnRpb24gb2YgdGhlCisjIHRlcm1pbmZvKDUpIG1hbiBwYWdlOyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgIyUnIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBiZWNvbWUKKyMgdGhlIHRlcm1pbmZvIHRhYmxlLgorIworIyBUaGlzIGZpbGUgaGFzIHRocmVlIG1ham9yIHNlY3Rpb25zOyBhIHN0YW5kYXJkLWNhcGFiaWxpdGllcyB0YWJsZSwgdHdvCisjIGV4dGVuc2lvbi1jYXBhYmlsaXR5IHRhYmxlcywgYW5kIGEgc2VjdGlvbiBvZiBhbGlhc2VzIGRlY2xhcmF0aW9ucy4KKyMgVGhlIGZpcnN0IHR3byBoYXZlIHRoZSBzYW1lIGZvcm1hdCwgYXMgZm9sbG93czoKKyMKKyMgRklMRSBGT1JNQVQKKyMKKyMgQ29sdW1uIDE6IHRlcm1pbmZvIHZhcmlhYmxlIG5hbWUKKyMgQ29sdW1uIDI6IHRlcm1pbmZvIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gMzogY2FwYWJpbGl0eSB0eXBlIChib29sZWFuLCBudW1lcmljLCBvciBzdHJpbmcpCisjIENvbHVtbiA0OiB0ZXJtY2FwIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gNTogS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDY6IHZhbHVlIGZvciBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNzogTGVhZCB3aXRoIGBZJyBpZiBjYXBhYmlsaXR5IHNob3VsZCBiZSBlbWl0dGVkIGluIHRlcm1jYXAKKyMgICAgICAgICAgIHRyYW5zbGF0aW9ucywgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gODogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbgorIworIyBUaGUgY29kZXMgZm9sbG93aW5nIFtZLV0gaW4gY29sdW1uIDcgZGVzY3JpYmUgdGhlIHZlcnNpb25zIG9mIHRlcm1jYXAgd2hpY2gKKyMgdXNlIHRoZSBnaXZlbiBjYXBhYmlsaXR5LiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgY3Vyc2VzIGxpYnJhcnkKKyMgcHJvcGVyOyByYXRoZXIsIGl0J3MgdGhlcmUgdG8gaGVscCB0aGUgdGVybWluZm8gbWFpbnRhaW5lciBhdm9pZCBlbWl0dGluZworIyB0ZXJtY2FwIGVudHJ5IHRyYW5zbGF0aW9ucyB0aGF0IGFyZSBtb3JlIHRoYW4gMTAyMyBieXRlcyBsb25nIChhbmQgdGFuayBhCisjIGxvdCBvZiBvbGQgdGVybWNhcC11c2luZyBwcm9ncmFtcykuICBUaGUgY29kZXMgcmVhZCBhcyBmb2xsb3dzOgorIwlCID0gbWVudGlvbmVkIGluIHRoZSBCU0QgbWFuIHBhZ2UgZm9yIDQuNEJTRCBjdXJzZXMKKyMJQyA9IHVzZWQgYnkgdGhlIDQuNEJTRCBjdXJzZXMgbGlicmFyeQorIwlHID0gbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBHTlUgdGVybWNhcAorIwlFID0gdXNlZCBieSBHTlUgRW1hY3MKKyMJSyA9IHJlbW92ZSB0aGlzIHRlcm1pbmZvIGNhcGFiaWxpdHkgd2hlbiB0cmFuc2xhdGluZyB0byBzdGFuZGFyZCBmb3JtYXQKKyMgVGhlIGltcG9ydGFudCBjb2RlcyBhcmUgQyBhbmQgRS4gIEEgY2FwIHdpdGggQyBvciBFIHNob3VsZCBiZSBwcmVzZXJ2ZWQgaW4KKyMgdHJhbnNsYXRpb24gaWYgcG9zc2libGUuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHByZXNlcnZpbmcgYWxsIHN1Y2ggY2FwcyBtYXkKKyMgbGVhZCB0byBzb21lIHRlcm1jYXAgdHJhbnNsYXRpb25zIGJlaW5nIHRvbyBsb25nLiAgVGhlIHRlcm1jYXAgbWFpbnRhaW5lcgorIyBoYXMgYSBiaXQgb2YgYSBqdWdnbGluZyBhY3QgdG8gZG8uLi5wb3RlbnRpYWwgcHJvYmxlbSBjYXNlcyBhcmUgbWFya2VkIHdpdGgKKyMgYW4gYXN0ZXJpc2sgKCopLgorIworIyBUaGUgYWxpYXNlcyBzZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyMKKyMgQ29sdW1uIDE6IGVpdGhlciBgY2FwYWxpYXMnIG9yIGBpbmZvYWxpYXMnCisjIENvbHVtbiAyOiBuYW1lIHRvIGJlIGFsaWFzZWQKKyMgQ29sdW1uIDM6IHdoYXQgbmFtZSBpdCBzaG91bGQgdHJhbnNsYXRlIHRvLiAgVGhlIG5hbWUgSUdOT1JFIG1lYW5zIGl0CisjICAgICAgICAgICBzaG91bGQgYmUgZGlzY2FyZGVkIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCisjIENvbHVtbiA0OiBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2V0ICh1c2VkIGZvciBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzKQorIyBDb2x1bW4gNTogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbiAodXN1YWxseSBhbiBhc3NvY2lhdGVkIHRlcm1pbmZvIHZhcmlhYmxlKQorIworIyBIQU5ETElORyBURVJNQ0FQIEFORCBURVJNSU5GTyBFWFRFTlNJT05TCisjCisjIFRoZXJlIGFyZSBiYXNpY2FsbHkgZml2ZSBkaWZmZXJlbnQgd2F5cyB0byBoYW5kbGUgdGVybWNhcCBhbmQgdGVybWluZm8KKyMgZXh0ZW5zaW9uczoKKyMKKyMgMS4gRG9uJ3QgbGlzdCB0aGUgY2FwbmFtZSBoZXJlLCBvciBsaXN0IGl0IGJ1dCBjb21tZW50IGl0IG91dCAodGhlIGxhdHRlcgorIyBpcyBwcmVmZXJhYmxlOyBzb21lb25lIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGl0IGluIHRoZSBmdXR1cmUpLiAgSWYgeW91IGRvCisjIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmtub3duIGFuZCByYWlzZSBhIHdhcm5pbmcgZnJvbQorIyB0aGUgY29tcGlsZXIuCisjCisjIDIuIEFsaWFzIGl0LiAgVGhpcyBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgY2FwYWJpbGl0eSBoYXMgdGhlIHNhbWUgbWVhbmluZworIyBhcyBhbiBhbHJlYWR5LXN1cHBvcnRlZCBvbmUuICBUaGUgY29tcGlsZXIgd2lsbCBoYW5kbGUgYWxpYXNpbmcsIGVtaXR0aW5nCisjIGFuIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB3aGVuZXZlciBhbiBhbGlhcyBmaXJlcy4KKyMKKyMgMy4gTGlzdCBpdCBpbiB0aGUgc3RhbmRhcmQgdGFibGUuICBZb3UgYWxtb3N0IGNlcnRhaW5seSBkbyAqbm90KiB3YW50CisjIHRvIGRvIHRoaXMgLS0gdGhlIGNhcGFiaWxpdGllcyBpbiB0aGF0IG9uZSwgYW5kIHRoZWlyIG9yZGVyLCBoYXZlIGJlZW4KKyMgY2FyZWZ1bGx5IGNob3NlbiB0byBiZSBTVnI0LWJpbmFyeS1jb21wYXRpYmxlIHdoZW4gdGhleSdyZSB3cml0dGVuIG91dAorIyBhcyBhIHRlcm1pbmZvIG9iamVjdCwgYW5kIGJyZWFraW5nIHRoaXMgd291bGQgYmUgYmFkLiAgSXQncyB1cCB0aGUgbmN1cnNlcworIyBsaWJyYXJ5IHdoYXQgdG8gZG8gd2l0aCB0aGUgdGVybWluZm8gZGF0YSBhZnRlciBpdCdzIHJlYWQgaW4uCisjCisjIDQuIExpc3QgaXQgaW4gdGhlIGFsaWFzZXMgdGFibGUgd2l0aCBhbiBJR05PUkUgdGFyZ2V0IGZpZWxkLiAgSWYgeW91CisjIGRvIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZCBvbiBpbnB1dCAodGhvdWdoIHRoZSB1c2VyIHdpbGwKKyMgZ2V0IGEgd2FybmluZyBtZXNzYWdlIGFib3V0IGl0KS4KKyMKKyMgNS4gTGlzdCBpdCBpbiB0aGUgZXh0ZW5zaW9ucyB0YWJsZS4gSWYgeW91IGRvIHRoaXMsIHRoZSBjb21waWxlciB3aWxsCisjIHNpbGVudGx5IGFjY2VwdCB0aGUgY2FwYWJpbGl0eSwgYnV0IHRoZSBjdXJzZXMgbGlicmFyeSBwcm9wZXIgd2lsbCBuZXZlcgorIyBzZWUgaXQgKGJlY2F1c2UgaXQgd29uJ3QgYmUgd3JpdHRlbiBvdXQgYXMgcGFydCBvZiB0aGUgdGVybWluZm8gb2JqZWN0CisjIGZvcm1hdCkuICBJdCdzIHVwIHRvIHlvdSB3aGF0IHlvdSBoYXZlIHRoZSBjb21waWxlciBkbyB3aXRoIGl0LgorIworIyBUaGVyZSBhcmUgdHdvIG9wcG9zaXRlIHJlYXNvbnMgdG8gY2hvb3NlIG9wdGlvbiA1LiAgT25lIGlzIHdoZW4geW91IHdhbnQKKyMgdG8gZWF0IHRoZSBjYXBhYmlsaXR5IHNpbGVudGx5IGFuZCBkaXNjYXJkIGl0IHdoZW4gZG9pbmcgdHJhbnNsYXRpb25zCisjIHRvIHRlcm1pbmZvIHdpdGggdGljIC1JLiAgU29tZSB2ZXJ5IG9sZCBvYnNvbGV0ZSBCU0QgY2FwcyBsaWtlIDprbjogYXJlCisjIGluIHRoaXMgY2xhc3MuICBOb3RoaW5nIHdpbGwgZXZlciB1c2UgdGhlbSBhZ2Fpbi4KKyMKKyMgTW9yZSB1c3VhbGx5LCB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gdHJ5IHRvIGRlZHVjZSBzb21ldGhpbmcgZnJvbSB0aGUKKyMgY2FwYWJpbGl0eSB2YWx1ZSB0aGF0IGl0IGNhbiB1c2UgdG8gdHJhbnNsYXRlIGl0IGludG8geW91ciBvdXRwdXQgZm9ybWF0LgorIyBZb3UnbGwgbmVlZCB0byB3cml0ZSBjdXN0b20gY29kZSwgcHJvYmFibHkgaW4gcG9zdHByb2Nlc3NfdGVybWNhcCgpIG9yCisjIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCksIHRvIGhhbmRsZSB0aGUgdHJhbnNsYXRpb24uCisjCisjIENPTlRST0xMSU5HIEVOVFJZIExFTkdUSCAKKyMKKyMgTm90ZXMgb24gc3BlY2lmaWMgZWxpc2lvbnMgbWFkZSB0byBmaXQgdHJhbnNsYXRpb25zIHdpdGhpbiAxMDIzIGJ5dGVzOgorIworIyBNYWNoaW5lcyB3aXRoIElCTSBQQy1saWtlIGtleWJvYXJkcyB3YW50IHRvIGJlIGFibGUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcKKyMga2V5czoga2V5X25wYWdlLCBrZXlfcHBhZ2UsIGtleV9ob21lLCBrZXlfbGwgKHdoaWNoIGlzIHVzZWQgZm9yIGluIHRlcm1jYXAtCisjIG9ubHkgZW52aXJvbm1lbnRzIGZvciBFbmQgb3IgSG9tZS1Eb3duKSwga2V5X2RjLCBhbmQga2V5X2ljLiAgVGhpcyBpcyBhbHNvCisjIHRoZSBzZXQgb2Yga2V5cyB0aGUgYGpvZScgZWRpdG9yIHdpbGwgYmUgdXBzZXQgaWYgaXQgY2FuJ3Qgc2VlLiAgU28gZG9uJ3QgCisjIHRyaW0gdGhvc2Ugb3V0IG9mIHRoZSBzZXQgdG8gYmUgdHJhbnNsYXRlZCB0byB0ZXJtY2FwLCBvciB2YXJpb3VzIHVzZXJzIG9mCisjIHRoZSB0ZXJtY2FwIGZpbGUgd2lsbCBiZWNvbWUgaXJhdGUuCisjCisjIEl0IG1pZ2h0IGxvb2sgdGVtcHRpbmcgdG8gbGVhdmUgdGhvc2UgbG9uZyBpbml0IHN0cmluZ3Mgb3V0IG9mIHRyYW5zbGF0aW9ucy4KKyMgV2UgY2FuJ3QgZG8gaXQgKHlldCk7IDQuNEJTRCB0cHV0IGFuZCB0c2V0IHVzZSB0aGVtLgorIworIyBXZSByZXRhaW4gdGhlIHNnciBjYXBhYmlsaXR5IGluIHRyYW5zbGF0aW9uIGluIHNwaXRlIG9mIHRoZSBmYWN0IHRoYXQgbmVpdGhlcgorIyA0LjRCU0Qgbm9yIEdOVSBFbWFjcyB1c2VzIGl0LCBiZWNhdXNlIChhKSBzb21lIGVudHJ5IG5hbWluZyBkaXN0aW5jdGlvbnMgYXJlCisjIGhhcmQgdG8gdW5kZXJzdGFuZCB3aXRob3V0IGl0LCBhbmQgKGIpIHRoZSBlbnRyaWVzIGluIHdoaWNoIGl0IGlzIGxvbmcgdGVuZAorIyB0byBiZSBvbGRlciB0eXBlcyB0aGF0IGRvbid0IHVzZSB1cCBhIGxvdCBvZiBzdHJpbmcgc3BhY2Ugb24gZnVuY3Rpb24ga2V5cy4KKyMgVGhlIHRpYygxKSB0cmFuc2xhdGlvbiBjb2RlIHdpbGwgY29tcGxhaW4gYW5kIGVsaWRlIGl0IGlmIGl0IG1ha2VzIGEgY3JpdGljYWwKKyMgZGlmZmVyZW5jZSAodGhlcmUgaXMgc3BlY2lhbCBjb2RlIGluIHRpYyB0byByZWNvZ25pemUgdGhpcyBzaXR1YXRpb24pLgorIworIyBZZXMsIEJTRCB0c2V0KDEpIHVzZXMgaHBhLiAgV2UgZWxpZGUgaHBhL3ZwYSBhbnl3YXkgYmVjYXVzZSB0aGUgbW90aW9uCisjIG9wdGltaXplciBpbiBCU0QgY3Vyc2VzIGRpZG4ndCB1c2UgdGhlbS4gIFRoaXMgb21pc3Npb24gc2VlbXMgdG8gYmUgdGhlCisjIHNpbmdsZSBtb3N0IGVmZmVjdGl2ZSBvbmUsIGl0IHNob3J0ZW5lZCB0aGUgcmVzb2x2ZWQgbGVuZ3RoIG9mIGFsbCB0aGlydGVlbgorIyBwcm9ibGVtIGVudHJpZXMgaW4gdGhlIDkuOS4wIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvIG1hc3RlciBiZWxvdyBjcml0aWNhbC4KKyMKKyMgSXQgd291bGQgYmUgbmljZSB0byBrZWVwIGYxMSBhbmQgZjEyIGZvciBFbWFjcyB1c2UsIGJ1dCBhIGNvdXBsZSBvZiB0ZXJtY2FwCisjIHRyYW5zbGF0aW9ucyBnbyBiYWNrIG92ZXIgY3JpdGljYWwgaWYgd2UgZG8gdGhpcy4gIEFzIDQuNEJTRCBjdXJzZXMgZmFkZXMKKyMgaW50byBoaXN0b3J5IGFuZCBHTlUgdGVybWNhcCdzIGFwcGxpY2F0aW9uIGJhc2Ugc2hyaW5rcyB0b3dhcmRzIGJlaW5nIEdOVSAKKyMgRW1hY3Mgb25seSwgd2UnbGwgcHJvYmFibHkgZWxpZGUgb3V0IHNvbWUgQlNELW9ubHkgY2FwYWJpbGl0aWVzIGluIG9yZGVyCisjIHRvIGJ1eSBzcGFjZSBmb3Igbm9uLWVzc2VudGlhbHMgRW1hY3MgaXMgc3RpbGwgdXNpbmcuICBDYXBhYmlsaXRpZXMgaGlnaAorIyBvbiB0aGF0IGhpdCBsaXN0OiByYywgc2MsIHVjLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU1RBTkRBUkQgQ0FQQUJJTElUSUVTCisjCisjJVRoZSBmb2xsb3dpbmcgaXMgYSBjb21wbGV0ZSB0YWJsZSBvZiB0aGUgY2FwYWJpbGl0aWVzIGluY2x1ZGVkIGluIGEKKyMldGVybWluZm8gZGVzY3JpcHRpb24gYmxvY2sgYW5kIGF2YWlsYWJsZSB0byB0ZXJtaW5mby11c2luZyBjb2RlLiAgSW4gZWFjaAorIyVsaW5lIG9mIHRoZSB0YWJsZSwKKyMlCisjJVRoZSBcZkJ2YXJpYWJsZVxmUiBpcyB0aGUgbmFtZSBieSB3aGljaCB0aGUgcHJvZ3JhbW1lciAoYXQgdGhlIHRlcm1pbmZvIGxldmVsKQorIyVhY2Nlc3NlcyB0aGUgY2FwYWJpbGl0eS4KKyMlCisjJVRoZSBcZkJjYXBuYW1lXGZSIGlzIHRoZSBzaG9ydCBuYW1lIHVzZWQgaW4gdGhlIHRleHQgb2YgdGhlIGRhdGFiYXNlLAorIyVhbmQgaXMgdXNlZCBieSBhIHBlcnNvbiB1cGRhdGluZyB0aGUgZGF0YWJhc2UuCisjJVdoZW5ldmVyIHBvc3NpYmxlLCBjYXBuYW1lcyBhcmUgY2hvc2VuIHRvIGJlIHRoZSBzYW1lIGFzIG9yIHNpbWlsYXIgdG8KKyMldGhlIEFOU0kgWDMuNjQtMTk3OSBzdGFuZGFyZCAobm93IHN1cGVyc2VkZWQgYnkgRUNNQS00OCwgd2hpY2ggdXNlcyAKKyMlaWRlbnRpY2FsIG9yIHZlcnkgc2ltaWxhciBuYW1lcykuICBTZW1hbnRpY3MgYXJlIGFsc28gaW50ZW5kZWQgdG8gbWF0Y2gKKyMldGhvc2Ugb2YgdGhlIHNwZWNpZmljYXRpb24uCisjJQorIyVUaGUgdGVybWNhcCBjb2RlIGlzIHRoZSBvbGQKKyMlLkIgdGVybWNhcAorIyVjYXBhYmlsaXR5IG5hbWUgKHNvbWUgY2FwYWJpbGl0aWVzIGFyZSBuZXcsIGFuZCBoYXZlIG5hbWVzIHdoaWNoIHRlcm1jYXAKKyMlZGlkIG5vdCBvcmlnaW5hdGUpLgorIyUuUAorIyVDYXBhYmlsaXR5IG5hbWVzIGhhdmUgbm8gaGFyZCBsZW5ndGggbGltaXQsIGJ1dCBhbiBpbmZvcm1hbCBsaW1pdCBvZiA1CisjJWNoYXJhY3RlcnMgaGFzIGJlZW4gYWRvcHRlZCB0byBrZWVwIHRoZW0gc2hvcnQgYW5kIHRvIGFsbG93IHRoZSB0YWJzIGluCisjJXRoZSBzb3VyY2UgZmlsZQorIyUuQiBDYXBzCisjJXRvIGxpbmUgdXAgbmljZWx5LgorIyUKKyMlRmluYWxseSwgdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGF0dGVtcHRzIHRvIGNvbnZleSB0aGUgc2VtYW50aWNzIG9mIHRoZQorIyVjYXBhYmlsaXR5LiAgWW91IG1heSBmaW5kIHNvbWUgY29kZXMgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkOgorIyUuVFAKKyMlKFApCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IGJlIHNwZWNpZmllZAorIyUuVFAKKyMlI1sxLTldCisjJWluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyaW5nIGlzIHBhc3NlZCB0aHJvdWdoIHRwYXJtIHdpdGgKKyMlcGFybXMgYXMgZ2l2ZW4gKCNcZklpXGZQKS4KKyMlLlRQCisjJShQKikKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgdmFyeSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBudW1iZXIgb2YKKyMlbGluZXMgYWZmZWN0ZWQKKyMlLlRQCisjJSgjXGRcZklpXGZQXHUpCisjJWluZGljYXRlcyB0aGUgXGZJaVxmUFx1dGhcZCBwYXJhbWV0ZXIuCisjJQorIyUuUFAKKyMlIFRoZXNlIGFyZSB0aGUgYm9vbGVhbiBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCQm9vbGVhbnMJbmFtZQlDb2RlXGZSCithdXRvX2xlZnRfbWFyZ2luCQlidwlib29sCWJ3CS0JLQlZQi1HLQljdWIxIHdyYXBzIGZyb20gY29sdW1uIDAgdG8gbGFzdCBjb2x1bW4KK2F1dG9fcmlnaHRfbWFyZ2luCQlhbQlib29sCWFtCS0JLQlZQkNHRQl0ZXJtaW5hbCBoYXMgYXV0b21hdGljIG1hcmdpbnMKK25vX2VzY19jdGxjCQkJeHNiCWJvb2wJeGIJLQktCVlCQ0ctCWJlZWhpdmUgKGYxPWVzY2FwZSwgZjI9Y3RybCBDKQorY2VvbF9zdGFuZG91dF9nbGl0Y2gJCXhocAlib29sCXhzCS0JLQlZQkNHRQlzdGFuZG91dCBub3QgZXJhc2VkIGJ5IG92ZXJ3cml0aW5nIChocCkKK2VhdF9uZXdsaW5lX2dsaXRjaAkJeGVubAlib29sCXhuCS0JLQlZQkNHRQluZXdsaW5lIGlnbm9yZWQgYWZ0ZXIgODAgY29scyAoY29uY2VwdCkKK2VyYXNlX292ZXJzdHJpa2UJCWVvCWJvb2wJZW8JLQktCVlCQ0ctCWNhbiBlcmFzZSBvdmVyc3RyaWtlcyB3aXRoIGEgYmxhbmsKK2dlbmVyaWNfdHlwZQkJCWduCWJvb2wJZ24JLQktCVlCLUctCWdlbmVyaWMgbGluZSB0eXBlCitoYXJkX2NvcHkJCQloYwlib29sCWhjCS0JLQlZQkNHLQloYXJkY29weSB0ZXJtaW5hbAoraGFzX21ldGFfa2V5CQkJa20JYm9vbAlrbQktCS0JWUItR0UJSGFzIGEgbWV0YSBrZXkgKGkuZS4sIHNldHMgOHRoLWJpdCkKK2hhc19zdGF0dXNfbGluZQkJCWhzCWJvb2wJaHMJLQktCVlCLUctCWhhcyBleHRyYSBzdGF0dXMgbGluZQoraW5zZXJ0X251bGxfZ2xpdGNoCQlpbglib29sCWluCS0JLQlZQkNHRQlpbnNlcnQgbW9kZSBkaXN0aW5ndWlzaGVzIG51bGxzCittZW1vcnlfYWJvdmUJCQlkYQlib29sCWRhCS0JLQlZQkNHLQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBhYm92ZSB0aGUgc2NyZWVuCittZW1vcnlfYmVsb3cJCQlkYglib29sCWRiCS0JLQlZQi1HRQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBiZWxvdyB0aGUgc2NyZWVuCittb3ZlX2luc2VydF9tb2RlCQltaXIJYm9vbAltaQktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIGluc2VydCBtb2RlCittb3ZlX3N0YW5kb3V0X21vZGUJCW1zZ3IJYm9vbAltcwktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIHN0YW5kb3V0IG1vZGUKK292ZXJfc3RyaWtlCQkJb3MJYm9vbAlvcwktCS0JWUJDRy0JdGVybWluYWwgY2FuIG92ZXJzdHJpa2UKK3N0YXR1c19saW5lX2VzY19vawkJZXNsb2sJYm9vbAllcwktCS0JWUItRy0JZXNjYXBlIGNhbiBiZSB1c2VkIG9uIHRoZSBzdGF0dXMgbGluZQorZGVzdF90YWJzX21hZ2ljX3Ntc28JCXh0CWJvb2wJeHQJLQktCVlCQ0dFCXRhYnMgZGVzdHJ1Y3RpdmUsIG1hZ2ljIHNvIGNoYXIgKHQxMDYxKQordGlsZGVfZ2xpdGNoCQkJaHoJYm9vbAloegktCS0JWUItR0UJY2Fubm90IHByaW50IH4ncyAoaGF6ZWx0aW5lKQordHJhbnNwYXJlbnRfdW5kZXJsaW5lCQl1bAlib29sCXVsCS0JLQlZQkNHRQl1bmRlcmxpbmUgY2hhcmFjdGVyIG92ZXJzdHJpa2VzCit4b25feG9mZgkJCXhvbglib29sCXhvCS0JLQlZQi0tLQl0ZXJtaW5hbCB1c2VzIHhvbi94b2ZmIGhhbmRzaGFraW5nCisjIGVuZCBib29sZWFucyBmb3IgSFBVWCA5LCAxMCAobm9uLWNvbG9yIGN1cnNlcykKK25lZWRzX3hvbl94b2ZmCQkJbnhvbglib29sCW54CS0JLQktLS0tLQlwYWRkaW5nIHdpbGwgbm90IHdvcmssIHhvbi94b2ZmIHJlcXVpcmVkCitwcnRyX3NpbGVudAkJCW1jNWkJYm9vbAk1aQktCS0JLS0tLS0JcHJpbnRlciB3aWxsIG5vdCBlY2hvIG9uIHNjcmVlbgoraGFyZF9jdXJzb3IJCQljaHRzCWJvb2wJSEMJLQktCS0tLS0tCWN1cnNvciBpcyBoYXJkIHRvIHNlZQorbm9uX3Jldl9ybWN1cAkJCW5ycm1jCWJvb2wJTlIJLQktCS0tLS0tCXNtY3VwIGRvZXMgbm90IHJldmVyc2Ugcm1jdXAKK25vX3BhZF9jaGFyCQkJbnBjCWJvb2wJTlAJLQktCS0tLS0tCXBhZCBjaGFyYWN0ZXIgZG9lcyBub3QgZXhpc3QKK25vbl9kZXN0X3Njcm9sbF9yZWdpb24JCW5kc2NyCWJvb2wJTkQJLQktCS0tLS0tCXNjcm9sbGluZyByZWdpb24gaXMgbm9uLWRlc3RydWN0aXZlCitjYW5fY2hhbmdlCQkJY2NjCWJvb2wJY2MJLQktCS0tLS0tCXRlcm1pbmFsIGNhbiByZS1kZWZpbmUgZXhpc3RpbmcgY29sb3JzCitiYWNrX2NvbG9yX2VyYXNlCQliY2UJYm9vbAl1dAktCS0JLS0tLS0Jc2NyZWVuIGVyYXNlZCB3aXRoIGJhY2tncm91bmQgY29sb3IKK2h1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbglobHMJYm9vbAlobAktCS0JLS0tLS0JdGVybWluYWwgdXNlcyBvbmx5IEhMUyBjb2xvciBub3RhdGlvbiAoVGVrdHJvbml4KQorY29sX2FkZHJfZ2xpdGNoCQkJeGhwYQlib29sCVlBCS0JLQktLS0tLQlvbmx5IHBvc2l0aXZlIG1vdGlvbiBmb3IgaHBhL21ocGEgY2FwcworY3JfY2FuY2Vsc19taWNyb19tb2RlCQljcnhtCWJvb2wJWUIJLQktCS0tLS0tCXVzaW5nIGNyIHR1cm5zIG9mZiBtaWNybyBtb2RlCitoYXNfcHJpbnRfd2hlZWwJCQlkYWlzeQlib29sCVlDCS0JLQktLS0tLQlwcmludGVyIG5lZWRzIG9wZXJhdG9yIHRvIGNoYW5nZSBjaGFyYWN0ZXIgc2V0Cityb3dfYWRkcl9nbGl0Y2gJCQl4dnBhCWJvb2wJWUQJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciB2cGEvbXZwYSBjYXBzCitzZW1pX2F1dG9fcmlnaHRfbWFyZ2luCQlzYW0JYm9vbAlZRQktCS0JLS0tLS0JcHJpbnRpbmcgaW4gbGFzdCBjb2x1bW4gY2F1c2VzIGNyCitjcGlfY2hhbmdlc19yZXMJCQljcGl4CWJvb2wJWUYJLQktCS0tLS0tCWNoYW5naW5nIGNoYXJhY3RlciBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KK2xwaV9jaGFuZ2VzX3JlcwkJCWxwaXgJYm9vbAlZRwktCS0JLS0tLS0JY2hhbmdpbmcgbGluZSBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBudW1lcmljIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorY29sdW1ucwkJCQljb2xzCW51bQljbwktCS0JWUJDR0UJbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBsaW5lCitpbml0X3RhYnMJCQlpdAludW0JaXQJLQktCVlCLUctCXRhYnMgaW5pdGlhbGx5IGV2ZXJ5ICMgc3BhY2VzCitsaW5lcwkJCQlsaW5lcwludW0JbGkJLQktCVlCQ0dFCW51bWJlciBvZiBsaW5lcyBvbiBzY3JlZW4gb3IgcGFnZQorbGluZXNfb2ZfbWVtb3J5CQkJbG0JbnVtCWxtCS0JLQlZQi1HLQlsaW5lcyBvZiBtZW1vcnkgaWYgPiBsaW5lLiAwIG1lYW5zIHZhcmllcworbWFnaWNfY29va2llX2dsaXRjaAkJeG1jCW51bQlzZwktCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rIGNoYXJhY3RlcnMgbGVmdCBieSBzbXNvIG9yIHJtc28KK3BhZGRpbmdfYmF1ZF9yYXRlCQlwYgludW0JcGIJLQktCVlCLUdFCWxvd2VzdCBiYXVkIHJhdGUgd2hlcmUgcGFkZGluZyBuZWVkZWQKK3ZpcnR1YWxfdGVybWluYWwJCXZ0CW51bQl2dAktCS0JWUItLS0JdmlydHVhbCB0ZXJtaW5hbCBudW1iZXIgKENCL3VuaXgpCit3aWR0aF9zdGF0dXNfbGluZQkJd3NsCW51bQl3cwktCS0JWUItRy0JbnVtYmVyIG9mIGNvbHVtbnMgaW4gc3RhdHVzIGxpbmUKKyMgZW5kIG51bWJlcnMgZm9yIEhQVVggOSwgMTAgKG5vbi1jb2xvciBjdXJzZXMpCitudW1fbGFiZWxzCQkJbmxhYgludW0JTmwJLQktCS0tLS0tCW51bWJlciBvZiBsYWJlbHMgb24gc2NyZWVuCitsYWJlbF9oZWlnaHQJCQlsaAludW0JbGgJLQktCS0tLS0tCXJvd3MgaW4gZWFjaCBsYWJlbAorbGFiZWxfd2lkdGgJCQlsdwludW0JbHcJLQktCS0tLS0tCWNvbHVtbnMgaW4gZWFjaCBsYWJlbAorbWF4X2F0dHJpYnV0ZXMJCQltYQludW0JbWEJLQktCVlCQy0tCW1heGltdW0gY29tYmluZWQgYXR0cmlidXRlcyB0ZXJtaW5hbCBjYW4gaGFuZGxlCittYXhpbXVtX3dpbmRvd3MJCQl3bnVtCW51bQlNVwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgZGVmaW5lYWJsZSB3aW5kb3dzCisjIFRoZXNlIGNhbWUgaW4gd2l0aCBTVnI0J3MgY29sb3Igc3VwcG9ydAorbWF4X2NvbG9ycwkJCWNvbG9ycwludW0JQ28JLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9ycyBvbiBzY3JlZW4KK21heF9wYWlycwkJCXBhaXJzCW51bQlwYQktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgY29sb3ItcGFpcnMgb24gdGhlIHNjcmVlbgorbm9fY29sb3JfdmlkZW8JCQluY3YJbnVtCU5DCS0JLQktLS0tLQl2aWRlbyBhdHRyaWJ1dGVzIHRoYXQgY2Fubm90IGJlIHVzZWQgd2l0aCBjb2xvcnMKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlIGZvbGxvd2luZyBudW1lcmljIGNhcGFiaWxpdGllcyBhcmUgcHJlc2VudCBpbiB0aGUgU1ZyNC4wIHRlcm0gc3RydWN0dXJlLAorIyVidXQgYXJlIG5vdCB5ZXQgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UuICBUaGV5IGNhbWUgaW4gd2l0aCBTVnI0J3MKKyMlcHJpbnRlciBzdXBwb3J0LgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitidWZmZXJfY2FwYWNpdHkJCQlidWZzegludW0JWWEJLQktCS0tLS0tCW51bWJlcnMgb2YgYnl0ZXMgYnVmZmVyZWQgYmVmb3JlIHByaW50aW5nCitkb3RfdmVydF9zcGFjaW5nCQlzcGludgludW0JWWIJLQktCS0tLS0tCXNwYWNpbmcgb2YgcGlucyB2ZXJ0aWNhbGx5IGluIHBpbnMgcGVyIGluY2gKK2RvdF9ob3J6X3NwYWNpbmcJCXNwaW5oCW51bQlZYwktCS0JLS0tLS0Jc3BhY2luZyBvZiBkb3RzIGhvcml6b250YWxseSBpbiBkb3RzIHBlciBpbmNoCittYXhfbWljcm9fYWRkcmVzcwkJbWFkZHIJbnVtCVlkCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIG1pY3JvXy4uLl9hZGRyZXNzCittYXhfbWljcm9fanVtcAkJCW1qdW1wCW51bQlZZQktCS0JLS0tLS0JbWF4aW11bSB2YWx1ZSBpbiBwYXJtXy4uLl9taWNybworbWljcm9fY29sX3NpemUJCQltY3MJbnVtCVlmCS0JLQktLS0tLQljaGFyYWN0ZXIgc3RlcCBzaXplIHdoZW4gaW4gbWljcm8gbW9kZQorbWljcm9fbGluZV9zaXplCQkJbWxzCW51bQlZZwktCS0JLS0tLS0JbGluZSBzdGVwIHNpemUgd2hlbiBpbiBtaWNybyBtb2RlCitudW1iZXJfb2ZfcGlucwkJCW5waW5zCW51bQlZaAktCS0JLS0tLS0JbnVtYmVycyBvZiBwaW5zIGluIHByaW50LWhlYWQKK291dHB1dF9yZXNfY2hhcgkJCW9yYwludW0JWWkJLQktCS0tLS0tCWhvcml6b250YWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgbGluZQorb3V0cHV0X3Jlc19saW5lCQkJb3JsCW51bQlZagktCS0JLS0tLS0JdmVydGljYWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgbGluZQorb3V0cHV0X3Jlc19ob3J6X2luY2gJCW9yaGkJbnVtCVlrCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK291dHB1dF9yZXNfdmVydF9pbmNoCQlvcnZpCW51bQlZbAktCS0JLS0tLS0JdmVydGljYWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgaW5jaAorcHJpbnRfcmF0ZQkJCWNwcwludW0JWW0JLQktCS0tLS0tCXByaW50IHJhdGUgaW4gY2hhcmFjdGVycyBwZXIgc2Vjb25kCit3aWRlX2NoYXJfc2l6ZQkJCXdpZGNzCW51bQlZbgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIGRvdWJsZSB3aWRlIG1vZGUKK2J1dHRvbnMJCQkJYnRucwludW0JQlQJLQktCS0tLS0tCW51bWJlciBvZiBidXR0b25zIG9uIG1vdXNlCitiaXRfaW1hZ2VfZW50d2luaW5nCQliaXR3aW4JbnVtCVlvCS0JLQktLS0tLQludW1iZXIgb2YgcGFzc2VzIGZvciBlYWNoIGJpdC1pbWFnZSByb3cKK2JpdF9pbWFnZV90eXBlCQkJYml0eXBlCW51bQlZcAktCS0JLS0tLS0JdHlwZSBvZiBiaXQtaW1hZ2UgZGV2aWNlCisjJS5URQorIyUuYWQKKyMlCisjJVRoZXNlIGFyZSB0aGUgc3RyaW5nIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitiYWNrX3RhYgkJCWNidAlzdHIJYnQJLQkJLQlZQkNHRQliYWNrIHRhYiAoUCkKK2JlbGwJCQkJYmVsCXN0cglibAktCQktCVlCLUdFCWF1ZGlibGUgc2lnbmFsIChiZWxsKSAoUCkKK2NhcnJpYWdlX3JldHVybgkJCWNyCXN0cgljcgktCQktCVlCQ0dFCWNhcnJpYWdlIHJldHVybiAoUCopIChQKikKK2NoYW5nZV9zY3JvbGxfcmVnaW9uCQljc3IJc3RyCWNzCS0JCS0JWUJDR0UJY2hhbmdlIHJlZ2lvbiB0byBsaW5lICMxIHRvIGxpbmUgIzIgKFApCitjbGVhcl9hbGxfdGFicwkJCXRiYwlzdHIJY3QJLQkJLQlZQi1HLQljbGVhciBhbGwgdGFiIHN0b3BzIChQKQorY2xlYXJfc2NyZWVuCQkJY2xlYXIJc3RyCWNsCS0JCS0JWUJDR0UJY2xlYXIgc2NyZWVuIGFuZCBob21lIGN1cnNvciAoUCopCitjbHJfZW9sCQkJCWVsCXN0cgljZQktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBsaW5lIChQKQorY2xyX2VvcwkJCQllZAlzdHIJY2QJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2Ygc2NyZWVuIChQKikKK2NvbHVtbl9hZGRyZXNzCQkJaHBhCXN0cgljaAktCQktCS1CLUdFKglob3Jpem9udGFsIHBvc2l0aW9uICMxLCBhYnNvbHV0ZSAoUCkKK2NvbW1hbmRfY2hhcmFjdGVyCQljbWRjaAlzdHIJQ0MJLQkJLQlZQi1HLQl0ZXJtaW5hbCBzZXR0YWJsZSBjbWQgY2hhcmFjdGVyIGluIHByb3RvdHlwZSAhPworY3Vyc29yX2FkZHJlc3MJCQljdXAJc3RyCWNtCS0JCS0JWUJDR0UJbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX2Rvd24JCQljdWQxCXN0cglkbwktCQktCVlCQ0dFCWRvd24gb25lIGxpbmUKK2N1cnNvcl9ob21lCQkJaG9tZQlzdHIJaG8JLQkJLQlZQkNHRQlob21lIGN1cnNvciAoaWYgbm8gY3VwKQorY3Vyc29yX2ludmlzaWJsZQkJY2l2aXMJc3RyCXZpCS0JCS0JWUItRy0JbWFrZSBjdXJzb3IgaW52aXNpYmxlCitjdXJzb3JfbGVmdAkJCWN1YjEJc3RyCWxlCS0JCS0JWUJDR0UJbW92ZSBsZWZ0IG9uZSBzcGFjZQorY3Vyc29yX21lbV9hZGRyZXNzCQltcmN1cAlzdHIJQ00JLQkJLQlZQi1HLQltZW1vcnkgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsIG1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9ub3JtYWwJCQljbm9ybQlzdHIJdmUJLQkJLQlZQkNHRQltYWtlIGN1cnNvciBhcHBlYXIgbm9ybWFsICh1bmRvIGNpdmlzL2N2dmlzKQorY3Vyc29yX3JpZ2h0CQkJY3VmMQlzdHIJbmQJLQkJLQlZQkNHRQlub24tZGVzdHJ1Y3RpdmUgc3BhY2UgKG1vdmUgcmlnaHQgb25lIHNwYWNlKQorY3Vyc29yX3RvX2xsCQkJbGwJc3RyCWxsCS0JCS0JWUJDR0UJbGFzdCBsaW5lLCBmaXJzdCBjb2x1bW4gKGlmIG5vIGN1cCkKK2N1cnNvcl91cAkJCWN1dTEJc3RyCXVwCS0JCS0JWUJDR0UJdXAgb25lIGxpbmUKK2N1cnNvcl92aXNpYmxlCQkJY3Z2aXMJc3RyCXZzCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgdmVyeSB2aXNpYmxlCitkZWxldGVfY2hhcmFjdGVyCQlkY2gxCXN0cglkYwktCQktCVlCQ0dFCWRlbGV0ZSBjaGFyYWN0ZXIgKFAqKQorZGVsZXRlX2xpbmUJCQlkbDEJc3RyCWRsCS0JCS0JWUJDR0UJZGVsZXRlIGxpbmUgKFAqKQorZGlzX3N0YXR1c19saW5lCQkJZHNsCXN0cglkcwktCQktCVlCLUctCWRpc2FibGUgc3RhdHVzIGxpbmUKK2Rvd25faGFsZl9saW5lCQkJaGQJc3RyCWhkCS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgZG93bgorZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQkJc21hY3MJc3RyCWFzCS0JCS0JWUItRy0Jc3RhcnQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitlbnRlcl9ibGlua19tb2RlCQlibGluawlzdHIJbWIJLQkJLQlZQi1HLQl0dXJuIG9uIGJsaW5raW5nCitlbnRlcl9ib2xkX21vZGUJCQlib2xkCXN0cgltZAktCQktCVlCLUctCXR1cm4gb24gYm9sZCAoZXh0cmEgYnJpZ2h0KSBtb2RlCitlbnRlcl9jYV9tb2RlCQkJc21jdXAJc3RyCXRpCS0JCS0JWUJDR0UJc3RyaW5nIHRvIHN0YXJ0IHByb2dyYW1zIHVzaW5nIGN1cAorZW50ZXJfZGVsZXRlX21vZGUJCXNtZGMJc3RyCWRtCS0JCS0JWUJDR0UJZW50ZXIgZGVsZXRlIG1vZGUKK2VudGVyX2RpbV9tb2RlCQkJZGltCXN0cgltaAktCQktCVlCLUctCXR1cm4gb24gaGFsZi1icmlnaHQgbW9kZQorZW50ZXJfaW5zZXJ0X21vZGUJCXNtaXIJc3RyCWltCS0JCS0JWUJDR0UJZW50ZXIgaW5zZXJ0IG1vZGUKK2VudGVyX3NlY3VyZV9tb2RlCQlpbnZpcwlzdHIJbWsJLQkJLQktQi1HLSoJdHVybiBvbiBibGFuayBtb2RlIChjaGFyYWN0ZXJzIGludmlzaWJsZSkKK2VudGVyX3Byb3RlY3RlZF9tb2RlCQlwcm90CXN0cgltcAktCQktCS1CLUctKgl0dXJuIG9uIHByb3RlY3RlZCBtb2RlCitlbnRlcl9yZXZlcnNlX21vZGUJCXJldglzdHIJbXIJLQkJLQlZQi1HLQl0dXJuIG9uIHJldmVyc2UgdmlkZW8gbW9kZQorZW50ZXJfc3RhbmRvdXRfbW9kZQkJc21zbwlzdHIJc28JLQkJLQlZQkNHRQliZWdpbiBzdGFuZG91dCBtb2RlCitlbnRlcl91bmRlcmxpbmVfbW9kZQkJc211bAlzdHIJdXMJLQkJLQlZQkNHRQliZWdpbiB1bmRlcmxpbmUgbW9kZQorZXJhc2VfY2hhcnMJCQllY2gJc3RyCWVjCS0JCS0JWUItRy0JZXJhc2UgIzEgY2hhcmFjdGVycyAoUCkKK2V4aXRfYWx0X2NoYXJzZXRfbW9kZQkJcm1hY3MJc3RyCWFlCS0JCS0JWUItRy0JZW5kIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZXhpdF9hdHRyaWJ1dGVfbW9kZQkJc2dyMAlzdHIJbWUJLQkJLQlZQi1HRQl0dXJuIG9mZiBhbGwgYXR0cmlidXRlcworZXhpdF9jYV9tb2RlCQkJcm1jdXAJc3RyCXRlCS0JCS0JWUJDR0UJc3RyaW5ncyB0byBlbmQgcHJvZ3JhbXMgdXNpbmcgY3VwCitleGl0X2RlbGV0ZV9tb2RlCQlybWRjCXN0cgllZAktCQktCVlCQ0dFCWVuZCBkZWxldGUgbW9kZQorZXhpdF9pbnNlcnRfbW9kZQkJcm1pcglzdHIJZWkJLQkJLQlZQkNHRQlleGl0IGluc2VydCBtb2RlCitleGl0X3N0YW5kb3V0X21vZGUJCXJtc28Jc3RyCXNlCS0JCS0JWUJDR0UJZXhpdCBzdGFuZG91dCBtb2RlCitleGl0X3VuZGVybGluZV9tb2RlCQlybXVsCXN0cgl1ZQktCQktCVlCQ0dFCWV4aXQgdW5kZXJsaW5lIG1vZGUKK2ZsYXNoX3NjcmVlbgkJCWZsYXNoCXN0cgl2YgktCQktCVlCQ0dFCXZpc2libGUgYmVsbCAobWF5IG5vdCBtb3ZlIGN1cnNvcikKK2Zvcm1fZmVlZAkJCWZmCXN0cglmZgktCQktCVlCLUctCWhhcmRjb3B5IHRlcm1pbmFsIHBhZ2UgZWplY3QgKFAqKQorZnJvbV9zdGF0dXNfbGluZQkJZnNsCXN0cglmcwktCQktCVlCLUctCXJldHVybiBmcm9tIHN0YXR1cyBsaW5lCitpbml0XzFzdHJpbmcJCQlpczEJc3RyCWkxCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzJzdHJpbmcJCQlpczIJc3RyCWlzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzNzdHJpbmcJCQlpczMJc3RyCWkzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0X2ZpbGUJCQlpZglzdHIJaWYJLQkJLQlZQi1HLQluYW1lIG9mIGluaXRpYWxpemF0aW9uIGZpbGUKK2luc2VydF9jaGFyYWN0ZXIJCWljaDEJc3RyCWljCS0JCS0JWUJDR0UJaW5zZXJ0IGNoYXJhY3RlciAoUCkKK2luc2VydF9saW5lCQkJaWwxCXN0cglhbAktCQktCVlCQ0dFCWluc2VydCBsaW5lIChQKikKK2luc2VydF9wYWRkaW5nCQkJaXAJc3RyCWlwCS0JCS0JWUJDR0UJaW5zZXJ0IHBhZGRpbmcgYWZ0ZXIgaW5zZXJ0ZWQgY2hhcmFjdGVyCitrZXlfYmFja3NwYWNlCQkJa2JzCXN0cglrYglLRVlfQkFDS1NQQUNFCTA0MDcJWUItRy0JYmFja3NwYWNlIGtleQora2V5X2NhdGFiCQkJa3RiYwlzdHIJa2EJS0VZX0NBVEFCCTA1MjYJLUItRy0qCWNsZWFyLWFsbC10YWJzIGtleQora2V5X2NsZWFyCQkJa2NscglzdHIJa0MJS0VZX0NMRUFSCTA1MTUJLUItRy0qCWNsZWFyLXNjcmVlbiBvciBlcmFzZSBrZXkKK2tleV9jdGFiCQkJa2N0YWIJc3RyCWt0CUtFWV9DVEFCCTA1MjUJLUItRy0qCWNsZWFyLXRhYiBrZXkKK2tleV9kYwkJCQlrZGNoMQlzdHIJa0QJS0VZX0RDCQkwNTEyCVlCLUctCWRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfZGwJCQkJa2RsMQlzdHIJa0wJS0VZX0RMCQkwNTEwCS1CLUctKglkZWxldGUtbGluZSBrZXkKK2tleV9kb3duCQkJa2N1ZDEJc3RyCWtkCUtFWV9ET1dOCTA0MDIJWUJDR0UJZG93bi1hcnJvdyBrZXkKK2tleV9laWMJCQkJa3JtaXIJc3RyCWtNCUtFWV9FSUMJCTA1MTQJLUItRy0qCXNlbnQgYnkgcm1pciBvciBzbWlyIGluIGluc2VydCBtb2RlCitrZXlfZW9sCQkJCWtlbAlzdHIJa0UJS0VZX0VPTAkJMDUxNwktQi1HLSoJY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfZW9zCQkJCWtlZAlzdHIJa1MJS0VZX0VPUwkJMDUxNgktQi1HLSoJY2xlYXItdG8tZW5kLW9mLXNjcmVlbiBrZXkKK2tleV9mMAkJCQlrZjAJc3RyCWswCUtFWV9GKDApCTA0MTAJWUJDR0UJRjAgZnVuY3Rpb24ga2V5CitrZXlfZjEJCQkJa2YxCXN0cglrMQlLRVlfRigxKQktCVlCQ0dFCUYxIGZ1bmN0aW9uIGtleQora2V5X2YxMAkJCQlrZjEwCXN0cglrOwlLRVlfRigxMCkJLQktLS0tRQlGMTAgZnVuY3Rpb24ga2V5CitrZXlfZjIJCQkJa2YyCXN0cglrMglLRVlfRigyKQktCVlCQ0dFCUYyIGZ1bmN0aW9uIGtleQora2V5X2YzCQkJCWtmMwlzdHIJazMJS0VZX0YoMykJLQlZQkNHRQlGMyBmdW5jdGlvbiBrZXkKK2tleV9mNAkJCQlrZjQJc3RyCWs0CUtFWV9GKDQpCS0JWUJDR0UJRjQgZnVuY3Rpb24ga2V5CitrZXlfZjUJCQkJa2Y1CXN0cglrNQlLRVlfRig1KQktCVlCQ0dFCUY1IGZ1bmN0aW9uIGtleQora2V5X2Y2CQkJCWtmNglzdHIJazYJS0VZX0YoNikJLQlZQkNHRQlGNiBmdW5jdGlvbiBrZXkKK2tleV9mNwkJCQlrZjcJc3RyCWs3CUtFWV9GKDcpCS0JWUJDR0UJRjcgZnVuY3Rpb24ga2V5CitrZXlfZjgJCQkJa2Y4CXN0cglrOAlLRVlfRig4KQktCVlCQ0dFCUY4IGZ1bmN0aW9uIGtleQora2V5X2Y5CQkJCWtmOQlzdHIJazkJS0VZX0YoOSkJLQlZQkNHRQlGOSBmdW5jdGlvbiBrZXkKK2tleV9ob21lCQkJa2hvbWUJc3RyCWtoCUtFWV9IT01FCTA0MDYJWUJDR0UJaG9tZSBrZXkKK2tleV9pYwkJCQlraWNoMQlzdHIJa0kJS0VZX0lDCQkwNTEzCVlCLUdFCWluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfaWwJCQkJa2lsMQlzdHIJa0EJS0VZX0lMCQkwNTExCS1CLUctKglpbnNlcnQtbGluZSBrZXkKK2tleV9sZWZ0CQkJa2N1YjEJc3RyCWtsCUtFWV9MRUZUCTA0MDQJWUJDR0UJbGVmdC1hcnJvdyBrZXkKK2tleV9sbAkJCQlrbGwJc3RyCWtICUtFWV9MTAkJMDUzMwlZQi1HLQlsb3dlci1sZWZ0IGtleSAoaG9tZSBkb3duKQora2V5X25wYWdlCQkJa25wCXN0cglrTglLRVlfTlBBR0UJMDUyMglZQi1HRQluZXh0LXBhZ2Uga2V5CitrZXlfcHBhZ2UJCQlrcHAJc3RyCWtQCUtFWV9QUEFHRQkwNTIzCVlCLUdFCXByZXZpb3VzLXBhZ2Uga2V5CitrZXlfcmlnaHQJCQlrY3VmMQlzdHIJa3IJS0VZX1JJR0hUCTA0MDUJWUJDR0UJcmlnaHQtYXJyb3cga2V5CitrZXlfc2YJCQkJa2luZAlzdHIJa0YJS0VZX1NGCQkwNTIwCS1CLUctKglzY3JvbGwtZm9yd2FyZCBrZXkKK2tleV9zcgkJCQlrcmkJc3RyCWtSCUtFWV9TUgkJMDUyMQktQi1HLSoJc2Nyb2xsLWJhY2t3YXJkIGtleQora2V5X3N0YWIJCQlraHRzCXN0cglrVAlLRVlfU1RBQgkwNTI0CS1CLUctKglzZXQtdGFiIGtleQora2V5X3VwCQkJCWtjdXUxCXN0cglrdQlLRVlfVVAJCTA0MDMJWUJDR0UJdXAtYXJyb3cga2V5CitrZXlwYWRfbG9jYWwJCQlybWt4CXN0cglrZQktCQktCVlCQ0dFCWxlYXZlICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQora2V5cGFkX3htaXQJCQlzbWt4CXN0cglrcwktCQktCVlCQ0dFCWVudGVyICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQorbGFiX2YwCQkJCWxmMAlzdHIJbDAJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYwIGlmIG5vdCBmMAorbGFiX2YxCQkJCWxmMQlzdHIJbDEJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxIGlmIG5vdCBmMQorbGFiX2YxMAkJCQlsZjEwCXN0cglsYQktCQktCS0tLS0tCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMTAgaWYgbm90IGYxMAorbGFiX2YyCQkJCWxmMglzdHIJbDIJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYyIGlmIG5vdCBmMgorbGFiX2YzCQkJCWxmMwlzdHIJbDMJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYzIGlmIG5vdCBmMworbGFiX2Y0CQkJCWxmNAlzdHIJbDQJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY0IGlmIG5vdCBmNAorbGFiX2Y1CQkJCWxmNQlzdHIJbDUJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY1IGlmIG5vdCBmNQorbGFiX2Y2CQkJCWxmNglzdHIJbDYJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY2IGlmIG5vdCBmNgorbGFiX2Y3CQkJCWxmNwlzdHIJbDcJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY3IGlmIG5vdCBmNworbGFiX2Y4CQkJCWxmOAlzdHIJbDgJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY4IGlmIG5vdCBmOAorbGFiX2Y5CQkJCWxmOQlzdHIJbDkJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY5IGlmIG5vdCBmOQorbWV0YV9vZmYJCQlybW0Jc3RyCW1vCS0JCS0JWUItRy0qCXR1cm4gb2ZmIG1ldGEgbW9kZQorbWV0YV9vbgkJCQlzbW0Jc3RyCW1tCS0JCS0JWUItRy0qCXR1cm4gb24gbWV0YSBtb2RlICg4dGgtYml0IG9uKQorbmV3bGluZQkJCQluZWwJc3RyCW53CS0JCS0JWUItRy0qCW5ld2xpbmUgKGJlaGF2ZSBsaWtlIGNyIGZvbGxvd2VkIGJ5IGxmKQorcGFkX2NoYXIJCQlwYWQJc3RyCXBjCS0JCS0JWUJDR0UJcGFkZGluZyBjaGFyIChpbnN0ZWFkIG9mIG51bGwpCitwYXJtX2RjaAkJCWRjaAlzdHIJREMJLQkJLQlZQi1HRQlkZWxldGUgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2RlbGV0ZV9saW5lCQlkbAlzdHIJREwJLQkJLQlZQkNHRQlkZWxldGUgIzEgbGluZXMgKFAqKQorcGFybV9kb3duX2N1cnNvcgkJY3VkCXN0cglETwktCQktCVlCQ0dFCWRvd24gIzEgbGluZXMgKFAqKQorcGFybV9pY2gJCQlpY2gJc3RyCUlDCS0JCS0JWUItR0UJaW5zZXJ0ICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9pbmRleAkJCWluZG4Jc3RyCVNGCS0JCS0JWUJDRy0Jc2Nyb2xsIGZvcndhcmQgIzEgbGluZXMgKFApCitwYXJtX2luc2VydF9saW5lCQlpbAlzdHIJQUwJLQkJLQlZQkNHRQlpbnNlcnQgIzEgbGluZXMgKFAqKQorcGFybV9sZWZ0X2N1cnNvcgkJY3ViCXN0cglMRQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgbGVmdCAoUCkKK3Bhcm1fcmlnaHRfY3Vyc29yCQljdWYJc3RyCVJJCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCAoUCopCitwYXJtX3JpbmRleAkJCXJpbglzdHIJU1IJLQkJLQlZQkNHLQlzY3JvbGwgYmFjayAjMSBsaW5lcyAoUCkKK3Bhcm1fdXBfY3Vyc29yCQkJY3V1CXN0cglVUAktCQktCVlCQ0dFCXVwICMxIGxpbmVzIChQKikKK3BrZXlfa2V5CQkJcGZrZXkJc3RyCXBrCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHlwZSBzdHJpbmcgIzIKK3BrZXlfbG9jYWwJCQlwZmxvYwlzdHIJcGwJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byBleGVjdXRlIHN0cmluZyAjMgorcGtleV94bWl0CQkJcGZ4CXN0cglweAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHRyYW5zbWl0IHN0cmluZyAjMgorcHJpbnRfc2NyZWVuCQkJbWMwCXN0cglwcwktCQktCS1CLUctKglwcmludCBjb250ZW50cyBvZiBzY3JlZW4KK3BydHJfb2ZmCQkJbWM0CXN0cglwZgktCQktCS1CLUctKgl0dXJuIG9mZiBwcmludGVyCitwcnRyX29uCQkJCW1jNQlzdHIJcG8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyCityZXBlYXRfY2hhcgkJCXJlcAlzdHIJcnAJLQkJLQlZQi1HRQlyZXBlYXQgY2hhciAjMSAjMiB0aW1lcyAoUCopCityZXNldF8xc3RyaW5nCQkJcnMxCXN0cglyMQktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfMnN0cmluZwkJCXJzMglzdHIJcjIJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzNzdHJpbmcJCQlyczMJc3RyCXIzCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF9maWxlCQkJcmYJc3RyCXJmCS0JCS0JLUItLS0JbmFtZSBvZiByZXNldCBmaWxlCityZXN0b3JlX2N1cnNvcgkJCXJjCXN0cglyYwktCQktCVlCQ0ctCXJlc3RvcmUgY3Vyc29yIHRvIHBvc2l0aW9uIG9mIGxhc3Qgc2F2ZV9jdXJzb3IKK3Jvd19hZGRyZXNzCQkJdnBhCXN0cgljdgktCQktCS1CLUdFKgl2ZXJ0aWNhbCBwb3NpdGlvbiAjMSBhYnNvbHV0ZSAoUCkKK3NhdmVfY3Vyc29yCQkJc2MJc3RyCXNjCS0JCS0JWUJDRy0Jc2F2ZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAoUCkKK3Njcm9sbF9mb3J3YXJkCQkJaW5kCXN0cglzZgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IHVwIChQKQorc2Nyb2xsX3JldmVyc2UJCQlyaQlzdHIJc3IJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCBkb3duIChQKQorc2V0X2F0dHJpYnV0ZXMJCQlzZ3IJc3RyCXNhCS0JCS0JWUItRy0JZGVmaW5lIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzkgKFBHOSkKK3NldF90YWIJCQkJaHRzCXN0cglzdAktCQktCVlCLUctCXNldCBhIHRhYiBpbiBldmVyeSByb3csIGN1cnJlbnQgY29sdW1ucworc2V0X3dpbmRvdwkJCXdpbmQJc3RyCXdpCS0JCS0JLUItR0UJY3VycmVudCB3aW5kb3cgaXMgbGluZXMgIzEtIzIgY29scyAjMy0jNAordGFiCQkJCWh0CXN0cgl0YQktCQktCVlCQ0dFCXRhYiB0byBuZXh0IDgtc3BhY2UgaGFyZHdhcmUgdGFiIHN0b3AKK3RvX3N0YXR1c19saW5lCQkJdHNsCXN0cgl0cwktCQktCVlCLUctCW1vdmUgdG8gc3RhdHVzIGxpbmUsIGNvbHVtbiAjMQordW5kZXJsaW5lX2NoYXIJCQl1YwlzdHIJdWMJLQkJLQlZQkNHLQl1bmRlcmxpbmUgY2hhciBhbmQgbW92ZSBwYXN0IGl0Cit1cF9oYWxmX2xpbmUJCQlodQlzdHIJaHUJLQkJLQlZQi1HLQloYWxmIGEgbGluZSB1cAoraW5pdF9wcm9nCQkJaXByb2cJc3RyCWlQCS0JCS0JLUItLS0JcGF0aCBuYW1lIG9mIHByb2dyYW0gZm9yIGluaXRpYWxpemF0aW9uCitrZXlfYTEJCQkJa2ExCXN0cglLMQlLRVlfQTEJCTA1MzQJWUItR0UJdXBwZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9hMwkJCQlrYTMJc3RyCUszCUtFWV9BMwkJMDUzNQlZQi1HRQl1cHBlciByaWdodCBvZiBrZXlwYWQKK2tleV9iMgkJCQlrYjIJc3RyCUsyCUtFWV9CMgkJMDUzNglZQi1HRQljZW50ZXIgb2Yga2V5cGFkCitrZXlfYzEJCQkJa2MxCXN0cglLNAlLRVlfQzEJCTA1MzcJWUItR0UJbG93ZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9jMwkJCQlrYzMJc3RyCUs1CUtFWV9DMwkJMDU0MAlZQi1HRQlsb3dlciByaWdodCBvZiBrZXlwYWQKK3BydHJfbm9uCQkJbWM1cAlzdHIJcE8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyIGZvciAjMSBieXRlcworIworIyBTVnIxIGNhcGFiaWxpdGllcyBzdG9wIGhlcmUuCUlCTSdzIHZlcnNpb24gb2YgdGVybWluZm8gaXMgdGhlIHNhbWUgYXMKKyMgU1ZyNCB1cCB0byB0aGlzIHBvaW50LCBidXQgaGFzIGEgZGlmZmVyZW50IHNldCBhZnRlcndhcmRzLgorIworIyBIUFVYIGRlZmluZXMgdGhlc2UgaWYgX19IUF9DVVJTRVNfQ09NUEFUIGlzIGRlZmluZWQ6CittZW1vcnlfbG9jawkJCW1lbWwJc3RyCW1sCS0JCS0JLS0tLUsJbG9jayBtZW1vcnkgYWJvdmUgY3Vyc29yCittZW1vcnlfdW5sb2NrCQkJbWVtdQlzdHIJbXUJLQkJLQktLS0tSwl1bmxvY2sgbWVtb3J5CisjCisjCitwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKK2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKK2tleV9mMTEJCQkJa2YxMQlzdHIJRjEJS0VZX0YoMTEpCS0JLS0tLUUJRjExIGZ1bmN0aW9uIGtleQora2V5X2YxMgkJCQlrZjEyCXN0cglGMglLRVlfRigxMikJLQktLS0tRQlGMTIgZnVuY3Rpb24ga2V5CitrZXlfZjEzCQkJCWtmMTMJc3RyCUYzCUtFWV9GKDEzKQktCS0tLS1FCUYxMyBmdW5jdGlvbiBrZXkKK2tleV9mMTQJCQkJa2YxNAlzdHIJRjQJS0VZX0YoMTQpCS0JLS0tLUUJRjE0IGZ1bmN0aW9uIGtleQora2V5X2YxNQkJCQlrZjE1CXN0cglGNQlLRVlfRigxNSkJLQktLS0tRQlGMTUgZnVuY3Rpb24ga2V5CitrZXlfZjE2CQkJCWtmMTYJc3RyCUY2CUtFWV9GKDE2KQktCS0tLS1FCUYxNiBmdW5jdGlvbiBrZXkKK2tleV9mMTcJCQkJa2YxNwlzdHIJRjcJS0VZX0YoMTcpCS0JLS0tLUUJRjE3IGZ1bmN0aW9uIGtleQora2V5X2YxOAkJCQlrZjE4CXN0cglGOAlLRVlfRigxOCkJLQktLS0tRQlGMTggZnVuY3Rpb24ga2V5CitrZXlfZjE5CQkJCWtmMTkJc3RyCUY5CUtFWV9GKDE5KQktCS0tLS1FCUYxOSBmdW5jdGlvbiBrZXkKK2tleV9mMjAJCQkJa2YyMAlzdHIJRkEJS0VZX0YoMjApCS0JLS0tLUUJRjIwIGZ1bmN0aW9uIGtleQora2V5X2YyMQkJCQlrZjIxCXN0cglGQglLRVlfRigyMSkJLQktLS0tRQlGMjEgZnVuY3Rpb24ga2V5CitrZXlfZjIyCQkJCWtmMjIJc3RyCUZDCUtFWV9GKDIyKQktCS0tLS1FCUYyMiBmdW5jdGlvbiBrZXkKK2tleV9mMjMJCQkJa2YyMwlzdHIJRkQJS0VZX0YoMjMpCS0JLS0tLUUJRjIzIGZ1bmN0aW9uIGtleQora2V5X2YyNAkJCQlrZjI0CXN0cglGRQlLRVlfRigyNCkJLQktLS0tRQlGMjQgZnVuY3Rpb24ga2V5CitrZXlfZjI1CQkJCWtmMjUJc3RyCUZGCUtFWV9GKDI1KQktCS0tLS1FCUYyNSBmdW5jdGlvbiBrZXkKK2tleV9mMjYJCQkJa2YyNglzdHIJRkcJS0VZX0YoMjYpCS0JLS0tLUUJRjI2IGZ1bmN0aW9uIGtleQora2V5X2YyNwkJCQlrZjI3CXN0cglGSAlLRVlfRigyNykJLQktLS0tRQlGMjcgZnVuY3Rpb24ga2V5CitrZXlfZjI4CQkJCWtmMjgJc3RyCUZJCUtFWV9GKDI4KQktCS0tLS1FCUYyOCBmdW5jdGlvbiBrZXkKK2tleV9mMjkJCQkJa2YyOQlzdHIJRkoJS0VZX0YoMjkpCS0JLS0tLUUJRjI5IGZ1bmN0aW9uIGtleQora2V5X2YzMAkJCQlrZjMwCXN0cglGSwlLRVlfRigzMCkJLQktLS0tRQlGMzAgZnVuY3Rpb24ga2V5CitrZXlfZjMxCQkJCWtmMzEJc3RyCUZMCUtFWV9GKDMxKQktCS0tLS1FCUYzMSBmdW5jdGlvbiBrZXkKK2tleV9mMzIJCQkJa2YzMglzdHIJRk0JS0VZX0YoMzIpCS0JLS0tLUUJRjMyIGZ1bmN0aW9uIGtleQora2V5X2YzMwkJCQlrZjMzCXN0cglGTglLRVlfRigzMykJLQktLS0tRQlGMzMgZnVuY3Rpb24ga2V5CitrZXlfZjM0CQkJCWtmMzQJc3RyCUZPCUtFWV9GKDM0KQktCS0tLS1FCUYzNCBmdW5jdGlvbiBrZXkKK2tleV9mMzUJCQkJa2YzNQlzdHIJRlAJS0VZX0YoMzUpCS0JLS0tLUUJRjM1IGZ1bmN0aW9uIGtleQora2V5X2YzNgkJCQlrZjM2CXN0cglGUQlLRVlfRigzNikJLQktLS0tRQlGMzYgZnVuY3Rpb24ga2V5CitrZXlfZjM3CQkJCWtmMzcJc3RyCUZSCUtFWV9GKDM3KQktCS0tLS1FCUYzNyBmdW5jdGlvbiBrZXkKK2tleV9mMzgJCQkJa2YzOAlzdHIJRlMJS0VZX0YoMzgpCS0JLS0tLUUJRjM4IGZ1bmN0aW9uIGtleQora2V5X2YzOQkJCQlrZjM5CXN0cglGVAlLRVlfRigzOSkJLQktLS0tRQlGMzkgZnVuY3Rpb24ga2V5CitrZXlfZjQwCQkJCWtmNDAJc3RyCUZVCUtFWV9GKDQwKQktCS0tLS1FCUY0MCBmdW5jdGlvbiBrZXkKK2tleV9mNDEJCQkJa2Y0MQlzdHIJRlYJS0VZX0YoNDEpCS0JLS0tLUUJRjQxIGZ1bmN0aW9uIGtleQora2V5X2Y0MgkJCQlrZjQyCXN0cglGVwlLRVlfRig0MikJLQktLS0tRQlGNDIgZnVuY3Rpb24ga2V5CitrZXlfZjQzCQkJCWtmNDMJc3RyCUZYCUtFWV9GKDQzKQktCS0tLS1FCUY0MyBmdW5jdGlvbiBrZXkKK2tleV9mNDQJCQkJa2Y0NAlzdHIJRlkJS0VZX0YoNDQpCS0JLS0tLUUJRjQ0IGZ1bmN0aW9uIGtleQora2V5X2Y0NQkJCQlrZjQ1CXN0cglGWglLRVlfRig0NSkJLQktLS0tRQlGNDUgZnVuY3Rpb24ga2V5CitrZXlfZjQ2CQkJCWtmNDYJc3RyCUZhCUtFWV9GKDQ2KQktCS0tLS1FCUY0NiBmdW5jdGlvbiBrZXkKK2tleV9mNDcJCQkJa2Y0NwlzdHIJRmIJS0VZX0YoNDcpCS0JLS0tLUUJRjQ3IGZ1bmN0aW9uIGtleQora2V5X2Y0OAkJCQlrZjQ4CXN0cglGYwlLRVlfRig0OCkJLQktLS0tRQlGNDggZnVuY3Rpb24ga2V5CitrZXlfZjQ5CQkJCWtmNDkJc3RyCUZkCUtFWV9GKDQ5KQktCS0tLS1FCUY0OSBmdW5jdGlvbiBrZXkKK2tleV9mNTAJCQkJa2Y1MAlzdHIJRmUJS0VZX0YoNTApCS0JLS0tLUUJRjUwIGZ1bmN0aW9uIGtleQora2V5X2Y1MQkJCQlrZjUxCXN0cglGZglLRVlfRig1MSkJLQktLS0tRQlGNTEgZnVuY3Rpb24ga2V5CitrZXlfZjUyCQkJCWtmNTIJc3RyCUZnCUtFWV9GKDUyKQktCS0tLS1FCUY1MiBmdW5jdGlvbiBrZXkKK2tleV9mNTMJCQkJa2Y1MwlzdHIJRmgJS0VZX0YoNTMpCS0JLS0tLUUJRjUzIGZ1bmN0aW9uIGtleQora2V5X2Y1NAkJCQlrZjU0CXN0cglGaQlLRVlfRig1NCkJLQktLS0tRQlGNTQgZnVuY3Rpb24ga2V5CitrZXlfZjU1CQkJCWtmNTUJc3RyCUZqCUtFWV9GKDU1KQktCS0tLS1FCUY1NSBmdW5jdGlvbiBrZXkKK2tleV9mNTYJCQkJa2Y1NglzdHIJRmsJS0VZX0YoNTYpCS0JLS0tLUUJRjU2IGZ1bmN0aW9uIGtleQora2V5X2Y1NwkJCQlrZjU3CXN0cglGbAlLRVlfRig1NykJLQktLS0tRQlGNTcgZnVuY3Rpb24ga2V5CitrZXlfZjU4CQkJCWtmNTgJc3RyCUZtCUtFWV9GKDU4KQktCS0tLS1FCUY1OCBmdW5jdGlvbiBrZXkKK2tleV9mNTkJCQkJa2Y1OQlzdHIJRm4JS0VZX0YoNTkpCS0JLS0tLUUJRjU5IGZ1bmN0aW9uIGtleQora2V5X2Y2MAkJCQlrZjYwCXN0cglGbwlLRVlfRig2MCkJLQktLS0tRQlGNjAgZnVuY3Rpb24ga2V5CitrZXlfZjYxCQkJCWtmNjEJc3RyCUZwCUtFWV9GKDYxKQktCS0tLS1FCUY2MSBmdW5jdGlvbiBrZXkKK2tleV9mNjIJCQkJa2Y2MglzdHIJRnEJS0VZX0YoNjIpCS0JLS0tLUUJRjYyIGZ1bmN0aW9uIGtleQora2V5X2Y2MwkJCQlrZjYzCXN0cglGcglLRVlfRig2MykJLQktLS0tRQlGNjMgZnVuY3Rpb24ga2V5CisjIGVuZCBvZiBzdHJpbmdzIGluIEhQVVggOQorY2hhcl9wYWRkaW5nCQkJcm1wCXN0cglyUAktCQktCS0tLS0tCWxpa2UgaXAgYnV0IHdoZW4gaW4gaW5zZXJ0IG1vZGUKK2Fjc19jaGFycwkJCWFjc2MJc3RyCWFjCS0JCS0JLS0tLS0JZ3JhcGhpY3MgY2hhcnNldCBwYWlycywgYmFzZWQgb24gdnQxMDAKK2tleV9idGFiCQkJa2NidAlzdHIJa0IJS0VZX0JUQUIJMDU0MQktLS0tLQliYWNrLXRhYiBrZXkKK2VudGVyX3hvbl9tb2RlCQkJc214b24Jc3RyCVNYCS0JCS0JLS0tLS0JdHVybiBvbiB4b24veG9mZiBoYW5kc2hha2luZworZXhpdF94b25fbW9kZQkJCXJteG9uCXN0cglSWAktCQktCS0tLS0tCXR1cm4gb2ZmIHhvbi94b2ZmIGhhbmRzaGFraW5nCitlbnRlcl9hbV9tb2RlCQkJc21hbQlzdHIJU0EJLQkJLQktLS0tLQl0dXJuIG9uIGF1dG9tYXRpYyBtYXJnaW5zCitleGl0X2FtX21vZGUJCQlybWFtCXN0cglSQQktCQktCS0tLS0tCXR1cm4gb2ZmIGF1dG9tYXRpYyBtYXJnaW5zCit4b25fY2hhcmFjdGVyCQkJeG9uYwlzdHIJWE4JLQkJLQktLS0tLQlYT04gY2hhcmFjdGVyCit4b2ZmX2NoYXJhY3RlcgkJCXhvZmZjCXN0cglYRgktCQktCS0tLS0tCVhPRkYgY2hhcmFjdGVyCitlbmFfYWNzCQkJCWVuYWNzCXN0cgllQQktCQktCS0tLS0tCWVuYWJsZSBhbHRlcm5hdGUgY2hhciBzZXQKK2tleV9iZWcJCQkJa2JlZwlzdHIJQDEJS0VZX0JFRwkJMDU0MgktLS0tLQliZWdpbiBrZXkKK2tleV9jYW5jZWwJCQlrY2FuCXN0cglAMglLRVlfQ0FOQ0VMCTA1NDMJLS0tLS0JY2FuY2VsIGtleQora2V5X2Nsb3NlCQkJa2NsbwlzdHIJQDMJS0VZX0NMT1NFCTA1NDQJLS0tLS0JY2xvc2Uga2V5CitrZXlfY29tbWFuZAkJCWtjbWQJc3RyCUA0CUtFWV9DT01NQU5ECTA1NDUJLS0tLS0JY29tbWFuZCBrZXkKK2tleV9jb3B5CQkJa2NweQlzdHIJQDUJS0VZX0NPUFkJMDU0NgktLS0tLQljb3B5IGtleQora2V5X2NyZWF0ZQkJCWtjcnQJc3RyCUA2CUtFWV9DUkVBVEUJMDU0NwktLS0tLQljcmVhdGUga2V5CitrZXlfZW5kCQkJCWtlbmQJc3RyCUA3CUtFWV9FTkQJCTA1NTAJLS0tLS0JZW5kIGtleQora2V5X2VudGVyCQkJa2VudAlzdHIJQDgJS0VZX0VOVEVSCTA1MjcJLS0tLS0JZW50ZXIvc2VuZCBrZXkKK2tleV9leGl0CQkJa2V4dAlzdHIJQDkJS0VZX0VYSVQJMDU1MQktLS0tLQlleGl0IGtleQora2V5X2ZpbmQJCQlrZm5kCXN0cglAMAlLRVlfRklORAkwNTUyCS0tLS0tCWZpbmQga2V5CitrZXlfaGVscAkJCWtobHAJc3RyCSUxCUtFWV9IRUxQCTA1NTMJLS0tLS0JaGVscCBrZXkKK2tleV9tYXJrCQkJa21yawlzdHIJJTIJS0VZX01BUksJMDU1NAktLS0tLQltYXJrIGtleQora2V5X21lc3NhZ2UJCQlrbXNnCXN0cgklMwlLRVlfTUVTU0FHRQkwNTU1CS0tLS0tCW1lc3NhZ2Uga2V5CitrZXlfbW92ZQkJCWttb3YJc3RyCSU0CUtFWV9NT1ZFCTA1NTYJLS0tLS0JbW92ZSBrZXkKK2tleV9uZXh0CQkJa254dAlzdHIJJTUJS0VZX05FWFQJMDU1NwktLS0tLQluZXh0IGtleQora2V5X29wZW4JCQlrb3BuCXN0cgklNglLRVlfT1BFTgkwNTYwCS0tLS0tCW9wZW4ga2V5CitrZXlfb3B0aW9ucwkJCWtvcHQJc3RyCSU3CUtFWV9PUFRJT05TCTA1NjEJLS0tLS0Jb3B0aW9ucyBrZXkKK2tleV9wcmV2aW91cwkJCWtwcnYJc3RyCSU4CUtFWV9QUkVWSU9VUwkwNTYyCS0tLS0tCXByZXZpb3VzIGtleQora2V5X3ByaW50CQkJa3BydAlzdHIJJTkJS0VZX1BSSU5UCTA1MzIJLS0tLS0JcHJpbnQga2V5CitrZXlfcmVkbwkJCWtyZG8Jc3RyCSUwCUtFWV9SRURPCTA1NjMJLS0tLS0JcmVkbyBrZXkKK2tleV9yZWZlcmVuY2UJCQlrcmVmCXN0cgkmMQlLRVlfUkVGRVJFTkNFCTA1NjQJLS0tLS0JcmVmZXJlbmNlIGtleQora2V5X3JlZnJlc2gJCQlrcmZyCXN0cgkmMglLRVlfUkVGUkVTSAkwNTY1CS0tLS0tCXJlZnJlc2gga2V5CitrZXlfcmVwbGFjZQkJCWtycGwJc3RyCSYzCUtFWV9SRVBMQUNFCTA1NjYJLS0tLS0JcmVwbGFjZSBrZXkKK2tleV9yZXN0YXJ0CQkJa3JzdAlzdHIJJjQJS0VZX1JFU1RBUlQJMDU2NwktLS0tLQlyZXN0YXJ0IGtleQora2V5X3Jlc3VtZQkJCWtyZXMJc3RyCSY1CUtFWV9SRVNVTUUJMDU3MAktLS0tLQlyZXN1bWUga2V5CitrZXlfc2F2ZQkJCWtzYXYJc3RyCSY2CUtFWV9TQVZFCTA1NzEJLS0tLS0Jc2F2ZSBrZXkKK2tleV9zdXNwZW5kCQkJa3NwZAlzdHIJJjcJS0VZX1NVU1BFTkQJMDYyNwktLS0tLQlzdXNwZW5kIGtleQora2V5X3VuZG8JCQlrdW5kCXN0cgkmOAlLRVlfVU5ETwkwNjMwCS0tLS0tCXVuZG8ga2V5CitrZXlfc2JlZwkJCWtCRUcJc3RyCSY5CUtFWV9TQkVHCTA1NzIJLS0tLS0Jc2hpZnRlZCBiZWdpbiBrZXkKK2tleV9zY2FuY2VsCQkJa0NBTglzdHIJJjAJS0VZX1NDQU5DRUwJMDU3MwktLS0tLQlzaGlmdGVkIGNhbmNlbCBrZXkKK2tleV9zY29tbWFuZAkJCWtDTUQJc3RyCSoxCUtFWV9TQ09NTUFORAkwNTc0CS0tLS0tCXNoaWZ0ZWQgY29tbWFuZCBrZXkKK2tleV9zY29weQkJCWtDUFkJc3RyCSoyCUtFWV9TQ09QWQkwNTc1CS0tLS0tCXNoaWZ0ZWQgY29weSBrZXkKK2tleV9zY3JlYXRlCQkJa0NSVAlzdHIJKjMJS0VZX1NDUkVBVEUJMDU3NgktLS0tLQlzaGlmdGVkIGNyZWF0ZSBrZXkKK2tleV9zZGMJCQkJa0RDCXN0cgkqNAlLRVlfU0RDCQkwNTc3CS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9zZGwJCQkJa0RMCXN0cgkqNQlLRVlfU0RMCQkwNjAwCS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWxpbmUga2V5CitrZXlfc2VsZWN0CQkJa3NsdAlzdHIJKjYJS0VZX1NFTEVDVAkwNjAxCS0tLS0tCXNlbGVjdCBrZXkKK2tleV9zZW5kCQkJa0VORAlzdHIJKjcJS0VZX1NFTkQJMDYwMgktLS0tLQlzaGlmdGVkIGVuZCBrZXkKK2tleV9zZW9sCQkJa0VPTAlzdHIJKjgJS0VZX1NFT0wJMDYwMwktLS0tLQlzaGlmdGVkIGNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X3NleGl0CQkJa0VYVAlzdHIJKjkJS0VZX1NFWElUCTA2MDQJLS0tLS0Jc2hpZnRlZCBleGl0IGtleQora2V5X3NmaW5kCQkJa0ZORAlzdHIJKjAJS0VZX1NGSU5ECTA2MDUJLS0tLS0Jc2hpZnRlZCBmaW5kIGtleQora2V5X3NoZWxwCQkJa0hMUAlzdHIJIzEJS0VZX1NIRUxQCTA2MDYJLS0tLS0Jc2hpZnRlZCBoZWxwIGtleQora2V5X3Nob21lCQkJa0hPTQlzdHIJIzIJS0VZX1NIT01FCTA2MDcJLS0tLS0Jc2hpZnRlZCBob21lIGtleQora2V5X3NpYwkJCQlrSUMJc3RyCSMzCUtFWV9TSUMJCTA2MTAJLS0tLS0Jc2hpZnRlZCBpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X3NsZWZ0CQkJa0xGVAlzdHIJIzQJS0VZX1NMRUZUCTA2MTEJLS0tLS0Jc2hpZnRlZCBsZWZ0LWFycm93IGtleQora2V5X3NtZXNzYWdlCQkJa01TRwlzdHIJJWEJS0VZX1NNRVNTQUdFCTA2MTIJLS0tLS0Jc2hpZnRlZCBtZXNzYWdlIGtleQora2V5X3Ntb3ZlCQkJa01PVglzdHIJJWIJS0VZX1NNT1ZFCTA2MTMJLS0tLS0Jc2hpZnRlZCBtb3ZlIGtleQora2V5X3NuZXh0CQkJa05YVAlzdHIJJWMJS0VZX1NORVhUCTA2MTQJLS0tLS0Jc2hpZnRlZCBuZXh0IGtleQora2V5X3NvcHRpb25zCQkJa09QVAlzdHIJJWQJS0VZX1NPUFRJT05TCTA2MTUJLS0tLS0Jc2hpZnRlZCBvcHRpb25zIGtleQora2V5X3NwcmV2aW91cwkJCWtQUlYJc3RyCSVlCUtFWV9TUFJFVklPVVMJMDYxNgktLS0tLQlzaGlmdGVkIHByZXZpb3VzIGtleQora2V5X3NwcmludAkJCWtQUlQJc3RyCSVmCUtFWV9TUFJJTlQJMDYxNwktLS0tLQlzaGlmdGVkIHByaW50IGtleQora2V5X3NyZWRvCQkJa1JETwlzdHIJJWcJS0VZX1NSRURPCTA2MjAJLS0tLS0Jc2hpZnRlZCByZWRvIGtleQora2V5X3NyZXBsYWNlCQkJa1JQTAlzdHIJJWgJS0VZX1NSRVBMQUNFCTA2MjEJLS0tLS0Jc2hpZnRlZCByZXBsYWNlIGtleQora2V5X3NyaWdodAkJCWtSSVQJc3RyCSVpCUtFWV9TUklHSFQJMDYyMgktLS0tLQlzaGlmdGVkIHJpZ2h0LWFycm93IGtleQora2V5X3Nyc3VtZQkJCWtSRVMJc3RyCSVqCUtFWV9TUlNVTUUJMDYyMwktLS0tLQlzaGlmdGVkIHJlc3VtZSBrZXkKK2tleV9zc2F2ZQkJCWtTQVYJc3RyCSExCUtFWV9TU0FWRQkwNjI0CS0tLS0tCXNoaWZ0ZWQgc2F2ZSBrZXkKK2tleV9zc3VzcGVuZAkJCWtTUEQJc3RyCSEyCUtFWV9TU1VTUEVORAkwNjI1CS0tLS0tCXNoaWZ0ZWQgc3VzcGVuZCBrZXkKK2tleV9zdW5kbwkJCWtVTkQJc3RyCSEzCUtFWV9TVU5ETwkwNjI2CS0tLS0tCXNoaWZ0ZWQgdW5kbyBrZXkKK3JlcV9mb3JfaW5wdXQJCQlyZmkJc3RyCVJGCS0JCS0JLS0tLS0Jc2VuZCBuZXh0IGlucHV0IGNoYXIgKGZvciBwdHlzKQorY2xyX2JvbAkJCQllbDEJc3RyCWNiCS0JCS0JLS0tLS0JQ2xlYXIgdG8gYmVnaW5uaW5nIG9mIGxpbmUKK2NsZWFyX21hcmdpbnMJCQltZ2MJc3RyCU1DCS0JCS0JLS0tLS0JY2xlYXIgcmlnaHQgYW5kIGxlZnQgc29mdCBtYXJnaW5zCitzZXRfbGVmdF9tYXJnaW4JCQlzbWdsCXN0cglNTAktCQktCS0tLS0tCXNldCBsZWZ0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uLgkgU2VlIHNtZ2wuIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3JpZ2h0X21hcmdpbgkJc21ncglzdHIJTVIJLQkJLQktLS0tLQlzZXQgcmlnaHQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4KK2xhYmVsX2Zvcm1hdAkJCWZsbglzdHIJTGYJLQkJLQktLS0tLQlsYWJlbCBmb3JtYXQKK3NldF9jbG9jawkJCXNjbGsJc3RyCVNDCS0JCS0JLS0tLS0Jc2V0IGNsb2NrLCAjMSBocnMgIzIgbWlucyAjMyBzZWNzCitkaXNwbGF5X2Nsb2NrCQkJZGNsawlzdHIJREsJLQkJLQktLS0tLQlkaXNwbGF5IGNsb2NrCityZW1vdmVfY2xvY2sJCQlybWNsawlzdHIJUkMJLQkJLQktLS0tLQlyZW1vdmUgY2xvY2sKK2NyZWF0ZV93aW5kb3cJCQljd2luCXN0cglDVwktCQktCS0tLS0tCWRlZmluZSBhIHdpbmRvdyAjMSBmcm9tICMyLCMzIHRvICM0LCM1Citnb3RvX3dpbmRvdwkJCXdpbmdvCXN0cglXRwktCQktCS0tLS0tCWdvIHRvIHdpbmRvdyAjMQoraGFuZ3VwCQkJCWh1cAlzdHIJSFUJLQkJLQktLS0tLQloYW5nLXVwIHBob25lCitkaWFsX3Bob25lCQkJZGlhbAlzdHIJREkJLQkJLQktLS0tLQlkaWFsIG51bWJlciAjMQorcXVpY2tfZGlhbAkJCXFkaWFsCXN0cglRRAktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxIHdpdGhvdXQgY2hlY2tpbmcKK3RvbmUJCQkJdG9uZQlzdHIJVE8JLQkJLQktLS0tLQlzZWxlY3QgdG91Y2ggdG9uZSBkaWFsaW5nCitwdWxzZQkJCQlwdWxzZQlzdHIJUFUJLQkJLQktLS0tLQlzZWxlY3QgcHVsc2UgZGlhbGluZworZmxhc2hfaG9vawkJCWhvb2sJc3RyCWZoCS0JCS0JLS0tLS0JZmxhc2ggc3dpdGNoIGhvb2sKK2ZpeGVkX3BhdXNlCQkJcGF1c2UJc3RyCVBBCS0JCS0JLS0tLS0JcGF1c2UgZm9yIDItMyBzZWNvbmRzCit3YWl0X3RvbmUJCQl3YWl0CXN0cglXQQktCQktCS0tLS0tCXdhaXQgZm9yIGRpYWwtdG9uZQordXNlcjAJCQkJdTAJc3RyCXUwCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzAKK3VzZXIxCQkJCXUxCXN0cgl1MQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMxCit1c2VyMgkJCQl1MglzdHIJdTIJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMgordXNlcjMJCQkJdTMJc3RyCXUzCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzMKK3VzZXI0CQkJCXU0CXN0cgl1NAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM0Cit1c2VyNQkJCQl1NQlzdHIJdTUJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNQordXNlcjYJCQkJdTYJc3RyCXU2CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzYKK3VzZXI3CQkJCXU3CXN0cgl1NwktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM3Cit1c2VyOAkJCQl1OAlzdHIJdTgJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOAordXNlcjkJCQkJdTkJc3RyCXU5CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzkKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCBjb2xvcgorIworb3JpZ19wYWlyCQkJb3AJc3RyCW9wCS0JCS0JLS0tLS0JU2V0IGRlZmF1bHQgcGFpciB0byBpdHMgb3JpZ2luYWwgdmFsdWUKK29yaWdfY29sb3JzCQkJb2MJc3RyCW9jCS0JCS0JLS0tLS0JU2V0IGFsbCBjb2xvciBwYWlycyB0byB0aGUgb3JpZ2luYWwgb25lcworaW5pdGlhbGl6ZV9jb2xvcgkJaW5pdGMJc3RyCUljCS0JCS0JLS0tLS0JaW5pdGlhbGl6ZSBjb2xvciAjMSB0byAoIzIsIzMsIzQpCitpbml0aWFsaXplX3BhaXIJCQlpbml0cAlzdHIJSXAJLQkJLQktLS0tLQlJbml0aWFsaXplIGNvbG9yIHBhaXIgIzEgdG8gZmc9KCMyLCMzLCM0KSwgYmc9KCM1LCM2LCM3KQorc2V0X2NvbG9yX3BhaXIJCQlzY3AJc3RyCXNwCS0JCS0JLS0tLS0JU2V0IGN1cnJlbnQgY29sb3IgcGFpciB0byAjMQorc2V0X2ZvcmVncm91bmQJCQlzZXRmCXN0cglTZgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yICMxCitzZXRfYmFja2dyb3VuZAkJCXNldGIJc3RyCVNiCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgIzEKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCBwcmludGVycworIworY2hhbmdlX2NoYXJfcGl0Y2gJCWNwaQlzdHIJWkEJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGluY2ggdG8gIzEKK2NoYW5nZV9saW5lX3BpdGNoCQlscGkJc3RyCVpCCS0JCS0JLS0tLS0JQ2hhbmdlIG51bWJlciBvZiBsaW5lcyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX3Jlc19ob3J6CQkJY2hyCXN0cglaQwktCQktCS0tLS0tCUNoYW5nZSBob3Jpem9udGFsIHJlc29sdXRpb24gdG8gIzEKK2NoYW5nZV9yZXNfdmVydAkJCWN2cglzdHIJWkQJLQkJLQktLS0tLQlDaGFuZ2UgdmVydGljYWwgcmVzb2x1dGlvbiB0byAjMQorZGVmaW5lX2NoYXIJCQlkZWZjCXN0cglaRQktCQktCS0tLS0tCURlZmluZSBhIGNoYXJhY3RlciAjMSwgIzIgZG90cyB3aWRlLCBkZXNjZW5kZXIgIzMKK2VudGVyX2RvdWJsZXdpZGVfbW9kZQkJc3dpZG0Jc3RyCVpGCS0JCS0JLS0tLS0JRW50ZXIgZG91YmxlLXdpZGUgbW9kZQorZW50ZXJfZHJhZnRfcXVhbGl0eQkJc2RyZnEJc3RyCVpHCS0JCS0JLS0tLS0JRW50ZXIgZHJhZnQtcXVhbGl0eSBtb2RlCitlbnRlcl9pdGFsaWNzX21vZGUJCXNpdG0Jc3RyCVpICS0JCS0JLS0tLS0JRW50ZXIgaXRhbGljIG1vZGUKK2VudGVyX2xlZnR3YXJkX21vZGUJCXNsbQlzdHIJWkkJLQkJLQktLS0tLQlTdGFydCBsZWZ0d2FyZCBjYXJyaWFnZSBtb3Rpb24KK2VudGVyX21pY3JvX21vZGUJCXNtaWNtCXN0cglaSgktCQktCS0tLS0tCVN0YXJ0IG1pY3JvLW1vdGlvbiBtb2RlCitlbnRlcl9uZWFyX2xldHRlcl9xdWFsaXR5CXNubHEJc3RyCVpLCS0JCS0JLS0tLS0JRW50ZXIgTkxRIG1vZGUKK2VudGVyX25vcm1hbF9xdWFsaXR5CQlzbnJtcQlzdHIJWkwJLQkJLQktLS0tLQlFbnRlciBub3JtYWwtcXVhbGl0eSBtb2RlCitlbnRlcl9zaGFkb3dfbW9kZQkJc3NobQlzdHIJWk0JLQkJLQktLS0tLQlFbnRlciBzaGFkb3ctcHJpbnQgbW9kZQorZW50ZXJfc3Vic2NyaXB0X21vZGUJCXNzdWJtCXN0cglaTgktCQktCS0tLS0tCUVudGVyIHN1YnNjcmlwdCBtb2RlCitlbnRlcl9zdXBlcnNjcmlwdF9tb2RlCQlzc3VwbQlzdHIJWk8JLQkJLQktLS0tLQlFbnRlciBzdXBlcnNjcmlwdCBtb2RlCitlbnRlcl91cHdhcmRfbW9kZQkJc3VtCXN0cglaUAktCQktCS0tLS0tCVN0YXJ0IHVwd2FyZCBjYXJyaWFnZSBtb3Rpb24KK2V4aXRfZG91Ymxld2lkZV9tb2RlCQlyd2lkbQlzdHIJWlEJLQkJLQktLS0tLQlFbmQgZG91YmxlLXdpZGUgbW9kZQorZXhpdF9pdGFsaWNzX21vZGUJCXJpdG0Jc3RyCVpSCS0JCS0JLS0tLS0JRW5kIGl0YWxpYyBtb2RlCitleGl0X2xlZnR3YXJkX21vZGUJCXJsbQlzdHIJWlMJLQkJLQktLS0tLQlFbmQgbGVmdC1tb3Rpb24gbW9kZQorZXhpdF9taWNyb19tb2RlCQkJcm1pY20Jc3RyCVpUCS0JCS0JLS0tLS0JRW5kIG1pY3JvLW1vdGlvbiBtb2RlCitleGl0X3NoYWRvd19tb2RlCQlyc2htCXN0cglaVQktCQktCS0tLS0tCUVuZCBzaGFkb3ctcHJpbnQgbW9kZQorZXhpdF9zdWJzY3JpcHRfbW9kZQkJcnN1Ym0Jc3RyCVpWCS0JCS0JLS0tLS0JRW5kIHN1YnNjcmlwdCBtb2RlCitleGl0X3N1cGVyc2NyaXB0X21vZGUJCXJzdXBtCXN0cglaVwktCQktCS0tLS0tCUVuZCBzdXBlcnNjcmlwdCBtb2RlCitleGl0X3Vwd2FyZF9tb2RlCQlydW0Jc3RyCVpYCS0JCS0JLS0tLS0JRW5kIHJldmVyc2UgY2hhcmFjdGVyIG1vdGlvbgorbWljcm9fY29sdW1uX2FkZHJlc3MJCW1ocGEJc3RyCVpZCS0JCS0JLS0tLS0JTGlrZSBjb2x1bW5fYWRkcmVzcyBpbiBtaWNybyBtb2RlCittaWNyb19kb3duCQkJbWN1ZDEJc3RyCVpaCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfZG93biBpbiBtaWNybyBtb2RlCittaWNyb19sZWZ0CQkJbWN1YjEJc3RyCVphCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfbGVmdCBpbiBtaWNybyBtb2RlCittaWNyb19yaWdodAkJCW1jdWYxCXN0cglaYgktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3JpZ2h0IGluIG1pY3JvIG1vZGUKK21pY3JvX3Jvd19hZGRyZXNzCQltdnBhCXN0cglaYwktCQktCS0tLS0tCUxpa2Ugcm93X2FkZHJlc3MgIzEgaW4gbWljcm8gbW9kZQorbWljcm9fdXAJCQltY3V1MQlzdHIJWmQJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl91cCBpbiBtaWNybyBtb2RlCitvcmRlcl9vZl9waW5zCQkJcG9yZGVyCXN0cglaZQktCQktCS0tLS0tCU1hdGNoIHNvZnR3YXJlIGJpdHMgdG8gcHJpbnQtaGVhZCBwaW5zCitwYXJtX2Rvd25fbWljcm8JCQltY3VkCXN0cglaZgktCQktCS0tLS0tCUxpa2UgcGFybV9kb3duX2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX2xlZnRfbWljcm8JCQltY3ViCXN0cglaZwktCQktCS0tLS0tCUxpa2UgcGFybV9sZWZ0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3JpZ2h0X21pY3JvCQltY3VmCXN0cglaaAktCQktCS0tLS0tCUxpa2UgcGFybV9yaWdodF9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV91cF9taWNybwkJCW1jdXUJc3RyCVppCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3VwX2N1cnNvciBpbiBtaWNybyBtb2RlCitzZWxlY3RfY2hhcl9zZXQJCQlzY3MJc3RyCVpqCS0JCS0JLS0tLS0JU2VsZWN0IGNoYXJhY3RlciBzZXQsICMxCitzZXRfYm90dG9tX21hcmdpbgkJc21nYglzdHIJWmsJLQkJLQktLS0tLQlTZXQgYm90dG9tIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF9ib3R0b21fbWFyZ2luX3Bhcm0JCXNtZ2JwCXN0cglabAktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGxpbmUgIzEgb3IgKGlmIHNtZ3RwIGlzIG5vdCBnaXZlbikgIzIgbGluZXMgZnJvbSBib3R0b20KK3NldF9sZWZ0X21hcmdpbl9wYXJtCQlzbWdscAlzdHIJWm0JLQkJLQktLS0tLQlTZXQgbGVmdCAocmlnaHQpIG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF9yaWdodF9tYXJnaW5fcGFybQkJc21ncnAJc3RyCVpuCS0JCS0JLS0tLS0JU2V0IHJpZ2h0IG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF90b3BfbWFyZ2luCQkJc21ndAlzdHIJWm8JLQkJLQktLS0tLQlTZXQgdG9wIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF90b3BfbWFyZ2luX3Bhcm0JCXNtZ3RwCXN0cglacAktCQktCS0tLS0tCVNldCB0b3AgKGJvdHRvbSkgbWFyZ2luIGF0IHJvdyAjMQorc3RhcnRfYml0X2ltYWdlCQkJc2JpbQlzdHIJWnEJLQkJLQktLS0tLQlTdGFydCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0YXJ0X2NoYXJfc2V0X2RlZgkJc2NzZAlzdHIJWnIJLQkJLQktLS0tLQlTdGFydCBjaGFyYWN0ZXIgc2V0IGRlZmluaXRpb24gIzEsIHdpdGggIzIgY2hhcmFjdGVycyBpbiB0aGUgc2V0CitzdG9wX2JpdF9pbWFnZQkJCXJiaW0Jc3RyCVpzCS0JCS0JLS0tLS0JU3RvcCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0b3BfY2hhcl9zZXRfZGVmCQlyY3NkCXN0cgladAktCQktCS0tLS0tCUVuZCBkZWZpbml0aW9uIG9mIGNoYXJhY3RlciBzZXQgIzEKK3N1YnNjcmlwdF9jaGFyYWN0ZXJzCQlzdWJjcwlzdHIJWnUJLQkJLQktLS0tLQlMaXN0IG9mIHN1YnNjcmlwdGFibGUgY2hhcmFjdGVycworc3VwZXJzY3JpcHRfY2hhcmFjdGVycwkJc3VwY3MJc3RyCVp2CS0JCS0JLS0tLS0JTGlzdCBvZiBzdXBlcnNjcmlwdGFibGUgY2hhcmFjdGVycwordGhlc2VfY2F1c2VfY3IJCQlkb2NyCXN0cgladwktCQktCS0tLS0tCVByaW50aW5nIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzIGNhdXNlcyBDUgoremVyb19tb3Rpb24JCQl6ZXJvbQlzdHIJWngJLQkJLQktLS0tLQlObyBtb3Rpb24gZm9yIHN1YnNlcXVlbnQgY2hhcmFjdGVyCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgc3RyaW5nIGNhcGFiaWxpdGllcyBhcmUgcHJlc2VudCBpbiB0aGUgU1ZyNC4wIHRlcm0gc3RydWN0dXJlLAorIyVidXQgd2VyZSBvcmlnaW5hbGx5IG5vdCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4KKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MTguCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitjaGFyX3NldF9uYW1lcwkJCWNzbm0Jc3RyCVp5CS0JCS0JLS0tLS0JUHJvZHVjZSAjMSd0aCBpdGVtIGZyb20gbGlzdCBvZiBjaGFyYWN0ZXIgc2V0IG5hbWVzCitrZXlfbW91c2UJCQlrbW91cwlzdHIJS20JS0VZX01PVVNFCTA2MzEJLS0tLS0JTW91c2UgZXZlbnQgaGFzIG9jY3VycmVkCittb3VzZV9pbmZvCQkJbWluZm8Jc3RyCU1pCS0JCS0JLS0tLS0JTW91c2Ugc3RhdHVzIGluZm9ybWF0aW9uCityZXFfbW91c2VfcG9zCQkJcmVxbXAJc3RyCVJRCS0JCS0JLS0tLS0JUmVxdWVzdCBtb3VzZSBwb3NpdGlvbgorZ2V0X21vdXNlCQkJZ2V0bQlzdHIJR20JLQkJLQktLS0tLQlDdXJzZXMgc2hvdWxkIGdldCBidXR0b24gZXZlbnRzLCBwYXJhbWV0ZXIgIzEgbm90IGRvY3VtZW50ZWQuCitzZXRfYV9mb3JlZ3JvdW5kCQlzZXRhZglzdHIJQUYJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciB0byAjMSwgdXNpbmcgQU5TSSBlc2NhcGUKK3NldF9hX2JhY2tncm91bmQJCXNldGFiCXN0cglBQgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorcGtleV9wbGFiCQkJcGZ4bAlzdHIJeGwJLQkJLQktLS0tLQlQcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMiBhbmQgc2hvdyBzdHJpbmcgIzMKK2RldmljZV90eXBlCQkJZGV2dAlzdHIJZHYJLQkJLQktLS0tLQlJbmRpY2F0ZSBsYW5ndWFnZS9jb2Rlc2V0IHN1cHBvcnQKK2NvZGVfc2V0X2luaXQJCQljc2luCXN0cgljaQktCQktCS0tLS0tCUluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIGNvZGVzZXRzCitzZXQwX2Rlc19zZXEJCQlzMGRzCXN0cglzMAktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMCAoRVVDIHNldCAwLCBBU0NJSSkKK3NldDFfZGVzX3NlcQkJCXMxZHMJc3RyCXMxCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAxCitzZXQyX2Rlc19zZXEJCQlzMmRzCXN0cglzMgktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMgorc2V0M19kZXNfc2VxCQkJczNkcwlzdHIJczMJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDMKK3NldF9scl9tYXJnaW4JCQlzbWdscglzdHIJTUwJLQkJLQktLS0tLQlTZXQgYm90aCBsZWZ0IGFuZCByaWdodCBtYXJnaW5zIHRvICMxLCAjMi4gIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3RiX21hcmdpbgkJCXNtZ3RiCXN0cglNVAktCQktCS0tLS0tCVNldHMgYm90aCB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIHRvICMxLCAjMgorYml0X2ltYWdlX3JlcGVhdAkJYmlyZXAJc3RyCVh5CS0JCS0JLS0tLS0JUmVwZWF0IGJpdCBpbWFnZSBjZWxsICMxICMyIHRpbWVzCitiaXRfaW1hZ2VfbmV3bGluZQkJYmluZWwJc3RyCVp6CS0JCS0JLS0tLS0JTW92ZSB0byBuZXh0IHJvdyBvZiB0aGUgYml0IGltYWdlCitiaXRfaW1hZ2VfY2FycmlhZ2VfcmV0dXJuCWJpY3IJc3RyCVl2CS0JCS0JLS0tLS0JTW92ZSB0byBiZWdpbm5pbmcgb2Ygc2FtZSByb3cKK2NvbG9yX25hbWVzCQkJY29sb3JubQlzdHIJWXcJLQkJLQktLS0tLQlHaXZlIG5hbWUgZm9yIGNvbG9yICMxCitkZWZpbmVfYml0X2ltYWdlX3JlZ2lvbgkJZGVmYmkJc3RyCVl4CS0JCS0JLS0tLS0JRGVmaW5lIHJlY3Rhbmd1YWxhciBiaXQgaW1hZ2UgcmVnaW9uCitlbmRfYml0X2ltYWdlX3JlZ2lvbgkJZW5kYmkJc3RyCVl5CS0JCS0JLS0tLS0JRW5kIGEgYml0LWltYWdlIHJlZ2lvbgorc2V0X2NvbG9yX2JhbmQJCXNldGNvbG9yCXN0cglZegktCQktCS0tLS0tCUNoYW5nZSB0byByaWJib24gY29sb3IgIzEKK3NldF9wYWdlX2xlbmd0aAkJCXNsaW5lcwlzdHIJWVoJLQkJLQktLS0tLQlTZXQgcGFnZSBsZW5ndGggdG8gIzEgbGluZXMKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgZm9yIGRpcmVjdCBQQy1jbG9uZSBzdXBwb3J0CisjCitkaXNwbGF5X3BjX2NoYXIJCQlkaXNwYwlzdHIJUzEJLQkJLQktLS0tLQlEaXNwbGF5IFBDIGNoYXJhY3RlciAjMQorZW50ZXJfcGNfY2hhcnNldF9tb2RlCQlzbXBjaAlzdHIJUzIJLQkJLQktLS0tLQlFbnRlciBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitleGl0X3BjX2NoYXJzZXRfbW9kZQkJcm1wY2gJc3RyCVMzCS0JCS0JLS0tLS0JRXhpdCBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitlbnRlcl9zY2FuY29kZV9tb2RlCQlzbXNjCXN0cglTNAktCQktCS0tLS0tCUVudGVyIFBDIHNjYW5jb2RlIG1vZGUKK2V4aXRfc2NhbmNvZGVfbW9kZQkJcm1zYwlzdHIJUzUJLQkJLQktLS0tLQlFeGl0IFBDIHNjYW5jb2RlIG1vZGUKK3BjX3Rlcm1fb3B0aW9ucwkJCXBjdHJtCXN0cglTNgktCQktCS0tLS0tCVBDIHRlcm1pbmFsIG9wdGlvbnMKK3NjYW5jb2RlX2VzY2FwZQkJCXNjZXNjCXN0cglTNwktCQktCS0tLS0tCUVzY2FwZSBmb3Igc2NhbmNvZGUgZW11bGF0aW9uCithbHRfc2NhbmNvZGVfZXNjCQlzY2VzYQlzdHIJUzgJLQkJLQktLS0tLQlBbHRlcm5hdGUgZXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlLmluIC44aQorIyVUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBhZGRlZCB0aGVzZS4gIFRoZXkgYXJlIHNvbWUgcG9zdC00LjEgCisjJXZlcnNpb25zIG9mIFN5c3RlbSBWIGN1cnNlcywgZS5nLiwgU29sYXJpcyAyLjUgYW5kIElSSVggNi54LgorIyVUaGUgXGZCbmN1cnNlc1xmUiB0ZXJtY2FwIG5hbWVzIGZvciB0aGVtIGFyZSBpbnZlbnRlZDsgYWNjb3JkaW5nIHRvIHRoZQorIyVYU0kgQ3Vyc2VzIHN0YW5kYXJkLCB0aGV5IGhhdmUgbm8gdGVybWNhcCBuYW1lcy4gIElmIHlvdXIgY29tcGlsZWQgdGVybWluZm8KKyMlZW50cmllcyB1c2UgdGhlc2UsIHRoZXkgbWF5IG5vdCBiZSBiaW5hcnktY29tcGF0aWJsZSB3aXRoIFN5c3RlbSBWIHRlcm1pbmZvCisjJWVudHJpZXMgYWZ0ZXIgU1ZyNC4xOyBiZXdhcmUhCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorc2V0X3BnbGVuX2luY2gJCQlzbGVuZ3RoCXN0cglzTAktCQktCS0tLS0tCVlJIFNldCBwYWdlIGxlbmd0aCB0byAjMSBodW5kcmVkdGggb2YgYW4gaW5jaAorZW50ZXJfaG9yaXpvbnRhbF9obF9tb2RlCWVoaGxtCXN0cglYaAktCQktCS0tLS0tCUVudGVyIGhvcml6b250YWwgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX2xlZnRfaGxfbW9kZQkJZWxobG0Jc3RyCVhsCS0JCS0JLS0tLS0JRW50ZXIgbGVmdCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbG93X2hsX21vZGUJCWVsb2hsbQlzdHIJWG8JLQkJLQktLS0tLQlFbnRlciBsb3cgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3JpZ2h0X2hsX21vZGUJCWVyaGxtCXN0cglYcgktCQktCS0tLS0tCUVudGVyIHJpZ2h0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl90b3BfaGxfbW9kZQkJZXRobG0Jc3RyCVh0CS0JCS0JLS0tLS0JRW50ZXIgdG9wIGhpZ2hsaWdodCBtb2RlCitlbnRlcl92ZXJ0aWNhbF9obF9tb2RlCQlldmhsbQlzdHIJWHYJLQkJLQktLS0tLQlFbnRlciB2ZXJ0aWNhbCBoaWdobGlnaHQgbW9kZQorc2V0X2FfYXR0cmlidXRlcwkJc2dyMQlzdHIJc0EJLQkJLQktLS0tLQlEZWZpbmUgc2Vjb25kIHNldCBvZiB2aWRlbyBhdHRyaWJ1dGVzICMxLSM2CitleGl0X2hvcml6b250YWxfaGxfbW9kZSAJcmhobG0Jc3RyCVhICS0JCS0JLS0tLUsJRXhpdCBob3Jpem9udGFsIGhpZ2hsaWdodCBtb2RlCitleGl0X2xlZnRfaGxfbW9kZSAJCXJsaGxtCXN0cglYTAktCQktCS0tLS1LCUV4aXQgbGVmdCBoaWdobGlnaHQgbW9kZQorZXhpdF9sb3dfaGxfbW9kZSAJCXJsb2hsbQlzdHIJWE8JLQkJLQktLS0tSwlFeGl0IGxvdyBoaWdobGlnaHQgbW9kZQorZXhpdF9yaWdodF9obF9tb2RlIAkJcnJobG0Jc3RyCVhSCS0JCS0JLS0tLUsJRXhpdCByaWdodCBoaWdobGlnaHQgbW9kZQorZXhpdF90b3BfaGxfbW9kZSAJCXJ0aGxtCXN0cglYVAktCQktCS0tLS1LCUV4aXQgdG9wIGhpZ2hsaWdodCBtb2RlCitleGl0X3ZlcnRpY2FsX2hsX21vZGUgCQlydmhsbQlzdHIJWFYJLQkJLQktLS0tSwlFeGl0IHZlcnRpY2FsIGhpZ2hsaWdodCBtb2RlCisjJS5URQorIyUuYWQKKyMKKyMgVGhlIG1hZ2ljIHRva2VuIGJlbG93IHRlbGxzIHRoZSB0aWMgY29tcGlsZXItZ2VuZXJhdG9yIGNvZGUgdGhhdCBhbGwgdGhlIGNhcHMKKyMgcGFzdCBpdCBzaG91bGQgYmUgaWdub3JlZCAobm90IHdyaXR0ZW4gb3V0KSB3aGVuIGR1bXBpbmcgdGVybWluZm8gb2JqZWN0cy4gSXQKKyMgYWxzbyB0ZWxscyB0aGUgbWFuIHBhZ2UgdGFibGUgZ2VuZXJhdG9yIG5vdCB0byBwYXNzIHRocm91Z2ggZm9sbG93aW5nIGxpbmVzCisjIFRoaXMgbWVhbnMgd2UgY2FuIGhhdmUgb2Jzb2xldGUgY2FwYWJpbGl0aWVzIGFuZCBwc2V1ZG8tY2FwYWJpbGl0aWVzIHRoYXQgYXJlCisjIHJlY29nbml6ZWQgZm9yIHRlcm1jYXAgb3IgdGVybWluZm8gY29tcGlsYXRpb24sIGJ1dCBub3Qgb3V0cHV0LgorIworIyAlJS1TVE9QLUhFUkUtJSUKKyMKKyMgRG9uJ3QgbW92ZSB0aGlzIGNhc3VhbGx5ISAgSW4gZmFjdCwgZG9uJ3QgbW92ZSBpdCBhdCBhbGwgdW5sZXNzIHlvdSdyZQorIyBlaXRoZXIgZG9pbmcgaXQgdG8gYWRkIFN5c3RlbSBWIG9yIFhQRzQgZXh0ZW5zaW9ucywgb3IgaGF2ZSBkZWNpZGVkIHlvdQorIyBkb24ndCBjYXJlIGFib3V0IFNWcjQgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNQ0FQIEVYVEVOU0lPTiBDQVBBQklMSVRJRVMKKyMKKyMgVGhlIGNhcGFiaWxpdGllcyBiZWxvdyBhcmUgZWl0aGVyIG9ic29sZXRlIG9yIGV4dGVuc2lvbnMgb24gY2VydGFpbiBzeXN0ZW1zLgorIyBUaGV5IGFyZSBub3QgdXNlZCBieSBTVlI0IHRlcm1pbmZvLiAgU29tZSBhcmUgdXNlZCBieSBjYXB0b2luZm8gdG8gdHJhbnNsYXRlCisjIHRlcm1jYXAgc291cmNlczsgdGhlIHJlc3QgYXJlIGxpc3RlZCBmb3IgY29tcGxldGVuZXNzLCBhbmQgaW4gY2FzZSBzb21lYm9keQorIyBjYXJlcyBhYm91dCB0aGVtIGVub3VnaCB0byBoYWNrIGluIGNvZGUgdGhhdCB3aWxsIHRyYW5zbGF0ZSB0aGVtIGludG8KKyMgdGVybWluZm8gY2FwYWJpbGl0aWVzLgorIworIyBUaGUgZmlyc3QgcGFydCBvZiB0aGUgbGlzdCBpcyBmcm9tIFJvc3MgUmlkZ2UncyBgbXl0aW5mbycgcGFja2FnZQorIyAoY29tcC5zb3VyY2VzLnVuaXgsIHZvbHVtZSAyNik7IHRoZSB2YXJpYWJsZSBuYW1lcyBhbmQgdGVybWluZm8gbmFtZXMgKGFzCisjIHdlbGwgYXMgdGhlIHRlcm1jYXAgY29kZXMpIG1hdGNoIGhpcyBsaXN0LgorIworIyBUaGlzIGdyb3VwIG9mIGNvZGVzIGlzIG5vdCBtYXJrZWQgb2Jzb2xldGUgaW4gNC40QlNELCBidXQgaGF2ZSBubyBkaXJlY3QKKyMgdGVybWluZm8gZXF1aXZhbGVudHMuICBUaGUgcnMgY2FwYWJpbGl0eSBpcyBzcGVjaWFsbHkgdHJhbnNsYXRlZCB0byB0ZXJtaW5mbworIyByMiwgYW5kIHZpY2UgdmVyc2EsIGlmIGFuIGVudHJ5IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiByMi4gIFNpbWlsYXJseSwKKyMgaTIgaXMgdHJhbnNsYXRlZCB0byByMyBpZiB0aGVyZSBpcyBubyByMyAoYmVjYXVzZSBTViB0ZXJtaW5mbyBtYXBzIGlzIHRvIGkyKS4KKyMgVGhlIHVnIGNhcGFiaWxpdHkgaXMgdGhyb3duIGF3YXksIGJ1dCBhc3N1bWVkIHRvIGJlIHdoYXRldmVyIHNnIGlzIGlmIHRoZQorIyBsYXR0ZXIgaXMgbm9uemVybyBhbmQgd2UncmUgZHVtcGluZyBpbiB0ZXJtY2FwIGZvcm1hdC4KKyMKK3Rlcm1jYXBfaW5pdDIJCQlPVGkyCXN0cglpMgktCQktCVlCLS0tCXNlY29uZGFyeSBpbml0aWFsaXphdGlvbiBzdHJpbmcKK3Rlcm1jYXBfcmVzZXQJCQlPVHJzCXN0cglycwktCQktCVlCLUctCXRlcm1pbmFsIHJlc2V0IHN0cmluZworbWFnaWNfY29va2llX2dsaXRjaF91bAkJT1R1ZwludW0JdWcJLQkJLQlZQkNHRQludW1iZXIgb2YgYmxhbmtzIGxlZnQgYnkgdWwKKyMKKyMgT2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMuICBTb21lIGFyZSB1c2VkIGZvciB0ZXJtY2FwIHRyYW5zbGF0aW9uLiAgVGhlCisjIGNvZGUgdXNlcyB0aGUgJ09UJyBwcmVmaXggd2UgcHV0IG9uIG9ic29sZXRlIGNhcGFiaWxpdGllcyB0byBzdXBwcmVzcworIyBwcmludGluZyB0aGVtIGluIHRlcm1pbmZvIHNvdXJjZSBkdW1wcyBvZiBjb21waWxlZCBlbnRyaWVzLgorIworYmFja3NwYWNlc193aXRoX2JzCQlPVGJzCWJvb2wJYnMJLQkJLQlZQkNHRQl1c2VzIF5IIHRvIG1vdmUgbGVmdAorY3J0X25vX3Njcm9sbGluZwkJT1Rucwlib29sCW5zCS0JCS0JWUJDRy0JY3J0IGNhbm5vdCBzY3JvbGwKK25vX2NvcnJlY3RseV93b3JraW5nX2NyCQlPVG5jCWJvb2wJbmMJLQkJLQlZQkNHLQlubyB3YXkgdG8gZ28gdG8gc3RhcnQgb2YgbGluZQorY2FycmlhZ2VfcmV0dXJuX2RlbGF5CQlPVGRDCW51bQlkQwktCQktCVlCLUctCXBhZCBuZWVkZWQgZm9yIENSCituZXdfbGluZV9kZWxheQkJCU9UZE4JbnVtCWROCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgTEYKK2xpbmVmZWVkX2lmX25vdF9sZgkJT1RubAlzdHIJbmwJLQkJLQlZQkNHRQl1c2UgdG8gbW92ZSBkb3duCitiYWNrc3BhY2VfaWZfbm90X2JzCQlPVGJjCXN0cgliYwktCQktCVlCQ0dFCW1vdmUgbGVmdCwgaWYgbm90IF5ICisjCisjIEdOVSB0ZXJtY2FwIGxpYnJhcnkgZXh0ZW5zaW9ucy4gIFRoZSBHTlUgdGVybWNhcCBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgRW1hY3Mgbm8gbG9uZ2VyIHVzZXMgdGhlc2UsIGJ1dCBNVCBzaG93ZWQgdXAgaW4gcHJlLTkuMCB2ZXJzaW9ucyBvZiB0aGUKKyMgQlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuYW1lIGNsYXNoIHdpdGggdGVybWluZm8gTVQgaXMgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvOyBNVCBpcyBjb252ZXJ0ZWQgdG8ga20uCisjCitnbnVfaGFzX21ldGFfa2V5CQlPVE1UCWJvb2wJTVQJLQkJLQktLS0tRQloYXMgbWV0YSBrZXkKKyMgZ251X3RhYl93aWR0aAkJCU9UdHcJbnVtCXR3CS0JCS0JLS0tLUUJdGFiIHdpZHRoIGluIHNwYWNlcworIworIyBHTlUgdGVybWNhcCAqZG9lcyogaW5jbHVkZSB0aGUgZm9sbG93aW5nIGV4dGVuZGVkIGNhcGFiaWxpdHksICBPbmx5IHRoZQorIyBub3ctb2Jzb2xldGUgQW5uIEFyYm9yIHRlcm1pbmFscyB1c2VkIGl0LgorIworIyBnbnVfY2hhbmdlX3Njcm9sbF9yZWdpb24JT1RjUwlzdHIJY1MJLQkJLQktLS1HRQlhbHRlcm5hdGUgc2V0IHNjcm9sbGluZyByZWdpb24gCisjCisjIFRoZSBmb2xsb3dpbmcgY29tbWVudHMgZGVzY3JpYmUgY2FwbmFtZXMgc28gYW5jaWVudCB0aGF0IEkgYmVsaWV2ZSBubworIyBzb2Z0d2FyZSB1c2VzIHRoZW0gYW55IGxvbmdlci4gIFNvbWUgb2YgdGhlc2UgaGF2ZSB0byBnbyBiZWNhdXNlIHRoZXkKKyMgY2xhc2ggd2l0aCB0ZXJtaW5mbyBuYW1lcyBpbiB3YXlzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHR5cGUKKyMgaW5mb3JtYXRpb24uCisjCisjIFRoZXNlIG15dGluZm8gY29kZXMgYXJlIG5vdCB1c2VkIGluIHRoZSA0LjRCU0QgY3Vyc2VzIGNvZGUuICBUaGV5IGFyZQorIyBtYXJrZWQgb2Jzb2xldGUgaW4gdGhlIDQuNEJTRCBtYW51YWwgcGFnZXMuCisjCisjIFRoZXJlIGlzIG9uZSBjb25mbGljdCB3aXRoIHRlcm1pbmZvOyBtYSBpcyBpbiBib3RoLiAgVGhpcyBjb25mbGljdCBpcworIyByZXNvbHZlZCBieSB0eXBlIGluZm9ybWF0aW9uLgorIworIyBUaGUgYGtvJyBjYXBhYmlsaXR5IGlzIHRyYW5zbGF0ZWQgYnkgc3BlY2lhbCBjb2RlLiAgSXQgc2hvdWxkIGNvbnRhaW4gYQorIyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGtleXMuCisjIFRoZSBga24nIGNvZGUgaXMgYWNjZXB0ZWQgYnV0IGlnbm9yZWQuCisjCisjIFRoZSBgbWEnIGNhcGFiaWxpdHkgc2VlbXMgdG8gaGF2ZSBiZWVuIGRlc2lnbmVkIHRvIG1hcCBiZXR3ZWVuIHRoZSByb2d1ZSgyKQorIyBtb3Rpb24ga2V5cyAoaW5jbHVkaW5nIGpraGwpIGFuZCBjaGFyYWN0ZXJzIGVtaXR0ZWQgYnkgYXJyb3cga2V5cyBvbiBzb21lCisjIHByaW1pdGl2ZSBwcmUtQU5TSSB0ZXJtaW5hbHMuICBJdCdzIHNvIG9ic29sZXRlIGl0J3MgZm9zc2lsaXplZC4uLgorIworIyBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2YgbWVtb3J5X2xvY2tfYWJvdmUgYW5kIG1lbW9yeV91bmxvY2s6CisjICJZb3UgY2FuICdmcmVlemUnIGRhdGEgb24gdGhlIHNjcmVlbiBieSB0dXJuaW5nIG9uIE1lbW9yeSBMb2NrIGluIGEgbGluZSBvZgorIyB0ZXh0LiAgQWxsIGxpbmVzIGFib3ZlIHRoZSBjdXJzb3IncyBjdXJyZW50IGxpbmUgYmVjb21lIGxvY2tlZCBpbiBwbGFjZSBvbgorIyB0aGUgc2NyZWVuLiAgVGhlbiBlbnRlciBkYXRhIG5vcm1hbGx5LiAgV2hlbiB0aGUgc2NyZWVuIGZpbGxzIHVwLCBhbnkKKyMgZnVydGhlciBkYXRhIGVudGVyZWQgZm9yY2VzIHRoZSBmaXJzdCBsaW5lIG9mIHVuZnJvemVuIGxpbmUgdGV4dCB0byBzY3JvbGwKKyMgdW5kZXIgdGhlIGZyb3plbiBkYXRhLiAgTGluZXMgc2Nyb2xsZWQgb2ZmIHRoZSBzY3JlZW4gYXJlIGluc2VydGVkIGludG8KKyMgbWVtb3J5IGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgZmlyc3QgZnJvemVuIGxpbmUuIiAoZnJvbSB0aGUgSFAgNzAwLzk2CisjIFVzZXIncyBtYW51YWwpLiAgVlQxMDAvQU5TSSBtZW1vcnkgbG9jayBzZXQgaXMgXEVbPjJoLCByZXNldCBpcyBcRVs+MmwuCisjCisjIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0ZXJtaW5mbyBhcmUgc3VwcG9zZWQgdG8gYmVoYXZlIGFzIHRob3VnaCB4ciBpcworIyBhbHdheXMgdHJ1ZS4KKyMKK2xpbmVmZWVkX2lzX25ld2xpbmUJCU9UTkwJYm9vbAlOTAktCQktCVlCLS0tCW1vdmUgZG93biB3aXRoIFxuCisjIGV2ZW5fcGFyaXR5CQkJT1RFUAlib29sCUVQCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgZXZlbiBwYXJpdHkKKyMgb2RkX3Bhcml0eQkJCU9UT1AJYm9vbAlPUAktCQktCS1CLS0tCXRlcm1pbmFsIHJlcXVpcmVzIG9kZCBwYXJpdHkKKyMgaGFsZl9kdXBsZXgJCQlPVEhECWJvb2wJSEQJLQkJLQktQi0tLQl0ZXJtaW5hbCBpcyBoYWxmLWR1cGxleAorIyBsb3dlcl9jYXNlX29ubHkJCU9UTEMJYm9vbAlMQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IGxvd2VyIGNhc2UKKyMgdXBwZXJfY2FzZV9vbmx5CQlPVFVDCWJvb2wJVUMJLQkJLQktQi0tLQl0ZXJtaW5hbCBoYXMgb25seSB1cHBlciBjYXNlCitiYWNrc3BhY2VfZGVsYXkJCQlPVGRCCW51bQlkQgktCQktCVlCLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5ICisjIGZvcm1fZmVlZF9kZWxheQkJT1RkRgludW0JZEYJLQkJLQktQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeTAoraG9yaXpvbnRhbF90YWJfZGVsYXkJCU9UZFQJbnVtCWRUCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkkKKyMgdmVydGljYWxfdGFiX2RlbGF5CQlPVGRWCW51bQlkVgktCQktCS1CLS0tCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5WCitudW1iZXJfb2ZfZnVuY3Rpb25fa2V5cwkJT1RrbgludW0Ja24JLQkJLQktQi1HLQljb3VudCBvZiBmdW5jdGlvbiBrZXlzCitvdGhlcl9ub25fZnVuY3Rpb25fa2V5cwkJT1RrbwlzdHIJa28JLQkJLQktQi1HLQlsaXN0IG9mIHNlbGYtbWFwcGVkIGtleWNhcHMKK2Fycm93X2tleV9tYXAJCQlPVG1hCXN0cgltYQktCQktCVlCQy0tCW1hcCBhcnJvdyBrZXlzIHJvZ3VlKDEpIG1vdGlvbiBrZXlzCisjIG1lbW9yeV9sb2NrX2Fib3ZlCQlPVG1sCXN0cgltbAktCQktCS1CLS0tCWxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKKyMgbWVtb3J5X3VubG9jawkJCU9UbXUJc3RyCW11CS0JCS0JLUItLS0JdW5sb2NrIHZpc2libGUgc2NyZWVuIG1lbW9yeSBhYm92ZSB0aGUgY3VycmVudCBsaW5lCitoYXNfaGFyZHdhcmVfdGFicwkJT1RwdAlib29sCXB0CS0JCS0JWUItLS0JaGFzIDgtY2hhciB0YWJzIGludm9rZWQgd2l0aCBeSQorcmV0dXJuX2RvZXNfY2xyX2VvbAkJT1R4cglib29sCXhyCS0JCS0JWUItLS0JcmV0dXJuIGNsZWFycyB0aGUgbGluZQorIyB0ZWtfNDAyNV9pbnNlcnRfbGluZQkJT1R4eAlib29sCXh4CS0JCS0JLUJDLS0JVGVrdHJvbml4IDQwMjUgaW5zZXJ0LWxpbmUgZ2xpdGNoCisjCisjIG15dGluZm8gZGVzY3JpYmVkIHRoaXMgYXMgYSB0ZXJtY2FwIGNhcGFiaWxpdHksIGJ1dCBpdCdzIG5vdCBsaXN0ZWQgaW4gdGhlCisjIDQuNEJTRCBtYW4gcGFnZXMsIGFuZCBub3QgZm91bmQgaW4gdGhlIDQuNEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgbmN1cnNlcworIyBwYWNrYWdlLCBsaWtlIFN5c3RlbSBWLCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbHdheXMgdHJ1ZS4KKyMKKyMgcmluZF9vbmx5X2F0X3RvcAkJT1R4cQlib29sCXhxCS0JCS0JLS0tLS0JcmV2ZXJzZSBpbmRleCBvbmx5IHdvcmtzIGZyb20gdG9wIGxpbmUKKyMKKyMgVW5pdmVyc2l0eSBvZiBXYXRlcmxvbyB0ZXJtY2FwIGV4dGVuc2lvbnMgKGFzIGRlc2NyaWJlZCBpbiBteXRpbmZvKS4KKyMgVGhlIGB4bCcgdGVybWNhcCBmaWxlIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdAorIyBiZSByZXNvbHZlZCBieSBhIHR5cGUgY2hlY2suICBUaGUgZGVzY3JpcHRpb25zIGFyZSBndWVzc2VzIGZyb20gd2hhdCB3YXMKKyMgaW4gdGhlIG15dGluZm8gdGFibGVzLiAKKyMKKyMga2V5X2ludGVycnVwdF9jaGFyCQlPVGtpCXN0cglraQktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgaW50ZXJydXB0IGtleSAoPykKKyMga2V5X2tpbGxfY2hhcgkJCU9Ua2sJc3RyCWtrCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBraWxsIGtleSAoPykKKyMga2V5X3N1c3BlbmRfY2hhcgkJT1RreglzdHIJa3oJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IHN1c3BlbmQga2V5ICg/KQorIyBpbml0aWFsaXphdGlvbl9tZXNzeQkJT1R4Ywlib29sCXhjCS0JCS0JLS0tLS0JaW5pdGlhbGl6YXRpb24gbGVhdmVzIGdhcmJhZ2Ugb24gdGhlIHNjcmVlbiAoPykKKyMgaW5kX2F0X2JvdHRvbV9kb2VzX2NyCQlPVHhsCWJvb2wJeGwJLQkJLQktLS0tLQlpbmRleCBkb2VzIGEgY2FycmlhZ2UgcmV0dXJuCisjCisjIE5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyB1bmlxdWUgdG8gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlLgorIyBTUiBjbGFzaGVzIHdpdGggYSB0ZXJtaW5mbyBuYW1lOyB0aGlzIGFtYmlndWl0eSBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgYSB0eXBlCisjIGNoZWNrLgorIworIyBzY3JvbGxfbGVmdAkJCU9Uc2wxCXN0cglTbAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQKKyMgc2Nyb2xsX3JpZ2h0CQkJT1RzcjEJc3RyCVNyCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQKKyMgcGFybV9zY3JvbGxfbGVmdAkJT1RzbAlzdHIJU0wJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIGxlZnR3YXJkICMxIGNoYXJhY3RlcnMKKyMgcGFybV9zY3JvbGxfcmlnaHQJCU9Uc3IJc3RyCVNSCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQgIzEgY2hhcmFjdGVycworIworIyBUaGUgbXl0aW5mbyBjYXBhYmlsaXRpZXMgZW5kIGhlcmUuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFhlbml4IGRlZmluZWQgaXRzIG93biBzZXQgb2YgZm9ybXMtZHJhd2luZyBjYXBhYmlsaXRpZXM6CisjCisjIGNhcAlJQk0gQVNDSUkJZGVzY3JpcHRpb24gICAgICAgICAgICAgQUNTICAgICAgICAgCUFTQ0lJCisjIC0tLQktLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tCS0tLS0tLQorIyBHMQkxOTEgXDI3NyBNLT8Jc2luZ2xlIHVwcGVyIHJpZ2h0ICAgCUFDU19VUkNPUk5FUgorIyBHMgkyMTggXDMzMiBNLVoJc2luZ2xlIHVwcGVyIGxlZnQJQUNTX1VMQ09STkVSCisjIEczCTE5MiBcMzAwIE0tQAlzaW5nbGUgbG93ZXIgbGVmdAlBQ1NfTExDT1JORVIKKyMgRzQJMjE3IFwzMzEgTS1ZCXNpbmdsZSBsb3dlciByaWdodAlBQ1NfTFJDT1JORVIKKyMgRzUJMTg3IFwyNzMgTS07CWRvdWJsZSB1cHBlciByaWdodAorIyBHNgkyMDEgXDMxMSBNLUkJZG91YmxlIHVwcGVyIGxlZnQKKyMgRzcJMjAwIFwzMTAgTS1ICWRvdWJsZSBsb3dlciBsZWZ0CisjIEc4CTE4OCBcMjc0IE0tPAlkb3VibGUgbG93ZXIgcmlnaHQKKyMgR0MJMTk3IFwzMDUgTS1FCXNpbmdsZSBpbnRlcnNlY3Rpb24JQUNTX1BMVVMJXyBfCisjIEdECTE5NCBcMzAyIE0tQglzaW5nbGUgZG93bi10aWNrCUFDU19UVEVFCSB8CisjIEdICTE5NiBcMzA0IE0tRAlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCUFDU19ITElORQorIyBHTAkxODAgXDI2NCBNLTQJc2luZ2xlIGxlZnQgdGljawlBQ1NfUlRFRQktfAorIyBHUgkxOTUgXDMwMyBNLUMJc2luZ2xlIHJpZ2h0IHRpY2sJQUNTX0xURUUJfC0KKyMgR1UJMTkzIFwzMDEgTS1BCXNpbmdsZSB1cCB0aWNrCQlBQ1NfQlRFRQlffF8KKyMgR1YJMTc5IFwyNjMgTS0zCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCUFDU19WTElORQorIyBHYwkyMDYgXDMxNiBNLU4JZG91YmxlIGludGVyc2VjdGlvbgorIyBHZAkyMDMgXDMxMyBNLUsJZG91YmxlIGRvd24gdGljaworIyBHaAkyMDUgXDMxNSBNLU0JZG91YmxlIGhvcml6b250YWwgbGluZQorIyBHbAkyMDQgXDIwNCBNLUwJZG91YmxlIGxlZnQgdGljaworIyBHcgkxODUgXDI3MSBNLTkJZG91YmxlIHJpZ2h0IHRpY2sKKyMgR3UJMjAyIFwzMTIgTS1KCWRvdWJsZSB1cCB0aWNrCisjIEd2CTE4NiBcMjcyIE0tOglkb3VibGUgdmVydGljYWwgbGluZQorIworIyBUaGUgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUgdGhlIHNpbmdsZS1saW5lIGNhcHMgYW5kIGRpc2NhcmQgdGhlIG90aGVycworIyAodmlhIElHTk9SRSBhbGlhc2VzIGZ1cnRoZXIgZG93bikuICBXZSBkb24ndCB3YW50IHRvIGRvIG5vcm1hbCBwYWQgCisjIHRyYW5zbGF0aW9uIG9uIHRoZXNlLCB0aGV5J3JlIG9mdGVuIHNpbmdsZS1jaGFyYWN0ZXIgcHJpbnRhYmxlIEFTQ0lJCisjIHN0cmluZ3MgdGhhdCBoYXBwZW4gdG8gYmUgbnVtZXJpY3MuICBUaGVyZSdzIGF3ayBjb2RlIGluIHBhcmFtZXRyaXplZC5zaAorIyB0aGF0IGRldGVjdHMgdGhlIGFjc18gcHJlZml4IGFuZCB1c2VzIGl0IHRvIHN1cHByZXNzIHBhZCB0cmFuc2xhdGlvbi4KKyMgVGhlc2UgdGVybWluZm8gbmFtZXMgYXJlIGludmVudGVkLgorIworYWNzX3VsY29ybmVyCQkJT1RHMglzdHIJRzIJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgbGVmdAorYWNzX2xsY29ybmVyCQkJT1RHMwlzdHIJRzMJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgbGVmdAorYWNzX3VyY29ybmVyCQkJT1RHMQlzdHIJRzEJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgcmlnaHQKK2Fjc19scmNvcm5lcgkJCU9URzQJc3RyCUc0CS0JCS0JLS0tLS0Jc2luZ2xlIGxvd2VyIHJpZ2h0CithY3NfbHRlZQkJCU9UR1IJc3RyCUdSCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIHJpZ2h0CithY3NfcnRlZQkJCU9UR0wJc3RyCUdMCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIGxlZnQKK2Fjc19idGVlCQkJT1RHVQlzdHIJR1UJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgdXAKK2Fjc190dGVlCQkJT1RHRAlzdHIJR0QJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgZG93bgorYWNzX2hsaW5lCQkJT1RHSAlzdHIJR0gJLQkJLQktLS0tLQlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCithY3NfdmxpbmUJCQlPVEdWCXN0cglHVgktCQktCS0tLS0tCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCithY3NfcGx1cwkJCU9UR0MJc3RyCUdDCS0JCS0JLS0tLS0Jc2luZ2xlIGludGVyc2VjdGlvbgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVEVSTUlORk8gRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGlzIHNlY3Rpb24gaXMgYWxtb3N0IGFsbCBjb21tZW50cy4gIFdoYXQgaXQncyBtYWlubHkgZm9yIGlzIHRvIGRlc2NyaWJlCisjIHdoYXQgY2FwYWJpbGl0aWVzIG5lZWQgdG8gYmUgc3F1ZWV6ZWQgb3V0IHRvIGdldCBkb3duIHRvIHRoZSBYU0kgQ3Vyc2VzCisjIHN0YW5kYXJkIHNldC4gIFRoZXkgYXJlIGZsYWdnZWQgd2l0aCBLLgorIworIyBIUCBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBIUAorIyB0ZXJtaW5mbyBmaWxlcy4gIEV4Y2VwdCBmb3IgbWVtb3J5X2xvY2sgYW5kIG1lbW9yeV91bmxvY2ssIHRoZXkgYXJlCisjIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gU1ZyNCBleHRlbnNpb25zLCBidXQgdGhleSBtYWtlIHRoZSBiaW5hcnkgZm9ybWF0CisjIGRpZmZlcmVudC4gIEdycnIuLi4uCisjCisjbWVtb3J5X2xvY2sJCQltZW1sCXN0cgltbAktCQktCS0tLS1LCW1lbW9yeSBsb2NrIGFib3ZlCisjbWVtb3J5X3VubG9jawkJCW1lbXUJc3RyCW11CS0JCS0JLS0tLUsJbWVtb3J5IHVubG9jaworI3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCisjbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKKyNsYWJlbF9vZmYJCQlybWxuCXN0cglMRgktCQktCS0tLS0tCXR1cm4gb2ZmIHNvZnQgbGFiZWxzCisja2V5X2YxMQkJCWtmMTEJc3RyCUYxCS0JCS0JLS0tLS0JRjExIGZ1bmN0aW9uIGtleQorI2tleV9mMTIJCQlrZjEyCXN0cglGMgktCQktCS0tLS0tCUYxMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjEzCQkJa2YxMwlzdHIJRjMJLQkJLQktLS0tLQlGMTMgZnVuY3Rpb24ga2V5Cisja2V5X2YxNAkJCWtmMTQJc3RyCUY0CS0JCS0JLS0tLS0JRjE0IGZ1bmN0aW9uIGtleQorI2tleV9mMTUJCQlrZjE1CXN0cglGNQktCQktCS0tLS0tCUYxNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjE2CQkJa2YxNglzdHIJRjYJLQkJLQktLS0tLQlGMTYgZnVuY3Rpb24ga2V5Cisja2V5X2YxNwkJCWtmMTcJc3RyCUY3CS0JCS0JLS0tLS0JRjE3IGZ1bmN0aW9uIGtleQorI2tleV9mMTgJCQlrZjE4CXN0cglGOAktCQktCS0tLS0tCUYxOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE5CQkJa2YxOQlzdHIJRjkJLQkJLQktLS0tLQlGMTkgZnVuY3Rpb24ga2V5Cisja2V5X2YyMAkJCWtmMjAJc3RyCUZBCS0JCS0JLS0tLS0JRjIwIGZ1bmN0aW9uIGtleQorI2tleV9mMjEJCQlrZjIxCXN0cglGQgktCQktCS0tLS0tCUYyMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIyCQkJa2YyMglzdHIJRkMJLQkJLQktLS0tLQlGMjIgZnVuY3Rpb24ga2V5Cisja2V5X2YyMwkJCWtmMjMJc3RyCUZECS0JCS0JLS0tLS0JRjIzIGZ1bmN0aW9uIGtleQorI2tleV9mMjQJCQlrZjI0CXN0cglGRQktCQktCS0tLS0tCUYyNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI1CQkJa2YyNQlzdHIJRkYJLQkJLQktLS0tLQlGMjUgZnVuY3Rpb24ga2V5Cisja2V5X2YyNgkJCWtmMjYJc3RyCUZHCS0JCS0JLS0tLS0JRjI2IGZ1bmN0aW9uIGtleQorI2tleV9mMjcJCQlrZjI3CXN0cglGSAktCQktCS0tLS0tCUYyNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI4CQkJa2YyOAlzdHIJRkkJLQkJLQktLS0tLQlGMjggZnVuY3Rpb24ga2V5Cisja2V5X2YyOQkJCWtmMjkJc3RyCUZKCS0JCS0JLS0tLS0JRjI5IGZ1bmN0aW9uIGtleQorI2tleV9mMzAJCQlrZjMwCXN0cglGSwktCQktCS0tLS0tCUYzMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjMxCQkJa2YzMQlzdHIJRkwJLQkJLQktLS0tLQlGMzEgZnVuY3Rpb24ga2V5Cisja2V5X2YzMgkJCWtmMzIJc3RyCUZNCS0JCS0JLS0tLS0JRjMyIGZ1bmN0aW9uIGtleQorI2tleV9mMzMJCQlrZjMzCXN0cglGTgktCQktCS0tLS0tCUYzMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM0CQkJa2YzNAlzdHIJRk8JLQkJLQktLS0tLQlGMzQgZnVuY3Rpb24ga2V5Cisja2V5X2YzNQkJCWtmMzUJc3RyCUZQCS0JCS0JLS0tLS0JRjM1IGZ1bmN0aW9uIGtleQorI2tleV9mMzYJCQlrZjM2CXN0cglGUQktCQktCS0tLS0tCUYzNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjM3CQkJa2YzNwlzdHIJRlIJLQkJLQktLS0tLQlGMzcgZnVuY3Rpb24ga2V5Cisja2V5X2YzOAkJCWtmMzgJc3RyCUZTCS0JCS0JLS0tLS0JRjM4IGZ1bmN0aW9uIGtleQorI2tleV9mMzkJCQlrZjM5CXN0cglGVAktCQktCS0tLS0tCUYzOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQwCQkJa2Y0MAlzdHIJRlUJLQkJLQktLS0tLQlGNDAgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MQkJCWtmNDEJc3RyCUZWCS0JCS0JLS0tLS0JRjQxIGZ1bmN0aW9uIGtleQorI2tleV9mNDIJCQlrZjQyCXN0cglGVwktCQktCS0tLS0tCUY0MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQzCQkJa2Y0MwlzdHIJRlgJLQkJLQktLS0tLQlGNDMgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NAkJCWtmNDQJc3RyCUZZCS0JCS0JLS0tLS0JRjQ0IGZ1bmN0aW9uIGtleQorI2tleV9mNDUJCQlrZjQ1CXN0cglGWgktCQktCS0tLS0tCUY0NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ2CQkJa2Y0NglzdHIJRmEJLQkJLQktLS0tLQlGNDYgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NwkJCWtmNDcJc3RyCUZiCS0JCS0JLS0tLS0JRjQ3IGZ1bmN0aW9uIGtleQorI2tleV9mNDgJCQlrZjQ4CXN0cglGYwktCQktCS0tLS0tCUY0OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ5CQkJa2Y0OQlzdHIJRmQJLQkJLQktLS0tLQlGNDkgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MAkJCWtmNTAJc3RyCUZlCS0JCS0JLS0tLS0JRjUwIGZ1bmN0aW9uIGtleQorI2tleV9mNTEJCQlrZjUxCXN0cglGZgktCQktCS0tLS0tCUY1MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUyCQkJa2Y1MglzdHIJRmcJLQkJLQktLS0tLQlGNTIgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MwkJCWtmNTMJc3RyCUZoCS0JCS0JLS0tLS0JRjUzIGZ1bmN0aW9uIGtleQorI2tleV9mNTQJCQlrZjU0CXN0cglGaQktCQktCS0tLS0tCUY1NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU1CQkJa2Y1NQlzdHIJRmoJLQkJLQktLS0tLQlGNTUgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NgkJCWtmNTYJc3RyCUZrCS0JCS0JLS0tLS0JRjU2IGZ1bmN0aW9uIGtleQorI2tleV9mNTcJCQlrZjU3CXN0cglGbAktCQktCS0tLS0tCUY1NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU4CQkJa2Y1OAlzdHIJRm0JLQkJLQktLS0tLQlGNTggZnVuY3Rpb24ga2V5Cisja2V5X2Y1OQkJCWtmNTkJc3RyCUZuCS0JCS0JLS0tLS0JRjU5IGZ1bmN0aW9uIGtleQorI2tleV9mNjAJCQlrZjYwCXN0cglGbwktCQktCS0tLS0tCUY2MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjYxCQkJa2Y2MQlzdHIJRnAJLQkJLQktLS0tLQlGNjEgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MgkJCWtmNjIJc3RyCUZxCS0JCS0JLS0tLS0JRjYyIGZ1bmN0aW9uIGtleQorI2tleV9mNjMJCQlrZjYzCXN0cglGcgktCQktCS0tLS0tCUY2MyBmdW5jdGlvbiBrZXkKKyMKKyMgSUJNIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIElCTQorIyB0ZXJtaW5mbyBmaWxlcy4KKyMKKyMgVGhlIHBsYWNlcyBpbiB0aGUgYm94WzEyXSBjYXBhYmlsaXRpZXMgY29ycmVzcG9uZCB0byBhY3NjIGNoYXJhY3RlcnMsIGhlcmUgaXMKKyMgdGhlIG1hcHBpbmc6CisjCisjCWJveDFbMF0gID0gQUNTX1VMQ09STkVSCisjCWJveDFbMV0gID0gQUNTX0hMSU5FCQorIwlib3gxWzJdICA9IEFDU19VUkNPUk5FUgorIwlib3gxWzNdICA9IEFDU19WTElORQorIwlib3gxWzRdICA9IEFDU19MUkNPUk5FUgorIwlib3gxWzVdICA9IEFDU19MTENPUk5FUgorIwlib3gxWzZdICA9IEFDU19UVEVFCisjCWJveDFbN10gID0gQUNTX1JURUUKKyMJYm94MVs4XSAgPSBBQ1NfQlRFRQorIwlib3gxWzldICA9IEFDU19MVEVFCisjCWJveDFbMTBdID0gQUNTX1BMVVMKKyMKKyMgVGhlIGJveDIgY2hhcmFjdGVycyBhcmUgdGhlIGRvdWJsZS1saW5lIHZlcnNpb25zIG9mIHRoZXNlIGZvcm1zIGdyYXBoaWNzLgorIworYm94X2NoYXJzXzEJCQlib3gxCXN0cglieAktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHByaW1hcnkgc2V0CisjYm94X2NoYXJzXzIJCQlib3gyCXN0cglieQktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHNlY29uZGFyeSBzZXQKKyNib3hfYXR0cl8xCQkJYmF0dDEJc3RyCUJ4CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MQorI2JveF9hdHRyXzIJCQliYXR0MglzdHIJQnkJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gyCisjY29sb3JfYmdfMAkJCWNvbGIwCXN0cglkMAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMAorI2NvbG9yX2JnXzEJCQljb2xiMQlzdHIJZDEJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDEKKyNjb2xvcl9iZ18yCQkJY29sYjIJc3RyCWQyCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAyCisjY29sb3JfYmdfMwkJCWNvbGIzCXN0cglkMwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMworI2NvbG9yX2JnXzQJCQljb2xiNAlzdHIJZDQJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDQKKyNjb2xvcl9iZ181CQkJY29sYjUJc3RyCWQ1CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA1CisjY29sb3JfYmdfNgkJCWNvbGI2CXN0cglkNgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNgorI2NvbG9yX2JnXzcJCQljb2xiNwlzdHIJZDcJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDcKKyNjb2xvcl9mZ18wCQkJY29sZjAJc3RyCWMwCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAwCisjY29sb3JfZmdfMQkJCWNvbGYxCXN0cgljMQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMQorI2NvbG9yX2ZnXzIJCQljb2xmMglzdHIJYzIJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDIKKyNjb2xvcl9mZ18zCQkJY29sZjMJc3RyCWMzCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAzCisjY29sb3JfZmdfNAkJCWNvbGY0CXN0cgljNAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNAorI2NvbG9yX2ZnXzUJCQljb2xmNQlzdHIJYzUJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDUKKyNjb2xvcl9mZ182CQkJY29sZjYJc3RyCWM2CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA2CisjY29sb3JfZmdfNwkJCWNvbGY3CXN0cgljNwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNworI2ZvbnRfMAkJCQlmb250MAlzdHIJZjAJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAwCisjZm9udF8xCQkJCWZvbnQxCXN0cglmMQktCQktCS0tLS0tCXNlbGVjdCBmb250IDEKKyNmb250XzIJCQkJZm9udDIJc3RyCWYyCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMgorI2ZvbnRfMwkJCQlmb250MwlzdHIJZjMJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAzCisjZm9udF80CQkJCWZvbnQ0CXN0cglmNAktCQktCS0tLS1LCXNlbGVjdCBmb250IDQKKyNmb250XzUJCQkJZm9udDUJc3RyCWY1CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNQorI2ZvbnRfNgkJCQlmb250NglzdHIJZjYJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA2CisjZm9udF83CQkJCWZvbnQ3CXN0cglmNwktCQktCS0tLS1LCXNlbGVjdCBmb250IDcKKyNrZXlfYmFja190YWIJCQlrYnRhYglzdHIJazAJLQkJLQktLS0tLQliYWNrdGFiIGtleQorI2tleV9kbwkJCQlrZG8Jc3RyCWtpCS0JCS0JLS0tLUsJZG8gcmVxdWVzdCBrZXkKKyNrZXlfY29tbWFuZAkJCWtjbWQJc3RyCWtkCS0JCS0JLS0tLUsJY29tbWFuZC1yZXF1ZXN0IGtleQorI2tleV9jb21tYW5kX3BhbmUJCWtjcG4Jc3RyCWtXCS0JCS0JLS0tLUsJY29tbWFuZC1wYW5lIGtleQorI2tleV9lbmQJCQlrZW5kCXN0cglrdwktCQktCS0tLS0tCWVuZCBrZXkKKyNrZXlfaGVscAkJCWtobHAJc3RyCWtxCS0JCS0JLS0tLS0JaGVscCBrZXkKKyNrZXlfbmV3bGluZQkJCWtubAlzdHIJbmwJLQkJLQktLS0tSwluZXdsaW5lIGtleQorI2tleV9uZXh0X3BhbmUJCQlrbnBuCXN0cglrdgktCQktCS0tLS1LCW5leHQtcGFuZSBrZXkKKyNrZXlfcHJldl9jbWQJCQlrcHBuCXN0cglrcAktCQktCS0tLS1LCXByZXZpb3VzLWNvbW1hbmQga2V5Cisja2V5X3ByZXZfcGFuZQkJCWtwcG4Jc3RyCWtWCS0JCS0JLS0tLUsJcHJldmlvdXMtcGFuZSBrZXkKKyNrZXlfcXVpdAkJCWtxdWl0CXN0cglrUQktCQktCS0tLS1LCXF1aXQga2V5Cisja2V5X3NlbGVjdAkJCWtzZWwJc3RyCWtVCS0JCS0JLS0tLS0Jc2VsZWN0IGtleQorI2tleV9zY3JvbGxfbGVmdAkJa3NjbAlzdHIJa3oJLQkJLQktLS0tSwlzY3JvbGwgbGVmdAorI2tleV9zY3JvbGxfcmlnaHQJCWtzY3IJc3RyCWtaCS0JCS0JLS0tLUsJc2Nyb2xsIHJpZ2h0Cisja2V5X3RhYgkJCWt0YWIJc3RyCWtvCS0JCS0JLS0tLUsJdGFiIGtleQorI2tleV9zbWFwX2luMQkJCWttcGYxCXN0cglLdgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIGlucHV0Cisja2V5X3NtYXBfb3V0MQkJCWttcHQxCXN0cglLVgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIG91dHB1dAorI2tleV9zbWFwX2luMgkJCWttcGYyCXN0cglLdwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAyIGlucHV0Cisja2V5X3NtYXBfb3V0MgkJCWttcHQyCXN0cglLVwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAyIG91dHB1dAorI2tleV9zbWFwX2luMwkJCWttcGYzCXN0cglLeAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIGlucHV0Cisja2V5X3NtYXBfb3V0MwkJCWttcHQzCXN0cglLWAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIG91dHB1dAorI2tleV9zbWFwX2luNAkJCWttcGY0CXN0cglLeQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IGlucHV0Cisja2V5X3NtYXBfb3V0NAkJCWttcHQ0CXN0cglLWQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IG91dHB1dAorI2tleV9zbWFwX2luNQkJCWttcGY1CXN0cglLegktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA1IGlucHV0Cisja2V5X3NtYXBfb3V0NQkJCWttcHQ1CXN0cglLWgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA1IG91dHB1dAorI2FwcGxfZGVmaW5lZF9zdHIJCWFwc3RyCXN0cgl6YQktCQktCS0tLS1LCWFwcGxpY2F0aW9uLWRlZmluZWQgc3RyaW5nCisjIFRoZSBrZXlfc21hcF9pbls2Nzg5XSBhbmQga2V5X3NtYXBfb3V0WzY3ODldIGNhcGFiaWxpdGllcyBhcmVuJ3QgZGVzY3JpYmVkIGluCisjIHRoZSBJQk0gbWFudWFsIHBhZ2VzLCBzbyB0aGUgY2FwIG5hbWUgc3RyaW5ncyBhcmUgZ3Vlc3Nlcy4gIFRoZSB0ZXJtaW5mbworIyBuYW1lcyBhcmUgYWxtb3N0IGNlcnRhaW5seSByaWdodCwgdGhlIHRlcm1jYXAgb25lcyBhbG1vc3QgY2VydGFpbmx5IHdyb25nLgorI2tleV9zbWFwX2luNgkJCWttcGY2CXN0cglrIQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IGlucHV0Cisja2V5X3NtYXBfb3V0NgkJCWttcHQ2CXN0cglLQAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IG91dHB1dAorI2tleV9zbWFwX2luNwkJCWttcGY3CXN0cglrIwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA3IGlucHV0Cisja2V5X3NtYXBfb3V0NwkJCWttcHQ3CXN0cglLJAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA3IG91dHB1dAorI2tleV9zbWFwX2luOAkJCWttcGY4CXN0cglrJQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IGlucHV0Cisja2V5X3NtYXBfb3V0OAkJCWttcHQ4CXN0cglLXgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IG91dHB1dAorI2tleV9zbWFwX2luOQkJCWttcGY5CXN0cglrJgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IGlucHV0Cisja2V5X3NtYXBfb3V0OQkJCWttcHQ5CXN0cglLKgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IG91dHB1dAorIyBVbmRvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIGVuZCBoZXJlCisja2V5X3NmMQkJCWtzZjEJc3RyCVMxCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMQorI2tleV9zZjIJCQlrc2YyCXN0cglTMgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDIKKyNrZXlfc2YzCQkJa3NmMwlzdHIJUzMJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAzCisja2V5X3NmNAkJCWtzZjQJc3RyCVM0CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNAorI2tleV9zZjUJCQlrc2Y1CXN0cglTNQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDUKKyNrZXlfc2Y2CQkJa3NmNglzdHIJUzYJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA2Cisja2V5X3NmNwkJCWtzZjcJc3RyCVM3CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNworI2tleV9zZjgJCQlrc2Y4CXN0cglTOAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDgKKyNrZXlfc2Y5CQkJa3NmOQlzdHIJUzkJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA5Cisja2V5X3NmMTAJCQlrc2YxMAlzdHIJU0EJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxMAorIyBBSVggdmVyc2lvbiAzIGRvY3VtZW50cyBkaWZmZXJlbnQgY29kZXMgZm9yIEYxMSwgRjEyIGFuZCBkb2VzIG5vdCBtZW50aW9uCisjIEYxMy1GNjQuICBBSVggdmVyc2lvbiA0IHVzZXMgdGhlIHNhbWUgbmFtaW5nIGZvciBGMC1GNjMgYXMgYWJvdmUuCisja2V5X2YxMQkJCWtmMTEJc3RyCWs8CS0JCS0JLS0tLS0JZnVuY3Rpb24ga2V5IDExCisja2V5X2YxMgkJCWtmMTIJc3RyCWs+CS0JCS0JLS0tLS0JZnVuY3Rpb24ga2V5IDEyCisjIFVuZG9jdW1lbnRlZCBjYXBhYmlsaXRpZXMgZW5kIGhlcmUuCisja2V5X2FjdGlvbgkJCWthY3QJc3RyCWtKCS0JCS0JLS0tLUsJc2VudCBieSBhY3Rpb24ga2V5CisjIFRoZSBJQk0gZG9jcyBzYXkgdGhlc2UgY2FwYWJpbGl0aWVzIGFyZSBmb3IgdGFibGUtZHJhd2luZywgYW5kIGFyZQorIyB2YWxpZCBvbmx5IGZvciBhaXh0ZXJtIGRlc2NyaXB0aW9ucy4KKyNlbnRlcl90b3BsaW5lX21vZGUJCXRvcGwJc3RyCXRwCS0JCS0JLS0tLUsJc3RhcnQgdG9wLWxpbmUgbW9kZQorI2VudGVyX2JvdHRvbV9tb2RlCQlidG1sCXN0cglibQktCQktCS0tLS1LCXN0YXJ0IGJvdHRvbS1saW5lIG1vZGUKKyNlbnRlcl9ydmVydF9tb2RlCQlydmVydAlzdHIJcnYJLQkJLQktLS0tSwlzdGFydCByaWdodC12ZXJ0aWNhbCBtb2RlCisjZW50ZXJfbHZlcnRfbW9kZQkJbHZlcnQJc3RyCWx2CS0JCS0JLS0tLUsJc3RhcnQgbGVmdC12ZXJ0aWNhbCBtb2RlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBTElBUyBERUNMQVJBVElPTlMKKyMKKyMgSGVyZSB3ZSBzZXQgdXAgYWxpYXNlcyBmb3IgdHJhbnNsYXRpbmcgZXh0ZW5zaW9ucyBpbnRvIHN0YW5kYXJkIHRlcm1pbmZvLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWNhcCBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQlNEIGFsaWFzZXM6CisjCisjIFRoaXMgaXMgYSBjb21tb24gZXJyb3IgaW4gbWFueSB0ZXJtY2FwIGZpbGVzLiAgV2UnbGwgZ2V0IG5vdGlmaWVkIGR1cmluZworIyB0cmFuc2xhdGlvbiB3aGVuIHRoaXMgKG9yIGFueSBvdGhlciBhbGlhcykgZmlyZXMuCisjCitjYXBhbGlhcwlzYglzcglCU0QJc2Nyb2xsIHRleHQgZG93bgorIworIyBBVCZUIGV4dGVuc2lvbnM6CisjCisjIFRoZSBvbGQgQVQmVCA1NDEwLCA1NDIwLCA1NDI1LCBwYzYzMDBwbHVzLCA2MTAsIGFuZCBzNCBlbnRyaWVzIHVzZWQgYSBzZXQgb2YKKyMgbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzLiAgSXRzIHNpZ25hdHVyZSBpcyB0aGUgS00gY2FwYWJpbGl0eSwgdXNlZCB0byBuYW1lCisjIHNvbWUgc29ydCBvZiBrZXltYXAgZmlsZS4gIEVFLCBCTywgQ0ksIENWLCBYUywgRFMsIEZMIGFuZCBGRSBhcmUgaW4gdGhpcworIyBzZXQuICBDb21tZW50cyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBhIGxpdHRsZSBjcm9zcy1jaGVja2luZyB3aXRoIG90aGVyIEFUJlQKKyMgZG9jdW1lbnRhdGlvbiwgc2VlbSB0byBlc3RhYmxpc2ggdGhlIGZvbGxvd2luZyBtYXBwaW5nczoKKyMKK2NhcGFsaWFzCUJPCW1yCUFUJlQJZW50ZXJfcmV2ZXJzZV9tb2RlCitjYXBhbGlhcwlDSQl2aQlBVCZUCWN1cnNvcl9pbnZpc2libGUKK2NhcGFsaWFzCUNWCXZlCUFUJlQJY3Vyc29yX25vcm1hbAorY2FwYWxpYXMJRFMJbWgJQVQmVAllbnRlcl9kaW1fbW9kZQorI2NhcGFsaWFzCUVFCW1lCUFUJlQJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUZFCUxGCUFUJlQJbGFiZWxfb24KK2NhcGFsaWFzCUZMCUxPCUFUJlQJbGFiZWxfb2ZmCitjYXBhbGlhcwlYUwltawlBVCZUCWVudGVyX3NlY3VyZV9tb2RlCisjCisjIFdlIGNvbW1lbnQgb3V0IEVFIGJlY2F1c2UgdGhlIGNvbmZsaWN0aW5nIFhFTklYIEVFIGlzIG1vcmUgY29tbW9uIGluIAorIyBvbGQgZW50cmllcy4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgVGhlc2UgYXJlIHRoZSBvbmVzIHdlIGtub3cgaG93IHRvIHRyYW5zbGF0ZSBkaXJlY3RseToKKyMKK2NhcGFsaWFzCUVFCW1oCVhFTklYCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlHRQlhZQlYRU5JWAlleGl0X2FsdF9jaGFyc2V0X21vZGUKK2NhcGFsaWFzCUdTCWFzCVhFTklYCWVudGVyX2FsdF9jaGFyc2V0X21vZGUKK2NhcGFsaWFzCUNGCXZpCVhFTklYCWN1cnNvcl9pbnZpcworY2FwYWxpYXMJQ08JdmUJWEVOSVgJY3Vyc29yX25vcm1hbAorY2FwYWxpYXMJRU4JQDcJWEVOSVgJa2V5X2VuZAorY2FwYWxpYXMJSE0Ja2gJWEVOSVgJa2V5X2hvbWUKK2NhcGFsaWFzCUxECWtMCVhFTklYCWtleV9kbAorY2FwYWxpYXMJUEQJa04JWEVOSVgJa2V5X25wYWdlCitjYXBhbGlhcwlQTglwbwlYRU5JWAlwcnRyX29mZgorY2FwYWxpYXMJUFMJcGYJWEVOSVgJcHJ0cl9vbgorY2FwYWxpYXMJUFUJa1AJWEVOSVgJa2V5X3BwYWdlCitjYXBhbGlhcwlSVAlAOAlYRU5JWAlrZW50CitjYXBhbGlhcwlVUAlrdQlYRU5JWAlrY3V1MQorY2FwYWxpYXMJRzYJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVUxDT1JORVIKK2NhcGFsaWFzCUc3CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xMQ09STkVSCitjYXBhbGlhcwlHNQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VUkNPUk5FUgorY2FwYWxpYXMJRzgJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFJDT1JORVIKK2NhcGFsaWFzCUdyCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xURUUKK2NhcGFsaWFzCUdyCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1JURUUKK2NhcGFsaWFzCUd1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0JURUUKK2NhcGFsaWFzCUdkCUlHTk9SRQlYRU5JWAlkb3VibGUgQUNTX1RURUUKK2NhcGFsaWFzCUdoCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0hMSU5FCitjYXBhbGlhcwlHdglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19WTElORQorY2FwYWxpYXMJR2MJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUExVUworY2FwYWxpYXMJR0cJSUdOT1JFCVhFTklYCWFjcy1nbGl0Y2gKKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlrcQklMQlJQk0Ja2V5X2hlbHAKKyMKKyMgSXJpcyBleHRlbnNpb25zOgorIworY2FwYWxpYXMJSFMJbWgJSVJJUwllbnRlcl9kaW1fbW9kZQorIworIyBUZWt0cm9uaXggZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUtBCWs7CVRlawlrZXlfZjEwCitjYXBhbGlhcwlLQglGMQlUZWsJa2V5X2YxMQorY2FwYWxpYXMJS0MJRjIJVGVrCWtleV9mMTIKK2NhcGFsaWFzCUtECUYzCVRlawlrZXlfZjEzCitjYXBhbGlhcwlLRQlGNAlUZWsJa2V5X2YxNAorY2FwYWxpYXMJS0YJRjUJVGVrCWtleV9mMTUKK2NhcGFsaWFzCUJDCVNiCVRlawlzZXRfYmFja2dyb3VuZAorY2FwYWxpYXMJRkMJU2YJVGVrCXNldF9mb3JlZ3JvdW5kCisjCisjIFRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmc6CisjCisjCVhFTklYCVhFTklYIHZhcmlhYmxlIG5hbWUJbmFtZSBjbGFzaCB3aXRoIHRlcm1pbmZvPworIwktLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJQ0wJa2V5X2NoYXJfbGVmdAorIwlDUglrZXlfY2hhcl9yaWdodAorIwlDVwlrZXlfY2hhbmdlX3dpbmRvdworIwlIUAk/PworIwlMRglrZXlfbGluZWZlZWQgCQlsYWJlbF9vZmYKKyMJTlUJa2V5X25leHRfdW5sb2NrZWRfY2VsbAorIwlQTAk/PworIwlQUgk/PworIwlSQwlrZXlfcmVjYWxjCQlyZW1vdmVfY2xvY2sKKyMJUkYJa2V5X3RvZ2dsZV9yZWYJCXJlcV9mb3JfaW5wdXQKKyMJV0wJa2V5X3dvcmRfbGVmdAorIwlXUglrZXlfd29yZF9yaWdodAorIworIyBJZiB5b3Uga25vdyB3aGF0IGFueSBvZiB0aGUgcXVlc3Rpb24tbWFya2VkIG9uZXMgbWVhbiwgcGxlYXNlIHRlbGwgdXMuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1pbmZvIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIElCTSBleHRlbnNpb25zOgorIworaW5mb2FsaWFzCWZvbnQwCXMwZHMJSUJNCXNldDBfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQxCXMxZHMJSUJNCXNldDFfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQyCXMyZHMJSUJNCXNldDJfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQzCXMzZHMJSUJNCXNldDNfZGVzX3NlcQoraW5mb2FsaWFzCWtidGFiCWtjYnQJSUJNCWtleV9iYWNrdGFiCitpbmZvYWxpYXMJa3NlbAlrc2x0CUlCTQlrZXlfc2VsZWN0CisjCisjIFNvbWUgb3RoZXJzIGFyZSBpZGVudGljYWwgdG8gU1ZyNC9YUEc0IGNhcGFiaWxpdGllcywgaW4gcGFydGljdWxhcjoKKyMga2NtZCwga2VuZCwga2hscCwgYW5kIGtmMTEuLi5rZjYzLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworIyBMb2NhbCBWYXJpYWJsZXM6CisjIGNhc2UtZm9sZC1zZWFyY2g6bmlsCisjIHRydW5jYXRlLWxpbmVzOnQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9DYXBzLmtleXMgYi9pbmNsdWRlL0NhcHMua2V5cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQxYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9DYXBzLmtleXMKQEAgLTAsMCArMSwxMzU0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIERpY2tleQorIyAgICBhbmQ6IElseWEgWmFraGFyZXZpY2gKKyMKKyMgJElkOiBDYXBzLmtleXMsdiAxLjMgMjAwNi8wNS8yNyAxNTozMzowNCB0b20gRXhwICQKKyMKKyMgVGhpcyBpcyBhbiBhZGFwdGF0aW9uIG9mIG5jdXJzZXMnIHRlcm1jYXAvdGVybWluZm8gY2FwYWJpbGl0eSB0YWJsZSwgd2hpY2gKKyMgaXMgaWxsdXN0cmF0ZXMgYW4gZXhwZXJpbWVudGFsIGV4dGVuc2lvbiB0byBkZXNjcmliZSBhbHQtLCBzaGlmdC0gYW5kCisjIGNvbnRyb2wtbW9kaWZpZXJzIGFwcGxpZWQgdG8gZnVuY3Rpb24gYW5kIG5vcm1hbCBrZXlzLCBhcyBkb25lIG9uIElCTSBwYydzLgorIworIyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgaW5pdGlhbGl6ZXJzIGZvciB0YWJsZXMgdGhhdCBkcml2ZSB0aWMsCisjIGluZm9jbXAsIGFuZCB0aGUgbGlicmFyeSBjb21waWxhdGlvbiBjb2RlIHVzZWQgdG8gc3VwcG9ydCB0aGUgdGVybWNhcCAKKyMgY29tcGF0aWJpbGl0eSBoYWNrLiAgSXQgaXMgYWxzbyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0YWJ1bGFyIHBvcnRpb24gb2YgdGhlCisjIHRlcm1pbmZvKDUpIG1hbiBwYWdlOyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgIyUnIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBiZWNvbWUKKyMgdGhlIHRlcm1pbmZvIHRhYmxlLgorIworIyBUaGlzIGZpbGUgaGFzIHRocmVlIG1ham9yIHNlY3Rpb25zOyBhIHN0YW5kYXJkLWNhcGFiaWxpdGllcyB0YWJsZSwgdHdvCisjIGV4dGVuc2lvbi1jYXBhYmlsaXR5IHRhYmxlcywgYW5kIGEgc2VjdGlvbiBvZiBhbGlhc2VzIGRlY2xhcmF0aW9ucy4KKyMgVGhlIGZpcnN0IHR3byBoYXZlIHRoZSBzYW1lIGZvcm1hdCwgYXMgZm9sbG93czoKKyMKKyMgRklMRSBGT1JNQVQKKyMKKyMgQ29sdW1uIDE6IHRlcm1pbmZvIHZhcmlhYmxlIG5hbWUKKyMgQ29sdW1uIDI6IHRlcm1pbmZvIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gMzogY2FwYWJpbGl0eSB0eXBlIChib29sZWFuLCBudW1lcmljLCBvciBzdHJpbmcpCisjIENvbHVtbiA0OiB0ZXJtY2FwIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gNTogS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDY6IHZhbHVlIGZvciBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNzogTGVhZCB3aXRoIGBZJyBpZiBjYXBhYmlsaXR5IHNob3VsZCBiZSBlbWl0dGVkIGluIHRlcm1jYXAKKyMgICAgICAgICAgIHRyYW5zbGF0aW9ucywgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gODogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbgorIworIyBUaGUgY29kZXMgZm9sbG93aW5nIFtZLV0gaW4gY29sdW1uIDcgZGVzY3JpYmUgdGhlIHZlcnNpb25zIG9mIHRlcm1jYXAgd2hpY2gKKyMgdXNlIHRoZSBnaXZlbiBjYXBhYmlsaXR5LiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgY3Vyc2VzIGxpYnJhcnkKKyMgcHJvcGVyOyByYXRoZXIsIGl0J3MgdGhlcmUgdG8gaGVscCB0aGUgdGVybWluZm8gbWFpbnRhaW5lciBhdm9pZCBlbWl0dGluZworIyB0ZXJtY2FwIGVudHJ5IHRyYW5zbGF0aW9ucyB0aGF0IGFyZSBtb3JlIHRoYW4gMTAyMyBieXRlcyBsb25nIChhbmQgdGFuayBhCisjIGxvdCBvZiBvbGQgdGVybWNhcC11c2luZyBwcm9ncmFtcykuICBUaGUgY29kZXMgcmVhZCBhcyBmb2xsb3dzOgorIwlCID0gbWVudGlvbmVkIGluIHRoZSBCU0QgbWFuIHBhZ2UgZm9yIDQuNEJTRCBjdXJzZXMKKyMJQyA9IHVzZWQgYnkgdGhlIDQuNEJTRCBjdXJzZXMgbGlicmFyeQorIwlHID0gbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBHTlUgdGVybWNhcAorIwlFID0gdXNlZCBieSBHTlUgRW1hY3MKKyMJSyA9IHJlbW92ZSB0aGlzIHRlcm1pbmZvIGNhcGFiaWxpdHkgd2hlbiB0cmFuc2xhdGluZyB0byBzdGFuZGFyZCBmb3JtYXQKKyMgVGhlIGltcG9ydGFudCBjb2RlcyBhcmUgQyBhbmQgRS4gIEEgY2FwIHdpdGggQyBvciBFIHNob3VsZCBiZSBwcmVzZXJ2ZWQgaW4KKyMgdHJhbnNsYXRpb24gaWYgcG9zc2libGUuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHByZXNlcnZpbmcgYWxsIHN1Y2ggY2FwcyBtYXkKKyMgbGVhZCB0byBzb21lIHRlcm1jYXAgdHJhbnNsYXRpb25zIGJlaW5nIHRvbyBsb25nLiAgVGhlIHRlcm1jYXAgbWFpbnRhaW5lcgorIyBoYXMgYSBiaXQgb2YgYSBqdWdnbGluZyBhY3QgdG8gZG8uLi5wb3RlbnRpYWwgcHJvYmxlbSBjYXNlcyBhcmUgbWFya2VkIHdpdGgKKyMgYW4gYXN0ZXJpc2sgKCopLgorIworIyBUaGUgYWxpYXNlcyBzZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyMKKyMgQ29sdW1uIDE6IGVpdGhlciBgY2FwYWxpYXMnIG9yIGBpbmZvYWxpYXMnCisjIENvbHVtbiAyOiBuYW1lIHRvIGJlIGFsaWFzZWQKKyMgQ29sdW1uIDM6IHdoYXQgbmFtZSBpdCBzaG91bGQgdHJhbnNsYXRlIHRvLiAgVGhlIG5hbWUgSUdOT1JFIG1lYW5zIGl0CisjICAgICAgICAgICBzaG91bGQgYmUgZGlzY2FyZGVkIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCisjIENvbHVtbiA0OiBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2V0ICh1c2VkIGZvciBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzKQorIyBDb2x1bW4gNTogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbiAodXN1YWxseSBhbiBhc3NvY2lhdGVkIHRlcm1pbmZvIHZhcmlhYmxlKQorIworIyBIQU5ETElORyBURVJNQ0FQIEFORCBURVJNSU5GTyBFWFRFTlNJT05TCisjCisjIFRoZXJlIGFyZSBiYXNpY2FsbHkgZml2ZSBkaWZmZXJlbnQgd2F5cyB0byBoYW5kbGUgdGVybWNhcCBhbmQgdGVybWluZm8KKyMgZXh0ZW5zaW9uczoKKyMKKyMgMS4gRG9uJ3QgbGlzdCB0aGUgY2FwbmFtZSBoZXJlLCBvciBsaXN0IGl0IGJ1dCBjb21tZW50IGl0IG91dCAodGhlIGxhdHRlcgorIyBpcyBwcmVmZXJhYmxlOyBzb21lb25lIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGl0IGluIHRoZSBmdXR1cmUpLiAgSWYgeW91IGRvCisjIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmtub3duIGFuZCByYWlzZSBhIHdhcm5pbmcgZnJvbQorIyB0aGUgY29tcGlsZXIuCisjCisjIDIuIEFsaWFzIGl0LiAgVGhpcyBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgY2FwYWJpbGl0eSBoYXMgdGhlIHNhbWUgbWVhbmluZworIyBhcyBhbiBhbHJlYWR5LXN1cHBvcnRlZCBvbmUuICBUaGUgY29tcGlsZXIgd2lsbCBoYW5kbGUgYWxpYXNpbmcsIGVtaXR0aW5nCisjIGFuIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB3aGVuZXZlciBhbiBhbGlhcyBmaXJlcy4KKyMKKyMgMy4gTGlzdCBpdCBpbiB0aGUgc3RhbmRhcmQgdGFibGUuICBZb3UgYWxtb3N0IGNlcnRhaW5seSBkbyAqbm90KiB3YW50CisjIHRvIGRvIHRoaXMgLS0gdGhlIGNhcGFiaWxpdGllcyBpbiB0aGF0IG9uZSwgYW5kIHRoZWlyIG9yZGVyLCBoYXZlIGJlZW4KKyMgY2FyZWZ1bGx5IGNob3NlbiB0byBiZSBTVnI0LWJpbmFyeS1jb21wYXRpYmxlIHdoZW4gdGhleSdyZSB3cml0dGVuIG91dAorIyBhcyBhIHRlcm1pbmZvIG9iamVjdCwgYW5kIGJyZWFraW5nIHRoaXMgd291bGQgYmUgYmFkLiAgSXQncyB1cCB0aGUgbmN1cnNlcworIyBsaWJyYXJ5IHdoYXQgdG8gZG8gd2l0aCB0aGUgdGVybWluZm8gZGF0YSBhZnRlciBpdCdzIHJlYWQgaW4uCisjCisjIDQuIExpc3QgaXQgaW4gdGhlIGFsaWFzZXMgdGFibGUgd2l0aCBhbiBJR05PUkUgdGFyZ2V0IGZpZWxkLiAgSWYgeW91CisjIGRvIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZCBvbiBpbnB1dCAodGhvdWdoIHRoZSB1c2VyIHdpbGwKKyMgZ2V0IGEgd2FybmluZyBtZXNzYWdlIGFib3V0IGl0KS4KKyMKKyMgNS4gTGlzdCBpdCBpbiB0aGUgZXh0ZW5zaW9ucyB0YWJsZS4gSWYgeW91IGRvIHRoaXMsIHRoZSBjb21waWxlciB3aWxsCisjIHNpbGVudGx5IGFjY2VwdCB0aGUgY2FwYWJpbGl0eSwgYnV0IHRoZSBjdXJzZXMgbGlicmFyeSBwcm9wZXIgd2lsbCBuZXZlcgorIyBzZWUgaXQgKGJlY2F1c2UgaXQgd29uJ3QgYmUgd3JpdHRlbiBvdXQgYXMgcGFydCBvZiB0aGUgdGVybWluZm8gb2JqZWN0CisjIGZvcm1hdCkuICBJdCdzIHVwIHRvIHlvdSB3aGF0IHlvdSBoYXZlIHRoZSBjb21waWxlciBkbyB3aXRoIGl0LgorIworIyBUaGVyZSBhcmUgdHdvIG9wcG9zaXRlIHJlYXNvbnMgdG8gY2hvb3NlIG9wdGlvbiA1LiAgT25lIGlzIHdoZW4geW91IHdhbnQKKyMgdG8gZWF0IHRoZSBjYXBhYmlsaXR5IHNpbGVudGx5IGFuZCBkaXNjYXJkIGl0IHdoZW4gZG9pbmcgdHJhbnNsYXRpb25zCisjIHRvIHRlcm1pbmZvIHdpdGggdGljIC1JLiAgU29tZSB2ZXJ5IG9sZCBvYnNvbGV0ZSBCU0QgY2FwcyBsaWtlIDprbjogYXJlCisjIGluIHRoaXMgY2xhc3MuICBOb3RoaW5nIHdpbGwgZXZlciB1c2UgdGhlbSBhZ2Fpbi4KKyMKKyMgTW9yZSB1c3VhbGx5LCB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gdHJ5IHRvIGRlZHVjZSBzb21ldGhpbmcgZnJvbSB0aGUKKyMgY2FwYWJpbGl0eSB2YWx1ZSB0aGF0IGl0IGNhbiB1c2UgdG8gdHJhbnNsYXRlIGl0IGludG8geW91ciBvdXRwdXQgZm9ybWF0LgorIyBZb3UnbGwgbmVlZCB0byB3cml0ZSBjdXN0b20gY29kZSwgcHJvYmFibHkgaW4gcG9zdHByb2Nlc3NfdGVybWNhcCgpIG9yCisjIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCksIHRvIGhhbmRsZSB0aGUgdHJhbnNsYXRpb24uCisjCisjIENPTlRST0xMSU5HIEVOVFJZIExFTkdUSCAKKyMKKyMgTm90ZXMgb24gc3BlY2lmaWMgZWxpc2lvbnMgbWFkZSB0byBmaXQgdHJhbnNsYXRpb25zIHdpdGhpbiAxMDIzIGJ5dGVzOgorIworIyBNYWNoaW5lcyB3aXRoIElCTSBQQy1saWtlIGtleWJvYXJkcyB3YW50IHRvIGJlIGFibGUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcKKyMga2V5czoga2V5X25wYWdlLCBrZXlfcHBhZ2UsIGtleV9ob21lLCBrZXlfbGwgKHdoaWNoIGlzIHVzZWQgZm9yIGluIHRlcm1jYXAtCisjIG9ubHkgZW52aXJvbm1lbnRzIGZvciBFbmQgb3IgSG9tZS1Eb3duKSwga2V5X2RjLCBhbmQga2V5X2ljLiAgVGhpcyBpcyBhbHNvCisjIHRoZSBzZXQgb2Yga2V5cyB0aGUgYGpvZScgZWRpdG9yIHdpbGwgYmUgdXBzZXQgaWYgaXQgY2FuJ3Qgc2VlLiAgU28gZG9uJ3QgCisjIHRyaW0gdGhvc2Ugb3V0IG9mIHRoZSBzZXQgdG8gYmUgdHJhbnNsYXRlZCB0byB0ZXJtY2FwLCBvciB2YXJpb3VzIHVzZXJzIG9mCisjIHRoZSB0ZXJtY2FwIGZpbGUgd2lsbCBiZWNvbWUgaXJhdGUuCisjCisjIEl0IG1pZ2h0IGxvb2sgdGVtcHRpbmcgdG8gbGVhdmUgdGhvc2UgbG9uZyBpbml0IHN0cmluZ3Mgb3V0IG9mIHRyYW5zbGF0aW9ucy4KKyMgV2UgY2FuJ3QgZG8gaXQgKHlldCk7IDQuNEJTRCB0cHV0IGFuZCB0c2V0IHVzZSB0aGVtLgorIworIyBXZSByZXRhaW4gdGhlIHNnciBjYXBhYmlsaXR5IGluIHRyYW5zbGF0aW9uIGluIHNwaXRlIG9mIHRoZSBmYWN0IHRoYXQgbmVpdGhlcgorIyA0LjRCU0Qgbm9yIEdOVSBFbWFjcyB1c2VzIGl0LCBiZWNhdXNlIChhKSBzb21lIGVudHJ5IG5hbWluZyBkaXN0aW5jdGlvbnMgYXJlCisjIGhhcmQgdG8gdW5kZXJzdGFuZCB3aXRob3V0IGl0LCBhbmQgKGIpIHRoZSBlbnRyaWVzIGluIHdoaWNoIGl0IGlzIGxvbmcgdGVuZAorIyB0byBiZSBvbGRlciB0eXBlcyB0aGF0IGRvbid0IHVzZSB1cCBhIGxvdCBvZiBzdHJpbmcgc3BhY2Ugb24gZnVuY3Rpb24ga2V5cy4KKyMgVGhlIHRpYygxKSB0cmFuc2xhdGlvbiBjb2RlIHdpbGwgY29tcGxhaW4gYW5kIGVsaWRlIGl0IGlmIGl0IG1ha2VzIGEgY3JpdGljYWwKKyMgZGlmZmVyZW5jZSAodGhlcmUgaXMgc3BlY2lhbCBjb2RlIGluIHRpYyB0byByZWNvZ25pemUgdGhpcyBzaXR1YXRpb24pLgorIworIyBZZXMsIEJTRCB0c2V0KDEpIHVzZXMgaHBhLiAgV2UgZWxpZGUgaHBhL3ZwYSBhbnl3YXkgYmVjYXVzZSB0aGUgbW90aW9uCisjIG9wdGltaXplciBpbiBCU0QgY3Vyc2VzIGRpZG4ndCB1c2UgdGhlbS4gIFRoaXMgb21pc3Npb24gc2VlbXMgdG8gYmUgdGhlCisjIHNpbmdsZSBtb3N0IGVmZmVjdGl2ZSBvbmUsIGl0IHNob3J0ZW5lZCB0aGUgcmVzb2x2ZWQgbGVuZ3RoIG9mIGFsbCB0aGlydGVlbgorIyBwcm9ibGVtIGVudHJpZXMgaW4gdGhlIDkuOS4wIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvIG1hc3RlciBiZWxvdyBjcml0aWNhbC4KKyMKKyMgSXQgd291bGQgYmUgbmljZSB0byBrZWVwIGYxMSBhbmQgZjEyIGZvciBFbWFjcyB1c2UsIGJ1dCBhIGNvdXBsZSBvZiB0ZXJtY2FwCisjIHRyYW5zbGF0aW9ucyBnbyBiYWNrIG92ZXIgY3JpdGljYWwgaWYgd2UgZG8gdGhpcy4gIEFzIDQuNEJTRCBjdXJzZXMgZmFkZXMKKyMgaW50byBoaXN0b3J5IGFuZCBHTlUgdGVybWNhcCdzIGFwcGxpY2F0aW9uIGJhc2Ugc2hyaW5rcyB0b3dhcmRzIGJlaW5nIEdOVSAKKyMgRW1hY3Mgb25seSwgd2UnbGwgcHJvYmFibHkgZWxpZGUgb3V0IHNvbWUgQlNELW9ubHkgY2FwYWJpbGl0aWVzIGluIG9yZGVyCisjIHRvIGJ1eSBzcGFjZSBmb3Igbm9uLWVzc2VudGlhbHMgRW1hY3MgaXMgc3RpbGwgdXNpbmcuICBDYXBhYmlsaXRpZXMgaGlnaAorIyBvbiB0aGF0IGhpdCBsaXN0OiByYywgc2MsIHVjLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU1RBTkRBUkQgQ0FQQUJJTElUSUVTCisjCisjJVRoZSBmb2xsb3dpbmcgaXMgYSBjb21wbGV0ZSB0YWJsZSBvZiB0aGUgY2FwYWJpbGl0aWVzIGluY2x1ZGVkIGluIGEKKyMldGVybWluZm8gZGVzY3JpcHRpb24gYmxvY2sgYW5kIGF2YWlsYWJsZSB0byB0ZXJtaW5mby11c2luZyBjb2RlLiAgSW4gZWFjaAorIyVsaW5lIG9mIHRoZSB0YWJsZSwKKyMlCisjJVRoZSBcZkJ2YXJpYWJsZVxmUiBpcyB0aGUgbmFtZSBieSB3aGljaCB0aGUgcHJvZ3JhbW1lciAoYXQgdGhlIHRlcm1pbmZvIGxldmVsKQorIyVhY2Nlc3NlcyB0aGUgY2FwYWJpbGl0eS4KKyMlCisjJVRoZSBcZkJjYXBuYW1lXGZSIGlzIHRoZSBzaG9ydCBuYW1lIHVzZWQgaW4gdGhlIHRleHQgb2YgdGhlIGRhdGFiYXNlLAorIyVhbmQgaXMgdXNlZCBieSBhIHBlcnNvbiB1cGRhdGluZyB0aGUgZGF0YWJhc2UuCisjJVdoZW5ldmVyIHBvc3NpYmxlLCBjYXBuYW1lcyBhcmUgY2hvc2VuIHRvIGJlIHRoZSBzYW1lIGFzIG9yIHNpbWlsYXIgdG8KKyMldGhlIEFOU0kgWDMuNjQtMTk3OSBzdGFuZGFyZCAobm93IHN1cGVyc2VkZWQgYnkgRUNNQS00OCwgd2hpY2ggdXNlcyAKKyMlaWRlbnRpY2FsIG9yIHZlcnkgc2ltaWxhciBuYW1lcykuICBTZW1hbnRpY3MgYXJlIGFsc28gaW50ZW5kZWQgdG8gbWF0Y2gKKyMldGhvc2Ugb2YgdGhlIHNwZWNpZmljYXRpb24uCisjJQorIyVUaGUgdGVybWNhcCBjb2RlIGlzIHRoZSBvbGQKKyMlLkIgdGVybWNhcAorIyVjYXBhYmlsaXR5IG5hbWUgKHNvbWUgY2FwYWJpbGl0aWVzIGFyZSBuZXcsIGFuZCBoYXZlIG5hbWVzIHdoaWNoIHRlcm1jYXAKKyMlZGlkIG5vdCBvcmlnaW5hdGUpLgorIyUuUAorIyVDYXBhYmlsaXR5IG5hbWVzIGhhdmUgbm8gaGFyZCBsZW5ndGggbGltaXQsIGJ1dCBhbiBpbmZvcm1hbCBsaW1pdCBvZiA1CisjJWNoYXJhY3RlcnMgaGFzIGJlZW4gYWRvcHRlZCB0byBrZWVwIHRoZW0gc2hvcnQgYW5kIHRvIGFsbG93IHRoZSB0YWJzIGluCisjJXRoZSBzb3VyY2UgZmlsZQorIyUuQiBDYXBzCisjJXRvIGxpbmUgdXAgbmljZWx5LgorIyUKKyMlRmluYWxseSwgdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGF0dGVtcHRzIHRvIGNvbnZleSB0aGUgc2VtYW50aWNzIG9mIHRoZQorIyVjYXBhYmlsaXR5LiAgWW91IG1heSBmaW5kIHNvbWUgY29kZXMgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkOgorIyUuVFAKKyMlKFApCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IGJlIHNwZWNpZmllZAorIyUuVFAKKyMlI1sxLTldCisjJWluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyaW5nIGlzIHBhc3NlZCB0aHJvdWdoIHRwYXJtIHdpdGgKKyMlcGFybXMgYXMgZ2l2ZW4gKCNcZklpXGZQKS4KKyMlLlRQCisjJShQKikKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgdmFyeSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBudW1iZXIgb2YKKyMlbGluZXMgYWZmZWN0ZWQKKyMlLlRQCisjJSgjXGRcZklpXGZQXHUpCisjJWluZGljYXRlcyB0aGUgXGZJaVxmUFx1dGhcZCBwYXJhbWV0ZXIuCisjJQorIyUuUFAKKyMlIFRoZXNlIGFyZSB0aGUgYm9vbGVhbiBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCQm9vbGVhbnMJbmFtZQlDb2RlXGZSCithdXRvX2xlZnRfbWFyZ2luCQlidwlib29sCWJ3CS0JLQlZQi1HLQljdWIxIHdyYXBzIGZyb20gY29sdW1uIDAgdG8gbGFzdCBjb2x1bW4KK2F1dG9fcmlnaHRfbWFyZ2luCQlhbQlib29sCWFtCS0JLQlZQkNHRQl0ZXJtaW5hbCBoYXMgYXV0b21hdGljIG1hcmdpbnMKK25vX2VzY19jdGxjCQkJeHNiCWJvb2wJeGIJLQktCVlCQ0ctCWJlZWhpdmUgKGYxPWVzY2FwZSwgZjI9Y3RybCBDKQorY2VvbF9zdGFuZG91dF9nbGl0Y2gJCXhocAlib29sCXhzCS0JLQlZQkNHRQlzdGFuZG91dCBub3QgZXJhc2VkIGJ5IG92ZXJ3cml0aW5nIChocCkKK2VhdF9uZXdsaW5lX2dsaXRjaAkJeGVubAlib29sCXhuCS0JLQlZQkNHRQluZXdsaW5lIGlnbm9yZWQgYWZ0ZXIgODAgY29scyAoY29uY2VwdCkKK2VyYXNlX292ZXJzdHJpa2UJCWVvCWJvb2wJZW8JLQktCVlCQ0ctCWNhbiBlcmFzZSBvdmVyc3RyaWtlcyB3aXRoIGEgYmxhbmsKK2dlbmVyaWNfdHlwZQkJCWduCWJvb2wJZ24JLQktCVlCLUctCWdlbmVyaWMgbGluZSB0eXBlCitoYXJkX2NvcHkJCQloYwlib29sCWhjCS0JLQlZQkNHLQloYXJkY29weSB0ZXJtaW5hbAoraGFzX21ldGFfa2V5CQkJa20JYm9vbAlrbQktCS0JWUItR0UJSGFzIGEgbWV0YSBrZXkgKGkuZS4sIHNldHMgOHRoLWJpdCkKK2hhc19zdGF0dXNfbGluZQkJCWhzCWJvb2wJaHMJLQktCVlCLUctCWhhcyBleHRyYSBzdGF0dXMgbGluZQoraW5zZXJ0X251bGxfZ2xpdGNoCQlpbglib29sCWluCS0JLQlZQkNHRQlpbnNlcnQgbW9kZSBkaXN0aW5ndWlzaGVzIG51bGxzCittZW1vcnlfYWJvdmUJCQlkYQlib29sCWRhCS0JLQlZQkNHLQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBhYm92ZSB0aGUgc2NyZWVuCittZW1vcnlfYmVsb3cJCQlkYglib29sCWRiCS0JLQlZQi1HRQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBiZWxvdyB0aGUgc2NyZWVuCittb3ZlX2luc2VydF9tb2RlCQltaXIJYm9vbAltaQktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIGluc2VydCBtb2RlCittb3ZlX3N0YW5kb3V0X21vZGUJCW1zZ3IJYm9vbAltcwktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIHN0YW5kb3V0IG1vZGUKK292ZXJfc3RyaWtlCQkJb3MJYm9vbAlvcwktCS0JWUJDRy0JdGVybWluYWwgY2FuIG92ZXJzdHJpa2UKK3N0YXR1c19saW5lX2VzY19vawkJZXNsb2sJYm9vbAllcwktCS0JWUItRy0JZXNjYXBlIGNhbiBiZSB1c2VkIG9uIHRoZSBzdGF0dXMgbGluZQorZGVzdF90YWJzX21hZ2ljX3Ntc28JCXh0CWJvb2wJeHQJLQktCVlCQ0dFCXRhYnMgZGVzdHJ1Y3RpdmUsIG1hZ2ljIHNvIGNoYXIgKHQxMDYxKQordGlsZGVfZ2xpdGNoCQkJaHoJYm9vbAloegktCS0JWUItR0UJY2FuJ3QgcHJpbnQgfidzIChoYXplbHRpbmUpCit0cmFuc3BhcmVudF91bmRlcmxpbmUJCXVsCWJvb2wJdWwJLQktCVlCQ0dFCXVuZGVybGluZSBjaGFyYWN0ZXIgb3ZlcnN0cmlrZXMKK3hvbl94b2ZmCQkJeG9uCWJvb2wJeG8JLQktCVlCLS0tCXRlcm1pbmFsIHVzZXMgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK25lZWRzX3hvbl94b2ZmCQkJbnhvbglib29sCW54CS0JLQktLS0tLQlwYWRkaW5nIHdvbid0IHdvcmssIHhvbi94b2ZmIHJlcXVpcmVkCitwcnRyX3NpbGVudAkJCW1jNWkJYm9vbAk1aQktCS0JLS0tLS0JcHJpbnRlciB3b24ndCBlY2hvIG9uIHNjcmVlbgoraGFyZF9jdXJzb3IJCQljaHRzCWJvb2wJSEMJLQktCS0tLS0tCWN1cnNvciBpcyBoYXJkIHRvIHNlZQorbm9uX3Jldl9ybWN1cAkJCW5ycm1jCWJvb2wJTlIJLQktCS0tLS0tCXNtY3VwIGRvZXMgbm90IHJldmVyc2Ugcm1jdXAKK25vX3BhZF9jaGFyCQkJbnBjCWJvb2wJTlAJLQktCS0tLS0tCXBhZCBjaGFyYWN0ZXIgZG9lcyBub3QgZXhpc3QKK25vbl9kZXN0X3Njcm9sbF9yZWdpb24JCW5kc2NyCWJvb2wJTkQJLQktCS0tLS0tCXNjcm9sbGluZyByZWdpb24gaXMgbm9uLWRlc3RydWN0aXZlCitjYW5fY2hhbmdlCQkJY2NjCWJvb2wJY2MJLQktCS0tLS0tCXRlcm1pbmFsIGNhbiByZS1kZWZpbmUgZXhpc3RpbmcgY29sb3JzCitiYWNrX2NvbG9yX2VyYXNlCQliY2UJYm9vbAl1dAktCS0JLS0tLS0Jc2NyZWVuIGVyYXNlZCB3aXRoIGJhY2tncm91bmQgY29sb3IKK2h1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbglobHMJYm9vbAlobAktCS0JLS0tLS0JdGVybWluYWwgdXNlcyBvbmx5IEhMUyBjb2xvciBub3RhdGlvbiAoVGVrdHJvbml4KQorY29sX2FkZHJfZ2xpdGNoCQkJeGhwYQlib29sCVlBCS0JLQktLS0tLQlvbmx5IHBvc2l0aXZlIG1vdGlvbiBmb3IgaHBhL21ocGEgY2FwcworY3JfY2FuY2Vsc19taWNyb19tb2RlCQljcnhtCWJvb2wJWUIJLQktCS0tLS0tCXVzaW5nIGNyIHR1cm5zIG9mZiBtaWNybyBtb2RlCitoYXNfcHJpbnRfd2hlZWwJCQlkYWlzeQlib29sCVlDCS0JLQktLS0tLQlwcmludGVyIG5lZWRzIG9wZXJhdG9yIHRvIGNoYW5nZSBjaGFyYWN0ZXIgc2V0Cityb3dfYWRkcl9nbGl0Y2gJCQl4dnBhCWJvb2wJWUQJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciB2cGEvbXZwYSBjYXBzCitzZW1pX2F1dG9fcmlnaHRfbWFyZ2luCQlzYW0JYm9vbAlZRQktCS0JLS0tLS0JcHJpbnRpbmcgaW4gbGFzdCBjb2x1bW4gY2F1c2VzIGNyCitjcGlfY2hhbmdlc19yZXMJCQljcGl4CWJvb2wJWUYJLQktCS0tLS0tCWNoYW5naW5nIGNoYXJhY3RlciBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KK2xwaV9jaGFuZ2VzX3JlcwkJCWxwaXgJYm9vbAlZRwktCS0JLS0tLS0JY2hhbmdpbmcgbGluZSBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBudW1lcmljIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorY29sdW1ucwkJCQljb2xzCW51bQljbwktCS0JWUJDR0UJbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBsaW5lCitpbml0X3RhYnMJCQlpdAludW0JaXQJLQktCVlCLUctCXRhYnMgaW5pdGlhbGx5IGV2ZXJ5ICMgc3BhY2VzCitsaW5lcwkJCQlsaW5lcwludW0JbGkJLQktCVlCQ0dFCW51bWJlciBvZiBsaW5lcyBvbiBzY3JlZW4gb3IgcGFnZQorbGluZXNfb2ZfbWVtb3J5CQkJbG0JbnVtCWxtCS0JLQlZQi1HLQlsaW5lcyBvZiBtZW1vcnkgaWYgPiBsaW5lLiAwIG1lYW5zIHZhcmllcworbWFnaWNfY29va2llX2dsaXRjaAkJeG1jCW51bQlzZwktCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rIGNoYXJhY3RlcnMgbGVmdCBieSBzbXNvIG9yIHJtc28KK3BhZGRpbmdfYmF1ZF9yYXRlCQlwYgludW0JcGIJLQktCVlCLUdFCWxvd2VzdCBiYXVkIHJhdGUgd2hlcmUgcGFkZGluZyBuZWVkZWQKK3ZpcnR1YWxfdGVybWluYWwJCXZ0CW51bQl2dAktCS0JWUItLS0JdmlydHVhbCB0ZXJtaW5hbCBudW1iZXIgKENCL3VuaXgpCit3aWR0aF9zdGF0dXNfbGluZQkJd3NsCW51bQl3cwktCS0JWUItRy0JbnVtYmVyIG9mIGNvbHVtbnMgaW4gc3RhdHVzIGxpbmUKK251bV9sYWJlbHMJCQlubGFiCW51bQlObAktCS0JLS0tLS0JbnVtYmVyIG9mIGxhYmVscyBvbiBzY3JlZW4KK2xhYmVsX2hlaWdodAkJCWxoCW51bQlsaAktCS0JLS0tLS0Jcm93cyBpbiBlYWNoIGxhYmVsCitsYWJlbF93aWR0aAkJCWx3CW51bQlsdwktCS0JLS0tLS0JY29sdW1ucyBpbiBlYWNoIGxhYmVsCittYXhfYXR0cmlidXRlcwkJCW1hCW51bQltYQktCS0JWUJDLS0JbWF4aW11bSBjb21iaW5lZCBhdHRyaWJ1dGVzIHRlcm1pbmFsIGNhbiBoYW5kbGUKK21heGltdW1fd2luZG93cwkJCXdudW0JbnVtCU1XCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBkZWZpbmVhYmxlIHdpbmRvd3MKKyMgVGhlc2UgY2FtZSBpbiB3aXRoIFNWcjQncyBjb2xvciBzdXBwb3J0CittYXhfY29sb3JzCQkJY29sb3JzCW51bQlDbwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIG9uIHNjcmVlbgorbWF4X3BhaXJzCQkJcGFpcnMJbnVtCXBhCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvci1wYWlycyBvbiB0aGUgc2NyZWVuCitub19jb2xvcl92aWRlbwkJCW5jdgludW0JTkMJLQktCS0tLS0tCXZpZGVvIGF0dHJpYnV0ZXMgdGhhdCBjYW4ndCBiZSB1c2VkIHdpdGggY29sb3JzCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgbnVtZXJpYyBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQgaW4gdGhlIFNWcjQuMCB0ZXJtIHN0cnVjdHVyZSwKKyMlYnV0IGFyZSBub3QgeWV0IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLiAgVGhleSBjYW1lIGluIHdpdGggU1ZyNCdzCisjJXByaW50ZXIgc3VwcG9ydC4KKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorYnVmZmVyX2NhcGFjaXR5CQkJYnVmc3oJbnVtCVlhCS0JLQktLS0tLQludW1iZXJzIG9mIGJ5dGVzIGJ1ZmZlcmVkIGJlZm9yZSBwcmludGluZworZG90X3ZlcnRfc3BhY2luZwkJc3BpbnYJbnVtCVliCS0JLQktLS0tLQlzcGFjaW5nIG9mIHBpbnMgdmVydGljYWxseSBpbiBwaW5zIHBlciBpbmNoCitkb3RfaG9yel9zcGFjaW5nCQlzcGluaAludW0JWWMJLQktCS0tLS0tCXNwYWNpbmcgb2YgZG90cyBob3Jpem9udGFsbHkgaW4gZG90cyBwZXIgaW5jaAorbWF4X21pY3JvX2FkZHJlc3MJCW1hZGRyCW51bQlZZAktCS0JLS0tLS0JbWF4aW11bSB2YWx1ZSBpbiBtaWNyb18uLi5fYWRkcmVzcworbWF4X21pY3JvX2p1bXAJCQltanVtcAludW0JWWUJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gcGFybV8uLi5fbWljcm8KK21pY3JvX2NvbF9zaXplCQkJbWNzCW51bQlZZgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK21pY3JvX2xpbmVfc2l6ZQkJCW1scwludW0JWWcJLQktCS0tLS0tCWxpbmUgc3RlcCBzaXplIHdoZW4gaW4gbWljcm8gbW9kZQorbnVtYmVyX29mX3BpbnMJCQlucGlucwludW0JWWgJLQktCS0tLS0tCW51bWJlcnMgb2YgcGlucyBpbiBwcmludC1oZWFkCitvdXRwdXRfcmVzX2NoYXIJCQlvcmMJbnVtCVlpCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfbGluZQkJCW9ybAludW0JWWoJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfaG9yel9pbmNoCQlvcmhpCW51bQlZawktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitvdXRwdXRfcmVzX3ZlcnRfaW5jaAkJb3J2aQludW0JWWwJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK3ByaW50X3JhdGUJCQljcHMJbnVtCVltCS0JLQktLS0tLQlwcmludCByYXRlIGluIGNoYXJhY3RlcnMgcGVyIHNlY29uZAord2lkZV9jaGFyX3NpemUJCQl3aWRjcwludW0JWW4JLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBkb3VibGUgd2lkZSBtb2RlCitidXR0b25zCQkJCWJ0bnMJbnVtCUJUCS0JLQktLS0tLQludW1iZXIgb2YgYnV0dG9ucyBvbiBtb3VzZQorYml0X2ltYWdlX2VudHdpbmluZwkJYml0d2luCW51bQlZbwktCS0JLS0tLS0JbnVtYmVyIG9mIHBhc3NlcyBmb3IgZWFjaCBiaXQtaW1hZ2Ugcm93CitiaXRfaW1hZ2VfdHlwZQkJCWJpdHlwZQludW0JWXAJLQktCS0tLS0tCXR5cGUgb2YgYml0LWltYWdlIGRldmljZQorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIHN0cmluZyBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorYmFja190YWIJCQljYnQJc3RyCWJ0CS0JCS0JWUJDR0UJYmFjayB0YWIgKFApCitiZWxsCQkJCWJlbAlzdHIJYmwJLQkJLQlZQi1HRQlhdWRpYmxlIHNpZ25hbCAoYmVsbCkgKFApCitjYXJyaWFnZV9yZXR1cm4JCQljcglzdHIJY3IJLQkJLQlZQkNHRQljYXJyaWFnZSByZXR1cm4gKFAqKSAoUCopCitjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbgkJY3NyCXN0cgljcwktCQktCVlCQ0dFCWNoYW5nZSByZWdpb24gdG8gbGluZSAjMSB0byBsaW5lICMyIChQKQorY2xlYXJfYWxsX3RhYnMJCQl0YmMJc3RyCWN0CS0JCS0JWUItRy0JY2xlYXIgYWxsIHRhYiBzdG9wcyAoUCkKK2NsZWFyX3NjcmVlbgkJCWNsZWFyCXN0cgljbAktCQktCVlCQ0dFCWNsZWFyIHNjcmVlbiBhbmQgaG9tZSBjdXJzb3IgKFAqKQorY2xyX2VvbAkJCQllbAlzdHIJY2UJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2YgbGluZSAoUCkKK2Nscl9lb3MJCQkJZWQJc3RyCWNkCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIHNjcmVlbiAoUCopCitjb2x1bW5fYWRkcmVzcwkJCWhwYQlzdHIJY2gJLQkJLQktQi1HRSoJaG9yaXpvbnRhbCBwb3NpdGlvbiAjMSwgYWJzb2x1dGUgKFApCitjb21tYW5kX2NoYXJhY3RlcgkJY21kY2gJc3RyCUNDCS0JCS0JWUItRy0JdGVybWluYWwgc2V0dGFibGUgY21kIGNoYXJhY3RlciBpbiBwcm90b3R5cGUgIT8KK2N1cnNvcl9hZGRyZXNzCQkJY3VwCXN0cgljbQktCQktCVlCQ0dFCW1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9kb3duCQkJY3VkMQlzdHIJZG8JLQkJLQlZQkNHRQlkb3duIG9uZSBsaW5lCitjdXJzb3JfaG9tZQkJCWhvbWUJc3RyCWhvCS0JCS0JWUJDR0UJaG9tZSBjdXJzb3IgKGlmIG5vIGN1cCkKK2N1cnNvcl9pbnZpc2libGUJCWNpdmlzCXN0cgl2aQktCQktCVlCLUctCW1ha2UgY3Vyc29yIGludmlzaWJsZQorY3Vyc29yX2xlZnQJCQljdWIxCXN0cglsZQktCQktCVlCQ0dFCW1vdmUgbGVmdCBvbmUgc3BhY2UKK2N1cnNvcl9tZW1fYWRkcmVzcwkJbXJjdXAJc3RyCUNNCS0JCS0JWUItRy0JbWVtb3J5IHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLCBtb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3Jfbm9ybWFsCQkJY25vcm0Jc3RyCXZlCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgYXBwZWFyIG5vcm1hbCAodW5kbyBjaXZpcy9jdnZpcykKK2N1cnNvcl9yaWdodAkJCWN1ZjEJc3RyCW5kCS0JCS0JWUJDR0UJbm9uLWRlc3RydWN0aXZlIHNwYWNlIChtb3ZlIHJpZ2h0IG9uZSBzcGFjZSkKK2N1cnNvcl90b19sbAkJCWxsCXN0cglsbAktCQktCVlCQ0dFCWxhc3QgbGluZSwgZmlyc3QgY29sdW1uIChpZiBubyBjdXApCitjdXJzb3JfdXAJCQljdXUxCXN0cgl1cAktCQktCVlCQ0dFCXVwIG9uZSBsaW5lCitjdXJzb3JfdmlzaWJsZQkJCWN2dmlzCXN0cgl2cwktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIHZlcnkgdmlzaWJsZQorZGVsZXRlX2NoYXJhY3RlcgkJZGNoMQlzdHIJZGMJLQkJLQlZQkNHRQlkZWxldGUgY2hhcmFjdGVyIChQKikKK2RlbGV0ZV9saW5lCQkJZGwxCXN0cglkbAktCQktCVlCQ0dFCWRlbGV0ZSBsaW5lIChQKikKK2Rpc19zdGF0dXNfbGluZQkJCWRzbAlzdHIJZHMJLQkJLQlZQi1HLQlkaXNhYmxlIHN0YXR1cyBsaW5lCitkb3duX2hhbGZfbGluZQkJCWhkCXN0cgloZAktCQktCVlCLUctCWhhbGYgYSBsaW5lIGRvd24KK2VudGVyX2FsdF9jaGFyc2V0X21vZGUJCXNtYWNzCXN0cglhcwktCQktCVlCLUctCXN0YXJ0IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZW50ZXJfYmxpbmtfbW9kZQkJYmxpbmsJc3RyCW1iCS0JCS0JWUItRy0JdHVybiBvbiBibGlua2luZworZW50ZXJfYm9sZF9tb2RlCQkJYm9sZAlzdHIJbWQJLQkJLQlZQi1HLQl0dXJuIG9uIGJvbGQgKGV4dHJhIGJyaWdodCkgbW9kZQorZW50ZXJfY2FfbW9kZQkJCXNtY3VwCXN0cgl0aQktCQktCVlCQ0dFCXN0cmluZyB0byBzdGFydCBwcm9ncmFtcyB1c2luZyBjdXAKK2VudGVyX2RlbGV0ZV9tb2RlCQlzbWRjCXN0cglkbQktCQktCVlCQ0dFCWVudGVyIGRlbGV0ZSBtb2RlCitlbnRlcl9kaW1fbW9kZQkJCWRpbQlzdHIJbWgJLQkJLQlZQi1HLQl0dXJuIG9uIGhhbGYtYnJpZ2h0IG1vZGUKK2VudGVyX2luc2VydF9tb2RlCQlzbWlyCXN0cglpbQktCQktCVlCQ0dFCWVudGVyIGluc2VydCBtb2RlCitlbnRlcl9zZWN1cmVfbW9kZQkJaW52aXMJc3RyCW1rCS0JCS0JLUItRy0qCXR1cm4gb24gYmxhbmsgbW9kZSAoY2hhcmFjdGVycyBpbnZpc2libGUpCitlbnRlcl9wcm90ZWN0ZWRfbW9kZQkJcHJvdAlzdHIJbXAJLQkJLQktQi1HLSoJdHVybiBvbiBwcm90ZWN0ZWQgbW9kZQorZW50ZXJfcmV2ZXJzZV9tb2RlCQlyZXYJc3RyCW1yCS0JCS0JWUItRy0JdHVybiBvbiByZXZlcnNlIHZpZGVvIG1vZGUKK2VudGVyX3N0YW5kb3V0X21vZGUJCXNtc28Jc3RyCXNvCS0JCS0JWUJDR0UJYmVnaW4gc3RhbmRvdXQgbW9kZQorZW50ZXJfdW5kZXJsaW5lX21vZGUJCXNtdWwJc3RyCXVzCS0JCS0JWUJDR0UJYmVnaW4gdW5kZXJsaW5lIG1vZGUKK2VyYXNlX2NoYXJzCQkJZWNoCXN0cgllYwktCQktCVlCLUctCWVyYXNlICMxIGNoYXJhY3RlcnMgKFApCitleGl0X2FsdF9jaGFyc2V0X21vZGUJCXJtYWNzCXN0cglhZQktCQktCVlCLUctCWVuZCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2V4aXRfYXR0cmlidXRlX21vZGUJCXNncjAJc3RyCW1lCS0JCS0JWUItR0UJdHVybiBvZmYgYWxsIGF0dHJpYnV0ZXMKK2V4aXRfY2FfbW9kZQkJCXJtY3VwCXN0cgl0ZQktCQktCVlCQ0dFCXN0cmluZ3MgdG8gZW5kIHByb2dyYW1zIHVzaW5nIGN1cAorZXhpdF9kZWxldGVfbW9kZQkJcm1kYwlzdHIJZWQJLQkJLQlZQkNHRQllbmQgZGVsZXRlIG1vZGUKK2V4aXRfaW5zZXJ0X21vZGUJCXJtaXIJc3RyCWVpCS0JCS0JWUJDR0UJZXhpdCBpbnNlcnQgbW9kZQorZXhpdF9zdGFuZG91dF9tb2RlCQlybXNvCXN0cglzZQktCQktCVlCQ0dFCWV4aXQgc3RhbmRvdXQgbW9kZQorZXhpdF91bmRlcmxpbmVfbW9kZQkJcm11bAlzdHIJdWUJLQkJLQlZQkNHRQlleGl0IHVuZGVybGluZSBtb2RlCitmbGFzaF9zY3JlZW4JCQlmbGFzaAlzdHIJdmIJLQkJLQlZQkNHRQl2aXNpYmxlIGJlbGwgKG1heSBub3QgbW92ZSBjdXJzb3IpCitmb3JtX2ZlZWQJCQlmZglzdHIJZmYJLQkJLQlZQi1HLQloYXJkY29weSB0ZXJtaW5hbCBwYWdlIGVqZWN0IChQKikKK2Zyb21fc3RhdHVzX2xpbmUJCWZzbAlzdHIJZnMJLQkJLQlZQi1HLQlyZXR1cm4gZnJvbSBzdGF0dXMgbGluZQoraW5pdF8xc3RyaW5nCQkJaXMxCXN0cglpMQktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF8yc3RyaW5nCQkJaXMyCXN0cglpcwktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF8zc3RyaW5nCQkJaXMzCXN0cglpMwktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF9maWxlCQkJaWYJc3RyCWlmCS0JCS0JWUItRy0JbmFtZSBvZiBpbml0aWFsaXphdGlvbiBmaWxlCitpbnNlcnRfY2hhcmFjdGVyCQlpY2gxCXN0cglpYwktCQktCVlCQ0dFCWluc2VydCBjaGFyYWN0ZXIgKFApCitpbnNlcnRfbGluZQkJCWlsMQlzdHIJYWwJLQkJLQlZQkNHRQlpbnNlcnQgbGluZSAoUCopCitpbnNlcnRfcGFkZGluZwkJCWlwCXN0cglpcAktCQktCVlCQ0dFCWluc2VydCBwYWRkaW5nIGFmdGVyIGluc2VydGVkIGNoYXJhY3Rlcgora2V5X2JhY2tzcGFjZQkJCWticwlzdHIJa2IJS0VZX0JBQ0tTUEFDRQkwNDA3CVlCLUctCWJhY2tzcGFjZSBrZXkKK2tleV9jYXRhYgkJCWt0YmMJc3RyCWthCUtFWV9DQVRBQgkwNTI2CS1CLUctKgljbGVhci1hbGwtdGFicyBrZXkKK2tleV9jbGVhcgkJCWtjbHIJc3RyCWtDCUtFWV9DTEVBUgkwNTE1CS1CLUctKgljbGVhci1zY3JlZW4gb3IgZXJhc2Uga2V5CitrZXlfY3RhYgkJCWtjdGFiCXN0cglrdAlLRVlfQ1RBQgkwNTI1CS1CLUctKgljbGVhci10YWIga2V5CitrZXlfZGMJCQkJa2RjaDEJc3RyCWtECUtFWV9EQwkJMDUxMglZQi1HLQlkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X2RsCQkJCWtkbDEJc3RyCWtMCUtFWV9ETAkJMDUxMAktQi1HLSoJZGVsZXRlLWxpbmUga2V5CitrZXlfZG93bgkJCWtjdWQxCXN0cglrZAlLRVlfRE9XTgkwNDAyCVlCQ0dFCWRvd24tYXJyb3cga2V5CitrZXlfZWljCQkJCWtybWlyCXN0cglrTQlLRVlfRUlDCQkwNTE0CS1CLUctKglzZW50IGJ5IHJtaXIgb3Igc21pciBpbiBpbnNlcnQgbW9kZQora2V5X2VvbAkJCQlrZWwJc3RyCWtFCUtFWV9FT0wJCTA1MTcJLUItRy0qCWNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X2VvcwkJCQlrZWQJc3RyCWtTCUtFWV9FT1MJCTA1MTYJLUItRy0qCWNsZWFyLXRvLWVuZC1vZi1zY3JlZW4ga2V5CitrZXlfZjAJCQkJa2YwCXN0cglrMAlLRVlfRigwKQkwNDEwCVlCQ0dFCUYwIGZ1bmN0aW9uIGtleQora2V5X2YxCQkJCWtmMQlzdHIJazEJS0VZX0YoMSkJLQlZQkNHRQlGMSBmdW5jdGlvbiBrZXkKK2tleV9mMTAJCQkJa2YxMAlzdHIJazsJS0VZX0YoMTApCS0JLS0tLUUJRjEwIGZ1bmN0aW9uIGtleQora2V5X2YyCQkJCWtmMglzdHIJazIJS0VZX0YoMikJLQlZQkNHRQlGMiBmdW5jdGlvbiBrZXkKK2tleV9mMwkJCQlrZjMJc3RyCWszCUtFWV9GKDMpCS0JWUJDR0UJRjMgZnVuY3Rpb24ga2V5CitrZXlfZjQJCQkJa2Y0CXN0cglrNAlLRVlfRig0KQktCVlCQ0dFCUY0IGZ1bmN0aW9uIGtleQora2V5X2Y1CQkJCWtmNQlzdHIJazUJS0VZX0YoNSkJLQlZQkNHRQlGNSBmdW5jdGlvbiBrZXkKK2tleV9mNgkJCQlrZjYJc3RyCWs2CUtFWV9GKDYpCS0JWUJDR0UJRjYgZnVuY3Rpb24ga2V5CitrZXlfZjcJCQkJa2Y3CXN0cglrNwlLRVlfRig3KQktCVlCQ0dFCUY3IGZ1bmN0aW9uIGtleQora2V5X2Y4CQkJCWtmOAlzdHIJazgJS0VZX0YoOCkJLQlZQkNHRQlGOCBmdW5jdGlvbiBrZXkKK2tleV9mOQkJCQlrZjkJc3RyCWs5CUtFWV9GKDkpCS0JWUJDR0UJRjkgZnVuY3Rpb24ga2V5CitrZXlfaG9tZQkJCWtob21lCXN0cglraAlLRVlfSE9NRQkwNDA2CVlCQ0dFCWhvbWUga2V5CitrZXlfaWMJCQkJa2ljaDEJc3RyCWtJCUtFWV9JQwkJMDUxMwlZQi1HRQlpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X2lsCQkJCWtpbDEJc3RyCWtBCUtFWV9JTAkJMDUxMQktQi1HLSoJaW5zZXJ0LWxpbmUga2V5CitrZXlfbGVmdAkJCWtjdWIxCXN0cglrbAlLRVlfTEVGVAkwNDA0CVlCQ0dFCWxlZnQtYXJyb3cga2V5CitrZXlfbGwJCQkJa2xsCXN0cglrSAlLRVlfTEwJCTA1MzMJWUItRy0JbG93ZXItbGVmdCBrZXkgKGhvbWUgZG93bikKK2tleV9ucGFnZQkJCWtucAlzdHIJa04JS0VZX05QQUdFCTA1MjIJWUItR0UJbmV4dC1wYWdlIGtleQora2V5X3BwYWdlCQkJa3BwCXN0cglrUAlLRVlfUFBBR0UJMDUyMwlZQi1HRQlwcmV2aW91cy1wYWdlIGtleQora2V5X3JpZ2h0CQkJa2N1ZjEJc3RyCWtyCUtFWV9SSUdIVAkwNDA1CVlCQ0dFCXJpZ2h0LWFycm93IGtleQora2V5X3NmCQkJCWtpbmQJc3RyCWtGCUtFWV9TRgkJMDUyMAktQi1HLSoJc2Nyb2xsLWZvcndhcmQga2V5CitrZXlfc3IJCQkJa3JpCXN0cglrUglLRVlfU1IJCTA1MjEJLUItRy0qCXNjcm9sbC1iYWNrd2FyZCBrZXkKK2tleV9zdGFiCQkJa2h0cwlzdHIJa1QJS0VZX1NUQUIJMDUyNAktQi1HLSoJc2V0LXRhYiBrZXkKK2tleV91cAkJCQlrY3V1MQlzdHIJa3UJS0VZX1VQCQkwNDAzCVlCQ0dFCXVwLWFycm93IGtleQora2V5cGFkX2xvY2FsCQkJcm1reAlzdHIJa2UJLQkJLQlZQkNHRQlsZWF2ZSAna2V5Ym9hcmRfdHJhbnNtaXQnIG1vZGUKK2tleXBhZF94bWl0CQkJc21reAlzdHIJa3MJLQkJLQlZQkNHRQllbnRlciAna2V5Ym9hcmRfdHJhbnNtaXQnIG1vZGUKK2xhYl9mMAkJCQlsZjAJc3RyCWwwCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMCBpZiBub3QgZjAKK2xhYl9mMQkJCQlsZjEJc3RyCWwxCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMSBpZiBub3QgZjEKK2xhYl9mMTAJCQkJbGYxMAlzdHIJbGEJLQkJLQktLS0tLQlsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEwIGlmIG5vdCBmMTAKK2xhYl9mMgkJCQlsZjIJc3RyCWwyCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMiBpZiBub3QgZjIKK2xhYl9mMwkJCQlsZjMJc3RyCWwzCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMyBpZiBub3QgZjMKK2xhYl9mNAkJCQlsZjQJc3RyCWw0CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNCBpZiBub3QgZjQKK2xhYl9mNQkJCQlsZjUJc3RyCWw1CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNSBpZiBub3QgZjUKK2xhYl9mNgkJCQlsZjYJc3RyCWw2CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNiBpZiBub3QgZjYKK2xhYl9mNwkJCQlsZjcJc3RyCWw3CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNyBpZiBub3QgZjcKK2xhYl9mOAkJCQlsZjgJc3RyCWw4CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmOCBpZiBub3QgZjgKK2xhYl9mOQkJCQlsZjkJc3RyCWw5CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmOSBpZiBub3QgZjkKK21ldGFfb2ZmCQkJcm1tCXN0cgltbwktCQktCVlCLUctKgl0dXJuIG9mZiBtZXRhIG1vZGUKK21ldGFfb24JCQkJc21tCXN0cgltbQktCQktCVlCLUctKgl0dXJuIG9uIG1ldGEgbW9kZSAoOHRoLWJpdCBvbikKK25ld2xpbmUJCQkJbmVsCXN0cgludwktCQktCVlCLUctKgluZXdsaW5lIChiZWhhdmUgbGlrZSBjciBmb2xsb3dlZCBieSBsZikKK3BhZF9jaGFyCQkJcGFkCXN0cglwYwktCQktCVlCQ0dFCXBhZGRpbmcgY2hhciAoaW5zdGVhZCBvZiBudWxsKQorcGFybV9kY2gJCQlkY2gJc3RyCURDCS0JCS0JWUItR0UJZGVsZXRlICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9kZWxldGVfbGluZQkJZGwJc3RyCURMCS0JCS0JWUJDR0UJZGVsZXRlICMxIGxpbmVzIChQKikKK3Bhcm1fZG93bl9jdXJzb3IJCWN1ZAlzdHIJRE8JLQkJLQlZQkNHRQlkb3duICMxIGxpbmVzIChQKikKK3Bhcm1faWNoCQkJaWNoCXN0cglJQwktCQktCVlCLUdFCWluc2VydCAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1faW5kZXgJCQlpbmRuCXN0cglTRgktCQktCVlCQ0ctCXNjcm9sbCBmb3J3YXJkICMxIGxpbmVzIChQKQorcGFybV9pbnNlcnRfbGluZQkJaWwJc3RyCUFMCS0JCS0JWUJDR0UJaW5zZXJ0ICMxIGxpbmVzIChQKikKK3Bhcm1fbGVmdF9jdXJzb3IJCWN1YglzdHIJTEUJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQgKFApCitwYXJtX3JpZ2h0X2N1cnNvcgkJY3VmCXN0cglSSQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgKFAqKQorcGFybV9yaW5kZXgJCQlyaW4Jc3RyCVNSCS0JCS0JWUJDRy0Jc2Nyb2xsIGJhY2sgIzEgbGluZXMgKFApCitwYXJtX3VwX2N1cnNvcgkJCWN1dQlzdHIJVVAJLQkJLQlZQkNHRQl1cCAjMSBsaW5lcyAoUCopCitwa2V5X2tleQkJCXBma2V5CXN0cglwawktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyCitwa2V5X2xvY2FsCQkJcGZsb2MJc3RyCXBsCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gZXhlY3V0ZSBzdHJpbmcgIzIKK3BrZXlfeG1pdAkJCXBmeAlzdHIJcHgJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0cmFuc21pdCBzdHJpbmcgIzIKK3ByaW50X3NjcmVlbgkJCW1jMAlzdHIJcHMJLQkJLQktQi1HLSoJcHJpbnQgY29udGVudHMgb2Ygc2NyZWVuCitwcnRyX29mZgkJCW1jNAlzdHIJcGYJLQkJLQktQi1HLSoJdHVybiBvZmYgcHJpbnRlcgorcHJ0cl9vbgkJCQltYzUJc3RyCXBvCS0JCS0JLUItRy0qCXR1cm4gb24gcHJpbnRlcgorcmVwZWF0X2NoYXIJCQlyZXAJc3RyCXJwCS0JCS0JWUItR0UJcmVwZWF0IGNoYXIgIzEgIzIgdGltZXMgKFAqKQorcmVzZXRfMXN0cmluZwkJCXJzMQlzdHIJcjEJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzJzdHJpbmcJCQlyczIJc3RyCXIyCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8zc3RyaW5nCQkJcnMzCXN0cglyMwktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfZmlsZQkJCXJmCXN0cglyZgktCQktCS1CLS0tCW5hbWUgb2YgcmVzZXQgZmlsZQorcmVzdG9yZV9jdXJzb3IJCQlyYwlzdHIJcmMJLQkJLQlZQkNHLQlyZXN0b3JlIGN1cnNvciB0byBwb3NpdGlvbiBvZiBsYXN0IHNhdmVfY3Vyc29yCityb3dfYWRkcmVzcwkJCXZwYQlzdHIJY3YJLQkJLQktQi1HRSoJdmVydGljYWwgcG9zaXRpb24gIzEgYWJzb2x1dGUgKFApCitzYXZlX2N1cnNvcgkJCXNjCXN0cglzYwktCQktCVlCQ0ctCXNhdmUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKFApCitzY3JvbGxfZm9yd2FyZAkJCWluZAlzdHIJc2YJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCB1cCAoUCkKK3Njcm9sbF9yZXZlcnNlCQkJcmkJc3RyCXNyCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgZG93biAoUCkKK3NldF9hdHRyaWJ1dGVzCQkJc2dyCXN0cglzYQktCQktCVlCLUctCWRlZmluZSB2aWRlbyBhdHRyaWJ1dGVzICMxLSM5IChQRzkpCitzZXRfdGFiCQkJCWh0cwlzdHIJc3QJLQkJLQlZQi1HLQlzZXQgYSB0YWIgaW4gZXZlcnkgcm93LCBjdXJyZW50IGNvbHVtbnMKK3NldF93aW5kb3cJCQl3aW5kCXN0cgl3aQktCQktCS1CLUdFCWN1cnJlbnQgd2luZG93IGlzIGxpbmVzICMxLSMyIGNvbHMgIzMtIzQKK3RhYgkJCQlodAlzdHIJdGEJLQkJLQlZQkNHRQl0YWIgdG8gbmV4dCA4LXNwYWNlIGhhcmR3YXJlIHRhYiBzdG9wCit0b19zdGF0dXNfbGluZQkJCXRzbAlzdHIJdHMJLQkJLQlZQi1HLQltb3ZlIHRvIHN0YXR1cyBsaW5lLCBjb2x1bW4gIzEKK3VuZGVybGluZV9jaGFyCQkJdWMJc3RyCXVjCS0JCS0JWUJDRy0JdW5kZXJsaW5lIGNoYXIgYW5kIG1vdmUgcGFzdCBpdAordXBfaGFsZl9saW5lCQkJaHUJc3RyCWh1CS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgdXAKK2luaXRfcHJvZwkJCWlwcm9nCXN0cglpUAktCQktCS1CLS0tCXBhdGggbmFtZSBvZiBwcm9ncmFtIGZvciBpbml0aWFsaXphdGlvbgora2V5X2ExCQkJCWthMQlzdHIJSzEJS0VZX0ExCQkwNTM0CVlCLUdFCXVwcGVyIGxlZnQgb2Yga2V5cGFkCitrZXlfYTMJCQkJa2EzCXN0cglLMwlLRVlfQTMJCTA1MzUJWUItR0UJdXBwZXIgcmlnaHQgb2Yga2V5cGFkCitrZXlfYjIJCQkJa2IyCXN0cglLMglLRVlfQjIJCTA1MzYJWUItR0UJY2VudGVyIG9mIGtleXBhZAora2V5X2MxCQkJCWtjMQlzdHIJSzQJS0VZX0MxCQkwNTM3CVlCLUdFCWxvd2VyIGxlZnQgb2Yga2V5cGFkCitrZXlfYzMJCQkJa2MzCXN0cglLNQlLRVlfQzMJCTA1NDAJWUItR0UJbG93ZXIgcmlnaHQgb2Yga2V5cGFkCitwcnRyX25vbgkJCW1jNXAJc3RyCXBPCS0JCS0JLUItRy0qCXR1cm4gb24gcHJpbnRlciBmb3IgIzEgYnl0ZXMKKyMKKyMgU1ZyMSBjYXBhYmlsaXRpZXMgc3RvcCBoZXJlLglJQk0ncyB2ZXJzaW9uIG9mIHRlcm1pbmZvIGlzIHRoZSBzYW1lIGFzCisjIFNWcjQgdXAgdG8gdGhpcyBwb2ludCwgYnV0IGhhcyBhIGRpZmZlcmVudCBzZXQgYWZ0ZXJ3YXJkcy4KKyMKK2NoYXJfcGFkZGluZwkJCXJtcAlzdHIJclAJLQkJLQktLS0tLQlsaWtlIGlwIGJ1dCB3aGVuIGluIGluc2VydCBtb2RlCithY3NfY2hhcnMJCQlhY3NjCXN0cglhYwktCQktCS0tLS0tCWdyYXBoaWNzIGNoYXJzZXQgcGFpcnMsIGJhc2VkIG9uIHZ0MTAwCitwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgora2V5X2J0YWIJCQlrY2J0CXN0cglrQglLRVlfQlRBQgkwNTQxCS0tLS0tCWJhY2stdGFiIGtleQorZW50ZXJfeG9uX21vZGUJCQlzbXhvbglzdHIJU1gJLQkJLQktLS0tLQl0dXJuIG9uIHhvbi94b2ZmIGhhbmRzaGFraW5nCitleGl0X3hvbl9tb2RlCQkJcm14b24Jc3RyCVJYCS0JCS0JLS0tLS0JdHVybiBvZmYgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK2VudGVyX2FtX21vZGUJCQlzbWFtCXN0cglTQQktCQktCS0tLS0tCXR1cm4gb24gYXV0b21hdGljIG1hcmdpbnMKK2V4aXRfYW1fbW9kZQkJCXJtYW0Jc3RyCVJBCS0JCS0JLS0tLS0JdHVybiBvZmYgYXV0b21hdGljIG1hcmdpbnMKK3hvbl9jaGFyYWN0ZXIJCQl4b25jCXN0cglYTgktCQktCS0tLS0tCVhPTiBjaGFyYWN0ZXIKK3hvZmZfY2hhcmFjdGVyCQkJeG9mZmMJc3RyCVhGCS0JCS0JLS0tLS0JWE9GRiBjaGFyYWN0ZXIKK2VuYV9hY3MJCQkJZW5hY3MJc3RyCWVBCS0JCS0JLS0tLS0JZW5hYmxlIGFsdGVybmF0ZSBjaGFyIHNldAorbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKK2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKK2tleV9iZWcJCQkJa2JlZwlzdHIJQDEJS0VZX0JFRwkJMDU0MgktLS0tLQliZWdpbiBrZXkKK2tleV9jYW5jZWwJCQlrY2FuCXN0cglAMglLRVlfQ0FOQ0VMCTA1NDMJLS0tLS0JY2FuY2VsIGtleQora2V5X2Nsb3NlCQkJa2NsbwlzdHIJQDMJS0VZX0NMT1NFCTA1NDQJLS0tLS0JY2xvc2Uga2V5CitrZXlfY29tbWFuZAkJCWtjbWQJc3RyCUA0CUtFWV9DT01NQU5ECTA1NDUJLS0tLS0JY29tbWFuZCBrZXkKK2tleV9jb3B5CQkJa2NweQlzdHIJQDUJS0VZX0NPUFkJMDU0NgktLS0tLQljb3B5IGtleQora2V5X2NyZWF0ZQkJCWtjcnQJc3RyCUA2CUtFWV9DUkVBVEUJMDU0NwktLS0tLQljcmVhdGUga2V5CitrZXlfZW5kCQkJCWtlbmQJc3RyCUA3CUtFWV9FTkQJCTA1NTAJLS0tLS0JZW5kIGtleQora2V5X2VudGVyCQkJa2VudAlzdHIJQDgJS0VZX0VOVEVSCTA1MjcJLS0tLS0JZW50ZXIvc2VuZCBrZXkKK2tleV9leGl0CQkJa2V4dAlzdHIJQDkJS0VZX0VYSVQJMDU1MQktLS0tLQlleGl0IGtleQora2V5X2ZpbmQJCQlrZm5kCXN0cglAMAlLRVlfRklORAkwNTUyCS0tLS0tCWZpbmQga2V5CitrZXlfaGVscAkJCWtobHAJc3RyCSUxCUtFWV9IRUxQCTA1NTMJLS0tLS0JaGVscCBrZXkKK2tleV9tYXJrCQkJa21yawlzdHIJJTIJS0VZX01BUksJMDU1NAktLS0tLQltYXJrIGtleQora2V5X21lc3NhZ2UJCQlrbXNnCXN0cgklMwlLRVlfTUVTU0FHRQkwNTU1CS0tLS0tCW1lc3NhZ2Uga2V5CitrZXlfbW92ZQkJCWttb3YJc3RyCSU0CUtFWV9NT1ZFCTA1NTYJLS0tLS0JbW92ZSBrZXkKK2tleV9uZXh0CQkJa254dAlzdHIJJTUJS0VZX05FWFQJMDU1NwktLS0tLQluZXh0IGtleQora2V5X29wZW4JCQlrb3BuCXN0cgklNglLRVlfT1BFTgkwNTYwCS0tLS0tCW9wZW4ga2V5CitrZXlfb3B0aW9ucwkJCWtvcHQJc3RyCSU3CUtFWV9PUFRJT05TCTA1NjEJLS0tLS0Jb3B0aW9ucyBrZXkKK2tleV9wcmV2aW91cwkJCWtwcnYJc3RyCSU4CUtFWV9QUkVWSU9VUwkwNTYyCS0tLS0tCXByZXZpb3VzIGtleQora2V5X3ByaW50CQkJa3BydAlzdHIJJTkJS0VZX1BSSU5UCTA1MzIJLS0tLS0JcHJpbnQga2V5CitrZXlfcmVkbwkJCWtyZG8Jc3RyCSUwCUtFWV9SRURPCTA1NjMJLS0tLS0JcmVkbyBrZXkKK2tleV9yZWZlcmVuY2UJCQlrcmVmCXN0cgkmMQlLRVlfUkVGRVJFTkNFCTA1NjQJLS0tLS0JcmVmZXJlbmNlIGtleQora2V5X3JlZnJlc2gJCQlrcmZyCXN0cgkmMglLRVlfUkVGUkVTSAkwNTY1CS0tLS0tCXJlZnJlc2gga2V5CitrZXlfcmVwbGFjZQkJCWtycGwJc3RyCSYzCUtFWV9SRVBMQUNFCTA1NjYJLS0tLS0JcmVwbGFjZSBrZXkKK2tleV9yZXN0YXJ0CQkJa3JzdAlzdHIJJjQJS0VZX1JFU1RBUlQJMDU2NwktLS0tLQlyZXN0YXJ0IGtleQora2V5X3Jlc3VtZQkJCWtyZXMJc3RyCSY1CUtFWV9SRVNVTUUJMDU3MAktLS0tLQlyZXN1bWUga2V5CitrZXlfc2F2ZQkJCWtzYXYJc3RyCSY2CUtFWV9TQVZFCTA1NzEJLS0tLS0Jc2F2ZSBrZXkKK2tleV9zdXNwZW5kCQkJa3NwZAlzdHIJJjcJS0VZX1NVU1BFTkQJMDYyNwktLS0tLQlzdXNwZW5kIGtleQora2V5X3VuZG8JCQlrdW5kCXN0cgkmOAlLRVlfVU5ETwkwNjMwCS0tLS0tCXVuZG8ga2V5CitrZXlfc2JlZwkJCWtCRUcJc3RyCSY5CUtFWV9TQkVHCTA1NzIJLS0tLS0Jc2hpZnRlZCBiZWdpbiBrZXkKK2tleV9zY2FuY2VsCQkJa0NBTglzdHIJJjAJS0VZX1NDQU5DRUwJMDU3MwktLS0tLQlzaGlmdGVkIGNhbmNlbCBrZXkKK2tleV9zY29tbWFuZAkJCWtDTUQJc3RyCSoxCUtFWV9TQ09NTUFORAkwNTc0CS0tLS0tCXNoaWZ0ZWQgY29tbWFuZCBrZXkKK2tleV9zY29weQkJCWtDUFkJc3RyCSoyCUtFWV9TQ09QWQkwNTc1CS0tLS0tCXNoaWZ0ZWQgY29weSBrZXkKK2tleV9zY3JlYXRlCQkJa0NSVAlzdHIJKjMJS0VZX1NDUkVBVEUJMDU3NgktLS0tLQlzaGlmdGVkIGNyZWF0ZSBrZXkKK2tleV9zZGMJCQkJa0RDCXN0cgkqNAlLRVlfU0RDCQkwNTc3CS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9zZGwJCQkJa0RMCXN0cgkqNQlLRVlfU0RMCQkwNjAwCS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWxpbmUga2V5CitrZXlfc2VsZWN0CQkJa3NsdAlzdHIJKjYJS0VZX1NFTEVDVAkwNjAxCS0tLS0tCXNlbGVjdCBrZXkKK2tleV9zZW5kCQkJa0VORAlzdHIJKjcJS0VZX1NFTkQJMDYwMgktLS0tLQlzaGlmdGVkIGVuZCBrZXkKK2tleV9zZW9sCQkJa0VPTAlzdHIJKjgJS0VZX1NFT0wJMDYwMwktLS0tLQlzaGlmdGVkIGNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X3NleGl0CQkJa0VYVAlzdHIJKjkJS0VZX1NFWElUCTA2MDQJLS0tLS0Jc2hpZnRlZCBleGl0IGtleQora2V5X3NmaW5kCQkJa0ZORAlzdHIJKjAJS0VZX1NGSU5ECTA2MDUJLS0tLS0Jc2hpZnRlZCBmaW5kIGtleQora2V5X3NoZWxwCQkJa0hMUAlzdHIJIzEJS0VZX1NIRUxQCTA2MDYJLS0tLS0Jc2hpZnRlZCBoZWxwIGtleQora2V5X3Nob21lCQkJa0hPTQlzdHIJIzIJS0VZX1NIT01FCTA2MDcJLS0tLS0Jc2hpZnRlZCBob21lIGtleQora2V5X3NpYwkJCQlrSUMJc3RyCSMzCUtFWV9TSUMJCTA2MTAJLS0tLS0Jc2hpZnRlZCBpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X3NsZWZ0CQkJa0xGVAlzdHIJIzQJS0VZX1NMRUZUCTA2MTEJLS0tLS0Jc2hpZnRlZCBsZWZ0LWFycm93IGtleQora2V5X3NtZXNzYWdlCQkJa01TRwlzdHIJJWEJS0VZX1NNRVNTQUdFCTA2MTIJLS0tLS0Jc2hpZnRlZCBtZXNzYWdlIGtleQora2V5X3Ntb3ZlCQkJa01PVglzdHIJJWIJS0VZX1NNT1ZFCTA2MTMJLS0tLS0Jc2hpZnRlZCBtb3ZlIGtleQora2V5X3NuZXh0CQkJa05YVAlzdHIJJWMJS0VZX1NORVhUCTA2MTQJLS0tLS0Jc2hpZnRlZCBuZXh0IGtleQora2V5X3NvcHRpb25zCQkJa09QVAlzdHIJJWQJS0VZX1NPUFRJT05TCTA2MTUJLS0tLS0Jc2hpZnRlZCBvcHRpb25zIGtleQora2V5X3NwcmV2aW91cwkJCWtQUlYJc3RyCSVlCUtFWV9TUFJFVklPVVMJMDYxNgktLS0tLQlzaGlmdGVkIHByZXZpb3VzIGtleQora2V5X3NwcmludAkJCWtQUlQJc3RyCSVmCUtFWV9TUFJJTlQJMDYxNwktLS0tLQlzaGlmdGVkIHByaW50IGtleQora2V5X3NyZWRvCQkJa1JETwlzdHIJJWcJS0VZX1NSRURPCTA2MjAJLS0tLS0Jc2hpZnRlZCByZWRvIGtleQora2V5X3NyZXBsYWNlCQkJa1JQTAlzdHIJJWgJS0VZX1NSRVBMQUNFCTA2MjEJLS0tLS0Jc2hpZnRlZCByZXBsYWNlIGtleQora2V5X3NyaWdodAkJCWtSSVQJc3RyCSVpCUtFWV9TUklHSFQJMDYyMgktLS0tLQlzaGlmdGVkIHJpZ2h0LWFycm93IGtleQora2V5X3Nyc3VtZQkJCWtSRVMJc3RyCSVqCUtFWV9TUlNVTUUJMDYyMwktLS0tLQlzaGlmdGVkIHJlc3VtZSBrZXkKK2tleV9zc2F2ZQkJCWtTQVYJc3RyCSExCUtFWV9TU0FWRQkwNjI0CS0tLS0tCXNoaWZ0ZWQgc2F2ZSBrZXkKK2tleV9zc3VzcGVuZAkJCWtTUEQJc3RyCSEyCUtFWV9TU1VTUEVORAkwNjI1CS0tLS0tCXNoaWZ0ZWQgc3VzcGVuZCBrZXkKK2tleV9zdW5kbwkJCWtVTkQJc3RyCSEzCUtFWV9TVU5ETwkwNjI2CS0tLS0tCXNoaWZ0ZWQgdW5kbyBrZXkKK3JlcV9mb3JfaW5wdXQJCQlyZmkJc3RyCVJGCS0JCS0JLS0tLS0Jc2VuZCBuZXh0IGlucHV0IGNoYXIgKGZvciBwdHlzKQora2V5X2YxMQkJCQlrZjExCXN0cglGMQlLRVlfRigxMSkJLQktLS0tRQlGMTEgZnVuY3Rpb24ga2V5CitrZXlfZjEyCQkJCWtmMTIJc3RyCUYyCUtFWV9GKDEyKQktCS0tLS1FCUYxMiBmdW5jdGlvbiBrZXkKK2tleV9mMTMJCQkJa2YxMwlzdHIJRjMJS0VZX0YoMTMpCS0JLS0tLUUJRjEzIGZ1bmN0aW9uIGtleQora2V5X2YxNAkJCQlrZjE0CXN0cglGNAlLRVlfRigxNCkJLQktLS0tRQlGMTQgZnVuY3Rpb24ga2V5CitrZXlfZjE1CQkJCWtmMTUJc3RyCUY1CUtFWV9GKDE1KQktCS0tLS1FCUYxNSBmdW5jdGlvbiBrZXkKK2tleV9mMTYJCQkJa2YxNglzdHIJRjYJS0VZX0YoMTYpCS0JLS0tLUUJRjE2IGZ1bmN0aW9uIGtleQora2V5X2YxNwkJCQlrZjE3CXN0cglGNwlLRVlfRigxNykJLQktLS0tRQlGMTcgZnVuY3Rpb24ga2V5CitrZXlfZjE4CQkJCWtmMTgJc3RyCUY4CUtFWV9GKDE4KQktCS0tLS1FCUYxOCBmdW5jdGlvbiBrZXkKK2tleV9mMTkJCQkJa2YxOQlzdHIJRjkJS0VZX0YoMTkpCS0JLS0tLUUJRjE5IGZ1bmN0aW9uIGtleQora2V5X2YyMAkJCQlrZjIwCXN0cglGQQlLRVlfRigyMCkJLQktLS0tRQlGMjAgZnVuY3Rpb24ga2V5CitrZXlfZjIxCQkJCWtmMjEJc3RyCUZCCUtFWV9GKDIxKQktCS0tLS1FCUYyMSBmdW5jdGlvbiBrZXkKK2tleV9mMjIJCQkJa2YyMglzdHIJRkMJS0VZX0YoMjIpCS0JLS0tLUUJRjIyIGZ1bmN0aW9uIGtleQora2V5X2YyMwkJCQlrZjIzCXN0cglGRAlLRVlfRigyMykJLQktLS0tRQlGMjMgZnVuY3Rpb24ga2V5CitrZXlfZjI0CQkJCWtmMjQJc3RyCUZFCUtFWV9GKDI0KQktCS0tLS1FCUYyNCBmdW5jdGlvbiBrZXkKK2tleV9mMjUJCQkJa2YyNQlzdHIJRkYJS0VZX0YoMjUpCS0JLS0tLUUJRjI1IGZ1bmN0aW9uIGtleQora2V5X2YyNgkJCQlrZjI2CXN0cglGRwlLRVlfRigyNikJLQktLS0tRQlGMjYgZnVuY3Rpb24ga2V5CitrZXlfZjI3CQkJCWtmMjcJc3RyCUZICUtFWV9GKDI3KQktCS0tLS1FCUYyNyBmdW5jdGlvbiBrZXkKK2tleV9mMjgJCQkJa2YyOAlzdHIJRkkJS0VZX0YoMjgpCS0JLS0tLUUJRjI4IGZ1bmN0aW9uIGtleQora2V5X2YyOQkJCQlrZjI5CXN0cglGSglLRVlfRigyOSkJLQktLS0tRQlGMjkgZnVuY3Rpb24ga2V5CitrZXlfZjMwCQkJCWtmMzAJc3RyCUZLCUtFWV9GKDMwKQktCS0tLS1FCUYzMCBmdW5jdGlvbiBrZXkKK2tleV9mMzEJCQkJa2YzMQlzdHIJRkwJS0VZX0YoMzEpCS0JLS0tLUUJRjMxIGZ1bmN0aW9uIGtleQora2V5X2YzMgkJCQlrZjMyCXN0cglGTQlLRVlfRigzMikJLQktLS0tRQlGMzIgZnVuY3Rpb24ga2V5CitrZXlfZjMzCQkJCWtmMzMJc3RyCUZOCUtFWV9GKDMzKQktCS0tLS1FCUYzMyBmdW5jdGlvbiBrZXkKK2tleV9mMzQJCQkJa2YzNAlzdHIJRk8JS0VZX0YoMzQpCS0JLS0tLUUJRjM0IGZ1bmN0aW9uIGtleQora2V5X2YzNQkJCQlrZjM1CXN0cglGUAlLRVlfRigzNSkJLQktLS0tRQlGMzUgZnVuY3Rpb24ga2V5CitrZXlfZjM2CQkJCWtmMzYJc3RyCUZRCUtFWV9GKDM2KQktCS0tLS1FCUYzNiBmdW5jdGlvbiBrZXkKK2tleV9mMzcJCQkJa2YzNwlzdHIJRlIJS0VZX0YoMzcpCS0JLS0tLUUJRjM3IGZ1bmN0aW9uIGtleQora2V5X2YzOAkJCQlrZjM4CXN0cglGUwlLRVlfRigzOCkJLQktLS0tRQlGMzggZnVuY3Rpb24ga2V5CitrZXlfZjM5CQkJCWtmMzkJc3RyCUZUCUtFWV9GKDM5KQktCS0tLS1FCUYzOSBmdW5jdGlvbiBrZXkKK2tleV9mNDAJCQkJa2Y0MAlzdHIJRlUJS0VZX0YoNDApCS0JLS0tLUUJRjQwIGZ1bmN0aW9uIGtleQora2V5X2Y0MQkJCQlrZjQxCXN0cglGVglLRVlfRig0MSkJLQktLS0tRQlGNDEgZnVuY3Rpb24ga2V5CitrZXlfZjQyCQkJCWtmNDIJc3RyCUZXCUtFWV9GKDQyKQktCS0tLS1FCUY0MiBmdW5jdGlvbiBrZXkKK2tleV9mNDMJCQkJa2Y0MwlzdHIJRlgJS0VZX0YoNDMpCS0JLS0tLUUJRjQzIGZ1bmN0aW9uIGtleQora2V5X2Y0NAkJCQlrZjQ0CXN0cglGWQlLRVlfRig0NCkJLQktLS0tRQlGNDQgZnVuY3Rpb24ga2V5CitrZXlfZjQ1CQkJCWtmNDUJc3RyCUZaCUtFWV9GKDQ1KQktCS0tLS1FCUY0NSBmdW5jdGlvbiBrZXkKK2tleV9mNDYJCQkJa2Y0NglzdHIJRmEJS0VZX0YoNDYpCS0JLS0tLUUJRjQ2IGZ1bmN0aW9uIGtleQora2V5X2Y0NwkJCQlrZjQ3CXN0cglGYglLRVlfRig0NykJLQktLS0tRQlGNDcgZnVuY3Rpb24ga2V5CitrZXlfZjQ4CQkJCWtmNDgJc3RyCUZjCUtFWV9GKDQ4KQktCS0tLS1FCUY0OCBmdW5jdGlvbiBrZXkKK2tleV9mNDkJCQkJa2Y0OQlzdHIJRmQJS0VZX0YoNDkpCS0JLS0tLUUJRjQ5IGZ1bmN0aW9uIGtleQora2V5X2Y1MAkJCQlrZjUwCXN0cglGZQlLRVlfRig1MCkJLQktLS0tRQlGNTAgZnVuY3Rpb24ga2V5CitrZXlfZjUxCQkJCWtmNTEJc3RyCUZmCUtFWV9GKDUxKQktCS0tLS1FCUY1MSBmdW5jdGlvbiBrZXkKK2tleV9mNTIJCQkJa2Y1MglzdHIJRmcJS0VZX0YoNTIpCS0JLS0tLUUJRjUyIGZ1bmN0aW9uIGtleQora2V5X2Y1MwkJCQlrZjUzCXN0cglGaAlLRVlfRig1MykJLQktLS0tRQlGNTMgZnVuY3Rpb24ga2V5CitrZXlfZjU0CQkJCWtmNTQJc3RyCUZpCUtFWV9GKDU0KQktCS0tLS1FCUY1NCBmdW5jdGlvbiBrZXkKK2tleV9mNTUJCQkJa2Y1NQlzdHIJRmoJS0VZX0YoNTUpCS0JLS0tLUUJRjU1IGZ1bmN0aW9uIGtleQora2V5X2Y1NgkJCQlrZjU2CXN0cglGawlLRVlfRig1NikJLQktLS0tRQlGNTYgZnVuY3Rpb24ga2V5CitrZXlfZjU3CQkJCWtmNTcJc3RyCUZsCUtFWV9GKDU3KQktCS0tLS1FCUY1NyBmdW5jdGlvbiBrZXkKK2tleV9mNTgJCQkJa2Y1OAlzdHIJRm0JS0VZX0YoNTgpCS0JLS0tLUUJRjU4IGZ1bmN0aW9uIGtleQora2V5X2Y1OQkJCQlrZjU5CXN0cglGbglLRVlfRig1OSkJLQktLS0tRQlGNTkgZnVuY3Rpb24ga2V5CitrZXlfZjYwCQkJCWtmNjAJc3RyCUZvCUtFWV9GKDYwKQktCS0tLS1FCUY2MCBmdW5jdGlvbiBrZXkKK2tleV9mNjEJCQkJa2Y2MQlzdHIJRnAJS0VZX0YoNjEpCS0JLS0tLUUJRjYxIGZ1bmN0aW9uIGtleQora2V5X2Y2MgkJCQlrZjYyCXN0cglGcQlLRVlfRig2MikJLQktLS0tRQlGNjIgZnVuY3Rpb24ga2V5CitrZXlfZjYzCQkJCWtmNjMJc3RyCUZyCUtFWV9GKDYzKQktCS0tLS1FCUY2MyBmdW5jdGlvbiBrZXkKK2Nscl9ib2wJCQkJZWwxCXN0cgljYgktCQktCS0tLS0tCUNsZWFyIHRvIGJlZ2lubmluZyBvZiBsaW5lCitjbGVhcl9tYXJnaW5zCQkJbWdjCXN0cglNQwktCQktCS0tLS0tCWNsZWFyIHJpZ2h0IGFuZCBsZWZ0IHNvZnQgbWFyZ2lucworc2V0X2xlZnRfbWFyZ2luCQkJc21nbAlzdHIJTUwJLQkJLQktLS0tLQlzZXQgbGVmdCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbi4JIFNlZSBzbWdsLiAoTUwgaXMgbm90IGluIEJTRCB0ZXJtY2FwKS4KK3NldF9yaWdodF9tYXJnaW4JCXNtZ3IJc3RyCU1SCS0JCS0JLS0tLS0Jc2V0IHJpZ2h0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uCitsYWJlbF9mb3JtYXQJCQlmbG4Jc3RyCUxmCS0JCS0JLS0tLS0JbGFiZWwgZm9ybWF0CitzZXRfY2xvY2sJCQlzY2xrCXN0cglTQwktCQktCS0tLS0tCXNldCBjbG9jaywgIzEgaHJzICMyIG1pbnMgIzMgc2VjcworZGlzcGxheV9jbG9jawkJCWRjbGsJc3RyCURLCS0JCS0JLS0tLS0JZGlzcGxheSBjbG9jaworcmVtb3ZlX2Nsb2NrCQkJcm1jbGsJc3RyCVJDCS0JCS0JLS0tLS0JcmVtb3ZlIGNsb2NrCitjcmVhdGVfd2luZG93CQkJY3dpbglzdHIJQ1cJLQkJLQktLS0tLQlkZWZpbmUgYSB3aW5kb3cgIzEgZnJvbSAjMiwjMyB0byAjNCwjNQorZ290b193aW5kb3cJCQl3aW5nbwlzdHIJV0cJLQkJLQktLS0tLQlnbyB0byB3aW5kb3cgIzEKK2hhbmd1cAkJCQlodXAJc3RyCUhVCS0JCS0JLS0tLS0JaGFuZy11cCBwaG9uZQorZGlhbF9waG9uZQkJCWRpYWwJc3RyCURJCS0JCS0JLS0tLS0JZGlhbCBudW1iZXIgIzEKK3F1aWNrX2RpYWwJCQlxZGlhbAlzdHIJUUQJLQkJLQktLS0tLQlkaWFsIG51bWJlciAjMSB3aXRob3V0IGNoZWNraW5nCit0b25lCQkJCXRvbmUJc3RyCVRPCS0JCS0JLS0tLS0Jc2VsZWN0IHRvdWNoIHRvbmUgZGlhbGluZworcHVsc2UJCQkJcHVsc2UJc3RyCVBVCS0JCS0JLS0tLS0Jc2VsZWN0IHB1bHNlIGRpYWxpbmcKK2ZsYXNoX2hvb2sJCQlob29rCXN0cglmaAktCQktCS0tLS0tCWZsYXNoIHN3aXRjaCBob29rCitmaXhlZF9wYXVzZQkJCXBhdXNlCXN0cglQQQktCQktCS0tLS0tCXBhdXNlIGZvciAyLTMgc2Vjb25kcword2FpdF90b25lCQkJd2FpdAlzdHIJV0EJLQkJLQktLS0tLQl3YWl0IGZvciBkaWFsLXRvbmUKK3VzZXIwCQkJCXUwCXN0cgl1MAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMwCit1c2VyMQkJCQl1MQlzdHIJdTEJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMQordXNlcjIJCQkJdTIJc3RyCXUyCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzIKK3VzZXIzCQkJCXUzCXN0cgl1MwktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMzCit1c2VyNAkJCQl1NAlzdHIJdTQJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNAordXNlcjUJCQkJdTUJc3RyCXU1CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzUKK3VzZXI2CQkJCXU2CXN0cgl1NgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM2Cit1c2VyNwkJCQl1NwlzdHIJdTcJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNwordXNlcjgJCQkJdTgJc3RyCXU4CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzgKK3VzZXI5CQkJCXU5CXN0cgl1OQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM5CisjCisjIE5DdXJzZXMgZXh0ZW5zaW9ucyBmb3Iga2V5cyBhY2Nlc3NpYmxlIG9uIG1vc3QgUEMgY29uc29sZXMKKyMKK2tleV9zdXAJCQkJa1VQCXN0cgkhNQlLRVlfU1VQCQkrCS0tLS0tCXNoaWZ0ZWQgdXAtYXJyb3cga2V5CitrZXlfc2Rvd24JCQlrRE9XTglzdHIJITYJS0VZX1NET1dOCSsJLS0tLS0Jc2hpZnRlZCBkb3duLWFycm93IGtleQora2V5X3NiYWNrc3BhY2UJCQlrQlMJc3RyCSE3CUtFWV9TQkFDS1NQQUNFCSsJLS0tLS0Jc2hpZnRlZCBiYWNrc3BhY2Uga2V5CitrZXlfY19kZWxldGUJCQlrY2RlbGV0ZSBzdHIJITgJS0VZX0NfREVMRVRFCSsJLS0tLS0JY29udHJvbC0gZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9jX2VuZAkJCWtjZW5kCXN0cgkhOQlLRVlfQ19FTkQJKwktLS0tLQljb250cm9sLSBlbmQga2V5CitrZXlfY19ob21lCQkJa2Nob20Jc3RyCSEwCUtFWV9DX0hPTUUJKwktLS0tLQljb250cm9sLSBob21lIGtleQora2V5X2NfaW5zZXJ0CQkJa2NpbnNlcnQgc3RyCSFfCUtFWV9DX0lOU0VSVAkrCS0tLS0tCWNvbnRyb2wtIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfY19sZWZ0CQkJa2NsZnQJc3RyCSVrCUtFWV9DX0xFRlQJKwktLS0tLQljb250cm9sLSBsZWZ0LWFycm93IGtleQora2V5X2NfbmV4dAkJCWtjbnh0CXN0cgklbAlLRVlfQ19ORVhUCSsJLS0tLS0JY29udHJvbC0gbmV4dCBrZXkKK2tleV9jX3ByZXZpb3VzCQkJa2NwcnYJc3RyCSVtCUtFWV9DX1BSRVZJT1VTCSsJLS0tLS0JY29udHJvbC0gcHJldmlvdXMga2V5CitrZXlfY19wcmludAkJCWtjcHJ0CXN0cgklbglLRVlfQ19QUklOVAkrCS0tLS0tCWNvbnRyb2wtIHByaW50IGtleQora2V5X2NfcmlnaHQJCQlrY3JpdAlzdHIJJW8JS0VZX0NfUklHSFQJKwktLS0tLQljb250cm9sLSByaWdodC1hcnJvdyBrZXkKK2tleV9jX2JhY2tzcGFjZQkJCWtjYnMJc3RyCSVwCUtFWV9DX0JBQ0tTUEFDRQkrCS0tLS0tCWNvbnRyb2wtIGJhY2tzcGFjZSBrZXkKK2tleV9jX3VwCQkJa2N1cAlzdHIJJXEJS0VZX0NfVVAJKwktLS0tLQljb250cm9sLSB1cC1hcnJvdyBrZXkKK2tleV9jX2Rvd24JCQlrY2Rvd24Jc3RyCSVyCUtFWV9DX0RPV04JKwktLS0tLQljb250cm9sLSBkb3duLWFycm93IGtleQora2V5X2FfZGVsZXRlCQkJa2FkZWxldGUgc3RyCSVzCUtFWV9BX0RFTEVURQkrCS0tLS0tCWFsdC0gZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9hX2VuZAkJCWthZW5kCXN0cgkldAlLRVlfQV9FTkQJKwktLS0tLQlhbHQtIGVuZCBrZXkKK2tleV9hX2hvbWUJCQlrYWhvbQlzdHIJJXUJS0VZX0FfSE9NRQkrCS0tLS0tCWFsdC0gaG9tZSBrZXkKK2tleV9hX2luc2VydAkJCWthaW5zZXJ0IHN0cgkldglLRVlfQV9JTlNFUlQJKwktLS0tLQlhbHQtIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfYV9sZWZ0CQkJa2FsZnQJc3RyCSV3CUtFWV9BX0xFRlQJKwktLS0tLQlhbHQtIGxlZnQtYXJyb3cga2V5CitrZXlfYV9uZXh0CQkJa2FueHQJc3RyCSV4CUtFWV9BX05FWFQJKwktLS0tLQlhbHQtIG5leHQga2V5CitrZXlfYV9wcmV2aW91cwkJCWthcHJ2CXN0cgkleQlLRVlfQV9QUkVWSU9VUwkrCS0tLS0tCWFsdC0gcHJldmlvdXMga2V5CitrZXlfYV9wcmludAkJCWthcHJ0CXN0cgkleglLRVlfQV9QUklOVAkrCS0tLS0tCWFsdC0gcHJpbnQga2V5CitrZXlfYV9yaWdodAkJCWthcml0CXN0cgklIQlLRVlfQV9SSUdIVAkrCS0tLS0tCWFsdC0gcmlnaHQtYXJyb3cga2V5CitrZXlfYV9iYWNrc3BhY2UJCQlrYWJzCXN0cgklQAlLRVlfQV9CQUNLU1BBQ0UJKwktLS0tLQlhbHQtIGJhY2tzcGFjZSBrZXkKK2tleV9hX3VwCQkJa2F1cAlzdHIJJSMJS0VZX0FfVVAJKwktLS0tLQlhbHQtIHVwLWFycm93IGtleQora2V5X2FfZG93bgkJCWthZG93bglzdHIJJSQJS0VZX0FfRE9XTgkrCS0tLS0tCWFsdC0gZG93bi1hcnJvdyBrZXkKK2tleV9hX2EJCQkJa2FhCXN0cgkkYQlLRVlfQV9BCQkrCS0tLS0tCWFsdC0gYSBrZXkKK2tleV9hX2IJCQkJa2FiCXN0cgkkYglLRVlfQV9CCQkrCS0tLS0tCWFsdC0gYiBrZXkKK2tleV9hX2MJCQkJa2FjCXN0cgkkYwlLRVlfQV9DCQkrCS0tLS0tCWFsdC0gYyBrZXkKK2tleV9hX2QJCQkJa2FkCXN0cgkkZAlLRVlfQV9ECQkrCS0tLS0tCWFsdC0gZCBrZXkKK2tleV9hX2UJCQkJa2FlCXN0cgkkZQlLRVlfQV9FCQkrCS0tLS0tCWFsdC0gZSBrZXkKK2tleV9hX2YJCQkJa2FmCXN0cgkkZglLRVlfQV9GCQkrCS0tLS0tCWFsdC0gZiBrZXkKK2tleV9hX2cJCQkJa2FnCXN0cgkkZwlLRVlfQV9HCQkrCS0tLS0tCWFsdC0gZyBrZXkKK2tleV9hX2gJCQkJa2FoCXN0cgkkaAlLRVlfQV9ICQkrCS0tLS0tCWFsdC0gaCBrZXkKK2tleV9hX2kJCQkJa2FpCXN0cgkkaQlLRVlfQV9JCQkrCS0tLS0tCWFsdC0gaSBrZXkKK2tleV9hX2oJCQkJa2FqCXN0cgkkaglLRVlfQV9KCQkrCS0tLS0tCWFsdC0gaiBrZXkKK2tleV9hX2sJCQkJa2FrCXN0cgkkawlLRVlfQV9LCQkrCS0tLS0tCWFsdC0gayBrZXkKK2tleV9hX2wJCQkJa2FsCXN0cgkkbAlLRVlfQV9MCQkrCS0tLS0tCWFsdC0gbCBrZXkKK2tleV9hX20JCQkJa2FtCXN0cgkkbQlLRVlfQV9NCQkrCS0tLS0tCWFsdC0gbSBrZXkKK2tleV9hX24JCQkJa2FuCXN0cgkkbglLRVlfQV9OCQkrCS0tLS0tCWFsdC0gbiBrZXkKK2tleV9hX28JCQkJa2FvCXN0cgkkbwlLRVlfQV9PCQkrCS0tLS0tCWFsdC0gbyBrZXkKK2tleV9hX3AJCQkJa2FwCXN0cgkkcAlLRVlfQV9QCQkrCS0tLS0tCWFsdC0gcCBrZXkKK2tleV9hX3EJCQkJa2FxCXN0cgkkcQlLRVlfQV9RCQkrCS0tLS0tCWFsdC0gcSBrZXkKK2tleV9hX3IJCQkJa2FyCXN0cgkkcglLRVlfQV9SCQkrCS0tLS0tCWFsdC0gciBrZXkKK2tleV9hX3MJCQkJa2FzCXN0cgkkcwlLRVlfQV9TCQkrCS0tLS0tCWFsdC0gcyBrZXkKK2tleV9hX3QJCQkJa2F0CXN0cgkkdAlLRVlfQV9UCQkrCS0tLS0tCWFsdC0gdCBrZXkKK2tleV9hX3UJCQkJa2F1CXN0cgkkdQlLRVlfQV9VCQkrCS0tLS0tCWFsdC0gdSBrZXkKK2tleV9hX3YJCQkJa2F2CXN0cgkkdglLRVlfQV9WCQkrCS0tLS0tCWFsdC0gdiBrZXkKK2tleV9hX3cJCQkJa2F3CXN0cgkkdwlLRVlfQV9XCQkrCS0tLS0tCWFsdC0gdyBrZXkKK2tleV9hX3gJCQkJa2F4CXN0cgkkeAlLRVlfQV9YCQkrCS0tLS0tCWFsdC0geCBrZXkKK2tleV9hX3kJCQkJa2F5CXN0cgkkeQlLRVlfQV9ZCQkrCS0tLS0tCWFsdC0geSBrZXkKK2tleV9hX3oJCQkJa2F6CXN0cgkkeglLRVlfQV9aCQkrCS0tLS0tCWFsdC0geiBrZXkKK2tleV9hXzAJCQkJa2FfMAlzdHIJJDAJS0VZX0FfMAkJKwktLS0tLQlhbHQtIDAga2V5CitrZXlfYV8xCQkJCWthXzEJc3RyCSQxCUtFWV9BXzEJCSsJLS0tLS0JYWx0LSAxIGtleQora2V5X2FfMgkJCQlrYV8yCXN0cgkkMglLRVlfQV8yCQkrCS0tLS0tCWFsdC0gMiBrZXkKK2tleV9hXzMJCQkJa2FfMwlzdHIJJDMJS0VZX0FfMwkJKwktLS0tLQlhbHQtIDMga2V5CitrZXlfYV80CQkJCWthXzQJc3RyCSQ0CUtFWV9BXzQJCSsJLS0tLS0JYWx0LSA0IGtleQora2V5X2FfNQkJCQlrYV81CXN0cgkkNQlLRVlfQV81CQkrCS0tLS0tCWFsdC0gNSBrZXkKK2tleV9hXzYJCQkJa2FfNglzdHIJJDYJS0VZX0FfNgkJKwktLS0tLQlhbHQtIDYga2V5CitrZXlfYV83CQkJCWthXzcJc3RyCSQ3CUtFWV9BXzcJCSsJLS0tLS0JYWx0LSA3IGtleQora2V5X2FfOAkJCQlrYV84CXN0cgkkOAlLRVlfQV84CQkrCS0tLS0tCWFsdC0gOCBrZXkKK2tleV9hXzkJCQkJa2FfOQlzdHIJJDkJS0VZX0FfOQkJKwktLS0tLQlhbHQtIDkga2V5CitrZXlfYV9iYWNrdGljawkJCWthX2J0CXN0cgkkYAlLRVlfQV9CQUNLVElDSwkrCS0tLS0tCWFsdC0gYCBrZXkKK2tleV9hX3VuZGVyCQkJa2FfdW5kCXN0cgkkXwlLRVlfQV9VTkRFUgkrCS0tLS0tCWFsdC0gXyBrZXkKK2tleV9hX2VxdWFscwkJCWthX2VxCXN0cgkkPQlLRVlfQV9FUVVBTFMJKwktLS0tLQlhbHQtID0ga2V5CitrZXlfYV9iYXIJCQlrYV9ic2wJc3RyCSR8CUtFWV9BX0JBUgkrCS0tLS0tCWFsdC0gfCBrZXkKK2tleV9hX2xicmFja2VyCQkJa2FfbGJyCXN0cgkkWwlLRVlfQV9MQlJBQ0tFUgkrCS0tLS0tCWFsdC0gWyBrZXkKK2tleV9hX3JicmFja2VyCQkJa2FfcmJyCXN0cgkkXQlLRVlfQV9SQlJBQ0tFUgkrCS0tLS0tCWFsdC0gXSBrZXkKK2tleV9hX3NlbWkJCQlrYV9zZW1pIHN0cgkkOwlLRVlfQV9TRU1JCSsJLS0tLS0JYWx0LSA7IGtleQora2V5X2FfdGljawkJCWthX3RpY2sgc3RyCSQnCUtFWV9BX1RJQ0sJKwktLS0tLQlhbHQtICcga2V5CitrZXlfYV9jb21tYQkJCWthX2NvbQlzdHIJJCwJS0VZX0FfQ09NTUEJKwktLS0tLQlhbHQtICwga2V5CitrZXlfYV9kb3QJCQlrYV9kb3QJc3RyCSQuCUtFWV9BX0RPVAkrCS0tLS0tCWFsdC0gLiBrZXkKK2tleV9hX3F1ZXN0aW9uCQkJa2Ffc2xhCXN0cgkkPwlLRVlfQV9RVUVTVElPTgkrCS0tLS0tCWFsdC0gPyBrZXkKK2tleV9hX2RpdmlkZQkJCWthX2RpdglzdHIJJC8JS0VZX0FfRElWSURFCSsJLS0tLS0JYWx0LSBrZXlwYWQgLyBrZXkKK2tleV9hX211bHRpcGx5CQkJa2FfbXVsCXN0cgkkKglLRVlfQV9NVUxUSVBMWQkrCS0tLS0tCWFsdC0ga2V5cGFkICoga2V5CitrZXlfYV9hZGQJCQlrYV9hZGQJc3RyCSQrCUtFWV9BX0FERAkrCS0tLS0tCWFsdC0ga2V5cGFkICsga2V5CitrZXlfYV9zdWJ0cmFjdAkJCWthX3N1YglzdHIJJC0JS0VZX0FfU1VCVFJBQ1QJKwktLS0tLQlhbHQtIGtleXBhZCAtIGtleQora2V5X2Ffa2VudGVyCQkJa2Ffa2VudCBzdHIJJDwJS0VZX0FfS0VOVEVSCSsJLS0tLS0JYWx0LSBrZXlwYWQgZW50ZXIga2V5CitrZXlfYV9lbnRlcgkJCWthX2VudAlzdHIJJD4JS0VZX0FfRU5URVIJKwktLS0tLQlhbHQtIGVudGVyIGtleQora2V5X2NfYXQJCQlrY2F0CXN0cgklJQlLRVlfQ19BVAkrCS0tLS0tCWNvbnRyb2wtIEAga2V5CitrZXlfY19kaXZpZGUJCQlrY2RpdglzdHIJJS8JS0VZX0NfRElWSURFCSsJLS0tLS0JY29udHJvbC0ga2V5cGFkIC8ga2V5CitrZXlfY19tdWx0aXBseQkJCWtjbXVsCXN0cgklKglLRVlfQ19NVUxUSVBMWQkrCS0tLS0tCWNvbnRyb2wtIGtleXBhZCAqIGtleQora2V5X2NfYWRkCQkJa2NhZGQJc3RyCSUrCUtFWV9DX0FERAkrCS0tLS0tCWNvbnRyb2wtIGtleXBhZCArIGtleQora2V5X2Nfc3VidHJhY3QJCQlrY3N1YglzdHIJJS0JS0VZX0NfU1VCVFJBQ1QJKwktLS0tLQljb250cm9sLSBrZXlwYWQgLSBrZXkKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCBjb2xvcgorIworb3JpZ19wYWlyCQkJb3AJc3RyCW9wCS0JCS0JLS0tLS0JU2V0IGRlZmF1bHQgcGFpciB0byBpdHMgb3JpZ2luYWwgdmFsdWUKK29yaWdfY29sb3JzCQkJb2MJc3RyCW9jCS0JCS0JLS0tLS0JU2V0IGFsbCBjb2xvciBwYWlycyB0byB0aGUgb3JpZ2luYWwgb25lcworaW5pdGlhbGl6ZV9jb2xvcgkJaW5pdGMJc3RyCUljCS0JCS0JLS0tLS0JaW5pdGlhbGl6ZSBjb2xvciAjMSB0byAoIzIsIzMsIzQpCitpbml0aWFsaXplX3BhaXIJCQlpbml0cAlzdHIJSXAJLQkJLQktLS0tLQlJbml0aWFsaXplIGNvbG9yIHBhaXIgIzEgdG8gZmc9KCMyLCMzLCM0KSwgYmc9KCM1LCM2LCM3KQorc2V0X2NvbG9yX3BhaXIJCQlzY3AJc3RyCXNwCS0JCS0JLS0tLS0JU2V0IGN1cnJlbnQgY29sb3IgcGFpciB0byAjMQorc2V0X2ZvcmVncm91bmQJCQlzZXRmCXN0cglTZgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yICMxCitzZXRfYmFja2dyb3VuZAkJCXNldGIJc3RyCVNiCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgIzEKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCBwcmludGVycworIworY2hhbmdlX2NoYXJfcGl0Y2gJCWNwaQlzdHIJWkEJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGluY2ggdG8gIzEKK2NoYW5nZV9saW5lX3BpdGNoCQlscGkJc3RyCVpCCS0JCS0JLS0tLS0JQ2hhbmdlIG51bWJlciBvZiBsaW5lcyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX3Jlc19ob3J6CQkJY2hyCXN0cglaQwktCQktCS0tLS0tCUNoYW5nZSBob3Jpem9udGFsIHJlc29sdXRpb24gdG8gIzEKK2NoYW5nZV9yZXNfdmVydAkJCWN2cglzdHIJWkQJLQkJLQktLS0tLQlDaGFuZ2UgdmVydGljYWwgcmVzb2x1dGlvbiB0byAjMQorZGVmaW5lX2NoYXIJCQlkZWZjCXN0cglaRQktCQktCS0tLS0tCURlZmluZSBhIGNoYXJhY3RlciAjMSwgIzIgZG90cyB3aWRlLCBkZXNjZW5kZXIgIzMKK2VudGVyX2RvdWJsZXdpZGVfbW9kZQkJc3dpZG0Jc3RyCVpGCS0JCS0JLS0tLS0JRW50ZXIgZG91YmxlLXdpZGUgbW9kZQorZW50ZXJfZHJhZnRfcXVhbGl0eQkJc2RyZnEJc3RyCVpHCS0JCS0JLS0tLS0JRW50ZXIgZHJhZnQtcXVhbGl0eSBtb2RlCitlbnRlcl9pdGFsaWNzX21vZGUJCXNpdG0Jc3RyCVpICS0JCS0JLS0tLS0JRW50ZXIgaXRhbGljIG1vZGUKK2VudGVyX2xlZnR3YXJkX21vZGUJCXNsbQlzdHIJWkkJLQkJLQktLS0tLQlTdGFydCBsZWZ0d2FyZCBjYXJyaWFnZSBtb3Rpb24KK2VudGVyX21pY3JvX21vZGUJCXNtaWNtCXN0cglaSgktCQktCS0tLS0tCVN0YXJ0IG1pY3JvLW1vdGlvbiBtb2RlCitlbnRlcl9uZWFyX2xldHRlcl9xdWFsaXR5CXNubHEJc3RyCVpLCS0JCS0JLS0tLS0JRW50ZXIgTkxRIG1vZGUKK2VudGVyX25vcm1hbF9xdWFsaXR5CQlzbnJtcQlzdHIJWkwJLQkJLQktLS0tLQlFbnRlciBub3JtYWwtcXVhbGl0eSBtb2RlCitlbnRlcl9zaGFkb3dfbW9kZQkJc3NobQlzdHIJWk0JLQkJLQktLS0tLQlFbnRlciBzaGFkb3ctcHJpbnQgbW9kZQorZW50ZXJfc3Vic2NyaXB0X21vZGUJCXNzdWJtCXN0cglaTgktCQktCS0tLS0tCUVudGVyIHN1YnNjcmlwdCBtb2RlCitlbnRlcl9zdXBlcnNjcmlwdF9tb2RlCQlzc3VwbQlzdHIJWk8JLQkJLQktLS0tLQlFbnRlciBzdXBlcnNjcmlwdCBtb2RlCitlbnRlcl91cHdhcmRfbW9kZQkJc3VtCXN0cglaUAktCQktCS0tLS0tCVN0YXJ0IHVwd2FyZCBjYXJyaWFnZSBtb3Rpb24KK2V4aXRfZG91Ymxld2lkZV9tb2RlCQlyd2lkbQlzdHIJWlEJLQkJLQktLS0tLQlFbmQgZG91YmxlLXdpZGUgbW9kZQorZXhpdF9pdGFsaWNzX21vZGUJCXJpdG0Jc3RyCVpSCS0JCS0JLS0tLS0JRW5kIGl0YWxpYyBtb2RlCitleGl0X2xlZnR3YXJkX21vZGUJCXJsbQlzdHIJWlMJLQkJLQktLS0tLQlFbmQgbGVmdC1tb3Rpb24gbW9kZQorZXhpdF9taWNyb19tb2RlCQkJcm1pY20Jc3RyCVpUCS0JCS0JLS0tLS0JRW5kIG1pY3JvLW1vdGlvbiBtb2RlCitleGl0X3NoYWRvd19tb2RlCQlyc2htCXN0cglaVQktCQktCS0tLS0tCUVuZCBzaGFkb3ctcHJpbnQgbW9kZQorZXhpdF9zdWJzY3JpcHRfbW9kZQkJcnN1Ym0Jc3RyCVpWCS0JCS0JLS0tLS0JRW5kIHN1YnNjcmlwdCBtb2RlCitleGl0X3N1cGVyc2NyaXB0X21vZGUJCXJzdXBtCXN0cglaVwktCQktCS0tLS0tCUVuZCBzdXBlcnNjcmlwdCBtb2RlCitleGl0X3Vwd2FyZF9tb2RlCQlydW0Jc3RyCVpYCS0JCS0JLS0tLS0JRW5kIHJldmVyc2UgY2hhcmFjdGVyIG1vdGlvbgorbWljcm9fY29sdW1uX2FkZHJlc3MJCW1ocGEJc3RyCVpZCS0JCS0JLS0tLS0JTGlrZSBjb2x1bW5fYWRkcmVzcyBpbiBtaWNybyBtb2RlCittaWNyb19kb3duCQkJbWN1ZDEJc3RyCVpaCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfZG93biBpbiBtaWNybyBtb2RlCittaWNyb19sZWZ0CQkJbWN1YjEJc3RyCVphCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfbGVmdCBpbiBtaWNybyBtb2RlCittaWNyb19yaWdodAkJCW1jdWYxCXN0cglaYgktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3JpZ2h0IGluIG1pY3JvIG1vZGUKK21pY3JvX3Jvd19hZGRyZXNzCQltdnBhCXN0cglaYwktCQktCS0tLS0tCUxpa2Ugcm93X2FkZHJlc3MgIzEgaW4gbWljcm8gbW9kZQorbWljcm9fdXAJCQltY3V1MQlzdHIJWmQJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl91cCBpbiBtaWNybyBtb2RlCitvcmRlcl9vZl9waW5zCQkJcG9yZGVyCXN0cglaZQktCQktCS0tLS0tCU1hdGNoIHNvZnR3YXJlIGJpdHMgdG8gcHJpbnQtaGVhZCBwaW5zCitwYXJtX2Rvd25fbWljcm8JCQltY3VkCXN0cglaZgktCQktCS0tLS0tCUxpa2UgcGFybV9kb3duX2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX2xlZnRfbWljcm8JCQltY3ViCXN0cglaZwktCQktCS0tLS0tCUxpa2UgcGFybV9sZWZ0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3JpZ2h0X21pY3JvCQltY3VmCXN0cglaaAktCQktCS0tLS0tCUxpa2UgcGFybV9yaWdodF9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV91cF9taWNybwkJCW1jdXUJc3RyCVppCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3VwX2N1cnNvciBpbiBtaWNybyBtb2RlCitzZWxlY3RfY2hhcl9zZXQJCQlzY3MJc3RyCVpqCS0JCS0JLS0tLS0JU2VsZWN0IGNoYXJhY3RlciBzZXQsICMxCitzZXRfYm90dG9tX21hcmdpbgkJc21nYglzdHIJWmsJLQkJLQktLS0tLQlTZXQgYm90dG9tIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF9ib3R0b21fbWFyZ2luX3Bhcm0JCXNtZ2JwCXN0cglabAktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGxpbmUgIzEgb3IgKGlmIHNtZ3RwIGlzIG5vdCBnaXZlbikgIzIgbGluZXMgZnJvbSBib3R0b20KK3NldF9sZWZ0X21hcmdpbl9wYXJtCQlzbWdscAlzdHIJWm0JLQkJLQktLS0tLQlTZXQgbGVmdCAocmlnaHQpIG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF9yaWdodF9tYXJnaW5fcGFybQkJc21ncnAJc3RyCVpuCS0JCS0JLS0tLS0JU2V0IHJpZ2h0IG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF90b3BfbWFyZ2luCQkJc21ndAlzdHIJWm8JLQkJLQktLS0tLQlTZXQgdG9wIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF90b3BfbWFyZ2luX3Bhcm0JCXNtZ3RwCXN0cglacAktCQktCS0tLS0tCVNldCB0b3AgKGJvdHRvbSkgbWFyZ2luIGF0IHJvdyAjMQorc3RhcnRfYml0X2ltYWdlCQkJc2JpbQlzdHIJWnEJLQkJLQktLS0tLQlTdGFydCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0YXJ0X2NoYXJfc2V0X2RlZgkJc2NzZAlzdHIJWnIJLQkJLQktLS0tLQlTdGFydCBjaGFyYWN0ZXIgc2V0IGRlZmluaXRpb24gIzEsIHdpdGggIzIgY2hhcmFjdGVycyBpbiB0aGUgc2V0CitzdG9wX2JpdF9pbWFnZQkJCXJiaW0Jc3RyCVpzCS0JCS0JLS0tLS0JU3RvcCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0b3BfY2hhcl9zZXRfZGVmCQlyY3NkCXN0cgladAktCQktCS0tLS0tCUVuZCBkZWZpbml0aW9uIG9mIGNoYXJhY3RlciBzZXQgIzEKK3N1YnNjcmlwdF9jaGFyYWN0ZXJzCQlzdWJjcwlzdHIJWnUJLQkJLQktLS0tLQlMaXN0IG9mIHN1YnNjcmlwdGFibGUgY2hhcmFjdGVycworc3VwZXJzY3JpcHRfY2hhcmFjdGVycwkJc3VwY3MJc3RyCVp2CS0JCS0JLS0tLS0JTGlzdCBvZiBzdXBlcnNjcmlwdGFibGUgY2hhcmFjdGVycwordGhlc2VfY2F1c2VfY3IJCQlkb2NyCXN0cgladwktCQktCS0tLS0tCVByaW50aW5nIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzIGNhdXNlcyBDUgoremVyb19tb3Rpb24JCQl6ZXJvbQlzdHIJWngJLQkJLQktLS0tLQlObyBtb3Rpb24gZm9yIHN1YnNlcXVlbnQgY2hhcmFjdGVyCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgc3RyaW5nIGNhcGFiaWxpdGllcyBhcmUgcHJlc2VudCBpbiB0aGUgU1ZyNC4wIHRlcm0gc3RydWN0dXJlLAorIyVidXQgd2VyZSBvcmlnaW5hbGx5IG5vdCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4KKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MTguCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitjaGFyX3NldF9uYW1lcwkJCWNzbm0Jc3RyCVp5CS0JCS0JLS0tLS0JUHJvZHVjZSAjMSd0aCBpdGVtIGZyb20gbGlzdCBvZiBjaGFyYWN0ZXIgc2V0IG5hbWVzCitrZXlfbW91c2UJCQlrbW91cwlzdHIJS20JS0VZX01PVVNFCTA2MzEJLS0tLS0JTW91c2UgZXZlbnQgaGFzIG9jY3VycmVkCittb3VzZV9pbmZvCQkJbWluZm8Jc3RyCU1pCS0JCS0JLS0tLS0JTW91c2Ugc3RhdHVzIGluZm9ybWF0aW9uCityZXFfbW91c2VfcG9zCQkJcmVxbXAJc3RyCVJRCS0JCS0JLS0tLS0JUmVxdWVzdCBtb3VzZSBwb3NpdGlvbgorZ2V0X21vdXNlCQkJZ2V0bQlzdHIJR20JLQkJLQktLS0tLQlDdXJzZXMgc2hvdWxkIGdldCBidXR0b24gZXZlbnRzLCBwYXJhbWV0ZXIgIzEgbm90IGRvY3VtZW50ZWQuCitzZXRfYV9mb3JlZ3JvdW5kCQlzZXRhZglzdHIJQUYJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciB0byAjMSwgdXNpbmcgQU5TSSBlc2NhcGUKK3NldF9hX2JhY2tncm91bmQJCXNldGFiCXN0cglBQgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorcGtleV9wbGFiCQkJcGZ4bAlzdHIJeGwJLQkJLQktLS0tLQlQcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMiBhbmQgc2hvdyBzdHJpbmcgIzMKK2RldmljZV90eXBlCQkJZGV2dAlzdHIJZHYJLQkJLQktLS0tLQlJbmRpY2F0ZSBsYW5ndWFnZS9jb2Rlc2V0IHN1cHBvcnQKK2NvZGVfc2V0X2luaXQJCQljc2luCXN0cgljaQktCQktCS0tLS0tCUluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIGNvZGVzZXRzCitzZXQwX2Rlc19zZXEJCQlzMGRzCXN0cglzMAktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMCAoRVVDIHNldCAwLCBBU0NJSSkKK3NldDFfZGVzX3NlcQkJCXMxZHMJc3RyCXMxCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAxCitzZXQyX2Rlc19zZXEJCQlzMmRzCXN0cglzMgktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMgorc2V0M19kZXNfc2VxCQkJczNkcwlzdHIJczMJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDMKK3NldF9scl9tYXJnaW4JCQlzbWdscglzdHIJTUwJLQkJLQktLS0tLQlTZXQgYm90aCBsZWZ0IGFuZCByaWdodCBtYXJnaW5zIHRvICMxLCAjMi4gIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3RiX21hcmdpbgkJCXNtZ3RiCXN0cglNVAktCQktCS0tLS0tCVNldHMgYm90aCB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIHRvICMxLCAjMgorYml0X2ltYWdlX3JlcGVhdAkJYmlyZXAJc3RyCVh5CS0JCS0JLS0tLS0JUmVwZWF0IGJpdCBpbWFnZSBjZWxsICMxICMyIHRpbWVzCitiaXRfaW1hZ2VfbmV3bGluZQkJYmluZWwJc3RyCVp6CS0JCS0JLS0tLS0JTW92ZSB0byBuZXh0IHJvdyBvZiB0aGUgYml0IGltYWdlCitiaXRfaW1hZ2VfY2FycmlhZ2VfcmV0dXJuCWJpY3IJc3RyCVl2CS0JCS0JLS0tLS0JTW92ZSB0byBiZWdpbm5pbmcgb2Ygc2FtZSByb3cKK2NvbG9yX25hbWVzCQkJY29sb3JubQlzdHIJWXcJLQkJLQktLS0tLQlHaXZlIG5hbWUgZm9yIGNvbG9yICMxCitkZWZpbmVfYml0X2ltYWdlX3JlZ2lvbgkJZGVmYmkJc3RyCVl4CS0JCS0JLS0tLS0JRGVmaW5lIHJlY3Rhbmd1YWxhciBiaXQgaW1hZ2UgcmVnaW9uCitlbmRfYml0X2ltYWdlX3JlZ2lvbgkJZW5kYmkJc3RyCVl5CS0JCS0JLS0tLS0JRW5kIGEgYml0LWltYWdlIHJlZ2lvbgorc2V0X2NvbG9yX2JhbmQJCXNldGNvbG9yCXN0cglZegktCQktCS0tLS0tCUNoYW5nZSB0byByaWJib24gY29sb3IgIzEKK3NldF9wYWdlX2xlbmd0aAkJCXNsaW5lcwlzdHIJWVoJLQkJLQktLS0tLQlTZXQgcGFnZSBsZW5ndGggdG8gIzEgbGluZXMKKyMKKyMgU1ZyNCBhZGRlZCB0aGVzZSBjYXBhYmlsaXRpZXMgZm9yIGRpcmVjdCBQQy1jbG9uZSBzdXBwb3J0CisjCitkaXNwbGF5X3BjX2NoYXIJCQlkaXNwYwlzdHIJUzEJLQkJLQktLS0tLQlEaXNwbGF5IFBDIGNoYXJhY3RlciAjMQorZW50ZXJfcGNfY2hhcnNldF9tb2RlCQlzbXBjaAlzdHIJUzIJLQkJLQktLS0tLQlFbnRlciBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitleGl0X3BjX2NoYXJzZXRfbW9kZQkJcm1wY2gJc3RyCVMzCS0JCS0JLS0tLS0JRXhpdCBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitlbnRlcl9zY2FuY29kZV9tb2RlCQlzbXNjCXN0cglTNAktCQktCS0tLS0tCUVudGVyIFBDIHNjYW5jb2RlIG1vZGUKK2V4aXRfc2NhbmNvZGVfbW9kZQkJcm1zYwlzdHIJUzUJLQkJLQktLS0tLQlFeGl0IFBDIHNjYW5jb2RlIG1vZGUKK3BjX3Rlcm1fb3B0aW9ucwkJCXBjdHJtCXN0cglTNgktCQktCS0tLS0tCVBDIHRlcm1pbmFsIG9wdGlvbnMKK3NjYW5jb2RlX2VzY2FwZQkJCXNjZXNjCXN0cglTNwktCQktCS0tLS0tCUVzY2FwZSBmb3Igc2NhbmNvZGUgZW11bGF0aW9uCithbHRfc2NhbmNvZGVfZXNjCQlzY2VzYQlzdHIJUzgJLQkJLQktLS0tLQlBbHRlcm5hdGUgZXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KKyMlLlRFCisjJS5hZAorIyUKKyMlLmluIC44aQorIyVUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBhZGRlZCB0aGVzZS4gIFRoZXkgYXJlIHNvbWUgcG9zdC00LjEgCisjJXZlcnNpb25zIG9mIFN5c3RlbSBWIGN1cnNlcywgZS5nLiwgU29sYXJpcyAyLjUgYW5kIElSSVggNi54LgorIyVUaGUgXGZCbmN1cnNlc1xmUiB0ZXJtY2FwIG5hbWVzIGZvciB0aGVtIGFyZSBpbnZlbnRlZDsgYWNjb3JkaW5nIHRvIHRoZQorIyVYU0kgQ3Vyc2VzIHN0YW5kYXJkLCB0aGV5IGhhdmUgbm8gdGVybWNhcCBuYW1lcy4gIElmIHlvdXIgY29tcGlsZWQgdGVybWluZm8KKyMlZW50cmllcyB1c2UgdGhlc2UsIHRoZXkgbWF5IG5vdCBiZSBiaW5hcnktY29tcGF0aWJsZSB3aXRoIFN5c3RlbSBWIHRlcm1pbmZvCisjJWVudHJpZXMgYWZ0ZXIgU1ZyNC4xOyBiZXdhcmUhCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorZW50ZXJfaG9yaXpvbnRhbF9obF9tb2RlCWVoaGxtCXN0cglYaAktCQktCS0tLS0tCUVudGVyIGhvcml6b250YWwgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX2xlZnRfaGxfbW9kZQkJZWxobG0Jc3RyCVhsCS0JCS0JLS0tLS0JRW50ZXIgbGVmdCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbG93X2hsX21vZGUJCWVsb2hsbQlzdHIJWG8JLQkJLQktLS0tLQlFbnRlciBsb3cgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3JpZ2h0X2hsX21vZGUJCWVyaGxtCXN0cglYcgktCQktCS0tLS0tCUVudGVyIHJpZ2h0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl90b3BfaGxfbW9kZQkJZXRobG0Jc3RyCVh0CS0JCS0JLS0tLS0JRW50ZXIgdG9wIGhpZ2hsaWdodCBtb2RlCitlbnRlcl92ZXJ0aWNhbF9obF9tb2RlCQlldmhsbQlzdHIJWHYJLQkJLQktLS0tLQlFbnRlciB2ZXJ0aWNhbCBoaWdobGlnaHQgbW9kZQorc2V0X2FfYXR0cmlidXRlcwkJc2dyMQlzdHIJc0EJLQkJLQktLS0tLQlEZWZpbmUgc2Vjb25kIHNldCBvZiB2aWRlbyBhdHRyaWJ1dGVzICMxLSM2CitzZXRfcGdsZW5faW5jaAkJCXNsZW5ndGgJc3RyCXNMCS0JCS0JLS0tLS0JWUkgU2V0IHBhZ2UgbGVuZ3RoIHRvICMxIGh1bmRyZWR0aCBvZiBhbiBpbmNoCisjJS5URQorIyUuYWQKKyMKKyMgVGhlIG1hZ2ljIHRva2VuIGJlbG93IHRlbGxzIHRoZSB0aWMgY29tcGlsZXItZ2VuZXJhdG9yIGNvZGUgdGhhdCBhbGwgdGhlIGNhcHMKKyMgcGFzdCBpdCBzaG91bGQgYmUgaWdub3JlZCAobm90IHdyaXR0ZW4gb3V0KSB3aGVuIGR1bXBpbmcgdGVybWluZm8gb2JqZWN0cy4gSXQKKyMgYWxzbyB0ZWxscyB0aGUgbWFuIHBhZ2UgdGFibGUgZ2VuZXJhdG9yIG5vdCB0byBwYXNzIHRocm91Z2ggZm9sbG93aW5nIGxpbmVzCisjIFRoaXMgbWVhbnMgd2UgY2FuIGhhdmUgb2Jzb2xldGUgY2FwYWJpbGl0aWVzIGFuZCBwc2V1ZG8tY2FwYWJpbGl0aWVzIHRoYXQgYXJlCisjIHJlY29nbml6ZWQgZm9yIHRlcm1jYXAgb3IgdGVybWluZm8gY29tcGlsYXRpb24sIGJ1dCBub3Qgb3V0cHV0LgorIworIyAlJS1TVE9QLUhFUkUtJSUKKyMKKyMgRG9uJ3QgbW92ZSB0aGlzIGNhc3VhbGx5ISAgSW4gZmFjdCwgZG9uJ3QgbW92ZSBpdCBhdCBhbGwgdW5sZXNzIHlvdSdyZQorIyBlaXRoZXIgZG9pbmcgaXQgdG8gYWRkIFN5c3RlbSBWIG9yIFhQRzQgZXh0ZW5zaW9ucywgb3IgaGF2ZSBkZWNpZGVkIHlvdQorIyBkb24ndCBjYXJlIGFib3V0IFNWcjQgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNQ0FQIEVYVEVOU0lPTiBDQVBBQklMSVRJRVMKKyMKKyMgVGhlIGNhcGFiaWxpdGllcyBiZWxvdyBhcmUgZWl0aGVyIG9ic29sZXRlIG9yIGV4dGVuc2lvbnMgb24gY2VydGFpbiBzeXN0ZW1zLgorIyBUaGV5IGFyZSBub3QgdXNlZCBieSBTVlI0IHRlcm1pbmZvLiAgU29tZSBhcmUgdXNlZCBieSBjYXB0b2luZm8gdG8gdHJhbnNsYXRlCisjIHRlcm1jYXAgc291cmNlczsgdGhlIHJlc3QgYXJlIGxpc3RlZCBmb3IgY29tcGxldGVuZXNzLCBhbmQgaW4gY2FzZSBzb21lYm9keQorIyBjYXJlcyBhYm91dCB0aGVtIGVub3VnaCB0byBoYWNrIGluIGNvZGUgdGhhdCB3aWxsIHRyYW5zbGF0ZSB0aGVtIGludG8KKyMgdGVybWluZm8gY2FwYWJpbGl0aWVzLgorIworIyBUaGUgZmlyc3QgcGFydCBvZiB0aGUgbGlzdCBpcyBmcm9tIFJvc3MgUmlkZ2UncyBgbXl0aW5mbycgcGFja2FnZQorIyAoY29tcC5zb3VyY2VzLnVuaXgsIHZvbHVtZSAyNik7IHRoZSB2YXJpYWJsZSBuYW1lcyBhbmQgdGVybWluZm8gbmFtZXMgKGFzCisjIHdlbGwgYXMgdGhlIHRlcm1jYXAgY29kZXMpIG1hdGNoIGhpcyBsaXN0LgorIworIyBUaGlzIGdyb3VwIG9mIGNvZGVzIGlzIG5vdCBtYXJrZWQgb2Jzb2xldGUgaW4gNC40QlNELCBidXQgaGF2ZSBubyBkaXJlY3QKKyMgdGVybWluZm8gZXF1aXZhbGVudHMuICBUaGUgcnMgY2FwYWJpbGl0eSBpcyBzcGVjaWFsbHkgdHJhbnNsYXRlZCB0byB0ZXJtaW5mbworIyByMiwgYW5kIHZpY2UgdmVyc2EsIGlmIGFuIGVudHJ5IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiByMi4gIFNpbWlsYXJseSwKKyMgaTIgaXMgdHJhbnNsYXRlZCB0byByMyBpZiB0aGVyZSBpcyBubyByMyAoYmVjYXVzZSBTViB0ZXJtaW5mbyBtYXBzIGlzIHRvIGkyKS4KKyMgVGhlIHVnIGNhcGFiaWxpdHkgaXMgdGhyb3duIGF3YXksIGJ1dCBhc3N1bWVkIHRvIGJlIHdoYXRldmVyIHNnIGlzIGlmIHRoZQorIyBsYXR0ZXIgaXMgbm9uemVybyBhbmQgd2UncmUgZHVtcGluZyBpbiB0ZXJtY2FwIGZvcm1hdC4KKyMKK3Rlcm1jYXBfaW5pdDIJCQlPVGkyCXN0cglpMgktCQktCVlCLS0tCXNlY29uZGFyeSBpbml0aWFsaXphdGlvbiBzdHJpbmcKK3Rlcm1jYXBfcmVzZXQJCQlPVHJzCXN0cglycwktCQktCVlCLUctCXRlcm1pbmFsIHJlc2V0IHN0cmluZworbWFnaWNfY29va2llX2dsaXRjaF91bAkJT1R1ZwludW0JdWcJLQkJLQlZQkNHRQludW1iZXIgb2YgYmxhbmtzIGxlZnQgYnkgdWwKKyMKKyMgT2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMuICBTb21lIGFyZSB1c2VkIGZvciB0ZXJtY2FwIHRyYW5zbGF0aW9uLiAgVGhlCisjIGNvZGUgdXNlcyB0aGUgJ09UJyBwcmVmaXggd2UgcHV0IG9uIG9ic29sZXRlIGNhcGFiaWxpdGllcyB0byBzdXBwcmVzcworIyBwcmludGluZyB0aGVtIGluIHRlcm1pbmZvIHNvdXJjZSBkdW1wcyBvZiBjb21waWxlZCBlbnRyaWVzLgorIworYmFja3NwYWNlc193aXRoX2JzCQlPVGJzCWJvb2wJYnMJLQkJLQlZQkNHRQl1c2VzIF5IIHRvIG1vdmUgbGVmdAorY3J0X25vX3Njcm9sbGluZwkJT1Rucwlib29sCW5zCS0JCS0JWUJDRy0JY3J0IGNhbm5vdCBzY3JvbGwKK25vX2NvcnJlY3RseV93b3JraW5nX2NyCQlPVG5jCWJvb2wJbmMJLQkJLQlZQkNHLQlubyB3YXkgdG8gZ28gdG8gc3RhcnQgb2YgbGluZQorY2FycmlhZ2VfcmV0dXJuX2RlbGF5CQlPVGRDCW51bQlkQwktCQktCVlCLUctCXBhZCBuZWVkZWQgZm9yIENSCituZXdfbGluZV9kZWxheQkJCU9UZE4JbnVtCWROCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgTEYKK2xpbmVmZWVkX2lmX25vdF9sZgkJT1RubAlzdHIJbmwJLQkJLQlZQkNHRQl1c2UgdG8gbW92ZSBkb3duCitiYWNrc3BhY2VfaWZfbm90X2JzCQlPVGJjCXN0cgliYwktCQktCVlCQ0dFCW1vdmUgbGVmdCwgaWYgbm90IF5ICisjCisjIEdOVSB0ZXJtY2FwIGxpYnJhcnkgZXh0ZW5zaW9ucy4gIFRoZSBHTlUgdGVybWNhcCBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgRW1hY3Mgbm8gbG9uZ2VyIHVzZXMgdGhlc2UsIGJ1dCBNVCBzaG93ZWQgdXAgaW4gcHJlLTkuMCB2ZXJzaW9ucyBvZiB0aGUKKyMgQlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuYW1lIGNsYXNoIHdpdGggdGVybWluZm8gTVQgaXMgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvOyBNVCBpcyBjb252ZXJ0ZWQgdG8ga20uCisjCitnbnVfaGFzX21ldGFfa2V5CQlPVE1UCWJvb2wJTVQJLQkJLQktLS0tRQloYXMgbWV0YSBrZXkKKyMgZ251X3RhYl93aWR0aAkJCU9UdHcJbnVtCXR3CS0JCS0JLS0tLUUJdGFiIHdpZHRoIGluIHNwYWNlcworIworIyBHTlUgdGVybWNhcCAqZG9lcyogaW5jbHVkZSB0aGUgZm9sbG93aW5nIGV4dGVuZGVkIGNhcGFiaWxpdHksICBPbmx5IHRoZQorIyBub3ctb2Jzb2xldGUgQW5uIEFyYm9yIHRlcm1pbmFscyB1c2VkIGl0LgorIworIyBnbnVfY2hhbmdlX3Njcm9sbF9yZWdpb24JT1RjUwlzdHIJY1MJLQkJLQktLS1HRQlhbHRlcm5hdGUgc2V0IHNjcm9sbGluZyByZWdpb24gCisjCisjIFRoZSBmb2xsb3dpbmcgY29tbWVudHMgZGVzY3JpYmUgY2FwbmFtZXMgc28gYW5jaWVudCB0aGF0IEkgYmVsaWV2ZSBubworIyBzb2Z0d2FyZSB1c2VzIHRoZW0gYW55IGxvbmdlci4gIFNvbWUgb2YgdGhlc2UgaGF2ZSB0byBnbyBiZWNhdXNlIHRoZXkKKyMgY2xhc2ggd2l0aCB0ZXJtaW5mbyBuYW1lcyBpbiB3YXlzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHR5cGUKKyMgaW5mb3JtYXRpb24uCisjCisjIFRoZXNlIG15dGluZm8gY29kZXMgYXJlIG5vdCB1c2VkIGluIHRoZSA0LjRCU0QgY3Vyc2VzIGNvZGUuICBUaGV5IGFyZQorIyBtYXJrZWQgb2Jzb2xldGUgaW4gdGhlIDQuNEJTRCBtYW51YWwgcGFnZXMuCisjCisjIFRoZXJlIGlzIG9uZSBjb25mbGljdCB3aXRoIHRlcm1pbmZvOyBtYSBpcyBpbiBib3RoLiAgVGhpcyBjb25mbGljdCBpcworIyByZXNvbHZlZCBieSB0eXBlIGluZm9ybWF0aW9uLgorIworIyBUaGUgYGtvJyBjYXBhYmlsaXR5IGlzIHRyYW5zbGF0ZWQgYnkgc3BlY2lhbCBjb2RlLiAgSXQgc2hvdWxkIGNvbnRhaW4gYQorIyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGtleXMuCisjIFRoZSBga24nIGNvZGUgaXMgYWNjZXB0ZWQgYnV0IGlnbm9yZWQuCisjCisjIFRoZSBgbWEnIGNhcGFiaWxpdHkgc2VlbXMgdG8gaGF2ZSBiZWVuIGRlc2lnbmVkIHRvIG1hcCBiZXR3ZWVuIHRoZSByb2d1ZSgyKQorIyBtb3Rpb24ga2V5cyAoaW5jbHVkaW5nIGpraGwpIGFuZCBjaGFyYWN0ZXJzIGVtaXR0ZWQgYnkgYXJyb3cga2V5cyBvbiBzb21lCisjIHByaW1pdGl2ZSBwcmUtQU5TSSB0ZXJtaW5hbHMuICBJdCdzIHNvIG9ic29sZXRlIGl0J3MgZm9zc2lsaXplZC4uLgorIworIyBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2YgbWVtb3J5X2xvY2tfYWJvdmUgYW5kIG1lbW9yeV91bmxvY2s6CisjICJZb3UgY2FuICdmcmVlemUnIGRhdGEgb24gdGhlIHNjcmVlbiBieSB0dXJuaW5nIG9uIE1lbW9yeSBMb2NrIGluIGEgbGluZSBvZgorIyB0ZXh0LiAgQWxsIGxpbmVzIGFib3ZlIHRoZSBjdXJzb3IncyBjdXJyZW50IGxpbmUgYmVjb21lIGxvY2tlZCBpbiBwbGFjZSBvbgorIyB0aGUgc2NyZWVuLiAgVGhlbiBlbnRlciBkYXRhIG5vcm1hbGx5LiAgV2hlbiB0aGUgc2NyZWVuIGZpbGxzIHVwLCBhbnkKKyMgZnVydGhlciBkYXRhIGVudGVyZWQgZm9yY2VzIHRoZSBmaXJzdCBsaW5lIG9mIHVuZnJvemVuIGxpbmUgdGV4dCB0byBzY3JvbGwKKyMgdW5kZXIgdGhlIGZyb3plbiBkYXRhLiAgTGluZXMgc2Nyb2xsZWQgb2ZmIHRoZSBzY3JlZW4gYXJlIGluc2VydGVkIGludG8KKyMgbWVtb3J5IGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgZmlyc3QgZnJvemVuIGxpbmUuIiAoZnJvbSB0aGUgSFAgNzAwLzk2CisjIFVzZXIncyBtYW51YWwpLiAgVlQxMDAvQU5TSSBtZW1vcnkgbG9jayBzZXQgaXMgXEVbPjJoLCByZXNldCBpcyBcRVs+MmwuCisjCisjIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0ZXJtaW5mbyBhcmUgc3VwcG9zZWQgdG8gYmVoYXZlIGFzIHRob3VnaCB4ciBpcworIyBhbHdheXMgdHJ1ZS4KKyMKK2xpbmVmZWVkX2lzX25ld2xpbmUJCU9UTkwJYm9vbAlOTAktCQktCVlCLS0tCW1vdmUgZG93biB3aXRoIFxuCisjIGV2ZW5fcGFyaXR5CQkJT1RFUAlib29sCUVQCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgZXZlbiBwYXJpdHkKKyMgb2RkX3Bhcml0eQkJCU9UT1AJYm9vbAlPUAktCQktCS1CLS0tCXRlcm1pbmFsIHJlcXVpcmVzIG9kZCBwYXJpdHkKKyMgaGFsZl9kdXBsZXgJCQlPVEhECWJvb2wJSEQJLQkJLQktQi0tLQl0ZXJtaW5hbCBpcyBoYWxmLWR1cGxleAorIyBsb3dlcl9jYXNlX29ubHkJCU9UTEMJYm9vbAlMQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IGxvd2VyIGNhc2UKKyMgdXBwZXJfY2FzZV9vbmx5CQlPVFVDCWJvb2wJVUMJLQkJLQktQi0tLQl0ZXJtaW5hbCBoYXMgb25seSB1cHBlciBjYXNlCitiYWNrc3BhY2VfZGVsYXkJCQlPVGRCCW51bQlkQgktCQktCVlCLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5ICisjIGZvcm1fZmVlZF9kZWxheQkJT1RkRgludW0JZEYJLQkJLQktQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeTAoraG9yaXpvbnRhbF90YWJfZGVsYXkJCU9UZFQJbnVtCWRUCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkkKKyMgdmVydGljYWxfdGFiX2RlbGF5CQlPVGRWCW51bQlkVgktCQktCS1CLS0tCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5WCitudW1iZXJfb2ZfZnVuY3Rpb25fa2V5cwkJT1RrbgludW0Ja24JLQkJLQktQi1HLQljb3VudCBvZiBmdW5jdGlvbiBrZXlzCitvdGhlcl9ub25fZnVuY3Rpb25fa2V5cwkJT1RrbwlzdHIJa28JLQkJLQktQi1HLQlsaXN0IG9mIHNlbGYtbWFwcGVkIGtleWNhcHMKK2Fycm93X2tleV9tYXAJCQlPVG1hCXN0cgltYQktCQktCVlCQy0tCW1hcCBhcnJvdyBrZXlzIHJvZ3VlKDEpIG1vdGlvbiBrZXlzCisjIG1lbW9yeV9sb2NrX2Fib3ZlCQlPVG1sCXN0cgltbAktCQktCS1CLS0tCWxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKKyMgbWVtb3J5X3VubG9jawkJCU9UbXUJc3RyCW11CS0JCS0JLUItLS0JdW5sb2NrIHZpc2libGUgc2NyZWVuIG1lbW9yeSBhYm92ZSB0aGUgY3VycmVudCBsaW5lCitoYXNfaGFyZHdhcmVfdGFicwkJT1RwdAlib29sCXB0CS0JCS0JWUItLS0JaGFzIDgtY2hhciB0YWJzIGludm9rZWQgd2l0aCBeSQorcmV0dXJuX2RvZXNfY2xyX2VvbAkJT1R4cglib29sCXhyCS0JCS0JWUItLS0JcmV0dXJuIGNsZWFycyB0aGUgbGluZQorIyB0ZWtfNDAyNV9pbnNlcnRfbGluZQkJT1R4eAlib29sCXh4CS0JCS0JLUJDLS0JVGVrdHJvbml4IDQwMjUgaW5zZXJ0LWxpbmUgZ2xpdGNoCisjCisjIG15dGluZm8gZGVzY3JpYmVkIHRoaXMgYXMgYSB0ZXJtY2FwIGNhcGFiaWxpdHksIGJ1dCBpdCdzIG5vdCBsaXN0ZWQgaW4gdGhlCisjIDQuNEJTRCBtYW4gcGFnZXMsIGFuZCBub3QgZm91bmQgaW4gdGhlIDQuNEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgbmN1cnNlcworIyBwYWNrYWdlLCBsaWtlIFN5c3RlbSBWLCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbHdheXMgdHJ1ZS4KKyMKKyMgcmluZF9vbmx5X2F0X3RvcAkJT1R4cQlib29sCXhxCS0JCS0JLS0tLS0JcmV2ZXJzZSBpbmRleCBvbmx5IHdvcmtzIGZyb20gdG9wIGxpbmUKKyMKKyMgVW5pdmVyc2l0eSBvZiBXYXRlcmxvbyB0ZXJtY2FwIGV4dGVuc2lvbnMgKGFzIGRlc2NyaWJlZCBpbiBteXRpbmZvKS4KKyMgVGhlIGB4bCcgdGVybWNhcCBmaWxlIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdAorIyBiZSByZXNvbHZlZCBieSBhIHR5cGUgY2hlY2suICBUaGUgZGVzY3JpcHRpb25zIGFyZSBndWVzc2VzIGZyb20gd2hhdCB3YXMKKyMgaW4gdGhlIG15dGluZm8gdGFibGVzLiAKKyMKKyMga2V5X2ludGVycnVwdF9jaGFyCQlPVGtpCXN0cglraQktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgaW50ZXJydXB0IGtleSAoPykKKyMga2V5X2tpbGxfY2hhcgkJCU9Ua2sJc3RyCWtrCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBraWxsIGtleSAoPykKKyMga2V5X3N1c3BlbmRfY2hhcgkJT1RreglzdHIJa3oJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IHN1c3BlbmQga2V5ICg/KQorIyBpbml0aWFsaXphdGlvbl9tZXNzeQkJT1R4Ywlib29sCXhjCS0JCS0JLS0tLS0JaW5pdGlhbGl6YXRpb24gbGVhdmVzIGdhcmJhZ2Ugb24gdGhlIHNjcmVlbiAoPykKKyMgaW5kX2F0X2JvdHRvbV9kb2VzX2NyCQlPVHhsCWJvb2wJeGwJLQkJLQktLS0tLQlpbmRleCBkb2VzIGEgY2FycmlhZ2UgcmV0dXJuCisjCisjIE5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyB1bmlxdWUgdG8gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlLgorIyBTUiBjbGFzaGVzIHdpdGggYSB0ZXJtaW5mbyBuYW1lOyB0aGlzIGFtYmlndWl0eSBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgYSB0eXBlCisjIGNoZWNrLgorIworIyBzY3JvbGxfbGVmdAkJCU9Uc2wxCXN0cglTbAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQKKyMgc2Nyb2xsX3JpZ2h0CQkJT1RzcjEJc3RyCVNyCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQKKyMgcGFybV9zY3JvbGxfbGVmdAkJT1RzbAlzdHIJU0wJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIGxlZnR3YXJkICMxIGNoYXJhY3RlcnMKKyMgcGFybV9zY3JvbGxfcmlnaHQJCU9Uc3IJc3RyCVNSCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQgIzEgY2hhcmFjdGVycworIworIyBUaGUgbXl0aW5mbyBjYXBhYmlsaXRpZXMgZW5kIGhlcmUuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFhlbml4IGRlZmluZWQgaXRzIG93biBzZXQgb2YgZm9ybXMtZHJhd2luZyBjYXBhYmlsaXRpZXM6CisjCisjIGNhcAlJQk0gQVNDSUkJZGVzY3JpcHRpb24gICAgICAgICAgICAgQUNTICAgICAgICAgCUFTQ0lJCisjIC0tLQktLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tCS0tLS0tLQorIyBHMQkxOTEgXDI3NyBNLT8Jc2luZ2xlIHVwcGVyIHJpZ2h0ICAgCUFDU19VUkNPUk5FUgorIyBHMgkyMTggXDMzMiBNLVoJc2luZ2xlIHVwcGVyIGxlZnQJQUNTX1VMQ09STkVSCisjIEczCTE5MiBcMzAwIE0tQAlzaW5nbGUgbG93ZXIgbGVmdAlBQ1NfTExDT1JORVIKKyMgRzQJMjE3IFwzMzEgTS1ZCXNpbmdsZSBsb3dlciByaWdodAlBQ1NfTFJDT1JORVIKKyMgRzUJMTg3IFwyNzMgTS07CWRvdWJsZSB1cHBlciByaWdodAorIyBHNgkyMDEgXDMxMSBNLUkJZG91YmxlIHVwcGVyIGxlZnQKKyMgRzcJMjAwIFwzMTAgTS1ICWRvdWJsZSBsb3dlciBsZWZ0CisjIEc4CTE4OCBcMjc0IE0tPAlkb3VibGUgbG93ZXIgcmlnaHQKKyMgR0MJMTk3IFwzMDUgTS1FCXNpbmdsZSBpbnRlcnNlY3Rpb24JQUNTX1BMVVMJXyBfCisjIEdECTE5NCBcMzAyIE0tQglzaW5nbGUgZG93bi10aWNrCUFDU19UVEVFCSB8CisjIEdICTE5NiBcMzA0IE0tRAlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCUFDU19ITElORQorIyBHTAkxODAgXDI2NCBNLTQJc2luZ2xlIGxlZnQgdGljawlBQ1NfUlRFRQktfAorIyBHUgkxOTUgXDMwMyBNLUMJc2luZ2xlIHJpZ2h0IHRpY2sJQUNTX0xURUUJfC0KKyMgR1UJMTkzIFwzMDEgTS1BCXNpbmdsZSB1cCB0aWNrCQlBQ1NfQlRFRQlffF8KKyMgR1YJMTc5IFwyNjMgTS0zCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCUFDU19WTElORQorIyBHYwkyMDYgXDMxNiBNLU4JZG91YmxlIGludGVyc2VjdGlvbgorIyBHZAkyMDMgXDMxMyBNLUsJZG91YmxlIGRvd24gdGljaworIyBHaAkyMDUgXDMxNSBNLU0JZG91YmxlIGhvcml6b250YWwgbGluZQorIyBHbAkyMDQgXDIwNCBNLUwJZG91YmxlIGxlZnQgdGljaworIyBHcgkxODUgXDI3MSBNLTkJZG91YmxlIHJpZ2h0IHRpY2sKKyMgR3UJMjAyIFwzMTIgTS1KCWRvdWJsZSB1cCB0aWNrCisjIEd2CTE4NiBcMjcyIE0tOglkb3VibGUgdmVydGljYWwgbGluZQorIworIyBUaGUgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUgdGhlIHNpbmdsZS1saW5lIGNhcHMgYW5kIGRpc2NhcmQgdGhlIG90aGVycworIyAodmlhIElHTk9SRSBhbGlhc2VzIGZ1cnRoZXIgZG93bikuICBXZSBkb24ndCB3YW50IHRvIGRvIG5vcm1hbCBwYWQgCisjIHRyYW5zbGF0aW9uIG9uIHRoZXNlLCB0aGV5J3JlIG9mdGVuIHNpbmdsZS1jaGFyYWN0ZXIgcHJpbnRhYmxlIEFTQ0lJCisjIHN0cmluZ3MgdGhhdCBoYXBwZW4gdG8gYmUgbnVtZXJpY3MuICBUaGVyZSdzIGF3ayBjb2RlIGluIHBhcmFtZXRyaXplZC5zaAorIyB0aGF0IGRldGVjdHMgdGhlIGFjc18gcHJlZml4IGFuZCB1c2VzIGl0IHRvIHN1cHByZXNzIHBhZCB0cmFuc2xhdGlvbi4KKyMgVGhlc2UgdGVybWluZm8gbmFtZXMgYXJlIGludmVudGVkLgorIworYWNzX3VsY29ybmVyCQkJT1RHMglzdHIJRzIJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgbGVmdAorYWNzX2xsY29ybmVyCQkJT1RHMwlzdHIJRzMJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgbGVmdAorYWNzX3VyY29ybmVyCQkJT1RHMQlzdHIJRzEJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgcmlnaHQKK2Fjc19scmNvcm5lcgkJCU9URzQJc3RyCUc0CS0JCS0JLS0tLS0Jc2luZ2xlIGxvd2VyIHJpZ2h0CithY3NfbHRlZQkJCU9UR1IJc3RyCUdSCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIHJpZ2h0CithY3NfcnRlZQkJCU9UR0wJc3RyCUdMCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIGxlZnQKK2Fjc19idGVlCQkJT1RHVQlzdHIJR1UJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgdXAKK2Fjc190dGVlCQkJT1RHRAlzdHIJR0QJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgZG93bgorYWNzX2hsaW5lCQkJT1RHSAlzdHIJR0gJLQkJLQktLS0tLQlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCithY3NfdmxpbmUJCQlPVEdWCXN0cglHVgktCQktCS0tLS0tCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCithY3NfcGx1cwkJCU9UR0MJc3RyCUdDCS0JCS0JLS0tLS0Jc2luZ2xlIGludGVyc2VjdGlvbgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVEVSTUlORk8gRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGlzIHNlY3Rpb24gaXMgYWxtb3N0IGFsbCBjb21tZW50cy4gIFdoYXQgaXQncyBtYWlubHkgZm9yIGlzIHRvIGRlc2NyaWJlCisjIHdoYXQgY2FwYWJpbGl0aWVzIG5lZWQgdG8gYmUgc3F1ZWV6ZWQgb3V0IHRvIGdldCBkb3duIHRvIHRoZSBYU0kgQ3Vyc2VzCisjIHN0YW5kYXJkIHNldC4gIFRoZXkgYXJlIGZsYWdnZWQgd2l0aCBLLgorIworIyBIUCBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBIUAorIyB0ZXJtaW5mbyBmaWxlcy4gIEV4Y2VwdCBmb3IgbWVtb3J5X2xvY2sgYW5kIG1lbW9yeV91bmxvY2ssIHRoZXkgYXJlCisjIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gU1ZyNCBleHRlbnNpb25zLCBidXQgdGhleSBtYWtlIHRoZSBiaW5hcnkgZm9ybWF0CisjIGRpZmZlcmVudC4gIEdycnIuLi4uCisjCittZW1vcnlfbG9jawkJCW1lbWwJc3RyCW1sCS0JCS0JLS0tLUsJbG9jayBtZW1vcnkgYWJvdmUgY3Vyc29yCittZW1vcnlfdW5sb2NrCQkJbWVtdQlzdHIJbXUJLQkJLQktLS0tSwl1bmxvY2sgbWVtb3J5CisjcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKKyNsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworI2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKKyNrZXlfZjExCQkJa2YxMQlzdHIJRjEJLQkJLQktLS0tLQlGMTEgZnVuY3Rpb24ga2V5Cisja2V5X2YxMgkJCWtmMTIJc3RyCUYyCS0JCS0JLS0tLS0JRjEyIGZ1bmN0aW9uIGtleQorI2tleV9mMTMJCQlrZjEzCXN0cglGMwktCQktCS0tLS0tCUYxMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE0CQkJa2YxNAlzdHIJRjQJLQkJLQktLS0tLQlGMTQgZnVuY3Rpb24ga2V5Cisja2V5X2YxNQkJCWtmMTUJc3RyCUY1CS0JCS0JLS0tLS0JRjE1IGZ1bmN0aW9uIGtleQorI2tleV9mMTYJCQlrZjE2CXN0cglGNgktCQktCS0tLS0tCUYxNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjE3CQkJa2YxNwlzdHIJRjcJLQkJLQktLS0tLQlGMTcgZnVuY3Rpb24ga2V5Cisja2V5X2YxOAkJCWtmMTgJc3RyCUY4CS0JCS0JLS0tLS0JRjE4IGZ1bmN0aW9uIGtleQorI2tleV9mMTkJCQlrZjE5CXN0cglGOQktCQktCS0tLS0tCUYxOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIwCQkJa2YyMAlzdHIJRkEJLQkJLQktLS0tLQlGMjAgZnVuY3Rpb24ga2V5Cisja2V5X2YyMQkJCWtmMjEJc3RyCUZCCS0JCS0JLS0tLS0JRjIxIGZ1bmN0aW9uIGtleQorI2tleV9mMjIJCQlrZjIyCXN0cglGQwktCQktCS0tLS0tCUYyMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjIzCQkJa2YyMwlzdHIJRkQJLQkJLQktLS0tLQlGMjMgZnVuY3Rpb24ga2V5Cisja2V5X2YyNAkJCWtmMjQJc3RyCUZFCS0JCS0JLS0tLS0JRjI0IGZ1bmN0aW9uIGtleQorI2tleV9mMjUJCQlrZjI1CXN0cglGRgktCQktCS0tLS0tCUYyNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjI2CQkJa2YyNglzdHIJRkcJLQkJLQktLS0tLQlGMjYgZnVuY3Rpb24ga2V5Cisja2V5X2YyNwkJCWtmMjcJc3RyCUZICS0JCS0JLS0tLS0JRjI3IGZ1bmN0aW9uIGtleQorI2tleV9mMjgJCQlrZjI4CXN0cglGSQktCQktCS0tLS0tCUYyOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI5CQkJa2YyOQlzdHIJRkoJLQkJLQktLS0tLQlGMjkgZnVuY3Rpb24ga2V5Cisja2V5X2YzMAkJCWtmMzAJc3RyCUZLCS0JCS0JLS0tLS0JRjMwIGZ1bmN0aW9uIGtleQorI2tleV9mMzEJCQlrZjMxCXN0cglGTAktCQktCS0tLS0tCUYzMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMyCQkJa2YzMglzdHIJRk0JLQkJLQktLS0tLQlGMzIgZnVuY3Rpb24ga2V5Cisja2V5X2YzMwkJCWtmMzMJc3RyCUZOCS0JCS0JLS0tLS0JRjMzIGZ1bmN0aW9uIGtleQorI2tleV9mMzQJCQlrZjM0CXN0cglGTwktCQktCS0tLS0tCUYzNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM1CQkJa2YzNQlzdHIJRlAJLQkJLQktLS0tLQlGMzUgZnVuY3Rpb24ga2V5Cisja2V5X2YzNgkJCWtmMzYJc3RyCUZRCS0JCS0JLS0tLS0JRjM2IGZ1bmN0aW9uIGtleQorI2tleV9mMzcJCQlrZjM3CXN0cglGUgktCQktCS0tLS0tCUYzNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM4CQkJa2YzOAlzdHIJRlMJLQkJLQktLS0tLQlGMzggZnVuY3Rpb24ga2V5Cisja2V5X2YzOQkJCWtmMzkJc3RyCUZUCS0JCS0JLS0tLS0JRjM5IGZ1bmN0aW9uIGtleQorI2tleV9mNDAJCQlrZjQwCXN0cglGVQktCQktCS0tLS0tCUY0MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQxCQkJa2Y0MQlzdHIJRlYJLQkJLQktLS0tLQlGNDEgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MgkJCWtmNDIJc3RyCUZXCS0JCS0JLS0tLS0JRjQyIGZ1bmN0aW9uIGtleQorI2tleV9mNDMJCQlrZjQzCXN0cglGWAktCQktCS0tLS0tCUY0MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ0CQkJa2Y0NAlzdHIJRlkJLQkJLQktLS0tLQlGNDQgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NQkJCWtmNDUJc3RyCUZaCS0JCS0JLS0tLS0JRjQ1IGZ1bmN0aW9uIGtleQorI2tleV9mNDYJCQlrZjQ2CXN0cglGYQktCQktCS0tLS0tCUY0NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ3CQkJa2Y0NwlzdHIJRmIJLQkJLQktLS0tLQlGNDcgZnVuY3Rpb24ga2V5Cisja2V5X2Y0OAkJCWtmNDgJc3RyCUZjCS0JCS0JLS0tLS0JRjQ4IGZ1bmN0aW9uIGtleQorI2tleV9mNDkJCQlrZjQ5CXN0cglGZAktCQktCS0tLS0tCUY0OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUwCQkJa2Y1MAlzdHIJRmUJLQkJLQktLS0tLQlGNTAgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MQkJCWtmNTEJc3RyCUZmCS0JCS0JLS0tLS0JRjUxIGZ1bmN0aW9uIGtleQorI2tleV9mNTIJCQlrZjUyCXN0cglGZwktCQktCS0tLS0tCUY1MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjUzCQkJa2Y1MwlzdHIJRmgJLQkJLQktLS0tLQlGNTMgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NAkJCWtmNTQJc3RyCUZpCS0JCS0JLS0tLS0JRjU0IGZ1bmN0aW9uIGtleQorI2tleV9mNTUJCQlrZjU1CXN0cglGagktCQktCS0tLS0tCUY1NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjU2CQkJa2Y1NglzdHIJRmsJLQkJLQktLS0tLQlGNTYgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NwkJCWtmNTcJc3RyCUZsCS0JCS0JLS0tLS0JRjU3IGZ1bmN0aW9uIGtleQorI2tleV9mNTgJCQlrZjU4CXN0cglGbQktCQktCS0tLS0tCUY1OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU5CQkJa2Y1OQlzdHIJRm4JLQkJLQktLS0tLQlGNTkgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MAkJCWtmNjAJc3RyCUZvCS0JCS0JLS0tLS0JRjYwIGZ1bmN0aW9uIGtleQorI2tleV9mNjEJCQlrZjYxCXN0cglGcAktCQktCS0tLS0tCUY2MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYyCQkJa2Y2MglzdHIJRnEJLQkJLQktLS0tLQlGNjIgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MwkJCWtmNjMJc3RyCUZyCS0JCS0JLS0tLS0JRjYzIGZ1bmN0aW9uIGtleQorIworIyBJQk0gZXh0ZW5zaW9ucworIworIyBUaGVzZSBleHRlbnNpb25zIGZvbGxvdyBwdHJfbm9uIChyZXBsYWNpbmcgZXZlcnl0aGluZyBhZnRlciBpdCkgaW4gSUJNCisjIHRlcm1pbmZvIGZpbGVzLgorIworIyBUaGUgcGxhY2VzIGluIHRoZSBib3hbMTJdIGNhcGFiaWxpdGllcyBjb3JyZXNwb25kIHRvIGFjc2MgY2hhcmFjdGVycywgaGVyZSBpcworIyB0aGUgbWFwcGluZzoKKyMKKyMJYm94MVswXSAgPSBBQ1NfVUxDT1JORVIKKyMJYm94MVsxXSAgPSBBQ1NfSExJTkUJCisjCWJveDFbMl0gID0gQUNTX1VSQ09STkVSCisjCWJveDFbM10gID0gQUNTX1ZMSU5FCisjCWJveDFbNF0gID0gQUNTX0xSQ09STkVSCisjCWJveDFbNV0gID0gQUNTX0xMQ09STkVSCisjCWJveDFbNl0gID0gQUNTX1RURUUKKyMJYm94MVs3XSAgPSBBQ1NfUlRFRQorIwlib3gxWzhdICA9IEFDU19CVEVFCisjCWJveDFbOV0gID0gQUNTX0xURUUKKyMJYm94MVsxMF0gPSBBQ1NfUExVUworIworIyBUaGUgYm94MiBjaGFyYWN0ZXJzIGFyZSB0aGUgZG91YmxlLWxpbmUgdmVyc2lvbnMgb2YgdGhlc2UgZm9ybXMgZ3JhcGhpY3MuCisjCitib3hfY2hhcnNfMQkJCWJveDEJc3RyCWJ4CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgcHJpbWFyeSBzZXQKKyNib3hfY2hhcnNfMgkJCWJveDIJc3RyCWJ5CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgc2Vjb25kYXJ5IHNldAorI2JveF9hdHRyXzEJCQliYXR0MQlzdHIJQngJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gxCisjYm94X2F0dHJfMgkJCWJhdHQyCXN0cglCeQktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDIKKyNjb2xvcl9iZ18wCQkJY29sYjAJc3RyCWQwCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAwCisjY29sb3JfYmdfMQkJCWNvbGIxCXN0cglkMQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMQorI2NvbG9yX2JnXzIJCQljb2xiMglzdHIJZDIJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDIKKyNjb2xvcl9iZ18zCQkJY29sYjMJc3RyCWQzCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAzCisjY29sb3JfYmdfNAkJCWNvbGI0CXN0cglkNAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNAorI2NvbG9yX2JnXzUJCQljb2xiNQlzdHIJZDUJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDUKKyNjb2xvcl9iZ182CQkJY29sYjYJc3RyCWQ2CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA2CisjY29sb3JfYmdfNwkJCWNvbGI3CXN0cglkNwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNworI2NvbG9yX2ZnXzAJCQljb2xmMAlzdHIJYzAJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9mZ18xCQkJY29sZjEJc3RyCWMxCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAxCisjY29sb3JfZmdfMgkJCWNvbGYyCXN0cgljMgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMgorI2NvbG9yX2ZnXzMJCQljb2xmMwlzdHIJYzMJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9mZ180CQkJY29sZjQJc3RyCWM0CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA0CisjY29sb3JfZmdfNQkJCWNvbGY1CXN0cgljNQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNQorI2NvbG9yX2ZnXzYJCQljb2xmNglzdHIJYzYJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9mZ183CQkJY29sZjcJc3RyCWM3CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA3CisjZm9udF8wCQkJCWZvbnQwCXN0cglmMAktCQktCS0tLS0tCXNlbGVjdCBmb250IDAKKyNmb250XzEJCQkJZm9udDEJc3RyCWYxCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMQorI2ZvbnRfMgkJCQlmb250MglzdHIJZjIJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAyCisjZm9udF8zCQkJCWZvbnQzCXN0cglmMwktCQktCS0tLS0tCXNlbGVjdCBmb250IDMKKyNmb250XzQJCQkJZm9udDQJc3RyCWY0CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNAorI2ZvbnRfNQkJCQlmb250NQlzdHIJZjUJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA1CisjZm9udF82CQkJCWZvbnQ2CXN0cglmNgktCQktCS0tLS1LCXNlbGVjdCBmb250IDYKKyNmb250XzcJCQkJZm9udDcJc3RyCWY3CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNworI2tleV9iYWNrX3RhYgkJCWtidGFiCXN0cglrMAktCQktCS0tLS0tCWJhY2t0YWIga2V5Cisja2V5X2RvCQkJCWtkbwlzdHIJa2kJLQkJLQktLS0tSwlkbyByZXF1ZXN0IGtleQorI2tleV9jb21tYW5kCQkJa2NtZAlzdHIJa2QJLQkJLQktLS0tSwljb21tYW5kLXJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmRfcGFuZQkJa2NwbglzdHIJa1cJLQkJLQktLS0tSwljb21tYW5kLXBhbmUga2V5Cisja2V5X2VuZAkJCWtlbmQJc3RyCWt3CS0JCS0JLS0tLS0JZW5kIGtleQorI2tleV9oZWxwCQkJa2hscAlzdHIJa3EJLQkJLQktLS0tLQloZWxwIGtleQorI2tleV9uZXdsaW5lCQkJa25sCXN0cglubAktCQktCS0tLS1LCW5ld2xpbmUga2V5Cisja2V5X25leHRfcGFuZQkJCWtucG4Jc3RyCWt2CS0JCS0JLS0tLUsJbmV4dC1wYW5lIGtleQorI2tleV9wcmV2X2NtZAkJCWtwcG4Jc3RyCWtwCS0JCS0JLS0tLUsJcHJldmlvdXMtY29tbWFuZCBrZXkKKyNrZXlfcHJldl9wYW5lCQkJa3BwbglzdHIJa1YJLQkJLQktLS0tSwlwcmV2aW91cy1wYW5lIGtleQorI2tleV9xdWl0CQkJa3F1aXQJc3RyCWtRCS0JCS0JLS0tLUsJcXVpdCBrZXkKKyNrZXlfc2VsZWN0CQkJa3NlbAlzdHIJa1UJLQkJLQktLS0tLQlzZWxlY3Qga2V5Cisja2V5X3Njcm9sbF9sZWZ0CQlrc2NsCXN0cglregktCQktCS0tLS1LCXNjcm9sbCBsZWZ0Cisja2V5X3Njcm9sbF9yaWdodAkJa3NjcglzdHIJa1oJLQkJLQktLS0tSwlzY3JvbGwgcmlnaHQKKyNrZXlfdGFiCQkJa3RhYglzdHIJa28JLQkJLQktLS0tSwl0YWIga2V5Cisja2V5X3NtYXBfaW4xCQkJa21wZjEJc3RyCUt2CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgaW5wdXQKKyNrZXlfc21hcF9vdXQxCQkJa21wdDEJc3RyCUtWCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgb3V0cHV0Cisja2V5X3NtYXBfaW4yCQkJa21wZjIJc3RyCUt3CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgaW5wdXQKKyNrZXlfc21hcF9vdXQyCQkJa21wdDIJc3RyCUtXCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgb3V0cHV0Cisja2V5X3NtYXBfaW4zCQkJa21wZjMJc3RyCUt4CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgaW5wdXQKKyNrZXlfc21hcF9vdXQzCQkJa21wdDMJc3RyCUtYCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgb3V0cHV0Cisja2V5X3NtYXBfaW40CQkJa21wZjQJc3RyCUt5CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgaW5wdXQKKyNrZXlfc21hcF9vdXQ0CQkJa21wdDQJc3RyCUtZCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgb3V0cHV0Cisja2V5X3NtYXBfaW41CQkJa21wZjUJc3RyCUt6CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgaW5wdXQKKyNrZXlfc21hcF9vdXQ1CQkJa21wdDUJc3RyCUtaCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgb3V0cHV0CisjYXBwbF9kZWZpbmVkX3N0cgkJYXBzdHIJc3RyCXphCS0JCS0JLS0tLUsJYXBwbGljYXRpb24tZGVmaW5lZCBzdHJpbmcKKyMgVGhlIGtleV9zbWFwX2luWzY3ODldIGFuZCBrZXlfc21hcF9vdXRbNjc4OV0gY2FwYWJpbGl0aWVzIGFyZW4ndCBkZXNjcmliZWQgaW4KKyMgdGhlIElCTSBtYW51YWwgcGFnZXMsIHNvIHRoZSBjYXAgbmFtZSBzdHJpbmdzIGFyZSBndWVzc2VzLiAgVGhlIHRlcm1pbmZvCisjIG5hbWVzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHJpZ2h0LCB0aGUgdGVybWNhcCBvbmVzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuCisja2V5X3NtYXBfaW42CQkJa21wZjYJc3RyCWshCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgaW5wdXQKKyNrZXlfc21hcF9vdXQ2CQkJa21wdDYJc3RyCUtACS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgb3V0cHV0Cisja2V5X3NtYXBfaW43CQkJa21wZjcJc3RyCWsjCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgaW5wdXQKKyNrZXlfc21hcF9vdXQ3CQkJa21wdDcJc3RyCUskCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgb3V0cHV0Cisja2V5X3NtYXBfaW44CQkJa21wZjgJc3RyCWslCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggaW5wdXQKKyNrZXlfc21hcF9vdXQ4CQkJa21wdDgJc3RyCUteCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggb3V0cHV0Cisja2V5X3NtYXBfaW45CQkJa21wZjkJc3RyCWsmCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgaW5wdXQKKyNrZXlfc21hcF9vdXQ5CQkJa21wdDkJc3RyCUsqCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgb3V0cHV0CisjIFVuZG9jdW1lbnRlZCBjYXBhYmlsaXRpZXMgZW5kIGhlcmUKKyNrZXlfc2YxCQkJa3NmMQlzdHIJUzEJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxCisja2V5X3NmMgkJCWtzZjIJc3RyCVMyCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMgorI2tleV9zZjMJCQlrc2YzCXN0cglTMwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDMKKyNrZXlfc2Y0CQkJa3NmNAlzdHIJUzQJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA0Cisja2V5X3NmNQkJCWtzZjUJc3RyCVM1CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNQorI2tleV9zZjYJCQlrc2Y2CXN0cglTNgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDYKKyNrZXlfc2Y3CQkJa3NmNwlzdHIJUzcJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA3Cisja2V5X3NmOAkJCWtzZjgJc3RyCVM4CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOAorI2tleV9zZjkJCQlrc2Y5CXN0cglTOQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDkKKyNrZXlfc2YxMAkJCWtzZjEwCXN0cglTQQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEwCisjIEFJWCB2ZXJzaW9uIDMgZG9jdW1lbnRzIGRpZmZlcmVudCBjb2RlcyBmb3IgRjExLCBGMTIgYW5kIGRvZXMgbm90IG1lbnRpb24KKyMgRjEzLUY2NC4gIEFJWCB2ZXJzaW9uIDQgdXNlcyB0aGUgc2FtZSBuYW1pbmcgZm9yIEYwLUY2MyBhcyBhYm92ZS4KKyNrZXlfZjExCQkJa2YxMQlzdHIJazwJLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTEKKyNrZXlfZjEyCQkJa2YxMglzdHIJaz4JLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTIKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyNrZXlfYWN0aW9uCQkJa2FjdAlzdHIJa0oJLQkJLQktLS0tSwlzZW50IGJ5IGFjdGlvbiBrZXkKKyMgVGhlIElCTSBkb2NzIHNheSB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGZvciB0YWJsZS1kcmF3aW5nLCBhbmQgYXJlCisjIHZhbGlkIG9ubHkgZm9yIGFpeHRlcm0gZGVzY3JpcHRpb25zLgorI2VudGVyX3RvcGxpbmVfbW9kZQkJdG9wbAlzdHIJdHAJLQkJLQktLS0tSwlzdGFydCB0b3AtbGluZSBtb2RlCisjZW50ZXJfYm90dG9tX21vZGUJCWJ0bWwJc3RyCWJtCS0JCS0JLS0tLUsJc3RhcnQgYm90dG9tLWxpbmUgbW9kZQorI2VudGVyX3J2ZXJ0X21vZGUJCXJ2ZXJ0CXN0cglydgktCQktCS0tLS1LCXN0YXJ0IHJpZ2h0LXZlcnRpY2FsIG1vZGUKKyNlbnRlcl9sdmVydF9tb2RlCQlsdmVydAlzdHIJbHYJLQkJLQktLS0tSwlzdGFydCBsZWZ0LXZlcnRpY2FsIG1vZGUKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEFMSUFTIERFQ0xBUkFUSU9OUworIworIyBIZXJlIHdlIHNldCB1cCBhbGlhc2VzIGZvciB0cmFuc2xhdGluZyBleHRlbnNpb25zIGludG8gc3RhbmRhcmQgdGVybWluZm8uCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtY2FwIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBCU0QgYWxpYXNlczoKKyMKKyMgVGhpcyBpcyBhIGNvbW1vbiBlcnJvciBpbiBtYW55IHRlcm1jYXAgZmlsZXMuICBXZSdsbCBnZXQgbm90aWZpZWQgZHVyaW5nCisjIHRyYW5zbGF0aW9uIHdoZW4gdGhpcyAob3IgYW55IG90aGVyIGFsaWFzKSBmaXJlcy4KKyMKK2NhcGFsaWFzCXNiCXNyCUJTRAlzY3JvbGwgdGV4dCBkb3duCisjCisjIEFUJlQgZXh0ZW5zaW9uczoKKyMKKyMgVGhlIG9sZCBBVCZUIDU0MTAsIDU0MjAsIDU0MjUsIHBjNjMwMHBsdXMsIDYxMCwgYW5kIHM0IGVudHJpZXMgdXNlZCBhIHNldCBvZgorIyBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMuICBJdHMgc2lnbmF0dXJlIGlzIHRoZSBLTSBjYXBhYmlsaXR5LCB1c2VkIHRvIG5hbWUKKyMgc29tZSBzb3J0IG9mIGtleW1hcCBmaWxlLiAgRUUsIEJPLCBDSSwgQ1YsIFhTLCBEUywgRkwgYW5kIEZFIGFyZSBpbiB0aGlzCisjIHNldC4gIENvbW1lbnRzIGluIHRoZSBvcmlnaW5hbCwgYW5kIGEgbGl0dGxlIGNyb3NzLWNoZWNraW5nIHdpdGggb3RoZXIgQVQmVAorIyBkb2N1bWVudGF0aW9uLCBzZWVtIHRvIGVzdGFibGlzaCB0aGUgZm9sbG93aW5nIG1hcHBpbmdzOgorIworY2FwYWxpYXMJQk8JbXIJQVQmVAllbnRlcl9yZXZlcnNlX21vZGUKK2NhcGFsaWFzCUNJCXZpCUFUJlQJY3Vyc29yX2ludmlzaWJsZQorY2FwYWxpYXMJQ1YJdmUJQVQmVAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlEUwltaAlBVCZUCWVudGVyX2RpbV9tb2RlCisjY2FwYWxpYXMJRUUJbWUJQVQmVAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJRkUJTEYJQVQmVAlsYWJlbF9vbgorY2FwYWxpYXMJRkwJTE8JQVQmVAlsYWJlbF9vZmYKK2NhcGFsaWFzCVhTCW1rCUFUJlQJZW50ZXJfc2VjdXJlX21vZGUKKyMKKyMgV2UgY29tbWVudCBvdXQgRUUgYmVjYXVzZSB0aGUgY29uZmxpY3RpbmcgWEVOSVggRUUgaXMgbW9yZSBjb21tb24gaW4gCisjIG9sZCBlbnRyaWVzLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBUaGVzZSBhcmUgdGhlIG9uZXMgd2Uga25vdyBob3cgdG8gdHJhbnNsYXRlIGRpcmVjdGx5OgorIworY2FwYWxpYXMJRUUJbWgJWEVOSVgJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUdFCWFlCVhFTklYCWV4aXRfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJR1MJYXMJWEVOSVgJZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJQ0YJdmkJWEVOSVgJY3Vyc29yX2ludmlzCitjYXBhbGlhcwlDTwl2ZQlYRU5JWAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlFTglANwlYRU5JWAlrZXlfZW5kCitjYXBhbGlhcwlITQlraAlYRU5JWAlrZXlfaG9tZQorY2FwYWxpYXMJTEQJa0wJWEVOSVgJa2V5X2RsCitjYXBhbGlhcwlQRAlrTglYRU5JWAlrZXlfbnBhZ2UKK2NhcGFsaWFzCVBOCXBvCVhFTklYCXBydHJfb2ZmCitjYXBhbGlhcwlQUwlwZglYRU5JWAlwcnRyX29uCitjYXBhbGlhcwlQVQlrUAlYRU5JWAlrZXlfcHBhZ2UKK2NhcGFsaWFzCVJUCUA4CVhFTklYCWtlbnQKK2NhcGFsaWFzCVVQCWt1CVhFTklYCWtjdXUxCitjYXBhbGlhcwlHNglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VTENPUk5FUgorY2FwYWxpYXMJRzcJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTExDT1JORVIKK2NhcGFsaWFzCUc1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VSQ09STkVSCitjYXBhbGlhcwlHOAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MUkNPUk5FUgorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFRFRQorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUlRFRQorY2FwYWxpYXMJR3UJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfQlRFRQorY2FwYWxpYXMJR2QJSUdOT1JFCVhFTklYCWRvdWJsZSBBQ1NfVFRFRQorY2FwYWxpYXMJR2gJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfSExJTkUKK2NhcGFsaWFzCUd2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1ZMSU5FCitjYXBhbGlhcwlHYwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19QTFVTCitjYXBhbGlhcwlHRwlJR05PUkUJWEVOSVgJYWNzLWdsaXRjaAorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCWtxCSUxCUlCTQlrZXlfaGVscAorIworIyBJcmlzIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlIUwltaAlJUklTCWVudGVyX2RpbV9tb2RlCisjCisjIFRla3Ryb25peCBleHRlbnNpb25zOgorIworY2FwYWxpYXMJS0EJazsJVGVrCWtleV9mMTAKK2NhcGFsaWFzCUtCCUYxCVRlawlrZXlfZjExCitjYXBhbGlhcwlLQwlGMglUZWsJa2V5X2YxMgorY2FwYWxpYXMJS0QJRjMJVGVrCWtleV9mMTMKK2NhcGFsaWFzCUtFCUY0CVRlawlrZXlfZjE0CitjYXBhbGlhcwlLRglGNQlUZWsJa2V5X2YxNQorY2FwYWxpYXMJQkMJU2IJVGVrCXNldF9iYWNrZ3JvdW5kCitjYXBhbGlhcwlGQwlTZglUZWsJc2V0X2ZvcmVncm91bmQKKyMKKyMgVGhlcmUgYXJlIGFsc28gdGhlIGZvbGxvd2luZzoKKyMKKyMJWEVOSVgJWEVOSVggdmFyaWFibGUgbmFtZQluYW1lIGNsYXNoIHdpdGggdGVybWluZm8/CisjCS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwlDTAlrZXlfY2hhcl9sZWZ0CisjCUNSCWtleV9jaGFyX3JpZ2h0CisjCUNXCWtleV9jaGFuZ2Vfd2luZG93CisjCUhQCT8/CisjCUxGCWtleV9saW5lZmVlZCAJCWxhYmVsX29mZgorIwlOVQlrZXlfbmV4dF91bmxvY2tlZF9jZWxsCisjCVBMCT8/CisjCVBSCT8/CisjCVJDCWtleV9yZWNhbGMJCXJlbW92ZV9jbG9jaworIwlSRglrZXlfdG9nZ2xlX3JlZgkJcmVxX2Zvcl9pbnB1dAorIwlXTAlrZXlfd29yZF9sZWZ0CisjCVdSCWtleV93b3JkX3JpZ2h0CisjCisjIElmIHlvdSBrbm93IHdoYXQgYW55IG9mIHRoZSBxdWVzdGlvbi1tYXJrZWQgb25lcyBtZWFuLCBwbGVhc2UgdGVsbCB1cy4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWluZm8gYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitpbmZvYWxpYXMJZm9udDAJczBkcwlJQk0Jc2V0MF9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDEJczFkcwlJQk0Jc2V0MV9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDIJczJkcwlJQk0Jc2V0Ml9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDMJczNkcwlJQk0Jc2V0M19kZXNfc2VxCitpbmZvYWxpYXMJa2J0YWIJa2NidAlJQk0Ja2V5X2JhY2t0YWIKK2luZm9hbGlhcwlrc2VsCWtzbHQJSUJNCWtleV9zZWxlY3QKKyMKKyMgU29tZSBvdGhlcnMgYXJlIGlkZW50aWNhbCB0byBTVnI0L1hQRzQgY2FwYWJpbGl0aWVzLCBpbiBwYXJ0aWN1bGFyOgorIyBrY21kLCBrZW5kLCBraGxwLCBhbmQga2YxMS4uLmtmNjMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisjIExvY2FsIFZhcmlhYmxlczoKKyMgY2FzZS1mb2xkLXNlYXJjaDpuaWwKKyMgdHJ1bmNhdGUtbGluZXM6dAorIyBFbmQ6CmRpZmYgLS1naXQgYS9pbmNsdWRlL0NhcHMub3NmMXI1IGIvaW5jbHVkZS9DYXBzLm9zZjFyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWVhNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9DYXBzLm9zZjFyNQpAQCAtMCwwICsxLDEyNzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRGlja2V5CisjCisjICRJZDogQ2Fwcy5vc2YxcjUsdiAxLjQgMjAwNi8wNS8yNyAxNTozMzowNCB0b20gRXhwICQKKyMKKyMgVGhpcyBpcyBhbiBhZGFwdGF0aW9uIG9mIG5jdXJzZXMnIHRlcm1jYXAvdGVybWluZm8gY2FwYWJpbGl0eSB0YWJsZSwgd2hpY2gKKyMgaXMgZGVzaWduZWQgdG8gYWxpZ24gd2l0aCBPU0YvMSB2ZXJzaW9uIDUgKFRydTY0KSB0ZXJtaW5mby4KKyMKKyMgVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGluaXRpYWxpemVycyBmb3IgdGFibGVzIHRoYXQgZHJpdmUgdGljLAorIyBpbmZvY21wLCBhbmQgdGhlIGxpYnJhcnkgY29tcGlsYXRpb24gY29kZSB1c2VkIHRvIHN1cHBvcnQgdGhlIHRlcm1jYXAgCisjIGNvbXBhdGliaWxpdHkgaGFjay4gIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFidWxhciBwb3J0aW9uIG9mIHRoZQorIyB0ZXJtaW5mbyg1KSBtYW4gcGFnZTsgbGluZXMgYmVnaW5uaW5nIHdpdGggYCMlJyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gYmVjb21lCisjIHRoZSB0ZXJtaW5mbyB0YWJsZS4KKyMKKyMgVGhpcyBmaWxlIGhhcyB0aHJlZSBtYWpvciBzZWN0aW9uczsgYSBzdGFuZGFyZC1jYXBhYmlsaXRpZXMgdGFibGUsIHR3bworIyBleHRlbnNpb24tY2FwYWJpbGl0eSB0YWJsZXMsIGFuZCBhIHNlY3Rpb24gb2YgYWxpYXNlcyBkZWNsYXJhdGlvbnMuCisjIFRoZSBmaXJzdCB0d28gaGF2ZSB0aGUgc2FtZSBmb3JtYXQsIGFzIGZvbGxvd3M6CisjCisjIEZJTEUgRk9STUFUCisjCisjIENvbHVtbiAxOiB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lCisjIENvbHVtbiAyOiB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDM6IGNhcGFiaWxpdHkgdHlwZSAoYm9vbGVhbiwgbnVtZXJpYywgb3Igc3RyaW5nKQorIyBDb2x1bW4gNDogdGVybWNhcCBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDU6IEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA2OiB2YWx1ZSBmb3IgS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDc6IExlYWQgd2l0aCBgWScgaWYgY2FwYWJpbGl0eSBzaG91bGQgYmUgZW1pdHRlZCBpbiB0ZXJtY2FwCisjICAgICAgICAgICB0cmFuc2xhdGlvbnMsIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDg6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24KKyMKKyMgVGhlIGNvZGVzIGZvbGxvd2luZyBbWS1dIGluIGNvbHVtbiA3IGRlc2NyaWJlIHRoZSB2ZXJzaW9ucyBvZiB0ZXJtY2FwIHdoaWNoCisjIHVzZSB0aGUgZ2l2ZW4gY2FwYWJpbGl0eS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbm90IHVzZWQgYnkgdGhlIGN1cnNlcyBsaWJyYXJ5CisjIHByb3BlcjsgcmF0aGVyLCBpdCdzIHRoZXJlIHRvIGhlbHAgdGhlIHRlcm1pbmZvIG1haW50YWluZXIgYXZvaWQgZW1pdHRpbmcKKyMgdGVybWNhcCBlbnRyeSB0cmFuc2xhdGlvbnMgdGhhdCBhcmUgbW9yZSB0aGFuIDEwMjMgYnl0ZXMgbG9uZyAoYW5kIHRhbmsgYQorIyBsb3Qgb2Ygb2xkIHRlcm1jYXAtdXNpbmcgcHJvZ3JhbXMpLiAgVGhlIGNvZGVzIHJlYWQgYXMgZm9sbG93czoKKyMJQiA9IG1lbnRpb25lZCBpbiB0aGUgQlNEIG1hbiBwYWdlIGZvciA0LjRCU0QgY3Vyc2VzCisjCUMgPSB1c2VkIGJ5IHRoZSA0LjRCU0QgY3Vyc2VzIGxpYnJhcnkKKyMJRyA9IG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgR05VIHRlcm1jYXAKKyMJRSA9IHVzZWQgYnkgR05VIEVtYWNzCisjCUsgPSByZW1vdmUgdGhpcyB0ZXJtaW5mbyBjYXBhYmlsaXR5IHdoZW4gdHJhbnNsYXRpbmcgdG8gc3RhbmRhcmQgZm9ybWF0CisjIFRoZSBpbXBvcnRhbnQgY29kZXMgYXJlIEMgYW5kIEUuICBBIGNhcCB3aXRoIEMgb3IgRSBzaG91bGQgYmUgcHJlc2VydmVkIGluCisjIHRyYW5zbGF0aW9uIGlmIHBvc3NpYmxlLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBwcmVzZXJ2aW5nIGFsbCBzdWNoIGNhcHMgbWF5CisjIGxlYWQgdG8gc29tZSB0ZXJtY2FwIHRyYW5zbGF0aW9ucyBiZWluZyB0b28gbG9uZy4gIFRoZSB0ZXJtY2FwIG1haW50YWluZXIKKyMgaGFzIGEgYml0IG9mIGEganVnZ2xpbmcgYWN0IHRvIGRvLi4ucG90ZW50aWFsIHByb2JsZW0gY2FzZXMgYXJlIG1hcmtlZCB3aXRoCisjIGFuIGFzdGVyaXNrICgqKS4KKyMKKyMgVGhlIGFsaWFzZXMgc2VjdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisjCisjIENvbHVtbiAxOiBlaXRoZXIgYGNhcGFsaWFzJyBvciBgaW5mb2FsaWFzJworIyBDb2x1bW4gMjogbmFtZSB0byBiZSBhbGlhc2VkCisjIENvbHVtbiAzOiB3aGF0IG5hbWUgaXQgc2hvdWxkIHRyYW5zbGF0ZSB0by4gIFRoZSBuYW1lIElHTk9SRSBtZWFucyBpdAorIyAgICAgICAgICAgc2hvdWxkIGJlIGRpc2NhcmRlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgorIyBDb2x1bW4gNDogbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNldCAodXNlZCBmb3IgY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcykKKyMgQ29sdW1uIDU6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24gKHVzdWFsbHkgYW4gYXNzb2NpYXRlZCB0ZXJtaW5mbyB2YXJpYWJsZSkKKyMKKyMgSEFORExJTkcgVEVSTUNBUCBBTkQgVEVSTUlORk8gRVhURU5TSU9OUworIworIyBUaGVyZSBhcmUgYmFzaWNhbGx5IGZpdmUgZGlmZmVyZW50IHdheXMgdG8gaGFuZGxlIHRlcm1jYXAgYW5kIHRlcm1pbmZvCisjIGV4dGVuc2lvbnM6CisjCisjIDEuIERvbid0IGxpc3QgdGhlIGNhcG5hbWUgaGVyZSwgb3IgbGlzdCBpdCBidXQgY29tbWVudCBpdCBvdXQgKHRoZSBsYXR0ZXIKKyMgaXMgcHJlZmVyYWJsZTsgc29tZW9uZSBtaWdodCB3YW50IHRvIGhhbmRsZSBpdCBpbiB0aGUgZnV0dXJlKS4gIElmIHlvdSBkbworIyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIHRyZWF0ZWQgYXMgdW5rbm93biBhbmQgcmFpc2UgYSB3YXJuaW5nIGZyb20KKyMgdGhlIGNvbXBpbGVyLgorIworIyAyLiBBbGlhcyBpdC4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgaWYgdGhlIGNhcGFiaWxpdHkgaGFzIHRoZSBzYW1lIG1lYW5pbmcKKyMgYXMgYW4gYWxyZWFkeS1zdXBwb3J0ZWQgb25lLiAgVGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIGFsaWFzaW5nLCBlbWl0dGluZworIyBhbiBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2Ugd2hlbmV2ZXIgYW4gYWxpYXMgZmlyZXMuCisjCisjIDMuIExpc3QgaXQgaW4gdGhlIHN0YW5kYXJkIHRhYmxlLiAgWW91IGFsbW9zdCBjZXJ0YWlubHkgZG8gKm5vdCogd2FudAorIyB0byBkbyB0aGlzIC0tIHRoZSBjYXBhYmlsaXRpZXMgaW4gdGhhdCBvbmUsIGFuZCB0aGVpciBvcmRlciwgaGF2ZSBiZWVuCisjIGNhcmVmdWxseSBjaG9zZW4gdG8gYmUgU1ZyNC1iaW5hcnktY29tcGF0aWJsZSB3aGVuIHRoZXkncmUgd3JpdHRlbiBvdXQKKyMgYXMgYSB0ZXJtaW5mbyBvYmplY3QsIGFuZCBicmVha2luZyB0aGlzIHdvdWxkIGJlIGJhZC4gIEl0J3MgdXAgdGhlIG5jdXJzZXMKKyMgbGlicmFyeSB3aGF0IHRvIGRvIHdpdGggdGhlIHRlcm1pbmZvIGRhdGEgYWZ0ZXIgaXQncyByZWFkIGluLgorIworIyA0LiBMaXN0IGl0IGluIHRoZSBhbGlhc2VzIHRhYmxlIHdpdGggYW4gSUdOT1JFIHRhcmdldCBmaWVsZC4gIElmIHlvdQorIyBkbyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQgb24gaW5wdXQgKHRob3VnaCB0aGUgdXNlciB3aWxsCisjIGdldCBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dCBpdCkuCisjCisjIDUuIExpc3QgaXQgaW4gdGhlIGV4dGVuc2lvbnMgdGFibGUuIElmIHlvdSBkbyB0aGlzLCB0aGUgY29tcGlsZXIgd2lsbAorIyBzaWxlbnRseSBhY2NlcHQgdGhlIGNhcGFiaWxpdHksIGJ1dCB0aGUgY3Vyc2VzIGxpYnJhcnkgcHJvcGVyIHdpbGwgbmV2ZXIKKyMgc2VlIGl0IChiZWNhdXNlIGl0IHdvbid0IGJlIHdyaXR0ZW4gb3V0IGFzIHBhcnQgb2YgdGhlIHRlcm1pbmZvIG9iamVjdAorIyBmb3JtYXQpLiAgSXQncyB1cCB0byB5b3Ugd2hhdCB5b3UgaGF2ZSB0aGUgY29tcGlsZXIgZG8gd2l0aCBpdC4KKyMKKyMgVGhlcmUgYXJlIHR3byBvcHBvc2l0ZSByZWFzb25zIHRvIGNob29zZSBvcHRpb24gNS4gIE9uZSBpcyB3aGVuIHlvdSB3YW50CisjIHRvIGVhdCB0aGUgY2FwYWJpbGl0eSBzaWxlbnRseSBhbmQgZGlzY2FyZCBpdCB3aGVuIGRvaW5nIHRyYW5zbGF0aW9ucworIyB0byB0ZXJtaW5mbyB3aXRoIHRpYyAtSS4gIFNvbWUgdmVyeSBvbGQgb2Jzb2xldGUgQlNEIGNhcHMgbGlrZSA6a246IGFyZQorIyBpbiB0aGlzIGNsYXNzLiAgTm90aGluZyB3aWxsIGV2ZXIgdXNlIHRoZW0gYWdhaW4uCisjCisjIE1vcmUgdXN1YWxseSwgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIHRyeSB0byBkZWR1Y2Ugc29tZXRoaW5nIGZyb20gdGhlCisjIGNhcGFiaWxpdHkgdmFsdWUgdGhhdCBpdCBjYW4gdXNlIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIHlvdXIgb3V0cHV0IGZvcm1hdC4KKyMgWW91J2xsIG5lZWQgdG8gd3JpdGUgY3VzdG9tIGNvZGUsIHByb2JhYmx5IGluIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSBvcgorIyBwb3N0cHJvY2Vzc190ZXJtaW5mbygpLCB0byBoYW5kbGUgdGhlIHRyYW5zbGF0aW9uLgorIworIyBDT05UUk9MTElORyBFTlRSWSBMRU5HVEggCisjCisjIE5vdGVzIG9uIHNwZWNpZmljIGVsaXNpb25zIG1hZGUgdG8gZml0IHRyYW5zbGF0aW9ucyB3aXRoaW4gMTAyMyBieXRlczoKKyMKKyMgTWFjaGluZXMgd2l0aCBJQk0gUEMtbGlrZSBrZXlib2FyZHMgd2FudCB0byBiZSBhYmxlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nCisjIGtleXM6IGtleV9ucGFnZSwga2V5X3BwYWdlLCBrZXlfaG9tZSwga2V5X2xsICh3aGljaCBpcyB1c2VkIGZvciBpbiB0ZXJtY2FwLQorIyBvbmx5IGVudmlyb25tZW50cyBmb3IgRW5kIG9yIEhvbWUtRG93biksIGtleV9kYywgYW5kIGtleV9pYy4gIFRoaXMgaXMgYWxzbworIyB0aGUgc2V0IG9mIGtleXMgdGhlIGBqb2UnIGVkaXRvciB3aWxsIGJlIHVwc2V0IGlmIGl0IGNhbid0IHNlZS4gIFNvIGRvbid0IAorIyB0cmltIHRob3NlIG91dCBvZiB0aGUgc2V0IHRvIGJlIHRyYW5zbGF0ZWQgdG8gdGVybWNhcCwgb3IgdmFyaW91cyB1c2VycyBvZgorIyB0aGUgdGVybWNhcCBmaWxlIHdpbGwgYmVjb21lIGlyYXRlLgorIworIyBJdCBtaWdodCBsb29rIHRlbXB0aW5nIHRvIGxlYXZlIHRob3NlIGxvbmcgaW5pdCBzdHJpbmdzIG91dCBvZiB0cmFuc2xhdGlvbnMuCisjIFdlIGNhbid0IGRvIGl0ICh5ZXQpOyA0LjRCU0QgdHB1dCBhbmQgdHNldCB1c2UgdGhlbS4KKyMKKyMgV2UgcmV0YWluIHRoZSBzZ3IgY2FwYWJpbGl0eSBpbiB0cmFuc2xhdGlvbiBpbiBzcGl0ZSBvZiB0aGUgZmFjdCB0aGF0IG5laXRoZXIKKyMgNC40QlNEIG5vciBHTlUgRW1hY3MgdXNlcyBpdCwgYmVjYXVzZSAoYSkgc29tZSBlbnRyeSBuYW1pbmcgZGlzdGluY3Rpb25zIGFyZQorIyBoYXJkIHRvIHVuZGVyc3RhbmQgd2l0aG91dCBpdCwgYW5kIChiKSB0aGUgZW50cmllcyBpbiB3aGljaCBpdCBpcyBsb25nIHRlbmQKKyMgdG8gYmUgb2xkZXIgdHlwZXMgdGhhdCBkb24ndCB1c2UgdXAgYSBsb3Qgb2Ygc3RyaW5nIHNwYWNlIG9uIGZ1bmN0aW9uIGtleXMuCisjIFRoZSB0aWMoMSkgdHJhbnNsYXRpb24gY29kZSB3aWxsIGNvbXBsYWluIGFuZCBlbGlkZSBpdCBpZiBpdCBtYWtlcyBhIGNyaXRpY2FsCisjIGRpZmZlcmVuY2UgKHRoZXJlIGlzIHNwZWNpYWwgY29kZSBpbiB0aWMgdG8gcmVjb2duaXplIHRoaXMgc2l0dWF0aW9uKS4KKyMKKyMgWWVzLCBCU0QgdHNldCgxKSB1c2VzIGhwYS4gIFdlIGVsaWRlIGhwYS92cGEgYW55d2F5IGJlY2F1c2UgdGhlIG1vdGlvbgorIyBvcHRpbWl6ZXIgaW4gQlNEIGN1cnNlcyBkaWRuJ3QgdXNlIHRoZW0uICBUaGlzIG9taXNzaW9uIHNlZW1zIHRvIGJlIHRoZQorIyBzaW5nbGUgbW9zdCBlZmZlY3RpdmUgb25lLCBpdCBzaG9ydGVuZWQgdGhlIHJlc29sdmVkIGxlbmd0aCBvZiBhbGwgdGhpcnRlZW4KKyMgcHJvYmxlbSBlbnRyaWVzIGluIHRoZSA5LjkuMCB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgYmVsb3cgY3JpdGljYWwuCisjCisjIEl0IHdvdWxkIGJlIG5pY2UgdG8ga2VlcCBmMTEgYW5kIGYxMiBmb3IgRW1hY3MgdXNlLCBidXQgYSBjb3VwbGUgb2YgdGVybWNhcAorIyB0cmFuc2xhdGlvbnMgZ28gYmFjayBvdmVyIGNyaXRpY2FsIGlmIHdlIGRvIHRoaXMuICBBcyA0LjRCU0QgY3Vyc2VzIGZhZGVzCisjIGludG8gaGlzdG9yeSBhbmQgR05VIHRlcm1jYXAncyBhcHBsaWNhdGlvbiBiYXNlIHNocmlua3MgdG93YXJkcyBiZWluZyBHTlUgCisjIEVtYWNzIG9ubHksIHdlJ2xsIHByb2JhYmx5IGVsaWRlIG91dCBzb21lIEJTRC1vbmx5IGNhcGFiaWxpdGllcyBpbiBvcmRlcgorIyB0byBidXkgc3BhY2UgZm9yIG5vbi1lc3NlbnRpYWxzIEVtYWNzIGlzIHN0aWxsIHVzaW5nLiAgQ2FwYWJpbGl0aWVzIGhpZ2gKKyMgb24gdGhhdCBoaXQgbGlzdDogcmMsIHNjLCB1Yy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFNUQU5EQVJEIENBUEFCSUxJVElFUworIworIyVUaGUgZm9sbG93aW5nIGlzIGEgY29tcGxldGUgdGFibGUgb2YgdGhlIGNhcGFiaWxpdGllcyBpbmNsdWRlZCBpbiBhCisjJXRlcm1pbmZvIGRlc2NyaXB0aW9uIGJsb2NrIGFuZCBhdmFpbGFibGUgdG8gdGVybWluZm8tdXNpbmcgY29kZS4gIEluIGVhY2gKKyMlbGluZSBvZiB0aGUgdGFibGUsCisjJQorIyVUaGUgXGZCdmFyaWFibGVcZlIgaXMgdGhlIG5hbWUgYnkgd2hpY2ggdGhlIHByb2dyYW1tZXIgKGF0IHRoZSB0ZXJtaW5mbyBsZXZlbCkKKyMlYWNjZXNzZXMgdGhlIGNhcGFiaWxpdHkuCisjJQorIyVUaGUgXGZCY2FwbmFtZVxmUiBpcyB0aGUgc2hvcnQgbmFtZSB1c2VkIGluIHRoZSB0ZXh0IG9mIHRoZSBkYXRhYmFzZSwKKyMlYW5kIGlzIHVzZWQgYnkgYSBwZXJzb24gdXBkYXRpbmcgdGhlIGRhdGFiYXNlLgorIyVXaGVuZXZlciBwb3NzaWJsZSwgY2FwbmFtZXMgYXJlIGNob3NlbiB0byBiZSB0aGUgc2FtZSBhcyBvciBzaW1pbGFyIHRvCisjJXRoZSBBTlNJIFgzLjY0LTE5Nzkgc3RhbmRhcmQgKG5vdyBzdXBlcnNlZGVkIGJ5IEVDTUEtNDgsIHdoaWNoIHVzZXMgCisjJWlkZW50aWNhbCBvciB2ZXJ5IHNpbWlsYXIgbmFtZXMpLiAgU2VtYW50aWNzIGFyZSBhbHNvIGludGVuZGVkIHRvIG1hdGNoCisjJXRob3NlIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorIyUKKyMlVGhlIHRlcm1jYXAgY29kZSBpcyB0aGUgb2xkCisjJS5CIHRlcm1jYXAKKyMlY2FwYWJpbGl0eSBuYW1lIChzb21lIGNhcGFiaWxpdGllcyBhcmUgbmV3LCBhbmQgaGF2ZSBuYW1lcyB3aGljaCB0ZXJtY2FwCisjJWRpZCBub3Qgb3JpZ2luYXRlKS4KKyMlLlAKKyMlQ2FwYWJpbGl0eSBuYW1lcyBoYXZlIG5vIGhhcmQgbGVuZ3RoIGxpbWl0LCBidXQgYW4gaW5mb3JtYWwgbGltaXQgb2YgNQorIyVjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkb3B0ZWQgdG8ga2VlcCB0aGVtIHNob3J0IGFuZCB0byBhbGxvdyB0aGUgdGFicyBpbgorIyV0aGUgc291cmNlIGZpbGUKKyMlLkIgQ2FwcworIyV0byBsaW5lIHVwIG5pY2VseS4KKyMlCisjJUZpbmFsbHksIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBhdHRlbXB0cyB0byBjb252ZXkgdGhlIHNlbWFudGljcyBvZiB0aGUKKyMlY2FwYWJpbGl0eS4gIFlvdSBtYXkgZmluZCBzb21lIGNvZGVzIGluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZDoKKyMlLlRQCisjJShQKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSBiZSBzcGVjaWZpZWQKKyMlLlRQCisjJSNbMS05XQorIyVpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmluZyBpcyBwYXNzZWQgdGhyb3VnaCB0cGFybSB3aXRoCisjJXBhcm1zIGFzIGdpdmVuICgjXGZJaVxmUCkuCisjJS5UUAorIyUoUCopCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IHZhcnkgaW4gcHJvcG9ydGlvbiB0byB0aGUgbnVtYmVyIG9mCisjJWxpbmVzIGFmZmVjdGVkCisjJS5UUAorIyUoI1xkXGZJaVxmUFx1KQorIyVpbmRpY2F0ZXMgdGhlIFxmSWlcZlBcdXRoXGQgcGFyYW1ldGVyLgorIyUKKyMlLlBQCisjJSBUaGVzZSBhcmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQkJvb2xlYW5zCW5hbWUJQ29kZVxmUgorYXV0b19sZWZ0X21hcmdpbgkJYncJYm9vbAlidwktCS0JWUItRy0JY3ViMSB3cmFwcyBmcm9tIGNvbHVtbiAwIHRvIGxhc3QgY29sdW1uCithdXRvX3JpZ2h0X21hcmdpbgkJYW0JYm9vbAlhbQktCS0JWUJDR0UJdGVybWluYWwgaGFzIGF1dG9tYXRpYyBtYXJnaW5zCitub19lc2NfY3RsYwkJCXhzYglib29sCXhiCS0JLQlZQkNHLQliZWVoaXZlIChmMT1lc2NhcGUsIGYyPWN0cmwgQykKK2Nlb2xfc3RhbmRvdXRfZ2xpdGNoCQl4aHAJYm9vbAl4cwktCS0JWUJDR0UJc3RhbmRvdXQgbm90IGVyYXNlZCBieSBvdmVyd3JpdGluZyAoaHApCitlYXRfbmV3bGluZV9nbGl0Y2gJCXhlbmwJYm9vbAl4bgktCS0JWUJDR0UJbmV3bGluZSBpZ25vcmVkIGFmdGVyIDgwIGNvbHMgKGNvbmNlcHQpCitlcmFzZV9vdmVyc3RyaWtlCQllbwlib29sCWVvCS0JLQlZQkNHLQljYW4gZXJhc2Ugb3ZlcnN0cmlrZXMgd2l0aCBhIGJsYW5rCitnZW5lcmljX3R5cGUJCQlnbglib29sCWduCS0JLQlZQi1HLQlnZW5lcmljIGxpbmUgdHlwZQoraGFyZF9jb3B5CQkJaGMJYm9vbAloYwktCS0JWUJDRy0JaGFyZGNvcHkgdGVybWluYWwKK2hhc19tZXRhX2tleQkJCWttCWJvb2wJa20JLQktCVlCLUdFCUhhcyBhIG1ldGEga2V5IChpLmUuLCBzZXRzIDh0aC1iaXQpCitoYXNfc3RhdHVzX2xpbmUJCQlocwlib29sCWhzCS0JLQlZQi1HLQloYXMgZXh0cmEgc3RhdHVzIGxpbmUKK2luc2VydF9udWxsX2dsaXRjaAkJaW4JYm9vbAlpbgktCS0JWUJDR0UJaW5zZXJ0IG1vZGUgZGlzdGluZ3Vpc2hlcyBudWxscworbWVtb3J5X2Fib3ZlCQkJZGEJYm9vbAlkYQktCS0JWUJDRy0JZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYWJvdmUgdGhlIHNjcmVlbgorbWVtb3J5X2JlbG93CQkJZGIJYm9vbAlkYgktCS0JWUItR0UJZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYmVsb3cgdGhlIHNjcmVlbgorbW92ZV9pbnNlcnRfbW9kZQkJbWlyCWJvb2wJbWkJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBpbnNlcnQgbW9kZQorbW92ZV9zdGFuZG91dF9tb2RlCQltc2dyCWJvb2wJbXMJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBzdGFuZG91dCBtb2RlCitvdmVyX3N0cmlrZQkJCW9zCWJvb2wJb3MJLQktCVlCQ0ctCXRlcm1pbmFsIGNhbiBvdmVyc3RyaWtlCitzdGF0dXNfbGluZV9lc2Nfb2sJCWVzbG9rCWJvb2wJZXMJLQktCVlCLUctCWVzY2FwZSBjYW4gYmUgdXNlZCBvbiB0aGUgc3RhdHVzIGxpbmUKK2Rlc3RfdGFic19tYWdpY19zbXNvCQl4dAlib29sCXh0CS0JLQlZQkNHRQl0YWJzIGRlc3RydWN0aXZlLCBtYWdpYyBzbyBjaGFyICh0MTA2MSkKK3RpbGRlX2dsaXRjaAkJCWh6CWJvb2wJaHoJLQktCVlCLUdFCWNhbm5vdCBwcmludCB+J3MgKGhhemVsdGluZSkKK3RyYW5zcGFyZW50X3VuZGVybGluZQkJdWwJYm9vbAl1bAktCS0JWUJDR0UJdW5kZXJsaW5lIGNoYXJhY3RlciBvdmVyc3RyaWtlcworeG9uX3hvZmYJCQl4b24JYm9vbAl4bwktCS0JWUItLS0JdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZworYmFja19jb2xvcl9lcmFzZQkJYmNlCWJvb2wJdXQJLQktCS0tLS0tCXNjcmVlbiBlcmFzZWQgd2l0aCBiYWNrZ3JvdW5kIGNvbG9yCitjYW5fY2hhbmdlCQkJY2NjCWJvb2wJY2MJLQktCS0tLS0tCXRlcm1pbmFsIGNhbiByZS1kZWZpbmUgZXhpc3RpbmcgY29sb3JzCitjb2xfYWRkcl9nbGl0Y2gJCQl4aHBhCWJvb2wJWUEJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciBocGEvbWhwYSBjYXBzCitjcGlfY2hhbmdlc19yZXMJCQljcGl4CWJvb2wJWUYJLQktCS0tLS0tCWNoYW5naW5nIGNoYXJhY3RlciBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KK2NyX2NhbmNlbHNfbWljcm9fbW9kZQkJY3J4bQlib29sCVlCCS0JLQktLS0tLQl1c2luZyBjciB0dXJucyBvZmYgbWljcm8gbW9kZQoraGFyZF9jdXJzb3IJCQljaHRzCWJvb2wJSEMJLQktCS0tLS0tCWN1cnNvciBpcyBoYXJkIHRvIHNlZQoraGFzX3ByaW50X3doZWVsCQkJZGFpc3kJYm9vbAlZQwktCS0JLS0tLS0JcHJpbnRlciBuZWVkcyBvcGVyYXRvciB0byBjaGFuZ2UgY2hhcmFjdGVyIHNldAoraHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uCWhscwlib29sCWhsCS0JLQktLS0tLQl0ZXJtaW5hbCB1c2VzIG9ubHkgSExTIGNvbG9yIG5vdGF0aW9uIChUZWt0cm9uaXgpCitscGlfY2hhbmdlc19yZXMJCQlscGl4CWJvb2wJWUcJLQktCS0tLS0tCWNoYW5naW5nIGxpbmUgcGl0Y2ggY2hhbmdlcyByZXNvbHV0aW9uCituZWVkc194b25feG9mZgkJCW54b24JYm9vbAlueAktCS0JLS0tLS0JcGFkZGluZyB3aWxsIG5vdCB3b3JrLCB4b24veG9mZiByZXF1aXJlZAorbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbgkJbmRzY3IJYm9vbAlORAktCS0JLS0tLS0Jc2Nyb2xsaW5nIHJlZ2lvbiBpcyBub24tZGVzdHJ1Y3RpdmUKK25vbl9yZXZfcm1jdXAJCQlucnJtYwlib29sCU5SCS0JLQktLS0tLQlzbWN1cCBkb2VzIG5vdCByZXZlcnNlIHJtY3VwCitub19wYWRfY2hhcgkJCW5wYwlib29sCU5QCS0JLQktLS0tLQlwYWQgY2hhcmFjdGVyIGRvZXMgbm90IGV4aXN0CitwcnRyX3NpbGVudAkJCW1jNWkJYm9vbAk1aQktCS0JLS0tLS0JcHJpbnRlciB3aWxsIG5vdCBlY2hvIG9uIHNjcmVlbgorcm93X2FkZHJfZ2xpdGNoCQkJeHZwYQlib29sCVlECS0JLQktLS0tLQlvbmx5IHBvc2l0aXZlIG1vdGlvbiBmb3IgdnBhL212cGEgY2Fwcworc2VtaV9hdXRvX3JpZ2h0X21hcmdpbgkJc2FtCWJvb2wJWUUJLQktCS0tLS0tCXByaW50aW5nIGluIGxhc3QgY29sdW1uIGNhdXNlcyBjcgorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitjb2x1bW5zCQkJCWNvbHMJbnVtCWNvCS0JLQlZQkNHRQludW1iZXIgb2YgY29sdW1ucyBpbiBhIGxpbmUKK2luaXRfdGFicwkJCWl0CW51bQlpdAktCS0JWUItRy0JdGFicyBpbml0aWFsbHkgZXZlcnkgIyBzcGFjZXMKK2xpbmVzCQkJCWxpbmVzCW51bQlsaQktCS0JWUJDR0UJbnVtYmVyIG9mIGxpbmVzIG9uIHNjcmVlbiBvciBwYWdlCitsaW5lc19vZl9tZW1vcnkJCQlsbQludW0JbG0JLQktCVlCLUctCWxpbmVzIG9mIG1lbW9yeSBpZiA+IGxpbmUuIDAgbWVhbnMgdmFyaWVzCittYWdpY19jb29raWVfZ2xpdGNoCQl4bWMJbnVtCXNnCS0JLQlZQkNHRQludW1iZXIgb2YgYmxhbmsgY2hhcmFjdGVycyBsZWZ0IGJ5IHNtc28gb3Igcm1zbworcGFkZGluZ19iYXVkX3JhdGUJCXBiCW51bQlwYgktCS0JWUItR0UJbG93ZXN0IGJhdWQgcmF0ZSB3aGVyZSBwYWRkaW5nIG5lZWRlZAordmlydHVhbF90ZXJtaW5hbAkJdnQJbnVtCXZ0CS0JLQlZQi0tLQl2aXJ0dWFsIHRlcm1pbmFsIG51bWJlciAoQ0IvdW5peCkKK3dpZHRoX3N0YXR1c19saW5lCQl3c2wJbnVtCXdzCS0JLQlZQi1HLQludW1iZXIgb2YgY29sdW1ucyBpbiBzdGF0dXMgbGluZQorYml0X2ltYWdlX2VudHdpbmluZwkJYml0d2luCW51bQlZbwktCS0JLS0tLS0JbnVtYmVyIG9mIHBhc3NlcyBmb3IgZWFjaCBiaXQtaW1hZ2Ugcm93CitiaXRfaW1hZ2VfdHlwZQkJCWJpdHlwZQludW0JWXAJLQktCS0tLS0tCXR5cGUgb2YgYml0LWltYWdlIGRldmljZQorYnVmZmVyX2NhcGFjaXR5CQkJYnVmc3oJbnVtCVlhCS0JLQktLS0tLQludW1iZXJzIG9mIGJ5dGVzIGJ1ZmZlcmVkIGJlZm9yZSBwcmludGluZworYnV0dG9ucwkJCQlidG5zCW51bQlCVAktCS0JLS0tLS0JbnVtYmVyIG9mIGJ1dHRvbnMgb24gbW91c2UKK2RvdF92ZXJ0X3NwYWNpbmcJCXNwaW52CW51bQlZYgktCS0JLS0tLS0Jc3BhY2luZyBvZiBwaW5zIHZlcnRpY2FsbHkgaW4gcGlucyBwZXIgaW5jaAorZG90X2hvcnpfc3BhY2luZwkJc3BpbmgJbnVtCVljCS0JLQktLS0tLQlzcGFjaW5nIG9mIGRvdHMgaG9yaXpvbnRhbGx5IGluIGRvdHMgcGVyIGluY2gKK2xhYmVsX2hlaWdodAkJCWxoCW51bQlsaAktCS0JLS0tLS0Jcm93cyBpbiBlYWNoIGxhYmVsCitsYWJlbF93aWR0aAkJCWx3CW51bQlsdwktCS0JLS0tLS0JY29sdW1ucyBpbiBlYWNoIGxhYmVsCittYXhfYXR0cmlidXRlcwkJCW1hCW51bQltYQktCS0JWUJDLS0JbWF4aW11bSBjb21iaW5lZCBhdHRyaWJ1dGVzIHRlcm1pbmFsIGNhbiBoYW5kbGUKK21heF9jb2xvcnMJCQljb2xvcnMJbnVtCUNvCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgb24gc2NyZWVuCittYXhfbWljcm9fYWRkcmVzcwkJbWFkZHIJbnVtCVlkCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIG1pY3JvXy4uLl9hZGRyZXNzCittYXhfbWljcm9fanVtcAkJCW1qdW1wCW51bQlZZQktCS0JLS0tLS0JbWF4aW11bSB2YWx1ZSBpbiBwYXJtXy4uLl9taWNybworbWF4X3BhaXJzCQkJcGFpcnMJbnVtCXBhCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvci1wYWlycyBvbiB0aGUgc2NyZWVuCittYXhpbXVtX3dpbmRvd3MJCQl3bnVtCW51bQlNVwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgZGVmaW5lYWJsZSB3aW5kb3dzCittaWNyb19jb2xfc2l6ZQkJCW1jcwludW0JWWYJLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBtaWNybyBtb2RlCittaWNyb19saW5lX3NpemUJCQltbHMJbnVtCVlnCS0JLQktLS0tLQlsaW5lIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK25vX2NvbG9yX3ZpZGVvCQkJbmN2CW51bQlOQwktCS0JLS0tLS0JdmlkZW8gYXR0cmlidXRlcyB0aGF0IGNhbiBub3QgYmUgdXNlZCB3aXRoIGNvbG9ycworbnVtYmVyX29mX3BpbnMJCQlucGlucwludW0JWWgJLQktCS0tLS0tCW51bWJlcnMgb2YgcGlucyBpbiBwcmludC1oZWFkCitudW1fbGFiZWxzCQkJbmxhYgludW0JTmwJLQktCS0tLS0tCW51bWJlciBvZiBsYWJlbHMgb24gc2NyZWVuCitvdXRwdXRfcmVzX2NoYXIJCQlvcmMJbnVtCVlpCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfbGluZQkJCW9ybAludW0JWWoJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfaG9yel9pbmNoCQlvcmhpCW51bQlZawktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitvdXRwdXRfcmVzX3ZlcnRfaW5jaAkJb3J2aQludW0JWWwJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK3ByaW50X3JhdGUJCQljcHMJbnVtCVltCS0JLQktLS0tLQlwcmludCByYXRlIGluIGNoYXJhY3RlcnMgcGVyIHNlY29uZAord2lkZV9jaGFyX3NpemUJCQl3aWRjcwludW0JWW4JLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBkb3VibGUgd2lkZSBtb2RlCisjJS5URQorIyUuYWQKKyMlCisjJVRoZXNlIGFyZSB0aGUgc3RyaW5nIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitiYWNrX3RhYgkJCWNidAlzdHIJYnQJLQkJLQlZQkNHRQliYWNrIHRhYiAoUCkKK2JlbGwJCQkJYmVsCXN0cglibAktCQktCVlCLUdFCWF1ZGlibGUgc2lnbmFsIChiZWxsKSAoUCkKK2NhcnJpYWdlX3JldHVybgkJCWNyCXN0cgljcgktCQktCVlCQ0dFCWNhcnJpYWdlIHJldHVybiAoUCopIChQKikKK2NoYW5nZV9zY3JvbGxfcmVnaW9uCQljc3IJc3RyCWNzCS0JCS0JWUJDR0UJY2hhbmdlIHJlZ2lvbiB0byBsaW5lICMxIHRvIGxpbmUgIzIgKFApCitjbGVhcl9hbGxfdGFicwkJCXRiYwlzdHIJY3QJLQkJLQlZQi1HLQljbGVhciBhbGwgdGFiIHN0b3BzIChQKQorY2xlYXJfc2NyZWVuCQkJY2xlYXIJc3RyCWNsCS0JCS0JWUJDR0UJY2xlYXIgc2NyZWVuIGFuZCBob21lIGN1cnNvciAoUCopCitjbHJfZW9sCQkJCWVsCXN0cgljZQktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBsaW5lIChQKQorY2xyX2VvcwkJCQllZAlzdHIJY2QJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2Ygc2NyZWVuIChQKikKK2NvbHVtbl9hZGRyZXNzCQkJaHBhCXN0cgljaAktCQktCS1CLUdFKglob3Jpem9udGFsIHBvc2l0aW9uICMxLCBhYnNvbHV0ZSAoUCkKK2NvbW1hbmRfY2hhcmFjdGVyCQljbWRjaAlzdHIJQ0MJLQkJLQlZQi1HLQl0ZXJtaW5hbCBzZXR0YWJsZSBjbWQgY2hhcmFjdGVyIGluIHByb3RvdHlwZSAhPworY3Vyc29yX2FkZHJlc3MJCQljdXAJc3RyCWNtCS0JCS0JWUJDR0UJbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX2Rvd24JCQljdWQxCXN0cglkbwktCQktCVlCQ0dFCWRvd24gb25lIGxpbmUKK2N1cnNvcl9ob21lCQkJaG9tZQlzdHIJaG8JLQkJLQlZQkNHRQlob21lIGN1cnNvciAoaWYgbm8gY3VwKQorY3Vyc29yX2ludmlzaWJsZQkJY2l2aXMJc3RyCXZpCS0JCS0JWUItRy0JbWFrZSBjdXJzb3IgaW52aXNpYmxlCitjdXJzb3JfbGVmdAkJCWN1YjEJc3RyCWxlCS0JCS0JWUJDR0UJbW92ZSBsZWZ0IG9uZSBzcGFjZQorY3Vyc29yX21lbV9hZGRyZXNzCQltcmN1cAlzdHIJQ00JLQkJLQlZQi1HLQltZW1vcnkgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsIG1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9ub3JtYWwJCQljbm9ybQlzdHIJdmUJLQkJLQlZQkNHRQltYWtlIGN1cnNvciBhcHBlYXIgbm9ybWFsICh1bmRvIGNpdmlzL2N2dmlzKQorY3Vyc29yX3JpZ2h0CQkJY3VmMQlzdHIJbmQJLQkJLQlZQkNHRQlub24tZGVzdHJ1Y3RpdmUgc3BhY2UgKG1vdmUgcmlnaHQgb25lIHNwYWNlKQorY3Vyc29yX3RvX2xsCQkJbGwJc3RyCWxsCS0JCS0JWUJDR0UJbGFzdCBsaW5lLCBmaXJzdCBjb2x1bW4gKGlmIG5vIGN1cCkKK2N1cnNvcl91cAkJCWN1dTEJc3RyCXVwCS0JCS0JWUJDR0UJdXAgb25lIGxpbmUKK2N1cnNvcl92aXNpYmxlCQkJY3Z2aXMJc3RyCXZzCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgdmVyeSB2aXNpYmxlCitkZWxldGVfY2hhcmFjdGVyCQlkY2gxCXN0cglkYwktCQktCVlCQ0dFCWRlbGV0ZSBjaGFyYWN0ZXIgKFAqKQorZGVsZXRlX2xpbmUJCQlkbDEJc3RyCWRsCS0JCS0JWUJDR0UJZGVsZXRlIGxpbmUgKFAqKQorZGlzX3N0YXR1c19saW5lCQkJZHNsCXN0cglkcwktCQktCVlCLUctCWRpc2FibGUgc3RhdHVzIGxpbmUKK2Rvd25faGFsZl9saW5lCQkJaGQJc3RyCWhkCS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgZG93bgorZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQkJc21hY3MJc3RyCWFzCS0JCS0JWUItRy0Jc3RhcnQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitlbnRlcl9ibGlua19tb2RlCQlibGluawlzdHIJbWIJLQkJLQlZQi1HLQl0dXJuIG9uIGJsaW5raW5nCitlbnRlcl9ib2xkX21vZGUJCQlib2xkCXN0cgltZAktCQktCVlCLUctCXR1cm4gb24gYm9sZCAoZXh0cmEgYnJpZ2h0KSBtb2RlCitlbnRlcl9jYV9tb2RlCQkJc21jdXAJc3RyCXRpCS0JCS0JWUJDR0UJc3RyaW5nIHRvIHN0YXJ0IHByb2dyYW1zIHVzaW5nIGN1cAorZW50ZXJfZGVsZXRlX21vZGUJCXNtZGMJc3RyCWRtCS0JCS0JWUJDR0UJZW50ZXIgZGVsZXRlIG1vZGUKK2VudGVyX2RpbV9tb2RlCQkJZGltCXN0cgltaAktCQktCVlCLUctCXR1cm4gb24gaGFsZi1icmlnaHQgbW9kZQorZW50ZXJfaW5zZXJ0X21vZGUJCXNtaXIJc3RyCWltCS0JCS0JWUJDR0UJZW50ZXIgaW5zZXJ0IG1vZGUKK2VudGVyX3NlY3VyZV9tb2RlCQlpbnZpcwlzdHIJbWsJLQkJLQktQi1HLSoJdHVybiBvbiBibGFuayBtb2RlIChjaGFyYWN0ZXJzIGludmlzaWJsZSkKK2VudGVyX3Byb3RlY3RlZF9tb2RlCQlwcm90CXN0cgltcAktCQktCS1CLUctKgl0dXJuIG9uIHByb3RlY3RlZCBtb2RlCitlbnRlcl9yZXZlcnNlX21vZGUJCXJldglzdHIJbXIJLQkJLQlZQi1HLQl0dXJuIG9uIHJldmVyc2UgdmlkZW8gbW9kZQorZW50ZXJfc3RhbmRvdXRfbW9kZQkJc21zbwlzdHIJc28JLQkJLQlZQkNHRQliZWdpbiBzdGFuZG91dCBtb2RlCitlbnRlcl91bmRlcmxpbmVfbW9kZQkJc211bAlzdHIJdXMJLQkJLQlZQkNHRQliZWdpbiB1bmRlcmxpbmUgbW9kZQorZXJhc2VfY2hhcnMJCQllY2gJc3RyCWVjCS0JCS0JWUItRy0JZXJhc2UgIzEgY2hhcmFjdGVycyAoUCkKK2V4aXRfYWx0X2NoYXJzZXRfbW9kZQkJcm1hY3MJc3RyCWFlCS0JCS0JWUItRy0JZW5kIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZXhpdF9hdHRyaWJ1dGVfbW9kZQkJc2dyMAlzdHIJbWUJLQkJLQlZQi1HRQl0dXJuIG9mZiBhbGwgYXR0cmlidXRlcworZXhpdF9jYV9tb2RlCQkJcm1jdXAJc3RyCXRlCS0JCS0JWUJDR0UJc3RyaW5ncyB0byBlbmQgcHJvZ3JhbXMgdXNpbmcgY3VwCitleGl0X2RlbGV0ZV9tb2RlCQlybWRjCXN0cgllZAktCQktCVlCQ0dFCWVuZCBkZWxldGUgbW9kZQorZXhpdF9pbnNlcnRfbW9kZQkJcm1pcglzdHIJZWkJLQkJLQlZQkNHRQlleGl0IGluc2VydCBtb2RlCitleGl0X3N0YW5kb3V0X21vZGUJCXJtc28Jc3RyCXNlCS0JCS0JWUJDR0UJZXhpdCBzdGFuZG91dCBtb2RlCitleGl0X3VuZGVybGluZV9tb2RlCQlybXVsCXN0cgl1ZQktCQktCVlCQ0dFCWV4aXQgdW5kZXJsaW5lIG1vZGUKK2ZsYXNoX3NjcmVlbgkJCWZsYXNoCXN0cgl2YgktCQktCVlCQ0dFCXZpc2libGUgYmVsbCAobWF5IG5vdCBtb3ZlIGN1cnNvcikKK2Zvcm1fZmVlZAkJCWZmCXN0cglmZgktCQktCVlCLUctCWhhcmRjb3B5IHRlcm1pbmFsIHBhZ2UgZWplY3QgKFAqKQorZnJvbV9zdGF0dXNfbGluZQkJZnNsCXN0cglmcwktCQktCVlCLUctCXJldHVybiBmcm9tIHN0YXR1cyBsaW5lCitpbml0XzFzdHJpbmcJCQlpczEJc3RyCWkxCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzJzdHJpbmcJCQlpczIJc3RyCWlzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzNzdHJpbmcJCQlpczMJc3RyCWkzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0X2ZpbGUJCQlpZglzdHIJaWYJLQkJLQlZQi1HLQluYW1lIG9mIGluaXRpYWxpemF0aW9uIGZpbGUKK2luc2VydF9jaGFyYWN0ZXIJCWljaDEJc3RyCWljCS0JCS0JWUJDR0UJaW5zZXJ0IGNoYXJhY3RlciAoUCkKK2luc2VydF9saW5lCQkJaWwxCXN0cglhbAktCQktCVlCQ0dFCWluc2VydCBsaW5lIChQKikKK2luc2VydF9wYWRkaW5nCQkJaXAJc3RyCWlwCS0JCS0JWUJDR0UJaW5zZXJ0IHBhZGRpbmcgYWZ0ZXIgaW5zZXJ0ZWQgY2hhcmFjdGVyCitrZXlfYmFja3NwYWNlCQkJa2JzCXN0cglrYglLRVlfQkFDS1NQQUNFCTA0MDcJWUItRy0JYmFja3NwYWNlIGtleQora2V5X2NhdGFiCQkJa3RiYwlzdHIJa2EJS0VZX0NBVEFCCTA1MjYJLUItRy0qCWNsZWFyLWFsbC10YWJzIGtleQora2V5X2NsZWFyCQkJa2NscglzdHIJa0MJS0VZX0NMRUFSCTA1MTUJLUItRy0qCWNsZWFyLXNjcmVlbiBvciBlcmFzZSBrZXkKK2tleV9jdGFiCQkJa2N0YWIJc3RyCWt0CUtFWV9DVEFCCTA1MjUJLUItRy0qCWNsZWFyLXRhYiBrZXkKK2tleV9kYwkJCQlrZGNoMQlzdHIJa0QJS0VZX0RDCQkwNTEyCVlCLUctCWRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfZGwJCQkJa2RsMQlzdHIJa0wJS0VZX0RMCQkwNTEwCS1CLUctKglkZWxldGUtbGluZSBrZXkKK2tleV9kb3duCQkJa2N1ZDEJc3RyCWtkCUtFWV9ET1dOCTA0MDIJWUJDR0UJZG93bi1hcnJvdyBrZXkKK2tleV9laWMJCQkJa3JtaXIJc3RyCWtNCUtFWV9FSUMJCTA1MTQJLUItRy0qCXNlbnQgYnkgcm1pciBvciBzbWlyIGluIGluc2VydCBtb2RlCitrZXlfZW9sCQkJCWtlbAlzdHIJa0UJS0VZX0VPTAkJMDUxNwktQi1HLSoJY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfZW9zCQkJCWtlZAlzdHIJa1MJS0VZX0VPUwkJMDUxNgktQi1HLSoJY2xlYXItdG8tZW5kLW9mLXNjcmVlbiBrZXkKK2tleV9mMAkJCQlrZjAJc3RyCWswCUtFWV9GKDApCTA0MTAJWUJDR0UJRjAgZnVuY3Rpb24ga2V5CitrZXlfZjEJCQkJa2YxCXN0cglrMQlLRVlfRigxKQktCVlCQ0dFCUYxIGZ1bmN0aW9uIGtleQora2V5X2YxMAkJCQlrZjEwCXN0cglrOwlLRVlfRigxMCkJLQktLS0tRQlGMTAgZnVuY3Rpb24ga2V5CitrZXlfZjIJCQkJa2YyCXN0cglrMglLRVlfRigyKQktCVlCQ0dFCUYyIGZ1bmN0aW9uIGtleQora2V5X2YzCQkJCWtmMwlzdHIJazMJS0VZX0YoMykJLQlZQkNHRQlGMyBmdW5jdGlvbiBrZXkKK2tleV9mNAkJCQlrZjQJc3RyCWs0CUtFWV9GKDQpCS0JWUJDR0UJRjQgZnVuY3Rpb24ga2V5CitrZXlfZjUJCQkJa2Y1CXN0cglrNQlLRVlfRig1KQktCVlCQ0dFCUY1IGZ1bmN0aW9uIGtleQora2V5X2Y2CQkJCWtmNglzdHIJazYJS0VZX0YoNikJLQlZQkNHRQlGNiBmdW5jdGlvbiBrZXkKK2tleV9mNwkJCQlrZjcJc3RyCWs3CUtFWV9GKDcpCS0JWUJDR0UJRjcgZnVuY3Rpb24ga2V5CitrZXlfZjgJCQkJa2Y4CXN0cglrOAlLRVlfRig4KQktCVlCQ0dFCUY4IGZ1bmN0aW9uIGtleQora2V5X2Y5CQkJCWtmOQlzdHIJazkJS0VZX0YoOSkJLQlZQkNHRQlGOSBmdW5jdGlvbiBrZXkKK2tleV9ob21lCQkJa2hvbWUJc3RyCWtoCUtFWV9IT01FCTA0MDYJWUJDR0UJaG9tZSBrZXkKK2tleV9pYwkJCQlraWNoMQlzdHIJa0kJS0VZX0lDCQkwNTEzCVlCLUdFCWluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfaWwJCQkJa2lsMQlzdHIJa0EJS0VZX0lMCQkwNTExCS1CLUctKglpbnNlcnQtbGluZSBrZXkKK2tleV9sZWZ0CQkJa2N1YjEJc3RyCWtsCUtFWV9MRUZUCTA0MDQJWUJDR0UJbGVmdC1hcnJvdyBrZXkKK2tleV9sbAkJCQlrbGwJc3RyCWtICUtFWV9MTAkJMDUzMwlZQi1HLQlsb3dlci1sZWZ0IGtleSAoaG9tZSBkb3duKQora2V5X25wYWdlCQkJa25wCXN0cglrTglLRVlfTlBBR0UJMDUyMglZQi1HRQluZXh0LXBhZ2Uga2V5CitrZXlfcHBhZ2UJCQlrcHAJc3RyCWtQCUtFWV9QUEFHRQkwNTIzCVlCLUdFCXByZXZpb3VzLXBhZ2Uga2V5CitrZXlfcmlnaHQJCQlrY3VmMQlzdHIJa3IJS0VZX1JJR0hUCTA0MDUJWUJDR0UJcmlnaHQtYXJyb3cga2V5CitrZXlfc2YJCQkJa2luZAlzdHIJa0YJS0VZX1NGCQkwNTIwCS1CLUctKglzY3JvbGwtZm9yd2FyZCBrZXkKK2tleV9zcgkJCQlrcmkJc3RyCWtSCUtFWV9TUgkJMDUyMQktQi1HLSoJc2Nyb2xsLWJhY2t3YXJkIGtleQora2V5X3N0YWIJCQlraHRzCXN0cglrVAlLRVlfU1RBQgkwNTI0CS1CLUctKglzZXQtdGFiIGtleQora2V5X3VwCQkJCWtjdXUxCXN0cglrdQlLRVlfVVAJCTA0MDMJWUJDR0UJdXAtYXJyb3cga2V5CitrZXlwYWRfbG9jYWwJCQlybWt4CXN0cglrZQktCQktCVlCQ0dFCWxlYXZlICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQora2V5cGFkX3htaXQJCQlzbWt4CXN0cglrcwktCQktCVlCQ0dFCWVudGVyICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQorbGFiX2YwCQkJCWxmMAlzdHIJbDAJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYwIGlmIG5vdCBmMAorbGFiX2YxCQkJCWxmMQlzdHIJbDEJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxIGlmIG5vdCBmMQorbGFiX2YxMAkJCQlsZjEwCXN0cglsYQktCQktCS0tLS0tCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMTAgaWYgbm90IGYxMAorbGFiX2YyCQkJCWxmMglzdHIJbDIJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYyIGlmIG5vdCBmMgorbGFiX2YzCQkJCWxmMwlzdHIJbDMJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYzIGlmIG5vdCBmMworbGFiX2Y0CQkJCWxmNAlzdHIJbDQJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY0IGlmIG5vdCBmNAorbGFiX2Y1CQkJCWxmNQlzdHIJbDUJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY1IGlmIG5vdCBmNQorbGFiX2Y2CQkJCWxmNglzdHIJbDYJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY2IGlmIG5vdCBmNgorbGFiX2Y3CQkJCWxmNwlzdHIJbDcJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY3IGlmIG5vdCBmNworbGFiX2Y4CQkJCWxmOAlzdHIJbDgJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY4IGlmIG5vdCBmOAorbGFiX2Y5CQkJCWxmOQlzdHIJbDkJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY5IGlmIG5vdCBmOQorbWV0YV9vZmYJCQlybW0Jc3RyCW1vCS0JCS0JWUItRy0qCXR1cm4gb2ZmIG1ldGEgbW9kZQorbWV0YV9vbgkJCQlzbW0Jc3RyCW1tCS0JCS0JWUItRy0qCXR1cm4gb24gbWV0YSBtb2RlICg4dGgtYml0IG9uKQorbmV3bGluZQkJCQluZWwJc3RyCW53CS0JCS0JWUItRy0qCW5ld2xpbmUgKGJlaGF2ZSBsaWtlIGNyIGZvbGxvd2VkIGJ5IGxmKQorcGFkX2NoYXIJCQlwYWQJc3RyCXBjCS0JCS0JWUJDR0UJcGFkZGluZyBjaGFyIChpbnN0ZWFkIG9mIG51bGwpCitwYXJtX2RjaAkJCWRjaAlzdHIJREMJLQkJLQlZQi1HRQlkZWxldGUgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2RlbGV0ZV9saW5lCQlkbAlzdHIJREwJLQkJLQlZQkNHRQlkZWxldGUgIzEgbGluZXMgKFAqKQorcGFybV9kb3duX2N1cnNvcgkJY3VkCXN0cglETwktCQktCVlCQ0dFCWRvd24gIzEgbGluZXMgKFAqKQorcGFybV9pY2gJCQlpY2gJc3RyCUlDCS0JCS0JWUItR0UJaW5zZXJ0ICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9pbmRleAkJCWluZG4Jc3RyCVNGCS0JCS0JWUJDRy0Jc2Nyb2xsIGZvcndhcmQgIzEgbGluZXMgKFApCitwYXJtX2luc2VydF9saW5lCQlpbAlzdHIJQUwJLQkJLQlZQkNHRQlpbnNlcnQgIzEgbGluZXMgKFAqKQorcGFybV9sZWZ0X2N1cnNvcgkJY3ViCXN0cglMRQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgbGVmdCAoUCkKK3Bhcm1fcmlnaHRfY3Vyc29yCQljdWYJc3RyCVJJCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCAoUCopCitwYXJtX3JpbmRleAkJCXJpbglzdHIJU1IJLQkJLQlZQkNHLQlzY3JvbGwgYmFjayAjMSBsaW5lcyAoUCkKK3Bhcm1fdXBfY3Vyc29yCQkJY3V1CXN0cglVUAktCQktCVlCQ0dFCXVwICMxIGxpbmVzIChQKikKK3BrZXlfa2V5CQkJcGZrZXkJc3RyCXBrCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHlwZSBzdHJpbmcgIzIKK3BrZXlfbG9jYWwJCQlwZmxvYwlzdHIJcGwJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byBleGVjdXRlIHN0cmluZyAjMgorcGtleV94bWl0CQkJcGZ4CXN0cglweAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHRyYW5zbWl0IHN0cmluZyAjMgorcHJpbnRfc2NyZWVuCQkJbWMwCXN0cglwcwktCQktCS1CLUctKglwcmludCBjb250ZW50cyBvZiBzY3JlZW4KK3BydHJfb2ZmCQkJbWM0CXN0cglwZgktCQktCS1CLUctKgl0dXJuIG9mZiBwcmludGVyCitwcnRyX29uCQkJCW1jNQlzdHIJcG8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyCityZXBlYXRfY2hhcgkJCXJlcAlzdHIJcnAJLQkJLQlZQi1HRQlyZXBlYXQgY2hhciAjMSAjMiB0aW1lcyAoUCopCityZXNldF8xc3RyaW5nCQkJcnMxCXN0cglyMQktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfMnN0cmluZwkJCXJzMglzdHIJcjIJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzNzdHJpbmcJCQlyczMJc3RyCXIzCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF9maWxlCQkJcmYJc3RyCXJmCS0JCS0JLUItLS0JbmFtZSBvZiByZXNldCBmaWxlCityZXN0b3JlX2N1cnNvcgkJCXJjCXN0cglyYwktCQktCVlCQ0ctCXJlc3RvcmUgY3Vyc29yIHRvIHBvc2l0aW9uIG9mIGxhc3Qgc2F2ZV9jdXJzb3IKK3Jvd19hZGRyZXNzCQkJdnBhCXN0cgljdgktCQktCS1CLUdFKgl2ZXJ0aWNhbCBwb3NpdGlvbiAjMSBhYnNvbHV0ZSAoUCkKK3NhdmVfY3Vyc29yCQkJc2MJc3RyCXNjCS0JCS0JWUJDRy0Jc2F2ZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAoUCkKK3Njcm9sbF9mb3J3YXJkCQkJaW5kCXN0cglzZgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IHVwIChQKQorc2Nyb2xsX3JldmVyc2UJCQlyaQlzdHIJc3IJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCBkb3duIChQKQorc2V0X2F0dHJpYnV0ZXMJCQlzZ3IJc3RyCXNhCS0JCS0JWUItRy0JZGVmaW5lIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzkgKFBHOSkKK3NldF90YWIJCQkJaHRzCXN0cglzdAktCQktCVlCLUctCXNldCBhIHRhYiBpbiBldmVyeSByb3csIGN1cnJlbnQgY29sdW1ucworc2V0X3dpbmRvdwkJCXdpbmQJc3RyCXdpCS0JCS0JLUItR0UJY3VycmVudCB3aW5kb3cgaXMgbGluZXMgIzEtIzIgY29scyAjMy0jNAordGFiCQkJCWh0CXN0cgl0YQktCQktCVlCQ0dFCXRhYiB0byBuZXh0IDgtc3BhY2UgaGFyZHdhcmUgdGFiIHN0b3AKK3RvX3N0YXR1c19saW5lCQkJdHNsCXN0cgl0cwktCQktCVlCLUctCW1vdmUgdG8gc3RhdHVzIGxpbmUsIGNvbHVtbiAjMQordW5kZXJsaW5lX2NoYXIJCQl1YwlzdHIJdWMJLQkJLQlZQkNHLQl1bmRlcmxpbmUgY2hhciBhbmQgbW92ZSBwYXN0IGl0Cit1cF9oYWxmX2xpbmUJCQlodQlzdHIJaHUJLQkJLQlZQi1HLQloYWxmIGEgbGluZSB1cAoraW5pdF9wcm9nCQkJaXByb2cJc3RyCWlQCS0JCS0JLUItLS0JcGF0aCBuYW1lIG9mIHByb2dyYW0gZm9yIGluaXRpYWxpemF0aW9uCitrZXlfYTEJCQkJa2ExCXN0cglLMQlLRVlfQTEJCTA1MzQJWUItR0UJdXBwZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9hMwkJCQlrYTMJc3RyCUszCUtFWV9BMwkJMDUzNQlZQi1HRQl1cHBlciByaWdodCBvZiBrZXlwYWQKK2tleV9iMgkJCQlrYjIJc3RyCUsyCUtFWV9CMgkJMDUzNglZQi1HRQljZW50ZXIgb2Yga2V5cGFkCitrZXlfYzEJCQkJa2MxCXN0cglLNAlLRVlfQzEJCTA1MzcJWUItR0UJbG93ZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9jMwkJCQlrYzMJc3RyCUs1CUtFWV9DMwkJMDU0MAlZQi1HRQlsb3dlciByaWdodCBvZiBrZXlwYWQKK3BydHJfbm9uCQkJbWM1cAlzdHIJcE8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyIGZvciAjMSBieXRlcworIworIyBTVnIxIGNhcGFiaWxpdGllcyBzdG9wIGhlcmUuCUlCTSdzIHZlcnNpb24gb2YgdGVybWluZm8gaXMgdGhlIHNhbWUgYXMKKyMgU1ZyNCB1cCB0byB0aGlzIHBvaW50LCBidXQgaGFzIGEgZGlmZmVyZW50IHNldCBhZnRlcndhcmRzLgorIworIyBPU0YxIGRpZmZlcmVuY2VzIHN0YXJ0IGhlcmUsIGJhc2VkIG9uIElCTSB2ZXJzaW9uOgorIworYm94X2NoYXJzXzEJCQlib3gxCXN0cglieAktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHByaW1hcnkgc2V0Citib3hfY2hhcnNfMgkJCWJveDIJc3RyCWJ5CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgc2Vjb25kYXJ5IHNldAorYm94X2F0dHJfMQkJCWJhdHQxCXN0cglCeAktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDEKK2JveF9hdHRyXzIJCQliYXR0MglzdHIJQnkJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gyCitjb2xvcl9iZ18wCQkJY29sYjAJc3RyCWQwCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAwCitjb2xvcl9iZ18xCQkJY29sYjEJc3RyCWQxCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAxCitjb2xvcl9iZ18yCQkJY29sYjIJc3RyCWQyCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAyCitjb2xvcl9iZ18zCQkJY29sYjMJc3RyCWQzCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAzCitjb2xvcl9iZ180CQkJY29sYjQJc3RyCWQ0CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA0Citjb2xvcl9iZ181CQkJY29sYjUJc3RyCWQ1CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA1Citjb2xvcl9iZ182CQkJY29sYjYJc3RyCWQ2CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA2Citjb2xvcl9iZ183CQkJY29sYjcJc3RyCWQ3CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA3Citjb2xvcl9mZ18wCQkJY29sZjAJc3RyCWMwCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAwCitjb2xvcl9mZ18xCQkJY29sZjEJc3RyCWMxCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAxCitjb2xvcl9mZ18yCQkJY29sZjIJc3RyCWMyCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAyCitjb2xvcl9mZ18zCQkJY29sZjMJc3RyCWMzCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAzCitjb2xvcl9mZ180CQkJY29sZjQJc3RyCWM0CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA0Citjb2xvcl9mZ181CQkJY29sZjUJc3RyCWM1CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA1Citjb2xvcl9mZ182CQkJY29sZjYJc3RyCWM2CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA2Citjb2xvcl9mZ183CQkJY29sZjcJc3RyCWM3CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA3Citmb250XzAJCQkJZm9udDAJc3RyCWYwCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMAorZm9udF8xCQkJCWZvbnQxCXN0cglmMQktCQktCS0tLS0tCXNlbGVjdCBmb250IDEKK2ZvbnRfMgkJCQlmb250MglzdHIJZjIJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAyCitmb250XzMJCQkJZm9udDMJc3RyCWYzCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMworZm9udF80CQkJCWZvbnQ0CXN0cglmNAktCQktCS0tLS1LCXNlbGVjdCBmb250IDQKK2ZvbnRfNQkJCQlmb250NQlzdHIJZjUJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA1Citmb250XzYJCQkJZm9udDYJc3RyCWY2CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNgorZm9udF83CQkJCWZvbnQ3CXN0cglmNwktCQktCS0tLS1LCXNlbGVjdCBmb250IDcKK2tleV9iYWNrX3RhYgkJCWtidGFiCXN0cglrMAktCQktCS0tLS0tCWJhY2t0YWIga2V5CitrZXlfZG8JCQkJa2RvCXN0cglraQktCQktCS0tLS1LCWRvIHJlcXVlc3Qga2V5CitrZXlfY29tbWFuZAkJCWtjbWQJc3RyCWtjCUtFWV9DT01NQU5ECTA1NDUJLS0tLS0JY29tbWFuZCBrZXkKK2tleV9jb21tYW5kX3BhbmUJCWtjcG4Jc3RyCWtXCS0JCS0JLS0tLUsJY29tbWFuZC1wYW5lIGtleQora2V5X2VuZAkJCQlrZW5kCXN0cglANwlLRVlfRU5ECQkwNTUwCS0tLS0tCWVuZCBrZXkKK2tleV9oZWxwCQkJa2hscAlzdHIJJTEJS0VZX0hFTFAJMDU1MwktLS0tLQloZWxwIGtleQora2V5X25ld2xpbmUJCQlrbmwJc3RyCW5sCS0JCS0JLS0tLUsJbmV3bGluZSBrZXkKK2tleV9uZXh0X3BhbmUJCQlrbnBuCXN0cglrdgktCQktCS0tLS1LCW5leHQtcGFuZSBrZXkKK2tleV9wcmV2X2NtZAkJCWtwcG4Jc3RyCWtwCS0JCS0JLS0tLUsJcHJldmlvdXMtY29tbWFuZCBrZXkKK2tleV9wcmV2X3BhbmUJCQlrcHBuCXN0cglrVgktCQktCS0tLS1LCXByZXZpb3VzLXBhbmUga2V5CitrZXlfcXVpdAkJCWtxdWl0CXN0cglrUQktCQktCS0tLS1LCXF1aXQga2V5CitrZXlfc2VsZWN0CQkJa3NsdAlzdHIJKjYJS0VZX1NFTEVDVAkwNjAxCS0tLS0tCXNlbGVjdCBrZXkKK2tleV9zY3JvbGxfbGVmdAkJCWtzY2wJc3RyCWt6CS0JCS0JLS0tLUsJc2Nyb2xsIGxlZnQKK2tleV9zY3JvbGxfcmlnaHQJCWtzY3IJc3RyCWtaCS0JCS0JLS0tLUsJc2Nyb2xsIHJpZ2h0CitrZXlfdGFiCQkJCWt0YWIJc3RyCWtvCS0JCS0JLS0tLUsJdGFiIGtleQora2V5X3NtYXBfaW4xCQkJa21wZjEJc3RyCUt2CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgaW5wdXQKK2tleV9zbWFwX291dDEJCQlrbXB0MQlzdHIJS1YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBvdXRwdXQKK2tleV9zbWFwX2luMgkJCWttcGYyCXN0cglLdwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAyIGlucHV0CitrZXlfc21hcF9vdXQyCQkJa21wdDIJc3RyCUtXCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgb3V0cHV0CitrZXlfc21hcF9pbjMJCQlrbXBmMwlzdHIJS3gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBpbnB1dAora2V5X3NtYXBfb3V0MwkJCWttcHQzCXN0cglLWAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIG91dHB1dAora2V5X3NtYXBfaW40CQkJa21wZjQJc3RyCUt5CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgaW5wdXQKK2tleV9zbWFwX291dDQJCQlrbXB0NAlzdHIJS1kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBvdXRwdXQKK2tleV9zbWFwX2luNQkJCWttcGY1CXN0cglLegktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA1IGlucHV0CitrZXlfc21hcF9vdXQ1CQkJa21wdDUJc3RyCUtaCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgb3V0cHV0CithcHBsX2RlZmluZWRfc3RyCQlhcHN0cglzdHIJemEJLQkJLQktLS0tSwlhcHBsaWNhdGlvbi1kZWZpbmVkIHN0cmluZworIyBUaGUga2V5X3NtYXBfaW5bNjc4OV0gYW5kIGtleV9zbWFwX291dFs2Nzg5XSBjYXBhYmlsaXRpZXMgYXJlIGRlc2NyaWJlZCBpbgorIyB0aGUgVHJ1NjQgbWFudWFsIHBhZ2VzLgora2V5X3NtYXBfaW42CQkJa21wZjYJc3RyCUtyCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgaW5wdXQKK2tleV9zbWFwX291dDYJCQlrbXB0NglzdHIJS1IJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBvdXRwdXQKK2tleV9zbWFwX2luNwkJCWttcGY3CXN0cglLcwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA3IGlucHV0CitrZXlfc21hcF9vdXQ3CQkJa21wdDcJc3RyCUtTCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgb3V0cHV0CitrZXlfc21hcF9pbjgJCQlrbXBmOAlzdHIJS3QJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBpbnB1dAora2V5X3NtYXBfb3V0OAkJCWttcHQ4CXN0cglLVAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IG91dHB1dAora2V5X3NtYXBfaW45CQkJa21wZjkJc3RyCUt1CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgaW5wdXQKK2tleV9zbWFwX291dDkJCQlrbXB0OQlzdHIJS1UJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBvdXRwdXQKK2tleV9zZjEJCQkJa3NmMQlzdHIJUzEJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxCitrZXlfc2YyCQkJCWtzZjIJc3RyCVMyCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMgora2V5X3NmMwkJCQlrc2YzCXN0cglTMwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDMKK2tleV9zZjQJCQkJa3NmNAlzdHIJUzQJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA0CitrZXlfc2Y1CQkJCWtzZjUJc3RyCVM1CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNQora2V5X3NmNgkJCQlrc2Y2CXN0cglTNgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDYKK2tleV9zZjcJCQkJa3NmNwlzdHIJUzcJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA3CitrZXlfc2Y4CQkJCWtzZjgJc3RyCVM4CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOAora2V5X3NmOQkJCQlrc2Y5CXN0cglTOQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDkKK2tleV9zZjEwCQkJa3NmMTAJc3RyCVNBCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMTAKKyMKK2tleV9mMTEJCQkJa2YxMQlzdHIJRjEJS0VZX0YoMTEpCS0JLS0tLUUJRjExIGZ1bmN0aW9uIGtleQora2V5X2YxMgkJCQlrZjEyCXN0cglGMglLRVlfRigxMikJLQktLS0tRQlGMTIgZnVuY3Rpb24ga2V5CitrZXlfZjEzCQkJCWtmMTMJc3RyCUYzCUtFWV9GKDEzKQktCS0tLS1FCUYxMyBmdW5jdGlvbiBrZXkKK2tleV9mMTQJCQkJa2YxNAlzdHIJRjQJS0VZX0YoMTQpCS0JLS0tLUUJRjE0IGZ1bmN0aW9uIGtleQora2V5X2YxNQkJCQlrZjE1CXN0cglGNQlLRVlfRigxNSkJLQktLS0tRQlGMTUgZnVuY3Rpb24ga2V5CitrZXlfZjE2CQkJCWtmMTYJc3RyCUY2CUtFWV9GKDE2KQktCS0tLS1FCUYxNiBmdW5jdGlvbiBrZXkKK2tleV9mMTcJCQkJa2YxNwlzdHIJRjcJS0VZX0YoMTcpCS0JLS0tLUUJRjE3IGZ1bmN0aW9uIGtleQora2V5X2YxOAkJCQlrZjE4CXN0cglGOAlLRVlfRigxOCkJLQktLS0tRQlGMTggZnVuY3Rpb24ga2V5CitrZXlfZjE5CQkJCWtmMTkJc3RyCUY5CUtFWV9GKDE5KQktCS0tLS1FCUYxOSBmdW5jdGlvbiBrZXkKK2tleV9mMjAJCQkJa2YyMAlzdHIJRkEJS0VZX0YoMjApCS0JLS0tLUUJRjIwIGZ1bmN0aW9uIGtleQora2V5X2YyMQkJCQlrZjIxCXN0cglGQglLRVlfRigyMSkJLQktLS0tRQlGMjEgZnVuY3Rpb24ga2V5CitrZXlfZjIyCQkJCWtmMjIJc3RyCUZDCUtFWV9GKDIyKQktCS0tLS1FCUYyMiBmdW5jdGlvbiBrZXkKK2tleV9mMjMJCQkJa2YyMwlzdHIJRkQJS0VZX0YoMjMpCS0JLS0tLUUJRjIzIGZ1bmN0aW9uIGtleQora2V5X2YyNAkJCQlrZjI0CXN0cglGRQlLRVlfRigyNCkJLQktLS0tRQlGMjQgZnVuY3Rpb24ga2V5CitrZXlfZjI1CQkJCWtmMjUJc3RyCUZGCUtFWV9GKDI1KQktCS0tLS1FCUYyNSBmdW5jdGlvbiBrZXkKK2tleV9mMjYJCQkJa2YyNglzdHIJRkcJS0VZX0YoMjYpCS0JLS0tLUUJRjI2IGZ1bmN0aW9uIGtleQora2V5X2YyNwkJCQlrZjI3CXN0cglGSAlLRVlfRigyNykJLQktLS0tRQlGMjcgZnVuY3Rpb24ga2V5CitrZXlfZjI4CQkJCWtmMjgJc3RyCUZJCUtFWV9GKDI4KQktCS0tLS1FCUYyOCBmdW5jdGlvbiBrZXkKK2tleV9mMjkJCQkJa2YyOQlzdHIJRkoJS0VZX0YoMjkpCS0JLS0tLUUJRjI5IGZ1bmN0aW9uIGtleQora2V5X2YzMAkJCQlrZjMwCXN0cglGSwlLRVlfRigzMCkJLQktLS0tRQlGMzAgZnVuY3Rpb24ga2V5CitrZXlfZjMxCQkJCWtmMzEJc3RyCUZMCUtFWV9GKDMxKQktCS0tLS1FCUYzMSBmdW5jdGlvbiBrZXkKK2tleV9mMzIJCQkJa2YzMglzdHIJRk0JS0VZX0YoMzIpCS0JLS0tLUUJRjMyIGZ1bmN0aW9uIGtleQora2V5X2YzMwkJCQlrZjMzCXN0cglGTglLRVlfRigzMykJLQktLS0tRQlGMzMgZnVuY3Rpb24ga2V5CitrZXlfZjM0CQkJCWtmMzQJc3RyCUZPCUtFWV9GKDM0KQktCS0tLS1FCUYzNCBmdW5jdGlvbiBrZXkKK2tleV9mMzUJCQkJa2YzNQlzdHIJRlAJS0VZX0YoMzUpCS0JLS0tLUUJRjM1IGZ1bmN0aW9uIGtleQora2V5X2YzNgkJCQlrZjM2CXN0cglGUQlLRVlfRigzNikJLQktLS0tRQlGMzYgZnVuY3Rpb24ga2V5CitrZXlfYWN0aW9uCQkJa2FjdAlzdHIJa0oJS0VZX0FDVElPTgkwNTQxCS0tLS1LCXNlbnQgYnkgYWN0aW9uIGtleQorYWNzX2NoYXJzCQkJYWNzYwlzdHIJYWMJLQkJLQktLS0tLQlncmFwaGljcyBjaGFyc2V0IHBhaXJzLCBiYXNlZCBvbiB2dDEwMAorYWx0X3NjYW5jb2RlX2VzYwkJc2Nlc2EJc3RyCVM4CS0JCS0JLS0tLS0JQWx0ZXJuYXRlIGVzY2FwZSBmb3Igc2NhbmNvZGUgZW11bGF0aW9uCitiaXRfaW1hZ2VfcmVwZWF0CQliaXJlcAlzdHIJWHkJLQkJLQktLS0tLQlSZXBlYXQgYml0IGltYWdlIGNlbGwgIzEgIzIgdGltZXMKK2JpdF9pbWFnZV9uZXdsaW5lCQliaW5lbAlzdHIJWnoJLQkJLQktLS0tLQlNb3ZlIHRvIG5leHQgcm93IG9mIHRoZSBiaXQgaW1hZ2UKK2JpdF9pbWFnZV9jYXJyaWFnZV9yZXR1cm4JYmljcglzdHIJWXYJLQkJLQktLS0tLQlNb3ZlIHRvIGJlZ2lubmluZyBvZiBzYW1lIHJvdworY2hhbmdlX2NoYXJfcGl0Y2gJCWNwaQlzdHIJWkEJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGluY2ggdG8gIzEKK2NoYW5nZV9saW5lX3BpdGNoCQlscGkJc3RyCVpCCS0JCS0JLS0tLS0JQ2hhbmdlIG51bWJlciBvZiBsaW5lcyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX3Jlc19ob3J6CQkJY2hyCXN0cglaQwktCQktCS0tLS0tCUNoYW5nZSBob3Jpem9udGFsIHJlc29sdXRpb24gdG8gIzEKK2NoYW5nZV9yZXNfdmVydAkJCWN2cglzdHIJWkQJLQkJLQktLS0tLQlDaGFuZ2UgdmVydGljYWwgcmVzb2x1dGlvbiB0byAjMQorY2hhcl9wYWRkaW5nCQkJcm1wCXN0cglyUAktCQktCS0tLS0tCWxpa2UgaXAgYnV0IHdoZW4gaW4gaW5zZXJ0IG1vZGUKK2NoYXJfc2V0X25hbWVzCQkJY3NubQlzdHIJWnkJLQkJLQktLS0tLQlQcm9kdWNlICMxJ3RoIGl0ZW0gZnJvbSBsaXN0IG9mIGNoYXJhY3RlciBzZXQgbmFtZXMKK2NsZWFyX21hcmdpbnMJCQltZ2MJc3RyCU1DCS0JCS0JLS0tLS0JY2xlYXIgcmlnaHQgYW5kIGxlZnQgc29mdCBtYXJnaW5zCitjbHJfYm9sCQkJCWVsMQlzdHIJY2IJLQkJLQktLS0tLQlDbGVhciB0byBiZWdpbm5pbmcgb2YgbGluZQorY29kZV9zZXRfaW5pdAkJCWNzaW4Jc3RyCWNpCS0JCS0JLS0tLS0JSW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgY29kZXNldHMKK2NvbG9yX25hbWVzCQkJY29sb3JubQlzdHIJWXcJLQkJLQktLS0tLQlHaXZlIG5hbWUgZm9yIGNvbG9yICMxCitjcmVhdGVfd2luZG93CQkJY3dpbglzdHIJQ1cJLQkJLQktLS0tLQlkZWZpbmUgYSB3aW5kb3cgIzEgZnJvbSAjMiwjMyB0byAjNCwjNQorZGVmaW5lX2JpdF9pbWFnZV9yZWdpb24JCWRlZmJpCXN0cglZeAktCQktCS0tLS0tCURlZmluZSByZWN0YW5ndWFsYXIgYml0IGltYWdlIHJlZ2lvbgorZGVmaW5lX2NoYXIJCQlkZWZjCXN0cglaRQktCQktCS0tLS0tCURlZmluZSBhIGNoYXJhY3RlciAjMSwgIzIgZG90cyB3aWRlLCBkZXNjZW5kZXIgIzMKK2RldmljZV90eXBlCQkJZGV2dAlzdHIJZHYJLQkJLQktLS0tLQlJbmRpY2F0ZSBsYW5ndWFnZS9jb2Rlc2V0IHN1cHBvcnQKK2RpYWxfcGhvbmUJCQlkaWFsCXN0cglESQktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxCitkaXNwbGF5X2Nsb2NrCQkJZGNsawlzdHIJREsJLQkJLQktLS0tLQlkaXNwbGF5IGNsb2NrCitkaXNwbGF5X3BjX2NoYXIJCQlkaXNwYwlzdHIJUzEJLQkJLQktLS0tLQlEaXNwbGF5IFBDIGNoYXJhY3RlciAjMQorZW5hX2FjcwkJCQllbmFjcwlzdHIJZUEJLQkJLQktLS0tLQllbmFibGUgYWx0ZXJuYXRlIGNoYXIgc2V0CitlbmRfYml0X2ltYWdlX3JlZ2lvbgkJZW5kYmkJc3RyCVl5CS0JCS0JLS0tLS0JRW5kIGEgYml0LWltYWdlIHJlZ2lvbgorZW50ZXJfYW1fbW9kZQkJCXNtYW0Jc3RyCVNBCS0JCS0JLS0tLS0JdHVybiBvbiBhdXRvbWF0aWMgbWFyZ2lucworZW50ZXJfZG91Ymxld2lkZV9tb2RlCQlzd2lkbQlzdHIJWkYJLQkJLQktLS0tLQlFbnRlciBkb3VibGUtd2lkZSBtb2RlCitlbnRlcl9kcmFmdF9xdWFsaXR5CQlzZHJmcQlzdHIJWkcJLQkJLQktLS0tLQlFbnRlciBkcmFmdC1xdWFsaXR5IG1vZGUKK2VudGVyX2l0YWxpY3NfbW9kZQkJc2l0bQlzdHIJWkgJLQkJLQktLS0tLQlFbnRlciBpdGFsaWMgbW9kZQorZW50ZXJfbGVmdHdhcmRfbW9kZQkJc2xtCXN0cglaSQktCQktCS0tLS0tCVN0YXJ0IGxlZnR3YXJkIGNhcnJpYWdlIG1vdGlvbgorZW50ZXJfbWljcm9fbW9kZQkJc21pY20Jc3RyCVpKCS0JCS0JLS0tLS0JU3RhcnQgbWljcm8tbW90aW9uIG1vZGUKK2VudGVyX25lYXJfbGV0dGVyX3F1YWxpdHkJc25scQlzdHIJWksJLQkJLQktLS0tLQlFbnRlciBOTFEgbW9kZQorZW50ZXJfbm9ybWFsX3F1YWxpdHkJCXNucm1xCXN0cglaTAktCQktCS0tLS0tCUVudGVyIG5vcm1hbC1xdWFsaXR5IG1vZGUKK2VudGVyX3BjX2NoYXJzZXRfbW9kZQkJc21wY2gJc3RyCVMyCS0JCS0JLS0tLS0JRW50ZXIgUEMgY2hhcmFjdGVyIGRpc3BsYXkgbW9kZQorZW50ZXJfc2NhbmNvZGVfbW9kZQkJc21zYwlzdHIJUzQJLQkJLQktLS0tLQlFbnRlciBQQyBzY2FuY29kZSBtb2RlCitlbnRlcl9zaGFkb3dfbW9kZQkJc3NobQlzdHIJWk0JLQkJLQktLS0tLQlFbnRlciBzaGFkb3ctcHJpbnQgbW9kZQorZW50ZXJfc3Vic2NyaXB0X21vZGUJCXNzdWJtCXN0cglaTgktCQktCS0tLS0tCUVudGVyIHN1YnNjcmlwdCBtb2RlCitlbnRlcl9zdXBlcnNjcmlwdF9tb2RlCQlzc3VwbQlzdHIJWk8JLQkJLQktLS0tLQlFbnRlciBzdXBlcnNjcmlwdCBtb2RlCitlbnRlcl91cHdhcmRfbW9kZQkJc3VtCXN0cglaUAktCQktCS0tLS0tCVN0YXJ0IHVwd2FyZCBjYXJyaWFnZSBtb3Rpb24KK2VudGVyX3hvbl9tb2RlCQkJc214b24Jc3RyCVNYCS0JCS0JLS0tLS0JdHVybiBvbiB4b24veG9mZiBoYW5kc2hha2luZworZXhpdF9hbV9tb2RlCQkJcm1hbQlzdHIJUkEJLQkJLQktLS0tLQl0dXJuIG9mZiBhdXRvbWF0aWMgbWFyZ2lucworZXhpdF9kb3VibGV3aWRlX21vZGUJCXJ3aWRtCXN0cglaUQktCQktCS0tLS0tCUVuZCBkb3VibGUtd2lkZSBtb2RlCitleGl0X2l0YWxpY3NfbW9kZQkJcml0bQlzdHIJWlIJLQkJLQktLS0tLQlFbmQgaXRhbGljIG1vZGUKK2V4aXRfbGVmdHdhcmRfbW9kZQkJcmxtCXN0cglaUwktCQktCS0tLS0tCUVuZCBsZWZ0LW1vdGlvbiBtb2RlCitleGl0X21pY3JvX21vZGUJCQlybWljbQlzdHIJWlQJLQkJLQktLS0tLQlFbmQgbWljcm8tbW90aW9uIG1vZGUKK2V4aXRfcGNfY2hhcnNldF9tb2RlCQlybXBjaAlzdHIJUzMJLQkJLQktLS0tLQlFeGl0IFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2V4aXRfc2NhbmNvZGVfbW9kZQkJcm1zYwlzdHIJUzUJLQkJLQktLS0tLQlFeGl0IFBDIHNjYW5jb2RlIG1vZGUKK2V4aXRfc2hhZG93X21vZGUJCXJzaG0Jc3RyCVpVCS0JCS0JLS0tLS0JRW5kIHNoYWRvdy1wcmludCBtb2RlCitleGl0X3N1YnNjcmlwdF9tb2RlCQlyc3VibQlzdHIJWlYJLQkJLQktLS0tLQlFbmQgc3Vic2NyaXB0IG1vZGUKK2V4aXRfc3VwZXJzY3JpcHRfbW9kZQkJcnN1cG0Jc3RyCVpXCS0JCS0JLS0tLS0JRW5kIHN1cGVyc2NyaXB0IG1vZGUKK2V4aXRfdXB3YXJkX21vZGUJCXJ1bQlzdHIJWlgJLQkJLQktLS0tLQlFbmQgcmV2ZXJzZSBjaGFyYWN0ZXIgbW90aW9uCitleGl0X3hvbl9tb2RlCQkJcm14b24Jc3RyCVJYCS0JCS0JLS0tLS0JdHVybiBvZmYgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK2ZpeGVkX3BhdXNlCQkJcGF1c2UJc3RyCVBBCS0JCS0JLS0tLS0JcGF1c2UgZm9yIDItMyBzZWNvbmRzCitmbGFzaF9ob29rCQkJaG9vawlzdHIJZmgJLQkJLQktLS0tLQlmbGFzaCBzd2l0Y2ggaG9vaworZ2V0X21vdXNlCQkJZ2V0bQlzdHIJR20JLQkJLQktLS0tLQlDdXJzZXMgc2hvdWxkIGdldCBidXR0b24gZXZlbnRzLCBwYXJhbWV0ZXIgIzEgbm90IGRvY3VtZW50ZWQuCitnb3RvX3dpbmRvdwkJCXdpbmdvCXN0cglXRwktCQktCS0tLS0tCWdvIHRvIHdpbmRvdyAjMQoraGFuZ3VwCQkJCWh1cAlzdHIJSFUJLQkJLQktLS0tLQloYW5nLXVwIHBob25lCitpbml0aWFsaXplX2NvbG9yCQlpbml0YwlzdHIJSWMJLQkJLQktLS0tLQlpbml0aWFsaXplIGNvbG9yICMxIHRvICgjMiwjMywjNCkKK2luaXRpYWxpemVfcGFpcgkJCWluaXRwCXN0cglJcAktCQktCS0tLS0tCUluaXRpYWxpemUgY29sb3IgcGFpciAjMSB0byBmZz0oIzIsIzMsIzQpLCBiZz0oIzUsIzYsIzcpCitrZXlfYmVnCQkJCWtiZWcJc3RyCUAxCUtFWV9CRUcJCTA1NDIJLS0tLS0JYmVnaW4ga2V5CitrZXlfYnRhYgkJCWtjYnQJc3RyCWtCCUtFWV9CVEFCCTA2MzIJLS0tLS0JYmFjay10YWIga2V5CitrZXlfY2FuY2VsCQkJa2NhbglzdHIJQDIJS0VZX0NBTkNFTAkwNTQzCS0tLS0tCWNhbmNlbCBrZXkKK2tleV9jbG9zZQkJCWtjbG8Jc3RyCUAzCUtFWV9DTE9TRQkwNTQ0CS0tLS0tCWNsb3NlIGtleQora2V5X2NvcHkJCQlrY3B5CXN0cglANQlLRVlfQ09QWQkwNTQ2CS0tLS0tCWNvcHkga2V5CitrZXlfY3JlYXRlCQkJa2NydAlzdHIJQDYJS0VZX0NSRUFURQkwNTQ3CS0tLS0tCWNyZWF0ZSBrZXkKK2tleV9lbnRlcgkJCWtlbnQJc3RyCUA4CUtFWV9FTlRFUgkwNTI3CS0tLS0tCWVudGVyL3NlbmQga2V5CitrZXlfZXhpdAkJCWtleHQJc3RyCUA5CUtFWV9FWElUCTA1NTEJLS0tLS0JZXhpdCBrZXkKK2tleV9mMzcJCQkJa2YzNwlzdHIJRlIJS0VZX0YoMzcpCS0JLS0tLUUJRjM3IGZ1bmN0aW9uIGtleQora2V5X2YzOAkJCQlrZjM4CXN0cglGUwlLRVlfRigzOCkJLQktLS0tRQlGMzggZnVuY3Rpb24ga2V5CitrZXlfZjM5CQkJCWtmMzkJc3RyCUZUCUtFWV9GKDM5KQktCS0tLS1FCUYzOSBmdW5jdGlvbiBrZXkKK2tleV9mNDAJCQkJa2Y0MAlzdHIJRlUJS0VZX0YoNDApCS0JLS0tLUUJRjQwIGZ1bmN0aW9uIGtleQora2V5X2Y0MQkJCQlrZjQxCXN0cglGVglLRVlfRig0MSkJLQktLS0tRQlGNDEgZnVuY3Rpb24ga2V5CitrZXlfZjQyCQkJCWtmNDIJc3RyCUZXCUtFWV9GKDQyKQktCS0tLS1FCUY0MiBmdW5jdGlvbiBrZXkKK2tleV9mNDMJCQkJa2Y0MwlzdHIJRlgJS0VZX0YoNDMpCS0JLS0tLUUJRjQzIGZ1bmN0aW9uIGtleQora2V5X2Y0NAkJCQlrZjQ0CXN0cglGWQlLRVlfRig0NCkJLQktLS0tRQlGNDQgZnVuY3Rpb24ga2V5CitrZXlfZjQ1CQkJCWtmNDUJc3RyCUZaCUtFWV9GKDQ1KQktCS0tLS1FCUY0NSBmdW5jdGlvbiBrZXkKK2tleV9mNDYJCQkJa2Y0NglzdHIJRmEJS0VZX0YoNDYpCS0JLS0tLUUJRjQ2IGZ1bmN0aW9uIGtleQora2V5X2Y0NwkJCQlrZjQ3CXN0cglGYglLRVlfRig0NykJLQktLS0tRQlGNDcgZnVuY3Rpb24ga2V5CitrZXlfZjQ4CQkJCWtmNDgJc3RyCUZjCUtFWV9GKDQ4KQktCS0tLS1FCUY0OCBmdW5jdGlvbiBrZXkKK2tleV9mNDkJCQkJa2Y0OQlzdHIJRmQJS0VZX0YoNDkpCS0JLS0tLUUJRjQ5IGZ1bmN0aW9uIGtleQora2V5X2Y1MAkJCQlrZjUwCXN0cglGZQlLRVlfRig1MCkJLQktLS0tRQlGNTAgZnVuY3Rpb24ga2V5CitrZXlfZjUxCQkJCWtmNTEJc3RyCUZmCUtFWV9GKDUxKQktCS0tLS1FCUY1MSBmdW5jdGlvbiBrZXkKK2tleV9mNTIJCQkJa2Y1MglzdHIJRmcJS0VZX0YoNTIpCS0JLS0tLUUJRjUyIGZ1bmN0aW9uIGtleQora2V5X2Y1MwkJCQlrZjUzCXN0cglGaAlLRVlfRig1MykJLQktLS0tRQlGNTMgZnVuY3Rpb24ga2V5CitrZXlfZjU0CQkJCWtmNTQJc3RyCUZpCUtFWV9GKDU0KQktCS0tLS1FCUY1NCBmdW5jdGlvbiBrZXkKK2tleV9mNTUJCQkJa2Y1NQlzdHIJRmoJS0VZX0YoNTUpCS0JLS0tLUUJRjU1IGZ1bmN0aW9uIGtleQora2V5X2Y1NgkJCQlrZjU2CXN0cglGawlLRVlfRig1NikJLQktLS0tRQlGNTYgZnVuY3Rpb24ga2V5CitrZXlfZjU3CQkJCWtmNTcJc3RyCUZsCUtFWV9GKDU3KQktCS0tLS1FCUY1NyBmdW5jdGlvbiBrZXkKK2tleV9mNTgJCQkJa2Y1OAlzdHIJRm0JS0VZX0YoNTgpCS0JLS0tLUUJRjU4IGZ1bmN0aW9uIGtleQora2V5X2Y1OQkJCQlrZjU5CXN0cglGbglLRVlfRig1OSkJLQktLS0tRQlGNTkgZnVuY3Rpb24ga2V5CitrZXlfZjYwCQkJCWtmNjAJc3RyCUZvCUtFWV9GKDYwKQktCS0tLS1FCUY2MCBmdW5jdGlvbiBrZXkKK2tleV9mNjEJCQkJa2Y2MQlzdHIJRnAJS0VZX0YoNjEpCS0JLS0tLUUJRjYxIGZ1bmN0aW9uIGtleQora2V5X2Y2MgkJCQlrZjYyCXN0cglGcQlLRVlfRig2MikJLQktLS0tRQlGNjIgZnVuY3Rpb24ga2V5CitrZXlfZjYzCQkJCWtmNjMJc3RyCUZyCUtFWV9GKDYzKQktCS0tLS1FCUY2MyBmdW5jdGlvbiBrZXkKK2tleV9maW5kCQkJa2ZuZAlzdHIJQDAJS0VZX0ZJTkQJMDU1MgktLS0tLQlmaW5kIGtleQora2V5X21hcmsJCQlrbXJrCXN0cgklMglLRVlfTUFSSwkwNTU0CS0tLS0tCW1hcmsga2V5CitrZXlfbWVzc2FnZQkJCWttc2cJc3RyCSUzCUtFWV9NRVNTQUdFCTA1NTUJLS0tLS0JbWVzc2FnZSBrZXkKK2tleV9tb3VzZQkJCWttb3VzCXN0cglLbQlLRVlfTU9VU0UJMDYzMQktLS0tLQlNb3VzZSBldmVudCBoYXMgb2NjdXJyZWQKK2tleV9tb3ZlCQkJa21vdglzdHIJJTQJS0VZX01PVkUJMDU1NgktLS0tLQltb3ZlIGtleQora2V5X25leHQJCQlrbnh0CXN0cgklNQlLRVlfTkVYVAkwNTU3CS0tLS0tCW5leHQga2V5CitrZXlfb3BlbgkJCWtvcG4Jc3RyCSU2CUtFWV9PUEVOCTA1NjAJLS0tLS0Jb3BlbiBrZXkKK2tleV9vcHRpb25zCQkJa29wdAlzdHIJJTcJS0VZX09QVElPTlMJMDU2MQktLS0tLQlvcHRpb25zIGtleQora2V5X3ByZXZpb3VzCQkJa3BydglzdHIJJTgJS0VZX1BSRVZJT1VTCTA1NjIJLS0tLS0JcHJldmlvdXMga2V5CitrZXlfcHJpbnQJCQlrcHJ0CXN0cgklOQlLRVlfUFJJTlQJMDUzMgktLS0tLQlwcmludCBrZXkKK2tleV9yZWRvCQkJa3JkbwlzdHIJJTAJS0VZX1JFRE8JMDU2MwktLS0tLQlyZWRvIGtleQora2V5X3JlZmVyZW5jZQkJCWtyZWYJc3RyCSYxCUtFWV9SRUZFUkVOQ0UJMDU2NAktLS0tLQlyZWZlcmVuY2Uga2V5CitrZXlfcmVmcmVzaAkJCWtyZnIJc3RyCSYyCUtFWV9SRUZSRVNICTA1NjUJLS0tLS0JcmVmcmVzaCBrZXkKK2tleV9yZXBsYWNlCQkJa3JwbAlzdHIJJjMJS0VZX1JFUExBQ0UJMDU2NgktLS0tLQlyZXBsYWNlIGtleQora2V5X3Jlc3RhcnQJCQlrcnN0CXN0cgkmNAlLRVlfUkVTVEFSVAkwNTY3CS0tLS0tCXJlc3RhcnQga2V5CitrZXlfcmVzdW1lCQkJa3JlcwlzdHIJJjUJS0VZX1JFU1VNRQkwNTcwCS0tLS0tCXJlc3VtZSBrZXkKK2tleV9zYXZlCQkJa3NhdglzdHIJJjYJS0VZX1NBVkUJMDU3MQktLS0tLQlzYXZlIGtleQora2V5X3NiZWcJCQlrQkVHCXN0cgkmOQlLRVlfU0JFRwkwNTcyCS0tLS0tCXNoaWZ0ZWQgYmVnaW4ga2V5CitrZXlfc2NhbmNlbAkJCWtDQU4Jc3RyCSYwCUtFWV9TQ0FOQ0VMCTA1NzMJLS0tLS0Jc2hpZnRlZCBjYW5jZWwga2V5CitrZXlfc2NvbW1hbmQJCQlrQ01ECXN0cgkqMQlLRVlfU0NPTU1BTkQJMDU3NAktLS0tLQlzaGlmdGVkIGNvbW1hbmQga2V5CitrZXlfc2NvcHkJCQlrQ1BZCXN0cgkqMglLRVlfU0NPUFkJMDU3NQktLS0tLQlzaGlmdGVkIGNvcHkga2V5CitrZXlfc2NyZWF0ZQkJCWtDUlQJc3RyCSozCUtFWV9TQ1JFQVRFCTA1NzYJLS0tLS0Jc2hpZnRlZCBjcmVhdGUga2V5CitrZXlfc2RjCQkJCWtEQwlzdHIJKjQJS0VZX1NEQwkJMDU3NwktLS0tLQlzaGlmdGVkIGRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfc2RsCQkJCWtETAlzdHIJKjUJS0VZX1NETAkJMDYwMAktLS0tLQlzaGlmdGVkIGRlbGV0ZS1saW5lIGtleQora2V5X3NlbmQJCQlrRU5ECXN0cgkqNwlLRVlfU0VORAkwNjAyCS0tLS0tCXNoaWZ0ZWQgZW5kIGtleQora2V5X3Nlb2wJCQlrRU9MCXN0cgkqOAlLRVlfU0VPTAkwNjAzCS0tLS0tCXNoaWZ0ZWQgY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfc2V4aXQJCQlrRVhUCXN0cgkqOQlLRVlfU0VYSVQJMDYwNAktLS0tLQlzaGlmdGVkIGV4aXQga2V5CitrZXlfc2ZpbmQJCQlrRk5ECXN0cgkqMAlLRVlfU0ZJTkQJMDYwNQktLS0tLQlzaGlmdGVkIGZpbmQga2V5CitrZXlfc2hlbHAJCQlrSExQCXN0cgkjMQlLRVlfU0hFTFAJMDYwNgktLS0tLQlzaGlmdGVkIGhlbHAga2V5CitrZXlfc2hvbWUJCQlrSE9NCXN0cgkjMglLRVlfU0hPTUUJMDYwNwktLS0tLQlzaGlmdGVkIGhvbWUga2V5CitrZXlfc2ljCQkJCWtJQwlzdHIJIzMJS0VZX1NJQwkJMDYxMAktLS0tLQlzaGlmdGVkIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfc2xlZnQJCQlrTEZUCXN0cgkjNAlLRVlfU0xFRlQJMDYxMQktLS0tLQlzaGlmdGVkIGxlZnQtYXJyb3cga2V5CitrZXlfc21lc3NhZ2UJCQlrTVNHCXN0cgklYQlLRVlfU01FU1NBR0UJMDYxMgktLS0tLQlzaGlmdGVkIG1lc3NhZ2Uga2V5CitrZXlfc21vdmUJCQlrTU9WCXN0cgklYglLRVlfU01PVkUJMDYxMwktLS0tLQlzaGlmdGVkIG1vdmUga2V5CitrZXlfc25leHQJCQlrTlhUCXN0cgklYwlLRVlfU05FWFQJMDYxNAktLS0tLQlzaGlmdGVkIG5leHQga2V5CitrZXlfc29wdGlvbnMJCQlrT1BUCXN0cgklZAlLRVlfU09QVElPTlMJMDYxNQktLS0tLQlzaGlmdGVkIG9wdGlvbnMga2V5CitrZXlfc3ByZXZpb3VzCQkJa1BSVglzdHIJJWUJS0VZX1NQUkVWSU9VUwkwNjE2CS0tLS0tCXNoaWZ0ZWQgcHJldmlvdXMga2V5CitrZXlfc3ByaW50CQkJa1BSVAlzdHIJJWYJS0VZX1NQUklOVAkwNjE3CS0tLS0tCXNoaWZ0ZWQgcHJpbnQga2V5CitrZXlfc3JlZG8JCQlrUkRPCXN0cgklZwlLRVlfU1JFRE8JMDYyMAktLS0tLQlzaGlmdGVkIHJlZG8ga2V5CitrZXlfc3JlcGxhY2UJCQlrUlBMCXN0cgklaAlLRVlfU1JFUExBQ0UJMDYyMQktLS0tLQlzaGlmdGVkIHJlcGxhY2Uga2V5CitrZXlfc3JpZ2h0CQkJa1JJVAlzdHIJJWkJS0VZX1NSSUdIVAkwNjIyCS0tLS0tCXNoaWZ0ZWQgcmlnaHQtYXJyb3cga2V5CitrZXlfc3JzdW1lCQkJa1JFUwlzdHIJJWoJS0VZX1NSU1VNRQkwNjIzCS0tLS0tCXNoaWZ0ZWQgcmVzdW1lIGtleQora2V5X3NzYXZlCQkJa1NBVglzdHIJITEJS0VZX1NTQVZFCTA2MjQJLS0tLS0Jc2hpZnRlZCBzYXZlIGtleQora2V5X3NzdXNwZW5kCQkJa1NQRAlzdHIJITIJS0VZX1NTVVNQRU5ECTA2MjUJLS0tLS0Jc2hpZnRlZCBzdXNwZW5kIGtleQora2V5X3N1bmRvCQkJa1VORAlzdHIJITMJS0VZX1NVTkRPCTA2MjYJLS0tLS0Jc2hpZnRlZCB1bmRvIGtleQora2V5X3N1c3BlbmQJCQlrc3BkCXN0cgkmNwlLRVlfU1VTUEVORAkwNjI3CS0tLS0tCXN1c3BlbmQga2V5CitrZXlfdW5kbwkJCWt1bmQJc3RyCSY4CUtFWV9VTkRPCTA2MzAJLS0tLS0JdW5kbyBrZXkKK2xhYmVsX2Zvcm1hdAkJCWZsbglzdHIJTGYJLQkJLQktLS0tLQlsYWJlbCBmb3JtYXQKK2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKK2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCittaWNyb19jb2x1bW5fYWRkcmVzcwkJbWhwYQlzdHIJWlkJLQkJLQktLS0tLQlMaWtlIGNvbHVtbl9hZGRyZXNzIGluIG1pY3JvIG1vZGUKK21pY3JvX2Rvd24JCQltY3VkMQlzdHIJWloJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9kb3duIGluIG1pY3JvIG1vZGUKK21pY3JvX2xlZnQJCQltY3ViMQlzdHIJWmEJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9sZWZ0IGluIG1pY3JvIG1vZGUKK21pY3JvX3JpZ2h0CQkJbWN1ZjEJc3RyCVpiCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfcmlnaHQgaW4gbWljcm8gbW9kZQorbWljcm9fcm93X2FkZHJlc3MJCW12cGEJc3RyCVpjCS0JCS0JLS0tLS0JTGlrZSByb3dfYWRkcmVzcyAjMSBpbiBtaWNybyBtb2RlCittaWNyb191cAkJCW1jdXUxCXN0cglaZAktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3VwIGluIG1pY3JvIG1vZGUKK21vdXNlX2luZm8JCQltaW5mbwlzdHIJTWkJLQkJLQktLS0tLQlNb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KK29yZGVyX29mX3BpbnMJCQlwb3JkZXIJc3RyCVplCS0JCS0JLS0tLS0JTWF0Y2ggc29mdHdhcmUgYml0cyB0byBwcmludC1oZWFkIHBpbnMKK29yaWdfY29sb3JzCQkJb2MJc3RyCW9jCS0JCS0JLS0tLS0JU2V0IGFsbCBjb2xvciBwYWlycyB0byB0aGUgb3JpZ2luYWwgb25lcworb3JpZ19wYWlyCQkJb3AJc3RyCW9wCS0JCS0JLS0tLS0JU2V0IGRlZmF1bHQgcGFpciB0byBpdHMgb3JpZ2luYWwgdmFsdWUKK3Bhcm1fZG93bl9taWNybwkJCW1jdWQJc3RyCVpmCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2Rvd25fY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fbGVmdF9taWNybwkJCW1jdWIJc3RyCVpnCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2xlZnRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fcmlnaHRfbWljcm8JCW1jdWYJc3RyCVpoCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3JpZ2h0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3VwX21pY3JvCQkJbWN1dQlzdHIJWmkJLQkJLQktLS0tLQlMaWtlIHBhcm1fdXBfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3BjX3Rlcm1fb3B0aW9ucwkJCXBjdHJtCXN0cglTNgktCQktCS0tLS0tCVBDIHRlcm1pbmFsIG9wdGlvbnMKK3BrZXlfcGxhYgkJCXBmeGwJc3RyCXhsCS0JCS0JLS0tLS0JUHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHlwZSBzdHJpbmcgIzIgYW5kIHNob3cgc3RyaW5nICMzCitwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorcHVsc2UJCQkJcHVsc2UJc3RyCVBVCS0JCS0JLS0tLS0Jc2VsZWN0IHB1bHNlIGRpYWxpbmcKK3F1aWNrX2RpYWwJCQlxZGlhbAlzdHIJUUQJLQkJLQktLS0tLQlkaWFsIG51bWJlciAjMSB3aXRob3V0IGNoZWNraW5nCityZXFfZm9yX2lucHV0CQkJcmZpCXN0cglSRgktCQktCS0tLS0tCXNlbmQgbmV4dCBpbnB1dCBjaGFyIChmb3IgcHR5cykKK3JlcV9tb3VzZV9wb3MJCQlyZXFtcAlzdHIJUlEJLQkJLQktLS0tLQlSZXF1ZXN0IG1vdXNlIHBvc2l0aW9uCityZW1vdmVfY2xvY2sJCQlybWNsawlzdHIJUkMJLQkJLQktLS0tLQlyZW1vdmUgY2xvY2sKK3NjYW5jb2RlX2VzY2FwZQkJCXNjZXNjCXN0cglTNwktCQktCS0tLS0tCUVzY2FwZSBmb3Igc2NhbmNvZGUgZW11bGF0aW9uCitzZWxlY3RfY2hhcl9zZXQJCQlzY3MJc3RyCVpqCS0JCS0JLS0tLS0JU2VsZWN0IGNoYXJhY3RlciBzZXQsICMxCitzZXQwX2Rlc19zZXEJCQlzMGRzCXN0cglzMAktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMCAoRVVDIHNldCAwLCBBU0NJSSkKK3NldDFfZGVzX3NlcQkJCXMxZHMJc3RyCXMxCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAxCitzZXQyX2Rlc19zZXEJCQlzMmRzCXN0cglzMgktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMgorc2V0M19kZXNfc2VxCQkJczNkcwlzdHIJczMJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDMKK3NldF9hX2JhY2tncm91bmQJCXNldGFiCXN0cglBQgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2FfZm9yZWdyb3VuZAkJc2V0YWYJc3RyCUFGCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitzZXRfYmFja2dyb3VuZAkJCXNldGIJc3RyCVNiCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgIzEKK3NldF9ib3R0b21fbWFyZ2luCQlzbWdiCXN0cglaawktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X2JvdHRvbV9tYXJnaW5fcGFybQkJc21nYnAJc3RyCVpsCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgbGluZSAjMSBvciAoaWYgc21ndHAgaXMgbm90IGdpdmVuKSAjMiBsaW5lcyBmcm9tIGJvdHRvbQorc2V0X2Nsb2NrCQkJc2NsawlzdHIJU0MJLQkJLQktLS0tLQlzZXQgY2xvY2ssICMxIGhycyAjMiBtaW5zICMzIHNlY3MKK3NldF9jb2xvcl9iYW5kCQlzZXRjb2xvcglzdHIJWXoJLQkJLQktLS0tLQlDaGFuZ2UgdG8gcmliYm9uIGNvbG9yICMxCitzZXRfY29sb3JfcGFpcgkJCXNjcAlzdHIJc3AJLQkJLQktLS0tLQlTZXQgY3VycmVudCBjb2xvciBwYWlyIHRvICMxCitzZXRfZm9yZWdyb3VuZAkJCXNldGYJc3RyCVNmCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgIzEKK3NldF9sZWZ0X21hcmdpbgkJCXNtZ2wJc3RyCU1MCS0JCS0JLS0tLS0Jc2V0IGxlZnQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4uCSBTZWUgc21nbC4gKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfbGVmdF9tYXJnaW5fcGFybQkJc21nbHAJc3RyCVptCS0JCS0JLS0tLS0JU2V0IGxlZnQgKHJpZ2h0KSBtYXJnaW4gYXQgY29sdW1uICMxCitzZXRfbHJfbWFyZ2luCQkJc21nbHIJc3RyCU1MCS0JCS0JLS0tLS0JU2V0IGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucyB0byAjMSwgIzIuICAoTUwgaXMgbm90IGluIEJTRCB0ZXJtY2FwKS4KK3NldF9wYWdlX2xlbmd0aAkJCXNsaW5lcwlzdHIJWVoJLQkJLQktLS0tLQlTZXQgcGFnZSBsZW5ndGggdG8gIzEgbGluZXMKK3NldF9yaWdodF9tYXJnaW4JCXNtZ3IJc3RyCU1SCS0JCS0JLS0tLS0Jc2V0IHJpZ2h0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uCitzZXRfcmlnaHRfbWFyZ2luX3Bhcm0JCXNtZ3JwCXN0cglabgktCQktCS0tLS0tCVNldCByaWdodCBtYXJnaW4gYXQgY29sdW1uICMxCitzZXRfdGJfbWFyZ2luCQkJc21ndGIJc3RyCU1UCS0JCS0JLS0tLS0JU2V0cyBib3RoIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgdG8gIzEsICMyCitzZXRfdG9wX21hcmdpbgkJCXNtZ3QJc3RyCVpvCS0JCS0JLS0tLS0JU2V0IHRvcCBtYXJnaW4gYXQgY3VycmVudCBsaW5lCitzZXRfdG9wX21hcmdpbl9wYXJtCQlzbWd0cAlzdHIJWnAJLQkJLQktLS0tLQlTZXQgdG9wIChib3R0b20pIG1hcmdpbiBhdCByb3cgIzEKK3N0YXJ0X2JpdF9pbWFnZQkJCXNiaW0Jc3RyCVpxCS0JCS0JLS0tLS0JU3RhcnQgcHJpbnRpbmcgYml0IGltYWdlIGdyYXBoaWNzCitzdGFydF9jaGFyX3NldF9kZWYJCXNjc2QJc3RyCVpyCS0JCS0JLS0tLS0JU3RhcnQgY2hhcmFjdGVyIHNldCBkZWZpbml0aW9uICMxLCB3aXRoICMyIGNoYXJhY3RlcnMgaW4gdGhlIHNldAorc3RvcF9iaXRfaW1hZ2UJCQlyYmltCXN0cglacwktCQktCS0tLS0tCVN0b3AgcHJpbnRpbmcgYml0IGltYWdlIGdyYXBoaWNzCitzdG9wX2NoYXJfc2V0X2RlZgkJcmNzZAlzdHIJWnQJLQkJLQktLS0tLQlFbmQgZGVmaW5pdGlvbiBvZiBjaGFyYWN0ZXIgc2V0ICMxCitzdWJzY3JpcHRfY2hhcmFjdGVycwkJc3ViY3MJc3RyCVp1CS0JCS0JLS0tLS0JTGlzdCBvZiBzdWJzY3JpcHRhYmxlIGNoYXJhY3RlcnMKK3N1cGVyc2NyaXB0X2NoYXJhY3RlcnMJCXN1cGNzCXN0cgladgktCQktCS0tLS0tCUxpc3Qgb2Ygc3VwZXJzY3JpcHRhYmxlIGNoYXJhY3RlcnMKK3RoZXNlX2NhdXNlX2NyCQkJZG9jcglzdHIJWncJLQkJLQktLS0tLQlQcmludGluZyBhbnkgb2YgdGhlc2UgY2hhcmFjdGVycyBjYXVzZXMgQ1IKK3RvbmUJCQkJdG9uZQlzdHIJVE8JLQkJLQktLS0tLQlzZWxlY3QgdG91Y2ggdG9uZSBkaWFsaW5nCit1c2VyMAkJCQl1MAlzdHIJdTAJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMAordXNlcjEJCQkJdTEJc3RyCXUxCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzEKK3VzZXIyCQkJCXUyCXN0cgl1MgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMyCit1c2VyMwkJCQl1MwlzdHIJdTMJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMwordXNlcjQJCQkJdTQJc3RyCXU0CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzQKK3VzZXI1CQkJCXU1CXN0cgl1NQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM1Cit1c2VyNgkJCQl1NglzdHIJdTYJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNgordXNlcjcJCQkJdTcJc3RyCXU3CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzcKK3VzZXI4CQkJCXU4CXN0cgl1OAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM4Cit1c2VyOQkJCQl1OQlzdHIJdTkJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOQord2FpdF90b25lCQkJd2FpdAlzdHIJV0EJLQkJLQktLS0tLQl3YWl0IGZvciBkaWFsLXRvbmUKK3hvZmZfY2hhcmFjdGVyCQkJeG9mZmMJc3RyCVhGCS0JCS0JLS0tLS0JWE9GRiBjaGFyYWN0ZXIKK3hvbl9jaGFyYWN0ZXIJCQl4b25jCXN0cglYTgktCQktCS0tLS0tCVhPTiBjaGFyYWN0ZXIKK3plcm9fbW90aW9uCQkJemVyb20Jc3RyCVp4CS0JCS0JLS0tLS0JTm8gbW90aW9uIGZvciBzdWJzZXF1ZW50IGNoYXJhY3Rlcgorc2V0X3BnbGVuX2luY2gJCQlzbGVuZ3RoCXN0cglzTAktCQktCS0tLS0tCVlJIFNldCBwYWdlIGxlbmd0aCB0byAjMSBodW5kcmVkdGggb2YgYW4gaW5jaAorZW50ZXJfaG9yaXpvbnRhbF9obF9tb2RlCWVoaGxtCXN0cglYaAktCQktCS0tLS0tCUVudGVyIGhvcml6b250YWwgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX2xlZnRfaGxfbW9kZQkJZWxobG0Jc3RyCVhsCS0JCS0JLS0tLS0JRW50ZXIgbGVmdCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbG93X2hsX21vZGUJCWVsb2hsbQlzdHIJWG8JLQkJLQktLS0tLQlFbnRlciBsb3cgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3JpZ2h0X2hsX21vZGUJCWVyaGxtCXN0cglYcgktCQktCS0tLS0tCUVudGVyIHJpZ2h0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl90b3BfaGxfbW9kZQkJZXRobG0Jc3RyCVh0CS0JCS0JLS0tLS0JRW50ZXIgdG9wIGhpZ2hsaWdodCBtb2RlCitlbnRlcl92ZXJ0aWNhbF9obF9tb2RlCQlldmhsbQlzdHIJWHYJLQkJLQktLS0tLQlFbnRlciB2ZXJ0aWNhbCBoaWdobGlnaHQgbW9kZQorc2V0X2FfYXR0cmlidXRlcwkJc2dyMQlzdHIJc0EJLQkJLQktLS0tLQlEZWZpbmUgc2Vjb25kIHNldCBvZiB2aWRlbyBhdHRyaWJ1dGVzICMxLSM2CisjCisjCisjCisjICUlLVNUT1AtSEVSRS0lJQorIworIyBEb24ndCBtb3ZlIHRoaXMgY2FzdWFsbHkhICBJbiBmYWN0LCBkb24ndCBtb3ZlIGl0IGF0IGFsbCB1bmxlc3MgeW91J3JlCisjIGVpdGhlciBkb2luZyBpdCB0byBhZGQgU3lzdGVtIFYgb3IgWFBHNCBleHRlbnNpb25zLCBvciBoYXZlIGRlY2lkZWQgeW91CisjIGRvbid0IGNhcmUgYWJvdXQgU1ZyNCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1DQVAgRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGUgY2FwYWJpbGl0aWVzIGJlbG93IGFyZSBlaXRoZXIgb2Jzb2xldGUgb3IgZXh0ZW5zaW9ucyBvbiBjZXJ0YWluIHN5c3RlbXMuCisjIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNWUjQgdGVybWluZm8uICBTb21lIGFyZSB1c2VkIGJ5IGNhcHRvaW5mbyB0byB0cmFuc2xhdGUKKyMgdGVybWNhcCBzb3VyY2VzOyB0aGUgcmVzdCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBpbiBjYXNlIHNvbWVib2R5CisjIGNhcmVzIGFib3V0IHRoZW0gZW5vdWdoIHRvIGhhY2sgaW4gY29kZSB0aGF0IHdpbGwgdHJhbnNsYXRlIHRoZW0gaW50bworIyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMuCisjCisjIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaXN0IGlzIGZyb20gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlCisjIChjb21wLnNvdXJjZXMudW5peCwgdm9sdW1lIDI2KTsgdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCB0ZXJtaW5mbyBuYW1lcyAoYXMKKyMgd2VsbCBhcyB0aGUgdGVybWNhcCBjb2RlcykgbWF0Y2ggaGlzIGxpc3QuCisjCisjIFRoaXMgZ3JvdXAgb2YgY29kZXMgaXMgbm90IG1hcmtlZCBvYnNvbGV0ZSBpbiA0LjRCU0QsIGJ1dCBoYXZlIG5vIGRpcmVjdAorIyB0ZXJtaW5mbyBlcXVpdmFsZW50cy4gIFRoZSBycyBjYXBhYmlsaXR5IGlzIHNwZWNpYWxseSB0cmFuc2xhdGVkIHRvIHRlcm1pbmZvCisjIHIyLCBhbmQgdmljZSB2ZXJzYSwgaWYgYW4gZW50cnkgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIHIyLiAgU2ltaWxhcmx5LAorIyBpMiBpcyB0cmFuc2xhdGVkIHRvIHIzIGlmIHRoZXJlIGlzIG5vIHIzIChiZWNhdXNlIFNWIHRlcm1pbmZvIG1hcHMgaXMgdG8gaTIpLgorIyBUaGUgdWcgY2FwYWJpbGl0eSBpcyB0aHJvd24gYXdheSwgYnV0IGFzc3VtZWQgdG8gYmUgd2hhdGV2ZXIgc2cgaXMgaWYgdGhlCisjIGxhdHRlciBpcyBub256ZXJvIGFuZCB3ZSdyZSBkdW1waW5nIGluIHRlcm1jYXAgZm9ybWF0LgorIwordGVybWNhcF9pbml0MgkJCU9UaTIJc3RyCWkyCS0JCS0JWUItLS0Jc2Vjb25kYXJ5IGluaXRpYWxpemF0aW9uIHN0cmluZwordGVybWNhcF9yZXNldAkJCU9UcnMJc3RyCXJzCS0JCS0JWUItRy0JdGVybWluYWwgcmVzZXQgc3RyaW5nCittYWdpY19jb29raWVfZ2xpdGNoX3VsCQlPVHVnCW51bQl1ZwktCQktCVlCQ0dFCW51bWJlciBvZiBibGFua3MgbGVmdCBieSB1bAorIworIyBPYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFNvbWUgYXJlIHVzZWQgZm9yIHRlcm1jYXAgdHJhbnNsYXRpb24uICBUaGUKKyMgY29kZSB1c2VzIHRoZSAnT1QnIHByZWZpeCB3ZSBwdXQgb24gb2Jzb2xldGUgY2FwYWJpbGl0aWVzIHRvIHN1cHByZXNzCisjIHByaW50aW5nIHRoZW0gaW4gdGVybWluZm8gc291cmNlIGR1bXBzIG9mIGNvbXBpbGVkIGVudHJpZXMuCisjCitiYWNrc3BhY2VzX3dpdGhfYnMJCU9UYnMJYm9vbAlicwktCQktCVlCQ0dFCXVzZXMgXkggdG8gbW92ZSBsZWZ0CitjcnRfbm9fc2Nyb2xsaW5nCQlPVG5zCWJvb2wJbnMJLQkJLQlZQkNHLQljcnQgY2Fubm90IHNjcm9sbAorbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IJCU9UbmMJYm9vbAluYwktCQktCVlCQ0ctCW5vIHdheSB0byBnbyB0byBzdGFydCBvZiBsaW5lCitjYXJyaWFnZV9yZXR1cm5fZGVsYXkJCU9UZEMJbnVtCWRDCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgQ1IKK25ld19saW5lX2RlbGF5CQkJT1RkTgludW0JZE4JLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBMRgorbGluZWZlZWRfaWZfbm90X2xmCQlPVG5sCXN0cglubAktCQktCVlCQ0dFCXVzZSB0byBtb3ZlIGRvd24KK2JhY2tzcGFjZV9pZl9ub3RfYnMJCU9UYmMJc3RyCWJjCS0JCS0JWUJDR0UJbW92ZSBsZWZ0LCBpZiBub3QgXkgKKyMKKyMgR05VIHRlcm1jYXAgbGlicmFyeSBleHRlbnNpb25zLiAgVGhlIEdOVSB0ZXJtY2FwIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyBFbWFjcyBubyBsb25nZXIgdXNlcyB0aGVzZSwgYnV0IE1UIHNob3dlZCB1cCBpbiBwcmUtOS4wIHZlcnNpb25zIG9mIHRoZQorIyBCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbyBNVCBpcyByZXNvbHZlZCBieSB0eXBlCisjIGluZm87IE1UIGlzIGNvbnZlcnRlZCB0byBrbS4KKyMKK2dudV9oYXNfbWV0YV9rZXkJCU9UTVQJYm9vbAlNVAktCQktCS0tLS1FCWhhcyBtZXRhIGtleQorIyBnbnVfdGFiX3dpZHRoCQkJT1R0dwludW0JdHcJLQkJLQktLS0tRQl0YWIgd2lkdGggaW4gc3BhY2VzCisjCisjIEdOVSB0ZXJtY2FwICpkb2VzKiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0eSwgIE9ubHkgdGhlCisjIG5vdy1vYnNvbGV0ZSBBbm4gQXJib3IgdGVybWluYWxzIHVzZWQgaXQuCisjCisjIGdudV9jaGFuZ2Vfc2Nyb2xsX3JlZ2lvbglPVGNTCXN0cgljUwktCQktCS0tLUdFCWFsdGVybmF0ZSBzZXQgc2Nyb2xsaW5nIHJlZ2lvbiAKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21tZW50cyBkZXNjcmliZSBjYXBuYW1lcyBzbyBhbmNpZW50IHRoYXQgSSBiZWxpZXZlIG5vCisjIHNvZnR3YXJlIHVzZXMgdGhlbSBhbnkgbG9uZ2VyLiAgU29tZSBvZiB0aGVzZSBoYXZlIHRvIGdvIGJlY2F1c2UgdGhleQorIyBjbGFzaCB3aXRoIHRlcm1pbmZvIG5hbWVzIGluIHdheXMgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlc2UgbXl0aW5mbyBjb2RlcyBhcmUgbm90IHVzZWQgaW4gdGhlIDQuNEJTRCBjdXJzZXMgY29kZS4gIFRoZXkgYXJlCisjIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgNC40QlNEIG1hbnVhbCBwYWdlcy4KKyMKKyMgVGhlcmUgaXMgb25lIGNvbmZsaWN0IHdpdGggdGVybWluZm87IG1hIGlzIGluIGJvdGguICBUaGlzIGNvbmZsaWN0IGlzCisjIHJlc29sdmVkIGJ5IHR5cGUgaW5mb3JtYXRpb24uCisjCisjIFRoZSBga28nIGNhcGFiaWxpdHkgaXMgdHJhbnNsYXRlZCBieSBzcGVjaWFsIGNvZGUuICBJdCBzaG91bGQgY29udGFpbiBhCisjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhcGFiaWxpdGllcyBmb3Igd2hpY2ggdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyMgVGhlIGBrbicgY29kZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyMKKyMgVGhlIGBtYScgY2FwYWJpbGl0eSBzZWVtcyB0byBoYXZlIGJlZW4gZGVzaWduZWQgdG8gbWFwIGJldHdlZW4gdGhlIHJvZ3VlKDIpCisjIG1vdGlvbiBrZXlzIChpbmNsdWRpbmcgamtobCkgYW5kIGNoYXJhY3RlcnMgZW1pdHRlZCBieSBhcnJvdyBrZXlzIG9uIHNvbWUKKyMgcHJpbWl0aXZlIHByZS1BTlNJIHRlcm1pbmFscy4gIEl0J3Mgc28gb2Jzb2xldGUgaXQncyBmb3NzaWxpemVkLi4uCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBtZW1vcnlfbG9ja19hYm92ZSBhbmQgbWVtb3J5X3VubG9jazoKKyMgIllvdSBjYW4gJ2ZyZWV6ZScgZGF0YSBvbiB0aGUgc2NyZWVuIGJ5IHR1cm5pbmcgb24gTWVtb3J5IExvY2sgaW4gYSBsaW5lIG9mCisjIHRleHQuICBBbGwgbGluZXMgYWJvdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbGluZSBiZWNvbWUgbG9ja2VkIGluIHBsYWNlIG9uCisjIHRoZSBzY3JlZW4uICBUaGVuIGVudGVyIGRhdGEgbm9ybWFsbHkuICBXaGVuIHRoZSBzY3JlZW4gZmlsbHMgdXAsIGFueQorIyBmdXJ0aGVyIGRhdGEgZW50ZXJlZCBmb3JjZXMgdGhlIGZpcnN0IGxpbmUgb2YgdW5mcm96ZW4gbGluZSB0ZXh0IHRvIHNjcm9sbAorIyB1bmRlciB0aGUgZnJvemVuIGRhdGEuICBMaW5lcyBzY3JvbGxlZCBvZmYgdGhlIHNjcmVlbiBhcmUgaW5zZXJ0ZWQgaW50bworIyBtZW1vcnkgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBmaXJzdCBmcm96ZW4gbGluZS4iIChmcm9tIHRoZSBIUCA3MDAvOTYKKyMgVXNlcidzIG1hbnVhbCkuICBWVDEwMC9BTlNJIG1lbW9yeSBsb2NrIHNldCBpcyBcRVs+MmgsIHJlc2V0IGlzIFxFWz4ybC4KKyMKKyMgQXBwbGljYXRpb25zIHRoYXQgdXNlIHRlcm1pbmZvIGFyZSBzdXBwb3NlZCB0byBiZWhhdmUgYXMgdGhvdWdoIHhyIGlzCisjIGFsd2F5cyB0cnVlLgorIworbGluZWZlZWRfaXNfbmV3bGluZQkJT1ROTAlib29sCU5MCS0JCS0JWUItLS0JbW92ZSBkb3duIHdpdGggXG4KKyMgZXZlbl9wYXJpdHkJCQlPVEVQCWJvb2wJRVAJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBldmVuIHBhcml0eQorIyBvZGRfcGFyaXR5CQkJT1RPUAlib29sCU9QCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgb2RkIHBhcml0eQorIyBoYWxmX2R1cGxleAkJCU9USEQJYm9vbAlIRAktCQktCS1CLS0tCXRlcm1pbmFsIGlzIGhhbGYtZHVwbGV4CisjIGxvd2VyX2Nhc2Vfb25seQkJT1RMQwlib29sCUxDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgbG93ZXIgY2FzZQorIyB1cHBlcl9jYXNlX29ubHkJCU9UVUMJYm9vbAlVQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IHVwcGVyIGNhc2UKK2JhY2tzcGFjZV9kZWxheQkJCU9UZEIJbnVtCWRCCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkgKKyMgZm9ybV9mZWVkX2RlbGF5CQlPVGRGCW51bQlkRgktCQktCS1CLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5MCitob3Jpem9udGFsX3RhYl9kZWxheQkJT1RkVAludW0JZFQJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSQorIyB2ZXJ0aWNhbF90YWJfZGVsYXkJCU9UZFYJbnVtCWRWCS0JCS0JLUItLS0JcGFkZGluZyByZXF1aXJlZCBmb3IgXlYKK251bWJlcl9vZl9mdW5jdGlvbl9rZXlzCQlPVGtuCW51bQlrbgktCQktCS1CLUctCWNvdW50IG9mIGZ1bmN0aW9uIGtleXMKK290aGVyX25vbl9mdW5jdGlvbl9rZXlzCQlPVGtvCXN0cglrbwktCQktCS1CLUctCWxpc3Qgb2Ygc2VsZi1tYXBwZWQga2V5Y2FwcworYXJyb3dfa2V5X21hcAkJCU9UbWEJc3RyCW1hCS0JCS0JWUJDLS0JbWFwIGFycm93IGtleXMgcm9ndWUoMSkgbW90aW9uIGtleXMKKyMgbWVtb3J5X2xvY2tfYWJvdmUJCU9UbWwJc3RyCW1sCS0JCS0JLUItLS0JbG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorIyBtZW1vcnlfdW5sb2NrCQkJT1RtdQlzdHIJbXUJLQkJLQktQi0tLQl1bmxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKK2hhc19oYXJkd2FyZV90YWJzCQlPVHB0CWJvb2wJcHQJLQkJLQlZQi0tLQloYXMgOC1jaGFyIHRhYnMgaW52b2tlZCB3aXRoIF5JCityZXR1cm5fZG9lc19jbHJfZW9sCQlPVHhyCWJvb2wJeHIJLQkJLQlZQi0tLQlyZXR1cm4gY2xlYXJzIHRoZSBsaW5lCisjIHRla180MDI1X2luc2VydF9saW5lCQlPVHh4CWJvb2wJeHgJLQkJLQktQkMtLQlUZWt0cm9uaXggNDAyNSBpbnNlcnQtbGluZSBnbGl0Y2gKKyMKKyMgbXl0aW5mbyBkZXNjcmliZWQgdGhpcyBhcyBhIHRlcm1jYXAgY2FwYWJpbGl0eSwgYnV0IGl0J3Mgbm90IGxpc3RlZCBpbiB0aGUKKyMgNC40QlNEIG1hbiBwYWdlcywgYW5kIG5vdCBmb3VuZCBpbiB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuY3Vyc2VzCisjIHBhY2thZ2UsIGxpa2UgU3lzdGVtIFYsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFsd2F5cyB0cnVlLgorIworIyByaW5kX29ubHlfYXRfdG9wCQlPVHhxCWJvb2wJeHEJLQkJLQktLS0tLQlyZXZlcnNlIGluZGV4IG9ubHkgd29ya3MgZnJvbSB0b3AgbGluZQorIworIyBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIHRlcm1jYXAgZXh0ZW5zaW9ucyAoYXMgZGVzY3JpYmVkIGluIG15dGluZm8pLgorIyBUaGUgYHhsJyB0ZXJtY2FwIGZpbGUgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90CisjIGJlIHJlc29sdmVkIGJ5IGEgdHlwZSBjaGVjay4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGd1ZXNzZXMgZnJvbSB3aGF0IHdhcworIyBpbiB0aGUgbXl0aW5mbyB0YWJsZXMuIAorIworIyBrZXlfaW50ZXJydXB0X2NoYXIJCU9Ua2kJc3RyCWtpCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBpbnRlcnJ1cHQga2V5ICg/KQorIyBrZXlfa2lsbF9jaGFyCQkJT1RrawlzdHIJa2sJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGtpbGwga2V5ICg/KQorIyBrZXlfc3VzcGVuZF9jaGFyCQlPVGt6CXN0cglregktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgc3VzcGVuZCBrZXkgKD8pCisjIGluaXRpYWxpemF0aW9uX21lc3N5CQlPVHhjCWJvb2wJeGMJLQkJLQktLS0tLQlpbml0aWFsaXphdGlvbiBsZWF2ZXMgZ2FyYmFnZSBvbiB0aGUgc2NyZWVuICg/KQorIyBpbmRfYXRfYm90dG9tX2RvZXNfY3IJCU9UeGwJYm9vbAl4bAktCQktCS0tLS0tCWluZGV4IGRvZXMgYSBjYXJyaWFnZSByZXR1cm4KKyMKKyMgTm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHVuaXF1ZSB0byBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UuCisjIFNSIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdCBiZSByZXNvbHZlZCBieSBhIHR5cGUKKyMgY2hlY2suCisjCisjIHNjcm9sbF9sZWZ0CQkJT1RzbDEJc3RyCVNsCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZAorIyBzY3JvbGxfcmlnaHQJCQlPVHNyMQlzdHIJU3IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZAorIyBwYXJtX3Njcm9sbF9sZWZ0CQlPVHNsCXN0cglTTAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQgIzEgY2hhcmFjdGVycworIyBwYXJtX3Njcm9sbF9yaWdodAkJT1RzcglzdHIJU1IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZCAjMSBjaGFyYWN0ZXJzCisjCisjIFRoZSBteXRpbmZvIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgWGVuaXggZGVmaW5lZCBpdHMgb3duIHNldCBvZiBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMgY2FwCUlCTSBBU0NJSQlkZXNjcmlwdGlvbiAgICAgICAgICAgICBBQ1MgICAgICAgICAJQVNDSUkKKyMgLS0tCS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0JLS0tLS0tCisjIEcxCTE5MSBcMjc3IE0tPwlzaW5nbGUgdXBwZXIgcmlnaHQgICAJQUNTX1VSQ09STkVSCisjIEcyCTIxOCBcMzMyIE0tWglzaW5nbGUgdXBwZXIgbGVmdAlBQ1NfVUxDT1JORVIKKyMgRzMJMTkyIFwzMDAgTS1ACXNpbmdsZSBsb3dlciBsZWZ0CUFDU19MTENPUk5FUgorIyBHNAkyMTcgXDMzMSBNLVkJc2luZ2xlIGxvd2VyIHJpZ2h0CUFDU19MUkNPUk5FUgorIyBHNQkxODcgXDI3MyBNLTsJZG91YmxlIHVwcGVyIHJpZ2h0CisjIEc2CTIwMSBcMzExIE0tSQlkb3VibGUgdXBwZXIgbGVmdAorIyBHNwkyMDAgXDMxMCBNLUgJZG91YmxlIGxvd2VyIGxlZnQKKyMgRzgJMTg4IFwyNzQgTS08CWRvdWJsZSBsb3dlciByaWdodAorIyBHQwkxOTcgXDMwNSBNLUUJc2luZ2xlIGludGVyc2VjdGlvbglBQ1NfUExVUwlfIF8KKyMgR0QJMTk0IFwzMDIgTS1CCXNpbmdsZSBkb3duLXRpY2sJQUNTX1RURUUJIHwKKyMgR0gJMTk2IFwzMDQgTS1ECXNpbmdsZSBob3Jpem9udGFsIGxpbmUJQUNTX0hMSU5FCisjIEdMCTE4MCBcMjY0IE0tNAlzaW5nbGUgbGVmdCB0aWNrCUFDU19SVEVFCS18CisjIEdSCTE5NSBcMzAzIE0tQwlzaW5nbGUgcmlnaHQgdGljawlBQ1NfTFRFRQl8LQorIyBHVQkxOTMgXDMwMSBNLUEJc2luZ2xlIHVwIHRpY2sJCUFDU19CVEVFCV98XworIyBHVgkxNzkgXDI2MyBNLTMJc2luZ2xlIHZlcnRpY2FsIGxpbmUJQUNTX1ZMSU5FCisjIEdjCTIwNiBcMzE2IE0tTglkb3VibGUgaW50ZXJzZWN0aW9uCisjIEdkCTIwMyBcMzEzIE0tSwlkb3VibGUgZG93biB0aWNrCisjIEdoCTIwNSBcMzE1IE0tTQlkb3VibGUgaG9yaXpvbnRhbCBsaW5lCisjIEdsCTIwNCBcMjA0IE0tTAlkb3VibGUgbGVmdCB0aWNrCisjIEdyCTE4NSBcMjcxIE0tOQlkb3VibGUgcmlnaHQgdGljaworIyBHdQkyMDIgXDMxMiBNLUoJZG91YmxlIHVwIHRpY2sKKyMgR3YJMTg2IFwyNzIgTS06CWRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisjCisjIFRoZSBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSB0aGUgc2luZ2xlLWxpbmUgY2FwcyBhbmQgZGlzY2FyZCB0aGUgb3RoZXJzCisjICh2aWEgSUdOT1JFIGFsaWFzZXMgZnVydGhlciBkb3duKS4gIFdlIGRvbid0IHdhbnQgdG8gZG8gbm9ybWFsIHBhZCAKKyMgdHJhbnNsYXRpb24gb24gdGhlc2UsIHRoZXkncmUgb2Z0ZW4gc2luZ2xlLWNoYXJhY3RlciBwcmludGFibGUgQVNDSUkKKyMgc3RyaW5ncyB0aGF0IGhhcHBlbiB0byBiZSBudW1lcmljcy4gIFRoZXJlJ3MgYXdrIGNvZGUgaW4gcGFyYW1ldHJpemVkLnNoCisjIHRoYXQgZGV0ZWN0cyB0aGUgYWNzXyBwcmVmaXggYW5kIHVzZXMgaXQgdG8gc3VwcHJlc3MgcGFkIHRyYW5zbGF0aW9uLgorIyBUaGVzZSB0ZXJtaW5mbyBuYW1lcyBhcmUgaW52ZW50ZWQuCisjCithY3NfdWxjb3JuZXIJCQlPVEcyCXN0cglHMgktCQktCS0tLS0tCXNpbmdsZSB1cHBlciBsZWZ0CithY3NfbGxjb3JuZXIJCQlPVEczCXN0cglHMwktCQktCS0tLS0tCXNpbmdsZSBsb3dlciBsZWZ0CithY3NfdXJjb3JuZXIJCQlPVEcxCXN0cglHMQktCQktCS0tLS0tCXNpbmdsZSB1cHBlciByaWdodAorYWNzX2xyY29ybmVyCQkJT1RHNAlzdHIJRzQJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgcmlnaHQKK2Fjc19sdGVlCQkJT1RHUglzdHIJR1IJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgcmlnaHQKK2Fjc19ydGVlCQkJT1RHTAlzdHIJR0wJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgbGVmdAorYWNzX2J0ZWUJCQlPVEdVCXN0cglHVQktCQktCS0tLS0tCXRlZSBwb2ludGluZyB1cAorYWNzX3R0ZWUJCQlPVEdECXN0cglHRAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBkb3duCithY3NfaGxpbmUJCQlPVEdICXN0cglHSAktCQktCS0tLS0tCXNpbmdsZSBob3Jpem9udGFsIGxpbmUKK2Fjc192bGluZQkJCU9UR1YJc3RyCUdWCS0JCS0JLS0tLS0Jc2luZ2xlIHZlcnRpY2FsIGxpbmUKK2Fjc19wbHVzCQkJT1RHQwlzdHIJR0MJLQkJLQktLS0tLQlzaW5nbGUgaW50ZXJzZWN0aW9uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNSU5GTyBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBhbG1vc3QgYWxsIGNvbW1lbnRzLiAgV2hhdCBpdCdzIG1haW5seSBmb3IgaXMgdG8gZGVzY3JpYmUKKyMgd2hhdCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBzcXVlZXplZCBvdXQgdG8gZ2V0IGRvd24gdG8gdGhlIFhTSSBDdXJzZXMKKyMgc3RhbmRhcmQgc2V0LiAgVGhleSBhcmUgZmxhZ2dlZCB3aXRoIEsuCisjCisjIEhQIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIEhQCisjIHRlcm1pbmZvIGZpbGVzLiAgRXhjZXB0IGZvciBtZW1vcnlfbG9jayBhbmQgbWVtb3J5X3VubG9jaywgdGhleSBhcmUKKyMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBTVnI0IGV4dGVuc2lvbnMsIGJ1dCB0aGV5IG1ha2UgdGhlIGJpbmFyeSBmb3JtYXQKKyMgZGlmZmVyZW50LiAgR3Jyci4uLi4KKyMKK21lbW9yeV9sb2NrCQkJbWVtbAlzdHIJbWwJLQkJLQktLS0tSwlsb2NrIG1lbW9yeSBhYm92ZSBjdXJzb3IKK21lbW9yeV91bmxvY2sJCQltZW11CXN0cgltdQktCQktCS0tLS1LCXVubG9jayBtZW1vcnkKKyNwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorI2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCisjbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscworI2tleV9mMTEJCQlrZjExCXN0cglGMQktCQktCS0tLS0tCUYxMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjEyCQkJa2YxMglzdHIJRjIJLQkJLQktLS0tLQlGMTIgZnVuY3Rpb24ga2V5Cisja2V5X2YxMwkJCWtmMTMJc3RyCUYzCS0JCS0JLS0tLS0JRjEzIGZ1bmN0aW9uIGtleQorI2tleV9mMTQJCQlrZjE0CXN0cglGNAktCQktCS0tLS0tCUYxNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE1CQkJa2YxNQlzdHIJRjUJLQkJLQktLS0tLQlGMTUgZnVuY3Rpb24ga2V5Cisja2V5X2YxNgkJCWtmMTYJc3RyCUY2CS0JCS0JLS0tLS0JRjE2IGZ1bmN0aW9uIGtleQorI2tleV9mMTcJCQlrZjE3CXN0cglGNwktCQktCS0tLS0tCUYxNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE4CQkJa2YxOAlzdHIJRjgJLQkJLQktLS0tLQlGMTggZnVuY3Rpb24ga2V5Cisja2V5X2YxOQkJCWtmMTkJc3RyCUY5CS0JCS0JLS0tLS0JRjE5IGZ1bmN0aW9uIGtleQorI2tleV9mMjAJCQlrZjIwCXN0cglGQQktCQktCS0tLS0tCUYyMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjIxCQkJa2YyMQlzdHIJRkIJLQkJLQktLS0tLQlGMjEgZnVuY3Rpb24ga2V5Cisja2V5X2YyMgkJCWtmMjIJc3RyCUZDCS0JCS0JLS0tLS0JRjIyIGZ1bmN0aW9uIGtleQorI2tleV9mMjMJCQlrZjIzCXN0cglGRAktCQktCS0tLS0tCUYyMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI0CQkJa2YyNAlzdHIJRkUJLQkJLQktLS0tLQlGMjQgZnVuY3Rpb24ga2V5Cisja2V5X2YyNQkJCWtmMjUJc3RyCUZGCS0JCS0JLS0tLS0JRjI1IGZ1bmN0aW9uIGtleQorI2tleV9mMjYJCQlrZjI2CXN0cglGRwktCQktCS0tLS0tCUYyNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjI3CQkJa2YyNwlzdHIJRkgJLQkJLQktLS0tLQlGMjcgZnVuY3Rpb24ga2V5Cisja2V5X2YyOAkJCWtmMjgJc3RyCUZJCS0JCS0JLS0tLS0JRjI4IGZ1bmN0aW9uIGtleQorI2tleV9mMjkJCQlrZjI5CXN0cglGSgktCQktCS0tLS0tCUYyOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMwCQkJa2YzMAlzdHIJRksJLQkJLQktLS0tLQlGMzAgZnVuY3Rpb24ga2V5Cisja2V5X2YzMQkJCWtmMzEJc3RyCUZMCS0JCS0JLS0tLS0JRjMxIGZ1bmN0aW9uIGtleQorI2tleV9mMzIJCQlrZjMyCXN0cglGTQktCQktCS0tLS0tCUYzMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjMzCQkJa2YzMwlzdHIJRk4JLQkJLQktLS0tLQlGMzMgZnVuY3Rpb24ga2V5Cisja2V5X2YzNAkJCWtmMzQJc3RyCUZPCS0JCS0JLS0tLS0JRjM0IGZ1bmN0aW9uIGtleQorI2tleV9mMzUJCQlrZjM1CXN0cglGUAktCQktCS0tLS0tCUYzNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjM2CQkJa2YzNglzdHIJRlEJLQkJLQktLS0tLQlGMzYgZnVuY3Rpb24ga2V5Cisja2V5X2YzNwkJCWtmMzcJc3RyCUZSCS0JCS0JLS0tLS0JRjM3IGZ1bmN0aW9uIGtleQorI2tleV9mMzgJCQlrZjM4CXN0cglGUwktCQktCS0tLS0tCUYzOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM5CQkJa2YzOQlzdHIJRlQJLQkJLQktLS0tLQlGMzkgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MAkJCWtmNDAJc3RyCUZVCS0JCS0JLS0tLS0JRjQwIGZ1bmN0aW9uIGtleQorI2tleV9mNDEJCQlrZjQxCXN0cglGVgktCQktCS0tLS0tCUY0MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQyCQkJa2Y0MglzdHIJRlcJLQkJLQktLS0tLQlGNDIgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MwkJCWtmNDMJc3RyCUZYCS0JCS0JLS0tLS0JRjQzIGZ1bmN0aW9uIGtleQorI2tleV9mNDQJCQlrZjQ0CXN0cglGWQktCQktCS0tLS0tCUY0NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ1CQkJa2Y0NQlzdHIJRloJLQkJLQktLS0tLQlGNDUgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NgkJCWtmNDYJc3RyCUZhCS0JCS0JLS0tLS0JRjQ2IGZ1bmN0aW9uIGtleQorI2tleV9mNDcJCQlrZjQ3CXN0cglGYgktCQktCS0tLS0tCUY0NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ4CQkJa2Y0OAlzdHIJRmMJLQkJLQktLS0tLQlGNDggZnVuY3Rpb24ga2V5Cisja2V5X2Y0OQkJCWtmNDkJc3RyCUZkCS0JCS0JLS0tLS0JRjQ5IGZ1bmN0aW9uIGtleQorI2tleV9mNTAJCQlrZjUwCXN0cglGZQktCQktCS0tLS0tCUY1MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjUxCQkJa2Y1MQlzdHIJRmYJLQkJLQktLS0tLQlGNTEgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MgkJCWtmNTIJc3RyCUZnCS0JCS0JLS0tLS0JRjUyIGZ1bmN0aW9uIGtleQorI2tleV9mNTMJCQlrZjUzCXN0cglGaAktCQktCS0tLS0tCUY1MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU0CQkJa2Y1NAlzdHIJRmkJLQkJLQktLS0tLQlGNTQgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NQkJCWtmNTUJc3RyCUZqCS0JCS0JLS0tLS0JRjU1IGZ1bmN0aW9uIGtleQorI2tleV9mNTYJCQlrZjU2CXN0cglGawktCQktCS0tLS0tCUY1NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjU3CQkJa2Y1NwlzdHIJRmwJLQkJLQktLS0tLQlGNTcgZnVuY3Rpb24ga2V5Cisja2V5X2Y1OAkJCWtmNTgJc3RyCUZtCS0JCS0JLS0tLS0JRjU4IGZ1bmN0aW9uIGtleQorI2tleV9mNTkJCQlrZjU5CXN0cglGbgktCQktCS0tLS0tCUY1OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYwCQkJa2Y2MAlzdHIJRm8JLQkJLQktLS0tLQlGNjAgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MQkJCWtmNjEJc3RyCUZwCS0JCS0JLS0tLS0JRjYxIGZ1bmN0aW9uIGtleQorI2tleV9mNjIJCQlrZjYyCXN0cglGcQktCQktCS0tLS0tCUY2MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjYzCQkJa2Y2MwlzdHIJRnIJLQkJLQktLS0tLQlGNjMgZnVuY3Rpb24ga2V5CisjCisjIElCTSBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBJQk0KKyMgdGVybWluZm8gZmlsZXMuCisjCisjIFRoZSBwbGFjZXMgaW4gdGhlIGJveFsxMl0gY2FwYWJpbGl0aWVzIGNvcnJlc3BvbmQgdG8gYWNzYyBjaGFyYWN0ZXJzLCBoZXJlIGlzCisjIHRoZSBtYXBwaW5nOgorIworIwlib3gxWzBdICA9IEFDU19VTENPUk5FUgorIwlib3gxWzFdICA9IEFDU19ITElORQkKKyMJYm94MVsyXSAgPSBBQ1NfVVJDT1JORVIKKyMJYm94MVszXSAgPSBBQ1NfVkxJTkUKKyMJYm94MVs0XSAgPSBBQ1NfTFJDT1JORVIKKyMJYm94MVs1XSAgPSBBQ1NfTExDT1JORVIKKyMJYm94MVs2XSAgPSBBQ1NfVFRFRQorIwlib3gxWzddICA9IEFDU19SVEVFCisjCWJveDFbOF0gID0gQUNTX0JURUUKKyMJYm94MVs5XSAgPSBBQ1NfTFRFRQorIwlib3gxWzEwXSA9IEFDU19QTFVTCisjCisjIFRoZSBib3gyIGNoYXJhY3RlcnMgYXJlIHRoZSBkb3VibGUtbGluZSB2ZXJzaW9ucyBvZiB0aGVzZSBmb3JtcyBncmFwaGljcy4KKyMKKyNib3hfY2hhcnNfMQkJCWJveDEJc3RyCWJ4CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgcHJpbWFyeSBzZXQKKyNib3hfY2hhcnNfMgkJCWJveDIJc3RyCWJ5CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgc2Vjb25kYXJ5IHNldAorI2JveF9hdHRyXzEJCQliYXR0MQlzdHIJQngJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gxCisjYm94X2F0dHJfMgkJCWJhdHQyCXN0cglCeQktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDIKKyNjb2xvcl9iZ18wCQkJY29sYjAJc3RyCWQwCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAwCisjY29sb3JfYmdfMQkJCWNvbGIxCXN0cglkMQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMQorI2NvbG9yX2JnXzIJCQljb2xiMglzdHIJZDIJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDIKKyNjb2xvcl9iZ18zCQkJY29sYjMJc3RyCWQzCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAzCisjY29sb3JfYmdfNAkJCWNvbGI0CXN0cglkNAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNAorI2NvbG9yX2JnXzUJCQljb2xiNQlzdHIJZDUJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDUKKyNjb2xvcl9iZ182CQkJY29sYjYJc3RyCWQ2CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA2CisjY29sb3JfYmdfNwkJCWNvbGI3CXN0cglkNwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNworI2NvbG9yX2ZnXzAJCQljb2xmMAlzdHIJYzAJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9mZ18xCQkJY29sZjEJc3RyCWMxCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAxCisjY29sb3JfZmdfMgkJCWNvbGYyCXN0cgljMgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMgorI2NvbG9yX2ZnXzMJCQljb2xmMwlzdHIJYzMJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9mZ180CQkJY29sZjQJc3RyCWM0CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA0CisjY29sb3JfZmdfNQkJCWNvbGY1CXN0cgljNQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNQorI2NvbG9yX2ZnXzYJCQljb2xmNglzdHIJYzYJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9mZ183CQkJY29sZjcJc3RyCWM3CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA3CisjZm9udF8wCQkJCWZvbnQwCXN0cglmMAktCQktCS0tLS0tCXNlbGVjdCBmb250IDAKKyNmb250XzEJCQkJZm9udDEJc3RyCWYxCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMQorI2ZvbnRfMgkJCQlmb250MglzdHIJZjIJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAyCisjZm9udF8zCQkJCWZvbnQzCXN0cglmMwktCQktCS0tLS0tCXNlbGVjdCBmb250IDMKKyNmb250XzQJCQkJZm9udDQJc3RyCWY0CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNAorI2ZvbnRfNQkJCQlmb250NQlzdHIJZjUJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA1CisjZm9udF82CQkJCWZvbnQ2CXN0cglmNgktCQktCS0tLS1LCXNlbGVjdCBmb250IDYKKyNmb250XzcJCQkJZm9udDcJc3RyCWY3CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNworI2tleV9iYWNrX3RhYgkJCWtidGFiCXN0cglrMAktCQktCS0tLS0tCWJhY2t0YWIga2V5Cisja2V5X2RvCQkJCWtkbwlzdHIJa2kJLQkJLQktLS0tSwlkbyByZXF1ZXN0IGtleQorI2tleV9jb21tYW5kCQkJa2NtZAlzdHIJa2QJLQkJLQktLS0tSwljb21tYW5kLXJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmRfcGFuZQkJa2NwbglzdHIJa1cJLQkJLQktLS0tSwljb21tYW5kLXBhbmUga2V5Cisja2V5X2VuZAkJCWtlbmQJc3RyCWt3CS0JCS0JLS0tLS0JZW5kIGtleQorI2tleV9oZWxwCQkJa2hscAlzdHIJa3EJLQkJLQktLS0tLQloZWxwIGtleQorI2tleV9uZXdsaW5lCQkJa25sCXN0cglubAktCQktCS0tLS1LCW5ld2xpbmUga2V5Cisja2V5X25leHRfcGFuZQkJCWtucG4Jc3RyCWt2CS0JCS0JLS0tLUsJbmV4dC1wYW5lIGtleQorI2tleV9wcmV2X2NtZAkJCWtwcG4Jc3RyCWtwCS0JCS0JLS0tLUsJcHJldmlvdXMtY29tbWFuZCBrZXkKKyNrZXlfcHJldl9wYW5lCQkJa3BwbglzdHIJa1YJLQkJLQktLS0tSwlwcmV2aW91cy1wYW5lIGtleQorI2tleV9xdWl0CQkJa3F1aXQJc3RyCWtRCS0JCS0JLS0tLUsJcXVpdCBrZXkKKyNrZXlfc2VsZWN0CQkJa3NlbAlzdHIJa1UJLQkJLQktLS0tLQlzZWxlY3Qga2V5Cisja2V5X3Njcm9sbF9sZWZ0CQlrc2NsCXN0cglregktCQktCS0tLS1LCXNjcm9sbCBsZWZ0Cisja2V5X3Njcm9sbF9yaWdodAkJa3NjcglzdHIJa1oJLQkJLQktLS0tSwlzY3JvbGwgcmlnaHQKKyNrZXlfdGFiCQkJa3RhYglzdHIJa28JLQkJLQktLS0tSwl0YWIga2V5Cisja2V5X3NtYXBfaW4xCQkJa21wZjEJc3RyCUt2CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgaW5wdXQKKyNrZXlfc21hcF9vdXQxCQkJa21wdDEJc3RyCUtWCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgb3V0cHV0Cisja2V5X3NtYXBfaW4yCQkJa21wZjIJc3RyCUt3CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgaW5wdXQKKyNrZXlfc21hcF9vdXQyCQkJa21wdDIJc3RyCUtXCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgb3V0cHV0Cisja2V5X3NtYXBfaW4zCQkJa21wZjMJc3RyCUt4CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgaW5wdXQKKyNrZXlfc21hcF9vdXQzCQkJa21wdDMJc3RyCUtYCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgb3V0cHV0Cisja2V5X3NtYXBfaW40CQkJa21wZjQJc3RyCUt5CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgaW5wdXQKKyNrZXlfc21hcF9vdXQ0CQkJa21wdDQJc3RyCUtZCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgb3V0cHV0Cisja2V5X3NtYXBfaW41CQkJa21wZjUJc3RyCUt6CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgaW5wdXQKKyNrZXlfc21hcF9vdXQ1CQkJa21wdDUJc3RyCUtaCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgb3V0cHV0CisjYXBwbF9kZWZpbmVkX3N0cgkJYXBzdHIJc3RyCXphCS0JCS0JLS0tLUsJYXBwbGljYXRpb24tZGVmaW5lZCBzdHJpbmcKKyMgVGhlIGtleV9zbWFwX2luWzY3ODldIGFuZCBrZXlfc21hcF9vdXRbNjc4OV0gY2FwYWJpbGl0aWVzIGFyZW4ndCBkZXNjcmliZWQgaW4KKyMgdGhlIElCTSBtYW51YWwgcGFnZXMsIHNvIHRoZSBjYXAgbmFtZSBzdHJpbmdzIGFyZSBndWVzc2VzLiAgVGhlIHRlcm1pbmZvCisjIG5hbWVzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHJpZ2h0LCB0aGUgdGVybWNhcCBvbmVzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuCisja2V5X3NtYXBfaW42CQkJa21wZjYJc3RyCWshCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgaW5wdXQKKyNrZXlfc21hcF9vdXQ2CQkJa21wdDYJc3RyCUtACS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgb3V0cHV0Cisja2V5X3NtYXBfaW43CQkJa21wZjcJc3RyCWsjCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgaW5wdXQKKyNrZXlfc21hcF9vdXQ3CQkJa21wdDcJc3RyCUskCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgb3V0cHV0Cisja2V5X3NtYXBfaW44CQkJa21wZjgJc3RyCWslCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggaW5wdXQKKyNrZXlfc21hcF9vdXQ4CQkJa21wdDgJc3RyCUteCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggb3V0cHV0Cisja2V5X3NtYXBfaW45CQkJa21wZjkJc3RyCWsmCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgaW5wdXQKKyNrZXlfc21hcF9vdXQ5CQkJa21wdDkJc3RyCUsqCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgb3V0cHV0CisjIFVuZG9jdW1lbnRlZCBjYXBhYmlsaXRpZXMgZW5kIGhlcmUKKyNrZXlfc2YxCQkJa3NmMQlzdHIJUzEJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxCisja2V5X3NmMgkJCWtzZjIJc3RyCVMyCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMgorI2tleV9zZjMJCQlrc2YzCXN0cglTMwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDMKKyNrZXlfc2Y0CQkJa3NmNAlzdHIJUzQJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA0Cisja2V5X3NmNQkJCWtzZjUJc3RyCVM1CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNQorI2tleV9zZjYJCQlrc2Y2CXN0cglTNgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDYKKyNrZXlfc2Y3CQkJa3NmNwlzdHIJUzcJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA3Cisja2V5X3NmOAkJCWtzZjgJc3RyCVM4CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOAorI2tleV9zZjkJCQlrc2Y5CXN0cglTOQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDkKKyNrZXlfc2YxMAkJCWtzZjEwCXN0cglTQQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEwCisjIEFJWCB2ZXJzaW9uIDMgZG9jdW1lbnRzIGRpZmZlcmVudCBjb2RlcyBmb3IgRjExLCBGMTIgYW5kIGRvZXMgbm90IG1lbnRpb24KKyMgRjEzLUY2NC4gIEFJWCB2ZXJzaW9uIDQgdXNlcyB0aGUgc2FtZSBuYW1pbmcgZm9yIEYwLUY2MyBhcyBhYm92ZS4KKyNrZXlfZjExCQkJa2YxMQlzdHIJazwJLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTEKKyNrZXlfZjEyCQkJa2YxMglzdHIJaz4JLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTIKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyNrZXlfYWN0aW9uCQkJa2FjdAlzdHIJa0oJLQkJLQktLS0tSwlzZW50IGJ5IGFjdGlvbiBrZXkKKyMgVGhlIElCTSBkb2NzIHNheSB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGZvciB0YWJsZS1kcmF3aW5nLCBhbmQgYXJlCisjIHZhbGlkIG9ubHkgZm9yIGFpeHRlcm0gZGVzY3JpcHRpb25zLgorI2VudGVyX3RvcGxpbmVfbW9kZQkJdG9wbAlzdHIJdHAJLQkJLQktLS0tSwlzdGFydCB0b3AtbGluZSBtb2RlCisjZW50ZXJfYm90dG9tX21vZGUJCWJ0bWwJc3RyCWJtCS0JCS0JLS0tLUsJc3RhcnQgYm90dG9tLWxpbmUgbW9kZQorI2VudGVyX3J2ZXJ0X21vZGUJCXJ2ZXJ0CXN0cglydgktCQktCS0tLS1LCXN0YXJ0IHJpZ2h0LXZlcnRpY2FsIG1vZGUKKyNlbnRlcl9sdmVydF9tb2RlCQlsdmVydAlzdHIJbHYJLQkJLQktLS0tSwlzdGFydCBsZWZ0LXZlcnRpY2FsIG1vZGUKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEFMSUFTIERFQ0xBUkFUSU9OUworIworIyBIZXJlIHdlIHNldCB1cCBhbGlhc2VzIGZvciB0cmFuc2xhdGluZyBleHRlbnNpb25zIGludG8gc3RhbmRhcmQgdGVybWluZm8uCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtY2FwIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBCU0QgYWxpYXNlczoKKyMKKyMgVGhpcyBpcyBhIGNvbW1vbiBlcnJvciBpbiBtYW55IHRlcm1jYXAgZmlsZXMuICBXZSdsbCBnZXQgbm90aWZpZWQgZHVyaW5nCisjIHRyYW5zbGF0aW9uIHdoZW4gdGhpcyAob3IgYW55IG90aGVyIGFsaWFzKSBmaXJlcy4KKyMKK2NhcGFsaWFzCXNiCXNyCUJTRAlzY3JvbGwgdGV4dCBkb3duCisjCisjIEFUJlQgZXh0ZW5zaW9uczoKKyMKKyMgVGhlIG9sZCBBVCZUIDU0MTAsIDU0MjAsIDU0MjUsIHBjNjMwMHBsdXMsIDYxMCwgYW5kIHM0IGVudHJpZXMgdXNlZCBhIHNldCBvZgorIyBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMuICBJdHMgc2lnbmF0dXJlIGlzIHRoZSBLTSBjYXBhYmlsaXR5LCB1c2VkIHRvIG5hbWUKKyMgc29tZSBzb3J0IG9mIGtleW1hcCBmaWxlLiAgRUUsIEJPLCBDSSwgQ1YsIFhTLCBEUywgRkwgYW5kIEZFIGFyZSBpbiB0aGlzCisjIHNldC4gIENvbW1lbnRzIGluIHRoZSBvcmlnaW5hbCwgYW5kIGEgbGl0dGxlIGNyb3NzLWNoZWNraW5nIHdpdGggb3RoZXIgQVQmVAorIyBkb2N1bWVudGF0aW9uLCBzZWVtIHRvIGVzdGFibGlzaCB0aGUgZm9sbG93aW5nIG1hcHBpbmdzOgorIworY2FwYWxpYXMJQk8JbXIJQVQmVAllbnRlcl9yZXZlcnNlX21vZGUKK2NhcGFsaWFzCUNJCXZpCUFUJlQJY3Vyc29yX2ludmlzaWJsZQorY2FwYWxpYXMJQ1YJdmUJQVQmVAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlEUwltaAlBVCZUCWVudGVyX2RpbV9tb2RlCisjY2FwYWxpYXMJRUUJbWUJQVQmVAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJRkUJTEYJQVQmVAlsYWJlbF9vbgorY2FwYWxpYXMJRkwJTE8JQVQmVAlsYWJlbF9vZmYKK2NhcGFsaWFzCVhTCW1rCUFUJlQJZW50ZXJfc2VjdXJlX21vZGUKKyMKKyMgV2UgY29tbWVudCBvdXQgRUUgYmVjYXVzZSB0aGUgY29uZmxpY3RpbmcgWEVOSVggRUUgaXMgbW9yZSBjb21tb24gaW4gCisjIG9sZCBlbnRyaWVzLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBUaGVzZSBhcmUgdGhlIG9uZXMgd2Uga25vdyBob3cgdG8gdHJhbnNsYXRlIGRpcmVjdGx5OgorIworY2FwYWxpYXMJRUUJbWgJWEVOSVgJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUdFCWFlCVhFTklYCWV4aXRfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJR1MJYXMJWEVOSVgJZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJQ0YJdmkJWEVOSVgJY3Vyc29yX2ludmlzCitjYXBhbGlhcwlDTwl2ZQlYRU5JWAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlFTglANwlYRU5JWAlrZXlfZW5kCitjYXBhbGlhcwlITQlraAlYRU5JWAlrZXlfaG9tZQorY2FwYWxpYXMJTEQJa0wJWEVOSVgJa2V5X2RsCitjYXBhbGlhcwlQRAlrTglYRU5JWAlrZXlfbnBhZ2UKK2NhcGFsaWFzCVBOCXBvCVhFTklYCXBydHJfb2ZmCitjYXBhbGlhcwlQUwlwZglYRU5JWAlwcnRyX29uCitjYXBhbGlhcwlQVQlrUAlYRU5JWAlrZXlfcHBhZ2UKK2NhcGFsaWFzCVJUCUA4CVhFTklYCWtlbnQKK2NhcGFsaWFzCVVQCWt1CVhFTklYCWtjdXUxCitjYXBhbGlhcwlHNglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VTENPUk5FUgorY2FwYWxpYXMJRzcJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTExDT1JORVIKK2NhcGFsaWFzCUc1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VSQ09STkVSCitjYXBhbGlhcwlHOAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MUkNPUk5FUgorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFRFRQorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUlRFRQorY2FwYWxpYXMJR3UJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfQlRFRQorY2FwYWxpYXMJR2QJSUdOT1JFCVhFTklYCWRvdWJsZSBBQ1NfVFRFRQorY2FwYWxpYXMJR2gJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfSExJTkUKK2NhcGFsaWFzCUd2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1ZMSU5FCitjYXBhbGlhcwlHYwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19QTFVTCitjYXBhbGlhcwlHRwlJR05PUkUJWEVOSVgJYWNzLWdsaXRjaAorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCWtxCSUxCUlCTQlrZXlfaGVscAorIworIyBJcmlzIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlIUwltaAlJUklTCWVudGVyX2RpbV9tb2RlCisjCisjIFRla3Ryb25peCBleHRlbnNpb25zOgorIworY2FwYWxpYXMJS0EJazsJVGVrCWtleV9mMTAKK2NhcGFsaWFzCUtCCUYxCVRlawlrZXlfZjExCitjYXBhbGlhcwlLQwlGMglUZWsJa2V5X2YxMgorY2FwYWxpYXMJS0QJRjMJVGVrCWtleV9mMTMKK2NhcGFsaWFzCUtFCUY0CVRlawlrZXlfZjE0CitjYXBhbGlhcwlLRglGNQlUZWsJa2V5X2YxNQorY2FwYWxpYXMJQkMJU2IJVGVrCXNldF9iYWNrZ3JvdW5kCitjYXBhbGlhcwlGQwlTZglUZWsJc2V0X2ZvcmVncm91bmQKKyMKKyMgVGhlcmUgYXJlIGFsc28gdGhlIGZvbGxvd2luZzoKKyMKKyMJWEVOSVgJWEVOSVggdmFyaWFibGUgbmFtZQluYW1lIGNsYXNoIHdpdGggdGVybWluZm8/CisjCS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwlDTAlrZXlfY2hhcl9sZWZ0CisjCUNSCWtleV9jaGFyX3JpZ2h0CisjCUNXCWtleV9jaGFuZ2Vfd2luZG93CisjCUhQCT8/CisjCUxGCWtleV9saW5lZmVlZCAJCWxhYmVsX29mZgorIwlOVQlrZXlfbmV4dF91bmxvY2tlZF9jZWxsCisjCVBMCT8/CisjCVBSCT8/CisjCVJDCWtleV9yZWNhbGMJCXJlbW92ZV9jbG9jaworIwlSRglrZXlfdG9nZ2xlX3JlZgkJcmVxX2Zvcl9pbnB1dAorIwlXTAlrZXlfd29yZF9sZWZ0CisjCVdSCWtleV93b3JkX3JpZ2h0CisjCisjIElmIHlvdSBrbm93IHdoYXQgYW55IG9mIHRoZSBxdWVzdGlvbi1tYXJrZWQgb25lcyBtZWFuLCBwbGVhc2UgdGVsbCB1cy4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWluZm8gYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitpbmZvYWxpYXMJZm9udDAJczBkcwlJQk0Jc2V0MF9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDEJczFkcwlJQk0Jc2V0MV9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDIJczJkcwlJQk0Jc2V0Ml9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDMJczNkcwlJQk0Jc2V0M19kZXNfc2VxCitpbmZvYWxpYXMJa2J0YWIJa2NidAlJQk0Ja2V5X2JhY2t0YWIKK2luZm9hbGlhcwlrc2VsCWtzbHQJSUJNCWtleV9zZWxlY3QKKyMKKyMgU29tZSBvdGhlcnMgYXJlIGlkZW50aWNhbCB0byBTVnI0L1hQRzQgY2FwYWJpbGl0aWVzLCBpbiBwYXJ0aWN1bGFyOgorIyBrY21kLCBrZW5kLCBraGxwLCBhbmQga2YxMS4uLmtmNjMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisjIExvY2FsIFZhcmlhYmxlczoKKyMgY2FzZS1mb2xkLXNlYXJjaDpuaWwKKyMgdHJ1bmNhdGUtbGluZXM6dAorIyBFbmQ6CmRpZmYgLS1naXQgYS9pbmNsdWRlL0NhcHMudXdpbiBiL2luY2x1ZGUvQ2Fwcy51d2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MGVhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL0NhcHMudXdpbgpAQCAtMCwwICsxLDEwOTAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRGlja2V5CisjCisjICRJZDogQ2Fwcy51d2luLHYgMS40IDIwMDYvMDUvMjcgMTU6MzM6MDQgdG9tIEV4cCAkCisjCisjIFRoaXMgaXMgYW4gYWRhcHRhdGlvbiBvZiBuY3Vyc2VzJyB0ZXJtY2FwL3Rlcm1pbmZvIGNhcGFiaWxpdHkgdGFibGUsIHdoaWNoCisjIGlzIGRlc2lnbmVkIHRvIGFsaWduIHdpdGggVS9XaW4ncyB0ZXJtaW5mby4KKyMKKyMgVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGluaXRpYWxpemVycyBmb3IgdGFibGVzIHRoYXQgZHJpdmUgdGljLAorIyBpbmZvY21wLCBhbmQgdGhlIGxpYnJhcnkgY29tcGlsYXRpb24gY29kZSB1c2VkIHRvIHN1cHBvcnQgdGhlIHRlcm1jYXAgCisjIGNvbXBhdGliaWxpdHkgaGFjay4gIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFidWxhciBwb3J0aW9uIG9mIHRoZQorIyB0ZXJtaW5mbyg1KSBtYW4gcGFnZTsgbGluZXMgYmVnaW5uaW5nIHdpdGggYCMlJyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gYmVjb21lCisjIHRoZSB0ZXJtaW5mbyB0YWJsZS4KKyMKKyMgVGhpcyBmaWxlIGhhcyB0aHJlZSBtYWpvciBzZWN0aW9uczsgYSBzdGFuZGFyZC1jYXBhYmlsaXRpZXMgdGFibGUsIHR3bworIyBleHRlbnNpb24tY2FwYWJpbGl0eSB0YWJsZXMsIGFuZCBhIHNlY3Rpb24gb2YgYWxpYXNlcyBkZWNsYXJhdGlvbnMuCisjIFRoZSBmaXJzdCB0d28gaGF2ZSB0aGUgc2FtZSBmb3JtYXQsIGFzIGZvbGxvd3M6CisjCisjIEZJTEUgRk9STUFUCisjCisjIENvbHVtbiAxOiB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lCisjIENvbHVtbiAyOiB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDM6IGNhcGFiaWxpdHkgdHlwZSAoYm9vbGVhbiwgbnVtZXJpYywgb3Igc3RyaW5nKQorIyBDb2x1bW4gNDogdGVybWNhcCBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDU6IEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA2OiB2YWx1ZSBmb3IgS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDc6IExlYWQgd2l0aCBgWScgaWYgY2FwYWJpbGl0eSBzaG91bGQgYmUgZW1pdHRlZCBpbiB0ZXJtY2FwCisjICAgICAgICAgICB0cmFuc2xhdGlvbnMsIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDg6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24KKyMKKyMgVGhlIGNvZGVzIGZvbGxvd2luZyBbWS1dIGluIGNvbHVtbiA3IGRlc2NyaWJlIHRoZSB2ZXJzaW9ucyBvZiB0ZXJtY2FwIHdoaWNoCisjIHVzZSB0aGUgZ2l2ZW4gY2FwYWJpbGl0eS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbm90IHVzZWQgYnkgdGhlIGN1cnNlcyBsaWJyYXJ5CisjIHByb3BlcjsgcmF0aGVyLCBpdCdzIHRoZXJlIHRvIGhlbHAgdGhlIHRlcm1pbmZvIG1haW50YWluZXIgYXZvaWQgZW1pdHRpbmcKKyMgdGVybWNhcCBlbnRyeSB0cmFuc2xhdGlvbnMgdGhhdCBhcmUgbW9yZSB0aGFuIDEwMjMgYnl0ZXMgbG9uZyAoYW5kIHRhbmsgYQorIyBsb3Qgb2Ygb2xkIHRlcm1jYXAtdXNpbmcgcHJvZ3JhbXMpLiAgVGhlIGNvZGVzIHJlYWQgYXMgZm9sbG93czoKKyMJQiA9IG1lbnRpb25lZCBpbiB0aGUgQlNEIG1hbiBwYWdlIGZvciA0LjRCU0QgY3Vyc2VzCisjCUMgPSB1c2VkIGJ5IHRoZSA0LjRCU0QgY3Vyc2VzIGxpYnJhcnkKKyMJRyA9IG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgR05VIHRlcm1jYXAKKyMJRSA9IHVzZWQgYnkgR05VIEVtYWNzCisjCUsgPSByZW1vdmUgdGhpcyB0ZXJtaW5mbyBjYXBhYmlsaXR5IHdoZW4gdHJhbnNsYXRpbmcgdG8gc3RhbmRhcmQgZm9ybWF0CisjIFRoZSBpbXBvcnRhbnQgY29kZXMgYXJlIEMgYW5kIEUuICBBIGNhcCB3aXRoIEMgb3IgRSBzaG91bGQgYmUgcHJlc2VydmVkIGluCisjIHRyYW5zbGF0aW9uIGlmIHBvc3NpYmxlLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBwcmVzZXJ2aW5nIGFsbCBzdWNoIGNhcHMgbWF5CisjIGxlYWQgdG8gc29tZSB0ZXJtY2FwIHRyYW5zbGF0aW9ucyBiZWluZyB0b28gbG9uZy4gIFRoZSB0ZXJtY2FwIG1haW50YWluZXIKKyMgaGFzIGEgYml0IG9mIGEganVnZ2xpbmcgYWN0IHRvIGRvLi4ucG90ZW50aWFsIHByb2JsZW0gY2FzZXMgYXJlIG1hcmtlZCB3aXRoCisjIGFuIGFzdGVyaXNrICgqKS4KKyMKKyMgVGhlIGFsaWFzZXMgc2VjdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisjCisjIENvbHVtbiAxOiBlaXRoZXIgYGNhcGFsaWFzJyBvciBgaW5mb2FsaWFzJworIyBDb2x1bW4gMjogbmFtZSB0byBiZSBhbGlhc2VkCisjIENvbHVtbiAzOiB3aGF0IG5hbWUgaXQgc2hvdWxkIHRyYW5zbGF0ZSB0by4gIFRoZSBuYW1lIElHTk9SRSBtZWFucyBpdAorIyAgICAgICAgICAgc2hvdWxkIGJlIGRpc2NhcmRlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgorIyBDb2x1bW4gNDogbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNldCAodXNlZCBmb3IgY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcykKKyMgQ29sdW1uIDU6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24gKHVzdWFsbHkgYW4gYXNzb2NpYXRlZCB0ZXJtaW5mbyB2YXJpYWJsZSkKKyMKKyMgSEFORExJTkcgVEVSTUNBUCBBTkQgVEVSTUlORk8gRVhURU5TSU9OUworIworIyBUaGVyZSBhcmUgYmFzaWNhbGx5IGZpdmUgZGlmZmVyZW50IHdheXMgdG8gaGFuZGxlIHRlcm1jYXAgYW5kIHRlcm1pbmZvCisjIGV4dGVuc2lvbnM6CisjCisjIDEuIERvbid0IGxpc3QgdGhlIGNhcG5hbWUgaGVyZSwgb3IgbGlzdCBpdCBidXQgY29tbWVudCBpdCBvdXQgKHRoZSBsYXR0ZXIKKyMgaXMgcHJlZmVyYWJsZTsgc29tZW9uZSBtaWdodCB3YW50IHRvIGhhbmRsZSBpdCBpbiB0aGUgZnV0dXJlKS4gIElmIHlvdSBkbworIyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIHRyZWF0ZWQgYXMgdW5rbm93biBhbmQgcmFpc2UgYSB3YXJuaW5nIGZyb20KKyMgdGhlIGNvbXBpbGVyLgorIworIyAyLiBBbGlhcyBpdC4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgaWYgdGhlIGNhcGFiaWxpdHkgaGFzIHRoZSBzYW1lIG1lYW5pbmcKKyMgYXMgYW4gYWxyZWFkeS1zdXBwb3J0ZWQgb25lLiAgVGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIGFsaWFzaW5nLCBlbWl0dGluZworIyBhbiBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2Ugd2hlbmV2ZXIgYW4gYWxpYXMgZmlyZXMuCisjCisjIDMuIExpc3QgaXQgaW4gdGhlIHN0YW5kYXJkIHRhYmxlLiAgWW91IGFsbW9zdCBjZXJ0YWlubHkgZG8gKm5vdCogd2FudAorIyB0byBkbyB0aGlzIC0tIHRoZSBjYXBhYmlsaXRpZXMgaW4gdGhhdCBvbmUsIGFuZCB0aGVpciBvcmRlciwgaGF2ZSBiZWVuCisjIGNhcmVmdWxseSBjaG9zZW4gdG8gYmUgU1ZyNC1iaW5hcnktY29tcGF0aWJsZSB3aGVuIHRoZXkncmUgd3JpdHRlbiBvdXQKKyMgYXMgYSB0ZXJtaW5mbyBvYmplY3QsIGFuZCBicmVha2luZyB0aGlzIHdvdWxkIGJlIGJhZC4gIEl0J3MgdXAgdGhlIG5jdXJzZXMKKyMgbGlicmFyeSB3aGF0IHRvIGRvIHdpdGggdGhlIHRlcm1pbmZvIGRhdGEgYWZ0ZXIgaXQncyByZWFkIGluLgorIworIyA0LiBMaXN0IGl0IGluIHRoZSBhbGlhc2VzIHRhYmxlIHdpdGggYW4gSUdOT1JFIHRhcmdldCBmaWVsZC4gIElmIHlvdQorIyBkbyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQgb24gaW5wdXQgKHRob3VnaCB0aGUgdXNlciB3aWxsCisjIGdldCBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dCBpdCkuCisjCisjIDUuIExpc3QgaXQgaW4gdGhlIGV4dGVuc2lvbnMgdGFibGUuIElmIHlvdSBkbyB0aGlzLCB0aGUgY29tcGlsZXIgd2lsbAorIyBzaWxlbnRseSBhY2NlcHQgdGhlIGNhcGFiaWxpdHksIGJ1dCB0aGUgY3Vyc2VzIGxpYnJhcnkgcHJvcGVyIHdpbGwgbmV2ZXIKKyMgc2VlIGl0IChiZWNhdXNlIGl0IHdvbid0IGJlIHdyaXR0ZW4gb3V0IGFzIHBhcnQgb2YgdGhlIHRlcm1pbmZvIG9iamVjdAorIyBmb3JtYXQpLiAgSXQncyB1cCB0byB5b3Ugd2hhdCB5b3UgaGF2ZSB0aGUgY29tcGlsZXIgZG8gd2l0aCBpdC4KKyMKKyMgVGhlcmUgYXJlIHR3byBvcHBvc2l0ZSByZWFzb25zIHRvIGNob29zZSBvcHRpb24gNS4gIE9uZSBpcyB3aGVuIHlvdSB3YW50CisjIHRvIGVhdCB0aGUgY2FwYWJpbGl0eSBzaWxlbnRseSBhbmQgZGlzY2FyZCBpdCB3aGVuIGRvaW5nIHRyYW5zbGF0aW9ucworIyB0byB0ZXJtaW5mbyB3aXRoIHRpYyAtSS4gIFNvbWUgdmVyeSBvbGQgb2Jzb2xldGUgQlNEIGNhcHMgbGlrZSA6a246IGFyZQorIyBpbiB0aGlzIGNsYXNzLiAgTm90aGluZyB3aWxsIGV2ZXIgdXNlIHRoZW0gYWdhaW4uCisjCisjIE1vcmUgdXN1YWxseSwgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIHRyeSB0byBkZWR1Y2Ugc29tZXRoaW5nIGZyb20gdGhlCisjIGNhcGFiaWxpdHkgdmFsdWUgdGhhdCBpdCBjYW4gdXNlIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIHlvdXIgb3V0cHV0IGZvcm1hdC4KKyMgWW91J2xsIG5lZWQgdG8gd3JpdGUgY3VzdG9tIGNvZGUsIHByb2JhYmx5IGluIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSBvcgorIyBwb3N0cHJvY2Vzc190ZXJtaW5mbygpLCB0byBoYW5kbGUgdGhlIHRyYW5zbGF0aW9uLgorIworIyBDT05UUk9MTElORyBFTlRSWSBMRU5HVEggCisjCisjIE5vdGVzIG9uIHNwZWNpZmljIGVsaXNpb25zIG1hZGUgdG8gZml0IHRyYW5zbGF0aW9ucyB3aXRoaW4gMTAyMyBieXRlczoKKyMKKyMgTWFjaGluZXMgd2l0aCBJQk0gUEMtbGlrZSBrZXlib2FyZHMgd2FudCB0byBiZSBhYmxlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nCisjIGtleXM6IGtleV9ucGFnZSwga2V5X3BwYWdlLCBrZXlfaG9tZSwga2V5X2xsICh3aGljaCBpcyB1c2VkIGZvciBpbiB0ZXJtY2FwLQorIyBvbmx5IGVudmlyb25tZW50cyBmb3IgRW5kIG9yIEhvbWUtRG93biksIGtleV9kYywgYW5kIGtleV9pYy4gIFRoaXMgaXMgYWxzbworIyB0aGUgc2V0IG9mIGtleXMgdGhlIGBqb2UnIGVkaXRvciB3aWxsIGJlIHVwc2V0IGlmIGl0IGNhbid0IHNlZS4gIFNvIGRvbid0IAorIyB0cmltIHRob3NlIG91dCBvZiB0aGUgc2V0IHRvIGJlIHRyYW5zbGF0ZWQgdG8gdGVybWNhcCwgb3IgdmFyaW91cyB1c2VycyBvZgorIyB0aGUgdGVybWNhcCBmaWxlIHdpbGwgYmVjb21lIGlyYXRlLgorIworIyBJdCBtaWdodCBsb29rIHRlbXB0aW5nIHRvIGxlYXZlIHRob3NlIGxvbmcgaW5pdCBzdHJpbmdzIG91dCBvZiB0cmFuc2xhdGlvbnMuCisjIFdlIGNhbid0IGRvIGl0ICh5ZXQpOyA0LjRCU0QgdHB1dCBhbmQgdHNldCB1c2UgdGhlbS4KKyMKKyMgV2UgcmV0YWluIHRoZSBzZ3IgY2FwYWJpbGl0eSBpbiB0cmFuc2xhdGlvbiBpbiBzcGl0ZSBvZiB0aGUgZmFjdCB0aGF0IG5laXRoZXIKKyMgNC40QlNEIG5vciBHTlUgRW1hY3MgdXNlcyBpdCwgYmVjYXVzZSAoYSkgc29tZSBlbnRyeSBuYW1pbmcgZGlzdGluY3Rpb25zIGFyZQorIyBoYXJkIHRvIHVuZGVyc3RhbmQgd2l0aG91dCBpdCwgYW5kIChiKSB0aGUgZW50cmllcyBpbiB3aGljaCBpdCBpcyBsb25nIHRlbmQKKyMgdG8gYmUgb2xkZXIgdHlwZXMgdGhhdCBkb24ndCB1c2UgdXAgYSBsb3Qgb2Ygc3RyaW5nIHNwYWNlIG9uIGZ1bmN0aW9uIGtleXMuCisjIFRoZSB0aWMoMSkgdHJhbnNsYXRpb24gY29kZSB3aWxsIGNvbXBsYWluIGFuZCBlbGlkZSBpdCBpZiBpdCBtYWtlcyBhIGNyaXRpY2FsCisjIGRpZmZlcmVuY2UgKHRoZXJlIGlzIHNwZWNpYWwgY29kZSBpbiB0aWMgdG8gcmVjb2duaXplIHRoaXMgc2l0dWF0aW9uKS4KKyMKKyMgWWVzLCBCU0QgdHNldCgxKSB1c2VzIGhwYS4gIFdlIGVsaWRlIGhwYS92cGEgYW55d2F5IGJlY2F1c2UgdGhlIG1vdGlvbgorIyBvcHRpbWl6ZXIgaW4gQlNEIGN1cnNlcyBkaWRuJ3QgdXNlIHRoZW0uICBUaGlzIG9taXNzaW9uIHNlZW1zIHRvIGJlIHRoZQorIyBzaW5nbGUgbW9zdCBlZmZlY3RpdmUgb25lLCBpdCBzaG9ydGVuZWQgdGhlIHJlc29sdmVkIGxlbmd0aCBvZiBhbGwgdGhpcnRlZW4KKyMgcHJvYmxlbSBlbnRyaWVzIGluIHRoZSA5LjkuMCB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgYmVsb3cgY3JpdGljYWwuCisjCisjIEl0IHdvdWxkIGJlIG5pY2UgdG8ga2VlcCBmMTEgYW5kIGYxMiBmb3IgRW1hY3MgdXNlLCBidXQgYSBjb3VwbGUgb2YgdGVybWNhcAorIyB0cmFuc2xhdGlvbnMgZ28gYmFjayBvdmVyIGNyaXRpY2FsIGlmIHdlIGRvIHRoaXMuICBBcyA0LjRCU0QgY3Vyc2VzIGZhZGVzCisjIGludG8gaGlzdG9yeSBhbmQgR05VIHRlcm1jYXAncyBhcHBsaWNhdGlvbiBiYXNlIHNocmlua3MgdG93YXJkcyBiZWluZyBHTlUgCisjIEVtYWNzIG9ubHksIHdlJ2xsIHByb2JhYmx5IGVsaWRlIG91dCBzb21lIEJTRC1vbmx5IGNhcGFiaWxpdGllcyBpbiBvcmRlcgorIyB0byBidXkgc3BhY2UgZm9yIG5vbi1lc3NlbnRpYWxzIEVtYWNzIGlzIHN0aWxsIHVzaW5nLiAgQ2FwYWJpbGl0aWVzIGhpZ2gKKyMgb24gdGhhdCBoaXQgbGlzdDogcmMsIHNjLCB1Yy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFNUQU5EQVJEIENBUEFCSUxJVElFUworIworIyVUaGUgZm9sbG93aW5nIGlzIGEgY29tcGxldGUgdGFibGUgb2YgdGhlIGNhcGFiaWxpdGllcyBpbmNsdWRlZCBpbiBhCisjJXRlcm1pbmZvIGRlc2NyaXB0aW9uIGJsb2NrIGFuZCBhdmFpbGFibGUgdG8gdGVybWluZm8tdXNpbmcgY29kZS4gIEluIGVhY2gKKyMlbGluZSBvZiB0aGUgdGFibGUsCisjJQorIyVUaGUgXGZCdmFyaWFibGVcZlIgaXMgdGhlIG5hbWUgYnkgd2hpY2ggdGhlIHByb2dyYW1tZXIgKGF0IHRoZSB0ZXJtaW5mbyBsZXZlbCkKKyMlYWNjZXNzZXMgdGhlIGNhcGFiaWxpdHkuCisjJQorIyVUaGUgXGZCY2FwbmFtZVxmUiBpcyB0aGUgc2hvcnQgbmFtZSB1c2VkIGluIHRoZSB0ZXh0IG9mIHRoZSBkYXRhYmFzZSwKKyMlYW5kIGlzIHVzZWQgYnkgYSBwZXJzb24gdXBkYXRpbmcgdGhlIGRhdGFiYXNlLgorIyVXaGVuZXZlciBwb3NzaWJsZSwgY2FwbmFtZXMgYXJlIGNob3NlbiB0byBiZSB0aGUgc2FtZSBhcyBvciBzaW1pbGFyIHRvCisjJXRoZSBBTlNJIFgzLjY0LTE5Nzkgc3RhbmRhcmQgKG5vdyBzdXBlcnNlZGVkIGJ5IEVDTUEtNDgsIHdoaWNoIHVzZXMgCisjJWlkZW50aWNhbCBvciB2ZXJ5IHNpbWlsYXIgbmFtZXMpLiAgU2VtYW50aWNzIGFyZSBhbHNvIGludGVuZGVkIHRvIG1hdGNoCisjJXRob3NlIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorIyUKKyMlVGhlIHRlcm1jYXAgY29kZSBpcyB0aGUgb2xkCisjJS5CIHRlcm1jYXAKKyMlY2FwYWJpbGl0eSBuYW1lIChzb21lIGNhcGFiaWxpdGllcyBhcmUgbmV3LCBhbmQgaGF2ZSBuYW1lcyB3aGljaCB0ZXJtY2FwCisjJWRpZCBub3Qgb3JpZ2luYXRlKS4KKyMlLlAKKyMlQ2FwYWJpbGl0eSBuYW1lcyBoYXZlIG5vIGhhcmQgbGVuZ3RoIGxpbWl0LCBidXQgYW4gaW5mb3JtYWwgbGltaXQgb2YgNQorIyVjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkb3B0ZWQgdG8ga2VlcCB0aGVtIHNob3J0IGFuZCB0byBhbGxvdyB0aGUgdGFicyBpbgorIyV0aGUgc291cmNlIGZpbGUKKyMlLkIgQ2FwcworIyV0byBsaW5lIHVwIG5pY2VseS4KKyMlCisjJUZpbmFsbHksIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBhdHRlbXB0cyB0byBjb252ZXkgdGhlIHNlbWFudGljcyBvZiB0aGUKKyMlY2FwYWJpbGl0eS4gIFlvdSBtYXkgZmluZCBzb21lIGNvZGVzIGluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZDoKKyMlLlRQCisjJShQKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSBiZSBzcGVjaWZpZWQKKyMlLlRQCisjJSNbMS05XQorIyVpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmluZyBpcyBwYXNzZWQgdGhyb3VnaCB0cGFybSB3aXRoCisjJXBhcm1zIGFzIGdpdmVuICgjXGZJaVxmUCkuCisjJS5UUAorIyUoUCopCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IHZhcnkgaW4gcHJvcG9ydGlvbiB0byB0aGUgbnVtYmVyIG9mCisjJWxpbmVzIGFmZmVjdGVkCisjJS5UUAorIyUoI1xkXGZJaVxmUFx1KQorIyVpbmRpY2F0ZXMgdGhlIFxmSWlcZlBcdXRoXGQgcGFyYW1ldGVyLgorIyUKKyMlLlBQCisjJSBUaGVzZSBhcmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQkJvb2xlYW5zCW5hbWUJQ29kZVxmUgorYXV0b19sZWZ0X21hcmdpbgkJYncJYm9vbAlidwktCS0JWUItRy0JY3ViMSB3cmFwcyBmcm9tIGNvbHVtbiAwIHRvIGxhc3QgY29sdW1uCithdXRvX3JpZ2h0X21hcmdpbgkJYW0JYm9vbAlhbQktCS0JWUJDR0UJdGVybWluYWwgaGFzIGF1dG9tYXRpYyBtYXJnaW5zCitub19lc2NfY3RsYwkJCXhzYglib29sCXhiCS0JLQlZQkNHLQliZWVoaXZlIChmMT1lc2NhcGUsIGYyPWN0cmwgQykKK2Nlb2xfc3RhbmRvdXRfZ2xpdGNoCQl4aHAJYm9vbAl4cwktCS0JWUJDR0UJc3RhbmRvdXQgbm90IGVyYXNlZCBieSBvdmVyd3JpdGluZyAoaHApCitlYXRfbmV3bGluZV9nbGl0Y2gJCXhlbmwJYm9vbAl4bgktCS0JWUJDR0UJbmV3bGluZSBpZ25vcmVkIGFmdGVyIDgwIGNvbHMgKGNvbmNlcHQpCitlcmFzZV9vdmVyc3RyaWtlCQllbwlib29sCWVvCS0JLQlZQkNHLQljYW4gZXJhc2Ugb3ZlcnN0cmlrZXMgd2l0aCBhIGJsYW5rCitnZW5lcmljX3R5cGUJCQlnbglib29sCWduCS0JLQlZQi1HLQlnZW5lcmljIGxpbmUgdHlwZQoraGFyZF9jb3B5CQkJaGMJYm9vbAloYwktCS0JWUJDRy0JaGFyZGNvcHkgdGVybWluYWwKK2hhc19tZXRhX2tleQkJCWttCWJvb2wJa20JLQktCVlCLUdFCUhhcyBhIG1ldGEga2V5IChpLmUuLCBzZXRzIDh0aC1iaXQpCitoYXNfc3RhdHVzX2xpbmUJCQlocwlib29sCWhzCS0JLQlZQi1HLQloYXMgZXh0cmEgc3RhdHVzIGxpbmUKK2luc2VydF9udWxsX2dsaXRjaAkJaW4JYm9vbAlpbgktCS0JWUJDR0UJaW5zZXJ0IG1vZGUgZGlzdGluZ3Vpc2hlcyBudWxscworbWVtb3J5X2Fib3ZlCQkJZGEJYm9vbAlkYQktCS0JWUJDRy0JZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYWJvdmUgdGhlIHNjcmVlbgorbWVtb3J5X2JlbG93CQkJZGIJYm9vbAlkYgktCS0JWUItR0UJZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYmVsb3cgdGhlIHNjcmVlbgorbW92ZV9pbnNlcnRfbW9kZQkJbWlyCWJvb2wJbWkJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBpbnNlcnQgbW9kZQorbW92ZV9zdGFuZG91dF9tb2RlCQltc2dyCWJvb2wJbXMJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBzdGFuZG91dCBtb2RlCitvdmVyX3N0cmlrZQkJCW9zCWJvb2wJb3MJLQktCVlCQ0ctCXRlcm1pbmFsIGNhbiBvdmVyc3RyaWtlCitzdGF0dXNfbGluZV9lc2Nfb2sJCWVzbG9rCWJvb2wJZXMJLQktCVlCLUctCWVzY2FwZSBjYW4gYmUgdXNlZCBvbiB0aGUgc3RhdHVzIGxpbmUKK2Rlc3RfdGFic19tYWdpY19zbXNvCQl4dAlib29sCXh0CS0JLQlZQkNHRQl0YWJzIGRlc3RydWN0aXZlLCBtYWdpYyBzbyBjaGFyICh0MTA2MSkKK3RpbGRlX2dsaXRjaAkJCWh6CWJvb2wJaHoJLQktCVlCLUdFCWNhbm5vdCBwcmludCB+J3MgKGhhemVsdGluZSkKK3RyYW5zcGFyZW50X3VuZGVybGluZQkJdWwJYm9vbAl1bAktCS0JWUJDR0UJdW5kZXJsaW5lIGNoYXJhY3RlciBvdmVyc3RyaWtlcworeG9uX3hvZmYJCQl4b24JYm9vbAl4bwktCS0JWUItLS0JdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZworbmVlZHNfeG9uX3hvZmYJCQlueG9uCWJvb2wJbngJLQktCS0tLS0tCXBhZGRpbmcgd2lsbCBub3Qgd29yaywgeG9uL3hvZmYgcmVxdWlyZWQKK3BydHJfc2lsZW50CQkJbWM1aQlib29sCTVpCS0JLQktLS0tLQlwcmludGVyIHdpbGwgbm90IGVjaG8gb24gc2NyZWVuCitoYXJkX2N1cnNvcgkJCWNodHMJYm9vbAlIQwktCS0JLS0tLS0JY3Vyc29yIGlzIGhhcmQgdG8gc2VlCitub25fcmV2X3JtY3VwCQkJbnJybWMJYm9vbAlOUgktCS0JLS0tLS0Jc21jdXAgZG9lcyBub3QgcmV2ZXJzZSBybWN1cAorbm9fcGFkX2NoYXIJCQlucGMJYm9vbAlOUAktCS0JLS0tLS0JcGFkIGNoYXJhY3RlciBkb2VzIG5vdCBleGlzdAorbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbgkJbmRzY3IJYm9vbAlORAktCS0JLS0tLS0Jc2Nyb2xsaW5nIHJlZ2lvbiBpcyBub24tZGVzdHJ1Y3RpdmUKK2JhY2tfY29sb3JfZXJhc2UJCWJjZQlib29sCXV0CS0JLQktLS0tLQlzY3JlZW4gZXJhc2VkIHdpdGggYmFja2dyb3VuZCBjb2xvcgorY2FuX2NoYW5nZQkJCWNjYwlib29sCWNjCS0JLQktLS0tLQl0ZXJtaW5hbCBjYW4gcmUtZGVmaW5lIGV4aXN0aW5nIGNvbG9ycworaHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uCWhscwlib29sCWhsCS0JLQktLS0tLQl0ZXJtaW5hbCB1c2VzIG9ubHkgSExTIGNvbG9yIG5vdGF0aW9uIChUZWt0cm9uaXgpCisjJS5URQorIyUuYWQKKyMlCisjJVRoZXNlIGFyZSB0aGUgbnVtZXJpYyBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCTnVtZXJpYwluYW1lCUNvZGVcZlIKK2NvbHVtbnMJCQkJY29scwludW0JY28JLQktCVlCQ0dFCW51bWJlciBvZiBjb2x1bW5zIGluIGEgbGluZQoraW5pdF90YWJzCQkJaXQJbnVtCWl0CS0JLQlZQi1HLQl0YWJzIGluaXRpYWxseSBldmVyeSAjIHNwYWNlcworbGluZXMJCQkJbGluZXMJbnVtCWxpCS0JLQlZQkNHRQludW1iZXIgb2YgbGluZXMgb24gc2NyZWVuIG9yIHBhZ2UKK2xpbmVzX29mX21lbW9yeQkJCWxtCW51bQlsbQktCS0JWUItRy0JbGluZXMgb2YgbWVtb3J5IGlmID4gbGluZS4gMCBtZWFucyB2YXJpZXMKK21hZ2ljX2Nvb2tpZV9nbGl0Y2gJCXhtYwludW0Jc2cJLQktCVlCQ0dFCW51bWJlciBvZiBibGFuayBjaGFyYWN0ZXJzIGxlZnQgYnkgc21zbyBvciBybXNvCitwYWRkaW5nX2JhdWRfcmF0ZQkJcGIJbnVtCXBiCS0JLQlZQi1HRQlsb3dlc3QgYmF1ZCByYXRlIHdoZXJlIHBhZGRpbmcgbmVlZGVkCit2aXJ0dWFsX3Rlcm1pbmFsCQl2dAludW0JdnQJLQktCVlCLS0tCXZpcnR1YWwgdGVybWluYWwgbnVtYmVyIChDQi91bml4KQord2lkdGhfc3RhdHVzX2xpbmUJCXdzbAludW0Jd3MJLQktCVlCLUctCW51bWJlciBvZiBjb2x1bW5zIGluIHN0YXR1cyBsaW5lCitudW1fbGFiZWxzCQkJbmxhYgludW0JTmwJLQktCS0tLS0tCW51bWJlciBvZiBsYWJlbHMgb24gc2NyZWVuCitsYWJlbF9oZWlnaHQJCQlsaAludW0JbGgJLQktCS0tLS0tCXJvd3MgaW4gZWFjaCBsYWJlbAorbGFiZWxfd2lkdGgJCQlsdwludW0JbHcJLQktCS0tLS0tCWNvbHVtbnMgaW4gZWFjaCBsYWJlbAorYnV0dG9ucwkJCQlidG5zCW51bQlCVAktCS0JLS0tLS0JbnVtYmVyIG9mIGJ1dHRvbnMgb24gbW91c2UKKyNtYXhfYXR0cmlidXRlcwkJCW1hCW51bQltYQktCS0JWUJDLS0JbWF4aW11bSBjb21iaW5lZCBhdHRyaWJ1dGVzIHRlcm1pbmFsIGNhbiBoYW5kbGUKKyNtYXhpbXVtX3dpbmRvd3MJCXdudW0JbnVtCU1XCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBkZWZpbmVhYmxlIHdpbmRvd3MKKyMgVGhlc2UgY2FtZSBpbiB3aXRoIFNWcjQncyBjb2xvciBzdXBwb3J0CittYXhfY29sb3JzCQkJY29sb3JzCW51bQlDbwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIG9uIHNjcmVlbgorbWF4X3BhaXJzCQkJcGFpcnMJbnVtCXBhCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvci1wYWlycyBvbiB0aGUgc2NyZWVuCitub19jb2xvcl92aWRlbwkJCW5jdgludW0JTkMJLQktCS0tLS0tCXZpZGVvIGF0dHJpYnV0ZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCB3aXRoIGNvbG9ycworIyUuVEUKKyMlLmFkCisjJQorIyVUaGUgZm9sbG93aW5nIG51bWVyaWMgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCBhcmUgbm90IHlldCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4gIFRoZXkgY2FtZSBpbiB3aXRoIFNWcjQncworIyVwcmludGVyIHN1cHBvcnQuCisjJQorIyUubmEKKyMlCisjJVRoZXNlIGFyZSB0aGUgc3RyaW5nIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitiYWNrX3RhYgkJCWNidAlzdHIJYnQJLQkJLQlZQkNHRQliYWNrIHRhYiAoUCkKK2JlbGwJCQkJYmVsCXN0cglibAktCQktCVlCLUdFCWF1ZGlibGUgc2lnbmFsIChiZWxsKSAoUCkKK2NhcnJpYWdlX3JldHVybgkJCWNyCXN0cgljcgktCQktCVlCQ0dFCWNhcnJpYWdlIHJldHVybiAoUCopIChQKikKK2NoYW5nZV9zY3JvbGxfcmVnaW9uCQljc3IJc3RyCWNzCS0JCS0JWUJDR0UJY2hhbmdlIHJlZ2lvbiB0byBsaW5lICMxIHRvIGxpbmUgIzIgKFApCitjbGVhcl9hbGxfdGFicwkJCXRiYwlzdHIJY3QJLQkJLQlZQi1HLQljbGVhciBhbGwgdGFiIHN0b3BzIChQKQorY2xlYXJfc2NyZWVuCQkJY2xlYXIJc3RyCWNsCS0JCS0JWUJDR0UJY2xlYXIgc2NyZWVuIGFuZCBob21lIGN1cnNvciAoUCopCitjbHJfZW9sCQkJCWVsCXN0cgljZQktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBsaW5lIChQKQorY2xyX2VvcwkJCQllZAlzdHIJY2QJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2Ygc2NyZWVuIChQKikKK2NvbHVtbl9hZGRyZXNzCQkJaHBhCXN0cgljaAktCQktCS1CLUdFKglob3Jpem9udGFsIHBvc2l0aW9uICMxLCBhYnNvbHV0ZSAoUCkKK2NvbW1hbmRfY2hhcmFjdGVyCQljbWRjaAlzdHIJQ0MJLQkJLQlZQi1HLQl0ZXJtaW5hbCBzZXR0YWJsZSBjbWQgY2hhcmFjdGVyIGluIHByb3RvdHlwZSAhPworY3Vyc29yX2FkZHJlc3MJCQljdXAJc3RyCWNtCS0JCS0JWUJDR0UJbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX2Rvd24JCQljdWQxCXN0cglkbwktCQktCVlCQ0dFCWRvd24gb25lIGxpbmUKK2N1cnNvcl9ob21lCQkJaG9tZQlzdHIJaG8JLQkJLQlZQkNHRQlob21lIGN1cnNvciAoaWYgbm8gY3VwKQorY3Vyc29yX2ludmlzaWJsZQkJY2l2aXMJc3RyCXZpCS0JCS0JWUItRy0JbWFrZSBjdXJzb3IgaW52aXNpYmxlCitjdXJzb3JfbGVmdAkJCWN1YjEJc3RyCWxlCS0JCS0JWUJDR0UJbW92ZSBsZWZ0IG9uZSBzcGFjZQorY3Vyc29yX21lbV9hZGRyZXNzCQltcmN1cAlzdHIJQ00JLQkJLQlZQi1HLQltZW1vcnkgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsIG1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9ub3JtYWwJCQljbm9ybQlzdHIJdmUJLQkJLQlZQkNHRQltYWtlIGN1cnNvciBhcHBlYXIgbm9ybWFsICh1bmRvIGNpdmlzL2N2dmlzKQorY3Vyc29yX3JpZ2h0CQkJY3VmMQlzdHIJbmQJLQkJLQlZQkNHRQlub24tZGVzdHJ1Y3RpdmUgc3BhY2UgKG1vdmUgcmlnaHQgb25lIHNwYWNlKQorY3Vyc29yX3RvX2xsCQkJbGwJc3RyCWxsCS0JCS0JWUJDR0UJbGFzdCBsaW5lLCBmaXJzdCBjb2x1bW4gKGlmIG5vIGN1cCkKK2N1cnNvcl91cAkJCWN1dTEJc3RyCXVwCS0JCS0JWUJDR0UJdXAgb25lIGxpbmUKK2N1cnNvcl92aXNpYmxlCQkJY3Z2aXMJc3RyCXZzCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgdmVyeSB2aXNpYmxlCitkZWxldGVfY2hhcmFjdGVyCQlkY2gxCXN0cglkYwktCQktCVlCQ0dFCWRlbGV0ZSBjaGFyYWN0ZXIgKFAqKQorZGVsZXRlX2xpbmUJCQlkbDEJc3RyCWRsCS0JCS0JWUJDR0UJZGVsZXRlIGxpbmUgKFAqKQorZGlzX3N0YXR1c19saW5lCQkJZHNsCXN0cglkcwktCQktCVlCLUctCWRpc2FibGUgc3RhdHVzIGxpbmUKK2Rvd25faGFsZl9saW5lCQkJaGQJc3RyCWhkCS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgZG93bgorZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQkJc21hY3MJc3RyCWFzCS0JCS0JWUItRy0Jc3RhcnQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitlbnRlcl9ibGlua19tb2RlCQlibGluawlzdHIJbWIJLQkJLQlZQi1HLQl0dXJuIG9uIGJsaW5raW5nCitlbnRlcl9ib2xkX21vZGUJCQlib2xkCXN0cgltZAktCQktCVlCLUctCXR1cm4gb24gYm9sZCAoZXh0cmEgYnJpZ2h0KSBtb2RlCitlbnRlcl9jYV9tb2RlCQkJc21jdXAJc3RyCXRpCS0JCS0JWUJDR0UJc3RyaW5nIHRvIHN0YXJ0IHByb2dyYW1zIHVzaW5nIGN1cAorZW50ZXJfZGVsZXRlX21vZGUJCXNtZGMJc3RyCWRtCS0JCS0JWUJDR0UJZW50ZXIgZGVsZXRlIG1vZGUKK2VudGVyX2RpbV9tb2RlCQkJZGltCXN0cgltaAktCQktCVlCLUctCXR1cm4gb24gaGFsZi1icmlnaHQgbW9kZQorZW50ZXJfaW5zZXJ0X21vZGUJCXNtaXIJc3RyCWltCS0JCS0JWUJDR0UJZW50ZXIgaW5zZXJ0IG1vZGUKK2VudGVyX3NlY3VyZV9tb2RlCQlpbnZpcwlzdHIJbWsJLQkJLQktQi1HLSoJdHVybiBvbiBibGFuayBtb2RlIChjaGFyYWN0ZXJzIGludmlzaWJsZSkKK2VudGVyX3Byb3RlY3RlZF9tb2RlCQlwcm90CXN0cgltcAktCQktCS1CLUctKgl0dXJuIG9uIHByb3RlY3RlZCBtb2RlCitlbnRlcl9yZXZlcnNlX21vZGUJCXJldglzdHIJbXIJLQkJLQlZQi1HLQl0dXJuIG9uIHJldmVyc2UgdmlkZW8gbW9kZQorZW50ZXJfc3RhbmRvdXRfbW9kZQkJc21zbwlzdHIJc28JLQkJLQlZQkNHRQliZWdpbiBzdGFuZG91dCBtb2RlCitlbnRlcl91bmRlcmxpbmVfbW9kZQkJc211bAlzdHIJdXMJLQkJLQlZQkNHRQliZWdpbiB1bmRlcmxpbmUgbW9kZQorZXJhc2VfY2hhcnMJCQllY2gJc3RyCWVjCS0JCS0JWUItRy0JZXJhc2UgIzEgY2hhcmFjdGVycyAoUCkKK2V4aXRfYWx0X2NoYXJzZXRfbW9kZQkJcm1hY3MJc3RyCWFlCS0JCS0JWUItRy0JZW5kIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZXhpdF9hdHRyaWJ1dGVfbW9kZQkJc2dyMAlzdHIJbWUJLQkJLQlZQi1HRQl0dXJuIG9mZiBhbGwgYXR0cmlidXRlcworZXhpdF9jYV9tb2RlCQkJcm1jdXAJc3RyCXRlCS0JCS0JWUJDR0UJc3RyaW5ncyB0byBlbmQgcHJvZ3JhbXMgdXNpbmcgY3VwCitleGl0X2RlbGV0ZV9tb2RlCQlybWRjCXN0cgllZAktCQktCVlCQ0dFCWVuZCBkZWxldGUgbW9kZQorZXhpdF9pbnNlcnRfbW9kZQkJcm1pcglzdHIJZWkJLQkJLQlZQkNHRQlleGl0IGluc2VydCBtb2RlCitleGl0X3N0YW5kb3V0X21vZGUJCXJtc28Jc3RyCXNlCS0JCS0JWUJDR0UJZXhpdCBzdGFuZG91dCBtb2RlCitleGl0X3VuZGVybGluZV9tb2RlCQlybXVsCXN0cgl1ZQktCQktCVlCQ0dFCWV4aXQgdW5kZXJsaW5lIG1vZGUKK2ZsYXNoX3NjcmVlbgkJCWZsYXNoCXN0cgl2YgktCQktCVlCQ0dFCXZpc2libGUgYmVsbCAobWF5IG5vdCBtb3ZlIGN1cnNvcikKK2Zvcm1fZmVlZAkJCWZmCXN0cglmZgktCQktCVlCLUctCWhhcmRjb3B5IHRlcm1pbmFsIHBhZ2UgZWplY3QgKFAqKQorZnJvbV9zdGF0dXNfbGluZQkJZnNsCXN0cglmcwktCQktCVlCLUctCXJldHVybiBmcm9tIHN0YXR1cyBsaW5lCitpbml0XzFzdHJpbmcJCQlpczEJc3RyCWkxCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzJzdHJpbmcJCQlpczIJc3RyCWlzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzNzdHJpbmcJCQlpczMJc3RyCWkzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0X2ZpbGUJCQlpZglzdHIJaWYJLQkJLQlZQi1HLQluYW1lIG9mIGluaXRpYWxpemF0aW9uIGZpbGUKK2luc2VydF9jaGFyYWN0ZXIJCWljaDEJc3RyCWljCS0JCS0JWUJDR0UJaW5zZXJ0IGNoYXJhY3RlciAoUCkKK2luc2VydF9saW5lCQkJaWwxCXN0cglhbAktCQktCVlCQ0dFCWluc2VydCBsaW5lIChQKikKK2luc2VydF9wYWRkaW5nCQkJaXAJc3RyCWlwCS0JCS0JWUJDR0UJaW5zZXJ0IHBhZGRpbmcgYWZ0ZXIgaW5zZXJ0ZWQgY2hhcmFjdGVyCitrZXlfYmFja3NwYWNlCQkJa2JzCXN0cglrYglLRVlfQkFDS1NQQUNFCTA0MDcJWUItRy0JYmFja3NwYWNlIGtleQora2V5X2NhdGFiCQkJa3RiYwlzdHIJa2EJS0VZX0NBVEFCCTA1MjYJLUItRy0qCWNsZWFyLWFsbC10YWJzIGtleQora2V5X2NsZWFyCQkJa2NscglzdHIJa0MJS0VZX0NMRUFSCTA1MTUJLUItRy0qCWNsZWFyLXNjcmVlbiBvciBlcmFzZSBrZXkKK2tleV9jdGFiCQkJa2N0YWIJc3RyCWt0CUtFWV9DVEFCCTA1MjUJLUItRy0qCWNsZWFyLXRhYiBrZXkKK2tleV9kYwkJCQlrZGNoMQlzdHIJa0QJS0VZX0RDCQkwNTEyCVlCLUctCWRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfZGwJCQkJa2RsMQlzdHIJa0wJS0VZX0RMCQkwNTEwCS1CLUctKglkZWxldGUtbGluZSBrZXkKK2tleV9kb3duCQkJa2N1ZDEJc3RyCWtkCUtFWV9ET1dOCTA0MDIJWUJDR0UJZG93bi1hcnJvdyBrZXkKK2tleV9laWMJCQkJa3JtaXIJc3RyCWtNCUtFWV9FSUMJCTA1MTQJLUItRy0qCXNlbnQgYnkgcm1pciBvciBzbWlyIGluIGluc2VydCBtb2RlCitrZXlfZW9sCQkJCWtlbAlzdHIJa0UJS0VZX0VPTAkJMDUxNwktQi1HLSoJY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfZW9zCQkJCWtlZAlzdHIJa1MJS0VZX0VPUwkJMDUxNgktQi1HLSoJY2xlYXItdG8tZW5kLW9mLXNjcmVlbiBrZXkKK2tleV9mMAkJCQlrZjAJc3RyCWswCUtFWV9GKDApCTA0MTAJWUJDR0UJRjAgZnVuY3Rpb24ga2V5CitrZXlfZjEJCQkJa2YxCXN0cglrMQlLRVlfRigxKQktCVlCQ0dFCUYxIGZ1bmN0aW9uIGtleQora2V5X2YxMAkJCQlrZjEwCXN0cglrOwlLRVlfRigxMCkJLQktLS0tRQlGMTAgZnVuY3Rpb24ga2V5CitrZXlfZjIJCQkJa2YyCXN0cglrMglLRVlfRigyKQktCVlCQ0dFCUYyIGZ1bmN0aW9uIGtleQora2V5X2YzCQkJCWtmMwlzdHIJazMJS0VZX0YoMykJLQlZQkNHRQlGMyBmdW5jdGlvbiBrZXkKK2tleV9mNAkJCQlrZjQJc3RyCWs0CUtFWV9GKDQpCS0JWUJDR0UJRjQgZnVuY3Rpb24ga2V5CitrZXlfZjUJCQkJa2Y1CXN0cglrNQlLRVlfRig1KQktCVlCQ0dFCUY1IGZ1bmN0aW9uIGtleQora2V5X2Y2CQkJCWtmNglzdHIJazYJS0VZX0YoNikJLQlZQkNHRQlGNiBmdW5jdGlvbiBrZXkKK2tleV9mNwkJCQlrZjcJc3RyCWs3CUtFWV9GKDcpCS0JWUJDR0UJRjcgZnVuY3Rpb24ga2V5CitrZXlfZjgJCQkJa2Y4CXN0cglrOAlLRVlfRig4KQktCVlCQ0dFCUY4IGZ1bmN0aW9uIGtleQora2V5X2Y5CQkJCWtmOQlzdHIJazkJS0VZX0YoOSkJLQlZQkNHRQlGOSBmdW5jdGlvbiBrZXkKK2tleV9ob21lCQkJa2hvbWUJc3RyCWtoCUtFWV9IT01FCTA0MDYJWUJDR0UJaG9tZSBrZXkKK2tleV9pYwkJCQlraWNoMQlzdHIJa0kJS0VZX0lDCQkwNTEzCVlCLUdFCWluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfaWwJCQkJa2lsMQlzdHIJa0EJS0VZX0lMCQkwNTExCS1CLUctKglpbnNlcnQtbGluZSBrZXkKK2tleV9sZWZ0CQkJa2N1YjEJc3RyCWtsCUtFWV9MRUZUCTA0MDQJWUJDR0UJbGVmdC1hcnJvdyBrZXkKK2tleV9sbAkJCQlrbGwJc3RyCWtICUtFWV9MTAkJMDUzMwlZQi1HLQlsb3dlci1sZWZ0IGtleSAoaG9tZSBkb3duKQora2V5X25wYWdlCQkJa25wCXN0cglrTglLRVlfTlBBR0UJMDUyMglZQi1HRQluZXh0LXBhZ2Uga2V5CitrZXlfcHBhZ2UJCQlrcHAJc3RyCWtQCUtFWV9QUEFHRQkwNTIzCVlCLUdFCXByZXZpb3VzLXBhZ2Uga2V5CitrZXlfcmlnaHQJCQlrY3VmMQlzdHIJa3IJS0VZX1JJR0hUCTA0MDUJWUJDR0UJcmlnaHQtYXJyb3cga2V5CitrZXlfc2YJCQkJa2luZAlzdHIJa0YJS0VZX1NGCQkwNTIwCS1CLUctKglzY3JvbGwtZm9yd2FyZCBrZXkKK2tleV9zcgkJCQlrcmkJc3RyCWtSCUtFWV9TUgkJMDUyMQktQi1HLSoJc2Nyb2xsLWJhY2t3YXJkIGtleQora2V5X3N0YWIJCQlraHRzCXN0cglrVAlLRVlfU1RBQgkwNTI0CS1CLUctKglzZXQtdGFiIGtleQora2V5X3VwCQkJCWtjdXUxCXN0cglrdQlLRVlfVVAJCTA0MDMJWUJDR0UJdXAtYXJyb3cga2V5CitrZXlwYWRfbG9jYWwJCQlybWt4CXN0cglrZQktCQktCVlCQ0dFCWxlYXZlICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQora2V5cGFkX3htaXQJCQlzbWt4CXN0cglrcwktCQktCVlCQ0dFCWVudGVyICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQorbGFiX2YwCQkJCWxmMAlzdHIJbDAJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYwIGlmIG5vdCBmMAorbGFiX2YxCQkJCWxmMQlzdHIJbDEJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxIGlmIG5vdCBmMQorbGFiX2YxMAkJCQlsZjEwCXN0cglsYQktCQktCS0tLS0tCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMTAgaWYgbm90IGYxMAorbGFiX2YyCQkJCWxmMglzdHIJbDIJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYyIGlmIG5vdCBmMgorbGFiX2YzCQkJCWxmMwlzdHIJbDMJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYzIGlmIG5vdCBmMworbGFiX2Y0CQkJCWxmNAlzdHIJbDQJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY0IGlmIG5vdCBmNAorbGFiX2Y1CQkJCWxmNQlzdHIJbDUJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY1IGlmIG5vdCBmNQorbGFiX2Y2CQkJCWxmNglzdHIJbDYJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY2IGlmIG5vdCBmNgorbGFiX2Y3CQkJCWxmNwlzdHIJbDcJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY3IGlmIG5vdCBmNworbGFiX2Y4CQkJCWxmOAlzdHIJbDgJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY4IGlmIG5vdCBmOAorbGFiX2Y5CQkJCWxmOQlzdHIJbDkJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY5IGlmIG5vdCBmOQorbWV0YV9vZmYJCQlybW0Jc3RyCW1vCS0JCS0JWUItRy0qCXR1cm4gb2ZmIG1ldGEgbW9kZQorbWV0YV9vbgkJCQlzbW0Jc3RyCW1tCS0JCS0JWUItRy0qCXR1cm4gb24gbWV0YSBtb2RlICg4dGgtYml0IG9uKQorbmV3bGluZQkJCQluZWwJc3RyCW53CS0JCS0JWUItRy0qCW5ld2xpbmUgKGJlaGF2ZSBsaWtlIGNyIGZvbGxvd2VkIGJ5IGxmKQorcGFkX2NoYXIJCQlwYWQJc3RyCXBjCS0JCS0JWUJDR0UJcGFkZGluZyBjaGFyIChpbnN0ZWFkIG9mIG51bGwpCitwYXJtX2RjaAkJCWRjaAlzdHIJREMJLQkJLQlZQi1HRQlkZWxldGUgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2RlbGV0ZV9saW5lCQlkbAlzdHIJREwJLQkJLQlZQkNHRQlkZWxldGUgIzEgbGluZXMgKFAqKQorcGFybV9kb3duX2N1cnNvcgkJY3VkCXN0cglETwktCQktCVlCQ0dFCWRvd24gIzEgbGluZXMgKFAqKQorcGFybV9pY2gJCQlpY2gJc3RyCUlDCS0JCS0JWUItR0UJaW5zZXJ0ICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9pbmRleAkJCWluZG4Jc3RyCVNGCS0JCS0JWUJDRy0Jc2Nyb2xsIGZvcndhcmQgIzEgbGluZXMgKFApCitwYXJtX2luc2VydF9saW5lCQlpbAlzdHIJQUwJLQkJLQlZQkNHRQlpbnNlcnQgIzEgbGluZXMgKFAqKQorcGFybV9sZWZ0X2N1cnNvcgkJY3ViCXN0cglMRQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgbGVmdCAoUCkKK3Bhcm1fcmlnaHRfY3Vyc29yCQljdWYJc3RyCVJJCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCAoUCopCitwYXJtX3JpbmRleAkJCXJpbglzdHIJU1IJLQkJLQlZQkNHLQlzY3JvbGwgYmFjayAjMSBsaW5lcyAoUCkKK3Bhcm1fdXBfY3Vyc29yCQkJY3V1CXN0cglVUAktCQktCVlCQ0dFCXVwICMxIGxpbmVzIChQKikKK3BrZXlfa2V5CQkJcGZrZXkJc3RyCXBrCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHlwZSBzdHJpbmcgIzIKK3BrZXlfbG9jYWwJCQlwZmxvYwlzdHIJcGwJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byBleGVjdXRlIHN0cmluZyAjMgorcGtleV94bWl0CQkJcGZ4CXN0cglweAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHRyYW5zbWl0IHN0cmluZyAjMgorcHJpbnRfc2NyZWVuCQkJbWMwCXN0cglwcwktCQktCS1CLUctKglwcmludCBjb250ZW50cyBvZiBzY3JlZW4KK3BydHJfb2ZmCQkJbWM0CXN0cglwZgktCQktCS1CLUctKgl0dXJuIG9mZiBwcmludGVyCitwcnRyX29uCQkJCW1jNQlzdHIJcG8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyCityZXBlYXRfY2hhcgkJCXJlcAlzdHIJcnAJLQkJLQlZQi1HRQlyZXBlYXQgY2hhciAjMSAjMiB0aW1lcyAoUCopCityZXNldF8xc3RyaW5nCQkJcnMxCXN0cglyMQktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfMnN0cmluZwkJCXJzMglzdHIJcjIJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzNzdHJpbmcJCQlyczMJc3RyCXIzCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF9maWxlCQkJcmYJc3RyCXJmCS0JCS0JLUItLS0JbmFtZSBvZiByZXNldCBmaWxlCityZXN0b3JlX2N1cnNvcgkJCXJjCXN0cglyYwktCQktCVlCQ0ctCXJlc3RvcmUgY3Vyc29yIHRvIHBvc2l0aW9uIG9mIGxhc3Qgc2F2ZV9jdXJzb3IKK3Jvd19hZGRyZXNzCQkJdnBhCXN0cgljdgktCQktCS1CLUdFKgl2ZXJ0aWNhbCBwb3NpdGlvbiAjMSBhYnNvbHV0ZSAoUCkKK3NhdmVfY3Vyc29yCQkJc2MJc3RyCXNjCS0JCS0JWUJDRy0Jc2F2ZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAoUCkKK3Njcm9sbF9mb3J3YXJkCQkJaW5kCXN0cglzZgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IHVwIChQKQorc2Nyb2xsX3JldmVyc2UJCQlyaQlzdHIJc3IJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCBkb3duIChQKQorc2V0X2F0dHJpYnV0ZXMJCQlzZ3IJc3RyCXNhCS0JCS0JWUItRy0JZGVmaW5lIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzkgKFBHOSkKK3NldF90YWIJCQkJaHRzCXN0cglzdAktCQktCVlCLUctCXNldCBhIHRhYiBpbiBldmVyeSByb3csIGN1cnJlbnQgY29sdW1ucworc2V0X3dpbmRvdwkJCXdpbmQJc3RyCXdpCS0JCS0JLUItR0UJY3VycmVudCB3aW5kb3cgaXMgbGluZXMgIzEtIzIgY29scyAjMy0jNAordGFiCQkJCWh0CXN0cgl0YQktCQktCVlCQ0dFCXRhYiB0byBuZXh0IDgtc3BhY2UgaGFyZHdhcmUgdGFiIHN0b3AKK3RvX3N0YXR1c19saW5lCQkJdHNsCXN0cgl0cwktCQktCVlCLUctCW1vdmUgdG8gc3RhdHVzIGxpbmUsIGNvbHVtbiAjMQordW5kZXJsaW5lX2NoYXIJCQl1YwlzdHIJdWMJLQkJLQlZQkNHLQl1bmRlcmxpbmUgY2hhciBhbmQgbW92ZSBwYXN0IGl0Cit1cF9oYWxmX2xpbmUJCQlodQlzdHIJaHUJLQkJLQlZQi1HLQloYWxmIGEgbGluZSB1cAoraW5pdF9wcm9nCQkJaXByb2cJc3RyCWlQCS0JCS0JLUItLS0JcGF0aCBuYW1lIG9mIHByb2dyYW0gZm9yIGluaXRpYWxpemF0aW9uCitrZXlfYTEJCQkJa2ExCXN0cglLMQlLRVlfQTEJCTA1MzQJWUItR0UJdXBwZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9hMwkJCQlrYTMJc3RyCUszCUtFWV9BMwkJMDUzNQlZQi1HRQl1cHBlciByaWdodCBvZiBrZXlwYWQKK2tleV9iMgkJCQlrYjIJc3RyCUsyCUtFWV9CMgkJMDUzNglZQi1HRQljZW50ZXIgb2Yga2V5cGFkCitrZXlfYzEJCQkJa2MxCXN0cglLNAlLRVlfQzEJCTA1MzcJWUItR0UJbG93ZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9jMwkJCQlrYzMJc3RyCUs1CUtFWV9DMwkJMDU0MAlZQi1HRQlsb3dlciByaWdodCBvZiBrZXlwYWQKK3BydHJfbm9uCQkJbWM1cAlzdHIJcE8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyIGZvciAjMSBieXRlcworIworIyBTVnIxIGNhcGFiaWxpdGllcyBzdG9wIGhlcmUuCUlCTSdzIHZlcnNpb24gb2YgdGVybWluZm8gaXMgdGhlIHNhbWUgYXMKKyMgU1ZyNCB1cCB0byB0aGlzIHBvaW50LCBidXQgaGFzIGEgZGlmZmVyZW50IHNldCBhZnRlcndhcmRzLgorIworY2hhcl9wYWRkaW5nCQkJcm1wCXN0cglyUAktCQktCS0tLS0tCWxpa2UgaXAgYnV0IHdoZW4gaW4gaW5zZXJ0IG1vZGUKK2Fjc19jaGFycwkJCWFjc2MJc3RyCWFjCS0JCS0JLS0tLS0JZ3JhcGhpY3MgY2hhcnNldCBwYWlycywgYmFzZWQgb24gdnQxMDAKK3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCitrZXlfYnRhYgkJCWtjYnQJc3RyCWtCCUtFWV9CVEFCCTA1NDEJLS0tLS0JYmFjay10YWIga2V5CitlbnRlcl94b25fbW9kZQkJCXNteG9uCXN0cglTWAktCQktCS0tLS0tCXR1cm4gb24geG9uL3hvZmYgaGFuZHNoYWtpbmcKK2V4aXRfeG9uX21vZGUJCQlybXhvbglzdHIJUlgJLQkJLQktLS0tLQl0dXJuIG9mZiB4b24veG9mZiBoYW5kc2hha2luZworZW50ZXJfYW1fbW9kZQkJCXNtYW0Jc3RyCVNBCS0JCS0JLS0tLS0JdHVybiBvbiBhdXRvbWF0aWMgbWFyZ2lucworZXhpdF9hbV9tb2RlCQkJcm1hbQlzdHIJUkEJLQkJLQktLS0tLQl0dXJuIG9mZiBhdXRvbWF0aWMgbWFyZ2lucworeG9uX2NoYXJhY3RlcgkJCXhvbmMJc3RyCVhOCS0JCS0JLS0tLS0JWE9OIGNoYXJhY3RlcgoreG9mZl9jaGFyYWN0ZXIJCQl4b2ZmYwlzdHIJWEYJLQkJLQktLS0tLQlYT0ZGIGNoYXJhY3RlcgorZW5hX2FjcwkJCQllbmFjcwlzdHIJZUEJLQkJLQktLS0tLQllbmFibGUgYWx0ZXJuYXRlIGNoYXIgc2V0CitsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscwora2V5X2JlZwkJCQlrYmVnCXN0cglAMQlLRVlfQkVHCQkwNTQyCS0tLS0tCWJlZ2luIGtleQora2V5X2NhbmNlbAkJCWtjYW4Jc3RyCUAyCUtFWV9DQU5DRUwJMDU0MwktLS0tLQljYW5jZWwga2V5CitrZXlfY2xvc2UJCQlrY2xvCXN0cglAMwlLRVlfQ0xPU0UJMDU0NAktLS0tLQljbG9zZSBrZXkKK2tleV9jb21tYW5kCQkJa2NtZAlzdHIJQDQJS0VZX0NPTU1BTkQJMDU0NQktLS0tLQljb21tYW5kIGtleQora2V5X2NvcHkJCQlrY3B5CXN0cglANQlLRVlfQ09QWQkwNTQ2CS0tLS0tCWNvcHkga2V5CitrZXlfY3JlYXRlCQkJa2NydAlzdHIJQDYJS0VZX0NSRUFURQkwNTQ3CS0tLS0tCWNyZWF0ZSBrZXkKK2tleV9lbmQJCQkJa2VuZAlzdHIJQDcJS0VZX0VORAkJMDU1MAktLS0tLQllbmQga2V5CitrZXlfZW50ZXIJCQlrZW50CXN0cglAOAlLRVlfRU5URVIJMDUyNwktLS0tLQllbnRlci9zZW5kIGtleQora2V5X2V4aXQJCQlrZXh0CXN0cglAOQlLRVlfRVhJVAkwNTUxCS0tLS0tCWV4aXQga2V5CitrZXlfZmluZAkJCWtmbmQJc3RyCUAwCUtFWV9GSU5ECTA1NTIJLS0tLS0JZmluZCBrZXkKK2tleV9oZWxwCQkJa2hscAlzdHIJJTEJS0VZX0hFTFAJMDU1MwktLS0tLQloZWxwIGtleQora2V5X21hcmsJCQlrbXJrCXN0cgklMglLRVlfTUFSSwkwNTU0CS0tLS0tCW1hcmsga2V5CitrZXlfbWVzc2FnZQkJCWttc2cJc3RyCSUzCUtFWV9NRVNTQUdFCTA1NTUJLS0tLS0JbWVzc2FnZSBrZXkKK2tleV9tb3ZlCQkJa21vdglzdHIJJTQJS0VZX01PVkUJMDU1NgktLS0tLQltb3ZlIGtleQora2V5X25leHQJCQlrbnh0CXN0cgklNQlLRVlfTkVYVAkwNTU3CS0tLS0tCW5leHQga2V5CitrZXlfb3BlbgkJCWtvcG4Jc3RyCSU2CUtFWV9PUEVOCTA1NjAJLS0tLS0Jb3BlbiBrZXkKK2tleV9vcHRpb25zCQkJa29wdAlzdHIJJTcJS0VZX09QVElPTlMJMDU2MQktLS0tLQlvcHRpb25zIGtleQora2V5X3ByZXZpb3VzCQkJa3BydglzdHIJJTgJS0VZX1BSRVZJT1VTCTA1NjIJLS0tLS0JcHJldmlvdXMga2V5CitrZXlfcHJpbnQJCQlrcHJ0CXN0cgklOQlLRVlfUFJJTlQJMDUzMgktLS0tLQlwcmludCBrZXkKK2tleV9yZWRvCQkJa3JkbwlzdHIJJTAJS0VZX1JFRE8JMDU2MwktLS0tLQlyZWRvIGtleQora2V5X3JlZmVyZW5jZQkJCWtyZWYJc3RyCSYxCUtFWV9SRUZFUkVOQ0UJMDU2NAktLS0tLQlyZWZlcmVuY2Uga2V5CitrZXlfcmVmcmVzaAkJCWtyZnIJc3RyCSYyCUtFWV9SRUZSRVNICTA1NjUJLS0tLS0JcmVmcmVzaCBrZXkKK2tleV9yZXBsYWNlCQkJa3JwbAlzdHIJJjMJS0VZX1JFUExBQ0UJMDU2NgktLS0tLQlyZXBsYWNlIGtleQora2V5X3Jlc3RhcnQJCQlrcnN0CXN0cgkmNAlLRVlfUkVTVEFSVAkwNTY3CS0tLS0tCXJlc3RhcnQga2V5CitrZXlfcmVzdW1lCQkJa3JlcwlzdHIJJjUJS0VZX1JFU1VNRQkwNTcwCS0tLS0tCXJlc3VtZSBrZXkKK2tleV9zYXZlCQkJa3NhdglzdHIJJjYJS0VZX1NBVkUJMDU3MQktLS0tLQlzYXZlIGtleQora2V5X3N1c3BlbmQJCQlrc3BkCXN0cgkmNwlLRVlfU1VTUEVORAkwNjI3CS0tLS0tCXN1c3BlbmQga2V5CitrZXlfdW5kbwkJCWt1bmQJc3RyCSY4CUtFWV9VTkRPCTA2MzAJLS0tLS0JdW5kbyBrZXkKK2tleV9zYmVnCQkJa0JFRwlzdHIJJjkJS0VZX1NCRUcJMDU3MgktLS0tLQlzaGlmdGVkIGJlZ2luIGtleQora2V5X3NjYW5jZWwJCQlrQ0FOCXN0cgkmMAlLRVlfU0NBTkNFTAkwNTczCS0tLS0tCXNoaWZ0ZWQgY2FuY2VsIGtleQora2V5X3Njb21tYW5kCQkJa0NNRAlzdHIJKjEJS0VZX1NDT01NQU5ECTA1NzQJLS0tLS0Jc2hpZnRlZCBjb21tYW5kIGtleQora2V5X3Njb3B5CQkJa0NQWQlzdHIJKjIJS0VZX1NDT1BZCTA1NzUJLS0tLS0Jc2hpZnRlZCBjb3B5IGtleQora2V5X3NjcmVhdGUJCQlrQ1JUCXN0cgkqMwlLRVlfU0NSRUFURQkwNTc2CS0tLS0tCXNoaWZ0ZWQgY3JlYXRlIGtleQora2V5X3NkYwkJCQlrREMJc3RyCSo0CUtFWV9TREMJCTA1NzcJLS0tLS0Jc2hpZnRlZCBkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X3NkbAkJCQlrREwJc3RyCSo1CUtFWV9TREwJCTA2MDAJLS0tLS0Jc2hpZnRlZCBkZWxldGUtbGluZSBrZXkKK2tleV9zZWxlY3QJCQlrc2x0CXN0cgkqNglLRVlfU0VMRUNUCTA2MDEJLS0tLS0Jc2VsZWN0IGtleQora2V5X3NlbmQJCQlrRU5ECXN0cgkqNwlLRVlfU0VORAkwNjAyCS0tLS0tCXNoaWZ0ZWQgZW5kIGtleQora2V5X3Nlb2wJCQlrRU9MCXN0cgkqOAlLRVlfU0VPTAkwNjAzCS0tLS0tCXNoaWZ0ZWQgY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfc2V4aXQJCQlrRVhUCXN0cgkqOQlLRVlfU0VYSVQJMDYwNAktLS0tLQlzaGlmdGVkIGV4aXQga2V5CitrZXlfc2ZpbmQJCQlrRk5ECXN0cgkqMAlLRVlfU0ZJTkQJMDYwNQktLS0tLQlzaGlmdGVkIGZpbmQga2V5CitrZXlfc2hlbHAJCQlrSExQCXN0cgkjMQlLRVlfU0hFTFAJMDYwNgktLS0tLQlzaGlmdGVkIGhlbHAga2V5CitrZXlfc2hvbWUJCQlrSE9NCXN0cgkjMglLRVlfU0hPTUUJMDYwNwktLS0tLQlzaGlmdGVkIGhvbWUga2V5CitrZXlfc2ljCQkJCWtJQwlzdHIJIzMJS0VZX1NJQwkJMDYxMAktLS0tLQlzaGlmdGVkIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfc2xlZnQJCQlrTEZUCXN0cgkjNAlLRVlfU0xFRlQJMDYxMQktLS0tLQlzaGlmdGVkIGxlZnQtYXJyb3cga2V5CitrZXlfc21lc3NhZ2UJCQlrTVNHCXN0cgklYQlLRVlfU01FU1NBR0UJMDYxMgktLS0tLQlzaGlmdGVkIG1lc3NhZ2Uga2V5CitrZXlfc21vdmUJCQlrTU9WCXN0cgklYglLRVlfU01PVkUJMDYxMwktLS0tLQlzaGlmdGVkIG1vdmUga2V5CitrZXlfc25leHQJCQlrTlhUCXN0cgklYwlLRVlfU05FWFQJMDYxNAktLS0tLQlzaGlmdGVkIG5leHQga2V5CitrZXlfc29wdGlvbnMJCQlrT1BUCXN0cgklZAlLRVlfU09QVElPTlMJMDYxNQktLS0tLQlzaGlmdGVkIG9wdGlvbnMga2V5CitrZXlfc3ByZXZpb3VzCQkJa1BSVglzdHIJJWUJS0VZX1NQUkVWSU9VUwkwNjE2CS0tLS0tCXNoaWZ0ZWQgcHJldmlvdXMga2V5CitrZXlfc3ByaW50CQkJa1BSVAlzdHIJJWYJS0VZX1NQUklOVAkwNjE3CS0tLS0tCXNoaWZ0ZWQgcHJpbnQga2V5CitrZXlfc3JlZG8JCQlrUkRPCXN0cgklZwlLRVlfU1JFRE8JMDYyMAktLS0tLQlzaGlmdGVkIHJlZG8ga2V5CitrZXlfc3JlcGxhY2UJCQlrUlBMCXN0cgklaAlLRVlfU1JFUExBQ0UJMDYyMQktLS0tLQlzaGlmdGVkIHJlcGxhY2Uga2V5CitrZXlfc3JpZ2h0CQkJa1JJVAlzdHIJJWkJS0VZX1NSSUdIVAkwNjIyCS0tLS0tCXNoaWZ0ZWQgcmlnaHQtYXJyb3cga2V5CitrZXlfc3JzdW1lCQkJa1JFUwlzdHIJJWoJS0VZX1NSU1VNRQkwNjIzCS0tLS0tCXNoaWZ0ZWQgcmVzdW1lIGtleQora2V5X3NzYXZlCQkJa1NBVglzdHIJITEJS0VZX1NTQVZFCTA2MjQJLS0tLS0Jc2hpZnRlZCBzYXZlIGtleQora2V5X3NzdXNwZW5kCQkJa1NQRAlzdHIJITIJS0VZX1NTVVNQRU5ECTA2MjUJLS0tLS0Jc2hpZnRlZCBzdXNwZW5kIGtleQora2V5X3N1bmRvCQkJa1VORAlzdHIJITMJS0VZX1NVTkRPCTA2MjYJLS0tLS0Jc2hpZnRlZCB1bmRvIGtleQorcmVxX2Zvcl9pbnB1dAkJCXJmaQlzdHIJUkYJLQkJLQktLS0tLQlzZW5kIG5leHQgaW5wdXQgY2hhciAoZm9yIHB0eXMpCitrZXlfZjExCQkJCWtmMTEJc3RyCUYxCUtFWV9GKDExKQktCS0tLS1FCUYxMSBmdW5jdGlvbiBrZXkKK2tleV9mMTIJCQkJa2YxMglzdHIJRjIJS0VZX0YoMTIpCS0JLS0tLUUJRjEyIGZ1bmN0aW9uIGtleQora2V5X2YxMwkJCQlrZjEzCXN0cglGMwlLRVlfRigxMykJLQktLS0tRQlGMTMgZnVuY3Rpb24ga2V5CitrZXlfZjE0CQkJCWtmMTQJc3RyCUY0CUtFWV9GKDE0KQktCS0tLS1FCUYxNCBmdW5jdGlvbiBrZXkKK2tleV9mMTUJCQkJa2YxNQlzdHIJRjUJS0VZX0YoMTUpCS0JLS0tLUUJRjE1IGZ1bmN0aW9uIGtleQora2V5X2YxNgkJCQlrZjE2CXN0cglGNglLRVlfRigxNikJLQktLS0tRQlGMTYgZnVuY3Rpb24ga2V5CitrZXlfZjE3CQkJCWtmMTcJc3RyCUY3CUtFWV9GKDE3KQktCS0tLS1FCUYxNyBmdW5jdGlvbiBrZXkKK2tleV9mMTgJCQkJa2YxOAlzdHIJRjgJS0VZX0YoMTgpCS0JLS0tLUUJRjE4IGZ1bmN0aW9uIGtleQora2V5X2YxOQkJCQlrZjE5CXN0cglGOQlLRVlfRigxOSkJLQktLS0tRQlGMTkgZnVuY3Rpb24ga2V5CitrZXlfZjIwCQkJCWtmMjAJc3RyCUZBCUtFWV9GKDIwKQktCS0tLS1FCUYyMCBmdW5jdGlvbiBrZXkKK2tleV9mMjEJCQkJa2YyMQlzdHIJRkIJS0VZX0YoMjEpCS0JLS0tLUUJRjIxIGZ1bmN0aW9uIGtleQora2V5X2YyMgkJCQlrZjIyCXN0cglGQwlLRVlfRigyMikJLQktLS0tRQlGMjIgZnVuY3Rpb24ga2V5CitrZXlfZjIzCQkJCWtmMjMJc3RyCUZECUtFWV9GKDIzKQktCS0tLS1FCUYyMyBmdW5jdGlvbiBrZXkKK2tleV9mMjQJCQkJa2YyNAlzdHIJRkUJS0VZX0YoMjQpCS0JLS0tLUUJRjI0IGZ1bmN0aW9uIGtleQora2V5X2YyNQkJCQlrZjI1CXN0cglGRglLRVlfRigyNSkJLQktLS0tRQlGMjUgZnVuY3Rpb24ga2V5CitrZXlfZjI2CQkJCWtmMjYJc3RyCUZHCUtFWV9GKDI2KQktCS0tLS1FCUYyNiBmdW5jdGlvbiBrZXkKK2tleV9mMjcJCQkJa2YyNwlzdHIJRkgJS0VZX0YoMjcpCS0JLS0tLUUJRjI3IGZ1bmN0aW9uIGtleQora2V5X2YyOAkJCQlrZjI4CXN0cglGSQlLRVlfRigyOCkJLQktLS0tRQlGMjggZnVuY3Rpb24ga2V5CitrZXlfZjI5CQkJCWtmMjkJc3RyCUZKCUtFWV9GKDI5KQktCS0tLS1FCUYyOSBmdW5jdGlvbiBrZXkKK2tleV9mMzAJCQkJa2YzMAlzdHIJRksJS0VZX0YoMzApCS0JLS0tLUUJRjMwIGZ1bmN0aW9uIGtleQora2V5X2YzMQkJCQlrZjMxCXN0cglGTAlLRVlfRigzMSkJLQktLS0tRQlGMzEgZnVuY3Rpb24ga2V5CitrZXlfZjMyCQkJCWtmMzIJc3RyCUZNCUtFWV9GKDMyKQktCS0tLS1FCUYzMiBmdW5jdGlvbiBrZXkKK2tleV9mMzMJCQkJa2YzMwlzdHIJRk4JS0VZX0YoMzMpCS0JLS0tLUUJRjMzIGZ1bmN0aW9uIGtleQora2V5X2YzNAkJCQlrZjM0CXN0cglGTwlLRVlfRigzNCkJLQktLS0tRQlGMzQgZnVuY3Rpb24ga2V5CitrZXlfZjM1CQkJCWtmMzUJc3RyCUZQCUtFWV9GKDM1KQktCS0tLS1FCUYzNSBmdW5jdGlvbiBrZXkKK2tleV9mMzYJCQkJa2YzNglzdHIJRlEJS0VZX0YoMzYpCS0JLS0tLUUJRjM2IGZ1bmN0aW9uIGtleQora2V5X2YzNwkJCQlrZjM3CXN0cglGUglLRVlfRigzNykJLQktLS0tRQlGMzcgZnVuY3Rpb24ga2V5CitrZXlfZjM4CQkJCWtmMzgJc3RyCUZTCUtFWV9GKDM4KQktCS0tLS1FCUYzOCBmdW5jdGlvbiBrZXkKK2tleV9mMzkJCQkJa2YzOQlzdHIJRlQJS0VZX0YoMzkpCS0JLS0tLUUJRjM5IGZ1bmN0aW9uIGtleQora2V5X2Y0MAkJCQlrZjQwCXN0cglGVQlLRVlfRig0MCkJLQktLS0tRQlGNDAgZnVuY3Rpb24ga2V5CitrZXlfZjQxCQkJCWtmNDEJc3RyCUZWCUtFWV9GKDQxKQktCS0tLS1FCUY0MSBmdW5jdGlvbiBrZXkKK2tleV9mNDIJCQkJa2Y0MglzdHIJRlcJS0VZX0YoNDIpCS0JLS0tLUUJRjQyIGZ1bmN0aW9uIGtleQora2V5X2Y0MwkJCQlrZjQzCXN0cglGWAlLRVlfRig0MykJLQktLS0tRQlGNDMgZnVuY3Rpb24ga2V5CitrZXlfZjQ0CQkJCWtmNDQJc3RyCUZZCUtFWV9GKDQ0KQktCS0tLS1FCUY0NCBmdW5jdGlvbiBrZXkKK2tleV9mNDUJCQkJa2Y0NQlzdHIJRloJS0VZX0YoNDUpCS0JLS0tLUUJRjQ1IGZ1bmN0aW9uIGtleQora2V5X2Y0NgkJCQlrZjQ2CXN0cglGYQlLRVlfRig0NikJLQktLS0tRQlGNDYgZnVuY3Rpb24ga2V5CitrZXlfZjQ3CQkJCWtmNDcJc3RyCUZiCUtFWV9GKDQ3KQktCS0tLS1FCUY0NyBmdW5jdGlvbiBrZXkKK2tleV9mNDgJCQkJa2Y0OAlzdHIJRmMJS0VZX0YoNDgpCS0JLS0tLUUJRjQ4IGZ1bmN0aW9uIGtleQora2V5X2Y0OQkJCQlrZjQ5CXN0cglGZAlLRVlfRig0OSkJLQktLS0tRQlGNDkgZnVuY3Rpb24ga2V5CitrZXlfZjUwCQkJCWtmNTAJc3RyCUZlCUtFWV9GKDUwKQktCS0tLS1FCUY1MCBmdW5jdGlvbiBrZXkKK2tleV9mNTEJCQkJa2Y1MQlzdHIJRmYJS0VZX0YoNTEpCS0JLS0tLUUJRjUxIGZ1bmN0aW9uIGtleQora2V5X2Y1MgkJCQlrZjUyCXN0cglGZwlLRVlfRig1MikJLQktLS0tRQlGNTIgZnVuY3Rpb24ga2V5CitrZXlfZjUzCQkJCWtmNTMJc3RyCUZoCUtFWV9GKDUzKQktCS0tLS1FCUY1MyBmdW5jdGlvbiBrZXkKK2tleV9mNTQJCQkJa2Y1NAlzdHIJRmkJS0VZX0YoNTQpCS0JLS0tLUUJRjU0IGZ1bmN0aW9uIGtleQora2V5X2Y1NQkJCQlrZjU1CXN0cglGaglLRVlfRig1NSkJLQktLS0tRQlGNTUgZnVuY3Rpb24ga2V5CitrZXlfZjU2CQkJCWtmNTYJc3RyCUZrCUtFWV9GKDU2KQktCS0tLS1FCUY1NiBmdW5jdGlvbiBrZXkKK2tleV9mNTcJCQkJa2Y1NwlzdHIJRmwJS0VZX0YoNTcpCS0JLS0tLUUJRjU3IGZ1bmN0aW9uIGtleQora2V5X2Y1OAkJCQlrZjU4CXN0cglGbQlLRVlfRig1OCkJLQktLS0tRQlGNTggZnVuY3Rpb24ga2V5CitrZXlfZjU5CQkJCWtmNTkJc3RyCUZuCUtFWV9GKDU5KQktCS0tLS1FCUY1OSBmdW5jdGlvbiBrZXkKK2tleV9mNjAJCQkJa2Y2MAlzdHIJRm8JS0VZX0YoNjApCS0JLS0tLUUJRjYwIGZ1bmN0aW9uIGtleQora2V5X2Y2MQkJCQlrZjYxCXN0cglGcAlLRVlfRig2MSkJLQktLS0tRQlGNjEgZnVuY3Rpb24ga2V5CitrZXlfZjYyCQkJCWtmNjIJc3RyCUZxCUtFWV9GKDYyKQktCS0tLS1FCUY2MiBmdW5jdGlvbiBrZXkKK2tleV9mNjMJCQkJa2Y2MwlzdHIJRnIJS0VZX0YoNjMpCS0JLS0tLUUJRjYzIGZ1bmN0aW9uIGtleQorY2xyX2JvbAkJCQllbDEJc3RyCWNiCS0JCS0JLS0tLS0JQ2xlYXIgdG8gYmVnaW5uaW5nIG9mIGxpbmUKK2NsZWFyX21hcmdpbnMJCQltZ2MJc3RyCU1DCS0JCS0JLS0tLS0JY2xlYXIgcmlnaHQgYW5kIGxlZnQgc29mdCBtYXJnaW5zCitzZXRfbGVmdF9tYXJnaW4JCQlzbWdsCXN0cglNTAktCQktCS0tLS0tCXNldCBsZWZ0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uLgkgU2VlIHNtZ2wuIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3JpZ2h0X21hcmdpbgkJc21ncglzdHIJTVIJLQkJLQktLS0tLQlzZXQgcmlnaHQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4KK2RldmljZV90eXBlCQkJZGV2dAlzdHIJZHYJLQkJLQktLS0tLQlJbmRpY2F0ZSBsYW5ndWFnZS9jb2Rlc2V0IHN1cHBvcnQKK2NvZGVfc2V0X2luaXQJCQljc2luCXN0cgljaQktCQktCS0tLS0tCUluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIGNvZGVzZXRzCitzZXQwX2Rlc19zZXEJCQlzMGRzCXN0cglzMAktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMCAoRVVDIHNldCAwLCBBU0NJSSkKK3NldDFfZGVzX3NlcQkJCXMxZHMJc3RyCXMxCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAxCitzZXQyX2Rlc19zZXEJCQlzMmRzCXN0cglzMgktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMgorc2V0M19kZXNfc2VxCQkJczNkcwlzdHIJczMJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDMKK2tleV9tb3VzZQkJCWttb3VzCXN0cglLbQlLRVlfTU9VU0UJMDYzMQktLS0tLQlNb3VzZSBldmVudCBoYXMgb2NjdXJyZWQKK21vdXNlX2luZm8JCQltaW5mbwlzdHIJTWkJLQkJLQktLS0tLQlNb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KK3JlcV9tb3VzZV9wb3MJCQlyZXFtcAlzdHIJUlEJLQkJLQktLS0tLQlSZXF1ZXN0IG1vdXNlIHBvc2l0aW9uCitnZXRfbW91c2UJCQlnZXRtCXN0cglHbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgZ2V0IGJ1dHRvbiBldmVudHMsIHBhcmFtZXRlciAjMSBub3QgZG9jdW1lbnRlZC4KK3JlbGVhc2VfbW91c2UJCQlyZWxtCXN0cglSbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgcmVsZWFzZSB0aGUgbW91c2UgKi8KK2NvbG9yX25hbWVzCQkJY29sb3JubQlzdHIJWXcJLQkJLQktLS0tLQlHaXZlIG5hbWUgZm9yIGNvbG9yICMxCitpbml0aWFsaXplX2NvbG9yCQlpbml0YwlzdHIJSWMJLQkJLQktLS0tLQlpbml0aWFsaXplIGNvbG9yICMxIHRvICgjMiwjMywjNCkKK2luaXRpYWxpemVfcGFpcgkJCWluaXRwCXN0cglJcAktCQktCS0tLS0tCUluaXRpYWxpemUgY29sb3IgcGFpciAjMSB0byBmZz0oIzIsIzMsIzQpLCBiZz0oIzUsIzYsIzcpCitvcmlnX2NvbG9ycwkJCW9jCXN0cglvYwktCQktCS0tLS0tCVNldCBhbGwgY29sb3IgcGFpcnMgdG8gdGhlIG9yaWdpbmFsIG9uZXMKK29yaWdfcGFpcgkJCW9wCXN0cglvcAktCQktCS0tLS0tCVNldCBkZWZhdWx0IHBhaXIgdG8gaXRzIG9yaWdpbmFsIHZhbHVlCitzZXRfYV9iYWNrZ3JvdW5kCQlzZXRhYglzdHIJQUIJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciB0byAjMSwgdXNpbmcgQU5TSSBlc2NhcGUKK3NldF9hX2ZvcmVncm91bmQJCXNldGFmCXN0cglBRgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2JhY2tncm91bmQJCQlzZXRiCXN0cglTYgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yICMxCitzZXRfY29sb3JfcGFpcgkJCXNjcAlzdHIJc3AJLQkJLQktLS0tLQlTZXQgY3VycmVudCBjb2xvciBwYWlyIHRvICMxCitzZXRfZm9yZWdyb3VuZAkJCXNldGYJc3RyCVNmCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgIzEKKyMlLlRFCisjJS5hZAorIyUKKyMgVGhlIG1hZ2ljIHRva2VuIGJlbG93IHRlbGxzIHRoZSB0aWMgY29tcGlsZXItZ2VuZXJhdG9yIGNvZGUgdGhhdCBhbGwgdGhlIGNhcHMKKyMgcGFzdCBpdCBzaG91bGQgYmUgaWdub3JlZCAobm90IHdyaXR0ZW4gb3V0KSB3aGVuIGR1bXBpbmcgdGVybWluZm8gb2JqZWN0cy4gSXQKKyMgYWxzbyB0ZWxscyB0aGUgbWFuIHBhZ2UgdGFibGUgZ2VuZXJhdG9yIG5vdCB0byBwYXNzIHRocm91Z2ggZm9sbG93aW5nIGxpbmVzCisjIFRoaXMgbWVhbnMgd2UgY2FuIGhhdmUgb2Jzb2xldGUgY2FwYWJpbGl0aWVzIGFuZCBwc2V1ZG8tY2FwYWJpbGl0aWVzIHRoYXQgYXJlCisjIHJlY29nbml6ZWQgZm9yIHRlcm1jYXAgb3IgdGVybWluZm8gY29tcGlsYXRpb24sIGJ1dCBub3Qgb3V0cHV0LgorIworIyAlJS1TVE9QLUhFUkUtJSUKKyMKKyMgRG9uJ3QgbW92ZSB0aGlzIGNhc3VhbGx5ISAgSW4gZmFjdCwgZG9uJ3QgbW92ZSBpdCBhdCBhbGwgdW5sZXNzIHlvdSdyZQorIyBlaXRoZXIgZG9pbmcgaXQgdG8gYWRkIFN5c3RlbSBWIG9yIFhQRzQgZXh0ZW5zaW9ucywgb3IgaGF2ZSBkZWNpZGVkIHlvdQorIyBkb24ndCBjYXJlIGFib3V0IFNWcjQgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNQ0FQIEVYVEVOU0lPTiBDQVBBQklMSVRJRVMKKyMKKyMgVGhlIGNhcGFiaWxpdGllcyBiZWxvdyBhcmUgZWl0aGVyIG9ic29sZXRlIG9yIGV4dGVuc2lvbnMgb24gY2VydGFpbiBzeXN0ZW1zLgorIyBUaGV5IGFyZSBub3QgdXNlZCBieSBTVlI0IHRlcm1pbmZvLiAgU29tZSBhcmUgdXNlZCBieSBjYXB0b2luZm8gdG8gdHJhbnNsYXRlCisjIHRlcm1jYXAgc291cmNlczsgdGhlIHJlc3QgYXJlIGxpc3RlZCBmb3IgY29tcGxldGVuZXNzLCBhbmQgaW4gY2FzZSBzb21lYm9keQorIyBjYXJlcyBhYm91dCB0aGVtIGVub3VnaCB0byBoYWNrIGluIGNvZGUgdGhhdCB3aWxsIHRyYW5zbGF0ZSB0aGVtIGludG8KKyMgdGVybWluZm8gY2FwYWJpbGl0aWVzLgorIworIyBUaGUgZmlyc3QgcGFydCBvZiB0aGUgbGlzdCBpcyBmcm9tIFJvc3MgUmlkZ2UncyBgbXl0aW5mbycgcGFja2FnZQorIyAoY29tcC5zb3VyY2VzLnVuaXgsIHZvbHVtZSAyNik7IHRoZSB2YXJpYWJsZSBuYW1lcyBhbmQgdGVybWluZm8gbmFtZXMgKGFzCisjIHdlbGwgYXMgdGhlIHRlcm1jYXAgY29kZXMpIG1hdGNoIGhpcyBsaXN0LgorIworIyBUaGlzIGdyb3VwIG9mIGNvZGVzIGlzIG5vdCBtYXJrZWQgb2Jzb2xldGUgaW4gNC40QlNELCBidXQgaGF2ZSBubyBkaXJlY3QKKyMgdGVybWluZm8gZXF1aXZhbGVudHMuICBUaGUgcnMgY2FwYWJpbGl0eSBpcyBzcGVjaWFsbHkgdHJhbnNsYXRlZCB0byB0ZXJtaW5mbworIyByMiwgYW5kIHZpY2UgdmVyc2EsIGlmIGFuIGVudHJ5IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiByMi4gIFNpbWlsYXJseSwKKyMgaTIgaXMgdHJhbnNsYXRlZCB0byByMyBpZiB0aGVyZSBpcyBubyByMyAoYmVjYXVzZSBTViB0ZXJtaW5mbyBtYXBzIGlzIHRvIGkyKS4KKyMgVGhlIHVnIGNhcGFiaWxpdHkgaXMgdGhyb3duIGF3YXksIGJ1dCBhc3N1bWVkIHRvIGJlIHdoYXRldmVyIHNnIGlzIGlmIHRoZQorIyBsYXR0ZXIgaXMgbm9uemVybyBhbmQgd2UncmUgZHVtcGluZyBpbiB0ZXJtY2FwIGZvcm1hdC4KKyMKK3Rlcm1jYXBfaW5pdDIJCQlPVGkyCXN0cglpMgktCQktCVlCLS0tCXNlY29uZGFyeSBpbml0aWFsaXphdGlvbiBzdHJpbmcKK3Rlcm1jYXBfcmVzZXQJCQlPVHJzCXN0cglycwktCQktCVlCLUctCXRlcm1pbmFsIHJlc2V0IHN0cmluZworbWFnaWNfY29va2llX2dsaXRjaF91bAkJT1R1ZwludW0JdWcJLQkJLQlZQkNHRQludW1iZXIgb2YgYmxhbmtzIGxlZnQgYnkgdWwKKyMKKyMgT2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMuICBTb21lIGFyZSB1c2VkIGZvciB0ZXJtY2FwIHRyYW5zbGF0aW9uLiAgVGhlCisjIGNvZGUgdXNlcyB0aGUgJ09UJyBwcmVmaXggd2UgcHV0IG9uIG9ic29sZXRlIGNhcGFiaWxpdGllcyB0byBzdXBwcmVzcworIyBwcmludGluZyB0aGVtIGluIHRlcm1pbmZvIHNvdXJjZSBkdW1wcyBvZiBjb21waWxlZCBlbnRyaWVzLgorIworYmFja3NwYWNlc193aXRoX2JzCQlPVGJzCWJvb2wJYnMJLQkJLQlZQkNHRQl1c2VzIF5IIHRvIG1vdmUgbGVmdAorY3J0X25vX3Njcm9sbGluZwkJT1Rucwlib29sCW5zCS0JCS0JWUJDRy0JY3J0IGNhbm5vdCBzY3JvbGwKK25vX2NvcnJlY3RseV93b3JraW5nX2NyCQlPVG5jCWJvb2wJbmMJLQkJLQlZQkNHLQlubyB3YXkgdG8gZ28gdG8gc3RhcnQgb2YgbGluZQorY2FycmlhZ2VfcmV0dXJuX2RlbGF5CQlPVGRDCW51bQlkQwktCQktCVlCLUctCXBhZCBuZWVkZWQgZm9yIENSCituZXdfbGluZV9kZWxheQkJCU9UZE4JbnVtCWROCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgTEYKK2xpbmVmZWVkX2lmX25vdF9sZgkJT1RubAlzdHIJbmwJLQkJLQlZQkNHRQl1c2UgdG8gbW92ZSBkb3duCitiYWNrc3BhY2VfaWZfbm90X2JzCQlPVGJjCXN0cgliYwktCQktCVlCQ0dFCW1vdmUgbGVmdCwgaWYgbm90IF5ICisjCisjIEdOVSB0ZXJtY2FwIGxpYnJhcnkgZXh0ZW5zaW9ucy4gIFRoZSBHTlUgdGVybWNhcCBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgRW1hY3Mgbm8gbG9uZ2VyIHVzZXMgdGhlc2UsIGJ1dCBNVCBzaG93ZWQgdXAgaW4gcHJlLTkuMCB2ZXJzaW9ucyBvZiB0aGUKKyMgQlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuYW1lIGNsYXNoIHdpdGggdGVybWluZm8gTVQgaXMgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvOyBNVCBpcyBjb252ZXJ0ZWQgdG8ga20uCisjCitnbnVfaGFzX21ldGFfa2V5CQlPVE1UCWJvb2wJTVQJLQkJLQktLS0tRQloYXMgbWV0YSBrZXkKKyMgZ251X3RhYl93aWR0aAkJCU9UdHcJbnVtCXR3CS0JCS0JLS0tLUUJdGFiIHdpZHRoIGluIHNwYWNlcworIworIyBHTlUgdGVybWNhcCAqZG9lcyogaW5jbHVkZSB0aGUgZm9sbG93aW5nIGV4dGVuZGVkIGNhcGFiaWxpdHksICBPbmx5IHRoZQorIyBub3ctb2Jzb2xldGUgQW5uIEFyYm9yIHRlcm1pbmFscyB1c2VkIGl0LgorIworIyBnbnVfY2hhbmdlX3Njcm9sbF9yZWdpb24JT1RjUwlzdHIJY1MJLQkJLQktLS1HRQlhbHRlcm5hdGUgc2V0IHNjcm9sbGluZyByZWdpb24gCisjCisjIFRoZSBmb2xsb3dpbmcgY29tbWVudHMgZGVzY3JpYmUgY2FwbmFtZXMgc28gYW5jaWVudCB0aGF0IEkgYmVsaWV2ZSBubworIyBzb2Z0d2FyZSB1c2VzIHRoZW0gYW55IGxvbmdlci4gIFNvbWUgb2YgdGhlc2UgaGF2ZSB0byBnbyBiZWNhdXNlIHRoZXkKKyMgY2xhc2ggd2l0aCB0ZXJtaW5mbyBuYW1lcyBpbiB3YXlzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHR5cGUKKyMgaW5mb3JtYXRpb24uCisjCisjIFRoZXNlIG15dGluZm8gY29kZXMgYXJlIG5vdCB1c2VkIGluIHRoZSA0LjRCU0QgY3Vyc2VzIGNvZGUuICBUaGV5IGFyZQorIyBtYXJrZWQgb2Jzb2xldGUgaW4gdGhlIDQuNEJTRCBtYW51YWwgcGFnZXMuCisjCisjIFRoZXJlIGlzIG9uZSBjb25mbGljdCB3aXRoIHRlcm1pbmZvOyBtYSBpcyBpbiBib3RoLiAgVGhpcyBjb25mbGljdCBpcworIyByZXNvbHZlZCBieSB0eXBlIGluZm9ybWF0aW9uLgorIworIyBUaGUgYGtvJyBjYXBhYmlsaXR5IGlzIHRyYW5zbGF0ZWQgYnkgc3BlY2lhbCBjb2RlLiAgSXQgc2hvdWxkIGNvbnRhaW4gYQorIyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGtleXMuCisjIFRoZSBga24nIGNvZGUgaXMgYWNjZXB0ZWQgYnV0IGlnbm9yZWQuCisjCisjIFRoZSBgbWEnIGNhcGFiaWxpdHkgc2VlbXMgdG8gaGF2ZSBiZWVuIGRlc2lnbmVkIHRvIG1hcCBiZXR3ZWVuIHRoZSByb2d1ZSgyKQorIyBtb3Rpb24ga2V5cyAoaW5jbHVkaW5nIGpraGwpIGFuZCBjaGFyYWN0ZXJzIGVtaXR0ZWQgYnkgYXJyb3cga2V5cyBvbiBzb21lCisjIHByaW1pdGl2ZSBwcmUtQU5TSSB0ZXJtaW5hbHMuICBJdCdzIHNvIG9ic29sZXRlIGl0J3MgZm9zc2lsaXplZC4uLgorIworIyBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2YgbWVtb3J5X2xvY2tfYWJvdmUgYW5kIG1lbW9yeV91bmxvY2s6CisjICJZb3UgY2FuICdmcmVlemUnIGRhdGEgb24gdGhlIHNjcmVlbiBieSB0dXJuaW5nIG9uIE1lbW9yeSBMb2NrIGluIGEgbGluZSBvZgorIyB0ZXh0LiAgQWxsIGxpbmVzIGFib3ZlIHRoZSBjdXJzb3IncyBjdXJyZW50IGxpbmUgYmVjb21lIGxvY2tlZCBpbiBwbGFjZSBvbgorIyB0aGUgc2NyZWVuLiAgVGhlbiBlbnRlciBkYXRhIG5vcm1hbGx5LiAgV2hlbiB0aGUgc2NyZWVuIGZpbGxzIHVwLCBhbnkKKyMgZnVydGhlciBkYXRhIGVudGVyZWQgZm9yY2VzIHRoZSBmaXJzdCBsaW5lIG9mIHVuZnJvemVuIGxpbmUgdGV4dCB0byBzY3JvbGwKKyMgdW5kZXIgdGhlIGZyb3plbiBkYXRhLiAgTGluZXMgc2Nyb2xsZWQgb2ZmIHRoZSBzY3JlZW4gYXJlIGluc2VydGVkIGludG8KKyMgbWVtb3J5IGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgZmlyc3QgZnJvemVuIGxpbmUuIiAoZnJvbSB0aGUgSFAgNzAwLzk2CisjIFVzZXIncyBtYW51YWwpLiAgVlQxMDAvQU5TSSBtZW1vcnkgbG9jayBzZXQgaXMgXEVbPjJoLCByZXNldCBpcyBcRVs+MmwuCisjCisjIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0ZXJtaW5mbyBhcmUgc3VwcG9zZWQgdG8gYmVoYXZlIGFzIHRob3VnaCB4ciBpcworIyBhbHdheXMgdHJ1ZS4KKyMKK2xpbmVmZWVkX2lzX25ld2xpbmUJCU9UTkwJYm9vbAlOTAktCQktCVlCLS0tCW1vdmUgZG93biB3aXRoIFxuCisjIGV2ZW5fcGFyaXR5CQkJT1RFUAlib29sCUVQCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgZXZlbiBwYXJpdHkKKyMgb2RkX3Bhcml0eQkJCU9UT1AJYm9vbAlPUAktCQktCS1CLS0tCXRlcm1pbmFsIHJlcXVpcmVzIG9kZCBwYXJpdHkKKyMgaGFsZl9kdXBsZXgJCQlPVEhECWJvb2wJSEQJLQkJLQktQi0tLQl0ZXJtaW5hbCBpcyBoYWxmLWR1cGxleAorIyBsb3dlcl9jYXNlX29ubHkJCU9UTEMJYm9vbAlMQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IGxvd2VyIGNhc2UKKyMgdXBwZXJfY2FzZV9vbmx5CQlPVFVDCWJvb2wJVUMJLQkJLQktQi0tLQl0ZXJtaW5hbCBoYXMgb25seSB1cHBlciBjYXNlCitiYWNrc3BhY2VfZGVsYXkJCQlPVGRCCW51bQlkQgktCQktCVlCLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5ICisjIGZvcm1fZmVlZF9kZWxheQkJT1RkRgludW0JZEYJLQkJLQktQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeTAoraG9yaXpvbnRhbF90YWJfZGVsYXkJCU9UZFQJbnVtCWRUCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkkKKyMgdmVydGljYWxfdGFiX2RlbGF5CQlPVGRWCW51bQlkVgktCQktCS1CLS0tCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5WCitudW1iZXJfb2ZfZnVuY3Rpb25fa2V5cwkJT1RrbgludW0Ja24JLQkJLQktQi1HLQljb3VudCBvZiBmdW5jdGlvbiBrZXlzCitvdGhlcl9ub25fZnVuY3Rpb25fa2V5cwkJT1RrbwlzdHIJa28JLQkJLQktQi1HLQlsaXN0IG9mIHNlbGYtbWFwcGVkIGtleWNhcHMKK2Fycm93X2tleV9tYXAJCQlPVG1hCXN0cgltYQktCQktCVlCQy0tCW1hcCBhcnJvdyBrZXlzIHJvZ3VlKDEpIG1vdGlvbiBrZXlzCisjIG1lbW9yeV9sb2NrX2Fib3ZlCQlPVG1sCXN0cgltbAktCQktCS1CLS0tCWxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKKyMgbWVtb3J5X3VubG9jawkJCU9UbXUJc3RyCW11CS0JCS0JLUItLS0JdW5sb2NrIHZpc2libGUgc2NyZWVuIG1lbW9yeSBhYm92ZSB0aGUgY3VycmVudCBsaW5lCitoYXNfaGFyZHdhcmVfdGFicwkJT1RwdAlib29sCXB0CS0JCS0JWUItLS0JaGFzIDgtY2hhciB0YWJzIGludm9rZWQgd2l0aCBeSQorcmV0dXJuX2RvZXNfY2xyX2VvbAkJT1R4cglib29sCXhyCS0JCS0JWUItLS0JcmV0dXJuIGNsZWFycyB0aGUgbGluZQorIyB0ZWtfNDAyNV9pbnNlcnRfbGluZQkJT1R4eAlib29sCXh4CS0JCS0JLUJDLS0JVGVrdHJvbml4IDQwMjUgaW5zZXJ0LWxpbmUgZ2xpdGNoCisjCisjIG15dGluZm8gZGVzY3JpYmVkIHRoaXMgYXMgYSB0ZXJtY2FwIGNhcGFiaWxpdHksIGJ1dCBpdCdzIG5vdCBsaXN0ZWQgaW4gdGhlCisjIDQuNEJTRCBtYW4gcGFnZXMsIGFuZCBub3QgZm91bmQgaW4gdGhlIDQuNEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgbmN1cnNlcworIyBwYWNrYWdlLCBsaWtlIFN5c3RlbSBWLCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbHdheXMgdHJ1ZS4KKyMKKyMgcmluZF9vbmx5X2F0X3RvcAkJT1R4cQlib29sCXhxCS0JCS0JLS0tLS0JcmV2ZXJzZSBpbmRleCBvbmx5IHdvcmtzIGZyb20gdG9wIGxpbmUKKyMKKyMgVW5pdmVyc2l0eSBvZiBXYXRlcmxvbyB0ZXJtY2FwIGV4dGVuc2lvbnMgKGFzIGRlc2NyaWJlZCBpbiBteXRpbmZvKS4KKyMgVGhlIGB4bCcgdGVybWNhcCBmaWxlIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdAorIyBiZSByZXNvbHZlZCBieSBhIHR5cGUgY2hlY2suICBUaGUgZGVzY3JpcHRpb25zIGFyZSBndWVzc2VzIGZyb20gd2hhdCB3YXMKKyMgaW4gdGhlIG15dGluZm8gdGFibGVzLiAKKyMKKyMga2V5X2ludGVycnVwdF9jaGFyCQlPVGtpCXN0cglraQktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgaW50ZXJydXB0IGtleSAoPykKKyMga2V5X2tpbGxfY2hhcgkJCU9Ua2sJc3RyCWtrCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBraWxsIGtleSAoPykKKyMga2V5X3N1c3BlbmRfY2hhcgkJT1RreglzdHIJa3oJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IHN1c3BlbmQga2V5ICg/KQorIyBpbml0aWFsaXphdGlvbl9tZXNzeQkJT1R4Ywlib29sCXhjCS0JCS0JLS0tLS0JaW5pdGlhbGl6YXRpb24gbGVhdmVzIGdhcmJhZ2Ugb24gdGhlIHNjcmVlbiAoPykKKyMgaW5kX2F0X2JvdHRvbV9kb2VzX2NyCQlPVHhsCWJvb2wJeGwJLQkJLQktLS0tLQlpbmRleCBkb2VzIGEgY2FycmlhZ2UgcmV0dXJuCisjCisjIE5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyB1bmlxdWUgdG8gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlLgorIyBTUiBjbGFzaGVzIHdpdGggYSB0ZXJtaW5mbyBuYW1lOyB0aGlzIGFtYmlndWl0eSBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgYSB0eXBlCisjIGNoZWNrLgorIworIyBzY3JvbGxfbGVmdAkJCU9Uc2wxCXN0cglTbAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQKKyMgc2Nyb2xsX3JpZ2h0CQkJT1RzcjEJc3RyCVNyCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQKKyMgcGFybV9zY3JvbGxfbGVmdAkJT1RzbAlzdHIJU0wJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIGxlZnR3YXJkICMxIGNoYXJhY3RlcnMKKyMgcGFybV9zY3JvbGxfcmlnaHQJCU9Uc3IJc3RyCVNSCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiByaWdodHdhcmQgIzEgY2hhcmFjdGVycworIworIyBUaGUgbXl0aW5mbyBjYXBhYmlsaXRpZXMgZW5kIGhlcmUuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFhlbml4IGRlZmluZWQgaXRzIG93biBzZXQgb2YgZm9ybXMtZHJhd2luZyBjYXBhYmlsaXRpZXM6CisjCisjIGNhcAlJQk0gQVNDSUkJZGVzY3JpcHRpb24gICAgICAgICAgICAgQUNTICAgICAgICAgCUFTQ0lJCisjIC0tLQktLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tCS0tLS0tLQorIyBHMQkxOTEgXDI3NyBNLT8Jc2luZ2xlIHVwcGVyIHJpZ2h0ICAgCUFDU19VUkNPUk5FUgorIyBHMgkyMTggXDMzMiBNLVoJc2luZ2xlIHVwcGVyIGxlZnQJQUNTX1VMQ09STkVSCisjIEczCTE5MiBcMzAwIE0tQAlzaW5nbGUgbG93ZXIgbGVmdAlBQ1NfTExDT1JORVIKKyMgRzQJMjE3IFwzMzEgTS1ZCXNpbmdsZSBsb3dlciByaWdodAlBQ1NfTFJDT1JORVIKKyMgRzUJMTg3IFwyNzMgTS07CWRvdWJsZSB1cHBlciByaWdodAorIyBHNgkyMDEgXDMxMSBNLUkJZG91YmxlIHVwcGVyIGxlZnQKKyMgRzcJMjAwIFwzMTAgTS1ICWRvdWJsZSBsb3dlciBsZWZ0CisjIEc4CTE4OCBcMjc0IE0tPAlkb3VibGUgbG93ZXIgcmlnaHQKKyMgR0MJMTk3IFwzMDUgTS1FCXNpbmdsZSBpbnRlcnNlY3Rpb24JQUNTX1BMVVMJXyBfCisjIEdECTE5NCBcMzAyIE0tQglzaW5nbGUgZG93bi10aWNrCUFDU19UVEVFCSB8CisjIEdICTE5NiBcMzA0IE0tRAlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCUFDU19ITElORQorIyBHTAkxODAgXDI2NCBNLTQJc2luZ2xlIGxlZnQgdGljawlBQ1NfUlRFRQktfAorIyBHUgkxOTUgXDMwMyBNLUMJc2luZ2xlIHJpZ2h0IHRpY2sJQUNTX0xURUUJfC0KKyMgR1UJMTkzIFwzMDEgTS1BCXNpbmdsZSB1cCB0aWNrCQlBQ1NfQlRFRQlffF8KKyMgR1YJMTc5IFwyNjMgTS0zCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCUFDU19WTElORQorIyBHYwkyMDYgXDMxNiBNLU4JZG91YmxlIGludGVyc2VjdGlvbgorIyBHZAkyMDMgXDMxMyBNLUsJZG91YmxlIGRvd24gdGljaworIyBHaAkyMDUgXDMxNSBNLU0JZG91YmxlIGhvcml6b250YWwgbGluZQorIyBHbAkyMDQgXDIwNCBNLUwJZG91YmxlIGxlZnQgdGljaworIyBHcgkxODUgXDI3MSBNLTkJZG91YmxlIHJpZ2h0IHRpY2sKKyMgR3UJMjAyIFwzMTIgTS1KCWRvdWJsZSB1cCB0aWNrCisjIEd2CTE4NiBcMjcyIE0tOglkb3VibGUgdmVydGljYWwgbGluZQorIworIyBUaGUgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUgdGhlIHNpbmdsZS1saW5lIGNhcHMgYW5kIGRpc2NhcmQgdGhlIG90aGVycworIyAodmlhIElHTk9SRSBhbGlhc2VzIGZ1cnRoZXIgZG93bikuICBXZSBkb24ndCB3YW50IHRvIGRvIG5vcm1hbCBwYWQgCisjIHRyYW5zbGF0aW9uIG9uIHRoZXNlLCB0aGV5J3JlIG9mdGVuIHNpbmdsZS1jaGFyYWN0ZXIgcHJpbnRhYmxlIEFTQ0lJCisjIHN0cmluZ3MgdGhhdCBoYXBwZW4gdG8gYmUgbnVtZXJpY3MuICBUaGVyZSdzIGF3ayBjb2RlIGluIHBhcmFtZXRyaXplZC5zaAorIyB0aGF0IGRldGVjdHMgdGhlIGFjc18gcHJlZml4IGFuZCB1c2VzIGl0IHRvIHN1cHByZXNzIHBhZCB0cmFuc2xhdGlvbi4KKyMgVGhlc2UgdGVybWluZm8gbmFtZXMgYXJlIGludmVudGVkLgorIworYWNzX3VsY29ybmVyCQkJT1RHMglzdHIJRzIJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgbGVmdAorYWNzX2xsY29ybmVyCQkJT1RHMwlzdHIJRzMJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgbGVmdAorYWNzX3VyY29ybmVyCQkJT1RHMQlzdHIJRzEJLQkJLQktLS0tLQlzaW5nbGUgdXBwZXIgcmlnaHQKK2Fjc19scmNvcm5lcgkJCU9URzQJc3RyCUc0CS0JCS0JLS0tLS0Jc2luZ2xlIGxvd2VyIHJpZ2h0CithY3NfbHRlZQkJCU9UR1IJc3RyCUdSCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIHJpZ2h0CithY3NfcnRlZQkJCU9UR0wJc3RyCUdMCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIGxlZnQKK2Fjc19idGVlCQkJT1RHVQlzdHIJR1UJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgdXAKK2Fjc190dGVlCQkJT1RHRAlzdHIJR0QJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgZG93bgorYWNzX2hsaW5lCQkJT1RHSAlzdHIJR0gJLQkJLQktLS0tLQlzaW5nbGUgaG9yaXpvbnRhbCBsaW5lCithY3NfdmxpbmUJCQlPVEdWCXN0cglHVgktCQktCS0tLS0tCXNpbmdsZSB2ZXJ0aWNhbCBsaW5lCithY3NfcGx1cwkJCU9UR0MJc3RyCUdDCS0JCS0JLS0tLS0Jc2luZ2xlIGludGVyc2VjdGlvbgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVEVSTUlORk8gRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGlzIHNlY3Rpb24gaXMgYWxtb3N0IGFsbCBjb21tZW50cy4gIFdoYXQgaXQncyBtYWlubHkgZm9yIGlzIHRvIGRlc2NyaWJlCisjIHdoYXQgY2FwYWJpbGl0aWVzIG5lZWQgdG8gYmUgc3F1ZWV6ZWQgb3V0IHRvIGdldCBkb3duIHRvIHRoZSBYU0kgQ3Vyc2VzCisjIHN0YW5kYXJkIHNldC4gIFRoZXkgYXJlIGZsYWdnZWQgd2l0aCBLLgorIworIyBIUCBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBIUAorIyB0ZXJtaW5mbyBmaWxlcy4gIEV4Y2VwdCBmb3IgbWVtb3J5X2xvY2sgYW5kIG1lbW9yeV91bmxvY2ssIHRoZXkgYXJlCisjIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gU1ZyNCBleHRlbnNpb25zLCBidXQgdGhleSBtYWtlIHRoZSBiaW5hcnkgZm9ybWF0CisjIGRpZmZlcmVudC4gIEdycnIuLi4uCisjCittZW1vcnlfbG9jawkJCW1lbWwJc3RyCW1sCS0JCS0JLS0tLUsJbG9jayBtZW1vcnkgYWJvdmUgY3Vyc29yCittZW1vcnlfdW5sb2NrCQkJbWVtdQlzdHIJbXUJLQkJLQktLS0tSwl1bmxvY2sgbWVtb3J5CisjcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKKyNsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworI2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKKyNrZXlfZjExCQkJa2YxMQlzdHIJRjEJLQkJLQktLS0tLQlGMTEgZnVuY3Rpb24ga2V5Cisja2V5X2YxMgkJCWtmMTIJc3RyCUYyCS0JCS0JLS0tLS0JRjEyIGZ1bmN0aW9uIGtleQorI2tleV9mMTMJCQlrZjEzCXN0cglGMwktCQktCS0tLS0tCUYxMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE0CQkJa2YxNAlzdHIJRjQJLQkJLQktLS0tLQlGMTQgZnVuY3Rpb24ga2V5Cisja2V5X2YxNQkJCWtmMTUJc3RyCUY1CS0JCS0JLS0tLS0JRjE1IGZ1bmN0aW9uIGtleQorI2tleV9mMTYJCQlrZjE2CXN0cglGNgktCQktCS0tLS0tCUYxNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjE3CQkJa2YxNwlzdHIJRjcJLQkJLQktLS0tLQlGMTcgZnVuY3Rpb24ga2V5Cisja2V5X2YxOAkJCWtmMTgJc3RyCUY4CS0JCS0JLS0tLS0JRjE4IGZ1bmN0aW9uIGtleQorI2tleV9mMTkJCQlrZjE5CXN0cglGOQktCQktCS0tLS0tCUYxOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIwCQkJa2YyMAlzdHIJRkEJLQkJLQktLS0tLQlGMjAgZnVuY3Rpb24ga2V5Cisja2V5X2YyMQkJCWtmMjEJc3RyCUZCCS0JCS0JLS0tLS0JRjIxIGZ1bmN0aW9uIGtleQorI2tleV9mMjIJCQlrZjIyCXN0cglGQwktCQktCS0tLS0tCUYyMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjIzCQkJa2YyMwlzdHIJRkQJLQkJLQktLS0tLQlGMjMgZnVuY3Rpb24ga2V5Cisja2V5X2YyNAkJCWtmMjQJc3RyCUZFCS0JCS0JLS0tLS0JRjI0IGZ1bmN0aW9uIGtleQorI2tleV9mMjUJCQlrZjI1CXN0cglGRgktCQktCS0tLS0tCUYyNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjI2CQkJa2YyNglzdHIJRkcJLQkJLQktLS0tLQlGMjYgZnVuY3Rpb24ga2V5Cisja2V5X2YyNwkJCWtmMjcJc3RyCUZICS0JCS0JLS0tLS0JRjI3IGZ1bmN0aW9uIGtleQorI2tleV9mMjgJCQlrZjI4CXN0cglGSQktCQktCS0tLS0tCUYyOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI5CQkJa2YyOQlzdHIJRkoJLQkJLQktLS0tLQlGMjkgZnVuY3Rpb24ga2V5Cisja2V5X2YzMAkJCWtmMzAJc3RyCUZLCS0JCS0JLS0tLS0JRjMwIGZ1bmN0aW9uIGtleQorI2tleV9mMzEJCQlrZjMxCXN0cglGTAktCQktCS0tLS0tCUYzMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMyCQkJa2YzMglzdHIJRk0JLQkJLQktLS0tLQlGMzIgZnVuY3Rpb24ga2V5Cisja2V5X2YzMwkJCWtmMzMJc3RyCUZOCS0JCS0JLS0tLS0JRjMzIGZ1bmN0aW9uIGtleQorI2tleV9mMzQJCQlrZjM0CXN0cglGTwktCQktCS0tLS0tCUYzNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM1CQkJa2YzNQlzdHIJRlAJLQkJLQktLS0tLQlGMzUgZnVuY3Rpb24ga2V5Cisja2V5X2YzNgkJCWtmMzYJc3RyCUZRCS0JCS0JLS0tLS0JRjM2IGZ1bmN0aW9uIGtleQorI2tleV9mMzcJCQlrZjM3CXN0cglGUgktCQktCS0tLS0tCUYzNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM4CQkJa2YzOAlzdHIJRlMJLQkJLQktLS0tLQlGMzggZnVuY3Rpb24ga2V5Cisja2V5X2YzOQkJCWtmMzkJc3RyCUZUCS0JCS0JLS0tLS0JRjM5IGZ1bmN0aW9uIGtleQorI2tleV9mNDAJCQlrZjQwCXN0cglGVQktCQktCS0tLS0tCUY0MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQxCQkJa2Y0MQlzdHIJRlYJLQkJLQktLS0tLQlGNDEgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MgkJCWtmNDIJc3RyCUZXCS0JCS0JLS0tLS0JRjQyIGZ1bmN0aW9uIGtleQorI2tleV9mNDMJCQlrZjQzCXN0cglGWAktCQktCS0tLS0tCUY0MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ0CQkJa2Y0NAlzdHIJRlkJLQkJLQktLS0tLQlGNDQgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NQkJCWtmNDUJc3RyCUZaCS0JCS0JLS0tLS0JRjQ1IGZ1bmN0aW9uIGtleQorI2tleV9mNDYJCQlrZjQ2CXN0cglGYQktCQktCS0tLS0tCUY0NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ3CQkJa2Y0NwlzdHIJRmIJLQkJLQktLS0tLQlGNDcgZnVuY3Rpb24ga2V5Cisja2V5X2Y0OAkJCWtmNDgJc3RyCUZjCS0JCS0JLS0tLS0JRjQ4IGZ1bmN0aW9uIGtleQorI2tleV9mNDkJCQlrZjQ5CXN0cglGZAktCQktCS0tLS0tCUY0OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUwCQkJa2Y1MAlzdHIJRmUJLQkJLQktLS0tLQlGNTAgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MQkJCWtmNTEJc3RyCUZmCS0JCS0JLS0tLS0JRjUxIGZ1bmN0aW9uIGtleQorI2tleV9mNTIJCQlrZjUyCXN0cglGZwktCQktCS0tLS0tCUY1MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjUzCQkJa2Y1MwlzdHIJRmgJLQkJLQktLS0tLQlGNTMgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NAkJCWtmNTQJc3RyCUZpCS0JCS0JLS0tLS0JRjU0IGZ1bmN0aW9uIGtleQorI2tleV9mNTUJCQlrZjU1CXN0cglGagktCQktCS0tLS0tCUY1NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjU2CQkJa2Y1NglzdHIJRmsJLQkJLQktLS0tLQlGNTYgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NwkJCWtmNTcJc3RyCUZsCS0JCS0JLS0tLS0JRjU3IGZ1bmN0aW9uIGtleQorI2tleV9mNTgJCQlrZjU4CXN0cglGbQktCQktCS0tLS0tCUY1OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU5CQkJa2Y1OQlzdHIJRm4JLQkJLQktLS0tLQlGNTkgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MAkJCWtmNjAJc3RyCUZvCS0JCS0JLS0tLS0JRjYwIGZ1bmN0aW9uIGtleQorI2tleV9mNjEJCQlrZjYxCXN0cglGcAktCQktCS0tLS0tCUY2MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYyCQkJa2Y2MglzdHIJRnEJLQkJLQktLS0tLQlGNjIgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MwkJCWtmNjMJc3RyCUZyCS0JCS0JLS0tLS0JRjYzIGZ1bmN0aW9uIGtleQorIworIyBJQk0gZXh0ZW5zaW9ucworIworIyBUaGVzZSBleHRlbnNpb25zIGZvbGxvdyBwdHJfbm9uIChyZXBsYWNpbmcgZXZlcnl0aGluZyBhZnRlciBpdCkgaW4gSUJNCisjIHRlcm1pbmZvIGZpbGVzLgorIworIyBUaGUgcGxhY2VzIGluIHRoZSBib3hbMTJdIGNhcGFiaWxpdGllcyBjb3JyZXNwb25kIHRvIGFjc2MgY2hhcmFjdGVycywgaGVyZSBpcworIyB0aGUgbWFwcGluZzoKKyMKKyMJYm94MVswXSAgPSBBQ1NfVUxDT1JORVIKKyMJYm94MVsxXSAgPSBBQ1NfSExJTkUJCisjCWJveDFbMl0gID0gQUNTX1VSQ09STkVSCisjCWJveDFbM10gID0gQUNTX1ZMSU5FCisjCWJveDFbNF0gID0gQUNTX0xSQ09STkVSCisjCWJveDFbNV0gID0gQUNTX0xMQ09STkVSCisjCWJveDFbNl0gID0gQUNTX1RURUUKKyMJYm94MVs3XSAgPSBBQ1NfUlRFRQorIwlib3gxWzhdICA9IEFDU19CVEVFCisjCWJveDFbOV0gID0gQUNTX0xURUUKKyMJYm94MVsxMF0gPSBBQ1NfUExVUworIworIyBUaGUgYm94MiBjaGFyYWN0ZXJzIGFyZSB0aGUgZG91YmxlLWxpbmUgdmVyc2lvbnMgb2YgdGhlc2UgZm9ybXMgZ3JhcGhpY3MuCisjCitib3hfY2hhcnNfMQkJCWJveDEJc3RyCWJ4CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgcHJpbWFyeSBzZXQKKyNib3hfY2hhcnNfMgkJCWJveDIJc3RyCWJ5CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgc2Vjb25kYXJ5IHNldAorI2JveF9hdHRyXzEJCQliYXR0MQlzdHIJQngJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gxCisjYm94X2F0dHJfMgkJCWJhdHQyCXN0cglCeQktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDIKKyNjb2xvcl9iZ18wCQkJY29sYjAJc3RyCWQwCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAwCisjY29sb3JfYmdfMQkJCWNvbGIxCXN0cglkMQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMQorI2NvbG9yX2JnXzIJCQljb2xiMglzdHIJZDIJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDIKKyNjb2xvcl9iZ18zCQkJY29sYjMJc3RyCWQzCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAzCisjY29sb3JfYmdfNAkJCWNvbGI0CXN0cglkNAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNAorI2NvbG9yX2JnXzUJCQljb2xiNQlzdHIJZDUJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDUKKyNjb2xvcl9iZ182CQkJY29sYjYJc3RyCWQ2CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA2CisjY29sb3JfYmdfNwkJCWNvbGI3CXN0cglkNwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNworI2NvbG9yX2ZnXzAJCQljb2xmMAlzdHIJYzAJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9mZ18xCQkJY29sZjEJc3RyCWMxCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAxCisjY29sb3JfZmdfMgkJCWNvbGYyCXN0cgljMgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMgorI2NvbG9yX2ZnXzMJCQljb2xmMwlzdHIJYzMJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9mZ180CQkJY29sZjQJc3RyCWM0CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA0CisjY29sb3JfZmdfNQkJCWNvbGY1CXN0cgljNQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNQorI2NvbG9yX2ZnXzYJCQljb2xmNglzdHIJYzYJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9mZ183CQkJY29sZjcJc3RyCWM3CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA3CisjZm9udF8wCQkJCWZvbnQwCXN0cglmMAktCQktCS0tLS0tCXNlbGVjdCBmb250IDAKKyNmb250XzEJCQkJZm9udDEJc3RyCWYxCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMQorI2ZvbnRfMgkJCQlmb250MglzdHIJZjIJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAyCisjZm9udF8zCQkJCWZvbnQzCXN0cglmMwktCQktCS0tLS0tCXNlbGVjdCBmb250IDMKKyNmb250XzQJCQkJZm9udDQJc3RyCWY0CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNAorI2ZvbnRfNQkJCQlmb250NQlzdHIJZjUJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA1CisjZm9udF82CQkJCWZvbnQ2CXN0cglmNgktCQktCS0tLS1LCXNlbGVjdCBmb250IDYKKyNmb250XzcJCQkJZm9udDcJc3RyCWY3CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNworI2tleV9iYWNrX3RhYgkJCWtidGFiCXN0cglrMAktCQktCS0tLS0tCWJhY2t0YWIga2V5Cisja2V5X2RvCQkJCWtkbwlzdHIJa2kJLQkJLQktLS0tSwlkbyByZXF1ZXN0IGtleQorI2tleV9jb21tYW5kCQkJa2NtZAlzdHIJa2QJLQkJLQktLS0tSwljb21tYW5kLXJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmRfcGFuZQkJa2NwbglzdHIJa1cJLQkJLQktLS0tSwljb21tYW5kLXBhbmUga2V5Cisja2V5X2VuZAkJCWtlbmQJc3RyCWt3CS0JCS0JLS0tLS0JZW5kIGtleQorI2tleV9oZWxwCQkJa2hscAlzdHIJa3EJLQkJLQktLS0tLQloZWxwIGtleQorI2tleV9uZXdsaW5lCQkJa25sCXN0cglubAktCQktCS0tLS1LCW5ld2xpbmUga2V5Cisja2V5X25leHRfcGFuZQkJCWtucG4Jc3RyCWt2CS0JCS0JLS0tLUsJbmV4dC1wYW5lIGtleQorI2tleV9wcmV2X2NtZAkJCWtwcG4Jc3RyCWtwCS0JCS0JLS0tLUsJcHJldmlvdXMtY29tbWFuZCBrZXkKKyNrZXlfcHJldl9wYW5lCQkJa3BwbglzdHIJa1YJLQkJLQktLS0tSwlwcmV2aW91cy1wYW5lIGtleQorI2tleV9xdWl0CQkJa3F1aXQJc3RyCWtRCS0JCS0JLS0tLUsJcXVpdCBrZXkKKyNrZXlfc2VsZWN0CQkJa3NlbAlzdHIJa1UJLQkJLQktLS0tLQlzZWxlY3Qga2V5Cisja2V5X3Njcm9sbF9sZWZ0CQlrc2NsCXN0cglregktCQktCS0tLS1LCXNjcm9sbCBsZWZ0Cisja2V5X3Njcm9sbF9yaWdodAkJa3NjcglzdHIJa1oJLQkJLQktLS0tSwlzY3JvbGwgcmlnaHQKKyNrZXlfdGFiCQkJa3RhYglzdHIJa28JLQkJLQktLS0tSwl0YWIga2V5Cisja2V5X3NtYXBfaW4xCQkJa21wZjEJc3RyCUt2CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgaW5wdXQKKyNrZXlfc21hcF9vdXQxCQkJa21wdDEJc3RyCUtWCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgb3V0cHV0Cisja2V5X3NtYXBfaW4yCQkJa21wZjIJc3RyCUt3CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgaW5wdXQKKyNrZXlfc21hcF9vdXQyCQkJa21wdDIJc3RyCUtXCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgb3V0cHV0Cisja2V5X3NtYXBfaW4zCQkJa21wZjMJc3RyCUt4CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgaW5wdXQKKyNrZXlfc21hcF9vdXQzCQkJa21wdDMJc3RyCUtYCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgb3V0cHV0Cisja2V5X3NtYXBfaW40CQkJa21wZjQJc3RyCUt5CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgaW5wdXQKKyNrZXlfc21hcF9vdXQ0CQkJa21wdDQJc3RyCUtZCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgb3V0cHV0Cisja2V5X3NtYXBfaW41CQkJa21wZjUJc3RyCUt6CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgaW5wdXQKKyNrZXlfc21hcF9vdXQ1CQkJa21wdDUJc3RyCUtaCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgb3V0cHV0CisjYXBwbF9kZWZpbmVkX3N0cgkJYXBzdHIJc3RyCXphCS0JCS0JLS0tLUsJYXBwbGljYXRpb24tZGVmaW5lZCBzdHJpbmcKKyMgVGhlIGtleV9zbWFwX2luWzY3ODldIGFuZCBrZXlfc21hcF9vdXRbNjc4OV0gY2FwYWJpbGl0aWVzIGFyZW4ndCBkZXNjcmliZWQgaW4KKyMgdGhlIElCTSBtYW51YWwgcGFnZXMsIHNvIHRoZSBjYXAgbmFtZSBzdHJpbmdzIGFyZSBndWVzc2VzLiAgVGhlIHRlcm1pbmZvCisjIG5hbWVzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHJpZ2h0LCB0aGUgdGVybWNhcCBvbmVzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuCisja2V5X3NtYXBfaW42CQkJa21wZjYJc3RyCWshCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgaW5wdXQKKyNrZXlfc21hcF9vdXQ2CQkJa21wdDYJc3RyCUtACS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgb3V0cHV0Cisja2V5X3NtYXBfaW43CQkJa21wZjcJc3RyCWsjCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgaW5wdXQKKyNrZXlfc21hcF9vdXQ3CQkJa21wdDcJc3RyCUskCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgb3V0cHV0Cisja2V5X3NtYXBfaW44CQkJa21wZjgJc3RyCWslCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggaW5wdXQKKyNrZXlfc21hcF9vdXQ4CQkJa21wdDgJc3RyCUteCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggb3V0cHV0Cisja2V5X3NtYXBfaW45CQkJa21wZjkJc3RyCWsmCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgaW5wdXQKKyNrZXlfc21hcF9vdXQ5CQkJa21wdDkJc3RyCUsqCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgb3V0cHV0CisjIFVuZG9jdW1lbnRlZCBjYXBhYmlsaXRpZXMgZW5kIGhlcmUKKyNrZXlfc2YxCQkJa3NmMQlzdHIJUzEJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxCisja2V5X3NmMgkJCWtzZjIJc3RyCVMyCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMgorI2tleV9zZjMJCQlrc2YzCXN0cglTMwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDMKKyNrZXlfc2Y0CQkJa3NmNAlzdHIJUzQJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA0Cisja2V5X3NmNQkJCWtzZjUJc3RyCVM1CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNQorI2tleV9zZjYJCQlrc2Y2CXN0cglTNgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDYKKyNrZXlfc2Y3CQkJa3NmNwlzdHIJUzcJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA3Cisja2V5X3NmOAkJCWtzZjgJc3RyCVM4CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOAorI2tleV9zZjkJCQlrc2Y5CXN0cglTOQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDkKKyNrZXlfc2YxMAkJCWtzZjEwCXN0cglTQQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEwCisjIEFJWCB2ZXJzaW9uIDMgZG9jdW1lbnRzIGRpZmZlcmVudCBjb2RlcyBmb3IgRjExLCBGMTIgYW5kIGRvZXMgbm90IG1lbnRpb24KKyMgRjEzLUY2NC4gIEFJWCB2ZXJzaW9uIDQgdXNlcyB0aGUgc2FtZSBuYW1pbmcgZm9yIEYwLUY2MyBhcyBhYm92ZS4KKyNrZXlfZjExCQkJa2YxMQlzdHIJazwJLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTEKKyNrZXlfZjEyCQkJa2YxMglzdHIJaz4JLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTIKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyNrZXlfYWN0aW9uCQkJa2FjdAlzdHIJa0oJLQkJLQktLS0tSwlzZW50IGJ5IGFjdGlvbiBrZXkKKyMgVGhlIElCTSBkb2NzIHNheSB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGZvciB0YWJsZS1kcmF3aW5nLCBhbmQgYXJlCisjIHZhbGlkIG9ubHkgZm9yIGFpeHRlcm0gZGVzY3JpcHRpb25zLgorI2VudGVyX3RvcGxpbmVfbW9kZQkJdG9wbAlzdHIJdHAJLQkJLQktLS0tSwlzdGFydCB0b3AtbGluZSBtb2RlCisjZW50ZXJfYm90dG9tX21vZGUJCWJ0bWwJc3RyCWJtCS0JCS0JLS0tLUsJc3RhcnQgYm90dG9tLWxpbmUgbW9kZQorI2VudGVyX3J2ZXJ0X21vZGUJCXJ2ZXJ0CXN0cglydgktCQktCS0tLS1LCXN0YXJ0IHJpZ2h0LXZlcnRpY2FsIG1vZGUKKyNlbnRlcl9sdmVydF9tb2RlCQlsdmVydAlzdHIJbHYJLQkJLQktLS0tSwlzdGFydCBsZWZ0LXZlcnRpY2FsIG1vZGUKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEFMSUFTIERFQ0xBUkFUSU9OUworIworIyBIZXJlIHdlIHNldCB1cCBhbGlhc2VzIGZvciB0cmFuc2xhdGluZyBleHRlbnNpb25zIGludG8gc3RhbmRhcmQgdGVybWluZm8uCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtY2FwIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBCU0QgYWxpYXNlczoKKyMKKyMgVGhpcyBpcyBhIGNvbW1vbiBlcnJvciBpbiBtYW55IHRlcm1jYXAgZmlsZXMuICBXZSdsbCBnZXQgbm90aWZpZWQgZHVyaW5nCisjIHRyYW5zbGF0aW9uIHdoZW4gdGhpcyAob3IgYW55IG90aGVyIGFsaWFzKSBmaXJlcy4KKyMKK2NhcGFsaWFzCXNiCXNyCUJTRAlzY3JvbGwgdGV4dCBkb3duCisjCisjIEFUJlQgZXh0ZW5zaW9uczoKKyMKKyMgVGhlIG9sZCBBVCZUIDU0MTAsIDU0MjAsIDU0MjUsIHBjNjMwMHBsdXMsIDYxMCwgYW5kIHM0IGVudHJpZXMgdXNlZCBhIHNldCBvZgorIyBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMuICBJdHMgc2lnbmF0dXJlIGlzIHRoZSBLTSBjYXBhYmlsaXR5LCB1c2VkIHRvIG5hbWUKKyMgc29tZSBzb3J0IG9mIGtleW1hcCBmaWxlLiAgRUUsIEJPLCBDSSwgQ1YsIFhTLCBEUywgRkwgYW5kIEZFIGFyZSBpbiB0aGlzCisjIHNldC4gIENvbW1lbnRzIGluIHRoZSBvcmlnaW5hbCwgYW5kIGEgbGl0dGxlIGNyb3NzLWNoZWNraW5nIHdpdGggb3RoZXIgQVQmVAorIyBkb2N1bWVudGF0aW9uLCBzZWVtIHRvIGVzdGFibGlzaCB0aGUgZm9sbG93aW5nIG1hcHBpbmdzOgorIworY2FwYWxpYXMJQk8JbXIJQVQmVAllbnRlcl9yZXZlcnNlX21vZGUKK2NhcGFsaWFzCUNJCXZpCUFUJlQJY3Vyc29yX2ludmlzaWJsZQorY2FwYWxpYXMJQ1YJdmUJQVQmVAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlEUwltaAlBVCZUCWVudGVyX2RpbV9tb2RlCisjY2FwYWxpYXMJRUUJbWUJQVQmVAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJRkUJTEYJQVQmVAlsYWJlbF9vbgorY2FwYWxpYXMJRkwJTE8JQVQmVAlsYWJlbF9vZmYKK2NhcGFsaWFzCVhTCW1rCUFUJlQJZW50ZXJfc2VjdXJlX21vZGUKKyMKKyMgV2UgY29tbWVudCBvdXQgRUUgYmVjYXVzZSB0aGUgY29uZmxpY3RpbmcgWEVOSVggRUUgaXMgbW9yZSBjb21tb24gaW4gCisjIG9sZCBlbnRyaWVzLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBUaGVzZSBhcmUgdGhlIG9uZXMgd2Uga25vdyBob3cgdG8gdHJhbnNsYXRlIGRpcmVjdGx5OgorIworY2FwYWxpYXMJRUUJbWgJWEVOSVgJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUdFCWFlCVhFTklYCWV4aXRfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJR1MJYXMJWEVOSVgJZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJQ0YJdmkJWEVOSVgJY3Vyc29yX2ludmlzCitjYXBhbGlhcwlDTwl2ZQlYRU5JWAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlFTglANwlYRU5JWAlrZXlfZW5kCitjYXBhbGlhcwlITQlraAlYRU5JWAlrZXlfaG9tZQorY2FwYWxpYXMJTEQJa0wJWEVOSVgJa2V5X2RsCitjYXBhbGlhcwlQRAlrTglYRU5JWAlrZXlfbnBhZ2UKK2NhcGFsaWFzCVBOCXBvCVhFTklYCXBydHJfb2ZmCitjYXBhbGlhcwlQUwlwZglYRU5JWAlwcnRyX29uCitjYXBhbGlhcwlQVQlrUAlYRU5JWAlrZXlfcHBhZ2UKK2NhcGFsaWFzCVJUCUA4CVhFTklYCWtlbnQKK2NhcGFsaWFzCVVQCWt1CVhFTklYCWtjdXUxCitjYXBhbGlhcwlHNglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VTENPUk5FUgorY2FwYWxpYXMJRzcJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTExDT1JORVIKK2NhcGFsaWFzCUc1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VSQ09STkVSCitjYXBhbGlhcwlHOAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MUkNPUk5FUgorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFRFRQorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUlRFRQorY2FwYWxpYXMJR3UJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfQlRFRQorY2FwYWxpYXMJR2QJSUdOT1JFCVhFTklYCWRvdWJsZSBBQ1NfVFRFRQorY2FwYWxpYXMJR2gJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfSExJTkUKK2NhcGFsaWFzCUd2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1ZMSU5FCitjYXBhbGlhcwlHYwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19QTFVTCitjYXBhbGlhcwlHRwlJR05PUkUJWEVOSVgJYWNzLWdsaXRjaAorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCWtxCSUxCUlCTQlrZXlfaGVscAorIworIyBJcmlzIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlIUwltaAlJUklTCWVudGVyX2RpbV9tb2RlCisjCisjIFRla3Ryb25peCBleHRlbnNpb25zOgorIworY2FwYWxpYXMJS0EJazsJVGVrCWtleV9mMTAKK2NhcGFsaWFzCUtCCUYxCVRlawlrZXlfZjExCitjYXBhbGlhcwlLQwlGMglUZWsJa2V5X2YxMgorY2FwYWxpYXMJS0QJRjMJVGVrCWtleV9mMTMKK2NhcGFsaWFzCUtFCUY0CVRlawlrZXlfZjE0CitjYXBhbGlhcwlLRglGNQlUZWsJa2V5X2YxNQorY2FwYWxpYXMJQkMJU2IJVGVrCXNldF9iYWNrZ3JvdW5kCitjYXBhbGlhcwlGQwlTZglUZWsJc2V0X2ZvcmVncm91bmQKKyMKKyMgVGhlcmUgYXJlIGFsc28gdGhlIGZvbGxvd2luZzoKKyMKKyMJWEVOSVgJWEVOSVggdmFyaWFibGUgbmFtZQluYW1lIGNsYXNoIHdpdGggdGVybWluZm8/CisjCS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwlDTAlrZXlfY2hhcl9sZWZ0CisjCUNSCWtleV9jaGFyX3JpZ2h0CisjCUNXCWtleV9jaGFuZ2Vfd2luZG93CisjCUhQCT8/CisjCUxGCWtleV9saW5lZmVlZCAJCWxhYmVsX29mZgorIwlOVQlrZXlfbmV4dF91bmxvY2tlZF9jZWxsCisjCVBMCT8/CisjCVBSCT8/CisjCVJDCWtleV9yZWNhbGMJCXJlbW92ZV9jbG9jaworIwlSRglrZXlfdG9nZ2xlX3JlZgkJcmVxX2Zvcl9pbnB1dAorIwlXTAlrZXlfd29yZF9sZWZ0CisjCVdSCWtleV93b3JkX3JpZ2h0CisjCisjIElmIHlvdSBrbm93IHdoYXQgYW55IG9mIHRoZSBxdWVzdGlvbi1tYXJrZWQgb25lcyBtZWFuLCBwbGVhc2UgdGVsbCB1cy4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWluZm8gYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitpbmZvYWxpYXMJZm9udDAJczBkcwlJQk0Jc2V0MF9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDEJczFkcwlJQk0Jc2V0MV9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDIJczJkcwlJQk0Jc2V0Ml9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDMJczNkcwlJQk0Jc2V0M19kZXNfc2VxCitpbmZvYWxpYXMJa2J0YWIJa2NidAlJQk0Ja2V5X2JhY2t0YWIKK2luZm9hbGlhcwlrc2VsCWtzbHQJSUJNCWtleV9zZWxlY3QKKyMKKyMgU29tZSBvdGhlcnMgYXJlIGlkZW50aWNhbCB0byBTVnI0L1hQRzQgY2FwYWJpbGl0aWVzLCBpbiBwYXJ0aWN1bGFyOgorIyBrY21kLCBrZW5kLCBraGxwLCBhbmQga2YxMS4uLmtmNjMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisjIExvY2FsIFZhcmlhYmxlczoKKyMgY2FzZS1mb2xkLXNlYXJjaDpuaWwKKyMgdHJ1bmNhdGUtbGluZXM6dAorIyBFbmQ6CmRpZmYgLS1naXQgYS9pbmNsdWRlL01LaGFzaHNpemUuc2ggYi9pbmNsdWRlL01LaGFzaHNpemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTFiMzExMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvTUtoYXNoc2l6ZS5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBNS2hhc2hzaXplLnNoLHYgMS43IDIwMDYvMTAvMjIgMDA6NDU6MzkgdG9tIEV4cCAkCisjCisjIE1LaGFzaHNpemUuc2ggLS0tIGdlbmVyYXRlIHNpemUgaW5jbHVkZSBmb3IgaGFzaCBmdW5jdGlvbnMKKyMKK2VjaG8gIi8qIgorZWNobyAiICogaGFzaHNpemUuaCAtLSBoYXNoIGFuZCB0b2tlbiB0YWJsZSBjb25zdGFudHMiCitlY2hvICIgKi8iCisKK0NBUFM9IiR7MS1DYXBzfSIKK1RBQlNJWkU9YGdyZXAgLXYgJ15bICNdJyAkQ0FQUyB8IGdyZXAgLXYgIl4kIiB8IGdyZXAgLXYgIl5jYXBhbGlhcyJ8IGdyZXAgLXYgIl5pbmZvYWxpYXMiIHwgd2MgLWxgCisKK2VjaG8gIiIKK2VjaG8gIiNkZWZpbmUgQ0FQVEFCU0laRQkke1RBQlNJWkV9IgorZWNobyAiI2RlZmluZSBIQVNIVEFCU0laRQkoJHtUQUJTSVpFfSAqIDIpIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9NS2tleV9kZWZzLnNoIGIvaW5jbHVkZS9NS2tleV9kZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzY2I0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL01La2V5X2RlZnMuc2gKQEAgLTAsMCArMSwxODIgQEAKKyMhIC9iaW4vc2gKKyMgJElkOiBNS2tleV9kZWZzLnNoLHYgMS4xNCAyMDAzLzEyLzA2IDE3OjEwOjA5IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBNS2tleV9kZWZzLnNoIC0tIGdlbmVyYXRlIGZ1bmN0aW9uLWtleSBkZWZpbml0aW9ucyBmb3IgY3Vyc2VzLmgKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDEKKyMKKyMgRXh0cmFjdCBmdW5jdGlvbi1rZXkgZGVmaW5pdGlvbnMgZnJvbSB0aGUgQ2FwcyBmaWxlCisjCis6ICR7QVdLLWF3a30KK0RBVEE9JHsxLUNhcHN9CisKK2RhdGE9ZGF0YSQkCitwYXNzMT1wYXNzMV8kJAorcGFzczI9cGFzczJfJCQKK3Bhc3MzPXBhc3MzXyQkCitwYXNzND1wYXNzNF8kJAordHJhcCAncm0gLWYgJGRhdGEgcGFzc1sxMjM0XV8kJCcgMCAxIDIgNSAxNQorCisjIGNoYW5nZSByZXBlYXRlZCB0YWJzICh1c2VkIGZvciByZWFkYWJpbGl0eSkgdG8gc2luZ2xlIHRhYnMgKG5lZWRlZCB0byBtYWtlCisjIGF3ayBzZWUgdGhlIHJpZ2h0IGZpZWxkIGFsaWdubWVudCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5zKToKK2lmIHNvcnQgLWsgNiAkREFUQSA+JGRhdGEgMj4vZGV2L251bGwKK3RoZW4KKwkjIFBPU0lYCisJc2VkIC1lICdzL1sJXVsJXSovCS9nJyA8ICREQVRBIHxzb3J0IC1uIC1rIDYgPiRkYXRhCitlbGlmIHNvcnQgLW4gKzUgJERBVEEgPiRkYXRhIDI+L2Rldi9udWxsCit0aGVuCisJIyBTdW5PUyAoYW5kIFNWcjQsIG1hcmtlZCBhcyBvYnNvbGV0ZSBidXQgc3RpbGwgcmVjb2duaXplZCkKKwlzZWQgLWUgJ3MvWwldWwldKi8JL2cnIDwgJERBVEEgfHNvcnQgLW4gKzUgPiRkYXRhCitlbHNlCisJZWNobyAiWW91ciBzb3J0IHV0aWxpdHkgaXMgYnJva2VuLiAgUGxlYXNlIGluc3RhbGwgb25lIHRoYXQgd29ya3MuIiA+JjIKKwlleGl0IDEKK2ZpCisKKyMgYWRkIGtleXMgdGhhdCB3ZSBnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5OgorY2F0ID4+JGRhdGEgPDxFT0YKK2tleV9yZXNpemUJa3IxCXN0cglSMQlLRVlfUkVTSVpFCSsJLS0tLS0JVGVybWluYWwgcmVzaXplIGV2ZW50CitrZXlfZXZlbnQJa3YxCXN0cglWMQlLRVlfRVZFTlQJKwktLS0tLQlXZSB3ZXJlIGludGVycnVwdGVkIGJ5IGFuIGV2ZW50CitFT0YKKworY2F0IDw8RU9GCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgd2VyZSBnZW5lcmF0ZWQgYnkgJDAgJERBVEEKKyAqLworRU9GCisKKyMgS0VZX1JFU0VUCittYXhrZXk9MzQ1CisKK2ZvciBwYXNzIGluIDEgMiAzIDQKK2RvCisKK291dHB1dD1wYXNzJHtwYXNzfV8kJAorCiske0FXSy1hd2t9ID4kb3V0cHV0IDwkZGF0YSAnCitmdW5jdGlvbiBwcmludF9jb2xzKHRleHQsY29scykgeworCXByaW50ZiAiJXMiLCB0ZXh0CisJbGVuID0gbGVuZ3RoKHRleHQpOworCXdoaWxlIChsZW4gPCBjb2xzKSB7CisJCXByaW50ZiAiCSIKKwkJbGVuICs9IDg7CisJfQorfQorZnVuY3Rpb24gZGVjb2RlKGtleWNvZGUpIHsKKwlyZXN1bHQgPSAwOworCWlmIChzdWJzdHIoa2V5Y29kZSwgMSwgMikgPT0gIjB4IikgeworCQlkaWdpdHM9IjAxMjM0NTY3ODlhYmNkZWYiOworCX0gZWxzZSBpZiAoc3Vic3RyKGtleWNvZGUsIDEsIDEpID09ICIwIikgeworCQlkaWdpdHM9IjAxMjM0NTY3IjsKKwl9IGVsc2UgeworCQlkaWdpdHM9IjAxMjM0NTY3ODkiOworCX0KKwl3aGlsZSAobGVuZ3RoKGtleWNvZGUpICE9IDApIHsKKwkJZGlnaXQ9c3Vic3RyKGtleWNvZGUsIDEsIDEpOworCQlrZXljb2RlPXN1YnN0cihrZXljb2RlLCAyKTsKKwkJcmVzdWx0ID0gcmVzdWx0ICogbGVuZ3RoKGRpZ2l0cykgKyBpbmRleChkaWdpdHMsIGRpZ2l0KSAtIDE7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK0JFR0lOCXsKKwltYXhrZXk9JyRtYXhrZXknOworCXBhc3M9JyRwYXNzJzsKKwlrZXlfbWF4PTE7CisJYml0cz0xOworCXdoaWxlIChrZXlfbWF4IDwgbWF4a2V5KSB7CisJCWJpdHMgPSBiaXRzICsgMTsKKwkJa2V5X21heCA9IChrZXlfbWF4ICogMikgKyAxOworCX0KKwlvY3RhbF9mbXQgPSBzcHJpbnRmICgiJSUwJWRvIiwgKGJpdHMgKyAyKSAvIDMgKyAxKTsKK30KKworL14kLwkJe25leHQ7fQorL14jLwkJe25leHQ7fQorL15jYXBhbGlhcy8Je25leHQ7fQorL15pbmZvYWxpYXMvCXtuZXh0O30KKworJDUgIT0gIi0iICYmICQ2ICE9ICItIiB7CisJCWlmICgkNiA9PSAiKyIpIHsKKwkJCWlmIChwYXNzID09IDEgfHwgcGFzcyA9PSAyKQorCQkJCW5leHQ7CisJCQl0aGlza2V5PW1heGtleSArIDE7CisJCX0gZWxzZSB7CisJCQlpZiAocGFzcyA9PSAzKQorCQkJCW5leHQ7CisJCQl0aGlza2V5PWRlY29kZSgkNik7CisJCX0KKwkJaWYgKHRoaXNrZXkgPiBtYXhrZXkpCisJCQltYXhrZXkgPSB0aGlza2V5OworCQlpZiAocGFzcyA9PSAyIHx8IHBhc3MgPT0gMykgeworCQkJc2hvd2tleT1zcHJpbnRmKG9jdGFsX2ZtdCwgdGhpc2tleSk7CisJCQlpZiAoJDUgPT0gIktFWV9GKDApIiApIHsKKwkJCQlwcmludGYgIiNkZWZpbmUgIgorCQkJCXByaW50X2NvbHMoIktFWV9GMCIsIDE2KTsKKwkJCQlwcmludF9jb2xzKHNob3drZXksIDE2KTsKKwkJCQlwcmludCAiLyogRnVuY3Rpb24ga2V5cy4gIFNwYWNlIGZvciA2NCAqLyI7CisJCQkJcHJpbnRmICIjZGVmaW5lICIKKwkJCQlwcmludF9jb2xzKCJLRVlfRihuKSIsIDE2KTsKKwkJCQlwcmludF9jb2xzKCIoS0VZX0YwKyhuKSkiLCAxNik7CisJCQkJcHJpbnQgIi8qIFZhbHVlIG9mIGZ1bmN0aW9uIGtleSBuICovIgorCQkJfSBlbHNlIHsKKwkJCQlwcmludGYgIiNkZWZpbmUgIgorCQkJCXByaW50X2NvbHMoJDUsIDE2KTsKKwkJCQlwcmludF9jb2xzKHNob3drZXksIDE2KTsKKwkJCQlwcmludGYgIi8qIgorCQkJCWZvciAoaSA9IDg7IGkgPD0gTkY7IGkrKykKKwkJCQkJcHJpbnRmICIgJXMiLCAkaQorCQkJCXByaW50ICIgKi8iCisJCQl9CisJCX0KKwl9CitFTkQJeworCQlpZiAocGFzcyA9PSAxKSB7CisJCQlwcmludCBtYXhrZXk7CisJCX0gZWxzZSBpZiAocGFzcyA9PSA0KSB7CisJCQlwcmludCAiIjsKKwkJCXByaW50ZiAiI2RlZmluZSAiOworCQkJcHJpbnRfY29scygiS0VZX01BWCIsIDE2KTsKKwkJCXJlc3VsdCA9IHNwcmludGYgKG9jdGFsX2ZtdCwga2V5X21heCk7CisJCQlwcmludF9jb2xzKHJlc3VsdCwgMTYpOworCQkJcHJpbnRmICIvKiBNYXhpbXVtIGtleSB2YWx1ZSBpcyAiOworCQkJcHJpbnRmIG9jdGFsX2ZtdCwgbWF4a2V5OworCQkJcHJpbnQgIiAqLyI7CisJCX0KKwl9CisnCitpZiB0ZXN0ICRwYXNzID0gMSA7IHRoZW4KKwltYXhrZXk9YGNhdCAkcGFzczFgCitmaQorCitkb25lCisKK2NhdCAkcGFzczIKK2NhdCAkcGFzczMKK2NhdCAkcGFzczQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvTUtuY3Vyc2VzX2RlZi5zaCBiL2luY2x1ZGUvTUtuY3Vyc2VzX2RlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWFjODY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9NS25jdXJzZXNfZGVmLnNoCkBAIC0wLDAgKzEsODAgQEAKKyMhIC9iaW4vc2gKKyMgJElkOiBNS25jdXJzZXNfZGVmLnNoLHYgMS4yIDIwMDMvMTAvMjUgMTY6MTk6NDYgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIE1LbmN1cnNlc19kZWYuc2ggLS0gZ2VuZXJhdGUgZmFsbGJhY2sgZGVmaW5pdGlvbnMgZm9yIG5jdXJzZXNfY2ZnLmgKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDAKKyMKKyMgR2l2ZW4gdGhlIGNob2ljZSBiZXR3ZWVuIGNvbnN0cnVjdHMgc3VjaCBhcworIworIwkjaWYgZGVmaW5lZChmb28pICYmIGZvbworIwkjaWYgZm9vCisjCisjIHdlIGNob3NlIHRoZSBsYXR0ZXIuICBJdCBpcyBndWFyYW50ZWVkIGJ5IHRoZSBsYW5ndWFnZSBzdGFuZGFyZCwgYW5kIHRoZXJlCisjIGFwcGVhciB0byBiZSBubyBicm9rZW4gY29tcGlsZXJzIHRoYXQgZG8gbm90IGhvbm9yIHRoYXQgZGV0YWlsLiAgQnV0IHNvbWUKKyMgcGVvcGxlIHdhbnQgdG8gdXNlIGdjYydzIC1XdW5kZWYgb3B0aW9uIChjb3JyZXNwb25kaW5nIHRvIG9uZSBvZiB0aGUgbGVzcworIyB1c2VmdWwgZmVhdHVyZXMgaW4gV2F0Y29tJ3MgY29tcGlsZXIpIHRvIGNoZWNrIGZvciBtaXNzcGVsbGluZ3MuICBTbyB3ZQorIyBnZW5lcmF0ZSBhIHNldCBvZiBmYWxsYmFjayBkZWZpbml0aW9ucyB0byBxdWlldCB0aGUgd2FybmluZ3Mgd2l0aG91dCBtYWtpbmcKKyMgdGhlIGNvZGUgdWdseS4KKyMKK0RFRlM9IiR7MS1uY3Vyc2VzX2RlZnN9IgorY2F0IDw8RU9GCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSAkMAorICovCisKKyNpZm5kZWYgTkNfREVGSU5FX0gKKyNkZWZpbmUgTkNfREVGSU5FX0ggMQorCitFT0YKKworJHtBV0stYXdrfSA8JERFRlMgJworIS9eW0AjXS8geworCWlmICggTkYgPT0gMSApCisJeworCQlwcmludCAiI2lmbmRlZiIsICQxCisJCXByaW50ICIjZGVmaW5lIiwgJDEsICIwIgorCQlwcmludCAiI2VuZGlmIgorCQlwcmludCAiIgorCX0gZWxzZSBpZiAoIE5GICE9IDAgKSB7CisJCXByaW50ICIjaWZuZGVmIiwgJDEKKwkJcHJpbnRmICIjZGVmaW5lIgorCQlmb3IgKG4gPSAxOyBuIDw9IE5GOyBuKyspIHsKKwkJCXByaW50ZiAiICVzIiwgJG4KKwkJfQorCQlwcmludCAiIgorCQlwcmludCAiI2VuZGlmIgorCQlwcmludCAiIgorCX0KK30KK0VORAl7CitwcmludCAiI2VuZGlmIC8qIE5DX0RFRklORV9IICovIgorCX0KKycKZGlmZiAtLWdpdCBhL2luY2x1ZGUvTUtwYXJhbWV0cml6ZWQuc2ggYi9pbmNsdWRlL01LcGFyYW1ldHJpemVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4MjVjODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL01LcGFyYW1ldHJpemVkLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IE1LcGFyYW1ldHJpemVkLnNoLHYgMS42IDIwMDYvMDQvMjIgMjE6MzY6MTYgdG9tIEV4cCAkCisjCisjIE1LcGFyYW1ldHJpemVkLnNoIC0tIGdlbmVyYXRlIGluZGlyZWN0aW9uIHZlY3RvcnMgZm9yIHZhcmlvdXMgc29ydCBtZXRob2RzCisjCisjIFRoZSBvdXRwdXQgb2YgdGhpcyBzY3JpcHQgaXMgQyBzb3VyY2UgZm9yIGFuIGFycmF5IHNwZWNpZnlpbmcgd2hldGhlcgorIyB0ZXJtY2FwIHN0cmluZ3Mgc2hvdWxkIHVuZGVyZ28gcGFyYW1ldGVyIGFuZCBwYWRkaW5nIHRyYW5zbGF0aW9uLgorIworQ0FQUz0iJHsxLUNhcHN9IgorY2F0IDw8RU9GCisvKgorICogcGFyYW1ldHJpemVkLmggLS0tIGlzIGEgdGVybWNhcCBjYXBhYmlsaXR5IHBhcmFtZXRyaXplZD8KKyAqCisgKiBOb3RlOiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nIE1LcGFyYW1ldHJpemVkLnNoLCBkbyBub3QgZWRpdCBieSBoYW5kLgorICogQSB2YWx1ZSBvZiAtMSBpbiB0aGUgdGFibGUgbWVhbnMgc3VwcHJlc3MgYm90aCBwYWQgYW5kICUgdHJhbnNsYXRpb25zLgorICogQSB2YWx1ZSBvZiAwIGluIHRoZSB0YWJsZSBtZWFucyBkbyBwYWQgYnV0IG5vdCAlIHRyYW5zbGF0aW9ucy4KKyAqIEEgdmFsdWUgb2YgMSBpbiB0aGUgdGFibGUgbWVhbnMgZG8gYm90aCBwYWQgYW5kICUgdHJhbnNsYXRpb25zLgorICovCisKK3N0YXRpYyBzaG9ydCBjb25zdCBwYXJhbWV0cml6ZWRbXSA9IHsKK0VPRgorCisjIFdlIGRldGVjdCB3aGV0aGVyICUgdHJhbnNsYXRpb25zIHNob3VsZCBiZSBkb25lIGJ5IGxvb2tpbmcgZm9yICNbMC05XSBpbiB0aGUKKyMgZGVzY3JpcHRpb24gZmllbGQuICBXZSBwcmVzZW50bHkgc3VwcHJlc3MgcGFkZGluZyB0cmFuc2xhdGlvbiBvbmx5IGZvciB0aGUKKyMgWEVOSVggYWNzXyogY2FwYWJpbGl0aWVzLiAgTWF5YmUgc29tZWRheSB3ZSdsbCBkZWRpY2F0ZSBhIGZsYWcgZmllbGQgZm9yCisjIHRoaXMsIHRoYXQgd291bGQgYmUgY2xlYW5lci4uLi4KKworJHtBV0stYXdrfSA8JENBUFMgJworJDMgIT0gInN0ciIJe25leHQ7fQorJDEgfiAvXmFjc18vCXtwcmludCAiLTEsXHQvKiAiLCAkMiwgIiAqLyI7IGNvdW50Kys7IG5leHQ7fQorJDAgfiAvI1swLTldLwl7cHJpbnQgIjEsXHQvKiAiLCAkMiwgIiAqLyI7IGNvdW50Kys7IG5leHQ7fQorCQl7cHJpbnQgIjAsXHQvKiAiLCAkMiwgIiAqLyI7IGNvdW50Kys7fQorRU5ECQl7cHJpbnRmKCJ9IC8qICVkIGVudHJpZXMgKi87XG5cbiIsIGNvdW50KTt9CisnCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvTUt0ZXJtLmguYXdrLmluIGIvaW5jbHVkZS9NS3Rlcm0uaC5hd2suaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjMjA1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvTUt0ZXJtLmguYXdrLmluCkBAIC0wLDAgKzEsMzIwIEBACisjIHZpbGU6YXdrbW9kZQorQkVHSU4JCXsKKwkJICAgIHByaW50ICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisJCSAgICBwcmludCAgIiAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoiCisJCSAgICBwcmludCAgIiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKiIKKwkJICAgIHByaW50ICAiICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqIgorCQkgICAgcHJpbnQgICIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqIgorCQkgICAgcHJpbnQgICIgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoiCisJCSAgICBwcmludCAgIiAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKiIKKwkJICAgIHByaW50ICAiICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoiCisJCSAgICBwcmludCAgIiAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqIgorCQkgICAgcHJpbnQgICIgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKiIKKwkJICAgIHByaW50ICAiICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKiIKKwkJICAgIHByaW50ICAiICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoiCisJCSAgICBwcmludCAgIiAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyIKKwkJICAgIHByaW50ICAiLyogQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgICovIgorCQkgICAgcHJpbnQgICIvKiAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8iCisJCSAgICBwcmludCAgIi8qICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTUtb24gICAgICAgICAgICAgICAgICAqLyIKKwkJICAgIHByaW50ICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIi8qICRJZDogTUt0ZXJtLmguYXdrLmluLHYgMS41MCAyMDA4LzA1LzI0IDIzOjEzOjU5IHRvbSBFeHAgJCAqLyIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIvKiIKKwkJICAgIHByaW50ICAiKioJdGVybS5oIC0tIERlZmluaXRpb24gb2Ygc3RydWN0IHRlcm0iCisJCSAgICBwcmludCAgIiovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNpZm5kZWYgTkNVUlNFU19URVJNX0hfaW5jbCIKKwkJICAgIHByaW50ICAiI2RlZmluZSBOQ1VSU0VTX1RFUk1fSF9pbmNsIDEiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI3VuZGVmICBOQ1VSU0VTX1ZFUlNJT04iCisJCSAgICBwcmludCAgIiNkZWZpbmUgTkNVUlNFU19WRVJTSU9OIFwiQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQFwiIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNpbmNsdWRlIDxuY3Vyc2VzX2RsbC5oPiIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjaWZkZWYgX19jcGx1c3BsdXMiCisJCSAgICBwcmludCAgImV4dGVybiBcIkNcIiB7IgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiLyogTWFrZSB0aGlzIGZpbGUgc2VsZi1jb250YWluZWQgYnkgcHJvdmlkaW5nIGRlZmF1bHRzIGZvciB0aGUgSEFWRV9URVJNSU9bU11fSCIKKwkJICAgIHByaW50ICAiICogZGVmaW5pdGlvbiAoYmFzZWQgb24gdGhlIHN5c3RlbSBmb3Igd2hpY2ggdGhpcyB3YXMgY29uZmlndXJlZCkuIgorCQkgICAgcHJpbnQgICIgKi8iCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI3VuZGVmICBOQ1VSU0VTX0NPTlNUIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIE5DVVJTRVNfQ09OU1QgQE5DVVJTRVNfQ09OU1RAIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiN1bmRlZiAgTkNVUlNFU19TQk9PTCIKKwkJICAgIHByaW50ICAiI2RlZmluZSBOQ1VSU0VTX1NCT09MIEBOQ1VSU0VTX1NCT09MQCIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIE5DVVJTRVNfWE5BTUVTIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIE5DVVJTRVNfWE5BTUVTIEBOQ1VSU0VTX1hOQU1FU0AiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiLyogV2Ugd2lsbCB1c2UgdGhlc2Ugc3ltYm9scyB0byBoaWRlIGRpZmZlcmVuY2VzIGJldHdlZW4iCisJCSAgICBwcmludCAgIiAqIHRlcm1pb3MvdGVybWlvL3NndHR5YiBpbnRlcmZhY2VzLiIKKwkJICAgIHByaW50ICAiICovIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIFRUWSIKKwkJICAgIHByaW50ICAiI3VuZGVmICBTRVRfVFRZIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIEdFVF9UVFkiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiLyogQXNzdW1lIFBPU0lYIHRlcm1pbyBpZiB3ZSBoYXZlIHRoZSBoZWFkZXIgYW5kIGZ1bmN0aW9uICovIgorCQkgICAgcHJpbnQgICIvKiAjaWYgSEFWRV9URVJNSU9TX0ggJiYgSEFWRV9UQ0dFVEFUVFIgKi8iCisJCSAgICBwcmludCAgIiNpZiBASEFWRV9URVJNSU9TX0hAICYmIEBIQVZFX1RDR0VUQVRUUkAiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI3VuZGVmICBURVJNSU9TIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRFUk1JT1MgMSIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjaW5jbHVkZSA8dGVybWlvcy5oPiIKKwkJICAgIHByaW50ICAiI2RlZmluZSBUVFkgc3RydWN0IHRlcm1pb3MiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2Vsc2UgLyogIUhBVkVfVEVSTUlPU19IICovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIi8qICNpZiBIQVZFX1RFUk1JT19IICovIgorCQkgICAgcHJpbnQgICIjaWYgQEhBVkVfVEVSTUlPX0hAIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiN1bmRlZiAgVEVSTUlPUyIKKwkJICAgIHByaW50ICAiI2RlZmluZSBURVJNSU9TIDEiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2luY2x1ZGUgPHRlcm1pby5oPiIKKwkJICAgIHByaW50ICAiI2RlZmluZSBUVFkgc3RydWN0IHRlcm1pbyIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIvKiBBZGQgZGVmaW5pdGlvbnMgdG8gbWFrZSB0ZXJtaW8gbG9vayBsaWtlIHRlcm1pb3MuIgorCQkgICAgcHJpbnQgICIgKiBCdXQgaWZkZWYgaXQsIHNpbmNlIHRoZXJlIGFyZSBzb21lIGltcGxlbWVudGF0aW9ucyIKKwkJICAgIHByaW50ICAiICogdGhhdCB0cnkgdG8gZG8gdGhpcyBmb3IgdXMgaW4gYSBmYWtlIDx0ZXJtaW8uaD4uIgorCQkgICAgcHJpbnQgICIgKi8iCisJCSAgICBwcmludCAgIiNpZm5kZWYgVENTQU5PVyIKKwkJICAgIHByaW50ICAiI2RlZmluZSBUQ1NBTk9XIFRDU0VUQSIKKwkJICAgIHByaW50ICAiI2VuZGlmIgorCQkgICAgcHJpbnQgICIjaWZuZGVmIFRDU0FEUkFJTiIKKwkJICAgIHByaW50ICAiI2RlZmluZSBUQ1NBRFJBSU4gVENTRVRBVyIKKwkJICAgIHByaW50ICAiI2VuZGlmIgorCQkgICAgcHJpbnQgICIjaWZuZGVmIFRDU0FGTFVTSCIKKwkJICAgIHByaW50ICAiI2RlZmluZSBUQ1NBRkxVU0ggVENTRVRBRiIKKwkJICAgIHByaW50ICAiI2VuZGlmIgorCQkgICAgcHJpbnQgICIjaWZuZGVmIHRjc2V0YXR0ciIKKwkJICAgIHByaW50ICAiI2RlZmluZSB0Y3NldGF0dHIoZmQsIGNtZCwgYXJnKSBpb2N0bChmZCwgY21kLCBhcmcpIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgdGNnZXRhdHRyIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIHRjZ2V0YXR0cihmZCwgYXJnKSBpb2N0bChmZCwgVENHRVRBLCBhcmcpIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgY2ZnZXRvc3BlZWQiCisJCSAgICBwcmludCAgIiNkZWZpbmUgY2ZnZXRvc3BlZWQodCkgKCh0KS0+Y19jZmxhZyAmIENCQVVEKSIKKwkJICAgIHByaW50ICAiI2VuZGlmIgorCQkgICAgcHJpbnQgICIjaWZuZGVmIFRDSUZMVVNIICIKKwkJICAgIHByaW50ICAiI2RlZmluZSBUQ0lGTFVTSCAwIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgVENPRkxVU0ggIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRDT0ZMVVNIIDEiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiI2lmbmRlZiBUQ0lPRkxVU0ggIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRDSU9GTFVTSCAyIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgdGNmbHVzaCIKKwkJICAgIHByaW50ICAiI2RlZmluZSB0Y2ZsdXNoKGZkLCBhcmcpIGlvY3RsKGZkLCBUQ0ZMU0gsIGFyZykiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjZWxzZSAvKiAhSEFWRV9URVJNSU9fSCAqLyIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjdW5kZWYgVEVSTUlPUyIKKwkJICAgIHByaW50ICAiI2luY2x1ZGUgPHNndHR5Lmg+IgorCQkgICAgcHJpbnQgICIjaW5jbHVkZSA8c3lzL2lvY3RsLmg+IgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRUWSBzdHJ1Y3Qgc2d0dHliIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNlbmRpZiAvKiBIQVZFX1RFUk1JT19IICovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNlbmRpZiAvKiBIQVZFX1RFUk1JT1NfSCAqLyIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjaWZkZWYgVEVSTUlPUyIKKwkJICAgIHByaW50ICAiI2RlZmluZSBHRVRfVFRZKGZkLCBidWYpIHRjZ2V0YXR0cihmZCwgYnVmKSIKKwkJICAgIHByaW50ICAiI2RlZmluZSBTRVRfVFRZKGZkLCBidWYpIHRjc2V0YXR0cihmZCwgVENTQURSQUlOLCBidWYpIgorCQkgICAgcHJpbnQgICIjZWxzZSIKKwkJICAgIHByaW50ICAiI2RlZmluZSBHRVRfVFRZKGZkLCBidWYpIGd0dHkoZmQsIGJ1ZikiCisJCSAgICBwcmludCAgIiNkZWZpbmUgU0VUX1RUWShmZCwgYnVmKSBzdHR5KGZkLCBidWYpIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2RlZmluZSBOQU1FU0laRSAyNTYiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2RlZmluZSBDVVIgY3VyX3Rlcm0tPnR5cGUuIgorCQkgICAgcHJpbnQgICIiCisJCX0KKworJDIgPT0gIiUlLVNUT1AtSEVSRS0lJSIJeworCQkJcHJpbnQgICIiCisJCQlwcmludGYgIiNkZWZpbmUgQk9PTFdSSVRFICVkXG4iLCBCb29sQ291bnQKKwkJCXByaW50ZiAiI2RlZmluZSBOVU1XUklURSAgJWRcbiIsIE51bWJlckNvdW50CisJCQlwcmludGYgIiNkZWZpbmUgU1RSV1JJVEUgICVkXG4iLCBTdHJpbmdDb3VudAorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIi8qIG9sZGVyIHN5bm9ueW1zIGZvciBzb21lIGNhcGFiaWxpdGllcyAqLyIKKwkJCXByaW50ICAiI2RlZmluZSBiZWVoaXZlX2dsaXRjaAlub19lc2NfY3RsYyIKKwkJCXByaW50ICAiI2RlZmluZSB0ZWxlcmF5X2dsaXRjaAlkZXN0X3RhYnNfbWFnaWNfc21zbyIKKwkJCXByaW50ICAiI2RlZmluZSBtaWNyb19jaGFyX3NpemUgbWljcm9fY29sX3NpemUiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2lmZGVmIF9fSU5URVJOQUxfQ0FQU19WSVNJQkxFIgorCQl9CisKKy9eIy8JCXtuZXh0O30KKworJDEgPT0gImFjc19jaGFycyIJe2Fjc2luZGV4ID0gU3RyaW5nQ291bnR9CisKKyQzID09ICJib29sIgl7CisJCSAgICBwcmludGYgIiNkZWZpbmUgJS0zMHMgQ1VSIEJvb2xlYW5zWyVkXVxuIiwgJDEsIEJvb2xDb3VudCsrCisJCX0KKworJDMgPT0gIm51bSIJeworCQkgICAgcHJpbnRmICIjZGVmaW5lICUtMzBzIENVUiBOdW1iZXJzWyVkXVxuIiwgJDEsIE51bWJlckNvdW50KysKKwkJfQorCiskMyA9PSAic3RyIgl7CisJCSAgICBwcmludGYgIiNkZWZpbmUgJS0zMHMgQ1VSIFN0cmluZ3NbJWRdXG4iLCAkMSwgU3RyaW5nQ291bnQrKworCQl9CisKK0VORAkJeworCQkJcHJpbnQgICIjZW5kaWYgLyogX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUgKi8iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIvKiIKKwkJCXByaW50ICAiICogUHJlZGVmaW5lZCB0ZXJtaW5mbyBhcnJheSBzaXplcyIKKwkJCXByaW50ICAiICovIgorCQkJcHJpbnRmICIjZGVmaW5lIEJPT0xDT1VOVCAlZFxuIiwgQm9vbENvdW50CisJCQlwcmludGYgIiNkZWZpbmUgTlVNQ09VTlQgICVkXG4iLCBOdW1iZXJDb3VudAorCQkJcHJpbnRmICIjZGVmaW5lIFNUUkNPVU5UICAlZFxuIiwgU3RyaW5nQ291bnQKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIvKiB1c2VkIGJ5IGNvZGUgZm9yIGNvbXBhcmluZyBlbnRyaWVzICovIgorCQkJcHJpbnQgICIjZGVmaW5lIGFjc19jaGFyc19pbmRleAkiLCBhY3NpbmRleAorCQkJcHJpbnQgICIiCisJCQlwcmludCAgInR5cGVkZWYgc3RydWN0IHRlcm10eXBlIHsJLyogaW4tY29yZSBmb3JtIG9mIHRlcm1pbmZvIGRhdGEgKi8iCisJCQlwcmludCAgIiAgICBjaGFyICAqdGVybV9uYW1lczsJCS8qIHN0cl90YWJsZSBvZmZzZXQgb2YgdGVybSBuYW1lcyAqLyIKKwkJCXByaW50ICAiICAgIGNoYXIgICpzdHJfdGFibGU7CQkvKiBwb2ludGVyIHRvIHN0cmluZyB0YWJsZSAqLyIKKwkJCXByaW50ICAiICAgIE5DVVJTRVNfU0JPT0wgICpCb29sZWFuczsJLyogYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgKi8iCisJCQlwcmludCAgIiAgICBzaG9ydCAqTnVtYmVyczsJCS8qIGFycmF5IG9mIGludGVnZXIgdmFsdWVzICovIgorCQkJcHJpbnQgICIgICAgY2hhciAgKipTdHJpbmdzOwkJLyogYXJyYXkgb2Ygc3RyaW5nIG9mZnNldHMgKi8iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2lmIE5DVVJTRVNfWE5BTUVTIgorCQkJcHJpbnQgICIgICAgY2hhciAgKmV4dF9zdHJfdGFibGU7CS8qIHBvaW50ZXIgdG8gZXh0ZW5kZWQgc3RyaW5nIHRhYmxlICovIgorCQkJcHJpbnQgICIgICAgY2hhciAgKipleHRfTmFtZXM7CQkvKiBjb3JyZXNwb25kaW5nIG5hbWVzICovIgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiAgICB1bnNpZ25lZCBzaG9ydCBudW1fQm9vbGVhbnM7LyogY291bnQgdG90YWwgQm9vbGVhbnMgKi8iCisJCQlwcmludCAgIiAgICB1bnNpZ25lZCBzaG9ydCBudW1fTnVtYmVyczsJLyogY291bnQgdG90YWwgTnVtYmVycyAqLyIKKwkJCXByaW50ICAiICAgIHVuc2lnbmVkIHNob3J0IG51bV9TdHJpbmdzOwkvKiBjb3VudCB0b3RhbCBTdHJpbmdzICovIgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiAgICB1bnNpZ25lZCBzaG9ydCBleHRfQm9vbGVhbnM7LyogY291bnQgZXh0ZW5zaW9ucyB0byBCb29sZWFucyAqLyIKKwkJCXByaW50ICAiICAgIHVuc2lnbmVkIHNob3J0IGV4dF9OdW1iZXJzOwkvKiBjb3VudCBleHRlbnNpb25zIHRvIE51bWJlcnMgKi8iCisJCQlwcmludCAgIiAgICB1bnNpZ25lZCBzaG9ydCBleHRfU3RyaW5nczsJLyogY291bnQgZXh0ZW5zaW9ucyB0byBTdHJpbmdzICovIgorCQkJcHJpbnQgICIjZW5kaWYgLyogTkNVUlNFU19YTkFNRVMgKi8iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAifSBURVJNVFlQRTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAidHlwZWRlZiBzdHJ1Y3QgdGVybSB7CQkvKiBkZXNjcmliZSBhbiBhY3R1YWwgdGVybWluYWwgKi8iCisJCQlwcmludCAgIiAgICBURVJNVFlQRQl0eXBlOwkJLyogdGVybWluYWwgdHlwZSBkZXNjcmlwdGlvbiAqLyIKKwkJCXByaW50ICAiICAgIHNob3J0CUZpbGVkZXM7CS8qIGZpbGUgZGVzY3JpcHRpb24gYmVpbmcgd3JpdHRlbiB0byAqLyIKKwkJCXByaW50ICAiICAgIFRUWQkJT3R0eWIsCQkvKiBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgdGVybWluYWwgKi8iCisJCQlwcmludCAgIgkJTnR0eWI7CQkvKiBjdXJyZW50IHN0YXRlIG9mIHRoZSB0ZXJtaW5hbCAqLyIKKwkJCXByaW50ICAiICAgIGludAkJX2JhdWRyYXRlOwkvKiB1c2VkIHRvIGNvbXB1dGUgcGFkZGluZyAqLyIKKwkJCXByaW50ICAiICAgIGNoYXIgKiAgICAgIF90ZXJtbmFtZTsgICAgICAvKiB1c2VkIGZvciB0ZXJtbmFtZSgpICovIgorCQkJcHJpbnQgICJ9IFRFUk1JTkFMOyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjaWYgQEJST0tFTl9MSU5LRVJAIHx8IEBjZl9jdl9lbmFibGVfcmVlbnRyYW50QCIKKwkJCXByaW50ICAiTkNVUlNFU19XUkFQUEVEX1ZBUihURVJNSU5BTCAqLCBjdXJfdGVybSk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIGJvb2xuYW1lcyk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIGJvb2xjb2Rlcyk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIGJvb2xmbmFtZXMpOyIKKwkJCXByaW50ICAiTkNVUlNFU19XUkFQUEVEX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCAqLCBudW1uYW1lcyk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIG51bWNvZGVzKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgbnVtZm5hbWVzKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgc3RybmFtZXMpOyIKKwkJCXByaW50ICAiTkNVUlNFU19XUkFQUEVEX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCAqLCBzdHJjb2Rlcyk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIHN0cmZuYW1lcyk7IgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiNkZWZpbmUgY3VyX3Rlcm0gICBOQ1VSU0VTX1BVQkxJQ19WQVIoY3VyX3Rlcm0oKSkiCisJCQlwcmludCAgIiNkZWZpbmUgYm9vbG5hbWVzICBOQ1VSU0VTX1BVQkxJQ19WQVIoYm9vbG5hbWVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIGJvb2xjb2RlcyAgTkNVUlNFU19QVUJMSUNfVkFSKGJvb2xjb2RlcygpKSIKKwkJCXByaW50ICAiI2RlZmluZSBib29sZm5hbWVzIE5DVVJTRVNfUFVCTElDX1ZBUihib29sZm5hbWVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIG51bW5hbWVzICAgTkNVUlNFU19QVUJMSUNfVkFSKG51bW5hbWVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIG51bWNvZGVzICAgTkNVUlNFU19QVUJMSUNfVkFSKG51bWNvZGVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIG51bWZuYW1lcyAgTkNVUlNFU19QVUJMSUNfVkFSKG51bWZuYW1lcygpKSIKKwkJCXByaW50ICAiI2RlZmluZSBzdHJuYW1lcyAgIE5DVVJTRVNfUFVCTElDX1ZBUihzdHJuYW1lcygpKSIKKwkJCXByaW50ICAiI2RlZmluZSBzdHJjb2RlcyAgIE5DVVJTRVNfUFVCTElDX1ZBUihzdHJjb2RlcygpKSIKKwkJCXByaW50ICAiI2RlZmluZSBzdHJmbmFtZXMgIE5DVVJTRVNfUFVCTElDX1ZBUihzdHJmbmFtZXMoKSkiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2Vsc2UiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihURVJNSU5BTCAqKSBjdXJfdGVybTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIGJvb2xuYW1lc1tdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIGJvb2xjb2Rlc1tdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIGJvb2xmbmFtZXNbXTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBudW1uYW1lc1tdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIG51bWNvZGVzW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgbnVtZm5hbWVzW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgc3RybmFtZXNbXTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBzdHJjb2Rlc1tdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIHN0cmZuYW1lc1tdOyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjZW5kaWYiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLyogaW50ZXJuYWxzICovIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfc2V0X3R0eV9tb2RlIChUVFkgKmJ1Zik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZ2V0X3R0eV9tb2RlIChUVFkgKmJ1Zik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVhZF9lbnRyeSAoY29uc3QgY2hhciAqIGNvbnN0LCBjaGFyICogY29uc3QsIFRFUk1UWVBFICpjb25zdCk7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVhZF9maWxlX2VudHJ5IChjb25zdCBjaGFyICpjb25zdCwgVEVSTVRZUEUgKik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVhZF90ZXJtdHlwZSAoVEVSTVRZUEUgKiwgY2hhciAqLCBpbnQpOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX2ZpcnN0X25hbWUgKGNvbnN0IGNoYXIgKmNvbnN0KTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19uYW1lX21hdGNoIChjb25zdCBjaGFyICpjb25zdCwgY29uc3QgY2hhciAqY29uc3QsIGNvbnN0IGNoYXIgKmNvbnN0KTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBURVJNVFlQRSAqKSBfbmNfZmFsbGJhY2sgKGNvbnN0IGNoYXIgKik7IgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIi8qIGVudHJ5IHBvaW50cyAqLyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFRFUk1JTkFMICopIHNldF9jdXJ0ZXJtIChURVJNSU5BTCAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlbF9jdXJ0ZXJtIChURVJNSU5BTCAqKTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLyogbWlzY2VsbGFuZW91cyBlbnRyeSBwb2ludHMgKi8iCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHJlc3RhcnR0ZXJtIChOQ1VSU0VTX0NPTlNUIGNoYXIgKiwgaW50LCBpbnQgKik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzZXR1cHRlcm0gKE5DVVJTRVNfQ09OU1QgY2hhciAqLGludCxpbnQgKik7IgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIi8qIHRlcm1pbmZvIGVudHJ5IHBvaW50cywgYWxzbyBkZWNsYXJlZCBpbiBjdXJzZXMuaCAqLyIKKwkJCXByaW50ICAiI2lmICFkZWZpbmVkKF9fTkNVUlNFU19IKSIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdGlnZXRzdHIgKE5DVVJTRVNfQ09OU1QgY2hhciAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhcikgdHR5dHlwZVtdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcHV0cCAoY29uc3QgY2hhciAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRpZ2V0ZmxhZyAoTkNVUlNFU19DT05TVCBjaGFyICopOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGlnZXRudW0gKE5DVVJTRVNfQ09OU1QgY2hhciAqKTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2lmIEBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1NAIC8qIE5DVVJTRVNfVFBBUk1fVkFSQVJHUyAqLyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdHBhcm0gKE5DVVJTRVNfQ09OU1QgY2hhciAqLCAuLi4pOwkvKiBzcGVjaWFsICovIgorCQkJcHJpbnQgICIjZWxzZSIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdHBhcm0gKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyk7CS8qIHNwZWNpYWwgKi8iCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRwYXJtX3ZhcmFyZ3MgKE5DVVJTRVNfQ09OU1QgY2hhciAqLCAuLi4pOwkvKiBzcGVjaWFsICovIgorCQkJcHJpbnQgICIjZW5kaWYiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2VuZGlmIC8qIF9fTkNVUlNFU19IICovIgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIi8qIHRlcm1jYXAgZGF0YWJhc2UgZW11bGF0aW9uIChYUEc0IHVzZXMgY29uc3Qgb25seSBmb3IgMm5kIHBhcmFtIG9mIHRnZXRlbnQpICovIgorCQkJcHJpbnQgICIjaWYgIWRlZmluZWQoTkNVUlNFU19URVJNQ0FQX0hfaW5jbCkiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRnZXRzdHIgKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBjaGFyICoqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRnb3RvIChjb25zdCBjaGFyICosIGludCwgaW50KTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRnZXRlbnQgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRnZXRmbGFnIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0Z2V0bnVtIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0cHV0cyAoY29uc3QgY2hhciAqLCBpbnQsIGludCAoKikoaW50KSk7IgorCQkJcHJpbnQgICIjZW5kaWYgLyogTkNVUlNFU19URVJNQ0FQX0hfaW5jbCAqLyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjaWZkZWYgX19jcGx1c3BsdXMiCisJCQlwcmludCAgIn0iCisJCQlwcmludCAgIiNlbmRpZiIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjZW5kaWYgLyogTkNVUlNFU19URVJNX0hfaW5jbCAqLyIKKwkJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9NYWtlZmlsZS5pbiBiL2luY2x1ZGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0OGExNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMjYgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuMzUgMjAwMS8xMi8wOCAxODo1MDowNiB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtMjAwMQorIworIyBNYWtlZmlsZSBmb3IgbmN1cnNlcyBzb3VyY2UgY29kZS4KKyMKKyMgVGhpcyBtYWtlcy9pbnN0YWxscyBuY3Vyc2VzIGluY2x1ZGUtZmlsZXMKKyMKKyMgVGhlIHZhcmlhYmxlICdzcmNkaXInIHJlZmVycyB0byB0aGUgc291cmNlLWRpc3RyaWJ1dGlvbiwgYW5kIGNhbiBiZSBzZXQgd2l0aAorIyB0aGUgY29uZmlndXJlIHNjcmlwdCBieSAiLS1zcmNkaXI9RElSIi4KKworIyB0dXJuIG9mZiBfYWxsXyBzdWZmaXggcnVsZXM7IHdlJ2xsIGdlbmVyYXRlIG91ciBvd24KKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorVEhJUwkJPSBNYWtlZmlsZQorCitERVNURElSCQk9IEBERVNURElSQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKKworQVdLCQk9IEBBV0tACitMTl9TCQk9IEBMTl9TQAorCitWRVJTSU9OCQk9IEBjZl9jdl9yZWxfdmVyc2lvbkAKKworIyBUaGUgIkNhcHMiIGZpbGUgc3BlY2lmaWVzIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBmb3JtYXQsIGFzIHdlbGwgYXMgdGhlIGxpc3QKKyMgb2YgZnVuY3Rpb24ga2V5cy4KK1RFUk1JTkZPX0NBUFMJPSAkKHNyY2RpcikvQFRFUk1JTkZPX0NBUFNACisKKyMgVGhlc2UgZmlsZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgY29uZmlndXJlIHNjcmlwdAorQ09ORklHX1NSQyA9IFwKKwlNS3Rlcm0uaC5hd2sgXAorCWN1cnNlcy5oZWFkIFwKKwl0ZXJtY2FwLmggXAorCXVuY3RybC5oCisKKyMgVGhlc2UgZmlsZXMgYXJlIGdlbmVyYXRlZCBieSB0aGlzIG1ha2VmaWxlCitBVVRPX1NSQyA9IFwKKwljdXJzZXMuaCBcCisJaGFzaHNpemUuaCBcCisJbmN1cnNlc19kZWYuaCBcCisJcGFyYW1ldHJpemVkLmggXAorCXRlcm0uaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWxsIFwKK2xpYnMgXAorZGVwZW5kIFwKK3NvdXJjZXMgXAoraW5zdGFsbCA6OgkkKEFVVE9fU1JDKQorCitjdXJzZXMuaCA6ICQoVEVSTUlORk9fQ0FQUykgXAorCQljdXJzZXMuaGVhZCBcCisJCSQoc3JjZGlyKS9jdXJzZXMudGFpbCBcCisJCSQoc3JjZGlyKS9NS2tleV9kZWZzLnNoCisJY2F0IGN1cnNlcy5oZWFkID4kQAorCUFXSz0kKEFXSykgc2ggJChzcmNkaXIpL01La2V5X2RlZnMuc2ggJChURVJNSU5GT19DQVBTKSA+PiRACisJc2ggLWMgJ2lmIHRlc3QgIkBOQ1VSU0VTX0NIX1RAIiA9ICJjY2hhcl90IiA7IHRoZW4gY2F0ICQoc3JjZGlyKS9jdXJzZXMud2lkZSA+PiRAIDsgZmknCisJY2F0ICQoc3JjZGlyKS9jdXJzZXMudGFpbCA+PiRACisKK3Rlcm0uaDogJChURVJNSU5GT19DQVBTKSBNS3Rlcm0uaC5hd2sKKwkkKEFXSykgLWYgTUt0ZXJtLmguYXdrICQoVEVSTUlORk9fQ0FQUykgPiAkQAorCXNoICQoc3JjZGlyKS9lZGl0X2NmZy5zaCAuLi9pbmNsdWRlL25jdXJzZXNfY2ZnLmggJEAKKworaGFzaHNpemUuaDogJChURVJNSU5GT19DQVBTKSAkKHNyY2RpcikvTUtoYXNoc2l6ZS5zaAorCXNoICQoc3JjZGlyKS9NS2hhc2hzaXplLnNoICQoVEVSTUlORk9fQ0FQUykgPiRACisKK25jdXJzZXNfZGVmLmg6ICQoc3JjZGlyKS9uY3Vyc2VzX2RlZnMgJChzcmNkaXIpL01LbmN1cnNlc19kZWYuc2gKKwlBV0s9JChBV0spIHNoICQoc3JjZGlyKS9NS25jdXJzZXNfZGVmLnNoICQoc3JjZGlyKS9uY3Vyc2VzX2RlZnMgPiRACisKK3BhcmFtZXRyaXplZC5oOiAkKFRFUk1JTkZPX0NBUFMpICQoc3JjZGlyKS9NS3BhcmFtZXRyaXplZC5zaAorCUFXSz0kKEFXSykgc2ggJChzcmNkaXIpL01LcGFyYW1ldHJpemVkLnNoICQoVEVSTUlORk9fQ0FQUykgPiRACisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktcm0gLWYgJChBVVRPX1NSQykKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlICQoQ09ORklHX1NSQykKKworcmVhbGNsZWFuIDo6IGRpc3RjbGVhbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSByZW1haW5kZXIgb2YgdGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGR1cmluZyBjb25maWd1cmF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NhcGRlZmF1bHRzLmMgYi9pbmNsdWRlL2NhcGRlZmF1bHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmMmZlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY2FwZGVmYXVsdHMuYwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogY2FwZGVmYXVsdHMuYyx2IDEuMTMgMjAwOC8wOC8wNCAxMjozMzo0MiB0b20gRXhwICQgKi8KKworICAgIC8qCisgICAgICogQ29tcHV0ZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMuICBUaGUgcmVhc29uIHRoaXMgaXMgYW4gaW5jbHVkZSBmaWxlIGlzCisgICAgICogdGhhdCB0aGUgdHdvIHBsYWNlcyB3aGVyZSBpdCdzIG5lZWRlZCB3YW50IHRoZSBtYWNyb3MgdG8gZ2VuZXJhdGUKKyAgICAgKiBvZmZzZXRzIHRvIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLiAgU2VlIHRoZSBmaWxlIENhcHMgZm9yIGV4cGxhbmF0aW9ucyBvZgorICAgICAqIHRoZXNlIGNvbnZlcnNpb25zLgorICAgICAqCisgICAgICogTm90ZTogIFRoaXMgY29kZSBpcyB0aGUgZnVuY3Rpb25hbCBpbnZlcnNlIG9mIHRoZSBmaXJzdCBwYXJ0IG9mCisgICAgICogcG9zdHByb2Nlc3NfdGVybWNhcCgpLgorICAgICAqLworeworICAgIGNoYXIgKnNwOworICAgIHNob3J0IGNhcHZhbDsKKworI2RlZmluZSBFWFRSQUNUX0RFTEFZKHN0cikgXAorICAgIAkoc2hvcnQpIChzcCA9IHN0cmNocihzdHIsICcqJyksIHNwID8gYXRvaShzcCsxKSA6IDApCisKKyAgICAvKiBjdXJyZW50ICg0LjRCU0QpIGNhcGFiaWxpdGllcyBtYXJrZWQgb2Jzb2xldGUgKi8KKyAgICBpZiAoVkFMSURfU1RSSU5HKGNhcnJpYWdlX3JldHVybikKKwkmJiAoY2FwdmFsID0gRVhUUkFDVF9ERUxBWShjYXJyaWFnZV9yZXR1cm4pKSkKKwljYXJyaWFnZV9yZXR1cm5fZGVsYXkgPSBjYXB2YWw7CisgICAgaWYgKFZBTElEX1NUUklORyhuZXdsaW5lKSAmJiAoY2FwdmFsID0gRVhUUkFDVF9ERUxBWShuZXdsaW5lKSkpCisJbmV3X2xpbmVfZGVsYXkgPSBjYXB2YWw7CisKKyAgICAvKiBjdXJyZW50ICg0LjRCU0QpIGNhcGFiaWxpdGllcyBub3Qgb2Jzb2xldGUgKi8KKyAgICBpZiAoIVZBTElEX1NUUklORyh0ZXJtY2FwX2luaXQyKSAmJiBWQUxJRF9TVFJJTkcoaW5pdF8zc3RyaW5nKSkgeworCXRlcm1jYXBfaW5pdDIgPSBpbml0XzNzdHJpbmc7CisJaW5pdF8zc3RyaW5nID0gQUJTRU5UX1NUUklORzsKKyAgICB9CisgICAgaWYgKCFWQUxJRF9TVFJJTkcodGVybWNhcF9yZXNldCkKKyAgICAgJiYgVkFMSURfU1RSSU5HKHJlc2V0XzJzdHJpbmcpCisgICAgICYmICFWQUxJRF9TVFJJTkcocmVzZXRfMXN0cmluZykKKyAgICAgJiYgIVZBTElEX1NUUklORyhyZXNldF8zc3RyaW5nKSkgeworCXRlcm1jYXBfcmVzZXQgPSByZXNldF8yc3RyaW5nOworCXJlc2V0XzJzdHJpbmcgPSBBQlNFTlRfU1RSSU5HOworICAgIH0KKyAgICBpZiAobWFnaWNfY29va2llX2dsaXRjaF91bCA9PSBBQlNFTlRfTlVNRVJJQworCSYmIG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggIT0gQUJTRU5UX05VTUVSSUMKKwkmJiBWQUxJRF9TVFJJTkcoZW50ZXJfdW5kZXJsaW5lX21vZGUpKQorCW1hZ2ljX2Nvb2tpZV9nbGl0Y2hfdWwgPSBtYWdpY19jb29raWVfZ2xpdGNoOworCisgICAgLyogdG90YWxseSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgKi8KKyAgICBsaW5lZmVlZF9pc19uZXdsaW5lID0gKGNoYXIpIChWQUxJRF9TVFJJTkcobmV3bGluZSkKKwkJCQkgICYmIChzdHJjbXAoIlxuIiwgbmV3bGluZSkgPT0gMCkpOworICAgIGlmIChWQUxJRF9TVFJJTkcoY3Vyc29yX2xlZnQpCisJJiYgKGNhcHZhbCA9IEVYVFJBQ1RfREVMQVkoY3Vyc29yX2xlZnQpKSkKKwliYWNrc3BhY2VfZGVsYXkgPSBjYXB2YWw7CisgICAgaWYgKFZBTElEX1NUUklORyh0YWIpICYmIChjYXB2YWwgPSBFWFRSQUNUX0RFTEFZKHRhYikpKQorCWhvcml6b250YWxfdGFiX2RlbGF5ID0gY2FwdmFsOworI3VuZGVmIEVYVFJBQ1RfREVMQVkKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3Vyc2VzLmguaW4gYi9pbmNsdWRlL2N1cnNlcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGE5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2N1cnNlcy5oLmluCkBAIC0wLDAgKzEsMTIzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IGN1cnNlcy5oLmluLHYgMS4xODcgMjAwOC8wOC8zMCAyMDoxMToyOSB0b20gRXhwICQgKi8KKworI2lmbmRlZiBfX05DVVJTRVNfSAorI2RlZmluZSBfX05DVVJTRVNfSAorCisjZGVmaW5lIENVUlNFUyAxCisjZGVmaW5lIENVUlNFU19IIDEKKworLyogVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBmb3IgdGhlIGVuaGFuY2VkIGZ1bmN0aW9uYWxpdHkgdG8gYmUgdmlzaWJsZS4KKyAqIEhvd2V2ZXIsIHNvbWUgb2YgdGhlIHdpZGUtY2hhcmFjdGVyIChlbmhhbmNlZCkgZnVuY3Rpb25hbGl0eSBpcyBtaXNzaW5nLgorICogU28gd2UgZG8gbm90IGRlZmluZSBpdCAoeWV0KS4KKyNkZWZpbmUgX1hPUEVOX0NVUlNFUyAxCisgKi8KKworLyogVGhlc2UgYXJlIGRlZmluZWQgb25seSBpbiBjdXJzZXMuaCwgYW5kIGFyZSB1c2VkIGZvciBjb25kaXRpb25hbCBjb21waWxlcyAqLworI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IgQE5DVVJTRVNfTUFKT1JACisjZGVmaW5lIE5DVVJTRVNfVkVSU0lPTl9NSU5PUiBATkNVUlNFU19NSU5PUkAKKyNkZWZpbmUgTkNVUlNFU19WRVJTSU9OX1BBVENIIEBOQ1VSU0VTX1BBVENIQAorCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gbW9yZSB0aGFuIG9uZSBuY3Vyc2VzIGhlYWRlciwgZm9yIGlkZW50aWZpY2F0aW9uICovCisjdW5kZWYgIE5DVVJTRVNfVkVSU0lPTgorI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT04gIkBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAiCisKKy8qCisgKiBJZGVudGlmeSB0aGUgbW91c2UgZW5jb2RpbmcgdmVyc2lvbi4KKyAqLworI2RlZmluZSBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gQE5DVVJTRVNfTU9VU0VfVkVSU0lPTkAKKworLyoKKyAqIERlZmluaXRpb25zIHRvIGZhY2lsaXRhdGUgRExMJ3MuCisgKi8KKyNpbmNsdWRlIDxuY3Vyc2VzX2RsbC5oPgorCisvKgorICogVXNlci1kZWZpbmFibGUgdHdlYWsgdG8gZGlzYWJsZSB0aGUgaW5jbHVkZSBvZiA8c3RkYm9vbC5oPi4KKyAqLworI2lmbmRlZiBOQ1VSU0VTX0VOQUJMRV9TVERCT09MX0gKKyNkZWZpbmUgTkNVUlNFU19FTkFCTEVfU1REQk9PTF9IIEBjZl9jdl9oZWFkZXJfc3RkYm9vbF9oQAorI2VuZGlmCisKKy8qCisgKiBOQ1VSU0VTX0FUVFJfVCBpcyB1c2VkIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gYnVpbGRpbmcgbmN1cnNlcworICogY29uZmlndXJlZCB1c2luZyAtLWRpc2FibGUtbWFjcm9zLgorICovCisjaWZkZWYgTkNVUlNFU19OT01BQ1JPUworI2lmbmRlZiBOQ1VSU0VTX0FUVFJfVAorI2RlZmluZSBOQ1VSU0VTX0FUVFJfVCBhdHRyX3QKKyNlbmRpZgorI2VuZGlmIC8qIE5DVVJTRVNfTk9NQUNST1MgKi8KKworI2lmbmRlZiBOQ1VSU0VTX0FUVFJfVAorI2RlZmluZSBOQ1VSU0VTX0FUVFJfVCBpbnQKKyNlbmRpZgorCisvKgorICogRXhwYW5kcyB0byAnY29uc3QnIGlmIG5jdXJzZXMgaXMgY29uZmlndXJlZCB1c2luZyAtLWVuYWJsZS1jb25zdC4gIE5vdGUgdGhhdAorICogZG9pbmcgc28gbWFrZXMgaXQgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIFgvT3BlbiBDdXJzZXMuCisgKi8KKyN1bmRlZiAgTkNVUlNFU19DT05TVAorI2RlZmluZSBOQ1VSU0VTX0NPTlNUIEBOQ1VSU0VTX0NPTlNUQAorCisjdW5kZWYgTkNVUlNFU19JTkxJTkUKKyNkZWZpbmUgTkNVUlNFU19JTkxJTkUgQE5DVVJTRVNfSU5MSU5FQAorCisvKgorICogVGhlIGludGVybmFsIHR5cGUgdXNlZCBmb3IgY29sb3IgdmFsdWVzCisgKi8KKyN1bmRlZglOQ1VSU0VTX0NPTE9SX1QKKyNkZWZpbmUJTkNVUlNFU19DT0xPUl9UIHNob3J0CisKKy8qCisgKiBEZWZpbml0aW9uIHVzZWQgdG8gbWFrZSBXSU5ET1cgYW5kIHNpbWlsYXIgc3RydWN0cyBvcGFxdWUuCisgKi8KKyNpZm5kZWYgQGNmX2N2X2VuYWJsZV9vcGFxdWVACisjZGVmaW5lIE5DVVJTRVNfT1BBUVVFIEBOQ1VSU0VTX09QQVFVRUAKKyNlbmRpZgorCisvKgorICogVGhlIGludGVybmFsIHR5cGUgdXNlZCBmb3Igd2luZG93IGRpbWVuc2lvbnMuCisgKi8KKyN1bmRlZglOQ1VSU0VTX1NJWkVfVAorI2RlZmluZQlOQ1VSU0VTX1NJWkVfVCBATkNVUlNFU19TSVpFX1RACisKKy8qCisgKiBDb250cm9sIHdoZXRoZXIgdHBhcm0oKSBzdXBwb3J0cyB2YXJhcmdzIG9yIGZpeGVkLXBhcmFtZXRlciBsaXN0LgorICovCisjdW5kZWYgTkNVUlNFU19UUEFSTV9WQVJBUkdTCisjZGVmaW5lIE5DVVJTRVNfVFBBUk1fVkFSQVJHUyBATkNVUlNFU19UUEFSTV9WQVJBUkdTQAorCisvKgorICogTkNVUlNFU19DSF9UIGlzIHVzZWQgaW4gYnVpbGRpbmcgdGhlIGxpYnJhcnksIGJ1dCBub3QgdXNlZCBvdGhlcndpc2UgaW4KKyAqIHRoaXMgaGVhZGVyIGZpbGUsIHNpbmNlIHRoYXQgd291bGQgbWFrZSB0aGUgbm9ybWFsL3dpZGUtY2hhcmFjdGVyIHZlcnNpb25zCisgKiBvZiB0aGUgaGVhZGVyIGluY29tcGF0aWJsZS4KKyAqLworI3VuZGVmCU5DVVJTRVNfQ0hfVAorI2RlZmluZSBOQ1VSU0VTX0NIX1QgQE5DVVJTRVNfQ0hfVEAKKworI2lmIEBjZl9jdl9lbmFibGVfbHA2NEAgJiYgZGVmaW5lZChfTFA2NCkKK3R5cGVkZWYgdW5zaWduZWQgY2h0eXBlOwordHlwZWRlZiB1bnNpZ25lZCBtbWFza190OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgQGNmX2N2X3R5cGVvZl9jaHR5cGVAIGNodHlwZTsKK3R5cGVkZWYgdW5zaWduZWQgQGNmX2N2X3R5cGVvZl9tbWFza190QCBtbWFza190OworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuY3RybC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgkvKiB3ZSBuZWVkIHZhX2xpc3QgKi8KKyNpZmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjaW5jbHVkZSA8c3RkZGVmLmg+CS8qIHdlIHdhbnQgd2NoYXJfdCAqLworI2VuZGlmIC8qIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgKi8KKworLyogWC9PcGVuIGFuZCBTVnI0IHNwZWNpZnkgdGhhdCBjdXJzZXMgaW1wbGVtZW50cyAnYm9vbCcuICBIb3dldmVyLCBDKysgbWF5IGFsc28KKyAqIGltcGxlbWVudCBpdC4gIElmIHNvLCB3ZSBtdXN0IHVzZSB0aGUgQysrIGNvbXBpbGVyJ3MgdHlwZSB0byBhdm9pZCBjb25mbGljdAorICogd2l0aCBvdGhlciBpbnRlcmZhY2VzLgorICoKKyAqIEEgZnVydGhlciBjb21wbGljYXRpb24gaXMgdGhhdCA8c3RkYm9vbC5oPiBtYXkgZGVjbGFyZSAnYm9vbCcgdG8gYmUgYQorICogZGlmZmVyZW50IHR5cGUsIHN1Y2ggYXMgYW4gZW51bSB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgY29tcGF0aWJsZSB3aXRoCisgKiBDKysuICBJZiB3ZSBoYXZlIDxzdGRib29sLmg+LCBtYWtlICdib29sJyBhIG1hY3JvLCBzbyB1c2VycyBtYXkgI3VuZGVmIGl0LgorICogT3RoZXJ3aXNlLCBsZXQgaXQgcmVtYWluIGEgdHlwZWRlZiB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciAjZGVmaW5lJ3MuCisgKiBJbiBlaXRoZXIgY2FzZSwgbWFrZSBhIHR5cGVkZWYgZm9yIE5DVVJTRVNfQk9PTCB3aGljaCBjYW4gYmUgdXNlZCBpZiBuZWVkZWQKKyAqIGZyb20gZWl0aGVyIEMgb3IgQysrLgorICovCisKKyN1bmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgICAgMQorCisjdW5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAwCisKK3R5cGVkZWYgQGNmX2N2X3R5cGVfb2ZfYm9vbEAgTkNVUlNFU19CT09MOworCisjaWYgQFVTRV9DWFhfQk9PTEAJLyogX19jcGx1c3BsdXMsIGV0Yy4gKi8KKworLyogdXNlIHRoZSBDKysgY29tcGlsZXIncyBib29sIHR5cGUgKi8KKyNkZWZpbmUgTkNVUlNFU19CT09MIGJvb2wKKworI2Vsc2UJCQkvKiBjODksIGM5OSwgZXRjLiAqLworCisjaWYgTkNVUlNFU19FTkFCTEVfU1REQk9PTF9ICisjaW5jbHVkZSA8c3RkYm9vbC5oPgorLyogdXNlIHdoYXRldmVyIHRoZSBDIGNvbXBpbGVyIGRlY2lkZXMgYm9vbCByZWFsbHkgaXMgKi8KKyNkZWZpbmUgTkNVUlNFU19CT09MIGJvb2wKKyNlbHNlCisvKiB0aGVyZSBpcyBubyBwcmVkZWZpbmVkIGJvb2wgLSB1c2Ugb3VyIG93biAqLworI3VuZGVmIGJvb2wKKyNkZWZpbmUgYm9vbCBOQ1VSU0VTX0JPT0wKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fY3BsdXNwbHVzLCBldGMuICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZGVmaW5lIE5DVVJTRVNfQ0FTVCh0eXBlLHZhbHVlKSBzdGF0aWNfY2FzdDx0eXBlPih2YWx1ZSkKKyNlbHNlCisjZGVmaW5lIE5DVVJTRVNfQ0FTVCh0eXBlLHZhbHVlKSAodHlwZSkodmFsdWUpCisjZW5kaWYKKworLyoKKyAqIFgvT3BlbiBhdHRyaWJ1dGVzLiAgSW4gdGhlIG5jdXJzZXMgaW1wbGVtZW50YXRpb24sIHRoZXkgYXJlIGlkZW50aWNhbCB0byB0aGUKKyAqIEFfIGF0dHJpYnV0ZXMuCisgKi8KKyNkZWZpbmUgV0FfQVRUUklCVVRFUwlBX0FUVFJJQlVURVMKKyNkZWZpbmUgV0FfTk9STUFMCUFfTk9STUFMCisjZGVmaW5lIFdBX1NUQU5ET1VUCUFfU1RBTkRPVVQKKyNkZWZpbmUgV0FfVU5ERVJMSU5FCUFfVU5ERVJMSU5FCisjZGVmaW5lIFdBX1JFVkVSU0UJQV9SRVZFUlNFCisjZGVmaW5lIFdBX0JMSU5LCUFfQkxJTksKKyNkZWZpbmUgV0FfRElNCQlBX0RJTQorI2RlZmluZSBXQV9CT0xECQlBX0JPTEQKKyNkZWZpbmUgV0FfQUxUQ0hBUlNFVAlBX0FMVENIQVJTRVQKKyNkZWZpbmUgV0FfSU5WSVMJQV9JTlZJUworI2RlZmluZSBXQV9QUk9URUNUCUFfUFJPVEVDVAorI2RlZmluZSBXQV9IT1JJWk9OVEFMCUFfSE9SSVpPTlRBTAorI2RlZmluZSBXQV9MRUZUCQlBX0xFRlQKKyNkZWZpbmUgV0FfTE9XCQlBX0xPVworI2RlZmluZSBXQV9SSUdIVAlBX1JJR0hUCisjZGVmaW5lIFdBX1RPUAkJQV9UT1AKKyNkZWZpbmUgV0FfVkVSVElDQUwJQV9WRVJUSUNBTAorCisvKiBjb2xvcnMgKi8KKyNkZWZpbmUgQ09MT1JfQkxBQ0sJMAorI2RlZmluZSBDT0xPUl9SRUQJMQorI2RlZmluZSBDT0xPUl9HUkVFTgkyCisjZGVmaW5lIENPTE9SX1lFTExPVwkzCisjZGVmaW5lIENPTE9SX0JMVUUJNAorI2RlZmluZSBDT0xPUl9NQUdFTlRBCTUKKyNkZWZpbmUgQ09MT1JfQ1lBTgk2CisjZGVmaW5lIENPTE9SX1dISVRFCTcKKworLyogbGluZSBncmFwaGljcyAqLworCisjaWYgQEJST0tFTl9MSU5LRVJAIHx8IEBjZl9jdl9lbmFibGVfcmVlbnRyYW50QAorTkNVUlNFU19XUkFQUEVEX1ZBUihjaHR5cGUqLCBhY3NfbWFwKTsKKyNkZWZpbmUgYWNzX21hcCAoX25jX2Fjc19tYXAoKSkKKyNlbHNlCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNodHlwZSkgYWNzX21hcFtdOworI2VuZGlmCisKKyNkZWZpbmUgTkNVUlNFU19BQ1MoYykJKGFjc19tYXBbTkNVUlNFU19DQVNUKHVuc2lnbmVkIGNoYXIsYyldKQorCisvKiBWVDEwMCBzeW1ib2xzIGJlZ2luIGhlcmUgKi8KKyNkZWZpbmUgQUNTX1VMQ09STkVSCU5DVVJTRVNfQUNTKCdsJykgLyogdXBwZXIgbGVmdCBjb3JuZXIgKi8KKyNkZWZpbmUgQUNTX0xMQ09STkVSCU5DVVJTRVNfQUNTKCdtJykgLyogbG93ZXIgbGVmdCBjb3JuZXIgKi8KKyNkZWZpbmUgQUNTX1VSQ09STkVSCU5DVVJTRVNfQUNTKCdrJykgLyogdXBwZXIgcmlnaHQgY29ybmVyICovCisjZGVmaW5lIEFDU19MUkNPUk5FUglOQ1VSU0VTX0FDUygnaicpIC8qIGxvd2VyIHJpZ2h0IGNvcm5lciAqLworI2RlZmluZSBBQ1NfTFRFRQlOQ1VSU0VTX0FDUygndCcpIC8qIHRlZSBwb2ludGluZyByaWdodCAqLworI2RlZmluZSBBQ1NfUlRFRQlOQ1VSU0VTX0FDUygndScpIC8qIHRlZSBwb2ludGluZyBsZWZ0ICovCisjZGVmaW5lIEFDU19CVEVFCU5DVVJTRVNfQUNTKCd2JykgLyogdGVlIHBvaW50aW5nIHVwICovCisjZGVmaW5lIEFDU19UVEVFCU5DVVJTRVNfQUNTKCd3JykgLyogdGVlIHBvaW50aW5nIGRvd24gKi8KKyNkZWZpbmUgQUNTX0hMSU5FCU5DVVJTRVNfQUNTKCdxJykgLyogaG9yaXpvbnRhbCBsaW5lICovCisjZGVmaW5lIEFDU19WTElORQlOQ1VSU0VTX0FDUygneCcpIC8qIHZlcnRpY2FsIGxpbmUgKi8KKyNkZWZpbmUgQUNTX1BMVVMJTkNVUlNFU19BQ1MoJ24nKSAvKiBsYXJnZSBwbHVzIG9yIGNyb3Nzb3ZlciAqLworI2RlZmluZSBBQ1NfUzEJCU5DVVJTRVNfQUNTKCdvJykgLyogc2NhbiBsaW5lIDEgKi8KKyNkZWZpbmUgQUNTX1M5CQlOQ1VSU0VTX0FDUygncycpIC8qIHNjYW4gbGluZSA5ICovCisjZGVmaW5lIEFDU19ESUFNT05ECU5DVVJTRVNfQUNTKCdgJykgLyogZGlhbW9uZCAqLworI2RlZmluZSBBQ1NfQ0tCT0FSRAlOQ1VSU0VTX0FDUygnYScpIC8qIGNoZWNrZXIgYm9hcmQgKHN0aXBwbGUpICovCisjZGVmaW5lIEFDU19ERUdSRUUJTkNVUlNFU19BQ1MoJ2YnKSAvKiBkZWdyZWUgc3ltYm9sICovCisjZGVmaW5lIEFDU19QTE1JTlVTCU5DVVJTRVNfQUNTKCdnJykgLyogcGx1cy9taW51cyAqLworI2RlZmluZSBBQ1NfQlVMTEVUCU5DVVJTRVNfQUNTKCd+JykgLyogYnVsbGV0ICovCisvKiBUZWxldHlwZSA1NDEwdjEgc3ltYm9scyBiZWdpbiBoZXJlICovCisjZGVmaW5lIEFDU19MQVJST1cJTkNVUlNFU19BQ1MoJywnKSAvKiBhcnJvdyBwb2ludGluZyBsZWZ0ICovCisjZGVmaW5lIEFDU19SQVJST1cJTkNVUlNFU19BQ1MoJysnKSAvKiBhcnJvdyBwb2ludGluZyByaWdodCAqLworI2RlZmluZSBBQ1NfREFSUk9XCU5DVVJTRVNfQUNTKCcuJykgLyogYXJyb3cgcG9pbnRpbmcgZG93biAqLworI2RlZmluZSBBQ1NfVUFSUk9XCU5DVVJTRVNfQUNTKCctJykgLyogYXJyb3cgcG9pbnRpbmcgdXAgKi8KKyNkZWZpbmUgQUNTX0JPQVJECU5DVVJTRVNfQUNTKCdoJykgLyogYm9hcmQgb2Ygc3F1YXJlcyAqLworI2RlZmluZSBBQ1NfTEFOVEVSTglOQ1VSU0VTX0FDUygnaScpIC8qIGxhbnRlcm4gc3ltYm9sICovCisjZGVmaW5lIEFDU19CTE9DSwlOQ1VSU0VTX0FDUygnMCcpIC8qIHNvbGlkIHNxdWFyZSBibG9jayAqLworLyoKKyAqIFRoZXNlIGFyZW4ndCBkb2N1bWVudGVkLCBidXQgYSBsb3Qgb2YgU3lzdGVtIFZzIGhhdmUgdGhlbSBhbnl3YXkKKyAqICh5b3UgY2FuIHNwb3QgcHBycnl5enp7e3x8fX0gaW4gYSBsb3Qgb2YgQVQmVCB0ZXJtaW5mbyBzdHJpbmdzKS4KKyAqIFRoZSBBQ1NfbmFtZXMgbWF5IG5vdCBtYXRjaCBBVCZUJ3MsIG91ciBzb3VyY2UgZGlkbid0IGtub3cgdGhlbS4KKyAqLworI2RlZmluZSBBQ1NfUzMJCU5DVVJTRVNfQUNTKCdwJykgLyogc2NhbiBsaW5lIDMgKi8KKyNkZWZpbmUgQUNTX1M3CQlOQ1VSU0VTX0FDUygncicpIC8qIHNjYW4gbGluZSA3ICovCisjZGVmaW5lIEFDU19MRVFVQUwJTkNVUlNFU19BQ1MoJ3knKSAvKiBsZXNzL2VxdWFsICovCisjZGVmaW5lIEFDU19HRVFVQUwJTkNVUlNFU19BQ1MoJ3onKSAvKiBncmVhdGVyL2VxdWFsICovCisjZGVmaW5lIEFDU19QSQkJTkNVUlNFU19BQ1MoJ3snKSAvKiBQaSAqLworI2RlZmluZSBBQ1NfTkVRVUFMCU5DVVJTRVNfQUNTKCd8JykgLyogbm90IGVxdWFsICovCisjZGVmaW5lIEFDU19TVEVSTElORwlOQ1VSU0VTX0FDUygnfScpIC8qIFVLIHBvdW5kIHNpZ24gKi8KKworLyoKKyAqIExpbmUgZHJhd2luZyBBQ1MgbmFtZXMgYXJlIG9mIHRoZSBmb3JtIEFDU190cmJsLCB3aGVyZSB0IGlzIHRoZSB0b3AsIHIKKyAqIGlzIHRoZSByaWdodCwgYiBpcyB0aGUgYm90dG9tLCBhbmQgbCBpcyB0aGUgbGVmdC4gIHQsIHIsIGIsIGFuZCBsIG1pZ2h0CisgKiBiZSBCIChibGFuayksIFMgKHNpbmdsZSksIEQgKGRvdWJsZSksIG9yIFQgKHRoaWNrKS4gIFRoZSBzdWJzZXQgZGVmaW5lZAorICogaGVyZSBvbmx5IHVzZXMgQiBhbmQgUy4KKyAqLworI2RlZmluZSBBQ1NfQlNTQglBQ1NfVUxDT1JORVIKKyNkZWZpbmUgQUNTX1NTQkIJQUNTX0xMQ09STkVSCisjZGVmaW5lIEFDU19CQlNTCUFDU19VUkNPUk5FUgorI2RlZmluZSBBQ1NfU0JCUwlBQ1NfTFJDT1JORVIKKyNkZWZpbmUgQUNTX1NCU1MJQUNTX1JURUUKKyNkZWZpbmUgQUNTX1NTU0IJQUNTX0xURUUKKyNkZWZpbmUgQUNTX1NTQlMJQUNTX0JURUUKKyNkZWZpbmUgQUNTX0JTU1MJQUNTX1RURUUKKyNkZWZpbmUgQUNTX0JTQlMJQUNTX0hMSU5FCisjZGVmaW5lIEFDU19TQlNCCUFDU19WTElORQorI2RlZmluZSBBQ1NfU1NTUwlBQ1NfUExVUworCisjdW5kZWYJRVJSCisjZGVmaW5lIEVSUiAgICAgKC0xKQorCisjdW5kZWYJT0sKKyNkZWZpbmUgT0sgICAgICAoMCkKKworLyogdmFsdWVzIGZvciB0aGUgX2ZsYWdzIG1lbWJlciAqLworI2RlZmluZSBfU1VCV0lOICAgICAgICAgMHgwMQkvKiBpcyB0aGlzIGEgc3ViLXdpbmRvdz8gKi8KKyNkZWZpbmUgX0VORExJTkUgICAgICAgIDB4MDIJLyogaXMgdGhlIHdpbmRvdyBmbHVzaCByaWdodD8gKi8KKyNkZWZpbmUgX0ZVTExXSU4gICAgICAgIDB4MDQJLyogaXMgdGhlIHdpbmRvdyBmdWxsLXNjcmVlbj8gKi8KKyNkZWZpbmUgX1NDUk9MTFdJTiAgICAgIDB4MDgJLyogYm90dG9tIGVkZ2UgaXMgYXQgc2NyZWVuIGJvdHRvbT8gKi8KKyNkZWZpbmUgX0lTUEFECSAgICAgICAgMHgxMAkvKiBpcyB0aGlzIHdpbmRvdyBhIHBhZD8gKi8KKyNkZWZpbmUgX0hBU01PVkVEICAgICAgIDB4MjAJLyogaGFzIGN1cnNvciBtb3ZlZCBzaW5jZSBsYXN0IHJlZnJlc2g/ICovCisjZGVmaW5lIF9XUkFQUEVEICAgICAgICAweDQwCS8qIGN1cnNvciB3YXMganVzdCB3cmFwcHBlZCAqLworCisvKgorICogdGhpcyB2YWx1ZSBpcyB1c2VkIGluIHRoZSBmaXJzdGNoYXIgYW5kIGxhc3RjaGFyIGZpZWxkcyB0byBtYXJrCisgKiB1bmNoYW5nZWQgbGluZXMKKyAqLworI2RlZmluZSBfTk9DSEFOR0UgICAgICAgLTEKKworLyoKKyAqIHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgb2xkaW5kZXggZmllbGQgdG8gbWFyayBsaW5lcyBjcmVhdGVkIGJ5IGluc2VydGlvbnMKKyAqIGFuZCBzY3JvbGxzLgorICovCisjZGVmaW5lIF9ORVdJTkRFWAktMQorCit0eXBlZGVmIHN0cnVjdCBzY3JlZW4gIFNDUkVFTjsKK3R5cGVkZWYgc3RydWN0IF93aW5fc3QgV0lORE9XOworCit0eXBlZGVmCWNodHlwZQlhdHRyX3Q7CQkvKiAuLi5tdXN0IGJlIGF0IGxlYXN0IGFzIHdpZGUgYXMgY2h0eXBlICovCisKKyNpZmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisKKyNpZiBATkNVUlNFU19MSUJVVEY4QAorI2lmZGVmIG1ibGVuCQkJLyogbGlidXRmOC5oIGRlZmluZXMgaXQgdy9vIHVuZGVmaW5pbmcgZmlyc3QgKi8KKyN1bmRlZiBtYmxlbgorI2VuZGlmCisjaW5jbHVkZSA8bGlidXRmOC5oPgorI2VuZGlmCisKKyNpZiBATkVFRF9XQ0hBUl9IQAorI2luY2x1ZGUgPHdjaGFyLmg+CQkvKiAuLi50byBnZXQgbWJzdGF0ZV90LCBldGMuICovCisjZW5kaWYKKworI2lmIEBOQ1VSU0VTX1dDSEFSX1RACit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHdjaGFyX3RATkNVUlNFU19PS19XQ0hBUl9UQDsKKyNlbmRpZgorCisjaWYgQE5DVVJTRVNfV0lOVF9UQAordHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90QE5DVVJTRVNfT0tfV0NIQVJfVEA7CisjZW5kaWYKKworI2RlZmluZSBDQ0hBUldfTUFYCTUKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgYXR0cl90CWF0dHI7CisgICAgd2NoYXJfdAljaGFyc1tDQ0hBUldfTUFYXTsKKyNpZiBATkNVUlNFU19FWFRfQ09MT1JTQAorI3VuZGVmIE5DVVJTRVNfRVhUX0NPTE9SUworI2RlZmluZSBOQ1VSU0VTX0VYVF9DT0xPUlMgQE5DVVJTRVNfUEFUQ0hACisgICAgaW50CQlleHRfY29sb3I7CS8qIGNvbG9yIHBhaXIsIG11c3QgYmUgbW9yZSB0aGFuIDE2LWJpdHMgKi8KKyNlbmRpZgorfQorY2NoYXJfdDsKKworI2VuZGlmIC8qIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgKi8KKworI2lmICFOQ1VSU0VTX09QQVFVRQorc3RydWN0IGxkYXQ7CisKK3N0cnVjdCBfd2luX3N0Cit7CisJTkNVUlNFU19TSVpFX1QgX2N1cnksIF9jdXJ4OyAvKiBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAqLworCisJLyogd2luZG93IGxvY2F0aW9uIGFuZCBzaXplICovCisJTkNVUlNFU19TSVpFX1QgX21heHksIF9tYXh4OyAvKiBtYXhpbXVtcyBvZiB4IGFuZCB5LCBOT1Qgd2luZG93IHNpemUgKi8KKwlOQ1VSU0VTX1NJWkVfVCBfYmVneSwgX2JlZ3g7IC8qIHNjcmVlbiBjb29yZHMgb2YgdXBwZXItbGVmdC1oYW5kIGNvcm5lciAqLworCisJc2hvcnQgICBfZmxhZ3M7CQkvKiB3aW5kb3cgc3RhdGUgZmxhZ3MgKi8KKworCS8qIGF0dHJpYnV0ZSB0cmFja2luZyAqLworCWF0dHJfdCAgX2F0dHJzOwkJLyogY3VycmVudCBhdHRyaWJ1dGUgZm9yIG5vbi1zcGFjZSBjaGFyYWN0ZXIgKi8KKwljaHR5cGUgIF9ia2dkOwkJLyogY3VycmVudCBiYWNrZ3JvdW5kIGNoYXIvYXR0cmlidXRlIHBhaXIgKi8KKworCS8qIG9wdGlvbiB2YWx1ZXMgc2V0IGJ5IHVzZXIgKi8KKwlib29sCV9ub3RpbWVvdXQ7CS8qIG5vIHRpbWUgb3V0IG9uIGZ1bmN0aW9uLWtleSBlbnRyeT8gKi8KKwlib29sCV9jbGVhcjsJCS8qIGNvbnNpZGVyIGFsbCBkYXRhIGluIHRoZSB3aW5kb3cgaW52YWxpZD8gKi8KKwlib29sCV9sZWF2ZW9rOwkvKiBPSyB0byBub3QgcmVzZXQgY3Vyc29yIG9uIGV4aXQ/ICovCisJYm9vbAlfc2Nyb2xsOwkvKiBPSyB0byBzY3JvbGwgdGhpcyB3aW5kb3c/ICovCisJYm9vbAlfaWRsb2s7CQkvKiBPSyB0byB1c2UgaW5zZXJ0L2RlbGV0ZSBsaW5lPyAqLworCWJvb2wJX2lkY29rOwkJLyogT0sgdG8gdXNlIGluc2VydC9kZWxldGUgY2hhcj8gKi8KKwlib29sCV9pbW1lZDsJCS8qIHdpbmRvdyBpbiBpbW1lZCBtb2RlPyAobm90IHlldCB1c2VkKSAqLworCWJvb2wJX3N5bmM7CQkvKiB3aW5kb3cgaW4gc3luYyBtb2RlPyAqLworCWJvb2wJX3VzZV9rZXlwYWQ7CS8qIHByb2Nlc3MgZnVuY3Rpb24ga2V5cyBpbnRvIEtFWV8gc3ltYm9scz8gKi8KKwlpbnQJX2RlbGF5OwkJLyogMCA9IG5vZGVsYXksIDwwID0gYmxvY2tpbmcsID4wID0gZGVsYXkgKi8KKworCXN0cnVjdCBsZGF0ICpfbGluZTsJLyogdGhlIGFjdHVhbCBsaW5lIGRhdGEgKi8KKworCS8qIGdsb2JhbCBzY3JlZW4gc3RhdGUgKi8KKwlOQ1VSU0VTX1NJWkVfVCBfcmVndG9wOwkvKiB0b3AgbGluZSBvZiBzY3JvbGxpbmcgcmVnaW9uICovCisJTkNVUlNFU19TSVpFX1QgX3JlZ2JvdHRvbTsgLyogYm90dG9tIGxpbmUgb2Ygc2Nyb2xsaW5nIHJlZ2lvbiAqLworCisJLyogdGhlc2UgYXJlIHVzZWQgb25seSBpZiB0aGlzIGlzIGEgc3ViLXdpbmRvdyAqLworCWludAlfcGFyeDsJCS8qIHggY29vcmRpbmF0ZSBvZiB0aGlzIHdpbmRvdyBpbiBwYXJlbnQgKi8KKwlpbnQJX3Bhcnk7CQkvKiB5IGNvb3JkaW5hdGUgb2YgdGhpcyB3aW5kb3cgaW4gcGFyZW50ICovCisJV0lORE9XCSpfcGFyZW50OwkvKiBwb2ludGVyIHRvIHBhcmVudCBpZiBhIHN1Yi13aW5kb3cgKi8KKworCS8qIHRoZXNlIGFyZSB1c2VkIG9ubHkgaWYgdGhpcyBpcyBhIHBhZCAqLworCXN0cnVjdCBwZGF0CisJeworCSAgICBOQ1VSU0VTX1NJWkVfVCBfcGFkX3ksICAgICAgX3BhZF94OworCSAgICBOQ1VSU0VTX1NJWkVfVCBfcGFkX3RvcCwgICAgX3BhZF9sZWZ0OworCSAgICBOQ1VSU0VTX1NJWkVfVCBfcGFkX2JvdHRvbSwgX3BhZF9yaWdodDsKKwl9IF9wYWQ7CisKKwlOQ1VSU0VTX1NJWkVfVCBfeW9mZnNldDsgLyogcmVhbCBiZWd5IGlzIF9iZWd5ICsgX3lvZmZzZXQgKi8KKworI2lmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKwljY2hhcl90ICBfYmtncm5kOwkvKiBjdXJyZW50IGJhY2tncm91bmQgY2hhci9hdHRyaWJ1dGUgcGFpciAqLworI2lmIEBOQ1VSU0VTX0VYVF9DT0xPUlNACisJaW50CV9jb2xvcjsJCS8qIGN1cnJlbnQgY29sb3ItcGFpciBmb3Igbm9uLXNwYWNlIGNoYXJhY3RlciAqLworI2VuZGlmCisjZW5kaWYKK307CisjZW5kaWYgLyogTkNVUlNFU19PUEFRVUUgKi8KKworLyoKKyAqIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHN1cHBvcnQgZXZlbnRzLi4uCisgKi8KKyNpZiBATkNVUlNFU19FWFRfRlVOQ1NACisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisjaWYgIWRlZmluZWQoX19CRU9TX18pIHx8IGRlZmluZWQoX19IQUlLVV9fKQorICAgLyogRml4IF9uY190aW1lZF93YWl0KCkgb24gQkVPUy4uLiAqLworIyAgZGVmaW5lIE5DVVJTRVNfRVZFTlRfVkVSU0lPTgkxCisjZW5kaWYJLyogIWRlZmluZWQoX19CRU9TX18pICovCisKKy8qCisgKiBCaXRzIHRvIHNldCBpbiBfbmNfZXZlbnQuZGF0YS5mbGFncworICovCisjICBkZWZpbmUgX05DX0VWRU5UX1RJTUVPVVRfTVNFQwkxCisjICBkZWZpbmUgX05DX0VWRU5UX0ZJTEUJCTIKKyMgIGRlZmluZSBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRQkyCisjICBpZiAwCQkJCQkvKiBOb3Qgc3VwcG9ydGVkIHlldC4uLiAqLworIyAgICBkZWZpbmUgX05DX0VWRU5UX0ZJTEVfV1JJVEFCTEUJNAorIyAgICBkZWZpbmUgX05DX0VWRU5UX0ZJTEVfRVhDRVBUSU9OCTgKKyMgIGVuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IHR5cGU7CisgICAgdW5pb24KKyAgICB7CisJbG9uZyB0aW1lb3V0X21zZWM7CS8qIF9OQ19FVkVOVF9USU1FT1VUX01TRUMgKi8KKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCBmbGFnczsKKwkgICAgaW50IGZkOworCSAgICB1bnNpZ25lZCBpbnQgcmVzdWx0OworCX0gZmV2OwkJCQkvKiBfTkNfRVZFTlRfRklMRSAqLworICAgIH0gZGF0YTsKK30gX25jX2V2ZW50OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBjb3VudDsKKyAgICBpbnQgcmVzdWx0X2ZsYWdzOwkvKiBfTkNfRVZFTlRfVElNRU9VVF9NU0VDIG9yIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFICovCisgICAgX25jX2V2ZW50ICpldmVudHNbMV07Cit9IF9uY19ldmVudGxpc3Q7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRjaF9ldmVudHMoV0lORE9XICosIF9uY19ldmVudGxpc3QgKik7CS8qIGV4cGVyaW1lbnRhbCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2dldG5zdHJfZXZlbnRzKFdJTkRPVyAqLGNoYXIgKixpbnQsX25jX2V2ZW50bGlzdCAqKTsvKiBleHBlcmltZW50YWwgKi8KKworI2VuZGlmIC8qIE5DVVJTRVNfV0dFVENIX0VWRU5UUyAqLworI2VuZGlmIC8qIE5DVVJTRVNfRVhUX0ZVTkNTICovCisKKy8qCisgKiBHQ0MgKGFuZCBzb21lIG90aGVyIGNvbXBpbGVycykgZGVmaW5lICdfX2F0dHJpYnV0ZV9fJzsgd2UncmUgdXNpbmcgdGhpcworICogbWFjcm8gdG8gYWxlcnQgdGhlIGNvbXBpbGVyIHRvIGZsYWcgaW5jb25zaXN0ZW5jaWVzIGluIHByaW50Zi9zY2FuZi1saWtlCisgKiBmdW5jdGlvbiBjYWxscy4gIEp1c3QgaW4gY2FzZSAnX19hdHRyaWJ1dGVfXycgaXNuJ3QgZGVmaW5lZCwgbWFrZSBhIGR1bW15LgorICogT2xkIHZlcnNpb25zIG9mIEcrKyBkbyBub3QgYWNjZXB0IGl0IGFueXdheSwgYXQgbGVhc3Qgbm90IGNvbnNpc3RlbnRseSB3aXRoCisgKiBHQ0MuCisgKi8KKyNpZiAhKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19HTlVHX18pIHx8IGRlZmluZWQoX19hdHRyaWJ1dGVfXykpCisjZGVmaW5lIF9fYXR0cmlidXRlX18ocCkgLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qCisgKiBXZSBjYW5ub3QgZGVmaW5lIHRoZXNlIGluIG5jdXJzZXNfY2ZnLmgsIHNpbmNlIHRoZXkgcmVxdWlyZSBwYXJhbWV0ZXJzIHRvIGJlCisgKiBwYXNzZWQgKHRoYXQgaXMgbm9uLXBvcnRhYmxlKS4gIElmIHlvdSBoYXBwZW4gdG8gYmUgdXNpbmcgZ2NjIHdpdGggd2FybmluZ3MKKyAqIGVuYWJsZWQsIGRlZmluZQorICoJR0NDX1BSSU5URgorICoJR0NDX1NDQU5GCisgKiB0byBpbXByb3ZlIGNoZWNraW5nIG9mIGNhbGxzIHRvIHByaW50dygpLCBldGMuCisgKi8KKyNpZm5kZWYgR0NDX1BSSU5URkxJS0UKKyNpZiBkZWZpbmVkKEdDQ19QUklOVEYpICYmICFkZWZpbmVkKHByaW50ZikKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSAvKm5vdGhpbmcqLworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBHQ0NfU0NBTkZMSUtFCisjaWYgZGVmaW5lZChHQ0NfU0NBTkYpICYmICFkZWZpbmVkKHNjYW5mKQorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgLypub3RoaW5nKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYJR0NDX05PUkVUVVJOCisjZGVmaW5lCUdDQ19OT1JFVFVSTiAvKiBub3RoaW5nICovCisjZW5kaWYKKworI2lmbmRlZglHQ0NfVU5VU0VECisjZGVmaW5lCUdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAgVGhpcyBpcyB0aGUgY29tcGxldGUgWC9PcGVuIEN1cnNlcyBsaXN0IG9mIHJlcXVpcmVkCisgKiBmdW5jdGlvbnMuICBUaG9zZSBtYXJrZWQgYGdlbmVyYXRlZCcgd2lsbCBoYXZlIHNvdXJjZXMgZ2VuZXJhdGVkIGZyb20gdGhlCisgKiBtYWNybyBkZWZpbml0aW9ucyBsYXRlciBpbiB0aGlzIGZpbGUsIGluIG9yZGVyIHRvIHNhdGlzZnkgWFBHNC4yCisgKiByZXF1aXJlbWVudHMuCisgKi8KKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYWRkY2ggKGNvbnN0IGNodHlwZSk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRjaG5zdHIgKGNvbnN0IGNodHlwZSAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRjaHN0ciAoY29uc3QgY2h0eXBlICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYWRkbnN0ciAoY29uc3QgY2hhciAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYWRkc3RyIChjb25zdCBjaGFyICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYXR0cm9mZiAoTkNVUlNFU19BVFRSX1QpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYXR0cm9uIChOQ1VSU0VTX0FUVFJfVCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhdHRyc2V0IChOQ1VSU0VTX0FUVFJfVCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhdHRyX2dldCAoYXR0cl90ICosIHNob3J0ICosIHZvaWQgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYXR0cl9vZmYgKGF0dHJfdCwgdm9pZCAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGF0dHJfb24gKGF0dHJfdCwgdm9pZCAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGF0dHJfc2V0IChhdHRyX3QsIHNob3J0LCB2b2lkICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBiYXVkcmF0ZSAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBiZWVwICAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBia2dkIChjaHR5cGUpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBia2dkc2V0IChjaHR5cGUpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGJvcmRlciAoY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYm94IChXSU5ET1cgKiwgY2h0eXBlLCBjaHR5cGUpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgY2FuX2NoYW5nZV9jb2xvciAodm9pZCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNicmVhayAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjaGdhdCAoaW50LCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNsZWFyICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjbGVhcm9rIChXSU5ET1cgKixib29sKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgY2xydG9ib3QgKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNscnRvZW9sICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjb2xvcl9jb250ZW50IChzaG9ydCxzaG9ydCosc2hvcnQqLHNob3J0Kik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjb2xvcl9zZXQgKHNob3J0LHZvaWQqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIENPTE9SX1BBSVIgKGludCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgY29weXdpbiAoY29uc3QgV0lORE9XKixXSU5ET1cqLGludCxpbnQsaW50LGludCxpbnQsaW50LGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjdXJzX3NldCAoaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlZl9wcm9nX21vZGUgKHZvaWQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBkZWZfc2hlbGxfbW9kZSAodm9pZCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlbGF5X291dHB1dCAoaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlbGNoICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgZGVsc2NyZWVuIChTQ1JFRU4gKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlbHdpbiAoV0lORE9XICopOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVsZXRlbG4gKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgZGVyd2luIChXSU5ET1cgKixpbnQsaW50LGludCxpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZG91cGRhdGUgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBkdXB3aW4gKFdJTkRPVyAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZWNobyAodm9pZCk7CQkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZWNob2NoYXIgKGNvbnN0IGNodHlwZSk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBlcmFzZSAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZW5kd2luICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyKSBlcmFzZWNoYXIgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIGZpbHRlciAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBmbGFzaCAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBmbHVzaGlucCAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKSBnZXRia2dkIChXSU5ET1cgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRjaCAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0bnN0ciAoY2hhciAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0c3RyIChjaGFyICopOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgZ2V0d2luIChGSUxFICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBoYWxmZGVsYXkgKGludCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaGFzX2NvbG9ycyAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaGFzX2ljICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBoYXNfaWwgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaGxpbmUgKGNodHlwZSwgaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgaWRjb2sgKFdJTkRPVyAqLCBib29sKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaWRsb2sgKFdJTkRPVyAqLCBib29sKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIGltbWVkb2sgKFdJTkRPVyAqLCBib29sKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkgaW5jaCAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5jaG5zdHIgKGNodHlwZSAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5jaHN0ciAoY2h0eXBlICopOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgaW5pdHNjciAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbml0X2NvbG9yIChzaG9ydCxzaG9ydCxzaG9ydCxzaG9ydCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbml0X3BhaXIgKHNob3J0LHNob3J0LHNob3J0KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbm5zdHIgKGNoYXIgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc2NoIChjaHR5cGUpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc2RlbGxuIChpbnQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc2VydGxuICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbnNuc3RyIChjb25zdCBjaGFyICosIGludCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbnNzdHIgKGNvbnN0IGNoYXIgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbnN0ciAoY2hhciAqKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbnRyZmx1c2ggKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNlbmR3aW4gKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX2xpbmV0b3VjaGVkIChXSU5ET1cgKixpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc193aW50b3VjaGVkIChXSU5ET1cgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIgKikga2V5bmFtZSAoaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBrZXlwYWQgKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhcikga2lsbGNoYXIgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbGVhdmVvayAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIGxvbmduYW1lICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG1ldGEgKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtb3ZlIChpbnQsIGludCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGRjaCAoaW50LCBpbnQsIGNvbnN0IGNodHlwZSk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12YWRkY2huc3RyIChpbnQsIGludCwgY29uc3QgY2h0eXBlICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGRjaHN0ciAoaW50LCBpbnQsIGNvbnN0IGNodHlwZSAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZG5zdHIgKGludCwgaW50LCBjb25zdCBjaGFyICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGRzdHIgKGludCwgaW50LCBjb25zdCBjaGFyICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmNoZ2F0IChpbnQsIGludCwgaW50LCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12Y3VyIChpbnQsaW50LGludCxpbnQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmRlbGNoIChpbnQsIGludCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZkZXJ3aW4gKFdJTkRPVyAqLCBpbnQsIGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZnZXRjaCAoaW50LCBpbnQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12Z2V0bnN0ciAoaW50LCBpbnQsIGNoYXIgKiwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZnZXRzdHIgKGludCwgaW50LCBjaGFyICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZobGluZSAoaW50LCBpbnQsIGNodHlwZSwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkgbXZpbmNoIChpbnQsIGludCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluY2huc3RyIChpbnQsIGludCwgY2h0eXBlICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbmNoc3RyIChpbnQsIGludCwgY2h0eXBlICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmlubnN0ciAoaW50LCBpbnQsIGNoYXIgKiwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbnNjaCAoaW50LCBpbnQsIGNodHlwZSk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc25zdHIgKGludCwgaW50LCBjb25zdCBjaGFyICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbnNzdHIgKGludCwgaW50LCBjb25zdCBjaGFyICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc3RyIChpbnQsIGludCwgY2hhciAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12cHJpbnR3IChpbnQsaW50LCBjb25zdCBjaGFyICosLi4uKQkJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1BSSU5URkxJS0UoMyw0KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12c2NhbncgKGludCxpbnQsIE5DVVJTRVNfQ09OU1QgY2hhciAqLC4uLikJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1NDQU5GTElLRSgzLDQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ2bGluZSAoaW50LCBpbnQsIGNodHlwZSwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkY2ggKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2h0eXBlKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRjaG5zdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2h0eXBlICosIGludCk7LyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRjaHN0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjaHR5cGUgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkbnN0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjaGFyICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3Y2hnYXQgKFdJTkRPVyAqLCBpbnQsIGludCwgaW50LCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOy8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3ZGVsY2ggKFdJTkRPVyAqLCBpbnQsIGludCk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2dldGNoIChXSU5ET1cgKiwgaW50LCBpbnQpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndnZXRuc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNoYXIgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndnZXRzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY2hhciAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndobGluZSAoV0lORE9XICosIGludCwgaW50LCBjaHR5cGUsIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW4gKFdJTkRPVyAqLGludCxpbnQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKSBtdndpbmNoIChXSU5ET1cgKiwgaW50LCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5jaG5zdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY2h0eXBlICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5jaHN0ciAoV0lORE9XICosIGludCwgaW50LCBjaHR5cGUgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2lubnN0ciAoV0lORE9XICosIGludCwgaW50LCBjaGFyICosIGludCk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luc2NoIChXSU5ET1cgKiwgaW50LCBpbnQsIGNodHlwZSk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luc25zdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luc3N0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjaGFyICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbnN0ciAoV0lORE9XICosIGludCwgaW50LCBjaGFyICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndwcmludHcgKFdJTkRPVyosaW50LGludCwgY29uc3QgY2hhciAqLC4uLikJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1BSSU5URkxJS0UoNCw1KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d3NjYW53IChXSU5ET1cgKixpbnQsaW50LCBOQ1VSU0VTX0NPTlNUIGNoYXIgKiwuLi4pCS8qIGltcGxlbWVudGVkICovCisJCUdDQ19TQ0FORkxJS0UoNCw1KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d3ZsaW5lIChXSU5ET1cgKixpbnQsIGludCwgY2h0eXBlLCBpbnQpOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG5hcG1zIChpbnQpOwkJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgbmV3cGFkIChpbnQsaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikgbmV3dGVybSAoTkNVUlNFU19DT05TVCBjaGFyICosRklMRSAqLEZJTEUgKik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopIG5ld3dpbiAoaW50LGludCxpbnQsaW50KTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbmwgKHZvaWQpOwkJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG5vY2JyZWFrICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG5vZGVsYXkgKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBub2VjaG8gKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbm9ubCAodm9pZCk7CQkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIG5vcWlmbHVzaCAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBub3JhdyAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBub3RpbWVvdXQgKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBvdmVybGF5IChjb25zdCBXSU5ET1cqLFdJTkRPVyAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBvdmVyd3JpdGUgKGNvbnN0IFdJTkRPVyosV0lORE9XICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHBhaXJfY29udGVudCAoc2hvcnQsc2hvcnQqLHNob3J0Kik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgUEFJUl9OVU1CRVIgKGludCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcGVjaG9jaGFyIChXSU5ET1cgKiwgY29uc3QgY2h0eXBlKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwbm91dHJlZnJlc2ggKFdJTkRPVyosaW50LGludCxpbnQsaW50LGludCxpbnQpOy8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwcmVmcmVzaCAoV0lORE9XICosaW50LGludCxpbnQsaW50LGludCxpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcHJpbnR3IChjb25zdCBjaGFyICosLi4uKQkJCS8qIGltcGxlbWVudGVkICovCisJCUdDQ19QUklOVEZMSUtFKDEsMik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwdXR3aW4gKFdJTkRPVyAqLCBGSUxFICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgcWlmbHVzaCAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByYXcgKHZvaWQpOwkJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHJlZHJhd3dpbiAoV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcmVmcmVzaCAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcmVzZXR0eSAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByZXNldF9wcm9nX21vZGUgKHZvaWQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByZXNldF9zaGVsbF9tb2RlICh2b2lkKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcmlwb2ZmbGluZSAoaW50LCBpbnQgKCopKFdJTkRPVyAqLCBpbnQpKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNhdmV0dHkgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2NhbncgKE5DVVJTRVNfQ09OU1QgY2hhciAqLC4uLikJCS8qIGltcGxlbWVudGVkICovCisJCUdDQ19TQ0FORkxJS0UoMSwyKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNjcl9kdW1wIChjb25zdCBjaGFyICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY3JfaW5pdCAoY29uc3QgY2hhciAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2NybCAoaW50KTsJCQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2Nyb2xsIChXSU5ET1cgKik7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2Nyb2xsb2sgKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY3JfcmVzdG9yZSAoY29uc3QgY2hhciAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2NyX3NldCAoY29uc3QgY2hhciAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2V0c2NycmVnIChpbnQsaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoU0NSRUVOICopIHNldF90ZXJtIChTQ1JFRU4gKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19hdHRyb2ZmIChjb25zdCBjaHR5cGUpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfYXR0cl9vZmYgKGNvbnN0IGF0dHJfdCwgdm9pZCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2F0dHJvbiAoY29uc3QgY2h0eXBlKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2F0dHJfb24gKGF0dHJfdCx2b2lkKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfYXR0cnNldCAoY29uc3QgY2h0eXBlKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGF0dHJfdCkgc2xrX2F0dHIgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2F0dHJfc2V0IChjb25zdCBhdHRyX3Qsc2hvcnQsdm9pZCopOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2NsZWFyICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19jb2xvciAoc2hvcnQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2luaXQgKGludCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBzbGtfbGFiZWwgKGludCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfbm91dHJlZnJlc2ggKHZvaWQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfcmVmcmVzaCAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfcmVzdG9yZSAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfc2V0IChpbnQsY29uc3QgY2hhciAqLGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX3RvdWNoICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHN0YW5kb3V0ICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzdGFuZGVuZCAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc3RhcnRfY29sb3IgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBzdWJwYWQgKFdJTkRPVyAqLCBpbnQsIGludCwgaW50LCBpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBzdWJ3aW4gKFdJTkRPVyAqLCBpbnQsIGludCwgaW50LCBpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc3luY29rIChXSU5ET1cgKiwgYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpIHRlcm1hdHRycyAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0ZXJtbmFtZSAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgdGltZW91dCAoaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0b3VjaGxpbmUgKFdJTkRPVyAqLCBpbnQsIGludCk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRvdWNod2luIChXSU5ET1cgKik7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdHlwZWFoZWFkIChpbnQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdW5nZXRjaCAoaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHVudG91Y2h3aW4gKFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB1c2VfZW52IChib29sKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZpZGF0dHIgKGNodHlwZSk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB2aWRwdXRzIChjaHR5cGUsIGludCAoKikoaW50KSk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdmxpbmUgKGNodHlwZSwgaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB2d3ByaW50dyAoV0lORE9XICosIGNvbnN0IGNoYXIgKix2YV9saXN0KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZ3X3ByaW50dyAoV0lORE9XICosIGNvbnN0IGNoYXIgKix2YV9saXN0KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB2d3NjYW53IChXSU5ET1cgKiwgTkNVUlNFU19DT05TVCBjaGFyICosdmFfbGlzdCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB2d19zY2FudyAoV0lORE9XICosIE5DVVJTRVNfQ09OU1QgY2hhciAqLHZhX2xpc3QpOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGRjaCAoV0lORE9XICosIGNvbnN0IGNodHlwZSk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZGNobnN0ciAoV0lORE9XICosY29uc3QgY2h0eXBlICosaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGRjaHN0ciAoV0lORE9XICosY29uc3QgY2h0eXBlICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YWRkbnN0ciAoV0lORE9XICosY29uc3QgY2hhciAqLGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YWRkc3RyIChXSU5ET1cgKixjb25zdCBjaGFyICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YXR0cm9uIChXSU5ET1cgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyb2ZmIChXSU5ET1cgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyc2V0IChXSU5ET1cgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyX2dldCAoV0lORE9XICosIGF0dHJfdCAqLCBzaG9ydCAqLCB2b2lkICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyX29uIChXSU5ET1cgKiwgYXR0cl90LCB2b2lkICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyX29mZiAoV0lORE9XICosIGF0dHJfdCwgdm9pZCAqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyX3NldCAoV0lORE9XICosIGF0dHJfdCwgc2hvcnQsIHZvaWQgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2JrZ2QgKFdJTkRPVyAqLCBjaHR5cGUpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgd2JrZ2RzZXQgKFdJTkRPVyAqLGNodHlwZSk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdib3JkZXIgKFdJTkRPVyAqLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2NoZ2F0IChXSU5ET1cgKiwgaW50LCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOy8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Y2xlYXIgKFdJTkRPVyAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdjbHJ0b2JvdCAoV0lORE9XICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Y2xydG9lb2wgKFdJTkRPVyAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2NvbG9yX3NldCAoV0lORE9XKixzaG9ydCx2b2lkKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIHdjdXJzeW5jdXAgKFdJTkRPVyAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2RlbGNoIChXSU5ET1cgKik7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3ZGVsZXRlbG4gKFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdlY2hvY2hhciAoV0lORE9XICosIGNvbnN0IGNodHlwZSk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2VyYXNlIChXSU5ET1cgKik7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Z2V0Y2ggKFdJTkRPVyAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRuc3RyIChXSU5ET1cgKixjaGFyICosaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Z2V0c3RyIChXSU5ET1cgKiwgY2hhciAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdobGluZSAoV0lORE9XICosIGNodHlwZSwgaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKSB3aW5jaCAoV0lORE9XICopOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luY2huc3RyIChXSU5ET1cgKiwgY2h0eXBlICosIGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luY2hzdHIgKFdJTkRPVyAqLCBjaHR5cGUgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbm5zdHIgKFdJTkRPVyAqLCBjaGFyICosIGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc2NoIChXSU5ET1cgKiwgY2h0eXBlKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc2RlbGxuIChXSU5ET1cgKixpbnQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5zZXJ0bG4gKFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbnNuc3RyIChXSU5ET1cgKiwgY29uc3QgY2hhciAqLGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5zc3RyIChXSU5ET1cgKiwgY29uc3QgY2hhciAqKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc3RyIChXSU5ET1cgKiwgY2hhciAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdtb3ZlIChXSU5ET1cgKixpbnQsaW50KTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd25vdXRyZWZyZXNoIChXSU5ET1cgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdwcmludHcgKFdJTkRPVyAqLCBjb25zdCBjaGFyICosLi4uKQkJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1BSSU5URkxJS0UoMiwzKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdyZWRyYXdsbiAoV0lORE9XICosaW50LGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3JlZnJlc2ggKFdJTkRPVyAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdzY2FudyAoV0lORE9XICosIE5DVVJTRVNfQ09OU1QgY2hhciAqLC4uLikJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1NDQU5GTElLRSgyLDMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3NjcmwgKFdJTkRPVyAqLGludCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdzZXRzY3JyZWcgKFdJTkRPVyAqLGludCxpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdzdGFuZG91dCAoV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3N0YW5kZW5kIChXSU5ET1cgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgd3N5bmNkb3duIChXSU5ET1cgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB3c3luY3VwIChXSU5ET1cgKik7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgd3RpbWVvdXQgKFdJTkRPVyAqLGludCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHd0b3VjaGxuIChXSU5ET1cgKixpbnQsaW50LGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3ZsaW5lIChXSU5ET1cgKixjaHR5cGUsaW50KTsJCS8qIGltcGxlbWVudGVkICovCisKKy8qCisgKiBUaGVzZSBhcmUgYWxzbyBkZWNsYXJlZCBpbiA8dGVybS5oPjoKKyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGlnZXRmbGFnIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGlnZXRudW0gKE5DVVJTRVNfQ09OU1QgY2hhciAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0aWdldHN0ciAoTkNVUlNFU19DT05TVCBjaGFyICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHB1dHAgKGNvbnN0IGNoYXIgKik7CQkJCS8qIGltcGxlbWVudGVkICovCisKKyNpZiBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRwYXJtIChOQ1VSU0VTX0NPTlNUIGNoYXIgKiwgLi4uKTsJLyogc3BlY2lhbCAqLworI2Vsc2UKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRwYXJtIChOQ1VSU0VTX0NPTlNUIGNoYXIgKiwgbG9uZyxsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcpOwkvKiBzcGVjaWFsICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0cGFybV92YXJhcmdzIChOQ1VSU0VTX0NPTlNUIGNoYXIgKiwgLi4uKTsJLyogc3BlY2lhbCAqLworI2VuZGlmCisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbiBYL09wZW4sIGJ1dCB3ZSB1c2UgdGhlbSBpbiBtYWNybyBkZWZpbml0aW9uczoKKyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0YXR0cnMgKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGN1cnggKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGN1cnkgKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGJlZ3ggKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGJlZ3kgKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldG1heHggKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldG1heHkgKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldHBhcnggKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldHBhcnkgKGNvbnN0IFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KKworLyoKKyAqIHZpZF9hdHRyKCkgd2FzIGltcGxlbWVudGVkIG9yaWdpbmFsbHkgYmFzZWQgb24gYSBkcmFmdCBvZiBYL09wZW4gY3Vyc2VzLgorICovCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgdmlkX2F0dHIoYSxwYWlyLG9wdHMpIHZpZGF0dHIoYSkKKyNlbmRpZgorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBleHRlbnNpb25zIC0gbm90IGluIFgvT3BlbiBDdXJzZXMuCisgKi8KKyNpZiBATkNVUlNFU19FWFRfRlVOQ1NACisjdW5kZWYgIE5DVVJTRVNfRVhUX0ZVTkNTCisjZGVmaW5lIE5DVVJTRVNfRVhUX0ZVTkNTIEBOQ1VSU0VTX1BBVENIQAordHlwZWRlZiBpbnQgKCpOQ1VSU0VTX1dJTkRPV19DQikoV0lORE9XICosIHZvaWQgKik7Cit0eXBlZGVmIGludCAoKk5DVVJTRVNfU0NSRUVOX0NCKShTQ1JFRU4gKiwgdm9pZCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc190ZXJtX3Jlc2l6ZWQgKGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIGtleWJvdW5kIChpbnQsIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBjdXJzZXNfdmVyc2lvbiAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMgKGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlZmluZV9rZXkgKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGtleV9kZWZpbmVkIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkga2V5b2sgKGludCwgYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByZXNpemVfdGVybSAoaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcmVzaXpldGVybSAoaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2V0X2VzY2RlbGF5IChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2V0X3RhYnNpemUgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB1c2VfZGVmYXVsdF9jb2xvcnMgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdXNlX2V4dGVuZGVkX25hbWVzIChib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHVzZV9sZWdhY3lfY29kaW5nIChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdXNlX3NjcmVlbiAoU0NSRUVOICosIE5DVVJTRVNfU0NSRUVOX0NCLCB2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdXNlX3dpbmRvdyAoV0lORE9XICosIE5DVVJTRVNfV0lORE9XX0NCLCB2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3Jlc2l6ZSAoV0lORE9XICosIGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBub2ZpbHRlcih2b2lkKTsKKworLyoKKyAqIFRoZXNlIGV4dGVuc2lvbnMgcHJvdmlkZSBhY2Nlc3MgdG8gaW5mb3JtYXRpb24gc3RvcmVkIGluIHRoZSBXSU5ET1cgZXZlbgorICogd2hlbiBOQ1VSU0VTX09QQVFVRSBpcyBzZXQ6CisgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgd2dldHBhcmVudCAoY29uc3QgV0lORE9XICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19jbGVhcmVkIChjb25zdCBXSU5ET1cgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX2lkY29rIChjb25zdCBXSU5ET1cgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19pZGxvayAoY29uc3QgV0lORE9XICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfaW1tZWRvayAoY29uc3QgV0lORE9XICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19rZXlwYWQgKGNvbnN0IFdJTkRPVyAqKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX2xlYXZlb2sgKGNvbnN0IFdJTkRPVyAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfbm9kZWxheSAoY29uc3QgV0lORE9XICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19ub3RpbWVvdXQgKGNvbnN0IFdJTkRPVyAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfc2Nyb2xsb2sgKGNvbnN0IFdJTkRPVyAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfc3luY29rIChjb25zdCBXSU5ET1cgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRzY3JyZWcgKGNvbnN0IFdJTkRPVyAqLCBpbnQgKiwgaW50ICopOyAvKiBnZW5lcmF0ZWQgKi8KKworI2Vsc2UKKyNkZWZpbmUgY3Vyc2VzX3ZlcnNpb24oKSBOQ1VSU0VTX1ZFUlNJT04KKyNlbmRpZgorCisvKiBhdHRyaWJ1dGVzICovCisKKyNkZWZpbmUgTkNVUlNFU19BVFRSX1NISUZUICAgICAgIDgKKyNkZWZpbmUgTkNVUlNFU19CSVRTKG1hc2ssc2hpZnQpICgobWFzaykgPDwgKChzaGlmdCkgKyBOQ1VSU0VTX0FUVFJfU0hJRlQpKQorCisjZGVmaW5lIEFfTk9STUFMCShAY2ZfY3ZfMVVMQCAtIEBjZl9jdl8xVUxAKQorI2RlZmluZSBBX0FUVFJJQlVURVMJTkNVUlNFU19CSVRTKH4oQGNmX2N2XzFVTEAgLSBAY2ZfY3ZfMVVMQCksMCkKKyNkZWZpbmUgQV9DSEFSVEVYVAkoTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDApIC0gQGNmX2N2XzFVTEApCisjZGVmaW5lIEFfQ09MT1IJCU5DVVJTRVNfQklUUygoKEBjZl9jdl8xVUxAKSA8PCA4KSAtIEBjZl9jdl8xVUxALDApCisjZGVmaW5lIEFfU1RBTkRPVVQJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDgpCisjZGVmaW5lIEFfVU5ERVJMSU5FCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCw5KQorI2RlZmluZSBBX1JFVkVSU0UJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDEwKQorI2RlZmluZSBBX0JMSU5LCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTEpCisjZGVmaW5lIEFfRElNCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTIpCisjZGVmaW5lIEFfQk9MRAkJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDEzKQorI2RlZmluZSBBX0FMVENIQVJTRVQJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDE0KQorI2RlZmluZSBBX0lOVklTCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTUpCisjZGVmaW5lIEFfUFJPVEVDVAlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTYpCisjZGVmaW5lIEFfSE9SSVpPTlRBTAlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTcpCisjZGVmaW5lIEFfTEVGVAkJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDE4KQorI2RlZmluZSBBX0xPVwkJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDE5KQorI2RlZmluZSBBX1JJR0hUCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMjApCisjZGVmaW5lIEFfVE9QCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMjEpCisjZGVmaW5lIEFfVkVSVElDQUwJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDIyKQorCisvKgorICogTW9zdCBvZiB0aGUgcHNldWRvIGZ1bmN0aW9ucyBhcmUgbWFjcm9zIHRoYXQgZWl0aGVyIHByb3ZpZGUgY29tcGF0aWJpbGl0eQorICogd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBjdXJzZXMsIG9yIHByb3ZpZGUgaW5saW5lIGZ1bmN0aW9uYWxpdHkgdG8gaW1wcm92ZQorICogcGVyZm9ybWFuY2UuCisgKi8KKworLyoKKyAqIFRoZXNlIHBzZXVkbyBmdW5jdGlvbnMgYXJlIGFsd2F5cyBpbXBsZW1lbnRlZCBhcyBtYWNyb3M6CisgKi8KKworI2RlZmluZSBnZXR5eCh3aW4seSx4KSAgIAkoeSA9IGdldGN1cnkod2luKSwgeCA9IGdldGN1cngod2luKSkKKyNkZWZpbmUgZ2V0YmVneXgod2luLHkseCkJKHkgPSBnZXRiZWd5KHdpbiksIHggPSBnZXRiZWd4KHdpbikpCisjZGVmaW5lIGdldG1heHl4KHdpbix5LHgpCSh5ID0gZ2V0bWF4eSh3aW4pLCB4ID0gZ2V0bWF4eCh3aW4pKQorI2RlZmluZSBnZXRwYXJ5eCh3aW4seSx4KQkoeSA9IGdldHBhcnkod2luKSwgeCA9IGdldHBhcngod2luKSkKKworI2RlZmluZSBnZXRzeXgoeSx4KSBkbyB7IGlmIChuZXdzY3IpIHsgXAorCQkJICAgICBpZiAoaXNfbGVhdmVvayhuZXdzY3IpKSBcCisJCQkJKHkpID0gKHgpID0gLTE7IFwKKwkJCSAgICAgZWxzZSBcCisJCQkJIGdldHl4KG5ld3NjciwoeSksICh4KSk7IFwKKwkJCX0gXAorCQkgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIHNldHN5eCh5LHgpIGRvIHsgaWYgKG5ld3NjcikgeyBcCisJCQkgICAgaWYgKCh5KSA9PSAtMSAmJiAoeCkgPT0gLTEpIFwKKwkJCQlsZWF2ZW9rKG5ld3NjciwgVFJVRSk7IFwKKwkJCSAgICBlbHNlIHsgXAorCQkJCWxlYXZlb2sobmV3c2NyLCBGQUxTRSk7IFwKKwkJCQl3bW92ZShuZXdzY3IsICh5KSwgKHgpKTsgXAorCQkJICAgIH0gXAorCQkJfSBcCisJCSAgICB9IHdoaWxlKDApCisKKyNpZm5kZWYgTkNVUlNFU19OT01BQ1JPUworCisvKgorICogVGhlc2UgbWlzY2VsbGFuZW91cyBwc2V1ZG8gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eToKKyAqLworCisjZGVmaW5lIHdnZXRzdHIodywgcykJCXdnZXRuc3RyKHcsIHMsIC0xKQorI2RlZmluZSBnZXRuc3RyKHMsIG4pCQl3Z2V0bnN0cihzdGRzY3IsIHMsIG4pCisKKyNkZWZpbmUgc2V0dGVybSh0ZXJtKQkJc2V0dXB0ZXJtKHRlcm0sIDEsIChpbnQgKikwKQorCisjZGVmaW5lIGZpeHRlcm0oKQkJcmVzZXRfcHJvZ19tb2RlKCkKKyNkZWZpbmUgcmVzZXR0ZXJtKCkJCXJlc2V0X3NoZWxsX21vZGUoKQorI2RlZmluZSBzYXZldGVybSgpCQlkZWZfcHJvZ19tb2RlKCkKKyNkZWZpbmUgY3Jtb2RlKCkJCWNicmVhaygpCisjZGVmaW5lIG5vY3Jtb2RlKCkJCW5vY2JyZWFrKCkKKyNkZWZpbmUgZ2V0dG1vZGUoKQorCisvKiBJdCBzZWVtcyBvbGRlciBTWVNWIGN1cnNlcyB2ZXJzaW9ucyBkZWZpbmUgdGhlc2UgKi8KKyNpZiAhTkNVUlNFU19PUEFRVUUKKyNkZWZpbmUgZ2V0YXR0cnMod2luKQkJKCh3aW4pID8gKHdpbiktPl9hdHRycyA6IEFfTk9STUFMKQorI2RlZmluZSBnZXRjdXJ4KHdpbikJCSgod2luKSA/ICh3aW4pLT5fY3VyeCA6IEVSUikKKyNkZWZpbmUgZ2V0Y3VyeSh3aW4pCQkoKHdpbikgPyAod2luKS0+X2N1cnkgOiBFUlIpCisjZGVmaW5lIGdldGJlZ3god2luKQkJKCh3aW4pID8gKHdpbiktPl9iZWd4IDogRVJSKQorI2RlZmluZSBnZXRiZWd5KHdpbikJCSgod2luKSA/ICh3aW4pLT5fYmVneSA6IEVSUikKKyNkZWZpbmUgZ2V0bWF4eCh3aW4pCQkoKHdpbikgPyAoKHdpbiktPl9tYXh4ICsgMSkgOiBFUlIpCisjZGVmaW5lIGdldG1heHkod2luKQkJKCh3aW4pID8gKCh3aW4pLT5fbWF4eSArIDEpIDogRVJSKQorI2RlZmluZSBnZXRwYXJ4KHdpbikJCSgod2luKSA/ICh3aW4pLT5fcGFyeCA6IEVSUikKKyNkZWZpbmUgZ2V0cGFyeSh3aW4pCQkoKHdpbikgPyAod2luKS0+X3BhcnkgOiBFUlIpCisjZW5kaWYgLyogTkNVUlNFU19PUEFRVUUgKi8KKworI2RlZmluZSB3c3RhbmRvdXQod2luKSAgICAgIAkod2F0dHJzZXQod2luLEFfU1RBTkRPVVQpKQorI2RlZmluZSB3c3RhbmRlbmQod2luKSAgICAgIAkod2F0dHJzZXQod2luLEFfTk9STUFMKSkKKworI2RlZmluZSB3YXR0cm9uKHdpbixhdCkJCXdhdHRyX29uKHdpbiwgTkNVUlNFU19DQVNUKGF0dHJfdCwgYXQpLCBOVUxMKQorI2RlZmluZSB3YXR0cm9mZih3aW4sYXQpCXdhdHRyX29mZih3aW4sIE5DVVJTRVNfQ0FTVChhdHRyX3QsIGF0KSwgTlVMTCkKKworI2lmICFOQ1VSU0VTX09QQVFVRQorI2lmIGRlZmluZWQoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCkgJiYgQE5DVVJTRVNfRVhUX0NPTE9SU0AKKyNkZWZpbmUgd2F0dHJzZXQod2luLGF0KQkoKHdpbiktPl9jb2xvciA9IFBBSVJfTlVNQkVSKGF0KSwgXAorCQkJCSAod2luKS0+X2F0dHJzID0gKGF0KSkKKyNlbHNlCisjZGVmaW5lIHdhdHRyc2V0KHdpbixhdCkJKCh3aW4pLT5fYXR0cnMgPSAoYXQpKQorI2VuZGlmCisjZW5kaWYgLyogTkNVUlNFU19PUEFRVUUgKi8KKworI2RlZmluZSBzY3JvbGwod2luKQkJd3Njcmwod2luLDEpCisKKyNkZWZpbmUgdG91Y2h3aW4od2luKQkJd3RvdWNobG4oKHdpbiksIDAsIGdldG1heHkod2luKSwgMSkKKyNkZWZpbmUgdG91Y2hsaW5lKHdpbiwgcywgYykJd3RvdWNobG4oKHdpbiksIHMsIGMsIDEpCisjZGVmaW5lIHVudG91Y2h3aW4od2luKQkJd3RvdWNobG4oKHdpbiksIDAsIGdldG1heHkod2luKSwgMCkKKworI2RlZmluZSBib3god2luLCB2LCBoKQkJd2JvcmRlcih3aW4sIHYsIHYsIGgsIGgsIDAsIDAsIDAsIDApCisjZGVmaW5lIGJvcmRlcihscywgcnMsIHRzLCBicywgdGwsIHRyLCBibCwgYnIpCXdib3JkZXIoc3Rkc2NyLCBscywgcnMsIHRzLCBicywgdGwsIHRyLCBibCwgYnIpCisjZGVmaW5lIGhsaW5lKGNoLCBuKQkJd2hsaW5lKHN0ZHNjciwgY2gsIG4pCisjZGVmaW5lIHZsaW5lKGNoLCBuKQkJd3ZsaW5lKHN0ZHNjciwgY2gsIG4pCisKKyNkZWZpbmUgd2luc3RyKHcsIHMpCQl3aW5uc3RyKHcsIHMsIC0xKQorI2RlZmluZSB3aW5jaHN0cih3LCBzKQkJd2luY2huc3RyKHcsIHMsIC0xKQorI2RlZmluZSB3aW5zc3RyKHcsIHMpCQl3aW5zbnN0cih3LCBzLCAtMSkKKworI2lmICFOQ1VSU0VTX09QQVFVRQorI2RlZmluZSByZWRyYXd3aW4od2luKQkJd3JlZHJhd2xuKHdpbiwgMCwgKHdpbiktPl9tYXh5KzEpCisjZW5kaWYgLyogTkNVUlNFU19PUEFRVUUgKi8KKworI2RlZmluZSB3YWRkc3RyKHdpbixzdHIpCXdhZGRuc3RyKHdpbixzdHIsLTEpCisjZGVmaW5lIHdhZGRjaHN0cih3aW4sc3RyKQl3YWRkY2huc3RyKHdpbixzdHIsLTEpCisKKy8qCisgKiBUaGVzZSBhcHBseSB0byB0aGUgZmlyc3QgMjU2IGNvbG9yIHBhaXJzLgorICovCisjZGVmaW5lIENPTE9SX1BBSVIobikJTkNVUlNFU19CSVRTKG4sIDApCisjZGVmaW5lIFBBSVJfTlVNQkVSKGEpCShOQ1VSU0VTX0NBU1QoaW50LCgoKGEpICYgQV9DT0xPUikgPj4gTkNVUlNFU19BVFRSX1NISUZUKSkpCisKKy8qCisgKiBwc2V1ZG8gZnVuY3Rpb25zIGZvciBzdGFuZGFyZCBzY3JlZW4KKyAqLworCisjZGVmaW5lIGFkZGNoKGNoKQkJd2FkZGNoKHN0ZHNjcixjaCkKKyNkZWZpbmUgYWRkY2huc3RyKHN0cixuKQl3YWRkY2huc3RyKHN0ZHNjcixzdHIsbikKKyNkZWZpbmUgYWRkY2hzdHIoc3RyKQkJd2FkZGNoc3RyKHN0ZHNjcixzdHIpCisjZGVmaW5lIGFkZG5zdHIoc3RyLG4pCQl3YWRkbnN0cihzdGRzY3Isc3RyLG4pCisjZGVmaW5lIGFkZHN0cihzdHIpCQl3YWRkbnN0cihzdGRzY3Isc3RyLC0xKQorI2RlZmluZSBhdHRyb2ZmKGF0KQkJd2F0dHJvZmYoc3Rkc2NyLGF0KQorI2RlZmluZSBhdHRyb24oYXQpCQl3YXR0cm9uKHN0ZHNjcixhdCkKKyNkZWZpbmUgYXR0cnNldChhdCkJCXdhdHRyc2V0KHN0ZHNjcixhdCkKKyNkZWZpbmUgYXR0cl9nZXQoYXAsY3AsbykJd2F0dHJfZ2V0KHN0ZHNjcixhcCxjcCxvKQorI2RlZmluZSBhdHRyX29mZihhLG8pCQl3YXR0cl9vZmYoc3Rkc2NyLGEsbykKKyNkZWZpbmUgYXR0cl9vbihhLG8pCQl3YXR0cl9vbihzdGRzY3IsYSxvKQorI2RlZmluZSBhdHRyX3NldChhLGMsbykJCXdhdHRyX3NldChzdGRzY3IsYSxjLG8pCisjZGVmaW5lIGJrZ2QoY2gpCQl3YmtnZChzdGRzY3IsY2gpCisjZGVmaW5lIGJrZ2RzZXQoY2gpCQl3YmtnZHNldChzdGRzY3IsY2gpCisjZGVmaW5lIGNoZ2F0KG4sYSxjLG8pCQl3Y2hnYXQoc3Rkc2NyLG4sYSxjLG8pCisjZGVmaW5lIGNsZWFyKCkJCQl3Y2xlYXIoc3Rkc2NyKQorI2RlZmluZSBjbHJ0b2JvdCgpCQl3Y2xydG9ib3Qoc3Rkc2NyKQorI2RlZmluZSBjbHJ0b2VvbCgpCQl3Y2xydG9lb2woc3Rkc2NyKQorI2RlZmluZSBjb2xvcl9zZXQoYyxvKQkJd2NvbG9yX3NldChzdGRzY3IsYyxvKQorI2RlZmluZSBkZWxjaCgpCQkJd2RlbGNoKHN0ZHNjcikKKyNkZWZpbmUgZGVsZXRlbG4oKQkJd2luc2RlbGxuKHN0ZHNjciwtMSkKKyNkZWZpbmUgZWNob2NoYXIoYykJCXdlY2hvY2hhcihzdGRzY3IsYykKKyNkZWZpbmUgZXJhc2UoKQkJCXdlcmFzZShzdGRzY3IpCisjZGVmaW5lIGdldGNoKCkJCQl3Z2V0Y2goc3Rkc2NyKQorI2RlZmluZSBnZXRzdHIoc3RyKQkJd2dldHN0cihzdGRzY3Isc3RyKQorI2RlZmluZSBpbmNoKCkJCQl3aW5jaChzdGRzY3IpCisjZGVmaW5lIGluY2huc3RyKHMsbikJCXdpbmNobnN0cihzdGRzY3IscyxuKQorI2RlZmluZSBpbmNoc3RyKHMpCQl3aW5jaHN0cihzdGRzY3IscykKKyNkZWZpbmUgaW5uc3RyKHMsbikJCXdpbm5zdHIoc3Rkc2NyLHMsbikKKyNkZWZpbmUgaW5zY2goYykJCXdpbnNjaChzdGRzY3IsYykKKyNkZWZpbmUgaW5zZGVsbG4obikJCXdpbnNkZWxsbihzdGRzY3IsbikKKyNkZWZpbmUgaW5zZXJ0bG4oKQkJd2luc2RlbGxuKHN0ZHNjciwxKQorI2RlZmluZSBpbnNuc3RyKHMsbikJCXdpbnNuc3RyKHN0ZHNjcixzLG4pCisjZGVmaW5lIGluc3N0cihzKQkJd2luc3N0cihzdGRzY3IscykKKyNkZWZpbmUgaW5zdHIocykJCXdpbnN0cihzdGRzY3IscykKKyNkZWZpbmUgbW92ZSh5LHgpCQl3bW92ZShzdGRzY3IseSx4KQorI2RlZmluZSByZWZyZXNoKCkJCXdyZWZyZXNoKHN0ZHNjcikKKyNkZWZpbmUgc2NybChuKQkJCXdzY3JsKHN0ZHNjcixuKQorI2RlZmluZSBzZXRzY3JyZWcodCxiKQkJd3NldHNjcnJlZyhzdGRzY3IsdCxiKQorI2RlZmluZSBzdGFuZGVuZCgpCQl3c3RhbmRlbmQoc3Rkc2NyKQorI2RlZmluZSBzdGFuZG91dCgpCQl3c3RhbmRvdXQoc3Rkc2NyKQorI2RlZmluZSB0aW1lb3V0KGRlbGF5KQkJd3RpbWVvdXQoc3Rkc2NyLGRlbGF5KQorI2RlZmluZSB3ZGVsZXRlbG4od2luKQkJd2luc2RlbGxuKHdpbiwtMSkKKyNkZWZpbmUgd2luc2VydGxuKHdpbikJCXdpbnNkZWxsbih3aW4sMSkKKworLyoKKyAqIG12IGZ1bmN0aW9ucworICovCisKKyNkZWZpbmUgbXZ3YWRkY2god2luLHkseCxjaCkJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkY2god2luLGNoKSkKKyNkZWZpbmUgbXZ3YWRkY2huc3RyKHdpbix5LHgsc3RyLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkY2huc3RyKHdpbixzdHIsbikpCisjZGVmaW5lIG12d2FkZGNoc3RyKHdpbix5LHgsc3RyKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2FkZGNobnN0cih3aW4sc3RyLC0xKSkKKyNkZWZpbmUgbXZ3YWRkbnN0cih3aW4seSx4LHN0cixuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2FkZG5zdHIod2luLHN0cixuKSkKKyNkZWZpbmUgbXZ3YWRkc3RyKHdpbix5LHgsc3RyKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGRuc3RyKHdpbixzdHIsLTEpKQorI2RlZmluZSBtdndkZWxjaCh3aW4seSx4KQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdkZWxjaCh3aW4pKQorI2RlZmluZSBtdndjaGdhdCh3aW4seSx4LG4sYSxjLG8pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3Y2hnYXQod2luLG4sYSxjLG8pKQorI2RlZmluZSBtdndnZXRjaCh3aW4seSx4KQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdnZXRjaCh3aW4pKQorI2RlZmluZSBtdndnZXRuc3RyKHdpbix5LHgsc3RyLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3Z2V0bnN0cih3aW4sc3RyLG4pKQorI2RlZmluZSBtdndnZXRzdHIod2luLHkseCxzdHIpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2dldHN0cih3aW4sc3RyKSkKKyNkZWZpbmUgbXZ3aGxpbmUod2luLHkseCxjLG4pCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2hsaW5lKHdpbixjLG4pKQorI2RlZmluZSBtdndpbmNoKHdpbix5LHgpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gTkNVUlNFU19DQVNUKGNodHlwZSwgRVJSKSA6IHdpbmNoKHdpbikpCisjZGVmaW5lIG12d2luY2huc3RyKHdpbix5LHgscyxuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luY2huc3RyKHdpbixzLG4pKQorI2RlZmluZSBtdndpbmNoc3RyKHdpbix5LHgscykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5jaHN0cih3aW4scykpCisjZGVmaW5lIG12d2lubnN0cih3aW4seSx4LHMsbikJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5uc3RyKHdpbixzLG4pKQorI2RlZmluZSBtdndpbnNjaCh3aW4seSx4LGMpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luc2NoKHdpbixjKSkKKyNkZWZpbmUgbXZ3aW5zbnN0cih3aW4seSx4LHMsbikJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5zbnN0cih3aW4scyxuKSkKKyNkZWZpbmUgbXZ3aW5zc3RyKHdpbix5LHgscykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5zc3RyKHdpbixzKSkKKyNkZWZpbmUgbXZ3aW5zdHIod2luLHkseCxzKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbnN0cih3aW4scykpCisjZGVmaW5lIG12d3ZsaW5lKHdpbix5LHgsYyxuKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHd2bGluZSh3aW4sYyxuKSkKKworI2RlZmluZSBtdmFkZGNoKHkseCxjaCkJCQltdndhZGRjaChzdGRzY3IseSx4LGNoKQorI2RlZmluZSBtdmFkZGNobnN0cih5LHgsc3RyLG4pCQltdndhZGRjaG5zdHIoc3Rkc2NyLHkseCxzdHIsbikKKyNkZWZpbmUgbXZhZGRjaHN0cih5LHgsc3RyKQkJbXZ3YWRkY2hzdHIoc3Rkc2NyLHkseCxzdHIpCisjZGVmaW5lIG12YWRkbnN0cih5LHgsc3RyLG4pCQltdndhZGRuc3RyKHN0ZHNjcix5LHgsc3RyLG4pCisjZGVmaW5lIG12YWRkc3RyKHkseCxzdHIpCQltdndhZGRzdHIoc3Rkc2NyLHkseCxzdHIpCisjZGVmaW5lIG12Y2hnYXQoeSx4LG4sYSxjLG8pCQltdndjaGdhdChzdGRzY3IseSx4LG4sYSxjLG8pCisjZGVmaW5lIG12ZGVsY2goeSx4KQkJCW12d2RlbGNoKHN0ZHNjcix5LHgpCisjZGVmaW5lIG12Z2V0Y2goeSx4KQkJCW12d2dldGNoKHN0ZHNjcix5LHgpCisjZGVmaW5lIG12Z2V0bnN0cih5LHgsc3RyLG4pCQltdndnZXRuc3RyKHN0ZHNjcix5LHgsc3RyLG4pCisjZGVmaW5lIG12Z2V0c3RyKHkseCxzdHIpCQltdndnZXRzdHIoc3Rkc2NyLHkseCxzdHIpCisjZGVmaW5lIG12aGxpbmUoeSx4LGMsbikJCW12d2hsaW5lKHN0ZHNjcix5LHgsYyxuKQorI2RlZmluZSBtdmluY2goeSx4KQkJCW12d2luY2goc3Rkc2NyLHkseCkKKyNkZWZpbmUgbXZpbmNobnN0cih5LHgscyxuKQkJbXZ3aW5jaG5zdHIoc3Rkc2NyLHkseCxzLG4pCisjZGVmaW5lIG12aW5jaHN0cih5LHgscykJCW12d2luY2hzdHIoc3Rkc2NyLHkseCxzKQorI2RlZmluZSBtdmlubnN0cih5LHgscyxuKQkJbXZ3aW5uc3RyKHN0ZHNjcix5LHgscyxuKQorI2RlZmluZSBtdmluc2NoKHkseCxjKQkJCW12d2luc2NoKHN0ZHNjcix5LHgsYykKKyNkZWZpbmUgbXZpbnNuc3RyKHkseCxzLG4pCQltdndpbnNuc3RyKHN0ZHNjcix5LHgscyxuKQorI2RlZmluZSBtdmluc3N0cih5LHgscykJCQltdndpbnNzdHIoc3Rkc2NyLHkseCxzKQorI2RlZmluZSBtdmluc3RyKHkseCxzKQkJCW12d2luc3RyKHN0ZHNjcix5LHgscykKKyNkZWZpbmUgbXZ2bGluZSh5LHgsYyxuKQkJbXZ3dmxpbmUoc3Rkc2NyLHkseCxjLG4pCisKKy8qCisgKiBTb21lIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCB0aGUgZXh0ZW5zaW9ucy4KKyAqLworI2lmICFOQ1VSU0VTX09QQVFVRQorI2RlZmluZSBnZXRia2dkKHdpbikgICAgICAgICAgICAgICAgICAgICgod2luKS0+X2JrZ2QpCisjZW5kaWYgLyogTkNVUlNFU19PUEFRVUUgKi8KKworI2RlZmluZSBzbGtfYXR0cl9vZmYoYSx2KQkJKCh2KSA/IEVSUiA6IHNsa19hdHRyb2ZmKGEpKQorI2RlZmluZSBzbGtfYXR0cl9vbihhLHYpCQkoKHYpID8gRVJSIDogc2xrX2F0dHJvbihhKSkKKworI2lmICFOQ1VSU0VTX09QQVFVRQorI2lmIGRlZmluZWQoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCkgJiYgQE5DVVJTRVNfRVhUX0NPTE9SU0AKKyNkZWZpbmUgd2F0dHJfc2V0KHdpbixhLHAsb3B0cykJCSgod2luKS0+X2F0dHJzID0gKChhKSAmIH5BX0NPTE9SKSwgXAorCQkJCQkgKHdpbiktPl9jb2xvciA9IChwKSwgXAorCQkJCQkgT0spCisjZGVmaW5lIHdhdHRyX2dldCh3aW4sYSxwLG9wdHMpCQkoKHZvaWQpKChhKSAhPSAodm9pZCAqKTAgJiYgKCooYSkgPSAod2luKS0+X2F0dHJzKSksIFwKKwkJCQkJICh2b2lkKSgocCkgIT0gKHZvaWQgKikwICYmICgqKHApID0gKHdpbiktPl9jb2xvcikpLCBcCisJCQkJCSBPSykKKyNlbHNlCisjZGVmaW5lIHdhdHRyX3NldCh3aW4sYSxwLG9wdHMpCQkoKHdpbiktPl9hdHRycyA9ICgoKGEpICYgfkFfQ09MT1IpIHwgQ09MT1JfUEFJUihwKSksIE9LKQorI2RlZmluZSB3YXR0cl9nZXQod2luLGEscCxvcHRzKQkJKCh2b2lkKSgoYSkgIT0gKHZvaWQgKikwICYmICgqKGEpID0gKHdpbiktPl9hdHRycykpLCBcCisJCQkJCSAodm9pZCkoKHApICE9ICh2b2lkICopMCAmJiAoKihwKSA9IFBBSVJfTlVNQkVSKCh3aW4pLT5fYXR0cnMpKSksIFwKKwkJCQkJIE9LKQorI2VuZGlmCisjZW5kaWYgLyogTkNVUlNFU19PUEFRVUUgKi8KKworLyoKKyAqIFgvT3BlbiBjdXJzZXMgZGVwcmVjYXRlcyBTVnI0IHZ3cHJpbnR3L3Z3c2NhbncsIHdoaWNoIGFyZSBzdXBwb3NlZCB0byB1c2UKKyAqIHZhcmFyZ3MuaC4gIEl0IGFkZHMgbmV3IGNhbGxzIHZ3X3ByaW50dy92d19zY2Fudywgd2hpY2ggYXJlIHN1cHBvc2VkIHRvCisgKiB1c2UgUE9TSVggc3RkYXJnLmguICBUaGUgbmN1cnNlcyB2ZXJzaW9ucyBvZiB2d3ByaW50dy92d3NjYW53IGFscmVhZHkKKyAqIHVzZSBzdGRhcmcuaCwgc28uLi4KKyAqLworI2RlZmluZSB2d19wcmludHcJCXZ3cHJpbnR3CisjZGVmaW5lIHZ3X3NjYW53CQl2d3NjYW53CisKKy8qCisgKiBFeHBvcnQgZmFsbGJhY2sgZnVuY3Rpb24gZm9yIHVzZSBpbiBDKysgYmluZGluZy4KKyAqLworI2lmICFASEFWRV9WU1NDQU5GQAorI2RlZmluZSB2c3NjYW5mKGEsYixjKSBfbmNfdnNzY2FuZihhLGIsYykKK05DVVJTRVNfRVhQT1JUKGludCkgdnNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisjZW5kaWYKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhcmUgZXh0ZW5zaW9ucyAtIG5vdCBpbiBYL09wZW4gQ3Vyc2VzLgorICovCisjaWYgQE5DVVJTRVNfRVhUX0ZVTkNTQAorI2lmICFOQ1VSU0VTX09QQVFVRQorI2RlZmluZSBpc19jbGVhcmVkKHdpbikJCSgod2luKS0+X2NsZWFyKQorI2RlZmluZSBpc19pZGNvayh3aW4pCQkoKHdpbiktPl9pZGNvaykKKyNkZWZpbmUgaXNfaWRsb2sod2luKQkJKCh3aW4pLT5faWRsb2spCisjZGVmaW5lIGlzX2ltbWVkb2sod2luKQkJKCh3aW4pLT5faW1tZWQpCisjZGVmaW5lIGlzX2tleXBhZCh3aW4pCQkoKHdpbiktPl91c2Vfa2V5cGFkKQorI2RlZmluZSBpc19sZWF2ZW9rKHdpbikJCSgod2luKS0+X2xlYXZlb2spCisjZGVmaW5lIGlzX25vZGVsYXkod2luKQkJKCh3aW4pLT5fZGVsYXkgPT0gMCkKKyNkZWZpbmUgaXNfbm90aW1lb3V0KHdpbikJKCh3aW4pLT5fbm90aW1lb3V0KQorI2RlZmluZSBpc19zY3JvbGxvayh3aW4pCSgod2luKS0+X3Njcm9sbCkKKyNkZWZpbmUgaXNfc3luY29rKHdpbikJCSgod2luKS0+X3N5bmMpCisjZGVmaW5lIHdnZXRwYXJlbnQod2luKQkJKCh3aW4pID8gKHdpbiktPl9wYXJlbnQgOiAwKQorI2RlZmluZSB3Z2V0c2NycmVnKHdpbix0LGIpCSgod2luKSA/ICgqKHQpID0gKHdpbiktPl9yZWd0b3AsICooYikgPSAod2luKS0+X3JlZ2JvdHRvbSwgT0spIDogRVJSKQorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIE5DVVJTRVNfTk9NQUNST1MgKi8KKworLyoKKyAqIFB1YmxpYyB2YXJpYWJsZXMuCisgKgorICogTm90ZXM6CisgKglhLiBFU0NERUxBWSB3YXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUgdW5kZXIgQUlYIGN1cnNlcy4KKyAqCSAgIEl0IGdpdmVzIHRoZSBFU0MgZXhwaXJlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLgorICoJYi4gdHR5dHlwZSBpcyBuZWVkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAqLworI2lmIEBjZl9jdl9lbmFibGVfcmVlbnRyYW50QAorCitOQ1VSU0VTX1dSQVBQRURfVkFSKFdJTkRPVyAqLCBjdXJzY3IpOworTkNVUlNFU19XUkFQUEVEX1ZBUihXSU5ET1cgKiwgbmV3c2NyKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoV0lORE9XICosIHN0ZHNjcik7CitOQ1VSU0VTX1dSQVBQRURfVkFSKGNoYXIgKiwgdHR5dHlwZSk7CitOQ1VSU0VTX1dSQVBQRURfVkFSKGludCwgQ09MT1JTKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoaW50LCBDT0xPUl9QQUlSUyk7CitOQ1VSU0VTX1dSQVBQRURfVkFSKGludCwgQ09MUyk7CitOQ1VSU0VTX1dSQVBQRURfVkFSKGludCwgRVNDREVMQVkpOworTkNVUlNFU19XUkFQUEVEX1ZBUihpbnQsIExJTkVTKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoaW50LCBUQUJTSVpFKTsKKworI2RlZmluZSBjdXJzY3IgICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoY3Vyc2NyKCkpCisjZGVmaW5lIG5ld3NjciAgICAgIE5DVVJTRVNfUFVCTElDX1ZBUihuZXdzY3IoKSkKKyNkZWZpbmUgc3Rkc2NyICAgICAgTkNVUlNFU19QVUJMSUNfVkFSKHN0ZHNjcigpKQorI2RlZmluZSB0dHl0eXBlICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIodHR5dHlwZSgpKQorI2RlZmluZSBDT0xPUlMgICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoQ09MT1JTKCkpCisjZGVmaW5lIENPTE9SX1BBSVJTIE5DVVJTRVNfUFVCTElDX1ZBUihDT0xPUl9QQUlSUygpKQorI2RlZmluZSBDT0xTICAgICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoQ09MUygpKQorI2RlZmluZSBFU0NERUxBWSAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoRVNDREVMQVkoKSkKKyNkZWZpbmUgTElORVMgICAgICAgTkNVUlNFU19QVUJMSUNfVkFSKExJTkVTKCkpCisjZGVmaW5lIFRBQlNJWkUgICAgIE5DVVJTRVNfUFVCTElDX1ZBUihUQUJTSVpFKCkpCisKKyNlbHNlCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoV0lORE9XICopIGN1cnNjcjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoV0lORE9XICopIG5ld3NjcjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoV0lORE9XICopIHN0ZHNjcjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhcikgdHR5dHlwZVtdOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIENPTE9SUzsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBDT0xPUl9QQUlSUzsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBDT0xTOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIEVTQ0RFTEFZOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIExJTkVTOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIFRBQlNJWkU7CisKKyNlbmRpZgorCisvKgorICogUHNldWRvLWNoYXJhY3RlciB0b2tlbnMgb3V0c2lkZSBBU0NJSSByYW5nZS4gIFRoZSBjdXJzZXMgd2dldGNoKCkgZnVuY3Rpb24KKyAqIHdpbGwgcmV0dXJuIGFueSBnaXZlbiBvbmUgb2YgdGhlc2Ugb25seSBpZiB0aGUgY29ycmVzcG9uZGluZyBrLSBjYXBhYmlsaXR5CisgKiBpcyBkZWZpbmVkIGluIHlvdXIgdGVybWluYWwncyB0ZXJtaW5mbyBlbnRyeS4KKyAqCisgKiBTb21lIGtleXMgKEtFWV9BMSwgZXRjKSBhcmUgYXJyYW5nZWQgbGlrZSB0aGlzOgorICoJYTEgICAgIHVwICAgIGEzCisgKglsZWZ0ICAgYjIgICAgcmlnaHQKKyAqCWMxICAgICBkb3duICBjMworICoKKyAqIEEgZmV3IGtleSBjb2RlcyBkbyBub3QgZGVwZW5kIHVwb24gdGhlIHRlcm1pbmZvIGVudHJ5LgorICovCisjZGVmaW5lIEtFWV9DT0RFX1lFUwkwNDAwCQkvKiBBIHdjaGFyX3QgY29udGFpbnMgYSBrZXkgY29kZSAqLworI2RlZmluZSBLRVlfTUlOCQkwNDAxCQkvKiBNaW5pbXVtIGN1cnNlcyBrZXkgKi8KKyNkZWZpbmUgS0VZX0JSRUFLCTA0MDEJCS8qIEJyZWFrIGtleSAodW5yZWxpYWJsZSkgKi8KKyNkZWZpbmUgS0VZX1NSRVNFVAkwNTMwCQkvKiBTb2Z0IChwYXJ0aWFsKSByZXNldCAodW5yZWxpYWJsZSkgKi8KKyNkZWZpbmUgS0VZX1JFU0VUCTA1MzEJCS8qIFJlc2V0IG9yIGhhcmQgcmVzZXQgKHVucmVsaWFibGUpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2N1cnNlcy50YWlsIGIvaW5jbHVkZS9jdXJzZXMudGFpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY3YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jdXJzZXMudGFpbApAQCAtMCwwICsxLDE3OSBAQAorLyogJElkOiBjdXJzZXMudGFpbCx2IDEuMTYgMjAwOC8wNy8wNSAyMDoyMDozOCB0b20gRXhwICQgKi8KKy8qCisgKiB2aWxlOmNtb2RlOgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbmN1cnNlcywgZGVzaWduZWQgdG8gYmUgYXBwZW5kZWQgYWZ0ZXIgY3Vyc2VzLmguaW4KKyAqIChzZWUgdGhhdCBmaWxlIGZvciB0aGUgcmVsZXZhbnQgY29weXJpZ2h0KS4KKyAqLworCisvKiBtb3VzZSBpbnRlcmZhY2UgKi8KKworI2lmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiA+IDEKKyNkZWZpbmUgTkNVUlNFU19NT1VTRV9NQVNLKGIsbSkgKChtKSA8PCAoKChiKSAtIDEpICogNSkpCisjZWxzZQorI2RlZmluZSBOQ1VSU0VTX01PVVNFX01BU0soYixtKSAoKG0pIDw8ICgoKGIpIC0gMSkgKiA2KSkKKyNlbmRpZgorCisjZGVmaW5lCU5DVVJTRVNfQlVUVE9OX1JFTEVBU0VECTAwMUwKKyNkZWZpbmUJTkNVUlNFU19CVVRUT05fUFJFU1NFRAkwMDJMCisjZGVmaW5lCU5DVVJTRVNfQlVUVE9OX0NMSUNLRUQJMDA0TAorI2RlZmluZQlOQ1VSU0VTX0RPVUJMRV9DTElDS0VECTAxMEwKKyNkZWZpbmUJTkNVUlNFU19UUklQTEVfQ0xJQ0tFRAkwMjBMCisjZGVmaW5lCU5DVVJTRVNfUkVTRVJWRURfRVZFTlQJMDQwTAorCisvKiBldmVudCBtYXNrcyAqLworI2RlZmluZQlCVVRUT04xX1JFTEVBU0VECU5DVVJTRVNfTU9VU0VfTUFTSygxLCBOQ1VSU0VTX0JVVFRPTl9SRUxFQVNFRCkKKyNkZWZpbmUJQlVUVE9OMV9QUkVTU0VECQlOQ1VSU0VTX01PVVNFX01BU0soMSwgTkNVUlNFU19CVVRUT05fUFJFU1NFRCkKKyNkZWZpbmUJQlVUVE9OMV9DTElDS0VECQlOQ1VSU0VTX01PVVNFX01BU0soMSwgTkNVUlNFU19CVVRUT05fQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soMSwgTkNVUlNFU19ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soMSwgTkNVUlNFU19UUklQTEVfQ0xJQ0tFRCkKKworI2RlZmluZQlCVVRUT04yX1JFTEVBU0VECU5DVVJTRVNfTU9VU0VfTUFTSygyLCBOQ1VSU0VTX0JVVFRPTl9SRUxFQVNFRCkKKyNkZWZpbmUJQlVUVE9OMl9QUkVTU0VECQlOQ1VSU0VTX01PVVNFX01BU0soMiwgTkNVUlNFU19CVVRUT05fUFJFU1NFRCkKKyNkZWZpbmUJQlVUVE9OMl9DTElDS0VECQlOQ1VSU0VTX01PVVNFX01BU0soMiwgTkNVUlNFU19CVVRUT05fQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soMiwgTkNVUlNFU19ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soMiwgTkNVUlNFU19UUklQTEVfQ0xJQ0tFRCkKKworI2RlZmluZQlCVVRUT04zX1JFTEVBU0VECU5DVVJTRVNfTU9VU0VfTUFTSygzLCBOQ1VSU0VTX0JVVFRPTl9SRUxFQVNFRCkKKyNkZWZpbmUJQlVUVE9OM19QUkVTU0VECQlOQ1VSU0VTX01PVVNFX01BU0soMywgTkNVUlNFU19CVVRUT05fUFJFU1NFRCkKKyNkZWZpbmUJQlVUVE9OM19DTElDS0VECQlOQ1VSU0VTX01PVVNFX01BU0soMywgTkNVUlNFU19CVVRUT05fQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soMywgTkNVUlNFU19ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9OM19UUklQTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soMywgTkNVUlNFU19UUklQTEVfQ0xJQ0tFRCkKKworI2RlZmluZQlCVVRUT040X1JFTEVBU0VECU5DVVJTRVNfTU9VU0VfTUFTSyg0LCBOQ1VSU0VTX0JVVFRPTl9SRUxFQVNFRCkKKyNkZWZpbmUJQlVUVE9ONF9QUkVTU0VECQlOQ1VSU0VTX01PVVNFX01BU0soNCwgTkNVUlNFU19CVVRUT05fUFJFU1NFRCkKKyNkZWZpbmUJQlVUVE9ONF9DTElDS0VECQlOQ1VSU0VTX01PVVNFX01BU0soNCwgTkNVUlNFU19CVVRUT05fQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soNCwgTkNVUlNFU19ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soNCwgTkNVUlNFU19UUklQTEVfQ0xJQ0tFRCkKKworLyoKKyAqIEluIDMyIGJpdHMgdGhlIHZlcnNpb24tMSBzY2hlbWUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggc3BhY2UgZm9yIGEgNXRoCisgKiBidXR0b24sIHVubGVzcyB3ZSBjaG9vc2UgdG8gY2hhbmdlIHRoZSBBQkkgYnkgb21pdHRpbmcgdGhlIHJlc2VydmVkLWV2ZW50cy4KKyAqLworI2lmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiA+IDEKKworI2RlZmluZQlCVVRUT041X1JFTEVBU0VECU5DVVJTRVNfTU9VU0VfTUFTSyg1LCBOQ1VSU0VTX0JVVFRPTl9SRUxFQVNFRCkKKyNkZWZpbmUJQlVUVE9ONV9QUkVTU0VECQlOQ1VSU0VTX01PVVNFX01BU0soNSwgTkNVUlNFU19CVVRUT05fUFJFU1NFRCkKKyNkZWZpbmUJQlVUVE9ONV9DTElDS0VECQlOQ1VSU0VTX01PVVNFX01BU0soNSwgTkNVUlNFU19CVVRUT05fQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9ONV9ET1VCTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soNSwgTkNVUlNFU19ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUJQlVUVE9ONV9UUklQTEVfQ0xJQ0tFRAlOQ1VSU0VTX01PVVNFX01BU0soNSwgTkNVUlNFU19UUklQTEVfQ0xJQ0tFRCkKKworI2RlZmluZQlCVVRUT05fQ1RSTAkJTkNVUlNFU19NT1VTRV9NQVNLKDYsIDAwMDFMKQorI2RlZmluZQlCVVRUT05fU0hJRlQJCU5DVVJTRVNfTU9VU0VfTUFTSyg2LCAwMDAyTCkKKyNkZWZpbmUJQlVUVE9OX0FMVAkJTkNVUlNFU19NT1VTRV9NQVNLKDYsIDAwMDRMKQorI2RlZmluZQlSRVBPUlRfTU9VU0VfUE9TSVRJT04JTkNVUlNFU19NT1VTRV9NQVNLKDYsIDAwMTBMKQorCisjZWxzZQorCisjZGVmaW5lCUJVVFRPTjFfUkVTRVJWRURfRVZFTlQJTkNVUlNFU19NT1VTRV9NQVNLKDEsIE5DVVJTRVNfUkVTRVJWRURfRVZFTlQpCisjZGVmaW5lCUJVVFRPTjJfUkVTRVJWRURfRVZFTlQJTkNVUlNFU19NT1VTRV9NQVNLKDIsIE5DVVJTRVNfUkVTRVJWRURfRVZFTlQpCisjZGVmaW5lCUJVVFRPTjNfUkVTRVJWRURfRVZFTlQJTkNVUlNFU19NT1VTRV9NQVNLKDMsIE5DVVJTRVNfUkVTRVJWRURfRVZFTlQpCisjZGVmaW5lCUJVVFRPTjRfUkVTRVJWRURfRVZFTlQJTkNVUlNFU19NT1VTRV9NQVNLKDQsIE5DVVJTRVNfUkVTRVJWRURfRVZFTlQpCisKKyNkZWZpbmUJQlVUVE9OX0NUUkwJCU5DVVJTRVNfTU9VU0VfTUFTSyg1LCAwMDAxTCkKKyNkZWZpbmUJQlVUVE9OX1NISUZUCQlOQ1VSU0VTX01PVVNFX01BU0soNSwgMDAwMkwpCisjZGVmaW5lCUJVVFRPTl9BTFQJCU5DVVJTRVNfTU9VU0VfTUFTSyg1LCAwMDA0TCkKKyNkZWZpbmUJUkVQT1JUX01PVVNFX1BPU0lUSU9OCU5DVVJTRVNfTU9VU0VfTUFTSyg1LCAwMDEwTCkKKworI2VuZGlmCisKKyNkZWZpbmUJQUxMX01PVVNFX0VWRU5UUwkoUkVQT1JUX01PVVNFX1BPU0lUSU9OIC0gMSkKKworLyogbWFjcm9zIHRvIGV4dHJhY3Qgc2luZ2xlIGV2ZW50LWJpdHMgZnJvbSBtYXNrcyAqLworI2RlZmluZQlCVVRUT05fUkVMRUFTRShlLCB4KQkJKChlKSAmIE5DVVJTRVNfTU9VU0VfTUFTSyh4LCAwMDEpKQorI2RlZmluZQlCVVRUT05fUFJFU1MoZSwgeCkJCSgoZSkgJiBOQ1VSU0VTX01PVVNFX01BU0soeCwgMDAyKSkKKyNkZWZpbmUJQlVUVE9OX0NMSUNLKGUsIHgpCQkoKGUpICYgTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAwNCkpCisjZGVmaW5lCUJVVFRPTl9ET1VCTEVfQ0xJQ0soZSwgeCkJKChlKSAmIE5DVVJTRVNfTU9VU0VfTUFTSyh4LCAwMTApKQorI2RlZmluZQlCVVRUT05fVFJJUExFX0NMSUNLKGUsIHgpCSgoZSkgJiBOQ1VSU0VTX01PVVNFX01BU0soeCwgMDIwKSkKKyNkZWZpbmUJQlVUVE9OX1JFU0VSVkVEX0VWRU5UKGUsIHgpCSgoZSkgJiBOQ1VSU0VTX01PVVNFX01BU0soeCwgMDQwKSkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBzaG9ydCBpZDsJCS8qIElEIHRvIGRpc3Rpbmd1aXNoIG11bHRpcGxlIGRldmljZXMgKi8KKyAgICBpbnQgeCwgeSwgejsJLyogZXZlbnQgY29vcmRpbmF0ZXMgKGNoYXJhY3Rlci1jZWxsKSAqLworICAgIG1tYXNrX3QgYnN0YXRlOwkvKiBidXR0b24gc3RhdGUgYml0cyAqLworfQorTUVWRU5UOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRtb3VzZSAoTUVWRU5UICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdW5nZXRtb3VzZSAoTUVWRU5UICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKG1tYXNrX3QpIG1vdXNlbWFzayAobW1hc2tfdCwgbW1hc2tfdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSB3ZW5jbG9zZSAoY29uc3QgV0lORE9XICosIGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG1vdXNlaW50ZXJ2YWwgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgd21vdXNlX3RyYWZvIChjb25zdCBXSU5ET1cqLCBpbnQqLCBpbnQqLCBib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBtb3VzZV90cmFmbyAoaW50KiwgaW50KiwgYm9vbCk7ICAgICAgICAgICAgICAvKiBnZW5lcmF0ZWQgKi8KKworI2RlZmluZSBtb3VzZV90cmFmbyh5LHgsdG9fc2NyZWVuKSB3bW91c2VfdHJhZm8oc3Rkc2NyLHkseCx0b19zY3JlZW4pCisKKy8qIG90aGVyIG5vbi1YU0kgZnVuY3Rpb25zICovCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG1jcHJpbnQgKGNoYXIgKiwgaW50KTsJLyogZGlyZWN0IGRhdGEgdG8gcHJpbnRlciAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaGFzX2tleSAoaW50KTsJCS8qIGRvIHdlIGhhdmUgZ2l2ZW4ga2V5PyAqLworCisvKiBEZWJ1Z2dpbmcgOiB1c2Ugd2l0aCBsaWJuY3Vyc2VzX2cuYSAqLworCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX3RyYWNlZiAoY29uc3QgY2hhciAqLCAuLi4pIEdDQ19QUklOVEZMSUtFKDEsMik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX3RyYWNlZHVtcCAoY29uc3QgY2hhciAqLCBXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfdHJhY2VhdHRyIChhdHRyX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX3RyYWNlYXR0cjIgKGludCwgY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY190cmFjZWJpdHMgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX3RyYWNlY2hhciAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF90cmFjZWNodHlwZSAoY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF90cmFjZWNodHlwZTIgKGludCwgY2h0eXBlKTsKKyNpZmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZGVmaW5lIF90cmFjZWNoX3QJCV90cmFjZWNjaGFyX3QKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF90cmFjZWNjaGFyX3QgKGNvbnN0IGNjaGFyX3QgKik7CisjZGVmaW5lIF90cmFjZWNoX3QyCQlfdHJhY2VjY2hhcl90MgorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX3RyYWNlY2NoYXJfdDIgKGludCwgY29uc3QgY2NoYXJfdCAqKTsKKyNlbHNlCisjZGVmaW5lIF90cmFjZWNoX3QJCV90cmFjZWNodHlwZQorI2RlZmluZSBfdHJhY2VjaF90MgkJX3RyYWNlY2h0eXBlMgorI2VuZGlmCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfdHJhY2Vtb3VzZSAoY29uc3QgTUVWRU5UICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIHRyYWNlIChjb25zdCB1bnNpZ25lZCBpbnQpOworCisvKiB0cmFjZSBtYXNrcyAqLworI2RlZmluZSBUUkFDRV9ESVNBQkxFCTB4MDAwMAkvKiB0dXJuIG9mZiB0cmFjaW5nICovCisjZGVmaW5lIFRSQUNFX1RJTUVTCTB4MDAwMQkvKiB0cmFjZSB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgb2YgdXBkYXRlcyAqLworI2RlZmluZSBUUkFDRV9UUFVUUwkweDAwMDIJLyogdHJhY2UgdHB1dHMgY2FsbHMgKi8KKyNkZWZpbmUgVFJBQ0VfVVBEQVRFCTB4MDAwNAkvKiB0cmFjZSB1cGRhdGUgYWN0aW9ucywgb2xkICYgbmV3IHNjcmVlbnMgKi8KKyNkZWZpbmUgVFJBQ0VfTU9WRQkweDAwMDgJLyogdHJhY2UgY3Vyc29yIG1vdmVzIGFuZCBzY3JvbGxzICovCisjZGVmaW5lIFRSQUNFX0NIQVJQVVQJMHgwMDEwCS8qIHRyYWNlIGFsbCBjaGFyYWN0ZXIgb3V0cHV0cyAqLworI2RlZmluZSBUUkFDRV9PUkRJTkFSWQkweDAwMUYJLyogdHJhY2UgYWxsIHVwZGF0ZSBhY3Rpb25zICovCisjZGVmaW5lIFRSQUNFX0NBTExTCTB4MDAyMAkvKiB0cmFjZSBhbGwgY3Vyc2VzIGNhbGxzICovCisjZGVmaW5lIFRSQUNFX1ZJUlRQVVQJMHgwMDQwCS8qIHRyYWNlIHZpcnR1YWwgY2hhcmFjdGVyIHB1dHMgKi8KKyNkZWZpbmUgVFJBQ0VfSUVWRU5UCTB4MDA4MAkvKiB0cmFjZSBsb3ctbGV2ZWwgaW5wdXQgcHJvY2Vzc2luZyAqLworI2RlZmluZSBUUkFDRV9CSVRTCTB4MDEwMAkvKiB0cmFjZSBzdGF0ZSBvZiBUVFkgY29udHJvbCBiaXRzICovCisjZGVmaW5lIFRSQUNFX0lDQUxMUwkweDAyMDAJLyogdHJhY2UgaW50ZXJuYWwvbmVzdGVkIGNhbGxzICovCisjZGVmaW5lIFRSQUNFX0NDQUxMUwkweDA0MDAJLyogdHJhY2UgcGVyLWNoYXJhY3RlciBjYWxscyAqLworI2RlZmluZSBUUkFDRV9EQVRBQkFTRQkweDA4MDAJLyogdHJhY2UgcmVhZC93cml0ZSBvZiB0ZXJtaW5mby90ZXJtY2FwIGRhdGEgKi8KKyNkZWZpbmUgVFJBQ0VfQVRUUlMJMHgxMDAwCS8qIHRyYWNlIGF0dHJpYnV0ZSB1cGRhdGVzICovCisKKyNkZWZpbmUgVFJBQ0VfU0hJRlQJMTMJLyogbnVtYmVyIG9mIGJpdHMgaW4gdGhlIHRyYWNlIG1hc2tzICovCisjZGVmaW5lIFRSQUNFX01BWElNVU0JKCgxIDw8IFRSQUNFX1NISUZUKSAtIDEpIC8qIG1heGltdW0gdHJhY2UgbGV2ZWwgKi8KKworI2lmIGRlZmluZWQoVFJBQ0UpIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY19vcHRpbWl6ZV9lbmFibGU7CQkvKiBlbmFibGUgb3B0aW1pemF0aW9ucyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc2J1ZiAoY29uc3QgY2hhciAqKTsKKyNkZWZpbmUgT1BUSU1JWkVfTVZDVVIJCTB4MDEJLyogY3Vyc29yIG1vdmVtZW50IG9wdGltaXphdGlvbiAqLworI2RlZmluZSBPUFRJTUlaRV9IQVNITUFQCTB4MDIJLyogZGlmZiBoYXNoaW5nIHRvIGRldGVjdCBzY3JvbGxzICovCisjZGVmaW5lIE9QVElNSVpFX1NDUk9MTAkJMHgwNAkvKiBzY3JvbGwgb3B0aW1pemF0aW9uICovCisjZGVmaW5lIE9QVElNSVpFX0FMTAkJMHhmZgkvKiBlbmFibGUgYWxsIG9wdGltaXphdGlvbnMgKGRmbHQpICovCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKyNpZm5kZWYgTkNVUlNFU19OT01BQ1JPUworCisvKiB0aGVzZSBuYW1lcyBjb25mbGljdCB3aXRoIFNUTCAqLworI3VuZGVmIGJveAorI3VuZGVmIGNsZWFyCisjdW5kZWYgZXJhc2UKKyN1bmRlZiBtb3ZlCisjdW5kZWYgcmVmcmVzaAorCisjZW5kaWYgLyogTkNVUlNFU19OT01BQ1JPUyAqLworCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTkNVUlNFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2N1cnNlcy53aWRlIGIvaW5jbHVkZS9jdXJzZXMud2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzc5OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jdXJzZXMud2lkZQpAQCAtMCwwICsxLDI1MiBAQAorLyogJElkOiBjdXJzZXMud2lkZSx2IDEuMzQgMjAwNy8wMy8xMCAxNzo1MjoyMyB0b20gRXhwICQgKi8KKy8qCisgKiB2aWxlOmNtb2RlOgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbmN1cnNlcywgZGVzaWduZWQgdG8gYmUgYXBwZW5kZWQgYWZ0ZXIgY3Vyc2VzLmguaW4KKyAqIChzZWUgdGhhdCBmaWxlIGZvciB0aGUgcmVsZXZhbnQgY29weXJpZ2h0KS4KKyAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihjY2hhcl90ICopIF9uY193YWNzOworCisjZGVmaW5lIE5DVVJTRVNfV0FDUyhjKQkoJl9uY193YWNzWyh1bnNpZ25lZCBjaGFyKWNdKQorCisjZGVmaW5lIFdBQ1NfQlNTQglOQ1VSU0VTX1dBQ1MoJ2wnKQorI2RlZmluZSBXQUNTX1NTQkIJTkNVUlNFU19XQUNTKCdtJykKKyNkZWZpbmUgV0FDU19CQlNTCU5DVVJTRVNfV0FDUygnaycpCisjZGVmaW5lIFdBQ1NfU0JCUwlOQ1VSU0VTX1dBQ1MoJ2onKQorI2RlZmluZSBXQUNTX1NCU1MJTkNVUlNFU19XQUNTKCd1JykKKyNkZWZpbmUgV0FDU19TU1NCCU5DVVJTRVNfV0FDUygndCcpCisjZGVmaW5lIFdBQ1NfU1NCUwlOQ1VSU0VTX1dBQ1MoJ3YnKQorI2RlZmluZSBXQUNTX0JTU1MJTkNVUlNFU19XQUNTKCd3JykKKyNkZWZpbmUgV0FDU19CU0JTCU5DVVJTRVNfV0FDUygncScpCisjZGVmaW5lIFdBQ1NfU0JTQglOQ1VSU0VTX1dBQ1MoJ3gnKQorI2RlZmluZSBXQUNTX1NTU1MJTkNVUlNFU19XQUNTKCduJykKKworI2RlZmluZSBXQUNTX1VMQ09STkVSCVdBQ1NfQlNTQgorI2RlZmluZSBXQUNTX0xMQ09STkVSCVdBQ1NfU1NCQgorI2RlZmluZSBXQUNTX1VSQ09STkVSCVdBQ1NfQkJTUworI2RlZmluZSBXQUNTX0xSQ09STkVSCVdBQ1NfU0JCUworI2RlZmluZSBXQUNTX1JURUUJV0FDU19TQlNTCisjZGVmaW5lIFdBQ1NfTFRFRQlXQUNTX1NTU0IKKyNkZWZpbmUgV0FDU19CVEVFCVdBQ1NfU1NCUworI2RlZmluZSBXQUNTX1RURUUJV0FDU19CU1NTCisjZGVmaW5lIFdBQ1NfSExJTkUJV0FDU19CU0JTCisjZGVmaW5lIFdBQ1NfVkxJTkUJV0FDU19TQlNCCisjZGVmaW5lIFdBQ1NfUExVUwlXQUNTX1NTU1MKKworI2RlZmluZSBXQUNTX1MxCQlOQ1VSU0VTX1dBQ1MoJ28nKSAvKiBzY2FuIGxpbmUgMSAqLworI2RlZmluZSBXQUNTX1M5IAlOQ1VSU0VTX1dBQ1MoJ3MnKSAvKiBzY2FuIGxpbmUgOSAqLworI2RlZmluZSBXQUNTX0RJQU1PTkQJTkNVUlNFU19XQUNTKCdgJykgLyogZGlhbW9uZCAqLworI2RlZmluZSBXQUNTX0NLQk9BUkQJTkNVUlNFU19XQUNTKCdhJykgLyogY2hlY2tlciBib2FyZCAqLworI2RlZmluZSBXQUNTX0RFR1JFRQlOQ1VSU0VTX1dBQ1MoJ2YnKSAvKiBkZWdyZWUgc3ltYm9sICovCisjZGVmaW5lIFdBQ1NfUExNSU5VUwlOQ1VSU0VTX1dBQ1MoJ2cnKSAvKiBwbHVzL21pbnVzICovCisjZGVmaW5lIFdBQ1NfQlVMTEVUCU5DVVJTRVNfV0FDUygnficpIC8qIGJ1bGxldCAqLworCisJLyogVGVsZXR5cGUgNTQxMHYxIHN5bWJvbHMgKi8KKyNkZWZpbmUgV0FDU19MQVJST1cJTkNVUlNFU19XQUNTKCcsJykgLyogYXJyb3cgbGVmdCAqLworI2RlZmluZSBXQUNTX1JBUlJPVwlOQ1VSU0VTX1dBQ1MoJysnKSAvKiBhcnJvdyByaWdodCAqLworI2RlZmluZSBXQUNTX0RBUlJPVwlOQ1VSU0VTX1dBQ1MoJy4nKSAvKiBhcnJvdyBkb3duICovCisjZGVmaW5lIFdBQ1NfVUFSUk9XCU5DVVJTRVNfV0FDUygnLScpIC8qIGFycm93IHVwICovCisjZGVmaW5lIFdBQ1NfQk9BUkQJTkNVUlNFU19XQUNTKCdoJykgLyogYm9hcmQgb2Ygc3F1YXJlcyAqLworI2RlZmluZSBXQUNTX0xBTlRFUk4JTkNVUlNFU19XQUNTKCdpJykgLyogbGFudGVybiBzeW1ib2wgKi8KKyNkZWZpbmUgV0FDU19CTE9DSwlOQ1VSU0VTX1dBQ1MoJzAnKSAvKiBzb2xpZCBzcXVhcmUgYmxvY2sgKi8KKworCS8qIG5jdXJzZXMgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBXQUNTX1MzCQlOQ1VSU0VTX1dBQ1MoJ3AnKSAvKiBzY2FuIGxpbmUgMyAqLworI2RlZmluZSBXQUNTX1M3CQlOQ1VSU0VTX1dBQ1MoJ3InKSAvKiBzY2FuIGxpbmUgNyAqLworI2RlZmluZSBXQUNTX0xFUVVBTAlOQ1VSU0VTX1dBQ1MoJ3knKSAvKiBsZXNzL2VxdWFsICovCisjZGVmaW5lIFdBQ1NfR0VRVUFMCU5DVVJTRVNfV0FDUygneicpIC8qIGdyZWF0ZXIvZXF1YWwgKi8KKyNkZWZpbmUgV0FDU19QSQkJTkNVUlNFU19XQUNTKCd7JykgLyogUGkgKi8KKyNkZWZpbmUgV0FDU19ORVFVQUwJTkNVUlNFU19XQUNTKCd8JykgLyogbm90IGVxdWFsICovCisjZGVmaW5lIFdBQ1NfU1RFUkxJTkcJTkNVUlNFU19XQUNTKCd9JykgLyogVUsgcG91bmQgc2lnbiAqLworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igd2lkZS1jaGFyYWN0ZXIgb3BlcmF0aW9ucy4KKyAqCisgKiAiZ2VuZXJhdGVkIiBjb21tZW50cyBzaG91bGQgaW5jbHVkZSAiOldJREVDIiB0byBtYWtlIHRoZSBjb3JyZXNwb25kaW5nCisgKiBmdW5jdGlvbnMgaWZkZWYnZCBpbiBsaWJfZ2VuLmMKKyAqCisgKiAiaW1wbGVtZW50ZWQiIGNvbW1lbnRzIGRvIG5vdCBuZWVkIHRoaXMgbWFya2VyLgorICovCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZF93Y2ggKGNvbnN0IGNjaGFyX3QgKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRfd2NobnN0ciAoY29uc3QgY2NoYXJfdCAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRfd2Noc3RyIChjb25zdCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRud3N0ciAoY29uc3Qgd2NoYXJfdCAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGR3c3RyIChjb25zdCB3Y2hhcl90ICopOwkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYmtncm5kIChjb25zdCBjY2hhcl90ICopOwkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIGJrZ3JuZHNldCAoY29uc3QgY2NoYXJfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYm9yZGVyX3NldCAoY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCosY29uc3QgY2NoYXJfdCopOyAvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGJveF9zZXQgKFdJTkRPVyAqLCBjb25zdCBjY2hhcl90ICosIGNvbnN0IGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZWNob193Y2hhciAoY29uc3QgY2NoYXJfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZXJhc2V3Y2hhciAod2NoYXJfdCopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRfd2NoICh3aW50X3QgKik7CQkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0X3dzdHIgKHdpbnRfdCAqKTsJCQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRia2dybmQgKGNjaGFyX3QgKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRjY2hhciAoY29uc3QgY2NoYXJfdCAqLCB3Y2hhcl90KiwgYXR0cl90Kiwgc2hvcnQqLCB2b2lkKik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRuX3dzdHIgKHdpbnRfdCAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaGxpbmVfc2V0IChjb25zdCBjY2hhcl90ICosIGludCk7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluX3djaCAoY2NoYXJfdCAqKTsJCQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbl93Y2huc3RyIChjY2hhcl90ICosIGludCk7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbl93Y2hzdHIgKGNjaGFyX3QgKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbm53c3RyICh3Y2hhcl90ICosIGludCk7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbnNfbndzdHIgKGNvbnN0IHdjaGFyX3QgKiwgaW50KTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5zX3djaCAoY29uc3QgY2NoYXJfdCAqKTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc193c3RyIChjb25zdCB3Y2hhcl90ICopOwkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW53c3RyICh3Y2hhcl90ICopOwkJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIqKSBrZXlfbmFtZSAod2NoYXJfdCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkga2lsbHdjaGFyICh3Y2hhcl90ICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZF93Y2ggKGludCwgaW50LCBjb25zdCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12YWRkX3djaG5zdHIgKGludCwgaW50LCBjb25zdCBjY2hhcl90ICosIGludCk7LyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZF93Y2hzdHIgKGludCwgaW50LCBjb25zdCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12YWRkbndzdHIgKGludCwgaW50LCBjb25zdCB3Y2hhcl90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGR3c3RyIChpbnQsIGludCwgY29uc3Qgd2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmdldF93Y2ggKGludCwgaW50LCB3aW50X3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12Z2V0X3dzdHIgKGludCwgaW50LCB3aW50X3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12Z2V0bl93c3RyIChpbnQsIGludCwgd2ludF90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZobGluZV9zZXQgKGludCwgaW50LCBjb25zdCBjY2hhcl90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbl93Y2ggKGludCwgaW50LCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluX3djaG5zdHIgKGludCwgaW50LCBjY2hhcl90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbl93Y2hzdHIgKGludCwgaW50LCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmlubndzdHIgKGludCwgaW50LCB3Y2hhcl90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbnNfbndzdHIgKGludCwgaW50LCBjb25zdCB3Y2hhcl90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZpbnNfd2NoIChpbnQsIGludCwgY29uc3QgY2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc193c3RyIChpbnQsIGludCwgY29uc3Qgd2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmlud3N0ciAoaW50LCBpbnQsIHdjaGFyX3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12dmxpbmVfc2V0IChpbnQsIGludCwgY29uc3QgY2NoYXJfdCAqLCBpbnQpOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2FkZF93Y2ggKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRfd2NobnN0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjY2hhcl90ICosIGludCk7IC8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkX3djaHN0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2FkZG53c3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IHdjaGFyX3QgKiwgaW50KTsvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2FkZHdzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3Qgd2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndnZXRfd2NoIChXSU5ET1cgKiwgaW50LCBpbnQsIHdpbnRfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndnZXRfd3N0ciAoV0lORE9XICosIGludCwgaW50LCB3aW50X3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3Z2V0bl93c3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIHdpbnRfdCAqLCBpbnQpOy8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aGxpbmVfc2V0IChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKiwgaW50KTsvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luX3djaCAoV0lORE9XICosIGludCwgaW50LCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luX3djaG5zdHIgKFdJTkRPVyAqLCBpbnQsaW50LCBjY2hhcl90ICosaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbl93Y2hzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbm53c3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIHdjaGFyX3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbnNfbndzdHIgKFdJTkRPVyAqLCBpbnQsaW50LCBjb25zdCB3Y2hhcl90ICosaW50KTsgLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbnNfd2NoIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5zX3dzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3Qgd2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbndzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgd2NoYXJfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3dmxpbmVfc2V0IChXSU5ET1cgKiwgaW50LGludCwgY29uc3QgY2NoYXJfdCAqLGludCk7IC8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcGVjaG9fd2NoYXIgKFdJTkRPVyAqLCBjb25zdCBjY2hhcl90ICopOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2V0Y2NoYXIgKGNjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBjb25zdCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX3dzZXQgKGludCwgY29uc3Qgd2NoYXJfdCAqLCBpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGF0dHJfdCkgdGVybV9hdHRycyAodm9pZCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHVuZ2V0X3djaCAoY29uc3Qgd2NoYXJfdCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZpZF9hdHRyIChhdHRyX3QsIHNob3J0LCB2b2lkICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZpZF9wdXRzIChhdHRyX3QsIHNob3J0LCB2b2lkICosIGludCAoKikoaW50KSk7IC8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB2bGluZV9zZXQgKGNvbnN0IGNjaGFyX3QgKiwgaW50KTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZF93Y2ggKFdJTkRPVyAqLGNvbnN0IGNjaGFyX3QgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZF93Y2huc3RyIChXSU5ET1cgKixjb25zdCBjY2hhcl90ICosaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGRfd2Noc3RyIChXSU5ET1cgKixjb25zdCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGRud3N0ciAoV0lORE9XICosY29uc3Qgd2NoYXJfdCAqLGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YWRkd3N0ciAoV0lORE9XICosY29uc3Qgd2NoYXJfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2JrZ3JuZCAoV0lORE9XICosY29uc3QgY2NoYXJfdCAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgd2JrZ3JuZHNldCAoV0lORE9XICosY29uc3QgY2NoYXJfdCAqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdib3JkZXJfc2V0IChXSU5ET1cgKixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3ZWNob193Y2hhciAoV0lORE9XICosIGNvbnN0IGNjaGFyX3QgKik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Z2V0X3djaCAoV0lORE9XICosIHdpbnRfdCAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Z2V0X3dzdHIgKFdJTkRPVyAqLCB3aW50X3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRia2dybmQgKFdJTkRPVyAqLCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Z2V0bl93c3RyIChXSU5ET1cgKix3aW50X3QgKiwgaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aGxpbmVfc2V0IChXSU5ET1cgKiwgY29uc3QgY2NoYXJfdCAqLCBpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luX3djaCAoV0lORE9XICosIGNjaGFyX3QgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luX3djaG5zdHIgKFdJTkRPVyAqLCBjY2hhcl90ICosIGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5fd2Noc3RyIChXSU5ET1cgKiwgY2NoYXJfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2lubndzdHIgKFdJTkRPVyAqLCB3Y2hhcl90ICosIGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc19ud3N0ciAoV0lORE9XICosIGNvbnN0IHdjaGFyX3QgKiwgaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbnNfd2NoIChXSU5ET1cgKiwgY29uc3QgY2NoYXJfdCAqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbnNfd3N0ciAoV0lORE9XICosIGNvbnN0IHdjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2lud3N0ciAoV0lORE9XICosIHdjaGFyX3QgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHdjaGFyX3QqKSB3dW5jdHJsIChjY2hhcl90ICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3dmxpbmVfc2V0IChXSU5ET1cgKiwgY29uc3QgY2NoYXJfdCAqLCBpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworCisjaWZuZGVmIE5DVVJTRVNfTk9NQUNST1MKKworLyoKKyAqIFhTSSBjdXJzZXMgbWFjcm9zIGZvciBYUEc0IGNvbmZvcm1hbmNlLgorICovCisjZGVmaW5lIGFkZF93Y2goYykJCQl3YWRkX3djaChzdGRzY3IsYykKKyNkZWZpbmUgYWRkX3djaG5zdHIoc3RyLG4pCQl3YWRkX3djaG5zdHIoc3Rkc2NyLHN0cixuKQorI2RlZmluZSBhZGRfd2Noc3RyKHN0cikJCQl3YWRkX3djaHN0cihzdGRzY3Isc3RyKQorI2RlZmluZSBhZGRud3N0cih3c3RyLG4pCQl3YWRkbndzdHIoc3Rkc2NyLHdzdHIsbikKKyNkZWZpbmUgYWRkd3N0cih3c3RyKQkJCXdhZGR3c3RyKHN0ZHNjcix3c3RyKQorI2RlZmluZSBia2dybmQoYykJCQl3Ymtncm5kKHN0ZHNjcixjKQorI2RlZmluZSBia2dybmRzZXQoYykJCQl3Ymtncm5kc2V0KHN0ZHNjcixjKQorI2RlZmluZSBib3JkZXJfc2V0KGwscix0LGIsdGwsdHIsYmwsYnIpIHdib3JkZXJfc2V0KHN0ZHNjcixsLHIsdCxiLHRsLHRyLGJsLGJyKQorI2RlZmluZSBib3hfc2V0KHcsdixoKQkJCXdib3JkZXJfc2V0KHcsdix2LGgsaCwwLDAsMCwwKQorI2RlZmluZSBlY2hvX3djaGFyKGMpCQkJd2VjaG9fd2NoYXIoc3Rkc2NyLGMpCisjZGVmaW5lIGdldF93Y2goYykJCQl3Z2V0X3djaChzdGRzY3IsYykKKyNkZWZpbmUgZ2V0X3dzdHIodCkJCQl3Z2V0X3dzdHIoc3Rkc2NyLHQpCisjZGVmaW5lIGdldGJrZ3JuZCh3Y2gpCQkJd2dldGJrZ3JuZChzdGRzY3Isd2NoKQorI2RlZmluZSBnZXRuX3dzdHIodCxuKQkJCXdnZXRuX3dzdHIoc3Rkc2NyLHQsbikKKyNkZWZpbmUgaGxpbmVfc2V0KGMsbikJCQl3aGxpbmVfc2V0KHN0ZHNjcixjLG4pCisjZGVmaW5lIGluX3djaChjKQkJCXdpbl93Y2goc3Rkc2NyLGMpCisjZGVmaW5lIGluX3djaG5zdHIoYyxuKQkJCXdpbl93Y2huc3RyKHN0ZHNjcixjLG4pCisjZGVmaW5lIGluX3djaHN0cihjKQkJCXdpbl93Y2hzdHIoc3Rkc2NyLGMpCisjZGVmaW5lIGlubndzdHIoYyxuKQkJCXdpbm53c3RyKHN0ZHNjcixjLG4pCisjZGVmaW5lIGluc19ud3N0cih0LG4pCQkJd2luc19ud3N0cihzdGRzY3IsdCxuKQorI2RlZmluZSBpbnNfd2NoKGMpCQkJd2luc193Y2goc3Rkc2NyLGMpCisjZGVmaW5lIGluc193c3RyKHQpCQkJd2luc193c3RyKHN0ZHNjcix0KQorI2RlZmluZSBpbndzdHIoYykJCQl3aW53c3RyKHN0ZHNjcixjKQorI2RlZmluZSB2bGluZV9zZXQoYyxuKQkJCXd2bGluZV9zZXQoc3Rkc2NyLGMsbikKKyNkZWZpbmUgd2FkZF93Y2hzdHIod2luLHN0cikJCXdhZGRfd2NobnN0cih3aW4sc3RyLC0xKQorI2RlZmluZSB3YWRkd3N0cih3aW4sd3N0cikJCXdhZGRud3N0cih3aW4sd3N0ciwtMSkKKyNkZWZpbmUgd2dldF93c3RyKHcsdCkJCQl3Z2V0bl93c3RyKHcsdCwtMSkKKyNkZWZpbmUgd2luX3djaHN0cih3LGMpCQkJd2luX3djaG5zdHIodyxjLC0xKQorI2RlZmluZSB3aW5zX3dzdHIodyx0KQkJCXdpbnNfbndzdHIodyx0LC0xKQorCisjaWYgIU5DVVJTRVNfT1BBUVVFCisjZGVmaW5lIHdnZXRia2dybmQod2luLHdjaCkJCSgqd2NoID0gd2luLT5fYmtncm5kLCBPSykKKyNlbmRpZgorCisjZGVmaW5lIG12YWRkX3djaCh5LHgsYykJCW12d2FkZF93Y2goc3Rkc2NyLHkseCxjKQorI2RlZmluZSBtdmFkZF93Y2huc3RyKHkseCxzLG4pCQltdndhZGRfd2NobnN0cihzdGRzY3IseSx4LHMsbikKKyNkZWZpbmUgbXZhZGRfd2Noc3RyKHkseCxzKQkJbXZ3YWRkX3djaHN0cihzdGRzY3IseSx4LHMpCisjZGVmaW5lIG12YWRkbndzdHIoeSx4LHdzdHIsbikJCW12d2FkZG53c3RyKHN0ZHNjcix5LHgsd3N0cixuKQorI2RlZmluZSBtdmFkZHdzdHIoeSx4LHdzdHIpCQltdndhZGR3c3RyKHN0ZHNjcix5LHgsd3N0cikKKyNkZWZpbmUgbXZnZXRfd2NoKHkseCxjKQkJbXZ3Z2V0X3djaChzdGRzY3IseSx4LGMpCisjZGVmaW5lIG12Z2V0X3dzdHIoeSx4LHQpCQltdndnZXRfd3N0cihzdGRzY3IseSx4LHQpCisjZGVmaW5lIG12Z2V0bl93c3RyKHkseCx0LG4pCQltdndnZXRuX3dzdHIoc3Rkc2NyLHkseCx0LG4pCisjZGVmaW5lIG12aGxpbmVfc2V0KHkseCxjLG4pCQltdndobGluZV9zZXQoc3Rkc2NyLHkseCxjLG4pCisjZGVmaW5lIG12aW5fd2NoKHkseCxjKQkJCW12d2luX3djaChzdGRzY3IseSx4LGMpCisjZGVmaW5lIG12aW5fd2NobnN0cih5LHgsYyxuKQkJbXZ3aW5fd2NobnN0cihzdGRzY3IseSx4LGMsbikKKyNkZWZpbmUgbXZpbl93Y2hzdHIoeSx4LGMpCQltdndpbl93Y2hzdHIoc3Rkc2NyLHkseCxjKQorI2RlZmluZSBtdmlubndzdHIoeSx4LGMsbikJCW12d2lubndzdHIoc3Rkc2NyLHkseCxjLG4pCisjZGVmaW5lIG12aW5zX253c3RyKHkseCx0LG4pCQltdndpbnNfbndzdHIoc3Rkc2NyLHkseCx0LG4pCisjZGVmaW5lIG12aW5zX3djaCh5LHgsYykJCW12d2luc193Y2goc3Rkc2NyLHkseCxjKQorI2RlZmluZSBtdmluc193c3RyKHkseCx0KQkJbXZ3aW5zX3dzdHIoc3Rkc2NyLHkseCx0KQorI2RlZmluZSBtdmlud3N0cih5LHgsYykJCQltdndpbndzdHIoc3Rkc2NyLHkseCxjKQorI2RlZmluZSBtdnZsaW5lX3NldCh5LHgsYyxuKQkJbXZ3dmxpbmVfc2V0KHN0ZHNjcix5LHgsYyxuKQorCisjZGVmaW5lIG12d2FkZF93Y2god2luLHkseCxjKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGRfd2NoKHdpbixjKSkKKyNkZWZpbmUgbXZ3YWRkX3djaG5zdHIod2luLHkseCxzLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkX3djaG5zdHIod2luLHMsbikpCisjZGVmaW5lIG12d2FkZF93Y2hzdHIod2luLHkseCxzKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2FkZF93Y2hzdHIod2luLHMpKQorI2RlZmluZSBtdndhZGRud3N0cih3aW4seSx4LHdzdHIsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGRud3N0cih3aW4sd3N0cixuKSkKKyNkZWZpbmUgbXZ3YWRkd3N0cih3aW4seSx4LHdzdHIpCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkd3N0cih3aW4sd3N0cikpCisjZGVmaW5lIG12d2dldF93Y2god2luLHkseCxjKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdnZXRfd2NoKHdpbixjKSkKKyNkZWZpbmUgbXZ3Z2V0X3dzdHIod2luLHkseCx0KQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdnZXRfd3N0cih3aW4sdCkpCisjZGVmaW5lIG12d2dldG5fd3N0cih3aW4seSx4LHQsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdnZXRuX3dzdHIod2luLHQsbikpCisjZGVmaW5lIG12d2hsaW5lX3NldCh3aW4seSx4LGMsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdobGluZV9zZXQod2luLGMsbikpCisjZGVmaW5lIG12d2luX3djaCh3aW4seSx4LGMpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luX3djaCh3aW4sYykpCisjZGVmaW5lIG12d2luX3djaG5zdHIod2luLHkseCxjLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5fd2NobnN0cih3aW4sYyxuKSkKKyNkZWZpbmUgbXZ3aW5fd2Noc3RyKHdpbix5LHgsYykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5fd2Noc3RyKHdpbixjKSkKKyNkZWZpbmUgbXZ3aW5ud3N0cih3aW4seSx4LGMsbikJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5ud3N0cih3aW4sYyxuKSkKKyNkZWZpbmUgbXZ3aW5zX253c3RyKHdpbix5LHgsdCxuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luc19ud3N0cih3aW4sdCxuKSkKKyNkZWZpbmUgbXZ3aW5zX3djaCh3aW4seSx4LGMpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luc193Y2god2luLGMpKQorI2RlZmluZSBtdndpbnNfd3N0cih3aW4seSx4LHQpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luc193c3RyKHdpbix0KSkKKyNkZWZpbmUgbXZ3aW53c3RyKHdpbix5LHgsYykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW53c3RyKHdpbixjKSkKKyNkZWZpbmUgbXZ3dmxpbmVfc2V0KHdpbix5LHgsYyxuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd3ZsaW5lX3NldCh3aW4sYyxuKSkKKworI2VuZGlmIC8qIE5DVVJTRVNfTk9NQUNST1MgKi8KKworI2lmIGRlZmluZWQoVFJBQ0UpIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc3didWYoY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXN3aWJ1Zihjb25zdCB3aW50X3QgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWRpdF9jZmcuc2ggYi9pbmNsdWRlL2VkaXRfY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkNjRmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2VkaXRfY2ZnLnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorIyAkSWQ6IGVkaXRfY2ZnLnNoLHYgMS4xMiAyMDAxLzEyLzIzIDAwOjUyOjQwIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTYsMTk5NywyMDAwCisjCisjIEVkaXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHRlcm0uaCBmaWxlIGJhc2VkIG9uIHRoZSBhdXRvY29uZi1nZW5lcmF0ZWQKKyMgdmFsdWVzOgorIworIwkkMSA9IG5jdXJzZXNfY2ZnLmgKKyMJJDIgPSB0ZXJtLmgKKyMKK0JBSz1zYXZlJCQKK1RNUD1lZGl0JCQKK3RyYXAgInJtIC1mICRCQUsgJFRNUCIgMCAxIDIgNSAxNQorZm9yIG5hbWUgaW4gXAorCUhBVkVfVENHRVRBVFRSIFwKKwlIQVZFX1RFUk1JT1NfSCBcCisJSEFWRV9URVJNSU9fSCBcCisJQlJPS0VOX0xJTktFUgorZG8KKwltdiAkMiAkQkFLCisJaWYgKCBncmVwICJbIAldJG5hbWVbIAldIiAkMSAyPiYxID4kVE1QICkKKwl0aGVuCisJCXZhbHVlPTEKKwllbHNlCisJCXZhbHVlPTAKKwlmaQorCWVjaG8gJyoqIGVkaXQ6ICckbmFtZSAkdmFsdWUKKwlzZWQgXAorCQktZSAic0AjZGVmaW5lICR7bmFtZX0uKlwkQCNkZWZpbmUgJG5hbWUgJHZhbHVlQCIgXAorCQktZSAic0AjaWYgJG5hbWVcJEAjaWYgJHZhbHVlIC8qICRuYW1lICovQCIgXAorCQktZSAic0AjaWYgISRuYW1lXCRAI2lmICR2YWx1ZSAvKiAhJG5hbWUgKi9AIiBcCisJCSRCQUsgPiQyCisJaWYgKGNtcCAtcyAkMiAkQkFLKQorCXRoZW4KKwkJbXYgJEJBSyAkMgorCWVsc2UKKwkJcm0gLWYgJEJBSworCWZpCitkb25lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhc2hlZF9kYi5oIGIvaW5jbHVkZS9oYXNoZWRfZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQzOTMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9oYXNoZWRfZGIuaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogJElkOiBoYXNoZWRfZGIuaCx2IDEuNSAyMDA2LzA4LzE5IDE1OjU4OjM0IHRvbSBFeHAgJAorICovCisKKyNpZm5kZWYgSEFTSEVEX0RCX0gKKyNkZWZpbmUgSEFTSEVEX0RCX0ggMQorCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKKyNpZiBVU0VfSEFTSEVEX0RCCisKKyNpbmNsdWRlIDxkYi5oPgorCisjaWZuZGVmIERCTl9TVUZGSVgKKyNkZWZpbmUgREJNX1NVRkZJWCAiLmRiIgorI2VuZGlmCisKKyNpZmRlZiBEQl9WRVJTSU9OX01BSk9SCisjZGVmaW5lIEhBU0hFRF9EQl9BUEkgREJfVkVSU0lPTl9NQUpPUgorI2Vsc2UKKyNkZWZpbmUgSEFTSEVEX0RCX0FQSSAxCQkvKiBlLmcuLCBkYiAxLjguNSAqLworI2VuZGlmCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChEQiAqKSBfbmNfZGJfb3Blbihjb25zdCBjaGFyICogLyogcGF0aCAqLywgYm9vbCAvKiBtb2RpZnkgKi8pOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19kYl9oYXZlX2RhdGEoREJUICogLyoga2V5ICovLCBEQlQgKiAvKiBkYXRhICovLCBjaGFyICoqIC8qIGJ1ZmZlciAqLywgaW50ICogLyogc2l6ZSAqLyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX2RiX2hhdmVfaW5kZXgoREJUICogLyoga2V5ICovLCBEQlQgKiAvKiBkYXRhICovLCBjaGFyICoqIC8qIGJ1ZmZlciAqLywgaW50ICogLyogc2l6ZSAqLyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZGJfY2xvc2UoREIgKiAvKiBkYiAqLyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZGJfZmlyc3QoREIgKiAvKiBkYiAqLywgREJUICogLyoga2V5ICovLCBEQlQgKiAvKiBkYXRhICovKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19kYl9uZXh0KERCICogLyogZGIgKi8sIERCVCAqIC8qIGtleSAqLywgREJUICogLyogZGF0YSAqLyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZGJfZ2V0KERCICogLyogZGIgKi8sIERCVCAqIC8qIGtleSAqLywgREJUICogLyogZGF0YSAqLyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZGJfcHV0KERCICogLyogZGIgKi8sIERCVCAqIC8qIGtleSAqLywgREJUICogLyogZGF0YSAqLyk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogSEFTSEVEX0RCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGVhZGVycyBiL2luY2x1ZGUvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRiZDkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9oZWFkZXJzCkBAIC0wLDAgKzEsNDIgQEAKKyMgJElkOiBoZWFkZXJzLHYgMS45IDIwMDcvMDEvMjAgMTk6NTc6MDQgTWlyb3NsYXYuTGljaHZhciBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5Ni1vbgorIwordGVybS5oCitjdXJzZXMuaAordW5jdHJsLmgKK3Rlcm1jYXAuaAorJChzcmNkaXIpL25jdXJzZXNfZGxsLmgKK0AgdGljbGliCiskKHNyY2RpcikvdGljLmgKKyQoc3JjZGlyKS90ZXJtX2VudHJ5LmgKKyQoc3JjZGlyKS9uY190cGFybS5oCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uY19hbGxvYy5oIGIvaW5jbHVkZS9uY19hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MjFiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25jX2FsbG9jLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAkSWQ6IG5jX2FsbG9jLmgsdiAxLjE2IDIwMDgvMDkvMjcgMjI6MzA6MzMgdG9tIEV4cCAkICovCisKKyNpZm5kZWYgTkNfQUxMT0NfaW5jbHVkZWQKKyNkZWZpbmUgTkNfQUxMT0NfaW5jbHVkZWQgMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBIQVZFX0xJQkRNQUxMT0MKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyN1bmRlZiBzdHJuZHVwCQkvKiB3b3JrYXJvdW5kIGZvciAjZGVmaW5lIGluIEdMSUJDIDIuNyAqLworI2luY2x1ZGUgPGRtYWxsb2MuaD4gICAgLyogR3JheSBXYXRzb24ncyBsaWJyYXJ5ICovCisjZWxzZQorI3VuZGVmICBIQVZFX0xJQkRNQUxMT0MKKyNkZWZpbmUgSEFWRV9MSUJETUFMTE9DIDAKKyNlbmRpZgorCisjaWYgSEFWRV9MSUJEQk1BTExPQworI2luY2x1ZGUgPGRibWFsbG9jLmg+ICAgLyogQ29ub3IgQ2FoaWxsJ3MgbGlicmFyeSAqLworI2Vsc2UKKyN1bmRlZiAgSEFWRV9MSUJEQk1BTExPQworI2RlZmluZSBIQVZFX0xJQkRCTUFMTE9DIDAKKyNlbmRpZgorCisjaWYgSEFWRV9MSUJNUEFUUk9MCisjaW5jbHVkZSA8bXBhdHJvbC5oPiAgICAvKiBNZW1vcnktUGF0cm9sIGxpYnJhcnkgKi8KKyNlbHNlCisjdW5kZWYgIEhBVkVfTElCTVBBVFJPTAorI2RlZmluZSBIQVZFX0xJQk1QQVRST0wgMAorI2VuZGlmCisKKyNpZm5kZWYgTk9fTEVBS1MKKyNkZWZpbmUgTk9fTEVBS1MgMAorI2VuZGlmCisKKyNpZiBIQVZFX0xJQkRCTUFMTE9DIHx8IEhBVkVfTElCRE1BTExPQyB8fCBOT19MRUFLUworI2RlZmluZSBIQVZFX05DX0ZSRUVBTEwgMQorc3RydWN0IHRlcm10eXBlOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mcmVlX2FuZF9leGl0KGludCkgR0NDX05PUkVUVVJOOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mcmVlX3RpbmZvKGludCkgR0NDX05PUkVUVVJOOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mcmVlX3RpYyhpbnQpIEdDQ19OT1JFVFVSTjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZnJlZV90cGFybSh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbGVha3NfZHVtcF9lbnRyeSh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbGVha3NfdGljKHZvaWQpOworI2RlZmluZSBFeGl0UHJvZ3JhbShjb2RlKSBfbmNfZnJlZV9hbmRfZXhpdChjb2RlKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9OQ19GUkVFQUxMCisjZGVmaW5lIEhBVkVfTkNfRlJFRUFMTCAwCisjZW5kaWYKKworI2lmbmRlZiBFeGl0UHJvZ3JhbQorI2RlZmluZSBFeGl0UHJvZ3JhbShjb2RlKSBleGl0KGNvZGUpCisjZW5kaWYKKworLyogZG9hbGxvYy5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKSBfbmNfZG9hbGxvYyh2b2lkICosIHNpemVfdCk7CisjaWYgIUhBVkVfU1RSRFVQCisjZGVmaW5lIHN0cmR1cCBfbmNfc3RyZHVwCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfc3RyZHVwKGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworLyogZW50cmllcy5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2xlYWtzX3RpbmZvKHZvaWQpOworCisjZGVmaW5lIHR5cGVNYWxsb2ModHlwZSxlbHRzKSAodHlwZSAqKW1hbGxvYygoZWx0cykqc2l6ZW9mKHR5cGUpKQorI2RlZmluZSB0eXBlQ2FsbG9jKHR5cGUsZWx0cykgKHR5cGUgKiljYWxsb2MoKGVsdHMpLHNpemVvZih0eXBlKSkKKyNkZWZpbmUgdHlwZVJlYWxsb2ModHlwZSxlbHRzLHB0cikgKHR5cGUgKilfbmNfZG9hbGxvYyhwdHIsIChlbHRzKSpzaXplb2YodHlwZSkpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOQ19BTExPQ19pbmNsdWRlZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uY19wYW5lbC5oIGIvaW5jbHVkZS9uY19wYW5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Nzg1NzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25jX3BhbmVsLmgKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgIDE5OTcgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqICRJZDogbmNfcGFuZWwuaCx2IDEuNSAyMDA4LzA4LzA0IDE4OjI2OjQ2IHRvbSBFeHAgJAorICoKKyAqCW5jX3BhbmVsLmgKKyAqCisgKglIZWFkZXJmaWxlIHRvIHByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciB0aGUgcGFuZWwgbGF5ZXIgaW50bworICogICAgICB0aGUgU0NSRUVOIHN0cnVjdHVyZSBvZiB0aGUgbmN1cnNlcyBjb3JlLgorICovCisKKyNpZm5kZWYgTkNfUEFORUxfSAorI2RlZmluZSBOQ19QQU5FTF9IIDEKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitzdHJ1Y3QgcGFuZWw7IC8qIEZvcndhcmQgRGVjbGFyYXRpb24gKi8KKworc3RydWN0IHBhbmVsaG9vayB7CisgIHN0cnVjdCBwYW5lbCogICB0b3BfcGFuZWw7CisgIHN0cnVjdCBwYW5lbCogICBib3R0b21fcGFuZWw7CisgIHN0cnVjdCBwYW5lbCogICBzdGRzY3JfcHNldWRvX3BhbmVsOworI2lmIE5PX0xFQUtTCisgIGludCAoKmRlc3Ryb3kpKHN0cnVjdCBwYW5lbCAqKTsKKyNlbmRpZgorfTsKKworLyogUmV0cmlldmUgdGhlIHBhbmVsaG9vayBvZiB0aGUgY3VycmVudCBzY3JlZW4gKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzdHJ1Y3QgcGFuZWxob29rKikgX25jX3BhbmVsaG9vayAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOQ19QQU5FTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25jX3RwYXJtLmggYi9pbmNsdWRlL25jX3RwYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkNzY5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmNfdHBhcm0uaApAQCAtMCwwICsxLDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IG5jX3RwYXJtLmgsdiAxLjQgMjAwNi8xMS8yNiAwMDo0OToyNSB0b20gRXhwICQgKi8KKworLyoKKyAqIENhc3QgcGFyYW1ldGVycyBwYXN0IHRoZSBmb3JtYXR0aW5nLXN0cmluZyBmb3IgdHBhcm0oKSB0byBtYXRjaCB0aGUKKyAqIGFzc3VtcHRpb24gb2YgdGhlIHZhcmFyZ3MgY29kZS4KKyAqLworI2RlZmluZSBUUEFSTV9BUkcgbG9uZworI2RlZmluZSBUUEFSTV9OKG4pIChUUEFSTV9BUkcpKG4pCisKKyNkZWZpbmUgVFBBUk1fOShhLGIsYyxkLGUsZixnLGgsaSxqKSB0cGFybShhLFRQQVJNX04oYiksVFBBUk1fTihjKSxUUEFSTV9OKGQpLFRQQVJNX04oZSksVFBBUk1fTihmKSxUUEFSTV9OKGcpLFRQQVJNX04oaCksVFBBUk1fTihpKSxUUEFSTV9OKGopKQorCisjaWYgTkNVUlNFU19UUEFSTV9WQVJBUkdTCisjZGVmaW5lIFRQQVJNXzgoYSxiLGMsZCxlLGYsZyxoLGkpIHRwYXJtKGEsVFBBUk1fTihiKSxUUEFSTV9OKGMpLFRQQVJNX04oZCksVFBBUk1fTihlKSxUUEFSTV9OKGYpLFRQQVJNX04oZyksVFBBUk1fTihoKSxUUEFSTV9OKGkpKQorI2RlZmluZSBUUEFSTV83KGEsYixjLGQsZSxmLGcsaCkgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYyksVFBBUk1fTihkKSxUUEFSTV9OKGUpLFRQQVJNX04oZiksVFBBUk1fTihnKSxUUEFSTV9OKGgpKQorI2RlZmluZSBUUEFSTV82KGEsYixjLGQsZSxmLGcpIHRwYXJtKGEsVFBBUk1fTihiKSxUUEFSTV9OKGMpLFRQQVJNX04oZCksVFBBUk1fTihlKSxUUEFSTV9OKGYpLFRQQVJNX04oZykpCisjZGVmaW5lIFRQQVJNXzUoYSxiLGMsZCxlLGYpIHRwYXJtKGEsVFBBUk1fTihiKSxUUEFSTV9OKGMpLFRQQVJNX04oZCksVFBBUk1fTihlKSxUUEFSTV9OKGYpKQorI2RlZmluZSBUUEFSTV80KGEsYixjLGQsZSkgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYyksVFBBUk1fTihkKSxUUEFSTV9OKGUpKQorI2RlZmluZSBUUEFSTV8zKGEsYixjLGQpIHRwYXJtKGEsVFBBUk1fTihiKSxUUEFSTV9OKGMpLFRQQVJNX04oZCkpCisjZGVmaW5lIFRQQVJNXzIoYSxiLGMpIHRwYXJtKGEsVFBBUk1fTihiKSxUUEFSTV9OKGMpKQorI2RlZmluZSBUUEFSTV8xKGEsYikgdHBhcm0oYSxUUEFSTV9OKGIpKQorI2RlZmluZSBUUEFSTV8wKGEpIHRwYXJtKGEpCisjZWxzZQorI2RlZmluZSBUUEFSTV84KGEsYixjLGQsZSxmLGcsaCxpKSBUUEFSTV85KGEsYixjLGQsZSxmLGcsaCxpLDApCisjZGVmaW5lIFRQQVJNXzcoYSxiLGMsZCxlLGYsZyxoKSBUUEFSTV84KGEsYixjLGQsZSxmLGcsaCwwKQorI2RlZmluZSBUUEFSTV82KGEsYixjLGQsZSxmLGcpIFRQQVJNXzcoYSxiLGMsZCxlLGYsZywwKQorI2RlZmluZSBUUEFSTV81KGEsYixjLGQsZSxmKSBUUEFSTV82KGEsYixjLGQsZSxmLDApCisjZGVmaW5lIFRQQVJNXzQoYSxiLGMsZCxlKSBUUEFSTV81KGEsYixjLGQsZSwwKQorI2RlZmluZSBUUEFSTV8zKGEsYixjLGQpIFRQQVJNXzQoYSxiLGMsZCwwKQorI2RlZmluZSBUUEFSTV8yKGEsYixjKSBUUEFSTV8zKGEsYixjLDApCisjZGVmaW5lIFRQQVJNXzEoYSxiKSBUUEFSTV8yKGEsYiwwKQorI2RlZmluZSBUUEFSTV8xKGEsYikgVFBBUk1fMihhLGIsMCkKKyNkZWZpbmUgVFBBUk1fMChhKSBUUEFSTV8xKGEsMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4gYi9pbmNsdWRlL25jdXJzZXNfY2ZnLmhpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhhNDgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4KQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IG5jdXJzZXNfY2ZnLmhpbix2IDEuNyAyMDA1LzAxLzAyIDAxOjI2OjU4IHRvbSBFeHAgJAorICoKKyAqIFRoaXMgaXMgYSB0ZW1wbGF0ZS1maWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlICJuY3Vyc2VzX2NmZy5oIiBmaWxlLgorICoKKyAqIFJhdGhlciB0aGFuIGxpc3QgZXZlcnkgZGVmaW5pdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHN1YnN0aXR1dGVzIHRoZQorICogZGVmaW5pdGlvbnMgdGhhdCBpdCBmaW5kcyB1c2luZyAnc2VkJy4gIFlvdSBuZWVkIGEgcGF0Y2ggKG9yaWdpbmFsIGRhdGUKKyAqIDk3MTIyMikgdG8gYXV0b2NvbmYgMi4xMiBvciAyLjEzIHRvIGRvIHRoaXMuCisgKgorICogU2VlOgorICoJaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mLworICoJZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvCisgKi8KKyNpZm5kZWYgTkNfQ09ORklHX0gKKyNkZWZpbmUgTkNfQ09ORklHX0gKK0BERUZTQAorCisjaW5jbHVkZSA8bmN1cnNlc19kZWYuaD4KKworCS8qIFRoZSBDIGNvbXBpbGVyIG1heSBub3QgdHJlYXQgdGhlc2UgcHJvcGVybHkgYnV0IEMrKyBoYXMgdG8gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGNvbnN0CisjdW5kZWYgaW5saW5lCisjZWxzZQorI2lmIGRlZmluZWQobGludCkgfHwgZGVmaW5lZChUUkFDRSkKKyN1bmRlZiBpbmxpbmUKKyNkZWZpbmUgaW5saW5lIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2VuZGlmCisKKwkvKiBPbiBIUC1VWCwgdGhlIEMgY29tcGlsZXIgZG9lc24ndCBncm9rIG1ic3RhdGVfdCB3aXRob3V0CisJICAgLURfWE9QRU5fU09VUkNFPTUwMC4gSG93ZXZlciwgdGhpcyBjYXVzZXMgcHJvYmxlbXMgb24KKwkgICBJUklYLiBTbywgd2UgI2RlZmluZSBtYnN0YXRlX3QgdG8gaW50IGluIGNvbmZpZ3VyZS5pbgorCSAgIG9ubHkgZm9yIHRoZSBDIGNvbXBpbGVyIGlmIG5lZWRlZC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNpZmRlZiBORUVEX01CU1RBVEVfVF9ERUYKKyNkZWZpbmUgbWJzdGF0ZV90IGludAorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIE5DX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25jdXJzZXNfZGVmcyBiL2luY2x1ZGUvbmN1cnNlc19kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTM3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25jdXJzZXNfZGVmcwpAQCAtMCwwICsxLDIwOCBAQAorIyAkSWQ6IG5jdXJzZXNfZGVmcyx2IDEuNDAgMjAwOC8wOS8wNiAxNTo1Nzo0MSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU2VlICJNS25jdXJzZXNfZGVmLnNoIiBmb3IgYW4gZXhwbGFuYXRpb24uCisjCisjIChoaW50OiBkb24ndCB0cnkgdG8gZGVmaW5lIE5ERUJVRyA7LSkKKworQlJPS0VOX0xJTktFUgorQlNEX1RQVVRTCitDQ19IQVNfUFJPVE9TCitDUFBfSEFTX1BBUkFNX0lOSVQKK0NVUlNFU19BQ1NfQVJSQVkJYWNzX21hcAorQ1VSU0VTX1dBQ1NfQVJSQVkJX25jX3dhY3MKK0RFQ0xfRVJSTk8KK0VUSVBfTkVFRFNfTUFUSF9ICitHQ0NfTk9SRVRVUk4JLyogbm90aGluZyAqLworR0NDX1VOVVNFRAkvKiBub3RoaW5nICovCitIQVZFX0JJR19DT1JFCitIQVZFX0JTRF9DR0VURU5UCitIQVZFX0JTRF9TSUdOQUxfSAorSEFWRV9CVE9XQyAKK0hBVkVfQlVJTFRJTl9ICitIQVZFX0NIR0FUCTEKK0hBVkVfQ09MT1JfU0VUCTEKK0hBVkVfRElSRU5UX0gKK0hBVkVfRVJSTk8KK0hBVkVfRkNOVExfSAorSEFWRV9GSUxURVIJMQorSEFWRV9GT1JNX0gKK0hBVkVfR0VUQkVHWAkxCitIQVZFX0dFVENVUlgJMQorSEFWRV9HRVRDV0QKK0hBVkVfR0VURUdJRAorSEFWRV9HRVRFVUlECitIQVZFX0dFVE1BWFgJMQorSEFWRV9HRVROU1RSCitIQVZFX0dFVE9QVF9ICitIQVZFX0dFVFBBUlgJMQorSEFWRV9HRVRUSU1FT0ZEQVkKK0hBVkVfR0VUVFRZTkFNCitIQVZFX0dFVFdJTgkxCitIQVZFX0dQTV9ICitIQVZFX0dQUF9CVUlMVElOX0gKK0hBVkVfR1hYX0JVSUxUSU5fSAorSEFWRV9IQVNfS0VZCitIQVZFX0lPU1RSRUFNCitIQVZFX0lTQVNDSUkKK0hBVkVfSVNTRVRVR0lECitIQVZFX0xBTkdJTkZPX0NPREVTRVQKK0hBVkVfTElCQ19ICitIQVZFX0xJQkRCTUFMTE9DCitIQVZFX0xJQkRNQUxMT0MKK0hBVkVfTElCRk9STQorSEFWRV9MSUJHUE0KK0hBVkVfTElCTUVOVQorSEFWRV9MSUJNUEFUUk9MCitIQVZFX0xJQlBBTkVMCitIQVZFX0xJTUlUU19ICitIQVZFX0xJTksKK0hBVkVfTE9DQUxFX0gKK0hBVkVfTE9OR19GSUxFX05BTUVTCitIQVZFX01CTEVOCitIQVZFX01CUkxFTgorSEFWRV9NQlJUT1dDCitIQVZFX01CU1JUT1dDUworSEFWRV9NQlNUT1dDUworSEFWRV9NQlRPV0MKK0hBVkVfTUVOVV9ICitIQVZFX01LU1RFTVAKK0hBVkVfTVZWTElORQkxCitIQVZFX01WV1ZMSU5FCTEKK0hBVkVfTkFOT1NMRUVQCitIQVZFX05DX0FMTE9DX0gKK0hBVkVfUEFORUxfSAorSEFWRV9QT0xMCitIQVZFX1BPTExfSAorSEFWRV9QVVJJRlkKK0hBVkVfUFVUV0MgCitIQVZFX1BVVFdJTgkxCitIQVZFX1JFR0VYUFJfSF9GVU5DUworSEFWRV9SRUdFWFBfSF9GVU5DUworSEFWRV9SRUdFWF9IX0ZVTkNTCitIQVZFX1JFTU9WRQorSEFWRV9SRVNJWkVURVJNCitIQVZFX1JFU0laRV9URVJNCitIQVZFX1JJUE9GRkxJTkUJMQorSEFWRV9TRUxFQ1QKK0hBVkVfU0VUQlVGCitIQVZFX1NFVEJVRkZFUgorSEFWRV9TRVRVUFRFUk0JMQorSEFWRV9TRVRWQlVGCitIQVZFX1NJR0FDVElPTgorSEFWRV9TSUdWRUMKK0hBVkVfU0laRUNIQU5HRQorSEFWRV9TTEtfQ09MT1IKK0hBVkVfU0xLX0lOSVQJMQorSEFWRV9TVFJEVVAKK0hBVkVfU1RSU1RSCitIQVZFX1NZTUxJTksKK0hBVkVfU1lTX0JTRFRZUEVTX0gKK0hBVkVfU1lTX0lPQ1RMX0gKK0hBVkVfU1lTX1BBUkFNX0gKK0hBVkVfU1lTX1BPTExfSAorSEFWRV9TWVNfU0VMRUNUX0gKK0hBVkVfU1lTX1RFUk1JT19ICitIQVZFX1NZU19USU1FU19ICitIQVZFX1NZU19USU1FX0gKK0hBVkVfU1lTX1RJTUVfU0VMRUNUCitIQVZFX1RDR0VUQVRUUgorSEFWRV9UQ0dFVFBHUlAKK0hBVkVfVEVMTAorSEFWRV9URVJNQVRUUlMJMQorSEFWRV9URVJNSU9TX0gKK0hBVkVfVEVSTUlPX0gKK0hBVkVfVEVSTU5BTUUJMQorSEFWRV9URVJNX0gJMQorSEFWRV9UR0VURU5UCTEKK0hBVkVfVElHRVROVU0JMQorSEFWRV9USUdFVFNUUgkxCitIQVZFX1RJTUVTCitIQVZFX1RUWUVOVF9ICitIQVZFX1RZUEVBSEVBRAkxCitIQVZFX1RZUEVJTkZPCitIQVZFX1RZUEVfQVRUUl9UCitIQVZFX1RZUEVfU0lHQUNUSU9OCitIQVZFX1VOSVNURF9ICitIQVZFX1VOTElOSworSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKK0hBVkVfVkZTQ0FORgorSEFWRV9WU05QUklOVEYKK0hBVkVfVlNTQ0FORgorSEFWRV9XQ1NSVE9NQlMKK0hBVkVfV0NTVE9NQlMKK0hBVkVfV0NUT0IgCitIQVZFX1dDVE9NQgorSEFWRV9XQ1RZUEVfSAorSEFWRV9XSU5TU1RSCTEKK0hBVkVfV09SS0lOR19QT0xMCitIQVZFX1dSRVNJWkUKK0hBVkVfX0RPU0NBTgorTUlYRURDQVNFX0ZJTEVOQU1FUworTkNVUlNFU19DSEFSX0VRCitOQ1VSU0VTX0VYUEFOREVECitOQ1VSU0VTX0VYVF9DT0xPUlMKK05DVVJTRVNfRVhUX0ZVTkNTCitOQ1VSU0VTX05PX1BBRERJTkcKK05DVVJTRVNfUEFUSFNFUAknOicKK05ERUJVRworTkVFRF9QVEVNX0gKK05PX0xFQUtTCitQVVJFX1RFUk1JTkZPCitSRVRTSUdUWVBFCitTVERDX0hFQURFUlMKK1NWUjRfQUNUSU9OCitTVlI0X1RFUk1JTworU1lTVEVNX05BTUUJInVua25vd24iCitURVJNSU5GTwkibm9uZSIKK1RFUk1QQVRICSJub25lIgorVElNRV9XSVRIX1NZU19USU1FCitUWVBFT0ZfQ0hUWVBFCitVU0VfQ09MT1JGR0JHCitVU0VfREFUQUJBU0UKK1VTRV9HRVRDQVAKK1VTRV9HRVRDQVBfQ0FDSEUKK1VTRV9IQVJEX1RBQlMKK1VTRV9IQVNIRURfREIKK1VTRV9IQVNITUFQCitVU0VfSE9NRV9URVJNSU5GTworVVNFX0xJTktTCitVU0VfTVlfTUVNTU9WRQorVVNFX09LX0JDT1BZCitVU0VfUkNTX0lEUworVVNFX1JFRU5UUkFOVAorVVNFX1NBRkVfU1BSSU5URgorVVNFX1NDUk9MTF9ISU5UUworVVNFX1NJR1dJTkNICitVU0VfU1lNTElOS1MKK1VTRV9TWVNNT1VTRQorVVNFX1RFUk1DQVAKK1VTRV9XRUFLX1NZTUJPTFMKK1VTRV9XSURFQ19TVVBQT1JUCitVU0VfWE1DX1NVUFBPUlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmN1cnNlc19kbGwuaCBiL2luY2x1ZGUvbmN1cnNlc19kbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRmZWVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uY3Vyc2VzX2RsbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAkSWQ6IG5jdXJzZXNfZGxsLmgsdiAxLjYgMjAwNy8wMy8xMCAxOToyMTo0OSB0b20gRXhwICQgKi8KKworI2lmbmRlZiBOQ1VSU0VTX0RMTF9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19ETExfSF9pbmNsIDEKKworLyogbm8gbG9uZ2VyIG5lZWRlZCBvbiBjeWd3aW4gb3IgbWluZ3csIHRoYW5rcyB0byBhdXRvLWltcG9ydCAgICAgICAqLworLyogYnV0IHRoaXMgc3RydWN0dXJlIG1heSBiZSB1c2VmdWwgYXQgc29tZSBwb2ludCBmb3IgYW4gTVNWQyBidWlsZCAqLworLyogc28sIGZvciBub3cgdW5jb25kaXRpb25hbGx5IGRlZmluZSB0aGUgaW1wb3J0YW50IGZsYWdzICAgICAgICAgICAqLworLyogInRoZSByaWdodCB3YXkiIGZvciBwcm9wZXIgc3RhdGljIGFuZCBkbGwrYXV0by1pbXBvcnQgYmVoYXZpb3IgICAqLworI3VuZGVmIE5DVVJTRVNfRExMCisjZGVmaW5lIE5DVVJTRVNfU1RBVElDCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpZiBkZWZpbmVkKE5DVVJTRVNfRExMKQorIyAgICBpZiBkZWZpbmVkKE5DVVJTRVNfU1RBVElDKQorIyAgICAgIHVuZGVmIE5DVVJTRVNfU1RBVElDCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgdW5kZWYgTkNVUlNFU19JTVBFWFAKKyMgIHVuZGVmIE5DVVJTRVNfQVBJCisjICB1bmRlZiBOQ1VSU0VTX0VYUE9SVAorIyAgdW5kZWYgTkNVUlNFU19FWFBPUlRfVkFSCisjICBpZiBkZWZpbmVkKE5DVVJTRVNfRExMKQorLyogYnVpbGRpbmcgYSBETEwgKi8KKyMgICAgZGVmaW5lIE5DVVJTRVNfSU1QRVhQIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgZWxpZiBkZWZpbmVkKE5DVVJTRVNfU1RBVElDKQorLyogYnVpbGRpbmcgb3IgbGlua2luZyB0byBhIHN0YXRpYyBsaWJyYXJ5ICovCisjICAgIGRlZmluZSBOQ1VSU0VTX0lNUEVYUCAvKiBub3RoaW5nICovCisjICBlbHNlCisvKiBsaW5raW5nIHRvIHRoZSBETEwgKi8KKyMgICAgZGVmaW5lIE5DVVJTRVNfSU1QRVhQIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZW5kaWYKKyMgIGRlZmluZSBOQ1VSU0VTX0FQSSBfX2NkZWNsCisjICBkZWZpbmUgTkNVUlNFU19FWFBPUlQodHlwZSkgTkNVUlNFU19JTVBFWFAgdHlwZSBOQ1VSU0VTX0FQSQorIyAgZGVmaW5lIE5DVVJTRVNfRVhQT1JUX1ZBUih0eXBlKSBOQ1VSU0VTX0lNUEVYUCB0eXBlCisjZW5kaWYKKworLyogVGFrZSBjYXJlIG9mIG5vbi1jeWd3aW4gcGxhdGZvcm1zICovCisjaWYgIWRlZmluZWQoTkNVUlNFU19JTVBFWFApCisjICBkZWZpbmUgTkNVUlNFU19JTVBFWFAgLyogbm90aGluZyAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTkNVUlNFU19BUEkpCisjICBkZWZpbmUgTkNVUlNFU19BUEkgLyogbm90aGluZyAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTkNVUlNFU19FWFBPUlQpCisjICBkZWZpbmUgTkNVUlNFU19FWFBPUlQodHlwZSkgTkNVUlNFU19JTVBFWFAgdHlwZSBOQ1VSU0VTX0FQSQorI2VuZGlmCisjaWYgIWRlZmluZWQoTkNVUlNFU19FWFBPUlRfVkFSKQorIyAgZGVmaW5lIE5DVVJTRVNfRVhQT1JUX1ZBUih0eXBlKSBOQ1VSU0VTX0lNUEVYUCB0eXBlCisjZW5kaWYKKworLyoKKyAqIEZvciByZWVudHJhbnQgY29kZSwgd2UgbWFwIHRoZSB2YXJpb3VzIGdsb2JhbCB2YXJpYWJsZXMgaW50byBTQ1JFRU4gYnkKKyAqIHVzaW5nIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlbS4KKyAqLworI2RlZmluZSBOQ1VSU0VTX1BVQkxJQ19WQVIobmFtZSkgX25jXyMjbmFtZQorI2RlZmluZSBOQ1VSU0VTX1dSQVBQRURfVkFSKHR5cGUsbmFtZSkgZXh0ZXJuIHR5cGUgTkNVUlNFU19QVUJMSUNfVkFSKG5hbWUpKHZvaWQpCisKKyNlbmRpZiAvKiBOQ1VSU0VTX0RMTF9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGVybV9lbnRyeS5oIGIvaW5jbHVkZS90ZXJtX2VudHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4NzU0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdGVybV9lbnRyeS5oCkBAIC0wLDAgKzEsMTY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5OC1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogdGVybV9lbnRyeS5oLHYgMS4zNSAyMDA4LzA4LzE2IDE2OjE2OjAzIHRvbSBFeHAgJCAqLworCisvKgorICoJdGVybV9lbnRyeS5oIC0tIGludGVyZmFjZSB0byBlbnRyeS1tYW5pcHVsYXRpb24gY29kZQorICovCisKKyNpZm5kZWYgTkNVUlNFU19URVJNX0VOVFJZX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX1RFUk1fRU5UUllfSF9pbmNsIDEKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8dGVybS5oPgorCisjZGVmaW5lIE1BWF9VU0VTCTMyCisjZGVmaW5lIE1BWF9DUk9TU0xJTktTCTE2CisKK3R5cGVkZWYgc3RydWN0IGVudHJ5IHsKKwlURVJNVFlQRQl0dGVybTsKKwl1bnNpZ25lZAludXNlczsKKwlzdHJ1Y3QKKyAgICAgICAgeworCSAgICBjaGFyCQkqbmFtZTsKKwkgICAgc3RydWN0IGVudHJ5CSpsaW5rOworCSAgICBsb25nCQlsaW5lOworICAgICAgICB9CisJdXNlc1tNQVhfVVNFU107CisJaW50CQluY3Jvc3NsaW5rczsKKwlzdHJ1Y3QgZW50cnkJKmNyb3NzbGlua3NbTUFYX0NST1NTTElOS1NdOworCWxvbmcJCWNzdGFydCwgY2VuZDsKKwlsb25nCQlzdGFydGxpbmU7CisJc3RydWN0IGVudHJ5CSpuZXh0OworCXN0cnVjdCBlbnRyeQkqbGFzdDsKK30KK0VOVFJZOworCisjaWYgTkNVUlNFU19YTkFNRVMKKyNkZWZpbmUgTlVNX0JPT0xFQU5TKHRwKSAodHApLT5udW1fQm9vbGVhbnMKKyNkZWZpbmUgTlVNX05VTUJFUlModHApICAodHApLT5udW1fTnVtYmVycworI2RlZmluZSBOVU1fU1RSSU5HUyh0cCkgICh0cCktPm51bV9TdHJpbmdzCisjZGVmaW5lIEVYVF9OQU1FUyh0cCxpLGxpbWl0LGluZGV4LHRhYmxlKSAoaSA+PSBsaW1pdCkgPyB0cC0+ZXh0X05hbWVzW2luZGV4XSA6IHRhYmxlW2ldCisjZWxzZQorI2RlZmluZSBOVU1fQk9PTEVBTlModHApIEJPT0xDT1VOVAorI2RlZmluZSBOVU1fTlVNQkVSUyh0cCkgIE5VTUNPVU5UCisjZGVmaW5lIE5VTV9TVFJJTkdTKHRwKSAgU1RSQ09VTlQKKyNkZWZpbmUgRVhUX05BTUVTKHRwLGksbGltaXQsaW5kZXgsdGFibGUpIHRhYmxlW2ldCisjZW5kaWYKKworI2RlZmluZSBOVU1fRVhUX05BTUVTKHRwKSAoKHRwKS0+ZXh0X0Jvb2xlYW5zICsgKHRwKS0+ZXh0X051bWJlcnMgKyAodHApLT5leHRfU3RyaW5ncykKKworI2RlZmluZSBmb3JfZWFjaF9ib29sZWFuKG4sdHApIGZvcihuID0gMDsgbiA8IE5VTV9CT09MRUFOUyh0cCk7IG4rKykKKyNkZWZpbmUgZm9yX2VhY2hfbnVtYmVyKG4sdHApICBmb3IobiA9IDA7IG4gPCBOVU1fTlVNQkVSUyh0cCk7ICBuKyspCisjZGVmaW5lIGZvcl9lYWNoX3N0cmluZyhuLHRwKSAgZm9yKG4gPSAwOyBuIDwgTlVNX1NUUklOR1ModHApOyAgbisrKQorCisjZGVmaW5lIEV4dEJvb2xuYW1lKHRwLGksbmFtZXMpIEVYVF9OQU1FUyh0cCwgaSwgQk9PTENPVU5ULCAoaSAtICh0cC0+bnVtX0Jvb2xlYW5zIC0gdHAtPmV4dF9Cb29sZWFucykpLCBuYW1lcykKKyNkZWZpbmUgRXh0TnVtbmFtZSh0cCxpLG5hbWVzKSAgRVhUX05BTUVTKHRwLCBpLCBOVU1DT1VOVCwgKGkgLSAodHAtPm51bV9OdW1iZXJzIC0gdHAtPmV4dF9OdW1iZXJzKSkgKyB0cC0+ZXh0X0Jvb2xlYW5zLCBuYW1lcykKKyNkZWZpbmUgRXh0U3RybmFtZSh0cCxpLG5hbWVzKSAgRVhUX05BTUVTKHRwLCBpLCBTVFJDT1VOVCwgKGkgLSAodHAtPm51bV9TdHJpbmdzIC0gdHAtPmV4dF9TdHJpbmdzKSkgKyAodHAtPmV4dF9OdW1iZXJzICsgdHAtPmV4dF9Cb29sZWFucyksIG5hbWVzKQorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKEVOVFJZICopIF9uY19oZWFkOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihFTlRSWSAqKSBfbmNfdGFpbDsKKyNkZWZpbmUgZm9yX2VudHJ5X2xpc3QocXApCWZvciAocXAgPSBfbmNfaGVhZDsgcXA7IHFwID0gcXAtPm5leHQpCisKKyNkZWZpbmUgTUFYX0xJTkUJMTMyCisKKyNkZWZpbmUgTlVMTEhPT0sgICAgICAgIChib29sKCopKEVOVFJZICopKTAKKworLyoKKyAqIE5vdGUgdGhhdCBXQU5URUQgYW5kIFBSRVNFTlQgYXJlIG5vdCBzaW1wbGUgaW52ZXJzZXMhICBJZiBhIGNhcGFiaWxpdHkKKyAqIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2FuY2VsbGVkLCBpdCdzIG5vdCBjb25zaWRlcmVkIFdBTlRFRC4KKyAqLworI2RlZmluZSBXQU5URUQocykJKChzKSA9PSBBQlNFTlRfU1RSSU5HKQorI2RlZmluZSBQUkVTRU5UKHMpCSgoKHMpICE9IEFCU0VOVF9TVFJJTkcpICYmICgocykgIT0gQ0FOQ0VMTEVEX1NUUklORykpCisKKyNkZWZpbmUgQU5ETUlTU0lORyhwLHEpIFwKKwkJe2lmIChQUkVTRU5UKHApICYmICFQUkVTRU5UKHEpKSBfbmNfd2FybmluZygjcCAiIGJ1dCBubyAiICNxKTt9CisKKyNkZWZpbmUgUEFJUkVEKHAscSkgXAorCQl7IFwKKwkJaWYgKFBSRVNFTlQocSkgJiYgIVBSRVNFTlQocCkpIFwKKwkJCV9uY193YXJuaW5nKCNxICIgYnV0IG5vICIgI3ApOyBcCisJCWlmIChQUkVTRU5UKHApICYmICFQUkVTRU5UKHEpKSBcCisJCQlfbmNfd2FybmluZygjcCAiIGJ1dCBubyAiICNxKTsgXAorCQl9CisKKy8qIGFsbG9jX2VudHJ5LmM6IGVsZW1lbnRhcnkgYWxsb2NhdGlvbiBjb2RlICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRU5UUlkgKikgX25jX2NvcHlfZW50cnkgKEVOVFJZICpvbGRwKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19zYXZlX3N0ciAoY29uc3QgY2hhciAqY29uc3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19pbml0X2VudHJ5IChURVJNVFlQRSAqY29uc3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19tZXJnZV9lbnRyeSAoVEVSTVRZUEUgKmNvbnN0LCBURVJNVFlQRSAqY29uc3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY193cmFwX2VudHJ5IChFTlRSWSAqY29uc3QsIGJvb2wpOworCisvKiBhbGxvY190dHlwZS5jOiBlbGVtZW50YXJ5IGFsbG9jYXRpb24gY29kZSAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19hbGlnbl90ZXJtdHlwZSAoVEVSTVRZUEUgKiwgVEVSTVRZUEUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2NvcHlfdGVybXR5cGUgKFRFUk1UWVBFICosIFRFUk1UWVBFICopOworCisvKiBmcmVlX3R0eXBlLmM6IGVsZW1lbnRhcnkgYWxsb2NhdGlvbiBjb2RlICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfdGVybXR5cGUgKFRFUk1UWVBFICopOworCisvKiBsaWJfYWNzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfaW5pdF9hY3MgKHZvaWQpOwkvKiBjb3JyZXNwb25kcyB0byB0cmFkaXRpb25hbCAnaW5pdF9hY3MoKScgKi8KKworLyogbGliX3Rlcm1jYXAuYzogdHJpbSBzZ3IwIHN0cmluZyBmb3IgdGVybWNhcCB1c2VycyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3RyaW1fc2dyMCAoVEVSTVRZUEUgKik7CisKKy8qIHBhcnNlX2VudHJ5LmM6IGVudHJ5LXBhcnNpbmcgY29kZSAqLworI2lmIE5DVVJTRVNfWE5BTUVTCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGJvb2wpIF9uY191c2VyX2RlZmluYWJsZTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoYm9vbCkgX25jX2Rpc2FibGVfcGVyaW9kOworI2VuZGlmCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcGFyc2VfZW50cnkgKEVOVFJZICosIGludCwgYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfY2FwY21wIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIHdyaXRlX2VudHJ5LmM6IHdyaXRpbmcgYW4gZW50cnkgdG8gdGhlIGZpbGUgc3lzdGVtICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NldF93cml0ZWRpciAoY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfd3JpdGVfZW50cnkgKFRFUk1UWVBFICpjb25zdCk7CisKKy8qIGNvbXBfcGFyc2UuYzogZW50cnkgbGlzdCBoYW5kbGluZyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19yZWFkX2VudHJ5X3NvdXJjZSAoRklMRSosIGNoYXIqLCBpbnQsIGJvb2wsIGJvb2wgKCopKEVOVFJZKikpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19lbnRyeV9tYXRjaCAoY2hhciAqLCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3Jlc29sdmVfdXNlcyAoYm9vbCk7IC8qIG9icyAyMDA0MDcwNSAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3Jlc29sdmVfdXNlczIgKGJvb2wsIGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mcmVlX2VudHJpZXMgKEVOVFJZICopOworZXh0ZXJuIE5DVVJTRVNfSU1QRVhQIHZvaWQgTkNVUlNFU19BUEkgKCpfbmNfY2hlY2tfdGVybXR5cGUpKFRFUk1UWVBFICopOyAvKiBvYnMgMjAwNDA3MDUgKi8KK2V4dGVybiBOQ1VSU0VTX0lNUEVYUCB2b2lkIE5DVVJTRVNfQVBJICgqX25jX2NoZWNrX3Rlcm10eXBlMikoVEVSTVRZUEUgKiwgYm9vbCk7CisKKy8qIHRyYWNlX3huYW1lcy5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3RyYWNlX3huYW1lcyAoVEVSTVRZUEUgKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOQ1VSU0VTX1RFUk1fRU5UUllfSF9pbmNsICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Rlcm1jYXAuaC5pbiBiL2luY2x1ZGUvdGVybWNhcC5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZGMzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Rlcm1jYXAuaC5pbgpAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiB0ZXJtY2FwLmguaW4sdiAxLjE2IDIwMDEvMDMvMjQgMjE6NTM6MjcgdG9tIEV4cCAkICovCisKKyNpZm5kZWYgTkNVUlNFU19URVJNQ0FQX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX1RFUk1DQVBfSF9pbmNsCTEKKworI3VuZGVmICBOQ1VSU0VTX1ZFUlNJT04KKyNkZWZpbmUgTkNVUlNFU19WRVJTSU9OICJATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIgorCisjaW5jbHVkZSA8bmN1cnNlc19kbGwuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjdW5kZWYgIE5DVVJTRVNfQ09OU1QgCisjZGVmaW5lIE5DVVJTRVNfQ09OU1QgQE5DVVJTRVNfQ09OU1RAIAorCisjdW5kZWYgIE5DVVJTRVNfT1NQRUVEIAorI2RlZmluZSBOQ1VSU0VTX09TUEVFRCBATkNVUlNFU19PU1BFRURAIAorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNoYXIpIFBDOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihjaGFyICopIFVQOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihjaGFyICopIEJDOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX09TUEVFRCkgb3NwZWVkOyAKKworI2lmICFkZWZpbmVkKE5DVVJTRVNfVEVSTV9IX2luY2wpCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0Z2V0c3RyIChOQ1VSU0VTX0NPTlNUIGNoYXIgKiwgY2hhciAqKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0Z290byAoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0Z2V0ZW50IChjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0Z2V0ZmxhZyAoTkNVUlNFU19DT05TVCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGdldG51bSAoTkNVUlNFU19DT05TVCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdHB1dHMgKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKCopKGludCkpOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOQ1VSU0VTX1RFUk1DQVBfSF9pbmNsICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RpYy5oIGIvaW5jbHVkZS90aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTEwMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90aWMuaApAQCAtMCwwICsxLDMzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAxOTk2IG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogJElkOiB0aWMuaCx2IDEuNjIgMjAwNy8wOC8xMSAxNjoxMjo0MyB0b20gRXhwICQKKyAqCXRpYy5oIC0gR2xvYmFsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIHRlcm1pbmZvCisgKgkJCWNvbXBpbGVyLgorICovCisKKyNpZm5kZWYgX19USUNfSAorI2RlZmluZSBfX1RJQ19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPGN1cnNlcy5oPgkvKiBmb3IgdGhlIF90cmFjZWYoKSBwcm90b3R5cGUsIEVSUi9PSywgYm9vbCBkZWZzICovCisKKy8qCisqKiBUaGUgZm9ybWF0IG9mIGNvbXBpbGVkIHRlcm1pbmZvIGZpbGVzIGlzIGFzIGZvbGxvd3M6CisqKgorKioJCUhlYWRlciAoMTIgYnl0ZXMpLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGdpdmVuIGJlbG93CisqKgkJTmFtZXMgU2VjdGlvbiwgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIHRlcm1pbmFsCisqKgkJQm9vbGVhbiBTZWN0aW9uLCBjb250YWluaW5nIHRoZSB2YWx1ZXMgb2YgYWxsIG9mIHRoZQorKioJCQkJYm9vbGVhbiBjYXBhYmlsaXRpZXMKKyoqCQkJCUEgbnVsbCBieXRlIG1heSBiZSBpbnNlcnRlZCBoZXJlIHRvIG1ha2UKKyoqCQkJCXN1cmUgdGhhdCB0aGUgTnVtYmVyIFNlY3Rpb24gYmVnaW5zIG9uIGFuCisqKgkJCQlldmVuIHdvcmQgYm91bmRhcnkuCisqKgkJTnVtYmVyIFNlY3Rpb24sIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIG51bWVyaWMKKyoqCQkJCWNhcGFiaWxpdGllcywgZWFjaCBhcyBhIHNob3J0IGludGVnZXIKKyoqCQlTdHJpbmcgU2VjdGlvbiwgY29udGFpbmluZyBzaG9ydCBpbnRlZ2VyIG9mZnNldHMgaW50byB0aGUKKyoqCQkJCVN0cmluZyBUYWJsZSwgb25lIHBlciBzdHJpbmcgY2FwYWJpbGl0eQorKioJCVN0cmluZyBUYWJsZSwgY29udGFpbmluZyB0aGUgYWN0dWFsIGNoYXJhY3RlcnMgb2YgdGhlIHN0cmluZworKioJCQkJY2FwYWJpbGl0aWVzLgorKioKKyoqCU5PVEUgdGhhdCBhbGwgc2hvcnQgaW50ZWdlcnMgaW4gdGhlIGZpbGUgYXJlIHN0b3JlZCB1c2luZyBWQVgvUERQLXN0eWxlCisqKglieXRlLW9yZGVyLCBpLmUuLCBsZWFzdC1zaWduaWZpY2FudCBieXRlIGZpcnN0LgorKioKKyoqCVRoZXJlIGlzIG5vIHN0cnVjdHVyZSBkZWZpbml0aW9uIGhlcmUgYmVjYXVzZSBpdCB3b3VsZCBvbmx5IGNvbmZ1c2UKKyoqCW1hdHRlcnMuICBUZXJtaW5mbyBmb3JtYXQgaXMgYSByYXcgYnl0ZSBsYXlvdXQsIG5vdCBhIHN0cnVjdHVyZQorKioJZHVtcC4gIElmIHlvdSBoYXBwZW4gdG8gYmUgb24gYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgd2l0aCAxNi1iaXQKKyoqCXNob3J0cyB0aGF0IHJlcXVpcmVzIG5vIHBhZGRpbmcgYmV0d2VlbiBzaG9ydCBtZW1iZXJzIGluIGEgc3RydWN0LAorKioJdGhlbiB0aGVyZSBpcyBhIG5hdHVyYWwgQyBzdHJ1Y3R1cmUgdGhhdCBjYXB0dXJlcyB0aGUgaGVhZGVyLCBidXQKKyoqCW5vdCB2ZXJ5IGhlbHBmdWxseS4KKyovCisKKyNkZWZpbmUgTUFHSUMJCTA0MzIJLyogZmlyc3QgdHdvIGJ5dGVzIG9mIGEgY29tcGlsZWQgZW50cnkgKi8KKworI3VuZGVmICBCWVRFCisjZGVmaW5lIEJZVEUocCxuKQkodW5zaWduZWQgY2hhcikoKHApW25dKQorCisjZGVmaW5lIElTX05FRzEocCkJKChCWVRFKHAsMCkgPT0gMDM3NykgJiYgKEJZVEUocCwxKSA9PSAwMzc3KSkKKyNkZWZpbmUgSVNfTkVHMihwKQkoKEJZVEUocCwwKSA9PSAwMzc2KSAmJiAoQllURShwLDEpID09IDAzNzcpKQorI2RlZmluZSBMT1dfTVNCKHApCShCWVRFKHAsMCkgKyAyNTYqQllURShwLDEpKQorCisjZGVmaW5lIElTX1RJQ19NQUdJQyhwKQkoTE9XX01TQihwKSA9PSBNQUdJQykKKworLyoKKyAqIFRoZSAibWF4aW11bSIgaGVyZSBpcyBtaXNsZWFkaW5nOyBYU0kgZ3VhcmFudGVlcyBtaW5pbXVtIHZhbHVlcywgd2hpY2ggYQorICogZ2l2ZW4gaW1wbGVtZW50YXRpb24gbWF5IGV4Y2VlZC4KKyAqLworI2RlZmluZSBNQVhfTkFNRV9TSVpFCTUxMgkvKiBtYXhpbXVtIGxlZ2FsIG5hbWUgZmllbGQgc2l6ZSAoWFNJOjEyNykgKi8KKyNkZWZpbmUgTUFYX0VOVFJZX1NJWkUJNDA5NgkvKiBtYXhpbXVtIGxlZ2FsIGVudHJ5IHNpemUgKi8KKworLyoKKyAqIFRoZSBtYXhpbXVtIHNpemUgb2YgaW5kaXZpZHVhbCBuYW1lIG9yIGFsaWFzIGlzIGd1YXJhbnRlZWQgaW4gWFNJIHRvIGJlIGF0CisgKiBsZWFzdCAxNCwgc2luY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgb2xkZXIgZmlsZW5hbWUgbGVuZ3Rocy4gIE5ld2VyCisgKiBzeXN0ZW1zIGFsbG93IGxvbmdlciBhbGlhc2VzLCB0aG91Z2ggbm90IG1hbnkgdGVybWluYWwgZGVzY3JpcHRpb25zIGFyZQorICogd3JpdHRlbiB0byB1c2UgdGhlbS4gIFRoZSBNQVhfQUxJQVMgc3ltYm9sIGlzIHVzZWQgZm9yIHdhcm5pbmdzLgorICovCisjaWYgSEFWRV9MT05HX0ZJTEVfTkFNRVMKKyNkZWZpbmUgTUFYX0FMSUFTCTMyCS8qIHNtYWxsZXIgdGhhbiBQT1NJWCBtaW5pbXVtIGZvciBQQVRIX01BWCAqLworI2Vsc2UKKyNkZWZpbmUgTUFYX0FMSUFTCTE0CS8qIFNWcjMgZmlsZW5hbWUgbGVuZ3RoICovCisjZW5kaWYKKworLyogbG9jYXRpb24gb2YgdXNlcidzIHBlcnNvbmFsIGluZm8gZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSSVZBVEVfSU5GTwkiJXMvLnRlcm1pbmZvIgkvKiBwbHVnIGdldGVudigiSE9NRSIpIGludG8gJXMgKi8KKworLyoKKyAqIFNvbWUgdHJhY2VzIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIHZpYSB0aWMncyB2ZXJib3NlIG9wdGlvbiAoYW5kIHNpbWlsYXIgaW4KKyAqIGluZm9jbXAgYW5kIHRvZSkgcmF0aGVyIHRoYW4gdGhlICd0cmFjZSgpJyBmdW5jdGlvbi4gIFNvIHdlIHVzZSB0aGUgYml0cworICogYWJvdmUgdGhlIG5vcm1hbCB0cmFjZSgpIHBhcmFtZXRlciBhcyBhIGRlYnVnLWxldmVsLgorICovCisKKyNkZWZpbmUgTUFYX0RFQlVHX0xFVkVMIDE1CisjZGVmaW5lIERFQlVHX0xFVkVMKG4pCSgobikgPDwgVFJBQ0VfU0hJRlQpCisKKyNkZWZpbmUgc2V0X3RyYWNlX2xldmVsKG4pIFwKKwlfbmNfdHJhY2luZyAmPSBERUJVR19MRVZFTChNQVhfREVCVUdfTEVWRUwpLCBcCisJX25jX3RyYWNpbmcgfD0gREVCVUdfTEVWRUwobikKKworI2lmZGVmIFRSQUNFCisjZGVmaW5lIERFQlVHKG4sIGEpCWlmIChfbmNfdHJhY2luZyA+PSBERUJVR19MRVZFTChuKSkgX3RyYWNlZiBhCisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBhKQkvKm5vdGhpbmcqLworI2VuZGlmCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIodW5zaWduZWQpIF9uY190cmFjaW5nOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190cmFjZWYgKGNoYXIgKiwgLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc2J1ZiAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXNidWYyIChpbnQsIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHR5cGVzIG9mIHRva2VucyByZXR1cm5lZCBieSB0aGUgc2Nhbm5lci4gIFRoZSBmaXJzdAorICogdGhyZWUgYXJlIGFsc28gdXNlZCBpbiB0aGUgaGFzaCB0YWJsZSBvZiBjYXBhYmlsaXR5IG5hbWVzLiAgVGhlIHNjYW5uZXIKKyAqIHJldHVybnMgb25lIG9mIHRoZXNlIHZhbHVlcyBhZnRlciBsb2FkaW5nIHRoZSBzcGVjaWZpY3MgaW50byB0aGUgZ2xvYmFsCisgKiBzdHJ1Y3R1cmUgY3Vycl90b2tlbi4KKyAqLworCisjZGVmaW5lIEJPT0xFQU4gMAkJLyogQm9vbGVhbiBjYXBhYmlsaXR5ICovCisjZGVmaW5lIE5VTUJFUiAxCQkvKiBOdW1lcmljIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgU1RSSU5HIDIJCS8qIFN0cmluZy12YWx1ZWQgY2FwYWJpbGl0eSAqLworI2RlZmluZSBDQU5DRUwgMwkJLyogQ2FwYWJpbGl0eSB0byBiZSBjYW5jZWxsZWQgaW4gZm9sbG93aW5nIHRjJ3MgKi8KKyNkZWZpbmUgTkFNRVMgIDQJCS8qIFRoZSBuYW1lcyBmb3IgYSB0ZXJtaW5hbCB0eXBlICovCisjZGVmaW5lIFVOREVGICA1CQkvKiBVbmRlZmluZWQgKi8KKworI2RlZmluZSBOT19QVVNIQkFDSwktMQkvKiB1c2VkIGluIHB1c2h0eXBlIHRvIGluZGljYXRlIG5vIHB1c2hiYWNrICovCisKKwkvKgorCSAqCVRoZSBnbG9iYWwgc3RydWN0dXJlIGluIHdoaWNoIHRoZSBzcGVjaWZpYyBwYXJ0cyBvZiBhCisJICoJc2Nhbm5lZCB0b2tlbiBhcmUgcmV0dXJuZWQuCisJICoKKwkgKi8KKworc3RydWN0IHRva2VuCit7CisJY2hhcgkqdGtfbmFtZTsJCS8qIG5hbWUgb2YgY2FwYWJpbGl0eSAqLworCWludAl0a192YWxudW1iZXI7CS8qIHZhbHVlIG9mIGNhcGFiaWxpdHkgKGlmIGEgbnVtYmVyKSAqLworCWNoYXIJKnRrX3ZhbHN0cmluZzsJLyogdmFsdWUgb2YgY2FwYWJpbGl0eSAoaWYgYSBzdHJpbmcpICovCit9OworCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKHN0cnVjdCB0b2tlbikJX25jX2N1cnJfdG9rZW47CisKKwkvKgorCSAqIE9mZnNldHMgdG8gc3RyaW5nIGNhcGFiaWxpdGllcywgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbmtleQorCSAqIGNvZGVzLgorCSAqLworc3RydWN0IHRpbmZvX2ZrZXlzIHsKKwl1bnNpZ25lZCBvZmZzZXQ7CisJY2h0eXBlIGNvZGU7CisJfTsKKworI2lmCUJST0tFTl9MSU5LRVIKKworI2RlZmluZQlfbmNfdGluZm9fZmtleXMJX25jX3RpbmZvX2ZrZXlzZigpCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3Qgc3RydWN0IHRpbmZvX2ZrZXlzICopIF9uY190aW5mb19ma2V5c2YgKHZvaWQpOworCisjZWxzZQorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNvbnN0IHN0cnVjdCB0aW5mb19ma2V5cykgX25jX3RpbmZvX2ZrZXlzW107CisKKyNlbmRpZgorCisJLyoKKwkgKiBUaGUgZmlsZSBjb21wX2NhcHRhYi5jIGNvbnRhaW5zIGFuIGFycmF5IG9mIHRoZXNlIHN0cnVjdHVyZXMsIG9uZQorCSAqIHBlciBwb3NzaWJsZSBjYXBhYmlsaXR5LiAgVGhlc2UgYXJlIGluZGV4ZWQgYnkgYSBoYXNoIHRhYmxlIGFycmF5IG9mCisJICogcG9pbnRlcnMgdG8gdGhlIHNhbWUgc3RydWN0dXJlcyBmb3IgdXNlIGJ5IHRoZSBwYXJzZXIuCisJICovCisKK3N0cnVjdCBuYW1lX3RhYmxlX2VudHJ5Cit7CisJY29uc3QgY2hhciAqbnRlX25hbWU7CS8qIG5hbWUgdG8gaGFzaCBvbiAqLworCWludAludGVfdHlwZTsJLyogQk9PTEVBTiwgTlVNQkVSIG9yIFNUUklORyAqLworCXNob3J0CW50ZV9pbmRleDsJLyogaW5kZXggb2YgYXNzb2NpYXRlZCB2YXJpYWJsZSBpbiBpdHMgYXJyYXkgKi8KKwlzaG9ydAludGVfbGluazsJLyogaW5kZXggaW4gdGFibGUgb2YgbmV4dCBoYXNoLCBvciAtMSAqLworfTsKKworc3RydWN0IGFsaWFzCit7CisJY29uc3QgY2hhcgkqZnJvbTsKKwljb25zdCBjaGFyCSp0bzsKKwljb25zdCBjaGFyCSpzb3VyY2U7Cit9OworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKikgX25jX2dldF90YWJsZSAoYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3Qgc2hvcnQgKikgX25jX2dldF9oYXNoX3RhYmxlIChib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBzdHJ1Y3QgYWxpYXMgKikgX25jX2dldF9hbGlhc190YWJsZSAoYm9vbCk7CisKKyNkZWZpbmUgTk9URk9VTkQJKChzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqKSAwKQorCisvKiBvdXQtb2YtYmFuZCB2YWx1ZXMgZm9yIHJlcHJlc2VudGluZyBhYnNlbnQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIEFCU0VOVF9CT09MRUFOCQkoKHNpZ25lZCBjaGFyKS0xKQkvKiAyNTUgKi8KKyNkZWZpbmUgQUJTRU5UX05VTUVSSUMJCSgtMSkKKyNkZWZpbmUgQUJTRU5UX1NUUklORwkJKGNoYXIgKikwCisKKy8qIG91dC1vZi1iYW5kIHZhbHVlcyBmb3IgcmVwcmVzZW50aW5nIGNhbmNlbHMgKi8KKyNkZWZpbmUgQ0FOQ0VMTEVEX0JPT0xFQU4JKChzaWduZWQgY2hhciktMikJLyogMjU0ICovCisjZGVmaW5lIENBTkNFTExFRF9OVU1FUklDCSgtMikKKyNkZWZpbmUgQ0FOQ0VMTEVEX1NUUklORwkoY2hhciAqKSgtMSkKKworI2RlZmluZSBWQUxJRF9CT09MRUFOKHMpICgodW5zaWduZWQgY2hhcikocykgPD0gMSkgLyogcmVqZWN0ICItMSIgKi8KKyNkZWZpbmUgVkFMSURfTlVNRVJJQyhzKSAoKHMpID49IDApCisjZGVmaW5lIFZBTElEX1NUUklORyhzKSAgKChzKSAhPSBDQU5DRUxMRURfU1RSSU5HICYmIChzKSAhPSBBQlNFTlRfU1RSSU5HKQorCisvKiB0ZXJtY2FwIGVudHJpZXMgbG9uZ2VyIHRoYW4gdGhpcyBtYXkgYnJlYWsgb2xkIGJpbmFyaWVzICovCisjZGVmaW5lIE1BWF9URVJNQ0FQX0xFTkdUSAkxMDIzCisKKy8qIHRoaXMgaXMgYSBkb2N1bWVudGVkIGxpbWl0YXRpb24gb2YgdGVybWluZm8gKi8KKyNkZWZpbmUgTUFYX1RFUk1JTkZPX0xFTkdUSAk0MDk2CisKKyNpZm5kZWYgVEVSTUlORk8KKyNkZWZpbmUgVEVSTUlORk8gIi91c3Ivc2hhcmUvdGVybWluZm8iCisjZW5kaWYKKworLyogYWNjZXNzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh1bnNpZ25lZCkgX25jX3BhdGhsYXN0IChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19pc19hYnNfcGF0aCAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfaXNfZGlyX3BhdGggKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX2lzX2ZpbGVfcGF0aCAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19iYXNlbmFtZSAoY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19yb290bmFtZSAoY2hhciAqKTsKKworLyogY29tcF9oYXNoLmM6IG5hbWUgbG9va3VwICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKikgX25jX2ZpbmRfZW50cnkKKwkoY29uc3QgY2hhciAqLCBjb25zdCBzaG9ydCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKSBfbmNfZmluZF90eXBlX2VudHJ5CisJKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqKTsKKworLyogY29tcF9zY2FuLmM6IGxleGljYWwgYW5hbHlzaXMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICBfbmNfZ2V0X3Rva2VuIChib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfcGFuaWNfbW9kZSAoY2hhcik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3B1c2hfdG9rZW4gKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3Jlc2V0X2lucHV0IChGSUxFICosIGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX2N1cnJfY29sOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY19jdXJyX2xpbmU7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX3N5bnRheDsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIobG9uZykgX25jX2NvbW1lbnRfZW5kOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihsb25nKSBfbmNfY29tbWVudF9zdGFydDsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIobG9uZykgX25jX2N1cnJfZmlsZV9wb3M7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpIF9uY19zdGFydF9saW5lOworI2RlZmluZSBTWU5fVEVSTUlORk8JMAorI2RlZmluZSBTWU5fVEVSTUNBUAkxCisKKy8qIGNvbXBfZXJyb3IuYzogd2FybmluZyAmIGFib3J0IG1lc3NhZ2VzICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfZ2V0X3NvdXJjZSAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2Vycl9hYm9ydCAoY29uc3QgY2hhciAqY29uc3QsLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpIEdDQ19OT1JFVFVSTjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZ2V0X3R5cGUgKGNoYXIgKm5hbWUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zZXRfc291cmNlIChjb25zdCBjaGFyICpjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NldF90eXBlIChjb25zdCBjaGFyICpjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3N5c2Vycl9hYm9ydCAoY29uc3QgY2hhciAqY29uc3QsLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpIEdDQ19OT1JFVFVSTjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfd2FybmluZyAoY29uc3QgY2hhciAqY29uc3QsLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihib29sKSBfbmNfc3VwcHJlc3Nfd2FybmluZ3M7CisKKy8qIGNvbXBfZXhwYW5kLmM6IGV4cGFuZCBzdHJpbmcgaW50byByZWFkYWJsZSBmb3JtICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfdGljX2V4cGFuZCAoY29uc3QgY2hhciAqLCBib29sLCBpbnQpOworCisvKiBjb21wX3NjYW4uYzogZGVjb2RlIHN0cmluZyBmcm9tIHJlYWRhYmxlIGZvcm0gKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY190cmFuc19zdHJpbmcgKGNoYXIgKiwgY2hhciAqKTsKKworLyogY2FwdG9pbmZvLmM6IGNhcGFiaWxpdHkgY29udmVyc2lvbiAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX2NhcHRvaW5mbyAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCBjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfaW5mb3RvY2FwIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50IGNvbnN0KTsKKworLyogaG9tZV90ZXJtaW5mby5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfaG9tZV90ZXJtaW5mbyAodm9pZCk7CisKKy8qIGxpYl90cGFybS5jICovCisjZGVmaW5lIE5VTV9QQVJNIDkKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY190cGFybV9lcnI7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY190cGFybV9hbmFseXplKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50ICopOworCisvKiBsaWJfdHB1dHMuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY19udWxsc19zZW50OwkJLyogQWRkIG9uZSBmb3IgZXZlcnkgbnVsbCBzZW50ICovCisKKy8qIGNvbXBfbWFpbi5jOiBjb21waWxlciBtYWluICovCitleHRlcm4gY29uc3QgY2hhciAqIF9uY19wcm9nbmFtZTsKKworLyogZGJfaXRlcmF0b3IuYyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBkYmRUSUMgPSAwLAorI2lmIFVTRV9EQVRBQkFTRQorICAgIGRiZEVudk9uY2UsCisgICAgZGJkSG9tZSwKKyAgICBkYmRFbnZMaXN0LAorICAgIGRiZENmZ0xpc3QsCisgICAgZGJkQ2ZnT25jZSwKKyNlbmRpZgorI2lmIFVTRV9URVJNQ0FQCisgICAgZGJkRW52T25jZTIsCisgICAgZGJkRW52TGlzdDIsCisgICAgZGJkQ2ZnTGlzdDIsCisjZW5kaWYKKyAgICBkYmRMQVNUCit9IERCRElSUzsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX25leHRfZGIoREJESVJTICosIGludCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY190aWNfZGlyIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19maXJzdF9kYihEQkRJUlMgKiwgaW50ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19sYXN0X2RiKHZvaWQpOworCisvKiB3cml0ZV9lbnRyeS5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfdGljX3dyaXR0ZW4gKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19USUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91bmN0cmwuaC5pbiBiL2luY2x1ZGUvdW5jdHJsLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkNzRiNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdW5jdHJsLmguaW4KQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiB1bmN0cmwuaAorICoKKyAqIERpc3BsYXkgYSBwcmludGFibGUgdmVyc2lvbiBvZiBhIGNvbnRyb2wgY2hhcmFjdGVyLgorICogQ29udHJvbCBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgaW4gY2FyZXQgbm90YXRpb24gKF54KSwgREVMRVRFIGlzIGRpc3BsYXllZAorICogYXMgXj8uIFByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMgaXMuCisgKi8KKworLyogJElkOiB1bmN0cmwuaC5pbix2IDEuMTAgMjAwMS8wMy8yNCAyMTo1MzoyNSB0b20gRXhwICQgKi8KKworI2lmbmRlZiBOQ1VSU0VTX1VOQ1RSTF9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19VTkNUUkxfSF9pbmNsCTEKKworI3VuZGVmICBOQ1VSU0VTX1ZFUlNJT04KKyNkZWZpbmUgTkNVUlNFU19WRVJTSU9OICJATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKworI3VuZGVmIHVuY3RybAorTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCBjaGFyICopIHVuY3RybCAoY2h0eXBlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5DVVJTRVNfVU5DVFJMX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvaW5zdGFsbC1zaCBiL2luc3RhbGwtc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDYyZmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2luc3RhbGwtc2gKQEAgLTAsMCArMSwyOTQgQEAKKyMhIC9iaW4vc2gKKyMKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisjCisjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCisjIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCisjCisjIENvcHlyaWdodCAoQykgMTk5NCBYIENvbnNvcnRpdW0KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyMgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisjIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQy0KKyMgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyMgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisjIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyMgdGl1bS4KKyMKKyMKKyMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guICBJdCBjYW4gb25seSBpbnN0YWxsIG9uZSBmaWxlIGF0IGEgdGltZSwgYSByZXN0cmljdGlvbgorIyBzaGFyZWQgd2l0aCBtYW55IE9TJ3MgaW5zdGFsbCBwcm9ncmFtcy4KKworCisjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKKworIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgorZG9pdD0iJHtET0lUUFJPRy19IgorCisKKyMgcHV0IGluIGFic29sdXRlIHBhdGhzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOyBvciB1c2UgZW52LiB2YXJzLgorCittdnByb2c9IiR7TVZQUk9HLW12fSIKK2NwcHJvZz0iJHtDUFBST0ctY3B9IgorY2htb2Rwcm9nPSIke0NITU9EUFJPRy1jaG1vZH0iCitjaG93bnByb2c9IiR7Q0hPV05QUk9HLWNob3dufSIKK2NoZ3JwcHJvZz0iJHtDSEdSUFBST0ctY2hncnB9Igorc3RyaXBwcm9nPSIke1NUUklQUFJPRy1zdHJpcH0iCitybXByb2c9IiR7Uk1QUk9HLXJtfSIKK21rZGlycHJvZz0iJHtNS0RJUlBST0ctbWtkaXJ9IgorCit0cmFuc2Zvcm1iYXNlbmFtZT0iIgordHJhbnNmb3JtX2FyZz0iIgoraW5zdGNtZD0iJG12cHJvZyIKK2NobW9kY21kPSIkY2htb2Rwcm9nIDA3NTUiCitjaG93bmNtZD0iIgorY2hncnBjbWQ9IiIKK3N0cmlwY21kPSIiCitybWNtZD0iJHJtcHJvZyAtZiIKK212Y21kPSIkbXZwcm9nIgorc3JjPSIiCitkc3Q9IiIKK2Rpcl9hcmc9IiIKKword2hpbGUgWyB4IiQxIiAhPSB4IF07IGRvCisgICAgY2FzZSAkMSBpbgorCS1jKSBpbnN0Y21kPSRjcHByb2cKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWQpIGRpcl9hcmc9dHJ1ZQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktbSkgY2htb2RjbWQ9IiRjaG1vZHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktcykgc3RyaXBjbWQ9JHN0cmlwcHJvZworCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktdD0qKSB0cmFuc2Zvcm1hcmc9YGVjaG8gJDEgfCBzZWQgJ3MvLXQ9Ly8nYAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktYj0qKSB0cmFuc2Zvcm1iYXNlbmFtZT1gZWNobyAkMSB8IHNlZCAncy8tYj0vLydgCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCSopICBpZiBbIHgiJHNyYyIgPSB4IF0KKwkgICAgdGhlbgorCQlzcmM9JDEKKwkgICAgZWxzZQorCQkjIHRoaXMgY29sb24gaXMgdG8gd29yayBhcm91bmQgYSAzODZCU0QgL2Jpbi9zaCBidWcKKwkJOgorCQlkc3Q9JDEKKwkgICAgZmkKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworICAgIGVzYWMKK2RvbmUKKworaWYgWyB4IiRzcmMiID0geCBdCit0aGVuCisJZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkIiA+JjIKKwlleGl0IDEKK2Vsc2UKKwk6CitmaQorCitpZiBbIHgiJGRpcl9hcmciICE9IHggXTsgdGhlbgorCWRzdD0kc3JjCisJc3JjPSIiCisKKwlpZiBbIC1kICIkZHN0IiBdOyB0aGVuCisJCWluc3RjbWQ9OgorCQljaG1vZGNtZD0iIgorCWVsc2UKKwkJaW5zdGNtZD0kbWtkaXJwcm9nCisJZmkKK2Vsc2UKKworIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKworCWlmIFsgLWYgIiRzcmMiIF0gfHwgWyAtZCAiJHNyYyIgXQorCXRoZW4KKwkJOgorCWVsc2UKKwkJZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QiID4mMgorCQlleGl0IDEKKwlmaQorCisJaWYgWyB4IiRkc3QiID0geCBdCisJdGhlbgorCQllY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkIiA+JjIKKwkJZXhpdCAxCisJZWxzZQorCQk6CisJZmkKKworIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgaWYgeW91ciBzeXN0ZW0KKyMgZG9lcyBub3QgbGlrZSBkb3VibGUgc2xhc2hlcyBpbiBmaWxlbmFtZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBsb2dpYworCisJaWYgWyAtZCAiJGRzdCIgXQorCXRoZW4KKwkJZHN0PSRkc3QvYGJhc2VuYW1lICIkc3JjImAKKwllbHNlCisJCToKKwlmaQorZmkKKworIyMgdGhpcyBzZWQgY29tbWFuZCBlbXVsYXRlcyB0aGUgZGlybmFtZSBjb21tYW5kCitkc3RkaXI9YGVjaG8gIiRkc3QiIHwgc2VkIC1lICdzLFteL10qJCwsO3MsLyQsLDtzLF4kLC4sJ2AKKworIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0cy4KKyMgIHRoaXMgcGFydCBpcyB0YWtlbiBmcm9tIE5vYWggRnJpZWRtYW4ncyBta2luc3RhbGxkaXJzIHNjcmlwdAorCisjIFNraXAgbG90cyBvZiBzdGF0IGNhbGxzIGluIHRoZSB1c3VhbCBjYXNlLgoraWYgWyAhIC1kICIkZHN0ZGlyIiBdOyB0aGVuCitkZWZhdWx0SUZTPScKKwknCitJRlM9IiR7SUZTLSRkZWZhdWx0SUZTfSIKKworb0lGUz0kSUZTCisjIFNvbWUgc2gncyBjYW4ndCBoYW5kbGUgSUZTPS8gZm9yIHNvbWUgcmVhc29uLgorSUZTPSclJworc2V0IC0gYGVjaG8gIiRkc3RkaXIiIHwgc2VkIC1lICdzQC9AJUBnJyAtZSAnc0BeJUAvQCdgCitJRlM9JG9JRlMKKworcGF0aGNvbXA9JycKKword2hpbGUgWyAkIyAtbmUgMCBdIDsgZG8KKwlwYXRoY29tcD0kcGF0aGNvbXAkMQorCXNoaWZ0CisKKwlpZiBbICEgLWQgIiRwYXRoY29tcCIgXSA7CisgICAgICAgIHRoZW4KKwkJJG1rZGlycHJvZyAiJHBhdGhjb21wIgorCWVsc2UKKwkJOgorCWZpCisKKwlwYXRoY29tcD0kcGF0aGNvbXAvCitkb25lCitmaQorCitpZiBbIHgiJGRpcl9hcmciICE9IHggXQordGhlbgorCSRkb2l0ICRpbnN0Y21kICIkZHN0IiAmJgorCisJaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IGVsc2UgOiA7IGZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IGVsc2UgOiA7IGZpICYmCisJaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAiJGRzdCI7IGVsc2UgOiA7IGZpICYmCisJaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAiJGRzdCI7IGVsc2UgOiA7IGZpCitlbHNlCisKKyMgSWYgd2UncmUgZ29pbmcgdG8gcmVuYW1lIHRoZSBmaW5hbCBleGVjdXRhYmxlLCBkZXRlcm1pbmUgdGhlIG5hbWUgbm93LgorCisJaWYgWyB4IiR0cmFuc2Zvcm1hcmciID0geCBdCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAiJGRzdCJgCisJZWxzZQorCQlkc3RmaWxlPWBiYXNlbmFtZSAiJGRzdCIgJHRyYW5zZm9ybWJhc2VuYW1lIHwKKwkJCXNlZCAkdHJhbnNmb3JtYXJnYCR0cmFuc2Zvcm1iYXNlbmFtZQorCWZpCisKKyMgZG9uJ3QgYWxsb3cgdGhlIHNlZCBjb21tYW5kIHRvIGNvbXBsZXRlbHkgZWxpbWluYXRlIHRoZSBmaWxlbmFtZQorCisJaWYgWyB4IiRkc3RmaWxlIiA9IHggXQorCXRoZW4KKwkJZHN0ZmlsZT1gYmFzZW5hbWUgIiRkc3QiYAorCWVsc2UKKwkJOgorCWZpCisKKyMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisKKwlkc3R0bXA9JGRzdGRpci8jaW5zdC4kJCMKKwlybXRtcD0kZHN0ZGlyLyNybS4kJCMKKworIyBUcmFwIHRvIGNsZWFuIHVwIHRlbXAgZmlsZXMgYXQgZXhpdC4KKworCXRyYXAgJ3N0YXR1cz0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHN0YXR1cycgMAorCXRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisKKyMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorCisJJGRvaXQgJGluc3RjbWQgIiRzcmMiICIkZHN0dG1wIiAmJgorCisjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMKKworIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorCisJaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IGVsc2UgOjtmaSAmJgorCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyBlbHNlIDo7ZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgZWxzZSA6O2ZpICYmCisJaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAiJGRzdHRtcCI7IGVsc2UgOjtmaSAmJgorCisjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uICBXZSB0cnkgdGhpcworIyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uCisjIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAKKyMgbWlnaHQgZmFpbCBidXQgdGhlIG5ldyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKworeworCWlmIFsgLWYgIiRkc3RkaXIvJGRzdGZpbGUiIF0KKwl0aGVuCisJCSRkb2l0ICRybWNtZCAtZiAiJGRzdGRpci8kZHN0ZmlsZSIgMj4vZGV2L251bGwgfHwKKwkJJGRvaXQgJG12Y21kIC1mICIkZHN0ZGlyLyRkc3RmaWxlIiAiJHJtdG1wIiAyPi9kZXYvbnVsbCB8fAorCQl7CisJCSAgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3RkaXIvJGRzdGZpbGUiID4mMgorCQkgIChleGl0IDEpOyBleGl0CisJCX0KKwllbHNlCisJCToKKwlmaQorfSAmJgorCisjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisKKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0ZGlyLyRkc3RmaWxlIgorCitmaSAmJgorCisjIFRoZSBmaW5hbCBsaXR0bGUgdHJpY2sgdG8gImNvcnJlY3RseSIgcGFzcyB0aGUgZXhpdCBzdGF0dXMgdG8gdGhlIGV4aXQgdHJhcC4KKworeworCShleGl0IDApOyBleGl0Cit9CmRpZmYgLS1naXQgYS9tYW4vTUt0ZXJtaW5mby5zaCBiL21hbi9NS3Rlcm1pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhOTk2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vTUt0ZXJtaW5mby5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisjICRJZDogTUt0ZXJtaW5mby5zaCx2IDEuMTIgMjAwMy8wMS8xMSAyMTo0MjoxMiB0b20gRXhwICQKKyMKKyMgTUt0ZXJtaW5mby5zaCAtLSBnZW5lcmF0ZSB0ZXJtaW5mby41IGZyb20gQ2FwcyB0YWJ1bGFyIGRhdGEKKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyMgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyMgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyMgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyMgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyMgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyMgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyMgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyMgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyMgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyMgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMgVGhpcyBzY3JpcHQgdGFrZXMgdGVybWluZm8uaGVhZCBhbmQgdGVybWluZm8udGFpbCBhbmQgc3BsaWNlcyBpbiBiZXR3ZWVuCisjIHRoZW0gYSB0YWJsZSBkZXJpdmVkIGZyb20gdGhlIENhcHMgZGF0YSBmaWxlLiAgQmVzaWRlcyBhdm9pZGluZyBoYXZpbmcKKyMgdGhlIGRvY3MgZmFsbCBvdXQgb2Ygc3luYyB3aXRoIHRoZSB0YWJsZSwgdGhpcyBhbHNvIGxldHMgdXMgc2V0IHVwIHRibAorIyBjb21tYW5kcyBmb3IgYmV0dGVyIGZvcm1hdHRpbmcgb2YgdGhlIHRhYmxlLgorIworIyBOT1RFOiBUaGUgBXMgaW4gdGhpcyBzY3JpcHQgcmVhbGx5IGFyZSBjb250cm9sIGNoYXJhY3RlcnMuICBJdCB0cmFuc2xhdGVzCisjIAUgdG8gXG4gYmVjYXVzZSBJIGNvdWxkbid0IGdldCB1c2VkIHRvIGluc2VydGluZyBsaW5lZmVlZHMgZGlyZWN0bHkuICBUaGVyZQorIyBoYWQgYmV0dGVyIGJlIG5vIAVzIGluIHRoZSB0YWJsZSBzb3VyY2UgdGV4dC4KKyMKKyMga2VlcCB0aGUgb3JkZXIgaW5kZXBlbmRlbnQgb2YgbG9jYWxlOgoraWYgdGVzdCAiJHtMQU5HVUFHRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQU5HVUFHRT1DOyAgICBleHBvcnQgTEFOR1VBR0U7ICAgIGZpCitpZiB0ZXN0ICIke0xBTkcrc2V0fSIgICAgICAgID0gc2V0OyB0aGVuIExBTkc9QzsgICAgICAgIGV4cG9ydCBMQU5HOyAgICAgICAgZmkKK2lmIHRlc3QgIiR7TENfQUxMK3NldH0iICAgICAgPSBzZXQ7IHRoZW4gTENfQUxMPUM7ICAgICAgZXhwb3J0IExDX0FMTDsgICAgICBmaQoraWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCitpZiB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAgZmkKK2lmIHRlc3QgIiR7TENfQ09MTEFURStzZXR9IiAgPSBzZXQ7IHRoZW4gTENfQ09MTEFURT1DOyAgZXhwb3J0IExDX0NPTExBVEU7ICBmaQorCisjCitoZWFkPSQxCitjYXBzPSQyCit0YWlsPSQzCitjYXQgPDwnRU9GJworJ1wiIHQKKy5cIiBETyBOT1QgRURJVCBUSElTIEZJTEUgQlkgSEFORCEKKy5cIiBJdCBpcyBnZW5lcmF0ZWQgZnJvbSB0ZXJtaW5mby5oZWFkLCBDYXBzLCBhbmQgdGVybWluZm8udGFpbC4KKy5cIgorLlwiIE5vdGU6IHRoaXMgbXVzdCBiZSBydW4gdGhyb3VnaCB0YmwgYmVmb3JlIG5yb2ZmLgorLlwiIFRoZSBtYWdpYyBjb29raWUgb24gdGhlIGZpcnN0IGxpbmUgdHJpZ2dlcnMgdGhpcyB1bmRlciBzb21lIG1hbiBwcm9ncmFtcy4KK0VPRgorY2F0ICRoZWFkCisKK3RlbXA9dGVtcCQkCitzb3J0ZWQ9c29ydGVkJCQKK3Vuc29ydGVkPXVuc29ydGVkJCQKK3RyYXAgInJtIC1mICRzb3J0ZWQgJHRlbXAgJHVuc29ydGVkOyBleGl0IDk5IiAxIDIgNSAxNQorCitzZWQgLW4gPCRjYXBzICJcCisvJSUtU1RPUC1IRVJFLSUlL3EKKy9eIyUvcy8jJS8vcAorL14jL2QKK3MvWwldWwldKi8JL2cKK3MvJC8FVH0vCitzLwlbQS1aMC05XygpXC1dW0EtWjAtOV8oKVwtXSoJWzAtOVwtXVswLTlcLV0qCVtZXC1dW0JcLV1bQ1wtXVtHXC1dW0VLXC1dXCoqCS8JVHsFLworcy8JYm9vbAkvCS9wCitzLwludW0JLwkvcAorcy8Jc3RyCS8JL3AKKyIgfHNlZCAtZSAncy9eJC8uLi8nIHwgdHIgIlwxMzQiICJcMDA2IiA+JHVuc29ydGVkCisKK3JtIC1mICRzb3J0ZWQKK3JtIC1mICR0ZW1wCitzYXZlZD1ubword2hpbGUgdHJ1ZQorZG8KKwlkYXRhPQorCXJlYWQgZGF0YQorCXRlc3QgLXogIiRkYXRhIiAmJiBicmVhaworCWNhc2UgIiRkYXRhIiBpbiAjKHZpCisJKgUqKSAjKHZpCisJCWVjaG8gIiRkYXRhIiA+PiR0ZW1wCisJCXNhdmVkPXllcworCQk7OworCSopCisJCWlmIHRlc3QgJHNhdmVkID0geWVzIDsgdGhlbgorCQkJc2F2ZWQ9bm8KKwkJCXNvcnQgJHRlbXAgPj4kc29ydGVkCisJCQlybSAtZiAkdGVtcAorCQlmaQorCQllY2hvICIkZGF0YSIgPj4kc29ydGVkCisJCTs7CisJZXNhYworZG9uZSA8JHVuc29ydGVkCit0ZXN0ICRzYXZlZCA9IHllcyAmJiBzb3J0ICR0ZW1wID4+JHNvcnRlZAorCitzZWQgLWUgJ3MvXlwuXC4kLy8nICRzb3J0ZWQgfCB0ciAiXDAwNVwwMDYiICJcMDEyXDEzNCIKK2NhdCAkdGFpbAorCitybSAtZiAkc29ydGVkICR0ZW1wICR1bnNvcnRlZApkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmluIGIvbWFuL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGY3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4MCBAQAorIyAkSWQ6IE1ha2VmaWxlLmluLHYgMS40MSAyMDA3LzAzLzMxIDE1OjU0OjA2IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NiwxOTk3CisjCisjIE1ha2VmaWxlIGZvciBuY3Vyc2VzIG1hbnVhbCBwYWdlcy4KKyMKKyMgTk9URTogV2hlbiB5b3UgYWRkIG9yIHJlbmFtZSBhIG1hbiBwYWdlLCBtYWtlIHN1cmUgeW91IHVwZGF0ZSBib3RoCisjIHRoZSB0b3AtbGV2ZWwgTUFOSUZFU1QgYW5kIGFueSBtYW4vKi5yZW5hbWVzIGZpbGVzIQorCitTSEVMTAkJPSAvYmluL3NoCisKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitkYXRhZGlyCQk9IEBkYXRhZGlyQAorbWFuZGlyCQk9IEBtYW5kaXJACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCithbGwgXAorc291cmNlcyA6CXRlcm1pbmZvLjUKK2RlcGVuZCA6Cit0YWdzIDoKKworJChERVNURElSKSQobWFuZGlyKSA6CisJc2ggJChzcmNkaXIpLy4uL21rZGlycy5zaCAkQAorCitFRElUQVJHUyA9ICQoREVTVERJUikkKG1hbmRpcikgJChzcmNkaXIpIHRlcm1pbmZvLjUgJChzcmNkaXIpLyouWzAtOV0qCisKK2luc3RhbGwgaW5zdGFsbC5tYW4gOiB0ZXJtaW5mby41ICQoREVTVERJUikkKG1hbmRpcikKKwlzaCAuLi9lZGl0X21hbi5zaCBub3JtYWwgaW5zdGFsbGluZyAkKEVESVRBUkdTKQorCit1bmluc3RhbGwgdW5pbnN0YWxsLm1hbiA6CisJLXNoIC4uL2VkaXRfbWFuLnNoIG5vcm1hbCByZW1vdmluZyAkKEVESVRBUkdTKQorCisjIFdlIGNvbXBvc2UgdGVybWluZm8uNSBmcm9tIHRoZSByZWFsIHNvdXJjZXMuLi4KK0NBUExJU1Q9JChzcmNkaXIpLy4uL2luY2x1ZGUvQFRFUk1JTkZPX0NBUFNACit0ZXJtaW5mby41OiAkKHNyY2RpcikvdGVybWluZm8uaGVhZCAkKENBUExJU1QpICQoc3JjZGlyKS90ZXJtaW5mby50YWlsIE1ha2VmaWxlICQoc3JjZGlyKS9NS3Rlcm1pbmZvLnNoCisJc2ggJChzcmNkaXIpL01LdGVybWluZm8uc2ggJChzcmNkaXIpL3Rlcm1pbmZvLmhlYWQgJChDQVBMSVNUKSAkKHNyY2RpcikvdGVybWluZm8udGFpbCA+dGVybWluZm8uNQorCittb3N0bHljbGVhbiA6CisJLXJtIC1mIGNvcmUgdGFncyBUQUdTICp+ICouYmFrICoubG4gKi5hdGFjIHRyYWNlCisKK2NsZWFuOgltb3N0bHljbGVhbgorCXJtIC1mIHRlcm1pbmZvLjUKKworLi4vZWRpdF9tYW4uc2VkIDogbWFrZV9zZWQuc2ggQE1BTlBBR0VfUkVOQU1FU0AKKwlzaCAkKHNyY2RpcikvbWFrZV9zZWQuc2ggQE1BTlBBR0VfUkVOQU1FU0AgPi4uL2VkaXRfbWFuLnNlZAorCitkaXN0Y2xlYW4gcmVhbGNsZWFuOiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlIC4uL2VkaXRfbWFuLiogLi4vbWFuX2FsaWFzLioKZGlmZiAtLWdpdCBhL21hbi9jYXB0b2luZm8uMW0gYi9tYW4vY2FwdG9pbmZvLjFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTdhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY2FwdG9pbmZvLjFtCkBAIC0wLDAgKzEsMTkzIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjYXB0b2luZm8uMW0sdiAxLjIyIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggQENBUFRPSU5GT0AgMU0gIiIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCitcZkJAQ0FQVE9JTkZPQFxmUiAtIGNvbnZlcnQgYSBcZkl0ZXJtY2FwXGZSIGRlc2NyaXB0aW9uIGludG8gYSBcZkl0ZXJtaW5mb1xmUiBkZXNjcmlwdGlvbgorLlNIIFNZTk9QU0lTCitcZkJAQ0FQVE9JTkZPQFxmUiBbXGZCLXZcZlJcZkluXGZSIFxmSXdpZHRoXGZSXSAgW1xmQi1WXGZSXSBbXGZCLTFcZlJdIFtcZkItd1xmUiBcZkl3aWR0aFxmUl0gXGZJZmlsZVxmUiAuIC4gLgorLlNIIERFU0NSSVBUSU9OCitcZkJAQ0FQVE9JTkZPQFxmUiBsb29rcyBpbiBcZklmaWxlXGZSIGZvciBcZkJ0ZXJtY2FwXGZSIGRlc2NyaXB0aW9ucy4gIEZvciBlYWNoCitvbmUgZm91bmQsIGFuIGVxdWl2YWxlbnQgXGZCdGVybWluZm9cZlIgZGVzY3JpcHRpb24gaXMgd3JpdHRlbiB0byBzdGFuZGFyZAorb3V0cHV0LiAgVGVybWNhcCBcZkJ0Y1xmUiBjYXBhYmlsaXRpZXMgYXJlIHRyYW5zbGF0ZWQgZGlyZWN0bHkgdG8gdGVybWluZm8KK1xmQnVzZVxmUiBjYXBhYmlsaXRpZXMuCisuUFAKK0lmIG5vIFxmSWZpbGVcZlIgaXMgZ2l2ZW4sIHRoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1DQVBcZlIgaXMgdXNlZAorZm9yIHRoZSBmaWxlbmFtZSBvciBlbnRyeS4gIElmIFxmQlRFUk1DQVBcZlIgaXMgYSBmdWxsIHBhdGhuYW1lIHRvIGEgZmlsZSwgb25seQordGhlIHRlcm1pbmFsIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNXGZSIGlzCitleHRyYWN0ZWQgZnJvbSB0aGF0IGZpbGUuICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXGZCVEVSTUNBUFxmUiBpcyBub3QKK3NldCwgdGhlbiB0aGUgZmlsZSBcZkJcKmRcZlIgaXMgcmVhZC4KKy5UUCA1CitcZkItdlxmUgorcHJpbnQgb3V0IHRyYWNpbmcgaW5mb3JtYXRpb24gb24gc3RhbmRhcmQgZXJyb3IgYXMgdGhlIHByb2dyYW0gcnVucy4KKy5UUCA1CitcZkItVlxmUgorcHJpbnQgb3V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGluIHVzZSBvbiBzdGFuZGFyZCBlcnJvciBhbmQgZXhpdC4KKy5UUCA1CitcZkItMVxmUgorY2F1c2UgdGhlIGZpZWxkcyB0byBwcmludCBvdXQgb25lIHRvIGEgbGluZS4gIE90aGVyd2lzZSwgdGhlIGZpZWxkcword2lsbCBiZSBwcmludGVkIHNldmVyYWwgdG8gYSBsaW5lIHRvIGEgbWF4aW11bSB3aWR0aCBvZiA2MAorY2hhcmFjdGVycy4KKy5UUCA1CitcZkItd1xmUgorY2hhbmdlIHRoZSBvdXRwdXQgdG8gXGZJd2lkdGhcZlIgY2hhcmFjdGVycy4KKy5TSCBGSUxFUworLlRQIDIwCitcKmQKK0NvbXBpbGVkIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGRhdGFiYXNlLgorLlNIIFRSQU5TTEFUSU9OUyBGUk9NIE5PTlNUQU5EQVJEIENBUEFCSUxJVElFUworLlBQCitTb21lIG9ic29sZXRlIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgdHJhbnNsYXRlZAoraW50byBzdGFuZGFyZCAoU1ZyNC9YU0kgQ3Vyc2VzKSB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMgYnkgXGZCQENBUFRPSU5GT0BcZlIuCitXaGVuZXZlciBvbmUgb2YgdGhlc2UgYXV0b21hdGljIHRyYW5zbGF0aW9ucyBpcyBkb25lLCB0aGUgcHJvZ3JhbQord2lsbCBpc3N1ZSBhbiBub3RpZmljYXRpb24gdG8gc3RkZXJyLCBpbnZpdGluZyB0aGUgdXNlciB0byBjaGVjayB0aGF0CitpdCBoYXMgbm90IG1pc3Rha2VubHkgdHJhbnNsYXRlZCBhIGNvbXBsZXRlbHkgdW5rbm93biBhbmQgcmFuZG9tCitjYXBhYmlsaXR5IGFuZC9vciBzeW50YXggZXJyb3IuCisuUFAKKy5UUyBICitjIGMgYyBjCitjIGMgYyBjCitsIGwgbCBsLgorTm9uc3RkCVN0ZAlGcm9tCVRlcm1pbmZvCituYW1lCW5hbWUJCWNhcGFiaWxpdHkKK18KK0JPCW1yCUFUJlQJZW50ZXJfcmV2ZXJzZV9tb2RlCitDSQl2aQlBVCZUCWN1cnNvcl9pbnZpc2libGUKK0NWCXZlCUFUJlQJY3Vyc29yX25vcm1hbAorRFMJbWgJQVQmVAllbnRlcl9kaW1fbW9kZQorRUUJbWUJQVQmVAlleGl0X2F0dHJpYnV0ZV9tb2RlCitGRQlMRglBVCZUCWxhYmVsX29uCitGTAlMTwlBVCZUCWxhYmVsX29mZgorWFMJbWsJQVQmVAllbnRlcl9zZWN1cmVfbW9kZQorRU4JQDcJWEVOSVgJa2V5X2VuZAorR0UJYWUJWEVOSVgJZXhpdF9hbHRfY2hhcnNldF9tb2RlCitHUwlhcwlYRU5JWAllbnRlcl9hbHRfY2hhcnNldF9tb2RlCitITQlraAlYRU5JWAlrZXlfaG9tZQorTEQJa0wJWEVOSVgJa2V5X2RsCitQRAlrTglYRU5JWAlrZXlfbnBhZ2UKK1BOCXBvCVhFTklYCXBydHJfb2ZmCitQUwlwZglYRU5JWAlwcnRyX29uCitQVQlrUAlYRU5JWAlrZXlfcHBhZ2UKK1JUCUA4CVhFTklYCWtlbnQKK1VQCWt1CVhFTklYCWtjdXUxCitLQQlrOwlUZWsJa2V5X2YxMAorS0IJRjEJVGVrCWtleV9mMTEKK0tDCUYyCVRlawlrZXlfZjEyCitLRAlGMwlUZWsJa2V5X2YxMworS0UJRjQJVGVrCWtleV9mMTQKK0tGCUY1CVRlawlrZXlfZjE1CitCQwlTYglUZWsJc2V0X2JhY2tncm91bmQKK0ZDCVNmCVRlawlzZXRfZm9yZWdyb3VuZAorSFMJbWgJSXJpcwllbnRlcl9kaW1fbW9kZQorLlRFCisuUFAKK1hFTklYIHRlcm1jYXAgYWxzbyB1c2VkIHRvIGhhdmUgYSBzZXQgb2YgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworZm9yIGZvcm1zIGRyYXdpbmcsIGRlc2lnbmVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBJQk0gUEMKK2hpZ2gtaGFsZiBncmFwaGljcy4gIFRoZXkgd2VyZSBhcyBmb2xsb3dzOgorLlBQCisuVFMgSAorYyBjCitsIGwuCitDYXAJR3JhcGhpYworXworRzIJdXBwZXIgbGVmdAorRzMJbG93ZXIgbGVmdAorRzEJdXBwZXIgcmlnaHQKK0c0CWxvd2VyIHJpZ2h0CitHUglwb2ludGluZyByaWdodAorR0wJcG9pbnRpbmcgbGVmdAorR1UJcG9pbnRpbmcgdXAKK0dECXBvaW50aW5nIGRvd24KK0dICWhvcml6b250YWwgbGluZQorR1YJdmVydGljYWwgbGluZQorR0MJaW50ZXJzZWN0aW9uCitHNgl1cHBlciBsZWZ0CitHNwlsb3dlciBsZWZ0CitHNQl1cHBlciByaWdodAorRzgJbG93ZXIgcmlnaHQKK0dyCXRlZSBwb2ludGluZyByaWdodAorR3IJdGVlIHBvaW50aW5nIGxlZnQKK0d1CXRlZSBwb2ludGluZyB1cAorR2QJdGVlIHBvaW50aW5nIGRvd24KK0doCWhvcml6b250YWwgbGluZQorR3YJdmVydGljYWwgbGluZQorR2MJaW50ZXJzZWN0aW9uCitHRwlhY3MgbWFnaWMgY29va2llIGNvdW50CisuVEUKKy5QUAorSWYgdGhlIHNpbmdsZS1saW5lIGNhcGFiaWxpdGllcyBvY2N1ciBpbiBhbiBlbnRyeSwgdGhleSB3aWxsIGF1dG9tYXRpY2FsbHkKK2JlIGNvbXBvc2VkIGludG8gYW4gXGZJYWNzY1xmUiBzdHJpbmcuICBUaGUgZG91YmxlLWxpbmUgY2FwYWJpbGl0aWVzIGFuZAorXGZCR0dcZlIgYXJlIGRpc2NhcmRlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgorLlBQCitJQk0ncyBBSVggaGFzIGEgdGVybWluZm8gZmFjaWxpdHkgZGVzY2VuZGVkIGZyb20gU1ZyMSB0ZXJtaW5mbyBidXQgaW5jb21wYXRpYmxlCit3aXRoIHRoZSBTVnI0IGZvcm1hdC4gVGhlIGZvbGxvd2luZyBBSVggZXh0ZW5zaW9ucyBhcmUgYXV0b21hdGljYWxseQordHJhbnNsYXRlZDoKKy5UUworYyBjCitsIGwuCitJQk0JWFNJCitfCitrc2VsCWtzbHQKK2tidGFiCWtjYnQKK2ZvbnQwCXMwZHMKK2ZvbnQxCXMxZHMKK2ZvbnQyCXMyZHMKK2ZvbnQzCXMzZHMKKy5URQorLlBQCitBZGRpdGlvbmFsbHksIHRoZSBBSVggXGZJYm94MVxmUiBjYXBhYmlsaXR5IHdpbGwgYmUgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkIHRvCithbiBcZklhY3NjXGZSIHN0cmluZy4KKy5QUAorSGV3bGV0dC1QYWNrYXJkJ3MgdGVybWluZm8gbGlicmFyeSBzdXBwb3J0cyB0d28gbm9uc3RhbmRhcmQgdGVybWluZm8KK2NhcGFiaWxpdGllcyBcZkltZW1sXGZSIChtZW1vcnkgbG9jaykgYW5kIFxmSW1lbXVcZlIgKG1lbW9yeSB1bmxvY2spLgorVGhlc2Ugd2lsbCBiZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS4KKy5TSCBOT1RFUworVGhpcyB1dGlsaXR5IGlzIGFjdHVhbGx5IGEgbGluayB0byBcZkJAVElDQFxmUigxTSksIHJ1bm5pbmcgaW4gXGZJLUlcZlIgbW9kZS4KK1lvdSBjYW4gdXNlIG90aGVyIFxmQkBUSUNAXGZSIG9wdGlvbnMgc3VjaCBhcyBcZkItZlxmUiBhbmQgIFxmQi14XGZSLgorLlBQCitUaGUgdHJhY2Ugb3B0aW9uIGlzIG5vdCBpZGVudGljYWwgdG8gU1ZyNCdzLiAgVW5kZXIgU1ZyNCwgaW5zdGVhZCBvZiBmb2xsb3dpbmcKK3RoZSBcZkItdlxmUiB3aXRoIGEgdHJhY2UgbGV2ZWwgbiwgeW91IHJlcGVhdCBpdCBuIHRpbWVzLgorLlNIIFNFRSBBTFNPCitcZkJASU5GT0NNUEBcZlIoMU0pLAorXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQnRlcm1pbmZvXGZSKFwqbikKKy5QUAorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlNIIEFVVEhPUgorRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jbGVhci4xIGIvbWFuL2NsZWFyLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMGY5MwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jbGVhci4xCkBAIC0wLDAgKzEsNTMgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY2xlYXIuMSx2IDEuNiAyMDA2LzEyLzI0IDE4OjA3OjUzIHRvbSBFeHAgJAorLlRIIEBDTEVBUkAgMSAiIgorLmRzIG4gNQorLlNIIE5BTUUKK1xmQkBDTEVBUkBcZlIgLSBjbGVhciB0aGUgdGVybWluYWwgc2NyZWVuCisuU0ggU1lOT1BTSVMKK1xmQkBDTEVBUkBcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitcZkJAQ0xFQVJAXGZSIGNsZWFycyB5b3VyIHNjcmVlbiBpZiB0aGlzIGlzIHBvc3NpYmxlLiAgSXQgbG9va3MgaW4gdGhlCitlbnZpcm9ubWVudCBmb3IgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIHRoZW4gaW4gdGhlIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIHRvCitmaWd1cmUgb3V0IGhvdyB0byBjbGVhciB0aGUgc2NyZWVuLgorLlBQCitcZkJAQ0xFQVJAXGZSIGlnbm9yZXMgYW55IGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHByZXNlbnQuCisuU0ggU0VFIEFMU08KK1xmQkBUUFVUQFxmUigxKSwgXGZCdGVybWluZm9cZlIoXCpuKQorLlBQCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2FkZF93Y2guM3ggYi9tYW4vY3Vyc19hZGRfd2NoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYWMxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19hZGRfd2NoLjN4CkBAIC0wLDAgKzEsMTM1IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYWRkX3djaC4zeCx2IDEuNiAyMDA2LzEyLzI0IDE1OjIyOjIyIHRvbSBFeHAgJAorLlRIIGN1cnNfYWRkX3djaCAzWCAiIgorLlNIIE5BTUUKK1xmQmFkZF93Y2hcZlAsCitcZkJ3YWRkX3djaFxmUCwKK1xmQm12YWRkX3djaFxmUCwKK1xmQm12d2FkZF93Y2hcZlAsCitcZkJlY2hvX3djaGFyXGZQLAorXGZCd2VjaG9fd2NoYXJcZlAgLSBhZGQgYSBjb21wbGV4IGNoYXJhY3RlciBhbmQgcmVuZGl0aW9uIHRvIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdywgdGhlbiBhZHZhbmNlIHRoZSBjdXJzb3IKKy5TSCBTWU5PUFNJUworLlBQCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKKy5CICJpbnQgYWRkX3djaCggY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7IgorLmJyCisuQiAiaW50IHdhZGRfd2NoKCBXSU5ET1cgKlxmSXdpblxmUCwgY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7IgorLmJyCisuQiAiaW50IG12YWRkX3djaCggaW50IFxmSXlcZlAsIGludCBcZkl4XGZQLCBjb25zdCBjY2hhcl90ICpcZkl3Y2hcZkIgKTsiCisuYnIKKy5CICJpbnQgbXZ3YWRkX3djaCggV0lORE9XICpcZkl3aW5cZlAsIGludCBcZkl5XGZQLCBpbnQgXGZJeFxmUCwgY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7IgorLmJyCisuQiAiaW50IGVjaG9fd2NoYXIoIGNvbnN0IGNjaGFyX3QgKlxmSXdjaFxmQiApOyIKKy5icgorLkIgImludCB3ZWNob193Y2hhciggV0lORE9XICpcZkl3aW5cZlAsIGNvbnN0IGNjaGFyX3QgKlxmSXdjaFxmQiApOyIKKy5icgorLlNIIERFU0NSSVBUSU9OCisuUFAKK1RoZQorXGZCYWRkX3djaFxmUCwKK1xmQndhZGRfd2NoXGZQLAorXGZCbXZhZGRfd2NoXGZQLCBhbmQKK1xmQm12d2FkZF93Y2hcZlAKK2Z1bmN0aW9ucyBwdXQgdGhlIGNvbXBsZXggY2hhcmFjdGVyIFxmSXdjaFxmUCBpbnRvIHRoZSBnaXZlbgord2luZG93IGF0IGl0cyBjdXJyZW50IHBvc2l0aW9uLAord2hpY2ggaXMgdGhlbiBhZHZhbmNlZC4KK1RoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtCit3cmFwcGluZyBhbmQgc3BlY2lhbC1jaGFyYWN0ZXIgcHJvY2Vzc2luZyBhcyBmb2xsb3dzOgorLlRQIDUKKy0KK0lmIFxmSXdjaFxmUCByZWZlcnMgdG8gYSBzcGFjaW5nIGNoYXJhY3RlciwKK3RoZW4gYW55IHByZXZpb3VzIGNoYXJhY3RlciBhdCB0aGF0IGxvY2F0aW9uIGlzIHJlbW92ZWQuCitBIG5ldyBjaGFyYWN0ZXIgc3BlY2lmaWVkIGJ5IFxmSXdjaFxmUCBpcworcGxhY2VkIGF0IHRoYXQgbG9jYXRpb24gd2l0aCByZW5kaXRpb24gc3BlY2lmaWVkIGJ5IFxmSXdjaFxmUC4KK1RoZSBjdXJzb3IgdGhlbiBhZHZhbmNlcyB0bwordGhlIG5leHQgc3BhY2luZyBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbi4KKy5UUCA1CistCitJZiBcZkl3Y2hcZlAgcmVmZXJzIHRvIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyLAorYWxsIHByZXZpb3VzIGNoYXJhY3RlcnMgYXQgdGhhdCBsb2NhdGlvbiBhcmUgcHJlc2VydmVkLgorVGhlIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMgb2YgXGZJd2NoXGZQCithcmUgYWRkZWQgdG8gdGhlIHNwYWNpbmcgY29tcGxleCBjaGFyYWN0ZXIsCithbmQgdGhlIHJlbmRpdGlvbiBzcGVjaWZpZWQgYnkgXGZJd2NoXGZQIGlzIGlnbm9yZWQuCisuVFAgNQorLQorSWYgdGhlIGNoYXJhY3RlciBwYXJ0IG9mIFxmSXdjaFxmUCBpcworYSB0YWIsIG5ld2xpbmUsIGJhY2tzcGFjZSBvciBvdGhlciBjb250cm9sIGNoYXJhY3RlciwKK3RoZSB3aW5kb3cgaXMgdXBkYXRlZCBhbmQgdGhlIGN1cnNvciBtb3ZlcyBhcyBpZiBcZkJhZGRjaFxmUiB3ZXJlIGNhbGxlZC4KKy5QUAorVGhlIFxmQmVjaG9fd2NoYXJcZlAKK2Z1bmN0aW9uIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIGEgY2FsbCB0bworXGZCYWRkX3djaFxmUAorZm9sbG93ZWQgYnkgYSBjYWxsIHRvCitcZkJyZWZyZXNoXGZQLgorU2ltaWxhcmx5LCB0aGUKK1xmQndlY2hvX3djaGFyXGZQCitpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBhIGNhbGwgdG8KK1xmQndhZGRfd2NoXGZQCitmb2xsb3dlZCBieSBhIGNhbGwgdG8KK1xmQndyZWZyZXNoXGZQLgorVGhlIGtub3dsZWRnZQordGhhdCBvbmx5IGEgc2luZ2xlIGNoYXJhY3RlciBpcyBiZWluZyBvdXRwdXQgaXMgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGFuZCwKK2ZvciBub24tY29udHJvbCBjaGFyYWN0ZXJzLCBhIGNvbnNpZGVyYWJsZSBwZXJmb3JtYW5jZSBnYWluIG1pZ2h0IGJlIHNlZW4KK2J5IHVzaW5nIHRoZSAqXGZCZWNob1xmUCogZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlaXIgZXF1aXZhbGVudHMuCisuU0ggUkVUVVJOIFZBTFVFUworLlBQCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSIG9uIHN1Y2Nlc3MuCisuU0ggTk9URVMKKy5QUAorTm90ZSB0aGF0CitcZkJhZGRfd2NoXGZQLAorXGZCbXZhZGRfd2NoXGZQLAorXGZCbXZ3YWRkX3djaFxmUCwgYW5kCitcZkJlY2hvX3djaGFyXGZQCittYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCisuUFAKK0FsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KK1RoZSBkZWZhdWx0cyBzcGVjaWZpZWQgZm9yIGZvcm1zLWRyYXdpbmcgY2hhcmFjdGVycyBhcHBseSBpbiB0aGUgUE9TSVggbG9jYWxlLgorLlBQCitYU0kgZG9jdW1lbnRzIGNvbnN0YW50cyBiZWdpbm5pbmcgd2l0aCBcZkJXQUNTX1xmUCB3aGljaCBhcmUgdXNlZCBmb3IKK2xpbmUtZHJhd2luZy4KK1Rob3NlIGFyZSBub3QgY3VycmVudGx5IGltcGxlbWVudGVkIGluIFxmQm5jdXJzZXNcZlAuCisuU0ggU0VFIEFMU08KKy5QUAorXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfYWRkY2hcZlIoM1gpLAorXGZCY3Vyc19hdHRyXGZSKDNYKSwKK1xmQmN1cnNfY2xlYXJcZlIoM1gpLAorXGZCY3Vyc19vdXRvcHRzXGZSKDNYKSwKK1xmQmN1cnNfcmVmcmVzaFxmUigzWCksCitcZkJwdXR3Y1xmUigzKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4IGIvbWFuL2N1cnNfYWRkX3djaHN0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRjMmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfYWRkX3djaHN0ci4zeApAQCAtMCwwICsxLDk3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYWRkX3djaHN0ci4zeCx2IDEuNiAyMDA1LzAxLzAyIDAxOjI4OjQ5IHRvbSBFeHAgJAorLlRIIGN1cnNfYWRkX3djaHN0ciAzWCAiIgorLlNIIE5BTUUKK1xmQmFkZF93Y2hzdHJcZlIsCitcZkJhZGRfd2NobnN0clxmUiwKK1xmQndhZGRfd2Noc3RyXGZSLAorXGZCd2FkZF93Y2huc3RyXGZSLAorXGZCbXZhZGRfd2Noc3RyXGZSLAorXGZCbXZhZGRfd2NobnN0clxmUiwKK1xmQm12d2FkZF93Y2hzdHJcZlIsCitcZkJtdndhZGRfd2NobnN0clxmUiBcLSBhZGQgYW4gYXJyYXkgb2YgY29tcGxleCBjaGFyYWN0ZXJzIChhbmQgYXR0cmlidXRlcykgdG8gYSBjdXJzZXMgd2luZG93CisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJzZXMuaD4KKy5QUAorLm5mCitcZkJpbnQgYWRkX3djaHN0cihjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgYWRkX3djaG5zdHIoY29uc3QgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3YWRkX3djaHN0cihXSU5ET1cgKlxmUiBcZkl3aW5cZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3YWRkX3djaG5zdHIoV0lORE9XICpcZlIgXGZJd2luXGZSXGZCLCBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12YWRkX3djaHN0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmFkZF93Y2huc3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndhZGRfd2Noc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndhZGRfd2NobnN0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBjb3B5IHRoZSBhcnJheSBvZiBjb21wbGV4IGNoYXJhY3RlcnMgXGZJd2Noc3RyXGZSCitpbnRvIHRoZSB3aW5kb3cgaW1hZ2Ugc3RydWN0dXJlIGF0IGFuZCBhZnRlciB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCitUaGUgZm91ciByb3V0aW5lcyB3aXRoIFxmSW5cZlIgYXMgdGhlIGxhc3QKK2FyZ3VtZW50IGNvcHkgYXQgbW9zdCBcZkluXGZSIGVsZW1lbnRzLCBidXQgbm8gbW9yZSB0aGFuIHdpbGwgZml0IG9uIHRoZSBsaW5lLgorSWYgXGZCblxmUj1cZkItMVxmUiB0aGVuIHRoZSB3aG9sZSBhcnJheSBpcyBjb3BpZWQsCit0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgZml0IG9uIHRoZSBsaW5lLgorLlBQCitUaGUgd2luZG93IGN1cnNvciBpcyBcZklub3RcZlIgYWR2YW5jZWQuCitUaGVzZSByb3V0aW5lcyB3b3JrIGZhc3RlciB0aGFuIFxmQndhZGRuc3RyXGZSLgorT24gdGhlIG90aGVyIGhhbmQsIHRoZXkgZG8gbm90IHBlcmZvcm0gY2hlY2tpbmcKKyhzdWNoIGFzIGZvciB0aGUgbmV3bGluZSwgYmFja3NwYWNlLCBvciBjYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVycyksCit0aGV5IGRvIG5vdCBhZHZhbmNlIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiwKK3RoZXkgZG8gbm90IGV4cGFuZCBvdGhlciBjb250cm9sIGNoYXJhY3RlcnMgdG8gXi1lc2NhcGVzLAorYW5kIHRoZXkgdHJ1bmNhdGUgdGhlIHN0cmluZyBpZiBpdCBjcm9zc2VzIHRoZSByaWdodCBtYXJnaW4sCityYXRoZXIgdGhhbiB3cmFwcGluZyBpdCBhcm91bmQgdG8gdGhlIG5ldyBsaW5lLgorLlBQCitUaGVzZSByb3V0aW5lcyBlbmQgc3VjY2Vzc2Z1bGx5CitvbiBlbmNvdW50ZXJpbmcgYSBudWxsIFxmSWNjaGFyX3RcZlIsIG9yCit3aGVuIHRoZXkgaGF2ZSBmaWxsZWQgdGhlIGN1cnJlbnQgbGluZS4KK0lmIGEgY29tcGxleCBjaGFyYWN0ZXIgY2Fubm90IGNvbXBsZXRlbHkgZml0IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSwKK3RoZSByZW1haW5pbmcgY29sdW1ucyBhcmUgZmlsbGVkIHdpdGggdGhlIGJhY2tncm91bmQgY2hhcmFjdGVyIGFuZCByZW5kaXRpb24uCisuU0ggTk9URVMKK0FsbCBmdW5jdGlvbnMgZXhjZXB0IFxmQndhZGRfd2NobnN0clxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFJFVFVSTiBWQUxVRVMKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIgb24gc3VjY2Vzcy4KKy5TSCBQT1JUQUJJTElUWQorQWxsIHRoZXNlIGVudHJ5IHBvaW50cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19hZGRjaHN0clxmUigzWCksCitcZkJjdXJzX2FkZHdzdHJcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2FkZGNoLjN4IGIvbWFuL2N1cnNfYWRkY2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5MThiOAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2FkZGNoLjN4CkBAIC0wLDAgKzEsMTgxIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2FkZGNoLjN4LHYgMS4yNyAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIGN1cnNfYWRkY2ggM1ggIiIKKy5TSCBOQU1FCitcZkJhZGRjaFxmUiwgXGZCd2FkZGNoXGZSLCBcZkJtdmFkZGNoXGZSLCBcZkJtdndhZGRjaFxmUiwKK1xmQmVjaG9jaGFyXGZSLAorXGZCd2VjaG9jaGFyXGZSIC0gYWRkIGEgY2hhcmFjdGVyICh3aXRoIGF0dHJpYnV0ZXMpIHRvIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdywgdGhlbiBhZHZhbmNlIHRoZSBjdXJzb3IKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgYWRkY2goY29uc3QgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IHdhZGRjaChXSU5ET1cgKndpbiwgY29uc3QgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IG12YWRkY2goaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJpbnQgbXZ3YWRkY2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IGVjaG9jaGFyKGNvbnN0IGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmludCB3ZWNob2NoYXIoV0lORE9XICp3aW4sIGNvbnN0IGNodHlwZSBjaCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmFkZGNoXGZSLCBcZkJ3YWRkY2hcZlIsIFxmQm12YWRkY2hcZlIgYW5kIFxmQm12d2FkZGNoXGZSIHJvdXRpbmVzIHB1dAordGhlIGNoYXJhY3RlciBcZkljaFxmUiBpbnRvIHRoZSBnaXZlbiB3aW5kb3cgYXQgaXRzIGN1cnJlbnQgd2luZG93IHBvc2l0aW9uLAord2hpY2ggaXMgdGhlbiBhZHZhbmNlZC4gIFRoZXkgYXJlIGFuYWxvZ291cyB0byBcZkJwdXRjaGFyXGZSIGluIFxmQnN0ZGlvXGZSKDMpLgorSWYgdGhlIGFkdmFuY2UgaXMgYXQgdGhlIHJpZ2h0IG1hcmdpbiwgdGhlIGN1cnNvciBhdXRvbWF0aWNhbGx5IHdyYXBzIHRvIHRoZQorYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuICBBdCB0aGUgYm90dG9tIG9mIHRoZSBjdXJyZW50IHNjcm9sbGluZyByZWdpb24sIGlmCitcZkJzY3JvbGxva1xmUiBpcyBlbmFibGVkLCB0aGUgc2Nyb2xsaW5nIHJlZ2lvbiBpcyBzY3JvbGxlZCB1cCBvbmUgbGluZS4KKy5QUAorSWYgXGZJY2hcZlIgaXMgYSB0YWIsIG5ld2xpbmUsIG9yIGJhY2tzcGFjZSwKK3RoZSBjdXJzb3IgaXMgbW92ZWQgYXBwcm9wcmlhdGVseSB3aXRoaW4gdGhlIHdpbmRvdy4KK0JhY2tzcGFjZSBtb3ZlcyB0aGUgY3Vyc29yIG9uZSBjaGFyYWN0ZXIgbGVmdDsgYXQgdGhlIGxlZnQKK2VkZ2Ugb2YgYSB3aW5kb3cgaXQgZG9lcyBub3RoaW5nLgorTmV3bGluZSBkb2VzIGEgXGZCY2xydG9lb2xcZlIsCit0aGVuIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHdpbmRvdyBsZWZ0IG1hcmdpbiBvbiB0aGUgbmV4dCBsaW5lLAorc2Nyb2xsaW5nIHRoZSB3aW5kb3cgaWYgb24gdGhlIGxhc3QgbGluZS4KK1RhYnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgYXQgZXZlcnkgZWlnaHRoIGNvbHVtbi4KK1RoZSB0YWIgaW50ZXJ2YWwgbWF5IGJlIGFsdGVyZWQgYnkgc2V0dGluZyB0aGUgXGZCVEFCU0laRVxmUiB2YXJpYWJsZS4KKy5QUAorSWYgXGZJY2hcZlIgaXMgYW55IGNvbnRyb2wgY2hhcmFjdGVyIG90aGVyIHRoYW4gdGFiLCBuZXdsaW5lLCBvciBiYWNrc3BhY2UsIGl0CitpcyBkcmF3biBpbiBcZkJeXGZSXGZJWFxmUiBub3RhdGlvbi4gIENhbGxpbmcgXGZCd2luY2hcZlIgYWZ0ZXIgYWRkaW5nIGEKK2NvbnRyb2wgY2hhcmFjdGVyIGRvZXMgbm90IHJldHVybiB0aGUgY2hhcmFjdGVyIGl0c2VsZiwgYnV0IGluc3RlYWQgcmV0dXJucwordGhlIF4tcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wgY2hhcmFjdGVyLgorLlBQCitWaWRlbyBhdHRyaWJ1dGVzIGNhbiBiZSBjb21iaW5lZCB3aXRoIGEgY2hhcmFjdGVyIGFyZ3VtZW50IHBhc3NlZCB0bworXGZCYWRkY2hcZlIgb3IgcmVsYXRlZCBmdW5jdGlvbnMgYnkgbG9naWNhbC1PUmluZyB0aGVtIGludG8gdGhlIGNoYXJhY3Rlci4KKyhUaHVzLCB0ZXh0LCBpbmNsdWRpbmcgYXR0cmlidXRlcywgY2FuIGJlIGNvcGllZCBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyCit1c2luZyBcZkJpbmNoXGZSIGFuZCBcZkJhZGRjaFxmUi4pICBTZWUgdGhlIFxmQmN1cnNfYXR0clxmUigzWCkgcGFnZSBmb3IKK3ZhbHVlcyBvZiBwcmVkZWZpbmVkIHZpZGVvIGF0dHJpYnV0ZSBjb25zdGFudHMgdGhhdCBjYW4gYmUgdXNlZnVsbHkgT1InZWQKK2ludG8gY2hhcmFjdGVycy4KKy5QUAorVGhlIFxmQmVjaG9jaGFyXGZSIGFuZCBcZkJ3ZWNob2NoYXJcZlIgcm91dGluZXMgYXJlIGVxdWl2YWxlbnQgdG8gYSBjYWxsIHRvCitcZkJhZGRjaFxmUiBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXGZCcmVmcmVzaFxmUiwgb3IgYSBjYWxsIHRvIFxmQndhZGRjaFxmUgorZm9sbG93ZWQgYnkgYSBjYWxsIHRvIFxmQndyZWZyZXNoXGZSLiAgVGhlIGtub3dsZWRnZSB0aGF0IG9ubHkgYSBzaW5nbGUKK2NoYXJhY3RlciBpcyBiZWluZyBvdXRwdXQgaXMgdXNlZCBhbmQsIGZvciBub24tY29udHJvbCBjaGFyYWN0ZXJzLCBhCitjb25zaWRlcmFibGUgcGVyZm9ybWFuY2UgZ2FpbiBtYXkgYmUgc2VlbiBieSB1c2luZyB0aGVzZSByb3V0aW5lcyBpbnN0ZWFkIG9mCit0aGVpciBlcXVpdmFsZW50cy4KKy5TUyBMaW5lIEdyYXBoaWNzCitUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBtYXkgYmUgdXNlZCB0byBhZGQgbGluZSBkcmF3aW5nIGNoYXJhY3RlcnMgdG8gdGhlCitzY3JlZW4gd2l0aCByb3V0aW5lcyBvZiB0aGUgXGZCYWRkY2hcZlIgZmFtaWx5LiAgVGhlIGRlZmF1bHQgY2hhcmFjdGVyIGxpc3RlZAorYmVsb3cgaXMgdXNlZCBpZiB0aGUgXGZCYWNzY1xmUiBjYXBhYmlsaXR5IGRvZXMgbm90IGRlZmluZSBhIHRlcm1pbmFsLXNwZWNpZmljCityZXBsYWNlbWVudCBmb3IgaXQuCitUaGUgbmFtZXMgYXJlIHRha2VuIGZyb20gVlQxMDAgbm9tZW5jbGF0dXJlLgorLlBQCisuVFMKK2wgbCBsCitfIF8gXworbCBsIGwuCitcZklOYW1lXGZSCVxmSURlZmF1bHRcZlIJXGZJRGVzY3JpcHRpb25cZlIKK0FDU19CTE9DSwkjCXNvbGlkIHNxdWFyZSBibG9jaworQUNTX0JPQVJECSMJYm9hcmQgb2Ygc3F1YXJlcworQUNTX0JURUUJKwlib3R0b20gdGVlCitBQ1NfQlVMTEVUCW8JYnVsbGV0CitBQ1NfQ0tCT0FSRAk6CWNoZWNrZXIgYm9hcmQgKHN0aXBwbGUpCitBQ1NfREFSUk9XCXYJYXJyb3cgcG9pbnRpbmcgZG93bgorQUNTX0RFR1JFRQknCWRlZ3JlZSBzeW1ib2wKK0FDU19ESUFNT05ECSsJZGlhbW9uZAorQUNTX0dFUVVBTAk+CWdyZWF0ZXItdGhhbi1vci1lcXVhbC10bworQUNTX0hMSU5FCS0JaG9yaXpvbnRhbCBsaW5lCitBQ1NfTEFOVEVSTgkjCWxhbnRlcm4gc3ltYm9sCitBQ1NfTEFSUk9XCTwJYXJyb3cgcG9pbnRpbmcgbGVmdAorQUNTX0xFUVVBTAk8CWxlc3MtdGhhbi1vci1lcXVhbC10bworQUNTX0xMQ09STkVSCSsJbG93ZXIgbGVmdC1oYW5kIGNvcm5lcgorQUNTX0xSQ09STkVSCSsJbG93ZXIgcmlnaHQtaGFuZCBjb3JuZXIKK0FDU19MVEVFCSsJbGVmdCB0ZWUKK0FDU19ORVFVQUwJIQlub3QtZXF1YWwKK0FDU19QSQkqCWdyZWVrIHBpCitBQ1NfUExNSU5VUwkjCXBsdXMvbWludXMKK0FDU19QTFVTCSsJcGx1cworQUNTX1JBUlJPVwk+CWFycm93IHBvaW50aW5nIHJpZ2h0CitBQ1NfUlRFRQkrCXJpZ2h0IHRlZQorQUNTX1MxCS0Jc2NhbiBsaW5lIDEKK0FDU19TMwktCXNjYW4gbGluZSAzCitBQ1NfUzcJLQlzY2FuIGxpbmUgNworQUNTX1M5CVwmXwlzY2FuIGxpbmUgOQorQUNTX1NURVJMSU5HCWYJcG91bmQtc3Rlcmxpbmcgc3ltYm9sCitBQ1NfVFRFRQkrCXRvcCB0ZWUKK0FDU19VQVJST1cJXglhcnJvdyBwb2ludGluZyB1cAorQUNTX1VMQ09STkVSCSsJdXBwZXIgbGVmdC1oYW5kIGNvcm5lcgorQUNTX1VSQ09STkVSCSsJdXBwZXIgcmlnaHQtaGFuZCBjb3JuZXIKK0FDU19WTElORQl8CXZlcnRpY2FsIGxpbmUKKy5URQorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiBvbiBzdWNjZXNzCisodGhlIFNWcjQgbWFudWFscyBzcGVjaWZ5IG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uCitzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lCitkZXNjcmlwdGlvbnMuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJhZGRjaFxmUiwgXGZCbXZhZGRjaFxmUiwgXGZCbXZ3YWRkY2hcZlIsIGFuZAorXGZCZWNob2NoYXJcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorQWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorVGhlIGRlZmF1bHRzIHNwZWNpZmllZCBmb3IgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzIGFwcGx5IGluIHRoZSBQT1NJWCBsb2NhbGUuCisuTFAKK1NvbWUgQUNTIHN5bWJvbHMKKyhBQ1NfUzMsCitBQ1NfUzcsCitBQ1NfTEVRVUFMLAorQUNTX0dFUVVBTCwKK0FDU19QSSwKK0FDU19ORVFVQUwsCitBQ1NfU1RFUkxJTkcpCit3ZXJlIG5vdCBkb2N1bWVudGVkIGluCithbnkgcHVibGljbHkgcmVsZWFzZWQgU3lzdGVtIFYuICBIb3dldmVyLCBtYW55IHB1YmxpY2x5IGF2YWlsYWJsZSB0ZXJtaW5mb3MKK2luY2x1ZGUgXGZCYWNzY1xmUiBzdHJpbmdzIGluIHdoaWNoIHRoZWlyIGtleSBjaGFyYWN0ZXJzIChwcnl6e3x9KSBhcmUKK2VtYmVkZGVkLCBhbmQgYSBzZWNvbmQtaGFuZCBsaXN0IG9mIHRoZWlyIGNoYXJhY3RlciBkZXNjcmlwdGlvbnMgaGFzIGNvbWUKK3RvIGxpZ2h0LiAgVGhlIEFDUy1wcmVmaXhlZCBuYW1lcyBmb3IgdGhlbSB3ZXJlIGludmVudGVkIGZvciBcZkJuY3Vyc2VzXGZSKDNYKS4KKy5MUAorVGhlIFxmQlRBQlNJWkVcZlIgdmFyaWFibGUgaXMgaW1wbGVtZW50ZWQgaW4gc29tZSB2ZXJzaW9ucyBvZiBjdXJzZXMsCitidXQgaXMgbm90IHBhcnQgb2YgWC9PcGVuIGN1cnNlcy4KKy5MUAorSWYgXGZJY2hcZlIgaXMgYSBjYXJyaWFnZSByZXR1cm4sCit0aGUgY3Vyc29yIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgcm93IG9mIHRoZSB3aW5kb3cuCitUaGlzIGlzIHRydWUgb2Ygb3RoZXIgaW1wbGVtZW50YXRpb25zLCBidXQgaXMgbm90IGRvY3VtZW50ZWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2F0dHJcZlIoM1gpLAorXGZCY3Vyc19jbGVhclxmUigzWCksCitcZkJjdXJzX2luY2hcZlIoM1gpLAorXGZCY3Vyc19vdXRvcHRzXGZSKDNYKSwKK1xmQmN1cnNfcmVmcmVzaFxmUigzWCksCitcZkJwdXRjXGZSKDMpLgorLlBQCitDb21wYXJhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgKG5jdXJzZXN3KSBsaWJyYXJ5IGFyZQorZGVzY3JpYmVkIGluCitcZkJjdXJzX2FkZF93Y2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19hZGRjaHN0ci4zeCBiL21hbi9jdXJzX2FkZGNoc3RyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMWIwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19hZGRjaHN0ci4zeApAQCAtMCwwICsxLDk5IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYWRkY2hzdHIuM3gsdiAxLjEyIDIwMDYvMTIvMDIgMTc6MDI6NDUgdG9tIEV4cCAkCisuVEggY3Vyc19hZGRjaHN0ciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmFkZGNoc3RyXGZSLAorXGZCYWRkY2huc3RyXGZSLAorXGZCd2FkZGNoc3RyXGZSLAorXGZCd2FkZGNobnN0clxmUiwKK1xmQm12YWRkY2hzdHJcZlIsCitcZkJtdmFkZGNobnN0clxmUiwKK1xmQm12d2FkZGNoc3RyXGZSLAorXGZCbXZ3YWRkY2huc3RyXGZSIC0gYWRkIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgKGFuZCBhdHRyaWJ1dGVzKSB0byBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5QUAorXGZCaW50IGFkZGNoc3RyKGNvbnN0IGNodHlwZSAqY2hzdHIpO1xmUgorLmJyCitcZkJpbnQgYWRkY2huc3RyKGNvbnN0IGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHdhZGRjaHN0cihXSU5ET1cgKndpbiwgY29uc3QgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCB3YWRkY2huc3RyKFdJTkRPVyAqd2luLCBjb25zdCBjaHR5cGUgKmNoc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdmFkZGNoc3RyKGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCBtdmFkZGNobnN0cihpbnQgeSwgaW50IHgsIGNvbnN0IGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12d2FkZGNoc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNodHlwZSAqY2hzdHIpO1xmUgorLmJyCitcZkJpbnQgbXZ3YWRkY2huc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgY29weSBcZkljaHN0clxmUiBpbnRvIHRoZSB3aW5kb3cgaW1hZ2Ugc3RydWN0dXJlIGF0IGFuZCBhZnRlcgordGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLiAgVGhlIGZvdXIgcm91dGluZXMgd2l0aCBcZkluXGZSIGFzIHRoZSBsYXN0Cithcmd1bWVudCBjb3B5IGF0IG1vc3QgXGZJblxmUiBlbGVtZW50cywgYnV0IG5vIG1vcmUgdGhhbiB3aWxsIGZpdCBvbiB0aGUgbGluZS4KK0lmIFxmQm5cZlI9XGZCLTFcZlIgdGhlbiB0aGUgd2hvbGUgc3RyaW5nIGlzIGNvcGllZCwgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mCitjaGFyYWN0ZXJzIHRoYXQgd2lsbCBmaXQgb24gdGhlIGxpbmUuCisuUFAKK1RoZSB3aW5kb3cgY3Vyc29yIGlzIFxmSW5vdFxmUiBhZHZhbmNlZCwgYW5kIHRoZXNlIHJvdXRpbmVzIHdvcmsgZmFzdGVyIHRoYW4KK1xmQndhZGRuc3RyXGZSLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZXkgZG8gbm90IHBlcmZvcm0gYW55IGtpbmQgb2YgY2hlY2tpbmcKKyhzdWNoIGFzIGZvciB0aGUgbmV3bGluZSwgYmFja3NwYWNlLCBvciBjYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVycyksIHRoZXkgZG8gbm90CithZHZhbmNlIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiwgdGhleSBkbyBub3QgZXhwYW5kIG90aGVyIGNvbnRyb2wgY2hhcmFjdGVycwordG8gXi1lc2NhcGVzLCBhbmQgdGhleSB0cnVuY2F0ZSB0aGUgc3RyaW5nIGlmIGl0IGNyb3NzZXMgdGhlIHJpZ2h0IG1hcmdpbiwKK3JhdGhlciB0aGFuIHdyYXBwaW5nIGl0IGFyb3VuZCB0byB0aGUgbmV3IGxpbmUuCisuU0ggUkVUVVJOIFZBTFVFUworQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiBvbiBzdWNjZXNzCisodGhlIFNWcjQgbWFudWFscyBzcGVjaWZ5IG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uCitzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lCitkZXNjcmlwdGlvbnMuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3YWRkY2huc3RyXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGVudHJ5IHBvaW50cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLgorLlBQCitDb21wYXJhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgKG5jdXJzZXN3KSBsaWJyYXJ5IGFyZQorZGVzY3JpYmVkIGluCitcZkJjdXJzX2FkZF93Y2hzdHJcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19hZGRzdHIuM3ggYi9tYW4vY3Vyc19hZGRzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4YjlkZAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2FkZHN0ci4zeApAQCAtMCwwICsxLDk3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYWRkc3RyLjN4LHYgMS4xMyAyMDA1LzA1LzE1IDE2OjE3OjE0IHRvbSBFeHAgJAorLlRIIGN1cnNfYWRkc3RyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCYWRkc3RyXGZSLAorXGZCYWRkbnN0clxmUiwKK1xmQndhZGRzdHJcZlIsCitcZkJ3YWRkbnN0clxmUiwKK1xmQm12YWRkc3RyXGZSLAorXGZCbXZhZGRuc3RyXGZSLAorXGZCbXZ3YWRkc3RyXGZSLAorXGZCbXZ3YWRkbnN0clxmUiAtIGFkZCBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRvIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdyBhbmQgYWR2YW5jZSBjdXJzb3IKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKKy5uZgorXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgYWRkc3RyKGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBhZGRuc3RyKGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2FkZHN0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdhZGRuc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCBjaGFyICpcZlJcZklzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12YWRkc3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12YWRkbnN0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3YWRkc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndhZGRuc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IGNoYXIgKlxmUlxmSXN0ciwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSAobnVsbC10ZXJtaW5hdGVkKSBjaGFyYWN0ZXIgc3RyaW5nCitcZklzdHJcZlIgb24gdGhlIGdpdmVuIHdpbmRvdy4KK0l0IGlzIHNpbWlsYXIgdG8gY2FsbGluZyBcZkJ3YWRkY2hcZlIgb25jZSBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4KK1RoZSBmb3VyIHJvdXRpbmVzIHdpdGggXGZJblxmUiBhcyB0aGUgbGFzdCBhcmd1bWVudAord3JpdGUgYXQgbW9zdCBcZkluXGZSIGNoYXJhY3RlcnMuCitJZiBcZkluXGZSIGlzIC0xLCB0aGVuIHRoZSBlbnRpcmUgc3RyaW5nIHdpbGwgYmUgYWRkZWQsCit1cCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgZml0IG9uIHRoZSBsaW5lLAorb3IgdW50aWwgYSB0ZXJtaW5hdGluZyBudWxsIGlzIHJlYWNoZWQuCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSIG9uIHN1Y2Nlc3MKKyh0aGUgU1ZyNCBtYW51YWxzIHNwZWNpZnkgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24KK3N1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwgb3IKK2lmIHRoZSBzdHJpbmcgcG9pbnRlciBpcyBudWxsIG9yCitpZiB0aGUgY29ycmVzcG9uZGluZyBjYWxscyB0byBcZkJ3YWRkY2hcZlAgcmV0dXJuIGFuIGVycm9yLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIG9mIHRoZXNlIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3YWRkc3RyXGZSIGFuZCBcZkJ3YWRkbnN0clxmUiBtYXkgYmUKK21hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorQWxsIHRoZXNlIGVudHJ5IHBvaW50cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LiAgVGhlCitYU0kgZXJyb3JzIEVJTFNFUSBhbmQgRU9WRVJGTE9XLCBhc3NvY2lhdGVkIHdpdGggZXh0ZW5kZWQtbGV2ZWwgY29uZm9ybWFuY2UsCithcmUgbm90IHlldCBkZXRlY3RlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19hZGRjaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2FkZHdzdHIuM3ggYi9tYW4vY3Vyc19hZGR3c3RyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDI3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19hZGR3c3RyLjN4CkBAIC0wLDAgKzEsOTQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19hZGR3c3RyLjN4LHYgMS43IDIwMDYvMDIvMjUgMjA6NTk6MDggdG9tIEV4cCAkCisuVEggY3Vyc19hZGR3c3RyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCYWRkd3N0clxmUiwKK1xmQmFkZG53c3RyXGZSLAorXGZCd2FkZHdzdHJcZlIsCitcZkJ3YWRkbndzdHJcZlIsCitcZkJtdmFkZHdzdHJcZlIsCitcZkJtdmFkZG53c3RyXGZSLAorXGZCbXZ3YWRkd3N0clxmUiwKK1xmQm12d2FkZG53c3RyXGZSIFwtIGFkZCBhIHN0cmluZyBvZiB3aWRlIGNoYXJhY3RlcnMgdG8gYSBcZkJjdXJzZXNcZlIgd2luZG93IGFuZCBhZHZhbmNlIGN1cnNvcgorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworLm5mCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUFAKK1xmQmludCBhZGR3c3RyKGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgYWRkbndzdHIoY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2FkZHdzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2FkZG53c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmFkZHdzdHIoaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12YWRkbndzdHIoaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndhZGR3c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3YWRkbndzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZQorKG51bGwtdGVybWluYXRlZCkgXGZCd2NoYXJfdFxmUiBjaGFyYWN0ZXIgc3RyaW5nCitcZkl3c3RyXGZSIG9uIHRoZSBnaXZlbiB3aW5kb3cuCitJdCBpcyBzaW1pbGFyIHRvIGNvbnN0cnVjdGluZyBhIFxmQmNjaGFyX3RcZlIgZm9yIGVhY2ggd2NoYXJfdCBpbiB0aGUgc3RyaW5nLAordGhlbiBjYWxsaW5nIFxmQndhZGRfd2NoXGZSIGZvciB0aGUgcmVzdWx0aW5nIFxmQmNjaGFyX3RcZlIuCisuUFAKK1RoZSBcZkltdlxmUiByb3V0aW5lcyBwZXJmb3JtIGN1cnNvciBtb3ZlbWVudCBvbmNlLCBiZWZvcmUgd3JpdGluZyBhbnkKK2NoYXJhY3RlcnMuCitUaGVyZWFmdGVyLCB0aGUgY3Vyc29yIGlzIGFkdmFuY2VkIGFzIGEgc2lkZS1lZmZlY3Qgb2Ygd3JpdGluZyB0byB0aGUgd2luZG93LgorLlBQCitUaGUgZm91ciByb3V0aW5lcyB3aXRoIFxmSW5cZlIgYXMgdGhlIGxhc3QgYXJndW1lbnQKK3dyaXRlIGF0IG1vc3QgXGZJblxmUiBcZkJ3Y2hhcl90XGZSIGNoYXJhY3RlcnMuCitJZiBcZkluXGZSIGlzIC0xLCB0aGVuIHRoZSBlbnRpcmUgc3RyaW5nIHdpbGwgYmUgYWRkZWQsCit1cCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgZml0IG9uIHRoZSBsaW5lLAorb3IgdW50aWwgYSB0ZXJtaW5hdGluZyBudWxsIGlzIHJlYWNoZWQuCisuU0ggUkVUVVJOIFZBTFVFUworQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiBvbiBzdWNjZXNzLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIG9mIHRoZXNlIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3YWRkbndzdHJcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorQWxsIHRoZXNlIGVudHJ5IHBvaW50cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19hZGRfd2NoXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19hdHRyLjN4IGIvbWFuL2N1cnNfYXR0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjU4YWZmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfYXR0ci4zeApAQCAtMCwwICsxLDI3MCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19hdHRyLjN4LHYgMS4zMSAyMDA3LzAzLzE3IDIwOjMwOjMzIHRvbSBFeHAgJAorLlRIIGN1cnNfYXR0ciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmF0dHJvZmZcZlIsCitcZkJ3YXR0cm9mZlxmUiwKK1xmQmF0dHJvblxmUiwKK1xmQndhdHRyb25cZlIsCitcZkJhdHRyc2V0XGZSLAorXGZCd2F0dHJzZXRcZlIsCitcZkJjb2xvcl9zZXRcZlIsCitcZkJ3Y29sb3Jfc2V0XGZSLAorXGZCc3RhbmRlbmRcZlIsCitcZkJ3c3RhbmRlbmRcZlIsCitcZkJzdGFuZG91dFxmUiwKK1xmQndzdGFuZG91dFxmUiwKK1xmQmF0dHJfZ2V0XGZSLAorXGZCd2F0dHJfZ2V0XGZSLAorXGZCYXR0cl9vZmZcZlIsCitcZkJ3YXR0cl9vZmZcZlIsCitcZkJhdHRyX29uXGZSLAorXGZCd2F0dHJfb25cZlIsCitcZkJhdHRyX3NldFxmUiwKK1xmQndhdHRyX3NldFxmUiwKK1xmQmNoZ2F0XGZSLAorXGZCd2NoZ2F0XGZSLAorXGZCbXZjaGdhdFxmUiwKK1xmQm12d2NoZ2F0XGZSLAorXGZCUEFJUl9OVU1CRVJcZlIgLSBcZkJjdXJzZXNcZlIgY2hhcmFjdGVyIGFuZCB3aW5kb3cgYXR0cmlidXRlIGNvbnRyb2wgcm91dGluZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5icgorXGZCaW50IGF0dHJvZmYoaW50IGF0dHJzKTtcZlIKKy5icgorXGZCaW50IHdhdHRyb2ZmKFdJTkRPVyAqd2luLCBpbnQgYXR0cnMpO1xmUgorLmJyCitcZkJpbnQgYXR0cm9uKGludCBhdHRycyk7XGZSCisuYnIKK1xmQmludCB3YXR0cm9uKFdJTkRPVyAqd2luLCBpbnQgYXR0cnMpO1xmUgorLmJyCitcZkJpbnQgYXR0cnNldChpbnQgYXR0cnMpO1xmUgorLmJyCitcZkJpbnQgd2F0dHJzZXQoV0lORE9XICp3aW4sIGludCBhdHRycyk7XGZSCisuYnIKK1xmQmludCBjb2xvcl9zZXQoc2hvcnQgY29sb3JfcGFpcl9udW1iZXIsIHZvaWQqIG9wdHMpO1xmUgorLmJyCitcZkJpbnQgd2NvbG9yX3NldChXSU5ET1cgKndpbiwgc2hvcnQgY29sb3JfcGFpcl9udW1iZXIsXGZSCisgICAgICBcZkJ2b2lkKiBvcHRzKTtcZlIKKy5icgorXGZCaW50IHN0YW5kZW5kKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgd3N0YW5kZW5kKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IHN0YW5kb3V0KHZvaWQpO1xmUgorLmJyCitcZkJpbnQgd3N0YW5kb3V0KFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGF0dHJfZ2V0KGF0dHJfdCAqYXR0cnMsIHNob3J0ICpwYWlyLCB2b2lkICpvcHRzKTtcZlIKKy5icgorXGZCaW50IHdhdHRyX2dldChXSU5ET1cgKndpbiwgYXR0cl90ICphdHRycywgc2hvcnQgKnBhaXIsXGZSCisgICAgICAgXGZCdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCBhdHRyX29mZihhdHRyX3QgYXR0cnMsIHZvaWQgKm9wdHMpO1xmUgorLmJyCitcZkJpbnQgd2F0dHJfb2ZmKFdJTkRPVyAqd2luLCBhdHRyX3QgYXR0cnMsIHZvaWQgKm9wdHMpO1xmUgorLmJyCitcZkJpbnQgYXR0cl9vbihhdHRyX3QgYXR0cnMsIHZvaWQgKm9wdHMpO1xmUgorLmJyCitcZkJpbnQgd2F0dHJfb24oV0lORE9XICp3aW4sIGF0dHJfdCBhdHRycywgdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCBhdHRyX3NldChhdHRyX3QgYXR0cnMsIHNob3J0IHBhaXIsIHZvaWQgKm9wdHMpO1xmUgorLmJyCitcZkJpbnQgd2F0dHJfc2V0KFdJTkRPVyAqd2luLCBhdHRyX3QgYXR0cnMsIHNob3J0IHBhaXIsIHZvaWQgKm9wdHMpO1xmUgorLmJyCitcZkJpbnQgY2hnYXQoaW50IG4sIGF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvcixcZlIKKyAgICAgIFxmQmNvbnN0IHZvaWQgKm9wdHMpXGZSCisuYnIKK1xmQmludCB3Y2hnYXQoV0lORE9XICp3aW4sIGludCBuLCBhdHRyX3QgYXR0cixcZlIKKyAgICAgIFxmQnNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzKVxmUgorLmJyCitcZkJpbnQgbXZjaGdhdChpbnQgeSwgaW50IHgsIGludCBuLCBhdHRyX3QgYXR0cixcZlIKKyAgICAgIFxmQnNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzKVxmUgorLmJyCitcZkJpbnQgbXZ3Y2hnYXQoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgaW50IG4sXGZSCisgICAgICBcZkJhdHRyX3QgYXR0ciwgc2hvcnQgY29sb3IsIGNvbnN0IHZvaWQgKm9wdHMpXGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgbWFuaXB1bGF0ZSB0aGUgY3VycmVudCBhdHRyaWJ1dGVzIG9mIHRoZSBuYW1lZCB3aW5kb3cuICBUaGUKK2N1cnJlbnQgYXR0cmlidXRlcyBvZiBhIHdpbmRvdyBhcHBseSB0byBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSB3cml0dGVuIGludG8KK3RoZSB3aW5kb3cgd2l0aCBcZkJ3YWRkY2hcZlIsIFxmQndhZGRzdHJcZlIgYW5kIFxmQndwcmludHdcZlIuICBBdHRyaWJ1dGVzIGFyZQorYSBwcm9wZXJ0eSBvZiB0aGUgY2hhcmFjdGVyLCBhbmQgbW92ZSB3aXRoIHRoZSBjaGFyYWN0ZXIgdGhyb3VnaCBhbnkgc2Nyb2xsaW5nCithbmQgaW5zZXJ0L2RlbGV0ZSBsaW5lL2NoYXJhY3RlciBvcGVyYXRpb25zLiAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhleSBhcmUKK2Rpc3BsYXllZCBhcyBhcHByb3ByaWF0ZSBtb2RpZmljYXRpb25zIHRvIHRoZSBncmFwaGljIHJlbmRpdGlvbiBvZiBjaGFyYWN0ZXJzCitwdXQgb24gdGhlIHNjcmVlbi4KKy5QUAorVGhlIHJvdXRpbmUgXGZCYXR0cnNldFxmUiBzZXRzIHRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgb2YgdGhlIGdpdmVuIHdpbmRvdyB0bworXGZJYXR0cnNcZlIuICBUaGUgcm91dGluZSBcZkJhdHRyb2ZmXGZSIHR1cm5zIG9mZiB0aGUgbmFtZWQgYXR0cmlidXRlcyB3aXRob3V0Cit0dXJuaW5nIGFueSBvdGhlciBhdHRyaWJ1dGVzIG9uIG9yIG9mZi4gIFRoZSByb3V0aW5lIFxmQmF0dHJvblxmUiB0dXJucyBvbiB0aGUKK25hbWVkIGF0dHJpYnV0ZXMgd2l0aG91dCBhZmZlY3RpbmcgYW55IG90aGVycy4gIFRoZSByb3V0aW5lIFxmQnN0YW5kb3V0XGZSIGlzCit0aGUgc2FtZSBhcyBcZkJhdHRyb24oQV9TVEFORE9VVClcZlIuICBUaGUgcm91dGluZSBcZkJzdGFuZGVuZFxmUiBpcyB0aGUgc2FtZQorYXMgXGZCYXR0cnNldChBX05PUk1BTClcZlIgb3IgXGZCYXR0cnNldCgwKVxmUiwgdGhhdCBpcywgaXQgdHVybnMgb2ZmIGFsbAorYXR0cmlidXRlcy4KKy5QUAorVGhlIFxmQmF0dHJzZXRcZlIgYW5kIHJlbGF0ZWQgcm91dGluZXMgZG8gbm90IGFmZmVjdCB0aGUgYXR0cmlidXRlcyB1c2VkCit3aGVuIGVyYXNpbmcgcG9ydGlvbnMgb2YgdGhlIHdpbmRvdy4KK1NlZSBcZkJjdXJzX2JrZ2RcZlIoM1gpIGZvciBmdW5jdGlvbnMgd2hpY2ggbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIHVzZWQgZm9yCitlcmFzaW5nIGFuZCBjbGVhcmluZy4KKy5QUAorVGhlIHJvdXRpbmUgXGZCY29sb3Jfc2V0XGZSIHNldHMgdGhlIGN1cnJlbnQgY29sb3Igb2YgdGhlIGdpdmVuIHdpbmRvdyB0byB0aGUKK2ZvcmVncm91bmQvYmFja2dyb3VuZCBjb21iaW5hdGlvbiBkZXNjcmliZWQgYnkgdGhlIGNvbG9yX3BhaXJfbnVtYmVyLiBUaGUKK3BhcmFtZXRlciBvcHRzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBhcHBsaWNhdGlvbnMgbXVzdCBzdXBwbHkgYSBudWxsCitwb2ludGVyLgorLlBQCitUaGUgcm91dGluZSBcZkJ3YXR0cl9nZXRcZlIgcmV0dXJucyB0aGUgY3VycmVudCBhdHRyaWJ1dGUgYW5kIGNvbG9yIHBhaXIgZm9yCit0aGUgZ2l2ZW4gd2luZG93OyBcZkJhdHRyX2dldFxmUiByZXR1cm5zIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSBhbmQgY29sb3IgcGFpcgorZm9yIFxmQnN0ZHNjclxmUi4KK1RoZSByZW1haW5pbmcgXGZCYXR0cl9cZlIqIGZ1bmN0aW9ucyBvcGVyYXRlIGV4YWN0bHkgbGlrZSB0aGUgY29ycmVzcG9uZGluZworXGZCYXR0clxmUiogZnVuY3Rpb25zLCBleGNlcHQgdGhhdCB0aGV5IHRha2UgYXJndW1lbnRzIG9mIHR5cGUgXGZCYXR0cl90XGZSCityYXRoZXIgdGhhbiBcZkJpbnRcZlIuCisuUFAKK1RoZSByb3V0aW5lIFxmQmNoZ2F0XGZSIGNoYW5nZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBnaXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycworc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIGxvY2F0aW9uIG9mIFxmQnN0ZHNjclxmUi4gIEl0IGRvZXMgbm90IHVwZGF0ZQordGhlIGN1cnNvciBhbmQgZG9lcyBub3QgcGVyZm9ybSB3cmFwcGluZy4gIEEgY2hhcmFjdGVyIGNvdW50IG9mIC0xIG9yIGdyZWF0ZXIKK3RoYW4gdGhlIHJlbWFpbmluZyB3aW5kb3cgd2lkdGggbWVhbnMgdG8gY2hhbmdlIGF0dHJpYnV0ZXMgYWxsIHRoZSB3YXkgdG8gdGhlCitlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIFRoZSBcZkJ3Y2hnYXRcZlIgZnVuY3Rpb24gZ2VuZXJhbGl6ZXMgdGhpcyB0byBhbnkKK3dpbmRvdzsgdGhlIFxmQm12d2NoZ2F0XGZSIGZ1bmN0aW9uIGRvZXMgYSBjdXJzb3IgbW92ZSBiZWZvcmUgYWN0aW5nLiAgSW4gdGhlc2UKK2Z1bmN0aW9ucywgdGhlIGNvbG9yIGFyZ3VtZW50IGlzIGEgY29sb3ItcGFpciBpbmRleCAoYXMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50CitvZiBcZklpbml0X3BhaXJcZlIsIHNlZSBcZkJjdXJzX2NvbG9yXGZSKDNYKSkuICBUaGUgXGZCb3B0c1xmUiBhcmd1bWVudCBpcyBub3QKK3ByZXNlbnRseSB1c2VkLCBidXQgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBmdXR1cmUgKGxlYXZlIGl0IFxmQk5VTExcZlIpLgorLlNTIEF0dHJpYnV0ZXMKK1RoZSBmb2xsb3dpbmcgdmlkZW8gYXR0cmlidXRlcywgZGVmaW5lZCBpbiBcZkI8Y3Vyc2VzLmg+XGZSLCBjYW4gYmUgcGFzc2VkIHRvCit0aGUgcm91dGluZXMgXGZCYXR0cm9uXGZSLCBcZkJhdHRyb2ZmXGZSLCBhbmQgXGZCYXR0cnNldFxmUiwgb3IgT1InZCB3aXRoIHRoZQorY2hhcmFjdGVycyBwYXNzZWQgdG8gXGZCYWRkY2hcZlIuCisuUFAKKy5UUworY2VudGVyIDsKK2wgbCAuCitcZkJBX05PUk1BTFxmUglOb3JtYWwgZGlzcGxheSAobm8gaGlnaGxpZ2h0KQorXGZCQV9TVEFORE9VVFxmUglCZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4KK1xmQkFfVU5ERVJMSU5FXGZSCVVuZGVybGluaW5nCitcZkJBX1JFVkVSU0VcZlIJUmV2ZXJzZSB2aWRlbworXGZCQV9CTElOS1xmUglCbGlua2luZworXGZCQV9ESU1cZlIJSGFsZiBicmlnaHQKK1xmQkFfQk9MRFxmUglFeHRyYSBicmlnaHQgb3IgYm9sZAorXGZCQV9QUk9URUNUXGZSCVByb3RlY3RlZCBtb2RlCitcZkJBX0lOVklTXGZSCUludmlzaWJsZSBvciBibGFuayBtb2RlCitcZkJBX0FMVENIQVJTRVRcZlIJQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKK1xmQkFfQ0hBUlRFWFRcZlIJQml0LW1hc2sgdG8gZXh0cmFjdCBhIGNoYXJhY3RlcgorXGZCQ09MT1JfUEFJUihcZlJcZkluXGZSXGZCKVxmUglDb2xvci1wYWlyIG51bWJlciBcZkluXGZSCisuVEUKKy5QUAorVGhlIGZvbGxvd2luZyBtYWNybyBpcyB0aGUgcmV2ZXJzZSBvZiBcZkJDT0xPUl9QQUlSKFxmUlxmSW5cZlJcZkIpXGZSOgorLlBQCisuYnIKK1xmQlBBSVJfTlVNQkVSKFxmUlxmSWF0dHJzXGZSKSBSZXR1cm5zIHRoZSBwYWlyIG51bWJlciBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgXGZCQ09MT1JfUEFJUihcZlJcZkluXGZSXGZCKVxmUiBhdHRyaWJ1dGUuCisuYnIKKy5QUAorVGhlIHJldHVybiB2YWx1ZXMgb2YgbWFueSBvZiB0aGVzZSByb3V0aW5lcyBhcmUgbm90IG1lYW5pbmdmdWwgKHRoZXkgYXJlCitpbXBsZW1lbnRlZCBhcyBtYWNyby1leHBhbmRlZCBhc3NpZ25tZW50cyBhbmQgc2ltcGx5IHJldHVybiB0aGVpciBhcmd1bWVudCkuCitUaGUgU1ZyNCBtYW51YWwgcGFnZSBjbGFpbXMgKGZhbHNlbHkpIHRoYXQgdGhlc2Ugcm91dGluZXMgYWx3YXlzIHJldHVybiBcZkIxXGZSLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCYXR0cm9mZlxmUiwgXGZCd2F0dHJvZmZcZlIsIFxmQmF0dHJvblxmUiwgXGZCd2F0dHJvblxmUiwKK1xmQmF0dHJzZXRcZlIsIFxmQndhdHRyc2V0XGZSLCBcZkJzdGFuZGVuZFxmUiBhbmQgXGZCc3RhbmRvdXRcZlIgbWF5IGJlIG1hY3Jvcy4KKy5QUAorXGZCQ09MT1JfUEFJUlxmUCB2YWx1ZXMgY2FuIG9ubHkgYmUgT1InZCB3aXRoIGF0dHJpYnV0ZXMgaWYgdGhlIHBhaXIKK251bWJlciBpcyBsZXNzIHRoYW4gMjU2LgorVGhlIGFsdGVybmF0ZSBmdW5jdGlvbnMgc3VjaCBhcyBcZkJjb2xvcl9zZXRcZlAgY2FuIHBhc3MgYSBjb2xvciBwYWlyCit2YWx1ZSBkaXJlY3RseS4KK0hvd2V2ZXIsIG5jdXJzZXMgQUJJIDQgYW5kIDUgc2ltcGx5IE9SIHRoaXMgdmFsdWUgd2l0aGluIHRoZSBhbHRlcm5hdGUgZnVuY3Rpb25zLgorWW91IG11c3QgdXNlIG5jdXJzZXMgQUJJIDYgdG8gc3VwcG9ydCBtb3JlIHRoYW4gMjU2IGNvbG9yIHBhaXJzLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIFRoZQorc3RhbmRhcmQgZGVmaW5lZCB0aGUgZGVkaWNhdGVkIHR5cGUgZm9yIGhpZ2hsaWdodHMsIFxmQmF0dHJfdFxmUiwgd2hpY2ggaXMgbm90CitkZWZpbmVkIGluIFNWcjQgY3Vyc2VzLiBUaGUgZnVuY3Rpb25zIHRha2luZyBcZkJhdHRyX3RcZlIgYXJndW1lbnRzIGFyZQorbm90IHN1cHBvcnRlZCB1bmRlciBTVnI0LgorLlBQCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBzdGF0ZXMgdGhhdCB3aGV0aGVyIHRoZSB0cmFkaXRpb25hbCBmdW5jdGlvbnMKK1xmQmF0dHJvblxmUi9cZkJhdHRyb2ZmXGZSL1xmQmF0dHJzZXRcZlIgY2FuIG1hbmlwdWxhdGUgYXR0cmlidXRlcyBvdGhlciB0aGFuCitcZkJBX0JMSU5LXGZSLCBcZkJBX0JPTERcZlIsIFxmQkFfRElNXGZSLCBcZkJBX1JFVkVSU0VcZlIsIFxmQkFfU1RBTkRPVVRcZlIsIG9yCitcZkJBX1VOREVSTElORVxmUiBpcyAidW5zcGVjaWZpZWQiLiAgVW5kZXIgdGhpcyBpbXBsZW1lbnRhdGlvbiBhcyB3ZWxsIGFzCitTVnI0IGN1cnNlcywgdGhlc2UgZnVuY3Rpb25zIGNvcnJlY3RseSBtYW5pcHVsYXRlIGFsbCBvdGhlciBoaWdobGlnaHRzCisoc3BlY2lmaWNhbGx5LCBcZkJBX0FMVENIQVJTRVRcZlIsIFxmQkFfUFJPVEVDVFxmUiwgYW5kIFxmQkFfSU5WSVNcZlIpLgorLlBQCitYU0kgQ3Vyc2VzIGFkZGVkIHRoZSBuZXcgZW50cnkgcG9pbnRzLCBcZkJhdHRyX2dldFxmUiwgXGZCYXR0cl9vblxmUiwKK1xmQmF0dHJfb2ZmXGZSLCBcZkJhdHRyX3NldFxmUiwgXGZCd2F0dHJfb25cZlIsIFxmQndhdHRyX29mZlxmUiwKK1xmQndhdHRyX2dldFxmUiwgXGZCd2F0dHJfc2V0XGZSLiAgVGhlc2UgYXJlIGludGVuZGVkIHRvIHdvcmsgd2l0aAorYSBuZXcgc2VyaWVzIG9mIGhpZ2hsaWdodCBtYWNyb3MgcHJlZml4ZWQgd2l0aCBcZkJXQV9cZlIuCisuUFAKK09sZGVyIHZlcnNpb25zIG9mIHRoaXMgbGlicmFyeSBkaWQgbm90IGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgc2NyZWVuCit3aGVuIGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzLgorVXNlIFxmQnRvdWNod2luXGZSIHRvIGZvcmNlIHRoZSBzY3JlZW4gdG8gbWF0Y2ggdGhlIHVwZGF0ZWQgYXR0cmlidXRlcy4KKy5QUAorLlRTCitjZW50ZXIgOworbCBsIC4KK1xmQldBX05PUk1BTFxmUglOb3JtYWwgZGlzcGxheSAobm8gaGlnaGxpZ2h0KQorXGZCV0FfU1RBTkRPVVRcZlIJQmVzdCBoaWdobGlnaHRpbmcgbW9kZSBvZiB0aGUgdGVybWluYWwuCitcZkJXQV9VTkRFUkxJTkVcZlIJVW5kZXJsaW5pbmcKK1xmQldBX1JFVkVSU0VcZlIJUmV2ZXJzZSB2aWRlbworXGZCV0FfQkxJTktcZlIJQmxpbmtpbmcKK1xmQldBX0RJTVxmUglIYWxmIGJyaWdodAorXGZCV0FfQk9MRFxmUglFeHRyYSBicmlnaHQgb3IgYm9sZAorXGZCV0FfQUxUQ0hBUlNFVFxmUglBbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorLlRFCisuUFAKK1RoZSBYU0kgY3Vyc2VzIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIFxmQkFfXGZSCithbmQgXGZCV0FfXGZSLXVzaW5nIGZ1bmN0aW9ucyBvcGVyYXRlcyBvbiB0aGUgc2FtZSBjdXJyZW50LWhpZ2hsaWdodAoraW5mb3JtYXRpb24uCisuUFAKK1RoZSBYU0kgc3RhbmRhcmQgZXh0ZW5kZWQgY29uZm9ybWFuY2UgbGV2ZWwgYWRkcyBuZXcgaGlnaGxpZ2h0cworXGZCQV9IT1JJWk9OVEFMXGZSLCBcZkJBX0xFRlRcZlIsIFxmQkFfTE9XXGZSLCBcZkJBX1JJR0hUXGZSLCBcZkJBX1RPUFxmUiwKK1xmQkFfVkVSVElDQUxcZlIgKGFuZCBjb3JyZXNwb25kaW5nIFxmQldBX1xmUiBtYWNyb3MgZm9yIGVhY2gpIHdoaWNoIHRoaXMKK2ltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCBzdXBwb3J0LgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJPS1xmUiBvbiBzdWNjZXNzLCBvciBcZkJFUlJcZlAgb24gZmFpbHVyZS4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbC4KK1RoZSBcZkJ3Y29sb3Jfc2V0XGZQIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbG9yIHBhaXIgcGFyYW1ldGVyCitpcyBvdXRzaWRlIHRoZSByYW5nZSAwLi5DT0xPUl9QQUlSUy0xLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIHByb3ZpZGVzCitcZkJnZXRhdHRyc1xmUgorZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBjdXJzZXMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2FkZGNoXGZSKDNYKSwKK1xmQmN1cnNfYWRkc3RyXGZSKDNYKSwKK1xmQmN1cnNfYmtnZFxmUigzWCksCitcZkJjdXJzX3ByaW50d1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfYmVlcC4zeCBiL21hbi9jdXJzX2JlZXAuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllNTc2MQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2JlZXAuM3gKQEAgLTAsMCArMSw2MyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2JlZXAuM3gsdiAxLjEwIDIwMDUvMDEvMDggMTc6NTU6NTEgdG9tIEV4cCAkCisuVEggY3Vyc19iZWVwIDNYICIiCisuU0ggTkFNRQorXGZCYmVlcFxmUiwgXGZCZmxhc2hcZlIgLSBcZkJjdXJzZXNcZlIgYmVsbCBhbmQgc2NyZWVuIGZsYXNoIHJvdXRpbmVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5QUAorXGZCaW50IGJlZXAodm9pZCk7XGZSCisuYnIKK1xmQmludCBmbGFzaCh2b2lkKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCYmVlcFxmUiBhbmQgXGZCZmxhc2hcZlIgcm91dGluZXMgYXJlIHVzZWQgdG8gYWxlcnQgdGhlIHRlcm1pbmFsIHVzZXIuCitUaGUgcm91dGluZSBcZkJiZWVwXGZSIHNvdW5kcyBhbiBhdWRpYmxlIGFsYXJtIG9uIHRoZSB0ZXJtaW5hbCwgaWYgcG9zc2libGU7CitvdGhlcndpc2UgaXQgZmxhc2hlcyB0aGUgc2NyZWVuICh2aXNpYmxlIGJlbGwpLiAgVGhlIHJvdXRpbmUgXGZCZmxhc2hcZlIKK2ZsYXNoZXMgdGhlIHNjcmVlbiwgYW5kIGlmIHRoYXQgaXMgbm90IHBvc3NpYmxlLCBzb3VuZHMgdGhlIGFsZXJ0LiAgSWYgbmVpdGhlcgorYWxlcnQgaXMgcG9zc2libGUsIG5vdGhpbmcgaGFwcGVucy4gIE5lYXJseSBhbGwgdGVybWluYWxzIGhhdmUgYW4gYXVkaWJsZSBhbGVydAorKGJlbGwgb3IgYmVlcCksIGJ1dCBvbmx5IHNvbWUgY2FuIGZsYXNoIHRoZSBzY3JlZW4uCisuU0ggUkVUVVJOIFZBTFVFCitUaGVzZSByb3V0aW5lcyByZXR1cm4gXGZCT0tcZlIgaWYgdGhleSBzdWNjZWVkIGluIGJlZXBpbmcgb3IgZmxhc2hpbmcsCitcZkJFUlJcZlIgb3RoZXJ3aXNlLgorLlNIIEVYVEVOU0lPTlMKK1NWcjQncyBiZWVwIGFuZCBmbGFzaCByb3V0aW5lcyBhbHdheXMgcmV0dXJuZWQgXGZCT0tcZlIsIHNvIGl0IHdhcyBub3QKK3Bvc3NpYmxlIHRvIHRlbGwgd2hlbiB0aGUgYmVlcCBvciBmbGFzaCBmYWlsZWQuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorTGlrZSBTVnI0LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGV5IGFsd2F5cyByZXR1cm4gXGZCT0tcZlIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfYmtnZC4zeCBiL21hbi9jdXJzX2JrZ2QuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkNzY4YQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2JrZ2QuM3gKQEAgLTAsMCArMSw5OCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2JrZ2QuM3gsdiAxLjE5IDIwMDMvMTIvMjcgMTg6NTA6NDAgdG9tIEV4cCAkCisuVEggY3Vyc19ia2dkIDNYICIiCisuU0ggTkFNRQorXGZCYmtnZHNldFxmUiwgXGZCd2JrZ2RzZXRcZlIsCitcZkJia2dkXGZSLCBcZkJ3YmtnZFxmUiwKK1xmQmdldGJrZ2RcZlIgLSBcZkJjdXJzZXNcZlIgd2luZG93IGJhY2tncm91bmQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5QUAorXGZCdm9pZCBia2dkc2V0KGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQnZvaWQgd2JrZ2RzZXQoV0lORE9XICp3aW4sIGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmludCBia2dkKGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmludCB3YmtnZChXSU5ET1cgKndpbiwgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCY2h0eXBlIGdldGJrZ2QoV0lORE9XICp3aW4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJia2dkc2V0XGZSIGFuZCBcZkJ3YmtnZHNldFxmUiByb3V0aW5lcyBtYW5pcHVsYXRlIHRoZQorYmFja2dyb3VuZCBvZiB0aGUgbmFtZWQgd2luZG93LgorVGhlIHdpbmRvdyBiYWNrZ3JvdW5kIGlzIGEgXGZCY2h0eXBlXGZSIGNvbnNpc3Rpbmcgb2YKK2FueSBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGVzIChpLmUuLCByZW5kaXRpb24pIGFuZCBhIGNoYXJhY3Rlci4KK1RoZSBhdHRyaWJ1dGUgcGFydCBvZiB0aGUgYmFja2dyb3VuZCBpcyBjb21iaW5lZCAoT1InZWQpIHdpdGggYWxsIG5vbi1ibGFuaworY2hhcmFjdGVycyB0aGF0IGFyZSB3cml0dGVuIGludG8gdGhlIHdpbmRvdyB3aXRoIFxmQndhZGRjaFxmUi4gIEJvdGgKK3RoZSBjaGFyYWN0ZXIgYW5kIGF0dHJpYnV0ZSBwYXJ0cyBvZiB0aGUgYmFja2dyb3VuZCBhcmUgY29tYmluZWQgd2l0aAordGhlIGJsYW5rIGNoYXJhY3RlcnMuICBUaGUgYmFja2dyb3VuZCBiZWNvbWVzIGEgcHJvcGVydHkgb2YgdGhlCitjaGFyYWN0ZXIgYW5kIG1vdmVzIHdpdGggdGhlIGNoYXJhY3RlciB0aHJvdWdoIGFueSBzY3JvbGxpbmcgYW5kCitpbnNlcnQvZGVsZXRlIGxpbmUvY2hhcmFjdGVyIG9wZXJhdGlvbnMuCisuUFAKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgb24gYSBwYXJ0aWN1bGFyIHRlcm1pbmFsLAordGhlIGF0dHJpYnV0ZSBwYXJ0IG9mIHRoZSBiYWNrZ3JvdW5kIGlzIGRpc3BsYXllZAorYXMgdGhlIGdyYXBoaWMgcmVuZGl0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgcHV0IG9uIHRoZSBzY3JlZW4uCisuUFAKK1RoZSBcZkJia2dkXGZSIGFuZCBcZkJ3YmtnZFxmUiBmdW5jdGlvbnMKK3NldCB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudCBvciBzcGVjaWZpZWQgd2luZG93CithbmQgdGhlbiBhcHBseSB0aGlzIHNldHRpbmcgdG8gZXZlcnkgY2hhcmFjdGVyIHBvc2l0aW9uIGluIHRoYXQgd2luZG93OgorLlBQCisuUlMKK1RoZSByZW5kaXRpb24gb2YgZXZlcnkgY2hhcmFjdGVyIG9uIHRoZSBzY3JlZW4gaXMgY2hhbmdlZCB0bwordGhlIG5ldyBiYWNrZ3JvdW5kIHJlbmRpdGlvbi4KKy5QUAorV2hlcmV2ZXIgdGhlIGZvcm1lciBiYWNrZ3JvdW5kIGNoYXJhY3RlcgorYXBwZWFycywgaXQgaXMgY2hhbmdlZCB0byB0aGUgbmV3IGJhY2tncm91bmQgY2hhcmFjdGVyLgorLlJFCisuUFAKK1RoZSBcZkJnZXRia2dkXGZSIGZ1bmN0aW9uIHJldHVybnMgdGhlIGdpdmVuIHdpbmRvdydzIGN1cnJlbnQgYmFja2dyb3VuZAorY2hhcmFjdGVyL2F0dHJpYnV0ZSBwYWlyLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIHJvdXRpbmVzIFxmQmJrZ2RcZlIgYW5kIFxmQndia2dkXGZSIHJldHVybiB0aGUgaW50ZWdlciBcZkJPS1xmUi4KK1RoZSBTVnI0LjAgbWFudWFsIHNheXMgIm9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgaWYgXGZCaW1tZWRva1xmUiBpcyBzZXQiLAorYnV0IHRoaXMgYXBwZWFycyB0byBiZSBhbiBlcnJvci4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQmJrZ2RzZXRcZlIgYW5kIFxmQmJrZ2RcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCitJdCBzcGVjaWZpZXMgdGhhdCBcZkJia2dkXGZSIGFuZCBcZkJ3YmtnZFxmUiByZXR1cm4gXGZCRVJSXGZSIG9uIGZhaWx1cmUuCitidXQgZ2l2ZXMgbm8gZmFpbHVyZSBjb25kaXRpb25zLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19hZGRjaFxmUigzWCksCitcZkJjdXJzX2F0dHJcZlIoM1gpLAorXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19ia2dybmQuM3ggYi9tYW4vY3Vyc19ia2dybmQuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2ZjZhZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2JrZ3JuZC4zeApAQCAtMCwwICsxLDEwNiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2JrZ3JuZC4zeCx2IDEuMyAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgJAorLlRIIGN1cnNfYmtncm5kIDNYICIiCisuU0ggTkFNRQorXGZCYmtncm5kXGZSLAorXGZCd2JrZ3JuZFxmUiwKK1xmQmJrZ3JuZHNldFxmUiwKK1xmQndia2dybmRzZXRcZlIsCitcZkJnZXRia2dybmRcZlIsCitcZkJ3Z2V0Ymtncm5kXGZSIFwtIFxmQmN1cnNlc1xmUiB3aW5kb3cgY29tcGxleCBiYWNrZ3JvdW5kIG1hbmlwdWxhdGlvbiByb3V0aW5lcworLlNIIFNZTk9QU0lTCisuUFAKKy5CICNpbmNsdWRlIDxjdXJzZXMuaD4KKy5zcAorXGZCaW50IGJrZ3JuZChcZlJcZkIgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdia2dybmQoXGZSXGZCIFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCitcZkJ2b2lkIGJrZ3JuZHNldChjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlIgXGZCKTtcZlIKKy5icgorXGZCdm9pZCB3Ymtncm5kc2V0KFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgZ2V0Ymtncm5kKGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3Z2V0Ymtncm5kKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjY2hhcl90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJia2dybmRzZXRcZlIgYW5kIFxmQndia2dybmRzZXRcZlIgcm91dGluZXMgbWFuaXB1bGF0ZSB0aGUKK2JhY2tncm91bmQgb2YgdGhlIG5hbWVkIHdpbmRvdy4KK1RoZSB3aW5kb3cgYmFja2dyb3VuZCBpcyBhIFxmQmNjaGFyX3RcZlIgY29uc2lzdGluZyBvZgorYW55IGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgKGkuZS4sIHJlbmRpdGlvbikgYW5kIGEgY29tcGxleCBjaGFyYWN0ZXIuCitUaGUgYXR0cmlidXRlIHBhcnQgb2YgdGhlIGJhY2tncm91bmQgaXMgY29tYmluZWQgKE9SJ2VkKSB3aXRoIGFsbCBub24tYmxhbmsKK2NoYXJhY3RlcnMgdGhhdCBhcmUgd3JpdHRlbiBpbnRvIHRoZSB3aW5kb3cgd2l0aCBcZkJ3YWRkY2hcZlIuICBCb3RoCit0aGUgY2hhcmFjdGVyIGFuZCBhdHRyaWJ1dGUgcGFydHMgb2YgdGhlIGJhY2tncm91bmQgYXJlIGNvbWJpbmVkIHdpdGgKK3RoZSBibGFuayBjaGFyYWN0ZXJzLgorVGhlIGJhY2tncm91bmQgYmVjb21lcyBhIHByb3BlcnR5IG9mIHRoZQorY2hhcmFjdGVyIGFuZCBtb3ZlcyB3aXRoIHRoZSBjaGFyYWN0ZXIgdGhyb3VnaCBhbnkgc2Nyb2xsaW5nIGFuZAoraW5zZXJ0L2RlbGV0ZSBsaW5lL2NoYXJhY3RlciBvcGVyYXRpb25zLgorLlBQCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIG9uIGEKK3BhcnRpY3VsYXIgdGVybWluYWwsIHRoZSBhdHRyaWJ1dGUgcGFydCBvZiB0aGUgYmFja2dyb3VuZCBpcyBkaXNwbGF5ZWQKK2FzIHRoZSBncmFwaGljIHJlbmRpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHB1dCBvbiB0aGUgc2NyZWVuLgorLlBQCitUaGUgXGZCYmtncm5kXGZSIGFuZCBcZkJ3Ymtncm5kXGZSIGZ1bmN0aW9ucworc2V0IHRoZSBiYWNrZ3JvdW5kIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IG9yIHNwZWNpZmllZCB3aW5kb3cKK2FuZCB0aGVuIGFwcGx5IHRoaXMgc2V0dGluZyB0byBldmVyeSBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhhdCB3aW5kb3c6CisuUlMKKy5QUAorVGhlIHJlbmRpdGlvbiBvZiBldmVyeSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbiBpcyBjaGFuZ2VkIHRvCit0aGUgbmV3IGJhY2tncm91bmQgcmVuZGl0aW9uLgorLlBQCitXaGVyZXZlciB0aGUgZm9ybWVyIGJhY2tncm91bmQgY2hhcmFjdGVyCithcHBlYXJzLCBpdCBpcyBjaGFuZ2VkIHRvIHRoZSBuZXcgYmFja2dyb3VuZCBjaGFyYWN0ZXIuCisuUkUKKy5QUAorVGhlIFxmQmdldGJrZ3JuZFxmUiBmdW5jdGlvbiByZXR1cm5zIHRoZSBnaXZlbiB3aW5kb3cncyBjdXJyZW50IGJhY2tncm91bmQKK2NoYXJhY3Rlci9hdHRyaWJ1dGUgcGFpciB2aWEgdGhlIFxmQndjaFxmUiBwb2ludGVyLgorLgorLlNIIE5PVEVTCitOb3RlIHRoYXQKK1xmQmJrZ3JuZFxmUiwKK1xmQmJrZ3JuZHNldFxmUiwgYW5kCitcZkJnZXRia2dybmRcZlIKK21heSBiZSBtYWNyb3MuCisuU0ggUkVUVVJOIFZBTFVFUworVGhlIFxmQmJrZ3JuZHNldFxmUiBhbmQgXGZCd2JrZ3JuZHNldFxmUiByb3V0aW5lcyBkbyBub3QgcmV0dXJuIGEgdmFsdWUuCisuUFAKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGUgb3RoZXIgZnVuY3Rpb25zIHJldHVybiBcZkJPS1xmUi4KK090aGVyd2lzZSwgdGhleSByZXR1cm4gXGZCRVJSXGZSLgorQSBudWxsIHdpbmRvdyBwb2ludGVyIGlzIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2JrZ2RcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2JvcmRlci4zeCBiL21hbi9jdXJzX2JvcmRlci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY5YTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfYm9yZGVyLjN4CkBAIC0wLDAgKzEsMTU1IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYm9yZGVyLjN4LHYgMS4xOSAyMDA3LzAyLzI0IDE2OjE1OjM4IHRvbSBFeHAgJAorLlRIIGN1cnNfYm9yZGVyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCYm9yZGVyXGZSLAorXGZCd2JvcmRlclxmUiwKK1xmQmJveFxmUiwKK1xmQmhsaW5lXGZSLAorXGZCd2hsaW5lXGZSLAorXGZCdmxpbmVcZlIsCitcZkJ3dmxpbmVcZlIsCitcZkJtdmhsaW5lXGZSLAorXGZCbXZ3aGxpbmVcZlIsCitcZkJtdnZsaW5lXGZSLAorXGZCbXZ3dmxpbmVcZlIgLSBjcmVhdGUgXGZCY3Vyc2VzXGZSIGJvcmRlcnMsIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGxpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuYnIKK1xmQmludCBib3JkZXIoY2h0eXBlIGxzLCBjaHR5cGUgcnMsIGNodHlwZSB0cywgY2h0eXBlIGJzLFxmUgorICAgXGZCY2h0eXBlIHRsLCBjaHR5cGUgdHIsIGNodHlwZSBibCwgY2h0eXBlIGJyKTtcZlIKKy5icgorXGZCaW50IHdib3JkZXIoV0lORE9XICp3aW4sIGNodHlwZSBscywgY2h0eXBlIHJzLFxmUgorICAgXGZCY2h0eXBlIHRzLCBjaHR5cGUgYnMsIGNodHlwZSB0bCwgY2h0eXBlIHRyLFxmUgorICAgXGZCY2h0eXBlIGJsLCBjaHR5cGUgYnIpO1xmUgorLmJyCitcZkJpbnQgYm94KFdJTkRPVyAqd2luLCBjaHR5cGUgdmVyY2gsIGNodHlwZSBob3JjaCk7XGZSCisuYnIKK1xmQmludCBobGluZShjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHdobGluZShXSU5ET1cgKndpbiwgY2h0eXBlIGNoLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCB2bGluZShjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHd2bGluZShXSU5ET1cgKndpbiwgY2h0eXBlIGNoLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdmhsaW5lKGludCB5LCBpbnQgeCwgY2h0eXBlIGNoLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdndobGluZShXSU5ET1cgKiwgaW50IHksIGludCB4LCBjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12dmxpbmUoaW50IHksIGludCB4LCBjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12d3ZsaW5lKFdJTkRPVyAqLCBpbnQgeSwgaW50IHgsIGNodHlwZSBjaCwgaW50IG4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJib3JkZXJcZlIsIFxmQndib3JkZXJcZlIgYW5kIFxmQmJveFxmUiByb3V0aW5lcworZHJhdyBhIGJveCBhcm91bmQgdGhlIGVkZ2VzIG9mIGEgd2luZG93LgorT3RoZXIgdGhhbiB0aGUgd2luZG93LCBlYWNoIGFyZ3VtZW50IGlzIGEgY2hhcmFjdGVyIHdpdGggYXR0cmlidXRlczoKKy5zcAorLlJTCitcZklsc1xmUiAtIGxlZnQgc2lkZSwKKy5icgorXGZJcnNcZlIgLSByaWdodCBzaWRlLAorLmJyCitcZkl0c1xmUiAtIHRvcCBzaWRlLAorLmJyCitcZklic1xmUiAtIGJvdHRvbSBzaWRlLAorLmJyCitcZkl0bFxmUiAtIHRvcCBsZWZ0LWhhbmQgY29ybmVyLAorLmJyCitcZkl0clxmUiAtIHRvcCByaWdodC1oYW5kIGNvcm5lciwKKy5icgorXGZJYmxcZlIgLSBib3R0b20gbGVmdC1oYW5kIGNvcm5lciwgYW5kCisuYnIKK1xmSWJyXGZSIC0gYm90dG9tIHJpZ2h0LWhhbmQgY29ybmVyLgorLlJFCisuUFAKK0lmIGFueSBvZiB0aGVzZSBhcmd1bWVudHMgaXMgemVybywgdGhlbiB0aGUgY29ycmVzcG9uZGluZworZGVmYXVsdCB2YWx1ZXMgKGRlZmluZWQgaW4gXGZCY3Vyc2VzLmhcZlIpIGFyZSB1c2VkIGluc3RlYWQ6Cisuc3AKKy5SUworXGZCQUNTX1ZMSU5FXGZSLAorLmJyCitcZkJBQ1NfVkxJTkVcZlIsCisuYnIKK1xmQkFDU19ITElORVxmUiwKKy5icgorXGZCQUNTX0hMSU5FXGZSLAorLmJyCitcZkJBQ1NfVUxDT1JORVJcZlIsCisuYnIKK1xmQkFDU19VUkNPUk5FUlxmUiwKKy5icgorXGZCQUNTX0xMQ09STkVSXGZSLAorLmJyCitcZkJBQ1NfTFJDT1JORVJcZlIuCisuUkUKKy5QUAorXGZCYm94KFxmUlxmSXdpblxmUlxmQiwgXGZSXGZJdmVyY2hcZlJcZkIsIFxmUlxmSWhvcmNoXGZSXGZCKVxmUiBpcyBhIHNob3J0aGFuZAorZm9yIHRoZSBmb2xsb3dpbmcgY2FsbDogXGZCd2JvcmRlcihcZlJcZkl3aW5cZlJcZkIsXGZSIFxmSXZlcmNoXGZSXGZCLFxmUgorXGZJdmVyY2hcZlJcZkIsXGZSIFxmSWhvcmNoXGZSXGZCLFxmUiBcZklob3JjaFxmUlxmQiwgMCwgMCwgMCwgMClcZlIuCisuUFAKK1RoZSBcZkJobGluZVxmUiBhbmQgXGZCd2hsaW5lXGZSIGZ1bmN0aW9ucyBkcmF3IGEgaG9yaXpvbnRhbCAobGVmdCB0byByaWdodCkKK2xpbmUgdXNpbmcgXGZJY2hcZlIgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB3aW5kb3cuICBUaGUKK2N1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLiAgVGhlIGxpbmUgaXMgYXQgbW9zdCBcZkluXGZSIGNoYXJhY3RlcnMKK2xvbmcsIG9yIGFzIG1hbnkgYXMgZml0IGludG8gdGhlIHdpbmRvdy4KKy5QUAorVGhlIFxmQnZsaW5lXGZSIGFuZCBcZkJ3dmxpbmVcZlIgZnVuY3Rpb25zIGRyYXcgYSB2ZXJ0aWNhbCAodG9wIHRvIGJvdHRvbSkgbGluZQordXNpbmcgXGZJY2hcZlIgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB3aW5kb3cuICBUaGUKK2N1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLiAgVGhlIGxpbmUgaXMgYXQgbW9zdCBcZkluXGZSIGNoYXJhY3RlcnMKK2xvbmcsIG9yIGFzIG1hbnkgYXMgZml0IGludG8gdGhlIHdpbmRvdy4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCT0tcZlIuICBUaGUgU1ZyNC4wIG1hbnVhbCBzYXlzICJvciBhCitub24tbmVnYXRpdmUgaW50ZWdlciBpZiBcZkJpbW1lZG9rXGZSIGlzIHNldCIsIGJ1dCB0aGlzIGFwcGVhcnMgdG8gYmUgYW4gZXJyb3IuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorLlNIIE5PVEVTCitUaGUgYm9yZGVycyBnZW5lcmF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zIGFyZSBcZklpbnNpZGVcZlIgYm9yZGVycyAodGhpcworaXMgYWxzbyB0cnVlIG9mIFNWcjQgY3Vyc2VzLCB0aG91Z2ggdGhlIGZhY3QgaXMgbm90IGRvY3VtZW50ZWQpLgorLlBQCitOb3RlIHRoYXQgXGZCYm9yZGVyXGZSIGFuZCBcZkJib3hcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCitUaGUgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gXGZCRVJSXGZSIG9uIGZhaWx1cmUsCitidXQgc3BlY2lmaWVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfb3V0b3B0c1xmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2JvcmRlcl9zZXQuM3ggYi9tYW4vY3Vyc19ib3JkZXJfc2V0LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjg2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19ib3JkZXJfc2V0LjN4CkBAIC0wLDAgKzEsMjA3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYm9yZGVyX3NldC4zeCx2IDEuNiAyMDA1LzA1LzE1IDE2OjE3OjM3IHRvbSBFeHAgJAorLlRIIGN1cnNfYm9yZGVyX3NldCAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmJvcmRlcl9zZXRcZlIsCitcZkJ3Ym9yZGVyX3NldFxmUiwKK1xmQmJveF9zZXRcZlIsCitcZkJobGluZV9zZXRcZlIsCitcZkJ3aGxpbmVfc2V0XGZSLAorXGZCbXZobGluZV9zZXRcZlIsCitcZkJtdndobGluZV9zZXRcZlIsCitcZkJ2bGluZV9zZXRcZlIsCitcZkJ3dmxpbmVfc2V0XGZSLAorXGZCbXZ2bGluZV9zZXRcZlIsCitcZkJtdnd2bGluZV9zZXRcZlIgXC0gY3JlYXRlIFxmQmN1cnNlc1xmUiBib3JkZXJzIG9yIGxpbmVzIHVzaW5nIGNvbXBsZXggY2hhcmFjdGVycyBhbmQgcmVuZGl0aW9ucworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworLlBQCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBib3JkZXJfc2V0KFxmUgorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJbHNcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXJzXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJdHNcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWJzXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJdGxcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXRyXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJYmxcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWJyXGZSCitcZkIpO1xmUgorLmJyCitcZkJpbnQgd2JvcmRlcl9zZXQoXGZSCisgICBcZkJXSU5ET1cgKndpblxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWxzXGZSLCBcZkJjb25zdCBjY2hhcl90ICpcZlJcZklyc1xmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXRzXGZSLCBcZkJjb25zdCBjY2hhcl90ICpcZlJcZklic1xmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXRsXGZSLCBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl0clxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWJsXGZSLCBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkliclxmUlxmQik7XGZSCisuYnIKK1xmQmludCBib3hfc2V0KFxmUgorICAgXGZCV0lORE9XICp3aW5cZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl2ZXJjaFxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWhvcmNoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGhsaW5lX3NldChcZlIKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiwgXGZCaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2hsaW5lX3NldChcZlIKKyAgIFxmQldJTkRPVyAqXGZSXGZJd2luXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSLCBcZkJpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmhsaW5lX3NldChcZlIKKyAgIFxmQmludCBcZlJcZkl5XGZSLCBcZkJpbnQgXGZSXGZJeFxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiwgXGZCaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aGxpbmVfc2V0KFxmUgorICAgXGZCV0lORE9XICpcZlJcZkl3aW5cZlIsCisgICBcZkJpbnQgXGZSXGZJeVxmUiwgXGZCaW50IFxmUlxmSXhcZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlIsIFxmQmludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHZsaW5lX3NldChcZlIKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiwgXGZCaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd3ZsaW5lX3NldChcZlIKKyAgIFxmQldJTkRPVyAqXGZSXGZJd2luXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSLCBcZkJpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdnZsaW5lX3NldChcZlIKKyAgIFxmQmludCBcZlJcZkl5XGZSLCBcZkJpbnQgXGZSXGZJeFxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiwgXGZCaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3dmxpbmVfc2V0KFxmUgorICAgXGZCV0lORE9XICpcZlJcZkl3aW5cZlIsCisgICBcZkJpbnQgXGZSXGZJeVxmUiwgXGZCaW50IFxmUlxmSXhcZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlIsIFxmQmludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCisuUFAKK1RoZQorXGZCYm9yZGVyX3NldFxmUgorYW5kCitcZkJ3Ym9yZGVyX3NldFxmUgorZnVuY3Rpb25zIGRyYXcgYSBib3JkZXIgYXJvdW5kIHRoZSBlZGdlcyBvZiB0aGUgY3VycmVudCBvciBzcGVjaWZpZWQgd2luZG93LgorVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnNvciBwb3NpdGlvbiwgYW5kIGRvIG5vdCB3cmFwLgorLlBQCitPdGhlciB0aGFuIHRoZSB3aW5kb3csIGVhY2ggYXJndW1lbnQgaXMgYSBjb21wbGV4IGNoYXJhY3RlciB3aXRoIGF0dHJpYnV0ZXM6CisuUlMKK1xmSWxzXGZSIC0gbGVmdCBzaWRlLAorLmJyCitcZklyc1xmUiAtIHJpZ2h0IHNpZGUsCisuYnIKK1xmSXRzXGZSIC0gdG9wIHNpZGUsCisuYnIKK1xmSWJzXGZSIC0gYm90dG9tIHNpZGUsCisuYnIKK1xmSXRsXGZSIC0gdG9wIGxlZnQtaGFuZCBjb3JuZXIsCisuYnIKK1xmSXRyXGZSIC0gdG9wIHJpZ2h0LWhhbmQgY29ybmVyLAorLmJyCitcZklibFxmUiAtIGJvdHRvbSBsZWZ0LWhhbmQgY29ybmVyLCBhbmQKKy5icgorXGZJYnJcZlIgLSBib3R0b20gcmlnaHQtaGFuZCBjb3JuZXIuCisuUkUKKy5QUAorSWYgYW55IG9mIHRoZXNlIGFyZ3VtZW50cyBpcyB6ZXJvLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nCitkZWZhdWx0IHZhbHVlcyAoZGVmaW5lZCBpbiBcZkJjdXJzZXMuaFxmUikgYXJlIHVzZWQgaW5zdGVhZDoKKy5SUworXGZCV0FDU19WTElORVxmUiwKKy5icgorXGZCV0FDU19WTElORVxmUiwKKy5icgorXGZCV0FDU19ITElORVxmUiwKKy5icgorXGZCV0FDU19ITElORVxmUiwKKy5icgorXGZCV0FDU19VTENPUk5FUlxmUiwKKy5icgorXGZCV0FDU19VUkNPUk5FUlxmUiwKKy5icgorXGZCV0FDU19MTENPUk5FUlxmUiwgYW5kCisuYnIKK1xmQldBQ1NfTFJDT1JORVJcZlIuCisuUkUKKy5QUAorXGZCYm94X3NldChcZlJcZkl3aW5cZlIsIFxmSXZlcmNoXGZSXGZCLCBcZlJcZklob3JjaFxmUlxmQik7XGZSCitpcyBhIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZyBjYWxsOgorLlBQCitcZkJ3Ym9yZGVyX3NldChcZlJcZkl3aW5cZlJcZkIsIFxmUlxmSXZlcmNoXGZSXGZCLCBcZlJcZkl2ZXJjaFxmUlxmQixcZlIKKyAgICBcZklob3JjaFxmUlxmQiwgXGZSXGZJaG9yY2hcZlJcZkIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpO1xmUgorLlBQCitUaGUKK1xmQipsaW5lX3NldFxmUgorZnVuY3Rpb25zIHVzZQorXGZJd2NoXGZSCit0byBkcmF3IGEgbGluZSBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHdpbmRvdy4KK1RoZSBsaW5lIGlzIGF0IG1vc3QgXGZJblxmUiBjaGFyYWN0ZXJzIGxvbmcgb3IgYXMgbWFueSBhcyBmaXQgaW50byB0aGUgd2luZG93LgorVGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLgorLlBQCitUaGUKK1xmQmhsaW5lX3NldFxmUiwKK1xmQm12aGxpbmVfc2V0XGZSLAorXGZCbXZ3aGxpbmVfc2V0XGZSLCBhbmQKK1xmQndobGluZV9zZXRcZlIKK2Z1bmN0aW9ucyBkcmF3IGEgbGluZSBwcm9jZWVkaW5nIHRvd2FyZCB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHNhbWUgbGluZS4KKy5QUAorVGhlCitcZkJ2bGluZV9zZXRcZlIsCitcZkJtdnZsaW5lX3NldFxmUiwKK1xmQm12d3ZsaW5lX3NldFxmUiwgYW5kCitcZkJ3dmxpbmVfc2V0XGZSCitmdW5jdGlvbnMgZHJhdyBhIGxpbmUgcHJvY2VlZGluZyB0b3dhcmQgdGhlIGxhc3QgbGluZSBvZiB0aGUgd2luZG93LgorLmJyCisuU0ggTk9URVMKKy5QUAorTm90ZSB0aGF0CitcZkJib3JkZXJfc2V0XGZSLAorXGZCaGxpbmVfc2V0XGZSLAorXGZCbXZobGluZV9zZXRcZlIsCitcZkJtdnZsaW5lX3NldFxmUiwKK1xmQm12d2hsaW5lX3NldFxmUiwKK1xmQm12d3ZsaW5lX3NldFxmUiwgYW5kCitcZkJ2bGluZV9zZXRcZlIKK21heSBiZSBtYWNyb3MuCisuYnIKKy5TSCBSRVRVUk4gVkFMVUVTCisuUFAKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuCitcZkJPS1xmUi4KK090aGVyd2lzZSwgdGhleSByZXR1cm4KK1xmQkVSUlxmUi4KKy5QUAorRnVuY3Rpb25zIHVzaW5nIGEgd2luZG93IHBhcmFtZXRlciByZXR1cm4gYW4gZXJyb3IgaWYgaXQgaXMgbnVsbC4KKy5TSCBTRUUgQUxTTworXGZCbmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2JvcmRlclxmUigzWCksCitcZkJjdXJzX291dG9wdHNcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2NsZWFyLjN4IGIvbWFuL2N1cnNfY2xlYXIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZmQyYwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2NsZWFyLjN4CkBAIC0wLDAgKzEsMTIxIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfY2xlYXIuM3gsdiAxLjExIDIwMDcvMTIvMjkgMTU6NTg6MzggdG9tIEV4cCAkCisuVEggY3Vyc19jbGVhciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmVyYXNlXGZSLAorXGZCd2VyYXNlXGZSLAorXGZCY2xlYXJcZlIsCitcZkJ3Y2xlYXJcZlIsCitcZkJjbHJ0b2JvdFxmUiwKK1xmQndjbHJ0b2JvdFxmUiwKK1xmQmNscnRvZW9sXGZSLAorXGZCd2NscnRvZW9sXGZSIC0gY2xlYXIgYWxsIG9yIHBhcnQgb2YgYSBcZkJjdXJzZXNcZlIgd2luZG93CisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjIGluY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgZXJhc2Uodm9pZCk7XGZSCisuYnIKK1xmQmludCB3ZXJhc2UoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgY2xlYXIodm9pZCk7XGZSCisuYnIKK1xmQmludCB3Y2xlYXIoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgY2xydG9ib3Qodm9pZCk7XGZSCisuYnIKK1xmQmludCB3Y2xydG9ib3QoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgY2xydG9lb2wodm9pZCk7XGZSCisuYnIKK1xmQmludCB3Y2xydG9lb2woV0lORE9XICp3aW4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJlcmFzZVxmUiBhbmQgXGZCd2VyYXNlXGZSIHJvdXRpbmVzIGNvcHkgYmxhbmtzIHRvIGV2ZXJ5Citwb3NpdGlvbiBpbiB0aGUgd2luZG93LCBjbGVhcmluZyB0aGUgc2NyZWVuLgorLlBQCitUaGUgXGZCY2xlYXJcZlIgYW5kIFxmQndjbGVhclxmUiByb3V0aW5lcyBhcmUgbGlrZSBcZkJlcmFzZVxmUiBhbmQKK1xmQndlcmFzZVxmUiwgYnV0IHRoZXkgYWxzbyBjYWxsIFxmQmNsZWFyb2tcZlIsIHNvIHRoYXQgdGhlIHNjcmVlbiBpcworY2xlYXJlZCBjb21wbGV0ZWx5IG9uIHRoZSBuZXh0IGNhbGwgdG8gXGZCd3JlZnJlc2hcZlIgZm9yIHRoYXQgd2luZG93CithbmQgcmVwYWludGVkIGZyb20gc2NyYXRjaC4KKy5QUAorVGhlIFxmQmNscnRvYm90XGZSIGFuZCBcZkJ3Y2xydG9ib3RcZlIgcm91dGluZXMgZXJhc2UgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZQorZW5kIG9mIHNjcmVlbi4gIFRoYXQgaXMsIHRoZXkgZXJhc2UgYWxsIGxpbmVzIGJlbG93IHRoZSBjdXJzb3IgaW4gdGhlIHdpbmRvdy4KK0Fsc28sIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IsIGluY2x1c2l2ZSwgaXMgZXJhc2VkLgorLlBQCitUaGUgXGZCY2xydG9lb2xcZlIgYW5kIFxmQndjbHJ0b2VvbFxmUiByb3V0aW5lcyBlcmFzZSB0aGUgY3VycmVudCBsaW5lCit0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciwgaW5jbHVzaXZlLCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuCisuUFAKK0JsYW5rcyBjcmVhdGVkIGJ5IGVyYXN1cmUgaGF2ZSB0aGUgY3VycmVudCBiYWNrZ3JvdW5kIHJlbmRpdGlvbiAoYXMgc2V0CitieSBcZkJ3YmtnZHNldFxmUikgbWVyZ2VkIGludG8gdGhlbS4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCT0tcZlIgb24gc3VjY2VzcyBhbmQgXGZCRVJSXGZQIG9uIGZhaWx1cmUuCitUaGUgU1ZyNC4wIG1hbnVhbCBzYXlzICJvciBhCitub24tbmVnYXRpdmUgaW50ZWdlciBpZiBcZkJpbW1lZG9rXGZSIGlzIHNldCIsIGJ1dCB0aGlzIGFwcGVhcnMgdG8gYmUgYW4gZXJyb3IuCisuUFAKK1gvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLAorZnVuY3Rpb25zIHVzaW5nIGEgd2luZG93IHBvaW50ZXIgcGFyYW1ldGVyIHJldHVybiBhbiBlcnJvciBpZiBpdCBpcyBudWxsLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCZXJhc2VcZlIsIFxmQndlcmFzZVxmUiwgXGZCY2xlYXJcZlIsIFxmQndjbGVhclxmUiwKK1xmQmNscnRvYm90XGZSLCBhbmQgXGZCY2xydG9lb2xcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuICBUaGUKK3N0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuIFxmQkVSUlxmUiBvbiBmYWlsdXJlLCBidXQgc3BlY2lmaWVzIG5vCitlcnJvciBjb25kaXRpb25zLgorLlBQCitTb21lIGhpc3RvcmljIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgaGFkLCBhcyBhbiB1bmRvY3VtZW50ZWQgZmVhdHVyZSwgdGhlCithYmlsaXR5IHRvIGRvIHRoZSBlcXVpdmFsZW50IG9mIFxmQmNsZWFyb2soLi4uLCAxKVxmUiBieSBzYXlpbmcKK1xmQnRvdWNod2luKHN0ZHNjcilcZlIgb3IgXGZCY2xlYXIoc3Rkc2NyKVxmUi4gIFRoaXMgd2lsbCBub3Qgd29yayB1bmRlcgorbmN1cnNlcy4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiwgYW5kIG90aGVycyBzdWNoIGFzIFNvbGFyaXMsCitzZXRzIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIDAsMCBhZnRlciBlcmFzaW5nCit2aWEgXGZCd2VyYXNlKClcZlAgYW5kIFxmQndjbGVhcigpXGZQLgorVGhhdCBmYWN0IGlzIG5vdCBkb2N1bWVudGVkIGluIG90aGVyIGltcGxlbWVudGF0aW9ucywKK2FuZCBtYXkgbm90IGJlIHRydWUgb2YgaW1wbGVtZW50YXRpb25zCit3aGljaCB3ZXJlIG5vdCBkZXJpdmVkIGZyb20gU1ZyNCBzb3VyY2UuCisuUFAKK05vdCBvYnZpb3VzIGZyb20gdGhlIGRlc2NyaXB0aW9uLAorbW9zdCBpbXBsZW1lbnRhdGlvbnMgY2xlYXIgdGhlIHNjcmVlbiBhZnRlciBcZkJ3Y2xlYXJcZlAKK2V2ZW4gZm9yIGEgc3Vid2luZG93IG9yIGRlcml2ZWQgd2luZG93LgorSWYgeW91IGRvIG5vdCB3YW50IHRvIGNsZWFyIHRoZSBzY3JlZW4gZHVyaW5nIHRoZSBuZXh0IFxmQndyZWZyZXNoXGZQLAordXNlIFxmQndlcmFzZVxmUCBpbnN0ZWFkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX291dG9wdHNcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2NvbG9yLjN4IGIvbWFuL2N1cnNfY29sb3IuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllNjNlZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2NvbG9yLjN4CkBAIC0wLDAgKzEsMjQ4IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfY29sb3IuM3gsdiAxLjI4IDIwMDUvMTIvMTggMDA6MDA6MzcgdG9tIEV4cCAkCisuVEggY3Vyc19jb2xvciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQnN0YXJ0X2NvbG9yXGZSLAorXGZCaW5pdF9wYWlyXGZSLAorXGZCaW5pdF9jb2xvclxmUiwKK1xmQmhhc19jb2xvcnNcZlIsCitcZkJjYW5fY2hhbmdlX2NvbG9yXGZSLAorXGZCY29sb3JfY29udGVudFxmUiwKK1xmQnBhaXJfY29udGVudFxmUiwKK1xmQkNPTE9SX1BBSVJcZlIgLSBcZkJjdXJzZXNcZlIgY29sb3IgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjIGluY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCitcZkJpbnQgc3RhcnRfY29sb3Iodm9pZCk7XGZSCisuYnIKK1xmQmludCBpbml0X3BhaXIoc2hvcnQgcGFpciwgc2hvcnQgZiwgc2hvcnQgYik7XGZSCisuYnIKK1xmQmludCBpbml0X2NvbG9yKHNob3J0IGNvbG9yLCBzaG9ydCByLCBzaG9ydCBnLCBzaG9ydCBiKTtcZlIKKy5icgorXGZCYm9vbCBoYXNfY29sb3JzKHZvaWQpO1xmUgorLmJyCitcZkJib29sIGNhbl9jaGFuZ2VfY29sb3Iodm9pZCk7XGZSCisuYnIKK1xmQmludCBjb2xvcl9jb250ZW50KHNob3J0IGNvbG9yLCBzaG9ydCAqciwgc2hvcnQgKmcsIHNob3J0ICpiKTtcZlIKKy5icgorXGZCaW50IHBhaXJfY29udGVudChzaG9ydCBwYWlyLCBzaG9ydCAqZiwgc2hvcnQgKmIpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KKy5TUyBPdmVydmlldworXGZCY3Vyc2VzXGZSIHN1cHBvcnQgY29sb3IgYXR0cmlidXRlcyBvbiB0ZXJtaW5hbHMgd2l0aCB0aGF0IGNhcGFiaWxpdHkuICBUbwordXNlIHRoZXNlIHJvdXRpbmVzIFxmQnN0YXJ0X2NvbG9yXGZSIG11c3QgYmUgY2FsbGVkLCB1c3VhbGx5IHJpZ2h0IGFmdGVyCitcZkJpbml0c2NyXGZSLiAgQ29sb3JzIGFyZSBhbHdheXMgdXNlZCBpbiBwYWlycyAocmVmZXJyZWQgdG8gYXMgY29sb3ItcGFpcnMpLgorQSBjb2xvci1wYWlyIGNvbnNpc3RzIG9mIGEgZm9yZWdyb3VuZCBjb2xvciAoZm9yIGNoYXJhY3RlcnMpIGFuZCBhIGJhY2tncm91bmQKK2NvbG9yIChmb3IgdGhlIGJsYW5rIGZpZWxkIG9uIHdoaWNoIHRoZSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQpLiAgQQorcHJvZ3JhbW1lciBpbml0aWFsaXplcyBhIGNvbG9yLXBhaXIgd2l0aCB0aGUgcm91dGluZSBcZkJpbml0X3BhaXJcZlIuICBBZnRlciBpdAoraGFzIGJlZW4gaW5pdGlhbGl6ZWQsIFxmQkNPTE9SX1BBSVJcZlIoXGZJblxmUiksIGEgbWFjcm8gZGVmaW5lZCBpbgorXGZCPGN1cnNlcy5oPlxmUiwgY2FuIGJlIHVzZWQgYXMgYSBuZXcgdmlkZW8gYXR0cmlidXRlLgorLlBQCitJZiBhIHRlcm1pbmFsIGlzIGNhcGFibGUgb2YgcmVkZWZpbmluZyBjb2xvcnMsIHRoZSBwcm9ncmFtbWVyIGNhbiB1c2UgdGhlCityb3V0aW5lIFxmQmluaXRfY29sb3JcZlIgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIGEgY29sb3IuICBUaGUgcm91dGluZXMKK1xmQmhhc19jb2xvcnNcZlIgYW5kIFxmQmNhbl9jaGFuZ2VfY29sb3JcZlIgcmV0dXJuIFxmQlRSVUVcZlIgb3IgXGZCRkFMU0VcZlIsCitkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdGVybWluYWwgaGFzIGNvbG9yIGNhcGFiaWxpdGllcyBhbmQgd2hldGhlciB0aGUKK3Byb2dyYW1tZXIgY2FuIGNoYW5nZSB0aGUgY29sb3JzLiAgVGhlIHJvdXRpbmUgXGZCY29sb3JfY29udGVudFxmUiBhbGxvd3MgYQorcHJvZ3JhbW1lciB0byBleHRyYWN0IHRoZSBhbW91bnRzIG9mIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gYW4KK2luaXRpYWxpemVkIGNvbG9yLiAgVGhlIHJvdXRpbmUgXGZCcGFpcl9jb250ZW50XGZSIGFsbG93cyBhIHByb2dyYW1tZXIgdG8gZmluZAorb3V0IGhvdyBhIGdpdmVuIGNvbG9yLXBhaXIgaXMgY3VycmVudGx5IGRlZmluZWQuCisuU1MgUm91dGluZSBEZXNjcmlwdGlvbnMKK1RoZSBcZkJzdGFydF9jb2xvclxmUiByb3V0aW5lIHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEl0IG11c3QgYmUKK2NhbGxlZCBpZiB0aGUgcHJvZ3JhbW1lciB3YW50cyB0byB1c2UgY29sb3JzLCBhbmQgYmVmb3JlIGFueSBvdGhlcgorY29sb3IgbWFuaXB1bGF0aW9uIHJvdXRpbmUgaXMgY2FsbGVkLiAgSXQgaXMgZ29vZCBwcmFjdGljZSB0byBjYWxsCit0aGlzIHJvdXRpbmUgcmlnaHQgYWZ0ZXIgXGZCaW5pdHNjclxmUi4gIFxmQnN0YXJ0X2NvbG9yXGZSIGluaXRpYWxpemVzCitlaWdodCBiYXNpYyBjb2xvcnMgKGJsYWNrLCByZWQsIGdyZWVuLCB5ZWxsb3csIGJsdWUsIG1hZ2VudGEsIGN5YW4sCithbmQgd2hpdGUpLCBhbmQgdHdvIGdsb2JhbCB2YXJpYWJsZXMsIFxmQkNPTE9SU1xmUiBhbmQKK1xmQkNPTE9SX1BBSVJTXGZSIChyZXNwZWN0aXZlbHkgZGVmaW5pbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9ycworYW5kIGNvbG9yLXBhaXJzIHRoZSB0ZXJtaW5hbCBjYW4gc3VwcG9ydCkuICBJdCBhbHNvIHJlc3RvcmVzIHRoZQorY29sb3JzIG9uIHRoZSB0ZXJtaW5hbCB0byB0aGUgdmFsdWVzIHRoZXkgaGFkIHdoZW4gdGhlIHRlcm1pbmFsIHdhcworanVzdCB0dXJuZWQgb24uCisuUFAKK1RoZSBcZkJpbml0X3BhaXJcZlIgcm91dGluZSBjaGFuZ2VzIHRoZSBkZWZpbml0aW9uIG9mIGEgY29sb3ItcGFpci4gIEl0IHRha2VzCit0aHJlZSBhcmd1bWVudHM6IHRoZSBudW1iZXIgb2YgdGhlIGNvbG9yLXBhaXIgdG8gYmUgY2hhbmdlZCwgdGhlIGZvcmVncm91bmQKK2NvbG9yIG51bWJlciwgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG51bWJlci4KK0ZvciBwb3J0YWJsZSBhcHBsaWNhdGlvbnM6CisuVFAgNQorLQorVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudAorbXVzdCBiZSBiZXR3ZWVuIFxmQjFcZlIgYW5kIFxmQkNPTE9SX1BBSVJTLTFcZlIuCisuVFAgNQorLQorVGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgYW5kCit0aGlyZCBhcmd1bWVudHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIFxmQkNPTE9SU1xmUi4KK0NvbG9yIHBhaXIgMCBpcyBhc3N1bWVkIHRvIGJlIHdoaXRlIG9uIGJsYWNrLAorYnV0IGlzIGFjdHVhbGx5IHdoYXRldmVyIHRoZSB0ZXJtaW5hbCBpbXBsZW1lbnRzIGJlZm9yZSBjb2xvciBpcyBpbml0aWFsaXplZC4KK0l0IGNhbm5vdCBiZSBtb2RpZmllZCBieSB0aGUgYXBwbGljYXRpb24uCisuUFAKK0lmIHRoZSBjb2xvci1wYWlyIHdhcyBwcmV2aW91c2x5Citpbml0aWFsaXplZCwgdGhlIHNjcmVlbiBpcyByZWZyZXNoZWQgYW5kIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0IGNvbG9yLXBhaXIKK2FyZSBjaGFuZ2VkIHRvIHRoZSBuZXcgZGVmaW5pdGlvbi4KKy5QUAorQXMgYW4gZXh0ZW5zaW9uLCBuY3Vyc2VzIGFsbG93cyB5b3UgdG8gc2V0IGNvbG9yIHBhaXIgMCB2aWEKK3RoZSBcZkJhc3N1bWVfZGVmYXVsdF9jb2xvcnNcZlIgcm91dGluZSwgb3IgdG8gc3BlY2lmeSB0aGUgdXNlIG9mCitkZWZhdWx0IGNvbG9ycyAoY29sb3IgbnVtYmVyIFxmQi0xXGZSKSBpZiB5b3UgZmlyc3QgaW52b2tlIHRoZQorXGZCdXNlX2RlZmF1bHRfY29sb3JzXGZSIHJvdXRpbmUuCisuUFAKK1RoZSBcZkJpbml0X2NvbG9yXGZSIHJvdXRpbmUgY2hhbmdlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIGNvbG9yLiAgSXQgdGFrZXMgZm91cgorYXJndW1lbnRzOiB0aGUgbnVtYmVyIG9mIHRoZSBjb2xvciB0byBiZSBjaGFuZ2VkIGZvbGxvd2VkIGJ5IHRocmVlIFJHQiB2YWx1ZXMKKyhmb3IgdGhlIGFtb3VudHMgb2YgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cykuICBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0Cithcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gXGZCMFxmUiBhbmQgXGZCQ09MT1JTXGZSLiAgKFNlZSB0aGUgc2VjdGlvbgorXGZCQ29sb3JzXGZSIGZvciB0aGUgZGVmYXVsdCBjb2xvciBpbmRleC4pICBFYWNoIG9mIHRoZSBsYXN0IHRocmVlIGFyZ3VtZW50cworbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwMC4gIFdoZW4gXGZCaW5pdF9jb2xvclxmUiBpcyB1c2VkLCBhbGwKK29jY3VycmVuY2VzIG9mIHRoYXQgY29sb3Igb24gdGhlIHNjcmVlbiBpbW1lZGlhdGVseSBjaGFuZ2UgdG8gdGhlIG5ldworZGVmaW5pdGlvbi4KKy5QUAorVGhlIFxmQmhhc19jb2xvcnNcZlIgcm91dGluZSByZXF1aXJlcyBubyBhcmd1bWVudHMuICBJdCByZXR1cm5zIFxmQlRSVUVcZlIgaWYKK3RoZSB0ZXJtaW5hbCBjYW4gbWFuaXB1bGF0ZSBjb2xvcnM7IG90aGVyd2lzZSwgaXQgcmV0dXJucyBcZkJGQUxTRVxmUi4gIFRoaXMKK3JvdXRpbmUgZmFjaWxpdGF0ZXMgd3JpdGluZyB0ZXJtaW5hbC1pbmRlcGVuZGVudCBwcm9ncmFtcy4gIEZvciBleGFtcGxlLCBhCitwcm9ncmFtbWVyIGNhbiB1c2UgaXQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gdXNlIGNvbG9yIG9yIHNvbWUgb3RoZXIgdmlkZW8KK2F0dHJpYnV0ZS4KKy5QUAorVGhlIFxmQmNhbl9jaGFuZ2VfY29sb3JcZlIgcm91dGluZSByZXF1aXJlcyBubyBhcmd1bWVudHMuICBJdCByZXR1cm5zCitcZkJUUlVFXGZSIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBjb2xvcnMgYW5kIGNhbiBjaGFuZ2UgdGhlaXIgZGVmaW5pdGlvbnM7CitvdGhlciwgaXQgcmV0dXJucyBcZkJGQUxTRVxmUi4gIFRoaXMgcm91dGluZSBmYWNpbGl0YXRlcyB3cml0aW5nCit0ZXJtaW5hbC1pbmRlcGVuZGVudCBwcm9ncmFtcy4KKy5QUAorVGhlIFxmQmNvbG9yX2NvbnRlbnRcZlIgcm91dGluZSBnaXZlcyBwcm9ncmFtbWVycyBhIHdheSB0byBmaW5kIHRoZSBpbnRlbnNpdHkKK29mIHRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSAoUkdCKSBjb21wb25lbnRzIGluIGEgY29sb3IuICBJdCByZXF1aXJlcyBmb3VyCithcmd1bWVudHM6IHRoZSBjb2xvciBudW1iZXIsIGFuZCB0aHJlZSBhZGRyZXNzZXMgb2YgXGZCc2hvcnRcZlJzIGZvciBzdG9yaW5nCit0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFtb3VudHMgb2YgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUKK2dpdmVuIGNvbG9yLiAgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQKK1xmQkNPTE9SU1xmUi4gIFRoZSB2YWx1ZXMgdGhhdCBhcmUgc3RvcmVkIGF0IHRoZSBhZGRyZXNzZXMgcG9pbnRlZCB0byBieSB0aGUKK2xhc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBiZXR3ZWVuIDAgKG5vIGNvbXBvbmVudCkgYW5kIDEwMDAgKG1heGltdW0gYW1vdW50IG9mCitjb21wb25lbnQpLgorLlBQCitUaGUgXGZCcGFpcl9jb250ZW50XGZSIHJvdXRpbmUgYWxsb3dzIHByb2dyYW1tZXJzIHRvIGZpbmQgb3V0IHdoYXQgY29sb3JzIGEKK2dpdmVuIGNvbG9yLXBhaXIgY29uc2lzdHMgb2YuICBJdCByZXF1aXJlcyB0aHJlZSBhcmd1bWVudHM6IHRoZSBjb2xvci1wYWlyCitudW1iZXIsIGFuZCB0d28gYWRkcmVzc2VzIG9mIFxmQnNob3J0XGZScyBmb3Igc3RvcmluZyB0aGUgZm9yZWdyb3VuZCBhbmQgdGhlCitiYWNrZ3JvdW5kIGNvbG9yIG51bWJlcnMuICBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAxCithbmQgXGZCQ09MT1JfUEFJUlMtMVxmUi4gIFRoZSB2YWx1ZXMgdGhhdCBhcmUgc3RvcmVkIGF0IHRoZSBhZGRyZXNzZXMgcG9pbnRlZAordG8gYnkgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIGFyZSBiZXR3ZWVuIDAgYW5kIFxmQkNPTE9SU1xmUi4KKy5TUyBDb2xvcnMKK0luIFxmQjxjdXJzZXMuaD5cZlIgdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGRlZmluZWQuICBUaGVzZSBhcmUgdGhlIGRlZmF1bHQKK2NvbG9ycy4gIFxmQmN1cnNlc1xmUiBhbHNvIGFzc3VtZXMgdGhhdCBcZkJDT0xPUl9CTEFDS1xmUiBpcyB0aGUgZGVmYXVsdAorYmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIHRlcm1pbmFscy4KKy5QUAorLm5mCisgICAgICBcZkJDT0xPUl9CTEFDS1xmUgorICAgICAgXGZCQ09MT1JfUkVEXGZSCisgICAgICBcZkJDT0xPUl9HUkVFTlxmUgorICAgICAgXGZCQ09MT1JfWUVMTE9XXGZSCisgICAgICBcZkJDT0xPUl9CTFVFXGZSCisgICAgICBcZkJDT0xPUl9NQUdFTlRBXGZSCisgICAgICBcZkJDT0xPUl9DWUFOXGZSCisgICAgICBcZkJDT0xPUl9XSElURVxmUgorLmZpCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgcm91dGluZXMgXGZCY2FuX2NoYW5nZV9jb2xvcigpXGZSIGFuZCBcZkJoYXNfY29sb3JzKClcZlIgcmV0dXJuIFxmQlRSVUVcZlIKK29yIFxmQkZBTFNFXGZSLgorLlBQCitBbGwgb3RoZXIgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIGFuIFxmQk9LXGZSCisoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gd2lsbCByZXR1cm4gXGZCRVJSXGZSIG9uIGF0dGVtcHRzIHRvCit1c2UgY29sb3IgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlIDAgdG8gQ09MT1JTLTEKKyhleGNlcHQgZm9yIHRoZSBkZWZhdWx0IGNvbG9ycyBleHRlbnNpb24pLAorb3IgdXNlIGNvbG9yIHBhaXJzIG91dHNpZGUgdGhlIHJhbmdlIDAgdG8gQ09MT1JfUEFJUi0xLgorQ29sb3IgdmFsdWVzIHVzZWQgaW4gXGZCaW5pdF9jb2xvclxmUCBtdXN0IGJlIGluIHRoZSByYW5nZSAwIHRvIDEwMDAuCitBbiBlcnJvciBpcyByZXR1cm5lZCBmcm9tIGFsbCBmdW5jdGlvbnMKK2lmIHRoZSB0ZXJtaW5hbCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCitBbiBlcnJvciBpcyByZXR1cm5lZCBmcm9tIHNlY29uZGFyeSBmdW5jdGlvbnMgc3VjaCBhcyBcZkJpbml0X3BhaXJcZlAKK2lmIFxmQnN0YXJ0X2NvbG9yXGZQIHdhcyBub3QgY2FsbGVkLgorLlJTCisuVFAgNQorXGZCaW5pdF9jb2xvclxmUAorcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydAordGhpcyBmZWF0dXJlLCBlLmcuLCBpZiB0aGUgXGZJaW5pdGlhbGl6ZV9jb2xvclxmUCBjYXBhYmlsaXR5IGlzIGFic2VudAorZnJvbSB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uCisuVFAgNQorXGZCc3RhcnRfY29sb3JcZlAKK3JldHVybnMgYW4gZXJyb3IKK0lmIHRoZSBjb2xvciB0YWJsZSBjYW5ub3QgYmUgYWxsb2NhdGVkLgorLlJFCisuU0ggTk9URVMKK0luIHRoZSBcZkluY3Vyc2VzXGZSIGltcGxlbWVudGF0aW9uLCB0aGVyZSBpcyBhIHNlcGFyYXRlIGNvbG9yIGFjdGl2YXRpb24gZmxhZywKK2NvbG9yIHBhbGV0dGUsIGNvbG9yIHBhaXJzIHRhYmxlLCBhbmQgYXNzb2NpYXRlZCBDT0xPUlMgYW5kIENPTE9SX1BBSVJTIGNvdW50cworZm9yIGVhY2ggc2NyZWVuOyB0aGUgXGZCc3RhcnRfY29sb3JcZlIgZnVuY3Rpb24gb25seSBhZmZlY3RzIHRoZSBjdXJyZW50CitzY3JlZW4uICBUaGUgU1ZyNC9YU0kgaW50ZXJmYWNlIGlzIG5vdCByZWFsbHkgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQsIGFuZAoraGlzdG9yaWNhbCBpbXBsZW1lbnRhdGlvbnMgbWF5IHVzZSBhIHNpbmdsZSBzaGFyZWQgY29sb3IgcGFsZXR0ZS4KKy5QUAorTm90ZSB0aGF0IHNldHRpbmcgYW4gaW1wbGljaXQgYmFja2dyb3VuZCBjb2xvciB2aWEgYSBjb2xvciBwYWlyIGFmZmVjdHMgb25seQorY2hhcmFjdGVyIGNlbGxzIHRoYXQgYSBjaGFyYWN0ZXIgd3JpdGUgb3BlcmF0aW9uIGV4cGxpY2l0bHkgdG91Y2hlcy4gIFRvIGNoYW5nZQordGhlIGJhY2tncm91bmQgY29sb3IgdXNlZCB3aGVuIHBhcnRzIG9mIGEgd2luZG93IGFyZSBibGFua2VkIGJ5IGVyYXNpbmcgb3IKK3Njcm9sbGluZyBvcGVyYXRpb25zLCBzZWUgXGZCY3Vyc19ia2dkXGZSKDNYKS4KKy5QUAorU2V2ZXJhbCBjYXZlYXRzIGFwcGx5IG9uIDM4NiBhbmQgNDg2IG1hY2hpbmVzIHdpdGggVkdBLWNvbXBhdGlibGUgZ3JhcGhpY3M6CisuVFAgNQorLQorQ09MT1JfWUVMTE9XIGlzIGFjdHVhbGx5IGJyb3duLiAgVG8gZ2V0IHllbGxvdywgdXNlIENPTE9SX1lFTExPVyBjb21iaW5lZCB3aXRoCit0aGUgXGZCQV9CT0xEXGZSIGF0dHJpYnV0ZS4KKy5UUCA1CistCitUaGUgQV9CTElOSyBhdHRyaWJ1dGUgc2hvdWxkIGluIHRoZW9yeSBjYXVzZSB0aGUgYmFja2dyb3VuZCB0byBnbyBicmlnaHQuICBUaGlzCitvZnRlbiBmYWlscyB0byB3b3JrLCBhbmQgZXZlbiBzb21lIGNhcmRzIGZvciB3aGljaCBpdCBtb3N0bHkgd29ya3MgKHN1Y2ggYXMgdGhlCitQYXJhZGlzZSBhbmQgY29tcGF0aWJsZXMpIGRvIHRoZSB3cm9uZyB0aGluZyB3aGVuIHlvdSB0cnkgdG8gc2V0IGEgYnJpZ2h0CisieWVsbG93IiBiYWNrZ3JvdW5kICh5b3UgZ2V0IGEgYmxpbmtpbmcgeWVsbG93IGZvcmVncm91bmQgaW5zdGVhZCkuCisuVFAgNQorLQorQ29sb3IgUkdCIHZhbHVlcyBhcmUgbm90IHNldHRhYmxlLgorLlNIIFBPUlRBQklMSVRZCitUaGlzIGltcGxlbWVudGF0aW9uIHNhdGlzZmllcyBYU0kgQ3Vyc2VzJ3MgbWluaW11bSBtYXhpbXVtcworZm9yIFxmQkNPTE9SU1xmUiBhbmQgXGZCQ09MT1JfUEFJUlNcZlIuCisuUFAKK1RoZSBcZkJpbml0X3BhaXJcZlAgcm91dGluZSBhY2NlcHRzIG5lZ2F0aXZlIHZhbHVlcyBvZiBmb3JlZ3JvdW5kCithbmQgYmFja2dyb3VuZCBjb2xvciB0byBzdXBwb3J0IHRoZSBcZkJ1c2VfZGVmYXVsdF9jb2xvcnNcZlAgZXh0ZW5zaW9uLAorYnV0IG9ubHkgaWYgdGhhdCByb3V0aW5lIGhhcyBiZWVuIGZpcnN0IGludm9rZWQuCisuUFAKK1RoZSBhc3N1bXB0aW9uIHRoYXQgXGZCQ09MT1JfQkxBQ0tcZlIgaXMgdGhlIGRlZmF1bHQKK2JhY2tncm91bmQgY29sb3IgZm9yIGFsbCB0ZXJtaW5hbHMgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoZQorXGZCYXNzdW1lX2RlZmF1bHRfY29sb3JzXGZQIGV4dGVuc2lvbi4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgdGhlIHBvaW50ZXJzLAorZS5nLiwgZm9yIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkKK1xmQmNvbG9yX2NvbnRlbnRcZlAgYW5kIFxmQnBhaXJfY29udGVudFxmUCwKK2FuZCB3aWxsIHRyZWF0IHRob3NlIGFzIG9wdGlvbmFsIHBhcmFtZXRlcnMgd2hlbiBudWxsLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwKK1xmQmN1cnNfYXR0clxmUigzWCksCitcZkJkZWZhdWx0X2NvbG9yc1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfZGVsY2guM3ggYi9tYW4vY3Vyc19kZWxjaC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI2NjY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfZGVsY2guM3gKQEAgLTAsMCArMSw3MCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2RlbGNoLjN4LHYgMS44IDIwMDYvMDIvMjUgMjE6NDI6NTcgdG9tIEV4cCAkCisuVEggY3Vyc19kZWxjaCAzWCAiIgorLlNIIE5BTUUKK1xmQmRlbGNoXGZSLAorXGZCd2RlbGNoXGZSLAorXGZCbXZkZWxjaFxmUiwKK1xmQm12d2RlbGNoXGZSIC0gZGVsZXRlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIGluIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBkZWxjaCh2b2lkKTtcZlIKKy5icgorXGZCaW50IHdkZWxjaChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBtdmRlbGNoKGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmludCBtdndkZWxjaChXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBkZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yOyBhbGwgY2hhcmFjdGVycyB0byB0aGUKK3JpZ2h0IG9mIHRoZSBjdXJzb3Igb24gdGhlIHNhbWUgbGluZSBhcmUgbW92ZWQgdG8gdGhlIGxlZnQgb25lIHBvc2l0aW9uIGFuZCB0aGUKK2xhc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGlzIGZpbGxlZCB3aXRoIGEgYmxhbmsuICBUaGUgY3Vyc29yIHBvc2l0aW9uIGRvZXMKK25vdCBjaGFuZ2UgKGFmdGVyIG1vdmluZyB0byBcZkl5XGZSLCBcZkl4XGZSLCBpZiBzcGVjaWZpZWQpLiAgKFRoaXMgZG9lcyBub3QKK2ltcGx5IHVzZSBvZiB0aGUgaGFyZHdhcmUgZGVsZXRlIGNoYXJhY3RlciBmZWF0dXJlLikKKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgYW4gXGZCT0tcZlIgKFNWcjQKK3NwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCZGVsY2hcZlIsIFxmQm12ZGVsY2hcZlIsIGFuZCBcZkJtdndkZWxjaFxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIFRoZQorc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gXGZCRVJSXGZSIG9uIGZhaWx1cmUsIGJ1dCBzcGVjaWZpZXMgbm8KK2Vycm9yIGNvbmRpdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfZGVsZXRlbG4uM3ggYi9tYW4vY3Vyc19kZWxldGVsbi4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdiMTZhCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfZGVsZXRlbG4uM3gKQEAgLTAsMCArMSw5MSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2RlbGV0ZWxuLjN4LHYgMS4xMSAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIGN1cnNfZGVsZXRlbG4gM1ggIiIKKy5TSCBOQU1FCitcZkJkZWxldGVsblxmUiwKK1xmQndkZWxldGVsblxmUiwKK1xmQmluc2RlbGxuXGZSLAorXGZCd2luc2RlbGxuXGZSLAorXGZCaW5zZXJ0bG5cZlIsCitcZkJ3aW5zZXJ0bG5cZlIgLSBkZWxldGUgYW5kIGluc2VydCBsaW5lcyBpbiBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgZGVsZXRlbG4odm9pZCk7XGZSCisuYnIKK1xmQmludCB3ZGVsZXRlbG4oV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgaW5zZGVsbG4oaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd2luc2RlbGxuKFdJTkRPVyAqd2luLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBpbnNlcnRsbih2b2lkKTtcZlIKKy5icgorXGZCaW50IHdpbnNlcnRsbihXSU5ET1cgKndpbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmRlbGV0ZWxuXGZSIGFuZCBcZkJ3ZGVsZXRlbG5cZlIgcm91dGluZXMgZGVsZXRlIHRoZSBsaW5lIHVuZGVyIHRoZQorY3Vyc29yIGluIHRoZSB3aW5kb3c7IGFsbCBsaW5lcyBiZWxvdyB0aGUgY3VycmVudCBsaW5lIGFyZSBtb3ZlZCB1cCBvbmUgbGluZS4KK1RoZSBib3R0b20gbGluZSBvZiB0aGUgd2luZG93IGlzIGNsZWFyZWQuICBUaGUgY3Vyc29yIHBvc2l0aW9uIGRvZXMgbm90IGNoYW5nZS4KKy5QUAorVGhlIFxmQmluc2RlbGxuXGZSIGFuZCBcZkJ3aW5zZGVsbG5cZlIgcm91dGluZXMsIGZvciBwb3NpdGl2ZSBcZkluXGZSLCBpbnNlcnQKK1xmSW5cZlIgbGluZXMgaW50byB0aGUgc3BlY2lmaWVkIHdpbmRvdyBhYm92ZSB0aGUgY3VycmVudCBsaW5lLiAgVGhlIFxmSW5cZlIKK2JvdHRvbSBsaW5lcyBhcmUgbG9zdC4gIEZvciBuZWdhdGl2ZSBcZkluXGZSLCBkZWxldGUgXGZJblxmUiBsaW5lcyAoc3RhcnRpbmcKK3dpdGggdGhlIG9uZSB1bmRlciB0aGUgY3Vyc29yKSwgYW5kIG1vdmUgdGhlIHJlbWFpbmluZyBsaW5lcyB1cC4gIFRoZSBib3R0b20KK1xmSW5cZlIgbGluZXMgYXJlIGNsZWFyZWQuICBUaGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gcmVtYWlucyB0aGUgc2FtZS4KKy5QUAorVGhlIFxmQmluc2VydGxuXGZSIGFuZCBcZkJ3aW5zZXJ0bG5cZlIgcm91dGluZXMgaW5zZXJ0IGEgYmxhbmsgbGluZSBhYm92ZSB0aGUKK2N1cnJlbnQgbGluZSBhbmQgdGhlIGJvdHRvbSBsaW5lIGlzIGxvc3QuCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIGFuIFxmQk9LXGZSIChTVnI0CitzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sCitpZiB0aGUgd2luZG93IHBhcmFtZXRlciBpcyBudWxsLCBhbiBlcnJvciBpcyByZXR1cm5lZC4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuICBUaGUKK3N0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuIFxmQkVSUlxmUiBvbiBmYWlsdXJlLCBidXQgc3BlY2lmaWVzIG5vCitlcnJvciBjb25kaXRpb25zLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIGJ1dCBcZkJ3aW5zZGVsbG5cZlIgbWF5IGJlIG1hY3Jvcy4KKy5QUAorVGhlc2Ugcm91dGluZXMgZG8gbm90IHJlcXVpcmUgYSBoYXJkd2FyZSBsaW5lIGRlbGV0ZSBvciBpbnNlcnQgZmVhdHVyZSBpbiB0aGUKK3Rlcm1pbmFsLiAgSW4gZmFjdCwgdGhleSB3aWxsIG5vdCB1c2UgaGFyZHdhcmUgbGluZSBkZWxldGUvaW5zZXJ0IHVubGVzcworXGZCaWRsb2soLi4uLCBUUlVFKVxmUiBoYXMgYmVlbiBzZXQgb24gdGhlIGN1cnJlbnQgd2luZG93LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2V4dGVuZC4zeCBiL21hbi9jdXJzX2V4dGVuZC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDkyMjUzCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfZXh0ZW5kLjN4CkBAIC0wLDAgKzEsODUgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OS0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk5LW9uCisuXCIKKy5cIiAkSWQ6IGN1cnNfZXh0ZW5kLjN4LHYgMS4xNyAyMDA2LzEyLzI0IDE4OjAxOjQ4IHRvbSBFeHAgJAorLlRIIGN1cnNfZXh0ZW5kIDNYICIiCisuU0ggTkFNRQorXGZCY3Vyc2VzX3ZlcnNpb25cZlAsCitcZkJ1c2VfZXh0ZW5kZWRfbmFtZXNcZlAgXC0gbWlzY2VsbGFuZW91cyBjdXJzZXMgZXh0ZW5zaW9ucworLgorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmNvbnN0IGNoYXIgKiBjdXJzZXNfdmVyc2lvbih2b2lkKTtcZlAKKy5icgorXGZCaW50IHVzZV9leHRlbmRlZF9uYW1lcyhib29sIGVuYWJsZSk7XGZQCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgY3Vyc2VzIGxpYnJhcnkKK3doaWNoIGRvIG5vdCBmaXQgZWFzaWx5IGludG8gb3RoZXIgY2F0ZWdvcmllcy4KKy5QUAorVXNlCisuSSBjdXJzZXNfdmVyc2lvbigpCit0byBnZXQgdGhlIHZlcnNpb24gbnVtYmVyLCBpbmNsdWRpbmcgcGF0Y2ggbGV2ZWwgb2YgdGhlIGxpYnJhcnksIGUuZy4sCisuQiA1LjAuMTk5OTEwMjMKKy5QUAorVGhlCisuSSB1c2VfZXh0ZW5kZWRfbmFtZXMoKQorZnVuY3Rpb24gY29udHJvbHMgd2hldGhlciB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbgoraXMgYWJsZSB0byB1c2UgdXNlci1kZWZpbmVkIG9yIG5vbnN0YW5kYXJkIG5hbWVzCit3aGljaCBtYXkgYmUgY29tcGlsZWQgaW50byB0aGUgdGVybWluZm8KK2Rlc2NyaXB0aW9uLCBpLmUuLCB2aWEgdGhlIHRlcm1pbmZvIG9yIHRlcm1jYXAgaW50ZXJmYWNlcy4KK05vcm1hbGx5IHRoZXNlIG5hbWVzIGFyZSBhdmFpbGFibGUgZm9yIHVzZSwgc2luY2UgdGhlIGVzc2VudGlhbCBkZWNpc2lvbgoraXMgbWFkZSBieSB1c2luZyB0aGUgXGZCLXhcZlAgb3B0aW9uIG9mIFxmQkBUSUNAXGZQIHRvIGNvbXBpbGUKK2V4dGVuZGVkIHRlcm1pbmFsIGRlZmluaXRpb25zLgorSG93ZXZlciB5b3UgY2FuIGRpc2FibGUgdGhpcyBmZWF0dXJlCit0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBjdXJzZXMuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQKK2FueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc19nZXRjaFxmUigzWCksCitcZkJjdXJzX21vdXNlXGZSKDNYKSwKK1xmQmN1cnNfcHJpbnRcZlIoM1gpLAorXGZCY3Vyc191dGlsXGZSKDNYKSwKK1xmQmRlZmF1bHRfY29sb3JzXGZSKDNYKSwKK1xmQmRlZmluZV9rZXlcZlIoM1gpLAorXGZCa2V5Ym91bmRcZlIoM1gpLAorXGZCa2V5b2tcZlIoM1gpLAorXGZCcmVzaXpldGVybVxmUigzWCksCitcZkJ3cmVzaXplXGZSKDNYKS4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2dldF93Y2guM3ggYi9tYW4vY3Vyc19nZXRfd2NoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2ZmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19nZXRfd2NoLjN4CkBAIC0wLDAgKzEsMTYxIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfZ2V0X3djaC4zeCx2IDEuNiAyMDA2LzAyLzI1IDIxOjQ3OjA2IHRvbSBFeHAgJAorLlRIIGN1cnNfZ2V0X3djaCAzWCAiIgorLlNIIE5BTUUKK1xmQmdldF93Y2hcZlIsCitcZkJ3Z2V0X3djaFxmUiwKK1xmQm12Z2V0X3djaFxmUiwKK1xmQm12d2dldF93Y2hcZlIsCitcZkJ1bmdldF93Y2hcZlIgXC0gZ2V0IChvciBwdXNoIGJhY2spIGEgd2lkZSBjaGFyYWN0ZXIgZnJvbSBjdXJzZXMgdGVybWluYWwga2V5Ym9hcmQKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgZ2V0X3djaCh3aW50X3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3Z2V0X3djaChXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgd2ludF90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZnZXRfd2NoKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2ludF90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3Z2V0X3djaChXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCB3aW50X3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCB1bmdldF93Y2goY29uc3Qgd2NoYXJfdCBcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGUKK1xmQmdldF93Y2hcZlIsCitcZkJ3Z2V0X3djaFxmUiwKK1xmQm12Z2V0X3djaFxmUiwgYW5kCitcZkJtdndnZXRfd2NoXGZSCitmdW5jdGlvbnMgcmVhZCBhIGNoYXJhY3RlcgorZnJvbSB0aGUgdGVybWluYWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IG9yIHNwZWNpZmllZCB3aW5kb3cuCitJbiBuby1kZWxheSBtb2RlLAoraWYgbm8gaW5wdXQgaXMgd2FpdGluZywgdGhlIHZhbHVlIFxmQkVSUlxmUiBpcyByZXR1cm5lZC4KK0luIGRlbGF5IG1vZGUsCit0aGUgcHJvZ3JhbSB3YWl0cyB1bnRpbCB0aGUgc3lzdGVtIHBhc3NlcyB0ZXh0IHRocm91Z2ggdG8gdGhlIHByb2dyYW0uCitEZXBlbmRpbmcgb24gdGhlIHNldHRpbmcgb2YgXGZCY2JyZWFrXGZSLAordGhpcyBpcyBhZnRlciBvbmUgY2hhcmFjdGVyIChjYnJlYWsgbW9kZSksCitvciBhZnRlciB0aGUgZmlyc3QgbmV3bGluZSAobm9jYnJlYWsgbW9kZSkuCitJbiBoYWxmLWRlbGF5IG1vZGUsCit0aGUgcHJvZ3JhbSB3YWl0cyB1bnRpbCB0aGUgdXNlciB0eXBlcyBhIGNoYXJhY3RlciBvciB0aGUgc3BlY2lmaWVkCit0aW1lb3V0IGludGVydmFsIGhhcyBlbGFwc2VkLgorLlBQCitVbmxlc3MgXGZCbm9lY2hvXGZSIGhhcyBiZWVuIHNldCwKK3RoZXNlIHJvdXRpbmVzIGVjaG8gdGhlIGNoYXJhY3RlciBpbnRvIHRoZSBkZXNpZ25hdGVkIHdpbmRvdy4KKy5QUAorSWYgdGhlIHdpbmRvdyBpcyBub3QgYSBwYWQgYW5kIGhhcyBiZWVuIG1vdmVkIG9yIG1vZGlmaWVkIHNpbmNlIHRoZQorbGFzdCBjYWxsIHRvIFxmQndyZWZyZXNoXGZSLAorXGZCd3JlZnJlc2hcZlIgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFub3RoZXIgY2hhcmFjdGVyIGlzIHJlYWQuCisuUFAKK0lmIFxmQmtleXBhZFxmUiBpcyBlbmFibGVkLAordGhlc2UgZnVuY3Rpb25zIHJlc3BvbmQgdG8KK3RoZSBwcmVzc2luZyBvZiBhIGZ1bmN0aW9uIGtleSBieSBzZXR0aW5nIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieQorXGZJd2NoXGZSCit0byB0aGUgY29ycmVzcG9uZGluZworXGZCS0VZX1xmUgordmFsdWUgZGVmaW5lZAoraW4KK1xmQjxjdXJzZXMuaD5cZlIKK2FuZCByZXR1cm5pbmcKK1xmQktFWV9DT0RFX1lFU1xmUi4KK0lmIGEgY2hhcmFjdGVyIChzdWNoIGFzIGVzY2FwZSkgdGhhdCBjb3VsZCBiZSB0aGUKK2JlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGtleSBpcyByZWNlaXZlZCwgY3Vyc2VzIHNldHMgYSB0aW1lci4KK0lmIHRoZSByZW1haW5kZXIKK29mIHRoZSBzZXF1ZW5jZSBkb2VzIGFycml2ZSB3aXRoaW4gdGhlIGRlc2lnbmF0ZWQgdGltZSwgY3Vyc2VzIHBhc3NlcyB0aHJvdWdoCit0aGUgY2hhcmFjdGVyOyBvdGhlcndpc2UsIGN1cnNlcyByZXR1cm5zIHRoZSBmdW5jdGlvbiBrZXkgdmFsdWUuCitGb3IgdGhpcworcmVhc29uLCBtYW55IHRlcm1pbmFscyBleHBlcmllbmNlIGEgZGVsYXkgYmV0d2VlbiB0aGUgdGltZSBhIHVzZXIgcHJlc3NlcwordGhlIGVzY2FwZSBrZXkgYW5kIHRoZSB0aW1lIHRoZSBlc2NhcGUgaXMgcmV0dXJuZWQgdG8gdGhlIHByb2dyYW0uCisuUFAKK1RoZQorXGZCdW5nZXRfd2NoXGZSCitmdW5jdGlvbiBwdXNoZXMgdGhlIHdpZGUgY2hhcmFjdGVyCitcZkl3Y2hcZlIKK2JhY2sgb250byB0aGUgaGVhZCBvZiB0aGUgaW5wdXQgcXVldWUsIHNvIHRoZSB3aWRlIGNoYXJhY3RlcgoraXMgcmV0dXJuZWQgYnkgdGhlIG5leHQgY2FsbCB0bworXGZCZ2V0X3djaFxmUi4KK1RoZSBwdXNoYmFjayBvZgorb25lIGNoYXJhY3RlciBpcyBndWFyYW50ZWVkLgorSWYgdGhlIHByb2dyYW0gY2FsbHMKK1xmQnVuZ2V0X3djaFxmUgordG9vIG1hbnkgdGltZXMgd2l0aG91dCBhbiBpbnRlcnZlbmluZyBjYWxsIHRvCitcZkJnZXRfd2NoXGZSLAordGhlIG9wZXJhdGlvbiBtYXkgZmFpbC4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSCithdXRvbWF0aWNhbGx5CitpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxzdGRpby5oPlxmUi4KKy5QUAorQXBwbGljYXRpb25zIHNob3VsZCBub3QgZGVmaW5lIHRoZSBlc2NhcGUga2V5IGJ5IGl0c2VsZiBhcyBhIHNpbmdsZS1jaGFyYWN0ZXIKK2Z1bmN0aW9uLgorLlBQCitXaGVuIHVzaW5nCitcZkJnZXRfd2NoXGZSLAorXGZCd2dldF93Y2hcZlIsCitcZkJtdmdldF93Y2hcZlIsIG9yCitcZkJtdndnZXRfd2NoXGZSLCBhcHBsaWNhdGlvbnMgc2hvdWxkCitub3QgdXNlCitcZkJub2NicmVha1xmUgorbW9kZSBhbmQKK1xmQmVjaG9cZlIKK21vZGUKK2F0IHRoZSBzYW1lIHRpbWUuCitEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSB0dHkgZHJpdmVyIHdoZW4gZWFjaCBjaGFyYWN0ZXIKK2lzIHR5cGVkLCB0aGUgcHJvZ3JhbSBtYXkgcHJvZHVjZSB1bmRlc2lyYWJsZSByZXN1bHRzLgorLlBQCitBbGwgZnVuY3Rpb25zIGV4Y2VwdCBcZkJ3Z2V0X3djaFxmUiBhbmQgXGZCdW5nZXRfd2NoXGZSCittYXkgYmUgbWFjcm9zLgorLlNIIFJFVFVSTiBWQUxVRVMKK1doZW4KK1xmQmdldF93Y2hcZlIsCitcZkJ3Z2V0X3djaFxmUiwKK1xmQm12Z2V0X3djaFxmUiwgYW5kCitcZkJtdndnZXRfd2NoXGZSCitmdW5jdGlvbnMgc3VjY2Vzc2Z1bGx5CityZXBvcnQgdGhlIHByZXNzaW5nIG9mIGEgZnVuY3Rpb24ga2V5LCB0aGV5IHJldHVybgorXGZCS0VZX0NPREVfWUVTXGZSLgorV2hlbiB0aGV5IHN1Y2Nlc3NmdWxseSByZXBvcnQgYSB3aWRlIGNoYXJhY3RlciwgdGhleSByZXR1cm4KK1xmQk9LXGZSLgorT3RoZXJ3aXNlLCB0aGV5IHJldHVybgorXGZCRVJSXGZSLgorLlBQCitVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwKK1xmQnVuZ2V0X3djaFxmUgorcmV0dXJucworXGZCT0tcZlIuCitPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zCitcZkJFUlJcZlIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2dldGNoXGZSKDNYKSwKK1xmQmN1cnNfaW5zX3djaFxmUigzWCksCitcZkJjdXJzX2lub3B0c1xmUigzWCksCitcZkJjdXJzX21vdmVcZlIoM1gpLAorXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfZ2V0X3dzdHIuM3ggYi9tYW4vY3Vyc19nZXRfd3N0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg2Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfZ2V0X3dzdHIuM3gKQEAgLTAsMCArMSwxNzggQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19nZXRfd3N0ci4zeCx2IDEuNiAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgJAorLlRIIGN1cnNfZ2V0X3dzdHIgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJnZXRfd3N0clxmUiwKK1xmQmdldG5fd3N0clxmUiwKK1xmQndnZXRfd3N0clxmUiwKK1xmQndnZXRuX3dzdHJcZlIsCitcZkJtdmdldF93c3RyXGZSLAorXGZCbXZnZXRuX3dzdHJcZlIsCitcZkJtdndnZXRfd3N0clxmUiwKK1xmQm12d2dldG5fd3N0clxmUiBcLSBnZXQgYW4gYXJyYXkgb2Ygd2lkZSBjaGFyYWN0ZXJzIGZyb20gYSBjdXJzZXMgdGVybWluYWwga2V5Ym9hcmQKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKKy5uZgorXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgZ2V0X3dzdHIod2ludF90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGdldG5fd3N0cih3aW50X3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdnZXRfd3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgd2ludF90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdnZXRuX3dzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIHdpbnRfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZnZXRfd3N0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdpbnRfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmdldG5fd3N0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdpbnRfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3Z2V0X3dzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2ludF90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2dldG5fd3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCB3aW50X3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUgZWZmZWN0IG9mCitcZkJnZXRfd3N0clxmUgoraXMgYXMgdGhvdWdoIGEgc2VyaWVzIG9mIGNhbGxzCit0bworXGZCZ2V0X3djaFxmUgord2VyZSBtYWRlLCB1bnRpbCBhIG5ld2xpbmUsIG90aGVyIGVuZC1vZi1saW5lLCBvciBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgcHJvY2Vzc2VkLgorQW4gZW5kLW9mLWZpbGUgY29uZGl0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IFxmQldFT0ZcZlIsIGFzIGRlZmluZWQgaW4gXGZCPHdjaGFyLmg+XGZSLgorVGhlIG5ld2xpbmUgYW5kIGVuZC1vZi1saW5lIGNvbmRpdGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBcZkJcXG5cZlIgXGZCd2NoYXJfdFxmUiB2YWx1ZS4KK0luIGFsbCBpbnN0YW5jZXMsIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBpcyB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBcZkJ3Y2hhcl90XGZSLgorVGhlIHJvdXRpbmUgcGxhY2VzIHJlc3VsdGluZyB2YWx1ZXMgaW4gdGhlIGFyZWEgcG9pbnRlZCB0byBieSBcZkl3c3RyXGZSLgorLlBQCitUaGUgdXNlcidzIGVyYXNlIGFuZCBraWxsIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkLiAgSWYga2V5cGFkCittb2RlIGlzIG9uIGZvciB0aGUgd2luZG93LCBcZkJLRVlfTEVGVFxmUiBhbmQgXGZCS0VZX0JBQ0tTUEFDRVxmUgorYXJlIGJvdGggY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIHRoZSB1c2VyJ3Mga2lsbCBjaGFyYWN0ZXIuCisuUFAKK0NoYXJhY3RlcnMgaW5wdXQgYXJlIGVjaG9lZCBvbmx5IGlmIFxmQmVjaG9cZlIgaXMgY3VycmVudGx5IG9uLiAgSW4gdGhhdCBjYXNlLAorYmFja3NwYWNlIGlzIGVjaG9lZCBhcyBkZWxldGlvbiBvZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyICh0eXBpY2FsbHkgYSBsZWZ0Cittb3Rpb24pLgorLlBQCitUaGUgZWZmZWN0IG9mCitcZkJ3Z2V0X3dzdHJcZlIKK2lzIGFzIHRob3VnaCBhIHNlcmllcyBvZgorY2FsbHMgdG8KK1xmQndnZXRfd2NoXGZSCit3ZXJlIG1hZGUuCisuUFAKK1RoZSBlZmZlY3Qgb2YKK1xmQm12Z2V0X3dzdHJcZlIKK2lzIGFzIHRob3VnaCBhIGNhbGwgdG8KK1xmQm1vdmVcZlIKK2FuZCB0aGVuIGEgc2VyaWVzIG9mIGNhbGxzIHRvCitcZkJnZXRfd2NoXGZSCit3ZXJlCittYWRlLgorLlBQCitUaGUgZWZmZWN0IG9mCitcZkJtdndnZXRfd3N0clxmUgoraXMgYXMgdGhvdWdoIGEgY2FsbCB0bworXGZCd21vdmVcZlIKK2FuZCB0aGVuIGEgc2VyaWVzIG9mIGNhbGxzIHRvCitcZkJ3Z2V0X3djaFxmUgord2VyZSBtYWRlLgorLlBQCitUaGUKK1xmQmdldG5fd3N0clxmUiwKK1xmQm12Z2V0bl93c3RyXGZSLAorXGZCbXZ3Z2V0bl93c3RyXGZSLCBhbmQKK1xmQndnZXRuX3dzdHJcZlIKK2Z1bmN0aW9ucyBhcmUgaWRlbnRpY2FsCit0byB0aGUKK1xmQmdldF93c3RyXGZSLAorXGZCbXZnZXRfd3N0clxmUiwKK1xmQm12d2dldF93c3RyXGZSLCBhbmQKK1xmQndnZXRfd3N0clxmUgorZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksCitleGNlcHQgdGhhdCB0aGUKK1xmQipuXypcZlIKK3ZlcnNpb25zIHJlYWQgYXQgbW9zdAorXGZJblxmUgorY2hhcmFjdGVycywgbGV0dGluZyB0aGUgYXBwbGljYXRpb24gcHJldmVudCBvdmVyZmxvdyBvZiB0aGUKK2lucHV0IGJ1ZmZlci4KKy5TSCBOT1RFUworVXNpbmcKK1xmQmdldF93c3RyXGZSLAorXGZCbXZnZXRfd3N0clxmUiwKK1xmQm12d2dldF93c3RyXGZSLCBvcgorXGZCd2dldF93c3RyXGZSCit0byByZWFkIGEgbGluZSB0aGF0CitvdmVyZmxvd3MgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkKK1xmQndzdHJcZlIKK2NhdXNlcyB1bmRlZmluZWQKK3Jlc3VsdHMuCitUaGUgdXNlIG9mCitcZkJnZXRuX3dzdHJcZlIsCitcZkJtdmdldG5fd3N0clxmUiwKK1xmQm12d2dldG5fd3N0clxmUiwgb3IKK1xmQndnZXRuX3dzdHJcZlIsIHJlc3BlY3RpdmVseSwgaXMgcmVjb21tZW5kZWQuCisuUFAKK1RoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgcmV0dXJuIFxmQktFWV9cZlIgdmFsdWVzIGJlY2F1c2UgdGhlcmUKK2lzIG5vIHdheSB0byBkaXN0aW5ndWlzaCBhIFxmQktFWV9cZlIgdmFsdWUgZnJvbSBhIHZhbGlkIFxmQndjaGFyX3RcZlIgdmFsdWUuCisuUFAKK0FsbCBvZiB0aGVzZSByb3V0aW5lcyBleGNlcHQgXGZCd2dldG5fd3N0clxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFJFVFVSTiBWQUxVRVMKK0FsbCBvZiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIFxmQk9LXGZSIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorT3RoZXJ3aXNlLCB0aGV5IHJldHVybiBcZkJFUlJcZlIuCisuUFAKK0Z1bmN0aW9ucyB1c2luZyBhIHdpbmRvdyBwYXJhbWV0ZXIgcmV0dXJuIGFuIGVycm9yIGlmIGl0IGlzIG51bGwuCisuUlMKKy5UUCA1CitcZkJ3Z2V0bl93c3RyXGZQCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBhc3NvY2lhdGVkIGNhbGwgdG8gXGZCd2dldF93Y2hcZlAgZmFpbGVkLgorLlJFCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIFRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIuCitObyBlcnJvciBjb25kaXRpb25zIGFyZSBkZWZpbmVkLgorVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIEVSUiBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwKK29yIGlmIHRoZSBsb3dlci1sZXZlbCBcZkJ3Z2V0X3djaFxmUiBjYWxsIHJldHVybnMgYW4gRVJSLgorSW4gdGhlIGxhdHRlciBjYXNlLAorYW4gRVJSIHJldHVybiB3aXRob3V0IG90aGVyIGRhdGEgaXMgdHJlYXRlZCBhcyBhbiBlbmQtb2YtZmlsZSBjb25kaXRpb24sCithbmQgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIGEgXGZCV0VPRlxmUiBmb2xsb3dlZCBieSBhIG51bGwgXGZCd2NoYXJfdFxmUi4KKy5QUAorWC9PcGVuIGN1cnNlcyBkb2N1bWVudHMgdGhlc2UgZnVuY3Rpb25zIHRvIHBhc3MgYW4gYXJyYXkgb2YgXGZCd2NoYXJfdFxmUiwKK2J1dCBhbGwgb2YgdGhlIHZlbmRvcnMgaW1wbGVtZW50IHRoaXMgdXNpbmcgXGZCd2ludF90XGZSLgorLlNIIFNFRSBBTFNPCitGdW5jdGlvbnM6CitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19nZXRfd2NoXGZSKDNYKSwKK1xmQmN1cnNfZ2V0c3RyXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfZ2V0Y2NoYXIuM3ggYi9tYW4vY3Vyc19nZXRjY2hhci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjAyZjVkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfZ2V0Y2NoYXIuM3gKQEAgLTAsMCArMSwxNDkgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMS0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19nZXRjY2hhci4zeCx2IDEuMTEgMjAwOC8wNS8xNyAxOTozNzowNSB0b20gRXhwICQKKy5USCBjdXJzX2dldGNjaGFyIDNYICIiCisuU0ggTkFNRQorXGZCZ2V0Y2NoYXJcZlAsCitcZkJzZXRjY2hhclxmUCBcLSBHZXQgYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgYW5kIHJlbmRpdGlvbiBmcm9tIGEgXGZCY2NoYXJfdFxmUCBvciBzZXQgYSBcZkJjY2hhcl90XGZQIGZyb20gYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUAorLnNwCitcZkJpbnQgZ2V0Y2NoYXIoXGZQCisuYnIKKy5CICIgICAgICAgIGNvbnN0IGNjaGFyX3QgKlxmSXdjdmFsXGZQLCIKKy5icgorLkIgIiAgICAgICAgd2NoYXJfdCAqXGZJd2NoXGZQLCIKKy5icgorLkIgIiAgICAgICAgYXR0cl90ICpcZklhdHRyc1xmUCwiCisuYnIKKy5CICIgICAgICAgIHNob3J0ICpcZkljb2xvcl9wYWlyXGZQLCIKKy5icgorLkIgIiAgICAgICAgdm9pZCAqXGZJb3B0c1xmUCApOyIKKy5zcAorLkIgImludCBzZXRjY2hhcigiCisuYnIKKy5CICIgICAgICAgIGNjaGFyX3QgKlxmSXdjdmFsXGZQLCIKKy5icgorLkIgIiAgICAgICAgY29uc3Qgd2NoYXJfdCAqXGZJd2NoXGZQLCIKKy5icgorLkIgIiAgICAgICAgY29uc3QgYXR0cl90IFxmSWF0dHJzXGZQLCIKKy5icgorLkIgIiAgICAgICAgc2hvcnQgXGZJY29sb3JfcGFpclxmUCwiCisuYnIKKy5CICIgICAgICAgIHZvaWQgKlxmSW9wdHNcZlAgKTsiCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlIFxmQmdldGNjaGFyXGZQIGZ1bmN0aW9uIGdldHMgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcKK2FuZCByZW5kaXRpb24gZnJvbSBhIFxmQmNjaGFyX3RcZlAgYXJndW1lbnQuCitXaGVuIFxmSXdjaFxmUCBpcyBub3QgYSBudWxsIHBvaW50ZXIsCit0aGUgXGZCZ2V0Y2NoYXJcZlAgZnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy0KK0V4dHJhY3RzIGluZm9ybWF0aW9uIGZyb20gYSBcZkJjY2hhcl90XGZQIHZhbHVlIFxmSXdjdmFsXGZQCisuVFAgNQorLQorU3RvcmVzIHRoZSBjaGFyYWN0ZXIgYXR0cmlidXRlcyBpbiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBcZklhdHRyc1xmUAorLlRQIDUKKy0KK1N0b3JlcyB0aGUgY29sb3ItcGFpciBpbiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBcZkljb2xvcl9wYWlyXGZQCisuVFAgNQorLQorU3RvcmVzIHRoZSB3aWRlLWNoYXJhY3RlciBzdHJpbmcsCitjaGFyYWN0ZXJzIHJlZmVyZW5jZWQgYnkgXGZJd2N2YWxcZlAsIGludG8gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXGZJd2NoXGZQLgorLlBQCitXaGVuCitcZkl3Y2hcZlAKK2lzIGEgbnVsbCBwb2ludGVyLCB0aGUKK1xmQmdldGNjaGFyXGZQCitmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLQorT2J0YWlucyB0aGUgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyBwb2ludGVkIHRvIGJ5IFxmSXdjdmFsXGZQCisuVFAgNQorLQorRG9lcyBub3QgY2hhbmdlIHRoZSBkYXRhIHJlZmVyZW5jZWQgYnkKK1xmSWF0dHJzXGZQCitvcgorXGZJY29sb3JfcGFpclxmUAorLlBQCitUaGUgXGZCc2V0Y2NoYXJcZlAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgXGZJd2N2YWxcZlAKK2J5IHVzaW5nOgorLlRQIDUKKy0KK1RoZSBjaGFyYWN0ZXIgYXR0cmlidXRlcyBpbgorXGZJYXR0cnNcZlAKKy5UUCA1CistCitUaGUgY29sb3IgcGFpciBpbgorXGZJY29sb3JfcGFpclxmUAorLlRQIDUKKy0KK1RoZSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcG9pbnRlZCB0byBieSBcZkl3Y2hcZlAuCitUaGUgc3RyaW5nIG11c3QgYmUgTCdcXDAnIHRlcm1pbmF0ZWQsCitjb250YWluIGF0IG1vc3Qgb25lIHNwYWNpbmcgY2hhcmFjdGVyLAord2hpY2ggbXVzdCBiZSB0aGUgZmlyc3QuCisuSVAKK1VwIHRvIFxmQkNDSEFSV19NQVhcZlAtMSBub25zcGFjaW5nIGNoYXJhY3RlcnMgbWF5IGZvbGxvdy4KK0FkZGl0aW9uYWwgbm9uc3BhY2luZyBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkLgorLklQCitUaGUgc3RyaW5nIG1heSBjb250YWluIGEgc2luZ2xlIGNvbnRyb2wgY2hhcmFjdGVyIGluc3RlYWQuCitJbiB0aGF0IGNhc2UsIG5vIG5vbnNwYWNpbmcgY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4KKy5TSCBOT1RFUworLlBQCitUaGUgXGZJb3B0c1xmUCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KK0N1cnJlbnRseSwgYW4gYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIGEgbnVsbCBwb2ludGVyIGFzIFxmSW9wdHNcZlAuCisuUFAKK1RoZSBcZkl3Y3ZhbFxmUCBhcmd1bWVudCBtYXkgYmUgYSB2YWx1ZSBnZW5lcmF0ZWQgYnkgYSBjYWxsIHRvCitcZkJzZXRjY2hhclxmUCBvciBieSBhIGZ1bmN0aW9uIHRoYXQgaGFzIGEgXGZCY2NoYXJfdFxmUCBvdXRwdXQgYXJndW1lbnQuCitJZiBcZkl3Y3ZhbFxmUCBpcyBjb25zdHJ1Y3RlZCBieSBhbnkgb3RoZXIgbWVhbnMsIHRoZSBlZmZlY3QgaXMgdW5zcGVjaWZpZWQuCisuU0ggUkVUVVJOIFZBTFVFUworLlBQCitXaGVuIFxmSXdjaFxmUCBpcyBhIG51bGwgcG9pbnRlciwKK1xmQmdldGNjaGFyXGZQIHJldHVybnMgdGhlIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieQorXGZJd2N2YWxcZlAuCisuUFAKK1doZW4gXGZJd2NoXGZQIGlzIG5vdCBhIG51bGwgcG9pbnRlciwKK1xmQmdldGNjaGFyXGZQIHJldHVybnMgXGZCT0tcZlAgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sCithbmQgXGZCRVJSXGZQIG90aGVyd2lzZS4KKy5QUAorVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIFxmQnNldGNjaGFyXGZQIHJldHVybnMgXGZCT0tcZlAuCitPdGhlcndpc2UsIGl0IHJldHVybnMgXGZCRVJSXGZQLgorLlNIIFNFRSBBTFNPCisuUFAKK0Z1bmN0aW9uczoKK1xmQmN1cnNfYXR0clxmUigzWCksCitcZkJjdXJzX2NvbG9yXGZSKDNYKSwKK1xmQmN1cnNlc1xmUigzWCksCitcZkJ3Y3dpZHRoXGZSKDMpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19nZXRjaC4zeCBiL21hbi9jdXJzX2dldGNoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZmVkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19nZXRjaC4zeApAQCAtMCwwICsxLDMyOCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19nZXRjaC4zeCx2IDEuMzAgMjAwNi8xMi8wMiAxNzowMjo1MyB0b20gRXhwICQKKy5USCBjdXJzX2dldGNoIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZ2V0Y2hcZlIsCitcZkJ3Z2V0Y2hcZlIsCitcZkJtdmdldGNoXGZSLAorXGZCbXZ3Z2V0Y2hcZlIsCitcZkJ1bmdldGNoXGZSLAorXGZCaGFzX2tleVxmUiBcLSBnZXQgKG9yIHB1c2ggYmFjaykgY2hhcmFjdGVycyBmcm9tIFxmQmN1cnNlc1xmUiB0ZXJtaW5hbCBrZXlib2FyZAorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgZ2V0Y2godm9pZCk7XGZSCisuYnIKK1xmQmludCB3Z2V0Y2goV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgbXZnZXRjaChpbnQgeSwgaW50IHgpO1xmUgorLmJyCitcZkJpbnQgbXZ3Z2V0Y2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmludCB1bmdldGNoKGludCBjaCk7XGZSCisuYnIKK1xmQmludCBoYXNfa2V5KGludCBjaCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmdldGNoXGZSLCBcZkJ3Z2V0Y2hcZlIsIFxmQm12Z2V0Y2hcZlIgYW5kIFxmQm12d2dldGNoXGZSLCByb3V0aW5lcyByZWFkCithIGNoYXJhY3RlciBmcm9tIHRoZSB3aW5kb3cuCitJbiBuby1kZWxheSBtb2RlLCBpZiBubyBpbnB1dCBpcyB3YWl0aW5nLCB0aGUgdmFsdWUgXGZCRVJSXGZSIGlzIHJldHVybmVkLgorSW4gZGVsYXkgbW9kZSwgdGhlIHByb2dyYW0gd2FpdHMgdW50aWwgdGhlIHN5c3RlbQorcGFzc2VzIHRleHQgdGhyb3VnaCB0byB0aGUgcHJvZ3JhbS4KK0RlcGVuZGluZyBvbiB0aGUgc2V0dGluZyBvZiBcZkJjYnJlYWtcZlIsCit0aGlzIGlzIGFmdGVyIG9uZSBjaGFyYWN0ZXIgKGNicmVhayBtb2RlKSwKK29yIGFmdGVyIHRoZSBmaXJzdCBuZXdsaW5lIChub2NicmVhayBtb2RlKS4KK0luIGhhbGYtZGVsYXkgbW9kZSwKK3RoZSBwcm9ncmFtIHdhaXRzIHVudGlsIGEgY2hhcmFjdGVyIGlzIHR5cGVkIG9yIHRoZQorc3BlY2lmaWVkIHRpbWVvdXQgaGFzIGJlZW4gcmVhY2hlZC4KKy5QUAorVW5sZXNzIFxmQm5vZWNob1xmUiBoYXMgYmVlbiBzZXQsCit0aGVuIHRoZSBjaGFyYWN0ZXIgd2lsbCBhbHNvIGJlIGVjaG9lZCBpbnRvIHRoZQorZGVzaWduYXRlZCB3aW5kb3cgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CitJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBjdXJyZW50IGVyYXNlIGNoYXJhY3RlciwgbGVmdCBhcnJvdywgb3IgYmFja3NwYWNlLAordGhlIGN1cnNvciBpcyBtb3ZlZCBvbmUgc3BhY2UgdG8gdGhlIGxlZnQgYW5kIHRoYXQgc2NyZWVuIHBvc2l0aW9uIGlzIGVyYXNlZAorYXMgaWYgXGZCZGVsY2hcZlIgaGFkIGJlZW4gY2FsbGVkLgorSWYgdGhlIGNoYXJhY3RlciB2YWx1ZSBpcyBhbnkgb3RoZXIgXGZCS0VZX1xmUiBkZWZpbmUsIHRoZSB1c2VyIGlzIGFsZXJ0ZWQKK3dpdGggYSBcZkJiZWVwXGZSIGNhbGwuCitPdGhlcndpc2UgdGhlIGNoYXJhY3RlciBpcyBzaW1wbHkgb3V0cHV0IHRvIHRoZSBzY3JlZW4uCisuUFAKK0lmIHRoZSB3aW5kb3cgaXMgbm90IGEgcGFkLCBhbmQgaXQgaGFzIGJlZW4gbW92ZWQgb3IgbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QKK2NhbGwgdG8gXGZCd3JlZnJlc2hcZlIsIFxmQndyZWZyZXNoXGZSIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhbm90aGVyIGNoYXJhY3RlcgoraXMgcmVhZC4KKy5QUAorSWYgXGZCa2V5cGFkXGZSIGlzIFxmQlRSVUVcZlIsIGFuZCBhIGZ1bmN0aW9uIGtleSBpcyBwcmVzc2VkLCB0aGUgdG9rZW4gZm9yCit0aGF0IGZ1bmN0aW9uIGtleSBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIHRoZSByYXcgY2hhcmFjdGVycy4KK1Bvc3NpYmxlIGZ1bmN0aW9uCitrZXlzIGFyZSBkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIgYXMgbWFjcm9zIHdpdGggdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlCitvZiA4LWJpdCBjaGFyYWN0ZXJzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggXGZCS0VZX1xmUi4gVGh1cywgYSB2YXJpYWJsZQoraW50ZW5kZWQgdG8gaG9sZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24ga2V5IG11c3QgYmUgb2Ygc2hvcnQgc2l6ZSBvcgorbGFyZ2VyLgorLlBQCitXaGVuIGEgY2hhcmFjdGVyIHRoYXQgY291bGQgYmUgdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGtleSBpcyByZWNlaXZlZAorKHdoaWNoLCBvbiBtb2Rlcm4gdGVybWluYWxzLCBtZWFucyBhbiBlc2NhcGUgY2hhcmFjdGVyKSwKK1xmQmN1cnNlc1xmUiBzZXRzIGEgdGltZXIuCitJZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZXF1ZW5jZSBkb2VzIG5vdCBjb21lIGluIHdpdGhpbiB0aGUgZGVzaWduYXRlZAordGltZSwgdGhlIGNoYXJhY3RlciBpcyBwYXNzZWQgdGhyb3VnaDsKK290aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIGtleSB2YWx1ZSBpcyByZXR1cm5lZC4KK0ZvciB0aGlzIHJlYXNvbiwgbWFueSB0ZXJtaW5hbHMgZXhwZXJpZW5jZSBhIGRlbGF5IGJldHdlZW4gdGhlIHRpbWUKK2EgdXNlciBwcmVzc2VzIHRoZSBlc2NhcGUga2V5IGFuZCB0aGUgZXNjYXBlIGlzIHJldHVybmVkIHRvIHRoZSBwcm9ncmFtLgorLlBQCitUaGUgXGZCdW5nZXRjaFxmUiByb3V0aW5lIHBsYWNlcyBcZkljaFxmUiBiYWNrIG9udG8gdGhlIGlucHV0IHF1ZXVlIHRvIGJlCityZXR1cm5lZCBieSB0aGUgbmV4dCBjYWxsIHRvIFxmQndnZXRjaFxmUi4KK1RoZXJlIGlzIGp1c3Qgb25lIGlucHV0IHF1ZXVlIGZvciBhbGwgd2luZG93cy4KKy5QUAorLlNTIEZ1bmN0aW9uIEtleXMKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24ga2V5cywgZGVmaW5lZCBpbiBcZkI8Y3Vyc2VzLmg+XGZSLCBtaWdodCBiZSByZXR1cm5lZCBieQorXGZCZ2V0Y2hcZlIgaWYgXGZCa2V5cGFkXGZSIGhhcyBiZWVuIGVuYWJsZWQuCitOb3RlIHRoYXQgbm90IGFsbCBvZiB0aGVzZSBhcmUKK25lY2Vzc2FyaWx5IHN1cHBvcnRlZCBvbiBhbnkgcGFydGljdWxhciB0ZXJtaW5hbC4KKy5zcAorLlRTCitjZW50ZXIgdGFiKC8pIDsKK2wgbAorbCBsIC4KK1xmSU5hbWVcZlIvXGZJS2V5XGZSIFxmSW5hbWVcZlIKK0tFWV9CUkVBSy9CcmVhayBrZXkKK0tFWV9ET1dOL1RoZSBmb3VyIGFycm93IGtleXMgLi4uCitLRVlfVVAKK0tFWV9MRUZUCitLRVlfUklHSFQKK0tFWV9IT01FL0hvbWUga2V5ICh1cHdhcmQrbGVmdCBhcnJvdykKK0tFWV9CQUNLU1BBQ0UvQmFja3NwYWNlCitLRVlfRjAvVHsKK0Z1bmN0aW9uIGtleXM7IHNwYWNlIGZvciA2NCBrZXlzIGlzIHJlc2VydmVkLgorVH0KK0tFWV9GKFxmSW5cZlIpL1R7CitGb3IgMCBcKDw9IFxmSW5cZlIgXCg8PSA2MworVH0KK0tFWV9ETC9EZWxldGUgbGluZQorS0VZX0lML0luc2VydCBsaW5lCitLRVlfREMvRGVsZXRlIGNoYXJhY3RlcgorS0VZX0lDL0luc2VydCBjaGFyIG9yIGVudGVyIGluc2VydCBtb2RlCitLRVlfRUlDL0V4aXQgaW5zZXJ0IGNoYXIgbW9kZQorS0VZX0NMRUFSL0NsZWFyIHNjcmVlbgorS0VZX0VPUy9DbGVhciB0byBlbmQgb2Ygc2NyZWVuCitLRVlfRU9ML0NsZWFyIHRvIGVuZCBvZiBsaW5lCitLRVlfU0YvU2Nyb2xsIDEgbGluZSBmb3J3YXJkCitLRVlfU1IvU2Nyb2xsIDEgbGluZSBiYWNrd2FyZCAocmV2ZXJzZSkKK0tFWV9OUEFHRS9OZXh0IHBhZ2UKK0tFWV9QUEFHRS9QcmV2aW91cyBwYWdlCitLRVlfU1RBQi9TZXQgdGFiCitLRVlfQ1RBQi9DbGVhciB0YWIKK0tFWV9DQVRBQi9DbGVhciBhbGwgdGFicworS0VZX0VOVEVSL0VudGVyIG9yIHNlbmQKK0tFWV9TUkVTRVQvU29mdCAocGFydGlhbCkgcmVzZXQKK0tFWV9SRVNFVC9SZXNldCBvciBoYXJkIHJlc2V0CitLRVlfUFJJTlQvUHJpbnQgb3IgY29weQorS0VZX0xML0hvbWUgZG93biBvciBib3R0b20gKGxvd2VyIGxlZnQpCitLRVlfQTEvVXBwZXIgbGVmdCBvZiBrZXlwYWQKK0tFWV9BMy9VcHBlciByaWdodCBvZiBrZXlwYWQKK0tFWV9CMi9DZW50ZXIgb2Yga2V5cGFkCitLRVlfQzEvTG93ZXIgbGVmdCBvZiBrZXlwYWQKK0tFWV9DMy9Mb3dlciByaWdodCBvZiBrZXlwYWQKK0tFWV9CVEFCL0JhY2sgdGFiIGtleQorS0VZX0JFRy9CZWcoaW5uaW5nKSBrZXkKK0tFWV9DQU5DRUwvQ2FuY2VsIGtleQorS0VZX0NMT1NFL0Nsb3NlIGtleQorS0VZX0NPTU1BTkQvQ21kIChjb21tYW5kKSBrZXkKK0tFWV9DT1BZL0NvcHkga2V5CitLRVlfQ1JFQVRFL0NyZWF0ZSBrZXkKK0tFWV9FTkQvRW5kIGtleQorS0VZX0VYSVQvRXhpdCBrZXkKK0tFWV9GSU5EL0ZpbmQga2V5CitLRVlfSEVMUC9IZWxwIGtleQorS0VZX01BUksvTWFyayBrZXkKK0tFWV9NRVNTQUdFL01lc3NhZ2Uga2V5CitLRVlfTU9VU0UvTW91c2UgZXZlbnQgcmVhZAorS0VZX01PVkUvTW92ZSBrZXkKK0tFWV9ORVhUL05leHQgb2JqZWN0IGtleQorS0VZX09QRU4vT3BlbiBrZXkKK0tFWV9PUFRJT05TL09wdGlvbnMga2V5CitLRVlfUFJFVklPVVMvUHJldmlvdXMgb2JqZWN0IGtleQorS0VZX1JFRE8vUmVkbyBrZXkKK0tFWV9SRUZFUkVOQ0UvUmVmKGVyZW5jZSkga2V5CitLRVlfUkVGUkVTSC9SZWZyZXNoIGtleQorS0VZX1JFUExBQ0UvUmVwbGFjZSBrZXkKK0tFWV9SRVNJWkUvU2NyZWVuIHJlc2l6ZWQKK0tFWV9SRVNUQVJUL1Jlc3RhcnQga2V5CitLRVlfUkVTVU1FL1Jlc3VtZSBrZXkKK0tFWV9TQVZFL1NhdmUga2V5CitLRVlfU0JFRy9TaGlmdGVkIGJlZ2lubmluZyBrZXkKK0tFWV9TQ0FOQ0VML1NoaWZ0ZWQgY2FuY2VsIGtleQorS0VZX1NDT01NQU5EL1NoaWZ0ZWQgY29tbWFuZCBrZXkKK0tFWV9TQ09QWS9TaGlmdGVkIGNvcHkga2V5CitLRVlfU0NSRUFURS9TaGlmdGVkIGNyZWF0ZSBrZXkKK0tFWV9TREMvU2hpZnRlZCBkZWxldGUgY2hhciBrZXkKK0tFWV9TREwvU2hpZnRlZCBkZWxldGUgbGluZSBrZXkKK0tFWV9TRUxFQ1QvU2VsZWN0IGtleQorS0VZX1NFTkQvU2hpZnRlZCBlbmQga2V5CitLRVlfU0VPTC9TaGlmdGVkIGNsZWFyIGxpbmUga2V5CitLRVlfU0VYSVQvU2hpZnRlZCBleGl0IGtleQorS0VZX1NGSU5EL1NoaWZ0ZWQgZmluZCBrZXkKK0tFWV9TSEVMUC9TaGlmdGVkIGhlbHAga2V5CitLRVlfU0hPTUUvU2hpZnRlZCBob21lIGtleQorS0VZX1NJQy9TaGlmdGVkIGlucHV0IGtleQorS0VZX1NMRUZUL1NoaWZ0ZWQgbGVmdCBhcnJvdyBrZXkKK0tFWV9TTUVTU0FHRS9TaGlmdGVkIG1lc3NhZ2Uga2V5CitLRVlfU01PVkUvU2hpZnRlZCBtb3ZlIGtleQorS0VZX1NORVhUL1NoaWZ0ZWQgbmV4dCBrZXkKK0tFWV9TT1BUSU9OUy9TaGlmdGVkIG9wdGlvbnMga2V5CitLRVlfU1BSRVZJT1VTL1NoaWZ0ZWQgcHJldiBrZXkKK0tFWV9TUFJJTlQvU2hpZnRlZCBwcmludCBrZXkKK0tFWV9TUkVETy9TaGlmdGVkIHJlZG8ga2V5CitLRVlfU1JFUExBQ0UvU2hpZnRlZCByZXBsYWNlIGtleQorS0VZX1NSSUdIVC9TaGlmdGVkIHJpZ2h0IGFycm93CitLRVlfU1JTVU1FL1NoaWZ0ZWQgcmVzdW1lIGtleQorS0VZX1NTQVZFL1NoaWZ0ZWQgc2F2ZSBrZXkKK0tFWV9TU1VTUEVORC9TaGlmdGVkIHN1c3BlbmQga2V5CitLRVlfU1VORE8vU2hpZnRlZCB1bmRvIGtleQorS0VZX1NVU1BFTkQvU3VzcGVuZCBrZXkKK0tFWV9VTkRPL1VuZG8ga2V5CisuVEUKKy5QUAorS2V5cGFkIGlzIGFycmFuZ2VkIGxpa2UgdGhpczoKKy5zcAorLlRTCitjZW50ZXIgYWxsYm94IHRhYigvKSA7CitjIGMgYyAuCitcZkJBMVxmUi9cZkJ1cFxmUi9cZkJBM1xmUgorXGZCbGVmdFxmUi9cZkJCMlxmUi9cZkJyaWdodFxmUgorXGZCQzFcZlIvXGZCZG93blxmUi9cZkJDM1xmUgorLlRFCisuc3AKK1RoZSBcZkJoYXNfa2V5XGZSIHJvdXRpbmUgdGFrZXMgYSBrZXkgdmFsdWUgZnJvbSB0aGUgYWJvdmUgbGlzdCwgYW5kCityZXR1cm5zIFRSVUUgb3IgRkFMU0UgYWNjb3JkaW5nIHRvIHdoZXRoZXIKK3RoZSBjdXJyZW50IHRlcm1pbmFsIHR5cGUgcmVjb2duaXplcyBhIGtleSB3aXRoIHRoYXQgdmFsdWUuCitOb3RlIHRoYXQgYSBmZXcgdmFsdWVzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGEgcmVhbCBrZXksCitlLmcuLCBcZkJLRVlfUkVTSVpFXGZQIGFuZCBcZkJLRVlfTU9VU0VcZlAuCitTZWUgXGZCcmVzaXpldGVybVxmUigzWCkgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBcZkJLRVlfUkVTSVpFXGZQLCBhbmQKK1xmQmN1cnNfbW91c2VcZlIoM1gpIGZvciBhIGRpc2N1c3Npb24gb2YgXGZCS0VZX01PVVNFXGZQLgorLlBQCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIGFuIGludGVnZXIgdmFsdWUKK290aGVyIHRoYW4gXGZCRVJSXGZSIChcZkJPS1xmUiBpbiB0aGUgY2FzZSBvZiB1bmdldGNoKCkpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5SUworLlRQIDUKK1xmQnVuZ2V0Y2hcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZXJlIGlzIG5vIG1vcmUgcm9vbSBpbiB0aGUgRklGTy4KKy5UUCA1CitcZkJ3Z2V0Y2hcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgaXRzIHRpbWVvdXQgZXhwaXJlcyB3aXRob3V0IGhhdmluZyBhbnkgZGF0YS4KKy5SRQorLlNIIE5PVEVTCitVc2Ugb2YgdGhlIGVzY2FwZSBrZXkgYnkgYSBwcm9ncmFtbWVyIGZvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZnVuY3Rpb24gaXMKK2Rpc2NvdXJhZ2VkLCBhcyBpdCB3aWxsIGNhdXNlIGEgZGVsYXkgb2YgdXAgdG8gb25lIHNlY29uZCB3aGlsZSB0aGUKK2tleXBhZCBjb2RlIGxvb2tzIGZvciBhIGZvbGxvd2luZyBmdW5jdGlvbi1rZXkgc2VxdWVuY2UuCisuUFAKK05vdGUgdGhhdCBzb21lIGtleXMgbWF5IGJlIHRoZSBzYW1lIGFzIGNvbW1vbmx5IHVzZWQgY29udHJvbAora2V5cywgZS5nLiwgXGZCS0VZX0VOVEVSXGZQIHZlcnN1cyBjb250cm9sL00sIFxmQktFWV9CQUNLU1BBQ0VcZlAgdmVyc3VzIGNvbnRyb2wvSC4KK1NvbWUgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBtYXkgZGlmZmVyIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZXkKK3RyZWF0IHRoZXNlIGNvbnRyb2wga2V5cyBzcGVjaWFsbHkgKGFuZCBpZ25vcmUgdGhlIHRlcm1pbmZvKSwgb3IKK3VzZSB0aGUgdGVybWluZm8gZGVmaW5pdGlvbnMuCitcZkJOY3Vyc2VzXGZSIHVzZXMgdGhlIHRlcm1pbmZvIGRlZmluaXRpb24uCitJZiBpdCBzYXlzIHRoYXQgXGZCS0VZX0VOVEVSXGZQIGlzIGNvbnRyb2wvTSwKK1xmQmdldGNoXGZSIHdpbGwgcmV0dXJuIFxmQktFWV9FTlRFUlxmUAord2hlbiB5b3UgcHJlc3MgY29udHJvbC9NLgorLlBQCitXaGVuIHVzaW5nIFxmQmdldGNoXGZSLCBcZkJ3Z2V0Y2hcZlIsIFxmQm12Z2V0Y2hcZlIsIG9yCitcZkJtdndnZXRjaFxmUiwgbm9jYnJlYWsgbW9kZSAoXGZCbm9jYnJlYWtcZlIpIGFuZCBlY2hvIG1vZGUKKyhcZkJlY2hvXGZSKSBzaG91bGQgbm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZS4KK0RlcGVuZGluZyBvbiB0aGUKK3N0YXRlIG9mIHRoZSB0dHkgZHJpdmVyIHdoZW4gZWFjaCBjaGFyYWN0ZXIgaXMgdHlwZWQsIHRoZSBwcm9ncmFtIG1heQorcHJvZHVjZSB1bmRlc2lyYWJsZSByZXN1bHRzLgorLlBQCitOb3RlIHRoYXQgXGZCZ2V0Y2hcZlIsIFxmQm12Z2V0Y2hcZlIsIGFuZCBcZkJtdndnZXRjaFxmUiBtYXkgYmUgbWFjcm9zLgorLlBQCitIaXN0b3JpY2FsbHksIHRoZSBzZXQgb2Yga2V5cGFkIG1hY3JvcyB3YXMgbGFyZ2VseSBkZWZpbmVkIGJ5IHRoZSBleHRyZW1lbHkKK2Z1bmN0aW9uLWtleS1yaWNoIGtleWJvYXJkIG9mIHRoZSBBVCZUIDczMDAsIGFrYSAzQjEsIGFrYSBTYWZhcmkgNC4KK01vZGVybgorcGVyc29uYWwgY29tcHV0ZXJzIHVzdWFsbHkgaGF2ZSBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZXNlLgorSUJNIFBDLXN0eWxlCitjb25zb2xlcyB0eXBpY2FsbHkgc3VwcG9ydCBsaXR0bGUgbW9yZSB0aGFuIFxmQktFWV9VUFxmUiwgXGZCS0VZX0RPV05cZlIsCitcZkJLRVlfTEVGVFxmUiwgXGZCS0VZX1JJR0hUXGZSLCBcZkJLRVlfSE9NRVxmUiwgXGZCS0VZX0VORFxmUiwKK1xmQktFWV9OUEFHRVxmUiwgXGZCS0VZX1BQQUdFXGZSLCBhbmQgZnVuY3Rpb24ga2V5cyAxIHRocm91Z2ggMTIuCitUaGUgSW5zIGtleQoraXMgdXN1YWxseSBtYXBwZWQgdG8gXGZCS0VZX0lDXGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGUgKmdldCogZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCitUaGV5CityZWFkIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMgb25seS4KK1RoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGV5IHJldHVybgorXGZCRVJSXGZSIG9uIGZhaWx1cmUsIGJ1dCBzcGVjaWZpZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKy5QUAorVGhlIGVjaG8gYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zIG9uIGlucHV0IG9mIFxmQktFWV9cZlIgb3IgYmFja3NwYWNlCitjaGFyYWN0ZXJzIHdhcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBTVnI0IGRvY3VtZW50YXRpb24uCitUaGlzIGRlc2NyaXB0aW9uIGlzCithZG9wdGVkIGZyb20gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQuCisuUFAKK1RoZSBiZWhhdmlvciBvZiBcZkJnZXRjaFxmUiBhbmQgZnJpZW5kcyBpbiB0aGUgcHJlc2VuY2Ugb2YgaGFuZGxlZCBzaWduYWxzIGlzCit1bnNwZWNpZmllZCBpbiB0aGUgU1ZyNCBhbmQgWFNJIEN1cnNlcyBkb2N1bWVudGF0aW9uLgorVW5kZXIgaGlzdG9yaWNhbCBjdXJzZXMKK2ltcGxlbWVudGF0aW9ucywgaXQgdmFyaWVkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MKK2ltcGxlbWVudGF0aW9uIG9mIGhhbmRsZWQgc2lnbmFsIHJlY2VpcHQgaW50ZXJydXB0cyBhIFxmQnJlYWRcZlIoMikgY2FsbCBpbgorcHJvZ3Jlc3Mgb3Igbm90LCBhbmQgYWxzbyAoaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMpIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFuCitpbnB1dCB0aW1lb3V0IG9yIG5vbi1ibG9ja2luZyBtb2RlIGhhcyBiZWVuIHNldC4KKy5QUAorUHJvZ3JhbW1lcnMgY29uY2VybmVkIGFib3V0IHBvcnRhYmlsaXR5IHNob3VsZCBiZSBwcmVwYXJlZCBmb3IgZWl0aGVyIG9mIHR3bworY2FzZXM6IChhKSBzaWduYWwgcmVjZWlwdCBkb2VzIG5vdCBpbnRlcnJ1cHQgXGZCZ2V0Y2hcZlI7IChiKSBzaWduYWwgcmVjZWlwdAoraW50ZXJydXB0cyBcZkJnZXRjaFxmUiBhbmQgY2F1c2VzIGl0IHRvIHJldHVybiBFUlIgd2l0aCBcZkJlcnJub1xmUiBzZXQgdG8KK1xmQkVJTlRSXGZSLgorVW5kZXIgdGhlIFxmQm5jdXJzZXNcZlIgaW1wbGVtZW50YXRpb24sIGhhbmRsZWQgc2lnbmFscyBuZXZlcgoraW50ZXJydXB0IFxmQmdldGNoXGZSLgorLlBQCitUaGUgXGZCaGFzX2tleVxmUiBmdW5jdGlvbiBpcyB1bmlxdWUgdG8gXGZCbmN1cnNlc1xmUi4KK1dlIHJlY29tbWVuZCB0aGF0CithbnkgY29kZSB1c2luZyBpdCBiZSBjb25kaXRpb25hbGl6ZWQgb24gdGhlIFxmQk5DVVJTRVNfVkVSU0lPTlxmUiBmZWF0dXJlIG1hY3JvLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbm9wdHNcZlIoM1gpLAorXGZCY3Vyc19tb3VzZVxmUigzWCksCitcZkJjdXJzX21vdmVcZlIoM1gpLAorXGZCY3Vyc19yZWZyZXNoXGZSKDNYKSwKK1xmQnJlc2l6ZXRlcm1cZlIoM1gpLgorLlBQCitDb21wYXJhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgKG5jdXJzZXN3KSBsaWJyYXJ5IGFyZQorZGVzY3JpYmVkIGluCitcZkJjdXJzX2dldF93Y2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19nZXRzdHIuM3ggYi9tYW4vY3Vyc19nZXRzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMTc2NQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2dldHN0ci4zeApAQCAtMCwwICsxLDEyMiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2dldHN0ci4zeCx2IDEuMTUgMjAwNi8wMS8xMiAwMDozMDo1OCB0b20gRXhwICQKKy5USCBjdXJzX2dldHN0ciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmdldHN0clxmUiwKK1xmQmdldG5zdHJcZlIsCitcZkJ3Z2V0c3RyXGZSLAorXGZCd2dldG5zdHJcZlIsCitcZkJtdmdldHN0clxmUiwKK1xmQm12Z2V0bnN0clxmUiwKK1xmQm12d2dldHN0clxmUiwKK1xmQm12d2dldG5zdHJcZlIgLSBhY2NlcHQgY2hhcmFjdGVyIHN0cmluZ3MgZnJvbSBcZkJjdXJzZXNcZlIgdGVybWluYWwga2V5Ym9hcmQKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGdldHN0cihjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgZ2V0bnN0cihjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHdnZXRzdHIoV0lORE9XICp3aW4sIGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCB3Z2V0bnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdmdldHN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCBtdndnZXRzdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IG12Z2V0bnN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ3Z2V0bnN0cihXSU5ET1cgKiwgaW50IHksIGludCB4LCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCZ2V0c3RyXGZSIGlzIGVxdWl2YWxlbnQgdG8gYSBzZXJpZXMgb2YgY2FsbHMgdG8gXGZCZ2V0Y2hcZlIsCit1bnRpbCBhIG5ld2xpbmUgb3IgY2FycmlhZ2UgcmV0dXJuIGlzIHJlY2VpdmVkICh0aGUgdGVybWluYXRpbmcgY2hhcmFjdGVyIGlzCitub3QgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZykuICBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHBsYWNlZCBpbiB0aGUKK2FyZWEgcG9pbnRlZCB0byBieSB0aGUgY2hhcmFjdGVyIHBvaW50ZXIgXGZJc3RyXGZSLgorLlBQCitcZkJ3Z2V0bnN0clxmUiByZWFkcyBhdCBtb3N0IFxmSW5cZlIgY2hhcmFjdGVycywgdGh1cyBwcmV2ZW50aW5nIGEgcG9zc2libGUKK292ZXJmbG93IG9mIHRoZSBpbnB1dCBidWZmZXIuICBBbnkgYXR0ZW1wdCB0byBlbnRlciBtb3JlIGNoYXJhY3RlcnMgKG90aGVyCit0aGFuIHRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9yIGNhcnJpYWdlIHJldHVybikgY2F1c2VzIGEgYmVlcC4gIEZ1bmN0aW9uCitrZXlzIGFsc28gY2F1c2UgYSBiZWVwIGFuZCBhcmUgaWdub3JlZC4gIFRoZSBcZkJnZXRuc3RyXGZSIGZ1bmN0aW9uIHJlYWRzCitmcm9tIHRoZSBcZklzdGRzY3JcZlIgZGVmYXVsdCB3aW5kb3cuCisuUFAKK1RoZSB1c2VyJ3MgZXJhc2UgYW5kIGtpbGwgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQuICBJZiBrZXlwYWQKK21vZGUgaXMgb24gZm9yIHRoZSB3aW5kb3csIFxmQktFWV9MRUZUXGZSIGFuZCBcZkJLRVlfQkFDS1NQQUNFXGZSCithcmUgYm90aCBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gdGhlIHVzZXIncyBraWxsIGNoYXJhY3Rlci4KKy5QUAorQ2hhcmFjdGVycyBpbnB1dCBhcmUgZWNob2VkIG9ubHkgaWYgXGZCZWNob1xmUiBpcyBjdXJyZW50bHkgb24uICBJbiB0aGF0IGNhc2UsCitiYWNrc3BhY2UgaXMgZWNob2VkIGFzIGRlbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgKHR5cGljYWxseSBhIGxlZnQKK21vdGlvbikuCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIGFuIFxmQk9LXGZSIChTVnI0CitzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKy5QUAorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwKK3RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgaXRzIHRpbWVvdXQgZXhwaXJlcyB3aXRob3V0IGhhdmluZyBhbnkgZGF0YS4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhbiBleHRlbnNpb24gYXMgd2VsbC4KK0lmIGEgU0lHV0lOQ0ggaW50ZXJydXB0cyB0aGUgZnVuY3Rpb24sIGl0IHdpbGwgcmV0dXJuIFxmQktFWV9SRVNJWkVcZlAKK3JhdGhlciB0aGFuIFxmQk9LXGZQIG9yIFxmQkVSUlxmUC4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQmdldHN0clxmUiwgXGZCbXZnZXRzdHJcZlIsIGFuZCBcZkJtdndnZXRzdHJcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCitUaGV5IHJlYWQgc2luZ2xlLWJ5dGUgY2hhcmFjdGVycyBvbmx5LgorVGhlIHN0YW5kYXJkIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBFUlIgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsCitvciBpZiB0aGUgbG93ZXItbGV2ZWwgXGZCd2dldGNoXGZSIGNhbGwgcmV0dXJucyBhbiBFUlIuCisuUFAKK1NWcjMgYW5kIGVhcmx5IFNWcjQgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBkaWQgbm90IHJlamVjdCBmdW5jdGlvbiBrZXlzOwordGhlIFNWcjQuMCBkb2N1bWVudGF0aW9uIGNsYWltZWQgdGhhdCAic3BlY2lhbCBrZXlzIiAoc3VjaCBhcyBmdW5jdGlvbgora2V5cywgImhvbWUiIGtleSwgImNsZWFyIiBrZXksIFxmSWV0Y1xmUi4pIGFyZSAiaW50ZXJwcmV0ZWQiLCB3aXRob3V0CitnaXZpbmcgZGV0YWlscy4gIEl0IGxpZWQuICBJbiBmYWN0LCB0aGUgYGNoYXJhY3RlcicgdmFsdWUgYXBwZW5kZWQgdG8gdGhlCitzdHJpbmcgYnkgdGhvc2UgaW1wbGVtZW50YXRpb25zIHdhcyBwcmVkaWN0YWJsZSBidXQgbm90IHVzZWZ1bAorKGJlaW5nLCBpbiBmYWN0LCB0aGUgbG93LW9yZGVyIGVpZ2h0IGJpdHMgb2YgdGhlIGtleSdzIEtFWV8gdmFsdWUpLgorLlBQCitUaGUgZnVuY3Rpb25zIFxmQmdldG5zdHJcZlIsIFxmQm12Z2V0bnN0clxmUiwgYW5kIFxmQm12d2dldG5zdHJcZlIgd2VyZQorcHJlc2VudCBidXQgbm90IGRvY3VtZW50ZWQgaW4gU1ZyNC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19nZXRjaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2dldHl4LjN4IGIvbWFuL2N1cnNfZ2V0eXguM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4MTI1MwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2dldHl4LjN4CkBAIC0wLDAgKzEsMTA2IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfZ2V0eXguM3gsdiAxLjE2IDIwMDcvMDUvMTIgMTY6MzQ6NDkgdG9tIEV4cCAkCisuVEggY3Vyc19nZXR5eCAzWCAiIgorLlNIIE5BTUUKK1xmQmdldHl4XGZSLAorXGZCZ2V0cGFyeXhcZlIsCitcZkJnZXRiZWd5eFxmUiwKK1xmQmdldG1heHl4XGZSIC0gZ2V0IFxmQmN1cnNlc1xmUiBjdXJzb3IgYW5kIHdpbmRvdyBjb29yZGluYXRlcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQnZvaWQgZ2V0eXgoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQnZvaWQgZ2V0cGFyeXgoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQnZvaWQgZ2V0YmVneXgoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQnZvaWQgZ2V0bWF4eXgoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmdldHl4XGZSIG1hY3JvIHBsYWNlcyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gb2YgdGhlIGdpdmVuIHdpbmRvdyBpbgordGhlIHR3byBpbnRlZ2VyIHZhcmlhYmxlcyBcZkl5XGZSIGFuZCBcZkl4XGZSLgorLlBQCitJZiBcZkl3aW5cZlIgaXMgYSBzdWJ3aW5kb3csIHRoZSBcZkJnZXRwYXJ5eFxmUiBtYWNybyBwbGFjZXMgdGhlIGJlZ2lubmluZworY29vcmRpbmF0ZXMgb2YgdGhlIHN1YndpbmRvdyByZWxhdGl2ZSB0byB0aGUgcGFyZW50IHdpbmRvdyBpbnRvIHR3byBpbnRlZ2VyCit2YXJpYWJsZXMgXGZJeVxmUiBhbmQgXGZJeFxmUi4KK090aGVyd2lzZSwgXGZCLTFcZlIgaXMgcGxhY2VkIGludG8gXGZJeVxmUiBhbmQgXGZJeFxmUi4KKy5QUAorTGlrZSBcZkJnZXR5eFxmUiwgdGhlIFxmQmdldGJlZ3l4XGZSIGFuZCBcZkJnZXRtYXh5eFxmUiBtYWNyb3Mgc3RvcmUKK3RoZSBjdXJyZW50IGJlZ2lubmluZyBjb29yZGluYXRlcyBhbmQgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkIHdpbmRvdy4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSByZXR1cm4gdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBhcmUgdW5kZWZpbmVkIChpLmUuLAordGhleSBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IHN0YXRlbWVudHMpLgorLlNIIE5PVEVTCitBbGwgb2YgdGhlc2UgaW50ZXJmYWNlcyBhcmUgbWFjcm9zLgorQSAiXGZCJlxmUiIgaXMgbm90IG5lY2Vzc2FyeSBiZWZvcmUgdGhlIHZhcmlhYmxlcyBcZkl5XGZSIGFuZCBcZkl4XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGUKK1xmQmdldHl4XGZSLAorXGZCZ2V0cGFyeXhcZlIsCitcZkJnZXRiZWd5eFxmUiBhbmQKK1xmQmdldG1heHl4XGZSCittYWNyb3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucworXGZCZ2V0YmVneFxmUiwKK1xmQmdldGJlZ3lcZlIsCitcZkJnZXRjdXJ4XGZSLAorXGZCZ2V0Y3VyeVxmUiwKK1xmQmdldG1heHhcZlIsCitcZkJnZXRtYXh5XGZSLAorXGZCZ2V0cGFyeFxmUiBhbmQKK1xmQmdldHBhcnlcZlIKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY3Vyc2VzLgorLlBQCitBbHRob3VnaCBYL09wZW4gQ3Vyc2VzIGRvZXMgbm90IGFkZHJlc3MgdGhpcywKK21hbnkgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgbWVtYmVycyBvZiB0aGUgV0lORE9XIHN0cnVjdHVyZQorY29udGFpbmluZyB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGVzZSBtYWNyb3MuCitGb3IgYmVzdCBwb3J0YWJpbGl0eSwgZG8gbm90IHJlbHkgb24gdXNpbmcgdGhlIGRhdGEgaW4gV0lORE9XLAorc2luY2Ugc29tZSBpbXBsZW1lbnRhdGlvbnMgbWFrZSBXSU5ET1cgb3BhcXVlIChkbyBub3QgYWxsb3cKK2RpcmVjdCB1c2Ugb2YgaXRzIG1lbWJlcnMpLgorLlBQCitCZXNpZGVzIHRoZSBwcm9ibGVtIG9mIG9wYXF1ZSBzdHJ1Y3R1cmVzLAordGhlIGRhdGEgc3RvcmVkIGluIGxpa2UtbmFtZWQgbWVtYmVycyBtYXkgbm90IGhhdmUgbGlrZS12YWx1ZXMgaW4KK2RpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCitGb3IgZXhhbXBsZSwgdGhlIFdJTkRPVy5fbWF4eCBhbmQgV0lORE9XLl9tYXh5IHZhbHVlcyBpbiBuY3Vyc2VzCitoYXZlIChhdCBsZWFzdCBzaW5jZSByZWxlYXNlIDEuOC4xKSBkaWZmZXJlZCBieSBvbmUgZnJvbSBzb21lCitvdGhlciBpbXBsZW1lbnRhdGlvbnMuCitUaGUgZGlmZmVyZW5jZSBpcyBoaWRkZW4gYnkgbWVhbnMgb2YgdGhlIG1hY3JvIFxmQmdldG1heHl4XGZQLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19sZWdhY3lcZlIoM1gpLAorXGZCY3Vyc19vcGFxdWVcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2luX3djaC4zeCBiL21hbi9jdXJzX2luX3djaC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA5ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfaW5fd2NoLjN4CkBAIC0wLDAgKzEsNjggQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbl93Y2guM3gsdiAxLjIgMjAwNi8wMi8yNSAyMTo0MjoyMiB0b20gRXhwICQKKy5USCBjdXJzX2luX3djaCAzWCAiIgorLlNIIE5BTUUKK1xmQmluX3djaFxmUiwKK1xmQm12aW5fd2NoXGZSLAorXGZCbXZ3aW5fd2NoXGZSLAorXGZCd2luX3djaFxmUiAtIGV4dHJhY3QgYSBjb21wbGV4IGNoYXJhY3RlciBhbmQgcmVuZGl0aW9uIGZyb20gYSB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgaW5fd2NoKGNjaGFyX3QgKlxmUlxmSXdjdmFsXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5fd2NoKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2N2YWxcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5fd2NoKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjdmFsXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdpbl93Y2goV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjdmFsXGZSXGZCKTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIGV4dHJhY3QgdGhlIGNvbXBsZXggY2hhcmFjdGVyIGFuZCByZW5kaXRpb24gZnJvbQordGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIG5hbWVkIHdpbmRvdyBpbnRvIHRoZSBcZkJjY2hhcl90XGZSIG9iamVjdAorcmVmZXJlbmNlZCBieSB3Y3ZhbC4KKy5TSCBSRVRVUk4gVkFMVUUKK05vIGVycm9ycyBhcmUgZGVmaW5lZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZC4KK1RoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIGZvciBudWxsIHBvaW50ZXJzLCByZXR1cm5zIEVSUiBpbiB0aGF0IGNhc2UuCitBbHNvLCB0aGUgXGZJbXZcZlIgcm91dGluZXMgY2hlY2sgZm9yIGVycm9yIG1vdmluZyB0aGUgY3Vyc29yLCByZXR1cm5pbmcgRVJSCitpbiB0aGF0IGNhc2UuCitPdGhlcndpc2UgdGhleSByZXR1cm4gT0sKKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCBvZiB0aGVzZSByb3V0aW5lcyBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfaW5jaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2luX3djaHN0ci4zeCBiL21hbi9jdXJzX2luX3djaHN0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRhMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfaW5fd2Noc3RyLjN4CkBAIC0wLDAgKzEsMTIyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5fd2Noc3RyLjN4LHYgMS42IDIwMDYvMTIvMDIgMTc6MDM6MDcgdG9tIEV4cCAkCisuVEggY3Vyc19pbl93Y2hzdHIgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJpbl93Y2hzdHJcZlIsCitcZkJpbl93Y2huc3RyXGZSLAorXGZCd2luX3djaHN0clxmUiwKK1xmQndpbl93Y2huc3RyXGZSLAorXGZCbXZpbl93Y2hzdHJcZlIsCitcZkJtdmluX3djaG5zdHJcZlIsCitcZkJtdndpbl93Y2hzdHJcZlIsCitcZkJtdndpbl93Y2huc3RyXGZSIFwtIGdldCBhbiBhcnJheSBvZiBjb21wbGV4IGNoYXJhY3RlcnMgYW5kIHJlbmRpdGlvbnMgZnJvbSBhIGN1cnNlcyB3aW5kb3cKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKKy5uZgorXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgaW5fd2Noc3RyKGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBpbl93Y2huc3RyKGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2luX3djaHN0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdpbl93Y2huc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5fd2Noc3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5fd2NobnN0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5fd2Noc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbl93Y2huc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUiwgaW50IFxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYW4gYXJyYXkgb2YgY29tcGxleCBjaGFyYWN0ZXJzIGluIFxmSXdjaHN0clxmUiwKK3N0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgbmFtZWQgd2luZG93LgorQXR0cmlidXRlcyAocmVuZGl0aW9uKSBhcmUgc3RvcmVkIHdpdGggdGhlIGNoYXJhY3RlcnMuCisuUFAKK1RoZQorXGZCaW5fd2NobnN0clxmUiwKK1xmQm12aW5fd2NobnN0clxmUiwKK1xmQm12d2luX3djaG5zdHJcZlIKK2FuZAorXGZCd2luX3djaG5zdHJcZlIKK2ZpbGwgdGhlIGFycmF5Cit3aXRoIGF0IG1vc3QKK1xmSW5cZlIKK1xmQmNjaGFyX3RcZlIKK2VsZW1lbnRzLgorLmJyCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0CitcZkJ3aW5fd2NobnN0clxmUgorbWF5IGJlCittYWNyb3MuCisuUFAKK1JlYWRpbmcgYSBsaW5lIHRoYXQgb3ZlcmZsb3dzIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5CitcZkl3Y2hzdHJcZlIKK3dpdGgKK1xmQmluX3djaHN0clxmUiwKK1xmQm12aW5fd2Noc3RyXGZSLAorXGZCbXZ3aW5fd2Noc3RyXGZSCitvcgorXGZCd2luX3djaHN0clxmUgorY2F1c2VzIHVuZGVmaW5lZCByZXN1bHRzLiBUaGVyZWZvcmUsIHRoZSB1c2Ugb2YKK1xmQmluX3djaG5zdHJcZlIsCitcZkJtdmluX3djaG5zdHJcZlIsCitcZkJtdndpbl93Y2huc3RyXGZSLCBvcgorXGZCd2luX3djaG5zdHJcZlIKK2lzIHJlY29tbWVuZGVkLgorLlNIIFJFVFVSTiBWQUxVRVMKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuCitcZkJPS1xmUi4KK090aGVyd2lzZSwgdGhleSByZXR1cm4KK1xmQkVSUlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yIG51bGwgcG9pbnRlcnMsCityZXR1cm5pbmcgRVJSIGluIHRoYXQgY2FzZS4KKy5TSCBTRUUgQUxTTworRnVuY3Rpb25zOgorXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfaW5fd2NoXGZSKDNYKSwKK1xmQmN1cnNfaW5zdHJcZlIoM1gpLAorXGZCY3Vyc19pbndzdHJcZlIoM1gpCitcZkJjdXJzX2luY2hzdHJcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2luY2guM3ggYi9tYW4vY3Vyc19pbmNoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTFiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19pbmNoLjN4CkBAIC0wLDAgKzEsNzcgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5jaC4zeCx2IDEuMTMgMjAwNi8xMi8wMiAxNjo1ODo1NSB0b20gRXhwICQKKy5USCBjdXJzX2luY2ggM1ggIiIKKy5TSCBOQU1FCitcZkJpbmNoXGZSLCBcZkJ3aW5jaFxmUiwgXGZCbXZpbmNoXGZSLCBcZkJtdndpbmNoXGZSCistIGdldCBhIGNoYXJhY3RlciBhbmQgYXR0cmlidXRlcyBmcm9tIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmNodHlwZSBpbmNoKHZvaWQpO1xmUgorLmJyCitcZkJjaHR5cGUgd2luY2goV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJjaHR5cGUgbXZpbmNoKGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmNodHlwZSBtdndpbmNoKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIHJldHVybiB0aGUgY2hhcmFjdGVyLCBvZiB0eXBlIFxmQmNodHlwZVxmUiwgYXQgdGhlIGN1cnJlbnQKK3Bvc2l0aW9uIGluIHRoZSBuYW1lZCB3aW5kb3cuICBJZiBhbnkgYXR0cmlidXRlcyBhcmUgc2V0IGZvciB0aGF0IHBvc2l0aW9uLAordGhlaXIgdmFsdWVzIGFyZSBPUidlZCBpbnRvIHRoZSB2YWx1ZSByZXR1cm5lZC4gIENvbnN0YW50cyBkZWZpbmVkIGluCitcZkI8Y3Vyc2VzLmg+XGZSIGNhbiBiZSB1c2VkIHdpdGggdGhlIFxmQiZcZlIgKGxvZ2ljYWwgQU5EKSBvcGVyYXRvciB0bworZXh0cmFjdCB0aGUgY2hhcmFjdGVyIG9yIGF0dHJpYnV0ZXMgYWxvbmUuCisuCisuU1MgQXR0cmlidXRlcworVGhlIGZvbGxvd2luZyBiaXQtbWFza3MgbWF5IGJlIEFORC1lZCB3aXRoIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgXGZCd2luY2hcZlIuCisuCisuVFMKK2wgbCAuCitcZkJBX0NIQVJURVhUXGZSCUJpdC1tYXNrIHRvIGV4dHJhY3QgY2hhcmFjdGVyCitcZkJBX0FUVFJJQlVURVNcZlIJQml0LW1hc2sgdG8gZXh0cmFjdCBhdHRyaWJ1dGVzCitcZkJBX0NPTE9SXGZSCUJpdC1tYXNrIHRvIGV4dHJhY3QgY29sb3ItcGFpciBmaWVsZCBpbmZvcm1hdGlvbgorLlRFCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgb2YgdGhlc2Ugcm91dGluZXMgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkuCisuUFAKK0NvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpIGxpYnJhcnkgYXJlCitkZXNjcmliZWQgaW4KK1xmQmN1cnNfaW5fd2NoXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfaW5jaHN0ci4zeCBiL21hbi9jdXJzX2luY2hzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMjFkYwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2luY2hzdHIuM3gKQEAgLTAsMCArMSwxMDEgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbmNoc3RyLjN4LHYgMS4xMiAyMDA2LzEyLzAyIDE3OjAwOjU4IHRvbSBFeHAgJAorLlRIIGN1cnNfaW5jaHN0ciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmluY2hzdHJcZlIsCitcZkJpbmNobnN0clxmUiwKK1xmQndpbmNoc3RyXGZSLAorXGZCd2luY2huc3RyXGZSLAorXGZCbXZpbmNoc3RyXGZSLAorXGZCbXZpbmNobnN0clxmUiwKK1xmQm12d2luY2hzdHJcZlIsCitcZkJtdndpbmNobnN0clxmUiAtIGdldCBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIChhbmQgYXR0cmlidXRlcykgZnJvbSBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGluY2hzdHIoY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCBpbmNobnN0cihjaHR5cGUgKmNoc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCB3aW5jaHN0cihXSU5ET1cgKndpbiwgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCB3aW5jaG5zdHIoV0lORE9XICp3aW4sIGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12aW5jaHN0cihpbnQgeSwgaW50IHgsIGNodHlwZSAqY2hzdHIpO1xmUgorLmJyCitcZkJpbnQgbXZpbmNobnN0cihpbnQgeSwgaW50IHgsIGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12d2luY2hzdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCBtdndpbmNobnN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgKmNoc3RyLCBpbnQgbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgcmV0dXJuIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIFxmQmNodHlwZVxmUiBxdWFudGl0aWVzLAorc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBuYW1lZCB3aW5kb3cgYW5kIGVuZGluZyBhdCB0aGUKK3JpZ2h0IG1hcmdpbiBvZiB0aGUgd2luZG93LiAgVGhlIGZvdXIgZnVuY3Rpb25zIHdpdGggXGZJblxmUiBhcwordGhlIGxhc3QgYXJndW1lbnQsIHJldHVybiBhIGxlYWRpbmcgc3Vic3RyaW5nIGF0IG1vc3QgXGZJblxmUiBjaGFyYWN0ZXJzIGxvbmcKKyhleGNsdXNpdmUgb2YgdGhlIHRyYWlsaW5nIChjaHR5cGUpMCkuCitDb25zdGFudHMgZGVmaW5lZCBpbiBcZkI8Y3Vyc2VzLmg+XGZSIGNhbiBiZSB1c2VkIHdpdGggdGhlIFxmQiZcZlIgKGxvZ2ljYWwKK0FORCkgb3BlcmF0b3IgdG8gZXh0cmFjdCB0aGUgY2hhcmFjdGVyIG9yIHRoZSBhdHRyaWJ1dGUgYWxvbmUgZnJvbSBhbnkgcG9zaXRpb24KK2luIHRoZSBcZkljaHN0clxmUiBbc2VlIFxmQmN1cnNfaW5jaFxmUigzWCldLgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBhbiBpbnRlZ2VyIHZhbHVlCitvdGhlciB0aGFuIFxmQkVSUlxmUiB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiAodGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCityZXRyaWV2ZWQsIGV4Y2x1c2l2ZSBvZiB0aGUgdHJhaWxpbmcgMCkuCisuUFAKK05vIGVycm9yIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQuCitJZiB0aGUgXGZJY2hzdHJcZlAgcGFyYW1ldGVyIGlzIG51bGwsCitubyBkYXRhIGlzIHJldHVybmVkLAorYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCByb3V0aW5lcyBleGNlcHQgXGZCd2luY2huc3RyXGZSIG1heSBiZSBtYWNyb3MuICBTVnI0IGRvZXMgbm90Citkb2N1bWVudCB3aGV0aGVyIHRoZSByZXN1bHQgc3RyaW5nIGlzIDAtdGVybWluYXRlZDsgaXQgZG9lcyBub3QgZG9jdW1lbnQKK3doZXRoZXIgYSBsZW5ndGggbGltaXQgYXJndW1lbnQgaW5jbHVkZXMgYW55IHRyYWlsaW5nIDA7IGFuZCBpdCBkb2VzIG5vdAorZG9jdW1lbnQgdGhlIG1lYW5pbmcgb2YgdGhlIHJldHVybiB2YWx1ZS4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuICBJdCBpcyBubworbW9yZSBzcGVjaWZpYyB0aGFuIHRoZSBTVnI0IGRvY3VtZW50YXRpb24gb24gdGhlIHRyYWlsaW5nIDAuICBJdCBkb2VzIHNwZWNpZnkKK3RoYXQgdGhlIHN1Y2Nlc3NmdWwgcmV0dXJuIG9mIHRoZSBmdW5jdGlvbnMgaXMgXGZCT0tcZlIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfaW5jaFxmUigzWCkuCisuUFAKK0NvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpIGxpYnJhcnkgYXJlCitkZXNjcmliZWQgaW4KK1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfaW5pdHNjci4zeCBiL21hbi9jdXJzX2luaXRzY3IuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4NjVmOQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2luaXRzY3IuM3gKQEAgLTAsMCArMSwxMzIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbml0c2NyLjN4LHYgMS4xNCAyMDA1LzA1LzE1IDE2OjE4OjAxIHRvbSBFeHAgJAorLlRIIGN1cnNfaW5pdHNjciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmluaXRzY3JcZlIsCitcZkJuZXd0ZXJtXGZSLAorXGZCZW5kd2luXGZSLAorXGZCaXNlbmR3aW5cZlIsCitcZkJzZXRfdGVybVxmUiwKK1xmQmRlbHNjcmVlblxmUiAtIFxmQmN1cnNlc1xmUiBzY3JlZW4gaW5pdGlhbGl6YXRpb24gYW5kIG1hbmlwdWxhdGlvbiByb3V0aW5lcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJXSU5ET1cgKmluaXRzY3Iodm9pZCk7XGZSCisuYnIKK1xmQmludCBlbmR3aW4odm9pZCk7XGZSCisuYnIKK1xmQmJvb2wgaXNlbmR3aW4odm9pZCk7XGZSCisuYnIKK1xmQlNDUkVFTiAqbmV3dGVybShjaGFyICp0eXBlLCBGSUxFICpvdXRmZCwgRklMRSAqaW5mZCk7XGZSCisuYnIKK1xmQlNDUkVFTiAqc2V0X3Rlcm0oU0NSRUVOICpuZXcpO1xmUgorLmJyCitcZkJ2b2lkIGRlbHNjcmVlbihTQ1JFRU4qIHNwKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitcZkJpbml0c2NyXGZSIGlzIG5vcm1hbGx5IHRoZSBmaXJzdCBcZkJjdXJzZXNcZlIgcm91dGluZSB0byBjYWxsIHdoZW4KK2luaXRpYWxpemluZyBhIHByb2dyYW0uICBBIGZldyBzcGVjaWFsIHJvdXRpbmVzIHNvbWV0aW1lcyBuZWVkIHRvIGJlCitjYWxsZWQgYmVmb3JlIGl0OyB0aGVzZSBhcmUgXGZCc2xrX2luaXRcZlIsIFxmQmZpbHRlclxmUiwgXGZCcmlwb2ZmbGluZVxmUiwKK1xmQnVzZV9lbnZcZlIuICBGb3IgbXVsdGlwbGUtdGVybWluYWwgYXBwbGljYXRpb25zLCBcZkJuZXd0ZXJtXGZSIG1heSBiZQorY2FsbGVkIGJlZm9yZSBcZkJpbml0c2NyXGZSLgorLlBQCitUaGUgaW5pdHNjciBjb2RlIGRldGVybWluZXMgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIGluaXRpYWxpemVzIGFsbCBcZkJjdXJzZXNcZlIKK2RhdGEgc3RydWN0dXJlcy4gIFxmQmluaXRzY3JcZlIgYWxzbyBjYXVzZXMgdGhlIGZpcnN0IGNhbGwgdG8gXGZCcmVmcmVzaFxmUiB0bworY2xlYXIgdGhlIHNjcmVlbi4gIElmIGVycm9ycyBvY2N1ciwgXGZCaW5pdHNjclxmUiB3cml0ZXMgYW4gYXBwcm9wcmlhdGUgZXJyb3IKK21lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIGV4aXRzOyBvdGhlcndpc2UsIGEgcG9pbnRlciBpcyByZXR1cm5lZCB0bworXGZCc3Rkc2NyXGZSLgorLlBQCitBIHByb2dyYW0gdGhhdCBvdXRwdXRzIHRvIG1vcmUgdGhhbiBvbmUgdGVybWluYWwgc2hvdWxkIHVzZSB0aGUgXGZCbmV3dGVybVxmUgorcm91dGluZSBmb3IgZWFjaCB0ZXJtaW5hbCBpbnN0ZWFkIG9mIFxmQmluaXRzY3JcZlIuICBBIHByb2dyYW0gdGhhdCBuZWVkcyB0bworaW5zcGVjdCBjYXBhYmlsaXRpZXMsIHNvIGl0IGNhbiBjb250aW51ZSB0byBydW4gaW4gYSBsaW5lLW9yaWVudGVkIG1vZGUgaWYgdGhlCit0ZXJtaW5hbCBjYW5ub3Qgc3VwcG9ydCBhIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtLCB3b3VsZCBhbHNvIHVzZQorXGZCbmV3dGVybVxmUi4gIFRoZSByb3V0aW5lIFxmQm5ld3Rlcm1cZlIgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoCit0ZXJtaW5hbC4gIEl0IHJldHVybnMgYSB2YXJpYWJsZSBvZiB0eXBlIFxmQlNDUkVFTiAqXGZSIHdoaWNoIHNob3VsZCBiZSBzYXZlZAorYXMgYSByZWZlcmVuY2UgdG8gdGhhdCB0ZXJtaW5hbC4gIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBcZkl0eXBlXGZSIG9mIHRoZQordGVybWluYWwgdG8gYmUgdXNlZCBpbiBwbGFjZSBvZiBcZkIkVEVSTVxmUiwgYSBmaWxlIHBvaW50ZXIgZm9yIG91dHB1dCB0byB0aGUKK3Rlcm1pbmFsLCBhbmQgYW5vdGhlciBmaWxlIHBvaW50ZXIgZm9yIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsIChpZiBcZkl0eXBlXGZSCitpcyBcZkJOVUxMXGZSLCBcZkIkVEVSTVxmUiB3aWxsIGJlIHVzZWQpLiAgVGhlIHByb2dyYW0gbXVzdCBhbHNvIGNhbGwKK1xmQmVuZHdpblxmUiBmb3IgZWFjaCB0ZXJtaW5hbCBiZWluZyB1c2VkIGJlZm9yZSBleGl0aW5nIGZyb20gXGZCY3Vyc2VzXGZSLgorSWYgXGZCbmV3dGVybVxmUiBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgZm9yIHRoZSBzYW1lIHRlcm1pbmFsLCB0aGUgZmlyc3QKK3Rlcm1pbmFsIHJlZmVycmVkIHRvIG11c3QgYmUgdGhlIGxhc3Qgb25lIGZvciB3aGljaCBcZkJlbmR3aW5cZlIgaXMgY2FsbGVkLgorLlBQCitBIHByb2dyYW0gc2hvdWxkIGFsd2F5cyBjYWxsIFxmQmVuZHdpblxmUiBiZWZvcmUgZXhpdGluZyBvciBlc2NhcGluZyBmcm9tCitcZkJjdXJzZXNcZlIgbW9kZSB0ZW1wb3JhcmlseS4gIFRoaXMgcm91dGluZSByZXN0b3JlcyB0dHkgbW9kZXMsIG1vdmVzIHRoZQorY3Vyc29yIHRvIHRoZSBsb3dlciBsZWZ0LWhhbmQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kIHJlc2V0cyB0aGUgdGVybWluYWwgaW50bwordGhlIHByb3BlciBub24tdmlzdWFsIG1vZGUuICBDYWxsaW5nIFxmQnJlZnJlc2hcZlIgb3IgXGZCZG91cGRhdGVcZlIgYWZ0ZXIgYQordGVtcG9yYXJ5IGVzY2FwZSBjYXVzZXMgdGhlIHByb2dyYW0gdG8gcmVzdW1lIHZpc3VhbCBtb2RlLgorLlBQCitUaGUgXGZCaXNlbmR3aW5cZlIgcm91dGluZSByZXR1cm5zIFxmQlRSVUVcZlIgaWYgXGZCZW5kd2luXGZSIGhhcyBiZWVuCitjYWxsZWQgd2l0aG91dCBhbnkgc3Vic2VxdWVudCBjYWxscyB0byBcZkJ3cmVmcmVzaFxmUiwgYW5kIFxmQkZBTFNFXGZSCitvdGhlcndpc2UuCisuUFAKK1RoZSBcZkJzZXRfdGVybVxmUiByb3V0aW5lIGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50Cit0ZXJtaW5hbHMuICBUaGUgc2NyZWVuIHJlZmVyZW5jZSBcZkJuZXdcZlIgYmVjb21lcyB0aGUgbmV3IGN1cnJlbnQKK3Rlcm1pbmFsLiAgVGhlIHByZXZpb3VzIHRlcm1pbmFsIGlzIHJldHVybmVkIGJ5IHRoZSByb3V0aW5lLiAgVGhpcyBpcwordGhlIG9ubHkgcm91dGluZSB3aGljaCBtYW5pcHVsYXRlcyBcZkJTQ1JFRU5cZlIgcG9pbnRlcnM7IGFsbCBvdGhlcgorcm91dGluZXMgYWZmZWN0IG9ubHkgdGhlIGN1cnJlbnQgdGVybWluYWwuCisuUFAKK1RoZSBcZkJkZWxzY3JlZW5cZlIgcm91dGluZSBmcmVlcyBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUKK1xmQlNDUkVFTlxmUiBkYXRhIHN0cnVjdHVyZS4gIFRoZSBcZkJlbmR3aW5cZlIgcm91dGluZSBkb2VzIG5vdCBkbwordGhpcywgc28gXGZCZGVsc2NyZWVuXGZSIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgXGZCZW5kd2luXGZSIGlmIGEKK3BhcnRpY3VsYXIgXGZCU0NSRUVOXGZSIGlzIG5vIGxvbmdlciBuZWVkZWQuCisuU0ggUkVUVVJOIFZBTFVFCitcZkJlbmR3aW5cZlIgcmV0dXJucyB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUgordXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisuUFAKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIGFsd2F5cyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KK1xmQmVuZHdpblxmUCByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCB3YXMgbm90IGluaXRpYWxpemVkLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCaW5pdHNjclxmUiBhbmQgXGZCbmV3dGVybVxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIEl0CitzcGVjaWZpZXMgdGhhdCBwb3J0YWJsZSBhcHBsaWNhdGlvbnMgbXVzdCBub3QgY2FsbCBcZkJpbml0c2NyXGZSIG1vcmUgdGhhbgorb25jZS4KKy5QUAorT2xkIHZlcnNpb25zIG9mIGN1cnNlcywgZS5nLiwgQlNEIDQuNCwgbWF5IGhhdmUgcmV0dXJuZWQgYSBudWxsIHBvaW50ZXIKK2Zyb20gXGZCaW5pdHNjclxmUiB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLCByYXRoZXIgdGhhbiBleGl0aW5nLgorSXQgaXMgc2FmZSBidXQgcmVkdW5kYW50IHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgXGZCaW5pdHNjclxmUgoraW4gWFNJIEN1cnNlcy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19rZXJuZWxcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpLAorXGZCY3Vyc19zbGtcZlIoM1gpLCBcZkJjdXJzX3V0aWxcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2lub3B0cy4zeCBiL21hbi9jdXJzX2lub3B0cy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjVhMTdiCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfaW5vcHRzLjN4CkBAIC0wLDAgKzEsMjQyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5vcHRzLjN4LHYgMS4xMyAyMDA1LzA1LzE1IDE2OjE4OjA3IHRvbSBFeHAgJAorLlRIIGN1cnNfaW5vcHRzIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCY2JyZWFrXGZSLAorXGZCbm9jYnJlYWtcZlIsCitcZkJlY2hvXGZSLAorXGZCbm9lY2hvXGZSLAorXGZCaGFsZmRlbGF5XGZSLAorXGZCaW50cmZsdXNoXGZSLAorXGZCa2V5cGFkXGZSLAorXGZCbWV0YVxmUiwKK1xmQm5vZGVsYXlcZlIsCitcZkJub3RpbWVvdXRcZlIsCitcZkJyYXdcZlIsCitcZkJub3Jhd1xmUiwKK1xmQm5vcWlmbHVzaFxmUiwKK1xmQnFpZmx1c2hcZlIsCitcZkJ0aW1lb3V0XGZSLAorXGZCd3RpbWVvdXRcZlIsCitcZkJ0eXBlYWhlYWRcZlIgLSBcZkJjdXJzZXNcZlIgaW5wdXQgb3B0aW9ucworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgY2JyZWFrKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgbm9jYnJlYWsodm9pZCk7XGZSCisuYnIKK1xmQmludCBlY2hvKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgbm9lY2hvKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgaGFsZmRlbGF5KGludCB0ZW50aHMpO1xmUgorLmJyCitcZkJpbnQgaW50cmZsdXNoKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCaW50IGtleXBhZChXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQmludCBtZXRhKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCaW50IG5vZGVsYXkoV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJpbnQgcmF3KHZvaWQpO1xmUgorLmJyCitcZkJpbnQgbm9yYXcodm9pZCk7XGZSCisuYnIKK1xmQnZvaWQgbm9xaWZsdXNoKHZvaWQpO1xmUgorLmJyCitcZkJ2b2lkIHFpZmx1c2godm9pZCk7XGZSCisuYnIKK1xmQmludCBub3RpbWVvdXQoV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJ2b2lkIHRpbWVvdXQoaW50IGRlbGF5KTtcZlIKKy5icgorXGZCdm9pZCB3dGltZW91dChXSU5ET1cgKndpbiwgaW50IGRlbGF5KTtcZlIKKy5icgorXGZCaW50IHR5cGVhaGVhZChpbnQgZmQpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK05vcm1hbGx5LCB0aGUgdHR5IGRyaXZlciBidWZmZXJzIHR5cGVkIGNoYXJhY3RlcnMgdW50aWwgYSBuZXdsaW5lIG9yIGNhcnJpYWdlCityZXR1cm4gaXMgdHlwZWQuICBUaGUgXGZCY2JyZWFrXGZSIHJvdXRpbmUgZGlzYWJsZXMgbGluZSBidWZmZXJpbmcgYW5kCitlcmFzZS9raWxsIGNoYXJhY3Rlci1wcm9jZXNzaW5nIChpbnRlcnJ1cHQgYW5kIGZsb3cgY29udHJvbCBjaGFyYWN0ZXJzIGFyZQordW5hZmZlY3RlZCksIG1ha2luZyBjaGFyYWN0ZXJzIHR5cGVkIGJ5IHRoZSB1c2VyIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0byB0aGUKK3Byb2dyYW0uICBUaGUgXGZCbm9jYnJlYWtcZlIgcm91dGluZSByZXR1cm5zIHRoZSB0ZXJtaW5hbCB0byBub3JtYWwgKGNvb2tlZCkKK21vZGUuCisuUFAKK0luaXRpYWxseSB0aGUgdGVybWluYWwgbWF5IG9yIG1heSBub3QgYmUgaW4gXGZCY2JyZWFrXGZSIG1vZGUsIGFzIHRoZSBtb2RlIGlzCitpbmhlcml0ZWQ7IHRoZXJlZm9yZSwgYSBwcm9ncmFtIHNob3VsZCBjYWxsIFxmQmNicmVha1xmUiBvciBcZkJub2NicmVha1xmUgorZXhwbGljaXRseS4gIE1vc3QgaW50ZXJhY3RpdmUgcHJvZ3JhbXMgdXNpbmcgXGZCY3Vyc2VzXGZSIHNldCB0aGUgXGZCY2JyZWFrXGZSCittb2RlLiAgTm90ZSB0aGF0IFxmQmNicmVha1xmUiBvdmVycmlkZXMgXGZCcmF3XGZSLgorW1NlZSBcZkJjdXJzX2dldGNoXGZSKDNYKSBmb3IgYQorZGlzY3Vzc2lvbiBvZiBob3cgdGhlc2Ugcm91dGluZXMgaW50ZXJhY3Qgd2l0aCBcZkJlY2hvXGZSIGFuZCBcZkJub2VjaG9cZlIuXQorLlBQCitUaGUgXGZCZWNob1xmUiBhbmQgXGZCbm9lY2hvXGZSIHJvdXRpbmVzIGNvbnRyb2wgd2hldGhlciBjaGFyYWN0ZXJzIHR5cGVkIGJ5Cit0aGUgdXNlciBhcmUgZWNob2VkIGJ5IFxmQmdldGNoXGZSIGFzIHRoZXkgYXJlIHR5cGVkLiAgRWNob2luZyBieSB0aGUgdHR5Citkcml2ZXIgaXMgYWx3YXlzIGRpc2FibGVkLCBidXQgaW5pdGlhbGx5IFxmQmdldGNoXGZSIGlzIGluIGVjaG8gbW9kZSwgc28KK2NoYXJhY3RlcnMgdHlwZWQgYXJlIGVjaG9lZC4gIEF1dGhvcnMgb2YgbW9zdCBpbnRlcmFjdGl2ZSBwcm9ncmFtcyBwcmVmZXIgdG8gZG8KK3RoZWlyIG93biBlY2hvaW5nIGluIGEgY29udHJvbGxlZCBhcmVhIG9mIHRoZSBzY3JlZW4sIG9yIG5vdCB0byBlY2hvIGF0IGFsbCwgc28KK3RoZXkgZGlzYWJsZSBlY2hvaW5nIGJ5IGNhbGxpbmcgXGZCbm9lY2hvXGZSLgorW1NlZSBcZkJjdXJzX2dldGNoXGZSKDNYKSBmb3IgYQorZGlzY3Vzc2lvbiBvZiBob3cgdGhlc2Ugcm91dGluZXMgaW50ZXJhY3Qgd2l0aCBcZkJjYnJlYWtcZlIgYW5kCitcZkJub2NicmVha1xmUi5dCisuUFAKK1RoZSBcZkJoYWxmZGVsYXlcZlIgcm91dGluZSBpcyB1c2VkIGZvciBoYWxmLWRlbGF5IG1vZGUsIHdoaWNoIGlzIHNpbWlsYXIgdG8KK1xmQmNicmVha1xmUiBtb2RlIGluIHRoYXQgY2hhcmFjdGVycyB0eXBlZCBieSB0aGUgdXNlciBhcmUgaW1tZWRpYXRlbHkKK2F2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gIEhvd2V2ZXIsIGFmdGVyIGJsb2NraW5nIGZvciBcZkl0ZW50aHNcZlIgdGVudGhzIG9mCitzZWNvbmRzLCBFUlIgaXMgcmV0dXJuZWQgaWYgbm90aGluZyBoYXMgYmVlbiB0eXBlZC4gIFRoZSB2YWx1ZSBvZiBcZkJ0ZW50aHNcZlIKK211c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAyNTUuICBVc2UgXGZCbm9jYnJlYWtcZlIgdG8gbGVhdmUgaGFsZi1kZWxheQorbW9kZS4KKy5QUAorSWYgdGhlIFxmQmludHJmbHVzaFxmUiBvcHRpb24gaXMgZW5hYmxlZCwgKFxmSWJmXGZSIGlzIFxmQlRSVUVcZlIpLCB3aGVuIGFuCitpbnRlcnJ1cHQga2V5IGlzIHByZXNzZWQgb24gdGhlIGtleWJvYXJkIChpbnRlcnJ1cHQsIGJyZWFrLCBxdWl0KSBhbGwgb3V0cHV0IGluCit0aGUgdHR5IGRyaXZlciBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQsIGdpdmluZyB0aGUgZWZmZWN0IG9mIGZhc3RlciByZXNwb25zZSB0bwordGhlIGludGVycnVwdCwgYnV0IGNhdXNpbmcgXGZCY3Vyc2VzXGZSIHRvIGhhdmUgdGhlIHdyb25nIGlkZWEgb2Ygd2hhdCBpcyBvbgordGhlIHNjcmVlbi4gIERpc2FibGluZyAoXGZJYmZcZlIgaXMgXGZCRkFMU0VcZlIpLCB0aGUgb3B0aW9uIHByZXZlbnRzIHRoZQorZmx1c2guICBUaGUgZGVmYXVsdCBmb3IgdGhlIG9wdGlvbiBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgdHR5IGRyaXZlciBzZXR0aW5ncy4KK1RoZSB3aW5kb3cgYXJndW1lbnQgaXMgaWdub3JlZC4KKy5QUAorVGhlIFxmQmtleXBhZFxmUiBvcHRpb24gZW5hYmxlcyB0aGUga2V5cGFkIG9mIHRoZSB1c2VyJ3MgdGVybWluYWwuICBJZgorZW5hYmxlZCAoXGZJYmZcZlIgaXMgXGZCVFJVRVxmUiksIHRoZSB1c2VyIGNhbiBwcmVzcyBhIGZ1bmN0aW9uIGtleQorKHN1Y2ggYXMgYW4gYXJyb3cga2V5KSBhbmQgXGZCd2dldGNoXGZSIHJldHVybnMgYSBzaW5nbGUgdmFsdWUKK3JlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24ga2V5LCBhcyBpbiBcZkJLRVlfTEVGVFxmUi4gIElmIGRpc2FibGVkCisoXGZJYmZcZlIgaXMgXGZCRkFMU0VcZlIpLCBcZkJjdXJzZXNcZlIgZG9lcyBub3QgdHJlYXQgZnVuY3Rpb24ga2V5cworc3BlY2lhbGx5IGFuZCB0aGUgcHJvZ3JhbSBoYXMgdG8gaW50ZXJwcmV0IHRoZSBlc2NhcGUgc2VxdWVuY2VzCitpdHNlbGYuICBJZiB0aGUga2V5cGFkIGluIHRoZSB0ZXJtaW5hbCBjYW4gYmUgdHVybmVkIG9uIChtYWRlIHRvCit0cmFuc21pdCkgYW5kIG9mZiAobWFkZSB0byB3b3JrIGxvY2FsbHkpLCB0dXJuaW5nIG9uIHRoaXMgb3B0aW9uCitjYXVzZXMgdGhlIHRlcm1pbmFsIGtleXBhZCB0byBiZSB0dXJuZWQgb24gd2hlbiBcZkJ3Z2V0Y2hcZlIgaXMKK2NhbGxlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBrZXlwYWQgaXMgZmFsc2UuCisuUFAKK0luaXRpYWxseSwgd2hldGhlciB0aGUgdGVybWluYWwgcmV0dXJucyA3IG9yIDggc2lnbmlmaWNhbnQgYml0cyBvbgoraW5wdXQgZGVwZW5kcyBvbiB0aGUgY29udHJvbCBtb2RlIG9mIHRoZSB0dHkgZHJpdmVyIFtzZWUgdGVybWlvKDcpXS4KK1RvIGZvcmNlIDggYml0cyB0byBiZSByZXR1cm5lZCwgaW52b2tlIFxmQm1ldGFcZlIoXGZJd2luXGZSLAorXGZCVFJVRVxmUik7IHRoaXMgaXMgZXF1aXZhbGVudCwgdW5kZXIgUE9TSVgsIHRvIHNldHRpbmcgdGhlIENTOCBmbGFnCitvbiB0aGUgdGVybWluYWwuICBUbyBmb3JjZSA3IGJpdHMgdG8gYmUgcmV0dXJuZWQsIGludm9rZQorXGZCbWV0YVxmUihcZkl3aW5cZlIsIFxmQkZBTFNFXGZSKTsgdGhpcyBpcyBlcXVpdmFsZW50LCB1bmRlciBQT1NJWCwKK3RvIHNldHRpbmcgdGhlIENTNyBmbGFnIG9uIHRoZSB0ZXJtaW5hbC4gIFRoZSB3aW5kb3cgYXJndW1lbnQsCitcZkl3aW5cZlIsIGlzIGFsd2F5cyBpZ25vcmVkLiAgSWYgdGhlIHRlcm1pbmZvIGNhcGFiaWxpdGllcyBcZkJzbW1cZlIKKyhtZXRhX29uKSBhbmQgXGZCcm1tXGZSIChtZXRhX29mZikgYXJlIGRlZmluZWQgZm9yIHRoZSB0ZXJtaW5hbCwKK1xmQnNtbVxmUiBpcyBzZW50IHRvIHRoZSB0ZXJtaW5hbCB3aGVuIFxmQm1ldGFcZlIoXGZJd2luXGZSLAorXGZCVFJVRVxmUikgaXMgY2FsbGVkIGFuZCBcZkJybW1cZlIgaXMgc2VudCB3aGVuIFxmQm1ldGFcZlIoXGZJd2luXGZSLAorXGZCRkFMU0VcZlIpIGlzIGNhbGxlZC4KKy5QUAorVGhlIFxmQm5vZGVsYXlcZlIgb3B0aW9uIGNhdXNlcyBcZkJnZXRjaFxmUiB0byBiZSBhIG5vbi1ibG9ja2luZyBjYWxsLgorSWYgbm8gaW5wdXQgaXMgcmVhZHksIFxmQmdldGNoXGZSIHJldHVybnMgXGZCRVJSXGZSLiAgSWYgZGlzYWJsZWQKKyhcZkliZlxmUiBpcyBcZkJGQUxTRVxmUiksIFxmQmdldGNoXGZSIHdhaXRzIHVudGlsIGEga2V5IGlzIHByZXNzZWQuCisuUFAKK1doaWxlIGludGVycHJldGluZyBhbiBpbnB1dCBlc2NhcGUgc2VxdWVuY2UsIFxmQndnZXRjaFxmUiBzZXRzIGEgdGltZXIKK3doaWxlIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlci4gIElmIFxmQm5vdGltZW91dChcZlJcZkl3aW5cZlIsCitcZkJUUlVFXGZSKSBpcyBjYWxsZWQsIHRoZW4gXGZCd2dldGNoXGZSIGRvZXMgbm90IHNldCBhIHRpbWVyLiAgVGhlCitwdXJwb3NlIG9mIHRoZSB0aW1lb3V0IGlzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzZXF1ZW5jZXMgcmVjZWl2ZWQKK2Zyb20gYSBmdW5jdGlvbiBrZXkgYW5kIHRob3NlIHR5cGVkIGJ5IGEgdXNlci4KKy5QUAorVGhlIFxmQnJhd1xmUiBhbmQgXGZCbm9yYXdcZlIgcm91dGluZXMgcGxhY2UgdGhlIHRlcm1pbmFsIGludG8gb3Igb3V0IG9mIHJhdworbW9kZS4gIFJhdyBtb2RlIGlzIHNpbWlsYXIgdG8gXGZCY2JyZWFrXGZSIG1vZGUsIGluIHRoYXQgY2hhcmFjdGVycyB0eXBlZCBhcmUKK2ltbWVkaWF0ZWx5IHBhc3NlZCB0aHJvdWdoIHRvIHRoZSB1c2VyIHByb2dyYW0uICBUaGUgZGlmZmVyZW5jZXMgYXJlIHRoYXQgaW4KK3JhdyBtb2RlLCB0aGUgaW50ZXJydXB0LCBxdWl0LCBzdXNwZW5kLCBhbmQgZmxvdyBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGFsbAorcGFzc2VkIHRocm91Z2ggdW5pbnRlcnByZXRlZCwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgc2lnbmFsLiAgVGhlIGJlaGF2aW9yIG9mCit0aGUgQlJFQUsga2V5IGRlcGVuZHMgb24gb3RoZXIgYml0cyBpbiB0aGUgdHR5IGRyaXZlciB0aGF0IGFyZSBub3Qgc2V0IGJ5CitcZkJjdXJzZXNcZlIuCisuUFAKK1doZW4gdGhlIFxmQm5vcWlmbHVzaFxmUiByb3V0aW5lIGlzIHVzZWQsIG5vcm1hbCBmbHVzaCBvZiBpbnB1dCBhbmQKK291dHB1dCBxdWV1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBcZkJJTlRSXGZSLCBcZkJRVUlUXGZSIGFuZAorXGZCU1VTUFxmUiBjaGFyYWN0ZXJzIHdpbGwgbm90IGJlIGRvbmUgW3NlZSB0ZXJtaW8oNyldLiAgV2hlbgorXGZCcWlmbHVzaFxmUiBpcyBjYWxsZWQsIHRoZSBxdWV1ZXMgd2lsbCBiZSBmbHVzaGVkIHdoZW4gdGhlc2UgY29udHJvbAorY2hhcmFjdGVycyBhcmUgcmVhZC4gIFlvdSBtYXkgd2FudCB0byBjYWxsIFxmQm5vcWlmbHVzaCgpXGZSIGluIGEgc2lnbmFsCitoYW5kbGVyIGlmIHlvdSB3YW50IG91dHB1dCB0byBjb250aW51ZSBhcyB0aG91Z2ggdGhlIGludGVycnVwdAoraGFkIG5vdCBvY2N1cnJlZCwgYWZ0ZXIgdGhlIGhhbmRsZXIgZXhpdHMuCisuUFAKK1RoZSBcZkJ0aW1lb3V0XGZSIGFuZCBcZkJ3dGltZW91dFxmUiByb3V0aW5lcyBzZXQgYmxvY2tpbmcgb3IKK25vbi1ibG9ja2luZyByZWFkIGZvciBhIGdpdmVuIHdpbmRvdy4gIElmIFxmSWRlbGF5XGZSIGlzIG5lZ2F0aXZlLAorYmxvY2tpbmcgcmVhZCBpcyB1c2VkIChpLmUuLCB3YWl0cyBpbmRlZmluaXRlbHkgZm9yCitpbnB1dCkuICBJZiBcZklkZWxheVxmUiBpcyB6ZXJvLCB0aGVuIG5vbi1ibG9ja2luZyByZWFkIGlzIHVzZWQKKyhpLmUuLCByZWFkIHJldHVybnMgXGZCRVJSXGZSIGlmIG5vIGlucHV0IGlzIHdhaXRpbmcpLiAgSWYKK1xmSWRlbGF5XGZSIGlzIHBvc2l0aXZlLCB0aGVuIHJlYWQgYmxvY2tzIGZvciBcZklkZWxheVxmUgorbWlsbGlzZWNvbmRzLCBhbmQgcmV0dXJucyBcZkJFUlJcZlIgaWYgdGhlcmUgaXMgc3RpbGwgbm8gaW5wdXQuCitIZW5jZSwgdGhlc2Ugcm91dGluZXMgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIFxmQm5vZGVsYXlcZlIsCitwbHVzIHRoZSBhZGRpdGlvbmFsIGNhcGFiaWxpdHkgb2YgYmVpbmcgYWJsZSB0byBibG9jayBmb3Igb25seQorXGZJZGVsYXlcZlIgbWlsbGlzZWNvbmRzICh3aGVyZSBcZklkZWxheVxmUiBpcyBwb3NpdGl2ZSkuCisuUFAKK1RoZSBcZkJjdXJzZXNcZlIgbGlicmFyeSBkb2VzIGBgbGluZS1icmVha291dCBvcHRpbWl6YXRpb24nJyBieSBsb29raW5nIGZvcgordHlwZWFoZWFkIHBlcmlvZGljYWxseSB3aGlsZSB1cGRhdGluZyB0aGUgc2NyZWVuLiAgSWYgaW5wdXQgaXMgZm91bmQsCithbmQgaXQgaXMgY29taW5nIGZyb20gYSB0dHksIHRoZSBjdXJyZW50IHVwZGF0ZSBpcyBwb3N0cG9uZWQgdW50aWwKK1xmQnJlZnJlc2hcZlIgb3IgXGZCZG91cGRhdGVcZlIgaXMgY2FsbGVkIGFnYWluLiAgVGhpcyBhbGxvd3MgZmFzdGVyCityZXNwb25zZSB0byBjb21tYW5kcyB0eXBlZCBpbiBhZHZhbmNlLiAgTm9ybWFsbHksIHRoZSBpbnB1dCBGSUxFCitwb2ludGVyIHBhc3NlZCB0byBcZkJuZXd0ZXJtXGZSLCBvciBcZkJzdGRpblxmUiBpbiB0aGUgY2FzZSB0aGF0CitcZkJpbml0c2NyXGZSIHdhcyB1c2VkLCB3aWxsIGJlIHVzZWQgdG8gZG8gdGhpcyB0eXBlYWhlYWQgY2hlY2tpbmcuCitUaGUgXGZCdHlwZWFoZWFkXGZSIHJvdXRpbmUgc3BlY2lmaWVzIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvcgorXGZJZmRcZlIgaXMgdG8gYmUgdXNlZCB0byBjaGVjayBmb3IgdHlwZWFoZWFkIGluc3RlYWQuICBJZiBcZklmZFxmUiBpcworLTEsIHRoZW4gbm8gdHlwZWFoZWFkIGNoZWNraW5nIGlzIGRvbmUuCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgT0sgKFNWcjQKK3NwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLAorZnVuY3Rpb25zIHdpdGggYSB3aW5kb3cgcGFyYW1ldGVyIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIGl0IGlzIG51bGwuCitBbnkgZnVuY3Rpb24gd2lsbCBhbHNvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgd2FzIG5vdCBpbml0aWFsaXplZC4KK0Fsc28sCisuUlMKKy5UUCA1CitcZkJoYWxmZGVsYXlcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIGl0cyBwYXJhbWV0ZXIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMS4uMjU1LgorLlJFCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlBQCitUaGUgbmN1cnNlcyBsaWJyYXJ5IG9iZXlzIHRoZSBYUEc0IHN0YW5kYXJkIGFuZCB0aGUgaGlzdG9yaWNhbCBwcmFjdGljZSBvZiB0aGUKK0FUJlQgY3Vyc2VzIGltcGxlbWVudGF0aW9ucywgaW4gdGhhdCB0aGUgZWNobyBiaXQgaXMgY2xlYXJlZCB3aGVuIGN1cnNlcworaW5pdGlhbGl6ZXMgdGhlIHRlcm1pbmFsIHN0YXRlLiAgQlNEIGN1cnNlcyBkaWZmZXJlZCBmcm9tIHRoaXMgc2xpZ2h0bHk7IGl0CitsZWZ0IHRoZSBlY2hvIGJpdCBvbiBhdCBpbml0aWFsaXphdGlvbiwgYnV0IHRoZSBCU0QgXGZCcmF3XGZSIGNhbGwgdHVybmVkIGl0CitvZmYgYXMgYSBzaWRlLWVmZmVjdC4gIEZvciBiZXN0IHBvcnRhYmlsaXR5LCBzZXQgZWNobyBvciBub2VjaG8gZXhwbGljaXRseQoranVzdCBhZnRlciBpbml0aWFsaXphdGlvbiwgZXZlbiBpZiB5b3VyIHByb2dyYW0gcmVtYWlucyBpbiBjb29rZWQgbW9kZS4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQmVjaG9cZlIsIFxmQm5vZWNob1xmUiwgXGZCaGFsZmRlbGF5XGZSLCBcZkJpbnRyZmx1c2hcZlIsCitcZkJtZXRhXGZSLCBcZkJub2RlbGF5XGZSLCBcZkJub3RpbWVvdXRcZlIsIFxmQm5vcWlmbHVzaFxmUiwKK1xmQnFpZmx1c2hcZlIsIFxmQnRpbWVvdXRcZlIsIGFuZCBcZkJ3dGltZW91dFxmUiBtYXkgYmUgbWFjcm9zLgorLlBQCitUaGUgXGZCbm9yYXdcZlIgYW5kIFxmQm5vY2JyZWFrXGZSIGNhbGxzIGZvbGxvdyBoaXN0b3JpY2FsIHByYWN0aWNlIGluIHRoYXQKK3RoZXkgYXR0ZW1wdCB0byByZXN0b3JlIHRvIG5vcm1hbCAoYGNvb2tlZCcpIG1vZGUgZnJvbSByYXcgYW5kIGNicmVhayBtb2RlcworcmVzcGVjdGl2ZWx5LiAgTWl4aW5nIHJhdy9ub3JhdyBhbmQgY2JyZWFrL25vY2JyZWFrIGNhbGxzIGxlYWRzIHRvIHR0eSBkcml2ZXIKK2NvbnRyb2wgc3RhdGVzIHRoYXQgYXJlIGhhcmQgdG8gcHJlZGljdCBvciB1bmRlcnN0YW5kOyBpdCBpcyBub3QgcmVjb21tZW5kZWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfZ2V0Y2hcZlIoM1gpLCBcZkJjdXJzX2luaXRzY3JcZlIoM1gpLCBcZkJ0ZXJtaW9cZlIoNykKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfaW5zX3djaC4zeCBiL21hbi9jdXJzX2luc193Y2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4YTlhMwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2luc193Y2guM3gKQEAgLTAsMCArMSw2NSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2luc193Y2guM3gsdiAxLjMgMjAwNi8wMi8yNSAyMTo0MjoyMiB0b20gRXhwICQKKy5USCBjdXJzX2luc193Y2ggM1ggIiIKKy5TSCBOQU1FCitcZkJpbnNfd2NoXGZSLAorXGZCbXZpbnNfd2NoXGZSLAorXGZCbXZ3aW5zX3djaFxmUiwKK1xmQndpbnNfd2NoXGZSIFwtIGluc2VydCBhIGNvbXBsZXggY2hhcmFjdGVyIGFuZCByZW5kaXRpb24gaW50byBhIHdpbmRvdworLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3Vyc2VzLmg+Cisuc3AKK1xmQmludCBpbnNfd2NoKGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3aW5zX3djaChXSU5ET1cgKlxmUlxmSXdpbiwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5zX3djaChpbnQgXGZSXGZJeSwgaW50IFxmUlxmSXgsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbnNfd2NoKFdJTkRPVyAqXGZSXGZJd2luLCBpbnQgXGZSXGZJeSwgaW50IFxmUlxmSXgsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzLCBpbnNlcnQgdGhlIGNvbXBsZXggY2hhcmFjdGVyIFxmSXdjaFxmUiB3aXRoIHJlbmRpdGlvbgorYmVmb3JlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KK0FsbCBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIGFyZSBtb3ZlZCBvbmUgc3BhY2UgdG8gdGhlIHJpZ2h0LAord2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUgYmVpbmcgbG9zdC4KK1RoZSBpbnNlcnRpb24gb3BlcmF0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3Vyc29yIHBvc2l0aW9uLgorLlNIIFJFVFVSTiBWQUxVRQorSWYgc3VjY2Vzc2Z1bCwgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBPSy4KK0lmIG5vdCwgdGhleSByZXR1cm4gRVJSLgorLlNIIEVSUk9SUworTm8gZXJyb3JzIGFyZSBkZWZpbmVkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbnNjaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2luc193c3RyLjN4IGIvbWFuL2N1cnNfaW5zX3dzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxNTNjNAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2luc193c3RyLjN4CkBAIC0wLDAgKzEsMTA4IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5zX3dzdHIuM3gsdiAxLjQgMjAwNS8wNS8xNSAxNzowMjo1NCB0b20gRXhwICQKKy5USCBjdXJzX2luc193c3RyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCaW5zX3dzdHJcZlIsCitcZkJpbnNfbndzdHJcZlIsCitcZkJ3aW5zX3dzdHJcZlIsCitcZkJ3aW5zX253c3RyXGZSLAorXGZCbXZpbnNfd3N0clxmUiwKK1xmQm12aW5zX253c3RyXGZSLAorXGZCbXZ3aW5zX3dzdHJcZlIsCitcZkJtdndpbnNfbndzdHJcZlIgXC0gaW5zZXJ0IGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGludG8gYSBjdXJzZXMgd2luZG93CisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCisubmYKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGluc193c3RyKGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHIpO1xmUgorLmJyCitcZkJpbnQgaW5zX253c3RyKGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdpbnNfd3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3aW5zX253c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmluc193c3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmluc19ud3N0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2luc193c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5zX253c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBpbnNlcnQgYSBcZkJ3Y2hhcl90XGZSIGNoYXJhY3RlciBzdHJpbmcKKyhhcyBtYW55IGNoYXJhY3RlcnMgYXMgd2lsbCBmaXQgb24gdGhlIGxpbmUpCitiZWZvcmUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorQWxsIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IgYXJlIHNoaWZ0ZWQgcmlnaHQsCit3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlcnMgb24gdGhlIGxpbmUgYmVpbmcgbG9zdC4KK05vIHdyYXBwaW5nIGlzIHBlcmZvcm1lZC4KK1RoZSBjdXJzb3IgcG9zaXRpb24gZG9lcyBub3QgY2hhbmdlCisoYWZ0ZXIgbW92aW5nIHRvIFxmSXlcZlIsIFxmSXhcZlIsIGlmIHNwZWNpZmllZCkuCitUaGUgZm91ciByb3V0aW5lcyB3aXRoIFxmSW5cZlIgYXMgdGhlIGxhc3QgYXJndW1lbnQKK2luc2VydCBhIGxlYWRpbmcgc3Vic3RyaW5nIG9mIGF0IG1vc3QgXGZJblxmUiBcZkJ3Y2hhcl90XGZSIGNoYXJhY3RlcnMuCitJZiBcZkluXGZSIGlzIGxlc3MgdGhhbiAxLCB0aGUgZW50aXJlIHN0cmluZyBpcyBpbnNlcnRlZC4KKy5QUAorSWYgYSBjaGFyYWN0ZXIgaW4gXGZJd3N0clxmUiBpcyBhIHRhYiwgbmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuIG9yCitiYWNrc3BhY2UsIHRoZSBjdXJzb3IgaXMgbW92ZWQgYXBwcm9wcmlhdGVseSB3aXRoaW4gdGhlIHdpbmRvdy4KK0EgbmV3bGluZSBhbHNvIGRvZXMgYSBcZkJjbHJ0b2VvbFxmUiBiZWZvcmUgbW92aW5nLgorVGFicyBhcmUgY29uc2lkZXJlZCB0byBiZSBhdCBldmVyeSBlaWdodGggY29sdW1uLgorSWYgYSBjaGFyYWN0ZXIgaW4gXGZJd3N0clxmUiBpcyBhbm90aGVyIGNvbnRyb2wgY2hhcmFjdGVyLAoraXQgaXMgZHJhd24gaW4gdGhlIFxmQl5cZlJcZklYXGZSIG5vdGF0aW9uLgorQ2FsbGluZyBcZkJ3aW5fd2NoXGZSIGFmdGVyIGFkZGluZyBhIGNvbnRyb2wgY2hhcmFjdGVyCisoYW5kIG1vdmluZyB0byBpdCwgaWYgbmVjZXNzYXJ5KQorZG9lcyBub3QgcmV0dXJuIHRoZSBjb250cm9sIGNoYXJhY3RlciwKK2J1dCBpbnN0ZWFkIHJldHVybnMgYSBjaGFyYWN0ZXIgaW4gdGhlIF4tcmVwcmVzZW50YXRpb24KK29mIHRoZSBjb250cm9sIGNoYXJhY3Rlci4KKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCBidXQgd2luc19ud3N0ciBtYXkgYmUgbWFjcm9zLgorLlBQCitJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXMgYSBub25zcGFjaW5nIGNoYXJhY3RlciwgdGhlc2UKK2Z1bmN0aW9ucyB3aWxsIGZhaWwuCitYU0kgZG9lcyBub3QgZGVmaW5lIHdoYXQgd2lsbCBoYXBwZW4gaWYgYSBub25zcGFjaW5nIGNoYXJhY3RlciBmb2xsb3dzCithIGNvbnRyb2wgY2hhcmFjdGVyLgorLlNIIFJFVFVSTiBWQUxVRVMKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIE9LLgorT3RoZXJ3aXNlLCB0aGV5IHJldHVybiBFUlIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2luc3N0clxmUigzWCksCitcZkJjdXJzX2luX3djaFxmUigzWCksCitcZkJjdXJzX2luc193Y2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19pbnNjaC4zeCBiL21hbi9jdXJzX2luc2NoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWI1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19pbnNjaC4zeApAQCAtMCwwICsxLDc0IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5zY2guM3gsdiAxLjEwIDIwMDYvMTIvMDIgMTc6MDE6NTAgdG9tIEV4cCAkCisuVEggY3Vyc19pbnNjaCAzWCAiIgorLlNIIE5BTUUKK1xmQmluc2NoXGZSLAorXGZCd2luc2NoXGZSLAorXGZCbXZpbnNjaFxmUiwKK1xmQm12d2luc2NoXGZSIC0gaW5zZXJ0IGEgY2hhcmFjdGVyIGJlZm9yZSBjdXJzb3IgaW4gYSBcZkJjdXJzZXNcZlIgd2luZG93CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGluc2NoKGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmludCB3aW5zY2goV0lORE9XICp3aW4sIGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmludCBtdmluc2NoKGludCB5LCBpbnQgeCwgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IG12d2luc2NoKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSBjaCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgaW5zZXJ0IHRoZSBjaGFyYWN0ZXIgXGZJY2hcZlIgYmVmb3JlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlCitjdXJzb3IuICBBbGwgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciBhcmUgbW92ZWQgb25lIHNwYWNlIHRvIHRoZQorcmlnaHQsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGJlaW5nIGxvc3QuCitUaGUgaW5zZXJ0aW9uIG9wZXJhdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGN1cnNvciBwb3NpdGlvbi4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNAorc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKy5TSCBOT1RFUworVGhlc2Ugcm91dGluZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGltcGx5IHVzZSBvZiBhIGhhcmR3YXJlIGluc2VydCBjaGFyYWN0ZXIKK2ZlYXR1cmUuCisuUFAKK05vdGUgdGhhdCBcZkJpbnNjaFxmUiwgXGZCbXZpbnNjaFxmUiwgYW5kIFxmQm12d2luc2NoXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLgorLlBQCitDb21wYXJhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgKG5jdXJzZXN3KSBsaWJyYXJ5IGFyZQorZGVzY3JpYmVkIGluCitcZkJjdXJzX2luc193Y2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19pbnNzdHIuM3ggYi9tYW4vY3Vyc19pbnNzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzNmVhMgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2luc3N0ci4zeApAQCAtMCwwICsxLDEwMSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2luc3N0ci4zeCx2IDEuMTggMjAwNi8xMi8yNCAxNDo1OTozMCB0b20gRXhwICQKKy5USCBjdXJzX2luc3N0ciAzWCAiIgorLlNIIE5BTUUKK1xmQmluc3N0clxmUiwKK1xmQmluc25zdHJcZlIsCitcZkJ3aW5zc3RyXGZSLAorXGZCd2luc25zdHJcZlIsCitcZkJtdmluc3N0clxmUiwKK1xmQm12aW5zbnN0clxmUiwKK1xmQm12d2luc3N0clxmUiwKK1xmQm12d2luc25zdHJcZlIgLSBpbnNlcnQgc3RyaW5nIGJlZm9yZSBjdXJzb3IgaW4gYSBcZkJjdXJzZXNcZlIgd2luZG93CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5icgorXGZCaW50IGluc3N0cihjb25zdCBjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgaW5zbnN0cihjb25zdCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHdpbnNzdHIoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCB3aW5zbnN0cihXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdmluc3N0cihpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCBtdmluc25zdHIoaW50IHksIGludCB4LCBjb25zdCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12d2luc3N0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5zbnN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBpbnNlcnQgYSBjaGFyYWN0ZXIgc3RyaW5nCisoYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHdpbGwgZml0IG9uIHRoZSBsaW5lKQorYmVmb3JlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KK0FsbCBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIGFyZSBzaGlmdGVkIHJpZ2h0Cit3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlcnMgb24gdGhlIGxpbmUgYmVpbmcgbG9zdC4KK1RoZSBjdXJzb3IgcG9zaXRpb24gZG9lcyBub3QgY2hhbmdlCisoYWZ0ZXIgbW92aW5nIHRvIFxmSXlcZlIsIFxmSXhcZlIsIGlmIHNwZWNpZmllZCkuCitUaGUgZnVuY3Rpb25zIHdpdGggXGZJblxmUiBhcyB0aGUgbGFzdCBhcmd1bWVudAoraW5zZXJ0IGEgbGVhZGluZyBzdWJzdHJpbmcgb2YgYXQgbW9zdCBcZkluXGZSIGNoYXJhY3RlcnMuCitJZiBcZkluXGZSPD0wLCB0aGVuIHRoZSBlbnRpcmUgc3RyaW5nIGlzIGluc2VydGVkLgorLlBQCitTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQgYXMgaW4gXGZCYWRkY2hcZlAuCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgT0sgKFNWcjQKK3NwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisuUFAKK1gvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLAoraWYgdGhlIHdpbmRvdyBwYXJhbWV0ZXIgaXMgbnVsbCBvciB0aGUgc3RyIHBhcmFtZXRlciBpcyBudWxsLAorYW4gZXJyb3IgaXMgcmV0dXJuZWQuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgYnV0IFxmQndpbnNuc3RyXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LCB3aGljaCBhZGRzCitjb25zdCBxdWFsaWZpZXJzIHRvIHRoZSBhcmd1bWVudHMuCisuTFAKK1RoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIgc3RhdGVzIHRoYXQgCitcZkJpbnNuc3RyXGZQIGFuZCBcZkJ3aW5zbnN0clxmUCBwZXJmb3JtIHdyYXBwaW5nLgorVGhpcyBpcyBwcm9iYWJseSBhbiBlcnJvciwgc2luY2UgaXQgbWFrZXMgdGhpcyBncm91cCBvZiBmdW5jdGlvbnMgaW5jb25zaXN0ZW50LgorQWxzbywgbm8gaW1wbGVtZW50YXRpb24gb2YgY3Vyc2VzIGRvY3VtZW50cyB0aGlzIGluY29uc2lzdGVuY3kuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX3V0aWxcZlIoM1gpLAorXGZCY3Vyc19jbGVhclxmUigzWCksCitcZkJjdXJzX2luY2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19pbnN0ci4zeCBiL21hbi9jdXJzX2luc3RyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5M2RlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19pbnN0ci4zeApAQCAtMCwwICsxLDg5IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5zdHIuM3gsdiAxLjEzIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc19pbnN0ciAzWCAiIgorLlNIIE5BTUUKK1xmQmluc3RyXGZSLAorXGZCaW5uc3RyXGZSLAorXGZCd2luc3RyXGZSLAorXGZCd2lubnN0clxmUiwKK1xmQm12aW5zdHJcZlIsCitcZkJtdmlubnN0clxmUiwKK1xmQm12d2luc3RyXGZSLAorXGZCbXZ3aW5uc3RyXGZSIC0gZ2V0IGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgZnJvbSBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgaW5zdHIoY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IGlubnN0cihjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHdpbnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IHdpbm5zdHIoV0lORE9XICp3aW4sIGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZpbnN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCBtdmlubnN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5zdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IG12d2lubnN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyByZXR1cm4gYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpbiBcZklzdHJcZlIsIGV4dHJhY3RlZCBzdGFydGluZworYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBuYW1lZCB3aW5kb3cuCitBdHRyaWJ1dGVzIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBjaGFyYWN0ZXJzLiAgVGhlIGZvdXIKK2Z1bmN0aW9ucyB3aXRoIFxmSW5cZlIgYXMgdGhlIGxhc3QgYXJndW1lbnQgcmV0dXJuIGEgbGVhZGluZyBzdWJzdHJpbmcgYXQgbW9zdAorXGZJblxmUiBjaGFyYWN0ZXJzIGxvbmcgKGV4Y2x1c2l2ZSBvZiB0aGUgdHJhaWxpbmcgTlVMKS4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCBvZiB0aGUgZnVuY3Rpb25zIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlLAorb3IgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHJlYWQgaW50byB0aGUgc3RyaW5nLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwKK2lmIHRoZSB3aW5kb3cgcGFyYW1ldGVyIGlzIG51bGwgb3IgdGhlIHN0ciBwYXJhbWV0ZXIgaXMgbnVsbCwKK2EgemVybyBpcyByZXR1cm5lZC4KKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCByb3V0aW5lcyBleGNlcHQgXGZCd2lubnN0clxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitTVnI0IGRvZXMgbm90Citkb2N1bWVudCB3aGV0aGVyIGEgbGVuZ3RoIGxpbWl0IGluY2x1ZGVzIG9yIGV4Y2x1ZGVzIHRoZSB0cmFpbGluZyBOVUwuCisuUFAKK1RoZSBuY3Vyc2VzIGxpYnJhcnkgZXh0ZW5kcyB0aGUgWFNJIGRlc2NyaXB0aW9uIGJ5IGFsbG93aW5nIGEgbmVnYXRpdmUKK3ZhbHVlIGZvciBcZkluXGZSLgorSW4gdGhpcyBjYXNlLCB0aGUgZnVuY3Rpb25zIHJldHVybiB0aGUgc3RyaW5nIGVuZGluZyBhdCB0aGUgcmlnaHQgbWFyZ2luLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19pbndzdHIuM3ggYi9tYW4vY3Vyc19pbndzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwNzg5YwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX2lud3N0ci4zeApAQCAtMCwwICsxLDkzIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW53c3RyLjN4LHYgMS41IDIwMDYvMDIvMjUgMjE6MjA6MjAgdG9tIEV4cCAkCisuVEggY3Vyc19pbndzdHIgM1ggIiIKKy5TSCBOQU1FCitcZkJpbndzdHJcZlIsCitcZkJpbm53c3RyXGZSLAorXGZCd2lud3N0clxmUiwKK1xmQndpbm53c3RyXGZSLAorXGZCbXZpbndzdHJcZlIsCitcZkJtdmlubndzdHJcZlIsCitcZkJtdndpbndzdHJcZlIsCitcZkJtdndpbm53c3RyXGZSIFwtIGdldCBhIHN0cmluZyBvZiBcZkJ3Y2hhcl90XGZSIGNoYXJhY3RlcnMgZnJvbSBhIGN1cnNlcyB3aW5kb3cKKy5TSCBTWU5PUFNJUworLm5mCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+IFxmUgorLnNwCitcZkJpbnQgaW53c3RyKFxmUlxmQndjaGFyX3QgKlxmUlxmSXN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBpbm53c3RyKFxmUlxmQndjaGFyX3QgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2lud3N0cihcZlJcZkJXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdpbm53c3RyKFxmUlxmQldJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCB3Y2hhcl90ICpcZlJcZklzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW53c3RyKFxmUlxmQmludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5ud3N0cihcZlJcZkJpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdjaGFyX3QgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW53c3RyKFxmUlxmQldJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdjaGFyX3QgKlxmUlxmSXN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbm53c3RyKFxmUlxmQldJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdjaGFyX3QgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIHJldHVybiBhIHN0cmluZyBvZiBcZkJ3Y2hhcl90XGZSIGNoYXJhY3RlcnMgaW4gXGZJd3N0clxmUiwKK2V4dHJhY3RlZCBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIG5hbWVkIHdpbmRvdy4KK0F0dHJpYnV0ZXMgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGNoYXJhY3RlcnMuCitUaGUgZm91ciBmdW5jdGlvbnMgd2l0aCBcZkluXGZSIGFzIHRoZSBsYXN0IGFyZ3VtZW50IHJldHVybiBhIGxlYWRpbmcgc3Vic3RyaW5nIGF0IG1vc3QKK1xmSW5cZlIgYnl0ZXMgbG9uZyAoZXhjbHVzaXZlIG9mIHRoZSB0cmFpbGluZyBOVUwpLgorVHJhbnNmZXIgc3RvcHMgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLCBvciB3aGVuIFxmSW5cZlIgYnl0ZXMgaGF2ZQorYmVlbiBzdG9yZWQgYXQgdGhlIGxvY2F0aW9uIHJlZmVyZW5jZWQgYnkgXGZJd3N0clxmUi4KKy5QUAorSWYgdGhlIHNpemUgXGZJblxmUiBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGEgY29tcGxldGUgY2hhcmFjdGVyLAorYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdAorXGZCd2lubndzdHJcZlIKK21heSBiZSBtYWNyb3MuCisuU0ggUkVUVVJOIFZBTFVFUworQWxsIHJvdXRpbmVzIHJldHVybgorXGZCRVJSXGZSCit1cG9uIGZhaWx1cmUuIFVwb24KK3N1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdGhlICpcZkJpbndzdHJcZlIKK3JvdXRpbmVzIHJldHVybgorXGZCT0tcZlIsIGFuZCB0aGUgKlxmQmlubndzdHJcZlIKK3JvdXRpbmVzIHJldHVybiB0aGUKK251bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB0aGUgc3RyaW5nLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbnN0clxmUigzWCksCitcZkJjdXJzX2luX3djaHN0clxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfa2VybmVsLjN4IGIvbWFuL2N1cnNfa2VybmVsLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDM5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19rZXJuZWwuM3gKQEAgLTAsMCArMSwxODYgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAxLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfa2VybmVsLjN4LHYgMS4xNSAyMDA1LzA1LzE1IDE2OjE4OjEzIHRvbSBFeHAgJAorLlRIIGN1cnNfa2VybmVsIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZGVmX3Byb2dfbW9kZVxmUiwKK1xmQmRlZl9zaGVsbF9tb2RlXGZSLAorXGZCcmVzZXRfcHJvZ19tb2RlXGZSLAorXGZCcmVzZXRfc2hlbGxfbW9kZVxmUiwKK1xmQnJlc2V0dHlcZlIsCitcZkJzYXZldHR5XGZSLAorXGZCZ2V0c3l4XGZSLAorXGZCc2V0c3l4XGZSLAorXGZCcmlwb2ZmbGluZVxmUiwKK1xmQmN1cnNfc2V0XGZSLAorXGZCbmFwbXNcZlIgLSBsb3ctbGV2ZWwgXGZCY3Vyc2VzXGZSIHJvdXRpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBkZWZfcHJvZ19tb2RlKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgZGVmX3NoZWxsX21vZGUodm9pZCk7XGZSCisuYnIKK1xmQmludCByZXNldF9wcm9nX21vZGUodm9pZCk7XGZSCisuYnIKK1xmQmludCByZXNldF9zaGVsbF9tb2RlKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgcmVzZXR0eSh2b2lkKTtcZlIKKy5icgorXGZCaW50IHNhdmV0dHkodm9pZCk7XGZSCisuYnIKK1xmQnZvaWQgZ2V0c3l4KGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQnZvaWQgc2V0c3l4KGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmludCByaXBvZmZsaW5lKGludCBsaW5lLCBpbnQgKCppbml0KShXSU5ET1cgKiwgaW50KSk7XGZSCisuYnIKK1xmQmludCBjdXJzX3NldChpbnQgdmlzaWJpbGl0eSk7XGZSCisuYnIKK1xmQmludCBuYXBtcyhpbnQgbXMpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmb2xsb3dpbmcgcm91dGluZXMgZ2l2ZSBsb3ctbGV2ZWwgYWNjZXNzIHRvIHZhcmlvdXMgXGZCY3Vyc2VzXGZSCitjYXBhYmlsaXRpZXMuICBUaGVzZXMgcm91dGluZXMgdHlwaWNhbGx5IGFyZSB1c2VkIGluc2lkZSBsaWJyYXJ5Cityb3V0aW5lcy4KKy5QUAorVGhlIFxmQmRlZl9wcm9nX21vZGVcZlIgYW5kIFxmQmRlZl9zaGVsbF9tb2RlXGZSIHJvdXRpbmVzIHNhdmUgdGhlCitjdXJyZW50IHRlcm1pbmFsIG1vZGVzIGFzIHRoZSAicHJvZ3JhbSIgKGluIFxmQmN1cnNlc1xmUikgb3IgInNoZWxsIgorKG5vdCBpbiBcZkJjdXJzZXNcZlIpIHN0YXRlIGZvciB1c2UgYnkgdGhlIFxmQnJlc2V0X3Byb2dfbW9kZVxmUiBhbmQKK1xmQnJlc2V0X3NoZWxsX21vZGVcZlIgcm91dGluZXMuICBUaGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSBieQorXGZCaW5pdHNjclxmUi4gIFRoZXJlIGlzIG9uZSBzdWNoIHNhdmUgYXJlYSBmb3IgZWFjaCBzY3JlZW4gY29udGV4dAorYWxsb2NhdGVkIGJ5IFxmQm5ld3Rlcm0oKVxmUi4KKy5QUAorVGhlIFxmQnJlc2V0X3Byb2dfbW9kZVxmUiBhbmQgXGZCcmVzZXRfc2hlbGxfbW9kZVxmUiByb3V0aW5lcyByZXN0b3JlCit0aGUgdGVybWluYWwgdG8gInByb2dyYW0iIChpbiBcZkJjdXJzZXNcZlIpIG9yICJzaGVsbCIgKG91dCBvZgorXGZCY3Vyc2VzXGZSKSBzdGF0ZS4gIFRoZXNlIGFyZSBkb25lIGF1dG9tYXRpY2FsbHkgYnkgXGZCZW5kd2luXGZSCithbmQsIGFmdGVyIGFuIFxmQmVuZHdpblxmUiwgYnkgXGZCZG91cGRhdGVcZlIsIHNvIHRoZXkgbm9ybWFsbHkgYXJlCitub3QgY2FsbGVkLgorLlBQCitUaGUgXGZCcmVzZXR0eVxmUiBhbmQgXGZCc2F2ZXR0eVxmUiByb3V0aW5lcyBzYXZlIGFuZCByZXN0b3JlIHRoZQorc3RhdGUgb2YgdGhlIHRlcm1pbmFsIG1vZGVzLiAgXGZCc2F2ZXR0eVxmUiBzYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBpbgorYSBidWZmZXIgYW5kIFxmQnJlc2V0dHlcZlIgcmVzdG9yZXMgdGhlIHN0YXRlIHRvIHdoYXQgaXQgd2FzIGF0IHRoZQorbGFzdCBjYWxsIHRvIFxmQnNhdmV0dHlcZlIuCisuUFAKK1RoZSBcZkJnZXRzeXhcZlIgcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IGNvb3JkaW5hdGVzIG9mIHRoZSB2aXJ0dWFsIHNjcmVlbgorY3Vyc29yIGluIFxmSXlcZlIgYW5kIFxmSXhcZlIuICBJZiBcZkJsZWF2ZW9rXGZSIGlzIGN1cnJlbnRseSBcZkJUUlVFXGZSLCB0aGVuCitcZkItMVxmUixcZkItMVxmUiBpcyByZXR1cm5lZC4gIElmIGxpbmVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHRvcCBvZiB0aGUKK3NjcmVlbiwgdXNpbmcgXGZCcmlwb2ZmbGluZVxmUiwgXGZJeVxmUiBhbmQgXGZJeFxmUiBpbmNsdWRlIHRoZXNlIGxpbmVzOwordGhlcmVmb3JlLCBcZkl5XGZSIGFuZCBcZkl4XGZSIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgYXJndW1lbnRzIGZvcgorXGZCc2V0c3l4XGZSLgorLlBQCitUaGUgXGZCc2V0c3l4XGZSIHJvdXRpbmUgc2V0cyB0aGUgdmlydHVhbCBzY3JlZW4gY3Vyc29yIHRvCitcZkl5XGZSLCBcZkl4XGZSLiAgSWYgXGZJeVxmUiBhbmQgXGZJeFxmUiBhcmUgYm90aCBcZkItMVxmUiwgdGhlbgorXGZCbGVhdmVva1xmUiBpcyBzZXQuICBUaGUgdHdvIHJvdXRpbmVzIFxmQmdldHN5eFxmUiBhbmQgXGZCc2V0c3l4XGZSCithcmUgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBhIGxpYnJhcnkgcm91dGluZSwgd2hpY2ggbWFuaXB1bGF0ZXMKK1xmQmN1cnNlc1xmUiB3aW5kb3dzIGJ1dCBkb2VzIG5vdCB3YW50IHRvIGNoYW5nZSB0aGUgY3VycmVudCBwb3NpdGlvbgorb2YgdGhlIHByb2dyYW0ncyBjdXJzb3IuICBUaGUgbGlicmFyeSByb3V0aW5lIHdvdWxkIGNhbGwgXGZCZ2V0c3l4XGZSCithdCB0aGUgYmVnaW5uaW5nLCBkbyBpdHMgbWFuaXB1bGF0aW9uIG9mIGl0cyBvd24gd2luZG93cywgZG8gYQorXGZCd25vdXRyZWZyZXNoXGZSIG9uIGl0cyB3aW5kb3dzLCBjYWxsIFxmQnNldHN5eFxmUiwgYW5kIHRoZW4gY2FsbAorXGZCZG91cGRhdGVcZlIuCisuUFAKK1RoZSBcZkJyaXBvZmZsaW5lXGZSIHJvdXRpbmUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBzYW1lIGZhY2lsaXR5IHRoYXQKK1xmQnNsa19pbml0XGZSIFtzZWUgXGZCY3Vyc19zbGtcZlIoM1gpXSB1c2VzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUKK3NjcmVlbi4gIFxmQnJpcG9mZmxpbmVcZlIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIFxmQmluaXRzY3JcZlIgb3IKK1xmQm5ld3Rlcm1cZlIgaXMgY2FsbGVkLiAgSWYgXGZJbGluZVxmUiBpcyBwb3NpdGl2ZSwgYSBsaW5lIGlzIHJlbW92ZWQKK2Zyb20gdGhlIHRvcCBvZiBcZkJzdGRzY3JcZlI7IGlmIFxmSWxpbmVcZlIgaXMgbmVnYXRpdmUsIGEgbGluZSBpcworcmVtb3ZlZCBmcm9tIHRoZSBib3R0b20uICBXaGVuIHRoaXMgaXMgZG9uZSBpbnNpZGUgXGZCaW5pdHNjclxmUiwgdGhlCityb3V0aW5lIFxmQmluaXRcZlIgKHN1cHBsaWVkIGJ5IHRoZSB1c2VyKSBpcyBjYWxsZWQgd2l0aCB0d28KK2FyZ3VtZW50czogYSB3aW5kb3cgcG9pbnRlciB0byB0aGUgb25lLWxpbmUgd2luZG93IHRoYXQgaGFzIGJlZW4KK2FsbG9jYXRlZCBhbmQgYW4gaW50ZWdlciB3aXRoIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgd2luZG93LgorSW5zaWRlIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgdGhlIGludGVnZXIgdmFyaWFibGVzIFxmQkxJTkVTXGZSCithbmQgXGZCQ09MU1xmUiAoZGVmaW5lZCBpbiBcZkI8Y3Vyc2VzLmg+XGZSKSBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUKK2FjY3VyYXRlIGFuZCBcZkJ3cmVmcmVzaFxmUiBvciBcZkJkb3VwZGF0ZVxmUiBtdXN0IG5vdCBiZSBjYWxsZWQuICBJdAoraXMgYWxsb3dhYmxlIHRvIGNhbGwgXGZCd25vdXRyZWZyZXNoXGZSIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24KK3JvdXRpbmUuCisuUFAKK1xmQnJpcG9mZmxpbmVcZlIgY2FuIGJlIGNhbGxlZCB1cCB0byBmaXZlIHRpbWVzIGJlZm9yZSBjYWxsaW5nIFxmQmluaXRzY3JcZlIgb3IKK1xmQm5ld3Rlcm1cZlIuCisuUFAKK1RoZSBcZkJjdXJzX3NldFxmUiByb3V0aW5lIHNldHMgdGhlIGN1cnNvciBzdGF0ZSBpcyBzZXQgdG8gaW52aXNpYmxlLAorbm9ybWFsLCBvciB2ZXJ5IHZpc2libGUgZm9yIFxmQnZpc2liaWxpdHlcZlIgZXF1YWwgdG8gXGZCMFxmUiwKK1xmQjFcZlIsIG9yIFxmQjJcZlIgcmVzcGVjdGl2ZWx5LiAgSWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIHRoZQorXGZJdmlzaWJpbGl0eVxmUiByZXF1ZXN0ZWQsIHRoZSBwcmV2aW91cyBcZkljdXJzb3JcZlIgc3RhdGUgaXMKK3JldHVybmVkOyBvdGhlcndpc2UsIFxmQkVSUlxmUiBpcyByZXR1cm5lZC4KKy5QUAorVGhlIFxmQm5hcG1zXGZSIHJvdXRpbmUgaXMgdXNlZCB0byBzbGVlcCBmb3IgXGZJbXNcZlIgbWlsbGlzZWNvbmRzLgorLlNIIFJFVFVSTiBWQUxVRQorRXhjZXB0IGZvciBcZkJjdXJzX3NldFxmUiwgdGhlc2Ugcm91dGluZXMgYWx3YXlzIHJldHVybiBcZkJPS1xmUi4KKy5QUAorXGZCY3Vyc19zZXRcZlIKK3JldHVybnMgdGhlIHByZXZpb3VzIGN1cnNvciBzdGF0ZSwgb3IgXGZCRVJSXGZSIGlmIHRoZQorcmVxdWVzdGVkIFxmSXZpc2liaWxpdHlcZlIgaXMgbm90IHN1cHBvcnRlZC4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUworLlRQIDUKK1xmQmRlZl9wcm9nX21vZGVcZlIsIFxmQmRlZl9zaGVsbF9tb2RlXGZSLCBcZkJyZXNldF9wcm9nX21vZGVcZlIsIFxmQnJlc2V0X3NoZWxsX21vZGVcZlIKK3JldHVybiBhbiBlcnJvcgoraWYgdGhlIHRlcm1pbmFsIHdhcyBub3QgaW5pdGlhbGl6ZWQsIG9yCitpZiB0aGUgSS9PIGNhbGwgdG8gb2J0YWluIHRoZSB0ZXJtaW5hbCBzZXR0aW5ncyBmYWlscy4KKy5UUCA1CitcZkJyaXBvZmZsaW5lXGZQCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBtYXhpbXVtIG51bWJlciBvZiByaXBwZWQtb2ZmIGxpbmVzCitleGNlZWRzIHRoZSBtYXhpbXVtIChOUklQUyA9IDUpLgorLlJFCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJnZXRzeXhcZlIgaXMgYSBtYWNybywgc28gXGZCJlxmUiBpcyBub3QgbmVjZXNzYXJ5IGJlZm9yZQordGhlIHZhcmlhYmxlcyBcZkl5XGZSIGFuZCBcZkl4XGZSLgorLlBQCitPbGRlciBTVnI0IG1hbiBwYWdlcyB3YXJuIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiBcZkJjdXJzX3NldFxmUiAiaXMgY3VycmVudGx5CitpbmNvcnJlY3QiLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBnZXRzIGl0IHJpZ2h0LCBidXQgaXQgbWF5IGJlIHVud2lzZSB0byBjb3VudAorb24gdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSByZXR1cm4gdmFsdWUgYW55d2hlcmUgZWxzZS4KKy5QUAorQm90aCBuY3Vyc2VzIGFuZCBTVnI0IHdpbGwgY2FsbCBcZkJjdXJzX3NldFxmUiBpbiBcZkJlbmR3aW5cZlIKK2lmIFxmQmN1cnNfc2V0XGZSCitoYXMgYmVlbiBjYWxsZWQgdG8gbWFrZSB0aGUgY3Vyc29yIG90aGVyIHRoYW4gbm9ybWFsLCBpLmUuLCBlaXRoZXIKK2ludmlzaWJsZSBvciB2ZXJ5IHZpc2libGUuCitUaGVyZSBpcyBubyB3YXkgZm9yIG5jdXJzZXMgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsIGN1cnNvciBzdGF0ZSB0bworcmVzdG9yZSB0aGF0LgorLlNIIFBPUlRBQklMSVRZCitUaGUgZnVuY3Rpb25zIFxmQnNldHN5eFxmUiBhbmQgXGZCZ2V0c3l4XGZSIGFyZSBub3QgZGVzY3JpYmVkIGluIHRoZSBYU0kKK0N1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIEFsbCBvdGhlciBmdW5jdGlvbnMgYXJlIGFzIGRlc2NyaWJlZCBpbiBYU0kgQ3Vyc2VzLgorLlBQCitUaGUgU1ZyNCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyBcZkJzZXRzeXhcZlIgYW5kIFxmQmdldHN5eFxmUiBhcyBoYXZpbmcgcmV0dXJuCit0eXBlIGludC4gVGhpcyBpcyBtaXNsZWFkaW5nLCBhcyB0aGV5IGFyZSBtYWNyb3Mgd2l0aCBubyBkb2N1bWVudGVkIHNlbWFudGljcworZm9yIHRoZSByZXR1cm4gdmFsdWUuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfaW5pdHNjclxmUigzWCksIFxmQmN1cnNfb3V0b3B0c1xmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCksCitcZkJjdXJzX3Njcl9kdW1wXGZSKDNYKSwgXGZCY3Vyc19zbGtcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX2xlZ2FjeS4zeCBiL21hbi9jdXJzX2xlZ2FjeS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFhZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfbGVnYWN5LjN4CkBAIC0wLDAgKzEsOTMgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19sZWdhY3kuM3gsdiAxLjEgMjAwNy8wNC8wNyAyMzo1NDoyOSB0b20gRXhwICQKKy5USCBjdXJzX2xlZ2FjeSAzWCAiIgorLlNIIE5BTUUKK1xmQmdldGJlZ3hcZlIsCitcZkJnZXRiZWd5XGZSLAorXGZCZ2V0Y3VyeFxmUiwKK1xmQmdldGN1cnlcZlIsCitcZkJnZXRtYXh4XGZSLAorXGZCZ2V0bWF4eVxmUiwKK1xmQmdldHBhcnhcZlIsCitcZkJnZXRwYXJ5XGZSIC0gZ2V0IFxmQmN1cnNlc1xmUiBjdXJzb3IgYW5kIHdpbmRvdyBjb29yZGluYXRlcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBnZXRiZWd4KFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGdldGJlZ3koV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgZ2V0Y3VyeChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBnZXRjdXJ5KFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGdldG1heHgoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgZ2V0bWF4eShXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBnZXRwYXJ4KFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGdldHBhcnkoV0lORE9XICp3aW4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJnZXRiZWd5XGZSIGFuZCBcZkJnZXRiZWd4XGZSIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNhbWUKK2RhdGEgYXMgXGZCZ2V0YmVneXhcZlIuCisuUFAKK1RoZSBcZkJnZXRjdXJ5XGZSIGFuZCBcZkJnZXRjdXJ4XGZSIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNhbWUKK2RhdGEgYXMgXGZCZ2V0eXhcZlIuCisuUFAKK1RoZSBcZkJnZXRtYXh5XGZSIGFuZCBcZkJnZXRtYXh4XGZSIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNhbWUKK2RhdGEgYXMgXGZCZ2V0bWF4eXhcZlIuCisuUFAKK1RoZSBcZkJnZXRwYXJ5XGZSIGFuZCBcZkJnZXRwYXJ4XGZSIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNhbWUKK2RhdGEgYXMgXGZCZ2V0cGFyeXhcZlIuCisuU0ggUkVUVVJOIFZBTFVFCitUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGFuIGludGVnZXIsCitvciBFUlIgaWYgdGhlIHdpbmRvdyBwYXJhbWV0ZXIgaXMgbnVsbC4KKy5TSCBOT1RFUworQWxsIG9mIHRoZXNlIGludGVyZmFjZXMgYXJlIHByb3ZpZGVkIGFzIG1hY3JvcyBhbmQgZnVuY3Rpb25zLgorVGhlIG1hY3JvcyBhcmUgc3VwcHJlc3NlZCAoYW5kIG9ubHkgdGhlIGZ1bmN0aW9ucyBwcm92aWRlZCkKK3doZW4gXGZCTkNVUlNFU19PUEFRVUVcZlIgaXMgZGVmaW5lZC4KK1RoZSBzdGFuZGFyZCBmb3JtcyBzdWNoIGFzIFxmQmdldHl4XGZQIG11c3QgYmUgaW1wbGVtZW50ZWQgYXMgbWFjcm9zLAorYW5kIChpbiB0aGlzIGltcGxlbWVudGF0aW9uKSBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiB0aGUgZnVuY3Rpb25zCitkZXNjcmliZWQgaGVyZSwKK3RvIGF2b2lkIHJlbGlhbmNlIG9uIGludGVybmFsIGRldGFpbHMgb2YgdGhlIFdJTkRPVyBzdHJ1Y3R1cmUuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyB3ZXJlIHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2dldHl4XGZSKDNYKSwKK1xmQmN1cnNfb3BhcXVlXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19tZW1sZWFrcy4zeCBiL21hbi9jdXJzX21lbWxlYWtzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTQ1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19tZW1sZWFrcy4zeApAQCAtMCwwICsxLDc1IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfbWVtbGVha3MuM3gsdiAxLjEgMjAwOC8xMC8yNSAyMzozODoxMyB0b20gRXhwICQKKy5USCBjdXJzX21lbWxlYWtzIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCX25jX2ZyZWVhbGxcZlAKK1xmQl9uY19mcmVlX2FuZF9leGl0XGZQIC0gXGZCY3Vyc2VzXGZSIG1lbW9yeS1sZWFrIGNoZWNraW5nCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQnZvaWQgX25jX2ZyZWVhbGwodm9pZCk7XGZSCisuYnIKK1xmQnZvaWQgX25jX2ZyZWVfYW5kX2V4aXQoaW50KTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHNpbXBsaWZ5IGFuYWx5c2lzIG9mIG1lbW9yeSBsZWFrcyBpbiB0aGUgbmN1cnNlcworbGlicmFyeS4KK1RoZXkgYXJlIG5vcm1hbGx5IG5vdCBhdmFpbGFibGU7IHRoZXkgbXVzdCBiZSBjb25maWd1cmVkIGludG8gdGhlIGxpYnJhcnkKK2F0IGJ1aWxkIHRpbWUgdXNpbmcgdGhlIFxmQi0tZGlzYWJsZS1sZWFrc1xmUCBvcHRpb24uCitUaGF0IGNvbXBpbGVzLWluIGNvZGUgdGhhdCBmcmVlcyBtZW1vcnkgdGhhdCBub3JtYWxseSB3b3VsZCBub3QgYmUgZnJlZWQuCisuUFAKK0FueSBpbXBsZW1lbnRhdGlvbiBvZiBjdXJzZXMgbXVzdCBub3QgZnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aAorYSBzY3JlZW4sIHNpbmNlIChldmVuIGFmdGVyIGNhbGxpbmcgXGZCZW5kd2luXGZQKSwgaXQgbXVzdCBiZSBhdmFpbGFibGUKK2ZvciB1c2UgaW4gdGhlIG5leHQgY2FsbCB0byBcZkJyZWZyZXNoXGZQLgorVGhlcmUgYXJlIGFsc28gY2h1bmtzIG9mIG1lbW9yeSBoZWxkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorVGhhdCBtYWtlcyBpdCBoYXJkIHRvIGFuYWx5emUgY3Vyc2VzIGFwcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGxlYWtzLgorVG8gd29yayBhcm91bmQgdGhpcywgb25lIGNhbiBidWlsZCBhIGRlYnVnZ2luZyB2ZXJzaW9uIG9mIHRoZSBuY3Vyc2VzCitsaWJyYXJ5IHdoaWNoIGZyZWVzIHRob3NlIGNodW5rcyB3aGljaCBpdCBjYW4sIGFuZCBwcm92aWRlcyB0aGVzZQorZnVuY3Rpb25zIHRvIGZyZWUgYWxsIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBuY3Vyc2VzIGxpYnJhcnkuCisuUFAKK1RoZSBcZlBfbmNfZnJlZV9hbmRfZXhpdFxmUCBmdW5jdGlvbiBpcyB0aGUgcHJlZmVycmVkIG9uZSBzaW5jZQorc29tZSBvZiB0aGUgbWVtb3J5IHdoaWNoIGlzIGZyZWVkIG1heSBiZSByZXF1aXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uCit0byBjb250aW51ZSBydW5uaW5nLgorSXRzIHBhcmFtZXRlciBpcyB0aGUgY29kZSB0byBwYXNzIHRvIHRoZSBcZlBleGl0XGZQIHJvdXRpbmUuCisuU0ggUkVUVVJOIFZBTFVFCitUaGVzZSBmdW5jdGlvbnMgZG8gbm90IHJldHVybiBhIHZhbHVlLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBYU0kgaW50ZXJmYWNlLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19tb3VzZS4zeCBiL21hbi9jdXJzX21vdXNlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjlmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19tb3VzZS4zeApAQCAtMCwwICsxLDMxMCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19tb3VzZS4zeCx2IDEuMzAgMjAwNi8xMi8zMCAyMzo0MzozNCB0b20gRXhwICQKKy5USCBjdXJzX21vdXNlIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZ2V0bW91c2VcZlIsIFxmQnVuZ2V0bW91c2VcZlIsCitcZkJtb3VzZW1hc2tcZlIsIFxmQndlbmNsb3NlXGZSLAorXGZCbW91c2VfdHJhZm9cZlIsIFxmQndtb3VzZV90cmFmb1xmUiwKK1xmQm1vdXNlaW50ZXJ2YWxcZlIgLSBtb3VzZSBpbnRlcmZhY2UgdGhyb3VnaCBjdXJzZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKKy5uZgorXGZCI2luY2x1ZGUgPGN1cnNlcy5oPgorLlBQCitcZkJ0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1hc2tfdDsKKy5QUAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBzaG9ydCBpZDsgICAgICAgICBcZkkvKiBJRCB0byBkaXN0aW5ndWlzaCBtdWx0aXBsZSBkZXZpY2VzICovXGZCCisgICAgaW50IHgsIHksIHo7ICAgICAgXGZJLyogZXZlbnQgY29vcmRpbmF0ZXMgKi9cZkIKKyAgICBtbWFza190IGJzdGF0ZTsgICBcZkkvKiBidXR0b24gc3RhdGUgYml0cyAqL1xmQgorfQorTUVWRU5UO1xmUgorLmZpCisuYnIKK1xmQmludCBnZXRtb3VzZShNRVZFTlQgKmV2ZW50KTtcZlIKKy5icgorXGZCaW50IHVuZ2V0bW91c2UoTUVWRU5UICpldmVudCk7XGZSCisuYnIKK1xmQm1tYXNrX3QgbW91c2VtYXNrKG1tYXNrX3QgbmV3bWFzaywgbW1hc2tfdCAqb2xkbWFzayk7XGZSCisuYnIKK1xmQmJvb2wgd2VuY2xvc2UoY29uc3QgV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmJvb2wgbW91c2VfdHJhZm8oaW50KiBwWSwgaW50KiBwWCwgYm9vbCB0b19zY3JlZW4pO1xmUgorLmJyCitcZkJib29sIHdtb3VzZV90cmFmbyhjb25zdCBXSU5ET1cqIHdpbiwgaW50KiBwWSwgaW50KiBwWCxcZlIKKy5icgorCVxmQmJvb2wgdG9fc2NyZWVuKTtcZlIKKy5icgorXGZCaW50IG1vdXNlaW50ZXJ2YWwoaW50IGVydmFsKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhbiBpbnRlcmZhY2UgdG8gbW91c2UgZXZlbnRzIGZyb20KK1xmQm5jdXJzZXNcZlIoM1gpLgorTW91c2UgZXZlbnRzIGFyZSByZXByZXNlbnRlZCBieSBcZkJLRVlfTU9VU0VcZlIKK3BzZXVkby1rZXkgdmFsdWVzIGluIHRoZSBcZkJ3Z2V0Y2hcZlIgaW5wdXQgc3RyZWFtLgorLlBQCitUbyBtYWtlIG1vdXNlIGV2ZW50cyB2aXNpYmxlLCB1c2UgdGhlIFxmQm1vdXNlbWFza1xmUiBmdW5jdGlvbi4KK1RoaXMgd2lsbCBzZXQKK3RoZSBtb3VzZSBldmVudHMgdG8gYmUgcmVwb3J0ZWQuCitCeSBkZWZhdWx0LCBubyBtb3VzZSBldmVudHMgYXJlIHJlcG9ydGVkLgorVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgbWFzayB0byBpbmRpY2F0ZSB3aGljaCBvZiB0aGUgc3BlY2lmaWVkIG1vdXNlIGV2ZW50cworY2FuIGJlIHJlcG9ydGVkOyBvbiBjb21wbGV0ZSBmYWlsdXJlIGl0IHJldHVybnMgMC4KK0lmIG9sZG1hc2sgaXMgbm9uLU5VTEwsCit0aGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBpbmRpY2F0ZWQgbG9jYXRpb24gd2l0aCB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGdpdmVuCit3aW5kb3cncyBtb3VzZSBldmVudCBtYXNrLgorLlBQCitBcyBhIHNpZGUgZWZmZWN0LCBzZXR0aW5nIGEgemVybyBtb3VzZW1hc2sgbWF5IHR1cm4gb2ZmIHRoZSBtb3VzZSBwb2ludGVyOworc2V0dGluZyBhIG5vbnplcm8gbWFzayBtYXkgdHVybiBpdCBvbi4KK1doZXRoZXIgdGhpcyBoYXBwZW5zIGlzIGRldmljZS1kZXBlbmRlbnQuCisuUFAKK0hlcmUgYXJlIHRoZSBtb3VzZSBldmVudCB0eXBlIG1hc2tzIHdoaWNoIG1heSBiZSBkZWZpbmVkOgorLlBQCisuVFMKK2wgbAorXyBfCitsIGwuCitcZklOYW1lXGZSCVxmSURlc2NyaXB0aW9uXGZSCitCVVRUT04xX1BSRVNTRUQJbW91c2UgYnV0dG9uIDEgZG93bgorQlVUVE9OMV9SRUxFQVNFRAltb3VzZSBidXR0b24gMSB1cAorQlVUVE9OMV9DTElDS0VECW1vdXNlIGJ1dHRvbiAxIGNsaWNrZWQKK0JVVFRPTjFfRE9VQkxFX0NMSUNLRUQJbW91c2UgYnV0dG9uIDEgZG91YmxlIGNsaWNrZWQKK0JVVFRPTjFfVFJJUExFX0NMSUNLRUQJbW91c2UgYnV0dG9uIDEgdHJpcGxlIGNsaWNrZWQKK18KK0JVVFRPTjJfUFJFU1NFRAltb3VzZSBidXR0b24gMiBkb3duCitCVVRUT04yX1JFTEVBU0VECW1vdXNlIGJ1dHRvbiAyIHVwCitCVVRUT04yX0NMSUNLRUQJbW91c2UgYnV0dG9uIDIgY2xpY2tlZAorQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gMiBkb3VibGUgY2xpY2tlZAorQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gMiB0cmlwbGUgY2xpY2tlZAorXworQlVUVE9OM19QUkVTU0VECW1vdXNlIGJ1dHRvbiAzIGRvd24KK0JVVFRPTjNfUkVMRUFTRUQJbW91c2UgYnV0dG9uIDMgdXAKK0JVVFRPTjNfQ0xJQ0tFRAltb3VzZSBidXR0b24gMyBjbGlja2VkCitCVVRUT04zX0RPVUJMRV9DTElDS0VECW1vdXNlIGJ1dHRvbiAzIGRvdWJsZSBjbGlja2VkCitCVVRUT04zX1RSSVBMRV9DTElDS0VECW1vdXNlIGJ1dHRvbiAzIHRyaXBsZSBjbGlja2VkCitfCitCVVRUT040X1BSRVNTRUQJbW91c2UgYnV0dG9uIDQgZG93bgorQlVUVE9ONF9SRUxFQVNFRAltb3VzZSBidXR0b24gNCB1cAorQlVUVE9ONF9DTElDS0VECW1vdXNlIGJ1dHRvbiA0IGNsaWNrZWQKK0JVVFRPTjRfRE9VQkxFX0NMSUNLRUQJbW91c2UgYnV0dG9uIDQgZG91YmxlIGNsaWNrZWQKK0JVVFRPTjRfVFJJUExFX0NMSUNLRUQJbW91c2UgYnV0dG9uIDQgdHJpcGxlIGNsaWNrZWQKK18KK0JVVFRPTjVfUFJFU1NFRAltb3VzZSBidXR0b24gNSBkb3duCitCVVRUT041X1JFTEVBU0VECW1vdXNlIGJ1dHRvbiA1IHVwCitCVVRUT041X0NMSUNLRUQJbW91c2UgYnV0dG9uIDUgY2xpY2tlZAorQlVUVE9ONV9ET1VCTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gNSBkb3VibGUgY2xpY2tlZAorQlVUVE9ONV9UUklQTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gNSB0cmlwbGUgY2xpY2tlZAorXworQlVUVE9OX1NISUZUCXNoaWZ0IHdhcyBkb3duIGR1cmluZyBidXR0b24gc3RhdGUgY2hhbmdlCitCVVRUT05fQ1RSTAljb250cm9sIHdhcyBkb3duIGR1cmluZyBidXR0b24gc3RhdGUgY2hhbmdlCitCVVRUT05fQUxUCWFsdCB3YXMgZG93biBkdXJpbmcgYnV0dG9uIHN0YXRlIGNoYW5nZQorQUxMX01PVVNFX0VWRU5UUwlyZXBvcnQgYWxsIGJ1dHRvbiBzdGF0ZSBjaGFuZ2VzCitSRVBPUlRfTU9VU0VfUE9TSVRJT04JcmVwb3J0IG1vdXNlIG1vdmVtZW50CitfCisuVEUKKy5QUAorT25jZSBhIGNsYXNzIG9mIG1vdXNlIGV2ZW50cyBoYXZlIGJlZW4gbWFkZSB2aXNpYmxlIGluIGEgd2luZG93LAorY2FsbGluZyB0aGUgXGZCd2dldGNoXGZSIGZ1bmN0aW9uIG9uIHRoYXQgd2luZG93IG1heSByZXR1cm4KK1xmQktFWV9NT1VTRVxmUiBhcyBhbiBpbmRpY2F0b3IgdGhhdCBhIG1vdXNlIGV2ZW50IGhhcyBiZWVuIHF1ZXVlZC4KK1RvIHJlYWQgdGhlIGV2ZW50IGRhdGEgYW5kIHBvcCB0aGUgZXZlbnQgb2ZmIHRoZSBxdWV1ZSwgY2FsbAorXGZCZ2V0bW91c2VcZlIuCitUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIFxmQk9LXGZSIGlmIGEgbW91c2UgZXZlbnQKK2lzIGFjdHVhbGx5IHZpc2libGUgaW4gdGhlIGdpdmVuIHdpbmRvdywgXGZCRVJSXGZSIG90aGVyd2lzZS4KK1doZW4gXGZCZ2V0bW91c2VcZlIgcmV0dXJucyBcZkJPS1xmUiwgdGhlIGRhdGEgZGVwb3NpdGVkIGFzIHkgYW5kCit4IGluIHRoZSBldmVudCBzdHJ1Y3R1cmUgY29vcmRpbmF0ZXMgd2lsbCBiZSBzY3JlZW4tcmVsYXRpdmUgY2hhcmFjdGVyLWNlbGwKK2Nvb3JkaW5hdGVzLgorVGhlIHJldHVybmVkIHN0YXRlIG1hc2sgd2lsbCBoYXZlIGV4YWN0bHkgb25lIGJpdCBzZXQgdG8KK2luZGljYXRlIHRoZSBldmVudCB0eXBlLgorLlBQCitUaGUgXGZCdW5nZXRtb3VzZVxmUiBmdW5jdGlvbiBiZWhhdmVzIGFuYWxvZ291c2x5IHRvIFxmQnVuZ2V0Y2hcZlIuCitJdCBwdXNoZXMKK2EgXGZCS0VZX01PVVNFXGZSIGV2ZW50IG9udG8gdGhlIGlucHV0IHF1ZXVlLCBhbmQgYXNzb2NpYXRlcyB3aXRoIHRoYXQgZXZlbnQKK3RoZSBnaXZlbiBzdGF0ZSBkYXRhIGFuZCBzY3JlZW4tcmVsYXRpdmUgY2hhcmFjdGVyLWNlbGwgY29vcmRpbmF0ZXMuCisuUFAKK1RoZSBcZkJ3ZW5jbG9zZVxmUiBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIGEgZ2l2ZW4gcGFpciBvZiBzY3JlZW4tcmVsYXRpdmUKK2NoYXJhY3Rlci1jZWxsIGNvb3JkaW5hdGVzIGlzIGVuY2xvc2VkIGJ5IGEgZ2l2ZW4gd2luZG93LCByZXR1cm5pbmcgVFJVRQoraWYgaXQgaXMgYW5kIEZBTFNFIG90aGVyd2lzZS4KK0l0IGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgd2hhdCBzdWJzZXQgb2YKK3RoZSBzY3JlZW4gd2luZG93cyBlbmNsb3NlIHRoZSBsb2NhdGlvbiBvZiBhIG1vdXNlIGV2ZW50LgorLlBQCitUaGUgXGZCd21vdXNlX3RyYWZvXGZSIGZ1bmN0aW9uIHRyYW5zZm9ybXMgYSBnaXZlbiBwYWlyIG9mIGNvb3JkaW5hdGVzCitmcm9tIHN0ZHNjci1yZWxhdGl2ZSBjb29yZGluYXRlcwordG8gY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHdpbmRvdyBvciB2aWNlIHZlcnNhLgorUGxlYXNlIHJlbWVtYmVyLCB0aGF0IHN0ZHNjci1yZWxhdGl2ZSBjb29yZGluYXRlcyBhcmUgbm90IGFsd2F5cyBpZGVudGljYWwKK3RvIHdpbmRvdy1yZWxhdGl2ZSBjb29yZGluYXRlcyBkdWUgdG8gdGhlIG1lY2hhbmlzbSB0byByZXNlcnZlIGxpbmVzIG9uIHRvcAorb3IgYm90dG9tIG9mIHRoZSBzY3JlZW4gZm9yIG90aGVyIHB1cnBvc2VzCisoc2VlIHRoZSBcZkJyaXBvZmZsaW5lKClcZlAgYW5kIFxmQnNsa19pbml0XGZSIGNhbGxzLCBmb3IgZXhhbXBsZSkuCitJZiB0aGUgcGFyYW1ldGVyIFxmQnRvX3NjcmVlblxmUiBpcyBcZkJUUlVFXGZSLCB0aGUgcG9pbnRlcnMKK1xmQnBZLCBwWFxmUiBtdXN0IHJlZmVyZW5jZSB0aGUgY29vcmRpbmF0ZXMgb2YgYSBsb2NhdGlvbgoraW5zaWRlIHRoZSB3aW5kb3cgXGZCd2luXGZSLgorVGhleSBhcmUgY29udmVydGVkIHRvIHdpbmRvdy1yZWxhdGl2ZSBjb29yZGluYXRlcyBhbmQgcmV0dXJuZWQKK3Rocm91Z2ggdGhlIHBvaW50ZXJzLgorSWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIFxmQlRSVUVcZlIuCitJZiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgd2FzIE5VTEwgb3IgdGhlIGxvY2F0aW9uIGlzCitub3QgaW5zaWRlIHRoZSB3aW5kb3csIFxmQkZBTFNFXGZSIGlzIHJldHVybmVkLgorSWYgXGZCdG9fc2NyZWVuXGZSIGlzCitcZkJGQUxTRVxmUiwgdGhlIHBvaW50ZXJzIFxmQnBZLCBwWFxmUiBtdXN0IHJlZmVyZW5jZSB3aW5kb3ctcmVsYXRpdmUKK2Nvb3JkaW5hdGVzLgorVGhleSBhcmUgY29udmVydGVkIHRvIHN0ZHNjci1yZWxhdGl2ZSBjb29yZGluYXRlcyBpZiB0aGUKK3dpbmRvdyBcZkJ3aW5cZlIgZW5jbG9zZXMgdGhpcyBwb2ludC4KK0luIHRoaXMgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBcZkJUUlVFXGZSLgorSWYgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIE5VTEwgb3IgdGhlIHBvaW50IGlzIG5vdCBpbnNpZGUgdGhlCit3aW5kb3csIFxmQkZBTFNFXGZSIGlzIHJldHVybmVkLgorUGxlYXNlIG5vdGljZSwgdGhhdCB0aGUgcmVmZXJlbmNlZCBjb29yZGluYXRlcworYXJlIG9ubHkgcmVwbGFjZWQgYnkgdGhlIGNvbnZlcnRlZCBjb29yZGluYXRlcyBpZiB0aGUgdHJhbnNmb3JtYXRpb24gd2FzCitzdWNjZXNzZnVsLgorLlBQCitUaGUgXGZCbW91c2VfdHJhZm9cZlIgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIHNhbWUgdHJhbnNsYXRpb24KK2FzIFxmQndtb3VzZV90cmFmb1xmUiwKK3VzaW5nIHN0ZHNjciBmb3IgXGZCd2luXGZSLgorLlBQCitUaGUgXGZCbW91c2VpbnRlcnZhbFxmUiBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHRpbWUgKGluIHRob3VzYW5kcyBvZiBhCitzZWNvbmQpIHRoYXQgY2FuIGVsYXBzZSBiZXR3ZWVuIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBmb3IgdGhlbSB0bworYmUgcmVjb2duaXplZCBhcyBhIGNsaWNrLgorVXNlIFxmQm1vdXNlaW50ZXJ2YWwoMClcZlIgdG8gZGlzYWJsZSBjbGljayByZXNvbHV0aW9uLgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmV2aW91cyBpbnRlcnZhbCB2YWx1ZS4KK1VzZSBcZkJtb3VzZWludGVydmFsKC0xKVxmUiB0byBvYnRhaW4gdGhlIGludGVydmFsIHdpdGhvdXQgYWx0ZXJpbmcgaXQuCitUaGUgZGVmYXVsdCBpcyBvbmUgc2l4dGggb2YgYSBzZWNvbmQuCisuUFAKK05vdGUgdGhhdCBtb3VzZSBldmVudHMgd2lsbCBiZSBpZ25vcmVkIHdoZW4gaW5wdXQgaXMgaW4gY29va2VkIG1vZGUsIGFuZCB3aWxsCitjYXVzZSBhbiBlcnJvciBiZWVwIHdoZW4gY29va2VkIG1vZGUgaXMgYmVpbmcgc2ltdWxhdGVkIGluIGEgd2luZG93IGJ5IGEKK2Z1bmN0aW9uIHN1Y2ggYXMgXGZCZ2V0c3RyXGZSIHRoYXQgZXhwZWN0cyBhIGxpbmVmZWVkIGZvciBpbnB1dC1sb29wCit0ZXJtaW5hdGlvbi4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQmdldG1vdXNlXGZSIGFuZCBcZkJ1bmdldG1vdXNlXGZSCityZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBvciBcZkJPS1xmUgordXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisuUlMKKy5UUCA1CitcZkJnZXRtb3VzZVxmUAorcmV0dXJucyBhbiBlcnJvci4KK0lmIG5vIG1vdXNlIGRyaXZlciB3YXMgaW5pdGlhbGl6ZWQsIG9yCitpZiB0aGUgbWFzayBwYXJhbWV0ZXIgaXMgemVybywKKy5UUCA1CitcZkJ1bmdldG1vdXNlXGZQCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBGSUZPIGlzIGZ1bGwuCisuUkUKKy5QUAorXGZCbW91c2VtYXNrXGZSCityZXR1cm5zIHRoZSBtYXNrIG9mIHJlcG9ydGFibGUgZXZlbnRzLgorLlBQCitcZkJtb3VzZWludGVydmFsXGZSCityZXR1cm5zIHRoZSBwcmV2aW91cyBpbnRlcnZhbCB2YWx1ZSwgdW5sZXNzCit0aGUgdGVybWluYWwgd2FzIG5vdCBpbml0aWFsaXplZC4KK0luIHRoYXQgY2FzZSwgaXQgcmV0dXJucyB0aGUgbWF4aW11bSBpbnRlcnZhbCB2YWx1ZSAoMTY2KS4KKy5QUAorXGZCd2VuY2xvc2VcZlIgYW5kIFxmQndtb3VzZV90cmFmb1xmUgorYXJlIGJvb2xlYW4gZnVuY3Rpb25zIHJldHVybmluZyBcZkJUUlVFXGZSIG9yIFxmQkZBTFNFXGZSIGRlcGVuZGluZworb24gdGhlaXIgdGVzdCByZXN1bHQuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGNhbGxzIHdlcmUgZGVzaWduZWQgZm9yIFxmQm5jdXJzZXNcZlIoM1gpLCBhbmQgYXJlIG5vdCBmb3VuZCBpbiBTVnI0CitjdXJzZXMsIDQuNEJTRCBjdXJzZXMsIG9yIGFueSBvdGhlciBwcmV2aW91cyB2ZXJzaW9uIG9mIGN1cnNlcy4KKy5QUAorVGhlIGZlYXR1cmUgbWFjcm8gXGZCTkNVUlNFU19NT1VTRV9WRVJTSU9OXGZSIGlzIHByb3ZpZGVkIHNvIHRoZSBwcmVwcm9jZXNzb3IKK2NhbiBiZSB1c2VkIHRvIHRlc3Qgd2hldGhlciB0aGVzZSBmZWF0dXJlcyBhcmUgcHJlc2VudC4KK0lmIHRoZSBpbnRlcmZhY2UgaXMgY2hhbmdlZCwgdGhlIHZhbHVlIG9mIFxmQk5DVVJTRVNfTU9VU0VfVkVSU0lPTlxmUiB3aWxsIGJlCitpbmNyZW1lbnRlZC4KK1RoZXNlIHZhbHVlcyBmb3IgXGZCTkNVUlNFU19NT1VTRV9WRVJTSU9OXGZSIG1heSBiZQorc3BlY2lmaWVkIHdoZW4gY29uZmlndXJpbmcgbmN1cnNlczoKKy5SUworLlRQIDMKKzEKK2hhcyBkZWZpbml0aW9ucyBmb3IgcmVzZXJ2ZWQgZXZlbnRzLgorVGhlIG1hc2sgdXNlcyAyOCBiaXRzLgorLlRQIDMKKzIKK2FkZHMgZGVmaW5pdGlvbnMgZm9yIGJ1dHRvbiA1LAorcmVtb3ZlcyB0aGUgZGVmaW5pdGlvbnMgZm9yIHJlc2VydmVkIGV2ZW50cy4KK1RoZSBtYXNrIHVzZXMgMjkgYml0cy4KKy5SRQorLlBQCitUaGUgb3JkZXIgb2YgdGhlIFxmQk1FVkVOVFxmUiBzdHJ1Y3R1cmUgbWVtYmVycyBpcyBub3QgZ3VhcmFudGVlZC4KK0FkZGl0aW9uYWwgZmllbGRzIG1heSBiZSBhZGRlZCB0byB0aGUgc3RydWN0dXJlIGluIHRoZSBmdXR1cmUuCisuUFAKK1VuZGVyIFxmQm5jdXJzZXNcZlIoM1gpLCB0aGVzZSBjYWxscyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgZWl0aGVyCit4dGVybSdzIGJ1aWx0LWluIG1vdXNlLXRyYWNraW5nIEFQSSBvcgorcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycyBpbmNsdWRpbmcKKy5SUworQWxlc3NhbmRybyBSdWJpbmkncyBncG0gc2VydmVyLgorLmJyCitGcmVlQlNEIHN5c21vdXNlCisuYnIKK09TLzIgRU1YCisuUkUKK0lmIHlvdSBhcmUgdXNpbmcgYW4gdW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiwKK21vdXNlIGV2ZW50cyB3aWxsIG5vdCBiZSB2aXNpYmxlIHRvCitcZkJuY3Vyc2VzXGZSKDNYKSAoYW5kIHRoZSBcZkJtb3VzZW1hc2tcZlIgZnVuY3Rpb24gd2lsbCBhbHdheXMKK3JldHVybiBcZkIwXGZSKS4KKy5QUAorSWYgdGhlIHRlcm1pbmZvIGVudHJ5IGNvbnRhaW5zIGEgXGZCWE1cZlIgc3RyaW5nLAordGhpcyBpcyB1c2VkIGluIHRoZSB4dGVybSBtb3VzZSBkcml2ZXIgdG8gY29udHJvbCB0aGUKK3dheSB0aGUgdGVybWluYWwgaXMgaW5pdGlhbGl6ZWQgZm9yIG1vdXNlIG9wZXJhdGlvbi4KK1RoZSBkZWZhdWx0LCBpZiBcZkJYTVxmUiBpcyBub3QgZm91bmQsCitjb3JyZXNwb25kcyB0byBwcml2YXRlIG1vZGUgMTAwMCBvZiB4dGVybToKKy5SUworXFxFWz8xMDAwJT8lcDElezF9JT0ldGglZWwlOworLlJFCitUaGUgeiBtZW1iZXIgaW4gdGhlIGV2ZW50IHN0cnVjdHVyZSBpcyBub3QgcHJlc2VudGx5IHVzZWQuCitJdCBpcyBpbnRlbmRlZAorZm9yIHVzZSB3aXRoIHRvdWNoIHNjcmVlbnMgKHdoaWNoIG1heSBiZSBwcmVzc3VyZS1zZW5zaXRpdmUpIG9yIHdpdGgKKzNELW1pY2UvdHJhY2tiYWxscy9wb3dlciBnbG92ZXMuCisuU0ggQlVHUworTW91c2UgZXZlbnRzIHVuZGVyIHh0ZXJtIHdpbGwgbm90IGluIGZhY3QgYmUgaWdub3JlZCBkdXJpbmcgY29va2VkIG1vZGUsCitpZiB0aGV5IGhhdmUgYmVlbiBlbmFibGVkIGJ5IFxmQm1vdXNlbWFza1xmUi4KK0luc3RlYWQsIHRoZSB4dGVybSBtb3VzZQorcmVwb3J0IHNlcXVlbmNlIHdpbGwgYXBwZWFyIGluIHRoZSBzdHJpbmcgcmVhZC4KKy5QUAorTW91c2UgZXZlbnRzIHVuZGVyIHh0ZXJtIHdpbGwgbm90IGJlIGRldGVjdGVkIGNvcnJlY3RseSBpbiBhIHdpbmRvdyB3aXRoCitpdHMga2V5cGFkIGJpdCBvZmYsIHNpbmNlIHRoZXkgYXJlIGludGVycHJldGVkIGFzIGEgdmFyaWV0eSBvZiBmdW5jdGlvbiBrZXkuCitZb3VyIHRlcm1pbmZvIGRlc2NyaXB0aW9uIHNob3VsZCBoYXZlIFxmQmttb3VzXGZSIHNldCB0byAiXFxFW00iCisodGhlIGJlZ2lubmluZyBvZiB0aGUgcmVzcG9uc2UgZnJvbSB4dGVybSBmb3IgbW91c2UgY2xpY2tzKS4KK090aGVyIHZhbHVlcyBmb3IgXGZCa21vdXNcZlIgYXJlIHBlcm1pdHRlZCwKK2J1dCB1bmRlciB0aGUgc2FtZSBhc3N1bXB0aW9uLAoraS5lLiwgaXQgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVzcG9uc2UuCisuUFAKK0JlY2F1c2UgdGhlcmUgYXJlIG5vIHN0YW5kYXJkIHRlcm1pbmFsIHJlc3BvbnNlcyB0aGF0IHdvdWxkIHNlcnZlIHRvIGlkZW50aWZ5Cit0ZXJtaW5hbHMgd2hpY2ggc3VwcG9ydCB0aGUgeHRlcm0gbW91c2UgcHJvdG9jb2wsIFxmQm5jdXJzZXNcZlIgYXNzdW1lcyB0aGF0CitpZiB5b3VyICRURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zICJ4dGVybSIsCitvciBcZkJrbW91c1xmUiBpcyBkZWZpbmVkIGluCit0aGUgdGVybWluYWwgZGVzY3JpcHRpb24sIHRoZW4gdGhlIHRlcm1pbmFsIG1heSBzZW5kIG1vdXNlIGV2ZW50cy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfa2VybmVsXGZSKDNYKSwKK1xmQmN1cnNfc2xrXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfbW92ZS4zeCBiL21hbi9jdXJzX21vdmUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0NjM3NwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX21vdmUuM3gKQEAgLTAsMCArMSw2OSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX21vdmUuM3gsdiAxLjEyIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc19tb3ZlIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCbW92ZVxmUiwKK1xmQndtb3ZlXGZSIC0gbW92ZSBcZkJjdXJzZXNcZlIgd2luZG93IGN1cnNvcgorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgbW92ZShpbnQgeSwgaW50IHgpO1xmUgorLmJyCitcZkJpbnQgd21vdmUoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgbW92ZSB0aGUgY3Vyc29yIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2luZG93IHRvIGxpbmUgXGZJeVxmUiBhbmQKK2NvbHVtbiBcZkl4XGZSLiAgVGhpcyByb3V0aW5lIGRvZXMgbm90IG1vdmUgdGhlIHBoeXNpY2FsIGN1cnNvciBvZiB0aGUgdGVybWluYWwKK3VudGlsIFxmQnJlZnJlc2hcZlIgaXMgY2FsbGVkLiAgVGhlIHBvc2l0aW9uIHNwZWNpZmllZCBpcyByZWxhdGl2ZSB0byB0aGUgdXBwZXIKK2xlZnQtaGFuZCBjb3JuZXIgb2YgdGhlIHdpbmRvdywgd2hpY2ggaXMgKDAsMCkuCisuU0ggUkVUVVJOIFZBTFVFCitUaGVzZSByb3V0aW5lcyByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgT0sgKFNWcjQKK3NwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitTcGVjaWZpY2FsbHksIHRoZXkgcmV0dXJuIGFuIGVycm9yCitpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwgb3IKK2lmIHRoZSBwb3NpdGlvbiBpcyBvdXRzaWRlIHRoZSB3aW5kb3cuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJtb3ZlXGZSIG1heSBiZSBhIG1hY3JvLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19vcGFxdWUuM3ggYi9tYW4vY3Vyc19vcGFxdWUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5Y2ZhYQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX29wYXF1ZS4zeApAQCAtMCwwICsxLDEzMyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX29wYXF1ZS4zeCx2IDEuNiAyMDA3LzA5LzA4IDE4OjQ5OjEzIHRvbSBFeHAgJAorLlRIIGN1cnNfb3BhcXVlIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCaXNfY2xlYXJlZFxmUiwKK1xmQmlzX2lkbG9rXGZSLAorXGZCaXNfaWRjb2tcZlIsCitcZkJpc19pbW1lZG9rXGZSLAorXGZCaXNfa2V5cGFkXGZSLAorXGZCaXNfbGVhdmVva1xmUiwKK1xmQmlzX25vZGVsYXlcZlIsCitcZkJpc190aW1lb3V0XGZSLAorXGZCaXNfc2Nyb2xsb2tcZlIsCitcZkJpc19zeW5jb2tcZlIgLSBcZkJjdXJzZXNcZlIgd2luZG93IHByb3BlcnRpZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCYm9vbCBpc19jbGVhcmVkKGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19pZGNvayhjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfaWRsb2soY29uc3QgV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJib29sIGlzX2ltbWVkb2soY29uc3QgV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJib29sIGlzX2tleXBhZChjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfbGVhdmVvayhjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfbm9kZWxheShjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfbm90aW1lb3V0KGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19zY3JvbGxvayhjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfc3luY29rKGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCV0lORE9XICogd2dldHBhcmVudChjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCB3Z2V0c2NycmVnKGNvbnN0IFdJTkRPVyAqd2luLCBpbnQgKnRvcCwgaW50ICpib3R0b20pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgZnVuY3Rpb25zIHdoaWNoIHJldHVybiBwcm9wZXJ0aWVzCitzZXQgaW4gdGhlIFdJTkRPVyBzdHJ1Y3R1cmUsIGFsbG93aW5nIGl0IHRvIGJlIGBgb3BhcXVlJycgaWYKK3RoZSBzeW1ib2wgXGZCTkNVUlNFU19PUEFRVUVcZlIgaXMgZGVmaW5lZDoKKy5UUCA1CitcZkJpc19jbGVhcmVkXGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCY2xlYXJva1xmUgorLlRQIDUKK1xmQmlzX2lkY29rXGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCaWRjb2tcZlIKKy5UUCA1CitcZkJpc19pZGxva1xmUgorcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIFxmQmlkbG9rXGZSCisuVFAgNQorXGZCaXNfaW1tZWRva1xmUgorcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIFxmQmltbWVkb2tcZlIKKy5UUCA1CitcZkJpc19rZXlwYWRcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJrZXlwYWRcZlIKKy5UUCA1CitcZkJpc19sZWF2ZW9rXGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCbGVhdmVva1xmUgorLlRQIDUKK1xmQmlzX25vZGVsYXlcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJub2RlbGF5XGZSCisuVFAgNQorXGZCaXNfbm90aW1lb3V0XGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCbm90aW1lb3V0XGZSCisuVFAgNQorXGZCaXNfc2Nyb2xsb2tcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJzY3JvbGxva1xmUgorLlRQIDUKK1xmQmlzX3N5bmNva1xmUgorcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIFxmQnN5bmNva1xmUgorLlRQIDUKK1xmQndnZXRwYXJlbnRcZlIKK3JldHVybnMgdGhlIHBhcmVudCBXSU5ET1cgcG9pbnRlciBmb3Igc3Vid2luZG93cywKK29yIE5VTEwgZm9yIHdpbmRvd3MgaGF2aW5nIG5vIHBhcmVudC4KKy5UUCA1CitcZkJ3Z2V0c2NycmVnXGZSCityZXR1cm5zIHRoZSB0b3AgYW5kIGJvdHRvbSByb3dzIGZvciB0aGUgc2Nyb2xsaW5nIG1hcmdpbiBhcyBzZXQgaW4gXGZCd3NldHNjcnJlZ1xmUC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIGZ1bmN0aW9ucyBhbGwgcmV0dXJuIFRSVUUgb3IgRkFMU0UsIGV4Y2VwdCBhcyBub3RlZC4KKy5TSCBOT1RFUworQm90aCBhIG1hY3JvIGFuZCBhIGZ1bmN0aW9uIGFyZSBwcm92aWRlZCBmb3IgZWFjaCBuYW1lLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4KK1RoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIG5jdXJzZXMgZXh0ZW5zaW9ucworYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbm9wdHNcZlIoM1gpLAorXGZCY3Vyc19vdXRvcHRzXGZSKDNYKSwKK1xmQmN1cnNfd2luZG93XGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19vdXRvcHRzLjN4IGIvbWFuL2N1cnNfb3V0b3B0cy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQ0MzdhCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfb3V0b3B0cy4zeApAQCAtMCwwICsxLDIyMiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX291dG9wdHMuM3gsdiAxLjIxIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggY3Vyc19vdXRvcHRzIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCY2xlYXJva1xmUiwKK1xmQmlkbG9rXGZSLAorXGZCaWRjb2tcZlIsCitcZkJpbW1lZG9rXGZSLAorXGZCbGVhdmVva1xmUiwKK1xmQnNldHNjcnJlZ1xmUiwKK1xmQndzZXRzY3JyZWdcZlIsCitcZkJzY3JvbGxva1xmUiwKK1xmQm5sXGZSLAorXGZCbm9ubFxmUiAtIFxmQmN1cnNlc1xmUiBvdXRwdXQgb3B0aW9ucworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgY2xlYXJvayhXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQmludCBpZGxvayhXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQnZvaWQgaWRjb2soV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJ2b2lkIGltbWVkb2soV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJpbnQgbGVhdmVvayhXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQmludCBzZXRzY3JyZWcoaW50IHRvcCwgaW50IGJvdCk7XGZSCisuYnIKK1xmQmludCB3c2V0c2NycmVnKFdJTkRPVyAqd2luLCBpbnQgdG9wLCBpbnQgYm90KTtcZlIKKy5icgorXGZCaW50IHNjcm9sbG9rKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCaW50IG5sKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgbm9ubCh2b2lkKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBzZXQgb3B0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc3R5bGUgb2Ygb3V0cHV0IHdpdGhpbgorXGZCY3Vyc2VzXGZSLgorQWxsIG9wdGlvbnMgYXJlIGluaXRpYWxseSBcZkJGQUxTRVxmUiwgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuCitJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHR1cm4gdGhlc2Ugb3B0aW9ucyBvZmYgYmVmb3JlIGNhbGxpbmcgXGZCZW5kd2luXGZSLgorLlBQCitJZiBcZkJjbGVhcm9rXGZSIGlzIGNhbGxlZCB3aXRoIFxmQlRSVUVcZlIgYXMgYXJndW1lbnQsIHRoZSBuZXh0CitjYWxsIHRvIFxmQndyZWZyZXNoXGZSIHdpdGggdGhpcyB3aW5kb3cgd2lsbCBjbGVhciB0aGUgc2NyZWVuIGNvbXBsZXRlbHkgYW5kCityZWRyYXcgdGhlIGVudGlyZSBzY3JlZW4gZnJvbSBzY3JhdGNoLgorVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgY29udGVudHMgb2YgdGhlCitzY3JlZW4gYXJlIHVuY2VydGFpbiwgb3IgaW4gc29tZSBjYXNlcyBmb3IgYSBtb3JlIHBsZWFzaW5nIHZpc3VhbCBlZmZlY3QuCitJZgordGhlIFxmSXdpblxmUiBhcmd1bWVudCB0byBcZkJjbGVhcm9rXGZSIGlzIHRoZSBnbG9iYWwgdmFyaWFibGUgXGZCY3Vyc2NyXGZSLAordGhlIG5leHQgY2FsbCB0byBcZkJ3cmVmcmVzaFxmUiB3aXRoIGFueSB3aW5kb3cgY2F1c2VzIHRoZSBzY3JlZW4gdG8gYmUgY2xlYXJlZAorYW5kIHJlcGFpbnRlZCBmcm9tIHNjcmF0Y2guCisuUFAKK0lmIFxmQmlkbG9rXGZSIGlzIGNhbGxlZCB3aXRoIFxmQlRSVUVcZlIgYXMgc2Vjb25kIGFyZ3VtZW50LCBcZkJjdXJzZXNcZlIKK2NvbnNpZGVycyB1c2luZyB0aGUgaGFyZHdhcmUgaW5zZXJ0L2RlbGV0ZSBsaW5lIGZlYXR1cmUgb2YgdGVybWluYWxzIHNvCitlcXVpcHBlZC4KK0NhbGxpbmcgXGZCaWRsb2tcZlIgd2l0aCBcZkJGQUxTRVxmUiBhcyBzZWNvbmQgYXJndW1lbnQgZGlzYWJsZXMgdXNlCitvZiBsaW5lIGluc2VydGlvbiBhbmQgZGVsZXRpb24uCitUaGlzIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvbmx5IGlmIHRoZQorYXBwbGljYXRpb24gbmVlZHMgaW5zZXJ0L2RlbGV0ZSBsaW5lLCBmb3IgZXhhbXBsZSwgZm9yIGEgc2NyZWVuIGVkaXRvci4KK0l0IGlzCitkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaW5zZXJ0L2RlbGV0ZSBsaW5lIHRlbmRzIHRvIGJlIHZpc3VhbGx5IGFubm95aW5nCit3aGVuIHVzZWQgaW4gYXBwbGljYXRpb25zIHdoZXJlIGl0IGlzIG5vdCByZWFsbHkgbmVlZGVkLgorSWYgaW5zZXJ0L2RlbGV0ZSBsaW5lCitjYW5ub3QgYmUgdXNlZCwgXGZCY3Vyc2VzXGZSIHJlZHJhd3MgdGhlIGNoYW5nZWQgcG9ydGlvbnMgb2YgYWxsIGxpbmVzLgorLlBQCitJZiBcZkJpZGNva1xmUiBpcyBjYWxsZWQgd2l0aCBcZkJGQUxTRVxmUiBhcyBzZWNvbmQgYXJndW1lbnQsIFxmQmN1cnNlc1xmUgorbm8gbG9uZ2VyIGNvbnNpZGVycyB1c2luZyB0aGUgaGFyZHdhcmUgaW5zZXJ0L2RlbGV0ZSBjaGFyYWN0ZXIgZmVhdHVyZSBvZgordGVybWluYWxzIHNvIGVxdWlwcGVkLgorVXNlIG9mIGNoYXJhY3RlciBpbnNlcnQvZGVsZXRlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KK0NhbGxpbmcgXGZCaWRjb2tcZlIgd2l0aCBcZkJUUlVFXGZSIGFzIHNlY29uZCBhcmd1bWVudCByZS1lbmFibGVzIHVzZQorb2YgY2hhcmFjdGVyIGluc2VydGlvbiBhbmQgZGVsZXRpb24uCisuUFAKK0lmIFxmQmltbWVkb2tcZlIgaXMgY2FsbGVkIHdpdGggXGZCVFJVRSBhcyBhcmd1bWVudFxmUiwgYW55IGNoYW5nZQoraW4gdGhlIHdpbmRvdyBpbWFnZSwgc3VjaCBhcyB0aGUgb25lcyBjYXVzZWQgYnkgXGZCd2FkZGNoLCB3Y2xydG9ib3QsIHdzY3JsXGZSLAorZXRjLiwgYXV0b21hdGljYWxseSBjYXVzZSBhIGNhbGwgdG8gXGZCd3JlZnJlc2hcZlIuCitIb3dldmVyLCBpdCBtYXkKK2RlZ3JhZGUgcGVyZm9ybWFuY2UgY29uc2lkZXJhYmx5LCBkdWUgdG8gcmVwZWF0ZWQgY2FsbHMgdG8gXGZCd3JlZnJlc2hcZlIuCitJdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLlBQCitOb3JtYWxseSwgdGhlIGhhcmR3YXJlIGN1cnNvciBpcyBsZWZ0IGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgd2luZG93IGN1cnNvcgorYmVpbmcgcmVmcmVzaGVkLgorVGhlIFxmQmxlYXZlb2tcZlIgb3B0aW9uIGFsbG93cyB0aGUgY3Vyc29yIHRvIGJlIGxlZnQKK3doZXJldmVyIHRoZSB1cGRhdGUgaGFwcGVucyB0byBsZWF2ZSBpdC4KK0l0IGlzIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHdoZXJlCit0aGUgY3Vyc29yIGlzIG5vdCB1c2VkLCBzaW5jZSBpdCByZWR1Y2VzIHRoZSBuZWVkIGZvciBjdXJzb3IgbW90aW9ucy4KKy5QUAorVGhlIFxmQnNldHNjcnJlZ1xmUiBhbmQgXGZCd3NldHNjcnJlZ1xmUiByb3V0aW5lcyBhbGxvdyB0aGUgYXBwbGljYXRpb24KK3Byb2dyYW1tZXIgdG8gc2V0IGEgc29mdHdhcmUgc2Nyb2xsaW5nIHJlZ2lvbiBpbiBhIHdpbmRvdy4KK1xmSXRvcFxmUiBhbmQKK1xmSWJvdFxmUiBhcmUgdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgdG9wIGFuZCBib3R0b20gbWFyZ2luIG9mIHRoZSBzY3JvbGxpbmcKK3JlZ2lvbi4KKyhMaW5lIDAgaXMgdGhlIHRvcCBsaW5lIG9mIHRoZSB3aW5kb3cuKSAgSWYgdGhpcyBvcHRpb24gYW5kCitcZkJzY3JvbGxva1xmUiBhcmUgZW5hYmxlZCwgYW4gYXR0ZW1wdCB0byBtb3ZlIG9mZiB0aGUgYm90dG9tIG1hcmdpbiBsaW5lCitjYXVzZXMgYWxsIGxpbmVzIGluIHRoZSBzY3JvbGxpbmcgcmVnaW9uIHRvIHNjcm9sbCBvbmUgbGluZSBpbiB0aGUgZGlyZWN0aW9uCitvZiB0aGUgZmlyc3QgbGluZS4KK09ubHkgdGhlIHRleHQgb2YgdGhlIHdpbmRvdyBpcyBzY3JvbGxlZC4KKyhOb3RlIHRoYXQgdGhpcworaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgdXNlIG9mIGEgcGh5c2ljYWwgc2Nyb2xsaW5nIHJlZ2lvbiBjYXBhYmlsaXR5IGluIHRoZQordGVybWluYWwsIGxpa2UgdGhhdCBpbiB0aGUgVlQxMDAuCitJZiBcZkJpZGxva1xmUiBpcyBlbmFibGVkIGFuZCB0aGUgdGVybWluYWwKK2hhcyBlaXRoZXIgYSBzY3JvbGxpbmcgcmVnaW9uIG9yIGluc2VydC9kZWxldGUgbGluZSBjYXBhYmlsaXR5LCB0aGV5IHdpbGwKK3Byb2JhYmx5IGJlIHVzZWQgYnkgdGhlIG91dHB1dCByb3V0aW5lcy4pCisuUFAKK1RoZSBcZkJzY3JvbGxva1xmUiBvcHRpb24gY29udHJvbHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGN1cnNvciBvZiBhIHdpbmRvdyBpcworbW92ZWQgb2ZmIHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cgb3Igc2Nyb2xsaW5nIHJlZ2lvbiwgZWl0aGVyIGFzIGEgcmVzdWx0IG9mIGEKK25ld2xpbmUgYWN0aW9uIG9uIHRoZSBib3R0b20gbGluZSwgb3IgdHlwaW5nIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGFzdAorbGluZS4KK0lmIGRpc2FibGVkLCAoXGZJYmZcZlIgaXMgXGZCRkFMU0VcZlIpLCB0aGUgY3Vyc29yIGlzIGxlZnQgb24gdGhlIGJvdHRvbQorbGluZS4KK0lmIGVuYWJsZWQsIChcZkliZlxmUiBpcyBcZkJUUlVFXGZSKSwgdGhlIHdpbmRvdyBpcyBzY3JvbGxlZCB1cCBvbmUgbGluZQorKE5vdGUgdGhhdCB0byBnZXQgdGhlIHBoeXNpY2FsIHNjcm9sbGluZyBlZmZlY3Qgb24gdGhlIHRlcm1pbmFsLCBpdCBpcworYWxzbyBuZWNlc3NhcnkgdG8gY2FsbCBcZkJpZGxva1xmUikuCisuUFAKK1RoZSBcZkJubFxmUiBhbmQgXGZCbm9ubFxmUiByb3V0aW5lcyBjb250cm9sIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgZGlzcGxheQorZGV2aWNlIHRyYW5zbGF0ZXMgdGhlIHJldHVybiBrZXkgaW50byBuZXdsaW5lIG9uIGlucHV0LCBhbmQgd2hldGhlciBpdAordHJhbnNsYXRlcyBuZXdsaW5lIGludG8gcmV0dXJuIGFuZCBsaW5lLWZlZWQgb24gb3V0cHV0IChpbiBlaXRoZXIgY2FzZSwgdGhlCitjYWxsIFxmQmFkZGNoKCdcXG4nKVxmUiBkb2VzIHRoZSBlcXVpdmFsZW50IG9mIHJldHVybiBhbmQgbGluZSBmZWVkIG9uIHRoZQordmlydHVhbCBzY3JlZW4pLgorSW5pdGlhbGx5LCB0aGVzZSB0cmFuc2xhdGlvbnMgZG8gb2NjdXIuCitJZiB5b3UgZGlzYWJsZSB0aGVtCit1c2luZyBcZkJub25sXGZSLCBcZkJjdXJzZXNcZlIgd2lsbCBiZSBhYmxlIHRvIG1ha2UgYmV0dGVyIHVzZSBvZiB0aGUgbGluZS1mZWVkCitjYXBhYmlsaXR5LCByZXN1bHRpbmcgaW4gZmFzdGVyIGN1cnNvciBtb3Rpb24uCitBbHNvLCBcZkJjdXJzZXNcZlIgd2lsbCB0aGVuIGJlCithYmxlIHRvIGRldGVjdCB0aGUgcmV0dXJuIGtleS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbnMgXGZCc2V0c2NycmVnXGZSIGFuZCBcZkJ3c2V0c2NycmVnXGZSIHJldHVybiBcZkJPS1xmUiB1cG9uIHN1Y2Nlc3MKK2FuZCBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlLgorQWxsIG90aGVyIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgYWx3YXlzCityZXR1cm4gXGZCT0tcZlIuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCisuUFAKK0luIHRoaXMgaW1wbGVtZW50YXRpb24sIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSB3aW5kb3cgcG9pbnRlcgord2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwuCisuUlMKKy5UUCA1CisuQiB3Y2xydG9lb2wKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSBjdXJzb3IgcG9zaXRpb24gaXMgYWJvdXQgdG8gd3JhcC4KKy5UUCA1CisuQiB3c2V0c2NycmVnCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzY3JvbGxpbmcgcmVnaW9uIGxpbWl0cyBleHRlbmQgb3V0c2lkZSB0aGUgd2luZG93LgorLlJFCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KKy5QUAorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgaXMgYW1iaWd1b3VzIG9uIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIFxmQnJhd1xmUigpCitzaG91bGQgZGlzYWJsZSB0aGUgQ1JMRiB0cmFuc2xhdGlvbnMgY29udHJvbGxlZCBieSBcZkJubFxmUigpIGFuZCBcZkJub25sXGZSKCkuCitCU0QgY3Vyc2VzIGRpZCB0dXJuIG9mZiB0aGVzZSB0cmFuc2xhdGlvbnM7IEFUJlQgY3Vyc2VzIChhdCBsZWFzdCBhcyBsYXRlIGFzCitTVnIxKSBkaWQgbm90LgorV2UgY2hvb3NlIHRvIGRvIHNvLCBvbiB0aGUgdGhlb3J5IHRoYXQgYSBwcm9ncmFtbWVyIHJlcXVlc3RpbmcKK3JhdyBpbnB1dCB3YW50cyBhIGNsZWFuIChpZGVhbGx5IDgtYml0IGNsZWFuKSBjb25uZWN0aW9uIHRoYXQgdGhlIG9wZXJhdGluZworc3lzdGVtIHdpbGwgbm90IGFsdGVyLgorLlBQCitTb21lIGhpc3RvcmljIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgaGFkLCBhcyBhbiB1bmRvY3VtZW50ZWQgZmVhdHVyZSwgdGhlCithYmlsaXR5IHRvIGRvIHRoZSBlcXVpdmFsZW50IG9mIFxmQmNsZWFyb2soLi4uLCAxKVxmUiBieSBzYXlpbmcKK1xmQnRvdWNod2luKHN0ZHNjcilcZlIgb3IgXGZCY2xlYXIoc3Rkc2NyKVxmUi4KK1RoaXMgd2lsbCBub3Qgd29yayB1bmRlcgorbmN1cnNlcy4KKy5QUAorRWFybGllciBTeXN0ZW0gViBjdXJzZXMgaW1wbGVtZW50YXRpb25zIHNwZWNpZmllZCB0aGF0IHdpdGggXGZCc2Nyb2xsb2tcZlIKK2VuYWJsZWQsIGFueSB3aW5kb3cgbW9kaWZpY2F0aW9uIHRyaWdnZXJpbmcgYSBzY3JvbGwgYWxzbyBmb3JjZWQgYSBwaHlzaWNhbAorcmVmcmVzaC4KK1hTSSBDdXJzZXMgZG9lcyBub3QgcmVxdWlyZSB0aGlzLCBhbmQgXGZCbmN1cnNlc1xmUiBhdm9pZHMgZG9pbmcKK2l0IHRvIHBlcmZvcm0gYmV0dGVyIHZlcnRpY2FsLW1vdGlvbiBvcHRpbWl6YXRpb24gYXQgXGZCd3JlZnJlc2hcZlIKK3RpbWUuCisuUFAKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGRvZXMgbm90IG1lbnRpb24gdGhhdCB0aGUgY3Vyc29yIHNob3VsZCBiZQorbWFkZSBpbnZpc2libGUgYXMgYSBzaWRlLWVmZmVjdCBvZiBcZkJsZWF2ZW9rXGZSLgorU1ZyNCBjdXJzZXMgZG9jdW1lbnRhdGlvbiBkb2VzIHRoaXMsIGJ1dCB0aGUgY29kZSBkb2VzIG5vdC4KK1VzZSBcZkJjdXJzX3NldFxmUiB0byBtYWtlIHRoZSBjdXJzb3IgaW52aXNpYmxlLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCY2xlYXJva1xmUiwgXGZCbGVhdmVva1xmUiwgXGZCc2Nyb2xsb2tcZlIsIFxmQmlkY29rXGZSLCBcZkJubFxmUiwKK1xmQm5vbmxcZlIgYW5kIFxmQnNldHNjcnJlZ1xmUiBtYXkgYmUgbWFjcm9zLgorLlBQCitUaGUgXGZCaW1tZWRva1xmUiByb3V0aW5lIGlzIHVzZWZ1bCBmb3Igd2luZG93cyB0aGF0IGFyZSB1c2VkIGFzIHRlcm1pbmFsCitlbXVsYXRvcnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfYWRkY2hcZlIoM1gpLCBcZkJjdXJzX2NsZWFyXGZSKDNYKSwKK1xmQmN1cnNfaW5pdHNjclxmUigzWCksIFxmQmN1cnNfc2Nyb2xsXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19vdmVybGF5LjN4IGIvbWFuL2N1cnNfb3ZlcmxheS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjZjM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfb3ZlcmxheS4zeApAQCAtMCwwICsxLDg3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfb3ZlcmxheS4zeCx2IDEuMTQgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBjdXJzX292ZXJsYXkgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJvdmVybGF5XGZSLAorXGZCb3ZlcndyaXRlXGZSLAorXGZCY29weXdpblxmUiAtIG92ZXJsYXkgYW5kIG1hbmlwdWxhdGUgb3ZlcmxhcHBlZCBcZkJjdXJzZXNcZlIgd2luZG93cworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgb3ZlcmxheShjb25zdCBXSU5ET1cgKnNyY3dpbiwgV0lORE9XICpkc3R3aW4pO1xmUgorLmJyCitcZkJpbnQgb3ZlcndyaXRlKGNvbnN0IFdJTkRPVyAqc3Jjd2luLCBXSU5ET1cgKmRzdHdpbik7XGZSCisuYnIKK1xmQmludCBjb3B5d2luKGNvbnN0IFdJTkRPVyAqc3Jjd2luLCBXSU5ET1cgKmRzdHdpbiwgaW50IHNtaW5yb3csXGZSCisgICAgICBcZkJpbnQgc21pbmNvbCwgaW50IGRtaW5yb3csIGludCBkbWluY29sLCBpbnQgZG1heHJvdyxcZlIKKyAgICAgIFxmQmludCBkbWF4Y29sLCBpbnQgb3ZlcmxheSk7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJvdmVybGF5XGZSIGFuZCBcZkJvdmVyd3JpdGVcZlIgcm91dGluZXMgb3ZlcmxheSBcZklzcmN3aW5cZlIgb24KK3RvcCBvZiBcZklkc3R3aW5cZlIuICBcZklzY3J3aW5cZlIgYW5kIFxmSWRzdHdpblxmUiBhcmUgbm90IHJlcXVpcmVkCit0byBiZSB0aGUgc2FtZSBzaXplOyBvbmx5IHRleHQgd2hlcmUgdGhlIHR3byB3aW5kb3dzIG92ZXJsYXAgaXMKK2NvcGllZC4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgXGZCb3ZlcmxheVxmUiBpcyBub24tZGVzdHJ1Y3RpdmUKKyhibGFua3MgYXJlIG5vdCBjb3BpZWQpIHdoZXJlYXMgXGZCb3ZlcndyaXRlXGZSIGlzIGRlc3RydWN0aXZlLgorLlBQCitUaGUgXGZCY29weXdpblxmUiByb3V0aW5lIHByb3ZpZGVzIGEgZmluZXIgZ3JhbnVsYXJpdHkgb2YgY29udHJvbCBvdmVyIHRoZQorXGZCb3ZlcmxheVxmUiBhbmQgXGZCb3ZlcndyaXRlXGZSIHJvdXRpbmVzLiAgTGlrZSBpbiB0aGUgXGZCcHJlZnJlc2hcZlIKK3JvdXRpbmUsIGEgcmVjdGFuZ2xlIGlzIHNwZWNpZmllZCBpbiB0aGUgZGVzdGluYXRpb24gd2luZG93LCAoXGZJZG1pbnJvd1xmUiwKK1xmSWRtaW5jb2xcZlIpIGFuZCAoXGZJZG1heHJvd1xmUiwgXGZJZG1heGNvbFxmUiksIGFuZCB0aGUgdXBwZXItbGVmdC1jb3JuZXIKK2Nvb3JkaW5hdGVzIG9mIHRoZSBzb3VyY2Ugd2luZG93LCAoXGZJc21pbnJvd1xmUiwgXGZJc21pbmNvbFxmUikuICBJZiB0aGUKK2FyZ3VtZW50IFxmSW92ZXJsYXlcZlIgaXMgXGZCdHJ1ZVxmUiwgdGhlbiBjb3B5aW5nIGlzIG5vbi1kZXN0cnVjdGl2ZSwgYXMgaW4KK1xmQm92ZXJsYXlcZlIuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlLCBhbmQgXGZCT0tcZlIKKyhTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwKK1xmQmNvcHl3aW5cZlAsCitcZkJvdmVybGF5XGZQIGFuZCBcZkJvdmVyd3JpdGVcZlAgcmV0dXJuIGFuIGVycm9yCitpZiBlaXRoZXIgb2YgdGhlIHdpbmRvdyBwb2ludGVycyBhcmUgbnVsbCwgb3IKK2lmIHNvbWUgcGFydCBvZiB0aGUgd2luZG93IHdvdWxkIGJlIHBsYWNlZCBvZmYtc2NyZWVuLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCb3ZlcmxheVxmUiBhbmQgXGZCb3ZlcndyaXRlXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMgKGFkZGluZyB0aGUgY29uc3QKK3F1YWxpZmllcnMpLiAgSXQgZnVydGhlciBzcGVjaWZpZXMgdGhlaXIgYmVoYXZpb3IgaW4gdGhlIHByZXNlbmNlIG9mIGNoYXJhY3RlcnMKK3dpdGggbXVsdGlieXRlIHJlbmRpdGlvbnMgKG5vdCB5ZXQgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24pLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX3BhZFxmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfcGFkLjN4IGIvbWFuL2N1cnNfcGFkLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjIyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19wYWQuM3gKQEAgLTAsMCArMSwxNjIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19wYWQuM3gsdiAxLjE0IDIwMDUvMDUvMTUgMTY6MTg6NDMgdG9tIEV4cCAkCisuVEggY3Vyc19wYWQgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJuZXdwYWRcZlIsCitcZkJzdWJwYWRcZlIsCitcZkJwcmVmcmVzaFxmUiwKK1xmQnBub3V0cmVmcmVzaFxmUiwKK1xmQnBlY2hvY2hhclxmUiwKK1xmQnBlY2hvX3djaGFyXGZSIC0gY3JlYXRlIGFuZCBkaXNwbGF5IFxmQmN1cnNlc1xmUiBwYWRzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQldJTkRPVyAqbmV3cGFkKGludCBubGluZXMsIGludCBuY29scyk7XGZSCisuYnIKK1xmQldJTkRPVyAqc3VicGFkKFdJTkRPVyAqb3JpZywgaW50IG5saW5lcywgaW50IG5jb2xzLFxmUgorICAgICAgXGZCaW50IGJlZ2luX3ksIGludCBiZWdpbl94KTtcZlIKKy5icgorXGZCaW50IHByZWZyZXNoKFdJTkRPVyAqcGFkLCBpbnQgcG1pbnJvdywgaW50IHBtaW5jb2wsXGZSCisgICAgICBcZkJpbnQgc21pbnJvdywgaW50IHNtaW5jb2wsIGludCBzbWF4cm93LCBpbnQgc21heGNvbCk7XGZSCisuYnIKK1xmQmludCBwbm91dHJlZnJlc2goV0lORE9XICpwYWQsIGludCBwbWlucm93LCBpbnQgcG1pbmNvbCxcZlIKKyAgICAgIFxmQmludCBzbWlucm93LCBpbnQgc21pbmNvbCwgaW50IHNtYXhyb3csIGludCBzbWF4Y29sKTtcZlIKKy5icgorXGZCaW50IHBlY2hvY2hhcihXSU5ET1cgKnBhZCwgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IHBlY2hvX3djaGFyKFdJTkRPVyAqcGFkLCBjb25zdCBjY2hhcl90ICp3Y2gpO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCbmV3cGFkXGZSIHJvdXRpbmUgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgcGFkIGRhdGEKK3N0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMsIFxmSW5saW5lc1xmUiwgYW5kIGNvbHVtbnMsCitcZkluY29sc1xmUi4KK0EgcGFkIGlzIGxpa2UgYSB3aW5kb3csIGV4Y2VwdCB0aGF0IGl0IGlzIG5vdCByZXN0cmljdGVkIGJ5IHRoZQorc2NyZWVuIHNpemUsIGFuZCBpcyBub3QgbmVjZXNzYXJpbHkgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZQorc2NyZWVuLgorUGFkcyBjYW4gYmUgdXNlZCB3aGVuIGEgbGFyZ2Ugd2luZG93IGlzIG5lZWRlZCwgYW5kIG9ubHkgYSBwYXJ0IG9mIHRoZQord2luZG93IHdpbGwgYmUgb24gdGhlIHNjcmVlbiBhdCBvbmUgdGltZS4KK0F1dG9tYXRpYyByZWZyZXNoZXMgb2YgcGFkcworKGUuZy4sIGZyb20gc2Nyb2xsaW5nIG9yIGVjaG9pbmcgb2YgaW5wdXQpIGRvIG5vdCBvY2N1ci4KK0l0IGlzIG5vdAorbGVnYWwgdG8gY2FsbCBcZkJ3cmVmcmVzaFxmUiB3aXRoIGEgXGZJcGFkXGZSIGFzIGFuIGFyZ3VtZW50OyB0aGUgcm91dGluZXMKK1xmQnByZWZyZXNoXGZSIG9yIFxmQnBub3V0cmVmcmVzaFxmUiBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQuCitOb3RlIHRoYXQgdGhlc2UKK3JvdXRpbmVzIHJlcXVpcmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIHNwZWNpZnkgdGhlIHBhcnQgb2YgdGhlIHBhZCB0byBiZQorZGlzcGxheWVkIGFuZCB0aGUgbG9jYXRpb24gb24gdGhlIHNjcmVlbiB0byBiZSB1c2VkIGZvciB0aGUgZGlzcGxheS4KKy5QUAorVGhlIFxmQnN1YnBhZFxmUiByb3V0aW5lIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3Vid2luZG93IHdpdGhpbiBhCitwYWQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzLCBcZklubGluZXNcZlIsIGFuZCBjb2x1bW5zLCBcZkluY29sc1xmUi4KK1VubGlrZSBcZkJzdWJ3aW5cZlIsIHdoaWNoIHVzZXMgc2NyZWVuIGNvb3JkaW5hdGVzLCB0aGUgd2luZG93IGlzIGF0IHBvc2l0aW9uCisoXGZJYmVnaW5cZlJfXGZJeFxmUlxmQixcZlIgXGZJYmVnaW5cZlJfXGZJeVxmUikgb24gdGhlIHBhZC4KK1RoZSB3aW5kb3cgaXMKK21hZGUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgd2luZG93IFxmSW9yaWdcZlIsIHNvIHRoYXQgY2hhbmdlcyBtYWRlIHRvIG9uZSB3aW5kb3cKK2FmZmVjdCBib3RoIHdpbmRvd3MuCitEdXJpbmcgdGhlIHVzZSBvZiB0aGlzIHJvdXRpbmUsIGl0IHdpbGwgb2Z0ZW4gYmUKK25lY2Vzc2FyeSB0byBjYWxsIFxmQnRvdWNod2luXGZSIG9yIFxmQnRvdWNobGluZVxmUiBvbiBcZklvcmlnXGZSIGJlZm9yZQorY2FsbGluZyBcZkJwcmVmcmVzaFxmUi4KKy5QUAorVGhlIFxmQnByZWZyZXNoXGZSIGFuZCBcZkJwbm91dHJlZnJlc2hcZlIgcm91dGluZXMgYXJlIGFuYWxvZ291cyB0bworXGZCd3JlZnJlc2hcZlIgYW5kIFxmQndub3V0cmVmcmVzaFxmUiBleGNlcHQgdGhhdCB0aGV5IHJlbGF0ZSB0byBwYWRzIGluc3RlYWQKK29mIHdpbmRvd3MuCitUaGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBuZWVkZWQgdG8gaW5kaWNhdGUgd2hhdCBwYXJ0IG9mIHRoZQorcGFkIGFuZCBzY3JlZW4gYXJlIGludm9sdmVkLgorXGZJcG1pbnJvd1xmUiBhbmQgXGZJcG1pbmNvbFxmUiBzcGVjaWZ5IHRoZSB1cHBlcgorbGVmdC1oYW5kIGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcGFkLgorXGZJc21pbnJvd1xmUiwKK1xmSXNtaW5jb2xcZlIsIFxmSXNtYXhyb3dcZlIsIGFuZCBcZklzbWF4Y29sXGZSIHNwZWNpZnkgdGhlIGVkZ2VzIG9mIHRoZQorcmVjdGFuZ2xlIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLgorVGhlIGxvd2VyIHJpZ2h0LWhhbmQgY29ybmVyIG9mIHRoZQorcmVjdGFuZ2xlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcGFkIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgc2NyZWVuIGNvb3JkaW5hdGVzLAorc2luY2UgdGhlIHJlY3RhbmdsZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplLgorQm90aCByZWN0YW5nbGVzIG11c3QgYmUgZW50aXJlbHkKK2NvbnRhaW5lZCB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzdHJ1Y3R1cmVzLgorTmVnYXRpdmUgdmFsdWVzIG9mCitcZklwbWlucm93XGZSLCBcZklwbWluY29sXGZSLCBcZklzbWlucm93XGZSLCBvciBcZklzbWluY29sXGZSIGFyZSB0cmVhdGVkIGFzIGlmCit0aGV5IHdlcmUgemVyby4KKy5QUAorVGhlIFxmQnBlY2hvY2hhclxmUiByb3V0aW5lIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIGEgY2FsbCB0byBcZkJhZGRjaFxmUgorZm9sbG93ZWQgYnkgYSBjYWxsIHRvIFxmQnJlZnJlc2hcZlIsIGEgY2FsbCB0byBcZkJ3YWRkY2hcZlIgZm9sbG93ZWQgYnkgYSBjYWxsCit0byBcZkJ3cmVmcmVzaFxmUiwgb3IgYSBjYWxsIHRvIFxmQndhZGRjaFxmUiBmb2xsb3dlZCBieSBhIGNhbGwgdG8KK1xmQnByZWZyZXNoXGZSLgorVGhlIGtub3dsZWRnZSB0aGF0IG9ubHkgYSBzaW5nbGUgY2hhcmFjdGVyIGlzIGJlaW5nIG91dHB1dCBpcwordGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGFuZCwgZm9yIG5vbi1jb250cm9sIGNoYXJhY3RlcnMsIGEgY29uc2lkZXJhYmxlCitwZXJmb3JtYW5jZSBnYWluIG1pZ2h0IGJlIHNlZW4gYnkgdXNpbmcgdGhlc2Ugcm91dGluZXMgaW5zdGVhZCBvZiB0aGVpcgorZXF1aXZhbGVudHMuCitJbiB0aGUgY2FzZSBvZiBcZkJwZWNob2NoYXJcZlIsIHRoZSBsYXN0IGxvY2F0aW9uIG9mIHRoZSBwYWQgb24KK3RoZSBzY3JlZW4gaXMgcmV1c2VkIGZvciB0aGUgYXJndW1lbnRzIHRvIFxmQnByZWZyZXNoXGZSLgorLlBQCitUaGUgXGZCcGVjaG9fd2NoYXJcZlIgZnVuY3Rpb24gaXMgdGhlIGFuYWxvZ291cyB3aWRlLWNoYXJhY3RlcgorZm9ybSBvZiBcZkJwZWNob2NoYXJcZlIuCitJdCBvdXRwdXRzIG9uZSBjaGFyYWN0ZXIgdG8gYSBwYWQgYW5kIGltbWVkaWF0ZWx5IHJlZnJlc2hlcyB0aGUgcGFkLgorSXQgZG9lcyB0aGlzIGJ5IGEgY2FsbCB0byBcZkJ3YWRkX3djaFxmUiBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXGZCcHJlZnJlc2hcZlIuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUgorKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24uCisuUFAKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLCBhbmQgc2V0IFxmQmVycm5vXGZSCit0byBcZkJFTk9NRU1cZlIuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uCisuUlMKKy5UUCA1CitcZkJwcmVmcmVzaFxmUCBhbmQgXGZCcG5vdXRyZWZyZXNoXGZQCityZXR1cm4gYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgdGhlIHdpbmRvdyBpcyBub3QgcmVhbGx5IGEgcGFkIG9yCitpZiB0aGUgYXJlYSB0byByZWZyZXNoIGV4dGVuZHMgb2ZmLXNjcmVlbiBvcgoraWYgdGhlIG1pbmltdW0gY29vcmRpbmF0ZXMgYXJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bS4KKy5UUCA1CitcZkJwZWNob2NoYXJcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgaXMgbm90IHJlYWxseSBhIHBhZCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNhbGwKK3RvIFxmQndlY2hvY2hhclxmUCByZXR1cm5zIGFuIGVycm9yLgorLlRQIDUKK1xmQnBlY2hvX3djaGFyXGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgd2luZG93IGlzIG5vdCByZWFsbHkgYSBwYWQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjYWxsCit0byBcZkJ3ZWNob193Y2hhclxmUCByZXR1cm5zIGFuIGVycm9yLgorLlJFCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJwZWNob2NoYXJcZlIgbWF5IGJlIGEgbWFjcm8uCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCksIFxmQmN1cnNfdG91Y2hcZlIoM1gpLCBcZkJjdXJzX2FkZGNoXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfcHJpbnQuM3ggYi9tYW4vY3Vyc19wcmludC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI5Y2EyCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfcHJpbnQuM3gKQEAgLTAsMCArMSw3NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3ByaW50LjN4LHYgMS44IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc19wcmludCAzWCAiIgorLlNIIE5BTUUKK1xmQm1jcHJpbnRcZlIgLSBzaGlwIGJpbmFyeSBkYXRhIHRvIHByaW50ZXIKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgbWNwcmludChjaGFyICpkYXRhLCBpbnQgbGVuKTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBcZkJtYzVwXGZSIG9yIFxmQm1jNFxmUiBhbmQgXGZCbWM1XGZSIGNhcGFiaWxpdGllcywKK2lmIHRoZXkgYXJlIHByZXNlbnQsIHRvIHNoaXAgZ2l2ZW4gZGF0YSB0byBhIHByaW50ZXIgYXR0YWNoZWQgdG8gdGhlIHRlcm1pbmFsLgorLlBQCitOb3RlIHRoYXQgdGhlIFxmQm1jcHJpbnRcZlIgY29kZSBoYXMgbm8gd2F5IHRvIGRvIGZsb3cgY29udHJvbCB3aXRoIHRoZSBwcmludGVyCitvciB0byBrbm93IGhvdyBtdWNoIGJ1ZmZlcmluZyBpdCBoYXMuICBZb3VyIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvcgora2VlcGluZyB0aGUgcmF0ZSBvZiB3cml0ZXMgdG8gdGhlIHByaW50ZXIgYmVsb3cgaXRzIGNvbnRpbnVvdXMgdGhyb3VnaHB1dCByYXRlCisodHlwaWNhbGx5IGFib3V0IGhhbGYgb2YgaXRzIG5vbWluYWwgY3BzIHJhdGluZykuICBEb3QtbWF0cml4IHByaW50ZXJzIGFuZAorNi1wYWdlLXBlci1taW51dGUgbGFzZXJzIGNhbiB0eXBpY2FsbHkgaGFuZGxlIDgwY3BzLCBzbyBhIGdvb2QgY29uc2VydmF0aXZlCitydWxlIG9mIHRodW1iIGlzIHRvIHNsZWVwIGZvciBhIHNlY29uZCBhZnRlciBzaGlwcGluZyBlYWNoIDgwLWNoYXJhY3RlciBsaW5lLgorLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIFxmQm1jcHJpbnRcZlIgZnVuY3Rpb24gcmV0dXJucyBcZkJFUlJcZlIgaWYgdGhlIHdyaXRlIG9wZXJhdGlvbiBhYm9ydGVkCitmb3Igc29tZSByZWFzb24uICBJbiB0aGlzIGNhc2UsIGVycm5vIHdpbGwgY29udGFpbiBlaXRoZXIgYW4gZXJyb3IgYXNzb2NpYXRlZAord2l0aCBcZkJ3cml0ZSgyKVxmUiBvciBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CitFTk9ERVYKK0NhcGFiaWxpdGllcyBmb3IgcHJpbnRlciByZWRpcmVjdGlvbiBkbyBub3QgZXhpc3QuCisuVFAgNQorRU5PTUVNCitDb3VsZG4ndCBhbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSB0byBidWZmZXIgdGhlIHByaW50ZXIgd3JpdGUuCisuUFAKK1doZW4gXGZCbWNwcmludFxmUiBzdWNjZWVkcywgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkKK3NlbnQgdG8gdGhlIHByaW50ZXIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBcZkJtY3ByaW50XGZSIGNhbGwgd2FzIGRlc2lnbmVkIGZvciBcZkJuY3Vyc2VzXGZSKDNYKSwgYW5kIGlzIG5vdCBmb3VuZAoraW4gU1ZyNCBjdXJzZXMsIDQuNEJTRCBjdXJzZXMsIG9yIGFueSBvdGhlciBwcmV2aW91cyB2ZXJzaW9uIG9mIGN1cnNlcy4KKy5TSCBCVUdTCitQYWRkaW5nIGluIHRoZSBcZkJtYzVwXGZSLCBcZkJtYzRcZlIgYW5kIFxmQm1jNVxmUiBjYXBhYmlsaXRpZXMgd2lsbCBub3QgYmUKK2ludGVycHJldGVkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpXGZSCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX3ByaW50dy4zeCBiL21hbi9jdXJzX3ByaW50dy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQwZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfcHJpbnR3LjN4CkBAIC0wLDAgKzEsOTQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19wcmludHcuM3gsdiAxLjE3IDIwMDYvMTIvMjQgMTY6MDU6MTcgdG9tIEV4cCAkCisuVEggY3Vyc19wcmludHcgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJwcmludHdcZlIsCitcZkJ3cHJpbnR3XGZSLAorXGZCbXZwcmludHdcZlIsCitcZkJtdndwcmludHdcZlIsCitcZkJ2d3ByaW50d1xmUiwgXGZCdndfcHJpbnR3XGZSIC0gcHJpbnQgZm9ybWF0dGVkIG91dHB1dCBpbiBcZkJjdXJzZXNcZlIgd2luZG93cworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgcHJpbnR3KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcZlIKKy5icgorXGZCaW50IHdwcmludHcoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcZlIKKy5icgorXGZCaW50IG12cHJpbnR3KGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgbXZ3cHJpbnR3KFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcZlIKKy5icgorXGZCaW50IHZ3cHJpbnR3KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgdmFyZ2xpc3QpO1xmUgorLmJyCitcZkJpbnQgdndfcHJpbnR3KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgdmFyZ2xpc3QpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJwcmludHdcZlIsIFxmQndwcmludHdcZlIsIFxmQm12cHJpbnR3XGZSIGFuZCBcZkJtdndwcmludHdcZlIKK3JvdXRpbmVzIGFyZSBhbmFsb2dvdXMgdG8gXGZCcHJpbnRmXGZSIFtzZWUgXGZCcHJpbnRmXGZSKDMpXS4gIEluCitlZmZlY3QsIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBvdXRwdXQgYnkgXGZCcHJpbnRmXGZSIGlzIG91dHB1dAoraW5zdGVhZCBhcyB0aG91Z2ggXGZCd2FkZHN0clxmUiB3ZXJlIHVzZWQgb24gdGhlIGdpdmVuIHdpbmRvdy4KKy5QUAorVGhlIFxmQnZ3cHJpbnR3XGZSIGFuZCBcZkJ3dl9wcmludHdcZlIgcm91dGluZXMgYXJlIGFuYWxvZ291cwordG8gXGZCdnByaW50ZlxmUiBbc2VlIFxmQnByaW50ZlxmUigzKV0KK2FuZCBwZXJmb3JtIGEgXGZCd3ByaW50d1xmUiB1c2luZyBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuCitUaGUgdGhpcmQgYXJndW1lbnQgaXMgYSBcZkJ2YV9saXN0XGZSLCBhIHBvaW50ZXIgdG8gYQorbGlzdCBvZiBhcmd1bWVudHMsIGFzIGRlZmluZWQgaW4gXGZCPHN0ZGFyZy5oPlxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSCisoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sCithbiBlcnJvciBtYXkgYmUgcmV0dXJuZWQgaWYgaXQgY2Fubm90IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZQorYnVmZmVyIHVzZWQgdG8gZm9ybWF0IHRoZSByZXN1bHRzLgorSXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuICBUaGUgZnVuY3Rpb24KK1xmQnZ3cHJpbnR3XGZSIGlzIG1hcmtlZCBUTyBCRSBXSVRIRFJBV04sIGFuZCBpcyB0byBiZSByZXBsYWNlZCBieSBhIGZ1bmN0aW9uCitcZkJ2d19wcmludHdcZlIgdXNpbmcgdGhlIFxmQjxzdGRhcmcuaD5cZlIgaW50ZXJmYWNlLgorVGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24sIFZlcnNpb24gMiBzdGF0ZXMgdGhhdAorXGZCdndfcHJpbnR3XGZSICBpcyBwcmVmZXJyZWQgdG8gXGZCdndwcmludHdcZlIgc2luY2UgdGhlIGxhdHRlciByZXF1aXJlcworaW5jbHVkaW5nIFxmQjx2YXJhcmdzLmg+XGZSLCB3aGljaAorY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyBcZkI8c3RkYXJnLmg+XGZSLgorVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIFxmQjxzdGRhcmcuaD5cZlIgZm9yIGJvdGgsIGJlY2F1c2UgdGhhdCBoZWFkZXIKK2lzIGluY2x1ZGVkIGluIFxmQjxjdXJzZXMuaFxmUj4uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQnByaW50ZlxmUigzKSwgXGZCdnByaW50ZigzKVxmUgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc19yZWZyZXNoLjN4IGIvbWFuL2N1cnNfcmVmcmVzaC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2UwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfcmVmcmVzaC4zeApAQCAtMCwwICsxLDE0NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3JlZnJlc2guM3gsdiAxLjEyIDIwMDUvMDUvMTUgMTY6MTg6NDkgdG9tIEV4cCAkCisuVEggY3Vyc19yZWZyZXNoIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZG91cGRhdGVcZlIsCitcZkJyZWRyYXd3aW5cZlIsCitcZkJyZWZyZXNoXGZSLAorXGZCd25vdXRyZWZyZXNoXGZSLAorXGZCd3JlZHJhd2xuXGZSLAorXGZCd3JlZnJlc2hcZlIgLSByZWZyZXNoIFxmQmN1cnNlc1xmUiB3aW5kb3dzIGFuZCBsaW5lcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgcmVmcmVzaCh2b2lkKTtcZlIKKy5icgorXGZCaW50IHdyZWZyZXNoKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IHdub3V0cmVmcmVzaChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBkb3VwZGF0ZSh2b2lkKTtcZlIKKy5icgorXGZCaW50IHJlZHJhd3dpbihXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCB3cmVkcmF3bG4oV0lORE9XICp3aW4sIGludCBiZWdfbGluZSwgaW50IG51bV9saW5lcyk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnJlZnJlc2hcZlIgYW5kIFxmQndyZWZyZXNoXGZSIHJvdXRpbmVzIChvciBcZkJ3bm91dHJlZnJlc2hcZlIgYW5kCitcZkJkb3VwZGF0ZVxmUikgbXVzdCBiZSBjYWxsZWQgdG8gZ2V0IGFjdHVhbCBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLCBhcyBvdGhlcgorcm91dGluZXMgbWVyZWx5IG1hbmlwdWxhdGUgZGF0YSBzdHJ1Y3R1cmVzLgorVGhlIHJvdXRpbmUgXGZCd3JlZnJlc2hcZlIgY29waWVzCit0aGUgbmFtZWQgd2luZG93IHRvIHRoZSBwaHlzaWNhbCB0ZXJtaW5hbCBzY3JlZW4sIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCBpcworYWxyZWFkeSB0aGVyZSB0byBkbyBvcHRpbWl6YXRpb25zLgorVGhlIFxmQnJlZnJlc2hcZlIgcm91dGluZSBpcyB0aGUKK3NhbWUsIHVzaW5nIFxmQnN0ZHNjclxmUiBhcyB0aGUgZGVmYXVsdCB3aW5kb3cuCitVbmxlc3MgXGZCbGVhdmVva1xmUiBoYXMgYmVlbgorZW5hYmxlZCwgdGhlIHBoeXNpY2FsIGN1cnNvciBvZiB0aGUgdGVybWluYWwgaXMgbGVmdCBhdCB0aGUgbG9jYXRpb24gb2YgdGhlCitjdXJzb3IgZm9yIHRoYXQgd2luZG93LgorLlBQCitUaGUgXGZCd25vdXRyZWZyZXNoXGZSIGFuZCBcZkJkb3VwZGF0ZVxmUiByb3V0aW5lcyBhbGxvdyBtdWx0aXBsZSB1cGRhdGVzIHdpdGgKK21vcmUgZWZmaWNpZW5jeSB0aGFuIFxmQndyZWZyZXNoXGZSIGFsb25lLgorSW4gYWRkaXRpb24gdG8gYWxsIHRoZSB3aW5kb3cKK3N0cnVjdHVyZXMsIFxmQmN1cnNlc1xmUiBrZWVwcyB0d28gZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgdGVybWluYWwKK3NjcmVlbjogYSBwaHlzaWNhbCBzY3JlZW4sIGRlc2NyaWJpbmcgd2hhdCBpcyBhY3R1YWxseSBvbiB0aGUgc2NyZWVuLCBhbmQgYQordmlydHVhbCBzY3JlZW4sIGRlc2NyaWJpbmcgd2hhdCB0aGUgcHJvZ3JhbW1lciB3YW50cyB0byBoYXZlIG9uIHRoZSBzY3JlZW4uCisuUFAKK1RoZSByb3V0aW5lIFxmQndyZWZyZXNoXGZSIHdvcmtzIGJ5IGZpcnN0IGNhbGxpbmcgXGZCd25vdXRyZWZyZXNoXGZSLCB3aGljaAorY29waWVzIHRoZSBuYW1lZCB3aW5kb3cgdG8gdGhlIHZpcnR1YWwgc2NyZWVuLCBhbmQgdGhlbiBjYWxsaW5nIFxmQmRvdXBkYXRlXGZSLAord2hpY2ggY29tcGFyZXMgdGhlIHZpcnR1YWwgc2NyZWVuIHRvIHRoZSBwaHlzaWNhbCBzY3JlZW4gYW5kIGRvZXMgdGhlIGFjdHVhbAordXBkYXRlLgorSWYgdGhlIHByb2dyYW1tZXIgd2lzaGVzIHRvIG91dHB1dCBzZXZlcmFsIHdpbmRvd3MgYXQgb25jZSwgYSBzZXJpZXMKK29mIGNhbGxzIHRvIFxmQndyZWZyZXNoXGZSIHJlc3VsdHMgaW4gYWx0ZXJuYXRpbmcgY2FsbHMgdG8gXGZCd25vdXRyZWZyZXNoXGZSCithbmQgXGZCZG91cGRhdGVcZlIsIGNhdXNpbmcgc2V2ZXJhbCBidXJzdHMgb2Ygb3V0cHV0IHRvIHRoZSBzY3JlZW4uCitCeSBmaXJzdAorY2FsbGluZyBcZkJ3bm91dHJlZnJlc2hcZlIgZm9yIGVhY2ggd2luZG93LCBpdCBpcyB0aGVuIHBvc3NpYmxlIHRvIGNhbGwKK1xmQmRvdXBkYXRlXGZSIG9uY2UsIHJlc3VsdGluZyBpbiBvbmx5IG9uZSBidXJzdCBvZiBvdXRwdXQsIHdpdGggZmV3ZXIgdG90YWwKK2NoYXJhY3RlcnMgdHJhbnNtaXR0ZWQgYW5kIGxlc3MgQ1BVIHRpbWUgdXNlZC4KK0lmIHRoZSBcZkl3aW5cZlIgYXJndW1lbnQgdG8KK1xmQndyZWZyZXNoXGZSIGlzIHRoZSBnbG9iYWwgdmFyaWFibGUgXGZCY3Vyc2NyXGZSLCB0aGUgc2NyZWVuIGlzIGltbWVkaWF0ZWx5CitjbGVhcmVkIGFuZCByZXBhaW50ZWQgZnJvbSBzY3JhdGNoLgorLlBQCitUaGUgcGhyYXNlICJjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyB0byB0aGUgdmlydHVhbCBzY3JlZW4iIGFib3ZlIGlzIGFtYmlndW91cy4KK1doYXQgYWN0dWFsbHkgaGFwcGVucyBpcyB0aGF0IGFsbCBcZkl0b3VjaGVkXGZSIChjaGFuZ2VkKSBsaW5lcyBpbiB0aGUgd2luZG93CithcmUgY29waWVkIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbi4KK1RoaXMgYWZmZWN0cyBwcm9ncmFtcyB0aGF0IHVzZSBvdmVybGFwcGluZword2luZG93czsgaXQgbWVhbnMgdGhhdCBpZiB0d28gd2luZG93cyBvdmVybGFwLCB5b3UgY2FuIHJlZnJlc2ggdGhlbSBpbiBlaXRoZXIKK29yZGVyIGFuZCB0aGUgb3ZlcmxhcCByZWdpb24gd2lsbCBiZSBtb2RpZmllZCBvbmx5IHdoZW4gaXQgaXMgZXhwbGljaXRseQorY2hhbmdlZC4KKyhCdXQgc2VlIHRoZSBzZWN0aW9uIG9uIFxmQlBPUlRBQklMSVRZXGZSIGJlbG93IGZvciBhIHdhcm5pbmcgYWJvdXQKK2V4cGxvaXRpbmcgdGhpcyBiZWhhdmlvci4pCisuUFAKK1RoZSBcZkJ3cmVkcmF3bG5cZlIgcm91dGluZSBpbmRpY2F0ZXMgdG8gXGZCY3Vyc2VzXGZSIHRoYXQgc29tZSBzY3JlZW4gbGluZXMKK2FyZSBjb3JydXB0ZWQgYW5kIHNob3VsZCBiZSB0aHJvd24gYXdheSBiZWZvcmUgYW55dGhpbmcgaXMgd3JpdHRlbiBvdmVyIHRoZW0uCitJdCB0b3VjaGVzIHRoZSBpbmRpY2F0ZWQgbGluZXMgKG1hcmtpbmcgdGhlbSBjaGFuZ2VkKS4KK1RoZSByb3V0aW5lIFxmQnJlZHJhd3dpblxmUigpIHRvdWNoZXMgdGhlIGVudGlyZSB3aW5kb3cuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlLCBhbmQgXGZCT0tcZlIKKyhTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorLlJTCisuVFAgNQorXGZCd25vdXRyZWZyZXNoXGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwgb3IKK2lmIHRoZSB3aW5kb3cgaXMgcmVhbGx5IGEgcGFkLgorLlRQIDUKK1xmQndyZWRyYXdsblxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIGFzc29jaWF0ZWQgY2FsbCB0byBcZkJ0b3VjaGxuXGZQIHJldHVybnMgYW4gZXJyb3IuCisuUkUKKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQnJlZnJlc2hcZlIgYW5kIFxmQnJlZHJhd3dpblxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLgorLlBQCitXaGV0aGVyIFxmQndub3V0cmVmcmVzaCgpXGZSIGNvcGllcyB0byB0aGUgdmlydHVhbCBzY3JlZW4gdGhlIGVudGlyZSBjb250ZW50cworb2YgYSB3aW5kb3cgb3IganVzdCBpdHMgY2hhbmdlZCBwb3J0aW9ucyBoYXMgbmV2ZXIgYmVlbiB3ZWxsLWRvY3VtZW50ZWQgaW4KK2hpc3RvcmljIGN1cnNlcyB2ZXJzaW9ucyAoaW5jbHVkaW5nIFNWcjQpLgorSXQgbWlnaHQgYmUgdW53aXNlIHRvIHJlbHkgb24KK2VpdGhlciBiZWhhdmlvciBpbiBwcm9ncmFtcyB0aGF0IG1pZ2h0IGhhdmUgdG8gYmUgbGlua2VkIHdpdGggb3RoZXIgY3Vyc2VzCitpbXBsZW1lbnRhdGlvbnMuCitJbnN0ZWFkLCB5b3UgY2FuIGRvIGFuIGV4cGxpY2l0IFxmQnRvdWNod2luKClcZlIgYmVmb3JlIHRoZQorXGZCd25vdXRyZWZyZXNoKClcZlIgY2FsbCB0byBndWFyYW50ZWUgYW4gZW50aXJlLWNvbnRlbnRzIGNvcHkgYW55d2hlcmUuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfb3V0b3B0c1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfc2NhbncuM3ggYi9tYW4vY3Vyc19zY2Fudy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJhOWVlCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfc2NhbncuM3gKQEAgLTAsMCArMSw5NyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3NjYW53LjN4LHYgMS4xNCAyMDA2LzEyLzI0IDE2OjA1OjQ5IHRvbSBFeHAgJAorLlRIIGN1cnNfc2NhbncgM1ggIiIKKy5TSCBOQU1FCitcZkJzY2Fud1xmUiwKK1xmQndzY2Fud1xmUiwKK1xmQm12c2NhbndcZlIsCitcZkJtdndzY2Fud1xmUiwKK1xmQnZ3c2NhbndcZlIsIFxmQnZ3X3NjYW53XGZSIC0gY29udmVydCBmb3JtYXR0ZWQgaW5wdXQgZnJvbSBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgc2NhbncoY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgd3NjYW53KFdJTkRPVyAqd2luLCBjaGFyICpmbXQsIC4uLik7XGZSCisuYnIKK1xmQmludCBtdnNjYW53KGludCB5LCBpbnQgeCwgY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgbXZ3c2NhbncoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgdndfc2NhbncoV0lORE9XICp3aW4sIGNoYXIgKmZtdCwgdmFfbGlzdCB2YXJnbGlzdCk7XGZSCisuYnIKK1xmQmludCB2d3NjYW53KFdJTkRPVyAqd2luLCBjaGFyICpmbXQsIHZhX2xpc3QgdmFyZ2xpc3QpO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCc2NhbndcZlIsIFxmQndzY2Fud1xmUiBhbmQgXGZCbXZzY2Fud1xmUiByb3V0aW5lcyBhcmUgYW5hbG9nb3VzIHRvCitcZkJzY2FuZlxmUiBbc2VlIFxmQnNjYW5mXGZSKDMpXS4gIFRoZSBlZmZlY3Qgb2YgdGhlc2Ugcm91dGluZXMgaXMgYXMgdGhvdWdoCitcZkJ3Z2V0c3RyXGZSIHdlcmUgY2FsbGVkIG9uIHRoZSB3aW5kb3csIGFuZCB0aGUgcmVzdWx0aW5nIGxpbmUgdXNlZCBhcyBpbnB1dAorZm9yIFxmQnNzY2FuZlxmUigzKS4gIEZpZWxkcyB3aGljaCBkbyBub3QgbWFwIHRvIGEgdmFyaWFibGUgaW4gdGhlIFxmSWZtdFxmUgorZmllbGQgYXJlIGxvc3QuCisuUFAKK1RoZSBcZkJ2d3NjYW53XGZSIGFuZCBcZkJ2d19zY2Fud1xmUiByb3V0aW5lcyBhcmUgYW5hbG9nb3VzIHRvIFxmQnZzY2FuZlxmUi4KK1RoZXkgcGVyZm9ybSBhIFxmQndzY2Fud1xmUiB1c2luZyBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuCitUaGUgdGhpcmQgYXJndW1lbnQgaXMgYSBcZkl2YV9saXN0XGZSLAorYSBwb2ludGVyIHRvIGEgbGlzdCBvZiBhcmd1bWVudHMsIGFzIGRlZmluZWQgaW4gXGZCPHN0ZGFyZy5oPlxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQnZ3c2NhbndcZlIgcmV0dXJucyBcZkJFUlJcZlIgb24gZmFpbHVyZSBhbmQgYW4gaW50ZWdlciBlcXVhbCB0byB0aGUKK251bWJlciBvZiBmaWVsZHMgc2Nhbm5lZCBvbiBzdWNjZXNzLgorLlBQCitBcHBsaWNhdGlvbnMgbWF5IHVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIFxmQnNjYW53XGZSLCBcZkJ3c2NhbndcZlIsCitcZkJtdnNjYW53XGZSIGFuZCBcZkJtdndzY2Fud1xmUiByb3V0aW5lcyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmaWVsZHMKK3doaWNoIHdlcmUgbWFwcGVkIGluIHRoZSBjYWxsLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLiAgVGhlIGZ1bmN0aW9uCitcZkJ2d3NjYW53XGZSIGlzIG1hcmtlZCBUTyBCRSBXSVRIRFJBV04sIGFuZCBpcyB0byBiZSByZXBsYWNlZCBieSBhIGZ1bmN0aW9uCitcZkJ2d19zY2Fud1xmUiB1c2luZyB0aGUgXGZCPHN0ZGFyZy5oPlxmUiBpbnRlcmZhY2UuCitUaGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiAyIHN0YXRlcyB0aGF0CitcZkJ2d19zY2Fud1xmUiAgaXMgcHJlZmVycmVkIHRvIFxmQnZ3c2NhbndcZlIgc2luY2UgdGhlIGxhdHRlciByZXF1aXJlcworaW5jbHVkaW5nIFxmQjx2YXJhcmdzLmg+XGZSLCB3aGljaAorY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyBcZkI8c3RkYXJnLmg+XGZSLgorVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIFxmQjxzdGRhcmcuaD5cZlIgZm9yIGJvdGgsIGJlY2F1c2UgdGhhdCBoZWFkZXIKK2lzIGluY2x1ZGVkIGluIFxmQjxjdXJzZXMuaFxmUj4uCisuTFAKK0JvdGggWFNJIGFuZCBUaGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiAyIHN0YXRlIHRoYXQgdGhlc2UKK2Z1bmN0aW9ucyByZXR1cm4gRVJSIG9yIE9LLgorU2luY2UgdGhlIHVuZGVybHlpbmcgXGZCc2NhbmZcZlIgY2FuIHJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQsCithbmQgdGhlIFNWcjQgY29kZSB3YXMgZG9jdW1lbnRlZCB0byB1c2UgdGhpcyBmZWF0dXJlLAordGhpcyBpcyBwcm9iYWJseSBhbiBlZGl0aW5nIGVycm9yIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluIFhTSSwKK3JhdGhlciB0aGFuIGJlaW5nIGRvbmUgaW50ZW50aW9uYWxseS4KK1BvcnRhYmxlIGFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB0ZXN0IGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgRVJSLAorc2luY2UgdGhlIE9LIHZhbHVlICh6ZXJvKSBpcyBsaWtlbHkgdG8gYmUgbWlzbGVhZGluZy4KK09uZSBwb3NzaWJsZSB3YXkgdG8gZ2V0IHVzZWZ1bCByZXN1bHRzIHdvdWxkIGJlIHRvIHVzZSBhICIlbiIgY29udmVyc2lvbgorYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgd2FzIHByb2Nlc3NlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19nZXRzdHJcZlIoM1gpLCBcZkJjdXJzX3ByaW50d1xmUigzWCksIFxmQnNjYW5mXGZSKDMpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX3Njcl9kdW1wLjN4IGIvbWFuL2N1cnNfc2NyX2R1bXAuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4NGY2YQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX3Njcl9kdW1wLjN4CkBAIC0wLDAgKzEsMTAyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfc2NyX2R1bXAuM3gsdiAxLjcgMjAwNi8xMi8yNCAxNjowNTo0OSB0b20gRXhwICQKKy5USCBjdXJzX3Njcl9kdW1wIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCc2NyX2R1bXBcZlIsCitcZkJzY3JfcmVzdG9yZVxmUiwKK1xmQnNjcl9pbml0XGZSLAorXGZCc2NyX3NldFxmUiAtIHJlYWQgKHdyaXRlKSBhIFxmQmN1cnNlc1xmUiBzY3JlZW4gZnJvbSAodG8pIGEgZmlsZQorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgc2NyX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUpO1xmUgorLmJyCitcZkJpbnQgc2NyX3Jlc3RvcmUoY29uc3QgY2hhciAqZmlsZW5hbWUpO1xmUgorLmJyCitcZkJpbnQgc2NyX2luaXQoY29uc3QgY2hhciAqZmlsZW5hbWUpO1xmUgorLmJyCitcZkJpbnQgc2NyX3NldChjb25zdCBjaGFyICpmaWxlbmFtZSk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnNjcl9kdW1wXGZSIHJvdXRpbmUgZHVtcHMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHZpcnR1YWwgc2NyZWVuCit0byB0aGUgZmlsZSBcZklmaWxlbmFtZVxmUi4KKy5QUAorVGhlIFxmQnNjcl9yZXN0b3JlXGZSIHJvdXRpbmUgc2V0cyB0aGUgdmlydHVhbCBzY3JlZW4gdG8gdGhlIGNvbnRlbnRzCitvZiBcZklmaWxlbmFtZVxmUiwgd2hpY2ggbXVzdCBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyBcZkJzY3JfZHVtcFxmUi4gIFRoZSBuZXh0CitjYWxsIHRvIFxmQmRvdXBkYXRlXGZSIHJlc3RvcmVzIHRoZSBzY3JlZW4gdG8gdGhlIHdheSBpdCBsb29rZWQgaW4gdGhlIGR1bXAKK2ZpbGUuCisuUFAKK1RoZSBcZkJzY3JfaW5pdFxmUiByb3V0aW5lIHJlYWRzIGluIHRoZSBjb250ZW50cyBvZiBcZklmaWxlbmFtZVxmUiBhbmQgdXNlcwordGhlbSB0byBpbml0aWFsaXplIHRoZSBcZkJjdXJzZXNcZlIgZGF0YSBzdHJ1Y3R1cmVzIGFib3V0IHdoYXQgdGhlIHRlcm1pbmFsCitjdXJyZW50bHkgaGFzIG9uIGl0cyBzY3JlZW4uICBJZiB0aGUgZGF0YSBpcyBkZXRlcm1pbmVkIHRvIGJlIHZhbGlkLAorXGZCY3Vyc2VzXGZSIGJhc2VzIGl0cyBuZXh0IHVwZGF0ZSBvZiB0aGUgc2NyZWVuIG9uIHRoaXMgaW5mb3JtYXRpb24gcmF0aGVyCit0aGFuIGNsZWFyaW5nIHRoZSBzY3JlZW4gYW5kIHN0YXJ0aW5nIGZyb20gc2NyYXRjaC4gIFxmQnNjcl9pbml0XGZSIGlzIHVzZWQKK2FmdGVyIFxmQmluaXRzY3JcZlIgb3IgYSBcZkJzeXN0ZW1cZlIgY2FsbCB0byBzaGFyZQordGhlIHNjcmVlbiB3aXRoIGFub3RoZXIgcHJvY2VzcyB3aGljaCBoYXMgZG9uZSBhIFxmQnNjcl9kdW1wXGZSIGFmdGVyIGl0cworXGZCZW5kd2luXGZSIGNhbGwuICBUaGUgZGF0YSBpcyBkZWNsYXJlZCBpbnZhbGlkIGlmIHRoZSB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMKK1xmQnJtY3VwXGZSIGFuZCBcZkJucnJtY1xmUiBleGlzdDsgYWxzbyBpZiB0aGUgdGVybWluYWwgaGFzIGJlZW4gd3JpdHRlbiB0bworc2luY2UgdGhlIHByZWNlZGluZyBcZkJzY3JfZHVtcFxmUiBjYWxsLgorLlBQCitUaGUgXGZCc2NyX3NldFxmUiByb3V0aW5lIGlzIGEgY29tYmluYXRpb24gb2YgXGZCc2NyX3Jlc3RvcmVcZlIgYW5kCitcZkJzY3JfaW5pdFxmUi4gIEl0IHRlbGxzIHRoZSBwcm9ncmFtIHRoYXQgdGhlIGluZm9ybWF0aW9uIGluIFxmSWZpbGVuYW1lXGZSIGlzCit3aGF0IGlzIGN1cnJlbnRseSBvbiB0aGUgc2NyZWVuLCBhbmQgYWxzbyB3aGF0IHRoZSBwcm9ncmFtIHdhbnRzIG9uIHRoZSBzY3JlZW4uCitUaGlzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgc2NyZWVuIGluaGVyaXRhbmNlIGZ1bmN0aW9uLgorLlBQCitUbyByZWFkICh3cml0ZSkgYSB3aW5kb3cgZnJvbSAodG8pIGEgZmlsZSwgdXNlIHRoZSBcZkJnZXR3aW5cZlIgYW5kCitcZkJwdXR3aW5cZlIgcm91dGluZXMgW3NlZSBcZkJjdXJzX3V0aWxcZlIoM1gpXS4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIKK3Vwb24gc3VjY2Vzcy4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sCitlYWNoIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJzY3JfaW5pdFxmUiwgXGZCc2NyX3NldFxmUiwgYW5kIFxmQnNjcl9yZXN0b3JlXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zIChhZGRpbmcgdGhlIGNvbnN0CitxdWFsaWZpZXJzKS4KKy5QUAorVGhlIFNWcjQgZG9jcyBtZXJlbHkgc2F5IHVuZGVyIFxmQnNjcl9pbml0XGZSIHRoYXQgdGhlIGR1bXAgZGF0YSBpcyBhbHNvCitjb25zaWRlcmVkIGludmFsaWQgImlmIHRoZSB0aW1lLXN0YW1wIG9mIHRoZSB0dHkgaXMgb2xkIiBidXQgZG8gbm90IGRlZmluZQorIm9sZCIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfaW5pdHNjclxmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCksCitcZkJjdXJzX3V0aWxcZlIoM1gpLCBcZkJzeXN0ZW1cZlIoMykKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfc2Nyb2xsLjN4IGIvbWFuL2N1cnNfc2Nyb2xsLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NGI3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc19zY3JvbGwuM3gKQEAgLTAsMCArMSw5NiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3Njcm9sbC4zeCx2IDEuMTMgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBjdXJzX3Njcm9sbCAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQnNjcm9sbFxmUiwKK1xmQnNjcmxcZlIsCitcZkJ3c2NybFxmUiAtIHNjcm9sbCBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IHNjcm9sbChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBzY3JsKGludCBuKTtcZlIKKy5icgorXGZCaW50IHdzY3JsKFdJTkRPVyAqd2luLCBpbnQgbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnNjcm9sbFxmUiByb3V0aW5lIHNjcm9sbHMgdGhlIHdpbmRvdyB1cCBvbmUgbGluZS4KK1RoaXMgaW52b2x2ZXMgbW92aW5nCit0aGUgbGluZXMgaW4gdGhlIHdpbmRvdyBkYXRhIHN0cnVjdHVyZS4KK0FzIGFuIG9wdGltaXphdGlvbiwgaWYgdGhlIHNjcm9sbGluZworcmVnaW9uIG9mIHRoZSB3aW5kb3cgaXMgdGhlIGVudGlyZSBzY3JlZW4sIHRoZSBwaHlzaWNhbCBzY3JlZW4gbWF5IGJlIHNjcm9sbGVkCithdCB0aGUgc2FtZSB0aW1lLgorLlBQCitGb3IgcG9zaXRpdmUgXGZJblxmUiwgdGhlIFxmQnNjcmxcZlIgYW5kIFxmQndzY3JsXGZSIHJvdXRpbmVzIHNjcm9sbCB0aGUKK3dpbmRvdyB1cCBcZkluXGZSIGxpbmVzIChsaW5lIFxmSWlcZlIrXGZJblxmUiBiZWNvbWVzIFxmSWlcZlIpOyBvdGhlcndpc2UKK3Njcm9sbCB0aGUgd2luZG93IGRvd24gXGZJblxmUiBsaW5lcy4KK1RoaXMgaW52b2x2ZXMgbW92aW5nIHRoZSBsaW5lcyBpbiB0aGUKK3dpbmRvdyBjaGFyYWN0ZXIgaW1hZ2Ugc3RydWN0dXJlLgorVGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLgorLlBQCitGb3IgdGhlc2UgZnVuY3Rpb25zIHRvIHdvcmssIHNjcm9sbGluZyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxmQnNjcm9sbG9rXGZSLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUsIGFuZCBcZkJPS1xmUiAoU1ZyNCBvbmx5IHNwZWNpZmllcworImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwgb3IKK2lmIHNjcm9sbGluZyBpcyBub3QgZW5hYmxlZCBpbiB0aGUgd2luZG93LCBlLmcuLCB3aXRoIFxmQnNjcm9sbG9rXGZQLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCc2NybFxmUiBhbmQgXGZCc2Nyb2xsXGZSIG1heSBiZSBtYWNyb3MuCisuUFAKK1RoZSBTVnI0IGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IHRoZSBvcHRpbWl6YXRpb24gb2YgcGh5c2ljYWxseSBzY3JvbGxpbmcKK2ltbWVkaWF0ZWx5IGlmIHRoZSBzY3JvbGwgcmVnaW9uIGlzIHRoZSBlbnRpcmUgc2NyZWVuICJpcyIgcGVyZm9ybWVkLCBub3QKKyJtYXkgYmUiIHBlcmZvcm1lZC4KK1RoaXMgaW1wbGVtZW50YXRpb24gZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGd1YXJhbnRlZQordGhhdCB0aGlzIHdpbGwgb2NjdXIsIHRvIGxlYXZlIG9wZW4gdGhlIHBvc3NpYmlsaXR5IG9mIHNtYXJ0ZXIKK29wdGltaXphdGlvbiBvZiBtdWx0aXBsZSBzY3JvbGwgYWN0aW9ucyBvbiB0aGUgbmV4dCB1cGRhdGUuCisuUFAKK05laXRoZXIgdGhlIFNWcjQgbm9yIHRoZSBYU0kgZG9jdW1lbnRhdGlvbiBzcGVjaWZ5IHdoZXRoZXIgdGhlIGN1cnJlbnQKK2F0dHJpYnV0ZSBvcgorY3VycmVudCBjb2xvci1wYWlyIG9mIGJsYW5rcyBnZW5lcmF0ZWQgYnkgdGhlIHNjcm9sbCBmdW5jdGlvbiBpcyB6ZXJvZWQuCitVbmRlciB0aGlzIGltcGxlbWVudGF0aW9uIGl0IGlzLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX291dG9wdHNcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX3Nsay4zeCBiL21hbi9jdXJzX3Nsay4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzYxMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfc2xrLjN4CkBAIC0wLDAgKzEsMjA1IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfc2xrLjN4LHYgMS4xNiAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIGN1cnNfc2xrIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCc2xrX2luaXRcZlIsCitcZkJzbGtfc2V0XGZSLAorXGZCc2xrX3JlZnJlc2hcZlIsCitcZkJzbGtfbm91dHJlZnJlc2hcZlIsCitcZkJzbGtfbGFiZWxcZlIsCitcZkJzbGtfY2xlYXJcZlIsCitcZkJzbGtfcmVzdG9yZVxmUiwKK1xmQnNsa190b3VjaFxmUiwKK1xmQnNsa19hdHRyb25cZlIsCitcZkJzbGtfYXR0cnNldFxmUiwKK1xmQnNsa19hdHRyb2ZmXGZSLAorXGZCc2xrX2F0dHJfb25cZlIsCitcZkJzbGtfYXR0cl9zZXRcZlIsCitcZkJzbGtfYXR0cl9vZmZcZlIsCitcZkJzbGtfYXR0clxmUiwKK1xmQnNsa19jb2xvclxmUiAtIFxmQmN1cnNlc1xmUiBzb2Z0IGxhYmVsIHJvdXRpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBzbGtfaW5pdChpbnQgZm10KTtcZlIKKy5icgorXGZCaW50IHNsa19zZXQoaW50IGxhYm51bSwgY29uc3QgY2hhciAqbGFiZWwsIGludCBmbXQpO1xmUgorLmJyCitcZkJpbnQgc2xrX3JlZnJlc2godm9pZCk7XGZSCisuYnIKK1xmQmludCBzbGtfbm91dHJlZnJlc2godm9pZCk7XGZSCisuYnIKK1xmQmNoYXIgKnNsa19sYWJlbChpbnQgbGFibnVtKTtcZlIKKy5icgorXGZCaW50IHNsa19jbGVhcih2b2lkKTtcZlIKKy5icgorXGZCaW50IHNsa19yZXN0b3JlKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgc2xrX3RvdWNoKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgc2xrX2F0dHJvbihjb25zdCBjaHR5cGUgYXR0cnMpO1xmUgorLmJyCitcZkJpbnQgc2xrX2F0dHJvZmYoY29uc3QgY2h0eXBlIGF0dHJzKTtcZlIKKy5icgorXGZCaW50IHNsa19hdHRyc2V0KGNvbnN0IGNodHlwZSBhdHRycyk7XGZSCisuYnIKK1xmQmludCBzbGtfYXR0cl9vbihhdHRyX3QgYXR0cnMsIHZvaWQqIG9wdHMpO1xmUgorLmJyCitcZkJpbnQgc2xrX2F0dHJfb2ZmKGNvbnN0IGF0dHJfdCBhdHRycywgdm9pZCAqIG9wdHMpO1xmUgorLmJyCitcZkJpbnQgc2xrX2F0dHJfc2V0KGNvbnN0IGF0dHJfdCBhdHRycyxcZlIKKy5icgorCVxmQnNob3J0IGNvbG9yX3BhaXJfbnVtYmVyLCB2b2lkKiBvcHRzKTtcZlIKKy5icgorXGZCYXR0cl90IHNsa19hdHRyKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgc2xrX2NvbG9yKHNob3J0IGNvbG9yX3BhaXJfbnVtYmVyKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgc2xrKiBmdW5jdGlvbnMgbWFuaXB1bGF0ZSB0aGUgc2V0IG9mIHNvZnQgZnVuY3Rpb24ta2V5IGxhYmVscyB0aGF0IGV4aXN0IG9uCittYW55IHRlcm1pbmFscy4gIEZvciB0aG9zZSB0ZXJtaW5hbHMgdGhhdCBkbyBub3QgaGF2ZSBzb2Z0IGxhYmVscywKK1xmQmN1cnNlc1xmUiB0YWtlcyBvdmVyIHRoZSBib3R0b20gbGluZSBvZiBcZkJzdGRzY3JcZlIsIHJlZHVjaW5nIHRoZSBzaXplIG9mCitcZkJzdGRzY3JcZlIgYW5kIHRoZSB2YXJpYWJsZSBcZkJMSU5FU1xmUi4gIFxmQmN1cnNlc1xmUiBzdGFuZGFyZGl6ZXMgb24gZWlnaHQKK2xhYmVscyBvZiB1cCB0byBlaWdodCBjaGFyYWN0ZXJzIGVhY2guIEluIGFkZGl0aW9uIHRvIHRoaXMsIHRoZSBuY3Vyc2VzCitpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBhIG1vZGUgd2hlcmUgaXQgc2ltdWxhdGVzIDEyIGxhYmVscyBvZiB1cCB0byBmaXZlCitjaGFyYWN0ZXJzIGVhY2guIFRoaXMgaXMgbW9zdCBjb21tb24gZm9yIHRvZGF5cyBQQyBsaWtlIGVuZHVzZXIgZGV2aWNlcy4KK1BsZWFzZSBub3RlIHRoYXQgbmN1cnNlcyBzaW11bGF0ZXMgdGhpcyBtb2RlIGJ5IHRha2luZyBvdmVyIHVwIHRvIHR3byBsaW5lcyBhdAordGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLCBpdCBkb2VzIG5vdCB0cnkgdG8gdXNlIGFueSBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGlzCittb2RlLgorLlBQCitUaGUgXGZCc2xrX2luaXRcZlIgcm91dGluZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgXGZCaW5pdHNjclxmUiBvciBcZkJuZXd0ZXJtXGZSCitpcyBjYWxsZWQuICBJZiBcZkJpbml0c2NyXGZSIGV2ZW50dWFsbHkgdXNlcyBhIGxpbmUgZnJvbSBcZkJzdGRzY3JcZlIgdG8KK2VtdWxhdGUgdGhlIHNvZnQgbGFiZWxzLCB0aGVuIFxmSWZtdFxmUiBkZXRlcm1pbmVzIGhvdyB0aGUgbGFiZWxzIGFyZSBhcnJhbmdlZAorb24gdGhlIHNjcmVlbi4gIFNldHRpbmcgXGZJZm10XGZSIHRvIFxmQjBcZlIgaW5kaWNhdGVzIGEgMy0yLTMgYXJyYW5nZW1lbnQgb2YKK3RoZSBsYWJlbHMsIFxmQjFcZlIgaW5kaWNhdGVzIGEgNC00IGFycmFuZ2VtZW50IGFuZCBcZkIyXGZSIGluZGljYXRlcyB0aGUKK1BDIGxpa2UgNC00LTQgbW9kZS4gSWYgXGZCZm10XGZSIGlzIHNldCB0byBcZkIzXGZSLCBpdCBpcyBhZ2FpbiB0aGUgUEMgbGlrZQorNC00LTQgbW9kZSwgYnV0IGluIGFkZGl0aW9uIGFuIGluZGV4IGxpbmUgaXMgZ2VuZXJhdGVkLCBoZWxwaW5nIHRoZSB1c2VyIHRvCitpZGVudGlmeSB0aGUga2V5IG51bWJlcnMgZWFzaWx5LgorLlBQCitUaGUgXGZCc2xrX3NldFxmUiByb3V0aW5lIHJlcXVpcmVzIFxmSWxhYm51bVxmUiB0byBiZSBhIGxhYmVsIG51bWJlciwKK2Zyb20gXGZCMVxmUiB0byBcZkI4XGZSIChyZXNwLiBcZkIxMlxmUik7IFxmSWxhYmVsXGZSIG11c3QgYmUgdGhlIHN0cmluZwordG8gYmUgcHV0IG9uIHRoZSBsYWJlbCwgdXAgdG8gZWlnaHQgKHJlc3AuIGZpdmUpIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLgorQSBudWxsIHN0cmluZyBvciBhIG51bGwgcG9pbnRlciBzZXRzIHVwIGEgYmxhbmsgbGFiZWwuIFxmSWZtdFxmUiBpcyBlaXRoZXIKK1xmQjBcZlIsIFxmQjFcZlIsIG9yIFxmQjJcZlIsIGluZGljYXRpbmcgd2hldGhlciB0aGUgbGFiZWwgaXMgIHRvIGJlCitsZWZ0LWp1c3RpZmllZCwgY2VudGVyZWQsIG9yIHJpZ2h0LWp1c3RpZmllZCwgcmVzcGVjdGl2ZWx5LCB3aXRoaW4gdGhlCitsYWJlbC4KKy5QUAorVGhlIFxmQnNsa19yZWZyZXNoXGZSIGFuZCBcZkJzbGtfbm91dHJlZnJlc2hcZlIgcm91dGluZXMgY29ycmVzcG9uZCB0bwordGhlIFxmQndyZWZyZXNoXGZSIGFuZCBcZkJ3bm91dHJlZnJlc2hcZlIgcm91dGluZXMuCisuUFAKK1RoZSBcZkJzbGtfbGFiZWxcZlIgcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IGxhYmVsIGZvciBsYWJlbCBudW1iZXIKK1xmSWxhYm51bVxmUiwgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyBibGFua3Mgc3RyaXBwZWQuCisuUFAKK1RoZSBcZkJzbGtfY2xlYXJcZlIgcm91dGluZSBjbGVhcnMgdGhlIHNvZnQgbGFiZWxzIGZyb20gdGhlIHNjcmVlbi4KKy5QUAorVGhlIFxmQnNsa19yZXN0b3JlXGZSIHJvdXRpbmUgcmVzdG9yZXMgdGhlIHNvZnQgbGFiZWxzIHRvIHRoZSBzY3JlZW4KK2FmdGVyIGEgXGZCc2xrX2NsZWFyXGZSIGhhcyBiZWVuIHBlcmZvcm1lZC4KKy5QUAorVGhlIFxmQnNsa190b3VjaFxmUiByb3V0aW5lIGZvcmNlcyBhbGwgdGhlIHNvZnQgbGFiZWxzIHRvIGJlIG91dHB1dAordGhlIG5leHQgdGltZSBhIFxmQnNsa19ub3V0cmVmcmVzaFxmUiBpcyBwZXJmb3JtZWQuCisuUFAKK1RoZSBcZkJzbGtfYXR0cm9uXGZSLCBcZkJzbGtfYXR0cnNldFxmUiwgXGZCc2xrX2F0dHJvZmZcZlIgYW5kIFxmQnNsa19hdHRyXGZSCityb3V0aW5lcyBjb3JyZXNwb25kIHRvIFxmQmF0dHJvblxmUiwgXGZCYXR0cnNldFxmUiwgXGZCYXR0cm9mZlxmUiBhbmQgXGZCYXR0cl9nZXRcZlIuCitUaGV5IGhhdmUgYW4gZWZmZWN0IG9ubHkgaWYgc29mdCBsYWJlbHMgYXJlIHNpbXVsYXRlZCBvbiB0aGUgYm90dG9tIGxpbmUgb2YKK3RoZSBzY3JlZW4uICBUaGUgZGVmYXVsdCBoaWdobGlnaHQgZm9yIHNvZnQga2V5cyBpcyBBX1NUQU5ET1VUIChhcyBpbgorU3lzdGVtIFYgY3Vyc2VzLCB3aGljaCBkb2VzIG5vdCBkb2N1bWVudCB0aGlzIGZhY3QpLgorLlBQCitUaGUgXGZCc2xrX2NvbG9yXGZSIHJvdXRpbmUgY29ycmVzcG9uZHMgdG8gXGZCY29sb3Jfc2V0XGZSLiBJdCBoYXMgYW4gZWZmZWN0IG9ubHkKK2lmIHNvZnQgbGFiZWxzIGFyZSBzaW11bGF0ZWQgb24gdGhlIGJvdHRvbSBsaW5lIG9mIHRoZSBzY3JlZW4uCisuCisuU0ggUkVUVVJOIFZBTFVFCitUaGVzZSByb3V0aW5lcyByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgT0sgKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuCitpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisuUFAKK1gvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uCisuUlMKKy5UUCA1CitcZkJzbGtfYXR0clxmUgorcmV0dXJucyB0aGUgYXR0cmlidXRlIHVzZWQgZm9yIHRoZSBzb2Z0IGtleXMuCisuVFAgNQorLm5hCisuaHkgMAorXGZCc2xrX2F0dHJvZmZcZlAsIFxmQnNsa19hdHRyb25cZlAsIFxmQnNsa19jbGVhclxmUCwgXGZCc2xrX25vdXRyZWZyZXNoXGZQLCBcZkJzbGtfcmVmcmVzaFxmUCwgXGZCc2xrX3RvdWNoXGZQCisuYWQKKy5oeQorcmV0dXJuIGFuIGVycm9yCitpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnRrZXlzIHdlcmUgbm90IGluaXRpYWxpemVkLgorLlRQIDUKK1xmQnNsa19hdHRyc2V0XGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnRrZXlzIHdlcmUgbm90IGluaXRpYWxpemVkLgorLlRQIDUKK1xmQnNsa19hdHRyX3NldFxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHRlcm1pbmFsIG9yIHRoZSBzb2Z0a2V5cyB3ZXJlIG5vdCBpbml0aWFsaXplZCwgb3IKK3RoZSBjb2xvciBwYWlyIGlzIG91dHNpZGUgdGhlIHJhbmdlIDAuLkNPTE9SX1BBSVJTLTEsCitvciBvcHRzIGlzIG5vdCBudWxsLgorLlRQIDUKK1xmQnNsa19jb2xvclxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHRlcm1pbmFsIG9yIHRoZSBzb2Z0a2V5cyB3ZXJlIG5vdCBpbml0aWFsaXplZCwgb3IKK3RoZSBjb2xvciBwYWlyIGlzIG91dHNpZGUgdGhlIHJhbmdlIDAuLkNPTE9SX1BBSVJTLTEuCisuVFAgNQorXGZCc2xrX2luaXRcZlIKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSBmb3JtYXQgcGFyYW1ldGVyIGlzIG91dHNpZGUgdGhlIHJhbmdlIDAuLjMuCisuVFAgNQorXGZCc2xrX2xhYmVsXGZSCityZXR1cm5zIFxmQk5VTExcZlIgb24gZXJyb3IuCisuVFAgNQorXGZCc2xrX3NldFxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHRlcm1pbmFsIG9yIHRoZSBzb2Z0a2V5cyB3ZXJlIG5vdCBpbml0aWFsaXplZCwgb3IKK3RoZSBcZklsYWJudW1cZlAgcGFyYW1ldGVyIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIGxhYmVsIGNvdW50cywgb3IKK2lmIHRoZSBmb3JtYXQgcGFyYW1ldGVyIGlzIG91dHNpZGUgdGhlIHJhbmdlIDAuLjIsIG9yIGlmCittZW1vcnkgZm9yIHRoZSBsYWJlbHMgY2Fubm90IGJlIGFsbG9jYXRlZC4KKy5SRQorLlNIIE5PVEVTCitNb3N0IGFwcGxpY2F0aW9ucyB3b3VsZCB1c2UgXGZCc2xrX25vdXRyZWZyZXNoXGZSIGJlY2F1c2UgYQorXGZCd3JlZnJlc2hcZlIgaXMgbGlrZWx5IHRvIGZvbGxvdyBzb29uLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCwgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4gIEl0IGNoYW5nZXMgdGhlCithcmd1bWVudCB0eXBlIG9mIHRoZSBhdHRyaWJ1dGUtbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBcZkJzbGtfYXR0cm9uXGZSLAorXGZCc2xrX2F0dHJvZmZcZlIsIFxmQnNsa19hdHRyc2V0XGZSIHRvIGJlIFxmQmF0dHJfdFxmUiwgYW5kIGFkZHMgXGZCY29uc3RcZlIKK3F1YWxpZmllcnMuIFRoZSBmb3JtYXQgY29kZXMgXGZCMlxmUiBhbmQgXGZCM1xmUiBmb3IgXGZCc2xrX2luaXQoKVxmUiBhbmQgdGhlCitmdW5jdGlvbiBcZkJzbGtfYXR0clxmUiBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19hdHRyXGZSKDNYKSwgXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc190ZXJtYXR0cnMuM3ggYi9tYW4vY3Vyc190ZXJtYXR0cnMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwNzMwNwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX3Rlcm1hdHRycy4zeApAQCAtMCwwICsxLDEzNCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3Rlcm1hdHRycy4zeCx2IDEuMTAgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwICQKKy5USCBjdXJzX3Rlcm1hdHRycyAzWCAiIgorLlNIIE5BTUUKK1xmQmJhdWRyYXRlXGZSLAorXGZCZXJhc2VjaGFyXGZSLAorXGZCZXJhc2V3Y2hhclxmUiwKK1xmQmhhc19pY1xmUiwKK1xmQmhhc19pbFxmUiwKK1xmQmtpbGxjaGFyXGZSLAorXGZCa2lsbHdjaGFyXGZSLAorXGZCbG9uZ25hbWVcZlIsCitcZkJ0ZXJtX2F0dHJzXGZSLAorXGZCdGVybWF0dHJzXGZSLAorXGZCdGVybW5hbWVcZlIgLSBcZkJjdXJzZXNcZlIgZW52aXJvbm1lbnQgcXVlcnkgcm91dGluZXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgYmF1ZHJhdGUodm9pZCk7XGZSCisuYnIKK1xmQmNoYXIgZXJhc2VjaGFyKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgZXJhc2V3Y2hhcih3Y2hhcl90ICpcZlJcZkljaFxmUlxmQik7XGZSCisuYnIKK1xmQmJvb2wgaGFzX2ljKHZvaWQpO1xmUgorLmJyCitcZkJib29sIGhhc19pbCh2b2lkKTtcZlIKKy5icgorXGZCY2hhciBraWxsY2hhcih2b2lkKTtcZlIKKy5icgorXGZCaW50IGtpbGx3Y2hhcih3Y2hhcl90ICpcZlJcZkljaFxmUlxmQik7XGZSCisuYnIKK1xmQmNoYXIgKmxvbmduYW1lKHZvaWQpO1xmUgorLmJyCitcZkJhdHRyX3QgdGVybV9hdHRycyh2b2lkKTtcZlIKKy5icgorXGZCY2h0eXBlIHRlcm1hdHRycyh2b2lkKTtcZlIKKy5icgorXGZCY2hhciAqdGVybW5hbWUodm9pZCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmJhdWRyYXRlXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgb3V0cHV0IHNwZWVkIG9mIHRoZSB0ZXJtaW5hbC4gIFRoZQorbnVtYmVyIHJldHVybmVkIGlzIGluIGJpdHMgcGVyIHNlY29uZCwgZm9yIGV4YW1wbGUgXGZCOTYwMFxmUiwgYW5kIGlzIGFuCitpbnRlZ2VyLgorLlBQCitUaGUgXGZCZXJhc2VjaGFyXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgdXNlcidzIGN1cnJlbnQgZXJhc2UgY2hhcmFjdGVyLgorLlBQCitUaGUgXGZCZXJhc2V3Y2hhclxmUiByb3V0aW5lIHN0b3JlcyB0aGUgY3VycmVudCBlcmFzZSBjaGFyYWN0ZXIKK2luIHRoZSBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5IFxmSWNoXGZSLgorSWYgbm8gZXJhc2UgY2hhcmFjdGVyIGhhcyBiZWVuIGRlZmluZWQsIHRoZSByb3V0aW5lIGZhaWxzCithbmQgdGhlIGxvY2F0aW9uIHJlZmVyZW5jZWQgYnkgXGZJY2hcZlIgaXMgbm90IGNoYW5nZWQuCisuUFAKK1RoZSBcZkJoYXNfaWNcZlIgcm91dGluZSBpcyB0cnVlIGlmIHRoZSB0ZXJtaW5hbCBoYXMgaW5zZXJ0LSBhbmQgZGVsZXRlLQorY2hhcmFjdGVyIGNhcGFiaWxpdGllcy4KKy5QUAorVGhlIFxmQmhhc19pbFxmUiByb3V0aW5lIGlzIHRydWUgaWYgdGhlIHRlcm1pbmFsIGhhcyBpbnNlcnQtIGFuZCBkZWxldGUtbGluZQorY2FwYWJpbGl0aWVzLCBvciBjYW4gc2ltdWxhdGUgdGhlbSB1c2luZyBzY3JvbGxpbmcgcmVnaW9ucy4gIFRoaXMgbWlnaHQKK2JlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IHdvdWxkIGJlIGFwcHJvcHJpYXRlIHRvIHR1cm4gb24gcGh5c2ljYWwKK3Njcm9sbGluZyB1c2luZyBcZkJzY3JvbGxva1xmUi4KKy5QUAorVGhlIFxmQmtpbGxjaGFyXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgdXNlcidzIGN1cnJlbnQgbGluZSBraWxsIGNoYXJhY3Rlci4KKy5QUAorVGhlIFxmQmtpbGx3Y2hhclxmUiByb3V0aW5lIHN0b3JlcyB0aGUgY3VycmVudCBsaW5lLWtpbGwgY2hhcmFjdGVyCitpbiB0aGUgbG9jYXRpb24gcmVmZXJlbmNlZCBieSBcZkljaFxmUi4KK0lmIG5vIGxpbmUta2lsbCBjaGFyYWN0ZXIgaGFzIGJlZW4gZGVmaW5lZCwKK3RoZSByb3V0aW5lIGZhaWxzIGFuZCB0aGUgbG9jYXRpb24gcmVmZXJlbmNlZCBieSBcZkljaFxmUiBpcyBub3QgY2hhbmdlZC4KKy5QUAorVGhlIFxmQmxvbmduYW1lXGZSIHJvdXRpbmUgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdGF0aWMgYXJlYQorY29udGFpbmluZyBhIHZlcmJvc2UgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnQgdGVybWluYWwuICBUaGUgbWF4aW11bQorbGVuZ3RoIG9mIGEgdmVyYm9zZSBkZXNjcmlwdGlvbiBpcyAxMjggY2hhcmFjdGVycy4gIEl0IGlzIGRlZmluZWQgb25seQorYWZ0ZXIgdGhlIGNhbGwgdG8gXGZCaW5pdHNjclxmUiBvciBcZkJuZXd0ZXJtXGZSLiAgVGhlIGFyZWEgaXMKK292ZXJ3cml0dGVuIGJ5IGVhY2ggY2FsbCB0byBcZkJuZXd0ZXJtXGZSIGFuZCBpcyBub3QgcmVzdG9yZWQgYnkKK1xmQnNldF90ZXJtXGZSLCBzbyB0aGUgdmFsdWUgc2hvdWxkIGJlIHNhdmVkIGJldHdlZW4gY2FsbHMgdG8KK1xmQm5ld3Rlcm1cZlIgaWYgXGZCbG9uZ25hbWVcZlIgaXMgZ29pbmcgdG8gYmUgdXNlZCB3aXRoIG11bHRpcGxlCit0ZXJtaW5hbHMuCisuUFAKK0lmIGEgZ2l2ZW4gdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBhIHZpZGVvIGF0dHJpYnV0ZSB0aGF0IGFuCithcHBsaWNhdGlvbiBwcm9ncmFtIGlzIHRyeWluZyB0byB1c2UsIFxmQmN1cnNlc1xmUiBtYXkgc3Vic3RpdHV0ZSBhCitkaWZmZXJlbnQgdmlkZW8gYXR0cmlidXRlIGZvciBpdC4KK1RoZSBcZkJ0ZXJtYXR0cnNcZlIgYW5kIFxmQnRlcm1fYXR0cnNcZlIgZnVuY3Rpb25zCityZXR1cm4gYSBsb2dpY2FsIFxmQk9SXGZSIG9mIGFsbCB2aWRlbyBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBieSB0aGUKK3Rlcm1pbmFsIHVzaW5nIFxmSUFfXGZSIGFuZCBcZklXQV9cZlIgY29uc3RhbnRzIHJlc3BlY3RpdmVseS4KK1RoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIHdoZW4gYSBcZkJjdXJzZXNcZlIgcHJvZ3JhbQorbmVlZHMgY29tcGxldGUgY29udHJvbCBvdmVyIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBzY3JlZW4uCisuUFAKK1RoZSBcZkJ0ZXJtbmFtZVxmUiByb3V0aW5lIHJldHVybnMgdGhlIHRlcm1pbmFsIG5hbWUgdXNlZCBieSBcZkJzZXR1cHRlcm1cZlIuCisuU0ggUkVUVVJOIFZBTFVFCitcZkJsb25nbmFtZVxmUiBhbmQgXGZCdGVybW5hbWVcZlIgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IuCisuUFAKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSCisoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQnRlcm1hdHRyc1xmUiBtYXkgYmUgYSBtYWNyby4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4gIEl0IGNoYW5nZXMgdGhlCityZXR1cm4gdHlwZSBvZiBcZkJ0ZXJtYXR0cnNcZlIgdG8gdGhlIG5ldyB0eXBlIFxmQmF0dHJfdFxmUi4KK01vc3QgdmVyc2lvbnMgb2YgY3Vyc2VzIHRydW5jYXRlIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgXGZCdGVybW5hbWVcZlIgdG8KKzE0IGNoYXJhY3RlcnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfaW5pdHNjclxmUigzWCksIFxmQmN1cnNfb3V0b3B0c1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfdGVybWNhcC4zeCBiL21hbi9jdXJzX3Rlcm1jYXAuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhYzJmYgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX3Rlcm1jYXAuM3gKQEAgLTAsMCArMSwxNjcgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc190ZXJtY2FwLjN4LHYgMS4yMiAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIGN1cnNfdGVybWNhcCAzWCAiIgorLmRzIG4gNQorLlNIIE5BTUUKK1xmQnRnZXRlbnRcZlIsCitcZkJ0Z2V0ZmxhZ1xmUiwKK1xmQnRnZXRudW1cZlIsCitcZkJ0Z2V0c3RyXGZSLAorXGZCdGdvdG9cZlIsCitcZkJ0cHV0c1xmUiAtIGRpcmVjdCBcZkJjdXJzZXNcZlIgaW50ZXJmYWNlIHRvIHRoZSB0ZXJtaW5mbyBjYXBhYmlsaXR5IGRhdGFiYXNlCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5icgorXGZCI2luY2x1ZGUgPHRlcm0uaD5cZlIKKy5zcAorXGZCZXh0ZXJuIGNoYXIgUEM7XGZSCisuYnIKK1xmQmV4dGVybiBjaGFyICogVVA7XGZSCisuYnIKK1xmQmV4dGVybiBjaGFyICogQkM7XGZSCisuYnIKK1xmQmV4dGVybiBATkNVUlNFU19PU1BFRURAIG9zcGVlZDtcZlIKKy5zcAorXGZCaW50IHRnZXRlbnQoY2hhciAqYnAsIGNvbnN0IGNoYXIgKm5hbWUpO1xmUgorLmJyCitcZkJpbnQgdGdldGZsYWcoY2hhciAqaWQpO1xmUgorLmJyCitcZkJpbnQgdGdldG51bShjaGFyICppZCk7XGZSCisuYnIKK1xmQmNoYXIgKnRnZXRzdHIoY2hhciAqaWQsIGNoYXIgKiphcmVhKTtcZlIKKy5icgorXGZCY2hhciAqdGdvdG8oY29uc3QgY2hhciAqY2FwLCBpbnQgY29sLCBpbnQgcm93KTtcZlIKKy5icgorXGZCaW50IHRwdXRzKGNvbnN0IGNoYXIgKnN0ciwgaW50IGFmZmNudCwgaW50ICgqcHV0YykoaW50KSk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgYXJlIGluY2x1ZGVkIGFzIGEgY29udmVyc2lvbiBhaWQgZm9yIHByb2dyYW1zIHRoYXQgdXNlCit0aGUgXGZJdGVybWNhcFxmUiBsaWJyYXJ5LiAgVGhlaXIgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYW5kIHRoZQorcm91dGluZXMgYXJlIGVtdWxhdGVkIHVzaW5nIHRoZSBcZkl0ZXJtaW5mb1xmUiBkYXRhYmFzZS4gIFRodXMsIHRoZXkKK2NhbiBvbmx5IGJlIHVzZWQgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcyBvZiBlbnRyaWVzIGZvciB3aGljaCBhCit0ZXJtaW5mbyBlbnRyeSBoYXMgYmVlbiBjb21waWxlZC4KKy5QUAorVGhlIFxmQnRnZXRlbnRcZlIgcm91dGluZSBsb2FkcyB0aGUgZW50cnkgZm9yIFxmSW5hbWVcZlIuCitJdCByZXR1cm5zIDEgb24gc3VjY2VzcywgMCBpZiB0aGVyZSBpcyBubyBzdWNoIGVudHJ5LCBhbmQgLTEgaWYgdGhlCit0ZXJtaW5mbyBkYXRhYmFzZSBjb3VsZCBub3QgYmUgZm91bmQuCitUaGUgZW11bGF0aW9uIGlnbm9yZXMgdGhlIGJ1ZmZlciBwb2ludGVyIFxmSWJwXGZSLgorLlBQCitUaGUgXGZCdGdldGZsYWdcZlIgcm91dGluZSBnZXRzIHRoZSBib29sZWFuIGVudHJ5IGZvciBcZklpZFxmUiwKK29yIHplcm8gaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKy5QUAorVGhlIFxmQnRnZXRudW1cZlIgcm91dGluZSBnZXRzIHRoZSBudW1lcmljIGVudHJ5IGZvciBcZklpZFxmUiwKK29yIC0xIGlmIGl0IGlzIG5vdCBhdmFpbGFibGUuCisuUFAKK1RoZSBcZkJ0Z2V0c3RyXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgc3RyaW5nIGVudHJ5IGZvciBcZklpZFxmUiwKK29yIHplcm8gaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KK1VzZSBcZkJ0cHV0c1xmUiB0byBvdXRwdXQgdGhlIHJldHVybmVkIHN0cmluZy4KK1RoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGNvcGllZCB0byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgXGZJYXJlYVxmUiwKK2FuZCB0aGUgXGZJYXJlYVxmUiB2YWx1ZSB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgcGFzdCB0aGUgbnVsbCBlbmRpbmcKK3RoaXMgdmFsdWUuCisuUFAKK09ubHkgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBcZkJpZFxmUiBwYXJhbWV0ZXIgb2YKK1xmQnRnZXRmbGFnXGZSLAorXGZCdGdldG51bVxmUiBhbmQKK1xmQnRnZXRzdHJcZlIgYXJlIGNvbXBhcmVkIGluIGxvb2t1cHMuCisuUFAKK1RoZSBcZkJ0Z290b1xmUiByb3V0aW5lIGluc3RhbnRpYXRlcyB0aGUgcGFyYW1ldGVycyBpbnRvIHRoZSBnaXZlbiBjYXBhYmlsaXR5LgorVGhlIG91dHB1dCBmcm9tIHRoaXMgcm91dGluZSBpcyB0byBiZSBwYXNzZWQgdG8gXGZCdHB1dHNcZlIuCisuUFAKK1RoZSBcZkJ0cHV0c1xmUiByb3V0aW5lIGlzIGRlc2NyaWJlZCBvbiB0aGUgXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkgbWFudWFsCitwYWdlLiAgSXQgY2FuIHJldHJpZXZlIGNhcGFiaWxpdGllcyBieSBlaXRoZXIgdGVybWNhcCBvciB0ZXJtaW5mbyBuYW1lLgorLlBQCitUaGUgdmFyaWFibGVzCitcZkJQQ1xmUiwKK1xmQlVQXGZSIGFuZAorXGZCQkNcZlIKK2FyZSBzZXQgYnkgXGZCdGdldGVudFxmUiB0byB0aGUgdGVybWluZm8gZW50cnkncyBkYXRhIGZvcgorXGZCcGFkX2NoYXJcZlIsCitcZkJjdXJzb3JfdXBcZlIgYW5kCitcZkJiYWNrc3BhY2VfaWZfbm90X2JzXGZSLAorcmVzcGVjdGl2ZWx5LgorXGZCVVBcZlIgaXMgbm90IHVzZWQgYnkgbmN1cnNlcy4KK1xmQlBDXGZSIGlzIHVzZWQgaW4gdGhlIFxmQnRkZWxheV9vdXRwdXRcZlIgZnVuY3Rpb24uCitcZkJCQ1xmUiBpcyB1c2VkIGluIHRoZSBcZkJ0Z290b1xmUiBlbXVsYXRpb24uCitUaGUgdmFyaWFibGUgXGZCb3NwZWVkXGZSIGlzIHNldCBieSBuY3Vyc2VzIGluIGEgc3lzdGVtLXNwZWNpZmljIGNvZGluZwordG8gcmVmbGVjdCB0aGUgdGVybWluYWwgc3BlZWQuCisuCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgd2hlcmUgZXhwbGljaXRseSBub3RlZCwKK3JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSCisoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IuCisuU0ggQlVHUworSWYgeW91IGNhbGwgXGZCdGdldHN0clxmUiB0byBmZXRjaCBcZkJjYVxmUiBvciBhbnkgb3RoZXIgcGFyYW1ldGVyaXplZCBzdHJpbmcsCitiZSBhd2FyZSB0aGF0IGl0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGVybWluZm8gbm90YXRpb24sIG5vdCB0aGUgb2xkZXIgYW5kCitub3QtcXVpdGUtY29tcGF0aWJsZSB0ZXJtY2FwIG5vdGF0aW9uLiAgVGhpcyB3aWxsIG5vdCBjYXVzZSBwcm9ibGVtcyBpZiBhbGwKK3lvdSBkbyB3aXRoIGl0IGlzIGNhbGwgXGZCdGdvdG9cZlIgb3IgXGZCdHBhcm1cZlIsIHdoaWNoIGJvdGggZXhwYW5kCit0ZXJtaW5mby1zdHlsZSBzdHJpbmdzIGFzIHRlcm1pbmZvLgorKFRoZSBcZkJ0Z290b1xmUiBmdW5jdGlvbiwgaWYgY29uZmlndXJlZCB0byBzdXBwb3J0IHRlcm1jYXAsIHdpbGwgY2hlY2sKK2lmIHRoZSBzdHJpbmcgaXMgaW5kZWVkIHRlcm1pbmZvLXN0eWxlIGJ5IGxvb2tpbmcgZm9yICIlcCIgcGFyYW1ldGVycyBvcgorIiQ8Li4+IiBkZWxheXMsIGFuZCBpbnZva2UgYSB0ZXJtY2FwLXN0eWxlIHBhcnNlciBpZiB0aGUgc3RyaW5nIGRvZXMgbm90CithcHBlYXIgdG8gYmUgdGVybWluZm8pLgorLlBQCitCZWNhdXNlIHRlcm1pbmZvIGNvbnZlbnRpb25zIGZvciByZXByZXNlbnRpbmcgcGFkZGluZyBpbiBzdHJpbmcgY2FwYWJpbGl0aWVzCitkaWZmZXIgZnJvbSB0ZXJtY2FwJ3MsIFxmQnRwdXRzKCI1MCIpO1xmUiB3aWxsIHB1dCBvdXQgYSBsaXRlcmFsICI1MCIgcmF0aGVyCit0aGFuIGJ1c3ktd2FpdGluZyBmb3IgNTAgbWlsbGlzZWNvbmRzLiAgQ29wZSB3aXRoIGl0LgorLlBQCitOb3RlIHRoYXQgdGVybWNhcCBoYXMgbm90aGluZyBhbmFsb2dvdXMgdG8gdGVybWluZm8ncyBcZkJzZ3JcZlIgc3RyaW5nLgorT25lIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCB0ZXJtY2FwIGFwcGxpY2F0aW9ucyBhc3N1bWUgXGZSbWVcZlIKKyh0ZXJtaW5mbyBcZkJzZ3IwXGZSKSBkb2VzIG5vdCByZXNldCB0aGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQuCitUaGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyBmb3IsIGFuZCBtb2RpZmllcyB0aGUgZGF0YSBzaG93biB0byB0aGUKK3Rlcm1jYXAgaW50ZXJmYWNlIHRvIGFjY29tbW9kYXRlIHRlcm1jYXAncyBsaW1pdGF0aW9uIGluIHRoaXMgcmVzcGVjdC4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4gIEhvd2V2ZXIsIHRoZXkKK2FyZSBtYXJrZWQgVE8gQkUgV0lUSERSQVdOIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuCisuUFAKK05laXRoZXIgdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgbm9yIHRoZSBTVnI0IG1hbiBwYWdlcyBkb2N1bWVudGVkIHRoZSByZXR1cm4KK3ZhbHVlcyBvZiBcZkJ0Z2V0ZW50XGZSIGNvcnJlY3RseSwgdGhvdWdoIGFsbCB0aHJlZSB3ZXJlIGluIGZhY3QgcmV0dXJuZWQgZXZlcgorc2luY2UgU1ZyMS4KK0luIHBhcnRpY3VsYXIsIGFuIG9taXNzaW9uIGluIHRoZSBYU0kgQ3Vyc2VzIGRvY3VtZW50YXRpb24gaGFzIGJlZW4KK21pc2ludGVycHJldGVkIHRvIG1lYW4gdGhhdCBcZkJ0Z2V0ZW50XGZSIHJldHVybnMgXGZCT0tcZlIgb3IgXGZCRVJSXGZSLgorQmVjYXVzZSB0aGUgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGgKK3RoZSBcZkl0ZXJtY2FwXGZSIGxpYnJhcnksIHRoYXQgaXMgYSBkZWZlY3QgaW4gWEN1cnNlcywgSXNzdWUgNCwgVmVyc2lvbiAyCityYXRoZXIgdGhhbiBpbiBuY3Vyc2VzLgorLlBQCitFeHRlcm5hbCB2YXJpYWJsZXMgYXJlIHByb3ZpZGVkIGZvciBzdXBwb3J0IG9mIGNlcnRhaW4gdGVybWNhcCBhcHBsaWNhdGlvbnMuCitIb3dldmVyLCB0ZXJtY2FwIGFwcGxpY2F0aW9ucycgdXNlIG9mIHRob3NlIHZhcmlhYmxlcyBpcyBwb29ybHkgZG9jdW1lbnRlZCwKK2UuZy4sIG5vdCBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQuCitJbiBwYXJ0aWN1bGFyLCBzb21lIGFwcGxpY2F0aW9ucyBhcmUgcmVwb3J0ZWQgdG8gZGVjbGFyZSBhbmQvb3IKK21vZGlmeSBcZkJvc3BlZWRcZlIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQnRlcm1pbmZvXGZSKFwqbiksIFxmQnB1dGNcZlIoMykuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX3Rlcm1pbmZvLjN4IGIvbWFuL2N1cnNfdGVybWluZm8uM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxMmE2YQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX3Rlcm1pbmZvLjN4CkBAIC0wLDAgKzEsMzUyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfdGVybWluZm8uM3gsdiAxLjMwIDIwMDgvMDgvMTYgMjA6NTM6MjcgdG9tIEV4cCAkCisuVEggY3Vyc190ZXJtaW5mbyAzWCAiIgorLmRzIG4gNQorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmRlbF9jdXJ0ZXJtXGZSLAorXGZCbXZjdXJcZlIsCitcZkJwdXRwXGZSLAorXGZCcmVzdGFydHRlcm1cZlIsCitcZkJzZXRfY3VydGVybVxmUiwKK1xmQnNldHRlcm1cZlIsCitcZkJzZXR1cHRlcm1cZlIsCitcZkJ0aWdldGZsYWdcZlIsCitcZkJ0aWdldG51bVxmUiwKK1xmQnRpZ2V0c3RyXGZSLAorXGZCdHBhcm1cZlIsCitcZkJ0cHV0c1xmUiwKK1xmQnZpZF9hdHRyXGZSLAorXGZCdmlkX3B1dHNcZlIsCitcZkJ2aWRhdHRyXGZSLAorXGZCdmlkcHV0c1xmUiAtIFxmQmN1cnNlc1xmUiBpbnRlcmZhY2VzIHRvIHRlcm1pbmZvIGRhdGFiYXNlCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCisubmYKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5icgorXGZCI2luY2x1ZGUgPHRlcm0uaD5cZlIKKy5QUAorXGZCaW50IHNldHVwdGVybShjaGFyICpcZlJcZkl0ZXJtXGZSXGZCLCBpbnQgXGZSXGZJZmlsZGVzXGZSXGZCLCBpbnQgKlxmUlxmSWVycnJldFxmUlxmQik7XGZSCisuYnIKK1xmQmludCBzZXR0ZXJtKGNoYXIgKlxmUlxmSXRlcm1cZlJcZkIpO1xmUgorLmJyCitcZkJURVJNSU5BTCAqc2V0X2N1cnRlcm0oVEVSTUlOQUwgKlxmUlxmSW50ZXJtXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGRlbF9jdXJ0ZXJtKFRFUk1JTkFMICpcZlJcZklvdGVybVxmUlxmQik7XGZSCisuYnIKK1xmQmludCByZXN0YXJ0dGVybShjaGFyICpcZlJcZkl0ZXJtXGZSXGZCLCBpbnQgXGZSXGZJZmlsZGVzXGZSXGZCLCBpbnQgKlxmUlxmSWVycnJldFxmUlxmQik7XGZSCisuYnIKK1xmQmNoYXIgKnRwYXJtKGNoYXIgKlxmUlxmSXN0clxmUlxmQiwgLi4uKTtcZlIKKy5icgorXGZCaW50IHRwdXRzKGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSWFmZmNudFxmUlxmQiwgaW50ICgqXGZSXGZJcHV0Y1xmUlxmQikoaW50KSk7XGZSCisuYnIKK1xmQmludCBwdXRwKGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCB2aWRwdXRzKGNodHlwZSBcZlJcZklhdHRyc1xmUlxmQiwgaW50ICgqXGZSXGZJcHV0Y1xmUlxmQikoaW50KSk7XGZSCisuYnIKK1xmQmludCB2aWRhdHRyKGNodHlwZSBcZlJcZklhdHRyc1xmUlxmQik7XGZSCisuYnIKK1xmQmludCB2aWRfcHV0cyhhdHRyX3QgXGZSXGZJYXR0cnNcZlJcZkIsIHNob3J0IFxmUlxmSXBhaXJcZlJcZkIsIHZvaWQgKlxmUlxmSW9wdHNcZlJcZkIsIGludCAoKlxmUlxmSXB1dGNcZlJcZkIpKGNoYXIpKTtcZlIKKy5icgorXGZCaW50IHZpZF9hdHRyKGF0dHJfdCBcZlJcZklhdHRyc1xmUlxmQiwgc2hvcnQgXGZSXGZJcGFpclxmUlxmQiwgdm9pZCAqXGZSXGZJb3B0c1xmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmN1cihpbnQgXGZSXGZJb2xkcm93XGZSXGZCLCBpbnQgXGZSXGZJb2xkY29sXGZSXGZCLCBpbnQgXGZSXGZJbmV3cm93XGZSLCBpbnQgXGZSXGZJbmV3Y29sXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHRpZ2V0ZmxhZyhjaGFyICpcZlJcZkljYXBuYW1lXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHRpZ2V0bnVtKGNoYXIgKlxmUlxmSWNhcG5hbWVcZlJcZkIpO1xmUgorLmJyCitcZkJjaGFyICp0aWdldHN0cihjaGFyICpcZlJcZkljYXBuYW1lXGZSXGZCKTtcZlIKKy5icgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGxvdy1sZXZlbCByb3V0aW5lcyBtdXN0IGJlIGNhbGxlZCBieSBwcm9ncmFtcyB0aGF0IGhhdmUgdG8gZGVhbAorZGlyZWN0bHkgd2l0aCB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgdG8gaGFuZGxlIGNlcnRhaW4gdGVybWluYWwKK2NhcGFiaWxpdGllcywgc3VjaCBhcyBwcm9ncmFtbWluZyBmdW5jdGlvbiBrZXlzLiAgRm9yIGFsbCBvdGhlcgorZnVuY3Rpb25hbGl0eSwgXGZCY3Vyc2VzXGZSIHJvdXRpbmVzIGFyZSBtb3JlIHN1aXRhYmxlIGFuZCB0aGVpciB1c2UgaXMKK3JlY29tbWVuZGVkLgorLlBQCitJbml0aWFsbHksIFxmQnNldHVwdGVybVxmUiBzaG91bGQgYmUgY2FsbGVkLiAgTm90ZSB0aGF0CitcZkJzZXR1cHRlcm1cZlIgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgYnkgXGZCaW5pdHNjclxmUiBhbmQKK1xmQm5ld3Rlcm1cZlIuICBUaGlzIGRlZmluZXMgdGhlIHNldCBvZiB0ZXJtaW5hbC1kZXBlbmRlbnQgdmFyaWFibGVzCitbbGlzdGVkIGluIFxmQnRlcm1pbmZvXGZSKFwqbildLgorVGhlIFxmQnRlcm1pbmZvXGZSIHZhcmlhYmxlcworXGZCbGluZXNcZlIgYW5kIFxmQmNvbHVtbnNcZlIgYXJlIGluaXRpYWxpemVkIGJ5IFxmQnNldHVwdGVybVxmUiBhcworZm9sbG93czoKKy5SUworLlBQCitJZiBcZkJ1c2VfZW52KEZBTFNFKVxmUiBoYXMgYmVlbiBjYWxsZWQsIHZhbHVlcyBmb3IKK1xmQmxpbmVzXGZSIGFuZCBcZkJjb2x1bW5zXGZSIHNwZWNpZmllZCBpbiBcZkJ0ZXJtaW5mb1xmUiBhcmUgdXNlZC4KKy5QUAorT3RoZXJ3aXNlLCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFxmQkxJTkVTXGZSIGFuZCBcZkJDT0xVTU5TXGZSCitleGlzdCwgdGhlaXIgdmFsdWVzIGFyZSB1c2VkLiAgSWYgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRvIG5vdAorZXhpc3QgYW5kIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgaW4gYSB3aW5kb3csIHRoZSBjdXJyZW50IHdpbmRvdyBzaXplCitpcyB1c2VkLiAgT3RoZXJ3aXNlLCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRvIG5vdCBleGlzdCwgdGhlCit2YWx1ZXMgZm9yIFxmQmxpbmVzXGZSIGFuZCBcZkJjb2x1bW5zXGZSIHNwZWNpZmllZCBpbiB0aGUKK1xmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIGFyZSB1c2VkLgorLlJFCisuUFAKK1RoZSBoZWFkZXIgZmlsZXMgXGZCY3Vyc2VzLmhcZlIgYW5kIFxmQnRlcm0uaFxmUiBzaG91bGQgYmUgaW5jbHVkZWQgKGluIHRoaXMKK29yZGVyKSB0byBnZXQgdGhlIGRlZmluaXRpb25zIGZvciB0aGVzZSBzdHJpbmdzLCBudW1iZXJzLCBhbmQgZmxhZ3MuCitQYXJhbWV0ZXJpemVkIHN0cmluZ3Mgc2hvdWxkIGJlIHBhc3NlZCB0aHJvdWdoIFxmQnRwYXJtXGZSIHRvIGluc3RhbnRpYXRlIHRoZW0uIAorQWxsIFxmQnRlcm1pbmZvXGZSIHN0cmluZ3MgW2luY2x1ZGluZyB0aGUgb3V0cHV0IG9mIFxmQnRwYXJtXGZSXSBzaG91bGQgYmUgcHJpbnRlZAord2l0aCBcZkJ0cHV0c1xmUiBvciBcZkJwdXRwXGZSLiAgQ2FsbCB0aGUgXGZCcmVzZXRfc2hlbGxfbW9kZVxmUiB0byByZXN0b3JlIHRoZQordHR5IG1vZGVzIGJlZm9yZSBleGl0aW5nIFtzZWUgXGZCY3Vyc19rZXJuZWxcZlIoM1gpXS4gIFByb2dyYW1zIHdoaWNoIHVzZQorY3Vyc29yIGFkZHJlc3Npbmcgc2hvdWxkIG91dHB1dCBcZkJlbnRlcl9jYV9tb2RlXGZSIHVwb24gc3RhcnR1cCBhbmQgc2hvdWxkCitvdXRwdXQgXGZCZXhpdF9jYV9tb2RlXGZSIGJlZm9yZSBleGl0aW5nLiAgUHJvZ3JhbXMgZGVzaXJpbmcgc2hlbGwgZXNjYXBlcworc2hvdWxkIGNhbGwKKy5QUAorXGZCcmVzZXRfc2hlbGxfbW9kZVxmUiBhbmQgb3V0cHV0IFxmQmV4aXRfY2FfbW9kZVxmUiBiZWZvcmUgdGhlIHNoZWxsCitpcyBjYWxsZWQgYW5kIHNob3VsZCBvdXRwdXQgXGZCZW50ZXJfY2FfbW9kZVxmUiBhbmQgY2FsbAorXGZCcmVzZXRfcHJvZ19tb2RlXGZSIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSBzaGVsbC4KKy5QUAorVGhlIFxmQnNldHVwdGVybVxmUiByb3V0aW5lIHJlYWRzIGluIHRoZSBcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZSwKK2luaXRpYWxpemluZyB0aGUgXGZCdGVybWluZm9cZlIgc3RydWN0dXJlcywgYnV0IGRvZXMgbm90IHNldCB1cCB0aGUKK291dHB1dCB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzIHVzZWQgYnkgXGZCY3Vyc2VzXGZSLiAgVGhlIHRlcm1pbmFsCit0eXBlIGlzIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFxmSXRlcm1cZlI7IGlmIFxmSXRlcm1cZlIgaXMgbnVsbCwgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNXGZSIGlzIHVzZWQuCitBbGwgb3V0cHV0IGlzIHRvIGZpbGUgZGVzY3JpcHRvciBcZkJmaWxkZXNcZlIgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgZm9yIG91dHB1dC4KK0lmIFxmSWVycnJldFxmUiBpcyBub3QgbnVsbCwKK3RoZW4gXGZCc2V0dXB0ZXJtXGZSIHJldHVybnMgXGZCT0tcZlIgb3IKK1xmQkVSUlxmUiBhbmQgc3RvcmVzIGEgc3RhdHVzIHZhbHVlIGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkKK1xmSWVycnJldFxmUi4KK0EgcmV0dXJuIHZhbHVlIG9mIFxmQk9LXGZSIGNvbWJpbmVkIHdpdGggc3RhdHVzIG9mIFxmQjFcZlIgaW4gXGZJZXJycmV0XGZSCitpcyBub3JtYWwuCitJZiBcZkJFUlJcZlIgaXMgcmV0dXJuZWQsIGV4YW1pbmUgXGZJZXJycmV0XGZSOgorLlJTCisuVFAgNQorLkIgMQorbWVhbnMgdGhhdCB0aGUgdGVybWluYWwgaXMgaGFyZGNvcHksIGNhbm5vdCBiZSB1c2VkIGZvciBjdXJzZXMgYXBwbGljYXRpb25zLgorLlRQIDUKKy5CIDAKK21lYW5zIHRoYXQgdGhlIHRlcm1pbmFsIGNvdWxkIG5vdCBiZSBmb3VuZCwKK29yIHRoYXQgaXQgaXMgYSBnZW5lcmljIHR5cGUsCitoYXZpbmcgdG9vIGxpdHRsZSBpbmZvcm1hdGlvbiBmb3IgY3Vyc2VzIGFwcGxpY2F0aW9ucyB0byBydW4uCisuVFAgNQorLkIgLTEKK21lYW5zIHRoYXQgdGhlIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIGNvdWxkIG5vdCBiZSBmb3VuZC4KKy5SRQorLlBQCitJZiBcZkllcnJyZXRcZlIgaXMKK251bGwsIFxmQnNldHVwdGVybVxmUiBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSB1cG9uIGZpbmRpbmcgYW4gZXJyb3IKK2FuZCBleGl0cy4gIFRodXMsIHRoZSBzaW1wbGVzdCBjYWxsIGlzOgorLnNwCisgICAgICBcZkJzZXR1cHRlcm0oKGNoYXIgKikwLCAxLCAoaW50ICopMCk7XGZSLAorLnNwCit3aGljaCB1c2VzIGFsbCB0aGUgZGVmYXVsdHMgYW5kIHNlbmRzIHRoZSBvdXRwdXQgdG8gXGZCc3Rkb3V0XGZSLgorLlBQCitUaGUgXGZCc2V0dGVybVxmUiByb3V0aW5lIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IFxmQnNldHVwdGVybVxmUi4gIFRoZSBjYWxsOgorLnNwCisgICAgICBcZkJzZXR1cHRlcm0oXGZSXGZJdGVybVxmUlxmQiwgMSwgKGludCAqKTApXGZSCisuc3AKK3Byb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgXGZCc2V0dGVybShcZlJcZkl0ZXJtXGZSXGZCKVxmUi4KK1RoZSBcZkJzZXR0ZXJtXGZSIHJvdXRpbmUgaXMgaW5jbHVkZWQgaGVyZSBmb3IgQlNEIGNvbXBhdGliaWxpdHksIGFuZAoraXMgbm90IHJlY29tbWVuZGVkIGZvciBuZXcgcHJvZ3JhbXMuCisuUFAKK1RoZSBcZkJzZXRfY3VydGVybVxmUiByb3V0aW5lIHNldHMgdGhlIHZhcmlhYmxlIFxmQmN1cl90ZXJtXGZSIHRvCitcZkludGVybVxmUiwgYW5kIG1ha2VzIGFsbCBvZiB0aGUgXGZCdGVybWluZm9cZlIgYm9vbGVhbiwgbnVtZXJpYywgYW5kCitzdHJpbmcgdmFyaWFibGVzIHVzZSB0aGUgdmFsdWVzIGZyb20gXGZJbnRlcm1cZlIuICBJdCByZXR1cm5zIHRoZSBvbGQgdmFsdWUKK29mIFxmQmN1cl90ZXJtXGZSLgorLlBQCitUaGUgXGZCZGVsX2N1cnRlcm1cZlIgcm91dGluZSBmcmVlcyB0aGUgc3BhY2UgcG9pbnRlZCB0byBieQorXGZJb3Rlcm1cZlIgYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgZnVydGhlciB1c2UuICBJZiBcZklvdGVybVxmUiBpcwordGhlIHNhbWUgYXMgXGZCY3VyX3Rlcm1cZlIsIHJlZmVyZW5jZXMgdG8gYW55IG9mIHRoZSBcZkJ0ZXJtaW5mb1xmUgorYm9vbGVhbiwgbnVtZXJpYywgYW5kIHN0cmluZyB2YXJpYWJsZXMgdGhlcmVhZnRlciBtYXkgcmVmZXIgdG8gaW52YWxpZAorbWVtb3J5IGxvY2F0aW9ucyB1bnRpbCBhbm90aGVyIFxmQnNldHVwdGVybVxmUiBoYXMgYmVlbiBjYWxsZWQuCisuUFAKK1RoZSBcZkJyZXN0YXJ0dGVybVxmUiByb3V0aW5lIGlzIHNpbWlsYXIgdG8gXGZCc2V0dXB0ZXJtXGZSIGFuZCBcZkJpbml0c2NyXGZSLAorZXhjZXB0IHRoYXQgaXQgaXMgY2FsbGVkIGFmdGVyIHJlc3RvcmluZyBtZW1vcnkgdG8gYSBwcmV2aW91cyBzdGF0ZSAoZm9yCitleGFtcGxlLCB3aGVuIHJlbG9hZGluZyBhIGdhbWUgc2F2ZWQgYXMgYSBjb3JlIGltYWdlIGR1bXApLiAgSXQgYXNzdW1lcyB0aGF0Cit0aGUgd2luZG93cyBhbmQgdGhlIGlucHV0IGFuZCBvdXRwdXQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgd2hlbiBtZW1vcnkgd2FzCitzYXZlZCwgYnV0IHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCBiYXVkIHJhdGUgbWF5IGJlIGRpZmZlcmVudC4gIEFjY29yZGluZ2x5LAoraXQgc2F2ZXMgdmFyaW91cyB0dHkgc3RhdGUgYml0cywgY2FsbHMgXGZCc2V0dXB0ZXJtXGZQLAorYW5kIHRoZW4gcmVzdG9yZXMgdGhlIGJpdHMuCisuUFAKK1RoZSBcZkJ0cGFybVxmUiByb3V0aW5lIGluc3RhbnRpYXRlcyB0aGUgc3RyaW5nIFxmSXN0clxmUiB3aXRoCitwYXJhbWV0ZXJzIFxmSXBpXGZSLiAgQSBwb2ludGVyIGlzIHJldHVybmVkIHRvIHRoZSByZXN1bHQgb2YgXGZJc3RyXGZSCit3aXRoIHRoZSBwYXJhbWV0ZXJzIGFwcGxpZWQuCisuUFAKK1RoZSBcZkJ0cHV0c1xmUiByb3V0aW5lIGFwcGxpZXMgcGFkZGluZyBpbmZvcm1hdGlvbiB0byB0aGUgc3RyaW5nCitcZklzdHJcZlIgYW5kIG91dHB1dHMgaXQuICBUaGUgXGZJc3RyXGZSIG11c3QgYmUgYSB0ZXJtaW5mbyBzdHJpbmcKK3ZhcmlhYmxlIG9yIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBcZkJ0cGFybVxmUiwgXGZCdGdldHN0clxmUiwgb3IKK1xmQnRnb3RvXGZSLiAgXGZJYWZmY250XGZSIGlzIHRoZSBudW1iZXIgb2YgbGluZXMgYWZmZWN0ZWQsIG9yIDEgaWYKK25vdCBhcHBsaWNhYmxlLiAgXGZJcHV0Y1xmUiBpcyBhIFxmQnB1dGNoYXJcZlItbGlrZSByb3V0aW5lIHRvIHdoaWNoCit0aGUgY2hhcmFjdGVycyBhcmUgcGFzc2VkLCBvbmUgYXQgYSB0aW1lLgorLlBQCitUaGUgXGZCcHV0cFxmUiByb3V0aW5lIGNhbGxzIFxmQnRwdXRzKFxmUlxmSXN0clxmUlxmQiwgMSwgcHV0Y2hhcilcZlIuCitOb3RlIHRoYXQgdGhlIG91dHB1dCBvZiBcZkJwdXRwXGZSIGFsd2F5cyBnb2VzIHRvIFxmQnN0ZG91dFxmUiwgbm90IHRvCit0aGUgXGZJZmlsZGVzXGZSIHNwZWNpZmllZCBpbiBcZkJzZXR1cHRlcm1cZlIuCisuUFAKK1RoZSBcZkJ2aWRwdXRzXGZSIHJvdXRpbmUgZGlzcGxheXMgdGhlIHN0cmluZyBvbiB0aGUgdGVybWluYWwgaW4gdGhlCit2aWRlbyBhdHRyaWJ1dGUgbW9kZSBcZklhdHRyc1xmUiwgd2hpY2ggaXMgYW55IGNvbWJpbmF0aW9uIG9mIHRoZQorYXR0cmlidXRlcyBsaXN0ZWQgaW4gXGZCY3Vyc2VzXGZSKDNYKS4gIFRoZSBjaGFyYWN0ZXJzIGFyZSBwYXNzZWQgdG8KK3RoZSBcZkJwdXRjaGFyXGZSLWxpa2Ugcm91dGluZSBcZklwdXRjXGZSLgorLlBQCitUaGUgXGZCdmlkYXR0clxmUiByb3V0aW5lIGlzIGxpa2UgdGhlIFxmQnZpZHB1dHNcZlIgcm91dGluZSwgZXhjZXB0Cit0aGF0IGl0IG91dHB1dHMgdGhyb3VnaCBcZkJwdXRjaGFyXGZSLgorLlBQCitUaGUgXGZCdmlkX2F0dHJcZlIgYW5kIFxmQnZpZF9wdXRzXGZSIHJvdXRpbmVzIGNvcnJlc3BvbmQgdG8gdmlkYXR0ciBhbmQgdmlkcHV0cywKK3Jlc3BlY3RpdmVseS4KK1RoZXkgdXNlIGEgc2V0IG9mIGFyZ3VtZW50cyBmb3IgcmVwcmVzZW50aW5nIHRoZSB2aWRlbyBhdHRyaWJ1dGVzIHBsdXMgY29sb3IsCitpLmUuLAorb25lIG9mIHR5cGUgYXR0cl90IGZvciB0aGUgYXR0cmlidXRlcyBhbmQgb25lIG9mIHNob3J0IGZvcgordGhlIGNvbG9yX3BhaXIgbnVtYmVyLgorVGhlIFxmQnZpZF9hdHRyXGZSIGFuZCBcZkJ2aWRfcHV0c1xmUiByb3V0aW5lcworYXJlIGRlc2lnbmVkIHRvIHVzZSB0aGUgYXR0cmlidXRlIGNvbnN0YW50cyB3aXRoIHRoZSBcZklXQV9cZlIgcHJlZml4LgorVGhlIG9wdHMgYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCitDdXJyZW50bHksIGFwcGxpY2F0aW9ucyBtdXN0IHByb3ZpZGUgYSBudWxsIHBvaW50ZXIgZm9yIHRoYXQgYXJndW1lbnQuCisuUFAKK1RoZSBcZkJtdmN1clxmUiByb3V0aW5lIHByb3ZpZGVzIGxvdy1sZXZlbCBjdXJzb3IgbW90aW9uLiAgSXQgdGFrZXMKK2VmZmVjdCBpbW1lZGlhdGVseSAocmF0aGVyIHRoYW4gYXQgdGhlIG5leHQgcmVmcmVzaCkuCisuUFAKK1RoZSBcZkJ0aWdldGZsYWdcZlIsIFxmQnRpZ2V0bnVtXGZSIGFuZCBcZkJ0aWdldHN0clxmUiByb3V0aW5lcyByZXR1cm4KK3RoZSB2YWx1ZSBvZiB0aGUgY2FwYWJpbGl0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBcZkJ0ZXJtaW5mb1xmUgorXGZJY2FwbmFtZVxmUiBwYXNzZWQgdG8gdGhlbSwgc3VjaCBhcyBcZkJ4ZW5sXGZSLgorLlBQCitUaGUgXGZCdGlnZXRmbGFnXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgdmFsdWUgXGZCLTFcZlIgaWYKK1xmSWNhcG5hbWVcZlIgaXMgbm90IGEgYm9vbGVhbiBjYXBhYmlsaXR5LAorb3IgXGZCMFxmUiBpZiBpdCBpcyBjYW5jZWxlZCBvciBhYnNlbnQgZnJvbSB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uCisuUFAKK1RoZSBcZkJ0aWdldG51bVxmUiByb3V0aW5lIHJldHVybnMgdGhlIHZhbHVlIFxmQi0yXGZSIGlmCitcZkljYXBuYW1lXGZSIGlzIG5vdCBhIG51bWVyaWMgY2FwYWJpbGl0eSwKK29yIFxmQi0xXGZSIGlmIGl0IGlzIGNhbmNlbGVkIG9yIGFic2VudCBmcm9tIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKy5QUAorVGhlIFxmQnRpZ2V0c3RyXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgdmFsdWUgXGZCKGNoYXIgKiktMVxmUgoraWYgXGZJY2FwbmFtZVxmUiBpcyBub3QgYSBzdHJpbmcgY2FwYWJpbGl0eSwKK29yIFxmQjBcZlIgaWYgaXQgaXMgY2FuY2VsZWQgb3IgYWJzZW50IGZyb20gdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorLlBQCitUaGUgXGZJY2FwbmFtZVxmUiBmb3IgZWFjaCBjYXBhYmlsaXR5IGlzIGdpdmVuIGluIHRoZSB0YWJsZSBjb2x1bW4gZW50aXRsZWQKK1xmSWNhcG5hbWVcZlIgY29kZSBpbiB0aGUgY2FwYWJpbGl0aWVzIHNlY3Rpb24gb2YgXGZCdGVybWluZm9cZlIoXCpuKS4KKy5zcAorLlJTCitcZkJjaGFyICpib29sbmFtZXNbXVxmUiwgXGZCKmJvb2xjb2Rlc1tdXGZSLCBcZkIqYm9vbGZuYW1lc1tdXGZSCisuc3AKK1xmQmNoYXIgKm51bW5hbWVzW11cZlIsIFxmQipudW1jb2Rlc1tdXGZSLCBcZkIqbnVtZm5hbWVzW11cZlIKKy5zcAorXGZCY2hhciAqc3RybmFtZXNbXVxmUiwgXGZCKnN0cmNvZGVzW11cZlIsIFxmQipzdHJmbmFtZXNbXVxmUgorLlJFCisuUFAKK1RoZXNlIG51bGwtdGVybWluYXRlZCBhcnJheXMgY29udGFpbiB0aGUgXGZJY2FwbmFtZXNcZlIsIHRoZQorXGZCdGVybWNhcFxmUiBjb2RlcywgYW5kIHRoZSBmdWxsIEMgbmFtZXMsIGZvciBlYWNoIG9mIHRoZQorXGZCdGVybWluZm9cZlIgdmFyaWFibGVzLgorLlNIIFJFVFVSTiBWQUxVRQorUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIKKyhTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisuUFAKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIGFsd2F5cyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUworLlRQIDUKK1xmQmRlbF9jdXJ0ZXJtXGZQCityZXR1cm5zIGFuIGVycm9yCitpZiBpdHMgdGVybWluYWwgcGFyYW1ldGVyIGlzIG51bGwuCisuVFAgNQorXGZCcHV0cFxmUAorY2FsbHMgXGZCdHB1dHNcZlAsIHJldHVybmluZyB0aGUgc2FtZSBlcnJvci1jb2Rlcy4KKy5UUCA1CitcZkJyZXN0YXJ0dGVybVxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIGFzc29jaWF0ZWQgY2FsbCB0byBcZkJzZXR1cHRlcm1cZlAgcmV0dXJucyBhbiBlcnJvci4KKy5UUCA1CitcZkJzZXR1cHRlcm1cZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIGl0IGNhbm5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5LCBvcgorY3JlYXRlIHRoZSBpbml0aWFsIHdpbmRvd3MgKHN0ZHNjciwgY3Vyc2NyLCBuZXdzY3IpLgorT3RoZXIgZXJyb3IgY29uZGl0aW9ucyBhcmUgZG9jdW1lbnRlZCBhYm92ZS4KKy5UUCA1CitcZkJ0cHV0c1xmUAorcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgc3RyaW5nIHBhcmFtZXRlciBpcyBudWxsLgorSXQgZG9lcyBub3QgZGV0ZWN0IEkvTyBlcnJvcnM6CitYL09wZW4gc3RhdGVzIHRoYXQgXGZCdHB1dHNcZlAgaWdub3JlcyB0aGUgcmV0dXJuIHZhbHVlCitvZiB0aGUgb3V0cHV0IGZ1bmN0aW9uIFxmSXB1dGNcZlAuCisuUkUKKy5TSCBOT1RFUworVGhlIFxmQnNldHVwdGVybVxmUiByb3V0aW5lIHNob3VsZCBiZSB1c2VkIGluIHBsYWNlIG9mIFxmQnNldHRlcm1cZlIuCitJdCBtYXkgYmUgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gdGVzdCBmb3IgdGVybWluYWwgY2FwYWJpbGl0aWVzIHdpdGhvdXQKK2NvbW1pdHRpbmcgdG8gdGhlIGFsbG9jYXRpb24gb2Ygc3RvcmFnZSBpbnZvbHZlZCBpbiBcZkJpbml0c2NyXGZSLgorLlBQCitOb3RlIHRoYXQgXGZCdmlkYXR0clxmUiBhbmQgXGZCdmlkcHV0c1xmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGUgZnVuY3Rpb24gXGZCc2V0dGVybVxmUiBpcyBub3QgZGVzY3JpYmVkIGJ5IFgvT3BlbiBhbmQgbXVzdAorYmUgY29uc2lkZXJlZCBub24tcG9ydGFibGUuICBBbGwgb3RoZXIgZnVuY3Rpb25zIGFyZSBhcyBkZXNjcmliZWQgYnkgWC9PcGVuLgorLlBQCitcZkJzZXR1cHRlcm1cZlAgY29waWVzIHRoZSB0ZXJtaW5hbCBuYW1lIHRvIHRoZSBhcnJheSBcZkJ0dHl0eXBlXGZQLgorVGhpcyBpcyBub3QgcGFydCBvZiBYL09wZW4gQ3Vyc2VzLCBidXQgaXMgYXNzdW1lZCBieSBzb21lIGFwcGxpY2F0aW9ucy4KKy5QUAorSW4gU3lzdGVtIFYgUmVsZWFzZSA0LCBcZkJzZXRfY3VydGVybVxmUiBoYXMgYW4gXGZCaW50XGZSIHJldHVybiB0eXBlIGFuZAorcmV0dXJucyBcZkJPS1xmUiBvciBcZkJFUlJcZlIuICBXZSBoYXZlIGNob3NlbiB0byBpbXBsZW1lbnQgdGhlIFgvT3BlbiBDdXJzZXMKK3NlbWFudGljcy4KKy5QUAorSW4gU3lzdGVtIFYgUmVsZWFzZSA0LCB0aGUgdGhpcmQgYXJndW1lbnQgb2YgXGZCdHB1dHNcZlIgaGFzIHRoZSB0eXBlCitcZkJpbnQgKCpwdXRjKShjaGFyKVxmUi4KKy5QUAorQXQgbGVhc3Qgb25lIGltcGxlbWVudGF0aW9uIG9mIFgvT3BlbiBDdXJzZXMgKFNvbGFyaXMpIHJldHVybnMgYSB2YWx1ZQorb3RoZXIgdGhhbiBPSy9FUlIgZnJvbSBcZkJ0cHV0c1xmUC4KK1RoYXQgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIGFuZCBkb2VzIG5vIGVycm9yLWNoZWNraW5nLgorLlBQCitYL09wZW4gQ3Vyc2VzIHByb3RvdHlwZXMgXGZCdHBhcm1cZlIgd2l0aCBhIGZpeGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzLAorcmF0aGVyIHRoYW4gYSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LgorVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KK1BvcnRhYmxlIGFwcGxpY2F0aW9ucyBzaG91bGQgcHJvdmlkZSA5IHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIGZvcm1hdDsKK3plcm9lcyBhcmUgZmluZSBmb3IgdGhpcyBwdXJwb3NlLgorLlBQCitYL09wZW4gbm90ZXMgdGhhdCBhZnRlciBjYWxsaW5nIFxmQm12Y3VyXGZSLCB0aGUgY3Vyc2VzIHN0YXRlIG1heSBub3QgbWF0Y2ggdGhlCithY3R1YWwgdGVybWluYWwgc3RhdGUsIGFuZCB0aGF0IGFuIGFwcGxpY2F0aW9uIHNob3VsZCB0b3VjaCBhbmQgcmVmcmVzaAordGhlIHdpbmRvdyBiZWZvcmUgcmVzdW1pbmcgbm9ybWFsIGN1cnNlcyBjYWxscy4KK0JvdGggbmN1cnNlcyBhbmQgU3lzdGVtIFYgUmVsZWFzZSA0IGN1cnNlcyBpbXBsZW1lbnQgXGZCbXZjdXJcZlIgdXNpbmcKK3RoZSBTQ1JFRU4gZGF0YSBhbGxvY2F0ZWQgaW4gZWl0aGVyIFxmQmluaXRzY3JcZlIgb3IgXGZCbmV3dGVybVxmUi4KK1NvIHRob3VnaCBpdCBpcyBkb2N1bWVudGVkIGFzIGEgdGVybWluZm8gZnVuY3Rpb24sCitcZkJtdmN1clxmUiBpcyByZWFsbHkgYSBjdXJzZXMgZnVuY3Rpb24gd2hpY2ggaXMgbm90IHdlbGwgc3BlY2lmaWVkLgorLlBQCitYL09wZW4gc3RhdGVzIHRoYXQgdGhlIG9sZCBsb2NhdGlvbiBtdXN0IGJlIGdpdmVuIGZvciBcZkJtdmN1clxmUC4KK1RoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzIHRoZSBjYWxsZXIgdG8gdXNlIC0xJ3MgZm9yIHRoZSBvbGQgb3JkaW5hdGVzLgorSW4gdGhhdCBjYXNlLCB0aGUgb2xkIGxvY2F0aW9uIGlzIHVua25vd24uCisuUFAKK0V4dGVuZGVkIHRlcm1pbmFsIGNhcGFiaWxpdHkgbmFtZXMsIGUuZy4sIGFzIGRlZmluZWQgYnkgXGZCdGljXCAteFxmUCwKK2FyZSBub3Qgc3RvcmVkIGluIHRoZSBhcnJheXMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfaW5pdHNjclxmUigzWCksCitcZkJjdXJzX2tlcm5lbFxmUigzWCksCitcZkJjdXJzX3Rlcm1jYXBcZlIoM1gpLAorXGZCcHV0Y1xmUigzKSwKK1xmQnRlcm1pbmZvXGZSKFwqbikKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2N1cnNfdGhyZWFkcy4zeCBiL21hbi9jdXJzX3RocmVhZHMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX3RocmVhZHMuM3gKQEAgLTAsMCArMSw2MDMgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc190aHJlYWRzLjN4LHYgMS4xMiAyMDA4LzA0LzEyIDE4OjIyOjUxIHRvbSBFeHAgJAorLlRIIGN1cnNfdGhyZWFkcyAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQnVzZV9zY3JlZW5cZlIsCitcZkJ1c2Vfd2luZG93XGZSIC0gXGZCY3Vyc2VzXGZSIHRocmVhZCBzdXBwb3J0CisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQnR5cGVkZWYgaW50ICgqTkNVUlNFU19XSU5ET1dfQ0IpKFdJTkRPVyAqLCB2b2lkICopO1xmUgorXGZCdHlwZWRlZiBpbnQgKCpOQ1VSU0VTX1NDUkVFTl9DQikoU0NSRUVOICosIHZvaWQgKik7XGZSCisuYnIKK1xmQmludCBzZXRfZXNjZGVsYXkoaW50IHNpemUpO1xmUgorLmJyCitcZkJpbnQgc2V0X3RhYnNpemUoaW50IHNpemUpO1xmUgorLmJyCitcZkJpbnQgdXNlX3NjcmVlbihTQ1JFRU4gKnNjciwgTkNVUlNFU19XSU5ET1dfQ0IgZnVuYywgdm9pZCAqZGF0YSk7XGZSCisuYnIKK1xmQmludCB1c2Vfd2luZG93KFdJTkRPVyAqd2luLCBOQ1VSU0VTX1NDUkVFTl9DQiBmdW5jLCB2b2lkICpkYXRhKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25maWd1cmVkIHRvIHByb3ZpZGUgcnVkaW1lbnRhcnkgc3VwcG9ydAorZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KK1RoaXMgbWFrZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGxpYnJhcmllcywgZS5nLiwgXGZJbGlibmN1cnNlc3RcZlAgc2luY2UKK3RoZSBiaW5hcnkgaW50ZXJmYWNlcyBhcmUgZGlmZmVyZW50LgorLlBQCitSYXRoZXIgdGhhbiBtb2RpZnkgdGhlIGludGVyZmFjZXMgdG8gcGFzcyBhIHRocmVhZCBzcGVjaWZpZXIgdG8KK2VhY2ggZnVuY3Rpb24sIGl0IGFkZHMgYSBmZXcgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSB1c2VkIGluIGFueQorY29uZmlndXJhdGlvbiB3aGljaCBoaWRlIHRoZSBtdXRleCdzIG5lZWRlZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQKK3VzZSBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyB3aGVuIGNvbmZpZ3VyZWQgZm9yIHRocmVhZGluZy4KKy5QUAorSW4gYWRkaXRpb24gdG8gZm9yY2luZyBhY2Nlc3MgdG8gbWVtYmVycyBvZiB0aGUgXGZCV0lORE9XXGZQIHN0cnVjdHVyZQordG8gYmUgdmlhIGZ1bmN0aW9ucyAoc2VlIFxmQmN1cnNfb3BhcXVlXGZQKDN4KSksCitpdCBtYWtlcyBmdW5jdGlvbnMgb2YgdGhlIGNvbW1vbiBnbG9iYWwgdmFyaWFibGVzLAorZS5nLiwKK0NPTE9SUywKK0NPTE9SX1BBSVJTLAorQ09MUywKK0VTQ0RFTEFZLAorTElORVMsCitUQUJTSVpFCitjdXJzY3IsCituZXdzY3IgYW5kCit0dHl0eXBlLgorVGhvc2UgdmFyaWFibGVzIGFyZSBtYWludGFpbmVkIGFzIHJlYWQtb25seSB2YWx1ZXMsIHN0b3JlZCBpbiB0aGUgXGZCU0NSRUVOXGZQCitzdHJ1Y3R1cmUuCisuUFAKK0V2ZW4gdGhpcyBpcyBub3QgZW5vdWdoIHRvIG1ha2UgYSB0aHJlYWQtc2FmZSBhcHBsaWNhdGlvbiB1c2luZyBjdXJzZXMuCitBIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uIHdvdWxkIGJlIGV4cGVjdGVkIHRvIGhhdmUgdGhyZWFkcyB1cGRhdGluZworc2VwYXJhdGUgd2luZG93cyAod2l0aGluIHRoZSBzYW1lIGRldmljZSksCitvciB1cGRhdGluZyBvbiBzZXBhcmF0ZSBzY3JlZW5zIChvbiBkaWZmZXJlbnQgZGV2aWNlcykuCitBbHNvLCBhIGZldyBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgY29uc2lkZXJlZCB3cml0YWJsZSBieSBzb21lCithcHBsaWNhdGlvbnMuCitUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIGFkZHJlc3MgdGhlc2Ugc3BlY2lhbCBzaXR1YXRpb25zLgorLlBQCitUaGUgRVNDREVMQVkgYW5kIFRBQlNJWkUgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbW9kaWZpZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMuCitUbyBtb2RpZnkgdGhlbSBpbiBhbnkgY29uZmlndXJhdGlvbiwKK3VzZSB0aGUgXGZCc2V0X2VzY2RlbGF5XGZQIG9yIFxmQnNldF90YWJzaXplXGZQIGZ1bmN0aW9ucy4KK090aGVyIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG5vdCBtb2RpZmlhYmxlLgorLlBQCitUaGUgXGZCdXNlX3dpbmRvd1xmUCBhbmQgXGZCdXNlX3NjcmVlblxmUCBmdW5jdGlvbnMgcHJvdmlkZSBjb2Fyc2UKK2dyYW51bGFyaXR5IG11dGV4ZXMgZm9yIHRoZWlyIHJlc3BlY3RpdmUgXGZCV0lORE9XXGZQIGFuZCBcZkJTQ1JFRU5cZlAKK3BhcmFtZXRlcnMsIGFuZCBjYWxsIGEgdXNlci1zdXBwbGllZCBmdW5jdGlvbiwKK3Bhc3NpbmcgaXQgYSBcZklkYXRhXGZQIHBhcmFtZXRlciwKK2FuZCByZXR1cm5pbmcgdGhlIHZhbHVlIGZyb20gdGhlIHVzZXItc3VwcGxpZWQgZnVuY3Rpb24gdG8gdGhlIGFwcGxpY2F0aW9uLgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlNTIFVTQUdFCitBbGwgb2YgdGhlIG5jdXJzZXMgbGlicmFyeSBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGxvY2FsZSBpcyBub3QKK2FsdGVyZWQgZHVyaW5nIG9wZXJhdGlvbi4KK0luIGFkZGl0aW9uLAordGhleSB1c2UgZGF0YSB3aGljaCBpcyBtYWludGFpbmVkIHdpdGhpbiBhIGhpZXJhcmNoeSBvZiBzY29wZXMuCisuUlMKKy5UUCAzCistCitnbG9iYWwgZGF0YSwgZS5nLiwgdXNlZCBpbiB0aGUgbG93LWxldmVsIHRlcm1pbmZvIG9yIHRlcm1jYXAgaW50ZXJmYWNlcy4KKy5UUCAzCistCit0ZXJtaW5hbCBkYXRhLCBlLmcuLCBhc3NvY2lhdGVkIHdpdGggYSBjYWxsIHRvIFxmSXNldF9jdXJ0ZXJtXGZQLgorVGhlIHRlcm1pbmFsIGRhdGEgYXJlIGluaXRpYWxpemVkIHdoZW4gc2NyZWVucyBhcmUgY3JlYXRlZC4KKy5UUCAzCistCitzY3JlZW4gZGF0YSwgZS5nLiwgYXNzb2NpYXRlZCB3aXRoIGEgY2FsbCB0byBcZkluZXd0ZXJtXGZQIG9yIFxmSWluaXRzY3JcZlAuCisuVFAgMworLQord2luZG93IGRhdGEsIGUuZy4sIGFzc29jaWF0ZWQgd2l0aCBhIGNhbGwgdG8gXGZJbmV3d2luXGZQIG9yIFxmSXN1YndpblxmUC4KK1dpbmRvd3MgYXJlIGFzc29jaWF0ZWQgd2l0aCBzY3JlZW5zLgorUGFkcyBhcmUgbm90IG5lY2Vzc2FyaWx5IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NyZWVuLgorLklQCitNb3N0IGN1cnNlcyBhcHBsaWNhdGlvbnMgb3BlcmF0ZSBvbiBvbmUgb3IgbW9yZSB3aW5kb3dzIHdpdGhpbiBhIHNpbmdsZSBzY3JlZW4uCisuVFAgMworLQorcmVlbnRyYW50LCBpLmUuLCBpdCB1c2VzIG9ubHkgdGhlIGRhdGEgcGFzc2VkIGFzIHBhcmFtZXRlcnMuCisuUkUKKy5QUAorVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2NvcGUgb2YgZGF0YSB1c2VkIGZvciBlYWNoIHN5bWJvbCBpbiB0aGUKK25jdXJzZXMgbGlicmFyeSB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCB0aHJlYWRpbmc6CisuVFMKK2NlbnRlciB0YWIoLyk7CitsIGwKK2wgbCAuCitTeW1ib2wvU2NvcGUKKz0KK0JDL2dsb2JhbAorQ09MT1JTL3NjcmVlbiAocmVhZG9ubHkpCitDT0xPUl9QQUlSL3JlZW50cmFudAorQ09MT1JfUEFJUlMvc2NyZWVuIChyZWFkb25seSkKK0NPTFMvc2NyZWVuIChyZWFkb25seSkKK0VTQ0RFTEFZL3NjcmVlbiAocmVhZG9ubHksIHNlZSBcZklzZXRfZXNjZGVsYXlcZlApCitMSU5FUy9zY3JlZW4gKHJlYWRvbmx5KQorUEFJUl9OVU1CRVIvcmVlbnRyYW50CitQQy9nbG9iYWwKK1NQL2dsb2JhbAorVEFCU0laRS9zY3JlZW4gKHJlYWRvbmx5KQorVVAvZ2xvYmFsCithY3NfbWFwL3NjcmVlbiAocmVhZG9ubHkpCithZGRfd2NoL3dpbmRvdyAoc3Rkc2NyKQorYWRkX3djaG5zdHIvd2luZG93IChzdGRzY3IpCithZGRfd2Noc3RyL3dpbmRvdyAoc3Rkc2NyKQorYWRkY2gvd2luZG93IChzdGRzY3IpCithZGRjaG5zdHIvd2luZG93IChzdGRzY3IpCithZGRjaHN0ci93aW5kb3cgKHN0ZHNjcikKK2FkZG5zdHIvd2luZG93IChzdGRzY3IpCithZGRud3N0ci93aW5kb3cgKHN0ZHNjcikKK2FkZHN0ci93aW5kb3cgKHN0ZHNjcikKK2FkZHdzdHIvd2luZG93IChzdGRzY3IpCithc3N1bWVfZGVmYXVsdF9jb2xvcnMvc2NyZWVuCithdHRyX2dldC93aW5kb3cgKHN0ZHNjcikKK2F0dHJfb2ZmL3dpbmRvdyAoc3Rkc2NyKQorYXR0cl9vbi93aW5kb3cgKHN0ZHNjcikKK2F0dHJfc2V0L3dpbmRvdyAoc3Rkc2NyKQorYXR0cm9mZi93aW5kb3cgKHN0ZHNjcikKK2F0dHJvbi93aW5kb3cgKHN0ZHNjcikKK2F0dHJzZXQvd2luZG93IChzdGRzY3IpCitiYXVkcmF0ZS9zY3JlZW4KK2JlZXAvc2NyZWVuCitia2dkL3dpbmRvdyAoc3Rkc2NyKQorYmtnZHNldC93aW5kb3cgKHN0ZHNjcikKK2JrZ3JuZC93aW5kb3cgKHN0ZHNjcikKK2JrZ3JuZHNldC93aW5kb3cgKHN0ZHNjcikKK2Jvb2xjb2Rlcy9nbG9iYWwgKHJlYWRvbmx5KQorYm9vbGZuYW1lcy9nbG9iYWwgKHJlYWRvbmx5KQorYm9vbG5hbWVzL2dsb2JhbCAocmVhZG9ubHkpCitib3JkZXIvd2luZG93IChzdGRzY3IpCitib3JkZXJfc2V0L3dpbmRvdyAoc3Rkc2NyKQorYm94L3dpbmRvdyAoc3Rkc2NyKQorYm94X3NldC93aW5kb3cgKHN0ZHNjcikKK2Nhbl9jaGFuZ2VfY29sb3IvdGVybWluYWwKK2NicmVhay9zY3JlZW4KK2NoZ2F0L3dpbmRvdyAoc3Rkc2NyKQorY2xlYXIvd2luZG93IChzdGRzY3IpCitjbGVhcm9rL3dpbmRvdworY2xydG9ib3Qvd2luZG93IChzdGRzY3IpCitjbHJ0b2VvbC93aW5kb3cgKHN0ZHNjcikKK2NvbG9yX2NvbnRlbnQvc2NyZWVuCitjb2xvcl9zZXQvd2luZG93IChzdGRzY3IpCitjb3B5d2luL3dpbmRvdyBsb2Nrcyhzb3VyY2UsIHRhcmdldCkKK2N1cl90ZXJtL3Rlcm1pbmFsCitjdXJzX3NldC9zY3JlZW4KK2N1cnNjci9zY3JlZW4gKHJlYWRvbmx5KQorY3Vyc2VzX3ZlcnNpb24vZ2xvYmFsIChyZWFkb25seSkKK2RlZl9wcm9nX21vZGUvdGVybWluYWwKK2RlZl9zaGVsbF9tb2RlL3Rlcm1pbmFsCitkZWZpbmVfa2V5L3NjcmVlbgorZGVsX2N1cnRlcm0vc2NyZWVuCitkZWxheV9vdXRwdXQvc2NyZWVuCitkZWxjaC93aW5kb3cgKHN0ZHNjcikKK2RlbGV0ZWxuL3dpbmRvdyAoc3Rkc2NyKQorZGVsc2NyZWVuL2dsb2JhbCBsb2NrcyhzY3JlZW5saXN0LCBzY3JlZW4pCitkZWx3aW4vZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QpCitkZXJ3aW4vc2NyZWVuCitkb3VwZGF0ZS9zY3JlZW4KK2R1cHdpbi9zY3JlZW4gbG9ja3Mod2luZG93KQorZWNoby9zY3JlZW4KK2VjaG9fd2NoYXIvd2luZG93IChzdGRzY3IpCitlY2hvY2hhci93aW5kb3cgKHN0ZHNjcikKK2VuZHdpbi9zY3JlZW4KK2VyYXNlL3dpbmRvdyAoc3Rkc2NyKQorZXJhc2VjaGFyL3dpbmRvdyAoc3Rkc2NyKQorZXJhc2V3Y2hhci93aW5kb3cgKHN0ZHNjcikKK2ZpbHRlci9nbG9iYWwKK2ZsYXNoL3Rlcm1pbmFsCitmbHVzaGlucC9zY3JlZW4KK2dldF93Y2gvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCitnZXRfd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldGF0dHJzL3dpbmRvdworZ2V0YmVneC93aW5kb3cKK2dldGJlZ3kvd2luZG93CitnZXRia2dkL3dpbmRvdworZ2V0Ymtncm5kL3dpbmRvdworZ2V0Y2NoYXIvcmVlbnRyYW50CitnZXRjaC9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldGN1cngvd2luZG93CitnZXRjdXJ5L3dpbmRvdworZ2V0bWF4eC93aW5kb3cKK2dldG1heHkvd2luZG93CitnZXRtb3VzZS9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldG5fd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldG5zdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCitnZXRwYXJ4L3dpbmRvdworZ2V0cGFyeS93aW5kb3cKK2dldHN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldHdpbi9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2hhbGZkZWxheS9zY3JlZW4KK2hhc19jb2xvcnMvdGVybWluYWwKK2hhc19pYy90ZXJtaW5hbAoraGFzX2lsL3Rlcm1pbmFsCitoYXNfa2V5L3NjcmVlbgoraGxpbmUvd2luZG93IChzdGRzY3IpCitobGluZV9zZXQvd2luZG93IChzdGRzY3IpCitpZGNvay93aW5kb3cKK2lkbG9rL3dpbmRvdworaW1tZWRvay93aW5kb3cKK2luX3djaC93aW5kb3cgKHN0ZHNjcikKK2luX3djaG5zdHIvd2luZG93IChzdGRzY3IpCitpbl93Y2hzdHIvd2luZG93IChzdGRzY3IpCitpbmNoL3dpbmRvdyAoc3Rkc2NyKQoraW5jaG5zdHIvd2luZG93IChzdGRzY3IpCitpbmNoc3RyL3dpbmRvdyAoc3Rkc2NyKQoraW5pdF9jb2xvci9zY3JlZW4KK2luaXRfcGFpci9zY3JlZW4KK2luaXRzY3IvZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QpCitpbm5zdHIvd2luZG93IChzdGRzY3IpCitpbm53c3RyL3dpbmRvdyAoc3Rkc2NyKQoraW5zX253c3RyL3dpbmRvdyAoc3Rkc2NyKQoraW5zX3djaC93aW5kb3cgKHN0ZHNjcikKK2luc193c3RyL3dpbmRvdyAoc3Rkc2NyKQoraW5zY2gvd2luZG93IChzdGRzY3IpCitpbnNkZWxsbi93aW5kb3cgKHN0ZHNjcikKK2luc2VydGxuL3dpbmRvdyAoc3Rkc2NyKQoraW5zbnN0ci93aW5kb3cgKHN0ZHNjcikKK2luc3N0ci93aW5kb3cgKHN0ZHNjcikKK2luc3RyL3dpbmRvdyAoc3Rkc2NyKQoraW50cmZsdXNoL3Rlcm1pbmFsCitpbndzdHIvd2luZG93IChzdGRzY3IpCitpc19jbGVhcmVkL3dpbmRvdworaXNfaWRjb2svd2luZG93Citpc19pZGxvay93aW5kb3cKK2lzX2ltbWVkb2svd2luZG93Citpc19rZXlwYWQvd2luZG93Citpc19sZWF2ZW9rL3dpbmRvdworaXNfbGluZXRvdWNoZWQvd2luZG93Citpc19ub2RlbGF5L3dpbmRvdworaXNfbm90aW1lb3V0L3dpbmRvdworaXNfc2Nyb2xsb2svd2luZG93Citpc19zeW5jb2svd2luZG93Citpc190ZXJtX3Jlc2l6ZWQvdGVybWluYWwKK2lzX3dpbnRvdWNoZWQvd2luZG93Citpc2VuZHdpbi9zY3JlZW4KK2tleV9kZWZpbmVkL3NjcmVlbgora2V5X25hbWUvZ2xvYmFsIChzdGF0aWMgZGF0YSkKK2tleWJvdW5kL3NjcmVlbgora2V5bmFtZS9nbG9iYWwgKHN0YXRpYyBkYXRhKQora2V5b2svc2NyZWVuCitrZXlwYWQvd2luZG93CitraWxsY2hhci90ZXJtaW5hbAora2lsbHdjaGFyL3Rlcm1pbmFsCitsZWF2ZW9rL3dpbmRvdworbG9uZ25hbWUvc2NyZWVuCittY3ByaW50L3Rlcm1pbmFsCittZXRhL3NjcmVlbgorbW91c2VfdHJhZm8vd2luZG93IChzdGRzY3IpCittb3VzZWludGVydmFsL3NjcmVlbgorbW91c2VtYXNrL3NjcmVlbgorbW92ZS93aW5kb3cgKHN0ZHNjcikKK212YWRkX3djaC93aW5kb3cgKHN0ZHNjcikKK212YWRkX3djaG5zdHIvd2luZG93IChzdGRzY3IpCittdmFkZF93Y2hzdHIvd2luZG93IChzdGRzY3IpCittdmFkZGNoL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGRjaG5zdHIvd2luZG93IChzdGRzY3IpCittdmFkZGNoc3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGRuc3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGRud3N0ci93aW5kb3cgKHN0ZHNjcikKK212YWRkc3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGR3c3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZjaGdhdC93aW5kb3cgKHN0ZHNjcikKK212Y3VyL3NjcmVlbgorbXZkZWxjaC93aW5kb3cgKHN0ZHNjcikKK212ZGVyd2luL3dpbmRvdyAoc3Rkc2NyKQorbXZnZXRfd2NoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZnZXRfd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212Z2V0Y2gvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdmdldG5fd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212Z2V0bnN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212Z2V0c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZobGluZS93aW5kb3cgKHN0ZHNjcikKK212aGxpbmVfc2V0L3dpbmRvdyAoc3Rkc2NyKQorbXZpbl93Y2gvd2luZG93IChzdGRzY3IpCittdmluX3djaG5zdHIvd2luZG93IChzdGRzY3IpCittdmluX3djaHN0ci93aW5kb3cgKHN0ZHNjcikKK212aW5jaC93aW5kb3cgKHN0ZHNjcikKK212aW5jaG5zdHIvd2luZG93IChzdGRzY3IpCittdmluY2hzdHIvd2luZG93IChzdGRzY3IpCittdmlubnN0ci93aW5kb3cgKHN0ZHNjcikKK212aW5ud3N0ci93aW5kb3cgKHN0ZHNjcikKK212aW5zX253c3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZpbnNfd2NoL3dpbmRvdyAoc3Rkc2NyKQorbXZpbnNfd3N0ci93aW5kb3cgKHN0ZHNjcikKK212aW5zY2gvd2luZG93IChzdGRzY3IpCittdmluc25zdHIvd2luZG93IChzdGRzY3IpCittdmluc3N0ci93aW5kb3cgKHN0ZHNjcikKK212aW5zdHIvd2luZG93IChzdGRzY3IpCittdmlud3N0ci93aW5kb3cgKHN0ZHNjcikKK212cHJpbnR3L3dpbmRvdyAoc3Rkc2NyKQorbXZzY2Fudy9zY3JlZW4KK212dmxpbmUvd2luZG93IChzdGRzY3IpCittdnZsaW5lX3NldC93aW5kb3cgKHN0ZHNjcikKK212d2FkZF93Y2gvd2luZG93CittdndhZGRfd2NobnN0ci93aW5kb3cKK212d2FkZF93Y2hzdHIvd2luZG93CittdndhZGRjaC93aW5kb3cKK212d2FkZGNobnN0ci93aW5kb3cKK212d2FkZGNoc3RyL3dpbmRvdworbXZ3YWRkbnN0ci93aW5kb3cKK212d2FkZG53c3RyL3dpbmRvdworbXZ3YWRkc3RyL3dpbmRvdworbXZ3YWRkd3N0ci93aW5kb3cKK212d2NoZ2F0L3dpbmRvdworbXZ3ZGVsY2gvd2luZG93CittdndnZXRfd2NoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZ3Z2V0X3dzdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdndnZXRjaC9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212d2dldG5fd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212d2dldG5zdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdndnZXRzdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdndobGluZS93aW5kb3cKK212d2hsaW5lX3NldC93aW5kb3cKK212d2luL3dpbmRvdworbXZ3aW5fd2NoL3dpbmRvdworbXZ3aW5fd2NobnN0ci93aW5kb3cKK212d2luX3djaHN0ci93aW5kb3cKK212d2luY2gvd2luZG93CittdndpbmNobnN0ci93aW5kb3cKK212d2luY2hzdHIvd2luZG93Cittdndpbm5zdHIvd2luZG93Cittdndpbm53c3RyL3dpbmRvdworbXZ3aW5zX253c3RyL3dpbmRvdworbXZ3aW5zX3djaC93aW5kb3cKK212d2luc193c3RyL3dpbmRvdworbXZ3aW5zY2gvd2luZG93CittdndpbnNuc3RyL3dpbmRvdworbXZ3aW5zc3RyL3dpbmRvdworbXZ3aW5zdHIvd2luZG93CittdndpbndzdHIvd2luZG93CittdndwcmludHcvd2luZG93CittdndzY2Fudy9zY3JlZW4KK212d3ZsaW5lL3dpbmRvdworbXZ3dmxpbmVfc2V0L3dpbmRvdworbmFwbXMvcmVlbnRyYW50CituZXdwYWQvZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QpCituZXdzY3Ivc2NyZWVuIChyZWFkb25seSkKK25ld3Rlcm0vZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QpCituZXd3aW4vZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QpCitubC9zY3JlZW4KK25vY2JyZWFrL3NjcmVlbgorbm9kZWxheS93aW5kb3cKK25vZWNoby9zY3JlZW4KK25vZmlsdGVyL2dsb2JhbAorbm9ubC9zY3JlZW4KK25vcWlmbHVzaC90ZXJtaW5hbAorbm9yYXcvc2NyZWVuCitub3RpbWVvdXQvd2luZG93CitudW1jb2Rlcy9nbG9iYWwgKHJlYWRvbmx5KQorbnVtZm5hbWVzL2dsb2JhbCAocmVhZG9ubHkpCitudW1uYW1lcy9nbG9iYWwgKHJlYWRvbmx5KQorb3NwZWVkL2dsb2JhbAorb3ZlcmxheS93aW5kb3cgbG9ja3Moc291cmNlLCB0YXJnZXQpCitvdmVyd3JpdGUvd2luZG93IGxvY2tzKHNvdXJjZSwgdGFyZ2V0KQorcGFpcl9jb250ZW50L3NjcmVlbgorcGVjaG9fd2NoYXIvc2NyZWVuCitwZWNob2NoYXIvc2NyZWVuCitwbm91dHJlZnJlc2gvc2NyZWVuCitwcmVmcmVzaC9zY3JlZW4KK3ByaW50dy93aW5kb3cKK3B1dHAvZ2xvYmFsCitwdXR3aW4vd2luZG93CitxaWZsdXNoL3Rlcm1pbmFsCityYXcvc2NyZWVuCityZWRyYXd3aW4vd2luZG93CityZWZyZXNoL3NjcmVlbgorcmVzZXRfcHJvZ19tb2RlL3NjcmVlbgorcmVzZXRfc2hlbGxfbW9kZS9zY3JlZW4KK3Jlc2V0dHkvdGVybWluYWwKK3Jlc2l6ZV90ZXJtL3NjcmVlbiBsb2Nrcyh3aW5kb3dsaXN0KQorcmVzaXpldGVybS9zY3JlZW4KK3Jlc3RhcnR0ZXJtL3NjcmVlbgorcmlwb2ZmbGluZS9nbG9iYWwgKHN0YXRpYyBkYXRhKQorc2F2ZXR0eS90ZXJtaW5hbAorc2Nhbncvc2NyZWVuCitzY3JfZHVtcC9zY3JlZW4KK3Njcl9pbml0L3NjcmVlbgorc2NyX3Jlc3RvcmUvc2NyZWVuCitzY3Jfc2V0L3NjcmVlbgorc2NybC93aW5kb3cgKHN0ZHNjcikKK3Njcm9sbC93aW5kb3cKK3Njcm9sbG9rL3dpbmRvdworc2V0X2N1cnRlcm0vc2NyZWVuCitzZXRfZXNjZGVsYXkvc2NyZWVuCitzZXRfdGFic2l6ZS9zY3JlZW4KK3NldF90ZXJtL2dsb2JhbCBsb2NrcyhzY3JlZW5saXN0LCBzY3JlZW4pCitzZXRjY2hhci9yZWVudHJhbnQKK3NldHNjcnJlZy93aW5kb3cgKHN0ZHNjcikKK3NldHVwdGVybS9nbG9iYWwKK3Nsa19hdHRyL3NjcmVlbgorc2xrX2F0dHJfb2ZmL3NjcmVlbgorc2xrX2F0dHJfb24vc2NyZWVuCitzbGtfYXR0cl9zZXQvc2NyZWVuCitzbGtfYXR0cm9mZi9zY3JlZW4KK3Nsa19hdHRyb24vc2NyZWVuCitzbGtfYXR0cnNldC9zY3JlZW4KK3Nsa19jbGVhci9zY3JlZW4KK3Nsa19jb2xvci9zY3JlZW4KK3Nsa19pbml0L3NjcmVlbgorc2xrX2xhYmVsL3NjcmVlbgorc2xrX25vdXRyZWZyZXNoL3NjcmVlbgorc2xrX3JlZnJlc2gvc2NyZWVuCitzbGtfcmVzdG9yZS9zY3JlZW4KK3Nsa19zZXQvc2NyZWVuCitzbGtfdG91Y2gvc2NyZWVuCitzbGtfd3NldC9zY3JlZW4KK3N0YW5kZW5kL3dpbmRvdworc3RhbmRvdXQvd2luZG93CitzdGFydF9jb2xvci9zY3JlZW4KK3N0ZHNjci9zY3JlZW4gKHJlYWRvbmx5KQorc3RyY29kZXMvZ2xvYmFsIChyZWFkb25seSkKK3N0cmZuYW1lcy9nbG9iYWwgKHJlYWRvbmx5KQorc3RybmFtZXMvZ2xvYmFsIChyZWFkb25seSkKK3N1YnBhZC93aW5kb3cKK3N1Yndpbi93aW5kb3cKK3N5bmNvay93aW5kb3cKK3Rlcm1fYXR0cnMvc2NyZWVuCit0ZXJtYXR0cnMvc2NyZWVuCit0ZXJtbmFtZS90ZXJtaW5hbAordGdldGVudC9nbG9iYWwKK3RnZXRmbGFnL2dsb2JhbAordGdldG51bS9nbG9iYWwKK3RnZXRzdHIvZ2xvYmFsCit0Z290by9nbG9iYWwKK3RpZ2V0ZmxhZy90ZXJtaW5hbAordGlnZXRudW0vdGVybWluYWwKK3RpZ2V0c3RyL3Rlcm1pbmFsCit0aW1lb3V0L3dpbmRvdyAoc3Rkc2NyKQordG91Y2hsaW5lL3dpbmRvdwordG91Y2h3aW4vd2luZG93Cit0cGFybS9nbG9iYWwgKHN0YXRpYyBkYXRhKQordHB1dHMvc2NyZWVuCit0cmFjZS9nbG9iYWwgKHN0YXRpYyBkYXRhKQordHR5dHlwZS9zY3JlZW4gKHJlYWRvbmx5KQordHlwZWFoZWFkL3NjcmVlbgordW5jdHJsL3NjcmVlbgordW5nZXRfd2NoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQordW5nZXRjaC9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK3VuZ2V0bW91c2Uvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCit1bnRvdWNod2luL3dpbmRvdwordXNlX2RlZmF1bHRfY29sb3JzL3NjcmVlbgordXNlX2Vudi9nbG9iYWwgKHN0YXRpYyBkYXRhKQordXNlX2V4dGVuZGVkX25hbWVzL2dsb2JhbCAoc3RhdGljIGRhdGEpCit1c2VfbGVnYWN5X2NvZGluZy9zY3JlZW4KK3VzZV9zY3JlZW4vZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QsIHNjcmVlbikKK3VzZV93aW5kb3cvZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QsIHdpbmRvdykKK3ZpZF9hdHRyL3NjcmVlbgordmlkX3B1dHMvc2NyZWVuCit2aWRhdHRyL3NjcmVlbgordmlkcHV0cy9zY3JlZW4KK3ZsaW5lL3dpbmRvdyAoc3Rkc2NyKQordmxpbmVfc2V0L3dpbmRvdyAoc3Rkc2NyKQordndfcHJpbnR3L3dpbmRvdwordndfc2Nhbncvc2NyZWVuCit2d3ByaW50dy93aW5kb3cKK3Z3c2Nhbncvc2NyZWVuCit3YWRkX3djaC93aW5kb3cKK3dhZGRfd2NobnN0ci93aW5kb3cKK3dhZGRfd2Noc3RyL3dpbmRvdword2FkZGNoL3dpbmRvdword2FkZGNobnN0ci93aW5kb3cKK3dhZGRjaHN0ci93aW5kb3cKK3dhZGRuc3RyL3dpbmRvdword2FkZG53c3RyL3dpbmRvdword2FkZHN0ci93aW5kb3cKK3dhZGR3c3RyL3dpbmRvdword2F0dHJfZ2V0L3dpbmRvdword2F0dHJfb2ZmL3dpbmRvdword2F0dHJfb24vd2luZG93Cit3YXR0cl9zZXQvd2luZG93Cit3YXR0cm9mZi93aW5kb3cKK3dhdHRyb24vd2luZG93Cit3YXR0cnNldC93aW5kb3cKK3dia2dkL3dpbmRvdword2JrZ2RzZXQvd2luZG93Cit3Ymtncm5kL3dpbmRvdword2JrZ3JuZHNldC93aW5kb3cKK3dib3JkZXIvd2luZG93Cit3Ym9yZGVyX3NldC93aW5kb3cKK3djaGdhdC93aW5kb3cKK3djbGVhci93aW5kb3cKK3djbHJ0b2JvdC93aW5kb3cKK3djbHJ0b2VvbC93aW5kb3cKK3djb2xvcl9zZXQvd2luZG93Cit3Y3Vyc3luY3VwL3NjcmVlbiAoYWZmZWN0cyB3aW5kb3cgcGx1cyBwYXJlbnRzKQord2RlbGNoL3dpbmRvdword2RlbGV0ZWxuL3dpbmRvdword2VjaG9fd2NoYXIvd2luZG93Cit3ZWNob2NoYXIvd2luZG93Cit3ZW5jbG9zZS93aW5kb3cKK3dlcmFzZS93aW5kb3cKK3dnZXRfd2NoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQord2dldF93c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQord2dldGJrZ3JuZC93aW5kb3cKK3dnZXRjaC9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK3dnZXRuX3dzdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCit3Z2V0bnN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK3dnZXRwYXJlbnQvd2luZG93Cit3Z2V0c2NycmVnL3dpbmRvdword2dldHN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK3dobGluZS93aW5kb3cKK3dobGluZV9zZXQvd2luZG93Cit3aW5fd2NoL3dpbmRvdword2luX3djaG5zdHIvd2luZG93Cit3aW5fd2Noc3RyL3dpbmRvdword2luY2gvd2luZG93Cit3aW5jaG5zdHIvd2luZG93Cit3aW5jaHN0ci93aW5kb3cKK3dpbm5zdHIvd2luZG93Cit3aW5ud3N0ci93aW5kb3cKK3dpbnNfbndzdHIvd2luZG93Cit3aW5zX3djaC93aW5kb3cKK3dpbnNfd3N0ci93aW5kb3cKK3dpbnNjaC93aW5kb3cKK3dpbnNkZWxsbi93aW5kb3cKK3dpbnNlcnRsbi93aW5kb3cKK3dpbnNuc3RyL3dpbmRvdword2luc3N0ci93aW5kb3cKK3dpbnN0ci93aW5kb3cKK3dpbndzdHIvd2luZG93Cit3bW91c2VfdHJhZm8vd2luZG93Cit3bW92ZS93aW5kb3cKK3dub3V0cmVmcmVzaC9zY3JlZW4KK3dwcmludHcvd2luZG93Cit3cmVkcmF3bG4vd2luZG93Cit3cmVmcmVzaC9zY3JlZW4KK3dyZXNpemUvd2luZG93IGxvY2tzKHdpbmRvd2xpc3QpCit3c2Nhbncvc2NyZWVuCit3c2NybC93aW5kb3cKK3dzZXRzY3JyZWcvd2luZG93Cit3c3RhbmRlbmQvd2luZG93Cit3c3RhbmRvdXQvd2luZG93Cit3c3luY2Rvd24vc2NyZWVuIChhZmZlY3RzIHdpbmRvdyBwbHVzIHBhcmVudHMpCit3c3luY3VwL3NjcmVlbiAoYWZmZWN0cyB3aW5kb3cgcGx1cyBwYXJlbnRzKQord3RpbWVvdXQvd2luZG93Cit3dG91Y2hsbi93aW5kb3cKK3d1bmN0cmwvZ2xvYmFsIChzdGF0aWMgZGF0YSkKK3d2bGluZS93aW5kb3cKK3d2bGluZV9zZXQvd2luZG93CisuVEUKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIGZ1bmN0aW9ucyBhbGwgcmV0dXJuIFRSVUUgb3IgRkFMU0UsIGV4Y2VwdCBhcyBub3RlZC4KKy5TSCBOT1RFUworQm90aCBhIG1hY3JvIGFuZCBhIGZ1bmN0aW9uIGFyZSBwcm92aWRlZCBmb3IgZWFjaCBuYW1lLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4KK1RoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIG5jdXJzZXMgZXh0ZW5zaW9ucworYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19vcGFxdWVcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX3RvdWNoLjN4IGIvbWFuL2N1cnNfdG91Y2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkMDdiYwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9jdXJzX3RvdWNoLjN4CkBAIC0wLDAgKzEsMTE2IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfdG91Y2guM3gsdiAxLjExIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc190b3VjaCAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQnRvdWNod2luXGZSLAorXGZCdG91Y2hsaW5lXGZSLAorXGZCdW50b3VjaHdpblxmUiwKK1xmQnd0b3VjaGxuXGZSLAorXGZCaXNfbGluZXRvdWNoZWRcZlIsCitcZkJpc193aW50b3VjaGVkXGZSIC0gXGZCY3Vyc2VzXGZSIHJlZnJlc2ggY29udHJvbCByb3V0aW5lcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCitcZkJpbnQgdG91Y2h3aW4oV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgdG91Y2hsaW5lKFdJTkRPVyAqd2luLCBpbnQgc3RhcnQsIGludCBjb3VudCk7XGZSCisuYnIKK1xmQmludCB1bnRvdWNod2luKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IHd0b3VjaGxuKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IG4sIGludCBjaGFuZ2VkKTtcZlIKKy5icgorXGZCYm9vbCBpc19saW5ldG91Y2hlZChXSU5ET1cgKndpbiwgaW50IGxpbmUpO1xmUgorLmJyCitcZkJib29sIGlzX3dpbnRvdWNoZWQoV0lORE9XICp3aW4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJ0b3VjaHdpblxmUiBhbmQgXGZCdG91Y2hsaW5lXGZSIHJvdXRpbmVzIHRocm93IGF3YXkgYWxsCitvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcGFydHMgb2YgdGhlIHdpbmRvdyBoYXZlIGJlZW4KK3RvdWNoZWQsIGJ5IHByZXRlbmRpbmcgdGhhdCB0aGUgZW50aXJlIHdpbmRvdyBoYXMgYmVlbiBkcmF3biBvbi4gIFRoaXMKK2lzIHNvbWV0aW1lcyBuZWNlc3Nhcnkgd2hlbiB1c2luZyBvdmVybGFwcGluZyB3aW5kb3dzLCBzaW5jZSBhIGNoYW5nZQordG8gb25lIHdpbmRvdyBhZmZlY3RzIHRoZSBvdGhlciB3aW5kb3csIGJ1dCB0aGUgcmVjb3JkcyBvZiB3aGljaCBsaW5lcworaGF2ZSBiZWVuIGNoYW5nZWQgaW4gdGhlIG90aGVyIHdpbmRvdyBkbyBub3QgcmVmbGVjdCB0aGUgY2hhbmdlLiAgVGhlCityb3V0aW5lIFxmQnRvdWNobGluZVxmUiBvbmx5IHByZXRlbmRzIHRoYXQgXGZJY291bnRcZlIgbGluZXMgaGF2ZSBiZWVuCitjaGFuZ2VkLCBiZWdpbm5pbmcgd2l0aCBsaW5lIFxmSXN0YXJ0XGZSLgorLlBQCitUaGUgXGZCdW50b3VjaHdpblxmUiByb3V0aW5lIG1hcmtzIGFsbCBsaW5lcyBpbiB0aGUgd2luZG93IGFzIHVuY2hhbmdlZCBzaW5jZQordGhlIGxhc3QgY2FsbCB0byBcZkJ3cmVmcmVzaFxmUi4KKy5QUAorVGhlIFxmQnd0b3VjaGxuXGZSIHJvdXRpbmUgbWFrZXMgXGZJblxmUiBsaW5lcyBpbiB0aGUgd2luZG93LCBzdGFydGluZworYXQgbGluZSBcZkl5XGZSLCBsb29rIGFzIGlmIHRoZXkgaGF2ZSAoXGZJY2hhbmdlZFxmUlxmQj0xXGZSKSBvciBoYXZlCitub3QgKFxmSWNoYW5nZWRcZlJcZkI9MFxmUikgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8KK1xmQndyZWZyZXNoXGZSLgorLlBQCitUaGUgXGZCaXNfbGluZXRvdWNoZWRcZlIgYW5kIFxmQmlzX3dpbnRvdWNoZWRcZlIgcm91dGluZXMgcmV0dXJuCitcZkJUUlVFXGZSIGlmIHRoZSBzcGVjaWZpZWQgbGluZS93aW5kb3cgd2FzIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0CitjYWxsIHRvIFxmQndyZWZyZXNoXGZSOyBvdGhlcndpc2UgdGhleSByZXR1cm4gXGZCRkFMU0VcZlIuICBJbgorYWRkaXRpb24sIFxmQmlzX2xpbmV0b3VjaGVkXGZSIHJldHVybnMgXGZCRVJSXGZSIGlmIFxmSWxpbmVcZlIgaXMgbm90Cit2YWxpZCBmb3IgdGhlIGdpdmVuIHdpbmRvdy4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgYW4gaW50ZWdlciB2YWx1ZQorb3RoZXIgdGhhbiBcZkJFUlJcZlIgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlCitwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uCisuUlMKKy5UUCA1CitcZkJpc19saW5ldG91Y2hlZFxmUAorcmV0dXJucyBhbiBlcnJvciAKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgdGhlIGxpbmUgbnVtYmVyIGlzIG91dHNpZGUgdGhlIHdpbmRvdy4KK05vdGUgdGhhdCBFUlIgaXMgZGlzdGluY3QgZnJvbSBUUlVFIGFuZCBGQUxTRSwgd2hpY2ggYXJlIHRoZSBub3JtYWwgcmV0dXJuIHZhbHVlcyBvZiB0aGlzIGZ1bmN0aW9uLgorLlRQIDUKK1xmQnd0b3VjaGxuXGZQCityZXR1cm5zIGFuIGVycm9yIAoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiB0aGUgbGluZSBudW1iZXIgaXMgb3V0c2lkZSB0aGUgd2luZG93LgorLlJFCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuCisuUFAKK1NvbWUgaGlzdG9yaWMgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBoYWQsIGFzIGFuIHVuZG9jdW1lbnRlZCBmZWF0dXJlLCB0aGUKK2FiaWxpdHkgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgXGZCY2xlYXJvayguLi4sIDEpXGZSIGJ5IHNheWluZworXGZCdG91Y2h3aW4oc3Rkc2NyKVxmUiBvciBcZkJjbGVhcihzdGRzY3IpXGZSLiAgVGhpcyB3aWxsIG5vdCB3b3JrIHVuZGVyCituY3Vyc2VzLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3dG91Y2hsblxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc190cmFjZS4zeCBiL21hbi9jdXJzX3RyYWNlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzQ5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vY3Vyc190cmFjZS4zeApAQCAtMCwwICsxLDE1MyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3RyYWNlLjN4LHYgMS44IDIwMDcvMDIvMjQgMTc6MzM6NDkgdG9tIEV4cCAkCisuVEggY3Vyc190cmFjZSAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQl90cmFjZWZcZlIsCitcZkJfdHJhY2VkdW1wXGZSLAorXGZCX3RyYWNlYXR0clxmUiwKK1xmQl90cmFjZWF0dHIyXGZSLAorXGZCX25jX3RyYWNlYml0c1xmUiwKK1xmQl90cmFjZWNoYXJcZlIsCitcZkJfdHJhY2VjaHR5cGVcZlIsCitcZkJfdHJhY2VjaHR5cGUyXGZSLAorXGZCX3RyYWNlbW91c2VcZlIsCitcZkJ0cmFjZVxmUiAtIFxmQmN1cnNlc1xmUiBkZWJ1Z2dpbmcgcm91dGluZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCdm9pZCBfdHJhY2VmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTtcZlIKKy5icgorXGZCdm9pZCBfdHJhY2VkdW1wKGNvbnN0IGNoYXIgKmxhYmVsLCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmNoYXIgKl90cmFjZWF0dHIoYXR0cl90IGF0dHIpO1xmUgorLmJyCitcZkJjaGFyICpfdHJhY2VhdHRyMihpbnQgYnVmZmVyLCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJjaGFyICpfbmNfdHJhY2ViaXRzKHZvaWQpO1xmUgorLmJyCitcZkJjaGFyICpfdHJhY2VjaGFyKGludCk7XGZSCisuYnIKK1xmQmNoYXIgKl90cmFjZWNodHlwZShjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJjaGFyICpfdHJhY2VjaHR5cGUyKGludCBidWZmZXIsIGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmNoYXIgKl90cmFjZW1vdXNlKGNvbnN0IE1FVkVOVCAqZXZlbnQpO1xmUgorLmJyCitcZkJ2b2lkIHRyYWNlKGNvbnN0IHVuc2lnbmVkIGludCBwYXJhbSk7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJ0cmFjZVxmUiByb3V0aW5lcyBhcmUgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBuY3Vyc2VzIGxpYnJhcmllcywKK2FzIHdlbGwgYXMgYXBwbGljYXRpb25zIHdoaWNoIHVzZSB0aGUgbmN1cnNlcyBsaWJyYXJpZXMuCitUaGVzZSBmdW5jdGlvbnMgYXJlIG5vcm1hbGx5IGF2YWlsYWJsZSBvbmx5IHdpdGggdGhlIGRlYnVnZ2luZyBsaWJyYXJ5CitcZklsaWJuY3Vyc2VzX2cuYVxmUiwgYnV0IG1heSBiZSBjb21waWxlZCBpbnRvIGFueSBtb2RlbCAoc2hhcmVkLCBzdGF0aWMsCitwcm9maWxlKSBieSBkZWZpbmluZyB0aGUgc3ltYm9sIFxmQlRSQUNFXGZSLgorLlBQCitUaGUgcHJpbmNpcGFsIHBhcnRzIG9mIHRoaXMgaW50ZXJmYWNlIGFyZSB0aGUgXGZCdHJhY2VcZlIgcm91dGluZSB3aGljaAorc2VsZWN0aXZlbHkgZW5hYmxlcyBkaWZmZXJlbnQgdHJhY2luZyBmZWF0dXJlcywgYW5kIHRoZSBcZkJfdHJhY2VmXGZSCityb3V0aW5lIHdoaWNoIHdyaXRlcyBmb3JtYXR0ZWQgZGF0YSB0byB0aGUgXGZJdHJhY2VcZlIgZmlsZS4KKy5QUAorQ2FsbGluZyBcZkJ0cmFjZVxmUiB3aXRoIGEgbm9uemVybyBwYXJhbWV0ZXIgb3BlbnMgdGhlIGZpbGUgXGZCdHJhY2VcZlIKK2luIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3Igb3V0cHV0LiAgVGhlIHBhcmFtZXRlciBpcyBmb3JtZWQgYnkgT1InaW5nCit2YWx1ZXMgZnJvbSB0aGUgbGlzdCBvZiBcZkJUUkFDRV9cZlBcZkl4eHhcZlIgZGVmaW5pdGlvbnMgaW4gXGZCPGN1cnNlcy5oPlxmUi4KK1RoZXNlIGluY2x1ZGU6CisuVFAgNQorVFJBQ0VfRElTQUJMRQordHVybiBvZmYgdHJhY2luZy4KKy5UUCA1CitUUkFDRV9USU1FUwordHJhY2UgdXNlciBhbmQgc3lzdGVtIHRpbWVzIG9mIHVwZGF0ZXMuCisuVFAgNQorVFJBQ0VfVFBVVFMKK3RyYWNlIHRwdXRzIGNhbGxzLgorLlRQIDUKK1RSQUNFX1VQREFURQordHJhY2UgdXBkYXRlIGFjdGlvbnMsIG9sZCAmIG5ldyBzY3JlZW5zLgorLlRQIDUKK1RSQUNFX01PVkUKK3RyYWNlIGN1cnNvciBtb3ZlbWVudCBhbmQgc2Nyb2xsaW5nLgorLlRQIDUKK1RSQUNFX0NIQVJQVVQKK3RyYWNlIGFsbCBjaGFyYWN0ZXIgb3V0cHV0cy4KKy5UUCA1CitUUkFDRV9PUkRJTkFSWQordHJhY2UgYWxsIHVwZGF0ZSBhY3Rpb25zLgorVGhlIG9sZCBhbmQgbmV3IHNjcmVlbiBjb250ZW50cyBhcmUgd3JpdHRlbiB0byB0aGUgdHJhY2UgZmlsZQorZm9yIGVhY2ggcmVmcmVzaC4KKy5UUCA1CitUUkFDRV9DQUxMUwordHJhY2UgYWxsIGN1cnNlcyBjYWxscy4KK1RoZSBwYXJhbWV0ZXJzIGZvciBlYWNoIGNhbGwgYXJlIHRyYWNlZCwgYXMgd2VsbCBhcyByZXR1cm4gdmFsdWVzLgorLlRQIDUKK1RSQUNFX1ZJUlRQVVQKK3RyYWNlIHZpcnR1YWwgY2hhcmFjdGVyIHB1dHMsIGkuZS4sIGNhbGxzIHRvIFxmQmFkZGNoXGZSLgorLlRQIDUKK1RSQUNFX0lFVkVOVAordHJhY2UgbG93LWxldmVsIGlucHV0IHByb2Nlc3NpbmcsIGluY2x1ZGluZyB0aW1lb3V0cy4KKy5UUCA1CitUUkFDRV9CSVRTCit0cmFjZSBzdGF0ZSBvZiBUVFkgY29udHJvbCBiaXRzLgorLlRQIDUKK1RSQUNFX0lDQUxMUwordHJhY2UgaW50ZXJuYWwvbmVzdGVkIGNhbGxzLgorLlRQIDUKK1RSQUNFX0NDQUxMUwordHJhY2UgcGVyLWNoYXJhY3RlciBjYWxscy4KKy5UUCA1CitUUkFDRV9EQVRBQkFTRQordHJhY2UgcmVhZC93cml0ZSBvZiB0ZXJtaW5mby90ZXJtY2FwIGRhdGEuCisuVFAgNQorVFJBQ0VfQVRUUlMKK3RyYWNlIGNoYW5nZXMgdG8gdmlkZW8gYXR0cmlidXRlcyBhbmQgY29sb3JzLgorLlRQIDUKK1RSQUNFX01BWElNVU0KK21heGltdW0gdHJhY2UgbGV2ZWwsIGVuYWJsZXMgYWxsIG9mIHRoZSBzZXBhcmF0ZSB0cmFjZSBmZWF0dXJlcy4KKy5QUAorU29tZSB0cmFjaW5nIGZlYXR1cmVzIGFyZSBlbmFibGVkIHdoZW5ldmVyIHRoZSBcZkJ0cmFjZVxmUiBwYXJhbWV0ZXIKK2lzIG5vbnplcm8uICBTb21lIGZlYXR1cmVzIG92ZXJsYXAuCitUaGUgc3BlY2lmaWMgbmFtZXMgYXJlIHVzZWQgYXMgYSBndWlkZWxpbmUuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB3aGljaCByZXR1cm4gYSB2YWx1ZSBhcmUgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBwYXJhbWV0ZXJzCit0byB0aGUgXGZCX3RyYWNlZlxmUiByb3V0aW5lLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBYU0kgaW50ZXJmYWNlLgorU29tZSBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGFyZSBrbm93biB0bworaGF2ZSBzaW1pbGFyLCB1bmRvY3VtZW50ZWQgZmVhdHVyZXMsCitidXQgdGhleSBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBuY3Vyc2VzLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vY3Vyc191dGlsLjN4IGIvbWFuL2N1cnNfdXRpbC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGUyYjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfdXRpbC4zeApAQCAtMCwwICsxLDI1OCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3V0aWwuM3gsdiAxLjI3IDIwMDgvMTAvMjUgMjM6NDU6NDEgdG9tIEV4cCAkCisuVEggY3Vyc191dGlsIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZGVsYXlfb3V0cHV0XGZSLAorXGZCZmlsdGVyXGZSLAorXGZCZmx1c2hpbnBcZlIsCitcZkJnZXR3aW5cZlIsCitcZkJrZXlfbmFtZVxmUiwKK1xmQmtleW5hbWVcZlIsCitcZkJub2ZpbHRlclxmUiwKK1xmQnB1dHdpblxmUiwKK1xmQnVuY3RybFxmUiwKK1xmQnVzZV9lbnZcZlIsCitcZkJ3dW5jdHJsXGZSIC0gbWlzY2VsbGFuZW91cyBcZkJjdXJzZXNcZlIgdXRpbGl0eSByb3V0aW5lcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJjaGFyICp1bmN0cmwoY2h0eXBlIGMpO1xmUgorLmJyCitcZkJ3Y2hhcl90ICp3dW5jdHJsKGNjaGFyX3QgKmMpO1xmUgorLmJyCitcZkJjaGFyICprZXluYW1lKGludCBjKTtcZlIKKy5icgorXGZCY2hhciAqa2V5X25hbWUod2NoYXJfdCB3KTtcZlIKKy5icgorXGZCdm9pZCBmaWx0ZXIodm9pZCk7XGZSCisuYnIKK1xmQnZvaWQgbm9maWx0ZXIodm9pZCk7XGZSCisuYnIKK1xmQnZvaWQgdXNlX2Vudihib29sIGYpO1xmUgorLmJyCitcZkJpbnQgcHV0d2luKFdJTkRPVyAqd2luLCBGSUxFICpmaWxlcCk7XGZSCisuYnIKK1xmQldJTkRPVyAqZ2V0d2luKEZJTEUgKmZpbGVwKTtcZlIKKy5icgorXGZCaW50IGRlbGF5X291dHB1dChpbnQgbXMpO1xmUgorLmJyCitcZkJpbnQgZmx1c2hpbnAodm9pZCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnVuY3RybFxmUiByb3V0aW5lIHJldHVybnMgYSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGlzIGEgcHJpbnRhYmxlCityZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIFxmSWNcZlIsIGlnbm9yaW5nIGF0dHJpYnV0ZXMuCitDb250cm9sIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBpbiB0aGUgXGZCXlxmUlxmSVhcZlIgbm90YXRpb24uCitQcmludGluZyBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMgaXMuCitUaGUgY29ycmVzcG9uZGluZyBcZkJ3dW5jdHJsXGZSIHJldHVybnMgYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YKK2Egd2lkZS1jaGFyYWN0ZXIuCisuUFAKK1RoZSBcZkJrZXluYW1lXGZSIHJvdXRpbmUgcmV0dXJucyBhIGNoYXJhY3RlciBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUga2V5IFxmSWNcZlI6CisuUlMgMworLlRQIDMKKy0KK1ByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMgdGhlbXNlbHZlcywgZS5nLiwgYSBvbmUtY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIHRoZSBrZXkuCisuVFAgMworLQorQ29udHJvbCBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIFxmQl5cZlJcZklYXGZSIG5vdGF0aW9uLgorLlRQIDMKKy0KK0RFTCAoY2hhcmFjdGVyIDEyNykgaXMgZGlzcGxheWVkIGFzIFxmQl4/XGZQLgorLlRQIDMKKy0KK1ZhbHVlcyBhYm92ZSAxMjggYXJlIGVpdGhlciBtZXRhIGNoYXJhY3RlcnMKKyhpZiB0aGUgc2NyZWVuIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCwKK29yIGlmIFxmQm1ldGFcZlAgaGFzIGJlZW4gY2FsbGVkIHdpdGggYSBUUlVFIHBhcmFtZXRlciksCitzaG93biBpbiB0aGUgXGZCTS1cZlJcZklYXGZSIG5vdGF0aW9uLAorb3IgYXJlIGRpc3BsYXllZCBhcyB0aGVtc2VsdmVzLgorSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgdmFsdWVzIG1heSBub3QgYmUgcHJpbnRhYmxlOwordGhpcyBmb2xsb3dzIHRoZSBYL09wZW4gc3BlY2lmaWNhdGlvbi4KKy5UUCAzCistCitWYWx1ZXMgYWJvdmUgMjU2IG1heSBiZSB0aGUgbmFtZXMgb2YgdGhlIG5hbWVzIG9mIGZ1bmN0aW9uIGtleXMuCisuVFAgMworLQorT3RoZXJ3aXNlIChpZiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIG5hbWUpIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwsCit0byBkZW5vdGUgYW4gZXJyb3IuCitYL09wZW4gYWxzbyBsaXN0cyBhbiAiVU5LTk9XTiBLRVkiIHJldHVybiB2YWx1ZSwgd2hpY2ggc29tZSBpbXBsZW1lbnRhdGlvbnMKK3JldHVybiByYXRoZXIgdGhhbiBudWxsLgorLlJFCisuTFAKK1RoZSBjb3JyZXNwb25kaW5nIFxmQmtleV9uYW1lXGZSIHJldHVybnMgYSBjaGFyYWN0ZXIgc3RyaW5nIGNvcnJlc3BvbmRpbmcKK3RvIHRoZSB3aWRlLWNoYXJhY3RlciB2YWx1ZSBcZkl3XGZSLgorVGhlIHR3byBmdW5jdGlvbnMgZG8gbm90IHJldHVybiB0aGUgc2FtZSBzZXQgb2Ygc3RyaW5nczsKK3RoZSBsYXR0ZXIgcmV0dXJucyBudWxsIHdoZXJlIHRoZSBmb3JtZXIgd291bGQgZGlzcGxheSBhIG1ldGEgY2hhcmFjdGVyLgorLlBQCitUaGUgXGZCZmlsdGVyXGZSIHJvdXRpbmUsIGlmIHVzZWQsIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBcZkJpbml0c2NyXGZSIG9yCitcZkJuZXd0ZXJtXGZSIGFyZSBjYWxsZWQuICBUaGUgZWZmZWN0IGlzIHRoYXQsIGR1cmluZyB0aG9zZSBjYWxscywgXGZCTElORVNcZlIKK2lzIHNldCB0byAxOyB0aGUgY2FwYWJpbGl0aWVzIFxmQmNsZWFyXGZSLCBcZkJjdXBcZlIsIFxmQmN1ZFxmUiwgXGZCY3VkMVxmUiwKK1xmQmN1dTFcZlIsIFxmQmN1dVxmUiwgXGZCdnBhXGZSIGFyZSBkaXNhYmxlZDsgYW5kIHRoZSBcZkJob21lXGZSIHN0cmluZyBpcworc2V0IHRvIHRoZSB2YWx1ZSBvZiBcZkJjclxmUi4KKy5QUAorVGhlIFxmQm5vZmlsdGVyXGZQIHJvdXRpbmUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIGEgcHJlY2VkaW5nIFxmQmZpbHRlclxmUAorY2FsbC4KK1RoYXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gaW5pdGlhbGl6ZSBhIHNjcmVlbiBvbiBhIGRpZmZlcmVudCBkZXZpY2UsCit1c2luZyBhIGRpZmZlcmVudCB2YWx1ZSBvZiBcZkIkVEVSTVxmUC4KK1RoZSBsaW1pdGF0aW9uIGFyaXNlcyBiZWNhdXNlIHRoZSBcZkJmaWx0ZXJcZlAgcm91dGluZSBtb2RpZmllcyB0aGUKK2luLW1lbW9yeSBjb3B5IG9mIHRoZSB0ZXJtaW5hbCBpbmZvcm1hdGlvbi4KKy5QUAorVGhlIFxmQnVzZV9lbnZcZlIgcm91dGluZSwgaWYgdXNlZCwgaXMgY2FsbGVkIGJlZm9yZSBcZkJpbml0c2NyXGZSIG9yCitcZkJuZXd0ZXJtXGZSIGFyZSBjYWxsZWQuICBXaGVuIGNhbGxlZCB3aXRoIFxmQkZBTFNFXGZSIGFzIGFuCithcmd1bWVudCwgdGhlIHZhbHVlcyBvZiBcZkJsaW5lc1xmUiBhbmQgXGZCY29sdW1uc1xmUiBzcGVjaWZpZWQgaW4gdGhlCitcZkl0ZXJtaW5mb1xmUiBkYXRhYmFzZSB3aWxsIGJlIHVzZWQsIGV2ZW4gaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzCitcZkJMSU5FU1xmUiBhbmQgXGZCQ09MVU1OU1xmUiAodXNlZCBieSBkZWZhdWx0KSBhcmUgc2V0LCBvciBpZgorXGZCY3Vyc2VzXGZSIGlzIHJ1bm5pbmcgaW4gYSB3aW5kb3cgKGluIHdoaWNoIGNhc2UgZGVmYXVsdCBiZWhhdmlvcgord291bGQgYmUgdG8gdXNlIHRoZSB3aW5kb3cgc2l6ZSBpZiBcZkJMSU5FU1xmUiBhbmQgXGZCQ09MVU1OU1xmUiBhcmUKK25vdCBzZXQpLgorTm90ZSB0aGF0IHNldHRpbmcgXGZCTElORVNcZlIgb3IgXGZCQ09MVU1OU1xmUiBvdmVycmlkZXMgdGhlCitjb3JyZXNwb25kaW5nIHNpemUgd2hpY2ggbWF5IGJlIG9idGFpbmVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisuUFAKK1RoZSBcZkJwdXR3aW5cZlIgcm91dGluZSB3cml0ZXMgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHdpbmRvdyBcZkl3aW5cZlIgaW50bwordGhlIGZpbGUgdG8gd2hpY2ggXGZJZmlsZXBcZlIgcG9pbnRzLiAgVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgbGF0ZXIgcmV0cmlldmVkCit1c2luZyB0aGUgXGZCZ2V0d2luXGZSIGZ1bmN0aW9uLgorLlBQCitUaGUgXGZCZ2V0d2luXGZSIHJvdXRpbmUgcmVhZHMgd2luZG93IHJlbGF0ZWQgZGF0YSBzdG9yZWQgaW4gdGhlIGZpbGUgYnkKK1xmQnB1dHdpblxmUi4gIFRoZSByb3V0aW5lIHRoZW4gY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgd2luZG93IHVzaW5nIHRoYXQKK2RhdGEuICBJdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3IHdpbmRvdy4KKy5QUAorVGhlIFxmQmRlbGF5X291dHB1dFxmUiByb3V0aW5lIGluc2VydHMgYW4gXGZJbXNcZlIgbWlsbGlzZWNvbmQgcGF1c2UKK2luIG91dHB1dC4gIFRoaXMgcm91dGluZSBzaG91bGQgbm90IGJlIHVzZWQgZXh0ZW5zaXZlbHkgYmVjYXVzZQorcGFkZGluZyBjaGFyYWN0ZXJzIGFyZSB1c2VkIHJhdGhlciB0aGFuIGEgQ1BVIHBhdXNlLgorSWYgbm8gcGFkZGluZyBjaGFyYWN0ZXIgaXMgc3BlY2lmaWVkLCB0aGlzIHVzZXMgXGZCbmFwbXNcZlIgdG8gcGVyZm9ybSB0aGUgZGVsYXkuCisuUFAKK1RoZSBcZkJmbHVzaGlucFxmUiByb3V0aW5lIHRocm93cyBhd2F5IGFueSB0eXBlYWhlYWQgdGhhdCBoYXMgYmVlbiB0eXBlZCBieSB0aGUKK3VzZXIgYW5kIGhhcyBub3QgeWV0IGJlZW4gcmVhZCBieSB0aGUgcHJvZ3JhbS4KKy5TSCBSRVRVUk4gVkFMVUUKK0V4Y2VwdCBmb3IgXGZCZmx1c2hpbnBcZlIsIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUgordXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiAoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuCitcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IuCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uCisuUlMgMworLlRQIDUKK1xmQmZsdXNoaW5wXGZSCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCB3YXMgbm90IGluaXRpYWxpemVkLgorLlRQIDUKK1xmQm1ldGFcZlIKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisuVFAgNQorXGZCcHV0d2luXGZQCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBhc3NvY2lhdGVkIFxmQmZ3cml0ZVxmUCBjYWxscyByZXR1cm4gYW4gZXJyb3IuCisuUkUKKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4KK0l0IHN0YXRlcyB0aGF0IFxmQnVuY3RybFxmUiBhbmQgXGZCd3VuY3RybFxmUiB3aWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBpZgordW5zdWNjZXNzZnVsLCBidXQgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yIHRocmVlIGNhc2VzOgorLlJTCisuVFAgNQorLQordGhlIHBhcmFtZXRlciBpcyBhIDctYml0IFVTLUFTQ0lJIGNvZGUuCitUaGlzIGlzIHRoZSBjYXNlIHRoYXQgWC9PcGVuIEN1cnNlcyBkb2N1bWVudGVkLgorLlRQIDUKKy0KK3RoZSBwYXJhbWV0ZXIgaXMgaW4gdGhlIHJhbmdlIDEyOC0xNTksIGkuZS4sIGEgQzEgY29udHJvbCBjb2RlLgorSWYgXGZCdXNlX2xlZ2FjeV9jb2RpbmdcZlAgaGFzIGJlZW4gY2FsbGVkIHdpdGggYSBcZkIyXGZQIHBhcmFtZXRlciwKK1xmQnVuY3RybFxmUCByZXR1cm5zIHRoZSBwYXJhbWV0ZXIsIGkuZS4sIGEgb25lLWNoYXJhY3RlciBzdHJpbmcgd2l0aAordGhlIHBhcmFtZXRlciBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyLgorT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGBgfkAnJywgYGB+QScnLCBldGMuLCBhbmFsb2dvdXMgdG8gYGBeQCcnLCBgYF5BJycsIEMwIGNvbnRyb2xzLgorLklQCitYL09wZW4gQ3Vyc2VzIGRvZXMgbm90IGRvY3VtZW50IHdoZXRoZXIgXGZCdW5jdHJsXGZQIGNhbiBiZSBjYWxsZWQgYmVmb3JlCitpbml0aWFsaXppbmcgY3Vyc2VzLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBwZXJtaXRzIHRoYXQsCithbmQgcmV0dXJucyB0aGUgYGB+QCcnLCBldGMuLCB2YWx1ZXMgaW4gdGhhdCBjYXNlLgorLlRQIDUKKy0KK3BhcmFtZXRlciB2YWx1ZXMgb3V0c2lkZSB0aGUgMCB0byAyNTUgcmFuZ2UuCitcZkJ1bmN0cmxcZlAgcmV0dXJucyBhIG51bGwgcG9pbnRlci4KKy5SRQorLlBQCitUaGUgU1ZyNCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgYWN0aW9uIG9mIFxmQmZpbHRlclxmUiBvbmx5IGluIHRoZSB2YWd1ZXN0Cit0ZXJtcy4gIFRoZSBkZXNjcmlwdGlvbiBoZXJlIGlzIGFkYXB0ZWQgZnJvbSB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCAod2hpY2gKK2Vycm9uZW91c2x5IGZhaWxzIHRvIGRlc2NyaWJlIHRoZSBkaXNhYmxpbmcgb2YgXGZCY3V1XGZSKS4KKy5QUAorVGhlIHN0cmluZ3MgcmV0dXJuZWQgYnkgXGZCdW5jdHJsXGZSIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlIGRldGVybWluZWQKK2F0IGNvbXBpbGUgdGltZSwKK3Nob3dpbmcgQzEgY29udHJvbHMgZnJvbSB0aGUgdXBwZXItMTI4IGNvZGVzIHdpdGggYSBgficgcHJlZml4IHJhdGhlciB0aGFuIGBeJy4KK090aGVyIGltcGxlbWVudGF0aW9ucyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucy4KK0ZvciBleGFtcGxlLCB0aGV5IG1heSBzaG93IGJvdGggc2V0cyBvZiBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBgXicsCithbmQgc3RyaXAgdGhlIHBhcmFtZXRlciB0byA3IGJpdHMuCitPciB0aGV5IG1heSBpZ25vcmUgQzEgY29udHJvbHMgYW5kIHRyZWF0IGFsbCBvZiB0aGUgdXBwZXItMTI4IGNvZGVzIGFzCitwcmludGFibGUuCitUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgOCBiaXRzIGJ1dCBkb2VzIG5vdCBtb2RpZnkgdGhlIHN0cmluZyB0byByZWZsZWN0Citsb2NhbGUuCitUaGUgXGZCdXNlX2xlZ2FjeV9jb2RpbmdcZlAgZnVuY3Rpb24gYWxsb3dzIHRoZSBjYWxsZXIgdG8KK2NoYW5nZSB0aGUgb3V0cHV0IG9mIFxmQnVuY3RybFxmUC4KKy5QUAorTGlrZXdpc2UsIHRoZSBcZkJtZXRhXGZQIGZ1bmN0aW9uIGFsbG93cyB0aGUgY2FsbGVyIHRvIGNoYW5nZSB0aGUKK291dHB1dCBvZiBcZkJrZXluYW1lXGZQLCBpLmUuLAoraXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgYE0tJyBwcmVmaXgKK2ZvciBgYG1ldGEnJyBrZXlzIChjb2RlcyBpbiB0aGUgcmFuZ2UgMTI4IHRvIDI1NSkuCitCb3RoIFxmQnVzZV9sZWdhY3lfY29kaW5nXGZQIGFuZCBcZkJtZXRhXGZQIHN1Y2NlZWQgb25seSBhZnRlcgorY3Vyc2VzIGlzIGluaXRpYWxpemVkLiAKK1gvT3BlbiBDdXJzZXMgZG9lcyBub3QgZG9jdW1lbnQgdGhlIHRyZWF0bWVudCBvZiBjb2RlcyAxMjggdG8gMTU5LgorV2hlbiB0cmVhdGluZyB0aGVtIGFzIGBgbWV0YScnIGtleXMKKyhvciBpZiBcZkJrZXluYW1lXGZQIGlzIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6aW5nIGN1cnNlcyksCit0aGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgc3RyaW5ncyBgYE0tXkAnJywgYGBNLV5BJycsIGV0Yy4KKy5QUAorVGhlIFxmQmtleW5hbWVcZlAgZnVuY3Rpb24gbWF5IHJldHVybiB0aGUgbmFtZXMgb2YgdXNlci1kZWZpbmVkCitzdHJpbmcgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBkZWZpbmVkIGluIHRoZSB0ZXJtaW5mbyBlbnRyeSB2aWEgdGhlIFxmQi14XGZQCitvcHRpb24gb2YgXGZCdGljXGZQLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBhdXRvbWF0aWNhbGx5IGFzc2lnbnMgYXQgcnVuLXRpbWUga2V5Y29kZXMgdG8gCit1c2VyLWRlZmluZWQgc3RyaW5ncyB3aGljaCBiZWdpbiB3aXRoICJrIi4KK1RoZSBrZXljb2RlcyBzdGFydCBhdCBLRVlfTUFYLCBidXQgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIAordGhlIHNhbWUgdmFsdWUgZm9yIGRpZmZlcmVudCBydW5zIGJlY2F1c2UgdXNlci1kZWZpbmVkIGNvZGVzIGFyZQorbWVyZ2VkIGZyb20gYWxsIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyB3aGljaCBoYXZlIGJlZW4gbG9hZGVkLgorVGhlIFxmQnVzZV9leHRlbmRlZF9uYW1lc1xmUCBmdW5jdGlvbiBjb250cm9scyB3aGV0aGVyIHRoaXMgZGF0YSBpcworbG9hZGVkIHdoZW4gdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGlzIHJlYWQgYnkgdGhlIGxpYnJhcnkuCisuUFAKK1RoZSBcZkJub2ZpbHRlclxmUCByb3V0aW5lIGlzIHNwZWNpZmljIHRvIG5jdXJzZXMuCitJdCB3YXMgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiBuY3Vyc2VzIGV4dGVuc2lvbnMKK2JlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKy5TSCBTRUUgQUxTTworXGZCbGVnYWN5X2NvZGluZ1xmUigzWCksCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwKK1xmQmN1cnNfa2VybmVsXGZSKDNYKSwKK1xmQmN1cnNfc2NyX2R1bXBcZlIoM1gpLAorXGZCbGVnYWN5X2NvZGluZ1xmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9jdXJzX3dpbmRvdy4zeCBiL21hbi9jdXJzX3dpbmRvdy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI4NjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2N1cnNfd2luZG93LjN4CkBAIC0wLDAgKzEsMTg4IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfd2luZG93LjN4LHYgMS4xNCAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgJAorLlRIIGN1cnNfd2luZG93IDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCbmV3d2luXGZSLAorXGZCZGVsd2luXGZSLAorXGZCbXZ3aW5cZlIsCitcZkJzdWJ3aW5cZlIsCitcZkJkZXJ3aW5cZlIsCitcZkJtdmRlcndpblxmUiwKK1xmQmR1cHdpblxmUiwKK1xmQndzeW5jdXBcZlIsCitcZkJzeW5jb2tcZlIsCitcZkJ3Y3Vyc3luY3VwXGZSLAorXGZCd3N5bmNkb3duXGZSIC0gY3JlYXRlIFxmQmN1cnNlc1xmUiB3aW5kb3dzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQldJTkRPVyAqbmV3d2luKGludCBubGluZXMsIGludCBuY29scywgaW50IGJlZ2luX3ksXGZSCisgICAgICBcZkJpbnQgYmVnaW5feCk7XGZSCisuYnIKK1xmQmludCBkZWx3aW4oV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgbXZ3aW4oV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQldJTkRPVyAqc3Vid2luKFdJTkRPVyAqb3JpZywgaW50IG5saW5lcywgaW50IG5jb2xzLFxmUgorICAgICAgXGZCaW50IGJlZ2luX3ksIGludCBiZWdpbl94KTtcZlIKKy5icgorXGZCV0lORE9XICpkZXJ3aW4oV0lORE9XICpvcmlnLCBpbnQgbmxpbmVzLCBpbnQgbmNvbHMsXGZSCisgICAgICBcZkJpbnQgYmVnaW5feSwgaW50IGJlZ2luX3gpO1xmUgorLmJyCitcZkJpbnQgbXZkZXJ3aW4oV0lORE9XICp3aW4sIGludCBwYXJfeSwgaW50IHBhcl94KTtcZlIKKy5icgorXGZCV0lORE9XICpkdXB3aW4oV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJ2b2lkIHdzeW5jdXAoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgc3luY29rKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCdm9pZCB3Y3Vyc3luY3VwKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCdm9pZCB3c3luY2Rvd24oV0lORE9XICp3aW4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK0NhbGxpbmcgXGZCbmV3d2luXGZSIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3IHdpbmRvdyB3aXRoIHRoZQorZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzIGFuZCBjb2x1bW5zLiAgVGhlIHVwcGVyIGxlZnQtaGFuZCBjb3JuZXIgb2YgdGhlIHdpbmRvdyBpcworYXQgbGluZSBcZkliZWdpblxmUl9cZkl5XGZSLCBjb2x1bW4gXGZJYmVnaW5cZlJfXGZJeFxmUi4gIElmIGVpdGhlcgorXGZJbmxpbmVzXGZSIG9yIFxmSW5jb2xzXGZSIGlzIHplcm8sIHRoZXkgZGVmYXVsdCB0byBcZkJMSU5FUyAtXGZSCitcZkliZWdpblxmUl9cZkl5XGZSIGFuZCBcZkJDT0xTIC1cZlIgXGZJYmVnaW5cZlJfXGZJeFxmUi4gIEEgbmV3IGZ1bGwtc2NyZWVuCit3aW5kb3cgaXMgY3JlYXRlZCBieSBjYWxsaW5nIFxmQm5ld3dpbigwLDAsMCwwKVxmUi4KKy5QUAorQ2FsbGluZyBcZkJkZWx3aW5cZlIgZGVsZXRlcyB0aGUgbmFtZWQgd2luZG93LCBmcmVlaW5nIGFsbCBtZW1vcnkKK2Fzc29jaWF0ZWQgd2l0aCBpdCAoaXQgZG9lcyBub3QgYWN0dWFsbHkgZXJhc2UgdGhlIHdpbmRvdydzIHNjcmVlbgoraW1hZ2UpLiAgU3Vid2luZG93cyBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIHRoZSBtYWluIHdpbmRvdyBjYW4gYmUKK2RlbGV0ZWQuCisuUFAKK0NhbGxpbmcgXGZCbXZ3aW5cZlIgbW92ZXMgdGhlIHdpbmRvdyBzbyB0aGF0IHRoZSB1cHBlciBsZWZ0LWhhbmQKK2Nvcm5lciBpcyBhdCBwb3NpdGlvbiAoXGZJeFxmUiwgXGZJeVxmUikuICBJZiB0aGUgbW92ZSB3b3VsZCBjYXVzZSB0aGUKK3dpbmRvdyB0byBiZSBvZmYgdGhlIHNjcmVlbiwgaXQgaXMgYW4gZXJyb3IgYW5kIHRoZSB3aW5kb3cgaXMgbm90Cittb3ZlZC4gIE1vdmluZyBzdWJ3aW5kb3dzIGlzIGFsbG93ZWQsIGJ1dCBzaG91bGQgYmUgYXZvaWRlZC4KKy5QUAorQ2FsbGluZyBcZkJzdWJ3aW5cZlIgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgd2luZG93Cit3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMsIFxmSW5saW5lc1xmUiwgYW5kIGNvbHVtbnMsCitcZkluY29sc1xmUi4gIFRoZSB3aW5kb3cgaXMgYXQgcG9zaXRpb24gKFxmSWJlZ2luXGZSX1xmSXlcZlIsCitcZkliZWdpblxmUl9cZkl4XGZSKSBvbiB0aGUgc2NyZWVuLiAgKFRoaXMgcG9zaXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlCitzY3JlZW4sIGFuZCBub3QgdG8gdGhlIHdpbmRvdyBcZklvcmlnXGZSLikgIFRoZSB3aW5kb3cgaXMgbWFkZSBpbiB0aGUKK21pZGRsZSBvZiB0aGUgd2luZG93IFxmSW9yaWdcZlIsIHNvIHRoYXQgY2hhbmdlcyBtYWRlIHRvIG9uZSB3aW5kb3cKK3dpbGwgYWZmZWN0IGJvdGggd2luZG93cy4gIFRoZSBzdWJ3aW5kb3cgc2hhcmVzIG1lbW9yeSB3aXRoIHRoZSB3aW5kb3cKK1xmSW9yaWdcZlIuICBXaGVuIHVzaW5nIHRoaXMgcm91dGluZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwKK1xmQnRvdWNod2luXGZSIG9yIFxmQnRvdWNobGluZVxmUiBvbiBcZklvcmlnXGZSIGJlZm9yZSBjYWxsaW5nCitcZkJ3cmVmcmVzaFxmUiBvbiB0aGUgc3Vid2luZG93LgorLlBQCitDYWxsaW5nIFxmQmRlcndpblxmUiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQnN1YndpbixcZlIgZXhjZXB0IHRoYXQKK1xmSWJlZ2luXGZSX1xmSXlcZlIgYW5kIFxmSWJlZ2luXGZSX1xmSXhcZlIgYXJlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4KK29mIHRoZSB3aW5kb3cgXGZJb3JpZ1xmUiByYXRoZXIgdGhhbiB0aGUgc2NyZWVuLiAgVGhlcmUgaXMgbm8KK2RpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3Vid2luZG93cyBhbmQgdGhlIGRlcml2ZWQgd2luZG93cy4KKy5QUAorQ2FsbGluZyBcZkJtdmRlcndpblxmUiBtb3ZlcyBhIGRlcml2ZWQgd2luZG93IChvciBzdWJ3aW5kb3cpCitpbnNpZGUgaXRzIHBhcmVudCB3aW5kb3cuICBUaGUgc2NyZWVuLXJlbGF0aXZlIHBhcmFtZXRlcnMgb2YgdGhlCit3aW5kb3cgYXJlIG5vdCBjaGFuZ2VkLiAgVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZGlzcGxheSBkaWZmZXJlbnQKK3BhcnRzIG9mIHRoZSBwYXJlbnQgd2luZG93IGF0IHRoZSBzYW1lIHBoeXNpY2FsIHBvc2l0aW9uIG9uIHRoZQorc2NyZWVuLgorLlBQCitDYWxsaW5nIFxmQmR1cHdpblxmUiBjcmVhdGVzIGFuIGV4YWN0IGR1cGxpY2F0ZSBvZiB0aGUgd2luZG93IFxmSXdpblxmUi4KKy5QUAorQ2FsbGluZyBcZkJ3c3luY3VwXGZSIHRvdWNoZXMgYWxsIGxvY2F0aW9ucyBpbiBhbmNlc3RvcnMgb2YgXGZJd2luXGZSIHRoYXQgYXJlCitjaGFuZ2VkIGluIFxmSXdpblxmUi4gIElmIFxmQnN5bmNva1xmUiBpcyBjYWxsZWQgd2l0aCBzZWNvbmQgYXJndW1lbnQKK1xmQlRSVUVcZlIgdGhlbiBcZkJ3c3luY3VwXGZSIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXJlIGlzIGEKK2NoYW5nZSBpbiB0aGUgd2luZG93LgorLlBQCitUaGUgXGZCd3N5bmNkb3duXGZSIHJvdXRpbmUgdG91Y2hlcyBlYWNoIGxvY2F0aW9uIGluIFxmSXdpblxmUiB0aGF0IGhhcyBiZWVuCit0b3VjaGVkIGluIGFueSBvZiBpdHMgYW5jZXN0b3Igd2luZG93cy4gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkKK1xmQndyZWZyZXNoXGZSLCBzbyBpdCBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIG5lY2Vzc2FyeSB0byBjYWxsIGl0IG1hbnVhbGx5LgorLlBQCitUaGUgcm91dGluZSBcZkJ3Y3Vyc3luY3VwXGZSIHVwZGF0ZXMgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIG9mIGFsbCB0aGUKK2FuY2VzdG9ycyBvZiB0aGUgd2luZG93IHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIG9mIHRoZQord2luZG93LgorLlNIIFJFVFVSTiBWQUxVRQorUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQKK1xmQk9LXGZSIChTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbgorc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorLlBQCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUworLlRQIDUKK1xmQmRlbHdpblxmUgorcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwgb3IKK2lmIHRoZSB3aW5kb3cgaXMgdGhlIHBhcmVudCBvZiBhbm90aGVyIHdpbmRvdy4KKy5JUAorVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIG1haW50YWlucyBhIGxpc3Qgb2Ygd2luZG93cywKK2FuZCBjaGVja3MgdGhhdCB0aGUgcG9pbnRlciBwYXNzZWQgdG8gXGZCZGVsd2luXGZQIGlzIG9uZSB0aGF0CitpdCBjcmVhdGVkLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgd2FzIG5vdC4uCisuVFAgNQorXGZCbXZkZXJ3aW5cZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgc29tZSBwYXJ0IG9mIHRoZSB3aW5kb3cgd291bGQgYmUgcGxhY2VkIG9mZi1zY3JlZW4uCisuVFAgNQorXGZCbXZ3aW5cZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgdGhlIHdpbmRvdyBpcyByZWFsbHkgYSBwYWQsIG9yCitpZiBzb21lIHBhcnQgb2YgdGhlIHdpbmRvdyB3b3VsZCBiZSBwbGFjZWQgb2ZmLXNjcmVlbi4KKy5UUCA1CitcZkJzeW5jb2tcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorLlJFCisuU0ggTk9URVMKK0lmIG1hbnkgc21hbGwgY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgd2luZG93LCB0aGUgXGZCd3N5bmN1cFxmUiBvcHRpb24gY291bGQKK2RlZ3JhZGUgcGVyZm9ybWFuY2UuCisuUFAKK05vdGUgdGhhdCBcZkJzeW5jb2tcZlIgbWF5IGJlIGEgbWFjcm8uCisuU0ggQlVHUworVGhlIHN1YndpbmRvdyBmdW5jdGlvbnMgKFxmSXN1YndpblxmUiwgXGZJZGVyd2luXGZSLCBcZkltdmRlcndpblxmUiwKK1xmQndzeW5jdXBcZlIsIFxmQndzeW5jZG93blxmUiwgXGZCd2N1cnN5bmN1cFxmUiwgXGZCc3luY29rXGZSKSBhcmUgZmxha3ksCitpbmNvbXBsZXRlbHkgaW1wbGVtZW50ZWQsIGFuZCBub3Qgd2VsbCB0ZXN0ZWQuCisuUFAKK1RoZSBTeXN0ZW0gViBjdXJzZXMgZG9jdW1lbnRhdGlvbiBpcyB2ZXJ5IHVuY2xlYXIgYWJvdXQgd2hhdCBcZkJ3c3luY3VwXGZSCithbmQgXGZCd3N5bmNkb3duXGZSIGFjdHVhbGx5IGRvLiAgSXQgc2VlbXMgdG8gaW1wbHkgdGhhdCB0aGV5IGFyZSBvbmx5CitzdXBwb3NlZCB0byB0b3VjaCBleGFjdGx5IHRob3NlIGxpbmVzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGFuY2VzdG9yIGNoYW5nZXMuCitUaGUgbGFuZ3VhZ2UgaGVyZSwgYW5kIHRoZSBiZWhhdmlvciBvZiB0aGUgXGZCY3Vyc2VzXGZSIGltcGxlbWVudGF0aW9uLAoraXMgcGF0dGVybmVkIG9uIHRoZSBYUEc0IGN1cnNlcyBzdGFuZGFyZC4gIFRoZSB3ZWFrZXIgWFBHNCBzcGVjIG1heSByZXN1bHQKK2luIHNsb3dlciB1cGRhdGVzLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpLCBcZkJjdXJzX3RvdWNoXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vZGVmYXVsdF9jb2xvcnMuM3ggYi9tYW4vZGVmYXVsdF9jb2xvcnMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1MThiYQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9kZWZhdWx0X2NvbG9ycy4zeApAQCAtMCwwICsxLDE0NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTcsMTk5OSwyMDAwLDIwMDUKKy5cIgorLlwiICRJZDogZGVmYXVsdF9jb2xvcnMuM3gsdiAxLjIwIDIwMDYvMTIvMjQgMTU6MDI6NTMgdG9tIEV4cCAkCisuVEggZGVmYXVsdF9jb2xvcnMgM1ggIiIKKy5TSCBOQU1FCitcZkJ1c2VfZGVmYXVsdF9jb2xvcnNcZlIsCitcZkJhc3N1bWVfZGVmYXVsdF9jb2xvcnNcZlIgXC0gdXNlIHRlcm1pbmFsJ3MgZGVmYXVsdCBjb2xvcnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUAorLnNwCitcZkJpbnQgdXNlX2RlZmF1bHRfY29sb3JzKHZvaWQpO1xmUAorLmJyCitcZkJpbnQgYXNzdW1lX2RlZmF1bHRfY29sb3JzKGludCBmZywgaW50IGJnKTtcZlAKKy5TSCBERVNDUklQVElPTgorVGhlCisuSSB1c2VfZGVmYXVsdF9jb2xvcnMoKQorYW5kCisuSSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKQorZnVuY3Rpb25zIGFyZSBleHRlbnNpb25zIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4KK1RoZXkgYXJlIHVzZWQgd2l0aCB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IElTTyA2NDI5IGNvbG9yLCBvciBlcXVpdmFsZW50LgorVGhlc2UgdGVybWluYWxzIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byByZXNldCBjb2xvciB0byBhbiB1bnNwZWNpZmllZAorZGVmYXVsdCB2YWx1ZSAoZS5nLiwgd2l0aCBTR1IgMzkgb3IgU0dSIDQ5KS4KKy5QUAorQXBwbGljYXRpb25zIHRoYXQgcGFpbnQgYSBjb2xvcmVkIGJhY2tncm91bmQgb3ZlciB0aGUgd2hvbGUgc2NyZWVuCitkbyBub3QgdGFrZSBhZHZhbnRhZ2Ugb2YgU0dSIDM5IGFuZCBTR1IgNDkuCitTb21lIGFwcGxpY2F0aW9ucyBhcmUgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBkZWZhdWx0IGJhY2tncm91bmQsCit1c2luZyBjb2xvcnMgb25seSBmb3IgdGV4dC4KK0ZvciBleGFtcGxlLCB0aGVyZSBhcmUgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFxmQmxzXGZQIHByb2dyYW0KK3doaWNoIHVzZSBjb2xvcnMgdG8gZGVub3RlIGRpZmZlcmVudCBmaWxlIHR5cGVzIG9yIHBlcm1pc3Npb25zLgorVGhlc2UgImNvbG9yIGxzIiBwcm9ncmFtcyBkbyBub3QgbmVjZXNzYXJpbHkgbW9kaWZ5IHRoZSBiYWNrZ3JvdW5kIGNvbG9yLAordHlwaWNhbGx5IHVzaW5nIG9ubHkgdGhlIFxmSXNldGFmXGZQIHRlcm1pbmZvIGNhcGFiaWxpdHkgdG8gc2V0IHRoZQorZm9yZWdyb3VuZCBjb2xvci4KK0Z1bGwtc2NyZWVuIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBkZWZhdWx0IGNvbG9ycyBjYW4gYWNoaWV2ZSBzaW1pbGFyCit2aXN1YWwgZWZmZWN0cy4KKy5QUAorVGhlIGZpcnN0IGZ1bmN0aW9uLAorLkkgdXNlX2RlZmF1bHRfY29sb3JzKCkKK3RlbGxzIHRoZSBjdXJzZXMgbGlicmFyeSB0byBhc3NpZ24gdGVybWluYWwgZGVmYXVsdAorZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbG9ycyB0byBjb2xvciBudW1iZXIgLTEuIFNvIGluaXRfcGFpcih4LENPTE9SX1JFRCwtMSkKK3dpbGwgaW5pdGlhbGl6ZSBwYWlyIHggYXMgcmVkIG9uIGRlZmF1bHQgYmFja2dyb3VuZCBhbmQgaW5pdF9wYWlyKHgsLTEsQ09MT1JfQkxVRSkgd2lsbAoraW5pdGlhbGl6ZSBwYWlyIHggYXMgZGVmYXVsdCBmb3JlZ3JvdW5kIG9uIGJsdWUuCisuUFAKK1RoZSBvdGhlciwKKy5JIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpCitpcyBhIHJlZmluZW1lbnQgd2hpY2ggdGVsbHMgd2hpY2ggY29sb3JzIHRvIHBhaW50IGZvciBjb2xvciBwYWlyIDAuCitUaGlzIGZ1bmN0aW9uIHJlY29nbml6ZXMgYSBzcGVjaWFsIGNvbG9yIG51bWJlciAtMSwKK3doaWNoIGRlbm90ZXMgdGhlIGRlZmF1bHQgdGVybWluYWwgY29sb3IuCisuUFAKK1RoZSBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6CisuUlMKKy5icgorLkkgdXNlX2RlZmF1bHRfY29sb3JzKCk7CisuYnIKKy5JIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygtMSwtMSk7CisuUkUKKy5QUAorVGhlc2UgYXJlIG5jdXJzZXMgZXh0ZW5zaW9ucy4KK0ZvciBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLCBjb2xvcgorbnVtYmVyIC0xIGRvZXMgbm90IG1lYW4gYW55dGhpbmcsIGp1c3QgYXMgZm9yIG5jdXJzZXMgYmVmb3JlIGEKK3N1Y2Nlc3NmdWwgY2FsbCBvZiBcZkl1c2VfZGVmYXVsdF9jb2xvcnMoKVxmUCBvciBcZklhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKVxmUC4KKy5QUAorT3RoZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBkbyBub3QgYWxsb3cgYW4gYXBwbGljYXRpb24gdG8gbW9kaWZ5IGNvbG9yIHBhaXIgMC4KK1RoZXkgYXNzdW1lIHRoYXQgdGhlIGJhY2tncm91bmQgaXMgQ09MT1JfQkxBQ0ssCitidXQgZG8gbm90IGVuc3VyZSB0aGF0IHRoZSBjb2xvciBwYWlyIDAgaXMgcGFpbnRlZCB0byBtYXRjaCB0aGUKK2Fzc3VtcHRpb24uCitJZiB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBlaXRoZXIKKy5JIHVzZV9kZWZhdWx0X2NvbG9ycygpCitvcgorLkkgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkKK25jdXJzZXMgd2lsbCBwYWludCBhIHdoaXRlIGZvcmVncm91bmQgKHRleHQpIHdpdGggYmxhY2sgYmFja2dyb3VuZAorZm9yIGNvbG9yIHBhaXIgMC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZQIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlAgb24gc3VjY2Vzcy4KK1RoZXkgd2lsbCBmYWlsIGlmIGVpdGhlciB0aGUgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydAordGhlIFxmSW9yaWdfcGFpclxmUCBvciBcZklvcmlnX2NvbG9yc1xmUCBjYXBhYmlsaXR5LgorSWYgdGhlIFxmSWluaXRpYWxpemVfcGFpclxmUCBjYXBhYmlsaXR5IGlzIGZvdW5kLCB0aGlzIGNhdXNlcyBhbgorZXJyb3IgYXMgd2VsbC4KKy5TSCBOT1RFUworQXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uLCB0aGUgXGZCaW5pdF9wYWlyXGZSIGZ1bmN0aW9uIGFjY2VwdHMKK25lZ2F0aXZlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IGRlZmF1bHQgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9ycy4KKy5QUAorVGhlIFxmSXVzZV9kZWZhdWx0X2NvbG9ycygpXGZQIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byBzdXBwb3J0IFxmSWRlZFxmUC4KK1RoaXMgaXMgYSBmdWxsLXNjcmVlbiBhcHBsaWNhdGlvbiB3aGljaCB1c2VzIGN1cnNlcyB0byBtYW5hZ2Ugb25seSBwYXJ0CitvZiB0aGUgc2NyZWVuLiAgVGhlIGJvdHRvbSBwb3J0aW9uIG9mIHRoZSBzY3JlZW4sIHdoaWNoIGlzIG9mIGFkanVzdGFibGUKK3NpemUsIGlzIGxlZnQgdW5jb2xvcmVkIHRvIGRpc3BsYXkgdGhlIHJlc3VsdHMgZnJvbSBzaGVsbCBjb21tYW5kcy4KK1RoZSB0b3AgcG9ydGlvbiBvZiB0aGUgc2NyZWVuIGNvbG9ycyBmaWxlbmFtZXMgdXNpbmcgYSBzY2hlbWUgbGlrZSB0aGUKKyJjb2xvciBscyIgcHJvZ3JhbXMuCitBdHRlbXB0aW5nIHRvIG1hbmFnZSB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgc2NyZWVuIGZvciB0aGlzIGFwcGxpY2F0aW9uCit3b3VsZCBnaXZlIHVuc2F0aXNmYWN0b3J5IHJlc3VsdHMgZm9yIGEgdmFyaWV0eSBvZiByZWFzb25zLgorVGhpcyBleHRlbnNpb24gd2FzIGRldmlzZWQgYWZ0ZXIKK25vdGluZyB0aGF0IGNvbG9yIHh0ZXJtIChhbmQgc2ltaWxhciBwcm9ncmFtcykgcHJvdmlkZXMgYSBiYWNrZ3JvdW5kIGNvbG9yCit3aGljaCBkb2VzIG5vdCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvIGFueSBvZiB0aGUgQU5TSSBjb2xvcnMuCitXaGlsZSBhIHNwZWNpYWwgdGVybWluZm8gZW50cnkgY291bGQgYmUgY29uc3RydWN0ZWQgdXNpbmcgbmluZSBjb2xvcnMsCit0aGVyZSB3YXMgbm8gbWVjaGFuaXNtIHByb3ZpZGVkIHdpdGhpbiBjdXJzZXMgdG8gYWNjb3VudCBmb3IgdGhlIHJlbGF0ZWQKK1xmSW9yaWdfcGFpclxmUCBhbmQgXGZJYmFja19jb2xvcl9lcmFzZVxmUCBjYXBhYmlsaXRpZXMuCisuUFAKK1RoZSBcZklhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKVxmUCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gc29sdmUKK2EgZGlmZmVyZW50IHByb2JsZW06IHN1cHBvcnQgZm9yIGFwcGxpY2F0aW9ucyB3aGljaCB3b3VsZCB1c2UKK2Vudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiB0byBieXBhc3MgY3Vyc2VzJworbm90aW9uIG9mIHRoZSB0ZXJtaW5hbCdzIGRlZmF1bHQgY29sb3JzLCBzZXR0aW5nIHNwZWNpZmljIHZhbHVlcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzX2NvbG9yXGZSKDNYKSwKK1xmQmRlZFxmUCgxKS4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkgKGZyb20gYW4gYW5hbHlzaXMgb2YgdGhlIHJlcXVpcmVtZW50cyBmb3IgY29sb3IgeHRlcm0KK2ZvciBYRnJlZTg2IDMuMS4yQywgRmVicnVhcnkgMTk5NikuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9kZWZpbmVfa2V5LjN4IGIvbWFuL2RlZmluZV9rZXkuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YTNjYgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9kZWZpbmVfa2V5LjN4CkBAIC0wLDAgKzEsNjUgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk3CisuXCIKKy5cIiAkSWQ6IGRlZmluZV9rZXkuM3gsdiAxLjEyIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggZGVmaW5lX2tleSAzWCAiIgorLlNIIE5BTUUKK1xmQmRlZmluZV9rZXlcZlAgXC0gZGVmaW5lIGEga2V5Y29kZQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmludCBkZWZpbmVfa2V5KGNvbnN0IGNoYXIgKmRlZmluaXRpb24sIGludCBrZXljb2RlKTtcZlAKKy5TSCBERVNDUklQVElPTgorVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LgorSXQgcGVybWl0cyBhbiBhcHBsaWNhdGlvbiB0byBkZWZpbmUga2V5Y29kZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIGNvbnRyb2wKK3N0cmluZ3MsIHNvIHRoYXQgdGhlIG5jdXJzZXMgbGlicmFyeSB3aWxsIGludGVycHJldCB0aGVtIGp1c3QgYXMgaXQgd291bGQKK3RoZSBwcmVkZWZpbmVkIGNvZGVzIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZS4KKy5QUAorSWYgdGhlIGdpdmVuIHN0cmluZyBpcyBudWxsLCBhbnkgZXhpc3RpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIGtleWNvZGUgaXMKK3JlbW92ZWQuCitTaW1pbGFybHksIGlmIHRoZSBnaXZlbiBrZXljb2RlIGlzIG5lZ2F0aXZlIG9yIHplcm8sIGFueSBleGlzdGluZyBzdHJpbmcKK2ZvciB0aGUgZ2l2ZW4gZGVmaW5pdGlvbiBpcyByZW1vdmVkLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGtleWNvZGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybywgZWxzZSBFUlIgaXMgcmV0dXJuZWQuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQKK2FueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKy5TSCBTRUUgQUxTTworXGZCa2V5b2tcZlIoM1gpLAorXGZCa2V5X2RlZmluZWRcZlIoM1gpLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm0uM3ggYi9tYW4vZm9ybS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JhMTliCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm0uM3gKQEAgLTAsMCArMSwyMTYgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm0uM3gsdiAxLjIyIDIwMDgvMTAvMTEgMjA6NDg6MTEgdG9tIEV4cCAkCisuVEggZm9ybSAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1cZlIgLSBjdXJzZXMgZXh0ZW5zaW9uIGZvciBwcm9ncmFtbWluZyBmb3JtcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJmb3JtXGZSIGxpYnJhcnkgcHJvdmlkZXMgdGVybWluYWwtaW5kZXBlbmRlbnQgZmFjaWxpdGllcyBmb3IgY29tcG9zaW5nCitmb3JtIHNjcmVlbnMgb24gY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzLiAgVGhlIGxpYnJhcnkgaW5jbHVkZXM6IGZpZWxkCityb3V0aW5lcywgd2hpY2ggY3JlYXRlIGFuZCBtb2RpZnkgZm9ybSBmaWVsZHM7IGFuZCBmb3JtIHJvdXRpbmVzLCB3aGljaCBncm91cAorZmllbGRzIGludG8gZm9ybXMsIGRpc3BsYXkgZm9ybXMgb24gdGhlIHNjcmVlbiwgYW5kIGhhbmRsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZQordXNlci4KKy5QUAorVGhlIFxmQmZvcm1cZlIgbGlicmFyeSB1c2VzIHRoZSBcZkJjdXJzZXNcZlIgbGlicmFyaWVzLgorVG8gdXNlIHRoZSBcZkJmb3JtXGZSIGxpYnJhcnksIGxpbmsgd2l0aCB0aGUgb3B0aW9ucworXGZCLWxmb3JtIC1sY3Vyc2VzXGZSLgorLlBQCitZb3VyIHByb2dyYW0gc2hvdWxkIHNldCB1cCB0aGUgbG9jYWxlLCBlLmcuLAorLnNwCisgICAgIFxmQnNldGxvY2FsZShMQ19BTEwsICIiKTtcZlAKKy5zcAorc28gdGhhdCBpbnB1dC9vdXRwdXQgcHJvY2Vzc2luZyB3aWxsIHdvcmsuCisuUFAKK0EgY3Vyc2VzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgc3VjaCBhcyBcZkJpbml0c2NyXGZSIG11c3QgYmUgY2FsbGVkCitiZWZvcmUgdXNpbmcgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucy4KKy4KKy5TUyBDdXJyZW50IERlZmF1bHQgVmFsdWVzIGZvciBGaWVsZCBBdHRyaWJ1dGVzCisuCitUaGUgXGZCZm9ybVxmUiBsaWJyYXJ5IG1haW50YWlucyBhIGRlZmF1bHQgdmFsdWUgZm9yIGZpZWxkIGF0dHJpYnV0ZXMuICBZb3UKK2NhbiBnZXQgb3Igc2V0IHRoaXMgZGVmYXVsdCBieSBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBcZkJzZXRfXGZSCitvciByZXRyaWV2YWwKK3JvdXRpbmUgd2l0aCBhIFxmQk5VTExcZlIgZmllbGQgcG9pbnRlci4gIENoYW5naW5nIHRoaXMgZGVmYXVsdCB3aXRoIGEKK1xmQnNldF9cZlIgZnVuY3Rpb24gYWZmZWN0cyBmdXR1cmUgZmllbGQgY3JlYXRpb25zLCBidXQgZG9lcyBub3QgY2hhbmdlIHRoZQorcmVuZGVyaW5nIG9mIGZpZWxkcyBhbHJlYWR5IGNyZWF0ZWQuCisuCisuU1MgUm91dGluZSBOYW1lIEluZGV4CisuCitUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIGVhY2ggXGZCZm9ybVxmUiByb3V0aW5lIGFuZCB0aGUgbmFtZSBvZgordGhlIG1hbnVhbCBwYWdlIG9uIHdoaWNoIGl0IGlzIGRlc2NyaWJlZC4KKy4KKy5UUworbCBsCitsIGwgLgorXGZCY3Vyc2VzXGZSIFJvdXRpbmUgTmFtZQlNYW51YWwgUGFnZSBOYW1lCis9CitjdXJyZW50X2ZpZWxkCVxmQmZvcm1fcGFnZVxmUigzWCkKK2RhdGFfYWhlYWQJXGZCZm9ybV9kYXRhXGZSKDNYKQorZGF0YV9iZWhpbmQJXGZCZm9ybV9kYXRhXGZSKDNYKQorZHVwX2ZpZWxkCVxmQmZvcm1fZmllbGRfbmV3XGZSKDNYKQorZHluYW1pY19maWVsZF9pbmZvCVxmQmZvcm1fZmllbGRfaW5mb1xmUigzWCkKK2ZpZWxkX2FyZwlcZkJmb3JtX2ZpZWxkX3ZhbGlkYXRpb25cZlIoM1gpCitmaWVsZF9iYWNrCVxmQmZvcm1fZmllbGRfYXR0cmlidXRlc1xmUigzWCkKK2ZpZWxkX2J1ZmZlcglcZkJmb3JtX2ZpZWxkX2J1ZmZlclxmUigzWCkKK2ZpZWxkX2NvdW50CVxmQmZvcm1fZmllbGRcZlIoM1gpCitmaWVsZF9mb3JlCVxmQmZvcm1fZmllbGRfYXR0cmlidXRlc1xmUigzWCkKK2ZpZWxkX2luZGV4CVxmQmZvcm1fcGFnZVxmUigzWCkKK2ZpZWxkX2luZm8JXGZCZm9ybV9maWVsZF9pbmZvXGZSKDNYKQorZmllbGRfaW5pdAlcZkJmb3JtX2hvb2tcZlIoM1gpCitmaWVsZF9qdXN0CVxmQmZvcm1fZmllbGRfanVzdFxmUigzWCkKK2ZpZWxkX29wdHMJXGZCZm9ybV9maWVsZF9vcHRzXGZSKDNYKQorZmllbGRfb3B0c19vZmYJXGZCZm9ybV9maWVsZF9vcHRzXGZSKDNYKQorZmllbGRfb3B0c19vbglcZkJmb3JtX2ZpZWxkX29wdHNcZlIoM1gpCitmaWVsZF9wYWQJXGZCZm9ybV9maWVsZF9hdHRyaWJ1dGVzXGZSKDNYKQorZmllbGRfc3RhdHVzCVxmQmZvcm1fZmllbGRfYnVmZmVyXGZSKDNYKQorZmllbGRfdGVybQlcZkJmb3JtX2hvb2tcZlIoM1gpCitmaWVsZF90eXBlCVxmQmZvcm1fZmllbGRfdmFsaWRhdGlvblxmUigzWCkKK2ZpZWxkX3VzZXJwdHIJXGZCZm9ybV9maWVsZF91c2VycHRyXGZSKDNYKQorZm9ybV9kcml2ZXIJXGZCZm9ybV9kcml2ZXJcZlIoM1gpCitmb3JtX2ZpZWxkcwlcZkJmb3JtX2ZpZWxkXGZSKDNYKQorZm9ybV9pbml0CVxmQmZvcm1faG9va1xmUigzWCkKK2Zvcm1fb3B0cwlcZkJmb3JtX29wdHNcZlIoM1gpCitmb3JtX29wdHNfb2ZmCVxmQmZvcm1fb3B0c1xmUigzWCkKK2Zvcm1fb3B0c19vbglcZkJmb3JtX29wdHNcZlIoM1gpCitmb3JtX3BhZ2UJXGZCZm9ybV9wYWdlXGZSKDNYKQorZm9ybV9yZXF1ZXN0X2J5X25hbWUJXGZCZm9ybV9yZXF1ZXN0bmFtZVxmUigzWCkKK2Zvcm1fcmVxdWVzdF9uYW1lCVxmQmZvcm1fcmVxdWVzdG5hbWVcZlIoM1gpCitmb3JtX3N1YglcZkJmb3JtX3dpblxmUigzWCkKK2Zvcm1fdGVybQlcZkJmb3JtX2hvb2tcZlIoM1gpCitmb3JtX3VzZXJwdHIJXGZCZm9ybV91c2VycHRyXGZSKDNYKQorZm9ybV93aW4JXGZCZm9ybV93aW5cZlIoM1gpCitmcmVlX2ZpZWxkCVxmQmZvcm1fZmllbGRfbmV3XGZSKDNYKQorZnJlZV9maWVsZHR5cGUJXGZCZm9ybV9maWVsZHR5cGVcZlIoM1gpCitmcmVlX2Zvcm0JXGZCZm9ybV9uZXdcZlIoM1gpCitsaW5rX2ZpZWxkCVxmQmZvcm1fZmllbGRfbmV3XGZSKDNYKQorbGlua19maWVsZHR5cGUJXGZCZm9ybV9maWVsZHR5cGVcZlIoM1gpCittb3ZlX2ZpZWxkCVxmQmZvcm1fZmllbGRcZlIoM1gpCituZXdfZmllbGQJXGZCZm9ybV9maWVsZF9uZXdcZlIoM1gpCituZXdfZmllbGR0eXBlCVxmQmZvcm1fZmllbGR0eXBlXGZSKDNYKQorbmV3X2Zvcm0JXGZCZm9ybV9uZXdcZlIoM1gpCituZXdfcGFnZQlcZkJmb3JtX25ld19wYWdlXGZSKDNYKQorcG9zX2Zvcm1fY3Vyc29yCVxmQmZvcm1fY3Vyc29yXGZSKDNYKQorcG9zdF9mb3JtCVxmQmZvcm1fcG9zdFxmUigzWCkKK3NjYWxlX2Zvcm0JXGZCZm9ybV93aW5cZlIoM1gpCitzZXRfY3VycmVudF9maWVsZAlcZkJmb3JtX3BhZ2VcZlIoM1gpCitzZXRfZmllbGRfYmFjawlcZkJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXNcZlIoM1gpCitzZXRfZmllbGRfYnVmZmVyCVxmQmZvcm1fZmllbGRfYnVmZmVyXGZSKDNYKQorc2V0X2ZpZWxkX2ZvcmUJXGZCZm9ybV9maWVsZF9hdHRyaWJ1dGVzXGZSKDNYKQorc2V0X2ZpZWxkX2luaXQJXGZCZm9ybV9ob29rXGZSKDNYKQorc2V0X2ZpZWxkX2p1c3QJXGZCZm9ybV9maWVsZF9qdXN0XGZSKDNYKQorc2V0X2ZpZWxkX29wdHMJXGZCZm9ybV9maWVsZF9vcHRzXGZSKDNYKQorc2V0X2ZpZWxkX3BhZAlcZkJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXNcZlIoM1gpCitzZXRfZmllbGRfc3RhdHVzCVxmQmZvcm1fZmllbGRfYnVmZmVyXGZSKDNYKQorc2V0X2ZpZWxkX3Rlcm0JXGZCZm9ybV9ob29rXGZSKDNYKQorc2V0X2ZpZWxkX3R5cGUJXGZCZm9ybV9maWVsZF92YWxpZGF0aW9uXGZSKDNYKQorc2V0X2ZpZWxkX3VzZXJwdHIJXGZCZm9ybV9maWVsZF91c2VycHRyXGZSKDNYKQorc2V0X2ZpZWxkdHlwZV9hcmcJXGZCZm9ybV9maWVsZHR5cGVcZlIoM1gpCitzZXRfZmllbGR0eXBlX2Nob2ljZQlcZkJmb3JtX2ZpZWxkdHlwZVxmUigzWCkKK3NldF9mb3JtX2ZpZWxkcwlcZkJmb3JtX2ZpZWxkXGZSKDNYKQorc2V0X2Zvcm1faW5pdAlcZkJmb3JtX2hvb2tcZlIoM1gpCitzZXRfZm9ybV9vcHRzCVxmQmZvcm1fZmllbGRfb3B0c1xmUigzWCkKK3NldF9mb3JtX3BhZ2UJXGZCZm9ybV9wYWdlXGZSKDNYKQorc2V0X2Zvcm1fc3ViCVxmQmZvcm1fd2luXGZSKDNYKQorc2V0X2Zvcm1fdGVybQlcZkJmb3JtX2hvb2tcZlIoM1gpCitzZXRfZm9ybV91c2VycHRyCVxmQmZvcm1fdXNlcnB0clxmUigzWCkKK3NldF9mb3JtX3dpbglcZkJmb3JtX3dpblxmUigzWCkKK3NldF9tYXhfZmllbGQJXGZCZm9ybV9maWVsZF9idWZmZXJcZlIoM1gpCitzZXRfbmV3X3BhZ2UJXGZCZm9ybV9uZXdfcGFnZVxmUigzWCkKK3VucG9zdF9mb3JtCVxmQmZvcm1fcG9zdFxmUigzWCkKKy5URQorLlNIIFJFVFVSTiBWQUxVRQorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IsCithbmQgc2V0IGVycm5vIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yLWNvZGUgcmV0dXJuZWQgYnkgZnVuY3Rpb25zCityZXR1cm5pbmcgYW4gaW50ZWdlci4KK1JvdXRpbmVzIHRoYXQgcmV0dXJuCithbiBpbnRlZ2VyIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9DT05ORUNURUQKK1RoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisuVFAgNQorLkIgRV9JTlZBTElEX0ZJRUxECitDb250ZW50cyBvZiBhIGZpZWxkIGFyZSBub3QgdmFsaWQuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBmaWVsZHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZm9ybS4KKy5UUCA1CisuQiBFX05PVF9QT1NURUQKK1RoZSBmb3JtIGhhcyBub3QgYmVlbiBwb3N0ZWQuCisuVFAgNQorLkIgRV9OT19ST09NCitGb3JtIGlzIHRvbyBsYXJnZSBmb3IgaXRzIHdpbmRvdy4KKy5UUCA1CisuQiBFX1BPU1RFRAorVGhlIGZvcm0gaXMgYWxyZWFkeSBwb3N0ZWQuCisuVFAgNQorLkIgRV9SRVFVRVNUX0RFTklFRAorVGhlIGZvcm0gZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9VTktOT1dOX0NPTU1BTkQKK1RoZSBmb3JtIGRyaXZlciBjb2RlIHNhdyBhbiB1bmtub3duIHJlcXVlc3QgY29kZS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvciBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZXMKK1xmQjxjdXJzZXMuaD5cZlIgYW5kIFxmQjxldGkuaD5cZlIuCisuUFAKK0luIHlvdXIgbGlicmFyeSBsaXN0LCBsaWJmb3JtLmEgc2hvdWxkIGJlIGJlZm9yZSBsaWJuY3Vyc2VzLmE7IHRoYXQgaXMsCit5b3Ugd2FudCB0byBzYXkgYC1sZm9ybSAtbG5jdXJzZXMnLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQgKHdoaWNoIHdvdWxkCitnaXZlIHlvdSBhIGxpbmsgZXJyb3IgdXNpbmcgbW9zdCBsaW5rZXJzKS4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlNIIFNFRSBBTFNPCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX2N1cnNvci4zeCBiL21hbi9mb3JtX2N1cnNvci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjlmMjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fY3Vyc29yLjN4CkBAIC0wLDAgKzEsNzUgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fY3Vyc29yLjN4LHYgMS42IDIwMDYvMTEvMDQgMTg6NTA6MjQgdG9tIEV4cCAkCisuVEggZm9ybV9jdXJzb3IgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2N1cnNvclxmUiAtIHBvc2l0aW9uIGEgZm9ybSB3aW5kb3cgY3Vyc29yCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBwb3NfZm9ybV9jdXJzb3IoRk9STSAqZm9ybSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnBvc19mb3JtX2N1cnNvclxmUiByZXN0b3JlcyB0aGUgY3Vyc29yIHRvIHRoZSBwb3NpdGlvbiByZXF1aXJlZAorZm9yIHRoZSBmb3JtcyBkcml2ZXIgdG8gY29udGludWUgcHJvY2Vzc2luZyByZXF1ZXN0cy4gIFRoaXMgaXMgdXNlZnVsIGFmdGVyCitcZkJjdXJzZXNcZlIgcm91dGluZXMgaGF2ZSBiZWVuIGNhbGxlZCB0byBkbyBzY3JlZW4tcGFpbnRpbmcgaW4gcmVzcG9uc2UgdG8gYQorZm9ybSBvcGVyYXRpb24uCisuU0ggUkVUVVJOIFZBTFVFCitUaGlzIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX05PVF9QT1NURUQKK1RoZSBmb3JtIGhhcyBub3QgYmVlbiBwb3N0ZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vZm9ybV9kYXRhLjN4IGIvbWFuL2Zvcm1fZGF0YS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmEwMDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fZGF0YS4zeApAQCAtMCwwICsxLDYzIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX2RhdGEuM3gsdiAxLjggMjAwNi8wMi8yNSAyMTozODoyNiB0b20gRXhwICQKKy5USCBmb3JtX2RhdGEgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2RhdGFcZlIgLSB0ZXN0IGZvciBvZmYtc2NyZWVuIGRhdGEgaW4gZ2l2ZW4gZm9ybXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgorYm9vbCBkYXRhX2FoZWFkKGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCitib29sIGRhdGFfYmVoaW5kKGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJkYXRhX2FoZWFkXGZSIHRlc3RzIHdoZXRoZXIgdGhlcmUgaXMgb2ZmLXNjcmVlbiBkYXRhCithaGVhZCBpbiB0aGUgZ2l2ZW4gZm9ybS4gIEl0IHJldHVybnMgVFJVRSAoMSkgb3IgRkFMU0UgKDApLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZGF0YV9iZWhpbmRcZlIgdGVzdHMgd2hldGhlciB0aGVyZSBpcyBvZmYtc2NyZWVuIGRhdGEKK2JlaGluZCBpbiB0aGUgZ2l2ZW4gZm9ybS4gIEl0IHJldHVybnMgVFJVRSAoMSkgb3IgRkFMU0UgKDApLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX2RyaXZlci4zeCBiL21hbi9mb3JtX2RyaXZlci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjA1NzZmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fZHJpdmVyLjN4CkBAIC0wLDAgKzEsMzM5IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZHJpdmVyLjN4LHYgMS4xNiAyMDA4LzA2LzIxIDIxOjU1OjM5IHRvbSBFeHAgJAorLlRIIGZvcm1fZHJpdmVyIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9kcml2ZXJcZlIgLSBjb21tYW5kLXByb2Nlc3NpbmcgbG9vcCBvZiB0aGUgZm9ybSBzeXN0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IGZvcm1fZHJpdmVyKEZPUk0gKmZvcm0sIGludCBjKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitPbmNlIGEgZm9ybSBoYXMgYmVlbiBwb3N0ZWQgKGRpc3BsYXllZCksIHlvdSBzaG91bGQgZnVubmVsIGlucHV0IGV2ZW50cyB0byBpdAordGhyb3VnaCBcZkJmb3JtX2RyaXZlclxmUi4gIFRoaXMgcm91dGluZSBoYXMgdGhyZWUgbWFqb3IgaW5wdXQgY2FzZXM6CisuVFAgMworLQorVGhlIGlucHV0IGlzIGEgZm9ybSBuYXZpZ2F0aW9uIHJlcXVlc3QuCitOYXZpZ2F0aW9uIHJlcXVlc3QgY29kZXMgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGluIFxmQjxmb3JtLmg+XGZQLAord2hpY2ggYXJlIGRpc3RpbmN0IGZyb20gdGhlIGtleS0gYW5kIGNoYXJhY3RlciBjb2RlcyByZXR1cm5lZCBieSBcZkJ3Z2V0Y2hcZlAuCisuVFAgMworLQorVGhlIGlucHV0IGlzIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4KK1ByaW50YWJsZSBjaGFyYWN0ZXJzICh3aGljaCBtdXN0IGJlIHBvc2l0aXZlLCBsZXNzIHRoYW4gMjU2KSBhcmUKK2NoZWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9ncmFtJ3MgbG9jYWxlIHNldHRpbmdzLgorLlRQIDMKKy0KK1RoZSBpbnB1dCBpcyB0aGUgS0VZX01PVVNFIHNwZWNpYWwga2V5IGFzc29jaWF0ZWQgd2l0aCBhbiBtb3VzZSBldmVudC4KKy5QUAorVGhlIGZvcm0gZHJpdmVyIHJlcXVlc3RzIGFyZSBhcyBmb2xsb3dzOgorLlRQIDUKK1JFUV9ORVhUX1BBR0UKK01vdmUgdG8gdGhlIG5leHQgcGFnZS4KKy5UUCA1CitSRVFfUFJFVl9QQUdFCitNb3ZlIHRvIHRoZSBwcmV2aW91cyBwYWdlLgorLlRQIDUKK1JFUV9GSVJTVF9QQUdFCitNb3ZlIHRvIHRoZSBmaXJzdCBwYWdlLgorLlRQIDUKK1JFUV9MQVNUX1BBR0UKK01vdmUgdG8gdGhlIGxhc3QgZmllbGQuCisuc3AKKy5UUCA1CitSRVFfTkVYVF9GSUVMRAorTW92ZSB0byB0aGUgbmV4dCBmaWVsZC4KKy5UUCA1CitSRVFfUFJFVl9GSUVMRAorTW92ZSB0byB0aGUgcHJldmlvdXMgZmllbGQuCisuVFAgNQorUkVRX0ZJUlNUX0ZJRUxECitNb3ZlIHRvIHRoZSBmaXJzdCBmaWVsZC4KKy5UUCA1CitSRVFfTEFTVF9GSUVMRAorTW92ZSB0byB0aGUgbGFzdCBmaWVsZC4KKy5UUCA1CitSRVFfU05FWFRfRklFTEQKK01vdmUgdG8gdGhlIHNvcnRlZCBuZXh0IGZpZWxkLgorLlRQIDUKK1JFUV9TUFJFVl9GSUVMRAorTW92ZSB0byB0aGUgc29ydGVkIHByZXZpb3VzIGZpZWxkLgorLlRQIDUKK1JFUV9TRklSU1RfRklFTEQKK01vdmUgdG8gdGhlIHNvcnRlZCBmaXJzdCBmaWVsZC4KKy5UUCA1CitSRVFfU0xBU1RfRklFTEQKK01vdmUgdG8gdGhlIHNvcnRlZCBsYXN0IGZpZWxkLgorLlRQIDUKK1JFUV9MRUZUX0ZJRUxECitNb3ZlIGxlZnQgdG8gYSBmaWVsZC4KKy5UUCA1CitSRVFfUklHSFRfRklFTEQKK01vdmUgcmlnaHQgdG8gYSBmaWVsZC4KKy5UUCA1CitSRVFfVVBfRklFTEQKK01vdmUgdXAgdG8gYSBmaWVsZC4KKy5UUCA1CitSRVFfRE9XTl9GSUVMRAorTW92ZSBkb3duIHRvIGEgZmllbGQuCisuc3AKKy5UUCA1CitSRVFfTkVYVF9DSEFSCitNb3ZlIHRvIHRoZSBuZXh0IGNoYXIuCisuVFAgNQorUkVRX1BSRVZfQ0hBUgorTW92ZSB0byB0aGUgcHJldmlvdXMgY2hhci4KKy5UUCA1CitSRVFfTkVYVF9MSU5FCitNb3ZlIHRvIHRoZSBuZXh0IGxpbmUuCisuVFAgNQorUkVRX1BSRVZfTElORQorTW92ZSB0byB0aGUgcHJldmlvdXMgbGluZS4KKy5UUCA1CitSRVFfTkVYVF9XT1JECitNb3ZlIHRvIHRoZSBuZXh0IHdvcmQuCisuVFAgNQorUkVRX1BSRVZfV09SRAorTW92ZSB0byB0aGUgcHJldmlvdXMgd29yZC4KKy5UUCA1CitSRVFfQkVHX0ZJRUxECitNb3ZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpZWxkLgorLlRQIDUKK1JFUV9FTkRfRklFTEQKK01vdmUgdG8gdGhlIGVuZCBvZiB0aGUgZmllbGQuCisuVFAgNQorUkVRX0JFR19MSU5FCitNb3ZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCisuVFAgNQorUkVRX0VORF9MSU5FCitNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisuVFAgNQorUkVRX0xFRlRfQ0hBUgorTW92ZSBsZWZ0IGluIHRoZSBmaWVsZC4KKy5UUCA1CitSRVFfUklHSFRfQ0hBUgorTW92ZSByaWdodCBpbiB0aGUgZmllbGQuCisuVFAgNQorUkVRX1VQX0NIQVIKK01vdmUgdXAgaW4gdGhlIGZpZWxkLgorLlRQIDUKK1JFUV9ET1dOX0NIQVIKK01vdmUgZG93biBpbiB0aGUgZmllbGQuCisuc3AKKy5UUCA1CitSRVFfTkVXX0xJTkUKK0luc2VydCBvciBvdmVybGF5IGEgbmV3IGxpbmUuCisuVFAgNQorUkVRX0lOU19DSEFSCitJbnNlcnQgYSBibGFuayBhdCB0aGUgY3Vyc29yLgorLlRQIDUKK1JFUV9JTlNfTElORQorSW5zZXJ0IGEgYmxhbmsgbGluZSBhdCB0aGUgY3Vyc29yLgorLlRQIDUKK1JFUV9ERUxfQ0hBUgorRGVsZXRlIGNoYXJhY3RlciBhdCB0aGUgY3Vyc29yLgorLlRQIDUKK1JFUV9ERUxfUFJFVgorRGVsZXRlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvci4KKy5UUCA1CitSRVFfREVMX0xJTkUKK0RlbGV0ZSBsaW5lIGF0IHRoZSBjdXJzb3IuCisuVFAgNQorUkVRX0RFTF9XT1JECitEZWxldGUgYmxhbmstZGVsaW1pdGVkIHdvcmQgYXQgdGhlIGN1cnNvci4KKy5UUCA1CitSRVFfQ0xSX0VPTAorQ2xlYXIgdG8gZW5kIG9mIGxpbmUgZnJvbSBjdXJzb3IuCisuVFAgNQorUkVRX0NMUl9FT0YKK0NsZWFyIHRvIGVuZCBvZiBmaWVsZCBmcm9tIGN1cnNvci4KKy5UUCA1CitSRVFfQ0xSX0ZJRUxECitDbGVhciB0aGUgZW50aXJlIGZpZWxkLgorLlRQIDUKK1JFUV9PVkxfTU9ERQorRW50ZXIgb3ZlcmxheSBtb2RlLgorLlRQIDUKK1JFUV9JTlNfTU9ERQorRW50ZXIgaW5zZXJ0IG1vZGUuCisuc3AKKy5UUCA1CitSRVFfU0NSX0ZMSU5FCitTY3JvbGwgdGhlIGZpZWxkIGZvcndhcmQgYSBsaW5lLgorLlRQIDUKK1JFUV9TQ1JfQkxJTkUKK1Njcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgYSBsaW5lLgorLlRQIDUKK1JFUV9TQ1JfRlBBR0UKK1Njcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIHBhZ2UuCisuVFAgNQorUkVRX1NDUl9CUEFHRQorU2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBhIHBhZ2UuCisuVFAgNQorUkVRX1NDUl9GSFBBR0UKK1Njcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBoYWxmIGEgcGFnZS4KKy5UUCA1CitSRVFfU0NSX0JIUEFHRQorU2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBoYWxmIGEgcGFnZS4KKy5zcAorLlRQIDUKK1JFUV9TQ1JfRkNIQVIKK1Njcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIGNoYXJhY3Rlci4KKy5UUCA1CitSRVFfU0NSX0JDSEFSCitTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgY2hhcmFjdGVyLgorLlRQIDUKK1JFUV9TQ1JfSEZMSU5FCitIb3Jpem9udGFsIHNjcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIGxpbmUuCisuVFAgNQorUkVRX1NDUl9IQkxJTkUKK0hvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBhIGxpbmUuCisuVFAgNQorUkVRX1NDUl9IRkhBTEYKK0hvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGhhbGYgYSBsaW5lLgorLlRQIDUKK1JFUV9TQ1JfSEJIQUxGCitIb3Jpem9udGFsIHNjcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgaGFsZiBhIGxpbmUuCisuc3AKKy5UUAorUkVRX1ZBTElEQVRJT04KK1ZhbGlkYXRlIGZpZWxkLgorLlRQCitSRVFfTkVYVF9DSE9JQ0UKK0Rpc3BsYXkgbmV4dCBmaWVsZCBjaG9pY2UuCisuVFAKK1JFUV9QUkVWX0NIT0lDRQorRGlzcGxheSBwcmV2aW91cyBmaWVsZCBjaG9pY2UuCisuUFAKK0lmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyLCB0aGUgZHJpdmVyIHBsYWNlcyBpdAoraW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgZmllbGQuICBJZiBpdCBpcyBvbmUgb2YgdGhlIGZvcm1zCityZXF1ZXN0cyBsaXN0ZWQgYWJvdmUsIHRoYXQgcmVxdWVzdCBpcyBleGVjdXRlZC4KKy5TUyBNT1VTRSBIQU5ETElORworLlBQCitJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBLRVlfTU9VU0Ugc3BlY2lhbCBrZXksIHRoZSBhc3NvY2lhdGVkCittb3VzZSBldmVudCBpcyB0cmFuc2xhdGVkIGludG8gb25lIG9mIHRoZSBhYm92ZSBwcmUtZGVmaW5lZCByZXF1ZXN0cy4KK0N1cnJlbnRseSBvbmx5IGNsaWNrcyBpbiB0aGUgdXNlciB3aW5kb3cgKGUuZy4gaW5zaWRlIHRoZSBmb3JtIGRpc3BsYXkKK2FyZWEgb3IgdGhlIGRlY29yYXRpb24gd2luZG93KSBhcmUgaGFuZGxlZC4KKy5QUAorSWYgeW91IGNsaWNrIGFib3ZlIHRoZSBkaXNwbGF5IHJlZ2lvbiBvZiB0aGUgZm9ybToKKy5SUworLlRQCithIFJFUV9QUkVWX0ZJRUxEIGlzIGdlbmVyYXRlZCBmb3IgYSBzaW5nbGUgY2xpY2ssCisuVFAKK2EgUkVRX1BSRVZfUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorLlRQCithIFJFUV9GSVJTVF9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgdHJpcGxlLWNsaWNrLgorLlJFCisuUFAKK0lmIHlvdSBjbGljayBiZWxvdyB0aGUgZGlzcGxheSByZWdpb24gb2YgdGhlIGZvcm06CisuUlMKKy5UUAorYSBSRVFfTkVYVF9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorLlRQCithIFJFUV9ORVhUX1BBR0UgaXMgZ2VuZXJhdGVkIGZvciBhIGRvdWJsZS1jbGljayBhbmQKKy5UUAorYSBSRVFfTEFTVF9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgdHJpcGxlLWNsaWNrLgorLlJFCisuUFAKK0lmIHlvdSBjbGljayBhdCBhbiBmaWVsZCBpbnNpZGUgdGhlIGRpc3BsYXkgYXJlYSBvZiB0aGUgZm9ybToKKy5SUworLlRQIDMKKy0KK3RoZSBmb3JtIGN1cnNvciBpcyBwb3NpdGlvbmVkIHRvIHRoYXQgZmllbGQuCisuVFAgMworLQorSWYgeW91IGRvdWJsZS1jbGljayBhIGZpZWxkLAordGhlIGZvcm0gY3Vyc29yIGlzIHBvc2l0aW9uZWQgdG8gdGhhdCBmaWVsZAorYW5kIFxmQkVfVU5LTk9XTl9DT01NQU5EXGZSIGlzIHJldHVybmVkLgorVGhpcyByZXR1cm4gdmFsdWUgbWFrZXMgc2Vuc2UsCitiZWNhdXNlIGEgZG91YmxlIGNsaWNrIHVzdWFsbHkgbWVhbnMgdGhhdCBhbiBmaWVsZC1zcGVjaWZpYyBhY3Rpb24gc2hvdWxkCitiZSByZXR1cm5lZC4KK0l0IGlzIGV4YWN0bHkgdGhlIHB1cnBvc2Ugb2YgdGhpcyByZXR1cm4gdmFsdWUgdG8gc2lnbmFsIHRoYXQgYW4KK2FwcGxpY2F0aW9uIHNwZWNpZmljIGNvbW1hbmQgc2hvdWxkIGJlIGV4ZWN1dGVkLgorLlRQIDMKKy0KK0lmIGEgdHJhbnNsYXRpb24KK2ludG8gYSByZXF1ZXN0IHdhcyBkb25lLCBcZkJmb3JtX2RyaXZlclxmUiByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhpcyByZXF1ZXN0LgorLlJFCisuUFAKK0lmIHlvdSBjbGlja2VkIG91dHNpZGUgdGhlIHVzZXIgd2luZG93IG9yIHRoZSBtb3VzZSBldmVudCBjb3VsZCBub3QgYmUgdHJhbnNsYXRlZAoraW50byBhIGZvcm0gcmVxdWVzdCBhbiBcZkJFX1JFUVVFU1RfREVOSUVEXGZSIGlzIHJldHVybmVkLgorLlNTIEFQUExJQ0FUSU9OLURFRklORUQgQ09NTUFORFMKKy5QUAorSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWl0aGVyIHByaW50YWJsZSBub3Igb25lIG9mIHRoZSBhYm92ZQorcHJlLWRlZmluZWQgZm9ybSByZXF1ZXN0cywgdGhlIGRyaXZlciBhc3N1bWVzIGl0IGlzIGFuIGFwcGxpY2F0aW9uLXNwZWNpZmljCitjb21tYW5kIGFuZCByZXR1cm5zIFxmQkVfVU5LTk9XTl9DT01NQU5EXGZSLiAgQXBwbGljYXRpb24tZGVmaW5lZCBjb21tYW5kcworc2hvdWxkIGJlIGRlZmluZWQgcmVsYXRpdmUgdG8gXGZCTUFYX0NPTU1BTkRcZlIsIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZXNlCitwcmUtZGVmaW5lZCByZXF1ZXN0cy4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQmZvcm1fZHJpdmVyXGZSIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9CQURfU1RBVEUKK1JvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmF0aW9uIGZ1bmN0aW9uLgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIGZvcm0gaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX0lOVkFMSURfRklFTEQKK0NvbnRlbnRzIG9mIGZpZWxkIGlzIGludmFsaWQuCisuVFAgNQorLkIgRV9SRVFVRVNUX0RFTklFRAorVGhlIGZvcm0gZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9VTktOT1dOX0NPTU1BTkQKK1RoZSBmb3JtIGRyaXZlciBjb2RlIHNhdyBhbiB1bmtub3duIHJlcXVlc3QgY29kZS4KKy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmZvcm1cZlIoM1gpLAorXGZCd2dldGNoXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlcworXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vZm9ybV9maWVsZC4zeCBiL21hbi9mb3JtX2ZpZWxkLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTI2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9maWVsZC4zeApAQCAtMCwwICsxLDk4IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX2ZpZWxkLjN4LHYgMS44IDIwMDYvMTEvMDQgMTg6MDE6MzggdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZCAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZmllbGRcZlIgLSBtYWtlIGFuZCBicmVhayBjb25uZWN0aW9ucyBiZXR3ZWVuIGZpZWxkcyBhbmQgZm9ybXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9mb3JtX2ZpZWxkcyhGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcyk7CisuYnIKK0ZJRUxEICoqZm9ybV9maWVsZHMoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKK2ludCBmaWVsZF9jb3VudChjb25zdCBGT1JNICpmb3JtKTsKKy5icgoraW50IG1vdmVfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgZnJvdywgaW50IGZjb2wpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfZm9ybV9maWVsZHNcZlIgY2hhbmdlcyB0aGUgZmllbGQgcG9pbnRlciBhcnJheSBvZgordGhlIGdpdmVuIFxmSWZvcm1cZlIuICBUaGUgYXJyYXkgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IGEgXGZCTlVMTFxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fZmllbGRzXGZSIHJldHVybnMgdGhlIGZpZWxkIGFycmF5IG9mIHRoZSBnaXZlbiBmb3JtLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZmllbGRfY291bnRcZlIgcmV0dXJucyB0aGUgY291bnQgb2YgZmllbGRzIGluIFxmSWZvcm1cZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJtb3ZlX2ZpZWxkXGZSIG1vdmVzIHRoZSBnaXZlbiBmaWVsZCAod2hpY2ggbXVzdCBiZSBkaXNjb25uZWN0ZWQpCit0byBhIHNwZWNpZmllZCBsb2NhdGlvbiBvbiB0aGUgc2NyZWVuLgorLlNIIFJFVFVSTiBWQUxVRVMKK1RoZSBmdW5jdGlvbiBcZkJmb3JtX2ZpZWxkc1xmUiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIFxmQk5VTExcZlIpLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZmllbGRfY291bnRcZlIgcmV0dXJucyBcZkJFUlJcZlIgaWYgdGhlIFxmSWZvcm1cZlAgcGFyYW1ldGVyCitpcyBcZkJOVUxMXGZQLgorLlBQCitUaGUgZnVuY3Rpb25zIFxmQnNldF9mb3JtX2ZpZWxkc1xmUiBhbmQgXGZCbW92ZV9maWVsZFxmUiByZXR1cm4gb25lIG9mCit0aGUgZm9sbG93aW5nIGNvZGVzIG9uIGVycm9yOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQ09OTkVDVEVECitUaGUgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBmb3JtLgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgZm9ybSBpcyBhbHJlYWR5IHBvc3RlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK1RoZSBTVnI0IGZvcm1zIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhlIFxmQmZpZWxkX2NvdW50XGZSIGVycm9yIHZhbHVlCithcyAtMSAod2hpY2ggaXMgdGhlIHZhbHVlIG9mIFxmQkVSUlxmUikuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3ggYi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGMwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4CkBAIC0wLDAgKzEsOTIgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGRfYXR0cmlidXRlcy4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxODo1MToyNiB0b20gRXhwICQKKy5USCBmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXNcZlIgLSBjb2xvciBhbmQgYXR0cmlidXRlIGNvbnRyb2wgZm9yIGZvcm0gZmllbGRzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZmllbGRfZm9yZShGSUVMRCAqZmllbGQsIGNodHlwZSBhdHRyKTsKKy5icgorY2h0eXBlIGZpZWxkX2ZvcmUoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgoraW50IHNldF9maWVsZF9iYWNrKEZJRUxEICpmaWVsZCwgY2h0eXBlIGF0dHIpOworLmJyCitjaHR5cGUgZmllbGRfYmFjayhjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCitpbnQgc2V0X2ZpZWxkX3BhZChGSUVMRCAqZmllbGQsIGludCBwYWQpOworLmJyCitpbnQgZmllbGRfcGFkKGNvbnN0IEZJRUxEICpmaWVsZCk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF9mb3JlXGZSIHNldHMgdGhlIGZvcmVncm91bmQgYXR0cmlidXRlIG9mCitcZklmaWVsZFxmUi4gVGhpcyBpcyB0aGUgaGlnaGxpZ2h0IHVzZWQgdG8gZGlzcGxheSB0aGUgZmllbGQgY29udGVudHMuICBUaGUKK2Z1bmN0aW9uIFxmQmZpZWxkX2ZvcmVcZlIgcmV0dXJucyB0aGUgZm9yZWdyb3VuZCBhdHRyaWJ1dGUuICBUaGUgZGVmYXVsdCBpcworXGZCQV9TVEFORE9VVFxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF9iYWNrXGZSIHNldHMgdGhlIGJhY2tncm91bmQgYXR0cmlidXRlIG9mCitcZklmb3JtXGZSLiBUaGlzIGlzIHRoZSBoaWdobGlnaHQgdXNlZCB0byBkaXNwbGF5IHRoZSBleHRlbnQgZmllbGRzIGluIHRoZQorZm9ybS4gIFRoZSBmdW5jdGlvbiBcZkJmaWVsZF9iYWNrXGZSIHJldHVybnMgdGhlIGJhY2tncm91bmQgYXR0cmlidXRlLiAgVGhlCitkZWZhdWx0IGlzIFxmQkFfTk9STUFMXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX3BhZFxmUiBzZXRzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBmaWxsIHRoZSBmaWVsZC4KK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9wYWRcZlIgcmV0dXJucyB0aGUgZ2l2ZW4gZm9ybSdzIHBhZCBjaGFyYWN0ZXIuICBUaGUKK2RlZmF1bHQgaXMgYSBibGFuay4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpIGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJmb3JtXyIgZm9yIGRldGFpbGVkCitkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeCBiL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjYwNzJmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4CkBAIC0wLDAgKzEsMTQyIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX2ZpZWxkX2J1ZmZlci4zeCx2IDEuMTUgMjAwOC8xMC8xOCAxODozNToxNyB0b20gRXhwICQKKy5USCBmb3JtX2ZpZWxkX2J1ZmZlciAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZmllbGRfYnVmZmVyXGZSIC0gZmllbGQgYnVmZmVyIGNvbnRyb2wKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF9idWZmZXIoRklFTEQgKmZpZWxkLCBpbnQgYnVmLCBjb25zdCBjaGFyICp2YWx1ZSk7CisuYnIKK2NoYXIgKmZpZWxkX2J1ZmZlcihjb25zdCBGSUVMRCAqZmllbGQsIGludCBidWZmZXIpOworLmJyCitpbnQgc2V0X2ZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQsIGJvb2wgc3RhdHVzKTsKKy5icgorYm9vbCBmaWVsZF9zdGF0dXMoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgoraW50IHNldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgbWF4KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX2J1ZmZlclxmUiBzZXRzIHRoZSBudW1iZXJlZCBidWZmZXIgb2YgdGhlIGdpdmVuIGZpZWxkCit0byBjb250YWluIGEgZ2l2ZW4gc3RyaW5nOgorLlJTIDMKKy5UUCAzCistCitCdWZmZXIgMCBpcyB0aGUgZGlzcGxheWVkIHZhbHVlIG9mIHRoZSBmaWVsZC4KKy5UUCAzCistCitPdGhlciBudW1iZXJlZCBidWZmZXJzIG1heSBiZSBhbGxvY2F0ZWQgYnkgYXBwbGljYXRpb25zIHRocm91Z2ggdGhlIFxmQm5idWZcZlIKK2FyZ3VtZW50IG9mIChzZWUgXGZCZm9ybV9maWVsZF9uZXdcZlIoM1gpKQorYnV0IGFyZSBub3QgbWFuaXB1bGF0ZWQgYnkgdGhlIGZvcm1zIGxpYnJhcnkuCisuUkUKKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX2J1ZmZlclxmUiByZXR1cm5zIGEgcG9pbnRlciB0bwordGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBudW1iZXJlZCBidWZmZXI6CisuUlMgMworLlRQIDMKKy0KK1RoZSBidWZmZXIgY29udGVudHMgYWx3YXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLAorYW5kIGFyZSBwYWRkZWQgd2l0aCB0cmFpbGluZyBzcGFjZXMKK2FzIG5lZWRlZCB0byBlbnN1cmUgdGhpcyBsZW5ndGggaXMgdGhlIHNhbWUuCisuVFAgMworLQorVGhlIGJ1ZmZlciBtYXkgY29udGFpbiBsZWFkaW5nIHNwYWNlcywgZGVwZW5kaW5nIG9uIGhvdyBpdCB3YXMgc2V0LgorLlRQIDMKKy0KK1RoZSBidWZmZXIgY29udGVudHMgYXJlIHNldCB3aXRoIFxmQnNldF9maWVsZF9idWZmZXJcZlAsCitvciBhcyBhIHNpZGUgZWZmZWN0IG9mIGFueSBlZGl0aW5nIG9wZXJhdGlvbnMgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQuCisuVFAgMworLQorRWRpdGluZyBvcGVyYXRpb25zIGFyZSBiYXNlZCBvbiB0aGUgXGZJd2luZG93XGZQIHdoaWNoIGRpc3BsYXlzIHRoZSBmaWVsZCwKK3JhdGhlciB0aGFuIGEgXGZJc3RyaW5nXGZQLgorVGhlIHdpbmRvdyBjb250YWlucyBvbmx5IHByaW50YWJsZSBjaGFyYWN0ZXJzLCBhbmQgaXMgZmlsbGVkIHdpdGggYmxhbmtzLgorSWYgeW91IHdhbnQgdGhlIHJhdyBkYXRhLCB5b3UgbXVzdCB3cml0ZSB5b3VyCitvd24gcm91dGluZSB0aGF0IGNvcGllcyB0aGUgdmFsdWUgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJlbW92ZXMgdGhlIGxlYWRpbmcKK2FuZCB0cmFpbGluZyBzcGFjZXMuCisuVFAgMworLQorQmVjYXVzZSBlZGl0aW5nIG9wZXJhdGlvbnMgY2hhbmdlIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgdG8KK2NvcnJlc3BvbmQgdG8gdGhlIHdpbmRvdywgeW91IHNob3VsZCBub3QgcmVseSBvbiB1c2luZyBidWZmZXJzCitmb3IgbG9uZy10ZXJtIHN0b3JhZ2Ugb2YgZm9ybSBkYXRhLgorLlJFCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfc3RhdHVzXGZSIHNldHMgdGhlIGFzc29jaWF0ZWQgc3RhdHVzIGZsYWcgb2YKK1xmSWZpZWxkXGZSOyBcZkJmaWVsZF9zdGF0dXNcZlIgZ2V0cyB0aGUgY3VycmVudCB2YWx1ZS4gIFRoZSBzdGF0dXMgZmxhZworaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSB3aGVuZXZlciB0aGUgZmllbGQgY2hhbmdlcy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tYXhfZmllbGRcZlIgc2V0cyB0aGUgbWF4aW11bSBzaXplIGZvciBhIGR5bmFtaWMgZmllbGQuCitBbiBhcmd1bWVudCBvZiAwIHR1cm5zIG9mZiBhbnkgbWF4aW11bSBzaXplIHRocmVzaG9sZCBmb3IgdGhhdCBmaWVsZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBcZkJmaWVsZF9idWZmZXJcZlIgZnVuY3Rpb24gcmV0dXJucyBOVUxMIG9uIGVycm9yLgorSXQgc2V0cyBlcnJubyBhY2NvcmRpbmcgdG8gdGhlaXIgc3VjY2VzczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5QUAorVGhlIFxmQmZpZWxkX3N0YXR1c1xmUiBmdW5jdGlvbiByZXR1cm5zIFxmQlRSVUVcZlIgb3IgXGZCRkFMU0VcZlIuCisuUFAKK1RoZSByZW1haW5pbmcgcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKKy5QUAorV2hlbiBjb25maWd1cmVkIGZvciB3aWRlLWNoYXJhY3RlcnMsIFxmQmZpZWxkX2J1ZmZlclxmUCByZXR1cm5zIGEgcG9pbnRlcgordG8gdGVtcG9yYXJ5IHN0b3JhZ2UgKGFsbG9jYXRlZCBhbmQgZnJlZWQgYnkgdGhlIGxpYnJhcnkpLgorVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYXR0ZW1wdCB0byBtb2RpZnkgdGhlIGRhdGEuCitJdCB3aWxsIGJlIGZyZWVkIG9uIHRoZSBuZXh0IGNhbGwgdG8gXGZCZmllbGRfYnVmZmVyXGZQIHRvIHJldHVybiB0aGUKK3NhbWUgYnVmZmVyLgorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vZm9ybV9maWVsZF9pbmZvLjN4IGIvbWFuL2Zvcm1fZmllbGRfaW5mby4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGUzMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fZmllbGRfaW5mby4zeApAQCAtMCwwICsxLDg1IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX2ZpZWxkX2luZm8uM3gsdiAxLjEwIDIwMDYvMTEvMDQgMTc6MTQ6MzEgdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZF9pbmZvIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZF9pbmZvXGZSIC0gcmV0cmlldmUgZmllbGQgY2hhcmFjdGVyaXN0aWNzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBmaWVsZF9pbmZvKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50ICpyb3dzLCBpbnQgKmNvbHMsCisgICAgICAgICAgICAgIGludCAqZnJvdywgaW50ICpmY29sLCBpbnQgKm5yb3csIGludCAqbmJ1Zik7CisuYnIKK2ludCBkeW5hbWljX2ZpZWxkX2luZm8oY29uc3QgRklFTEQgKmZpZWxkLCBpbnQgKnJvd3MsIGludCAqY29scywgaW50ICptYXgpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9pbmZvXGZSIHJldHVybnMgdGhlIHNpemVzIGFuZCBvdGhlciBhdHRyaWJ1dGVzIHBhc3NlZCBpbgordG8gdGhlIGZpZWxkIGF0IGl0cyBjcmVhdGlvbiB0aW1lLiAgVGhlIGF0dHJpYnV0ZXMgYXJlOiBoZWlnaHQsIHdpZHRoLCByb3cgb2YKK3VwcGVyLWxlZnQgY29ybmVyLCBjb2x1bW4gb2YgdXBwZXItbGVmdCBjb3JuZXIsIG51bWJlciBvZmYtc2NyZWVuIHJvd3MsIGFuZAorbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmR5bmFtaWNfZmllbGRfaW5mb1xmUiByZXR1cm5zIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZmllbGQsIGFuZAoraXRzIG1heGltdW0gcG9zc2libGUgc2l6ZS4gIElmIHRoZSBmaWVsZCBoYXMgbm8gc2l6ZSBsaW1pdCwgdGhlIGxvY2F0aW9uCithZGRyZXNzZWQgYnkgdGhlIHRoaXJkIGFyZ3VtZW50IHdpbGwgYmUgc2V0IHRvIDAuCitBIGZpZWxkIGNhbiBiZSBtYWRlIGR5bmFtaWMKK2J5IHR1cm5pbmcgb2ZmIHRoZSBcZkJPX1NUQVRJQ1xmUiBvcHRpb24gd2l0aCBcZkJmaWVsZF9vcHRzX29mZlxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpIGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJmb3JtXyIgZm9yIGRldGFpbGVkCitkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK0EgbnVsbCAoemVybyBwb2ludGVyKSBpcyBhY2NlcHRlZCBmb3IgYW55IG9mIHRoZSByZXR1cm4gdmFsdWVzLAordG8gaWdub3JlIHRoYXQgdmFsdWUuCitOb3QgYWxsIGltcGxlbWVudGF0aW9ucyBhbGxvdyB0aGlzLCBlLmcuLCBTb2xhcmlzIDIuNyBkb2VzIG5vdC4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fZmllbGRfanVzdC4zeCBiL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkNmNiMgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3gKQEAgLTAsMCArMSw3OCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZF9qdXN0LjN4LHYgMS45IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZF9qdXN0IDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZF9qdXN0XGZSIC0gcmV0cmlldmUgZmllbGQgY2hhcmFjdGVyaXN0aWNzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZmllbGRfanVzdChGSUVMRCAqZmllbGQsIGludCBqdXN0aWZpY2F0aW9uKTsKKy5icgoraW50IGZpZWxkX2p1c3QoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX2p1c3RcZlIgc2V0cyB0aGUganVzdGlmaWNhdGlvbiBhdHRyaWJ1dGUgb2YKK2EgZmllbGQ7IFxmQmZpZWxkX2p1c3RcZlIgcmV0dXJucyBhIGZpZWxkJ3MganVzdGlmaWNhdGlvbiBhdHRyaWJ1dGUuCitUaGUgYXR0cmlidXRlIG1heSBiZSBvbmUgb2YgTk9fSlVTVElGSUNBVElPTiwgSlVTVElGWV9SSUdIVCwKK0pVU1RJRllfTEVGVCwgb3IgSlVTVElGWV9DRU5URVIuCisuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCZmllbGRfanVzdFxmUiByZXR1cm5zIG9uZSBvZjogTk9fSlVTVElGSUNBVElPTiwKK0pVU1RJRllfUklHSFQsIEpVU1RJRllfTEVGVCwgb3IgSlVTVElGWV9DRU5URVIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfanVzdFxmUiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fZmllbGRfbmV3LjN4IGIvbWFuL2Zvcm1fZmllbGRfbmV3LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTVkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9maWVsZF9uZXcuM3gKQEAgLTAsMCArMSwxMDYgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGRfbmV3LjN4LHYgMS4xNiAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGRfbmV3IDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZF9uZXdcZlIgLSBjcmVhdGUgYW5kIGRlc3Ryb3kgZm9ybSBmaWVsZHMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgorRklFTEQgKm5ld19maWVsZChpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgIGludCB0b3Byb3csIGludCBsZWZ0Y29sLAorICAgICAgICAgICAgICAgICBpbnQgb2Zmc2NyZWVuLCBpbnQgbmJ1ZmZlcnMpOworLmJyCitGSUVMRCAqZHVwX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IHRvcHJvdywgaW50IGxlZnRjb2wpOworLmJyCitGSUVMRCAqbGlua19maWVsZChGSUVMRCAqZmllbGQsIGludCB0b3Byb3csIGludCBsZWZ0Y29sKTsKKy5icgoraW50IGZyZWVfZmllbGQoRklFTEQgKmZpZWxkKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCbmV3X2ZpZWxkXGZSIGFsbG9jYXRlcyBhIG5ldyBmaWVsZCBhbmQgaW5pdGlhbGl6ZXMgaXQgZnJvbSB0aGUKK3BhcmFtZXRlcnMgZ2l2ZW46IGhlaWdodCwgd2lkdGgsIHJvdyBvZiB1cHBlci1sZWZ0IGNvcm5lciwgY29sdW1uIG9mIHVwcGVyLWxlZnQKK2Nvcm5lciwgbnVtYmVyIG9mZi1zY3JlZW4gcm93cywgYW5kIG51bWJlciBvZiBhZGRpdGlvbmFsIHdvcmtpbmcgYnVmZmVycy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmR1cF9maWVsZFxmUiBkdXBsaWNhdGVzIGEgZmllbGQgYXQgYSBuZXcgbG9jYXRpb24uICBNb3N0CithdHRyaWJ1dGVzIChpbmNsdWRpbmcgY3VycmVudCBjb250ZW50cywgc2l6ZSwgdmFsaWRhdGlvbiB0eXBlLCBidWZmZXIgY291bnQsCitncm93dGggdGhyZXNob2xkLCBqdXN0aWZpY2F0aW9uLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBwYWQgY2hhcmFjdGVyLAorb3B0aW9ucywgYW5kIHVzZXIgcG9pbnRlcikgYXJlIGNvcGllZC4gIEZpZWxkIHN0YXR1cyBhbmQgdGhlIGZpZWxkIHBhZ2UgYml0IGFyZQorbm90IGNvcGllZC4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmxpbmtfZmllbGRcZlIgYWN0cyBsaWtlIFxmQmR1cF9maWVsZFxmUiwgYnV0IHRoZSBuZXcgZmllbGQKK3NoYXJlcyBidWZmZXJzIHdpdGggaXRzIHBhcmVudC4gIEF0dHJpYnV0ZSBkYXRhIGlzIHNlcGFyYXRlLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZnJlZV9maWVsZFxmUiBkZS1hbGxvY2F0ZXMgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggYSBmaWVsZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiwgXGZCbmV3X2ZpZWxkXGZSLCBcZkJkdXBfZmllbGRcZlIsIFxmQmxpbmtfZmllbGRcZlIgcmV0dXJuCitcZkJOVUxMXGZSIG9uIGVycm9yLgorVGhleSBzZXQgZXJybm8gYWNjb3JkaW5nIHRvIHRoZWlyIHN1Y2Nlc3M6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCwgZS5nLiwgbWFsbG9jIGZhaWx1cmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX2ZpZWxkXGZSIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9DT05ORUNURUQKK2ZpZWxkIGlzIGNvbm5lY3RlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlBQCitJdCBtYXkgYmUgdW53aXNlIHRvIGNvdW50IG9uIHRoZSBzZXQgb2YgYXR0cmlidXRlcyBjb3BpZWQgYnkKK1xmQmR1cF9maWVsZFxmUiBiZWluZyBwb3J0YWJsZTsgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkgZG9jdW1lbnRzIGFyZQorbm90IHZlcnkgZXhwbGljaXQgYWJvdXQgd2hhdCBnZXRzIGNvcGllZCBhbmQgd2hhdCBkb2VzIG5vdC4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fZmllbGRfb3B0cy4zeCBiL21hbi9mb3JtX2ZpZWxkX29wdHMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwNTI3OQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX2ZpZWxkX29wdHMuM3gKQEAgLTAsMCArMSwxMjQgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGRfb3B0cy4zeCx2IDEuMTMgMjAwNy8wMi8yNCAxNzozNDoyNyB0b20gRXhwICQKKy5USCBmb3JtX2ZpZWxkX29wdHMgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2ZpZWxkX29wdHNcZlIgLSBzZXQgYW5kIGdldCBmaWVsZCBvcHRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZmllbGRfb3B0cyhGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgb3B0cyk7CisuYnIKK2ludCBmaWVsZF9vcHRzX29uKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IGZpZWxkX29wdHNfb2ZmKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKy5icgorRmllbGRfT3B0aW9ucyBmaWVsZF9vcHRzKGNvbnN0IEZJRUxEICpmaWVsZCk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF9vcHRzXGZSIHNldHMgYWxsIHRoZSBnaXZlbiBmaWVsZCdzIG9wdGlvbiBiaXRzIChmaWVsZAorb3B0aW9uIGJpdHMgbWF5IGJlIGxvZ2ljYWxseS1PUidlZCB0b2dldGhlcikuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9vcHRzX29uXGZSIHR1cm5zIG9uIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZmllbGRfb3B0c19vZmZcZlIgdHVybnMgb2ZmIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZmllbGRfb3B0c1xmUiByZXR1cm5zIHRoZSBmaWVsZCdzIGN1cnJlbnQgb3B0aW9uIGJpdHMuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZGVmaW5lZCAoYWxsIGFyZSBvbiBieSBkZWZhdWx0KToKKy5UUCA1CitPX1ZJU0lCTEUKK1RoZSBmaWVsZCBpcyBkaXNwbGF5ZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBvZmYsIGRpc3BsYXkgb2YgdGhlIGZpZWxkIGlzCitzdXBwcmVzc2VkLgorLlRQIDUKK09fQUNUSVZFCitUaGUgZmllbGQgaXMgdmlzaXRlZCBkdXJpbmcgcHJvY2Vzc2luZy4gIElmIHRoaXMgb3B0aW9uIGlzIG9mZiwgdGhlIGZpZWxkIHdpbGwKK25vdCBiZSByZWFjaGFibGUgYnkgbmF2aWdhdGlvbiBrZXlzLiBQbGVhc2Ugbm90aWNlIHRoYXQgYW4gaW52aXNpYmxlIGZpZWxkCithcHBlYXJzIHRvIGJlIGluYWN0aXZlIGFsc28uCisuVFAgNQorT19QVUJMSUMKK1RoZSBmaWVsZCBjb250ZW50cyBhcmUgZGlzcGxheWVkIGFzIGRhdGEgaXMgZW50ZXJlZC4KKy5UUCA1CitPX0VESVQKK1RoZSBmaWVsZCBjYW4gYmUgZWRpdGVkLgorLlRQIDUKK09fV1JBUAorV29yZHMgdGhhdCBkbyBub3QgZml0IG9uIGEgbGluZSBhcmUgd3JhcHBlZCB0byB0aGUgbmV4dCBsaW5lLiAgV29yZHMgYXJlCitibGFuay1zZXBhcmF0ZWQuCisuVFAgNQorT19CTEFOSworVGhlIGZpZWxkIGlzIGNsZWFyZWQgd2hlbmV2ZXIgYSBjaGFyYWN0ZXIgaXMgZW50ZXJlZCBhdCB0aGUgZmlyc3QgcG9zaXRpb24uCisuVFAgNQorT19BVVRPU0tJUAorU2tpcCB0byB0aGUgbmV4dCBmaWVsZCB3aGVuIHRoaXMgb25lIGZpbGxzLgorLlRQIDUKK09fTlVMTE9LCitBbGxvdyBhIGJsYW5rIGZpZWxkLgorLlRQIDUKK09fU1RBVElDCitGaWVsZCBidWZmZXJzIGFyZSBmaXhlZCB0byBmaWVsZCdzIG9yaWdpbmFsIHNpemUuCitUdXJuIHRoaXMgb3B0aW9uIG9mZiB0byBjcmVhdGUgYSBkeW5hbWljIGZpZWxkLgorLlRQIDUKK09fUEFTU09LCitWYWxpZGF0ZSBmaWVsZCBvbmx5IGlmIG1vZGlmaWVkIGJ5IHVzZXIuCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgZm9yIFxmQmZpZWxkX29wdHNcZlIsIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQ1VSUkVOVAorVGhlIGZpZWxkIGlzIHRoZSBjdXJyZW50IGZpZWxkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlRQIDUKKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3ggYi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjllZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4CkBAIC0wLDAgKzEsNjkgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGRfdXNlcnB0ci4zeCx2IDEuOCAyMDA2LzExLzA0IDE4OjA0OjM3IHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGRfdXNlcnB0ciAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZmllbGRfdXNlcnB0clxmUiAtIGFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggYSBmb3JtIGZpZWxkCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQsIHZvaWQqdXNlcnB0cik7CisuYnIKK3ZvaWQgKmZpZWxkX3VzZXJwdHIoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBmb3JtIGZpZWxkIGhhcyBhIGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaG9sZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkYXRhCisodGhhdCBpcywgdGhlIGZvcm0tZHJpdmVyIGNvZGUgbGVhdmVzIGl0IGFsb25lKS4gIFRoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldAordGhhdCBmaWVsZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF91c2VycHRyXGZSIHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUgXGZCTlVMTFxmUikuCitJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfdXNlcnB0clxmUiByZXR1cm5zIFxmQkVfT0tcZlAgKHN1Y2Nlc3MpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK1RoZSB1c2VyIHBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIuCitXZSBjaG9zZSBub3QgdG8gbGVhdmUgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeCBiL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhNTJlZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gKQEAgLTAsMCArMSwxNDQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4LHYgMS4xNiAyMDA2LzEyLzI0IDE2OjA4OjA4IHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGRfdmFsaWRhdGlvbiAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZmllbGRfdmFsaWRhdGlvblxmUiAtIGRhdGEgdHlwZSB2YWxpZGF0aW9uIGZvciBmaWVsZHMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgRklFTERUWVBFICp0eXBlLCAuLi4pOworLmJyCitGSUVMRFRZUEUgKmZpZWxkX3R5cGUoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgordm9pZCAqZmllbGRfYXJnKGNvbnN0IEZJRUxEICpmaWVsZCk7Cisuc3AKK0ZJRUxEVFlQRSAqVFlQRV9BTE5VTTsKKy5icgorRklFTERUWVBFICpUWVBFX0FMUEhBOworLmJyCitGSUVMRFRZUEUgKlRZUEVfRU5VTTsKKy5icgorRklFTERUWVBFICpUWVBFX0lOVEVHRVI7CisuYnIKK0ZJRUxEVFlQRSAqVFlQRV9OVU1FUklDOworLmJyCitGSUVMRFRZUEUgKlRZUEVfUkVHRVhQOworLmJyCitGSUVMRFRZUEUgKlRZUEVfSVBWNDsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX3R5cGVcZlIgZGVjbGFyZXMgYSBkYXRhIHR5cGUgZm9yIGEgZ2l2ZW4gZm9ybSBmaWVsZC4KK1RoaXMgaXMgdGhlIHR5cGUgY2hlY2tlZCBieSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KK1RoZSBwcmVkZWZpbmVkIHR5cGVzIGFyZSBhcyBmb2xsb3dzOgorLlRQIDUKK1RZUEVfQUxOVU0KK0FscGhhbnVtZXJpYyBkYXRhLiAgUmVxdWlyZXMgYSB0aGlyZCBcZkJpbnRcZlIgYXJndW1lbnQsIGEgbWluaW11bSBmaWVsZCB3aWR0aC4KKy5UUCA1CitUWVBFX0FMUEhBCitDaGFyYWN0ZXIgZGF0YS4gIFJlcXVpcmVzIGEgdGhpcmQgXGZCaW50XGZSIGFyZ3VtZW50LCBhIG1pbmltdW0gZmllbGQgd2lkdGguCisuVFAgNQorVFlQRV9FTlVNCitBY2NlcHQgb25lIG9mIGEgc3BlY2lmaWVkIHNldCBvZiBzdHJpbmdzLiAgUmVxdWlyZXMgYSB0aGlyZCBcZkIoY2hhciAqKilcZlIKK2FyZ3VtZW50IHBvaW50aW5nIHRvIGEgc3RyaW5nIGxpc3Q7IGEgZm91cnRoIFxmQmludFxmUiBmbGFnIGFyZ3VtZW50IHRvIGVuYWJsZQorY2FzZS1zZW5zaXRpdml0eTsgYW5kIGEgZmlmdGggXGZCaW50XGZSIGZsYWcgYXJndW1lbnQgc3BlY2lmeWluZyB3aGV0aGVyIGEgcGFydGlhbAorbWF0Y2ggbXVzdCBiZSBhIHVuaXF1ZSBvbmUgKGlmIHRoaXMgZmxhZyBpcyBvZmYsIGEgcHJlZml4IG1hdGNoZXMgdGhlIGZpcnN0CitvZiBhbnkgc2V0IG9mIG1vcmUgdGhhbiBvbmUgbGlzdCBlbGVtZW50cyB3aXRoIHRoYXQgcHJlZml4KS4gUGxlYXNlIG5vdGljZQordGhhdCB0aGUgc3RyaW5nIGxpc3QgaXMgbm90IGNvcGllZCwgb25seSBhIHJlZmVyZW5jZSB0byBpdCBpcyBzdG9yZWQgaW4gdGhlCitmaWVsZC4gU28geW91IHNob3VsZCBhdm9pZCB1c2luZyBhIGxpc3QgdGhhdCBsaXZlcyBpbiBhdXRvbWF0aWMgdmFyaWFibGVzCitvbiB0aGUgc3RhY2suCisuVFAgNQorVFlQRV9JTlRFR0VSCitJbnRlZ2VyIGRhdGEsIHBhcnNhYmxlIHRvIGFuIGludGVnZXIgYnkgXGZCYXRvaSgzKVxmUi4gIFJlcXVpcmVzIGEgdGhpcmQKK1xmQmludFxmUiBhcmd1bWVudCBjb250cm9sbGluZyB0aGUgcHJlY2lzaW9uLCBhIGZvdXJ0aCBcZkJsb25nXGZSIGFyZ3VtZW50Citjb25zdHJhaW5pbmcgbWluaW11bSB2YWx1ZSwgYW5kIGEgZmlmdGggXGZCbG9uZ1xmUiBjb25zdHJhaW5pbmcgbWF4aW11bSB2YWx1ZS4KK0lmIHRoZSBtYXhpbXVtIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSB2YWx1ZSwgdGhlIHJhbmdlIGlzCitzaW1wbHkgaWdub3JlZC4gT24gcmV0dXJuIHRoZSBmaWVsZCBidWZmZXIgaXMgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUKK1xmQnByaW50ZlxmUiBmb3JtYXQgc3BlY2lmaWNhdGlvbiAiLipsZCIsIHdoZXJlIHRoZSAnKicgaXMgcmVwbGFjZWQgYnkgdGhlCitwcmVjaXNpb24gYXJndW1lbnQuCitGb3IgZGV0YWlscyBvZiB0aGUgcHJlY2lzaW9uIGhhbmRsaW5nIHNlZSBcZkJwcmludGYnc1xmUiBtYW4tcGFnZS4KKy5UUCA1CitUWVBFX05VTUVSSUMKK051bWVyaWMgZGF0YSAobWF5IGhhdmUgYSBkZWNpbWFsLXBvaW50IHBhcnQpLiBSZXF1aXJlcyBhIHRoaXJkCitcZkJpbnRcZlIgYXJndW1lbnQgY29udHJvbGxpbmcgdGhlIHByZWNpc2lvbiwgYSBmb3VydGggXGZCZG91YmxlXGZSCithcmd1bWVudCBjb25zdHJhaW5pbmcgbWluaW11bSB2YWx1ZSwgYW5kIGEgZmlmdGggXGZCZG91YmxlXGZSIGNvbnN0cmFpbmluZworbWF4aW11bSB2YWx1ZS4gSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgbG9jYWxlcywgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyCit0byBiZSB1c2VkIG11c3QgYmUgdGhlIG9uZSBzcGVjaWZpZWQgYnkgeW91ciBsb2NhbGUuCitJZiB0aGUgbWF4aW11bSB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0gdmFsdWUsIHRoZSByYW5nZSBpcworc2ltcGx5IGlnbm9yZWQuIE9uIHJldHVybiB0aGUgZmllbGQgYnVmZmVyIGlzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlCitcZkJwcmludGZcZlIgZm9ybWF0IHNwZWNpZmljYXRpb24gIi4qZiIsIHdoZXJlIHRoZSAnKicgaXMgcmVwbGFjZWQgYnkgdGhlCitwcmVjaXNpb24gYXJndW1lbnQuCitGb3IgZGV0YWlscyBvZiB0aGUgcHJlY2lzaW9uIGhhbmRsaW5nIHNlZSBcZkJwcmludGYnc1xmUiBtYW4tcGFnZS4KKy5UUCA1CitUWVBFX1JFR0VYUAorUmVndWxhciBleHByZXNzaW9uIGRhdGEuICBSZXF1aXJlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBcZkIoY2hhciAqKVxmUiB0aGlyZCBhcmd1bWVudDsKK3RoZSBkYXRhIGlzIHZhbGlkIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcyBpdC4gIFJlZ3VsYXIgZXhwcmVzc2lvbnMKK2FyZSBpbiB0aGUgZm9ybWF0IG9mIFxmQnJlZ2NvbXBcZlIgYW5kIFxmQnJlZ2V4ZWNcZlIuIFBsZWFzZSBub3RpY2UKK3RoYXQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtdXN0IG1hdGNoIHRoZSB3aG9sZSBmaWVsZC4gSWYgeW91IGhhdmUgZm9yCitleGFtcGxlIGFuIGVpZ2h0IGNoYXJhY3RlciB3aWRlIGZpZWxkLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiAiXlswLTldKiQiIGFsd2F5cworbWVhbnMgdGhhdCB5b3UgaGF2ZSB0byBmaWxsIGFsbCBlaWdodCBwb3NpdGlvbnMgd2l0aCBkaWdpdHMuIElmIHlvdSB3YW50IHRvCithbGxvdyBmZXdlciBkaWdpdHMsIHlvdSBtYXkgdXNlIGZvciBleGFtcGxlICJeWzAtOV0qICokIiB3aGljaCBpcyBnb29kIGZvcgordHJhaWxpbmcgc3BhY2VzICh1cCB0byBhbiBlbXB0eSBmaWVsZCksIG9yICJeICpbMC05XSogKiQiIHdoaWNoIGlzIGdvb2QgZm9yCitsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgYXJvdW5kIHRoZSBkaWdpdHMuCisuVFAgNQorVFlQRV9JUFY0CitBbiBJbnRlcm5ldCBQcm90b2NvbCBWZXJzaW9uIDQgYWRkcmVzcy4gVGhpcyByZXF1aXJlcyBubyBhZGRpdGlvbmFsIGFyZ3VtZW50LiBJdAoraXMgY2hlY2tlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYnVmZmVyIGhhcyB0aGUgZm9ybSBhLmIuYy5kLCB3aGVyZSBhLGIsYyBhbmQgZCBhcmUKK251bWJlcnMgYmV0d2VlbiAwIGFuZCAyNTUuIFRyYWlsaW5nIGJsYW5rcyBpbiB0aGUgYnVmZmVyIGFyZSBpZ25vcmVkLiBUaGUgYWRkcmVzcworaXRzZWxmIGlzIG5vdCB2YWxpZGF0ZWQuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBuY3Vyc2VzIGV4dGVuc2lvbi4gVGhpcworZmllbGQgdHlwZSBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbiBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLgorLlBQCitJdCBpcyBwb3NzaWJsZSB0byBzZXQgdXAgbmV3IHByb2dyYW1tZXItZGVmaW5lZCBmaWVsZCB0eXBlcy4gIFNlZSB0aGUKK1xmQmZvcm1fZmllbGR0eXBlXGZSKDNYKSBtYW51YWwgcGFnZS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbnMgXGZCZmllbGRfdHlwZVxmUiBhbmQgXGZCZmllbGRfYXJnXGZSIHJldHVybiBcZkJOVUxMXGZSIG9uCitlcnJvci4gVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF90eXBlXGZSIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fZmllbGR0eXBlLjN4IGIvbWFuL2Zvcm1fZmllbGR0eXBlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDJmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9maWVsZHR5cGUuM3gKQEAgLTAsMCArMSwxNDggQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGR0eXBlLjN4LHYgMS4xNCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGR0eXBlIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZHR5cGVcZlIgLSBkZWZpbmUgdmFsaWRhdGlvbi1maWVsZCB0eXBlcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoCisgICAgYm9vbCAoKiBjb25zdCBmaWVsZF9jaGVjaykoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSwKKyAgICBib29sICgqIGNvbnN0IGNoYXJfY2hlY2spKGludCwgY29uc3Qgdm9pZCAqKSk7CisuYnIKK2ludCBmcmVlX2ZpZWxkdHlwZShGSUVMRFRZUEUgKmZpZWxkdHlwZSk7CisuYnIKK2ludCBzZXRfZmllbGR0eXBlX2FyZygKKyAgICBGSUVMRFRZUEUgKmZpZWxkdHlwZSwKKyAgICB2b2lkICooKiBjb25zdCBtYWtlX2FyZykodmFfbGlzdCAqKSwKKyAgICB2b2lkICooKiBjb25zdCBjb3B5X2FyZykoY29uc3Qgdm9pZCAqKSwKKyAgICB2b2lkICAoKiBjb25zdCBmcmVlX2FyZykodm9pZCAqKSk7CisuYnIKK2ludCBzZXRfZmllbGR0eXBlX2Nob2ljZSgKKyAgICBGSUVMRFRZUEUgKmZpZWxkdHlwZSwKKyAgICBib29sICgqIGNvbnN0IG5leHRfY2hvaWNlKShGSUVMRCAqLCBjb25zdCB2b2lkICopLAorICAgIGJvb2wgKCogY29uc3QgcHJldl9jaG9pY2UpKEZJRUxEICosIGNvbnN0IHZvaWQgKikpOworLmJyCitGSUVMRFRZUEUgKmxpbmtfZmllbGR0eXBlKEZJRUxEVFlQRSAqdHlwZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqdHlwZTIpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJuZXdfZmllbGR0eXBlXGZSIGNyZWF0ZXMgYSBuZXcgZmllbGQgdHlwZSB1c2FibGUgZm9yIGRhdGEKK3ZhbGlkYXRpb24uICBZb3Ugc3VwcGx5IGl0IHdpdGggXGZJZmllbGRfY2hlY2tcZlIsIGEgcHJlZGljYXRlIHRvIGNoZWNrIHRoZQordmFsaWRpdHkgb2YgYW4gZW50ZXJlZCBkYXRhIHN0cmluZyB3aGVuZXZlciB0aGUgdXNlciBhdHRlbXB0cyB0byBsZWF2ZSBhIGZpZWxkLgorVGhlIChGSUVMRCAqKSBhcmd1bWVudCBpcyBwYXNzZWQgaW4gc28gdGhlIHZhbGlkYXRpb24gcHJlZGljYXRlIGNhbiBzZWUgdGhlCitmaWVsZCdzIGJ1ZmZlciwgc2l6ZXMgYW5kIG90aGVyIGF0dHJpYnV0ZXM7IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYW4KK2FyZ3VtZW50LWJsb2NrIHN0cnVjdHVyZSwgYWJvdXQgd2hpY2ggbW9yZSBiZWxvdy4KKy5QUAorWW91IGFsc28gc3VwcGx5IFxmQm5ld19maWVsZHR5cGVcZlIgd2l0aCBcZkljaGFyX2NoZWNrXGZSLAorYSBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBjaGFyYWN0ZXJzIGFzIHRoZXkgYXJlIGVudGVyZWQ7IGl0IHdpbGwgYmUgcGFzc2VkCit0aGUgY2hhcmFjdGVyIHRvIGJlIGNoZWNrZWQgYW5kIGEgcG9pbnRlciB0byBhbiBhcmd1bWVudC1ibG9jayBzdHJ1Y3R1cmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX2ZpZWxkdHlwZVxmUiBmcmVlcyB0aGUgc3BhY2UgYWxsb2NhdGVkIGZvciBhIGdpdmVuCit2YWxpZGF0aW9uIHR5cGUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGR0eXBlX2FyZ1xmUiBhc3NvY2lhdGVzIHRocmVlIHN0b3JhZ2UtbWFuYWdlbWVudCBmdW5jdGlvbnMKK3dpdGggYSBmaWVsZCB0eXBlLgorVGhlIFxmSW1ha2VfYXJnXGZSIGZ1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgYXBwbGllZCB0byB0aGUKK2xpc3Qgb2YgYXJndW1lbnRzIHlvdSBnaXZlIFxmQnNldF9maWVsZF90eXBlXGZSIHdoZW4gYXR0YWNoaW5nIHZhbGlkYXRpb24KK3RvIGEgZmllbGQ7IGl0cyBqb2IgaXMgdG8gYnVuZGxlIHRoZXNlIGludG8gYW4gYWxsb2NhdGVkIGFyZ3VtZW50LWJsb2NrCitvYmplY3Qgd2hpY2ggY2FuIGxhdGVyIGJlIHBhc3NlZCB0byB2YWxpZGF0aW9uIHByZWRpY2F0ZWQuCitUaGUgb3RoZXIgdHdvIGhvb2sgYXJndW1lbnRzIHNob3VsZCBjb3B5IGFuZCBmcmVlIGFyZ3VtZW50LWJsb2NrIHN0cnVjdHVyZXMuCitUaGV5IHdpbGwgYmUgdXNlZCBieSB0aGUgZm9ybXMtZHJpdmVyIGNvZGUuCitZb3UgbXVzdCBzdXBwbHkgdGhlIFxmSW1ha2VfYXJnXGZSIGZ1bmN0aW9uLAordGhlIG90aGVyIHR3byBhcmUgb3B0aW9uYWwsIHlvdSBtYXkgc3VwcGx5IE5VTEwgZm9yIHRoZW0uCitJbiB0aGlzIGNhc2UgaXQgaXMgYXNzdW1lZAordGhhdCBcZkltYWtlX2FyZ1xmUiBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYnV0IHNpbXBseSBsb2FkcyB0aGUKK2FyZ3VtZW50IGludG8gYSBzaW5nbGUgc2NhbGFyIHZhbHVlLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbGlua19maWVsZHR5cGVcZlIgY3JlYXRlcworYSBuZXcgZmllbGQgdHlwZSBmcm9tIHRoZSB0d28gZ2l2ZW4gdHlwZXMuCitUaGV5IGFyZSBjb25uZWN0ZWQgYnkgYW4gbG9naWNhbCAnT1InLgorLlBQCitUaGUgZm9ybSBkcml2ZXIgcmVxdWVzdHMgXGZCUkVRX05FWFRfQ0hPSUNFXGZSIGFuZCBcZkJSRVFfUFJFVl9DSE9JQ0VcZlIgYXNzdW1lCit0aGF0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgYSBmaWVsZCBmb3JtIGFuIG9yZGVyZWQgc2V0LCBhbmQgcHJvdmlkZSB0aGUgZm9ybXMKK3VzZXIgd2l0aCBhIHdheSB0byBtb3ZlIHRocm91Z2ggdGhlIHNldC4KK1RoZSBcZkJzZXRfZmllbGR0eXBlX2Nob2ljZVxmUgorZnVuY3Rpb24gYWxsb3dzIGZvcm1zIHByb2dyYW1tZXJzIHRvIGRlZmluZSBzdWNjZXNzb3IgYW5kIHByZWRlY2Vzc29yIGZ1bmN0aW9ucworZm9yIHRoZSBmaWVsZCB0eXBlLgorVGhlc2UgZnVuY3Rpb25zIHRha2UgdGhlIGZpZWxkIHBvaW50ZXIgYW5kIGFuCithcmd1bWVudC1ibG9jayBzdHJ1Y3R1cmUgYXMgYXJndW1lbnRzLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIHBvaW50ZXItdmFsdWVkIHJvdXRpbmVzIHJldHVybiBOVUxMIG9uIGVycm9yLgorVGhleSBzZXQgZXJybm8gYWNjb3JkaW5nIHRvIHRoZWlyIHN1Y2Nlc3M6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCwgZS5nLiwgbWFsbG9jIGZhaWx1cmUuCisuUFAKK1RoZSBpbnRlZ2VyLXZhbHVlZCByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgb24KK2Vycm9yOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQ09OTkVDVEVECitUaGUgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBmb3JtLgorLlRQIDUKKy5CIEVfQ1VSUkVOVAorVGhlIGZpZWxkIGlzIHRoZSBjdXJyZW50IGZpZWxkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuUFAKK0FsbCBvZiB0aGUgXGZCKGNoYXIgKilcZlIgYXJndW1lbnRzIG9mIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYWN0dWFsbHkgYmUKK1xmQih2b2lkICopXGZSLiAgVGhlIHR5cGUgaGFzIGJlZW4gbGVmdCB1bmNvcnJlY3RlZCBmb3Igc3RyaWN0IGNvbXBhdGliaWxpdHkKK3dpdGggU3lzdGVtIFYuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1faG9vay4zeCBiL21hbi9mb3JtX2hvb2suM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0N2EyNAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX2hvb2suM3gKQEAgLTAsMCArMSwxMDAgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1faG9vay4zeCx2IDEuOSAyMDA3LzAyLzI0IDE3OjM0OjE4IHRvbSBFeHAgJAorLlRIIGZvcm1faG9vayAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1faG9va1xmUiAtIHNldCBob29rcyBmb3IgYXV0b21hdGljIGludm9jYXRpb24gYnkgYXBwbGljYXRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZmllbGRfaW5pdChGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisuYnIKK0Zvcm1fSG9vayBmaWVsZF9pbml0KGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCitpbnQgc2V0X2ZpZWxkX3Rlcm0oRk9STSAqZm9ybSwgRm9ybV9Ib29rIGZ1bmMpOworLmJyCitGb3JtX0hvb2sgZmllbGRfdGVybShjb25zdCBGT1JNICpmb3JtKTsKKy5icgoraW50IHNldF9mb3JtX2luaXQoRk9STSAqZm9ybSwgRm9ybV9Ib29rIGZ1bmMpOworLmJyCitGb3JtX0hvb2sgZm9ybV9pbml0KGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCitpbnQgc2V0X2Zvcm1fdGVybShGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisuYnIKK0Zvcm1fSG9vayBmb3JtX3Rlcm0oY29uc3QgRk9STSAqZm9ybSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIG1ha2UgaXQgcG9zc2libGUgdG8gc2V0IGhvb2sgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBhdCB2YXJpb3VzCitwb2ludHMgaW4gdGhlIGF1dG9tYXRpYyBwcm9jZXNzaW5nIG9mIGlucHV0IGV2ZW50IGNvZGVzIGJ5IFxmQmZvcm1fZHJpdmVyXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX2luaXRcZlIgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0IGZvcm0tcG9zdCB0aW1lCithbmQgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBmaWVsZCBjaGFuZ2VzIChhZnRlciB0aGUgY2hhbmdlKS4gIFxmQmZpZWxkX2luaXRcZlIKK3JldHVybnMgdGhlIGN1cnJlbnQgZmllbGQgaW5pdCBob29rLCBpZiBhbnkgKFxmQk5VTExcZlIgaWYgdGhlcmUgaXMgbm8gc3VjaAoraG9vaykuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfdGVybVxmUiBzZXRzIGEgaG9vayB0byBiZSBjYWxsZWQgYXQgZm9ybS11bnBvc3QgdGltZQorYW5kIGVhY2ggdGltZSB0aGUgc2VsZWN0ZWQgZmllbGQgY2hhbmdlcyAoYmVmb3JlIHRoZSBjaGFuZ2UpLiAgXGZCZmllbGRfdGVybVxmUgorcmV0dXJucyB0aGUgY3VycmVudCBmaWVsZCB0ZXJtIGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZSBpcyBubyBzdWNoCitob29rKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9mb3JtX2luaXRcZlIgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0IGZvcm0tcG9zdCB0aW1lIGFuZAoranVzdCBhZnRlciBhIHBhZ2UgY2hhbmdlIG9uY2UgaXQgaXMgcG9zdGVkLiAgXGZCZm9ybV9pbml0XGZSIHJldHVybnMgdGhlCitjdXJyZW50IGZvcm0gaW5pdCBob29rLCBpZiBhbnkgKFxmQk5VTExcZlIgaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9mb3JtX3Rlcm1cZlIgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0IGZvcm0tdW5wb3N0IHRpbWUKK2FuZCBqdXN0IGJlZm9yZSBhIHBhZ2UgY2hhbmdlIG9uY2UgaXQgaXMgcG9zdGVkLiAgXGZCZm9ybV9pbml0XGZSCityZXR1cm5zIHRoZSBjdXJyZW50IGZvcm0gdGVybSBob29rLCBpZiBhbnkgKFxmQk5VTExcZlIgaWYgdGhlcmUgaXMgbm8gc3VjaAoraG9vaykuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4gIE90aGVyIHJvdXRpbmVzCityZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fbmV3LjN4IGIvbWFuL2Zvcm1fbmV3LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzRmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9uZXcuM3gKQEAgLTAsMCArMSw4OSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9uZXcuM3gsdiAxLjcgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwICQKKy5USCBmb3JtX25ldyAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fbmV3XGZSIC0gY3JlYXRlIGFuZCBkZXN0cm95IGZvcm1zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK0ZPUk0gKm5ld19mb3JtKEZJRUxEICoqZmllbGRzKTsKKy5icgoraW50IGZyZWVfZm9ybShGT1JNICpmb3JtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCbmV3X2Zvcm1cZlIgY3JlYXRlcyBhIG5ldyBmb3JtIGNvbm5lY3RlZCB0byBhIHNwZWNpZmllZCBmaWVsZAorcG9pbnRlciBhcnJheSAod2hpY2ggbXVzdCBiZSBcZkJOVUxMXGZSLXRlcm1pbmF0ZWQpLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZnJlZV9mb3JtXGZSIGRpc2Nvbm5lY3RzIFxmSWZvcm1cZlIgZnJvbSBpdHMgZmllbGQgYXJyYXkKK2FuZCBmcmVlcyB0aGUgc3RvcmFnZSBhbGxvY2F0ZWQgZm9yIHRoZSBmb3JtLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQm5ld19mb3JtXGZSIHJldHVybnMgXGZCTlVMTFxmUiBvbiBlcnJvci4KK0l0IHNldHMgZXJybm8gYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbidzIHN1Y2Nlc3M6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9DT05ORUNURUQKK1RoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCwgZS5nLiwgbWFsbG9jIGZhaWx1cmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX2Zvcm1cZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1BPU1RFRAorVGhlIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBwb3N0ZWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fbmV3X3BhZ2UuM3ggYi9tYW4vZm9ybV9uZXdfcGFnZS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjdmNThkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fbmV3X3BhZ2UuM3gKQEAgLTAsMCArMSw3NyBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9uZXdfcGFnZS4zeCx2IDEuOCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIGZvcm1fbmV3X3BhZ2UgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX25ld19wYWdlXGZSIC0gZm9ybSBwYWdpbmF0aW9uIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgc2V0X25ld19wYWdlKEZJRUxEICpmaWVsZCwgYm9vbCBuZXdfcGFnZV9mbGFnKTsKKy5icgorYm9vbCBuZXdfcGFnZShjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfbmV3X3BhZ2VcZlIgc2V0cyBvciByZXNldHMgYSBmbGFnIG1hcmtpbmcgdGhlIGdpdmVuIGZpZWxkCithcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHBhZ2Ugb24gaXRzIGZvcm0uCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJuZXdfcGFnZVxmUiBpcyBhIHByZWRpY2F0ZSB3aGljaCB0ZXN0cyBpZiBhIGdpdmVuIGZpZWxkIG1hcmtzCithIHBhZ2UgYmVnaW5uaW5nIG9uIGl0cyBmb3JtLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQm5ld19wYWdlXGZSIHJldHVybnMgXGZCVFJVRVxmUiBvciBcZkJGQUxTRVxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9uZXdfcGFnZVxmUiByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9DT05ORUNURUQKK1RoZSBnaXZlbiBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fb3B0cy4zeCBiL21hbi9mb3JtX29wdHMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhYWFlNwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX29wdHMuM3gKQEAgLTAsMCArMSw5MCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9vcHRzLjN4LHYgMS45IDIwMDcvMDIvMjQgMTc6MzQ6MzYgdG9tIEV4cCAkCisuVEggZm9ybV9vcHRzIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9vcHRzXGZSIC0gc2V0IGFuZCBnZXQgZm9ybSBvcHRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZm9ybV9vcHRzKEZPUk0gKmZvcm0sIEZpZWxkX09wdGlvbnMgb3B0cyk7CisuYnIKK2ludCBmb3JtX29wdHNfb24oRk9STSAqZm9ybSwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IGZvcm1fb3B0c19vZmYoRk9STSAqZm9ybSwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKy5icgorRmllbGRfT3B0aW9ucyBmb3JtX29wdHMoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9mb3JtX29wdHNcZlIgc2V0cyBhbGwgdGhlIGdpdmVuIGZvcm0ncyBvcHRpb24gYml0cyAoZm9ybQorb3B0aW9uIGJpdHMgbWF5IGJlIGxvZ2ljYWxseS1PUidlZCB0b2dldGhlcikuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmb3JtX29wdHNfb25cZlIgdHVybnMgb24gdGhlIGdpdmVuIG9wdGlvbiBiaXRzLCBhbmQgbGVhdmVzCitvdGhlcnMgYWxvbmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmb3JtX29wdHNfb2ZmXGZSIHR1cm5zIG9mZiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsIGFuZCBsZWF2ZXMKK290aGVycyBhbG9uZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fb3B0c1xmUiByZXR1cm5zIHRoZSBmb3JtJ3MgY3VycmVudCBvcHRpb24gYml0cy4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBkZWZpbmVkIChhbGwgYXJlIG9uIGJ5IGRlZmF1bHQpOgorLlRQIDUKK09fTkxfT1ZFUkxPQUQKK092ZXJsb2FkIHRoZSBcZkJSRVFfTkVXX0xJTkVcZlIgZm9ybXMgZHJpdmVyIHJlcXVlc3Qgc28gdGhhdCBjYWxsaW5nIGl0IGF0IHRoZQorZW5kIG9mIGEgZmllbGQgZ29lcyB0byB0aGUgbmV4dCBmaWVsZC4KKy5UUCA1CitPX0JTX09WRVJMT0FECitPdmVybG9hZCB0aGUgXGZCUkVRX0RFTF9QUkVWXGZSIGZvcm1zIGRyaXZlciByZXF1ZXN0IHNvIHRoYXQgY2FsbGluZyBpdCBhdCB0aGUKK2JlZ2lubmluZyBvZiBhIGZpZWxkIGdvZXMgdG8gdGhlIHByZXZpb3VzIGZpZWxkLgorLlNIIFJFVFVSTiBWQUxVRQorRXhjZXB0IGZvciBcZkJmb3JtX29wdHNcZlIsIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX3BhZ2UuM3ggYi9tYW4vZm9ybV9wYWdlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZWQ1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZm9ybV9wYWdlLjN4CkBAIC0wLDAgKzEsOTYgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fcGFnZS4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxODo1MjozMiB0b20gRXhwICQKKy5USCBmb3JtX3BhZ2UgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX3BhZ2VcZlIgLSBzZXQgYW5kIGdldCBmb3JtIHBhZ2UgbnVtYmVyCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfY3VycmVudF9maWVsZChGT1JNICpmb3JtLCBGSUVMRCAqZmllbGQpOworLmJyCitGSUVMRCAqY3VycmVudF9maWVsZChjb25zdCBGT1JNICopOworLmJyCitpbnQgc2V0X2Zvcm1fcGFnZShGT1JNICpmb3JtLCBpbnQgbik7CisuYnIKK2ludCBmb3JtX3BhZ2UoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKK2ludCBmaWVsZF9pbmRleChjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfY3VycmVudCBmaWVsZFxmUiBzZXRzIHRoZSBjdXJyZW50IGZpZWxkIG9mIHRoZSBnaXZlbgorZm9ybTsgXGZCY3VycmVudF9maWVsZFxmUiByZXR1cm5zIHRoZSBjdXJyZW50IGZpZWxkIG9mIHRoZSBnaXZlbiBmb3JtLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2Zvcm1fcGFnZVxmUiBzZXRzIHRoZSBmb3JtJ3MgcGFnZSBudW1iZXIgKGdvZXMgdG8gcGFnZQorXGZJblxmUiBvZiB0aGUgZm9ybSkuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmb3JtX3BhZ2VcZlIgcmV0dXJucyB0aGUgZm9ybSdzIGN1cnJlbnQgcGFnZSBudW1iZXIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9pbmRleFxmUiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmllbGQgaW4gdGhlCitmaWVsZCBhcnJheSBvZiB0aGUgZm9ybSBpdCBpcyBjb25uZWN0ZWQgdG8uIEl0IHJldHVybnMgXGZCRVJSXGZSIGlmCit0aGUgYXJndW1lbnQgaXMgdGhlIG51bGwgcG9pbnRlciBvciB0aGUgZmllbGQgaXMgbm90IGNvbm5lY3RlZC4KKy5TSCBSRVRVUk4gVkFMVUUKK0V4Y2VwdCBmb3IgXGZCZm9ybV9wYWdlXGZSLCBlYWNoIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9JTlZBTElEX0ZJRUxECitDb250ZW50cyBvZiBhIGZpZWxkIGFyZSBub3QgdmFsaWQuCisuVFAgNQorLkIgRV9SRVFVRVNUX0RFTklFRAorVGhlIGZvcm0gZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fcG9zdC4zeCBiL21hbi9mb3JtX3Bvc3QuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmMTYwNwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX3Bvc3QuM3gKQEAgLTAsMCArMSw5MSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9wb3N0LjN4LHYgMS43IDIwMDYvMTEvMDQgMTg6NTM6MjAgdG9tIEV4cCAkCisuVEggZm9ybV9wb3N0IDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9wb3N0XGZSIC0gd3JpdGUgb3IgZXJhc2UgZm9ybXMgZnJvbSBhc3NvY2lhdGVkIHN1YndpbmRvd3MKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHBvc3RfZm9ybShGT1JNICpmb3JtKTsKKy5icgoraW50IHVucG9zdF9mb3JtKEZPUk0gKmZvcm0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJwb3N0X2Zvcm1cZlIgZGlzcGxheXMgYSBmb3JtIHRvIGl0cyBhc3NvY2lhdGVkIHN1YndpbmRvdy4gIFRvCit0cmlnZ2VyIHBoeXNpY2FsIGRpc3BsYXkgb2YgdGhlIHN1YndpbmRvdywgdXNlIFxmQnJlZnJlc2hcZlIgb3Igc29tZSBlcXVpdmFsZW50CitcZkJjdXJzZXNcZlIgcm91dGluZSAodGhlIGltcGxpY2l0IFxmQmRvdXBkYXRlXGZSIHRyaWdnZXJlZCBieSBhbiBcZkJjdXJzZXNcZlIKK2lucHV0IHJlcXVlc3Qgd2lsbCBkbykuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJ1bnBvc3RfZm9ybVxmUiBlcmFzZXMgZm9ybSBmcm9tIGl0cyBhc3NvY2lhdGVkIHN1YndpbmRvdy4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9OT1RfUE9TVEVECitUaGUgZm9ybSBoYXMgbm90IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZm9ybS4KKy5UUCA1CisuQiBFX05PX1JPT00KK0Zvcm0gaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX3JlcXVlc3RuYW1lLjN4IGIvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3MmY4NQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX3JlcXVlc3RuYW1lLjN4CkBAIC0wLDAgKzEsNzAgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fcmVxdWVzdG5hbWUuM3gsdiAxLjcgMjAwNi8xMS8wNCAxNzo1Nzo0OSB0b20gRXhwICQKKy5USCBmb3JtX3JlcXVlc3RuYW1lIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9yZXF1ZXN0bmFtZVxmUiAtIGhhbmRsZSBwcmludGFibGUgZm9ybSByZXF1ZXN0IG5hbWVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2NvbnN0IGNoYXIgKmZvcm1fcmVxdWVzdF9uYW1lKGludCByZXF1ZXN0KTsKKy5icgoraW50IGZvcm1fcmVxdWVzdF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJmb3JtX3JlcXVlc3RfbmFtZVxmUiByZXR1cm5zIHRoZSBwcmludGFibGUgbmFtZSBvZiBhIGZvcm0KK3JlcXVlc3QgY29kZS4KKy5icgorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fcmVxdWVzdF9ieV9uYW1lXGZSIHNlYXJjaGVzIGluIHRoZSBuYW1lLXRhYmxlIGZvciBhIHJlcXVlc3QKK3dpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHJldHVybnMgaXRzIHJlcXVlc3QgY29kZS4gT3RoZXJ3aXNlIEVfTk9fTUFUQ0ggaXMgcmV0dXJuZWQuCisuU0ggUkVUVVJOIFZBTFVFCitcZkJmb3JtX3JlcXVlc3RfbmFtZVxmUiByZXR1cm5zIFxmQk5VTExcZlIgb24gZXJyb3IgYW5kIHNldHMgZXJybm8KK3RvIFxmQkVfQkFEX0FSR1VNRU5UXGZSLgorLmJyCitcZkJmb3JtX3JlcXVlc3RfYnlfbmFtZVxmUiByZXR1cm5zIFxmQkVfTk9fTUFUQ0hcZlIgb24gZXJyb3IuCitJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQKK2FueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2Zvcm1fdXNlcnB0ci4zeCBiL21hbi9mb3JtX3VzZXJwdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlMGJmOAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mb3JtX3VzZXJwdHIuM3gKQEAgLTAsMCArMSw2OSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV91c2VycHRyLjN4LHYgMS4xMSAyMDA2LzExLzA0IDE4OjQzOjI0IHRvbSBFeHAgJAorLlRIIGZvcm1fdXNlcnB0ciAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fdXNlcnB0clxmUiAtIGFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggYSBmb3JtIGl0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9mb3JtX3VzZXJwdHIoRk9STSAqZm9ybSwgdm9pZCAqdXNlcnB0cik7CisuYnIKK3ZvaWQqIGZvcm1fdXNlcnB0cihjb25zdCBGT1JNICpmb3JtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBmb3JtIGFuZCBldmVyeSBmb3JtIGl0ZW0gaGFzIGEgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBob2xkCithcHBsaWNhdGlvbi1zcGVjaWZpYyBkYXRhICh0aGF0IGlzLCB0aGUgZm9ybS1kcml2ZXIgY29kZSBsZWF2ZXMgaXQgYWxvbmUpLgorVGhlc2UgZnVuY3Rpb25zIGdldCBhbmQgc2V0IHRoZSBmb3JtIHVzZXIgcG9pbnRlciBmaWVsZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJmb3JtX3VzZXJwdHJcZlIgcmV0dXJucyBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSBcZkJOVUxMXGZSKS4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9mb3JtX3VzZXJwdHJcZlIgcmV0dXJucyBcZkJFX09LXGZQIChzdWNjZXNzKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlBQCitUaGUgdXNlciBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyLgorV2UgY2hvc2Ugbm90IHRvIGxlYXZlIGl0IGFzIGEgY2hhciBwb2ludGVyIGZvciBTVnI0IGNvbXBhdGliaWxpdHkuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9mb3JtX3dpbi4zeCBiL21hbi9mb3JtX3dpbi4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGY2NGYyCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Zvcm1fd2luLjN4CkBAIC0wLDAgKzEsOTUgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fd2luLjN4LHYgMS4xMCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIGZvcm1fd2luIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV93aW5cZlIgLSBtYWtlIGFuZCBicmVhayBmb3JtIHdpbmRvdyBhbmQgc3Vid2luZG93IGFzc29jaWF0aW9ucworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgc2V0X2Zvcm1fd2luKEZPUk0gKmZvcm0sIFdJTkRPVyAqd2luKTsKKy5icgorV0lORE9XICpmb3JtX3dpbihjb25zdCBGT1JNICpmb3JtKTsKKy5icgoraW50IHNldF9mb3JtX3N1YihGT1JNICpmb3JtLCBXSU5ET1cgKnN1Yik7CisuYnIKK1dJTkRPVyAqZm9ybV9zdWIoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKK2ludCBzY2FsZV9mb3JtKGNvbnN0IEZPUk0gKmZvcm0sIGludCAqcm93cywgaW50ICpjb2x1bW5zKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBmb3JtIGhhcyBhbiBhc3NvY2lhdGVkIHBhaXIgb2YgXGZCY3Vyc2VzXGZSIHdpbmRvd3MuICBUaGUgZm9ybSB3aW5kb3cKK2Rpc3BsYXlzIGFueSB0aXRsZSBhbmQgYm9yZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2luZG93OyB0aGUgZm9ybSBzdWJ3aW5kb3cKK2Rpc3BsYXlzIHRoZSBpdGVtcyBvZiB0aGUgZm9ybSB0aGF0IGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCisuUFAKK1RoZSBmaXJzdCBmb3VyIGZ1bmN0aW9ucyBnZXQgYW5kIHNldCB0aG9zZSB3aW5kb3dzLiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzZXQKK2VpdGhlciB3aW5kb3c7IGJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIgY29kZSB1c2VzIFxmQnN0ZHNjclxmUiBmb3IgYm90aC4KKy5QUAorSW4gdGhlIFxmQnNldF9cZlIgZnVuY3Rpb25zLCB3aW5kb3cgYXJndW1lbnQgb2YgXGZCTlVMTFxmUiBpcyB0cmVhdGVkIGFzIHRob3VnaAoraXQgd2VyZSBcZkJzdHNkY3JcZlIuICBBIGZvcm0gYXJndW1lbnQgb2YgXGZCTlVMTFxmUiBpcyB0cmVhdGVkIGFzIGEgcmVxdWVzdAordG8gY2hhbmdlIHRoZSBzeXN0ZW0gZGVmYXVsdCBmb3JtIHdpbmRvdyBvciBzdWJ3aW5kb3cuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzY2FsZV9mb3JtXGZSIHJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSByZXF1aXJlZCBmb3IgdGhlCitzdWJ3aW5kb3cgb2YgXGZJZm9ybVxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLiAgUm91dGluZXMgdGhhdCByZXR1cm4KK2FuIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZm9ybS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vaW5mb2NtcC4xbSBiL21hbi9pbmZvY21wLjFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTg4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vaW5mb2NtcC4xbQpAQCAtMCwwICsxLDQzNyBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogaW5mb2NtcC4xbSx2IDEuNDQgMjAwNi8xMi8yNCAxODoxNjozMSB0b20gRXhwICQKKy5USCBASU5GT0NNUEAgMU0gIiIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCitcZkJASU5GT0NNUEBcZlIgLSBjb21wYXJlIG9yIHByaW50IG91dCBcZkl0ZXJtaW5mb1xmUiBkZXNjcmlwdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCQElORk9DTVBAXGZSIFtcZkItXAorMVwKK0NcCitFXAorRlwKK0dcCitJXAorTFwKK1RcCitVXAorVlwKK2NcCitkXAorZVwKK2dcCitpXAorbFwKK25cCitwXAorcVwKK3JcCit0XAordVwKK3hcCitcZlJdCisuYnIKKyAgICAgIFtcZkItdlxmUiBcZkluXGZSXSBbXGZCLXMgZFxmUnwgXGZCaVxmUnwgXGZCbFxmUnwgXGZCY1xmUl0gW1xmQi1SIFxmUlxmQnN1YnNldFxmUl0KKy5icgorICAgICAgW1xmQi13XGZSXCBcZkl3aWR0aFxmUl0gW1xmQi1BXGZSXCBcZklkaXJlY3RvcnlcZlJdIFtcZkItQlxmUlwgXGZJZGlyZWN0b3J5XGZSXQorLmJyCisgICAgICBbXGZJdGVybW5hbWVcZlIuLi5dCisuU0ggREVTQ1JJUFRJT04KK1xmQkBJTkZPQ01QQFxmUiBjYW4gYmUgdXNlZCB0byBjb21wYXJlIGEgYmluYXJ5IFxmQnRlcm1pbmZvXGZSIGVudHJ5IHdpdGggb3RoZXIKK3Rlcm1pbmZvIGVudHJpZXMsIHJld3JpdGUgYSBcZkJ0ZXJtaW5mb1xmUiBkZXNjcmlwdGlvbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUKK1xmQnVzZT1cZlIgdGVybWluZm8gZmllbGQsIG9yIHByaW50IG91dCBhIFxmQnRlcm1pbmZvXGZSIGRlc2NyaXB0aW9uIGZyb20gdGhlCitiaW5hcnkgZmlsZSAoXGZCdGVybVxmUikgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMuICBJbiBhbGwgY2FzZXMsIHRoZSBib29sZWFuCitmaWVsZHMgd2lsbCBiZSBwcmludGVkIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgbnVtZXJpYyBmaWVsZHMsIGZvbGxvd2VkIGJ5IHRoZQorc3RyaW5nIGZpZWxkcy4KKy5TUyBEZWZhdWx0IE9wdGlvbnMKK0lmIG5vIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBhbmQgemVybyBvciBvbmUgXGZJdGVybW5hbWVzXGZSIGFyZSBzcGVjaWZpZWQsIHRoZQorXGZCLUlcZlIgb3B0aW9uIHdpbGwgYmUgYXNzdW1lZC4gIElmIG1vcmUgdGhhbiBvbmUgXGZJdGVybW5hbWVcZlIgaXMgc3BlY2lmaWVkLAordGhlIFxmQi1kXGZSIG9wdGlvbiB3aWxsIGJlIGFzc3VtZWQuCisuU1MgQ29tcGFyaXNvbiBPcHRpb25zIFstZF0gWy1jXSBbLW5dCitcZkJASU5GT0NNUEBcZlIgY29tcGFyZXMgdGhlIFxmQnRlcm1pbmZvXGZSIGRlc2NyaXB0aW9uIG9mIHRoZSBmaXJzdCB0ZXJtaW5hbAorXGZJdGVybW5hbWVcZlIgd2l0aCBlYWNoIG9mIHRoZSBkZXNjcmlwdGlvbnMgZ2l2ZW4gYnkgdGhlIGVudHJpZXMgZm9yIHRoZSBvdGhlcgordGVybWluYWwncyBcZkl0ZXJtbmFtZXNcZlIuICBJZiBhIGNhcGFiaWxpdHkgaXMgZGVmaW5lZCBmb3Igb25seSBvbmUgb2YgdGhlCit0ZXJtaW5hbHMsIHRoZSB2YWx1ZSByZXR1cm5lZCB3aWxsIGRlcGVuZCBvbiB0aGUgdHlwZSBvZiB0aGUgY2FwYWJpbGl0eToKK1xmQkZcZlIgZm9yIGJvb2xlYW4gdmFyaWFibGVzLCBcZkItMVxmUiBmb3IgaW50ZWdlciB2YXJpYWJsZXMsIGFuZCBcZkJOVUxMXGZSCitmb3Igc3RyaW5nIHZhcmlhYmxlcy4KKy5QUAorVGhlIFxmQi1kXGZSIG9wdGlvbiBwcm9kdWNlcyBhIGxpc3Qgb2YgZWFjaCBjYXBhYmlsaXR5IHRoYXQgaXMgZGlmZmVyZW50CitiZXR3ZWVuIHR3byBlbnRyaWVzLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHRvIHNob3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28KK2VudHJpZXMsIGNyZWF0ZWQgYnkgZGlmZmVyZW50IHBlb3BsZSwgZm9yIHRoZSBzYW1lIG9yIHNpbWlsYXIgdGVybWluYWxzLgorLlBQCitUaGUgXGZCLWNcZlIgb3B0aW9uIHByb2R1Y2VzIGEgbGlzdCBvZiBlYWNoIGNhcGFiaWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbgordHdvIGVudHJpZXMuICBDYXBhYmlsaXRpZXMgdGhhdCBhcmUgbm90IHNldCBhcmUgaWdub3JlZC4gIFRoaXMgb3B0aW9uIGNhbiBiZQordXNlZCBhcyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGUgXGZCLXVcZlIgb3B0aW9uIGlzIHdvcnRoIHVzaW5nLgorLlBQCitUaGUgXGZCLW5cZlIgb3B0aW9uIHByb2R1Y2VzIGEgbGlzdCBvZiBlYWNoIGNhcGFiaWxpdHkgdGhhdCBpcyBpbiBuZWl0aGVyCitlbnRyeS4gIElmIG5vIFxmSXRlcm1uYW1lc1xmUiBhcmUgZ2l2ZW4sIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNXGZSCit3aWxsIGJlIHVzZWQgZm9yIGJvdGggb2YgdGhlIFxmSXRlcm1uYW1lc1xmUi4gIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBxdWljaworY2hlY2sgdG8gc2VlIGlmIGFueXRoaW5nIHdhcyBsZWZ0IG91dCBvZiBhIGRlc2NyaXB0aW9uLgorLlNTIFNvdXJjZSBMaXN0aW5nIE9wdGlvbnMgWy1JXSBbLUxdIFstQ10gWy1yXQorVGhlIFxmQi1JXGZSLCBcZkItTFxmUiwgYW5kIFxmQi1DXGZSIG9wdGlvbnMgd2lsbCBwcm9kdWNlIGEgc291cmNlIGxpc3RpbmcgZm9yCitlYWNoIHRlcm1pbmFsIG5hbWVkLgorLgorLlRTCitjZW50ZXIgdGFiKC8pIDsKK2wgbCAuCitcZkItSVxmUi91c2UgdGhlIFxmQnRlcm1pbmZvXGZSIG5hbWVzCitcZkItTFxmUi91c2UgdGhlIGxvbmcgQyB2YXJpYWJsZSBuYW1lIGxpc3RlZCBpbiA8XGZCdGVybS5oXGZSPgorXGZCLUNcZlIvdXNlIHRoZSBcZkJ0ZXJtY2FwXGZSIG5hbWVzCitcZkItclxmUi93aGVuIHVzaW5nIFxmQi1DXGZSLCBwdXQgb3V0IGFsbCBjYXBhYmlsaXRpZXMgaW4gXGZCdGVybWNhcFxmUiBmb3JtCisuVEUKKy5QUAorSWYgbm8gXGZJdGVybW5hbWVzXGZSIGFyZSBnaXZlbiwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1cZlIgd2lsbCBiZQordXNlZCBmb3IgdGhlIHRlcm1pbmFsIG5hbWUuCisuUFAKK1RoZSBzb3VyY2UgcHJvZHVjZWQgYnkgdGhlIFxmQi1DXGZSIG9wdGlvbiBtYXkgYmUgdXNlZCBkaXJlY3RseSBhcyBhCitcZkJ0ZXJtY2FwXGZSIGVudHJ5LCBidXQgbm90IGFsbCBwYXJhbWV0ZXJpemVkIHN0cmluZ3MgY2FuIGJlIGNoYW5nZWQgdG8KK3RoZSBcZkJ0ZXJtY2FwXGZSIGZvcm1hdC4gIFxmQkBJTkZPQ01QQFxmUiB3aWxsIGF0dGVtcHQgdG8gY29udmVydCBtb3N0IG9mIHRoZQorcGFyYW1ldGVyaXplZCBpbmZvcm1hdGlvbiwgYW5kIGFueXRoaW5nIG5vdCBjb252ZXJ0ZWQgd2lsbCBiZSBwbGFpbmx5IG1hcmtlZCBpbgordGhlIG91dHB1dCBhbmQgY29tbWVudGVkIG91dC4gIFRoZXNlIHNob3VsZCBiZSBlZGl0ZWQgYnkgaGFuZC4KKy5QUAorQWxsIHBhZGRpbmcgaW5mb3JtYXRpb24gZm9yIHN0cmluZ3Mgd2lsbCBiZSBjb2xsZWN0ZWQgdG9nZXRoZXIgYW5kIHBsYWNlZAorYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIHdoZXJlIFxmQnRlcm1jYXBcZlIgZXhwZWN0cyBpdC4gIE1hbmRhdG9yeQorcGFkZGluZyAocGFkZGluZyBpbmZvcm1hdGlvbiB3aXRoIGEgdHJhaWxpbmcgJy8nKSB3aWxsIGJlY29tZSBvcHRpb25hbC4KKy5QUAorQWxsIFxmQnRlcm1jYXBcZlIgdmFyaWFibGVzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgXGZCdGVybWluZm9cZlIsIGJ1dCB3aGljaAorYXJlIGRlcml2YWJsZSBmcm9tIG90aGVyIFxmQnRlcm1pbmZvXGZSIHZhcmlhYmxlcywgd2lsbCBiZSBvdXRwdXQuICBOb3QgYWxsCitcZkJ0ZXJtaW5mb1xmUiBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0cmFuc2xhdGVkOyBvbmx5IHRob3NlIHZhcmlhYmxlcyB3aGljaCB3ZXJlCitwYXJ0IG9mIFxmQnRlcm1jYXBcZlIgd2lsbCBub3JtYWxseSBiZSBvdXRwdXQuICBTcGVjaWZ5aW5nIHRoZSBcZkItclxmUiBvcHRpb24KK3dpbGwgdGFrZSBvZmYgdGhpcyByZXN0cmljdGlvbiwgYWxsb3dpbmcgYWxsIGNhcGFiaWxpdGllcyB0byBiZSBvdXRwdXQgaW4KK1xmSXRlcm1jYXBcZlIgZm9ybS4KKy5QUAorTm90ZSB0aGF0IGJlY2F1c2UgcGFkZGluZyBpcyBjb2xsZWN0ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY2FwYWJpbGl0eSwgbm90CithbGwgY2FwYWJpbGl0aWVzIGFyZSBvdXRwdXQuICBNYW5kYXRvcnkgcGFkZGluZyBpcyBub3Qgc3VwcG9ydGVkLiAgQmVjYXVzZQorXGZCdGVybWNhcFxmUiBzdHJpbmdzIGFyZSBub3QgYXMgZmxleGlibGUsIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gY29udmVydAorYSBcZkJ0ZXJtaW5mb1xmUiBzdHJpbmcgY2FwYWJpbGl0eSBpbnRvIGFuIGVxdWl2YWxlbnQgXGZCdGVybWNhcFxmUiBmb3JtYXQuICBBCitzdWJzZXF1ZW50IGNvbnZlcnNpb24gb2YgdGhlIFxmQnRlcm1jYXBcZlIgZmlsZSBiYWNrIGludG8gXGZCdGVybWluZm9cZlIgZm9ybWF0Cit3aWxsIG5vdCBuZWNlc3NhcmlseSByZXByb2R1Y2UgdGhlIG9yaWdpbmFsIFxmQnRlcm1pbmZvXGZSCitzb3VyY2UuCisuUFAKK1NvbWUgY29tbW9uIFxmQnRlcm1pbmZvXGZSIHBhcmFtZXRlciBzZXF1ZW5jZXMsIHRoZWlyIFxmQnRlcm1jYXBcZlIKK2VxdWl2YWxlbnRzLCBhbmQgc29tZSB0ZXJtaW5hbCB0eXBlcyB3aGljaCBjb21tb25seSBoYXZlIHN1Y2ggc2VxdWVuY2VzLCBhcmU6CisuCisuVFMKK2NlbnRlciB0YWIoLykgOworbCBjIGwKK2wgbCBsLgorXGZCdGVybWluZm8vdGVybWNhcFxmUi9SZXByZXNlbnRhdGl2ZSBUZXJtaW5hbHMKKz0KK1xmQiVwMSVjLyUuXGZSL2FkbQorXGZCJXAxJWQvJWRcZlIvaHAsIEFOU0kgc3RhbmRhcmQsIHZ0MTAwCitcZkIlcDElJ3gnJSslYy8lK3hcZlIvY29uY2VwdAorXGZCJWkvJWlcZlJxL0FOU0kgc3RhbmRhcmQsIHZ0MTAwCitcZkIlcDElPyUneCclPiV0JXAxJSd5JyUrJTsvJT54eVxmUi9jb25jZXB0CitcZkIlcDJcZlIgaXMgcHJpbnRlZCBiZWZvcmUgXGZCJXAxLyVyXGZSL2hwCisuVEUKKy5TUyBVc2U9IE9wdGlvbiBbLXVdCitUaGUgXGZCLXVcZlIgb3B0aW9uIHByb2R1Y2VzIGEgXGZCdGVybWluZm9cZlIgc291cmNlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaXJzdAordGVybWluYWwgXGZJdGVybW5hbWVcZlIgd2hpY2ggaXMgcmVsYXRpdmUgdG8gdGhlIHN1bSBvZiB0aGUgZGVzY3JpcHRpb25zIGdpdmVuCitieSB0aGUgZW50cmllcyBmb3IgdGhlIG90aGVyIHRlcm1pbmFscyBcZkl0ZXJtbmFtZXNcZlIuICBJdCBkb2VzIHRoaXMgYnkKK2FuYWx5emluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZmlyc3QgXGZJdGVybW5hbWVcZlIgYW5kIHRoZSBvdGhlcgorXGZJdGVybW5hbWVzXGZSIGFuZCBwcm9kdWNpbmcgYSBkZXNjcmlwdGlvbiB3aXRoIFxmQnVzZT1cZlIgZmllbGRzIGZvciB0aGUKK290aGVyIHRlcm1pbmFscy4gIEluIHRoaXMgbWFubmVyLCBpdCBpcyBwb3NzaWJsZSB0byByZXRyb2ZpdCBnZW5lcmljIHRlcm1pbmZvCitlbnRyaWVzIGludG8gYSB0ZXJtaW5hbCdzIGRlc2NyaXB0aW9uLiAgT3IsIGlmIHR3byBzaW1pbGFyIHRlcm1pbmFscyBleGlzdCwgYnV0Cit3ZXJlIGNvZGVkIGF0IGRpZmZlcmVudCB0aW1lcyBvciBieSBkaWZmZXJlbnQgcGVvcGxlIHNvIHRoYXQgZWFjaCBkZXNjcmlwdGlvbgoraXMgYSBmdWxsIGRlc2NyaXB0aW9uLCB1c2luZyBcZkJASU5GT0NNUEBcZlIgd2lsbCBzaG93IHdoYXQgY2FuIGJlIGRvbmUgdG8gY2hhbmdlCitvbmUgZGVzY3JpcHRpb24gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG90aGVyLgorLlBQCitBIGNhcGFiaWxpdHkgd2lsbCBnZXQgcHJpbnRlZCB3aXRoIGFuIGF0LXNpZ24gKEApIGlmIGl0IG5vIGxvbmdlciBleGlzdHMgaW4gdGhlCitmaXJzdCBcZkl0ZXJtbmFtZVxmUiwgYnV0IG9uZSBvZiB0aGUgb3RoZXIgXGZJdGVybW5hbWVcZlIgZW50cmllcyBjb250YWlucyBhCit2YWx1ZSBmb3IgaXQuICBBIGNhcGFiaWxpdHkncyB2YWx1ZSBnZXRzIHByaW50ZWQgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdAorXGZJdGVybW5hbWVcZlIgaXMgbm90IGZvdW5kIGluIGFueSBvZiB0aGUgb3RoZXIgXGZJdGVybW5hbWVcZlIgZW50cmllcywgb3IgaWYKK3RoZSBmaXJzdCBvZiB0aGUgb3RoZXIgXGZJdGVybW5hbWVcZlIgZW50cmllcyB0aGF0IGhhcyB0aGlzIGNhcGFiaWxpdHkgZ2l2ZXMgYQorZGlmZmVyZW50IHZhbHVlIGZvciB0aGUgY2FwYWJpbGl0eSB0aGFuIHRoYXQgaW4gdGhlIGZpcnN0IFxmSXRlcm1uYW1lXGZSLgorLlBQCitUaGUgb3JkZXIgb2YgdGhlIG90aGVyIFxmSXRlcm1uYW1lXGZSIGVudHJpZXMgaXMgc2lnbmlmaWNhbnQuICBTaW5jZSB0aGUKK3Rlcm1pbmZvIGNvbXBpbGVyIFxmQnRpY1xmUiBkb2VzIGEgbGVmdC10by1yaWdodCBzY2FuIG9mIHRoZSBjYXBhYmlsaXRpZXMsCitzcGVjaWZ5aW5nIHR3byBcZkJ1c2U9XGZSIGVudHJpZXMgdGhhdCBjb250YWluIGRpZmZlcmluZyBlbnRyaWVzIGZvciB0aGUgc2FtZQorY2FwYWJpbGl0aWVzIHdpbGwgcHJvZHVjZSBkaWZmZXJlbnQgcmVzdWx0cyBkZXBlbmRpbmcgb24gdGhlIG9yZGVyIHRoYXQgdGhlCitlbnRyaWVzIGFyZSBnaXZlbiBpbi4gIFxmQkBJTkZPQ01QQFxmUiB3aWxsIGZsYWcgYW55IHN1Y2ggaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4KK3RoZSBvdGhlciBcZkl0ZXJtbmFtZVxmUiBlbnRyaWVzIGFzIHRoZXkgYXJlIGZvdW5kLgorLlBQCitBbHRlcm5hdGl2ZWx5LCBzcGVjaWZ5aW5nIGEgY2FwYWJpbGl0eSBcZklhZnRlclxmUiBhIFxmQnVzZT1cZlIgZW50cnkgdGhhdAorY29udGFpbnMgdGhhdCBjYXBhYmlsaXR5IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBzcGVjaWZpY2F0aW9uIHRvIGJlIGlnbm9yZWQuCitVc2luZyBcZkJASU5GT0NNUEBcZlIgdG8gcmVjcmVhdGUgYSBkZXNjcmlwdGlvbiBjYW4gYmUgYSB1c2VmdWwgY2hlY2sgdG8gbWFrZQorc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgd2FzIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZQorZGVzY3JpcHRpb24uCisuUFAKK0Fub3RoZXIgZXJyb3IgdGhhdCBkb2VzIG5vdCBjYXVzZSBpbmNvcnJlY3QgY29tcGlsZWQgZmlsZXMsIGJ1dCB3aWxsIHNsb3cgZG93bgordGhlIGNvbXBpbGF0aW9uIHRpbWUsIGlzIHNwZWNpZnlpbmcgZXh0cmEgXGZCdXNlPVxmUiBmaWVsZHMgdGhhdCBhcmUKK3N1cGVyZmx1b3VzLiAgXGZCQElORk9DTVBAXGZSIHdpbGwgZmxhZyBhbnkgb3RoZXIgXGZJdGVybW5hbWUgdXNlPVxmUiBmaWVsZHMgdGhhdAord2VyZSBub3QgbmVlZGVkLgorLlNTIENoYW5naW5nIERhdGFiYXNlcyBbLUEgXGZJZGlyZWN0b3J5XGZSXSBbLUIgXGZJZGlyZWN0b3J5XGZSXQorVGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxlZCBcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZSBpcyB0YWtlbiBmcm9tIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgXGZCVEVSTUlORk9cZlIgLiAgSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLCBvciB0aGUKK3Rlcm1pbmFsIGlzIG5vdCBmb3VuZCBpbiB0aGF0IGxvY2F0aW9uLCB0aGUgc3lzdGVtIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlLAoraW4gXGZCQFRFUk1JTkZPQFxmUiwgd2lsbCBiZSB1c2VkLiAgVGhlIG9wdGlvbnMgXGZCLUFcZlIKK2FuZCBcZkItQlxmUiBtYXkgYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzIGxvY2F0aW9uLiAgVGhlIFxmQi1BXGZSIG9wdGlvbiB3aWxsCitzZXQgXGZCVEVSTUlORk9cZlIgZm9yIHRoZSBmaXJzdCBcZkl0ZXJtbmFtZVxmUiBhbmQgdGhlIFxmQi1CXGZSIG9wdGlvbiB3aWxsCitzZXQgXGZCVEVSTUlORk9cZlIgZm9yIHRoZSBvdGhlciBcZkl0ZXJtbmFtZXNcZlIuICBXaXRoIHRoaXMsIGl0IGlzIHBvc3NpYmxlIHRvCitjb21wYXJlIGRlc2NyaXB0aW9ucyBmb3IgYSB0ZXJtaW5hbCB3aXRoIHRoZSBzYW1lIG5hbWUgbG9jYXRlZCBpbiB0d28gZGlmZmVyZW50CitkYXRhYmFzZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tcGFyaW5nIGRlc2NyaXB0aW9ucyBmb3IgdGhlIHNhbWUgdGVybWluYWwKK2NyZWF0ZWQgYnkgZGlmZmVyZW50IHBlb3BsZS4KKy5TUyBPdGhlciBPcHRpb25zCisuVFAgNQorXGZCLTFcZlIKK2NhdXNlcyB0aGUgZmllbGRzIHRvIGJlIHByaW50ZWQgb3V0IG9uZSB0byBhIGxpbmUuICBPdGhlcndpc2UsCit0aGUgZmllbGRzIHdpbGwgYmUgcHJpbnRlZCBzZXZlcmFsIHRvIGEgbGluZSB0byBhIG1heGltdW0gd2lkdGgKK29mIDYwIGNoYXJhY3RlcnMuCisuVFAKK1xmQi1hXGZSCit0ZWxscyBcZkJASU5GT0NNUEBcZlAgdG8gcmV0YWluIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcKK3RoZW0uICBDYXBhYmlsaXRpZXMgYXJlIGNvbW1lbnRlZCBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGEgcGVyaW9kLgorLlRQIDUKK1xmQi1FXGZSCitEdW1wIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGdpdmVuIHRlcm1pbmFsIGFzIHRhYmxlcywgbmVlZGVkIGluCit0aGUgQyBpbml0aWFsaXplciBmb3IgYQorVEVSTVRZUEUgc3RydWN0dXJlICh0aGUgdGVybWluYWwgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgaW4gdGhlIFxmQjx0ZXJtLmg+XGZSKS4KK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgcHJlcGFyaW5nIHZlcnNpb25zIG9mIHRoZSBjdXJzZXMgbGlicmFyeSBoYXJkd2lyZWQKK2ZvciBhIGdpdmVuIHRlcm1pbmFsIHR5cGUuCitUaGUgdGFibGVzIGFyZSBhbGwgZGVjbGFyZWQgc3RhdGljLCBhbmQgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgdHlwZQorYW5kIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIHRlcm1pbmFsIGVudHJ5LgorLnNwCitCZWZvcmUgbmN1cnNlcyA1LjAsIHRoZSBzcGxpdCBiZXR3ZWVuIHRoZSBcZkItZVxmUCBhbmQgXGZCLUVcZlAKK29wdGlvbnMgd2FzIG5vdCBuZWVkZWQ7IGJ1dCBzdXBwb3J0IGZvciBleHRlbmRlZCBuYW1lcyByZXF1aXJlZCBtYWtpbmcKK3RoZSBhcnJheXMgb2YgdGVybWluYWwgY2FwYWJpbGl0aWVzIHNlcGFyYXRlIGZyb20gdGhlIFRFUk1UWVBFIHN0cnVjdHVyZS4KKy5UUCA1CitcZkItZVxmUgorRHVtcCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBnaXZlbiB0ZXJtaW5hbCBhcyBhIEMgaW5pdGlhbGl6ZXIgZm9yIGEKK1RFUk1UWVBFIHN0cnVjdHVyZSAodGhlIHRlcm1pbmFsIGNhcGFiaWxpdHkgc3RydWN0dXJlIGluIHRoZSBcZkI8dGVybS5oPlxmUikuCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIHByZXBhcmluZyB2ZXJzaW9ucyBvZiB0aGUgY3Vyc2VzIGxpYnJhcnkgaGFyZHdpcmVkCitmb3IgYSBnaXZlbiB0ZXJtaW5hbCB0eXBlLgorLlRQIDUKK1xmQi1GXGZSCitjb21wYXJlIHRlcm1pbmZvIGZpbGVzLiAgVGhpcyBhc3N1bWVzIHRoYXQgdHdvIGZvbGxvd2luZyBhcmd1bWVudHMgYXJlCitmaWxlbmFtZXMuICBUaGUgZmlsZXMgYXJlIHNlYXJjaGVkIGZvciBwYWlyd2lzZSBtYXRjaGVzIGJldHdlZW4KK2VudHJpZXMsIHdpdGggdHdvIGVudHJpZXMgY29uc2lkZXJlZCB0byBtYXRjaCBpZiBhbnkgb2YgdGhlaXIgbmFtZXMgZG8uCitUaGUgcmVwb3J0IHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0cHV0IGxpc3RzIGVudHJpZXMgd2l0aCBubyBtYXRjaGVzIGluCit0aGUgb3RoZXIgZmlsZSwgYW5kIGVudHJpZXMgd2l0aCBtb3JlIHRoYW4gb25lIG1hdGNoLiAgRm9yIGVudHJpZXMKK3dpdGggZXhhY3RseSBvbmUgbWF0Y2ggaXQgaW5jbHVkZXMgYSBkaWZmZXJlbmNlIHJlcG9ydC4gIE5vcm1hbGx5LAordG8gcmVkdWNlIHRoZSB2b2x1bWUgb2YgdGhlIHJlcG9ydCwgdXNlIHJlZmVyZW5jZXMgYXJlCitub3QgcmVzb2x2ZWQgYmVmb3JlIGxvb2tpbmcgZm9yIGRpZmZlcmVuY2VzLCBidXQgcmVzb2x1dGlvbiBjYW4gYmUgZm9yY2VkCitieSBhbHNvIHNwZWNpZnlpbmcgXGZCLXJcZlIuCisuVFAgNQorXGZCLWZcZlIKK0Rpc3BsYXkgY29tcGxleCB0ZXJtaW5mbyBzdHJpbmdzIHdoaWNoIGNvbnRhaW4gaWYvdGhlbi9lbHNlL2VuZGlmIGV4cHJlc3Npb25zCitpbmRlbnRlZCBmb3IgcmVhZGFiaWxpdHkuCisuVFAgNQorXGZCLUdcZlIKK0Rpc3BsYXkgY29uc3RhbnQgbGl0ZXJhbHMgaW4gZGVjaW1hbCBmb3JtCityYXRoZXIgdGhhbiB0aGVpciBjaGFyYWN0ZXIgZXF1aXZhbGVudHMuCisuVFAgNQorXGZCLWdcZlIKK0Rpc3BsYXkgY29uc3RhbnQgY2hhcmFjdGVyIGxpdGVyYWxzIGluIHF1b3RlZCBmb3JtCityYXRoZXIgdGhhbiB0aGVpciBkZWNpbWFsIGVxdWl2YWxlbnRzLgorLlRQIDUKK1xmQi1pXGZSCitBbmFseXplIHRoZSBpbml0aWFsaXphdGlvbiAoXGZCaXMxXGZSLCBcZkJpczJcZlIsIFxmQmlzM1xmUiksIGFuZCByZXNldAorKFxmQnJzMVxmUiwgXGZCcnMyXGZSLCBcZkJyczNcZlIpLCBzdHJpbmdzIGluIHRoZSBlbnRyeS4gIEZvciBlYWNoIHN0cmluZywgdGhlCitjb2RlIHRyaWVzIHRvIGFuYWx5emUgaXQgaW50byBhY3Rpb25zIGluIHRlcm1zIG9mIHRoZSBvdGhlciBjYXBhYmlsaXRpZXMgaW4gdGhlCitlbnRyeSwgY2VydGFpbiBYMy42NC9JU08gNjQyOS9FQ01BLTQ4IGNhcGFiaWxpdGllcywgYW5kIGNlcnRhaW4gREVDIFZULXNlcmllcworcHJpdmF0ZSBtb2RlcyAodGhlIHNldCBvZiByZWNvZ25pemVkIHNwZWNpYWwgc2VxdWVuY2VzIGhhcyBiZWVuIHNlbGVjdGVkIGZvcgorY29tcGxldGVuZXNzIG92ZXIgdGhlIGV4aXN0aW5nIHRlcm1pbmZvIGRhdGFiYXNlKS4gIEVhY2ggcmVwb3J0IGxpbmUgY29uc2lzdHMKK29mIHRoZSBjYXBhYmlsaXR5IG5hbWUsIGZvbGxvd2VkIGJ5IGEgY29sb24gYW5kIHNwYWNlLCBmb2xsb3dlZCBieSBhIHByaW50YWJsZQorZXhwYW5zaW9uIG9mIHRoZSBjYXBhYmlsaXR5IHN0cmluZyB3aXRoIHNlY3Rpb25zIG1hdGNoaW5nIHJlY29nbml6ZWQgYWN0aW9ucwordHJhbnNsYXRlZCBpbnRvIHt9LWJyYWNrZXRlZCBkZXNjcmlwdGlvbnMuICBIZXJlIGlzIGEgbGlzdCBvZiB0aGUgREVDL0FOU0kKK3NwZWNpYWwgc2VxdWVuY2VzIHJlY29nbml6ZWQ6CitpLgorLlRTCitjZW50ZXIgdGFiKC8pIDsKK2wgbAorbCBsLgorQWN0aW9uL01lYW5pbmcKKz0KK1JJUy9mdWxsIHJlc2V0CitTQy9zYXZlIGN1cnNvcgorUkMvcmVzdG9yZSBjdXJzb3IKK0xML2hvbWUtZG93bgorUlNSL3Jlc2V0IHNjcm9sbCByZWdpb24KKz0KK0RFQ1NUUi9zb2Z0IHJlc2V0IChWVDMyMCkKK1M3QzFULzctYml0IGNvbnRyb2xzIChWVDIyMCkKKz0KK0lTTyBERUMgRzAvZW5hYmxlIERFQyBncmFwaGljcyBmb3IgRzAKK0lTTyBVSyBHMC9lbmFibGUgVUsgY2hhcnMgZm9yIEcwCitJU08gVVMgRzAvZW5hYmxlIFVTIGNoYXJzIGZvciBHMAorSVNPIERFQyBHMS9lbmFibGUgREVDIGdyYXBoaWNzIGZvciBHMQorSVNPIFVLIEcxL2VuYWJsZSBVSyBjaGFycyBmb3IgRzEKK0lTTyBVUyBHMS9lbmFibGUgVVMgY2hhcnMgZm9yIEcxCis9CitERUNQQU0vYXBwbGljYXRpb24ga2V5cGFkIG1vZGUKK0RFQ1BOTS9ub3JtYWwga2V5cGFkIG1vZGUKK0RFQ0FOU0kvZW50ZXIgQU5TSSBtb2RlCis9CitFQ01BWystXUFNL2tleWJvYXJkIGFjdGlvbiBtb2RlCitFQ01BWystXUlSTS9pbnNlcnQgcmVwbGFjZSBtb2RlCitFQ01BWystXVNSTS9zZW5kIHJlY2VpdmUgbW9kZQorRUNNQVsrLV1MTk0vbGluZWZlZWQgbW9kZQorPQorREVDWystXUNLTS9hcHBsaWNhdGlvbiBjdXJzb3Iga2V5cworREVDWystXUFOTS9zZXQgVlQ1MiBtb2RlCitERUNbKy1dQ09MTS8xMzItY29sdW1uIG1vZGUKK0RFQ1srLV1TQ0xNL3Ntb290aCBzY3JvbGwKK0RFQ1srLV1TQ05NL3JldmVyc2UgdmlkZW8gbW9kZQorREVDWystXU9NL29yaWdpbiBtb2RlCitERUNbKy1dQVdNL3dyYXBhcm91bmQgbW9kZQorREVDWystXUFSTS9hdXRvLXJlcGVhdCBtb2RlCisuVEUKKy5zcAorSXQgYWxzbyByZWNvZ25pemVzIGEgU0dSIGFjdGlvbiBjb3JyZXNwb25kaW5nIHRvIEFOU0kvSVNPIDY0MjkvRUNNQSBTZXQKK0dyYXBoaWNzIFJlbmRpdGlvbiwgd2l0aCB0aGUgdmFsdWVzIE5PUk1BTCwgQk9MRCwgVU5ERVJMSU5FLCBCTElOSywgYW5kCitSRVZFUlNFLiAgQWxsIGJ1dCBOT1JNQUwgbWF5IGJlIHByZWZpeGVkIHdpdGggYCsnICh0dXJuIG9uKSBvciBgLScgKHR1cm4gb2ZmKS4KKy5QUAorQW4gU0dSMCBkZXNpZ25hdGVzIGFuIGVtcHR5IGhpZ2hsaWdodCBzZXF1ZW5jZSAoZXF1aXZhbGVudCB0byB7U0dSOk5PUk1BTH0pLgorLlRQIDUKK1xmQi1sXGZSCitTZXQgb3V0cHV0IGZvcm1hdCB0byB0ZXJtaW5mby4KKy5UUCA1CitcZkItcFxmUgorSWdub3JlIHBhZGRpbmcgc3BlY2lmaWNhdGlvbnMgd2hlbiBjb21wYXJpbmcgc3RyaW5ncy4KKy5UUCA1CitcZkItcVxmUgorTWFrZSB0aGUgY29tcGFyaXNvbiBsaXN0aW5nIHNob3J0ZXIgYnkgb21pdHRpbmcgc3ViaGVhZGluZ3MsIGFuZCB1c2luZworIi0iIGZvciBhYnNlbnQgY2FwYWJpbGl0aWVzLCAiQCIgZm9yIGNhbmNlbGVkIHJhdGhlciB0aGFuICJOVUxMIi4KKy5UUCA1CitcZkItUlxmUlxmSXN1YnNldFxmUgorUmVzdHJpY3Qgb3V0cHV0IHRvIGEgZ2l2ZW4gc3Vic2V0LiAgVGhpcyBvcHRpb24gaXMgZm9yIHVzZSB3aXRoIGFyY2hhaWMKK3ZlcnNpb25zIG9mIHRlcm1pbmZvIGxpa2UgdGhvc2Ugb24gU1ZyMSwgVWx0cml4LCBvciBIUC9VWCB0aGF0IGRvIG5vdCBzdXBwb3J0Cit0aGUgZnVsbCBzZXQgb2YgU1ZSNC9YU0kgQ3Vyc2VzIHRlcm1pbmZvOyBhbmQgdmFyaWFudHMgc3VjaCBhcyBBSVgKK3RoYXQgaGF2ZSB0aGVpciBvd24gZXh0ZW5zaW9ucyBpbmNvbXBhdGlibGUgd2l0aCBTVnI0L1hTSS4gIEF2YWlsYWJsZSB0ZXJtaW5mbworc3Vic2V0cyBhcmUgIlNWcjEiLCAiVWx0cml4IiwgIkhQIiwgYW5kICJBSVgiOyBzZWUgXGZCdGVybWluZm9cZlIoXCpuKSBmb3IKK2RldGFpbHMuICBZb3UgY2FuIGFsc28gY2hvb3NlIHRoZSBzdWJzZXQgIkJTRCIgd2hpY2ggc2VsZWN0cyBvbmx5IGNhcGFiaWxpdGllcword2l0aCB0ZXJtY2FwIGVxdWl2YWxlbnRzIHJlY29nbml6ZWQgYnkgNC40QlNELgorLlRQCitcZkItcyBcZlJcZklbZHxpfGx8Y11cZlIKK1RoZSBcZkItc1xmUiBvcHRpb24gc29ydHMgdGhlIGZpZWxkcyB3aXRoaW4gZWFjaCB0eXBlIGFjY29yZGluZyB0byB0aGUgYXJndW1lbnQKK2JlbG93OgorLmJyCisuUlMgNQorLlRQIDUKK1xmQmRcZlIKK2xlYXZlIGZpZWxkcyBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZSBzdG9yZWQgaW4gdGhlIFxmSXRlcm1pbmZvXGZSIGRhdGFiYXNlLgorLlRQIDUKK1xmQmlcZlIKK3NvcnQgYnkgXGZJdGVybWluZm9cZlIgbmFtZS4KKy5UUCA1CitcZkJsXGZSCitzb3J0IGJ5IHRoZSBsb25nIEMgdmFyaWFibGUgbmFtZS4KKy5UUCA1CitcZkJjXGZSCitzb3J0IGJ5IHRoZSBcZkl0ZXJtY2FwXGZSIG5hbWUuCisuUkUKKy5JUAorSWYgdGhlIFxmQi1zXGZSIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIHRoZSBmaWVsZHMgcHJpbnRlZCBvdXQgd2lsbCBiZQorc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IHRoZSBcZkJ0ZXJtaW5mb1xmUiBuYW1lIHdpdGhpbiBlYWNoIHR5cGUsCitleGNlcHQgaW4gdGhlIGNhc2Ugb2YgdGhlIFxmQi1DXGZSIG9yIHRoZSBcZkItTFxmUiBvcHRpb25zLCB3aGljaCBjYXVzZSB0aGUKK3NvcnRpbmcgdG8gYmUgZG9uZSBieSB0aGUgXGZCdGVybWNhcFxmUiBuYW1lIG9yIHRoZSBsb25nIEMgdmFyaWFibGUKK25hbWUsIHJlc3BlY3RpdmVseS4KKy5UUCA1CitcZkItVFxmUgorZWxpbWluYXRlcyBzaXplLXJlc3RyaWN0aW9ucyBvbiB0aGUgZ2VuZXJhdGVkIHRleHQuCitUaGlzIGlzIG1haW5seSB1c2VmdWwgZm9yIHRlc3RpbmcgYW5kIGFuYWx5c2lzLCBzaW5jZSB0aGUgY29tcGlsZWQKK2Rlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCAoZS5nLiwgMTAyMyBmb3IgdGVybWNhcCwgNDA5NiBmb3IgdGVybWluZm8pLgorLlRQCitcZkItdFxmUgordGVsbHMgXGZCdGljXGZQIHRvIGRpc2NhcmQgY29tbWVudGVkLW91dCBjYXBhYmlsaXRpZXMuCitOb3JtYWxseSB3aGVuIHRyYW5zbGF0aW5nIGZyb20gdGVybWluZm8gdG8gdGVybWNhcCwKK3VudHJhbnNsYXRhYmxlIGNhcGFiaWxpdGllcyBhcmUgY29tbWVudGVkLW91dC4KKy5UUCA1CitcZkItVVxmUgordGVsbHMgXGZCQElORk9DTVBAXGZQIHRvIG5vdCBwb3N0LXByb2Nlc3MgdGhlIGRhdGEgYWZ0ZXIgcGFyc2luZyB0aGUgc291cmNlIGZpbGUuCitUaGlzIGZlYXR1cmUgaGVscHMgd2hlbiBjb21wYXJpbmcgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0d28gc291cmNlIGZpbGVzLAorc2luY2UgaXQgZXhjbHVkZXMgdGhlIGluZmVyZW5jZXMgdGhhdCBcZkJASU5GT0NNUEBcZlAgbWFrZXMgdG8gZmlsbCBpbiBtaXNzaW5nCitkYXRhLgorLlRQIDUKK1xmQi1WXGZSCityZXBvcnRzIHRoZSB2ZXJzaW9uIG9mIG5jdXJzZXMgd2hpY2ggd2FzIHVzZWQgaW4gdGhpcyBwcm9ncmFtLCBhbmQgZXhpdHMuCisuVFAgNQorXGZCLXZcZlIgXGZJblxmUgorcHJpbnRzIG91dCB0cmFjaW5nIGluZm9ybWF0aW9uIG9uIHN0YW5kYXJkIGVycm9yIGFzIHRoZSBwcm9ncmFtIHJ1bnMuCitIaWdoZXIgdmFsdWVzIG9mIG4gaW5kdWNlIGdyZWF0ZXIgdmVyYm9zaXR5LgorLlRQIDUKK1xmQi13XGZSIFxmSXdpZHRoXGZSCitjaGFuZ2VzIHRoZSBvdXRwdXQgdG8gXGZJd2lkdGhcZlIgY2hhcmFjdGVycy4KKy5UUAorXGZCLXhcZlIKK3ByaW50IGluZm9ybWF0aW9uIGZvciB1c2VyLWRlZmluZWQgY2FwYWJpbGl0aWVzLgorVGhlc2UgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIHRlcm1pbmZvIHJlcGVydG9pcmUgd2hpY2ggY2FuIGJlIGxvYWRlZAordXNpbmcgdGhlIFxmQi14XGZSIG9wdGlvbiBvZiBcZkJ0aWNcZlAuCisuU0ggRklMRVMKKy5UUCAyMAorXCpkCitDb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZS4KKy5TSCBFWFRFTlNJT05TCitUaGUKK1xmQi1FXGZSLAorXGZCLUZcZlIsCitcZkItR1xmUiwKK1xmQi1SXGZSLAorXGZCLVRcZlIsCitcZkItVlxmUiwKK1xmQi1hXGZSLAorXGZCLWVcZlIsCitcZkItZlxmUiwKK1xmQi1nXGZSLAorXGZCLWlcZlIsCitcZkItbFxmUiwKK1xmQi1wXGZSLAorXGZCLXFcZlIgYW5kCitcZkItdFxmUgorb3B0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBTVnI0IGN1cnNlcy4KKy5QUAorVGhlIFxmQi1yXGZSIG9wdGlvbidzIG5vdGlvbiBvZiBgdGVybWNhcCcgY2FwYWJpbGl0aWVzIGlzIFN5c3RlbSBWIFJlbGVhc2UgNCdzLgorQWN0dWFsIEJTRCBjdXJzZXMgdmVyc2lvbnMgd2lsbCBoYXZlIGEgbW9yZSByZXN0cmljdGVkIHNldC4gIFRvIHNlZSBvbmx5IHRoZQorNC40QlNEIHNldCwgdXNlIFxmQi1yXGZSIFxmQi1SQlNEXGZSLgorLlNIIEJVR1MKK1RoZSBcZkItRlxmUiBvcHRpb24gb2YgXGZCQElORk9DTVBAXGZSKDFNKSBzaG91bGQgYmUgYSBcZkJAVE9FQFxmUigxTSkgbW9kZS4KKy5TSCBTRUUgQUxTTworXGZCQENBUFRPSU5GT0BcZlIoMU0pLAorXGZCQElORk9UT0NBUEBcZlIoMU0pLAorXGZCQFRJQ0BcZlIoMU0pLAorXGZCQFRPRUBcZlIoMU0pLAorXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQnRlcm1pbmZvXGZSKFwqbikuCisuUFAKK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5TSCBBVVRIT1IKK0VyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgorYW5kCisuYnIKK1Rob21hcyBFLiBEaWNrZXkgPGRpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldD4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL2luZm90b2NhcC4xbSBiL21hbi9pbmZvdG9jYXAuMW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxNjBiNAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9pbmZvdG9jYXAuMW0KQEAgLTAsMCArMSw3NyBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OS0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogaW5mb3RvY2FwLjFtLHYgMS44IDIwMDYvMTIvMjQgMjA6MTM6NTYgdG9tIEV4cCAkCisuVEggQElORk9UT0NBUEAgMU0gIiIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCitcZkJASU5GT1RPQ0FQQFxmUiAtIGNvbnZlcnQgYSBcZkl0ZXJtaW5mb1xmUiBkZXNjcmlwdGlvbiBpbnRvIGEgXGZJdGVybWNhcFxmUiBkZXNjcmlwdGlvbgorLlNIIFNZTk9QU0lTCitcZkJASU5GT1RPQ0FQQFxmUiBbXGZCLXZcZlJcZkluXGZSIFxmSXdpZHRoXGZSXSAgW1xmQi1WXGZSXSBbXGZCLTFcZlJdIFtcZkItd1xmUiBcZkl3aWR0aFxmUl0gXGZJZmlsZVxmUiAuIC4gLgorLlNIIERFU0NSSVBUSU9OCitcZkJASU5GT1RPQ0FQQFxmUiBsb29rcyBpbiBcZklmaWxlXGZSIGZvciBcZkJ0ZXJtaW5mb1xmUiBkZXNjcmlwdGlvbnMuICBGb3IgZWFjaAorb25lIGZvdW5kLCBhbiBlcXVpdmFsZW50IFxmQnRlcm1jYXBcZlIgZGVzY3JpcHRpb24gaXMgd3JpdHRlbiB0byBzdGFuZGFyZAorb3V0cHV0LiAgVGVybWluZm8gXGZCdXNlXGZSIGNhcGFiaWxpdGllcyBhcmUgdHJhbnNsYXRlZCBkaXJlY3RseSB0byB0ZXJtY2FwCitcZkJ0Y1xmUiBjYXBhYmlsaXRpZXMuCisuVFAgNQorXGZCLXZcZlIKK3ByaW50IG91dCB0cmFjaW5nIGluZm9ybWF0aW9uIG9uIHN0YW5kYXJkIGVycm9yIGFzIHRoZSBwcm9ncmFtIHJ1bnMuCisuVFAgNQorXGZCLVZcZlIKK3ByaW50IG91dCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBpbiB1c2Ugb24gc3RhbmRhcmQgZXJyb3IgYW5kIGV4aXQuCisuVFAgNQorXGZCLTFcZlIKK2NhdXNlIHRoZSBmaWVsZHMgdG8gcHJpbnQgb3V0IG9uZSB0byBhIGxpbmUuICBPdGhlcndpc2UsIHRoZSBmaWVsZHMKK3dpbGwgYmUgcHJpbnRlZCBzZXZlcmFsIHRvIGEgbGluZSB0byBhIG1heGltdW0gd2lkdGggb2YgNjAKK2NoYXJhY3RlcnMuCisuVFAgNQorXGZCLXdcZlIKK2NoYW5nZSB0aGUgb3V0cHV0IHRvIFxmSXdpZHRoXGZSIGNoYXJhY3RlcnMuCisuU0ggRklMRVMKKy5UUCAyMAorXCpkCitDb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZS4KKy5TSCBOT1RFUworVGhpcyB1dGlsaXR5IGlzIGFjdHVhbGx5IGEgbGluayB0byBcZklAVElDQFxmUiwgcnVubmluZyBpbiBcZkktQ1xmUiBtb2RlLgorWW91IGNhbiB1c2Ugb3RoZXIgXGZJQFRJQ0BcZlIgb3B0aW9ucyBzdWNoIGFzIFxmQi1mXGZSIGFuZCAgXGZCLXhcZlIuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJAVElDQFxmUigxTSksCitcZkJASU5GT0NNUEBcZlIoMU0pLAorXGZCdGVybWluZm9cZlIoXCpuKQorLlBQCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9rZXlfZGVmaW5lZC4zeCBiL21hbi9rZXlfZGVmaW5lZC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQxM2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL2tleV9kZWZpbmVkLjN4CkBAIC0wLDAgKzEsNjAgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDAzCisuXCIKKy5cIiAkSWQ6IGtleV9kZWZpbmVkLjN4LHYgMS40IDIwMDYvMDIvMjUgMjE6NTA6MDEgdG9tIEV4cCAkCisuVEgga2V5X2RlZmluZWQgM1ggIiIKKy5TSCBOQU1FCitcZkJrZXlfZGVmaW5lZFxmUCBcLSBjaGVjayBpZiBhIGtleWNvZGUgaXMgZGVmaW5lZAorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmludCBrZXlfZGVmaW5lZChjb25zdCBjaGFyICpkZWZpbml0aW9uKTtcZlAKKy5TSCBERVNDUklQVElPTgorVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LgorSXQgcGVybWl0cyBhbiBhcHBsaWNhdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBzdHJpbmcgaXMgY3VycmVudGx5IGJvdW5kCit0byBhbnkga2V5Y29kZS4KKy5TSCBSRVRVUk4gVkFMVUUKK0lmIHRoZSBzdHJpbmcgaXMgYm91bmQgdG8gYSBrZXljb2RlLCBpdHMgdmFsdWUgKGdyZWF0ZXIgdGhhbiB6ZXJvKSBpcyByZXR1cm5lZC4KK0lmIG5vIGtleWNvZGUgaXMgYm91bmQsIHplcm8gaXMgcmV0dXJuZWQuCitJZiB0aGUgc3RyaW5nIGNvbmZsaWN0cyB3aXRoIGxvbmdlciBzdHJpbmdzIHdoaWNoIGFyZSBib3VuZCB0byBrZXlzLCAtMSBpcyByZXR1cm5lZC4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJkZWZpbmVfa2V5XGZSKDNYKS4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9rZXlib3VuZC4zeCBiL21hbi9rZXlib3VuZC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2UxNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2tleWJvdW5kLjN4CkBAIC0wLDAgKzEsNjQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OS0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk5CisuXCIKKy5cIiAkSWQ6IGtleWJvdW5kLjN4LHYgMS42IDIwMDYvMDIvMjUgMjE6NDc6MDYgdG9tIEV4cCAkCisuVEgga2V5b2sgM1ggIiIKKy5TSCBOQU1FCitcZkJrZXlib3VuZFxmUCBcLSByZXR1cm4gZGVmaW5pdGlvbiBvZiBrZXljb2RlCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlAKKy5zcAorXGZCY2hhciAqIGtleWJvdW5kKGludCBrZXljb2RlLCBpbnQgY291bnQpO1xmUAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuCitJdCBwZXJtaXRzIGFuIGFwcGxpY2F0aW9uIHRvIGRldGVybWluZSB0aGUgc3RyaW5nIHdoaWNoIGlzIGRlZmluZWQKK2luIHRoZSB0ZXJtaW5mbyBmb3Igc3BlY2lmaWMga2V5Y29kZXMuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgXGZJa2V5Y29kZVxmUCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybywgZWxzZSBOVUxMIGlzIHJldHVybmVkLgorSWYgaXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGRlZmluZWQga2V5LCB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuCitUaGUgXGZJY291bnRcZlAgcGFyYW1ldGVyIGlzIHVzZWQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGl0ZXJhdGUKK3Rocm91Z2ggbXVsdGlwbGUgZGVmaW5pdGlvbnMsIGNvdW50aW5nIGZyb20gemVyby4KK1doZW4gc3VjY2Vzc2Z1bCwKK3RoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHdoaWNoIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJkZWZpbmVfa2V5XGZSKDNYKSwKK1xmQmtleW9rXGZSKDNYKS4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9rZXlvay4zeCBiL21hbi9rZXlvay4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGMyYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2tleW9rLjN4CkBAIC0wLDAgKzEsNjMgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk3CisuXCIKKy5cIiAkSWQ6IGtleW9rLjN4LHYgMS45IDIwMDYvMDIvMjUgMjE6NDc6MDYgdG9tIEV4cCAkCisuVEgga2V5b2sgM1ggIiIKKy5TSCBOQU1FCitcZkJrZXlva1xmUCBcLSBlbmFibGUgb3IgZGlzYWJsZSBhIGtleWNvZGUKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUAorLnNwCitcZkJpbnQga2V5b2soaW50IGtleWNvZGUsIGJvb2wgZW5hYmxlKTtcZlAKKy5TSCBERVNDUklQVElPTgorVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LgorSXQgcGVybWl0cyBhbiBhcHBsaWNhdGlvbiB0byBkaXNhYmxlIHNwZWNpZmljIGtleWNvZGVzLCByYXRoZXIgdGhhbgordXNlIHRoZSBcZklrZXlwYWRcZlAgZnVuY3Rpb24gdG8gZGlzYWJsZSBhbGwga2V5Y29kZXMuCitLZXlzIHRoYXQgaGF2ZSBiZWVuIGRpc2FibGVkIGNhbiBiZSByZWVuYWJsZWQuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUga2V5Y29kZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBlbHNlIEVSUiBpcyByZXR1cm5lZC4KK0lmIGl0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBkZWZpbmVkIGtleSwgdGhlbiBFUlIgaXMgcmV0dXJuZWQuCitJZiB0aGUgXGZJZW5hYmxlXGZQIHBhcmFtZXRlciBpcyB0cnVlLCB0aGVuIHRoZSBrZXkgbXVzdCBoYXZlIGJlZW4gZGlzYWJsZWQsCithbmQgdmljZSB2ZXJzYS4KK090aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgT0suCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQKK2FueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKy5TSCBTRUUgQUxTTworXGZCZGVmaW5lX2tleVxmUigzWCkuCisuU0ggQVVUSE9SCitUaG9tYXMgRGlja2V5LgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbGVnYWN5X2NvZGluZy4zeCBiL21hbi9sZWdhY3lfY29kaW5nLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzQ5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbGVnYWN5X2NvZGluZy4zeApAQCAtMCwwICsxLDgyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKy5cIgorLlwiICRJZDogbGVnYWN5X2NvZGluZy4zeCx2IDEuMyAyMDA2LzEyLzI0IDE1OjEyOjU1IHRvbSBFeHAgJAorLlRIIGxlZ2FjeV9jb2RpbmcgM1ggIiIKKy5TSCBOQU1FCitcZkJ1c2VfbGVnYWN5X2NvZGluZ1xmUiBcLSB1c2UgdGVybWluYWwncyBkZWZhdWx0IGNvbG9ycworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmludCB1c2VfbGVnYWN5X2NvZGluZyhpbnQgbGV2ZWwpO1xmUAorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5JIHVzZV9sZWdhY3lfY29kaW5nKCkKK2Z1bmN0aW9uIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuCitJdCBhbGxvd3MgdGhlIGNhbGxlciB0byBjaGFuZ2UgdGhlIHJlc3VsdCBvZiBcZkJ1bmN0cmxcZlAsCithbmQgc3VwcHJlc3MgcmVsYXRlZCBjaGVja3Mgd2l0aGluIHRoZSBsaWJyYXJ5IHRoYXQgd291bGQgbm9ybWFsbHkKK2NhdXNlIG5vbnByaW50aW5nIGNoYXJhY3RlcnMgdG8gYmUgcmVuZGVyZWQgaW4gdmlzaWJsZSBmb3JtLgorVGhpcyBhZmZlY3RzIG9ubHkgOC1iaXQgY2hhcmFjdGVycy4KKy5QUAorVGhlIFxmSWxldmVsXGZQIHBhcmFtZXRlciBjb250cm9scyB0aGUgcmVzdWx0OgorLlJTCisuVFAgNQorMAordGhlIGxpYnJhcnkgZnVuY3Rpb25zIG5vcm1hbGx5LAorcmVuZGVyaW5nIG5vbnByaW50aW5nIGNoYXJhY3RlcnMgYXMgZGVzY3JpYmVkIGluIFxmQnVuY3RybFxmUC4KKy5UUAorMQordGhlIGxpYnJhcnkgaWdub3JlcyBcZkJpc3ByaW50ZlxmUCBmb3IgY29kZXMgaW4gdGhlIHJhbmdlIDE2MC0yNTUuCisuVFAKKzIKK3RoZSBsaWJyYXJ5IGlnbm9yZXMgXGZCaXNwcmludGZcZlAgZm9yIGNvZGVzIGluIHRoZSByYW5nZSAxMjgtMjU1LgorSXQgYWxzbyBtb2RpZmllcyB0aGUgb3V0cHV0IG9mIFxmQnVuY3RybFxmUCwgc2hvd2luZyBjb2RlcyBpbiB0aGUKK3JhbmdlIDEyOC0xNTkgYXMgaXMuCisuUkUKKy5TSCBSRVRVUk4gVkFMVUUKK0lmIHRoZSBzY3JlZW4gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLAorb3IgdGhlIFxmSWxldmVsXGZQIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UsCit0aGUgZnVuY3Rpb24gcmV0dXJucyBcZkJFUlJcZlAuCitPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIHByZXZpb3VzIGxldmVsOiBcZkIwXGZQLCBcZkIxXGZQIG9yIFxmQjJcZlAuCisuU0ggUE9SVEFCSUxJVFkKK1RoaXMgcm91dGluZSBpcyBzcGVjaWZpYyB0byBuY3Vyc2VzLgorSXQgd2FzIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gbmN1cnNlcyBleHRlbnNpb25zCitiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggU0VFIEFMU08KK1xmQnVuY3RybFxmUi4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkgKHRvIHN1cHBvcnQgbHlueCdzIGZvbnQtc3dpdGNoaW5nIGZlYXR1cmUpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWFrZV9zZWQuc2ggYi9tYW4vbWFrZV9zZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJhZmFjOQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9tYWtlX3NlZC5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKyMgJElkOiBtYWtlX3NlZC5zaCx2IDEuOSAyMDA1LzA3LzE2IDE4OjE1OjMxIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ny0yMDA1CisjCisjIENvbnN0cnVjdCBhIHNlZC1zY3JpcHQgdG8gcGVyZm9ybSByZW5hbWluZyB3aXRoaW4gbWFuLXBhZ2VzLiAgT3JpZ2luYWxseQorIyB3cml0dGVuIGluIG11Y2ggc2ltcGxlciBmb3JtLCB0aGlzIG9uZSBhY2NvdW50cyBmb3IgdGhlIGNvbW1vbiBjYXNlcyBvZgorIyBzZWN0aW9uLW5hbWVzIGluIG1hbi1wYWdlcy4KKworaWYgdGVzdCAkIyAhPSAxIDsgdGhlbgorCWVjaG8gJz8gZXhwZWN0ZWQgYSBzaW5nbGUgZmlsZW5hbWUnCisJZXhpdCAxCitmaQorCitDT0w9Y29sJCQKK0lOUFVUPWlucHV0JCQKK1VQUEVSPXVwcGVyJCQKK1NDUklQVD1zY3JpcHQkJAorUkVTVUxUPXJlc3VsdCQkCitybSAtZiAkVVBQRVIgJFNDUklQVCAkUkVTVUxUCit0cmFwICJybSAtZiAkQ09MLiogJElOUFVUICRVUFBFUiAkU0NSSVBUICRSRVNVTFQiIDAgMSAyIDUgMTUKK2ZncmVwIC12IFwjICQxIHwgXAorc2VkCS1lICdzL1sJXVsJXSovCS9nJyA+JElOUFVUCisKK2ZvciBGIGluIDEgMiAzIDQKK2RvCitzZWQJLWUgJ3MvXC4vCS9nJyAkSU5QVVQgfCBcCitjdXQJLWYgJEYgPiAkQ09MLiRGCitkb25lCitmb3IgRiBpbiAyIDQKK2RvCisJdHIgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogPCRDT0wuJEYgPiRVUFBFUgorCW12ICRVUFBFUiAkQ09MLiRGIAorZG9uZQorcGFzdGUgJENPTC4qIHwgXAorc2VkCS1lICdzL14vc1wvXFw8LycgXAorCS1lICdzLyQvXC8vJyA+JFVQUEVSCisKK2VjaG8gIiMgRG8gdGhlIFRIIGxpbmVzIiA+PiRSRVNVTFQKK3NlZAktZSAncy9cLy9cL1RIIC8nIFwKKwktZSAncy8JLyAvJyBcCisJLWUgJ3MvCS8gIiJcL1RIIC8nIFwKKwktZSAncy8JLyAvJyBcCisJLWUgJ3MvXC8kLyAiIlwvLycgXAorCSRVUFBFUiA+PiRSRVNVTFQKKworZWNobyAiIyBEbyB0aGUgZW1iZWRkZWQgcmVmZXJlbmNlcyIgPj4kUkVTVUxUCitzZWQJLWUgJ3MvPC88ZkIvJyBcCisJLWUgJ3MvCS9cXFxcZlIoLycgXAorCS1lICdzLwkvKVwvZkIvJyBcCisJLWUgJ3MvCS9cXFxcZlIoLycgXAorCS1lICdzL1wvJC8pXC8vJyBcCisJJFVQUEVSID4+JFJFU1VMVAorCitlY2hvICIjIERvIHRoZSBcZkJ4eHhcZlIgcmVmZXJlbmNlcyBpbiB0aGUgLk5BTUUgc2VjdGlvbiIgPj4kUkVTVUxUCitzZWQJLWUgJ3MvXFw8L15cXFxcZkIvJyBcCisJLWUgJ3MvCVteCV0qCS9cXFxcZltSUF0gLVwvXFxcXGZCLycgXAorCS1lICdzLwkuKiQvXFxcXGZSIC1cLy8nIFwKKwkkVVBQRVIgPj4kUkVTVUxUCisKKyMgRmluYWxseSwgc2VuZCB0aGUgcmVzdWx0IHRvIHN0YW5kYXJkIG91dHB1dAorY2F0ICRSRVNVTFQKZGlmZiAtLWdpdCBhL21hbi9tYW5fZGIucmVuYW1lcyBiL21hbi9tYW5fZGIucmVuYW1lcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkxZWVjCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL21hbl9kYi5yZW5hbWVzCkBAIC0wLDAgKzEsMTc3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogbWFuX2RiLnJlbmFtZXMsdiAwLjQxIDIwMDgvMTAvMjUgMjM6MjQ6MDMgdG9tIEV4cCAkCisjIE1hbnVhbC1wYWdlIHJlbmFtaW5ncyBmb3IgdGhlIG1hbl9kYiBwcm9ncmFtCisjCisjIEZpbGVzOgorY2FwdG9pbmZvLjFtCQkJY2FwdG9pbmZvLjEKK2NsZWFyLjEJCQkJY2xlYXIuMQorY3Vyc19hZGRfd2NoLjN4CQkJYWRkX3djaC4zbmN1cnNlcworY3Vyc19hZGRfd2Noc3RyLjN4CQlhZGRfd2Noc3RyLjNuY3Vyc2VzCitjdXJzX2FkZGNoLjN4CQkJYWRkY2guM25jdXJzZXMKK2N1cnNfYWRkY2hzdHIuM3gJCWFkZGNoc3RyLjNuY3Vyc2VzCitjdXJzX2FkZHN0ci4zeAkJCWFkZHN0ci4zbmN1cnNlcworY3Vyc19hZGR3c3RyLjN4CQkJYWRkd3N0ci4zbmN1cnNlcworY3Vyc19hdHRyLjN4CQkJYXR0ci4zbmN1cnNlcworY3Vyc19iZWVwLjN4CQkJYmVlcC4zbmN1cnNlcworY3Vyc19ia2dkLjN4CQkJYmtnZC4zbmN1cnNlcworY3Vyc19ia2dybmQuM3gJCQlia2dybmQuM25jdXJzZXMKK2N1cnNfYm9yZGVyLjN4CQkJYm9yZGVyLjNuY3Vyc2VzCitjdXJzX2JvcmRlcl9zZXQuM3gJCWJvcmRlcl9zZXQuM25jdXJzZXMKK2N1cnNfY2xlYXIuM3gJCQljbGVhci4zbmN1cnNlcworY3Vyc19jb2xvci4zeAkJCWNvbG9yLjNuY3Vyc2VzCitjdXJzX2RlbGNoLjN4CQkJZGVsY2guM25jdXJzZXMKK2N1cnNfZGVsZXRlbG4uM3gJCWRlbGV0ZWxuLjNuY3Vyc2VzCitjdXJzX2V4dGVuZC4zeAkJCWV4dGVuc2lvbnMuM25jdXJzZXMKK2N1cnNfZ2V0X3djaC4zeAkJCWdldF93Y2guM25jdXJzZXMKK2N1cnNfZ2V0X3dzdHIuM3gJCWdldF93c3RyLjNuY3Vyc2VzCitjdXJzX2dldGNjaGFyLjN4CQlnZXRjY2hhci4zbmN1cnNlcworY3Vyc19nZXRjaC4zeAkJCWdldGNoLjNuY3Vyc2VzCitjdXJzX2dldHN0ci4zeAkJCWdldHN0ci4zbmN1cnNlcworY3Vyc19nZXR5eC4zeAkJCWdldHl4LjNuY3Vyc2VzCitjdXJzX2luX3djaC4zeAkJCWluX3djaC4zbmN1cnNlcworY3Vyc19pbl93Y2hzdHIuM3gJCWluX3djaHN0ci4zbmN1cnNlcworY3Vyc19pbmNoLjN4CQkJaW5jaC4zbmN1cnNlcworY3Vyc19pbmNoc3RyLjN4CQkJaW5jaHN0ci4zbmN1cnNlcworY3Vyc19pbml0c2NyLjN4CQkJaW5pdHNjci4zbmN1cnNlcworY3Vyc19pbm9wdHMuM3gJCQlpbm9wdHMuM25jdXJzZXMKK2N1cnNfaW5zX3djaC4zeAkJCWluc193Y2guM25jdXJzZXMKK2N1cnNfaW5zX3dzdHIuM3gJCWluc193c3RyLjNuY3Vyc2VzCitjdXJzX2luc2NoLjN4CQkJaW5zY2guM25jdXJzZXMKK2N1cnNfaW5zc3RyLjN4CQkJaW5zc3RyLjNuY3Vyc2VzCitjdXJzX2luc3RyLjN4CQkJaW5zdHIuM25jdXJzZXMKK2N1cnNfaW53c3RyLjN4CQkJaW53c3RyLjNuY3Vyc2VzCitjdXJzX2tlcm5lbC4zeAkJCWtlcm5lbC4zbmN1cnNlcworY3Vyc19sZWdhY3kuM3gJCQlsZWdhY3kuM25jdXJzZXMKK2N1cnNfbWVtbGVha3MuM3gJCW1lbWxlYWtzLjNuY3Vyc2VzCitjdXJzX21vdXNlLjN4CQkJbW91c2UuM25jdXJzZXMKK2N1cnNfbW92ZS4zeAkJCW1vdmUuM25jdXJzZXMKK2N1cnNfb3BhcXVlLjN4CQkJb3BhcXVlLjNuY3Vyc2VzCitjdXJzX291dG9wdHMuM3gJCQlvdXRvcHRzLjNuY3Vyc2VzCitjdXJzX292ZXJsYXkuM3gJCQlvdmVybGF5LjNuY3Vyc2VzCitjdXJzX3BhZC4zeAkJCXBhZC4zbmN1cnNlcworY3Vyc19wcmludC4zeAkJCXByaW50LjNuY3Vyc2VzCitjdXJzX3ByaW50dy4zeAkJCXByaW50dy4zbmN1cnNlcworY3Vyc19yZWZyZXNoLjN4CQkJcmVmcmVzaC4zbmN1cnNlcworY3Vyc19zY2Fudy4zeAkJCXNjYW53LjNuY3Vyc2VzCitjdXJzX3Njcl9kdW1wLjN4CQlzY3JfZHVtcC4zbmN1cnNlcworY3Vyc19zY3JvbGwuM3gJCQlzY3JvbGwuM25jdXJzZXMKK2N1cnNfc2xrLjN4CQkJc2xrLjNuY3Vyc2VzCitjdXJzX3Rlcm1hdHRycy4zeAkJdGVybWF0dHJzLjNuY3Vyc2VzCitjdXJzX3Rlcm1jYXAuM3gJCQl0ZXJtY2FwLjNuY3Vyc2VzCitjdXJzX3Rlcm1pbmZvLjN4CQl0ZXJtaW5mby4zbmN1cnNlcworY3Vyc190aHJlYWRzLjN4CQkJdGhyZWFkcy4zbmN1cnNlcworY3Vyc190b3VjaC4zeAkJCXRvdWNoLjNuY3Vyc2VzCitjdXJzX3RyYWNlLjN4CQkJdHJhY2UuM25jdXJzZXMKK2N1cnNfdXRpbC4zeAkJCXV0aWwuM25jdXJzZXMKK2N1cnNfd2luZG93LjN4CQkJd2luZG93LjNuY3Vyc2VzCitjdXJzZXMuM3gJCQluY3Vyc2VzLjNuY3Vyc2VzCitkZWZhdWx0X2NvbG9ycy4zeAkJZGVmYXVsdF9jb2xvcnMuM25jdXJzZXMKK2RlZmluZV9rZXkuM3gJCQlkZWZpbmVfa2V5LjNuY3Vyc2VzCitmb3JtLjN4CQkJCWZvcm0uM2Zvcm0KK2Zvcm1fY3Vyc29yLjN4CQkJY3Vyc29yLjNmb3JtCitmb3JtX2RhdGEuM3gJCQlkYXRhLjNmb3JtCitmb3JtX2RyaXZlci4zeAkJCWRyaXZlci4zZm9ybQorZm9ybV9maWVsZC4zeAkJCWZpZWxkLjNmb3JtCitmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3gJZmllbGRfYXR0cmlidXRlcy4zZm9ybQorZm9ybV9maWVsZF9idWZmZXIuM3gJCWZpZWxkX2J1ZmZlci4zZm9ybQorZm9ybV9maWVsZF9pbmZvLjN4CQlmaWVsZF9pbmZvLjNmb3JtCitmb3JtX2ZpZWxkX2p1c3QuM3gJCWZpZWxkX2p1c3QuM2Zvcm0KK2Zvcm1fZmllbGRfbmV3LjN4CQlmaWVsZF9uZXcuM2Zvcm0KK2Zvcm1fZmllbGRfb3B0cy4zeAkJZmllbGRfb3B0cy4zZm9ybQorZm9ybV9maWVsZF91c2VycHRyLjN4CQlmaWVsZF91c2VycHRyLjNmb3JtCitmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gJZmllbGRfdmFsaWRhdGlvbi4zZm9ybQorZm9ybV9maWVsZHR5cGUuM3gJCWZpZWxkdHlwZS4zZm9ybQorZm9ybV9ob29rLjN4CQkJaG9vay4zZm9ybQorZm9ybV9uZXcuM3gJCQluZXcuM2Zvcm0KK2Zvcm1fbmV3X3BhZ2UuM3gJCW5ld19wYWdlLjNmb3JtCitmb3JtX29wdHMuM3gJCQlvcHRzLjNmb3JtCitmb3JtX3BhZ2UuM3gJCQlwYWdlLjNmb3JtCitmb3JtX3Bvc3QuM3gJCQlwb3N0LjNmb3JtCitmb3JtX3JlcXVlc3RuYW1lLjN4CQlyZXF1ZXN0bmFtZS4zZm9ybQorZm9ybV91c2VycHRyLjN4CQkJdXNlcnB0ci4zZm9ybQorZm9ybV93aW4uM3gJCQl3aW4uM2Zvcm0KK2luZm9jbXAuMW0JCQlpbmZvY21wLjEKK2luZm90b2NhcC4xbQkJCWluZm90b2NhcC4xCitrZXlfZGVmaW5lZC4zeAkJCWtleV9kZWZpbmVkLjNuY3Vyc2VzCitrZXlib3VuZC4zeAkJCWtleWJvdW5kLjNuY3Vyc2VzCitrZXlvay4zeAkJCWtleW9rLjNuY3Vyc2VzCitsZWdhY3lfY29kaW5nLjN4CQlsZWdhY3lfY29kaW5nLjNuY3Vyc2VzCittZW51LjN4CQkJCW1lbnUuM21lbnUKK21lbnVfYXR0cmlidXRlcy4zeAkJYXR0cmlidXRlcy4zbWVudQorbWVudV9jdXJzb3IuM3gJCQljdXJzb3IuM21lbnUKK21lbnVfZHJpdmVyLjN4CQkJZHJpdmVyLjNtZW51CittZW51X2Zvcm1hdC4zeAkJCWZvcm1hdC4zbWVudQorbWVudV9ob29rLjN4CQkJaG9vay4zbWVudQorbWVudV9pdGVtcy4zeAkJCWl0ZW1zLjNtZW51CittZW51X21hcmsuM3gJCQltYXJrLjNtZW51CittZW51X25ldy4zeAkJCW5ldy4zbWVudQorbWVudV9vcHRzLjN4CQkJb3B0cy4zbWVudQorbWVudV9wYXR0ZXJuLjN4CQkJcGF0dGVybi4zbWVudQorbWVudV9wb3N0LjN4CQkJcG9zdC4zbWVudQorbWVudV9yZXF1ZXN0bmFtZS4zeAkJcmVxdWVzdG5hbWUuM21lbnUKK21lbnVfc3BhY2luZy4zeAkJCXNwYWNpbmcuM21lbnUKK21lbnVfdXNlcnB0ci4zeAkJCXVzZXJwdHIuM21lbnUKK21lbnVfd2luLjN4CQkJd2luLjNtZW51CittaXRlbV9jdXJyZW50LjN4CQltZW51X2N1cnJlbnQuM21lbnUKK21pdGVtX25hbWUuM3gJCQltZW51X25hbWUuM21lbnUKK21pdGVtX25ldy4zeAkJCW1lbnVfbmV3LjNtZW51CittaXRlbV9vcHRzLjN4CQkJbWVudV9vcHRzLjNtZW51CittaXRlbV91c2VycHRyLjN4CQltZW51X3VzZXJwdHIuM21lbnUKK21pdGVtX3ZhbHVlLjN4CQkJbWVudV92YWx1ZS4zbWVudQorbWl0ZW1fdmlzaWJsZS4zeAkJbWVudV92aXNpYmxlLjNtZW51CituY3Vyc2VzLjN4CQkJbmN1cnNlcy4zbmN1cnNlcworcGFuZWwuM3gJCQlwYW5lbC4zY3Vyc2VzCitwcmludGYuM3MJCQlwcmludGYuMworcHV0Yy4zcyAJCQlwdXRjLjMKK3Jlc2l6ZXRlcm0uM3gJCQlyZXNpemV0ZXJtLjNuY3Vyc2VzCitzY2FuZi4zcwkJCXNjYW5mLjMKK3N5c3RlbS4zcwkJCXN5c3RlbS4zCit0ZXJtLjUJCQkJdGVybS41Cit0ZXJtLjcJCQkJdGVybS43Cit0ZXJtaW5mby41CQkJdGVybWluZm8uNQordGVybWluZm8uXFxcKm4JCQl0ZXJtaW5mby41Cit0aWMuMW0JCQkJdGljLjEKK3RvZS4xbQkJCQl0b2UuMQordHB1dC4xCQkJCXRwdXQuMQordHNldC4xCQkJCXRzZXQuMQordnByaW50Zi4zcwkJCXZwcmludGYuMword3Jlc2l6ZS4zeAkJCXdyZXNpemUuM25jdXJzZXMKKyMKKyMgT3RoZXI6Cit0YWNrLjFtCQkJCXRhY2suMQorIworZ2V0dHkuMQkJCQlnZXR0eS44CitzY2FuZi4zCQkJCXNjYW5mLjMKK3R0eXMuNQkJCQl0dHlzLjQKK3Rlcm1pby43CQkJdGVybWlvcy4zCitzeXN0ZW0uMwkJCXN5c3RlbS4zCityZWdjb21wLjN4CQkJcmVnY29tcC4zCityZWdleGVjLjN4CQkJcmVnZXhlYy4zCisjCisjIHZpbGU6Y2ZnbW9kZQpkaWZmIC0tZ2l0IGEvbWFuL21hbmxpbmtzLnNlZCBiL21hbi9tYW5saW5rcy5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwNTViNAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9tYW5saW5rcy5zZWQKQEAgLTAsMCArMSwxMDIgQEAKKyMgJElkOiBtYW5saW5rcy5zZWQsdiAxLjEzIDIwMDgvMDEvMTkgMjM6MzE6MTcgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdpdmVuIGEgbWFucGFnZSAobnJvZmYpIGFzIGlucHV0LCB3cml0ZXMgYSBsaXN0IG9mIHRoZSBuYW1lcyB0aGF0IGFyZQorIyBsaXN0ZWQgaW4gdGhlICJOQU1FIiBzZWN0aW9uLCBpLmUuLCB0aGUgbmFtZXMgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIHVzZQorIyBhcyBhbGlhc2VzIGZvciB0aGUgbWFucGFnZSAtVC5EaWNrZXkKKyMKKyMgZWxpbWluYXRlIGZvcm1hdHRpbmcgY29udHJvbHMgdGhhdCBnZXQgaW4gdGhlIHdheQorL14nXFwiL2QKKy9cLlxcIi9kCisvXlwuYnIvZAorL15cLnNwL2QKKy90eXBlZGVmL2QKK3MvXlwuSVgvLworcy9cXGYuLy9nCitzL1s6LF0vIC9nCisjCisjIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlLCBjb252ZXJ0IG11bHRpcGxlIGJsYW5rcyB0byBzaW5nbGUgc3BhY2UKK3MvXlsgCV1bIAldKi8vCitzL1sgCV1bIAldKiQvLworcy9bIAldWyAJXSovIC9nCisjCisjIGNvbnZlcnQgIi5TSCIgaW50byBhIG1vcmUgbWFuYWdlYWJsZSBmb3JtCitzL1wuU0hbIAldWyAJXSovLlNIXygvCisjCisjIGluICIuU0ggTkFNRSIKKyMgY2hhbmdlICJcLSIgdG8gIi0iLCBlbGltaW5hdGUgdGV4dCBhZnRlciAiLSIsIGFuZCBzcGxpdCB0aGUgcmVtYWluaW5nIGxpbmVzCisjIGF0IGVhY2ggc3BhY2UsIG1ha2luZyBhIGxpc3Qgb2YgbmFtZXM6CisvXlwuU0hfKE5BTUUvLC9eXC5TSF8oU1lOT1BTSVMveworcy9cXC0uKi8gLS8KKy8gLS97CitzLyAtLiovLworcy8gL1wKKy9nCit9CisvXi0veworZAorfQorcy8gL1wKKy9nCit9CisjCisjIGluICIuU0ggU1lOT1BTSVMiCisjIHJlbW92ZSBhbnkgbGluZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSAnKCcsIHNpbmNlIHdlIG9ubHkgd2FudCBmdW5jdGlvbnMuCisjIHRoZW4gc3RyaXAgb2ZmIHJldHVybi10eXBlIG9mIGVhY2ggZnVuY3Rpb24uCisjIGZpbmFsbHksIHJlbW92ZSB0aGUgcGFyYW1ldGVyIGxpc3QsIHdoaWNoIGJlZ2lucyB3aXRoIGEgJygnLgorL15cLlNIXyhTWU5PUFNJUy8sL15cLlNIXyhERVNDUklQVElPTi97CisvXlteKF0qJC9kCisjIHJlZHVjZQorIwkuQiAiaW50IGFkZF93Y2goIGNvbnN0IGNjaGFyX3QgKlxmSXdjaFxmQiApOyIKKyMgdG8KKyMJYWRkX3djaCggY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7Igorcy9eXChbXiAoXSogW14gKF0qIFsqXSpcKS8vZworcy9eXChbXiAoXSogWypdKlwpLy9nCisjIHRyaW0gYmxhbmtzIGluIGNhc2Ugd2UgaGF2ZQorIwl2b2lkICgqKSAoRk9STSAqKSBmaWVsZF9pbml0KGNvbnN0IEZPUk0gKmZvcm0pOworcy8pICgvKSgvZworIyByZWR1Y2Ugc3R1ZmYgbGlrZQorIwl2b2lkICgqKShGT1JNICopIGZpZWxkX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CisjIHRvCisjCWZpZWxkX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CitzL15cKChbXildKilcKVwoKFteKV0qKVwpKlsgXSovL2cKKyMgcmVuYW1lIG1hcmtlciB0ZW1wb3JhcmlseQorcy9cLlNIXygvLlNIXy8KKyMga2lsbCBsaW5lcyB3aXRoICIpOyIsIGFuZCB0cmltIG9mZiBiZWdpbm5pbmcgb2YgYXJndW1lbnQgbGlzdC4KK3MvWygpXS4qLy8KKyMgcmVuYW1lIG1hcmtlciBiYWNrCitzL1wuU0hfLy5TSF8oLworfQorIworIyBkZWxldGUgIi5TSCBERVNDUklQVElPTiIgYW5kIGZvbGxvd2luZyBsaW5lcworL15cLlNIXyhERVNDUklQVElPTi8sJHsKK2QKK30KKyMKKyMgZGVsZXRlIGFueSByZW1haW5pbmcgZGlyZWN0aXZlcworL15cLi9kCmRpZmYgLS1naXQgYS9tYW4vbWVudS4zeCBiL21hbi9tZW51LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDZmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudS4zeApAQCAtMCwwICsxLDE5MyBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWVudS4zeCx2IDEuMTkgMjAwNi8xMS8wNCAxODozODoyOSB0b20gRXhwICQKKy5USCBtZW51IDNYICIiCisuU0ggTkFNRQorXGZCbWVudVxmUiAtIGN1cnNlcyBleHRlbnNpb24gZm9yIHByb2dyYW1taW5nIG1lbnVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQm1lbnVcZlIgbGlicmFyeSBwcm92aWRlcyB0ZXJtaW5hbC1pbmRlcGVuZGVudCBmYWNpbGl0aWVzIGZvciBjb21wb3NpbmcKK21lbnUgc3lzdGVtcyBvbiBjaGFyYWN0ZXItY2VsbCB0ZXJtaW5hbHMuICBUaGUgbGlicmFyeSBpbmNsdWRlczogaXRlbSByb3V0aW5lcywKK3doaWNoIGNyZWF0ZSBhbmQgbW9kaWZ5IG1lbnUgaXRlbXM7IGFuZCBtZW51IHJvdXRpbmVzLCB3aGljaCBncm91cCBpdGVtcyBpbnRvCittZW51cywgZGlzcGxheSBtZW51cyBvbiB0aGUgc2NyZWVuLCBhbmQgaGFuZGxlIGludGVyYWN0aW9uIHdpdGggdGhlIHVzZXIuCisuUFAKK1RoZSBcZkJtZW51XGZSIGxpYnJhcnkgdXNlcyB0aGUgXGZCY3Vyc2VzXGZSIGxpYnJhcmllcywgYW5kIGEgY3Vyc2VzCitpbml0aWFsaXphdGlvbiByb3V0aW5lIHN1Y2ggYXMgXGZCaW5pdHNjclxmUiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYW55IG9mCit0aGVzZSBmdW5jdGlvbnMuICBUbyB1c2UgdGhlIFxmQm1lbnVcZlIgbGlicmFyeSwgbGluayB3aXRoIHRoZSBvcHRpb25zCitcZkItbG1lbnUgLWxjdXJzZXNcZlIuCisuCisuU1MgQ3VycmVudCBEZWZhdWx0IFZhbHVlcyBmb3IgSXRlbSBBdHRyaWJ1dGVzCisuCitUaGUgXGZCbWVudVxmUiBsaWJyYXJ5IG1haW50YWlucyBhIGRlZmF1bHQgdmFsdWUgZm9yIGl0ZW0gYXR0cmlidXRlcy4gIFlvdSBjYW4KK2dldCBvciBzZXQgdGhpcyBkZWZhdWx0IGJ5IGNhbGxpbmcgdGhlIGFwcHJvcHJpYXRlIFxmQmdldF9cZlIgb3IgXGZCc2V0X1xmUgorcm91dGluZSB3aXRoIGEgXGZCTlVMTFxmUiBpdGVtIHBvaW50ZXIuICBDaGFuZ2luZyB0aGlzIGRlZmF1bHQgd2l0aCBhCitcZkJzZXRfXGZSIGZ1bmN0aW9uIGFmZmVjdHMgZnV0dXJlIGl0ZW0gY3JlYXRpb25zLCBidXQgZG9lcyBub3QgY2hhbmdlIHRoZQorcmVuZGVyaW5nIG9mIGl0ZW1zIGFscmVhZHkgY3JlYXRlZC4KKy4KKy5TUyBSb3V0aW5lIE5hbWUgSW5kZXgKKy4KK1RoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgZWFjaCBcZkJtZW51XGZSIHJvdXRpbmUgYW5kIHRoZSBuYW1lIG9mCit0aGUgbWFudWFsIHBhZ2Ugb24gd2hpY2ggaXQgaXMgZGVzY3JpYmVkLgorLgorLlRTCitsIGwgLgorXGZCY3Vyc2VzXGZSIFJvdXRpbmUgTmFtZQlNYW51YWwgUGFnZSBOYW1lCis9CitjdXJyZW50X2l0ZW0JXGZCbWl0ZW1fY3VycmVudFxmUigzWCkKK2ZyZWVfaXRlbSAJXGZCbWl0ZW1fbmV3XGZSKDNYKQorZnJlZV9tZW51IAlcZkJtZW51X25ld1xmUigzWCkKK2l0ZW1fY291bnQJXGZCbWVudV9pdGVtc1xmUigzWCkKK2l0ZW1fZGVzY3JpcHRpb24JXGZCbWl0ZW1fbmFtZVxmUigzWCkKK2l0ZW1faW5kZXgJXGZCbWl0ZW1fY3VycmVudFxmUigzWCkKK2l0ZW1faW5pdCAJXGZCbWVudV9ob29rXGZSKDNYKQoraXRlbV9uYW1lIAlcZkJtaXRlbV9uYW1lXGZSKDNYKQoraXRlbV9vcHRzIAlcZkJtaXRlbV9vcHRzXGZSKDNYKQoraXRlbV9vcHRzX29mZglcZkJtaXRlbV9vcHRzXGZSKDNYKQoraXRlbV9vcHRzX29uCVxmQm1pdGVtX29wdHNcZlIoM1gpCitpdGVtX3Rlcm0gCVxmQm1lbnVfaG9va1xmUigzWCkKK2l0ZW1fdXNlcnB0cglcZkJtaXRlbV91c2VycHRyXGZSKDNYKQoraXRlbV92YWx1ZQlcZkJtaXRlbV92YWx1ZVxmUigzWCkKK2l0ZW1fdmlzaWJsZQlcZkJtaXRlbV92aXNpYmxlXGZSKDNYKQorbWVudV9iYWNrIAlcZkJtZW51X2F0dHJpYnV0ZXNcZlIoM1gpCittZW51X2RyaXZlcglcZkJtZW51X2RyaXZlclxmUigzWCkKK21lbnVfZm9yZSAJXGZCbWVudV9hdHRyaWJ1dGVzXGZSKDNYKQorbWVudV9mb3JtYXQJXGZCbWVudV9mb3JtYXRcZlIoM1gpCittZW51X2dyZXkgCVxmQm1lbnVfYXR0cmlidXRlc1xmUigzWCkKK21lbnVfaW5pdCAJXGZCbWVudV9ob29rXGZSKDNYKQorbWVudV9pdGVtcwlcZkJtZW51X2l0ZW1zXGZSKDNYKQorbWVudV9tYXJrIAlcZkJtZW51X21hcmtcZlIoM1gpCittZW51X29wdHMgCVxmQm1lbnVfb3B0c1xmUigzWCkKK21lbnVfb3B0c19vZmYJXGZCbWVudV9vcHRzXGZSKDNYKQorbWVudV9vcHRzX29uCVxmQm1lbnVfb3B0c1xmUigzWCkKK21lbnVfcGFkICAJXGZCbWVudV9hdHRyaWJ1dGVzXGZSKDNYKQorbWVudV9wYXR0ZXJuCVxmQm1lbnVfcGF0dGVyblxmUigzWCkKK21lbnVfcmVxdWVzdF9ieV9uYW1lCVxmQm1lbnVfcmVxdWVzdG5hbWVcZlIoM1gpCittZW51X3JlcXVlc3RfbmFtZQlcZkJtZW51X3JlcXVlc3RuYW1lXGZSKDNYKQorbWVudV9zcGFjaW5nCVxmQm1lbnVfc3BhY2luZ1xmUigzWCkKK21lbnVfc3ViICAJXGZCbWVudV93aW5cZlIoM1gpCittZW51X3Rlcm0gCVxmQm1lbnVfaG9va1xmUigzWCkKK21lbnVfdXNlcnB0cglcZkJtZW51X3VzZXJwdHJcZlIoM1gpCittZW51X3dpbiAgCVxmQm1lbnVfd2luXGZSKDNYKQorbmV3X2l0ZW0gIAlcZkJtaXRlbV9uZXdcZlIoM1gpCituZXdfbWVudSAgCVxmQm1lbnVfbmV3XGZSKDNYKQorcG9zX21lbnVfY3Vyc29yCVxmQm1lbnVfY3Vyc29yXGZSKDNYKQorcG9zdF9tZW51IAlcZkJtZW51X3Bvc3RcZlIoM1gpCitzY2FsZV9tZW51CVxmQm1lbnVfd2luXGZSKDNYKQorc2V0X2N1cnJlbnRfaXRlbQlcZkJtaXRlbV9jdXJyZW50XGZSKDNYKQorc2V0X2l0ZW1faW5pdAlcZkJtZW51X2hvb2tcZlIoM1gpCitzZXRfaXRlbV9vcHRzCVxmQm1pdGVtX29wdHNcZlIoM1gpCitzZXRfaXRlbV90ZXJtCVxmQm1lbnVfaG9va1xmUigzWCkKK3NldF9pdGVtX3VzZXJwdHIJXGZCbWl0ZW1fdXNlcnB0clxmUigzWCkKK3NldF9pdGVtX3ZhbHVlCVxmQm1pdGVtX3ZhbHVlXGZSKDNYKQorc2V0X21lbnVfYmFjawlcZkJtZW51X2F0dHJpYnV0ZXNcZlIoM1gpCitzZXRfbWVudV9mb3JlCVxmQm1lbnVfYXR0cmlidXRlc1xmUigzWCkKK3NldF9tZW51X2Zvcm1hdAlcZkJtZW51X2Zvcm1hdFxmUigzWCkKK3NldF9tZW51X2dyZXkJXGZCbWVudV9hdHRyaWJ1dGVzXGZSKDNYKQorc2V0X21lbnVfaW5pdAlcZkJtZW51X2hvb2tcZlIoM1gpCitzZXRfbWVudV9pdGVtcwlcZkJtZW51X2l0ZW1zXGZSKDNYKQorc2V0X21lbnVfbWFyawlcZkJtZW51X21hcmtcZlIoM1gpCitzZXRfbWVudV9vcHRzCVxmQm1pdGVtX29wdHNcZlIoM1gpCitzZXRfbWVudV9wYWQJXGZCbWVudV9hdHRyaWJ1dGVzXGZSKDNYKQorc2V0X21lbnVfcGF0dGVybglcZkJtZW51X3BhdHRlcm5cZlIoM1gpCitzZXRfbWVudV9zcGFjaW5nCVxmQm1lbnVfc3BhY2luZ1xmUigzWCkKK3NldF9tZW51X3N1YglcZkJtZW51X3dpblxmUigzWCkKK3NldF9tZW51X3Rlcm0JXGZCbWVudV9ob29rXGZSKDNYKQorc2V0X21lbnVfdXNlcnB0cglcZkJtZW51X3VzZXJwdHJcZlIoM1gpCitzZXRfbWVudV93aW4JXGZCbWVudV93aW5cZlIoM1gpCitzZXRfdG9wX3JvdwlcZkJtaXRlbV9jdXJyZW50XGZSKDNYKQordG9wX3JvdyAgIAlcZkJtaXRlbV9jdXJyZW50XGZSKDNYKQordW5wb3N0X21lbnUJXGZCbWVudV9wb3N0XGZSKDNYKQorLlRFCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4gIFJvdXRpbmVzIHRoYXQgcmV0dXJuCithbiBpbnRlZ2VyIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9OT19NQVRDSAorQ2hhcmFjdGVyIGZhaWxlZCB0byBtYXRjaC4KKy5UUCA1CisuQiBFX05PX1JPT00KK01lbnUgaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKy5UUCA1CisuQiBFX05PVF9QT1NURUQKK1RoZSBtZW51IGhhcyBub3QgYmVlbiBwb3N0ZWQuCisuVFAgNQorLkIgRV9OT1RfU0VMRUNUQUJMRQorVGhlIGRlc2lnbmF0ZWQgaXRlbSBjYW5ub3QgYmUgc2VsZWN0ZWQuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorLlRQIDUKKy5CIEVfUkVRVUVTVF9ERU5JRUQKK1RoZSBtZW51IGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfVU5LTk9XTl9DT01NQU5ECitUaGUgbWVudSBkcml2ZXIgY29kZSBzYXcgYW4gdW5rbm93biByZXF1ZXN0IGNvZGUuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gIm1lbnVfIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGVzCitcZkI8Y3Vyc2VzLmg+XGZSIGFuZCBcZkI8ZXRpLmg+XGZSLgorLlBQCitJbiB5b3VyIGxpYnJhcnkgbGlzdCwgbGlibWVudS5hIHNob3VsZCBiZSBiZWZvcmUgbGlibmN1cnNlcy5hOyB0aGF0IGlzLAoreW91IHdhbnQgdG8gc2F5IGAtbG1lbnUgLWxuY3Vyc2VzJywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kICh3aGljaCB3b3VsZAordXN1YWxseSBnaXZlIGEgbGluay1lcnJvcikuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlNIIFNFRSBBTFNPCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9tZW51X2F0dHJpYnV0ZXMuM3ggYi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNWVkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4CkBAIC0wLDAgKzEsMTAwIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X2F0dHJpYnV0ZXMuM3gsdiAxLjEwIDIwMDgvMDgvMjMgMTg6MjQ6MjMgdG9tIEV4cCAkCisuVEggbWVudV9hdHRyaWJ1dGVzIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9hdHRyaWJ1dGVzXGZSIC0gY29sb3IgYW5kIGF0dHJpYnV0ZSBjb250cm9sIGZvciBtZW51cworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgc2V0X21lbnVfZm9yZShNRU5VICptZW51LCBjaHR5cGUgYXR0cik7CisuYnIKK2NodHlwZSBtZW51X2ZvcmUoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKK2ludCBzZXRfbWVudV9iYWNrKE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKTsKKy5icgorY2h0eXBlIG1lbnVfYmFjayhjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNldF9tZW51X2dyZXkoTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpOworLmJyCitjaHR5cGUgbWVudV9ncmV5KGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgc2V0X21lbnVfcGFkKE1FTlUgKm1lbnUsIGludCBwYWQpOworLmJyCitpbnQgbWVudV9wYWQoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X2ZvcmVcZlIgc2V0cyB0aGUgZm9yZWdyb3VuZCBhdHRyaWJ1dGUgb2YKK1xmSW1lbnVcZlIuIFRoaXMgaXMgdGhlIGhpZ2hsaWdodCB1c2VkIGZvciBzZWxlY3RlZCBtZW51IGl0ZW1zLgorXGZCbWVudV9mb3JlXGZSIHJldHVybnMgdGhlIGZvcmVncm91bmQgYXR0cmlidXRlLiAgVGhlIGRlZmF1bHQKK2lzIFxmQkFfUkVWRVJTRVxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X2JhY2tcZlIgc2V0cyB0aGUgYmFja2dyb3VuZCBhdHRyaWJ1dGUgb2YKK1xmSW1lbnVcZlIuIFRoaXMgaXMgdGhlIGhpZ2hsaWdodCB1c2VkIGZvciBzZWxlY3RhYmxlIChidXQgbm90IGN1cnJlbnRseQorc2VsZWN0ZWQpIG1lbnUgaXRlbXMuICBUaGUgZnVuY3Rpb24gXGZCbWVudV9iYWNrXGZSIHJldHVybnMgdGhlIGJhY2tncm91bmQKK2F0dHJpYnV0ZS4gIFRoZSBkZWZhdWx0IGlzIFxmQkFfTk9STUFMXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfZ3JleVxmUiBzZXRzIHRoZSBncmV5IGF0dHJpYnV0ZSBvZiBcZkltZW51XGZSLiBUaGlzIGlzCit0aGUgaGlnaGxpZ2h0IHVzZWQgZm9yIHVuLXNlbGVjdGFibGUgbWVudSBpdGVtcyBpbiBtZW51cyB0aGF0IHBlcm1pdCBtb3JlIHRoYW4KK29uZSBzZWxlY3Rpb24uICBUaGUgZnVuY3Rpb24gXGZCbWVudV9ncmV5XGZSIHJldHVybnMgdGhlIGdyZXkgYXR0cmlidXRlLgorVGhlIGRlZmF1bHQgaXMgXGZCQV9VTkRFUkxJTkVcZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9wYWRcZlIgc2V0cyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gZmlsbCB0aGUgc3BhY2UKK2JldHdlZW4gdGhlIG5hbWUgYW5kIGRlc2NyaXB0aW9uIHBhcnRzIG9mIGEgbWVudSBpdGVtLiAgXGZCbWVudV9wYWRcZlIgcmV0dXJucwordGhlIGdpdmVuIG1lbnUncyBwYWQgY2hhcmFjdGVyLiAgVGhlIGRlZmF1bHQgaXMgYSBibGFuay4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpIGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJtZW51XyIgZm9yIGRldGFpbGVkCitkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL21lbnVfY3Vyc29yLjN4IGIvbWFuL21lbnVfY3Vyc29yLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZGUwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9jdXJzb3IuM3gKQEAgLTAsMCArMSw3MyBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWVudV9jdXJzb3IuM3gsdiAxLjYgMjAwNi8xMS8wNCAxNzoxMzo1NyB0b20gRXhwICQKKy5USCBtZW51X2N1cnNvciAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfY3Vyc29yXGZSIC0gcG9zaXRpb24gYSBtZW51J3MgY3Vyc29yCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBwb3NfbWVudV9jdXJzb3IoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnBvc19tZW51X2N1cnNvclxmUiByZXN0b3JlcyB0aGUgY3Vyc29yIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uCithc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUncyBzZWxlY3RlZCBpdGVtLiAgVGhpcyBpcyB1c2VmdWwgYWZ0ZXIgXGZCY3Vyc2VzXGZSCityb3V0aW5lcyBoYXZlIGJlZW4gY2FsbGVkIHRvIGRvIHNjcmVlbi1wYWludGluZyBpbiByZXNwb25zZSB0byBhIG1lbnUgc2VsZWN0LgorLlNIIFJFVFVSTiBWQUxVRQorVGhpcyByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX05PVF9QT1NURUQKK1RoZSBtZW51IGhhcyBub3QgYmVlbiBwb3N0ZWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV9kcml2ZXIuM3ggYi9tYW4vbWVudV9kcml2ZXIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2NjA0MAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9tZW51X2RyaXZlci4zeApAQCAtMCwwICsxLDIxNSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X2RyaXZlci4zeCx2IDEuMTUgMjAwOC8wNi8yMSAyMTo1NTozMCB0b20gRXhwICQKKy5USCBtZW51X2RyaXZlciAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfZHJpdmVyXGZSIC0gY29tbWFuZC1wcm9jZXNzaW5nIGxvb3Agb2YgdGhlIG1lbnUgc3lzdGVtCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBtZW51X2RyaXZlcihNRU5VICptZW51LCBpbnQgYyk7CisuYnIKKy5TSCBERVNDUklQVElPTgorT25jZSBhIG1lbnUgaGFzIGJlZW4gcG9zdGVkIChkaXNwbGF5ZWQpLCB5b3Ugc2hvdWxkIGZ1bm5lbCBpbnB1dCBldmVudHMgdG8gaXQKK3Rocm91Z2ggXGZCbWVudV9kcml2ZXJcZlIuICBUaGlzIHJvdXRpbmUgaGFzIHRocmVlIG1ham9yIGlucHV0IGNhc2VzOgorLlRQIDMKKy0KK1RoZSBpbnB1dCBpcyBhIGZvcm0gbmF2aWdhdGlvbiByZXF1ZXN0LgorTmF2aWdhdGlvbiByZXF1ZXN0IGNvZGVzIGFyZSBjb25zdGFudHMgZGVmaW5lZCBpbiBcZkI8Zm9ybS5oPlxmUCwKK3doaWNoIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBrZXktIGFuZCBjaGFyYWN0ZXIgY29kZXMgcmV0dXJuZWQgYnkgXGZCd2dldGNoXGZQLgorLlRQIDMKKy0KK1RoZSBpbnB1dCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIuCitQcmludGFibGUgY2hhcmFjdGVycyAod2hpY2ggbXVzdCBiZSBwb3NpdGl2ZSwgbGVzcyB0aGFuIDI1NikgYXJlCitjaGVja2VkIGFjY29yZGluZyB0byB0aGUgcHJvZ3JhbSdzIGxvY2FsZSBzZXR0aW5ncy4KKy5UUCAzCistCitUaGUgaW5wdXQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsIGtleSBhc3NvY2lhdGVkIHdpdGggYW4gbW91c2UgZXZlbnQuCisuUFAKK1RoZSBtZW51IGRyaXZlciByZXF1ZXN0cyBhcmUgYXMgZm9sbG93czoKKy5UUCA1CitSRVFfTEVGVF9JVEVNCitNb3ZlIGxlZnQgdG8gYW4gaXRlbS4KKy5UUCA1CitSRVFfUklHSFRfSVRFTQorTW92ZSByaWdodCB0byBhbiBpdGVtLgorLlRQIDUKK1JFUV9VUF9JVEVNCitNb3ZlIHVwIHRvIGFuIGl0ZW0uCisuVFAgNQorUkVRX0RPV05fSVRFTQorTW92ZSBkb3duIHRvIGFuIGl0ZW0uCisuVFAgNQorUkVRX1NDUl9VTElORQorU2Nyb2xsIHVwIGEgbGluZS4KKy5UUCA1CitSRVFfU0NSX0RMSU5FCitTY3JvbGwgZG93biBhIGxpbmUuCisuVFAgNQorUkVRX1NDUl9EUEFHRQorU2Nyb2xsIGRvd24gYSBwYWdlLgorLlRQIDUKK1JFUV9TQ1JfVVBBR0UKK1Njcm9sbCB1cCBhIHBhZ2UuCisuVFAgNQorUkVRX0ZJUlNUX0lURU0KK01vdmUgdG8gdGhlIGZpcnN0IGl0ZW0uCisuVFAgNQorUkVRX0xBU1RfSVRFTQorTW92ZSB0byB0aGUgbGFzdCBpdGVtLgorLlRQIDUKK1JFUV9ORVhUX0lURU0KK01vdmUgdG8gdGhlIG5leHQgaXRlbS4KKy5UUCA1CitSRVFfUFJFVl9JVEVNCitNb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtLgorLlRQIDUKK1JFUV9UT0dHTEVfSVRFTQorU2VsZWN0L2Rlc2VsZWN0IGFuIGl0ZW0uCisuVFAgNQorUkVRX0NMRUFSX1BBVFRFUk4KK0NsZWFyIHRoZSBtZW51IHBhdHRlcm4gYnVmZmVyLgorLlRQIDUKK1JFUV9CQUNLX1BBVFRFUk4KK0RlbGV0ZSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGZyb20gdGhlIHBhdHRlcm4gYnVmZmVyLgorLlRQIDUKK1JFUV9ORVhUX01BVENICitNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gbWF0Y2hpbmcgdGhlIHBhdHRlcm4gbWF0Y2guCisuVFAgNQorUkVRX1BSRVZfTUFUQ0gKK01vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gbWF0Y2hpbmcgdGhlIHBhdHRlcm4gbWF0Y2guCisuUFAKK0lmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyLCB0aGUgY29kZSBhcHBlbmRzCitpdCB0byB0aGUgcGF0dGVybiBidWZmZXIgYW5kIGF0dGVtcHRzIHRvIG1vdmUgdG8gdGhlIG5leHQgaXRlbSBtYXRjaGluZwordGhlIG5ldyBwYXR0ZXJuLiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBtYXRjaCwgXGZCbWVudV9kcml2ZXJcZlIgcmV0dXJucworXGZCRV9OT19NQVRDSFxmUiBhbmQgZGVsZXRlcyB0aGUgYXBwZW5kZWQgY2hhcmFjdGVyIGZyb20gdGhlIGJ1ZmZlci4KKy5QUAorSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBvbmUgb2YgdGhlIGFib3ZlIHByZS1kZWZpbmVkIHJlcXVlc3RzLCB0aGUKK2NvcnJlc3BvbmRpbmcgYWN0aW9uIGlzIHBlcmZvcm1lZC4KKy5TUyBNT1VTRSBIQU5ETElORworLlBQCitJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBLRVlfTU9VU0Ugc3BlY2lhbCBrZXksIHRoZSBhc3NvY2lhdGVkCittb3VzZSBldmVudCBpcyB0cmFuc2xhdGVkIGludG8gb25lIG9mIHRoZSBhYm92ZSBwcmUtZGVmaW5lZCByZXF1ZXN0cy4KK0N1cnJlbnRseSBvbmx5IGNsaWNrcyBpbiB0aGUgdXNlciB3aW5kb3cgKGUuZy4gaW5zaWRlIHRoZSBtZW51IGRpc3BsYXkKK2FyZWEgb3IgdGhlIGRlY29yYXRpb24gd2luZG93KSBhcmUgaGFuZGxlZC4KKy5QUAorSWYgeW91IGNsaWNrIGFib3ZlIHRoZSBkaXNwbGF5IHJlZ2lvbiBvZiB0aGUgbWVudToKKy5SUworLlRQCithIFJFUV9TQ1JfVUxJTkUgaXMgZ2VuZXJhdGVkIGZvciBhIHNpbmdsZSBjbGljaywKKy5UUAorYSBSRVFfU0NSX1VQQUdFIGlzIGdlbmVyYXRlZCBmb3IgYSBkb3VibGUtY2xpY2sgYW5kCisuVFAKK2EgUkVRX0ZJUlNUX0lURU0gaXMgZ2VuZXJhdGVkIGZvciBhIHRyaXBsZS1jbGljay4KKy5SRQorLlBQCitJZiB5b3UgY2xpY2sgYmVsb3cgdGhlIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBtZW51OgorLlJTCisuVFAKK2EgUkVRX1NDUl9ETElORSBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorLlRQCithIFJFUV9TQ1JfRFBBR0UgaXMgZ2VuZXJhdGVkIGZvciBhIGRvdWJsZS1jbGljayBhbmQKKy5UUAorYSBSRVFfTEFTVF9JVEVNIGlzIGdlbmVyYXRlZCBmb3IgYSB0cmlwbGUtY2xpY2suCisuUkUKKy5QUAorSWYgeW91IGNsaWNrIGF0IGFuIGl0ZW0gaW5zaWRlIHRoZSBkaXNwbGF5IGFyZWEgb2YgdGhlIG1lbnU6CisuUlMKKy5UUCAzCistCit0aGUgbWVudSBjdXJzb3IgaXMgcG9zaXRpb25lZCB0byB0aGF0IGl0ZW0uCisuVFAgMworLQorSWYgeW91IGRvdWJsZS1jbGljayBhbiBpdGVtIGEgUkVRX1RPR0dMRV9JVEVNCitpcyBnZW5lcmF0ZWQgYW5kIFxmQkVfVU5LTk9XTl9DT01NQU5EXGZSIGlzIHJldHVybmVkLgorVGhpcyByZXR1cm4gdmFsdWUgbWFrZXMgc2Vuc2UsCitiZWNhdXNlIGEgZG91YmxlIGNsaWNrIHVzdWFsbHkgbWVhbnMgdGhhdCBhbiBpdGVtLXNwZWNpZmljIGFjdGlvbiBzaG91bGQKK2JlIHJldHVybmVkLgorSXQgaXMgZXhhY3RseSB0aGUgcHVycG9zZSBvZiB0aGlzIHJldHVybiB2YWx1ZSB0byBzaWduYWwgdGhhdCBhbgorYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZCBzaG91bGQgYmUgZXhlY3V0ZWQuCisuVFAgMworLQorSWYgYSB0cmFuc2xhdGlvbgoraW50byBhIHJlcXVlc3Qgd2FzIGRvbmUsIFxmQm1lbnVfZHJpdmVyXGZSIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGlzIHJlcXVlc3QuCisuUkUKKy5QUAorSWYgeW91IGNsaWNrZWQgb3V0c2lkZSB0aGUgdXNlciB3aW5kb3cgb3IgdGhlIG1vdXNlIGV2ZW50IGNvdWxkIG5vdCBiZSB0cmFuc2xhdGVkCitpbnRvIGEgbWVudSByZXF1ZXN0IGFuIFxmQkVfUkVRVUVTVF9ERU5JRURcZlIgaXMgcmV0dXJuZWQuCisuU1MgQVBQTElDQVRJT04tREVGSU5FRCBDT01NQU5EUworLlBQCitJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5laXRoZXIgcHJpbnRhYmxlIG5vciBvbmUgb2YgdGhlIGFib3ZlCitwcmUtZGVmaW5lZCBtZW51IHJlcXVlc3RzIG9yIEtFWV9NT1VTRSwgdGhlIGRyaXZlIGFzc3VtZXMgaXQgaXMgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMKK2NvbW1hbmQgYW5kIHJldHVybnMgXGZCRV9VTktOT1dOX0NPTU1BTkRcZlIuICBBcHBsaWNhdGlvbi1kZWZpbmVkIGNvbW1hbmRzCitzaG91bGQgYmUgZGVmaW5lZCByZWxhdGl2ZSB0byBcZkJNQVhfQ09NTUFORFxmUiwgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlc2UKK3ByZS1kZWZpbmVkIHJlcXVlc3RzLgorLlNIIFJFVFVSTiBWQUxVRQorXGZCbWVudV9kcml2ZXJcZlIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9CQURfU1RBVEUKK1JvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmF0aW9uIGZ1bmN0aW9uLgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX1VOS05PV05fQ09NTUFORAorVGhlIG1lbnUgZHJpdmVyIGNvZGUgc2F3IGFuIHVua25vd24gcmVxdWVzdCBjb2RlLgorLlRQIDUKKy5CIEVfTk9fTUFUQ0gKK0NoYXJhY3RlciBmYWlsZWQgdG8gbWF0Y2guCisuVFAgNQorLkIgRV9SRVFVRVNUX0RFTklFRAorVGhlIG1lbnUgZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCbWVudVxmUigzWCksCitcZkJ3Z2V0Y2hcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGVzCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4gVGhlIHN1cHBvcnQgZm9yIG1vdXNlIGV2ZW50cyBpcyBuY3Vyc2VzIHNwZWNpZmljLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV9mb3JtYXQuM3ggYi9tYW4vbWVudV9mb3JtYXQuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkNDU2ZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9tZW51X2Zvcm1hdC4zeApAQCAtMCwwICsxLDg3IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X2Zvcm1hdC4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwICQKKy5USCBtZW51X2Zvcm1hdCAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfZm9ybWF0XGZSIC0gc2V0IGFuZCBnZXQgbWVudSBzaXplcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgc2V0X21lbnVfZm9ybWF0KE1FTlUgKm1lbnUsIGludCByb3dzLCBpbnQgY29scyk7CisuYnIKK3ZvaWQgbWVudV9mb3JtYXQoY29uc3QgTUVOVSAqbWVudSwgaW50ICpyb3dzLCBpbnQgKmNvbHMpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9mb3JtYXRcZlIgc2V0cyB0aGUgbWF4aW11bSBkaXNwbGF5IHNpemUgb2YgdGhlIGdpdmVuCittZW51LiAgSWYgdGhpcyBzaXplIGlzIHRvbyBzbWFsbCB0byBkaXNwbGF5IGFsbCBtZW51IGl0ZW1zLCB0aGUgbWVudSB3aWxsIGJlCittYWRlIHNjcm9sbGFibGUuIElmIHRoaXMgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWVudXMgc3Vid2luZG93IGFuZCB0aGUKK3N1YndpbmRvdyBpcyB0b28gc21hbGwgdG8gZGlzcGxheSBhbGwgbWVudSBpdGVtcywgXGZCcG9zdF9tZW51KClcZlIgd2lsbCBmYWlsLgorLlBQCitUaGUgZGVmYXVsdCBmb3JtYXQgaXMgMTYgcm93cywgMSBjb2x1bW4uICBDYWxsaW5nIFxmQnNldF9tZW51X2Zvcm1hdFxmUiB3aXRoIGEKK251bGwgbWVudSBwb2ludGVyIHdpbGwgY2hhbmdlIHRoaXMgZGVmYXVsdC4gIEEgemVybyByb3cgb3IgY29sdW1uIGFyZ3VtZW50IHRvCitcZkJzZXRfbWVudV9mb3JtYXRcZlIgaXMgaW50ZXJwcmV0ZWQgYXMgYSByZXF1ZXN0IG5vdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQKK3ZhbHVlLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbWVudV9mb3JtYXRcZlIgcmV0dXJucyB0aGUgbWF4aW11bS1zaXplIGNvbnN0cmFpbnRzIGZvciB0aGUKK2dpdmVuIG1lbnUgaW50byB0aGUgc3RvcmFnZSBhZGRyZXNzZWQgYnkgXGZCcm93c1xmUiBhbmQgXGZCY29sc1xmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1BPU1RFRAorVGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL21lbnVfaG9vay4zeCBiL21hbi9tZW51X2hvb2suM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ZTFlYwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9tZW51X2hvb2suM3gKQEAgLTAsMCArMSwxMDEgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfaG9vay4zeCx2IDEuOSAyMDA3LzAyLzI0IDE3OjM0OjA4IHRvbSBFeHAgJAorLlRIIG1lbnVfaG9vayAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfaG9va1xmUiAtIHNldCBob29rcyBmb3IgYXV0b21hdGljIGludm9jYXRpb24gYnkgYXBwbGljYXRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfaXRlbV9pbml0KE1FTlUgKm1lbnUsIE1lbnVfSG9vayBmdW5jKTsKKy5icgorTWVudV9Ib29rIGl0ZW1faW5pdChjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNldF9pdGVtX3Rlcm0oTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworLmJyCitNZW51X0hvb2sgaXRlbV90ZXJtKGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgc2V0X21lbnVfaW5pdChNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyk7CisuYnIKK01lbnVfSG9vayBtZW51X2luaXQoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKK2ludCBzZXRfbWVudV90ZXJtKE1FTlUgKm1lbnUsIE1lbnVfSG9vayBmdW5jKTsKKy5icgorTWVudV9Ib29rIG1lbnVfdGVybShjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgbWFrZSBpdCBwb3NzaWJsZSB0byBzZXQgaG9vayBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGF0IHZhcmlvdXMKK3BvaW50cyBpbiB0aGUgYXV0b21hdGljIHByb2Nlc3Npbmcgb2YgaW5wdXQgZXZlbnQgY29kZXMgYnkgXGZCbWVudV9kcml2ZXJcZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfaXRlbV9pbml0XGZSIHNldHMgYSBob29rIHRvIGJlIGNhbGxlZCBhdCBtZW51LXBvc3QgdGltZSBhbmQKK2VhY2ggdGltZSB0aGUgc2VsZWN0ZWQgaXRlbSBjaGFuZ2VzIChhZnRlciB0aGUgY2hhbmdlKS4gIFxmQml0ZW1faW5pdFxmUgorcmV0dXJucyB0aGUgY3VycmVudCBpdGVtIGluaXQgaG9vaywgaWYgYW55IChcZkJOVUxMXGZSIGlmIHRoZXJlIGlzIG5vIHN1Y2gKK2hvb2spLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2l0ZW1fdGVybVxmUiBzZXRzIGEgaG9vayB0byBiZSBjYWxsZWQgYXQgbWVudS11bnBvc3QgdGltZQorYW5kIGVhY2ggdGltZSB0aGUgc2VsZWN0ZWQgaXRlbSBjaGFuZ2VzIChiZWZvcmUgdGhlIGNoYW5nZSkuICBcZkJpdGVtX3Rlcm1cZlIKK3JldHVybnMgdGhlIGN1cnJlbnQgaXRlbSB0ZXJtIGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZSBpcyBubyBzdWNoCitob29rKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X2luaXRcZlIgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0IG1lbnUtcG9zdCB0aW1lIGFuZAoranVzdCBhZnRlciB0aGUgdG9wIHJvdyBvbiB0aGUgbWVudSBjaGFuZ2VzIG9uY2UgaXQgaXMgcG9zdGVkLiAgXGZCbWVudV9pbml0XGZSCityZXR1cm5zIHRoZSBjdXJyZW50IG1lbnUgaW5pdCBob29rLCBpZiBhbnkgKFxmQk5VTExcZlIgaWYgdGhlcmUgaXMgbm8gc3VjaAoraG9vaykuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV90ZXJtXGZSIHNldHMgYSBob29rIHRvIGJlIGNhbGxlZCBhdCBtZW51LXVucG9zdCB0aW1lCithbmQganVzdCBiZWZvcmUgdGhlIHRvcCByb3cgb24gdGhlIG1lbnUgY2hhbmdlcyBvbmNlIGl0IGlzIHBvc3RlZC4KK1xmQm1lbnVfdGVybVxmUiByZXR1cm5zIHRoZSBjdXJyZW50IG1lbnUgdGVybSBob29rLCBpZiBhbnkgKFxmQk5VTExcZlIgaWYgdGhlcmUKK2lzIG5vIHN1Y2ggaG9vaykuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4gIE90aGVyIHJvdXRpbmVzCityZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV9pdGVtcy4zeCBiL21hbi9tZW51X2l0ZW1zLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTUzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9pdGVtcy4zeApAQCAtMCwwICsxLDkzIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X2l0ZW1zLjN4LHYgMS43IDIwMDYvMTEvMDQgMTg6MzU6MzEgdG9tIEV4cCAkCisuVEggbWVudV9pdGVtcyAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfaXRlbXNcZlIgLSBtYWtlIGFuZCBicmVhayBjb25uZWN0aW9ucyBiZXR3ZWVuIGl0ZW1zIGFuZCBtZW51cworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgc2V0X21lbnVfaXRlbXMoTUVOVSAqbWVudSwgSVRFTSAqKml0ZW1zKTsKKy5icgorSVRFTSAqKm1lbnVfaXRlbXMoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKK2ludCBpdGVtX2NvdW50KGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9pdGVtc1xmUiBjaGFuZ2VzIHRoZSBpdGVtIHBvaW50ZXIgYXJyYXkgb2YgdGhlIGdpdmVuCitcZkltZW51XGZSLiAgVGhlIGFycmF5IG11c3QgYmUgdGVybWluYXRlZCBieSBhIFxmQk5VTExcZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJtZW51X2l0ZW1zXGZSIHJldHVybnMgdGhlIGl0ZW0gYXJyYXkgb2YgdGhlIGdpdmVuIG1lbnUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJpdGVtX2NvdW50XGZSIHJldHVybnMgdGhlIGNvdW50IG9mIGl0ZW1zIGluIFxmSW1lbnVcZlIuCisuU0ggUkVUVVJOIFZBTFVFUworVGhlIGZ1bmN0aW9uIFxmQm1lbnVfaXRlbXNcZlIgcmV0dXJucyBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSBcZkJOVUxMXGZSKS4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQml0ZW1fY291bnRcZlIgcmV0dXJucyBcZkJFUlJcZlIgKHRoZSBnZW5lcmFsIFxmQmN1cnNlc1xmUiBlcnJvcgorcmV0dXJuIHZhbHVlKSBpZiBpdHMgXGZJbWVudVxmUCBwYXJhbWV0ZXIgaXMgXGZCTlVMTFxmUC4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X2l0ZW1zXGZSIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgb24gZXJyb3I6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5QUAorVGhlIFNWcjQgbWVudSBsaWJyYXJ5IGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIHRoZSBcZkJpdGVtX2NvdW50XGZSIGVycm9yIHZhbHVlCithcyAtMSAod2hpY2ggaXMgdGhlIHZhbHVlIG9mIFxmQkVSUlxmUikuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9tZW51X21hcmsuM3ggYi9tYW4vbWVudV9tYXJrLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjJiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9tYXJrLjN4CkBAIC0wLDAgKzEsODYgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfbWFyay4zeCx2IDEuOSAyMDA2LzExLzA0IDE4OjMzOjE4IHRvbSBFeHAgJAorLlRIIG1lbnVfbWFyayAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfbWFya1xmUiAtIGdldCBhbmQgc2V0IHRoZSBtZW51IG1hcmsgc3RyaW5nCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9tYXJrKE1FTlUgKm1lbnUsIGNvbnN0IGNoYXIgKm1hcmspOworLmJyCitjb25zdCBjaGFyICptZW51X21hcmsoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorSW4gb3JkZXIgdG8gbWFrZSBtZW51IHNlbGVjdGlvbnMgdmlzaWJsZSBvbiBvbGRlciB0ZXJtaW5hbHMgd2l0aG91dAoraGlnaGxpZ2h0aW5nIG9yIGNvbG9yIGNhcGFiaWxpdHksIHRoZSBtZW51IGxpYnJhcnkgbWFya3Mgc2VsZWN0ZWQgaXRlbXMKK2luIGEgbWVudSB3aXRoIGEgcHJlZml4IHN0cmluZy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X21hcmtcZlIgc2V0cyB0aGUgbWFyayBzdHJpbmcgZm9yIHRoZSBnaXZlbiBtZW51LgorQ2FsbGluZyBcZkJzZXRfbWVudV9tYXJrXGZSIHdpdGggYSBudWxsIG1lbnUgaXRlbSB3aWxsIGFib2xpc2ggdGhlIG1hcmsgc3RyaW5nLgorTm90ZSB0aGF0IGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIG1hcmsgc3RyaW5nIGZvciBhIG1lbnUgd2hpbGUgdGhlCittZW51IGlzIHBvc3RlZCBpcyBsaWtlbHkgdG8gcHJvZHVjZSB1bmhlbHBmdWwgYmVoYXZpb3IuCisuUFAKK1RoZSBkZWZhdWx0IHN0cmluZyBpcyAiLSIgKGEgZGFzaCkuIENhbGxpbmcgXGZCc2V0X21lbnVfbWFya1xmUiB3aXRoCithIG5vbi1cZkJOVUxMXGZSIG1lbnUgYXJndW1lbnQgd2lsbCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbWVudV9tYXJrXGZSIHJldHVybnMgdGhlIG1lbnUncyBtYXJrIHN0cmluZyAob3IgXGZCTlVMTFxmUiBpZgordGhlcmUgaXMgbm9uZSkuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCbWVudV9tYXJrXGZSIHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUgXGZCTlVMTFxmUikuCitJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9tYXJrXGZSIG1heSByZXR1cm4gdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL21lbnVfbmV3LjN4IGIvbWFuL21lbnVfbmV3LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjk4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9uZXcuM3gKQEAgLTAsMCArMSw4NiBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWVudV9uZXcuM3gsdiAxLjkgMjAwNi8xMS8wNCAxODozMTozNyB0b20gRXhwICQKKy5USCBtZW51X25ldyAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfbmV3XGZSIC0gY3JlYXRlIGFuZCBkZXN0cm95IG1lbnVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK01FTlUgKm5ld19tZW51KElURU0gKippdGVtcyk7CisuYnIKK2ludCBmcmVlX21lbnUoTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQm5ld19tZW51XGZSIGNyZWF0ZXMgYSBuZXcgbWVudSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpZWQgaXRlbQorcG9pbnRlciBhcnJheSAod2hpY2ggbXVzdCBiZSBcZkJOVUxMXGZSLXRlcm1pbmF0ZWQpLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZnJlZV9tZW51XGZSIGRpc2Nvbm5lY3RzIFxmSW1lbnVcZlIgZnJvbSBpdHMgaXRlbSBhcnJheQorYW5kIGZyZWVzIHRoZSBzdG9yYWdlIGFsbG9jYXRlZCBmb3IgdGhlIG1lbnUuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCbmV3X21lbnVcZlIgcmV0dXJucyBcZkJOVUxMXGZSIG9uIGVycm9yLgorSXQgc2V0cyBlcnJubyBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uJ3MgZmFpbHVyZToKKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCwgZS5nLiwgbWFsbG9jIGZhaWx1cmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX21lbnVcZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgbWVudSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9tZW51X29wdHMuM3ggYi9tYW4vbWVudV9vcHRzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTI3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9vcHRzLjN4CkBAIC0wLDAgKzEsMTA0IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X29wdHMuM3gsdiAxLjEwIDIwMDcvMDIvMjQgMTc6MzM6NTkgdG9tIEV4cCAkCisuVEggbWVudV9vcHRzIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9vcHRzXGZSIC0gc2V0IGFuZCBnZXQgbWVudSBvcHRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9vcHRzKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IG1lbnVfb3B0c19vbihNRU5VICptZW51LCBNZW51X09wdGlvbnMgb3B0cyk7CisuYnIKK2ludCBtZW51X29wdHNfb2ZmKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKTsKKy5icgorTWVudV9PcHRpb25zIG1lbnVfb3B0cyhjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfb3B0c1xmUiBzZXRzIGFsbCB0aGUgZ2l2ZW4gbWVudSdzIG9wdGlvbiBiaXRzIChtZW51CitvcHRpb24gYml0cyBtYXkgYmUgbG9naWNhbGx5LU9SJ2VkIHRvZ2V0aGVyKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQm1lbnVfb3B0c19vblxmUiB0dXJucyBvbiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsIGFuZCBsZWF2ZXMKK290aGVycyBhbG9uZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQm1lbnVfb3B0c19vZmZcZlIgdHVybnMgb2ZmIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbWVudV9vcHRzXGZSIHJldHVybnMgdGhlIG1lbnUncyBjdXJyZW50IG9wdGlvbiBiaXRzLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRlZmluZWQgKGFsbCBhcmUgb24gYnkgZGVmYXVsdCk6CisuVFAgNQorT19PTkVWQUxVRQorT25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoaXMgbWVudS4KKy5UUCA1CitPX1NIT1dERVNDCitEaXNwbGF5IHRoZSBpdGVtIGRlc2NyaXB0aW9ucyB3aGVuIHRoZSBtZW51IGlzIHBvc3RlZC4KKy5UUCA1CitPX1JPV01BSk9SCitEaXNwbGF5IHRoZSBtZW51IGluIHJvdy1tYWpvciBvcmRlci4KKy5UUCA1CitPX0lHTk9SRUNBU0UKK0lnbm9yZSB0aGUgY2FzZSB3aGVuIHBhdHRlcm4tbWF0Y2hpbmcuCisuVFAgNQorT19TSE9XTUFUQ0gKK01vdmUgdGhlIGN1cnNvciB0byB3aXRoaW4gdGhlIGl0ZW0gbmFtZSB3aGlsZSBwYXR0ZXJuLW1hdGNoaW5nLgorLlRQIDUKK09fTk9OQ1lDTElDCitEb24ndCB3cmFwIGFyb3VuZCBuZXh0LWl0ZW0gYW5kIHByZXZpb3VzLWl0ZW0sCityZXF1ZXN0cyB0byB0aGUgb3RoZXIgZW5kIG9mIHRoZSBtZW51LgorLlNIIFJFVFVSTiBWQUxVRQorRXhjZXB0IGZvciBcZkJtZW51X29wdHNcZlIsIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9tZW51X3BhdHRlcm4uM3ggYi9tYW4vbWVudV9wYXR0ZXJuLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGUxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9wYXR0ZXJuLjN4CkBAIC0wLDAgKzEsOTEgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWVudV9wYXR0ZXJuLjN4LHYgMS4xMSAyMDA4LzA2LzIxIDIxOjU4OjIwIHRvbSBFeHAgJAorLlRIIG1lbnVfcGF0dGVybiAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfcGF0dGVyblxmUiAtIGdldCBhbmQgc2V0IGEgbWVudSdzIHBhdHRlcm4gYnVmZmVyCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9wYXR0ZXJuKE1FTlUgKm1lbnUsIGNvbnN0IGNoYXIgKnBhdHRlcm4pOworLmJyCitjaGFyICptZW51X3BhdHRlcm4oY29uc3QgTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorRXZlcnkgbWVudSBoYXMgYW4gYXNzb2NpYXRlZCBwYXR0ZXJuIG1hdGNoIGJ1ZmZlci4gIEFzIGlucHV0IGV2ZW50cyB0aGF0IGFyZQorcHJpbnRhYmxlIGNoYXJhY3RlcnMgY29tZSBpbiwgdGhleSBhcmUgYXBwZW5kZWQgdG8gdGhpcyBtYXRjaCBidWZmZXIKK2FuZCB0ZXN0ZWQgZm9yIGEgbWF0Y2gsIGFzIGRlc2NyaWJlZCBpbiBcZkJtZW51X2RyaXZlclxmUigzWCkuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9wYXR0ZXJuXGZSIHNldHMgdGhlIHBhdHRlcm4gYnVmZmVyIGZvciB0aGUgZ2l2ZW4gbWVudQorYW5kIHRyaWVzIHRvIGZpbmQgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0uICBJZiBpdCBzdWNjZWVkcywgdGhhdCBpdGVtIGJlY29tZXMKK2N1cnJlbnQ7IGlmIG5vdCwgdGhlIGN1cnJlbnQgaXRlbSBkb2VzIG5vdCBjaGFuZ2UuIAorLlBQCitUaGUgZnVuY3Rpb24gXGZCbWVudV9wYXR0ZXJuXGZSIHJldHVybnMgdGhlIHBhdHRlcm4gYnVmZmVyIG9mIHRoZSBnaXZlbgorXGZJbWVudVxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJtZW51X3BhdHRlcm5cZlIgcmV0dXJucyBhIHBvaW50ZXIsIHdoaWNoIGlzIFxmQk5VTExcZlIgaWYgdGhlIFxmSW1lbnVcZlAgcGFyYW1ldGVyIGlzIFxmQk5VTExcZlAuCitPdGhlcndpc2UsIGl0IGlzIGEgcG9pbnRlciB0byBhIHN0cmluZyB3aGljaCBpcyBlbXB0eSBpZiBubyBwYXR0ZXJuIGhhcyBiZWVuIHNldC4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X3BhdHRlcm5cZlIgbWF5IHJldHVybiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gbWVudS4KKy5UUCA1CisuQiBFX05PX01BVENICitDaGFyYWN0ZXIgZmFpbGVkIHRvIG1hdGNoLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV9wb3N0LjN4IGIvbWFuL21lbnVfcG9zdC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDdmYWNjCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL21lbnVfcG9zdC4zeApAQCAtMCwwICsxLDkxIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X3Bvc3QuM3gsdiAxLjkgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwICQKKy5USCBtZW51X3Bvc3QgM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51X3Bvc3RcZlIgLSB3cml0ZSBvciBlcmFzZSBtZW51cyBmcm9tIGFzc29jaWF0ZWQgc3Vid2luZG93cworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgcG9zdF9tZW51KE1FTlUgKm1lbnUpOworLmJyCitpbnQgdW5wb3N0X21lbnUoTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnBvc3RfbWVudVxmUiBkaXNwbGF5cyBhIG1lbnUgdG8gaXRzIGFzc29jaWF0ZWQgc3Vid2luZG93LiAgVG8KK3RyaWdnZXIgcGh5c2ljYWwgZGlzcGxheSBvZiB0aGUgc3Vid2luZG93LCB1c2UgXGZCcmVmcmVzaFxmUiBvciBzb21lIGVxdWl2YWxlbnQKK1xmQmN1cnNlc1xmUiByb3V0aW5lICh0aGUgaW1wbGljaXQgXGZCZG91cGRhdGVcZlIgdHJpZ2dlcmVkIGJ5IGFuIFxmQmN1cnNlc1xmUgoraW5wdXQgcmVxdWVzdCB3aWxsIGRvKS4gXGZCcG9zdF9tZW51XGZSIHJlc2V0cyB0aGUgc2VsZWN0aW9uIHN0YXR1cyBvZiBhbGwgaXRlbXMuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJ1bnBvc3RfbWVudVxmUiBlcmFzZXMgbWVudSBmcm9tIGl0cyBhc3NvY2lhdGVkIHN1YndpbmRvdy4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgbWVudSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9OT19ST09NCitNZW51IGlzIHRvbyBsYXJnZSBmb3IgaXRzIHdpbmRvdy4gWW91IHNob3VsZCBjb25zaWRlciB0byB1c2UKK1xmQnNldF9tZW51X2Zvcm1hdCgpXGZSIHRvIHNvbHZlIHRoZSBwcm9ibGVtLgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV9yZXF1ZXN0bmFtZS4zeCBiL21hbi9tZW51X3JlcXVlc3RuYW1lLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDVhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWVudV9yZXF1ZXN0bmFtZS4zeApAQCAtMCwwICsxLDcxIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X3JlcXVlc3RuYW1lLjN4LHYgMS43IDIwMDYvMTEvMDQgMTc6NTY6MDkgdG9tIEV4cCAkCisuVEggbWVudV9yZXF1ZXN0bmFtZSAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfcmVxdWVzdG5hbWVcZlIgLSBoYW5kbGUgcHJpbnRhYmxlIG1lbnUgcmVxdWVzdCBuYW1lcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitjb25zdCBjaGFyICptZW51X3JlcXVlc3RfbmFtZShpbnQgcmVxdWVzdCk7CisuYnIKK2ludCBtZW51X3JlcXVlc3RfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCbWVudV9yZXF1ZXN0X25hbWVcZlIgcmV0dXJucyB0aGUgcHJpbnRhYmxlIG5hbWUgb2YgYSBtZW51CityZXF1ZXN0IGNvZGUuCisuYnIKK1RoZSBmdW5jdGlvbiBcZkJtZW51X3JlcXVlc3RfYnlfbmFtZVxmUiBzZWFyY2hlcyBpbiB0aGUgbmFtZS10YWJsZSBmb3IgYSByZXF1ZXN0Cit3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm5zIGl0cyByZXF1ZXN0IGNvZGUuCitPdGhlcndpc2UgRV9OT19NQVRDSCBpcyByZXR1cm5lZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQm1lbnVfcmVxdWVzdF9uYW1lXGZSIHJldHVybnMgXGZCTlVMTFxmUiBvbiBlcnJvcgorYW5kIHNldHMgZXJybm8gdG8gXGZCRV9CQURfQVJHVU1FTlRcZlIuCisuYnIKK1xmQm1lbnVfcmVxdWVzdF9ieV9uYW1lXGZSIHJldHVybnMgXGZCRV9OT19NQVRDSFxmUiBvbiBlcnJvci4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV9zcGFjaW5nLjN4IGIvbWFuL21lbnVfc3BhY2luZy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmUwM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL21lbnVfc3BhY2luZy4zeApAQCAtMCwwICsxLDg0IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X3NwYWNpbmcuM3gsdiAxLjggMjAwNC8xMi8xMSAyMzozOTowNyB0b20gRXhwICQKKy5USCBtZW51X3NwYWNpbmcgM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51X3NwYWNpbmdcZlIgLSBDb250cm9sIHNwYWNpbmcgYmV0d2VlbiBtZW51IGl0ZW1zLgorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgc2V0X21lbnVfc3BhY2luZyhNRU5VICptZW51LAorICAgICAgICAgICAgICAgICAgICAgaW50IHNwY19kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzcGNfcm93cywKKyAgICAgICAgICAgICAgICAgICAgIGludCBzcGNfY29sdW1ucyk7CisuYnIKK2ludCBtZW51X3NwYWNpbmcoY29uc3QgTUVOVSAqbWVudSwKKyAgICAgICAgICAgICAgICAgaW50KiBzcGNfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgIGludCogc3BjX3Jvd3MsCisgICAgICAgICAgICAgICAgIGludCogc3BjX2NvbHVtbnMpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9zcGFjaW5nXGZSIHNldHMgdGhlIHNwYWNpbmcgaW5mb3JtYXRpb25zIGZvciB0aGUgbWVudS4KK1xmQnNwY19kZXNjcmlwdGlvblxmUiBjb250cm9scyB0aGUgbnVtYmVyIG9mIHNwYWNlcyBiZXR3ZWVuIGFuIGl0ZW0gbmFtZSBhbmQgYW4gaXRlbQorZGVzY3JpcHRpb24uIEl0IG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIFxmQlRBQlNJWkVcZlIuIFRoZSBtZW51IHN5c3RlbSBwdXRzIGluIHRoZQorbWlkZGxlIG9mIHRoaXMgc3BhY2luZyBhcmVhIHRoZSBwYWQgY2hhcmFjdGVyLiBUaGUgcmVtYWluaW5nIHBhcnRzIGFyZSBmaWxsZWQgd2l0aAorc3BhY2VzLgorXGZCc3BjX3Jvd3NcZlIgY29udHJvbHMgdGhlIG51bWJlciBvZiByb3dzIHRoYXQgYXJlIHVzZWQgZm9yIGFuIGl0ZW0uIEl0IG11c3Qgbm90IGJlCitsYXJnZXIgdGhhbiAzLiBUaGUgbWVudSBzeXN0ZW0gaW5zZXJ0cyB0aGUgYmxhbmsgbGluZXMgYmV0d2VlbiBpdGVtIHJvd3MsIHRoZXNlIGxpbmVzCit3aWxsIGNvbnRhaW4gdGhlIHBhZCBjaGFyYWN0ZXIgaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9ucy4KK1xmQnNwY19jb2x1bW5zXGZSIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgYmxhbmtzIGJldHdlZW4gY29sdW1ucyBvZiBpdGVtcy4gSXQgbXVzdCBub3QKK2JlIGxhcmdlciB0aGFuIFRBQlNJWkUuCitBIHZhbHVlIG9mIDAgZm9yIGFsbCB0aGUgc3BhY2luZyB2YWx1ZXMgcmVzZXRzIHRoZW0gdG8gdGhlIGRlZmF1bHQsIHdoaWNoIGlzIDEgZm9yIGFsbAorb2YgdGhlbS4KKy5icgorVGhlIGZ1bmN0aW9uIFxmQm1lbnVfc3BhY2luZ1xmUiBwYXNzZXMgYmFjayB0aGUgc3BhY2luZyBpbmZvIGZvciB0aGUgbWVudS4gSWYgYQorcG9pbnRlciBpcyBOVUxMLCB0aGlzIHNwZWNpZmljIGluZm8gaXMgc2ltcGx5IG5vdCByZXR1cm5lZC4KKy5TSCBSRVRVUk4gVkFMVUUKK0JvdGggcm91dGluZXMgcmV0dXJuIFxmQkVfT0tcZlIgb24gc3VjY2Vzcy4gXGZCc2V0X21lbnVfc3BhY2luZ1xmUiBtYXkgcmV0dXJuCitcZkJFX1BPU1RFRFxmUiBpZiB0aGUgbWVudSBpcyBwb3N0ZWQsIG9yIFxmQkVfQkFEX0FSR1VNRU5UXGZSIGlmIG9uZSBvZiB0aGUKK3NwYWNpbmcgdmFsdWVzIGlzIG91dCBvZiByYW5nZS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV91c2VycHRyLjN4IGIvbWFuL21lbnVfdXNlcnB0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2JlMmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL21lbnVfdXNlcnB0ci4zeApAQCAtMCwwICsxLDY5IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X3VzZXJwdHIuM3gsdiAxLjggMjAwNi8xMS8wNCAxODoyMTowMyB0b20gRXhwICQKKy5USCBtZW51X3VzZXJwdHIgM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51X3VzZXJwdHJcZlIgLSBhc3NvY2lhdGUgYXBwbGljYXRpb24gZGF0YSB3aXRoIGEgbWVudSBpdGVtCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV91c2VycHRyKE1FTlUgKm1lbnUsIHZvaWQgKnVzZXJwdHIpOworLmJyCit2b2lkICptZW51X3VzZXJwdHIoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorRXZlcnkgbWVudSBhbmQgZXZlcnkgbWVudSBpdGVtIGhhcyBhIGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaG9sZAorYXBwbGljYXRpb24tc3BlY2lmaWMgZGF0YSAodGhhdCBpcywgdGhlIG1lbnUtZHJpdmVyIGNvZGUgbGVhdmVzIGl0IGFsb25lKS4KK1RoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldCB0aGUgbWVudSB1c2VyIHBvaW50ZXIgZmllbGQuCisuU0ggUkVUVVJOIFZBTFVFCitcZkJtZW51X3VzZXJwdHJcZlIgcmV0dXJucyBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSBcZkJOVUxMXGZSKS4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5QUAorXGZCc2V0X21lbnVfdXNlcnB0clxmUCByZXR1cm5zIFxmQkVfT0tcZlAgKHN1Y2Nlc3MpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5QUAorVGhlIHVzZXIgcG9pbnRlciBpcyBhIHZvaWQgcG9pbnRlci4KK1dlIGNob3NlIG5vdCB0byBsZWF2ZSBpdCBhcyBhIGNoYXIgcG9pbnRlciBmb3IgU1ZyNCBjb21wYXRpYmlsaXR5LgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWVudV93aW4uM3ggYi9tYW4vbWVudV93aW4uM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzNTZlMQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9tZW51X3dpbi4zeApAQCAtMCwwICsxLDk1IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X3dpbi4zeCx2IDEuOCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIG1lbnVfd2luIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV93aW5cZlIgLSBtYWtlIGFuZCBicmVhayBtZW51IHdpbmRvdyBhbmQgc3Vid2luZG93IGFzc29jaWF0aW9ucworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgc2V0X21lbnVfd2luKE1FTlUgKm1lbnUsIFdJTkRPVyAqd2luKTsKKy5icgorV0lORE9XICptZW51X3dpbihjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNldF9tZW51X3N1YihNRU5VICptZW51LCBXSU5ET1cgKnN1Yik7CisuYnIKK1dJTkRPVyAqbWVudV9zdWIoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKK2ludCBzY2FsZV9tZW51KGNvbnN0IE1FTlUgKm1lbnUsIGludCAqcm93cywgaW50ICpjb2x1bW5zKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBtZW51IGhhcyBhbiBhc3NvY2lhdGVkIHBhaXIgb2YgXGZCY3Vyc2VzXGZSIHdpbmRvd3MuICBUaGUgbWVudSB3aW5kb3cKK2Rpc3BsYXlzIGFueSB0aXRsZSBhbmQgYm9yZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2luZG93OyB0aGUgbWVudSBzdWJ3aW5kb3cKK2Rpc3BsYXlzIHRoZSBpdGVtcyBvZiB0aGUgbWVudSB0aGF0IGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCisuUFAKK1RoZSBmaXJzdCBmb3VyIGZ1bmN0aW9ucyBnZXQgYW5kIHNldCB0aG9zZSB3aW5kb3dzLiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzZXQKK2VpdGhlciB3aW5kb3c7IGJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIgY29kZSB1c2VzIFxmQnN0ZHNjclxmUiBmb3IgYm90aC4KKy5QUAorSW4gdGhlIFxmQnNldF9cZlIgZnVuY3Rpb25zLCB3aW5kb3cgYXJndW1lbnQgb2YgXGZCTlVMTFxmUiBpcyB0cmVhdGVkIGFzIHRob3VnaAoraXQgd2VyZSBcZkJzdHNkY3JcZlIuICBBIG1lbnUgYXJndW1lbnQgb2YgXGZCTlVMTFxmUiBpcyB0cmVhdGVkIGFzIGEgcmVxdWVzdAordG8gY2hhbmdlIHRoZSBzeXN0ZW0gZGVmYXVsdCBtZW51IHdpbmRvdyBvciBzdWJ3aW5kb3cuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzY2FsZV9tZW51XGZSIHJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSByZXF1aXJlZCBmb3IgdGhlCitzdWJ3aW5kb3cgb2YgXGZJbWVudVxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLiAgUm91dGluZXMgdGhhdCByZXR1cm4KK2FuIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9taXRlbV9jdXJyZW50LjN4IGIvbWFuL21pdGVtX2N1cnJlbnQuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5ZjQwMQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9taXRlbV9jdXJyZW50LjN4CkBAIC0wLDAgKzEsMTAyIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtaXRlbV9jdXJyZW50LjN4LHYgMS4xMSAyMDA2LzExLzA0IDE4OjE4OjE5IHRvbSBFeHAgJAorLlRIIG1pdGVtX2N1cnJlbnQgM1ggIiIKKy5TSCBOQU1FCitcZkJtaXRlbV9jdXJyZW50XGZSIC0gc2V0IGFuZCBnZXQgY3VycmVudF9tZW51X2l0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9jdXJyZW50X2l0ZW0oTUVOVSAqbWVudSwgY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKK0lURU0gKmN1cnJlbnRfaXRlbShjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNldF90b3Bfcm93KE1FTlUgKm1lbnUsIGludCByb3cpOworLmJyCitpbnQgdG9wX3Jvdyhjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IGl0ZW1faW5kZXgoY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9jdXJyZW50X2l0ZW1cZlIgc2V0cyB0aGUgY3VycmVudCBpdGVtICh0aGUgaXRlbSBvbiB3aGljaAordGhlIG1lbnUgY3Vyc29yIGlzIHBvc2l0aW9uZWQpLiAgXGZCY3VycmVudF9pdGVtXGZSIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorY3VycmVudCBpdGVtIGluIHRoZSBnaXZlbiBtZW51LgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X3RvcF9yb3dcZlIgc2V0cyB0aGUgdG9wIHJvdyBvZiB0aGUgbWVudSB0byBzaG93IHRoZSBnaXZlbgorcm93ICh0aGUgdG9wIHJvdyBpcyBpbml0aWFsbHkgMCwgYW5kIGlzIHJlc2V0IHRvIHRoaXMgdmFsdWUgd2hlbmV2ZXIgdGhlCitcZkJPX1JPV01BSk9SXGZSIG9wdGlvbiBpcyB0b2dnbGVkKS4gIFRoZSBpdGVtIGxlZnRtb3N0IG9uIHRoZSBnaXZlbiByb3cKK2JlY29tZXMgY3VycmVudC4gIFRoZSBmdW5jdGlvbiBcZkJ0b3Bfcm93XGZSIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgdG9wIG1lbnUKK3JvdyBiZWluZyBkaXNwbGF5ZWQuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJpdGVtX2luZGV4XGZSIHJldHVybnMgdGhlICh6ZXJvLW9yaWdpbikgaW5kZXggb2YgXGZJaXRlbVxmUiBpbgordGhlIG1lbnUncyBpdGVtIHBvaW50ZXIgbGlzdC4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQmN1cnJlbnRfaXRlbVxmUiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIFxmQk5VTExcZlIpLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitcZkJ0b3Bfcm93XGZSIGFuZCBcZkJpdGVtX2luZGV4XGZSIHJldHVybiBcZkJFUlJcZlIgKHRoZSBnZW5lcmFsIFxmQmN1cnNlc1xmUgorZXJyb3IgdmFsdWUpIGlmIHRoZWlyIFxmSW1lbnVcZlAgcGFyYW1ldGVyIGlzIFxmQk5VTExcZlAuCisuUFAKK1xmQnNldF9jdXJyZW50X2l0ZW1cZlIgYW5kIFxmQnNldF90b3Bfcm93XGZSIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlBQCitUaGUgU1ZyNCBtZW51IGxpYnJhcnkgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhlIFxmQnRvcF9yb3dcZlIgYW5kCitcZkJpbmRleF9pdGVtXGZSIGVycm9yIHZhbHVlIGFzIC0xICh3aGljaCBpcyB0aGUgdmFsdWUgb2YgXGZCRVJSXGZSKS4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL21pdGVtX25hbWUuM3ggYi9tYW4vbWl0ZW1fbmFtZS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjAwOWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL21pdGVtX25hbWUuM3gKQEAgLTAsMCArMSw2NSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWl0ZW1fbmFtZS4zeCx2IDEuNiAyMDA2LzExLzA0IDE3OjUzOjQwIHRvbSBFeHAgJAorLlRIIG1pdGVtX25hbWUgM1ggIiIKKy5TSCBOQU1FCitcZkJtaXRlbV9uYW1lXGZSIC0gZ2V0IG1lbnUgaXRlbSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBmaWVsZHMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgorY29uc3QgY2hhciAqaXRlbV9uYW1lKGNvbnN0IElURU0gKml0ZW0pOworLmJyCitjb25zdCBjaGFyICppdGVtX2Rlc2NyaXB0aW9uKGNvbnN0IElURU0gKml0ZW0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJpdGVtX25hbWVcZlIgcmV0dXJucyB0aGUgbmFtZSBwYXJ0IG9mIHRoZSBnaXZlbiBpdGVtLgorLmJyCitUaGUgZnVuY3Rpb24gXGZCaXRlbV9kZXNjcmlwdGlvblxmUiByZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBwYXJ0IG9mIHRoZSBnaXZlbgoraXRlbS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSBcZkJOVUxMXGZSKS4KK1RoZXkgZG8gbm90IHNldCBlcnJuby4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LgorVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL21pdGVtX25ldy4zeCBiL21hbi9taXRlbV9uZXcuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmYTZlZAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9taXRlbV9uZXcuM3gKQEAgLTAsMCArMSw5MCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWl0ZW1fbmV3LjN4LHYgMS4xMCAyMDA2LzExLzA0IDE4OjE2OjM2IHRvbSBFeHAgJAorLlRIIG1pdGVtX25ldyAzWCAiIgorLlNIIE5BTUUKK1xmQm1pdGVtX25ld1xmUiAtIGNyZWF0ZSBhbmQgZGVzdHJveSBtZW51IGl0ZW1zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK0lURU0gKm5ld19pdGVtKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKKy5icgoraW50IGZyZWVfaXRlbShJVEVNICppdGVtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCbmV3X2l0ZW1cZlIgYWxsb2NhdGVzIGEgbmV3IGl0ZW0gYW5kIGluaXRpYWxpemVzIGl0IGZyb20gdGhlCitcZkJuYW1lXGZSIGFuZCBcZkJkZXNjcmlwdGlvblxmUiBwb2ludGVycy4gUGxlYXNlIG5vdGljZSB0aGF0IHRoZSBpdGVtIHN0b3Jlcworb25seSB0aGUgcG9pbnRlcnMgdG8gdGhlIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBUaG9zZSBwb2ludGVycyBtdXN0IGJlIHZhbGlkCitkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBpdGVtLiBTbyB5b3Ugc2hvdWxkIGJlIHZlcnkgY2FyZWZ1bCB3aXRoIG5hbWVzCitvciBkZXNjcmlwdGlvbnMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvZiBzb21lIHJvdXRpbmVzLgorLmJyCitUaGUgZnVuY3Rpb24gXGZCZnJlZV9pdGVtXGZSIGRlLWFsbG9jYXRlcyBhbiBpdGVtLiBQbGVhc2Ugbm90aWNlIHRoYXQgaXQKK2lzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVsZWFzZSB0aGUgbWVtb3J5IGZvciB0aGUKK25hbWUgb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpdGVtLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQm5ld19pdGVtXGZSIHJldHVybnMgXGZCTlVMTFxmUiBvbiBlcnJvci4KK0l0IHNldHMgZXJybm8gYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbidzIGZhaWx1cmU6CisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZyZWVfaXRlbVxmUiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQ09OTkVDVEVECitJdGVtIGlzIGNvbm5lY3RlZCB0byBhIG1lbnUuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9taXRlbV9vcHRzLjN4IGIvbWFuL21pdGVtX29wdHMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1OWRhYgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9taXRlbV9vcHRzLjN4CkBAIC0wLDAgKzEsODQgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1pdGVtX29wdHMuM3gsdiAxLjkgMjAwNy8wMi8yNCAxNzozMzozMiB0b20gRXhwICQKKy5USCBtaXRlbV9vcHRzIDNYICIiCisuU0ggTkFNRQorXGZCbWl0ZW1fb3B0c1xmUiAtIHNldCBhbmQgZ2V0IG1lbnUgaXRlbSBvcHRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfaXRlbV9vcHRzKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IGl0ZW1fb3B0c19vbihJVEVNICppdGVtLCBJdGVtX09wdGlvbnMgb3B0cyk7CisuYnIKK2ludCBpdGVtX29wdHNfb2ZmKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKTsKKy5icgorSXRlbV9PcHRpb25zIGl0ZW1fb3B0cyhjb25zdCBJVEVNICppdGVtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2l0ZW1fb3B0c1xmUiBzZXRzIGFsbCB0aGUgZ2l2ZW4gaXRlbSdzIG9wdGlvbiBiaXRzIChtZW51CitvcHRpb24gYml0cyBtYXkgYmUgbG9naWNhbGx5LU9SJ2VkIHRvZ2V0aGVyKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQml0ZW1fb3B0c19vblxmUiB0dXJucyBvbiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsIGFuZCBsZWF2ZXMKK290aGVycyBhbG9uZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQml0ZW1fb3B0c19vZmZcZlIgdHVybnMgb2ZmIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCaXRlbV9vcHRzXGZSIHJldHVybnMgdGhlIGl0ZW0ncyBjdXJyZW50IG9wdGlvbiBiaXRzLgorLlBQCitUaGVyZSBpcyBvbmx5IG9uZSBkZWZpbmVkIG9wdGlvbiBiaXQgbWFzaywgXGZCT19TRUxFQ1RBQkxFXGZSLiAgV2hlbiB0aGlzIGlzCitvbiwgdGhlIGl0ZW0gbWF5IGJlIHNlbGVjdGVkIGR1cmluZyBtZW51IHByb2Nlc3NpbmcuICBUaGlzIG9wdGlvbiBkZWZhdWx0cwordG8gb24uCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgZm9yIFxmQml0ZW1fb3B0c1xmUiwgZWFjaCByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWl0ZW1fdXNlcnB0ci4zeCBiL21hbi9taXRlbV91c2VycHRyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTUxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWl0ZW1fdXNlcnB0ci4zeApAQCAtMCwwICsxLDcwIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtaXRlbV91c2VycHRyLjN4LHYgMS45IDIwMDYvMTEvMDQgMTg6MjE6MDMgdG9tIEV4cCAkCisuVEggbWl0ZW1fdXNlcnB0ciAzWCAiIgorLlNIIE5BTUUKK1xmQm1pdGVtX3VzZXJwdHJcZlIgLSBhc3NvY2lhdGUgYXBwbGljYXRpb24gZGF0YSB3aXRoIGEgbWVudSBpdGVtCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfaXRlbV91c2VycHRyKElURU0gKml0ZW0sIHZvaWQgKnVzZXJwdHIpOworLmJyCit2b2lkICppdGVtX3VzZXJwdHIoY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorRXZlcnkgbWVudSBpdGVtIGhhcyBhIGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaG9sZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkYXRhCisodGhhdCBpcywgdGhlIG1lbnUtZHJpdmVyIGNvZGUgbGVhdmVzIGl0IGFsb25lKS4gIFRoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldAordGhhdCBmaWVsZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJpdGVtX3VzZXJwdHJcZlIgcmV0dXJucyBhIHBvaW50ZXIgKHBvc3NpYmx5IFxmQk5VTExcZlIpLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitUaGUgXGZCc2V0X2l0ZW1fdXNlcnB0clxmUCBhbHdheXMgcmV0dXJucyBcZkJFX09LXGZQIChzdWNjZXNzKS4KKy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK1RoZSB1c2VyIHBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIuCitXZSBjaG9zZSBub3QgdG8gbGVhdmUgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL21pdGVtX3ZhbHVlLjN4IGIvbWFuL21pdGVtX3ZhbHVlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWl0ZW1fdmFsdWUuM3gKQEAgLTAsMCArMSw3NiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtaXRlbV92YWx1ZS4zeCx2IDEuOCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIG1pdGVtX3ZhbHVlIDNYICIiCisuU0ggTkFNRQorXGZCbWl0ZW1fdmFsdWVcZlIgLSBzZXQgYW5kIGdldCBtZW51IGl0ZW0gdmFsdWVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfaXRlbV92YWx1ZShJVEVNICppdGVtLCBib29sIHZhbHVlKTsKKy5icgorYm9vbCBpdGVtX3ZhbHVlKGNvbnN0IElURU0gKml0ZW0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK0lmIHlvdSB0dXJuIG9mZiB0aGUgbWVudSBvcHRpb24gXGZCT19PTkVWQUxVRVxmUiAoZS5nLiwgd2l0aAorXGZCc2V0X21lbnVfb3B0c1xmUiBvciBcZkJtZW51X29wdHNfb2ZmXGZSOyBzZWUgXGZCbWVudV9vcHRzXGZSKDNYKSksIHRoZSBtZW51CitiZWNvbWVzIG11bHRpLXZhbHVlZDsgdGhhdCBpcywgbW9yZSB0aGFuIG9uZSBpdGVtIG1heSBzaW11bHRhbmVvdXNseSBiZQorc2VsZWN0ZWQuCisuUFAKK0luIGEgbXVsdGlfdmFsdWVkIG1lbnUsIHlvdSBjYW4gdXNlZCBcZkJzZXRfaXRlbV92YWx1ZVxmUiB0byBzZWxlY3QgdGhlCitnaXZlbiBtZW51IGl0ZW0gKHNlY29uZCBhcmd1bWVudCBcZkJUUlVFXGZSKSBvciBkZXNlbGVjdCBpdCAoc2Vjb25kIGFyZ3VtZW50CitcZkJGQUxTRVxmUikuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCc2V0X2l0ZW1fdmFsdWVcZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX1JFUVVFU1RfREVOSUVECitUaGUgbWVudSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbWl0ZW1fdmlzaWJsZS4zeCBiL21hbi9taXRlbV92aXNpYmxlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTAzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWl0ZW1fdmlzaWJsZS4zeApAQCAtMCwwICsxLDU5IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtaXRlbV92aXNpYmxlLjN4LHYgMS41IDE5OTgvMTEvMjkgMDE6MTI6NTUgUmljay5PaG5lbXVzIEV4cCAkCisuVEggbWl0ZW1fdmlzaWJsZSAzWCAiIgorLlNIIE5BTUUKK1xmQm1pdGVtX3Zpc2libGVcZlIgLSBjaGVjayB2aXNpYmlsaXR5IG9mIGEgbWVudSBpdGVtCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2Jvb2wgaXRlbV92aXNpYmxlKGNvbnN0IElURU0gKml0ZW0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK0EgbWVudSBpdGVtIGlzIHZpc2libGUgd2hlbiBpdCBpcyBpbiB0aGUgcG9ydGlvbiBvZiBhIHBvc3RlZCBtZW51IHRoYXQKK2lzIG1hcHBlZCBvbnRvIHRoZSBzY3JlZW4gKGlmIHRoZSBtZW51IGlzIHNjcm9sbGFibGUsIGluIHBhcnRpY3VsYXIsIHRoaXMKK3BvcnRpb24gd2lsbCBiZSBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIG1lbnUpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL25jdXJzZXMuM3ggYi9tYW4vbmN1cnNlcy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDNhMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL25jdXJzZXMuM3gKQEAgLTAsMCArMSwxMTY4IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBuY3Vyc2VzLjN4LHYgMS45MiAyMDA4LzEwLzI1IDIzOjMxOjQ1IHRvbSBFeHAgJAorLmh5IDAKKy5USCBuY3Vyc2VzIDNYICIiCisuZHMgbiA1CisuZHMgZCBAVEVSTUlORk9ACisuU0ggTkFNRQorXGZCbmN1cnNlc1xmUiAtIENSVCBzY3JlZW4gaGFuZGxpbmcgYW5kIG9wdGltaXphdGlvbiBwYWNrYWdlCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IHJvdXRpbmVzIGdpdmUgdGhlIHVzZXIgYSB0ZXJtaW5hbC1pbmRlcGVuZGVudCBtZXRob2QKK29mIHVwZGF0aW5nIGNoYXJhY3RlciBzY3JlZW5zIHdpdGggcmVhc29uYWJsZSBvcHRpbWl6YXRpb24uCitUaGlzIGltcGxlbWVudGF0aW9uIGlzIGBgbmV3IGN1cnNlcycnIChuY3Vyc2VzKSBhbmQKK2lzIHRoZSBhcHByb3ZlZCByZXBsYWNlbWVudCBmb3IKKzQuNEJTRCBjbGFzc2ljIGN1cnNlcywgd2hpY2ggaGFzIGJlZW4gZGlzY29udGludWVkLgorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGVtdWxhdGVzIHRoZSBcZkJjdXJzZXNcZlIoM1gpIGxpYnJhcnkgb2YKK1N5c3RlbSBWIFJlbGVhc2UgNCBVTklYLAorYW5kIFhQRzQgKFgvT3BlbiBQb3J0YWJpbGl0eSBHdWlkZSkgY3Vyc2VzIChhbHNvIGtub3duIGFzIFhTSSBjdXJzZXMpLgorWFNJIHN0YW5kcyBmb3IgWC9PcGVuIFN5c3RlbSBJbnRlcmZhY2VzIEV4dGVuc2lvbi4KK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgaXMgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSBpbiBzb3VyY2UgZm9ybS4KK0RpZmZlcmVuY2VzIGZyb20gdGhlIFNWcjQKK2N1cnNlcyBhcmUgc3VtbWFyaXplZCB1bmRlciB0aGUgXGZCRVhURU5TSU9OU1xmUCBhbmQgXGZCUE9SVEFCSUxJVFlcZlAgc2VjdGlvbnMgYmVsb3cgYW5kCitkZXNjcmliZWQgaW4gZGV0YWlsIGluIHRoZSByZXNwZWN0aXZlIFxmQkVYVEVOU0lPTlNcZlAsIFxmQlBPUlRBQklMSVRZXGZQIGFuZCBcZkJCVUdTXGZQIHNlY3Rpb25zCitvZiBpbmRpdmlkdWFsIG1hbiBwYWdlcy4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBhbHNvIHByb3ZpZGVzIG1hbnkgdXNlZnVsIGV4dGVuc2lvbnMsCitpLmUuLCBmZWF0dXJlcyB3aGljaCBjYW5ub3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBzaW1wbGUgYWRkLW9uIGxpYnJhcnkKK2J1dCB3aGljaCByZXF1aXJlIGFjY2VzcyB0byB0aGUgaW50ZXJuYWxzIG9mIHRoZSBsaWJyYXJ5LgorLlBQCitBIHByb2dyYW0gdXNpbmcgdGhlc2Ugcm91dGluZXMgbXVzdCBiZSBsaW5rZWQgd2l0aCB0aGUgXGZCLWxuY3Vyc2VzXGZSIG9wdGlvbiwKK29yIChpZiBpdCBoYXMgYmVlbiBnZW5lcmF0ZWQpIHdpdGggdGhlIGRlYnVnZ2luZyBsaWJyYXJ5IFxmQi1sbmN1cnNlc19nXGZSLgorKFlvdXIgc3lzdGVtIGludGVncmF0b3IgbWF5IGFsc28gaGF2ZSBpbnN0YWxsZWQgdGhlc2UgbGlicmFyaWVzIHVuZGVyCit0aGUgbmFtZXMgXGZCLWxjdXJzZXNcZlIgYW5kIFxmQi1sY3Vyc2VzX2dcZlIuKQorVGhlIG5jdXJzZXNfZyBsaWJyYXJ5IGdlbmVyYXRlcyB0cmFjZSBsb2dzIChpbiBhIGZpbGUgY2FsbGVkICd0cmFjZScgaW4gdGhlCitjdXJyZW50IGRpcmVjdG9yeSkgdGhhdCBkZXNjcmliZSBjdXJzZXMgYWN0aW9ucy4KK1NlZSBhbHNvIHRoZSBzZWN0aW9uIG9uIFxmQkFMVEVSTkFURSBDT05GSUdVUkFUSU9OU1xmUC4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgcGFja2FnZSBzdXBwb3J0czogb3ZlcmFsbCBzY3JlZW4sIHdpbmRvdyBhbmQgcGFkCittYW5pcHVsYXRpb247IG91dHB1dCB0byB3aW5kb3dzIGFuZCBwYWRzOyByZWFkaW5nIHRlcm1pbmFsIGlucHV0OyBjb250cm9sIG92ZXIKK3Rlcm1pbmFsIGFuZCBcZkJjdXJzZXNcZlIgaW5wdXQgYW5kIG91dHB1dCBvcHRpb25zOyBlbnZpcm9ubWVudCBxdWVyeQorcm91dGluZXM7IGNvbG9yIG1hbmlwdWxhdGlvbjsgdXNlIG9mIHNvZnQgbGFiZWwga2V5czsgdGVybWluZm8gY2FwYWJpbGl0aWVzOworYW5kIGFjY2VzcyB0byBsb3ctbGV2ZWwgdGVybWluYWwtbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgorLlBQCitUaGUgbGlicmFyeSB1c2VzIHRoZSBsb2NhbGUgd2hpY2ggdGhlIGNhbGxpbmcgcHJvZ3JhbSBoYXMgaW5pdGlhbGl6ZWQuCitUaGF0IGlzIG5vcm1hbGx5IGRvbmUgd2l0aCBcZkJzZXRsb2NhbGVcZlA6Cisuc3AKKyAgICAgIFxmQnNldGxvY2FsZShMQ19BTEwsICIiKTtcZlAKKy5zcAorSWYgdGhlIGxvY2FsZSBpcyBub3QgaW5pdGlhbGl6ZWQsCit0aGUgbGlicmFyeSBhc3N1bWVzIHRoYXQgY2hhcmFjdGVycyBhcmUgcHJpbnRhYmxlIGFzIGluIElTTy04ODU5LTEsCit0byB3b3JrIHdpdGggY2VydGFpbiBsZWdhY3kgcHJvZ3JhbXMuCitZb3Ugc2hvdWxkIGluaXRpYWxpemUgdGhlIGxvY2FsZSBhbmQgbm90IHJlbHkgb24gc3BlY2lmaWMgZGV0YWlscyBvZgordGhlIGxpYnJhcnkgd2hlbiB0aGUgbG9jYWxlIGhhcyBub3QgYmVlbiBzZXR1cC4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmluaXRzY3JcZlIgb3IgXGZCbmV3dGVybVxmUgorbXVzdCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeQorYmVmb3JlIGFueSBvZiB0aGUgb3RoZXIgcm91dGluZXMgdGhhdCBkZWFsIHdpdGggd2luZG93cworYW5kIHNjcmVlbnMgYXJlIHVzZWQuCitUaGUgcm91dGluZSBcZkJlbmR3aW5cZlIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGV4aXRpbmcuCisuUFAKK1RvIGdldCBjaGFyYWN0ZXItYXQtYS10aW1lIGlucHV0IHdpdGhvdXQgZWNob2luZyAobW9zdAoraW50ZXJhY3RpdmUsIHNjcmVlbiBvcmllbnRlZCBwcm9ncmFtcyB3YW50IHRoaXMpLCB0aGUgZm9sbG93aW5nCitzZXF1ZW5jZSBzaG91bGQgYmUgdXNlZDoKKy5zcAorICAgICAgXGZCaW5pdHNjcigpOyBjYnJlYWsoKTsgbm9lY2hvKCk7XGZSCisuc3AKK01vc3QgcHJvZ3JhbXMgd291bGQgYWRkaXRpb25hbGx5IHVzZSB0aGUgc2VxdWVuY2U6Cisuc3AKKyAgICAgIFxmQm5vbmwoKTtcZlIKKyAgICAgIFxmQmludHJmbHVzaChzdGRzY3IsIEZBTFNFKTtcZlIKKyAgICAgIFxmQmtleXBhZChzdGRzY3IsIFRSVUUpO1xmUgorLnNwCitCZWZvcmUgYSBcZkJjdXJzZXNcZlIgcHJvZ3JhbSBpcyBydW4sIHRoZSB0YWIgc3RvcHMgb2YgdGhlIHRlcm1pbmFsCitzaG91bGQgYmUgc2V0IGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gc3RyaW5ncywgaWYgZGVmaW5lZCwgbXVzdCBiZSBvdXRwdXQuCitUaGlzIGNhbiBiZSBkb25lIGJ5IGV4ZWN1dGluZyB0aGUgXGZCdHB1dCBpbml0XGZSIGNvbW1hbmQKK2FmdGVyIHRoZSBzaGVsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNXGZSIGhhcyBiZWVuIGV4cG9ydGVkLgorXGZCdHNldCgxKVxmUiBpcyB1c3VhbGx5IHJlc3BvbnNpYmxlIGZvciBkb2luZyB0aGlzLgorW1NlZSBcZkJ0ZXJtaW5mb1xmUihcKm4pIGZvciBmdXJ0aGVyIGRldGFpbHMuXQorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IHBlcm1pdHMgbWFuaXB1bGF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcywKK2NhbGxlZCBcZkl3aW5kb3dzXGZSLCB3aGljaCBjYW4gYmUgdGhvdWdodCBvZiBhcyB0d28tZGltZW5zaW9uYWwKK2FycmF5cyBvZiBjaGFyYWN0ZXJzIHJlcHJlc2VudGluZyBhbGwgb3IgcGFydCBvZiBhIENSVCBzY3JlZW4uCitBIGRlZmF1bHQgd2luZG93IGNhbGxlZCBcZkJzdGRzY3JcZlIsIHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSB0ZXJtaW5hbAorc2NyZWVuLCBpcyBzdXBwbGllZC4KK090aGVycyBtYXkgYmUgY3JlYXRlZCB3aXRoIFxmQm5ld3dpblxmUi4KKy5QUAorTm90ZSB0aGF0IFxmQmN1cnNlc1xmUiBkb2VzIG5vdCBoYW5kbGUgb3ZlcmxhcHBpbmcgd2luZG93cywgdGhhdCdzIGRvbmUgYnkKK3RoZSBcZkJwYW5lbFxmUigzWCkgbGlicmFyeS4KK1RoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGVpdGhlciB1c2UKK1xmQnN0ZHNjclxmUiBvciBkaXZpZGUgdGhlIHNjcmVlbiBpbnRvIHRpbGVkIHdpbmRvd3MgYW5kIG5vdCB1c2luZworXGZCc3Rkc2NyXGZSIGF0IGFsbC4KK01peGluZyB0aGUgdHdvIHdpbGwgcmVzdWx0IGluIHVucHJlZGljdGFibGUsIGFuZCB1bmRlc2lyZWQsIGVmZmVjdHMuCisuUFAKK1dpbmRvd3MgYXJlIHJlZmVycmVkIHRvIGJ5IHZhcmlhYmxlcyBkZWNsYXJlZCBhcyBcZkJXSU5ET1cgKlxmUi4KK1RoZXNlIGRhdGEgc3RydWN0dXJlcyBhcmUgbWFuaXB1bGF0ZWQgd2l0aCByb3V0aW5lcyBkZXNjcmliZWQgaGVyZSBhbmQKK2Vsc2V3aGVyZSBpbiB0aGUgXGZCbmN1cnNlc1xmUiBtYW51YWwgcGFnZXMuCitBbW9uZyB0aG9zZSwgdGhlIG1vc3QgYmFzaWMKK3JvdXRpbmVzIGFyZSBcZkJtb3ZlXGZSIGFuZCBcZkJhZGRjaFxmUi4KK01vcmUgZ2VuZXJhbCB2ZXJzaW9ucyBvZgordGhlc2Ugcm91dGluZXMgYXJlIGluY2x1ZGVkIHdpdGggbmFtZXMgYmVnaW5uaW5nIHdpdGggXGZCd1xmUiwKK2FsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYSB3aW5kb3cuCitUaGUgcm91dGluZXMgbm90IGJlZ2lubmluZword2l0aCBcZkJ3XGZSIGFmZmVjdCBcZkJzdGRzY3JcZlIuCisuUFAKK0FmdGVyIHVzaW5nIHJvdXRpbmVzIHRvIG1hbmlwdWxhdGUgYSB3aW5kb3csIFxmQnJlZnJlc2hcZlIgaXMgY2FsbGVkLAordGVsbGluZyBcZkJjdXJzZXNcZlIgdG8gbWFrZSB0aGUgdXNlcidzIENSVCBzY3JlZW4gbG9vayBsaWtlCitcZkJzdGRzY3JcZlIuCitUaGUgY2hhcmFjdGVycyBpbiBhIHdpbmRvdyBhcmUgYWN0dWFsbHkgb2YgdHlwZQorXGZCY2h0eXBlXGZSLCAoY2hhcmFjdGVyIGFuZCBhdHRyaWJ1dGUgZGF0YSkgc28gdGhhdCBvdGhlciBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGNoYXJhY3RlciBtYXkgYWxzbyBiZSBzdG9yZWQgd2l0aCBlYWNoIGNoYXJhY3Rlci4KKy5QUAorU3BlY2lhbCB3aW5kb3dzIGNhbGxlZCBcZklwYWRzXGZSIG1heSBhbHNvIGJlIG1hbmlwdWxhdGVkLgorVGhlc2UgYXJlIHdpbmRvd3MKK3doaWNoIGFyZSBub3QgY29uc3RyYWluZWQgdG8gdGhlIHNpemUgb2YgdGhlIHNjcmVlbiBhbmQgd2hvc2UgY29udGVudHMgbmVlZCBub3QKK2JlIGNvbXBsZXRlbHkgZGlzcGxheWVkLgorU2VlIFxmQmN1cnNfcGFkXGZSKDNYKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5QUAorSW4gYWRkaXRpb24gdG8gZHJhd2luZyBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW4sIHZpZGVvIGF0dHJpYnV0ZXMgYW5kIGNvbG9ycworbWF5IGJlIHN1cHBvcnRlZCwgY2F1c2luZyB0aGUgY2hhcmFjdGVycyB0byBzaG93IHVwIGluIHN1Y2ggbW9kZXMgYXMKK3VuZGVybGluZWQsIGluIHJldmVyc2UgdmlkZW8sIG9yIGluIGNvbG9yIG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgc3VjaAorZGlzcGxheSBlbmhhbmNlbWVudHMuCitMaW5lIGRyYXdpbmcgY2hhcmFjdGVycyBtYXkgYmUgc3BlY2lmaWVkIHRvIGJlIG91dHB1dC4KK09uIGlucHV0LCBcZkJjdXJzZXNcZlIgaXMgYWxzbyBhYmxlIHRvIHRyYW5zbGF0ZSBhcnJvdyBhbmQgZnVuY3Rpb24ga2V5cyB0aGF0Cit0cmFuc21pdCBlc2NhcGUgc2VxdWVuY2VzIGludG8gc2luZ2xlIHZhbHVlcy4KK1RoZSB2aWRlbyBhdHRyaWJ1dGVzLCBsaW5lCitkcmF3aW5nIGNoYXJhY3RlcnMsIGFuZCBpbnB1dCB2YWx1ZXMgdXNlIG5hbWVzLCBkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIsCitzdWNoIGFzIFxmQkFfUkVWRVJTRVxmUiwgXGZCQUNTX0hMSU5FXGZSLCBhbmQgXGZCS0VZX0xFRlRcZlIuCisuUFAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgXGZCTElORVNcZlIgYW5kIFxmQkNPTFVNTlNcZlIgYXJlIHNldCwgb3IgaWYgdGhlCitwcm9ncmFtIGlzIGV4ZWN1dGluZyBpbiBhIHdpbmRvdyBlbnZpcm9ubWVudCwgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGluCit0aGUgZW52aXJvbm1lbnQgd2lsbCBvdmVycmlkZSBpbmZvcm1hdGlvbiByZWFkIGJ5IFxmSXRlcm1pbmZvXGZSLgorVGhpcyB3b3VsZCBhZmZlY3QgYSBwcm9ncmFtIHJ1bm5pbmcgaW4gYW4gQVQmVCA2MzAgbGF5ZXIsCitmb3IgZXhhbXBsZSwgd2hlcmUgdGhlIHNpemUgb2YgYQorc2NyZWVuIGlzIGNoYW5nZWFibGUgKHNlZSBcZkJFTlZJUk9OTUVOVFxmUikuCisuUFAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNSU5GT1xmUiBpcyBkZWZpbmVkLCBhbnkgcHJvZ3JhbSB1c2luZworXGZCY3Vyc2VzXGZSIGNoZWNrcyBmb3IgYSBsb2NhbCB0ZXJtaW5hbCBkZWZpbml0aW9uIGJlZm9yZSBjaGVja2luZyBpbiB0aGUKK3N0YW5kYXJkIHBsYWNlLgorRm9yIGV4YW1wbGUsIGlmIFxmQlRFUk1cZlIgaXMgc2V0IHRvIFxmQmF0dDQ0MjRcZlIsIHRoZW4gdGhlCitjb21waWxlZCB0ZXJtaW5hbCBkZWZpbml0aW9uIGlzIGZvdW5kIGluCisuc3AKKyAgICAgIFxmQlwqZC9hL2F0dDQ0MjRcZlIuCisuc3AKKyhUaGUgXGZCYVxmUiBpcyBjb3BpZWQgZnJvbSB0aGUgZmlyc3QgbGV0dGVyIG9mIFxmQmF0dDQ0MjRcZlIgdG8gYXZvaWQKK2NyZWF0aW9uIG9mIGh1Z2UgZGlyZWN0b3JpZXMuKSAgSG93ZXZlciwgaWYgXGZCVEVSTUlORk9cZlIgaXMgc2V0IHRvCitcZkIkSE9NRS9teXRlcm1zXGZSLCBcZkJjdXJzZXNcZlIgZmlyc3QgY2hlY2tzCisuc3AKKyAgICAgIFxmQiRIT01FL215dGVybXMvYS9hdHQ0NDI0XGZSLAorLnNwCithbmQgaWYgdGhhdCBmYWlscywgaXQgdGhlbiBjaGVja3MKKy5zcAorICAgICAgXGZCXCpkL2EvYXR0NDQyNFxmUi4KKy5zcAorVGhpcyBpcyB1c2VmdWwgZm9yIGRldmVsb3BpbmcgZXhwZXJpbWVudGFsIGRlZmluaXRpb25zIG9yIHdoZW4gd3JpdGUKK3Blcm1pc3Npb24gaW4gXGZCXCpkXGZSIGlzIG5vdCBhdmFpbGFibGUuCisuUFAKK1RoZSBpbnRlZ2VyIHZhcmlhYmxlcyBcZkJMSU5FU1xmUiBhbmQgXGZCQ09MU1xmUiBhcmUgZGVmaW5lZCBpbgorXGZCPGN1cnNlcy5oPlxmUiBhbmQgd2lsbCBiZSBmaWxsZWQgaW4gYnkgXGZCaW5pdHNjclxmUiB3aXRoIHRoZSBzaXplIG9mIHRoZQorc2NyZWVuLgorVGhlIGNvbnN0YW50cyBcZkJUUlVFXGZSIGFuZCBcZkJGQUxTRVxmUiBoYXZlIHRoZSB2YWx1ZXMgXGZCMVxmUiBhbmQKK1xmQjBcZlIsIHJlc3BlY3RpdmVseS4KKy5QUAorVGhlIFxmQmN1cnNlc1xmUiByb3V0aW5lcyBhbHNvIGRlZmluZSB0aGUgXGZCV0lORE9XICpcZlIgdmFyaWFibGUgXGZCY3Vyc2NyXGZSCit3aGljaCBpcyB1c2VkIGZvciBjZXJ0YWluIGxvdy1sZXZlbCBvcGVyYXRpb25zIGxpa2UgY2xlYXJpbmcgYW5kIHJlZHJhd2luZyBhCitzY3JlZW4gY29udGFpbmluZyBnYXJiYWdlLgorVGhlIFxmQmN1cnNjclxmUiBjYW4gYmUgdXNlZCBpbiBvbmx5IGEgZmV3IHJvdXRpbmVzLgorLlwiCisuU1MgUm91dGluZSBhbmQgQXJndW1lbnQgTmFtZXMKK01hbnkgXGZCY3Vyc2VzXGZSIHJvdXRpbmVzIGhhdmUgdHdvIG9yIG1vcmUgdmVyc2lvbnMuCitUaGUgcm91dGluZXMgcHJlZml4ZWQgd2l0aCBcZkJ3XGZSIHJlcXVpcmUgYSB3aW5kb3cgYXJndW1lbnQuCitUaGUgcm91dGluZXMgcHJlZml4ZWQgd2l0aCBcZkJwXGZSIHJlcXVpcmUgYSBwYWQgYXJndW1lbnQuCitUaG9zZSB3aXRob3V0IGEgcHJlZml4IGdlbmVyYWxseSB1c2UgXGZCc3Rkc2NyXGZSLgorLlBQCitUaGUgcm91dGluZXMgcHJlZml4ZWQgd2l0aCBcZkJtdlxmUiByZXF1aXJlIGEgXGZJeVxmUiBhbmQgXGZJeFxmUgorY29vcmRpbmF0ZSB0byBtb3ZlIHRvIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uCitUaGUgXGZCbXZcZlIgcm91dGluZXMgaW1wbHkgYSBjYWxsIHRvIFxmQm1vdmVcZlIgYmVmb3JlIHRoZSBjYWxsIHRvIHRoZQorb3RoZXIgcm91dGluZS4KK1RoZSBjb29yZGluYXRlIFxmSXlcZlIgYWx3YXlzIHJlZmVycyB0byB0aGUgcm93IChvZgordGhlIHdpbmRvdyksIGFuZCBcZkl4XGZSIGFsd2F5cyByZWZlcnMgdG8gdGhlIGNvbHVtbi4KK1RoZSB1cHBlciBsZWZ0LWhhbmQgY29ybmVyIGlzIGFsd2F5cyAoMCwwKSwgbm90ICgxLDEpLgorLlBQCitUaGUgcm91dGluZXMgcHJlZml4ZWQgd2l0aCBcZkJtdndcZlIgdGFrZSBib3RoIGEgd2luZG93IGFyZ3VtZW50IGFuZAorXGZJeFxmUiBhbmQgXGZJeVxmUiBjb29yZGluYXRlcy4KK1RoZSB3aW5kb3cgYXJndW1lbnQgaXMgYWx3YXlzIHNwZWNpZmllZCBiZWZvcmUgdGhlIGNvb3JkaW5hdGVzLgorLlBQCitJbiBlYWNoIGNhc2UsIFxmSXdpblxmUiBpcyB0aGUgd2luZG93IGFmZmVjdGVkLCBhbmQgXGZJcGFkXGZSIGlzIHRoZQorcGFkIGFmZmVjdGVkOyBcZkl3aW5cZlIgYW5kIFxmSXBhZFxmUiBhcmUgYWx3YXlzIHBvaW50ZXJzIHRvIHR5cGUKK1xmQldJTkRPV1xmUi4KKy5QUAorT3B0aW9uIHNldHRpbmcgcm91dGluZXMgcmVxdWlyZSBhIEJvb2xlYW4gZmxhZyBcZkliZlxmUiB3aXRoIHRoZSB2YWx1ZQorXGZCVFJVRVxmUiBvciBcZkJGQUxTRVxmUjsgXGZJYmZcZlIgaXMgYWx3YXlzIG9mIHR5cGUgXGZCYm9vbFxmUi4KK01vc3Qgb2YgdGhlIGRhdGEgdHlwZXMgdXNlZCBpbiB0aGUgbGlicmFyeSByb3V0aW5lcywKK3N1Y2ggYXMgXGZCV0lORE9XXGZSLCBcZkJTQ1JFRU5cZlIsIFxmQmJvb2xcZlIsIGFuZCBcZkJjaHR5cGVcZlIKK2FyZSBkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIuCitUeXBlcyB1c2VkIGZvciB0aGUgdGVybWluZm8gcm91dGluZXMgc3VjaCBhcworXGZCVEVSTUlOQUxcZlIgYXJlIGRlZmluZWQgaW4gXGZCPHRlcm0uaD5cZlIuCisuUFAKK1RoaXMgbWFudWFsIHBhZ2UgZGVzY3JpYmVzIGZ1bmN0aW9ucyB3aGljaCBtYXkgYXBwZWFyIGluIGFueSBjb25maWd1cmF0aW9uCitvZiB0aGUgbGlicmFyeS4KK1RoZXJlIGFyZSB0d28gY29tbW9uIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBsaWJyYXJ5OgorLlJTCisuVFAgNQorbmN1cnNlcwordGhlICJub3JtYWwiIGxpYnJhcnksIHdoaWNoIGhhbmRsZXMgOC1iaXQgY2hhcmFjdGVycy4KK1RoZSBub3JtYWwgKDgtYml0KSBsaWJyYXJ5IHN0b3JlcyBjaGFyYWN0ZXJzIGNvbWJpbmVkIHdpdGggYXR0cmlidXRlcworaW4gXGZCY2h0eXBlXGZQIGRhdGEuCisuSVAKK0F0dHJpYnV0ZXMgYWxvbmUgKG5vIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyKSBtYXkgYmUgc3RvcmVkIGluIFxmQmNodHlwZVxmUAorb3IgdGhlIGVxdWl2YWxlbnQgXGZCYXR0cl90XGZQIGRhdGEuCitJbiBlaXRoZXIgY2FzZSwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHNvbWV0aGluZyBsaWtlIGFuIGludGVnZXIuCisuSVAKK0VhY2ggY2VsbCAocm93IGFuZCBjb2x1bW4pIGluIGEgXGZCV0lORE9XXGZQIGlzIHN0b3JlZCBhcyBhIFxmQmNodHlwZVxmUC4KKy5UUCA1CituY3Vyc2VzdwordGhlIHNvLWNhbGxlZCAid2lkZSIgbGlicmFyeSwgd2hpY2ggaGFuZGxlcyBtdWx0aWJ5dGUgY2hhcmFjdGVycworKFNlZSB0aGUgc2VjdGlvbiBvbiBcZkJBTFRFUk5BVEUgQ09ORklHVVJBVElPTlNcZlApLgorVGhlICJ3aWRlIiBsaWJyYXJ5IGluY2x1ZGVzIGFsbCBvZiB0aGUgY2FsbHMgZnJvbSB0aGUgIm5vcm1hbCIgbGlicmFyeS4KK0l0IGFkZHMgYWJvdXQgb25lIHRoaXJkIG1vcmUgY2FsbHMgdXNpbmcgZGF0YSB0eXBlcyB3aGljaCBzdG9yZQorbXVsdGlieXRlIGNoYXJhY3RlcnM6CisuUlMKKy5UUCA1CisuQiBjY2hhcl90Citjb3JyZXNwb25kcyB0byBcZkJjaHR5cGVcZlAuCitIb3dldmVyIGl0IGlzIGEgc3RydWN0dXJlLCBiZWNhdXNlIG1vcmUgZGF0YSBpcyBzdG9yZWQgdGhhbiBjYW4gZml0IGludG8KK2FuIGludGVnZXIuCitUaGUgY2hhcmFjdGVycyBhcmUgbGFyZ2UgZW5vdWdoIHRvIHJlcXVpcmUgYSBmdWxsIGludGVnZXIgdmFsdWUgLSBhbmQgdGhlcmUKK21heSBiZSBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciBwZXIgY2VsbC4KK1RoZSB2aWRlbyBhdHRyaWJ1dGVzIGFuZCBjb2xvciBhcmUgc3RvcmVkIGluIHNlcGFyYXRlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlLgorLklQCitFYWNoIGNlbGwgKHJvdyBhbmQgY29sdW1uKSBpbiBhIFxmQldJTkRPV1xmUCBpcyBzdG9yZWQgYXMgYSBcZkJjY2hhcl90XGZQLgorLlRQIDUKKy5CIHdjaGFyX3QKK3N0b3JlcyBhICJ3aWRlIiBjaGFyYWN0ZXIuCitMaWtlIFxmQmNodHlwZVxmUCwgdGhpcyBtYXkgYmUgYW4gaW50ZWdlci4KKy5UUCA1CisuQiB3aW50X3QKK3N0b3JlcyBhIFxmQndjaGFyX3RcZlAgb3IgXGZCV0VPRlxmUCAtIG5vdCB0aGUgc2FtZSwgdGhvdWdoIGJvdGggbWF5IGhhdmUKK3RoZSBzYW1lIHNpemUuCisuUkUKKy5JUAorVGhlICJ3aWRlIiBsaWJyYXJ5IHByb3ZpZGVzIG5ldyBmdW5jdGlvbnMgd2hpY2ggYXJlIGFuYWxvZ291cyB0bworZnVuY3Rpb25zIGluIHRoZSAibm9ybWFsIiBsaWJyYXJ5LgorVGhlcmUgaXMgYSBuYW1pbmcgY29udmVudGlvbiB3aGljaCByZWxhdGVzIG1hbnkgb2YgdGhlIG5vcm1hbC93aWRlIHZhcmlhbnRzOgorYSAiX3ciIGlzIGluc2VydGVkIGludG8gdGhlIG5hbWUuCitGb3IgZXhhbXBsZSwgXGZCd2FkZGNoXGZQIGJlY29tZXMgXGZCd2FkZF93Y2hcZlAuCisuUkUKKy5QUAorLlwiCisuU1MgUm91dGluZSBOYW1lIEluZGV4CitUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIGVhY2ggXGZCY3Vyc2VzXGZSIHJvdXRpbmUgYW5kIHRoZSBuYW1lIG9mCit0aGUgbWFudWFsIHBhZ2Ugb24gd2hpY2ggaXQgaXMgZGVzY3JpYmVkLgorUm91dGluZXMgZmxhZ2dlZCB3aXRoIGAqJworYXJlIG5jdXJzZXMtc3BlY2lmaWMsIG5vdCBkZXNjcmliZWQgYnkgWFBHNCBvciBwcmVzZW50IGluIFNWcjQuCisuUFAKKy5UUworY2VudGVyIHRhYigvKTsKK2wgbAorbCBsIC4KK1xmQmN1cnNlc1xmUiBSb3V0aW5lIE5hbWUvTWFudWFsIFBhZ2UgTmFtZQorPQorQ09MT1JfUEFJUi9cZkJjdXJzX2NvbG9yXGZSKDNYKQorUEFJUl9OVU1CRVIvXGZCY3Vyc19hdHRyXGZSKDNYKQorX25jX2ZyZWVfYW5kX2V4aXQvXGZCY3Vyc19tZW1sZWFrc1xmUigzWCkqCitfbmNfZnJlZWFsbC9cZkJjdXJzX21lbWxlYWtzXGZSKDNYKSoKK19uY190cmFjZWJpdHMvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2VhdHRyL1xmQmN1cnNfdHJhY2VcZlIoM1gpKgorX3RyYWNlYXR0cjIvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2VjaGFyL1xmQmN1cnNfdHJhY2VcZlIoM1gpKgorX3RyYWNlY2h0eXBlL1xmQmN1cnNfdHJhY2VcZlIoM1gpKgorX3RyYWNlY2h0eXBlMi9cZkJjdXJzX3RyYWNlXGZSKDNYKSoKK190cmFjZWR1bXAvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2VmL1xmQmN1cnNfdHJhY2VcZlIoM1gpKgorX3RyYWNlbW91c2UvXGZCY3Vyc190cmFjZVxmUigzWCkqCithZGRfd2NoL1xmQmN1cnNfYWRkX3djaFxmUigzWCkKK2FkZF93Y2huc3RyL1xmQmN1cnNfYWRkX3djaHN0clxmUigzWCkKK2FkZF93Y2hzdHIvXGZCY3Vyc19hZGRfd2Noc3RyXGZSKDNYKQorYWRkY2gvXGZCY3Vyc19hZGRjaFxmUigzWCkKK2FkZGNobnN0ci9cZkJjdXJzX2FkZGNoc3RyXGZSKDNYKQorYWRkY2hzdHIvXGZCY3Vyc19hZGRjaHN0clxmUigzWCkKK2FkZG5zdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCithZGRud3N0ci9cZkJjdXJzX2FkZHdzdHJcZlIoM1gpCithZGRzdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCithZGR3c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK2Fzc3VtZV9kZWZhdWx0X2NvbG9ycy9cZkJkZWZhdWx0X2NvbG9yc1xmUigzWCkqCithdHRyX2dldC9cZkJjdXJzX2F0dHJcZlIoM1gpCithdHRyX29mZi9cZkJjdXJzX2F0dHJcZlIoM1gpCithdHRyX29uL1xmQmN1cnNfYXR0clxmUigzWCkKK2F0dHJfc2V0L1xmQmN1cnNfYXR0clxmUigzWCkKK2F0dHJvZmYvXGZCY3Vyc19hdHRyXGZSKDNYKQorYXR0cm9uL1xmQmN1cnNfYXR0clxmUigzWCkKK2F0dHJzZXQvXGZCY3Vyc19hdHRyXGZSKDNYKQorYmF1ZHJhdGUvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCitiZWVwL1xmQmN1cnNfYmVlcFxmUigzWCkKK2JrZ2QvXGZCY3Vyc19ia2dkXGZSKDNYKQorYmtnZHNldC9cZkJjdXJzX2JrZ2RcZlIoM1gpCitia2dybmQvXGZCY3Vyc19ia2dybmRcZlIoM1gpCitia2dybmRzZXQvXGZCY3Vyc19ia2dybmRcZlIoM1gpCitib3JkZXIvXGZCY3Vyc19ib3JkZXJcZlIoM1gpCitib3JkZXJfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK2JveC9cZkJjdXJzX2JvcmRlclxmUigzWCkKK2JveF9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQorY2FuX2NoYW5nZV9jb2xvci9cZkJjdXJzX2NvbG9yXGZSKDNYKQorY2JyZWFrL1xmQmN1cnNfaW5vcHRzXGZSKDNYKQorY2hnYXQvXGZCY3Vyc19hdHRyXGZSKDNYKQorY2xlYXIvXGZCY3Vyc19jbGVhclxmUigzWCkKK2NsZWFyb2svXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorY2xydG9ib3QvXGZCY3Vyc19jbGVhclxmUigzWCkKK2NscnRvZW9sL1xmQmN1cnNfY2xlYXJcZlIoM1gpCitjb2xvcl9jb250ZW50L1xmQmN1cnNfY29sb3JcZlIoM1gpCitjb2xvcl9zZXQvXGZCY3Vyc19hdHRyXGZSKDNYKQorY29weXdpbi9cZkJjdXJzX292ZXJsYXlcZlIoM1gpCitjdXJzX3NldC9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK2N1cnNlc192ZXJzaW9uL1xmQmN1cnNfZXh0ZW5kXGZSKDNYKSoKK2RlZl9wcm9nX21vZGUvXGZCY3Vyc19rZXJuZWxcZlIoM1gpCitkZWZfc2hlbGxfbW9kZS9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK2RlZmluZV9rZXkvXGZCZGVmaW5lX2tleVxmUigzWCkqCitkZWxfY3VydGVybS9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQorZGVsYXlfb3V0cHV0L1xmQmN1cnNfdXRpbFxmUigzWCkKK2RlbGNoL1xmQmN1cnNfZGVsY2hcZlIoM1gpCitkZWxldGVsbi9cZkJjdXJzX2RlbGV0ZWxuXGZSKDNYKQorZGVsc2NyZWVuL1xmQmN1cnNfaW5pdHNjclxmUigzWCkKK2RlbHdpbi9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK2Rlcndpbi9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK2RvdXBkYXRlL1xmQmN1cnNfcmVmcmVzaFxmUigzWCkKK2R1cHdpbi9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK2VjaG8vXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitlY2hvX3djaGFyL1xmQmN1cnNfYWRkX3djaFxmUigzWCkKK2VjaG9jaGFyL1xmQmN1cnNfYWRkY2hcZlIoM1gpCitlbmR3aW4vXGZCY3Vyc19pbml0c2NyXGZSKDNYKQorZXJhc2UvXGZCY3Vyc19jbGVhclxmUigzWCkKK2VyYXNlY2hhci9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK2VyYXNld2NoYXIvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCitmaWx0ZXIvXGZCY3Vyc191dGlsXGZSKDNYKQorZmxhc2gvXGZCY3Vyc19iZWVwXGZSKDNYKQorZmx1c2hpbnAvXGZCY3Vyc191dGlsXGZSKDNYKQorZ2V0X3djaC9cZkJjdXJzX2dldF93Y2hcZlIoM1gpCitnZXRfd3N0ci9cZkJjdXJzX2dldF93c3RyXGZSKDNYKQorZ2V0YXR0cnMvXGZCY3Vyc19hdHRyXGZSKDNYKQorZ2V0YmVneC9cZkJjdXJzX2xlZ2FjeVxmUigzWCkqCitnZXRiZWd5L1xmQmN1cnNfbGVnYWN5XGZSKDNYKSoKK2dldGJlZ3l4L1xmQmN1cnNfZ2V0eXhcZlIoM1gpCitnZXRia2dkL1xmQmN1cnNfYmtnZFxmUigzWCkKK2dldGJrZ3JuZC9cZkJjdXJzX2JrZ3JuZFxmUigzWCkKK2dldGNjaGFyL1xmQmN1cnNfZ2V0Y2NoYXJcZlIoM1gpCitnZXRjaC9cZkJjdXJzX2dldGNoXGZSKDNYKQorZ2V0Y3VyeC9cZkJjdXJzX2xlZ2FjeVxmUigzWCkqCitnZXRjdXJ5L1xmQmN1cnNfbGVnYWN5XGZSKDNYKSoKK2dldG1heHgvXGZCY3Vyc19sZWdhY3lcZlIoM1gpKgorZ2V0bWF4eS9cZkJjdXJzX2xlZ2FjeVxmUigzWCkqCitnZXRtYXh5eC9cZkJjdXJzX2dldHl4XGZSKDNYKQorZ2V0bW91c2UvXGZCY3Vyc19tb3VzZVxmUigzWCkqCitnZXRuX3dzdHIvXGZCY3Vyc19nZXRfd3N0clxmUigzWCkKK2dldG5zdHIvXGZCY3Vyc19nZXRzdHJcZlIoM1gpCitnZXRwYXJ4L1xmQmN1cnNfbGVnYWN5XGZSKDNYKSoKK2dldHBhcnkvXGZCY3Vyc19sZWdhY3lcZlIoM1gpKgorZ2V0cGFyeXgvXGZCY3Vyc19nZXR5eFxmUigzWCkKK2dldHN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK2dldHN5eC9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK2dldHdpbi9cZkJjdXJzX3V0aWxcZlIoM1gpCitnZXR5eC9cZkJjdXJzX2dldHl4XGZSKDNYKQoraGFsZmRlbGF5L1xmQmN1cnNfaW5vcHRzXGZSKDNYKQoraGFzX2NvbG9ycy9cZkJjdXJzX2NvbG9yXGZSKDNYKQoraGFzX2ljL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQoraGFzX2lsL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQoraGFzX2tleS9cZkJjdXJzX2dldGNoXGZSKDNYKSoKK2hsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQoraGxpbmVfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK2lkY29rL1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKK2lkbG9rL1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKK2ltbWVkb2svXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQoraW5fd2NoL1xmQmN1cnNfaW5fd2NoXGZSKDNYKQoraW5fd2NobnN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK2luX3djaHN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK2luY2gvXGZCY3Vyc19pbmNoXGZSKDNYKQoraW5jaG5zdHIvXGZCY3Vyc19pbmNoc3RyXGZSKDNYKQoraW5jaHN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCitpbml0X2NvbG9yL1xmQmN1cnNfY29sb3JcZlIoM1gpCitpbml0X3BhaXIvXGZCY3Vyc19jb2xvclxmUigzWCkKK2luaXRzY3IvXGZCY3Vyc19pbml0c2NyXGZSKDNYKQoraW5uc3RyL1xmQmN1cnNfaW5zdHJcZlIoM1gpCitpbm53c3RyL1xmQmN1cnNfaW53c3RyXGZSKDNYKQoraW5zX253c3RyL1xmQmN1cnNfaW5zX3dzdHJcZlIoM1gpCitpbnNfd2NoL1xmQmN1cnNfaW5zX3djaFxmUigzWCkKK2luc193c3RyL1xmQmN1cnNfaW5zX3dzdHJcZlIoM1gpCitpbnNjaC9cZkJjdXJzX2luc2NoXGZSKDNYKQoraW5zZGVsbG4vXGZCY3Vyc19kZWxldGVsblxmUigzWCkKK2luc2VydGxuL1xmQmN1cnNfZGVsZXRlbG5cZlIoM1gpCitpbnNuc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQoraW5zc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQoraW5zdHIvXGZCY3Vyc19pbnN0clxmUigzWCkKK2ludHJmbHVzaC9cZkJjdXJzX2lub3B0c1xmUigzWCkKK2lud3N0ci9cZkJjdXJzX2lud3N0clxmUigzWCkKK2lzX2NsZWFyZWQvXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfaWRjb2svXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfaWRsb2svXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfaW1tZWRvay9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19rZXlwYWQvXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfbGVhdmVvay9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19saW5ldG91Y2hlZC9cZkJjdXJzX3RvdWNoXGZSKDNYKQoraXNfbm9kZWxheS9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19ub3RpbWVvdXQvXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfc2Nyb2xsb2svXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfc3luY29rL1xmQmN1cnNfb3BhcXVlXGZSKDNYKSoKK2lzX3Rlcm1fcmVzaXplZC9cZkJyZXNpemV0ZXJtXGZSKDNYKSoKK2lzX3dpbnRvdWNoZWQvXGZCY3Vyc190b3VjaFxmUigzWCkKK2lzZW5kd2luL1xmQmN1cnNfaW5pdHNjclxmUigzWCkKK2tleV9kZWZpbmVkL1xmQmtleV9kZWZpbmVkXGZSKDNYKSoKK2tleV9uYW1lL1xmQmN1cnNfdXRpbFxmUigzWCkKK2tleWJvdW5kL1xmQmtleWJvdW5kXGZSKDNYKSoKK2tleW5hbWUvXGZCY3Vyc191dGlsXGZSKDNYKQora2V5b2svXGZCa2V5b2tcZlIoM1gpKgora2V5cGFkL1xmQmN1cnNfaW5vcHRzXGZSKDNYKQora2lsbGNoYXIvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCitraWxsd2NoYXIvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCitsZWF2ZW9rL1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKK2xvbmduYW1lL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQorbWNwcmludC9cZkJjdXJzX3ByaW50XGZSKDNYKSoKK21ldGEvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCittb3VzZV90cmFmby9cZkJjdXJzX21vdXNlXGZSKDNYKSoKK21vdXNlaW50ZXJ2YWwvXGZCY3Vyc19tb3VzZVxmUigzWCkqCittb3VzZW1hc2svXGZCY3Vyc19tb3VzZVxmUigzWCkqCittb3ZlL1xmQmN1cnNfbW92ZVxmUigzWCkKK212YWRkX3djaC9cZkJjdXJzX2FkZF93Y2hcZlIoM1gpCittdmFkZF93Y2huc3RyL1xmQmN1cnNfYWRkX3djaHN0clxmUigzWCkKK212YWRkX3djaHN0ci9cZkJjdXJzX2FkZF93Y2hzdHJcZlIoM1gpCittdmFkZGNoL1xmQmN1cnNfYWRkY2hcZlIoM1gpCittdmFkZGNobnN0ci9cZkJjdXJzX2FkZGNoc3RyXGZSKDNYKQorbXZhZGRjaHN0ci9cZkJjdXJzX2FkZGNoc3RyXGZSKDNYKQorbXZhZGRuc3RyL1xmQmN1cnNfYWRkc3RyXGZSKDNYKQorbXZhZGRud3N0ci9cZkJjdXJzX2FkZHdzdHJcZlIoM1gpCittdmFkZHN0ci9cZkJjdXJzX2FkZHN0clxmUigzWCkKK212YWRkd3N0ci9cZkJjdXJzX2FkZHdzdHJcZlIoM1gpCittdmNoZ2F0L1xmQmN1cnNfYXR0clxmUigzWCkKK212Y3VyL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCittdmRlbGNoL1xmQmN1cnNfZGVsY2hcZlIoM1gpCittdmRlcndpbi9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK212Z2V0X3djaC9cZkJjdXJzX2dldF93Y2hcZlIoM1gpCittdmdldF93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCittdmdldGNoL1xmQmN1cnNfZ2V0Y2hcZlIoM1gpCittdmdldG5fd3N0ci9cZkJjdXJzX2dldF93c3RyXGZSKDNYKQorbXZnZXRuc3RyL1xmQmN1cnNfZ2V0c3RyXGZSKDNYKQorbXZnZXRzdHIvXGZCY3Vyc19nZXRzdHJcZlIoM1gpCittdmhsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQorbXZobGluZV9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQorbXZpbl93Y2gvXGZCY3Vyc19pbl93Y2hcZlIoM1gpCittdmluX3djaG5zdHIvXGZCY3Vyc19pbl93Y2hzdHJcZlIoM1gpCittdmluX3djaHN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK212aW5jaC9cZkJjdXJzX2luY2hcZlIoM1gpCittdmluY2huc3RyL1xmQmN1cnNfaW5jaHN0clxmUigzWCkKK212aW5jaHN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCittdmlubnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQorbXZpbm53c3RyL1xmQmN1cnNfaW53c3RyXGZSKDNYKQorbXZpbnNfbndzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK212aW5zX3djaC9cZkJjdXJzX2luc193Y2hcZlIoM1gpCittdmluc193c3RyL1xmQmN1cnNfaW5zX3dzdHJcZlIoM1gpCittdmluc2NoL1xmQmN1cnNfaW5zY2hcZlIoM1gpCittdmluc25zdHIvXGZCY3Vyc19pbnNzdHJcZlIoM1gpCittdmluc3N0ci9cZkJjdXJzX2luc3N0clxmUigzWCkKK212aW5zdHIvXGZCY3Vyc19pbnN0clxmUigzWCkKK212aW53c3RyL1xmQmN1cnNfaW53c3RyXGZSKDNYKQorbXZwcmludHcvXGZCY3Vyc19wcmludHdcZlIoM1gpCittdnNjYW53L1xmQmN1cnNfc2NhbndcZlIoM1gpCittdnZsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQorbXZ2bGluZV9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQorbXZ3YWRkX3djaC9cZkJjdXJzX2FkZF93Y2hcZlIoM1gpCittdndhZGRfd2NobnN0ci9cZkJjdXJzX2FkZF93Y2hzdHJcZlIoM1gpCittdndhZGRfd2Noc3RyL1xmQmN1cnNfYWRkX3djaHN0clxmUigzWCkKK212d2FkZGNoL1xmQmN1cnNfYWRkY2hcZlIoM1gpCittdndhZGRjaG5zdHIvXGZCY3Vyc19hZGRjaHN0clxmUigzWCkKK212d2FkZGNoc3RyL1xmQmN1cnNfYWRkY2hzdHJcZlIoM1gpCittdndhZGRuc3RyL1xmQmN1cnNfYWRkc3RyXGZSKDNYKQorbXZ3YWRkbndzdHIvXGZCY3Vyc19hZGR3c3RyXGZSKDNYKQorbXZ3YWRkc3RyL1xmQmN1cnNfYWRkc3RyXGZSKDNYKQorbXZ3YWRkd3N0ci9cZkJjdXJzX2FkZHdzdHJcZlIoM1gpCittdndjaGdhdC9cZkJjdXJzX2F0dHJcZlIoM1gpCittdndkZWxjaC9cZkJjdXJzX2RlbGNoXGZSKDNYKQorbXZ3Z2V0X3djaC9cZkJjdXJzX2dldF93Y2hcZlIoM1gpCittdndnZXRfd3N0ci9cZkJjdXJzX2dldF93c3RyXGZSKDNYKQorbXZ3Z2V0Y2gvXGZCY3Vyc19nZXRjaFxmUigzWCkKK212d2dldG5fd3N0ci9cZkJjdXJzX2dldF93c3RyXGZSKDNYKQorbXZ3Z2V0bnN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK212d2dldHN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK212d2hsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQorbXZ3aGxpbmVfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK212d2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorbXZ3aW5fd2NoL1xmQmN1cnNfaW5fd2NoXGZSKDNYKQorbXZ3aW5fd2NobnN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK212d2luX3djaHN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK212d2luY2gvXGZCY3Vyc19pbmNoXGZSKDNYKQorbXZ3aW5jaG5zdHIvXGZCY3Vyc19pbmNoc3RyXGZSKDNYKQorbXZ3aW5jaHN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCittdndpbm5zdHIvXGZCY3Vyc19pbnN0clxmUigzWCkKK212d2lubndzdHIvXGZCY3Vyc19pbndzdHJcZlIoM1gpCittdndpbnNfbndzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK212d2luc193Y2gvXGZCY3Vyc19pbnNfd2NoXGZSKDNYKQorbXZ3aW5zX3dzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK212d2luc2NoL1xmQmN1cnNfaW5zY2hcZlIoM1gpCittdndpbnNuc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQorbXZ3aW5zc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQorbXZ3aW5zdHIvXGZCY3Vyc19pbnN0clxmUigzWCkKK212d2lud3N0ci9cZkJjdXJzX2lud3N0clxmUigzWCkKK212d3ByaW50dy9cZkJjdXJzX3ByaW50d1xmUigzWCkKK212d3NjYW53L1xmQmN1cnNfc2NhbndcZlIoM1gpCittdnd2bGluZS9cZkJjdXJzX2JvcmRlclxmUigzWCkKK212d3ZsaW5lX3NldC9cZkJjdXJzX2JvcmRlcl9zZXRcZlIoM1gpCituYXBtcy9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK25ld3BhZC9cZkJjdXJzX3BhZFxmUigzWCkKK25ld3Rlcm0vXGZCY3Vyc19pbml0c2NyXGZSKDNYKQorbmV3d2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorbmwvXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorbm9jYnJlYWsvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitub2RlbGF5L1xmQmN1cnNfaW5vcHRzXGZSKDNYKQorbm9lY2hvL1xmQmN1cnNfaW5vcHRzXGZSKDNYKQorbm9maWx0ZXIvXGZCY3Vyc191dGlsXGZSKDNYKSoKK25vbmwvXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorbm9xaWZsdXNoL1xmQmN1cnNfaW5vcHRzXGZSKDNYKQorbm9yYXcvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitub3RpbWVvdXQvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitvdmVybGF5L1xmQmN1cnNfb3ZlcmxheVxmUigzWCkKK292ZXJ3cml0ZS9cZkJjdXJzX292ZXJsYXlcZlIoM1gpCitwYWlyX2NvbnRlbnQvXGZCY3Vyc19jb2xvclxmUigzWCkKK3BlY2hvY2hhci9cZkJjdXJzX3BhZFxmUigzWCkKK3Bub3V0cmVmcmVzaC9cZkJjdXJzX3BhZFxmUigzWCkKK3ByZWZyZXNoL1xmQmN1cnNfcGFkXGZSKDNYKQorcHJpbnR3L1xmQmN1cnNfcHJpbnR3XGZSKDNYKQorcHV0cC9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQorcHV0d2luL1xmQmN1cnNfdXRpbFxmUigzWCkKK3FpZmx1c2gvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCityYXcvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCityZWRyYXd3aW4vXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQorcmVmcmVzaC9cZkJjdXJzX3JlZnJlc2hcZlIoM1gpCityZXNldF9wcm9nX21vZGUvXGZCY3Vyc19rZXJuZWxcZlIoM1gpCityZXNldF9zaGVsbF9tb2RlL1xmQmN1cnNfa2VybmVsXGZSKDNYKQorcmVzZXR0eS9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK3Jlc2l6ZXRlcm0vXGZCcmVzaXpldGVybVxmUigzWCkqCityZXN0YXJ0dGVybS9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQorcmlwb2ZmbGluZS9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK3NhdmV0dHkvXGZCY3Vyc19rZXJuZWxcZlIoM1gpCitzY2Fudy9cZkJjdXJzX3NjYW53XGZSKDNYKQorc2NyX2R1bXAvXGZCY3Vyc19zY3JfZHVtcFxmUigzWCkKK3Njcl9pbml0L1xmQmN1cnNfc2NyX2R1bXBcZlIoM1gpCitzY3JfcmVzdG9yZS9cZkJjdXJzX3Njcl9kdW1wXGZSKDNYKQorc2NyX3NldC9cZkJjdXJzX3Njcl9kdW1wXGZSKDNYKQorc2NybC9cZkJjdXJzX3Njcm9sbFxmUigzWCkKK3Njcm9sbC9cZkJjdXJzX3Njcm9sbFxmUigzWCkKK3Njcm9sbG9rL1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKK3NldF9jdXJ0ZXJtL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCitzZXRfdGVybS9cZkJjdXJzX2luaXRzY3JcZlIoM1gpCitzZXRjY2hhci9cZkJjdXJzX2dldGNjaGFyXGZSKDNYKQorc2V0c2NycmVnL1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKK3NldHN5eC9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK3NldHRlcm0vXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3NldHVwdGVybS9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQorc2xrX2F0dHIvXGZCY3Vyc19zbGtcZlIoM1gpKgorc2xrX2F0dHJfb2ZmL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX2F0dHJfb24vXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfYXR0cl9zZXQvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfYXR0cm9mZi9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19hdHRyb24vXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfYXR0cnNldC9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19jbGVhci9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19jb2xvci9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19pbml0L1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX2xhYmVsL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX25vdXRyZWZyZXNoL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX3JlZnJlc2gvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfcmVzdG9yZS9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19zZXQvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfdG91Y2gvXGZCY3Vyc19zbGtcZlIoM1gpCitzdGFuZGVuZC9cZkJjdXJzX2F0dHJcZlIoM1gpCitzdGFuZG91dC9cZkJjdXJzX2F0dHJcZlIoM1gpCitzdGFydF9jb2xvci9cZkJjdXJzX2NvbG9yXGZSKDNYKQorc3VicGFkL1xmQmN1cnNfcGFkXGZSKDNYKQorc3Vid2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorc3luY29rL1xmQmN1cnNfd2luZG93XGZSKDNYKQordGVybV9hdHRycy9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK3Rlcm1hdHRycy9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK3Rlcm1uYW1lL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQordGdldGVudC9cZkJjdXJzX3Rlcm1jYXBcZlIoM1gpCit0Z2V0ZmxhZy9cZkJjdXJzX3Rlcm1jYXBcZlIoM1gpCit0Z2V0bnVtL1xmQmN1cnNfdGVybWNhcFxmUigzWCkKK3RnZXRzdHIvXGZCY3Vyc190ZXJtY2FwXGZSKDNYKQordGdvdG8vXGZCY3Vyc190ZXJtY2FwXGZSKDNYKQordGlnZXRmbGFnL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCit0aWdldG51bS9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQordGlnZXRzdHIvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3RpbWVvdXQvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCit0b3VjaGxpbmUvXGZCY3Vyc190b3VjaFxmUigzWCkKK3RvdWNod2luL1xmQmN1cnNfdG91Y2hcZlIoM1gpCit0cGFybS9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQordHB1dHMvXGZCY3Vyc190ZXJtY2FwXGZSKDNYKQordHB1dHMvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3RyYWNlL1xmQmN1cnNfdHJhY2VcZlIoM1gpKgordHlwZWFoZWFkL1xmQmN1cnNfaW5vcHRzXGZSKDNYKQordW5jdHJsL1xmQmN1cnNfdXRpbFxmUigzWCkKK3VuZ2V0X3djaC9cZkJjdXJzX2dldF93Y2hcZlIoM1gpCit1bmdldGNoL1xmQmN1cnNfZ2V0Y2hcZlIoM1gpCit1bmdldG1vdXNlL1xmQmN1cnNfbW91c2VcZlIoM1gpKgordW50b3VjaHdpbi9cZkJjdXJzX3RvdWNoXGZSKDNYKQordXNlX2RlZmF1bHRfY29sb3JzL1xmQmRlZmF1bHRfY29sb3JzXGZSKDNYKSoKK3VzZV9lbnYvXGZCY3Vyc191dGlsXGZSKDNYKQordXNlX2V4dGVuZGVkX25hbWVzL1xmQmN1cnNfZXh0ZW5kXGZSKDNYKSoKK3VzZV9sZWdhY3lfY29kaW5nL1xmQmxlZ2FjeV9jb2RpbmdcZlIoM1gpKgordmlkX2F0dHIvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3ZpZF9wdXRzL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCit2aWRhdHRyL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCit2aWRwdXRzL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCit2bGluZS9cZkJjdXJzX2JvcmRlclxmUigzWCkKK3ZsaW5lX3NldC9cZkJjdXJzX2JvcmRlcl9zZXRcZlIoM1gpCit2d19wcmludHcvXGZCY3Vyc19wcmludHdcZlIoM1gpCit2d19zY2Fudy9cZkJjdXJzX3NjYW53XGZSKDNYKQordndwcmludHcvXGZCY3Vyc19wcmludHdcZlIoM1gpCit2d3NjYW53L1xmQmN1cnNfc2NhbndcZlIoM1gpCit3YWRkX3djaC9cZkJjdXJzX2FkZF93Y2hcZlIoM1gpCit3YWRkX3djaG5zdHIvXGZCY3Vyc19hZGRfd2Noc3RyXGZSKDNYKQord2FkZF93Y2hzdHIvXGZCY3Vyc19hZGRfd2Noc3RyXGZSKDNYKQord2FkZGNoL1xmQmN1cnNfYWRkY2hcZlIoM1gpCit3YWRkY2huc3RyL1xmQmN1cnNfYWRkY2hzdHJcZlIoM1gpCit3YWRkY2hzdHIvXGZCY3Vyc19hZGRjaHN0clxmUigzWCkKK3dhZGRuc3RyL1xmQmN1cnNfYWRkc3RyXGZSKDNYKQord2FkZG53c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK3dhZGRzdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCit3YWRkd3N0ci9cZkJjdXJzX2FkZHdzdHJcZlIoM1gpCit3YXR0cl9nZXQvXGZCY3Vyc19hdHRyXGZSKDNYKQord2F0dHJfb2ZmL1xmQmN1cnNfYXR0clxmUigzWCkKK3dhdHRyX29uL1xmQmN1cnNfYXR0clxmUigzWCkKK3dhdHRyX3NldC9cZkJjdXJzX2F0dHJcZlIoM1gpCit3YXR0cm9mZi9cZkJjdXJzX2F0dHJcZlIoM1gpCit3YXR0cm9uL1xmQmN1cnNfYXR0clxmUigzWCkKK3dhdHRyc2V0L1xmQmN1cnNfYXR0clxmUigzWCkKK3dia2dkL1xmQmN1cnNfYmtnZFxmUigzWCkKK3dia2dkc2V0L1xmQmN1cnNfYmtnZFxmUigzWCkKK3dia2dybmQvXGZCY3Vyc19ia2dybmRcZlIoM1gpCit3Ymtncm5kc2V0L1xmQmN1cnNfYmtncm5kXGZSKDNYKQord2JvcmRlci9cZkJjdXJzX2JvcmRlclxmUigzWCkKK3dib3JkZXJfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK3djaGdhdC9cZkJjdXJzX2F0dHJcZlIoM1gpCit3Y2xlYXIvXGZCY3Vyc19jbGVhclxmUigzWCkKK3djbHJ0b2JvdC9cZkJjdXJzX2NsZWFyXGZSKDNYKQord2NscnRvZW9sL1xmQmN1cnNfY2xlYXJcZlIoM1gpCit3Y29sb3Jfc2V0L1xmQmN1cnNfYXR0clxmUigzWCkKK3djdXJzeW5jdXAvXGZCY3Vyc193aW5kb3dcZlIoM1gpCit3ZGVsY2gvXGZCY3Vyc19kZWxjaFxmUigzWCkKK3dkZWxldGVsbi9cZkJjdXJzX2RlbGV0ZWxuXGZSKDNYKQord2VjaG9fd2NoYXIvXGZCY3Vyc19hZGRfd2NoXGZSKDNYKQord2VjaG9jaGFyL1xmQmN1cnNfYWRkY2hcZlIoM1gpCit3ZW5jbG9zZS9cZkJjdXJzX21vdXNlXGZSKDNYKSoKK3dlcmFzZS9cZkJjdXJzX2NsZWFyXGZSKDNYKQord2dldF93Y2gvXGZCY3Vyc19nZXRfd2NoXGZSKDNYKQord2dldF93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCit3Z2V0Ymtncm5kL1xmQmN1cnNfYmtncm5kXGZSKDNYKQord2dldGNoL1xmQmN1cnNfZ2V0Y2hcZlIoM1gpCit3Z2V0bl93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCit3Z2V0bnN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK3dnZXRzdHIvXGZCY3Vyc19nZXRzdHJcZlIoM1gpCit3aGxpbmUvXGZCY3Vyc19ib3JkZXJcZlIoM1gpCit3aGxpbmVfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK3dpbl93Y2gvXGZCY3Vyc19pbl93Y2hcZlIoM1gpCit3aW5fd2NobnN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK3dpbl93Y2hzdHIvXGZCY3Vyc19pbl93Y2hzdHJcZlIoM1gpCit3aW5jaC9cZkJjdXJzX2luY2hcZlIoM1gpCit3aW5jaG5zdHIvXGZCY3Vyc19pbmNoc3RyXGZSKDNYKQord2luY2hzdHIvXGZCY3Vyc19pbmNoc3RyXGZSKDNYKQord2lubnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQord2lubndzdHIvXGZCY3Vyc19pbndzdHJcZlIoM1gpCit3aW5zX253c3RyL1xmQmN1cnNfaW5zX3dzdHJcZlIoM1gpCit3aW5zX3djaC9cZkJjdXJzX2luc193Y2hcZlIoM1gpCit3aW5zX3dzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK3dpbnNjaC9cZkJjdXJzX2luc2NoXGZSKDNYKQord2luc2RlbGxuL1xmQmN1cnNfZGVsZXRlbG5cZlIoM1gpCit3aW5zZXJ0bG4vXGZCY3Vyc19kZWxldGVsblxmUigzWCkKK3dpbnNuc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQord2luc3N0ci9cZkJjdXJzX2luc3N0clxmUigzWCkKK3dpbnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQord2lud3N0ci9cZkJjdXJzX2lud3N0clxmUigzWCkKK3dtb3VzZV90cmFmby9cZkJjdXJzX21vdXNlXGZSKDNYKSoKK3dtb3ZlL1xmQmN1cnNfbW92ZVxmUigzWCkKK3dub3V0cmVmcmVzaC9cZkJjdXJzX3JlZnJlc2hcZlIoM1gpCit3cHJpbnR3L1xmQmN1cnNfcHJpbnR3XGZSKDNYKQord3JlZHJhd2xuL1xmQmN1cnNfcmVmcmVzaFxmUigzWCkKK3dyZWZyZXNoL1xmQmN1cnNfcmVmcmVzaFxmUigzWCkKK3dyZXNpemUvXGZCd3Jlc2l6ZVxmUigzWCkqCit3c2NhbncvXGZCY3Vyc19zY2Fud1xmUigzWCkKK3dzY3JsL1xmQmN1cnNfc2Nyb2xsXGZSKDNYKQord3NldHNjcnJlZy9cZkJjdXJzX291dG9wdHNcZlIoM1gpCit3c3RhbmRlbmQvXGZCY3Vyc19hdHRyXGZSKDNYKQord3N0YW5kb3V0L1xmQmN1cnNfYXR0clxmUigzWCkKK3dzeW5jZG93bi9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK3dzeW5jdXAvXGZCY3Vyc193aW5kb3dcZlIoM1gpCit3dGltZW91dC9cZkJjdXJzX2lub3B0c1xmUigzWCkKK3d0b3VjaGxuL1xmQmN1cnNfdG91Y2hcZlIoM1gpCit3dW5jdHJsL1xmQmN1cnNfdXRpbFxmUigzWCkKK3d2bGluZS9cZkJjdXJzX2JvcmRlclxmUigzWCkKK3d2bGluZV9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQorLlRFCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBhbgoraW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzCitvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHJvdXRpbmUgZGVzY3JpcHRpb25zLgorLlBQCitBbGwgbWFjcm9zIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIFxmQndcZlIgdmVyc2lvbiwgZXhjZXB0IFxmQnNldHNjcnJlZ1xmUiwKK1xmQndzZXRzY3JyZWdcZlIsIFxmQmdldHl4XGZSLCBcZkJnZXRiZWd5eFxmUiwgYW5kIFxmQmdldG1heHl4XGZSLgorVGhlIHJldHVybiB2YWx1ZXMgb2YgXGZCc2V0c2NycmVnXGZSLCBcZkJ3c2V0c2NycmVnXGZSLCBcZkJnZXR5eFxmUiwgXGZCZ2V0YmVneXhcZlIsIGFuZAorXGZCZ2V0bWF4eXhcZlIgYXJlIHVuZGVmaW5lZCAoaS5lLiwgdGhlc2Ugc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZQorcmlnaHQtaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50cykuCisuUFAKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLgorLlNIIEVOVklST05NRU5UCitUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHN5bWJvbHMgYXJlIHVzZWZ1bCBmb3IgY3VzdG9taXppbmcgdGhlCitydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkuCitUaGUgbW9zdCBpbXBvcnRhbnQgb25lcyBoYXZlIGJlZW4gYWxyZWFkeSBkaXNjdXNzZWQgaW4gZGV0YWlsLgorLlRQIDUKK0JBVURSQVRFCitUaGUgZGVidWdnaW5nIGxpYnJhcnkgY2hlY2tzIHRoaXMgZW52aXJvbm1lbnQgc3ltYm9sIHdoZW4gdGhlIGFwcGxpY2F0aW9uCitoYXMgcmVkaXJlY3RlZCBvdXRwdXQgdG8gYSBmaWxlLgorVGhlIHN5bWJvbCdzIG51bWVyaWMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGJhdWRyYXRlLgorSWYgbm8gdmFsdWUgaXMgZm91bmQsIFxmQm5jdXJzZXNcZlIgdXNlcyA5NjAwLgorVGhpcyBhbGxvd3MgdGVzdGVycyB0byBjb25zdHJ1Y3QgcmVwZWF0YWJsZSB0ZXN0LWNhc2VzCit0aGF0IHRha2UgaW50byBhY2NvdW50IGNvc3RzIHRoYXQgZGVwZW5kIG9uIGJhdWRyYXRlLgorLlRQIDUKK0NDCitXaGVuIHNldCwgY2hhbmdlIG9jY3VycmVuY2VzIG9mIHRoZSBjb21tYW5kX2NoYXJhY3RlcgorKGkuZS4sIHRoZSBcZkJjbWRjaFxmUCBjYXBhYmlsaXR5KQorb2YgdGhlIGxvYWRlZCB0ZXJtaW5mbyBlbnRyaWVzIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHN5bWJvbC4KK1ZlcnkgZmV3IHRlcm1pbmZvIGVudHJpZXMgcHJvdmlkZSB0aGlzIGZlYXR1cmUuCisuVFAgNQorQ09MVU1OUworU3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIHNjcmVlbiBpbiBjaGFyYWN0ZXJzLgorQXBwbGljYXRpb25zIHJ1bm5pbmcgaW4gYSB3aW5kb3dpbmcgZW52aXJvbm1lbnQgdXN1YWxseSBhcmUgYWJsZSB0bworb2J0YWluIHRoZSB3aWR0aCBvZiB0aGUgd2luZG93IGluIHdoaWNoIHRoZXkgYXJlIGV4ZWN1dGluZy4KK0lmIG5laXRoZXIgdGhlIFxmQkNPTFVNTlNcZlAgdmFsdWUgbm9yIHRoZSB0ZXJtaW5hbCdzIHNjcmVlbiBzaXplIGlzIGF2YWlsYWJsZSwKK1xmQm5jdXJzZXNcZlIgdXNlcyB0aGUgc2l6ZSB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZQorKGkuZS4sIHRoZSBcZkJjb2xzXGZSIGNhcGFiaWxpdHkpLgorLklQCitJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHVzZSBhIGNvcnJlY3Qgc2l6ZSBmb3IgdGhlIHNjcmVlbi4KK1RoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gbWF5IGJlCitydW5uaW5nIG9uIGEgaG9zdCB3aGljaCBkb2VzIG5vdCBob25vciBOQVdTIChOZWdvdGlhdGlvbnMgQWJvdXQgV2luZG93CitTaXplKSwgb3IgYmVjYXVzZSB5b3UgYXJlIHRlbXBvcmFyaWx5IHJ1bm5pbmcgYXMgYW5vdGhlciB1c2VyLgorSG93ZXZlciwgc2V0dGluZyBcZkJDT0xVTU5TXGZQIGFuZC9vciBcZkJMSU5FU1xmUCBvdmVycmlkZXMgdGhlIGxpYnJhcnkncwordXNlIG9mIHRoZSBzY3JlZW4gc2l6ZSBvYnRhaW5lZCBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorLklQCitFaXRoZXIgXGZCQ09MVU1OU1xmUCBvciBcZkJMSU5FU1xmUCBzeW1ib2xzIG1heSBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseS4KK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCB0byBjaXJjdW12ZW50IGxlZ2FjeSBtaXNmZWF0dXJlcyBvZiB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMsCitlLmcuLCB4dGVybSB3aGljaCBjb21tb25seSBzcGVjaWZpZXMgYSA2NSBsaW5lIHNjcmVlbi4KK0ZvciBiZXN0IHJlc3VsdHMsIFxmQmxpbmVzXGZSIGFuZCBcZkJjb2xzXGZSIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGluCithIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGZvciB0ZXJtaW5hbHMgd2hpY2ggYXJlIHJ1biBhcyBlbXVsYXRpb25zLgorLklQCitVc2UgdGhlIFxmQnVzZV9lbnZcZlIgZnVuY3Rpb24gdG8gZGlzYWJsZSBhbGwgdXNlIG9mIGV4dGVybmFsIGVudmlyb25tZW50CisoaW5jbHVkaW5nIHN5c3RlbSBjYWxscykgdG8gZGV0ZXJtaW5lIHRoZSBzY3JlZW4gc2l6ZS4KKy5UUCA1CitFU0NERUxBWQorU3BlY2lmaWVzIHRoZSB0b3RhbCB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIGZvciB3aGljaCBuY3Vyc2VzIHdpbGwKK2F3YWl0IGEgY2hhcmFjdGVyIHNlcXVlbmNlLCBlLmcuLCBhIGZ1bmN0aW9uIGtleS4KK1RoZSBkZWZhdWx0IHZhbHVlLCAxMDAwIG1pbGxpc2Vjb25kcywgaXMgZW5vdWdoIGZvciBtb3N0IHVzZXMuCitIb3dldmVyLCBpdCBpcyBtYWRlIGEgdmFyaWFibGUgdG8gYWNjb21tb2RhdGUgdW51c3VhbCBhcHBsaWNhdGlvbnMuCisuSVAKK1RoZSBtb3N0IGNvbW1vbiBpbnN0YW5jZSB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gY2hhbmdlIHRoaXMgdmFsdWUKK2lzIHRvIHdvcmsgd2l0aCBzbG93IGhvc3RzLCBlLmcuLCBydW5uaW5nIG9uIGEgbmV0d29yay4KK0lmIHRoZSBob3N0IGNhbm5vdCByZWFkIGNoYXJhY3RlcnMgcmFwaWRseSBlbm91Z2gsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZQorZWZmZWN0IGFzIGlmIHRoZSB0ZXJtaW5hbCBkaWQgbm90IHNlbmQgY2hhcmFjdGVycyByYXBpZGx5IGVub3VnaC4KK1RoZSBsaWJyYXJ5IHdpbGwgc3RpbGwgc2VlIGEgdGltZW91dC4KKy5JUAorTm90ZSB0aGF0IHh0ZXJtIG1vdXNlIGV2ZW50cyBhcmUgYnVpbHQgdXAgZnJvbSBjaGFyYWN0ZXIgc2VxdWVuY2VzCityZWNlaXZlZCBmcm9tIHRoZSB4dGVybS4KK0lmIHlvdXIgYXBwbGljYXRpb24gbWFrZXMgaGVhdnkgdXNlIG9mIG11bHRpcGxlLWNsaWNraW5nLCB5b3UgbWF5Cit3aXNoIHRvIGxlbmd0aGVuIHRoaXMgZGVmYXVsdCB2YWx1ZSBiZWNhdXNlIHRoZSB0aW1lb3V0IGFwcGxpZXMKK3RvIHRoZSBjb21wb3NlZCBtdWx0aS1jbGljayBldmVudCBhcyB3ZWxsIGFzIHRoZSBpbmRpdmlkdWFsIGNsaWNrcy4KKy5JUAorSW4gYWRkaXRpb24gdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLAordGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIGdsb2JhbCB2YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUuCitQb3J0YWJsZSBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCByZWx5IHVwb24gdGhlIHByZXNlbmNlIG9mIEVTQ0RFTEFZCitpbiBlaXRoZXIgZm9ybSwKK2J1dCBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSByYXRoZXIgdGhhbiB0aGUgZ2xvYmFsIHZhcmlhYmxlCitkb2VzIG5vdCBjcmVhdGUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgYW4gYXBwbGljYXRpb24uCisuVFAgNQorSE9NRQorVGVsbHMgXGZCbmN1cnNlc1xmUiB3aGVyZSB5b3VyIGhvbWUgZGlyZWN0b3J5IGlzLgorVGhhdCBpcyB3aGVyZSBpdCBtYXkgcmVhZCBhbmQgd3JpdGUgYXV4aWxpYXJ5IHRlcm1pbmFsIGRlc2NyaXB0aW9uczoKKy5JUAorJEhPTUUvLnRlcm1jYXAKKy5icgorJEhPTUUvLnRlcm1pbmZvCisuVFAgNQorTElORVMKK0xpa2UgQ09MVU1OUywgc3BlY2lmeSB0aGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4gaW4gY2hhcmFjdGVycy4KK1NlZSBDT0xVTU5TIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorLlRQIDUKK01PVVNFX0JVVFRPTlNfMTIzCitUaGlzIGFwcGxpZXMgb25seSB0byB0aGUgT1MvMiBFTVggcG9ydC4KK0l0IHNwZWNpZmllcyB0aGUgb3JkZXIgb2YgYnV0dG9ucyBvbiB0aGUgbW91c2UuCitPUy8yIG51bWJlcnMgYSAzLWJ1dHRvbiBtb3VzZSBpbmNvbnNpc3RlbnRseSBmcm9tIG90aGVyCitwbGF0Zm9ybXM6Cisuc3AKKzEgPSBsZWZ0CisuYnIKKzIgPSByaWdodAorLmJyCiszID0gbWlkZGxlLgorLnNwCitUaGlzIHN5bWJvbCBsZXRzIHlvdSBjdXN0b21pemUgdGhlIG1vdXNlLgorVGhlIHN5bWJvbCBtdXN0IGJlIHRocmVlIG51bWVyaWMgZGlnaXRzIDEtMyBpbiBhbnkgb3JkZXIsIGUuZy4sIDEyMyBvciAzMjEuCitJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCBcZkJuY3Vyc2VzXGZSIHVzZXMgMTMyLgorLlRQIDUKK05DVVJTRVNfQVNTVU1FRF9DT0xPUlMKK092ZXJyaWRlIHRoZSBjb21waWxlZC1pbiBhc3N1bXB0aW9uIHRoYXQgdGhlCit0ZXJtaW5hbCdzIGRlZmF1bHQgY29sb3JzIGFyZSB3aGl0ZS1vbi1ibGFjaworKHNlZSBcZkJkZWZhdWx0X2NvbG9yc1xmUigzWCkpLgorWW91IG1heSBzZXQgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3IgdmFsdWVzIHdpdGggdGhpcyBlbnZpcm9ubWVudAordmFyaWFibGUgYnkgcHJvdmluZyBhIDItZWxlbWVudCBsaXN0OiBmb3JlZ3JvdW5kLGJhY2tncm91bmQuCitGb3IgZXhhbXBsZSwgdG8gdGVsbCBuY3Vyc2VzIHRvIG5vdCBhc3N1bWUgYW55dGhpbmcKK2Fib3V0IHRoZSBjb2xvcnMsIHNldCB0aGlzIHRvICItMSwtMSIuCitUbyBtYWtlIGl0IGdyZWVuLW9uLWJsYWNrLCBzZXQgaXQgdG8gIjIsMCIuCitBbnkgcG9zaXRpdmUgdmFsdWUgZnJvbSB6ZXJvIHRvIHRoZSB0ZXJtaW5mbyBcZkJtYXhfY29sb3JzXGZSIHZhbHVlIGlzIGFsbG93ZWQuCisuVFAgNQorTkNVUlNFU19HUE1fVEVSTVMKK1RoaXMgYXBwbGllcyBvbmx5IHRvIG5jdXJzZXMgY29uZmlndXJlZCB0byB1c2UgdGhlIEdQTSBpbnRlcmZhY2UuCisuSVAKK0lmIHByZXNlbnQsCit0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHRlcm1pbmFsIG5hbWVzCithZ2FpbnN0IHdoaWNoIHRoZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG1hdGNoZWQuCitTZXR0aW5nIGl0IHRvIGFuIGVtcHR5IHZhbHVlIGRpc2FibGVzIHRoZSBHUE0gaW50ZXJmYWNlOwordXNpbmcgdGhlIGJ1aWx0LWluIHN1cHBvcnQgZm9yIHh0ZXJtLCBldGMuCisuSVAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhYnNlbnQsCituY3Vyc2VzIHdpbGwgYXR0ZW1wdCB0byBvcGVuIEdQTSBpZiBURVJNIGNvbnRhaW5zICJsaW51eCIuCisuVFAgNQorTkNVUlNFU19OT19IQVJEX1RBQlMKK1xmQk5jdXJzZXNcZlAgbWF5IHVzZSB0YWJzIGFzIHBhcnQgb2YgdGhlIGN1cnNvciBtb3ZlbWVudCBvcHRpbWl6YXRpb24uCitJbiBzb21lIGNhc2VzLAoreW91ciB0ZXJtaW5hbCBkcml2ZXIgbWF5IG5vdCBoYW5kbGUgdGhlc2UgcHJvcGVybHkuCitTZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBkaXNhYmxlIHRoZSBmZWF0dXJlLgorWW91IGNhbiBhbHNvIGFkanVzdCB5b3VyIFxmQnN0dHlcZlAgc2V0dGluZ3MgdG8gYXZvaWQgdGhlIHByb2JsZW0uCisuVFAgNQorTkNVUlNFU19OT19NQUdJQ19DT09LSUVTCitTb21lIHRlcm1pbmFscyB1c2UgYSBtYWdpYy1jb29raWUgZmVhdHVyZSB3aGljaCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nCit0byBtYWtlIGhpZ2hsaWdodGluZyBhbmQgb3RoZXIgdmlkZW8gYXR0cmlidXRlcyBkaXNwbGF5IHByb3Blcmx5LgorWW91IGNhbiBzdXBwcmVzcyB0aGUgaGlnaGxpZ2h0aW5nIGVudGlyZWx5IGZvciB0aGVzZSB0ZXJtaW5hbHMgYnkKK3NldHRpbmcgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKy5UUCA1CitOQ1VSU0VTX05PX1BBRERJTkcKK01vc3Qgb2YgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyBpbiB0aGUgdGVybWluZm8gZGF0YWJhc2UgYXJlIHdyaXR0ZW4KK2ZvciByZWFsICJoYXJkd2FyZSIgdGVybWluYWxzLgorTWFueSBwZW9wbGUgdXNlIHRlcm1pbmFsIGVtdWxhdG9ycword2hpY2ggcnVuIGluIGEgd2luZG93aW5nIGVudmlyb25tZW50IGFuZCB1c2UgY3Vyc2VzLWJhc2VkIGFwcGxpY2F0aW9ucy4KK1Rlcm1pbmFsIGVtdWxhdG9ycyBjYW4gZHVwbGljYXRlCithbGwgb2YgdGhlIGltcG9ydGFudCBhc3BlY3RzIG9mIGEgaGFyZHdhcmUgdGVybWluYWwsIGJ1dCB0aGV5IGRvIG5vdAoraGF2ZSB0aGUgc2FtZSBsaW1pdGF0aW9ucy4KK1RoZSBjaGllZiBsaW1pdGF0aW9uIG9mIGEgaGFyZHdhcmUgdGVybWluYWwgZnJvbSB0aGUgc3RhbmRwb2ludAorb2YgeW91ciBhcHBsaWNhdGlvbiBpcyB0aGUgbWFuYWdlbWVudCBvZiBkYXRhZmxvdywgaS5lLiwgdGltaW5nLgorVW5sZXNzIGEgaGFyZHdhcmUgdGVybWluYWwgaXMgaW50ZXJmYWNlZCBpbnRvIGEgdGVybWluYWwgY29uY2VudHJhdG9yCisod2hpY2ggZG9lcyBmbG93IGNvbnRyb2wpLAoraXQgKG9yIHlvdXIgYXBwbGljYXRpb24pIG11c3QgbWFuYWdlIGRhdGFmbG93LCBwcmV2ZW50aW5nIG92ZXJydW5zLgorVGhlIGNoZWFwZXN0IHNvbHV0aW9uIChubyBoYXJkd2FyZSBjb3N0KQoraXMgZm9yIHlvdXIgcHJvZ3JhbSB0byBkbyB0aGlzIGJ5IHBhdXNpbmcgYWZ0ZXIKK29wZXJhdGlvbnMgdGhhdCB0aGUgdGVybWluYWwgZG9lcyBzbG93bHksIHN1Y2ggYXMgY2xlYXJpbmcgdGhlIGRpc3BsYXkuCisuSVAKK0FzIGEgcmVzdWx0LCBtYW55IHRlcm1pbmFsIGRlc2NyaXB0aW9ucyAoaW5jbHVkaW5nIHRoZSB2dDEwMCkKK2hhdmUgZGVsYXkgdGltZXMgZW1iZWRkZWQuCitZb3UgbWF5IHdpc2ggdG8gdXNlIHRoZXNlIGRlc2NyaXB0aW9ucywKK2J1dCBub3Qgd2FudCB0byBwYXkgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisuSVAKK1NldCB0aGUgTkNVUlNFU19OT19QQURESU5HIHN5bWJvbCB0byBkaXNhYmxlIGFsbCBidXQgbWFuZGF0b3J5CitwYWRkaW5nLgorTWFuZGF0b3J5IHBhZGRpbmcgaXMgdXNlZCBhcyBhIHBhcnQgb2Ygc3BlY2lhbCBjb250cm9sCitzZXF1ZW5jZXMgc3VjaCBhcyBcZklmbGFzaFxmUi4KKy5UUCA1CitOQ1VSU0VTX05PX1NFVEJVRgorTm9ybWFsbHkgXGZCbmN1cnNlc1xmUiBlbmFibGVzIGJ1ZmZlcmVkIG91dHB1dCBkdXJpbmcgdGVybWluYWwgaW5pdGlhbGl6YXRpb24uCitUaGlzIGlzIGRvbmUgKGFzIGluIFNWcjQgY3Vyc2VzKSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KK0ZvciB0ZXN0aW5nIHB1cnBvc2VzLCBib3RoIG9mIFxmQm5jdXJzZXNcZlIgYW5kIGNlcnRhaW4gYXBwbGljYXRpb25zLAordGhpcyBmZWF0dXJlIGlzIG1hZGUgb3B0aW9uYWwuCitTZXR0aW5nIHRoZSBOQ1VSU0VTX05PX1NFVEJVRiB2YXJpYWJsZQorZGlzYWJsZXMgb3V0cHV0IGJ1ZmZlcmluZywgbGVhdmluZyB0aGUgb3V0cHV0IGluIHRoZSBvcmlnaW5hbCAodXN1YWxseQorbGluZSBidWZmZXJlZCkgbW9kZS4KKy5UUCA1CitOQ1VSU0VTX05PX1VURjhfQUNTCitEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkKK2NoZWNrcyBmb3Igc3BlY2lhbCBjYXNlcyB3aGVyZSBWVDEwMCBsaW5lLWRyYXdpbmcgKGFuZCB0aGUgY29ycmVzcG9uZGluZworYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgY2FwYWJpbGl0aWVzKSBkZXNjcmliZWQgaW4gdGhlIHRlcm1pbmZvIGFyZSBrbm93bgordG8gYmUgbWlzc2luZy4KK1NwZWNpZmljYWxseSwgd2hlbiBydW5uaW5nIGluIGEgVVRGLTggbG9jYWxlLAordGhlIExpbnV4IGNvbnNvbGUgZW11bGF0b3IgYW5kIHRoZSBHTlUgc2NyZWVuIHByb2dyYW0gaWdub3JlIHRoZXNlLgorTmN1cnNlcyBjaGVja3MgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHRoZXNlLgorRm9yIG90aGVyIHNwZWNpYWwgY2FzZXMsIHlvdSBzaG91bGQgc2V0IHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUuCitEb2luZyB0aGlzIHRlbGxzIG5jdXJzZXMgdG8gdXNlIFVuaWNvZGUgdmFsdWVzIHdoaWNoIGNvcnJlc3BvbmQgdG8KK3RoZSBWVDEwMCBsaW5lLWRyYXdpbmcgZ2x5cGhzLgorVGhhdCB3b3JrcyBmb3IgdGhlIHNwZWNpYWwgY2FzZXMgY2l0ZWQsCithbmQgaXMgbGlrZWx5IHRvIHdvcmsgZm9yIHRlcm1pbmFsIGVtdWxhdG9ycy4KKy5JUAorV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHlvdSBzaG91bGQgc2V0IGl0IHRvIGEgbm9uemVybyB2YWx1ZS4KK1NldHRpbmcgaXQgdG8gemVybyAob3IgdG8gYSBub25udW1iZXIpCitkaXNhYmxlcyB0aGUgc3BlY2lhbCBjaGVjayBmb3IgTGludXggYW5kIHNjcmVlbi4KKy5UUCA1CitOQ1VSU0VTX1RSQUNFCitEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBcZkJuY3Vyc2VzXGZSIGRlYnVnZ2luZyBsaWJyYXJ5CitjaGVja3MgdGhlIE5DVVJTRVNfVFJBQ0Ugc3ltYm9sLgorSWYgaXQgaXMgZGVmaW5lZCwgdG8gYSBudW1lcmljIHZhbHVlLCBcZkJuY3Vyc2VzXGZSIGNhbGxzIHRoZSBcZkJ0cmFjZVxmUgorZnVuY3Rpb24sIHVzaW5nIHRoYXQgdmFsdWUgYXMgdGhlIGFyZ3VtZW50LgorLklQCitUaGUgYXJndW1lbnQgdmFsdWVzLCB3aGljaCBhcmUgZGVmaW5lZCBpbiBcZkJjdXJzZXMuaFxmUiwgcHJvdmlkZSBzZXZlcmFsCit0eXBlcyBvZiBpbmZvcm1hdGlvbi4KK1doZW4gcnVubmluZyB3aXRoIHRyYWNlcyBlbmFibGVkLCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgd3JpdGUgdGhlCitmaWxlIFxmQnRyYWNlXGZSIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKy5UUCA1CitURVJNCitEZW5vdGVzIHlvdXIgdGVybWluYWwgdHlwZS4KK0VhY2ggdGVybWluYWwgdHlwZSBpcyBkaXN0aW5jdCwgdGhvdWdoIG1hbnkgYXJlIHNpbWlsYXIuCisuVFAgNQorVEVSTUNBUAorSWYgdGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggXGZJdGVybWNhcFxmUgorc3VwcG9ydCwgXGZCbmN1cnNlc1xmUiB3aWxsIGNoZWNrIGZvciBhIHRlcm1pbmFsJ3MgZGVzY3JpcHRpb24gaW4KK3Rlcm1jYXAgZm9ybSBpZiBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZS4KKy5JUAorVGhlIFRFUk1DQVAgc3ltYm9sIGNvbnRhaW5zIGVpdGhlciBhIHRlcm1pbmFsIGRlc2NyaXB0aW9uICh3aXRoCituZXdsaW5lcyBzdHJpcHBlZCBvdXQpLAorb3IgYSBmaWxlIG5hbWUgdGVsbGluZyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gZGVub3RlZCBieSB0aGUgVEVSTSBzeW1ib2wgZXhpc3RzLgorSW4gZWl0aGVyIGNhc2UsIHNldHRpbmcgaXQgZGlyZWN0cyBcZkJuY3Vyc2VzXGZSIHRvIGlnbm9yZQordGhlIHVzdWFsIHBsYWNlIGZvciB0aGlzIGluZm9ybWF0aW9uLCBlLmcuLCAvZXRjL3Rlcm1jYXAuCisuVFAgNQorVEVSTUlORk8KK092ZXJyaWRlcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIFxmQm5jdXJzZXNcZlIgc2VhcmNoZXMgZm9yIHlvdXIgdGVybWluYWwKK2Rlc2NyaXB0aW9uLgorVGhpcyBpcyB0aGUgc2ltcGxlc3QsIGJ1dCBub3QgdGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgbGlzdCBvZiBkaXJlY3Rvcmllcy4KK1RoZSBjb21wbGV0ZSBsaXN0IG9mIGRpcmVjdG9yaWVzIGluIG9yZGVyIGZvbGxvd3M6CisuUlMKKy5UUCAzCistCit0aGUgbGFzdCBkaXJlY3RvcnkgdG8gd2hpY2ggXGZCbmN1cnNlc1xmUiB3cm90ZSwgaWYgYW55LCBpcyBzZWFyY2hlZCBmaXJzdAorLlRQIDMKKy0KK3RoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSBURVJNSU5GTyBzeW1ib2wKKy5UUCAzCistCiskSE9NRS8udGVybWluZm8KKy5UUCAzCistCitkaXJlY3RvcmllcyBsaXN0ZWQgaW4gdGhlIFRFUk1JTkZPX0RJUlMgc3ltYm9sCisuVFAgMworLQorb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgd2hvc2UgbmFtZXMgYXJlIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkIGludG8gdGhlCituY3Vyc2VzIGxpYnJhcnksIGUuZy4sCitAVEVSTUlORk9ACisuUkUKKy5UUCA1CitURVJNSU5GT19ESVJTCitTcGVjaWZpZXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgdGVybWluYWwgZGVzY3JpcHRpb25zLgorVGhlIGxpc3QgaXMgc2VwYXJhdGVkIGJ5IGNvbG9ucyAoaS5lLiwgIjoiKSBvbiBVbml4LCBzZW1pY29sb25zIG9uIE9TLzIgRU1YLgorQWxsIG9mIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgYXJlIGluIHRlcm1pbmZvIGZvcm0sIHdoaWNoIG1ha2VzCithIHN1YmRpcmVjdG9yeSBuYW1lZCBmb3IgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgdGVybWluYWwgbmFtZXMgdGhlcmVpbi4KKy5UUCA1CitURVJNUEFUSAorSWYgVEVSTUNBUCBkb2VzIG5vdCBob2xkIGEgZmlsZSBuYW1lIHRoZW4gXGZCbmN1cnNlc1xmUiBjaGVja3MKK3RoZSBURVJNUEFUSCBzeW1ib2wuCitUaGlzIGlzIGEgbGlzdCBvZiBmaWxlbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcyBvciBjb2xvbnMgKGkuZS4sICI6Iikgb24gVW5peCwgc2VtaWNvbG9ucyBvbiBPUy8yIEVNWC4KK0lmIHRoZSBURVJNUEFUSCBzeW1ib2wgaXMgbm90IHNldCwgXGZCbmN1cnNlc1xmUiBsb29rcyBpbiB0aGUgZmlsZXMKKy9ldGMvdGVybWNhcCwgL3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAgYW5kICRIT01FLy50ZXJtY2FwLCBpbiB0aGF0IG9yZGVyLgorLlBQCitUaGUgbGlicmFyeSBtYXkgYmUgY29uZmlndXJlZCB0byBkaXNyZWdhcmQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgd2hlbiB0aGUKK2N1cnJlbnQgdXNlciBpcyB0aGUgc3VwZXJ1c2VyIChyb290KSwgb3IgaWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMgc2V0dWlkIG9yCitzZXRnaWQgcGVybWlzc2lvbnM6CiskVEVSTUlORk8sICRURVJNSU5GT19ESVJTLCAkVEVSTVBBVEgsIGFzIHdlbGwgYXMgJEhPTUUuCisuU0ggQUxURVJOQVRFIENPTkZJR1VSQVRJT05TCitTZXZlcmFsIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBhcmUgcG9zc2libGUsCitkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucyB1c2VkIHdoZW4gYnVpbGRpbmcgXGZCbmN1cnNlc1xmUC4KK1RoZXJlIGFyZSBhIGZldyBtYWluIG9wdGlvbnMgd2hvc2UgZWZmZWN0cyBhcmUgdmlzaWJsZSB0byB0aGUgYXBwbGljYXRpb25zCitkZXZlbG9wZXIgdXNpbmcgXGZCbmN1cnNlc1xmUDoKKy5UUCA1CistLWRpc2FibGUtb3ZlcndyaXRlCitUaGUgc3RhbmRhcmQgaW5jbHVkZSBmb3IgXGZCbmN1cnNlc1xmUCBpcyBhcyBub3RlZCBpbiBcZkJTWU5PUFNJU1xmUDoKKy5SUworLnNwCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUkUKKy5JUAorVGhpcyBvcHRpb24gaXMgdXNlZCB0byBhdm9pZCBmaWxlbmFtZSBjb25mbGljdHMgd2hlbiBcZkJuY3Vyc2VzXGZQCitpcyBub3QgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gb2YgY3Vyc2VzIG9mIHRoZSBjb21wdXRlci4KK0lmIFxmQm5jdXJzZXNcZlAgaXMgaW5zdGFsbGVkIGRpc2FibGluZyBvdmVyd3JpdGUsIGl0IHB1dHMgaXRzIGhlYWRlcnMgaW4KK2Egc3ViZGlyZWN0b3J5LCBlLmcuLAorLlJTCisuc3AKK1xmQiNpbmNsdWRlIDxuY3Vyc2VzL2N1cnNlcy5oPlxmUgorLlJFCisuSVAKK0l0IGFsc28gb21pdHMgYSBzeW1ib2xpYyBsaW5rIHdoaWNoIHdvdWxkIGFsbG93IHlvdSB0byB1c2UgXGZCLWxjdXJzZXNcZlAKK3RvIGJ1aWxkIGV4ZWN1dGFibGVzLgorLlRQIDUKKy0tZW5hYmxlLXdpZGVjCitUaGUgY29uZmlndXJlIHNjcmlwdCByZW5hbWVzIHRoZSBsaWJyYXJ5IGFuZCAoaWYgdGhlIFxmQi0tZGlzYWJsZS1vdmVyd3JpdGVcZlAKK29wdGlvbiBpcyB1c2VkKSBwdXRzIHRoZSBoZWFkZXIgZmlsZXMgaW4gYSBkaWZmZXJlbnQgc3ViZGlyZWN0b3J5LgorQWxsIG9mIHRoZSBsaWJyYXJ5IG5hbWVzIGhhdmUgYSAidyIgYXBwZW5kZWQgdG8gdGhlbSwKK2kuZS4sIGluc3RlYWQgb2YKKy5SUworLnNwCitcZkItbG5jdXJzZXNcZlIKKy5SRQorLklQCit5b3UgbGluayB3aXRoCisuUlMKKy5zcAorXGZCLWxuY3Vyc2Vzd1xmUgorLlJFCisuSVAKK1lvdSBtdXN0IGFsc28gZGVmaW5lIFxmQl9YT1BFTl9TT1VSQ0VfRVhURU5ERURcZlAgd2hlbiBjb21waWxpbmcgZm9yIHRoZQord2lkZS1jaGFyYWN0ZXIgbGlicmFyeSB0byB1c2UgdGhlIGV4dGVuZGVkICh3aWRlLWNoYXJhY3RlcikgZnVuY3Rpb25zLgorVGhlIFxmQmN1cnNlcy5oXGZQIGZpbGUgd2hpY2ggaXMgaW5zdGFsbGVkIGZvciB0aGUgd2lkZS1jaGFyYWN0ZXIKK2xpYnJhcnkgaXMgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBub3JtYWwgbGlicmFyeSdzIGhlYWRlci4KK09ubHkgdGhlIHNpemUgb2YgdGhlIFxmQldJTkRPV1xmUCBzdHJ1Y3R1cmUgZGlmZmVycywgYW5kIHZlcnkgZmV3CithcHBsaWNhdGlvbnMgcmVxdWlyZSBtb3JlIHRoYW4gYSBwb2ludGVyIHRvIFxmQldJTkRPV1xmUHMuCitJZiB0aGUgaGVhZGVycyBhcmUgaW5zdGFsbGVkIGFsbG93aW5nIG92ZXJ3cml0ZSwKK3RoZSB3aWRlLWNoYXJhY3RlciBsaWJyYXJ5J3MgaGVhZGVycyBzaG91bGQgYmUgaW5zdGFsbGVkIGxhc3QsCit0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gYmUgYnVpbHQgdXNpbmcgZWl0aGVyIGxpYnJhcnkKK2Zyb20gdGhlIHNhbWUgc2V0IG9mIGhlYWRlcnMuCisuVFAgNQorLS13aXRoLXNoYXJlZAorLlRQCistLXdpdGgtbm9ybWFsCisuVFAKKy0td2l0aC1kZWJ1ZworLlRQCistLXdpdGgtcHJvZmlsZQorVGhlIHNoYXJlZCBhbmQgbm9ybWFsIChzdGF0aWMpIGxpYnJhcnkgbmFtZXMgZGlmZmVyIGJ5IHRoZWlyIHN1ZmZpeGVzLAorZS5nLiwgXGZCbGlibmN1cnNlcy5zb1xmUCBhbmQgXGZCbGlibmN1cnNlcy5hXGZQLgorVGhlIGRlYnVnIGFuZCBwcm9maWxpbmcgbGlicmFyaWVzIGFkZCBhICJfZyIgYW5kIGEgIl9wIiB0byB0aGUgcm9vdAorbmFtZXMgcmVzcGVjdGl2ZWx5LAorZS5nLiwgXGZCbGlibmN1cnNlc19nLmFcZlAgYW5kIFxmQmxpYm5jdXJzZXNfcC5hXGZQLgorLlRQIDUKKy0td2l0aC10cmFjZQorVGhlIFxmQnRyYWNlXGZQIGZ1bmN0aW9uIG5vcm1hbGx5IHJlc2lkZXMgaW4gdGhlIGRlYnVnIGxpYnJhcnksCitidXQgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBjb25maWd1cmUgdGhpcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkuCitDb25maWd1cmUgc2NyaXB0cyBzaG91bGQgY2hlY2sgZm9yIHRoZSBmdW5jdGlvbidzIGV4aXN0ZW5jZSByYXRoZXIKK3RoYW4gYXNzdW1pbmcgaXQgaXMgYWx3YXlzIGluIHRoZSBkZWJ1ZyBsaWJyYXJ5LgorLlNIIEZJTEVTCisuVFAgNQorQERBVEFESVJAL3RhYnNldAorZGlyZWN0b3J5IGNvbnRhaW5pbmcgaW5pdGlhbGl6YXRpb24gZmlsZXMgZm9yIHRoZSB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGFiYXNlCitAVEVSTUlORk9ACit0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGFiYXNlCisuU0ggU0VFIEFMU08KK1xmQnRlcm1pbmZvXGZSKFwqbikgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImN1cnNfIiBmb3IgZGV0YWlsZWQgcm91dGluZQorZGVzY3JpcHRpb25zLgorLlNIIEVYVEVOU0lPTlMKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgY2FuIGJlIGNvbXBpbGVkIHdpdGggYW4gb3B0aW9uIChcZkItRFVTRV9HRVRDQVBcZlIpCit0aGF0IGZhbGxzIGJhY2sgdG8gdGhlIG9sZC1zdHlsZSAvZXRjL3Rlcm1jYXAgZmlsZSBpZiB0aGUgdGVybWluYWwgc2V0dXAgY29kZQorY2Fubm90IGZpbmQgYSB0ZXJtaW5mbyBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIFxmQlRFUk1cZlIuCitVc2Ugb2YgdGhpcyBmZWF0dXJlCitpcyBub3QgcmVjb21tZW5kZWQsIGFzIGl0IGVzc2VudGlhbGx5IGluY2x1ZGVzIGFuIGVudGlyZSB0ZXJtY2FwIGNvbXBpbGVyIGluCit0aGUgXGZCbmN1cnNlc1xmUiBzdGFydHVwIGNvZGUsIGF0IHNpZ25pZmljYW50IGNvc3QgaW4gY29yZSBhbmQgc3RhcnR1cCBjeWNsZXMuCisuUFAKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgaW5jbHVkZXMgZmFjaWxpdGllcyBmb3IgY2FwdHVyaW5nIG1vdXNlIGV2ZW50cyBvbgorY2VydGFpbiB0ZXJtaW5hbHMgKGluY2x1ZGluZyB4dGVybSkuCitTZWUgdGhlIFxmQmN1cnNfbW91c2VcZlIoM1gpCittYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBpbmNsdWRlcyBmYWNpbGl0aWVzIGZvciByZXNwb25kaW5nIHRvIHdpbmRvdworcmVzaXppbmcgZXZlbnRzLCBlLmcuLCB3aGVuIHJ1bm5pbmcgaW4gYW4geHRlcm0uCitTZWUgdGhlIFxmQnJlc2l6ZXRlcm1cZlIoM1gpCithbmQgXGZCd3Jlc2l6ZVxmUigzWCkgbWFudWFsIHBhZ2VzIGZvciBkZXRhaWxzLgorSW4gYWRkaXRpb24sIHRoZSBsaWJyYXJ5IG1heSBiZSBjb25maWd1cmVkIHdpdGggYSBTSUdXSU5DSCBoYW5kbGVyLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGV4dGVuZHMgdGhlIGZpeGVkIHNldCBvZiBmdW5jdGlvbiBrZXkgY2FwYWJpbGl0aWVzCitvZiB0ZXJtaW5hbHMgYnkgYWxsb3dpbmcgdGhlIGFwcGxpY2F0aW9uIGRlc2lnbmVyIHRvIGRlZmluZSBhZGRpdGlvbmFsCitrZXkgc2VxdWVuY2VzIGF0IHJ1bnRpbWUuCitTZWUgdGhlIFxmQmRlZmluZV9rZXlcZlIoM1gpCitcZkJrZXlfZGVmaW5lZFxmUigzWCksCithbmQgXGZCa2V5b2tcZlIoM1gpIG1hbnVhbCBwYWdlcyBmb3IgZGV0YWlscy4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBjYW4gZXhwbG9pdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRlcm1pbmFscyB3aGljaAoraW1wbGVtZW50IHRoZSBJU08tNjQyOSBTR1IgMzkgYW5kIFNHUiA0OSBjb250cm9scywgd2hpY2ggYWxsb3cgYW4gYXBwbGljYXRpb24KK3RvIHJlc2V0IHRoZSB0ZXJtaW5hbCB0byBpdHMgb3JpZ2luYWwgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMuCitGcm9tIHRoZSB1c2VycycgcGVyc3BlY3RpdmUsIHRoZSBhcHBsaWNhdGlvbiBpcyBhYmxlIHRvIGRyYXcgY29sb3JlZAordGV4dCBvbiBhIGJhY2tncm91bmQgd2hvc2UgY29sb3IgaXMgc2V0IGluZGVwZW5kZW50bHksIHByb3ZpZGluZyBiZXR0ZXIKK2NvbnRyb2wgb3ZlciBjb2xvciBjb250cmFzdHMuCitTZWUgdGhlIFxmQmRlZmF1bHRfY29sb3JzXGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBpbmNsdWRlcyBhIGZ1bmN0aW9uIGZvciBkaXJlY3RpbmcgYXBwbGljYXRpb24gb3V0cHV0Cit0byBhIHByaW50ZXIgYXR0YWNoZWQgdG8gdGhlIHRlcm1pbmFsIGRldmljZS4KK1NlZSB0aGUgXGZCY3Vyc19wcmludFxmUigzWCkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgaXMgaW50ZW5kZWQgdG8gYmUgQkFTRS1sZXZlbCBjb25mb3JtYW50IHdpdGggWFNJCitDdXJzZXMuCitUaGUgRVhURU5ERUQgWFNJIEN1cnNlcyBmdW5jdGlvbmFsaXR5CisoaW5jbHVkaW5nIGNvbG9yIHN1cHBvcnQpIGlzIHN1cHBvcnRlZC4KKy5QUAorQSBzbWFsbCBudW1iZXIgb2YgbG9jYWwgZGlmZmVyZW5jZXMgKHRoYXQgaXMsIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgYmV0d2VlbgordGhlIFhTSSBDdXJzZXMgYW5kIFxmQm5jdXJzZXNcZlIgY2FsbHMpIGFyZSBkZXNjcmliZWQgaW4gXGZCUE9SVEFCSUxJVFlcZlIKK3NlY3Rpb25zIG9mIHRoZSBsaWJyYXJ5IG1hbiBwYWdlcy4KKy5QUAorVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIGNvbnRhaW5zIHNldmVyYWwgZXh0ZW5zaW9uczoKKy5SUyA1CisuUFAKK1RoZSByb3V0aW5lIFxmQmhhc19rZXlcZlIgaXMgbm90IHBhcnQgb2YgWFBHNCwgbm9yIGlzIGl0IHByZXNlbnQgaW4gU1ZyNC4KK1NlZSB0aGUgXGZCY3Vyc19nZXRjaFxmUigzWCkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisuUFAKK1RoZSByb3V0aW5lIFxmQnNsa19hdHRyXGZSIGlzIG5vdCBwYXJ0IG9mIFhQRzQsIG5vciBpcyBpdCBwcmVzZW50IGluIFNWcjQuCitTZWUgdGhlIFxmQmN1cnNfc2xrXGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIHJvdXRpbmVzIFxmQmdldG1vdXNlXGZSLCBcZkJtb3VzZW1hc2tcZlIsIFxmQnVuZ2V0bW91c2VcZlIsCitcZkJtb3VzZWludGVydmFsXGZSLCBhbmQgXGZCd2VuY2xvc2VcZlIgcmVsYXRpbmcgdG8gbW91c2UgaW50ZXJmYWNpbmcgYXJlIG5vdAorcGFydCBvZiBYUEc0LCBub3IgYXJlIHRoZXkgcHJlc2VudCBpbiBTVnI0LgorU2VlIHRoZSBcZkJjdXJzX21vdXNlXGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIHJvdXRpbmUgXGZCbWNwcmludFxmUiB3YXMgbm90IHByZXNlbnQgaW4gYW55IHByZXZpb3VzIGN1cnNlcyBpbXBsZW1lbnRhdGlvbi4KK1NlZSB0aGUgXGZCY3Vyc19wcmludFxmUigzWCkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisuUFAKK1RoZSByb3V0aW5lIFxmQndyZXNpemVcZlIgaXMgbm90IHBhcnQgb2YgWFBHNCwgbm9yIGlzIGl0IHByZXNlbnQgaW4gU1ZyNC4KK1NlZSB0aGUgXGZCd3Jlc2l6ZVxmUigzWCkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisuUFAKK1RoZSBXSU5ET1cgc3RydWN0dXJlJ3MgaW50ZXJuYWwgZGV0YWlscyBjYW4gYmUgaGlkZGVuIGZyb20gYXBwbGljYXRpb24KK3Byb2dyYW1zLgorU2VlIFxmQmN1cnNfb3BhcXVlXGZSKDNYKSBmb3IgdGhlIGRpc2N1c3Npb24gb2YgXGZCaXNfc2Nyb2xsb2tcZlIsIGV0Yy4KKy5SRQorLlBQCitJbiBoaXN0b3JpYyBjdXJzZXMgdmVyc2lvbnMsIGRlbGF5cyBlbWJlZGRlZCBpbiB0aGUgY2FwYWJpbGl0aWVzIFxmQmNyXGZSLAorXGZCaW5kXGZSLCBcZkJjdWIxXGZSLCBcZkJmZlxmUiBhbmQgXGZCdGFiXGZSIGFjdGl2YXRlZCBjb3JyZXNwb25kaW5nIGRlbGF5CitiaXRzIGluIHRoZSBVTklYIHR0eSBkcml2ZXIuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBhbGwgcGFkZGluZyBpcyBkb25lIGJ5IHNlbmRpbmcgTlVMIGJ5dGVzLgorVGhpcyBtZXRob2QgaXMgc2xpZ2h0bHkgbW9yZSBleHBlbnNpdmUsIGJ1dCBuYXJyb3dzIHRoZSBpbnRlcmZhY2UKK3RvIHRoZSBVTklYIGtlcm5lbCBzaWduaWZpY2FudGx5IGFuZCBpbmNyZWFzZXMgdGhlIHBhY2thZ2UncyBwb3J0YWJpbGl0eQorY29ycmVzcG9uZGluZ2x5LgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGN1cnNlcy5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZXMKK1xmQjxzdGRpby5oPlxmUiBhbmQgXGZCPHVuY3RybC5oPlxmUi4KKy5QUAorSWYgc3RhbmRhcmQgb3V0cHV0IGZyb20gYSBcZkJuY3Vyc2VzXGZSIHByb2dyYW0gaXMgcmUtZGlyZWN0ZWQgdG8gc29tZXRoaW5nCit3aGljaCBpcyBub3QgYSB0dHksIHNjcmVlbiB1cGRhdGVzIHdpbGwgYmUgZGlyZWN0ZWQgdG8gc3RhbmRhcmQgZXJyb3IuCitUaGlzIHdhcyBhbiB1bmRvY3VtZW50ZWQgZmVhdHVyZSBvZiBBVCZUIFN5c3RlbSBWIFJlbGVhc2UgMyBjdXJzZXMuCisuU0ggQVVUSE9SUworWmV5ZCBNLiBCZW4tSGFsaW0sIEVyaWMgUy4gUmF5bW9uZCwgVGhvbWFzIEUuIERpY2tleS4KK0Jhc2VkIG9uIHBjdXJzZXMgYnkgUGF2ZWwgQ3VydGlzLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vcGFuZWwuM3ggYi9tYW4vcGFuZWwuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5YTllNgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9wYW5lbC4zeApAQCAtMCwwICsxLDE5MCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBwYW5lbC4zeCx2IDEuMTQgMjAwNy8wNS8xMiAyMDo0NToyMCB0b20gRXhwICQKKy5USCBwYW5lbCAzWCAiIgorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK3BhbmVsIC0gcGFuZWwgc3RhY2sgZXh0ZW5zaW9uIGZvciBjdXJzZXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPHBhbmVsLmg+XGZSCisuUAorXGZCY2MgW2ZsYWdzXSBzb3VyY2VmaWxlcyAtbHBhbmVsIC1sbmN1cnNlc1xmUgorLlAKK1xmQlBBTkVMICpuZXdfcGFuZWwoV0lORE9XICp3aW4pXGZSCisuYnIKK1xmQmludCBib3R0b21fcGFuZWwoUEFORUwgKnBhbilcZlIKKy5icgorXGZCaW50IHRvcF9wYW5lbChQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJpbnQgc2hvd19wYW5lbChQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJ2b2lkIHVwZGF0ZV9wYW5lbHMoKTtcZlIKKy5icgorXGZCaW50IGhpZGVfcGFuZWwoUEFORUwgKnBhbilcZlIKKy5icgorXGZCV0lORE9XICpwYW5lbF93aW5kb3coY29uc3QgUEFORUwgKnBhbilcZlIKKy5icgorXGZCaW50IHJlcGxhY2VfcGFuZWwoUEFORUwgKnBhbiwgV0lORE9XICp3aW5kb3cpXGZSCisuYnIKK1xmQmludCBtb3ZlX3BhbmVsKFBBTkVMICpwYW4sIGludCBzdGFydHksIGludCBzdGFydHgpXGZSCisuYnIKK1xmQmludCBwYW5lbF9oaWRkZW4oY29uc3QgUEFORUwgKnBhbilcZlIKKy5icgorXGZCUEFORUwgKnBhbmVsX2Fib3ZlKGNvbnN0IFBBTkVMICpwYW4pXGZSCisuYnIKK1xmQlBBTkVMICpwYW5lbF9iZWxvdyhjb25zdCBQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJpbnQgc2V0X3BhbmVsX3VzZXJwdHIoUEFORUwgKnBhbiwgY29uc3Qgdm9pZCAqcHRyKVxmUgorLmJyCitcZkJjb25zdCB2b2lkICpwYW5lbF91c2VycHRyKGNvbnN0IFBBTkVMICpwYW4pXGZSCisuYnIKK1xmQmludCBkZWxfcGFuZWwoUEFORUwgKnBhbilcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitQYW5lbHMgYXJlIFxmQmN1cnNlc1xmUigzWCkgd2luZG93cyB3aXRoIHRoZSBhZGRlZCBmZWF0dXJlIG9mCitkZXB0aC4gIFBhbmVsIGZ1bmN0aW9ucyBhbGxvdyB0aGUgdXNlIG9mIHN0YWNrZWQgd2luZG93cyBhbmQgZW5zdXJlCit0aGUgcHJvcGVyIHBvcnRpb25zIG9mIGVhY2ggd2luZG93IGFuZCB0aGUgY3Vyc2VzIFxmQnN0ZHNjclxmUiB3aW5kb3cgYXJlCitoaWRkZW4gb3IgZGlzcGxheWVkIHdoZW4gcGFuZWxzIGFyZSBhZGRlZCwgbW92ZWQsIG1vZGlmaWVkIG9yIHJlbW92ZWQuCitUaGUgc2V0IG9mIGN1cnJlbnRseSB2aXNpYmxlIHBhbmVscyBpcyB0aGUgc3RhY2sgb2YgcGFuZWxzLiAgVGhlCitcZkJzdGRzY3JcZlIgd2luZG93IGlzIGJlbmVhdGggYWxsIHBhbmVscywgYW5kIGlzIG5vdCBjb25zaWRlcmVkIHBhcnQKK29mIHRoZSBzdGFjay4KKy5QCitBIHdpbmRvdyBpcyBhc3NvY2lhdGVkIHdpdGggZXZlcnkgcGFuZWwuIFRoZSBwYW5lbCByb3V0aW5lcyBlbmFibGUKK3lvdSB0byBjcmVhdGUsIG1vdmUsIGhpZGUsIGFuZCBzaG93IHBhbmVscywgYXMgd2VsbCBhcyBwb3NpdGlvbiBhCitwYW5lbCBhdCBhbnkgZGVzaXJlZCBsb2NhdGlvbiBpbiB0aGUgc3RhY2suCisuUAorUGFuZWwgcm91dGluZXMgYXJlIGEgZnVuY3Rpb25hbCBsYXllciBhZGRlZCB0byBcZkJjdXJzZXNcZlIoM1gpLCBtYWtlIG9ubHkKK2hpZ2gtbGV2ZWwgY3Vyc2VzIGNhbGxzLCBhbmQgd29yayBhbnl3aGVyZSB0ZXJtaW5mbyBjdXJzZXMgZG9lcy4KKy5TSCBGVU5DVElPTlMKKy5UUAorLkIgbmV3X3BhbmVsKHdpbikKK2FsbG9jYXRlcyAgYSAgXGZCUEFORUxcZlIgc3RydWN0dXJlLCBhc3NvY2lhdGVzIGl0IHdpdGgKK1xmQndpblxmUiwgcGxhY2VzIHRoZSBwYW5lbCBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayAgKGNhdXNlcyAgaXQKK3RvICBiZSAgZGlzcGxheWVkIGFib3ZlIGFueSBvdGhlciBwYW5lbCkgYW5kIHJldHVybnMgYQorcG9pbnRlciB0byB0aGUgbmV3IHBhbmVsLgorLlRQCisuQiB1cGRhdGVfcGFuZWxzKCkKK3JlZnJlc2hlcyB0aGUgdmlydHVhbCBzY3JlZW4gdG8gcmVmbGVjdCB0aGUgcmVsYXRpb25zIGJldHdlZW4gdGhlCitwYW5lbHMgaW4gdGhlIHN0YWNrLCBidXQgZG9lcyBub3QgY2FsbCBkb3VwZGF0ZSgpIHRvIHJlZnJlc2ggdGhlCitwaHlzaWNhbCBzY3JlZW4uICBVc2UgdGhpcyBmdW5jdGlvbiBhbmQgbm90IHdyZWZyZXNoIG9yIHdub3V0cmVmcmVzaC4KK3VwZGF0ZV9wYW5lbHMoKSBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBhIGNhbGwgdG8KK2RvdXBkYXRlKCksIGJ1dCBkb3VwZGF0ZSgpIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcKK3RoZSBwaHlzaWNhbCBzY3JlZW4uCisuVFAKKy5CIGRlbF9wYW5lbChwYW4pCityZW1vdmVzIHRoZSBnaXZlbiBwYW5lbCBmcm9tIHRoZSAgc3RhY2sgYW5kIGRlYWxsb2NhdGVzIHRoZQorXGZCUEFORUxcZlIgc3RydWN0dXJlIChidXQgbm90IGl0cyBhc3NvY2lhdGVkIHdpbmRvdykuCisuVFAKKy5CIGhpZGVfcGFuZWwocGFuKQorcmVtb3ZlcyB0aGUgZ2l2ZW4gcGFuZWwgZnJvbSB0aGUgcGFuZWwgc3RhY2sgYW5kIHRodXMgaGlkZXMgaXQgZnJvbQordmlldy4gVGhlIFxmQlBBTkVMXGZSIHN0cnVjdHVyZSBpcyBub3QgbG9zdCwgbWVyZWx5IHJlbW92ZWQgZnJvbSB0aGUgc3RhY2suCisuVFAKKy5CIHBhbmVsX2hpZGRlbihwYW4pCityZXR1cm5zIFRSVUUgaWYgdGhlIHBhbmVsIGlzIGluIHRoZSBwYW5lbCBzdGFjaywKK0ZBTFNFIGlmIGl0IGlzIG5vdC4KK0lmIHRoZSBwYW5lbCBpcyBhIG51bGwgcG9pbnRlciwgcmV0dXJuIEVSUi4KKy5UUAorLkIgc2hvd19wYW5lbChwYW4pCittYWtlcyBhIGhpZGRlbiBwYW5lbCB2aXNpYmxlIGJ5IHBsYWNpbmcgaXQgb24gdG9wIG9mIHRoZSBwYW5lbHMgaW4gdGhlCitwYW5lbCBzdGFjay4gU2VlIENPTVBBVElCSUxJVFkgYmVsb3cuCisuVFAKKy5CIHRvcF9wYW5lbChwYW4pCitwdXRzIHRoZSBnaXZlbiB2aXNpYmxlIHBhbmVsIG9uIHRvcCBvZiBhbGwgcGFuZWxzIGluIHRoZSBzdGFjay4gIFNlZQorQ09NUEFUSUJJTElUWSBiZWxvdy4KKy5UUAorLkIgYm90dG9tX3BhbmVsKHBhbikKK3B1dHMgcGFuZWwgYXQgdGhlIGJvdHRvbSBvZiBhbGwgcGFuZWxzLgorLlRQCisuQiBtb3ZlX3BhbmVsKHBhbixzdGFydHksc3RhcnR4KQorbW92ZXMgdGhlIGdpdmVuIHBhbmVsIHdpbmRvdyBzbyB0aGF0IGl0cyB1cHBlci1sZWZ0IGNvcm5lciBpcyBhdAorXGZCc3RhcnR5XGZSLCBcZkJzdGFydHhcZlIuICBJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZQorcGFuZWwgaW4gdGhlIHN0YWNrLiAgQmUgc3VyZSB0byB1c2UgdGhpcyBmdW5jdGlvbiwgbm90IFxmQm12d2luKClcZlIsCit0byBtb3ZlIGEgcGFuZWwgd2luZG93LgorLlRQCisuQiByZXBsYWNlX3BhbmVsKHBhbix3aW5kb3cpCityZXBsYWNlcyB0aGUgY3VycmVudCB3aW5kb3cgb2YgcGFuZWwgd2l0aCBcZkJ3aW5kb3dcZlIgKHVzZWZ1bCwgZm9yCitleGFtcGxlIGlmIHlvdSB3YW50IHRvIHJlc2l6ZSBhIHBhbmVsOyBpZiB5b3UncmUgdXNpbmcgXGZCbmN1cnNlc1xmUiwKK3lvdSBjYW4gY2FsbCBcZkJyZXBsYWNlX3BhbmVsXGZSIG9uIHRoZSBvdXRwdXQgb2YgXGZCd3Jlc2l6ZVxmUigzWCkpLgorSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiB0aGUgcGFuZWwgaW4gdGhlIHN0YWNrLgorLlRQCisuQiBwYW5lbF9hYm92ZShwYW4pCityZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGFuZWwgYWJvdmUgcGFuLiAgSWYgdGhlIHBhbmVsIGFyZ3VtZW50IGlzCitcZkIoUEFORUwgKikwXGZSLCBpdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYm90dG9tIHBhbmVsIGluIHRoZSBzdGFjay4KKy5UUAorLkIgcGFuZWxfYmVsb3cocGFuKQorcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhbmVsIGp1c3QgYmVsb3cgcGFuLiAgSWYgdGhlIHBhbmVsIGFyZ3VtZW50CitpcyBcZkIoUEFORUwgKikwXGZSLCBpdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdG9wIHBhbmVsIGluIHRoZSBzdGFjay4KKy5UUAorLkIgc2V0X3BhbmVsX3VzZXJwdHIocGFuLHB0cikKK3NldHMgdGhlIHBhbmVsJ3MgdXNlciBwb2ludGVyLgorLlRQCisuQiBwYW5lbF91c2VycHRyKHBhbikKK3JldHVybnMgdGhlIHVzZXIgcG9pbnRlciBmb3IgYSBnaXZlbiBwYW5lbC4KKy5UUAorLkIgcGFuZWxfd2luZG93KHBhbikKK3JldHVybnMgYSBwb2ludGVyIHRvIHRoZSB3aW5kb3cgb2YgdGhlIGdpdmVuIHBhbmVsLgorLlNIIERJQUdOT1NUSUNTCitFYWNoIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgcG9pbnRlciByZXR1cm5zIFxmQk5VTExcZlIgaWYgYW4gZXJyb3IKK29jY3Vycy4gRWFjaCByb3V0aW5lIHRoYXQgcmV0dXJucyBhbiBpbnQgdmFsdWUgcmV0dXJucyBcZkJPS1xmUiBpZiBpdAorZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5IGFuZCBcZkJFUlJcZlIgaWYgbm90LgorLlNIIENPTVBBVElCSUxJVFkKK1JlYXNvbmFibGUgY2FyZSBoYXMgYmVlbiB0YWtlbiB0byAgZW5zdXJlICBjb21wYXRpYmlsaXR5Cit3aXRoICB0aGUgIG5hdGl2ZSAgcGFuZWwgZmFjaWxpdHkgaW50cm9kdWNlZCBpbiBTVnIzLjIgKGluc3BlY3Rpb24gb2YKK3RoZSBTVnI0IG1hbnVhbCBwYWdlcyBzdWdnZXN0cyB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGlzIHVuY2hhbmdlZCkuCitUaGUgXGZCUEFORUxcZlIgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBtZXJlbHkgIHNpbWlsYXIuIFRoZSAgcHJvZ3JhbW1lcgoraXMgY2F1dGlvbmVkIG5vdCB0byBkaXJlY3RseSB1c2UgXGZCUEFORUxcZlIgZmllbGRzLgorLlAKK1RoZSBmdW5jdGlvbnMgXGZCc2hvd19wYW5lbCgpXGZSIGFuZCBcZkJ0b3BfcGFuZWwoKVxmUiBhcmUgaWRlbnRpY2FsCitpbiB0aGlzIGltcGxlbWVudGF0aW9uLCBhbmQgd29yayBlcXVhbGx5IHdlbGwgd2l0aCBkaXNwbGF5ZWQgb3IgaGlkZGVuCitwYW5lbHMuICBJbiB0aGUgbmF0aXZlIFN5c3RlbSBWIGltcGxlbWVudGF0aW9uLCBcZkJzaG93X3BhbmVsKClcZlIgaXMKK2ludGVuZGVkIGZvciBtYWtpbmcgYSBoaWRkZW4gcGFuZWwgdmlzaWJsZSAoYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2spCithbmQgXGZCdG9wX3BhbmVsKClcZlIgaXMgaW50ZW5kZWQgZm9yIG1ha2luZyBhbiBhbHJlYWR5LXZpc2libGUgcGFuZWwKK21vdmUgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2suIFlvdSBhcmUgY2F1dGlvbmVkIHRvIHVzZSB0aGUgY29ycmVjdAorZnVuY3Rpb24gdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBuYXRpdmUgcGFuZWwgbGlicmFyaWVzLgorLlNIIE5PVEUKK0luIHlvdXIgbGlicmFyeSBsaXN0LCBsaWJwYW5lbC5hIHNob3VsZCBiZSBiZWZvcmUgbGlibmN1cnNlcy5hOyB0aGF0IGlzLAoreW91IHdhbnQgdG8gc2F5IGAtbHBhbmVsIC1sbmN1cnNlcycsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZCAod2hpY2ggd291bGQKK3VzdWFsbHkgZ2l2ZSBhIGxpbmstZXJyb3IpLgorLlNIIEZJTEVTCisuUAorcGFuZWwuaAoraW50ZXJmYWNlIGZvciB0aGUgcGFuZWxzIGxpYnJhcnkKKy5QCitsaWJwYW5lbC5hCit0aGUgcGFuZWxzIGxpYnJhcnkgaXRzZWxmCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkKKy5QUAorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlNIIEFVVEhPUgorT3JpZ2luYWxseSB3cml0dGVuIGJ5IFdhcnJlbiBUdWNrZXIgPHdodEBuNGhnZi5tdC1wYXJrLmdhLnVzPiwKK3ByaW1hcmlseSB0byBhc3Npc3QgaW4gcG9ydGluZyB1Mzg2bW9uIHRvIHN5c3RlbXMgd2l0aG91dCBhIG5hdGl2ZQorcGFuZWxzIGxpYnJhcnkuICBSZXBhY2thZ2VkIGZvciBuY3Vyc2VzIGJ5IFpleWQgYmVuLUhhbGltLgpkaWZmIC0tZ2l0IGEvbWFuL3Jlc2l6ZXRlcm0uM3ggYi9tYW4vcmVzaXpldGVybS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODhlYWFmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL3Jlc2l6ZXRlcm0uM3gKQEAgLTAsMCArMSwxMDAgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LTIwMDUKKy5cIgorLlwiICRJZDogcmVzaXpldGVybS4zeCx2IDEuMTEgMjAwNS8wNi8yNSAyMjoxOTo0MiB0b20gRXhwICQKKy5USCByZXNpemV0ZXJtIDNYICIiCisuU0ggTkFNRQorXGZCaXNfdGVybV9yZXNpemVkXGZSLAorXGZCcmVzaXplX3Rlcm1cZlIsCitcZkJyZXNpemV0ZXJtXGZSIC0gY2hhbmdlIHRoZSBjdXJzZXMgdGVybWluYWwgc2l6ZQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmJvb2wgaXNfdGVybV9yZXNpemVkKGludCBsaW5lcywgaW50IGNvbHVtbnMpO1xmUgorLmJyCitcZkJpbnQgcmVzaXplX3Rlcm0oaW50IGxpbmVzLCBpbnQgY29sdW1ucyk7XGZSCisuYnIKK1xmQmludCByZXNpemV0ZXJtKGludCBsaW5lcywgaW50IGNvbHVtbnMpO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuCitJdCBwcm92aWRlcyBjYWxsZXJzIHdpdGggYSBob29rIGludG8gdGhlIFxmQm5jdXJzZXNcZlIgZGF0YSB0byByZXNpemUgd2luZG93cywKK3ByaW1hcmlseSBmb3IgdXNlIGJ5IHByb2dyYW1zIHJ1bm5pbmcgaW4gYW4gWCBXaW5kb3cgdGVybWluYWwgKGUuZy4sIHh0ZXJtKS4KK1RoZSBmdW5jdGlvbiBcZkJyZXNpemV0ZXJtXGZSIHJlc2l6ZXMgdGhlIHN0YW5kYXJkIGFuZCBjdXJyZW50IHdpbmRvd3MKK3RvIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucywgYW5kIGFkanVzdHMgb3RoZXIgYm9va2tlZXBpbmcgZGF0YSB1c2VkIGJ5Cit0aGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IHRoYXQgcmVjb3JkIHRoZSB3aW5kb3cgZGltZW5zaW9ucy4KKy5MUAorTW9zdCBvZiB0aGUgd29yayBpcyBkb25lIGJ5IHRoZSBpbm5lciBmdW5jdGlvbiBcZkJyZXNpemVfdGVybVxmUi4KK1RoZSBvdXRlciBmdW5jdGlvbiBcZkJyZXNpemV0ZXJtXGZSIGFkZHMgYm9va2tlZXBpbmcgZm9yIHRoZSBTSUdXSU5DSCBoYW5kbGVyLgorV2hlbiByZXNpemluZyB0aGUgd2luZG93cywKK1xmQnJlc2l6ZV90ZXJtXGZSIGJsYW5rLWZpbGxzIHRoZSBhcmVhcyB0aGF0IGFyZSBleHRlbmRlZC4KK1RoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIHNob3VsZCBmaWxsIGluIHRoZXNlIGFyZWFzIHdpdGggYXBwcm9wcmlhdGUgZGF0YS4KK1RoZSBcZkJyZXNpemVfdGVybVxmUiBmdW5jdGlvbiBhdHRlbXB0cyB0byByZXNpemUgYWxsIHdpbmRvd3MuCitIb3dldmVyLCBkdWUgdG8gdGhlIGNhbGxpbmcgY29udmVudGlvbiBvZiBwYWRzLAoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGVzZQord2l0aG91dCBhZGRpdGlvbmFsIGludGVyYWN0aW9uIHdpdGggdGhlIGFwcGxpY2F0aW9uLgorLkxQCitBIHN1cHBvcnQgZnVuY3Rpb24gXGZCaXNfdGVybV9yZXNpemVkXGZSIGlzIHByb3ZpZGVkIHNvIHRoYXQgYXBwbGljYXRpb25zCitjYW4gY2hlY2sgaWYgdGhlIFxmQnJlc2l6ZV90ZXJtXGZSIGZ1bmN0aW9uIHdvdWxkIG1vZGlmeSB0aGUgd2luZG93IHN0cnVjdHVyZXMuCitJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHdpbmRvd3Mgd291bGQgYmUgbW9kaWZpZWQsIGFuZCBGQUxTRSBvdGhlcndpc2UuCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgYXMgbm90ZXMsIHRoZXNlIGZ1bmN0aW9uIHJldHVybgordGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIgb24gc3VjY2Vzcy4KK1RoZXkgd2lsbCBmYWlsIGlmIGVpdGhlciBvZiB0aGUgZGltZW5zaW9ucyBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sCitvciBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgKHJlKWFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgd2luZG93cy4KKy5TSCBOT1RFUworV2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHN1cHBvcnQgYSBzaWduYWwgaGFuZGxlcgorKGkuZS4sIGZvciBTSUdXSU5DSCksIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGF2b2lkIGludm9raW5nIHRoZW0gaW4gYQorY29udGV4dCB3aGVyZSBcZkJtYWxsb2NcZlIgb3IgXGZCcmVhbGxvY1xmUiBtYXkgaGF2ZSBiZWVuIGludGVycnVwdGVkLAorc2luY2UgaXQgdXNlcyB0aG9zZSBmdW5jdGlvbnMuCisuUFAKK0lmIG5jdXJzZXMgaXMgY29uZmlndXJlZCB0byBzdXBwbHkgaXRzIG93biBTSUdXSU5DSCBoYW5kbGVyLAordGhlIFxmQnJlc2l6ZXRlcm1cZlIgZnVuY3Rpb24gdW5nZXRjaCdzIGEgXGZCS0VZX1JFU0laRVxmUiB3aGljaAord2lsbCBiZSByZWFkIG9uIHRoZSBuZXh0IGNhbGwgdG8gXGZCZ2V0Y2hcZlIuCitUaGlzIGlzIHVzZWQgdG8gYWxlcnQgYW4gYXBwbGljYXRpb24gdGhhdCB0aGUgc2NyZWVuIHNpemUgaGFzIGNoYW5nZWQsCithbmQgdGhhdCBpdCBzaG91bGQgcmVwYWludCBzcGVjaWFsIGZlYXR1cmVzIHN1Y2ggYXMgcGFkcyB0aGF0IGNhbm5vdAorYmUgZG9uZSBhdXRvbWF0aWNhbGx5LgorLlBQCitJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFxmQkxJTkVTXGZQIG9yIFxmQkNPTFVNTlNcZlAgYXJlIHNldCwKK3RoaXMgb3ZlcnJpZGVzIHRoZSBsaWJyYXJ5J3MgdXNlIG9mIHRoZSB3aW5kb3cgc2l6ZSBvYnRhaW5lZCBmcm9tCit0aGUgb3BlcmF0aW5nIHN5c3RlbS4KK1RodXMsIGV2ZW4gaWYgYSBTSUdXSU5DSCBpcyByZWNlaXZlZCwKK25vIHNjcmVlbiBzaXplIGNoYW5nZSBtYXkgYmUgcmVjb3JkZWQuCitJbiB0aGF0IGNhc2UsIG5vIFxmQktFWV9SRVNJWkVcZlAgaXMgcXVldWVkIGZvciB0aGUgbmV4dCBjYWxsIHRvIFxmQmdldGNoXGZQOworYW4gXGZCRVJSXGZQIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZC4KKy5TSCBTRUUgQUxTTworXGZCd3Jlc2l6ZVxmUigzWCkuCisuU0ggQVVUSE9SCitUaG9tYXMgRGlja2V5IChmcm9tIGFuIGVxdWl2YWxlbnQgZnVuY3Rpb24gd3JpdHRlbiBpbiAxOTg4IGZvciBCU0QgY3Vyc2VzKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3Rlcm0uNSBiL21hbi90ZXJtLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhZjYyYQotLS0gL2Rldi9udWxsCisrKyBiL21hbi90ZXJtLjUKQEAgLTAsMCArMSwyODMgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogdGVybS41LHYgMS4xOSAyMDA2LzEyLzI0IDE4OjEyOjM4IHRvbSBFeHAgJAorLlRIIHRlcm0gNQorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK3Rlcm0gXC0gZm9ybWF0IG9mIGNvbXBpbGVkIHRlcm0gZmlsZS4KKy5TSCBTWU5PUFNJUworLkIgdGVybQorLlNIIERFU0NSSVBUSU9OCisuU1MgU1RPUkFHRSBMT0NBVElPTgorQ29tcGlsZWQgdGVybWluZm8gZGVzY3JpcHRpb25zIGFyZSBwbGFjZWQgdW5kZXIgdGhlIGRpcmVjdG9yeSBcZkJcKmRcZlAuCitUd28gY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZCAod2hlbiBidWlsZGluZyB0aGUgbmN1cnNlcyBsaWJyYXJpZXMpOgorLlRQIDUKKy5CIGRpcmVjdG9yeSB0cmVlCitBIHR3by1sZXZlbCBzY2hlbWUgaXMgdXNlZCB0byBhdm9pZCBhIGxpbmVhciBzZWFyY2gKK29mIGEgaHVnZSBccy0xVU5JWFxzKzEgc3lzdGVtIGRpcmVjdG9yeTogXGZCXCpkL2MvbmFtZVxmUCB3aGVyZQorLkkgbmFtZQoraXMgdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsLCBhbmQKKy5JIGMKK2lzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKKy5JUiBuYW1lIC4KK1RodXMsCisuSSBhY3Q0CitjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgXGZCXCpkL2EvYWN0NFxmUC4KK1N5bm9ueW1zIGZvciB0aGUgc2FtZSB0ZXJtaW5hbCBhcmUgaW1wbGVtZW50ZWQgYnkgbXVsdGlwbGUKK2xpbmtzIHRvIHRoZSBzYW1lIGNvbXBpbGVkIGZpbGUuCisuVFAgNQorLkIgaGFzaGVkIGRhdGFiYXNlCitVc2luZyBCZXJrZWxleSBkYXRhYmFzZSwgdHdvIHR5cGVzIG9mIHJlY29yZHMgYXJlIHN0b3JlZDoKK3RoZSB0ZXJtaW5mbyBkYXRhIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBzdG9yZWQgaW4gYSBkaXJlY3RvcnkgdHJlZSB3aXRoCit0aGUgdGVybWluZm8ncyBwcmltYXJ5IG5hbWUgYXMgYSBrZXksCithbmQgcmVjb3JkcyBjb250YWluaW5nIG9ubHkgYWxpYXNlcyBwb2ludGluZyB0byB0aGUgcHJpbWFyeSBuYW1lLgorLklQCitJZiBidWlsdCB0byB3cml0ZSBoYXNoZWQgZGF0YWJhc2VzLAorbmN1cnNlcyBjYW4gc3RpbGwgcmVhZCB0ZXJtaW5mbyBkYXRhYmFzZXMgb3JnYW5pemVkIGFzIGEgZGlyZWN0b3J5IHRyZWUsCitidXQgY2Fubm90IHdyaXRlIGVudHJpZXMgaW50byB0aGUgZGlyZWN0b3J5IHRyZWUuCitJdCBjYW4gd3JpdGUgKG9yIHJld3JpdGUpIGVudHJpZXMgaW4gdGhlIGhhc2hlZCBkYXRhYmFzZS4KKy5JUAorbmN1cnNlcyBkaXN0aW5ndWlzaGVzIHRoZSB0d28gY2FzZXMgaW4gdGhlIFRFUk1JTkZPIGFuZCBURVJNSU5GT19ESVJTCitlbnZpcm9ubWVudCB2YXJpYWJsZSBieSBhc3N1bWluZyBhIGRpcmVjdG9yeSB0cmVlIGZvciBlbnRyaWVzIHRoYXQKK2NvcnJlc3BvbmQgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LAorYW5kIGhhc2hlZCBkYXRhYmFzZSBvdGhlcndpc2UuCisuU1MgU1RPUkFHRSBGT1JNQVQKK1RoZSBmb3JtYXQgaGFzIGJlZW4gY2hvc2VuIHNvIHRoYXQgaXQgd2lsbCBiZSB0aGUgc2FtZSBvbiBhbGwgaGFyZHdhcmUuCitBbiA4IG9yIG1vcmUgYml0IGJ5dGUgaXMgYXNzdW1lZCwgYnV0IG5vIGFzc3VtcHRpb25zIGFib3V0IGJ5dGUgb3JkZXJpbmcKK29yIHNpZ24gZXh0ZW5zaW9uIGFyZSBtYWRlLgorLlBQCitUaGUgY29tcGlsZWQgZmlsZSBpcyBjcmVhdGVkIHdpdGggdGhlCisuQiBAVElDQAorcHJvZ3JhbSwgYW5kIHJlYWQgYnkgdGhlIHJvdXRpbmUKKy5JUiBzZXR1cHRlcm0gLgorVGhlIGZpbGUgaXMgZGl2aWRlZCBpbnRvIHNpeCBwYXJ0czoKK3RoZSBoZWFkZXIsCit0ZXJtaW5hbCBuYW1lcywKK2Jvb2xlYW4gZmxhZ3MsCitudW1iZXJzLAorc3RyaW5ncywKK2FuZAorc3RyaW5nIHRhYmxlLgorLlBQCitUaGUgaGVhZGVyIHNlY3Rpb24gYmVnaW5zIHRoZSBmaWxlLgorVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHNpeCBzaG9ydCBpbnRlZ2VycyBpbiB0aGUgZm9ybWF0CitkZXNjcmliZWQgYmVsb3cuCitUaGVzZSBpbnRlZ2VycyBhcmUKKy5SUyA1CisuVFAgNQorKDEpIHRoZSBtYWdpYyBudW1iZXIgKG9jdGFsIDA0MzIpOworLlRQIDUKKygyKSB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBuYW1lcyBzZWN0aW9uOworLlRQIDUKKygzKSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBib29sZWFuIHNlY3Rpb247CisuVFAgNQorKDQpIHRoZSBudW1iZXIgb2Ygc2hvcnQgaW50ZWdlcnMgaW4gdGhlIG51bWJlcnMgc2VjdGlvbjsKKy5UUCA1CisoNSkgdGhlIG51bWJlciBvZiBvZmZzZXRzIChzaG9ydCBpbnRlZ2VycykgaW4gdGhlIHN0cmluZ3Mgc2VjdGlvbjsKKy5UUCA1CisoNikgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgc3RyaW5nIHRhYmxlLgorLlJFCisuUFAKK1Nob3J0IGludGVnZXJzIGFyZSBzdG9yZWQgaW4gdHdvIDgtYml0IGJ5dGVzLgorVGhlIGZpcnN0IGJ5dGUgY29udGFpbnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IDggYml0cyBvZiB0aGUgdmFsdWUsCithbmQgdGhlIHNlY29uZCBieXRlIGNvbnRhaW5zIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cy4KKyhUaHVzLCB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgaXMgMjU2KnNlY29uZCtmaXJzdC4pCitUaGUgdmFsdWUgLTEgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHR3byBieXRlcyAwMzc3LCAwMzc3OyBvdGhlciBuZWdhdGl2ZQordmFsdWVzIGFyZSBpbGxlZ2FsLiBUaGlzIHZhbHVlIGdlbmVyYWxseQorbWVhbnMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBjYXBhYmlsaXR5IGlzIG1pc3NpbmcgZnJvbSB0aGlzIHRlcm1pbmFsLgorTm90ZSB0aGF0IHRoaXMgZm9ybWF0IGNvcnJlc3BvbmRzIHRvIHRoZSBoYXJkd2FyZSBvZiB0aGUgXHMtMVZBWFxzKzEKK2FuZCBccy0xUERQXHMrMS0xMSAodGhhdCBpcywgbGl0dGxlLWVuZGlhbiBtYWNoaW5lcykuCitNYWNoaW5lcyB3aGVyZSB0aGlzIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gdGhlIGhhcmR3YXJlIG11c3QgcmVhZCB0aGUKK2ludGVnZXJzIGFzIHR3byBieXRlcyBhbmQgY29tcHV0ZSB0aGUgbGl0dGxlLWVuZGlhbiB2YWx1ZS4KKy5QUAorVGhlIHRlcm1pbmFsIG5hbWVzIHNlY3Rpb24gY29tZXMgbmV4dC4KK0l0IGNvbnRhaW5zIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXJtaW5mbyBkZXNjcmlwdGlvbiwKK2xpc3RpbmcgdGhlIHZhcmlvdXMgbmFtZXMgZm9yIHRoZSB0ZXJtaW5hbCwKK3NlcGFyYXRlZCBieSB0aGUgYHwnIGNoYXJhY3Rlci4KK1RoZSBzZWN0aW9uIGlzIHRlcm1pbmF0ZWQgd2l0aCBhbiBccy0xQVNDSUkgTlVMXHMrMSBjaGFyYWN0ZXIuCisuUFAKK1RoZSBib29sZWFuIGZsYWdzIGhhdmUgb25lIGJ5dGUgZm9yIGVhY2ggZmxhZy4KK1RoaXMgYnl0ZSBpcyBlaXRoZXIgMCBvciAxIGFzIHRoZSBmbGFnIGlzIHByZXNlbnQgb3IgYWJzZW50LgorVGhlIGNhcGFiaWxpdGllcyBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGZpbGUgPHRlcm0uaD4uCisuUFAKK0JldHdlZW4gdGhlIGJvb2xlYW4gc2VjdGlvbiBhbmQgdGhlIG51bWJlciBzZWN0aW9uLAorYSBudWxsIGJ5dGUgd2lsbCBiZSBpbnNlcnRlZCwgaWYgbmVjZXNzYXJ5LAordG8gZW5zdXJlIHRoYXQgdGhlIG51bWJlciBzZWN0aW9uIGJlZ2lucyBvbiBhbiBldmVuIGJ5dGUgKHRoaXMgaXMgYQorcmVsaWMgb2YgdGhlIFBEUC0xMSdzIHdvcmQtYWRkcmVzc2VkIGFyY2hpdGVjdHVyZSwgb3JpZ2luYWxseQorZGVzaWduZWQgaW4gdG8gYXZvaWQgSU9UIHRyYXBzIGluZHVjZWQgYnkgYWRkcmVzc2luZyBhIHdvcmQgb24gYW4KK29kZCBieXRlIGJvdW5kYXJ5KS4KK0FsbCBzaG9ydCBpbnRlZ2VycyBhcmUgYWxpZ25lZCBvbiBhIHNob3J0IHdvcmQgYm91bmRhcnkuCisuUFAKK1RoZSBudW1iZXJzIHNlY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgZmxhZ3Mgc2VjdGlvbi4KK0VhY2ggY2FwYWJpbGl0eSB0YWtlcyB1cCB0d28gYnl0ZXMsCithbmQgaXMgc3RvcmVkIGFzIGEgbGl0dGxlLWVuZGlhbiBzaG9ydCBpbnRlZ2VyLgorSWYgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGlzIC0xLCB0aGUgY2FwYWJpbGl0eSBpcyB0YWtlbiB0byBiZSBtaXNzaW5nLgorLlBQCitUaGUgc3RyaW5ncyBzZWN0aW9uIGlzIGFsc28gc2ltaWxhci4KK0VhY2ggY2FwYWJpbGl0eSBpcyBzdG9yZWQgYXMgYSBzaG9ydCBpbnRlZ2VyLCBpbiB0aGUgZm9ybWF0IGFib3ZlLgorQSB2YWx1ZSBvZiAtMSBtZWFucyB0aGUgY2FwYWJpbGl0eSBpcyBtaXNzaW5nLgorT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgdGFrZW4gYXMgYW4gb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZworb2YgdGhlIHN0cmluZyB0YWJsZS4KK1NwZWNpYWwgY2hhcmFjdGVycyBpbiBeWCBvciBcZWMgbm90YXRpb24gYXJlIHN0b3JlZCBpbiB0aGVpcgoraW50ZXJwcmV0ZWQgZm9ybSwgbm90IHRoZSBwcmludGluZyByZXByZXNlbnRhdGlvbi4KK1BhZGRpbmcgaW5mb3JtYXRpb24gJDxubj4gYW5kIHBhcmFtZXRlciBpbmZvcm1hdGlvbiAleCBhcmUKK3N0b3JlZCBpbnRhY3QgaW4gdW5pbnRlcnByZXRlZCBmb3JtLgorLlBQCitUaGUgZmluYWwgc2VjdGlvbiBpcyB0aGUgc3RyaW5nIHRhYmxlLgorSXQgY29udGFpbnMgYWxsIHRoZSB2YWx1ZXMgb2Ygc3RyaW5nIGNhcGFiaWxpdGllcyByZWZlcmVuY2VkIGluCit0aGUgc3RyaW5nIHNlY3Rpb24uCitFYWNoIHN0cmluZyBpcyBudWxsIHRlcm1pbmF0ZWQuCisuU1MgRVhURU5ERUQgU1RPUkFHRSBGT1JNQVQKK1RoZSBwcmV2aW91cyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgY29udmVudGlvbmFsIHRlcm1pbmZvIGJpbmFyeSBmb3JtYXQuCitXaXRoIHNvbWUgbWlub3IgdmFyaWF0aW9ucyBvZiB0aGUgb2Zmc2V0cyAoc2VlIFBPUlRBQklMSVRZKSwKK3RoZSBzYW1lIGJpbmFyeSBmb3JtYXQgaXMgdXNlZCBpbiBhbGwgbW9kZXJuIFVOSVggc3lzdGVtcy4KK0VhY2ggc3lzdGVtIHVzZXMgYSBwcmVkZWZpbmVkIHNldCBvZiBib29sZWFuLCBudW1iZXIgb3Igc3RyaW5nIGNhcGFiaWxpdGllcy4KKy5QUAorVGhlIG5jdXJzZXMgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgc3VwcG9ydCBleHRlbmRlZCB0ZXJtaW5mbyBiaW5hcnkgZm9ybWF0LAorYWxsb3dpbmcgdXNlcnMgdG8gZGVmaW5lIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgbG9hZGVkIGF0IHJ1bnRpbWUuICBUaGlzCitleHRlbnNpb24gaXMgbWFkZSBwb3NzaWJsZSBieSB1c2luZyB0aGUgZmFjdCB0aGF0IHRoZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMKK3N0b3AgcmVhZGluZyB0aGUgdGVybWluZm8gZGF0YSB3aGVuIHRoZXkgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNpemUgZ2l2ZW4KK2luIHRoZSBoZWFkZXIuCituY3Vyc2VzIGNoZWNrcyB0aGUgc2l6ZSwgYW5kIGlmIGl0IGV4Y2VlZHMgdGhhdCBkdWUgdG8gdGhlIHByZWRlZmluZWQgZGF0YSwKK2NvbnRpbnVlcyB0byBwYXJzZSBhY2NvcmRpbmcgdG8gaXRzIG93biBzY2hlbWUuCisuUFAKK0ZpcnN0LCBpdCByZWFkcyB0aGUgZXh0ZW5kZWQgaGVhZGVyICg1IHNob3J0IGludGVnZXJzKToKKy5SUyA1CisuVFAgNQorKDEpCitjb3VudCBvZiBleHRlbmRlZCBib29sZWFuIGNhcGFiaWxpdGllcworLlRQIDUKKygyKQorY291bnQgb2YgZXh0ZW5kZWQgbnVtZXJpYyBjYXBhYmlsaXRpZXMKKy5UUCA1CisoMykKK2NvdW50IG9mIGV4dGVuZGVkIHN0cmluZyBjYXBhYmlsaXRpZXMKKy5UUCA1CisoNCkKK3NpemUgb2YgdGhlIGV4dGVuZGVkIHN0cmluZyB0YWJsZSBpbiBieXRlcy4KKy5UUCA1CisoNSkKK2xhc3Qgb2Zmc2V0IG9mIHRoZSBleHRlbmRlZCBzdHJpbmcgdGFibGUgaW4gYnl0ZXMuCisuUkUKKy5QUAorVXNpbmcgdGhlIGNvdW50cyBhbmQgc2l6ZXMsIG5jdXJzZXMgYWxsb2NhdGVzIGFycmF5cyBhbmQgcmVhZHMgZGF0YQorZm9yIHRoZSBleHRlbmRlZCBjYXBhYmlsdGllcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgaGVhZGVyIGluZm9ybWF0aW9uLgorLlBQCitUaGUgZXh0ZW5kZWQgc3RyaW5nIHRhYmxlIGNvbnRhaW5zIHZhbHVlcyBmb3Igc3RyaW5nIGNhcGFiaWxpdGllcy4KK0FmdGVyIHRoZSBlbmQgb2YgdGhlc2UgdmFsdWVzLCBpdCBjb250YWlucyB0aGUgbmFtZXMgZm9yIGVhY2ggb2YKK3RoZSBleHRlbmRlZCBjYXBhYmlsaXRpZXMgaW4gb3JkZXIsIGUuZy4sIGJvb2xlYW5zLCB0aGVuIG51bWJlcnMgYW5kCitmaW5hbGx5IHN0cmluZ3MuCisuCisuU0ggUE9SVEFCSUxJVFkKK05vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IKKy5JIHNldHVwdGVybQordG8gZXhwZWN0IGEgZGlmZmVyZW50IHNldCBvZiBjYXBhYmlsaXRpZXMKK3RoYW4gYXJlIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIGZpbGUuCitFaXRoZXIgdGhlIGRhdGFiYXNlIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBzaW5jZQorLkkgc2V0dXB0ZXJtCitoYXMgYmVlbiByZWNvbXBpbGVkCisocmVzdWx0aW5nIGluIGV4dHJhIHVucmVjb2duaXplZCBlbnRyaWVzIGluIHRoZSBmaWxlKQorb3IgdGhlIHByb2dyYW0gbWF5IGhhdmUgYmVlbiByZWNvbXBpbGVkIG1vcmUgcmVjZW50bHkKK3RoYW4gdGhlIGRhdGFiYXNlIHdhcyB1cGRhdGVkCisocmVzdWx0aW5nIGluIG1pc3NpbmcgZW50cmllcykuCitUaGUgcm91dGluZQorLkkgc2V0dXB0ZXJtCittdXN0IGJlIHByZXBhcmVkIGZvciBib3RoIHBvc3NpYmlsaXRpZXMgXC0KK3RoaXMgaXMgd2h5IHRoZSBudW1iZXJzIGFuZCBzaXplcyBhcmUgaW5jbHVkZWQuCitBbHNvLCBuZXcgY2FwYWJpbGl0aWVzIG11c3QgYWx3YXlzIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RzCitvZiBib29sZWFuLCBudW1iZXIsIGFuZCBzdHJpbmcgY2FwYWJpbGl0aWVzLgorLlBQCitEZXNwaXRlIHRoZSBjb25zaXN0ZW50IHVzZSBvZiBsaXR0bGUtZW5kaWFuIGZvciBudW1iZXJzIGFuZCB0aGUgb3RoZXJ3aXNlCitzZWxmLWRlc2NyaWJpbmcgZm9ybWF0LCBpdCBpcyBub3Qgd2lzZSB0byBjb3VudCBvbiBwb3J0YWJpbGl0eSBvZiBiaW5hcnkKK3Rlcm1pbmZvIGVudHJpZXMgYmV0d2VlbiBjb21tZXJjaWFsIFVOSVggdmVyc2lvbnMuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZXJlCithcmUgYXQgbGVhc3QgdGhyZWUgdmVyc2lvbnMgb2YgdGVybWluZm8gKHVuZGVyIEhQLVVYLCBBSVgsIGFuZCBPU0YvMSkgd2hpY2gKK2RpdmVyZ2VkIGZyb20gU3lzdGVtIFYgdGVybWluZm8gYWZ0ZXIgU1ZyMSwgYW5kIGhhdmUgYWRkZWQgZXh0ZW5zaW9uCitjYXBhYmlsaXRpZXMgdG8gdGhlIHN0cmluZyB0YWJsZSB0aGF0IChpbiB0aGUgYmluYXJ5IGZvcm1hdCkgY29sbGlkZSB3aXRoCitTeXN0ZW0gViBhbmQgWFNJIEN1cnNlcyBleHRlbnNpb25zLiAgU2VlIFxmQnRlcm1pbmZvXGZSKFwqbikgZm9yIGRldGFpbGVkCitkaXNjdXNzaW9uIG9mIHRlcm1pbmZvIHNvdXJjZSBjb21wYXRpYmlsaXR5IGlzc3Vlcy4KKy5TSCBFWEFNUExFCitBcyBhbiBleGFtcGxlLCBoZXJlIGlzIGEgaGV4IGR1bXAgb2YgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgTGVhci1TaWVnbGVyCitBRE0tMywgYSBwb3B1bGFyIHRob3VnaCByYXRoZXIgc3R1cGlkIGVhcmx5IHRlcm1pbmFsOgorLm5mCisuc3AKK2FkbTNhfGxzaSBhZG0zYSwKKyAgICAgICAgYW0sCisgICAgICAgIGNvbHMjODAsIGxpbmVzIzI0LAorICAgICAgICBiZWw9XkcsIGNsZWFyPVwwMzIkPDE+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKyAgICAgICAgY3VmMT1eTCwgY3VwPVxcRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisgICAgICAgIGhvbWU9Xl4sIGluZD1eSiwKKy5zcAorLmZ0IENXCitccy0yMDAwMCAgMWEgMDEgMTAgMDAgMDIgMDAgMDMgMDAgIDgyIDAwIDMxIDAwIDYxIDY0IDZkIDMzICAuLi4uLi4uLiAuLjEuYWRtMworMDAxMCAgNjEgN2MgNmMgNzMgNjkgMjAgNjEgNjQgIDZkIDMzIDYxIDAwIDAwIDAxIDUwIDAwICBhfGxzaSBhZCBtM2EuLi5QLgorMDAyMCAgZmYgZmYgMTggMDAgZmYgZmYgMDAgMDAgIDAyIDAwIGZmIGZmIGZmIGZmIDA0IDAwICAuLi4uLi4uLiAuLi4uLi4uLgorMDAzMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIDBhIDAwIDI1IDAwIDI3IDAwIGZmIGZmICAuLi4uLi4uLiAuLiUuJy4uLgorMDA0MCAgMjkgMDAgZmYgZmYgZmYgZmYgMmIgMDAgIGZmIGZmIDJkIDAwIGZmIGZmIGZmIGZmICApLi4uLi4rLiAuLi0uLi4uLgorMDA1MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDA2MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDA3MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDA4MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDA5MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDBhMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDBiMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDBjMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDBkMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDBlMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDBmMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDEwMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDExMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorMDEyMCAgZmYgZmYgZmYgZmYgZmYgZmYgMmYgMDAgIDA3IDAwIDBkIDAwIDFhIDI0IDNjIDMxICAuLi4uLi4vLiAuLi4uLiQ8MQorMDEzMCAgM2UgMDAgMWIgM2QgMjUgNzAgMzEgMjUgIDdiIDMzIDMyIDdkIDI1IDJiIDI1IDYzICA+Li49JXAxJSB7MzJ9JSslYworMDE0MCAgMjUgNzAgMzIgMjUgN2IgMzMgMzIgN2QgIDI1IDJiIDI1IDYzIDAwIDBhIDAwIDFlICAlcDIlezMyfSAlKyVjLi4uLgorMDE1MCAgMDAgMDggMDAgMGMgMDAgMGIgMDAgMGEgIDAwICAgICAgICAgICAgICAgICAgICAgICAuLi4uLi4uLiAuXHMrMgorLmZ0IFIKKy5maQorLnNwCisuU0ggTElNSVRTCitTb21lIGxpbWl0YXRpb25zOiB0b3RhbCBjb21waWxlZCBlbnRyaWVzIGNhbm5vdCBleGNlZWQgNDA5NiBieXRlcy4KK1RoZSBuYW1lIGZpZWxkIGNhbm5vdCBleGNlZWQgMTI4IGJ5dGVzLgorLlNIIEZJTEVTCitcKmQvKi8qCWNvbXBpbGVkIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YSBiYXNlCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQnRlcm1pbmZvXGZSKFwqbikuCisuU0ggQVVUSE9SUworVGhvbWFzIEUuIERpY2tleQorLmJyCitleHRlbmRlZCB0ZXJtaW5mbyBmb3JtYXQgZm9yIG5jdXJzZXMgNS4wCisuYnIKK2hhc2hlZCBkYXRhYmFzZSBzdXBwb3J0IGZvciBuY3Vyc2VzIDUuNgorLnNwCitFcmljIFMuIFJheW1vbmQKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3Rlcm0uNyBiL21hbi90ZXJtLjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkYTZmYgotLS0gL2Rldi9udWxsCisrKyBiL21hbi90ZXJtLjcKQEAgLTAsMCArMSwyMDQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogdGVybS43LHYgMS4xOCAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIHRlcm0gNworLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK3Rlcm0gXC0gY29udmVudGlvbnMgZm9yIG5hbWluZyB0ZXJtaW5hbCB0eXBlcworLlNIIERFU0NSSVBUSU9OCisuUFAKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNXGZSIHNob3VsZCBub3JtYWxseSBjb250YWluIHRoZSB0eXBlIG5hbWUgb2YKK3RoZSB0ZXJtaW5hbCwgY29uc29sZSBvciBkaXNwbGF5LWRldmljZSB0eXBlIHlvdSBhcmUgdXNpbmcuICBUaGlzIGluZm9ybWF0aW9uCitpcyBjcml0aWNhbCBmb3IgYWxsIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtcywgaW5jbHVkaW5nIHlvdXIgZWRpdG9yIGFuZCBtYWlsZXIuCisuUFAKK0EgZGVmYXVsdCBcZkJURVJNXGZSIHZhbHVlIHdpbGwgYmUgc2V0IG9uIGEgcGVyLWxpbmUgYmFzaXMgYnkgZWl0aGVyCitcZkIvZXRjL2luaXR0YWJcZlIgKExpbnV4IGFuZCBTeXN0ZW0tVi1saWtlIFVOSVhlcykgb3IgXGZCL2V0Yy90dHlzXGZSIChCU0QKK1VOSVhlcykuICBUaGlzIHdpbGwgbmVhcmx5IGFsd2F5cyBzdWZmaWNlIGZvciB3b3Jrc3RhdGlvbiBhbmQgbWljcm9jb21wdXRlcgorY29uc29sZXMuCisuUFAKK0lmIHlvdSB1c2UgYSBkaWFsdXAgbGluZSwgdGhlIHR5cGUgb2YgZGV2aWNlIGF0dGFjaGVkIHRvIGl0IG1heSB2YXJ5LiAgT2xkZXIKK1VOSVggc3lzdGVtcyBwcmUtc2V0IGEgdmVyeSBkdW1iIHRlcm1pbmFsIHR5cGUgbGlrZSBgZHVtYicgb3IgYGRpYWx1cCcgb24KK2RpYWx1cCBsaW5lcy4gIE5ld2VyIG9uZXMgbWF5IHByZS1zZXQgYHZ0MTAwJywgcmVmbGVjdGluZyB0aGUgcHJldmFsZW5jZSBvZiBERUMKK1ZUMTAwLWNvbXBhdGlibGUgdGVybWluYWxzIGFuZCBwZXJzb25hbC1jb21wdXRlciBlbXVsYXRvcnMuCisuUFAKK01vZGVybiB0ZWxuZXRzIHBhc3MgeW91ciBcZkJURVJNXGZSIGVudmlyb25tZW50IHZhcmlhYmxlIGZyb20gdGhlIGxvY2FsIHNpZGUgdG8KK3RoZSByZW1vdGUgb25lLiAgVGhlcmUgY2FuIGJlIHByb2JsZW1zIGlmIHRoZSByZW1vdGUgdGVybWluZm8gb3IgdGVybWNhcCBlbnRyeQorZm9yIHlvdXIgdHlwZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHlvdXJzLCBidXQgdGhpcyBzaXR1YXRpb24gaXMgcmFyZSBhbmQKK2NhbiBhbG1vc3QgYWx3YXlzIGJlIGF2b2lkZWQgYnkgZXhwbGljaXRseSBleHBvcnRpbmcgYHZ0MTAwJyAoYXNzdW1pbmcgeW91CithcmUgaW4gZmFjdCB1c2luZyBhIFZUMTAwLXN1cGVyc2V0IGNvbnNvbGUsIHRlcm1pbmFsLCBvciB0ZXJtaW5hbCBlbXVsYXRvci4pCisuUFAKK0luIGFueSBjYXNlLCB5b3UgYXJlIGZyZWUgdG8gb3ZlcnJpZGUgdGhlIHN5c3RlbSBcZkJURVJNXGZSIHNldHRpbmcgdG8geW91cgordGFzdGUgaW4geW91ciBzaGVsbCBwcm9maWxlLiAgVGhlIFxmQnRzZXRcZlAoMSkgdXRpbGl0eSBtYXkgYmUgb2YgYXNzaXN0YW5jZTsKK3lvdSBjYW4gZ2l2ZSBpdCBhIHNldCBvZiBydWxlcyBmb3IgZGVkdWNpbmcgb3IgcmVxdWVzdGluZyBhIHRlcm1pbmFsIHR5cGUgYmFzZWQKK29uIHRoZSB0dHkgZGV2aWNlIGFuZCBiYXVkIHJhdGUuCisuUFAKK1NldHRpbmcgeW91ciBvd24gXGZCVEVSTVxmUiB2YWx1ZSBtYXkgYWxzbyBiZSB1c2VmdWwgaWYgeW91IGhhdmUgY3JlYXRlZCBhCitjdXN0b20gZW50cnkgaW5jb3Jwb3JhdGluZyBvcHRpb25zIChzdWNoIGFzIHZpc3VhbCBiZWxsIG9yIHJldmVyc2UtdmlkZW8pCit3aGljaCB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGUgc3lzdGVtIGRlZmF1bHQgdHlwZSBmb3IgeW91ciBsaW5lLgorLlBQCitUZXJtaW5hbCB0eXBlIGRlc2NyaXB0aW9ucyBhcmUgc3RvcmVkIGFzIGZpbGVzIG9mIGNhcGFiaWxpdHkgZGF0YSB1bmRlcm5lYXRoCitcKmQuICBUbyBicm93c2UgYSBsaXN0IG9mIGFsbCB0ZXJtaW5hbCBuYW1lcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0sIGRvCisuc3AKKwlAVE9FQCB8IG1vcmUKKy5zcAorZnJvbSB5b3VyIHNoZWxsLiAgVGhlc2UgY2FwYWJpbGl0eSBmaWxlcyBhcmUgaW4gYSBiaW5hcnkgZm9ybWF0IG9wdGltaXplZCBmb3IKK3JldHJpZXZhbCBzcGVlZCAodW5saWtlIHRoZSBvbGQgdGV4dC1iYXNlZCBcZkJ0ZXJtY2FwXGZSIGZvcm1hdCB0aGV5IHJlcGxhY2UpOwordG8gZXhhbWluZSBhbiBlbnRyeSwgeW91IG11c3QgdXNlIHRoZSBcZkJASU5GT0NNUEBcZlIoMU0pIGNvbW1hbmQuCitJbnZva2UgaXQgYXMgZm9sbG93czoKKy5zcAorCUBJTkZPQ01QQCBcZkllbnRyeS1uYW1lXGZSCisuc3AKK3doZXJlIFxmSWVudHJ5LW5hbWVcZlIgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUgeW91IHdpc2ggdG8gZXhhbWluZSAoYW5kIHRoZQorbmFtZSBvZiBpdHMgY2FwYWJpbGl0eSBmaWxlIHRoZSBzdWJkaXJlY3Rvcnkgb2YgXCpkIG5hbWVkIGZvciBpdHMgZmlyc3QKK2xldHRlcikuICBUaGlzIGNvbW1hbmQgZHVtcHMgYSBjYXBhYmlsaXR5IGZpbGUgaW4gdGhlIHRleHQgZm9ybWF0IGRlc2NyaWJlZCBieQorXGZCdGVybWluZm9cZlIoXCpuKS4KKy5QUAorVGhlIGZpcnN0IGxpbmUgb2YgYSBcZkJ0ZXJtaW5mb1xmUihcKm4pIGRlc2NyaXB0aW9uIGdpdmVzIHRoZSBuYW1lcyBieSB3aGljaAordGVybWluZm8ga25vd3MgYSB0ZXJtaW5hbCwgc2VwYXJhdGVkIGJ5IGB8JyAocGlwZS1iYXIpIGNoYXJhY3RlcnMgd2l0aCB0aGUgbGFzdAorbmFtZSBmaWVsZCB0ZXJtaW5hdGVkIGJ5IGEgY29tbWEuICBUaGUgZmlyc3QgbmFtZSBmaWVsZCBpcyB0aGUgdHlwZSdzCitcZklwcmltYXJ5IG5hbWVcZlIsIGFuZCBpcyB0aGUgb25lIHRvIHVzZSB3aGVuIHNldHRpbmcgXGZCVEVSTVxmUi4gIFRoZSBsYXN0CituYW1lIGZpZWxkIChpZiBkaXN0aW5jdCBmcm9tIHRoZSBmaXJzdCkgaXMgYWN0dWFsbHkgYSBkZXNjcmlwdGlvbiBvZiB0aGUKK3Rlcm1pbmFsIHR5cGUgKGl0IG1heSBjb250YWluIGJsYW5rczsgdGhlIG90aGVycyBtdXN0IGJlIHNpbmdsZSB3b3JkcykuICBOYW1lCitmaWVsZHMgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIGxhc3QgKGlmIHByZXNlbnQpIGFyZSBhbGlhc2VzIGZvciB0aGUgdGVybWluYWwsCit1c3VhbGx5IGhpc3RvcmljYWwgbmFtZXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCisuUFAKK1RoZXJlIGFyZSBzb21lIGNvbnZlbnRpb25zIGZvciBob3cgdG8gY2hvb3NlIHRlcm1pbmFsIHByaW1hcnkgbmFtZXMgdGhhdCBoZWxwCitrZWVwIHRoZW0gaW5mb3JtYXRpdmUgYW5kIHVuaXF1ZS4gIEhlcmUgaXMgYSBzdGVwLWJ5LXN0ZXAgZ3VpZGUgdG8gbmFtaW5nCit0ZXJtaW5hbHMgdGhhdCBhbHNvIGV4cGxhaW5zIGhvdyB0byBwYXJzZSB0aGVtOgorLlBQCitGaXJzdCwgY2hvb3NlIGEgcm9vdCBuYW1lLiAgVGhlIHJvb3Qgd2lsbCBjb25zaXN0IG9mIGEgbG93ZXItY2FzZSBsZXR0ZXIKK2ZvbGxvd2VkIGJ5IHVwIHRvIHNldmVuIGxvd2VyLWNhc2UgbGV0dGVycyBvciBkaWdpdHMuICBZb3UgbmVlZCB0byBhdm9pZCB1c2luZworcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiByb290IG5hbWVzLCBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYW5kIGludGVycHJldGVkIGFzCitmaWxlbmFtZXMgYW5kIHNoZWxsIG1ldGEtY2hhcmFjdGVycyAoc3VjaCBhcyAhLCAkLCAqLCA/LCBldGMuKSBlbWJlZGRlZCBpbiB0aGVtCittYXkgY2F1c2Ugb2RkIGFuZCB1bmhlbHBmdWwgYmVoYXZpb3IuICBUaGUgc2xhc2ggKC8pLCBvciBhbnkgb3RoZXIgY2hhcmFjdGVyCit0aGF0IG1heSBiZSBpbnRlcnByZXRlZCBieSBhbnlvbmUncyBmaWxlIHN5c3RlbSAoXGUsICQsIFssIF0pLCBpcyBlc3BlY2lhbGx5CitkYW5nZXJvdXMgKHRlcm1pbmZvIGlzIHBsYXRmb3JtLWluZGVwZW5kZW50LCBhbmQgY2hvb3NpbmcgbmFtZXMgd2l0aCBzcGVjaWFsCitjaGFyYWN0ZXJzIGNvdWxkIHNvbWVkYXkgbWFrZSBsaWZlIGRpZmZpY3VsdCBmb3IgdXNlcnMgb2YgYSBmdXR1cmUgcG9ydCkuICBUaGUKK2RvdCAoLikgY2hhcmFjdGVyIGlzIHJlbGF0aXZlbHkgc2FmZSBhcyBsb25nIGFzIHRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlciByb290CituYW1lOyBzb21lIGhpc3RvcmljYWwgdGVybWluZm8gbmFtZXMgdXNlIGl0LgorLlBQCitUaGUgcm9vdCBuYW1lIGZvciBhIHRlcm1pbmFsIG9yIHdvcmtzdGF0aW9uIGNvbnNvbGUgdHlwZSBzaG91bGQgYWxtb3N0IGFsd2F5cworYmVnaW4gd2l0aCBhIHZlbmRvciBwcmVmaXggKHN1Y2ggYXMgXGZCaHBcZlIgZm9yIEhld2xldHQtUGFja2FyZCwgXGZCd3lcZlIgZm9yCitXeXNlLCBvciBcZkJhdHRcZlIgZm9yIEFUJlQgdGVybWluYWxzKSwgb3IgYSBjb21tb24gbmFtZSBvZiB0aGUgdGVybWluYWwgbGluZQorKFxmQnZ0XGZSIGZvciB0aGUgVlQgc2VyaWVzIG9mIHRlcm1pbmFscyBmcm9tIERFQywgb3IgXGZCc3VuXGZSIGZvciBTdW4KK01pY3Jvc3lzdGVtcyB3b3Jrc3RhdGlvbiBjb25zb2xlcywgb3IgXGZCcmVnZW50XGZSIGZvciB0aGUgQUREUyBSZWdlbnQgc2VyaWVzLgorWW91IGNhbiBsaXN0IHRoZSB0ZXJtaW5mbyB0cmVlIHRvIHNlZSB3aGF0IHByZWZpeGVzIGFyZSBhbHJlYWR5IGluIGNvbW1vbiB1c2UuCitUaGUgcm9vdCBuYW1lIHByZWZpeCBzaG91bGQgYmUgZm9sbG93ZWQgd2hlbiBhcHByb3ByaWF0ZSBieSBhIG1vZGVsIG51bWJlcjsKK3RodXMgXGZCdnQxMDBcZlIsIFxmQmhwMjYyMVxmUiwgXGZCd3k1MFxmUi4KKy5QUAorVGhlIHJvb3QgbmFtZSBmb3IgYSBQQy1Vbml4IGNvbnNvbGUgdHlwZSBzaG91bGQgYmUgdGhlIE9TIG5hbWUsCitpLmUuIFxmQmxpbnV4XGZSLCBcZkJic2Rvc1xmUiwgXGZCZnJlZWJzZFxmUiwgXGZCbmV0YnNkXGZSLiAgSXQgc2hvdWxkCitcZklub3RcZlIgYmUgXGZCY29uc29sZVxmUiBvciBhbnkgb3RoZXIgZ2VuZXJpYyB0aGF0IG1pZ2h0IGNhdXNlIGNvbmZ1c2lvbiBpbiBhCittdWx0aS1wbGF0Zm9ybSBlbnZpcm9ubWVudCEgIElmIGEgbW9kZWwgbnVtYmVyIGZvbGxvd3MsIGl0IHNob3VsZCBpbmRpY2F0ZQorZWl0aGVyIHRoZSBPUyByZWxlYXNlIGxldmVsIG9yIHRoZSBjb25zb2xlIGRyaXZlciByZWxlYXNlIGxldmVsLgorLlBQCitUaGUgcm9vdCBuYW1lIGZvciBhIHRlcm1pbmFsIGVtdWxhdG9yIChhc3N1bWluZyBpdCBkb2VzIG5vdCBmaXQgb25lIG9mIHRoZQorc3RhbmRhcmQgQU5TSSBvciB2dDEwMCB0eXBlcykgc2hvdWxkIGJlIHRoZSBwcm9ncmFtIG5hbWUgb3IgYSByZWFkaWx5CityZWNvZ25pemFibGUgYWJicmV2aWF0aW9uIG9mIGl0IChpLmUuIFxmQnZlcnNhdGVybVxmUiwgXGZCY3RybVxmUikuCisuUFAKK0ZvbGxvd2luZyB0aGUgcm9vdCBuYW1lLCB5b3UgbWF5IGFkZCBhbnkgcmVhc29uYWJsZSBudW1iZXIgb2YgaHlwaGVuLXNlcGFyYXRlZAorZmVhdHVyZSBzdWZmaXhlcy4KKy5UUCA1CisycAorSGFzIHR3byBwYWdlcyBvZiBtZW1vcnkuICBMaWtld2lzZSA0cCwgOHAsIGV0Yy4KKy5UUCA1CittYworTWFnaWMtY29va2llLiAgU29tZSB0ZXJtaW5hbHMgKG5vdGFibHkgb2xkZXIgV3lzZXMpIGNhbiBvbmx5IHN1cHBvcnQgb25lCithdHRyaWJ1dGUgd2l0aG91dCBtYWdpYy1jb29raWUgbG9zc2FnZS4gIFRoZWlyIGJhc2UgZW50cnkgaXMgdXN1YWxseSBwYWlyZWQKK3dpdGggYW5vdGhlciB0aGF0IGhhcyB0aGlzIHN1ZmZpeCBhbmQgdXNlcyBtYWdpYyBjb29raWVzIHRvIHN1cHBvcnQgbXVsdGlwbGUKK2F0dHJpYnV0ZXMuCisuVFAgNQorLWFtCitFbmFibGUgYXV0by1tYXJnaW4gKHJpZ2h0LW1hcmdpbiB3cmFwYXJvdW5kKS4KKy5UUCA1CistbQorTW9ubyBtb2RlIC0gc3VwcHJlc3MgY29sb3Igc3VwcG9ydC4KKy5UUCA1CistbmEKK05vIGFycm93IGtleXMgLSB0ZXJtY2FwIGlnbm9yZXMgYXJyb3cga2V5cyB3aGljaCBhcmUgYWN0dWFsbHkgdGhlcmUgb24gdGhlCit0ZXJtaW5hbCwgc28gdGhlIHVzZXIgY2FuIHVzZSB0aGUgYXJyb3cga2V5cyBsb2NhbGx5LgorLlRQIDUKKy1uYW0KK05vIGF1dG8tbWFyZ2luIC0gc3VwcHJlc3MgYW0gY2FwYWJpbGl0eS4KKy5UUCA1CistbmwKK05vIGxhYmVscyAtIHN1cHByZXNzIHNvZnQgbGFiZWxzLgorLlRQIDUKKy1uc2wKK05vIHN0YXR1cyBsaW5lIC0gc3VwcHJlc3Mgc3RhdHVzIGxpbmUuCisuVFAgNQorLXBwCitIYXMgYSBwcmludGVyIHBvcnQgd2hpY2ggaXMgdXNlZC4KKy5UUCA1CistcnYKK1Rlcm1pbmFsIGluIHJldmVyc2UgdmlkZW8gbW9kZSAoYmxhY2sgb24gd2hpdGUpLgorLlRQIDUKKy1zCitFbmFibGUgc3RhdHVzIGxpbmUuCisuVFAgNQorLXZiCitVc2UgdmlzaWJsZSBiZWxsIChmbGFzaCkgcmF0aGVyIHRoYW4gYmVlcC4KKy5UUCA1CistdworV2lkZTsgdGVybWluYWwgaXMgaW4gMTMyIGNvbHVtbiBtb2RlLgorLlBQCitDb252ZW50aW9uYWxseSwgaWYgeW91ciB0ZXJtaW5hbCB0eXBlIGlzIGEgdmFyaWFudCBpbnRlbmRlZCB0byBzcGVjaWZ5IGEKK2xpbmUgaGVpZ2h0LCB0aGF0IHN1ZmZpeCBzaG91bGQgZ28gZmlyc3QuICBTbywgZm9yIGEgaHlwb3RoZXRpY2FsIEZ1QmFyQ28KK21vZGVsIDIzMTcgdGVybWluYWwgaW4gMzAtbGluZSBtb2RlIHdpdGggcmV2ZXJzZSB2aWRlbywgYmVzdCBmb3JtIHdvdWxkIGJlCitcZkJmdWJhci0zMC1ydlxmUiAocmF0aGVyIHRoYW4sIHNheSwgYGZ1YmFyLXJ2LTMwJykuCisuUFAKK1Rlcm1pbmFsIHR5cGVzIHRoYXQgYXJlIHdyaXR0ZW4gbm90IGFzIHN0YW5kYWxvbmUgZW50cmllcywgYnV0IHJhdGhlciBhcworY29tcG9uZW50cyB0byBiZSBwbHVnZ2VkIGludG8gb3RoZXIgZW50cmllcyB2aWEgXGZCdXNlXGZQIGNhcGFiaWxpdGllcywKK2FyZSBkaXN0aW5ndWlzaGVkIGJ5IHVzaW5nIGVtYmVkZGVkIHBsdXMgc2lnbnMgcmF0aGVyIHRoYW4gZGFzaGVzLgorLlBQCitDb21tYW5kcyB3aGljaCB1c2UgYSB0ZXJtaW5hbCB0eXBlIHRvIGNvbnRyb2wgZGlzcGxheSBvZnRlbiBhY2NlcHQgYSAtVAorb3B0aW9uIHRoYXQgYWNjZXB0cyBhIHRlcm1pbmFsIG5hbWUgYXJndW1lbnQuICBTdWNoIHByb2dyYW1zIHNob3VsZCBmYWxsIGJhY2sKK29uIHRoZSBcZkJURVJNXGZSIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gbm8gLVQgb3B0aW9uIGlzIHNwZWNpZmllZC4KKy5TSCBQT1JUQUJJTElUWQorRm9yIG1heGltdW0gY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFN5c3RlbSBWIFVOSVhlcywgbmFtZXMgYW5kIGFsaWFzZXMKK3Nob3VsZCBiZSB1bmlxdWUgd2l0aGluIHRoZSBmaXJzdCAxNCBjaGFyYWN0ZXJzLgorLlNIIEZJTEVTCisuVFAgNQorXCpkLz8vKgorY29tcGlsZWQgdGVybWluYWwgY2FwYWJpbGl0eSBkYXRhIGJhc2UKKy5UUCA1CisvZXRjL2luaXR0YWIKK3R0eSBsaW5lIGluaXRpYWxpemF0aW9uIChBVCZULWxpa2UgVU5JWGVzKQorLlRQIDUKKy9ldGMvdHR5cwordHR5IGxpbmUgaW5pdGlhbGl6YXRpb24gKEJTRC1saWtlIFVOSVhlcykKKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCdGVybWluZm9cZlIoXCpuKSwgXGZCdGVybVxmUihcKm4pLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vdGVybWluZm8uaGVhZCBiL21hbi90ZXJtaW5mby5oZWFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NTU2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vdGVybWluZm8uaGVhZApAQCAtMCwwICsxLDEwNyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiB0ZXJtaW5mby5oZWFkLHYgMS4xNiAyMDA3LzAzLzA0IDAwOjA5OjQ2IHRvbSBFeHAgJAorLlRIIHRlcm1pbmZvIDUgIiIgIiIgIkZpbGUgRm9ybWF0cyIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCit0ZXJtaW5mbyBcLSB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGEgYmFzZQorLlNIIFNZTk9QU0lTCitcKmQvKi8qCisuU0ggREVTQ1JJUFRJT04KKy5JIFRlcm1pbmZvCitpcyBhIGRhdGEgYmFzZSBkZXNjcmliaW5nIHRlcm1pbmFscywgdXNlZCBieSBzY3JlZW4tb3JpZW50ZWQgcHJvZ3JhbXMgc3VjaCBhcworXGZCbnZpXGZSKDEpLAorXGZCcm9ndWVcZlIoMSkKK2FuZCBsaWJyYXJpZXMgc3VjaCBhcworXGZCY3Vyc2VzXGZSKDNYKS4KKy5JIFRlcm1pbmZvCitkZXNjcmliZXMgdGVybWluYWxzIGJ5IGdpdmluZyBhIHNldCBvZiBjYXBhYmlsaXRpZXMgd2hpY2ggdGhleQoraGF2ZSwgYnkgc3BlY2lmeWluZyBob3cgdG8gcGVyZm9ybSBzY3JlZW4gb3BlcmF0aW9ucywgYW5kIGJ5CitzcGVjaWZ5aW5nIHBhZGRpbmcgcmVxdWlyZW1lbnRzIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMuCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuUFAKK0VudHJpZXMgaW4KKy5JIHRlcm1pbmZvCitjb25zaXN0IG9mIGEgc2VxdWVuY2Ugb2YgYCwnIHNlcGFyYXRlZCBmaWVsZHMgKGVtYmVkZGVkIGNvbW1hcyBtYXkgYmUKK2VzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCBvciBub3RhdGVkIGFzIFxcMDU0KS4KK1doaXRlIHNwYWNlIGFmdGVyIHRoZSBgLCcgc2VwYXJhdG9yIGlzIGlnbm9yZWQuCitUaGUgZmlyc3QgZW50cnkgZm9yIGVhY2ggdGVybWluYWwgZ2l2ZXMgdGhlIG5hbWVzIHdoaWNoIGFyZSBrbm93biBmb3IgdGhlCit0ZXJtaW5hbCwgc2VwYXJhdGVkIGJ5IGB8JyBjaGFyYWN0ZXJzLgorVGhlIGZpcnN0IG5hbWUgZ2l2ZW4gaXMgdGhlIG1vc3QgY29tbW9uIGFiYnJldmlhdGlvbiBmb3IgdGhlIHRlcm1pbmFsLAordGhlIGxhc3QgbmFtZSBnaXZlbiBzaG91bGQgYmUgYSBsb25nIG5hbWUgZnVsbHkgaWRlbnRpZnlpbmcgdGhlIHRlcm1pbmFsLAorYW5kIGFsbCBvdGhlcnMgYXJlIHVuZGVyc3Rvb2QgYXMgc3lub255bXMgZm9yIHRoZSB0ZXJtaW5hbCBuYW1lLgorQWxsIG5hbWVzIGJ1dCB0aGUgbGFzdCBzaG91bGQgYmUgaW4gbG93ZXIgY2FzZSBhbmQgY29udGFpbiBubyBibGFua3M7Cit0aGUgbGFzdCBuYW1lIG1heSB3ZWxsIGNvbnRhaW4gdXBwZXIgY2FzZSBhbmQgYmxhbmtzIGZvciByZWFkYWJpbGl0eS4KKy5QUAorTGluZXMgYmVnaW5uaW5nIHdpdGggYSBgIycgaW4gdGhlIGZpcnN0IGNvbHVtbiBhcmUgdHJlYXRlZCBhcyBjb21tZW50cy4KK1doaWxlIGNvbW1lbnQgbGluZXMgYXJlIGxlZ2FsIGF0IGFueSBwb2ludCwgdGhlIG91dHB1dCBvZiBcZkJAQ0FQVE9JTkZPQFxmUAorYW5kIFxmQkBJTkZPVE9DQVBAXGZQIChhbGlhc2VzIGZvciBcZkJAVElDQFxmUCkKK3dpbGwgbW92ZSBjb21tZW50cyBzbyB0aGV5IG9jY3VyIG9ubHkgYmV0d2VlbiBlbnRyaWVzLgorLlBQCitOZXdsaW5lcyBhbmQgbGVhZGluZyB0YWJzIG1heSBiZSB1c2VkIGZvciBmb3JtYXR0aW5nIGVudHJpZXMgZm9yIHJlYWRhYmlsaXR5LgorVGhlc2UgYXJlIHJlbW92ZWQgZnJvbSBwYXJzZWQgZW50cmllcy4KK1RoZSBcZkJASU5GT0NNUEBcIC1mXGZQIG9wdGlvbiByZWxpZXMgb24gdGhpcyB0byBmb3JtYXQgaWYtdGhlbi1lbHNlIGV4cHJlc3Npb25zOgordGhlIHJlc3VsdCBjYW4gYmUgcmVhZCBieSBcZkJAVElDQFxmUC4KKy5QUAorVGVybWluYWwgbmFtZXMgKGV4Y2VwdCBmb3IgdGhlIGxhc3QsIHZlcmJvc2UgZW50cnkpIHNob3VsZAorYmUgY2hvc2VuIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMuCitUaGUgcGFydGljdWxhciBwaWVjZSBvZiBoYXJkd2FyZSBtYWtpbmcgdXAgdGhlIHRlcm1pbmFsIHNob3VsZAoraGF2ZSBhIHJvb3QgbmFtZSwgdGh1cyBgYGhwMjYyMScnLgorVGhpcyBuYW1lIHNob3VsZCBub3QgY29udGFpbiBoeXBoZW5zLgorTW9kZXMgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIGJlIGluLCBvciB1c2VyIHByZWZlcmVuY2VzLCBzaG91bGQKK2JlIGluZGljYXRlZCBieSBhcHBlbmRpbmcgYSBoeXBoZW4gYW5kIGEgbW9kZSBzdWZmaXguCitUaHVzLCBhIHZ0MTAwIGluIDEzMiBjb2x1bW4gbW9kZSB3b3VsZCBiZSB2dDEwMC13LgorVGhlIGZvbGxvd2luZyBzdWZmaXhlcyBzaG91bGQgYmUgdXNlZCB3aGVyZSBwb3NzaWJsZToKKy5QUAorLlRTCitjZW50ZXIgOworbCBjIGwKK2wgbCBsLgorXGZCU3VmZml4CU1lYW5pbmcJRXhhbXBsZVxmUAorLVxmSW5uXGZQCU51bWJlciBvZiBsaW5lcyBvbiB0aGUgc2NyZWVuCWFhYS02MAorLVxmSW5cZlBwCU51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkJYzEwMC00cAorLWFtCVdpdGggYXV0b21hcmdpbnMgKHVzdWFsbHkgdGhlIGRlZmF1bHQpCXZ0MTAwLWFtCistbQlNb25vIG1vZGU7IHN1cHByZXNzIGNvbG9yICAgICAgIAlhbnNpLW0KKy1tYwlNYWdpYyBjb29raWU7IHNwYWNlcyB3aGVuIGhpZ2hsaWdodGluZwl3eTMwLW1jCistbmEJTm8gYXJyb3cga2V5cyAobGVhdmUgdGhlbSBpbiBsb2NhbCkJYzEwMC1uYQorLW5hbQlXaXRob3V0IGF1dG9tYXRpYyBtYXJnaW5zICAgICAgIAl2dDEwMC1uYW0KKy1ubAlObyBzdGF0dXMgbGluZSAgICAgICAgICAgICAgICAgIAlhdHQ0NDE1LW5sCistbnMJTm8gc3RhdHVzIGxpbmUgICAgICAgICAgICAgICAgICAJaHAyNjI2LW5zCistcnYJUmV2ZXJzZSB2aWRlbyAgICAgICAgICAgICAgICAgICAJYzEwMC1ydgorLXMJRW5hYmxlIHN0YXR1cyBsaW5lICAgICAgICAgICAgICAJdnQxMDAtcworLXZiCVVzZSB2aXNpYmxlIGJlbGwgaW5zdGVhZCBvZiBiZWVwCXd5MzcwLXZiCistdwlXaWRlIG1vZGUgKD4gODAgY29sdW1ucywgdXN1YWxseSAxMzIpCXZ0MTAwLXcKKy5URQorLlBQCitGb3IgbW9yZSBvbiB0ZXJtaW5hbCBuYW1pbmcgY29udmVudGlvbnMsIHNlZSB0aGUgXGZCdGVybSg3KVxmUiBtYW51YWwgcGFnZS4KKy5TUyBDYXBhYmlsaXRpZXMKKy5cIiBIZWFkIG9mIHRlcm1pbmZvIG1hbiBwYWdlIGVuZHMgaGVyZQorLnBzIC0xCmRpZmYgLS1naXQgYS9tYW4vdGVybWluZm8udGFpbCBiL21hbi90ZXJtaW5mby50YWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNmQzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vdGVybWluZm8udGFpbApAQCAtMCwwICsxLDE3MDMgQEAKKy5cIiAkSWQ6IHRlcm1pbmZvLnRhaWwsdiAxLjQ5IDIwMDgvMDIvMTYgMjA6NTc6NDMgdG9tIEV4cCAkCisuXCIgQmVnaW5uaW5nIG9mIHRlcm1pbmZvLnRhaWwgZmlsZQorLlwiIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG5jdXJzZXMuCisuXCIgU2VlICJ0ZXJtaW5mby5oZWFkIiBmb3IgY29weXJpZ2h0LgorLnBzICsxCisuCisuU1MgQSBTYW1wbGUgRW50cnkKKy4KK1RoZSBmb2xsb3dpbmcgZW50cnksIGRlc2NyaWJpbmcgYW4gQU5TSS1zdGFuZGFyZCB0ZXJtaW5hbCwgaXMgcmVwcmVzZW50YXRpdmUKK29mIHdoYXQgYSBcZkJ0ZXJtaW5mb1xmUiBlbnRyeSBmb3IgYSBtb2Rlcm4gdGVybWluYWwgdHlwaWNhbGx5IGxvb2tzIGxpa2UuCisuUFAKKy5uZgorLmluIC0yCisudGEgLjNpCisuZnQgQ1cKK1xzLTJhbnNpfGFuc2kvcGMtdGVybSBjb21wYXRpYmxlIHdpdGggY29sb3IsCisgICAgICAgIG1jNWksCisgICAgICAgIGNvbG9ycyM4LCBuY3YjMywgcGFpcnMjNjQsCisgICAgICAgIGN1Yj1cXEVbJXAxJWRELCBjdWQ9XFxFWyVwMSVkQiwgY3VmPVxcRVslcDElZEMsCisgICAgICAgIGN1dT1cXEVbJXAxJWRBLCBkY2g9XFxFWyVwMSVkUCwgZGw9XFxFWyVwMSVkTSwKKyAgICAgICAgZWNoPVxcRVslcDElZFgsIGVsMT1cXEVbMUssIGhwYT1cXEVbJXAxJWRHLCBodD1cXEVbSSwKKyAgICAgICAgaWNoPVxcRVslcDElZEAsIGlsPVxcRVslcDElZEwsIGluZG49XFxFWyVwMSVkUywgLmluZG49XFxFWyVwMSVkVCwKKyAgICAgICAga2JzPV5ILCBrY2J0PVxcRVtaLCBrY3ViMT1cXEVbRCwga2N1ZDE9XFxFW0IsCisgICAgICAgIGtjdWYxPVxcRVtDLCBrY3V1MT1cXEVbQSwga2YxPVxcRVtNLCBrZjEwPVxcRVtWLAorICAgICAgICBrZjExPVxcRVtXLCBrZjEyPVxcRVtYLCBrZjI9XFxFW04sIGtmMz1cXEVbTywga2Y0PVxcRVtQLAorICAgICAgICBrZjU9XFxFW1EsIGtmNj1cXEVbUiwga2Y3PVxcRVtTLCBrZjg9XFxFW1QsIGtmOT1cXEVbVSwKKyAgICAgICAga2ljaDE9XFxFW0wsIG1jND1cXEVbNGksIG1jNT1cXEVbNWksIG5lbD1cXHJcXEVbUywKKyAgICAgICAgb3A9XFxFWzM3OzQwbSwgcmVwPSVwMSVjXFxFWyVwMiV7MX0lLSVkYiwKKyAgICAgICAgcmluPVxcRVslcDElZFQsIHMwZHM9XFxFKEIsIHMxZHM9XFxFKUIsIHMyZHM9XFxFKkIsCisgICAgICAgIHMzZHM9XFxFK0IsIHNldGFiPVxcRVs0JXAxJWRtLCBzZXRhZj1cXEVbMyVwMSVkbSwKKyAgICAgICAgc2V0Yj1cXEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKyAgICAgICAgc2V0Zj1cXEVbMyU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKyAgICAgICAgc2dyPVxcRVswOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDgldDsxMSU7JT8lcDkldDsxMiU7bSwKKyAgICAgICAgc2dyMD1cXEVbMDsxMG0sIHRiYz1cXEVbMmcsIHU2PVxcRVslZDslZFIsIHU3PVxcRVs2biwKKyAgICAgICAgdTg9XFxFWz8lWzswMTIzNDU2Nzg5XWMsIHU5PVxcRVtjLCB2cGE9XFxFWyVwMSVkZCxccysyCisuaW4gKzIKKy5maQorLmZ0IFIKKy5QUAorRW50cmllcyBtYXkgY29udGludWUgb250byBtdWx0aXBsZSBsaW5lcyBieSBwbGFjaW5nIHdoaXRlIHNwYWNlIGF0Cit0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSBleGNlcHQgdGhlIGZpcnN0LgorQ29tbWVudHMgbWF5IGJlIGluY2x1ZGVkIG9uIGxpbmVzIGJlZ2lubmluZyB3aXRoIGBgIycnLgorQ2FwYWJpbGl0aWVzIGluCisuSSB0ZXJtaW5mbworYXJlIG9mIHRocmVlIHR5cGVzOgorQm9vbGVhbiBjYXBhYmlsaXRpZXMgd2hpY2ggaW5kaWNhdGUgdGhhdCB0aGUgdGVybWluYWwgaGFzCitzb21lIHBhcnRpY3VsYXIgZmVhdHVyZSwgbnVtZXJpYyBjYXBhYmlsaXRpZXMgZ2l2aW5nIHRoZSBzaXplIG9mIHRoZSB0ZXJtaW5hbAorb3IgdGhlIHNpemUgb2YgcGFydGljdWxhciBkZWxheXMsIGFuZCBzdHJpbmcKK2NhcGFiaWxpdGllcywgd2hpY2ggZ2l2ZSBhIHNlcXVlbmNlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gcGFydGljdWxhcgordGVybWluYWwgb3BlcmF0aW9ucy4KKy5QUAorLlNTIFR5cGVzIG9mIENhcGFiaWxpdGllcworLlBQCitBbGwgY2FwYWJpbGl0aWVzIGhhdmUgbmFtZXMuCitGb3IgaW5zdGFuY2UsIHRoZSBmYWN0IHRoYXQKK0FOU0ktc3RhbmRhcmQgdGVybWluYWxzIGhhdmUKKy5JICJhdXRvbWF0aWMgbWFyZ2lucyIKKyhpLmUuLCBhbiBhdXRvbWF0aWMgcmV0dXJuIGFuZCBsaW5lLWZlZWQKK3doZW4gdGhlIGVuZCBvZiBhIGxpbmUgaXMgcmVhY2hlZCkgaXMgaW5kaWNhdGVkIGJ5IHRoZSBjYXBhYmlsaXR5IFxmQmFtXGZSLgorSGVuY2UgdGhlIGRlc2NyaXB0aW9uIG9mIGFuc2kgaW5jbHVkZXMgXGZCYW1cZlIuCitOdW1lcmljIGNhcGFiaWxpdGllcyBhcmUgZm9sbG93ZWQgYnkgdGhlIGNoYXJhY3RlciBgIycgYW5kIHRoZW4gYSBwb3NpdGl2ZSB2YWx1ZS4KK1RodXMgXGZCY29sc1xmUiwgd2hpY2ggaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgdGVybWluYWwgaGFzLAorZ2l2ZXMgdGhlIHZhbHVlIGA4MCcgZm9yIGFuc2kuCitWYWx1ZXMgZm9yIG51bWVyaWMgY2FwYWJpbGl0aWVzIG1heSBiZSBzcGVjaWZpZWQgaW4gZGVjaW1hbCwgb2N0YWwgb3IgaGV4YWRlY2ltYWwsCit1c2luZyB0aGUgQyBwcm9ncmFtbWluZyBsYW5ndWFnZSBjb252ZW50aW9ucyAoZS5nLiwgMjU1LCAwMzc3IGFuZCAweGZmIG9yIDB4RkYpLgorLlBQCitGaW5hbGx5LCBzdHJpbmcgdmFsdWVkIGNhcGFiaWxpdGllcywgc3VjaCBhcyBcZkJlbFxmUiAoY2xlYXIgdG8gZW5kIG9mIGxpbmUKK3NlcXVlbmNlKSBhcmUgZ2l2ZW4gYnkgdGhlIHR3by1jaGFyYWN0ZXIgY29kZSwgYW4gYD0nLCBhbmQgdGhlbiBhIHN0cmluZworZW5kaW5nIGF0IHRoZSBuZXh0IGZvbGxvd2luZyBgLCcuCisuUFAKK0EgbnVtYmVyIG9mIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHByb3ZpZGVkIGluIHRoZSBzdHJpbmcgdmFsdWVkIGNhcGFiaWxpdGllcworZm9yIGVhc3kgZW5jb2Rpbmcgb2YgY2hhcmFjdGVycyB0aGVyZS4KK0JvdGggXGZCXGVFXGZSIGFuZCBcZkJcZWVcZlIKK21hcCB0byBhbiBccy0xRVNDQVBFXHMwIGNoYXJhY3RlciwKK1xmQl54XGZSIG1hcHMgdG8gYSBjb250cm9sLXggZm9yIGFueSBhcHByb3ByaWF0ZSB4LCBhbmQgdGhlIHNlcXVlbmNlcworXGZCXGVuIFxlbCBcZXIgXGV0IFxlYiBcZWYgXGVzXGZSIGdpdmUKK2EgbmV3bGluZSwgbGluZS1mZWVkLCByZXR1cm4sIHRhYiwgYmFja3NwYWNlLCBmb3JtLWZlZWQsIGFuZCBzcGFjZS4KK090aGVyIGVzY2FwZXMgaW5jbHVkZSBcZkJcZV5cZlIgZm9yIFxmQl5cZlIsCitcZkJcZVxlXGZSIGZvciBcZkJcZVxmUiwKK1xmQlxlXGZSLCBmb3IgY29tbWEsCitcZkJcZTpcZlIgZm9yIFxmQjpcZlIsCithbmQgXGZCXGUwXGZSIGZvciBudWxsLgorKFxmQlxlMFxmUiB3aWxsIHByb2R1Y2UgXGUyMDAsIHdoaWNoIGRvZXMgbm90IHRlcm1pbmF0ZSBhIHN0cmluZyBidXQgYmVoYXZlcworYXMgYSBudWxsIGNoYXJhY3RlciBvbiBtb3N0IHRlcm1pbmFscywgcHJvdmlkaW5nIENTNyBpcyBzcGVjaWZpZWQuCitTZWUgc3R0eSgxKS4pCitGaW5hbGx5LCBjaGFyYWN0ZXJzIG1heSBiZSBnaXZlbiBhcyB0aHJlZSBvY3RhbCBkaWdpdHMgYWZ0ZXIgYSBcZkJcZVxmUi4KKy5QUAorQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgbWF5IGFwcGVhciBhbnl3aGVyZSBpbiBhIHN0cmluZyBjYXBhYmlsaXR5LCBlbmNsb3NlZCBpbgorJDwuLj4gYnJhY2tldHMsIGFzIGluIFxmQmVsXGZQPVxlRUskPDU+LCBhbmQgcGFkZGluZyBjaGFyYWN0ZXJzIGFyZSBzdXBwbGllZCBieQorLkkgdHB1dHMKK3RvIHByb3ZpZGUgdGhpcyBkZWxheS4KK1RoZSBkZWxheSBtdXN0IGJlIGEgbnVtYmVyIHdpdGggYXQgbW9zdCBvbmUgZGVjaW1hbAorcGxhY2Ugb2YgcHJlY2lzaW9uOyBpdCBtYXkgYmUgZm9sbG93ZWQgYnkgc3VmZml4ZXMgYConIG9yICcvJyBvciBib3RoLgorQSBgKicKK2luZGljYXRlcyB0aGF0IHRoZSBwYWRkaW5nIHJlcXVpcmVkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzCithZmZlY3RlZCBieSB0aGUgb3BlcmF0aW9uLCBhbmQgdGhlIGFtb3VudCBnaXZlbiBpcyB0aGUgcGVyLWFmZmVjdGVkLXVuaXQKK3BhZGRpbmcgcmVxdWlyZWQuCisoSW4gdGhlIGNhc2Ugb2YgaW5zZXJ0IGNoYXJhY3RlciwgdGhlIGZhY3RvciBpcyBzdGlsbCB0aGUKK251bWJlciBvZgorLklSIGxpbmVzCithZmZlY3RlZC4pICBOb3JtYWxseSwgcGFkZGluZyBpcyBhZHZpc29yeSBpZiB0aGUgZGV2aWNlIGhhcyB0aGUgXGZCeG9uXGZSCitjYXBhYmlsaXR5OyBpdCBpcyB1c2VkIGZvciBjb3N0IGNvbXB1dGF0aW9uIGJ1dCBkb2VzIG5vdCB0cmlnZ2VyIGRlbGF5cy4KK0EgYC8nCitzdWZmaXggaW5kaWNhdGVzIHRoYXQgdGhlIHBhZGRpbmcgaXMgbWFuZGF0b3J5IGFuZCBmb3JjZXMgYSBkZWxheSBvZiB0aGUgZ2l2ZW4KK251bWJlciBvZiBtaWxsaXNlY29uZHMgZXZlbiBvbiBkZXZpY2VzIGZvciB3aGljaCBcZkJ4b25cZlIgaXMgcHJlc2VudCB0bworaW5kaWNhdGUgZmxvdyBjb250cm9sLgorLlBQCitTb21ldGltZXMgaW5kaXZpZHVhbCBjYXBhYmlsaXRpZXMgbXVzdCBiZSBjb21tZW50ZWQgb3V0LgorVG8gZG8gdGhpcywgcHV0IGEgcGVyaW9kIGJlZm9yZSB0aGUgY2FwYWJpbGl0eSBuYW1lLgorRm9yIGV4YW1wbGUsIHNlZSB0aGUgc2Vjb25kCisuQiBpbmQKK2luIHRoZSBleGFtcGxlIGFib3ZlLgorLmJyCisubmUgNQorLlBQCisuU1MgRmV0Y2hpbmcgQ29tcGlsZWQgRGVzY3JpcHRpb25zCisuUFAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNSU5GTyBpcyBzZXQsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZSBwYXRobmFtZQorb2YgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY29tcGlsZWQgZGVzY3JpcHRpb24geW91IGFyZSB3b3JraW5nIG9uLgorT25seQordGhhdCBkaXJlY3RvcnkgaXMgc2VhcmNoZWQuCisuUFAKK0lmIFRFUk1JTkZPIGlzIG5vdCBzZXQsIHRoZSBcZkJuY3Vyc2VzXGZSIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvIHJlYWRlciBjb2RlCit3aWxsIGluc3RlYWQgbG9vayBpbiB0aGUgZGlyZWN0b3J5IFxmQiRIT01FLy50ZXJtaW5mb1xmUgorZm9yIGEgY29tcGlsZWQgZGVzY3JpcHRpb24uCitJZiBpdCBmYWlscyB0byBmaW5kIG9uZSB0aGVyZSwgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNSU5GT19ESVJTIGlzCitzZXQsIGl0IHdpbGwgaW50ZXJwcmV0IHRoZSBjb250ZW50cyBvZiB0aGF0IHZhcmlhYmxlIGFzIGEgbGlzdCBvZiBjb2xvbi0KK3NlcGFyYXRlZCBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCAoYW4gZW1wdHkgZW50cnkgaXMgaW50ZXJwcmV0ZWQgYXMgYQorY29tbWFuZCB0byBzZWFyY2ggXGZJXCpkXGZSKS4KK0lmIG5vIGRlc2NyaXB0aW9uIGlzIGZvdW5kIGluIGFueSBvZiB0aGUKK1RFUk1JTkZPX0RJUlMgZGlyZWN0b3JpZXMsIHRoZSBmZXRjaCBmYWlscy4KKy5QUAorSWYgbmVpdGhlciBURVJNSU5GTyBub3IgVEVSTUlORk9fRElSUyBpcyBzZXQsIHRoZSBsYXN0IHBsYWNlIHRyaWVkIHdpbGwgYmUgdGhlCitzeXN0ZW0gdGVybWluZm8gZGlyZWN0b3J5LCBcZklcKmRcZlIuCisuUFAKKyhOZWl0aGVyIHRoZSBcZkIkSE9NRS8udGVybWluZm9cZlIgbG9va3VwcyBub3IgVEVSTUlORk9fRElSUyBleHRlbnNpb25zIGFyZQorc3VwcG9ydGVkIHVuZGVyIHN0b2NrIFN5c3RlbSBWIHRlcm1pbmZvL2N1cnNlcy4pCisuUFAKKy5TUyBQcmVwYXJpbmcgRGVzY3JpcHRpb25zCisuUFAKK1dlIG5vdyBvdXRsaW5lIGhvdyB0byBwcmVwYXJlIGRlc2NyaXB0aW9ucyBvZiB0ZXJtaW5hbHMuCitUaGUgbW9zdCBlZmZlY3RpdmUgd2F5IHRvIHByZXBhcmUgYSB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBpcyBieSBpbWl0YXRpbmcKK3RoZSBkZXNjcmlwdGlvbiBvZiBhIHNpbWlsYXIgdGVybWluYWwgaW4KKy5JIHRlcm1pbmZvCithbmQgdG8gYnVpbGQgdXAgYSBkZXNjcmlwdGlvbiBncmFkdWFsbHksIHVzaW5nIHBhcnRpYWwgZGVzY3JpcHRpb25zCit3aXRoCisuSSB2aQorb3Igc29tZSBvdGhlciBzY3JlZW4tb3JpZW50ZWQgcHJvZ3JhbSB0byBjaGVjayB0aGF0IHRoZXkgYXJlIGNvcnJlY3QuCitCZSBhd2FyZSB0aGF0IGEgdmVyeSB1bnVzdWFsIHRlcm1pbmFsIG1heSBleHBvc2UgZGVmaWNpZW5jaWVzIGluCit0aGUgYWJpbGl0eSBvZiB0aGUKKy5JIHRlcm1pbmZvCitmaWxlIHRvIGRlc2NyaWJlIGl0CitvciBidWdzIGluIHRoZSBzY3JlZW4taGFuZGxpbmcgY29kZSBvZiB0aGUgdGVzdCBwcm9ncmFtLgorLlBQCitUbyBnZXQgdGhlIHBhZGRpbmcgZm9yIGluc2VydCBsaW5lIHJpZ2h0IChpZiB0aGUgdGVybWluYWwgbWFudWZhY3R1cmVyCitkaWQgbm90IGRvY3VtZW50IGl0KSBhIHNldmVyZSB0ZXN0IGlzIHRvIGVkaXQgYSBsYXJnZSBmaWxlIGF0IDk2MDAgYmF1ZCwKK2RlbGV0ZSAxNiBvciBzbyBsaW5lcyBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiwgdGhlbiBoaXQgdGhlIGB1Jwora2V5IHNldmVyYWwgdGltZXMgcXVpY2tseS4KK0lmIHRoZSB0ZXJtaW5hbCBtZXNzZXMgdXAsIG1vcmUgcGFkZGluZyBpcyB1c3VhbGx5IG5lZWRlZC4KK0Egc2ltaWxhciB0ZXN0IGNhbiBiZSB1c2VkIGZvciBpbnNlcnQgY2hhcmFjdGVyLgorLlBQCisuU1MgQmFzaWMgQ2FwYWJpbGl0aWVzCisuUFAKK1RoZSBudW1iZXIgb2YgY29sdW1ucyBvbiBlYWNoIGxpbmUgZm9yIHRoZSB0ZXJtaW5hbCBpcyBnaXZlbiBieSB0aGUKK1xmQmNvbHNcZlIgbnVtZXJpYyBjYXBhYmlsaXR5LgorSWYgdGhlIHRlcm1pbmFsIGlzIGEgXHMtMUNSVFxzMCwgdGhlbiB0aGUKK251bWJlciBvZiBsaW5lcyBvbiB0aGUgc2NyZWVuIGlzIGdpdmVuIGJ5IHRoZSBcZkJsaW5lc1xmUiBjYXBhYmlsaXR5LgorSWYgdGhlIHRlcm1pbmFsIHdyYXBzIGFyb3VuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgd2hlbgoraXQgcmVhY2hlcyB0aGUgcmlnaHQgbWFyZ2luLCB0aGVuIGl0IHNob3VsZCBoYXZlIHRoZSBcZkJhbVxmUiBjYXBhYmlsaXR5LgorSWYgdGhlIHRlcm1pbmFsIGNhbiBjbGVhciBpdHMgc2NyZWVuLCBsZWF2aW5nIHRoZSBjdXJzb3IgaW4gdGhlIGhvbWUKK3Bvc2l0aW9uLCB0aGVuIHRoaXMgaXMgZ2l2ZW4gYnkgdGhlIFxmQmNsZWFyXGZSIHN0cmluZyBjYXBhYmlsaXR5LgorSWYgdGhlIHRlcm1pbmFsIG92ZXJzdHJpa2VzCisocmF0aGVyIHRoYW4gY2xlYXJpbmcgYSBwb3NpdGlvbiB3aGVuIGEgY2hhcmFjdGVyIGlzIHN0cnVjayBvdmVyKQordGhlbiBpdCBzaG91bGQgaGF2ZSB0aGUgXGZCb3NcZlIgY2FwYWJpbGl0eS4KK0lmIHRoZSB0ZXJtaW5hbCBpcyBhIHByaW50aW5nIHRlcm1pbmFsLCB3aXRoIG5vIHNvZnQgY29weSB1bml0LAorZ2l2ZSBpdCBib3RoCisuQiBoYworYW5kCisuQlIgb3MgLgorLlJCICggb3MKK2FwcGxpZXMgdG8gc3RvcmFnZSBzY29wZSB0ZXJtaW5hbHMsIHN1Y2ggYXMgXHMtMVRFS1RST05JWFxzKzEgNDAxMAorc2VyaWVzLCBhcyB3ZWxsIGFzIGhhcmQgY29weSBhbmQgQVBMIHRlcm1pbmFscy4pCitJZiB0aGVyZSBpcyBhIGNvZGUgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGN1cnJlbnQKK3JvdywgZ2l2ZSB0aGlzIGFzCisuQlIgY3IgLgorKE5vcm1hbGx5IHRoaXMgd2lsbCBiZSBjYXJyaWFnZSByZXR1cm4sIGNvbnRyb2wgTS4pCitJZiB0aGVyZSBpcyBhIGNvZGUgdG8gcHJvZHVjZSBhbiBhdWRpYmxlIHNpZ25hbCAoYmVsbCwgYmVlcCwgZXRjKQorZ2l2ZSB0aGlzIGFzCisuQlIgYmVsIC4KKy5QUAorSWYgdGhlcmUgaXMgYSBjb2RlIHRvIG1vdmUgdGhlIGN1cnNvciBvbmUgcG9zaXRpb24gdG8gdGhlIGxlZnQKKyhzdWNoIGFzIGJhY2tzcGFjZSkgdGhhdCBjYXBhYmlsaXR5IHNob3VsZCBiZSBnaXZlbiBhcworLkJSIGN1YjEgLgorU2ltaWxhcmx5LCBjb2RlcyB0byBtb3ZlIHRvIHRoZSByaWdodCwgdXAsIGFuZCBkb3duIHNob3VsZCBiZQorZ2l2ZW4gYXMKKy5CUiBjdWYxICwKKy5CUiBjdXUxICwKK2FuZAorLkJSIGN1ZDEgLgorVGhlc2UgbG9jYWwgY3Vyc29yIG1vdGlvbnMgc2hvdWxkIG5vdCBhbHRlciB0aGUgdGV4dCB0aGV5IHBhc3Mgb3ZlciwKK2ZvciBleGFtcGxlLCB5b3Ugd291bGQgbm90IG5vcm1hbGx5IHVzZSBgXGZCY3VmMVxmUD1cICcgYmVjYXVzZSB0aGUKK3NwYWNlIHdvdWxkIGVyYXNlIHRoZSBjaGFyYWN0ZXIgbW92ZWQgb3Zlci4KKy5QUAorQSB2ZXJ5IGltcG9ydGFudCBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIGxvY2FsIGN1cnNvciBtb3Rpb25zIGVuY29kZWQKK2luCisuSSB0ZXJtaW5mbworYXJlIHVuZGVmaW5lZCBhdCB0aGUgbGVmdCBhbmQgdG9wIGVkZ2VzIG9mIGEgXHMtMUNSVFxzMCB0ZXJtaW5hbC4KK1Byb2dyYW1zIHNob3VsZCBuZXZlciBhdHRlbXB0IHRvIGJhY2tzcGFjZSBhcm91bmQgdGhlIGxlZnQgZWRnZSwKK3VubGVzcworLkIgYncKK2lzIGdpdmVuLAorYW5kIG5ldmVyIGF0dGVtcHQgdG8gZ28gdXAgbG9jYWxseSBvZmYgdGhlIHRvcC4KK0luIG9yZGVyIHRvIHNjcm9sbCB0ZXh0IHVwLCBhIHByb2dyYW0gd2lsbCBnbyB0byB0aGUgYm90dG9tIGxlZnQgY29ybmVyCitvZiB0aGUgc2NyZWVuIGFuZCBzZW5kIHRoZQorLkIgaW5kCisoaW5kZXgpIHN0cmluZy4KKy5QUAorVG8gc2Nyb2xsIHRleHQgZG93biwgYSBwcm9ncmFtIGdvZXMgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lcgorb2YgdGhlIHNjcmVlbiBhbmQgc2VuZHMgdGhlCisuQiByaQorKHJldmVyc2UgaW5kZXgpIHN0cmluZy4KK1RoZSBzdHJpbmdzCisuQiBpbmQKK2FuZAorLkIgcmkKK2FyZSB1bmRlZmluZWQgd2hlbiBub3Qgb24gdGhlaXIgcmVzcGVjdGl2ZSBjb3JuZXJzIG9mIHRoZSBzY3JlZW4uCisuUFAKK1BhcmFtZXRlcml6ZWQgdmVyc2lvbnMgb2YgdGhlIHNjcm9sbGluZyBzZXF1ZW5jZXMgYXJlCisuQiBpbmRuCithbmQKKy5CIHJpbgord2hpY2ggaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKKy5CIGluZAorYW5kCisuQiByaQorZXhjZXB0IHRoYXQgdGhleSB0YWtlIG9uZSBwYXJhbWV0ZXIsIGFuZCBzY3JvbGwgdGhhdCBtYW55IGxpbmVzLgorVGhleSBhcmUgYWxzbyB1bmRlZmluZWQgZXhjZXB0IGF0IHRoZSBhcHByb3ByaWF0ZSBlZGdlIG9mIHRoZSBzY3JlZW4uCisuUFAKK1RoZSBcZkJhbVxmUiBjYXBhYmlsaXR5IHRlbGxzIHdoZXRoZXIgdGhlIGN1cnNvciBzdGlja3MgYXQgdGhlIHJpZ2h0CitlZGdlIG9mIHRoZSBzY3JlZW4gd2hlbiB0ZXh0IGlzIG91dHB1dCwgYnV0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkKK2FwcGx5IHRvIGEKKy5CIGN1ZjEKK2Zyb20gdGhlIGxhc3QgY29sdW1uLgorVGhlIG9ubHkgbG9jYWwgbW90aW9uIHdoaWNoIGlzIGRlZmluZWQgZnJvbSB0aGUgbGVmdCBlZGdlIGlzIGlmCisuQiBidworaXMgZ2l2ZW4sIHRoZW4gYQorLkIgY3ViMQorZnJvbSB0aGUgbGVmdCBlZGdlIHdpbGwgbW92ZSB0byB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgcHJldmlvdXMgcm93LgorSWYKKy5CIGJ3CitpcyBub3QgZ2l2ZW4sIHRoZSBlZmZlY3QgaXMgdW5kZWZpbmVkLgorVGhpcyBpcyB1c2VmdWwgZm9yIGRyYXdpbmcgYSBib3ggYXJvdW5kIHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4sIGZvciBleGFtcGxlLgorSWYgdGhlIHRlcm1pbmFsIGhhcyBzd2l0Y2ggc2VsZWN0YWJsZSBhdXRvbWF0aWMgbWFyZ2lucywKK3RoZQorLkkgdGVybWluZm8KK2ZpbGUgdXN1YWxseSBhc3N1bWVzIHRoYXQgdGhpcyBpcyBvbjsgaS5lLiwgXGZCYW1cZlIuCitJZiB0aGUgdGVybWluYWwgaGFzIGEgY29tbWFuZCB3aGljaCBtb3ZlcyB0byB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBuZXh0CitsaW5lLCB0aGF0IGNvbW1hbmQgY2FuIGJlIGdpdmVuIGFzCisuQiBuZWwKKyhuZXdsaW5lKS4KK0l0IGRvZXMgbm90IG1hdHRlciBpZiB0aGUgY29tbWFuZCBjbGVhcnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBsaW5lLAorc28gaWYgdGhlIHRlcm1pbmFsIGhhcyBubworLkIgY3IKK2FuZAorLkIgbGYKK2l0IG1heSBzdGlsbCBiZSBwb3NzaWJsZSB0byBjcmFmdCBhIHdvcmtpbmcKKy5CIG5lbAorb3V0IG9mIG9uZSBvciBib3RoIG9mIHRoZW0uCisuUFAKK1RoZXNlIGNhcGFiaWxpdGllcyBzdWZmaWNlIHRvIGRlc2NyaWJlIGhhcmQtY29weSBhbmQgXCoobHFnbGFzcy10dHlcKihycSB0ZXJtaW5hbHMuCitUaHVzIHRoZSBtb2RlbCAzMyB0ZWxldHlwZSBpcyBkZXNjcmliZWQgYXMKKy5QUAorLkRUCisubmYKKy5mdCBDVworLlwiLmluIC0yCitccy0xMzNcfHxcfHR0eTMzXHx8XHx0dHlcfHxcfG1vZGVsIDMzIHRlbGV0eXBlLAorCWJlbD1eRywgY29scyM3MiwgY3I9Xk0sIGN1ZDE9XkosIGhjLCBpbmQ9XkosIG9zLFxzKzEKKy5cIi5pbiArMgorLmZ0IFIKKy5QUAord2hpbGUgdGhlIExlYXIgU2llZ2xlciBccy0xQURNLTNcczAgaXMgZGVzY3JpYmVkIGFzCisuUFAKKy5EVAorLm5mCisuZnQgQ1cKKy5cIi5pbiAtMgorXHMtMWFkbTNcfHxcfDNcfHxcfGxzaSBhZG0zLAorCWFtLCBiZWw9XkcsIGNsZWFyPV5aLCBjb2xzIzgwLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwlpbmQ9XkosIGxpbmVzIzI0LFxzKzEKKy5cIi5pbiArMgorLmZ0IFIKKy5maQorLlBQCisuU1MgUGFyYW1ldGVyaXplZCBTdHJpbmdzCisuUFAKK0N1cnNvciBhZGRyZXNzaW5nIGFuZCBvdGhlciBzdHJpbmdzIHJlcXVpcmluZyBwYXJhbWV0ZXJzCitpbiB0aGUgdGVybWluYWwgYXJlIGRlc2NyaWJlZCBieSBhCitwYXJhbWV0ZXJpemVkIHN0cmluZyBjYXBhYmlsaXR5LCB3aXRoCisuSVIgcHJpbnRmICgzKQorbGlrZSBlc2NhcGVzIFxmQiV4XGZSIGluIGl0LgorRm9yIGV4YW1wbGUsIHRvIGFkZHJlc3MgdGhlIGN1cnNvciwgdGhlCisuQiBjdXAKK2NhcGFiaWxpdHkgaXMgZ2l2ZW4sIHVzaW5nIHR3byBwYXJhbWV0ZXJzOgordGhlIHJvdyBhbmQgY29sdW1uIHRvIGFkZHJlc3MgdG8uCisoUm93cyBhbmQgY29sdW1ucyBhcmUgbnVtYmVyZWQgZnJvbSB6ZXJvIGFuZCByZWZlciB0byB0aGUKK3BoeXNpY2FsIHNjcmVlbiB2aXNpYmxlIHRvIHRoZSB1c2VyLCBub3QgdG8gYW55IHVuc2VlbiBtZW1vcnkuKQorSWYgdGhlIHRlcm1pbmFsIGhhcyBtZW1vcnkgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsCit0aGF0IGNhbiBiZSBpbmRpY2F0ZWQgYnkKKy5CUiBtcmN1cCAuCisuUFAKK1RoZSBwYXJhbWV0ZXIgbWVjaGFuaXNtIHVzZXMgYSBzdGFjayBhbmQgc3BlY2lhbCBcZkIlXGZQIGNvZGVzCit0byBtYW5pcHVsYXRlIGl0LgorVHlwaWNhbGx5IGEgc2VxdWVuY2Ugd2lsbCBwdXNoIG9uZSBvZiB0aGUKK3BhcmFtZXRlcnMgb250byB0aGUgc3RhY2sgYW5kIHRoZW4gcHJpbnQgaXQgaW4gc29tZSBmb3JtYXQuCitQcmludCAoZS5nLiwgIiVkIikgaXMgYSBzcGVjaWFsIGNhc2UuCitPdGhlciBvcGVyYXRpb25zLCBpbmNsdWRpbmcgIiV0IiBwb3AgdGhlaXIgb3BlcmFuZCBmcm9tIHRoZSBzdGFjay4KK0l0IGlzIG5vdGVkIHRoYXQgbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgYXJlIG9mdGVuIG5lY2Vzc2FyeSwKK2UuZy4sIGluIHRoZSBcZkJzZ3JcZlAgc3RyaW5nLgorLlBQCitUaGUgXGZCJVxmUiBlbmNvZGluZ3MgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorLlBQCisuVFAgNQorXHMtMSUlCitvdXRwdXRzIGAlJworLlRQCislXGZJW1tcZlA6XGZJXWZsYWdzXVt3aWR0aFsucHJlY2lzaW9uXV1bXGZQZG94WHNcZkldXGZQCithcyBpbiBcZkJwcmludGZcZlAsIGZsYWdzIGFyZSBbLSsjXSBhbmQgc3BhY2UuCitVc2UgYSBgOicgdG8gYWxsb3cgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGEgYC0nIGZsYWcsCithdm9pZGluZyBpbnRlcnByZXRpbmcgIiUtIiBhcyBhbiBvcGVyYXRvci4KKy5UUAorJWMKK3ByaW50IHBvcCgpIGxpa2UgJWMgaW4gXGZCcHJpbnRmXGZQCisuVFAKKyVzCitwcmludCBwb3AoKSBsaWtlICVzIGluIFxmQnByaW50ZlxmUAorLlRQCislcFsxLTldCitwdXNoIFxmSWlcZlAndGggcGFyYW1ldGVyCisuVFAKKyVQW2Etel0KK3NldCBkeW5hbWljIHZhcmlhYmxlIFthLXpdIHRvIHBvcCgpCisuVFAKKyVnW2Etel0KK2dldCBkeW5hbWljIHZhcmlhYmxlIFthLXpdIGFuZCBwdXNoIGl0CisuVFAKKyVQW0EtWl0KK3NldCBzdGF0aWMgdmFyaWFibGUgW2Etel0gdG8gcG9wKCkKKy5UUAorJWdbQS1aXQorZ2V0IHN0YXRpYyB2YXJpYWJsZSBbYS16XSBhbmQgcHVzaCBpdAorLklQCitUaGUgdGVybXMgInN0YXRpYyIgYW5kICJkeW5hbWljIiBhcmUgbWlzbGVhZGluZy4KK0hpc3RvcmljYWxseSwgdGhlc2UgYXJlIHNpbXBseSB0d28gZGlmZmVyZW50IHNldHMgb2YgdmFyaWFibGVzLAord2hvc2UgdmFsdWVzIGFyZSBub3QgcmVzZXQgYmV0d2VlbiBjYWxscyB0byBcZkJ0cGFybVxmUC4KK0hvd2V2ZXIsIHRoYXQgZmFjdCBpcyBub3QgZG9jdW1lbnRlZCBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMuCitSZWx5aW5nIG9uIGl0IHdpbGwgYWR2ZXJzZWx5IGltcGFjdCBwb3J0YWJpbGl0eSB0byBvdGhlciBpbXBsZW1lbnRhdGlvbnMuCisuVFAKKyUnXGZJY1xmUCcKK2NoYXIgY29uc3RhbnQgXGZJY1xmUAorLlRQCisle1xmSW5uXGZQfQoraW50ZWdlciBjb25zdGFudCBcZklublxmUAorLlRQCislbAorcHVzaCBzdHJsZW4ocG9wKQorLlRQCislKyAlLSAlKiAlLyAlbQorYXJpdGhtZXRpYyAoJW0gaXMgbW9kKTogcHVzaChwb3AoKSBvcCBwb3AoKSkKKy5UUAorJSYgJXwgJV4KK2JpdCBvcGVyYXRpb25zIChBTkQsIE9SIGFuZCBleGNsdXNpdmUtT1IpOiBwdXNoKHBvcCgpIG9wIHBvcCgpKQorLlRQCislPSAlPiAlPAorbG9naWNhbCBvcGVyYXRpb25zOiBwdXNoKHBvcCgpIG9wIHBvcCgpKQorLlRQCislQSwgJU8KK2xvZ2ljYWwgQU5EIGFuZCBPUiBvcGVyYXRpb25zIChmb3IgY29uZGl0aW9uYWxzKQorLlRQCislISAlfgordW5hcnkgb3BlcmF0aW9ucyAobG9naWNhbCBhbmQgYml0IGNvbXBsZW1lbnQpOiBwdXNoKG9wIHBvcCgpKQorLlRQCislaQorYWRkIDEgdG8gZmlyc3QgdHdvIHBhcmFtZXRlcnMgKGZvciBBTlNJIHRlcm1pbmFscykKKy5UUAorJT8gXGZJZXhwclxmUCAldCBcZkl0aGVucGFydFxmUCAlZSBcZkllbHNlcGFydFxmUCAlOworVGhpcyBmb3JtcyBhbiBpZi10aGVuLWVsc2UuCitUaGUgJWUgXGZJZWxzZXBhcnRcZlAgaXMgb3B0aW9uYWwuCitVc3VhbGx5IHRoZSAlPyBcZklleHByXGZQIHBhcnQgcHVzaGVzIGEgdmFsdWUgb250byB0aGUgc3RhY2ssCithbmQgJXQgcG9wcyBpdCBmcm9tIHRoZSBzdGFjaywgdGVzdGluZyBpZiBpdCBpcyBub256ZXJvICh0cnVlKS4KK0lmIGl0IGlzIHplcm8gKGZhbHNlKSwgY29udHJvbCBwYXNzZXMgdG8gdGhlICVlIChlbHNlKSBwYXJ0LgorLklQCitJdCBpcyBwb3NzaWJsZSB0byBmb3JtIGVsc2UtaWYncyBhIGxhIEFsZ29sIDY4OgorLlJTCislPyBjXGQxXHUgJXQgYlxkMVx1ICVlIGNcZDJcdSAldCBiXGQyXHUgJWUgY1xkM1x1ICV0IGJcZDNcdSAlZSBjXGQ0XHUgJXQgYlxkNFx1ICVlICU7CisuUkUKKy5JUAord2hlcmUgY1xkaVx1IGFyZSBjb25kaXRpb25zLCBiXGRpXHUgYXJlIGJvZGllcy4KKy5JUAorVXNlIHRoZSBcZkItZlxmUCBvcHRpb24gb2YgXGZCdGljXGZQIG9yIFxmQkBJTkZPQ01QQFxmUCB0byBzZWUKK3RoZSBzdHJ1Y3R1cmUgb2YgaWYtdGhlLWVsc2Uncy4KK1NvbWUgc3RyaW5ncywgZS5nLiwgXGZCc2dyXGZQIGNhbiBiZSB2ZXJ5IGNvbXBsaWNhdGVkIHdoZW4gd3JpdHRlbgorb24gb25lIGxpbmUuCitUaGUgXGZCLWZcZlAgb3B0aW9uIHNwbGl0cyB0aGUgc3RyaW5nIGludG8gbGluZXMgd2l0aCB0aGUgcGFydHMgaW5kZW50ZWQuCisuUFAKK0JpbmFyeSBvcGVyYXRpb25zIGFyZSBpbiBwb3N0Zml4IGZvcm0gd2l0aCB0aGUgb3BlcmFuZHMgaW4gdGhlIHVzdWFsIG9yZGVyLgorVGhhdCBpcywgdG8gZ2V0IHgtNSBvbmUgd291bGQgdXNlICIlZ3glezV9JS0iLgorJVAgYW5kICVnIHZhcmlhYmxlcyBhcmUKK3BlcnNpc3RlbnQgYWNyb3NzIGVzY2FwZS1zdHJpbmcgZXZhbHVhdGlvbnMuCisuUFAKK0NvbnNpZGVyIHRoZSBIUDI2NDUsIHdoaWNoLCB0byBnZXQgdG8gcm93IDMgYW5kIGNvbHVtbiAxMiwgbmVlZHMKK3RvIGJlIHNlbnQgXGVFJmExMmMwM1kgcGFkZGVkIGZvciA2IG1pbGxpc2Vjb25kcy4KK05vdGUgdGhhdCB0aGUgb3JkZXIKK29mIHRoZSByb3dzIGFuZCBjb2x1bW5zIGlzIGludmVydGVkIGhlcmUsIGFuZCB0aGF0IHRoZSByb3cgYW5kIGNvbHVtbgorYXJlIHByaW50ZWQgYXMgdHdvIGRpZ2l0cy4KK1RodXMgaXRzIFxmQmN1cFxmUiBjYXBhYmlsaXR5IGlzIFwqKGxxY3VwPTZcZUUmJXAyJTJkYyVwMSUyZFlcKihycS4KKy5QUAorVGhlIE1pY3JvdGVybSBccy0xQUNULUlWXHMwIG5lZWRzIHRoZSBjdXJyZW50IHJvdyBhbmQgY29sdW1uIHNlbnQKK3ByZWNlZGVkIGJ5IGEgXGZCXlRcZlIsIHdpdGggdGhlIHJvdyBhbmQgY29sdW1uIHNpbXBseSBlbmNvZGVkIGluIGJpbmFyeSwKK1wqKGxxY3VwPV5UJXAxJWMlcDIlY1wqKHJxLgorVGVybWluYWxzIHdoaWNoIHVzZSBcKihscSVjXCoocnEgbmVlZCB0byBiZSBhYmxlIHRvCitiYWNrc3BhY2UgdGhlIGN1cnNvciAoXGZCY3ViMVxmUiksCithbmQgdG8gbW92ZSB0aGUgY3Vyc29yIHVwIG9uZSBsaW5lIG9uIHRoZSBzY3JlZW4gKFxmQmN1dTFcZlIpLgorVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpdCBpcyBub3QgYWx3YXlzIHNhZmUgdG8gdHJhbnNtaXQgXGZCXGVuXGZSCitcZkJeRFxmUiBhbmQgXGZCXGVyXGZSLCBhcyB0aGUgc3lzdGVtIG1heSBjaGFuZ2Ugb3IgZGlzY2FyZCB0aGVtLgorKFRoZSBsaWJyYXJ5IHJvdXRpbmVzIGRlYWxpbmcgd2l0aCB0ZXJtaW5mbyBzZXQgdHR5IG1vZGVzIHNvIHRoYXQKK3RhYnMgYXJlIG5ldmVyIGV4cGFuZGVkLCBzbyBcZXQgaXMgc2FmZSB0byBzZW5kLgorVGhpcyB0dXJucyBvdXQgdG8gYmUgZXNzZW50aWFsIGZvciB0aGUgQW5uIEFyYm9yIDQwODAuKQorLlBQCitBIGZpbmFsIGV4YW1wbGUgaXMgdGhlIFxzLTFMU0kgQURNXHMwLTNhLCB3aGljaCB1c2VzIHJvdyBhbmQgY29sdW1uCitvZmZzZXQgYnkgYSBibGFuayBjaGFyYWN0ZXIsIHRodXMgXCoobHFjdXA9XGVFPSVwMSUnICclKyVjJXAyJScgJyUrJWNcKihycS4KK0FmdGVyIHNlbmRpbmcgYFxlRT0nLCB0aGlzIHB1c2hlcyB0aGUgZmlyc3QgcGFyYW1ldGVyLCBwdXNoZXMgdGhlCitBU0NJSSB2YWx1ZSBmb3IgYSBzcGFjZSAoMzIpLCBhZGRzIHRoZW0gKHB1c2hpbmcgdGhlIHN1bSBvbiB0aGUgc3RhY2sKK2luIHBsYWNlIG9mIHRoZSB0d28gcHJldmlvdXMgdmFsdWVzKSBhbmQgb3V0cHV0cyB0aGF0IHZhbHVlIGFzIGEgY2hhcmFjdGVyLgorVGhlbiB0aGUgc2FtZSBpcyBkb25lIGZvciB0aGUgc2Vjb25kIHBhcmFtZXRlci4KK01vcmUgY29tcGxleCBhcml0aG1ldGljIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBzdGFjay4KKy5QUAorLlNTIEN1cnNvciBNb3Rpb25zCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgYSBmYXN0IHdheSB0byBob21lIHRoZSBjdXJzb3IKKyh0byB2ZXJ5IHVwcGVyIGxlZnQgY29ybmVyIG9mIHNjcmVlbikgdGhlbiB0aGlzIGNhbiBiZSBnaXZlbiBhcworXGZCaG9tZVxmUjsgc2ltaWxhcmx5IGEgZmFzdCB3YXkgb2YgZ2V0dGluZyB0byB0aGUgbG93ZXIgbGVmdC1oYW5kIGNvcm5lcgorY2FuIGJlIGdpdmVuIGFzIFxmQmxsXGZSOyB0aGlzIG1heSBpbnZvbHZlIGdvaW5nIHVwIHdpdGggXGZCY3V1MVxmUgorZnJvbSB0aGUgaG9tZSBwb3NpdGlvbiwKK2J1dCBhIHByb2dyYW0gc2hvdWxkIG5ldmVyIGRvIHRoaXMgaXRzZWxmICh1bmxlc3MgXGZCbGxcZlIgZG9lcykgYmVjYXVzZSBpdAorY2FuIG1ha2Ugbm8gYXNzdW1wdGlvbiBhYm91dCB0aGUgZWZmZWN0IG9mIG1vdmluZyB1cCBmcm9tIHRoZSBob21lIHBvc2l0aW9uLgorTm90ZSB0aGF0IHRoZSBob21lIHBvc2l0aW9uIGlzIHRoZSBzYW1lIGFzIGFkZHJlc3NpbmcgdG8gKDAsMCk6Cit0byB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4sIG5vdCBvZiBtZW1vcnkuCisoVGh1cywgdGhlIFxlRUggc2VxdWVuY2Ugb24gSFAgdGVybWluYWxzIGNhbm5vdCBiZSB1c2VkIGZvcgorLkJSIGhvbWUgLikKKy5QUAorSWYgdGhlIHRlcm1pbmFsIGhhcyByb3cgb3IgY29sdW1uIGFic29sdXRlIGN1cnNvciBhZGRyZXNzaW5nLAordGhlc2UgY2FuIGJlIGdpdmVuIGFzIHNpbmdsZSBwYXJhbWV0ZXIgY2FwYWJpbGl0aWVzCisuQiBocGEKKyhob3Jpem9udGFsIHBvc2l0aW9uIGFic29sdXRlKQorYW5kCisuQiB2cGEKKyh2ZXJ0aWNhbCBwb3NpdGlvbiBhYnNvbHV0ZSkuCitTb21ldGltZXMgdGhlc2UgYXJlIHNob3J0ZXIgdGhhbiB0aGUgbW9yZSBnZW5lcmFsIHR3byBwYXJhbWV0ZXIKK3NlcXVlbmNlIChhcyB3aXRoIHRoZSBocDI2NDUpIGFuZCBjYW4gYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvCisuQlIgY3VwIC4KK0lmIHRoZXJlIGFyZSBwYXJhbWV0ZXJpemVkIGxvY2FsIG1vdGlvbnMgKGUuZy4sIG1vdmUKKy5JIG4KK3NwYWNlcyB0byB0aGUgcmlnaHQpIHRoZXNlIGNhbiBiZSBnaXZlbiBhcworLkJSIGN1ZCAsCisuQlIgY3ViICwKKy5CUiBjdWYgLAorYW5kCisuQlIgY3V1Cit3aXRoIGEgc2luZ2xlIHBhcmFtZXRlciBpbmRpY2F0aW5nIGhvdyBtYW55IHNwYWNlcyB0byBtb3ZlLgorVGhlc2UgYXJlIHByaW1hcmlseSB1c2VmdWwgaWYgdGhlIHRlcm1pbmFsIGRvZXMgbm90IGhhdmUKKy5CUiBjdXAgLAorc3VjaCBhcyB0aGUgXHMtMVRFS1RST05JWFxzKzEgNDAyNS4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIG5lZWRzIHRvIGJlIGluIGEgc3BlY2lhbCBtb2RlIHdoZW4gcnVubmluZworYSBwcm9ncmFtIHRoYXQgdXNlcyB0aGVzZSBjYXBhYmlsaXRpZXMsCit0aGUgY29kZXMgdG8gZW50ZXIgYW5kIGV4aXQgdGhpcyBtb2RlIGNhbiBiZSBnaXZlbiBhcyBcZkJzbWN1cFxmUiBhbmQgXGZCcm1jdXBcZlIuCitUaGlzIGFyaXNlcywgZm9yIGV4YW1wbGUsIGZyb20gdGVybWluYWxzIGxpa2UgdGhlIENvbmNlcHQgd2l0aCBtb3JlIHRoYW4KK29uZSBwYWdlIG9mIG1lbW9yeS4KK0lmIHRoZSB0ZXJtaW5hbCBoYXMgb25seSBtZW1vcnkgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcgYW5kIG5vdCBzY3JlZW4KK3JlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLCBhIG9uZSBzY3JlZW4tc2l6ZWQgd2luZG93IG11c3QgYmUgZml4ZWQgaW50bwordGhlIHRlcm1pbmFsIGZvciBjdXJzb3IgYWRkcmVzc2luZyB0byB3b3JrIHByb3Blcmx5LgorVGhpcyBpcyBhbHNvIHVzZWQgZm9yIHRoZSBccy0xVEVLVFJPTklYXHMrMSA0MDI1LAord2hlcmUKKy5CIHNtY3VwCitzZXRzIHRoZSBjb21tYW5kIGNoYXJhY3RlciB0byBiZSB0aGUgb25lIHVzZWQgYnkgdGVybWluZm8uCitJZiB0aGUgXGZCc21jdXBcZlAgc2VxdWVuY2Ugd2lsbCBub3QgcmVzdG9yZSB0aGUgc2NyZWVuIGFmdGVyIGFuCitcZkJybWN1cFxmUCBzZXF1ZW5jZSBpcyBvdXRwdXQgKHRvIHRoZSBzdGF0ZSBwcmlvciB0byBvdXRwdXR0aW5nCitcZkJybWN1cFxmUCksIHNwZWNpZnkgXGZCbnJybWNcZlAuCisuUFAKKy5TUyBBcmVhIENsZWFycworLlBQCitJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUKK2xpbmUsIGxlYXZpbmcgdGhlIGN1cnNvciB3aGVyZSBpdCBpcywgdGhpcyBzaG91bGQgYmUgZ2l2ZW4gYXMgXGZCZWxcZlIuCitJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSB0byB0aGUgY3VycmVudAorcG9zaXRpb24gaW5jbHVzaXZlLCBsZWF2aW5nCit0aGUgY3Vyc29yIHdoZXJlIGl0IGlzLCB0aGlzIHNob3VsZCBiZSBnaXZlbiBhcyBcZkJlbDFcZlAuCitJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUKK2Rpc3BsYXksIHRoZW4gdGhpcyBzaG91bGQgYmUgZ2l2ZW4gYXMgXGZCZWRcZlIuCitcZkJFZFxmUiBpcyBvbmx5IGRlZmluZWQgZnJvbSB0aGUgZmlyc3QgY29sdW1uIG9mIGEgbGluZS4KKyhUaHVzLCBpdCBjYW4gYmUgc2ltdWxhdGVkIGJ5IGEgcmVxdWVzdCB0byBkZWxldGUgYSBsYXJnZSBudW1iZXIgb2YgbGluZXMsCitpZiBhIHRydWUKKy5CIGVkCitpcyBub3QgYXZhaWxhYmxlLikKKy5QUAorLlNTIEluc2VydC9kZWxldGUgbGluZSBhbmQgdmVydGljYWwgbW90aW9ucworLlBQCitJZiB0aGUgdGVybWluYWwgY2FuIG9wZW4gYSBuZXcgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGxpbmUgd2hlcmUgdGhlIGN1cnNvcgoraXMsIHRoaXMgc2hvdWxkIGJlIGdpdmVuIGFzIFxmQmlsMVxmUjsgdGhpcyBpcyBkb25lIG9ubHkgZnJvbSB0aGUgZmlyc3QKK3Bvc2l0aW9uIG9mIGEgbGluZS4KK1RoZSBjdXJzb3IgbXVzdCB0aGVuIGFwcGVhciBvbiB0aGUgbmV3bHkgYmxhbmsgbGluZS4KK0lmIHRoZSB0ZXJtaW5hbCBjYW4gZGVsZXRlIHRoZSBsaW5lIHdoaWNoIHRoZSBjdXJzb3IgaXMgb24sIHRoZW4gdGhpcworc2hvdWxkIGJlIGdpdmVuIGFzIFxmQmRsMVxmUjsgdGhpcyBpcyBkb25lIG9ubHkgZnJvbSB0aGUgZmlyc3QgcG9zaXRpb24gb24KK3RoZSBsaW5lIHRvIGJlIGRlbGV0ZWQuCitWZXJzaW9ucyBvZgorLkIgaWwxCithbmQKKy5CIGRsMQord2hpY2ggdGFrZSBhIHNpbmdsZSBwYXJhbWV0ZXIgYW5kIGluc2VydCBvciBkZWxldGUgdGhhdCBtYW55IGxpbmVzIGNhbgorYmUgZ2l2ZW4gYXMKKy5CIGlsCithbmQKKy5CUiBkbCAuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgYSBzZXR0YWJsZSBzY3JvbGxpbmcgcmVnaW9uIChsaWtlIHRoZSB2dDEwMCkKK3RoZSBjb21tYW5kIHRvIHNldCB0aGlzIGNhbiBiZSBkZXNjcmliZWQgd2l0aCB0aGUKKy5CIGNzcgorY2FwYWJpbGl0eSwgd2hpY2ggdGFrZXMgdHdvIHBhcmFtZXRlcnM6Cit0aGUgdG9wIGFuZCBib3R0b20gbGluZXMgb2YgdGhlIHNjcm9sbGluZyByZWdpb24uCitUaGUgY3Vyc29yIHBvc2l0aW9uIGlzLCBhbGFzLCB1bmRlZmluZWQgYWZ0ZXIgdXNpbmcgdGhpcyBjb21tYW5kLgorLlBQCitJdCBpcyBwb3NzaWJsZSB0byBnZXQgdGhlIGVmZmVjdCBvZiBpbnNlcnQgb3IgZGVsZXRlIGxpbmUgdXNpbmcKKy5CIGNzcgorb24gYSBwcm9wZXJseSBjaG9zZW4gcmVnaW9uOyB0aGUKKy5CIHNjCithbmQKKy5CIHJjCisoc2F2ZSBhbmQgcmVzdG9yZSBjdXJzb3IpIGNvbW1hbmRzIG1heSBiZSB1c2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQKK3lvdXIgc3ludGhlc2l6ZWQgaW5zZXJ0L2RlbGV0ZSBzdHJpbmcgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLgorKE5vdGUgdGhhdCB0aGUgXGZCbmN1cnNlc1xmUigzWCkgbGlicmFyeSBkb2VzIHRoaXMgc3ludGhlc2lzCithdXRvbWF0aWNhbGx5LCBzbyB5b3UgbmVlZCBub3QgY29tcG9zZSBpbnNlcnQvZGVsZXRlIHN0cmluZ3MgZm9yCithbiBlbnRyeSB3aXRoIFxmQmNzclxmUikuCisuUFAKK1lldCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgaW5zZXJ0IGFuZCBkZWxldGUgbWlnaHQgYmUgdG8gdXNlIGEgY29tYmluYXRpb24gb2YKK2luZGV4IHdpdGggdGhlIG1lbW9yeS1sb2NrIGZlYXR1cmUgZm91bmQgb24gc29tZSB0ZXJtaW5hbHMgKGxpa2UgdGhlIEhQLTcwMC85MAorc2VyaWVzLCB3aGljaCBob3dldmVyIGFsc28gaGFzIGluc2VydC9kZWxldGUpLgorLlBQCitJbnNlcnRpbmcgbGluZXMgYXQgdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHNjcmVlbiBjYW4gYWxzbyBiZQorZG9uZSB1c2luZworLkIgcmkKK29yCisuQiBpbmQKK29uIG1hbnkgdGVybWluYWxzIHdpdGhvdXQgYSB0cnVlIGluc2VydC9kZWxldGUgbGluZSwKK2FuZCBpcyBvZnRlbiBmYXN0ZXIgZXZlbiBvbiB0ZXJtaW5hbHMgd2l0aCB0aG9zZSBmZWF0dXJlcy4KKy5QUAorVGhlIGJvb2xlYW4gXGZCbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvblxmUiBzaG91bGQgYmUgc2V0IGlmIGVhY2ggc2Nyb2xsaW5nCit3aW5kb3cgaXMgZWZmZWN0aXZlbHkgYSB2aWV3IHBvcnQgb24gYSBzY3JlZW4tc2l6ZWQgY2FudmFzLgorVG8gdGVzdCBmb3IKK3RoaXMgY2FwYWJpbGl0eSwgY3JlYXRlIGEgc2Nyb2xsaW5nIHJlZ2lvbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4sCit3cml0ZSBzb21ldGhpbmcgdG8gdGhlIGJvdHRvbSBsaW5lLCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHRvcCBvZiB0aGUgcmVnaW9uLAorYW5kIGRvIFxmQnJpXGZSIGZvbGxvd2VkIGJ5IFxmQmRsMVxmUiBvciBcZkJpbmRcZlIuCitJZiB0aGUgZGF0YSBzY3JvbGxlZAorb2ZmIHRoZSBib3R0b20gb2YgdGhlIHJlZ2lvbiBieSB0aGUgXGZCcmlcZlIgcmUtYXBwZWFycywgdGhlbiBzY3JvbGxpbmcKK2lzIG5vbi1kZXN0cnVjdGl2ZS4KK1N5c3RlbSBWIGFuZCBYU0kgQ3Vyc2VzIGV4cGVjdCB0aGF0IFxmQmluZFxmUiwgXGZCcmlcZlIsCitcZkJpbmRuXGZSLCBhbmQgXGZCcmluXGZSIHdpbGwgc2ltdWxhdGUgZGVzdHJ1Y3RpdmUgc2Nyb2xsaW5nOyB0aGVpcgorZG9jdW1lbnRhdGlvbiBjYXV0aW9ucyB5b3Ugbm90IHRvIGRlZmluZSBcZkJjc3JcZlIgdW5sZXNzIHRoaXMgaXMgdHJ1ZS4KK1RoaXMgXGZCY3Vyc2VzXGZSIGltcGxlbWVudGF0aW9uIGlzIG1vcmUgbGliZXJhbCBhbmQgd2lsbCBkbyBleHBsaWNpdCBlcmFzZXMKK2FmdGVyIHNjcm9sbGluZyBpZiBcZkJuZHN0clxmUiBpcyBkZWZpbmVkLgorLlBQCitJZiB0aGUgdGVybWluYWwgaGFzIHRoZSBhYmlsaXR5IHRvIGRlZmluZSBhIHdpbmRvdyBhcyBwYXJ0IG9mCittZW1vcnksIHdoaWNoIGFsbCBjb21tYW5kcyBhZmZlY3QsCitpdCBzaG91bGQgYmUgZ2l2ZW4gYXMgdGhlIHBhcmFtZXRlcml6ZWQgc3RyaW5nCisuQlIgd2luZCAuCitUaGUgZm91ciBwYXJhbWV0ZXJzIGFyZSB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBsaW5lcyBpbiBtZW1vcnkKK2FuZCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBjb2x1bW5zIGluIG1lbW9yeSwgaW4gdGhhdCBvcmRlci4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIGNhbiByZXRhaW4gZGlzcGxheSBtZW1vcnkgYWJvdmUsIHRoZW4gdGhlCitcZkJkYVxmUiBjYXBhYmlsaXR5IHNob3VsZCBiZSBnaXZlbjsgaWYgZGlzcGxheSBtZW1vcnkgY2FuIGJlIHJldGFpbmVkCitiZWxvdywgdGhlbiBcZkJkYlxmUiBzaG91bGQgYmUgZ2l2ZW4uCitUaGVzZSBpbmRpY2F0ZQordGhhdCBkZWxldGluZyBhIGxpbmUgb3Igc2Nyb2xsaW5nIG1heSBicmluZyBub24tYmxhbmsgbGluZXMgdXAgZnJvbSBiZWxvdworb3IgdGhhdCBzY3JvbGxpbmcgYmFjayB3aXRoIFxmQnJpXGZSIG1heSBicmluZyBkb3duIG5vbi1ibGFuayBsaW5lcy4KKy5QUAorLlNTIEluc2VydC9EZWxldGUgQ2hhcmFjdGVyCisuUFAKK1RoZXJlIGFyZSB0d28gYmFzaWMga2luZHMgb2YgaW50ZWxsaWdlbnQgdGVybWluYWxzIHdpdGggcmVzcGVjdCB0bworaW5zZXJ0L2RlbGV0ZSBjaGFyYWN0ZXIgd2hpY2ggY2FuIGJlIGRlc2NyaWJlZCB1c2luZworLkkgdGVybWluZm8uCitUaGUgbW9zdCBjb21tb24gaW5zZXJ0L2RlbGV0ZSBjaGFyYWN0ZXIgb3BlcmF0aW9ucyBhZmZlY3Qgb25seSB0aGUgY2hhcmFjdGVycworb24gdGhlIGN1cnJlbnQgbGluZSBhbmQgc2hpZnQgY2hhcmFjdGVycyBvZmYgdGhlIGVuZCBvZiB0aGUgbGluZSByaWdpZGx5LgorT3RoZXIgdGVybWluYWxzLCBzdWNoIGFzIHRoZSBDb25jZXB0IDEwMCBhbmQgdGhlIFBlcmtpbiBFbG1lciBPd2wsIG1ha2UKK2EgZGlzdGluY3Rpb24gYmV0d2VlbiB0eXBlZCBhbmQgdW50eXBlZCBibGFua3Mgb24gdGhlIHNjcmVlbiwgc2hpZnRpbmcKK3Vwb24gYW4gaW5zZXJ0IG9yIGRlbGV0ZSBvbmx5IHRvIGFuIHVudHlwZWQgYmxhbmsgb24gdGhlIHNjcmVlbiB3aGljaCBpcworZWl0aGVyIGVsaW1pbmF0ZWQsIG9yIGV4cGFuZGVkIHRvIHR3byB1bnR5cGVkIGJsYW5rcy4KK1lvdSBjYW4gZGV0ZXJtaW5lIHRoZQora2luZCBvZiB0ZXJtaW5hbCB5b3UgaGF2ZSBieSBjbGVhcmluZyB0aGUgc2NyZWVuIGFuZCB0aGVuIHR5cGluZwordGV4dCBzZXBhcmF0ZWQgYnkgY3Vyc29yIG1vdGlvbnMuCitUeXBlIFwqKGxxYWJjXCBcIFwgXCBkZWZcKihycSB1c2luZyBsb2NhbAorY3Vyc29yIG1vdGlvbnMgKG5vdCBzcGFjZXMpIGJldHdlZW4gdGhlIFwqKGxxYWJjXCoocnEgYW5kIHRoZSBcKihscWRlZlwqKHJxLgorVGhlbiBwb3NpdGlvbiB0aGUgY3Vyc29yIGJlZm9yZSB0aGUgXCoobHFhYmNcKihycSBhbmQgcHV0IHRoZSB0ZXJtaW5hbCBpbiBpbnNlcnQKK21vZGUuCitJZiB0eXBpbmcgY2hhcmFjdGVycyBjYXVzZXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgdG8gc2hpZnQKK3JpZ2lkbHkgYW5kIGNoYXJhY3RlcnMgdG8gZmFsbCBvZmYgdGhlIGVuZCwgdGhlbiB5b3VyIHRlcm1pbmFsIGRvZXMKK25vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGJsYW5rcyBhbmQgdW50eXBlZCBwb3NpdGlvbnMuCitJZiB0aGUgXCoobHFhYmNcKihycQorc2hpZnRzIG92ZXIgdG8gdGhlIFwqKGxxZGVmXCoocnEgd2hpY2ggdGhlbiBtb3ZlIHRvZ2V0aGVyIGFyb3VuZCB0aGUgZW5kIG9mIHRoZQorY3VycmVudCBsaW5lIGFuZCBvbnRvIHRoZSBuZXh0IGFzIHlvdSBpbnNlcnQsIHlvdSBoYXZlIHRoZSBzZWNvbmQgdHlwZSBvZgordGVybWluYWwsIGFuZCBzaG91bGQgZ2l2ZSB0aGUgY2FwYWJpbGl0eSBcZkJpblxmUiwgd2hpY2ggc3RhbmRzIGZvcgorXCoobHFpbnNlcnQgbnVsbFwqKHJxLgorV2hpbGUgdGhlc2UgYXJlIHR3byBsb2dpY2FsbHkgc2VwYXJhdGUgYXR0cmlidXRlcyAob25lIGxpbmUgdmVyc3VzIG11bHRpLWxpbmUKK2luc2VydCBtb2RlLCBhbmQgc3BlY2lhbCB0cmVhdG1lbnQgb2YgdW50eXBlZCBzcGFjZXMpIHdlIGhhdmUgc2VlbiBubwordGVybWluYWxzIHdob3NlIGluc2VydCBtb2RlIGNhbm5vdCBiZSBkZXNjcmliZWQgd2l0aCB0aGUgc2luZ2xlIGF0dHJpYnV0ZS4KKy5QUAorVGVybWluZm8gY2FuIGRlc2NyaWJlIGJvdGggdGVybWluYWxzIHdoaWNoIGhhdmUgYW4gaW5zZXJ0IG1vZGUsIGFuZCB0ZXJtaW5hbHMKK3doaWNoIHNlbmQgYSBzaW1wbGUgc2VxdWVuY2UgdG8gb3BlbiBhIGJsYW5rIHBvc2l0aW9uIG9uIHRoZSBjdXJyZW50IGxpbmUuCitHaXZlIGFzIFxmQnNtaXJcZlIgdGhlIHNlcXVlbmNlIHRvIGdldCBpbnRvIGluc2VydCBtb2RlLgorR2l2ZSBhcyBcZkJybWlyXGZSIHRoZSBzZXF1ZW5jZSB0byBsZWF2ZSBpbnNlcnQgbW9kZS4KK05vdyBnaXZlIGFzIFxmQmljaDFcZlIgYW55IHNlcXVlbmNlIG5lZWRlZCB0byBiZSBzZW50IGp1c3QgYmVmb3JlIHNlbmRpbmcKK3RoZSBjaGFyYWN0ZXIgdG8gYmUgaW5zZXJ0ZWQuCitNb3N0IHRlcm1pbmFscyB3aXRoIGEgdHJ1ZSBpbnNlcnQgbW9kZQord2lsbCBub3QgZ2l2ZSBcZkJpY2gxXGZSOyB0ZXJtaW5hbHMgd2hpY2ggc2VuZCBhIHNlcXVlbmNlIHRvIG9wZW4gYSBzY3JlZW4KK3Bvc2l0aW9uIHNob3VsZCBnaXZlIGl0IGhlcmUuCisuUFAKK0lmIHlvdXIgdGVybWluYWwgaGFzIGJvdGgsIGluc2VydCBtb2RlIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBcZkJpY2gxXGZSLgorVGVjaG5pY2FsbHksIHlvdSBzaG91bGQgbm90IGdpdmUgYm90aCB1bmxlc3MgdGhlIHRlcm1pbmFsIGFjdHVhbGx5IHJlcXVpcmVzCitib3RoIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24uCitBY2NvcmRpbmdseSwgc29tZSBub24tY3Vyc2VzIGFwcGxpY2F0aW9ucyBnZXQKK2NvbmZ1c2VkIGlmIGJvdGggYXJlIHByZXNlbnQ7IHRoZSBzeW1wdG9tIGlzIGRvdWJsZWQgY2hhcmFjdGVycyBpbiBhbiB1cGRhdGUKK3VzaW5nIGluc2VydC4KK1RoaXMgcmVxdWlyZW1lbnQgaXMgbm93IHJhcmU7IG1vc3QgXGZCaWNoXGZSIHNlcXVlbmNlcyBkbyBub3QKK3JlcXVpcmUgcHJldmlvdXMgc21pciwgYW5kIG1vc3Qgc21pciBpbnNlcnQgbW9kZXMgZG8gbm90IHJlcXVpcmUgXGZCaWNoMVxmUgorYmVmb3JlIGVhY2ggY2hhcmFjdGVyLgorVGhlcmVmb3JlLCB0aGUgbmV3IFxmQmN1cnNlc1xmUiBhY3R1YWxseSBhc3N1bWVzIHRoaXMKK2lzIHRoZSBjYXNlIGFuZCB1c2VzIGVpdGhlciBcZkJybWlyXGZSL1xmQnNtaXJcZlIgb3IgXGZCaWNoXGZSL1xmQmljaDFcZlIgYXMKK2FwcHJvcHJpYXRlIChidXQgbm90IGJvdGgpLgorSWYgeW91IGhhdmUgdG8gd3JpdGUgYW4gZW50cnkgdG8gYmUgdXNlZCB1bmRlcgorbmV3IGN1cnNlcyBmb3IgYSB0ZXJtaW5hbCBvbGQgZW5vdWdoIHRvIG5lZWQgYm90aCwgaW5jbHVkZSB0aGUKK1xmQnJtaXJcZlIvXGZCc21pclxmUiBzZXF1ZW5jZXMgaW4gXGZCaWNoMVxmUi4KKy5QUAorSWYgcG9zdCBpbnNlcnQgcGFkZGluZyBpcyBuZWVkZWQsIGdpdmUgdGhpcyBhcyBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMKK2luIFxmQmlwXGZSIChhIHN0cmluZyBvcHRpb24pLgorQW55IG90aGVyIHNlcXVlbmNlIHdoaWNoIG1heSBuZWVkIHRvIGJlCitzZW50IGFmdGVyIGFuIGluc2VydCBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgbWF5IGFsc28gYmUgZ2l2ZW4gaW4gXGZCaXBcZlIuCitJZiB5b3VyIHRlcm1pbmFsIG5lZWRzIGJvdGggdG8gYmUgcGxhY2VkIGludG8gYW4gYGluc2VydCBtb2RlJyBhbmQKK2Egc3BlY2lhbCBjb2RlIHRvIHByZWNlZGUgZWFjaCBpbnNlcnRlZCBjaGFyYWN0ZXIsIHRoZW4gYm90aAorLkJSIHNtaXIgLyBybWlyCithbmQKKy5CIGljaDEKK2NhbiBiZSBnaXZlbiwgYW5kIGJvdGggd2lsbCBiZSB1c2VkLgorVGhlCisuQiBpY2gKK2NhcGFiaWxpdHksIHdpdGggb25lIHBhcmFtZXRlciwKKy5JUiBuICwKK3dpbGwgcmVwZWF0IHRoZSBlZmZlY3RzIG9mCisuQiBpY2gxCisuSSBuCit0aW1lcy4KKy5QUAorSWYgcGFkZGluZyBpcyBuZWNlc3NhcnkgYmV0d2VlbiBjaGFyYWN0ZXJzIHR5cGVkIHdoaWxlIG5vdAoraW4gaW5zZXJ0IG1vZGUsIGdpdmUgdGhpcyBhcyBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgcGFkZGluZyBpbiBcZkJybXBcZlAuCisuUFAKK0l0IGlzIG9jY2FzaW9uYWxseSBuZWNlc3NhcnkgdG8gbW92ZSBhcm91bmQgd2hpbGUgaW4gaW5zZXJ0IG1vZGUKK3RvIGRlbGV0ZSBjaGFyYWN0ZXJzIG9uIHRoZSBzYW1lIGxpbmUgKGUuZy4sIGlmIHRoZXJlIGlzIGEgdGFiIGFmdGVyCit0aGUgaW5zZXJ0aW9uIHBvc2l0aW9uKS4KK0lmIHlvdXIgdGVybWluYWwgYWxsb3dzIG1vdGlvbiB3aGlsZSBpbgoraW5zZXJ0IG1vZGUgeW91IGNhbiBnaXZlIHRoZSBjYXBhYmlsaXR5IFxmQm1pclxmUiB0byBzcGVlZCB1cCBpbnNlcnRpbmcKK2luIHRoaXMgY2FzZS4KK09taXR0aW5nIFxmQm1pclxmUiB3aWxsIGFmZmVjdCBvbmx5IHNwZWVkLgorU29tZSB0ZXJtaW5hbHMKKyhub3RhYmx5IERhdGFtZWRpYSdzKSBtdXN0IG5vdCBoYXZlIFxmQm1pclxmUiBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlaXIKK2luc2VydCBtb2RlIHdvcmtzLgorLlBQCitGaW5hbGx5LCB5b3UgY2FuIHNwZWNpZnkKKy5CIGRjaDEKK3RvIGRlbGV0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIsCisuQiBkY2gKK3dpdGggb25lIHBhcmFtZXRlciwKKy5JUiBuICwKK3RvIGRlbGV0ZQorLkkgbiBjaGFyYWN0ZXJzLAorYW5kIGRlbGV0ZSBtb2RlIGJ5IGdpdmluZyBcZkJzbWRjXGZSIGFuZCBcZkJybWRjXGZSCit0byBlbnRlciBhbmQgZXhpdCBkZWxldGUgbW9kZSAoYW55IG1vZGUgdGhlIHRlcm1pbmFsIG5lZWRzIHRvIGJlIHBsYWNlZAoraW4gZm9yCisuQiBkY2gxCit0byB3b3JrKS4KKy5QUAorQSBjb21tYW5kIHRvIGVyYXNlCisuSSBuCitjaGFyYWN0ZXJzIChlcXVpdmFsZW50IHRvIG91dHB1dHRpbmcKKy5JIG4KK2JsYW5rcyB3aXRob3V0IG1vdmluZyB0aGUgY3Vyc29yKQorY2FuIGJlIGdpdmVuIGFzCisuQiBlY2gKK3dpdGggb25lIHBhcmFtZXRlci4KKy5QUAorLlNTICJIaWdobGlnaHRpbmcsIFVuZGVybGluaW5nLCBhbmQgVmlzaWJsZSBCZWxscyIKKy5QUAorSWYgeW91ciB0ZXJtaW5hbCBoYXMgb25lIG9yIG1vcmUga2luZHMgb2YgZGlzcGxheSBhdHRyaWJ1dGVzLAordGhlc2UgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB3YXlzLgorWW91IHNob3VsZCBjaG9vc2Ugb25lIGRpc3BsYXkgZm9ybSBhcworXGYyc3RhbmRvdXQgbW9kZVxmUiwKK3JlcHJlc2VudGluZyBhIGdvb2QsIGhpZ2ggY29udHJhc3QsIGVhc3ktb24tdGhlLWV5ZXMsCitmb3JtYXQgZm9yIGhpZ2hsaWdodGluZyBlcnJvciBtZXNzYWdlcyBhbmQgb3RoZXIgYXR0ZW50aW9uIGdldHRlcnMuCisoSWYgeW91IGhhdmUgYSBjaG9pY2UsIHJldmVyc2UgdmlkZW8gcGx1cyBoYWxmLWJyaWdodCBpcyBnb29kLAorb3IgcmV2ZXJzZSB2aWRlbyBhbG9uZS4pCitUaGUgc2VxdWVuY2VzIHRvIGVudGVyIGFuZCBleGl0IHN0YW5kb3V0IG1vZGUKK2FyZSBnaXZlbiBhcyBcZkJzbXNvXGZSIGFuZCBcZkJybXNvXGZSLCByZXNwZWN0aXZlbHkuCitJZiB0aGUgY29kZSB0byBjaGFuZ2UgaW50byBvciBvdXQgb2Ygc3RhbmRvdXQKK21vZGUgbGVhdmVzIG9uZSBvciBldmVuIHR3byBibGFuayBzcGFjZXMgb24gdGhlIHNjcmVlbiwKK2FzIHRoZSBUVkkgOTEyIGFuZCBUZWxlcmF5IDEwNjEgZG8sCit0aGVuIFxmQnhtY1xmUiBzaG91bGQgYmUgZ2l2ZW4gdG8gdGVsbCBob3cgbWFueSBzcGFjZXMgYXJlIGxlZnQuCisuUFAKK0NvZGVzIHRvIGJlZ2luIHVuZGVybGluaW5nIGFuZCBlbmQgdW5kZXJsaW5pbmcgY2FuIGJlIGdpdmVuIGFzIFxmQnNtdWxcZlIKK2FuZCBcZkJybXVsXGZSIHJlc3BlY3RpdmVseS4KK0lmIHRoZSB0ZXJtaW5hbCBoYXMgYSBjb2RlIHRvIHVuZGVybGluZSB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kIG1vdmUKK3RoZSBjdXJzb3Igb25lIHNwYWNlIHRvIHRoZSByaWdodCwKK3N1Y2ggYXMgdGhlIE1pY3JvdGVybSBNaW1lLAordGhpcyBjYW4gYmUgZ2l2ZW4gYXMgXGZCdWNcZlIuCisuUFAKK090aGVyIGNhcGFiaWxpdGllcyB0byBlbnRlciB2YXJpb3VzIGhpZ2hsaWdodGluZyBtb2RlcyBpbmNsdWRlCisuQiBibGluaworKGJsaW5raW5nKQorLkIgYm9sZAorKGJvbGQgb3IgZXh0cmEgYnJpZ2h0KQorLkIgZGltCisoZGltIG9yIGhhbGYtYnJpZ2h0KQorLkIgaW52aXMKKyhibGFua2luZyBvciBpbnZpc2libGUgdGV4dCkKKy5CIHByb3QKKyhwcm90ZWN0ZWQpCisuQiByZXYKKyhyZXZlcnNlIHZpZGVvKQorLkIgc2dyMAorKHR1cm4gb2ZmCisuSSBhbGwKK2F0dHJpYnV0ZSBtb2RlcykKKy5CIHNtYWNzCisoZW50ZXIgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgbW9kZSkKK2FuZAorLkIgcm1hY3MKKyhleGl0IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IG1vZGUpLgorVHVybmluZyBvbiBhbnkgb2YgdGhlc2UgbW9kZXMgc2luZ2x5IG1heSBvciBtYXkgbm90IHR1cm4gb2ZmIG90aGVyIG1vZGVzLgorLlBQCitJZiB0aGVyZSBpcyBhIHNlcXVlbmNlIHRvIHNldCBhcmJpdHJhcnkgY29tYmluYXRpb25zIG9mIG1vZGVzLAordGhpcyBzaG91bGQgYmUgZ2l2ZW4gYXMKKy5CIHNncgorKHNldCBhdHRyaWJ1dGVzKSwKK3Rha2luZyA5IHBhcmFtZXRlcnMuCitFYWNoIHBhcmFtZXRlciBpcyBlaXRoZXIgMCBvciBub256ZXJvLCBhcyB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgb24gb3Igb2ZmLgorVGhlIDkgcGFyYW1ldGVycyBhcmUsIGluIG9yZGVyOgorc3RhbmRvdXQsIHVuZGVybGluZSwgcmV2ZXJzZSwgYmxpbmssIGRpbSwgYm9sZCwgYmxhbmssIHByb3RlY3QsIGFsdGVybmF0ZQorY2hhcmFjdGVyIHNldC4KK05vdCBhbGwgbW9kZXMgbmVlZCBiZSBzdXBwb3J0ZWQgYnkKKy5CUiBzZ3IgLAorb25seSB0aG9zZSBmb3Igd2hpY2ggY29ycmVzcG9uZGluZyBzZXBhcmF0ZSBhdHRyaWJ1dGUgY29tbWFuZHMgZXhpc3QuCisuUFAKK0ZvciBleGFtcGxlLCB0aGUgREVDIHZ0MjIwIHN1cHBvcnRzIG1vc3Qgb2YgdGhlIG1vZGVzOgorLlBQCisuVFMKK2NlbnRlcjsKK2wgYyBjCitsIGMgYworbHcyOCBsdzYgbHcyIGx3MjAuCitcZkJ0cGFybSBwYXJhbWV0ZXIJYXR0cmlidXRlCWVzY2FwZSBzZXF1ZW5jZVxmUAorCitub25lCW5vbmUJXFxFWzBtCitwMQlzdGFuZG91dAlcXEVbMDsxOzdtCitwMgl1bmRlcmxpbmUJXFxFWzA7NG0KK3AzCXJldmVyc2UJXFxFWzA7N20KK3A0CWJsaW5rCVxcRVswOzVtCitwNQlkaW0Jbm90IGF2YWlsYWJsZQorcDYJYm9sZAlcXEVbMDsxbQorcDcJaW52aXMJXFxFWzA7OG0KK3A4CXByb3RlY3QJbm90IHVzZWQKK3A5CWFsdGNoYXJzZXQJXk8gKG9mZikgXk4gKG9uKQorLlRFCisuUFAKK1dlIGJlZ2luIGVhY2ggZXNjYXBlIHNlcXVlbmNlIGJ5IHR1cm5pbmcgb2ZmIGFueSBleGlzdGluZyBtb2Rlcywgc2luY2UKK3RoZXJlIGlzIG5vIHF1aWNrIHdheSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IGFyZSBhY3RpdmUuCitTdGFuZG91dCBpcyBzZXQgdXAgdG8gYmUgdGhlIGNvbWJpbmF0aW9uIG9mIHJldmVyc2UgYW5kIGJvbGQuCitUaGUgdnQyMjAgdGVybWluYWwgaGFzIGEgcHJvdGVjdCBtb2RlLAordGhvdWdoIGl0IGlzIG5vdCBjb21tb25seSB1c2VkIGluIHNncgorYmVjYXVzZSBpdCBwcm90ZWN0cyBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW4gZnJvbSB0aGUgaG9zdCdzIGVyYXN1cmVzLgorVGhlIGFsdGNoYXJzZXQgbW9kZSBhbHNvIGlzIGRpZmZlcmVudCBpbiB0aGF0IGl0IGlzIGVpdGhlciBeTyBvciBeTiwKK2RlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIG9mZiBvciBvbi4KK0lmIGFsbCBtb2RlcyBhcmUgdHVybmVkIG9uLCB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlIGlzIFxcRVswOzE7NDs1Ozc7OG1eTi4KKy5QUAorU29tZSBzZXF1ZW5jZXMgYXJlIGNvbW1vbiB0byBkaWZmZXJlbnQgbW9kZXMuCitGb3IgZXhhbXBsZSwgOzcgaXMgb3V0cHV0IHdoZW4gZWl0aGVyIHAxIG9yIHAzIGlzIHRydWUsIHRoYXQgaXMsIGlmCitlaXRoZXIgc3RhbmRvdXQgb3IgcmV2ZXJzZSBtb2RlcyBhcmUgdHVybmVkIG9uLgorLlBQCitXcml0aW5nIG91dCB0aGUgYWJvdmUgc2VxdWVuY2VzLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcyB5aWVsZHMKKy5QUAorLlRTCitjZW50ZXI7CitsIGMgYworbCBjIGMKK2x3MjggbHc2IGx3MiBsdzIwLgorXGZCc2VxdWVuY2UJd2hlbiB0byBvdXRwdXQJdGVybWluZm8gdHJhbnNsYXRpb25cZlAKKworXFxFWzAJYWx3YXlzCVxcRVswCis7MQlpZiBwMSBvciBwNgklPyVwMSVwNiV8JXQ7MSU7Cis7NAlpZiBwMgklPyVwMiV8JXQ7NCU7Cis7NQlpZiBwNAklPyVwNCV8JXQ7NSU7Cis7NwlpZiBwMSBvciBwMwklPyVwMSVwMyV8JXQ7NyU7Cis7OAlpZiBwNwklPyVwNyV8JXQ7OCU7CittCWFsd2F5cwltCiteTiBvciBeTwlpZiBwOSBeTiwgZWxzZSBeTwklPyVwOSV0Xk4lZV5PJTsKKy5URQorLlBQCitQdXR0aW5nIHRoaXMgYWxsIHRvZ2V0aGVyIGludG8gdGhlIHNnciBzZXF1ZW5jZSBnaXZlczoKKy5QUAorLm5mCisgICAgc2dyPVxcRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOworICAgICAgICAlPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcXDAxNiVlXFwwMTclOywKKy5maQorLlBQCitSZW1lbWJlciB0aGF0IGlmIHlvdSBzcGVjaWZ5IHNnciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHNncjAuCitBbHNvLCBzb21lIGltcGxlbWVudGF0aW9ucyByZWx5IG9uIHNnciBiZWluZyBnaXZlbiBpZiBzZ3IwIGlzLAorTm90IGFsbCB0ZXJtaW5mbyBlbnRyaWVzIG5lY2Vzc2FyaWx5IGhhdmUgYW4gc2dyIHN0cmluZywgaG93ZXZlci4KK01hbnkgdGVybWluZm8gZW50cmllcyBhcmUgZGVyaXZlZCBmcm9tIHRlcm1jYXAgZW50cmllcword2hpY2ggaGF2ZSBubyBzZ3Igc3RyaW5nLgorVGhlIG9ubHkgZHJhd2JhY2sgdG8gYWRkaW5nIGFuIHNnciBzdHJpbmcgaXMgdGhhdCB0ZXJtY2FwIGFsc28KK2Fzc3VtZXMgdGhhdCBzZ3IwIGRvZXMgbm90IGV4aXQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgbW9kZS4KKy5QUAorVGVybWluYWxzIHdpdGggdGhlIGBgbWFnaWMgY29va2llJycgZ2xpdGNoCisuUkIgKCB4bWMgKQorZGVwb3NpdCBzcGVjaWFsIGBgY29va2llcycnIHdoZW4gdGhleSByZWNlaXZlIG1vZGUtc2V0dGluZyBzZXF1ZW5jZXMsCit3aGljaCBhZmZlY3QgdGhlIGRpc3BsYXkgYWxnb3JpdGhtIHJhdGhlciB0aGFuIGhhdmluZyBleHRyYSBiaXRzIGZvcgorZWFjaCBjaGFyYWN0ZXIuCitTb21lIHRlcm1pbmFscywgc3VjaCBhcyB0aGUgSFAgMjYyMSwgYXV0b21hdGljYWxseSBsZWF2ZSBzdGFuZG91dAorbW9kZSB3aGVuIHRoZXkgbW92ZSB0byBhIG5ldyBsaW5lIG9yIHRoZSBjdXJzb3IgaXMgYWRkcmVzc2VkLgorUHJvZ3JhbXMgdXNpbmcgc3RhbmRvdXQgbW9kZSBzaG91bGQgZXhpdCBzdGFuZG91dCBtb2RlIGJlZm9yZQorbW92aW5nIHRoZSBjdXJzb3Igb3Igc2VuZGluZyBhIG5ld2xpbmUsCit1bmxlc3MgdGhlCisuQiBtc2dyCitjYXBhYmlsaXR5LCBhc3NlcnRpbmcgdGhhdCBpdCBpcyBzYWZlIHRvIG1vdmUgaW4gc3RhbmRvdXQgbW9kZSwgaXMgcHJlc2VudC4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIGhhcworYSB3YXkgb2YgZmxhc2hpbmcgdGhlIHNjcmVlbiB0byBpbmRpY2F0ZSBhbiBlcnJvciBxdWlldGx5IChhIGJlbGwgcmVwbGFjZW1lbnQpCit0aGVuIHRoaXMgY2FuIGJlIGdpdmVuIGFzIFxmQmZsYXNoXGZSOyBpdCBtdXN0IG5vdCBtb3ZlIHRoZSBjdXJzb3IuCisuUFAKK0lmIHRoZSBjdXJzb3IgbmVlZHMgdG8gYmUgbWFkZSBtb3JlIHZpc2libGUgdGhhbiBub3JtYWwgd2hlbiBpdCBpcworbm90IG9uIHRoZSBib3R0b20gbGluZSAodG8gbWFrZSwgZm9yIGV4YW1wbGUsIGEgbm9uLWJsaW5raW5nIHVuZGVybGluZSBpbnRvIGFuCitlYXNpZXIgdG8gZmluZCBibG9jayBvciBibGlua2luZyB1bmRlcmxpbmUpCitnaXZlIHRoaXMgc2VxdWVuY2UgYXMKKy5CUiBjdnZpcyAuCitJZiB0aGVyZSBpcyBhIHdheSB0byBtYWtlIHRoZSBjdXJzb3IgY29tcGxldGVseSBpbnZpc2libGUsIGdpdmUgdGhhdCBhcworLkJSIGNpdmlzIC4KK1RoZSBjYXBhYmlsaXR5CisuQlIgY25vcm0KK3Nob3VsZCBiZSBnaXZlbiB3aGljaCB1bmRvZXMgdGhlIGVmZmVjdHMgb2YgYm90aCBvZiB0aGVzZSBtb2Rlcy4KKy5QUAorSWYgeW91ciB0ZXJtaW5hbCBjb3JyZWN0bHkgZ2VuZXJhdGVzIHVuZGVybGluZWQgY2hhcmFjdGVycworKHdpdGggbm8gc3BlY2lhbCBjb2RlcyBuZWVkZWQpCitldmVuIHRob3VnaCBpdCBkb2VzIG5vdCBvdmVyc3RyaWtlLAordGhlbiB5b3Ugc2hvdWxkIGdpdmUgdGhlIGNhcGFiaWxpdHkgXGZCdWxcZlIuCitJZiBhIGNoYXJhY3RlciBvdmVyc3RyaWtpbmcgYW5vdGhlciBsZWF2ZXMgYm90aCBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW4sCitzcGVjaWZ5IHRoZSBjYXBhYmlsaXR5IFxmQm9zXGZQLgorSWYgb3ZlcnN0cmlrZXMgYXJlIGVyYXNhYmxlIHdpdGggYSBibGFuaywKK3RoZW4gdGhpcyBzaG91bGQgYmUgaW5kaWNhdGVkIGJ5IGdpdmluZyBcZkJlb1xmUi4KKy5QUAorLlNTIEtleXBhZCBhbmQgRnVuY3Rpb24gS2V5cworLlBQCitJZiB0aGUgdGVybWluYWwgaGFzIGEga2V5cGFkIHRoYXQgdHJhbnNtaXRzIGNvZGVzIHdoZW4gdGhlIGtleXMgYXJlIHByZXNzZWQsCit0aGlzIGluZm9ybWF0aW9uIGNhbiBiZSBnaXZlbi4KK05vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGFuZGxlCit0ZXJtaW5hbHMgd2hlcmUgdGhlIGtleXBhZCBvbmx5IHdvcmtzIGluIGxvY2FsICh0aGlzIGFwcGxpZXMsIGZvciBleGFtcGxlLAordG8gdGhlIHVuc2hpZnRlZCBIUCAyNjIxIGtleXMpLgorSWYgdGhlIGtleXBhZCBjYW4gYmUgc2V0IHRvIHRyYW5zbWl0IG9yIG5vdCB0cmFuc21pdCwKK2dpdmUgdGhlc2UgY29kZXMgYXMgXGZCc21reFxmUiBhbmQgXGZCcm1reFxmUi4KK090aGVyd2lzZSB0aGUga2V5cGFkIGlzIGFzc3VtZWQgdG8gYWx3YXlzIHRyYW5zbWl0LgorVGhlIGNvZGVzIHNlbnQgYnkgdGhlIGxlZnQgYXJyb3csIHJpZ2h0IGFycm93LCB1cCBhcnJvdywgZG93biBhcnJvdywKK2FuZCBob21lIGtleXMgY2FuIGJlIGdpdmVuIGFzCitcZkJrY3ViMSwga2N1ZjEsIGtjdXUxLCBrY3VkMSwgXGZSYW5kXGZCIGtob21lXGZSIHJlc3BlY3RpdmVseS4KK0lmIHRoZXJlIGFyZSBmdW5jdGlvbiBrZXlzIHN1Y2ggYXMgZjAsIGYxLCAuLi4sIGYxMCwgdGhlIGNvZGVzIHRoZXkgc2VuZAorY2FuIGJlIGdpdmVuIGFzIFxmQmtmMCwga2YxLCAuLi4sIGtmMTBcZlIuCitJZiB0aGVzZSBrZXlzIGhhdmUgbGFiZWxzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgZjAgdGhyb3VnaCBmMTAsIHRoZSBsYWJlbHMKK2NhbiBiZSBnaXZlbiBhcyBcZkJsZjAsIGxmMSwgLi4uLCBsZjEwXGZSLgorVGhlIGNvZGVzIHRyYW5zbWl0dGVkIGJ5IGNlcnRhaW4gb3RoZXIgc3BlY2lhbCBrZXlzIGNhbiBiZSBnaXZlbjoKKy5CIGtsbAorKGhvbWUgZG93biksCisuQiBrYnMKKyhiYWNrc3BhY2UpLAorLkIga3RiYworKGNsZWFyIGFsbCB0YWJzKSwKKy5CIGtjdGFiCisoY2xlYXIgdGhlIHRhYiBzdG9wIGluIHRoaXMgY29sdW1uKSwKKy5CIGtjbHIKKyhjbGVhciBzY3JlZW4gb3IgZXJhc2Uga2V5KSwKKy5CIGtkY2gxCisoZGVsZXRlIGNoYXJhY3RlciksCisuQiBrZGwxCisoZGVsZXRlIGxpbmUpLAorLkIga3JtaXIKKyhleGl0IGluc2VydCBtb2RlKSwKKy5CIGtlbAorKGNsZWFyIHRvIGVuZCBvZiBsaW5lKSwKKy5CIGtlZAorKGNsZWFyIHRvIGVuZCBvZiBzY3JlZW4pLAorLkIga2ljaDEKKyhpbnNlcnQgY2hhcmFjdGVyIG9yIGVudGVyIGluc2VydCBtb2RlKSwKKy5CIGtpbDEKKyhpbnNlcnQgbGluZSksCisuQiBrbnAKKyhuZXh0IHBhZ2UpLAorLkIga3BwCisocHJldmlvdXMgcGFnZSksCisuQiBraW5kCisoc2Nyb2xsIGZvcndhcmQvZG93biksCisuQiBrcmkKKyhzY3JvbGwgYmFja3dhcmQvdXApLAorLkIga2h0cworKHNldCBhIHRhYiBzdG9wIGluIHRoaXMgY29sdW1uKS4KK0luIGFkZGl0aW9uLCBpZiB0aGUga2V5cGFkIGhhcyBhIDMgYnkgMyBhcnJheSBvZiBrZXlzIGluY2x1ZGluZyB0aGUgZm91cgorYXJyb3cga2V5cywgdGhlIG90aGVyIGZpdmUga2V5cyBjYW4gYmUgZ2l2ZW4gYXMKKy5CUiBrYTEgLAorLkJSIGthMyAsCisuQlIga2IyICwKKy5CUiBrYzEgLAorYW5kCisuQlIga2MzIC4KK1RoZXNlIGtleXMgYXJlIHVzZWZ1bCB3aGVuIHRoZSBlZmZlY3RzIG9mIGEgMyBieSAzIGRpcmVjdGlvbmFsIHBhZCBhcmUgbmVlZGVkLgorLlBQCitTdHJpbmdzIHRvIHByb2dyYW0gZnVuY3Rpb24ga2V5cyBjYW4gYmUgZ2l2ZW4gYXMKKy5CUiBwZmtleSAsCisuQlIgcGZsb2MgLAorYW5kCisuQlIgcGZ4IC4KK0Egc3RyaW5nIHRvIHByb2dyYW0gc2NyZWVuIGxhYmVscyBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIFxmQnBsblxmUC4KK0VhY2ggb2YgdGhlc2Ugc3RyaW5ncyB0YWtlcyB0d28gcGFyYW1ldGVyczogdGhlIGZ1bmN0aW9uIGtleSBudW1iZXIgdG8KK3Byb2dyYW0gKGZyb20gMCB0byAxMCkgYW5kIHRoZSBzdHJpbmcgdG8gcHJvZ3JhbSBpdCB3aXRoLgorRnVuY3Rpb24ga2V5IG51bWJlcnMgb3V0IG9mIHRoaXMgcmFuZ2UgbWF5IHByb2dyYW0gdW5kZWZpbmVkIGtleXMgaW4KK2EgdGVybWluYWwgZGVwZW5kZW50IG1hbm5lci4KK1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNhcGFiaWxpdGllcyBpcyB0aGF0CisuQiBwZmtleQorY2F1c2VzIHByZXNzaW5nIHRoZSBnaXZlbiBrZXkgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHVzZXIgdHlwaW5nIHRoZQorZ2l2ZW4gc3RyaW5nOworLkIgcGZsb2MKK2NhdXNlcyB0aGUgc3RyaW5nIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSB0ZXJtaW5hbCBpbiBsb2NhbDsgYW5kCisuQiBwZngKK2NhdXNlcyB0aGUgc3RyaW5nIHRvIGJlIHRyYW5zbWl0dGVkIHRvIHRoZSBjb21wdXRlci4KKy5QUAorVGhlIGNhcGFiaWxpdGllcyBcZkJubGFiXGZQLCBcZkJsd1xmUCBhbmQgXGZCbGhcZlAKK2RlZmluZSB0aGUgbnVtYmVyIG9mIHByb2dyYW1tYWJsZQorc2NyZWVuIGxhYmVscyBhbmQgdGhlaXIgd2lkdGggYW5kIGhlaWdodC4KK0lmIHRoZXJlIGFyZSBjb21tYW5kcyB0byB0dXJuIHRoZSBsYWJlbHMgb24gYW5kIG9mZiwKK2dpdmUgdGhlbSBpbiBcZkJzbWxuXGZQIGFuZCBcZkJybWxuXGZQLgorXGZCc21sblxmUCBpcyBub3JtYWxseSBvdXRwdXQgYWZ0ZXIgb25lIG9yIG1vcmUgcGxuCitzZXF1ZW5jZXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBiZWNvbWVzIHZpc2libGUuCisuUFAKKy5TUyBUYWJzIGFuZCBJbml0aWFsaXphdGlvbgorLlBQCitJZiB0aGUgdGVybWluYWwgaGFzIGhhcmR3YXJlIHRhYnMsIHRoZSBjb21tYW5kIHRvIGFkdmFuY2UgdG8gdGhlIG5leHQKK3RhYiBzdG9wIGNhbiBiZSBnaXZlbiBhcworLkIgaHQKKyh1c3VhbGx5IGNvbnRyb2wgSSkuCitBIGBgYmFjay10YWInJyBjb21tYW5kIHdoaWNoIG1vdmVzIGxlZnR3YXJkIHRvIHRoZSBwcmVjZWRpbmcgdGFiIHN0b3AgY2FuCitiZSBnaXZlbiBhcworLkJSIGNidCAuCitCeSBjb252ZW50aW9uLCBpZiB0aGUgdGVsZXR5cGUgbW9kZXMgaW5kaWNhdGUgdGhhdCB0YWJzIGFyZSBiZWluZworZXhwYW5kZWQgYnkgdGhlIGNvbXB1dGVyIHJhdGhlciB0aGFuIGJlaW5nIHNlbnQgdG8gdGhlIHRlcm1pbmFsLAorcHJvZ3JhbXMgc2hvdWxkIG5vdCB1c2UKKy5CIGh0CitvcgorLkIgY2J0CitldmVuIGlmIHRoZXkgYXJlIHByZXNlbnQsIHNpbmNlIHRoZSB1c2VyIG1heSBub3QgaGF2ZSB0aGUgdGFiIHN0b3BzCitwcm9wZXJseSBzZXQuCitJZiB0aGUgdGVybWluYWwgaGFzIGhhcmR3YXJlIHRhYnMgd2hpY2ggYXJlIGluaXRpYWxseSBzZXQgZXZlcnkKKy5JIG4KK3NwYWNlcyB3aGVuIHRoZSB0ZXJtaW5hbCBpcyBwb3dlcmVkIHVwLAordGhlIG51bWVyaWMgcGFyYW1ldGVyCisuQiBpdAoraXMgZ2l2ZW4sIHNob3dpbmcgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIHRhYnMgYXJlIHNldCB0by4KK1RoaXMgaXMgbm9ybWFsbHkgdXNlZCBieSB0aGUKKy5JUiB0c2V0Citjb21tYW5kIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNldCB0aGUgbW9kZSBmb3IgaGFyZHdhcmUgdGFiIGV4cGFuc2lvbiwKK2FuZCB3aGV0aGVyIHRvIHNldCB0aGUgdGFiIHN0b3BzLgorSWYgdGhlIHRlcm1pbmFsIGhhcyB0YWIgc3RvcHMgdGhhdCBjYW4gYmUgc2F2ZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeSwKK3RoZSB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBjYW4gYXNzdW1lIHRoYXQgdGhleSBhcmUgcHJvcGVybHkgc2V0LgorLlBQCitPdGhlciBjYXBhYmlsaXRpZXMKK2luY2x1ZGUKKy5CUiBpczEgLAorLkJSIGlzMiAsCithbmQKKy5CUiBpczMgLAoraW5pdGlhbGl6YXRpb24gc3RyaW5ncyBmb3IgdGhlIHRlcm1pbmFsLAorLkJSIGlwcm9nICwKK3RoZSBwYXRoIG5hbWUgb2YgYSBwcm9ncmFtIHRvIGJlIHJ1biB0byBpbml0aWFsaXplIHRoZSB0ZXJtaW5hbCwKK2FuZCBcZkJpZlxmUiwgdGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgbG9uZyBpbml0aWFsaXphdGlvbiBzdHJpbmdzLgorVGhlc2Ugc3RyaW5ncyBhcmUgZXhwZWN0ZWQgdG8gc2V0IHRoZSB0ZXJtaW5hbCBpbnRvIG1vZGVzIGNvbnNpc3RlbnQKK3dpdGggdGhlIHJlc3Qgb2YgdGhlIHRlcm1pbmZvIGRlc2NyaXB0aW9uLgorVGhleSBhcmUgbm9ybWFsbHkgc2VudCB0byB0aGUgdGVybWluYWwsIGJ5IHRoZQorLkkgaW5pdAorb3B0aW9uIG9mIHRoZQorLklSIEBUUFVUQAorcHJvZ3JhbSwgZWFjaCB0aW1lIHRoZSB1c2VyIGxvZ3MgaW4uCitUaGV5IHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorLlJTCisuVFAKK3J1biB0aGUgcHJvZ3JhbQorLkJSIGlwcm9nCisuVFAKK291dHB1dAorLkJSIGlzMQorLkJSIGlzMgorLlRQCitzZXQgdGhlIG1hcmdpbnMgdXNpbmcKKy5CUiBtZ2MgLAorLkJSIHNtZ2wKK2FuZAorLkJSIHNtZ3IKKy5UUAorc2V0IHRhYnMgdXNpbmcKKy5CIHRiYworYW5kCisuQlIgaHRzCisuVFAKK3ByaW50IHRoZSBmaWxlCisuQlIgaWYKKy5UUAorYW5kIGZpbmFsbHkKK291dHB1dAorLkJSIGlzMyAuCisuUkUKKy5QUAorTW9zdCBpbml0aWFsaXphdGlvbiBpcyBkb25lIHdpdGgKKy5CUiBpczIgLgorU3BlY2lhbCB0ZXJtaW5hbCBtb2RlcyBjYW4gYmUgc2V0IHVwIHdpdGhvdXQgZHVwbGljYXRpbmcgc3RyaW5ncworYnkgcHV0dGluZyB0aGUgY29tbW9uIHNlcXVlbmNlcyBpbgorLkIgaXMyCithbmQgc3BlY2lhbCBjYXNlcyBpbgorLkIgaXMxCithbmQKKy5CUiBpczMgLgorLlBQCitBIHNldCBvZiBzZXF1ZW5jZXMgdGhhdCBkb2VzIGEgaGFyZGVyIHJlc2V0IGZyb20gYSB0b3RhbGx5IHVua25vd24gc3RhdGUKK2NhbiBiZSBnaXZlbiBhcworLkJSIHJzMSAsCisuQlIgcnMyICwKKy5CUiByZgorYW5kCisuQlIgcnMzICwKK2FuYWxvZ291cyB0bworLkIgaXMxICwKKy5CIGlzMiAsCisuQiBpZgorYW5kCisuQlIgaXMzCityZXNwZWN0aXZlbHkuCitUaGVzZSBzdHJpbmdzIGFyZSBvdXRwdXQgYnkgdGhlCisuSVIgcmVzZXQKK3Byb2dyYW0sIHdoaWNoIGlzIHVzZWQgd2hlbiB0aGUgdGVybWluYWwgZ2V0cyBpbnRvIGEgd2VkZ2VkIHN0YXRlLgorQ29tbWFuZHMgYXJlIG5vcm1hbGx5IHBsYWNlZCBpbgorLkJSIHJzMSAsCisuQlIgcnMyCisuQiByczMKK2FuZAorLkIgcmYKK29ubHkgaWYgdGhleSBwcm9kdWNlIGFubm95aW5nIGVmZmVjdHMgb24gdGhlIHNjcmVlbiBhbmQgYXJlIG5vdAorbmVjZXNzYXJ5IHdoZW4gbG9nZ2luZyBpbi4KK0ZvciBleGFtcGxlLCB0aGUgY29tbWFuZCB0byBzZXQgdGhlIHZ0MTAwIGludG8gODAtY29sdW1uIG1vZGUgd291bGQKK25vcm1hbGx5IGJlIHBhcnQgb2YKKy5CUiBpczIgLAorYnV0IGl0IGNhdXNlcyBhbiBhbm5veWluZyBnbGl0Y2ggb2YgdGhlIHNjcmVlbiBhbmQgaXMgbm90IG5vcm1hbGx5CituZWVkZWQgc2luY2UgdGhlIHRlcm1pbmFsIGlzIHVzdWFsbHkgYWxyZWFkeSBpbiA4MCBjb2x1bW4gbW9kZS4KKy5QUAorVGhlCisuSVIgcmVzZXQKK3Byb2dyYW0gd3JpdGVzIHN0cmluZ3MKK2luY2x1ZGluZworLkJSIGlwcm9nICwKK2V0Yy4sIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQorLklSIGluaXQKK3Byb2dyYW0sIHVzaW5nIAorLkJSIHJzMSAsCitldGMuLCBpbnN0ZWFkIG9mCisuQlIgaXMxICwKK2V0Yy4KK0lmIGFueSBvZgorLkJSIHJzMSAsCisuQlIgcnMyICwKKy5CUiByczMgLAorb3IKKy5CUiByZgorcmVzZXQgY2FwYWJpbGl0eSBzdHJpbmdzIGFyZSBtaXNzaW5nLCB0aGUKKy5JUiByZXNldAorcHJvZ3JhbSBmYWxscyBiYWNrIHVwb24gdGhlIGNvcnJlc3BvbmRpbmcgaW5pdGlhbGl6YXRpb24gY2FwYWJpbGl0eSBzdHJpbmcuCisuUFAKK0lmIHRoZXJlIGFyZSBjb21tYW5kcyB0byBzZXQgYW5kIGNsZWFyIHRhYiBzdG9wcywgdGhleSBjYW4gYmUgZ2l2ZW4gYXMKKy5CIHRiYworKGNsZWFyIGFsbCB0YWIgc3RvcHMpCithbmQKKy5CIGh0cworKHNldCBhIHRhYiBzdG9wIGluIHRoZSBjdXJyZW50IGNvbHVtbiBvZiBldmVyeSByb3cpLgorSWYgYSBtb3JlIGNvbXBsZXggc2VxdWVuY2UgaXMgbmVlZGVkIHRvIHNldCB0aGUgdGFicyB0aGFuIGNhbiBiZQorZGVzY3JpYmVkIGJ5IHRoaXMsIHRoZSBzZXF1ZW5jZSBjYW4gYmUgcGxhY2VkIGluCisuQiBpczIKK29yCisuQlIgaWYgLgorLlNTIERlbGF5cyBhbmQgUGFkZGluZworLlBQCitNYW55IG9sZGVyIGFuZCBzbG93ZXIgdGVybWluYWxzIGRvIG5vdCBzdXBwb3J0IGVpdGhlciBYT04vWE9GRiBvciBEVFIKK2hhbmRzaGFraW5nLCBpbmNsdWRpbmcgaGFyZCBjb3B5IHRlcm1pbmFscyBhbmQgc29tZSB2ZXJ5IGFyY2hhaWMgQ1JUcworKGluY2x1ZGluZywgZm9yIGV4YW1wbGUsIERFQyBWVDEwMHMpLgorVGhlc2UgbWF5IHJlcXVpcmUgcGFkZGluZyBjaGFyYWN0ZXJzCithZnRlciBjZXJ0YWluIGN1cnNvciBtb3Rpb25zIGFuZCBzY3JlZW4gY2hhbmdlcy4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIHVzZXMgeG9uL3hvZmYgaGFuZHNoYWtpbmcgZm9yIGZsb3cgY29udHJvbCAodGhhdCBpcywKK2l0IGF1dG9tYXRpY2FsbHkgZW1pdHMgXlMgYmFjayB0byB0aGUgaG9zdCB3aGVuIGl0cyBpbnB1dCBidWZmZXJzIGFyZQorY2xvc2UgdG8gZnVsbCksIHNldAorLkJSIHhvbiAuCitUaGlzIGNhcGFiaWxpdHkgc3VwcHJlc3NlcyB0aGUgZW1pc3Npb24gb2YgcGFkZGluZy4KK1lvdSBjYW4gYWxzbyBzZXQgaXQKK2ZvciBtZW1vcnktbWFwcGVkIGNvbnNvbGUgZGV2aWNlcyBlZmZlY3RpdmVseSB0aGF0IGRvIG5vdCBoYXZlIGEgc3BlZWQgbGltaXQuCitQYWRkaW5nIGluZm9ybWF0aW9uIHNob3VsZCBzdGlsbCBiZSBpbmNsdWRlZCBzbyB0aGF0IHJvdXRpbmVzIGNhbgorbWFrZSBiZXR0ZXIgZGVjaXNpb25zIGFib3V0IHJlbGF0aXZlIGNvc3RzLCBidXQgYWN0dWFsIHBhZCBjaGFyYWN0ZXJzIHdpbGwKK25vdCBiZSB0cmFuc21pdHRlZC4KKy5QUAorSWYgXGZCcGJcZlIgKHBhZGRpbmcgYmF1ZCByYXRlKSBpcyBnaXZlbiwgcGFkZGluZyBpcyBzdXBwcmVzc2VkIGF0IGJhdWQgcmF0ZXMKK2JlbG93IHRoZSB2YWx1ZSBvZiBcZkJwYlxmUi4KK0lmIHRoZSBlbnRyeSBoYXMgbm8gcGFkZGluZyBiYXVkIHJhdGUsIHRoZW4KK3doZXRoZXIgcGFkZGluZyBpcyBlbWl0dGVkIG9yIG5vdCBpcyBjb21wbGV0ZWx5IGNvbnRyb2xsZWQgYnkgXGZCeG9uXGZSLgorLlBQCitJZiB0aGUgdGVybWluYWwgcmVxdWlyZXMgb3RoZXIgdGhhbiBhIG51bGwgKHplcm8pIGNoYXJhY3RlciBhcyBhIHBhZCwKK3RoZW4gdGhpcyBjYW4gYmUgZ2l2ZW4gYXMgXGZCcGFkXGZSLgorT25seSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorLkIgcGFkCitzdHJpbmcgaXMgdXNlZC4KKy5QUAorLlNTIFN0YXR1cyBMaW5lcworU29tZSB0ZXJtaW5hbHMgaGF2ZSBhbiBleHRyYSBgc3RhdHVzIGxpbmUnIHdoaWNoIGlzIG5vdCBub3JtYWxseSB1c2VkIGJ5Citzb2Z0d2FyZSAoYW5kIHRodXMgbm90IGNvdW50ZWQgaW4gdGhlIHRlcm1pbmFsJ3MgXGZCbGluZXNcZlIgY2FwYWJpbGl0eSkuCisuUFAKK1RoZSBzaW1wbGVzdCBjYXNlIGlzIGEgc3RhdHVzIGxpbmUgd2hpY2ggaXMgY3Vyc29yLWFkZHJlc3NhYmxlIGJ1dCBub3QKK3BhcnQgb2YgdGhlIG1haW4gc2Nyb2xsaW5nIHJlZ2lvbiBvbiB0aGUgc2NyZWVuOyB0aGUgSGVhdGhraXQgSDE5IGhhcworYSBzdGF0dXMgbGluZSBvZiB0aGlzIGtpbmQsIGFzIHdvdWxkIGEgMjQtbGluZSBWVDEwMCB3aXRoIGEgMjMtbGluZQorc2Nyb2xsaW5nIHJlZ2lvbiBzZXQgdXAgb24gaW5pdGlhbGl6YXRpb24uCitUaGlzIHNpdHVhdGlvbiBpcyBpbmRpY2F0ZWQKK2J5IHRoZSBcZkJoc1xmUiBjYXBhYmlsaXR5LgorLlBQCitTb21lIHRlcm1pbmFscyB3aXRoIHN0YXR1cyBsaW5lcyBuZWVkIHNwZWNpYWwgc2VxdWVuY2VzIHRvIGFjY2VzcyB0aGUKK3N0YXR1cyBsaW5lLgorVGhlc2UgbWF5IGJlIGV4cHJlc3NlZCBhcyBhIHN0cmluZyB3aXRoIHNpbmdsZSBwYXJhbWV0ZXIKK1xmQnRzbFxmUiB3aGljaCB0YWtlcyB0aGUgY3Vyc29yIHRvIGEgZ2l2ZW4gemVyby1vcmlnaW4gY29sdW1uIG9uIHRoZQorc3RhdHVzIGxpbmUuCitUaGUgY2FwYWJpbGl0eSBcZkJmc2xcZlIgbXVzdCByZXR1cm4gdG8gdGhlIG1haW4tc2NyZWVuCitjdXJzb3IgcG9zaXRpb25zIGJlZm9yZSB0aGUgbGFzdCBcZkJ0c2xcZlIuCitZb3UgbWF5IG5lZWQgdG8gZW1iZWQgdGhlCitzdHJpbmcgdmFsdWVzIG9mIFxmQnNjXGZSIChzYXZlIGN1cnNvcikgYW5kIFxmQnJjXGZSIChyZXN0b3JlIGN1cnNvcikKK2luIFxmQnRzbFxmUiBhbmQgXGZCZnNsXGZSIHRvIGFjY29tcGxpc2ggdGhpcy4KKy5QUAorVGhlIHN0YXR1cyBsaW5lIGlzIG5vcm1hbGx5IGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHdpZHRoCitvZiB0aGUgdGVybWluYWwuCitJZiB0aGlzIGlzIHVudHJ1ZSwgeW91IGNhbiBzcGVjaWZ5IGl0IHdpdGggdGhlIG51bWVyaWMKK2NhcGFiaWxpdHkgXGZCd3NsXGZSLgorLlBQCitBIGNvbW1hbmQgdG8gZXJhc2Ugb3IgYmxhbmsgdGhlIHN0YXR1cyBsaW5lIG1heSBiZSBzcGVjaWZpZWQgYXMgXGZCZHNsXGZSLgorLlBQCitUaGUgYm9vbGVhbiBjYXBhYmlsaXR5IFxmQmVzbG9rXGZSIHNwZWNpZmllcyB0aGF0IGVzY2FwZSBzZXF1ZW5jZXMsIHRhYnMsCitldGMuLCB3b3JrIG9yZGluYXJpbHkgaW4gdGhlIHN0YXR1cyBsaW5lLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgdXNlIGFueSBvZiB0aGVzZSBjYXBhYmlsaXRpZXMuCitUaGV5IGFyZSBkb2N1bWVudGVkIGhlcmUgaW4gY2FzZSB0aGV5IGV2ZXIgYmVjb21lIGltcG9ydGFudC4KKy5QUAorLlNTIExpbmUgR3JhcGhpY3MKKy5QUAorTWFueSB0ZXJtaW5hbHMgaGF2ZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldHMgdXNlZnVsIGZvciBmb3Jtcy1kcmF3aW5nLgorVGVybWluZm8gYW5kIFxmQmN1cnNlc1xmUiBidWlsZCBpbiBzdXBwb3J0IGZvciB0aGUgZHJhd2luZyBjaGFyYWN0ZXJzCitzdXBwb3J0ZWQgYnkgdGhlIFZUMTAwLCB3aXRoIHNvbWUgY2hhcmFjdGVycyBmcm9tIHRoZSBBVCZUIDQ0MTB2MSBhZGRlZC4KK1RoaXMgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgbWF5IGJlIHNwZWNpZmllZCBieSB0aGUgXGZCYWNzY1xmUiBjYXBhYmlsaXR5LgorLlBQCisuVFMgSAorY2VudGVyIGV4cGFuZDsKK2MgbCBsIGMKK2MgbCBsIGMKK2x3MjggbHc2IGx3MiBsdzIwLgorLlwiLlRICitcZkJHbHlwaAlBQ1MJQXNjaWkJVlQxMDBcZlIKK1xmQk5hbWUJTmFtZQlEZWZhdWx0CU5hbWVcZlIKK1VLIHBvdW5kIHNpZ24gICAgICAgIAlBQ1NfU1RFUkxJTkcJZgl9CithcnJvdyBwb2ludGluZyBkb3duCUFDU19EQVJST1cJdgkuCithcnJvdyBwb2ludGluZyBsZWZ0CUFDU19MQVJST1cJPAksCithcnJvdyBwb2ludGluZyByaWdodAlBQ1NfUkFSUk9XCT4JKworYXJyb3cgcG9pbnRpbmcgdXAJQUNTX1VBUlJPVwleCS0KK2JvYXJkIG9mIHNxdWFyZXMJQUNTX0JPQVJECSMJaAorYnVsbGV0ICAgICAgICAgIAlBQ1NfQlVMTEVUCW8JfgorY2hlY2tlciBib2FyZCAoc3RpcHBsZSkJQUNTX0NLQk9BUkQJOglhCitkZWdyZWUgc3ltYm9sICAgCUFDU19ERUdSRUUJXGUJZgorZGlhbW9uZCAgICAgICAgIAlBQ1NfRElBTU9ORAkrCWAKK2dyZWF0ZXItdGhhbi1vci1lcXVhbC10bwlBQ1NfR0VRVUFMCT4JegorZ3JlZWsgcGkgICAgICAgIAlBQ1NfUEkJKgl7Citob3Jpem9udGFsIGxpbmUgCUFDU19ITElORQktCXEKK2xhbnRlcm4gc3ltYm9sICAJQUNTX0xBTlRFUk4JIwlpCitsYXJnZSBwbHVzIG9yIGNyb3Nzb3ZlcglBQ1NfUExVUwkrCW4KK2xlc3MtdGhhbi1vci1lcXVhbC10bwlBQ1NfTEVRVUFMCTwJeQorbG93ZXIgbGVmdCBjb3JuZXIJQUNTX0xMQ09STkVSCSsJbQorbG93ZXIgcmlnaHQgY29ybmVyCUFDU19MUkNPUk5FUgkrCWoKK25vdC1lcXVhbCAgICAgICAJQUNTX05FUVVBTAkhCXwKK3BsdXMvbWludXMgICAgICAJQUNTX1BMTUlOVVMJIwlnCitzY2FuIGxpbmUgMSAgICAgCUFDU19TMSAgCX4Jbworc2NhbiBsaW5lIDMgICAgIAlBQ1NfUzMgIAktCXAKK3NjYW4gbGluZSA3ICAgICAJQUNTX1M3ICAJLQlyCitzY2FuIGxpbmUgOSAgICAgCUFDU19TOSAgCVwmXwlzCitzb2xpZCBzcXVhcmUgYmxvY2sJQUNTX0JMT0NLCSMJMAordGVlIHBvaW50aW5nIGRvd24JQUNTX1RURUUJKwl3Cit0ZWUgcG9pbnRpbmcgbGVmdAlBQ1NfUlRFRQkrCXUKK3RlZSBwb2ludGluZyByaWdodAlBQ1NfTFRFRQkrCXQKK3RlZSBwb2ludGluZyB1cCAJQUNTX0JURUUJKwl2Cit1cHBlciBsZWZ0IGNvcm5lcglBQ1NfVUxDT1JORVIJKwlsCit1cHBlciByaWdodCBjb3JuZXIJQUNTX1VSQ09STkVSCSsJawordmVydGljYWwgbGluZSAgIAlBQ1NfVkxJTkUJfAl4CisuVEUKKy5QUAorVGhlIGJlc3Qgd2F5IHRvIGRlZmluZSBhIG5ldyBkZXZpY2UncyBncmFwaGljcyBzZXQgaXMgdG8gYWRkIGEgY29sdW1uCit0byBhIGNvcHkgb2YgdGhpcyB0YWJsZSBmb3IgeW91ciB0ZXJtaW5hbCwgZ2l2aW5nIHRoZSBjaGFyYWN0ZXIgd2hpY2gKKyh3aGVuIGVtaXR0ZWQgYmV0d2VlbiBcZkJzbWFjc1xmUi9cZkJybWFjc1xmUiBzd2l0Y2hlcykgd2lsbCBiZSByZW5kZXJlZAorYXMgdGhlIGNvcnJlc3BvbmRpbmcgZ3JhcGhpYy4KK1RoZW4gcmVhZCBvZmYgdGhlIFZUMTAwL3lvdXIgdGVybWluYWwKK2NoYXJhY3RlciBwYWlycyByaWdodCB0byBsZWZ0IGluIHNlcXVlbmNlOyB0aGVzZSBiZWNvbWUgdGhlIEFDU0Mgc3RyaW5nLgorLlBQCisuU1MgQ29sb3IgSGFuZGxpbmcKKy5QUAorTW9zdCBjb2xvciB0ZXJtaW5hbHMgYXJlIGVpdGhlciBgVGVrdHJvbml4LWxpa2UnIG9yIGBIUC1saWtlJy4KK1Rla3Ryb25peC1saWtlCit0ZXJtaW5hbHMgaGF2ZSBhIHByZWRlZmluZWQgc2V0IG9mIE4gY29sb3JzICh3aGVyZSBOIHVzdWFsbHkgOCksIGFuZCBjYW4gc2V0CitjaGFyYWN0ZXItY2VsbCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNoYXJhY3RlcnMgaW5kZXBlbmRlbnRseSwgbWl4aW5nIHRoZW0KK2ludG8gTiAqIE4gY29sb3ItcGFpcnMuCitPbiBIUC1saWtlIHRlcm1pbmFscywgdGhlIHVzZSBtdXN0IHNldCBlYWNoIGNvbG9yCitwYWlyIHVwIHNlcGFyYXRlbHkgKGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgYXJlIG5vdCBpbmRlcGVuZGVudGx5IHNldHRhYmxlKS4KK1VwIHRvIE0gY29sb3ItcGFpcnMgbWF5IGJlIHNldCB1cCBmcm9tIDIqTSBkaWZmZXJlbnQgY29sb3JzLgorQU5TSS1jb21wYXRpYmxlCit0ZXJtaW5hbHMgYXJlIFRla3Ryb25peC1saWtlLgorLlBQCitTb21lIGJhc2ljIGNvbG9yIGNhcGFiaWxpdGllcyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbG9yIG1ldGhvZC4KK1RoZSBudW1lcmljCitjYXBhYmlsaXRpZXMgXGZCY29sb3JzXGZSIGFuZCBcZkJwYWlyc1xmUiBzcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlcnMgb2YgY29sb3JzCithbmQgY29sb3ItcGFpcnMgdGhhdCBjYW4gYmUgZGlzcGxheWVkIHNpbXVsdGFuZW91c2x5LgorVGhlIFxmQm9wXGZSIChvcmlnaW5hbAorcGFpcikgc3RyaW5nIHJlc2V0cyBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcworZm9yIHRoZSB0ZXJtaW5hbC4KK1RoZSBcZkJvY1xmUiBzdHJpbmcgcmVzZXRzIGFsbCBjb2xvcnMgb3IgY29sb3ItcGFpcnMgdG8KK3RoZWlyIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgdGVybWluYWwuCitTb21lIHRlcm1pbmFscyAoaW5jbHVkaW5nIG1hbnkgUEMKK3Rlcm1pbmFsIGVtdWxhdG9ycykgZXJhc2Ugc2NyZWVuIGFyZWFzIHdpdGggdGhlIGN1cnJlbnQgYmFja2dyb3VuZCBjb2xvciByYXRoZXIKK3RoYW4gdGhlIHBvd2VyLXVwIGRlZmF1bHQgYmFja2dyb3VuZDsgdGhlc2Ugc2hvdWxkIGhhdmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0eQorXGZCYmNlXGZSLgorLlBQCitUbyBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9yIG9uIGEgVGVrdHJvbml4LXR5cGUKK3Rlcm1pbmFsLCB1c2UgXGZCc2V0YWZcZlIgKHNldCBBTlNJIGZvcmVncm91bmQpIGFuZCBcZkJzZXRhYlxmUiAoc2V0IEFOU0kKK2JhY2tncm91bmQpIG9yIFxmQnNldGZcZlIgKHNldCBmb3JlZ3JvdW5kKSBhbmQgXGZCc2V0YlxmUiAoc2V0IGJhY2tncm91bmQpLgorVGhlc2UgdGFrZSBvbmUgcGFyYW1ldGVyLCB0aGUgY29sb3IgbnVtYmVyLgorVGhlIFNWcjQgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMKK29ubHkgXGZCc2V0YWZcZlIvXGZCc2V0YWJcZlI7IHRoZSBYUEc0IGRyYWZ0IHNheXMgdGhhdCAiSWYgdGhlIHRlcm1pbmFsCitzdXBwb3J0cyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gc2V0IGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQsIHRoZXkgc2hvdWxkCitiZSBjb2RlZCBhcyBcZkJzZXRhZlxmUiBhbmQgXGZCc2V0YWJcZlIsIHJlc3BlY3RpdmVseS4KK0lmIHRoZSB0ZXJtaW5hbAorc3VwcG9ydHMgb3RoZXIgZXNjYXBlIHNlcXVlbmNlcyB0byBzZXQgYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCwgdGhleSBzaG91bGQKK2JlIGNvZGVkIGFzIFxmQnNldGZcZlIgYW5kIFxmQnNldGJcZlIsIHJlc3BlY3RpdmVseS4KK1RoZSBcZkl2aWRwdXRzKClcZlIKK2Z1bmN0aW9uIGFuZCB0aGUgcmVmcmVzaCBmdW5jdGlvbnMgdXNlIFxmQnNldGFmXGZSIGFuZCBcZkJzZXRhYlxmUiBpZiB0aGV5IGFyZQorZGVmaW5lZC4iCisuUFAKK1RoZSBcZkJzZXRhZlxmUi9cZkJzZXRhYlxmUiBhbmQgXGZCc2V0ZlxmUi9cZkJzZXRiXGZSIGNhcGFiaWxpdGllcyB0YWtlIGEKK3NpbmdsZSBudW1lcmljIGFyZ3VtZW50IGVhY2guCitBcmd1bWVudCB2YWx1ZXMgMC03IG9mIFxmQnNldGFmXGZSL1xmQnNldGFiXGZSIGFyZSBwb3J0YWJseSBkZWZpbmVkIGFzCitmb2xsb3dzICh0aGUgbWlkZGxlIGNvbHVtbiBpcyB0aGUgc3ltYm9saWMgI2RlZmluZSBhdmFpbGFibGUgaW4gdGhlIGhlYWRlciBmb3IKK3RoZSBcZkJjdXJzZXNcZlIgb3IgXGZCbmN1cnNlc1xmUiBsaWJyYXJpZXMpLgorVGhlIHRlcm1pbmFsIGhhcmR3YXJlIGlzIGZyZWUgdG8KK21hcCB0aGVzZSBhcyBpdCBsaWtlcywgYnV0IHRoZSBSR0IgdmFsdWVzIGluZGljYXRlIG5vcm1hbCBsb2NhdGlvbnMgaW4gY29sb3IKK3NwYWNlLgorLlBQCisuVFMgSAorY2VudGVyOworbCBjIGMgYworbCBsIG4gbC4KK1xmQkNvbG9yCSNkZWZpbmUgCVZhbHVlCVJHQlxmUgorYmxhY2sJXGZCQ09MT1JfQkxBQ0tcZlIJMAkwLCAwLCAwCityZWQJXGZCQ09MT1JfUkVEXCBcZlIJMQltYXgsMCwwCitncmVlbglcZkJDT0xPUl9HUkVFTlxmUgkyCTAsbWF4LDAKK3llbGxvdwlcZkJDT0xPUl9ZRUxMT1dcZlIJMwltYXgsbWF4LDAKK2JsdWUJXGZCQ09MT1JfQkxVRVxmUgk0CTAsMCxtYXgKK21hZ2VudGEJXGZCQ09MT1JfTUFHRU5UQVxmUgk1CW1heCwwLG1heAorY3lhbglcZkJDT0xPUl9DWUFOXGZSCTYJMCxtYXgsbWF4Cit3aGl0ZQlcZkJDT0xPUl9XSElURVxmUgk3CW1heCxtYXgsbWF4CisuVEUKKy5QUAorVGhlIGFyZ3VtZW50IHZhbHVlcyBvZiBcZkJzZXRmXGZSL1xmQnNldGJcZlIgaGlzdG9yaWNhbGx5IGNvcnJlc3BvbmQgdG8KK2EgZGlmZmVyZW50IG1hcHBpbmcsIGkuZS4sCisuVFMgSAorY2VudGVyOworbCBjIGMgYworbCBsIG4gbC4KK1xmQkNvbG9yCSNkZWZpbmUgCVZhbHVlCVJHQlxmUgorYmxhY2sJXGZCQ09MT1JfQkxBQ0tcZlIJMAkwLCAwLCAwCitibHVlCVxmQkNPTE9SX0JMVUVcZlIJMQkwLDAsbWF4CitncmVlbglcZkJDT0xPUl9HUkVFTlxmUgkyCTAsbWF4LDAKK2N5YW4JXGZCQ09MT1JfQ1lBTlxmUgkzCTAsbWF4LG1heAorcmVkCVxmQkNPTE9SX1JFRFwgXGZSCTQJbWF4LDAsMAorbWFnZW50YQlcZkJDT0xPUl9NQUdFTlRBXGZSCTUJbWF4LDAsbWF4Cit5ZWxsb3cJXGZCQ09MT1JfWUVMTE9XXGZSCTYJbWF4LG1heCwwCit3aGl0ZQlcZkJDT0xPUl9XSElURVxmUgk3CW1heCxtYXgsbWF4CisuVEUKK0l0IGlzIGltcG9ydGFudCB0byBub3QgY29uZnVzZSB0aGUgdHdvIHNldHMgb2YgY29sb3IgY2FwYWJpbGl0aWVzOworb3RoZXJ3aXNlIHJlZC9ibHVlIHdpbGwgYmUgaW50ZXJjaGFuZ2VkIG9uIHRoZSBkaXNwbGF5LgorLlBQCitPbiBhbiBIUC1saWtlIHRlcm1pbmFsLCB1c2UgXGZCc2NwXGZSIHdpdGggYSBjb2xvci1wYWlyIG51bWJlciBwYXJhbWV0ZXIgdG8gc2V0Cit3aGljaCBjb2xvciBwYWlyIGlzIGN1cnJlbnQuCisuUFAKK09uIGEgVGVrdHJvbml4LWxpa2UgdGVybWluYWwsIHRoZSBjYXBhYmlsaXR5IFxmQmNjY1xmUiBtYXkgYmUgcHJlc2VudCB0bworaW5kaWNhdGUgdGhhdCBjb2xvcnMgY2FuIGJlIG1vZGlmaWVkLgorSWYgc28sIHRoZSBcZkJpbml0Y1xmUiBjYXBhYmlsaXR5IHdpbGwKK3Rha2UgYSBjb2xvciBudW1iZXIgKDAgdG8gXGZCY29sb3JzXGZSIC0gMSlhbmQgdGhyZWUgbW9yZSBwYXJhbWV0ZXJzIHdoaWNoCitkZXNjcmliZSB0aGUgY29sb3IuCitUaGVzZSB0aHJlZSBwYXJhbWV0ZXJzIGRlZmF1bHQgdG8gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgUkdCCisoUmVkLCBHcmVlbiwgQmx1ZSkgdmFsdWVzLgorSWYgdGhlIGJvb2xlYW4gY2FwYWJpbGl0eSBcZkJobHNcZlIgaXMgcHJlc2VudCwKK3RoZXkgYXJlIGluc3RlYWQgYXMgSExTIChIdWUsIExpZ2h0bmVzcywgU2F0dXJhdGlvbikgaW5kaWNlcy4KK1RoZSByYW5nZXMgYXJlCit0ZXJtaW5hbC1kZXBlbmRlbnQuCisuUFAKK09uIGFuIEhQLWxpa2UgdGVybWluYWwsIFxmQmluaXRwXGZSIG1heSBnaXZlIGEgY2FwYWJpbGl0eSBmb3IgY2hhbmdpbmcgYQorY29sb3ItcGFpciB2YWx1ZS4KK0l0IHdpbGwgdGFrZSBzZXZlbiBwYXJhbWV0ZXJzOyBhIGNvbG9yLXBhaXIgbnVtYmVyICgwIHRvCitcZkJtYXhfcGFpcnNcZlIgLSAxKSwgYW5kIHR3byB0cmlwbGVzIGRlc2NyaWJpbmcgZmlyc3QgYmFja2dyb3VuZCBhbmQgdGhlbgorZm9yZWdyb3VuZCBjb2xvcnMuCitUaGVzZSBwYXJhbWV0ZXJzIG11c3QgYmUgKFJlZCwgR3JlZW4sIEJsdWUpIG9yCisoSHVlLCBMaWdodG5lc3MsIFNhdHVyYXRpb24pIGRlcGVuZGluZyBvbiBcZkJobHNcZlIuCisuUFAKK09uIHNvbWUgY29sb3IgdGVybWluYWxzLCBjb2xvcnMgY29sbGlkZSB3aXRoIGhpZ2hsaWdodHMuCitZb3UgY2FuIHJlZ2lzdGVyCit0aGVzZSBjb2xsaXNpb25zIHdpdGggdGhlIFxmQm5jdlxmUiBjYXBhYmlsaXR5LgorVGhpcyBpcyBhIGJpdC1tYXNrIG9mCithdHRyaWJ1dGVzIG5vdCB0byBiZSB1c2VkIHdoZW4gY29sb3JzIGFyZSBlbmFibGVkLgorVGhlIGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlCithdHRyaWJ1dGVzIHVuZGVyc3Rvb2QgYnkgXGZCY3Vyc2VzXGZSIGlzIGFzIGZvbGxvd3M6CisuUFAKKy5UUworY2VudGVyOworbCBjIGMKK2x3MjUgbHcyIGx3MTAuCitcZkJBdHRyaWJ1dGUJQml0CURlY2ltYWxcZlIKK0FfU1RBTkRPVVQJMAkxCitBX1VOREVSTElORQkxCTIKK0FfUkVWRVJTRQkyCTQKK0FfQkxJTksgICAJMwk4CitBX0RJTSAgICAgIAk0CTE2CitBX0JPTEQgICAgCTUJMzIKK0FfSU5WSVMgICAJNgk2NAorQV9QUk9URUNUCTcJMTI4CitBX0FMVENIQVJTRVQJOAkyNTYKKy5URQorLlBQCitGb3IgZXhhbXBsZSwgb24gbWFueSBJQk0gUEMgY29uc29sZXMsIHRoZSB1bmRlcmxpbmUgYXR0cmlidXRlIGNvbGxpZGVzIHdpdGggdGhlCitmb3JlZ3JvdW5kIGNvbG9yIGJsdWUgYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gY29sb3IgbW9kZS4KK1RoZXNlIHNob3VsZCBoYXZlCithbiBcZkJuY3ZcZlIgY2FwYWJpbGl0eSBvZiAyLgorLlBQCitTVnI0IGN1cnNlcyBkb2VzIG5vdGhpbmcgd2l0aCBcZkJuY3ZcZlIsIG5jdXJzZXMgcmVjb2duaXplcyBpdCBhbmQgb3B0aW1pemVzCit0aGUgb3V0cHV0IGluIGZhdm9yIG9mIGNvbG9ycy4KKy5QUAorLlNTIE1pc2NlbGxhbmVvdXMKK0lmIHRoZSB0ZXJtaW5hbCByZXF1aXJlcyBvdGhlciB0aGFuIGEgbnVsbCAoemVybykgY2hhcmFjdGVyIGFzIGEgcGFkLCB0aGVuIHRoaXMKK2NhbiBiZSBnaXZlbiBhcyBwYWQuCitPbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHBhZCBzdHJpbmcgaXMgdXNlZC4KK0lmIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBoYXZlIGEgcGFkIGNoYXJhY3Rlciwgc3BlY2lmeSBucGMuCitOb3RlIHRoYXQgbmN1cnNlcyBpbXBsZW1lbnRzIHRoZSB0ZXJtY2FwLWNvbXBhdGlibGUgXGZCUENcZlIgdmFyaWFibGU7Cit0aG91Z2ggdGhlIGFwcGxpY2F0aW9uIG1heSBzZXQgdGhpcyB2YWx1ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbgorYSBudWxsLCBuY3Vyc2VzIHdpbGwgdGVzdCBcZkJucGNcZlIgZmlyc3QgYW5kIHVzZSBuYXBtcyBpZiB0aGUgdGVybWluYWwKK2hhcyBubyBwYWQgY2hhcmFjdGVyLgorLlBQCitJZiB0aGUgdGVybWluYWwgY2FuIG1vdmUgdXAgb3IgZG93biBoYWxmIGEgbGluZSwKK3RoaXMgY2FuIGJlIGluZGljYXRlZCB3aXRoCisuQiBodQorKGhhbGYtbGluZSB1cCkKK2FuZAorLkIgaGQKKyhoYWxmLWxpbmUgZG93bikuCitUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBvbiBoYXJkLWNvcHkgdGVybWluYWxzLgorSWYgYSBoYXJkLWNvcHkgdGVybWluYWwgY2FuIGVqZWN0IHRvIHRoZSBuZXh0IHBhZ2UgKGZvcm0gZmVlZCksIGdpdmUgdGhpcyBhcworLkIgZmYKKyh1c3VhbGx5IGNvbnRyb2wgTCkuCisuUFAKK0lmIHRoZXJlIGlzIGEgY29tbWFuZCB0byByZXBlYXQgYSBnaXZlbiBjaGFyYWN0ZXIgYSBnaXZlbiBudW1iZXIgb2YKK3RpbWVzICh0byBzYXZlIHRpbWUgdHJhbnNtaXR0aW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGlkZW50aWNhbCBjaGFyYWN0ZXJzKQordGhpcyBjYW4gYmUgaW5kaWNhdGVkIHdpdGggdGhlIHBhcmFtZXRlcml6ZWQgc3RyaW5nCisuQlIgcmVwIC4KK1RoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGNoYXJhY3RlciB0byBiZSByZXBlYXRlZCBhbmQgdGhlIHNlY29uZAoraXMgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgaXQuCitUaHVzLCB0cGFybShyZXBlYXRfY2hhciwgJ3gnLCAxMCkgaXMgdGhlIHNhbWUgYXMgYHh4eHh4eHh4eHgnLgorLlBQCitJZiB0aGUgdGVybWluYWwgaGFzIGEgc2V0dGFibGUgY29tbWFuZCBjaGFyYWN0ZXIsIHN1Y2ggYXMgdGhlIFxzLTFURUtUUk9OSVhccysxIDQwMjUsCit0aGlzIGNhbiBiZSBpbmRpY2F0ZWQgd2l0aAorLkJSIGNtZGNoIC4KK0EgcHJvdG90eXBlIGNvbW1hbmQgY2hhcmFjdGVyIGlzIGNob3NlbiB3aGljaCBpcyB1c2VkIGluIGFsbCBjYXBhYmlsaXRpZXMuCitUaGlzIGNoYXJhY3RlciBpcyBnaXZlbiBpbiB0aGUKKy5CIGNtZGNoCitjYXBhYmlsaXR5IHRvIGlkZW50aWZ5IGl0LgorVGhlIGZvbGxvd2luZyBjb252ZW50aW9uIGlzIHN1cHBvcnRlZCBvbiBzb21lIFVOSVggc3lzdGVtczoKK1RoZSBlbnZpcm9ubWVudCBpcyB0byBiZSBzZWFyY2hlZCBmb3IgYQorLkIgQ0MKK3ZhcmlhYmxlLCBhbmQgaWYgZm91bmQsIGFsbAorb2NjdXJyZW5jZXMgb2YgdGhlIHByb3RvdHlwZSBjaGFyYWN0ZXIgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGNoYXJhY3RlcgoraW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLgorLlBQCitUZXJtaW5hbCBkZXNjcmlwdGlvbnMgdGhhdCBkbyBub3QgcmVwcmVzZW50IGEgc3BlY2lmaWMga2luZCBvZiBrbm93bgordGVybWluYWwsIHN1Y2ggYXMKKy5JUiBzd2l0Y2ggLAorLklSIGRpYWx1cCAsCisuSVIgcGF0Y2ggLAorYW5kCisuSVIgbmV0d29yayAsCitzaG91bGQgaW5jbHVkZSB0aGUKKy5CIGduCisoZ2VuZXJpYykgY2FwYWJpbGl0eSBzbyB0aGF0IHByb2dyYW1zIGNhbiBjb21wbGFpbiB0aGF0IHRoZXkgZG8gbm90IGtub3cKK2hvdyB0byB0YWxrIHRvIHRoZSB0ZXJtaW5hbC4KKyhUaGlzIGNhcGFiaWxpdHkgZG9lcyBub3QgYXBwbHkgdG8KKy5JIHZpcnR1YWwKK3Rlcm1pbmFsIGRlc2NyaXB0aW9ucyBmb3Igd2hpY2ggdGhlIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGtub3duLikKKy5QUAorSWYgdGhlIHRlcm1pbmFsIGhhcyBhIGBgbWV0YSBrZXknJyB3aGljaCBhY3RzIGFzIGEgc2hpZnQga2V5LAorc2V0dGluZyB0aGUgOHRoIGJpdCBvZiBhbnkgY2hhcmFjdGVyIHRyYW5zbWl0dGVkLCB0aGlzIGZhY3QgY2FuCitiZSBpbmRpY2F0ZWQgd2l0aAorLkJSIGttIC4KK090aGVyd2lzZSwgc29mdHdhcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgOHRoIGJpdCBpcyBwYXJpdHkgYW5kIGl0Cit3aWxsIHVzdWFsbHkgYmUgY2xlYXJlZC4KK0lmIHN0cmluZ3MgZXhpc3QgdG8gdHVybiB0aGlzIGBgbWV0YSBtb2RlJycgb24gYW5kIG9mZiwgdGhleQorY2FuIGJlIGdpdmVuIGFzCisuQiBzbW0KK2FuZAorLkJSIHJtbSAuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgbW9yZSBsaW5lcyBvZiBtZW1vcnkgdGhhbiB3aWxsIGZpdCBvbiB0aGUgc2NyZWVuCithdCBvbmNlLCB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIG1lbW9yeSBjYW4gYmUgaW5kaWNhdGVkIHdpdGgKKy5CUiBsbSAuCitBIHZhbHVlIG9mCisuQlIgbG0gIzAKK2luZGljYXRlcyB0aGF0IHRoZSBudW1iZXIgb2YgbGluZXMgaXMgbm90IGZpeGVkLAorYnV0IHRoYXQgdGhlcmUgaXMgc3RpbGwgbW9yZSBtZW1vcnkgdGhhbiBmaXRzIG9uIHRoZSBzY3JlZW4uCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBpcyBvbmUgb2YgdGhvc2Ugc3VwcG9ydGVkIGJ5IHRoZSBccy0xVU5JWFxzKzEgdmlydHVhbAordGVybWluYWwgcHJvdG9jb2wsIHRoZSB0ZXJtaW5hbCBudW1iZXIgY2FuIGJlIGdpdmVuIGFzCisuQlIgdnQgLgorLlBQCitNZWRpYSBjb3B5CitzdHJpbmdzIHdoaWNoIGNvbnRyb2wgYW4gYXV4aWxpYXJ5IHByaW50ZXIgY29ubmVjdGVkIHRvIHRoZSB0ZXJtaW5hbAorY2FuIGJlIGdpdmVuIGFzCisuQlIgbWMwIDoKK3ByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgc2NyZWVuLAorLkJSIG1jNCA6Cit0dXJuIG9mZiB0aGUgcHJpbnRlciwgYW5kCisuQlIgbWM1IDoKK3R1cm4gb24gdGhlIHByaW50ZXIuCitXaGVuIHRoZSBwcmludGVyIGlzIG9uLCBhbGwgdGV4dCBzZW50IHRvIHRoZSB0ZXJtaW5hbCB3aWxsIGJlIHNlbnQKK3RvIHRoZSBwcmludGVyLgorSXQgaXMgdW5kZWZpbmVkIHdoZXRoZXIgdGhlIHRleHQgaXMgYWxzbyBkaXNwbGF5ZWQgb24gdGhlIHRlcm1pbmFsIHNjcmVlbgord2hlbiB0aGUgcHJpbnRlciBpcyBvbi4KK0EgdmFyaWF0aW9uCisuQiBtYzVwCit0YWtlcyBvbmUgcGFyYW1ldGVyLCBhbmQgbGVhdmVzIHRoZSBwcmludGVyIG9uIGZvciBhcyBtYW55IGNoYXJhY3RlcnMKK2FzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCB0aGVuIHR1cm5zIHRoZSBwcmludGVyIG9mZi4KK1RoZSBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBleGNlZWQgMjU1LgorQWxsIHRleHQsIGluY2x1ZGluZworLkJSIG1jNCAsCitpcyB0cmFuc3BhcmVudGx5IHBhc3NlZCB0byB0aGUgcHJpbnRlciB3aGlsZSBhbgorLkIgbWM1cAoraXMgaW4gZWZmZWN0LgorLlBQCisuU1MgR2xpdGNoZXMgYW5kIEJyYWluZGFtYWdlCisuUFAKK0hhemVsdGluZSB0ZXJtaW5hbHMsIHdoaWNoIGRvIG5vdCBhbGxvdyBgficgY2hhcmFjdGVycyB0byBiZSBkaXNwbGF5ZWQgc2hvdWxkCitpbmRpY2F0ZSBcZkJoelxmUi4KKy5QUAorVGVybWluYWxzIHdoaWNoIGlnbm9yZSBhIGxpbmUtZmVlZCBpbW1lZGlhdGVseSBhZnRlciBhbiBcZkJhbVxmUiB3cmFwLAorc3VjaCBhcyB0aGUgQ29uY2VwdCBhbmQgdnQxMDAsCitzaG91bGQgaW5kaWNhdGUgXGZCeGVubFxmUi4KKy5QUAorSWYKKy5CIGVsCitpcyByZXF1aXJlZCB0byBnZXQgcmlkIG9mIHN0YW5kb3V0CisoaW5zdGVhZCBvZiBtZXJlbHkgd3JpdGluZyBub3JtYWwgdGV4dCBvbiB0b3Agb2YgaXQpLAorXGZCeGhwXGZQIHNob3VsZCBiZSBnaXZlbi4KKy5QUAorVGVsZXJheSB0ZXJtaW5hbHMsIHdoZXJlIHRhYnMgdHVybiBhbGwgY2hhcmFjdGVycyBtb3ZlZCBvdmVyIHRvIGJsYW5rcywKK3Nob3VsZCBpbmRpY2F0ZSBcZkJ4dFxmUiAoZGVzdHJ1Y3RpdmUgdGFicykuCitOb3RlOiB0aGUgdmFyaWFibGUgaW5kaWNhdGluZyB0aGlzIGlzIG5vdyBgZGVzdF90YWJzX21hZ2ljX3Ntc28nOyBpbgorb2xkZXIgdmVyc2lvbnMsIGl0IHdhcyB0ZWxlcmF5X2dsaXRjaC4KK1RoaXMgZ2xpdGNoIGlzIGFsc28gdGFrZW4gdG8gbWVhbiB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwb3NpdGlvbgordGhlIGN1cnNvciBvbiB0b3Agb2YgYSBgYG1hZ2ljIGNvb2tpZScnLAordGhhdCB0byBlcmFzZSBzdGFuZG91dCBtb2RlIGl0IGlzIGluc3RlYWQgbmVjZXNzYXJ5IHRvIHVzZQorZGVsZXRlIGFuZCBpbnNlcnQgbGluZS4KK1RoZSBuY3Vyc2VzIGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhpcyBnbGl0Y2guCisuUFAKK1RoZSBCZWVoaXZlIFN1cGVyYmVlLCB3aGljaCBpcyB1bmFibGUgdG8gY29ycmVjdGx5IHRyYW5zbWl0IHRoZSBlc2NhcGUKK29yIGNvbnRyb2wgQyBjaGFyYWN0ZXJzLCBoYXMKKy5CUiB4c2IgLAoraW5kaWNhdGluZyB0aGF0IHRoZSBmMSBrZXkgaXMgdXNlZCBmb3IgZXNjYXBlIGFuZCBmMiBmb3IgY29udHJvbCBDLgorKE9ubHkgY2VydGFpbiBTdXBlcmJlZXMgaGF2ZSB0aGlzIHByb2JsZW0sIGRlcGVuZGluZyBvbiB0aGUgUk9NLikKK05vdGUgdGhhdCBpbiBvbGRlciB0ZXJtaW5mbyB2ZXJzaW9ucywgdGhpcyBjYXBhYmlsaXR5IHdhcyBjYWxsZWQKK2BiZWVoaXZlX2dsaXRjaCc7IGl0IGlzIG5vdyBgbm9fZXNjX2N0bF9jJy4KKy5QUAorT3RoZXIgc3BlY2lmaWMgdGVybWluYWwgcHJvYmxlbXMgbWF5IGJlIGNvcnJlY3RlZCBieSBhZGRpbmcgbW9yZQorY2FwYWJpbGl0aWVzIG9mIHRoZSBmb3JtIFxmQnhcZlJcZkl4XGZSLgorLlBQCisuU1MgU2ltaWxhciBUZXJtaW5hbHMKKy5QUAorSWYgdGhlcmUgYXJlIHR3byB2ZXJ5IHNpbWlsYXIgdGVybWluYWxzLCBvbmUgKHRoZSB2YXJpYW50KSBjYW4gYmUgZGVmaW5lZCBhcworYmVpbmcganVzdCBsaWtlIHRoZSBvdGhlciAodGhlIGJhc2UpIHdpdGggY2VydGFpbiBleGNlcHRpb25zLgorSW4gdGhlCitkZWZpbml0aW9uIG9mIHRoZSB2YXJpYW50LCB0aGUgc3RyaW5nIGNhcGFiaWxpdHkgXGZCdXNlXGZSIGNhbiBiZSBnaXZlbiB3aXRoCit0aGUgbmFtZSBvZiB0aGUgYmFzZSB0ZXJtaW5hbC4KK1RoZSBjYXBhYmlsaXRpZXMgZ2l2ZW4gYmVmb3JlCisuQiB1c2UKK292ZXJyaWRlIHRob3NlIGluIHRoZSBiYXNlIHR5cGUgbmFtZWQgYnkKKy5CUiB1c2UgLgorSWYgdGhlcmUgYXJlIG11bHRpcGxlIFxmQnVzZVxmUiBjYXBhYmlsaXRpZXMsIHRoZXkgYXJlIG1lcmdlZCBpbiByZXZlcnNlIG9yZGVyLgorVGhhdCBpcywgdGhlIHJpZ2h0bW9zdCBcZkJ1c2VcZlIgcmVmZXJlbmNlIGlzIHByb2Nlc3NlZCBmaXJzdCwgdGhlbiB0aGUgb25lIHRvCitpdHMgbGVmdCwgYW5kIHNvIGZvcnRoLgorQ2FwYWJpbGl0aWVzIGdpdmVuIGV4cGxpY2l0bHkgaW4gdGhlIGVudHJ5IG92ZXJyaWRlCit0aG9zZSBicm91Z2h0IGluIGJ5IFxmQnVzZVxmUiByZWZlcmVuY2VzLgorLlBQCitBIGNhcGFiaWxpdHkgY2FuIGJlIGNhbmNlbGVkIGJ5IHBsYWNpbmcgXGZCeHhAXGZSIHRvIHRoZSBsZWZ0IG9mIHRoZQordXNlIHJlZmVyZW5jZSB0aGF0IGltcG9ydHMgaXQsIHdoZXJlIFxmSXh4XGZQIGlzIHRoZSBjYXBhYmlsaXR5LgorRm9yIGV4YW1wbGUsIHRoZSBlbnRyeQorLlBQCisJMjYyMS1ubCwgc21reEAsIHJta3hALCB1c2U9MjYyMSwKKy5QUAorZGVmaW5lcyBhIDI2MjEtbmwgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSBcZkJzbWt4XGZSIG9yIFxmQnJta3hcZlIgY2FwYWJpbGl0aWVzLAorYW5kIGhlbmNlIGRvZXMgbm90IHR1cm4gb24gdGhlIGZ1bmN0aW9uIGtleSBsYWJlbHMgd2hlbiBpbiB2aXN1YWwgbW9kZS4KK1RoaXMgaXMgdXNlZnVsIGZvciBkaWZmZXJlbnQgbW9kZXMgZm9yIGEgdGVybWluYWwsIG9yIGZvciBkaWZmZXJlbnQKK3VzZXIgcHJlZmVyZW5jZXMuCisuUFAKKy5TUyBQaXRmYWxscyBvZiBMb25nIEVudHJpZXMKKy5QUAorTG9uZyB0ZXJtaW5mbyBlbnRyaWVzIGFyZSB1bmxpa2VseSB0byBiZSBhIHByb2JsZW07IHRvIGRhdGUsIG5vIGVudHJ5IGhhcyBldmVuCithcHByb2FjaGVkIHRlcm1pbmZvJ3MgNDA5Ni1ieXRlIHN0cmluZy10YWJsZSBtYXhpbXVtLgorVW5mb3J0dW5hdGVseSwgdGhlIHRlcm1jYXAKK3RyYW5zbGF0aW9ucyBhcmUgbXVjaCBtb3JlIHN0cmljdGx5IGxpbWl0ZWQgKHRvIDEwMjMgYnl0ZXMpLCB0aHVzIHRlcm1jYXAgdHJhbnNsYXRpb25zCitvZiBsb25nIHRlcm1pbmZvIGVudHJpZXMgY2FuIGNhdXNlIHByb2JsZW1zLgorLlBQCitUaGUgbWFuIHBhZ2VzIGZvciA0LjNCU0QgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFxmQnRnZXRlbnQoKVxmUCBpbnN0cnVjdCB0aGUgdXNlciB0bworYWxsb2NhdGUgYSAxMDI0LWJ5dGUgYnVmZmVyIGZvciB0aGUgdGVybWNhcCBlbnRyeS4KK1RoZSBlbnRyeSBnZXRzIG51bGwtdGVybWluYXRlZCBieQordGhlIHRlcm1jYXAgbGlicmFyeSwgc28gdGhhdCBtYWtlcyB0aGUgbWF4aW11bSBzYWZlIGxlbmd0aCBmb3IgYSB0ZXJtY2FwIGVudHJ5Cisxay0xICgxMDIzKSBieXRlcy4KK0RlcGVuZGluZyBvbiB3aGF0IHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIHRlcm1jYXAgbGlicmFyeQorYmVpbmcgdXNlZCBkb2VzLCBhbmQgd2hlcmUgaW4gdGhlIHRlcm1jYXAgZmlsZSB0aGUgdGVybWluYWwgdHlwZSB0aGF0IFxmQnRnZXRlbnQoKVxmUAoraXMgc2VhcmNoaW5nIGZvciBpcywgc2V2ZXJhbCBiYWQgdGhpbmdzIGNhbiBoYXBwZW4uCisuUFAKK1NvbWUgdGVybWNhcCBsaWJyYXJpZXMgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2Ugb3IgZXhpdCBpZiB0aGV5IGZpbmQgYW4KK2VudHJ5IHRoYXQncyBsb25nZXIgdGhhbiAxMDIzIGJ5dGVzOyBvdGhlcnMgZG8gbm90OyBvdGhlcnMgdHJ1bmNhdGUgdGhlCitlbnRyaWVzIHRvIDEwMjMgYnl0ZXMuCitTb21lIGFwcGxpY2F0aW9uIHByb2dyYW1zIGFsbG9jYXRlIG1vcmUgdGhhbgordGhlIHJlY29tbWVuZGVkIDFLIGZvciB0aGUgdGVybWNhcCBlbnRyeTsgb3RoZXJzIGRvIG5vdC4KKy5QUAorRWFjaCB0ZXJtY2FwIGVudHJ5IGhhcyB0d28gaW1wb3J0YW50IHNpemVzIGFzc29jaWF0ZWQgd2l0aCBpdDogYmVmb3JlCisidGMiIGV4cGFuc2lvbiwgYW5kIGFmdGVyICJ0YyIgZXhwYW5zaW9uLgorInRjIiBpcyB0aGUgY2FwYWJpbGl0eSB0aGF0Cit0YWNrcyBvbiBhbm90aGVyIHRlcm1jYXAgZW50cnkgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBvbmUsIHRvIGFkZAorb24gaXRzIGNhcGFiaWxpdGllcy4KK0lmIGEgdGVybWNhcCBlbnRyeSBkb2VzIG5vdCB1c2UgdGhlICJ0YyIKK2NhcGFiaWxpdHksIHRoZW4gb2YgY291cnNlIHRoZSB0d28gbGVuZ3RocyBhcmUgdGhlIHNhbWUuCisuUFAKK1RoZSAiYmVmb3JlIHRjIGV4cGFuc2lvbiIgbGVuZ3RoIGlzIHRoZSBtb3N0IGltcG9ydGFudCBvbmUsIGJlY2F1c2UgaXQKK2FmZmVjdHMgbW9yZSB0aGFuIGp1c3QgdXNlcnMgb2YgdGhhdCBwYXJ0aWN1bGFyIHRlcm1pbmFsLgorVGhpcyBpcyB0aGUKK2xlbmd0aCBvZiB0aGUgZW50cnkgYXMgaXQgZXhpc3RzIGluIC9ldGMvdGVybWNhcCwgbWludXMgdGhlCitiYWNrc2xhc2gtbmV3bGluZSBwYWlycywgd2hpY2ggXGZCdGdldGVudCgpXGZQIHN0cmlwcyBvdXQgd2hpbGUgcmVhZGluZyBpdC4KK1NvbWUgdGVybWNhcCBsaWJyYXJpZXMgc3RyaXAgb2ZmIHRoZSBmaW5hbCBuZXdsaW5lLCB0b28gKEdOVSB0ZXJtY2FwIGRvZXMgbm90KS4KK05vdyBzdXBwb3NlOgorLlRQIDUKKyoKK2EgdGVybWNhcCBlbnRyeSBiZWZvcmUgZXhwYW5zaW9uIGlzIG1vcmUgdGhhbiAxMDIzIGJ5dGVzIGxvbmcsCisuVFAgNQorKgorYW5kIHRoZSBhcHBsaWNhdGlvbiBoYXMgb25seSBhbGxvY2F0ZWQgYSAxayBidWZmZXIsCisuVFAgNQorKgorYW5kIHRoZSB0ZXJtY2FwIGxpYnJhcnkgKGxpa2UgdGhlIG9uZSBpbiBCU0QvT1MgMS4xIGFuZCBHTlUpIHJlYWRzCit0aGUgd2hvbGUgZW50cnkgaW50byB0aGUgYnVmZmVyLCBubyBtYXR0ZXIgd2hhdCBpdHMgbGVuZ3RoLCB0byBzZWUKK2lmIGl0IGlzIHRoZSBlbnRyeSBpdCB3YW50cywKKy5UUCA1CisqCithbmQgXGZCdGdldGVudCgpXGZQIGlzIHNlYXJjaGluZyBmb3IgYSB0ZXJtaW5hbCB0eXBlIHRoYXQgZWl0aGVyIGlzIHRoZQorbG9uZyBlbnRyeSwgYXBwZWFycyBpbiB0aGUgdGVybWNhcCBmaWxlIGFmdGVyIHRoZSBsb25nIGVudHJ5LCBvcgorZG9lcyBub3QgYXBwZWFyIGluIHRoZSBmaWxlIGF0IGFsbCAoc28gdGhhdCBcZkJ0Z2V0ZW50KClcZlAgaGFzIHRvIHNlYXJjaAordGhlIHdob2xlIHRlcm1jYXAgZmlsZSkuCisuUFAKK1RoZW4gXGZCdGdldGVudCgpXGZQIHdpbGwgb3ZlcndyaXRlIG1lbW9yeSwgcGVyaGFwcyBpdHMgc3RhY2ssIGFuZCBwcm9iYWJseSBjb3JlIGR1bXAKK3RoZSBwcm9ncmFtLgorUHJvZ3JhbXMgbGlrZSB0ZWxuZXQgYXJlIHBhcnRpY3VsYXJseSB2dWxuZXJhYmxlOyBtb2Rlcm4gdGVsbmV0cworcGFzcyBhbG9uZyB2YWx1ZXMgbGlrZSB0aGUgdGVybWluYWwgdHlwZSBhdXRvbWF0aWNhbGx5LgorVGhlIHJlc3VsdHMgYXJlIGFsbW9zdAorYXMgdW5kZXNpcmFibGUgd2l0aCBhIHRlcm1jYXAgbGlicmFyeSwgbGlrZSBTdW5PUyA0LjEuMyBhbmQgVWx0cml4IDQuNCwgdGhhdAorcHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiBpdCByZWFkcyBhbiBvdmVybHkgbG9uZyB0ZXJtY2FwIGVudHJ5LgorSWYgYQordGVybWNhcCBsaWJyYXJ5IHRydW5jYXRlcyBsb25nIGVudHJpZXMsIGxpa2UgT1NGLzEgMy4wLCBpdCBpcyBpbW11bmUgdG8gZHlpbmcKK2hlcmUgYnV0IHdpbGwgcmV0dXJuIGluY29ycmVjdCBkYXRhIGZvciB0aGUgdGVybWluYWwuCisuUFAKK1RoZSAiYWZ0ZXIgdGMgZXhwYW5zaW9uIiBsZW5ndGggd2lsbCBoYXZlIGEgc2ltaWxhciBlZmZlY3QgdG8gdGhlCithYm92ZSwgYnV0IG9ubHkgZm9yIHBlb3BsZSB3aG8gYWN0dWFsbHkgc2V0IFRFUk0gdG8gdGhhdCB0ZXJtaW5hbAordHlwZSwgc2luY2UgXGZCdGdldGVudCgpXGZQIG9ubHkgZG9lcyAidGMiIGV4cGFuc2lvbiBvbmNlIGl0IGlzIGZvdW5kIHRoZQordGVybWluYWwgdHlwZSBpdCB3YXMgbG9va2luZyBmb3IsIG5vdCB3aGlsZSBzZWFyY2hpbmcuCisuUFAKK0luIHN1bW1hcnksIGEgdGVybWNhcCBlbnRyeSB0aGF0IGlzIGxvbmdlciB0aGFuIDEwMjMgYnl0ZXMgY2FuIGNhdXNlLAorb24gdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgdGVybWNhcCBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucywgYSBjb3JlCitkdW1wLCB3YXJuaW5ncywgb3IgaW5jb3JyZWN0IG9wZXJhdGlvbi4KK0lmIGl0IGlzIHRvbyBsb25nIGV2ZW4gYmVmb3JlCisidGMiIGV4cGFuc2lvbiwgaXQgd2lsbCBoYXZlIHRoaXMgZWZmZWN0IGV2ZW4gZm9yIHVzZXJzIG9mIHNvbWUgb3RoZXIKK3Rlcm1pbmFsIHR5cGVzIGFuZCB1c2VycyB3aG9zZSBURVJNIHZhcmlhYmxlIGRvZXMgbm90IGhhdmUgYSB0ZXJtY2FwCitlbnRyeS4KKy5QUAorV2hlbiBpbiAtQyAodHJhbnNsYXRlIHRvIHRlcm1jYXApIG1vZGUsIHRoZSBcZkJuY3Vyc2VzXGZSIGltcGxlbWVudGF0aW9uIG9mCitcZkJAVElDQFxmUigxTSkgaXNzdWVzIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiB0aGUgcHJlLXRjIGxlbmd0aCBvZiBhIHRlcm1jYXAKK3RyYW5zbGF0aW9uIGlzIHRvbyBsb25nLgorVGhlIC1jIChjaGVjaykgb3B0aW9uIGFsc28gY2hlY2tzIHJlc29sdmVkIChhZnRlciB0YworZXhwYW5zaW9uKSBsZW5ndGhzLgorLlNTIEJpbmFyeSBDb21wYXRpYmlsaXR5CitJdCBpcyBub3Qgd2lzZSB0byBjb3VudCBvbiBwb3J0YWJpbGl0eSBvZiBiaW5hcnkgdGVybWluZm8gZW50cmllcyBiZXR3ZWVuCitjb21tZXJjaWFsIFVOSVggdmVyc2lvbnMuCitUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gdmVyc2lvbnMKK29mIHRlcm1pbmZvICh1bmRlciBIUC1VWCBhbmQgQUlYKSB3aGljaCBkaXZlcmdlZCBmcm9tIFN5c3RlbSBWIHRlcm1pbmZvIGFmdGVyCitTVnIxLCBhbmQgaGF2ZSBhZGRlZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzIHRvIHRoZSBzdHJpbmcgdGFibGUgdGhhdCAoaW4gdGhlCitiaW5hcnkgZm9ybWF0KSBjb2xsaWRlIHdpdGggU3lzdGVtIFYgYW5kIFhTSSBDdXJzZXMgZXh0ZW5zaW9ucy4KKy5TSCBFWFRFTlNJT05TCitTb21lIFNWcjQgXGZCY3Vyc2VzXGZSIGltcGxlbWVudGF0aW9ucywgYW5kIGFsbCBwcmV2aW91cyB0byBTVnI0LCBkbyBub3QKK2ludGVycHJldCB0aGUgJUEgYW5kICVPIG9wZXJhdG9ycyBpbiBwYXJhbWV0ZXIgc3RyaW5ncy4KKy5QUAorU1ZyNC9YUEc0IGRvIG5vdCBzcGVjaWZ5IHdoZXRoZXIgXGZCbXNnclxmUiBsaWNlbnNlcyBtb3ZlbWVudCB3aGlsZSBpbgorYW4gYWx0ZXJuYXRlLWNoYXJhY3Rlci1zZXQgbW9kZSAoc3VjaCBtb2RlcyBtYXksIGFtb25nIG90aGVyIHRoaW5ncywgbWFwCitDUiBhbmQgTkwgdG8gY2hhcmFjdGVycyB0aGF0IGRvIG5vdCB0cmlnZ2VyIGxvY2FsIG1vdGlvbnMpLgorVGhlIFxmQm5jdXJzZXNcZlIgaW1wbGVtZW50YXRpb24gaWdub3JlcyBcZkJtc2dyXGZSIGluIFxmQkFMVENIQVJTRVRcZlIKK21vZGUuCitUaGlzIHJhaXNlcyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiBYUEc0CitpbXBsZW1lbnRhdGlvbiBtYWtpbmcgdGhlIG9wcG9zaXRlIGludGVycHJldGF0aW9uIG1heSBuZWVkIHRlcm1pbmZvCitlbnRyaWVzIG1hZGUgZm9yIFxmQm5jdXJzZXNcZlIgdG8gaGF2ZSBcZkJtc2dyXGZSIHR1cm5lZCBvZmYuCisuUFAKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgaGFuZGxlcyBpbnNlcnQtY2hhcmFjdGVyIGFuZCBpbnNlcnQtY2hhcmFjdGVyIG1vZGVzCitpbiBhIHNsaWdodGx5IG5vbi1zdGFuZGFyZCB3YXkgdG8gZ2V0IGJldHRlciB1cGRhdGUgZWZmaWNpZW5jeS4KK1NlZQordGhlIFxmQkluc2VydC9EZWxldGUgQ2hhcmFjdGVyXGZSIHN1YnNlY3Rpb24gYWJvdmUuCisuUFAKK1RoZSBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9ucyBmb3IgXGZCc2V0X2Nsb2NrXGZSIGFuZCBcZkJkaXNwbGF5X2Nsb2NrXGZSIGFyZQorbm90IGRvY3VtZW50ZWQgaW4gU1ZyNCBvciB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZC4KK1RoZXkgYXJlIGRlZHVjZWQgZnJvbSB0aGUKK2RvY3VtZW50YXRpb24gZm9yIHRoZSBBVCZUIDUwNSB0ZXJtaW5hbC4KKy5QUAorQmUgY2FyZWZ1bCBhc3NpZ25pbmcgdGhlIFxmQmttb3VzXGZSIGNhcGFiaWxpdHkuCitUaGUgXGZCbmN1cnNlc1xmUiB3YW50cyB0bworaW50ZXJwcmV0IGl0IGFzIFxmQktFWV9NT1VTRVxmUiwgZm9yIHVzZSBieSB0ZXJtaW5hbHMgYW5kIGVtdWxhdG9ycyBsaWtlIHh0ZXJtCit0aGF0IGNhbiByZXR1cm4gbW91c2UtdHJhY2tpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGtleWJvYXJkLWlucHV0IHN0cmVhbS4KKy5QUAorRGlmZmVyZW50IGNvbW1lcmNpYWwgcG9ydHMgb2YgdGVybWluZm8gYW5kIGN1cnNlcyBzdXBwb3J0IGRpZmZlcmVudCBzdWJzZXRzIG9mCit0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBhbmQgKGluIHNvbWUgY2FzZXMpIGRpZmZlcmVudCBleHRlbnNpb24gc2V0cy4KK0hlcmUKK2lzIGEgc3VtbWFyeSwgYWNjdXJhdGUgYXMgb2YgT2N0b2JlciAxOTk1OgorLlBQCitcZkJTVlI0LCBTb2xhcmlzLCBuY3Vyc2VzXGZSIC0tCitUaGVzZSBzdXBwb3J0IGFsbCBTVnI0IGNhcGFiaWxpdGllcy4KKy5QUAorXGZCU0dJXGZSIC0tCitTdXBwb3J0cyB0aGUgU1ZyNCBzZXQsIGFkZHMgb25lIHVuZG9jdW1lbnRlZCBleHRlbmRlZCBzdHJpbmcKK2NhcGFiaWxpdHkgKFxmQnNldF9wZ2xlblxmUikuCisuUFAKK1xmQlNWcjEsIFVsdHJpeFxmUiAtLQorVGhlc2Ugc3VwcG9ydCBhIHJlc3RyaWN0ZWQgc3Vic2V0IG9mIHRlcm1pbmZvIGNhcGFiaWxpdGllcy4KK1RoZSBib29sZWFucworZW5kIHdpdGggXGZCeG9uX3hvZmZcZlI7IHRoZSBudW1lcmljcyB3aXRoIFxmQndpZHRoX3N0YXR1c19saW5lXGZSOyBhbmQgdGhlCitzdHJpbmdzIHdpdGggXGZCcHJ0cl9ub25cZlIuCisuUFAKK1xmQkhQL1VYXGZSIC0tCitTdXBwb3J0cyB0aGUgU1ZyMSBzdWJzZXQsIHBsdXMgdGhlIFNWclsyMzRdIG51bWVyaWNzIFxmQm51bV9sYWJlbHNcZlIsCitcZkJsYWJlbF9oZWlnaHRcZlIsIFxmQmxhYmVsX3dpZHRoXGZSLCBwbHVzIGZ1bmN0aW9uIGtleXMgMTEgdGhyb3VnaCA2MywgcGx1cworXGZCcGxhYl9ub3JtXGZSLCBcZkJsYWJlbF9vblxmUiwgYW5kIFxmQmxhYmVsX29mZlxmUiwgcGx1cyBzb21lIGluY29tcGF0aWJsZQorZXh0ZW5zaW9ucyBpbiB0aGUgc3RyaW5nIHRhYmxlLgorLlBQCitcZkJBSVhcZlIgLS0KK1N1cHBvcnRzIHRoZSBTVnIxIHN1YnNldCwgcGx1cyBmdW5jdGlvbiBrZXlzIDExIHRocm91Z2ggNjMsIHBsdXMgYSBudW1iZXIKK29mIGluY29tcGF0aWJsZSBzdHJpbmcgdGFibGUgZXh0ZW5zaW9ucy4KKy5QUAorXGZCT1NGXGZSIC0tCitTdXBwb3J0cyBib3RoIHRoZSBTVnI0IHNldCBhbmQgdGhlIEFJWCBleHRlbnNpb25zLgorLlNIIEZJTEVTCisuVFAgMjUKK1wqZC8/LyoKK2ZpbGVzIGNvbnRhaW5pbmcgdGVybWluYWwgZGVzY3JpcHRpb25zCisuU0ggU0VFIEFMU08KK1xmQkBUSUNAXGZSKDFNKSwKK1xmQkBJTkZPQ01QQFxmUigxTSksCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCcHJpbnRmXGZSKDMpLAorXGZCdGVybVxmUihcKm4pLgorLlNIIEFVVEhPUlMKK1pleWQgTS4gQmVuLUhhbGltLCBFcmljIFMuIFJheW1vbmQsIFRob21hcyBFLiBEaWNrZXkuCitCYXNlZCBvbiBwY3Vyc2VzIGJ5IFBhdmVsIEN1cnRpcy4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3RpYy4xbSBiL21hbi90aWMuMW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzZWMzMgotLS0gL2Rldi9udWxsCisrKyBiL21hbi90aWMuMW0KQEAgLTAsMCArMSwzMzEgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogdGljLjFtLHYgMS40NCAyMDA2LzEyLzI0IDE3OjU5OjExIHRvbSBFeHAgJAorLlRIIEBUSUNAIDFNICIiCisuZHMgbiA1CisuZHMgZCBAVEVSTUlORk9ACisuU0ggTkFNRQorXGZCdGljXGZSIC0gdGhlIFxmSXRlcm1pbmZvXGZSIGVudHJ5LWRlc2NyaXB0aW9uIGNvbXBpbGVyCisuU0ggU1lOT1BTSVMKK1xmQnRpY1xmUgorW1xmQi1cCisxXAorQ1wKK0dcCitJXAorTFwKK05cCitUXAorVVwKK1ZcCithXAorY1wKK2ZcCitnXAorclwKK3NcCit0XAoreFwKK1xmUl0KK1tcZkItZVxmUiBcZkluYW1lc1xmUl0KK1tcZkItb1xmUiBcZklkaXJcZlJdCitbXGZCLVJcZlIgXGZJc3Vic2V0XGZSXQorW1xmQi12XGZSW1xmSW5cZlJdXQorW1xmQi13XGZSW1xmSW5cZlJdXQorXGZJZmlsZVxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBjb21tYW5kIFxmQnRpY1xmUiB0cmFuc2xhdGVzIGEgXGZCdGVybWluZm9cZlIgZmlsZSBmcm9tIHNvdXJjZQorZm9ybWF0IGludG8gY29tcGlsZWQgZm9ybWF0LiAgVGhlIGNvbXBpbGVkIGZvcm1hdCBpcyBuZWNlc3NhcnkgZm9yIHVzZSB3aXRoCit0aGUgbGlicmFyeSByb3V0aW5lcyBpbiBcZkJuY3Vyc2VzXGZSKDNYKS4KKy5QUAorVGhlIHJlc3VsdHMgYXJlIG5vcm1hbGx5IHBsYWNlZCBpbiB0aGUgc3lzdGVtIHRlcm1pbmZvCitkaXJlY3RvcnkgXGZCXCpkXGZSLiAgVGhlcmUgYXJlIHR3byB3YXlzIHRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yLgorLlBQCitGaXJzdCwgeW91IG1heSBvdmVycmlkZSB0aGUgc3lzdGVtIGRlZmF1bHQgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUKK1xmQlRFUk1JTkZPXGZSIGluIHlvdXIgc2hlbGwgZW52aXJvbm1lbnQgdG8gYSB2YWxpZCAoZXhpc3RpbmcpIGRpcmVjdG9yeSBuYW1lLgorLlBQCitTZWNvbmRseSwgaWYgXGZCdGljXGZSIGNhbm5vdCBnZXQgYWNjZXNzIHRvIFxmSVwqZFxmUiBvciB5b3VyIFRFUk1JTkZPCitkaXJlY3RvcnksIGl0IGxvb2tzIGZvciB0aGUgZGlyZWN0b3J5IFxmSSRIT01FLy50ZXJtaW5mb1xmUjsgaWYgdGhhdCBkaXJlY3RvcnkKK2V4aXN0cywgdGhlIGVudHJ5IGlzIHBsYWNlZCB0aGVyZS4KKy5QUAorTGlicmFyaWVzIHRoYXQgcmVhZCB0ZXJtaW5mbyBlbnRyaWVzIGFyZSBleHBlY3RlZCB0byBjaGVjayBmb3IgYSBURVJNSU5GTworZGlyZWN0b3J5IGZpcnN0LCBsb29rIGF0IFxmSSRIT01FLy50ZXJtaW5mb1xmUiBpZiBURVJNSU5GTyBpcyBub3Qgc2V0LCBhbmQKK2ZpbmFsbHkgbG9vayBpbiBcZklcKmRcZlIuCisuVFAKK1xmQi0xXGZSCityZXN0cmljdHMgdGhlIG91dHB1dCB0byBhIHNpbmdsZSBjb2x1bW4KKy5UUAorXGZCLWFcZlIKK3RlbGxzIFxmQnRpY1xmUCB0byByZXRhaW4gY29tbWVudGVkLW91dCBjYXBhYmlsaXRpZXMgcmF0aGVyIHRoYW4gZGlzY2FyZGluZwordGhlbS4gIENhcGFiaWxpdGllcyBhcmUgY29tbWVudGVkIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggYSBwZXJpb2QuCitUaGlzIHNldHMgdGhlIFxmQi14XGZSIG9wdGlvbiwgYmVjYXVzZSBpdCB0cmVhdHMgdGhlIGNvbW1lbnRlZC1vdXQKK2VudHJpZXMgYXMgdXNlci1kZWZpbmVkIG5hbWVzLgorSWYgdGhlIHNvdXJjZSBpcyB0ZXJtY2FwLCBhY2NlcHQgdGhlIDItY2hhcmFjdGVyIG5hbWVzIHJlcXVpcmVkIGJ5IHZlcnNpb24gNi4KK090aGVyd2lzZSB0aGVzZSBhcmUgaWdub3JlZC4KKy5UUAorXGZCLUNcZlIKK0ZvcmNlIHNvdXJjZSB0cmFuc2xhdGlvbiB0byB0ZXJtY2FwIGZvcm1hdC4gIE5vdGU6IHRoaXMgZGlmZmVycyBmcm9tIHRoZSBcZkItQ1xmUgorb3B0aW9uIG9mIFxmQkBJTkZPQ01QQFxmUigxTSkgaW4gdGhhdCBpdCBkb2VzIG5vdCBtZXJlbHkgdHJhbnNsYXRlIGNhcGFiaWxpdHkKK25hbWVzLCBidXQgYWxzbyB0cmFuc2xhdGVzIHRlcm1pbmZvIHN0cmluZ3MgdG8gdGVybWNhcCBmb3JtYXQuICBDYXBhYmlsaXRpZXMKK3RoYXQgYXJlIG5vdCB0cmFuc2xhdGFibGUgYXJlIGxlZnQgaW4gdGhlIGVudHJ5IHVuZGVyIHRoZWlyIHRlcm1pbmZvIG5hbWVzCitidXQgY29tbWVudGVkIG91dCB3aXRoIHR3byBwcmVjZWRpbmcgZG90cy4KKy5UUAorXGZCLWNcZlIKK3RlbGxzIFxmQnRpY1xmUCB0byBvbmx5IGNoZWNrIFxmSWZpbGVcZlIgZm9yIGVycm9ycywgaW5jbHVkaW5nIHN5bnRheCBwcm9ibGVtcyBhbmQKK2JhZCB1c2UgbGlua3MuICBJZiB5b3Ugc3BlY2lmeSBcZkItQ1xmUiAoXGZCLUlcZlIpIHdpdGggdGhpcyBvcHRpb24sIHRoZSBjb2RlCit3aWxsIHByaW50IHdhcm5pbmdzIGFib3V0IGVudHJpZXMgd2hpY2gsIGFmdGVyIHVzZSByZXNvbHV0aW9uLCBhcmUgbW9yZSB0aGFuCisxMDIzICg0MDk2KSBieXRlcyBsb25nLiAgRHVlIHRvIGEgZml4ZWQgYnVmZmVyIGxlbmd0aCBpbiBvbGRlciB0ZXJtY2FwCitsaWJyYXJpZXMgKGFuZCBhIGRvY3VtZW50ZWQgbGltaXQgaW4gdGVybWluZm8pLCB0aGVzZSBlbnRyaWVzIG1heSBjYXVzZSBjb3JlCitkdW1wcy4KKy5UUAorXGZCLWUgXGZSXGZJbmFtZXNcZlIKK0xpbWl0IHdyaXRlcyBhbmQgdHJhbnNsYXRpb25zIHRvIHRoZSBmb2xsb3dpbmcgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKK3Rlcm1pbmFscy4KK0lmIGFueSBuYW1lIG9yIGFsaWFzIG9mIGEgdGVybWluYWwgbWF0Y2hlcyBvbmUgb2YgdGhlIG5hbWVzIGluCit0aGUgbGlzdCwgdGhlIGVudHJ5IHdpbGwgYmUgd3JpdHRlbiBvciB0cmFuc2xhdGVkIGFzIG5vcm1hbC4KK090aGVyd2lzZSBubyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGl0LgorVGhlIG9wdGlvbiB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBpZiBpdAorY29udGFpbnMgYSAnLycuCisoTm90ZTogZGVwZW5kaW5nIG9uIGhvdyB0aWMgd2FzIGNvbXBpbGVkLCB0aGlzIG9wdGlvbiBtYXkgcmVxdWlyZSBcZkItSVxmUiBvciBcZkItQ1xmUi4pCisuVFAKK1xmQi1mXGZSCitEaXNwbGF5IGNvbXBsZXggdGVybWluZm8gc3RyaW5ncyB3aGljaCBjb250YWluIGlmL3RoZW4vZWxzZS9lbmRpZiBleHByZXNzaW9ucworaW5kZW50ZWQgZm9yIHJlYWRhYmlsaXR5LgorLlRQCitcZkItR1xmUgorRGlzcGxheSBjb25zdGFudCBsaXRlcmFscyBpbiBkZWNpbWFsIGZvcm0KK3JhdGhlciB0aGFuIHRoZWlyIGNoYXJhY3RlciBlcXVpdmFsZW50cy4KKy5UUAorXGZCLWdcZlIKK0Rpc3BsYXkgY29uc3RhbnQgY2hhcmFjdGVyIGxpdGVyYWxzIGluIHF1b3RlZCBmb3JtCityYXRoZXIgdGhhbiB0aGVpciBkZWNpbWFsIGVxdWl2YWxlbnRzLgorLlRQCitcZkItSVxmUgorRm9yY2Ugc291cmNlIHRyYW5zbGF0aW9uIHRvIHRlcm1pbmZvIGZvcm1hdC4KKy5UUAorXGZCLUxcZlIKK0ZvcmNlIHNvdXJjZSB0cmFuc2xhdGlvbiB0byB0ZXJtaW5mbyBmb3JtYXQKK3VzaW5nIHRoZSBsb25nIEMgdmFyaWFibGUgbmFtZXMgbGlzdGVkIGluIDxcZkJ0ZXJtLmhcZlI+CisuVFAKK1xmQi1OXGZSCitEaXNhYmxlIHNtYXJ0IGRlZmF1bHRzLiAKK05vcm1hbGx5LCB3aGVuIHRyYW5zbGF0aW5nIGZyb20gdGVybWNhcCB0byB0ZXJtaW5mbywgdGhlIGNvbXBpbGVyIG1ha2VzCithIG51bWJlciBvZiBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVmYXVsdHMgb2Ygc3RyaW5nIGNhcGFiaWxpdGllcworXGZCcmVzZXQxX3N0cmluZ1xmUiwgXGZCY2FycmlhZ2VfcmV0dXJuXGZSLCBcZkJjdXJzb3JfbGVmdFxmUiwKK1xmQmN1cnNvcl9kb3duXGZSLCBcZkJzY3JvbGxfZm9yd2FyZFxmUiwgXGZCdGFiXGZSLCBcZkJuZXdsaW5lXGZSLAorXGZCa2V5X2JhY2tzcGFjZVxmUiwgXGZCa2V5X2xlZnRcZlIsIGFuZCBcZkJrZXlfZG93blxmUiwgdGhlbiBhdHRlbXB0cwordG8gdXNlIG9ic29sZXRlIHRlcm1jYXAgY2FwYWJpbGl0aWVzIHRvIGRlZHVjZSBjb3JyZWN0IHZhbHVlcy4gIEl0IGFsc28KK25vcm1hbGx5IHN1cHByZXNzZXMgb3V0cHV0IG9mIG9ic29sZXRlIHRlcm1jYXAgY2FwYWJpbGl0aWVzIHN1Y2ggYXMgXGZCYnNcZlIuCitUaGlzIG9wdGlvbiBmb3JjZXMgYSBtb3JlIGxpdGVyYWwgdHJhbnNsYXRpb24gdGhhdCBhbHNvIHByZXNlcnZlcyB0aGUKK29ic29sZXRlIGNhcGFiaWxpdGllcy4KKy5UUAorXGZCLW9cZlJcZklkaXJcZlIKK1dyaXRlIGNvbXBpbGVkIGVudHJpZXMgdG8gZ2l2ZW4gZGlyZWN0b3J5LiAgT3ZlcnJpZGVzIHRoZSBURVJNSU5GTyBlbnZpcm9ubWVudAordmFyaWFibGUuCisuVFAKK1xmQi1SXGZSXGZJc3Vic2V0XGZSCitSZXN0cmljdCBvdXRwdXQgdG8gYSBnaXZlbiBzdWJzZXQuICBUaGlzIG9wdGlvbiBpcyBmb3IgdXNlIHdpdGggYXJjaGFpYwordmVyc2lvbnMgb2YgdGVybWluZm8gbGlrZSB0aG9zZSBvbiBTVnIxLCBVbHRyaXgsIG9yIEhQL1VYIHRoYXQgZG8gbm90IHN1cHBvcnQKK3RoZSBmdWxsIHNldCBvZiBTVlI0L1hTSSBDdXJzZXMgdGVybWluZm87IGFuZCBvdXRyaWdodCBicm9rZW4gcG9ydHMgbGlrZSBBSVggMy54Cit0aGF0IGhhdmUgdGhlaXIgb3duIGV4dGVuc2lvbnMgaW5jb21wYXRpYmxlIHdpdGggU1ZyNC9YU0kuICBBdmFpbGFibGUgc3Vic2V0cworYXJlICJTVnIxIiwgIlVsdHJpeCIsICJIUCIsICJCU0QiIGFuZCAiQUlYIjsgc2VlIFxmQnRlcm1pbmZvXGZSKFwqbikgZm9yIGRldGFpbHMuCisuVFAKK1xmQi1yXGZSCitGb3JjZSBlbnRyeSByZXNvbHV0aW9uIChzbyB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHRjIGNhcGFiaWxpdGllcykgZXZlbgord2hlbiBkb2luZyB0cmFuc2xhdGlvbiB0byB0ZXJtY2FwIGZvcm1hdC4gIFRoaXMgbWF5IGJlIG5lZWRlZCBpZiB5b3UgYXJlCitwcmVwYXJpbmcgYSB0ZXJtY2FwIGZpbGUgZm9yIGEgdGVybWNhcCBsaWJyYXJ5IChzdWNoIGFzIEdOVSB0ZXJtY2FwIHRocm91Z2gKK3ZlcnNpb24gMS4zIG9yIEJTRCB0ZXJtY2FwIHRocm91Z2ggNC4zQlNEKSB0aGF0IGRvZXMgbm90IGhhbmRsZSBtdWx0aXBsZQordGMgY2FwYWJpbGl0aWVzIHBlciBlbnRyeS4KKy5UUAorXGZCLXNcZlIKK1N1bW1hcml6ZSB0aGUgY29tcGlsZSBieSBzaG93aW5nIHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCBlbnRyaWVzCithcmUgd3JpdHRlbiwgYW5kIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aGljaCBhcmUgY29tcGlsZWQuCisuVFAKK1xmQi1UXGZSCitlbGltaW5hdGVzIHNpemUtcmVzdHJpY3Rpb25zIG9uIHRoZSBnZW5lcmF0ZWQgdGV4dC4KK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMsIHNpbmNlIHRoZSBjb21waWxlZAorZGVzY3JpcHRpb25zIGFyZSBsaW1pdGVkIChlLmcuLCAxMDIzIGZvciB0ZXJtY2FwLCA0MDk2IGZvciB0ZXJtaW5mbykuCisuVFAKK1xmQi10XGZSCit0ZWxscyBcZkJ0aWNcZlAgdG8gZGlzY2FyZCBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcy4KK05vcm1hbGx5IHdoZW4gdHJhbnNsYXRpbmcgZnJvbSB0ZXJtaW5mbyB0byB0ZXJtY2FwLAordW50cmFuc2xhdGFibGUgY2FwYWJpbGl0aWVzIGFyZSBjb21tZW50ZWQtb3V0LgorLlRQIDUKK1xmQi1VXGZSCit0ZWxscyBcZkJ0aWNcZlAgdG8gbm90IHBvc3QtcHJvY2VzcyB0aGUgZGF0YSBhZnRlciBwYXJzaW5nIHRoZSBzb3VyY2UgZmlsZS4KK05vcm1hbGx5LCBpdCBpbmZlcnMgZGF0YSB3aGljaCBpcyBjb21tb25seSBtaXNzaW5nIGluIG9sZGVyIHRlcm1pbmZvIGRhdGEsCitvciBpbiB0ZXJtY2Fwcy4KKy5UUAorXGZCLVZcZlIKK3JlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCB3YXMgdXNlZCBpbiB0aGlzIHByb2dyYW0sIGFuZCBleGl0cy4KKy5UUAorXGZCLXZcZlJcZkluXGZSCitzcGVjaWZpZXMgdGhhdCAodmVyYm9zZSkgb3V0cHV0IGJlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IgdHJhY2UKK2luZm9ybWF0aW9uIHNob3dpbmcgXGZCdGljXGZSJ3MgcHJvZ3Jlc3MuCitUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIFxmSW5cZlIgaXMgYSBudW1iZXIgZnJvbSAxIHRvIDEwLCBpbmNsdXNpdmUsCitpbmRpY2F0aW5nIHRoZSBkZXNpcmVkIGxldmVsIG9mIGRldGFpbCBvZiBpbmZvcm1hdGlvbi4KK0lmIFxmSW5cZlIgaXMgb21pdHRlZCwgdGhlIGRlZmF1bHQgbGV2ZWwgaXMgMS4KK0lmIFxmSW5cZlIgaXMgc3BlY2lmaWVkIGFuZCBncmVhdGVyIHRoYW4gMSwgdGhlIGxldmVsIG9mCitkZXRhaWwgaXMgaW5jcmVhc2VkLgorLlRQCitcZkItd1xmUlxmSW5cZlIKK3NwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIG91dHB1dC4KK1RoZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuCitJZiBpdCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byA2MC4KKy5UUAorXGZCLXhcZlIKK1RyZWF0IHVua25vd24gY2FwYWJpbGl0aWVzIGFzIHVzZXItZGVmaW5lZC4KK1RoYXQgaXMsIGlmIHlvdSBzdXBwbHkgYSBjYXBhYmlsaXR5IG5hbWUgd2hpY2ggXGZCdGljXGZQIGRvZXMgbm90IHJlY29nbml6ZSwKK2l0IHdpbGwgaW5mZXIgaXRzIHR5cGUgKGJvb2xlYW4sIG51bWJlciBvciBzdHJpbmcpIGZyb20gdGhlIHN5bnRheCBhbmQKK21ha2UgYW4gZXh0ZW5kZWQgdGFibGUgZW50cnkgZm9yIHRoYXQuCitVc2VyLWRlZmluZWQgY2FwYWJpbGl0eSBzdHJpbmdzCit3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGBgaycnIGFyZSB0cmVhdGVkIGFzIGZ1bmN0aW9uIGtleXMuCisuVFAKK1xmSWZpbGVcZlIKK2NvbnRhaW5zIG9uZSBvciBtb3JlIFxmQnRlcm1pbmZvXGZSIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyBpbiBzb3VyY2UKK2Zvcm1hdCBbc2VlIFxmQnRlcm1pbmZvXGZSKFwqbildLiAgRWFjaCBkZXNjcmlwdGlvbiBpbiB0aGUgZmlsZQorZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBwYXJ0aWN1bGFyIHRlcm1pbmFsLgorLlBQCitUaGUgZGVidWcgZmxhZyBsZXZlbHMgYXJlIGFzIGZvbGxvd3M6CisuVFAKKzEKK05hbWVzIG9mIGZpbGVzIGNyZWF0ZWQgYW5kIGxpbmtlZAorLlRQCisyCitJbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBgYHVzZScnIGZhY2lsaXR5CisuVFAKKzMKK1N0YXRpc3RpY3MgZnJvbSB0aGUgaGFzaGluZyBhbGdvcml0aG0KKy5UUAorNQorU3RyaW5nLXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9ucworLlRQCis3CitFbnRyaWVzIGludG8gdGhlIHN0cmluZy10YWJsZQorLlRQCis4CitMaXN0IG9mIHRva2VucyBlbmNvdW50ZXJlZCBieSBzY2FubmVyCisuVFAKKzkKK0FsbCB2YWx1ZXMgY29tcHV0ZWQgaW4gY29uc3RydWN0aW9uIG9mIHRoZSBoYXNoIHRhYmxlCisuTFAKK0lmIHRoZSBkZWJ1ZyBsZXZlbCBcZkluXGZSIGlzIG5vdCBnaXZlbiwgaXQgaXMgdGFrZW4gdG8gYmUgb25lLgorLlBQCitBbGwgYnV0IG9uZSBvZiB0aGUgY2FwYWJpbGl0aWVzIHJlY29nbml6ZWQgYnkgXGZCdGljXGZSIGFyZSBkb2N1bWVudGVkCitpbiBcZkJ0ZXJtaW5mb1xmUihcKm4pLiAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgXGZCdXNlXGZSIGNhcGFiaWxpdHkuCisuUFAKK1doZW4gYSBcZkJ1c2VcZlI9XGZJZW50cnlcZlItXGZJbmFtZVxmUiBmaWVsZCBpcyBkaXNjb3ZlcmVkIGluIGEKK3Rlcm1pbmFsIGVudHJ5IGN1cnJlbnRseSBiZWluZyBjb21waWxlZCwgXGZCdGljXGZSIHJlYWRzIGluIHRoZSBiaW5hcnkKK2Zyb20gXGZCXCpkXGZSIHRvIGNvbXBsZXRlIHRoZSBlbnRyeS4gIChFbnRyaWVzIGNyZWF0ZWQgZnJvbQorXGZJZmlsZVxmUiB3aWxsIGJlIHVzZWQgZmlyc3QuICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK1xmQlRFUk1JTkZPXGZSIGlzIHNldCwgdGhhdCBkaXJlY3RvcnkgaXMgc2VhcmNoZWQgaW5zdGVhZCBvZgorXGZCXCpkXGZSLikgIFxmQnRpY1xmUiBkdXBsaWNhdGVzIHRoZSBjYXBhYmlsaXRpZXMgaW4KK1xmSWVudHJ5XGZSLVxmSW5hbWVcZlIgZm9yIHRoZSBjdXJyZW50IGVudHJ5LCB3aXRoIHRoZSBleGNlcHRpb24gb2YKK3Rob3NlIGNhcGFiaWxpdGllcyB0aGF0IGV4cGxpY2l0bHkgYXJlIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgZW50cnkuCisuUFAKK1doZW4gYW4gZW50cnksIGUuZy4sIFxmQmVudHJ5X25hbWVfMVxmUiwgY29udGFpbnMgYQorXGZCdXNlPVxmUlxmSWVudHJ5XGZSX1xmSW5hbWVcZlJfXGZJMlxmUiBmaWVsZCwgYW55IGNhbmNlbGVkCitjYXBhYmlsaXRpZXMgaW4gXGZJZW50cnlcZlJfXGZJbmFtZVxmUl9cZkkyXGZSIG11c3QgYWxzbyBhcHBlYXIgaW4KK1xmQmVudHJ5X25hbWVfMVxmUiBiZWZvcmUgXGZCdXNlPVxmUiBmb3IgdGhlc2UgY2FwYWJpbGl0aWVzIHRvIGJlCitjYW5jZWxlZCBpbiBcZkJlbnRyeV9uYW1lXzFcZlIuCisuUFAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNSU5GT1xmUiBpcyBzZXQsIHRoZSBjb21waWxlZAorcmVzdWx0cyBhcmUgcGxhY2VkIHRoZXJlIGluc3RlYWQgb2YgXGZCXCpkXGZSLgorLlBQCitUb3RhbCBjb21waWxlZCBlbnRyaWVzIGNhbm5vdCBleGNlZWQgNDA5NiBieXRlcy4gIFRoZSBuYW1lIGZpZWxkIGNhbm5vdAorZXhjZWVkIDUxMiBieXRlcy4gIFRlcm1pbmFsIG5hbWVzIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGlhcyBsZW5ndGgKKygzMiBjaGFyYWN0ZXJzIG9uIHN5c3RlbXMgd2l0aCBsb25nIGZpbGVuYW1lcywgMTQgY2hhcmFjdGVycyBvdGhlcndpc2UpCit3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgbWF4aW11bSBhbGlhcyBsZW5ndGggYW5kIGEgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZC4KKy5TSCBDT01QQVRJQklMSVRZCitUaGVyZSBpcyBzb21lIGV2aWRlbmNlIHRoYXQgaGlzdG9yaWMgXGZCdGljXGZSIGltcGxlbWVudGF0aW9ucyB0cmVhdGVkCitkZXNjcmlwdGlvbiBmaWVsZHMgd2l0aCBubyB3aGl0ZXNwYWNlIGluIHRoZW0gYXMgYWRkaXRpb25hbCBhbGlhc2VzIG9yCitzaG9ydCBuYW1lcy4gIFRoaXMgXGZCdGljXGZSIGRvZXMgbm90IGRvIHRoYXQsIGJ1dCBpdCBkb2VzIHdhcm4gd2hlbgorZGVzY3JpcHRpb24gZmllbGRzIG1heSBiZSB0cmVhdGVkIHRoYXQgd2F5IGFuZCBjaGVjayB0aGVtIGZvciBkYW5nZXJvdXMKK2NoYXJhY3RlcnMuCisuU0ggRVhURU5TSU9OUworVW5saWtlIHRoZSBzdG9jayBTVnI0IFxmQnRpY1xmUiBjb21tYW5kLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBhY3R1YWxseQorY29tcGlsZSB0ZXJtY2FwIHNvdXJjZXMuICBJbiBmYWN0LCBlbnRyaWVzIGluIHRlcm1pbmZvIGFuZCB0ZXJtY2FwIHN5bnRheCBjYW4KK2JlIG1peGVkIGluIGEgc2luZ2xlIHNvdXJjZSBmaWxlLiAgU2VlIFxmQnRlcm1pbmZvXGZSKFwqbikgZm9yIHRoZSBsaXN0IG9mCit0ZXJtY2FwIG5hbWVzIHRha2VuIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGVybWluZm8gbmFtZXMuCisuUFAKK1RoZSBTVnI0IG1hbnVhbCBwYWdlcyBhcmUgbm90IGNsZWFyIG9uIHRoZSByZXNvbHV0aW9uIHJ1bGVzIGZvciBcZkJ1c2VcZlIKK2NhcGFiaWxpdGllcy4KK1RoaXMgaW1wbGVtZW50YXRpb24gb2YgXGZCdGljXGZSIHdpbGwgZmluZCBcZkJ1c2VcZlIgdGFyZ2V0cyBhbnl3aGVyZQoraW4gdGhlIHNvdXJjZSBmaWxlLCBvciBhbnl3aGVyZSBpbiB0aGUgZmlsZSB0cmVlIHJvb3RlZCBhdCBcZkJURVJNSU5GT1xmUiAoaWYKK1xmQlRFUk1JTkZPXGZSIGlzIGRlZmluZWQpLCBvciBpbiB0aGUgdXNlcidzIFxmSSRIT01FLy50ZXJtaW5mb1xmUiBkaXJlY3RvcnkKKyhpZiBpdCBleGlzdHMpLCBvciAoZmluYWxseSkgYW55d2hlcmUgaW4gdGhlIHN5c3RlbSdzIGZpbGUgdHJlZSBvZgorY29tcGlsZWQgZW50cmllcy4KKy5QUAorVGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhpcyBcZkJ0aWNcZlIgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgYXMgR05VIEMKK2Vycm9yIG1lc3NhZ2VzLCBhbmQgY2FuIGJlIHBhcnNlZCBieSBHTlUgRW1hY3MncyBjb21waWxlIGZhY2lsaXR5LgorLlBQCitUaGUKK1xmQi1DXGZSLAorXGZCLUdcZlIsCitcZkItSVxmUiwKK1xmQi1OXGZSLAorXGZCLVJcZlIsCitcZkItVFxmUiwKK1xmQi1WXGZSLAorXGZCLWFcZlIsCitcZkItZVxmUiwKK1xmQi1mXGZSLAorXGZCLWdcZlIsCitcZkItb1xmUiwKK1xmQi1yXGZSLAorXGZCLXNcZlIsCitcZkItdFxmUiBhbmQKK1xmQi14XGZSCitvcHRpb25zCithcmUgbm90IHN1cHBvcnRlZCB1bmRlciBTVnI0LgorVGhlIFNWcjQgXGZCLWNcZlIgbW9kZSBkb2VzIG5vdCByZXBvcnQgYmFkIHVzZSBsaW5rcy4KKy5QUAorU3lzdGVtIFYgZG9lcyBub3QgY29tcGlsZSBlbnRyaWVzIHRvIG9yIHJlYWQgZW50cmllcyBmcm9tIHlvdXIKK1xmSSRIT01FLy50ZXJtaW5mb1xmUiBkaXJlY3RvcnkgdW5sZXNzIFRFUk1JTkZPIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGl0LgorLlNIIEZJTEVTCisuVFAgNQorXGZCXCpkLz8vKlxmUgorQ29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb24gZGF0YWJhc2UuCisuU0ggU0VFIEFMU08KK1xmQkBJTkZPQ01QQFxmUigxTSksCitcZkJAQ0FQVE9JTkZPQFxmUigxTSksCitcZkJASU5GT1RPQ0FQQFxmUigxTSksCitcZkJAVE9FQFxmUigxTSksCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCdGVybWluZm9cZlIoXCpuKS4KKy5QUAorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vdG9lLjFtIGIvbWFuL3RvZS4xbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTMwMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL3RvZS4xbQpAQCAtMCwwICsxLDEwNyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiB0b2UuMW0sdiAxLjIxIDIwMDgvMDEvMDUgMjA6NTc6MTYgdG9tIEV4cCAkCisuVEggQFRPRUAgMU0gIiIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCitcZkJ0b2VcZlIgLSB0YWJsZSBvZiAodGVybWluZm8pIGVudHJpZXMKKy5TSCBTWU5PUFNJUworXGZCdG9lXGZSIFtcZkItdlxmUltcZkluXGZSXV0gW1xmQi1haHVVVlxmUl0gXGZJZmlsZS4uLlxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KKy5QUAorV2l0aCBubyBvcHRpb25zLAorXGZCdG9lXGZSIGxpc3RzIGFsbCBhdmFpbGFibGUgdGVybWluYWwgdHlwZXMgYnkgcHJpbWFyeSBuYW1lCit3aXRoIGRlc2NyaXB0aW9ucy4KK0ZpbGUgYXJndW1lbnRzIHNwZWNpZnkgdGhlIGRpcmVjdG9yaWVzIHRvIGJlIHNjYW5uZWQ7IGlmIG5vCitzdWNoIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sCit5b3VyIGRlZmF1bHQgdGVybWluZm8gZGlyZWN0b3J5IGlzIHNjYW5uZWQuCitJZiB5b3UgYWxzbyBzcGVjaWZ5IHRoZSBcZkItaFxmUiBvcHRpb24sCithIGRpcmVjdG9yeSBoZWFkZXIgd2lsbCBiZSBpc3N1ZWQgYXMgZWFjaAorZGlyZWN0b3J5IGlzIGVudGVyZWQuCisuUFAKK1RoZXJlIGFyZSBvdGhlciBvcHRpb25zIGludGVuZGVkIGZvciB1c2UgYnkgdGVybWluZm8gZmlsZSBtYWludGFpbmVyczoKKy5UUAorXGZCLWFcZlIKK3JlcG9ydCBvbiBhbGwgb2YgdGhlIHRlcm1pbmFsIGRhdGFiYXNlcyB3aGljaCBuY3Vyc2VzIHdvdWxkIHNlYXJjaCwKK3JhdGhlciB0aGFuIG9ubHkgdGhlIGZpcnN0IG9uZSB0aGF0IGl0IGZpbmRzLgorLlRQCitcZkItdVxmUiBcZklmaWxlXGZSCitzYXlzIHRvIHdyaXRlIGEgcmVwb3J0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsCitsaXN0aW5nIGRlcGVuZGVuY2llcyBpbiB0aGUgZ2l2ZW4gdGVybWluZm8vdGVybWNhcCBzb3VyY2UgZmlsZS4KK1RoZSByZXBvcnQgY29uZGVuc2VzIHRoZSBgdXNlJyByZWxhdGlvbjoKK2VhY2ggbGluZSBjb25zaXN0cyBvZiB0aGUgcHJpbWFyeSBuYW1lIG9mIGEgdGVybWluYWwgdGhhdAoraGFzIHVzZSBjYXBhYmlsaXRpZXMsCitmb2xsb3dlZCBieSBhIGNvbG9uLAorZm9sbG93ZWQgYnkgdGhlCit3aGl0ZXNwYWNlLXNlcGFyYXRlZCBwcmltYXJ5IG5hbWVzIG9mIGFsbCB0ZXJtaW5hbHMgd2hpY2ggb2NjdXIgaW4gdGhvc2UgdXNlCitjYXBhYmlsaXRpZXMsCitmb2xsb3dlZCBieSBhIG5ld2xpbmUKKy5UUAorXGZCLVVcZlIgXGZJZmlsZVxmUgorc2F5cyB0byB3cml0ZSBhIHJlcG9ydCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LAorbGlzdGluZyByZXZlcnNlIGRlcGVuZGVuY2llcyBpbiB0aGUgZ2l2ZW4gdGVybWluZm8vdGVybWNhcCBzb3VyY2UgZmlsZS4KK1RoZSByZXBvcnQgcmV2ZXJzZXMgdGhlIGB1c2UnIHJlbGF0aW9uOgorZWFjaCBsaW5lIGNvbnNpc3RzIG9mIHRoZSBwcmltYXJ5IG5hbWUgb2YgYQordGVybWluYWwgdGhhdCBvY2N1cnMgaW4gdXNlIGNhcGFiaWxpdGllcywKK2ZvbGxvd2VkIGJ5IGEgY29sb24sCitmb2xsb3dlZCBieSB0aGUKK3doaXRlc3BhY2Utc2VwYXJhdGVkIHByaW1hcnkgbmFtZXMgb2YgYWxsIHRlcm1pbmFscyB3aGljaCBkZXBlbmQgb24gaXQsCitmb2xsb3dlZCBieSBhIG5ld2xpbmUuCisuVFAKK1xmQi12XGZSXGZJblxmUgorc3BlY2lmaWVzIHRoYXQgKHZlcmJvc2UpIG91dHB1dCBiZSB3cml0dGVuIHRvIHN0YW5kYXJkIGVycm9yLAorc2hvd2luZyBcZkJ0b2VcZlIncyBwcm9ncmVzcy4KK1RoZSBvcHRpb25hbCBwYXJhbWV0ZXIgXGZJblxmUiBpcyBhIG51bWJlciBmcm9tIDEgdG8gMTAsCitpbnRlcnByZXRlZCBhcyBmb3IgXGZCQFRJQ0BcZlIoMU0pLgorLlRQCitcZkItVlxmUgorcmVwb3J0cyB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzIHdoaWNoIHdhcyB1c2VkIGluIHRoaXMgcHJvZ3JhbSwKK2FuZCBleGl0cy4KKy5TSCBGSUxFUworLlRQIDUKK1xmQlwqZC8/LypcZlIKK0NvbXBpbGVkIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGRhdGFiYXNlLgorLlNIIFNFRSBBTFNPCitcZkJAVElDQFxmUigxTSksCitcZkJASU5GT0NNUEBcZlIoMU0pLAorXGZCQENBUFRPSU5GT0BcZlIoMU0pLAorXGZCQElORk9UT0NBUEBcZlIoMU0pLAorXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQnRlcm1pbmZvXGZSKFwqbikuCisuUFAKK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3RwdXQuMSBiL21hbi90cHV0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYTBiMQotLS0gL2Rldi9udWxsCisrKyBiL21hbi90cHV0LjEKQEAgLTAsMCArMSwzMjUgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IHRwdXQuMSx2IDEuMjcgMjAwNi8xMi8yNCAxODoxMTozMSB0b20gRXhwICQKKy5USCBAVFBVVEAgMSAiIgorLmRzIGQgQFRFUk1JTkZPQAorLmRzIG4gMQorLlNIIE5BTUUKK1xmQkBUUFVUQFxmUiwgXGZCcmVzZXRcZlIgLSBpbml0aWFsaXplIGEgdGVybWluYWwgb3IgcXVlcnkgdGVybWluZm8gZGF0YWJhc2UKKy5TSCBTWU5PUFNJUworXGZCQFRQVVRAXGZSIFtcZkItVFxmUlxmSXR5cGVcZlJdIFxmSWNhcG5hbWVcZlIgW1xmSXBhcm1zXGZSIC4uLiBdCisuYnIKK1xmQkBUUFVUQFxmUiBbXGZCLVRcZlJcZkl0eXBlXGZSXSBcZkJpbml0XGZSCisuYnIKK1xmQkBUUFVUQFxmUiBbXGZCLVRcZlJcZkl0eXBlXGZSXSBcZkJyZXNldFxmUgorLmJyCitcZkJAVFBVVEBcZlIgW1xmQi1UXGZSXGZJdHlwZVxmUl0gXGZCbG9uZ25hbWVcZlIKKy5icgorXGZCQFRQVVRAIC1TXGZSICBcZkI8PFxmUgorLmJyCitcZkJAVFBVVEAgLVZcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCQFRQVVRAXGZSIHV0aWxpdHkgdXNlcyB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgdG8gbWFrZSB0aGUKK3ZhbHVlcyBvZiB0ZXJtaW5hbC1kZXBlbmRlbnQgY2FwYWJpbGl0aWVzIGFuZCBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdG8KK3RoZSBzaGVsbCAoc2VlIFxmQnNoXGZSKDEpKSwgdG8gaW5pdGlhbGl6ZSBvciByZXNldCB0aGUgdGVybWluYWwsIG9yCityZXR1cm4gdGhlIGxvbmcgbmFtZSBvZiB0aGUgcmVxdWVzdGVkIHRlcm1pbmFsIHR5cGUuCitUaGUgcmVzdWx0IGRlcGVuZHMgdXBvbiB0aGUgY2FwYWJpbGl0eSdzIHR5cGU6CisuUlMKKy5UUCA1CitzdHJpbmcKK1xmQkBUUFVUQFxmUiB3cml0ZXMgdGhlIHN0cmluZyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorTm8gdHJhaWxpbmcgbmV3bGluZSBpcyBzdXBwbGllZC4KKy5UUAoraW50ZWdlcgorXGZCQFRQVVRAXGZSIHdyaXRlcyB0aGUgZGVjaW1hbCB2YWx1ZSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LAord2l0aCBhIHRyYWlsaW5nIG5ld2xpbmUuCisuVFAKK2Jvb2xlYW4KK1xmQkBUUFVUQFxmUiBzaW1wbHkgc2V0cyB0aGUgZXhpdCBjb2RlCisoXGZCMFxmUiBmb3IgVFJVRSBpZiB0aGUgdGVybWluYWwgaGFzIHRoZSBjYXBhYmlsaXR5LAorXGZCMVxmUiBmb3IgRkFMU0UgaWYgaXQgZG9lcyBub3QpLAorYW5kIHdyaXRlcyBub3RoaW5nIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisuUkUKKy5QUAorQmVmb3JlIHVzaW5nIGEgdmFsdWUgcmV0dXJuZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dCwKK3RoZSBhcHBsaWNhdGlvbiBzaG91bGQgdGVzdCB0aGUgZXhpdCBjb2RlCisoZS5nLiwgXGZCJD9cZlIsIHNlZSBcZkJzaFxmUigxKSkgdG8gYmUgc3VyZSBpdCBpcyBcZkIwXGZSLgorKFNlZSB0aGUgXGZCRVhJVCBDT0RFU1xmUiBhbmQgXGZCRElBR05PU1RJQ1NcZlIgc2VjdGlvbnMuKQorRm9yIGEgY29tcGxldGUgbGlzdCBvZiBjYXBhYmlsaXRpZXMKK2FuZCB0aGUgXGZJY2FwbmFtZVxmUiBhc3NvY2lhdGVkIHdpdGggZWFjaCwgc2VlIFxmQnRlcm1pbmZvXGZSKDUpLgorLlRQCitcZkItVFxmUlxmSXR5cGVcZlIKK2luZGljYXRlcyB0aGUgXGZJdHlwZVxmUiBvZiB0ZXJtaW5hbC4gIE5vcm1hbGx5IHRoaXMgb3B0aW9uIGlzCit1bm5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgZGVmYXVsdCBpcyB0YWtlbiBmcm9tIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgXGZCVEVSTVxmUi4gIElmIFxmQi1UXGZSIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgc2hlbGwKK3ZhcmlhYmxlcyBcZkJMSU5FU1xmUiBhbmQgXGZCQ09MVU1OU1xmUiB3aWxsIGJlIGlnbm9yZWQsYW5kIHRoZQorb3BlcmF0aW5nIHN5c3RlbSB3aWxsIG5vdCBiZSBxdWVyaWVkIGZvciB0aGUgYWN0dWFsIHNjcmVlbiBzaXplLgorLlRQCitcZkljYXBuYW1lXGZSCitpbmRpY2F0ZXMgdGhlIGNhcGFiaWxpdHkgZnJvbSB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UuICBXaGVuCitcZkJ0ZXJtY2FwXGZSIHN1cHBvcnQgaXMgY29tcGlsZWQgaW4sIHRoZSBcZkJ0ZXJtY2FwXGZSIG5hbWUgZm9yCit0aGUgY2FwYWJpbGl0eSBpcyBhbHNvIGFjY2VwdGVkLgorLlRQCitcZklwYXJtc1xmUgorSWYgdGhlIGNhcGFiaWxpdHkgaXMgYSBzdHJpbmcgdGhhdCB0YWtlcyBwYXJhbWV0ZXJzLCB0aGUgYXJndW1lbnRzCitcZklwYXJtc1xmUiB3aWxsIGJlIGluc3RhbnRpYXRlZCBpbnRvIHRoZSBzdHJpbmcuCisuSVAKK01vc3QgcGFyYW1ldGVycyBhcmUgbnVtYmVycy4KK09ubHkgYSBmZXcgdGVybWluZm8gY2FwYWJpbGl0aWVzIHJlcXVpcmUgc3RyaW5nIHBhcmFtZXRlcnM7CitcZkJAVFBVVEBcZlIgdXNlcyBhIHRhYmxlIHRvIGRlY2lkZSB3aGljaCB0byBwYXNzIGFzIHN0cmluZ3MuCitOb3JtYWxseSBcZkJAVFBVVEBcZlIgdXNlcyBcZkJ0cGFybVxmUiAoM1gpIHRvIHBlcmZvcm0gdGhlIHN1YnN0aXR1dGlvbi4KK0lmIG5vIHBhcmFtZXRlcnMgYXJlIGdpdmVuIGZvciB0aGUgY2FwYWJpbGl0eSwKK1xmQkBUUFVUQFxmUiB3cml0ZXMgdGhlIHN0cmluZyB3aXRob3V0IHBlcmZvcm1pbmcgdGhlIHN1YnN0aXR1dGlvbi4KKy5UUAorXGZCLVNcZlIKK2FsbG93cyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHkgcGVyIGludm9jYXRpb24gb2YgXGZCQFRQVVRAXGZSLiAgVGhlCitjYXBhYmlsaXRpZXMgbXVzdCBiZSBwYXNzZWQgdG8gXGZCQFRQVVRAXGZSIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0CitpbnN0ZWFkIG9mIGZyb20gdGhlIGNvbW1hbmQgbGluZSAoc2VlIGV4YW1wbGUpLgorT25seSBvbmUgXGZJY2FwbmFtZVxmUiBpcyBhbGxvd2VkIHBlciBsaW5lLgorVGhlIFxmQi1TXGZSIG9wdGlvbiBjaGFuZ2VzIHRoZQorbWVhbmluZyBvZiB0aGUgXGZCMFxmUiBhbmQgXGZCMVxmUiBib29sZWFuIGFuZCBzdHJpbmcgZXhpdCBjb2RlcyAoc2VlIHRoZQorRVhJVCBDT0RFUyBzZWN0aW9uKS4KKy5JUAorQWdhaW4sIFxmQkBUUFVUQFxmUiB1c2VzIGEgdGFibGUgYW5kIHRoZSBwcmVzZW5jZSBvZiBwYXJhbWV0ZXJzIGluIGl0cyBpbnB1dAordG8gZGVjaWRlIHdoZXRoZXIgdG8gdXNlIFxmQnRwYXJtXGZSICgzWCksCithbmQgaG93IHRvIGludGVycHJldCB0aGUgcGFyYW1ldGVycy4KKy5UUAorXGZCLVZcZlIKK3JlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCB3YXMgdXNlZCBpbiB0aGlzIHByb2dyYW0sIGFuZCBleGl0cy4KKy5UUAorXGZCaW5pdFxmUgorSWYgdGhlIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIGlzIHByZXNlbnQgYW5kIGFuIGVudHJ5IGZvciB0aGUgdXNlcidzCit0ZXJtaW5hbCBleGlzdHMgKHNlZSBcZkItVFxmUlxmSXR5cGVcZlIsIGFib3ZlKSwgdGhlIGZvbGxvd2luZyB3aWxsCitvY2N1cjoKKy5SUworLlRQCisoMSkKK2lmIHByZXNlbnQsIHRoZSB0ZXJtaW5hbCdzIGluaXRpYWxpemF0aW9uIHN0cmluZ3Mgd2lsbCBiZQorb3V0cHV0IGFzIGRldGFpbGVkIGluIHRoZSBcZkJ0ZXJtaW5mb1xmUig1KSBzZWN0aW9uIG9uCisuSVIgIlRhYnMgYW5kIEluaXRpYWxpemF0aW9uIiAsCisuVFAKKygyKQorYW55IGRlbGF5cyAoZS5nLiwgbmV3bGluZSkgc3BlY2lmaWVkIGluIHRoZSBlbnRyeSB3aWxsCitiZSBzZXQgaW4gdGhlIHR0eSBkcml2ZXIsCisuVFAKKygzKQordGFicyBleHBhbnNpb24gd2lsbCBiZSB0dXJuZWQgb24gb3Igb2ZmIGFjY29yZGluZyB0bwordGhlIHNwZWNpZmljYXRpb24gaW4gdGhlIGVudHJ5LCBhbmQKKy5UUAorKDQpCitpZiB0YWJzIGFyZSBub3QgZXhwYW5kZWQsCitzdGFuZGFyZCB0YWJzIHdpbGwgYmUgc2V0IChldmVyeSA4IHNwYWNlcykuCisuUkUKKy5JUAorSWYgYW4gZW50cnkgZG9lcyBub3QKK2NvbnRhaW4gdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYW55IG9mIHRoZSBmb3VyIGFib3ZlIGFjdGl2aXRpZXMsCit0aGF0IGFjdGl2aXR5IHdpbGwgc2lsZW50bHkgYmUgc2tpcHBlZC4KKy5UUAorXGZCcmVzZXRcZlIKK0luc3RlYWQgb2YgcHV0dGluZyBvdXQgaW5pdGlhbGl6YXRpb24gc3RyaW5ncywgdGhlIHRlcm1pbmFsJ3MKK3Jlc2V0IHN0cmluZ3Mgd2lsbCBiZSBvdXRwdXQgaWYgcHJlc2VudCAoXGZCcnMxXGZSLCBcZkJyczJcZlIsIFxmQnJzM1xmUiwgXGZCcmZcZlIpLgorSWYgdGhlIHJlc2V0IHN0cmluZ3MgYXJlIG5vdCBwcmVzZW50LCBidXQgaW5pdGlhbGl6YXRpb24KK3N0cmluZ3MgYXJlLCB0aGUgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyB3aWxsIGJlIG91dHB1dC4KK090aGVyd2lzZSwgXGZCcmVzZXRcZlIgYWN0cyBpZGVudGljYWxseSB0byBcZkJpbml0XGZSLgorLlRQCitcZkJsb25nbmFtZVxmUgorSWYgdGhlIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIGlzIHByZXNlbnQgYW5kIGFuIGVudHJ5IGZvciB0aGUKK3VzZXIncyB0ZXJtaW5hbCBleGlzdHMgKHNlZSBcZkItVFxmUlxmSXR5cGVcZlIgYWJvdmUpLCB0aGVuIHRoZSBsb25nIG5hbWUKK29mIHRoZSB0ZXJtaW5hbCB3aWxsIGJlIHB1dCBvdXQuICBUaGUgbG9uZyBuYW1lIGlzIHRoZSBsYXN0CituYW1lIGluIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXJtaW5hbCdzIGRlc2NyaXB0aW9uIGluIHRoZQorXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgW3NlZSBcZkJ0ZXJtXGZSKDUpXS4KKy5QUAorSWYgXGZCQFRQVVRAXGZSIGlzIGludm9rZWQgYnkgYSBsaW5rIG5hbWVkIFxmQnJlc2V0XGZSLCB0aGlzIGhhcyB0aGUKK3NhbWUgZWZmZWN0IGFzIFxmQkBUUFVUQCByZXNldFxmUi4KK1NlZSBcZkJ0c2V0XGZSIGZvciBjb21wYXJpc29uLCB3aGljaCBoYXMgc2ltaWxhciBiZWhhdmlvci4KKy5TSCBFWEFNUExFUworLlRQIDUKK1xmQkBUUFVUQCBpbml0XGZSCitJbml0aWFsaXplIHRoZSB0ZXJtaW5hbCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2YKK3Rlcm1pbmFsIGluIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIFxmQlRFUk1cZlIuICBUaGlzCitjb21tYW5kIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBldmVyeW9uZSdzIC5wcm9maWxlIGFmdGVyCit0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBcZkJURVJNXGZSIGhhcyBiZWVuIGV4cG9ydGVkLCBhcworaWxsdXN0cmF0ZWQgb24gdGhlIFxmQnByb2ZpbGVcZlIoNSkgbWFudWFsIHBhZ2UuCisuVFAgNQorXGZCQFRQVVRAIC1UNTYyMCByZXNldFxmUgorUmVzZXQgYW4gQVQmVCA1NjIwIHRlcm1pbmFsLCBvdmVycmlkaW5nIHRoZSB0eXBlIG9mCit0ZXJtaW5hbCBpbiB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBcZkJURVJNXGZSLgorLlRQIDUKK1xmQkBUUFVUQCBjdXAgMCAwXGZSCitTZW5kIHRoZSBzZXF1ZW5jZSB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gcm93IFxmQjBcZlIsIGNvbHVtbiBcZkIwXGZSCisodGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4sIHVzdWFsbHkga25vd24gYXMgdGhlICJob21lIgorY3Vyc29yIHBvc2l0aW9uKS4KKy5UUCA1CitcZkJAVFBVVEAgY2xlYXJcZlIKK0VjaG8gdGhlIGNsZWFyLXNjcmVlbiBzZXF1ZW5jZSBmb3IgdGhlIGN1cnJlbnQgdGVybWluYWwuCisuVFAgNQorXGZCQFRQVVRAIGNvbHNcZlIKK1ByaW50IHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIGN1cnJlbnQgdGVybWluYWwuCisuVFAgNQorXGZCQFRQVVRAIC1UNDUwIGNvbHNcZlIKK1ByaW50IHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIDQ1MCB0ZXJtaW5hbC4KKy5UUCA1CitcZkJib2xkPWBAVFBVVEAgc21zb2Agb2ZmYm9sZD1gQFRQVVRAIHJtc29gXGZSCitTZXQgdGhlIHNoZWxsIHZhcmlhYmxlcyBcZkJib2xkXGZSLCB0byBiZWdpbiBzdGFuZC1vdXQgbW9kZQorc2VxdWVuY2UsIGFuZCBcZkJvZmZib2xkXGZSLCB0byBlbmQgc3RhbmRvdXQgbW9kZSBzZXF1ZW5jZSwKK2ZvciB0aGUgY3VycmVudCB0ZXJtaW5hbC4gIFRoaXMgbWlnaHQgYmUgZm9sbG93ZWQgYnkgYQorcHJvbXB0OiBcZkJlY2hvICIke2JvbGR9UGxlYXNlIHR5cGUgaW4geW91ciBuYW1lOiAke29mZmJvbGR9XFxjIlxmUgorLlRQIDUKK1xmQkBUUFVUQCBoY1xmUgorU2V0IGV4aXQgY29kZSB0byBpbmRpY2F0ZSBpZiB0aGUgY3VycmVudCB0ZXJtaW5hbCBpcyBhIGhhcmQgY29weSB0ZXJtaW5hbC4KKy5UUCA1CitcZkJAVFBVVEAgY3VwIDIzIDRcZlIKK1NlbmQgdGhlIHNlcXVlbmNlIHRvIG1vdmUgdGhlIGN1cnNvciB0byByb3cgMjMsIGNvbHVtbiA0LgorLlRQIDUKK1xmQkBUUFVUQCBjdXBcZlIKK1NlbmQgdGhlIHRlcm1pbmZvIHN0cmluZyBmb3IgY3Vyc29yLW1vdmVtZW50LCB3aXRoIG5vIHBhcmFtZXRlcnMgc3Vic3RpdHV0ZWQuCisuVFAgNQorXGZCQFRQVVRAIGxvbmduYW1lXGZSCitQcmludCB0aGUgbG9uZyBuYW1lIGZyb20gdGhlIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIGZvciB0aGUKK3R5cGUgb2YgdGVybWluYWwgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudGFsCit2YXJpYWJsZSBcZkJURVJNXGZSLgorLlBQCisuUlMgNQorXGZCQFRQVVRAIC1TIDw8IVxmUgorLmJyCitcZkI+IGNsZWFyXGZSCisuYnIKK1xmQj4gY3VwIDEwIDEwXGZSCisuYnIKK1xmQj4gYm9sZFxmUgorLmJyCitcZkI+ICFcZlIKKy5SRQorLlRQIDUKK1wmCitUaGlzIGV4YW1wbGUgc2hvd3MgXGZCQFRQVVRAXGZSIHByb2Nlc3Npbmcgc2V2ZXJhbCBjYXBhYmlsaXRpZXMgaW4gb25lIGludm9jYXRpb24uCitJdCBjbGVhcnMgdGhlIHNjcmVlbiwKK21vdmVzIHRoZSBjdXJzb3IgdG8gcG9zaXRpb24gMTAsIDEwCithbmQgdHVybnMgb24gYm9sZCAoZXh0cmEgYnJpZ2h0KSBtb2RlLgorVGhlIGxpc3QgaXMgdGVybWluYXRlZCBieSBhbiBleGNsYW1hdGlvbiBtYXJrIChcZkIhXGZSKSBvbiBhIGxpbmUgYnkgaXRzZWxmLgorLlNIIEZJTEVTCisuVFAKK1xmQlwqZFxmUgorY29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb24gZGF0YWJhc2UKKy5UUAorXGZCQERBVEFESVJAL3RhYnNldC8qXGZSCit0YWIgc2V0dGluZ3MgZm9yIHNvbWUgdGVybWluYWxzLCBpbiBhIGZvcm1hdAorYXBwcm9wcmlhdGUgdG8gYmUgb3V0cHV0IHRvIHRoZSB0ZXJtaW5hbCAoZXNjYXBlCitzZXF1ZW5jZXMgdGhhdCBzZXQgbWFyZ2lucyBhbmQgdGFicyk7IGZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIHRoZSAiVGFicyBhbmQgSW5pdGlhbGl6YXRpb24iCitzZWN0aW9uIG9mIFxmQnRlcm1pbmZvXGZSKDUpCisuU0ggRVhJVCBDT0RFUworSWYgdGhlIFxmQi1TXGZSIG9wdGlvbiBpcyB1c2VkLAorXGZCQFRQVVRAXGZSIGNoZWNrcyBmb3IgZXJyb3JzIGZyb20gZWFjaCBsaW5lLAorYW5kIGlmIGFueSBlcnJvcnMgYXJlIGZvdW5kLCB3aWxsIHNldCB0aGUgZXhpdCBjb2RlIHRvIDQgcGx1cyB0aGUKK251bWJlciBvZiBsaW5lcyB3aXRoIGVycm9ycy4KK0lmIG5vIGVycm9ycyBhcmUgZm91bmQsIHRoZSBleGl0IGNvZGUgaXMgXGZCMFxmUi4KK05vIGluZGljYXRpb24gb2Ygd2hpY2ggbGluZSBmYWlsZWQgY2FuIGJlIGdpdmVuIHNvCitleGl0IGNvZGUgXGZCMVxmUiB3aWxsIG5ldmVyIGFwcGVhci4gIEV4aXQgY29kZXMgXGZCMlxmUiwgXGZCM1xmUiwgYW5kCitcZkI0XGZSIHJldGFpbiB0aGVpciB1c3VhbCBpbnRlcnByZXRhdGlvbi4KK0lmIHRoZSBcZkItU1xmUiBvcHRpb24gaXMgbm90IHVzZWQsCit0aGUgZXhpdCBjb2RlIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgXGZJY2FwbmFtZVxmUjoKKy5SUyA1CisuVFAKKy5JIGJvb2xlYW4KK2EgdmFsdWUgb2YgXGZCMFxmUiBpcyBzZXQgZm9yIFRSVUUgYW5kIFxmQjFcZlIgZm9yIEZBTFNFLgorLlRQCisuSSBzdHJpbmcKK2EgdmFsdWUgb2YgXGZCMFxmUiBpcyBzZXQgaWYgdGhlCitcZkljYXBuYW1lXGZSIGlzIGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwgXGZJdHlwZVxmUiAodGhlIHZhbHVlIG9mCitcZkljYXBuYW1lXGZSIGlzIHJldHVybmVkIG9uIHN0YW5kYXJkIG91dHB1dCk7CithIHZhbHVlIG9mIFxmQjFcZlIgaXMgc2V0IGlmIFxmSWNhcG5hbWVcZlIKK2lzIG5vdCBkZWZpbmVkIGZvciB0aGlzIHRlcm1pbmFsIFxmSXR5cGVcZlIKKyhub3RoaW5nIGlzIHdyaXR0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0KS4KKy5UUAorLkkgaW50ZWdlcgorYSB2YWx1ZSBvZiBcZkIwXGZSIGlzIGFsd2F5cyBzZXQsCit3aGV0aGVyIG9yIG5vdCBcZkljYXBuYW1lXGZSIGlzIGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwgXGZJdHlwZVxmUi4KK1RvIGRldGVybWluZSBpZiBcZkljYXBuYW1lXGZSIGlzIGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwgXGZJdHlwZVxmUiwKK3RoZSB1c2VyIG11c3QgdGVzdCB0aGUgdmFsdWUgd3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQuCitBIHZhbHVlIG9mIFxmQi0xXGZSCittZWFucyB0aGF0IFxmSWNhcG5hbWVcZlIgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwgXGZJdHlwZVxmUi4KKy5UUAorLkkgb3RoZXIKK1xmQnJlc2V0XGZSIG9yIFxmQmluaXRcZlIgbWF5IGZhaWwgdG8gZmluZCB0aGVpciByZXNwZWN0aXZlIGZpbGVzLgorSW4gdGhhdCBjYXNlLCB0aGUgZXhpdCBjb2RlIGlzIHNldCB0byA0ICsgXGZCZXJybm9cZlIuCisuUkUKKy5QUAorQW55IG90aGVyIGV4aXQgY29kZSBpbmRpY2F0ZXMgYW4gZXJyb3I7IHNlZSB0aGUgRElBR05PU1RJQ1Mgc2VjdGlvbi4KKy5TSCBESUFHTk9TVElDUworXGZCdHB1dFxmUiBwcmludHMgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlcyBhbmQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBleGl0Citjb2Rlcy4KKy5QUAorLm5lIDE1CisuVFMKK2wgbC4KK2V4aXQgY29kZQllcnJvciBtZXNzYWdlCis9CitcZkIwXGZSCVR7CisoXGZJY2FwbmFtZVxmUiBpcyBhIG51bWVyaWMgdmFyaWFibGUgdGhhdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZQorXGZCdGVybWluZm9cZlIoNSkgZGF0YWJhc2UgZm9yIHRoaXMgdGVybWluYWwgdHlwZSwgZS5nLgorXGZCQFRQVVRAIC1UNDUwIGxpbmVzXGZSIGFuZCBcZkJAVFBVVEAgLVQyNjIxIHhtY1xmUikKK1R9CitcZkIxXGZSCW5vIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgc2VlIHRoZSBcZkJFWElUIENPREVTXGZSIHNlY3Rpb24uCitcZkIyXGZSCXVzYWdlIGVycm9yCitcZkIzXGZSCXVua25vd24gdGVybWluYWwgXGZJdHlwZVxmUiBvciBubyBcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZQorXGZCNFxmUgl1bmtub3duIFxmQnRlcm1pbmZvXGZSIGNhcGFiaWxpdHkgXGZJY2FwbmFtZVxmUgorXGZCPjRcZlIJZXJyb3Igb2NjdXJyZWQgaW4gLVMKKz0KKy5URQorLlNIIFBPUlRBQklMSVRZCisuUFAKK1RoZSBcZkJsb25nbmFtZVxmUiBhbmQgXGZCLVNcZlIgb3B0aW9ucywgYW5kIHRoZSBwYXJhbWV0ZXItc3Vic3RpdHV0aW9uCitmZWF0dXJlcyB1c2VkIGluIHRoZSBcZkJjdXBcZlIgZXhhbXBsZSwgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gQlNEIGN1cnNlcyBvciBpbgorQVQmVC9VU0wgY3Vyc2VzIGJlZm9yZSBTVnI0LgorLlBQCitYL09wZW4gZG9jdW1lbnRzIG9ubHkgdGhlIG9wZXJhbmRzIGZvciBcZkJjbGVhclxmUCwgXGZCaW5pdFxmUCBhbmQgXGZCcmVzZXRcZlAuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBcZkJjbGVhclxmUCBpcyBwYXJ0IG9mIHRoZSBcZkljYXBuYW1lXGZSIHN1cHBvcnQuCitPdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgXGZCdHB1dFxmUCBvbgorU1ZyNC1iYXNlZCBzeXN0ZW1zIHN1Y2ggYXMgU29sYXJpcywgSVJJWDY0IGFuZCBIUFVYCithcyB3ZWxsIGFzIG90aGVycyBzdWNoIGFzIEFJWCBhbmQgVHJ1NjQKK3Byb3ZpZGUgc3VwcG9ydCBmb3IgXGZJY2FwbmFtZVxmUiBvcGVyYW5kcy4KK0EgZmV3IHBsYXRmb3JtcyBzdWNoIGFzIEZyZWVCU0QgYW5kIE5ldEJTRCByZWNvZ25pemUgdGVybWNhcCBuYW1lcyByYXRoZXIKK3RoYW4gdGVybWluZm8gY2FwYWJpbGl0eSBuYW1lcyBpbiB0aGVpciByZXNwZWN0aXZlIFxmQnRwdXRcZlAgY29tbWFuZHMuCisuU0ggU0VFIEFMU08KK1xmQkBDTEVBUkBcZlIoMSksCitcZkJzdHR5XGZSKDEpLAorXGZCdGFic1xmUihcKm4pLAorXGZCdGVybWluZm9cZlIoNSkuCisuUFAKK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3RzZXQuMSBiL21hbi90c2V0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyMzA2NAotLS0gL2Rldi9udWxsCisrKyBiL21hbi90c2V0LjEKQEAgLTAsMCArMSwyODggQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogdHNldC4xLHYgMS4xOSAyMDA2LzEyLzI0IDE1OjAwOjMwIHRvbSBFeHAgJAorLlRIIHRzZXQgMSAiIgorLlNIIE5BTUUKK1xmQnRzZXRcZlIsIFxmQnJlc2V0XGZSIC0gdGVybWluYWwgaW5pdGlhbGl6YXRpb24KKy5TSCBTWU5PUFNJUworXGZCdHNldFxmUiBbXGZCLUlRVmNxcnN3XGZSXSBbXGZCLVxmUl0gW1xmQi1lXGZSIFxmSWNoXGZSXSBbXGZCLWlcZlIgXGZJY2hcZlJdIFtcZkIta1xmUiBcZkljaFxmUl0gW1xmQi1tXGZSIFxmSW1hcHBpbmdcZlJdIFtcZkl0ZXJtaW5hbFxmUl0KKy5icgorXGZCcmVzZXRcZlIgW1xmQi1JUVZjcXJzd1xmUl0gW1xmQi1cZlJdIFtcZkItZVxmUiBcZkljaFxmUl0gW1xmQi1pXGZSIFxmSWNoXGZSXSBbXGZCLWtcZlIgXGZJY2hcZlJdIFtcZkItbVxmUiBcZkltYXBwaW5nXGZSXSBbXGZJdGVybWluYWxcZlJdCisuU0ggREVTQ1JJUFRJT04KK1wmXGZCVHNldFxmUiBpbml0aWFsaXplcyB0ZXJtaW5hbHMuCitcZkJUc2V0XGZSIGZpcnN0IGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGVybWluYWwgdGhhdCB5b3UgYXJlIHVzaW5nLgorVGhpcyBkZXRlcm1pbmF0aW9uIGlzIGRvbmUgYXMgZm9sbG93cywgdXNpbmcgdGhlIGZpcnN0IHRlcm1pbmFsIHR5cGUgZm91bmQuCisuUFAKKzEuIFRoZSBcZkJ0ZXJtaW5hbFxmUiBhcmd1bWVudCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5QUAorMi4gVGhlIHZhbHVlIG9mIHRoZSBcZkJURVJNXGZSIGVudmlyb25tZW50YWwgdmFyaWFibGUuCisuUFAKKzMuIChCU0Qgc3lzdGVtcyBvbmx5LikgVGhlIHRlcm1pbmFsIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGFuZGFyZAorZXJyb3Igb3V0cHV0IGRldmljZSBpbiB0aGUgXGZJL2V0Yy90dHlzXGZSIGZpbGUuICAoT24gTGludXggYW5kCitTeXN0ZW0tVi1saWtlIFVOSVhlcywgXGZJZ2V0dHlcZlIgZG9lcyB0aGlzIGpvYiBieSBzZXR0aW5nCitcZkJURVJNXGZSIGFjY29yZGluZyB0byB0aGUgdHlwZSBwYXNzZWQgdG8gaXQgYnkgXGZJL2V0Yy9pbml0dGFiXGZSLikKKy5QUAorNC4gVGhlIGRlZmF1bHQgdGVybWluYWwgdHlwZSwgYGB1bmtub3duJycuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCB0eXBlIHdhcyBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZSBcZkItbVxmUgorb3B0aW9uIG1hcHBpbmdzIGFyZSB0aGVuIGFwcGxpZWQgKHNlZSB0aGUgc2VjdGlvbgorLkIgVEVSTUlOQUwgVFlQRSBNQVBQSU5HCitmb3IgbW9yZSBpbmZvcm1hdGlvbikuCitUaGVuLCBpZiB0aGUgdGVybWluYWwgdHlwZSBiZWdpbnMgd2l0aCBhIHF1ZXN0aW9uIG1hcmsgKGBgPycnKSwgdGhlCit1c2VyIGlzIHByb21wdGVkIGZvciBjb25maXJtYXRpb24gb2YgdGhlIHRlcm1pbmFsIHR5cGUuICBBbiBlbXB0eQorcmVzcG9uc2UgY29uZmlybXMgdGhlIHR5cGUsIG9yLCBhbm90aGVyIHR5cGUgY2FuIGJlIGVudGVyZWQgdG8gc3BlY2lmeQorYSBuZXcgdHlwZS4gIE9uY2UgdGhlIHRlcm1pbmFsIHR5cGUgaGFzIGJlZW4gZGV0ZXJtaW5lZCwgdGhlIHRlcm1pbmZvCitlbnRyeSBmb3IgdGhlIHRlcm1pbmFsIGlzIHJldHJpZXZlZC4gIElmIG5vIHRlcm1pbmZvIGVudHJ5IGlzIGZvdW5kCitmb3IgdGhlIHR5cGUsIHRoZSB1c2VyIGlzIHByb21wdGVkIGZvciBhbm90aGVyIHRlcm1pbmFsIHR5cGUuCisuUFAKK09uY2UgdGhlIHRlcm1pbmZvIGVudHJ5IGlzIHJldHJpZXZlZCwgdGhlIHdpbmRvdyBzaXplLCBiYWNrc3BhY2UsIGludGVycnVwdAorYW5kIGxpbmUga2lsbCBjaGFyYWN0ZXJzIChhbW9uZyBtYW55IG90aGVyIHRoaW5ncykgYXJlIHNldCBhbmQgdGhlIHRlcm1pbmFsCithbmQgdGFiIGluaXRpYWxpemF0aW9uIHN0cmluZ3MgYXJlIHNlbnQgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dC4KK0ZpbmFsbHksIGlmIHRoZSBlcmFzZSwgaW50ZXJydXB0IGFuZCBsaW5lIGtpbGwgY2hhcmFjdGVycyBoYXZlIGNoYW5nZWQsCitvciBhcmUgbm90IHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlcywgdGhlaXIgdmFsdWVzIGFyZSBkaXNwbGF5ZWQgdG8gdGhlCitzdGFuZGFyZCBlcnJvciBvdXRwdXQuCitVc2UgdGhlIFxmQi1jXGZQIG9yIFxmQi13XGZQIG9wdGlvbiB0byBzZWxlY3Qgb25seSB0aGUgd2luZG93IHNpemluZwordmVyc3VzIHRoZSBvdGhlciBpbml0aWFsaXphdGlvbi4KK0lmIG5laXRoZXIgb3B0aW9uIGlzIGdpdmVuLCBib3RoIGFyZSBhc3N1bWVkLgorLlBQCitXaGVuIGludm9rZWQgYXMgXGZCcmVzZXRcZlIsIFxmQnRzZXRcZlIgc2V0cyBjb29rZWQgYW5kIGVjaG8gbW9kZXMsCit0dXJucyBvZmYgY2JyZWFrIGFuZCByYXcgbW9kZXMsIHR1cm5zIG9uIG5ld2xpbmUgdHJhbnNsYXRpb24gYW5kCityZXNldHMgYW55IHVuc2V0IHNwZWNpYWwgY2hhcmFjdGVycyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcyBiZWZvcmUKK2RvaW5nIHRoZSB0ZXJtaW5hbCBpbml0aWFsaXphdGlvbiBkZXNjcmliZWQgYWJvdmUuICBUaGlzIGlzIHVzZWZ1bAorYWZ0ZXIgYSBwcm9ncmFtIGRpZXMgbGVhdmluZyBhIHRlcm1pbmFsIGluIGFuIGFibm9ybWFsIHN0YXRlLiAgTm90ZSwKK3lvdSBtYXkgaGF2ZSB0byB0eXBlCisuc3AKKyAgICBcZkI8TEY+cmVzZXQ8TEY+XGZSCisuc3AKKyh0aGUgbGluZS1mZWVkIGNoYXJhY3RlciBpcyBub3JtYWxseSBjb250cm9sLUopIHRvIGdldCB0aGUgdGVybWluYWwKK3RvIHdvcmssIGFzIGNhcnJpYWdlLXJldHVybiBtYXkgbm8gbG9uZ2VyIHdvcmsgaW4gdGhlIGFibm9ybWFsIHN0YXRlLgorQWxzbywgdGhlIHRlcm1pbmFsIHdpbGwgb2Z0ZW4gbm90IGVjaG8gdGhlIGNvbW1hbmQuCisuUFAKK1RoZSBvcHRpb25zIGFyZSBhcyBmb2xsb3dzOgorLlRQIDUKKy5CIC1jCitTZXQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBtb2Rlcy4KKy5CIC1lCitTZXQgdGhlIGVyYXNlIGNoYXJhY3RlciB0byBcZkljaFxmUi4KKy5UUAorLkIgLUkKK0RvIG5vdCBzZW5kIHRoZSB0ZXJtaW5hbCBvciB0YWIgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyB0byB0aGUgdGVybWluYWwuCisuVFAKKy5CIC1pCitTZXQgdGhlIGludGVycnVwdCBjaGFyYWN0ZXIgdG8gXGZJY2hcZlIuCisuVFAKKy5CIC1rCitTZXQgdGhlIGxpbmUga2lsbCBjaGFyYWN0ZXIgdG8gXGZJY2hcZlIuCisuVFAKKy5CIC1tCitTcGVjaWZ5IGEgbWFwcGluZyBmcm9tIGEgcG9ydCB0eXBlIHRvIGEgdGVybWluYWwuCitTZWUgdGhlIHNlY3Rpb24KKy5CIFRFUk1JTkFMIFRZUEUgTUFQUElORworZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuVFAKKy5CIC1RCitEbyBub3QgZGlzcGxheSBhbnkgdmFsdWVzIGZvciB0aGUgZXJhc2UsIGludGVycnVwdCBhbmQgbGluZSBraWxsIGNoYXJhY3RlcnMuCitOb3JtYWxseSBcZkJ0c2V0XGZSIGRpc3BsYXlzIHRoZSB2YWx1ZXMgZm9yIGNvbnRyb2wgY2hhcmFjdGVycyB3aGljaAorZGlmZmVyIGZyb20gdGhlIHN5c3RlbSdzIGRlZmF1bHQgdmFsdWVzLgorLlRQCisuQiAtcQorVGhlIHRlcm1pbmFsIHR5cGUgaXMgZGlzcGxheWVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGFuZCB0aGUgdGVybWluYWwgaXMKK25vdCBpbml0aWFsaXplZCBpbiBhbnkgd2F5LiAgVGhlIG9wdGlvbiBgLScgYnkgaXRzZWxmIGlzIGVxdWl2YWxlbnQgYnV0CithcmNoYWljLgorLlRQCisuQiAtcgorUHJpbnQgdGhlIHRlcm1pbmFsIHR5cGUgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dC4KKy5UUAorLkIgLXMKK1ByaW50IHRoZSBzZXF1ZW5jZSBvZiBzaGVsbCBjb21tYW5kcyB0byBpbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorXGZCVEVSTVxmUiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorU2VlIHRoZSBzZWN0aW9uCisuQiBTRVRUSU5HIFRIRSBFTlZJUk9OTUVOVAorZm9yIGRldGFpbHMuCisuVFAKKy5CIC1WCityZXBvcnRzIHRoZSB2ZXJzaW9uIG9mIG5jdXJzZXMgd2hpY2ggd2FzIHVzZWQgaW4gdGhpcyBwcm9ncmFtLCBhbmQgZXhpdHMuCisuVFAKKy5CIC13CitSZXNpemUgdGhlIHdpbmRvdyB0byBtYXRjaCB0aGUgc2l6ZSBkZWR1Y2VkIHZpYSBcZkJzZXR1cHRlcm1cZlAuCitOb3JtYWxseSB0aGlzIGhhcyBubyBlZmZlY3QsCit1bmxlc3MgXGZCc2V0dXB0ZXJtXGZQIGlzIG5vdCBhYmxlIHRvIGRldGVjdCB0aGUgd2luZG93IHNpemUuCisuUFAKK1RoZSBhcmd1bWVudHMgZm9yIHRoZSBcZkItZVxmUiwgXGZCLWlcZlIsIGFuZCBcZkIta1xmUgorb3B0aW9ucyBtYXkgZWl0aGVyIGJlIGVudGVyZWQgYXMgYWN0dWFsIGNoYXJhY3RlcnMgb3IgYnkgdXNpbmcgdGhlIGBoYXQnCitub3RhdGlvbiwgaS5lLiBjb250cm9sLWggbWF5IGJlIHNwZWNpZmllZCBhcyBgYF5IJycgb3IgYGBeaCcnLgorLgorLlNIIFNFVFRJTkcgVEhFIEVOVklST05NRU5UCitJdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gZW50ZXIgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIGluZm9ybWF0aW9uIGFib3V0Cit0aGUgdGVybWluYWwncyBjYXBhYmlsaXRpZXMgaW50byB0aGUgc2hlbGwncyBlbnZpcm9ubWVudC4KK1RoaXMgaXMgZG9uZSB1c2luZyB0aGUgXGZCLXNcZlIgb3B0aW9uLgorLlBQCitXaGVuIHRoZSBcZkItc1xmUiBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZHMgdG8gZW50ZXIgdGhlIGluZm9ybWF0aW9uCitpbnRvIHRoZSBzaGVsbCdzIGVudmlyb25tZW50IGFyZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBJZgordGhlIFxmQlNIRUxMXGZSIGVudmlyb25tZW50YWwgdmFyaWFibGUgZW5kcyBpbiBgYGNzaCcnLCB0aGUgY29tbWFuZHMKK2FyZSBmb3IgXGZCY3NoXGZSLCBvdGhlcndpc2UsIHRoZXkgYXJlIGZvciBcZkJzaFxmUi4KK05vdGUsIHRoZSBcZkJjc2hcZlIgY29tbWFuZHMgc2V0IGFuZCB1bnNldCB0aGUgc2hlbGwgdmFyaWFibGUKK1xmQm5vZ2xvYlxmUiwgbGVhdmluZyBpdCB1bnNldC4gIFRoZSBmb2xsb3dpbmcgbGluZSBpbiB0aGUgXGZCLmxvZ2luXGZSCitvciBcZkIucHJvZmlsZVxmUiBmaWxlcyB3aWxsIGluaXRpYWxpemUgdGhlIGVudmlyb25tZW50IGNvcnJlY3RseToKKy5zcAorICAgIGV2YWwgXGB0c2V0IC1zIG9wdGlvbnMgLi4uIFxgCisuCisuU0ggVEVSTUlOQUwgVFlQRSBNQVBQSU5HCitXaGVuIHRoZSB0ZXJtaW5hbCBpcyBub3QgaGFyZHdpcmVkIGludG8gdGhlIHN5c3RlbSAob3IgdGhlIGN1cnJlbnQKK3N5c3RlbSBpbmZvcm1hdGlvbiBpcyBpbmNvcnJlY3QpIHRoZSB0ZXJtaW5hbCB0eXBlIGRlcml2ZWQgZnJvbSB0aGUKK1xmSS9ldGMvdHR5c1xmUiBmaWxlIG9yIHRoZSBcZkJURVJNXGZSIGVudmlyb25tZW50YWwgdmFyaWFibGUgaXMgb2Z0ZW4KK3NvbWV0aGluZyBnZW5lcmljIGxpa2UgXGZCbmV0d29ya1xmUiwgXGZCZGlhbHVwXGZSLCBvciBcZkJ1bmtub3duXGZSLgorV2hlbiBcZkJ0c2V0XGZSIGlzIHVzZWQgaW4gYSBzdGFydHVwIHNjcmlwdCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8KK3Byb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR5cGUgb2YgdGVybWluYWwgdXNlZCBvbiBzdWNoIHBvcnRzLgorLlBQCitUaGUgcHVycG9zZSBvZiB0aGUgXGZCLW1cZlIgb3B0aW9uIGlzIHRvIG1hcAorZnJvbSBzb21lIHNldCBvZiBjb25kaXRpb25zIHRvIGEgdGVybWluYWwgdHlwZSwgdGhhdCBpcywgdG8KK3RlbGwgXGZCdHNldFxmUgorYGBJZiBJJ20gb24gdGhpcyBwb3J0IGF0IGEgcGFydGljdWxhciBzcGVlZCwgZ3Vlc3MgdGhhdCBJJ20gb24gdGhhdAora2luZCBvZiB0ZXJtaW5hbCcnLgorLlBQCitUaGUgYXJndW1lbnQgdG8gdGhlIFxmQi1tXGZSIG9wdGlvbiBjb25zaXN0cyBvZiBhbiBvcHRpb25hbCBwb3J0IHR5cGUsIGFuCitvcHRpb25hbCBvcGVyYXRvciwgYW4gb3B0aW9uYWwgYmF1ZCByYXRlIHNwZWNpZmljYXRpb24sIGFuIG9wdGlvbmFsCitjb2xvbiAoYGA6JycpIGNoYXJhY3RlciBhbmQgYSB0ZXJtaW5hbCB0eXBlLiAgVGhlIHBvcnQgdHlwZSBpcyBhCitzdHJpbmcgKGRlbGltaXRlZCBieSBlaXRoZXIgdGhlIG9wZXJhdG9yIG9yIHRoZSBjb2xvbiBjaGFyYWN0ZXIpLiAgVGhlCitvcGVyYXRvciBtYXkgYmUgYW55IGNvbWJpbmF0aW9uIG9mIGBgPicnLCBgYDwnJywgYGBAJycsIGFuZCBgYCEnJzsgYGA+JycKK21lYW5zIGdyZWF0ZXIgdGhhbiwgYGA8JycgbWVhbnMgbGVzcyB0aGFuLCBgYEAnJyBtZWFucyBlcXVhbCB0bworYW5kIGBgIScnIGludmVydHMgdGhlIHNlbnNlIG9mIHRoZSB0ZXN0LgorVGhlIGJhdWQgcmF0ZSBpcyBzcGVjaWZpZWQgYXMgYSBudW1iZXIgYW5kIGlzIGNvbXBhcmVkIHdpdGggdGhlIHNwZWVkCitvZiB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0ICh3aGljaCBzaG91bGQgYmUgdGhlIGNvbnRyb2wgdGVybWluYWwpLgorVGhlIHRlcm1pbmFsIHR5cGUgaXMgYSBzdHJpbmcuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCB0eXBlIGlzIG5vdCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIFxmQi1tXGZSCittYXBwaW5ncyBhcmUgYXBwbGllZCB0byB0aGUgdGVybWluYWwgdHlwZS4gIElmIHRoZSBwb3J0IHR5cGUgYW5kIGJhdWQKK3JhdGUgbWF0Y2ggdGhlIG1hcHBpbmcsIHRoZSB0ZXJtaW5hbCB0eXBlIHNwZWNpZmllZCBpbiB0aGUgbWFwcGluZworcmVwbGFjZXMgdGhlIGN1cnJlbnQgdHlwZS4gIElmIG1vcmUgdGhhbiBvbmUgbWFwcGluZyBpcyBzcGVjaWZpZWQsIHRoZQorZmlyc3QgYXBwbGljYWJsZSBtYXBwaW5nIGlzIHVzZWQuCisuUFAKK0ZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIG1hcHBpbmc6IFxmQmRpYWx1cD45NjAwOnZ0MTAwXGZSLgorVGhlIHBvcnQgdHlwZSBpcyBkaWFsdXAgLCB0aGUgb3BlcmF0b3IgaXMgPiwgdGhlIGJhdWQgcmF0ZQorc3BlY2lmaWNhdGlvbiBpcyA5NjAwLCBhbmQgdGhlIHRlcm1pbmFsIHR5cGUgaXMgdnQxMDAuICBUaGUgcmVzdWx0IG9mCit0aGlzIG1hcHBpbmcgaXMgdG8gc3BlY2lmeSB0aGF0IGlmIHRoZSB0ZXJtaW5hbCB0eXBlIGlzIFxmQmRpYWx1cFxmUiwKK2FuZCB0aGUgYmF1ZCByYXRlIGlzIGdyZWF0ZXIgdGhhbiA5NjAwIGJhdWQsIGEgdGVybWluYWwgdHlwZSBvZgorXGZCdnQxMDBcZlIgd2lsbCBiZSB1c2VkLgorLlBQCitJZiBubyBiYXVkIHJhdGUgaXMgc3BlY2lmaWVkLCB0aGUgdGVybWluYWwgdHlwZSB3aWxsIG1hdGNoIGFueSBiYXVkIHJhdGUuCitJZiBubyBwb3J0IHR5cGUgaXMgc3BlY2lmaWVkLCB0aGUgdGVybWluYWwgdHlwZSB3aWxsIG1hdGNoIGFueSBwb3J0IHR5cGUuCitGb3IgZXhhbXBsZSwgXGZCLW0gZGlhbHVwOnZ0MTAwIC1tIDo/eHRlcm1cZlIKK3dpbGwgY2F1c2UgYW55IGRpYWx1cCBwb3J0LCByZWdhcmRsZXNzIG9mIGJhdWQgcmF0ZSwgdG8gbWF0Y2ggdGhlIHRlcm1pbmFsCit0eXBlIHZ0MTAwLCBhbmQgYW55IG5vbi1kaWFsdXAgcG9ydCB0eXBlIHRvIG1hdGNoIHRoZSB0ZXJtaW5hbCB0eXBlID94dGVybS4KK05vdGUsIGJlY2F1c2Ugb2YgdGhlIGxlYWRpbmcgcXVlc3Rpb24gbWFyaywgdGhlIHVzZXIgd2lsbCBiZQorcXVlcmllZCBvbiBhIGRlZmF1bHQgcG9ydCBhcyB0byB3aGV0aGVyIHRoZXkgYXJlIGFjdHVhbGx5IHVzaW5nIGFuIHh0ZXJtCit0ZXJtaW5hbC4KKy5QUAorTm8gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBwZXJtaXR0ZWQgaW4gdGhlIFxmQi1tXGZSIG9wdGlvbiBhcmd1bWVudC4KK0Fsc28sIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggbWV0YS1jaGFyYWN0ZXJzLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCB0aGUKK2VudGlyZSBcZkItbVxmUiBvcHRpb24gYXJndW1lbnQgYmUgcGxhY2VkIHdpdGhpbiBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycywKK2FuZCB0aGF0IFxmQmNzaFxmUiB1c2VycyBpbnNlcnQgYSBiYWNrc2xhc2ggY2hhcmFjdGVyIChgYFxlJycpIGJlZm9yZQorYW55IGV4Y2xhbWF0aW9uIG1hcmtzIChgYCEnJykuCisuU0ggSElTVE9SWQorVGhlIFxmQnRzZXRcZlIgY29tbWFuZCBhcHBlYXJlZCBpbiBCU0QgMy4wLiAgVGhlIFxmQm5jdXJzZXNcZlIgaW1wbGVtZW50YXRpb24KK3dhcyBsaWdodGx5IGFkYXB0ZWQgZnJvbSB0aGUgNC40QlNEIHNvdXJjZXMgZm9yIGEgdGVybWluZm8gZW52aXJvbm1lbnQgYnkgRXJpYworUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPi4KKy5TSCBDT01QQVRJQklMSVRZCitUaGUgXGZCdHNldFxmUiB1dGlsaXR5IGhhcyBiZWVuIHByb3ZpZGVkIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IHdpdGggQlNECitlbnZpcm9ubWVudHMgKHVuZGVyIG1vc3QgbW9kZXJuIFVOSVhlcywgXGZCL2V0Yy9pbml0dGFiXGZSIGFuZCBcZklnZXR0eVxmUigxKQorY2FuIHNldCBcZkJURVJNXGZSIGFwcHJvcHJpYXRlbHkgZm9yIGVhY2ggZGlhbC11cCBsaW5lOyB0aGlzIG9idmlhdGVzIHdoYXQgd2FzCitcZkJ0c2V0XGZSJ3MgbW9zdCBpbXBvcnRhbnQgdXNlKS4gIFRoaXMgaW1wbGVtZW50YXRpb24gYmVoYXZlcyBsaWtlIDQuNEJTRAordHNldCwgd2l0aCBhIGZldyBleGNlcHRpb25zIHNwZWNpZmllZCBoZXJlLgorLlBQCitUaGUgXGZCLVNcZlIgb3B0aW9uIG9mIEJTRCB0c2V0IG5vIGxvbmdlciB3b3JrczsgaXQgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gc3RkZXJyCithbmQgZGllcy4gIFRoZSBcZkItc1xmUiBvcHRpb24gb25seSBzZXRzIFxmQlRFUk1cZlIsIG5vdCBcZkJURVJNQ0FQXGZQLiAgQm90aCB0aGVzZQorY2hhbmdlcyBhcmUgYmVjYXVzZSB0aGUgXGZCVEVSTUNBUFxmUiB2YXJpYWJsZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIHVuZGVyCit0ZXJtaW5mby1iYXNlZCBcZkJuY3Vyc2VzXGZSLCB3aGljaCBtYWtlcyBcZkJ0c2V0IC1TXGZSIHVzZWxlc3MgKHdlIG1hZGUgaXQgZGllCitub2lzaWx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGluZHVjZSBsb3NzYWdlKS4KKy5QUAorVGhlcmUgd2FzIGFuIHVuZG9jdW1lbnRlZCA0LjRCU0QgZmVhdHVyZSB0aGF0IGludm9raW5nIHRzZXQgdmlhIGEgbGluayBuYW1lZAorYFRTRVRgIChvciB2aWEgYW55IG90aGVyIG5hbWUgYmVnaW5uaW5nIHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIpIHNldCB0aGUKK3Rlcm1pbmFsIHRvIHVzZSB1cHBlci1jYXNlIG9ubHkuICBUaGlzIGZlYXR1cmUgaGFzIGJlZW4gb21pdHRlZC4KKy5QUAorVGhlIFxmQi1BXGZSLCBcZkItRVxmUiwgXGZCLWhcZlIsIFxmQi11XGZSIGFuZCBcZkItdlxmUgorb3B0aW9ucyB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGUgXGZCdHNldFxmUgordXRpbGl0eSBpbiA0LjRCU0QuCitOb25lIG9mIHRoZW0gd2VyZSBkb2N1bWVudGVkIGluIDQuM0JTRCBhbmQgYWxsIGFyZQorb2YgbGltaXRlZCB1dGlsaXR5IGF0IGJlc3QuCitUaGUgXGZCLWFcZlIsIFxmQi1kXGZSLCBhbmQgXGZCLXBcZlIgb3B0aW9ucyBhcmUgc2ltaWxhcmx5Citub3QgZG9jdW1lbnRlZCBvciB1c2VmdWwsIGJ1dCB3ZXJlIHJldGFpbmVkIGFzIHRoZXkgYXBwZWFyIHRvIGJlIGluCit3aWRlc3ByZWFkIHVzZS4gIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgYW55IHVzYWdlIG9mIHRoZXNlCit0aHJlZSBvcHRpb25zIGJlIGNoYW5nZWQgdG8gdXNlIHRoZSBcZkItbVxmUiBvcHRpb24gaW5zdGVhZC4gIFRoZQorLW4gb3B0aW9uIHJlbWFpbnMsIGJ1dCBoYXMgbm8gZWZmZWN0LiAgVGhlIFxmQi1hZG5wXGZSIG9wdGlvbnMgYXJlIHRoZXJlZm9yZQorb21pdHRlZCBmcm9tIHRoZSB1c2FnZSBzdW1tYXJ5IGFib3ZlLgorLlBQCitJdCBpcyBzdGlsbCBwZXJtaXNzaWJsZSB0byBzcGVjaWZ5IHRoZSBcZkItZVxmUiwgXGZCLWlcZlIsIGFuZCBcZkIta1xmUiBvcHRpb25zIHdpdGhvdXQKK2FyZ3VtZW50cywgYWx0aG91Z2ggaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBzdWNoIHVzYWdlIGJlIGZpeGVkIHRvCitleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGNoYXJhY3Rlci4KKy5QUAorQXMgb2YgNC40QlNELCBleGVjdXRpbmcgXGZCdHNldFxmUiBhcyBcZkJyZXNldFxmUiBubyBsb25nZXIgaW1wbGllcyB0aGUgXGZCLVFcZlIKK29wdGlvbi4gIEFsc28sIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSAtIG9wdGlvbiBhbmQgdGhlIFxmSXRlcm1pbmFsXGZSCithcmd1bWVudCBpbiBzb21lIGhpc3RvcmljIGltcGxlbWVudGF0aW9ucyBvZiBcZkJ0c2V0XGZSIGhhcyBiZWVuIHJlbW92ZWQuCisuU0ggRU5WSVJPTk1FTlQKK1RoZSBcZkJ0c2V0XGZSIGNvbW1hbmQgdXNlcyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisuVFAgNQorU0hFTEwKK3RlbGxzIFxmQnRzZXRcZlAgd2hldGhlciB0byBpbml0aWFsaXplIFxmQlRFUk1cZlAgdXNpbmcgXGZCc2hcZlAgb3IKK1xmQmNzaFxmUCBzeW50YXguCisuVFAgNQorVEVSTQorRGVub3RlcyB5b3VyIHRlcm1pbmFsIHR5cGUuCitFYWNoIHRlcm1pbmFsIHR5cGUgaXMgZGlzdGluY3QsIHRob3VnaCBtYW55IGFyZSBzaW1pbGFyLgorLlRQIDUKK1RFUk1DQVAKK21heSBkZW5vdGUgdGhlIGxvY2F0aW9uIG9mIGEgdGVybWNhcCBkYXRhYmFzZS4KK0lmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRobmFtZSwgZS5nLiwgYmVnaW5zIHdpdGggYSBgLycsCitcZkJ0c2V0XGZQIHJlbW92ZXMgdGhlIHZhcmlhYmxlIGZyb20gdGhlIGVudmlyb25tZW50IGJlZm9yZSBsb29raW5nCitmb3IgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorLlNIIEZJTEVTCisuVFAgNQorL2V0Yy90dHlzCitzeXN0ZW0gcG9ydCBuYW1lIHRvIHRlcm1pbmFsIHR5cGUgbWFwcGluZyBkYXRhYmFzZSAoQlNEIHZlcnNpb25zIG9ubHkpLgorLlRQCitAVEVSTUlORk9ACit0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGFiYXNlCisuU0ggU0VFIEFMU08KK2NzaCgxKSwKK3NoKDEpLAorc3R0eSgxKSwKK2N1cnNfdGVybWluZm8oM1gpLAordHR5KDQpLAordGVybWluZm8oNSksCit0dHlzKDUpLAorZW52aXJvbig3KQorLlBQCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21hbi93cmVzaXplLjN4IGIvbWFuL3dyZXNpemUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwNWQzZQotLS0gL2Rldi9udWxsCisrKyBiL21hbi93cmVzaXplLjN4CkBAIC0wLDAgKzEsNjQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2CisuXCIKKy5cIiAkSWQ6IHdyZXNpemUuM3gsdiAxLjkgMjAwNi8wMi8yNSAyMTo0NzowNiB0b20gRXhwICQKKy5USCB3cmVzaXplIDNYICIiCisuU0ggTkFNRQorXGZCd3Jlc2l6ZVxmUiAtIHJlc2l6ZSBhIGN1cnNlcyB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgd3Jlc2l6ZShXSU5ET1cgKndpbiwgaW50IGxpbmVzLCBpbnQgY29sdW1ucyk7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJ3cmVzaXplXGZSIGZ1bmN0aW9uIHJlYWxsb2NhdGVzIHN0b3JhZ2UgZm9yIGFuIFxmQm5jdXJzZXNcZlIKK3dpbmRvdyB0byBhZGp1c3QgaXRzIGRpbWVuc2lvbnMgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZXMuCitJZiBlaXRoZXIgZGltZW5zaW9uIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlcywgdGhlCit3aW5kb3cncyBkYXRhIGlzIGZpbGxlZCB3aXRoIGJsYW5rcyB0aGF0IGhhdmUgdGhlIGN1cnJlbnQgYmFja2dyb3VuZCByZW5kaXRpb24KKyhhcyBzZXQgYnkgXGZCd2JrZ25kc2V0XGZSKSBtZXJnZWQgaW50byB0aGVtLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIgb24gc3VjY2Vzcy4KK0l0IHdpbGwgZmFpbCBpZiBlaXRoZXIgb2YgdGhlIGRpbWVuc2lvbnMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sCitvciBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgKHJlKWFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgd2luZG93LgorLlNIIE5PVEVTCitUaGUgb25seSByZXN0cmljdGlvbiBwbGFjZWQgb24gdGhlIGRpbWVuc2lvbnMgaXMgdGhhdCB0aGV5IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorVGhlIGRpbWVuc2lvbnMgYXJlIG5vdCBjb21wYXJlZCB0byBcZkJjdXJzZXNcZlIgc2NyZWVuIGRpbWVuc2lvbnMgdG8KK3NpbXBsaWZ5IHRoZSBsb2dpYyBvZiBcZkJyZXNpemV0ZXJtXGZSLgorVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSB3aW5kb3cncyBkaW1lbnNpb25zIGZpdCB3aXRoaW4gdGhlCithY3R1YWwgc2NyZWVuIGRpbWVuc2lvbnMuCisuU0ggU0VFIEFMU08KK1xmQnJlc2l6ZXRlcm1cZlIoM1gpLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleSAoZnJvbSBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uIHdyaXR0ZW4gaW4gMTk4OCBmb3IgQlNEIGN1cnNlcykuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL21lbnUvTWFrZWZpbGUuaW4gYi9tZW51L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzNkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTY3IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjQ4IDIwMDcvMDQvMjggMTQ6NTY6MTEgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LW9uCisjCisjIE1ha2VmaWxlIGZvciBtZW51IHNvdXJjZSBjb2RlLgorIworIyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmc6CisjCWxpYnJhcmllcyAobm9ybWFsL2RlYnVnL3Byb2ZpbGUvc2hhcmVkKQorIworIyBUaGUgdmFyaWFibGUgJ3NyY2RpcicgcmVmZXJzIHRvIHRoZSBzb3VyY2UtZGlzdHJpYnV0aW9uLCBhbmQgY2FuIGJlIHNldCB3aXRoCisjIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ5ICItLXNyY2Rpcj1ESVIiLgorIworIyBUaGUgcnVsZXMgYXJlIG9yZ2FuaXplZCB0byBwcm9kdWNlIHRoZSBsaWJyYXJpZXMgZm9yIHRoZSBjb25maWd1cmVkIG1vZGVscywKKworIyB0dXJuIG9mZiBfYWxsXyBzdWZmaXggcnVsZXM7IHdlJ2xsIGdlbmVyYXRlIG91ciBvd24KKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorVEhJUwkJPSBNYWtlZmlsZQorCit4CQk9IEBFWEVFWFRACitvCQk9IC5AT0JKRVhUQAorCitNT0RFTAkJPSBAREZUX0xXUl9NT0RFTEAKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitiaW5kaXIJCT0gQGJpbmRpckAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorCitMSUJUT09MCQk9IEBMSUJUT09MQAorTElCVE9PTF9DTEVBTgk9IEBMSUJfQ0xFQU5ACitMSUJUT09MX0NPTVBJTEUJPSBATElCX0NPTVBJTEVACitMSUJUT09MX0xJTksJPSBATElCX0xJTktACitMSUJUT09MX0lOU1RBTEwJPSBATElCX0lOU1RBTExACitMSUJUT09MX1VOSU5TVEFMTCA9IEBMSUJfVU5JTlNUQUxMQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9MSUIJPSBASU5TVEFMTEAgQElOU1RBTExfTElCQAorSU5TVEFMTF9QUk9HCT0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0FSCQk9IEBBUkAKK0FSX09QVFMJCT0gQEFSX09QVFNACitBV0sJCT0gQEFXS0AKK0xECQk9IEBMREAKK0xOX1MJCT0gQExOX1NACisKK0NDCQk9IEBDQ0AKK0NQUAkJPSBAQ1BQQAorQ0ZMQUdTCQk9IEBDRkxBR1NACisKK0NQUEZMQUdTCT0gLUlAdG9wX3NyY2RpckAvbmN1cnNlcyAtREhBVkVfQ09ORklHX0ggQENQUEZMQUdTQAorCitDQ0ZMQUdTCQk9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorCitDRkxBR1NfTElCVE9PTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworTElOSwkJPSAkKExJQlRPT0xfTElOSykKK0xERkxBR1MJCT0gQExERkxBR1NAIEBMRF9NT0RFTEAgQExJQlNACisKK1NITElCX0RJUlMJPSAtTC4uL2xpYgorU0hMSUJfTElTVAk9ICQoU0hMSUJfRElSUykgLWxuY3Vyc2VzQExJQl9TVUZGSVhAIEBTSExJQl9MSVNUQAorCitNS19TSEFSRURfTElCCT0gQE1LX1NIQVJFRF9MSUJACisKK05DVVJTRVNfTUFKT1IJPSBATkNVUlNFU19NQUpPUkAKK05DVVJTRVNfTUlOT1IJPSBATkNVUlNFU19NSU5PUkAKK1JFTF9WRVJTSU9OCT0gQGNmX2N2X3JlbF92ZXJzaW9uQAorQUJJX1ZFUlNJT04JPSBAY2ZfY3ZfYWJpX3ZlcnNpb25ACisKK1JBTkxJQgkJPSBATElCX1BSRVBACisKK0xJQlJBUklFUwk9IEBMSUJTX1RPX01BS0VACisKK0xJTlQJCT0gQExJTlRACitMSU5UX09QVFMJPSBATElOVF9PUFRTQAorTElOVF9MSUJTCT0gLWxtZW51IC1sbmN1cnNlcyBATElCU0AKKworQVVUT19TUkMJPSBcCisJCS4uL2luY2x1ZGUvbWVudS5oIFwKKwkJLi4vaW5jbHVkZS9ldGkuaCBcCisJCS4uL2luY2x1ZGUvbWZfY29tbW9uLmgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FsbCBcCitsaWJzIFwKK2luc3RhbGwgOjoJJChBVVRPX1NSQykgJChMSUJSQVJJRVMpCisKK3NvdXJjZXMgOgkkKEFVVE9fU1JDKQorCiskKERFU1RESVIpJChiaW5kaXIpIFwKKyQoREVTVERJUikkKGxpYmRpcikgOgorCXNoICQoc3JjZGlyKS8uLi9ta2RpcnMuc2ggJEAKKworIyBtYWtlIGNvcGllcyB0byBzaW1wbGlmeSBpbmNsdWRlLXBhdGhzIHdoaWxlIHN0aWxsIGtlZXBpbmcgbWVudSdzIGluY2x1ZGUKKyMgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KKy4uL2luY2x1ZGUvbWVudS5oIDogJChzcmNkaXIpL21lbnUuaAorCS1ybSAtZiAkQAorCWNwICQoc3JjZGlyKS9tZW51LmggJEAKKy4uL2luY2x1ZGUvZXRpLmggOiAkKHNyY2RpcikvZXRpLmgKKwktcm0gLWYgJEAKKwljcCAkKHNyY2RpcikvZXRpLmggJEAKKy4uL2luY2x1ZGUvbWZfY29tbW9uLmggOiAkKHNyY2RpcikvbWZfY29tbW9uLmgKKwktcm0gLWYgJEAKKwljcCAkKHNyY2RpcikvbWZfY29tbW9uLmggJEAKKworTUVOVV9QUklWX0ggPSBcCisJJChzcmNkaXIpL21lbnUucHJpdi5oIFwKKwkkKEFVVE9fU1JDKSBcCisJLi4vaW5jbHVkZS9jdXJzZXMuaAorCit0YWdzOgorCWN0YWdzICouW2NoXQorCitATUFLRV9VUFBFUl9UQUdTQFRBR1M6CitATUFLRV9VUFBFUl9UQUdTQAlldGFncyAqLltjaF0KKworbW9zdGx5Y2xlYW4gOjoKKwktcm0gLWYgY29yZSB0YWdzIFRBR1MgKn4gKi5iYWsgKi5pICoubG4gKi5hdGFjIHRyYWNlCisKK2NsZWFuIDo6IG1vc3RseWNsZWFuCisJLXJtIC1mICQoQVVUT19TUkMpCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL21lbnUvUkVBRC5NRSBiL21lbnUvUkVBRC5NRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGZmNWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9SRUFELk1FCkBAIC0wLDAgKzEsNDIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRC5NRSx2IDEuOSAyMDA2LzA0LzIyIDIzOjEzOjA1IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgY2xvbmUgb2YgdGhlIG1lbnUgbGlicmFyeSB0aGF0IGlzIGF2YWlsYWJsZSB3aXRoIHR5cGljYWwKK1N5c3RlbSBWIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgKEVUSSkuCisKK0l0IGlzIG1vZGVsbGVkIGFmdGVyIHRoZSBkb2N1bWVudGF0aW9uIHRoYXQgY29tZXMgZm9yIHRoaXMgbGlicmFyeSB3aXRoCithIDM4NiBiYXNlZCBTVlI0IGltcGxlbWVudGF0aW9uIChFU0lYKS4KKworVGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHdhcyBhbmQgaXMgYW4gRUxGIGJhc2VkIExpbnV4IHN5c3RlbS4KKworRm9yIHRoaW5ncyB0aGF0IHN0aWxsIG5lZWQgZG9pbmcsIHNlZSB0aGUgVE8tRE8gZmlsZSBpbiB0aGUgdG9wLWxldmVsIAorZGlyZWN0b3J5LgorCitKdWVyZ2VuIFBmZWlmZXIKZGlmZiAtLWdpdCBhL21lbnUvZXRpLmggYi9tZW51L2V0aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYTYxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L2V0aS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogZXRpLmgsdiAxLjggMjAwMy8xMC8yNSAxNToyNDoyOSB0b20gRXhwICQgKi8KKworI2lmbmRlZiBOQ1VSU0VTX0VUSV9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19FVElfSF9pbmNsIDEKKworI2RlZmluZQlFX09LCQkJKDApCisjZGVmaW5lCUVfU1lTVEVNX0VSUk9SCSAJKC0xKQorI2RlZmluZQlFX0JBRF9BUkdVTUVOVAkgCSgtMikKKyNkZWZpbmUJRV9QT1NURUQJIAkoLTMpCisjZGVmaW5lCUVfQ09OTkVDVEVECSAJKC00KQorI2RlZmluZQlFX0JBRF9TVEFURQkgCSgtNSkKKyNkZWZpbmUJRV9OT19ST09NCSAJKC02KQorI2RlZmluZQlFX05PVF9QT1NURUQJCSgtNykKKyNkZWZpbmUJRV9VTktOT1dOX0NPTU1BTkQJKC04KQorI2RlZmluZQlFX05PX01BVENICQkoLTkpCisjZGVmaW5lCUVfTk9UX1NFTEVDVEFCTEUJKC0xMCkKKyNkZWZpbmUJRV9OT1RfQ09OTkVDVEVECSAgICAgICAgKC0xMSkKKyNkZWZpbmUJRV9SRVFVRVNUX0RFTklFRAkoLTEyKQorI2RlZmluZQlFX0lOVkFMSURfRklFTEQJICAgICAgICAoLTEzKQorI2RlZmluZQlFX0NVUlJFTlQJCSgtMTQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWVudS9oZWFkZXJzIGIvbWVudS9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YzIwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L2hlYWRlcnMKQEAgLTAsMCArMSwzMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTYKKyMKKyQoc3JjZGlyKS9ldGkuaAorJChzcmNkaXIpL21lbnUuaAorIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9tZW51L2xsaWItbG1lbnUgYi9tZW51L2xsaWItbG1lbnUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxN2NjMwotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbGxpYi1sbWVudQpAQCAtMCwwICsxLDU0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgIDE5OTYtMjAwMiwyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vbV9hdHRyaWJzLmMgKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCisjdW5kZWYgc2V0X21lbnVfZm9yZQoraW50CXNldF9tZW51X2ZvcmUoCisJCU1FTlUJKm1lbnUsIAorCQljaHR5cGUJYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9mb3JlCitjaHR5cGUJbWVudV9mb3JlKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9iYWNrCitpbnQJc2V0X21lbnVfYmFjaygKKwkJTUVOVQkqbWVudSwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2JhY2sKK2NodHlwZQltZW51X2JhY2soCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X2dyZXkKK2ludAlzZXRfbWVudV9ncmV5KAorCQlNRU5VCSptZW51LCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfZ3JleQorY2h0eXBlCW1lbnVfZ3JleSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL21fY3Vyc29yLmMgKi8KKworI3VuZGVmIF9uY19tZW51X2N1cnNvcl9wb3MKK2ludAlfbmNfbWVudV9jdXJzb3JfcG9zKAorCQljb25zdCBNRU5VICptZW51LCAKKwkJY29uc3QgSVRFTSAqaXRlbSwgCisJCWludAkqcFksIAorCQlpbnQJKnBYKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwb3NfbWVudV9jdXJzb3IKK2ludAlwb3NfbWVudV9jdXJzb3IoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX2RyaXZlci5jICovCisKKyN1bmRlZiBfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lCitpbnQJX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZSgKKwkJTUVOVQkqbWVudSwgCisJCWludAljaCwgCisJCUlURU0JKippdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2RyaXZlcgoraW50CW1lbnVfZHJpdmVyKAorCQlNRU5VCSptZW51LCAKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX2Zvcm1hdC5jICovCisKKyN1bmRlZiBzZXRfbWVudV9mb3JtYXQKK2ludAlzZXRfbWVudV9mb3JtYXQoCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJcm93cywgCisJCWludAljb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2Zvcm1hdAordm9pZAltZW51X2Zvcm1hdCgKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWludAkqcm93cywgCisJCWludAkqY29scykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9tX2dsb2JhbC5jICovCisKKyN1bmRlZiBfbmNfRGVmYXVsdF9NZW51CitNRU5VCV9uY19EZWZhdWx0X01lbnU7CisjdW5kZWYgX25jX0RlZmF1bHRfSXRlbQorSVRFTQlfbmNfRGVmYXVsdF9JdGVtOworCisjdW5kZWYgX25jX0Nvbm5lY3RfSXRlbXMKK05DVVJTRVNfQk9PTCBfbmNfQ29ubmVjdF9JdGVtcygKKwkJTUVOVQkqbWVudSwgCisJCUlURU0JKippdGVtcykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX0Rpc2Nvbm5lY3RfSXRlbXMKK3ZvaWQJX25jX0Rpc2Nvbm5lY3RfSXRlbXMoCisJCU1FTlUJKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgKK2ludAlfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoCisJCWNvbnN0IFRFWFQgKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoCit2b2lkCV9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoKAorCQlNRU5VCSptZW51KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0xpbmtfSXRlbXMKK3ZvaWQJX25jX0xpbmtfSXRlbXMoCisJCU1FTlUJKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfU2hvd19NZW51Cit2b2lkCV9uY19TaG93X01lbnUoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0KK3ZvaWQJX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtKAorCQlNRU5VCSptZW51LCAKKwkJaW50CW5ld190b3Byb3csIAorCQlJVEVNCSpuZXdfY3VycmVudF9pdGVtKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL21faG9vay5jICovCisKKyN1bmRlZiBzZXRfbWVudV9pbml0CitpbnQJc2V0X21lbnVfaW5pdCgKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2luaXQKK01lbnVfSG9vayBtZW51X2luaXQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X3Rlcm0KK2ludAlzZXRfbWVudV90ZXJtKAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfdGVybQorTWVudV9Ib29rIG1lbnVfdGVybSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisjdW5kZWYgc2V0X2l0ZW1faW5pdAoraW50CXNldF9pdGVtX2luaXQoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV9pbml0CitNZW51X0hvb2sgaXRlbV9pbml0KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfaXRlbV90ZXJtCitpbnQJc2V0X2l0ZW1fdGVybSgKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX3Rlcm0KK01lbnVfSG9vayBpdGVtX3Rlcm0oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworLyogLi9tX2l0ZW1fY3VyLmMgKi8KKworI3VuZGVmIHNldF9jdXJyZW50X2l0ZW0KK2ludAlzZXRfY3VycmVudF9pdGVtKAorCQlNRU5VCSptZW51LCAKKwkJSVRFTQkqaXRlbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY3VycmVudF9pdGVtCitJVEVNCSpjdXJyZW50X2l0ZW0oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooSVRFTSAqKikwKTsgfQorCisjdW5kZWYgaXRlbV9pbmRleAoraW50CWl0ZW1faW5kZXgoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX2l0ZW1fbmFtLmMgKi8KKworI3VuZGVmIGl0ZW1fbmFtZQorY29uc3QgY2hhciAqaXRlbV9uYW1lKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIGl0ZW1fZGVzY3JpcHRpb24KK2NvbnN0IGNoYXIgKml0ZW1fZGVzY3JpcHRpb24oCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisvKiAuL21faXRlbV9uZXcuYyAqLworCisjdW5kZWYgbmV3X2l0ZW0KK0lURU0JKm5ld19pdGVtKAorCQljb25zdCBjaGFyICpuYW1lLCAKKwkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCisJCXsgcmV0dXJuKCooSVRFTSAqKikwKTsgfQorCisjdW5kZWYgZnJlZV9pdGVtCitpbnQJZnJlZV9pdGVtKAorCQlJVEVNCSppdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9tYXJrCitpbnQJc2V0X21lbnVfbWFyaygKKwkJTUVOVQkqbWVudSwgCisJCWNvbnN0IGNoYXIgKm1hcmspCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfbWFyaworY29uc3QgY2hhciAqbWVudV9tYXJrKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworLyogLi9tX2l0ZW1fb3B0LmMgKi8KKworI3VuZGVmIHNldF9pdGVtX29wdHMKK2ludAlzZXRfaXRlbV9vcHRzKAorCQlJVEVNCSppdGVtLCAKKwkJSXRlbV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fb3B0c19vZmYKK2ludAlpdGVtX29wdHNfb2ZmKAorCQlJVEVNCSppdGVtLCAKKwkJSXRlbV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fb3B0c19vbgoraW50CWl0ZW1fb3B0c19vbigKKwkJSVRFTQkqaXRlbSwgCisJCUl0ZW1fT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX29wdHMKK0l0ZW1fT3B0aW9ucyBpdGVtX29wdHMoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooSXRlbV9PcHRpb25zICopMCk7IH0KKworLyogLi9tX2l0ZW1fdG9wLmMgKi8KKworI3VuZGVmIHNldF90b3Bfcm93CitpbnQJc2V0X3RvcF9yb3coCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJcm93KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0b3Bfcm93CitpbnQJdG9wX3JvdygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21faXRlbV91c2UuYyAqLworCisjdW5kZWYgc2V0X2l0ZW1fdXNlcnB0cgoraW50CXNldF9pdGVtX3VzZXJwdHIoCisJCUlURU0JKml0ZW0sIAorCQl2b2lkCSp1c2VycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX3VzZXJwdHIKK3ZvaWQJKml0ZW1fdXNlcnB0cigKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vbV9pdGVtX3ZhbC5jICovCisKKyN1bmRlZiBzZXRfaXRlbV92YWx1ZQoraW50CXNldF9pdGVtX3ZhbHVlKAorCQlJVEVNCSppdGVtLCAKKwkJTkNVUlNFU19CT09MIHZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX3ZhbHVlCitOQ1VSU0VTX0JPT0wgaXRlbV92YWx1ZSgKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL21faXRlbV92aXMuYyAqLworCisjdW5kZWYgaXRlbV92aXNpYmxlCitOQ1VSU0VTX0JPT0wgaXRlbV92aXNpYmxlKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vbV9pdGVtcy5jICovCisKKyN1bmRlZiBzZXRfbWVudV9pdGVtcworaW50CXNldF9tZW51X2l0ZW1zKAorCQlNRU5VCSptZW51LCAKKwkJSVRFTQkqKml0ZW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2l0ZW1zCitJVEVNCSoqbWVudV9pdGVtcygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihJVEVNICoqKikwKTsgfQorCisjdW5kZWYgaXRlbV9jb3VudAoraW50CWl0ZW1fY291bnQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX25ldy5jICovCisKKyN1bmRlZiBuZXdfbWVudQorTUVOVQkqbmV3X21lbnUoCisJCUlURU0JKippdGVtcykKKwkJeyByZXR1cm4oKihNRU5VICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX21lbnUKK2ludAlmcmVlX21lbnUoCisJCU1FTlUJKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX29wdHMuYyAqLworCisjdW5kZWYgc2V0X21lbnVfb3B0cworaW50CXNldF9tZW51X29wdHMoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9vcHRzX29mZgoraW50CW1lbnVfb3B0c19vZmYoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9vcHRzX29uCitpbnQJbWVudV9vcHRzX29uKAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfb3B0cworTWVudV9PcHRpb25zIG1lbnVfb3B0cygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X09wdGlvbnMgKikwKTsgfQorCisvKiAuL21fcGFkLmMgKi8KKworI3VuZGVmIHNldF9tZW51X3BhZAoraW50CXNldF9tZW51X3BhZCgKKwkJTUVOVQkqbWVudSwgCisJCWludAlwYWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfcGFkCitpbnQJbWVudV9wYWQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3BhdHRlcm4uYyAqLworCisjdW5kZWYgbWVudV9wYXR0ZXJuCitjaGFyCSptZW51X3BhdHRlcm4oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgc2V0X21lbnVfcGF0dGVybgoraW50CXNldF9tZW51X3BhdHRlcm4oCisJCU1FTlUJKm1lbnUsIAorCQljb25zdCBjaGFyICpwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9wb3N0LmMgKi8KKworI3VuZGVmIF9uY19Qb3N0X0l0ZW0KK3ZvaWQJX25jX1Bvc3RfSXRlbSgKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfRHJhd19NZW51Cit2b2lkCV9uY19EcmF3X01lbnUoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBwb3N0X21lbnUKK2ludAlwb3N0X21lbnUoCisJCU1FTlUJKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVucG9zdF9tZW51CitpbnQJdW5wb3N0X21lbnUoCisJCU1FTlUJKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3JlcV9uYW1lLmMgKi8KKworI3VuZGVmIG1lbnVfcmVxdWVzdF9uYW1lCitjb25zdCBjaGFyICptZW51X3JlcXVlc3RfbmFtZSgKKwkJaW50CXJlcXVlc3QpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgbWVudV9yZXF1ZXN0X2J5X25hbWUKK2ludAltZW51X3JlcXVlc3RfYnlfbmFtZSgKKwkJY29uc3QgY2hhciAqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9zY2FsZS5jICovCisKKyN1bmRlZiBzY2FsZV9tZW51CitpbnQJc2NhbGVfbWVudSgKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWludAkqcm93cywgCisJCWludAkqY29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fc3BhY2luZy5jICovCisKKyN1bmRlZiBzZXRfbWVudV9zcGFjaW5nCitpbnQJc2V0X21lbnVfc3BhY2luZygKKwkJTUVOVQkqbWVudSwgCisJCWludAlzX2Rlc2MsIAorCQlpbnQJc19yb3csIAorCQlpbnQJc19jb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfc3BhY2luZworaW50CW1lbnVfc3BhY2luZygKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWludAkqc19kZXNjLCAKKwkJaW50CSpzX3JvdywgCisJCWludAkqc19jb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3N1Yi5jICovCisKKyN1bmRlZiBzZXRfbWVudV9zdWIKK2ludAlzZXRfbWVudV9zdWIoCisJCU1FTlUJKm1lbnUsIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9zdWIKK1dJTkRPVwkqbWVudV9zdWIoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vbV90cmFjZS5jICovCisKKyN1bmRlZiBfbmNfcmV0cmFjZV9pdGVtCitJVEVNCSpfbmNfcmV0cmFjZV9pdGVtKAorCQlJVEVNCSpjb2RlKQorCQl7IHJldHVybigqKElURU0gKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2l0ZW1fcHRyCitJVEVNCSoqX25jX3JldHJhY2VfaXRlbV9wdHIoCisJCUlURU0JKipjb2RlKQorCQl7IHJldHVybigqKElURU0gKioqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9pdGVtX29wdHMKK0l0ZW1fT3B0aW9ucyBfbmNfcmV0cmFjZV9pdGVtX29wdHMoCisJCUl0ZW1fT3B0aW9ucyBjb2RlKQorCQl7IHJldHVybigqKEl0ZW1fT3B0aW9ucyAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9tZW51CitNRU5VCSpfbmNfcmV0cmFjZV9tZW51KAorCQlNRU5VCSpjb2RlKQorCQl7IHJldHVybigqKE1FTlUgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX21lbnVfaG9vaworTWVudV9Ib29rIF9uY19yZXRyYWNlX21lbnVfaG9vaygKKwkJTWVudV9Ib29rIGNvZGUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX21lbnVfb3B0cworTWVudV9PcHRpb25zIF9uY19yZXRyYWNlX21lbnVfb3B0cygKKwkJTWVudV9PcHRpb25zIGNvZGUpCisJCXsgcmV0dXJuKCooTWVudV9PcHRpb25zICopMCk7IH0KKworLyogLi9tX3VzZXJwdHIuYyAqLworCisjdW5kZWYgc2V0X21lbnVfdXNlcnB0cgoraW50CXNldF9tZW51X3VzZXJwdHIoCisJCU1FTlUJKm1lbnUsIAorCQl2b2lkCSp1c2VycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X3VzZXJwdHIKK3ZvaWQJKm1lbnVfdXNlcnB0cigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vbV93aW4uYyAqLworCisjdW5kZWYgc2V0X21lbnVfd2luCitpbnQJc2V0X21lbnVfd2luKAorCQlNRU5VCSptZW51LCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfd2luCitXSU5ET1cJKm1lbnVfd2luKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQpkaWZmIC0tZ2l0IGEvbWVudS9sbGliLWxtZW51dyBiL21lbnUvbGxpYi1sbWVudXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxZmI5NAotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbGxpYi1sbWVudXcKQEAgLTAsMCArMSw1NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAyMDAyLDIwMDUgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMSU5UTElCUkFSWSAqLworCisvKiAuL21fYXR0cmlicy5jICovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworI3VuZGVmIHNldF9tZW51X2ZvcmUKK2ludAlzZXRfbWVudV9mb3JlKAorCQlNRU5VCSptZW51LCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfZm9yZQorY2h0eXBlCW1lbnVfZm9yZSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgc2V0X21lbnVfYmFjaworaW50CXNldF9tZW51X2JhY2soCisJCU1FTlUJKm1lbnUsIAorCQljaHR5cGUJYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9iYWNrCitjaHR5cGUJbWVudV9iYWNrKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9ncmV5CitpbnQJc2V0X21lbnVfZ3JleSgKKwkJTUVOVQkqbWVudSwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2dyZXkKK2NodHlwZQltZW51X2dyZXkoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi9tX2N1cnNvci5jICovCisKKyN1bmRlZiBfbmNfbWVudV9jdXJzb3JfcG9zCitpbnQJX25jX21lbnVfY3Vyc29yX3BvcygKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWNvbnN0IElURU0gKml0ZW0sIAorCQlpbnQJKnBZLCAKKwkJaW50CSpwWCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcG9zX21lbnVfY3Vyc29yCitpbnQJcG9zX21lbnVfY3Vyc29yKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9kcml2ZXIuYyAqLworCisjdW5kZWYgX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZQoraW50CV9uY19NYXRjaF9OZXh0X0NoYXJhY3Rlcl9Jbl9JdGVtX05hbWUoCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJY2gsIAorCQlJVEVNCSoqaXRlbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9kcml2ZXIKK2ludAltZW51X2RyaXZlcigKKwkJTUVOVQkqbWVudSwgCisJCWludAljKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9mb3JtYXQuYyAqLworCisjdW5kZWYgc2V0X21lbnVfZm9ybWF0CitpbnQJc2V0X21lbnVfZm9ybWF0KAorCQlNRU5VCSptZW51LCAKKwkJaW50CXJvd3MsIAorCQlpbnQJY29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9mb3JtYXQKK3ZvaWQJbWVudV9mb3JtYXQoCisJCWNvbnN0IE1FTlUgKm1lbnUsIAorCQlpbnQJKnJvd3MsIAorCQlpbnQJKmNvbHMpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vbV9nbG9iYWwuYyAqLworCisjdW5kZWYgX25jX0RlZmF1bHRfTWVudQorTUVOVQlfbmNfRGVmYXVsdF9NZW51OworI3VuZGVmIF9uY19EZWZhdWx0X0l0ZW0KK0lURU0JX25jX0RlZmF1bHRfSXRlbTsKKworI3VuZGVmIF9uY19Db25uZWN0X0l0ZW1zCitOQ1VSU0VTX0JPT0wgX25jX0Nvbm5lY3RfSXRlbXMoCisJCU1FTlUJKm1lbnUsIAorCQlJVEVNCSoqaXRlbXMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19EaXNjb25uZWN0X0l0ZW1zCit2b2lkCV9uY19EaXNjb25uZWN0X0l0ZW1zKAorCQlNRU5VCSptZW51KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoCitpbnQJX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKAorCQljb25zdCBURVhUICppdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aAordm9pZAlfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aCgKKwkJTUVOVQkqbWVudSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19MaW5rX0l0ZW1zCit2b2lkCV9uY19MaW5rX0l0ZW1zKAorCQlNRU5VCSptZW51KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1Nob3dfTWVudQordm9pZAlfbmNfU2hvd19NZW51KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtCit2b2lkCV9uY19OZXdfVG9wUm93X2FuZF9DdXJyZW50SXRlbSgKKwkJTUVOVQkqbWVudSwgCisJCWludAluZXdfdG9wcm93LCAKKwkJSVRFTQkqbmV3X2N1cnJlbnRfaXRlbSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9tX2hvb2suYyAqLworCisjdW5kZWYgc2V0X21lbnVfaW5pdAoraW50CXNldF9tZW51X2luaXQoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9pbml0CitNZW51X0hvb2sgbWVudV9pbml0KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV90ZXJtCitpbnQJc2V0X21lbnVfdGVybSgKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X3Rlcm0KK01lbnVfSG9vayBtZW51X3Rlcm0oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9pdGVtX2luaXQKK2ludAlzZXRfaXRlbV9pbml0KAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1faW5pdAorTWVudV9Ib29rIGl0ZW1faW5pdCgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisjdW5kZWYgc2V0X2l0ZW1fdGVybQoraW50CXNldF9pdGVtX3Rlcm0oCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV90ZXJtCitNZW51X0hvb2sgaXRlbV90ZXJtKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfSG9vayAqKTApOyB9CisKKy8qIC4vbV9pdGVtX2N1ci5jICovCisKKyN1bmRlZiBzZXRfY3VycmVudF9pdGVtCitpbnQJc2V0X2N1cnJlbnRfaXRlbSgKKwkJTUVOVQkqbWVudSwgCisJCUlURU0JKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGN1cnJlbnRfaXRlbQorSVRFTQkqY3VycmVudF9pdGVtKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKElURU0gKiopMCk7IH0KKworI3VuZGVmIGl0ZW1faW5kZXgKK2ludAlpdGVtX2luZGV4KAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9pdGVtX25hbS5jICovCisKKyN1bmRlZiBpdGVtX25hbWUKK2NvbnN0IGNoYXIgKml0ZW1fbmFtZSgKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBpdGVtX2Rlc2NyaXB0aW9uCitjb25zdCBjaGFyICppdGVtX2Rlc2NyaXB0aW9uKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworLyogLi9tX2l0ZW1fbmV3LmMgKi8KKworI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjdW5kZWYgbmV3X2l0ZW0KK0lURU0JKm5ld19pdGVtKAorCQljb25zdCBjaGFyICpuYW1lLCAKKwkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCisJCXsgcmV0dXJuKCooSVRFTSAqKikwKTsgfQorCisjdW5kZWYgZnJlZV9pdGVtCitpbnQJZnJlZV9pdGVtKAorCQlJVEVNCSppdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9tYXJrCitpbnQJc2V0X21lbnVfbWFyaygKKwkJTUVOVQkqbWVudSwgCisJCWNvbnN0IGNoYXIgKm1hcmspCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfbWFyaworY29uc3QgY2hhciAqbWVudV9tYXJrKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworLyogLi9tX2l0ZW1fb3B0LmMgKi8KKworI3VuZGVmIHNldF9pdGVtX29wdHMKK2ludAlzZXRfaXRlbV9vcHRzKAorCQlJVEVNCSppdGVtLCAKKwkJSXRlbV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fb3B0c19vZmYKK2ludAlpdGVtX29wdHNfb2ZmKAorCQlJVEVNCSppdGVtLCAKKwkJSXRlbV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fb3B0c19vbgoraW50CWl0ZW1fb3B0c19vbigKKwkJSVRFTQkqaXRlbSwgCisJCUl0ZW1fT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX29wdHMKK0l0ZW1fT3B0aW9ucyBpdGVtX29wdHMoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooSXRlbV9PcHRpb25zICopMCk7IH0KKworLyogLi9tX2l0ZW1fdG9wLmMgKi8KKworI3VuZGVmIHNldF90b3Bfcm93CitpbnQJc2V0X3RvcF9yb3coCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJcm93KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0b3Bfcm93CitpbnQJdG9wX3JvdygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21faXRlbV91c2UuYyAqLworCisjdW5kZWYgc2V0X2l0ZW1fdXNlcnB0cgoraW50CXNldF9pdGVtX3VzZXJwdHIoCisJCUlURU0JKml0ZW0sIAorCQl2b2lkCSp1c2VycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX3VzZXJwdHIKK3ZvaWQJKml0ZW1fdXNlcnB0cigKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vbV9pdGVtX3ZhbC5jICovCisKKyN1bmRlZiBzZXRfaXRlbV92YWx1ZQoraW50CXNldF9pdGVtX3ZhbHVlKAorCQlJVEVNCSppdGVtLCAKKwkJTkNVUlNFU19CT09MIHZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX3ZhbHVlCitOQ1VSU0VTX0JPT0wgaXRlbV92YWx1ZSgKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL21faXRlbV92aXMuYyAqLworCisjdW5kZWYgaXRlbV92aXNpYmxlCitOQ1VSU0VTX0JPT0wgaXRlbV92aXNpYmxlKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vbV9pdGVtcy5jICovCisKKyN1bmRlZiBzZXRfbWVudV9pdGVtcworaW50CXNldF9tZW51X2l0ZW1zKAorCQlNRU5VCSptZW51LCAKKwkJSVRFTQkqKml0ZW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2l0ZW1zCitJVEVNCSoqbWVudV9pdGVtcygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihJVEVNICoqKikwKTsgfQorCisjdW5kZWYgaXRlbV9jb3VudAoraW50CWl0ZW1fY291bnQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX25ldy5jICovCisKKyN1bmRlZiBuZXdfbWVudQorTUVOVQkqbmV3X21lbnUoCisJCUlURU0JKippdGVtcykKKwkJeyByZXR1cm4oKihNRU5VICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX21lbnUKK2ludAlmcmVlX21lbnUoCisJCU1FTlUJKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX29wdHMuYyAqLworCisjdW5kZWYgc2V0X21lbnVfb3B0cworaW50CXNldF9tZW51X29wdHMoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9vcHRzX29mZgoraW50CW1lbnVfb3B0c19vZmYoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9vcHRzX29uCitpbnQJbWVudV9vcHRzX29uKAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfb3B0cworTWVudV9PcHRpb25zIG1lbnVfb3B0cygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X09wdGlvbnMgKikwKTsgfQorCisvKiAuL21fcGFkLmMgKi8KKworI3VuZGVmIHNldF9tZW51X3BhZAoraW50CXNldF9tZW51X3BhZCgKKwkJTUVOVQkqbWVudSwgCisJCWludAlwYWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfcGFkCitpbnQJbWVudV9wYWQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3BhdHRlcm4uYyAqLworCisjdW5kZWYgbWVudV9wYXR0ZXJuCitjaGFyCSptZW51X3BhdHRlcm4oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgc2V0X21lbnVfcGF0dGVybgoraW50CXNldF9tZW51X3BhdHRlcm4oCisJCU1FTlUJKm1lbnUsIAorCQljb25zdCBjaGFyICpwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9wb3N0LmMgKi8KKworI3VuZGVmIF9uY19Qb3N0X0l0ZW0KK3ZvaWQJX25jX1Bvc3RfSXRlbSgKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfRHJhd19NZW51Cit2b2lkCV9uY19EcmF3X01lbnUoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBwb3N0X21lbnUKK2ludAlwb3N0X21lbnUoCisJCU1FTlUJKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVucG9zdF9tZW51CitpbnQJdW5wb3N0X21lbnUoCisJCU1FTlUJKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3JlcV9uYW1lLmMgKi8KKworI3VuZGVmIG1lbnVfcmVxdWVzdF9uYW1lCitjb25zdCBjaGFyICptZW51X3JlcXVlc3RfbmFtZSgKKwkJaW50CXJlcXVlc3QpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgbWVudV9yZXF1ZXN0X2J5X25hbWUKK2ludAltZW51X3JlcXVlc3RfYnlfbmFtZSgKKwkJY29uc3QgY2hhciAqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9zY2FsZS5jICovCisKKyN1bmRlZiBzY2FsZV9tZW51CitpbnQJc2NhbGVfbWVudSgKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWludAkqcm93cywgCisJCWludAkqY29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fc3BhY2luZy5jICovCisKKyN1bmRlZiBzZXRfbWVudV9zcGFjaW5nCitpbnQJc2V0X21lbnVfc3BhY2luZygKKwkJTUVOVQkqbWVudSwgCisJCWludAlzX2Rlc2MsIAorCQlpbnQJc19yb3csIAorCQlpbnQJc19jb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfc3BhY2luZworaW50CW1lbnVfc3BhY2luZygKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWludAkqc19kZXNjLCAKKwkJaW50CSpzX3JvdywgCisJCWludAkqc19jb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3N1Yi5jICovCisKKyN1bmRlZiBzZXRfbWVudV9zdWIKK2ludAlzZXRfbWVudV9zdWIoCisJCU1FTlUJKm1lbnUsIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9zdWIKK1dJTkRPVwkqbWVudV9zdWIoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vbV90cmFjZS5jICovCisKKyN1bmRlZiBfbmNfcmV0cmFjZV9pdGVtCitJVEVNCSpfbmNfcmV0cmFjZV9pdGVtKAorCQlJVEVNCSpjb2RlKQorCQl7IHJldHVybigqKElURU0gKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2l0ZW1fcHRyCitJVEVNCSoqX25jX3JldHJhY2VfaXRlbV9wdHIoCisJCUlURU0JKipjb2RlKQorCQl7IHJldHVybigqKElURU0gKioqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9pdGVtX29wdHMKK0l0ZW1fT3B0aW9ucyBfbmNfcmV0cmFjZV9pdGVtX29wdHMoCisJCUl0ZW1fT3B0aW9ucyBjb2RlKQorCQl7IHJldHVybigqKEl0ZW1fT3B0aW9ucyAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9tZW51CitNRU5VCSpfbmNfcmV0cmFjZV9tZW51KAorCQlNRU5VCSpjb2RlKQorCQl7IHJldHVybigqKE1FTlUgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX21lbnVfaG9vaworTWVudV9Ib29rIF9uY19yZXRyYWNlX21lbnVfaG9vaygKKwkJTWVudV9Ib29rIGNvZGUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX21lbnVfb3B0cworTWVudV9PcHRpb25zIF9uY19yZXRyYWNlX21lbnVfb3B0cygKKwkJTWVudV9PcHRpb25zIGNvZGUpCisJCXsgcmV0dXJuKCooTWVudV9PcHRpb25zICopMCk7IH0KKworLyogLi9tX3VzZXJwdHIuYyAqLworCisjdW5kZWYgc2V0X21lbnVfdXNlcnB0cgoraW50CXNldF9tZW51X3VzZXJwdHIoCisJCU1FTlUJKm1lbnUsIAorCQl2b2lkCSp1c2VycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X3VzZXJwdHIKK3ZvaWQJKm1lbnVfdXNlcnB0cigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vbV93aW4uYyAqLworCisjdW5kZWYgc2V0X21lbnVfd2luCitpbnQJc2V0X21lbnVfd2luKAorCQlNRU5VCSptZW51LCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfd2luCitXSU5ET1cJKm1lbnVfd2luKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQpkaWZmIC0tZ2l0IGEvbWVudS9tX2F0dHJpYnMuYyBiL21lbnUvbV9hdHRyaWJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyNmZmYgotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV9hdHRyaWJzLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fYXR0cmlicyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogQ29udHJvbCBtZW51cyBkaXNwbGF5IGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9hdHRyaWJzLmMsdiAxLjE0IDIwMDQvMTIvMTEgMjM6Mjk6MTIgdG9tIEV4cCAkIikKKworLyogTWFjcm8gdG8gcmVkcmF3IG1lbnUgaWYgaXQgaXMgcG9zdGVkIGFuZCBjaGFuZ2VkICovCisjZGVmaW5lIFJlZnJlc2hfTWVudShtZW51KSBcCisgICBpZiAoIChtZW51KSAmJiAoKG1lbnUpLT5zdGF0dXMgJiBfUE9TVEVEKSApXAorICAge1wKKyAgICAgIF9uY19EcmF3X01lbnUoIG1lbnUgKTtcCisgICAgICBfbmNfU2hvd19NZW51KCBtZW51ICk7XAorICAgfQorCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gc2V0IGEgbWVudXMgYXR0cmlidXRlICovCisjZGVmaW5lIEdFTl9NRU5VX0FUVFJfU0VUX0ZDVCggbmFtZSApIFwKK05DVVJTRVNfSU1QRVhQIGludCBOQ1VSU0VTX0FQSSBzZXRfbWVudV8gIyMgbmFtZSAoTUVOVSAqIG1lbnUsIGNodHlwZSBhdHRyKVwKK3tcCisgICBUKChUX0NBTExFRCgic2V0X21lbnVfIiAjbmFtZSAiKCVwLCVzKSIpLCBtZW51LCBfdHJhY2VhdHRyKGF0dHIpKSk7XAorICAgaWYgKCEoYXR0cj09QV9OT1JNQUwgfHwgKGF0dHIgJiBBX0FUVFJJQlVURVMpPT1hdHRyKSlcCisgICAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpO1wKKyAgIGlmIChtZW51ICYmICggbWVudSAtPiBuYW1lICE9IGF0dHIpKVwKKyAgICAge1wKKyAgICAgICAobWVudSAtPiBuYW1lKSA9IGF0dHI7XAorICAgICAgIFJlZnJlc2hfTWVudShtZW51KTtcCisgICAgIH1cCisgICBOb3JtYWxpemVfTWVudSggbWVudSApIC0+IG5hbWUgPSBhdHRyO1wKKyAgIFJFVFVSTihFX09LKTtcCit9CisKKy8qICJUZW1wbGF0ZSIgbWFjcm8gdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBnZXQgYSBtZW51J3MgYXR0cmlidXRlICovCisjZGVmaW5lIEdFTl9NRU5VX0FUVFJfR0VUX0ZDVCggbmFtZSApIFwKK05DVVJTRVNfSU1QRVhQIGNodHlwZSBOQ1VSU0VTX0FQSSBtZW51XyAjIyBuYW1lIChjb25zdCBNRU5VICogbWVudSlcCit7XAorICAgVCgoVF9DQUxMRUQoIm1lbnVfIiAjbmFtZSAiKCVwKSIpLCBtZW51KSk7XAorICAgcmV0dXJuQXR0cihOb3JtYWxpemVfTWVudSggbWVudSApIC0+IG5hbWUpO1wKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9mb3JlKE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBhdHRyaWJ1dGUgZm9yIHNlbGVjdGFibGUgaXRlbXMuIEluIHNpbmdsZS0KK3wgICAgICAgICAgICAgICAgICAgIHZhbHVlZCBtZW51cyB0aGlzIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBjdXJyZW50Cit8ICAgICAgICAgICAgICAgICAgICBpdGVtICgoaS5lLiB3aGVyZSB0aGUgY3Vyc29yIGlzKSwgaW4gbXVsdGktdmFsdWVkCit8ICAgICAgICAgICAgICAgICAgICBtZW51cyB0aGlzIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCBpdGVtcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBhbiBpbnZhbGlkIHZhbHVlIGhhcyBiZWVuIHBhc3NlZCAgIAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9NRU5VX0FUVFJfU0VUX0ZDVChmb3JlKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgY2h0eXBlIG1lbnVfZm9yZShjb25zdCBNRU5VKiBtZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBhdHRyaWJ1dGUgdXNlZCBmb3Igc2VsZWN0YWJsZSBpdGVtcyB0aGF0Cit8ICAgICAgICAgICAgICAgICAgICBhcmUgY3VycmVudCAoc2luZ2xlLXZhbHVlZCBtZW51KSBvciBzZWxlY3RlZCAobXVsdGktCit8ICAgICAgICAgICAgICAgICAgICB2YWx1ZWQgbWVudSkuICAgCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBBdHRyaWJ1dGUgdmFsdWUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fTUVOVV9BVFRSX0dFVF9GQ1QoZm9yZSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9iYWNrKE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBhdHRyaWJ1dGUgZm9yIHNlbGVjdGFibGUgYnV0IG5vdCB5ZXQgc2VsZWN0ZWQKK3wgICAgICAgICAgICAgICAgICAgIGl0ZW1zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIHN1Y2Nlc3MgIAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAtIGFuIGludmFsaWQgdmFsdWUgaGFzIGJlZW4gcGFzc2VkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX01FTlVfQVRUUl9TRVRfRkNUKGJhY2spCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBjaHR5cGUgbWVudV9iYWNrKGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIGF0dHJpYnV0ZSB1c2VkIGZvciBzZWxlY3RhYmxlIGJ1dCBub3QgeWV0Cit8ICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBpdGVtcy4gCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBBdHRyaWJ1dGUgdmFsdWUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fTUVOVV9BVFRSX0dFVF9GQ1QoYmFjaykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9ncmV5KE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBhdHRyaWJ1dGUgZm9yIHVuc2VsZWN0YWJsZSBpdGVtcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgIC0gYW4gaW52YWxpZCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQgICAgCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX01FTlVfQVRUUl9TRVRfRkNUKGdyZXkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBjaHR5cGUgbWVudV9ncmV5KGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIGF0dHJpYnV0ZSB1c2VkIGZvciBub24tc2VsZWN0YWJsZSBpdGVtcworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgQXR0cmlidXRlIHZhbHVlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX01FTlVfQVRUUl9HRVRfRkNUKGdyZXkpCisvKiBtX2F0dHJpYnMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9jdXJzb3IuYyBiL21lbnUvbV9jdXJzb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjkzZjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2N1cnNvci5jCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2N1cnNvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIENvcnJlY3RseSBwb3NpdGlvbiBhIG1lbnUncyBjdXJzb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fY3Vyc29yLmMsdiAxLjIwIDIwMDUvMTAvMjIgMjM6MDM6MzIgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBfbmNfbWVudV9jdXJzb3JfcG9zCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gcG9zaXRpb24gb2YgbG9naWNhbCBjdXJzb3IgdG8gY3VycmVudCBpdGVtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG1lbnUKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX1BPU1RFRCAgICAtIE1lbnUgaXMgbm90IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19tZW51X2N1cnNvcl9wb3MoY29uc3QgTUVOVSAqIG1lbnUsIGNvbnN0IElURU0gKiBpdGVtLCBpbnQgKnBZLCBpbnQgKnBYKQoreworICBpZiAoIW1lbnUgfHwgIXBYIHx8ICFwWSkKKyAgICByZXR1cm4gKEVfQkFEX0FSR1VNRU5UKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICgoSVRFTSAqKSAwID09IGl0ZW0pCisJaXRlbSA9IG1lbnUtPmN1cml0ZW07CisgICAgICBhc3NlcnQoaXRlbSAhPSAoSVRFTSAqKSAwKTsKKworICAgICAgaWYgKCEobWVudS0+c3RhdHVzICYgX1BPU1RFRCkpCisJcmV0dXJuIChFX05PVF9QT1NURUQpOworCisgICAgICAqcFggPSBpdGVtLT54ICogKG1lbnUtPnNwY19jb2xzICsgbWVudS0+aXRlbWxlbik7CisgICAgICAqcFkgPSAoaXRlbS0+eSAtIG1lbnUtPnRvcHJvdykgKiBtZW51LT5zcGNfcm93czsKKyAgICB9CisgIHJldHVybiAoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgcG9zX21lbnVfY3Vyc29yCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQb3NpdGlvbiBsb2dpY2FsIGN1cnNvciB0byBjdXJyZW50IGl0ZW0gaW4gbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBtZW51Cit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9QT1NURUQgICAgLSBNZW51IGlzIG5vdCBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwb3NfbWVudV9jdXJzb3IoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFdJTkRPVyAqd2luLCAqc3ViOworICBpbnQgeCA9IDAsIHkgPSAwOworICBpbnQgZXJyID0gX25jX21lbnVfY3Vyc29yX3BvcyhtZW51LCAoSVRFTSAqKSAwLCAmeSwgJngpOworCisgIFQoKFRfQ0FMTEVEKCJwb3NfbWVudV9jdXJzb3IoJXApIiksIG1lbnUpKTsKKworICBpZiAoRV9PSyA9PSBlcnIpCisgICAgeworICAgICAgd2luID0gbWVudS0+dXNlcndpbiA/IG1lbnUtPnVzZXJ3aW4gOiBzdGRzY3I7CisgICAgICBzdWIgPSBtZW51LT51c2Vyc3ViID8gbWVudS0+dXNlcnN1YiA6IHdpbjsKKyAgICAgIGFzc2VydCh3aW4gJiYgc3ViKTsKKworICAgICAgaWYgKChtZW51LT5vcHQgJiBPX1NIT1dNQVRDSCkgJiYgKG1lbnUtPnBpbmRleCA+IDApKQorCXggKz0gKG1lbnUtPnBpbmRleCArIG1lbnUtPm1hcmtsZW4gLSAxKTsKKworICAgICAgd21vdmUoc3ViLCB5LCB4KTsKKworICAgICAgaWYgKHdpbiAhPSBzdWIpCisJeworCSAgd2N1cnN5bmN1cChzdWIpOworCSAgd3N5bmN1cChzdWIpOworCSAgdW50b3VjaHdpbihzdWIpOworCX0KKyAgICB9CisgIFJFVFVSTihlcnIpOworfQorCisvKiBtX2N1cnNvci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbWVudS9tX2RyaXZlci5jIGIvbWVudS9tX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MThlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21fZHJpdmVyLmMKQEAgLTAsMCArMSw1NTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogQ2VudHJhbCBkaXNwYXRjaGluZyByb3V0aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9kcml2ZXIuYyx2IDEuMjcgMjAwOC8wOC8wMyAyMjowODoyMiB0b20gRXhwICQiKQorCisvKiBNYWNyb3MgKi8KKworLyogUmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIHRoZSBtYXRjaCBwYXR0ZXJuIGJ1ZmZlciAqLworI2RlZmluZSBSZW1vdmVfQ2hhcmFjdGVyX0Zyb21fUGF0dGVybihtZW51KSBcCisgIChtZW51KS0+cGF0dGVyblstLSgobWVudSktPnBpbmRleCldID0gJ1wwJworCisvKiBBZGQgYSBuZXcgY2hhcmFjdGVyIHRvIHRoZSBtYXRjaCBwYXR0ZXJuIGJ1ZmZlciAqLworI2RlZmluZSBBZGRfQ2hhcmFjdGVyX1RvX1BhdHRlcm4obWVudSxjaCkgXAorICB7IChtZW51KS0+cGF0dGVyblsoKG1lbnUpLT5waW5kZXgpKytdID0gKGNoKTtcCisgICAgKG1lbnUpLT5wYXR0ZXJuWyhtZW51KS0+cGluZGV4XSA9ICdcMCc7IH0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBJc19TdWJfU3RyaW5nKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgSWdub3JlQ2FzZUZsYWcsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFydCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVja3Mgd2hldGhlciBvciBub3QgcGFydCBpcyBhIHN1YnN0cmluZyBvZiBzdHJpbmcuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgLSBpZiBpdCBpcyBhIHN1YnN0cmluZworfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgIC0gaWYgaXQgaXMgbm90IGEgc3Vic3RyaW5nCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0lzX1N1Yl9TdHJpbmcoCisJICAgICAgIGJvb2wgSWdub3JlQ2FzZUZsYWcsCisJICAgICAgIGNvbnN0IGNoYXIgKnBhcnQsCisJICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZworKQoreworICBhc3NlcnQocGFydCAmJiBzdHJpbmcpOworICBpZiAoSWdub3JlQ2FzZUZsYWcpCisgICAgeworICAgICAgd2hpbGUgKCpzdHJpbmcgJiYgKnBhcnQpCisJeworCSAgaWYgKHRvdXBwZXIoVUNoYXIoKnN0cmluZysrKSkgIT0gdG91cHBlcihVQ2hhcigqcGFydCkpKQorCSAgICBicmVhazsKKwkgIHBhcnQrKzsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgd2hpbGUgKCpzdHJpbmcgJiYgKnBhcnQpCisJaWYgKCpwYXJ0ICE9ICpzdHJpbmcrKykKKwkgIGJyZWFrOworICAgICAgcGFydCsrOworICAgIH0KKyAgcmV0dXJuICgoKnBhcnQpID8gRkFMU0UgOiBUUlVFKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZSgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5VICptZW51LAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY2gsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRFTSAqKml0ZW0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBUaGlzIGludGVybmFsIHJvdXRpbmUgaXMgY2FsbGVkIGZvciBhIG1lbnUgcG9zaXRpb25lZAorfCAgICAgICAgICAgICAgICAgICAgYXQgYW4gaXRlbSB3aXRoIHRocmVlIGRpZmZlcmVudCBjbGFzc2VzIG9mIGNoYXJhY3RlcnM6Cit8ICAgICAgICAgICAgICAgICAgICAgICAtIGEgcHJpbnRhYmxlIGNoYXJhY3RlcjsgdGhlIGNoYXJhY3RlciBpcyBhZGRlZCB0bworfCAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBwYXR0ZXJuIGFuZCB0aGUgbmV4dCBpdGVtIG1hdGNoaW5nCit8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGF0dGVybiBpcyBzZWFyY2hlZC4KK3wgICAgICAgICAgICAgICAgICAgICAgIC0gTlVMOyB0aGUgcGF0dGVybiBzdGF5cyBhcyBpdCBpcyBhbmQgdGhlIG5leHQgaXRlbQorfCAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZyB0aGUgcGF0dGVybiBpcyBzZWFyY2hlZAorfCAgICAgICAgICAgICAgICAgICAgICAgLSBCUzsgdGhlIHBhdHRlcm4gc3RheXMgYXMgaXQgaXMgYW5kIHRoZSBwcmV2aW91cworfCAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIGlzIHNlYXJjaGVkCit8Cit8ICAgICAgICAgICAgICAgICAgICAgICBUaGUgaXRlbSBwYXJhbWV0ZXIgY29udGFpbnMgb24gY2FsbCBhIHBvaW50ZXIgdG8KK3wgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpdGVtIHdoZXJlIHRoZSBzZWFyY2ggc3RhcnRzLiBPbiByZXR1cm4gLSBpZgorfCAgICAgICAgICAgICAgICAgICAgICAgYSBtYXRjaCB3YXMgZm91bmQgLSBpdCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlCit8ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZyBpdGVtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgLSBhbiBpdGVtIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIHdhcyBmb3VuZAorfCAgICAgICAgICAgICAgICAgICAgRV9OT19NQVRDSCAgLSBub3RoaW5nIGZvdW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZQorKE1FTlUgKiBtZW51LCBpbnQgY2gsIElURU0gKiogaXRlbSkKK3sKKyAgYm9vbCBmb3VuZCA9IEZBTFNFLCBwYXNzZWQgPSBGQUxTRTsKKyAgaW50IGlkeCwgbGFzdDsKKworICBUKChUX0NBTExFRCgiX25jX01hdGNoX05leHRfQ2hhcmFjdGVyKCVwLCVkLCVwKSIpLCBtZW51LCBjaCwgaXRlbSkpOworCisgIGFzc2VydChtZW51ICYmIGl0ZW0gJiYgKml0ZW0pOworICBpZHggPSAoKml0ZW0pLT5pbmRleDsKKworICBpZiAoY2ggJiYgY2ggIT0gQlMpCisgICAgeworICAgICAgLyogaWYgd2UgYmVjb21lIHRvIGxvbmcsIHdlIG5lZWQgbm8gZnVydGhlciBjaGVja2luZyA6IHRoZXJlIGNhbid0IGJlCisgICAgICAgICBhIG1hdGNoICEgKi8KKyAgICAgIGlmICgobWVudS0+cGluZGV4ICsgMSkgPiBtZW51LT5uYW1lbGVuKQorCVJFVFVSTihFX05PX01BVENIKTsKKworICAgICAgQWRkX0NoYXJhY3Rlcl9Ub19QYXR0ZXJuKG1lbnUsIGNoKTsKKyAgICAgIC8qIHdlIGFydGlmaWNpYWxseSBwb3NpdGlvbiBvbmUgaXRlbSBiYWNrLCBiZWNhdXNlIGluIHRoZSBkby4uLndoaWxlCisgICAgICAgICBsb29wIHdlIHN0YXJ0IHdpdGggdGhlIG5leHQgaXRlbS4gVGhpcyBtZWFucywgdGhhdCB3aXRoIGEgbmV3CisgICAgICAgICBwYXR0ZXJuIHNlYXJjaCB3ZSBhbHdheXMgc3RhcnQgdGhlIHNjYW4gd2l0aCB0aGUgYWN0dWFsIGl0ZW0uIElmCisgICAgICAgICB3ZSBkbyBhIE5FWFRfUEFUVEVSTiBvZGVyIFBSRVZfUEFUVEVSTiBzZWFyY2gsIHdlIHN0YXJ0IHdpdGggdGhlCisgICAgICAgICBvbmUgYWZ0ZXIgb3IgYmVmb3JlIHRoZSBhY3R1YWwgaXRlbS4gKi8KKyAgICAgIGlmICgtLWlkeCA8IDApCisJaWR4ID0gbWVudS0+bml0ZW1zIC0gMTsKKyAgICB9CisKKyAgbGFzdCA9IGlkeDsJCQkvKiB0aGlzIGNsb3NlcyB0aGUgY3ljbGUgKi8KKworICBkbworICAgIHsKKyAgICAgIGlmIChjaCA9PSBCUykKKwl7CQkJLyogd2UgaGF2ZSB0byBnbyBiYWNrd2FyZCAqLworCSAgaWYgKC0taWR4IDwgMCkKKwkgICAgaWR4ID0gbWVudS0+bml0ZW1zIC0gMTsKKwl9CisgICAgICBlbHNlCisJewkJCS8qIG90aGVyd2lzZSB3ZSBhbHdheXMgZ28gZm9yd2FyZCAqLworCSAgaWYgKCsraWR4ID49IG1lbnUtPm5pdGVtcykKKwkgICAgaWR4ID0gMDsKKwl9CisgICAgICBpZiAoSXNfU3ViX1N0cmluZygoYm9vbCkoKG1lbnUtPm9wdCAmIE9fSUdOT1JFQ0FTRSkgIT0gMCksCisJCQltZW51LT5wYXR0ZXJuLAorCQkJbWVudS0+aXRlbXNbaWR4XS0+bmFtZS5zdHIpCisJKQorCWZvdW5kID0gVFJVRTsKKyAgICAgIGVsc2UKKwlwYXNzZWQgPSBUUlVFOworICAgIH0KKyAgd2hpbGUgKCFmb3VuZCAmJiAoaWR4ICE9IGxhc3QpKTsKKworICBpZiAoZm91bmQpCisgICAgeworICAgICAgaWYgKCEoKGlkeCA9PSAoKml0ZW0pLT5pbmRleCkgJiYgcGFzc2VkKSkKKwl7CisJICAqaXRlbSA9IG1lbnUtPml0ZW1zW2lkeF07CisJICBSRVRVUk4oRV9PSyk7CisJfQorICAgICAgLyogVGhpcyBwb2ludCBpcyByZWFjaGVkLCBpZiB3ZSBmdWxseSBjeWNsZWQgdGhyb3VnaCB0aGUgaXRlbSBsaXN0CisgICAgICAgICBhbmQgdGhlIG9ubHkgbWF0Y2ggd2UgZm91bmQgaXMgdGhlIHN0YXJ0aW5nIGl0ZW0uIFdpdGggYSBORVhUX1BBVFRFUk4KKyAgICAgICAgIG9yIFBSRVZfUEFUVEVSTiBzY2FuIHRoaXMgbWVhbnMsIHRoYXQgdGhlcmUgd2FzIG5vIGFkZGl0aW9uYWwgbWF0Y2guCisgICAgICAgICBJZiB3ZSBzZWFyY2hlZCB3aXRoIGFuIGV4cGFuZGVkIG5ldyBwYXR0ZXJuLCB3ZSBzaG91bGQgbmV2ZXIgcmVhY2gKKyAgICAgICAgIHRoaXMgcG9pbnQsIGJlY2F1c2UgaWYgdGhlIGV4cGFuZGVkIHBhdHRlcm4gbWF0Y2hlcyBhbHNvIHRoZSBhY3R1YWwKKyAgICAgICAgIGl0ZW0gd2Ugd2lsbCBmaW5kIGl0IGluIHRoZSBmaXJzdCBhdHRlbXB0IChwYXNzZWQ9PUZBTFNFKSBhbmQgd2UKKyAgICAgICAgIHdpbGwgbmV2ZXIgY3ljbGUgdGhyb3VnaCB0aGUgd2hvbGUgaXRlbSBhcnJheS4KKyAgICAgICAqLworICAgICAgYXNzZXJ0KGNoID09IDAgfHwgY2ggPT0gQlMpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChjaCAmJiBjaCAhPSBCUyAmJiBtZW51LT5waW5kZXggPiAwKQorCXsKKwkgIC8qIGlmIHdlIGhhZCBubyBtYXRjaCB3aXRoIGEgbmV3IHBhdHRlcm4sIHdlIGhhdmUgdG8gcmVzdG9yZSBpdCAqLworCSAgUmVtb3ZlX0NoYXJhY3Rlcl9Gcm9tX1BhdHRlcm4obWVudSk7CisJfQorICAgIH0KKyAgUkVUVVJOKEVfTk9fTUFUQ0gpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtZW51X2RyaXZlcihNRU5VICptZW51LCBpbnQgYykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENlbnRyYWwgZGlzcGF0Y2hlciBmb3IgdGhlIG1lbnUuIFRyYW5zbGF0ZXMgdGhlIGxvZ2ljYWwKK3wgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJ2MnIGludG8gYSBtZW51IGFjdGlvbi4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgbWVudSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9TVEFURSAgICAgLSBtZW51IGlzIGluIHVzZXIgaG9vayByb3V0aW5lCit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9QT1NURUQgICAgLSBtZW51IGlzIG5vdCBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCittZW51X2RyaXZlcihNRU5VICogbWVudSwgaW50IGMpCit7CisjZGVmaW5lIE5BVklHQVRFKGRpcikgXAorICBpZiAoIWl0ZW0tPmRpcilcCisgICAgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7XAorICBlbHNlXAorICAgICBpdGVtID0gaXRlbS0+ZGlyCisKKyAgaW50IHJlc3VsdCA9IEVfT0s7CisgIElURU0gKml0ZW07CisgIGludCBteV90b3Bfcm93LCByZGlmZjsKKworICBUKChUX0NBTExFRCgibWVudV9kcml2ZXIoJXAsJWQpIiksIG1lbnUsIGMpKTsKKworICBpZiAoIW1lbnUpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAobWVudS0+c3RhdHVzICYgX0lOX0RSSVZFUikKKyAgICBSRVRVUk4oRV9CQURfU1RBVEUpOworICBpZiAoIShtZW51LT5zdGF0dXMgJiBfUE9TVEVEKSkKKyAgICBSRVRVUk4oRV9OT1RfUE9TVEVEKTsKKworICBpdGVtID0gbWVudS0+Y3VyaXRlbTsKKworICBteV90b3Bfcm93ID0gbWVudS0+dG9wcm93OworICBhc3NlcnQoaXRlbSk7CisKKyAgaWYgKChjID4gS0VZX01BWCkgJiYgKGMgPD0gTUFYX01FTlVfQ09NTUFORCkpCisgICAgeworICAgICAgaWYgKCEoKGMgPT0gUkVRX0JBQ0tfUEFUVEVSTikKKwkgICAgfHwgKGMgPT0gUkVRX05FWFRfTUFUQ0gpIHx8IChjID09IFJFUV9QUkVWX01BVENIKSkpCisJeworCSAgYXNzZXJ0KG1lbnUtPnBhdHRlcm4pOworCSAgUmVzZXRfUGF0dGVybihtZW51KTsKKwl9CisKKyAgICAgIHN3aXRjaCAoYykKKwl7CisJY2FzZSBSRVFfTEVGVF9JVEVNOgorCSAgICAvKj09PT09PT09PT09PT09PT09Ki8KKwkgIE5BVklHQVRFKGxlZnQpOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9SSUdIVF9JVEVNOgorCSAgICAvKj09PT09PT09PT09PT09PT09PSovCisJICBOQVZJR0FURShyaWdodCk7CisJICBicmVhazsKKworCWNhc2UgUkVRX1VQX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09Ki8KKwkgIE5BVklHQVRFKHVwKTsKKwkgIGJyZWFrOworCisJY2FzZSBSRVFfRE9XTl9JVEVNOgorCSAgICAvKj09PT09PT09PT09PT09PT09Ki8KKwkgIE5BVklHQVRFKGRvd24pOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9TQ1JfVUxJTkU6CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgaWYgKG15X3RvcF9yb3cgPT0gMCB8fCAhKGl0ZW0tPnVwKSkKKwkgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC0tbXlfdG9wX3JvdzsKKwkgICAgICBpdGVtID0gaXRlbS0+dXA7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBSRVFfU0NSX0RMSU5FOgorCSAgICAvKj09PT09PT09PT09PT09PT09Ki8KKwkgIGlmICgobXlfdG9wX3JvdyArIG1lbnUtPmFyb3dzID49IG1lbnUtPnJvd3MpIHx8ICEoaXRlbS0+ZG93bikpCisJICAgIHsKKwkgICAgICAvKiBvbmx5IGlmIHRoZSBtZW51IGhhcyBsZXNzIGl0ZW1zIHRoYW4gcm93cywgd2UgY2FuIGRlbnkgdGhlCisJICAgICAgICAgcmVxdWVzdC4gT3RoZXJ3aXNlIHRoZSBlcGlsb2d1ZSBvZiB0aGlzIHJvdXRpbmUgYWRqdXN0cyB0aGUKKwkgICAgICAgICB0b3Agcm93IGlmIG5lY2Vzc2FyeSAqLworCSAgICAgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG15X3RvcF9yb3crKzsKKwkgICAgICBpdGVtID0gaXRlbS0+ZG93bjsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIFJFUV9TQ1JfRFBBR0U6CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgcmRpZmYgPSBtZW51LT5yb3dzIC0gKG1lbnUtPmFyb3dzICsgbXlfdG9wX3Jvdyk7CisJICBpZiAocmRpZmYgPiBtZW51LT5hcm93cykKKwkgICAgcmRpZmYgPSBtZW51LT5hcm93czsKKwkgIGlmIChyZGlmZiA8PSAwKQorCSAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgZWxzZQorCSAgICB7CisJICAgICAgbXlfdG9wX3JvdyArPSByZGlmZjsKKwkgICAgICB3aGlsZSAocmRpZmYtLSA+IDAgJiYgaXRlbSAhPSAwICYmIGl0ZW0tPmRvd24gIT0gMCkKKwkJaXRlbSA9IGl0ZW0tPmRvd247CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBSRVFfU0NSX1VQQUdFOgorCSAgICAvKj09PT09PT09PT09PT09PT09Ki8KKwkgIHJkaWZmID0gKG1lbnUtPmFyb3dzIDwgbXlfdG9wX3JvdykgPyBtZW51LT5hcm93cyA6IG15X3RvcF9yb3c7CisJICBpZiAocmRpZmYgPD0gMCkKKwkgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG15X3RvcF9yb3cgLT0gcmRpZmY7CisJICAgICAgd2hpbGUgKHJkaWZmLS0gPiAwICYmIGl0ZW0gIT0gMCAmJiBpdGVtLT51cCAhPSAwKQorCQlpdGVtID0gaXRlbS0+dXA7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBSRVFfRklSU1RfSVRFTToKKwkgICAgLyo9PT09PT09PT09PT09PT09PT0qLworCSAgaXRlbSA9IG1lbnUtPml0ZW1zWzBdOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9MQVNUX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgaXRlbSA9IG1lbnUtPml0ZW1zW21lbnUtPm5pdGVtcyAtIDFdOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9ORVhUX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgaWYgKChpdGVtLT5pbmRleCArIDEpID49IG1lbnUtPm5pdGVtcykKKwkgICAgeworCSAgICAgIGlmIChtZW51LT5vcHQgJiBPX05PTkNZQ0xJQykKKwkJcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgICAgICBlbHNlCisJCWl0ZW0gPSBtZW51LT5pdGVtc1swXTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBpdGVtID0gbWVudS0+aXRlbXNbaXRlbS0+aW5kZXggKyAxXTsKKwkgIGJyZWFrOworCisJY2FzZSBSRVFfUFJFVl9JVEVNOgorCSAgICAvKj09PT09PT09PT09PT09PT09Ki8KKwkgIGlmIChpdGVtLT5pbmRleCA8PSAwKQorCSAgICB7CisJICAgICAgaWYgKG1lbnUtPm9wdCAmIE9fTk9OQ1lDTElDKQorCQlyZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgICAgIGVsc2UKKwkJaXRlbSA9IG1lbnUtPml0ZW1zW21lbnUtPm5pdGVtcyAtIDFdOworCSAgICB9CisJICBlbHNlCisJICAgIGl0ZW0gPSBtZW51LT5pdGVtc1tpdGVtLT5pbmRleCAtIDFdOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9UT0dHTEVfSVRFTToKKwkgICAgLyo9PT09PT09PT09PT09PT09PT09Ki8KKwkgIGlmIChtZW51LT5vcHQgJiBPX09ORVZBTFVFKQorCSAgICB7CisJICAgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKG1lbnUtPmN1cml0ZW0tPm9wdCAmIE9fU0VMRUNUQUJMRSkKKwkJeworCQkgIG1lbnUtPmN1cml0ZW0tPnZhbHVlID0gIW1lbnUtPmN1cml0ZW0tPnZhbHVlOworCQkgIE1vdmVfQW5kX1Bvc3RfSXRlbShtZW51LCBtZW51LT5jdXJpdGVtKTsKKwkJICBfbmNfU2hvd19NZW51KG1lbnUpOworCQl9CisJICAgICAgZWxzZQorCQlyZXN1bHQgPSBFX05PVF9TRUxFQ1RBQkxFOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgUkVRX0NMRUFSX1BBVFRFUk46CisJICAgIC8qPT09PT09PT09PT09PT09PT09PT09Ki8KKwkgIC8qIGFscmVhZHkgY2xlYXJlZCBpbiBwcm9sb2d1ZSAqLworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9CQUNLX1BBVFRFUk46CisJICAgIC8qPT09PT09PT09PT09PT09PT09PT0qLworCSAgaWYgKG1lbnUtPnBpbmRleCA+IDApCisJICAgIHsKKwkgICAgICBhc3NlcnQobWVudS0+cGF0dGVybik7CisJICAgICAgUmVtb3ZlX0NoYXJhY3Rlcl9Gcm9tX1BhdHRlcm4obWVudSk7CisJICAgICAgcG9zX21lbnVfY3Vyc29yKG1lbnUpOworCSAgICB9CisJICBlbHNlCisJICAgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJICBicmVhazsKKworCWNhc2UgUkVRX05FWFRfTUFUQ0g6CisJICAgIC8qPT09PT09PT09PT09PT09PT09Ki8KKwkgIGFzc2VydChtZW51LT5wYXR0ZXJuKTsKKwkgIGlmIChtZW51LT5wYXR0ZXJuWzBdKQorCSAgICByZXN1bHQgPSBfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lKG1lbnUsIDAsICZpdGVtKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICgoaXRlbS0+aW5kZXggKyAxKSA8IG1lbnUtPm5pdGVtcykKKwkJaXRlbSA9IG1lbnUtPml0ZW1zW2l0ZW0tPmluZGV4ICsgMV07CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKG1lbnUtPm9wdCAmIE9fTk9OQ1lDTElDKQorCQkgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkJICBlbHNlCisJCSAgICBpdGVtID0gbWVudS0+aXRlbXNbMF07CisJCX0KKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIFJFUV9QUkVWX01BVENIOgorCSAgICAvKj09PT09PT09PT09PT09PT09PSovCisJICBhc3NlcnQobWVudS0+cGF0dGVybik7CisJICBpZiAobWVudS0+cGF0dGVyblswXSkKKwkgICAgcmVzdWx0ID0gX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZShtZW51LCBCUywgJml0ZW0pOworCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKGl0ZW0tPmluZGV4KQorCQlpdGVtID0gbWVudS0+aXRlbXNbaXRlbS0+aW5kZXggLSAxXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAobWVudS0+b3B0ICYgT19OT05DWUNMSUMpCisJCSAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCQkgIGVsc2UKKwkJICAgIGl0ZW0gPSBtZW51LT5pdGVtc1ttZW51LT5uaXRlbXMgLSAxXTsKKwkJfQorCSAgICB9CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIC8qPT09PT09Ki8KKwkgIHJlc3VsdCA9IEVfVU5LTk9XTl9DT01NQU5EOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsJCQkJLyogbm90IGEgY29tbWFuZCAqLworICAgICAgaWYgKCEoYyAmIH4oKGludClNQVhfUkVHVUxBUl9DSEFSQUNURVIpKSAmJiBpc3ByaW50KFVDaGFyKGMpKSkKKwlyZXN1bHQgPSBfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lKG1lbnUsIGMsICZpdGVtKTsKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICAgIGVsc2UgaWYgKEtFWV9NT1VTRSA9PSBjKQorCXsKKwkgIE1FVkVOVCBldmVudDsKKwkgIFdJTkRPVyAqdXdpbiA9IEdldF9NZW51X1VzZXJXaW4obWVudSk7CisKKwkgIGdldG1vdXNlKCZldmVudCk7CisJICBpZiAoKGV2ZW50LmJzdGF0ZSAmIChCVVRUT04xX0NMSUNLRUQgfAorCQkJICAgICAgIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQgfAorCQkJICAgICAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpKQorCSAgICAgICYmIHdlbmNsb3NlKHV3aW4sIGV2ZW50LnksIGV2ZW50LngpKQorCSAgICB7CQkJLyogd2UgcmVhY3Qgb25seSBpZiB0aGUgY2xpY2sgd2FzIGluIHRoZSB1c2Vyd2luLCB0aGF0IG1lYW5zCisJCQkJICogaW5zaWRlIHRoZSBtZW51IGRpc3BsYXkgYXJlYSBvciBhdCB0aGUgZGVjb3JhdGlvbiB3aW5kb3cuCisJCQkJICovCisJICAgICAgV0lORE9XICpzdWIgPSBHZXRfTWVudV9XaW5kb3cobWVudSk7CisJICAgICAgaW50IHJ5ID0gZXZlbnQueSwgcnggPSBldmVudC54OwkvKiBzY3JlZW4gY29vcmRpbmF0ZXMgKi8KKworCSAgICAgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJICAgICAgaWYgKG1vdXNlX3RyYWZvKCZyeSwgJnJ4LCBGQUxTRSkpCisJCXsJCS8qIHJ4LCByeSBhcmUgbm93ICJjdXJzZXMiIGNvb3JkaW5hdGVzICovCisJCSAgaWYgKHJ5IDwgc3ViLT5fYmVneSkKKwkJICAgIHsJCS8qIHdlIGNsaWNrZWQgYWJvdmUgdGhlIGRpc3BsYXkgcmVnaW9uOyB0aGlzIGlzCisJCQkJICogaW50ZXJwcmV0ZWQgYXMgInNjcm9sbCB1cCIgcmVxdWVzdAorCQkJCSAqLworCQkgICAgICBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9DTElDS0VEKQorCQkJcmVzdWx0ID0gbWVudV9kcml2ZXIobWVudSwgUkVRX1NDUl9VTElORSk7CisJCSAgICAgIGVsc2UgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpCisJCQlyZXN1bHQgPSBtZW51X2RyaXZlcihtZW51LCBSRVFfU0NSX1VQQUdFKTsKKwkJICAgICAgZWxzZSBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCkKKwkJCXJlc3VsdCA9IG1lbnVfZHJpdmVyKG1lbnUsIFJFUV9GSVJTVF9JVEVNKTsKKwkJICAgICAgUkVUVVJOKHJlc3VsdCk7CisJCSAgICB9CisJCSAgZWxzZSBpZiAocnkgPiBzdWItPl9iZWd5ICsgc3ViLT5fbWF4eSkKKwkJICAgIHsJCS8qIHdlIGNsaWNrZWQgYmVsb3cgdGhlIGRpc3BsYXkgcmVnaW9uOyB0aGlzIGlzCisJCQkJICogaW50ZXJwcmV0ZWQgYXMgInNjcm9sbCBkb3duIiByZXF1ZXN0CisJCQkJICovCisJCSAgICAgIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0NMSUNLRUQpCisJCQlyZXN1bHQgPSBtZW51X2RyaXZlcihtZW51LCBSRVFfU0NSX0RMSU5FKTsKKwkJICAgICAgZWxzZSBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCkKKwkJCXJlc3VsdCA9IG1lbnVfZHJpdmVyKG1lbnUsIFJFUV9TQ1JfRFBBR0UpOworCQkgICAgICBlbHNlIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX1RSSVBMRV9DTElDS0VEKQorCQkJcmVzdWx0ID0gbWVudV9kcml2ZXIobWVudSwgUkVRX0xBU1RfSVRFTSk7CisJCSAgICAgIFJFVFVSTihyZXN1bHQpOworCQkgICAgfQorCQkgIGVsc2UgaWYgKHdlbmNsb3NlKHN1YiwgZXZlbnQueSwgZXZlbnQueCkpCisJCSAgICB7CQkvKiBJbnNpZGUgdGhlIGFyZWEgd2UgdHJ5IHRvIGZpbmQgdGhlIGhpdCBpdGVtICovCisJCSAgICAgIGludCBpLCB4LCB5LCBlcnI7CisKKwkJICAgICAgcnkgPSBldmVudC55OworCQkgICAgICByeCA9IGV2ZW50Lng7CisJCSAgICAgIGlmICh3bW91c2VfdHJhZm8oc3ViLCAmcnksICZyeCwgRkFMU0UpKQorCQkJeworCQkJICBmb3IgKGkgPSAwOyBpIDwgbWVudS0+bml0ZW1zOyBpKyspCisJCQkgICAgeworCQkJICAgICAgZXJyID0gX25jX21lbnVfY3Vyc29yX3BvcyhtZW51LCBtZW51LT5pdGVtc1tpXSwKKwkJCQkJCQkmeSwgJngpOworCQkJICAgICAgaWYgKEVfT0sgPT0gZXJyKQorCQkJCXsKKwkJCQkgIGlmICgocnkgPT0geSkgJiYKKwkJCQkgICAgICAocnggPj0geCkgJiYKKwkJCQkgICAgICAocnggPCB4ICsgbWVudS0+aXRlbWxlbikpCisJCQkJICAgIHsKKwkJCQkgICAgICBpdGVtID0gbWVudS0+aXRlbXNbaV07CisJCQkJICAgICAgcmVzdWx0ID0gRV9PSzsKKwkJCQkgICAgICBicmVhazsKKwkJCQkgICAgfQorCQkJCX0KKwkJCSAgICB9CisJCQkgIGlmIChFX09LID09IHJlc3VsdCkKKwkJCSAgICB7CS8qIFdlIGZvdW5kIGFuIGl0ZW0sIG5vdyB3ZSBjYW4gaGFuZGxlIHRoZSBjbGljay4KKwkJCQkgKiBBIHNpbmdsZSBjbGljayBqdXN0IHBvc2l0aW9ucyB0aGUgbWVudSBjdXJzb3IKKwkJCQkgKiB0byB0aGUgY2xpY2tlZCBpdGVtLiBBIGRvdWJsZSBjbGljayB0b2dnbGVzCisJCQkJICogdGhlIGl0ZW0uCisJCQkJICovCisJCQkgICAgICBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCkKKwkJCQl7CisJCQkJICBfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0obWVudSwKKwkJCQkJCQkJIG15X3RvcF9yb3csCisJCQkJCQkJCSBpdGVtKTsKKwkJCQkgIG1lbnVfZHJpdmVyKG1lbnUsIFJFUV9UT0dHTEVfSVRFTSk7CisJCQkJICByZXN1bHQgPSBFX1VOS05PV05fQ09NTUFORDsKKwkJCQl9CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwl9CisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisgICAgICBlbHNlCisJcmVzdWx0ID0gRV9VTktOT1dOX0NPTU1BTkQ7CisgICAgfQorCisgIGlmIChFX09LID09IHJlc3VsdCkKKyAgICB7CisgICAgICAvKiBBZGp1c3QgdGhlIHRvcCByb3cgaWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIGN1cnJlbnQgaXRlbSB1bmZvcnR1bmF0ZWx5CisgICAgICAgICBkb2Vzbid0IGFwcGVhciBpbiB0aGUgbWVudSB3aW5kb3cgKi8KKyAgICAgIGlmIChpdGVtLT55IDwgbXlfdG9wX3JvdykKKwlteV90b3Bfcm93ID0gaXRlbS0+eTsKKyAgICAgIGVsc2UgaWYgKGl0ZW0tPnkgPj0gKG15X3RvcF9yb3cgKyBtZW51LT5hcm93cykpCisJbXlfdG9wX3JvdyA9IGl0ZW0tPnkgLSBtZW51LT5hcm93cyArIDE7CisKKyAgICAgIF9uY19OZXdfVG9wUm93X2FuZF9DdXJyZW50SXRlbShtZW51LCBteV90b3Bfcm93LCBpdGVtKTsKKworICAgIH0KKworICBSRVRVUk4ocmVzdWx0KTsKK30KKworLyogbV9kcml2ZXIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9mb3JtYXQuYyBiL21lbnUvbV9mb3JtYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzNjYjI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2Zvcm1hdC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFNldCBhbmQgZ2V0IG1heGltdW0gbnVtYmVycyBvZiByb3dzIGFuZCBjb2x1bW5zIGluIG1lbnVzICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fZm9ybWF0LmMsdiAxLjE1IDIwMDQvMTIvMTEgMjM6MTE6MjEgdG9tIEV4cCAkIikKKworI2RlZmluZSBtaW5pbXVtKGEsYikgKChhKTwoYikgPyAoYSk6IChiKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfZm9ybWF0KE1FTlUgKm1lbnUsIGludCByb3dzLCBpbnQgY29scykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgb2YgaXRlbXMKK3wgICAgICAgICAgICAgICAgICAgIHRoYXQgbWF5IGJlIGRpc3BsYXllZCBhdCBvbmUgdGltZSBvbiBhIG1lbnUuIElmIHRoZQorfCAgICAgICAgICAgICAgICAgICAgbWVudSBjb250YWlucyBtb3JlIGl0ZW1zIHRoYW4gY2FuIGJlIGRpc3BsYXllZCBhdAorfCAgICAgICAgICAgICAgICAgICAgb25jZSwgdGhlIG1lbnUgd2lsbCBiZSBzY3JvbGxhYmxlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAgICAgLSBpbnZhbGlkIHZhbHVlcyBwYXNzZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgICAgICAgLSB0aGVyZSBhcmUgbm8gaXRlbXMgY29ubmVjdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAgICAgICAgIC0gdGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV9mb3JtYXQoTUVOVSAqIG1lbnUsIGludCByb3dzLCBpbnQgY29scykKK3sKKyAgaW50IHRvdGFsX3Jvd3MsIHRvdGFsX2NvbHM7CisKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X2Zvcm1hdCglcCwlZCwlZCkiKSwgbWVudSwgcm93cywgY29scykpOworCisgIGlmIChyb3dzIDwgMCB8fCBjb2xzIDwgMCkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChtZW51KQorICAgIHsKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorCVJFVFVSTihFX1BPU1RFRCk7CisKKyAgICAgIGlmICghKG1lbnUtPml0ZW1zKSkKKwlSRVRVUk4oRV9OT1RfQ09OTkVDVEVEKTsKKworICAgICAgaWYgKHJvd3MgPT0gMCkKKwlyb3dzID0gbWVudS0+ZnJvd3M7CisgICAgICBpZiAoY29scyA9PSAwKQorCWNvbHMgPSBtZW51LT5mY29sczsKKworICAgICAgaWYgKG1lbnUtPnBhdHRlcm4pCisJUmVzZXRfUGF0dGVybihtZW51KTsKKworICAgICAgbWVudS0+ZnJvd3MgPSByb3dzOworICAgICAgbWVudS0+ZmNvbHMgPSBjb2xzOworCisgICAgICBhc3NlcnQocm93cyA+IDAgJiYgY29scyA+IDApOworICAgICAgdG90YWxfcm93cyA9IChtZW51LT5uaXRlbXMgLSAxKSAvIGNvbHMgKyAxOworICAgICAgdG90YWxfY29scyA9IChtZW51LT5vcHQgJiBPX1JPV01BSk9SKSA/CisJbWluaW11bShtZW51LT5uaXRlbXMsIGNvbHMpIDoKKwkobWVudS0+bml0ZW1zIC0gMSkgLyB0b3RhbF9yb3dzICsgMTsKKworICAgICAgbWVudS0+cm93cyA9IHRvdGFsX3Jvd3M7CisgICAgICBtZW51LT5jb2xzID0gdG90YWxfY29sczsKKyAgICAgIG1lbnUtPmFyb3dzID0gbWluaW11bSh0b3RhbF9yb3dzLCByb3dzKTsKKyAgICAgIG1lbnUtPnRvcHJvdyA9IDA7CisgICAgICBtZW51LT5jdXJpdGVtID0gKihtZW51LT5pdGVtcyk7CisgICAgICBhc3NlcnQobWVudS0+Y3VyaXRlbSk7CisgICAgICBtZW51LT5zdGF0dXMgfD0gX0xJTktfTkVFREVEOworICAgICAgX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgobWVudSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJvd3MgPiAwKQorCV9uY19EZWZhdWx0X01lbnUuZnJvd3MgPSByb3dzOworICAgICAgaWYgKGNvbHMgPiAwKQorCV9uY19EZWZhdWx0X01lbnUuZmNvbHMgPSBjb2xzOworICAgIH0KKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBtZW51X2Zvcm1hdChjb25zdCBNRU5VICptZW51LCBpbnQgKnJvd3MsIGludCAqY29scykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgdGhhdCBtYXkKK3wgICAgICAgICAgICAgICAgICAgIGJlIGRpc3BsYXllZCBhdCBvbmUgdGltZSBvbiBtZW51LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCittZW51X2Zvcm1hdChjb25zdCBNRU5VICogbWVudSwgaW50ICpyb3dzLCBpbnQgKmNvbHMpCit7CisgIGlmIChyb3dzKQorICAgICpyb3dzID0gTm9ybWFsaXplX01lbnUobWVudSktPmZyb3dzOworICBpZiAoY29scykKKyAgICAqY29scyA9IE5vcm1hbGl6ZV9NZW51KG1lbnUpLT5mY29sczsKK30KKworLyogbV9mb3JtYXQuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9nbG9iYWwuYyBiL21lbnUvbV9nbG9iYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGU4MzZkCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2dsb2JhbC5jCkBAIC0wLDAgKzEsNTk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2dsb2JhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIEdsb2JhbGx5IHVzZWQgaW50ZXJuYWwgcm91dGluZXMgYW5kIHRoZSBkZWZhdWx0IG1lbnUgYW5kIGl0ZW0gc3RydWN0dXJlcyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fZ2xvYmFsLmMsdiAxLjIzIDIwMDUvMTIvMzEgMjE6NTE6NTIgdG9tIEV4cCAkIikKKworc3RhdGljIGNoYXIgbWFya1tdID0gIi0iOworLyogKklOREVOVC1PRkYqICovCitOQ1VSU0VTX0VYUE9SVF9WQVIoTUVOVSkgX25jX0RlZmF1bHRfTWVudSA9IHsKKyAgMTYsCQkJCSAgLyogTnIuIG9mIGNoYXJzIGhpZ2ggKi8KKyAgMSwJCQkJICAvKiBOci4gb2YgY2hhcnMgd2lkZSAqLworICAxNiwJCQkJICAvKiBOci4gb2YgaXRlbXMgaGlnaCAqLworICAxLAkJCSAgICAgICAgICAvKiBOci4gb2YgaXRlbXMgd2lkZSAqLworICAxNiwJCQkJICAvKiBOci4gb2YgZm9ybWF0dGVkIGl0ZW1zIGhpZ2ggKi8KKyAgMSwJCQkJICAvKiBOci4gb2YgZm9ybWF0dGVkIGl0ZW1zIHdpZGUgKi8KKyAgMTYsCQkJCSAgLyogTnIuIG9mIGl0ZW1zIGhpZ2ggKGFjdHVhbCkgKi8KKyAgMCwJCQkJICAvKiBsZW5ndGggb2Ygd2lkZXN0IG5hbWUgKi8KKyAgMCwJCQkJICAvKiBsZW5ndGggb2Ygd2lkZXN0IGRlc2NyaXB0aW9uICovCisgIDEsCQkJCSAgLyogbGVuZ3RoIG9mIG1hcmsgKi8KKyAgMSwJCQkJICAvKiBsZW5ndGggb2Ygb25lIGl0ZW0gKi8KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGFjaW5nIGZvciBkZXNjcmlwdG9yICovIAorICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwYWNpbmcgZm9yIGNvbHVtbnMgKi8KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGFjaW5nIGZvciByb3dzICovCisgIChjaGFyICopMCwJCQkgIC8qIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIG1hdGNoIGNoYXJzICovCisgIDAsCQkJCSAgLyogSW5kZXggaW50byBwYXR0ZXJuIGJ1ZmZlciAqLworICAoV0lORE9XICopMCwJCQkgIC8qIFdpbmRvdyBjb250YWluaW5nIGVudGlyZSBtZW51ICovCisgIChXSU5ET1cgKikwLAkJCSAgLyogUG9ydGlvbiBvZiBtZW51IGRpc3BsYXllZCAqLworICAoV0lORE9XICopMCwJCQkgIC8qIFVzZXIncyB3aW5kb3cgKi8KKyAgKFdJTkRPVyAqKTAsCQkJICAvKiBVc2VyJ3Mgc3Vid2luZG93ICovCisgIChJVEVNICoqKTAsCQkJICAvKiBMaXN0IG9mIGl0ZW1zICovCisgIDAsCQkJCSAgLyogVG90YWwgTnIuIG9mIGl0ZW1zIGluIG1lbnUgKi8KKyAgKElURU0gKikwLAkJCSAgLyogQ3VycmVudCBpdGVtICovCisgIDAsCQkJCSAgLyogVG9wIHJvdyBvZiBtZW51ICovCisgIChjaHR5cGUpQV9SRVZFUlNFLAkJICAvKiBBdHRyaWJ1dGUgZm9yIHNlbGVjdGlvbiAqLworICAoY2h0eXBlKUFfTk9STUFMLAkJICAvKiBBdHRyaWJ1dGUgZm9yIG5vbnNlbGVjdGlvbiAqLworICAoY2h0eXBlKUFfVU5ERVJMSU5FLAkJICAvKiBBdHRyaWJ1dGUgZm9yIGluYWN0aXZlICovCQorICAnICcsICAJCQkgIC8qIFBhZCBjaGFyYWN0ZXIgKi8KKyAgKE1lbnVfSG9vaykwLAkJCSAgLyogTWVudSBpbml0ICovCisgIChNZW51X0hvb2spMCwJCQkgIC8qIE1lbnUgdGVybSAqLworICAoTWVudV9Ib29rKTAsCQkJICAvKiBJdGVtIGluaXQgKi8KKyAgKE1lbnVfSG9vaykwLAkJCSAgLyogSXRlbSB0ZXJtICovCisgICh2b2lkICopMCwJCQkgIC8qIHVzZXJwdHIgKi8KKyAgbWFyaywJCQkJICAvKiBtYXJrICovCisgIEFMTF9NRU5VX09QVFMsICAgICAgICAgICAgICAgICAgLyogb3B0aW9ucyAqLworICAwCQkJICAgICAgICAgIC8qIHN0YXR1cyAqLwkgICAgCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoSVRFTSkgX25jX0RlZmF1bHRfSXRlbSA9IHsKKyAgeyAoY2hhciAqKTAsIDAgfSwJCSAgLyogbmFtZSAqLworICB7IChjaGFyICopMCwgMCB9LAkJICAvKiBkZXNjcmlwdGlvbiAqLworICAoTUVOVSAqKTAsCQkgICAgICAgICAgLyogUG9pbnRlciB0byBwYXJlbnQgbWVudSAqLworICAoY2hhciAqKTAsCQkJICAvKiBVc2VycG9pbnRlciAqLworICBBTExfSVRFTV9PUFRTLAkJICAvKiBvcHRpb25zICovCisgIDAsCQkJCSAgLyogSXRlbSBOci4gKi8KKyAgMCwJCQkJICAvKiB5ICovCisgIDAsCQkJCSAgLyogeCAqLworICBGQUxTRSwJCQkgIC8qIHZhbHVlICovCisgIChJVEVNICopMCwJCSAgICAgICAgICAvKiBsZWZ0ICovCisgIChJVEVNICopMCwJCSAgICAgICAgICAvKiByaWdodCAqLworICAoSVRFTSAqKTAsCQkgICAgICAgICAgLyogdXAgKi8KKyAgKElURU0gKikwCQkgICAgICAgICAgLyogZG93biAqLworICB9OworLyogKklOREVOVC1PTiogKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIENvbXB1dGVNYXhpbXVtX05hbWVEZXNjX0xlbnRocyhNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2FsY3VsYXRlcyB0aGUgbWF4aW11bSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBsZW5ndGhzCit8ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaXRlbXMgY29ubmVjdGVkIHRvIHRoZSBtZW51Cit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIHZvaWQKK0NvbXB1dGVNYXhpbXVtX05hbWVEZXNjX0xlbmd0aHMoTUVOVSAqIG1lbnUpCit7CisgIHVuc2lnbmVkIE1heGltdW1OYW1lTGVuZ3RoID0gMDsKKyAgdW5zaWduZWQgTWF4aW11bURlc2NyaXB0aW9uTGVuZ3RoID0gMDsKKyAgSVRFTSAqKml0ZW1zOworICB1bnNpZ25lZCBjaGVjazsKKworICBhc3NlcnQobWVudSAmJiBtZW51LT5pdGVtcyk7CisgIGZvciAoaXRlbXMgPSBtZW51LT5pdGVtczsgKml0ZW1zOyBpdGVtcysrKQorICAgIHsKKyAgICAgIGNoZWNrID0gX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKCYoKCppdGVtcyktPm5hbWUpKTsKKyAgICAgIGlmIChjaGVjayA+IE1heGltdW1OYW1lTGVuZ3RoKQorCU1heGltdW1OYW1lTGVuZ3RoID0gY2hlY2s7CisKKyAgICAgIGNoZWNrID0gX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKCYoKCppdGVtcyktPmRlc2NyaXB0aW9uKSk7CisgICAgICBpZiAoY2hlY2sgPiBNYXhpbXVtRGVzY3JpcHRpb25MZW5ndGgpCisJTWF4aW11bURlc2NyaXB0aW9uTGVuZ3RoID0gY2hlY2s7CisgICAgfQorCisgIG1lbnUtPm5hbWVsZW4gPSBNYXhpbXVtTmFtZUxlbmd0aDsKKyAgbWVudS0+ZGVzY2xlbiA9IE1heGltdW1EZXNjcmlwdGlvbkxlbmd0aDsKKyAgVCgoIkNvbXB1dGVNYXhpbXVtX05hbWVEZXNjX0xlbmd0aHMgJWQsJWQiLCBtZW51LT5uYW1lbGVuLCBtZW51LT5kZXNjbGVuKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBSZXNldENvbm5lY3Rpb25JbmZvKE1FTlUgKiwgSVRFTSAqKikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJlc2V0IGFsbCBpbmZvcm1hdGlvbnMgaW4gdGhlIG1lbnUgYW5kIHRoZSBpdGVtcyBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGl0ZW0gYXJyYXkgdGhhdCBpbmRpY2F0ZXMgYSBjb25uZWN0aW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIHZvaWQKK1Jlc2V0Q29ubmVjdGlvbkluZm8oTUVOVSAqIG1lbnUsIElURU0gKiogaXRlbXMpCit7CisgIElURU0gKippdGVtOworCisgIGFzc2VydChtZW51ICYmIGl0ZW1zKTsKKyAgZm9yIChpdGVtID0gaXRlbXM7ICppdGVtOyBpdGVtKyspCisgICAgeworICAgICAgKCppdGVtKS0+aW5kZXggPSAwOworICAgICAgKCppdGVtKS0+aW1lbnUgPSAoTUVOVSAqKSAwOworICAgIH0KKyAgaWYgKG1lbnUtPnBhdHRlcm4pCisgICAgZnJlZShtZW51LT5wYXR0ZXJuKTsKKyAgbWVudS0+cGF0dGVybiA9IChjaGFyICopMDsKKyAgbWVudS0+cGluZGV4ID0gMDsKKyAgbWVudS0+aXRlbXMgPSAoSVRFTSAqKikgMDsKKyAgbWVudS0+bml0ZW1zID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGJvb2wgX25jX0Nvbm5lY3RfSXRlbXMoTUVOVSAqbWVudSwgSVRFTSAqKml0ZW1zKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ29ubmVjdCB0aGUgaXRlbXMgaW4gdGhlIGl0ZW0gYXJyYXkgdG8gdGhlIG1lbnUuCit8ICAgICAgICAgICAgICAgICAgICBEZWNvcmF0ZSBhbGwgdGhlIGl0ZW1zIHdpdGggYSBudW1iZXIgYW5kIGEgYmFja3dhcmQKK3wgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgdG8gdGhlIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgICAgIC0gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgICAgIC0gY29ubmVjdGlvbiBmYWlsZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX0Nvbm5lY3RfSXRlbXMoTUVOVSAqIG1lbnUsIElURU0gKiogaXRlbXMpCit7CisgIElURU0gKippdGVtOworICB1bnNpZ25lZCBpbnQgSXRlbUNvdW50ID0gMDsKKworICBpZiAobWVudSAmJiBpdGVtcykKKyAgICB7CisgICAgICBmb3IgKGl0ZW0gPSBpdGVtczsgKml0ZW07IGl0ZW0rKykKKwl7CisJICBpZiAoKCppdGVtKS0+aW1lbnUpCisJICAgIHsKKwkgICAgICAvKiBpZiBhIGl0ZW0gaXMgYWxyZWFkeSBjb25uZWN0ZWQsIHJlamVjdCBjb25uZWN0aW9uICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBpZiAoISgqaXRlbSkpCisJLyogd2UgcmVhY2hlZCB0aGUgZW5kLCBzbyB0aGVyZSB3YXMgbm8gY29ubmVjdGVkIGl0ZW0gKi8KKwl7CisJICBmb3IgKGl0ZW0gPSBpdGVtczsgKml0ZW07IGl0ZW0rKykKKwkgICAgeworCSAgICAgIGlmIChtZW51LT5vcHQgJiBPX09ORVZBTFVFKQorCQl7CisJCSAgKCppdGVtKS0+dmFsdWUgPSBGQUxTRTsKKwkJfQorCSAgICAgICgqaXRlbSktPmluZGV4ID0gSXRlbUNvdW50Kys7CisJICAgICAgKCppdGVtKS0+aW1lbnUgPSBtZW51OworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAoRkFMU0UpOworCisgIGlmIChJdGVtQ291bnQgIT0gMCkKKyAgICB7CisgICAgICBtZW51LT5pdGVtcyA9IGl0ZW1zOworICAgICAgbWVudS0+bml0ZW1zID0gSXRlbUNvdW50OworICAgICAgQ29tcHV0ZU1heGltdW1fTmFtZURlc2NfTGVuZ3RocyhtZW51KTsKKyAgICAgIGlmICgobWVudS0+cGF0dGVybiA9IHR5cGVNYWxsb2MoY2hhciwgKHVuc2lnbmVkKSgxICsgbWVudS0+bmFtZWxlbikpKSkKKwl7CisJICBSZXNldF9QYXR0ZXJuKG1lbnUpOworCSAgc2V0X21lbnVfZm9ybWF0KG1lbnUsIG1lbnUtPmZyb3dzLCBtZW51LT5mY29scyk7CisJICBtZW51LT5jdXJpdGVtID0gKml0ZW1zOworCSAgbWVudS0+dG9wcm93ID0gMDsKKwkgIHJldHVybiAoVFJVRSk7CisJfQorICAgIH0KKworICAvKiBJZiB3ZSBmYWxsIHRocm91Z2ggdG8gdGhpcyBwb2ludCwgd2UgaGF2ZSB0byByZXNldCBhbGwgaXRlbXMgY29ubmVjdGlvbiAKKyAgICAgYW5kIGluZm9ybSBhYm91dCBhIHJlamVjdCBjb25uZWN0aW9uICovCisgIFJlc2V0Q29ubmVjdGlvbkluZm8obWVudSwgaXRlbXMpOworICByZXR1cm4gKEZBTFNFKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX0Rpc2Nvbm5lY3RfSXRlbXMoTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIERpc2Nvbm5lY3QgdGhlIG1lbnVzIGl0ZW0gYXJyYXkgZnJvbSB0aGUgbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfRGlzY29ubmVjdF9JdGVtcyhNRU5VICogbWVudSkKK3sKKyAgaWYgKG1lbnUgJiYgbWVudS0+aXRlbXMpCisgICAgUmVzZXRDb25uZWN0aW9uSW5mbyhtZW51LCBtZW51LT5pdGVtcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKGNvbnN0IFRFWFQgKiBpdGVtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgYSBURVhULgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgdGhlIHdpZHRoCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKGNvbnN0IFRFWFQgKiBpdGVtIC8qRklYTUU6IGxpbWl0IGxlbmd0aCAqLyApCit7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgaW50IHJlc3VsdCA9IGl0ZW0tPmxlbmd0aDsKKworICBUKChUX0NBTExFRCgiX25jX21lbnVfdGV4dF93aWR0aCglcCkiKSwgaXRlbSkpOworICBpZiAocmVzdWx0ICE9IDAgJiYgaXRlbS0+c3RyICE9IDApCisgICAgeworICAgICAgaW50IGNvdW50ID0gbWJzdG93Y3MoMCwgaXRlbS0+c3RyLCAwKTsKKyAgICAgIHdjaGFyX3QgKnRlbXAgPSAwOworCisgICAgICBpZiAoY291bnQgPiAwCisJICAmJiAodGVtcCA9IHR5cGVNYWxsb2Mod2NoYXJfdCwgMiArIGNvdW50KSkgIT0gMCkKKwl7CisJICBpbnQgbjsKKworCSAgcmVzdWx0ID0gMDsKKwkgIG1ic3Rvd2NzKHRlbXAsIGl0ZW0tPnN0ciwgKHVuc2lnbmVkKWNvdW50KTsKKwkgIGZvciAobiA9IDA7IG4gPCBjb3VudDsgKytuKQorCSAgICB7CisJICAgICAgaW50IHRlc3QgPSB3Y3dpZHRoKHRlbXBbbl0pOworCisJICAgICAgaWYgKHRlc3QgPD0gMCkKKwkJdGVzdCA9IDE7CisJICAgICAgcmVzdWx0ICs9IHRlc3Q7CisJICAgIH0KKwkgIGZyZWUodGVtcCk7CisJfQorICAgIH0KKyAgcmV0dXJuQ29kZShyZXN1bHQpOworI2Vsc2UKKyAgcmV0dXJuIGl0ZW0tPmxlbmd0aDsKKyNlbmRpZgorfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgd2lkdGggb2YgYSBtZW51IGVudHJ5IGZvciB3aWRlLWNoYXJhY3RlcnMuCisgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorc3RhdGljIGludAorY2FsY3VsYXRlX2FjdHVhbF93aWR0aChNRU5VICogbWVudSwgYm9vbCBuYW1lKQoreworICBpbnQgd2lkdGggPSAwOworICBpbnQgY2hlY2sgPSAwOworICBJVEVNICoqaXRlbXM7CisKKyAgYXNzZXJ0KG1lbnUgJiYgbWVudS0+aXRlbXMpOworCisgIGlmIChtZW51LT5pdGVtcyAhPSAwKQorICAgIHsKKyAgICAgIGZvciAoaXRlbXMgPSBtZW51LT5pdGVtczsgKml0ZW1zOyBpdGVtcysrKQorCXsKKwkgIGlmIChuYW1lKQorCSAgICB7CisJICAgICAgY2hlY2sgPSBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoJigoKml0ZW1zKS0+bmFtZSkpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjaGVjayA9IF9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aCgmKCgqaXRlbXMpLT5kZXNjcmlwdGlvbikpOworCSAgICB9CisJICBpZiAoY2hlY2sgPiB3aWR0aCkKKwkgICAgd2lkdGggPSBjaGVjazsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgd2lkdGggPSAobmFtZSA/IG1lbnUtPm5hbWVsZW4gOiBtZW51LT5kZXNjbGVuKTsKKyAgICB9CisKKyAgVCgoImNhbGN1bGF0ZV9hY3R1YWxfd2lkdGggJXMgPSAlZC8lZCIsCisgICAgIG5hbWUgPyAibmFtZSIgOiAiZGVzYyIsCisgICAgIHdpZHRoLAorICAgICBuYW1lID8gbWVudS0+bmFtZWxlbiA6IG1lbnUtPmRlc2NsZW4pKTsKKyAgcmV0dXJuIHdpZHRoOworfQorI2Vsc2UKKyNkZWZpbmUgY2FsY3VsYXRlX2FjdHVhbF93aWR0aChtZW51LCBuYW1lKSAobmFtZSA/IG1lbnUtPm5hbWVsZW4gOiBtZW51LT5kZXNjbGVuKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkIF9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoKE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhbiBpdGVtIGFuZCB0aGUgd2lkdGggb2YgdGhlCit8ICAgICAgICAgICAgICAgICAgICB3aG9sZSBtZW51LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChNRU5VICogbWVudSkKK3sKKyAgaW50IGw7CisKKyAgYXNzZXJ0KG1lbnUpOworCisgIG1lbnUtPmhlaWdodCA9IDEgKyBtZW51LT5zcGNfcm93cyAqIChtZW51LT5hcm93cyAtIDEpOworCisgIGwgPSBjYWxjdWxhdGVfYWN0dWFsX3dpZHRoKG1lbnUsIFRSVUUpOworICBsICs9IG1lbnUtPm1hcmtsZW47CisKKyAgaWYgKChtZW51LT5vcHQgJiBPX1NIT1dERVNDKSAmJiAobWVudS0+ZGVzY2xlbiA+IDApKQorICAgIHsKKyAgICAgIGwgKz0gY2FsY3VsYXRlX2FjdHVhbF93aWR0aChtZW51LCBGQUxTRSk7CisgICAgICBsICs9IG1lbnUtPnNwY19kZXNjOworICAgIH0KKworICBtZW51LT5pdGVtbGVuID0gbDsKKyAgbCAqPSBtZW51LT5jb2xzOworICBsICs9IChtZW51LT5jb2xzIC0gMSkgKiBtZW51LT5zcGNfY29sczsJLyogZm9yIHRoZSBwYWRkaW5nIGJldHdlZW4gdGhlIGNvbHVtbnMgKi8KKyAgbWVudS0+d2lkdGggPSBsOworCisgIFQoKCJfbmNfQ2FsY3VsYXRlSXRlbV9MZW5ndGhfYW5kX1dpZHRoIGNvbHVtbnMgJWQsIGl0ZW0gJWQsIHdpZHRoICVkIiwKKyAgICAgbWVudS0+Y29scywKKyAgICAgbWVudS0+aXRlbWxlbiwKKyAgICAgbWVudS0+d2lkdGgpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX0xpbmtfSXRlbShNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3RhdGljYWxseSBjYWxjdWxhdGUgZm9yIGV2ZXJ5IGl0ZW0gaXRzIGZvdXIgbmVpZ2hib3JzLgorfCAgICAgICAgICAgICAgICAgICAgVGhpcyBkZXBlbmRzIG9uIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbWVudS4gVGhpcworfCAgICAgICAgICAgICAgICAgICAgc3RhdGljIGFwcHJvYWNoIHNpbXBsaWZpZXMgbmF2aWdhdGlvbiBpbiB0aGUgbWVudSBhIGxvdC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX0xpbmtfSXRlbXMoTUVOVSAqIG1lbnUpCit7CisgIGlmIChtZW51ICYmIG1lbnUtPml0ZW1zICYmICoobWVudS0+aXRlbXMpKQorICAgIHsKKyAgICAgIGludCBpLCBqOworICAgICAgSVRFTSAqaXRlbTsKKyAgICAgIGludCBOdW1iZXJfT2ZfSXRlbXMgPSBtZW51LT5uaXRlbXM7CisgICAgICBpbnQgY29sID0gMCwgcm93ID0gMDsKKyAgICAgIGludCBMYXN0X2luX1JvdzsKKyAgICAgIGludCBMYXN0X2luX0NvbHVtbjsKKyAgICAgIGJvb2wgY3ljbGUgPSAobWVudS0+b3B0ICYgT19OT05DWUNMSUMpID8gRkFMU0UgOiBUUlVFOworCisgICAgICBtZW51LT5zdGF0dXMgJj0gfl9MSU5LX05FRURFRDsKKworICAgICAgaWYgKG1lbnUtPm9wdCAmIE9fUk9XTUFKT1IpCisJeworCSAgaW50IE51bWJlcl9PZl9Db2x1bW5zID0gbWVudS0+Y29sczsKKworCSAgZm9yIChpID0gMDsgaSA8IE51bWJlcl9PZl9JdGVtczsgaSsrKQorCSAgICB7CisJICAgICAgaXRlbSA9IG1lbnUtPml0ZW1zW2ldOworCisJICAgICAgTGFzdF9pbl9Sb3cgPSByb3cgKiBOdW1iZXJfT2ZfQ29sdW1ucyArIChOdW1iZXJfT2ZfQ29sdW1ucyAtIDEpOworCisJICAgICAgaXRlbS0+bGVmdCA9IChjb2wpID8KKwkgICAgICAvKiBpZiB3ZSBhcmUgbm90IGluIHRoZSBsZWZ0bW9zdCBjb2x1bW4sIHdlIGNhbiB1c2UgdGhlCisJICAgICAgICAgcHJlZGVjZXNzb3IgaW4gdGhlIGl0ZW1zIGFycmF5ICovCisJCW1lbnUtPml0ZW1zW2kgLSAxXSA6CisJCShjeWNsZSA/IG1lbnUtPml0ZW1zWyhMYXN0X2luX1JvdyA+PSBOdW1iZXJfT2ZfSXRlbXMpID8KKwkJCQkgICAgIE51bWJlcl9PZl9JdGVtcyAtIDEgOgorCQkJCSAgICAgTGFzdF9pbl9Sb3ddIDoKKwkJIChJVEVNICopIDApOworCisJICAgICAgaXRlbS0+cmlnaHQgPSAoKGNvbCA8IChOdW1iZXJfT2ZfQ29sdW1ucyAtIDEpKSAmJgorCQkJICAgICAoKGkgKyAxKSA8IE51bWJlcl9PZl9JdGVtcykKKwkJKT8KKwkJbWVudS0+aXRlbXNbaSArIDFdIDoKKwkJKGN5Y2xlID8gbWVudS0+aXRlbXNbcm93ICogTnVtYmVyX09mX0NvbHVtbnNdIDoKKwkJIChJVEVNICopIDAKKwkJKTsKKworCSAgICAgIExhc3RfaW5fQ29sdW1uID0gKG1lbnUtPnJvd3MgLSAxKSAqIE51bWJlcl9PZl9Db2x1bW5zICsgY29sOworCisJICAgICAgaXRlbS0+dXAgPSAocm93KSA/IG1lbnUtPml0ZW1zW2kgLSBOdW1iZXJfT2ZfQ29sdW1uc10gOgorCQkoY3ljbGUgPyBtZW51LT5pdGVtc1soTGFzdF9pbl9Db2x1bW4gPj0gTnVtYmVyX09mX0l0ZW1zKSA/CisJCQkJICAgICBOdW1iZXJfT2ZfSXRlbXMgLSAxIDoKKwkJCQkgICAgIExhc3RfaW5fQ29sdW1uXSA6CisJCSAoSVRFTSAqKSAwKTsKKworCSAgICAgIGl0ZW0tPmRvd24gPSAoKGkgKyBOdW1iZXJfT2ZfQ29sdW1ucykgPCBOdW1iZXJfT2ZfSXRlbXMpCisJCT8KKwkJbWVudS0+aXRlbXNbaSArIE51bWJlcl9PZl9Db2x1bW5zXSA6CisJCShjeWNsZSA/IG1lbnUtPml0ZW1zWyhyb3cgKyAxKSA8IG1lbnUtPnJvd3MgPworCQkJCSAgICAgTnVtYmVyX09mX0l0ZW1zIC0gMSA6IGNvbF0gOgorCQkgKElURU0gKikgMCk7CisJICAgICAgaXRlbS0+eCA9IGNvbDsKKwkgICAgICBpdGVtLT55ID0gcm93OworCSAgICAgIGlmICgrK2NvbCA9PSBOdW1iZXJfT2ZfQ29sdW1ucykKKwkJeworCQkgIHJvdysrOworCQkgIGNvbCA9IDA7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpbnQgTnVtYmVyX09mX1Jvd3MgPSBtZW51LT5yb3dzOworCisJICBmb3IgKGogPSAwOyBqIDwgTnVtYmVyX09mX0l0ZW1zOyBqKyspCisJICAgIHsKKwkgICAgICBpdGVtID0gbWVudS0+aXRlbXNbaSA9IChjb2wgKiBOdW1iZXJfT2ZfUm93cyArIHJvdyldOworCisJICAgICAgTGFzdF9pbl9Db2x1bW4gPSAobWVudS0+Y29scyAtIDEpICogTnVtYmVyX09mX1Jvd3MgKyByb3c7CisKKwkgICAgICBpdGVtLT5sZWZ0ID0gKGNvbCkgPworCQltZW51LT5pdGVtc1tpIC0gTnVtYmVyX09mX1Jvd3NdIDoKKwkJKGN5Y2xlID8gKExhc3RfaW5fQ29sdW1uID49IE51bWJlcl9PZl9JdGVtcykgPworCQkgbWVudS0+aXRlbXNbTGFzdF9pbl9Db2x1bW4gLSBOdW1iZXJfT2ZfUm93c10gOgorCQkgbWVudS0+aXRlbXNbTGFzdF9pbl9Db2x1bW5dIDoKKwkJIChJVEVNICopIDApOworCisJICAgICAgaXRlbS0+cmlnaHQgPSAoKGkgKyBOdW1iZXJfT2ZfUm93cykgPCBOdW1iZXJfT2ZfSXRlbXMpCisJCT8KKwkJbWVudS0+aXRlbXNbaSArIE51bWJlcl9PZl9Sb3dzXSA6CisJCShjeWNsZSA/IG1lbnUtPml0ZW1zW3Jvd10gOiAoSVRFTSAqKSAwKTsKKworCSAgICAgIExhc3RfaW5fUm93ID0gY29sICogTnVtYmVyX09mX1Jvd3MgKyAoTnVtYmVyX09mX1Jvd3MgLSAxKTsKKworCSAgICAgIGl0ZW0tPnVwID0gKHJvdykgPworCQltZW51LT5pdGVtc1tpIC0gMV0gOgorCQkoY3ljbGUgPworCQkgbWVudS0+aXRlbXNbKExhc3RfaW5fUm93ID49IE51bWJlcl9PZl9JdGVtcykgPworCQkJICAgICBOdW1iZXJfT2ZfSXRlbXMgLSAxIDoKKwkJCSAgICAgTGFzdF9pbl9Sb3ddIDoKKwkJIChJVEVNICopIDApOworCisJICAgICAgaXRlbS0+ZG93biA9IChyb3cgPCAoTnVtYmVyX09mX1Jvd3MgLSAxKSkKKwkJPworCQkobWVudS0+aXRlbXNbKChpICsgMSkgPCBOdW1iZXJfT2ZfSXRlbXMpID8KKwkJCSAgICAgaSArIDEgOgorCQkJICAgICAoY29sIC0gMSkgKiBOdW1iZXJfT2ZfUm93cyArIHJvdyArIDFdKSA6CisJCShjeWNsZSA/CisJCSBtZW51LT5pdGVtc1tjb2wgKiBOdW1iZXJfT2ZfUm93c10gOgorCQkgKElURU0gKikgMAorCQkpOworCisJICAgICAgaXRlbS0+eCA9IGNvbDsKKwkgICAgICBpdGVtLT55ID0gcm93OworCSAgICAgIGlmICgoKytyb3cpID09IE51bWJlcl9PZl9Sb3dzKQorCQl7CisJCSAgY29sKys7CisJCSAgcm93ID0gMDsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX1Nob3dfTWVudShjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVXBkYXRlIHRoZSB3aW5kb3cgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX1Nob3dfTWVudShjb25zdCBNRU5VICogbWVudSkKK3sKKyAgV0lORE9XICp3aW47CisgIGludCBtYXh5LCBtYXh4OworCisgIGFzc2VydChtZW51KTsKKyAgaWYgKChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKSAmJiAhKG1lbnUtPnN0YXR1cyAmIF9JTl9EUklWRVIpKQorICAgIHsKKyAgICAgIC8qIGFkanVzdCB0aGUgaW50ZXJuYWwgc3Vid2luZG93IHRvIHN0YXJ0IG9uIHRoZSBjdXJyZW50IHRvcCAqLworICAgICAgYXNzZXJ0KG1lbnUtPnN1Yik7CisgICAgICBtdmRlcndpbihtZW51LT5zdWIsIG1lbnUtPnNwY19yb3dzICogbWVudS0+dG9wcm93LCAwKTsKKyAgICAgIHdpbiA9IEdldF9NZW51X1dpbmRvdyhtZW51KTsKKworICAgICAgbWF4eSA9IGdldG1heHkod2luKTsKKyAgICAgIG1heHggPSBnZXRtYXh4KHdpbik7CisKKyAgICAgIGlmIChtZW51LT5oZWlnaHQgPCBtYXh5KQorCW1heHkgPSBtZW51LT5oZWlnaHQ7CisgICAgICBpZiAobWVudS0+d2lkdGggPCBtYXh4KQorCW1heHggPSBtZW51LT53aWR0aDsKKworICAgICAgY29weXdpbihtZW51LT5zdWIsIHdpbiwgMCwgMCwgMCwgMCwgbWF4eSAtIDEsIG1heHggLSAxLCAwKTsKKyAgICAgIHBvc19tZW51X2N1cnNvcihtZW51KTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkIF9uY19OZXdfVG9wUm93X2FuZF9DdXJyZW50SXRlbSgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVOVSAqbWVudSwgCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdfdG9wcm93LCAKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRFTSAqbmV3X2N1cnJlbnRfaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJlZGlzcGxheSB0aGUgbWVudSBzbyB0aGF0IHRoZSBnaXZlbiByb3cgYmVjb21lcyB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHRvcCByb3cgYW5kIHRoZSBnaXZlbiBpdGVtIGJlY29tZXMgdGhlIG5ldyBjdXJyZW50Cit8ICAgICAgICAgICAgICAgICAgICBpdGVtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCisgIF9uY19OZXdfVG9wUm93X2FuZF9DdXJyZW50SXRlbQorICAoTUVOVSAqIG1lbnUsIGludCBuZXdfdG9wcm93LCBJVEVNICogbmV3X2N1cnJlbnRfaXRlbSkKK3sKKyAgSVRFTSAqY3VyX2l0ZW07CisgIGJvb2wgbXRlcm1fY2FsbGVkID0gRkFMU0U7CisgIGJvb2wgaXRlcm1fY2FsbGVkID0gRkFMU0U7CisKKyAgYXNzZXJ0KG1lbnUpOworICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKyAgICB7CisgICAgICBpZiAobmV3X2N1cnJlbnRfaXRlbSAhPSBtZW51LT5jdXJpdGVtKQorCXsKKwkgIENhbGxfSG9vayhtZW51LCBpdGVtdGVybSk7CisJICBpdGVybV9jYWxsZWQgPSBUUlVFOworCX0KKyAgICAgIGlmIChuZXdfdG9wcm93ICE9IG1lbnUtPnRvcHJvdykKKwl7CisJICBDYWxsX0hvb2sobWVudSwgbWVudXRlcm0pOworCSAgbXRlcm1fY2FsbGVkID0gVFJVRTsKKwl9CisKKyAgICAgIGN1cl9pdGVtID0gbWVudS0+Y3VyaXRlbTsKKyAgICAgIGFzc2VydChjdXJfaXRlbSk7CisgICAgICBtZW51LT50b3Byb3cgPSBuZXdfdG9wcm93OworICAgICAgbWVudS0+Y3VyaXRlbSA9IG5ld19jdXJyZW50X2l0ZW07CisKKyAgICAgIGlmIChtdGVybV9jYWxsZWQpCisJeworCSAgQ2FsbF9Ib29rKG1lbnUsIG1lbnVpbml0KTsKKwl9CisgICAgICBpZiAoaXRlcm1fY2FsbGVkKQorCXsKKwkgIC8qIHRoaXMgbWVhbnMsIG1vdmUgZnJvbSB0aGUgb2xkIGN1cnJlbnRfaXRlbSB0byB0aGUgbmV3IG9uZS4uLiAqLworCSAgTW92ZV9Ub19DdXJyZW50X0l0ZW0obWVudSwgY3VyX2l0ZW0pOworCSAgQ2FsbF9Ib29rKG1lbnUsIGl0ZW1pbml0KTsKKwl9CisgICAgICBpZiAobXRlcm1fY2FsbGVkIHx8IGl0ZXJtX2NhbGxlZCkKKwl7CisJICBfbmNfU2hvd19NZW51KG1lbnUpOworCX0KKyAgICAgIGVsc2UKKwlwb3NfbWVudV9jdXJzb3IobWVudSk7CisgICAgfQorICBlbHNlCisgICAgewkJCQkvKiBpZiB3ZSBhcmUgbm90IHBvc3RlZCwgdGhpcyBpcyBxdWl0ZSBzaW1wbGUgKi8KKyAgICAgIG1lbnUtPnRvcHJvdyA9IG5ld190b3Byb3c7CisgICAgICBtZW51LT5jdXJpdGVtID0gbmV3X2N1cnJlbnRfaXRlbTsKKyAgICB9Cit9CisKKy8qIG1fZ2xvYmFsLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21faG9vay5jIGIvbWVudS9tX2hvb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc2OGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2hvb2suYwpAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9ob29rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBBc3NpZ24gYXBwbGljYXRpb24gc3BlY2lmaWMgcm91dGluZXMgZm9yIGF1dG9tYXRpYyBpbnZvY2F0aW9uIGJ5IG1lbnVzICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2hvb2suYyx2IDEuMTQgMjAwNC8xMi8yNSAyMTozOTo1MiB0b20gRXhwICQiKQorCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGZ1bmN0aW9uIHRvIHNldCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBob29rICovCisjZGVmaW5lIEdFTl9IT09LX1NFVF9GVU5DVElPTiggdHlwLCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgaW50IE5DVVJTRVNfQVBJIHNldF8gIyMgdHlwICMjIF8gIyMgbmFtZSAoTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMgKVwKK3tcCisgICBUKChUX0NBTExFRCgic2V0XyIgI3R5cCAiXyIgI25hbWUgIiglcCwlcCkiKSwgbWVudSwgZnVuYykpO1wKKyAgIChOb3JtYWxpemVfTWVudShtZW51KSAtPiB0eXAgIyMgbmFtZSA9IGZ1bmMgKTtcCisgICBSRVRVUk4oRV9PSyk7XAorfQorCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGZ1bmN0aW9uIHRvIGdldCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBob29rICovCisjZGVmaW5lIEdFTl9IT09LX0dFVF9GVU5DVElPTiggdHlwLCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgTWVudV9Ib29rIE5DVVJTRVNfQVBJIHR5cCAjIyBfICMjIG5hbWUgKCBjb25zdCBNRU5VICptZW51IClcCit7XAorICAgVCgoVF9DQUxMRUQoI3R5cCAiXyIgI25hbWUgIiglcCkiKSwgbWVudSkpO1wKKyAgIHJldHVybk1lbnVIb29rKE5vcm1hbGl6ZV9NZW51KG1lbnUpIC0+IHR5cCAjIyBuYW1lKTtcCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfaW5pdChNRU5VICptZW51LCB2b2lkICgqZikoTUVOVSAqKSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB1c2VyLWV4aXQgd2hpY2ggaXMgY2FsbGVkIHdoZW4gbWVudSBpcyBwb3N0ZWQKK3wgICAgICAgICAgICAgICAgICAgIG9yIGp1c3QgYWZ0ZXIgdGhlIHRvcCByb3cgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19TRVRfRlVOQ1RJT04obWVudSwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKCopKE1FTlUgKikgbWVudV9pbml0KGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gYWRkcmVzcyBvZiB1c2VyLWV4aXQgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkCit8ICAgICAgICAgICAgICAgICAgICB3aGVuIGEgbWVudSBpcyBwb3N0ZWQgb3IganVzdCBhZnRlciB0aGUgdG9wIHJvdyAKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBNZW51IGluaXQgZnVuY3Rpb24gYWRkcmVzcyBvciBOVUxMCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKG1lbnUsIGluaXQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfdGVybSAoTUVOVSAqbWVudSwgdm9pZCAoKmYpKE1FTlUgKikpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdXNlci1leGl0IHdoaWNoIGlzIGNhbGxlZCB3aGVuIG1lbnUgaXMgdW5wb3N0ZWQKK3wgICAgICAgICAgICAgICAgICAgIG9yIGp1c3QgYmVmb3JlIHRoZSB0b3Agcm93IGNoYW5nZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfU0VUX0ZVTkNUSU9OKG1lbnUsIHRlcm0pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkICgqKShNRU5VICopIG1lbnVfdGVybShjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIGFkZHJlc3Mgb2YgdXNlci1leGl0IGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZAorfCAgICAgICAgICAgICAgICAgICAgd2hlbiBhIG1lbnUgaXMgdW5wb3N0ZWQgb3IganVzdCBiZWZvcmUgdGhlIHRvcCByb3cgCit8ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTWVudSBmaW5hbGl6YXRpb24gZnVuY3Rpb24gYWRkcmVzcyBvciBOVUxMCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKG1lbnUsIHRlcm0pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2l0ZW1faW5pdCAoTUVOVSAqbWVudSwgdm9pZCAoKmYpKE1FTlUgKikpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdXNlci1leGl0IHdoaWNoIGlzIGNhbGxlZCB3aGVuIG1lbnUgaXMgcG9zdGVkCit8ICAgICAgICAgICAgICAgICAgICBvciBqdXN0IGFmdGVyIHRoZSBjdXJyZW50IGl0ZW0gY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19TRVRfRlVOQ1RJT04oaXRlbSwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKCopKE1FTlUgKikgaXRlbV9pbml0IChjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIGFkZHJlc3Mgb2YgdXNlci1leGl0IGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZAorfCAgICAgICAgICAgICAgICAgICAgd2hlbiBhIG1lbnUgaXMgcG9zdGVkIG9yIGp1c3QgYWZ0ZXIgdGhlIGN1cnJlbnQgaXRlbSAKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBJdGVtIGluaXQgZnVuY3Rpb24gYWRkcmVzcyBvciBOVUxMCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKGl0ZW0sIGluaXQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2l0ZW1fdGVybSAoTUVOVSAqbWVudSwgdm9pZCAoKmYpKE1FTlUgKikpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdXNlci1leGl0IHdoaWNoIGlzIGNhbGxlZCB3aGVuIG1lbnUgaXMgdW5wb3N0ZWQKK3wgICAgICAgICAgICAgICAgICAgIG9yIGp1c3QgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0gY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19TRVRfRlVOQ1RJT04oaXRlbSwgdGVybSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKCopKE1FTlUgKikgaXRlbV9pbml0IChjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIGFkZHJlc3Mgb2YgdXNlci1leGl0IGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZAorfCAgICAgICAgICAgICAgICAgICAgd2hlbiBhIG1lbnUgaXMgdW5wb3N0ZWQgb3IganVzdCBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSAKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBJdGVtIGZpbmFsaXphdGlvbiBmdW5jdGlvbiBhZGRyZXNzIG9yIE5VTEwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19HRVRfRlVOQ1RJT04oaXRlbSwgdGVybSkKKworLyogbV9ob29rLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21faXRlbV9jdXIuYyBiL21lbnUvbV9pdGVtX2N1ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzEyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21faXRlbV9jdXIuYwpAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9pdGVtX2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBTZXQgYW5kIGdldCBjdXJyZW50IG1lbnVzIGl0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2l0ZW1fY3VyLmMsdiAxLjE3IDIwMDQvMTIvMjUgMjE6NTc6MzggdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfY3VycmVudF9pdGVtKE1FTlUgKm1lbnUsIGNvbnN0IElURU0gKml0ZW0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBNYWtlIHRoZSBpdGVtIHRoZSBjdXJyZW50IGl0ZW0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2N1cnJlbnRfaXRlbShNRU5VICogbWVudSwgSVRFTSAqIGl0ZW0pCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfY3VycmVudF9pdGVtKCVwLCVwKSIpLCBtZW51LCBpdGVtKSk7CisKKyAgaWYgKG1lbnUgJiYgaXRlbSAmJiAoaXRlbS0+aW1lbnUgPT0gbWVudSkpCisgICAgeworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9JTl9EUklWRVIpCisJUkVUVVJOKEVfQkFEX1NUQVRFKTsKKworICAgICAgYXNzZXJ0KG1lbnUtPmN1cml0ZW0pOworICAgICAgaWYgKGl0ZW0gIT0gbWVudS0+Y3VyaXRlbSkKKwl7CisJICBpZiAobWVudS0+c3RhdHVzICYgX0xJTktfTkVFREVEKQorCSAgICB7CisJICAgICAgLyoKKwkgICAgICAgKiBJdGVtcyBhcmUgYXZhaWxhYmxlLCBidXQgdGhleSBhcmUgbm90IGxpbmtlZCB0b2dldGhlci4KKwkgICAgICAgKiBTbyB3ZSBoYXZlIHRvIGxpbmsgaGVyZS4KKwkgICAgICAgKi8KKwkgICAgICBfbmNfTGlua19JdGVtcyhtZW51KTsKKwkgICAgfQorCSAgYXNzZXJ0KG1lbnUtPnBhdHRlcm4pOworCSAgUmVzZXRfUGF0dGVybihtZW51KTsKKwkgIC8qIGFkanVzdCB0aGUgd2luZG93IHRvIG1ha2UgaXRlbSB2aXNpYmxlIGFuZCB1cGRhdGUgdGhlIG1lbnUgKi8KKwkgIEFkanVzdF9DdXJyZW50X0l0ZW0obWVudSwgbWVudS0+dG9wcm93LCBpdGVtKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBJVEVNICpjdXJyZW50X2l0ZW0oY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgbWVudXMgY3VycmVudCBpdGVtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBJdGVtIHBvaW50ZXIgb3IgTlVMTCBpZiBmYWlsdXJlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoSVRFTSAqKQorY3VycmVudF9pdGVtKGNvbnN0IE1FTlUgKiBtZW51KQoreworICBUKChUX0NBTExFRCgiY3VycmVudF9pdGVtKCVwKSIpLCBtZW51KSk7CisgIHJldHVybkl0ZW0oKG1lbnUgJiYgbWVudS0+aXRlbXMpID8gbWVudS0+Y3VyaXRlbSA6IChJVEVNICopIDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGl0ZW1faW5kZXgoY29uc3QgSVRFTSAqKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBsb2dpY2FsIGluZGV4IG9mIHRoaXMgaXRlbS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBpbmRleCBvciBFUlIgaWYgdGhpcyBpcyBhbiBpbnZhbGlkIGl0ZW0gcG9pbnRlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2l0ZW1faW5kZXgoY29uc3QgSVRFTSAqIGl0ZW0pCit7CisgIFQoKFRfQ0FMTEVEKCJpdGVtX2luZGV4KCVwKSIpLCBpdGVtKSk7CisgIHJldHVybkNvZGUoKGl0ZW0gJiYgaXRlbS0+aW1lbnUpID8gaXRlbS0+aW5kZXggOiBFUlIpOworfQorCisvKiBtX2l0ZW1fY3VyLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21faXRlbV9uYW0uYyBiL21lbnUvbV9pdGVtX25hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTE2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21faXRlbV9uYW0uYwpAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1fbmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIEdldCBtZW51cyBpdGVtIG5hbWUgYW5kIGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbV9uYW0uYyx2IDEuMTQgMjAwNC8xMi8yNSAyMTo0MTo1NCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgY2hhciAqaXRlbV9uYW1lKGNvbnN0IElURU0gKml0ZW0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gbmFtZSBvZiBtZW51IGl0ZW0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFNlZSBhYm92ZTsgcmV0dXJucyBOVUxMIGlmIGl0ZW0gaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK2l0ZW1fbmFtZShjb25zdCBJVEVNICogaXRlbSkKK3sKKyAgVCgoVF9DQUxMRUQoIml0ZW1fbmFtZSglcCkiKSwgaXRlbSkpOworICByZXR1cm5DUHRyKChpdGVtKSA/IGl0ZW0tPm5hbWUuc3RyIDogKGNoYXIgKikwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGNoYXIgKml0ZW1fZGVzY3JpcHRpb24oY29uc3QgSVRFTSAqaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybnMgZGVzY3JpcHRpb24gb2YgaXRlbQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgU2VlIGFib3ZlOyBSZXR1cm5zIE5VTEwgaWYgaXRlbSBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQoraXRlbV9kZXNjcmlwdGlvbihjb25zdCBJVEVNICogaXRlbSkKK3sKKyAgVCgoVF9DQUxMRUQoIml0ZW1fZGVzY3JpcHRpb24oJXApIiksIGl0ZW0pKTsKKyAgcmV0dXJuQ1B0cigoaXRlbSkgPyBpdGVtLT5kZXNjcmlwdGlvbi5zdHIgOiAoY2hhciAqKTApOworfQorCisvKiBtX2l0ZW1fbmFtLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21faXRlbV9uZXcuYyBiL21lbnUvbV9pdGVtX25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmUxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21faXRlbV9uZXcuYwpAQCAtMCwwICsxLDI3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9pdGVtX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBDcmVhdGUgYW5kIGRlc3Ryb3kgbWVudSBpdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBTZXQgYW5kIGdldCBtYXJrZXIgc3RyaW5nIGZvciBtZW51ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2lmIEhBVkVfV0NUWVBFX0gKKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNlbmRpZgorI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBtX2l0ZW1fbmV3LmMsdiAxLjI3IDIwMDYvMTIvMTcgMTk6NDc6MDkgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGJvb2wgSXNfUHJpbnRhYmxlX1N0cmluZyhjb25zdCBjaGFyICpzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgY29udGFpbnMgb25seSBwcmludGFibGUKK3wgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgICAtIGlmIHN0cmluZyBpcyBwcmludGFibGUKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgIC0gaWYgc3RyaW5nIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitJc19QcmludGFibGVfU3RyaW5nKGNvbnN0IGNoYXIgKnMpCit7CisgIGludCByZXN1bHQgPSBUUlVFOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgaW50IGNvdW50ID0gbWJzdG93Y3MoMCwgcywgMCk7CisgIHdjaGFyX3QgKnRlbXAgPSAwOworCisgIGFzc2VydChzKTsKKworICBpZiAoY291bnQgPiAwCisgICAgICAmJiAodGVtcCA9IHR5cGVDYWxsb2Mod2NoYXJfdCwgKDIgKyAodW5zaWduZWQpY291bnQpKSkgIT0gMCkKKyAgICB7CisgICAgICBpbnQgbjsKKworICAgICAgbWJzdG93Y3ModGVtcCwgcywgKHVuc2lnbmVkKWNvdW50KTsKKyAgICAgIGZvciAobiA9IDA7IG4gPCBjb3VudDsgKytuKQorCWlmICghaXN3cHJpbnQoKHdpbnRfdCkgdGVtcFtuXSkpCisJICB7CisJICAgIHJlc3VsdCA9IEZBTFNFOworCSAgICBicmVhazsKKwkgIH0KKyAgICAgIGZyZWUodGVtcCk7CisgICAgfQorI2Vsc2UKKyAgYXNzZXJ0KHMpOworICB3aGlsZSAoKnMpCisgICAgeworICAgICAgaWYgKCFpc3ByaW50KFVDaGFyKCpzKSkpCisJeworCSAgcmVzdWx0ID0gRkFMU0U7CisJICBicmVhazsKKwl9CisgICAgICBzKys7CisgICAgfQorI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBJVEVNICpuZXdfaXRlbShjaGFyICpuYW1lLCBjaGFyICpkZXNjcmlwdGlvbikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZSBhIG5ldyBpdGVtIHdpdGggbmFtZSBhbmQgZGVzY3JpcHRpb24uIFJldHVybgorfCAgICAgICAgICAgICAgICAgICAgYSBwb2ludGVyIHRvIHRoaXMgbmV3IGl0ZW0uCit8ICAgICAgICAgICAgICAgICAgICBOLkIuOiBhbiBpdGVtIG11c3QoISkgaGF2ZSBhIG5hbWUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgaXRlbSBwb2ludGVyIG9yIE5VTEwgaWYgY3JlYXRpb24gZmFpbGVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKElURU0gKikKK25ld19pdGVtKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQoreworICBJVEVNICppdGVtOworCisgIFQoKFRfQ0FMTEVEKCJuZXdfaXRlbShcIiVzXCIsIFwiJXNcIikiKSwKKyAgICAgbmFtZSA/IG5hbWUgOiAiIiwKKyAgICAgZGVzY3JpcHRpb24gPyBkZXNjcmlwdGlvbiA6ICIiKSk7CisKKyAgaWYgKCFuYW1lIHx8ICgqbmFtZSA9PSAnXDAnKSB8fCAhSXNfUHJpbnRhYmxlX1N0cmluZyhuYW1lKSkKKyAgICB7CisgICAgICBpdGVtID0gKElURU0gKikgMDsKKyAgICAgIFNFVF9FUlJPUihFX0JBRF9BUkdVTUVOVCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaXRlbSA9IChJVEVNICopIGNhbGxvYygxLCBzaXplb2YoSVRFTSkpOworICAgICAgaWYgKGl0ZW0pCisJeworCSAgKml0ZW0gPSBfbmNfRGVmYXVsdF9JdGVtOwkvKiBob3BlIHdlIGhhdmUgc3RydWN0IGFzc2lnbm1lbnQgKi8KKworCSAgaXRlbS0+bmFtZS5sZW5ndGggPSBzdHJsZW4obmFtZSk7CisJICBpdGVtLT5uYW1lLnN0ciA9IG5hbWU7CisKKwkgIGlmIChkZXNjcmlwdGlvbiAmJiAoKmRlc2NyaXB0aW9uICE9ICdcMCcpICYmCisJICAgICAgSXNfUHJpbnRhYmxlX1N0cmluZyhkZXNjcmlwdGlvbikpCisJICAgIHsKKwkgICAgICBpdGVtLT5kZXNjcmlwdGlvbi5sZW5ndGggPSBzdHJsZW4oZGVzY3JpcHRpb24pOworCSAgICAgIGl0ZW0tPmRlc2NyaXB0aW9uLnN0ciA9IGRlc2NyaXB0aW9uOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpdGVtLT5kZXNjcmlwdGlvbi5sZW5ndGggPSAwOworCSAgICAgIGl0ZW0tPmRlc2NyaXB0aW9uLnN0ciA9IChjaGFyICopMDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlTRVRfRVJST1IoRV9TWVNURU1fRVJST1IpOworICAgIH0KKyAgcmV0dXJuSXRlbShpdGVtKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmcmVlX2l0ZW0oSVRFTSAqaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEZyZWUgdGhlIGFsbG9jYXRlZCBzdG9yYWdlIGZvciB0aGlzIGl0ZW0uIAorfCAgICAgICAgICAgICAgICAgICAgTi5CLjogYSBjb25uZWN0ZWQgaXRlbSBjYW4ndCBiZSBmcmVlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBpbnZhbGlkIHZhbHVlIGhhcyBiZWVuIHBhc3NlZAorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgICAgLSBpdGVtIGlzIHN0aWxsIGNvbm5lY3RlZCB0byBhIG1lbnUgICAgCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZnJlZV9pdGVtKElURU0gKiBpdGVtKQoreworICBUKChUX0NBTExFRCgiZnJlZV9pdGVtKCVwKSIpLCBpdGVtKSk7CisKKyAgaWYgKCFpdGVtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKGl0ZW0tPmltZW51KQorICAgIFJFVFVSTihFX0NPTk5FQ1RFRCk7CisKKyAgZnJlZShpdGVtKTsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfbWFyayggTUVOVSAqbWVudSwgY29uc3QgY2hhciAqbWFyayApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIG1hcmsgc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIGl0ZW0gKHNpbmdsZS12YWx1ZWQgbWVudSkgb3IgdGhlIHNlbGVjdGVkIGl0ZW1zCit8ICAgICAgICAgICAgICAgICAgICAobXVsdGktdmFsdWVkIG1lbnUpLgorfCAgICAgICAgICAgICAgICAgICAgVGhlIG1hcmsgYXJndW1lbnQgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gCit8ICAgICAgICAgICAgICAgICAgICBtYXJrZXIgaXMgdXNlZC4KK3wgICAgICAgICAgICAgICAgICAgIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgYml0IHRyaWNreSwgYmVjYXVzZSB0aGlzIG1heSAKK3wgICAgICAgICAgICAgICAgICAgIGFmZmVjdCB0aGUgZ2VvbWV0cnkgb2YgdGhlIG1lbnUsIHdoaWNoIHdlIGRvbid0IGFsbG93IAorfCAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwb3N0ZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgLSBhbiBpbnZhbGlkIHZhbHVlIGhhcyBiZWVuIHBhc3NlZAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgIC0gbm8gbWVtb3J5IHRvIHN0b3JlIG1hcmsKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV9tYXJrKE1FTlUgKiBtZW51LCBjb25zdCBjaGFyICptYXJrKQoreworICB1bnNpZ25lZCBsOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9tYXJrKCVwLCVzKSIpLCBtZW51LCBfbmNfdmlzYnVmKG1hcmspKSk7CisKKyAgaWYgKG1hcmsgJiYgKCptYXJrICE9ICdcMCcpICYmIElzX1ByaW50YWJsZV9TdHJpbmcobWFyaykpCisgICAgbCA9IHN0cmxlbihtYXJrKTsKKyAgZWxzZQorICAgIGwgPSAwOworCisgIGlmIChtZW51KQorICAgIHsKKyAgICAgIGNoYXIgKm9sZF9tYXJrID0gbWVudS0+bWFyazsKKyAgICAgIHVuc2lnbmVkIHNob3J0IG9sZF9zdGF0dXMgPSBtZW51LT5zdGF0dXM7CisKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorCXsKKwkgIC8qIElmIHRoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLCB0aGUgZ2VvbWV0cnkgaXMgZml4ZWQuIFRoZW4KKwkgICAgIHdlIGNhbiBvbmx5IGFjY2VwdCBhIG1hcmsgd2l0aCBleGFjdGx5IHRoZSBzYW1lIGxlbmd0aCAqLworCSAgaWYgKG1lbnUtPm1hcmtsZW4gIT0gKGludClsKQorCSAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCX0KKyAgICAgIG1lbnUtPm1hcmtsZW4gPSBsOworICAgICAgaWYgKGwpCisJeworCSAgbWVudS0+bWFyayA9IChjaGFyICopbWFsbG9jKGwgKyAxKTsKKwkgIGlmIChtZW51LT5tYXJrKQorCSAgICB7CisJICAgICAgc3RyY3B5KG1lbnUtPm1hcmssIG1hcmspOworCSAgICAgIGlmIChtZW51ICE9ICZfbmNfRGVmYXVsdF9NZW51KQorCQltZW51LT5zdGF0dXMgfD0gX01BUktfQUxMT0NBVEVEOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtZW51LT5tYXJrID0gb2xkX21hcms7CisJICAgICAgUkVUVVJOKEVfU1lTVEVNX0VSUk9SKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwltZW51LT5tYXJrID0gKGNoYXIgKikwOworCisgICAgICBpZiAoKG9sZF9zdGF0dXMgJiBfTUFSS19BTExPQ0FURUQpICYmIG9sZF9tYXJrKQorCWZyZWUob2xkX21hcmspOworCisgICAgICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKwl7CisJICBfbmNfRHJhd19NZW51KG1lbnUpOworCSAgX25jX1Nob3dfTWVudShtZW51KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogUmVjYWxjdWxhdGUgdGhlIGdlb21ldHJ5ICovCisJICBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChtZW51KTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuQ29kZShzZXRfbWVudV9tYXJrKCZfbmNfRGVmYXVsdF9NZW51LCBtYXJrKSk7CisgICAgfQorICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBjaGFyICptZW51X21hcmsoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG1hcmtlciBzdHJpbmcKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBtYXJrZXIgc3RyaW5nIHBvaW50ZXIgb3IgTlVMTCBpZiBubyBtYXJrZXIgZGVmaW5lZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK21lbnVfbWFyayhjb25zdCBNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoIm1lbnVfbWFyayglcCkiKSwgbWVudSkpOworICByZXR1cm5QdHIoTm9ybWFsaXplX01lbnUobWVudSktPm1hcmspOworfQorCisvKiBtX2l0ZW1fbmV3LmMgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9pdGVtX29wdC5jIGIvbWVudS9tX2l0ZW1fb3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlN2I3NQotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV9pdGVtX29wdC5jCkBAIC0wLDAgKzEsMTU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1fb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIE1lbnVzIGl0ZW0gb3B0aW9uIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbV9vcHQuYyx2IDEuMTcgMjAwNC8xMi8yNSAyMTozMjo1NCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9pdGVtX29wdHMoSVRFTSAqaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpICAKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgb3B0aW9ucyBvZiB0aGUgaXRlbS4gSWYgdGhlcmUgYXJlIHJlbGV2YW50Cit8ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLCB0aGUgaXRlbSBpcyBjb25uZWN0ZWQgYW5kIHRoZSBtZW51IGlzIHBvc3RlZCwKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IHdpbGwgYmUgcmVkaXNwbGF5ZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIGl0ZW0gb3B0aW9ucworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9pdGVtX29wdHMoSVRFTSAqIGl0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKQoreworICBUKChUX0NBTExFRCgic2V0X21lbnVfb3B0cyglcCwlZCkiKSwgaXRlbSwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX0lURU1fT1BUUzsKKworICBpZiAob3B0cyAmIH5BTExfSVRFTV9PUFRTKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKGl0ZW0pCisgICAgeworICAgICAgaWYgKGl0ZW0tPm9wdCAhPSBvcHRzKQorCXsKKwkgIE1FTlUgKm1lbnUgPSBpdGVtLT5pbWVudTsKKworCSAgaXRlbS0+b3B0ID0gb3B0czsKKworCSAgaWYgKCghKG9wdHMgJiBPX1NFTEVDVEFCTEUpKSAmJiBpdGVtLT52YWx1ZSkKKwkgICAgaXRlbS0+dmFsdWUgPSBGQUxTRTsKKworCSAgaWYgKG1lbnUgJiYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpKQorCSAgICB7CisJICAgICAgTW92ZV9BbmRfUG9zdF9JdGVtKG1lbnUsIGl0ZW0pOworCSAgICAgIF9uY19TaG93X01lbnUobWVudSk7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgX25jX0RlZmF1bHRfSXRlbS5vcHQgPSBvcHRzOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBpdGVtX29wdHNfb2ZmKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKSAgIAorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3dpdGNoIG9mIHRoZSBvcHRpb25zIGZvciB0aGlzIGl0ZW0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitpdGVtX29wdHNfb2ZmKElURU0gKiBpdGVtLCBJdGVtX09wdGlvbnMgb3B0cykKK3sKKyAgSVRFTSAqY2l0ZW0gPSBpdGVtOwkJLyogdXNlIGEgY29weSBiZWNhdXNlIHNldF9pdGVtX29wdHMgbXVzdCBkZXRlY3QKKworCQkJCSAgIE5VTEwgaXRlbSBpdHNlbGYgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciAqLworCisgIFQoKFRfQ0FMTEVEKCJpdGVtX29wdHNfb2ZmKCVwLCVkKSIpLCBpdGVtLCBvcHRzKSk7CisKKyAgaWYgKG9wdHMgJiB+QUxMX0lURU1fT1BUUykKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgTm9ybWFsaXplX0l0ZW0oY2l0ZW0pOworICAgICAgb3B0cyA9IGNpdGVtLT5vcHQgJiB+KG9wdHMgJiBBTExfSVRFTV9PUFRTKTsKKyAgICAgIHJldHVybkNvZGUoc2V0X2l0ZW1fb3B0cyhpdGVtLCBvcHRzKSk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGl0ZW1fb3B0c19vbihJVEVNICppdGVtLCBJdGVtX09wdGlvbnMgb3B0cykgICAKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFN3aXRjaCBvbiB0aGUgb3B0aW9ucyBmb3IgdGhpcyBpdGVtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBvcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQoraXRlbV9vcHRzX29uKElURU0gKiBpdGVtLCBJdGVtX09wdGlvbnMgb3B0cykKK3sKKyAgSVRFTSAqY2l0ZW0gPSBpdGVtOwkJLyogdXNlIGEgY29weSBiZWNhdXNlIHNldF9pdGVtX29wdHMgbXVzdCBkZXRlY3QKKworCQkJCSAgIE5VTEwgaXRlbSBpdHNlbGYgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciAqLworCisgIFQoKFRfQ0FMTEVEKCJpdGVtX29wdHNfb24oJXAsJWQpIiksIGl0ZW0sIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9JVEVNX09QVFM7CisgIGlmIChvcHRzICYgfkFMTF9JVEVNX09QVFMpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIE5vcm1hbGl6ZV9JdGVtKGNpdGVtKTsKKyAgICAgIG9wdHMgPSBjaXRlbS0+b3B0IHwgb3B0czsKKyAgICAgIHJldHVybkNvZGUoc2V0X2l0ZW1fb3B0cyhpdGVtLCBvcHRzKSk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgSXRlbV9PcHRpb25zIGl0ZW1fb3B0cyhjb25zdCBJVEVNICppdGVtKSAgIAorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3dpdGNoIG9mIHRoZSBvcHRpb25zIGZvciB0aGlzIGl0ZW0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBJdGVtcyBvcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoSXRlbV9PcHRpb25zKQoraXRlbV9vcHRzKGNvbnN0IElURU0gKiBpdGVtKQoreworICBUKChUX0NBTExFRCgiaXRlbV9vcHRzKCVwKSIpLCBpdGVtKSk7CisgIHJldHVybkl0ZW1PcHRzKEFMTF9JVEVNX09QVFMgJiBOb3JtYWxpemVfSXRlbShpdGVtKS0+b3B0KTsKK30KKworLyogbV9pdGVtX29wdC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbWVudS9tX2l0ZW1fdG9wLmMgYi9tZW51L21faXRlbV90b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjY4YTBlCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2l0ZW1fdG9wLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1faXRlbV90b3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogU2V0IGFuZCBnZXQgdG9wIG1lbnVzIGl0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9pdGVtX3RvcC5jLHYgMS4xMCAyMDA0LzEyLzExIDIzOjI5OjM0IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X3RvcF9yb3coTUVOVSAqbWVudSwgaW50IHJvdykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1ha2VzIHRoZSBzcGVjaWZpZWQgcm93IHRoZSB0b3Agcm93IGluIHRoZSBtZW51Cit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAtIG5vdCBhIG1lbnUgcG9pbnRlciBvciBpbnZhbGlkIHJvdworfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAtIHRoZXJlIGFyZSBubyBpdGVtcyBmb3IgdGhlIG1lbnUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfdG9wX3JvdyhNRU5VICogbWVudSwgaW50IHJvdykKK3sKKyAgSVRFTSAqaXRlbTsKKworICBUKChUX0NBTExFRCgic2V0X3RvcF9yb3coJXAsJWQpIiksIG1lbnUsIHJvdykpOworCisgIGlmIChtZW51KQorICAgIHsKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorCVJFVFVSTihFX0JBRF9TVEFURSk7CisgICAgICBpZiAobWVudS0+aXRlbXMgPT0gKElURU0gKiopIDApCisJUkVUVVJOKEVfTk9UX0NPTk5FQ1RFRCk7CisKKyAgICAgIGlmICgocm93IDwgMCkgfHwgKHJvdyA+IChtZW51LT5yb3dzIC0gbWVudS0+YXJvd3MpKSkKKwlSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICAgIH0KKyAgZWxzZQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKHJvdyAhPSBtZW51LT50b3Byb3cpCisgICAgeworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9MSU5LX05FRURFRCkKKwlfbmNfTGlua19JdGVtcyhtZW51KTsKKworICAgICAgaXRlbSA9IG1lbnUtPml0ZW1zWyhtZW51LT5vcHQgJiBPX1JPV01BSk9SKSA/IChyb3cgKiBtZW51LT5jb2xzKSA6IHJvd107CisgICAgICBhc3NlcnQobWVudS0+cGF0dGVybik7CisgICAgICBSZXNldF9QYXR0ZXJuKG1lbnUpOworICAgICAgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtKG1lbnUsIHJvdywgaXRlbSk7CisgICAgfQorCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCB0b3Bfcm93KGNvbnN0IE1FTlUgKikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgdG9wIHJvdyBvZiB0aGUgbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIHJvdyBudW1iZXIgb3IgRVJSIGlmIHRoZXJlIGlzIG5vIHJvdworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3RvcF9yb3coY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJ0b3Bfcm93KCVwKSIpLCBtZW51KSk7CisgIGlmIChtZW51ICYmIG1lbnUtPml0ZW1zICYmICoobWVudS0+aXRlbXMpKQorICAgIHsKKyAgICAgIGFzc2VydCgobWVudS0+dG9wcm93ID49IDApICYmIChtZW51LT50b3Byb3cgPCBtZW51LT5yb3dzKSk7CisgICAgICByZXR1cm5Db2RlKG1lbnUtPnRvcHJvdyk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuQ29kZShFUlIpOworfQorCisvKiBtX2l0ZW1fdG9wLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21faXRlbV91c2UuYyBiL21lbnUvbV9pdGVtX3VzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTViYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21faXRlbV91c2UuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1fdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIEFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggbWVudSBpdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbV91c2UuYyx2IDEuMTYgMjAwNC8xMi8yNSAyMTozMzozMSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9pdGVtX3VzZXJwdHIoSVRFTSAqaXRlbSwgdm9pZCAqdXNlcnB0cikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgcG9pbnRlciB0aGF0IGlzIHJlc2VydmVkIGluIGFueSBpdGVtIHRvIHN0b3JlCit8ICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiByZWxldmFudCBpbmZvcm1hdGlvbnMuICAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfaXRlbV91c2VycHRyKElURU0gKiBpdGVtLCB2b2lkICp1c2VycHRyKQoreworICBUKChUX0NBTExFRCgic2V0X2l0ZW1fdXNlcnB0ciglcCwlcCkiKSwgaXRlbSwgdXNlcnB0cikpOworICBOb3JtYWxpemVfSXRlbShpdGVtKS0+dXNlcnB0ciA9IHVzZXJwdHI7CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKml0ZW1fdXNlcnB0cihjb25zdCBJVEVNICppdGVtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IGl0ZW0gdG8gc3RvcmUKK3wgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFZhbHVlIG9mIHRoZSBwb2ludGVyLiBJZiBubyBzdWNoIHBvaW50ZXIgaGFzIGJlZW4gc2V0LAorfCAgICAgICAgICAgICAgICAgICAgTlVMTCBpcyByZXR1cm5lZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVCh2b2lkICopCitpdGVtX3VzZXJwdHIoY29uc3QgSVRFTSAqIGl0ZW0pCit7CisgIFQoKFRfQ0FMTEVEKCJpdGVtX3VzZXJwdHIoJXApIiksIGl0ZW0pKTsKKyAgcmV0dXJuVm9pZFB0cihOb3JtYWxpemVfSXRlbShpdGVtKS0+dXNlcnB0cik7Cit9CisKKy8qIG1faXRlbV91c2UuYyAqLwpkaWZmIC0tZ2l0IGEvbWVudS9tX2l0ZW1fdmFsLmMgYi9tZW51L21faXRlbV92YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJmNjkzCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2l0ZW1fdmFsLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1faXRlbV92YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogU2V0IGFuZCBnZXQgbWVudXMgaXRlbSB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9pdGVtX3ZhbC5jLHYgMS4xNCAyMDA0LzEyLzExIDIzOjI5OjM0IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2l0ZW1fdmFsdWUoSVRFTSAqaXRlbSwgaW50IHZhbHVlKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUHJvZ3JhbW1hdGljYWxseSBzZXQgdGhlIGl0ZW0ncyBzZWxlY3Rpb24gdmFsdWUuIFRoaXMgaXMKK3wgICAgICAgICAgICAgICAgICAgIG9ubHkgYWxsb3dlZCBpZiB0aGUgaXRlbSBpcyBzZWxlY3RhYmxlIGF0IGFsbCBhbmQgaWYKK3wgICAgICAgICAgICAgICAgICAgIGl0IGlzIG5vdCBjb25uZWN0ZWQgdG8gYSBzaW5nbGUtdmFsdWVkIG1lbnUuCit8ICAgICAgICAgICAgICAgICAgICBJZiB0aGUgaXRlbSBpcyBjb25uZWN0ZWQgdG8gYSBwb3N0ZWQgbWVudSwgdGhlIG1lbnUKK3wgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVkaXNwbGF5ZWQuICAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBub3Qgc2VsZWN0YWJsZSBvciBzaW5nbGUgdmFsdWVkIG1lbnUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfaXRlbV92YWx1ZShJVEVNICogaXRlbSwgYm9vbCB2YWx1ZSkKK3sKKyAgTUVOVSAqbWVudTsKKworICBUKChUX0NBTExFRCgic2V0X2l0ZW1fdmFsdWUoJXAsJWQpIiksIGl0ZW0sIHZhbHVlKSk7CisgIGlmIChpdGVtKQorICAgIHsKKyAgICAgIG1lbnUgPSBpdGVtLT5pbWVudTsKKworICAgICAgaWYgKCghKGl0ZW0tPm9wdCAmIE9fU0VMRUNUQUJMRSkpIHx8CisJICAobWVudSAmJiAobWVudS0+b3B0ICYgT19PTkVWQUxVRSkpKQorCVJFVFVSTihFX1JFUVVFU1RfREVOSUVEKTsKKworICAgICAgaWYgKGl0ZW0tPnZhbHVlIF4gdmFsdWUpCisJeworCSAgaXRlbS0+dmFsdWUgPSB2YWx1ZSA/IFRSVUUgOiBGQUxTRTsKKwkgIGlmIChtZW51KQorCSAgICB7CisJICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpCisJCXsKKwkJICBNb3ZlX0FuZF9Qb3N0X0l0ZW0obWVudSwgaXRlbSk7CisJCSAgX25jX1Nob3dfTWVudShtZW51KTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIF9uY19EZWZhdWx0X0l0ZW0udmFsdWUgPSB2YWx1ZTsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBib29sIGl0ZW1fdmFsdWUoY29uc3QgSVRFTSAqaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgc2VsZWN0aW9uIHZhbHVlIG9mIHRoZSBpdGVtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgLSBpZiBpdGVtIGlzIHNlbGVjdGVkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgLSBpZiBpdGVtIGlzIG5vdCBzZWxlY3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitpdGVtX3ZhbHVlKGNvbnN0IElURU0gKiBpdGVtKQoreworICBUKChUX0NBTExFRCgiaXRlbV92YWx1ZSglcCkiKSwgaXRlbSkpOworICByZXR1cm5Cb29sKChOb3JtYWxpemVfSXRlbShpdGVtKS0+dmFsdWUpID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyogbV9pdGVtX3ZhbC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbWVudS9tX2l0ZW1fdmlzLmMgYi9tZW51L21faXRlbV92aXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGZiOTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX2l0ZW1fdmlzLmMKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9pdGVtX3ZpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBUZWxsIGlmIG1lbnUgaXRlbSBpcyB2aXNpYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2l0ZW1fdmlzLmMsdiAxLjE1IDIwMDQvMTIvMjUgMjE6NDA6MDkgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGJvb2wgaXRlbV92aXNpYmxlKGNvbnN0IElURU0gKml0ZW0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBBIGl0ZW0gaXMgdmlzaWJsZSBpZiBpdCBjdXJyZW50bHkgYXBwZWFycyBpbiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHN1YndpbmRvdyBvZiBhIHBvc3RlZCBtZW51LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgaWYgdmlzaWJsZQorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgaWYgaW52aXNpYmxlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2l0ZW1fdmlzaWJsZShjb25zdCBJVEVNICogaXRlbSkKK3sKKyAgTUVOVSAqbWVudTsKKworICBUKChUX0NBTExFRCgiaXRlbV92aXNpYmxlKCVwKSIpLCBpdGVtKSk7CisgIGlmIChpdGVtICYmCisgICAgICAobWVudSA9IGl0ZW0tPmltZW51KSAmJgorICAgICAgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpICYmCisgICAgICAoKG1lbnUtPnRvcHJvdyArIG1lbnUtPmFyb3dzKSA+IChpdGVtLT55KSkgJiYKKyAgICAgIChpdGVtLT55ID49IG1lbnUtPnRvcHJvdykpCisgICAgcmV0dXJuQm9vbChUUlVFKTsKKyAgZWxzZQorICAgIHJldHVybkJvb2woRkFMU0UpOworfQorCisvKiBtX2l0ZW1fdmlzLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21faXRlbXMuYyBiL21lbnUvbV9pdGVtcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOGY3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21faXRlbXMuYwpAQCAtMCwwICsxLDExMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9pdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBDb25uZWN0IGFuZCBkaXNjb25uZWN0IGl0ZW1zIHRvIGFuZCBmcm9tIG1lbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2l0ZW1zLmMsdiAxLjE2IDIwMDUvMDEvMTYgMDE6MDI6MjMgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9pdGVtcyhNRU5VICptZW51LCBJVEVNICoqaXRlbXMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXRzIHRoZSBpdGVtIHBvaW50ZXIgYXJyYXkgY29ubmVjdGVkIHRvIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgIC0gbWVudSBpcyBhbHJlYWR5IHBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgLSBvbmUgb3IgbW9yZSBpdGVtcyBhcmUgYWxyZWFkeSBjb25uZWN0ZWQKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW5vdGhlciBtZW51LgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBBbiBpbmNvcnJlY3QgbWVudSBvciBpdGVtIGFycmF5IHdhcworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfaXRlbXMoTUVOVSAqIG1lbnUsIElURU0gKiogaXRlbXMpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9pdGVtcyglcCwlcCkiKSwgbWVudSwgaXRlbXMpKTsKKworICBpZiAoIW1lbnUgfHwgKGl0ZW1zICYmICEoKml0ZW1zKSkpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKyAgICBSRVRVUk4oRV9QT1NURUQpOworCisgIGlmIChtZW51LT5pdGVtcykKKyAgICBfbmNfRGlzY29ubmVjdF9JdGVtcyhtZW51KTsKKworICBpZiAoaXRlbXMpCisgICAgeworICAgICAgaWYgKCFfbmNfQ29ubmVjdF9JdGVtcyhtZW51LCBpdGVtcykpCisJUkVUVVJOKEVfQ09OTkVDVEVEKTsKKyAgICB9CisKKyAgbWVudS0+aXRlbXMgPSBpdGVtczsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgSVRFTSAqKm1lbnVfaXRlbXMoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpdGVtIHBvaW50ZXIgYXJyYXkgb2YgdGhlIG1lbnUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE5VTEwgb24gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChJVEVNICoqKQorbWVudV9pdGVtcyhjb25zdCBNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoIm1lbnVfaXRlbXMoJXApIiksIG1lbnUpKTsKKyAgcmV0dXJuSXRlbVB0cihtZW51ID8gbWVudS0+aXRlbXMgOiAoSVRFTSAqKikgMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgaXRlbV9jb3VudChjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgY29ubmVjdGVkIHRvIHRoZSBtZW51LiBJZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIG1lbnUgcG9pbnRlciBpcyBOVUxMIHdlIHJldHVybiAtMS4gICAgICAgICAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE51bWJlciBvZiBpdGVtcyBvciAtMSB0byBpbmRpY2F0ZSBlcnJvci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitpdGVtX2NvdW50KGNvbnN0IE1FTlUgKiBtZW51KQoreworICBUKChUX0NBTExFRCgiaXRlbV9jb3VudCglcCkiKSwgbWVudSkpOworICByZXR1cm5Db2RlKG1lbnUgPyBtZW51LT5uaXRlbXMgOiAtMSk7Cit9CisKKy8qIG1faXRlbXMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9uZXcuYyBiL21lbnUvbV9uZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBjNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX25ldy5jCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIENyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBuZXcgbWVudXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fbmV3LmMsdiAxLjE4IDIwMDYvMTEvMDQgMTk6MDQ6MDYgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIE1FTlUgKm5ld19tZW51KElURU0gKippdGVtcykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZXMgYSBuZXcgbWVudSBjb25uZWN0ZWQgdG8gdGhlIGl0ZW0gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgYXJyYXkgaXRlbXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgbWVudS4KK3wgICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgbWVudSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgbWVudS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE5VTEwgb24gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChNRU5VICopCituZXdfbWVudShJVEVNICoqIGl0ZW1zKQoreworICBpbnQgZXJyID0gRV9TWVNURU1fRVJST1I7CisgIE1FTlUgKm1lbnUgPSAoTUVOVSAqKSBjYWxsb2MoMSwgc2l6ZW9mKE1FTlUpKTsKKworICBUKChUX0NBTExFRCgibmV3X21lbnUoJXApIiksIGl0ZW1zKSk7CisgIGlmIChtZW51KQorICAgIHsKKyAgICAgICptZW51ID0gX25jX0RlZmF1bHRfTWVudTsKKyAgICAgIG1lbnUtPnN0YXR1cyA9IDA7CisgICAgICBtZW51LT5yb3dzID0gbWVudS0+ZnJvd3M7CisgICAgICBtZW51LT5jb2xzID0gbWVudS0+ZmNvbHM7CisgICAgICBpZiAoaXRlbXMgJiYgKml0ZW1zKQorCXsKKwkgIGlmICghX25jX0Nvbm5lY3RfSXRlbXMobWVudSwgaXRlbXMpKQorCSAgICB7CisJICAgICAgZXJyID0gRV9OT1RfQ09OTkVDVEVEOworCSAgICAgIGZyZWUobWVudSk7CisJICAgICAgbWVudSA9IChNRU5VICopIDA7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmICghbWVudSkKKyAgICBTRVRfRVJST1IoZXJyKTsKKworICByZXR1cm5NZW51KG1lbnUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZyZWVfbWVudShNRU5VICptZW51KSAgCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBEaXNjb25uZWN0cyBtZW51IGZyb20gaXRzIGFzc29jaWF0ZWQgaXRlbSBwb2ludGVyIAorfCAgICAgICAgICAgICAgICAgICAgYXJyYXkgYW5kIGZyZWVzIHRoZSBzdG9yYWdlIGFsbG9jYXRlZCBmb3IgdGhlIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgLSBJbnZhbGlkIG1lbnUgcG9pbnRlciBwYXNzZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgICAgICAtIE1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmcmVlX21lbnUoTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJmcmVlX21lbnUoJXApIiksIG1lbnUpKTsKKyAgaWYgKCFtZW51KQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpCisgICAgUkVUVVJOKEVfUE9TVEVEKTsKKworICBpZiAobWVudS0+aXRlbXMpCisgICAgX25jX0Rpc2Nvbm5lY3RfSXRlbXMobWVudSk7CisKKyAgaWYgKChtZW51LT5zdGF0dXMgJiBfTUFSS19BTExPQ0FURUQpICYmIG1lbnUtPm1hcmspCisgICAgZnJlZShtZW51LT5tYXJrKTsKKworICBmcmVlKG1lbnUpOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIG1fbmV3LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21fb3B0cy5jIGIvbWVudS9tX29wdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM3MGIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX29wdHMuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9vcHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBNZW51cyBvcHRpb24gcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX29wdHMuYyx2IDEuMTkgMjAwNC8xMi8yNSAyMTozNjoxMiB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9vcHRzKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBvcHRpb25zIGZvciB0aGlzIG1lbnUuIElmIHRoZSBuZXcgc2V0dGluZ3MKK3wgICAgICAgICAgICAgICAgICAgIGVuZCB1cCBpbiBhIGNoYW5nZSBvZiB0aGUgZ2VvbWV0cnkgb2YgdGhlIG1lbnUsIGl0Cit8ICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlY2FsY3VsYXRlZC4gVGhpcyBvcGVyYXRpb24gaXMgZm9yYmlkZGVuIGlmCit8ICAgICAgICAgICAgICAgICAgICB0aGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIG1lbnUgb3B0aW9ucworfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgLSBtZW51IGlzIGFscmVhZHkgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfb3B0cyhNRU5VICogbWVudSwgTWVudV9PcHRpb25zIG9wdHMpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9vcHRzKCVwLCVkKSIpLCBtZW51LCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfTUVOVV9PUFRTOworCisgIGlmIChvcHRzICYgfkFMTF9NRU5VX09QVFMpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAobWVudSkKKyAgICB7CisgICAgICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKwlSRVRVUk4oRV9QT1NURUQpOworCisgICAgICBpZiAoKG9wdHMgJiBPX1JPV01BSk9SKSAhPSAobWVudS0+b3B0ICYgT19ST1dNQUpPUikpCisJeworCSAgLyogd2UgbmVlZCB0aGlzIG9ubHkgaWYgdGhlIGxheW91dCByZWFsbHkgY2hhbmdlZCAuLi4gKi8KKwkgIGlmIChtZW51LT5pdGVtcyAmJiBtZW51LT5pdGVtc1swXSkKKwkgICAgeworCSAgICAgIG1lbnUtPnRvcHJvdyA9IDA7CisJICAgICAgbWVudS0+Y3VyaXRlbSA9IG1lbnUtPml0ZW1zWzBdOworCSAgICAgIGFzc2VydChtZW51LT5jdXJpdGVtKTsKKwkgICAgICBzZXRfbWVudV9mb3JtYXQobWVudSwgbWVudS0+ZnJvd3MsIG1lbnUtPmZjb2xzKTsKKwkgICAgfQorCX0KKworICAgICAgbWVudS0+b3B0ID0gb3B0czsKKworICAgICAgaWYgKG9wdHMgJiBPX09ORVZBTFVFKQorCXsKKwkgIElURU0gKippdGVtOworCisJICBpZiAoKChpdGVtID0gbWVudS0+aXRlbXMpICE9IChJVEVNICoqKSAwKSkKKwkgICAgZm9yICg7ICppdGVtOyBpdGVtKyspCisJICAgICAgKCppdGVtKS0+dmFsdWUgPSBGQUxTRTsKKwl9CisKKyAgICAgIGlmIChvcHRzICYgT19TSE9XREVTQykJLyogdGhpcyBhbHNvIGNoYW5nZXMgdGhlIGdlb21ldHJ5ICovCisJX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgobWVudSk7CisgICAgfQorICBlbHNlCisgICAgX25jX0RlZmF1bHRfTWVudS5vcHQgPSBvcHRzOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgbWVudV9vcHRzX29mZihNRU5VICptZW51LCBNZW51X09wdGlvbnMgb3B0cykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFN3aXRjaCBvZmYgdGhlIG9wdGlvbnMgZm9yIHRoaXMgbWVudS4gSWYgdGhlIG5ldyBzZXR0aW5ncworfCAgICAgICAgICAgICAgICAgICAgZW5kIHVwIGluIGEgY2hhbmdlIG9mIHRoZSBnZW9tZXRyeSBvZiB0aGUgbWVudSwgaXQKK3wgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVjYWxjdWxhdGVkLiBUaGlzIG9wZXJhdGlvbiBpcyBmb3JiaWRkZW4gaWYKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgb3B0aW9ucworfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgLSBtZW51IGlzIGFscmVhZHkgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorbWVudV9vcHRzX29mZihNRU5VICogbWVudSwgTWVudV9PcHRpb25zIG9wdHMpCit7CisgIE1FTlUgKmNtZW51ID0gbWVudTsJCS8qIHVzZSBhIGNvcHkgYmVjYXVzZSBzZXRfbWVudV9vcHRzIG11c3QgZGV0ZWN0CisKKwkJCQkgICBOVUxMIG1lbnUgaXRzZWxmIHRvIGFkanVzdCBpdHMgYmVoYXZpb3IgKi8KKworICBUKChUX0NBTExFRCgibWVudV9vcHRzX29mZiglcCwlZCkiKSwgbWVudSwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX01FTlVfT1BUUzsKKyAgaWYgKG9wdHMgJiB+QUxMX01FTlVfT1BUUykKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgTm9ybWFsaXplX01lbnUoY21lbnUpOworICAgICAgb3B0cyA9IGNtZW51LT5vcHQgJiB+b3B0czsKKyAgICAgIHJldHVybkNvZGUoc2V0X21lbnVfb3B0cyhtZW51LCBvcHRzKSk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtZW51X29wdHNfb24oTUVOVSAqbWVudSwgTWVudV9PcHRpb25zIG9wdHMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTd2l0Y2ggb24gdGhlIG9wdGlvbnMgZm9yIHRoaXMgbWVudS4gSWYgdGhlIG5ldyBzZXR0aW5ncworfCAgICAgICAgICAgICAgICAgICAgZW5kIHVwIGluIGEgY2hhbmdlIG9mIHRoZSBnZW9tZXRyeSBvZiB0aGUgbWVudSwgaXQKK3wgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVjYWxjdWxhdGVkLiBUaGlzIG9wZXJhdGlvbiBpcyBmb3JiaWRkZW4gaWYKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgbWVudSBvcHRpb25zCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAtIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCittZW51X29wdHNfb24oTUVOVSAqIG1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKQoreworICBNRU5VICpjbWVudSA9IG1lbnU7CQkvKiB1c2UgYSBjb3B5IGJlY2F1c2Ugc2V0X21lbnVfb3B0cyBtdXN0IGRldGVjdAorCisJCQkJICAgTlVMTCBtZW51IGl0c2VsZiB0byBhZGp1c3QgaXRzIGJlaGF2aW9yICovCisKKyAgVCgoVF9DQUxMRUQoIm1lbnVfb3B0c19vbiglcCwlZCkiKSwgbWVudSwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX01FTlVfT1BUUzsKKyAgaWYgKG9wdHMgJiB+QUxMX01FTlVfT1BUUykKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgTm9ybWFsaXplX01lbnUoY21lbnUpOworICAgICAgb3B0cyA9IGNtZW51LT5vcHQgfCBvcHRzOworICAgICAgcmV0dXJuQ29kZShzZXRfbWVudV9vcHRzKG1lbnUsIG9wdHMpKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgTWVudV9PcHRpb25zIG1lbnVfb3B0cyhjb25zdCBNRU5VICptZW51KQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBvcHRpb25zIGZvciB0aGlzIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBNZW51IG9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChNZW51X09wdGlvbnMpCittZW51X29wdHMoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJtZW51X29wdHMoJXApIiksIG1lbnUpKTsKKyAgcmV0dXJuTWVudU9wdHMoQUxMX01FTlVfT1BUUyAmIE5vcm1hbGl6ZV9NZW51KG1lbnUpLT5vcHQpOworfQorCisvKiBtX29wdHMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9wYWQuYyBiL21lbnUvbV9wYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjA4M2JhCi0tLSAvZGV2L251bGwKKysrIGIvbWVudS9tX3BhZC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fcGFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogQ29udHJvbCBtZW51cyBwYWRkaW5nIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9wYWQuYyx2IDEuMTAgMjAwNC8xMi8yNSAyMTo0MDo1OCB0b20gRXhwICQiKQorCisvKiBNYWNybyB0byByZWRyYXcgbWVudSBpZiBpdCBpcyBwb3N0ZWQgYW5kIGNoYW5nZWQgKi8KKyNkZWZpbmUgUmVmcmVzaF9NZW51KG1lbnUpIFwKKyAgIGlmICggKG1lbnUpICYmICgobWVudSktPnN0YXR1cyAmIF9QT1NURUQpIClcCisgICB7XAorICAgICAgX25jX0RyYXdfTWVudSggbWVudSApO1wKKyAgICAgIF9uY19TaG93X01lbnUoIG1lbnUgKTtcCisgICB9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfcGFkKE1FTlUgKm1lbnUsIGludCBwYWQpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIHNlcGFyYXRlIHRoZSBpdGVtIG5hbWUKK3wgICAgICAgICAgICAgICAgICAgIGZyb20gaXRzIGRlc2NyaXB0aW9uLiBUaGlzIG11c3QgYmUgYSBwcmludGFibGUgCit8ICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gYW4gaW52YWxpZCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV9wYWQoTUVOVSAqIG1lbnUsIGludCBwYWQpCit7CisgIGJvb2wgZG9fcmVmcmVzaCA9IChtZW51ICE9IChNRU5VICopIDApOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9wYWQoJXAsJWQpIiksIG1lbnUsIHBhZCkpOworCisgIGlmICghaXNwcmludChVQ2hhcihwYWQpKSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIE5vcm1hbGl6ZV9NZW51KG1lbnUpOworICBtZW51LT5wYWQgPSBwYWQ7CisKKyAgaWYgKGRvX3JlZnJlc2gpCisgICAgUmVmcmVzaF9NZW51KG1lbnUpOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtZW51X3BhZChjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcGFkZGluZyBjaGFyYWN0ZXIKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBwYWQgY2hhcmFjdGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorbWVudV9wYWQoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJtZW51X3BhZCglcCkiKSwgbWVudSkpOworICByZXR1cm5Db2RlKE5vcm1hbGl6ZV9NZW51KG1lbnUpLT5wYWQpOworfQorCisvKiBtX3BhZC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbWVudS9tX3BhdHRlcm4uYyBiL21lbnUvbV9wYXR0ZXJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3MTM5MAotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV9wYXR0ZXJuLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fcGF0dGVybiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogUGF0dGVybiBtYXRjaGluZyBoYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9wYXR0ZXJuLmMsdiAxLjE1IDIwMDYvMTEvMDQgMTg6NDY6MzkgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGNoYXIgKm1lbnVfcGF0dGVybihjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcGF0dGVybiBidWZmZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBOVUxMICAgICAgICAgIC0gaWYgdGhlcmUgaXMgbm8gcGF0dGVybiBidWZmZXIgYWxsb2NhdGVkCit8ICAgICAgICAgICAgICAgICAgICBFbXB0eVN0cmluZyAgIC0gaWYgdGhlcmUgaXMgYSBwYXR0ZXJuIGJ1ZmZlciBidXQgbm8KK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuIGlzIHN0b3JlZAorfCAgICAgICAgICAgICAgICAgICAgUGF0dGVyblN0cmluZyAtIGFzIGV4cGVjdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorbWVudV9wYXR0ZXJuKGNvbnN0IE1FTlUgKiBtZW51KQoreworICBzdGF0aWMgY2hhciBlbXB0eVtdID0gIiI7CisKKyAgVCgoVF9DQUxMRUQoIm1lbnVfcGF0dGVybiglcCkiKSwgbWVudSkpOworICByZXR1cm5QdHIobWVudSA/IChtZW51LT5wYXR0ZXJuID8gbWVudS0+cGF0dGVybiA6IGVtcHR5KSA6IDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X3BhdHRlcm4oTUVOVSAqbWVudSwgY29uc3QgY2hhciAqcCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgbWF0Y2ggcGF0dGVybiBmb3IgYSBtZW51IGFuZCBwb3NpdGlvbiB0byB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGZpcnN0IGl0ZW0gdGhhdCBtYXRjaGVzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgbWVudSBvciBwYXR0ZXJuIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX1NUQVRFICAgICAgIC0gbWVudSBpbiB1c2VyIGhvb2sgcm91dGluZQorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgLSBubyBpdGVtcyBjb25uZWN0ZWQgdG8gbWVudQorfCAgICAgICAgICAgICAgICAgICAgRV9OT19NQVRDSCAgICAgICAgLSBubyBpdGVtIG1hdGNoZXMgcGF0dGVybgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tZW51X3BhdHRlcm4oTUVOVSAqIG1lbnUsIGNvbnN0IGNoYXIgKnApCit7CisgIElURU0gKm1hdGNoaXRlbTsKKyAgaW50IG1hdGNocG9zOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9wYXR0ZXJuKCVwLCVzKSIpLCBtZW51LCBfbmNfdmlzYnVmKHApKSk7CisKKyAgaWYgKCFtZW51IHx8ICFwKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCEobWVudS0+aXRlbXMpKQorICAgIFJFVFVSTihFX05PVF9DT05ORUNURUQpOworCisgIGlmIChtZW51LT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorICAgIFJFVFVSTihFX0JBRF9TVEFURSk7CisKKyAgUmVzZXRfUGF0dGVybihtZW51KTsKKworICBpZiAoISgqcCkpCisgICAgeworICAgICAgcG9zX21lbnVfY3Vyc29yKG1lbnUpOworICAgICAgUkVUVVJOKEVfT0spOworICAgIH0KKworICBpZiAobWVudS0+c3RhdHVzICYgX0xJTktfTkVFREVEKQorICAgIF9uY19MaW5rX0l0ZW1zKG1lbnUpOworCisgIG1hdGNocG9zID0gbWVudS0+dG9wcm93OworICBtYXRjaGl0ZW0gPSBtZW51LT5jdXJpdGVtOworICBhc3NlcnQobWF0Y2hpdGVtKTsKKworICB3aGlsZSAoKnApCisgICAgeworICAgICAgaWYgKCFpc3ByaW50KFVDaGFyKCpwKSkgfHwKKwkgIChfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lKG1lbnUsICpwLCAmbWF0Y2hpdGVtKSAhPSBFX09LKSkKKwl7CisJICBSZXNldF9QYXR0ZXJuKG1lbnUpOworCSAgcG9zX21lbnVfY3Vyc29yKG1lbnUpOworCSAgUkVUVVJOKEVfTk9fTUFUQ0gpOworCX0KKyAgICAgIHArKzsKKyAgICB9CisKKyAgLyogVGhpcyBpcyByZWFjaGVkIGlmIHRoZXJlIHdhcyBhIG1hdGNoLiBTbyB3ZSBwb3NpdGlvbiB0byB0aGUgbmV3IGl0ZW0gKi8KKyAgQWRqdXN0X0N1cnJlbnRfSXRlbShtZW51LCBtYXRjaHBvcywgbWF0Y2hpdGVtKTsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBtX3BhdHRlcm4uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9wb3N0LmMgYi9tZW51L21fcG9zdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1N2QwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21fcG9zdC5jCkBAIC0wLDAgKzEsMzc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX3Bvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFdyaXRlIG9yIGVyYXNlIG1lbnVzIGZyb20gYXNzb2NpYXRlZCBzdWJ3aW5kb3dzICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fcG9zdC5jLHYgMS4yNiAyMDA0LzEyLzI1IDIzOjU3OjA0IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBfbmNfUG9zdF9JdGVtKE1FTlUgKm1lbnUsIElURU0gKml0ZW0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEcmF3IHRoZSBpdGVtIGluIHRoZSBtZW51cyB3aW5kb3cgYXQgdGhlIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIHdpbmRvdyBwb3NpdGlvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfUG9zdF9JdGVtKGNvbnN0IE1FTlUgKiBtZW51LCBjb25zdCBJVEVNICogaXRlbSkKK3sKKyAgaW50IGk7CisgIGNodHlwZSBjaDsKKyAgaW50IGl0ZW1feCwgaXRlbV95OworICBpbnQgY291bnQgPSAwOworICBib29sIGlzZm9yZSA9IEZBTFNFLCBpc2JhY2sgPSBGQUxTRSwgaXNncmV5ID0gRkFMU0U7CisgIGludCBuYW1lX2xlbjsKKyAgaW50IGRlc2NfbGVuOworCisgIGFzc2VydChtZW51LT53aW4pOworCisgIGdldHl4KG1lbnUtPndpbiwgaXRlbV95LCBpdGVtX3gpOworCisgIC8qIFdlIG5lZWQgYSBtYXJrZXIgaWZmCisgICAgIC0gaXQgaXMgYSBvbmV2YWx1ZWQgbWVudSBhbmQgaXQgaXMgdGhlIGN1cnJlbnQgaXRlbQorICAgICAtIG9yIGl0IGhhcyBhIHNlbGVjdGlvbiB2YWx1ZQorICAgKi8KKyAgd2F0dHJvbihtZW51LT53aW4sIG1lbnUtPmJhY2spOworICBpZiAoaXRlbS0+dmFsdWUgfHwgKGl0ZW0gPT0gbWVudS0+Y3VyaXRlbSkpCisgICAgeworICAgICAgaWYgKG1lbnUtPm1hcmtsZW4pCisJeworCSAgLyogSW4gYSBtdWx0aSBzZWxlY3Rpb24gbWVudSB3ZSB1c2UgdGhlIGZvcmUgYXR0cmlidXRlCisJICAgICBmb3IgYSBzZWxlY3RlZCBtYXJrZXIgdGhhdCBpcyBub3QgdGhlIGN1cnJlbnQgb25lLgorCSAgICAgVGhpcyBpbXByb3ZlcyB2aXN1YWxpemF0aW9uIG9mIHRoZSBtZW51LCBiZWNhdXNlIG5vdworCSAgICAgYWx3YXlzIHRoZSAnbm9ybWFsJyBtYXJrZXIgZGVub3RlcyB0aGUgY3VycmVudAorCSAgICAgaXRlbS4gKi8KKwkgIGlmICghKG1lbnUtPm9wdCAmIE9fT05FVkFMVUUpICYmIGl0ZW0tPnZhbHVlICYmIGl0ZW0gIT0gbWVudS0+Y3VyaXRlbSkKKwkgICAgeworCSAgICAgIHdhdHRyb24obWVudS0+d2luLCBtZW51LT5mb3JlKTsKKwkgICAgICBpc2ZvcmUgPSBUUlVFOworCSAgICB9CisJICB3YWRkc3RyKG1lbnUtPndpbiwgbWVudS0+bWFyayk7CisJICBpZiAoaXNmb3JlKQorCSAgICB7CisJICAgICAgd2F0dHJvbihtZW51LT53aW4sIG1lbnUtPmZvcmUpOworCSAgICAgIGlzZm9yZSA9IEZBTFNFOworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQkJCQkvKiBvdGhlcndpc2Ugd2UgaGF2ZSB0byB3aXBlIG91dCB0aGUgbWFya2VyIGFyZWEgKi8KKyAgICBmb3IgKGNoID0gJyAnLCBpID0gbWVudS0+bWFya2xlbjsgaSA+IDA7IGktLSkKKyAgICAgIHdhZGRjaChtZW51LT53aW4sIGNoKTsKKyAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5iYWNrKTsKKyAgY291bnQgKz0gbWVudS0+bWFya2xlbjsKKworICAvKiBGaXJzdCB3ZSBoYXZlIHRvIGNhbGN1bGF0ZSB0aGUgYXR0cmlidXRlIGRlcGVuZGluZyBvbiBzZWxlY3RhYmlsaXR5CisgICAgIGFuZCBzZWxlY3Rpb24gc3RhdHVzCisgICAqLworICBpZiAoIShpdGVtLT5vcHQgJiBPX1NFTEVDVEFCTEUpKQorICAgIHsKKyAgICAgIHdhdHRyb24obWVudS0+d2luLCBtZW51LT5ncmV5KTsKKyAgICAgIGlzZ3JleSA9IFRSVUU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGl0ZW0tPnZhbHVlIHx8IGl0ZW0gPT0gbWVudS0+Y3VyaXRlbSkKKwl7CisJICB3YXR0cm9uKG1lbnUtPndpbiwgbWVudS0+Zm9yZSk7CisJICBpc2ZvcmUgPSBUUlVFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB3YXR0cm9uKG1lbnUtPndpbiwgbWVudS0+YmFjayk7CisJICBpc2JhY2sgPSBUUlVFOworCX0KKyAgICB9CisKKyAgd2FkZG5zdHIobWVudS0+d2luLCBpdGVtLT5uYW1lLnN0ciwgaXRlbS0+bmFtZS5sZW5ndGgpOworICBuYW1lX2xlbiA9IF9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aCgmKGl0ZW0tPm5hbWUpKTsKKyAgZm9yIChjaCA9ICcgJywgaSA9IG1lbnUtPm5hbWVsZW4gLSBuYW1lX2xlbjsgaSA+IDA7IGktLSkKKyAgICB7CisgICAgICB3YWRkY2gobWVudS0+d2luLCBjaCk7CisgICAgfQorICBjb3VudCArPSBtZW51LT5uYW1lbGVuOworCisgIC8qIFNob3cgZGVzY3JpcHRpb24gaWYgcmVxdWlyZWQgYW5kIGF2YWlsYWJsZSAqLworICBpZiAoKG1lbnUtPm9wdCAmIE9fU0hPV0RFU0MpICYmIG1lbnUtPmRlc2NsZW4gPiAwKQorICAgIHsKKyAgICAgIGludCBtID0gbWVudS0+c3BjX2Rlc2MgLyAyOworICAgICAgaW50IGN5ID0gLTEsIGN4ID0gLTE7CisKKyAgICAgIGZvciAoY2ggPSAnICcsIGkgPSAwOyBpIDwgbWVudS0+c3BjX2Rlc2M7IGkrKykKKwl7CisJICBpZiAoaSA9PSBtKQorCSAgICB7CisJICAgICAgd2FkZGNoKG1lbnUtPndpbiwgbWVudS0+cGFkKTsKKwkgICAgICBnZXR5eChtZW51LT53aW4sIGN5LCBjeCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgd2FkZGNoKG1lbnUtPndpbiwgY2gpOworCX0KKyAgICAgIGlmIChpdGVtLT5kZXNjcmlwdGlvbi5sZW5ndGgpCisJd2FkZG5zdHIobWVudS0+d2luLCBpdGVtLT5kZXNjcmlwdGlvbi5zdHIsIGl0ZW0tPmRlc2NyaXB0aW9uLmxlbmd0aCk7CisgICAgICBkZXNjX2xlbiA9IF9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aCgmKGl0ZW0tPmRlc2NyaXB0aW9uKSk7CisgICAgICBmb3IgKGNoID0gJyAnLCBpID0gbWVudS0+ZGVzY2xlbiAtIGRlc2NfbGVuOyBpID4gMDsgaS0tKQorCXsKKwkgIHdhZGRjaChtZW51LT53aW4sIGNoKTsKKwl9CisgICAgICBjb3VudCArPSBtZW51LT5kZXNjbGVuICsgbWVudS0+c3BjX2Rlc2M7CisKKyAgICAgIGlmIChtZW51LT5zcGNfcm93cyA+IDEpCisJeworCSAgaW50IGosIGssIG5jeSwgbmN4OworCisJICBhc3NlcnQoY3ggPj0gMCAmJiBjeSA+PSAwKTsKKwkgIGdldHl4KG1lbnUtPndpbiwgbmN5LCBuY3gpOworCSAgaWYgKGlzZ3JleSkKKwkgICAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5ncmV5KTsKKwkgIGVsc2UgaWYgKGlzZm9yZSkKKwkgICAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5mb3JlKTsKKwkgIHdhdHRyb24obWVudS0+d2luLCBtZW51LT5iYWNrKTsKKwkgIGZvciAoaiA9IDE7IGogPCBtZW51LT5zcGNfcm93czsgaisrKQorCSAgICB7CisJICAgICAgaWYgKChpdGVtX3kgKyBqKSA8IGdldG1heHkobWVudS0+d2luKSkKKwkJeworCQkgIHdtb3ZlKG1lbnUtPndpbiwgaXRlbV95ICsgaiwgaXRlbV94KTsKKwkJICBmb3IgKGsgPSAwOyBrIDwgY291bnQ7IGsrKykKKwkJICAgIHdhZGRjaChtZW51LT53aW4sICcgJyk7CisJCX0KKwkgICAgICBpZiAoKGN5ICsgaikgPCBnZXRtYXh5KG1lbnUtPndpbikpCisJCW12d2FkZGNoKG1lbnUtPndpbiwgY3kgKyBqLCBjeCAtIDEsIG1lbnUtPnBhZCk7CisJICAgIH0KKwkgIHdtb3ZlKG1lbnUtPndpbiwgbmN5LCBuY3gpOworCSAgaWYgKCFpc2JhY2spCisJICAgIHdhdHRyb2ZmKG1lbnUtPndpbiwgbWVudS0+YmFjayk7CisJfQorICAgIH0KKworICAvKiBSZW1vdmUgYXR0cmlidXRlcyAqLworICBpZiAoaXNmb3JlKQorICAgIHdhdHRyb2ZmKG1lbnUtPndpbiwgbWVudS0+Zm9yZSk7CisgIGlmIChpc2JhY2spCisgICAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5iYWNrKTsKKyAgaWYgKGlzZ3JleSkKKyAgICB3YXR0cm9mZihtZW51LT53aW4sIG1lbnUtPmdyZXkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX0RyYXdfTWVudShjb25zdCBNRU5VICopCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEaXNwbGF5IHRoZSBtZW51IGluIGl0cyB3aW5kb3dzCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19EcmF3X01lbnUoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIElURU0gKml0ZW0gPSBtZW51LT5pdGVtc1swXTsKKyAgSVRFTSAqbGFzdGhvciwgKmxhc3R2ZXJ0OworICBJVEVNICpoaXRlbTsKKyAgaW50IHkgPSAwOworICBjaHR5cGUgc19ia2dkOworCisgIGFzc2VydChpdGVtICYmIG1lbnUtPndpbik7CisKKyAgc19ia2dkID0gZ2V0YmtnZChtZW51LT53aW4pOworICB3YmtnZHNldChtZW51LT53aW4sIG1lbnUtPmJhY2spOworICB3ZXJhc2UobWVudS0+d2luKTsKKyAgd2JrZ2RzZXQobWVudS0+d2luLCBzX2JrZ2QpOworCisgIGxhc3R2ZXJ0ID0gKG1lbnUtPm9wdCAmIE9fTk9OQ1lDTElDKSA/IChJVEVNICopIDAgOiBpdGVtOworCisgIGRvCisgICAgeworICAgICAgd21vdmUobWVudS0+d2luLCB5LCAwKTsKKworICAgICAgaGl0ZW0gPSBpdGVtOworICAgICAgbGFzdGhvciA9IChtZW51LT5vcHQgJiBPX05PTkNZQ0xJQykgPyAoSVRFTSAqKSAwIDogaGl0ZW07CisKKyAgICAgIGRvCisJeworCSAgX25jX1Bvc3RfSXRlbShtZW51LCBoaXRlbSk7CisKKwkgIHdhdHRyb24obWVudS0+d2luLCBtZW51LT5iYWNrKTsKKwkgIGlmICgoKGhpdGVtID0gaGl0ZW0tPnJpZ2h0KSAhPSBsYXN0aG9yKSAmJiBoaXRlbSkKKwkgICAgeworCSAgICAgIGludCBpLCBqLCBjeSwgY3g7CisJICAgICAgY2h0eXBlIGNoID0gJyAnOworCisJICAgICAgZ2V0eXgobWVudS0+d2luLCBjeSwgY3gpOworCSAgICAgIGZvciAoaiA9IDA7IGogPCBtZW51LT5zcGNfcm93czsgaisrKQorCQl7CisJCSAgd21vdmUobWVudS0+d2luLCBjeSArIGosIGN4KTsKKwkJICBmb3IgKGkgPSAwOyBpIDwgbWVudS0+c3BjX2NvbHM7IGkrKykKKwkJICAgIHsKKwkJICAgICAgd2FkZGNoKG1lbnUtPndpbiwgY2gpOworCQkgICAgfQorCQl9CisJICAgICAgd21vdmUobWVudS0+d2luLCBjeSwgY3ggKyBtZW51LT5zcGNfY29scyk7CisJICAgIH0KKwl9CisgICAgICB3aGlsZSAoaGl0ZW0gJiYgKGhpdGVtICE9IGxhc3Rob3IpKTsKKyAgICAgIHdhdHRyb2ZmKG1lbnUtPndpbiwgbWVudS0+YmFjayk7CisKKyAgICAgIGl0ZW0gPSBpdGVtLT5kb3duOworICAgICAgeSArPSBtZW51LT5zcGNfcm93czsKKworICAgIH0KKyAgd2hpbGUgKGl0ZW0gJiYgKGl0ZW0gIT0gbGFzdHZlcnQpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgcG9zdF9tZW51KE1FTlUgKikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBvc3QgYSBtZW51IHRvIHRoZSBzY3JlZW4uIFRoaXMgbWFrZXMgaXQgdmlzaWJsZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgIC0gbm90IGEgdmFsaWQgbWVudSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgIC0gZXJyb3IgaW4gbG93ZXIgbGF5ZXJzCit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9DT05ORUNURUQgICAgIC0gTm8gaXRlbXMgY29ubmVjdGVkIHRvIG1lbnUKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX1NUQVRFICAgICAgICAgLSBNZW51IGluIHVzZXJleGl0IHJvdXRpbmUKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgICAgICAgLSBNZW51IGFscmVhZHkgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorcG9zdF9tZW51KE1FTlUgKiBtZW51KQoreworICBUKChUX0NBTExFRCgicG9zdF9tZW51KCVwKSIpLCBtZW51KSk7CisKKyAgaWYgKCFtZW51KQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKG1lbnUtPnN0YXR1cyAmIF9JTl9EUklWRVIpCisgICAgUkVUVVJOKEVfQkFEX1NUQVRFKTsKKworICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKyAgICBSRVRVUk4oRV9QT1NURUQpOworCisgIGlmIChtZW51LT5pdGVtcyAmJiAqKG1lbnUtPml0ZW1zKSkKKyAgICB7CisgICAgICBpbnQgeTsKKyAgICAgIGludCBoID0gMSArIG1lbnUtPnNwY19yb3dzICogKG1lbnUtPnJvd3MgLSAxKTsKKworICAgICAgV0lORE9XICp3aW4gPSBHZXRfTWVudV9XaW5kb3cobWVudSk7CisgICAgICBpbnQgbWF4eSA9IGdldG1heHkod2luKTsKKworICAgICAgaWYgKChtZW51LT53aW4gPSBuZXdwYWQoaCwgbWVudS0+d2lkdGgpKSkKKwl7CisJICB5ID0gKG1heHkgPj0gaCkgPyBoIDogbWF4eTsKKwkgIGlmICh5ID49IG1lbnUtPmhlaWdodCkKKwkgICAgeSA9IG1lbnUtPmhlaWdodDsKKwkgIGlmICghKG1lbnUtPnN1YiA9IHN1YnBhZChtZW51LT53aW4sIHksIG1lbnUtPndpZHRoLCAwLCAwKSkpCisJICAgIFJFVFVSTihFX1NZU1RFTV9FUlJPUik7CisJfQorICAgICAgZWxzZQorCVJFVFVSTihFX1NZU1RFTV9FUlJPUik7CisKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfTElOS19ORUVERUQpCisJX25jX0xpbmtfSXRlbXMobWVudSk7CisgICAgfQorICBlbHNlCisgICAgUkVUVVJOKEVfTk9UX0NPTk5FQ1RFRCk7CisKKyAgbWVudS0+c3RhdHVzIHw9IF9QT1NURUQ7CisKKyAgaWYgKCEobWVudS0+b3B0ICYgT19PTkVWQUxVRSkpCisgICAgeworICAgICAgSVRFTSAqKml0ZW1zOworCisgICAgICBmb3IgKGl0ZW1zID0gbWVudS0+aXRlbXM7ICppdGVtczsgaXRlbXMrKykKKwl7CisJICAoKml0ZW1zKS0+dmFsdWUgPSBGQUxTRTsKKwl9CisgICAgfQorCisgIF9uY19EcmF3X01lbnUobWVudSk7CisKKyAgQ2FsbF9Ib29rKG1lbnUsIG1lbnVpbml0KTsKKyAgQ2FsbF9Ib29rKG1lbnUsIGl0ZW1pbml0KTsKKworICBfbmNfU2hvd19NZW51KG1lbnUpOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgdW5wb3N0X21lbnUoTUVOVSAqKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRGV0YWNoIG1lbnUgZnJvbSBzY3JlZW4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBub3QgYSB2YWxpZCBtZW51IHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX1NUQVRFICAgICAgIC0gbWVudSBpbiB1c2VyZXhpdCByb3V0aW5lCit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9QT1NURUQgICAgICAtIG1lbnUgaXMgbm90IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3VucG9zdF9tZW51KE1FTlUgKiBtZW51KQoreworICBXSU5ET1cgKndpbjsKKworICBUKChUX0NBTExFRCgidW5wb3N0X21lbnUoJXApIiksIG1lbnUpKTsKKworICBpZiAoIW1lbnUpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAobWVudS0+c3RhdHVzICYgX0lOX0RSSVZFUikKKyAgICBSRVRVUk4oRV9CQURfU1RBVEUpOworCisgIGlmICghKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpKQorICAgIFJFVFVSTihFX05PVF9QT1NURUQpOworCisgIENhbGxfSG9vayhtZW51LCBpdGVtdGVybSk7CisgIENhbGxfSG9vayhtZW51LCBtZW51dGVybSk7CisKKyAgd2luID0gR2V0X01lbnVfV2luZG93KG1lbnUpOworICB3ZXJhc2Uod2luKTsKKyAgd3N5bmN1cCh3aW4pOworCisgIGFzc2VydChtZW51LT5zdWIpOworICBkZWx3aW4obWVudS0+c3ViKTsKKyAgbWVudS0+c3ViID0gKFdJTkRPVyAqKTA7CisKKyAgYXNzZXJ0KG1lbnUtPndpbik7CisgIGRlbHdpbihtZW51LT53aW4pOworICBtZW51LT53aW4gPSAoV0lORE9XICopMDsKKworICBtZW51LT5zdGF0dXMgJj0gfl9QT1NURUQ7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBtX3Bvc3QuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9yZXFfbmFtZS5jIGIvbWVudS9tX3JlcV9uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkNTFiMQotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV9yZXFfbmFtZS5jCkBAIC0wLDAgKzEsMTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX3JlcXVlc3RfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFJvdXRpbmVzIHRvIGhhbmRsZSBleHRlcm5hbCBuYW1lcyBvZiBtZW51IHJlcXVlc3RzICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fcmVxX25hbWUuYyx2IDEuMjAgMjAwOC8wOS8xMyAxODo1OToxNyB0b20gRXhwICQiKQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVxdWVzdF9uYW1lc1tNQVhfTUVOVV9DT01NQU5EIC0gTUlOX01FTlVfQ09NTUFORCArIDFdID0KK3sKKyAgIkxFRlRfSVRFTSIsCisgICJSSUdIVF9JVEVNIiwKKyAgIlVQX0lURU0iLAorICAiRE9XTl9JVEVNIiwKKyAgIlNDUl9VTElORSIsCisgICJTQ1JfRExJTkUiLAorICAiU0NSX0RQQUdFIiwKKyAgIlNDUl9VUEFHRSIsCisgICJGSVJTVF9JVEVNIiwKKyAgIkxBU1RfSVRFTSIsCisgICJORVhUX0lURU0iLAorICAiUFJFVl9JVEVNIiwKKyAgIlRPR0dMRV9JVEVNIiwKKyAgIkNMRUFSX1BBVFRFUk4iLAorICAiQkFDS19QQVRURVJOIiwKKyAgIk5FWFRfTUFUQ0giLAorICAiUFJFVl9NQVRDSCIKK307CisKKyNkZWZpbmUgQV9TSVpFIChzaXplb2YocmVxdWVzdF9uYW1lcykvc2l6ZW9mKHJlcXVlc3RfbmFtZXNbMF0pKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgY29uc3QgY2hhciAqIG1lbnVfcmVxdWVzdF9uYW1lIChpbnQgcmVxdWVzdCk7Cit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIGV4dGVybmFsIG5hbWUgb2YgYSBtZW51IHJlcXVlc3QuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIG5hbWUgICAgICAtIG9uIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgIC0gb24gaW52YWxpZCByZXF1ZXN0IGNvZGUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCittZW51X3JlcXVlc3RfbmFtZShpbnQgcmVxdWVzdCkKK3sKKyAgVCgoVF9DQUxMRUQoIm1lbnVfcmVxdWVzdF9uYW1lKCVkKSIpLCByZXF1ZXN0KSk7CisgIGlmICgocmVxdWVzdCA8IE1JTl9NRU5VX0NPTU1BTkQpIHx8IChyZXF1ZXN0ID4gTUFYX01FTlVfQ09NTUFORCkpCisgICAgeworICAgICAgU0VUX0VSUk9SKEVfQkFEX0FSR1VNRU5UKTsKKyAgICAgIHJldHVybkNQdHIoKGNvbnN0IGNoYXIgKikwKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm5DUHRyKHJlcXVlc3RfbmFtZXNbcmVxdWVzdCAtIE1JTl9NRU5VX0NPTU1BTkRdKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtZW51X3JlcXVlc3RfYnlfbmFtZSAoY29uc3QgY2hhciAqc3RyKTsKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNlYXJjaCBmb3IgYSByZXF1ZXN0IHdpdGggdGhpcyBuYW1lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUmVxdWVzdCBJZCAgICAgICAtIG9uIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9fTUFUQ0ggICAgICAgLSByZXF1ZXN0IG5vdCBmb3VuZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK21lbnVfcmVxdWVzdF9ieV9uYW1lKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgLyogYmVjYXVzZSB0aGUgdGFibGUgaXMgc28gc21hbGwsIGl0IGRvZXNuJ3QgcmVhbGx5IGh1cnQKKyAgICAgdG8gcnVuIHNlcXVlbnRpYWxseSB0aHJvdWdoIGl0LgorICAgKi8KKyAgdW5zaWduZWQgaW50IGkgPSAwOworICBjaGFyIGJ1ZlsxNl07CisKKyAgVCgoVF9DQUxMRUQoIm1lbnVfcmVxdWVzdF9ieV9uYW1lKCVzKSIpLCBfbmNfdmlzYnVmKHN0cikpKTsKKworICBpZiAoc3RyKQorICAgIHsKKyAgICAgIHN0cm5jcHkoYnVmLCBzdHIsIHNpemVvZihidWYpKTsKKyAgICAgIHdoaWxlICgoaSA8IHNpemVvZihidWYpKSAmJiAoYnVmW2ldICE9ICdcMCcpKQorCXsKKwkgIGJ1ZltpXSA9IHRvdXBwZXIoVUNoYXIoYnVmW2ldKSk7CisJICBpKys7CisJfQorCisgICAgICBmb3IgKGkgPSAwOyBpIDwgQV9TSVpFOyBpKyspCisJeworCSAgaWYgKHN0cm5jbXAocmVxdWVzdF9uYW1lc1tpXSwgYnVmLCBzaXplb2YoYnVmKSkgPT0gMCkKKwkgICAgcmV0dXJuQ29kZShNSU5fTUVOVV9DT01NQU5EICsgKGludClpKTsKKwl9CisgICAgfQorICBSRVRVUk4oRV9OT19NQVRDSCk7Cit9CisKKy8qIG1fcmVxX25hbWUuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9zY2FsZS5jIGIvbWVudS9tX3NjYWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjMmQ4NAotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV9zY2FsZS5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fc2NhbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogTWVudSBzY2FsaW5nIHJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9zY2FsZS5jLHYgMS45IDIwMDQvMTIvMTEgMjM6Mjk6MzQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzY2FsZV9tZW51KGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm5zIHRoZSBtaW5pbXVtIHdpbmRvdyBzaXplIG5lY2Vzc2FyeSBmb3IgdGhlCit8ICAgICAgICAgICAgICAgICAgICBzdWJ3aW5kb3cgb2YgbWVudS4gIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgICAgIC0gaW52YWxpZCBtZW51IHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgICAgICAtIG5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gbWVudQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NjYWxlX21lbnUoY29uc3QgTUVOVSAqIG1lbnUsIGludCAqcm93cywgaW50ICpjb2xzKQoreworICBUKChUX0NBTExFRCgic2NhbGVfbWVudSglcCwlcCwlcCkiKSwgbWVudSwgcm93cywgY29scykpOworCisgIGlmICghbWVudSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChtZW51LT5pdGVtcyAmJiAqKG1lbnUtPml0ZW1zKSkKKyAgICB7CisgICAgICBpZiAocm93cykKKwkqcm93cyA9IG1lbnUtPmhlaWdodDsKKyAgICAgIGlmIChjb2xzKQorCSpjb2xzID0gbWVudS0+d2lkdGg7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorICBlbHNlCisgICAgUkVUVVJOKEVfTk9UX0NPTk5FQ1RFRCk7Cit9CisKKy8qIG1fc2NhbGUuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbV9zcGFjaW5nLmMgYi9tZW51L21fc3BhY2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWJiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21fc3BhY2luZy5jCkBAIC0wLDAgKzEsMTA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX3NwYWNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFJvdXRpbmVzIHRvIGhhbmRsZSBzcGFjaW5nIGJldHdlZW4gZW50cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fc3BhY2luZy5jLHYgMS4xNyAyMDA0LzEyLzExIDIzOjI5OjM0IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgTUFYX1NQQ19ERVNDICgoVEFCU0laRSkgPyAoVEFCU0laRSkgOiA4KQorI2RlZmluZSBNQVhfU1BDX0NPTFMgKChUQUJTSVpFKSA/IChUQUJTSVpFKSA6IDgpCisjZGVmaW5lIE1BWF9TUENfUk9XUyAoMykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfc3BhY2luZyhNRU5VICptZW51LGludCBkZXNjLCBpbnQgciwgaW50IGMpOworfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBzcGFjaW5nIGJldHdlZW4gZW50cmllcworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfc3BhY2luZyhNRU5VICogbWVudSwgaW50IHNfZGVzYywgaW50IHNfcm93LCBpbnQgc19jb2wpCit7CisgIE1FTlUgKm07CQkJLyogc3BsaXQgZm9yIEFUQUMgd29ya2Fyb3VuZCAqLworCisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9zcGFjaW5nKCVwLCVkLCVkLCVkKSIpLCBtZW51LCBzX2Rlc2MsIHNfcm93LCBzX2NvbCkpOworCisgIG0gPSBOb3JtYWxpemVfTWVudShtZW51KTsKKworICBhc3NlcnQobSk7CisgIGlmIChtLT5zdGF0dXMgJiBfUE9TVEVEKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgaWYgKCgoc19kZXNjIDwgMCkgfHwgKHNfZGVzYyA+IE1BWF9TUENfREVTQykpIHx8CisgICAgICAoKHNfcm93IDwgMCkgfHwgKHNfcm93ID4gTUFYX1NQQ19ST1dTKSkgfHwKKyAgICAgICgoc19jb2wgPCAwKSB8fCAoc19jb2wgPiBNQVhfU1BDX0NPTFMpKSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIG0tPnNwY19kZXNjID0gc19kZXNjID8gc19kZXNjIDogMTsKKyAgbS0+c3BjX3Jvd3MgPSBzX3JvdyA/IHNfcm93IDogMTsKKyAgbS0+c3BjX2NvbHMgPSBzX2NvbCA/IHNfY29sIDogMTsKKyAgX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgobSk7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtZW51X3NwYWNpbmcgKGNvbnN0IE1FTlUgKixpbnQgKixpbnQgKixpbnQgKik7Cit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBpbmZvIGFib3V0IHNwYWNpbmcgYmV0d2VlbiB0aGUgZW50cmllcworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCittZW51X3NwYWNpbmcoY29uc3QgTUVOVSAqIG1lbnUsIGludCAqc19kZXNjLCBpbnQgKnNfcm93LCBpbnQgKnNfY29sKQoreworICBjb25zdCBNRU5VICptOwkJLyogc3BsaXQgZm9yIEFUQUMgd29ya2Fyb3VuZCAqLworCisgIFQoKFRfQ0FMTEVEKCJtZW51X3NwYWNpbmcoJXAsJXAsJXAsJXApIiksIG1lbnUsIHNfZGVzYywgc19yb3csIHNfY29sKSk7CisKKyAgbSA9IE5vcm1hbGl6ZV9NZW51KG1lbnUpOworCisgIGFzc2VydChtKTsKKyAgaWYgKHNfZGVzYykKKyAgICAqc19kZXNjID0gbS0+c3BjX2Rlc2M7CisgIGlmIChzX3JvdykKKyAgICAqc19yb3cgPSBtLT5zcGNfcm93czsKKyAgaWYgKHNfY29sKQorICAgICpzX2NvbCA9IG0tPnNwY19jb2xzOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyogbV9zcGFjaW5nLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21fc3ViLmMgYi9tZW51L21fc3ViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2NDljNQotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV9zdWIuYwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX3N1YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIE1lbnVzIHN1YndpbmRvdyBhc3NvY2lhdGlvbiByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fc3ViLmMsdiAxLjEwIDIwMDQvMTIvMjUgMjE6Mzg6MzEgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9zdWIoTUVOVSAqbWVudSwgV0lORE9XICp3aW4pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXRzIHRoZSBzdWJ3aW5kb3cgb2YgdGhlIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgIC0gbWVudSBpcyBhbHJlYWR5IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tZW51X3N1YihNRU5VICogbWVudSwgV0lORE9XICp3aW4pCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9zdWIoJXAsJXApIiksIG1lbnUsIHdpbikpOworCisgIGlmIChtZW51KQorICAgIHsKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorCVJFVFVSTihFX1BPU1RFRCk7CisgICAgICBtZW51LT51c2Vyc3ViID0gd2luOworICAgICAgX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgobWVudSk7CisgICAgfQorICBlbHNlCisgICAgX25jX0RlZmF1bHRfTWVudS51c2Vyc3ViID0gd2luOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIFdJTkRPVyAqbWVudV9zdWIoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdWJ3aW5kb3cgb2YgdGhlIG1lbnUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE5VTEwgb24gZXJyb3IsIG90aGVyd2lzZSBhIHBvaW50ZXIgdG8gdGhlIHdpbmRvdworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorbWVudV9zdWIoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIGNvbnN0IE1FTlUgKm0gPSBOb3JtYWxpemVfTWVudShtZW51KTsKKworICBUKChUX0NBTExFRCgibWVudV9zdWIoJXApIiksIG1lbnUpKTsKKyAgcmV0dXJuV2luKEdldF9NZW51X1dpbmRvdyhtKSk7Cit9CisKKy8qIG1fc3ViLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9tZW51L21fdHJhY2UuYyBiL21lbnUvbV90cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWY5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21fdHJhY2UuYwpAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX3RyYWNlLmMsdiAxLjMgMjAwNS8wMS8xNiAwMTowNjoxMSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChJVEVNICopCitfbmNfcmV0cmFjZV9pdGVtKElURU0gKiBjb2RlKQoreworICBUKChUX1JFVFVSTigiJXAiKSwgY29kZSkpOworICByZXR1cm4gY29kZTsKK30KKworTkNVUlNFU19FWFBPUlQoSVRFTSAqKikKK19uY19yZXRyYWNlX2l0ZW1fcHRyKElURU0gKiogY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKEl0ZW1fT3B0aW9ucykKK19uY19yZXRyYWNlX2l0ZW1fb3B0cyhJdGVtX09wdGlvbnMgY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVkIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKE1FTlUgKikKK19uY19yZXRyYWNlX21lbnUoTUVOVSAqIGNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChNZW51X0hvb2spCitfbmNfcmV0cmFjZV9tZW51X2hvb2soTWVudV9Ib29rIGNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChNZW51X09wdGlvbnMpCitfbmNfcmV0cmFjZV9tZW51X29wdHMoTWVudV9PcHRpb25zIGNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQpkaWZmIC0tZ2l0IGEvbWVudS9tX3VzZXJwdHIuYyBiL21lbnUvbV91c2VycHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNzhiMgotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbV91c2VycHRyLmMKQEAgLTAsMCArMSw3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV91c2VycHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBBc3NvY2lhdGUgYXBwbGljYXRpb24gZGF0YSB3aXRoIG1lbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX3VzZXJwdHIuYyx2IDEuMTYgMjAwNC8xMi8yNSAyMTozODo1NSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X3VzZXJwdHIoTUVOVSAqbWVudSwgdm9pZCAqdXNlcnB0cikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgcG9pbnRlciB0aGF0IGlzIHJlc2VydmVkIGluIGFueSBtZW51IHRvIHN0b3JlCit8ICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiByZWxldmFudCBpbmZvcm1hdGlvbnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfdXNlcnB0cihNRU5VICogbWVudSwgdm9pZCAqdXNlcnB0cikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X3VzZXJwdHIoJXAsJXApIiksIG1lbnUsIHVzZXJwdHIpKTsKKyAgTm9ybWFsaXplX01lbnUobWVudSktPnVzZXJwdHIgPSB1c2VycHRyOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkICptZW51X3VzZXJwdHIoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgcG9pbnRlciB0aGF0IGlzIHJlc2VydmVkIGluIGFueSBtZW51IHRvCit8ICAgICAgICAgICAgICAgICAgICBzdG9yZSBhcHBsaWNhdGlvbiByZWxldmFudCBpbmZvcm1hdGlvbnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBWYWx1ZSBvZiB0aGUgcG9pbnRlci4gSWYgbm8gc3VjaCBwb2ludGVyIGhhcyBiZWVuIHNldCwKK3wgICAgICAgICAgICAgICAgICAgIE5VTEwgaXMgcmV0dXJuZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVCh2b2lkICopCittZW51X3VzZXJwdHIoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJtZW51X3VzZXJwdHIoJXApIiksIG1lbnUpKTsKKyAgcmV0dXJuVm9pZFB0cihOb3JtYWxpemVfTWVudShtZW51KS0+dXNlcnB0cik7Cit9CisKKy8qIG1fdXNlcnB0ci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbWVudS9tX3dpbi5jIGIvbWVudS9tX3dpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZjg1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21fd2luLmMKQEAgLTAsMCArMSw4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV93aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBNZW51cyB3aW5kb3cgYXNzb2NpYXRpb24gcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX3dpbi5jLHYgMS4xNSAyMDA0LzEyLzI1IDIxOjM5OjIwIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfd2luKE1FTlUgKm1lbnUsIFdJTkRPVyAqd2luKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0cyB0aGUgd2luZG93IG9mIHRoZSBtZW51LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgICAgIC0gbWVudSBpcyBhbHJlYWR5IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tZW51X3dpbihNRU5VICogbWVudSwgV0lORE9XICp3aW4pCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV93aW4oJXAsJXApIiksIG1lbnUsIHdpbikpOworCisgIGlmIChtZW51KQorICAgIHsKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorCVJFVFVSTihFX1BPU1RFRCk7CisgICAgICBtZW51LT51c2Vyd2luID0gd2luOworICAgICAgX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgobWVudSk7CisgICAgfQorICBlbHNlCisgICAgX25jX0RlZmF1bHRfTWVudS51c2Vyd2luID0gd2luOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIFdJTkRPVyAqbWVudV93aW4oY29uc3QgTUVOVSAqKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJucyBwb2ludGVyIHRvIHRoZSB3aW5kb3cgb2YgdGhlIG1lbnUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE5VTEwgb24gZXJyb3IsIG90aGVyd2lzZSBwb2ludGVyIHRvIHdpbmRvdworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorbWVudV93aW4oY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIGNvbnN0IE1FTlUgKm0gPSBOb3JtYWxpemVfTWVudShtZW51KTsKKworICBUKChUX0NBTExFRCgibWVudV93aW4oJXApIiksIG1lbnUpKTsKKyAgcmV0dXJuV2luKG0tPnVzZXJ3aW4gPyBtLT51c2Vyd2luIDogc3Rkc2NyKTsKK30KKworLyogbV93aW4uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbWVudS5oIGIvbWVudS9tZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzNTJlYgotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbWVudS5oCkBAIC0wLDAgKzEsMjU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IG1lbnUuaCx2IDEuMTkgMjAwNy8wMi8yNCAxNzozMjoxMyB0b20gRXhwICQgKi8KKworI2lmbmRlZiBFVElfTUVOVQorI2RlZmluZSBFVElfTUVOVQorCisjaWZkZWYgQU1JR0EKKyNkZWZpbmUgVEVYVCBURVhUX25jdXJzZXMKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjaW5jbHVkZSA8ZXRpLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBpbnQgTWVudV9PcHRpb25zOwordHlwZWRlZiBpbnQgSXRlbV9PcHRpb25zOworCisvKiBNZW51IG9wdGlvbnM6ICovCisjZGVmaW5lIE9fT05FVkFMVUUgICAgICAoMHgwMSkKKyNkZWZpbmUgT19TSE9XREVTQyAgICAgICgweDAyKQorI2RlZmluZSBPX1JPV01BSk9SICAgICAgKDB4MDQpCisjZGVmaW5lIE9fSUdOT1JFQ0FTRSAgICAoMHgwOCkKKyNkZWZpbmUgT19TSE9XTUFUQ0ggICAgICgweDEwKQorI2RlZmluZSBPX05PTkNZQ0xJQyAgICAgKDB4MjApCisKKy8qIEl0ZW0gb3B0aW9uczogKi8KKyNkZWZpbmUgT19TRUxFQ1RBQkxFICAgICgweDAxKQorCit0eXBlZGVmIHN0cnVjdAoreworICBjb25zdCBjaGFyKiBzdHI7CisgIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsKK30gVEVYVDsKKwordHlwZWRlZiBzdHJ1Y3QgdGFnSVRFTSAKK3sKKyAgVEVYVCAgICAgICAgICAgbmFtZTsgICAgICAgIC8qIG5hbWUgb2YgbWVudSBpdGVtICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFRFWFQgICAgICAgICAgIGRlc2NyaXB0aW9uOyAvKiBkZXNjcmlwdGlvbiBvZiBpdGVtLCBvcHRpb25hbCBpbiBkaXNwbGF5ICAqLyAKKyAgc3RydWN0IHRhZ01FTlUgKmltZW51OyAgICAgIC8qIFBvaW50ZXIgdG8gcGFyZW50IG1lbnUgICAgICAgICAgICAgICAgICAgICovCisgIHZvaWQgICAgICAgICAgICp1c2VycHRyOyAgICAvKiBQb2ludGVyIHRvIHVzZXIgZGVmaW5lZCBwZXIgaXRlbSBkYXRhICAgICAqLyAKKyAgSXRlbV9PcHRpb25zICAgb3B0OyAgICAgICAgIC8qIEl0ZW0gb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAorICBzaG9ydCAgICAgICAgICBpbmRleDsgICAgICAgLyogSXRlbSBudW1iZXIgaWYgY29ubmVjdGVkIHRvIGEgbWVudSAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgeTsgICAgICAgICAgIC8qIHkgYW5kIHggbG9jYXRpb24gb2YgaXRlbSBpbiBtZW51ICAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIHg7CisgIGJvb2wgICAgICAgICAgIHZhbHVlOyAgICAgICAvKiBTZWxlY3Rpb24gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgc3RydWN0IHRhZ0lURU0gKmxlZnQ7ICAgICAgIC8qIG5laWdoYm9yIGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCB0YWdJVEVNICpyaWdodDsKKyAgc3RydWN0IHRhZ0lURU0gKnVwOworICBzdHJ1Y3QgdGFnSVRFTSAqZG93bjsKKworfSBJVEVNOworCit0eXBlZGVmIHZvaWQgKCpNZW51X0hvb2spKHN0cnVjdCB0YWdNRU5VICopOworCit0eXBlZGVmIHN0cnVjdCB0YWdNRU5VIAoreworICBzaG9ydCAgICAgICAgICBoZWlnaHQ7ICAgICAgICAgICAgICAgIC8qIE5yLiBvZiBjaGFycyBoaWdoICAgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgd2lkdGg7ICAgICAgICAgICAgICAgICAvKiBOci4gb2YgY2hhcnMgd2lkZSAgICAgICAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIHJvd3M7ICAgICAgICAgICAgICAgICAgLyogTnIuIG9mIGl0ZW1zIGhpZ2ggICAgICAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICBjb2xzOyAgICAgICAgICAgICAgICAgIC8qIE5yLiBvZiBpdGVtcyB3aWRlICAgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgZnJvd3M7ICAgICAgICAgICAgICAgICAvKiBOci4gb2YgZm9ybWF0dGVkIGl0ZW1zIGhpZ2ggICAgICovCisgIHNob3J0ICAgICAgICAgIGZjb2xzOyAgICAgICAgICAgICAgICAgLyogTnIuIG9mIGZvcm1hdHRlZCBpdGVtcyB3aWRlICAgICAqLworICBzaG9ydCAgICAgICAgICBhcm93czsgICAgICAgICAgICAgICAgIC8qIE5yLiBvZiBpdGVtcyBoaWdoIChhY3R1YWwpICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgbmFtZWxlbjsgICAgICAgICAgICAgICAvKiBNYXguIG5hbWUgbGVuZ3RoICAgICAgICAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIGRlc2NsZW47ICAgICAgICAgICAgICAgLyogTWF4LiBkZXNjcmlwdGlvbiBsZW5ndGggICAgICAgICAqLworICBzaG9ydCAgICAgICAgICBtYXJrbGVuOyAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBtYXJrLCBpZiBhbnkgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgaXRlbWxlbjsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygb25lIGl0ZW0gICAgICAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIHNwY19kZXNjOyAgICAgICAgICAgICAgLyogU3BhY2luZyBmb3IgZGVzY3JpcHRvciAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICBzcGNfY29sczsgICAgICAgICAgICAgIC8qIFNwYWNpbmcgZm9yIGNvbHVtbnMgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgc3BjX3Jvd3M7ICAgICAgICAgICAgICAvKiBTcGFjaW5nIGZvciByb3dzICAgICAgICAgICAgICAgICovIAorICBjaGFyICAgICAgICAgICpwYXR0ZXJuOyAgICAgICAgICAgICAgIC8qIEJ1ZmZlciB0byBzdG9yZSBtYXRjaCBjaGFycyAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgcGluZGV4OyAgICAgICAgICAgICAgICAvKiBJbmRleCBpbnRvIHBhdHRlcm4gYnVmZmVyICAgICAgICovCisgIFdJTkRPVyAgICAgICAgKndpbjsgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGNvbnRhaW5pbmcgbWVudSAgICAgICAgICAqLworICBXSU5ET1cgICAgICAgICpzdWI7ICAgICAgICAgICAgICAgICAgIC8qIFN1YndpbmRvdyBmb3IgbWVudSBkaXNwbGF5ICAgICAgKi8KKyAgV0lORE9XICAgICAgICAqdXNlcndpbjsgICAgICAgICAgICAgICAvKiBVc2VyJ3Mgd2luZG93ICAgICAgICAgICAgICAgICAgICovCisgIFdJTkRPVyAgICAgICAgKnVzZXJzdWI7ICAgICAgICAgICAgICAgLyogVXNlcidzIHN1YndpbmRvdyAgICAgICAgICAgICAgICAqLworICBJVEVNICAgICAgICAgICoqaXRlbXM7ICAgICAgICAgICAgICAgIC8qIGFycmF5IG9mIGl0ZW1zICAgICAgICAgICAgICAgICAgKi8gCisgIHNob3J0ICAgICAgICAgIG5pdGVtczsgICAgICAgICAgICAgICAgLyogTnIuIG9mIGl0ZW1zIGluIG1lbnUgICAgICAgICAgICAqLworICBJVEVNICAgICAgICAgICpjdXJpdGVtOyAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgaXRlbSAgICAgICAgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgdG9wcm93OyAgICAgICAgICAgICAgICAvKiBUb3Agcm93IG9mIG1lbnUgICAgICAgICAgICAgICAgICovCisgIGNodHlwZSAgICAgICAgIGZvcmU7ICAgICAgICAgICAgICAgICAgLyogU2VsZWN0aW9uIGF0dHJpYnV0ZSAgICAgICAgICAgICAqLworICBjaHR5cGUgICAgICAgICBiYWNrOyAgICAgICAgICAgICAgICAgIC8qIE5vbnNlbGVjdGlvbiBhdHRyaWJ1dGUgICAgICAgICAgKi8KKyAgY2h0eXBlICAgICAgICAgZ3JleTsgICAgICAgICAgICAgICAgICAvKiBJbmFjdGl2ZSBhdHRyaWJ1dGUgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgIHBhZDsgICAgICAgICAgICAgICAgICAgLyogUGFkIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAqLworCisgIE1lbnVfSG9vayAgICAgIG1lbnVpbml0OyAgICAgICAgICAgICAgLyogVXNlciBob29rcyAgICAgICAgICAgICAgICAgICAgICAqLworICBNZW51X0hvb2sgICAgICBtZW51dGVybTsKKyAgTWVudV9Ib29rICAgICAgaXRlbWluaXQ7CisgIE1lbnVfSG9vayAgICAgIGl0ZW10ZXJtOworCisgIHZvaWQgICAgICAgICAgKnVzZXJwdHI7ICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBtZW51cyB1c2VyIGRhdGEgICAgICAqLworICBjaGFyICAgICAgICAgICptYXJrOyAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbWFya2VyIHN0cmluZyAgICAgICAgKi8KKworICBNZW51X09wdGlvbnMgICBvcHQ7ICAgICAgICAgICAgICAgICAgIC8qIE1lbnUgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBzdGF0ZSBvZiBtZW51ICAgICAgICAgICovCisKK30gTUVOVTsKKworCisvKiBEZWZpbmUga2V5cyAqLworCisjZGVmaW5lIFJFUV9MRUZUX0lURU0gICAgICAgICAgIChLRVlfTUFYICsgMSkKKyNkZWZpbmUgUkVRX1JJR0hUX0lURU0gICAgICAgICAgKEtFWV9NQVggKyAyKQorI2RlZmluZSBSRVFfVVBfSVRFTSAgICAgICAgICAgICAoS0VZX01BWCArIDMpCisjZGVmaW5lIFJFUV9ET1dOX0lURU0gICAgICAgICAgIChLRVlfTUFYICsgNCkKKyNkZWZpbmUgUkVRX1NDUl9VTElORSAgICAgICAgICAgKEtFWV9NQVggKyA1KQorI2RlZmluZSBSRVFfU0NSX0RMSU5FICAgICAgICAgICAoS0VZX01BWCArIDYpCisjZGVmaW5lIFJFUV9TQ1JfRFBBR0UgICAgICAgICAgIChLRVlfTUFYICsgNykKKyNkZWZpbmUgUkVRX1NDUl9VUEFHRSAgICAgICAgICAgKEtFWV9NQVggKyA4KQorI2RlZmluZSBSRVFfRklSU1RfSVRFTSAgICAgICAgICAoS0VZX01BWCArIDkpCisjZGVmaW5lIFJFUV9MQVNUX0lURU0gICAgICAgICAgIChLRVlfTUFYICsgMTApCisjZGVmaW5lIFJFUV9ORVhUX0lURU0gICAgICAgICAgIChLRVlfTUFYICsgMTEpCisjZGVmaW5lIFJFUV9QUkVWX0lURU0gICAgICAgICAgIChLRVlfTUFYICsgMTIpCisjZGVmaW5lIFJFUV9UT0dHTEVfSVRFTSAgICAgICAgIChLRVlfTUFYICsgMTMpCisjZGVmaW5lIFJFUV9DTEVBUl9QQVRURVJOICAgICAgIChLRVlfTUFYICsgMTQpCisjZGVmaW5lIFJFUV9CQUNLX1BBVFRFUk4gICAgICAgIChLRVlfTUFYICsgMTUpCisjZGVmaW5lIFJFUV9ORVhUX01BVENIICAgICAgICAgIChLRVlfTUFYICsgMTYpCisjZGVmaW5lIFJFUV9QUkVWX01BVENIICAgICAgICAgIChLRVlfTUFYICsgMTcpCisKKyNkZWZpbmUgTUlOX01FTlVfQ09NTUFORCAgICAgICAgKEtFWV9NQVggKyAxKQorI2RlZmluZSBNQVhfTUVOVV9DT01NQU5EICAgICAgICAoS0VZX01BWCArIDE3KQorCisvKgorICogU29tZSBBVCZUIGNvZGUgZXhwZWN0cyBNQVhfQ09NTUFORCB0byBiZSBvdXQtb2YtYmFuZCBub3QKKyAqIGp1c3QgZm9yIG1lbnUgY29tbWFuZHMgYnV0IGZvciBmb3JtcyBvbmVzIGFzIHdlbGwuCisgKi8KKyNpZiBkZWZpbmVkKE1BWF9DT01NQU5EKQorIyAgaWYgKE1BWF9NRU5VX0NPTU1BTkQgPiBNQVhfQ09NTUFORCkKKyMgICAgZXJyb3IgU29tZXRoaW5nIGlzIHdyb25nIC0tIE1BWF9NRU5VX0NPTU1BTkQgaXMgZ3JlYXRlciB0aGFuIE1BWF9DT01NQU5ECisjICBlbGlmIChNQVhfQ09NTUFORCAhPSAoS0VZX01BWCArIDEyOCkpCisjICAgIGVycm9yIFNvbWV0aGluZyBpcyB3cm9uZyAtLSBNQVhfQ09NTUFORCBpcyBhbHJlYWR5IGluY29uc2lzdGVudGx5IGRlZmluZWQuCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBNQVhfQ09NTUFORCAoS0VZX01BWCArIDEyOCkKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLSBwcm90b3R5cGVzIGZvciBsaWJtZW51IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoSVRFTSAqKikJbWVudV9pdGVtcyAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChJVEVNICopCWN1cnJlbnRfaXRlbSAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChJVEVNICopCW5ld19pdGVtIChjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE1FTlUgKikJbmV3X21lbnUgKElURU0gKiopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoSXRlbV9PcHRpb25zKQlpdGVtX29wdHMgKGNvbnN0IElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoTWVudV9PcHRpb25zKQltZW51X29wdHMgKGNvbnN0IE1FTlUgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X0hvb2spCWl0ZW1faW5pdCAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X0hvb2spCWl0ZW1fdGVybSAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X0hvb2spCW1lbnVfaW5pdCAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X0hvb2spCW1lbnVfdGVybSAoY29uc3QgTUVOVSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQltZW51X3N1YiAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikJbWVudV93aW4gKGNvbnN0IE1FTlUgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCWl0ZW1fZGVzY3JpcHRpb24gKGNvbnN0IElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQlpdGVtX25hbWUgKGNvbnN0IElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQltZW51X21hcmsgKGNvbnN0IE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQltZW51X3JlcXVlc3RfbmFtZSAoaW50KTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikJbWVudV9wYXR0ZXJuIChjb25zdCBNRU5VICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKQltZW51X3VzZXJwdHIgKGNvbnN0IE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKQlpdGVtX3VzZXJwdHIgKGNvbnN0IElURU0gKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpCW1lbnVfYmFjayAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpCW1lbnVfZm9yZSAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpCW1lbnVfZ3JleSAoY29uc3QgTUVOVSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZnJlZV9pdGVtIChJVEVNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZnJlZV9tZW51IChNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJaXRlbV9jb3VudCAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWl0ZW1faW5kZXggKGNvbnN0IElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlpdGVtX29wdHNfb2ZmIChJVEVNICosSXRlbV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWl0ZW1fb3B0c19vbiAoSVRFTSAqLEl0ZW1fT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQltZW51X2RyaXZlciAoTUVOVSAqLGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQltZW51X29wdHNfb2ZmIChNRU5VICosTWVudV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCW1lbnVfb3B0c19vbiAoTUVOVSAqLE1lbnVfT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQltZW51X3BhZCAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXBvc19tZW51X2N1cnNvciAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXBvc3RfbWVudSAoTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNjYWxlX21lbnUgKGNvbnN0IE1FTlUgKixpbnQgKixpbnQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfY3VycmVudF9pdGVtIChNRU5VICptZW51LElURU0gKml0ZW0pOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2l0ZW1faW5pdCAoTUVOVSAqLCBNZW51X0hvb2spOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2l0ZW1fb3B0cyAoSVRFTSAqLEl0ZW1fT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfaXRlbV90ZXJtIChNRU5VICosIE1lbnVfSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfaXRlbV91c2VycHRyIChJVEVNICosIHZvaWQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfaXRlbV92YWx1ZSAoSVRFTSAqLGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfYmFjayAoTUVOVSAqLGNodHlwZSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9mb3JlIChNRU5VICosY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X2Zvcm1hdCAoTUVOVSAqLGludCxpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfZ3JleSAoTUVOVSAqLGNodHlwZSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9pbml0IChNRU5VICosIE1lbnVfSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9pdGVtcyAoTUVOVSAqLElURU0gKiopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfbWFyayAoTUVOVSAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfb3B0cyAoTUVOVSAqLE1lbnVfT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9wYWQgKE1FTlUgKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfcGF0dGVybiAoTUVOVSAqLGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9zdWIgKE1FTlUgKixXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV90ZXJtIChNRU5VICosIE1lbnVfSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV91c2VycHRyIChNRU5VICosdm9pZCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X3dpbiAoTUVOVSAqLFdJTkRPVyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF90b3Bfcm93IChNRU5VICosaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXRvcF9yb3cgKGNvbnN0IE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQl1bnBvc3RfbWVudSAoTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCW1lbnVfcmVxdWVzdF9ieV9uYW1lIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfc3BhY2luZyAoTUVOVSAqLGludCxpbnQsaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCW1lbnVfc3BhY2luZyAoY29uc3QgTUVOVSAqLGludCAqLGludCAqLGludCAqKTsKKworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkJaXRlbV92YWx1ZSAoY29uc3QgSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKQlpdGVtX3Zpc2libGUgKGNvbnN0IElURU0gKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKQltZW51X2Zvcm1hdCAoY29uc3QgTUVOVSAqLGludCAqLGludCAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIH0KKyNlbmRpZgorCisjZW5kaWYgLyogRVRJX01FTlUgKi8KZGlmZiAtLWdpdCBhL21lbnUvbWVudS5wcml2LmggYi9tZW51L21lbnUucHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDM1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21lbnUucHJpdi5oCkBAIC0wLDAgKzEsMTUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IG1lbnUucHJpdi5oLHYgMS4yMiAyMDA1LzAxLzE2IDAxOjAyOjIzIHRvbSBFeHAgJCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtZW51LnByaXYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFRvcCBsZXZlbCBwcml2YXRlIGhlYWRlciBmaWxlIGZvciBhbGwgbGlibm1lbnUgbW9kdWxlcyAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTUVOVV9QUklWX0hfaW5jbAorI2RlZmluZSBNRU5VX1BSSVZfSF9pbmNsIDEKKworI2luY2x1ZGUgImN1cnNlcy5wcml2LmgiCisjaW5jbHVkZSAibWZfY29tbW9uLmgiCisjaW5jbHVkZSAibWVudS5oIgorCisvKiBCYWNrc3BhY2UgY29kZSAqLworI2RlZmluZSBCUyAoOCkKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihJVEVNKSBfbmNfRGVmYXVsdF9JdGVtOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihNRU5VKSBfbmNfRGVmYXVsdF9NZW51OworCisvKiBOb3JtYWxpemUgaXRlbSB0byBkZWZhdWx0IGlmIG5vbmUgd2FzIGdpdmVuICovCisjZGVmaW5lIE5vcm1hbGl6ZV9JdGVtKCBpdGVtICkgKChpdGVtKT0oaXRlbSk/KGl0ZW0pOiZfbmNfRGVmYXVsdF9JdGVtKQorCisvKiBOb3JtYWxpemUgbWVudSB0byBkZWZhdWx0IGlmIG5vbmUgd2FzIGdpdmVuICovCisjZGVmaW5lIE5vcm1hbGl6ZV9NZW51KCBtZW51ICkgKChtZW51KT0obWVudSk/KG1lbnUpOiZfbmNfRGVmYXVsdF9NZW51KQorCisvKiBHZXQgdGhlIHVzZXIgZGVmaW5lZCAoZnJhbWluZykgd2luZG93IG9mIHRoZSBtZW51ICovCisjZGVmaW5lIEdldF9NZW51X1VzZXJXaW4obWVudSkgKChtZW51KS0+dXNlcndpbiA/IChtZW51KS0+dXNlcndpbiA6IHN0ZHNjcikKKworLyogTm9ybWFsaXplIG1lbnUgd2luZG93ICovCisjZGVmaW5lIEdldF9NZW51X1dpbmRvdyggIG1lbnUgKSBcCisgICAoKG1lbnUpLT51c2Vyc3ViICA/IChtZW51KS0+dXNlcnN1YiAgOiBHZXRfTWVudV9Vc2VyV2luKG1lbnUpKQorCisvKiBtZW51IHNwZWNpZmljIHN0YXR1cyBmbGFncyAqLworI2RlZmluZSBfTElOS19ORUVERUQgICAgKDB4MDQpCisjZGVmaW5lIF9NQVJLX0FMTE9DQVRFRCAoMHgwOCkKKworI2RlZmluZSBBTExfTUVOVV9PUFRTICggICAgICAgICAgICAgICAgIFwKKwkJICAgICAgIE9fT05FVkFMVUUgICAgIHwgXAorCQkgICAgICAgT19TSE9XREVTQyAgICAgfCBcCisJCSAgICAgICBPX1JPV01BSk9SICAgICB8IFwKKwkJICAgICAgIE9fSUdOT1JFQ0FTRSAgIHwgXAorCQkgICAgICAgT19TSE9XTUFUQ0ggICAgfCBcCisJCSAgICAgICBPX05PTkNZQ0xJQyAgICApCisKKyNkZWZpbmUgQUxMX0lURU1fT1BUUyAoT19TRUxFQ1RBQkxFKQorCisvKiBNb3ZlIHRvIHRoZSB3aW5kb3cgcG9zaXRpb24gb2YgYW4gaXRlbSBhbmQgZHJhdyBpdCAqLworI2RlZmluZSBNb3ZlX0FuZF9Qb3N0X0l0ZW0obWVudSxpdGVtKSBcCisgIHt3bW92ZSgobWVudSktPndpbiwobWVudSktPnNwY19yb3dzKihpdGVtKS0+eSwoKG1lbnUpLT5pdGVtbGVuKyhtZW51KS0+c3BjX2NvbHMpKihpdGVtKS0+eCk7XAorICAgX25jX1Bvc3RfSXRlbSgobWVudSksKGl0ZW0pKTt9CisKKyNkZWZpbmUgTW92ZV9Ub19DdXJyZW50X0l0ZW0obWVudSxpdGVtKSBcCisgIGlmICggKGl0ZW0pICE9IChtZW51KS0+Y3VyaXRlbSlcCisgICAge1wKKyAgICAgIE1vdmVfQW5kX1Bvc3RfSXRlbShtZW51LGl0ZW0pO1wKKyAgICAgIE1vdmVfQW5kX1Bvc3RfSXRlbShtZW51LChtZW51KS0+Y3VyaXRlbSk7XAorICAgIH0KKworLyogVGhpcyBtYWNybyBlbnN1cmVzLCB0aGF0IHRoZSBpdGVtIGJlY29tZXMgdmlzaWJsZSwgaWYgcG9zc2libGUgd2l0aCB0aGUKKyAgIHNwZWNpZmllZCByb3cgYXMgdGhlIHRvcCByb3cgb2YgdGhlIHdpbmRvdy4gSWYgdGhpcyBpcyBub3QgcG9zc2libGUsCisgICB0aGUgdG9wIHJvdyB3aWxsIGJlIGFkanVzdGVkIGFuZCB0aGUgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSByb3cgYXJndW1lbnQuCisqLworI2RlZmluZSBBZGp1c3RfQ3VycmVudF9JdGVtKG1lbnUscm93LGl0ZW0pIFwKKyAgeyBpZiAoKGl0ZW0pLT55IDwgcm93KSBcCisgICAgICByb3cgPSAoaXRlbSktPnk7XAorICAgIGlmICggKGl0ZW0pLT55ID49IChyb3cgKyAobWVudSktPmFyb3dzKSApXAorICAgICAgcm93ID0gKCAoaXRlbSktPnkgPCAoKG1lbnUpLT5yb3dzIC0gcm93KSApID8gXAorICAgICAgICAgICAgKGl0ZW0pLT55IDogKG1lbnUpLT5yb3dzIC0gKG1lbnUpLT5hcm93cztcCisgICAgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtKG1lbnUscm93LGl0ZW0pOyB9CisKKy8qIFJlc2V0IHRoZSBtYXRjaCBwYXR0ZXJuIGJ1ZmZlciAqLworI2RlZmluZSBSZXNldF9QYXR0ZXJuKG1lbnUpIFwKKyAgeyAobWVudSktPnBpbmRleCA9IDA7IFwKKyAgICAobWVudSktPnBhdHRlcm5bMF0gPSAnXDAnOyB9CisKKyNkZWZpbmUgVUNoYXIoYykJKCh1bnNpZ25lZCBjaGFyKShjKSkKKworLyogSW50ZXJuYWwgZnVuY3Rpb25zLiAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19EcmF3X01lbnUgKGNvbnN0IE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX1Nob3dfTWVudSAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aCAoTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoY29uc3QgVEVYVCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfUG9zdF9JdGVtIChjb25zdCBNRU5VICosIGNvbnN0IElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX0Nvbm5lY3RfSXRlbXMgKE1FTlUgKiwgSVRFTSAqKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX0Rpc2Nvbm5lY3RfSXRlbXMgKE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtIChNRU5VICosaW50LCBJVEVNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19MaW5rX0l0ZW1zIChNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgIF9uY19NYXRjaF9OZXh0X0NoYXJhY3Rlcl9Jbl9JdGVtX05hbWUgKE1FTlUqLGludCxJVEVNKiopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgIF9uY19tZW51X2N1cnNvcl9wb3MgKGNvbnN0IE1FTlUqIG1lbnUsIGNvbnN0IElURU0qIGl0ZW0sCisJCQkJaW50KiBwWSwgaW50KiBwWCk7CisKKyNpZmRlZiBUUkFDRQorCisjZGVmaW5lIHJldHVybkl0ZW0oY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsaXRlbSkKKyNkZWZpbmUgcmV0dXJuSXRlbVB0cihjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxpdGVtX3B0cikKKyNkZWZpbmUgcmV0dXJuSXRlbU9wdHMoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsaXRlbV9vcHRzKQorI2RlZmluZSByZXR1cm5NZW51KGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLG1lbnUpCisjZGVmaW5lIHJldHVybk1lbnVIb29rKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLG1lbnVfaG9vaykKKyNkZWZpbmUgcmV0dXJuTWVudU9wdHMoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsbWVudV9vcHRzKQorCitleHRlcm4gTkNVUlNFU19FWFBPUlQoSVRFTSAqKQkgICAgX25jX3JldHJhY2VfaXRlbSAoSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChJVEVNICoqKQkgICAgX25jX3JldHJhY2VfaXRlbV9wdHIgKElURU0gKiopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEl0ZW1fT3B0aW9ucykgX25jX3JldHJhY2VfaXRlbV9vcHRzIChJdGVtX09wdGlvbnMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE1FTlUgKikJICAgIF9uY19yZXRyYWNlX21lbnUgKE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoTWVudV9Ib29rKSAgICBfbmNfcmV0cmFjZV9tZW51X2hvb2sgKE1lbnVfSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoTWVudV9PcHRpb25zKSBfbmNfcmV0cmFjZV9tZW51X29wdHMgKE1lbnVfT3B0aW9ucyk7CisKKyNlbHNlIC8qICFUUkFDRSAqLworCisjZGVmaW5lIHJldHVybkl0ZW0oY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuSXRlbVB0cihjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5JdGVtT3B0cyhjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5NZW51KGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybk1lbnVIb29rKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybk1lbnVPcHRzKGNvZGUpCXJldHVybiBjb2RlCisKKyNlbmRpZiAvKiBUUkFDRS8hVFJBQ0UgKi8KKworI2VuZGlmIC8qIE1FTlVfUFJJVl9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL21lbnUvbWZfY29tbW9uLmggYi9tZW51L21mX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTY3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZW51L21mX2NvbW1vbi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogbWZfY29tbW9uLmgsdiAwLjIyIDIwMDUvMTEvMjYgMTU6MjY6NTIgdG9tIEV4cCAkICovCisKKy8qIENvbW1vbiBpbnRlcm5hbCBoZWFkZXIgZm9yIG1lbnUgYW5kIGZvcm0gbGlicmFyeSAqLworCisjaWZuZGVmIE1GX0NPTU1PTl9IX2luY2wKKyNkZWZpbmUgTUZfQ09NTU9OX0hfaW5jbCAxCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorI2luY2x1ZGUgPGN1cnNlcy5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgREVDTF9FUlJOTworZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorCisvKiBpbiBjYXNlIG9mIGRlYnVnIHZlcnNpb24gd2UgaWdub3JlIHRoZSBzdXBwcmVzc2lvbiBvZiBhc3NlcnRpb25zICovCisjaWZkZWYgVFJBQ0UKKyMgIGlmZGVmIE5ERUJVRworIyAgICB1bmRlZiBOREVCVUcKKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPG5jX2FsbG9jLmg+CisKKyNpZiBVU0VfUkNTX0lEUworI2RlZmluZSBNT0RVTEVfSUQoaWQpIHN0YXRpYyBjb25zdCBjaGFyIElkZW50W10gPSBpZDsKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9JRChpZCkgLypub3RoaW5nKi8KKyNlbmRpZgorCisKKy8qIE1heGltdW0gcmVndWxhciA4LWJpdCBjaGFyYWN0ZXIgY29kZSAqLworI2RlZmluZSBNQVhfUkVHVUxBUl9DSEFSQUNURVIgKDB4ZmYpCisKKyNkZWZpbmUgU0VUX0VSUk9SKGNvZGUpIChlcnJubz0oY29kZSkpCisjZGVmaW5lIEdFVF9FUlJPUigpICAgICAoZXJybm8pCisKKyNpZmRlZiBUUkFDRQorI2RlZmluZSBSRVRVUk4oY29kZSkgICAgcmV0dXJuQ29kZSggU0VUX0VSUk9SKGNvZGUpICkKKyNlbHNlCisjZGVmaW5lIFJFVFVSTihjb2RlKSAgICByZXR1cm4oIFNFVF9FUlJPUihjb2RlKSApCisjZW5kaWYKKworLyogVGhlIGZldyBjb21tb24gdmFsdWVzIGluIHRoZSBzdGF0dXMgZmllbGRzIGZvciBtZW51cyBhbmQgZm9ybXMgKi8KKyNkZWZpbmUgX1BPU1RFRCAgICAgICAgICgweDAxVSkgIC8qIG1lbnUgb3IgZm9ybSBpcyBwb3N0ZWQgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfSU5fRFJJVkVSICAgICAgKDB4MDJVKSAgLyogbWVudSBvciBmb3JtIGlzIHByb2Nlc3NpbmcgaG9vayByb3V0aW5lICovCisKKy8qIENhbGwgb2JqZWN0IGhvb2sgKi8KKyNkZWZpbmUgQ2FsbF9Ib29rKCBvYmplY3QsIGhhbmRsZXIgKSBcCisgICBpZiAoIChvYmplY3QpICE9IDAgJiYgKChvYmplY3QpLT5oYW5kbGVyKSAhPSAodm9pZCAqKSAwIClcCisgICB7XAorCShvYmplY3QpLT5zdGF0dXMgfD0gX0lOX0RSSVZFUjtcCisJKG9iamVjdCktPmhhbmRsZXIob2JqZWN0KTtcCisJKG9iamVjdCktPnN0YXR1cyAmPSB+X0lOX0RSSVZFUjtcCisgICB9CisKKyNlbmRpZiAvKiBNRl9DT01NT05fSF9pbmNsICovCmRpZmYgLS1naXQgYS9tZW51L21vZHVsZXMgYi9tZW51L21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjNGNmMAotLS0gL2Rldi9udWxsCisrKyBiL21lbnUvbW9kdWxlcwpAQCAtMCwwICsxLDYzIEBACisjICRJZDogbW9kdWxlcyx2IDEuMTcgMjAwNi8xMi8yNCAwMDo1MjozOSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CTE5OTYtb24KKyMKKworQCBiYXNlCisjIExpYnJhcnkgb2JqZWN0cworbV9hdHRyaWJzCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2N1cnNvcglsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9kcml2ZXIJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fZm9ybWF0CWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2dsb2JhbAlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9ob29rCQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX2N1cglsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX25hbQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX25ldwlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX29wdAlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX3RvcAlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX3VzZQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX3ZhbAlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtX3ZpcwlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9pdGVtcwkJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fbmV3CQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9vcHRzCQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9wYWQJCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX3BhdHRlcm4JbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fcG9zdAkJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fcmVxX25hbWUJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fc2NhbGUJCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX3NwYWNpbmcJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fc3ViCQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV90cmFjZQkJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fdXNlcnB0cglsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV93aW4JCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvbWlzYy9NYWtlZmlsZS5pbiBiL21pc2MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiMzliMAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxNTIgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuNDMgMjAwNy8wMy8zMSAxNTo1NDoxNyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtb24KKyMKKyMgTWFrZWZpbGUgZm9yIG5jdXJzZXMgbWlzY2VsbGFueSBkaXJlY3RvcnkKKyMKKyMgVGhpcyBtYWtlcy9pbnN0YWxscyB0aGUgdGVybWluZm8gZGF0YWJhc2UKKyMKKyMgVGhlIHZhcmlhYmxlICdzcmNkaXInIHJlZmVycyB0byB0aGUgc291cmNlLWRpc3RyaWJ1dGlvbiwgYW5kIGNhbiBiZSBzZXQgd2l0aAorIyB0aGUgY29uZmlndXJlIHNjcmlwdCBieSAiLS1zcmNkaXI9RElSIi4KKyMKKyMgVGhlIHJ1bGVzIGFyZSBvcmdhbml6ZWQgdG8gcHJvZHVjZSB0aGUgbGlicmFyaWVzIGZvciB0aGUgY29uZmlndXJlZCBtb2RlbHMsCisjIGFuZCB0aGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29uZmlndXJlZCBkZWZhdWx0IG1vZGVsLgorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTIDoKKworU0hFTEwJCT0gL2Jpbi9zaAorVEhJUwkJPSBNYWtlZmlsZQorCitDRl9NRkxBR1MgCT0gQGNmX2N2X21ha2VmbGFnc0AKK0BTRVRfTUFLRUAKKworREVTVERJUgkJPSBAREVTVERJUkAKK3RvcF9zcmNkaXIJPSBAdG9wX3NyY2RpckAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorbGliZGlyCQk9IEBsaWJkaXJACitkYXRhZGlyCQk9IEBkYXRhZGlyQAorCitDQwkJPSBAQ0NACitIT1NUQ0MJCT0gQEJVSUxEX0NDQAorCit0YWJzZXRkaXIJPSAkKGRhdGFkaXIpL3RhYnNldAordGljZGlyCQk9IEBURVJNSU5GT0AKK3RpY2ZpbGUJCT0gJCh0aWNkaXIpLmRiCitzb3VyY2UJCT0gQFRFUk1JTkZPX1NSQ0AKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfUFJPRwk9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWxsIDoJdGVybWluZm8udG1wCisKK2RlcGVuZCA6CisKK3NvdXJjZXMgOgorCitpbnN0YWxsIDogaW5zdGFsbC5kYXRhIGluc3RhbGwubGlicworCitpbnN0YWxsLmRhdGEgOgl0ZXJtaW5mby50bXAgXAorCQkkKERFU1RESVIpJChsaWJkaXIpIFwKKwkJJChERVNURElSKSQoZGF0YWRpcikgXAorCQkkKERFU1RESVIpJCh0YWJzZXRkaXIpCisJREVTVERJUj0ke0RFU1RESVJ9IFwKKwlwcmVmaXg9JHtwcmVmaXh9IFwKKwlleGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4fSBcCisJYmluZGlyPSR7YmluZGlyfSBcCisJdG9wX3NyY2Rpcj0ke3RvcF9zcmNkaXJ9IFwKKwlzcmNkaXI9JHtzcmNkaXJ9IFwKKwlkYXRhZGlyPSR7ZGF0YWRpcn0gXAorCXRpY2Rpcj0ke3RpY2Rpcn0gXAorCXNvdXJjZT10ZXJtaW5mby50bXAgXAorCVRISVNfQ0M9IiQoQ0MpIiBcCisJVEhBVF9DQz0iJChIT1NUQ0MpIiBcCisJJChTSEVMTCkgLi9ydW5fdGljLnNoCisJQGNkICQoc3JjZGlyKS90YWJzZXQgJiYgXAorCQkkKFNIRUxMKSAtYyAnZm9yIGkgaW4gKiA7IGRvIFwKKwkJCWlmIHRlc3QgLWYgJCRpIDsgdGhlbiBcCisJCQllY2hvIGluc3RhbGxpbmcgJCRpOyBcCisJCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKHRhYnNldGRpcikvJCRpOyBcCisJCQlmaTsgZG9uZScKKworTkNVUlNFU19DT05GSUcJPSBuY3Vyc2VzQERGVF9BUkdfU1VGRklYQEBjZl9jdl9hYmlfdmVyc2lvbkAtY29uZmlnCisKK2luc3RhbGwubGlicyA6ICQoREVTVERJUikkKGJpbmRpcikgbmN1cnNlcy1jb25maWcKKwkkKElOU1RBTExfUFJPRykgbmN1cnNlcy1jb25maWcgJChERVNURElSKSQoYmluZGlyKS8kKE5DVVJTRVNfQ09ORklHKQorCit0ZXJtaW5mby50bXAgOiBydW5fdGljLnNlZCAkKHNvdXJjZSkKKwllY2hvICcqKiBhZGp1c3RpbmcgdGFic2V0IHBhdGhzJworCXNlZCAtZiBydW5fdGljLnNlZCAkKHNvdXJjZSkgPnRlcm1pbmZvLnRtcAorCitydW5fdGljLnNlZCA6CisJV0hJQ0hfWFRFUk09QFdISUNIX1hURVJNQCBcCisJdGljZGlyPSR7dGljZGlyfSBcCisJJChTSEVMTCkgJChzcmNkaXIpL2dlbl9lZGl0LnNoID4kQAorCiskKERFU1RESVIpJChiaW5kaXIpIFwKKyQoREVTVERJUikkKGxpYmRpcikgXAorJChERVNURElSKSQoZGF0YWRpcikgXAorJChERVNURElSKSQodGFic2V0ZGlyKSA6CisJJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2RpcnMuc2ggJEAKKwordW5pbnN0YWxsIDogdW5pbnN0YWxsLmRhdGEgdW5pbnN0YWxsLmxpYnMKKwordW5pbnN0YWxsLmRhdGEgOgorCS10ZXN0IC1kICQoREVTVERJUikkKHRhYnNldGRpcikgJiYgcm0gLXJmICQoREVTVERJUikkKHRhYnNldGRpcikKKwktdGVzdCAtZCAkKERFU1RESVIpJCh0aWNkaXIpICYmIHJtIC1yZiAkKERFU1RESVIpJCh0aWNkaXIpCisJLXRlc3QgLWYgJChERVNURElSKSQodGljZmlsZSkgJiYgcm0gLWYgJChERVNURElSKSQodGljZmlsZSkKKwordW5pbnN0YWxsLmxpYnMgOgorCS1ybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoTkNVUlNFU19DT05GSUcpCisKK3RhZ3MgOgorCitATUFLRV9VUFBFUl9UQUdTQFRBR1MgOgorCittb3N0bHljbGVhbiA6CisJLXJtIC1mIHRlcm1pbmZvLnRtcAorCS1ybSAtZiBydW5fdGljLnNlZAorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmxuICouYXRhYyB0cmFjZQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW4gOiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZSBydW5fdGljLnNoIG5jdXJzZXMtY29uZmlnCisKK3JlYWxjbGVhbiA6IGRpc3RjbGVhbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSByZW1haW5kZXIgb2YgdGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGR1cmluZyBjb25maWd1cmF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9taXNjL2Noa2RlZi5jbWQgYi9taXNjL2Noa2RlZi5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5MWRjZQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvY2hrZGVmLmNtZApAQCAtMCwwICsxLDExNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoNCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKg0KKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqDQorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoNCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKg0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqDQorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqDQorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoNCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKg0KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqDQorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoNCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKg0KKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKg0KKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqDQorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoNCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qDQorICogJElkOiBjaGtkZWYuY21kLHYgMS4zIDIwMDYvMDQvMjIgMjM6MTQ6NTAgdG9tIEV4cCAkDQorICoNCisgKiBBdXRob3I6ICBKdWFuIEpvc2UgR2FyY2lhIFJpcG9sbCA8d29ybUBhcnJha2lzLmVzPi4NCisgKiBXZWJwYWdlOiBodHRwOi8vd3d3LmFycmFraXMuZXMvfndvcm0vDQorICoNCisgKiBjaGtkZWYuY21kIC0gY2hlY2tzIHRoYXQgYSAuZGVmIGZpbGUgaGFzIG5vIGNvbmZsaWN0cyBhbmQgaXMgcHJvcGVybHkNCisgKgkJZm9ybWF0dGVkLg0KKyAqDQorICogcmV0dXJucyBub256ZXJvIGlmIHR3byBzeW1ib2xzIGhhdmUgdGhlIHNhbWUgY29kZSBvciBhIGxpbmUgaGFzIGEgd3JvbmcNCisgKiBmb3JtYXQuDQorICoNCisgKiByZXR1cm5zIDAgb3RoZXJ3aXNlDQorICoNCisgKiB0aGUgc3RhbmRhcmQgb3V0cHV0IHNob3dzIGNvbmZsaWN0cy4NCisgKi8NCitwYXJzZSBhcmcgZGVmX2ZpbGUNCisNCitkZWZfZmlsZSA9IHRyYW5zbGF0ZShkZWZfZmlsZSwnXCcsJy8nKQ0KKw0KK2NhbGwgQ2xlYW5RdWV1ZQ0KKw0KKy8qDQorICogYGNtcCcgaXMgemVybyB3aGVuIHRoZSBmaWxlIGlzIHZhbGlkDQorICogYGNvZGVzJyBhc3NvY2lhdGVzIGEgbmFtZSB0byBhIGNvZGUNCisgKiBgbmFtZXMnIGFzc29jaWF0ZXMgYSBjb2RlIHRvIGEgbmFtZQ0KKyAqLw0KK2NtcCAgICA9IDANCitjb2Rlcy4gPSAwDQorbmFtZXMuID0gJycNCisNCisvKg0KKyAqIFRoaXMgc2VkIGV4cHJlc3Npb24gY2xlYW5zIGVtcHR5IGxpbmVzLCBjb21tZW50cyBhbmQgc3BlY2lhbCAuREVGDQorICogY29tbWFuZHMsIHN1Y2ggYXMgTElCUkFSWS4uLiwgRVhQT1JUUy4uLiwgZXRjDQorICovDQordGlkeV91cCAgPSAnInMvWyAJXVsgCV0qLyAvZztzLzsuKi8vZzsvXlsgXSokL2Q7L15bYS16QS1aXS9kOyInDQorDQorLyoNCisgKiBGaXJzdCB3ZSBmaW5kIGFsbCBwdWJsaWMgc3ltYm9scyBmcm9tIHRoZSBvcmlnaW5hbCBETEwuIEFsbCB0aGlzDQorICogaW5mb3JtYXRpb24gaXMgcHVzaGVkIGludG8gYSBSRVhYIHByaXZhdGUgbGlzdCB3aXRoIHRoZSBSWFFVRVVFDQorICogdXRpbGl0eSBwcm9ncmFtLg0KKyAqLw0KKydAZWNobyBvZmYnDQorJ3R5cGUnIGRlZl9maWxlICd8IHNlZCcgdGlkeV91cCAnfCBzb3J0IHwgcnhxdWV1ZScNCisNCitkbyB3aGlsZSBxdWV1ZWQoKSA+IDANCisgICAvKg0KKyAgICAqIFdlIHJldHJpZXZlIHRoZSBzeW1ib2wgbmFtZSAoTkVXX05BTUUpIGFuZCBpdHMgY29kZSAoTkVXX0NPREUpDQorICAgICovDQorICAgcGFyc2UgcHVsbCAnIicgbmV3X25hbWUgJyInICdAJ25ld19jb2RlIHJlc3QNCisgICBzZWxlY3QNCisgICAgICB3aGVuIChuZXdfY29kZSA9ICcnKSB8IChuZXdfbmFtZSA9ICcnKSB0aGVuDQorICAgICAgICAgLyogVGhlIGlucHV0IHdhcyBub3QgcHJvcGVybHkgZm9ybWF0dGVkICovDQorICAgICAgICAgZG8NCisgICAgICAgICBzYXkgJ0Vycm9yOiBzeW1ib2wgIiduZXdfbmFtZSciIGhhcyBubyBleHBvcnQgY29kZSBvciBpcyBlbXB0eScNCisgICAgICAgICBjbXAgPSAxDQorICAgICAgICAgZW5kDQorICAgICAgd2hlbiBjb2Rlcy5uZXdfbmFtZSBcPSAwIHRoZW4NCisgICAgICAgICAvKiBUaGlzIHN5bWJvbCB3YXMgYWxyZWFkeSBkZWZpbmVkICovDQorICAgICAgICAgaWYgY29kZXMubmV3X25hbWUgXD0gbmV3X2NvZGUgdGhlbg0KKyAgICAgICAgICAgIGRvDQorCSAgICBjbXAgPSAyDQorIAkgICAgc2F5ICdTeW1ib2wgIiduZXdfbmFtZSciIG11bHRpcGx5IGRlZmluZWQnDQorCSAgICBlbmQNCisgICAgICB3aGVuIG5hbWVzLm5ld19jb2RlIFw9ICcnIHRoZW4NCisgICAgICAgICAvKiBUaGlzIGNvZGUgd2FzIGFscmVhZHkgYXNzaWduZWQgdG8gYSBzeW1ib2wgKi8NCisgICAgICAgICBpZiBuYW1lcy5uZXdfY29kZSBcPSBuZXdfbmFtZSB0aGVuDQorICAgICAgICAgICAgZG8NCisgICAgICAgICAgICBjbXAgPSAzDQorCSAgICBzYXkgJ0NvbmZsaWN0IHdpdGggIiduYW1lcy5uZXdfY29kZSciICYgIiduZXdfbmFtZSciIGJlaW5nIEAnbmV3X2NvZGUNCisgICAgICAgICAgICBlbmQNCisgICAgICBvdGhlcndpc2UNCisgICAgICAgICBkbw0KKyAgICAgICAgIGNvZGVzLm5ld19uYW1lID0gbmV3X2NvZGUNCisgICAgICAgICBuYW1lcy5uZXdfY29kZSA9IG5ld19uYW1lDQorICAgICAgICAgZW5kDQorICAgZW5kICAvKiBzZWxlY3QgKi8NCitlbmQNCisNCitleGl0IGNtcA0KKw0KK0NsZWFuUXVldWU6IHByb2NlZHVyZQ0KKwlkbyB3aGlsZSBxdWV1ZWQoKSA+IDANCisJICAgcGFyc2UgcHVsbCBmb28NCisJZW5kDQorcmV0dXJuDQpkaWZmIC0tZ2l0IGEvbWlzYy9jbGVhbnRpYy5jbWQgYi9taXNjL2NsZWFudGljLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODU5ZGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9jbGVhbnRpYy5jbWQKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoNCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKg0KKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqDQorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoNCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKg0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqDQorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqDQorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoNCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKg0KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqDQorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoNCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKg0KKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKg0KKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqDQorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoNCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qDQorICogJElkOiBjbGVhbnRpYy5jbWQsdiAxLjQgMjAwNi8wNC8yMiAyMzoxNDo1MCB0b20gRXhwICQNCisgKg0KKyAqIEF1dGhvcjogIEp1YW4gSm9zZSBHYXJjaWEgUmlwb2xsIDx3b3JtQGFycmFraXMuZXM+Lg0KKyAqIFdlYnBhZ2U6IGh0dHA6Ly93d3cuYXJyYWtpcy5lcy9+d29ybS8NCisgKi8NCitwYXJzZSBhcmcgZGlyDQorDQorcGF1c2UNCitkaXIgPSB0cmFuc2xhdGUoZGlyLCdcJywnLycpOw0KK2xldHRlcnMgPSAnMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHonDQorDQoraWYgZGlyID0gJycgdGhlbg0KKyAgICBkaXIgPSAnLicNCisnZWNobyBDbGVhbmluZyAnZGlyDQorJ2ZvciAlJTEgaW4gKCdsZXR0ZXJzJykgZG8gQGlmIG5vdCBleGlzdCAnZGlyJ1wlJTFcKiAoZWNobyBDbGVhbmluZyAuLi5cJSUxICYgcmQgJSUxIDI+TlVMKScNCmRpZmYgLS1naXQgYS9taXNjL2NtcGRlZi5jbWQgYi9taXNjL2NtcGRlZi5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiOGY2YwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvY21wZGVmLmNtZApAQCAtMCwwICsxLDEzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoNCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKg0KKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqDQorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoNCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKg0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqDQorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqDQorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoNCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKg0KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqDQorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoNCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKg0KKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKg0KKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqDQorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoNCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qDQorICogJElkOiBjbXBkZWYuY21kLHYgMS4zIDIwMDYvMDQvMjIgMjM6MTQ6NTAgdG9tIEV4cCAkDQorICoNCisgKiBBdXRob3I6ICBKdWFuIEpvc2UgR2FyY2lhIFJpcG9sbCA8d29ybUBhcnJha2lzLmVzPi4NCisgKiBXZWJwYWdlOiBodHRwOi8vd3d3LmFycmFraXMuZXMvfndvcm0vDQorICoNCisgKiBjbXBkZWYuY21kIC0gY29tcGFyZXMgdHdvIC5kZWYgZmlsZXMsIGNoZWNraW5nIHdoZXRoZXIgdGhleSBoYXZlDQorICoJCXRoZSBzYW1lIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBleHBvcnQgY29kZXMuDQorICoNCisgKiByZXR1cm5zIDAgaWYgdGhlcmUgYXJlIG5vIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBmaWxlcyAtLSB0aGF0IGlzLA0KKyAqIHRoZSBuZXdlciBvbmUgY2FuIHJlcGxhY2UgdGhlIG9sZGVyIG9uZS4NCisgKg0KKyAqIHJldHVybnMgMSB3aGVuIGVpdGhlciBvZiB0aGUgZmlsZXMgaXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZCBhbmQNCisgKiB3aGVuIHRoZXJlIGFyZSBjb25mbGljdHM6IHR3byBzeW1ib2xzIGhhdmluZyB0aGUgc2FtZSBleHBvcnQgY29kZS4NCisgKg0KKyAqIHRoZSBzdGFuZGFyZCBvdXRwdXQgc2hvd3MgYSBsaXN0IHdpdGggbmV3bHkgYWRkZWQgc3ltYm9scywgcGx1cw0KKyAqIHJlcGxhY2VkIHN5bWJvbHMgYW5kIGNvbmZsaWN0cy4NCisgKi8NCitwYXJzZSBhcmcgZGVmX2ZpbGUxIGRlZl9maWxlMg0KKw0KK2RlZl9maWxlMSA9IHRyYW5zbGF0ZShkZWZfZmlsZTEsJ1wnLCcvJykNCitkZWZfZmlsZTIgPSB0cmFuc2xhdGUoZGVmX2ZpbGUyLCdcJywnLycpDQorDQorY2FsbCBDbGVhblF1ZXVlDQorDQorLyoNCisgKiBgY21wJyBpcyB6ZXJvIHdoZW4gdGhlIGxhc3QgZmlsZSBpcyB2YWxpZCBhbmQgdXB3YXJkIGNvbXBhdGlibGUNCisgKiBgbnVtYmVycycgaXMgdGhlIHN0ZW0gd2hlcmUgc3ltYm9scyBhcmUgc3RvcmVkDQorICovDQorY21wICAgICAgPSAwDQorbmFtZXMuICAgPSAnJw0KK251bWJlcnMuID0gMA0KKw0KKy8qDQorICogVGhpcyBzZWQgZXhwcmVzc2lvbiBjbGVhbnMgZW1wdHkgbGluZXMsIGNvbW1lbnRzIGFuZCBzcGVjaWFsIC5ERUYNCisgKiBjb21tYW5kcywgc3VjaCBhcyBMSUJSQVJZLi4uLCBFWFBPUlRTLi4uLCBldGMNCisgKi8NCit0aWR5X3VwICA9ICcicy9bIAldWyAJXSovIC9nO3MvOy4qLy9nOy9eWyBdKiQvZDsvXlthLXpBLVpdL2Q7IicNCisNCisvKg0KKyAqIEZpcnN0IHdlIGZpbmQgYWxsIHB1YmxpYyBzeW1ib2xzIGZyb20gdGhlIG9yaWdpbmFsIERMTC4gQWxsIHRoaXMNCisgKiBpbmZvcm1hdGlvbiBpcyBwdXNoZWQgaW50byBhIFJFWFggcHJpdmF0ZSBsaXN0IHdpdGggdGhlIFJYUVVFVUUNCisgKiB1dGlsaXR5IHByb2dyYW0uDQorICovDQorJ0BlY2hvIG9mZicNCisndHlwZScgZGVmX2ZpbGUxICd8IHNlZCcgdGlkeV91cCAnfCBzb3J0IHwgcnhxdWV1ZScNCisNCitkbyB3aGlsZSBxdWV1ZWQoKSA+IDANCisgICAvKg0KKyAgICAqIFdlIHJldHJpZXZlIHRoZSBzeW1ib2wgbmFtZSAoTkFNRSkgYW5kIGl0cyBudW1iZXIgKE5VTUJFUikNCisgICAgKi8NCisgICBwYXJzZSBwdWxsICciJyBuYW1lICciJyAnQCdudW1iZXIgcmVzdA0KKyAgIGlmIG51bWJlciA9ICcnIHx8IG5hbWUgPSAnJyB0aGVuDQorICAgICAgZG8NCisgICAgICBzYXkgJ0NvcnJ1cHRlZCBmaWxlJyBkZWZfZmlsZTENCisgICAgICBzYXkgJ1N5bWJvbCcgbmFtZSAnaGFzIG5vIG51bWJlcicNCisgICAgICBleGl0IDENCisgICAgICBlbmQNCisgICBlbHNlDQorICAgICAgZG8NCisgICAgICBudW1iZXJzLm5hbWUgPSBudW1iZXINCisgICAgICBuYW1lcy5udW1iZXIgPSBuYW1lDQorICAgICAgZW5kDQorZW5kDQorDQorLyoNCisgKiBOb3cgd2UgZmluZCBhbGwgcHVibGljIHN5bWJvbHMgZnJvbSB0aGUgbmV3IERMTCwgYW5kIGNvbXBhcmUuDQorICovDQorJ3R5cGUnIGRlZl9maWxlMiAnfCBzZWQnIHRpZHlfdXAgJ3wgc29ydCB8IHJ4cXVldWUnDQorDQorZG8gd2hpbGUgcXVldWVkKCkgPiAwDQorICAgcGFyc2UgcHVsbCAnIicgbmFtZSAnIicgJ0AnbnVtYmVyIHJlc3QNCisgICBpZiBuYW1lID0gJycgfCBudW1iZXIgPSAnJyB0aGVuDQorICAgICAgZG8NCisgICAgICBzYXkgJ0NvcnJ1cHRlZCBmaWxlJyBkZWZfZmlsZTINCisgICAgICBzYXkgJ1N5bWJvbCcgbmFtZSAnaGFzIG5vIG51bWJlcicNCisgICAgICBleGl0IDENCisgICAgICBlbmQNCisgICBpZiBudW1iZXJzLm5hbWUgPSAwIHRoZW4NCisgICAgICBkbw0KKyAgICAgIGNtcCA9IDENCisgICAgICBpZiBuYW1lcy5udW1iZXIgPSAnJyB0aGVuDQorICAgICAgICAgc2F5ICdOZXcgc3ltYm9sJyBuYW1lICd3aXRoIGNvZGUgQCdudW1iZXINCisgICAgICBlbHNlDQorICAgICAgICAgc2F5ICdDb25mbGljdCBvbGQgPScgbmFtZXMubnVtYmVyICcsIG5ldyA9JyBuYW1lICdhdCBAJ251bWJlcg0KKyAgICAgIGVuZA0KKyAgIGVsc2UgaWYgbnVtYmVycy5uYW1lIFw9IG51bWJlciB0aGVuDQorICAgICAgZG8NCisgICAgICBjbXAgPSAxDQorICAgICAgc2F5IG5hbWUgJ1N5bWJvbCcgbmFtZSAnY2hhbmdlZCBmcm9tIEAnbnVtYmVycy5uYW1lICd0byBAJ251bWJlcg0KKyAgICAgIGVuZA0KK2VuZCAvKiBkbyAqLw0KKw0KK2V4aXQgY21wDQorDQorLyoNCisgKiBDbGVhbnMgdGhlIFJFWFggcXVldWUgYnkgcHVsbGluZyBhbmQgZm9yZ2V0dGluZyBldmVyeSBsaW5lLg0KKyAqIFRoaXMgaXMgbmVlZGVkLCBhdCBsZWFzdCwgd2hlbiBgY21wZGVmLmNtZCcgc3RhcnRzLCBiZWNhdXNlIGFuIGFib3J0ZWQNCisgKiBSRVhYIHByb2dyYW0gbWlnaHQgaGF2ZSBsZWZ0IHNvbWUgcnViYmlzaCBpbi4NCisgKi8NCitDbGVhblF1ZXVlOiBwcm9jZWR1cmUNCisgICBkbyB3aGlsZSBxdWV1ZWQoKSA+IDANCisgICAgICBwYXJzZSBwdWxsIGZvbw0KKyAgIGVuZA0KK3JldHVybg0KKw0KZGlmZiAtLWdpdCBhL21pc2MvY3NvcnQgYi9taXNjL2Nzb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyZmFhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2Nzb3J0CkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorIyAkSWQ6IGNzb3J0LHYgMS4yIDIwMDIvMTAvMTkgMjE6NDI6MDkgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIG92ZXJyaWRlIGFueXRoaW5nIHRoYXQgbWlnaHQgY2F1c2UgJ3NvcnQnIHRvIGRvIHRoZSB3cm9uZyB0aGluZy4uLgorTEFORz1DOwkJZXhwb3J0IExBTkcKK0xBTkdVQUdFPUM7CWV4cG9ydCBMQU5HVUFHRQorTENfQUxMPUM7CWV4cG9ydCBMQ19BTEwKK0xDX0NUWVBFPUM7CWV4cG9ydCBMQ19DVFlQRQorc29ydCAkKgpkaWZmIC0tZ2l0IGEvbWlzYy9lbXguc3JjIGIvbWlzYy9lbXguc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjAwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2VteC5zcmMKQEAgLTAsMCArMSw4ODUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBlbXguc3JjLHYgMS45IDIwMDYvMDQvMjIgMjE6NDY6MTcgdG9tIEV4cCAkCisjIFRoaXMgaXMgYSByZWZvcm1hdHRlZCBjb3B5IG9mIHRoZSB0ZXJtaW5mbyBzb3VyY2UgZm9yIE9TLzIgRU1YIGZyb20KKyMgSnVhbiBKb3NlIEdhcmNpYSBSaXBvbGwgPHdvcm1AYXJyYWtpcy5lcz4uCisjIGh0dHA6Ly93d3cuYXJyYWtpcy5lcy9+d29ybS8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGVybWluYWwgY2xhc3NlcyBhbmQgbWFrZXIgYnJhbmRzIHRoYXQgYXJlIHN0aWxsCisjIHF1aXRlIGNvbW1vbi4KKyMKKworIyMjIyBTcGVjaWFscworIworIyBTcGVjaWFsICJ0ZXJtaW5hbHMiLiAgVGhlc2UgYXJlIHVzZWQgdG8gbGFiZWwgdHR5IGxpbmVzIHdoZW4geW91IGRvbid0CisjIGtub3cgd2hhdCBraW5kIG9mIHRlcm1pbmFsIGlzIG9uIGl0LiAgVGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhbiB1bmtub3duCisjIHRlcm1pbmFsIGFyZSB0aGUgbG93ZXN0IGNvbW1vbiBkZW5vbWluYXRvciAtIHRoZXkgbG9vayBhYm91dCBsaWtlIGEgdGkgNzAwLgorIworCitkdW1ifDgwLWNvbHVtbiBkdW1iIHR0eSwKKwlhbSwKKwljb2xzIzgwLAorCWJlbD1eRywKKwljcj1eTSwKKwljdWQxPV5KLAorCWluZD1eSiwKK3Vua25vd258dW5rbm93biB0ZXJtaW5hbCB0eXBlLAorCWduLAorCXVzZT1kdW1iLAorbHByfHByaW50ZXJ8bGluZSBwcmludGVyLAorCWhjLAorCW9zLAorCWNvbHMjMTMyLAorCWxpbmVzIzY2LAorCWJlbD1eRywKKwljcj1eTSwKKwljdWIxPV5ILAorCWN1ZDE9XkosCisJZmY9XkwsCisJaW5kPV5KLAorZ2xhc3N0dHl8Y2xhc3NpYyBnbGFzcyB0dHkgaW50ZXJwcmV0aW5nIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycywKKwlhbSwKKwljb2xzIzgwLAorCWJlbD1eRywKKwljbGVhcj1eTCwKKwljcj1eTSwKKwljdWIxPV5ILAorCWN1ZDE9XkosCisJaHQ9XkksCisJa2JzPV5ILAorCWtjdWIxPV5ILAorCWtjdWQxPV5KLAorCW5lbD1eTV5KLAorCisjIyMjIEFOU0kuU1lTL0lTTyA2NDI5L0VDTUEtNDggQ2FwYWJpbGl0aWVzCisjCisjIFNlZSB0aGUgZW5kLW9mLWZpbGUgY29tbWVudCBmb3IgbW9yZSBvbiB0aGVzZS4KKyMKKworIyBUaGUgSUJNIFBDIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LiAgUGx1ZyB0aGlzIGludG8gYW55IEludGVsIGNvbnNvbGUgZW50cnkuCisjIFdlIHVzZSBcRVsxMW0gZm9yIHJtYWNzIHJhdGhlciB0aGFuIFxFWzEybSBzbyB0aGUgPGFjc2M+IHN0cmluZyBjYW4gdXNlIHRoZQorIyBST00gZ3JhcGhpY3MgZm9yIGNvbnRyb2wgY2hhcmFjdGVycyBzdWNoIGFzIHRoZSBkaWFtb25kLCB1cC0gYW5kIGRvd24tYXJyb3cuCisjIFRoaXMgd29ya3Mgd2l0aCB0aGUgU3lzdGVtIFYsIExpbnV4LCBhbmQgQlNESSBjb25zb2xlcy4gIEl0J3MgYSBzYWZlIGJldCB0aGlzCisjIHdpbGwgd29yayB3aXRoIGFueSBJbnRlbCBjb25zb2xlLCB0aGV5IGFsbCBzZWVtIHRvIGhhdmUgaW5oZXJpdGVkIFxFWzExbQorIyBmcm9tIHRoZSBBTlNJLlNZUyBkZS1mYWN0byBzdGFuZGFyZC4KK2tsb25lK2Fjc3xhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBmb3IgYW5zaS5zeXMgZGlzcGxheXMsCisJYWNzYz0rXDAyMFwsXDAyMS1cMDMwLl5ZMFwzMzNgXDAwNGFcMjYxZlwzNzBnXDM2MWhcMjYwalwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCXJtYWNzPVxFWzEwbSwKKwlzbWFjcz1cRVsxMW0sCisKKyMgSGlnaGxpZ2h0IGNvbnRyb2xzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFOU0kuU1lTIHN0YW5kYXJkLiAgTW9zdAorIyBjb25zb2xlIGRyaXZlcnMgZm9yIEludGVsIGJveGVzIG9iZXkgdGhlc2UuICBNYWtlcyB0aGUgc2FtZSBhc3N1bXB0aW9uCisjIGFib3V0IFxFWzExbSBhcyBrbG9uZSthY3MuICBUcnVlIEFOU0kvRUNNQS00OCB3b3VsZCBoYXZlIDxybXNvPVxFWzI3bT4sCisjIDxybXVsPVxFWzI0bT4sIGJ1dCB0aGlzIGlzbid0IGEgZG9jdW1lbnRlZCBmZWF0dXJlIG9mIEFOU0kuU1lTLgora2xvbmUrc2dyfGF0dHJpYnV0ZSBjb250cm9sIGZvciBhbnNpLnN5cyBkaXNwbGF5cywKKwlibGluaz1cRVs1bSwKKwlib2xkPVxFWzFtLAorCWludmlzPVxFWzhtLAorCXJldj1cRVs3bSwKKwlybWFjcz1cRVsxMG0sCisJcm1wY2g9XEVbMTBtLAorCXJtc289XEVbbSwKKwlybXVsPVxFW20sCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttLAorCXNncjA9XEVbMDsxMG0sCisJc21hY3M9XEVbMTFtLAorCXNtcGNoPVxFWzExbSwKKwlzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sCisJdXNlPWtsb25lK2FjcywKKworIyBIaWdobGlnaHQgY29udHJvbHMgY29ycmVzcG9uZGluZyB0byB0aGUgQU5TSS5TWVMgc3RhbmRhcmQuICAqQWxsKgorIyBjb25zb2xlIGRyaXZlcnMgZm9yIEludGVsIGJveGVzIG9iZXkgdGhlc2UuICBEb2VzIG5vdCBhc3N1bWUgXEVbMTFtIHdpbGwKKyMgd29yazsgdXNlcyBcRVsxMm0gaW5zdGVhZCwgd2hpY2ggaXMgcHJldHR5IGJ1bGxldHByb29mIGJ1dCBsb3NlcyB5b3UgdGhlIEFDUworIyBkaWFtb25kIGFuZCBhcnJvdyBjaGFyYWN0ZXJzIHVuZGVyIGN1cnNlcy4KK2tsb25lK3Nnci1kdW1ifGF0dHJpYnV0ZSBjb250cm9sIGZvciBhbnNpLnN5cyBkaXNwbGF5cyAobm8gRVNDIFsgMTEgbSksCisJYmxpbms9XEVbNW0sCisJYm9sZD1cRVsxbSwKKwlpbnZpcz1cRVs4bSwKKwlyZXY9XEVbN20sCisJcm1hY3M9XEVbMTBtLAorCXJtc289XEVbbSwKKwlybXVsPVxFW20sCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzEyJTttLAorCXNncjA9XEVbMDsxMG0sCisJc21hY3M9XEVbMTJtLAorCXNtc289XEVbN20sCisJc211bD1cRVs0bSwKKwl1c2U9a2xvbmUrYWNzLAorCisjIEFOU0kuU1lTIGNvbG9yIGNvbnRyb2wuCisjIFRoZSBET1MgNSBtYW51YWwgYXNzZXJ0cyB0aGF0IHRoZXNlIHNlcXVlbmNlcyBtZWV0IHRoZSBJU08gNjQyOSBzdGFuZGFyZC4KK2tsb25lK2NvbG9yfGNvbG9yIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGFuZCBJU082NDI5LWNvbXBhdGlibGUgZGlzcGxheXMsCisJY29sb3JzIzgsCisJbmN2IzMsCisJcGFpcnMjNjQsCisJb3A9XEVbMzc7NDBtLAorCXNldGFiPVxFWzQlcDElZG0sCisJc2V0YWY9XEVbMyVwMSVkbSwKKworIyBUaGlzIGlzIGJldHRlciB0aGFuIGtsb25lK2NvbG9yLCBpdCBkb2Vzbid0IGFzc3VtZSB3aGl0ZS1vbi1ibGFjayBhcyB0aGUKKyMgZGVmYXVsdCBjb2xvciBwYWlyLCAgYnV0IG1hbnkgYEFOU0knIHRlcm1pbmFscyBkb24ndCBncm9rIHRoZSA8b3A+IGNhcC4KK2VjbWErY29sb3J8Y29sb3IgY29udHJvbCBmb3IgRUNNQS00OC1jb21wYXRpYmxlIHRlcm1pbmFscywKKwlBWCwKKwljb2xvcnMjOCwKKwluY3YjMywKKwlwYWlycyM2NCwKKwlvcD1cRVszOTs0OW0sCisJc2V0YWI9XEVbNCVwMSVkbSwKKwlzZXRhZj1cRVszJXAxJWRtLAorCisjIyMjIEFOU0kvRUNNQS00OCB0ZXJtaW5hbHMgYW5kIHRlcm1pbmFsIGVtdWxhdG9ycworIworIyBTZWUgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgZGV0YWlscyBvbiBBTlNJIGNvbmZvcm1hbmNlLgorIyBEb24ndCBtZXNzIHdpdGggdGhlc2UgZW50cmllcyEgIExvdHMgb2Ygb3RoZXIgZW50cmllcyBkZXBlbmQgb24gdGhlbSEKKyMKKyMgVGhpcyBzZWN0aW9uIGxpc3RzIGVudHJpZXMgaW4gYSBsZWFzdC1jYXBhYmxlIHRvIG1vc3QtY2FwYWJsZSBvcmRlci4KKyMgaWYgeW91J3JlIGluIGRvdWJ0IGFib3V0IHdoYXQgYEFOU0knIG1hdGNoZXMgeW91cnMsIHRyeSB0aGVtIGluIHRoYXQKKyMgb3JkZXIgYW5kIGJhY2sgb2ZmIGZyb20gdGhlIGZpcnN0IHRoYXQgYnJlYWtzLgorCithbnNpLW1pbml8YW55IGFuc2kgdGVybWluYWwgd2l0aCBwZXNzaW1pc3RpYyBhc3N1bXB0aW9ucywKKwlhbSwKKwljb2xzIzgwLAorCWl0IzgsCisJbGluZXMjMjQsCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sCisJY3ViMT1cRVtELAorCWN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwKKwllbD1cRVtLLAorCWhvbWU9XEVbSCwKKwlodD1eSSwKKworIworIyBBTlNJLlNZUyBlbnRyaWVzCisjCisjIFRoaXMgY29tcGxldGVseSBkZXNjcmliZXMgdGhlIHNlcXVlbmNlcyBzcGVjaWZpZWQgaW4gdGhlIERPUyAyLjEgQU5TSS5TWVMKKyMgZG9jdW1lbnRhdGlvbiAoZXhjZXB0IGZvciB0aGUga2V5Ym9hcmQga2V5IHJlYXNzaWdubWVudCBmZWF0dXJlLCB3aGljaAorIyBkb2VuJ3QgZml0IHRoZSA8cGZrZXk+IG1vZGVsIHdlbGwpLiAgVGhlIGtsb25lK2FjcyBzZXF1ZW5jZXMgd2VyZSB2YWxpZAorIyB0aG91Z2ggdW5kb2N1bWVudGVkLiAgVGhlIDxwZmtleT4gY2FwYWJpbGl0eSBpcyB1bnRlc3RlZCBidXQgc2hvdWxkIHdvcmsgZm9yCisjIGtleXMgRjEtRjEwICglcDEgdmFsdWVzIG91dHNpZGUgdGhpcyByYW5nZSB3aWxsIHlpZWxkIHVucHJlZGljdGFibGUgcmVzdWx0cykuCisjIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBOb3YgNyAxOTk1CithbnNpLnN5cy1vbGR8QU5TSS5TWVMgdW5kZXIgUEMtRE9TIDIuMSwKKwlhbSwKKwltaXIsCisJbXNnciwKKwl4b24sCisJY29scyM4MCwKKwlsaW5lcyMyNSwKKwljbGVhcj1cRVsySiwKKwljdWIxPV5ILAorCWN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwKKwllbD1cRVtrLAorCWhvbWU9XEVbSCwKKwlpczI9XEVbbVxFWz83aCwKKwlrY3ViMT1eSCwKKwlrY3VkMT1eSiwKKwlrY3VmMT1eTCwKKwlrY3V1MT1eSywKKwlraG9tZT1eXiwKKwlwZmtleT1cRVswOyVwMSV7NTh9JSslZDslcDIiJXMiLAorCXJjPVxFW3UsCisJcm1hbT1cRVs/N2wsCisJc2M9XEVbcywKKwlzbWFtPVxFWz83aCwKKwl1Nj1cRVslaSVkOyVkUiwKKwl1Nz1cRVs2biwKKwl1c2U9a2xvbmUrY29sb3IsCisJdXNlPWtsb25lK2FjcywKKwl1c2U9a2xvbmUrc2dyLAorYW5zaS5zeXN8QU5TSS5TWVMgMy4xIGFuZCBsYXRlciB2ZXJzaW9ucywKKwllbD1cRVtLLAorCXVzZT1hbnNpLnN5cy1vbGQsCisKKyMjIyBFTVggdGVybWNhcC5kYXQgY29tcGF0aWJpbGl0eSBtb2RlcworIworIyBLZXlwYWQ6CUhvbWU9XDBHCVVwPVwwSAlQclBhZz1cMEkKKyMJCWthMSxraAkJa2N1dTEJCWtwcCxrYTMKKyMKKyMJCUxlZnQ9XDBLCTU9XDBMCQlSaWdodD1cME0KKyMJCWtjdWIxCQlrYjIJCWtjdWYxCisjCisjCQlFbmQ9XDBPCQlEb3duPVwwUAlOeFBhZz1cMFEKKyMJCWtjMSxrZW5kCWtjdWQxCQlrYzMsa25wCisjCisjCQlJbnM9XDBSCQlEZWw9XDBTCisjCQlraWNoMQkJa2RjaDEKKyMKKyMgT24ga2V5Ym9hcmQgd2l0aCAxMiBmdW5jdGlvbiBrZXlzLAorIwlzaGlmdGVkIGYta2V5czogRjEzLUYyNAorIwljb250cm9sIGYta2V5czogRjI1LUYzNgorIwlhbHQgZi1rZXlzOiAgICAgRjM3LUY0OAorIyBUaGUgc2hpZnQvY29udHJvbC9hbHQga2V5cyBkbyBub3QgbW9kaWZ5IGVhY2ggb3RoZXIsIGJ1dCBhbHQgb3ZlcnJpZGVzIGJvdGgsCisjIGFuZCBjb250cm9sIG92ZXJyaWRlcyBzaGlmdC4KKyMKKyMgQWxzbyAocG9zc2libHkgb25seSBFTVgsIHNvIHdlIGRvbid0IHB1dCBpdCBpbiBhbnNpLnN5cywgZXRjKTogc2V0IHRoZQorIyBub19jb2xvcl92aWRlbyB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIHRoYXQgc3RhbmRvdXQoMSksIHVuZGVybGluZSgyKQorIyByZXZlcnNlKDQpIGFuZCBpbnZpc2libGUoNjQpIGRvbid0IHdvcmsgd2l0aCBjb2xvci4KK2VteC1iYXNlfERPUyBzcGVjaWFsIGtleXMsCisJYmNlLAorCWJ3LAorCWl0IzgsCisJbmN2IzcxLAorCWJlbD1eRywKKwlrYTE9XDBHLAorCWthMz1cMEksCisJa2IyPVwwTCwKKwlrYnM9XkgsCisJa2MxPVwwTywKKwlrYzM9XDBRLAorCWtjYnQ9XDBeTywKKwlrY3ViMT1cMEssCisJa2N1ZDE9XDBQLAorCWtjdWYxPVwwTSwKKwlrY3V1MT1cMEgsCisJa2RjaDE9XDBTLAorCWtlbmQ9XDBPLAorCWtmMT1cMDssCisJa2YxMD1cMEQsCisJa2YxMT1cMFwyMDUsCisJa2YxMj1cMFwyMDYsCisJa2YxMz1cMFQsCisJa2YxND1cMFUsCisJa2YxNT1cMFYsCisJa2YxNj1cMFcsCisJa2YxNz1cMFgsCisJa2YxOD1cMFksCisJa2YxOT1cMFosCisJa2YyPVwwPCwKKwlrZjIwPVwwWywKKwlrZjIxPVwwXFwsCisJa2YyMj1cMF0sCisJa2YyMz1cMFwyMDcsCisJa2YyND1cMFwyMTAsCisJa2YyNT1cMFxeLAorCWtmMjY9XDBfLAorCWtmMjc9XDBgLAorCWtmMjg9XDBhLAorCWtmMjk9XDBiLAorCWtmMz1cMD0sCisJa2YzMD1cMGMsCisJa2YzMT1cMGQsCisJa2YzMj1cMGUsCisJa2YzMz1cMGYsCisJa2YzND1cMGcsCisJa2YzNT1cMFwyMTEsCisJa2YzNj1cMFwyMTIsCisJa2YzNz1cMGgsCisJa2YzOD1cMGksCisJa2YzOT1cMGosCisJa2Y0PVwwPiwKKwlrZjQwPVwwaywKKwlrZjQxPVwwbCwKKwlrZjQyPVwwbSwKKwlrZjQzPVwwbiwKKwlrZjQ0PVwwbywKKwlrZjQ1PVwwcCwKKwlrZjQ2PVwwcSwKKwlrZjQ3PVwwXDIxMywKKwlrZjQ4PVwwXDIxNCwKKwlrZjU9XDA/LAorCWtmNj1cMEAsCisJa2Y3PVwwQSwKKwlrZjg9XDBCLAorCWtmOT1cMEMsCisJa2hvbWU9XDBHLAorCWtpY2gxPVwwUiwKKwlrbnA9XDBRLAorCWtwcD1cMEksCisJdXNlPWFuc2kuc3lzLAorIworIyBUbyBwcm9wZXJseSB0cmFuc2xhdGUgdGVybWNhcC5kYXQgLT4gdGVybWluZm8uc3JjIHJlbWVtYmVyIHRoZXNlCisjIGVxdWl2YWxlbmNlczoKKyMJdGkJPC0+CXNtY3VwCXN0cmluZyB0byBzdGFydCBwcm9ncmFtcyB1c2luZyBjdXAodGVybWNhcCkKKyMJdGUJPC0+CXJtY3VwCXN0cmluZyB0byBlbmQgcHJvZ3JhbXMgdXNpbmcgY3VwCisjCXNvCTwtPglzbXNvCWJlZ2luIHN0YW5kb3V0IG1vZGUKKyMJc2UJPC0+CXJtc28JZXhpdCBzdGFuZG91dCBtb2RlCisjCXVzCTwtPglzbXVsCWJlZ2luIHVuZGVybGluZSBtb2RlCisjCXVlCTwtPglybXVsCWV4aXQgdW5kZXJsaW5lIG1vZGUKKyMJbWIJPC0+CWJsaW5rCXR1cm4gb24gYmxpbmtpbmcKKyMJbWQJPC0+CWJvbGQJdHVybiBvbiBleHRyYSBicmlnaHQgKGJvbGQpIG1vZGUKKyMJbXIJPC0+CXJldgl0dXJuIG9uIHJldmVyc2UgdmlkZW8gbW9kZQorIwltZQk8LT4Jc2dyMAl0dXJuIG9mZiBhbGwgYXRyaWJ1dGVzCisjCisjIE9uIG15IHRlcm1pbmFsLCBcRVs0bSBsb29rcyBkaW0uCithbnNpLWVteHxBTlNJLlNZUyBjb2xvciwKKwlibGluaz1cRVs1bSwKKwlib2xkPVxFWzFtLAorCWttb3VzPVxFW00sCisJcmV2PVxFWzdtLAorCXJtY3VwPVxFWzBtLAorCXJtc289XEVbMG0sCisJcm11bEAsCisJc2dyMD1cRVswbSwKKwlzbWN1cD1cRVswOzM3OzQwbSwKKwlzbXNvPVxFWzdtLAorCXNtdWxALAorCXVzZT1lbXgtYmFzZSwKK3dpbmRvd3xBTlNJLlNZUyB3aW5kb3csCisJYmxpbms9XEVbNW0sCisJYm9sZD1cRVsxOzM3OzQ3bSwKKwlyZXY9XEVbMTszNzs0N20sCisJcm1jdXA9XEVbMG0sCisJcm1zbz1cRVswOzM3OzQwbSwKKwlybXVsPVxFWzA7Mzc7NDBtLAorCXNncjA9XEVbMDszNzs0MG0sCisJc21jdXA9XEVbMDszNzs0MG0sCisJc21zbz1cRVsxOzM3OzQ3bSwKKwlzbXVsPVxFWzE7MzE7NDdtLAorCXVzZT1lbXgtYmFzZSwKK29zMnxPUy8yLWVteCBBTlNJLlNZUywKKwljdWI9XEVbJXAxJWRELAorCWN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLAorCWN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLAorCWN1ZjE9XEVbQywKKwljdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSwKKwlyYz1cRVt1LAorCXNjPVxFW3MsCisJdXNlPWFuc2ktZW14LAorCXVzZT1tb25vLAorbW9ub3xBTlNJLlNZUyBtb25vLAorCWJsaW5rPVxFWzVtLAorCWJvbGQ9XEVbMW0sCisJcmV2PVxFWzdtLAorCXJtY3VwPVxFWzBtLAorCXJtc289XEVbbSwKKwlybXVsPVxFW20sCisJc2dyMD1cRVttLAorCXNtY3VwPVxFWzBtLAorCXNtc289XEVbMW0sCisJc211bD1cRVs0bSwKKwl1c2U9ZW14LWJhc2UsCisjIHNhbWUgYXMgbW9ubywgYnV0IHVzZSByZXZlcnNlIHZpZGVvIGZvciBzdGFuZG91dCAobmljZSBmb3IgRW1hY3MpCitybW9ub3xBTlNJLlNZUyByZXZlcnNlIG1vbm8sCisJc21zbz1cRVs3bSwKKwl1c2U9bW9ubywKKyMgc2FtZSBhcyBtb25vLCBidXQgdXNlIGEgcmVhZGFibGUgY29sb3IgZm9yIHVuZGVybGluaW5nCittb25vMnxBTlNJLlNZUyBtb25vMiwKKwlybXVsPVxFWzBtLAorCXNtdWw9XEVbMTszMTs0MG0sCisJdXNlPW1vbm8sCisjIG5pY2UgY29sb3JzIGZvciBFbWFjcyAod2hpdGUgb24gYmx1ZSwgbW9kZSBsaW5lIHdoaXRlIG9uIGN5YW4pCithbnNpLWNvbG9yLTItZW14fEFOU0kuU1lTIGNvbG9yIDIsCisJcm1jdXA9XEVbMG0sCisJcm1zbz1cRVswOzM3OzQ0bSwKKwlybXVsPVxFWzBtLAorCXNncjA9XEVbMDszNzs0NG0sCisJc21jdXA9XEVbMDszNzs0NG0sCisJc21zbz1cRVsxOzM3OzQ2bSwKKwlzbXVsPVxFWzE7MzE7NDBtLAorCXVzZT1hbnNpLWVteCwKKyMgbmljZSBjb2xvcnMgZm9yIEVtYWNzICh3aGl0ZSBvbiBibGFjaywgbW9kZSBsaW5lIGJsYWNrIG9uIGN5YW4pCithbnNpLWNvbG9yLTMtZW14fEFOU0kuU1lTIGNvbG9yIDMsCisJcm1jdXA9XEVbMG0sCisJcm1zbz1cRVswbSwKKwlybXVsPVxFWzBtLAorCXNncjA9XEVbMG0sCisJc21jdXA9XEVbMG0sCisJc21zbz1cRVszMDs0Nm0sCisJc211bD1cRVsxOzMxOzQwbSwKKwl1c2U9YW5zaS1lbXgsCisKKyMjIyMgWCB0ZXJtaW5hbCBlbXVsYXRvcnMKKyMKKyMgWDEwLzYuNgkxMS83Lzg2LCBtaW51cyBhbHRlcm5hdGUgc2NyZWVuLCBwbHVzIChjc3IpCisjICh4dGVybTogIjpNVDoiIGNoYW5nZWQgdG8gIjprbToiOyBhZGRlZCA8c21hbT4vPHJtYW0+IGJhc2VkIG9uIGluaXQgc3RyaW5nOworIyByZW1vdmVkIChocywgZXNsb2ssIHRzbD1cRVs/RVxFWz8laSVkVCwgZnNsPVxFWz9GLCBkc2w9XEVbP0UpCisjIGFzIHRoZXNlIHNlZW0gbm90IHRvIHdvcmsgLS0gZXNyKQoreDEwdGVybXx2czEwMC14MTB8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFgxMCB3aW5kb3cgc3lzdGVtKSwKKwlhbSwKKwlrbSwKKwltaXIsCisJbXNnciwKKwl4ZW5sLAorCXhvbiwKKwljb2xzIzgwLAorCWl0IzgsCisJbGluZXMjNjUsCisJYm9sZD1cRVsxbSwKKwljbGVhcj1cRVtIXEVbMkosCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsCisJY3VkMT1eSiwKKwljdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLAorCWRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sCisJZGwxPVxFW00sCisJZWQ9XEVbSiwKKwllbD1cRVtLLAorCWhvbWU9XEVbSCwKKwlodD1eSSwKKwlpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsCisJaW5kPV5KLAorCWlzMj1cRVxFW21cRVs/N2hcRVs/MTs0bCwKKwlrYnM9XkgsCisJa2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwKKwlrZjI9XEVPUSwKKwlrZjM9XEVPUiwKKwlrZjQ9XEVPUywKKwlyZXY9XEVbN20sCisJcmk9XEVNLAorCXJtYW09XEVbPzdsLAorCXJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWxcRT4sCisJcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sCisJc21hbT1cRVs/N2gsCisJc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwKKwlzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sCisjIFgxMVI2IHh0ZXJtLiAgVGhpcyBpcyBrbm93biBnb29kIGZvciB0aGUgWEZyZWU4NiB2ZXJzaW9uIHVuZGVyIExpbnV4LgorIyBJdCBpcyAqd2F5KiBtb3JlIGZlYXR1cmVmdWwgdGhhbiB0aGUgc3RvY2sgWCBjb25zb3J0aXVtIGVudHJ5IChoYXMgYWNzYywKKyMgZm9yIHN0YXJ0ZXJzKS4gIFRoZSA8a21vdXM+IGtleSBpcyBhY3R1YWxseSB0aGUgXEVbTSBwcmVmaXggcmV0dXJuZWQgYnkKKyMgeHRlcm0ncyBpbnRlcm5hbCBtb3VzZS10cmFja2luZyBmYWNpbGl0eTsgbmN1cnNlcyB3aWxsIGludGVycHJldCB0aGUKKyMgZm9sbG93aW5nIHRocmVlIGJ5dGVzIG9mIG1vdXNlIHN0YXR1cyBpbmZvcm1hdGlvbi4KKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IDE0IERlYyAxOTk1Cit4dGVybS1yNnx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWDExUjYgV2luZG93IFN5c3RlbSksCisJYW0sCisJa20sCisJbWlyLAorCW1zZ3IsCisJeGVubCwKKwl4b24sCisJY29scyM4MCwKKwlpdCM4LAorCWxpbmVzIzY1LAorCWFjc2M9KytcLFwsLS0uLjAwSUlgYGFhZmZnZ2hoampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywKKwlib2xkPVxFWzFtLAorCWNsZWFyPVxFW0hcRVsySiwKKwljcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViPVxFWyVwMSVkRCwKKwljdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsCisJY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLAorCWN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwKKwlkY2gxPVxFW1AsCisJZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLAorCWVkPVxFW0osCisJZWw9XEVbSywKKwllbmFjcz1cRShCXEUpMCwKKwlob21lPVxFW0gsCisJaHQ9XkksCisJaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsCisJaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLAorCWluZD1eSiwKKwlpczI9XEVbclxFW21cRVsySlxFW0hcRVs/N2hcRVs/MTszOzQ7NmxcRVs0bCwKKwlrYnM9XkgsCisJa2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwKKwlrZW5kPVxFT2UsCisJa2VudD1cRU9NLAorCWtmMT1cRVsxMX4sCisJa2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sCisJa2YxMz1cRVsyNX4sCisJa2YxND1cRVsyNn4sCisJa2YxNT1cRVsyOH4sCisJa2YxNj1cRVsyOX4sCisJa2YxNz1cRVszMX4sCisJa2YxOD1cRVszMn4sCisJa2YxOT1cRVszM34sCisJa2YyPVxFWzEyfiwKKwlrZjIwPVxFWzM0fiwKKwlrZjM9XEVbMTN+LAorCWtmND1cRVsxNH4sCisJa2Y1PVxFWzE1fiwKKwlrZjY9XEVbMTd+LAorCWtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwKKwlrZjk9XEVbMjB+LAorCWtmbmQ9XEVbMX4sCisJa2hvbWU9XEVPXDAsCisJa2ljaDE9XEVbMn4sCisJa21vdXM9XEVbTSwKKwlrbnA9XEVbNn4sCisJa3BwPVxFWzV+LAorCXJjPVxFOCwKKwlyZXY9XEVbN20sCisJcmk9XEVNLAorCXJtYWNzPV5PLAorCXJtYW09XEVbPzdsLAorCXJtY3VwPVxFWzJKXEVbPzQ3bFxFOCwKKwlybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LAorCXJtc289XEVbbSwKKwlybXVsPVxFW20sCisJcnMxPV5PLAorCXJzMj1cRVtyXEVbbVxFWzJKXEVbSFxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU8LAorCXNjPVxFNywKKwlzZ3IwPVxFW20sCisJc21hY3M9Xk4sCisJc21hbT1cRVs/N2gsCisJc21jdXA9XEU3XEVbPzQ3aCwKKwlzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20sCisJc211bD1cRVs0bSwKKwl0YmM9XEVbM2ssCisJdTY9XEVbJWklZDslZFIsCisJdTc9XEVbNm4sCisJdTg9XEVbPzE7MmMsCisJdTk9XEVbYywKK3h0ZXJtLWJvbGR8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFgxMVI2IFdpbmRvdyBTeXN0ZW0pIHN0YW5kb3V0IHcvYm9sZCwKKwlzbXNvPVxFWzFtLAorCXVzZT14dGVybSwKK3h0ZXJtc3x2czEwMHN8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKHNtYWxsIHNjcmVlbiAyNHg4MCksCisJY29scyM4MCwKKwlsaW5lcyMyNCwKKwl1c2U9eHRlcm0sCisjIChrdGVybTogdGhpcyBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcyAiOktKOlRZPWFzY2lpOiIgLS0gZXNyKQora3Rlcm18a3Rlcm0ga2FuamkgdGVybWluYWwgZW11bGF0b3IgKFggd2luZG93IHN5c3RlbSksCisJZXNsb2ssCisJaHMsCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWRzbD1cRVs/SCwKKwlmc2w9XEVbP0YsCisJcmM9XEU4LAorCXNjPVxFNywKKwl0c2w9XEVbP0VcRVs/JWklZFQsCisJdXNlPXh0ZXJtLAorCXVzZT1lY21hK2NvbG9yLAorCisjIFNlZSB0aGUgbm90ZSBvbiBJQ0gvSUNIMSBWRVJTVVMgUk1JUi9TTUlSIG5lYXIgdGhlIGVuZCBvZiBmaWxlCit4dGVybS1uaWN8eHRlcm0gd2l0aCBpY2gvaWNoMSBzdXBwcmVzc2VkIGZvciBub24tY3Vyc2VzIHByb2dyYW1zLAorCWljaEAsCisJaWNoMUAsCisJdXNlPXh0ZXJtLAorCisjIFNob3VsZCB3b3JrIHdpdGggdGhlIGNvbG9yIHh0ZXJtIG9uIHRoZSBYMTFSNiBjb250cmliIHRhcGUuCisjIEFzc3VtZXMgdGhlIHh0ZXJtIGF0dHJpYnV0ZSBkZWZhdWx0IGlzIGJsYWNrIG9uIHdoaXRlLgorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gTWFyY2ggNCAxOTk2Cit4dGVybS1jb2xvcnx4dGVybSB3aXRoIGNvbG9yIHN1cHBvcnQsCisJb3A9XEVbMzA7NDdtLAorCXVzZT14dGVybSwKKwl1c2U9a2xvbmUrY29sb3IsCisKKyMgRnJvbTogVGhvbWFzIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTMgRGVjIDE5OTUKK3J4dnR8cnh2dCB0ZXJtaW5hbCBlbXVsYXRvciwKKwlrZW5kPVxFT3csCisJa2hvbWU9XEVbSCwKKwlrbW91c0AsCisJdXNlPXh0ZXJtLAorCXVzZT1rbG9uZStjb2xvciwKKworIyBGcm9tOiBEYXZpZCBKLiBNYWNLZW56aWUgPGRqbUB2YS5wdWJuaXguY29tPiAyMCBBcHIgMTk5NQorIyBIZXJlJ3MgYSB0ZXJtY2FwIGVudHJ5IEkndmUgYmVlbiB1c2luZyBmb3IgeHRlcm1fY29sb3IsIHdoaWNoIGNvbWVzCisjIHdpdGggQlNEL09TIDIuMCwgYW5kIHRoZSBYMTFSNiBjb250cmliIHRhcGUgdG9vIEkgdGhpbmsuICBCZXNpZGVzIHRoZQorIyBjb2xvciBzdHVmZiwgSSBhbHNvIGhhdmUgYSBzdGF0dXMgbGluZSBkZWZpbmVkIGFzIHRoZSB3aW5kb3cgbWFuYWdlcgorIyB0aXRsZSBiYXIuIFtJIGhhdmUgdHJhbnNsYXRlZCBpdCB0byB0ZXJtaW5mbyAtLSBFU1JdCit4dGVybS1wY29sb3J8eHRlcm0gd2l0aCBjb2xvciB1c2VkIGZvciBoaWdobGlnaHRzIGFuZCBzdGF0dXMgbGluZSwKKwlocywKKwl3c2wjNDAsCisJYm9sZD1cRVsxbVxFWzQzbSwKKwlkc2w9XEVdMDtcMDA3LAorCWZzbD1eRywKKwlyZXY9XEVbN21cRVszNG0sCisJc21zbz1cRVs3bVxFWzMxbSwKKwlzbXVsPVxFWzRtXEVbNDJtLAorCXRzbD1cRV0wOywKKwl1c2U9eHRlcm0sCisKKyMgSFAgc2hpcHMgdGhpcywgZXhjZXB0IGZvciB0aGUgcGIjOTYwMCB3aGljaCB3YXMgbWVyZ2VkIGluIGZyb20gQlNEIHRlcm1jYXAuCitocHRlcm18WC1ocHRlcm18aHAgWDExIHRlcm1pbmFsIGVtdWxhdG9yLAorCWFtLAorCWRhLAorCWRiLAorCW1pciwKKwl4aHAsCisJY29scyM4MCwKKwlsaCMyLAorCWxpbmVzIzI0LAorCWxtIzAsCisJbHcjOCwKKwlubGFiIzgsCisJcGIjOTYwMCwKKwl4bWMjMCwKKwliZWw9XkcsCisJYm9sZD1cRSZkQiwKKwljYnQ9XEVpLAorCWNsZWFyPVxFJmEweTBDXEVKLAorCWNyPV5NLAorCWN1YjE9XkgsCisJY3VkMT1cRUIsCisJY3VmMT1cRUMsCisJY3VwPVxFJmElcDElZHklcDIlZEMsCisJY3V1MT1cRUEsCisJZGNoMT1cRVAsCisJZGltPVxFJmRILAorCWRsMT1cRU0sCisJZWQ9XEVKJDwxPiwKKwllbD1cRUssCisJaHBhPVxFJmElcDElZEMsCisJaHQ9XkksCisJaHRzPVxFMSwKKwlpbDE9XEVMLAorCWluZD1eSiwKKwlrYnM9XkgsCisJa2Nscj1cRUosCisJa2N0YWI9XEUyLAorCWtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwKKwlrZGNoMT1cRVAsCisJa2RsMT1cRU0sCisJa2VkPVxFSiwKKwlrZWw9XEVLLAorCWtmMT1cRXAsCisJa2YyPVxFcSwKKwlrZjM9XEVyLAorCWtmND1cRXMsCisJa2Y1PVxFdCwKKwlrZjY9XEV1LAorCWtmNz1cRXYsCisJa2Y4PVxFdywKKwlraG9tZT1cRWgsCisJa2h0cz1cRTEsCisJa2ljaDE9XEVRLAorCWtpbDE9XEVMLAorCWtpbmQ9XEVTLAorCWtsbD1cRUYsCisJa25wPVxFVSwKKwlrcHA9XEVWLAorCWtyaT1cRVQsCisJa3JtaXI9XEVSLAorCWt0YmM9XEUzLAorCW1lbWw9XEVsLAorCW1lbXU9XEVtLAorCXBma2V5PVxFJmYlcDElZGslcDIlbCVkTCVwMiVzLAorCXBmbG9jPVxFJmYxYSVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGZ4PVxFJmYyYSVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGxuPVxFJmYlcDElZGslcDIlbCVkZDBMJXAyJXMsCisJcmV2PVxFJmRCLAorCXJpPVxFVCwKKwlybWFjcz1eTywKKwlybWlyPVxFUiwKKwlybWt4PVxFJnMwQSwKKwlybWxuPVxFJmpALAorCXJtc289XEUmZEAsCisJcm11bD1cRSZkQCwKKwlzZ3I9XEUmZCU/JXA3JXQlJ3MnJWMlOyVwMSVwMyV8JXA2JXwlezJ9JSolcDIlezR9JSolKyVwNCUrJXA1JXs4fSUqJSslJ0AnJSslYyU/JXA5JXQlJ1wwMTYnJWMlZSUnXDAxNyclYyU7LAorCXNncjA9XEUmZEAsCisJc21hY3M9Xk4sCisJc21pcj1cRVEsCisJc21reD1cRSZzMUEsCisJc21sbj1cRSZqQiwKKwlzbXNvPVxFJmRKLAorCXNtdWw9XEUmZEQsCisJdGJjPVxFMywKKwl2cGE9XEUmYSVwMSVkWSwKKworIyBUaGlzIGVudHJ5IGRlc2NyaWJlcyBhbiB4dGVybSB3aXRoIFN1bi1zdHlsZSBmdW5jdGlvbiBrZXlzIGVuYWJsZWQKKyMgdmlhIHRoZSBYIHJlc291cmNlIHNldHRpbmcgInh0ZXJtKnN1bkZ1bmN0aW9uS2V5czp0cnVlIgorIyBUbyB1bmRlcnN0YW5kIDxrZjExPi88a2YxMj4gbm90ZSB0aGF0IEwxLEwyIGFuZCBGMTEsRjEyIGFyZSB0aGUgc2FtZS4KKyMgVGhlIDxrZjEzPi4uLjxrZjIwPiBrZXlzIGFyZSBMMy1MMTAuICBXZSBkb24ndCBzZXQgPGtmMTY9XEVbMTk3ej4KKyMgYmVjYXVzZSB3ZSB3YW50IGl0IHRvIGJlIHNlZW4gYXMgPGtjcHk+LgorIyBUaGUgPGtmMzE+Li4uPGtmNDU+IGtleXMgYXJlIFIxLVIxNS4gIFdlIHRyZWF0IHNvbWUgb2YgdGhlc2UgaW4gYWNjb3JkYW5jZQorIyB3aXRoIHRoZWlyIFN1biBrZXlib2FyZCBsYWJlbHMgaW5zdGVhZC4KKyMgRnJvbTogU2ltb24gSi4gR2VycmF0eSA8c2pnQHplbi52b2lkLm96LmF1PiAxMCBKYW4gMTk5NgoreHRlcm0tc3VufHh0ZXJtIHdpdGggc3VuRnVuY3Rpb25LZXlzIHRydWUsCisJa2IyPVxFWzIxOHosCisJa2NweT1cRVsxOTd6LAorCWtlbmQ9XEVbMjIweiwKKwlrZjE9XEVbMjI0eiwKKwlrZjEwPVxFWzIzM3osCisJa2YxMT1cRVsxOTJ6LAorCWtmMTI9XEVbMTkzeiwKKwlrZjEzPVxFWzE5NHosCisJa2YxND1cRVsxOTV6LAorCWtmMTU9XEVbMTk2eiwKKwlrZjE3PVxFWzE5OHosCisJa2YxOD1cRVsxOTl6LAorCWtmMTk9XEVbMjAweiwKKwlrZjI9XEVbMjI1eiwKKwlrZjIwPVxFWzIwMXosCisJa2YzPVxFWzIyNnosCisJa2YzMT1cRVsyMDh6LAorCWtmMzI9XEVbMjA5eiwKKwlrZjMzPVxFWzIxMHosCisJa2YzND1cRVsyMTF6LAorCWtmMzU9XEVbMjEyeiwKKwlrZjM2PVxFWzIxM3osCisJa2YzOD1cRVsyMTV6LAorCWtmND1cRVsyMjd6LAorCWtmNDA9XEVbMjE3eiwKKwlrZjQyPVxFWzIxOXosCisJa2Y0ND1cRVsyMjF6LAorCWtmNT1cRVsyMjh6LAorCWtmNj1cRVsyMjl6LAorCWtmNz1cRVsyMzB6LAorCWtmOD1cRVsyMzF6LAorCWtmOT1cRVsyMzJ6LAorCWtmbmQ9XEVbMjAweiwKKwlraGxwPVxFWzE5NnosCisJa2hvbWU9XEVbMjE0eiwKKwlraWNoMT1cRVsyeiwKKwlrbnA9XEVbMjIyeiwKKwlrcHA9XEVbMjE2eiwKKwlrdW5kPVxFWzE5NXosCisJdXNlPXh0ZXJtLAoreHRlcm1zLXN1bnxzbWFsbCAoODB4MjQpIHh0ZXJtIHdpdGggc3VuRnVuY3Rpb25LZXlzIHRydWUsCisJY29scyM4MCwKKwlsaW5lcyMyNCwKKwl1c2U9eHRlcm0tc3VuLAorCisjIFRoaXMgaXMgZm9yIHRoZSBleHRlbnNpYmxlIHRlcm1pbmFsIGVtdWxhdG9yIG9uIHRoZSBYMTFSNiBjb250cmliIHRhcGUuCitlbXV8ZW11IG5hdGl2ZSBtb2RlLAorCW1pciwKKwltc2dyLAorCXhvbiwKKwljb2xvcnMjMTUsCisJY29scyM4MCwKKwlpdCM4LAorCWxpbmVzIzI0LAorCXBhaXJzIzY0LAorCXZ0IzIwMCwKKwlhY3NjPTYxYVwyMDJmXDI2MGcyalwyMTNrXDIxNGxcMjE1bVwyMTZuXDIxN29cMjIwcVwyMjJzXDIyNHRcMjI1dVwyMjZ2XDIyN3dcMjMweFwyMzF+XDI0NCwKKwliZWw9XkcsCisJYmxpbms9XEVTXEVXLAorCWJvbGQ9XEVTXEVVLAorCWNpdmlzPVxFWiwKKwljbGVhcj1cRVBcRUUwOzA7LAorCWNub3JtPVxFYSwKKwljcj1eTSwKKwljc3I9XEVrJXAxJWQ7JXAyJWQ7LAorCWN1Yj1cRXEtJXAxJWQ7LAorCWN1YjE9XkgsCisJY3VkPVxFcCVwMSVkOywKKwljdWQxPVxFQiwKKwljdWY9XEVxJXAxJWQ7LAorCWN1ZjE9XEVELAorCWN1cD1cRUUlcDElZDslcDIlZDssCisJY3V1PVxFcC0lcDElZDssCisJY3V1MT1cRUEsCisJZGNoPVxFSSVwMSVkOywKKwlkY2gxPVxFSTE7LAorCWRsPVxFUiVwMSVkOywKKwlkbDE9XEVSMTssCisJZWNoPVxFaiVwMSVkOywKKwllZD1cRU4sCisJZWw9XEVLLAorCWVsMT1cRUwsCisJZW5hY3M9XDAsCisJaG9tZT1cRUUwOzA7LAorCWh0PV5JLAorCWh0cz1cRWgsCisJaWw9XEVRJXAxJWQ7LAorCWlsMT1cRVExOywKKwlpbmQ9XEVHLAorCWlzMj1cRVNcRXIwO1xFczA7LAorCWticz1eSCwKKwlrY3ViMT1cRUMsCisJa2N1ZDE9XEVCLAorCWtjdWYxPVxFRCwKKwlrY3V1MT1cRUEsCisJa2RjaDE9XDE3NywKKwlrZW50PV5NLAorCWtmMD1cRUYwMCwKKwlrZjE9XEVGMDEsCisJa2YxMD1cRUYxMCwKKwlrZjExPVxFRjExLAorCWtmMTI9XEVGMTIsCisJa2YxMz1cRUYxMywKKwlrZjE0PVxFRjE0LAorCWtmMTU9XEVGMTUsCisJa2YxNj1cRUYxNiwKKwlrZjE3PVxFRjE3LAorCWtmMTg9XEVGMTgsCisJa2YxOT1cRUYxOSwKKwlrZjI9XEVGMDIsCisJa2YyMD1cRUYyMCwKKwlrZjM9XEVGMDMsCisJa2Y0PVxFRjA0LAorCWtmNT1cRUYwNSwKKwlrZjY9XEVGMDYsCisJa2Y3PVxFRjA3LAorCWtmOD1cRUYwOCwKKwlrZjk9XEVGMDksCisJa2ZuZD1cRWZpbmQsCisJa2ljaDE9XEVpbnMsCisJa25wPVxFbmV4dCwKKwlrcHA9XEVwcmlvciwKKwlrc2x0PVxFc2VsLAorCW9jPVxFczA7XEVyMDssCisJcmV2PVxFU1xFVCwKKwlyaT1cRUYsCisJcm1hY3M9XDAsCisJcm1pcj1cRVgsCisJcm1zbz1cRVMsCisJcm11bD1cRVMsCisJcnMyPVxFU1xFczA7XEVyMDssCisJc2V0YWI9XEVzJWklcDElZDssCisJc2V0YWY9XEVyJWklcDElZDssCisJc2dyMD1cRVMsCisJc21hY3M9XDAsCisJc21pcj1cRVksCisJc21zbz1cRVNcRVQsCisJc211bD1cRVNcRVYsCisJdGJjPVxFaiwKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWxpYXNlcyB3aGljaCBjb25mbGljdCB3aXRoIHRlcm1pbmZvLnNyYworYW5zaXxBTlNJLlNZUyBjb2xvciwKKwl1c2U9YW5zaS1lbXgsCithbnNpLWNvbG9yLTJ8QU5TSS5TWVMgY29sb3IgMiwKKwl1c2U9YW5zaS1jb2xvci0yLWVteCwKK2Fuc2ktY29sb3ItM3xBTlNJLlNZUyBjb2xvciAzLAorCXVzZT1hbnNpLWNvbG9yLTMtZW14LAoreHRlcm18dnMxMDB8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFgxMVI2IFdpbmRvdyBTeXN0ZW0pLAorCXVzZT14dGVybS1yNiwKZGlmZiAtLWdpdCBhL21pc2MvZm9ybS5kZWYgYi9taXNjL2Zvcm0uZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDNiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2Zvcm0uZGVmCkBAIC0wLDAgKzEsMTAxIEBACitMSUJSQVJZIGZvcm01IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UNCitERVNDUklQVElPTiAiTkN1cnNlcy01LTEtMjAwMDA3MDQsIG1vZHVsZSBmb3JtIg0KK0NPREUgTE9BRE9OQ0FMTA0KK0RBVEEgTE9BRE9OQ0FMTCBOT05TSEFSRUQgTVVMVElQTEUNCitFWFBPUlRTDQorCSJUWVBFX0FMTlVNIglAMglOT05BTUUNCisJIlRZUEVfQUxQSEEiCUAxCU5PTkFNRQ0KKwkiVFlQRV9FTlVNIglAMwlOT05BTUUNCisJIlRZUEVfSU5URUdFUiIJQDQJTk9OQU1FDQorCSJUWVBFX0lQVjQiCUA3CU5PTkFNRQ0KKwkiVFlQRV9OVU1FUklDIglANQlOT05BTUUNCisJIlRZUEVfUkVHRVhQIglANglOT05BTUUNCisJIl9uY19Db3B5X0FyZ3VtZW50IglAOAlOT05BTUUNCisJIl9uY19Db3B5X1R5cGUiCUA5CU5PTkFNRQ0KKwkiX25jX0RlZmF1bHRfRmllbGQiCUAxMQlOT05BTUUNCisJIl9uY19EZWZhdWx0X0ZpZWxkVHlwZSIJQDEyCU5PTkFNRQ0KKwkiX25jX0RlZmF1bHRfRm9ybSIJQDEwCU5PTkFNRQ0KKwkiX25jX0ZpcnN0X0FjdGl2ZV9GaWVsZCIJQDEzCU5PTkFNRQ0KKwkiX25jX0ZyZWVfQXJndW1lbnQiCUAxNAlOT05BTUUNCisJIl9uY19GcmVlX1R5cGUiCUAxNQlOT05BTUUNCisJIl9uY19JbnRlcm5hbF9WYWxpZGF0aW9uIglAMTYJTk9OQU1FDQorCSJfbmNfTWFrZV9Bcmd1bWVudCIJQDE3CU5PTkFNRQ0KKwkiX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yIglAMTgJTk9OQU1FDQorCSJfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkIglAMTkJTk9OQU1FDQorCSJfbmNfU2V0X0N1cnJlbnRfRmllbGQiCUAyNQlOT05BTUUNCisJIl9uY19TZXRfRm9ybV9QYWdlIglAMjYJTk9OQU1FDQorCSJfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcyIJQDI3CU5PTkFNRQ0KKwkiX25jX1N5bmNocm9uaXplX09wdGlvbnMiCUAyOAlOT05BTUUNCisJImN1cnJlbnRfZmllbGQiCUAxMDIJTk9OQU1FDQorCSJkYXRhX2FoZWFkIglAMTMzCU5PTkFNRQ0KKwkiZGF0YV9iZWhpbmQiCUAxMzQJTk9OQU1FDQorCSJkdXBfZmllbGQiCUAzMQlOT05BTUUNCisJImR5bmFtaWNfZmllbGRfaW5mbyIJQDM1CU5PTkFNRQ0KKwkiZmllbGRfYXJnIglANTYJTk9OQU1FDQorCSJmaWVsZF9iYWNrIglANTMJTk9OQU1FDQorCSJmaWVsZF9idWZmZXIiCUA1OQlOT05BTUUNCisJImZpZWxkX2NvdW50IglAMTExCU5PTkFNRQ0KKwkiZmllbGRfZm9yZSIJQDUyCU5PTkFNRQ0KKwkiZmllbGRfaW5kZXgiCUAxMTUJTk9OQU1FDQorCSJmaWVsZF9pbmZvIglAMzQJTk9OQU1FDQorCSJmaWVsZF9pbml0IglAMTA3CU5PTkFNRQ0KKwkiZmllbGRfanVzdCIJQDQxCU5PTkFNRQ0KKwkiZmllbGRfb3B0cyIJQDYwCU5PTkFNRQ0KKwkiZmllbGRfb3B0c19vZmYiCUA1MQlOT05BTUUNCisJImZpZWxkX29wdHNfb24iCUA1MAlOT05BTUUNCisJImZpZWxkX3BhZCIJQDQ1CU5PTkFNRQ0KKwkiZmllbGRfc3RhdHVzIglANTUJTk9OQU1FDQorCSJmaWVsZF90ZXJtIglAMTA4CU5PTkFNRQ0KKwkiZmllbGRfdHlwZSIJQDU4CU5PTkFNRQ0KKwkiZmllbGRfdXNlcnB0ciIJQDU3CU5PTkFNRQ0KKwkiZm9ybV9kcml2ZXIiCUAxMjYJTk9OQU1FDQorCSJmb3JtX2ZpZWxkcyIJQDEwMQlOT05BTUUNCisJImZvcm1faW5pdCIJQDEwNQlOT05BTUUNCisJImZvcm1fb3B0cyIJQDEzMglOT05BTUUNCisJImZvcm1fb3B0c19vZmYiCUAxMzAJTk9OQU1FDQorCSJmb3JtX29wdHNfb24iCUAxMjkJTk9OQU1FDQorCSJmb3JtX3BhZ2UiCUAxMTcJTk9OQU1FDQorCSJmb3JtX3JlcXVlc3RfYnlfbmFtZSIJQDI5CU5PTkFNRQ0KKwkiZm9ybV9yZXF1ZXN0X25hbWUiCUA2MQlOT05BTUUNCisJImZvcm1fc3ViIglAMTA0CU5PTkFNRQ0KKwkiZm9ybV90ZXJtIglAMTA2CU5PTkFNRQ0KKwkiZm9ybV91c2VycHRyIglAMTMxCU5PTkFNRQ0KKwkiZm9ybV93aW4iCUAxMDMJTk9OQU1FDQorCSJmcmVlX2ZpZWxkIglAMzMJTk9OQU1FDQorCSJmcmVlX2ZpZWxkdHlwZSIJQDIyCU5PTkFNRQ0KKwkiZnJlZV9mb3JtIglAMTA5CU5PTkFNRQ0KKwkibGlua19maWVsZCIJQDMyCU5PTkFNRQ0KKwkibGlua19maWVsZHR5cGUiCUAyMQlOT05BTUUNCisJIm1vdmVfZmllbGQiCUAzNwlOT05BTUUNCisJIm5ld19maWVsZCIJQDMwCU5PTkFNRQ0KKwkibmV3X2ZpZWxkdHlwZSIJQDIwCU5PTkFNRQ0KKwkibmV3X2Zvcm0iCUAxMDAJTk9OQU1FDQorCSJuZXdfcGFnZSIJQDU0CU5PTkFNRQ0KKwkicG9zX2Zvcm1fY3Vyc29yIglAMTI1CU5PTkFNRQ0KKwkicG9zdF9mb3JtIglAMTIzCU5PTkFNRQ0KKwkic2NhbGVfZm9ybSIJQDExOAlOT05BTUUNCisJInNldF9jdXJyZW50X2ZpZWxkIglAMTE0CU5PTkFNRQ0KKwkic2V0X2ZpZWxkX2JhY2siCUA0MwlOT05BTUUNCisJInNldF9maWVsZF9idWZmZXIiCUA0NglOT05BTUUNCisJInNldF9maWVsZF9mb3JlIglANDIJTk9OQU1FDQorCSJzZXRfZmllbGRfaW5pdCIJQDEyMQlOT05BTUUNCisJInNldF9maWVsZF9qdXN0IglANDAJTk9OQU1FDQorCSJzZXRfZmllbGRfb3B0cyIJQDQ5CU5PTkFNRQ0KKwkic2V0X2ZpZWxkX3BhZCIJQDQ0CU5PTkFNRQ0KKwkic2V0X2ZpZWxkX3N0YXR1cyIJQDQ3CU5PTkFNRQ0KKwkic2V0X2ZpZWxkX3Rlcm0iCUAxMjIJTk9OQU1FDQorCSJzZXRfZmllbGRfdHlwZSIJQDM4CU5PTkFNRQ0KKwkic2V0X2ZpZWxkX3VzZXJwdHIiCUA0OAlOT05BTUUNCisJInNldF9maWVsZHR5cGVfYXJnIglAMjMJTk9OQU1FDQorCSJzZXRfZmllbGR0eXBlX2Nob2ljZSIJQDI0CU5PTkFNRQ0KKwkic2V0X2Zvcm1fZmllbGRzIglAMTEwCU5PTkFNRQ0KKwkic2V0X2Zvcm1faW5pdCIJQDExOQlOT05BTUUNCisJInNldF9mb3JtX29wdHMiCUAxMjgJTk9OQU1FDQorCSJzZXRfZm9ybV9wYWdlIglAMTE2CU5PTkFNRQ0KKwkic2V0X2Zvcm1fc3ViIglAMTEzCU5PTkFNRQ0KKwkic2V0X2Zvcm1fdGVybSIJQDEyMAlOT05BTUUNCisJInNldF9mb3JtX3VzZXJwdHIiCUAxMjcJTk9OQU1FDQorCSJzZXRfZm9ybV93aW4iCUAxMTIJTk9OQU1FDQorCSJzZXRfbWF4X2ZpZWxkIglAMzYJTk9OQU1FDQorCSJzZXRfbmV3X3BhZ2UiCUAzOQlOT05BTUUNCisJInVucG9zdF9mb3JtIglAMTI0CU5PTkFNRQ0KZGlmZiAtLWdpdCBhL21pc2MvZm9ybS5yZWYgYi9taXNjL2Zvcm0ucmVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTY1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2Zvcm0ucmVmCkBAIC0wLDAgKzEsMTA2IEBACitMSUJSQVJZIEZPUk0yIElOSVRJTlNUQU5DRQ0KK0RFU0NSSVBUSU9OICdOQ3Vyc2VzIDEuOS45ZS0xIGZvciBPUy8yIC0gZm9ybXMgbGlicmFyeScNCitFWFBPUlRTDQorOw0KKzsgU0hBUkVEIFZBUklBQkxFUw0KKzsNCisJIlRZUEVfQUxQSEEiCQlAMQk7Tk9OQU1FDQorCSJUWVBFX0FMTlVNIgkJQDIJO05PTkFNRQ0KKwkiVFlQRV9FTlVNIgkJQDMJO05PTkFNRQ0KKwkiVFlQRV9JTlRFR0VSIgkJQDQJO05PTkFNRQ0KKwkiVFlQRV9OVU1FUklDIgkJQDUJO05PTkFNRQ0KKwkiVFlQRV9SRUdFWFAiCQlANgk7Tk9OQU1FDQorDQorCSJfbmNfRGVmYXVsdF9Gb3JtIglAMTAJO05PTkFNRQ0KKwkiX25jX0RlZmF1bHRfRmllbGQiCUAxMQk7Tk9OQU1FDQorDQorOw0KKzsgRklFTEQgRlVOQ1RJT05TDQorOw0KKwkibmV3X2ZpZWxkdHlwZSIJCUAyMAk7Tk9OQU1FDQorCSJsaW5rX2ZpZWxkdHlwZSIJQDIxCTtOT05BTUUNCisNCisJImZyZWVfZmllbGR0eXBlIglAMjIJO05PTkFNRQ0KKwkic2V0X2ZpZWxkdHlwZV9hcmciCUAyMwk7Tk9OQU1FDQorCSJzZXRfZmllbGR0eXBlX2Nob2ljZSIJQDI0CTtOT05BTUUNCisNCisJIm5ld19maWVsZCIJCUAzMAk7Tk9OQU1FDQorCSJkdXBfZmllbGQiCQlAMzEJO05PTkFNRQ0KKwkibGlua19maWVsZCIJCUAzMgk7Tk9OQU1FDQorDQorCSJmcmVlX2ZpZWxkIgkJQDMzCTtOT05BTUUNCisJImZpZWxkX2luZm8iCQlAMzQJO05PTkFNRQ0KKwkiZHluYW1pY19maWVsZF9pbmZvIglAMzUJO05PTkFNRQ0KKwkic2V0X21heF9maWVsZCIJCUAzNgk7Tk9OQU1FDQorCSJtb3ZlX2ZpZWxkIgkJQDM3CTtOT05BTUUNCisJInNldF9maWVsZF90eXBlIglAMzgJO05PTkFNRQ0KKwkic2V0X25ld19wYWdlIgkJQDM5CTtOT05BTUUNCisJInNldF9maWVsZF9qdXN0IglANDAJO05PTkFNRQ0KKwkiZmllbGRfanVzdCIJCUA0MQk7Tk9OQU1FDQorCSJzZXRfZmllbGRfZm9yZSIJQDQyCTtOT05BTUUNCisJInNldF9maWVsZF9iYWNrIglANDMJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX3BhZCIJCUA0NAk7Tk9OQU1FDQorCSJmaWVsZF9wYWQiCQlANDUJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX2J1ZmZlciIJQDQ2CTtOT05BTUUNCisJInNldF9maWVsZF9zdGF0dXMiCUA0Nwk7Tk9OQU1FDQorCSJzZXRfZmllbGRfdXNlcnB0ciIJQDQ4CTtOT05BTUUNCisJInNldF9maWVsZF9vcHRzIglANDkJO05PTkFNRQ0KKwkiZmllbGRfb3B0c19vbiIJCUA1MAk7Tk9OQU1FDQorCSJmaWVsZF9vcHRzX29mZiIJQDUxCTtOT05BTUUNCisNCisJImZpZWxkX2ZvcmUiCQlANTIJO05PTkFNRQ0KKwkiZmllbGRfYmFjayIJCUA1Mwk7Tk9OQU1FDQorDQorCSJuZXdfcGFnZSIJCUA1NAk7Tk9OQU1FDQorCSJmaWVsZF9zdGF0dXMiCQlANTUJO05PTkFNRQ0KKwkiZmllbGRfYXJnIgkJQDU2CTtOT05BTUUNCisJImZpZWxkX3VzZXJwdHIiCQlANTcJO05PTkFNRQ0KKwkiZmllbGRfdHlwZSIJCUA1OAk7Tk9OQU1FDQorCSJmaWVsZF9idWZmZXIiCQlANTkJO05PTkFNRQ0KKwkiZmllbGRfb3B0cyIJCUA2MAk7Tk9OQU1FDQorDQorOw0KKzsgRk9STSBGVU5DVElPTlMNCis7DQorCSJuZXdfZm9ybSIJCUAxMDAJO05PTkFNRQ0KKw0KKwkiZm9ybV9maWVsZHMiCQlAMTAxCTtOT05BTUUNCisJImN1cnJlbnRfZmllbGQiCQlAMTAyCTtOT05BTUUNCisNCisJImZvcm1fd2luIgkJQDEwMwk7Tk9OQU1FDQorCSJmb3JtX3N1YiIJCUAxMDQJO05PTkFNRQ0KKw0KKwkiZm9ybV9pbml0IgkJQDEwNQk7Tk9OQU1FDQorCSJmb3JtX3Rlcm0iCQlAMTA2CTtOT05BTUUNCisJImZpZWxkX2luaXQiCQlAMTA3CTtOT05BTUUNCisJImZpZWxkX3Rlcm0iCQlAMTA4CTtOT05BTUUNCisNCisJImZyZWVfZm9ybSIJCUAxMDkJO05PTkFNRQ0KKwkic2V0X2Zvcm1fZmllbGRzIiBAMTEwCTtOT05BTUUNCisJImZpZWxkX2NvdW50IgkJQDExMQk7Tk9OQU1FDQorCSJzZXRfZm9ybV93aW4iCQlAMTEyCTtOT05BTUUNCisJInNldF9mb3JtX3N1YiIJCUAxMTMJO05PTkFNRQ0KKwkic2V0X2N1cnJlbnRfZmllbGQiCUAxMTQJO05PTkFNRQ0KKwkiZmllbGRfaW5kZXgiCQlAMTE1CTtOT05BTUUNCisJInNldF9mb3JtX3BhZ2UiCQlAMTE2CTtOT05BTUUNCisJImZvcm1fcGFnZSIJCUAxMTcJO05PTkFNRQ0KKwkic2NhbGVfZm9ybSIJCUAxMTgJO05PTkFNRQ0KKwkic2V0X2Zvcm1faW5pdCIJCUAxMTkJO05PTkFNRQ0KKwkic2V0X2Zvcm1fdGVybSIJCUAxMjAJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX2luaXQiCUAxMjEJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX3Rlcm0iCUAxMjIJO05PTkFNRQ0KKwkicG9zdF9mb3JtIgkJQDEyMwk7Tk9OQU1FDQorCSJ1bnBvc3RfZm9ybSIJCUAxMjQJO05PTkFNRQ0KKwkicG9zX2Zvcm1fY3Vyc29yIiAJQDEyNQk7Tk9OQU1FDQorCSJmb3JtX2RyaXZlciIJCUAxMjYJO05PTkFNRQ0KKwkic2V0X2Zvcm1fdXNlcnB0ciIJQDEyNwk7Tk9OQU1FDQorCSJzZXRfZm9ybV9vcHRzIgkJQDEyOAk7Tk9OQU1FDQorCSJmb3JtX29wdHNfb24iCQlAMTI5CTtOT05BTUUNCisJImZvcm1fb3B0c19vZmYiCQlAMTMwCTtOT05BTUUNCisNCisJImZvcm1fdXNlcnB0ciIJCUAxMzEJO05PTkFNRQ0KKw0KKwkiZm9ybV9vcHRzIgkJQDEzMgk7Tk9OQU1FDQorDQorCSJkYXRhX2FoZWFkIgkJQDEzMwk7Tk9OQU1FDQorCSJkYXRhX2JlaGluZCIJCUAxMzQJO05PTkFNRQ0KZGlmZiAtLWdpdCBhL21pc2MvZ2VuX2VkaXQuc2ggYi9taXNjL2dlbl9lZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwYWE3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2dlbl9lZGl0LnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgJElkOiBnZW5fZWRpdC5zaCx2IDEuMSAyMDA0LzA3LzExIDE1OjAxOjI5IHRvbSBFeHAgJAorIyBHZW5lcmF0ZSBhIHNlZC1zY3JpcHQgZm9yIGNvbnZlcnRpbmcgdGhlIHRlcm1pbmZvLnNyYyB0byB0aGUgZm9ybSB3aGljaCB3aWxsCisjIGJlIGluc3RhbGxlZC4KKyMKKyMgQXNzdW1lczoKKyMJVGhlIGxlYWYgZGlyZWN0b3J5IG5hbWVzIChsaWIsIHRhYnNldCwgdGVybWluZm8pCisjCisKKzogJHt0aWNkaXI9QFRFUk1JTkZPQH0KKzogJHt4dGVybV9uZXc9QFdISUNIX1hURVJNQH0KKworIyBJZiB3ZSdyZSBub3QgaW5zdGFsbGluZyBpbnRvIC91c3Ivc2hhcmUvLCB3ZSdsbCBoYXZlIHRvIGFkanVzdCB0aGUgbG9jYXRpb24KKyMgb2YgdGhlIHRhYnNldCBmaWxlcyBpbiB0ZXJtaW5mby5zcmMgKHdoaWNoIGFyZSBpbiBhIHBhcmFsbGVsIGRpcmVjdG9yeSkuCitUQUJTRVQ9YGVjaG8gJHRpY2RpciB8IHNlZCAtZSAncyUvdGVybWluZm8kJS90YWJzZXQlJ2AKK2lmIHRlc3QgIngkVEFCU0VUIiAhPSAieC91c3Ivc2hhcmUvdGFic2V0IiA7IHRoZW4KK2NhdCA8PEVPRgorcyUvdXNyL3NoYXJlL3RhYnNldCUkVEFCU0VUJWcKK0VPRgorZmkKKworaWYgdGVzdCAiJHh0ZXJtX25ldyIgIT0gInh0ZXJtLW5ldyIgOyB0aGVuCitjYXQgPDxFT0YKKy9eIyBUaGlzIGlzIHh0ZXJtIGZvciBuY3Vyc2VzLywvXiQveworCXMvdXNlPXh0ZXJtLW5ldywvdXNlPSRXSElDSF9YVEVSTSwvCit9CitFT0YKK2ZpCmRpZmYgLS1naXQgYS9taXNjL2pwZi1pbmRlbnQgYi9taXNjL2pwZi1pbmRlbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2RkODI1YwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvanBmLWluZGVudApAQCAtMCwwICsxLDExOSBAQAorIyEvYmluL3NoCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsMjAwNiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorIyogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyMqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisjKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorIyogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyMqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisjKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorIyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisjKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorIyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisjKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorIyogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyMqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisjKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorIyogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyMqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyMqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisjKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorIyogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIyAkSWQ6IGpwZi1pbmRlbnQsdiAxLjYgMjAwNi8wMi8xOCAxNzowNzoxNSB0b20gRXhwICQKKyMgaW5kZW50IG5jdXJzZXMgc291cmNlIHdyaXR0ZW4gYnkgSnVlcmdlbiBQZmVpZmVyCitOT09QPW5vCitPUFRTPScKKy1ucHJvCistLWJsYW5rLWxpbmVzLWFmdGVyLWRlY2xhcmF0aW9ucworLS1ibGFuay1saW5lcy1hZnRlci1wcm9jZWR1cmVzCistLWJyYWNlLWluZGVudDIKKy0tYnJhY2VzLWFmdGVyLWlmLWxpbmUKKy0tY29udGludWUtYXQtcGFyZW50aGVzZXMKKy0taW5kZW50LWxldmVsMgorLS1saW5lLWxlbmd0aDgwCistLW5vLXNwYWNlLWFmdGVyLWNhc3RzCistLW5vLXNwYWNlLWFmdGVyLWZ1bmN0aW9uLWNhbGwtbmFtZXMKKy0tcGFyYW1ldGVyLWluZGVudGF0aW9uNAorLS1zd2FsbG93LW9wdGlvbmFsLWJsYW5rLWxpbmVzCistLXRhYi1zaXplOAorCistVCBGSUVMRAorLVQgRklFTERUWVBFCistVCBGSUVMRF9DRUxMCistVCBGT1JNCistVCBOQ1VSU0VTX0lOTElORQorLVQgUmVnRXhwX0FyZyAKKy1UIFR5cGVBcmd1bWVudCAKKy1UIFdJTkRPVworLVQgYXR0cl90CistVCBib29sCistVCBjY2hhcl90CistVCBjaHR5cGUKKy1UIGVudW1BUkcKKy1UIHZhX2xpc3QKKy1UIHdjaGFyX3QgCisnCitmb3IgbmFtZSBpbiAkKgorZG8KKwljYXNlICRuYW1lIGluCisJLXZ8LW4pCisJCU5PT1A9eWVzCisJCU9QVFM9IiRPUFRTIC12IgorCQk7OworCS0qKQorCQlPUFRTPSIkT1BUUyAkbmFtZSIKKwkJOzsKKwkqLltjaF0pCisJCXNhdmU9IiR7bmFtZX0iLmEkJAorCQl0ZXN0PSIke25hbWV9Ii5iJCQKKwkJcm0gLWYgIiRzYXZlIiAiJHRlc3QiCisJCW12ICIkbmFtZSIgIiRzYXZlIgorCQlzZWQgXAorCQkJLWUgJy9NT0RVTEVfSUQoL3MvKSQvKTsvJyBcCisJCQktZSAncyxcPEdDQ19OT1JFVFVSTjssOy8vR0NDX05PUkVUVVJOOywnIFwKKwkJCS1lICdzLFw8R0NDX1BSSU5URkxJS0UoLDsvL0dDQ19QUklOVEZMSUtFKCwnIFwKKwkJCS1lICdzLFw8R0NDX1NDQU5GTElLRSgsOy8vR0NDX1NDQU5GTElLRSgsJyBcCisJCQktZSAncyxcKFw8TkNVUlNFU19FWFBPUlRfVkFSXD5cKSwvL1wxLCcgXAorCQkJIiRzYXZlIiA+IiR0ZXN0IgorCQljcCAiJHRlc3QiICIkbmFtZSIKKwkJY2htb2QgdSt3ICIkbmFtZSIKKwkJIyAke0lOREVOVF9QUk9HLWluZGVudH0gLS12ZXJzaW9uCisJCSR7SU5ERU5UX1BST0ctaW5kZW50fSAtbnBybyAkT1BUUyAiJG5hbWUiCisJCXNlZCBcCisJCQktZSAnL01PRFVMRV9JRCgvcy8pOyQvKS8nIFwKKwkJCS1lICdzLDtbIAldKi8vR0NDX05PUkVUVVJOOywgR0NDX05PUkVUVVJOOywnIFwKKwkJCS1lICdzLDtbIAldKi8vR0NDX1BSSU5URkxJS0UoLCBHQ0NfUFJJTlRGTElLRSgsJyBcCisJCQktZSAncyw7WyAJXSovL0dDQ19TQ0FORkxJS0UoLCBHQ0NfU0NBTkZMSUtFKCwnIFwKKwkJCS1lICdzLC8vXChcPE5DVVJTRVNfRVhQT1JUX1ZBUlw+XCksXDEsJyBcCisJCQkiJG5hbWUiID4iJHRlc3QiCisJCW12ICIkdGVzdCIgIiRuYW1lIgorCQlybSAtZiAiJHtuYW1lfX4iCisJCWlmIHRlc3QgJE5PT1AgPSB5ZXMgOyB0aGVuCisJCQlpZiAoY21wIC1zICIkbmFtZSIgIiRzYXZlIiApIHRoZW4KKwkJCQllY2hvICIqKiBubyBjaGFuZ2U6ICRuYW1lIgorCQkJZWxzZQorCQkJCWRpZmYgLXUgIiRzYXZlIiAiJG5hbWUiCisJCQlmaQorCQkJcm0gLWYgIiRuYW1lIgorCQkJbXYgIiRzYXZlIiAiJG5hbWUiCisJCWVsaWYgKCBjbXAgLXMgIiRuYW1lIiAiJHNhdmUiICkgOyB0aGVuCisJCQllY2hvICIqKiB1bmNoYW5nZWQgJG5hbWUiCisJCQlybSAtZiAiJHtuYW1lfSIKKwkJCW12ICIkc2F2ZSIgIiRuYW1lIgorCQllbHNlCisJCQllY2hvICIqKiB1cGRhdGVkICRuYW1lIgorCQkJcm0gLWYgIiRzYXZlIgorCQlmaQorCQk7OworCSopCisJCWVjaG8gIioqIGlnbm9yZWQ6ICAgJG5hbWUiCisJCTs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvbWlzYy9tYWtlZGVmLmNtZCBiL21pc2MvbWFrZWRlZi5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhMzU2OQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWFrZWRlZi5jbWQKQEAgLTAsMCArMSwxNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqDQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoNCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKg0KKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqDQorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoNCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKg0KKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKg0KKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKg0KKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqDQorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoNCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKg0KKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqDQorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoNCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoNCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKg0KKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqDQorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKg0KKyAqICRJZDogbWFrZWRlZi5jbWQsdiAxLjUgMjAwNi8wNC8yMiAyMzoxNDo1MCB0b20gRXhwICQNCisgKg0KKyAqIEF1dGhvcjogIEp1YW4gSm9zZSBHYXJjaWEgUmlwb2xsIDx3b3JtQGFycmFraXMuZXM+Lg0KKyAqIFdlYnBhZ2U6IGh0dHA6Ly93d3cuYXJyYWtpcy5lcy9+d29ybS8NCisgKg0KKyAqIG1ha2VkZWYuY21kIC0gdXBkYXRlIGEgRExMIGV4cG9ydCBsaXN0IHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsaWJyYXJ5IGZpbGUNCisgKgkJIGluIGEub3V0IGZvcm1hdCwgcGx1cyBhbiBvbGQgLkRFRiBmaWxlLg0KKyAqDQorICogc3RhbmRhcmQgb3V0cHV0IGdldHMgYSBzb3J0ZWQgbGlzdCB3aXRoIGFsbCBlbnRyeXBvaW50cyB3aXRoIGVudHJ5Y29kZXMuDQorICogVGhpcyBsaXN0LCBwbHVzIGEgZmV3IC5kZWYgc2VudGVuY2VzIChMSUJSQVJZLCBERVNDUklQVElPTiBhbmQgRVhQT1JUKQ0KKyAqIGlzIHVzZWQgdG8gYnVpbGQgYSBuZXcgLmRlZiBmaWxlLg0KKyAqDQorICogYF9uY18qJyBzeW1ib2xzIGFyZSBpZ25vcmVkLg0KKyAqDQorICogcmV0dXJucyAxIHdoZW4gdGhlIG9sZCBkZWZfZmlsZSBpcyBjb3JydXB0ZWQgLS0gdGhhdCBpcywgZXhwb3J0IGl0ZW1zIGFyZQ0KKyAqIG5vdCBwcm9wZXJseSBmb3JtYXR0ZWQuDQorICoNCisgKiByZXR1cm5zIDAgaWYgZXZlcnl0aGluZyB3ZW50IE9LLg0KKyAqLw0KKw0KK3BhcnNlIGFyZyBsaWJfZmlsZSBkZWZfZmlsZQ0KKw0KK2xpYl9maWxlID0gdHJhbnNsYXRlKGxpYl9maWxlLCdcJywnLycpDQorZGVmX2ZpbGUgPSB0cmFuc2xhdGUoZGVmX2ZpbGUsJ1wnLCcvJykNCisNCitjYWxsIENsZWFuUXVldWUNCisNCisvKg0KKyAqIGBjb2RlcycgaXMgdGhlIHN0ZW0gdGhhdCBsaW5rcyBhIGNvZGUgdG8gZXZlcnkgc3ltYm9sDQorICogYG5hbWVzJyBpcyB0aGUgc3RlbSB3aGVyZSBzeW1ib2xzIGFyZSBzdG9yZWQgc2VxdWVudGlhbGx5DQorICogYGxhc3QnIGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzeW1ib2wgZGVmaW5lZA0KKyAqLw0KK2xhc3QgICA9IDANCit1c2VkLiAgPSAwDQorY29kZXMuID0gMA0KK25hbWVzLiA9ICcnDQorDQordG1wX25hbWUgPSAnZm9vLnRtcCcNCisNCisvKg0KKyAqIFRoaXMgc2VkIGV4cHJlc3Npb24gY2xlYW5zIGVtcHR5IGxpbmVzLCBjb21tZW50cyBhbmQgc3BlY2lhbCAuREVGDQorICogY29tbWFuZHMsIHN1Y2ggYXMgTElCUkFSWS4uLiwgRVhQT1JUUy4uLiwgZXRjDQorICovDQordGlkeV91cCAgPSAnIi9eW0EtWl0vZDtzL1sgCV1bIAldKi8gL2c7cy87LiokLy9nO3MvXlsgXSovL2c7L15bIF0qJC9kIicNCisNCisvKg0KKyAqIEZpcnN0IHdlIGZpbmQgYWxsIHB1YmxpYyBzeW1ib2xzIChmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcykuIE5leHQgd2UNCisgKiBjb25jYXRlbmF0ZSB0aGlzIGxpc3Qgd2l0aCB0aGUgb2xkIG9uZSwgc29ydGluZyBpdCBhbmQgd2lwaW5nIG91dA0KKyAqIGFsbCB1bnVzZWQgZGF0YSAoY29tbWVudHMsIERMTCBkaXJlY3RpdmVzLCBibGFua3MsIGV0YykuIEFsbCB0aGlzDQorICogaW5mb3JtYXRpb24gaXMgcHVzaGVkIGludG8gYSBSRVhYIHByaXZhdGUgbGlzdCB3aXRoIHRoZSBSWFFVRVVFDQorICogdXRpbGl0eSBwcm9ncmFtLg0KKyAqLw0KKydAZWNobyBvZmYnDQorJ2VteGV4cCAtdScgbGliX2ZpbGUgJz4nIHRtcF9uYW1lDQorJ2NhdCcgdG1wX25hbWUgZGVmX2ZpbGUgJ3wgc2VkJyB0aWR5X3VwICd8IHNvcnQgPiBmb28yLnRtcCcNCisndHlwZSBmb28yLnRtcCB8IHJ4cXVldWUnDQorJ2RlbCcgdG1wX25hbWUgJzE+TlVMJw0KKw0KKy8qDQorICogVGhpcyBsb29wIHJ1bnMgb3ZlciB0aGUgcXVldWUgaXRlbXMNCisgKi8NCitkbyB3aGlsZSBxdWV1ZWQoKSA+IDANCisgICAvKg0KKyAgICAqIFdlIHJldHJpZXZlIHRoZSBzeW1ib2wgbmFtZSAoTkVXX05BTUUpIGFuZCBpdHMgbnVtYmVyIChORVdfTlVNQkVSKQ0KKyAgICAqIFdoZW4gdGhlIGxpbmUgY29tZXMgZnJvbSBgZW14aW1wJ3Mgb3V0cHV0LCB0aGVyZSdzIG5vIG51bWJlciwgc28NCisgICAgKiB3ZSBhc3NpZ24gaXQgdGhlIHNwZWNpYWwgdmFsdWUgMC4NCisgICAgKi8NCisgICBwYXJzZSBwdWxsIG5ld19zeW1ib2wgJ0AnbmV3X2NvZGUgcmVzdA0KKyAgIGlmIExlZnQobmV3X3N5bWJvbCwxKSA9ICciJyB0aGVuDQorICAgICAgcGFyc2UgdmFyIG5ld19zeW1ib2wgJyInIG5ld19uYW1lICciJyByZXN0DQorICAgZWxzZQ0KKyAgICAgIGRvDQorICAgICAgZWNobyAnU3ltYm9sICduZXdfc3ltYm9sJyB3YXMgbm90IHF1b3RlZCcNCisgICAgICBuZXdfbmFtZSA9IG5ld19zeW1ib2wNCisgICAgICBlbmQNCisNCisgICBpZiBuZXdfY29kZSA9ICcnIHRoZW4NCisgICAgICBuZXdfY29kZSA9IDANCisgICAvKg0KKyAgICAqIEhlcmUsIG9uZSB3b3VsZCBwbGFjZSBhbGwgc21hcnQgY2hlY2tzIHRoYXQgd291bGQga2lsbCB1bnVzZWQgc3ltYm9scy4NCisgICAgKiBIb3dldmVyLCBleHBvcnQgdGFibGVzIGFyZSBub3QgdGhhdCBiaWcsIHNvIHdoeSBib3RoZXJpbmc/DQorICAgaWYgTGVmdChuZXdfbmFtZSw0KSA9ICdfbmNfJyB0aGVuDQorICAgICAgaXRlcmF0ZQ0KKyAgICAqLw0KKyAgIC8qDQorICAgICogVGhlIGFsZ29yaXRobToNCisgICAgKglJRiAodGhpcyBpcyB0aGUgMm5kIHRpbWUgdGhlIHN5bWJvbCBhcHBlYXJzKSBUSEVODQorICAgICoJCSh0aGlzIHN5bWJvbCBjb21lcyBmcm9tIGEgLkRFRiBmaWxlKQ0KKyAgICAqCQlpdCBoYXMgYSB2YWxpZCBjb2RlIHRoYXQgd2Ugc3RvcmUNCisgICAgKgkJd2UgbWFyayB0aGF0IGNvZGUgYXMgdXNlZA0KKyAgICAqICAgRUxJRiAoaXQgaGFzIG5vIG51bWJlcikgVEhFTg0KKyAgICAqCQkoaXQncyBhIG5ldyBzeW1ib2wpDQorICAgICoJCXdlIGluY3JlYXNlIHRoZSBjb3VudGVyIG9mIGRlZmluZWQgc3ltYm9scw0KKyAgICAqCQl3ZSBhc3NpZ24gaXQgdGhlIHNwZWNpYWwgbnVtYmVyIDANCisgICAgKgkJKGxhdGVyIG9uIGl0J2xsIGJlIGFzc2lnbmVkIGFuIHVudXNlZCBleHBvcnQgY29kZSkNCisgICAgKiAgIEVMU0UNCisgICAgKgkJdGhpcyBzeW1ib2wgd2FzIGluIHRoZSBvbGQgRExMIGFuZCBpdCdzIG5vIGxvbmdlcg0KKyAgICAqCQloZXJlLCBzbyB3ZSBza2lwIGl0Lg0KKyAgICAqLw0KKyAgIHNlbGVjdA0KKyAgICAgIHdoZW4gbmV3X25hbWUgPSAnJyB0aGVuDQorICAgICAgICAgJ2VjaG8gV2FybmluZzogZW1wdHkgc3ltYm9sIGZvdW5kIDE+JjInDQorICAgICAgd2hlbiBuYW1lcy5sYXN0ID0gbmV3X25hbWUgdGhlbg0KKyAgICAgICAgIGRvDQorICAgICAgICAgY29kZXMubGFzdCA9IG5ld19jb2RlDQorICAgICAgICAgdXNlZC5uZXdfY29kZSA9IDENCisgICAgICAgICBlbmQNCisgICAgICB3aGVuIG5ld19jb2RlID0gMCB0aGVuDQorICAgICAgICAgZG8NCisgICAgICAgICBsYXN0ID0gbGFzdCArIDENCisgICAgICAgICBuYW1lcy5sYXN0ID0gbmV3X25hbWUNCisgICAgICAgICBjb2Rlcy5sYXN0ID0gMA0KKyAgICAgICAgIGVuZA0KKyAgIG90aGVyd2lzZQ0KKyAgICAgICdlY2hvIFdhcm5pbmc6IHN5bWJvbCAiJ25ld19uYW1lJyIgaGFzIGRpc2FwcGVhcmVkIDE+JjInDQorICAgZW5kIC8qIHNlbGVjdCAqLw0KK2VuZCAvKiBkbyB3aGlsZSBxdWV1ZWQoKSAqLw0KKw0KKy8qDQorICogRmluYWxseSB3ZSBzY2FuIHRoZSBzdGVtLCB3cml0aW5nIG91dCBhbGwgc3ltYm9scyB3aXRoIGV4cG9ydCBjb2Rlcy4NCisgKiBUaG9zZSB0aGF0IGRpZCBub3QgaGF2ZSBhIHZhbGlkIG9uZSAoanVzdCAwKSBhcmUgYXNzaWduZWQgYSBuZXcgb25lLg0KKyAqLw0KK25ld19jb2RlID0gMQ0KK2lueCA9IDENCitkbyB3aGlsZSBpbnggPD0gbGFzdA0KKyAgIGlmIGNvZGVzLmlueCA9IDAgdGhlbg0KKyAgICAgIGRvDQorICAgICAgZG8gd2hpbGUgdXNlZC5uZXdfY29kZSBcPSAwDQorICAgICAgICAgbmV3X2NvZGUgPSBuZXdfY29kZSArIDENCisgICAgICBlbmQNCisgICAgICBjb2Rlcy5pbnggPSBuZXdfY29kZQ0KKyAgICAgIHVzZWQubmV3X2NvZGUgPSAxDQorICAgICAgZW5kDQorICAgc2F5ICcJIiduYW1lcy5pbngnIglAJ2NvZGVzLmlueCcJTk9OQU1FJw0KKyAgIGlueCA9IGlueCArIDENCitlbmQNCisnZGVsIGZvbzIudG1wIDE+TlVMJw0KK2V4aXQgMA0KKw0KKy8qDQorICogQ2xlYW5zIHRoZSBSRVhYIHF1ZXVlIGJ5IHB1bGxpbmcgYW5kIGZvcmdldHRpbmcgZXZlcnkgbGluZS4NCisgKiBUaGlzIGlzIG5lZWRlZCwgYXQgbGVhc3QsIHdoZW4gYG1ha2VkZWYuY21kJyBzdGFydHMsIGJlY2F1c2UgYW4gYWJvcnRlZA0KKyAqIFJFWFggcHJvZ3JhbSBtaWdodCBoYXZlIGxlZnQgc29tZSBydWJiaXNoIGluLg0KKyAqLw0KK0NsZWFuUXVldWU6IHByb2NlZHVyZQ0KKyAgIGRvIHdoaWxlIHF1ZXVlZCgpID4gMA0KKyAgICAgIHBhcnNlIHB1bGwgZm9vDQorICAgZW5kDQorcmV0dXJuDQorDQpkaWZmIC0tZ2l0IGEvbWlzYy9tYWtlbGxpYiBiL21pc2MvbWFrZWxsaWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDQ2MDQwNwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWFrZWxsaWIKQEAgLTAsMCArMSwxNjcgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NiwxOTk3LDIwMDAKKyMKKyMgJElkOiBtYWtlbGxpYix2IDEuOCAyMDAwLzEwLzI4IDIxOjM3OjEwIHRvbSBFeHAgJAorIyBTeXN0ZW0tZGVwZW5kZW50IHdyYXBwZXIgZm9yICdsaW50JyB0aGF0IGNyZWF0ZXMgYSBsaW50LWxpYnJhcnkgdmlhIHRoZQorIyBmb2xsb3dpbmcgbWV0aG9kIChYWFggaXMgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkpOgorIwlhLiAgSWYgdGhlIGZpbGUgbGxpYi1sWFhYIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdCB1c2luZyB0aGUgbWFrZS1ydWxlCisjCWIuICBQcm9jZXNzIGxsaWItbFhYWCB3aXRoIHRoZSBzeXN0ZW0ncyBsaW50IHV0aWxpdHksIG1ha2luZworIwkgICAgbGxpYi1sWFhYLmxuCisjCWMuICBJbnN0YWxsIGxsaWItbFhYWC5sbiBpbiB0aGUgbGliIGRpcmVjdG9yeS4KKyMKKyMgVXNpbmcgdGhlIGludGVybWVkaWF0ZSBmaWxlIGxsaWItbFhYWCBieXBhc3NlcyBhIHdlYWtuZXNzIG9mIGxpbnQgKHBhc3NpbmcKKyMgdGhyb3VnaCB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZS1maWxlcykuCisjCisjIFRoZXJlIGFyZSB0d28gZHJhd2JhY2tzIHRvIHRoaXMgYXBwcm9hY2g6CisjCWEuICBPbiBhIGZldyBzeXN0ZW1zLCB5b3UnbGwgaGF2ZSB0byBtYW51YWxseS1lZGl0IHRoZSBsbGliLWxYWFggZmlsZQorIwkgICAgdG8gZ2V0IGEgdXNhYmxlIGxpbnQtbGlicmFyeSAobm90IGFsbCBDLXByZXByb2Nlc3NvcnMgd29yayB3ZWxsKS4KKyMJYi4gIFRoZSBzeXN0ZW0ncyBsaW50IHV0aWxpdHkgd29uJ3QgcmVjb2duaXplIC1sWFhYIGFzIGEgbGludC1saWJyYXJ5CisjCSAgICAoVXNlIHRkbGludCBhcyBhIHdyYXBwZXI7IGl0J3MgZGVzaWduZWQgZm9yIHRoaXMpLgorIworIyBQYXJhbWV0ZXJzOgorIwkkMSA9IGxpYnJhcnkgbmFtZQorIwkkKiA9IEMtcHJlcHJvY2Vzc29yIG9wdGlvbnMKKyMKK0FSQ0g9YHVuYW1lIC1zYAoraWYgdGVzdCAieCRBUkNIIiA9ICJ4U3VuT1MiIDsgdGhlbgorCWNhc2UgYHVuYW1lIC1yYCBpbgorCTUuKikJQVJDSD1Tb2xhcmlzCisJCTs7CisJZXNhYworZmkKKyMKK0RTVD0iJEhPTUUvbGliLyRBUkNIL2xpbnQiCitPUFQ9IiIKK0xMSUI9IiIKK2xsaWI9IiIKKyMKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICQxIGluCisJLUwqKQorCQlEU1Q9IiREU1QgYGVjaG8gJDF8c2VkIC1lICdzL14tTC8vJ2AiCisJCTs7CisJLSopCisJCU9QVD0iJE9QVCAkMSIKKwkJOzsKKwkqKQorCQlpZiB0ZXN0IC16ICIkTExJQiIKKwkJdGhlbgorCQkJTExJQj0kMQorCQllbHNlCisJCQlsbGliPWxsaWItbCQxCisJCWZpCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2lmIHRlc3QgLXogIiRMTElCIgordGhlbgorCWVjaG8gJz8gbm8gbGlicmFyeSBuYW1lIHNwZWNpZmllZCcKKwlleGl0IDEKK2VsaWYgdGVzdCAteiAiJGxsaWIiCit0aGVuCisJbGxpYj0ibGxpYi1sJExMSUIiCitmaQorCitpZiB0ZXN0ICEgLWYgJGxsaWIgOyB0aGVuCisJaWYgKCBtYWtlICRsbGliICkKKwl0aGVuCisJCToKKwllbHNlCisJCWV4aXQgMQorCWZpCitmaQorCitybSAtZiAkbGxpYi5sbiAkbGxpYi5jCitUQVJHRVQ9JExMSUIKKworY2FzZSAiJEFSQ0giIGluCitBSVgpCisJQ1JFQVRFPSItdXZ4byRMTElCIC1ObjQwMDAiCisJVEFSR0VUPSRsbGliLmMKKwlsbiAkbGxpYiAkVEFSR0VUCisJOzsKK1NvbGFyaXMpCisJQ1JFQVRFPSItQyRsbGliIgorCVRBUkdFVD0kbGxpYi5jCisJbG4gJGxsaWIgJFRBUkdFVAorCTs7CitGcmVlQlNEKQorCUNSRUFURT0iLWcgLXogLUMkTExJQiIKKwlUQVJHRVQ9JGxsaWIuYworCWxuICRsbGliICRUQVJHRVQKKwk7OworQ0xJWCkKKwlDUkVBVEU9Ii1ETElOVExJQlJBUlkgLXZ4byRMTElCIgorCVRBUkdFVD0kbGxpYi5jCisJbG4gJGxsaWIgJFRBUkdFVAorCTs7CitJUklYKikKKwlDUkVBVEU9Ii1ETElOVExJQlJBUlkgLXZ4eW8kTExJQiIKKwlUQVJHRVQ9JGxsaWIuYworCWxuICRsbGliICRUQVJHRVQKKwk7OworVU5JWF9TVikKKwlDUkVBVEU9Ii1ETElOVExJQlJBUlkgLXZ4eW8kTExJQiIKKwlUQVJHRVQ9JGxsaWIuYworCWxuICRsbGliICRUQVJHRVQKKwk7OworKikKKwllY2hvICJTb3JyeS4gIEkgZG8gbm90IGtub3cgaG93IHRvIGJ1aWxkIGEgbGludC1saWJyYXJ5IGZvciAkQVJDSCIKKwlleGl0IDEKK2VzYWMKKworZWNobyBPUFQgICAgIiRPUFQiCitlY2hvIFRBUkdFVCAiJFRBUkdFVCIKK2VjaG8gTElCTkFNRSAiJGxsaWIiCitpZiAoIGxpbnQgJENSRUFURSAkT1BUICRUQVJHRVQgKQordGhlbgorCWlmIHRlc3QgLWYgJGxsaWIubG4KKwl0aGVuCisJCWZvciBwIGluICRIT01FL2xpYiAkSE9NRS9saWIvJEFSQ0ggJEhPTUUvbGliLyRBUkNIL2xpbnQKKwkJZG8KKwkJCWlmIHRlc3QgISAtZCAkcAorCQkJdGhlbgorCQkJCW1rZGlyICRwCisJCQlmaQorCQlkb25lCisJCWZvciBwIGluICREU1QKKwkJZG8KKwkJCWNwICRsbGliLmxuICRwLworCQlkb25lCisJCXJtIC1mICRsbGliLmxuCisJZmkKK2ZpCitpZiB0ZXN0ICJ4JFRBUkdFVCIgPSAieCRsbGliLmMiIDsgdGhlbgorCXJtIC1mICRUQVJHRVQKK2ZpCmRpZmYgLS1naXQgYS9taXNjL21lbnUuZGVmIGIvbWlzYy9tZW51LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWY5NzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9tZW51LmRlZgpAQCAtMCwwICsxLDgxIEBACitMSUJSQVJZIG1lbnU1IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UNCitERVNDUklQVElPTiAiTkN1cnNlcy01LTEtMjAwMDA3MDQsIG1vZHVsZSBtZW51Ig0KK0NPREUgTE9BRE9OQ0FMTA0KK0RBVEEgTE9BRE9OQ0FMTCBOT05TSEFSRUQgTVVMVElQTEUNCitFWFBPUlRTDQorCSJfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aCIJQDExCU5PTkFNRQ0KKwkiX25jX0Nvbm5lY3RfSXRlbXMiCUAzOAlOT05BTUUNCisJIl9uY19EZWZhdWx0X0l0ZW0iCUA2MwlOT05BTUUNCisJIl9uY19EZWZhdWx0X01lbnUiCUA2NAlOT05BTUUNCisJIl9uY19EaXNjb25uZWN0X0l0ZW1zIglANjUJTk9OQU1FDQorCSJfbmNfRHJhd19NZW51IglANjYJTk9OQU1FDQorCSJfbmNfTGlua19JdGVtcyIJQDY3CU5PTkFNRQ0KKwkiX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZSIJQDY4CU5PTkFNRQ0KKwkiX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtIglANjkJTk9OQU1FDQorCSJfbmNfUG9zdF9JdGVtIglANzAJTk9OQU1FDQorCSJfbmNfU2hvd19NZW51IglANzEJTk9OQU1FDQorCSJfbmNfbWVudV9jdXJzb3JfcG9zIglANzIJTk9OQU1FDQorCSJjdXJyZW50X2l0ZW0iCUAyCU5PTkFNRQ0KKwkiZnJlZV9pdGVtIglAMjMJTk9OQU1FDQorCSJmcmVlX21lbnUiCUAyNAlOT05BTUUNCisJIml0ZW1fY291bnQiCUAyNQlOT05BTUUNCisJIml0ZW1fZGVzY3JpcHRpb24iCUAxNAlOT05BTUUNCisJIml0ZW1faW5kZXgiCUAyNglOT05BTUUNCisJIml0ZW1faW5pdCIJQDcJTk9OQU1FDQorCSJpdGVtX25hbWUiCUAxNQlOT05BTUUNCisJIml0ZW1fb3B0cyIJQDUJTk9OQU1FDQorCSJpdGVtX29wdHNfb2ZmIglAMjcJTk9OQU1FDQorCSJpdGVtX29wdHNfb24iCUAyOAlOT05BTUUNCisJIml0ZW1fdGVybSIJQDgJTk9OQU1FDQorCSJpdGVtX3VzZXJwdHIiCUAxOAlOT05BTUUNCisJIml0ZW1fdmFsdWUiCUA2MAlOT05BTUUNCisJIml0ZW1fdmlzaWJsZSIJQDYxCU5PTkFNRQ0KKwkibWVudV9iYWNrIglAMjAJTk9OQU1FDQorCSJtZW51X2RyaXZlciIJQDI5CU5PTkFNRQ0KKwkibWVudV9mb3JlIglAMjEJTk9OQU1FDQorCSJtZW51X2Zvcm1hdCIJQDYyCU5PTkFNRQ0KKwkibWVudV9ncmV5IglAMjIJTk9OQU1FDQorCSJtZW51X2luaXQiCUA5CU5PTkFNRQ0KKwkibWVudV9pdGVtcyIJQDEJTk9OQU1FDQorCSJtZW51X21hcmsiCUAxNglOT05BTUUNCisJIm1lbnVfb3B0cyIJQDYJTk9OQU1FDQorCSJtZW51X29wdHNfb2ZmIglAMzAJTk9OQU1FDQorCSJtZW51X29wdHNfb24iCUAzMQlOT05BTUUNCisJIm1lbnVfcGFkIglAMzIJTk9OQU1FDQorCSJtZW51X3BhdHRlcm4iCUAxNwlOT05BTUUNCisJIm1lbnVfcmVxdWVzdF9ieV9uYW1lIglANzMJTk9OQU1FDQorCSJtZW51X3JlcXVlc3RfbmFtZSIJQDc0CU5PTkFNRQ0KKwkibWVudV9zcGFjaW5nIglANzUJTk9OQU1FDQorCSJtZW51X3N1YiIJQDEyCU5PTkFNRQ0KKwkibWVudV90ZXJtIglAMTAJTk9OQU1FDQorCSJtZW51X3VzZXJwdHIiCUAxOQlOT05BTUUNCisJIm1lbnVfd2luIglAMTMJTk9OQU1FDQorCSJuZXdfaXRlbSIJQDMJTk9OQU1FDQorCSJuZXdfbWVudSIJQDQJTk9OQU1FDQorCSJwb3NfbWVudV9jdXJzb3IiCUAzMwlOT05BTUUNCisJInBvc3RfbWVudSIJQDM0CU5PTkFNRQ0KKwkic2NhbGVfbWVudSIJQDM1CU5PTkFNRQ0KKwkic2V0X2N1cnJlbnRfaXRlbSIJQDM2CU5PTkFNRQ0KKwkic2V0X2l0ZW1faW5pdCIJQDM3CU5PTkFNRQ0KKwkic2V0X2l0ZW1fb3B0cyIJQDM5CU5PTkFNRQ0KKwkic2V0X2l0ZW1fdGVybSIJQDQwCU5PTkFNRQ0KKwkic2V0X2l0ZW1fdXNlcnB0ciIJQDQxCU5PTkFNRQ0KKwkic2V0X2l0ZW1fdmFsdWUiCUA0MglOT05BTUUNCisJInNldF9tZW51X2JhY2siCUA0MwlOT05BTUUNCisJInNldF9tZW51X2ZvcmUiCUA0NAlOT05BTUUNCisJInNldF9tZW51X2Zvcm1hdCIJQDQ1CU5PTkFNRQ0KKwkic2V0X21lbnVfZ3JleSIJQDQ2CU5PTkFNRQ0KKwkic2V0X21lbnVfaW5pdCIJQDQ3CU5PTkFNRQ0KKwkic2V0X21lbnVfaXRlbXMiCUA0OAlOT05BTUUNCisJInNldF9tZW51X21hcmsiCUA0OQlOT05BTUUNCisJInNldF9tZW51X29wdHMiCUA1MAlOT05BTUUNCisJInNldF9tZW51X3BhZCIJQDUxCU5PTkFNRQ0KKwkic2V0X21lbnVfcGF0dGVybiIJQDUyCU5PTkFNRQ0KKwkic2V0X21lbnVfc3BhY2luZyIJQDc2CU5PTkFNRQ0KKwkic2V0X21lbnVfc3ViIglANTMJTk9OQU1FDQorCSJzZXRfbWVudV90ZXJtIglANTQJTk9OQU1FDQorCSJzZXRfbWVudV91c2VycHRyIglANTUJTk9OQU1FDQorCSJzZXRfbWVudV93aW4iCUA1NglOT05BTUUNCisJInNldF90b3Bfcm93IglANTcJTk9OQU1FDQorCSJ0b3Bfcm93IglANTgJTk9OQU1FDQorCSJ1bnBvc3RfbWVudSIJQDU5CU5PTkFNRQ0KZGlmZiAtLWdpdCBhL21pc2MvbWVudS5yZWYgYi9taXNjL21lbnUucmVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTk2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL21lbnUucmVmCkBAIC0wLDAgKzEsNzMgQEAKK0xJQlJBUlkgTUVOVTIgSU5JVElOU1RBTkNFDQorREVTQ1JJUFRJT04gJ05DdXJzZXMgMS45LjllLTEgZm9yIE9TLzIgLSBtZW51IGxpYnJhcnknDQorRVhQT1JUUw0KKwkibWVudV9pdGVtcyIJCUAxCTtOT05BTUUNCisJImN1cnJlbnRfaXRlbSIJCUAyCTtOT05BTUUNCisJIm5ld19pdGVtIgkJQDMJO05PTkFNRQ0KKw0KKwkibmV3X21lbnUiCQlANAk7Tk9OQU1FDQorDQorCSJpdGVtX29wdHMiCQlANQk7Tk9OQU1FDQorCSJtZW51X29wdHMiCQlANgk7Tk9OQU1FDQorDQorCSJpdGVtX2luaXQiCQlANwk7Tk9OQU1FDQorCSJpdGVtX3Rlcm0iCQlAOAk7Tk9OQU1FDQorCSJtZW51X2luaXQiCQlAOQk7Tk9OQU1FDQorCSJtZW51X3Rlcm0iCQlAMTAJO05PTkFNRQ0KKw0KKwkibWVudV9zdWIiCQlAMTIJO05PTkFNRQ0KKwkibWVudV93aW4iCQlAMTMJO05PTkFNRQ0KKw0KKwkiaXRlbV9kZXNjcmlwdGlvbiIJQDE0CTtOT05BTUUNCisJIml0ZW1fbmFtZSIJCUAxNQk7Tk9OQU1FDQorCSJtZW51X21hcmsiCQlAMTYJO05PTkFNRQ0KKwkibWVudV9wYXR0ZXJuIgkJQDE3CTtOT05BTUUNCisNCisJIml0ZW1fdXNlcnB0ciIJCUAxOAk7Tk9OQU1FDQorCSJtZW51X3VzZXJwdHIiCQlAMTkJO05PTkFNRQ0KKw0KKwkibWVudV9iYWNrIgkJQDIwCTtOT05BTUUNCisJIm1lbnVfZm9yZSIJCUAyMQk7Tk9OQU1FDQorCSJtZW51X2dyZXkiCQlAMjIJO05PTkFNRQ0KKw0KKwkiZnJlZV9pdGVtIgkJQDIzCTtOT05BTUUNCisJImZyZWVfbWVudSIJCUAyNAk7Tk9OQU1FDQorCSJpdGVtX2NvdW50IgkJQDI1CTtOT05BTUUNCisJIml0ZW1faW5kZXgiCQlAMjYJO05PTkFNRQ0KKwkiaXRlbV9vcHRzX29mZiIJCUAyNwk7Tk9OQU1FDQorCSJpdGVtX29wdHNfb24iCQlAMjgJO05PTkFNRQ0KKwkibWVudV9kcml2ZXIiCQlAMjkJO05PTkFNRQ0KKwkibWVudV9vcHRzX29mZiIJCUAzMAk7Tk9OQU1FDQorCSJtZW51X29wdHNfb24iCQlAMzEJO05PTkFNRQ0KKwkibWVudV9wYWQiCQlAMzIJO05PTkFNRQ0KKwkicG9zX21lbnVfY3Vyc29yIiAJQDMzCTtOT05BTUUNCisJInBvc3RfbWVudSIJCUAzNAk7Tk9OQU1FDQorCSJzY2FsZV9tZW51IgkJQDM1CTtOT05BTUUNCisJInNldF9jdXJyZW50X2l0ZW0iCUAzNgk7Tk9OQU1FDQorCSJzZXRfaXRlbV9pbml0IgkJQDM3CTtOT05BTUUNCisJInNldF9pdGVtX29wdHMiCQlAMzkJO05PTkFNRQ0KKwkic2V0X2l0ZW1fdGVybSIJCUA0MAk7Tk9OQU1FDQorCSJzZXRfaXRlbV91c2VycHRyIglANDEJO05PTkFNRQ0KKwkic2V0X2l0ZW1fdmFsdWUiCUA0Mgk7Tk9OQU1FDQorCSJzZXRfbWVudV9iYWNrIgkJQDQzCTtOT05BTUUNCisJInNldF9tZW51X2ZvcmUiCQlANDQJO05PTkFNRQ0KKwkic2V0X21lbnVfZm9ybWF0IiAJQDQ1CTtOT05BTUUNCisJInNldF9tZW51X2dyZXkiCQlANDYJO05PTkFNRQ0KKwkic2V0X21lbnVfaW5pdCIJCUA0Nwk7Tk9OQU1FDQorCSJzZXRfbWVudV9pdGVtcyIJQDQ4CTtOT05BTUUNCisJInNldF9tZW51X21hcmsiCQlANDkJO05PTkFNRQ0KKwkic2V0X21lbnVfb3B0cyIJCUA1MAk7Tk9OQU1FDQorCSJzZXRfbWVudV9wYWQiCQlANTEJO05PTkFNRQ0KKwkic2V0X21lbnVfcGF0dGVybiIJQDUyCTtOT05BTUUNCisJInNldF9tZW51X3N1YiIJCUA1Mwk7Tk9OQU1FDQorCSJzZXRfbWVudV90ZXJtIgkJQDU0CTtOT05BTUUNCisJInNldF9tZW51X3VzZXJwdHIiCUA1NQk7Tk9OQU1FDQorCSJzZXRfbWVudV93aW4iCQlANTYJO05PTkFNRQ0KKwkic2V0X3RvcF9yb3ciCQlANTcJO05PTkFNRQ0KKwkidG9wX3JvdyIgCQlANTgJO05PTkFNRQ0KKwkidW5wb3N0X21lbnUiCQlANTkJO05PTkFNRQ0KKw0KKwkiaXRlbV92YWx1ZSIJCUA2MAk7Tk9OQU1FDQorCSJpdGVtX3Zpc2libGUiCQlANjEJO05PTkFNRQ0KKw0KKwkibWVudV9mb3JtYXQiCQlANjIJO05PTkFNRQ0KZGlmZiAtLWdpdCBhL21pc2MvbmN1LWluZGVudCBiL21pc2MvbmN1LWluZGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NjJhMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9uY3UtaW5kZW50CkBAIC0wLDAgKzEsMTMyIEBACisjIS9iaW4vc2gKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiwyMDA4IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisjKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorIyogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyMqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisjKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorIyogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyMqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyMqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyMqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisjKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorIyogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyMqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisjKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorIyogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorIyogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyMqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisjKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjICRJZDogbmN1LWluZGVudCx2IDEuMTcgMjAwOC8wOC8wMyAxNTo0Njo0NCB0b20gRXhwICQKK05PT1A9bm8KK09QVFM9JworLS1ibGFuay1saW5lcy1hZnRlci1wcm9jZWR1cmVzCistLWJyYWNlcy1vbi1pZi1saW5lCistLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbjAKKy0tY29udGludWUtYXQtcGFyZW50aGVzZXMKKy0tY3VkZGxlLWVsc2UKKy0taW5kZW50LWxldmVsNAorLS1sZWF2ZS1wcmVwcm9jZXNzb3Itc3BhY2UKKy0tbm8tYmxhbmstbGluZXMtYWZ0ZXItY29tbWFzCistLW5vLWJsYW5rLWxpbmVzLWFmdGVyLWRlY2xhcmF0aW9ucworLS1uby1zcGFjZS1hZnRlci1mdW5jdGlvbi1jYWxsLW5hbWVzCistLXByb2NuYW1lcy1zdGFydC1saW5lcworLS1zcGFjZS1zcGVjaWFsLXNlbWljb2xvbgorLS1zd2FsbG93LW9wdGlvbmFsLWJsYW5rLWxpbmVzCistLXRhYi1zaXplOAorCistVCBOQ1VSU0VTX0VYUE9SVF9WQVIKKy1UIE5DVVJTRVNfSU5MSU5FCistVCBTQ1JFRU4KKy1UIFRFUk1UWVBFCistVCBhdHRyX3QKKy1UIGNjaGFyX3QKKy1UIGNodHlwZQorLVQgaW5saW5lCistVCB3Y2hhcl90CistVCB3aW50X3QKKworLVQgQlVGRkVSCistVCBDSEFSVFlQRQorLVQgRklMRQorLVQgR0NDX05PUkVUVVJOCistVCBMSU5FCistVCBNQVJLCistVCBSRVRTSUdUWVBFIAorLVQgVEJVRkYKKy1UIFdJTkRPVworLVQgc2l6ZV90CistVCB2YV9saXN0CisKKy1UIENhcmRpbmFsCistVCBXaWRnZXQKKy1UIFh0UG9pbnRlcgorJworZm9yIG5hbWUgaW4gJCoKK2RvCisJY2FzZSAkbmFtZSBpbgorCS12fC1uKQorCQlOT09QPXllcworCQlPUFRTPSIkT1BUUyAtdiIKKwkJOzsKKwktKikKKwkJT1BUUz0iJE9QVFMgJG5hbWUiCisJCTs7CisJKi5bY2hdfCouY2N8Ki5jcHApCisJCXNhdmU9IiR7bmFtZX0iLmEkJAorCQl0ZXN0PSIke25hbWV9Ii5iJCQKKwkJcm0gLWYgIiRzYXZlIiAiJHRlc3QiCisJCW12ICIkbmFtZSIgIiRzYXZlIgorCQlzZWQgXAorCQkJLWUgJy9FTVBUWV9NT0RVTEUoL3MvKSQvKTsvJyBcCisJCQktZSAnL01PRFVMRV9JRCgvcy8pJC8pOy8nIFwKKwkJCS1lICdzLFw8R0NDX05PUkVUVVJOOyw7Ly9HQ0NfTk9SRVRVUk47LCcgXAorCQkJLWUgJ3MsXDxHQ0NfUFJJTlRGTElLRSgsOy8vR0NDX1BSSU5URkxJS0UoLCcgXAorCQkJLWUgJ3MsXDxHQ0NfU0NBTkZMSUtFKCw7Ly9HQ0NfU0NBTkZMSUtFKCwnIFwKKwkJCS1lICdzLFwoXDxOQ1VSU0VTX0VYUE9SVF9WQVJcPlwpLC8vXDEsJyBcCisJCQkiJHNhdmUiID4iJHRlc3QiCisJCWNwICIkdGVzdCIgIiRuYW1lIgorCQljaG1vZCB1K3cgIiRuYW1lIgorCQkjICR7SU5ERU5UX1BST0ctaW5kZW50fSAtLXZlcnNpb24KKwkJJHtJTkRFTlRfUFJPRy1pbmRlbnR9IC1ucHJvICRPUFRTICIkbmFtZSIKKwkJc2VkIFwKKwkJCS1lICcvRU1QVFlfTU9EVUxFKC9zLyk7JC8pLycgXAorCQkJLWUgJy9NT0RVTEVfSUQoL3MvKTskLykvJyBcCisJCQktZSAncyw7WyAJXSovL0dDQ19OT1JFVFVSTjssIEdDQ19OT1JFVFVSTjssJyBcCisJCQktZSAncyw7WyAJXSovL0dDQ19QUklOVEZMSUtFKCwgR0NDX1BSSU5URkxJS0UoLCcgXAorCQkJLWUgJ3MsO1sgCV0qLy9HQ0NfU0NBTkZMSUtFKCwgR0NDX1NDQU5GTElLRSgsJyBcCisJCQktZSAncywvL1woXDxOQ1VSU0VTX0VYUE9SVF9WQVJcPlwpLFwxLCcgXAorCQkJIiRuYW1lIiA+IiR0ZXN0IgorCQltdiAiJHRlc3QiICIkbmFtZSIKKwkJcm0gLWYgIiR7bmFtZX1+IgorCQlpZiB0ZXN0ICROT09QID0geWVzIDsgdGhlbgorCQkJaWYgKGNtcCAtcyAiJG5hbWUiICIkc2F2ZSIgKSB0aGVuCisJCQkJZWNobyAiKiogbm8gY2hhbmdlOiAkbmFtZSIKKwkJCWVsc2UKKwkJCQlkaWZmIC11ICIkc2F2ZSIgIiRuYW1lIgorCQkJZmkKKwkJCXJtIC1mICIkbmFtZSIKKwkJCW12ICIkc2F2ZSIgIiRuYW1lIgorCQllbGlmICggY21wIC1zICIkbmFtZSIgIiRzYXZlIiApIDsgdGhlbgorCQkJZWNobyAiKiogdW5jaGFuZ2VkICRuYW1lIgorCQkJcm0gLWYgIiR7bmFtZX0iCisJCQltdiAiJHNhdmUiICIkbmFtZSIKKwkJZWxzZQorCQkJZWNobyAiKiogdXBkYXRlZCAkbmFtZSIKKwkJCXJtIC1mICIkc2F2ZSIKKwkJZmkKKwkJOzsKKwkqKQorCQllY2hvICIqKiBpZ25vcmVkOiAgICRuYW1lIgorCQk7OworCWVzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL21pc2MvbmN1cnNlcy1jb25maWcuaW4gYi9taXNjL25jdXJzZXMtY29uZmlnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDkyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL25jdXJzZXMtY29uZmlnLmluCkBAIC0wLDAgKzEsMTYxIEBACisjIUBTSEVMTEAKKyMgJElkOiBuY3Vyc2VzLWNvbmZpZy5pbix2IDEuMTIgMjAwNy8wMy8xNyAyMDowMjoxOSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5LCAyMDA2CisKK3ByZWZpeD0iQHByZWZpeEAiCitleGVjX3ByZWZpeD0iQGV4ZWNfcHJlZml4QCIKKworYmluZGlyPSJAYmluZGlyQCIKK2xpYmRpcj0iQGxpYmRpckAiCitkYXRhZGlyPSJAZGF0YWRpckAiCittYW5kaXI9IkBtYW5kaXJAIgorCitUSElTPSJuY3Vyc2VzQERGVF9BUkdfU1VGRklYQCIKKworTEFORz1DOwkJZXhwb3J0IExBTkcKK0xBTkdVQUdFPUM7CWV4cG9ydCBMQU5HVUFHRQorTENfQUxMPUM7CWV4cG9ydCBMQ19BTEwKK0xDX0NUWVBFPUM7CWV4cG9ydCBMQ19DVFlQRQorCit0ZXN0ICQjID0gMCAmJiBleGVjIEBTSEVMTEAgJDAgLS1lcnJvcgorCit3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworCWNhc2UgIiQxIiBpbgorCS0qPSopCisJCUFSRz1gZWNobyAiJDEiIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AKKwkJOzsKKwkqKQorCQlBUkc9CisJCTs7CisJZXNhYworCisJY2FzZSAiJDEiIGluCisJIyBiYXNpYyBjb25maWd1cmF0aW9uCisJLS1wcmVmaXg9KikKKwkJcHJlZml4PSIkQVJHIgorCQl0ZXN0IC16ICIkZXhlY19wcmVmaXgiICYmIGV4ZWNfcHJlZml4PSIkQVJHIgorCQk7OworCS0tcHJlZml4KQorCQllY2hvICIkcHJlZml4IgorCQk7OworCS0tZXhlYy1wcmVmaXg9KikKKwkJZXhlY19wcmVmaXg9IiRBUkciCisJCTs7CisJLS1leGVjLXByZWZpeCkKKwkJZWNobyAiJGV4ZWNfcHJlZml4IgorCQk7OworCSMgY29tcGlsZS9saW5rCisJLS1jZmxhZ3MpCisJCUlOQ1M9CisJCWlmIHRlc3QgIiR7cHJlZml4fS9pbmNsdWRlIiAhPSAvdXNyL2luY2x1ZGUgOyB0aGVuCisJCQlJTkNTPSItSSR7cHJlZml4fS9pbmNsdWRlIgorCQlmaQorCQlpZiB0ZXN0ICJAV0lUSF9PVkVSV1JJVEVAIiAhPSBubyA7IHRoZW4KKwkJCUlOQ1M9IiRJTkNTIC1JJHtwcmVmaXh9L2luY2x1ZGUvJHtUSElTfSIKKwkJZmkKKwkJc2VkIC1lICdzLF5bIF0qLCwnIC1lICdzLCBbIF0qLCAsZycgLWUgJ3MsWyBdKiQsLCcgPDwtRU5ERUNITworCQkJJElOQ1MKK0VOREVDSE8KKwkJOzsKKwktLWxpYnMpCisJCXNlZCAtZSAncyxeWyBdKiwsJyAtZSAncywgWyBdKiwgLGcnIC1lICdzLFsgXSokLCwnIDw8LUVOREVDSE8KKwkJCS1MJHtleGVjX3ByZWZpeH0vbGliIEBFWFRSQV9MREZMQUdTQCAtbCR7VEhJU30gQExJQlNACitFTkRFQ0hPCisJCTs7CisJIyBpZGVudGlmaWNhdGlvbgorCS0tdmVyc2lvbikKKwkJZWNobyAiQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQC5ATkNVUlNFU19QQVRDSEAiCisJCTs7CisJLS1hYmktdmVyc2lvbikKKwkJZWNobyAiQGNmX2N2X2FiaV92ZXJzaW9uQCIKKwkJOzsKKwktLW1vdXNlLXZlcnNpb24pCisJCWVjaG8gIkBOQ1VSU0VTX01PVVNFX1ZFUlNJT05AIgorCQk7OworCSMgbG9jYXRpb25zCisJLS1iaW5kaXIpCisJCWVjaG8gIiR7YmluZGlyfSIKKwkJOzsKKwktLWRhdGFkaXIpCisJCWVjaG8gIiR7ZGF0YWRpcn0iCisJCTs7CisJLS1saWJkaXIpCisJCWVjaG8gIiR7bGliZGlyfSIKKwkJOzsKKwktLW1hbmRpcikKKwkJZWNobyAiJHttYW5kaXJ9IgorCQk7OworCS0tdGVybWluZm8pCisJCWVjaG8gIkBURVJNSU5GT0AiCisJCTs7CisJLS10ZXJtaW5mby1kaXJzKQorCQllY2hvICJAVEVSTUlORk9fRElSU0AiCisJCTs7CisJLS10ZXJtcGF0aCkKKwkJZWNobyAiQFRFUk1QQVRIQCIKKwkJOzsKKwkjIGdlbmVyYWwgaW5mbworCS0taGVscCkKKwkJY2F0IDw8RU5ESEVMUAorVXNhZ2U6ICR7VEhJU30tY29uZmlnIFtvcHRpb25zXQorCitPcHRpb25zOgorICAtLXByZWZpeCAgICAgICAgICAgZWNob3MgdGhlIHBhY2thZ2UtcHJlZml4IG9mICR7VEhJU30KKyAgLS1wcmVmaXg9QVJHICAgICAgIHNldHMgdGhlIHBhY2thZ2UtcHJlZml4IG9mICR7VEhJU30KKyAgLS1leGVjLXByZWZpeCAgICAgIGVjaG9zIHRoZSBleGVjdXRhYmxlLXByZWZpeCBvZiAke1RISVN9CisgIC0tZXhlYy1wcmVmaXg9QVJHICBzZXRzIHRoZSBleGVjdXRhYmxlLXByZWZpeCBvZiAke1RISVN9CisKKyAgLS1jZmxhZ3MgICAgICAgICAgIGVjaG9zIHRoZSBDIGNvbXBpbGVyIGZsYWdzIG5lZWRlZCB0byBjb21waWxlIHdpdGggJHtUSElTfQorICAtLWxpYnMgICAgICAgICAgICAgZWNob3MgdGhlIGxpYnJhcmllcyBuZWVkZWQgdG8gbGluayB3aXRoICR7VEhJU30KKworICAtLXZlcnNpb24gICAgICAgICAgZWNob3MgdGhlIHJlbGVhc2UrcGF0Y2hkYXRlIHZlcnNpb24gb2YgJHtUSElTfQorICAtLWFiaS12ZXJzaW9uICAgICAgZWNob3MgdGhlIEFCSSB2ZXJzaW9uIG9mICR7VEhJU30KKyAgLS1tb3VzZS12ZXJzaW9uICAgIGVjaG9zIHRoZSBtb3VzZS1pbnRlcmZhY2UgdmVyc2lvbiBvZiAke1RISVN9CisKKyAgLS1iaW5kaXIgICAgICAgICAgIGVjaG9zIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyAke1RISVN9IHByb2dyYW1zCisgIC0tZGF0YWRpciAgICAgICAgICBlY2hvcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgJHtUSElTfSBkYXRhCisgIC0tbGliZGlyICAgICAgICAgICBlY2hvcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgJHtUSElTfSBsaWJyYXJpZXMKKyAgLS1tYW5kaXIgICAgICAgICAgIGVjaG9zIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyAke1RISVN9IG1hbnBhZ2VzCisgIC0tdGVybWluZm8gICAgICAgICBlY2hvcyB0aGUgXCRURVJNSU5GTyB0ZXJtaW5mbyBkYXRhYmFzZSBwYXRoCisgIC0tdGVybWluZm8tZGlycyAgICBlY2hvcyB0aGUgXCRURVJNSU5GT19ESVJTIGRpcmVjdG9yeSBsaXN0CisgIC0tdGVybXBhdGggICAgICAgICBlY2hvcyB0aGUgXCRURVJNUEFUSCB0ZXJtY2FwIGxpc3QKKworICAtLWhlbHAgICAgICAgICAgICAgcHJpbnRzIHRoaXMgbWVzc2FnZQorRU5ESEVMUAorCQk7OworCS0tZXJyb3J8KikKKwkJQFNIRUxMQCAkMCAtLWhlbHAgMT4mMgorCQlleGl0IDEKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKyMgdmlsZTpzaG1vZGUKZGlmZiAtLWdpdCBhL21pc2MvbmN1cnNlcy5kZWYgYi9taXNjL25jdXJzZXMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTA0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL25jdXJzZXMuZGVmCkBAIC0wLDAgKzEsNDQ3IEBACitMSUJSQVJZIG5jdXJzZXM1IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UNCitERVNDUklQVElPTiAiTkN1cnNlcy01LTEtMjAwMDA3MDQsIG1vZHVsZSBuY3Vyc2VzIg0KK0NPREUgTE9BRE9OQ0FMTA0KK0RBVEEgTE9BRE9OQ0FMTCBOT05TSEFSRUQgTVVMVElQTEUNCitFWFBPUlRTDQorCSJCQyIJQDY2MglOT05BTUUNCisJIkNPTE9SUyIJQDUwMwlOT05BTUUNCisJIkNPTE9SX1BBSVIiCUAzNglOT05BTUUNCisJIkNPTE9SX1BBSVJTIglANTA0CU5PTkFNRQ0KKwkiQ09MUyIJQDUxMQlOT05BTUUNCisJIkVTQ0RFTEFZIglANTEzCU5PTkFNRQ0KKwkiTElORVMiCUA1MTAJTk9OQU1FDQorCSJQQUlSX05VTUJFUiIJQDIwOQlOT05BTUUNCisJIlBDIglANjYwCU5PTkFNRQ0KKwkiU1AiCUAxMDAzCU5PTkFNRQ0KKwkiVEFCU0laRSIJQDUxMglOT05BTUUNCisJIlVQIglANjYxCU5PTkFNRQ0KKwkiX25jX2FjY2VzcyIJQDYJTk9OQU1FDQorCSJfbmNfYWRkX3RvX3RyeSIJQDcJTk9OQU1FDQorCSJfbmNfYWxpZ25fdGVybXR5cGUiCUA4CU5PTkFNRQ0KKwkiX25jX2JhY2tncm91bmQiCUA5CU5PTkFNRQ0KKwkiX25jX2JhdWRyYXRlIglAMTAJTk9OQU1FDQorCSJfbmNfY2FwX2hhc2hfdGFibGUiCUA4MDUJTk9OQU1FDQorCSJfbmNfY2FwYWxpYXNfdGFibGUiCUA4MDYJTk9OQU1FDQorCSJfbmNfY2FwY21wIglANzA3CU5PTkFNRQ0KKwkiX25jX2NhcHRvaW5mbyIJQDgyOQlOT05BTUUNCisJIl9uY19jaGVja190ZXJtdHlwZSIJQDE1CU5PTkFNRQ0KKwkiX25jX2NvbW1lbnRfZW5kIglAODE5CU5PTkFNRQ0KKwkiX25jX2NvbW1lbnRfc3RhcnQiCUA4MTgJTk9OQU1FDQorCSJfbmNfY29weV9lbnRyeSIJQDE2CU5PTkFNRQ0KKwkiX25jX2NvcHlfdGVybXR5cGUiCUAyMglOT05BTUUNCisJIl9uY19jdXJyX2NvbCIJQDgxNglOT05BTUUNCisJIl9uY19jdXJyX2ZpbGVfcG9zIglAODE3CU5PTkFNRQ0KKwkiX25jX2N1cnJfbGluZSIJQDgxNQlOT05BTUUNCisJIl9uY19jdXJyX3Rva2VuIglAODAzCU5PTkFNRQ0KKwkiX25jX2Rpc2FibGVfcGVyaW9kIglAMjMJTk9OQU1FDQorCSJfbmNfZG9fY29sb3IiCUAxMDM3CU5PTkFNRQ0KKwkiX25jX2RvYWxsb2MiCUAyNQlOT05BTUUNCisJIl9uY19lbnRyeV9tYXRjaCIJQDcxMAlOT05BTUUNCisJIl9uY19lcnJfYWJvcnQiCUA4MjYJTk9OQU1FDQorCSJfbmNfZXhwYW5kX3RyeSIJQDI3CU5PTkFNRQ0KKwkiX25jX2V4cGFuZGVkIglANTEJTk9OQU1FDQorCSJfbmNfZmFsbGJhY2siCUA2MjUJTk9OQU1FDQorCSJfbmNfZmluZF9lbnRyeSIJQDgwOQlOT05BTUUNCisJIl9uY19maW5kX3R5cGVfZW50cnkiCUA4MTAJTk9OQU1FDQorCSJfbmNfZmlyc3RfbmFtZSIJQDYyMglOT05BTUUNCisJIl9uY19mbHVzaCIJQDU0CU5PTkFNRQ0KKwkiX25jX2ZyZWVfZW50cmllcyIJQDcxMglOT05BTUUNCisJIl9uY19mcmVlX3Rlcm10eXBlIglANTgJTk9OQU1FDQorCSJfbmNfZnJlZWFsbCIJQDU5CU5PTkFNRQ0KKwkiX25jX2ZyZWV3aW4iCUA2MAlOT05BTUUNCisJIl9uY19nZXRfaGFzaF90YWJsZSIJQDYzCU5PTkFNRQ0KKwkiX25jX2dldF90YWJsZSIJQDgwOAlOT05BTUUNCisJIl9uY19nZXRfdG9rZW4iCUA4MTEJTk9OQU1FDQorCSJfbmNfZ2V0X3R0eV9tb2RlIglANjUJTk9OQU1FDQorCSJfbmNfZ2V0X3R5cGUiCUA4MjMJTk9OQU1FDQorCSJfbmNfZ2V0ZW52X251bSIJQDY3CU5PTkFNRQ0KKwkiX25jX2hhc19tb3VzZSIJQDczCU5PTkFNRQ0KKwkiX25jX2hhc2hfbWFwIglAODQJTk9OQU1FDQorCSJfbmNfaGVhZCIJQDcwMAlOT05BTUUNCisJIl9uY19ob21lX3Rlcm1pbmZvIglAOTEJTk9OQU1FDQorCSJfbmNfaW5mb19oYXNoX3RhYmxlIglAODA0CU5PTkFNRQ0KKwkiX25jX2luZm9hbGlhc190YWJsZSIJQDgwNwlOT05BTUUNCisJIl9uY19pbmZvdG9jYXAiCUA4MzAJTk9OQU1FDQorCSJfbmNfaW5pdF9hY3MiCUA5MglOT05BTUUNCisJIl9uY19pbml0X2VudHJ5IglANzAyCU5PTkFNRQ0KKwkiX25jX2luaXRfa2V5dHJ5IglAOTMJTk9OQU1FDQorCSJfbmNfa2VlcF90aWNfZGlyIglAOTUJTk9OQU1FDQorCSJfbmNfa2V5X25hbWVzIglAOTYJTk9OQU1FDQorCSJfbmNfa2V5cGFkIglAMTAyNAlOT05BTUUNCisJIl9uY19tYWtlX29sZGhhc2giCUA5NwlOT05BTUUNCisJIl9uY19tYWtlbmV3IglAMTAyNQlOT05BTUUNCisJIl9uY19tZW1tb3ZlIglAOTgJTk9OQU1FDQorCSJfbmNfbWVyZ2VfZW50cnkiCUA3MDQJTk9OQU1FDQorCSJfbmNfbXNlY19jb3N0IglAMTAzCU5PTkFNRQ0KKwkiX25jX212Y3VyX2luaXQiCUAxMDE0CU5PTkFNRQ0KKwkiX25jX212Y3VyX3Jlc3VtZSIJQDEwNglOT05BTUUNCisJIl9uY19tdmN1cl93cmFwIglAMTAxNQlOT05BTUUNCisJIl9uY19uYW1lX21hdGNoIglANjIzCU5PTkFNRQ0KKwkiX25jX251bGxzX3NlbnQiCUAxMTYJTk9OQU1FDQorCSJfbmNfb2xkbnVtcyIJQDExNwlOT05BTUUNCisJIl9uY19vc3BlZWQiCUAxMTgJTk9OQU1FDQorCSJfbmNfb3V0Y2giCUAxMDI2CU5PTkFNRQ0KKwkiX25jX291dHN0ciIJQDEwMzMJTk9OQU1FDQorCSJfbmNfcGFuZWxob29rIglAMTE5CU5PTkFNRQ0KKwkiX25jX3BhbmljX21vZGUiCUA4MTQJTk9OQU1FDQorCSJfbmNfcGFyc2VfZW50cnkiCUA3MDYJTk9OQU1FDQorCSJfbmNfcHJpbnRmX3N0cmluZyIJQDEyMAlOT05BTUUNCisJIl9uY19wdXNoX3Rva2VuIglAODEyCU5PTkFNRQ0KKwkiX25jX3JlYWRfZW50cnkiCUA2MjAJTk9OQU1FDQorCSJfbmNfcmVhZF9lbnRyeV9zb3VyY2UiCUA3MDkJTk9OQU1FDQorCSJfbmNfcmVhZF9maWxlX2VudHJ5IglANjIxCU5PTkFNRQ0KKwkiX25jX3JlYWRfdGVybWNhcCIJQDEyNwlOT05BTUUNCisJIl9uY19yZW1vdmVfa2V5IglAMTI5CU5PTkFNRQ0KKwkiX25jX3JlbW92ZV9zdHJpbmciCUAxMzAJTk9OQU1FDQorCSJfbmNfcmVuZGVyIglAMTAyNwlOT05BTUUNCisJIl9uY19yZXNldF9pbnB1dCIJQDgxMwlOT05BTUUNCisJIl9uY19yZXNvbHZlX3VzZXMiCUA3MTEJTk9OQU1FDQorCSJfbmNfcmlwb2ZmbGluZSIJQDEzMglOT05BTUUNCisJIl9uY19zYXZlX3N0ciIJQDcwMwlOT05BTUUNCisJIl9uY19zY3JlZW5fY2hhaW4iCUAxMzcJTk9OQU1FDQorCSJfbmNfc2NyZWVuX2luaXQiCUAxNDIJTk9OQU1FDQorCSJfbmNfc2NyZWVuX3Jlc3VtZSIJQDE0MwlOT05BTUUNCisJIl9uY19zY3JlZW5fd3JhcCIJQDE0NAlOT05BTUUNCisJIl9uY19zY3JvbGxfb2xkaGFzaCIJQDE0NQlOT05BTUUNCisJIl9uY19zY3JvbGxfb3B0aW1pemUiCUAxMDI5CU5PTkFNRQ0KKwkiX25jX3Njcm9sbF93aW5kb3ciCUAxMDMwCU5PTkFNRQ0KKwkiX25jX3Njcm9sbG4iCUAxNDYJTk9OQU1FDQorCSJfbmNfc2V0X2J1ZmZlciIJQDE0NwlOT05BTUUNCisJIl9uY19zZXRfc291cmNlIglAODIyCU5PTkFNRQ0KKwkiX25jX3NldF90dHlfbW9kZSIJQDE0OAlOT05BTUUNCisJIl9uY19zZXRfdHlwZSIJQDgyNAlOT05BTUUNCisJIl9uY19zZXRfd3JpdGVkaXIiCUAxNTIJTk9OQU1FDQorCSJfbmNfc2V0dXBzY3JlZW4iCUAxMDMxCU5PTkFNRQ0KKwkiX25jX3NpZ2FjdGlvbiIJQDE1OAlOT05BTUUNCisJIl9uY19zaWduYWxfaGFuZGxlciIJQDEwMzQJTk9OQU1FDQorCSJfbmNfc2xrX2Zvcm1hdCIJQDE1OQlOT05BTUUNCisJIl9uY19zbGtfaW5pdGlhbGl6ZSIJQDE2MAlOT05BTUUNCisJIl9uY19zdGFydF9saW5lIglAODIxCU5PTkFNRQ0KKwkiX25jX3N1cHByZXNzX3dhcm5pbmdzIglAODI4CU5PTkFNRQ0KKwkiX25jX3N5bmNob29rIglAMTAzNQlOT05BTUUNCisJIl9uY19zeW50YXgiCUA4MjAJTk9OQU1FDQorCSJfbmNfc3lzZXJyX2Fib3J0IglAODI1CU5PTkFNRQ0KKwkiX25jX3RhaWwiCUA3MDEJTk9OQU1FDQorCSJfbmNfdGljX2RpciIJQDE2MQlOT05BTUUNCisJIl9uY190aWNfZXhwYW5kIglAMTYyCU5PTkFNRQ0KKwkiX25jX3RpY193cml0dGVuIglAMTY3CU5PTkFNRQ0KKwkiX25jX3RpbWVkX3dhaXQiCUAxMDM2CU5PTkFNRQ0KKwkiX25jX3RpbmZvX2ZrZXlzIglAMTY5CU5PTkFNRQ0KKwkiX25jX3RyYWNpbmciCUAxMDEwCU5PTkFNRQ0KKwkiX25jX3RyYW5zX3N0cmluZyIJQDE3MAlOT05BTUUNCisJIl9uY191c2VyX2RlZmluYWJsZSIJQDE3MglOT05BTUUNCisJIl9uY192aXNidWYiCUAxMDEyCU5PTkFNRQ0KKwkiX25jX3Zpc2J1ZjIiCUAxNzgJTk9OQU1FDQorCSJfbmNfdnNzY2FuZiIJQDE4MwlOT05BTUUNCisJIl9uY193YWRkY2hfbm9zeW5jIglAMTAyOAlOT05BTUUNCisJIl9uY193YXJuaW5nIglAODI3CU5PTkFNRQ0KKwkiX25jX3dyYXBfZW50cnkiCUA3MDUJTk9OQU1FDQorCSJfbmNfd3JpdGVfZW50cnkiCUA3MDgJTk9OQU1FDQorCSJhY3NfbWFwIglANTA2CU5PTkFNRQ0KKwkiYWRkY2giCUAxCU5PTkFNRQ0KKwkiYWRkY2huc3RyIglAMglOT05BTUUNCisJImFkZGNoc3RyIglAMwlOT05BTUUNCisJImFkZG5zdHIiCUA0CU5PTkFNRQ0KKwkiYWRkc3RyIglANQlOT05BTUUNCisJImFzc3VtZV9kZWZhdWx0X2NvbG9ycyIJQDE4NAlOT05BTUUNCisJImF0dHJfZ2V0IglAMTQJTk9OQU1FDQorCSJhdHRyX29mZiIJQDE4NQlOT05BTUUNCisJImF0dHJfb24iCUAxODYJTk9OQU1FDQorCSJhdHRyX3NldCIJQDE3CU5PTkFNRQ0KKwkiYXR0cm9mZiIJQDExCU5PTkFNRQ0KKwkiYXR0cm9uIglAMTIJTk9OQU1FDQorCSJhdHRyc2V0IglAMTMJTk9OQU1FDQorCSJiYXVkcmF0ZSIJQDE4CU5PTkFNRQ0KKwkiYmVlcCIJQDE5CU5PTkFNRQ0KKwkiYmtnZCIJQDIwCU5PTkFNRQ0KKwkiYmtnZHNldCIJQDIxCU5PTkFNRQ0KKwkiYm9vbGNvZGVzIglANjAxCU5PTkFNRQ0KKwkiYm9vbGZuYW1lcyIJQDYwMglOT05BTUUNCisJImJvb2xuYW1lcyIJQDYwMAlOT05BTUUNCisJImJvcmRlciIJQDI0CU5PTkFNRQ0KKwkiYm94IglAMjYJTk9OQU1FDQorCSJjYW5fY2hhbmdlX2NvbG9yIglAMjgJTk9OQU1FDQorCSJjYnJlYWsiCUAyOQlOT05BTUUNCisJImNoZ2F0IglAMzAJTk9OQU1FDQorCSJjbGVhciIJQDMxCU5PTkFNRQ0KKwkiY2xlYXJvayIJQDMyCU5PTkFNRQ0KKwkiY2xydG9ib3QiCUAzMwlOT05BTUUNCisJImNscnRvZW9sIglAMzQJTk9OQU1FDQorCSJjb2xvcl9jb250ZW50IglAMzUJTk9OQU1FDQorCSJjb2xvcl9zZXQiCUAxODcJTk9OQU1FDQorCSJjb3B5d2luIglAMzcJTk9OQU1FDQorCSJjdXJfdGVybSIJQDUxNQlOT05BTUUNCisJImN1cnNfc2V0IglAMzgJTk9OQU1FDQorCSJjdXJzY3IiCUA1MDEJTk9OQU1FDQorCSJjdXJzZXNfdmVyc2lvbiIJQDE4OAlOT05BTUUNCisJImRlZl9wcm9nX21vZGUiCUAzOQlOT05BTUUNCisJImRlZl9zaGVsbF9tb2RlIglANDAJTk9OQU1FDQorCSJkZWZpbmVfa2V5IglAMTg5CU5PTkFNRQ0KKwkiZGVsX2N1cnRlcm0iCUA2NDEJTk9OQU1FDQorCSJkZWxheV9vdXRwdXQiCUA0MQlOT05BTUUNCisJImRlbGNoIglANDIJTk9OQU1FDQorCSJkZWxldGVsbiIJQDQ1CU5PTkFNRQ0KKwkiZGVsc2NyZWVuIglANDMJTk9OQU1FDQorCSJkZWx3aW4iCUA0NAlOT05BTUUNCisJImRlcndpbiIJQDQ2CU5PTkFNRQ0KKwkiZG91cGRhdGUiCUA0NwlOT05BTUUNCisJImR1cHdpbiIJQDQ4CU5PTkFNRQ0KKwkiZWNobyIJQDQ5CU5PTkFNRQ0KKwkiZWNob2NoYXIiCUA1MAlOT05BTUUNCisJImVuZHdpbiIJQDUyCU5PTkFNRQ0KKwkiZXJhc2UiCUAxOTMJTk9OQU1FDQorCSJlcmFzZWNoYXIiCUA1MwlOT05BTUUNCisJImZpbHRlciIJQDU1CU5PTkFNRQ0KKwkiZmxhc2giCUA1NglOT05BTUUNCisJImZsdXNoaW5wIglANTcJTk9OQU1FDQorCSJnZXRia2dkIglAMjExCU5PTkFNRQ0KKwkiZ2V0Y2giCUA2MQlOT05BTUUNCisJImdldG1vdXNlIglAMzU2CU5PTkFNRQ0KKwkiZ2V0bnN0ciIJQDYyCU5PTkFNRQ0KKwkiZ2V0c3RyIglANjQJTk9OQU1FDQorCSJnZXR3aW4iCUA2NglOT05BTUUNCisJImhhbGZkZWxheSIJQDY4CU5PTkFNRQ0KKwkiaGFzX2NvbG9ycyIJQDY5CU5PTkFNRQ0KKwkiaGFzX2ljIglANzAJTk9OQU1FDQorCSJoYXNfaWwiCUA3MQlOT05BTUUNCisJImhhc19rZXkiCUAyMzQJTk9OQU1FDQorCSJobGluZSIJQDcyCU5PTkFNRQ0KKwkiaWRjb2siCUA3NAlOT05BTUUNCisJImlkbG9rIglANzUJTk9OQU1FDQorCSJpbW1lZG9rIglANzYJTk9OQU1FDQorCSJpbmNoIglANzcJTk9OQU1FDQorCSJpbmNobnN0ciIJQDc4CU5PTkFNRQ0KKwkiaW5jaHN0ciIJQDc5CU5PTkFNRQ0KKwkiaW5pdF9jb2xvciIJQDgxCU5PTkFNRQ0KKwkiaW5pdF9wYWlyIglAODIJTk9OQU1FDQorCSJpbml0c2NyIglAODAJTk9OQU1FDQorCSJpbm5zdHIiCUA4MwlOT05BTUUNCisJImluc2NoIglAODUJTk9OQU1FDQorCSJpbnNkZWxsbiIJQDg2CU5PTkFNRQ0KKwkiaW5zZXJ0bG4iCUA4NwlOT05BTUUNCisJImluc25zdHIiCUA4OAlOT05BTUUNCisJImluc3N0ciIJQDg5CU5PTkFNRQ0KKwkiaW5zdHIiCUA5MAlOT05BTUUNCisJImludHJmbHVzaCIJQDk0CU5PTkFNRQ0KKwkiaXNfbGluZXRvdWNoZWQiCUAxMDAJTk9OQU1FDQorCSJpc193aW50b3VjaGVkIglAMTAxCU5PTkFNRQ0KKwkiaXNlbmR3aW4iCUA5OQlOT05BTUUNCisJImtleWJvdW5kIglAMjM4CU5PTkFNRQ0KKwkia2V5bmFtZSIJQDEwMglOT05BTUUNCisJImtleW9rIglAMjQwCU5PTkFNRQ0KKwkia2V5cGFkIglAMTA0CU5PTkFNRQ0KKwkia2lsbGNoYXIiCUAxMDUJTk9OQU1FDQorCSJsZWF2ZW9rIglAMTA3CU5PTkFNRQ0KKwkibG9uZ25hbWUiCUAxMDgJTk9OQU1FDQorCSJtY3ByaW50IglAMjQyCU5PTkFNRQ0KKwkibWV0YSIJQDEwOQlOT05BTUUNCisJIm1vdXNlX3RyYWZvIglAMjUxCU5PTkFNRQ0KKwkibW91c2VpbnRlcnZhbCIJQDM2MAlOT05BTUUNCisJIm1vdXNlbWFzayIJQDM1OAlOT05BTUUNCisJIm1vdmUiCUAxMTAJTk9OQU1FDQorCSJtdmFkZGNoIglAMTExCU5PTkFNRQ0KKwkibXZhZGRjaG5zdHIiCUAxMTIJTk9OQU1FDQorCSJtdmFkZGNoc3RyIglAMTEzCU5PTkFNRQ0KKwkibXZhZGRuc3RyIglAMTE0CU5PTkFNRQ0KKwkibXZhZGRzdHIiCUAxMTUJTk9OQU1FDQorCSJtdmNoZ2F0IglAMTIxCU5PTkFNRQ0KKwkibXZjdXIiCUAxMjIJTk9OQU1FDQorCSJtdmRlbGNoIglAMTIzCU5PTkFNRQ0KKwkibXZkZXJ3aW4iCUAxMjQJTk9OQU1FDQorCSJtdmdldGNoIglAMTI1CU5PTkFNRQ0KKwkibXZnZXRuc3RyIglAMTI2CU5PTkFNRQ0KKwkibXZnZXRzdHIiCUAxMjgJTk9OQU1FDQorCSJtdmhsaW5lIglAMTMxCU5PTkFNRQ0KKwkibXZpbmNoIglAMTMzCU5PTkFNRQ0KKwkibXZpbmNobnN0ciIJQDEzNAlOT05BTUUNCisJIm12aW5jaHN0ciIJQDEzNQlOT05BTUUNCisJIm12aW5uc3RyIglAMTM2CU5PTkFNRQ0KKwkibXZpbnNjaCIJQDEzOAlOT05BTUUNCisJIm12aW5zbnN0ciIJQDEzOQlOT05BTUUNCisJIm12aW5zc3RyIglAMTQwCU5PTkFNRQ0KKwkibXZpbnN0ciIJQDE0MQlOT05BTUUNCisJIm12cHJpbnR3IglAMTQ5CU5PTkFNRQ0KKwkibXZzY2FudyIJQDE1MAlOT05BTUUNCisJIm12dmxpbmUiCUAxNTEJTk9OQU1FDQorCSJtdndhZGRjaCIJQDE1MwlOT05BTUUNCisJIm12d2FkZGNobnN0ciIJQDE1NAlOT05BTUUNCisJIm12d2FkZGNoc3RyIglAMTU1CU5PTkFNRQ0KKwkibXZ3YWRkbnN0ciIJQDE1NglOT05BTUUNCisJIm12d2FkZHN0ciIJQDE1NwlOT05BTUUNCisJIm12d2NoZ2F0IglAMTYzCU5PTkFNRQ0KKwkibXZ3ZGVsY2giCUAxNjQJTk9OQU1FDQorCSJtdndnZXRjaCIJQDE2NQlOT05BTUUNCisJIm12d2dldG5zdHIiCUAxNjYJTk9OQU1FDQorCSJtdndnZXRzdHIiCUAxNjgJTk9OQU1FDQorCSJtdndobGluZSIJQDE3MQlOT05BTUUNCisJIm12d2luIglAMTczCU5PTkFNRQ0KKwkibXZ3aW5jaCIJQDE3NAlOT05BTUUNCisJIm12d2luY2huc3RyIglAMTc1CU5PTkFNRQ0KKwkibXZ3aW5jaHN0ciIJQDE3NglOT05BTUUNCisJIm12d2lubnN0ciIJQDE3NwlOT05BTUUNCisJIm12d2luc2NoIglAMTc5CU5PTkFNRQ0KKwkibXZ3aW5zbnN0ciIJQDE4MAlOT05BTUUNCisJIm12d2luc3N0ciIJQDE4MQlOT05BTUUNCisJIm12d2luc3RyIglAMTgyCU5PTkFNRQ0KKwkibXZ3cHJpbnR3IglAMTkwCU5PTkFNRQ0KKwkibXZ3c2NhbnciCUAxOTEJTk9OQU1FDQorCSJtdnd2bGluZSIJQDE5MglOT05BTUUNCisJIm5hcG1zIglAMTk0CU5PTkFNRQ0KKwkibmV3cGFkIglAMTk1CU5PTkFNRQ0KKwkibmV3c2NyIglANTAyCU5PTkFNRQ0KKwkibmV3dGVybSIJQDE5NglOT05BTUUNCisJIm5ld3dpbiIJQDE5NwlOT05BTUUNCisJIm5sIglAMTk4CU5PTkFNRQ0KKwkibm9jYnJlYWsiCUAxOTkJTk9OQU1FDQorCSJub2RlbGF5IglAMjAwCU5PTkFNRQ0KKwkibm9lY2hvIglAMjAxCU5PTkFNRQ0KKwkibm9ubCIJQDIwMglOT05BTUUNCisJIm5vcWlmbHVzaCIJQDIwMwlOT05BTUUNCisJIm5vcmF3IglAMjA0CU5PTkFNRQ0KKwkibm90aW1lb3V0IglAMjA1CU5PTkFNRQ0KKwkibnVtY29kZXMiCUA2MDQJTk9OQU1FDQorCSJudW1mbmFtZXMiCUA2MDUJTk9OQU1FDQorCSJudW1uYW1lcyIJQDYwMwlOT05BTUUNCisJIm9zcGVlZCIJQDY2MwlOT05BTUUNCisJIm92ZXJsYXkiCUAyMDYJTk9OQU1FDQorCSJvdmVyd3JpdGUiCUAyMDcJTk9OQU1FDQorCSJwYWlyX2NvbnRlbnQiCUAyMDgJTk9OQU1FDQorCSJwZWNob2NoYXIiCUAyMTAJTk9OQU1FDQorCSJwbm91dHJlZnJlc2giCUAyMTIJTk9OQU1FDQorCSJwcmVmcmVzaCIJQDIxMwlOT05BTUUNCisJInByaW50dyIJQDIxNAlOT05BTUUNCisJInB1dHAiCUAyMTUJTk9OQU1FDQorCSJwdXR3aW4iCUAyMTYJTk9OQU1FDQorCSJxaWZsdXNoIglAMjE3CU5PTkFNRQ0KKwkicmF3IglAMjE4CU5PTkFNRQ0KKwkicmVkcmF3d2luIglAMjE5CU5PTkFNRQ0KKwkicmVmcmVzaCIJQDIyMAlOT05BTUUNCisJInJlc2V0X3Byb2dfbW9kZSIJQDIyMglOT05BTUUNCisJInJlc2V0X3NoZWxsX21vZGUiCUAyMjMJTk9OQU1FDQorCSJyZXNldHR5IglAMjIxCU5PTkFNRQ0KKwkicmVzaXpldGVybSIJQDI2MwlOT05BTUUNCisJInJlc3RhcnR0ZXJtIglANjQzCU5PTkFNRQ0KKwkicmlwb2ZmbGluZSIJQDIyNAlOT05BTUUNCisJInNhdmV0dHkiCUAyMjUJTk9OQU1FDQorCSJzY2FudyIJQDIyNglOT05BTUUNCisJInNjcl9kdW1wIglAMjI3CU5PTkFNRQ0KKwkic2NyX2luaXQiCUAyMjgJTk9OQU1FDQorCSJzY3JfcmVzdG9yZSIJQDIzMglOT05BTUUNCisJInNjcl9zZXQiCUAyMzMJTk9OQU1FDQorCSJzY3JsIglAMjI5CU5PTkFNRQ0KKwkic2Nyb2xsIglAMjMwCU5PTkFNRQ0KKwkic2Nyb2xsb2siCUAyMzEJTk9OQU1FDQorCSJzZXRfY3VydGVybSIJQDY0MAlOT05BTUUNCisJInNldF90ZXJtIglAMjM2CU5PTkFNRQ0KKwkic2V0c2NycmVnIglAMjM1CU5PTkFNRQ0KKwkic2V0dXB0ZXJtIglANjQ0CU5PTkFNRQ0KKwkic2xrX2F0dHIiCUAyNjYJTk9OQU1FDQorCSJzbGtfYXR0cl9zZXQiCUAyNzAJTk9OQU1FDQorCSJzbGtfYXR0cm9mZiIJQDIzNwlOT05BTUUNCisJInNsa19hdHRyb24iCUAyMzkJTk9OQU1FDQorCSJzbGtfYXR0cnNldCIJQDI0MQlOT05BTUUNCisJInNsa19jbGVhciIJQDI0MwlOT05BTUUNCisJInNsa19jb2xvciIJQDI3MglOT05BTUUNCisJInNsa19pbml0IglAMjQ0CU5PTkFNRQ0KKwkic2xrX2xhYmVsIglAMjQ1CU5PTkFNRQ0KKwkic2xrX25vdXRyZWZyZXNoIglAMjQ2CU5PTkFNRQ0KKwkic2xrX3JlZnJlc2giCUAyNDcJTk9OQU1FDQorCSJzbGtfcmVzdG9yZSIJQDI0OAlOT05BTUUNCisJInNsa19zZXQiCUAyNDkJTk9OQU1FDQorCSJzbGtfdG91Y2giCUAyNTAJTk9OQU1FDQorCSJzdGFuZGVuZCIJQDI1MwlOT05BTUUNCisJInN0YW5kb3V0IglAMjUyCU5PTkFNRQ0KKwkic3RhcnRfY29sb3IiCUAyNTQJTk9OQU1FDQorCSJzdGRzY3IiCUA1MDAJTk9OQU1FDQorCSJzdHJjb2RlcyIJQDYwOAlOT05BTUUNCisJInN0cmZuYW1lcyIJQDYwOQlOT05BTUUNCisJInN0cm5hbWVzIglANjA2CU5PTkFNRQ0KKwkic3VicGFkIglAMjU1CU5PTkFNRQ0KKwkic3Vid2luIglAMjU2CU5PTkFNRQ0KKwkic3luY29rIglAMjU3CU5PTkFNRQ0KKwkidGVybWF0dHJzIglAMjU4CU5PTkFNRQ0KKwkidGVybW5hbWUiCUAyNTkJTk9OQU1FDQorCSJ0Z2V0ZW50IglANjQ1CU5PTkFNRQ0KKwkidGdldGZsYWciCUA2NDYJTk9OQU1FDQorCSJ0Z2V0bnVtIglANjQ3CU5PTkFNRQ0KKwkidGdldHN0ciIJQDY0OAlOT05BTUUNCisJInRnb3RvIglANjQ5CU5PTkFNRQ0KKwkidGlnZXRmbGFnIglAMjYwCU5PTkFNRQ0KKwkidGlnZXRudW0iCUAyNjEJTk9OQU1FDQorCSJ0aWdldHN0ciIJQDI2MglOT05BTUUNCisJInRpbWVvdXQiCUAyNzQJTk9OQU1FDQorCSJ0cGFybSIJQDY1MwlOT05BTUUNCisJInRwdXRzIglANjU1CU5PTkFNRQ0KKwkidHR5dHlwZSIJQDUxNAlOT05BTUUNCisJInR5cGVhaGVhZCIJQDI2NAlOT05BTUUNCisJInVuY3RybCIJQDM2MQlOT05BTUUNCisJInVuZ2V0Y2giCUAyNjUJTk9OQU1FDQorCSJ1bmdldG1vdXNlIglAMzU3CU5PTkFNRQ0KKwkidW50b3VjaHdpbiIJQDI2NwlOT05BTUUNCisJInVzZV9kZWZhdWx0X2NvbG9ycyIJQDI3NglOT05BTUUNCisJInVzZV9lbnYiCUAyNjgJTk9OQU1FDQorCSJ1c2VfZXh0ZW5kZWRfbmFtZXMiCUAyNzgJTk9OQU1FDQorCSJ2aWRhdHRyIglAMjY5CU5PTkFNRQ0KKwkidmlkcHV0cyIJQDI3MQlOT05BTUUNCisJInZsaW5lIglAMjczCU5PTkFNRQ0KKwkidndfcHJpbnR3IglAMjg0CU5PTkFNRQ0KKwkidndfc2NhbnciCUAyODUJTk9OQU1FDQorCSJ2d3ByaW50dyIJQDI3NQlOT05BTUUNCisJInZ3c2NhbnciCUAyNzcJTk9OQU1FDQorCSJ3YWRkY2giCUAyNzkJTk9OQU1FDQorCSJ3YWRkY2huc3RyIglAMjgwCU5PTkFNRQ0KKwkid2FkZGNoc3RyIglAMjgxCU5PTkFNRQ0KKwkid2FkZG5zdHIiCUAyODIJTk9OQU1FDQorCSJ3YWRkc3RyIglAMjgzCU5PTkFNRQ0KKwkid2F0dHJfZ2V0IglAMjkxCU5PTkFNRQ0KKwkid2F0dHJfb2ZmIglAMjkzCU5PTkFNRQ0KKwkid2F0dHJfb24iCUAyOTIJTk9OQU1FDQorCSJ3YXR0cl9zZXQiCUAyODYJTk9OQU1FDQorCSJ3YXR0cm9mZiIJQDI4OQlOT05BTUUNCisJIndhdHRyb24iCUAyODgJTk9OQU1FDQorCSJ3YXR0cnNldCIJQDI5MAlOT05BTUUNCisJIndia2dkIglAMjk1CU5PTkFNRQ0KKwkid2JrZ2RzZXQiCUAyOTYJTk9OQU1FDQorCSJ3Ym9yZGVyIglAMjk5CU5PTkFNRQ0KKwkid2NoZ2F0IglAMzAxCU5PTkFNRQ0KKwkid2NsZWFyIglAMzAyCU5PTkFNRQ0KKwkid2NscnRvYm90IglAMzAzCU5PTkFNRQ0KKwkid2NscnRvZW9sIglAMzA0CU5PTkFNRQ0KKwkid2NvbG9yX3NldCIJQDI4NwlOT05BTUUNCisJIndjdXJzeW5jdXAiCUAzMDUJTk9OQU1FDQorCSJ3ZGVsY2giCUAzMDYJTk9OQU1FDQorCSJ3ZGVsZXRlbG4iCUAzMDcJTk9OQU1FDQorCSJ3ZWNob2NoYXIiCUAzMDgJTk9OQU1FDQorCSJ3ZW5jbG9zZSIJQDM1OQlOT05BTUUNCisJIndlcmFzZSIJQDMxMAlOT05BTUUNCisJIndnZXRjaCIJQDMxMglOT05BTUUNCisJIndnZXRuc3RyIglAMzEzCU5PTkFNRQ0KKwkid2dldHN0ciIJQDMxNQlOT05BTUUNCisJIndobGluZSIJQDMxOAlOT05BTUUNCisJIndpbmNoIglAMzIwCU5PTkFNRQ0KKwkid2luY2huc3RyIglAMzIxCU5PTkFNRQ0KKwkid2luY2hzdHIiCUAzMjIJTk9OQU1FDQorCSJ3aW5uc3RyIglAMzIzCU5PTkFNRQ0KKwkid2luc2NoIglAMzI1CU5PTkFNRQ0KKwkid2luc2RlbGxuIglAMzI2CU5PTkFNRQ0KKwkid2luc2VydGxuIglAMzI3CU5PTkFNRQ0KKwkid2luc25zdHIiCUAzMjgJTk9OQU1FDQorCSJ3aW5zc3RyIglAMzI5CU5PTkFNRQ0KKwkid2luc3RyIglAMzMwCU5PTkFNRQ0KKwkid21vdXNlX3RyYWZvIglAMjk0CU5PTkFNRQ0KKwkid21vdmUiCUAzMzgJTk9OQU1FDQorCSJ3bm91dHJlZnJlc2giCUAzMzkJTk9OQU1FDQorCSJ3cHJpbnR3IglAMzQwCU5PTkFNRQ0KKwkid3JlZHJhd2xuIglAMzQxCU5PTkFNRQ0KKwkid3JlZnJlc2giCUAzNDIJTk9OQU1FDQorCSJ3cmVzaXplIglAMzQzCU5PTkFNRQ0KKwkid3NjYW53IglAMzQ0CU5PTkFNRQ0KKwkid3NjcmwiCUAzNDUJTk9OQU1FDQorCSJ3c2V0c2NycmVnIglAMzQ2CU5PTkFNRQ0KKwkid3N0YW5kZW5kIglAMzQ4CU5PTkFNRQ0KKwkid3N0YW5kb3V0IglAMzQ3CU5PTkFNRQ0KKwkid3N5bmNkb3duIglAMzQ5CU5PTkFNRQ0KKwkid3N5bmN1cCIJQDM1MAlOT05BTUUNCisJInd0aW1lb3V0IglAMzUxCU5PTkFNRQ0KKwkid3RvdWNobG4iCUAzNTIJTk9OQU1FDQorCSJ3dmxpbmUiCUAzNTQJTk9OQU1FDQpkaWZmIC0tZ2l0IGEvbWlzYy9uY3Vyc2VzLnJlZiBiL21pc2MvbmN1cnNlcy5yZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0ZGU3ZAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbmN1cnNlcy5yZWYKQEAgLTAsMCArMSw1NzIgQEAKK0xJQlJBUlkgbmN1cnNlczIgSU5JVElOU1RBTkNFDQorREVTQ1JJUFRJT04gJ05DdXJzZXMgMS45LjllLTEgZm9yIE9TLzIgLSBiYXNlIGxpYnJhcnknDQorRVhQT1JUUw0KKzsqKioqKioqKioqKioNCis7KiBjdXJzZXMuaCAqDQorOyoqKioqKioqKioqKg0KKw0KKwkic3Rkc2NyIgkJCUA1MDAJTk9OQU1FIDsgdmFyaWFibGUNCisJImN1cnNjciIJCQlANTAxCU5PTkFNRSA7IHZhcmlhYmxlDQorCSJuZXdzY3IiCQkJQDUwMglOT05BTUUgOyB2YXJpYWJsZQ0KKwkiQ09MT1JTIgkJCUA1MDMJTk9OQU1FIDsgdmFyaWFibGUNCisJIkNPTE9SX1BBSVJTIgkJCUA1MDQJTk9OQU1FIDsgdmFyaWFibGUNCisJImNvbG9yX3BhaXJzIgkJCUA1MDUJTk9OQU1FIDsgdmFyaWFibGUNCisJImFjc19tYXAiCSAJCUA1MDYJTk9OQU1FIDsgdmFyaWFibGUNCisJIkxJTkVTIgkJCQlANTEwCU5PTkFNRSA7IHZhcmlhYmxlDQorCSJDT0xTIgkJCQlANTExCU5PTkFNRSA7IHZhcmlhYmxlDQorCSJUQUJTSVpFIgkJCUA1MTIJTk9OQU1FIDsgdmFyaWFibGUNCisJIkVTQ0RFTEFZIgkJCUA1MTMJTk9OQU1FIDsgdmFyaWFibGUNCisJInR0eXR5cGUiCQkJQDUxNAlOT05BTUUgOyB2YXJpYWJsZQ0KKwkiY3VyX3Rlcm0iCQkJQDUxNQlOT05BTUUgOyB2YXJpYWJsZQ0KKw0KKwkiYWRkY2giICAgCQkJQDEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJhZGRjaG5zdHIiICAgICAgIAkJQDIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJhZGRjaHN0ciIJCQlAMwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImFkZG5zdHIiIAkJCUA0CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiYWRkc3RyIiAgCQkJQDUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiYWRkbndzdHIiCQkJQDYJTk9OQU1FIDsgbWlzc2luZw0KKzsJImFkZHdzdHIiIAkJCUA3CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJhZGRfd2NoIiAJCQlAOAlOT05BTUUgOyBtaXNzaW5nDQorOwkiYWRkX3djaG5zdHIiICAgICAJCUA5CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJhZGRfd2Noc3RyIiAgICAgIAkJQDEwCU5PTkFNRSA7IG1pc3NpbmcNCisJImF0dHJvZmYiIAkJCUAxMQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImF0dHJvbiIgIAkJCUAxMglOT05BTUUgOyBnZW5lcmF0ZWQNCisJImF0dHJzZXQiIAkJCUAxMwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImF0dHJfZ2V0IgkJCUAxNAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJhdHRyX29mZiIJCQlAMTUJTk9OQU1FIDsgaW1wbGVtZW50ZWQgPDwgTk8hIQ0KKzsJImF0dHJfb24iIAkJCUAxNglOT05BTUUgOyBpbXBsZW1lbnRlZCA8PCBOTyEhDQorCSJhdHRyX3NldCIJCQlAMTcJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJiYXVkcmF0ZSIJCQlAMTgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImJlZXAiICAgIAkJCUAxOQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiYmtnZCIgICAgCQkJQDIwCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiYmtnZHNldCIgCQkJQDIxCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJImJrZ3JuZHNldCIgICAgICAgCQlAMjIJTk9OQU1FIDsgbWlzc2luZw0KKzsJImJrZ3JuZCIgIAkJCUAyMwlOT05BTUUgOyBtaXNzaW5nDQorCSJib3JkZXIiICAJCQlAMjQJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiYm9yZGVyX3NldCIgICAgICAJCUAyNQlOT05BTUUgOyBtaXNzaW5nDQorCSJib3giICAgICAJCQlAMjYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiYm94X3NldCIgCQkJQDI3CU5PTkFNRSA7IG1pc3NpbmcNCisJImNhbl9jaGFuZ2VfY29sb3IiCQlAMjgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImNicmVhayIgIAkJCUAyOQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiY2hnYXQiICAgCQkJQDMwCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiY2xlYXIiICAgCQkJQDMxCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiY2xlYXJvayIgCQkJQDMyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJjbHJ0b2JvdCIJCQlAMzMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJjbHJ0b2VvbCIJCQlAMzQJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJjb2xvcl9jb250ZW50IiAgIAkJQDM1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJDT0xPUl9QQUlSIiAgICAgIAkJQDM2CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiY29weXdpbiIgCQkJQDM3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJjdXJzX3NldCIJCQlAMzgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImRlZl9wcm9nX21vZGUiICAgCQlAMzkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImRlZl9zaGVsbF9tb2RlIiAgCQlANDAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImRlbGF5X291dHB1dCIgICAgCQlANDEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImRlbGNoIiAgIAkJCUA0MglOT05BTUUgOyBnZW5lcmF0ZWQNCisJImRlbHNjcmVlbiIgICAgICAgCQlANDMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImRlbHdpbiIgIAkJCUA0NAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZGVsZXRlbG4iCQkJQDQ1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiZGVyd2luIiAgCQkJQDQ2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJkb3VwZGF0ZSIJCQlANDcJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImR1cHdpbiIgIAkJCUA0OAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZWNobyIgICAgCQkJQDQ5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJlY2hvY2hhciIJCQlANTAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiZWNob193Y2hhciIgICAgICAJCUA1MQlOT05BTUUgOyBtaXNzaW5nDQorCSJlbmR3aW4iICAJCQlANTIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImVyYXNlY2hhciIgICAgICAgCQlANTMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJlcmFzZV93Y2hhciIgICAgIAkJQDU0CU5PTkFNRSA7IG1pc3NpbmcNCisJImZpbHRlciIgIAkJCUA1NQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZmxhc2giICAgCQkJQDU2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJmbHVzaGlucCIJCQlANTcJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJnZXRia2dkIiAJCQlANTgJTk9OQU1FIDsgbWlzc2luZw0KKzsJImdldGJrZ3JuZCIgICAgICAgCQlANTkJTk9OQU1FIDsgbWlzc2luZw0KKzsJImdldGNjaGFyIgkJCUA2MAlOT05BTUUgOyBtaXNzaW5nDQorCSJnZXRjaCIgICAJCQlANjEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJnZXRuc3RyIiAJCQlANjIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiZ2V0bl93c3RyIiAgICAgICAJCUA2MwlOT05BTUUgOyBtaXNzaW5nDQorCSJnZXRzdHIiICAJCQlANjQJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiZ2V0X3djaCIgCQkJQDY1CU5PTkFNRSA7IG1pc3NpbmcNCisJImdldHdpbiIgIAkJCUA2NglOT05BTUUgOyBub3QgaW4gWFBHNA0KKzsJImdldF93c3RyIgkJCUA2NwlOT05BTUUgOyBtaXNzaW5nDQorCSJoYWxmZGVsYXkiICAgICAgIAkJQDY4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJoYXNfY29sb3JzIiAgICAgIAkJQDY5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJoYXNfaWMiICAJCQlANzAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImhhc19pbCIgIAkJCUA3MQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiaGxpbmUiICAgCQkJQDcyCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJImhsaW5lX3NldCIgICAgICAgCQlANzMJTk9OQU1FIDsgbWlzc2luZw0KKwkiaWRjb2siICAgCQkJQDc0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpZGxvayIgICAJCQlANzUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImltbWVkb2siIAkJCUA3NglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiaW5jaCIgICAgCQkJQDc3CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5jaG5zdHIiCQkJQDc4CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5jaHN0ciIgCQkJQDc5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5pdHNjciIgCQkJQDgwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpbml0X2NvbG9yIiAgICAgIAkJQDgxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpbml0X3BhaXIiICAgICAgIAkJQDgyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpbm5zdHIiICAJCQlAODMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiaW5ud3N0ciIgCQkJQDg0CU5PTkFNRSA7IG1pc3NpbmcNCisJImluc2NoIiAgIAkJCUA4NQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImluc2RlbGxuIgkJCUA4NglOT05BTUUgOyBnZW5lcmF0ZWQNCisJImluc2VydGxuIgkJCUA4NwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImluc25zdHIiIAkJCUA4OAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImluc3N0ciIgIAkJCUA4OQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImluc3RyIiAgIAkJCUA5MAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJpbnNfbndzdHIiICAgICAgIAkJQDkxCU5PTkFNRSA7IG1pc3NpbmcNCis7CSJpbnNfd2NoIiAJCQlAOTIJTk9OQU1FIDsgbWlzc2luZw0KKzsJImluc193c3RyIgkJCUA5MwlOT05BTUUgOyBtaXNzaW5nDQorCSJpbnRyZmx1c2giICAgICAgIAkJQDk0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkiaW53c3RyIiAgCQkJQDk1CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJpbl93Y2giICAJCQlAOTYJTk9OQU1FIDsgbWlzc2luZw0KKzsJImluX3djaHN0ciIgICAgICAgCQlAOTcJTk9OQU1FIDsgbWlzc2luZw0KKzsJImluX3djaG50ciIgICAgICAgCQlAOTgJTk9OQU1FIDsgbWlzc2luZw0KKwkiaXNlbmR3aW4iCQkJQDk5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpc19saW5ldG91Y2hlZCIgIAkJQDEwMAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiaXNfd2ludG91Y2hlZCIgICAJCUAxMDEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImtleW5hbWUiIAkJCUAxMDIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJrZXlfbmFtZSIJCQlAMTAzCU5PTkFNRSA7IG1pc3NpbmcNCisJImtleXBhZCIgIAkJCUAxMDQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImtpbGxjaGFyIgkJCUAxMDUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJraWxsd2NoYXIiICAgICAgIAkJQDEwNglOT05BTUUgOyBtaXNzaW5nDQorCSJsZWF2ZW9rIiAJCQlAMTA3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJsb25nbmFtZSIJCQlAMTA4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtZXRhIiAgICAJCQlAMTA5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtb3ZlIiAgICAJCQlAMTEwCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZhZGRjaCIgCQkJQDExMQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12YWRkY2huc3RyIiAgICAgCQlAMTEyCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZhZGRjaHN0ciIgICAgICAJCUAxMTMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmFkZG5zdHIiICAgICAgIAkJQDExNAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12YWRkc3RyIgkJCUAxMTUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZhZGRud3N0ciIgICAgICAJCUAxMTYJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12YWRkd3N0ciIgICAgICAgCQlAMTE3CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdmFkZF93Y2giICAgICAgIAkJQDExOAlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZhZGRfd2NobnN0ciIgICAJCUAxMTkJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12YWRkX3djaHN0ciIgICAgCQlAMTIwCU5PTkFNRSA7IG1pc3NpbmcNCisJIm12Y2hnYXQiIAkJCUAxMjEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmN1ciIgICAJCQlAMTIyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtdmRlbGNoIiAJCQlAMTIzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZkZXJ3aW4iCQkJQDEyNAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibXZnZXRjaCIgCQkJQDEyNQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12Z2V0bnN0ciIgICAgICAgCQlAMTI2CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIm12Z2V0bl93c3RyIiAgICAgCQlAMTI3CU5PTkFNRSA7IG1pc3NpbmcNCisJIm12Z2V0c3RyIgkJCUAxMjgJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZnZXRfd2NoIiAgICAgICAJCUAxMjkJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12Z2V0X3dzdHIiICAgICAgCQlAMTMwCU5PTkFNRSA7IG1pc3NpbmcNCisJIm12aGxpbmUiIAkJCUAxMzEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZobGluZV9zZXQiICAgICAJCUAxMzIJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZpbmNoIiAgCQkJQDEzMwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12aW5jaG5zdHIiICAgICAgCQlAMTM0CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZpbmNoc3RyIiAgICAgICAJCUAxMzUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmlubnN0ciIJCQlAMTM2CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIm12aW5ud3N0ciIgICAgICAgCQlAMTM3CU5PTkFNRSA7IG1pc3NpbmcNCisJIm12aW5zY2giIAkJCUAxMzgJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmluc25zdHIiICAgICAgIAkJQDEzOQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12aW5zc3RyIgkJCUAxNDAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmluc3RyIiAJCQlAMTQxCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIm12aW5zX253c3RyIiAgICAgCQlAMTQyCU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdmluc193Y2giICAgICAgIAkJQDE0MwlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZpbnNfd3N0ciIgICAgICAJCUAxNDQJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12aW53c3RyIgkJCUAxNDUJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12aW5fd2NoIgkJCUAxNDYJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12aW5fd2Noc3RyIiAgICAgCQlAMTQ3CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdmluX3djaG50ciIgICAgIAkJQDE0OAlOT05BTUUgOyBtaXNzaW5nDQorCSJtdnByaW50dyIJCQlAMTQ5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtdnNjYW53IiAJCQlAMTUwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtdnZsaW5lIiAJCQlAMTUxCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIm12dmxpbmVfc2V0IiAgICAgCQlAMTUyCU5PTkFNRSA7IG1pc3NpbmcNCisJIm12d2FkZGNoIgkJCUAxNTMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndhZGRjaG5zdHIiICAgIAkJQDE1NAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2FkZGNoc3RyIiAgICAgCQlAMTU1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3YWRkbnN0ciIgICAgICAJCUAxNTYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndhZGRzdHIiICAgICAgIAkJQDE1NwlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdndhZGRud3N0ciIgICAgIAkJQDE1OAlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3YWRkd3N0ciIgICAgICAJCUAxNTkJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2FkZF93Y2giICAgICAgCQlAMTYwCU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndhZGRfd2NobnN0ciIgIAkJQDE2MQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3YWRkX3djaHN0ciIgICAJCUAxNjIJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZ3Y2hnYXQiCQkJQDE2MwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2RlbGNoIgkJCUAxNjQJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndnZXRjaCIJCQlAMTY1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3Z2V0bnN0ciIgICAgICAJCUAxNjYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZ3Z2V0bl93c3RyIiAgICAJCUAxNjcJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZ3Z2V0c3RyIiAgICAgICAJCUAxNjgJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZ3Z2V0X3djaCIgICAgICAJCUAxNjkJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2dldF93c3RyIiAgICAgCQlAMTcwCU5PTkFNRSA7IG1pc3NpbmcNCisJIm12d2hsaW5lIgkJCUAxNzEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZ3aGxpbmVfc2V0IiAgICAJCUAxNzIJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZ3aW4iICAgCQkJQDE3MwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibXZ3aW5jaCIgCQkJQDE3NAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2luY2huc3RyIiAgICAgCQlAMTc1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3aW5jaHN0ciIgICAgICAJCUAxNzYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndpbm5zdHIiICAgICAgIAkJQDE3NwlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdndpbm53c3RyIiAgICAgIAkJQDE3OAlOT05BTUUgOyBtaXNzaW5nDQorCSJtdndpbnNjaCIJCQlAMTc5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3aW5zbnN0ciIgICAgICAJCUAxODAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndpbnNzdHIiICAgICAgIAkJQDE4MQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2luc3RyIgkJCUAxODIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZ3aW5zX253c3RyIiAgICAJCUAxODMJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2luc193Y2giICAgICAgCQlAMTg0CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndpbnNfd3N0ciIgICAgIAkJQDE4NQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3aW53c3RyIiAgICAgICAJCUAxODYJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2luX3djaCIgICAgICAgCQlAMTg3CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndpbl93Y2huc3RyIiAgIAkJQDE4OAlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3aW5fd2Noc3RyIiAgICAJCUAxODkJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZ3cHJpbnR3IiAgICAgICAJCUAxOTAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm12d3NjYW53IgkJCUAxOTEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm12d3ZsaW5lIgkJCUAxOTIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZ3dmxpbmVfc2V0IiAgICAJCUAxOTMJTk9OQU1FIDsgbWlzc2luZw0KKwkibmFwbXMiICAgCQkJQDE5NAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibmV3cGFkIiAgCQkJQDE5NQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibmV3dGVybSIgCQkJQDE5NglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibmV3d2luIiAgCQkJQDE5NwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibmwiICAgICAgCQkJQDE5OAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm9jYnJlYWsiCQkJQDE5OQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm9kZWxheSIgCQkJQDIwMAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm9lY2hvIiAgCQkJQDIwMQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm9ubCIgICAgCQkJQDIwMglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm9xaWZsdXNoIiAgICAgICAJCUAyMDMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm5vcmF3IiAgIAkJCUAyMDQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm5vdGltZW91dCIgICAgICAgCQlAMjA1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJvdmVybGF5IiAJCQlAMjA2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJvdmVyd3JpdGUiICAgICAgIAkJQDIwNwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicGFpcl9jb250ZW50IiAgICAJCUAyMDgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIlBBSVJfTlVNQkVSIiAgICAgCQlAMjA5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkicGVjaG9jaGFyIiAgICAgICAJCUAyMTAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJwZWNob193Y2hhciIgICAgIAkJQDIxMQlOT05BTUUgOyBtaXNzaW5nDQorCSJwbm91dHJlZnJlc2giICAgIAkJQDIxMglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicHJlZnJlc2giCQkJQDIxMwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicHJpbnR3IiAgCQkJQDIxNAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicHV0cCIgICAgCQkJQDIxNQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicHV0d2luIiAgCQkJQDIxNglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicWlmbHVzaCIgCQkJQDIxNwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicmF3IiAgICAgCQkJQDIxOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicmVkcmF3d2luIiAgICAgICAJCUAyMTkJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJyZWZyZXNoIiAJCQlAMjIwCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkicmVzZXR0eSIgCQkJQDIyMQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicmVzZXRfcHJvZ19tb2RlIiAJCUAyMjIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInJlc2V0X3NoZWxsX21vZGUiCQlAMjIzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJyaXBvZmZsaW5lIiAgICAgIAkJQDIyNAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2F2ZXR0eSIgCQkJQDIyNQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2NhbnciICAgCQkJQDIyNglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2NyX2R1bXAiCQkJQDIyNwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2NyX2luaXQiCQkJQDIyOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2NybCIgICAgCQkJQDIyOQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJInNjcm9sbCIgIAkJCUAyMzAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJzY3JvbGxvayIJCQlAMjMxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzY3JfcmVzdG9yZSIgICAgIAkJQDIzMglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2NyX3NldCIgCQkJQDIzMwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJInNldGNjaGFyIgkJCUAyMzQJTk9OQU1FIDsgbWlzc2luZw0KKwkic2V0c2NycmVnIiAgICAgICAJCUAyMzUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJzZXRfdGVybSIJCQlAMjM2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzbGtfYXR0cm9mZiIgICAgIAkJQDIzNwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJInNsa19hdHRyX29mZiIgICAgCQlAMjM4CU5PTkFNRSA7IG1pc3NpbmcNCisJInNsa19hdHRyb24iICAgICAgCQlAMjM5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkic2xrX2F0dHJfb24iICAgICAJCUAyNDAJTk9OQU1FIDsgbWlzc2luZw0KKwkic2xrX2F0dHJzZXQiICAgICAJCUAyNDEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJzbGtfYXR0cl9zZXQiICAgIAkJQDI0MglOT05BTUUgOyBtaXNzaW5nDQorCSJzbGtfY2xlYXIiICAgICAgIAkJQDI0MwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2xrX2luaXQiCQkJQDI0NAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2xrX2xhYmVsIiAgICAgICAJCUAyNDUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInNsa19ub3V0cmVmcmVzaCIgCQlAMjQ2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzbGtfcmVmcmVzaCIgICAgIAkJQDI0NwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2xrX3Jlc3RvcmUiICAgICAJCUAyNDgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInNsa19zZXQiIAkJCUAyNDkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInNsa190b3VjaCIgICAgICAgCQlAMjUwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkic2xrX3dzZXQiCQkJQDI1MQlOT05BTUUgOyBtaXNzaW5nDQorCSJzdGFuZG91dCIJCQlAMjUyCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkic3RhbmRlbmQiCQkJQDI1MwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJInN0YXJ0X2NvbG9yIiAgICAgCQlAMjU0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzdWJwYWQiICAJCQlAMjU1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzdWJ3aW4iICAJCQlAMjU2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzeW5jb2siICAJCQlAMjU3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ0ZXJtYXR0cnMiICAgICAgIAkJQDI1OAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkidGVybW5hbWUiCQkJQDI1OQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkidGlnZXRmbGFnIiAgICAgICAJCUAyNjAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInRpZ2V0bnVtIgkJCUAyNjEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInRpZ2V0c3RyIgkJCUAyNjIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ0aW1lb3V0IiAJCQlAMjYzCU5PTkFNRSA7IGltcGxlbWVudGVkIDw8IE5PISENCisJInR5cGVhaGVhZCIgICAgICAgCQlAMjY0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ1bmdldGNoIiAJCQlAMjY1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkidW5nZXRfd2NoIiAgICAgICAJCUAyNjYJTk9OQU1FIDsgbWlzc2luZw0KKwkidW50b3VjaHdpbiIgICAgICAJCUAyNjcJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ1c2VfZW52IiAJCQlAMjY4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ2aWRhdHRyIiAJCQlAMjY5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkidmlkX2F0dHIiCQkJQDI3MAlOT05BTUUgOyBtaXNzaW5nDQorCSJ2aWRwdXRzIiAJCQlAMjcxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkidmlkX3B1dHMiCQkJQDI3MglOT05BTUUgOyBtaXNzaW5nDQorCSJ2bGluZSIgICAJCQlAMjczCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJInZsaW5lX3NldCIgICAgICAgCQlAMjc0CU5PTkFNRSA7IG1pc3NpbmcNCisJInZ3cHJpbnR3IgkJCUAyNzUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ2d19wcmludHciICAgICAgIAkJQDI3NglOT05BTUUgOyBpbXBsZW1lbnRlZCA8PCBOTyEhDQorCSJ2d3NjYW53IiAJCQlAMjc3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkidndfc2NhbnciCQkJQDI3OAlOT05BTUUgOyBpbXBsZW1lbnRlZCA8PCBOTyEhDQorCSJ3YWRkY2giICAJCQlAMjc5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3YWRkY2huc3RyIiAgICAgIAkJQDI4MAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2FkZGNoc3RyIiAgICAgICAJCUAyODEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3YWRkbnN0ciIJCQlAMjgyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3YWRkc3RyIiAJCQlAMjgzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIndhZGR3c3RyIgkJCUAyODQJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndhZGRfd2NoIgkJCUAyODUJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndhZGRfd2NobnN0ciIgICAgCQlAMjg2CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3YWRkX3djaHN0ciIgICAgIAkJQDI4NwlOT05BTUUgOyBtaXNzaW5nDQorCSJ3YXR0cm9uIiAJCQlAMjg4CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2F0dHJvZmYiCQkJQDI4OQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndhdHRyc2V0IgkJCUAyOTAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3YXR0cl9nZXQiICAgICAgIAkJQDI5MQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndhdHRyX29uIgkJCUAyOTIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndhdHRyX29mZiIgICAgICAgCQlAMjkzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid2F0dHJfc2V0IiAgICAgICAJCUAyOTQJTk9OQU1FIDsgaW1wbGVtZW50ZWQgPDwgTk8hIQ0KKwkid2JrZ2QiICAgCQkJQDI5NQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2JrZ2RzZXQiCQkJQDI5NglOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJ3Ymtncm5kc2V0IiAgICAgIAkJQDI5NwlOT05BTUUgOyBtaXNzaW5nDQorOwkid2JrZ3JuZCIgCQkJQDI5OAlOT05BTUUgOyBtaXNzaW5nDQorCSJ3Ym9yZGVyIiAJCQlAMjk5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid2JvcmRlcl9zZXQiICAgICAJCUAzMDAJTk9OQU1FIDsgbWlzc2luZw0KKwkid2NoZ2F0IiAgCQkJQDMwMQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2NsZWFyIiAgCQkJQDMwMglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2NscnRvYm90IiAgICAgICAJCUAzMDMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndjbHJ0b2VvbCIgICAgICAgCQlAMzA0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3Y3Vyc3luY3VwIiAgICAgIAkJQDMwNQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2RlbGNoIiAgCQkJQDMwNglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2RlbGV0ZWxuIiAgICAgICAJCUAzMDcJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3ZWNob2NoYXIiICAgICAgIAkJQDMwOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJIndlY2hvX3djaGFyIiAgICAgCQlAMzA5CU5PTkFNRSA7IG1pc3NpbmcNCisJIndlcmFzZSIgIAkJCUAzMTAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3Z2V0Ymtncm5kIiAgICAgIAkJQDMxMQlOT05BTUUgOyBtaXNzaW5nDQorCSJ3Z2V0Y2giICAJCQlAMzEyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3Z2V0bnN0ciIJCQlAMzEzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid2dldG5fd3N0ciIgICAgICAJCUAzMTQJTk9OQU1FIDsgbWlzc2luZw0KKwkid2dldHN0ciIgCQkJQDMxNQlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJ3Z2V0X3djaCIJCQlAMzE2CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3Z2V0X3dzdHIiICAgICAgIAkJQDMxNwlOT05BTUUgOyBtaXNzaW5nDQorCSJ3aGxpbmUiICAJCQlAMzE4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid2hsaW5lX3NldCIgICAgICAJCUAzMTkJTk9OQU1FIDsgbWlzc2luZw0KKwkid2luY2giICAgCQkJQDMyMAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndpbmNobnN0ciIgICAgICAgCQlAMzIxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3aW5jaHN0ciIJCQlAMzIyCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2lubnN0ciIgCQkJQDMyMwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJIndpbm53c3RyIgkJCUAzMjQJTk9OQU1FIDsgbWlzc2luZw0KKwkid2luc2NoIiAgCQkJQDMyNQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2luc2RlbGxuIiAgICAgICAJCUAzMjYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndpbnNlcnRsbiIgICAgICAgCQlAMzI3CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2luc25zdHIiCQkJQDMyOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2luc3N0ciIgCQkJQDMyOQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndpbnN0ciIgIAkJCUAzMzAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkid2luc19ud3N0ciIgICAgICAJCUAzMzEJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndpbnNfd2NoIgkJCUAzMzIJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndpbnNfd3N0ciIgICAgICAgCQlAMzMzCU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3aW53c3RyIiAJCQlAMzM0CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3aW5fd2NoIiAJCQlAMzM1CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3aW5fd2NobnN0ciIgICAgIAkJQDMzNglOT05BTUUgOyBtaXNzaW5nDQorOwkid2luX3djaHN0ciIgICAgICAJCUAzMzcJTk9OQU1FIDsgbWlzc2luZw0KKwkid21vdmUiICAgCQkJQDMzOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid25vdXRyZWZyZXNoIiAgICAJCUAzMzkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndwcmludHciIAkJCUAzNDAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndyZWRyYXdsbiIgICAgICAgCQlAMzQxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3cmVmcmVzaCIJCQlAMzQyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3cmVzaXplIiAJCQlAMzQzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3c2NhbnciICAJCQlAMzQ0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3c2NybCIgICAJCQlAMzQ1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3c2V0c2NycmVnIiAgICAgIAkJQDM0NglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid3N0YW5kb3V0IiAgICAgICAJCUAzNDcJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3c3RhbmRlbmQiICAgICAgIAkJQDM0OAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndzeW5jZG93biIgICAgICAgCQlAMzQ5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3c3luY3VwIiAJCQlAMzUwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3dGltZW91dCIJCQlAMzUxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3dG91Y2hsbiIJCQlAMzUyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid3VuY3RybCIgCQkJQDM1MwlOT05BTUUgOyBtaXNzaW5nDQorCSJ3dmxpbmUiICAJCQlAMzU0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid3ZsaW5lX3NldCIgICAgICAJCUAzNTUJTk9OQU1FIDsgbWlzc2luZw0KKw0KKwkiZ2V0bW91c2UiCQkJQDM1NglOT05BTUUNCisJInVuZ2V0bW91c2UiCQkJQDM1NwlOT05BTUUNCisJIm1vdXNlbWFzayIJCQlAMzU4CU5PTkFNRQ0KKwkid2VuY2xvc2UiCQkJQDM1OQlOT05BTUUNCisJIm1vdXNlaW50ZXJ2YWwiCQkJQDM2MAlOT05BTUUNCisNCis7IGZyb20gdW5jdHJsLmgNCisJInVuY3RybCIJCQlAMzYxCU5PTkFNRQ0KKw0KKzsgcHVibGljcyBmb3IgdHJhY2luZw0KKwkiX3RyYWNlZiIJCQlANDAwCU5PTkFNRQ0KKwkiX3RyYWNlZHVtcCIJCQlANDAxCU5PTkFNRQ0KKwkiX3RyYWNlYXR0ciIJCQlANDAyCU5PTkFNRQ0KKwkiX3RyYWNlY2hhciIJCQlANDAzCU5PTkFNRQ0KKwkiX3RyYWNlbW91c2UiCQkJQDQwNAlOT05BTUUNCisJInRyYWNlIgkJCQlANDA1CU5PTkFNRQ0KKw0KKzsqKioqKioqKioqDQorOyogdGVybS5oICoNCis7KioqKioqKioqKg0KKwkiYm9vbG5hbWVzIgkJCUA2MDAJTk9OQU1FIDsgdmFyaWFibGUNCisJImJvb2xjb2RlcyIJCQlANjAxCU5PTkFNRSA7IHZhcmlhYmxlDQorCSJib29sZm5hbWVzIgkJCUA2MDIJTk9OQU1FIDsgdmFyaWFibGUNCisJIm51bW5hbWVzIgkJCUA2MDMJTk9OQU1FIDsgdmFyaWFibGUNCisJIm51bWNvZGVzIgkJCUA2MDQJTk9OQU1FIDsgdmFyaWFibGUNCisJIm51bWZuYW1lcyIJCQlANjA1CU5PTkFNRSA7IHZhcmlhYmxlDQorCSJzdHJuYW1lcyIJCQlANjA2CU5PTkFNRSA7IHZhcmlhYmxlDQorCSJzdHJjb2RlcyIJCQlANjA4CU5PTkFNRSA7IHZhcmlhYmxlDQorCSJzdHJmbmFtZXMiCQkJQDYwOQlOT05BTUUgOyB2YXJpYWJsZQ0KKw0KKzsgaW50ZXJuYWxzDQorCSJfbmNfcmVhZF9lbnRyeSIJCUA2MjAJTk9OQU1FDQorCSJfbmNfcmVhZF9maWxlX2VudHJ5IgkJQDYyMQlOT05BTUUNCisJIl9uY19maXJzdF9uYW1lIgkJQDYyMglOT05BTUUNCisJIl9uY19uYW1lX21hdGNoIgkJQDYyMwlOT05BTUUNCisJIl9uY19yZWFkX3Rlcm1jYXBfZW50cnkiCUA2MjQJTk9OQU1FDQorCSJfbmNfZmFsbGJhY2siCQkJQDYyNQlOT05BTUUNCisNCis7IGVudHJ5IHBvaW50cw0KKwkic2V0X2N1cnRlcm0iCQkJQDY0MAlOT05BTUUNCisJImRlbF9jdXJ0ZXJtIgkJCUA2NDEJTk9OQU1FDQorDQorOyBlbnRyeSBwb2ludHMNCis7CSJwdXRwIgkJCQlANjQyCU5PTkFNRQk7IGFscmVhZHkgZGVmaW5lZA0KKwkicmVzdGFydHRlcm0iCQkJQDY0MwlOT05BTUUNCisJInNldHVwdGVybSIJCQlANjQ0CU5PTkFNRQ0KKwkidGdldGVudCIJCQlANjQ1CU5PTkFNRQ0KKwkidGdldGZsYWciCQkJQDY0NglOT05BTUUNCisJInRnZXRudW0iCQkJQDY0NwlOT05BTUUNCisJInRnZXRzdHIiCQkJQDY0OAlOT05BTUUNCisJInRnb3RvIgkJCQlANjQ5CU5PTkFNRQ0KKzsJInRpZ2V0ZmxhZyIJCQlANjUwCU5PTkFNRQk7IGFscmVhZHkgZGVmaW5lZA0KKzsJInRpZ2V0bnVtIgkJCUA2NTEJTk9OQU1FCTsgYWxyZWFkeSBkZWZpbmVkDQorOwkidGlnZXRzdHIiCQkJQDY1MglOT05BTUUJOyBhbHJlYWR5IGRlZmluZWQNCisJInRwYXJtIgkJCQlANjUzCU5PTkFNRQ0KKwkidHBhcmFtIgkJCUA2NTQJTk9OQU1FDQorCSJ0cHV0cyIJCQkJQDY1NQlOT05BTUUNCisNCis7KioqKioqKioqKioqKg0KKzsqIHRlcm1jYXAuaCAqDQorOyoqKioqKioqKioqKioNCis7IHRoZSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZGVmaW5lZCBpbiB0ZXJtLmgNCisJIlBDIgkJCQlANjYwCU5PTkFNRQ0KKwkiVVAiCQkJCUA2NjEJTk9OQU1FDQorCSJCQyIJCQkJQDY2MglOT05BTUUNCisJIm9zcGVlZCIJCQlANjYzCU5PTkFNRQ0KKw0KKzsqKioqKioqKioqKioqKioqDQorOyogdGVybV9lbnRyeS5oICoNCis7KioqKioqKioqKioqKioqKg0KKwkiX25jX2hlYWQiCQkJQDcwMAlOT05BTUUNCisJIl9uY190YWlsIgkJCUA3MDEJTk9OQU1FDQorDQorOyBhbGxvY19lbnRyeS5jOiBlbGVtZW50YXJ5IGFsbG9jYXRpb24gY29kZQ0KKwkiX25jX2luaXRfZW50cnkiCQlANzAyCU5PTkFNRQ0KKwkiX25jX3NhdmVfc3RyIgkJCUA3MDMJTk9OQU1FDQorCSJfbmNfbWVyZ2VfZW50cnkiCQlANzA0CU5PTkFNRQ0KKwkiX25jX3dyYXBfZW50cnkiCQlANzA1CU5PTkFNRQ0KKw0KKzsgcGFyc2VfZW50cnkuYzogZW50cnktcGFyc2luZyBjb2RlDQorCSJfbmNfcGFyc2VfZW50cnkiCQlANzA2CU5PTkFNRQ0KKwkiX25jX2NhcGNtcCIJCQlANzA3CU5PTkFNRQ0KKw0KKzsgd3JpdGVfZW50cnkuYzogd3JpdGluZyBhbiBlbnRyeSB0byB0aGUgZmlsZSBzeXN0ZW0NCisJIl9uY193cml0ZV9lbnRyeSIJCUA3MDgJTk9OQU1FDQorDQorOyBjb21wX3BhcnNlLmM6IGVudHJ5IGxpc3QgaGFuZGxpbmcNCisJIl9uY19yZWFkX2VudHJ5X3NvdXJjZSIJCUA3MDkJTk9OQU1FDQorCSJfbmNfZW50cnlfbWF0Y2giCQlANzEwCU5PTkFNRQ0KKwkiX25jX3Jlc29sdmVfdXNlcyIJCUA3MTEJTk9OQU1FDQorCSJfbmNfZnJlZV9lbnRyaWVzIgkJQDcxMglOT05BTUUNCisNCis7KioqKioqKioqDQorOyogdGljLmggKg0KKzsqKioqKioqKioNCis7CSJfbmNfdHJhY2luZyIJCQlAODAwCU5PTkFNRQk7IGRlZmluZWQgYmVsb3cNCis7CSJfbmNfdHJhY2VmIgkJCUA4MDEJTk9OQU1FCTsgbWlzc2luZw0KKzsJIl9uY192aXNidWYiCQkJQDgwMglOT05BTUUJOyBkZWZpbmVkIGJlbG93DQorDQorCSJfbmNfY3Vycl90b2tlbiIJCUA4MDMJTk9OQU1FDQorDQorCSJfbmNfaW5mb19oYXNoX3RhYmxlIgkJQDgwNAlOT05BTUUNCisJIl9uY19jYXBfaGFzaF90YWJsZSIJCUA4MDUJTk9OQU1FDQorDQorCSJfbmNfY2FwYWxpYXNfdGFibGUiCQlAODA2CU5PTkFNRQ0KKwkiX25jX2luZm9hbGlhc190YWJsZSIJCUA4MDcJTk9OQU1FDQorCSJfbmNfZ2V0X3RhYmxlIgkJCUA4MDgJTk9OQU1FDQorDQorOyBjb21wX2hhc2guYzogbmFtZSBsb29rdXANCisJIl9uY19maW5kX2VudHJ5IgkJQDgwOQlOT05BTUUNCisJIl9uY19maW5kX3R5cGVfZW50cnkiCQlAODEwCU5PTkFNRQ0KKw0KKzsgY29tcF9zY2FuLmM6IGxleGljYWwgYW5hbHlzaXMNCisJIl9uY19nZXRfdG9rZW4iCQkJQDgxMQlOT05BTUUNCisJIl9uY19wdXNoX3Rva2VuIgkJQDgxMglOT05BTUUNCisJIl9uY19yZXNldF9pbnB1dCIJCUA4MTMJTk9OQU1FDQorCSJfbmNfcGFuaWNfbW9kZSIJCUA4MTQJTk9OQU1FDQorCSJfbmNfY3Vycl9saW5lIgkJCUA4MTUJTk9OQU1FDQorCSJfbmNfY3Vycl9jb2wiCQkJQDgxNglOT05BTUUNCisJIl9uY19jdXJyX2ZpbGVfcG9zIgkJQDgxNwlOT05BTUUNCisJIl9uY19jb21tZW50X3N0YXJ0IgkJQDgxOAlOT05BTUUNCisJIl9uY19jb21tZW50X2VuZCIJCUA4MTkJTk9OQU1FDQorCSJfbmNfc3ludGF4IgkJCUA4MjAJTk9OQU1FDQorCSJfbmNfc3RhcnRfbGluZSIJCUA4MjEJTk9OQU1FDQorDQorOyBjb21wX2Vycm9yLmM6IHdhcm5pbmcgJiBhYm9ydCBtZXNzYWdlcw0KKwkiX25jX3NldF9zb3VyY2UiCQlAODIyCU5PTkFNRQ0KKwkiX25jX2dldF90eXBlIgkJCUA4MjMJTk9OQU1FDQorCSJfbmNfc2V0X3R5cGUiCQkJQDgyNAlOT05BTUUNCisJIl9uY19zeXNlcnJfYWJvcnQiCQlAODI1CU5PTkFNRQ0KKwkiX25jX2Vycl9hYm9ydCIJCQlAODI2CU5PTkFNRQ0KKwkiX25jX3dhcm5pbmciCQkJQDgyNwlOT05BTUUNCisJIl9uY19zdXBwcmVzc193YXJuaW5ncyIJCUA4MjgJTk9OQU1FDQorDQorOyBjYXB0b2luZm8uYzogY2FwYWJpbGl0eSBjb252ZXJzaW9uDQorCSJfbmNfY2FwdG9pbmZvIgkJCUA4MjkJTk9OQU1FDQorCSJfbmNfaW5mb3RvY2FwIgkJCUA4MzAJTk9OQU1FDQorDQorOyBjb21wX21haW4uYzogY29tcGlsZXIgbWFpbg0KKzsJIl9uY19wcm9nbmFtZSIJCQlAODMxCU5PTkFNRQk7IG5vIG5lZWQgdG8gZXhwb3J0IGl0DQorDQorDQorOyAqKioqKioqKioqKioqKioqKg0KKzsgTkN1cnNlcyBpbnRlcm5hbHMgLS0ganVzdCBmb3IgcHJvZ3MvKi5leGUgYW5kIHRoZSBsaWJyYXJ5IGl0c2VsZi4NCis7ICoqKioqKioqKioqKioqKioqDQorDQorOyBGb3IgYnJva2VuIGxpbmtlcnMNCis7CSJfbmNfc2NyZWVuIgkJCUAxMDAwCU5PTkFNRQ0KKzsJIl9uY19hbGxvY19zY3JlZW4iCQlAMTAwMQlOT05BTUUNCis7CSJfbmNfc2V0X3NjcmVlbiIJCUAxMDAyCU5PTkFNRQ0KKw0KKzsgRm9yIG5vdCBzbyBicm9rZW4gbGlua2Vycw0KKwkiU1AiCQkJCUAxMDAzCU5PTkFNRQ0KKw0KKzsgV2hvIGtub3dzIHdoYXQgdGhpcyBpcyBmb3INCisJIl9zbGtfaW5pdCIJCQlAMTAwNAlOT05BTUUNCisJInNsa19pbml0aWFsaXplIgkJQDEwMDUJTk9OQU1FDQorDQorOyBUcmFjaW5nIC0tIGFsbCBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5DQorCSJfbmNfdHJhY2luZyIJCQlAMTAxMAlOT05BTUUNCisJIl9uY190cHV0c190cmFjZSIJCUAxMDExCU5PTkFNRQ0KKwkiX25jX3Zpc2J1ZiIJCQlAMTAxMglOT05BTUUNCisNCis7IGxpYl9hY3MuYw0KKwkiaW5pdF9hY3MiCQkJQDEwMTMJTk9OQU1FDQorDQorOyBsaWJfbXZjdXIuYw0KKwkiX25jX212Y3VyX2luaXQiCQlAMTAxNAlOT05BTUUNCisJIl9uY19tdmN1cl93cmFwIgkJQDEwMTUJTk9OQU1FDQorCSJfbmNfbXZjdXJfc2Nyb2xsbiIJCUAxMDE2CU5PTkFNRQ0KKw0KKzsgbGliX21vdXNlLmMNCisJIl9uY19tb3VzZV9pbml0IgkJQDEwMTcJTk9OQU1FDQorCSJfbmNfbW91c2VfZXZlbnQiCQlAMTAxOAlOT05BTUUNCisJIl9uY19tb3VzZV9pbmxpbmUiICAgICAgICAJQDEwMTkJTk9OQU1FDQorCSJfbmNfbW91c2VfcGFyc2UiCQlAMTAyMAlOT05BTUUNCisJIl9uY19tb3VzZV93cmFwIgkJQDEwMjEJTk9OQU1FDQorCSJfbmNfbW91c2VfcmVzdW1lIgkgICAgICAgIEAxMDIyCU5PTkFNRQ0KKwkiX25jX21heF9jbGlja19pbnRlcnZhbCIJQDEwMjMJTk9OQU1FDQorDQorOyBlbHNld2hlcmUgLi4uDQorCSJfbmNfa2V5cGFkIiAJCQlAMTAyNAlOT05BTUUNCisJIl9uY19tYWtlbmV3IgkJCUAxMDI1CU5PTkFNRQ0KKwkiX25jX291dGNoIgkJCUAxMDI2CU5PTkFNRQ0KKwkiX25jX3JlbmRlciIJCQlAMTAyNwlOT05BTUUNCisJIl9uY193YWRkY2hfbm9zeW5jIgkJQDEwMjgJTk9OQU1FDQorCSJfbmNfc2Nyb2xsX29wdGltaXplIgkJQDEwMjkJTk9OQU1FDQorCSJfbmNfc2Nyb2xsX3dpbmRvdyIJCUAxMDMwCU5PTkFNRQ0KKwkiX25jX3NldHVwc2NyZWVuIgkJQDEwMzEJTk9OQU1FDQorCSJfbmNfYmFja3NwYWNlIgkJCUAxMDMyCU5PTkFNRQ0KKwkiX25jX291dHN0ciIJCQlAMTAzMwlOT05BTUUNCisJIl9uY19zaWduYWxfaGFuZGxlciIJCUAxMDM0CU5PTkFNRQ0KKwkiX25jX3N5bmNob29rIgkJCUAxMDM1CU5PTkFNRQ0KKwkiX25jX3RpbWVkX3dhaXQiCQlAMTAzNglOT05BTUUNCisJIl9uY19kb19jb2xvciIJCQlAMTAzNwlOT05BTUUNCmRpZmYgLS1naXQgYS9taXNjL25jdXJzZXMuc3VwcCBiL21pc2MvbmN1cnNlcy5zdXBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTU4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL25jdXJzZXMuc3VwcApAQCAtMCwwICsxLDIwNSBAQAorIyAkSWQ6IG5jdXJzZXMuc3VwcCx2IDEuNyAyMDA4LzA5LzIwIDE4OjQzOjQyIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGlzIGlzIGEgd2FybmluZy1zdXBwcmVzc2lvbiBmaWxlIGZvciB2YWxncmluZCBhbmQgbmN1cnNlcy4KKyMKKyMgbmN1cnNlcyBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSAtLWRpc2FibGUtbGVha3Mgb3B0aW9uLCB3aGljaAorIyBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gY2FsbCBfbmNfZnJlZWFsbCgpIG9yIF9uY19mcmVlX2FuZF9leGl0KCksIHRvCisjIGZyZWUgYWxsIG9mIG5jdXJzZXMnICJwZXJtYW5lbnQiIG1lbW9yeS4KKyMKKyMgU29tZSBvZiB0aGVzZSBsZWFrcyBjYW4gYmUgZnJlZWQgaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgaXRzIG93biBjbGVhbnVwLAorIyBmb3IgZXhhbXBsZToKKyMJZGVsc2NyZWVuKFNQKTsKKyMJZGVsX2N1cnRlcm0oY3VyX3Rlcm0pOworIyBIb3dldmVyLCBmZXcgYXBwbGljYXRpb25zIGRvIHRoaXMuCisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfYWRkX3RvX3RyeQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOl9uY19hZGRfdG9fdHJ5Cit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfaG9tZV90ZXJtaW5mbworICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOl9uY19ob21lX3Rlcm1pbmZvCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfaW5pdF93YWNzCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46X25jX2luaXRfd2FjcworfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX2tleW5hbWUKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfbmNfa2V5bmFtZQorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX2tleW5hbWVfMgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOnN0cmR1cAorICAgZnVuOl9uY19rZXluYW1lCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfcHJpbnRmX3N0cmluZworICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOl9uY19kb2FsbG9jCisgICBmdW46X25jX3ByaW50Zl9zdHJpbmcKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19yZWFkX3Rlcm10eXBlCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46X25jX3JlYWRfdGVybXR5cGUKKyAgIGZ1bjpfbmNfcmVhZF9maWxlX2VudHJ5Cit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfcmVhZF90ZXJtdHlwZV8yCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46X25jX2RvYWxsb2MKKyAgIGZ1bjpfbmNfcmVhZF90ZXJtdHlwZQorICAgZnVuOl9uY19yZWFkX2ZpbGVfZW50cnkKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19zY3JvbGxfb3B0aW1pemUKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfbmNfaGFzaF9tYXAKKyAgIGZ1bjpfbmNfc2Nyb2xsX29wdGltaXplCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfc2Nyb2xsX29wdGltaXplXzIKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfbmNfZG9hbGxvYworICAgZnVuOl9uY19zY3JvbGxfb3B0aW1pemUKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19zZXR1cHNjcmVlbgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9uY19zZXR1cHNjcmVlbgorICAgZnVuOm5ld3Rlcm0KK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19zZXR1cHNjcmVlbl8yCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46bmV3d2luCisgICBmdW46X25jX3NldHVwc2NyZWVuCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfc2V0dXB0ZXJtXzEKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpzdHJkdXAKKyAgIGZ1bjpfbmNfc2V0dXB0ZXJtCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfc2V0dXB0ZXJtCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46X25jX3NldHVwdGVybQorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3NldHVwc2NyZWVuXzMKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfbmNfbWFrZW5ldworICAgZnVuOm5ld3dpbgorICAgZnVuOl9uY19zZXR1cHNjcmVlbgorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3NldF9idWZmZXIKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpfbmNfc2V0X2J1ZmZlcgorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3RwYXJtX2FuYWx5emUKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfbmNfZG9hbGxvYworICAgZnVuOl9uY190cGFybV9hbmFseXplCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfdHJhY2VfYWxsb2MKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfbmNfZG9hbGxvYworICAgZnVuOl9uY190cmFjZV9hbGxvYworfQorCit7CisgICBuY3Vyc2VzX2xlYWtfc3RhcnRfY29sb3IKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpzdGFydF9jb2xvcgorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfdHBhcm0KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpyZWFsbG9jCisgICBmdW46X25jX2RvYWxsb2MKKyAgIGZ1bjp0cGFybQorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfdHBhcmFtX2ludGVybmFsCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46cmVhbGxvYworICAgZnVuOl9uY19kb2FsbG9jCisgICBmdW46Z2V0X3NwYWNlCisgICBmdW46c2F2ZV9udW1iZXIKKyAgIGZ1bjp0cGFyYW1faW50ZXJuYWwKK30KZGlmZiAtLWdpdCBhL21pc2MvcGFuZWwuZGVmIGIvbWlzYy9wYW5lbC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjZTFkNgotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvcGFuZWwuZGVmCkBAIC0wLDAgKzEsMjAgQEAKK0xJQlJBUlkgcGFuZWw1IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UNCitERVNDUklQVElPTiAiTkN1cnNlcy01LTEtMjAwMDA3MDQsIG1vZHVsZSBwYW5lbCINCitDT0RFIExPQURPTkNBTEwNCitEQVRBIExPQURPTkNBTEwgTk9OU0hBUkVEIE1VTFRJUExFDQorRVhQT1JUUw0KKwkiYm90dG9tX3BhbmVsIglANwlOT05BTUUNCisJImRlbF9wYW5lbCIJQDUJTk9OQU1FDQorCSJoaWRlX3BhbmVsIglAMwlOT05BTUUNCisJIm1vdmVfcGFuZWwiCUAxMwlOT05BTUUNCisJIm5ld19wYW5lbCIJQDgJTk9OQU1FDQorCSJwYW5lbF9hYm92ZSIJQDkJTk9OQU1FDQorCSJwYW5lbF9iZWxvdyIJQDEwCU5PTkFNRQ0KKwkicGFuZWxfaGlkZGVuIglAMTUJTk9OQU1FDQorCSJwYW5lbF91c2VycHRyIglAMTIJTk9OQU1FDQorCSJwYW5lbF93aW5kb3ciCUAxCU5PTkFNRQ0KKwkicmVwbGFjZV9wYW5lbCIJQDE0CU5PTkFNRQ0KKwkic2V0X3BhbmVsX3VzZXJwdHIiCUAxMQlOT05BTUUNCisJInNob3dfcGFuZWwiCUA0CU5PTkFNRQ0KKwkidG9wX3BhbmVsIglANglOT05BTUUNCisJInVwZGF0ZV9wYW5lbHMiCUAyCU5PTkFNRQ0KZGlmZiAtLWdpdCBhL21pc2MvcGFuZWwucmVmIGIvbWlzYy9wYW5lbC5yZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0MDQ1YQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvcGFuZWwucmVmCkBAIC0wLDAgKzEsMTggQEAKK0xJQlJBUlkgcGFuZWwyIElOSVRJTlNUQU5DRQ0KK0RFU0NSSVBUSU9OICdOQ3Vyc2VzIDEuOS45ZS0xIGZvciBPUy8yIC0gcGFuZWwgbGlicmFyeScNCitFWFBPUlRTDQorCSJwYW5lbF93aW5kb3ciCQlAMQ0KKwkidXBkYXRlX3BhbmVscyIJCUAyDQorCSJoaWRlX3BhbmVsIgkJQDMNCisJInNob3dfcGFuZWwiCQlANA0KKwkiZGVsX3BhbmVsIgkJQDUNCisJInRvcF9wYW5lbCIJCUA2DQorCSJib3R0b21fcGFuZWwiCQlANw0KKwkibmV3X3BhbmVsIgkJQDgNCisJInBhbmVsX2Fib3ZlIgkJQDkNCisJInBhbmVsX2JlbG93IgkJQDEwDQorCSJzZXRfcGFuZWxfdXNlcnB0ciIJQDExDQorCSJwYW5lbF91c2VycHRyIgkJQDEyDQorCSJtb3ZlX3BhbmVsIgkJQDEzDQorCSJyZXBsYWNlX3BhbmVsIgkJQDE0DQorCSJwYW5lbF9oaWRkZW4iCQlAMTUNCmRpZmYgLS1naXQgYS9taXNjL3J1bl90aWMuaW4gYi9taXNjL3J1bl90aWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczMjQwMwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvcnVuX3RpYy5pbgpAQCAtMCwwICsxLDE3NCBAQAorIyFAU0hFTExACisjICRJZDogcnVuX3RpYy5pbix2IDEuMjMgMjAwNi8xMC8yOCAxOTo0MzozMCB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYsMjAwMAorIworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGluc3RhbGwgdGVybWluZm8uc3JjIHVzaW5nIHRpYy4gIFdlIHVzZSBhIHNjcmlwdAorIyBiZWNhdXNlIHRoZSBwYXRoIGNoZWNraW5nIGlzIHRvbyBhd2t3YXJkIHRvIGRvIGluIGEgbWFrZWZpbGUuCisjCisjIEFzc3VtZXM6CisjCVRoZSBsZWFmIGRpcmVjdG9yeSBuYW1lcyAobGliLCB0YWJzZXQsIHRlcm1pbmZvKQorIworZWNobyAnKiogQnVpbGRpbmcgdGVybWluZm8gZGF0YWJhc2UsIHBsZWFzZSB3YWl0Li4uJworIworIyBUaGUgc2NyaXB0IGlzIGRlc2lnbmVkIHRvIGJlIHJ1biBmcm9tIHRoZSBtaXNjL01ha2VmaWxlIGFzCisjCW1ha2UgaW5zdGFsbC5kYXRhCisKKzogJHtzdWZmaXg9QFBST0dfRVhUQH0KKzogJHtERVNURElSPUBERVNURElSQH0KKzogJHtwcmVmaXg9QHByZWZpeEB9Cis6ICR7ZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QH0KKzogJHtiaW5kaXI9QGJpbmRpckB9Cis6ICR7dG9wX3NyY2Rpcj1AdG9wX3NyY2RpckB9Cis6ICR7c3JjZGlyPUBzcmNkaXJAfQorOiAke2RhdGFkaXI9QGRhdGFkaXJAfQorOiAke3RpY2Rpcj1AVEVSTUlORk9AfQorOiAke3NvdXJjZT1AVEVSTUlORk9fU1JDQH0KKzogJHtMTl9TPSJATE5fU0AifQorOiAke1RIQVRfQ0M9Y2N9Cis6ICR7VEhJU19DQz1jY30KKzogJHtleHRfZnVuY3M9QE5DVVJTRVNfRVhUX0ZVTkNTQH0KKwordGVzdCAteiAiJHtERVNURElSfSIgJiYgREVTVERJUj0KKworIyBBbGxvdyB0aWMgdG8gcnVuIGVpdGhlciBmcm9tIHRoZSBpbnN0YWxsLXBhdGgsIG9yIGZyb20gdGhlIGJ1aWxkLWRpcmVjdG9yeS4KKyMgRG8gbm90IGRvIHRoaXMgaWYgd2UgYXBwZWFyIHRvIGJlIGNyb3NzLWNvbXBpbGluZy4gIEluIHRoYXQgY2FzZSwgd2UgcmVseQorIyBvbiB0aGUgaG9zdCdzIGNvcHkgb2YgdGljIHRvIGNvbXBpbGUgdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgoraWYgdGVzdCAiJFRIQVRfQ0MiID0gIiRUSElTX0NDIiA7IHRoZW4KK2Nhc2UgIiRQQVRIIiBpbgorOiopIFBBVEg9Li4vcHJvZ3M6Li4vbGliOiR7REVTVERJUn0kYmluZGlyJFBBVEggOzsKKyopIFBBVEg9Li4vcHJvZ3M6Li4vbGliOiR7REVTVERJUn0kYmluZGlyOiRQQVRIIDs7Citlc2FjCitleHBvcnQgUEFUSAorU0hMSUI9InNoICRzcmNkaXIvc2hsaWIiCitlbHNlCisjIENyb3NzLWNvbXBpbGluZywgc28gZG9uJ3Qgc2V0IFBBVEggb3IgcnVuIHNobGliLgorU0hMSUI9CisjIHJlc2V0ICRzdWZmaXgsIHNpbmNlIGl0IGFwcGxpZXMgdG8gdGhlIHRhcmdldCwgbm90IHRoZSBidWlsZCBwbGF0Zm9ybS4KK3N1ZmZpeD0KK2ZpCisKKworIyBzZXQgYW5vdGhlciBlbnYgdmFyIHRoYXQgZG9lc24ndCBnZXQgcmVzZXQgd2hlbiBgc2hsaWInIHJ1bnMsIHNvIGBzaGxpYicgdXNlcworIyB0aGUgUEFUSCB3ZSBqdXN0IHNldC4KK1NITElCX1BBVEg9JFBBVEgKK2V4cG9ydCBTSExJQl9QQVRICisKKyMgc2V0IGEgdmFyaWFibGUgdG8gc2ltcGxpZnkgZW52aXJvbm1lbnQgdXBkYXRlIGluIHNobGliCitTSExJQl9IT1NUPUBob3N0X29zQAorZXhwb3J0IFNITElCX0hPU1QKKworIyBkb24ndCB1c2UgdXNlcidzIFRFUk1JTkZPIHZhcmlhYmxlCitURVJNSU5GTz0ke0RFU1RESVJ9JHRpY2RpciA7IGV4cG9ydCBURVJNSU5GTwordW1hc2sgMDIyCisKKyMgQ29uc3RydWN0IHRoZSBuYW1lIG9mIHRoZSBvbGQgKG9ic29sZXRlKSBwYXRobmFtZSwgZS5nLiwgL3Vzci9saWIvdGVybWluZm8uCitUSUNESVI9YGVjaG8gJFRFUk1JTkZPIHwgc2VkIC1lICdzJS9zaGFyZS9cKFteL10qXCkkJS9saWIvXDElJ2AKKworIyBSZW1vdmUgdGhlIG9sZCB0ZXJtaW5mbyBzdHVmZjsgd2UgZG9uJ3QgY2FyZSBpZiBpdCBleGlzdGVkIGJlZm9yZSwgYW5kIGl0CisjIHdvdWxkIGdlbmVyYXRlIGEgbG90IG9mIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyBpZiB3ZSB0cmllZCB0byBvdmVyd3JpdGUgaXQuCisjIFdlIGV4cGxpY2l0bHkgcmVtb3ZlIGl0cyBjb250ZW50cyByYXRoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGl0c2VsZiwgaW4gY2FzZQorIyB0aGUgZGlyZWN0b3J5IGlzIGFjdHVhbGx5IGEgc3ltYm9saWMgbGluay4KKyggdGVzdCAtZCAiJFRFUk1JTkZPIiAmJiBjZCAkVEVSTUlORk8gJiYgcm0gLWZyID8gMj4vZGV2L251bGwgKQorCitpZiB0ZXN0ICIkZXh0X2Z1bmNzIiA9IDEgOyB0aGVuCitjYXQgPDxFT0YKK1J1bm5pbmcgdGljIHRvIGluc3RhbGwgJFRFUk1JTkZPIC4uLgorCisJWW91IG1heSBzZWUgbWVzc2FnZXMgcmVnYXJkaW5nIGV4dGVuZGVkIGNhcGFiaWxpdGllcywgZS5nLiwgQVguCisJVGhlc2UgYXJlIGV4dGVuZGVkIHRlcm1pbmFsIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgY29tcGlsZWQKKwl1c2luZworCQl0aWMgLXgKKwlJZiB5b3UgaGF2ZSBuY3Vyc2VzIDQuMiBhcHBsaWNhdGlvbnMsIHlvdSBzaG91bGQgcmVhZCB0aGUgSU5TVEFMTAorCWRvY3VtZW50LCBhbmQgaW5zdGFsbCB0aGUgdGVybWluZm8gd2l0aG91dCB0aGUgLXggb3B0aW9uLgorCitFT0YKK2lmICggJFNITElCIHRpYyRzdWZmaXggLXggLXMgLW8gJFRFUk1JTkZPICRzb3VyY2UgKQordGhlbgorCWVjaG8gJyoqIGJ1aWx0IG5ldyAnJFRFUk1JTkZPCitlbHNlCisJZWNobyAnPyB0aWMgY291bGQgbm90IGJ1aWxkICckVEVSTUlORk8KKwlleGl0IDEKK2ZpCitlbHNlCitjYXQgPDxFT0YKK1J1bm5pbmcgdGljIHRvIGluc3RhbGwgJFRFUk1JTkZPIC4uLgorCisJWW91IG1heSBzZWUgbWVzc2FnZXMgcmVnYXJkaW5nIHVua25vd24gY2FwYWJpbGl0aWVzLCBlLmcuLCBBWC4KKwlUaGVzZSBhcmUgZXh0ZW5kZWQgdGVybWluYWwgY2FwYWJpbGl0aWVzIHdoaWNoIG1heSBiZSBjb21waWxlZAorCXVzaW5nCisJCXRpYyAteAorCUlmIHlvdSBoYXZlIG5jdXJzZXMgNC4yIGFwcGxpY2F0aW9ucywgeW91IHNob3VsZCByZWFkIHRoZSBJTlNUQUxMCisJZG9jdW1lbnQsIGFuZCBpbnN0YWxsIHRoZSB0ZXJtaW5mbyB3aXRob3V0IHRoZSAteCBvcHRpb24uCisKK0VPRgoraWYgKCAkU0hMSUIgdGljJHN1ZmZpeCAtcyAtbyAkVEVSTUlORk8gJHNvdXJjZSApCit0aGVuCisJZWNobyAnKiogYnVpbHQgbmV3ICckVEVSTUlORk8KK2Vsc2UKKwllY2hvICc/IHRpYyBjb3VsZCBub3QgYnVpbGQgJyRURVJNSU5GTworCWV4aXQgMQorZmkKK2ZpCisKKyMgTWFrZSBhIHN5bWJvbGljIGxpbmsgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggYXBwbGljYXRpb25zIHRoYXQgZXhwZWN0CisjIHRvIGZpbmQgdGVybWluZm8gdW5kZXIgL3Vzci9saWIuICBUaGF0IGlzLCB3ZSdsbCBfdHJ5XyB0byBkbyB0aGF0LiAgTm90CisjIGFsbCBzeXN0ZW1zIHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIGFuZCB0aG9zZSB0aGF0IGRvIHByb3ZpZGUgYSB2YXJpZXR5CisjIG9mIG9wdGlvbnMgZm9yICd0ZXN0Jy4KK2lmIHRlc3QgIiRUSUNESVIiICE9ICIkVEVSTUlORk8iIDsgdGhlbgorCSggcm0gLWYgJFRJQ0RJUiAyPi9kZXYvbnVsbCApCisJaWYgKCBjZCAkVElDRElSIDI+L2Rldi9udWxsICkKKwl0aGVuCisJCWNkICRUSUNESVIKKwkJVElDRElSPWBwd2RgCisJCWlmIHRlc3QgJFRJQ0RJUiAhPSAkVEVSTUlORk8gOyB0aGVuCisJCQkjIFdlbGwsIHdlIHRyaWVkLiAgU29tZSBzeXN0ZW1zIGxpZSB0byB1cywgc28gdGhlCisJCQkjIGluc3RhbGxlciB3aWxsIGhhdmUgdG8gZG91YmxlLWNoZWNrLgorCQkJZWNobyAiVmVyaWZ5IGlmICRUSUNESVIgYW5kICRURVJNSU5GTyBhcmUgdGhlIHNhbWUuIgorCQkJZWNobyAiVGhlIG5ldyB0ZXJtaW5mbyBpcyBpbiAkVEVSTUlORk87IHRoZSBvdGhlciBzaG91bGQgYmUgYSBsaW5rIHRvIGl0LiIKKwkJCWVjaG8gIk90aGVyd2lzZSwgcmVtb3ZlICRUSUNESVIgYW5kIGxpbmsgaXQgdG8gJFRFUk1JTkZPLiIKKwkJZmkKKwllbHNlCisJCWNkICR7REVTVERJUn0kcHJlZml4CisJCSMgQ29uc3RydWN0IGEgc3ltYm9saWMgbGluayB0aGF0IG9ubHkgYXNzdW1lcyAkdGljZGlyIGhhcyB0aGUKKwkJIyBzYW1lICRwcmVmaXggYXMgdGhlIG90aGVyIGluc3RhbGxlZCBkaXJlY3Rvcmllcy4KKwkJUkVMQVRJVkU9YGVjaG8gJHRpY2RpcnxzZWQgLWUgJ3MlXickcHJlZml4Jy8lJSdgCisJCWlmIHRlc3QgIiRSRUxBVElWRSIgIT0gIiR0aWNkaXIiIDsgdGhlbgorCQkJUkVMQVRJVkU9Li4vYGVjaG8gJHRpY2RpcnxzZWQgLWUgJ3MlXickcHJlZml4Jy8lJScgLWUgJ3MlXi8lJSdgCisJCWZpCisJCWlmICggQExOX1NAICRSRUxBVElWRSAkVElDRElSICkKKwkJdGhlbgorCQkJZWNobyAnKiogc3ltLWxpbmtlZCAnJFRJQ0RJUicgZm9yIGNvbXBhdGliaWxpdHknCisJCWVsc2UKKwkJCWVjaG8gJyoqIGNvdWxkIG5vdCBzeW0tbGluayAnJFRJQ0RJUicgZm9yIGNvbXBhdGliaWxpdHknCisJCWZpCisJZmkKK2ZpCisjIHZpbGU6c2htb2RlCmRpZmYgLS1naXQgYS9taXNjL3NobGliIGIvbWlzYy9zaGxpYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hM2VkODEwCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9zaGxpYgpAQCAtMCwwICsxLDE0MSBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NgorIworIyAkSWQ6IHNobGliLHYgMS4xMSAyMDA3LzAxLzEzIDE3OjA5OjUyIHRvbSBFeHAgJAorIyBVc2UgdGhpcyBzY3JpcHQgYXMgYSB3cmFwcGVyIHdoZW4gcnVubmluZyBleGVjdXRhYmxlcyBsaW5rZWQgdG8gc2hhcmVkCisjIGxpYnJhcmllcyBvbiBzeXN0ZW1zIHRoYXQgdXNlIHRoZSAkTERfTElCUkFSWV9QQVRIIHZhcmlhYmxlIGFuZCBkb24ndCBlbWJlZAorIyB0aGUgc29uYW1lJ3MgcGF0aCB3aXRoaW4gdGhlIGxpbmtlZCBleGVjdXRhYmxlIChzdWNoIGFzIElSSVgpLCBlLmcsCisjCisjCXNobGliIGtuaWdodAorIworIyBTZXR0aW5nIExEX0xJQlJBUllfUEFUSCwgb3ZlcnJpZGVzL3N1cHBsZW1lbnRzIHRoZSBsb2FkZXIncyBub3JtYWwgc2VhcmNoCisjIHBhdGgsIGFuZCB3b3JrcyBvbiBtb3N0IHN5c3RlbXMuICBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGVuIHRoZSBlbnZpcm9ubWVudAorIyB2YXJpYWJsZSBoYXMgdG8gYmUgc2V0IHRvIHJ1biB0aGUgcHJvZ3JhbXMgd2l0aGluIHRoaXMgZGlyZWN0b3J5IHRyZWUuCisjCisjIEZvciBMaW51eCAoYW5kIG90aGVyIHN5c3RlbXMgdXNpbmcgdGhlIEdOVSBsb2FkZXIpLCB3ZSBjYW4gdXNlIHRoZSBycGF0aAorIyBkaXJlY3RpdmUsIHdoaWNoIGVtYmVkcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnkgd2l0aGluIHRoZSBleGVjdXRhYmxlLgorIyBVc2luZyB0aGUgTGludXggbG9hZGVyJ3MgcnBhdGggZGlyZWN0aXZlIGludHJvZHVjZXMgYSBjb25zdHJhaW50LCBzaW5jZQorIyBpdCdzIGVtYmVkZGVkIGludG8gdGhlIGJpbmFyeSwgYW5kIG1lYW5zIHRoYXQgdGhlIGJpbmFyeSBjYW5ub3QgYmUgbW92ZWQKKyMgYXJvdW5kICh0aG91Z2ggaXQnbGwgd29yayBpZiB0aGUgJGV4ZWNfcHJlZml4IGNvbnZlbnRpb24gdGhhdCBwdXRzIHRoZSBiaW4KKyMgYW5kIGxpYiBkaXJlY3RvcmllcyB1bmRlciB0aGUgc2FtZSBwYXJlbnQgaXMgZm9sbG93ZWQpLgorIworIyBVc2luZyB0aGUgYWN0dWFsIHNvbmFtZSAoZS5nLiwgLi4vbGliL2xpYm5jdXJzZXMuc28pIGFsb25lLCBpcyBhIG1vcmUKKyMgZmxleGlibGUgc29sdXRpb247IHlvdSBjYW4gbGluayB3aXRob3V0IGhhdmluZyB0byBzZXQgdGhlIGVudmlyb25tZW50CisjIHZhcmlhYmxlLCBhbmQgb24gc29tZSBzeXN0ZW1zIChJUklYKSB5b3UgY2FuIGV2ZW4gcnVuIHRoZSByZXN1bHRpbmcgYmluYXJpZXMKKyMgd2l0aG91dCBzZXR0aW5nIExEX0xJQlJBUllfUEFUSC4KKyMKKyMgVXNpbmcgYSBjb252ZW50aW9uYWwgbGluaywgd2l0aCAtTCBhbmQgLWwgb3B0aW9ucyBvbiBMaW51eCByZXN1bHRzIGluIGEKKyMgc3RhdGljYWxseSBsaW5rZWQgZXhlY3V0YWJsZSwgd2hpY2ggd2UgZG9uJ3Qgd2FudCBhdCBhbGwuCisjCisjIFNwZWNpYWwgY2FzZXM6CisjCisjCUJlT1MgUjQuNSB1c2VzICRMSUJSQVJZX1BBVEggcmF0aGVyIHRoYW4gJExEX0xJQlJBUllfUEFUSC4KKyMJQ3lnd2luIHVzZXMgJFBBVEgKKyMJTWFjIE9TIFggdXNlcyAkRFlMRF9MSUJSQVJZX1BBVEgKKyMKKyMgT3RoZXIgY2FzZXMgbm90IGhhbmRsZWQgYnkgdGhpcyBzY3JpcHQ6CisjCisjCUFJWCB1c2VzICRMSUJQQVRICisjCUlSSVg2NCBtYXkgdXNlICRMRF9MSUJSQVJZNjRfUEFUSCBvciAkTERfTElCUkFSWU4zMl9QQVRICisjCVNvbGFyaXMgbWF5IHVzZSAkTERfTElCUkFSWV9QQVRIXzY0CisjCitDRFBBVEg9CisjCisjIE1ha2Ugc3VyZSB0aGF0IHdlIHVzZSB0aGUgUEFUSCB0aGF0IHdhcyBzZXQgaW4gcnVuX3RpYy5zaAoraWYgdGVzdCAtbiAiJFNITElCX1BBVEgiIDsgdGhlbgorCVBBVEg9JFNITElCX1BBVEgKKwlleHBvcnQgUEFUSAorZmkKKworIyBGaW5kIHRoZSBsaWItZGlyZWN0b3J5IGZvciB0aGlzIGJ1aWxkIHRyZWUKK3E9IiIKK2ZvciBwIGluIGxpYiAuLi9saWIgLi4vLi4vbGliIC4uLy4uLy4uL2xpYgorZG8KKwlpZiB0ZXN0IC1kICRwOyB0aGVuCisJCXE9YGNkICRwOyBwd2RgCisJCWJyZWFrCisJZWxpZiB0ZXN0IC1mIGNvbmZpZ3VyZSAmJiB0ZXN0ICEgLWQgLi4vJHAgOyB0aGVuCisJCWJyZWFrCisJZmkKK2RvbmUKKworIyBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLgoraWYgdGVzdCAtbiAiJHEiIDsgdGhlbgorCXN5c3RlbT0KKwlpZiB0ZXN0IC1uICIkU0hMSUJfSE9TVCIgOyB0aGVuCisJCXN5c3RlbT0iJFNITElCX0hPU1QiCisJZWxpZiB0ZXN0IC1uICIkUEFUSEVYVCIgOyB0aGVuCisJCXN5c3RlbT1jeWd3aW4KKwllbGlmIHRlc3QgLW4gIiRMSUJSQVJZX1BBVEgiIDsgdGhlbgorCQlzeXN0ZW09YmVvcworCWVsaWYgdGVzdCAtbiAiJERZTERfTElCUkFSWV9QQVRIIiA7IHRoZW4KKwkJc3lzdGVtPWRhcndpbgorCWVsaWYgdGVzdCAtbiAiJExEX0xJQlJBUllfUEFUSCI7IHRoZW4KKwkJc3lzdGVtPXVuaXgKKwllbHNlCisJCWZvciByIGluICRxLyouKgorCQlkbworCQkJaWYgdGVzdCAtZiAiJHIiCisJCQl0aGVuCisJCQkJY2FzZSAkciBpbgorCQkJCSouZGxsKQorCQkJCQlzeXN0ZW09Y3lnd2luCisJCQkJCTs7CisJCQkJKi5keWxpYikKKwkJCQkJc3lzdGVtPWRhcndpbgorCQkJCQk7OworCQkJCWVzYWMKKwkJCWZpCisJCQl0ZXN0IC1uICIkc3lzdGVtIiAmJiBicmVhaworCQlkb25lCisJZmkKKworCWNhc2UgLiRzeXN0ZW0gaW4KKwkuY3lnd2luKikKKwkJdmFyaWFibGU9UEFUSAorCQk7OworCS5iZW9zKikKKwkJdmFyaWFibGU9TElCUkFSWV9QQVRICisJCTs7CisJLmRhcndpbiopCisJCXZhcmlhYmxlPURZTERfTElCUkFSWV9QQVRICisJCTs7CisJKikKKwkJdmFyaWFibGU9TERfTElCUkFSWV9QQVRICisJCTs7CisJZXNhYworCisJZXZhbCAndGVzdCAteiAiJCckdmFyaWFibGUnIiAmJiAnJHZhcmlhYmxlJz0iOiInCisJZXZhbCAkdmFyaWFibGUnPSIkcTokJyR2YXJpYWJsZSciJworCWV2YWwgJ2V4cG9ydCAnJHZhcmlhYmxlCitmaQorCitldmFsICIkKiIKZGlmZiAtLWdpdCBhL21pc2MvdGFic2V0L3N0ZCBiL21pc2MvdGFic2V0L3N0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTNmNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy90YWJzZXQvc3RkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21pc2MvdGFic2V0L3N0ZGNydCBiL21pc2MvdGFic2V0L3N0ZGNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJhMTJmCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy90YWJzZXQvc3RkY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21pc2MvdGFic2V0L3Z0MTAwIGIvbWlzYy90YWJzZXQvdnQxMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyOGQxOQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvdGFic2V0L3Z0MTAwCkBAIC0wLDAgKzEsMyBAQAorDQorG1szZworG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0gKZGlmZiAtLWdpdCBhL21pc2MvdGFic2V0L3Z0MzAwIGIvbWlzYy90YWJzZXQvdnQzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmOWNlMQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvdGFic2V0L3Z0MzAwCkBAIC0wLDAgKzEsMyBAQAorCisbWzNnCisbUDIkdDkvMTcvMjUvMzMvNDEvNDkvNTcvNjUvNzMvODEvODkvOTcvMTA1LzExMy8xMjEvMTI5G1wKZGlmZiAtLWdpdCBhL21pc2MvdGRsaW50IGIvbWlzYy90ZGxpbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBlNjUyYgotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvdGRsaW50CkBAIC0wLDAgKzEsMTEzIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk2CisjCisjICRJZDogdGRsaW50LHYgMS41IDIwMDAvMTAvMjggMjA6NTM6MzYgdG9tIEV4cCAkCisjCisjIExpbnQtc2NyaXB0IHRoYXQgYWxsb3dzIHVzZXIncyBvd24gbGludCBsaWJyYXJpZXMsIGluIGFkZGl0aW9uIHRvIHRoZSBvbmVzCisjIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtLgorIworT1BUPSIiCitESVJTPSIiCitMSUJTPSIiCitGSUxFUz0iIgorQVJDSD1gdW5hbWUgLXNgCitpZiB0ZXN0IC16ICIkQVJDSCIgOyB0aGVuCisJZWNobyAnPyB1bmFtZSBub3QgZm91bmQnCisJZXhpdCAxCitlbHNlCisJY2FzZSAkQVJDSCBpbgorCUFJWCkJc2V0IC0gJCogLU5uNDAwMAorCQk7OworCUlSSVgpCXNldCAtICQqIC1uIC1sYworCQk7OworCUZyZWVCU0QpIHNldCAtICQqIC1nIC1wIC11IC12IC16CisJCTs7CisJU3VuT1MpCisJCWNhc2UgYHVuYW1lIC1yYCBpbgorCQk1LiopCUFSQ0g9U29sYXJpcworCQkJc2V0IC0gJCogLW4gLWxjCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworZmkKKyMgTElCRElSPSRIT01FL2xpYi8kQVJDSC9saW50IDtleHBvcnQgTElCRElSCitmb3IgcCBpbiAkSE9NRS9saWIvJEFSQ0gvbGludCAvdXNyL2xpYi9saW50IC91c3IvbGliCitkbworCWlmIFsgLWQgJHAgXQorCXRoZW4KKwkJRElSUz0iJERJUlMgJHAiCisJZmkKK2RvbmUKKyMKK3doaWxlIFsgJCMgIT0gMCBdCitkbworCWNhc2UgJDEgaW4KKwktRCpcIiopCTs7CisJLUwqKQorCQlESVJTPSJgZWNobyAkMXxzZWQgLWUgJ3MvXi1MLy8nYCAkRElSUyIKKwkJOzsKKwktbCopCisJCWxpYj0ibGxpYi1sYGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi1sLy8nYC5sbiIKKwkJZm91bmQ9bm8KKwkJZm9yIHAgaW4gJERJUlMKKwkJZG8KKwkJCWVjaG8gLW4gdGVzdGluZyAkcC8kbGliCisJCQlpZiBbIC1mICRwLyRsaWIgXQorCQkJdGhlbgorCQkJCUxJQlM9IiRMSUJTICRwLyRsaWIiCisJCQkJZWNobyAiIChvaykiCisJCQkJZm91bmQ9eWVzCisJCQkJYnJlYWsKKwkJCWZpCisJCQllY2hvCisJCWRvbmUKKwkJaWYgWyAkZm91bmQgPSBubyBdCisJCXRoZW4KKwkJCWVjaG8gImlnbm9yZWQgbGlicmFyeSAkMSIKKwkJZmkKKwkJOzsKKwktbikJaWYgWyAteiAiJE9QVCIgXQorCQl0aGVuCisJCQlPUFQ9Ii1JLiIKKwkJZmkKKwkJT1BUPSIkT1BUICQxIgorCQk7OworCS0qKQlPUFQ9IiRPUFQgJDEiCisJCTs7CisJKikKKwkJRklMRVM9IiRGSUxFUyAkMSIKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKyMKK2V2YWwgbGludCAkT1BUICRGSUxFUyAkTElCUwpkaWZmIC0tZ2l0IGEvbWlzYy90ZXJtaW5mby5zcmMgYi9taXNjL3Rlcm1pbmZvLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE4ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy90ZXJtaW5mby5zcmMKQEAgLTAsMCArMSwyMTgwMyBAQAorIyMjIyMjIyMgVEVSTUlOQUwgVFlQRSBERVNDUklQVElPTlMgU09VUkNFIEZJTEUKKyMKKyMgVGhpcyB2ZXJzaW9uIG9mIHRlcm1pbmZvLnNyYyBpcyBkaXN0cmlidXRlZCB3aXRoIG5jdXJzZXMgYW5kIGlzIG1haW50YWluZWQKKyMgYnkgVGhvbWFzIEUuIERpY2tleSAoVEQpLgorIworIyBSZXBvcnQgYnVncyBhbmQgbmV3IHRlcm1pbmFsIGRlc2NyaXB0aW9ucyB0bworIwlidWctbmN1cnNlc0BnbnUub3JnCisjCisjCSRSZXZpc2lvbjogMS4zNDEgJAorIwkkRGF0ZTogMjAwOC8xMC8xMiAyMzowMzo1NCAkCisjCisjIFRoZSBvcmlnaW5hbCBoZWFkZXIgaXMgcHJlc2VydmVkIGJlbG93IGZvciByZWZlcmVuY2UuICBJdCBpcyBub3RlZCB0aGF0IHRoZXJlCisjIGlzIGEgIm5ld2VyIiB2ZXJzaW9uIHdoaWNoIGRpZmZlcnMgaW4gc29tZSBjb3NtZXRpYyBkZXRhaWxzIChidXQgYWN0dWFsbHkKKyMgc3RvcHBlZCB1cGRhdGVzIHNldmVyYWwgeWVhcnMgYWdvKTsgd2UgaGF2ZSBkZWNpZGVkIHRvIG5vdCBjaGFuZ2UgdGhlIGhlYWRlcgorIyB1bmxlc3MgdGhlcmUgaXMgYWxzbyBhIGNoYW5nZSBpbiBjb250ZW50LgorIworIyBUbyBmdXJ0aGVyIG11ZGR5IHRoZSB3YXRlcnMsIGl0IGlzIG5vdGVkIHRoYXQgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXMgcGFydCBvZgorIyBtYWludGVuYW5jZSBvZiBuY3Vyc2VzIChzaW5jZSAxOTk2KSBhcmUgZ2VuZXJhbGx5IGNvbmNlZGVkIHRvIGJlIGNvcHlyaWdodAorIyB1bmRlciB0aGUgbmN1cnNlcyBNSVQtc3R5bGUgbGljZW5zZS4gIFRoYXQgd2FzIHRoZSBlZmZlY3Qgb2YgdGhlIGFncmVlbWVudAorIyB3aGljaCB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgbmN1cnNlcyBtYWRlIGluIDE5OTguICBIb3dldmVyLCBzaW5jZSBtdWNoIG9mCisjIHRoZSBmaWxlIGl0c2VsZiBpcyBvZiB1bmtub3duIGF1dGhvcnNoaXAgKGFuZCB0aGUgZGlzY2xhaW1lciBiZWxvdyBtYWtlcyBpdAorIyBvYnZpb3VzIHRoYXQgUmF5bW9uZCBjYW5ub3Qgb3Igd2lsbCBub3QgY29udmV5IHJpZ2h0cyBvdmVyIHRob3NlIHBhcnRzKSwKKyMgdGhlcmUgaXMgbm8gZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBvbiB0aGUgZmlsZSBpdHNlbGYuCisjCisjIEl0IHdvdWxkIGFsc28gYmUgYSBudWlzYW5jZSB0byBzcGxpdCB0aGUgZmlsZSBpbnRvIHVua25vd24va25vd24gYXV0aG9yc2hpcAorIyBhbmQgbW92ZSBwaWVjZXMgYXMgdGhleSBhcmUgbWFpbnRhaW5lZCwgc2luY2UgbWFueSBvZiB0aGUgbWFpbnRlbmFuY2UgY2hhbmdlcworIyBoYXZlIGJlZW4gc21hbGwgY29ycmVjdGlvbnMgdG8gUmF5bW9uZCdzIHRyYW5zbGF0aW9ucyB0by9mcm9tIHRlcm1jYXAgZm9ybWF0LAorIyBjb3JyZWN0aW5nIHRoZSBkYXRhIGJ1dCBub3QgdGhlIGFjY29tcGFueWluZyBhbm5vdGF0aW9ucy4KKyMKKyMgSW4gYW55IGNhc2UsIG5vdGUgdGhhdCBhbG1vc3QgaGFsZiBvZiB0aGlzIGZpbGUgaXMgbm90IGRhdGEgYnV0IGFubm90YXRpb25zCisjIHdoaWNoIHJlZmxlY3QgY3JlYXRpdmUgZWZmb3J0LiAgRnVydGhlcm1vcmUsIHRoZSBzdHJ1Y3R1cmUgb2YgZW50cmllcyB0bworIyByZXVzZSBjb21tb24gY2h1bmtzIGFsc28gaXMgY3JlYXRpdmUgKGFuZCBzdWJqZWN0IHRvIGNvcHlyaWdodCkuICBGaW5hbGx5LAorIyBzb21lIHBvcnRpb25zIG9mIHRoZSBkYXRhIGFyZSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgYSBjb21wYXRpYmxlIE1JVC1zdHlsZQorIyBsaWNlbnNlIGZyb20geHRlcm0uCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCVZlcnNpb24gMTAuMi4xCisjCXRlcm1pbmZvIHN5bnRheAorIworIwlFcmljIFMuIFJheW1vbmQJCShjdXJyZW50IG1haW50YWluZXIpCisjCUpvaG4gS3VuemUsIEJlcmtlbGV5CisjCUNyYWlnIExlcmVzLCBCZXJrZWxleQorIworIyBQbGVhc2UgZS1tYWlsIGNoYW5nZXMgdG8gdGVybWluZm9AdGh5cnN1cy5jb207IHRoZSBvbGQgdGVybWNhcEBiZXJrZWxleS5lZHUKKyMgYWRkcmVzcyBpcyBubyBsb25nZXIgdmFsaWQuICBUaGUgbGF0ZXN0IHZlcnNpb24gY2FuIGFsd2F5cyBiZSBmb3VuZCBhdAorIyA8aHR0cDovL3d3dy50dXhlZG8ub3JnL3Rlcm1pbmZvPi4KKyMKKyMgUFVSUE9TRSBPRiBUSElTIEZJTEU6CisjCisjIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNhcGFiaWxpdGllcyBvZiB2YXJpb3VzIGNoYXJhY3Rlci1jZWxsIHRlcm1pbmFscywKKyMgYXMgbmVlZGVkIGJ5IHNvZnR3YXJlIHN1Y2ggYXMgc2NyZWVuLW9yaWVudGVkIGVkaXRvcnMuCisjCisjIE90aGVyIHRlcm1pbmZvIGFuZCB0ZXJtY2FwIGZpbGVzIGV4aXN0LCBzdXBwb3J0ZWQgYnkgdmFyaW91cyBPUyB2ZW5kb3JzCisjIG9yIGFzIHJlbGljcyBvZiB2YXJpb3VzIG9sZGVyIHZlcnNpb25zIG9mIFVOSVguICBUaGlzIG9uZSBpcyB0aGUgbG9uZ2VzdAorIyBhbmQgbW9zdCBjb21wcmVoZW5zaXZlIG9uZSBpbiBleGlzdGVuY2UuICBJdCBzdWJzdW1lcyBub3Qgb25seSB0aGUgZW50aXJldHkKKyMgb2YgdGhlIGhpc3RvcmljYWwgNC40QlNELCBHTlUsIFN5c3RlbSBWIGFuZCBTQ08gdGVybWNhcCBmaWxlcyBhbmQgdGhlIEJSTAorIyB0ZXJtY2FwIGZpbGUsIGJ1dCBhbHNvIGxhcmdlIG51bWJlcnMgb2YgdmVuZG9yLW1haW50YWluZWQgdGVybWNhcCBhbmQKKyMgdGVybWluZm8gZW50cmllcyBtb3JlIGNvbXBsZXRlIGFuZCBjYXJlZnVsbHkgdGVzdGVkIHRoYW4gdGhvc2UgaW4gaGlzdG9yaWNhbAorIyB0ZXJtY2FwL3Rlcm1pbmZvIHZlcnNpb25zLgorIworIyBQb2ludGVycyB0byByZWxhdGVkIHJlc291cmNlcyAoaW5jbHVkaW5nIHRoZSBuY3Vyc2VzIGRpc3RyaWJ1dGlvbikgbWF5CisjIGJlIGZvdW5kIGF0IDxodHRwOi8vd3d3LnR1eGVkby5vcmcvdGVybWluZm8+LgorIworIyBJTlRFUk5BVElPTkFMSVpBVElPTjoKKyMKKyMgVGhpcyBmaWxlIHVzZXMgb25seSB0aGUgVVMtQVNDSUkgY2hhcmFjdGVyIHNldCAobm8gSVNPODg1OSBjaGFyYWN0ZXJzKS4KKyMKKyMgVGhpcyBmaWxlIGFzc3VtZXMgYSBVUy1BU0NJSSBjaGFyYWN0ZXIgc2V0LiBJZiB5b3UgbmVlZCB0byBmaXggdGhpcywgc3RhcnQKKyMgYnkgZ2xvYmFsLXJlcGxhY2luZyBcRShCIGFuZCBcRSlCIHdpdGggdGhlIGFwcHJvcHJpYXRlIElTTyA2NDI5IGVuYWJsZXJzCisjIGZvciB5b3VyIGNoYXJhY3RlciBzZXQuICBcRShBIGFuZCBcRSlBIGVuYWJsZXMgdGhlIEJyaXRpc2ggY2hhcmFjdGVyIHNldAorIyB3aXRoIHRoZSBwb3VuZCBzaWduIGF0IHBvc2l0aW9uIDIvMy4KKyMKKyMgSW4gYSBKYXBhbmVzZS1wcm9jZXNzaW5nIGVudmlyb25tZW50IHVzaW5nIEVVQy9KYXBhbmVzZSBvciBTaGlmdC1KSVMsCisjIEMxIGNoYXJhY3RlcnMgYXJlIGNvbnNpZGVyZWQgdGhlIGZpcnN0LWJ5dGUgc2V0IG9mIHRoZSBKYXBhbmVzZSBlbmNvZGluZ3MsCisjIHNvIFxFKTAgc2hvdWxkIGJlIGF2b2lkZWQgaW4gPGVuYWNzPiBhbmQgaW5pdGlhbGl6YXRpb24gc3RyaW5ncy4KKyMKKyMgRklMRSBGT1JNQVQ6CisjCisjIFRoZSB2ZXJzaW9uIHlvdSBhcmUgbG9va2luZyBhdCBtYXkgYmUgaW4gYW55IG9mIHRocmVlIGZvcm1hdHM6IG1hc3RlcgorIyAodGVybWluZm8gd2l0aCBPVCBjYXBhYmlsaXRpZXMpLCBzdG9jayB0ZXJtaW5mbywgb3IgdGVybWNhcC4gIFlvdSBjYW4gdGVsbAorIyB3aGljaCBieSB0aGUgZm9ybWF0IGdpdmVuIGluIHRoZSBoZWFkZXIgYWJvdmUuCisjCisjIFRoZSBtYXN0ZXIgZm9ybWF0IGlzIGFjY2VwdGVkIGFuZCBnZW5lcmF0ZWQgYnkgdGhlIHRlcm1pbmZvIHRvb2xzIGluIHRoZQorIyBuY3Vyc2VzIHN1aXRlOyBpdCBkaWZmZXJzIGZyb20gc3RvY2sgKFN5c3RlbSBWLWNvbXBhdGlibGUpIHRlcm1pbmZvIG9ubHkKKyMgaW4gdGhhdCBpdCBhZG1pdHMgYSBncm91cCBvZiBjYXBhYmlsaXRpZXMgKHByZWZpeGVkIGBPVCcpIGVxdWl2YWxlbnQgdG8KKyMgdmFyaW91cyBvYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFlvdSBjYW4sIHRodXMsIGNvbnZlcnQgZnJvbSBtYXN0ZXIKKyMgdG8gc3RvY2sgdGVybWluZm8gc2ltcGx5IGJ5IGZpbHRlcmluZyB3aXRoIGBzZWQgIi9PVFteLF0qLC9zLy8vIic7IGJ1dCBpZgorIyB5b3UgaGF2ZSBuY3Vyc2VzIGB0aWMgLUknIGlzIG5pY2VyIChhbW9uZyBvdGhlciB0aGluZ3MsIGl0IGF1dG9tYXRpY2FsbHkKKyMgb3V0cHV0cyBlbnRyaWVzIGluIGEgY2Fub25pY2FsIGZvcm0pLgorIworIyBUaGUgdGVybWNhcCB2ZXJzaW9uIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIG1hc3RlciB2ZXJzaW9uCisjIHVzaW5nIHRpYyAtQy4gIFRoaXMgZmlsdGVyaW5nIGxlYXZlcyBpbiB0aGUgT1QgY2FwYWJpbGl0aWVzIHVuZGVyIHRoZWlyCisjIG9yaWdpbmFsIHRlcm1jYXAgbmFtZXMuICBBbGwgdHJhbnNsYXRlZCBlbnRyaWVzIGZpdCB3aXRoaW4gdGhlIDEwMjMtYnl0ZQorIyBzdHJpbmctdGFibGUgbGltaXQgb2YgYXJjaGFpYyB0ZXJtY2FwIGxpYnJhcmllcyBleGNlcHQgd2hlcmUgZXhwbGljaXRseQorIyBub3RlZCBiZWxvdy4gIE5vdGUgdGhhdCB0aGUgdGVybWNhcCB0cmFuc2xhdGlvbiBhc3N1bWVzIHRoYXQgeW91ciB0ZXJtY2FwCisjIGxpYnJhcnkgY2FuIGhhbmRsZSBtdWx0aXBsZSB0YyBjYXBhYmlsaXRpZXMgaW4gYW4gZW50cnkuIDQuNEJTRCBoYXMgdGhpcworIyBjYXBhYmlsaXR5LiAgT2xkZXIgdmVyc2lvbnMgb2YgR05VIHRlcm1jYXAsIHRocm91Z2ggMS4zLCBkbyBub3QuCisjCisjIEZvciBkZXRhaWxzIG9uIHRoZXNlIGZvcm1hdHMsIHNlZSB0ZXJtaW5mbyg1KSBpbiB0aGUgbmN1cnNlcyBkaXN0cmlidXRpb24sCisjIGFuZCB0ZXJtY2FwKDUpIGluIHRoZSA0LjRCU0QgVW5peCBQcm9ncmFtbWVyJ3MgTWFudWFsLiAgQmUgYXdhcmUgdGhhdCA0LjRCU0QKKyMgY3Vyc2VzIGhhcyBiZWVuIGRlY2xhcmVkIG9ic29sZXRlIGJ5IHRoZSBjYXJldGFrZXJzIG9mIHRoZSA0LjRCU0Qgc291cmNlcworIyBhcyBvZiBKdW5lIDE5OTU7IHRoZXkgYXJlIGVuY291cmFnaW5nIGV2ZXJ5b25lIHRvIG1pZ3JhdGUgdG8gbmN1cnNlcy4KKyMKKyMgTm90ZTogdW5saWtlIHNvbWUgb3RoZXIgZGlzdHJpYnV0ZWQgdGVybWluZm8gZmlsZXMgKE5vdmVsbCBVbml4ICYgU0NPJ3MpLAorIyBubyBlbnRyeSBpbiB0aGlzIGZpbGUgaGFzIGVtYmVkZGVkIGNvbW1lbnRzLiAgVGhpcyBpcyBzbyBzb3VyY2UgdHJhbnNsYXRpb24KKyMgdG8gdGVybWNhcCBvbmx5IGhhcyB0byBjYXJyeSBvdmVyIGxlYWRpbmcgY29tbWVudHMuICBBbHNvLCBubyBuYW1lIGZpZWxkCisjIGNvbnRhaW5zIGVtYmVkZGVkIHdoaXRlc3BhY2UgKHN1Y2ggd2hpdGVzcGFjZSBjb25mdXNlcyByZGlzdCkuCisjCisjIEZ1cnRoZXIgbm90ZTogb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBmaWxlIHdlcmUgb2Z0ZW4gaW5zdGFsbGVkIHdpdGggYW4gZWRpdG9yCisjIHNjcmlwdCAocmVvcmRlcikgdGhhdCBtb3ZlZCB0aGUgbW9zdCBjb21tb24gdGVybWluYWwgdHlwZXMgdG8gdGhlIGZyb250IG9mCisjIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeSwgYXMgdGhlIGZpbGUgaXMgbm93IG9yZGVyZWQKKyMgcm91Z2hseSBieSB0eXBlIGZyZXF1ZW5jeSB3aXRoIEFOU0kvVlQxMDAgYW5kIG90aGVyIGNvbW1vbiB0eXBlcyB1cCBmcm9udC4KKyMKKyMgU29tZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBtZXJnZWQgaW4gZnJvbSB0ZXJtaW5mbyBmaWxlcyBkaXN0cmlidXRlZCBieQorIyBVU0wgYW5kIFNDTyAoc2VlIENPUFlSSUdIVFMgQU5EIE9USEVSIERFTFVTSU9OUyBiZWxvdykuICBNdWNoIGluZm9ybWF0aW9uCisjIGNvbWVzIGZyb20gdmVuZG9ycyB3aG8gbWFpbnRhaW4gb2ZmaWNpYWwgdGVybWluZm9zIGZvciB0aGVpciBoYXJkd2FyZQorIyAobm90YWJseSBERUMgYW5kIFd5c2UpLgorIworIyBBIGRldGFpbGVkIGNoYW5nZSBoaXN0b3J5IGlzIGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorIworIyBGSUxFIE9SR0FOSVpBVElPTjoKKyMKKyMgQ29tbWVudHMgaW4gdGhpcyBmaWxlIGJlZ2luIHdpdGggIyAtIHRoZXkgY2Fubm90IGFwcGVhciBpbiB0aGUgbWlkZGxlCisjIG9mIGEgdGVybWluZm8vdGVybWNhcCBlbnRyeSAodGhpcyBmZWF0dXJlIGhhZCB0byBiZSBzYWNyaWZpY2VkIGluIG9yZGVyCisjIHRvIGFsbG93IHN0YW5kYXJkIHRlcm1pbmZvIGFuZCB0ZXJtY2FwIHN5bnRheCB0byBiZSBnZW5lcmF0ZWQgY2xlYW5seSBmcm9tCisjIHRoZSBtYXN0ZXIgZm9ybWF0KS4gIEluZGl2aWR1YWwgY2FwYWJpbGl0aWVzIGFyZSBjb21tZW50ZWQgb3V0IGJ5CisjIHBsYWNpbmcgYSBwZXJpb2QgYmV0d2VlbiB0aGUgY29sb24gYW5kIHRoZSBjYXBhYmlsaXR5IG5hbWUuCisjCisjIFRoZSBmaWxlIGlzIGRpdmlkZWQgdXAgaW50byBtYWpvciBzZWN0aW9ucyAoaGVhZGVkIGJ5IGxpbmVzIGJlZ2lubmluZyB3aXRoCisjIHRoZSBzdHJpbmcgIiMjIyMjIyMjIikgYW5kIG1pbm9yIHNlY3Rpb25zIChiZWdpbm5pbmcgd2l0aCAiIyMjIyIpOyBkbworIworIwlncmVwICJeIyMjIyIgPGZpbGU+IHwgbW9yZQorIworIyB0byBzZWUgYSBsaXN0aW5nIG9mIHNlY3Rpb24gaGVhZGluZ3MuICBUaGUgaW50ZW50IG9mIHRoZSBkaXZpc2lvbnMgaXMKKyMgKGEpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgdGhpbmdzLCBhbmQgKGIpIHRvIG9yZGVyIHRoZSBkYXRhYmFzZSBzbworIyB0aGF0IGltcG9ydGFudCBhbmQgZnJlcXVlbnRseS1lbmNvdW50ZXJlZCB0ZXJtaW5hbCB0eXBlcyBhcmUgbmVhciB0aGUKKyMgZnJvbnQgKHNvIHRoYXQgeW91J2xsIGdldCByZWFzb25hYmxlIHNlYXJjaCBlZmZpY2llbmN5IGZyb20gYSBsaW5lYXIKKyMgc2VhcmNoIG9mIHRoZSB0ZXJtY2FwIGZvcm0gZXZlbiBpZiB5b3UgZG9uJ3QgdXNlIHJlb3JkZXIpLiAgTWlub3Igc2VjdGlvbnMKKyMgdXN1YWxseSBjb3JyZXNwb25kIHRvIG1hbnVmYWN0dXJlcnMgb3Igc3RhbmRhcmQgdGVybWluYWwgY2xhc3Nlcy4KKyMgUGFyZW50aGVzaXplZCB3b3JkcyBmb2xsb3dpbmcgbWFudWZhY3R1cmVyIG5hbWVzIGFyZSB0eXBlIHByZWZpeGVzIG9yCisjIHByb2R1Y3QgbGluZSBuYW1lcyB1c2VkIGJ5IHRoYXQgbWFudWZhY3R1cmVycy4KKyMKKyMgSE9XIFRPIFJFQUQgVEhFIEVOVFJJRVM6CisjCisjIFRoZSBmaXJzdCBuYW1lIGluIGFuIGVudHJ5IGlzIHRoZSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIG1vZGVsIG9yCisjIHR5cGUsIGxhc3QgZW50cnkgaXMgYSB2ZXJib3NlIGRlc2NyaXB0aW9uLiAgT3RoZXJzIGFyZSBtbmVtb25pYyBzeW5vbnltcyBmb3IKKyMgdGhlIHRlcm1pbmFsLgorIworIyBUZXJtaW5hbCBuYW1lcyBsb29rIGxpa2UgPG1hbnVmYWN0dXJlcj4gPG1vZGVsPiAtIDxtb2Rlcy9vcHRpb25zPgorIyBUaGUgcGFydCB0byB0aGUgbGVmdCBvZiB0aGUgZGFzaCwgaWYgYSBkYXNoIGlzIHByZXNlbnQsIGRlc2NyaWJlcyB0aGUKKyMgcGFydGljdWxhciBoYXJkd2FyZSBvZiB0aGUgdGVybWluYWwuICBUaGUgcGFydCB0byB0aGUgcmlnaHQgbWF5IGJlIHVzZWQKKyMgZm9yIGZsYWdzIGluZGljYXRpbmcgc3BlY2lhbCBST01zLCBleHRyYSBtZW1vcnksIHBhcnRpY3VsYXIgdGVybWluYWwgbW9kZXMsCisjIG9yIHVzZXIgcHJlZmVyZW5jZXMuCisjCisjIEFsbCBuYW1lcyBzaG91bGQgYmUgaW4gbG93ZXIgY2FzZSwgZm9yIGNvbnNpc3RlbmN5IGluIHR5cGluZy4KKyMKKyMgVGhlIGZvbGxvd2luZyBhcmUgY29udmVudGlvbmFsbHkgdXNlZCBzdWZmaXhlczoKKyMJLTJwCUhhcyB0d28gcGFnZXMgb2YgbWVtb3J5LiAgTGlrZXdpc2UgNHAsIDhwLCBldGMuCisjCS1hbQlFbmFibGUgYXV0by1tYXJnaW4uCisjCS1tCU1vbm9jaHJvbWUuICBTdXBwcmVzcyBjb2xvciBzdXBwb3J0CisjCS1tYwlNYWdpYy1jb29raWUuICBTb21lIHRlcm1pbmFscyAobm90YWJseSBvbGRlciBXeXNlcykgY2FuCisjCQlvbmx5IHN1cHBvcnQgb25lIGF0dHJpYnV0ZSB3aXRob3V0IG1hZ2ljLWNvb2tpZSBsb3NzYWdlLgorIwkJVGhlaXIgYmFzZSBlbnRyeSBpcyB1c3VhbGx5IHBhaXJlZCB3aXRoIGFub3RoZXIgdGhhdAorIwkJdXNlcyBtYWdpYyBjb29raWVzIHRvIHN1cHBvcnQgbXVsdGlwbGUgYXR0cmlidXRlcy4KKyMJLW5hbQlObyBhdXRvLW1hcmdpbiAtIHN1cHByZXNzIDxhbT4gY2FwYWJpbGl0eQorIwktbmwJTm8gbGFiZWxzIC0gc3VwcHJlc3Mgc29mdCBsYWJlbHMKKyMJLW5zCU5vIHN0YXR1cyBsaW5lIC0gc3VwcHJlc3Mgc3RhdHVzIGxpbmUKKyMJLXJ2CVRlcm1pbmFsIGluIHJldmVyc2UgdmlkZW8gbW9kZSAoYmxhY2sgb24gd2hpdGUpCisjCS1zCUVuYWJsZSBzdGF0dXMgbGluZS4KKyMJLXZiCVVzZSB2aXNpYmxlIGJlbGwgKDxmbGFzaD4pIHJhdGhlciB0aGFuIDxiZWw+LgorIwktdwlXaWRlIC0gaW4gMTMyIGNvbHVtbiBtb2RlLgorIyBJZiBhIG5hbWUgaGFzIG11bHRpcGxlIHN1ZmZpeGVzIGFuZCBvbmUgaXMgYSBsaW5lIGhlaWdodCwgdGhhdCBvbmUgc2hvdWxkCisjIGdvIGZpcnN0LiAgVGh1cyBgYWFhLTMwLXMtcnYnIGlzIHJlY29tbWVuZGVkIG92ZXIgYGFhYS1zLXJ2LTMwJy4KKyMKKyMgRW50cmllcyB3aXRoIGVtYmVkZGVkIHBsdXMgc2lnbnMgYXJlIGRlc2lnbmVkIHRvIGJlIGluY2x1ZGVkIHRocm91Z2ggdXNlL3RjCisjIGNhcGFiaWxpdGllcywgbm90IHVzZWQgYXMgc3RhbmRhbG9uZSBlbnRyaWVzLgorIworIyBUbyBhdm9pZCBzZWFyY2ggY2xhc2hlcywgc29tZSBvbGRlciBhbGwtbnVtZXJpYyBuYW1lcyBmb3IgdGVybWluYWxzIGhhdmUKKyMgYmVlbiByZW1vdmVkIChpLmUuLCAiMzMiIGZvciB0aGUgTW9kZWwgMzMgVGVsZXR5cGUsICIyNjIxIiBmb3IgdGhlIEhQMjYyMSkuCisjIEFsbCBwcmltYXJ5IG5hbWVzIG9mIHRlcm1pbmFscyBub3cgaGF2ZSBhbHBoYW51bWVyaWMgcHJlZml4ZXMuCisjCisjIENvbW1lbnRzIG1hcmtlZCAiZXNyIiBhcmUgbW9zdGx5IHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIHRlcm1jYXAtY29tcGlsZXIKKyMgY29kZSBwYWNrYWdlZCB3aXRoIG5jdXJzZXMgYW5kIGNvbnRlbXBsYXRpbmcgdGhlIHJlc3VsdGluZyBlcnJvciBtZXNzYWdlcy4KKyMgSW4gbWFueSBjYXNlcywgdGhlc2UgaW5kaWNhdGVkIG9idmlvdXMgZml4ZXMgdG8gc3ludGF4IGdhcmJsZWQgYnkgdGhlCisjIGNvbXBvc2Vycy4gIEluIGEgZmV3IGNhc2VzLCBJIHdhcyBhYmxlIHRvIGRlZHVjZSBjb3JyZWN0ZWQgZm9ybXMgZm9yIGdhcmJsZWQKKyMgY2FwYWJpbGl0aWVzIGJ5IGxvb2tpbmcgYXQgY29udGV4dC4gIEFsbCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG9yaWdpbmFsCisjIGVudHJpZXMgaXMgcHJlc2VydmVkIGluIHRoZSBjb21tZW50cy4KKyMKKyMgSW4gdGhlIGNvbW1lbnRzLCB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWVzIGFyZSBicmFja2V0ZWQgd2l0aCA8PiAoYW5nbGUKKyMgYnJhY2tldHMpLiAgVGVybWNhcCBjYXBhYmlsaXR5IG5hbWVzIGFyZSBicmFja2V0ZWQgd2l0aCA6OiAoY29sb25zKS4KKyMKKyMgSU5URVJQUkVUQVRJT04gT0YgVVNFUiBDQVBBQklMSVRJRVMKKyMKKyMgVGhlIFN5c3RlbSBWIFJlbGVhc2UgNCBhbmQgWFBHNCB0ZXJtaW5mbyBmb3JtYXQgZGVmaW5lcyB0ZW4gc3RyaW5nCisjIGNhcGFiaWxpdGllcyBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucywgPHUwPi4uLjx1OT4uICAgSW4gdGhpcyBmaWxlLCB3ZSB1c2UKKyMgY2VydGFpbiBvZiB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gZGVzY3JpYmUgZnVuY3Rpb25zIHdoaWNoIGFyZSBub3QgY292ZXJlZAorIyBieSB0ZXJtaW5mby4gIFRoZSBtYXBwaW5nIGlzIGFzIGZvbGxvd3M6CisjCisjCXU5CXRlcm1pbmFsIGVucXVpcmUgc3RyaW5nIChlcXVpdi4gdG8gQU5TSS9FQ01BLTQ4IERBKQorIwl1OAl0ZXJtaW5hbCBhbnN3ZXJiYWNrIGRlc2NyaXB0aW9uCisjCXU3CWN1cnNvciBwb3NpdGlvbiByZXF1ZXN0IChlcXVpdi4gdG8gVlQxMDAvQU5TSS9FQ01BLTQ4IERTUiA2KQorIwl1NgljdXJzb3IgcG9zaXRpb24gcmVwb3J0IChlcXVpdi4gdG8gQU5TSS9FQ01BLTQ4IENQUikKKyMKKyMgVGhlIHRlcm1pbmFsIGVucXVpcmUgc3RyaW5nIDx1OT4gc2hvdWxkIGVsaWNpdCBhbiBhbnN3ZXJiYWNrIHJlc3BvbnNlCisjIGZyb20gdGhlIHRlcm1pbmFsLiAgQ29tbW9uIHZhbHVlcyBmb3IgPHU5PiB3aWxsIGJlIF5FIChvbiBvbGRlciBBU0NJSQorIyB0ZXJtaW5hbHMpIG9yIFxFW2MgKG9uIG5ld2VyIFZUMTAwL0FOU0kvRUNNQS00OC1jb21wYXRpYmxlIHRlcm1pbmFscykuCisjCisjIFRoZSBjdXJzb3IgcG9zaXRpb24gcmVxdWVzdCAoPHU3Pikgc3RyaW5nIHNob3VsZCBlbGljaXQgYSBjdXJzb3IgcG9zaXRpb24KKyMgcmVwb3J0LiAgQSB0eXBpY2FsIHZhbHVlIChmb3IgVlQxMDAgdGVybWluYWxzKSBpcyBcRVs2bi4KKyMKKyMgVGhlIHRlcm1pbmFsIGFuc3dlcmJhY2sgZGVzY3JpcHRpb24gKHU4KSBtdXN0IGNvbnNpc3Qgb2YgYW4gZXhwZWN0ZWQKKyMgYW5zd2VyYmFjayBzdHJpbmcuICBUaGUgc3RyaW5nIG1heSBjb250YWluIHRoZSBmb2xsb3dpbmcgc2NhbmYoMyktbGlrZQorIyBlc2NhcGVzOgorIworIwklYwlBY2NlcHQgYW55IGNoYXJhY3RlcgorIwklWy4uLl0JQWNjZXB0IGFueSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc2V0CisjCisjIFRoZSBjdXJzb3IgcG9zaXRpb24gcmVwb3J0ICg8dTY+KSBzdHJpbmcgbXVzdCBjb250YWluIHR3byBzY2FuZigzKS1zdHlsZQorIyAlZCBmb3JtYXQgZWxlbWVudHMuICBUaGUgZmlyc3Qgb2YgdGhlc2UgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBZIGNvb3JkaW5hdGUKKyMgYW5kIHRoZSBzZWNvbmQgdG8gdGhlICVkLiAgSWYgdGhlIHN0cmluZyBjb250YWlucyB0aGUgc2VxdWVuY2UgJWksIGl0IGlzCisjIHRha2VuIGFzIGFuIGluc3RydWN0aW9uIHRvIGRlY3JlbWVudCBlYWNoIHZhbHVlIGFmdGVyIHJlYWRpbmcgaXQgKHRoaXMgaXMKKyMgdGhlIGludmVyc2Ugc2Vuc2UgZnJvbSB0aGUgY3VwIHN0cmluZykuICBUaGUgdHlwaWNhbCBDUFIgdmFsdWUgaXMKKyMgXEVbJWklZDslZFIgKG9uIFZUMTAwL0FOU0kvRUNNQS00OC1jb21wYXRpYmxlIHRlcm1pbmFscykuCisjCisjIFRoZXNlIGNhcGFiaWxpdGllcyBhcmUgdXNlZCBieSB0YWNrKDFtKSwgdGhlIHRlcm1pbmZvIGFjdGlvbiBjaGVja2VyCisjIChkaXN0cmlidXRlZCB3aXRoIG5jdXJzZXMgNS4wKS4KKyMKKyMgVEFCU0VUIEZJTEVTCisjCisjIEFsbCB0aGUgZW50cmllcyBpbiB0aGlzIGZpbGUgaGF2ZSBiZWVuIGVkaXRlZCB0byBhc3N1bWUgdGhhdCB0aGUgdGFic2V0CisjIGZpbGVzIGRpcmVjdG9yeSBpcyAvdXNyL3NoYXJlL3RhYnNldCwgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgRmlsZSBIaWVyYXJjaHkKKyMgU3RhbmRhcmQgZm9yIExpbnV4IGFuZCBvcGVuLXNvdXJjZSBCU0Qgc3lzdGVtcy4gIFNvbWUgdmVuZG9ycyAobm90YWJseSBTdW4pCisjIHVzZSAvdXNyL2xpYi90YWJzZXQgb3IgKG1vcmUgcmVjZW50bHkpIC91c3Ivc2hhcmUvbGliL3RhYnNldC4KKyMKKyMgTm8gY3Vyc2VzIHBhY2thZ2Ugd2Uga25vdyBvZiBhY3R1YWxseSB1c2VzIHRoZXNlIGZpbGVzLiAgSWYgdGhlaXIgbG9jYXRpb24KKyMgaXMgYW4gaXNzdWUsIHlvdSB3aWxsIGhhdmUgdG8gaGFuZC1wYXRjaCB0aGUgZmlsZSBsb2NhdGlvbnMgYmVmb3JlIGNvbXBpbGluZworIyB0aGlzIGZpbGUuCisjCisjIFJFUVVFU1QgRk9SIENPTlRBQ1QgSU5GT1JNQVRJT04gQU5EIEhJU1RPUklDQUwgTUFURVJJQUwKKyMKKyMgQXMgdGhlIEFOU0kvRUNNQS00OCBzdGFuZGFyZCBhbmQgdmFyaWFudHMgdGFrZSBmaXJtZXIgaG9sZCwgYW5kIGFzCisjIGNoYXJhY3Rlci1jZWxsIHRlcm1pbmFscyBhcmUgaW5jcmVhc2luZ2x5IHJlcGxhY2VkIGJ5IFggZGlzcGxheXMsIG11Y2ggb2YKKyMgdGhpcyBmaWxlIGlzIGJlY29taW5nIGEgaGlzdG9yaWNhbCBkb2N1bWVudCAodGhpcyBpcyBwYXJ0IG9mIHRoZSByZWFzb24gZm9yCisjIHRoZSBuZXcgb3JnYW5pemF0aW9uLCB3aGljaCBwdXRzIEFOU0kgdHlwZXMsIHh0ZXJtLCBVbml4IGNvbnNvbGVzLAorIyBhbmQgdnQxMDAgdXAgZnJvbnQgaW4gY29uZmlkZW5jZSB0aGF0IHRoaXMgd2lsbCBjYXRjaCA5NSUgb2YgbmV3IGhhcmR3YXJlKS4KKyMKKyMgRm9yIHRoZSB0ZXJtaW5hbCB0eXBlcyBzdGlsbCBhbGl2ZSwgSSdkIGxpa2UgdG8gaGF2ZSBtYW51ZmFjdHVyZXIncworIyBjb250YWN0IGRhdGEgKEludGVybmV0IGFkZHJlc3MgYW5kL29yIHNuYWlsLW1haWwgKyBwaG9uZSkuCisjCisjIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gZW5yaWNoaW5nIHRoZSBjb21tZW50cyBzbyB0aGF0IHRoZSBsYXR0ZXIgcG9ydGlvbnMgb2YKKyMgdGhlIGZpbGUgZG8gaW4gZmFjdCBiZWNvbWUgYSBwb3R0ZWQgaGlzdG9yeSBvZiBWRFQgdGVjaG5vbG9neSBhcyBzZWVuIGJ5CisjIFVOSVggaGFja2Vycy4gIElkZWFsbHksIEknZCBsaWtlIHRoZSBoZWFkZXJzIGZvciBlYWNoIG1hbnVmYWN0dXJlciB0bworIyBpbmNsdWRlIGl0cyBsaXZlL2RlYWQvb3V0LW9mLXRoZS1idXNpbmVzcyBzdGF0dXMsIGFuZCBmb3IgYXMgbWFueQorIyB0ZXJtaW5hbCB0eXBlcyBhcyBwb3NzaWJsZSB0byBiZSB0YWdnZWQgd2l0aCBpbmZvcm1hdGlvbiBsaWtlIHllYXJzCisjIG9mIGhlYXZpZXN0IHVzZSwgcG9wdWxhcml0eSwgYW5kIGludGVyZXN0aW5nIGZlYXR1cmVzLgorIworIyBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIHRoZSBvYnNjdXJlIGVudHJpZXMgbGlzdGVkIHVuZGVyCisjIGBNaXNjZWxsYW5lb3VzIG9ic29sZXRlIHRlcm1pbmFscywgbWFudWZhY3R1cmVycyB1bmtub3duJyBiZWZvcmUgdGhlIHRyaWJhbAorIyB3aXNkb20gYWJvdXQgdGhlbSBnZXRzIGxvc3QuICBJZiB5b3Uga25vdyBhIGxvdCBhYm91dCBvYnNjdXJlIG9sZCB0ZXJtaW5hbHMsCisjIHBsZWFzZSBnbyB0byB0aGUgdGVybWluZm8gcmVzb3VyY2UgcGFnZSwgZ3JhYiB0aGUgVUZPIGZpbGUgKHVmby50aSksIGFuZAorIyBleWViYWxsIGl0IGZvciB0aGluZ3MgeW91IGNhbiBpZGVudGlmeSBhbmQgZGVzY3JpYmUuCisjCisjIElmIHlvdSBoYXZlIGJlZW4gYXJvdW5kIGxvbmcgZW5vdWdoIHRvIGNvbnRyaWJ1dGUsIHBsZWFzZSByZWFkIHRoZSBmaWxlCisjIHdpdGggdGhpcyBpbiBtaW5kIGFuZCBzZW5kIG1lIHlvdXIgYW5ub3RhdGlvbnMuCisjCisjIENPUFlSSUdIVFMgQU5EIE9USEVSIERFTFVTSU9OUworIworIyBUaGUgQlNEIGFuY2VzdG9yIG9mIHRoaXMgZmlsZSBoYWQgYSBzdGFuZGFyZCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mCisjIENhbGlmb3JuaWEgY29weXJpZ2h0IHdpdGggZGF0ZXMgZnJvbSAxOTgwIHRvIDE5OTMuCisjCisjIFNvbWUgaW5mb3JtYXRpb24gaGFzIGJlZW4gbWVyZ2VkIGluIGZyb20gYSB0ZXJtaW5mbyBmaWxlIFNDTyBkaXN0cmlidXRlcy4KKyMgSXQgaGFzIGFuIG9ibm94aW91cyBib2lsZXJwbGF0ZSBjb3B5cmlnaHQgd2hpY2ggSSdtIGlnbm9yaW5nIGJlY2F1c2UgdGhleQorIyB0b29rIHNvIG11Y2ggb2YgdGhlIGNvbnRlbnQgZnJvbSB0aGUgYW5jZXN0cmFsIEJTRCB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUKKyMgYW5kIGRpZG4ndCBhdHRyaWJ1dGUgaXQsIHRoZXJlYnkgdmlvbGF0aW5nIHRoZSBCU0QgUmVnZW50cycgY29weXJpZ2h0LgorIworIyBOb3QgdGhhdCBhbnlvbmUgc2hvdWxkIGNhcmUuICBIb3dldmVyIG1hbnkgdmFsaWQgZnVuY3Rpb25zIGNvcHlyaWdodHMgbWF5CisjIHNlcnZlLCBwdXR0aW5nIG9uZSBvbiBhIHRlcm1jYXAvdGVybWluZm8gZmlsZSB3aXRoIGh1bmRyZWRzIG9mIGFub255bW91cworIyBjb250cmlidXRvcnMgbWFrZXMgYWJvdXQgYXMgbXVjaCBzZW5zZSBhcyBjb3B5cmlnaHRpbmcgYSB3YWxsLWZ1bGwgb2YKKyMgZ3JhZmZpdGkgLS0gaXQncyBsZWdhbGx5IGR1YmlvdXMsIGV0aGljYWxseSBib2d1cywgYW5kIHBhdGVudGx5IHJpZGljdWxvdXMuCisjCisjIFRoaXMgZmlsZSBkZWxpYmVyYXRlbHkgaGFzIG5vIGNvcHlyaWdodC4gIEl0IGJlbG9uZ3MgdG8gbm8gb25lIGFuZCBldmVyeW9uZS4KKyMgSWYgeW91IGNsYWltIHlvdSBvd24gaXQsIHlvdSB3aWxsIG1lcmVseSBzdWNjZWVkIGluIGxvb2tpbmcgbGlrZSBhIGZvb2wuCisjIFVzZSBpdCBhcyB5b3UgbGlrZS4gIFVzZSBpdCBhdCB5b3VyIG93biByaXNrLiAgQ29weSBhbmQgcmVkaXN0cmlidXRlIGZyZWVseS4KKyMgVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgYW55d2hlcmUuICBTdmFoYSEKKyMKKworIyMjIyMjIyMgQU5TSSwgVU5JWCBDT05TT0xFLCBBTkQgU1BFQ0lBTCBUWVBFUworIworIyBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRlcm1pbmFsIGNsYXNzZXMgYW5kIGJyYW5kcyB0aGF0IGFyZSBzdGlsbAorIyBxdWl0ZSBjb21tb24uCisjCisKKyMjIyMgU3BlY2lhbHMKKyMKKyMgU3BlY2lhbCAidGVybWluYWxzIi4gIFRoZXNlIGFyZSB1c2VkIHRvIGxhYmVsIHR0eSBsaW5lcyB3aGVuIHlvdSBkb24ndAorIyBrbm93IHdoYXQga2luZCBvZiB0ZXJtaW5hbCBpcyBvbiBpdC4gIFRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYW4gdW5rbm93bgorIyB0ZXJtaW5hbCBhcmUgdGhlIGxvd2VzdCBjb21tb24gZGVub21pbmF0b3IgLSB0aGV5IGxvb2sgYWJvdXQgbGlrZSBhIHRpIDcwMC4KKyMKKworZHVtYnw4MC1jb2x1bW4gZHVtYiB0dHksCisJYW0sCisJY29scyM4MCwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBpbmQ9XkosCit1bmtub3dufHVua25vd24gdGVybWluYWwgdHlwZSwKKwlnbiwgdXNlPWR1bWIsCitscHJ8cHJpbnRlcnxsaW5lIHByaW50ZXIsCisJT1RicywgaGMsIG9zLAorCWNvbHMjMTMyLCBsaW5lcyM2NiwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBmZj1eTCwgaW5kPV5KLAorZ2xhc3N0dHl8Y2xhc3NpYyBnbGFzcyB0dHkgaW50ZXJwcmV0aW5nIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycywKKwlPVGJzLCBhbSwKKwljb2xzIzgwLAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBodD1eSSwga2N1YjE9XkgsCisJa2N1ZDE9XkosIG5lbD1eTV5KLCAua2JzPV5ILAorCit2YW5pbGxhfGR1bWIgdHR5LAorCU9UYnMsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgaW5kPV5KLAorCisjIFRoaXMgaXMgYWxtb3N0IHRoZSBzYW1lIGFzICJkdW1iIiwgYnV0IHdpdGggbm8gcHJlc3BlY2lmaWVkIHdpZHRoLgorIyBERUwgYW5kIF5DIGFyZSBoYXJkY29kZWQgdG8gYWN0IGFzIGtpbGwgY2hhcmFjdGVycy4KKyMgXkQgYWN0cyBhcyBhIGxpbmUgYnJlYWsgKGp1c3QgbGlrZSBuZXdsaW5lKS4KKyMgSXQgYWxzbyBpbnRlcnByZXRzCisjICAgICAgXDAzM107eHh4XDAwNyAKKyMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB4dGVybSAtVEQKKzl0ZXJtfFBsYW45IHRlcm1pbmFsIGVtdWxhdG9yIGZvciBYLAorCWFtLAorCU9Ubmw9XkosIGJlbD1eRywgY3VkMT1eSiwKKworIyMjIyBBTlNJLlNZUy9JU08gNjQyOS9FQ01BLTQ4IENhcGFiaWxpdGllcworIworIyBTZWUgdGhlIGVuZC1vZi1maWxlIGNvbW1lbnQgZm9yIG1vcmUgb24gdGhlc2UuCisjCisKKyMgQU5TSSBjYXBhYmlsaXRpZXMgYXJlIGJyb2tlbiB1cCBpbnRvIHBpZWNlcywgc28gdGhhdCBhIHRlcm1pbmFsCisjIGltcGxlbWVudGluZyBzb21lIEFOU0kgc3Vic2V0IGNhbiB1c2UgbWFueSBvZiB0aGVtLgorYW5zaStsb2NhbDEsCisJY3ViMT1cRVtELCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywgY3V1MT1cRVtBLAorYW5zaStsb2NhbCwKKwljdWI9XEVbJXAxJWRELCBjdWQ9XEVbJXAxJWRCLCBjdWY9XEVbJXAxJWRDLAorCWN1dT1cRVslcDElZEEsIHVzZT1hbnNpK2xvY2FsMSwKK2Fuc2krdGFicywKKwljYnQ9XEVbWiwgaHQ9XkksIGh0cz1cRUgsIHRiYz1cRVsyZywKK2Fuc2kraW5pdHRhYnMsCisJaXQjOCwgdXNlPWFuc2krdGFicywKK2Fuc2krZXJhc2UsCisJY2xlYXI9XEVbSFxFW0osIGVkPVxFW0osIGVsPVxFW0ssCithbnNpK3JjYSwKKwlocGE9XEVbJXAxJXsxfSUrJWRHLCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorYW5zaStjdXAsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBob21lPVxFW0gsCithbnNpK3JlcCwKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsCithbnNpK2lkbDEsCisJZGwxPVxFW00sIGlsMT1cRVtMLAorYW5zaStpZGwsCisJZGw9XEVbJXAxJWRNLCBpbD1cRVslcDElZEwsIHVzZT1hbnNpK2lkbDEsCithbnNpK2lkYywKKwlkY2gxPVxFW1AsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgcm1pcj1cRTYsIHNtaXI9XEU2LAorYW5zaSthcnJvd3MsCisJa2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtob21lPVxFW0gsCithbnNpK3NncnxhbnNpIGdyYXBoaWMgcmVuZGl0aW9ucywKKwlibGluaz1cRVs1bSwgaW52aXM9XEVbOG0sIHJldj1cRVs3bSwKKwlzZ3I9XEVbMCU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNyV0OzglO20sCisJc2dyMD1cRVswbSwKK2Fuc2krc2dyc298YW5zaSBzdGFuZG91dCBvbmx5LAorCXJtc289XEVbbSwgc21zbz1cRVs3bSwKK2Fuc2krc2dydWx8YW5zaSB1bmRlcmxpbmUgb25seSwKKwlybXVsPVxFW20sIHNtdWw9XEVbNG0sCithbnNpK3NncmJvbGR8YW5zaSBncmFwaGljIHJlbmRpdGlvbnM7IGFzc3VtaW5nIHRlcm1pbmFsIGhhcyBib2xkOyBub3QgZGltLAorCWJvbGQ9XEVbMW0sCisJc2dyPVxFWyU/JXAxJXQ3OyU7JT8lcDIldDQ7JTslPyVwMyV0NzslOyU/JXA0JXQ1OyU7JT8lcDYldDE7JTslPyVwNyV0ODslO20sCisJdXNlPWFuc2krc2dyLCB1c2U9YW5zaStzZ3JzbywgdXNlPWFuc2krc2dydWwsCithbnNpK3NncmRpbXxhbnNpIGdyYXBoaWMgcmVuZGl0aW9uczsgYXNzdW1pbmcgdGVybWluYWwgaGFzIGRpbTsgbm90IGJvbGQsCisJZGltPVxFWzJtLAorCXNncj1cRVslPyVwMSV0NzslOyU/JXAyJXQ0OyU7JT8lcDMldDc7JTslPyVwNCV0NTslOyU/JXA1JXQyOyU7JT8lcDcldDg7JTttLAorCXVzZT1hbnNpK3NnciwgdXNlPWFuc2krc2dyc28sIHVzZT1hbnNpK3NncnVsLAorYW5zaStwcHxhbnNpIHByaW50ZXIgcG9ydCwKKwltYzA9XEVbMGksIG1jND1cRVs0aSwgbWM1PVxFWzVpLAorYW5zaStjc3J8YW5zaSBzY3JvbGwtcmVnaW9uIHBsdXMgY3Vyc29yIHNhdmUgJiByZXN0b3JlLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgcmM9XEU4LCBzYz1cRTcsCisKKyMgVGhlIElCTSBQQyBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldC4gIFBsdWcgdGhpcyBpbnRvIGFueSBJbnRlbCBjb25zb2xlIGVudHJ5LgorIyBXZSB1c2UgXEVbMTFtIGZvciBybWFjcyByYXRoZXIgdGhhbiBcRVsxMm0gc28gdGhlIDxhY3NjPiBzdHJpbmcgY2FuIHVzZSB0aGUKKyMgUk9NIGdyYXBoaWNzIGZvciBjb250cm9sIGNoYXJhY3RlcnMgc3VjaCBhcyB0aGUgZGlhbW9uZCwgdXAtIGFuZCBkb3duLWFycm93LgorIyBUaGlzIHdvcmtzIHdpdGggdGhlIFN5c3RlbSBWLCBMaW51eCwgYW5kIEJTREkgY29uc29sZXMuICBJdCdzIGEgc2FmZSBiZXQgdGhpcworIyB3aWxsIHdvcmsgd2l0aCBhbnkgSW50ZWwgY29uc29sZSwgdGhleSBhbGwgc2VlbSB0byBoYXZlIGluaGVyaXRlZCBcRVsxMW0KKyMgZnJvbSB0aGUgQU5TSS5TWVMgZGUtZmFjdG8gc3RhbmRhcmQuCitrbG9uZSthY3N8YWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgZm9yIGFuc2kuc3lzIGRpc3BsYXlzLAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwlybWFjcz1cRVsxMG0sIHNtYWNzPVxFWzExbSwKKworIyBIaWdobGlnaHQgY29udHJvbHMgY29ycmVzcG9uZGluZyB0byB0aGUgQU5TSS5TWVMgc3RhbmRhcmQuICBNb3N0CisjIGNvbnNvbGUgZHJpdmVycyBmb3IgSW50ZWwgYm94ZXMgb2JleSB0aGVzZS4gIE1ha2VzIHRoZSBzYW1lIGFzc3VtcHRpb24KKyMgYWJvdXQgXEVbMTFtIGFzIGtsb25lK2Fjcy4gIFRydWUgQU5TSS9FQ01BLTQ4IHdvdWxkIGhhdmUgPHJtc289XEVbMjdtPiwKKyMgPHJtdWw9XEVbMjRtPiwgYnV0IHRoaXMgaXNuJ3QgYSBkb2N1bWVudGVkIGZlYXR1cmUgb2YgQU5TSS5TWVMuCitrbG9uZStzZ3J8YXR0cmlidXRlIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGRpc3BsYXlzLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCByZXY9XEVbN20sIHJtcGNoPVxFWzEwbSwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwOSV0OzExJTttLAorCXNncjA9XEVbMDsxMG0sIHNtcGNoPVxFWzExbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl1c2U9a2xvbmUrYWNzLAorCisjIE1vc3QgSW50ZWwgYm94ZXMgZG8gbm90IHRyZWF0ICJpbnZpcyIgKGludmlzaWJsZSkgdGV4dC4KK2tsb25lK3Nncjh8YXR0cmlidXRlIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGRpc3BsYXlzLAorCWludmlzPVxFWzhtLAorCXNncj1cRVswOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDkldDsxMSU7bSwKKwl1c2U9a2xvbmUrc2dyLAorCisjIEhpZ2hsaWdodCBjb250cm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZSBBTlNJLlNZUyBzdGFuZGFyZC4gICpBbGwqCisjIGNvbnNvbGUgZHJpdmVycyBmb3IgSW50ZWwgYm94ZXMgb2JleSB0aGVzZS4gIERvZXMgbm90IGFzc3VtZSBcRVsxMW0gd2lsbAorIyB3b3JrOyB1c2VzIFxFWzEybSBpbnN0ZWFkLCB3aGljaCBpcyBwcmV0dHkgYnVsbGV0cHJvb2YgYnV0IGxvc2VzIHlvdSB0aGUgQUNTCisjIGRpYW1vbmQgYW5kIGFycm93IGNoYXJhY3RlcnMgdW5kZXIgY3Vyc2VzLgora2xvbmUrc2dyLWR1bWJ8YXR0cmlidXRlIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGRpc3BsYXlzIChubyBFU0MgWyAxMSBtKSwKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgaW52aXM9XEVbOG0sIHJldj1cRVs3bSwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTIlO20sCisJc2dyMD1cRVswOzEwbSwgc21hY3M9XEVbMTJtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXVzZT1rbG9uZSthY3MsCisKKyMgS09JOC1SIChSRkMxNDg5KSBhY3MgKGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0KQorIyBGcm9tOiBRaW5nIExvbmcgPHFpbmdsb25nQEJvbGl6bS5paGVwLnN1PiwgMjQgRmViIDE5OTYuCitrbG9uZStrb2k4YWNzfGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGZvciBhbnNpLnN5cyBkaXNwbGF5cyB3aXRoIEtPSTggY2hhcnNldCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzYuXl8wXDIxNWBcMDA0YVwyMzdmXDIzNGdcMjMyaFwyMjJpXDIyMGpcMjA1a1wyMDNsXDIwMm1cMjA0blwyMTJvXDIxM3BcMjE2cVwwclwyMTdzXDIxNHRcMjA2dVwyMDd2XDIxMHdcMjExeFwyMDF5XDIzMHpcMjMxe1wyNjd8XDI3NH1MflwyMjUsCisJcm1hY3M9XEVbMTBtLCBzbWFjcz1cRVsxMW0sCisKKyMgQU5TSS5TWVMgY29sb3IgY29udHJvbC4gIFRoZSBzZXRhYi9zZXRhZiBjYXBzIGRlcGVuZCBvbiB0aGUgY29pbmNpZGVuY2UKKyMgYmV0d2VlbiBTVnI0L1hQRzQncyBjb2xvciBudW1iZXJzIGFuZCBBTlNJLlNZUyBhdHRyaWJ1dGVzLiAgSGVyZSBhcmUgbG9uZ2VyCisjIGJ1dCBlcXVpdmFsZW50IHN0cmluZ3MgdGhhdCBkb24ndCByZWx5IG9uIHRoYXQgY29pbmNpZGVuY2U6CisjIHNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKyMgc2V0Zj1cRVszJT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorIyBUaGUgRE9TIDUgbWFudWFsIGFzc2VydHMgdGhhdCB0aGVzZSBzZXF1ZW5jZXMgbWVldCB0aGUgSVNPIDY0Mjkgc3RhbmRhcmQuCisjIFRoZXkgbWF0Y2ggYSBzdWJzZXQgb2YgRUNNQS00OC4KK2tsb25lK2NvbG9yfGNvbG9yIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGFuZCBJU082NDI5LWNvbXBhdGlibGUgZGlzcGxheXMsCisJY29sb3JzIzgsIG5jdiMzLCBwYWlycyM2NCwKKwlvcD1cRVszNzs0MG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisKKyMgVGhpcyBpcyBiZXR0ZXIgdGhhbiBrbG9uZStjb2xvciwgaXQgZG9lc24ndCBhc3N1bWUgd2hpdGUtb24tYmxhY2sgYXMgdGhlCisjIGRlZmF1bHQgY29sb3IgcGFpciwgIGJ1dCBtYW55IGBBTlNJJyB0ZXJtaW5hbHMgZG9uJ3QgZ3JvayB0aGUgPG9wPiBjYXAuCitlY21hK2NvbG9yfGNvbG9yIGNvbnRyb2wgZm9yIEVDTUEtNDgtY29tcGF0aWJsZSB0ZXJtaW5hbHMsCisJQVgsCisJY29sb3JzIzgsIG5jdiMzLCBwYWlycyM2NCwKKwlvcD1cRVszOTs0OW0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisKKyMgQXR0cmlidXRlIGNvbnRyb2wgZm9yIEVDTUEtNDgtY29tcGF0aWJsZSB0ZXJtaW5hbHMKK2VjbWErc2dyfGF0dHJpYnV0ZSBjYXBhYmlsaXRpZXMgZm9yIHRydWUgRUNNQS00OCB0ZXJtaW5hbHMsCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCB1c2U9a2xvbmUrc2dyOCwKKworIyBGb3IgY29tcGFyaXNvbiwgaGVyZSBhcmUgYWxsIHRoZSBjYXBhYmlsaXRpZXMgaW1wbGllZCBieSB0aGUgSW50ZWwKKyMgQmluYXJ5IENvbXBhdGliaWxpdHkgU3RhbmRhcmQgKGxldmVsIDIpIHRoYXQgZml0IHdpdGhpbiB0ZXJtaW5mby4KKyMgRm9yIG1vcmUgZGV0YWlsIG9uIHRoaXMgcmF0aGVyIHBhdGhldGljIHN0YW5kYXJkLCBzZWUgdGhlIGNvbW1lbnRzCisjIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCitpYmNzMnxJbnRlbCBCaW5hcnkgQ29tcGF0aWJpbGl0eSBTdGFuZGFyZCBwcmVzY3JpcHRpb25zLAorCWNidD1cRVtaLCBjbGVhcj1cRWMsIGN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsCisJY3VmPVxFWyVwMSVkQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLAorCWRjaD1cRVslcDElZFAsIGRpc3BjPVxFPSVwMSVkZywgZWNoPVxFWyVwMSVkWCwKKwlocGE9XEVbJWklcDElZEcsIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwKKwlpbmRuPVxFWyVwMSVkUywgcmM9XEU3LCByaW49XEVbJXAxJWRULCBybWFtPVxFWz83bCwgc2M9XEU3LAorCXNtYW09XEVbPzdoLCB0YmM9XEVbZywgdnBhPVxFWyVpJXAxJWRkLAorCisjIyMjIEFOU0kvRUNNQS00OCB0ZXJtaW5hbHMgYW5kIHRlcm1pbmFsIGVtdWxhdG9ycworIworIyBTZWUgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgZGV0YWlscyBvbiBBTlNJIGNvbmZvcm1hbmNlLgorIyBEb24ndCBtZXNzIHdpdGggdGhlc2UgZW50cmllcyEgIExvdHMgb2Ygb3RoZXIgZW50cmllcyBkZXBlbmQgb24gdGhlbSEKKyMKKyMgVGhpcyBzZWN0aW9uIGxpc3RzIGVudHJpZXMgaW4gYSBsZWFzdC1jYXBhYmxlIHRvIG1vc3QtY2FwYWJsZSBvcmRlci4KKyMgaWYgeW91J3JlIGluIGRvdWJ0IGFib3V0IHdoYXQgYEFOU0knIG1hdGNoZXMgeW91cnMsIHRyeSB0aGVtIGluIHRoYXQKKyMgb3JkZXIgYW5kIGJhY2sgb2ZmIGZyb20gdGhlIGZpcnN0IHRoYXQgYnJlYWtzLgorCisjIGFuc2ktbXIgaXMgZm9yIEFOU0kgdGVybWluYWxzIHdpdGggT05MWSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZworIyBhbmQgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIG1lbW9yeS4gIEl0IHVzZXMgbG9jYWwgbW90aW9ucyBpbnN0ZWFkIG9mCisjIGRpcmVjdCBjdXJzb3IgYWRkcmVzc2luZywgYW5kIG1ha2VzIGFsbW9zdCBubyBhc3N1bXB0aW9ucy4gSXQgZG9lcworIyBhc3N1bWUgYXV0byBtYXJnaW5zLCBubyBwYWRkaW5nIGFuZC9vciB4b24veG9mZiwgYW5kIGEgMjR4ODAgc2NyZWVuLgorYW5zaS1tcnxtZW0gcmVsIGN1cCBhbnNpLAorCWFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHVzZT12YW5pbGxhLCB1c2U9YW5zaStlcmFzZSwKKwl1c2U9YW5zaStsb2NhbDEsCisKKyMgYW5zaS1taW5pIGlzIGEgYmFyZSBtaW5pbXVtIEFOU0kgdGVybWluYWwuIFRoaXMgc2hvdWxkIHdvcmsgb24gYW55dGhpbmcsIGJ1dAorIyBiZXdhcmUgb2Ygc2NyZWVuIHNpemUgcHJvYmxlbXMgYW5kIG1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZy4KK2Fuc2ktbWluaXxhbnkgYW5zaSB0ZXJtaW5hbCB3aXRoIHBlc3NpbWlzdGljIGFzc3VtcHRpb25zLAorCWFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHVzZT12YW5pbGxhLCB1c2U9YW5zaStjdXAsCisJdXNlPWFuc2krZXJhc2UsCisKKyMgYW5zaS1tdGFicyBhZGRzIHJlbGF0aXZlIGFkZHJlc3NpbmcgYW5kIG1pbmltYWwgdGFiIHN1cHBvcnQKK2Fuc2ktbXRhYnN8YW55IGFuc2kgdGVybWluYWwgd2l0aCBwZXNzaW1pc3RpYyBhc3N1bXB0aW9ucywKKwlpdCM4LAorCWh0PV5JLCB1c2U9YW5zaStsb2NhbDEsIHVzZT1hbnNpLW1pbmksCisKKyMgQU5TSSBYMy42NCBmcm9tIGVtb3J5IW1saGhoIChIdWdoIEhhbnNhcmQpIHZpYSBCUkwKKyMKKyMgVGhlIGZvbGxvd2luZyBpcyBhbiBlbnRyeSBmb3IgdGhlIGZ1bGwgQU5TSSAzLjY0ICgxOTc3KS4gIEl0IGxhY2tzCisjIHBhZGRpbmcsIGJ1dCBtb3N0IHRlcm1pbmFscyB1c2luZyB0aGUgc3RhbmRhcmQgYXJlICJmYXN0IiBlbm91Z2gKKyMgbm90IHRvIHJlcXVpcmUgYW55IC0tIGV2ZW4gYXQgOTYwMCBicHMuICBJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zLAorIyB0cnkgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIHNwZWNpZmljYXRpb25zLgorIworIyBOb3RlOiB0aGUgOmFzOiBhbmQgOmFlOiBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIGhlcmUsIGZvcgorIyB0aGUgYXZhaWxhYmxlIHRlcm1jYXAgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBtYWtlIGNsZWFyIFdISUNIIGFsdGVybmF0ZQorIyBjaGFyYWN0ZXIgc2V0IHRvIHNwZWNpZnkuICBBTlNJIDMuNjQgc2VlbXMgdG8gbWFrZSBhbGxvd2FuY2VzIGZvciBzZXZlcmFsLgorIyBQbGVhc2UgbWFrZSB0aGUgYXBwcm9wcmlhdGUgYWRqdXN0bWVudHMgdG8gZml0IHlvdXIgbmVlZHMgLS0gdGhhdCBpcworIyBpZiB5b3Ugd2lsbCBiZSB1c2luZyBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldHMuCisjCisjIFRoZXJlIGFyZSB2ZXJ5IGZldyB0ZXJtaW5hbHMgcnVubmluZyB0aGUgZnVsbCBBTlNJIDMuNjQgc3RhbmRhcmQsCisjIHNvIEkgY291bGQgb25seSB0ZXN0IHRoaXMgZW50cnkgb24gb25lIHZlcmlmaWVkIHRlcm1pbmFsIChWaXN1YWwgMTAyKS4KKyMgSSB3b3VsZCBhcHByZWNpYXRlIHRoZSByZXN1bHRzIG9uIG90aGVyIHRlcm1pbmFscyBzZW50IHRvIG1lLgorIworIyBQbGVhc2UgcmVwb3J0IGNvbW1lbnRzLCBjaGFuZ2VzLCBhbmQgcHJvYmxlbXMgdG86CisjCisjIFUuUy4gTUFJTDogICBIdWdoIEhhbnNhcmQKKyMgICAgICAgICAgICAgIEJveDogMjI4MzAKKyMgICAgICAgICAgICAgIEVtb3J5IFVuaXZlcnNpdHkKKyMgICAgICAgICAgICAgIEF0bGFudGEsIEdBLiAzMDMyMi4KKyMKKyMgVVNFTkVUIHtha2d1YSxtc2RjLHNiMSxzYjYsZ2F0ZWNofSFlbW9yeSFtbGhoaC4KKyMKKyMgKEFkZGVkIHZ0MTAwIDxyYz4sPHNjPiB0byBxdWlldCBhIHRpYyB3YXJuaW5nIC0tZXNyKQorYW5zaTc3fGFuc2kgMy42NCBzdGFuZGFyZCAxOTc3IHZlcnNpb24sCisJT1RicywgYW0sIG1pciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFWztIXEVbMkosIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00kPDUqLz4sIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBodD1eSSwgaWwxPVxFW0wkPDUqLz4sIGluZD1cRUQsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVPUCwKKwlrZjI9XEVPUiwga2Y0PVxFT1MsIGtob21lPVxFW0gsIG5lbD1eTVxFRCwgcmM9XEU4LCByaT1cRU0sCisJcm1pcj1cRVs0bCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjIFByb2NvbW0gYW5kIHNvbWUgb3RoZXIgQU5TSSBlbXVsYXRpb25zIGRvbid0IHJlY29nbml6ZSBhbGwgb2YgdGhlIEFOU0ktCisjIHN0YW5kYXJkIGNhcGFiaWxpdGllcy4gIFRoaXMgZW50cnkgZGVsZXRlcyA8Y3V1PiwgPGN1Zj4sIDxjdWQ+LCA8Y3ViPiwgYW5kCisjIDx2cGE+LzxocGE+IGNhcGFiaWxpdGllcywgZm9yY2luZyBjdXJzZXMgdG8gdXNlIHJlcGV0aXRpb25zIG9mIDxjdXUxPiwKKyMgPGN1ZjE+LCA8Y3VkMT4gYW5kIDxjdWIxPi4gIEFsc28gZGVsZXRlZCA8aWNoPiBhbmQgPGljaDE+LCBhcyBRTW9kZW0gdXAgdG8KKyMgNS4wMyBkb2Vzbid0IHJlY29nbml6ZSB0aGVzZS4gIEZpbmFsbHksIHdlIGRlbGV0ZSA8cmVwPiBhbmQgPHJpPiwgd2hpY2ggc2VlbQorIyB0byBjb25mdXNlIG1hbnkgZW11bGF0b3JzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGNhbiBjb3VudCBvbiB0aGVzZSBwcm9ncmFtcworIyBkb2luZyA8cm1hY3M+LzxzbWFjcz4vPHNncj4uIE9sZGVyIHZlcnNpb25zIG9mIHRoaXMgZW50cnkgZmVhdHVyZWQKKyMgPGludmlzPVxFWzltPiwgYnV0IDxpbnZpcz1cRVs4bT4gbm93IHNlZW1zIHRvIGJlIG1vcmUgY29tbW9uIHVuZGVyCisjIEFOU0kuU1lTIGluZmx1ZW5jZS4KKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IE9jdCAzMCAxOTk1CitwY2Fuc2ktbXxwY2Fuc2ktbW9ub3xpYm0tcGMgdGVybWluYWwgcHJvZ3JhbXMgY2xhaW1pbmcgdG8gYmUgYW5zaSAobW9ubyBtb2RlKSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3ViMT1cRVtELAorCWN1ZDE9XEVbQiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwlkY2gxPVxFW1AsIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGlsMT1cRVtMLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILCB0YmM9XEVbMmcsCisJdXNlPWtsb25lK3Nnci1kdW1iLAorcGNhbnNpLTI1LW18cGNhbnNpMjVtfGlibS1wYyB0ZXJtaW5hbCBwcm9ncmFtcyB3aXRoIDI1IGxpbmVzIChtb25vIG1vZGUpLAorCWxpbmVzIzI1LCB1c2U9cGNhbnNpLW0sCitwY2Fuc2ktMzMtbXxwY2Fuc2kzM218aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIHdpdGggMzMgbGluZXMgKG1vbm8gbW9kZSksCisJbGluZXMjMzMsIHVzZT1wY2Fuc2ktbSwKK3BjYW5zaS00My1tfGFuc2k0M218aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIHdpdGggNDMgbGluZXMgKG1vbm8gbW9kZSksCisJbGluZXMjNDMsIHVzZT1wY2Fuc2ktbSwKKyMgVGhlIGNvbG9yIHZlcnNpb25zLiAgQWxsIFBDIGVtdWxhdG9ycyBkbyBjb2xvci4uLgorcGNhbnNpfGlibS1wYyB0ZXJtaW5hbCBwcm9ncmFtcyBjbGFpbWluZyB0byBiZSBhbnNpLAorCXVzZT1rbG9uZStjb2xvciwgdXNlPXBjYW5zaS1tLAorcGNhbnNpLTI1fHBjYW5zaTI1fGlibS1wYyB0ZXJtaW5hbCBwcm9ncmFtcyB3aXRoIDI1IGxpbmVzLAorCWxpbmVzIzI1LCB1c2U9cGNhbnNpLAorcGNhbnNpLTMzfHBjYW5zaTMzfGlibS1wYyB0ZXJtaW5hbCBwcm9ncmFtcyB3aXRoIDMzIGxpbmVzLAorCWxpbmVzIzMzLCB1c2U9cGNhbnNpLAorcGNhbnNpLTQzfHBjYW5zaTQzfGlibS1wYyB0ZXJtaW5hbCBwcm9ncmFtcyB3aXRoIDQzIGxpbmVzLAorCWxpbmVzIzQzLCB1c2U9cGNhbnNpLAorCisjIGFuc2ktbSAtLSBmdWxsIEFOU0kgWDMuNjQgd2l0aCBBTlNJLlNZUy1jb21wYXRpYmxlIGF0dHJpYnV0ZXMsIG5vIGNvbG9yLgorIyBJZiB5b3Ugd2FudCBwb3VuZCBzaWducyByYXRoZXIgdGhhbiBkb2xsYXJzLCByZXBsYWNlIGBCJyB3aXRoIGBBJworIyBpbiB0aGUgPHMwZHM+LCA8czFkcz4sIDxzMmRzPiwgYW5kIDxzM2RzPiBjYXBhYmlsaXRpZXMuCisjIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBOb3YgNiAxOTk1CithbnNpLW18YW5zaS1tb25vfEFOU0kgWDMuNjQtMTk3OSB0ZXJtaW5hbCB3aXRoIEFOU0kuU1lTIGNvbXBhdGlibGUgYXR0cmlidXRlcywKKwltYzVpLAorCWN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsIGN1Zj1cRVslcDElZEMsCisJY3V1PVxFWyVwMSVkQSwgZGNoPVxFWyVwMSVkUCwgZGw9XEVbJXAxJWRNLAorCWVjaD1cRVslcDElZFgsIGVsMT1cRVsxSywgaHBhPVxFWyVpJXAxJWRHLCBodD1cRVtJLAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaW5kbj1cRVslcDElZFMsIGticz1eSCwKKwlrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2ljaDE9XEVbTCwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIG5lbD1cclxFW1MsCisJcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLCByaW49XEVbJXAxJWRULCBzMGRzPVxFKEIsCisJczFkcz1cRSlCLCBzMmRzPVxFKkIsIHMzZHM9XEUrQiwgdGJjPVxFWzJnLAorCXZwYT1cRVslaSVwMSVkZCwgdXNlPXBjYW5zaS1tLAorCithbnNpK2VucXxuY3Vyc2VzIGV4dGVuc2lvbiBmb3IgQU5TSSBFTlEsCisJdTY9XEVbJWklZDslZFIsIHU3PVxFWzZuLCB1OD1cRVs/JVs7MDEyMzQ1Njc4OV1jLAorCXU5PVxFW2MsCisKKyMgYW5zaSAtLSB0aGlzIHRlcm1pbmZvIGV4cHJlc3NlcyB0aGUgbGFyZ2VzdCBzdWJzZXQgb2YgWDMuNjQgdGhhdCB3aWxsIGZpdCBpbgorIyBzdGFuZGFyZCB0ZXJtaW5mby4gIEFzc3VtZXMgQU5TSS5TWVMtY29tcGF0aWJsZSBhdHRyaWJ1dGVzIGFuZCBjb2xvci4KKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IE5vdiA2IDE5OTUKK2Fuc2l8YW5zaS9wYy10ZXJtIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwl1c2U9YW5zaStlbnEsIHVzZT1lY21hK2NvbG9yLCB1c2U9a2xvbmUrc2dyOCwgdXNlPWFuc2ktbSwKKworIyBhbnNpLWdlbmVyaWMgaXMgYSB2YW5pbGxhIEFOU0kgdGVybWluYWwuIFRoaXMgaXMgYXNzdW1lZCB0byBpbXBsZW1lbnQKKyMgYWxsIHRoZSBub3JtYWwgQU5TSSBzdHVmZiB3aXRoIG5vIGV4dGVuc2lvbnMuIEl0IGFzc3VtZXMKKyMgaW5zZXJ0L2RlbGV0ZSBsaW5lL2NoYXIgaXMgdGhlcmUsIHNvIGl0IHdvbid0IHdvcmsgd2l0aAorIyB2dDEwMCBjbG9uZXMuIEl0IGFzc3VtZXMgdmlkZW8gYXR0cmlidXRlcyBmb3IgYm9sZCwgYmxpbmssCisjIHVuZGVybGluZSwgYW5kIHJldmVyc2UsIHdoaWNoIHdvbid0IG1hdHRlciBtdWNoIGlmIHRoZSB0ZXJtaW5hbAorIyBjYW4ndCBkbyBzb21lIG9mIHRob3NlLiBQYWRkaW5nIGlzIGFzc3VtZWQgdG8gYmUgemVybywgd2hpY2gKKyMgc2hvdWxkbid0IGh1cnQgc2luY2UgeG9uL3hvZmYgaXMgYXNzdW1lZC4KK2Fuc2ktZ2VuZXJpY3xnZW5lcmljIGFuc2kgc3RhbmRhcmQgdGVybWluYWwsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdXNlPXZhbmlsbGEsIHVzZT1hbnNpK2NzciwgdXNlPWFuc2krY3VwLAorCXVzZT1hbnNpK3JjYSwgdXNlPWFuc2krZXJhc2UsIHVzZT1hbnNpK3RhYnMsCisJdXNlPWFuc2krbG9jYWwsIHVzZT1hbnNpK2lkYywgdXNlPWFuc2kraWRsLCB1c2U9YW5zaStyZXAsCisJdXNlPWFuc2krc2dyYm9sZCwgdXNlPWFuc2krYXJyb3dzLAorCisjIyMjIERPUyBBTlNJLlNZUyB2YXJpYW50cworIworIyBUaGlzIGNvbXBsZXRlbHkgZGVzY3JpYmVzIHRoZSBzZXF1ZW5jZXMgc3BlY2lmaWVkIGluIHRoZSBET1MgMi4xIEFOU0kuU1lTCisjIGRvY3VtZW50YXRpb24gKGV4Y2VwdCBmb3IgdGhlIGtleWJvYXJkIGtleSByZWFzc2lnbm1lbnQgZmVhdHVyZSwgd2hpY2gKKyMgZG9lc24ndCBmaXQgdGhlIDxwZmtleT4gbW9kZWwgd2VsbCkuICBUaGUga2xvbmUrYWNzIHNlcXVlbmNlcyB3ZXJlIHZhbGlkCisjIHRob3VnaCB1bmRvY3VtZW50ZWQuICBUaGUgPHBma2V5PiBjYXBhYmlsaXR5IGlzIHVudGVzdGVkIGJ1dCBzaG91bGQgd29yayBmb3IKKyMga2V5cyBGMS1GMTAgKCVwMSB2YWx1ZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHdpbGwgeWllbGQgdW5wcmVkaWN0YWJsZSByZXN1bHRzKS4KKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IE5vdiA3IDE5OTUKK2Fuc2kuc3lzLW9sZHxBTlNJLlNZUyB1bmRlciBQQy1ET1MgMi4xLAorCU9UYnMsIGFtLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwljbGVhcj1cRVsySiwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVsPVxFW2ssIGhvbWU9XEVbSCwKKwlpczI9XEVbbVxFWz83aCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssCisJa2hvbWU9Xl4sIHBma2V5PVxFWzA7JXAxJXs1OH0lKyVkOyVwMiIlcyIsIHJjPVxFW3UsCisJcm1hbT1cRVs/N2wsIHNjPVxFW3MsIHNtYW09XEVbPzdoLCB1Nj1cRVslaSVkOyVkUiwKKwl1Nz1cRVs2biwgdXNlPWtsb25lK2NvbG9yLCB1c2U9a2xvbmUrc2dyOCwKK2Fuc2kuc3lzfEFOU0kuU1lTIDMuMSBhbmQgbGF0ZXIgdmVyc2lvbnMsCisJZWw9XEVbSywgdXNlPWFuc2kuc3lzLW9sZCwKKworIworIyBEZWZpbmUgSUJNIFBDIGtleXBhZCBrZXlzIGZvciB2aSBhcyBwZXIgTVMtS2VybWl0IHdoaWxlIHVzaW5nIEFOU0kuU1lTLgorIyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgdGVybWluYWwgZW11bGF0b3IgY2Fubm90IHJlZGVmaW5lIHRoZSBrZXlzLgorIyBTaW5jZSByZWRlZmluaW5nIGtleXMgd2l0aCBhbnNpLnN5cyBhbHNvIGFmZmVjdHMgUEMtRE9TIHByb2dyYW1zLCB0aGUga2V5CisjIGRlZmluaXRpb25zIG11c3QgYmUgcmVzdG9yZWQuICBJZiB0aGUgdGVybWluYWwgZW11bGF0b3IgaXMgcXVpdCB3aGlsZSBpbiB2aQorIyBvciBvdGhlcnMgdXNpbmcgPHNta3g+LzxybWt4PiwgdGhlIGtleXBhZCB3aWxsIG5vdCBiZSBkZWZpbmVkIGFzIHBlciBQQy1ET1MuCisjIFRoZSBQZ1VwIGFuZCBQZ0RuIGFyZSBwcmVmaXhlZCB3aXRoIEVTQyBzbyB0aGF0IHRuMzI3MCBjYW4gYmUgdXNlZCBvbiBVbml4CisjICheVSBhbmQgXkQgYXJlIGFscmVhZHkgZGVmaW5lZCBmb3IgdG4zMjcwKS4gIFRoZSBFU0MgaXMgc2FmZSBmb3IgdmkgYnV0IGl0CisjIGRvZXMgImJlZXAiLiAgRVNDIEVTQyBpIGlzIHVzZWQgZm9yIElucyB0byBhdm9pZCB0bjMyNzAgRVNDIGkgZm9yIGNvbHRhYi4KKyMgTm90ZSB0aGF0IDxrY3ViMT4gaXMgYWx3YXlzIEJTLCBiZWNhdXNlIFBDLWRvcyBjYW4gdG9sZXJhdGUgdGhpcyBjaGFuZ2UuCisjIENhdXRpb246IHZpIGlzIGxpbWl0ZWQgdG8gMjU2IHN0cmluZyBieXRlcywgbG9uZ2VyIGNyYXNoZXMgb3Igd2VpcmRzIG91dCB2aS4KKyMgQ29uc2VxdWVudGx5IHRoZSBFbmQga2V5cGFkIGtleSBjb3VsZCBub3QgYmUgc2V0IChpdCBpcyByZWxhdGl2ZWx5IHNhZmUgYW5kCisjIGFjdHVhbGx5IHVzZWZ1bCBiZWNhdXNlIGl0IHNlbmRzIF5AIE8sIHdoaWNoIGJlZXBzIGFuZCBvcGVucyBhIGxpbmUgYWJvdmUpLgorYW5zaS5zeXNrfGFuc2lzeXNrfFBDLURPUyAzLjEgQU5TSS5TWVMgd2l0aCBrZXlwYWQgcmVkZWZpbmVkIGZvciB2aSwKKwlpczI9VTIgUEMtRE9TIDMuMSBBTlNJLlNZUyB3aXRoIGtleXBhZCByZWRlZmluZWQgZm9yIHZpIDktMjktODZcblxFWzs3NTs4cCwKKwlybWt4PVxFWzs3MTswOzcxcFxFWzs3MjswOzcycFxFWzs3MzswOzczcFxFWzs3NzswOzc3cFxFWzs4MDswOzgwcFxFWzs4MTswOzgxcFxFWzs4MjswOzgycFxFWzs4MzswOzgzcCwKKwlzbWt4PVxFWzs3MTszMHBcRVs7NzI7MTFwXEVbOzczOzI3OzIxcFxFWzs3NzsxMnBcRVs7ODA7MTBwXEVbOzgxOzI3OzRwXEVbOzgyOzI3OzI3OzEwNXBcRVs7ODM7MTI3cCwKKwl1c2U9YW5zaS5zeXMsCisjCisjIEFkZHMgaW5zL2RlbCBsaW5lL2NoYXJhY3RlciwgaGVuY2UgdmkgcmV2ZXJzZSBzY3JvbGxzL2luc2VydHMvZGVsZXRlcyBuaWNlci4KK25hbnNpLnN5c3xuYW5zaXN5c3xQQy1ET1MgUHVibGljIERvbWFpbiBOQU5TSS5TWVMsCisJZGNoMT1cRVsxUCwgZGwxPVxFWzFNLCBpY2gxPVxFWzFALCBpbDE9XEVbMUwsCisJaXMyPVUzIFBDLURPUyBQdWJsaWMgRG9tYWluIE5BTlNJLlNZUyA5LTIzLTg2XG4sCisJdXNlPWFuc2kuc3lzLAorIworIyBTZWUgYW5zaS5zeXNrIGFuZCBuYW5zaS5zeXMgYWJvdmUuCituYW5zaS5zeXNrfG5hbnNpc3lza3xQQy1ET1MgUHVibGljIERvbWFpbiBOQU5TSS5TWVMgd2l0aCBrZXlwYWQgcmVkZWZpbmVkIGZvciB2aSwKKwlkY2gxPVxFWzFQLCBkbDE9XEVbMU0sIGljaDE9XEVbMUAsIGlsMT1cRVsxTCwKKwlpczI9VTQgUEMtRE9TIFB1YmxpYyBEb21haW4gTkFOU0kuU1lTIHdpdGgga2V5cGFkIHJlZGVmaW5lZCBmb3IgdmkgOS0yOS04NlxuXEVbOzc1OzhwLAorCXVzZT1hbnNpLnN5c2ssCisKKyMjIyMgQU5TSSBjb25zb2xlIHR5cGVzCisjCisKKyMjIyMgQmVPUworIworIyBCZU9TIGVudHJ5IGZvciBUZXJtaW5hbCBwcm9ncmFtIFNlZW1zIHRvIGJlIGFsbW9zdCBBTlNJCitiZXRlcm18QmVPUyBUZXJtaW5hbCwKKwlhbSwgZW8sIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgbmN2IzUsIHBhaXJzIzY0LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgaG9tZT1cRVtILAorCWhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVszfiwKKwlrZW5kPVxFWzR+LCBrZjE9XEVbMTF+LCBrZjEwPVxFWzIwfiwga2YxMT1cRVsyMX4sCisJa2YxMj1cRVsyMn4sIGtmMj1cRVsxMn4sIGtmMz1cRVsxM34sIGtmND1cRVsxNH4sCisJa2Y1PVxFWzE1fiwga2Y2PVxFWzE2fiwga2Y3PVxFWzE3fiwga2Y4PVxFWzE4fiwga2Y5PVxFWzE5fiwKKwlraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LCBrc3BkPV5aLAorCW5lbD1eTV5KLCBvcD1cRVttLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzRsLCBybXNvPVxFW20sIHJtdWw9XEVbMjRtLCByczE9XEVjLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZXRiPVxFWyVwMSV7NDB9JSslY20sIHNldGY9XEVbJXAxJXszMH0lKyVjbSwKKwlzZ3IwPVxFWzA7MTBtLCBzbWlyPVxFWzRoLCBzbWt4PVxFWz80aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB1Nj1cRVslaSVwMSVkOyVwMiVkUiwgdTc9XEVbNm4sCisJdnBhPVxFWyVpJXAxJWRkLAorCisjIyMjIExpbnV4IGNvbnNvbGVzCisjCisKKyMgVGhpcyBlbnRyeSBpcyBnb29kIGZvciB0aGUgMS4yLjEzIG9yIGxhdGVyIHZlcnNpb24gb2YgdGhlIExpbnV4IGNvbnNvbGUuCisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjICogTGludXhlcyBjb21lIHdpdGggYSBkZWZhdWx0IGtleWJvYXJkIG1hcHBpbmcga2NidD1eSS4gIFRoaXMgZW50cnksIGluICAgKgorIyAqIHJlc3BvbnNlIHRvIHVzZXIgcmVxdWVzdHMsIGFzc3VtZXMga2NidD1cRVtaLCB0aGUgQU5TSS9FQ01BIHJldmVyc2UtdGFiICoKKyMgKiBjaGFyYWN0ZXIuIEhlcmUgYXJlIHRoZSBrZXltYXAgcmVwbGFjZW1lbnQgbGluZXMgdGhhdCB3aWxsIHNldCB0aGlzIHVwOiAqCisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIwlrZXljb2RlICAxNSA9IFRhYiAgICAgICAgICAgICBUYWIKKyMJCWFsdCAgICAga2V5Y29kZSAgMTUgPSBNZXRhX1RhYgorIwkJc2hpZnQJa2V5Y29kZSAgMTUgPSBGMjYKKyMJc3RyaW5nIEYyNiA9IlwwMzNbWiIKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjICogVGhpcyBoYXMgdG8gdXNlIGEga2V5IHNsb3Qgd2hpY2ggaXMgdW5mb3J0dW5hdGUgKGFueSB1bnVzZWQgb25lIHdpbGwgICAgKgorIyAqIGRvLCBGMjYgaXMgdGhlIGhpZ2hlci1udW1iZXJlZCBvbmUpLiAgVGhlIGNoYW5nZSBvdWdodCB0byBiZSBidWlsdCAgICAgICoKKyMgKiBpbnRvIHRoZSBrZXJuZWwgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMgQWxsIGxpbnV4IGtlcm5lbHMgc2luY2UgMS4yLjEzIChhdCBsZWFzdCkgc2V0IHRoZSBzY3JlZW4gc2l6ZQorIyB0aGVtc2VsdmVzOyB0aGlzIGVudHJ5IGFzc3VtZXMgdGhhdCBjYXBhYmlsaXR5LgorIworbGludXgtYmFzaWN8bGludXggY29uc29sZSwKKwlhbSwgYmNlLCBlbywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJaXQjOCwgbmN2IzE4LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGlcMzE2alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFW0osIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLAorCWVsMT1cRVsxSywgZmxhc2g9XEVbPzVoXEVbPzVsJDwyMDAvPiwgaG9tZT1cRVtILAorCWhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGtiMj1cRVtHLCBrYnM9XDE3NywKKwlrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtlbmQ9XEVbNH4sIGtmMT1cRVtbQSwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sCisJa2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sCisJa2YxOT1cRVszM34sIGtmMj1cRVtbQiwga2YyMD1cRVszNH4sIGtmMz1cRVtbQywga2Y0PVxFW1tELAorCWtmNT1cRVtbRSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGttb3VzPVxFW00sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtzcGQ9XlosIG5lbD1eTV5KLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFtPVxFWz83bCwKKwlybWlyPVxFWzRsLCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sIHJzMT1cRWNcRV1SLCBzYz1cRTcsCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTElO20sCisJc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl2cGE9XEVbJWklcDElZGQsIHVzZT12dDEwMitlbnEsIHVzZT1rbG9uZStzZ3IsCisJdXNlPWVjbWErY29sb3IsCisKK2xpbnV4LW18TGludXggY29uc29sZSBubyBjb2xvciwKKwljb2xvcnNALCBwYWlyc0AsCisJc2V0YWJALCBzZXRhZkAsIHNldGJALCBzZXRmQCwgdXNlPWxpbnV4LAorCisjIFRoZSAxLjMueCBrZXJuZWxzIGFkZCBjb2xvci1jaGFuZ2UgY2FwYWJpbGl0aWVzOyBpZiB5b3VycyBkb2Vzbid0IGhhdmUgdGhpcworIyBhbmQgaXQgbWF0dGVycywgdHVybiBvZmYgPGNjYz4uICBUaGUgJTAyeCBlc2NhcGUgdXNlZCB0byBpbXBsZW1lbnQgdGhpcyBpcworIyBub3Qgc3VwcG9zZWRseSBiYWNrLXBvcnRhYmxlIHRvIG9sZGVyIFNWIGN1cnNlcyAoYWx0aG91Z2ggaXQgaGFzIHdvcmtlZCBmaW5lCisjIG9uIFNvbGFyaXMgZm9yIHNldmVyYWwgeWVhcnMpIGFuZCBub3Qgc3VwcG9ydGVkIGluIG5jdXJzZXMgdmVyc2lvbnMgYmVmb3JlCisjIDEuOS45LgorbGludXgtYy1uY3xsaW51eCBjb25zb2xlIHdpdGggY29sb3ItY2hhbmdlLAorCWNjYywKKwlpbml0Yz1cRV1QJXAxJXglcDIlezI1Nn0lKiV7MTAwMH0lLyUwMnglcDMlezI1Nn0lKiV7MTAwMH0lLyUwMnglcDQlezI1Nn0lKiV7MTAwMH0lLyUwMngsCisJb2M9XEVdUiwgdXNlPWxpbnV4LWJhc2ljLAorIyBGcm9tOiBEZW5uaXMgSGVucmlrc2VuIDxvcHVzQG9zcmwuZGs+LCA5IEp1bHkgMTk5NgorbGludXgtY3xsaW51eCBjb25zb2xlIDEuMy42KyBmb3Igb2xkZXIgbmN1cnNlcywKKwljY2MsCisJaW5pdGM9XEVdUCU/JXAxJXs5fSU+JXQlcDElezEwfSUtJSdhJyUrJWMlZSVwMSVkJTslcDIlezI1Nn0lKiV7MTAwMH0lLyVQciVnciV7MTZ9JS8lUHglPyVneCV7OX0lPiV0JWd4JXsxMH0lLSUnYSclKyVjJWUlZ3glZCU7JWdyJXsxNX0lJiVQeCU/JWd4JXs5fSU+JXQlZ3glezEwfSUtJSdhJyUrJWMlZSVneCVkJTslcDMlezI1Nn0lKiV7MTAwMH0lLyVQciVnciV7MTZ9JS8lUHglPyVneCV7OX0lPiV0JWd4JXsxMH0lLSUnYSclKyVjJWUlZ3glZCU7JWdyJXsxNX0lJiVQeCU/JWd4JXs5fSU+JXQlZ3glezEwfSUtJSdhJyUrJWMlZSVneCVkJTslcDQlezI1Nn0lKiV7MTAwMH0lLyVQciVnciV7MTZ9JS8lUHglPyVneCV7OX0lPiV0JWd4JXsxMH0lLSUnYSclKyVjJWUlZ3glZCU7JWdyJXsxNX0lJiVQeCU/JWd4JXs5fSU+JXQlZ3glezEwfSUtJSdhJyUrJWMlZSVneCVkJTssCisJb2M9XEVdUiwgdXNlPWxpbnV4LWJhc2ljLAorCisjIFRoZSAyLjIueCBrZXJuZWxzIGFkZCBhIHByaXZhdGUgbW9kZSB0aGF0IHNldHMgdGhlIGN1cnNvciB0eXBlOyB1c2UgdGhhdCB0bworIyBnZXQgYSBibG9jayBjdXJzb3IgZm9yIGN2dmlzLgorIyByZXBvcnRlZCBieSBGcmFuayBIZWNrZW5iYWNoIDxmcmFua0BnLW4tdS5kZT4uCitsaW51eHxsaW51eCBjb25zb2xlLAorCWNpdmlzPVxFWz8yNWxcRVs/MWMsIGNub3JtPVxFWz8yNWhcRVs/MGMsCisJY3Z2aXM9XEVbPzI1aFxFWz84YywgdXNlPWxpbnV4LWMtbmMsCisKKyMgU3ViamVjdDogbGludXggMi42LjI2IHZ0IGJhY2tfY29sb3JfZXJhc2UKKyMgQ2hhbmdlcyB0byB0aGUgTGludXggY29uc29sZSBkcml2ZXIgYnJva2UgYmNlIG1vZGVsIGFzIHJlcG9ydGVkIGluCisjCWh0dHBzOi8vYnVnemlsbGEubm92ZWxsLmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NDE4NjEzCisjIGFwcGFyZW50bHkgZnJvbQorIwlodHRwOi8vbGttbC5vcmcvbGttbC8yMDA4LzQvMjYvMzA1CisjCWh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9mYS5saW51eC5rZXJuZWwvYnJvd3NlX3RocmVhZC90aHJlYWQvODdmOTgzMzhmMGQ2MzZiYi9hYTk2ZThiODZjZWUwZDFlP2xuaz1zdCZxPSNhYTk2ZThiODZjZWUwZDFlCitsaW51eDIuNi4yNnxsaW51eCBjb25zb2xlIHcvbyBiY2UsCisJYmNlQCwgdXNlPWxpbnV4LAorCisjIFNlZSB0aGUgbm90ZSBvbiBJQ0gvSUNIMSBWRVJTVVMgUk1JUi9TTUlSIG5lYXIgdGhlIGVuZCBvZiBmaWxlCitsaW51eC1uaWN8bGludXggd2l0aCBpY2gvaWNoMSBzdXBwcmVzc2VkIGZvciBub24tY3Vyc2VzIHByb2dyYW1zLAorCWljaEAsIGljaDFALCB1c2U9bGludXgsCisKKyMgVGhpcyBhc3N1bWVzIHlvdSBoYXZlIHVzZWQgc2V0Zm9udCg4KSB0byBsb2FkIG9uZSBvZiB0aGUgTGludXgga29pOC1yIGZvbnRzLgorIyBhY3NjIGVudHJ5IGZyb20gUGF2ZWwgUm9za2luIiA8cGF2ZWxAYWJzb2x1dGUuc3BiLnN1PiwgMjkgU2VwIDE5OTcuCitsaW51eC1rb2k4fGxpbnV4IHdpdGgga29pOCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDIxNWBcMDA0YVwyMjFmXDIzNGdcMjM3aFwyMjBpXDI3NmpcMjA1a1wyMDNsXDIwMm1cMjA0blwyMTJvfnBcMHFcMHJcMHNfdFwyMDZ1XDIwN3ZcMjExd1wyMTB4XDIwMXlcMjMwelwyMzF7XDI2N3xcMjc0flwyMjQsCisJdXNlPWxpbnV4LCB1c2U9a2xvbmUra29pOGFjcywKKworIyBBbm90aGVyIGVudHJ5IGZvciBLT0k4LXIgd2l0aCBRaW5nIExvbmcncyBhY3NjLgorIyAod2hpY2ggb25lIGJldHRlciBjb21wbGllcyB3aXRoIHRoZSBzdGFuZGFyZD8pCitsaW51eC1rb2k4cnxsaW51eCB3aXRoIGtvaTgtciBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCwKKwl1c2U9bGludXgsIHVzZT1rbG9uZStrb2k4YWNzLAorCisjIEVudHJ5IGZvciB0aGUgbGF0aW4xIGFuZCBsYXRpbjIgZm9udHMKK2xpbnV4LWxhdHxsaW51eCB3aXRoIGxhdGluMSBvciBsYXRpbjIgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQsCisJYWNzYz0rXDAyMFwsXDAyMS1cMDMwLl5ZMFwzMzNgXDAwNGFcMDEzZlwzNzBnXDM2MWhcMjYwaVwzMTZqXDIxMWtcMjE0bFwyMDZtXDIwM25cMzA1b35wXDMwNHFcMjEyclwzMDRzX3RcMjA3dVwyMTV2XDMwMXdcMzAyeFwyMDV5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJdXNlPWxpbnV4LAorCisjIFRoaXMgdXNlcyBncmFwaGljcyBmcm9tIFZUIGNvZGVzZXQgaW5zdGVhZCBvZiBmcm9tIGNwNDM3LgorIyByZWFzb246IGNwNDM3IChha2EgInN0cmFpZ2h0IHRvIGZvbnQiKSBpcyBub3QgZnVuY3Rpb25hbCB1bmRlciBsdWl0LgorIyBmcm9tOiBBbmRyZXkgViBMdWt5YW5vdiA8bGFuZEBsb25nLnlhci5ydT4uCitsaW51eC12dHxsaW51eCBjb25zb2xlIHVzaW5nIFZUIGNvZGVzIGZvciBncmFwaGljcywKKwlhY3NjPSsrXCxcLC0tLi4wMGBgYWFmZmdnaGhpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp+fiwKKwlybWFjcz1cRShLLCBybXBjaEAsIHNnckAsIHNncjA9XEVbMG1cRShLXDAxNywgc21hY3M9XEUoMCwKKwlzbXBjaEAsIHVzZT1saW51eCwKKworIyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBMaW51eCBjb25zb2xlIChyZWxpZXMgb24gdGhlIGNvbnNvbGUgdG8gcGVyZm9ybSBzb21lCisjIG9mIHRoZSBmdW5jdGlvbmFsaXR5KSwgYnV0IGRvZXMgbm90IHJlY29nbml6ZSBhcyBtYW55IGNvbnRyb2wgc2VxdWVuY2VzLgorIyBUaGUgcHJvZ3JhbSBjb21lcyBidW5kbGVkIHdpdGggYW4gb2xkIChjaXJjYSAxOTk4KSBjb3B5IG9mIHRoZSBMaW51eAorIyBjb25zb2xlIHRlcm1pbmZvLiAgSXQgcmVjb2duaXplcyBzb21lIG5vbi1BTlNJL1ZUMTAwIHNlcXVlbmNlcyBzdWNoIGFzCisjCVxFKgltb3ZlIGN1cnNvciB0byBob21lLCBhcyBhcyBcRVtICisjCVxFLFgJc2FtZSBhcyBcRShYCisjCVxFRQltb3ZlIGN1cnNvciB0byBiZWdpbm5pbmcgb2Ygcm93CisjCVxFW3kseGYJc2FtZSBhcyBcRVt5LHhICisjCisjIE5vdGU6IFRoZSBzdGF0dXMtbGluZSBzdXBwb3J0IGlzIGJ1Z2d5IChkc2wgZG9lcyBub3Qgd29yaykuCitrb258a29uMnxqZmJ0ZXJtfEthbmppIE9OIExpbnV4IGNvbnNvbGUsCisJY2NjQCwgaHMsCisJY2l2aXNALCBjbm9ybUAsIGN2dmlzQCwgZHNsPVxFWz9ILCBmbGFzaEAsIGZzbD1cRVs/RiwgaW5pdGNALAorCWluaXRwQCwga2NidEAsIG9jQCwgb3A9XEVbMzc7NDBtLCByczE9XEVjLCB0c2w9XEVbP1QsCisJdXNlPWxpbnV4LAorCisjIyMjIE1hY2gKKyMKKworIyBGcm9tOiBNYXR0aGV3IFZlcm5vbiA8bWN2MjFAcGljay5zZWwuY2FtLmFjLnVrPgorbWFjaHxNYWNoIENvbnNvbGUsCisJYW0sIGttLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFYywgY3I9Xk0sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWticz1cMTc3LCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzksIGtlbmQ9XEVbWSwga2YxPVxFT1AsIGtmMTA9XEVPWSwga2YyPVxFT1EsCisJa2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPVCwga2Y2PVxFT1UsIGtmNz1cRU9WLCBrZjg9XEVPVywKKwlrZjk9XEVPWCwga2hvbWU9XEVbSCwga2ljaDE9XEVbQCwga2xsPVxFW0YsIGtucD1cRVtVLAorCWtwcD1cRVtWLCByZXY9XEVbN20sIHJtc289XEVbMG0sIHJtdWw9XEVbMjRtLCBzZ3IwPVxFWzBtLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sCittYWNoLWJvbGR8TWFjaCBDb25zb2xlIHdpdGggYm9sZCBpbnN0ZWFkIG9mIHVuZGVybGluZSwKKwlybXVsPVxFWzBtLCBzbXVsPVxFWzFtLCB1c2U9bWFjaCwKK21hY2gtY29sb3J8TWFjaCBDb25zb2xlIHdpdGggQU5TSSBjb2xvciwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJZGltPVxFWzJtLCBpbnZpcz1cRVs4bSwgb3A9XEVbMzc7NDBtLCBybXNvPVxFWzI3bSwKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCB1c2U9bWFjaCwKKworIyBGcm9tOiBNYXJjdXMgQnJpbmttYW5uCisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy8qY2hlY2tvdXQqL2h1cmQvaHVyZC9jb25zb2xlLworIworIyBDb21tZW50cyBpbiB0aGUgb3JpZ2luYWwgYXJlIHN1bW1hcml6ZWQgaGVyZToKKyMKKyMgaHVyZCB1c2VzIDgtYml0IGNoYXJhY3RlcnMgKGttKS4KKyMKKyMgQWx0aG91Z2ggaXQgZG9lc24ndCBkbyBYT04vWE9GRiwgd2UgZG9uJ3Qgd2FudCBwYWRkaW5nIGNoYXJhY3RlcnMgKHhvbikuCisjCisjIFJlZ2FyZGluZyBjb21wYXRpYmlsaXR5IHRvIHZ0MTAwOiAgaHVyZCBkb2Vzbid0IHNwZWNpZnkgPHhlbmw+LCBhcyB3ZSBkb24ndAorIyBoYXZlIHRoZSBlYXRfbmV3bGluZV9nbGl0Y2guICBJdCBkb2Vzbid0IHN1cHBvcnQgc2V0dGluZyBvciByZW1vdmluZyB0YWIKKyMgc3RvcHMgKGh0cy90YmMpLgorIworIyBodXJkIHVzZXMgXkggaW5zdGVhZCBvZiBcRVtEIGZvciBjdWIxLCBhcyBvbmx5IF5IIGltcGxlbWVudHMgPGJ3PiBhbmQgaXQgaXMKKyMgb25lIGJ5dGUgaW5zdGVhZCB0aHJlZS4KKyMKKyMgPGljaDE+IGlzIG5vdCBpbmNsdWRlZCBiZWNhdXNlIGh1cmQgaGFzIGluc2VydCBtb2RlLgorIworIyBodXJkIGRvZXNuJ3QgdXNlIF5KIGZvciBzY3JvbGxpbmcsIGJlY2F1c2UgdGhpcyBjb3VsZCBwdXQgdGhpbmdzIGludG8gdGhlCisjIHNjcm9sbGJhY2sgYnVmZmVyLgorIworIyBnc2JvbS9ncmJvbSBhcmUgdXNlZCB0byBlbmFibGUvZGlzYWJsZSByZWFsIGJvbGQgKG5vdCBpbnRlbnNpdHkgYnJpZ2h0KSBtb2RlLgorIyBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4KKyMKKyMgVGhlIG9yaWdpbmFsIGhhcyBjb21tZW50ZWQtb3V0IG5jdiwgYnV0IGlzIHJlc3RvcmVkIGhlcmUuCisjCisjIFJlYWRpbmcgdGhlIHNvdXJjZSwgUklTIHJlc2V0cyBjbm9ybSwgYnV0IG5vdCB4bW91cy4KK2h1cmR8VGhlIEdOVSBIdXJkIGNvbnNvbGUgc2VydmVyLAorCWFtLCBiY2UsIGJ3LCBlbywga20sIG1pciwgbXNnciwgeG9uLAorCWNvbG9ycyM4LCBpdCM4LCBuY3YjMTgsIHBhaXJzIzY0LAorCWFjc2M9KytcLFwsLS0uLjAwaWlgYGFhZmZnZ2hoampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFYywgY25vcm09XEVbPzI1aCwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBjdnZpcz1cRVszNGwsIGRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBmbGFzaD1cRWcsCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBpY2g9XEVbJXAxJWRALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLCBpbmRuPVxFWyVwMSVkUywKKwlpbnZpcz1cRVs4bSwga2IyPVxFW0csIGticz1cMTc3LCBrY2J0PVxFW1osIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2RjaDE9XEVbM34sCisJa2VuZD1cRVs0fiwga2YxPVxFT1AsIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVPUSwga2YyMD1cRVszNH4sIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFWzE1fiwKKwlrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga21vdXM9XEVbTSwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NwZD1eWiwgbmVsPV5NXkosIG9wPVxFWzM5OzQ5bSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFW1QsCisJcmluPVxFWyVwMSVkVCwgcml0bT1cRVsyM20sIHJtYWNzPVxFWzEwbSwgcm1pcj1cRVs0bCwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sIHJzMT1cRU1cRVs/MTAwMGwsIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNncj1cRVswJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttLAorCXNncjA9XEVbMG0sIHNpdG09XEVbM20sIHNtYWNzPVxFWzExbSwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB2cGE9XEVbJWklcDElZGQsIGdyYm9tPVxFWz4xbCwKKwlnc2JvbT1cRVs+MWgsCisKKyMjIyMgT1NGIFVuaXgKKyMKKworIyBPU0YvMSAxLjEgU25hcHNob3QgMgorcG1jb25zfHBtY29uc29sZXxQTUFYIGNvbnNvbGUsCisJYW0sCisJY29scyMxMjgsIGxpbmVzIzU3LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdXUxPV5LLCBodD1eSSwKKwlpbmQ9XkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsCisKKyMgU0NPIGNvbnNvbGUgYW5kIFNPUy1TeXNjb25zIGNvbnNvbGUgZm9yIDM4NmJzZAorIyAoc2NvYW5zaTogaGFkIHVua25vd24gY2FwYWJpbGl0aWVzCisjCTpHYz1OOkdkPUs6R2g9TTpHbD1MOkd1PUo6R3Y9XDA3MjpcCisjCTpHQz1FOkdEPUI6R0g9RDpHTD1cNjQ6R1U9QTpHVj1cNjM6R1I9QzoKKyMJOkcxPT86RzI9WjpHMz1AOkc0PVk6RzU9OzpHNj1JOkc3PUg6Rzg9PDpcCisjCTpDVz1cRVtNOk5VPVxFW046UkY9XEVbTzpSQz1cRVtQOlwKKyMJOldMPVxFW1M6V1I9XEVbVDpDTD1cRVtVOkNSPVxFW1Y6XAorIyBJIHJlbmFtZWQgR1MvR0UvSE0vRU4vUFUvUEQvUlQgYW5kIGFkZGVkIGtsb25lK3Nnci1kdW1iLCBiYXNlZAorIyBvbiB0aGUgPHNtYWNzPj1cRVsxMm0gIC0tIGVzcikKKyMKKyMga2xvbmUrc2dyLWR1bWIgaXMgYW4gZXJyb3Igc2luY2UgdGhlIGFjc2MgZG9lcyBub3QgbWF0Y2ggLVRECisjCisjIEluIHRoaXMgZGVzY3JpcHRpb24gYmFzZWQgb24gU0NPJ3Mga2V5Ym9hcmQoSFcpIG1hbnBhZ2UgbGlzdCBvZiBkZWZhdWx0CisjIGZ1bmN0aW9uIGtleSB2YWx1ZXM6CisjCUYxMy1GMjQgYXJlIHNoaWZ0ZWQgRjEtRjEyCisjCUYyNS1GMzYgYXJlIGNvbnRyb2wgRjEtRjEyCisjCUYzNy1GNDggYXJlIHNoaWZ0K2NvbnRyb2wgRjEtRjEyCisjCisjIGhwYS92cGEgd29yayBpbiB0aGUgY29uc29sZSwgYnV0IG5vdCBpbiBzY290ZXJtOgorIwlocGE9XEVbJXAxJWRHLAorIwl2cGE9XEVbJXAxJWRkLAorIworIyBTQ08ncyB0ZXJtaW5mbyB1c2VzCisjCWtMRlQ9XEVbZCwKKyMJa1JJVD1cRVtjLAorIyB3aGljaCBkbyBub3Qgd29yayAoY29uc29sZSBvciBzY290ZXJtKS4KKyMKKyMgQ29uc29sZSBkb2N1bWVudHMgb25seSAzIGF0dHJpYnV0ZXMgY2FuIGJlIHNldCB3aXRoIFNHUiAoc28gd2UgZG9uJ3QgdXNlIHNncikuCitzY29hbnNpLW9sZHxTQ08gRXh0ZW5kZWQgQU5TSSBzdGFuZGFyZCBjcnQgKDUuMC41KSwKKwlPVGJzLCBhbSwgYmNlLCBlbywgeG9uLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgcGFpcnMjNjQsCisJYWNzYz0tXDIzMC5cMjMxXCwuKy8wWzU1NjY3Nzg4OTlcOlw6Ozs8PD09Pj5GRkdHSEhJSUpKS0tMTE1NTk5PT1BQUVFSUlNTVFRVVVZWV1dYWGBcMjA0YTBmeGdxaDJqWWs/bFptQG5FcUR0Q3U0dkF3QngzeXN6cntjfVwwMzR+XDIwNywKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwKKwljaXZpcz1cRVs9MTQ7MTJDLCBjbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFWz0xMDsxMkMsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgY3Z2aXM9XEVbPTA7MTJDLCBkY2g9XEVbJXAxJWRQLAorCWRjaDE9XEVbUCwgZGlzcGM9XEVbPSVwMSVkZywgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllZD1cRVttXEVbSiwgZWw9XEVbbVxFW0ssIGVsMT1cRVsxSywgaG9tZT1cRVtILCBodD1eSSwKKwlodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsCisJaW5kPVxFW1MsIGluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs4bSwga2JlZz1cRVtFLCBrYnM9XkgsCisJa2NidD1cRVtaLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVwxNzcsIGtlbmQ9XEVbRiwga2YxPVxFW00sIGtmMTA9XEVbViwga2YxMT1cRVtXLAorCWtmMTI9XEVbWCwga2YxMz1cRVtZLCBrZjE1PVxFW2EsIGtmMTY9XEVbYiwga2YxNz1cRVtjLAorCWtmMTg9XEVbZCwga2YxOT1cRVtlLCBrZjI9XEVbTiwga2YyMD1cRVtmLCBrZjIxPVxFW2csCisJa2YyMj1cRVtoLCBrZjIzPVxFW2ksIGtmMjQ9XEVbaiwga2YyNT1cRVtrLCBrZjI2PVxFW2wsCisJa2YyNz1cRVttLCBrZjI4PVxFW24sIGtmMjk9XEVbbywga2YzPVxFW08sIGtmMzA9XEVbcCwKKwlrZjMxPVxFW3EsIGtmMzI9XEVbciwga2YzMz1cRVtzLCBrZjM0PVxFW3QsIGtmMzU9XEVbdSwKKwlrZjM2PVxFW3YsIGtmMzc9XEVbdywga2YzOD1cRVt4LCBrZjM5PVxFW3ksIGtmND1cRVtQLAorCWtmNDA9XEVbeiwga2Y0MT1cRVtALCBrZjQyPVxFW1ssIGtmNDM9XEVbXFwsIGtmNDQ9XEVbXSwKKwlrZjQ1PVxFW1xeLCBrZjQ2PVxFW18sIGtmNDc9XEVbYCwga2Y0OD1cRVt7LCBrZjU9XEVbUSwKKwlrZjY9XEVbUiwga2Y3PVxFW1MsIGtmOD1cRVtULCBrZjk9XEVbVSwga2hvbWU9XEVbSCwKKwlraWNoMT1cRVtMLCBrbnA9XEVbRywga3BwPVxFW0ksIG9wPVxFWzA7Mzc7NDBtLCByYz1cRTgsCisJcmV2PVxFWzdtLCByaT1cRVtULCByaW49XEVbJXAxJWRULCBybWFjcz1cRVsxMG0sCisJcm1hbT1cRVs/N2wsIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwgc2dyMD1cRVswOzEwbSwKKwlzbWFjcz1cRVsxMm0sIHNtYW09XEVbPzdoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorc2NvYW5zaS1uZXd8U0NPIEV4dGVuZGVkIEFOU0kgc3RhbmRhcmQgY3J0ICg1LjAuNiksCisJa20sCisJY2l2aXM9XEVbPTBjLCBjbm9ybT1cRVs9MWMsIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdnZpcz1cRVs9MmMsIG1nYz1cRVs9ciwgb2M9XEVbNTFtLCBvcD1cRVs1MG0sCisJcmVwPVxFWyVwMSVkOyVwMiVkYiwgcm1tPVxFWz0xMUwsCisJc2dyPVxFWzAlPyVwMSVwMyV8JXQ7NyU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzEyJTttLAorCXNtZ2I9XEVbPTE7MG0sIHNtZ2JwPVxFWz0xOyVpJXAxJWRtLAorCXNtZ2xwPVxFWz0yOyVpJXAxJWRtLCBzbWdyPVxFWz0zOzBtLAorCXNtZ3JwPVxFWz0zOyVpJXAxJWRtLCBzbWd0PVxFWz0wOzBtLAorCXNtZ3RwPVxFWz0wOyVpJXAxJWRtLCBzbW09XEVbPTEwTCwKKwl3aW5kPVxFWyVpJXAxJWQ7JXAyJWQ7JWklcDMlZDslcDQlZHIsCisJdXNlPXNjb2Fuc2ktb2xkLAorIyBtYWtlIHRoaXMgZWFzeSB0byBjaGFuZ2UuLi4KK3Njb2Fuc2l8U0NPIEV4dGVuZGVkIEFOU0kgc3RhbmRhcmQgY3J0LAorCXVzZT1zY29hbnNpLW9sZCwKKworIyBUaGlzIGFjdHVhbGx5IGRlc2NyaWJlcyB0aGUgZ2VuZXJpYyBTVnI0IGRpc3BsYXkgZHJpdmVyIGZvciBJbnRlbCBib3hlcy4KKyMgVGhlIDxkaW09XEVbMm0+IGlzbid0IGRvY3VtZW50ZWQgYW5kIHRoZXJlZm9yZSBtYXkgbm90IGJlIHJlbGlhYmxlLgorIyBGcm9tOiBFcmljIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gTW9uIE5vdiAyNyAxOTowMDo1MyBFU1QgMTk5NQorYXR0NjM4NnxhdDM4NnwzODZhdHxBVCZUIFdHUyA2Mzg2IGNvbnNvbGUsCisJYW0sIGJ3LCBlbywgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWFjc2M9YGBhMWZ4Z3FoMGpZaz9sWm1AbkVvb3BwcURycnNzdEN1NHZBd0J4M3l5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPUMsCisJY2xlYXI9XEVbMkpcRVtILCBjbm9ybT1cRVs9MUMsIGNyPV5NLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XEVbRCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbMU0sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbMUAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFWzFMLCBpbmQ9XEVbUywKKwlpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOW0sIGlzMj1cRVswOzEwOzM5bSwga2JzPV5ILAorCWtjYnQ9Xl0sIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbUCwga2VuZD1cRVtZLCBrZjE9XEVPUCwga2YxMD1cRU9ZLCBrZjExPVxFT1osCisJa2YxMj1cRU9BLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPVCwga2Y2PVxFT1UsCisJa2Y3PVxFT1YsIGtmOD1cRU9XLCBrZjk9XEVPWCwga2hvbWU9XEVbSCwga2ljaDE9XEVbQCwKKwlrbnA9XEVbVSwga3BwPVxFW1YsIGtybWlyPVxFMCwgbmVsPVxyXEVbUywgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwgcm1hY3M9XEVbMTBtLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzYz1cRTcsCisJc2dyPVxFWzEwbVxFWzAlPyVwMSVwMyV8JXQ7NyU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwOSV0OzEyJWU7MTAlOyU/JXA3JXQ7OSU7bSwKKwlzZ3IwPVxFWzA7MTBtLCBzbWFjcz1cRVsxMm0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzJnLCB2cGE9XEVbJWklcDElZGQsIHVzZT1rbG9uZStjb2xvciwKKyMgKHBjNjMwMHBsdXM6IHJlbW92ZWQgIjpLTT0vdXNyL2xpYi91YS9rbWFwLnM1OiI7IHJlbmFtZWQgQk8vRUUvQ0kvQ1YgLS0gZXNyKQorcGM2MzAwcGx1c3xBVCZUIDYzMDAgcGx1cywKKwlPVGJzLCBhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz1DLAorCWNsZWFyPVxFWzJKXEVbSCwgY25vcm09XEVbPTFDLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEgsIGN1dTE9XEVbQSwKKwlkY2gxPVxFWzFQLCBkaW09XEVbMm0sIGRsMT1cRVsxTSwgZWQ9XEVbMEosIGVsPVxFWzBLLAorCWhvbWU9XEVbSCwgaHRzPVxFSCwgaWNoMT1cRVsxQCwgaWwxPVxFWzFMLCBpbmQ9XkosCisJaW52aXM9XEVbOW0sIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZjE9XEVPYywga2YxMD1cRU91LCBrZjI9XEVPZCwga2YzPVxFT2UsCisJa2Y0PVxFT2YsIGtmNT1cRU9nLCBrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLCBrZjk9XEVPaywKKwluZWw9Xk1eSiwgcmV2PVxFWzdtLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKworIyBGcm9tOiBCZW5qYW1pbiBDLiBXLiBTaXR0bGVyIDxic2l0dGxlckBubXQuZWR1PgorIworIyBJIGhhdmUgYSBVTklYIFBDIHdoaWNoIEkgdXNlIGFzIGEgdGVybWluYWwgYXR0YWNoZWQgdG8gbXkgTGludXggUEMuCisjIFVuZm9ydHVuYXRlbHksIHRoZSBVTklYIFBDIHRlcm1pbmZvIGVudHJ5IHRoYXQgY29tZXMgd2l0aCBuY3Vyc2VzCisjIGlzIGJyb2tlbi4gQWxsIHRoZSBzcGVjaWFsIGtleSBzZXF1ZW5jZXMgYXJlIGJyb2tlbiwgbWFraW5nIGl0IHVudXNhYmxlCisjIHdpdGggRW1hY3MuIFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGZvbGxvd2luZzoKKyMKKyMgVGhlIFVOSVggUEMgaGFzIGEgcGxldGhvcmEgb2Yga2V5cyAoMTAzIG9mIHRoZW0sIGFuZCB0aGVyZSdzIG5vIG51bWVyaWMKKyMga2V5cGFkISksIGxvYWRhYmxlIGZvbnRzLCBhbmQgc3RyYW5nZSBoaWdobGlnaHRpbmcgbW9kZXMgKCJkaXRoZXJlZCIKKyMgaGFsZi1pbnRlbnNpdHksICJzbWVhcmVkIiBib2xkLCBhbmQgcmVhbCBzdHJpa2Utb3V0LCBmb3IgZXhhbXBsZS4pIEl0IGFsc28KKyMgdXNlcyByZXNpemFibGUgdGVybWluYWwgd2luZG93cywgYnV0IHRoZSBidW5kbGVkIHRlcm1pbmFsIHByb2dyYW0gYWx3YXlzCisjIHVzZXMgYW4gODB4MjQgd2luZG93IChhbmQgZG9lc24ndCBzdXBwb3J0IHNlZW0gdG8gc3VwcG9ydCBhIDEzMi1jb2x1bW4KKyMgbW9kZS4pCisjCisjIEhJU1RPUlk6IFRoZSBVTklYIFBDIHdhcyBvbmUgb2YgdGhlIGZpcnN0IG1hY2hpbmVzIHdpdGggYSBHVUksIGFuZCB1c2VkIGEKKyMgbGlicmFyeSB3aGljaCB3YXMgYSBzdXBlcnNldCBvZiBTVnIzLjUgY3Vyc2VzIChjYWxsZWQgdGFtLCBmb3IgInRlcm1pbmFsCisjIGFjY2VzcyBtZXRob2QiLikgdGFtIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHJlYWwsIG92ZXJsYXBwaW5nIHdpbmRvd3MsCisjIG9uc2NyZWVuIGZ1bmN0aW9uIGtleSBsYWJlbHMsIGFuZCBiaXRtYXAgZ3JhcGhpY3MuIEJ1dCBzaW5jZSB0aGUgcHJpbWFyeQorIyB1c2VyIGludGVyZmFjZSBvbiB0aGUgVU5JWCBQQyB3YXMgYSBHVUkgcHJvZ3JhbSAodWEsIGZvciAidXNlcgorIyBhc3Npc3RhbnQiLCkgYW5kIHJlbW90ZSBhZG1pbmlzdHJhdGlvbiB3YXMgY29uc2lkZXJlZCBpbXBvcnRhbnQgZm9yIHRoZQorIyBtYWNoaW5lLCB0YW0gYWxzbyBzdXBwb3J0ZWQgVlQxMDAtY29tcGF0aWJsZSB0ZXJtaW5hbHMgYXR0YWNoZWQgdG8gdGhlCisjIHNlcmlhbCBwb3J0IG9yIHVzZWQgYWNyb3NzIHRoZSBTdGFyTGFuIG5ldHdvcmsuIFRvIHNpbXVsYXRlIHRoZSBleHRyYSBrZXlzCisjIG5vdCBwcmVzZW50IG9uIGEgVlQxMDAsIHVzZXJzIGNvdWxkIHByZXNzIEVTQyBhbmQgYSB0d28tbGV0dGVyIHNlcXVlbmNlLAorIyBzdWNoIGFzIHUgZCAoVW5kbykgb3IgVSBEIChTaGlmdC1VbmRvLikgVGhlc2UgdHdvLWxldHRlciBzZXF1ZW5jZXMsCisjIGhvd2V2ZXIsIHdlcmUgbm90IHRoZSBzYW1lIGFzIHRob3NlIHNlbnQgYnkgdGhlIGFjdHVhbCBVbmRvIGtleS4gVGhlCisjIGFjdHVhbCBVbmRvIGtleSBzZW5kcyBFU0MgMCBzIHVuc2hpZnRlZCwgYW5kIEVTQyAwIFMgc2hpZnRlZCwgZm9yIGV4YW1wbGUuCisjIChJZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBhZGRpbmcgc29tZSBvZiB0aGUgdGFtIGNhbGxzIHRvIG5jdXJzZXMsIGJ0dywgSQorIyBoYXZlIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gYW5kIHNldmVyYWwgcHJvZ3JhbXMgd2hpY2ggdXNlIHRhbS4gSXQgYWxzbworIyB1c2VkIGFuIGV4dGVuZGVkIHRlcm1pbmZvIGZvcm1hdCB0byBkZXNjcmliZSBrZXkgc2VxdWVuY2VzLCBzcGVjaWFsCisjIGhpZ2hsaWdodGluZyBtb2RlcywgZXRjLikKKyMKKyMgS0VZUzogVGhpcyBtZWFucyB0aGF0IG5jdXJzZXMgd291bGQgcXVpdGUgcGFpbmZ1bCBvbiB0aGUgVU5JWCBQQywgc2luY2UKKyMgdGhlcmUgYXJlIHR3byBzZXF1ZW5jZXMgZm9yIGV2ZXJ5IGtleS1tb2RpZmllciBjb21iaW5hdGlvbiAobG9jYWwga2V5Ym9hcmQKKyMgc2VxdWVuY2UgYW5kIHJlbW90ZSAiVlQxMDAiIHNlcXVlbmNlLikgQnV0IEkgZG91YnQgbWFueSBwZW9wbGUgYXJlIHRyeWluZworIyB0byB1c2UgbmN1cnNlcyBvbiB0aGUgVU5JWCBQQywgc2luY2UgbmN1cnNlcyBkb2Vzbid0IHByb3Blcmx5IGhhbmRsZSB0aGUKKyMgR1VJLiBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVybWluZm8gZW50cnkgKGFuZCB0aGUgdGVybWNhcCwgdG9vLCBJIHByZXN1bWUpCisjIHNlZW0gdG8gaGF2ZSBiZWVuIGJ1aWx0IGZyb20gdGhlIG1hbnVhbCBkZXNjcmliaW5nIHRoZSBWVDEwMCBzZXF1ZW5jZXMuCisjIFRoaXMgbWVhbnMgaXQgZG9lc24ndCB3b3JrIGZvciBhIHJlYWwgbGl2ZSBVTklYIFBDLgorIworIyBGT05UUzogVGhlIFVOSVggUEMgYWxzbyBoYXMgYSBzdHJhbmdlIGludGVycHJldGF0aW9uIG9mICJhbHRlcm5hdGUKKyMgY2hhcmFjdGVyIHNldCIuIFJhdGhlciB0aGFuIHRoZSBWVDEwMCBncmFwaGljcyB5b3UgbWlnaHQgZXhwZWN0LCBpdCBhbGxvd3MKKyMgdXAgdG8gOCBjdXN0b20gZm9udHMgdG8gYmUgbG9hZGVkIGF0IGFueSBnaXZlbiB0aW1lLiBUaGlzIG1lYW5zIHRoYXQKKyMgcHJvZ3JhbXMgZXhwZWN0aW5nIFZUMTAwIGdyYXBoaWNzIHdpbGwgdXN1YWxseSBiZSBkaXNhcHBvaW50ZWQuIEZvciB0aGlzCisjIHJlYXNvbiBJIGhhdmUgZGlzYWJsZWQgdGhlIHNtYWNzL3JtYWNzIHNlcXVlbmNlcywgYnV0IHRoZXkgY291bGQgZWFzaWx5IGJlCisjIHJlLWVuYWJsZWQuIEhlcmUgYXJlIHRoZSByZWxldmFudCBjb250cm9sIHNlcXVlbmNlcyAoZnJvbSB0aGUgRVNDQVBFKDcpCisjIG1hbnBhZ2UpLCBzaG91bGQgeW91IHdpc2ggdG8gZG8gc286CisjCisjIFNHUjEwIC0gU2VsZWN0IGZvbnQgMCAtIEVTQyBbIDEwIG0gb3IgU08KKyMgU0dSMTEgLSBTZWxlY3QgZm9udCAxIC0gRVNDIFsgMTEgbSBvciBTSQorIyBTR1IxMiAtIFNlbGVjdCBmb250IDIgLSBFU0MgWyAxMiBtCisjIC4uLiAoZXRjLikKKyMgU0dSMTcgLSBTZWxlY3QgZm9udCA3IC0gRVNDIFsgMTcgbQorIworIyBHcmFwaGljcyBmb3IgbGluZSBkcmF3aW5nIGFyZSBub3QgcmVsaWFibHkgZm91bmQgYXQgKmFueSogY2hhcmFjdGVyCisjIGxvY2F0aW9uIGJlY2F1c2UgdGhlIFVOSVggUEMgaGFzIGR5bmFtaWNhbGx5IHJlbG9hZGFibGUgZm9udHMuIEkgdXNlIGZvbnQKKyMgMCBmb3IgcmVndWxhciB0ZXh0IGFuZCBmb250IDEgZm9yIGl0YWxpY3MsIGJ1dCB0aGlzIGlzIGJ5IG5vIG1lYW5zCisjIHVuaXZlcnNhbC4gU28gQVNDSUkgbGluZSBkcmF3aW5nIGlzIGluIG9yZGVyIGlmIHNtYWNzL3JtYWNzIGFyZSBlbmFibGVkLgorIworIyBNSVNDOiBUaGUgY3Vyc29yIHZpc2libGUvY3Vyc29yIGludmlzaWJsZSBzZXF1ZW5jZXMgd2VyZSBzd2FwcGVkIGluIHRoZQorIyBkaXN0cmlidXRlZCB0ZXJtaW5mby4KKyMKKyMgVG8gYW1lbGlvcmF0ZSB0aGVzZSBwcm9ibGVtcyAoYW5kIGZpeCBhIGZldyBoaWdobGlnaHRpbmcgYnVncykgSSByZXdyb3RlCisjIHRoZSBVTklYIFBDIHRlcm1pbmZvIGVudHJ5LiBUaGUgbW9kaWZpZWQgdmVyc2lvbiB3b3JrcyBncmVhdCB3aXRoIEx5bngsCisjIEVtYWNzLCBhbmQgWEVtYWNzIHJ1bm5pbmcgb24gbXkgTGludXggUEMgYW5kIGRpc3BsYXlpbmcgb24gdGhlIFVOSVggUEMKKyMgYXR0YWNoZWQgYnkgc2VyaWFsIGNhYmxlLiBJbiBFbWFjcywgZXZlbiB0aGUgVW5kbyBrZXkgd29ya3MsIGFuZCBtYW55CisjIGFwcGxpY2F0aW9ucyBjYW4gbm93IHVzZSB0aGUgRjEtRjgga2V5cy4KKyMKKyMgZXNyJ3Mgbm90ZXM6CisjCVRlcm1pbmZvIGVudHJ5IGZvciB0aGUgQVQmVCBVbml4IFBDIDczMDAKKyMJZnJvbSBlc2NhcGUoNykgaW4gVW5peCBQQyA3MzAwIE1hbnVhbC4KKyMJU29tZXdoYXQgc2ltaWxhciB0byBhIHZ0MTAwLWFtIChidXQgZGlmZmVyZW50IGVub3VnaAorIwl0byByZWRvIHRoaXMgZnJvbSBzY3JhdGNoLikKKyMKKyMJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIwkqCisjCSogICAgICAgICAgIEZPTlQgTE9BRElORyBQUk9HUkFNIEZPUiBUSEUgVU5JWCBQQworIwkqCisjCSogICAgIFRoaXMgcm91dGluZSBsb2FkcyBhIGZvbnQgZGVmaW5lZCBpbiB0aGUgZmlsZSBBTFRGT05UCisjCSogICAgIGludG8gZm9udCBtZW1vcnkgc2xvdCAjMS4gIE9uY2UgdGhlIGZvbnQgaGFzIGJlZW4gbG9hZGVkLAorIwkqICAgICBpdCBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXIgc2V0LgorIwkqCisjCSogICAgIFRoZSBjYWxsIHRvIGlvY3RsIHdpdGggdGhlIGFyZ3VtZW50IFdJT0NMRk9OVCBpcyB0aGUga2V5CisjCSogICAgIHRvIHRoaXMgcm91dGluZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgd2luZG93KDcpIGluCisjCSogICAgIHRoZSBQQyA3MzAwIGRvY3VtZW50YXRpb24uCisjCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyMJI2luY2x1ZGUgPHN0cmluZy5oPgkJLyogbmVlZGVkIGZvciBzdHJjcHkgY2FsbCAqLworIwkjaW5jbHVkZSA8c3lzL3dpbmRvdy5oPiAgICAgICAgIC8qIG5lZWRlZCBmb3IgaW9jdGwgY2FsbCAqLworIwkjZGVmaW5lIEZOU0laRQk2MAkJLyogZm9udCBuYW1lIHNpemUgKi8KKyMJI2RlZmluZSBBTFRGT05UICAiL3Vzci9saWIvd2ZvbnQvc3BlY2lhbC44LmZ0IiAgLyogZm9udCBmaWxlICovCisjCS8qCisjCSogICAgIFRoZSBmaWxlIC91c3IvbGliL3dmb250L3NwZWNpYWwuOC5mdCBjb21lcyB3aXRoIHRoZQorIwkqICAgICBzdGFuZGFyZCBQQyBzb2Z0d2FyZS4gIEl0IGRlZmluZXMgYSBncmFwaGljcyBjaGFyYWN0ZXIgc2V0CisjCSogICAgIHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgVGVsZXR5cGUgNTQyNSB0ZXJtaW5hbC4gIFRvIHZpZXcKKyMJKiAgICAgdGhpcyBvciBvdGhlciBmb250cyBpbiAvdXNyL2xpYi93Zm9udCwgdXNlIHRoZSBjb21tYW5kCisjCSogICAgIGNmb250IDxmaWxlbmFtZT4uICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBmb250cyBzZWUKKyMJKiAgICAgY2ZvbnQoMSkgaW4gdGhlIFBDIDczMDAgZG9jdW1lbnRhdGlvbi4KKyMJKi8KKyMKKyMJc3RydWN0IGFsdGZkYXRhIAkvKiBzdHJ1Y3R1cmUgZm9yIGFsdCBmb250IGRhdGEgKi8KKyMJeworIwlzaG9ydAlhbHRmX3Nsb3Q7CQkvKiBtZW1vcnkgc2xvdCBudW1iZXIgKi8KKyMJY2hhcglhbHRmX25hbWVbRk5TSVpFXTsJLyogZm9udCBuYW1lIChmaWxlIG5hbWUpICovCisjCX07CisjCWxkZm9udCgpCisjCXsKKyMJCWludCB3ZDsJCS8qIHdpbmRvdyBpbiB3aGljaCBhbHRmb250IHdpbGwgYmUgKi8KKyMJCXN0cnVjdCBhbHRmZGF0YSBhbHRmOworIwkJYWx0Zi5hbHRmX3Nsb3Q9MTsKKyMJCXN0cmNweShhbHRmLmFsdGZfbmFtZSxBTFRGT05UKTsKKyMJCWZvciAod2QgPTE7IHdkIDwgMTI7IHdkKyspIHsKKyMJCSAgICAgaW9jdGwod2QsIFdJT0NMRk9OVCwmYWx0Zik7CisjCSAgICAgICAgfQorIwl9CisjCisjIChhdHQ3MzAwOiBhZGRlZCA8Y2l2aXM+Lzxjbm9ybT4vPGljaDE+LzxpbnZpcz4gZnJvbSB0aGUgQlNESSBlbnRyeSwKKyMgdGhleSdyZSBjb25maXJtZWQgYnkgdGhlIG1hbiBwYWdlIGZvciB0aGUgU3lzdGVtIFYgZGlzcGxheS0tLWVzcikKKyMKK2F0dDczMDB8dW5peHBjfHBjNzMwMHwzYjF8czR8QVQmVCBVTklYIFBDIE1vZGVsIDczMDAsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzltLCBib2xkPVxFWzFtLCBjYnQ9XEVeSSwgY2l2aXM9XEVbPTFDLAorCWNsZWFyPVxFWzJKXEVbSCwgY25vcm09XEVbPTBDLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllZD1cRVswSiwgZWw9XEVbMEssIGhvbWU9XEVbSCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1eSiwgaW52aXM9XEVbOW0sIGlzMT1cMDE3XEVbPTF3LCBrQkVHPVxFTkIsCisJa0NBTj1cRU9XLCBrQ1BZPVxFTkQsIGtDUlQ9XEVPTiwga0RDPVxFTkYsIGtETD1cRU5FLAorCWtFTkQ9XEVOTiwga0VPTD1cRU9BLCBrRk5EPVxFT1gsIGtITFA9XEVPTSwga0hPTT1cRU5NLAorCWtJQz1cRU5KLCBrTEZUPVxFTkssIGtNT1Y9XEVOQywga05YVD1cRU5ILCBrT1BUPVxFT1IsCisJa1BSVj1cRU5HLCBrUkRPPVxFT1QsIGtSSVQ9XEVOTCwga1JQTD1cRU9ZLCBrU0FWPVxFT08sCisJa1VORD1cRU9TLCBrYmVnPVxFTmIsIGticz1eSCwga2Nhbj1cRU93LCBrY2J0PVxFW1osCisJa2Nsbz1cRU9WLCBrY2xyPVxFW0osIGtjbWQ9XEVPdSwga2NweT1cRU5kLCBrY3J0PVxFT24sCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVOZiwKKwlrZWQ9XEVbSiwga2VsPVxFT2EsIGtlbmQ9XEUwLCBrZXh0PVxFT2ssIGtmMT1cRU9jLCBrZjI9XEVPZCwKKwlrZjM9XEVPZSwga2Y0PVxFT2YsIGtmNT1cRU9nLCBrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLAorCWtmbmQ9XEVPeCwga2hscD1cRU9tLCBraG9tZT1cRVtILCBraWNoMT1cRU5qLCBraW5kPVxFW0IsCisJa21vdj1cRU5jLCBrbXJrPVxFTmksIGtucD1cRVtVLCBrbnh0PVxFTmgsIGtvcG49XEVPdiwKKwlrb3B0PVxFT3IsIGtwcD1cRVtWLCBrcHJ0PVxFT3osIGtwcnY9XEVOZywga3Jkbz1cRU90LAorCWtyZWY9XEVPYiwga3Jmcj1cRU5hLCBrcmk9XEVbQSwga3JwbD1cRU95LCBrcnN0PVxFT0IsCisJa3Nhdj1cRU9vLCBrc2x0PVxFTkksIGt1bmQ9XEVPcywgbmVsPVxFRSwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHNncjA9XEVbMDsxMG0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwKKworIyBTZW50IGJ5IFN0ZWZhbiBTdGFwZWxiZXJnIDxzdGVmYW5AcmVudC1hLWd1cnUuZGU+LCAyNCBGZWIgMTk5NywgdGhpcyBpcworIyBmcm9tIFNHSSdzIHRlcm1pbmZvIGRhdGFiYXNlLiAgU0dJJ3MgZW50cnkgc2hvd3MgRjktRjEyIHdpdGggdGhlIGNvZGVzCisjIGZvciB0aGUgYXBwbGljYXRpb24ga2V5cGFkIG1vZGUuICBXZSBoYXZlIGFkZGVkIGlyaXMtYW5zaS1hcCByYXRoZXIgdGhhbgorIyBjaGFuZ2UgdGhlIG9yaWdpbmFsIHRvIGtleXBhZCBtb2RlLgorIworIyAoaXJpcy1hbnNpOiBhZGRlZCBybWFtL3NtYW0gYmFzZWQgb24gaW5pdCBzdHJpbmcgLS0gZXNyKQorIworIyBUaGlzIGVudHJ5LCBhbmQgdGhvc2UgZGVyaXZlZCBmcm9tIGl0LCBpcyB1c2VkIGluIHh3c2ggKGFsc28ga25vd24gYXMKKyMgd2ludGVybSkuICBTb21lIGNhcGFiaWxpdGllcyB0aGF0IGRvIG5vdCBmaXQgaW50byB0aGUgdGVybWluZm8gbW9kZWwKKyMgaW5jbHVkZSB0aGUgc2hpZnQtIGFuZCBjb250cm9sLWZ1bmN0aW9ua2V5czoKKyMKKyMgRjEtRjEyIGdlbmVyYXRlIGRpZmZlcmVudCBjb2RlcyB3aGVuIHNoaWZ0IG9yIGNvbnRyb2wgbW9kaWZpZXJzIGFyZSB1c2VkLgorIyBGb3IgZXhhbXBsZToKKyMJRjEgICAgICAJXEVbMDAxcQorIwlzaGlmdCBGMQlcRVswMTNxCisjCWNvbnRyb2wtRjEJXEVbMDI1cQorIworIyBJbiBhcHBsaWNhdGlvbiBrZXlwYWQgbW9kZSwgRjktRjEyIGdlbmVyYXRlIGNvZGVzIGxpa2UgdnQxMDAgUEYxLVBGNCwgaS5lLiwKKyMgXEVPUCB0byBcRU9TLiAgVGhlIHNoaWZ0ZWQgYW5kIGNvbnRyb2wgbW9kaWZpZXJzIHN0aWxsIGRvIHRoZSBzYW1lIHRoaW5nLgorIworIyBUaGUgY3Vyc29yIGtleXMgYWxzbyBoYXZlIGRpZmZlcmVudCBjb2RlczoKKyMJY29udHJvbC11cAlcRVsxNjJxCisjCWNvbnRyb2wtZG93bglcRVsxNjVxCisjCWNvbnRyb2wtbGVmdAlcRVsxNTlxCisjCWNvbnRyb2wtcmlnaHQJXEVbMTY4cQorIworIwlzaGlmdC11cAlcRVsxNjFxCisjCXNoaWZ0LWRvd24JXEVbMTY0cQorIwlzaGlmdC1sZWZ0CVxFWzE1OHEKKyMJc2hpZnQtcmlnaHQJXEVbMTY3cQorIworIwljb250cm9sLXRhYglcWzA3MnEKKyMKK2lyaXMtYW5zaXxpcmlzLWFuc2ktbmV0fElSSVMgZW11bGF0aW5nIDQwIGxpbmUgQU5TSSB0ZXJtaW5hbCAoYWxtb3N0IFZUMTAwKSwKKwlhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyM0MCwKKwliZWw9XkcsIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwKKwljbm9ybT1cRVs5L3lcRVsxMi95XEVbPTZsLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBjdnZpcz1cRVsxMC95XEVbPTFoXEVbPTJsXEVbPTZoLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwlob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRVs/MWxcRT5cRVs/N2hcRVsxMDBnXEVbMG1cRTdcRVtyXEU4LCBrREM9XEVbUCwKKwlrRU5EPVxFWzE0N3EsIGtIT009XEVbMTQzcSwga0xGVD1cRVsxNThxLCBrUFJUPVxFWzIxMHEsCisJa1JJVD1cRVsxNjdxLCBrU1BEPVxFWzIxOHEsIGticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsCisJa2VuZD1cRVsxNDZxLCBrZW50PV5NLCBrZjE9XEVbMDAxcSwga2YxMD1cRVswMTBxLAorCWtmMTE9XEVbMDExcSwga2YxMj1cRVswMTJxLCBrZjI9XEVbMDAycSwga2YzPVxFWzAwM3EsCisJa2Y0PVxFWzAwNHEsIGtmNT1cRVswMDVxLCBrZjY9XEVbMDA2cSwga2Y3PVxFWzAwN3EsCisJa2Y4PVxFWzAwOHEsIGtmOT1cRVswMDlxLCBraG9tZT1cRVtILCBraWNoMT1cRVsxMzlxLAorCWtucD1cRVsxNTRxLCBrcHA9XEVbMTUwcSwga3BydD1cRVsyMDlxLCBrcm1pcj1cRVsxNDZxLAorCWtzcGQ9XEVbMjE3cSwgbmVsPVxFRSwgcGZrZXk9XEVQMTAxOyVwMSVkLnklcDIlc1xFXFwsCisJcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwgcm1hbT1cRVs/N2wsIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21zbz1cRVsxOzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVszZywKK2lyaXMtYW5zaS1hcHxJUklTIEFOU0kgaW4gYXBwbGljYXRpb24ta2V5cGFkIG1vZGUsCisJaXMyPVxFWz8xbFxFPVxFWz83aCwga2VudD1cRU9NLCBrZjEwPVxFWzAxMHEsCisJa2YxMT1cRVswMTFxLCBrZjEyPVxFWzAxMnEsIGtmOT1cRVswMDlxLCB1c2U9aXJpcy1hbnNpLAorCisjIEZyb20gdGhlIG1hbi1wYWdlLCB0aGlzIGlzIGEgcXVhc2ktdnQxMDAgZW11bGF0b3IgdGhhdCBydW5zIG9uIFNHSSdzIElSSVgKKyMgKFQuRGlja2V5IDk4LzEvMjQpCitpcmlzLWNvbG9yfHh3c2h8SVJJWCBBTlNJIHdpdGggY29sb3IsCisJbmN2IzMzLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgZGNoPVxFWyVwMSVkUCwgZGltPVxFWzJtLAorCWVjaD1cRVslcDElZFgsIGljaD1cRVslcDElZEAsIHJjPVxFOCwgcml0bT1cRVsyM20sCisJcm11bD1cRVsyNG0sIHJzMT1cRWMsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNpdG09XEVbM20sIHVzZT12dDEwMCtlbnEsIHVzZT1rbG9uZStjb2xvciwKKwl1c2U9aXJpcy1hbnNpLWFwLAorCisjIFRoZSBmb2xsb3dpbmcgaXMgYSB2ZXJzaW9uIG9mIHRoZSBpYm0tcGMgZW50cnkgZGlzdHJpYnV0ZWQgd2l0aCBQQy9JWCwKKyMgKEludGVyYWN0aXZlIFN5c3RlbXMnIFN5c3RlbSAzIGZvciB0aGUgQmlnIEJsdWUpLCBtb2RpZmllZCBieSBSaWNoYXJkCisjIE1jSW50b3NoIGF0IFVDQi9DU00uICBUaGUgOnB0OiBhbmQgOnVjOiBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBvcmlnaW5hbCwKKyMgKHRoZSBmb3JtZXIgaXMgdW50cnVlLCBhbmQgdGhlIGxhdHRlciBmYWlsZWQgdW5kZXIgVUNCL21hbik7IHN0YW5kb3V0IGFuZAorIyB1bmRlcmxpbmUgbW9kZXMgaGF2ZSBiZWVuIGFkZGVkLiAgTm90ZTogdGhpcyBlbnRyeSBkZXNjcmliZXMgdGhlICJuYXRpdmUiCisjIGNhcGFiaWxpdGllcyBvZiB0aGUgUEMgbW9ub2Nocm9tZSBkaXNwbGF5LCB3aXRob3V0IEFOWSBlbXVsYXRpb247IG1vc3QKKyMgY29tbXVuaWNhdGlvbnMgcGFja2FnZXMgKGJ1dCBOT1QgUEMvSVggY29ubmVjdCkgZG8gc29tZSBraW5kIG9mIGVtdWxhdGlvbi4KK3BjaXh8UEMvSVggY29uc29sZSwKKwlhbSwgYncsIGVvLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFYywgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEgsIGN1dTE9XEVbQSwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIHJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwKKworIyAoaWJtcGN4OiB0aGlzIGVudHJ5IHVzZWQgdG8gYmUga25vd24gYXMgaWJteC4KKyMgSXQgZm9ybWVybHkgaW5jbHVkZWQgdGhlIGZvbGxvd2luZyBleHRlbnNpb24gY2FwYWJpbGl0aWVzOgorIwk6R0M9YjpHTD12OkdSPXQ6UlQ9Xko6XAorIwk6R0g9XEVbMTk2ZzpHVj1cRVsxNzlnOlwKKyMJOkdVPVxFWzE5M2c6R0Q9XEVbMTk0ZzpcCisjCTpHMT1cRVsxOTFnOkcyPVxFWzIxOGc6RzM9XEVbMTkyZzpHND1cRVsyMTdnOlwKKyMJOkNXPVxFW0U6TlU9XEVbRjpSRj1cRVtHOlJDPVxFW0g6XAorIwk6V0w9XEVbSzpXUj1cRVtMOkNMPVxFW006Q1I9XEVbTjpcCisjIEkgcmVuYW1lZCBHUy9HRS9XTC9XUi9DTC9DUi9QVS9QRC9ITS9FTjsgYWxzbywgcmVtb3ZlZCBhIGR1cGxpY2F0ZQorIyAiOmtoPVxFW1k6Ii4gIEFkZGVkIElCTS1QQyBmb3JtcyBjaGFyYWN0ZXJzIGFuZCBoaWdobGlnaHRzLCB0aGV5IG1hdGNoCisjIHdoYXQgd2FzIHRoZXJlIGJlZm9yZS4gLS0gZXNyKQoraWJtcGN4fHhlbml4fGlibXh8SUJNIFBDIHhlbml4IGNvbnNvbGUgZGlzcGxheSwKKwlPVGJzLCBhbSwgbXNnciwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwljbGVhcj1eTCwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaWNoMT1cRVtALCBpbDE9XEVbTCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtlbmQ9XEVbZCwKKwlrZjE9XEVbSywga2YyPVxFW0wsIGtmMz1cRVtNLCBrZjQ9XEVbTiwga2hvbWU9XEVbWSwga25wPVxFW2UsCisJa3BwPVxFW1osIHVzZT1rbG9uZSthY3MsIHVzZT1rbG9uZStzZ3I4LAorCisjIyMjIFFOWAorIworCisjIFFOWCA0LjAgQ29uc29sZQorIyBNaWNoYWVsJ3Mgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGVudHJ5IGhhZCA8YW1APiwgPHNtY3VwPVxFaT4sCisjIDxybWN1cD1cRWhcRVI+OyB0aGlzIHdhcyBzbyB0ZXJtaW5mbyBhcHBsaWNhdGlvbnMgY291bGQgd3JpdGUgdGhlIGxvd2VyCisjIHJpZ2h0IGNvcm5lciB3aXRob3V0IHRyaWdnZXJpbmcgYSBzY3JvbGwuICBUaGUgbmN1cnNlcyB0ZXJtaW5mbyBsaWJyYXJ5IGNhbgorIyBoYW5kbGUgdGhpcyBjYXNlIHdpdGggdGhlIDxpY2gxPiBjYXBhYmlsaXR5LCBhbmQgcHJlZmVycyA8YW0+IGZvciBiZXR0ZXIKKyMgb3B0aW1pemF0aW9uLiAgQnVnOiBUaGUgPG9wPiBjYXBhYmlsaXR5IHJlc2V0cyBhdHRyaWJ1dGVzLgorIyBGcm9tOiBNaWNoYWVsIEh1bnRlciA8bXBodW50ZXJAcW54LmNvbT4gMzAgSnVsIDE5OTYKKyMgKHJlbW92ZWQ6IDxzZ3I9JT8lcDEldFxFPCU7JXAyJXRcRVslOyVwMyV0XEUoJTslcDQldFxFeyU7JXA2JXRcRTwlOyw+KQorcW54fHFueDR8cW54IGNvbnNvbGUsCisJZGFpc3ksIGttLCBtaXIsIG1zZ3IsIHhocGEsIHh0LAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM0LCBsaW5lcyMyNSwgbmN2IzMsIHBhaXJzIzgsCisJYWNzYz1PXDMzM2FcMjYxalwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9cMzM3cVwzMDRzXDMzNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjMsCisJYmVsPV5HLCBibGluaz1cRXssIGJvbGQ9XEU8LCBjaXZpcz1cRXkwLCBjbGVhcj1cRUhcRUosCisJY25vcm09XEV5MSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBjdnZpcz1cRXkyLAorCWRjaDE9XEVmLCBkbDE9XEVGLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpY2gxPVxFZSwKKwlpbDE9XEVFLCBpbmQ9XkosIGtCRUc9XDM3N1wzNTYsIGtDQU49XDM3N1wyNjMsCisJa0NNRD1cMzc3XDI2Nywga0NQWT1cMzc3XDM2Mywga0NSVD1cMzc3XDM2NCwKKwlrREw9XDM3N1wzNjYsIGtFTkQ9XDM3N1wzMDEsIGtFT0w9XDM3N1wzMTEsCisJa0VYVD1cMzc3XDM2Nywga0ZORD1cMzc3XDM3MCwga0hMUD1cMzc3XDM3MSwKKwlrSE9NPVwzNzdcMjYwLCBrSUM9XDM3N1wzNDAsIGtMRlQ9XDM3N1wyNjQsCisJa01PVj1cMzc3XDMwNiwga01TRz1cMzc3XDMwNCwga05YVD1cMzc3XDI3MiwKKwlrT1BUPVwzNzdcMzcyLCBrUFJUPVwzNzdcMjc1LCBrUFJWPVwzNzdcMjYyLAorCWtSRE89XDM3N1wzMTUsIGtSRVM9XDM3N1wzNzQsIGtSSVQ9XDM3N1wyNjYsCisJa1JQTD1cMzc3XDM3Mywga1NBVj1cMzc3XDMwNywga1NQRD1cMzc3XDMwMywKKwlrVU5EPVwzNzdcMzM3LCBrYmVnPVwzNzdcMzAwLCBrY2FuPVwzNzdcMjQzLCBrY2J0PVwzNzdcMCwKKwlrY2xvPVwzNzdcMzQzLCBrY2xyPVwzNzdcMzQxLCBrY21kPVwzNzdcMjQ1LAorCWtjcHk9XDM3N1wyNjUsIGtjcnQ9XDM3N1wzMDUsIGtjdGFiPVwzNzdcMjM3LAorCWtjdWIxPVwzNzdcMjQ0LCBrY3VkMT1cMzc3XDI1MSwga2N1ZjE9XDM3N1wyNDYsCisJa2N1dTE9XDM3N1wyNDEsIGtkY2gxPVwzNzdcMjU0LCBrZGwxPVwzNzdcMjc0LAorCWtlZD1cMzc3XDMxNCwga2VsPVwzNzdcMzEwLCBrZW5kPVwzNzdcMjUwLCBrZW50PVwzNzdcMzIwLAorCWtleHQ9XDM3N1wyNzAsIGtmMT1cMzc3XDIwMSwga2YxMD1cMzc3XDIxMiwKKwlrZjExPVwzNzdcMjU2LCBrZjEyPVwzNzdcMjU3LCBrZjEzPVwzNzdcMjEzLAorCWtmMTQ9XDM3N1wyMTQsIGtmMTU9XDM3N1wyMTUsIGtmMTY9XDM3N1wyMTYsCisJa2YxNz1cMzc3XDIxNywga2YxOD1cMzc3XDIyMCwga2YxOT1cMzc3XDIyMSwKKwlrZjI9XDM3N1wyMDIsIGtmMjA9XDM3N1wyMjIsIGtmMjE9XDM3N1wyMjMsCisJa2YyMj1cMzc3XDIyNCwga2YyMz1cMzc3XDMzMywga2YyND1cMzc3XDMzNCwKKwlrZjI1PVwzNzdcMjI1LCBrZjI2PVwzNzdcMjI2LCBrZjI3PVwzNzdcMjI3LAorCWtmMjg9XDM3N1wyMzAsIGtmMjk9XDM3N1wyMzEsIGtmMz1cMzc3XDIwMywKKwlrZjMwPVwzNzdcMjMyLCBrZjMxPVwzNzdcMjMzLCBrZjMyPVwzNzdcMjM0LAorCWtmMzM9XDM3N1wyMzUsIGtmMzQ9XDM3N1wyMzYsIGtmMzU9XDM3N1wyNzYsCisJa2YzNj1cMzc3XDI3Nywga2YzNz1cMzc3XDMyMSwga2YzOD1cMzc3XDMyMiwKKwlrZjM5PVwzNzdcMzIzLCBrZjQ9XDM3N1wyMDQsIGtmNDA9XDM3N1wzMjQsCisJa2Y0MT1cMzc3XDMyNSwga2Y0Mj1cMzc3XDMyNiwga2Y0Mz1cMzc3XDMyNywKKwlrZjQ0PVwzNzdcMzMwLCBrZjQ1PVwzNzdcMzMxLCBrZjQ2PVwzNzdcMzMyLAorCWtmNDc9XDM3N1wzMTYsIGtmNDg9XDM3N1wzMTcsIGtmNT1cMzc3XDIwNSwga2Y2PVwzNzdcMjA2LAorCWtmNz1cMzc3XDIwNywga2Y4PVwzNzdcMjEwLCBrZjk9XDM3N1wyMTEsIGtmbmQ9XDM3N1wzNDYsCisJa2hscD1cMzc3XDM1MCwga2hvbWU9XDM3N1wyNDAsIGtodHM9XDM3N1wzNDIsCisJa2ljaDE9XDM3N1wyNTMsIGtpbDE9XDM3N1wyNzMsIGtpbmQ9XDM3N1wyNjEsCisJa21vdj1cMzc3XDM1MSwga21yaz1cMzc3XDM1NSwga21zZz1cMzc3XDM0NSwKKwlrbnA9XDM3N1wyNTIsIGtueHQ9XDM3N1wzMTIsIGtvcG49XDM3N1wzNTcsCisJa29wdD1cMzc3XDM1Mywga3BwPVwzNzdcMjQyLCBrcHJ0PVwzNzdcMjU1LAorCWtwcnY9XDM3N1wzMDIsIGtyZG89XDM3N1wzMzYsIGtyZWY9XDM3N1wzNTQsCisJa3Jlcz1cMzc3XDM2MCwga3Jmcj1cMzc3XDM0Nywga3JpPVwzNzdcMjcxLAorCWtybWlyPVwzNzdcMzEzLCBrcnBsPVwzNzdcMzYyLCBrcnN0PVwzNzdcMzUyLAorCWtzYXY9XDM3N1wzNjEsIGtzbHQ9XDM3N1wyNDcsIGtzcGQ9XDM3N1wzMzUsCisJa3RiYz1cMzc3XDM0NCwga3VuZD1cMzc3XDM2NSwgbXZwYT1cRSElcDElMDJkLCBvcD1cRVIsCisJcmVwPVxFZyVwMiV7MzJ9JSslYyVwMSVjLCByZXY9XEUoLCByaT1cRUksIHJtY3VwPVxFaFxFUiwKKwlybXNvPVxFKSwgcm11bD1cRV0sIHJzMT1cRVIsIHNldGI9XEVAJXAxJVBiJWdiJWdmJWQlZCwKKwlzZXRmPVxFQCVwMSVQZiVnYiVnZiVkJWQsIHNncjA9XEV9XEVdXEU+XEUpLCBzbWN1cD1cRWksCisJc21zbz1cRSgsIHNtdWw9XEVbLAorIworIworcW54dHxxbnh0NHxRTlg0IHRlcm1pbmFsLAorCWNyeG0sIHVzZT1xbng0LAorIworcW54bXxRTlg0IHdpdGggbW91c2UgZXZlbnRzLAorCW1hZGRyIzEsCisJY2hyPVxFLywgY3ZyPVxFIiwgaXMxPVxFLzB0LCBtY3ViPVxFLz4xaCwgbWN1YjE9XEUvPjdoLAorCW1jdWQ9XEUvPjFoLCBtY3VkMT1cRS8+MWxcRS8+OWgsIG1jdWY9XEUvPjFoXEUvPjlsLAorCW1jdWYxPVxFLz43bCwgbWN1dT1cRS8+NmgsIG1jdXUxPVxFLz42bCwgcm1pY209XEUvPjJsLAorCXNtaWNtPVxFLz4yaCwgdXNlPXFueDQsCisjCitxbnh3fFFOWDQgd2luZG93cywKKwl4dnBhLCB1c2U9cW54bSwKKyMKKyMJTW9ub2Nocm9tZSBRTlg0IHRlcm1pbmFsIG9yIGNvbnNvbGUuIFNldHRpbmcgdGhpcyB0ZXJtaW5hbCB0eXBlIHdpbGwKKyMJYWxsb3cgYW4gYXBwbGljYXRpb24gcnVubmluZyBvbiBhIGNvbG9yIGNvbnNvbGUgdG8gYmVoYXZlIGFzIGlmIGl0CisjCXdlcmUgYSBtb25vY2hyb21lIHRlcm1pbmFsLiBPdXRwdXQgd2lsbCBiZSB0aHJvdWdoIHN0ZG91dCBpbnN0ZWFkIG9mCisjCWNvbnNvbGUgd3JpdGVzIGJlY2F1c2UgdGhlIHRlcm0gcm91dGluZXMgd2lsbCByZWNvZ25pemUgdGhhdCB0aGUKKyMJdGVybWluYWwgbmFtZSBzdGFydHMgd2l0aCAncW54dCcuCisjCitxbnh0bW9ub3xNb25vY2hyb21lIFFOWDQgdGVybWluYWwgb3IgY29uc29sZSwKKwljb2xvcnNALCBwYWlyc0AsCisJc2NwQCwgdXNlPXFueDQsCisKKyMgRnJvbTogRmVkZXJpY28gQmlhbmNoaSA8YmlhbmNoaUBwYy1hcnRlMi5hcnRlLnVuaXBpLml0PiwgMSBKdWwgMTk5OAorIyAoZXNyOiBjb21tZW50ZWQgb3V0IDxzY3A+IGFuZCA8cm1jdXA+IHRvIGF2b2lkIHdhcm5pbmdzLikKKyMgKFREOiBkZXJpdmUgZnJvbSBvcmlnaW5hbCBxbng0IGVudHJ5KQorcW54dDJ8cW54IDIuMTUgc2VyaWFsIHRlcm1pbmFsLAorCWFtLAorCWNpdmlzQCwgY25vcm1ALCBjdnZpc0AsIGRjaDFALCBpY2gxQCwga1JFU0AsIGtSUExALCBrVU5EQCwga3NwZEAsCisJcmVwQCwgcm1jdXBALCBybXNvPVxFPiwgc2V0YkAsIHNldGZALCBzbWN1cEAsIHNtc289XEU8LCB1c2U9cW54NCwKKworIyBRTlggQU5TSSB0ZXJtaW5hbCBkZWZpbml0aW9uCitxYW5zaS1nfFFOWCBBTlNJLAorCWFtLCBlc2xvaywgaHMsIHhvbiwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIG5jdiMxOSwgcGFpcnMjNjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+T2EsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbMkpcRVtILCBjbm9ybT1cRVs/MjVoXEVbPzEybCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8xMjsyNWgsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFWzFNLCBkc2w9XEVbciwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUtcRVtYLCBmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsCisJZnNsPVxFWz82aFxFOCwgaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbMUAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFWzFMLAorCWluZD1cRVtTLCBpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOW0sCisJaXMyPVxFPlxFWz8xbFxFWz83aFxFWzA7MTA7Mzk7NDltLCBpczM9XEUoQlxFKTAsCisJa0JFRz1cRU5uLCBrQ0FOPVxFW3MsIGtDTUQ9XEVbdCwga0NQWT1cRU5zLCBrQ1JUPVxFTnQsCisJa0RMPVxFTnYsIGtFWFQ9XEVOdywga0ZORD1cRU54LCBrSExQPVxFTnksIGtIT009XEVbaCwKKwlrTEZUPVxFW2QsIGtOWFQ9XEVbdSwga09QVD1cRU56LCBrUFJWPVxFW3YsIGtSSVQ9XEVbYywKKwlrYnM9XkgsIGtjYW49XEVbUywga2NidD1cRVtaLCBrY2xvPVxFTmMsIGtjbHI9XEVOYSwKKwlrY21kPVxFW0csIGtjcHk9XEVbZywga2N0YWI9XEVbeiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLCBrZGwxPVxFW3AsIGtlbmQ9XEVbWSwKKwlrZXh0PVxFW3ksIGtmMT1cRU9QLCBrZjEwPVxFT1ksIGtmMTE9XEVPWiwga2YxMj1cRU9BLAorCWtmMTM9XEVPcCwga2YxND1cRU9xLCBrZjE1PVxFT3IsIGtmMTY9XEVPcywga2YxNz1cRU90LAorCWtmMTg9XEVPdSwga2YxOT1cRU92LCBrZjI9XEVPUSwga2YyMD1cRU93LCBrZjIxPVxFT3gsCisJa2YyMj1cRU95LCBrZjIzPVxFT3osIGtmMjQ9XEVPYSwga2YyNT1cRVsxfiwga2YyNj1cRVsyfiwKKwlrZjI3PVxFWzN+LCBrZjI4PVxFWzR+LCBrZjI5PVxFWzV+LCBrZjM9XEVPUiwga2YzMD1cRVs2fiwKKwlrZjMxPVxFWzd+LCBrZjMyPVxFWzh+LCBrZjMzPVxFWzl+LCBrZjM0PVxFWzEwfiwKKwlrZjM1PVxFWzExfiwga2YzNj1cRVsxMn4sIGtmMzc9XEVbMTd+LCBrZjM4PVxFWzE4fiwKKwlrZjM5PVxFWzE5fiwga2Y0PVxFT1MsIGtmNDA9XEVbMjB+LCBrZjQxPVxFWzIxfiwKKwlrZjQyPVxFWzIyfiwga2Y0Mz1cRVsyM34sIGtmNDQ9XEVbMjR+LCBrZjQ1PVxFWzI1fiwKKwlrZjQ2PVxFWzI2fiwga2Y0Nz1cRVsyN34sIGtmNDg9XEVbMjh+LCBrZjU9XEVPVCwga2Y2PVxFT1UsCisJa2Y3PVxFT1YsIGtmOD1cRU9XLCBrZjk9XEVPWCwga2ZuZD1cRU5mLCBraGxwPVxFTmgsCisJa2hvbWU9XEVbSCwga2h0cz1cRU5iLCBraWNoMT1cRVtALCBraWwxPVxFW2AsIGtpbmQ9XEVbYSwKKwlrbW92PVxFTmksIGttcms9XEVObSwga21zZz1cRU5lLCBrbnA9XEVbVSwga29wbj1cRU5vLAorCWtvcHQ9XEVOaywga3BwPVxFW1YsIGtyZWY9XEVObCwga3Jlcz1cRU5wLCBrcmZyPVxFTmcsCisJa3JpPVxFW2IsIGtycGw9XEVOciwga3JzdD1cRU5qLCBrc2F2PVxFTnEsIGtzbHQ9XEVbVCwKKwlrdGJjPVxFTmQsIGt1bmQ9XEVOdSwgbGw9XEVbOTlILCBuZWw9XEVFLCBvcD1cRVszOTs0OW0sCisJcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLCByZXY9XEVbN20sIHJpPVxFW1QsCisJcmluPVxFWyVwMSVkVCwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLCBybXNvPVxFWzI3bSwKKwlybXVsPVxFWzI0bSwgcnMxPVwwMTdcRVs/N2hcRVswOzM5OzQ5bSQ8Mj5cRT5cRVs/MWwsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwKKwlzZXRiPVxFWzQlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2V0Zj1cRVszJT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwNSV0OzIlOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXQ7NyU7JT8lcDcldDs5JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzJnLAorCXRzbD1cRTdcRTE7MjRyXEVbPzZsXEVbMjU7JWklcDElZEgsCisjCitxYW5zaXxRTlggYW5zaSB3aXRoIGNvbnNvbGUgd3JpdGVzLAorCWRhaXN5LCB4aHBhLCB1c2U9cWFuc2ktZywKKyMKK3FhbnNpLXR8UU5YIGFuc2kgd2l0aG91dCBjb25zb2xlIHdyaXRlcywKKwljcnhtLCB1c2U9cWFuc2ksCisjCitxYW5zaS1tfFFOWCBhbnNpIHdpdGggbW91c2UsCisJbWFkZHIjMSwKKwljaHI9XEVbLCBjdnI9XEVdLCBpczE9XEVbMHQsIG1jdWI9XEVbPjFoLCBtY3ViMT1cRVs+N2gsCisJbWN1ZD1cRVs+MWgsIG1jdWQxPVxFWz4xbFxFWz45aCwgbWN1Zj1cRVs+MWhcRVs+OWwsCisJbWN1ZjE9XEVbPjdsLCBtY3V1PVxFWz42aCwgbWN1dTE9XEVbPjZsLCBybWljbT1cRVs+MmwsCisJc21pY209XEVbPjJoLCB1c2U9cWFuc2ksCisjCitxYW5zaS13fFFOWCBhbnNpIGZvciB3aW5kb3dzLAorCXh2cGEsIHVzZT1xYW5zaS1tLAorCisjIyMjIE5ldEJTRCBjb25zb2xlcworIworIyBwY3Z0IHRlcm1jYXAgZGF0YWJhc2UgZW50cmllcyAoY29ycmVzcG9uZGluZyB0byByZWxlYXNlIDMuMzEpCisjIEF1dGhvcidzIGxhc3QgZWRpdC1kYXRlOiBbRnJpIFNlcCAxNSAyMDoyOToxMCAxOTk1XQorIworIyAoRm9yIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgZmlsZSwgSSB0cmFuc2xhdGVkIHRoZXNlIGludG8gdGVybWluZm8gc3ludGF4LgorIyBUaGVuIEkgZHJvcHBlZCBhbGwgdGhlIHBzZXVkby1IUCBlbnRyaWVzLiB3ZSBkb24ndCB3YW50IGFuZCBjYW4ndCB1c2UKKyMgdGhlIDpYczogZmxhZy4gVGhlbiBJIHNwbGl0IDppczogaW50byBhIHNpemUtaW5kZXBlbmRlbnQgPGlzMT4gYW5kIGEKKyMgc2l6ZS1kZXBlbmRlbnQgPGlzMj4uICBGaW5hbGx5LCBJIGFkZGVkIDxybWFtPi88c21hbT4gLS0gZXNyKQorCisjIE5PVEU6IDxpY2gxPiBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhpcyBlbnRyeS4gZm9yIHJlZmVyZW5jZSwgaXQgc2hvdWxkCisjIGJlIDxpY2gxPVxFW0A+LiAgRm9yIGRpc2N1c3Npb24sIHNlZSBJQ0gvSUNIMSBWRVJTVVMgUk1JUi9TTUlSIGJlbG93LgorIyAoZXNyOiBhZGRlZCA8Y2l2aXM+IGFuZCA8Y25vcm0+IHRvIHJlc29sdmUgTmV0QlNEIFByb2JsZW0gUmVwb3J0ICM0NTgzKQorcGN2dFhYfHBjdnQgdnQyMDAgZW11bGF0b3IgKERFQyBWVDIyMCksCisJYW0sIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJaXQjOCwgdnQjMywKKwlhY3NjPSsrXCxcLC0tLi4wMGBgYWFmZmdnaGhpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVELCBpbmRuPVxFWyVwMSVkUywKKwlpczE9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBrYnM9XDE3NywKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtkY2gxPVxFWzN+LCBrZjE9XEVbMTd+LCBrZjI9XEVbMTh+LCBrZjM9XEVbMTl+LAorCWtmND1cRVsyMH4sIGtmNT1cRVsyMX4sIGtmNj1cRVsyM34sIGtmNz1cRVsyNH4sIGtmOD1cRVsyNX4sCisJa2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbGw9XEVbNH4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCW5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwKKwlyaT1cRU0sIHJpbj1cRVslcDElZFQsIHJtYWNzPVxFKEIsIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMxPVxFY1xFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncjA9XEVbbSwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKworIwlOZXRCU0QvRnJlZUJTRCB2dDIyMCB0ZXJtaW5hbCBlbXVsYXRvciBjb25zb2xlIChwYyBrZXlib2FyZCAmIG1vbml0b3IpCisjCXRlcm1jYXAgZW50cmllcyBmb3IgcHVyZSBWVDIyMC1FbXVsYXRpb24gYW5kIDI1LCAyOCwgMzUsIDQwLCA0MyBhbmQKKyMJNTAgbGluZXMgZW50cmllczsgODAgY29sdW1ucworcGN2dDI1fGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCAyNSBsaW5lcywKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwlpczI9XEVbMTsyNXJcRVsyNTsxSCwgdXNlPXBjdnRYWCwKK3BjdnQyOHxkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggMjggbGluZXMsCisJY29scyM4MCwgbGluZXMjMjgsCisJaXMyPVxFWzE7MjhyXEVbMjg7MUgsIHVzZT1wY3Z0WFgsCitwY3Z0MzV8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDM1IGxpbmVzLAorCWNvbHMjODAsIGxpbmVzIzM1LAorCWlzMj1cRVsxOzM1clxFWzM1OzFILCB1c2U9cGN2dFhYLAorcGN2dDQwfGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCA0MCBsaW5lcywKKwljb2xzIzgwLCBsaW5lcyM0MCwKKwlpczI9XEVbMTs0MHJcRVs0MDsxSCwgdXNlPXBjdnRYWCwKK3BjdnQ0M3xkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggNDMgbGluZXMsCisJY29scyM4MCwgbGluZXMjNDMsCisJaXMyPVxFWzE7NDNyXEVbNDM7MUgsIHVzZT1wY3Z0WFgsCitwY3Z0NTB8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDUwIGxpbmVzLAorCWNvbHMjODAsIGxpbmVzIzUwLAorCWlzMj1cRVsxOzUwclxFWzUwOzFILCB1c2U9cGN2dFhYLAorCisjCU5ldEJTRC9GcmVlQlNEIHZ0MjIwIHRlcm1pbmFsIGVtdWxhdG9yIGNvbnNvbGUgKHBjIGtleWJvYXJkICYgbW9uaXRvcikKKyMJdGVybWNhcCBlbnRyaWVzIGZvciBwdXJlIFZUMjIwLUVtdWxhdGlvbiBhbmQgMjUsIDI4LCAzNSwgNDAsIDQzIGFuZAorIwk1MCBsaW5lcyBlbnRyaWVzOyAxMzIgY29sdW1ucworcGN2dDI1d3xkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggMjUgbGluZXMgYW5kIDEzMiBjb2xzLAorCWNvbHMjMTMyLCBsaW5lcyMyNSwKKwlpczI9XEVbMTsyNXJcRVsyNTsxSCwgdXNlPXBjdnRYWCwKK3BjdnQyOHd8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDI4IGxpbmVzIGFuZCAxMzIgY29scywKKwljb2xzIzEzMiwgbGluZXMjMjgsCisJaXMyPVxFWzE7MjhyXEVbMjg7MUgsIHVzZT1wY3Z0WFgsCitwY3Z0MzV3fGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCAzNSBsaW5lcyBhbmQgMTMyIGNvbHMsCisJY29scyMxMzIsIGxpbmVzIzM1LAorCWlzMj1cRVsxOzM1clxFWzM1OzFILCB1c2U9cGN2dFhYLAorcGN2dDQwd3xkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggNDAgbGluZXMgYW5kIDEzMiBjb2xzLAorCWNvbHMjMTMyLCBsaW5lcyM0MCwKKwlpczI9XEVbMTs0MHJcRVs0MDsxSCwgdXNlPXBjdnRYWCwKK3BjdnQ0M3d8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDQzIGxpbmVzIGFuZCAxMzIgY29scywKKwljb2xzIzEzMiwgbGluZXMjNDMsCisJaXMyPVxFWzE7NDNyXEVbNDM7MUgsIHVzZT1wY3Z0WFgsCitwY3Z0NTB3fGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCA1MCBsaW5lcyBhbmQgMTMyIGNvbHMsCisJY29scyMxMzIsIGxpbmVzIzUwLAorCWlzMj1cRVsxOzUwclxFWzUwOzFILCB1c2U9cGN2dFhYLAorCisjCU9wZW5CU0QgaW1wbGVtZW50cyBhIGNvbG9yIHZhcmlhdGlvbgorcGN2dDI1LWNvbG9yfGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCAyNSBsaW5lcyBhbmQgY29sb3IsCisJY29scyM4MCwgbGluZXMjMjUsCisJaXMyPVxFWzE7MjVyXEVbMjU7MUgsIGtmMT1cRU9QLCBrZjEwPVxFWzI5fiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sCisJa2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sCisJa2YyPVxFT1EsIGtmMjA9XEVbMzR+LCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRVsxN34sCisJa2Y2PVxFWzE4fiwga2Y3PVxFWzE5fiwga2Y4PVxFWzIwfiwga2Y5PVxFWzIxfiwgdXNlPXBjdnRYWCwKKwl1c2U9ZWNtYStjb2xvciwKKworIyBUZXJtaW5mbyBlbnRyaWVzIHRvIGVuYWJsZSB0aGUgdXNlIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkgaW4gY29sb3VyIG9uIGEKKyMgTmV0QlNELWFybTMyIGNvbnNvbGUgKG9ubHkgdGVzdGVkIG9uIGEgUmlzY1BDKS4KKyMgQ3JlYXRlZCBieSBEYXZlIE1pbGxlbiA8ZG1pbGxAZ2xvYmFsbmV0LmNvLnVrPiAyMi4wNy45OAorIyBtb2RpZmllZCBjb2RlcyBmb3Igc2V0Zi9zZXRiIHRvIHNldGFmL3NldGFiLCB0aGVuIHRvIGtsb25lK2NvbG9yLCBjb3JyZWN0ZWQKKyMgdHlwbyBpbiBpbnZpcyAtIFRECithcm0xMDB8YXJtMTAwLWFtfEFybShSaXNjUEMpIG5jdXJzZXMgY29tcGF0aWJsZSAoZm9yIDY0MHg0ODApLAorCWFtLCBiY2UsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzMCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbSiQ8NTA+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSQ8Mj4sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGVsMT1cRVsxSyQ8Mz4sCisJZW5hY3M9XEUoQlxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGluZD1eSiwKKwlpbnZpcz1cRVs4bSQ8Mj4sIGthMT1cRVtxLCBrYTM9XEVbcywga2IyPVxFW3IsIGticz1eSCwKKwlrYzE9XEVbcCwga2MzPVxFW24sIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2VudD1cRVtNLCBrZjA9XEVbeSwga2YxPVxFW1AsIGtmMTA9XEVbeCwKKwlrZjI9XEVbUSwga2YzPVxFW1IsIGtmND1cRVtTLCBrZjU9XEVbdCwga2Y2PVxFW3UsIGtmNz1cRVt2LAorCWtmOD1cRVtsLCBrZjk9XEVbdywgcmM9XEU4LCByZXY9XEVbN20kPDI+LCByaT1cRU0kPDU+LAorCXJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mj4sCisJcm11bD1cRVttJDwyPiwgcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7JDwyPiwKKwlzZ3IwPVxFW21cMDE3JDwyPiwgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwKKwlzbXNvPVxFWzdtJDwyPiwgc211bD1cRVs0bSQ8Mj4sIHRiYz1cRVszZywgdXNlPWVjbWErc2dyLAorCXVzZT1rbG9uZStjb2xvciwKKworYXJtMTAwLXd8YXJtMTAwLXdhbXxBcm0oUmlzY1BDKSBuY3Vyc2VzIGNvbXBhdGlibGUgKGZvciAxMDI0eDc2OCksCisJY29scyMxMzIsIGxpbmVzIzUwLCB1c2U9YXJtMTAwLAorCisjIE5ldEJTRC94NjhrIGNvbnNvbGUgdnQyMDAgZW11bGF0b3IuIFRoaXMgcG9ydCBydW5zIG9uIGEgNjhLIG1hY2hpbmUKKyMgbWFudWZhY3R1cmVkIGJ5IFNoYXJwIGZvciB0aGUgSmFwZW5lc2UgbWFya2V0LgorIyBGcm9tIE1pbm91cmEgTWFrb3RvIDxtaW5vdXJhQG5ldGxhcHV0YS5vci5qcD4sIDEyIE1heSAxOTk2Cit4NjhrfHg2OGstaXRlfE5ldEJTRC94NjhrIElURSwKKwljb2xzIzk2LCBsaW5lcyMzMiwKKwlrY2xyPVxFWzl+LCBraGxwPVxFWzI4fiwgdXNlPXZ0MjIwLAorCisjIDx0dkBwb2JveC5jb20+OgorIyBFbnRyeSBmb3IgdGhlIEROQVJEIE9wZW5GaXJtd2FyZSBjb25zb2xlLCBjbG9zZSB0byBBTlNJIGJ1dCBub3QgcXVpdGUuCisjCisjIChzdGlsbCB1bmZpbmlzaGVkLCBidXQgZ29vZCBlbm91Z2ggc28gZmFyLikKK29mY29uc3xETkFSRCBPcGVuRmlybXdhcmUgY29uc29sZSwKKwlidywKKwljb2xzIzgwLCBsaW5lcyMzMCwKKwliZWw9XkcsIGJsaW5rPVwyMzM3OzJtLCBib2xkPVwyMzMxbSwgY2xlYXI9XkwsIGNyPV5NLAorCWN1Yj1cMjMzJXAxJWRELCBjdWIxPVwyMzNELCBjdWQ9XDIzMyVwMSVkQiwgY3VkMT1cMjMzQiwKKwljdWY9XDIzMyVwMSVkQywgY3VmMT1cMjMzQywgY3VwPVwyMzMlaSVwMSVkOyVwMiVkSCwKKwljdXU9XDIzMyVwMSVkQSwgY3V1MT1cMjMzQSwgZGNoPVwyMzMlcDElZFAsIGRjaDE9XDIzM1AsCisJZGltPVwyMzMybSwgZGw9XDIzMyVwMSVkTSwgZGwxPVwyMzNNLCBlZD1cMjMzSiwgZWw9XDIzM0ssCisJZmxhc2g9XkcsIGh0PV5JLCBpY2g9XDIzMyVwMSVkQCwgaWNoMT1cMjMzQCwgaWw9XDIzMyVwMSVkTCwKKwlpbDE9XDIzM0wsIGluZD1eSiwgaW52aXM9XDIzMzhtLCBrYnM9XkgsIGtjdWIxPVwyMzNELAorCWtjdWQxPVwyMzNCLCBrY3VmMT1cMjMzQywga2N1dTE9XDIzM0EsIGtkY2gxPVwyMzNQLAorCWtmMT1cMjMzMFAsIGtmMTA9XDIzMzBNLCBrZjI9XDIzMzBRLCBrZjM9XDIzMzBXLAorCWtmND1cMjMzMHgsIGtmNT1cMjMzMHQsIGtmNj1cMjMzMHUsIGtmNz1cMjMzMHEsIGtmOD1cMjMzMHIsCisJa2Y5PVwyMzMwcCwga25wPVwyMzMvLCBrcHA9XDIzMz8sIG5lbD1eTV5KLCByZXY9XDIzMzdtLAorCXJtc289XDIzMzBtLCBybXVsPVwyMzMwbSwKKwlzZ3I9XDIzMzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclO20sCisJc2dyMD1cMjMzMG0sCisKKyMgTmV0QlNEICJ3c2NvbnMiIGVtdWxhdG9yIGluIHZ0MjIwIG1vZGUuCisjIFRoaXMgZW50cnkgaXMgYmFzZWQgb24gdGhlIE5ldEJTRCB0ZXJtY2FwIGVudHJ5LCBjb3JyZWN0aW5nIHRoZSBuY3YgdmFsdWUuCisjIFRoZSBlbXVsYXRvciByZW5kZXJzIHVuZGVybGluZWQgdGV4dCBpbiByZWQuICBDb2xvcnMgYXJlIG90aGVyd2lzZSB1c2FibGUuCisjCisjIFRlc3RpbmcgdGhlIGVtdWxhdG9yIGFuZCByZWFkaW5nIHRoZSBzb3VyY2UgY29kZSAoTmV0QlNEIDIuMCksIGl0IGFwcGVhcnMKKyMgdGhhdCAidnQyMjAiIGlzIGluYWNjdXJhdGUuICBUaGVyZSBhcmUgYSBmZXcgdnQyMjAtZmVhdHVyZXMsIGJ1dCBtb3N0IG9mIHRoZQorIyB2dDIyMCBzY3JlZW5zIGluIHZ0dGVzdCBkbyBub3Qgd29yayB3aXRoIHRoaXMgZW11bGF0b3IuICBGb3IgaW5zdGFuY2UsIGl0CisjIGlkZW50aWZpZXMgaXRzZWxmIChwcmltYXJ5IERBIHJlc3BvbnNlKSBhcyBhIHZ0MjIwIHdpdGggc2VsZWN0aXZlIGVyYXNlLiAgQnV0CisjIHRoZSBzZWxlY3RpdmUgZXJhc2UgZmVhdHVyZSBkb2VzIG5vdCB3b3JrLiAgVGhlIHNlY29uZGFyeSByZXNwb25zZSBpcyBjb3BpZWQKKyMgZnJvbSBLZXJtaXQncyBlbXVsYXRpb24gb2YgdnQyMjAsIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYWN0dWFsIHZ0MjIwLiAgQXQKKyMgdGhlIGxldmVsIG9mIGRldGFpbCBpbiBhIHRlcm1jYXAsIGl0IGlzIGEgcGFzc2FibGUgZW11bGF0b3IsIHNpbmNlIEVDSCBkb2VzCisjIHdvcmsuICBEb24ndCB1c2UgaXQgb24gYSBWTVMgc3lzdGVtIC1URAord3N2dDI1fE5ldEJTRCB3c2NvbnMgaW4gMjUgbGluZSBERUMgVlQyMjAgbW9kZSwKKwliY2UsIG1zZ3IsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCBuY3YjMiwgcGFpcnMjNjQsCisJaXMyPVxFW3JcRVsyNTsxSCwga2VuZD1cRVs4fiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjI9XEVbMTJ+LCBrZjM9XEVbMTN+LAorCWtmND1cRVsxNH4sIGtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sCisJa2Y5PVxFWzIwfiwga2hvbWU9XEVbN34sIG9wPVxFW20sIHNldGFiPVxFWzQlcDElZG0sCisJc2V0YWY9XEVbMyVwMSVkbSwgdXNlPXZ0MjIwLAorCit3c3Z0MjVtfE5ldEJTRCB3c2NvbnMgaW4gMjUgbGluZSBERUMgVlQyMjAgbW9kZSB3aXRoIE1ldGEsCisJa20sIHVzZT13c3Z0MjUsCisKKyMgYHJhc3RlcmNvbnNvbGUnIHByb3ZpZGVkIGJ5IDQuNEJTRCwgTmV0QlNEIGFuZCBPcGVuQlNEIG9uIFNQQVJDLCBhbmQKKyMgREVDc3RhdGlvbi9wbWF4LgorcmNvbnN8QlNEIHJhc3RlcmNvbnNvbGUsCisJdXNlPXN1bi1pbCwKKyMgQ29sb3IgdmVyc2lvbiBvZiBhYm92ZS4gQ29sb3IgY3VycmVudGx5IG9ubHkgcHJvdmlkZWQgYnkgTmV0QlNELgorcmNvbnMtY29sb3J8QlNEIHJhc3RlcmNvbnNvbGUgd2l0aCBBTlNJIGNvbG9yLAorCWJjZSwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJb3A9XEVbbSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwgdXNlPXJjb25zLAorCisjIG1ndGVybSAtLSBNR0wvTUdMMiwgTW9iaWxlR2VhciBHcmFwaGljIExpYnJhcnkKKyMgZm9yIFBvY2tldEJTRCxQb2NrZXRMaW51eCxOZXRCU0Qve2hwY21pcHMsbWFjNjhrfQorIyAtLSB0aGUgc2V0Zi9zZXRiIGFyZSBwcm9iYWJseSBpbmNvcnJlY3QsIG1vcmUgbGlrZWx5IHNldGFmL3NldGFiIC1URAorIyAtLSBjb21wYXJlIHdpdGggY29uczI1dworbWd0ZXJtLAorCU9UYnMsIE9UcHQsIGFtLCBiY2UsIGJ3LCBlbywga20sIG1zZ3IsIG5wYywKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMTgsIHBhaXJzIzY0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbSiwKKwljcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzMwOzFtLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XkksIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVbUywKKwlpbmRuPVxFWyVwMSVkUywga2IyPVxFW0UsIGticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsIGtlbmQ9XEVbRiwKKwlrZjE9XEVbTSwga2YxMD1cRVtWLCBrZjExPVxFW1csIGtmMTI9XEVbWCwga2YyPVxFW04sCisJa2YzPVxFW08sIGtmND1cRVtQLCBrZjU9XEVbUSwga2Y2PVxFW1IsIGtmNz1cRVtTLCBrZjg9XEVbVCwKKwlrZjk9XEVbVSwga2hvbWU9XEVbSCwga2ljaDE9XEVbTCwga25wPVxFW0csIGtwcD1cRVtJLAorCW5lbD1cRVtFLCBvcD1cRVt4LCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwKKwlybXNvPVxFW20sIHJzMj1cRVt4XEVbbVxFYywgc2M9XEU3LCBzZXRiPVxFWzQlcDElZG0sCisJc2V0Zj1cRVszJXAxJWRtLCBzZ3IwPVxFW20sIHNtc289XEVbN20sIHZwYT1cRVslaSVwMSVkZCwKKworIyMjIyBGcmVlQlNEIGNvbnNvbGUgZW50cmllcworIworIyBGcm9tOiBBbmRyZXkgQ2hlcm5vdiA8YWNoZUBhc3RyYWwubXNrLnN1PiAyOSBNYXIgMTk5NgorIyBBbmRyZXkgQ2hlcm5vdiBtYWludGFpbnMgdGhlIEZyZWVCU0QgdGVybWNhcCBkaXN0cmlidXRpb25zLgorIworIyBOb3RlOiBVc2VycyBvZiBGcmVlQlNEIDIuMS4wIGFuZCBvbGRlciB2ZXJzaW9ucyBtdXN0IGVpdGhlciB1cGdyYWRlCisjIG9yIGNvbW1lbnQgb3V0IHRoZSA6Y2I6IGNhcGFiaWxpdHkgaW4gdGhlIGNvbnNvbGUgZW50cnkuCisjCisjIEFsZXhhbmRlciBMdWt5YW5vdiByZXBvcnRzOgorIyBJIGhhdmUgc2VlbiBGcmVlQlNELTIuMS41Ui4uLiBUaGUgb2xkIGVsMSBidWcgY2hhbmdlZCwgYnV0IGl0IGlzIHN0aWxsIHRoZXJlLgorIyBOb3cgZWwxIGNsZWFycyBub3Qgb25seSB0byB0aGUgbGluZSBiZWdpbm5pbmcsIGJ1dCBhbHNvIGEgbGFyZ2UgY2h1bmsKKyMgb2YgcHJldmlvdXMgbGluZS4gQnV0IHRoZXJlIGlzIGFub3RoZXIgYnVnIC0gZWNoIGRvZXMgbm90IHdvcmsgYXQgYWxsLgorIworCisjIGZvciBzeXNjb25zCisjIGNvbW1vbiBlbnRyeSB3aXRob3V0IHNlbWlncmFwaGljcworIyBCdWc6IFRoZSA8b3A+IGNhcGFiaWxpdHkgcmVzZXRzIGF0dHJpYnV0ZXMuCisjIEJ1Zz8gVGhlIGVjaCBhbmQgZWwxIGF0dHJpYnV0ZXMgYXBwZWFyIHRvIG1vdmUgdGhlIGN1cnNvciBpbiBzb21lIGNhc2VzOyBmb3IKKyMgaW5zdGFuY2UgZWwxIGRvZXMgaWYgdGhlIGN1cnNvciBpcyBtb3ZlZCB0byB0aGUgcmlnaHQgbWFyZ2luIGZpcnN0LiAgUmVtb3ZlZAorIyBieSBULkRpY2tleSA5Ny81LzMgKGVjaD1cRVslcDElZFgsIGVsMT1cRVsxSykKKyMKKyMgU2V0dGluZyBjb2xvcnMgdHVybnMgb2ZmIHJldmVyc2U7IHdlIGNhbm5vdCBndWFyYW50ZWUgb3JkZXIsIHNvIHVzZSBuY3YuCisjIE5vdGUgdGhhdCB0aGlzIGRpc2FibGVzIHN0YW5kb3V0IHdpdGggY29sb3IuCisjCisjIFRoZSBlbXVsYXRvciBzZW5kcyBkaWZmZXJlbmNlIHN0cmluZ3MgYmFzZWQgb24gc2hpZnQtIGFuZCBjb250cm9sLWtleXMsCisjIGxpa2Ugc2NvYW5zaToKKyMJRjEzLUYyNCBhcmUgc2hpZnRlZCBGMS1GMTIKKyMJRjI1LUYzNiBhcmUgY29udHJvbCBGMS1GMTIKKyMJRjM3LUY0OCBhcmUgc2hpZnQrY29udHJvbCBGMS1GMTIKK2NvbnMyNXd8YW5zaXd8YW5zaTgweDI1LXJhd3xmcmVlYnNkIGNvbnNvbGUgKDI1LWxpbmUgcmF3IG1vZGUpLAorCWFtLCBiY2UsIGJ3LCBlbywgbXNnciwgbnBjLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgbmN2IzIxLCBwYWlycyM2NCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osCisJY25vcm09XEVbPTBDLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwKKwljdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs9MUMsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzMwOzFtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZGAsIGh0PV5JLCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFW1MsCisJaW5kbj1cRVslcDElZFMsIGtiMj1cRVtFLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cMTc3LCBrZW5kPVxFW0YsCisJa2YxPVxFW00sIGtmMTA9XEVbViwga2YxMT1cRVtXLCBrZjEyPVxFW1gsIGtmMTM9XEVbWSwKKwlrZjE0PVxFW1osIGtmMTU9XEVbYSwga2YxNj1cRVtiLCBrZjE3PVxFW2MsIGtmMTg9XEVbZCwKKwlrZjE5PVxFW2UsIGtmMj1cRVtOLCBrZjIwPVxFW2YsIGtmMjE9XEVbZywga2YyMj1cRVtoLAorCWtmMjM9XEVbaSwga2YyND1cRVtqLCBrZjI1PVxFW2ssIGtmMjY9XEVbbCwga2YyNz1cRVttLAorCWtmMjg9XEVbbiwga2YyOT1cRVtvLCBrZjM9XEVbTywga2YzMD1cRVtwLCBrZjMxPVxFW3EsCisJa2YzMj1cRVtyLCBrZjMzPVxFW3MsIGtmMzQ9XEVbdCwga2YzNT1cRVt1LCBrZjM2PVxFW3YsCisJa2YzNz1cRVt3LCBrZjM4PVxFW3gsIGtmMzk9XEVbeSwga2Y0PVxFW1AsIGtmNDA9XEVbeiwKKwlrZjQxPVxFW0AsIGtmNDI9XEVbWywga2Y0Mz1cRVtcXCwga2Y0ND1cRVtdLCBrZjQ1PVxFW1xeLAorCWtmNDY9XEVbXywga2Y0Nz1cRVtgLCBrZjQ4PVxFW3ssIGtmNT1cRVtRLCBrZjY9XEVbUiwKKwlrZjc9XEVbUywga2Y4PVxFW1QsIGtmOT1cRVtVLCBraG9tZT1cRVtILCBraWNoMT1cRVtMLAorCWtucD1cRVtHLCBrcHA9XEVbSSwgbmVsPVxFW0UsIG9wPVxFW3gsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFW1QsIHJpbj1cRVslcDElZFQsIHJtc289XEVbbSwgcnMyPVxFW3hcRVttXEVjLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMCU/JXAxJXQ7Mjs3JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDszMDsxJTslPyVwNiV0OzElO20sCisJc2dyMD1cRVttLCBzbXNvPVxFWzdtLCB2cGE9XEVbJWklcDElZGQsCitjb25zMjV8YW5zaXN8YW5zaTgweDI1fGZyZWVic2QgY29uc29sZSAoMjUtbGluZSBhbnNpIG1vZGUpLAorCWFjc2M9LVwwMzAuXlkwXDMzM2BcMDA0YVwyNjBmXDM3MGdcMzYxaFwyNjFpXDAyNWpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVxXDMwNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYyflwzNzEsCisJdXNlPWNvbnMyNXcsCitjb25zMjUtbXxhbnNpcy1tb25vfGFuc2k4MHgyNS1tb25vfGZyZWVic2QgY29uc29sZSAoMjUtbGluZSBtb25vIGFuc2kgbW9kZSksCisJY29sb3JzQCwgcGFpcnNALAorCWJvbGRALCBkaW1ALCBvcEAsIHJtdWw9XEVbbSwgc2V0YWJALCBzZXRhZkAsCisJc2dyPVxFWzAlPyVwMSV0OzI7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7bSwKKwlzbXVsPVxFWzRtLCB1c2U9Y29uczI1LAorY29uczMwfGFuc2k4MHgzMHxmcmVlYnNkIGNvbnNvbGUgKDMwLWxpbmUgYW5zaSBtb2RlKSwKKwlsaW5lcyMzMCwgdXNlPWNvbnMyNSwKK2NvbnMzMC1tfGFuc2k4MHgzMC1tb25vfGZyZWVic2QgY29uc29sZSAoMzAtbGluZSBtb25vIGFuc2kgbW9kZSksCisJbGluZXMjMzAsIHVzZT1jb25zMjUtbSwKK2NvbnM0M3xhbnNpODB4NDN8ZnJlZWJzZCBjb25zb2xlICg0My1saW5lIGFuc2kgbW9kZSksCisJbGluZXMjNDMsIHVzZT1jb25zMjUsCitjb25zNDMtbXxhbnNpODB4NDMtbW9ub3xmcmVlYnNkIGNvbnNvbGUgKDQzLWxpbmUgbW9ubyBhbnNpIG1vZGUpLAorCWxpbmVzIzQzLCB1c2U9Y29uczI1LW0sCitjb25zNTB8YW5zaWx8YW5zaTgweDUwfGZyZWVic2QgY29uc29sZSAoNTAtbGluZSBhbnNpIG1vZGUpLAorCWxpbmVzIzUwLCB1c2U9Y29uczI1LAorY29uczUwLW18YW5zaWwtbW9ub3xhbnNpODB4NTAtbW9ub3xmcmVlYnNkIGNvbnNvbGUgKDUwLWxpbmUgbW9ubyBhbnNpIG1vZGUpLAorCWxpbmVzIzUwLCB1c2U9Y29uczI1LW0sCitjb25zNjB8YW5zaTgweDYwfGZyZWVic2QgY29uc29sZSAoNjAtbGluZSBhbnNpIG1vZGUpLAorCWxpbmVzIzYwLCB1c2U9Y29uczI1LAorY29uczYwLW18YW5zaTgweDYwLW1vbm98ZnJlZWJzZCBjb25zb2xlICg2MC1saW5lIG1vbm8gYW5zaSBtb2RlKSwKKwlsaW5lcyM2MCwgdXNlPWNvbnMyNS1tLAorY29uczI1cnxwYzNyfGlibXBjM3J8Y29uczI1LWtvaTgtcnxmcmVlYnNkIGNvbnNvbGUgdy9rb2k4LXIgY3lyaWxsaWMsCisJYWNzYz0tXDAzMC5eWTBcMjE1YFwwMDRhXDIyMGZcMjM0aFwyMjFpXDAyNWpcMjA1a1wyMDNsXDIwMm1cMjA0blwyMTJxXDB0XDIwNnVcMjA3dlwyMTF3XDIxMHhcMjAxeVwyMzB6XDIzMX5cMjI1LAorCXVzZT1jb25zMjV3LAorY29uczI1ci1tfHBjM3ItbXxpYm1wYzNyLW1vbm98Y29uczI1LWtvaThyLW18ZnJlZWJzZCBjb25zb2xlIHcva29pOC1yIGN5cmlsbGljIChtb25vKSwKKwljb2xvcnNALCBwYWlyc0AsCisJb3BALCBybXVsPVxFW20sIHNldGFiQCwgc2V0YWZALAorCXNncj1cRVswJT8lcDEldDsyOzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MzA7MSU7JT8lcDYldDsxJTttLAorCXNtdWw9XEVbNG0sIHVzZT1jb25zMjVyLAorY29uczUwcnxjb25zNTAta29pOHJ8ZnJlZWJzZCBjb25zb2xlIHcva29pOC1yIGN5cmlsbGljICg1MCBsaW5lcyksCisJbGluZXMjNTAsIHVzZT1jb25zMjVyLAorY29uczUwci1tfGNvbnM1MC1rb2k4ci1tfGZyZWVic2QgY29uc29sZSB3L2tvaTgtciBjeXJpbGxpYyAoNTAtbGluZSBtb25vKSwKKwlsaW5lcyM1MCwgdXNlPWNvbnMyNXItbSwKK2NvbnM2MHJ8Y29uczYwLWtvaThyfGZyZWVic2QgY29uc29sZSB3L2tvaTgtciBjeXJpbGxpYyAoNjAgbGluZXMpLAorCWxpbmVzIzYwLCB1c2U9Y29uczI1ciwKK2NvbnM2MHItbXxjb25zNjAta29pOHItbXxmcmVlYnNkIGNvbnNvbGUgdy9rb2k4LXIgY3lyaWxsaWMgKDYwLWxpbmUgbW9ubyksCisJbGluZXMjNjAsIHVzZT1jb25zMjVyLW0sCisjIElTTyA4ODU5LTEgRnJlZUJTRCBjb25zb2xlCitjb25zMjVsMXxjb25zMjUtaXNvODg1OXxmcmVlYnNkIGNvbnNvbGUgdy9pc28gODg1OS0xIGNoYXJzLAorCWFjc2M9K1wyNTNcLFwyNzMtXDAzMC5cMDMxYFwyMDFhXDIwMmZcMjA3Z1wyMTBpXDI0N2pcMjEza1wyMTRsXDIxNW1cMjE2blwyMTdvXDIyMHBcMjIxcVwyMjJyXDIyM3NcMjI0dFwyMjV1XDIyNnZcMjI3d1wyMzB4XDIzMXlcMjMyelwyMzN+XDIzNywKKwl1c2U9Y29uczI1dywKK2NvbnMyNWwxLW18Y29uczI1LWlzby1tfGZyZWVic2QgY29uc29sZSB3L2lzbyA4ODU5LTEgY2hhcnMgKG1vbm8pLAorCWNvbG9yc0AsIHBhaXJzQCwKKwlib2xkQCwgZGltQCwgb3BALCBybXVsPVxFW20sIHNldGFiQCwgc2V0YWZALAorCXNncj1cRVswJT8lcDEldDsyOzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlO20sCisJc211bD1cRVs0bSwgdXNlPWNvbnMyNWwxLAorY29uczUwbDF8Y29uczUwLWlzbzg4NTl8ZnJlZWJzZCBjb25zb2xlIHcvaXNvIDg4NTktMSBjaGFycyAoNTAgbGluZXMpLAorCWxpbmVzIzUwLCB1c2U9Y29uczI1bDEsCitjb25zNTBsMS1tfGNvbnM1MC1pc28tbXxmcmVlYnNkIGNvbnNvbGUgdy9pc28gODg1OS0xIGNoYXJzICg1MC1saW5lIG1vbm8pLAorCWxpbmVzIzUwLCB1c2U9Y29uczI1bDEtbSwKK2NvbnM2MGwxfGNvbnM2MC1pc298ZnJlZWJzZCBjb25zb2xlIHcvaXNvIDg4NTktMSBjaGFycyAoNjAgbGluZXMpLAorCWxpbmVzIzYwLCB1c2U9Y29uczI1bDEsCitjb25zNjBsMS1tfGNvbnM2MC1pc28tbXxmcmVlYnNkIGNvbnNvbGUgdy9pc28gODg1OS0xIGNoYXJzICg2MC1saW5lIG1vbm8pLAorCWxpbmVzIzYwLCB1c2U9Y29uczI1bDEtbSwKKworIyMjIyAzODZCU0QgYW5kIEJTRC9PUyBDb25zb2xlcworIworCisjIFRoaXMgd2FzIHRoZSBvcmlnaW5hbCAzODZCU0QgY29uc29sZSBlbnRyeSAoSSB0aGluaykuCisjIFNvbWUgcGxhY2VzIGl0J3MgbmFtZWQgb2xkcGMzfG9sZGlibXBjMy4KKyMgRnJvbTogQWxleCBSLk4uIFdldG1vcmUgPGF3MnRAYW5kcmV3LmNtdS5lZHU+CitvcmlncGMzfG9yaWdpYm1wYzN8SUJNIFBDIDM4NkJTRCBDb25zb2xlLAorCU9UYnMsIGFtLCBidywgZW8sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwlhY3NjPWpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVxXDMwNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjMsCisJYm9sZD1cRVs3bSwgY2xlYXI9XEVjLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgaW5kPVxFW1MsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2hvbWU9XEVbWSwgcmk9XEVbVCwgcm1zbz1cRVsxOzB4XEVbMjs3eCwKKwlybXVsPVxFWzE7MHhcRVsyOzd4LCBzZ3IwPVxFW21cRVsxOzB4XEVbMjs3eCwKKwlzbXNvPVxFWzE7N3hcRVsyOzB4LCBzbXVsPVxFWzE7N3hcRVsyOzB4LAorCisjIGRlc2NyaXB0aW9uIG9mIEJTRC8zODYgY29uc29sZSBlbXVsYXRvciBpbiB2ZXJzaW9uIDEuMCAoc3VwcGxpZWQgYnkgQlNESSkKK29sZHBjM3xvbGRpYm1wYzN8b2xkIElCTSBQQyBCU0QvMzg2IENvbnNvbGUsCisJT1Ricywga20sCisJbGluZXMjMjUsCisJYmVsPV5HLCBib2xkPVxFWz0xNUYsIGNyPV5NLCBjdWQxPV5KLCBkaW09XEVbPThGLCBkbDE9XEVbTSwKKwlodD1eSSwgaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsIGtpY2gxPVxFW0wsIGtsbD1cRVtGLAorCWtucD1cRVtHLCBrcHA9XEVbSSwgbmVsPV5NXkosIHNncjA9XEVbPVIsCisKKyMgRGVzY3JpcHRpb24gb2YgQlNEL09TIGNvbnNvbGUgZW11bGF0b3IgaW4gdmVyc2lvbiAxLjEsIDIuMCwgMi4xCisjIE5vdGUsIHRoZSBlbXVsYXRvciBzdXBwb3J0cyBtYW55IG9mIHRoZSBhZGRpdGlvbmFsIGNvbnNvbGUgZmVhdHVyZXMKKyMgbGlzdGVkIGluIHRoZSBpQkNTMiAoZS5nLiBjaGFyYWN0ZXItc2V0IHNlbGVjdGlvbikgdGhvdWdoIG5vdCBhbGwKKyMgYXJlIGRlc2NyaWJlZCBoZXJlLiAgVGhpcyBlbnRyeSByZWFsbHkgb3VnaHQgdG8gYmUgdXBncmFkZWQuCisjIEFsc28gbm90ZSwgdGhlIGNvbnNvbGUgd2lsbCBhbHNvIHdvcmsgd2l0aCBmZXdlciBsaW5lcyBhZnRlciBkb2luZworIyAic3R0eSByb3dzIE5OIiwgZS5nLiB0byB1c2UgMjQgbGluZXMuCisjIChDb2xvciBzdXBwb3J0IGZyb20gS2V2aW4gUm9zZW5iZXJnIDxrZXZpbkBjeWJlcnBvcnQuY29tPiwgMiBNYXkgMTk5NikKKyMgQnVnOiBUaGUgPG9wPiBjYXBhYmlsaXR5IHJlc2V0cyBhdHRyaWJ1dGVzLgorYnNkb3MtcGN8SUJNIFBDIEJTRC9PUyBDb25zb2xlLAorCXNncj1cRVswOzEwJT8lcDEldDs3JTslPyVwMiV0OzElOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDkldDsxMSU7bSwKKwl1c2U9YnNkb3MtcGMtbm9ib2xkLAorCitic2Rvcy1wYy1ub2JvbGR8QlNEL09TIFBDIGNvbnNvbGUgdy9vIGJvbGQsCisJdXNlPWtsb25lK2NvbG9yLCB1c2U9YnNkb3MtcGMtbSwKKworYnNkb3MtcGMtbXxic2Rvcy1wYy1tb25vfEJTRC9PUyBQQyBjb25zb2xlIG1vbm8sCisJT1RicywgYW0sIGVvLCBrbSwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgY2xlYXI9XEVjLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILCBraWNoMT1cRVtMLAorCWtsbD1cRVtGLCBrbnA9XEVbRywga3BwPVxFW0ksIG5lbD1eTV5KLCByYz1cRTgsIHNjPVxFNywKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttJT8lcDUldFxFWz04RiU7LAorCXVzZT1rbG9uZStzZ3I4LAorCisjIE9sZCBuYW1lcyBmb3IgQlNEL09TIFBDIGNvbnNvbGUgdXNlZCBpbiByZWxlYXNlcyBiZWZvcmUgNC4xLgorcGMzfEJTRC9PUyBvbiB0aGUgUEMgQ29uc29sZSwKKwl1c2U9YnNkb3MtcGMtbm9ib2xkLAoraWJtcGMzfHBjMy1ib2xkfEJTRC9PUyBvbiB0aGUgUEMgQ29uc29sZSB3aXRoIGJvbGQgaW5zdGVhZCBvZiB1bmRlcmxpbmUsCisJdXNlPWJzZG9zLXBjLAorCisjIEJTRC9PUyBvbiB0aGUgU1BBUkMKK2JzZG9zLXNwYXJjfFN1biBTUEFSQyBCU0QvT1MgQ29uc29sZSwKKwl1c2U9c3VuLAorCisjIEJTRC9PUyBvbiB0aGUgUG93ZXJQQworYnNkb3MtcHBjfFBvd2VyUEMgQlNEL09TIENvbnNvbGUsCisJdXNlPWJzZG9zLXBjLAorCisjIyMjIERFQyBWVDUyCisjICg8YWNzYz4vPHJtYWNzPi88c21hY3M+IGNhcGFiaWxpdGllcyBhcmVuJ3QgaW4gREVDJ3Mgb2ZmaWNpYWwgZW50cnkgLS0gZXNyKQorIworIyBBY3R1YWxseSAoVEQgcG9pbnRlZCB0aGlzIG91dCBhdCB0aGUgdGltZSB0aGUgYWNzYyBzdHJpbmcgd2FzIGFkZGVkKToKKyMgdnQ1MiBzaG91bGRuJ3QgZGVmaW5lIGZ1bGwgYWNzYyBzaW5jZSBtb3N0IG9mIHRoZSBjZWxscyBkb24ndCBtYXRjaC4KKyMgc2VlIHZ0MTAwIG1hbnVhbCBwYWdlIEEtMzEuICBUaGlzIGlzIHRoZSBsaXN0IHRoYXQgZG9lcyBtYXRjaDoKKyMJZiBkZWdyZWUKKyMJZyBwbHVzL21pbnVzCisjCWggcmlnaHQtYXJyb3cKKyMJayBkb3duLWFycm93CisjCW0gc2Nhbi0xCisjCW8gc2Nhbi0zCisjCXEgc2Nhbi01CisjCXMgc2Nhbi03CisjIFRoZSBsaW5lLWRyYXdpbmcgaGFwcGVucyB0byB3b3JrIGluIHNldmVyYWwgdGVybWluYWwgZW11bGF0b3JzLCBidXQgc2hvdWxkCisjIG5vdCBiZSB1c2VkIGFzIGEgZ3VpZGUgdG8gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgdnQ1Mi4gIE5vdGUgaW4gcGFydGljdWxhcgorIyB0aGF0IHZ0NTIgZG9lcyBub3Qgc3VwcG9ydCBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycyAodGhlIHNjYW4tWCB2YWx1ZXMgcmVmZXIKKyMgdG8gYSBjcnVkZSBwbG90dGluZyBmZWF0dXJlKSAtVEQKK3Z0NTJ8ZGVjIHZ0NTIsCisJT1RicywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWZmZ2doaG9tcG9xcXNzLmssIGJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwKKwljdWIxPVxFRCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlZD1cRUosCisJZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwgbmVsPV5NXkosIHJpPVxFSSwgcm1hY3M9XEVHLCBzbWFjcz1cRUYsCisKKyMjIyMgREVDIFZUMTAwIGFuZCBjb21wYXRpYmxlcworIworIyBERUMgdGVybWluYWxzIGZyb20gdGhlIHZ0MTAwIGZvcndhcmQgYXJlIGNvbGxlY3RlZCBoZXJlLiBPbGRlciBERUMgdGVybWluYWxzCisjIGFuZCBtaWNybyBjb25zb2xlcyBjYW4gYmUgZm91bmQgaW4gdGhlIGBvYnNvbGV0ZScgc2VjdGlvbi4gIE1vcmUgZGV0YWlscyBvbgorIyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFZUMTAwIGFuZCBBTlNJIFgzLjY0L0lTTyA2NDI5L0VDTUEtNDggbWF5IGJlCisjIGZvdW5kIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjCisjIEV4Y2VwdCB3aGVyZSBub3RlZCwgdGhlc2UgZW50cmllcyBhcmUgREVDJ3Mgb2ZmaWNpYWwgdGVybWluZm9zLgorIyBDb250YWN0IEJpbGwgSGVkYmVyZyA8aGVkYmVyZ0BoYW5uYWguZW5ldC5kZWMuY29tPiBvZiBUZXJtaW5hbCBTdXBwb3J0CisjIEVuZ2luZWVyaW5nIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVXBkYXRlZCB0ZXJtaW5mb3MgYW5kIHRlcm1jYXBzCisjIGFyZSBrZXB0IGF2YWlsYWJsZSBhdCBmdHA6Ly9nYXRla2VlcGVyLmRlYy5jb20vcHViL0RFQy90ZXJtY2Fwcy4KKyMKKyMgSW4gT2N0b2JlciAxOTk1IERFQyBzb2xkIGl0cyB0ZXJtaW5hbHMgYnVzaW5lc3MsIGluY2x1ZGluZyB0aGUgVlQgYW5kIERvcmlvCisjIGxpbmUgYW5kIHRyYWRlbWFyaywgdG8gU3VuUml2ZXIgRGF0YSBTeXN0ZW1zLiAgU3VuUml2ZXIgaGFzIHNpbmNlIGNoYW5nZWQKKyMgaXRzIG5hbWUgdG8gQm91bmRsZXNzIFRlY2hub2xvZ2llczsgc2VlIGh0dHA6Ly93d3cuYm91bmRsZXNzLmNvbS4KKyMKKworIyBOT1RFOiAgQW55IFZUMTAwIGVtdWxhdGlvbiwgd2hldGhlciBpbiBoYXJkd2FyZSBvciBzb2Z0d2FyZSwgYWxtb3N0CisjIGNlcnRhaW5seSBpbmNsdWRlcyB3aGF0IERFQyBjYWxsZWQgdGhlIGBMZXZlbCAxIGVkaXRpbmcgZXh0ZW5zaW9uJyBjb2RlczsKKyMgb25seSB0aGUgdmVyeSBvbGRlc3QgVlQxMDBzIGxhY2tlZCB0aGVzZSBhbmQgdGhlcmUgcHJvYmFibHkgYXJlbid0IGFueSBvZgorIyB0aG9zZSBsZWZ0IGFsaXZlLiAgVG8gY2FwdHVyZSB0aGVzZSwgdXNlIG9uZSBvZiB0aGUgVlQxMDIgZW50cmllcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSA8eGVubD4gZ2xpdGNoIGluIHZ0MTAwIGlzIG5vdCBxdWl0ZSB0aGUgc2FtZSBhcyBvbiB0aGUgQ29uY2VwdCwKKyMgc2luY2UgdGhlIGN1cnNvciBpcyBsZWZ0IGluIGEgZGlmZmVyZW50IHBvc2l0aW9uIHdoaWxlIGluIHRoZQorIyB3ZWlyZCBzdGF0ZSAoY29uY2VwdCBhdCBiZWdpbm5pbmcgb2YgbmV4dCBsaW5lLCB2dDEwMCBhdCBlbmQKKyMgb2YgdGhpcyBsaW5lKSBzbyBhbGwgdmVyc2lvbnMgb2YgdmkgYmVmb3JlIDMuNyBkb24ndCBoYW5kbGUKKyMgPHhlbmw+IHJpZ2h0IG9uIHZ0MTAwLiBUaGUgY29ycmVjdCB3YXkgdG8gaGFuZGxlIDx4ZW5sPiBpcyB3aGVuCisjIHlvdSBvdXRwdXQgdGhlIGNoYXIgaW4gY29sdW1uIDgwLCBpbW1lZGlhdGVseSBvdXRwdXQgQ1IgTEYKKyMgYW5kIHRoZW4gYXNzdW1lIHlvdSBhcmUgaW4gY29sdW1uIDEgb2YgdGhlIG5leHQgbGluZS4gSWYgPHhlbmw+CisjIGlzIG9uLCBhbSBzaG91bGQgYmUgb24gdG9vLgorIworIyBJIGFzc3VtZSB5b3UgaGF2ZSBzbW9vdGggc2Nyb2xsIG9mZiBvciBhcmUgYXQgYSBzbG93IGVub3VnaCBiYXVkCisjIHJhdGUgdGhhdCBpdCBkb2Vzbid0IG1hdHRlciAoMTIwMD8gb3IgbGVzcykuIEFsc28gdGhpcyBhc3N1bWVzCisjIHRoYXQgeW91IHNldCBhdXRvLW5sIHRvICJvbiIsIGlmIHlvdSBzZXQgaXQgb2ZmIHVzZSB2dDEwMC1uYW0KKyMgYmVsb3cuCisjCisjIFRoZSBwYWRkaW5nIHJlcXVpcmVtZW50cyBsaXN0ZWQgaGVyZSBhcmUgZ3Vlc3Nlcy4gSXQgaXMgc3Ryb25nbHkKKyMgcmVjb21tZW5kZWQgdGhhdCB4b24veG9mZiBiZSBlbmFibGVkLCBhcyB0aGlzIGlzIGFzc3VtZWQgaGVyZS4KKyMKKyMgVGhlIHZ0MTAwIHVzZXMgPHJzMj4gYW5kIDxyZj4gcmF0aGVyIHRoYW4gPGlzMj4vPHRiYz4vPGh0cz4gYmVjYXVzZSB0aGUKKyMgdGFiIHNldHRpbmdzIGFyZSBpbiBub24tdm9sYXRpbGUgbWVtb3J5IGFuZCBkb24ndCBuZWVkIHRvIGJlCisjIHJlc2V0IHVwb24gbG9naW4uIEFsc28gc2V0dGluZyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZ2xpdGNoZXMKKyMgdGhlIHNjcmVlbiBhbm5veWluZ2x5LiBZb3UgY2FuIHR5cGUgInJlc2V0IiB0byBnZXQgdGhlbSBzZXQuCisjCisjIFRoZSBWVDEwMCBzZXJpZXMgdGVybWluYWxzIGhhdmUgY3Vyc29yICgiYXJyb3dzIikga2V5cyB3aGljaCBjYW4gb3BlcmF0ZQorIyBpbiB0d28gZGlmZmVyZW50IG1vZGVzOiBDdXJzb3IgTW9kZSBhbmQgQXBwbGljYXRpb24gTW9kZS4gIEN1cnNvciBNb2RlCisjIGlzIHRoZSByZXNldCBzdGF0ZSwgYW5kIGlzIGFzc3VtZWQgdG8gYmUgdGhlIG5vcm1hbCBzdGF0ZS4gIEFwcGxpY2F0aW9uCisjIE1vZGUgaXMgdGhlICJzZXQiIHN0YXRlLiAgSW4gQ3Vyc29yIE1vZGUsIHRoZSBjdXJzb3Iga2V5cyB0cmFuc21pdAorIyAiRXNjIFsge2NvZGV9IiBzZXF1ZW5jZXMsIGNvbmZvcm1pbmcgdG8gQU5TSSBzdGFuZGFyZHMuICBJbiBBcHBsaWNhdGlvbgorIyBNb2RlLCB0aGUgY3Vyc29yIGtleXMgdHJhbnNtaXQgIkVzYyBPIDxjb2RlPiIgc2VxdWVuY2VzLiAgQXBwbGljYXRpb24gTW9kZQorIyB3YXMgcHJvdmlkZWQgcHJpbWFyaWx5IGFzIGFuIGFpZCB0byB0aGUgcG9ydGluZyBvZiBWVDUyIGFwcGxpY2F0aW9ucy4gIEl0IGlzCisjIGFzc3VtZWQgdGhhdCB0aGUgY3Vyc29yIGtleXMgYXJlIG5vcm1hbGx5IGluIEN1cnNvciBNb2RlLCBhbmQgZXhwZWN0ZWQgdGhhdAorIyBhcHBsaWNhdGlvbnMgc3VjaCBhcyB2aSB3aWxsIGFsd2F5cyB0cmFuc21pdCB0aGUgPHNta3g+IHN0cmluZy4gIFRoZXJlZm9yZSwKKyMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgY3Vyc29yIGtleXMgYXJlIG1hZGUgdG8gbWF0Y2ggd2hhdCB0aGUgdGVybWluYWwKKyMgdHJhbnNtaXRzIGFmdGVyIHRoZSA8c21reD4gc3RyaW5nIGlzIHRyYW5zbWl0dGVkLiAgSWYgdGhlIDxzbWt4PiBzdHJpbmcKKyMgaXMgYSBudWxsIHN0cmluZyBvciBpcyBub3QgZGVmaW5lZCwgdGhlbiBjdXJzb3Iga2V5cyBhcmUgYXNzdW1lZCB0byBiZSBpbgorIyAiQ3Vyc29yIE1vZGUiLCBhbmQgdGhlIGN1cnNvciBrZXlzIGRlZmluaXRpb25zIHNob3VsZCBtYXRjaCB0aGF0IGFzc3VtcHRpb24sCisjIGVsc2UgdGhlIGFwcGxpY2F0aW9uIG1heSBmYWlsLiAgSXQgaXMgYWxzbyBleHBlY3RlZCB0aGF0IGFwcGxpY2F0aW9ucyB3aWxsCisjIGFsd2F5cyB0cmFuc21pdCB0aGUgPHJta3g+IHN0cmluZyB0byB0aGUgdGVybWluYWwgYmVmb3JlIHRoZXkgZXhpdC4KKyMKKyMgVGhlIFZUMTAwIHNlcmllcyB0ZXJtaW5hbHMgaGF2ZSBhbiBhdXhpbGlhcnkga2V5cGFkLCBjb21tb25seSByZWZlcnJlZCB0byBhcworIyB0aGUgIk51bWVyaWMgS2V5cGFkIiwgYmVjYXVzZSBpdCBpcyBhIGNsdXN0ZXIgb2YgbnVtZXJpYyBhbmQgZnVuY3Rpb24ga2V5cy4KKyMgVGhlIE51bWVyaWMgS2V5cGFkIHdoaWNoIGNhbiBvcGVyYXRlIGluIHR3byBkaWZmZXJlbnQgbW9kZXM6IE51bWVyaWMgTW9kZSBhbmQKKyMgQXBwbGljYXRpb24gTW9kZS4gIE51bWVyaWMgTW9kZSBpcyB0aGUgcmVzZXQgc3RhdGUsIGFuZCBpcyBhc3N1bWVkIHRvIGJlCisjIHRoZSBub3JtYWwgc3RhdGUuICBBcHBsaWNhdGlvbiBNb2RlIGlzIHRoZSAic2V0IiBzdGF0ZS4gIEluIE51bWVyaWMgTW9kZSwKKyMgdGhlIG51bWVyaWMgYW5kIHB1bmN0dWF0aW9uIGtleXMgdHJhbnNtaXQgQVNDSUkgNy1iaXQgY2hhcmFjdGVycywgYW5kIHRoZQorIyBFbnRlciBrZXkgdHJhbnNtaXRzIHRoZSBzYW1lIGFzIHRoZSBSZXR1cm4ga2V5IChOb3RlOiB0aGUgUmV0dXJuIGtleQorIyBjYW4gYmUgY29uZmlndXJlZCB0byBzZW5kIGVpdGhlciBMRiAoXDAxNSkgb3IgQ1IgTEYpLiAgSW4gQXBwbGljYXRpb24gTW9kZSwKKyMgYWxsIHRoZSBrZXlwYWQga2V5cyB0cmFuc21pdCAiRXNjIE8ge2NvZGV9IiBzZXF1ZW5jZXMuICBUaGUgUEYxIC0gUEY0IGtleXMKKyMgYWx3YXlzIHNlbmQgdGhlIHNhbWUgIkVzYyBPIHtjb2RlfSIgc2VxdWVuY2VzLiAgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBrZXlwYWQKKyMgaXMgbm9ybWFsbHkgaW4gTnVtZXJpYyBNb2RlLiAgSWYgYW4gYXBwbGljYXRpb24gcmVxdWlyZXMgdGhhdCB0aGUga2V5cGFkIGJlCisjIGluIEFwcGxpY2F0aW9uIE1vZGUgdGhlbiBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSB1c2VyLCBvciB0aGUgYXBwbGljYXRpb24sCisjIHdpbGwgc2V0IHRoZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHBvaW50IHRvIGEgdGVybWluZm8gZW50cnkgd2hpY2ggaGFzCisjIGRlZmluZWQgdGhlIDxzbWt4PiBzdHJpbmcgdG8gaW5jbHVkZSB0aGUgY29kZXMgdGhhdCBzd2l0Y2ggdGhlIGtleXBhZCBpbnRvCisjIEFwcGxpY2F0aW9uIE1vZGUsIGFuZCB0aGUgdGVybWluZm8gZW50cnkgd2lsbCBhbHNvIGRlZmluZSBmdW5jdGlvbiBrZXkKKyMgZmllbGRzIHRvIG1hdGNoIHRoZSBBcHBsaWNhdGlvbiBNb2RlIGNvbnRyb2wgY29kZXMuICBJZiB0aGUgPHNta3g+IHN0cmluZworIyBpcyBhIG51bGwgc3RyaW5nIG9yIGlzIG5vdCBkZWZpbmVkLCB0aGVuIHRoZSBrZXlwYWQgaXMgYXNzdW1lZCB0byBiZSBpbgorIyBOdW1lcmljIE1vZGUuICBJZiB0aGUgPHNta3g+IHN0cmluZyBzd2l0Y2hlcyB0aGUga2V5cGFkIGludG8gQXBwbGljYXRpb24KKyMgTW9kZSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgPHJta3g+IHN0cmluZyB3aWxsIGNvbnRhaW4gdGhlIGNvbnRyb2wgY29kZXMKKyMgbmVjZXNzYXJ5IHRvIHJlc2V0IHRoZSBrZXlwYWQgdG8gIk5vcm1hbCIgbW9kZSwgYW5kIGl0IGlzIGFsc28gZXhwZWN0ZWQgdGhhdAorIyBhcHBsaWNhdGlvbnMgd2hpY2ggdHJhbnNtaXQgdGhlIDxzbWt4PiBzdHJpbmcgd2lsbCBhbHNvIGFsd2F5cyB0cmFuc21pdCB0aGUKKyMgPHJta3g+IHN0cmluZyB0byB0aGUgdGVybWluYWwgYmVmb3JlIHRoZXkgZXhpdC4KKyMKKyMgSGVyZSdzIGEgZGlhZ3JhbSBvZiB0aGUgVlQxMDAga2V5cGFkIGtleXMgd2l0aCB0aGVpciBiaW5kaW5ncy4KKyMgVGhlIHRvcCBsaW5lIGlzIHRoZSBuYW1lIG9mIHRoZSBrZXkgKHNvbWUgREVDIGtleWJvYXJkcyBoYXZlIHRoZSBrZXlzCisjIGxhYmVsbGVkIHNvbWV3aGF0IGRpZmZlcmVudGx5LCBsaWtlIEdPTEQgaW5zdGVhZCBvZiBQRjEsIGJ1dCB0aGlzIGlzCisjIHRoZSBtb3N0ICJvZmZpY2lhbCIgbmFtZSkuICBUaGUgc2Vjb25kIGxpbmUgaXMgdGhlIGVzY2FwZSBzZXF1ZW5jZSBpdAorIyBnZW5lcmF0ZXMgaW4gQXBwbGljYXRpb24gS2V5cGFkIG1vZGUgKHdoZXJlICIkIiBtZWFucyB0aGUgRVNDCisjIGNoYXJhY3RlcikuICBUaGUgdGhpcmQgbGluZSBjb250YWlucyB0d28gaXRlbXMsIGZpcnN0IHRoZSBtYXBwaW5nIG9mCisjIHRoZSBrZXkgaW4gdGVybWluZm8sIGFuZCB0aGVuIGluIHRlcm1jYXAuCisjICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisjICB8ICAgUEYxICAgfCAgIFBGMiAgIHwgICBQRjMgICB8ICAgUEY0ICAgfAorIyAgfCAgICRPUCAgIHwgICAkT1EgICB8ICAgJE9SICAgfCAgICRPUyAgIHwKKyMgIHxfa2YxX19rMV98X2tmMl9fazJffF9rZjNfX2szX3xfa2Y0X19rNF98CisjICB8ICAgIDcgICAgICAgICA4ICAgICAgICAgOSAgICAgICAgIC0gICAgfAorIyAgfCAgICRPdyAgIHwgICAkT3ggICB8ICAgJE95ICAgfCAgICRPbSAgIHwKKyMgIHxfa2Y5X19rOV98X2tmMTBfaztffF9rZjBfX2swX3xfX19fX19fX198CisjICB8ICAgIDQgICAgfCAgICA1ICAgIHwgICAgNiAgICB8ICAgICwgICAgfAorIyAgfCAgICRPdCAgIHwgICAkT3UgICB8ICAgJE92ICAgfCAgICRPbCAgIHwKKyMgIHxfa2Y1X19rNV98X2tmNl9fazZffF9rZjdfX2s3X3xfa2Y4X19rOF98CisjICB8ICAgIDEgICAgfCAgICAyICAgIHwgICAgMyAgICB8ICAgICAgICAgfAorIyAgfCAgICRPcSAgIHwgICAkT3IgICB8ICAgJE9zICAgfCAgZW50ZXIgIHwKKyMgIHxfa2ExX19LMV98X2tiMl9fSzJffF9rYTNfX0szX3wgICRPTSAgICB8CisjICB8ICAgICAgICAgMCAgICAgICAgIHwgICAuICAgICB8ICAgICAgICAgfAorIyAgfCAgICAgICAgJE9wICAgICAgICB8ICAkT24gICAgfCAgICAgICAgIHwKKyMgIHxfX19rYzFfX19fX19fSzRfX19ffF9rYzNfX0s1X3xfa2VudF9AOF98CisjCisjIE5vdGUgaG93ZXZlciwgdGhhdCB0aGUgYXJyYW5nZW1lbnQgb2YgdGhlIDUta2V5IGthMS1rYzMgZG8gbm90IGZvbGxvdyB0aGUKKyMgdGVybWluZm8gZ3VpZGVsaW5lcy4gIFRoYXQgaXMgYSBjb21wcm9taXNlIHVzZWQgdG8gYXNzaWduIHRoZSByZW1haW5pbmcKKyMga2V5cyBvbiB0aGUga2V5cGFkIHRvIGtmNS1rZjAsIHVzZWQgb24gb2xkZXIgc3lzdGVtcyB3aXRoIGxlZ2FjeSB0ZXJtY2FwCisjIHN1cHBvcnQ6Cit2dDEwMCtrZXlwYWR8ZGVjIHZ0MTAwIG51bWVyaWMga2V5cGFkIG5vIGZrZXlzLAorCWthMT1cRU9xLCBrYTM9XEVPcywga2IyPVxFT3IsIGtjMT1cRU9wLCBrYzM9XEVPbiwKK3Z0MTAwK3Bma2V5c3xkZWMgdnQxMDAgbnVtZXJpYyBrZXlwYWQsCisJa2VudD1cRU9NLCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywKKwl1c2U9dnQxMDAra2V5cGFkLAordnQxMDArZm5rZXlzfGRlYyB2dDEwMCBudW1lcmljIGtleXBhZCwKKwlrZjA9XEVPeSwga2YxMD1cRU94LCBrZjU9XEVPdCwga2Y2PVxFT3UsIGtmNz1cRU92LCBrZjg9XEVPbCwKKwlrZjk9XEVPdywgdXNlPXZ0MTAwK3Bma2V5cywKKyMKKyMgQSBiZXR0ZXIgYWRhcHRhdGlvbiB0byBtb2Rlcm4ga2V5Ym9hcmRzIHN1Y2ggYXMgdGhlIFBDJ3MsIHdoaWNoIGhhdmUgYSBkb3plbgorIyBmdW5jdGlvbiBrZXlzIGFuZCB0aGUga2V5cGFkIDIsNCw2LDgga2V5cyBhcmUgbGFiZWxlZCB3aXRoIGFycm93cyBrZXlzLCBpcyB0bworIyB1c2UgdGhlIDUta2V5IGFycmFuZ2VtZW50IHRvIG1vZGVsIHRoZSBhcnJvdyBrZXlzIGFzIHN1Z2dlc3RlZCBpbiB0aGUKKyMgdGVybWluZm8gZ3VpZGVsaW5lczoKKyMgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyMgIHwgICBQRjEgICB8ICAgUEYyICAgfCAgIFBGMyAgIHwgICBQRjQgICB8CisjICB8ICAgJE9QICAgfCAgICRPUSAgIHwgICAkT1IgICB8ICAgJE9TICAgfAorIyAgfF9rZjFfX2sxX3xfa2YyX19rMl98X2tmM19fazNffF9rZjRfX2s0X3wKKyMgIHwgICAgNyAgICAgICAgIDggICAgICAgICA5ICAgICAgICAgLSAgICB8CisjICB8ICAgJE93ICAgfCAgICRPeCAgIHwgICAkT3kgICB8ICAgJE9tICAgfAorIyAgfF9rYTFfX0sxX3xfX19fX19fX198X2thM19fSzNffF9fX19fX19fX3wKKyMgIHwgICAgNCAgICB8ICAgIDUgICAgfCAgICA2ICAgIHwgICAgLCAgICB8CisjICB8ICAgJE90ICAgfCAgICRPdSAgIHwgICAkT3YgICB8ICAgJE9sICAgfAorIyAgfF9fX19fX19fX3xfa2IyX19LMl98X19fX19fX19ffF9fX19fX19fX3wKKyMgIHwgICAgMSAgICB8ICAgIDIgICAgfCAgICAzICAgIHwgICAgICAgICB8CisjICB8ICAgJE9xICAgfCAgICRPciAgIHwgICAkT3MgICB8ICBlbnRlciAgfAorIyAgfF9rYzFfX0s0X3xfX19fX19fX198X2tjM19fSzVffCAgJE9NICAgIHwKKyMgIHwgICAgICAgICAwICAgICAgICAgfCAgIC4gICAgIHwgICAgICAgICB8CisjICB8ICAgICAgICAkT3AgICAgICAgIHwgICRPbiAgICB8ICAgICAgICAgfAorIyAgfF9fX19fX19fX19fX19fX19fX198X19fX19fX19ffF9rZW50X0A4X3wKKyMKK3Z0MjIwK2tleXBhZHxkZWMgdnQyMjAgbnVtZXJpYyBrZXlwYWQsCisJa2ExPVxFT3csIGthMz1cRU95LCBrYjI9XEVPdSwga2MxPVxFT3EsIGtjMz1cRU9zLCBrZW50PVxFT00sCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGthMj1cRU94LCBrYjE9XEVPdCwKKwlrYjM9XEVPdiwga2MyPVxFT3IsCisjCit2dDEwMCtlbnF8bmN1cnNlcyBleHRlbnNpb24gZm9yIHZ0MTAwLXN0eWxlIEVOUSwKKwl1OD1cRVs/MTsyYywgdXNlPWFuc2krZW5xLAordnQxMDIrZW5xfG5jdXJzZXMgZXh0ZW5zaW9uIGZvciB2dDEwMi1zdHlsZSBFTlEsCisJdTg9XEVbPzZjLCB1c2U9YW5zaStlbnEsCisjCisjIEFuZCBoZXJlLCBmb3IgdGhvc2Ugb2YgeW91IHdpdGggb3JwaGFuZWQgVlQxMDBzIGxhY2tpbmcgZG9jdW1lbnRhdGlvbiwgaXMKKyMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc29mdCBzd2l0Y2hlcyBpbnZva2VkIHdoZW4geW91IGRvIGBTZXQgVXAnLgorIworIyAgU2Nyb2xsIDAtSnVtcCAgICAgICAgICAgICAgIFNoaWZ0ZWQgMyAgIDAtIworIyAgfCAgICAgIDEtU21vb3RoICAgICAgICAgICAgIHwgICAgICAgICAgIDEtQnJpdGlzaCBwb3VuZCBzaWduCisjICB8IEF1dG9yZXBlYXQgMC1PZmYgICAgICAgICAgfCBXcmFwIEFyb3VuZCAwLU9mZgorIyAgfCB8ICAgICAgICAgIDEtT24gICAgICAgICAgIHwgfCAgICAgICAgICAgMS1PbgorIyAgfCB8IFNjcmVlbiAwLURhcmsgQmtnICAgICAgIHwgfCBOZXcgTGluZSAwLU9mZgorIyAgfCB8IHwgICAgICAxLUxpZ2h0IEJrZyAgICAgIHwgfCB8ICAgICAgICAxLU9uCisjICB8IHwgfCBDdXJzb3IgMC1VbmRlcmxpbmUgICAgfCB8IHwgSW50ZXJsYWNlIDAtT2ZmCisjICB8IHwgfCB8ICAgICAgMS1CbG9jayAgICAgICAgfCB8IHwgfCAgICAgICAgIDEtT24KKyMgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8CisjICAxIDEgMCAxICAgICAgIDEgMSAxIDEgICAgICAgMCAxIDAgMCAgICAgICAwIDAgMSAwICAgICAgIDwtLVN0YW5kYXJkIFNldHRpbmdzCisjICAgICAgICAgICAgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8CisjICAgICAgICAgICAgICAgIHwgfCB8IEF1dG8gWE9OL1hPRkYgMC1PZmYgICB8IHwgfCBQb3dlciAwLTYwIEh6CisjICAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgMS1PbiAgICB8IHwgfCAgICAgICAxLTUwIEh6CisjICAgICAgICAgICAgICAgIHwgfCBBbnNpL1ZUNTIgMC1WVDUyICAgICAgICB8IHwgQml0cyBQZXIgQ2hhci4gMC03IEJpdHMKKyMgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAxLUFOU0kgICAgICAgIHwgfCAgICAgICAgICAgICAgICAxLTggQml0cworIyAgICAgICAgICAgICAgICB8IEtleWNsaWNrIDAtT2ZmICAgICAgICAgICAgfCBQYXJpdHkgMC1PZmYKKyMgICAgICAgICAgICAgICAgfCAgICAgICAgICAxLU9uICAgICAgICAgICAgIHwgICAgICAgIDEtT24KKyMgICAgICAgICAgICAgICAgTWFyZ2luIEJlbGwgMC1PZmYgICAgICAgICAgIFBhcml0eSBTZW5zZSAwLU9kZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLU9uICAgICAgICAgICAgICAgICAgICAgICAgIDEtRXZlbgorIworIyBUaGUgZm9sbG93aW5nIFNFVC1VUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJQU5TSV9NT0RFCUFVVE9fWE9OL1hPRkZfT04JTkVXTElORV9PRkYJODBfQ09MVU1OUworIwlXUkFQX0FST1VORF9PTiAgSlVNUF9TQ1JPTExfT0ZGCisjIE90aGVyIFNFVC1VUCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50czsgSSByZWNvbW1lbmQKKyMJQVVUT1JFUEVBVF9PTglCTE9DS19DVVJTT1IJTUFSR0lOX0JFTExfT0ZGICAgIFNISUZURURfM18jCisjIFVubGVzcyB5b3UgaGF2ZSBhIGdyYXBoaWNzIGFkZC1vbiBzdWNoIGFzIERpZ2l0YWwgRW5naW5lZXJpbmcncyBWVDY0MAorIyAoYW5kIGV2ZW4gdGhlbiwgd2hlbmV2ZXIgaXQgY2FuIGJlIGFycmFuZ2VkISkgeW91IHNob3VsZCBzZXQKKyMJSU5URVJMQUNFX09GRgorIworIyAodnQxMDA6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcsIGFsc28gPE9UYnM+LiAtLSBlc3IpCit2dDEwMHx2dDEwMC1hbXxkZWMgdnQxMDAgKHcvYWR2YW5jZWQgdmlkZW8pLAorCU9UYnMsIGFtLCBtYzVpLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sCisJY2xlYXI9XEVbSFxFW0okPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EkPDI+LCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBlbDE9XEVbMUskPDM+LAorCWVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBsZjE9cGYxLAorCWxmMj1wZjIsIGxmMz1wZjMsIGxmND1wZjQsIG1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJcmM9XEU4LCByZXY9XEVbN20kPDI+LCByaT1cRU0kPDU+LCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mj4sIHJtdWw9XEVbbSQ8Mj4sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDI+LAorCXNncjA9XEVbbVwwMTckPDI+LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20kPDI+LCBzbXVsPVxFWzRtJDwyPiwgdGJjPVxFWzNnLAorCXVzZT12dDEwMCtmbmtleXMsCit2dDEwMG5hbXx2dDEwMC1uYW18dnQxMDAgbm8gYXV0b21hcmdpbnMsCisJYW1ALCB4ZW5sQCwgdXNlPXZ0MTAwLWFtLAordnQxMDAtdmJ8ZGVjIHZ0MTAwICh3L2FkdmFuY2VkIHZpZGVvKSAmIG5vIGJlZXAsCisJYmVsQCwgZmxhc2g9XEVbPzVoXEVbPzVsLCB1c2U9dnQxMDAsCisKKyMgT3JkaW5hcnkgdnQxMDAgaW4gMTMyIGNvbHVtbiAoIndpZGUiKSBtb2RlLgordnQxMDAtd3x2dDEwMC13LWFtfGRlYyB2dDEwMCAxMzIgY29scyAody9hZHZhbmNlZCB2aWRlbyksCisJY29scyMxMzIsIGxpbmVzIzI0LAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/OGgsIHVzZT12dDEwMC1hbSwKK3Z0MTAwLXctbmFtfHZ0MTAwLW5hbS13fGRlYyB2dDEwMCAxMzIgY29scyAody9hZHZhbmNlZCB2aWRlbyBubyBhdXRvbWFyZ2luKSwKKwljb2xzIzEzMiwgbGluZXMjMTQsIHZ0QCwKKwlyczI9XEU+XEVbPzNoXEVbPzRsXEVbPzVsXEVbPzhoLCB1c2U9dnQxMDAtbmFtLAorCisjIHZ0MTAwIHdpdGggbm8gYWR2YW5jZWQgdmlkZW8uCit2dDEwMC1uYXZ8dnQxMDAgd2l0aG91dCBhZHZhbmNlZCB2aWRlbyBvcHRpb24sCisJeG1jIzEsCisJYmxpbmtALCBib2xkQCwgcmV2QCwgcm1zbz1cRVttLCBybXVsQCwgc2dyQCwgc2dyMEAsIHNtc289XEVbN20sCisJc211bEAsIHVzZT12dDEwMCwKK3Z0MTAwLW5hdi13fHZ0MTAwLXctbmF2fGRlYyB2dDEwMCAxMzIgY29scyAxNCBsaW5lcyAobm8gYWR2YW5jZWQgdmlkZW8gb3B0aW9uKSwKKwljb2xzIzEzMiwgbGluZXMjMTQsIHVzZT12dDEwMC1uYXYsCisKKyMgdnQxMDAgd2l0aCBvbmUgb2YgdGhlIDI0IGxpbmVzIHVzZWQgYXMgYSBzdGF0dXMgbGluZS4KKyMgV2UgcHV0IHRoZSBzdGF0dXMgbGluZSBvbiB0aGUgdG9wLgordnQxMDAtc3x2dDEwMC1zLXRvcHx2dDEwMC10b3Atc3x2dDEwMCBmb3IgdXNlIHdpdGggdG9wIHN5c2xpbmUsCisJZXNsb2ssIGhzLAorCWxpbmVzIzIzLAorCWNsZWFyPVxFWzI7MUhcRVtKJDw1MD4sIGNzcj1cRVslaSVpJXAxJWQ7JXAyJWRyLAorCWN1cD1cRVslaSVwMSV7MX0lKyVkOyVwMiVkSCQ8NT4sIGRzbD1cRTdcRVsxOzI0clxFOCwKKwlmc2w9XEU4LCBob21lPVxFWzI7MUgsIGlzMj1cRTdcRVsyOzI0clxFOCwKKwl0c2w9XEU3XEVbMTslcDElZEhcRVsxSywgdXNlPXZ0MTAwLWFtLAorCisjIFN0YXR1cyBsaW5lIGF0IGJvdHRvbS4KKyMgQ2xlYXJpbmcgdGhlIHNjcmVlbiB3aWxsIGNsb2JiZXIgc3RhdHVzIGxpbmUuCit2dDEwMC1zLWJvdHx2dDEwMC1ib3Qtc3x2dDEwMCBmb3IgdXNlIHdpdGggYm90dG9tIHN5c2xpbmUsCisJZXNsb2ssIGhzLAorCWxpbmVzIzIzLAorCWRzbD1cRTdcRVsxOzI0clxFOCwgZnNsPVxFOCwgaXMyPVxFWzE7MjNyXEVbMjM7MUgsCisJdHNsPVxFN1xFWzI0OyVwMSVkSFxFWzFLLCB1c2U9dnQxMDAtYW0sCisKKyMgTW9zdCBvZiB0aGUgYHZ0MTAwJyBlbXVsYXRvcnMgb3V0IHRoZXJlIGFjdHVhbGx5IGVtdWxhdGUgYSB2dDEwMgorIyBUaGlzIGVudHJ5IChvciB2dDEwMi1uc2dyKSBpcyBwcm9iYWJseSB0aGUgcmlnaHQgdGhpbmcgdG8gdXNlIGZvcgorIyB0aGVzZS4KK3Z0MTAyfGRlYyB2dDEwMiwKKwlkY2gxPVxFW1AsIGRsMT1cRVtNLCBpbDE9XEVbTCwgcm1pcj1cRVs0bCwgc21pcj1cRVs0aCwKKwl1c2U9dnQxMDAsCit2dDEwMi13fGRlYyB2dDEwMiBpbiB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJcnMzPVxFWz8zaCwgdXNlPXZ0MTAyLAorCisjIE1hbnkgYnJhaW4tZGVhZCBQQyBjb21tIHByb2dyYW1zIHRoYXQgcHJldGVuZCB0byBiZSBgdnQxMDAtY29tcGF0aWJsZScKKyMgZmFpbCB0byBpbnRlcnByZXQgdGhlIF5PIGFuZCBeTiBlc2NhcGVzIHByb3Blcmx5LiAgU3ltcHRvbTogdGhlIDxzZ3IwPgorIyBzdHJpbmcgaW4gdGhlIGNhbm9uaWNhbCB2dDEwMCBlbnRyeSBhYm92ZSBsZWF2ZXMgdGhlIHNjcmVlbiBsaXR0ZXJlZAorIyB3aXRoIGxpdHRsZSAgc25vd2ZsYWtlIG9yIHN0YXIgY2hhcmFjdGVycyAoSUJNIFBDIFJPTSBjaGFyYWN0ZXIgXDAxNyA9IF5PKQorIyBhZnRlciBoaWdobGlnaHQgdHVybm9mZnMuICBUaGlzIGVudHJ5IHNob3VsZCBmaXggdGhhdCwgYW5kIGV2ZW4gbGVhdmUKKyMgQUNTIHN1cHBvcnQgd29ya2luZywgYXQgdGhlIGNvc3Qgb2YgbWFraW5nIG11bHRpcGxlLWhpZ2hsaWdodCBjaGFuZ2VzCisjIHNsaWdodGx5IG1vcmUgZXhwZW5zaXZlLgorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gSnVseSAyMiAxOTk1Cit2dDEwMi1uc2dyfHZ0MTAyIG5vIHNnciAodXNlIGlmIHlvdSBzZWUgc25vd2ZsYWtlcyBhZnRlciBoaWdobGlnaHQgY2hhbmdlcyksCisJc2dyQCwgc2dyMD1cRVttLCB1c2U9dnQxMDIsCisKKyMgVlQxMjUgR3JhcGhpY3MgQ1JULiAgQ2xlYXIgc2NyZWVuIGFsc28gZXJhc2VzIGdyYXBoaWNzCisjIFNvbWUgdnQxMjUncyBjYW1lIGNvbmZpZ3VyZWQgd2l0aCB2dDEwMiBzdXBwb3J0LgordnQxMjV8dnQxMjUgZ3JhcGhpY3MgdGVybWluYWwsCisJbWlyLAorCWNsZWFyPVxFW0hcRVsySlxFUHBTKEUpXEVcXCQ8NTA+LCB1c2U9dnQxMDAsCisKKyMgVGhpcyBpc24ndCBhIERFQyBlbnRyeSwgaXQgY2FtZSBmcm9tIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luLgorIyAodnQxMzE6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcsIGFsc28gPE9UYnM+IC0tIGVzcikKK3Z0MTMxfGRlYyB2dDEzMSwKKwlPVGJzLCBhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyLz4sIGJvbGQ9XEVbMW0kPDIvPiwKKwljbGVhcj1cRVs7SFxFWzJKJDw1MC8+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQyQ8Mi8+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8NS8+LCBjdXUxPVxFW0EkPDIvPiwKKwllZD1cRVtKJDw1MC8+LCBlbD1cRVtLJDwzLz4sIGhvbWU9XEVbSCwgaHQ9XkksCisJaXMyPVxFWzE7MjRyXEVbMjQ7MUgsIGticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwKKwlrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLAorCWtmND1cRU9TLCBuZWw9Xk1eSiwgcmM9XEU4LCByZXY9XEVbN20kPDIvPiwgcmk9XEVNJDw1Lz4sCisJcm1hbT1cRVs/N2gsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20kPDIvPiwKKwlybXVsPVxFW20kPDIvPiwKKwlyczE9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyMD1cRVttJDwyLz4sIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwKKwlzbXNvPVxFWzdtJDwyLz4sIHNtdWw9XEVbNG0kPDIvPiwKKworIyB2dDEzMiAtIGxpa2UgdnQxMDAgYnV0IHNsb3dlciBhbmQgaGFzIGlucy9kZWwgbGluZSBhbmQgc3VjaC4KKyMgSSdtIHRvbGQgdGhhdCA8c21pcj4vPHJtaXI+IGFyZSBiYWNrd2FyZHMgaW4gdGhlIHRlcm1pbmFsIGZyb20gdGhlCisjIG1hbnVhbCBhbmQgZnJvbSB0aGUgQU5TSSBzdGFuZGFyZCwgdGhpcyBkZXNjcmliZXMgdGhlIGFjdHVhbAorIyB0ZXJtaW5hbC4gSSd2ZSBuZXZlciBhY3R1YWxseSB1c2VkIGEgdnQxMzIgbXlzZWxmLCBzbyB0aGlzCisjIGlzIHVudGVzdGVkLgorIwordnQxMzJ8REVDIHZ0MTMyLAorCXhlbmwsCisJZGNoMT1cRVtQJDw3PiwgZGwxPVxFW00kPDk5PiwgaWwxPVxFW0wkPDk5PiwgaW5kPVxuJDwzMD4sCisJaXA9JDw3Piwgcm1pcj1cRVs0aCwgc21pcj1cRVs0bCwgdXNlPXZ0MTAwLAorCisjIFRoaXMgdnQyMjAgZGVzY3JpcHRpb24gbWFwcyBGNS0tRjkgdG8gdGhlIHNlY29uZCBibG9jayBvZiBmdW5jdGlvbiBrZXlzCisjIGF0IHRoZSB0b3Agb2YgdGhlIGtleWJvYXJkLiAgVGhlICJETyIga2V5IGlzIHVzZWQgYXMgRjEwIHRvIGF2b2lkIGNvbmZsaWN0CisjIHdpdGggdGhlIGtleSBtYXJrZWQgKEVTQykgb24gdGhlIHZ0MjIwLiAgU2VlIHZ0MjIwZCBmb3IgYW4gYWx0ZXJuYXRlIG1hcHBpbmcuCisjIFBGMS0tUEY0IGFyZSB1c2VkIGFzIEYxLS1GNC4KKyMKK3Z0MjIwLW9sZHx2dDIwMC1vbGR8REVDIFZUMjIwIGluIHZ0MTAwIGVtdWxhdGlvbiBtb2RlLAorCU9UYnMsIE9UcHQsIGFtLCBtaXIsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdnQjMywKKwlPVG5sPV5KLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSQ8Mj4sIGJvbGQ9XEVbMW0kPDI+LCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVsySiQ8NTA+LCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MTA+LCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwKKwlkbDE9XEVbTSwgZWQ9XEVbSiQ8NTA+LCBlbD1cRVtLJDwzPiwgaG9tZT1cRVtILCBodD1eSSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWwxPVxFW0wsIGluZD1cRUQkPDIwLz4sCisJaXMyPVxFWzE7MjRyXEVbMjQ7MUgsIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YxPVxFT1AsCisJa2YxMD1cRVsyOX4sIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRVsxN34sCisJa2Y2PVxFWzE4fiwga2Y3PVxFWzE5fiwga2Y4PVxFWzIwfiwga2Y5PVxFWzIxfiwKKwlraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LCByYz1cRTgsCisJcmV2PVxFWzdtJDwyPiwgcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsCisJcmk9XEVNJDwxNC8+LCBybWFjcz1cRShCJDw0Piwgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOyQ8Mj4sCisJc2dyMD1cRVttJDwyPiwgc21hY3M9XEUoMCQ8Mj4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMgQSBtdWNoIGJldHRlciBkZXNjcmlwdGlvbiBvZiB0aGUgVlQyMDAvMjIwOyB1c2VkIHRvIGJlIHZ0MjIwLTgKKyMgY2hhbmdlZCBybWFjcy9zbWFjcyBmcm9tIHNoaWZ0LWluL3NoaWZ0LW91dCB0byB2dDIwMC1vbGQncyBleHBsaWNpdCBHMC9HMQorIyBkZXNpZ25hdGlvbiB0byBhY2NvbW1vZGF0ZSBidWcgaW4gcGN2dCAtVEQKK3Z0MjIwfHZ0MjAwfGRlYyB2dDIyMCwKKwlPVGJzLCBhbSwgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRSkwLAorCWZsYXNoPVxFWz81aCQ8MjAwLz5cRVs/NWwsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCwgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEVbPzdoXEVbPlxFWz8xaFxFIEZcRVs/NGwsIGticz1eSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVPUCwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sCisJa2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFT1EsCisJa2YyMD1cRVszNH4sIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwKKwlraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtyZG89XEVbMjl+LCBrc2x0PVxFWzR+LAorCWxmMT1wZjEsIGxmMj1wZjIsIGxmMz1wZjMsIGxmND1wZjQsIG1jMD1cRVtpLCBtYzQ9XEVbNGksCisJbWM1PVxFWzVpLCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtYWNzPVxFKEIkPDQ+LCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sIHJzMT1cRVs/M2wsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOyQ8Mj4sCisJc2dyMD1cRVttXEUoQiwgc21hY3M9XEUoMCQ8Mj4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKK3Z0MjIwLXd8dnQyMDAtd3xERUMgdnQyMjAgaW4gd2lkZSBtb2RlLAorCWNvbHMjMTMyLAorCXJzMz1cRVs/M2gsIHVzZT12dDIyMCwKK3Z0MjIwLThiaXR8dnQyMjAtOHx2dDIwMC04Yml0fHZ0MjAwLTh8ZGVjIHZ0MjIwLzIwMCBpbiA4LWJpdCBtb2RlLAorCU9UYnMsIGFtLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XDIzMzVtLCBib2xkPVwyMzMxbSwgY2xlYXI9XDIzM0hcMjMzSiwgY3I9Xk0sCisJY3NyPVwyMzMlaSVwMSVkOyVwMiVkciwgY3ViPVwyMzMlcDElZEQsIGN1YjE9XkgsCisJY3VkPVwyMzMlcDElZEIsIGN1ZDE9XkosIGN1Zj1cMjMzJXAxJWRDLCBjdWYxPVwyMzNDLAorCWN1cD1cMjMzJWklcDElZDslcDIlZEgsIGN1dT1cMjMzJXAxJWRBLCBjdXUxPVwyMzNBLAorCWRjaD1cMjMzJXAxJWRQLCBkY2gxPVwyMzNQLCBkbD1cMjMzJXAxJWRNLCBkbDE9XDIzM00sCisJZWNoPVwyMzMlcDElZFgsIGVkPVwyMzNKLCBlbD1cMjMzSywgZWwxPVwyMzMxSywgZW5hY3M9XEUpMCwKKwlmbGFzaD1cMjMzPzVoJDwyMDAvPlwyMzM/NWwsIGhvbWU9XDIzM0gsIGh0PV5JLCBodHM9XEVILAorCWljaD1cMjMzJXAxJWRALCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwKKwlpbD1cMjMzJXAxJWRMLCBpbDE9XDIzM0wsIGluZD1cRUQsCisJaXMyPVwyMzM/N2hcMjMzPlwyMzM/MWhcRSBGXDIzMz80bCwga2JzPV5ILAorCWtjdWIxPVwyMzNELCBrY3VkMT1cMjMzQiwga2N1ZjE9XDIzM0MsIGtjdXUxPVwyMzNBLAorCWtmMT1cRU9QLCBrZjEwPVwyMzMyMX4sIGtmMTE9XDIzMzIzfiwga2YxMj1cMjMzMjR+LAorCWtmMTM9XDIzMzI1fiwga2YxND1cMjMzMjZ+LCBrZjE3PVwyMzMzMX4sIGtmMTg9XDIzMzMyfiwKKwlrZjE5PVwyMzMzM34sIGtmMj1cRU9RLCBrZjIwPVwyMzMzNH4sIGtmMz1cRU9SLCBrZjQ9XEVPUywKKwlrZjY9XDIzMzE3fiwga2Y3PVwyMzMxOH4sIGtmOD1cMjMzMTl+LCBrZjk9XDIzMzIwfiwKKwlrZm5kPVwyMzMxfiwga2hscD1cMjMzMjh+LCBraG9tZT1cMjMzSCwga2ljaDE9XDIzMzJ+LAorCWtucD1cMjMzNn4sIGtwcD1cMjMzNX4sIGtyZG89XDIzMzI5fiwga3NsdD1cMjMzNH4sIGxmMT1wZjEsCisJbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwgbWMwPVwyMzNpLCBtYzQ9XDIzMzRpLCBtYzU9XDIzMzVpLAorCW5lbD1cRUUsIHJjPVxFOCwgcmV2PVwyMzM3bSwgcmk9XEVNLCBybWFjcz1cRShCLAorCXJtYW09XDIzMz83bCwgcm1pcj1cMjMzNGwsIHJtc289XDIzMzI3bSwgcm11bD1cMjMzMjRtLAorCXJzMT1cMjMzPzNsLCBzYz1cRTcsCisJc2dyPVwyMzMwJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVwyMzMwbVxFKEIsIHNtYWNzPVxFKDAsIHNtYW09XDIzMz83aCwgc21pcj1cMjMzNGgsCisJc21zbz1cMjMzN20sIHNtdWw9XDIzMzRtLCB0YmM9XDIzMzNnLAorCisjIHZ0MjIwZDoKKyMgVGhpcyB2dDIyMCBkZXNjcmlwdGlvbiByZWdhcmRzIEY2LS1GMTAgYXMgdGhlIHNlY29uZCBibG9jayBvZiBmdW5jdGlvbiBrZXlzCisjIGF0IHRoZSB0b3Agb2YgdGhlIGtleWJvYXJkLiAgVGhpcyBtYXBwaW5nIGZvbGxvd3MgdGhlIGRlc2NyaXB0aW9uIGdpdmVuCisjIGluIHRoZSBWVDIyMCBQcm9ncmFtbWVyIFJlZmVyZW5jZSBNYW51YWwgYW5kIGFncmVlcyB3aXRoIHRoZSBsYWJlbGluZworIyBvbiBzb21lIHRlcm1pbmFscyB0aGF0IGVtdWxhdGUgdGhlIHZ0MjIwLiAgVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgYW4gRjUuCisjIFNlZSB2dDIyMCBmb3IgYW4gYWx0ZXJuYXRlIG1hcHBpbmcuCisjCit2dDIyMGR8REVDIFZUMjIwIGluIHZ0MTAwIG1vZGUgd2l0aCBERUMgZnVuY3Rpb24ga2V5IGxhYmVsaW5nLAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LAorCWtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LAorCWtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyMD1cRVszNH4sIGtmNUAsIGtmNj1cRVsxN34sCisJa2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwgdXNlPXZ0MjIwLW9sZCwKKwordnQyMjAtbmFtfHYyMDAtbmFtfFZUMjIwIGluIHZ0MTAwIG1vZGUgd2l0aCBubyBhdXRvIG1hcmdpbnMsCisJYW1ALAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGgsIHVzZT12dDIyMCwKKworIyB2dDIyMCB0ZXJtY2FwIHdyaXR0ZW4gVHVlIE9jdCAyNSAyMDo0MToxMCAxOTg4IGJ5IEFsZXggTGF0emtvCisjIChub3QgYW4gb2ZmaWNpYWwgREVDIGVudHJ5ISkKKyMgVGhlIHByb2JsZW0gd2l0aCByZWFsIHZ0MjIwIHRlcm1pbmFscyBpcyB0aGV5IGRvbid0IHNlbmQgZXNjYXBlcyB3aGVuIGluCisjIGluIHZ0MjIwIG1vZGUuICBUaGlzIGNhbiBiZSBnb3R0ZW4gYXJvdW5kIHR3byB3YXlzLiAgMT4gZG9uJ3Qgc2VuZAorIyBlc2NhcGVzIG9yIDI+IHB1dCB0aGUgdnQyMjAgaW50byB2dDEwMCBtb2RlIGFuZCB1c2UgYWxsIHRoZSBuaWZ0eQorIyBmZWF0dXJlcyBvZiB2dDEwMCBhZHZhbmNlZCB2aWRlbyB3aGljaCBpdCB0aGVuIGhhcy4KKyMKKyMgVGhpcyBlbnRyeSB0YWtlcyB0aGUgdmlldyBvZiBwdXR0aW5nIGEgdnQyMjAgaW50byB2dDEwMCBtb2RlIHNvCisjIHlvdSBjYW4gdXNlIHRoZSBlc2NhcGUga2V5IGluIGVtYWNzIGFuZCBldmVyeXRoaW5nIGVsc2Ugd2hpY2ggbmVlZHMgaXQuCisjCisjIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIG9uIGEgVk1TIG1hY2hpbmUgc2luY2UgVk1TIHdpbGwgdGhpbmsKKyMgaXQgaGFzIGEgdnQyMjAgYW5kIHdpbGwgZ2V0IGZvdWxlZCB1cCBjb21pbmcgb3V0IG9mIGVtYWNzCisjCisjIEZyb206IEFsZXhhbmRlciBMYXR6a28gPGxhdHprb0BtYXJzZW5pdXMucnV0Z2Vycy5lZHU+LCAzMCBEZWMgMTk5NgorIyAoQWRkZWQgdnQxMDAgPHJjPiw8c2M+IHRvIHF1aWV0IGEgdGljIHdhcm5pbmcgLS0gZXNyKQordnQyMDAtanN8dnQyMjAtanN8ZGVjIHZ0MjAwIHNlcmllcyB3aXRoIGp1bXAgc2Nyb2xsLAorCWFtLAorCWNvbHMjODAsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwlkY2gxPVxFW1AsIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRVs2MSJwXEVbSFxFWz8zbFxFWz80bFxFWz8xbFxFWz81bFxFWz82bFxFWz83aFxFWz84aFxFWz8yNWhcRT5cRVttLAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgbmVsPV5NXEVELCByYz1cRTgsCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIHJpPVxFTSwgcm1kYz0sIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMjdtJDw1Lz4sIHJtdWw9XEVbMjRtLAorCXJzMT1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywgc21kYz0sCisJc21pcj1cRVs0aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20kPDUvPiwgc211bD1cRVs0bSwKKworIyBUaGlzIHdhcyBERUMncyB2dDMyMC4gIFVzZSB0aGUgcHVycG9zZS1idWlsdCBvbmUgYmVsb3cgaW5zdGVhZAorI3Z0MzIwfERFQyBWVDMyMCBpbiB2dDEwMCBlbXVsYXRpb24gbW9kZSwKKyMJdXNlPXZ0MjIwLAorCisjIFVzZSB2MzIwbiBmb3IgU0NPJ3MgTFlSSVguICBPdGhlcndpc2UsIHVzZSBBZGFtIFRob21wc29uJ3MgdnQzMjAtbmFtLgorIwordnQzMjBuYW18djMyMG58REVDIFZUMzIwIGluIHZ0MTAwIGVtdWwuIG1vZGUgd2l0aCBOTyBBVVRPIFdSQVAgbW9kZSwKKwlhbUAsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83bFxFWz84aCwgdXNlPXZ0MjIwLAorCisjIFRoZXNlIGVudHJpZXMgYXJlIG5vdCBERUMncyBvZmZpY2lhbCBvbmVzLCB0aGV5IHdlcmUgcHVycG9zZS1idWlsdCBmb3IgdGhlCisjIFZUMzIwLiAgSGVyZSBhcmUgdGhlIGRlc2lnbmVyJ3Mgbm90ZXM6CisjIDxrZWw+IGlzIGVuZCBvbiBhIFBDIGtiZC4gIEFjdHVhbGx5ICdzZWxlY3QnIG9uIGEgVlQuICBNYXBwZWQgdG8KKyMgJ0VyYXNlIHRvIEVuZCBvZiBGaWVsZCcuLi4gc2luY2Ugbm90aGluZyBzZWVtcyB0byB1c2UgJ2VuZCcgYW55d2F5cy4uLgorIyBraG9tZSBpcyBIb21lIG9uIGEgUEMga2JkLiAgQWN0dWFsbHkgJ0ZJTkQnIG9uIGEgVlQuCisjIFRoaW5ncyB0aGF0IHVzZSA8a254dD4gdXN1YWxseSB1c2UgdGFiIGFueXdheXMuLi4gYW5kIHRoaW5ncyB0aGF0IGRvbid0IHVzZQorIyB0YWIgdXN1YWxseSB1c2UgPGtueHQ+IGluc3RlYWQuLi4KKyMga3BydiBpcyBzYW1lIGFzIHRhYiAtIEJhY2t0YWIgaXMgdXNlbGVzcy4uLgorIyBJIGxlZnQgb3V0IDxzZ3I+IGJlY2F1c2Ugb2YgaXRzIFJJRElDVUxPVVMgY29tcGxleGl0eSwKKyMgYW5kIHRoZSByZXN1bHRpbmcgZmFjdCB0aGF0IGl0IGNhdXNlcyB0aGUgdGVybWNhcCB0cmFuc2xhdGlvbiBvZiB0aGUgZW50cnkKKyMgdG8gU01BU0ggdGhlIDFrLWJhcnJpZXIuLi4KKyMgRnJvbTogQWRhbSBUaG9tcHNvbiA8YXRob21wc29AcGFuZ2VhLmNhPiBTZXB0IDEwIDE5OTUKKyMgKHZ0MzIwOiB1bmNvbW1lbnRlZCA8ZnNsPiAtLWVzcikKK3Z0MzIwfHZ0MzAwfGRlYyB2dDMyMCA3IGJpdCB0ZXJtaW5hbCwKKwlhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGZzbD1cRVswJH0sCisJaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCWticz1cMTc3LCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtkY2gxPVxFWzN+LCBrZWw9XEVbNH4sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjIwPVxFWzM0fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwKKwlrZjk9XEVbMjB+LCBraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga254dD1eSSwKKwlrcHA9XEVbNX4sIGtwcnY9XEVbWiwga3NsdD1cRVs0fiwgbWMwPVxFW2ksIG1jND1cRVs/NGksCisJbWM1PVxFWz81aSwgbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIHJpPVxFTSwgcm1hY3M9XEUoQiwKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwKKwlybXVsPVxFW20sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXRzbD1cRVsxJH1cRVtIXEVbSywgdXNlPXZ0MjIwK2tleXBhZCwKK3Z0MzIwLW5hbXx2dDMwMC1uYW18ZGVjIHZ0MzIwIDcgYml0IHRlcm1pbmFsIHdpdGggbm8gYW0gdG8gbWFrZSBTQVMgaGFwcHksCisJYW1ALAorCWlzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCXVzZT12dDMyMCwKKyMgV2UgaGF2ZSB0byBpbml0IDEzMi1jb2wgbW9kZSwgbm90IDgwLWNvbCBtb2RlLgordnQzMjAtd3x2dDMwMC13fGRlYyB2dDMyMCB3aWRlIDcgYml0IHRlcm1pbmFsLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCXVzZT12dDMyMCwKK3Z0MzIwLXctbmFtfHZ0MzAwLXctbmFtfGRlYyB2dDMyMCB3aWRlIDcgYml0IHRlcm1pbmFsIHdpdGggbm8gYW0sCisJYW1ALAorCWlzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCXVzZT12dDMyMC13LAorCisjIFZUMzMwIGFuZCBWVDM0MCAtLSBUaGVzZSBhcmUgUmVHSVMgYW5kIFNJWEVMIGdyYXBoaWNzIHRlcm1pbmFscworIyAgIHdoaWNoIGFyZSBwcmV0dHkgbXVjaCBhIHN1cGVyc2V0IG9mIHRoZSBWVDMyMC4gIFRoZXkgaGF2ZSB0aGUKKyMgICBob3N0IHdyaXRhYmxlIHN0YXR1cyBsaW5lLCB5ZXQgYW5vdGhlciBkaWZmZXJlbnQgRFJDUyBtYXRyaXggc2l6ZSwKKyMgICBhbmQgc3VjaCwgYnV0IHRoZXkgYWRkIHRoZSBERUMgVGVjaG5pY2FsIGNoYXJhY3RlciBzZXQsIE11bHRpcGxlIHRleHQKKyMgICBwYWdlcywgc2VsZWN0YWJsZSBsZW5ndGggcGFnZXMsIGFuZCB0aGUgbGlrZS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyMgICB0aGUgdnQzMzAgYW5kIHZ0MzQwIGlzIHRoYXQgdGhlIGxhdHRlciBoYXMgb25seSAyIHBsYW5lcyBhbmQgYSBtb25vY2hyb21lCisjICAgbW9uaXRvciwgdGhlIGZvcm1lciBoYXMgNCBwbGFuZXMgYW5kIGEgY29sb3IgbW9uaXRvci4gIFRoZXNlIHRlcm1pbmFscworIyAgIHN1cHBvcnQgVlQxMzEgYW5kIEFOU0kgYmxvY2sgbW9kZSwgYnV0IGFzIHdpdGggbXVjaCBvZiB0aGVzZSB0aGluZ3MsCisjICAgdGVybWNhcC90ZXJtaW5mbyBkb2Vzbid0IGRlYWwgd2l0aCB0aGVzZSBmZWF0dXJlcy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgZW50cnkgaXMgYXJlIHNldCB1cCBpbiB3aGF0IHdhcyB0aGUgc3RhbmRhcmQgd2F5IGZvciBHTlUKKyMgRW1hY3MgdjE4IHRlcm1pbmFsIG1vZGVzIHRvIGRlYWwgd2l0aCB0aGUgY3Vyc29yIGtleXMgaW4gdGhhdCB0aGUgYXJyb3cKKyMga2V5cyB3ZXJlIHN3aXRjaGVkIGludG8gYXBwbGljYXRpb24gbW9kZSBhdCB0aGUgc2FtZSB0aW1lIHRoZSBudW1lcmljIHBhZAorIyBpcyBzd2l0Y2hlZCBpbnRvIGFwcGxpY2F0aW9uIG1vZGUuICBUaGlzIGNoYW5nZXMgdGhlIGRlZmluaXRpb25zIG9mIHRoZQorIyBhcnJvdyBrZXlzLiAgRW1hY3MgdjE5IGlzIHNtYXJ0ZXIgYW5kIG1pbmVzIGl0cyBrZXlzIGRpcmVjdGx5IG91dCBvZgorIyB5b3VyIHRlcm1jYXAgb3IgdGVybWluZm8gZW50cnksCisjCisjIEZyb206IERhbmllbCBHbGFzc2VyIDxkYWdAcGVyc29mdC5wZXJzb2Z0LmNvbT4sIDEzIE9jdCAxOTkzCisjICh2dDM0MDogc3RyaW5nIGNhcGFiaWxpdHkgInNiPVxFW00iIGNvcnJlY3RlZCB0byAic3IiOworIyBhbHNvLCBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCit2dDM0MHxkZWMtdnQzNDB8dnQzMzB8ZGVjLXZ0MzMwfGRlYyB2dDM0MCBncmFwaGljcyB0ZXJtaW5hbCB3aXRoIDI0IGxpbmUgcGFnZSwKKwlhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLCBjbGVhcj1cRVtIXEVbSiwKKwljbm9ybT1cRVs/MjVoLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZHNsPVxFWzIkflxyXEVbMSR9XEVbS1xFWyR9LAorCWVkPVxFW0osIGVsPVxFW0ssIGZsYXNoPVxFWz81aFxFWz81bCQ8MjAwLz4sIGZzbD1cRVskfSwKKwlob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFPFxFIEZcRT5cRVs/MWhcRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y2PVxFWzE3fiwKKwlrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBsZjE9cGYxLCBsZjI9cGYyLAorCWxmMz1wZjMsIGxmND1wZjQsIG5lbD1eTVxFRCwgcmM9XEU4LCByZXY9XEVbN20sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIHJpPVxFTSwgcm1hY3M9XEUoQiwKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMjdtLAorCXJtdWw9XEVbMjRtLCByczE9XEVbPzNsLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTskPDI+LAorCXNncjA9XEVbbVxFKEIsIHNtYWNzPVxFKDAsIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdHNsPVxFWzIkflxFWzEkfVxFWzE7JWRILAorCisjIERFQyBkb2Vzbid0IHN1cHBseSBhIHZ0NDAwIGRlc2NyaXB0aW9uLCBzbyB3ZSBhZGQgRGFuaWVsIEdsYXNzZXIncworIyAob3JpZ2luYWxseSB3cml0dGVuIHdpdGggdnQ0MjAgYXMgaXRzIHByaW1hcnkgbmFtZSwgYW5kIHVzYWJsZSBmb3IgaXQpLgorIworIyBWVDQwMC80MjAgLS0gVGhpcyB0ZXJtaW5hbCBpcyBhIHN1cGVyc2V0IG9mIHRoZSB2dDMyMC4gIEl0IGFkZHMgdGhlIG11bHRpcGxlCisjICAgIHRleHQgcGFnZXMgYW5kIGxvbmcgdGV4dCBwYWdlcyB3aXRoIHNlbGVjdGFibGUgbGVuZ3RoIG9mIHRoZSB2dDM0MCwgYWxvbmcKKyMgICAgd2l0aCBsZWZ0IGFuZCByaWdodCBtYXJnaW5zLCByZWN0YW5ndWxhciBhcmVhIHRleHQgY29weSwgZmlsbCwgYW5kIGVyYXNlCisjICAgIG9wZXJhdGlvbnMsIHNlbGVjdGVkIHJlZ2lvbiBjaGFyYWN0ZXIgYXR0cmlidXRlIGNoYW5nZSBvcGVyYXRpb25zLAorIyAgICBwYWdlIG1lbW9yeSBhbmQgcmVjdGFuZ2xlIGNoZWNrc3VtcywgaW5zZXJ0L2RlbGV0ZSBjb2x1bW4sIHJlY2VwdGlvbgorIyAgICBtYWNyb3MsIGFuZCBvdGhlciBmZWF0dXJlcyB0b28gbnVtZXJvdXMgdG8gcmVtZW1iZXIgcmlnaHQgbm93LiAgVEVSTUNBUAorIyAgICBjYW4gb25seSB0YWtlIGFkdmFudGFnZSBvZiBhIGZldyBvZiB0aGVzZSBhZGRlZCBmZWF0dXJlcy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgZW50cnkgaXMgYXJlIHNldCB1cCBpbiB3aGF0IHdhcyB0aGUgc3RhbmRhcmQgd2F5IGZvciBHTlUKKyMgRW1hY3MgdjE4IHRlcm1pbmFsIG1vZGVzIHRvIGRlYWwgd2l0aCB0aGUgY3Vyc29yIGtleXMgaW4gdGhhdCB0aGUgYXJyb3cKKyMga2V5cyB3ZXJlIHN3aXRjaGVkIGludG8gYXBwbGljYXRpb24gbW9kZSBhdCB0aGUgc2FtZSB0aW1lIHRoZSBudW1lcmljIHBhZAorIyBpcyBzd2l0Y2hlZCBpbnRvIGFwcGxpY2F0aW9uIG1vZGUuICBUaGlzIGNoYW5nZXMgdGhlIGRlZmluaXRpb25zIG9mIHRoZQorIyBhcnJvdyBrZXlzLiAgRW1hY3MgdjE5IGlzIHNtYXJ0ZXIgYW5kIG1pbmVzIGl0cyBrZXlzIGRpcmVjdGx5IG91dCBvZgorIyB5b3VyIHRlcm1jYXAgZW50cnksCisjCisjIEZyb206IERhbmllbCBHbGFzc2VyIDxkYWdAcGVyc29mdC5wZXJzb2Z0LmNvbT4sIDEzIE9jdCAxOTkzCisjICh2dDQwMDogc3RyaW5nIGNhcGFiaWxpdHkgIjpzYj1cRVtNOiIgY29ycmVjdGVkIHRvICI6c3I9XEVbTToiOworIyBhbHNvLCBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCit2dDQwMHx2dDQwMC0yNHxkZWMtdnQ0MDB8ZGVjIHZ0NDAwIDI0eDgwIGNvbHVtbiBhdXRvd3JhcCwKKwlhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDwxMC8+LCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwlkc2w9XEVbMiR+XHJcRVsxJH1cRVtLXEVbJH0sIGVkPVxFW0okPDEwLz4sCisJZWw9XEVbSyQ8NC8+LCBmbGFzaD1cRVs/NWhcRVs/NWwkPDIwMC8+LCBmc2w9XEVbJH0sCisJaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFPFxFIEZcRT5cRVs/MWhcRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y2PVxFWzE3fiwKKwlrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBsZjE9cGYxLCBsZjI9cGYyLAorCWxmMz1wZjMsIGxmND1wZjQsIG5lbD1eTVxFRCwgcmM9XEU4LCByZXY9XEVbN20sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIHJpPVxFTSwgcm1hY3M9XEUoQiwKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMjdtLAorCXJtdWw9XEVbMjRtLCByczE9XEU8XEVbPzNsXEVbIXBcRVs/N2gsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOyQ8Mj4sCisJc2dyMD1cRVttXEUoQiwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbMiR+XEVbMSR9XEVbMTslZEgsCisKKyMgKHZ0NDIwOiBJIHJlbW92ZWQgPGtmMD4sIGl0IGNvbGxpZGVkIHdpdGggPGtmMTA+LiAgSSBhbHNvIHJlc3RvcmVkCisjIGEgbWlzc2luZyA8c2M+IC0tIGVzcikKK3Z0NDIwfERFQyBWVDQyMCwKKwlhbSwgbWlyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxMD4sIGN1dTE9XEVbQSwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBob21lPVxFW0gsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MzAwLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEVbMTsyNHJcRVsyNDsxSCwgaXMzPVxFWz82N2hcRVs2NDsxInAsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzN+LCBrZjE9XEVPUCwga2YxMD1cRVsyOX4sIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2Y1PVxFWzE3fiwga2Y2PVxFWzE4fiwga2Y3PVxFWzE5fiwga2Y4PVxFWzIwfiwKKwlrZjk9XEVbMjF+LCBrZm5kPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NsdD1cRVs0fiwgcmM9XEU4LCByZXY9XEVbN20kPDI+LAorCXJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MzAwLCByaT1cRU0sIHJtYWNzPVxFKEIkPDQ+LAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFPiwKKwlybXNjPVxFWz8wOzByXEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczM9XEVbPzY3aFxFWzY0OzEicCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW20kPDI+LCBzbWFjcz1cRSgwJDwyPiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMgREVDIFZUMjIwIGFuZCB1cCBzdXBwb3J0IERFQ1VESyAodXNlci1kZWZpbmVkIGtleXMpLiAgREVDVURLIChpLmUuLCBwZngpCisjIHRha2VzIHR3byBwYXJhbWV0ZXJzLCB0aGUga2V5IGFuZCB0aGUgc3RyaW5nLiAgVHJhbnNsYXRpbmcgdGhlIGtleSBpcworIyBzdHJhaWdodGZvcndhcmQgKGtleXMgMS01IGFyZSBub3QgZGVmaW5lZCBvbiByZWFsIHRlcm1pbmFscywgdGhvdWdoIHNvbWUKKyMgZW11bGF0b3JzIGRlZmluZSB0aGVzZSk6CisjCisjICAgICAgICAgICAgICAgaWYgKGtleSA8IDE2KSB0aGVuICB2YWx1ZSA9IGtleTsKKyMgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPCAyMSkgdGhlbiB2YWx1ZSA9IGtleSArIDE7CisjICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5IDwgMjUpIHRoZW4gdmFsdWUgPSBrZXkgKyAyOworIyAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA8IDI3KSB0aGVuIHZhbHVlID0ga2V5ICsgMzsKKyMgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPCAzMCkgdGhlbiB2YWx1ZSA9IGtleSArIDQ7CisjICAgICAgICAgICAgICAgZWxzZSB2YWx1ZSA9IGtleSArIDU7CisjCisjIFRoZSBzdHJpbmcgbXVzdCBiZSB0aGUgaGV4YWRlY2ltYWwgZXF1aXZhbGVudCwgZS5nLiwgIjUwNTI0OTRFIiBmb3IgIlBSSU5UIi4KKyMgVGhlcmUncyBubyBwcm92aXNpb24gaW4gdGVybWluZm8gZm9yIGVtaXR0aW5nIGEgc3RyaW5nIGluIHRoaXMgZm9ybWF0LCBzbyB0aGUKKyMgYXBwbGljYXRpb24gaGFzIHRvIGtub3cgaXQuCisjCit2dDQyMHBjfERFQyBWVDQyMCB3L1BDIGtleWJvYXJkLAorCWtkY2gxPVwxNzcsIGtlbmQ9XEVbNH4sIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsxMTsyfiwga2YxND1cRVsxMjsyfiwKKwlrZjE1PVxFWzEzOzJ+LCBrZjE2PVxFWzE0OzJ+LCBrZjE3PVxFWzE1OzJ+LAorCWtmMTg9XEVbMTc7Mn4sIGtmMTk9XEVbMTg7Mn4sIGtmMj1cRVsxMn4sIGtmMjA9XEVbMTk7Mn4sCisJa2YyMT1cRVsyMDsyfiwga2YyMj1cRVsyMTsyfiwga2YyMz1cRVsyMzsyfiwKKwlrZjI0PVxFWzI0OzJ+LCBrZjI1PVxFWzIzfiwga2YyNj1cRVsyNH4sIGtmMjc9XEVbMjV+LAorCWtmMjg9XEVbMjZ+LCBrZjI5PVxFWzI4fiwga2YzPVxFWzEzfiwga2YzMD1cRVsyOX4sCisJa2YzMT1cRVszMX4sIGtmMzI9XEVbMzJ+LCBrZjMzPVxFWzMzfiwga2YzND1cRVszNH4sCisJa2YzNT1cRVszNX4sIGtmMzY9XEVbMzZ+LCBrZjM3PVxFWzIzOzJ+LCBrZjM4PVxFWzI0OzJ+LAorCWtmMzk9XEVbMjU7Mn4sIGtmND1cRVsxNH4sIGtmNDA9XEVbMjY7Mn4sIGtmNDE9XEVbMjg7Mn4sCisJa2Y0Mj1cRVsyOTsyfiwga2Y0Mz1cRVszMTsyfiwga2Y0ND1cRVszMjsyfiwKKwlrZjQ1PVxFWzMzOzJ+LCBrZjQ2PVxFWzM0OzJ+LCBrZjQ3PVxFWzM1OzJ+LAorCWtmNDg9XEVbMzY7Mn4sIGtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2hvbWU9XEVbSCwKKwlwY3RybT1VU1JfVEVSTVw6dnQ0MjBwY2Rvc1w6LAorCXBmeD1cRVAxOzF8JT8lezE2fSVwMSU+JXQlezB9JWUlezIxfSVwMSU+JXQlezF9JWUlezI1fSVwMSU+JXQlezJ9JWUlezI3fSVwMSU+JXQlezN9JWUlezMwfSVwMSU+JXQlezR9JWUlezV9JTslcDElKyVkLyVwMiVzXEVcXCwKKwl1c2U9dnQ0MjAsCisKK3Z0NDIwcGNkb3N8REVDIFZUNDIwIHcvUEMgZm9yIERPUyBNZXJnZSwKKwlsaW5lcyMyNSwKKwlkaXNwYz0lPyVwMSV7MTl9JT0ldFxFXDAyM1wwMjElZSVwMSV7MzJ9JTwldFxFJXAxJWMlZSVwMSV7MTI3fSU9JXRcRVwxNzclZSVwMSVjJTssCisJcGN0cm1ALAorCXJtc2M9XEVbPzA7MHJcRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNnckAsCisJc2dyMD1cRVttLCBzbXNjPVxFWz8xOzJyXEVbMzRoLCB1c2U9dnQ0MjBwYywKKwordnQ0MjBmfERFQyBWVDQyMCB3aXRoIFZUIGtiZDsgVlQ0MDAgbW9kZTsgRjEtRjUgdXNlZCBhcyBGa2V5cywKKwlrZGNoMT1cMTc3LCBrZjE9XEVbMTF+LCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sCisJa2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sCisJa2YyPVxFWzEyfiwga2YyMD1cRVszNH4sIGtmMz1cRVsxM34sIGtmND1cRVsxNH4sCisJa2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlraG9tZT1cRVtILCBsZjE9XEVPUCwgbGYyPVxFT1EsIGxmMz1cRU9SLCBsZjQ9XEVPUywKKwl1c2U9dnQ0MjAsCisKK3Z0NTEwfERFQyBWVDUxMCwKKwl1c2U9dnQ0MjAsCit2dDUxMHBjfERFQyBWVDUxMCB3L1BDIGtleWJvYXJkLAorCXVzZT12dDQyMHBjLAordnQ1MTBwY2Rvc3xERUMgVlQ1MTAgdy9QQyBmb3IgRE9TIE1lcmdlLAorCXVzZT12dDQyMHBjZG9zLAorCisjIFZUNTIwL1ZUNTI1CisjCisjIFRoZSBWVDUyMCBpcyBhIG1vbm9jaHJvbWUgdGV4dCB0ZXJtaW5hbCBjYXBhYmxlIG9mIG1hbmFnaW5nIHVwIHRvCisjIGZvdXIgaW5kZXBlbmRlbnQgc2Vzc2lvbnMgaW4gdGhlIHRlcm1pbmFsLiAgSXQgaGFzIG11bHRpcGxlIEFOU0kKKyMgZW11bGF0aW9ucyAoVlQ1MjAsIFZUNDIwLCBWVDMyMCwgVlQyMjAsIFZUMTAwLCBWVCBQQ1Rlcm0sIFNDTyBDb25zb2xlKQorIyBhbmQgQVNDSUkgZW11bGF0aW9ucyAoV1kxNjAvNjAsIFBDVGVybSwgNTAvNTArLCAxNTAvMTIwLCBUVkkgOTUwLAorIyA5MjUgOTEwKywgQUREUyBBMikuICBUaGlzIHRlcm1pbmZvIGRhdGEgaXMgZm9yIHRoZSBBTlNJIGVtdWxhdGlvbnMgb25seS4KKyMKKyMgVGVybWluYWwgU2V0LVVwIGlzIGVudGVyZWQgYnkgcHJlc3NpbmcgW0YzXSwgW0NhcHMgTG9ja10vW0YzXSBvcgorIyBbQWx0XS9bUHJpbnQgU2NyZWVuXSBkZXBlbmRpbmcgdXBvbiB3aGljaCBrZXlib2FyZCBhbmQgd2hpY2gKKyMgdGVybWluYWwgbW9kZSBpcyBiZWluZyB1c2VkLiAgSWYgU2V0LVVwIGhhcyBiZWVuIGRpc2FibGVkIG9yCisjIGFzc2lnbmVkIHRvIGFuIHVua25vd24ga2V5LCBTZXQtVXAgbWF5IGJlIGVudGVyZWQgYnkgcHJlc3NpbmcKKyMgW0YzXSBhcyB0aGUgZmlyc3Qga2V5IGFmdGVyIHBvd2VyIHVwLCByZWdhcmRsZXNzIG9mIGtleWJvYXJkIHR5cGUuCisjICh2dDUyMDogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZywgYWxzbyA8c2M+IC0tIGVzcikKK3Z0NTIwfERFQyBWVDUyMCwKKwlhbSwgbWlyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxMD4sIGN1dTE9XEVbQSwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBob21lPVxFW0gsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MzAwLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEVbMTsyNHJcRVsyNDsxSCwgaXMzPVxFWz82N2hcRVs2NDsxInAsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzN+LCBrZjE9XEVPUCwga2YxMD1cRVsyOX4sIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2Y1PVxFWzE3fiwga2Y2PVxFWzE4fiwga2Y3PVxFWzE5fiwga2Y4PVxFWzIwfiwKKwlrZjk9XEVbMjF+LCBrZm5kPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NsdD1cRVs0fiwKKwlwZng9XEVQMTsxfCU/JXsxNn0lcDElPiV0JXswfSVlJXsyMX0lcDElPiV0JXsxfSVlJXsyNX0lcDElPiV0JXsyfSVlJXsyN30lcDElPiV0JXszfSVlJXszMH0lcDElPiV0JXs0fSVlJXs1fSU7JXAxJSslZC8lcDIlc1xFXFwsCisJcmM9XEU4LCByZXY9XEVbN20kPDI+LCByZj0vdXNyL3NoYXJlL3RhYnNldC92dDMwMCwKKwlyaT1cRU0sIHJtYWNzPVxFKEIkPDQ+LCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybXNjPVxFWz8wOzByXEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczM9XEVbPzY3aFxFWzY0OzEicCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW20kPDI+LCBzbWFjcz1cRSgwJDwyPiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyAodnQ1MjU6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmc7CisjIHJlbW92ZWQgPHJtc28+PVxFW20sIDxybXVsPj1cRVttLCBhZGRlZCA8c2M+IC0tIGVzcikKK3Z0NTI1fERFQyBWVDUyNSwKKwlhbSwgbWlyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxMD4sIGN1dTE9XEVbQSwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBob21lPVxFW0gsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MzAwLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEVbMTsyNHJcRVsyNDsxSCwgaXMzPVxFWz82N2hcRVs2NDsxInAsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzN+LCBrZjE9XEVPUCwga2YxMD1cRVsyOX4sIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2Y1PVxFWzE3fiwga2Y2PVxFWzE4fiwga2Y3PVxFWzE5fiwga2Y4PVxFWzIwfiwKKwlrZjk9XEVbMjF+LCBrZm5kPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NsdD1cRVs0fiwKKwlwZng9XEVQMTsxfCU/JXsxNn0lcDElPiV0JXswfSVlJXsyMX0lcDElPiV0JXsxfSVlJXsyNX0lcDElPiV0JXsyfSVlJXsyN30lcDElPiV0JXszfSVlJXszMH0lcDElPiV0JXs0fSVlJXs1fSU7JXAxJSslZC8lcDIlc1xFXFwsCisJcmM9XEU4LCByZXY9XEVbN20kPDI+LCByZj0vdXNyL3NoYXJlL3RhYnNldC92dDMwMCwKKwlyaT1cRU0sIHJtYWNzPVxFKEIkPDQ+LCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybXNjPVxFWz8wOzByXEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczM9XEVbPzY3aFxFWzY0OzEicCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW20kPDI+LCBzbWFjcz1cRSgwJDwyPiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyMjIyBWVDEwMCBlbXVsYXRpb25zCisjCisKKyMgSm9obiBIYXdraW5zb24gPGpoYXdrQE1JVC5FRFU+IHRlbGxzIHVzIHRoYXQgdGhlIEVXQU4gdGVsbmV0IGZvciBXaW5kb3dzCisjICh0aGUgYmVzdCBXaW5kb3dzIHRlbG5ldCBhcyBvZiBTZXB0ZW1iZXIgMTk5NSkgcHJlc2VudHMgdGhlIG5hbWUgYGRlYy12dDEwMCcKKyMgdG8gdGVsbmV0ZC4gICBNaWNoYWVsIERldXRzY2htYW5uIDxsZGV1dHNjaEBtYWlsLm5ldHNob3AubmV0PiBpbmZvcm1zIHVzCisjIHRoYXQgdGhpcyB3b3JrcyBiZXN0IHdpdGggYSBzdG9jayB2dDEwMCBlbnRyeS4KK2RlYy12dDEwMHxFV0FOIHRlbG5ldCdzIHZ0MTAwIGVtdWxhdGlvbiwKKwl1c2U9dnQxMDAsCisKKyMgRnJvbTogQWRyaWFuIEdhcnNpZGUgPDk0YWpnMkBlbmcuY2FtLmFjLnVrPiwgMTkgTm92IDE5OTYKK2RlYy12dDIyMHxET1MgdG52dDIwMCB0ZXJtaW5hbCBlbXVsYXRvciwKKwlhbUAsIHVzZT12dDIyMCwKKworIyBac3RlbTM0MCBpcyBhbiAoSU1ITykgZXhjZWxsZW50IFZUIGVtdWxhdG9yIGZvciBQQydzLiAgSSByZWNvbW1lbmQgaXQgdG8KKyMgYW55b25lIHdobyBuZWVkcyBQQyBWVDM0MCBlbXVsYXRpb24uIChvciBhbnl0aGluZyBiZWxvdyB0aGF0IGxldmVsLCBmb3IKKyMgdGhhdCBtYXR0ZXIgLS0gREVDJ3MgQUxMLWluLTEgc2VlbXMgaGFwcHkgd2l0aCBpdCwgYXMgZG9lcyBJTkZPUExVUydzCisjIFJEQk0gc3lzdGVtcywgaXQgaW5jbHVkZXMgUmVHSVMgYW5kIFNpWGVsIHN1cHBvcnQhICBJJ20gaW1wcmVzc2VkLi4uCisjIEkgY2FuIHNlbmQgdGhlIGFkZHJlc3MgaWYgcmVxdWVzdGVkLgorIyAoejM0MDogY2hhbmdlZCBnYXJibGVkIFxFWzU/bCB0byBcRVs/NWwsIERFQyBzbW9vdGggc2Nyb2xsIG9mZiAtLSBlc3IpCisjIEZyb206IEFkYW0gVGhvbXBzb24gPGF0aG9tcHNvQHBhbmdlYS5jYT4gU2VwdCAxMCAxOTk1Cit6MzQwfHpzdGVtIHZ0MzQwIHRlcm1pbmFsIGVtdWxhdG9yIDEzMmNvbCA0MmxpbmUsCisJbGluZXMjNDIsCisJaXMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7NDJyXEVbNDI7MUgsCisJcnMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7NDJyXEVbNDI7MUgsCisJdXNlPXZ0MzIwLXcsCit6MzQwLW5hbXx6c3RlbSB2dDM0MCB0ZXJtaW5hbCBlbXVsYXRvciAxMzJjb2wgNDJsaW5lIChubyBhdXRvbWF0aWMgbWFyZ2lucyksCisJYW1ALAorCWlzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGhcRVsxOzQyclxFWzQyOzFILAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2xcRVs/OGhcRVsxOzQyclxFWzQyOzFILAorCXVzZT16MzQwLAorCisjIENSVCBpcyBzaGFyZXdhcmUuICBJdCBpbXBsZW1lbnRzIHNvbWUgeHRlcm0gZmVhdHVyZXMsIGluY2x1ZGluZyBtb3VzZS4KK2NydHxjcnQtdnQyMjB8Q1JUIDIuMyBlbXVsYXRpbmcgVlQyMjAsCisJYmNlLCBtc2dyLAorCW5jdkAsCisJaHRzPVxFSCwgdXNlPXZ0MTAwK2VucSwgdXNlPXZ0MjIwLCB1c2U9ZWNtYStjb2xvciwKKworIyBQdVRUWSAwLjU1IChyZWxlYXNlZCAzIEF1Z3VzdCAyMDA0KQorIyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL3B1dHR5LworIworIyBDb21wYXJpbmcgd2l0aCAwLjUxLCB2dHRlc3QgaXMgbXVjaCBiZXR0ZXIgKG9ubHkgYSBmZXcgcHJvYmxlbXMgd2l0aCB0aGUKKyMgY3Vyc29yIHBvc2l0aW9uIHJlcG9ydHMgYW5kIHdyYXBwaW5nKS4KKyMKKyMgUHVUVFkgMC41MSAocmVsZWFzZWQgMTQgRGVjZW1iZXIgMjAwMCkKKyMKKyMgVGhpcyBlbXVsYXRlcyB2dDEwMCArIHZ0NTIgKHBsdXMgYSBmZXcgdnQyMjAgZmVhdHVyZXM6ICBlY2gsIFNSTSwgREVDVENFTSwgYXMKKyMgd2VsbCBhcyBTQ08gYW5kIEF0YXJpLCBjb2xvciBwYWxldHRlcyBmcm9tIExpbnV4IGNvbnNvbGUpLiAgUmVhZGluZyB0aGUgY29kZSwKKyMgaXQgaXMgaW50ZW5kZWQgdG8gYmUgVlQxMDIgcGx1cyBzZWxlY3RlZCBmZWF0dXJlcy4gIEJ5IGRlZmF1bHQsIGl0IHNldHMgJFRFUk0KKyMgdG8geHRlcm0sIHdoaWNoIGlzIGluY29ycmVjdCwgc2luY2Ugc2V2ZXJhbCBmZWF0dXJlcyBhcmUgbWlzaW1wbGVtZW50ZWQ6CisjCisjCUFsdCtrZXkgYWx3YXlzIHNlbmRzIEVTQytrZXksIHNvICdrbScgY2FwYWJpbGl0eSBpcyByZW1vdmVkLgorIworIwlDb250cm9sIHJlc3BvbnNlcywgd3JhcHBpbmcgYW5kIHRhYnMgYXJlIGJ1Z2d5LCBmYWlsaW5nIGEgY291cGxlIG9mCisjCXNjcmVlbnMgaW4gdnR0ZXN0LgorIworIwl4dGVybSBtb3VzZSBzdXBwb3J0IGlzIG5vdCBpbXBsZW1lbnRlZCAodW5yZWxlYXNlIHZlcnNpb24gbWF5KS4KKyMKKyMgU2V2ZXJhbCBmZWF0dXJlcyBzdWNoIGFzIGJhY2tzcGFjZS9kZWxldGUgYXJlIG9wdGlvbmFsOyB0aGlzIGVudHJ5IGRvY3VtZW50cworIyB0aGUgZGVmYXVsdCBiZWhhdmlvciAtVEQKKworcHV0dHl8UHVUVFkgdGVybWluYWwgZW11bGF0b3IsCisJYW0sIGJjZSwgYncsIGNjYywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbG9ycyM4LCBpdCM4LCBuY3YjMjIsIHBhaXJzIzY0LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFRCwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRpc3BjPSU/JXAxJXs4fSU9JXRcRSUlR1wzNDJcMjI3XDIzMFxFJSVAJWUlcDElezEwfSU9JXRcRSUlR1wzNDJcMjI3XDIzMVxFJSVAJWUlcDElezEyfSU9JXRcRSUlR1wzNDJcMjMxXDBcRSUlQCVlJXAxJXsxM30lPSV0XEUlJUdcMzQyXDIzMVwyNTJcRSUlQCVlJXAxJXsxNH0lPSV0XEUlJUdcMzQyXDIzMVwyNTNcRSUlQCVlJXAxJXsxNX0lPSV0XEUlJUdcMzQyXDIzMFwyNzRcRSUlQCVlJXAxJXsyN30lPSV0XEUlJUdcMzQyXDIwNlwyMjBcRSUlQCVlJXAxJXsxNTV9JT0ldFxFJSVHXDM0MFwyMDJcMjQyXEUlJUAlZSVwMSVjJTssCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZHNsPVxFXTA7XDAwNywgZWNoPVxFWyVwMSVkWCwKKwllZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkwLAorCWZsYXNoPVxFWz81aFxFWz81bCwgZnNsPV5HLCBob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywKKwlodD1eSSwgaHRzPVxFSCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWluZG49XEVbJXAxJWRTLAorCWluaXRjPVxFXVAlcDEleCVwMiV7MjU1fSUqJXsxMDAwfSUvJTAyeCVwMyV7MjU1fSUqJXsxMDAwfSUvJTAyeCVwNCV7MjU1fSUqJXsxMDAwfSUvJTAyeCwKKwlpczI9XEU3XEVbclxFW21cRVs/N2hcRVs/MTs0OzZsXEVbNGxcRThcRT5cRV1SLAorCWtiMj1cRVtHLCBrYnM9XDE3Nywga2Nhbj1eQywga2NidD1cRVtaLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LAorCWtlbmQ9XEVbNH4sIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVbMTJ+LCBrZjIwPVxFWzM0fiwga2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga21vdXM9XEVbTSwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NwZD1eWiwgbmVsPV5NXkosIG9jPVxFXVIsIG9wPVxFWzM5OzQ5bSwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCByaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1jdXA9XEVbMkpcRVs/NDdsLCBybWlyPVxFWzRsLCBybXBjaD1cRVsxMG0sCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRTxcRVsicFxFWzUwOzYicFxFY1xFWz8zbFxFXVJcRVs/MTAwMGwsCisJczBkcz1cRVsxMG0sIHMxZHM9XEVbMTFtLCBzMmRzPVxFWzEybSwgc2M9XEU3LAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtY3VwPVxFWz80N2gsCisJc21pcj1cRVs0aCwgc21wY2g9XEVbMTFtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVszZywgdHNsPVxFXTA7LCB2cGE9XEVbJWklcDElZGQsIHVzZT12dDEwMitlbnEsCit2dDEwMC1wdXR0eXxSZXNldCBQdVRUWSB0byBwdXJlIHZ0MTAwLAorCXJzMj1cRTxcRVsicFxFY1xFWz8zbFxFXVJcRVs0MCJwXEVbNjEicFxFWzUwOzE7MiJwLAorCXVzZT12dDEwMCwKKyMgcGFsZXR0ZSBpcyBoYXJkY29kZWQuLi4KK3B1dHR5LTI1NmNvbG9yfFB1VFRZIDAuNTggd2l0aCB4dGVybSAyNTYtY29sb3JzLAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9cHV0dHksCisKKyMgT25lIG9mIHRoZSBrZXlib2FyZCBzZWxlY3Rpb25zIGlzICJWVDEwMCsiLgorIyBwdGVybSAodGhlIFgxMSBwb3J0KSB1c2VzIHNoaWZ0ZWQgRjEtRjEwIGFzIEYxMS1GMjAKK3B1dHR5LXZ0MTAwfFZUMTAwKyBrZXlib2FyZCBsYXlvdXQsCisJa2YxPVxFT1AsIGtmMTA9XEVPWSwga2YxMT1cRU9aLCBrZjEyPVxFT1ssIGtmMj1cRU9RLAorCWtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFT1QsIGtmNj1cRU9VLCBrZjc9XEVPViwga2Y4PVxFT1csCisJa2Y5PVxFT1gsIHVzZT1wdXR0eSwKKworIyBUaGlzIGVudHJ5IGlzIGZvciBUZXJhIFRlcm0gUHJvIHZlcnNpb24gMi4zLCBmb3IgTVMtV2luZG93cyA5NS9OVCB3cml0dGVuIGJ5CisjIFQuIFRlcmFuaXNoaSBkYXRlZCBNYXIgMTAsIDE5OTguICBJdCBpcyBhIGZyZWUgc29mdHdhcmUgdGVybWluYWwgZW11bGF0b3IKKyMgKGNvbW11bmljYXRpb24gcHJvZ3JhbSkgd2hpY2ggc3VwcG9ydHM6CisjCisjCS0gU2VyaWFsIHBvcnQgY29ubmVjdGlvbnMuCisjCS0gVENQL0lQICh0ZWxuZXQpIGNvbm5lY3Rpb25zLgorIwktIFZUMTAwIGVtdWxhdGlvbiwgYW5kIHNlbGVjdGVkIFZUMjAwLzMwMCBlbXVsYXRpb24uCisjCS0gVEVLNDAxMCBlbXVsYXRpb24uCisjCS0gRmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgKEtlcm1pdCwgWE1PREVNLCBaTU9ERU0sIEItUExVUyBhbmQKKyMJICBRdWljay1WQU4pLgorIwktIFNjcmlwdHMgdXNpbmcgdGhlICJUZXJhIFRlcm0gTGFuZ3VhZ2UiLgorIwktIEphcGFuZXNlIGFuZCBSdXNzaWFuIGNoYXJhY3RlciBzZXRzLgorIworIyBUaGUgcHJvZ3JhbSBkb2VzIG5vdCBjb21lIHdpdGggdGVybWluZm8gb3IgdGVybWNhcCBlbnRyaWVzLiAgSG93ZXZlciwgdGhlCisjIGVtdWxhdGlvbiAodGVzdGluZyB3aXRoIHZ0dGVzdCBhbmQgbmN1cnNlcykgaXMgcmVhc29uYWJseSBjbG9zZSB0byB2dDEwMCAobm8KKyMgdnQ1MiBvciBkb3VibGVzaXplIGNoYXJhY3RlciBzdXBwb3J0OyBibGlua2luZyBpcyBkb25lIHdpdGggY29sb3IpLiAgQmVzaWRlcworIyB0aGUgSFBBLCBWUEEgZXh0ZW5zaW9ucyBpdCBhbHNvIGltcGxlbWVudHMgQ1BMIGFuZCBDTkwuCisjCisjIEFsbCBvZiB0aGUgZnVuY3Rpb24ga2V5cyBjYW4gYmUgcmVtYXBwZWQuICBUaGlzIGRlc2NyaXB0aW9uIHNob3dzIHRoZSBkZWZhdWx0CisjIG1hcHBpbmcsIGFzIGluc3RhbGxlZC4gIEJvdGggdnQxMDAgUEYxLVBGNCBrZXlzIGFuZCBxdWFzaS12dDIyMCBGMS1GNCBrZXlzCisjIGFyZSBzdXBwb3J0ZWQuICBGMTMtRjIwIGFyZSBvYnRhaW5lZCBieSBzaGlmdGluZyBGMy1GMTAuICBUaGUgZWRpdGluZyBrZXlwYWQKKyMgaXMgbGFpZCBvdXQgbGlrZSB2dDIyMCwgcmF0aGVyIHRoYW4gdGhlIGZhY2UgY29kZXMgb24gdGhlIFBDIGtleWJvYXJkLCBpLmUsCisjCWtmbmQJSW5zZXJ0CisjCWtzbHQJRGVsZXRlCisjCWtpY2gxCUhvbWUKKyMJa2RjaDEJUGFnZVVwCisjCWtwcAlFbmQKKyMJa25wCVBhZ2VEb3duCisjCisjIEFOU0kgY29sb3JzIGFyZSBpbXBsZW1lbnRlZCwgYnV0IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIHZpZGVvIGF0dHJpYnV0ZXMKKyMgZXhjZXB0IGZvciByZXZlcnNlLgorIworIyBObyBmb250cyBhcmUgc3VwcGxpZWQgd2l0aCB0aGUgcHJvZ3JhbSwgc28gdGhlIGFjc2Mgc3RyaW5nIGlzIGNob3NlbiB0bworIyBjb3JyZXNwb25kIHdpdGggdGhlIGRlZmF1bHQgTWljcm9zb2Z0IHRlcm1pbmFsIGZvbnQuCisjCisjIFRlcmEgVGVybSByZWNvZ25pemVzIHNvbWUgeHRlcm0gc2VxdWVuY2VzLCBpbmNsdWRpbmcgdGhvc2UgZm9yIHNldHRpbmcgYW5kCisjIHJldHJpZXZpbmcgdGhlIHdpbmRvdyB0aXRsZSwgYW5kIGZvciBzZXR0aW5nIHRoZSB3aW5kb3cgc2l6ZSAoaS5lLiwgdXNpbmcKKyMgInJlc2l6ZSAtcyIpLCB0aG91Z2ggaXQgZG9lcyBub3QgcGFzcyBTSUdXSU5DSCB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlCisjIHVzZXIgcmVzaXplcyB0aGUgd2luZG93IHdpdGggdGhlIG1vdXNlLgordGVyYXRlcm0yLjN8VGVyYSBUZXJtIFBybywKKwlrbSwgeG9uQCwKKwluY3YjNDMsIHZ0QCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBpXDMxNmpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwgY2xlYXI9XEVbSFxFW0osCisJY25vcm09XEVbPzI1aCwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWZsYXNoPVxFWz81aFxFWz81bCQ8MjAwLz4sIGhwYT1cRVslaSVwMSVkRywKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBrZGNoMT1cRVszfiwga2YxPVxFWzExfiwKKwlrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwKKwlrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwKKwlrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sIGtmMj1cRVsxMn4sIGtmMjA9XEVbMzR+LAorCWtmMz1cRVsxM34sIGtmND1cRVsxNH4sIGtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwKKwlrcHA9XEVbNX4sIGtzbHQ9XEVbNH4sIG9wPVxFWzEwMG0sIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgc2dyMD1cRVswbVwwMTcsIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdnBhPVxFWyVpJXAxJWRkLCB1c2U9dnQxMDArZW5xLAorCXVzZT1rbG9uZStjb2xvciwgdXNlPXZ0MTAwLAorCisjIFZlcnNpb24gNC41OSBoYXMgcmVndWxhciB2dDEwMCBsaW5lLWRyYXdpbmcgKHNvIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkKKyMgdG8gY2hvb3NlIGEgV2luZG93cyBPRU0gZm9udCkuCisjCisjIFRlc3Rpbmcgd2l0aCB0YWNrOgorIwktIGl0IGRvZXMgbm90IGhhdmUgeGVubCAoc3VwcHJlc3MgdGhhdCkKKyMJLSB1bmRlcmxpbmUgc2VlbXMgdG8gd29yayB3aXRoIGNvbG9yIChtb2RpZnkgbmN2KS4KKyMgVGVzdGluZyB3aXRoIHZ0dGVzdDoKKyMJLSB3cmFwcGluZyBkaWZmZXJzIGZyb20gdnQxMDAgKG1lbnUgMSkuCisjCS0gaXQgcmVjb2duaXplcyB4dGVybSdzIFgxMCBhbmQgbm9ybWFsIG1vdXNlIHRyYWNraW5nLCBidXQgbm9uZSBvZiB0aGUKKyMJICBvdGhlciBmbGF2b3JzLgorIwktIGl0IHJlY29nbml6ZXMgdGhlIGR0dGVybSB3aW5kb3cgY29udHJvbHMgZm9yIHJlcG9ydGluZyBzaXplIGluCisjCSAgY2hhcmFjdGVycyBhbmQgcGl4ZWxzLgorIwktIGl0IHBhc3NlcyBTSUdXSU5DSC4KK3RlcmF0ZXJtNC41OXxUZXJhIFRlcm0gUHJvLAorCWJjZSwgeGVubEAsCisJbmN2IzQxLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJa21vdXM9XEVbTSwgdXNlPXRlcmF0ZXJtMi4zLAorCit0ZXJhdGVybXxUZXJhIFRlcm0sCisJdXNlPXRlcmF0ZXJtNC41OSwKKworIyBUZXN0ZWQgd2l0aCBXaW5OVCA0LjAsIHRoZSB0ZWxuZXQgYXBwbGljYXRpb24gYXNzdW1lcyB0aGUgc2NyZWVuc2l6ZSBpcworIyAyNXg4MC4gIFRoaXMgZW50cnkgdXNlcyB0aGUgJ1Rlcm1pbmFsJyBmb250LCB0byBnZXQgbGluZS1kcmF3aW5nIGNoYXJhY3RlcnMuCisjCisjIE90aGVyIG5vdGVzOgorIyBhKSBGYWlscyB0YWNrJ3MgY3VwIChjdXJzb3ItYWRkcmVzc2luZykgdGVzdCwgdGhvdWdoIGN1cCB3b3JrcyB3ZWxsIGVub3VnaAorIyAgICBmb3IgY2FzdWFsIChvY2Nhc2lvbmFsKSB1c2UuICBBbHNvIGZhaWxzIHNldmVyYWwgb2YgdGhlIHZ0dGVzdCBzY3JlZW5zLAorIyAgICBidXQgdGhhdCBpcyBub3QgdW51c3VhbCBmb3IgdnQxMDAgImVtdWxhdG9ycyIuCisjIGIpIERvZXMgbm90IGltcGxlbWVudCB2dDEwMCBrZXlwYWQKKyMgYykgUmVjb2duaXplcyBhIHN1YnNldCBvZiB2dDUyIGNvbnRyb2xzLgorbXMtdnQxMDB8TVMgdGVsbmV0IGltaXRhdGluZyBkZWMgdnQxMDAsCisJbGluZXMjMjUsCisJYWNzYz0rXDAyMFwsXDAyMS1cMDMwLl5ZMFwzMzNgXDAwNGFcMjYxZlwzNzBnXDM2MWhcMjYwaVwzMTZqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJa2ExQCwga2EzQCwga2IyQCwga2MxQCwga2MzQCwga2VudEAsIGtmMEAsIGtmMUAsIGtmMTBALCBrZjJALCBrZjNALCBrZjRALAorCWtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIGtmOUAsIHRiY0AsIHVzZT12dDEwMitlbnEsIHVzZT12dDEwMCwKKworIyBUZXN0ZWQgd2l0aCBXaW5kb3dzIDIwMDAsIHRoZSB0ZWxuZXQgYXBwbGljYXRpb24gcnVucyBpbiBhIGNvbnNvbGUgd2luZG93LAorIyBhbHNvIHVzaW5nICdUZXJtaW5hbCcgZm9udC4KKyMKKyMgT3RoZXIgbm90ZXM6CisjIGEpIFRoaXMgdmVyc2lvbiBoYXMgbm8gZnVuY3Rpb24ga2V5cyBvciBudW1lcmljIGtleXBhZC4gIFVubGlrZSB0aGUgb2xkZXIKKyMgICAgdmVyc2lvbiwgdGhlIG51bWVyaWMga2V5cGFkIGlzIGVudGlyZWx5IGlnbm9yZWQuCisjIGIpIFRoZSBwcm9ncmFtIHNldHMgJFRFUk0gdG8gImFuc2kiLCB3aGljaCBvZiBjb3Vyc2UgaXMgaW5hY2N1cmF0ZS4KK21zLXZ0MTAwLWNvbG9yfHZ0bnR8d2luZG93cyAyMDAwIGFuc2kgKHNpYyksCisJYmNlLAorCWRjaD1cRVslcDElZFAsIGljaD1cRVslcDElZEAsIHVzZT1lY21hK2NvbG9yLAorCXVzZT1tcy12dDEwMCwKKworIyBCYXNlZCBvbiBjb21tZW50cyBmcm9tIEZlZGVyaWNvIEJpYW5jaGk6CisjCisjCXZ0MTAwKyBpcyBiYXNpY2FsbHkgYSBWVDEwMi1ub1NHUiB3aXRoIEFOU0kuU1lTIGNvbG9ycyBhbmQgYSBkaWZmZXJlbnQKKyMJc2NoZW1lIGZvciBQRiBrZXlzLgorIworIyBhbmQgUHVUVFkgd2lzaGxpc3Q6CisjCisjCVRoZSBtb2RpZmllcnMgYXJlIHJlcHJlc2VudGVkIGFzIHRoZSBjb2RlcyBsaXN0ZWQgYWJvdmUsIHByZWZpeGVkIHRvCisjCXRoZSBub3JtYWwgc2VxdWVuY2VzLiAgSWYgdGhlIG1vZGlmaWVyIGlzIHByZXNzZWQgYWxvbmUsIGl0cyBzZXF1ZW5jZQorIwlpcyB0cmFuc21pdHRlZCB0d2ljZSBpbiBzdWNjZXNzaW9uLiAgSWYgbXVsdGlwbGUgbW9kaWZpZXJzIGFwcGx5LAorIwl0aGV5J3JlIHRyYW5zbWl0dGVkIGluIHRoZSBvcmRlciBzaGlmdCwgY29udHJvbCwgYWx0LgorIworIwlTaGlmdAlcRV5TCisjCUFsdAlcRV5BLAorIwlDdHJsCVxFXkMsCittcy12dDEwMCt8dnQxMDArfHdpbmRvd3MgWFAgdnQxMDArIChzaWMpLAorCWtkY2gxPVxFLSwga2VuZD1cRWssIGtmMT1cRTEsIGtmMTA9XEUwLCBrZjExPVxFISwga2YxMj1cRUAsCisJa2YxMz1cRVwwMjNcRTEsIGtmMTQ9XEVcMDIzXEUyLCBrZjE1PVxFXDAyM1xFMywKKwlrZjE2PVxFXDAyM1xFNCwga2YxNz1cRVwwMjNcRTUsIGtmMTg9XEVcMDIzXEU2LAorCWtmMTk9XEVcMDIzXEU3LCBrZjI9XEUyLCBrZjIwPVxFXDAyM1xFOCwga2YyMT1cRVwwMjNcRTksCisJa2YyMj1cRVwwMjNcRTAsIGtmMjM9XEVcMDIzXEUhLCBrZjI0PVxFXDAyM1xFQCwKKwlrZjI1PVxFXDAwM1xFMSwga2YyNj1cRVwwMDNcRTIsIGtmMjc9XEVcMDAzXEUzLAorCWtmMjg9XEVcMDAzXEU0LCBrZjI5PVxFXDAwM1xFNSwga2YzPVxFMywga2YzMD1cRVwwMDNcRTYsCisJa2YzMT1cRVwwMDNcRTcsIGtmMzI9XEVcMDAzXEU4LCBrZjMzPVxFXDAwM1xFOSwKKwlrZjM0PVxFXDAwM1xFMCwga2YzNT1cRVwwMDNcRSEsIGtmMzY9XEVcMDAzXEVALAorCWtmMzc9XEVcMDAxXEUxLCBrZjM4PVxFXDAwMVxFMiwga2YzOT1cRVwwMDFcRTMsIGtmND1cRTQsCisJa2Y0MD1cRVwwMDFcRTQsIGtmNDE9XEVcMDAxXEU1LCBrZjQyPVxFXDAwMVxFNiwKKwlrZjQzPVxFXDAwMVxFNywga2Y0ND1cRVwwMDFcRTgsIGtmNDU9XEVcMDAxXEU5LAorCWtmNDY9XEVcMDAxXEUwLCBrZjQ3PVxFXDAwMVxFISwga2Y0OD1cRVwwMDFcRUAsIGtmNT1cRTUsCisJa2Y2PVxFNiwga2Y3PVxFNywga2Y4PVxFOCwga2Y5PVxFOSwga2hvbWU9XEVoLCBraWNoMT1cRSssCisJa25wPVxFLywga3BwPVxFPywgdXNlPW1zLXZ0MTAwLWNvbG9yLAorCittcy12dC11dGY4fHZ0LXV0Zjh8VVRGLTggZmxhdm9yIG9mIHZ0MTAwKywKKwl1c2U9bXMtdnQxMDArLAorCisjIGEgbWluaW1hbCBzdWJzZXQgb2YgYSB2dDEwMCAoY29tcGFyZSB3aXRoICJuZXdzLXVuaykuCit0dHx0a3Rlcm18RG9uIExpYmVzJyB0ayB0ZXh0IHdpZGdldCB0ZXJtaW5hbCBlbXVsYXRvciwKKwljbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1ZjE9XEVbQywgY3VwPVxFWyVwMSVkOyVwMiVkSCwKKwljdXUxPVxFW0EsIGluZD1eSiwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsCisJa2Y1PVxFT1QsIGtmNj1cRU9VLCBrZjc9XEVPViwga2Y4PVxFT1csIGtmOT1cRU9YLCBybXNvPVxFW20sCisJc21zbz1cRVs3bSwKKworIyMjIyBYIHRlcm1pbmFsIGVtdWxhdG9ycworIworIyBZb3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciAuWGRlZmF1bHRzIHRvIGNoYW5nZSB0aGUgdGVybWluYWwgdHlwZQorIyBzZXQgYnkgdGhlIHh0ZXJtcyB5b3Ugc3RhcnQgdXAgdG8gbXkteHRlcm06CisjCisjICp0ZXJtTmFtZTogIG15LXh0ZXJtCisjCisjIFN5c3RlbSBhZG1pbmlzdHJhdG9ycyBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGVudHJ5IGZvciB4dGVybSBpbnN0YW5jZXMKKyMgYnkgYWRkaW5nIGEgc2ltaWxhciBsaW5lIHRvIC91c3IvWDExL2xpYi9YMTEvYXBwLWRlZmF1bHRzL1hUZXJtLiAgSW4gZWl0aGVyCisjIGNhc2UsIHh0ZXJtIHdpbGwgZGV0ZWN0IGFuZCByZWplY3QgYW4gaW52YWxpZCB0ZXJtaW5hbCB0eXBlLCBmYWxsaW5nIGJhY2sKKyMgdG8gdGhlIGRlZmF1bHQgb2YgeHRlcm0uCisjCisKKyMgWDEwLzYuNgkxMS83Lzg2LCBtaW51cyBhbHRlcm5hdGUgc2NyZWVuLCBwbHVzIChjc3IpCisjICh4dGVybTogIjpNVDoiIGNoYW5nZWQgdG8gIjprbToiOyBhZGRlZCA8c21hbT4vPHJtYW0+IGJhc2VkIG9uIGluaXQgc3RyaW5nOworIyByZW1vdmVkIChocywgZXNsb2ssIHRzbD1cRVs/RVxFWz8laSVkVCwgZnNsPVxFWz9GLCBkc2w9XEVbP0UpCisjIGFzIHRoZXNlIHNlZW0gbm90IHRvIHdvcmsgLS0gZXNyKQoreDEwdGVybXx2czEwMC14MTB8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFgxMCB3aW5kb3cgc3lzdGVtKSwKKwlPVGJzLCBhbSwga20sIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzY1LAorCWJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpczI9XEVcRVttXEVbPzdoXEVbPzE7NGwsIGticz1eSCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCByZXY9XEVbN20sIHJpPVxFTSwgcm1hbT1cRVs/N2wsCisJcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNncjA9XEVbbSwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sCisjIENvbXBhdGlibGUgd2l0aCB0aGUgUjUgeHRlcm0KKyMgKGZyb20gdGhlIFhGcmVlODYgMy4yIGRpc3RyaWJ1dGlvbiwgPGJsaW5rPUA+IHJlbW92ZWQpCisjIGFkZGVkIGtob21lL2tlbmQsIHJtaXIvc21pciwgcm11bC9zbXVsLCBodHMgYmFzZWQgb24gdGhlIFI1IHh0ZXJtIGNvZGUgLSBURAorIyBjb3JyZWN0ZWQgdHlwb3MgaW4gcnMyIHN0cmluZyAtIFRECisjIGFkZGVkIHU2LXU5IC1URAoreHRlcm0tcjV8eHRlcm0gUjUgdmVyc2lvbiwKKwlPVGJzLCBhbSwga20sIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZGNoMT1cRVszfiwKKwlrZGwxPVxFWzMxfiwga2VsPVxFWzh+LCBrZW5kPVxFWzR+LCBrZjA9XEVPcSwga2YxPVxFWzExfiwKKwlrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjI9XEVbMTJ+LAorCWtmMz1cRVsxM34sIGtmND1cRVsxNH4sIGtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LAorCWtpbDE9XEVbMzB+LCBrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlyczI9XEU+XEVbPzE7Mzs0OzU7NmxcRVs0bFxFWz83aFxFW21cRVtyXEVbMkpcRVtILAorCXNjPVxFNywKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20sCisJc2dyMD1cRVttLCBzbWlyPVxFWzRoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHVzZT12dDEwMCtlbnEsCisjIENvbXBhdGlibGUgd2l0aCB0aGUgUjYgeHRlcm0KKyMgKGZyb20gWEZyZWU4NiAzLjIgZGlzdHJpYnV0aW9uLCA8YWNzYz4gYW5kIDxpdD4gYWRkZWQsIDxibGlua0A+IHJlbW92ZWQpCisjIGFkZGVkIGtob21lL2tlbmQsIGh0cyBiYXNlZCBvbiB0aGUgUjYgeHRlcm0gY29kZSAtIFRECisjIChraG9tZS9rZW5kIGRvIG5vdCBhY3R1YWxseSB3b3JrIGluIFgxMVI1IG9yIFgxMVI2LCBidXQgbWFueSBwZW9wbGUgdXNlIHRoaXMKKyMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBlbXVsYXRvcnMpLgoreHRlcm0tcjZ8eHRlcm0tb2xkfHh0ZXJtIFgxMVI2IHZlcnNpb24sCisJT1RicywgYW0sIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbmFjcz1cRSkwLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1eSiwKKwlpczI9XEVbbVxFWz83aFxFWzRsXEU+XEU3XEVbclxFWz8xOzM7NDs2bFxFOCwga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2RjaDE9XEVbM34sIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVbMTJ+LCBrZjIwPVxFWzM0fiwga2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtmbmQ9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LCBtZW1sPVxFbCwgbWVtdT1cRW0sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1hY3M9Xk8sIHJtY3VwPVxFWzJKXEVbPzQ3bFxFOCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVxFW21cRVs/N2hcRVs0bFxFPlxFN1xFW3JcRVs/MTszOzQ7NmxcRTgsIHNjPVxFNywKKwlzZ3IwPVxFW20sIHNtYWNzPV5OLCBzbWN1cD1cRTdcRVs/NDdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdXNlPXZ0MTAwK2VucSwKKyMgVGhpcyBpcyB0aGUgYmFzZSB4dGVybSBlbnRyeSBmb3IgdGhlIHh0ZXJtIHN1cHBsaWVkIHdpdGggWEZyZWU4NiAzLjIgJiB1cC4KKyMgVGhlIG5hbWUgaGFzIGJlZW4gY2hhbmdlZCBhbmQgc29tZSBhbGlhc2VzIGhhdmUgYmVlbiByZW1vdmVkLgoreHRlcm0teGY4Ni12MzJ8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFhGcmVlODYgMy4yIFdpbmRvdyBTeXN0ZW0pLAorCU9UYnMsIGFtLCBiY2UsIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIG5jdkAsCisJYWNzYz1gYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkwLAorCWZsYXNoPVxFWz81aCQ8MTAwLz5cRVs/NWwsIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLAorCWh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRTdcRVtyXEVbbVxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU4XEU+LAorCWtiZWc9XEVPRSwga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLAorCWtjdXUxPVxFT0EsIGtkY2gxPVwxNzcsIGtlbmQ9XEVPRiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sCisJa2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sCisJa2YxOT1cRVszM34sIGtmMj1cRVsxMn4sIGtmMjA9XEVbMzR+LCBrZjM9XEVbMTN+LAorCWtmND1cRVsxNH4sIGtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sCisJa2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwga2hvbWU9XEVPSCwga2ljaDE9XEVbMn4sCisJa21vdXM9XEVbTSwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtzbHQ9XEVbNH4sIG1lbWw9XEVsLAorCW1lbXU9XEVtLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1jdXA9XEVbMkpcRVs/NDdsXEU4LCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sIHJzMT1eTywKKwlyczI9XEU3XEVbclxFOFxFW21cRVs/N2hcRVs/MTszOzQ7NmxcRVs0bFxFPiwgc2M9XEU3LAorCXNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtY3VwPVxFN1xFWz80N2gsCisJc21pcj1cRVs0aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB2cGE9XEVbJWklcDElZGQsIHVzZT12dDEwMCtlbnEsCisJdXNlPWVjbWErY29sb3IsIHVzZT12dDIyMCtrZXlwYWQsCisKKyMgVGhpcyBpcyB0aGUgc3RvY2sgeHRlcm0gZW50cnkgc3VwcGxpZWQgd2l0aCBYRnJlZTg2IDMuMywgd2hpY2ggdXNlcyBWVDEwMAorIyBjb2RlcyBmb3IgRjEtRjQgZXhjZXB0IHdoaWxlIGluIFZUMjIwIG1vZGUuCit4dGVybS14Zjg2LXYzM3x4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWEZyZWU4NiAzLjMgV2luZG93IFN5c3RlbSksCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHVzZT14dGVybS14Zjg2LXYzMiwKKworIyBUaGlzIHZlcnNpb24gd2FzIHJlbGVhc2VkIGluIFhGcmVlODYgMy4zLjMgKE5vdmVtYmVyIDE5OTgpLgorIyBCZXNpZGVzIHByb3ZpZGluZyBwcmludGVyIHN1cHBvcnQsIGl0IGV4cGxvaXRzIGEgbmV3IGZlYXR1cmUgdGhhdCBhbGxvd3MKKyMgeHRlcm0gdG8gdXNlIHRlcm1pbmZvLWJhc2VkIGRlc2NyaXB0aW9ucyB3aXRoIHRoZSB0aXRlSW5oaWJpdCByZXNvdXJjZS4KKyMgLS0gdGhlIGRpc3RyaWJ1dGlvbiBjb250YWluZWQgaW5jb3JyZWN0IGtob21lL2tlbmQgdmFsdWVzIC1URAoreHRlcm0teGY4Ni12MzMzfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYRnJlZTg2IDMuMy4zIFdpbmRvdyBTeXN0ZW0pLAorCW1jNWksCisJYmxpbms9XEVbNW0sIGljaDFALCBpbnZpcz1cRVs4bSwKKwlpczI9XEVbIXBcRVs/Mzs0bFxFWzRsXEU+LCBrZGNoMT1cRVszfiwga2ZuZEAsIGtzbHRALAorCW1jMD1cRVtpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgcm1jdXA9XEVbPzEwNDdsXEVbPzEwNDhsLAorCXJzMT1cRWMsIHJzMj1cRVshcFxFWz8zOzRsXEVbNGxcRT4sCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNtY3VwPVxFWz8xMDQ4aFxFWz8xMDQ3aCwgdXNlPXh0ZXJtLXhmODYtdjMzLAorCisjIFRoaXMgdmVyc2lvbiB3YXMgcmVsZWFzZWQgaW4gWEZyZWU4NiA0LjAuCit4dGVybS14Zjg2LXY0MHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWEZyZWU4NiA0LjAgV2luZG93IFN5c3RlbSksCisJbnBjLAorCWtEQz1cRVszOzV+LCBrRU5EPVxFTzVGLCBrSE9NPVxFTzVILCBrSUM9XEVbMjs1fiwKKwlrTEZUPVxFTzVELCBrTlhUPVxFWzY7NX4sIGtQUlY9XEVbNTs1fiwga1JJVD1cRU81Qywga2ExQCwKKwlrYTNALCBrYjI9XEVPRSwga2MxQCwga2MzQCwga2NidD1cRVtaLCBrZGNoMT1cRVszfiwga2VuZD1cRU9GLAorCWtmMTM9XEVPMlAsIGtmMTQ9XEVPMlEsIGtmMTU9XEVPMlIsIGtmMTY9XEVPMlMsCisJa2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwKKwlrZjIwPVxFWzE5OzJ+LCBrZjIxPVxFWzIwOzJ+LCBrZjIyPVxFWzIxOzJ+LAorCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMjU9XEVPNVAsIGtmMjY9XEVPNVEsCisJa2YyNz1cRU81Uiwga2YyOD1cRU81Uywga2YyOT1cRVsxNTs1fiwga2YzMD1cRVsxNzs1fiwKKwlrZjMxPVxFWzE4OzV+LCBrZjMyPVxFWzE5OzV+LCBrZjMzPVxFWzIwOzV+LAorCWtmMzQ9XEVbMjE7NX4sIGtmMzU9XEVbMjM7NX4sIGtmMzY9XEVbMjQ7NX4sIGtmMzc9XEVPNlAsCisJa2YzOD1cRU82USwga2YzOT1cRU82Uiwga2Y0MD1cRU82Uywga2Y0MT1cRVsxNTs2fiwKKwlrZjQyPVxFWzE3OzZ+LCBrZjQzPVxFWzE4OzZ+LCBrZjQ0PVxFWzE5OzZ+LAorCWtmNDU9XEVbMjA7Nn4sIGtmNDY9XEVbMjE7Nn4sIGtmNDc9XEVbMjM7Nn4sCisJa2Y0OD1cRVsyNDs2fiwga2hvbWU9XEVPSCwgcm1jdXA9XEVbPzEwNDlsLAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNtY3VwPVxFWz8xMDQ5aCwgdXNlPXh0ZXJtLXhmODYtdjMzMywKKworIyBUaGlzIHZlcnNpb24gd2FzIHJlbGVhc2VkIGluIFhGcmVlODYgNC4zLgoreHRlcm0teGY4Ni12NDN8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFhGcmVlODYgNC4zIFdpbmRvdyBTeXN0ZW0pLAorCWtEQz1cRVszOzJ+LCBrRU5EPVxFWzE7MkYsIGtIT009XEVbMTsySCwga0lDPVxFWzI7Mn4sCisJa0xGVD1cRVsxOzJELCBrTlhUPVxFWzY7Mn4sIGtQUlY9XEVbNTsyfiwga1JJVD1cRVsxOzJDLAorCWtiZWdALAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJdXNlPXh0ZXJtLXhmODYtdjQwLAorCisjIFRoaXMgdmVyc2lvbiB3YXMgcmVsZWFzZWQgaW4gWEZyZWU4NiA0LjQuCit4dGVybS14Zjg2LXY0NHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWEZyZWU4NiA0LjQgV2luZG93IFN5c3RlbSksCisJY25vcm09XEVbPzEybFxFWz8yNWgsIGN2dmlzPVxFWz8xMjsyNWgsIGluZG49XEVbJXAxJWRTLAorCXJpbj1cRVslcDElZFQsIHVzZT14dGVybS14Zjg2LXY0MywKKworeHRlcm0teGZyZWU4Nnx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWEZyZWU4NiksCisJdXNlPXh0ZXJtLXhmODYtdjQ0LAorCisjIFRoaXMgdmVyc2lvbiByZWZsZWN0cyB0aGUgY3VycmVudCB4dGVybSBmZWF0dXJlcy4KK3h0ZXJtLW5ld3xtb2Rlcm4geHRlcm0gdGVybWluYWwgZW11bGF0b3IsCisJbnBjLAorCWluZG49XEVbJXAxJWRTLCBrREM9XEVbMzsyfiwga0VORD1cRVsxOzJGLCBrSE9NPVxFWzE7MkgsCisJa0lDPVxFWzI7Mn4sIGtOWFQ9XEVbNjsyfiwga1BSVj1cRVs1OzJ+LCBrYjI9XEVPRSwKKwlrY2J0PVxFW1osIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2VuZD1cRU9GLCBrZW50PVxFT00sIGtob21lPVxFT0gsIGtpY2gxPVxFWzJ+LCBrbW91cz1cRVtNLAorCWtucD1cRVs2fiwga3BwPVxFWzV+LCByaW49XEVbJXAxJWRULCB1c2U9eHRlcm0rcGNma2V5cywKKwl1c2U9eHRlcm0tYmFzaWMsCisjCisjIFRoaXMgZnJhZ21lbnQgZGVzY3JpYmVzIGFzIG11Y2ggb2YgWEZyZWU4NiB4dGVybSdzICJwYy1zdHlsZSIgZnVuY3Rpb24KKyMga2V5cyBhcyB3aWxsIGZpdCBpbnRvIHRlcm1pbmZvJ3MgNjAgZnVuY3Rpb24ga2V5cy4KKyMgRnJvbSBjdGxzZXFzLm1zOgorIyAgICBDb2RlICAgICBNb2RpZmllcnMKKyMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgMiAgICAgICBTaGlmdAorIyAgICAgMyAgICAgICBBbHQKKyMgICAgIDQgICAgICAgU2hpZnQgKyBBbHQKKyMgICAgIDUgICAgICAgQ29udHJvbAorIyAgICAgNiAgICAgICBTaGlmdCArIENvbnRyb2wKKyMgICAgIDcgICAgICAgQWx0ICsgQ29udHJvbAorIyAgICAgOCAgICAgICBTaGlmdCArIEFsdCArIENvbnRyb2wKKyMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbWV0YSBrZXkgbWF5IGFsc28gYmUgdXNlZCBhcyBhIG1vZGlmaWVyIGluIHRoaXMgc2NoZW1lLCBhZGRpbmcgYW5vdGhlcgorIyBiaXQgdG8gdGhlIHBhcmFtZXRlci4KK3h0ZXJtK3BjZmtleXN8ZnJhZ21lbnQgZm9yIFBDLXN0eWxlIGZrZXlzLAorCXVzZT14dGVybSthcHAsIHVzZT14dGVybStwY2YyLCB1c2U9eHRlcm0rcGNjMiwKKwl1c2U9eHRlcm0rcGNlMiwKKyMKK3h0ZXJtK25vYXBwfGZyYWdtZW50IHdpdGggY3Vyc29yIGtleXMgaW4gbm9ybWFsIG1vZGUsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2VuZD1cRVtGLAorCWtob21lPVxFW0gsCisKK3h0ZXJtK2FwcHxmcmFnbWVudCB3aXRoIGN1cnNvciBrZXlzIGluIGFwcGxpY2F0aW9uIG1vZGUsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2VuZD1cRU9GLAorCWtob21lPVxFT0gsCisjCisjIFRoZSAiUEMtc3R5bGUiIG1vZGlmaWVyIHNjaGVtZSB3YXMgaW50cm9kdWNlZCBpbiB4dGVybSBwYXRjaCAjOTQgKDE5OTkvMy8yNykKKyMgYW5kIHJldmlzZWQgaW4gcGF0Y2ggIzE2NyAoMjAwMi84LzI0KS4gIFNvbWUgb3RoZXIgdGVybWluYWwgZW11bGF0b3JzIGNvcGllZAorIyB0aGUgZWFybGllciBzY2hlbWUsIGFzIG5vdGVkIGluIHRoZSAidXNlPSIgY2xhdXNlcyBpbiB0aGlzIGZpbGUuCisjCisjIFRoZSBvcmlnaW5hbCBhc3NpZ25tZW50cyBmcm9tIHBhdGNoICM5NCBmb3IgY3Vyc29yLWtleXMgaGFkIHNvbWUgdGVjaG5pY2FsCisjIGlzc3VlczoKKyMKKyMJQSBwYXJhbWV0ZXIgZm9yIGEgZnVuY3Rpb24ta2V5IHRvIHJlcHJlc2VudCBhIG1vZGlmaWVyIGlzIGp1c3QgbW9yZQorIwliaXRzLiAgQnV0IGZvciBhIGN1cnNvci1rZXkgaXQgbWF5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlCisjCWFwcGxpY2F0aW9uLiAgRm9yIGluc3RhbmNlLCBlbWFjcyBkZWNvZGVzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgYQorIwljdXJzb3Ita2V5IGFzIGEgcmVwZWF0IGNvdW50LgorIworIwlBIHBhcmFtZXRlcml6ZWQgc3RyaW5nIHNob3VsZCAocmVhbGx5KSBub3QgYmVnaW4gd2l0aCBTUzMgKFxFTykuCisjCVJhdGhlciwgQ1NJIChcRVspIHNob3VsZCBiZSB1c2VkLgorIworIyBGb3IgdGhlc2UgcmVhc29ucywgdGhlIG9yaWdpbmFsIGFzc2lnbm1lbnRzIHdlcmUgZGVwcmVjYXRlZC4gIEZvcgorIyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHRoZXkgYXJlIHN0aWxsIGF2YWlsYWJsZSBhcyBhIHNldHRpbmcgb2YgeHRlcm0ncworIyBtb2RpZnlDdXJzb3JLZXlzIHJlc291cmNlLiAgVGhlc2UgZnJhZ21lbnRzIGxpc3QgdGhlIG1vZGlmaWVkIGN1cnNvci1rZXlzCisjIHRoYXQgbWlnaHQgYXBwbHkgdG8geHRlcm0rcGNma2V5cyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgb2YgdGhhdCByZXNvdXJjZS4KK3h0ZXJtK3BjYzN8ZnJhZ21lbnQgd2l0aCBtb2RpZnlDdXJzb3JLZXlzOjMsCisJa0xGVD1cRVs+MTsyRCwga1JJVD1cRVs+MTsyQywga2luZD1cRVs+MTsyQiwKKwlrcmk9XEVbPjE7MkEsIGtETj1cRVs+MTsyQiwga0ROMz1cRVs+MTszQiwga0ROND1cRVs+MTs0QiwKKwlrRE41PVxFWz4xOzVCLCBrRE42PVxFWz4xOzZCLCBrRE43PVxFWz4xOzdCLAorCWtMRlQzPVxFWz4xOzNELCBrTEZUND1cRVs+MTs0RCwga0xGVDU9XEVbPjE7NUQsCisJa0xGVDY9XEVbPjE7NkQsIGtMRlQ3PVxFWz4xOzdELCBrUklUMz1cRVs+MTszQywKKwlrUklUND1cRVs+MTs0Qywga1JJVDU9XEVbPjE7NUMsIGtSSVQ2PVxFWz4xOzZDLAorCWtSSVQ3PVxFWz4xOzdDLCBrVVA9XEVbPjE7MkEsIGtVUDM9XEVbPjE7M0EsCisJa1VQND1cRVs+MTs0QSwga1VQNT1cRVs+MTs1QSwga1VQNj1cRVs+MTs2QSwKKwlrVVA3PVxFWz4xOzdBLAorCit4dGVybStwY2MyfGZyYWdtZW50IHdpdGggbW9kaWZ5Q3Vyc29yS2V5czoyLAorCWtMRlQ9XEVbMTsyRCwga1JJVD1cRVsxOzJDLCBraW5kPVxFWzE7MkIsIGtyaT1cRVsxOzJBLAorCWtETj1cRVsxOzJCLCBrRE4zPVxFWzE7M0IsIGtETjQ9XEVbMTs0Qiwga0RONT1cRVsxOzVCLAorCWtETjY9XEVbMTs2Qiwga0RONz1cRVsxOzdCLCBrTEZUMz1cRVsxOzNELCBrTEZUND1cRVsxOzRELAorCWtMRlQ1PVxFWzE7NUQsIGtMRlQ2PVxFWzE7NkQsIGtMRlQ3PVxFWzE7N0QsCisJa1JJVDM9XEVbMTszQywga1JJVDQ9XEVbMTs0Qywga1JJVDU9XEVbMTs1QywKKwlrUklUNj1cRVsxOzZDLCBrUklUNz1cRVsxOzdDLCBrVVA9XEVbMTsyQSwga1VQMz1cRVsxOzNBLAorCWtVUDQ9XEVbMTs0QSwga1VQNT1cRVsxOzVBLCBrVVA2PVxFWzE7NkEsIGtVUDc9XEVbMTs3QSwKKworeHRlcm0rcGNjMXxmcmFnbWVudCB3aXRoIG1vZGlmeUN1cnNvcktleXM6MSwKKwlrTEZUPVxFWzJELCBrUklUPVxFWzJDLCBraW5kPVxFWzJCLCBrcmk9XEVbMkEsIGtETj1cRVsyQiwKKwlrRE4zPVxFWzNCLCBrRE40PVxFWzRCLCBrRE41PVxFWzVCLCBrRE42PVxFWzZCLCBrRE43PVxFWzdCLAorCWtMRlQzPVxFWzNELCBrTEZUND1cRVs0RCwga0xGVDU9XEVbNUQsIGtMRlQ2PVxFWzZELAorCWtMRlQ3PVxFWzdELCBrUklUMz1cRVszQywga1JJVDQ9XEVbNEMsIGtSSVQ1PVxFWzVDLAorCWtSSVQ2PVxFWzZDLCBrUklUNz1cRVs3Qywga1VQPVxFWzJBLCBrVVAzPVxFWzNBLAorCWtVUDQ9XEVbNEEsIGtVUDU9XEVbNUEsIGtVUDY9XEVbNkEsIGtVUDc9XEVbN0EsCisKK3h0ZXJtK3BjYzB8ZnJhZ21lbnQgd2l0aCBtb2RpZnlDdXJzb3JLZXlzOjAsCisJa0xGVD1cRU8yRCwga1JJVD1cRU8yQywga2luZD1cRU8yQiwga3JpPVxFTzJBLCBrRE49XEVPMkIsCisJa0ROMz1cRU8zQiwga0ROND1cRU80Qiwga0RONT1cRU81Qiwga0RONj1cRU82Qiwga0RONz1cRU83QiwKKwlrTEZUMz1cRU8zRCwga0xGVDQ9XEVPNEQsIGtMRlQ1PVxFTzVELCBrTEZUNj1cRU82RCwKKwlrTEZUNz1cRU83RCwga1JJVDM9XEVPM0MsIGtSSVQ0PVxFTzRDLCBrUklUNT1cRU81QywKKwlrUklUNj1cRU82Qywga1JJVDc9XEVPN0MsIGtVUD1cRU8yQSwga1VQMz1cRU8zQSwKKwlrVVA0PVxFTzRBLCBrVVA1PVxFTzVBLCBrVVA2PVxFTzZBLCBrVVA3PVxFTzdBLAorCisjCisjIEhlcmUgYXJlIGNvcnJlc3BvbmRpbmcgZnJhZ21lbnRzIGZyb20geHRlcm0gcGF0Y2ggIzIxNjoKKyMKK3h0ZXJtK3BjZjB8ZnJhZ21lbnQgd2l0aCBtb2RpZnlGdW5jdGlvbktleXM6MCwKKwlrZjE9XEVPUCwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwKKwlrZjEzPVxFTzJQLCBrZjE0PVxFTzJRLCBrZjE1PVxFTzJSLCBrZjE2PVxFTzJTLAorCWtmMTc9XEVbMTU7Mn4sIGtmMTg9XEVbMTc7Mn4sIGtmMTk9XEVbMTg7Mn4sIGtmMj1cRU9RLAorCWtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisJa2YyMz1cRVsyMzsyfiwga2YyND1cRVsyNDsyfiwga2YyNT1cRU81UCwga2YyNj1cRU81USwKKwlrZjI3PVxFTzVSLCBrZjI4PVxFTzVTLCBrZjI5PVxFWzE1OzV+LCBrZjM9XEVPUiwKKwlrZjMwPVxFWzE3OzV+LCBrZjMxPVxFWzE4OzV+LCBrZjMyPVxFWzE5OzV+LAorCWtmMzM9XEVbMjA7NX4sIGtmMzQ9XEVbMjE7NX4sIGtmMzU9XEVbMjM7NX4sCisJa2YzNj1cRVsyNDs1fiwga2YzNz1cRU82UCwga2YzOD1cRU82USwga2YzOT1cRU82UiwKKwlrZjQ9XEVPUywga2Y0MD1cRU82Uywga2Y0MT1cRVsxNTs2fiwga2Y0Mj1cRVsxNzs2fiwKKwlrZjQzPVxFWzE4OzZ+LCBrZjQ0PVxFWzE5OzZ+LCBrZjQ1PVxFWzIwOzZ+LAorCWtmNDY9XEVbMjE7Nn4sIGtmNDc9XEVbMjM7Nn4sIGtmNDg9XEVbMjQ7Nn4sIGtmNDk9XEVPM1AsCisJa2Y1PVxFWzE1fiwga2Y1MD1cRU8zUSwga2Y1MT1cRU8zUiwga2Y1Mj1cRU8zUywKKwlrZjUzPVxFWzE1OzN+LCBrZjU0PVxFWzE3OzN+LCBrZjU1PVxFWzE4OzN+LAorCWtmNTY9XEVbMTk7M34sIGtmNTc9XEVbMjA7M34sIGtmNTg9XEVbMjE7M34sCisJa2Y1OT1cRVsyMzszfiwga2Y2PVxFWzE3fiwga2Y2MD1cRVsyNDszfiwga2Y2MT1cRU80UCwKKwlrZjYyPVxFTzRRLCBrZjYzPVxFTzRSLCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorIworeHRlcm0rcGNmMnxmcmFnbWVudCB3aXRoIG1vZGlmeUZ1bmN0aW9uS2V5czoyLAorCWtmMT1cRU9QLCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LAorCWtmMTM9XEVbMTsyUCwga2YxND1cRVsxOzJRLCBrZjE1PVxFWzE7MlIsIGtmMTY9XEVbMTsyUywKKwlrZjE3PVxFWzE1OzJ+LCBrZjE4PVxFWzE3OzJ+LCBrZjE5PVxFWzE4OzJ+LCBrZjI9XEVPUSwKKwlrZjIwPVxFWzE5OzJ+LCBrZjIxPVxFWzIwOzJ+LCBrZjIyPVxFWzIxOzJ+LAorCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMjU9XEVbMTs1UCwga2YyNj1cRVsxOzVRLAorCWtmMjc9XEVbMTs1Uiwga2YyOD1cRVsxOzVTLCBrZjI5PVxFWzE1OzV+LCBrZjM9XEVPUiwKKwlrZjMwPVxFWzE3OzV+LCBrZjMxPVxFWzE4OzV+LCBrZjMyPVxFWzE5OzV+LAorCWtmMzM9XEVbMjA7NX4sIGtmMzQ9XEVbMjE7NX4sIGtmMzU9XEVbMjM7NX4sCisJa2YzNj1cRVsyNDs1fiwga2YzNz1cRVsxOzZQLCBrZjM4PVxFWzE7NlEsIGtmMzk9XEVbMTs2UiwKKwlrZjQ9XEVPUywga2Y0MD1cRVsxOzZTLCBrZjQxPVxFWzE1OzZ+LCBrZjQyPVxFWzE3OzZ+LAorCWtmNDM9XEVbMTg7Nn4sIGtmNDQ9XEVbMTk7Nn4sIGtmNDU9XEVbMjA7Nn4sCisJa2Y0Nj1cRVsyMTs2fiwga2Y0Nz1cRVsyMzs2fiwga2Y0OD1cRVsyNDs2fiwKKwlrZjQ5PVxFWzE7M1AsIGtmNT1cRVsxNX4sIGtmNTA9XEVbMTszUSwga2Y1MT1cRVsxOzNSLAorCWtmNTI9XEVbMTszUywga2Y1Mz1cRVsxNTszfiwga2Y1ND1cRVsxNzszfiwKKwlrZjU1PVxFWzE4OzN+LCBrZjU2PVxFWzE5OzN+LCBrZjU3PVxFWzIwOzN+LAorCWtmNTg9XEVbMjE7M34sIGtmNTk9XEVbMjM7M34sIGtmNj1cRVsxN34sIGtmNjA9XEVbMjQ7M34sCisJa2Y2MT1cRVsxOzRQLCBrZjYyPVxFWzE7NFEsIGtmNjM9XEVbMTs0Uiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorIworIyBDaHVua3MgZnJvbSB4dGVybSAjMjMwOgoreHRlcm0rcGNlMnxmcmFnbWVudCB3aXRoIG1vZGlmeUN1cnNvcktleXM6MiwKKwlrREM9XEVbMzsyfiwga0VORD1cRVsxOzJGLCBrSE9NPVxFWzE7MkgsIGtJQz1cRVsyOzJ+LAorCWtOWFQ9XEVbNjsyfiwga1BSVj1cRVs1OzJ+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwga0RDMz1cRVszOzN+LCBrREM0PVxFWzM7NH4sIGtEQzU9XEVbMzs1fiwKKwlrREM2PVxFWzM7Nn4sIGtEQzc9XEVbMzs3fiwga0VORDM9XEVbMTszRiwga0VORDQ9XEVbMTs0RiwKKwlrRU5ENT1cRVsxOzVGLCBrRU5ENj1cRVsxOzZGLCBrRU5ENz1cRVsxOzdGLAorCWtIT00zPVxFWzE7M0gsIGtIT000PVxFWzE7NEgsIGtIT001PVxFWzE7NUgsCisJa0hPTTY9XEVbMTs2SCwga0hPTTc9XEVbMTs3SCwga0lDMz1cRVsyOzN+LCBrSUM0PVxFWzI7NH4sCisJa0lDNT1cRVsyOzV+LCBrSUM2PVxFWzI7Nn4sIGtJQzc9XEVbMjs3fiwga05YVDM9XEVbNjszfiwKKwlrTlhUND1cRVs2OzR+LCBrTlhUNT1cRVs2OzV+LCBrTlhUNj1cRVs2OzZ+LAorCWtOWFQ3PVxFWzY7N34sIGtQUlYzPVxFWzU7M34sIGtQUlY0PVxFWzU7NH4sCisJa1BSVjU9XEVbNTs1fiwga1BSVjY9XEVbNTs2fiwga1BSVjc9XEVbNTs3fiwKKwl1c2U9eHRlcm0rZWRpdCwKKworeHRlcm0rZWRpdHxmcmFnbWVudCBmb3IgNi1rZXkgZWRpdGluZy1rZXlwYWQsCisJa2RjaDE9XEVbM34sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwl1c2U9eHRlcm0rcGMrZWRpdCwKKworeHRlcm0rcGMrZWRpdHxmcmFnbWVudCBmb3IgcGMtc3R5bGUgZWRpdGluZyBrZXlwYWQsCisJa2VuZD1cRVs0fiwga2hvbWU9XEVbMX4sCisKK3h0ZXJtK3Z0K2VkaXR8ZnJhZ21lbnQgZm9yIHZ0MjIwLXN0eWxlIGVkaXRpbmcga2V5cGFkLAorCWtmbmQ9XEVbMX4sIGtzbHQ9XEVbNH4sCisKKyMKKyMgVGhvc2UgY2h1bmtzIHVzZSB0aGUgbmV3LXN0eWxlICh0aGUgeHRlcm0gb2xkRnVuY3Rpb25LZXlzIHJlc291cmNlIGlzIGZhbHNlKS4KKyMgQWx0ZXJuYXRpdmVseSwgdGhlIHNhbWUgc2NoZW1lIHdpdGggb2xkLXN0eWxlIGZ1bmN0aW9uIGtleXMgYXMgaW4geHRlcm0tcjYKKyMgaXMgc2hvd24gaGVyZSAoYmVjYXVzZSB0aGF0IGlzIHVzZWQgaW4gbXJ4dnQgYW5kIG1sdGVybSk6Cit4dGVybStyNmYyfHh0ZXJtIHdpdGggb2xkRnVuY3Rpb25LZXlzIGFuZCBtb2RpZnlGdW5jdGlvbktleXM6MiwKKwlrZjE9XEVbMTF+LCBrZjEzPVxFWzExOzJ+LCBrZjE0PVxFWzEyOzJ+LCBrZjE1PVxFWzEzOzJ+LAorCWtmMTY9XEVbMTQ7Mn4sIGtmMj1cRVsxMn4sIGtmMjU9XEVbMTE7NX4sIGtmMjY9XEVbMTI7NX4sCisJa2YyNz1cRVsxMzs1fiwga2YyOD1cRVsxNDs1fiwga2YzPVxFWzEzfiwga2YzNz1cRVsxMTs2fiwKKwlrZjM4PVxFWzEyOzZ+LCBrZjM5PVxFWzEzOzZ+LCBrZjQ9XEVbMTR+LCBrZjQwPVxFWzE0OzZ+LAorCWtmNDk9XEVbMTE7M34sIGtmNTA9XEVbMTI7M34sIGtmNTE9XEVbMTM7M34sCisJa2Y1Mj1cRVsxNDszfiwga2Y2MT1cRVsxMTs0fiwga2Y2Mj1cRVsxMjs0fiwKKwlrZjYzPVxFWzEzOzR+LCB1c2U9eHRlcm0rcGNmMiwKKyMKKyMgVGhpcyBjaHVuayBpcyB1c2VkIGZvciBidWlsZGluZyB0aGUgVlQyMjAvU3VuL1BDIGtleWJvYXJkIHZhcmlhbnRzLgoreHRlcm0tYmFzaWN8bW9kZXJuIHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIC0gY29tbW9uLAorCU9UYnMsIGFtLCBiY2UsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIEFYLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGFpcnMjNjQsCisJYWNzYz1gYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XEVbPzEybFxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPzEyOzI1aCwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwlmbGFzaD1cRVs/NWgkPDEwMC8+XEVbPzVsLCBob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywKKwlodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwKKwlpbmQ9XkosIGludmlzPVxFWzhtLCBpczI9XEVbIXBcRVs/Mzs0bFxFWzRsXEU+LCBrYnM9XkgsCisJa21vdXM9XEVbTSwgbWMwPVxFW2ksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBtZW1sPVxFbCwKKwltZW11PVxFbSwgb3A9XEVbMzk7NDltLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtYWNzPVxFKEIsIHJtYW09XEVbPzdsLCBybWN1cD1cRVs/MTA0OWwsIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWxcRT4sIHJtbT1cRVs/MTAzNGwsIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEVjLCByczI9XEVbIXBcRVs/Mzs0bFxFWzRsXEU+LCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZXRiPVxFWzQlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2V0Zj1cRVszJT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXNncj0lPyVwOSV0XEUoMCVlXEUoQiU7XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNyV0OzglO20sCisJc2dyMD1cRShCXEVbbSwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsIHNtY3VwPVxFWz8xMDQ5aCwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz8xaFxFPSwgc21tPVxFWz8xMDM0aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHZwYT1cRVslaSVwMSVkZCwgdXNlPXZ0MTAwK2VucSwKKworIyBGcm9tOiBEYXZpZCBKLiBNYWNLZW56aWUgPGRqbUB2YS5wdWJuaXguY29tPiwgMTQgTm92IDE5OTcKKyMgSW4gcmV0cm9zcGVjdCwgc29tZXRoaW5nIGxpa2UgeHRlcm0tcjYgd2FzIGludGVuZGVkIGhlcmUgLVRECit4dGVybS14aXx4dGVybSBvbiBYSSBHcmFwaGljcyBBY2NlbGVyYXRlZCBYIHVuZGVyIEJTRC9PUyAzLjEsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHVzZT14dGVybS14Zjg2LXYzMywKKworIyBUaGlzIGlzIG9uZSBvZiB0aGUgdmFyaWFudHMgb2YgWEZyZWU4NiAzLjMgeHRlcm0sIHVwZGF0ZWQgZm9yIDQuMCAoVC5EaWNrZXkpCit4dGVybS0xNmNvbG9yfHh0ZXJtIHdpdGggMTYgY29sb3JzIGxpa2UgYWl4dGVybSwKKwl1c2U9aWJtKzE2Y29sb3IsIHVzZT14dGVybS1uZXcsCisKKyMgVGhpcyBpcyBhIGNvbXBpbGUtdGltZSBmZWF0dXJlIG9mIFhGcmVlODYgeHRlcm0gYmVnaW5uaW5nIHdpdGgKKyMgcGF0Y2ggIzExMSAoMTk5OS83LzEwKSAtVEQKK3h0ZXJtKzI1NmNvbG9yfHh0ZXJtIDI1Ni1jb2xvciBmZWF0dXJlLAorCWNjYywKKwljb2xvcnMjMjU2LCBwYWlycyMzMjc2NywKKwlpbml0Yz1cRV00OyVwMSVkO3JnYlw6JXAyJXsyNTV9JSolezEwMDB9JS8lMi4yWC8lcDMlezI1NX0lKiV7MTAwMH0lLyUyLjJYLyVwNCV7MjU1fSUqJXsxMDAwfSUvJTIuMlhcRVxcLAorCXNldGFiPVxFWyU/JXAxJXs4fSU8JXQ0JXAxJWQlZSVwMSV7MTZ9JTwldDEwJXAxJXs4fSUtJWQlZTQ4OzU7JXAxJWQlO20sCisJc2V0YWY9XEVbJT8lcDElezh9JTwldDMlcDElZCVlJXAxJXsxNn0lPCV0OSVwMSV7OH0lLSVkJWUzODs1OyVwMSVkJTttLAorCXNldGJALCBzZXRmQCwKKworIyBUaGlzIGlzIGEgY29tcGlsZS10aW1lIGZlYXR1cmUgb2YgWEZyZWU4NiB4dGVybSBiZWdpbm5pbmcgd2l0aAorIyBwYXRjaCAjMTE1ICgxOTk5LzkvMTgpIC1URAorIworIyBOb3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgdXNlZCBhcmUgdGhlIHNhbWUgYXMgZm9yIDI1Ni1jb2xvcnMgLSB4dGVybQorIyBoYXMgYSBkaWZmZXJlbnQgdGFibGUgb2YgZGVmYXVsdCBjb2xvciByZXNvdXJjZSB2YWx1ZXMuICBJZiBidWlsdCBmb3IKKyMgMjU2LWNvbG9ycywgaXQgY2FuIHN0aWxsIGhhbmRsZSBhbiA4OC1jb2xvciBwYWxldHRlIGJ5IHVzaW5nIHRoZSBpbml0YworIyBjYXBhYmlsaXR5LgorIworIyBBdCB0aGlzIHRpbWUgKDIwMDcvNy8xNCksIGV4Y2VwdCBmb3Igcnh2dCAyLjcueCwgbm9uZSBvZiB0aGUgb3RoZXIgdGVybWluYWxzCisjIHdoaWNoIHN1cHBvcnQgdGhlIHh0ZXJtKzI1NmNvbG9yIGZlYXR1cmUgc3VwcG9ydCB0aGUgYXNzb2NpYXRlZCBpbml0YworIyBjYXBhYmlsaXR5LiAgU28gaXQgaXMgY2FuY2VsbGVkIGluIHRoZSBlbnRyaWVzIHdoaWNoIHVzZSB0aGlzIGFuZC9vciB0aGUKKyMgeHRlcm0rMjU2Y29sb3IgYmxvY2suCisjCisjIFRoZSBkZWZhdWx0IGNvbG9yIHBhbGV0dGUgZm9yIHRoZSAyNTYtIGFuZCA4OC1jb2xvcnMgYXJlIGRpZmZlcmVudC4gIEEKKyMgZ2l2ZW4gZXhlY3V0YWJsZSB3aWxsIGhhdmUgb25lIHBhbGV0dGUgKHBlcmhhcHMgY29tcGlsZWQtaW4pLiAgSWYgdGhlIHByb2dyYW0KKyMgc3VwcG9ydHMgeHRlcm0ncyBjb250cm9sIHNlcXVlbmNlLCBpdCBjYW4gYmUgcHJvZ3JhbW1lZCB1c2luZyBpbml0Yy4KK3h0ZXJtKzg4Y29sb3J8eHRlcm0gODgtY29sb3IgZmVhdHVyZSwKKwljb2xvcnMjODgsIHBhaXJzIzc3NDQsIHVzZT14dGVybSsyNTZjb2xvciwKKworIyBUaGVzZSB2YXJpYW50cyBvZiBYRnJlZTg2IDMuOS4xNiB4dGVybSBhcmUgYnVpbHQgYXMgYSBjb25maWd1cmUgb3B0aW9uLgoreHRlcm0tMjU2Y29sb3J8eHRlcm0gd2l0aCAyNTYgY29sb3JzLAorCXVzZT14dGVybSsyNTZjb2xvciwgdXNlPXh0ZXJtLW5ldywKK3h0ZXJtLTg4Y29sb3J8eHRlcm0gd2l0aCA4OCBjb2xvcnMsCisJdXNlPXh0ZXJtKzg4Y29sb3IsIHVzZT14dGVybS0yNTZjb2xvciwKKworIyBUaGVzZSB0d28gYXJlIHVzZWQgdG8gZGVtb25zdHJhdGUgdGhlIGFueS1ldmVudCBtb3VzZSBzdXBwb3J0LCBpLmUuLCBieQorIyB1c2luZyBhbiBleHRlbmRlZCBuYW1lICJYTSIgd2hpY2ggdGVsbHMgbmN1cnNlcyB0byBwdXQgdGhlIHRlcm1pbmFsIGludG8KKyMgYSBzcGVjaWFsIG1vZGUgd2hlbiBpbml0aWFsaXppbmcgdGhlIHh0ZXJtIG1vdXNlLgoreHRlcm0tMTAwMnx0ZXN0aW5nIHh0ZXJtLW1vdXNlLAorCVhNPVxFWz8xMDAyJT8lcDElezF9JT0ldGglZWwlOywgdXNlPXh0ZXJtLW5ldywKK3h0ZXJtLTEwMDN8dGVzdGluZyB4dGVybS1tb3VzZSwKKwlYTT1cRVs/MTAwMyU/JXAxJXsxfSU9JXRoJWVsJTssIHVzZT14dGVybS1uZXcsCisKKyMgVGhpcyBpcyBhbm90aGVyIHZhcmlhbnQsIGZvciBYRnJlZTg2IDQuMCB4dGVybSAoVC5EaWNrZXkpCisjIFRoaXMgaXMgYW4gOC1iaXQgdmVyc2lvbiBvZiB4dGVybSwgd2hpY2ggZW11bGF0ZXMgREVDIHZ0MjIwIHdpdGggQU5TSSBjb2xvci4KKyMgVG8gdXNlIGl0LCB5b3VyIGRlY1Rlcm1pbmFsSUQgcmVzb3VyY2UgbXVzdCBiZSBzZXQgdG8gMjAwIG9yIGFib3ZlLgorIworIwlIVFMJXEUgSAlcMjEwCisjCVJJCVxFIE0JXDIxNQorIwlTUzMJXEUgTwlcMjE3CisjCUNTSQlcRSBbCVwyMzMKKyMKK3h0ZXJtLThiaXR8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgOC1iaXQgY29udHJvbHMgKFggV2luZG93IFN5c3RlbSksCisJT1RicywgYW0sIGJjZSwga20sIG1jNWksIG1pciwgbXNnciwgbnBjLCB4ZW5sLCBBWCwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHBhaXJzIzY0LAorCWFjc2M9YGBhYWZmZ2dpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVwyMzM1bSwgYm9sZD1cMjMzMW0sIGNidD1cMjMzWiwKKwljaXZpcz1cMjMzPzI1bCwgY2xlYXI9XDIzM0hcMjMzMkosCisJY25vcm09XDIzMz8yNWxcMjMzPzI1aCwgY3I9Xk0sIGNzcj1cMjMzJWklcDElZDslcDIlZHIsCisJY3ViPVwyMzMlcDElZEQsIGN1YjE9XkgsIGN1ZD1cMjMzJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cMjMzJXAxJWRDLCBjdWYxPVwyMzNDLCBjdXA9XDIzMyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cMjMzJXAxJWRBLCBjdXUxPVwyMzNBLCBjdnZpcz1cMjMzPzEyOzI1aCwKKwlkY2g9XDIzMyVwMSVkUCwgZGNoMT1cMjMzUCwgZGw9XDIzMyVwMSVkTSwgZGwxPVwyMzNNLAorCWVjaD1cMjMzJXAxJWRYLCBlZD1cMjMzSiwgZWw9XDIzM0ssIGVsMT1cMjMzMUssCisJZmxhc2g9XDIzMz81aCQ8MTAwLz5cMjMzPzVsLCBob21lPVwyMzNILAorCWhwYT1cMjMzJWklcDElZEcsIGh0PV5JLCBodHM9XDIxMCwgaWNoPVwyMzMlcDElZEAsCisJaWw9XDIzMyVwMSVkTCwgaWwxPVwyMzNMLCBpbmQ9XkosIGludmlzPVwyMzM4bSwKKwlpczI9XEVbNjIicFxFIEdcMjMzbVwyMzM/N2hcRT5cRTdcMjMzPzE7Mzs0OzZsXDIzMzRsXDIzM3JcRTgsCisJa2ExPVwyMTd3LCBrYTM9XDIxN3UsIGtiMj1cMjE3eSwga2JlZz1cMjE3RSwga2JzPV5ILAorCWtjMT1cMjE3cSwga2MzPVwyMTdzLCBrY2J0PVwyMzNaLCBrY3ViMT1cMjE3RCwga2N1ZDE9XDIxN0IsCisJa2N1ZjE9XDIxN0MsIGtjdXUxPVwyMTdBLCBrZGNoMT1cMjMzM34sIGtlbmQ9XDIzMzR+LAorCWtlbnQ9XDIxN00sIGtmMT1cMjMzMTF+LCBrZjEwPVwyMzMyMX4sIGtmMTE9XDIzMzIzfiwKKwlrZjEyPVwyMzMyNH4sIGtmMTM9XDIzMzI1fiwga2YxND1cMjMzMjZ+LCBrZjE1PVwyMzMyOH4sCisJa2YxNj1cMjMzMjl+LCBrZjE3PVwyMzMzMX4sIGtmMTg9XDIzMzMyfiwga2YxOT1cMjMzMzN+LAorCWtmMj1cMjMzMTJ+LCBrZjIwPVwyMzMzNH4sIGtmMz1cMjMzMTN+LCBrZjQ9XDIzMzE0fiwKKwlrZjU9XDIzMzE1fiwga2Y2PVwyMzMxN34sIGtmNz1cMjMzMTh+LCBrZjg9XDIzMzE5fiwKKwlrZjk9XDIzMzIwfiwga2hvbWU9XDIzMzF+LCBraWNoMT1cMjMzMn4sIGttb3VzPVwyMzNNLAorCWtucD1cMjMzNn4sIGtwcD1cMjMzNX4sIG1jMD1cMjMzaSwgbWM0PVwyMzM0aSwgbWM1PVwyMzM1aSwKKwltZW1sPVxFbCwgbWVtdT1cRW0sIG9wPVwyMzMzOTs0OW0sIHJjPVxFOCwgcmV2PVwyMzM3bSwKKwlyaT1cMjE1LCBybWFjcz1cRShCLCBybWFtPVwyMzM/N2wsIHJtY3VwPVwyMzM/MTA0OWwsCisJcm1pcj1cMjMzNGwsIHJta3g9XDIzMz8xbFxFPiwgcm1zbz1cMjMzMjdtLCBybXVsPVwyMzMyNG0sCisJcnMxPVxFYywKKwlyczI9XEVbNjIicFxFIEdcMjMzbVwyMzM/N2hcRT5cRTdcMjMzPzE7Mzs0OzZsXDIzMzRsXDIzM3JcRTgsCisJc2M9XEU3LCBzZXRhYj1cMjMzNCVwMSVkbSwgc2V0YWY9XDIzMzMlcDElZG0sCisJc2V0Yj1cMjMzNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZXRmPVwyMzMzJT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXNncj1cMjMzMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNyV0OzglO20lPyVwOSV0XEUoMCVlXEUoQiU7LAorCXNncjA9XDIzMzBtXEUoQiwgc21hY3M9XEUoMCwgc21hbT1cMjMzPzdoLAorCXNtY3VwPVwyMzM/MTA0OWgsIHNtaXI9XDIzMzRoLCBzbWt4PVwyMzM/MWhcRT0sCisJc21zbz1cMjMzN20sIHNtdWw9XDIzMzRtLCB0YmM9XDIzMzNnLCB1Nj1cMjMzWyVpJWQ7JWRSLAorCXU3PVxFWzZuLCB1OD1cMjMzWz8xOzJjLCB1OT1cRVtjLCB2cGE9XDIzMyVpJXAxJWRkLAorCit4dGVybS1ocHx4dGVybSB3aXRoIGhwdGVybSBmdW5jdGlvbiBrZXlzLAorCWtjbHI9XEVKLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsCisJa2RjaDE9XEVQLCBrZW5kPVxFRiwga2YxPVxFcCwga2YyPVxFcSwga2YzPVxFciwga2Y0PVxFcywKKwlrZjU9XEV0LCBrZjY9XEV1LCBrZjc9XEV2LCBrZjg9XEV3LCBraG9tZT1cRWgsIGtpY2gxPVxFUSwKKwlrbnA9XEVTLCBrcHA9XEVULCB1c2U9eHRlcm0tYmFzaWMsCisKK3h0ZXJtLXNjb3x4dGVybSB3aXRoIFNDTyBmdW5jdGlvbiBrZXlzLAorCWtiZWc9XEVbRSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cMTc3LCBrZW5kPVxFW0YsIGtmMT1cRVtNLCBrZjEwPVxFW1YsIGtmMTE9XEVbVywKKwlrZjEyPVxFW1gsIGtmMTM9XEVbWSwga2YxND1cRVtaLCBrZjE1PVxFW2EsIGtmMTY9XEVbYiwKKwlrZjE3PVxFW2MsIGtmMTg9XEVbZCwga2YxOT1cRVtlLCBrZjI9XEVbTiwga2YyMD1cRVtmLAorCWtmMjE9XEVbZywga2YyMj1cRVtoLCBrZjIzPVxFW2ksIGtmMjQ9XEVbaiwga2YyNT1cRVtrLAorCWtmMjY9XEVbbCwga2YyNz1cRVttLCBrZjI4PVxFW24sIGtmMjk9XEVbbywga2YzPVxFW08sCisJa2YzMD1cRVtwLCBrZjMxPVxFW3EsIGtmMzI9XEVbciwga2YzMz1cRVtzLCBrZjM0PVxFW3QsCisJa2YzNT1cRVt1LCBrZjM2PVxFW3YsIGtmMzc9XEVbdywga2YzOD1cRVt4LCBrZjM5PVxFW3ksCisJa2Y0PVxFW1AsIGtmNDA9XEVbeiwga2Y0MT1cRVtALCBrZjQyPVxFW1ssIGtmNDM9XEVbXFwsCisJa2Y0ND1cRVtdLCBrZjQ1PVxFW1xeLCBrZjQ2PVxFW18sIGtmNDc9XEVbYCwga2Y0OD1cRVt7LAorCWtmNT1cRVtRLCBrZjY9XEVbUiwga2Y3PVxFW1MsIGtmOD1cRVtULCBrZjk9XEVbVSwga2hvbWU9XEVbSCwKKwlraWNoMT1cRVtMLCBrbW91cz1cRVs+TSwga25wPVxFW0csIGtwcD1cRVtJLAorCXVzZT14dGVybS1iYXNpYywKKworIyBUaGUgeHRlcm0tbmV3IGRlc2NyaXB0aW9uIGhhcyBhbGwgb2YgdGhlIGZlYXR1cmVzLCBidXQgaXMgbm90IGNvbXBsZXRlbHkKKyMgY29tcGF0aWJsZSB3aXRoIHZ0MjIwLiAgSWYgeW91IGFyZSB1c2luZyBhIFN1biBvciBQQyBrZXlib2FyZCwgc2V0IHRoZQorIyBzdW5LZXlib2FyZCByZXNvdXJjZSB0byB0cnVlOgorIwkrIG1hcHMgdGhlIGVkaXRpbmcga2V5cGFkCisjCSsgaW50ZXJwcmV0cyBjb250cm9sLWZ1bmN0aW9uLWtleSBhcyBhIHNlY29uZCBhcnJheSBvZiBrZXlzLCBzbyBhCisjCSAgMTItZmtleSBrZXlib2FyZCBjYW4gc3VwcG9ydCB2dDIyMCdzIDIwLWZrZXlzLgorIwkrIG1hcHMgbnVtZXJpYyBrZXlwYWQgIisiIHRvICIsIi4KKyMJKyB1c2VzIERFQy1zdHlsZSBjb250cm9sIHNlcXVlbmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uIGtleXBhZC4KKyMKK3h0ZXJtLXZ0MjIwfHh0ZXJtIGVtdWxhdGluZyB2dDIyMCwKKwlrY2J0PVxFW1osIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2VuZD1cRVs0fiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwKKwlrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwKKwlrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjIwPVxFWzM0fiwKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga21vdXM9XEVbTSwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJdXNlPXh0ZXJtK2FwcCwgdXNlPXh0ZXJtK2VkaXQsIHVzZT14dGVybS1iYXNpYywKKwl1c2U9dnQyMjAra2V5cGFkLAorCit4dGVybS12dDUyfHh0ZXJtIGVtdWxhdGluZyBkZWMgdnQ1MiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1cRUQsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJScgJyUrJWMlcDIlJyAnJSslYywgY3V1MT1cRUEsIGVkPVxFSiwgZWw9XEVLLAorCWhvbWU9XEVILCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBuZWw9Xk1eSiwgcmk9XEVJLCBybWFjcz1cRUcsIHNtYWNzPVxFRiwKKworeHRlcm0tbm9hcHB8eHRlcm0gd2l0aCBjdXJzb3Iga2V5cyBpbiBub3JtYWwgbW9kZSwKKwlybWN1cEAsIHJta3g9XEU+LCBzbWN1cEAsIHNta3g9XEU9LCB1c2U9eHRlcm0rbm9hcHAsCisJdXNlPXh0ZXJtLAorCit4dGVybS0yNHx2czEwMHx4dGVybXN8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFggV2luZG93IFN5c3RlbSksCisJbGluZXMjMjQsIHVzZT14dGVybS1vbGQsCisKKyMgVGhpcyBpcyB4dGVybSBmb3IgbmN1cnNlcy4KK3h0ZXJtfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYIFdpbmRvdyBTeXN0ZW0pLAorCXVzZT14dGVybS1uZXcsCisKKyMgVGhlc2UgZW50cmllcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIFggdGl0bGViYXIgYW5kIGljb24gbmFtZSBhcyBhIHN0YXR1cyBsaW5lLgorIyBOb3RlIHRoYXQgdHdtIChhbmQgcG9zc2libHkgd2luZG93IG1hbmFnZXJzIGRlc2NlbmRlZCBmcm9tIGl0IHN1Y2ggYXMgdHZ0d20sCisjIGN0d20sIGFuZCB2dHdtKSB0cmFjayB3aW5kb3dzIGJ5IGljb24tbmFtZTsgdGh1cywgeW91IGRvbid0IHdhbnQgdG8gbWVzcworIyB3aXRoIGl0LgoreHRlcm0rc2x8YWNjZXNzIFggdGl0bGUgbGluZSBhbmQgaWNvbiBuYW1lLAorCWhzLAorCXdzbCM0MCwKKwlkc2w9XEVdMDtcMDA3LCBmc2w9XkcsIHRzbD1cRV0wOywgdXNlPXh0ZXJtLAoreHRlcm0rc2wtdHdtfGFjY2VzcyBYIHRpdGxlIGxpbmUgKHBhY2lmeSB0d20tZGVzY2VuZGVkIHdpbmRvdyBtYW5hZ2VycyksCisJaHMsCisJd3NsIzQwLAorCWRzbD1cRV0yO1wwMDcsIGZzbD1eRywgdHNsPVxFXTI7LCB1c2U9eHRlcm0sCisKKyMKKyMgVGhlIGZvbGxvd2luZyB4dGVybSB2YXJpYW50cyBkb24ndCBkZXBlbmQgb24geW91ciBiYXNlIHZlcnNpb24KKyMKKyMgeHRlcm0gd2l0aCBib2xkIGluc3RlYWQgb2YgdW5kZXJsaW5lCit4dGVybS1ib2xkfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYMTFSNiBXaW5kb3cgU3lzdGVtKSBzdGFuZG91dCB3L2JvbGQsCisJc21zbz1cRVs3bSwgc211bD1cRVsxbSwgdXNlPXh0ZXJtLW9sZCwKKyMgKGt0ZXJtOiB0aGlzIGhhZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzICI6S0o6VFk9YXNjaWk6IiAtLSBlc3IpCisjIChrdGVybSBzaG91bGQgbm90IGludm9rZSBERUMgR3JhcGhpY3MgYXMgdGhlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisjICAtLSBLZW5qaSBSaWtpdGFrZSkKKyMgKHByb3BlciBzZXR0aW5nIG9mIGVuYWNzLCBzbWFjcywgcm1hY3MgbWFrZXMga3Rlcm0gdG8gdXNlIERFQyBHcmFwaGljcworIyAgLS0gTUFUU1VNT1RPIFNob2ppKQorIyBrdGVybSBpbXBsZW1lbnRzIGFjc2MgdmlhIGJ1aWx0LWluIHRhYmxlIG9mIFggRHJhd2FibGUncwora3Rlcm18a3Rlcm0ga2FuamkgdGVybWluYWwgZW11bGF0b3IgKFggd2luZG93IHN5c3RlbSksCisJZXNsb2ssIGhzLAorCW5jdkAsCisJYWNzYz1gYGFhampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4fn4sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBkc2w9XEVbP0gsIGVuYWNzPSwgZnNsPVxFWz9GLAorCWttb3VzPVxFW00sIHJjPVxFOCwgcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTssCisJc2dyMD1cRVttXEUoQiwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsCisJdHNsPVxFWz9FXEVbPyVpJXAxJWRULCB1c2U9eHRlcm0tcjYsIHVzZT1lY21hK2NvbG9yLAora3Rlcm0tY29sb3J8a3Rlcm0tY298a3Rlcm0gd2l0aCBBTlNJIGNvbG9ycywKKwluY3ZALCB1c2U9a3Rlcm0sIHVzZT1lY21hK2NvbG9yLAorIyBTZWUgdGhlIG5vdGUgb24gSUNIL0lDSDEgVkVSU1VTIFJNSVIvU01JUiBuZWFyIHRoZSBlbmQgb2YgZmlsZQoreHRlcm0tbmljfHh0ZXJtIHdpdGggaWNoL2ljaDEgc3VwcHJlc3NlZCBmb3Igbm9uLWN1cnNlcyBwcm9ncmFtcywKKwlpY2hALCBpY2gxQCwgdXNlPXh0ZXJtLAorIyBGcm9tOiBNYXJrIFNoZXBwYXJkIDxraW1ibGVAbWlzdHJhbC5jby51az4sIDQgTWF5IDE5OTYKK3h0ZXJtMXx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciBpZ25vcmluZyB0aGUgYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIsCisJcm1jdXBALCBzbWN1cEAsIHVzZT14dGVybSwKKworIyBUaGlzIGRlc2NyaWJlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIGNvbG9yX3h0ZXJtLCBhbiB4dGVybSB2YXJpYW50IGZyb20KKyMgYmVmb3JlIEVDTUEtNjQgY29sb3Igc3VwcG9ydCB3YXMgZm9sZGVkIGludG8gdGhlIG1haW4tbGluZSB4dGVybSByZWxlYXNlLgorIyBUaGlzIGVudHJ5IGlzIHN0cmFpZ2h0IGZyb20gY29sb3JfeHRlcm0ncyBtYWludGFpbmVyLgorIyBGcm9tOiBKYWNvYiBNYW5kZWxzb24gPGpsbUB1Z2NzLmNhbHRlY2guZWR1PiwgMDkgTm92IDE5OTYKKyMgVGhlIFJFQURNRSdzIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBhbHNvIHNheSB0aGF0IGl0IHN1cHBvcnRzIFNHUiAyMSwgMjQsIDI1CisjIGFuZCAyNywgYnV0IHRoZXkgYXJlIG5vdCBwcmVzZW50IGluIHRoZSB0ZXJtaW5mbyBvciB0ZXJtY2FwLgorY29sb3JfeHRlcm18Y3h8Y3gxMDB8Y29sb3JfeHRlcm0gY29sb3IgdGVybWluYWwgZW11bGF0b3IgZm9yIFgsCisJT1RicywgYW0sIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjNjUsIG5jdkAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRShCXEUpMCwgaG9tZT1cRVtILCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaXMxPVxFW3JcRVttXEVbPzdoXEVbPzQ7NmxcRVs0bCwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtlbmQ9XEVbOH4sIGtmMT1cRVsxMX4sCisJa2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YyPVxFWzEyfiwKKwlrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LCBrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtob21lPVxFWzd+LCBraWNoMT1cRVsyfiwKKwlrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtY3VwPVxFPlxFWz80MTsxciwgcm1pcj1cRVs0bCwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMxPVxFKEJcMDE3XEVbclxFW21cRVsySlxFW0hcRVs/N2hcRVs/MTszOzQ7NmxcRVs0bFxFPCwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFWzBtXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLAorCXNtY3VwPVxFWz8xOzQxc1xFWz8xOzQxaFxFPSwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB1c2U9ZWNtYStjb2xvciwgdXNlPXZ0MjIwK2tleXBhZCwKKworIyBUaGUgJ254dGVybScgZGlzdHJpYnV0ZWQgd2l0aCBSZWRoYXQgTGludXggNS4yIGlzIGEgc2xpZ2h0IHJlaGFjayBvZgorIyB4dGVybS1zYl9yaWdodC1hbnNpLTNkLCB3aGljaCBpbXBsZW1lbnRzIEFOU0kgY29sb3JzLCBidXQgZG9lcyBub3Qgc3VwcG9ydAorIyBTR1IgMzkgb3IgNDkuICBTR1IgMCBkb2VzIHJlc2V0IGNvbG9ycyAoYWxvbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UpLiAgVGhpcworIyBkZXNjcmlwdGlvbiBpcyAiY29tcGF0aWJsZSIgd2l0aCBjb2xvcl94dGVybSwgcnh2dCBhbmQgWEZyZWU4NiB4dGVybSwgZXhjZXB0CisjIHRoYXQgZWFjaCBvZiB0aG9zZSBpbXBsZW1lbnRzIHRoZSBob21lLCBlbmQsIGRlbGV0ZSBrZXlzIGRpZmZlcmVudGx5LgorIworIyBSZWRoYXQgTGludXggNi54IGRpc3RyaWJ1dGVzIFhGcmVlODYgeHRlcm0gYXMgIm54dGVybSIsIHdoaWNoIHVzZXMgYmNlCisjIGNvbG9yczsgbm90ZSB0aGF0IHRoaXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgNS4yIHZlcnNpb24uCisjIGNzdyAoMjAwMi0wNS0xNSk6IG1ha2UgeHRlcm0tY29sb3IgcHJpbWFyeSBpbnN0ZWFkIG9mIG54dGVybSwgdG8KKyMgICBtYXRjaCBYRnJlZTg2J3MgeHRlcm0udGVybWluZm8gdXNhZ2UgYW5kIHByZXZlbnQgY2lyY3VsYXIgbGlua3MKK3h0ZXJtLWNvbG9yfG54dGVybXxnZW5lcmljIGNvbG9yIHh0ZXJtLAorCW5jdkAsCisJb3A9XEVbbSwgdXNlPXh0ZXJtLXI2LCB1c2U9a2xvbmUrY29sb3IsCisKKyMgdGhpcyBkZXNjcmliZXMgdGhlIGFscGhhLXZlcnNpb24gb2YgR25vbWUgdGVybWluYWwgc2hpcHBlZCB3aXRoIFJlZGhhdCA2LjAKK2dub21lLXJoNjJ8R25vbWUgdGVybWluYWwsCisJYmNlLAorCWtkY2gxPVwxNzcsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLAorCXVzZT14dGVybS1jb2xvciwKKworIyBHTk9NRSBUZXJtaW5hbCAxLjQuMC40IChSZWRoYXQgNy4yKQorIworIyBUaGlzIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdnQxMDIgd2l0aCBhIHJhbmRvbSBzZWxlY3Rpb24gb2YgZmVhdHVyZXMgZnJvbQorIyBvdGhlciB0ZXJtaW5hbHMgc3VjaCBhcyBjb2xvciBhbmQgZnVuY3Rpb24ta2V5cy4KKyMKKyMgc2hpZnQtZjEgdG8gc2hpZnQtZjEwIGFyZSBmMTEgdG8gZjIwCisjCisjIE51bUxvY2sgY2hhbmdlcyB0aGUgYXBwbGljYXRpb24ga2V5cGFkIHRvIGFwcHJveGltYXRlIHZ0MTAwIGtleXBhZCwgZXhjZXB0CisjIHRoYXQgdGhlcmUgaXMgbm8gZXNjYXBlIHNlcXVlbmNlIG1hdGNoaW5nIGNvbW1hICgsKS4KKyMKKyMgT3RoZXIgZGVmZWN0cyBvYnNlcnZlZDoKKyMJdnQxMDAgTE5NIG1vZGUgaXMgbm90IGltcGxlbWVudGVkLgorIwl2dDEwMCA4MC8xMzIgY29sdW1uIG1vZGUgaXMgbm90IGltcGxlbWVudGVkLgorIwl2dDEwMCBERUNBTE4gaXMgbm90IGltcGxlbWVudGVkLgorIwl2dDEwMCBERUNTQ05NIG1vZGUgaXMgbm90IGltcGxlbWVudGVkLCBzbyBmbGFzaCBkb2VzIG5vdCB3b3JrLgorIwl2dDEwMCBUQkMgKHRhYiByZXNldCkgaXMgbm90IGltcGxlbWVudGVkLgorIwl4dGVybSBhbHRlcm5hdGUgc2NyZWVuIGNvbnRyb2xzIGRvIG5vdCByZXN0b3JlIGN1cnNvciBwb3NpdGlvbiBwcm9wZXJseQorIwlpdCBoYW5ncyBpbiB0YWNrIGFmdGVyIHJ1bm5pbmcgZnVuY3Rpb24ta2V5cyB0ZXN0LgorZ25vbWUtcmg3MnxHTk9NRSBUZXJtaW5hbCwKKwliY2UsIGttQCwKKwljaXZpcz1cRVs/MjVsLCBjbm9ybT1cRVs/MjVoLCBrZGNoMT1cRVszfiwga2YxPVxFT1AsCisJa2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgcm1hbT1cRVs/N2wsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbMG1cMDE3LCBzbWFtPVxFWz83aCwgdGJjQCwgdXNlPXh0ZXJtLWNvbG9yLAorCisjIEdOT01FIFRlcm1pbmFsIDIuMC4xIChSZWRoYXQgOC4wKQorIworIyBEb2N1bWVudGF0aW9uIG5vdyBjbGFpbXMgaXQgaW1wbGVtZW50cyB2dDIyMCAod2hpY2ggaXMgZGVtb25zdHJhYmx5IGZhbHNlKS4KKyMgSG93ZXZlciwgaXQgZG9lcyBpbXBsZW1lbnQgRUNILCB3aGljaCBpcyBhIHZ0MjIwIGZlYXR1cmUuICBBbmQgdGhlcmUgYXJlCisjIHdvcmthYmxlIHZ0MTAwIExOTSwgREVDQUxOLCBERUNTTk0gbW9kZXMsIG1ha2luZyBpdCBwb3NzaWJsZSB0byBkaXNwbGF5CisjIG1vcmUgb2YgaXRzIGJ1Z3MgdXNpbmcgdnR0ZXN0LgorIworIyBIb3dldmVyLCBub3RlIHRoYXQgYmNlIGFuZCBtc2dyIGFyZSBicm9rZW4gaW4gdGhpcyByZWxlYXNlLiAgVGFicyAodGJjIGFuZAorIyBodHMpIGFyZSBicm9rZW4gYXMgd2VsbC4gIFNvbWV0aW1lcyBmbGFzaCAoYXMgaW4geHRlcm0tbmV3KSB3b3Jrcy4KKyMKKyMga2YxIGFuZCBrZjEwIGFyZSBub3QgdGVzdGVkIHNpbmNlIHRoZXkncmUgYXNzaWduZWQgKGhhcmRjb2RlZD8pIHRvIG1lbnUKKyMgb3BlcmF0aW9ucy4gIFNoaWZ0LXRhYiBnZW5lcmF0ZXMgYSBkaXN0aW5jdCBzZXF1ZW5jZSBzbyBpdCBjYW4gYmUgYXJndWVkCisjIHRoYXQgaXQgaW1wbGVtZW50cyBrY2J0LgorZ25vbWUtcmg4MHxHTk9NRSBUZXJtaW5hbCwKKwliY2VALCBtc2dyQCwKKwllY2g9XEVbJXAxJWRYLCBmbGFzaD1cRVs/NWgkPDEwMC8+XEVbPzVsLCBrYnM9XDE3NywKKwlrY2J0PVxFXkksIG9wPVxFWzM5OzQ5bSwgdXNlPWdub21lLXJoNzIsCisKKyMgR05PTUUgVGVybWluYWwgMi4yLjEgKFJlZGhhdCA5LjApCisjCisjIGJjZSBhbmQgbXNnciBhcmUgcmVwYWlyZWQuCitnbm9tZS1yaDkwfEdOT01FIFRlcm1pbmFsLAorCWJjZSwgbXNnciwKKwlocGE9XEVbJWklcDElZEcsIGtEQz1cRVszOzJ+LCBrTEZUPVxFTzJELCBrUklUPVxFTzJDLAorCWtiMj1cRVtFLCBrY2J0PVxFW1osIGtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdGJjPVxFWzNnLAorCXZwYT1cRVslaSVwMSVkZCwgdXNlPXh0ZXJtK3BjZjAsIHVzZT14dGVybStwY2ZrZXlzLAorCXVzZT1nbm9tZS1yaDgwLAorCisjIEdOT01FIFRlcm1pbmFsIDIuMTQuMiAoRmVkb3JhIENvcmUgNSkKKyMgRWQgQ2F0bXVyIG5vdGVzIHRoYXQgZ25vbWUtdGVybWluYWwgaGFzIHJlY29nbml6ZWQgc29mdC1yZXNldCBzaW5jZSBNYXkgMjAwMi4KK2dub21lLWZjNXxHTk9NRSBUZXJtaW5hbCwKKwlyczE9XEVjLAorCXJzMj1cRTdcRVtyXEU4XEVbbVxFWz83aFxFWyFwXEVbPzE7Mzs0OzZsXEVbNGxcRT5cRVs/MTAwMGxcRVs/MjVoLAorCXVzZT1hbnNpK2VucSwgdXNlPXh0ZXJtK3BjYzAsIHVzZT1nbm9tZS1yaDkwLAorCisjIEdOT01FIFRlcm1pbmFsIDIuMTguMSAoMjAwNyBzbmFwc2hvdCkKKyMKKyMgRm9yIGFueSAicmVjZW50IiB2ZXJzaW9uIG9mIGdub21lLXRlcm1pbmFsLCBpdCBpcyBmdXRpbGUgdG8gYXR0ZW1wdCB0bworIyBzdXBwb3J0IG1vZGlmaWVycyBvbiBjdXJzb3ItIGFuZCBrZXlwYWQga2V5cyBiZWNhdXNlIHRoZSBwcm9ncmFtIHVzdWFsbHkKKyMgaXMgaGFyZGNvZGVkIHRvIHNldCAkVEVSTSB0byAieHRlcm0iLCBhbmQgb24gc3RhcnR1cCwgaXQgYnVpbGRzIGEgc3Vic2V0CisjIG9mIHRoZSBrZXlzICh3aGljaCBtb3JlL2xlc3MgY29ycmVzcG9uZCB0byB0aGUgdGVybWNhcCB2YWx1ZXMpLCBhbmQgd2lsbAorIyBpbnRlcnByZXQgdGhvc2UgYWNjb3JkaW5nIHRvIHRoZSAkVEVSTSB2YWx1ZSwgYnV0IG90aGVycyBub3QgaW4gdGhlCisjIHRlcm1pbmZvIGFjY29yZGluZyB0byBzb21lIGNvbnN0YW50bHkgY2hhbmdpbmcgc2V0IG9mIGhhY2tlciBndWlkZWxpbmVzIC1URAorZ25vbWUtMjAwN3xHTk9NRSBUZXJtaW5hbCBzbmFwc2hvdCAyLjE4LjEsCisJdXNlPXh0ZXJtK3BjYzIsIHVzZT1nbm9tZS1mYzUsCisKKyMgR05PTUUgVGVybWluYWwgMi4yMi4zICgyMDA4IHNuYXBzaG90KQorIworIyBJbiB2dHRlc3QsIGl0IGNsYWltcyB0byBiZSBhIHZ0MjIwIHdpdGggbmF0aW9uYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLXNldHMsCisjIGJ1dCBhc2lkZSBmcm9tIHRoZSBpZGVudGlmaWVyIHN0cmluZywgaW1wbGVtZW50cyBvbmx5IGEgc21hbGwgZnJhY3Rpb24gb2YKKyMgdnQyMjAncyBiZWhhdmlvciwgd2hpY2ggd2lsbCBtYWtlIGl0IGxlc3MgdXNhYmxlIG9uIGEgVk1TIHN5c3RlbSAodW5jbGVhcgorIyB3aGF0IHRoZSBpbnRlbnQgb2YgdGhlIGRldmVsb3BlciBpcywgc2luY2UgdGhlIE5SQyBmZWF0dXJlIGV4cG9zZWQgaW4gdnR0ZXN0CisjIGJ5IHRoaXMgY2hhbmdlIGRvZXMgbm90IHdvcmspLgorZ25vbWUtMjAwOHxHTk9NRSBUZXJtaW5hbCBzbmFwc2hvdCAyLjIyLjMsCisJdXNlPWdub21lK3BjZmtleXMsIHVzZT1nbm9tZS0yMDA3LAorCisjIEdOT01FIHRlcm1pbmFsIG1heSBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgY29udGVudHMgb2YgdGhlICJ4dGVybSIgdGVybWluZm8gdG8KKyMgc3VwcGx5IGtleSBpbmZvcm1hdGlvbiB3aGljaCBpcyBub3QgYnVpbHQgaW50byB0aGUgcHJvZ3JhbS4gIFdpdGggMi4yMi4zLAorIyB0aGlzIGxpc3QgaXMgYnVpbHQgaW50byB0aGUgcHJvZ3JhbSAod2hpY2ggYWRkcmVzc2VzIHRoZSBpbmFkdmVydGFudCB1c2Ugb2YKKyMgcmFuZG9tIHRlcm1pbmZvIGRhdGEsIHRob3VnaCB1c2luZyBhIHNldCBvZiB2YWx1ZXMgd2hpY2ggZG9lcyBub3QgY29ycmVzcG9uZAorIyB0byBhbnkgdGhhdCB4dGVybSBwcm9kdWNlcyAtIHN0aWxsIG5vdCBzb2x2aW5nIHRoZSBwcm9ibGVtIHRoYXQgR05PTUUKKyMgdGVybWluYWwgaGFyZGNvZGVzIHRoZSAkVEVSTSB2YXJpYWJsZSBhcyAieHRlcm0iKS4KKyMKKyMJdGVybWluZm8JbW9kaWZpZXIJY29kZQlrZXlzCisjCWtmMTMta2YyNAlzaGlmdAkJMglGMSB0byBGMTIKKyMJa2YyNS1rZjM2CWNvbnRyb2wJCTUJRjEgdG8gRjEyCisjCWtmMzcta2Y0OAlzaGlmdC9jb250cm9sCTYJRjEgdG8gRjEyCisjCWtmNDkta2Y2MAlhbHQJCTMJRjEgdG8gRjEyCisjCWtmNjEta2Y2MwlzaGlmdC1hbHQJNAlGMSB0byBGMworIworIyBUaGUgcGFyYW1ldGVycyB3aXRoIFxFTyAoU1MzKSBhcmUgdGVjaG5pY2FsbHkgYW4gZXJyb3IsIHNpbmNlIFNTMyBzaG91bGQgaGF2ZQorIyBubyBwYXJhbWV0ZXJzLiAgVGhpcyBhcHBlYXJzIHRvIGJlIHJvdGUgY29weWluZyBiYXNlZCBvbiB4dGVybStwY2MwLgorZ25vbWUrcGNma2V5c3xnbm9tZSB2YXJpYXRpb24gb24geHRlcm0rcGNma2V5cywKKwlrZjE9XEVPUCwga2YxMz1cRU8xOzJQLCBrZjE0PVxFTzE7MlEsIGtmMTU9XEVPMTsyUiwKKwlrZjE2PVxFTzE7MlMsIGtmMj1cRU9RLCBrZjI1PVxFTzE7NVAsIGtmMjY9XEVPMTs1USwKKwlrZjI3PVxFTzE7NVIsIGtmMjg9XEVPMTs1Uywga2YzPVxFT1IsIGtmMzc9XEVPMTs2UCwKKwlrZjM4PVxFTzE7NlEsIGtmMzk9XEVPMTs2Uiwga2Y0PVxFT1MsIGtmNDA9XEVPMTs2UywKKwlrZjQ5PVxFTzE7M1AsIGtmNTA9XEVPMTszUSwga2Y1MT1cRU8xOzNSLCBrZjUyPVxFTzE7M1MsCisJa2Y2MT1cRU8xOzRQLCBrZjYyPVxFTzE7NFEsIGtmNjM9XEVPMTs0UiwKKwl1c2U9eHRlcm0rcGNma2V5cywKKworZ25vbWV8R05PTUUgVGVybWluYWwsCisJdXNlPWdub21lLTIwMDgsCisKKyMgcGFsZXR0ZSBpcyBoYXJkY29kZWQuLi4KK2dub21lLTI1NmNvbG9yfEdOT01FIFRlcm1pbmFsIHdpdGggeHRlcm0gMjU2LWNvbG9ycywKKwlpbml0Y0AsIHVzZT14dGVybSsyNTZjb2xvciwgdXNlPWdub21lLAorCisjIFhGQ0UgVGVybWluYWwgMC4yLjUuNGJldGEyCisjCisjIFRoaXMgaXMgYmFzZWQgb24gc29tZSBvZiB0aGUgc2FtZSBzb3VyY2UgY29kZSwgZS5nLiwgdGhlIFZURSBsaWJyYXJ5LCBhcworIyBnbm9tZS10ZXJtaW5hbCwgYnV0IGhhcyBmZXdlciBmZWF0dXJlcywgZmFpbHMgbW9yZSBzY3JlZW5zIGluIHZ0dGVzdC4KKyMgU2luY2UgbW9zdCBvZiB0aGUgdGVybWluZm8tcmVsYXRlZCBiZWhhdmlvciBpcyBkdWUgdG8gdGhlIFZURSBsaWJyYXJ5LAorIyB0aGUgdGVybWluZm8gaXMgdGhlIHNhbWUgYXMgZ25vbWUtdGVybWluYWwuCit4ZmNlfFhmY2UgVGVybWluYWwsCisJdXNlPWdub21lLAorCisjIE11bHRpLUdub21lLVRlcm1pbmFsIDEuNi4yCisjCisjIFRoaXMgZG9lcyBub3QgdXNlIFZURSwgYW5kIGRvZXMgaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3IgKGNvbXBhcmUgeGZjZSBhbmQKKyMgZ25vbWUpLgorbWd0fE11bHRpIEdOT01FIFRlcm1pbmFsLAorCWluZG49XEVbJXAxJWRTLCByaW49XEVbJXAxJWRULCB1c2U9eHRlcm0teGY4Ni12MzMzLAorCisjIFRoaXMgaXMga3Z0IDAtMTguNywgc2hpcHBlZCB3aXRoIFJlZGhhdCA2LjAgKHRob3VnaCB3aGV0aGVyIGl0IHN1cHBvcnRzIGJjZQorIyBvciBub3QgaXMgZGViYXRhYmxlKS4KK2t2dHxLREUgdGVybWluYWwsCisJYmNlLCBrbUAsCisJa2RjaDE9XDE3Nywga2VuZD1cRVtGLCBraG9tZT1cRVtILCB1c2U9eHRlcm0tY29sb3IsCisKKyMgS29uc29sZSAxLjAuMQorIyAoZm9ybWVybHkga25vd24gYXMga3Z0KQorIworIyBUaGlzIHByb2dyYW0gaGFyZGNvZGVzICRURVJNIHRvICd4dGVybScsIHdoaWNoIGlzIG5vdCBhY2N1cmF0ZS4gIEhvd2V2ZXIsIHRvCisjIHNpbXBsaWZ5IHRoaXMgZW50cnkgKGFuZCBwb2ludCBvdXQgd2h5IGtvbnNvbGUgaXNuJ3QgeHRlcm0pLCB3ZSBiYXNlIHRoaXMgb24KKyMgeHRlcm0tcjYuICBUaGUgZGVmYXVsdCBrZXlib2FyZCBhcHBlYXJzIHRvIGJlICdsaW51eCcuCisjCisjIE5vdGVzOgorIyBhKSBrb25zb2xlIGltcGxlbWVudHMgc2V2ZXJhbCBmZWF0dXJlcyBmcm9tIFhGcmVlODYgeHRlcm0sIHRob3VnaCBub25lIG9mCisjICAgIHRoYXQgaXMgZG9jdW1lbnRlZCAtIGV4Y2VwdCBvZiBjb3Vyc2UgaW4gaXRzIHNvdXJjZSBjb2RlIC0gYXBwYXJlbnRseQorIyAgICBiZWNhdXNlIGl0cyBpbXBsZW1lbnRvcnMgYXJlIHVuYWNjdXN0b21lZCB0byByZWFkaW5nIGRvY3VtZW50YXRpb24gLSBhcworIyAgICBldmlkZW5jZWQgYnkgdGhlIHNwYXJzZSBhbmQgcG9vcmx5IGVkaXRlZCBkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHdpdGgKKyMgICAga29uc29sZS4gIFNvbWUgZmVhdHVyZXMgc3VjaCBhcyB0aGUgMTA0OSBwcml2YXRlIG1vZGUgYXJlIHJlY29nbml6ZWQgYnV0CisjICAgIGluY29ycmVjdGx5IGltcGxlbWVudGVkIGFzIGEgZHVwbGljYXRlIG9mIHRoZSA0NyBwcml2YXRlIG1vZGUuCisjIGIpIGV2ZW4gd2l0aCB0aGUgInZ0MTAwIChoaXN0b3JpY2FsKSIga2V5Ym9hcmQgc2V0dGluZywgdGhlIG51bWVyaWMga2V5cGFkCisjICAgIHNlbmRzIFBDLXN0eWxlIGVzY2FwZXMgcmF0aGVyIHRoYW4gdnQxMDAuCisjIGMpIGZhaWxzIHZ0dGVzdCBtZW51IDMgKFRlc3Qgb2YgY2hhcmFjdGVyIHNldHMpIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvcGVybHkKKyMgICAgcGFyc2Ugc29tZSBjb250cm9sIHNlcXVlbmNlcy4gIEFsc28gZmFpbHMgdnR0ZXN0IFByaW1hcnkgRGV2aWNlIEF0dHJpYnV0ZXMKKyMgICAgYnkgc2VuZGluZyBhIGJvZ3VzIGNvZGUgKGluIHRoZSBzb3VyY2UgaXQgc2F5cyBpdCdzIHN1cHBvc2VkIHRvIGJlIGEKKyMgICAgdnQyMjAsIHdoaWNoIGlzIGRvdWJseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdnQyMjAKKyMgICAgY29udHJvbCBzZXF1ZW5jZXMgZXhjZXB0IGZvciBhIGZldyBzcGVjaWFsIGNhc2VzKS4gIFRyZWF0IGl0IGFzIGEKKyMgICAgbWlsZGx5LWJyb2tlbiB2dDEwMi4KKyMKKyMgVXBkYXRlIGZvciBrb25zb2xlIDEuMy4yOgorIyAgICBUaGUgMTA0OSBwcml2YXRlIG1vZGUgd29ya3MgKGJ1dCBzZWUgdGhlIG90aGVyIHh0ZXJtIHNjcmVlbnMgaW4gdnR0ZXN0KS4KKyMgICAgUHJpbWFyeSBEZXZpY2UgQXR0cmlidXRlcyBub3cgcmV0dXJucyB0aGUgY29kZSBmb3IgYSB2dDEwMCB3aXRoIGFkdmFuY2VkCisjICAgIHZpZGVvIG9wdGlvbi4gIFBlcmhhcHMgdGhhdCdzIGludGVuZGVkIHRvIGJlIGEgIm1pbGRseS1icm9rZW4gdnQxMDIiLgorIworIyBVcGRhdGVkIGZvciBrb25zb2xlIDEuNi40OgorIyAgICBhZGQga29uc29sZS1zb2xhcmlzCisjCisjIFVwZGF0ZWQgZm9yIGtvbnNvbGUgMS42LjY6CisjICAgIGFkZCBjb250cm9sLWtleSBtb2RpZmllcnMgZm9yIGZ1bmN0aW9uLWtleXMsIGV0Yy4KKyMKKyMgdnR0ZXN0IG1lbnUgMSBzaG93cyB0aGF0IGJvdGgga29uc29sZSBhbmQgZ25vbWUgdGVybWluYWwgZG8gd3JhcHBpbmcKKyMgZGlmZmVyZW50IGZyb20geHRlcm0gKGFuZCB2dDEwMCdzKS4gIFRoZXkgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBpbiB0aGlzCisjIGRldGFpbCwgYnV0IGl0IGlzIHVuY2xlYXIgd2hpY2ggY29waWVzIHRoZSBvdGhlci4KK2tvbnNvbGUtYmFzZXxLREUgY29uc29sZSB3aW5kb3csCisJYmNlLCBrbUAsIG5wYywKKwliZWxALCBibGluaz1cRVs1bSwgY2l2aXM9XEVbPzI1bCwgY25vcm09XEVbPzI1aCwKKwllY2g9XEVbJXAxJWRYLCBmbGFzaD1cRVs/NWgkPDEwMC8+XEVbPzVsLAorCWhwYT1cRVslaSVwMSVkRywgaW5kbj1cRVslcDElZFMsIGticz1cMTc3LCBrZGNoMUAsCisJa2VuZD1cRVs0fiwga2YxQCwga2YxMEAsIGtmMTFALCBrZjEyQCwga2YxM0AsIGtmMTRALCBrZjE1QCwga2YxNkAsCisJa2YxN0AsIGtmMThALCBrZjE5QCwga2YyQCwga2YyMEAsIGtmM0AsIGtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsCisJa2Y5QCwga2ZuZEAsIGtob21lPVxFWzF+LCBrc2x0QCwgcmluPVxFWyVwMSVkVCwgcm1hbT1cRVs/N2wsCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRTdcRVtyXEU4XEVbbVxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU+XEVbPzEwMDBsXEVbPzI1aCwKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFWzBtXDAxNywgc21hbT1cRVs/N2gsIHZwYT1cRVslaSVwMSVkZCwKKwl1c2U9ZWNtYStjb2xvciwgdXNlPXh0ZXJtLXI2LAora29uc29sZS1saW51eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBsaW51eCBrZXlib2FyZCwKKwlrZGNoMT1cRVszfiwga2YxPVxFW1tBLCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMTNALCBrZjE0QCwga2YxNUAsIGtmMTZALCBrZjE3QCwga2YxOEAsIGtmMTlALAorCWtmMj1cRVtbQiwga2YyMEAsIGtmMz1cRVtbQywga2Y0PVxFW1tELCBrZjU9XEVbW0UsCisJa2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwl1c2U9a29uc29sZS1iYXNlLAora29uc29sZS1zb2xhcmlzfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIFNvbGFyaXMga2V5Ym9hcmQsCisJa2JzPV5ILCBrZW5kPVxFWzR+LCBraG9tZT1cRVsxfiwgdXNlPWtvbnNvbGUtdnQxMDAsCisjIEtERSdzICJYRnJlZTg2IDMueC54IiBrZXlib2FyZCBpcyBiYXNlZCBvbiByZWFkaW5nIHRoZSB4dGVybSB0ZXJtaW5mbyByYXRoZXIKKyMgdGhhbiB0ZXN0aW5nIHRoZSBjb2RlLgora29uc29sZS14ZjN4fEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIGtleWJvYXJkIGZvciBYRnJlZTg2IDMueCB4dGVybSwKKwlrZW5kPVxFWzR+LCBraG9tZT1cRVsxfiwgdXNlPWtvbnNvbGUtdnQxMDAsCisjIFRoZSB2YWx1ZSBmb3Iga2JzIHJlZmxlY3RzIGxvY2FsIGN1c3RvbWl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHNldHRpbmdzIHVzZWQKKyMgZm9yIFhGcmVlODYgeHRlcm0uCitrb25zb2xlLXhmNHh8S0RFIGNvbnNvbGUgd2luZG93IHdpdGgga2V5Ym9hcmQgZm9yIFhGcmVlODYgNC54IHh0ZXJtLAorCWtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUrcGNma2V5cywKKwl1c2U9a29uc29sZS12dDEwMCwKKyMgS29uc29sZSBkb2VzIG5vdCBpbXBsZW1lbnQgc2hpZnRlZCBjdXJzb3Ita2V5cy4KK2tvbnNvbGUrcGNma2V5c3xrb25zb2xlIHN1YnNldCBvZiB4dGVybStwY2ZrZXlzLAorCWtMRlRALCBrUklUQCwga2NidD1cRVtaLCBraW5kQCwga3JpQCwga0ROQCwga1VQQCwgdXNlPXh0ZXJtK3BjYzIsCisJdXNlPXh0ZXJtK3BjZjAsCisjIEtERSdzICJ2dDEwMCIga2V5Ym9hcmQgaGFzIG5vIHJlbGF0aW9uc2hpcCB0byBhbnkgdGVybWluYWwgdGhhdCBERUMgbWFkZSwgYnV0CisjIGl0IGlzIHN0aWxsIHVzZWZ1bCBmb3IgZGVyaXZpbmcgdGhlIG90aGVyIGVudHJpZXMuCitrb25zb2xlLXZ0MTAwfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0MTAwIChzaWMpIGtleWJvYXJkLAorCWticz1cMTc3LCBrZGNoMT1cRVszfiwga2VuZD1cRVtGLCBrZjE9XEVbMTF+LCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTNALCBrZjE0QCwga2YxNUAsIGtmMTZALCBrZjE3QCwKKwlrZjE4QCwga2YxOUAsIGtmMj1cRVsxMn4sIGtmMjBALCBrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbSCwgdXNlPWtvbnNvbGUtYmFzZSwKK2tvbnNvbGUtdnQ0MjBwY3xLREUgY29uc29sZSB3aW5kb3cgd2l0aCB2dDQyMCBwYyBrZXlib2FyZCwKKwlrYnM9XkgsIGtkY2gxPVwxNzcsIHVzZT1rb25zb2xlLXZ0MTAwLAora29uc29sZS0xNmNvbG9yfGtsb25lIG9mIHh0ZXJtLTE2Y29sb3IsCisJbmN2IzMyLCB1c2U9aWJtKzE2Y29sb3IsIHVzZT1rb25zb2xlLAorIyBtYWtlIGEgZGVmYXVsdCBlbnRyeSBmb3Iga29uc29sZQora29uc29sZXxLREUgY29uc29sZSB3aW5kb3csCisJdXNlPWtvbnNvbGUteGY0eCwKKworIyBwYWxldHRlIGlzIGhhcmRjb2RlZC4uLgora29uc29sZS0yNTZjb2xvcnxLREUgY29uc29sZSB3aW5kb3cgd2l0aCB4dGVybSAyNTYtY29sb3JzLAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9a29uc29sZSwKKworIyBUaGlzIGlzIG1sdGVybSAyLjkuMydzIG1sdGVybS50aSwgd2l0aCBzb21lIGFkZGl0aW9ucy9jb3JyZWN0aW9ucyAtVEQKKyMKKyMgSXQgaXMgbm9taW5hbGx5IGEgdnQxMDIgZW11bGF0b3IsIHdpdGggZmVhdHVyZXMgYm9ycm93ZWQgZnJvbSByeHZ0IGFuZAorIyB4dGVybS4KKyMKKyMgVGhlIGZ1bmN0aW9uIGtleXMgYXJlIG51bWJlcmVkIGJhc2VkIG9uIHNoaWZ0L2NvbnRyb2wvYWx0IG1vZGlmaWVycywgZXhjZXB0CisjIHRoYXQgdGhlIGNvbnRyb2wtbW9kaWZpZXIgaXRzZWxmIGlzIHVzZWQgdG8gc3Bhd24gYSBuZXcgY29weSBvZiBtbHRlcm0gKHRoZQorIyAiLVAiIG9wdGlvbikuICBTbyBjb250cm9sL0YxIHRvIGNvbnRyb2wvRjEyIG1heSBub3QgYmUgdXNhYmxlLCBkZXBlbmRpbmcgb24KKyMgaG93IGl0IGlzIGNvbmZpZ3VyZWQuCisjCisjCQkJCWtmMSB0byBrZjEyCVxFWzExfiAgIHRvIFxFWzI0fgorIwlzaGlmdAkJCWtmMSB0byBrZjEyCVxFWzExOzJ+IHRvIFxFWzI0OzJ+CisjCWFsdAkJCWtmMSB0byBrZjEyCVxFWzExOzN+IHRvIFxFWzI0OzN+CisjCXNoaWZ0L2FsdAkJa2YxIHRvIGtmMTIJXEVbMTE7NH4gdG8gXEVbMjQ7NH4KKyMJY29udHJvbAkJCWtmMSB0byBrZjEyCVxFWzExOzV+IHRvIFxFWzI0OzV+IChtYXliZSkKKyMJY29udHJvbC9zaGlmdAkJa2YxIHRvIGtmMTIJXEVbMTE7Nn4gdG8gXEVbMjQ7Nn4KKyMJY29udHJvbC9hbHQJCWtmMSB0byBrZjEyCVxFWzExOzd+IHRvIFxFWzI0Ozd+CisjCWNvbnRyb2wvc2hpZnQvYWx0CWtmMSB0byBrZjEyCVxFWzExOzh+IHRvIFxFWzI0Ozh+CisjCittbHRlcm18bXVsdGkgbGluZ3VhbCB0ZXJtaW5hbCBlbXVsYXRvciwKKwlhbSwgZXNsb2ssIGttLCBtYzVpLCBtaXIsIG1zZ3IsIG5wYywgeGVubCwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHBhaXJzIzY0LAorCWFjc2M9MDBgYGFhZmZnZ2hoampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPSwKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGluZG49XEVbJXAxJWRTLAorCWlzMj1cRTdcRVtyXEVbbVxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU4XEU+LAorCWticz1cMTc3LCBrY2J0PVxFW1osIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwga2RjaDE9XEVbM34sIGtlbmQ9XEVPRiwga2VudD1cRU9NLCBrZm5kPVxFWzF+LAorCWtob21lPVxFT0gsIGtpY2gxPVxFWzJ+LCBraW5kPVxFTzE7MkIsIGttb3VzPVxFW00sCisJa25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtyaT1cRU8xOzJBLCBrc2x0PVxFWzR+LCBtYzA9XEVbaSwKKwluZWw9XEVFLCBvcD1cRVszOTs0OW0sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcmluPVxFWyVwMSVkVCwgcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHJtY3VwPVxFWz8xMDQ5bCwKKwlybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRTdcRVtyXEU4XEVbbVxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU+XEVbPzEwMDBsLAorCXNjPVxFNywgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTssCisJc2dyMD1cRVttXEUoQiwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsIHNtY3VwPVxFWz8xMDQ5aCwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csIHU2PVxFWyVpJWQ7JWRSLCB1Nz1cRVs2biwgdTg9XEVbPzE7MmMsIHU5PVxFW2MsCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9bWx0ZXJtK3BjZmtleXMsIHVzZT14dGVybStyNmYyLAorCisjIFRoZSBpbnNlcnQvZGVsZXRlL2hvbWUvZW5kIGtleXMgZG8gbm90IHJlc3BvbmQgdG8gbW9kaWZpZXJzIGJlY2F1c2UgbWx0ZXJtCisjIGxvb2tzIGluIGl0cyB0ZXJtY2FwIHRvIGRlY2lkZSB3aGljaCBzdHJpbmcgdG8gc2VuZC4gIElmIGl0IHVzZWQgdGVybWluZm8KKyMgKHdoZW4gYXZhaWxhYmxlKSwgaXQgY291bGQgdXNlIHRoZSBleHRlbmRlZCBuYW1lcyBpbnRyb2R1Y2VkIGZvciB4dGVybS4KK21sdGVybStwY2ZrZXlzfGZyYWdtZW50IGZvciBQQy1zdHlsZSBma2V5cywKKwlrTEZUPVxFTzE7MkQsIGtOWFQ9XEVbNjsyfiwga1BSVj1cRVs1OzJ+LCBrUklUPVxFTzE7MkMsCisJa0ROPVxFTzE7MkIsIGtETjM9XEVPMTszQiwga0ROND1cRU8xOzRCLCBrRE41PVxFTzE7NUIsCisJa0RONj1cRU8xOzZCLCBrRE43PVxFTzE7N0IsIGtJQzU9XEVbMjs1fiwga0lDNj1cRVsyOzZ+LAorCWtMRlQzPVxFTzE7M0QsIGtMRlQ0PVxFTzE7NEQsIGtMRlQ1PVxFTzE7NUQsCisJa0xGVDY9XEVPMTs2RCwga0xGVDc9XEVPMTs3RCwga05YVDU9XEVbNjs1fiwKKwlrTlhUNj1cRVs2OzZ+LCBrUFJWNT1cRVs1OzV+LCBrUFJWNj1cRVs1OzZ+LAorCWtSSVQzPVxFTzE7M0MsIGtSSVQ0PVxFTzE7NEMsIGtSSVQ1PVxFTzE7NUMsCisJa1JJVDY9XEVPMTs2Qywga1JJVDc9XEVPMTs3Qywga1VQPVxFTzE7MkEsIGtVUDM9XEVPMTszQSwKKwlrVVA0PVxFTzE7NEEsIGtVUDU9XEVPMTs1QSwga1VQNj1cRU8xOzZBLCBrVVA3PVxFTzE7N0EsCisKKyMgRnJvbTogVGhvbWFzIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMDQgT2N0IDE5OTcKKyMgVXBkYXRlZDogT2V6Z3VlciBLZXNpbSA8a2VzaW1AbWF0aC5mdS1iZXJsaW4uZGU+IDAyIE5vdiAxOTk3CisjIE5vdGVzOgorIyByeHZ0IDIuMjFiIHVzZXMKKyMJc21hY3M9XEUoQlxFKVVeTiwgcm1hY3M9XEUoQlxFKTBeTywKKyMgYnV0IHNvbWUgYXBwbGljYXRpb25zIGRvbid0IHdvcmsgd2l0aCB0aGF0LgorIyBJdCBhbHNvIGhhcyBhbiBBSVggZXh0ZW5zaW9uCisjCWJveDI9bHFreGptd3V2dG4sCisjIGFuZAorIwllY2g9XEVbJXAxJWRYLAorIyBidXQgdGhlIGxhdHRlciBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseS4KKyMKKyMgVGhlIGRpc3RyaWJ1dGVkIHRlcm1pbmZvIHNheXMgaXQgaW1wbGVtZW50cyBocGEgYW5kIHZwYSwgYnV0IHRoZXkgYXJlIG5vdAorIyBpbXBsZW1lbnRlZCBjb3JyZWN0bHksIHVzaW5nIHJlbGF0aXZlIHJhdGhlciB0aGFuIGFic29sdXRlIHBvc2l0aW9uaW5nLgorIworIyByeHZ0IGlzIG5vcm1hbGx5IGNvbmZpZ3VyZWQgdG8gbG9vayBmb3IgInh0ZXJtIiBvciAieHRlcm0tY29sb3IiIGFzICRURVJNLgorIyBTaW5jZSByeHZ0IGlzIG5vdCByZWFsbHkgY29tcGF0aWJsZSB3aXRoIHh0ZXJtLCBpdCBzaG91bGQgYmUgY29uZmlndXJlZCBhcworIyAicnh2dCIgb3IgInJ4dnQtY29sb3IiLgorIworIyByZW1vdmVkIGRjaC9kY2gxIGJlY2F1c2UgdGhleSBhcmUgaW5jb25zaXN0ZW50IHdpdGggYmNlL2VjaCAtVEQKKyMgcmVtb3ZlIGttIGFzIHBlciB0YWNrIHRlc3QgLVRECityeHZ0LWJhc2ljfHJ4dnQgdGVybWluYWwgYmFzZSAoWCBXaW5kb3cgU3lzdGVtKSwKKwlPVGJzLCBhbSwgYmNlLCBlbywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZW5hY3M9XEUoQlxFKTAsIGZsYXNoPVxFWz81aFxFWz81bCwgaG9tZT1cRVtILCBodD1eSSwKKwlodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsCisJaW5kPV5KLCBpczE9XEVbPzQ3bFxFPVxFWz8xbCwKKwlpczI9XEVbclxFW21cRVsySlxFW0hcRVs/N2hcRVs/MTszOzQ7NmxcRVs0bCwga2JzPV5ILAorCWtjYnQ9XEVbWiwga21vdXM9XEVbTSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwgcm1hY3M9Xk8sCisJcm1jdXA9XEVbMkpcRVs/NDdsXEU4LCBybWlyPVxFWzRsLCBybWt4PVxFPiwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sCisJcnMxPVxFPlxFWzE7Mzs0OzU7NmxcRVs/N2hcRVttXEVbclxFWzJKXEVbSCwKKwlyczI9XEVbclxFW21cRVsySlxFW0hcRVs/N2hcRVs/MTszOzQ7NmxcRVs0bFxFPlxFWz8xMDAwbFxFWz8yNWgsCisJczBkcz1cRShCLCBzMWRzPVxFKDAsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFWzBtXDAxNywgc21hY3M9Xk4sIHNtY3VwPVxFN1xFWz80N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywgdXNlPXZ0MTAwK2VucSwKKwl1c2U9cnh2dCtwY2ZrZXlzLCB1c2U9dnQyMjAra2V5cGFkLAorIyBLZXkgQ29kZXMgZnJvbSByeHZ0IHJlZmVyZW5jZToKKyMKKyMgTm90ZTogU2hpZnQgKyBGMS1GMTAgZ2VuZXJhdGVzIEYxMS1GMjAKKyMKKyMgRm9yIHRoZSBrZXlwYWQsIHVzZSBTaGlmdCB0byB0ZW1wb3JhcmlseSBvdmVycmlkZSBBcHBsaWNhdGlvbi1LZXlwYWQKKyMgc2V0dGluZyB1c2UgTnVtX0xvY2sgdG8gdG9nZ2xlIEFwcGxpY2F0aW9uLUtleXBhZCBzZXR0aW5nIGlmIE51bV9Mb2NrCisjIGlzIG9mZiwgZXNjYXBlIHNlcXVlbmNlcyB0b2dnbGUgQXBwbGljYXRpb24tS2V5cGFkIHNldHRpbmcuCisjIEFsc28gbm90ZSB0aGF0IHZhbHVlcyBvZiBIb21lLCBFbmQsIERlbGV0ZSBtYXkgaGF2ZSBiZWVuIGNvbXBpbGVkCisjIGRpZmZlcmVudGx5IG9uIHlvdXIgc3lzdGVtLgorIworIyAgICAgICAgICAgICAgICAgICBOb3JtYWwgICAgICAgU2hpZnQgICAgICAgIENvbnRyb2wgICAgICBDdHJsK1NoaWZ0CisjICBUYWIgICAgICAgICAgICAgIF5JICAgICAgICAgICBFU0MgWyBaICAgICAgXkkgICAgICAgICAgIEVTQyBbIFoKKyMgIEJhY2tTcGFjZSAgICAgICAgXkggICAgICAgICAgIF4/ICAgICAgICAgICBePyAgICAgICAgICAgXj8KKyMgIEZpbmQgICAgICAgICAgICAgRVNDIFsgMSB+ICAgIEVTQyBbIDEgJCAgICBFU0MgWyAxIF4gICAgRVNDIFsgMSBACisjICBJbnNlcnQgICAgICAgICAgIEVTQyBbIDIgfiAgICBwYXN0ZSAgICAgICAgRVNDIFsgMiBeICAgIEVTQyBbIDIgQAorIyAgRXhlY3V0ZSAgICAgICAgICBFU0MgWyAzIH4gICAgRVNDIFsgMyAkICAgIEVTQyBbIDMgXiAgICBFU0MgWyAzIEAKKyMgIFNlbGVjdCAgICAgICAgICAgRVNDIFsgNCB+ICAgIEVTQyBbIDQgJCAgICBFU0MgWyA0IF4gICAgRVNDIFsgNCBACisjICBQcmlvciAgICAgICAgICAgIEVTQyBbIDUgfiAgICBzY3JvbGwtdXAgICAgRVNDIFsgNSBeICAgIEVTQyBbIDUgQAorIyAgTmV4dCAgICAgICAgICAgICBFU0MgWyA2IH4gICAgc2Nyb2xsLWRvd24gIEVTQyBbIDYgXiAgICBFU0MgWyA2IEAKKyMgIEhvbWUgICAgICAgICAgICAgRVNDIFsgNyB+ICAgIEVTQyBbIDcgJCAgICBFU0MgWyA3IF4gICAgRVNDIFsgNyBACisjICBFbmQgICAgICAgICAgICAgIEVTQyBbIDggfiAgICBFU0MgWyA4ICQgICAgRVNDIFsgOCBeICAgIEVTQyBbIDggQAorIyAgRGVsZXRlICAgICAgICAgICBFU0MgWyAzIH4gICAgRVNDIFsgMyAkICAgIEVTQyBbIDMgXiAgICBFU0MgWyAzIEAKKyMgIEYxICAgICAgICAgICAgICAgRVNDIFsgMTEgfiAgIEVTQyBbIDIzIH4gICBFU0MgWyAxMSBeICAgRVNDIFsgMjMgXgorIyAgRjIgICAgICAgICAgICAgICBFU0MgWyAxMiB+ICAgRVNDIFsgMjQgfiAgIEVTQyBbIDEyIF4gICBFU0MgWyAyNCBeCisjICBGMyAgICAgICAgICAgICAgIEVTQyBbIDEzIH4gICBFU0MgWyAyNSB+ICAgRVNDIFsgMTMgXiAgIEVTQyBbIDI1IF4KKyMgIEY0ICAgICAgICAgICAgICAgRVNDIFsgMTQgfiAgIEVTQyBbIDI2IH4gICBFU0MgWyAxNCBeICAgRVNDIFsgMjYgXgorIyAgRjUgICAgICAgICAgICAgICBFU0MgWyAxNSB+ICAgRVNDIFsgMjggfiAgIEVTQyBbIDE1IF4gICBFU0MgWyAyOCBeCisjICBGNiAgICAgICAgICAgICAgIEVTQyBbIDE3IH4gICBFU0MgWyAyOSB+ICAgRVNDIFsgMTcgXiAgIEVTQyBbIDI5IF4KKyMgIEY3ICAgICAgICAgICAgICAgRVNDIFsgMTggfiAgIEVTQyBbIDMxIH4gICBFU0MgWyAxOCBeICAgRVNDIFsgMzEgXgorIyAgRjggICAgICAgICAgICAgICBFU0MgWyAxOSB+ICAgRVNDIFsgMzIgfiAgIEVTQyBbIDE5IF4gICBFU0MgWyAzMiBeCisjICBGOSAgICAgICAgICAgICAgIEVTQyBbIDIwIH4gICBFU0MgWyAzMyB+ICAgRVNDIFsgMjAgXiAgIEVTQyBbIDMzIF4KKyMgIEYxMCAgICAgICAgICAgICAgRVNDIFsgMjEgfiAgIEVTQyBbIDM0IH4gICBFU0MgWyAyMSBeICAgRVNDIFsgMzQgXgorIyAgRjExICAgICAgICAgICAgICBFU0MgWyAyMyB+ICAgRVNDIFsgMjMgJCAgIEVTQyBbIDIzIF4gICBFU0MgWyAyMyBACisjICBGMTIgICAgICAgICAgICAgIEVTQyBbIDI0IH4gICBFU0MgWyAyNCAkICAgRVNDIFsgMjQgXiAgIEVTQyBbIDI0IEAKKyMgIEYxMyAgICAgICAgICAgICAgRVNDIFsgMjUgfiAgIEVTQyBbIDI1ICQgICBFU0MgWyAyNSBeICAgRVNDIFsgMjUgQAorIyAgRjE0ICAgICAgICAgICAgICBFU0MgWyAyNiB+ICAgRVNDIFsgMjYgJCAgIEVTQyBbIDI2IF4gICBFU0MgWyAyNiBACisjICBGMTUgKEhlbHApICAgICAgIEVTQyBbIDI4IH4gICBFU0MgWyAyOCAkICAgRVNDIFsgMjggXiAgIEVTQyBbIDI4IEAKKyMgIEYxNiAoTWVudSkgICAgICAgRVNDIFsgMjkgfiAgIEVTQyBbIDI5ICQgICBFU0MgWyAyOSBeICAgRVNDIFsgMjkgQAorIyAgRjE3ICAgICAgICAgICAgICBFU0MgWyAzMSB+ICAgRVNDIFsgMzEgJCAgIEVTQyBbIDMxIF4gICBFU0MgWyAzMSBACisjICBGMTggICAgICAgICAgICAgIEVTQyBbIDMyIH4gICBFU0MgWyAzMiAkICAgRVNDIFsgMzIgXiAgIEVTQyBbIDMyIEAKKyMgIEYxOSAgICAgICAgICAgICAgRVNDIFsgMzMgfiAgIEVTQyBbIDMzICQgICBFU0MgWyAzMyBeICAgRVNDIFsgMzMgQAorIyAgRjIwICAgICAgICAgICAgICBFU0MgWyAzNCB+ICAgRVNDIFsgMzQgJCAgIEVTQyBbIDM0IF4gICBFU0MgWyAzNCBACisjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uCisjICBVcCAgICAgICAgICAgICAgIEVTQyBbIEEgICAgICBFU0MgWyBhICAgICAgRVNDIE8gYSAgICAgIEVTQyBPIEEKKyMgIERvd24gICAgICAgICAgICAgRVNDIFsgQiAgICAgIEVTQyBbIGIgICAgICBFU0MgTyBiICAgICAgRVNDIE8gQgorIyAgUmlnaHQgICAgICAgICAgICBFU0MgWyBDICAgICAgRVNDIFsgYyAgICAgIEVTQyBPIGMgICAgICBFU0MgTyBDCisjICBMZWZ0ICAgICAgICAgICAgIEVTQyBbIEQgICAgICBFU0MgWyBkICAgICAgRVNDIE8gZCAgICAgIEVTQyBPIEQKKyMgIEtQX0VudGVyICAgICAgICAgXk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gTQorIyAgS1BfRjEgICAgICAgICAgICBFU0MgTyBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBQCisjICBLUF9GMiAgICAgICAgICAgIEVTQyBPIFEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIFEKKyMgIEtQX0YzICAgICAgICAgICAgRVNDIE8gUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gUgorIyAgS1BfRjQgICAgICAgICAgICBFU0MgTyBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBTCisjICBYS19LUF9NdWx0aXBseSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIGoKKyMgIFhLX0tQX0FkZCAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gaworIyAgWEtfS1BfU2VwYXJhdG9yICAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBsCisjICBYS19LUF9TdWJ0cmFjdCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIG0KKyMgIFhLX0tQX0RlY2ltYWwgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gbgorIyAgWEtfS1BfRGl2aWRlICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBvCisjICBYS19LUF8wICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHAKKyMgIFhLX0tQXzEgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gcQorIyAgWEtfS1BfMiAgICAgICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyByCisjICBYS19LUF8zICAgICAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHMKKyMgIFhLX0tQXzQgICAgICAgICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gdAorIyAgWEtfS1BfNSAgICAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyB1CisjICBYS19LUF82ICAgICAgICAgIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHYKKyMgIFhLX0tQXzcgICAgICAgICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gdworIyAgWEtfS1BfOCAgICAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyB4CisjICBYS19LUF85ICAgICAgICAgIDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHkKKyMKKyMgVGhlIHNvdXJjZS1jb2RlIGZvciByeHZ0IGFjdHVhbGx5IGRlZmluZXMgbWFwcGluZ3MgZm9yIEYyMS1GMzUsIHVzaW5nCisjICJFU0MgWyAzNSB+IiB0byAiRVNDIFsgIDQ5IH4iLiAgS2V5Ym9hcmRzIHdpdGggbW9yZSB0aGFuIDEyIGZ1bmN0aW9uIGtleXMKKyMgYXJlIHJhcmUsIHNvIHRoaXMgZW50cnkgdXNlcyB0aGUgc2hpZnQtIGFuZCBjb250cm9sLW1vZGlmaWVycyBhcyBpbgorIyB4dGVybStwY2ZrZXlzIHRvIGRlZmluZSBrZXlzIHBhc3QgRjEyLgorIworIyBrSUMgaXMgbm9ybWFsbHkgbm90IHVzZWQsIHNpbmNlIHJ4dnQgcGVyZm9ybXMgYSBwYXN0ZSBmb3IgdGhhdCAoc2hpZnRlZAorIyBpbnNlcnQpLCB1bmxlc3MgcHJpdmF0ZSBtb2RlIDM1IGlzIHNldC4KKyMKKyMga0ROLCBrRE41LCBrRE42LCBldGMgYXJlIGV4dGVuc2lvbnMgYmFzZWQgb24gdGhlIG5hbWVzIGZyb20geHRlcm0rcGNma2V5cyAtVEQKKyMgUmVtb3ZlZCBrRE42LCBldGMgKGNvbnRyb2wrc2hpZnQpIHNpbmNlIHJ4dnQgZG9lcyBub3QgaW1wbGVtZW50IHRoaXMgLVRECityeHZ0K3BjZmtleXN8ZnJhZ21lbnQgZm9yIFBDLXN0eWxlIGZrZXlzLAorCWtEQz1cRVszJCwga0VORD1cRVs4JCwga0hPTT1cRVs3JCwga0lDPVxFWzIkLCBrTEZUPVxFW2QsCisJa05YVD1cRVs2JCwga1BSVj1cRVs1JCwga1JJVD1cRVtjLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LCBrZWw9XEVbOFxeLAorCWtlbmQ9XEVbOH4sIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVbMTJ+LCBrZjIwPVxFWzM0fiwga2YyMT1cRVsyMyQsIGtmMjI9XEVbMjQkLAorCWtmMjM9XEVbMTFcXiwga2YyND1cRVsxMlxeLCBrZjI1PVxFWzEzXF4sIGtmMjY9XEVbMTRcXiwKKwlrZjI3PVxFWzE1XF4sIGtmMjg9XEVbMTdcXiwga2YyOT1cRVsxOFxeLCBrZjM9XEVbMTN+LAorCWtmMzA9XEVbMTlcXiwga2YzMT1cRVsyMFxeLCBrZjMyPVxFWzIxXF4sIGtmMzM9XEVbMjNcXiwKKwlrZjM0PVxFWzI0XF4sIGtmMzU9XEVbMjVcXiwga2YzNj1cRVsyNlxeLCBrZjM3PVxFWzI4XF4sCisJa2YzOD1cRVsyOVxeLCBrZjM5PVxFWzMxXF4sIGtmND1cRVsxNH4sIGtmNDA9XEVbMzJcXiwKKwlrZjQxPVxFWzMzXF4sIGtmNDI9XEVbMzRcXiwga2Y0Mz1cRVsyM0AsIGtmNDQ9XEVbMjRALAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2ZuZD1cRVsxfiwga2hvbWU9XEVbN34sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LCBrREM1PVxFWzNcXiwga0RDNj1cRVszQCwga0ROPVxFW2IsIGtETjU9XEVPYiwKKwlrRU5ENT1cRVs4XF4sIGtFTkQ2PVxFWzhALCBrSE9NNT1cRVs3XF4sIGtIT002PVxFWzdALAorCWtJQzU9XEVbMlxeLCBrSUM2PVxFWzJALCBrTEZUNT1cRU9kLCBrTlhUNT1cRVs2XF4sCisJa05YVDY9XEVbNkAsIGtQUlY1PVxFWzVcXiwga1BSVjY9XEVbNUAsIGtSSVQ1PVxFT2MsCisJa1VQPVxFW2EsIGtVUDU9XEVPYSwKKworcnh2dHxyeHZ0IHRlcm1pbmFsIGVtdWxhdG9yIChYIFdpbmRvdyBTeXN0ZW0pLAorCW5jdkAsCisJaHBhPVxFWyVpJXAxJWRHLCBrZjA9XEVbMjF+LCBzZ3IwPVxFW21cMDE3LAorCXZwYT1cRVslaSVwMSVkZCwgdXNlPXJ4dnQtYmFzaWMsIHVzZT1lY21hK2NvbG9yLAorcnh2dC1jb2xvcnxyeHZ0IHRlcm1pbmFsIGVtdWxhdG9yIChYIFdpbmRvdyBTeXN0ZW0pLAorCXVzZT1yeHZ0LAorcnh2dC0yNTZjb2xvcnxyeHZ0IDIuNy45IHdpdGggeHRlcm0gMjU2LWNvbG9ycywKKwl1c2U9eHRlcm0rMjU2Y29sb3IsIHVzZT1yeHZ0LAorcnh2dC04OGNvbG9yfHJ4dnQgMi43Ljkgd2l0aCB4dGVybSA4OC1jb2xvcnMsCisJdXNlPXh0ZXJtKzg4Y29sb3IsIHVzZT1yeHZ0LAorcnh2dC14cG18cnh2dCB0ZXJtaW5hbCBlbXVsYXRvciAoWCBXaW5kb3cgU3lzdGVtKSwKKwl1c2U9cnh2dCwKK3J4dnQtY3lnd2lufHJ4dnQgdGVybWluYWwgZW11bGF0b3IgKFggV2luZG93IFN5c3RlbSkgb24gY3lnd2luLAorCWFjc2M9MFwzMzMrXDI1N1wsXDI1Ni1cXmBcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJdXNlPXJ4dnQsCityeHZ0LWN5Z3dpbi1uYXRpdmV8cnh2dCB0ZXJtaW5hbCBlbXVsYXRvciAobmF0aXZlIE1TIFdpbmRvdyBTeXN0ZW0gcG9ydCkgb24gY3lnd2luLAorCWFjc2M9MFwzMzMrXDI1N1wsXDI1Ni1cXmBcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH5cMzc2LAorCXVzZT1yeHZ0LWN5Z3dpbiwKKworIyBUaGlzIHZhcmlhbnQgaXMgc3VwcG9zZWQgdG8gd29yayB3aXRoIHJ4dnQgMi43Ljcgd2hlbiBjb21waWxlZCB3aXRoCisjIE5PX0JSSUdIVENPTE9SIGRlZmluZWQuICByeHZ0IG5lZWRzIG1vcmUgd29yay4uLgorcnh2dC0xNmNvbG9yfHh0ZXJtIHdpdGggMTYgY29sb3JzIGxpa2UgYWl4dGVybSwKKwluY3YjMzIsIHVzZT1pYm0rMTZjb2xvciwgdXNlPXJ4dnQsCisKKyMgbXJ4dnQgMC41LjMKKyMKKyMgbXJ4dnQgaXMgYmFzZWQgb24gcnh2dCAyLjcuMTEsIGJ1dCBoYXMgYnkgZGVmYXVsdCBYVEVSTV9GS0VZUyBkZWZpbmVkLCB3aGljaAorIyBtYWtlcyBpdHMgZnVuY3Rpb24ta2V5cyBkaWZmZXJlbnQgZnJvbSBvdGhlciBmbGF2b3JzIG9mIHJ4dnQgLVRECittcnh2dHxtdWx0aXRhYmJlZCByeHZ0LAorCXVzZT14dGVybStwY2MyLCB1c2U9eHRlcm0rcjZmMiwgdXNlPXJ4dnQsCisKKyMgRnJvbTogTWljaGFlbCBKZW5uaW5ncyA8bWVqQHZhbGludXguY29tPgorIworIyBFdGVybSAwLjkuMworIworIyByZW1vdmVkIGtmMCB3aGljaCBjb25mbGljdHMgd2l0aCBrZjEwIC1URAorIyByZW1vdmUgY3Z2aXMgd2hpY2ggY29uZmxpY3RzIHdpdGggY25vcm0gLVRECisjIEV0ZXJtIGRvZXMgbm90IGltcGxlbWVudCBjb250cm9sL3NoaWZ0IGN1cnNvciBrZXlzIHN1Y2ggYXMga0RONiwgb3Iga1BSVi9rTlhUCisjIGJ1dCBkb2VzIG90aGVyd2lzZSBmb2xsb3cgdGhlIHJ4dnQrcGNma2V5cyBtb2RlbCAtVEQKKyMgcmVtb3ZlIG5vbndvcmtpbmcgZmxhc2ggLVRECisjIHJlbW92ZSBrbSBhcyBwZXIgdGFjayB0ZXN0IC1URAorRXRlcm18RXRlcm0tY29sb3J8RXRlcm0gd2l0aCB4dGVybS1zdHlsZSBjb2xvciBzdXBwb3J0IChYIFdpbmRvdyBTeXN0ZW0pLAorCWFtLCBiY2UsIGJ3LCBlbywgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJYnRucyM1LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgbG0jMCwgbmN2QCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9XEUpMCwKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaXMxPVxFWz80N2xcRT5cRVs/MWwsCisJaXMyPVxFW3JcRVttXEVbMkpcRVtIXEVbPzdoXEVbPzE7Mzs0OzZsXEVbNGwsIGtOWFRALAorCWtQUlZALCBrYTE9XEVbN34sIGthMz1cRVs1fiwga2IyPVxFT3UsIGtiZWc9XEVPdSwga2JzPV5ILAorCWtjMT1cRVs4fiwga2MzPVxFWzZ+LCBrZW50PVxFT00sIGtobHA9XEVbMjh+LCBrbW91cz1cRVtNLAorCW1jND1cRVs0aSwgbWM1PVxFWzVpLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWFtPVxFWz83bCwgcm1jdXA9XEVbMkpcRVs/NDdsXEU4LCBybWlyPVxFWzRsLCBybWt4PSwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMxPVxFPlxFWzE7Mzs0OzU7NmxcRVs/N2hcRVttXEVbclxFWzJKXEVbSCwKKwlyczI9XEVbclxFW21cRVsySlxFW0hcRVs/N2hcRVs/MTszOzQ7NmxcRVs0bFxFPlxFWz8xMDAwbFxFWz8yNWgsCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWN1cD1cRTdcRVs/NDdoLAorCXNtaXI9XEVbNGgsIHNta3g9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9dnQxMDArZW5xLCB1c2U9cnh2dCtwY2ZrZXlzLAorCXVzZT1lY21hK2NvbG9yLAorCitFdGVybS0yNTZjb2xvcnxFdGVybSB3aXRoIHh0ZXJtIDI1Ni1jb2xvcnMsCisJdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9RXRlcm0sCisKK0V0ZXJtLTg4Y29sb3J8RXRlcm0gd2l0aCA4OCBjb2xvcnMsCisJdXNlPXh0ZXJtKzg4Y29sb3IsIHVzZT1FdGVybSwKKworIyBCYXNlZCBvbiByeHZ0IDIuNC44LCBpdCBoYXMgYSBmZXcgZGlmZmVyZW5jZXMgaW4ga2V5IGJpbmRpbmdzCithdGVybXxBZnRlclN0ZXAgdGVybWluYWwsCisJa2JzPVwxNzcsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCB1c2U9cnh2dCwKKworIyB4aXRlcm0gIDAuNS01LjIKKyMgVGhpcyBpcyBub3QgYmFzZWQgb24geHRlcm0ncyBzb3VyY2UuLi4KKyMgdnR0ZXN0IHNob3dzIHNldmVyYWwgcHJvYmxlbXMgd2l0aCBrZXlib2FyZCwgY3Vyc29yLW1vdmVtZW50cy4KKyMgc2VlIGFsc28gaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3h0ZXJtL3h0ZXJtLmZhcS5odG1sI2J1Z194aXRlcm0KK3hpdGVybXxpbnRlcm5hdGlvbmFsaXplZCB0ZXJtaW5hbCBlbXVsYXRvciBmb3IgWCwKKwlrbUAsCisJa2JzPVwxNzcsIGtkY2gxPVxFWzN+LCB1c2U9a2xvbmUrY29sb3IsIHVzZT14dGVybS1yNiwKKworIyBUaGVzZSAoeHRlcm1jIGFuZCB4dGVybW0pIGFyZSBkaXN0cmlidXRlZCB3aXRoIFNvbGFyaXMuICBUaGV5IHJlZmVyIHRvIGEKKyMgdmFyaWFudCBvZiB4dGVybSB3aGljaCBpcyBhcHBhcmVudGx5IG5vIGxvbmdlciBzdXBwb3J0ZWQsIGJ1dCBhcmUgaW50ZXJlc3RpbmcKKyMgYmVjYXVzZSB0aGV5IGlsbHVzdHJhdGUgU1ZyNCBjdXJzZXMgbW91c2UgY29udHJvbHMgLSBULkRpY2tleQoreHRlcm1tfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChtb25vY3JvbWUpLAorCU9UYnMsIGFtLCBrbSwgbWlyLCBtc2dyLCB4ZW5sLAorCWJ0bnMjMywgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rQCwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbMUQsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUskPDM+LCBlbmFjcz1cRShCXEUpMCwgZ2V0bT1cRVslcDElZFksCisJaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtlbmQ9XEVbWSwga2YwPVxFT3ksCisJa2YxMD1cRU9ZLCBrZjExPVxFT1osIGtmMTI9XEVPQSwga2Y1PVxFT1QsIGtmNj1cRU9VLAorCWtmNz1cRU9WLCBrZjg9XEVPVywga2Y5PVxFT1gsIGtob21lPVxFW0gsIGttb3VzPVxFW15fLAorCWtucD1cRVtVLCBrcHA9XEVbViwgcmM9XEU4LCByZXFtcD1cRVs0OTJaLCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWFjcz1eTywgcm1jdXA9XEVAMFxFWz80ciwgcm1zbz1cRVttLAorCXJzMT1cRT5cRVsxOzM7NDs1OzZsXEVbPzdoXEVbbVxFW3JcRVsySlxFW0gsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtY3VwPVxFQDBcRVs/NHNcRVs/NGhcRUAxLAorCXNtc289XEVbN20sIHRiYz1cRVszZywgdXNlPXZ0MTAwK2Zua2V5cywKKworeHRlcm1jfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChjb2xvciksCisJY29sb3JzIzgsIG5jdiM3LCBwYWlycyM2NCwKKwlvcD1cRVsxMDBtLCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJdXNlPXh0ZXJtbSwKKworIyBGcm9tOiBEYXZpZCBKLiBNYWNLZW56aWUgPGRqbUB2YS5wdWJuaXguY29tPiAyMCBBcHIgMTk5NQorIyBIZXJlJ3MgYSB0ZXJtY2FwIGVudHJ5IEkndmUgYmVlbiB1c2luZyBmb3IgeHRlcm1fY29sb3IsIHdoaWNoIGNvbWVzCisjIHdpdGggQlNEL09TIDIuMCwgYW5kIHRoZSBYMTFSNiBjb250cmliIHRhcGUgdG9vIEkgdGhpbmsuICBCZXNpZGVzIHRoZQorIyBjb2xvciBzdHVmZiwgSSBhbHNvIGhhdmUgYSBzdGF0dXMgbGluZSBkZWZpbmVkIGFzIHRoZSB3aW5kb3cgbWFuYWdlcgorIyB0aXRsZSBiYXIuIFtJIGhhdmUgdHJhbnNsYXRlZCBpdCB0byB0ZXJtaW5mbyAtLSBFU1JdCit4dGVybS1wY29sb3J8eHRlcm0gd2l0aCBjb2xvciB1c2VkIGZvciBoaWdobGlnaHRzIGFuZCBzdGF0dXMgbGluZSwKKwlib2xkPVxFWzFtXEVbNDNtLCByZXY9XEVbN21cRVszNG0sIHNtc289XEVbN21cRVszMW0sCisJc211bD1cRVs0bVxFWzQybSwgdXNlPXh0ZXJtK3NsLCB1c2U9eHRlcm0tcjYsCisKKyMgSFAgc2hpcHMgdGhpcyAoSFBVWCA5IGFuZCAxMCksIGV4Y2VwdCBmb3IgdGhlIHBiIzk2MDAgd2hpY2ggd2FzIG1lcmdlZCBpbgorIyBmcm9tIEJTRCB0ZXJtY2FwLiAgKGhwdGVybTogIGFkZGVkIGVtcHR5IDxhY3NjPiwgd2UgaGF2ZSBubyBpZGVhIHdoYXQgQUNTCisjIGNoYXJzIGxvb2sgbGlrZSAtLWVzcikKK2hwdGVybXxYLWhwdGVybXxocCBYMTEgdGVybWluYWwgZW11bGF0b3IsCisJYW0sIGRhLCBkYiwgbWlyLCB4aHAsCisJY29scyM4MCwgbGgjMiwgbGluZXMjMjQsIGxtIzAsIGx3IzgsIG5sYWIjOCwgcGIjOTYwMCwgeG1jIzAsCisJYWNzYz0sIGJlbD1eRywgYm9sZD1cRSZkQiwgY2J0PVxFaSwgY2xlYXI9XEUmYTB5MENcRUosIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywgY3VwPVxFJmElcDElZHklcDIlZEMsCisJY3V1MT1cRUEsIGRjaDE9XEVQLCBkaW09XEUmZEgsIGRsMT1cRU0sIGVkPVxFSiQ8MT4sIGVsPVxFSywKKwlocGE9XEUmYSVwMSVkQywgaHQ9XkksIGh0cz1cRTEsIGlsMT1cRUwsIGluZD1eSiwga2JzPV5ILAorCWtjbHI9XEVKLCBrY3RhYj1cRTIsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLCBrZWQ9XEVKLCBrZWw9XEVLLCBrZjE9XEVwLAorCWtmMj1cRXEsIGtmMz1cRXIsIGtmND1cRXMsIGtmNT1cRXQsIGtmNj1cRXUsIGtmNz1cRXYsIGtmOD1cRXcsCisJa2hvbWU9XEVoLCBraHRzPVxFMSwga2ljaDE9XEVRLCBraWwxPVxFTCwga2luZD1cRVMsIGtsbD1cRUYsCisJa25wPVxFVSwga3BwPVxFViwga3JpPVxFVCwga3JtaXI9XEVSLCBrdGJjPVxFMywgbWVtbD1cRWwsCisJbWVtdT1cRW0sIHBma2V5PVxFJmYlcDElZGslcDIlbCVkTCVwMiVzLAorCXBmbG9jPVxFJmYxYSVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGZ4PVxFJmYyYSVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGxuPVxFJmYlcDElZGslcDIlbCVkZDBMJXAyJXMsIHJldj1cRSZkQiwgcmk9XEVULAorCXJtYWNzPV5PLCBybWlyPVxFUiwgcm1reD1cRSZzMEEsIHJtbG49XEUmakAsIHJtc289XEUmZEAsCisJcm11bD1cRSZkQCwKKwlzZ3I9XEUmZCU/JXA3JXQlezExNX0lYyU7JXAxJXAzJXwlcDYlfCV7Mn0lKiVwMiV7NH0lKiUrJXA0JSslcDUlezh9JSolKyV7NjR9JSslYyU/JXA5JXQlJ1wwMTYnJWMlZSUnXDAxNyclYyU7LAorCXNncjA9XEUmZEAsIHNtYWNzPV5OLCBzbWlyPVxFUSwgc21reD1cRSZzMUEsIHNtbG49XEUmakIsCisJc21zbz1cRSZkSiwgc211bD1cRSZkRCwgdGJjPVxFMywgdnBhPVxFJmElcDElZFksCisjIEhQVVggMTEgcHJvdmlkZXMgYSBjb2xvciB2ZXJzaW9uLgoraHB0ZXJtLWNvbG9yfEhQIFgxMSB0ZXJtaW5hbCBlbXVsYXRvciB3aXRoIGNvbG9yLAorCWNjYywKKwljb2xvcnMjNjQsIHBhaXJzIzgsCisJaG9tZT1cRSZhMHkwQywKKwlpbml0cD1cRSZ2JXAyJWRhJXAzJWRiJXA0JWRjJXA1JWR4JXA2JWR5JXA3JWR6JXAxJWRJLAorCW9wPVxFJnYwUywgc2NwPVxFJnYlcDElZFMsIHVzZT1ocHRlcm0sCisKKyMgVGhpcyBlbnRyeSBkZXNjcmliZXMgYW4geHRlcm0gd2l0aCBTdW4tc3R5bGUgZnVuY3Rpb24ga2V5cyBlbmFibGVkCisjIHZpYSB0aGUgWCByZXNvdXJjZSBzZXR0aW5nICJ4dGVybSpzdW5GdW5jdGlvbktleXM6dHJ1ZSIKKyMgVG8gdW5kZXJzdGFuZCA8a2YxMT4vPGtmMTI+IG5vdGUgdGhhdCBMMSxMMiBhbmQgRjExLEYxMiBhcmUgdGhlIHNhbWUuCisjIFRoZSA8a2YxMz4uLi48a2YyMD4ga2V5cyBhcmUgTDMtTDEwLiAgV2UgZG9uJ3Qgc2V0IDxrZjE2PVxFWzE5N3o+CisjIGJlY2F1c2Ugd2Ugd2FudCBpdCB0byBiZSBzZWVuIGFzIDxrY3B5Pi4KKyMgVGhlIDxrZjMxPi4uLjxrZjQ1PiBrZXlzIGFyZSBSMS1SMTUuICBXZSB0cmVhdCBzb21lIG9mIHRoZXNlIGluIGFjY29yZGFuY2UKKyMgd2l0aCB0aGVpciBTdW4ga2V5Ym9hcmQgbGFiZWxzIGluc3RlYWQuCisjIEZyb206IFNpbW9uIEouIEdlcnJhdHkgPHNqZ0B6ZW4udm9pZC5vei5hdT4gMTAgSmFuIDE5OTYKK3h0ZXJtLXN1bnx4dGVybSB3aXRoIHN1bkZ1bmN0aW9uS2V5cyB0cnVlLAorCWtiMj1cRVsyMTh6LCBrY3B5PVxFWzE5N3osIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsCisJa2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2RjaDE9XEVbM3osIGtlbmQ9XEVbMjIweiwKKwlrZW50PVxFT00sIGtmMT1cRVsyMjR6LCBrZjEwPVxFWzIzM3osIGtmMTE9XEVbMTkyeiwKKwlrZjEyPVxFWzE5M3osIGtmMTM9XEVbMTk0eiwga2YxND1cRVsxOTV6LCBrZjE1PVxFWzE5NnosCisJa2YxNz1cRVsxOTh6LCBrZjE4PVxFWzE5OXosIGtmMTk9XEVbMjAweiwga2YyPVxFWzIyNXosCisJa2YyMD1cRVsyMDF6LCBrZjM9XEVbMjI2eiwga2YzMT1cRVsyMDh6LCBrZjMyPVxFWzIwOXosCisJa2YzMz1cRVsyMTB6LCBrZjM0PVxFWzIxMXosIGtmMzU9XEVbMjEyeiwga2YzNj1cRVsyMTN6LAorCWtmMzg9XEVbMjE1eiwga2Y0PVxFWzIyN3osIGtmNDA9XEVbMjE3eiwga2Y0Mj1cRVsyMTl6LAorCWtmNDQ9XEVbMjIxeiwga2Y0NT1cRVsyMjJ6LCBrZjQ2PVxFWzIzNHosIGtmNDc9XEVbMjM1eiwKKwlrZjU9XEVbMjI4eiwga2Y2PVxFWzIyOXosIGtmNz1cRVsyMzB6LCBrZjg9XEVbMjMxeiwKKwlrZjk9XEVbMjMyeiwga2ZuZD1cRVsyMDB6LCBraGxwPVxFWzE5NnosIGtob21lPVxFWzIxNHosCisJa2ljaDE9XEVbMnosIGtucD1cRVsyMjJ6LCBrcHA9XEVbMjE2eiwga3VuZD1cRVsxOTV6LAorCXVzZT14dGVybS1iYXNpYywKK3h0ZXJtcy1zdW58c21hbGwgKDgweDI0KSB4dGVybSB3aXRoIHN1bkZ1bmN0aW9uS2V5cyB0cnVlLAorCWNvbHMjODAsIGxpbmVzIzI0LCB1c2U9eHRlcm0tc3VuLAorCisjIFRoaXMgaXMgZm9yIHRoZSBleHRlbnNpYmxlIHRlcm1pbmFsIGVtdWxhdG9yIG9uIHRoZSBYMTFSNiBjb250cmliIHRhcGUuCisjIEl0IGNvcnJlc3BvbmRzIHRvIGVtdSdzIGludGVybmFsIGVtdWxhdGlvbjoKKyMJZW11IC10ZXJtIGVtdQorIyBlbXUncyBkZWZhdWx0IHNldHMgVEVSTSB0byAieHRlcm0iLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgd2VsbCAtVEQKKyMgZml4ZXM6IHJlbW92ZSBib2d1cyBybWFjcy9zbWFjcywgY2hhbmdlIG9jIHRvIG9wLCBhZGQgYmNlLCBhbSAtVEQKKyMgZml4ZXM6IGFkZCBjaXZpcywgY25vcm0sIHNnciAtVEQKK2VtdXxlbXUgbmF0aXZlIG1vZGUsCisJYW0sIGJjZSwgbWlyLCBtc2dyLCB4b24sCisJY29sb3JzIzE1LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGFpcnMjNjQsIHZ0IzIwMCwKKwlhY3NjPTYxYVwyMDJmXDI2MGcyalwyMTNrXDIxNGxcMjE1bVwyMTZuXDIxN29cMjIwcVwyMjJzXDIyNHRcMjI1dVwyMjZ2XDIyN3dcMjMweFwyMzF+XDI0NCwKKwliZWw9XkcsIGJsaW5rPVxFVywgYm9sZD1cRVUsIGNpdmlzPVxFWiwgY2xlYXI9XEVQXEVFMDswOywKKwljbm9ybT1cRWEsIGNyPV5NLCBjc3I9XEVrJXAxJWQ7JXAyJWQ7LCBjdWI9XEVxLSVwMSVkOywKKwljdWIxPV5ILCBjdWQ9XEVwJXAxJWQ7LCBjdWQxPVxFQiwgY3VmPVxFcSVwMSVkOywgY3VmMT1cRUQsCisJY3VwPVxFRSVwMSVkOyVwMiVkOywgY3V1PVxFcC0lcDElZDssIGN1dTE9XEVBLAorCWRjaD1cRUklcDElZDssIGRjaDE9XEVJMTssIGRsPVxFUiVwMSVkOywgZGwxPVxFUjE7LAorCWVjaD1cRWolcDElZDssIGVkPVxFTiwgZWw9XEVLLCBlbDE9XEVMLCBob21lPVxFRTA7MDssIGh0PV5JLAorCWh0cz1cRWgsIGlsPVxFUSVwMSVkOywgaWwxPVxFUTE7LCBpbmQ9XEVHLAorCWlzMj1cRVNcRXIwO1xFczA7LCBrYnM9XkgsIGtjdWIxPVxFQywga2N1ZDE9XEVCLCBrY3VmMT1cRUQsCisJa2N1dTE9XEVBLCBrZGNoMT1cMTc3LCBrZW50PV5NLCBrZjA9XEVGMDAsIGtmMT1cRUYwMSwKKwlrZjEwPVxFRjEwLCBrZjExPVxFRjExLCBrZjEyPVxFRjEyLCBrZjEzPVxFRjEzLCBrZjE0PVxFRjE0LAorCWtmMTU9XEVGMTUsIGtmMTY9XEVGMTYsIGtmMTc9XEVGMTcsIGtmMTg9XEVGMTgsIGtmMTk9XEVGMTksCisJa2YyPVxFRjAyLCBrZjIwPVxFRjIwLCBrZjM9XEVGMDMsIGtmND1cRUYwNCwga2Y1PVxFRjA1LAorCWtmNj1cRUYwNiwga2Y3PVxFRjA3LCBrZjg9XEVGMDgsIGtmOT1cRUYwOSwga2ZuZD1cRWZpbmQsCisJa2ljaDE9XEVpbnMsIGtucD1cRW5leHQsIGtwcD1cRXByaW9yLCBrc2x0PVxFc2VsLAorCW9wPVxFczA7XEVyMDssIHJldj1cRVQsIHJpPVxFRiwgcm1pcj1cRVgsIHJtc289XEVTLCBybXVsPVxFUywKKwlyczI9XEVTXEVzMDtcRXIwOywgc2V0YWI9XEVzJWklcDElZDssCisJc2V0YWY9XEVyJWklcDElZDssCisJc2dyPVxFUyU/JXAxJXRcRVQlOyU/JXAyJXRcRVYlOyU/JXAzJXRcRVQlOyU/JXA0JXRcRVclOyU/JXA2JXRcRVUlOywKKwlzZ3IwPVxFUywgc21pcj1cRVksIHNtc289XEVULCBzbXVsPVxFViwgdGJjPVxFaiwKKworIyB2dDIyMCBUZXJtaW5mbyBlbnRyeSBmb3IgdGhlIEVtdSBlbXVsYXRpb24sIGNvcnJlc3BvbmRzIHRvCisjCWVtdSAtdGVybSB2dDIyMAorIyB3aXRoIE51bUxvY2sgc2V0ICh0byBtYWtlIHRoZSBrZXlwYWQgdHJhbnNtaXQga2YwLWtmOSkuCisjIGZpeGVzOiBhZGQgYW0sIHhlbmwsIGNvcnJlY3RlZCBzZ3IwIC1URAorZW11LTIyMHxFbXUtMjIwICh2dDIwMC03Yml0IG1vZGUpLAorCWFtLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzIwMCwKKwlhY3NjPWFhZmZnZ2pqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4fn4sIGJlbD1eRywKKwlibGluaz1cRVswOzVtLCBib2xkPVxFWzA7MW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbMkpcRVtILCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbMUQsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVsxQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVsxQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbMUEsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVsxUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbMU0sCisJZWQ9XEVbMEosIGVsPVxFWzBLLCBlbDE9XEVbMUssIGVuYWNzPVxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksCisJaHRzPVxFSCwgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbMUwsIGluZD1cRUQsIGlzMj1cRT5cRVs/MWxcRVs/M2xcRVs0bFxFWz83aCwKKwlrYnM9XkgsIGtjbWQ9XEVbMjl+LCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LCBrZW50PVxFT00sIGtmMD1cRU9wLCBrZjE9XEVPcSwKKwlrZjEwPVxFT2wsIGtmMTE9XEVPbSwga2YxMj1cRU9uLCBrZjEzPVxFT1AsIGtmMTQ9XEVPUSwKKwlrZjE1PVxFT1IsIGtmMTY9XEVPUywga2YyPVxFT3IsIGtmMjY9XEVbMTd+LCBrZjI3PVxFWzE4fiwKKwlrZjI4PVxFWzE5fiwga2YyOT1cRVsyMH4sIGtmMz1cRU9zLCBrZjMwPVxFWzIxfiwKKwlrZjM0PVxFWzI2fiwga2YzNz1cRVszMX4sIGtmMzg9XEVbMzJ+LCBrZjM5PVxFWzMzfiwKKwlrZjQ9XEVPdCwga2Y0MD1cRVszNH4sIGtmNT1cRU91LCBrZjY9XEVPdiwga2Y3PVxFT3csCisJa2Y4PVxFT3gsIGtmOT1cRU95LCBrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwga2ljaDE9XEVbMn4sCisJa25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtzbHQ9XEVbNH4sIHJjPVxFOCwgcmV2PVxFWzA7N20sCisJcmk9XEVNLCBybWFjcz1eTywgcm1jdXA9XEU+LCBybWt4PVxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVxFWzRsXEVbMzRsXEVbPzFsXEVbPzNsXEVbPzVsXEVbPzdoLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbSwgc21hY3M9Xk4sIHNtY3VwPVxFWz8xbFxFPSwgc21reD1cRT0sCisJc21zbz1cRVswOzdtLCBzbXVsPVxFWzA7NG0sIHRiYz1cRVszZywKKyMgQSBjb21tZXJjaWFsIHByb2R1Y3QsIFJlcG9ydGVkbHkgYSB2ZXJzaW9uIG9mIFh0ZXJtIHdpdGggYW4gT1BFTiBMT09LIFVJLAorIyBwcmludCBpbnRlcmZhY2UsIEFOU0kgWDMuNjQgY29sb3VyIGVzY2FwZSBzZXF1ZW5jZXMsIGV0Yy4gIE5ld3Nncm91cCBwb3N0aW5ncworIyBpbmRpY2F0ZSB0aGF0IGl0IGVtdWxhdGVzIG1vcmUgdGhhbiBvbmUgdGVybWluYWwsIGJ1dCBpbmNvbXBsZXRlbHkuCisjCisjIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGEgRnJlZUJTRCBidWctcmVwb3J0IGJ5IERhbmllbCBSdWR5IDxkY3J1ZHlAcGFjYmVsbC5uZXQ+CisjIEl0IGlzIGJhc2VkIG9uIHZ0MTAyJ3MgZW50cnksIHdpdGggc29tZSBzdWJ0bGUgZGlmZmVyZW5jZXMsIGJ1dCBhbHNvCisjCWhhcyBzdGF0dXMgbGluZQorIwlzdXBwb3J0cyBBTlNJIGNvbG9ycyAoZXhjZXB0IGZvciAnb3AnIHN0cmluZykKKyMJYXBwYXJlbnRseSBpbXBsZW1lbnRzIGFsdGVybmF0ZSBzY3JlZW4gbGlrZSB4dGVybQorIwlkb2VzIG5vdCB1c2UgcGFkZGluZywgb2YgY291cnNlLgorbXZ0ZXJtfHZ2MTAwfFN3aXRjaFRlcm0gYWthIG12VEVSTSwKKwlhbSwgZXNsb2ssIGhzLCBrbSwgbWlyLCBtc2dyLCB4ZW5sLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGFpcnMjNjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWRzbD1cRVs/RSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLJDwzPiwgZW5hY3M9XEUoQlxFKTAsCisJZnNsPVxFWz9GLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBrYnM9XkgsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YwPVxFT3ksCisJa2YxMD1cRU94LCBrZjU9XEVPdCwga2Y2PVxFT3UsIGtmNz1cRU92LCBrZjg9XEVPbCwga2Y5PVxFT3csCisJb3A9XEVbMTAwbSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwgcm1hY3M9Xk8sCisJcm1jdXA9XEVbMkpcRVs/NDdsXEU4LCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlyczI9XEU+XEVbMTszOzQ7NTs2bFxFWz83aFxFWzEwMG1cRVttXEVbclxFWzJKXEVbSCwKKwlzYz1cRTcsIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21jdXA9XEU3XEVbPzQ3aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXRzbD1cRVs/RVxFWz8laSVwMSVkVCwgdXNlPXZ0MTAwK2Zua2V5cywKKworIyMjIE1URVJNCisjCisjIFRoaXMgYXBwbGljYXRpb24gaXMgYXZhaWxhYmxlIGJ5IGVtYWlsIGZyb20gPG1vdXNlQFJvZGVudHMuTW9udHJlYWwuUUMuQ0E+LgorIworIyAibXRlcm0gLXR5cGUgYW5zaSIgc2V0cyAkVEVSTSB0byAiYW5zaSIKK210ZXJtLWFuc2l8QU5TSSBlbXVsYXRpb24sCisJYW0sIGJ3LCBtaXIsIG1zZ3IsCisJaXQjOCwKKwlhY3NjPWBgYWFmZmdnaWlqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwKKwllbD1cRVtLLCBob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XkksIGljaDE9LAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLCBpbmRuPVxFWyVwMSVkUywKKwlpbnZpcz1cRVs4bSwgaXMyPVxFKTBcMDE3LCBrYnM9XkgsIG5lbD1cRUUsIHJldj1cRVs3bSwKKwlyaT1cRVtULCByaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1pcj1cRVs0bCwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbSwgc21hY3M9Xk4sIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdnBhPVxFWyVpJXAxJWRkLAorIyBtdGVybSBub3JtYWxseSBzZXRzICRURVJNIHRvICJtdGVybSIKK210ZXJtfG1vdXNlLXN1bnxEZXIgTW91c2UgdGVybSwKKwlhbSwgYncsIG1pciwKKwlpdCM4LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5OLCBjdWYxPV5TLAorCWN1cD1cMDA2JXAxJWQuJXAyJWQuLCBjdXUxPV5YLCBkY2gxPV5ZLCBkbDE9XkssIGVkPV5CLCBlbD1eQywKKwlob21lPV5QLCBodD1eSSwgaWwxPV5BLCBpbmQ9XlUsIGticz1eSCwgbGw9XlIsIG5lbD1eTV5VLCByaT1eVywKKwlybWlyPV5PLCBybXNvPV5ULCBzbWlyPV5RLCBzbXNvPV5WLAorIyAibXRlcm0gLXR5cGUgZGVjYW5zaSIgc2V0cyAkVEVSTSB0byAiZGVjYW5zaSIKKyMKKyMgbm90ZToga2RjaDEsIGtmbmQsIGtzbHQgYXJlIGluIHRoZSBzb3VyY2UgY29kZSwgYnV0IGRvIG5vdCB3b3JrIC1URAorZGVjYW5zaXxBTlNJIGVtdWxhdGlvbiB3aXRoIERFQyBjb21wYXRpYmlsaXR5IGhhY2tzLAorCWFtLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29sb3JzIzgsIGl0IzgsIHBhaXJzIzY0LAorCWFjc2M9YGBhYWZmZ2dpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbmFjcz1cRShCXEUpMCwKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XkksIGljaDE9LCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1cRVtTLCBpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOG0sCisJaXMyPVxFKTBcRVtyXDAxNywga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtkY2gxPVxFWzN+LCBrZjE9XEVbMTF+LAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LAorCWtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LAorCWtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFWzEyfiwga2YyMD1cRVszNH4sCisJa2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwga2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwga3NsdD1cRVs0fiwgbmVsPVxFRSwgb3A9XEVbMG0sIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFW1QsIHJpbj1cRVslcDElZFQsIHJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttLCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHU2PVxFWyVpJWQ7JWRSLAorCXU3PVxFWzZuLCB2cGE9XEVbJWklcDElZGQsCisKKyMjIyMgTUdSCisjCisjIE1HUiBpcyBhIEJlbGwgTGFicyB3aW5kb3cgc3lzdGVtIGxpZ2h0ZXItd2VpZ2h0IHRoYW4gWC4KKyMgVGhlc2UgZW50cmllcyBkZXNjcmliZSBNR1IncyB4dGVybS1lcXVpdmFsZW50LgorIyBUaGV5IGFyZSBjb3VydGVzeSBvZiBWaW5jZW50IEJyb21hbiA8YnJvbWFuQG5vc2MubWlsPiAxNCBKYW4gMTk5NworIworCittZ3J8QmVsbGNvcmUgTUdSIChub24gWCkgd2luZG93IHN5c3RlbSB0ZXJtaW5hbCBlbXVsYXRpb24sCisJYW0sIGttLAorCWJlbD1eRywgYm9sZD1cRTJuLCBjaXZpcz1cRTloLCBjbGVhcj1eTCwgY25vcm09XEVoLCBjcj1eTSwKKwljc3I9XEUlcDElZDslcDIlZHQsIGN1YjE9XkgsIGN1ZDE9XEVmLCBjdWYxPVxFciwKKwljdXA9XEUlcDIlZDslcDElZE0sIGN1dTE9XEV1LCBjdnZpcz1cRTBoLAorCWRjaD1cRSVwMSVkRSQ8NT4sIGRjaDE9XEVFLCBkbD1cRSVwMSVkZCQ8Myo+LAorCWRsMT1cRWQkPDM+LCBlZD1cRUMsIGVsPVxFYywgaGQ9XEUxOzJmLCBodD1eSSwgaHU9XEUxOzJ1LAorCWljaD1cRSVwMSVkQSQ8NT4sIGljaDE9XEVBLCBpbD1cRSVwMSVkYSQ8Myo+LAorCWlsMT1cRWEkPDM+LCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBuZWw9Xk1eSiwgcmV2PVxFMW4sIHJtYW09XEU1UywKKwlybXNvPVxFMG4sIHJtdWw9XEUwbiwgc2dyMD1cRTBuLCBzbWFtPVxFNXMsIHNtc289XEUxbiwKKwlzbXVsPVxFNG4sCittZ3Itc3VufE1nciB3aW5kb3cgd2l0aCBTdW4ga2V5Ym9hcmQsCisJa2ExPVxFWzIxNHosIGthMz1cRVsyMTZ6LCBrYjI9XEVbMjE4eiwga2MxPVxFWzIyMHosCisJa2MzPVxFWzIyMnosIGtjcHk9XEVbMTk3eiwga2VuZD1cRVsyMjB6LCBrZW50PVxFWzI1MHosCisJa2YxPVxFWzIyNHosIGtmMTA9XEVbMjMzeiwga2YxMT1cRVsyMzR6LCBrZjEyPVxFWzIzNXosCisJa2YyPVxFWzIyNXosIGtmMz1cRVsyMjZ6LCBrZjQ9XEVbMjI3eiwga2Y1PVxFWzIyOHosCisJa2Y2PVxFWzIyOXosIGtmNz1cRVsyMzB6LCBrZjg9XEVbMjMxeiwga2Y5PVxFWzIzMnosCisJa2ZuZD1cRVsyMDB6LCBraGxwPVxFWzIwN3osIGtob21lPVxFWzIxNHosIGtucD1cRVsyMjJ6LAorCWtvcG49XEVbMTk4eiwga3BwPVxFWzIxNnosIGt1bmQ9XEVbMTk1eiwgdXNlPW1nciwKK21nci1saW51eHxNZ3Igd2luZG93IHdpdGggTGludXgga2V5Ym9hcmQsCisJa2ExPVxFW0gsIGthMz1cRVs1fiwga2IyPVxFW0csIGtjMT1cRVtZLCBrYzM9XEVbNn4sCisJa2RjaDE9XEVbM34sIGtlbmQ9XEVbNH4sIGtmMD1cRVtbSiwga2YxPVxFW1tBLCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMj1cRVtbQiwga2YzPVxFW1tDLCBrZjQ9XEVbW0QsCisJa2Y1PVxFW1tFLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwgdXNlPW1nciwKKworIyMjIyMjIyMgVU5JWCBWSVJUVUFMIFRFUk1JTkFMUywgVklSVFVBTCBDT05TT0xFUywgQU5EIFRFTE5FVCBDTElFTlRTCisjCisKKyMgQ29sdW1idXMgVU5JWCB2aXJ0dWFsIHRlcm1pbmFsLiBUaGlzIHRlcm1pbmFsIGFsc28gYXBwZWFycyBpbgorIyBVTklYIDQuMCBhbmQgc3VjY2Vzc29ycyBhcyBsaW5lIGRpc2NpcGxpbmUgMSAoPyksIGJ1dCBpcworIyB1bmRvY3VtZW50ZWQgYW5kIGRvZXMgbm90IHJlYWxseSB3b3JrIHF1aXRlIHJpZ2h0LgorY2J1bml4fGNiIHVuaXggdmlydHVhbCB0ZXJtaW5hbCwKKwlPVGJzLCBhbSwgZGEsIGRiLAorCWNvbHMjODAsIGxpbmVzIzI0LCBsbSMwLAorCWJlbD1eRywgY2xlYXI9XEVMLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFRyVwMiVjJXAxJWMsIGN1dTE9XEVBLCBkY2gxPVxFTSwgZGwxPVxFTiwgZWQ9XEVMLAorCWVsPVxFSywgaWNoMT1cRU8sIGlsMT1cRVAsIGluZD1eSiwga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFRSwgcm1zbz1cRWJeRCwgcm11bD1cRWJeQSwKKwlzbXNvPVxFYV5ELCBzbXVsPVxFYV5BLAorIyAodnJlbW90ZTogcmVtb3ZlZCBvYnNvbGV0ZSAiOm5sQDoiIC0tIGVzcikKK3ZyZW1vdGV8dmlydHVhbCByZW1vdGUgdGVybWluYWwsCisJYW1ALAorCWNvbHMjNzksIHVzZT1jYnVuaXgsCisKK3B0eXw0YnNkIHBzZXVkbyB0ZWxldHlwZSwKKwljdXA9XEVHJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBybXNvPVxFYiQsIHJtdWw9XEViISwKKwlzbXNvPVxFYSQsIHNtdWw9XEVhISwgdXNlPWNidW5peCwKKworIyBUaGUgY29kZXMgc3VwcG9ydGVkIGJ5IHRoZSB0ZXJtLmVsIHRlcm1pbmFsIGVtdWxhdGlvbiBpbiBHTlUgRW1hY3MgMTkuMzAKK2V0ZXJtfGdudSBlbWFjcyB0ZXJtLmVsIHRlcm1pbmFsIGVtdWxhdGlvbiwKKwlhbSwgbWlyLCB4ZW5sLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxSywgaG9tZT1cRVtILCBodD1eSSwgaWNoPVxFWyVwMSVkQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIHJldj1cRVs3bSwKKwlybWN1cD1cRVsySlxFWz80N2xcRTgsIHJtaXI9XEVbNGwsIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNncjA9XEVbbSwgc21jdXA9XEU3XEVbPzQ3aCwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorCisjIEVudHJpZXMgZm9yIHVzZSBieSB0aGUgYHNjcmVlbicgcHJvZ3JhbSBieSBKdWVyZ2VuIFdlaWdlcnQsCisjIE1pY2hhZWwgU2Nocm9lZGVyLCBPbGl2ZXIgTGF1bWFubi4gIFRoZSBzY3JlZW4gYW5kCisjIHNjcmVlbi13IGVudHJpZXMgY2FtZSB3aXRoIHZlcnNpb24gMy43LjEuICBUaGUgc2NyZWVuMiBhbmQgc2NyZWVuMyBlbnRyaWVzCisjIGNvbWUgZnJvbSBVbml2ZXJzaXR5IG9mIFdpc2NvbnNpbiBhbmQgbWF5IGJlIG9sZGVyLgorIyAoc2NyZWVuOiBhZGRlZCA8Y25vcm0+IG9uIEFOU0kgbW9kZWwgLS0gZXNyKQorIworIyAnc2NyZWVuJyBkZWZpbmVzIGV4dGVuc2lvbnMgdG8gdGVybWNhcC4gIFNvbWUgYXJlIHVzZWQgaW4gaXRzIHRlcm1pbmFsCisjIGRlc2NyaXB0aW9uOgorIyAgICAgIEcwICAgKGJvb2wpICBUZXJtaW5hbCBjYW4gZGVhbCB3aXRoIElTTyAyMDIyICBmb250ICBzZWxlY3Rpb24gc2VxdWVuY2VzLgorIyAgICAgIEFYICAgKGJvb2wpICBEb2VzICB1bmRlcnN0YW5kIEFOU0kgc2V0IGRlZmF1bHQgZmcvYmcgY29sb3IKKyMgICAgICAgICAgICAgICAgICAgKFxFWzM5bSAvIFxFWzQ5bSkuCisjICAgICAgUzAgICAoc3RyKSAgIFN3aXRjaCBjaGFyc2V0ICdHMCcgdG8gdGhlIHNwZWNpZmllZCBjaGFyc2V0LgorIyAgICAgIEUwICAgKHN0cikgICBTd2l0Y2ggY2hhcnNldCAnRzAnIGJhY2sgdG8gc3RhbmRhcmQgY2hhcnNldC4KKyMKKyMgdGVzdGVkIHdpdGggc2NyZWVuIDMuMDkuMDgKK3NjcmVlbnxWVCAxMDAvQU5TSSBYMy42NCB2aXJ0dWFsIHRlcm1pbmFsLAorCU9UYnMsIE9UcHQsIGFtLCBrbSwgbWlyLCBtc2dyLCB4ZW5sLCBHMCwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHBhaXJzIzY0LAorCWFjc2M9KytcLFwsLS0uLjAwYGBhYWZmZ2doaGlpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVszNGhcRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sCisJY3Z2aXM9XEVbMzRsLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRShCXEUpMCwKKwlmbGFzaD1cRWcsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpczI9XEUpMCwga2JzPV5ILCBrY2J0PVxFW1osCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YxPVxFT1AsIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga21vdXM9XEVbTSwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwgcm1hY3M9Xk8sCisJcm1jdXA9XEVbPzEwNDlsLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyM20sCisJcm11bD1cRVsyNG0sIHJzMj1cRWNcRVs/MTAwMGxcRVs/MjVoLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAxJXQ7MyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtY3VwPVxFWz8xMDQ5aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVszbSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLCBFMD1cRShCLAorCVMwPVxFKCVwMSVjLCB1c2U9ZWNtYStjb2xvciwKKyMgVGhlIGJjZSBhbmQgc3RhdHVzLWxpbmUgZW50cmllcyBhcmUgZnJvbSBzY3JlZW4gMy45LjEzIChhbmQgcmVxdWlyZSBzb21lCisjIGNoYW5nZXMgdG8gLnNjcmVlbnJjKS4KK3NjcmVlbi1iY2V8VlQgMTAwL0FOU0kgWDMuNjQgdmlydHVhbCB0ZXJtaW5hbCB3aXRoIGJjZSwKKwliY2UsIHVzZT1zY3JlZW4sCitzY3JlZW4tc3xWVCAxMDAvQU5TSSBYMy42NCB2aXJ0dWFsIHRlcm1pbmFsIHdpdGggaGFyZHN0YXR1cyBsaW5lLAorCWRzbD1cRV9cRVxcLCBmc2w9XEVcXCwgdHNsPVxFXywgdXNlPXNjcmVlbiwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEVudHJpZXMgZm9yIEdOVSBTY3JlZW4gd2l0aCAxNiBjb2xvcnMuCisjIFRob3NlIHZhcmlhdGlvbnMgcGVybWl0IHRvIGJlbmVmaXQgZnJvbSAxNiBjb2xvcnMgcGFsZXR0ZSwgYW5kIGZyb20KKyMgYm9sZCBmb250IGFuZCBibGluayBhdHRyaWJ1dGUgc2VwYXJhdGVkIGZyb20gYnJpZ2h0IGNvbG9ycy4gQnV0IHRoZXkKKyMgYXJlIGxlc3MgcG9ydGFibGUgdGhhbiB0aGUgZ2VuZXJpYyAic2NyZWVuIiA4IGNvbG9yIGVudHJpZXM6IFRoZWlyCisjIHVzYWdlIG1ha2VzIHJlYWwgc2Vuc2Ugb25seSBpZiB0aGUgdGVybWluYWxzIHlvdSBhdHRhY2ggYW5kIHJlYXR0YWNoCisjIGRvIGFsbCBzdXBwb3J0IDE2IGNvbG9yIHBhbGV0dGUuCisKK3NjcmVlbi0xNmNvbG9yfEdOVSBTY3JlZW4gd2l0aCAxNiBjb2xvcnMsCisJdXNlPWlibSsxNmNvbG9yLCB1c2U9c2NyZWVuLAorCitzY3JlZW4tMTZjb2xvci1zfEdOVSBTY3JlZW4gd2l0aCAxNiBjb2xvcnMgYW5kIHN0YXR1cyBsaW5lLAorCXVzZT1pYm0rMTZjb2xvciwgdXNlPXNjcmVlbi1zLAorCitzY3JlZW4tMTZjb2xvci1iY2V8R05VIFNjcmVlbiB3aXRoIDE2IGNvbG9ycyBhbmQgQkNFLAorCXVzZT1pYm0rMTZjb2xvciwgdXNlPXNjcmVlbi1iY2UsCisKK3NjcmVlbi0xNmNvbG9yLWJjZS1zfEdOVSBTY3JlZW4gd2l0aCAxNiBjb2xvcnMsIEJDRSwgYW5kIHN0YXR1cyBsaW5lLAorCWJjZSwgdXNlPWlibSsxNmNvbG9yLCB1c2U9c2NyZWVuLXMsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBFbnRyaWVzIGZvciBHTlUgU2NyZWVuIDQuMDIgd2l0aCAtLWVuYWJsZS1jb2xvcnMyNTYuCisKK3NjcmVlbi0yNTZjb2xvcnxHTlUgU2NyZWVuIHdpdGggMjU2IGNvbG9ycywKKwljY2NALAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9c2NyZWVuLAorCitzY3JlZW4tMjU2Y29sb3Itc3xHTlUgU2NyZWVuIHdpdGggMjU2IGNvbG9ycyBhbmQgc3RhdHVzIGxpbmUsCisJY2NjQCwKKwlpbml0Y0AsIHVzZT14dGVybSsyNTZjb2xvciwgdXNlPXNjcmVlbi1zLAorCitzY3JlZW4tMjU2Y29sb3ItYmNlfEdOVSBTY3JlZW4gd2l0aCAyNTYgY29sb3JzIGFuZCBCQ0UsCisJY2NjQCwKKwlpbml0Y0AsIHVzZT14dGVybSsyNTZjb2xvciwgdXNlPXNjcmVlbi1iY2UsCisKK3NjcmVlbi0yNTZjb2xvci1iY2Utc3xHTlUgU2NyZWVuIHdpdGggMjU2IGNvbG9ycywgQkNFLCBhbmQgc3RhdHVzIGxpbmUsCisJYmNlLCBjY2NALAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9c2NyZWVuLXMsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFJlYWQgdGhlIGZpbmUgbWFucGFnZToKKyMgICAgICAgV2hlbiAgc2NyZWVuICB0cmllcyAgdG8gIGZpZ3VyZSAgb3V0ICBhICB0ZXJtaW5hbCBuYW1lIGZvcgorIyAgICAgICBpdHNlbGYsIGl0IGZpcnN0IGxvb2tzIGZvciBhbiBlbnRyeSBuYW1lZCAic2NyZWVuLjx0ZXJtPiIsCisjICAgICAgIHdoZXJlICA8dGVybT4gIGlzIHRoZSBjb250ZW50cyBvZiB5b3VyICRURVJNIHZhcmlhYmxlLiAgSWYKKyMgICAgICAgbm8gc3VjaCBlbnRyeSBleGlzdHMsIHNjcmVlbiB0cmllcyAic2NyZWVuIiAob3IgInNjcmVlbi13IgorIyAgICAgICBpZiB0aGUgdGVybWluYWwgaXMgd2lkZSAoMTMyIGNvbHMgb3IgbW9yZSkpLiAgSWYgZXZlbiB0aGlzCisjICAgICAgIGVudHJ5IGNhbm5vdCBiZSBmb3VuZCwgInZ0MTAwIiBpcyB1c2VkIGFzIGEgc3Vic3RpdHV0ZS4KKyMKKyMgTm90d2l0aHN0YW5kaW5nIHRoZSBtYW5wYWdlLCBzY3JlZW4gdXNlcyBpdHMgb3duIG5vdGlvbiBvZiB0aGUgdGVybWNhcAorIyBhbmQgc29tZSBrZXlzIGZyb20gInNjcmVlbi48dGVybT4iIGFyZSBpZ25vcmVkLiAgSGVyZSBpcyBhbiBlbnRyeSB3aGljaAorIyBjb3ZlcnMgdGhvc2UgKHRlc3RlZCB3aXRoIHNjcmVlbiA0LjAwLjAyKSAtVEQKK3NjcmVlbitma2V5c3xmdW5jdGlvbi1rZXlzIGFjY29yZGluZyB0byBzY3JlZW4sCisJa2VuZD1cRVs0fiwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmbmRALAorCWtob21lPVxFWzF+LCBrc2x0QCwKKyMKKyMgSGVyZSBhcmUgYSBmZXcgY3VzdG9taXplZCBlbnRyaWVzIHdoaWNoIGFyZSB1c2VmdWwgLVRECisjCisjIE5vdGVzOgorIyAoYSkJc2NyZWVuIGRvZXMgbm90IHN1cHBvcnQgaW52aXMuCisjIChiKQlzY3JlZW4ncyBpbXBsZW1lbnRhdGlvbiBvZiBidyBpcyBpbmNvcnJlY3QgYWNjb3JkaW5nIHRvIHRhY2suCisjIChjKQlzY3JlZW4gYXBwZWFycyB0byBoYXJkY29kZSB0aGUgc3RyaW5ncyBmb3Iga2hvbWUva2VuZCwgbWFraW5nIGl0CisjCW5lY2Vzc2FyeSB0byBvdmVycmlkZSB0aGUgInVzZT0iIGNsYXVzZSdzIHZhbHVlcyAoc2NyZWVuK2ZrZXlzKS4KKyMgKGQpCXNjcmVlbiBzZXRzICRURVJNQ0FQIHRvIGEgdGVybWNhcC1mb3JtYXR0ZWQgY29weSBvZiB0aGUgJ3NjcmVlbicgZW50cnksCisjCXdoaWNoIGlzIE5PVCB0aGUgc2FtZSBhcyB0aGUgdGVybWluZm8gc2NyZWVuLjx0ZXJtPi4KKyMgKGUpCXdoZW4gc2NyZWVuIGZpbmRzIG9uZSBvZiB0aGVzZSBjdXN0b21pemVkIGVudHJpZXMsIGl0IHNldHMgJFRFUk0gdG8KKyMJbWF0Y2guICBIZW5jZSwgbm8gInNjcmVlbi54dGVybSIgZW50cnkgaXMgcHJvdmlkZWQsIHNpbmNlIHRoYXQgd291bGQKKyMJY3JlYXRlIGhlYXJ0YnVybiBmb3IgcGVvcGxlIHJ1bm5pbmcgcmVtb3RlIHh0ZXJtJ3MuCisjCisjCXh0ZXJtICgteGZyZWU4NiBvciAtcjYpIGRvZXMgbm90IG5vcm1hbGx5IHN1cHBvcnQga0lDLCBrTlhUIGFuZCBrUFJWCisjCXNpbmNlIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9ucyBvdmVycmlkZSB0aGUgYnVpbHQtaW4ga2V5Y29kZQorIwl0cmFuc2xhdGlvbi4gIFRoZXkgYXJlIHN1cHByZXNzZWQgaGVyZSB0byBzaG93IHdoYXQgaXMgdGVzdGVkIGJ5IHRhY2suCitzY3JlZW4ueHRlcm0teGZyZWU4NnxzY3JlZW4ueHRlcm0tbmV3fHNjcmVlbiBjdXN0b21pemVkIGZvciBtb2Rlcm4geHRlcm0sCisJYmNlQCwgYncsCisJaW52aXNALCBrSUNALCBrTlhUQCwga1BSVkAsIG1lbWxALCBtZW11QCwKKwlzZ3I9JT8lcDkldFxFKDAlZVxFKEIlO1xFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSwKKwl1c2U9c2NyZWVuK2ZrZXlzLCB1c2U9eHRlcm0tbmV3LAorIyB4dGVybS1yNiBkb2VzIG5vdCByZWFsbHkgc3VwcG9ydCBraG9tZS9rZW5kIHVubGVzcyBpdCBpcyBwcm9wcGVkIHVwIGJ5CisjIHRoZSB0cmFuc2xhdGlvbnMgcmVzb3VyY2UuCitzY3JlZW4ueHRlcm0tcjZ8c2NyZWVuIGN1c3RvbWl6ZWQgZm9yIFgxMVI2IHh0ZXJtLAorCWJ3LCB1c2U9c2NyZWVuK2ZrZXlzLCB1c2U9eHRlcm0tcjYsCisjIENvbG9yIGFwcGxpY2F0aW9ucyBydW5uaW5nIGluIHNjcmVlbiBhbmQgVGVyYVRlcm0gZG8gbm90IHBsYXkgd2VsbCB0b2dldGhlcgorIyBvbiBTb2xhcmlzIGJlY2F1c2UgU3VuJ3MgY3Vyc2VzIGltcGxlbWVudGF0aW9uIGdldHMgY29uZnVzZWQuCitzY3JlZW4udGVyYXRlcm18ZGlzYWJsZSBuY3YgaW4gdGVyYXRlcm0sCisJbmN2IzEyNywKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBpXDMxNmpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwl1c2U9c2NyZWVuK2ZrZXlzLCB1c2U9c2NyZWVuLAorIyBPdGhlciB0ZXJtaW5hbHMKK3NjcmVlbi5yeHZ0fHNjcmVlbiBpbiByeHZ0LAorCWJ3LAorCWN2dmlzQCwgZmxhc2hALCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLAorCWtjdXUxPVxFT0EsIHVzZT1zY3JlZW4rZmtleXMsIHVzZT12dDEwMCtlbnEsCisJdXNlPXJ4dnQrcGNma2V5cywgdXNlPXZ0MjIwK2tleXBhZCwgdXNlPXNjcmVlbiwKKyMgZml4IHRoZSBiYWNrc3BhY2Uga2V5CitzY3JlZW4ubGludXh8c2NyZWVuIGluIGxpbnV4IGNvbnNvbGUsCisJYncsCisJa2JzPVwxNzcsIGtjYnRALCB1c2U9c2NyZWVuK2ZrZXlzLCB1c2U9c2NyZWVuLAorc2NyZWVuLm1sdGVybXxzY3JlZW4gaW4gbWx0ZXJtLAorCXVzZT1zY3JlZW4rZmtleXMsIHVzZT1tbHRlcm0sCisKK3NjcmVlbi13fFZUIDEwMC9BTlNJIFgzLjY0IHZpcnR1YWwgdGVybWluYWwgd2l0aCAxMzIgY29scywKKwljb2xzIzEzMiwgdXNlPXNjcmVlbiwKKworc2NyZWVuMnxvbGQgVlQgMTAwL0FOU0kgWDMuNjQgdmlydHVhbCB0ZXJtaW5hbCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljYnQ9XEVbWiwgY2xlYXI9XEVbMkpcRVtILCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9LCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2YwPVxFfiwga2YxPVxFUywga2YyPVxFVCwga2YzPVxFVSwga2Y0PVxFViwKKwlrZjU9XEVXLCBrZjY9XEVQLCBrZjc9XEVRLCBrZjg9XEVSLCBrZjk9XEUwSSwga2hvbWU9XEVILAorCW5lbD1eTV5KLCByYz1cRTgsIHJpPVxFTSwgcm1pcj1cRVs0bCwgcm1zbz1cRVsyM20sCisJcm11bD1cRVsyNG0sIHJzMT1cRWMsIHNjPVxFNywgc2dyMD1cRVttLCBzbWlyPVxFWzRoLAorCXNtc289XEVbM20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKyMgKHNjcmVlbjM6IHJlbW92ZWQgdW5rbm93biAiOnh2OkxQOkcwOiIgLS0gZXNyKQorc2NyZWVuM3xvbGRlciBWVCAxMDAvQU5TSSBYMy42NCB2aXJ0dWFsIHRlcm1pbmFsLAorCWttLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLAorCWNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpczI9XEUpMCwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwKKwlrZjM9XEVPUiwga2Y0PVxFT1MsIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1pcj1cRVs0bCwgcm1reD1cRT4sIHJtc289XEVbMjNtLCBybXVsPVxFWzI0bSwgcnMxPVxFYywKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21pcj1cRVs0aCwgc21reD1cRT0sIHNtc289XEVbM20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCisjIEZyYW5jZXNjbyBQb3RvcnRpIDxGLlBvdG9ydGlAY251Y2UuY25yLml0PjoKKyMgTkNTQSB0ZWxuZXQgaXMgb25lIG9mIHRoZSBtb3N0IHVzZWQgdGVsbmV0IGNsaWVudHMgZm9yIHRoZSBNYWNpbnRvc2guICBJdCBoYXMKKyMgYmVlbiBtYWludGFpbmVkIHVudGlsIHJlY2VudGx5IGJ5IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yIFN1cGVyY29tcHV0ZXIKKyMgQXBwbGljYXRpb25zLCBhbmQgaXQgaXMgZmVhdHVyZSByaWNoLCBzdGFibGUgYW5kIGZyZWUuICBJdCBjYW4gYmUgZG93bmxvYWRlZAorIyBmcm9tIHd3dy5uY3NhLmVkdS4gIFRoaXMgdGVybWluZm8gZGVzY3JpcHRpb24gZmlsZSBpcyBiYXNlZCBvbiB4dGVybS12dDIyMCwKKyMgeHRlcm0rc2wsIGFuZCB0aGUgZG9jcyBhdCBOQ1NBLiAgSXQgd29ya3Mgd2VsbC4KKyMKKyMgTkNTQSBUZWxuZXQgMi42IGZvciBNYWNpbnRvc2ggaW4gdnQyMjAgOC1iaXQgZW11bGF0aW9uIG1vZGUKKyMgVGhlIHRlcm1pbmFsIG9wdGlvbnMgc2hvdWxkIGJlIHNldCBhcyBmb2xsb3dzOgorIyAgICAgICAgIFh0ZXJtIHNlcXVlbmNlcyBPTgorIyAgICAgICAgIHVzZSBWVCB3cmFwIG1vZGUgT04KKyMgICAgICAgICB1c2UgRW1hY3MgYXJyb3cga2V5cyBPRkYKKyMgICAgICAgICBDVFJMLUNPTU5EIGlzIEVtYWNzIG1ldGEgT04KKyMgICAgICAgICA4IGJpdCBtb2RlIE9OCisjICAgICAgICAgYW5zd2VyYmFjayBzdHJpbmc6ICJuY3NhLXZ0MjIwLTgiCisjICAgICAgICAgc2V0dXAga2V5czogYWxsIGRpc2FibGVkCisjCisjIEFwcGxpY2F0aW9uIG1vZGUgaXMgbm90IHVzZWQuCisjCisjIE90aGVyIHNwZWNpYWwgbWFwcGluZ3M6CisjCUFwcGxlCQlWVDIyMAorIwlIRUxQIAkJRmluZAorIwlIT01FCQlJbnNlcnQgaGVyZQorIwlQQUdFVVAJCVJlbW92ZQorIwlERUwJCVNlbGVjdAorIwlFTkQJCVByZXYgU2NyZWVuCisjCVBBR0VET1dOCU5leHQgU2NyZWVuCisjCisjIFRob3VnaCBpdCBzdXBwb3J0cyBBTlNJIGNvbG9yLCBOQ1NBIFRlbG5ldCB1c2VzIGNvbG9yIHRvIHJlcHJlc2VudCBibGlua2luZworIyB0ZXh0LgorIworIyBUaGUgc3RhdHVzLWxpbmUgbWFuaXB1bGF0aW9uIGlzIGEgbWFwcGluZyBvZiB0aGUgeHRlcm0tY29tcGF0aWJsZSBjb250cm9sCisjIHNlcXVlbmNlcyBmb3Igc2V0dGluZyB0aGUgd2luZG93LXRpdGxlLiAgU28geW91IG11c3QgdXNlIHRzbCBhbmQgZnNsIGluCisjIHBhaXJzLCBzaW5jZSB0aGUgbGF0dGVyIGVuZHMgdGhlIHN0cmluZyB0aGF0IGlzIGxvYWRlZCB0byB0aGUgd2luZG93LXRpdGxlLgorbmNzYS1tfG5jc2EtdnQyMjAtOHxOQ1NBIFRlbG5ldCAyLjYgZm9yIE1hY2ludG9zaCBpbiB2dDIyMC04IG1vZGUsCisJYW0sIGhzLCBrbSwgbWlyLCBtc2dyLCB4ZW5sLAorCWFjc2M9YGBhYWZmZ2dpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZHNsPVxFXTA7XDAwNywgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRSkwLAorCWZsYXNoPVxFWz81aFxFWz81bCwgZnNsPV5HLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAsIGlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cbiQ8MTUwKj4sCisJaXMyPVxFN1xFW3JcRVttXEVbPzdoXEVbPzE7NDs2bFxFWzRsXEU4XEU+LCBrYnM9XkgsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVs0fiwga2VuZD1cRVs1fiwga2YxPVxFWzE3fiwga2YxMD1cRVsyOH4sCisJa2YxMT1cRVsyOX4sIGtmMTI9XEVbMzF+LCBrZjEzPVxFWzMyfiwga2YxND1cRVszM34sCisJa2YxNT1cRVszNH4sIGtmMj1cRVsxOCwga2YzPVxFWzE5fiwga2Y0PVxFWzIwfiwga2Y1PVxFWzIxfiwKKwlrZjY9XEVbMjN+LCBrZjc9XEVbMjR+LCBrZjg9XEVbMjV+LCBrZjk9XEVbMjZ+LCBraGxwPVxFWzF+LAorCWtob21lPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVszfiwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJcmM9XEU4LCByZXY9XEVbN20sIHJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCByaT1cRU0sCisJcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHJtY3VwPVxFWzJKXEU4LCBybWlyPVxFWzRsLAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczI9XEU3XEVbclxFOFxFW21cRVs/N2hcRVs/MTs0OzZsXEVbNGxcRT4sIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOywKKwlzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21jdXA9XEU3LAorCXNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywgdHNsPVxFXTA7LAorCXU4PVxFWz82MjsxOzZjLCB1c2U9YW5zaStlbnEsCituY3NhfE5DU0EgVGVsbmV0IDIuNyBmb3IgTWFjaW50b3NoIGluIHZ0MjIwLTggbW9kZSwKKwl1c2U9bmNzYS1tLCB1c2U9a2xvbmUrY29sb3IsCituY3NhLW5zfE5DU0EgVGVsbmV0IDIuNyBmb3IgTWFjaW50b3NoIGluIHZ0MjIwLTggbW9kZSwKKwloc0AsCisJZHNsQCwgZnNsQCwgdHNsQCwgdXNlPW5jc2EsCituY3NhLW0tbnN8TkNTQSBUZWxuZXQgMi42IGZvciBNYWNpbnRvc2ggaW4gdnQyMjAtOCBtb2RlLAorCWhzQCwKKwlkc2xALCBmc2xALCB0c2xALCB1c2U9bmNzYS1tLAorIyBhbHRlcm5hdGUgLVREOgorIyBUaGUgZG9jdW1lbnRlZCBmdW5jdGlvbi1rZXkgbWFwcGluZyByZWZlcnMgdG8gdGhlIEFwcGxlIEV4dGVuZGVkIEtleWJvYXJkCisjIChlLmcuLCBOQ1NBIFRlbG5ldCdzIEYxIGNvcnJlc3BvbmRzIHRvIGEgVlQyMjAgRjYpLiAgV2UgdXNlIHRoZSBWVDIyMC1zdHlsZQorIyBjb2RlcywgaG93ZXZlciwgc2luY2UgdGhlIG51bWVyaWMga2V5cGFkIChWVDEwMCkgUEYxLVBGNCBhcmUgYXZhaWxhYmxlIG9uCisjIHNvbWUga2V5Ym9hcmRzIGFuZCBtYW55IGFwcGxpY2F0aW9ucyByZXF1aXJlIHRoZXNlIGFzIEYxLUY0LgorIworbmNzYS12dDIyMHxOQ1NBIFRlbG5ldCB1c2luZyB2dDIyMC1jb21wYXRpYmxlIGZ1bmN0aW9uIGtleXMsCisJa2YxPVxFT1AsIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sCisJa2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sCisJa2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFT1EsCisJa2YyMD1cRVszNH4sIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCB1c2U9bmNzYSwKKworIyMjIyBQaWxvdCBQcm8gUGFsbS1Ub3AKKyMKKyMgVGVybWNhcCBmb3IgVG9wIEd1biBUZWxuZXQgYW5kIFNTSCBvbiB0aGUgUGFsbSBQaWxvdC4KKyMgaHR0cDovL3d3dy5haS9+aWFuZy9UR3NzaC8KK3BpbG90fHRndGVsbmV0fFRvcCBHdW4gVGVsbmV0IG9uIHRoZSBQYWxtIFBpbG90IFByb2Zlc3Npb25hbCwKKwlPVGJzLCBhbSwgeGVubCwKKwljb2xzIzM5LCBsaW5lcyMxNiwKKwliZWw9XkcsIGNsZWFyPVxFYywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VwPVxFbSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgaG9tZT1cRW1cc1xzLCBodD1eSSwKKwlpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrbnA9XkwsIGtwcD1eSywgbmVsPVxFbX5ccywKKwlybXNvPVxFQiwgc21zbz1cRWIsCisKKyMgRnJvbTogRmVkZXJpY28gQmlhbmNoaSA8YmlhbmNoaUB3d3cuYXJ0ZS51bmlwaS5pdD4KKyMgVGhlc2UgZW50cmllcyBhcmUgZm9yIHRoZSBFbWJlZGRhYmxlIExpbnV4IEtlcm5lbCBTeXN0ZW0gKEVMS1MpCisjIHByb2plY3QgLSBhbiBoZWF2aWx5IHN0cmlwcGVkIGRvd24gTGludXggdG8gYmUgcnVuIG9uIDE2IGJpdAorIyBib3hlcyBvciwgZXZlbnR1YWxseSwgdG8gYmUgdXNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIC0gYW5kIGhhdmUgYmVlbgorIyBhZGFwdGVkIGZyb20gdGhlIHN0b2NrIEVMS1MgdGVybWNhcC4gVGhlIHByb2plY3QgaXRzZWxmIGxvb2tzIHN0YWxsZWQsCisjIGFuZCB0aGUgbGF0ZXN0IGltcHJvdmVtZW50cyBJIGtub3cgb2YgZGF0ZSBiYWNrIHRvIE1hcmNoIDIwMDAuCisjCisjIFRvIGNvcGUgd2l0aCB0aGUgRUxLUyBkdW1iIGNvbnNvbGUgSSBhZGRlZCBhbiAiZWxrcy1nbGFzc3R0eSIgZW50cnk7CisjIGFzIGFuIGFkZGVkIGJvbnVzLCB0aGlzIGRlYWxzIHdpdGggYWxsIHRoZSBjYXBhYmlsaXRpZXMgY29tbW9uIHRvCisjIGJvdGggVlQ1MiBhbmQgQU5TSSAob3IsIGV2ZW50dWFsbHksICJzcGVjaWFsIikgbW9kZXMuCisKK2Vsa3MtZ2xhc3N0dHl8RUxLUyBnbGFzcy1UVFkgY2FwYWJpbGl0aWVzLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgY3I9Xk0sIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCW5lbD1eTV5KLAorCitlbGtzLXZ0NTJ8RUxLUyB2dDUyIGNvbnNvbGUsCisJY2xlYXI9XEVIXEVKLCBjdWIxPVxFRCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlbD1cRUssCisJaG9tZT1cRUgsIHVzZT1lbGtzLWdsYXNzdHR5LAorCitlbGtzLWFuc2l8RUxLUyBBTlNJIGNvbnNvbGUsCisJY2xlYXI9XEVbSFxFWzJKLCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlbD1cRVtLLCBob21lPVxFW0gsCisJcm1zbz1cRVttLCBzbXNvPVxFWzdtLCB1c2U9ZWxrcy1nbGFzc3R0eSwKKworIyBBcyBhIG1hdHRlciBvZiBmYWN0LCBFTEtTIDAuMC44MyBvbiBQQ3MgZGVmYXVsdHMgdG8gQU5TSSBlbXVsYXRpb24KKyMgaW5zdGVhZCBvZiBWVDUyLCBidXQgdGhlICJlbGtzIiBlbnRyeSBzdGlsbCByZWZlcnMgdG8gdGhlIGxhdHRlci4KKworZWxrc3xkZWZhdWx0IEVMS1MgY29uc29sZSwKKwl1c2U9ZWxrcy12dDUyLAorCisjIFByb2plY3QgU0lCTyAoZm9yIFBzaW9uIDMgcGFsbXRvcHMpIGNvbnNvbGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBFTEtTCisjIG9uZSBidXQgaW4gc2NyZWVuIHNpemUKKworc2lib3xFTEtTIFNJQk8gY29uc29sZSwKKwljb2xzIzYxLCBpdCM4LCBsaW5lcyMyMCwgdXNlPWVsa3MtdnQ1MiwKKworIyMjIyMjIyMgQ09NTUVSQ0lBTCBXT1JLU1RBVElPTiBDT05TT0xFUworIworCisjIyMjIEFscGhhIGNvbnNvbGVzCisjCisKKyMgVGhpcyBpcyBmcm9tIHRoZSBPU0YvMSBSZWxlYXNlIDEuMCB0ZXJtY2FwIGZpbGUKK3BjY29uc3xwY2NvbnNvbGV8QU5TSSAobW9zdGx5KSBBbHBoYSBQQyBjb25zb2xlIHRlcm1pbmFsIGVtdWxhdGlvbiwKKwlhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGljaDE9XEVbQCwgaWwxPVxFW0wsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILAorCW5lbD1eTV5KLCByZXY9XEVbN20sIHJtc289XEVbbSwgc2dyMD1cRVttLCBzbXNvPVxFWzdtLAorCisjIyMjIFN1biBjb25zb2xlcworIworCisjIDppczE6IHJlc2V0cyBzY3JvbGxpbmcgcmVnaW9uIGluIGNhc2UgYSBwcmV2aW91cyB1c2VyIGhhZCB1c2VkICJ0c2V0IHZ0MTAwIgorb2xkc3VufFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gY29uc29sZSwKKwlPVGJzLCBhbSwga20sIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczE9XEVbMXIsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtob21lPVxFW0gsCisJcm1zbz1cRVttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisjIEZyb206IEFsZXhhbmRlciBMdWt5YW5vdiA8bGF2QHZpZGVvLnlhcnMuZnJlZS5uZXQ+LCAxNCBOb3YgMTk5NQorIyA8bGluZXM+IGNhcGFiaWxpdHkgbGF0ZXIgY29ycmVjdGVkIGJ5IEouVC4gQ29ua2xpbiA8anRjQGN5Z251cy5jb20+CisjIFNHUiAxLCA0IGFyZW4ndCBzdXBwb3J0ZWQgLSByZW1vdmVkIGJvbGQvdW5kZXJsaW5lIChULkRpY2tleSAxNyBKYW4gMTk5OCkKK3N1bi1pbHxTdW4gTWljcm9zeXN0ZW1zIGNvbnNvbGUgd2l0aCB3b3JraW5nIGluc2VydC1saW5lLAorCWFtLCBrbSwgbXNnciwKKwljb2xzIzgwLCBsaW5lcyMzNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLAorCWRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaHQ9XkksCisJaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJa2IyPVxFWzIxOHosIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZGNoMT1cMTc3LCBrZW5kPVxFWzIyMHosIGtmMT1cRVsyMjR6LAorCWtmMTA9XEVbMjMzeiwga2YxMT1cRVsyMzR6LCBrZjEyPVxFWzIzNXosIGtmMj1cRVsyMjV6LAorCWtmMz1cRVsyMjZ6LCBrZjQ9XEVbMjI3eiwga2Y1PVxFWzIyOHosIGtmNj1cRVsyMjl6LAorCWtmNz1cRVsyMzB6LCBrZjg9XEVbMjMxeiwga2Y5PVxFWzIzMnosIGtob21lPVxFWzIxNHosCisJa25wPVxFWzIyMnosIGtvcHQ9XEVbMTk0eiwga3BwPVxFWzIxNnosIGtyZXM9XEVbMTkzeiwKKwlrdW5kPVxFWzE5NXosIHJldj1cRVs3bSwgcm1zbz1cRVttLCBybXVsQCwgcnMyPVxFW3MsCisJc2dyPVxFWzAlPyVwMSVwMyV8JXQ7NyU7bSwgc2dyMD1cRVttLCBzbXNvPVxFWzdtLAorCXU4PVxFWzF0LCB1OT1cRVsxMXQsCisjIE9uIHNvbWUgdmVyc2lvbnMgb2YgQ0dTSVggZnJhbWVidWZmZXIgZmlybXdhcmUgKFNwYXJjU3RhdGlvbiA1KSwgPGlsMT4vPGlsPgorIyBmbGFrZSBvdXQgb24gdGhlIGxhc3QgbGluZS4gIFVuZm9ydHVuYXRlbHksIHdpdGhvdXQgdGhlbSB0aGUgdGVybWluYWwgaGFzIG5vCisjIHdheSB0byBzY3JvbGwuCitzdW4tY2dzaXh8c3VuLXNzNXxTdW4gU3BhcmNTdGF0aW9uIDUgY29uc29sZSwKKwlpbEAsIGlsMUAsIHVzZT1zdW4taWwsCisjIElmIHlvdSBhcmUgdXNpbmcgYW4gU1M1LCBjaGFuZ2UgdGhlIHN1biBkZWZpbml0aW9uIHRvIHVzZSBzdW4tc3M1Lgorc3VufHN1bjF8c3VuMnxTdW4gTWljcm9zeXN0ZW1zIEluYy4gd29ya3N0YXRpb24gY29uc29sZSwKKwl1c2U9c3VuLWlsLAorCisjIEZyb206IDxqb2huQHVjYnJlbm9pcj4gIFR1ZSBTZXAgMjQgMTM6MTQ6NDQgMTk4NQorc3VuLXN8U3VuIE1pY3Jvc3lzdGVtcyBXb3Jrc3RhdGlvbiB3aW5kb3cgd2l0aCBzdGF0dXMgbGluZSwKKwlocywKKwlkc2w9XEVdbFxFXFwsIGZzbD1cRVxcLCB0c2w9XEVdbCwgdXNlPXN1biwKK3N1bi1lLXN8c3VuLXMtZXxTdW4gTWljcm9zeXN0ZW1zIFdvcmtzdGF0aW9uIHdpdGggc3RhdHVzIGhhY2tlZCBmb3IgZW1hY3MsCisJaHMsCisJZHNsPVxFXWxcRVxcLCBmc2w9XEVcXCwgdHNsPVxFXWwsIHVzZT1zdW4tZSwKK3N1bi00OHxTdW4gNDgtbGluZSB3aW5kb3csCisJY29scyM4MCwgbGluZXMjNDgsIHVzZT1zdW4sCitzdW4tMzR8U3VuIDM0LWxpbmUgd2luZG93LAorCWNvbHMjODAsIGxpbmVzIzM0LCB1c2U9c3VuLAorc3VuLTI0fFN1biAyNC1saW5lIHdpbmRvdywKKwljb2xzIzgwLCBsaW5lcyMyNCwgdXNlPXN1biwKK3N1bi0xN3xTdW4gMTctbGluZSB3aW5kb3csCisJY29scyM4MCwgbGluZXMjMTcsIHVzZT1zdW4sCitzdW4tMTJ8U3VuIDEyLWxpbmUgd2luZG93LAorCWNvbHMjODAsIGxpbmVzIzEyLCB1c2U9c3VuLAorc3VuLTF8U3VuIDEtbGluZSB3aW5kb3cgZm9yIHN5c2xpbmUsCisJZXNsb2ssIGhzLAorCWNvbHMjODAsIGxpbmVzIzEsCisJZHNsPV5MLCBmc2w9XEVbSywgdHNsPV5NLCB1c2U9c3VuLAorc3VuLWV8c3VuLW5pY3xzdW5lfFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gd2l0aG91dCBpbnNlcnQgY2hhcmFjdGVyLAorCWljaDFALCBybWlyQCwgc21pckAsIHVzZT1zdW4sCitzdW4tY3xzdW4tY21kfFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gY29uc29sZSB3aXRoIHNjcm9sbGFibGUgaGlzdG9yeSwKKwlsaW5lcyMzNSwKKwlybWN1cD1cRVs+NGgsIHNtY3VwPVxFWz40bCwgdXNlPXN1biwKK3N1bi10eXBlNHxTdW4gV29ya3N0YXRpb24gY29uc29sZSB3aXRoIHR5cGUgNCBrZXlib2FyZCwKKwlrY3ViMT1cRVsyMTd6LCBrY3VkMT1cRVsyMjF6LCBrY3VmMT1cRVsyMTl6LAorCWtjdXUxPVxFWzIxNXosIHVzZT1zdW4taWwsCisKKyMgTW9zdCBvZiB0aGUgY3VycmVudCByZWZlcmVuY2VzIHRvIHN1bi1jb2xvciBhcmUgZnJvbSB1c2VycyB3b25kZXJpbmcgd2h5IHRoaXMKKyMgaXMgdGhlIGRlZmF1bHQgb24gaW5zdGFsbC4gIERldGFpbHMgZnJvbSByZWFkaW5nIHRoZSB3c2NvbnMgbWFucGFnZSwgYWRkaW5nCisjIGN1YiwgZXRjLiwgaGVyZSAocmF0aGVyIHRoYW4gaW4gdGhlIGJhc2Ugc3VuLWlsIGVudHJ5KSBzaW5jZSBpdCBpcyBub3QgY2xlYXIKKyMgd2hlbiB0aG9zZSB3ZXJlIGFkZGVkIC1URAorc3VuLWNvbG9yfFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gY29uc29sZSB3aXRoIGNvbG9yIHN1cHBvcnQgKElBIHN5c3RlbXMpLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwljdWI9XEVbJXAxJWRELCBjdWQ9XEVbJXAxJWRCLCBjdWY9XEVbJXAxJWRDLAorCWN1dT1cRVslcDElZEEsIGhvbWU9XEVbSCwgb3A9XEVbbVxFW3AsIHNldGFiPVxFWzQlcDElZG0sCisJc2V0YWY9XEVbMyVwMSVkbSwKKwlzZXRiPVxFWzQlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2V0Zj1cRVszJT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXVzZT1zdW4sCisKKyMjIyMgSXJpcyBjb25zb2xlcworIworCisjICh3c2lyaXM6IHRoaXMgaGFkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMKKyMJOkhTPVxFN0YyOkhFPVxFN0Y3OlwKKyMJOkNUIzI6Q1o9KkJibGFjayxyZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuLCpGd2hpdGU6CisjIFNlZSB0aGUgbm90ZSBvbiBJcmlzIGV4dGVuc2lvbnMgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyMgRmluYWxseSwgcmVtb3ZlZCBzdWJvcHRpbWFsIDxjbGVhcj49XEVIXEVKIGFuZCBhZGRlZCA8Y3VkMT4gJgorIyA8Zmxhc2g+IGZyb20gQlJMIC0tIGVzcikKK3dzaXJpc3xpcmlzNDB8aXJpcyBlbXVsYXRpbmcgYSA0MCBsaW5lIHZpc3VhbCA1MCAoYXBwcm94aW1hdGVseSksCisJT1RicywgT1RuYywgT1RwdCwgYW0sCisJT1RrbiMzLCBjb2xzIzgwLCBpdCM4LCBsaW5lcyM0MCwKKwlPVG5sPVxFQiwgYmVsPV5HLCBjbGVhcj1cRXYsIGNub3JtPVxFPiwgY3ViMT1eSCwgY3VkMT1cRUIsCisJY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWN2dmlzPVxFOywgZGltPVxFN0YyLCBkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywKKwlmbGFzaD1cRTdGNFxFN0IxXDAxM1xFN0Y3XEU3QjAsIGhvbWU9XEVILCBodD1eSSwgaWwxPVxFTCwKKwlpbmQ9XkosIGlzMj1cRTdCMFxFN0Y3XEU3QzJcRTdSMywga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMD1cRTAsIGtmMT1cRTEsIGtmMj1cRTIsIGtmMz1cRTMsCisJa2Y0PVxFNCwga2Y1PVxFNSwga2Y2PVxFNiwga2Y3PVxFNywga2Y4PVxFOCwga2Y5PVxFOSwgcmk9XEVJLAorCXJtc289XEUwQCwgcm11bD1cRTdSM1xFMEAsIHNncjA9XEU3RjcsIHNtc289XEU5UCwKKwlzbXVsPVxFN1IyXEU5UCwKKworIyMjIyBOZVdTIGNvbnNvbGVzCisjCisjIENvbnNvbGUgdGVybWluYWwgd2luZG93cyB1bmRlciB0aGUgTmVXUyAoU3VuJ3MgRGlzcGxheSBQb3N0c2NyaXB0IHdpbmRvd2luZworIyBlbnZpcm9ubWVudCkuICAgTm90ZTogdGhlc2UgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggU29ueSdzIE5ld3Mgd29ya3N0YXRpb24KKyMgbGluZS4KKyMKKworIyBFbnRyeSBmb3IgTmVXUydzIHBzdGVybSBmcm9tIEVyaWMgTWVzc2ljayAmIEh1Z2ggRGFuaWVsCisjIChwc3Rlcm06IHVua25vd24gIjpzbD1cRU9sOmVsPVxFTmw6IiByZW1vdmVkIC0tIGVzcikKK3BzdGVybXxwc3Rlcm0tYmFzaWN8TmVXUyBwc3Rlcm0tODB4MzQsCisJT1RicywgYW0sIGhzLCBrbSwgdWwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzQsCisJYmxpbms9XEVPYiwgYm9sZD1cRU9kLCBjbGVhcj1eTCwgY3NyPVxFRSVwMSVkOyVwMiVkOywKKwljdWIxPVxFVCwgY3VkMT1cRVAsIGN1ZjE9XEVWLCBjdXA9XEUlcDElZDslcDIlZDssIGN1dTE9XEVZLAorCWRjaDE9XEVGLCBkbDE9XEVLLCBlZD1cRUIsIGVsPVxFQywgZmxhc2g9XEVaLCBmc2w9XEVObCwKKwlob21lPVxFUiwgaHQ9XkksIGlsMT1cRUEsIGluZD1cRVcsIGlzMT1cRU4qLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGxsPVxFVSwgcmM9XlwsIHJldj1cRU9yLAorCXJpPVxFWCwgcm1jdXA9XEVOdCwgcm1pcj1cRU5pLCBybXNvPVxFTm8sIHJtdWw9XEVOdSwgc2M9Xl0sCisJc2dyMD1cRU4qLCBzbWN1cD1cRU90LCBzbWlyPVxFT2ksIHNtc289XEVPbywgc211bD1cRU91LAorCXRzbD1cRU9sLAorcHN0ZXJtLTk2eDQ4fE5lV1MgcHN0ZXJtIDk2eDQ4LAorCWNvbHMjOTYsIGxpbmVzIzQ4LCB1c2U9cHN0ZXJtLAorcHN0ZXJtLTkweDI4fE5lV1MgcHN0ZXJtIDkweDI4LAorCWNvbHMjOTAsIGxpbmVzIzI4LCB1c2U9cHN0ZXJtLAorcHN0ZXJtLTgweDI0fE5lV1MgcHN0ZXJtIDgweDI0LAorCWNvbHMjODAsIGxpbmVzIzI0LCB1c2U9cHN0ZXJtLAorIyBUaGlzIGlzIGEgZmFzdGVyIHRlcm1jYXAgZm9yIHBzdGVybS4gIFdhcm5pbmc6ICBpZiB5b3UgdXNlIHRoaXMgdGVybWNhcCwKKyMgc29tZSBjb250cm9sIGNoYXJhY3RlcnMgeW91IHR5cGUgd2lsbCBkbyBzdHJhbmdlIHRoaW5ncyB0byB0aGUgc2NyZWVuLgorIyAocHN0ZXJtLWZhc3Q6IHVua25vd24gIjpzbD1eT2w6ZWw9Xk5sOiIgLS0gZXNyKQorcHN0ZXJtLWZhc3R8TmVXUyBwc3Rlcm0gZmFzdCB2ZXJzaW9uIChmbGFreSBjdHJsIGNoYXJzKSwKKwlPVGJzLCBhbSwgaHMsIGttLCB1bCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwKKwlibGluaz1eT2IsIGJvbGQ9Xk9kLCBjbGVhcj1eTCwgY3NyPVwwMDUlcDElZDslcDIlZDssCisJY3ViMT1eVCwgY3VkMT1eUCwgY3VmMT1eViwgY3VwPVwwMDQlcDElZDslcDIlZDssIGN1dTE9XlksCisJZGNoMT1eRiwgZGwxPV5LLCBlZD1eQiwgZWw9XkMsIGZsYXNoPV5aLCBmc2w9Xk5sLCBob21lPV5SLCBodD1eSSwKKwlpbDE9XkEsIGluZD1eVywgaXMxPV5OKiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBsbD1eVSwgcmM9XlwsIHJldj1eT3IsIHJpPV5YLCBybWN1cD1eTnQsIHJtaXI9Xk5pLAorCXJtc289Xk5vLCBybXVsPV5OdSwgc2M9Xl0sIHNncjA9Xk4qLCBzbWN1cD1eT3QsIHNtaXI9Xk9pLAorCXNtc289Xk9vLCBzbXVsPV5PdSwgdHNsPV5PbCwKKworIyMjIyBOZVhUIGNvbnNvbGVzCisjCisjIFVzZSBgZ2xhc3N0dHknIGZvciB0aGUgV29ya3NwYWNlIGFwcGxpY2F0aW9uCisjCisKKyMgRnJvbTogRGF2ZSBXZXR6ZWwgPGRhdmVAdHVyYm9jYXQuc25hZnUuZGU+IDIyIERlYyAxOTk1CituZXh0fE5lWFQgY29uc29sZSwKKwlhbSwgeHQsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZWw9XEVbSywgaG9tZT1cRVtILAorCWh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwKKwlybXNvPVxFWzQ7MW0sIHNncjA9XEVbbSwgc21zbz1cRVs0OzJtLAorbmV4dHNoZWxsfE5lWFQgU2hlbGwgYXBwbGljYXRpb24sCisJYW0sCisJY29scyM4MCwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBodD1eSSwga2JzPV5ILCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwgbmVsPV5NXkosCisKKyMjIyMgU29ueSBORVdTIHdvcmtzdGF0aW9ucworIworCisjIChuZXdzLXVuazogdGhpcyBoYWQgOktCPW5ld3M6IC0tIGVzcikKK25ld3MtdW5rfFNPTlkgTkVXUyB2dDEwMCBlbXVsYXRvciBjb21tb24gZW50cnksCisJT1RicywgT1RwdCwgYW0sIHhlbmwsCisJY29scyM4MCwKKwlPVG5sPV5KLCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMkosCisJY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsCisJaXMyPVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFOCwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMD1cRU9ZLCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPVCwga2Y2PVxFT1UsIGtmNz1cRU9WLAorCWtmOD1cRU9XLCBrZjk9XEVPWCwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFW3IsIHNjPVxFNywKKwlzZ3IwPVxFW20sIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIworIyAobmV3cy0yOTogdGhpcyBoYWQgOlRZPWFzY2lpOiAtLWVzcikKK25ld3MtMjksCisJbGluZXMjMjksIHVzZT1uZXdzLXVuaywKKyMgKG5ld3MtMjktZXVjOiB0aGlzIGhhZCA6VFk9ZXVjOiAtLWVzcikKK25ld3MtMjktZXVjLAorCXVzZT1uZXdzLTI5LAorIyAobmV3cy0yOS1zamlzOiB0aGlzIGhhZCA6VFk9c2ppczogLS1lc3IpCituZXdzLTI5LXNqaXMsCisJdXNlPW5ld3MtMjksCisjCisjIChuZXdzLTMzOiB0aGlzIGhhZCA6VFk9YXNjaWk6IC0tZXNyKQorbmV3cy0zMywKKwlsaW5lcyMzMywgdXNlPW5ld3MtdW5rLAorIyAobmV3cy0zMy1ldWM6IHRoaXMgaGFkIDpUWT1ldWM6IC0tZXNyKQorbmV3cy0zMy1ldWMsCisJdXNlPW5ld3MtMzMsCisjIChuZXdzLTMzLXNqaXM6IHRoaXMgaGFkIDpUWT1zamlzOiAtLWVzcikKK25ld3MtMzMtc2ppcywKKwl1c2U9bmV3cy0zMywKKyMKKyMgKG5ld3MtNDI6IHRoaXMgaGFkIDpUWT1hc2NpaTogLS1lc3IpCituZXdzLTQyLAorCWxpbmVzIzQyLCB1c2U9bmV3cy11bmssCisjIChuZXdzLTQyLWV1YzogdGhpcyBoYWQgOlRZPWV1YzogLS1lc3IpCituZXdzLTQyLWV1YywKKwl1c2U9bmV3cy00MiwKKyMgKG5ld3MtNDItc2ppczogdGhpcyBoYWQgOlRZPXNqaXM6IC0tZXNyKQorbmV3cy00Mi1zamlzLAorCXVzZT1uZXdzLTQyLAorIworIwlORVdTLU9TIG9sZCB0ZXJtY2FwIGVudHJ5CisjCisjIChuZXdzLW9sZC11bms6IHRoaXMgaGFkIDpLQj1uZXdzOlRZPXNqaXM6IC0tZXNyKQorbmV3cy1vbGQtdW5rfFNPTlkgTkVXUyB2dDEwMCBlbXVsYXRvciBjb21tb24gZW50cnksCisJT1RicywgT1RwdCwgYW0sIHhlbmwsCisJY29scyM4MCwgdnQjMywKKwlPVG5sPV5KLCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVs7SFxFWzJKLAorCWNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIGh0PV5JLCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3IwPVxFW20sIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIworIyAobndwNTEyOiB0aGlzIGhhZCA6REU9Xkg6LCB3aGljaCBJIHRoaW5rIG1lYW5zIDxPVGJzPiAtLWVzcikKK253cDUxMnxuZXdzfG53cDUxNHxuZXdzNDB8dnQxMDAtYm18b2xkIHNvbnkgdnQxMDAgZW11bGF0b3IgNDAgbGluZXMsCisJT1RicywKKwlsaW5lcyM0MCwKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7NDByXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChud3A1MTItYTogdGhpcyBoYWQgOlRZPWFzY2lpOiBhbmQgdGhlIGFsaWFzIHZ0MTAwLWJtIC0tZXNyKQorbndwNTEyLWF8bndwNTE0LWF8bmV3cy1hfG5ld3M0MnxuZXdzNDAtYXxzb255IHZ0MTAwIGVtdWxhdG9yIDQyIGxpbmUsCisJbGluZXMjNDIsCisJaXMyPVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7NDJyXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChud3AtNTEyLW86IHRoaXMgaGFkIDpLQj1ud3A0MTA6REU9Xkg6ICBJIGludGVycHJldCB0aGUgbGF0dGVyIGFzIDxPVGJzPi4gLS1lc3IpCitud3A1MTItb3xud3A1MTQtb3xuZXdzLW98bmV3czQwLW98dnQxMDAtYm0tb3xzb255IHZ0MTAwIGVtdWxhdG9yIDQwIGxpbmVzLAorCU9UYnMsCisJbGluZXMjNDAsCisJaXMyPVxFN1xFW3JcRThcRUVcRUVcRUVcRU1cRU1cRU1cRVs/N2hcRVs/MWxcRVs/M2xcRTdcRVsxOzQwclxFOCwKKwl1c2U9bmV3cy1vbGQtdW5rLAorIworIyAobndwNTEzOiB0aGlzIGhhZCA6REU9Xkg6IGFuZCB0aGUgYWxpYXMgdnQxMDAtYm0gLS1lc3IpCitud3A1MTN8bndwNTE4fG53ZTUwMXxuZXdzY2JtfG5ld3MzMXxzb255IHZ0MTAwIGVtdWxhdG9yIDMzIGxpbmVzLAorCU9UYnMsCisJbGluZXMjMzEsCisJaXMyPVxFN1xFW3JcRThcRUVcRUVcRUVcRU1cRU1cRU1cRVs/N2hcRVs/MWxcRVs/M2xcRTdcRVsxOzMxclxFOCwKKwl1c2U9bmV3cy1vbGQtdW5rLAorIworIyAobndwNTEzLWE6IHRoaXMgaGFkIDpUWT1hc2NpaTogYW5kIDpERT1eSDosIHdoaWNoIEkgaW50ZXJwcmV0IGFzIDxPVGJzPjsgLS1lc3IpCisjIGFsc28gdGhlIGFsaWFzIHZ0MTAwLWJtLgorbndwNTEzLWF8bndwNTE4LWF8bndlNTAxLWF8bndwMjUxLWF8bmV3c2NibS1hfG5ld3MzMS1hfG5ld3NjYm0zM3xuZXdzMzN8b2xkIHNvbnkgdnQxMDAgZW11bGF0b3IgMzMgbGluZXMsCisJT1RicywKKwlsaW5lcyMzMywKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7MzNyXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChud3A1MTMtbzogaGFkIDpERT1eSDosIEkgdGhpbmsgdGhhdCdzIDxPVGJzPjsgYWxzbyB0aGUgYWxpYXMgdnQxMDAtYm0gLS1lc3IpCitud3A1MTMtb3xud3A1MTgtb3xud2U1MDEtb3xud3AyNTEtb3xuZXdzY2JtLW98bmV3czMxLW98b2xkIHNvbnkgdnQxMDAgZW11bGF0b3IgMzMgbGluZXMsCisJT1RicywKKwlsaW5lcyMzMSwKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7MzFyXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChuZXdzMjg6IHRoaXMgaGFkIDpERT1eSDosIEkgdGhpbmsgdGhhdCdzIDxPVGJzPiwgYW5kIDpLQj1ud3MxMjAwOiAtLWVzcikKK25ld3MyOHxzb255IHZ0MTAwIGVtdWxhdG9yIDI4IGxpbmVzLAorCU9UYnMsCisJbGluZXMjMjgsCisJaXMyPVxFN1xFW3JcRThcRUVcRUVcRUVcRU1cRU1cRU1cRVs/N2hcRVs/MWxcRVs/M2xcRTdcRVsxOzI4clxFOCwKKwl1c2U9bmV3cy1vbGQtdW5rLAorIworIyAobmV3czI5OiB0aGlzIGhhZCA6VFk9YXNjaWk6S0I9bndzMTIwMDpcIC0tZXNyKQorbmV3czI5fG5ld3MyOC1hfHNvbnkgdnQxMDAgZW11bGF0b3IgMjkgbGluZXMsCisJbGluZXMjMjksCisJaXMyPVxFN1xFW3JcRThcRUVcRUVcRUVcRU1cRU1cRU1cRVs/N2hcRVs/MWxcRVs/M2xcRTdcRVsxOzI5clxFOCwKKwl1c2U9bmV3cy1vbGQtdW5rLAorIworIyAobmV3czUxMTogdGhpcyBoYWQgOlRZPXNqaXM6IC0tZXNyKQorbndwNTExfG53cC01MTF8bndwLTUxMSB2dDEwMCwKKwlPVGJzLCBPVHB0LCBhbSwgeGVubCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cRVs7SFxFWzJKJDwyMC8+LCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EkPDIvPiwgZGwxPVxFW00sCisJZWQ9XEVbSiQ8MzAvPiwgZWw9XEVbSyQ8My8+LAorCWZsYXNoPVxFWz81aFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXEVbPzVsLAorCWlsMT1cRVtMLCBpczI9XEVbPzVsXEVbPzFsXEU+XEVbPzdoXEVbPzhoLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwKKwlrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULCBrZjY9XEUjVywga2hvbWU9XEVbSCwKKwlyaT1cRU0kPDUvPiwgcm1zbz1cRVttJDwyLz4sIHJtdWw9XEVbbSQ8Mi8+LAorCXJzMj1cRTdcRVtyXEU4XEVbPzVsXEVbPzFsXEU+XEVbPzdoXEVbPzhoLAorCXNtc289XEVbN20kPDIvPiwgc211bD1cRVs0bSQ8Mi8+LAorIyAobmV3czUxNzogdGhpcyBoYWQgOlRZPXNqaXM6LiAtLWVzcikKK253cDUxN3xud3AtNTE3fG53cC01MTcgdnQyMDAgODAgY29scyAzMCByb3dzLAorCWVzbG9rLCBocywKKwljb2xzIzgwLCBsaW5lcyMzMCwKKwlPVGkyPVxFWzIkflxuLCBkc2w9XEVbMSR+LCBmc2w9XEVbMCR9LAorCWlzMj1cRTdcRVtyXEU4XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXRzbD1cRVsxJH1cRVs7JWRmLCB1c2U9dnQyMDAsCisjIChuZXdzNTE3LXc6IHRoaXMgaGFkIDpUWT1zamlzOi4gLS1lc3IpCitud3A1MTctd3xud3AtNTE3LXd8bndwLTUxNyB2dDIwMCAxMzIgY29scyA1MCByb3dzLAorCWVzbG9rLCBocywKKwljb2xzIzEzMiwgbGluZXMjNTAsCisJT1RpMj1cRVsyJH5cbiwgZHNsPVxFWzEkfiwgZnNsPVxFWzAkfSwKKwlpczI9XEU3XEVbclxFOFxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwKKwlyczI9XEU+XEVbPzNoXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXRzbD1cRVsxJH1cRVs7JWRmLCB1c2U9dnQyMDAsCisKKyMjIyMgQ29tbW9uIERlc2t0b3AgRW52aXJvbm1lbnQKKyMKKworIyBUaGlzIHNoaXBzIHdpdGggU3VuJ3MgQ0RFIGluIFNvbGFyaXMgMi41CisjIENvcnJlY3RlZCBTdW4gQXVnIDkgMTk5OCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkB2aWRlby55YXJzLmZyZWUubmV0PgorZHR0ZXJtfENERSBkZXNrdG9wIHRlcm1pbmFsLAorCWFtLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgbG0jMCwgbmN2QCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWVuYWNzPVxFKEJcRSkwLCBmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsIGhvbWU9XEVbSCwKKwlodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwKKwlpbmQ9XEVELCBpbnZpcz1cRVs4bSwgaXMyPVxFIEZcRT5cRVs/MWxcRVs/N2hcRVs/NDVsLAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVszfiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMj1cRVsxMn4sIGtmMjA9XEVbMzR+LCBrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2ZuZD1cRVsxfiwga2hscD1cRVsyOH4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1zbz1cRVsyMjsyN20sIHJtdWw9XEVbMjRtLAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXQ7Mjs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21zbz1cRVsyOzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHVzZT1lY21hK2NvbG9yLAorCisjIyMjIE5vbi1Vbml4IENvbnNvbGVzCisjCisKKyMjIyBFTVggdGVybWNhcC5kYXQgY29tcGF0aWJpbGl0eSBtb2RlcworIworIyBLZXlwYWQ6CUhvbWU9XDBHCVVwPVwwSAlQclBhZz1cMEkKKyMJCWthMSxraAkJa2N1dTEJCWtwcCxrYTMKKyMKKyMJCUxlZnQ9XDBLCTU9XDBMCQlSaWdodD1cME0KKyMJCWtjdWIxCQlrYjIJCWtjdWYxCisjCisjCQlFbmQ9XDBPCQlEb3duPVwwUAlOeFBhZz1cMFEKKyMJCWtjMSxrZW5kCWtjdWQxCQlrYzMsa25wCisjCisjCQlJbnM9XDBSCQlEZWw9XDBTCisjCQlraWNoMQkJa2RjaDEKKyMKKyMgT24ga2V5Ym9hcmQgd2l0aCAxMiBmdW5jdGlvbiBrZXlzLAorIwlzaGlmdGVkIGYta2V5czogRjEzLUYyNAorIwljb250cm9sIGYta2V5czogRjI1LUYzNgorIwlhbHQgZi1rZXlzOiAgICAgRjM3LUY0OAorIyBUaGUgc2hpZnQvY29udHJvbC9hbHQga2V5cyBkbyBub3QgbW9kaWZ5IGVhY2ggb3RoZXIsIGJ1dCBhbHQgb3ZlcnJpZGVzIGJvdGgsCisjIGFuZCBjb250cm9sIG92ZXJyaWRlcyBzaGlmdC4KKyMKKyMgQWxzbyAocG9zc2libHkgb25seSBFTVgsIHNvIHdlIGRvbid0IHB1dCBpdCBpbiBhbnNpLnN5cywgZXRjKTogc2V0IHRoZQorIyBub19jb2xvcl92aWRlbyB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIHRoYXQgc3RhbmRvdXQoMSksIHVuZGVybGluZSgyKQorIyByZXZlcnNlKDQpIGFuZCBpbnZpc2libGUoNjQpIGRvbid0IHdvcmsgd2l0aCBjb2xvci4KK2VteC1iYXNlfERPUyBzcGVjaWFsIGtleXMsCisJYmNlLCBidywKKwlpdCM4LCBuY3YjNzEsCisJYmVsPV5HLCBrYTE9XDBHLCBrYTM9XDBJLCBrYjI9XDBMLCBrYnM9XkgsIGtjMT1cME8sIGtjMz1cMFEsCisJa2NidD1cMF5PLCBrY3ViMT1cMEssIGtjdWQxPVwwUCwga2N1ZjE9XDBNLCBrY3V1MT1cMEgsCisJa2RjaDE9XDBTLCBrZW5kPVwwTywga2YxPVwwOywga2YxMD1cMEQsIGtmMTE9XDBcMjA1LAorCWtmMTI9XDBcMjA2LCBrZjEzPVwwVCwga2YxND1cMFUsIGtmMTU9XDBWLCBrZjE2PVwwVywKKwlrZjE3PVwwWCwga2YxOD1cMFksIGtmMTk9XDBaLCBrZjI9XDA8LCBrZjIwPVwwWywga2YyMT1cMFxcLAorCWtmMjI9XDBdLCBrZjIzPVwwXDIwNywga2YyND1cMFwyMTAsIGtmMjU9XDBcXiwga2YyNj1cMF8sCisJa2YyNz1cMGAsIGtmMjg9XDBhLCBrZjI5PVwwYiwga2YzPVwwPSwga2YzMD1cMGMsIGtmMzE9XDBkLAorCWtmMzI9XDBlLCBrZjMzPVwwZiwga2YzND1cMGcsIGtmMzU9XDBcMjExLCBrZjM2PVwwXDIxMiwKKwlrZjM3PVwwaCwga2YzOD1cMGksIGtmMzk9XDBqLCBrZjQ9XDA+LCBrZjQwPVwwaywga2Y0MT1cMGwsCisJa2Y0Mj1cMG0sIGtmNDM9XDBuLCBrZjQ0PVwwbywga2Y0NT1cMHAsIGtmNDY9XDBxLAorCWtmNDc9XDBcMjEzLCBrZjQ4PVwwXDIxNCwga2Y1PVwwPywga2Y2PVwwQCwga2Y3PVwwQSwga2Y4PVwwQiwKKwlrZjk9XDBDLCBraG9tZT1cMEcsIGtpY2gxPVwwUiwga25wPVwwUSwga3BwPVwwSSwKKwl1c2U9YW5zaS5zeXMsCisKKyMgRXhjZXB0IGZvciB0aGUgIi1lbXgiIHN1ZmZpeGVzLCB0aGVzZSBhcmUgYXMgZGlzdHJpYnV0ZWQgd2l0aCBFTVggMC45YiwKKyMgYSBVbml4LXN0eWxlIGVudmlyb25tZW50IHVzZWQgb24gT1MvMi4gIChOb3RlIHRoYXQgdGhlIHN1ZmZpeCBtYWtlcyBzb21lCisjIG5hbWVzIGxvbmdlciB0aGFuIDE0IGNoYXJhY3RlcnMsIHRoZSBub21pbmFsIG1heGltdW0pLgorIworIyBSZW1vdmVkOiBybWFjcz1cRVsxMG0sIHNtYWNzPVxFWzExbSwgYmVjYXVzZSBPUy8yIGRvZXMgbm90IGltcGxlbWVudCBhY3MuCithbnNpLWVteHxBTlNJLlNZUyBjb2xvciwKKwlhbSwgYmNlLCBlbywgbWlyLCBtc2dyLCB4b24sCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCBwYWlycyM2NCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFWzE7MzM7NDRtXEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkcCwgZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XEVbPzVoXEVbPzVsLAorCWhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaW5kPV5KLAorCWtiMj1cRVtHLCBrYnM9XkgsIGtmMD1cMEQsIGtsbD1cME8sIGtzcGQ9XlosIG5lbD1eTV5KLAorCXJldj1cRVs1OzM3OzQxbSwgcm1pcj1cRVs0bCwgcm1wY2g9XEVbMTBtLAorCXJtc289XEVbMDs0NG1cRVsxOzMzbSwgcm11bD1cRVswOzQ0bVxFWzE7MzNtLCByczE9XEVjLAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyMD1cRVswbVxFWzE7MzM7NDRtLCBzbWlyPVxFWzRoLCBzbXBjaD1cRVsxMW0sCisJc21zbz1cRVswOzMxOzQ3bSwgc211bD1cRVsxOzMxOzQ0bSwgdGJjPVxFWzNnLCB1OD1cRVs/NmMsCisJdTk9XEVbYywgdXNlPWVteC1iYXNlLAorIyBuaWNlIGNvbG9ycyBmb3IgRW1hY3MgKHdoaXRlIG9uIGJsdWUsIG1vZGUgbGluZSB3aGl0ZSBvbiBjeWFuKQorYW5zaS1jb2xvci0yLWVteHxBTlNJLlNZUyBjb2xvciAyLAorCWNsZWFyPVxFWzA7Mzc7NDRtXEVbSFxFW0osIHJldj1cRVsxOzM3OzQ2bSwKKwlybXNvPVxFWzA7Mzc7NDRtLCBybXVsPVxFWzA7Mzc7NDRtLCByczE9XEVjLAorCXNldGFmPVxFWzMlcDElZG0sIHNncjA9XEVbMDszNzs0NG0sIHNtc289XEVbMTszNzs0Nm0sCisJc211bD1cRVsxOzM2OzQ0bSwgdXNlPWFuc2ktZW14LAorIyBuaWNlIGNvbG9ycyBmb3IgRW1hY3MgKHdoaXRlIG9uIGJsYWNrLCBtb2RlIGxpbmUgYmxhY2sgb24gY3lhbikKK2Fuc2ktY29sb3ItMy1lbXh8QU5TSS5TWVMgY29sb3IgMywKKwljbGVhcj1cRVswOzM3OzQwbVxFW0hcRVtKLCByZXY9XEVbMTszNzs0Nm0sCisJcm1zbz1cRVswOzM3OzQwbSwgcm11bD1cRVswOzM3OzQwbSwgcnMxPVxFYywKKwlzZXRhZj1cRVszJXAxJWRtLCBzZ3IwPVxFWzA7MTBtLCBzbXNvPVxFWzE7Mzc7NDZtLAorCXNtdWw9XEVbMDszNjs0MG0sIHVzZT1hbnNpLWVteCwKK21vbm8tZW14fHN0dXBpZCBtb25vY2hyb21lIGFuc2kgdGVybWluYWwgd2l0aCBvbmx5IG9uZSBraW5kIG9mIGVtcGhhc2lzLAorCWFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFW0hcRVsySiQ8NTA+LCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlbD1cRVtLLCBob21lPVxFW0gsCisJaHQ9XkksIGtiMj1cRVtHLCBrYnM9XkgsIGtjdWIxPVwwSywga2N1ZDE9XDBQLCBrY3VmMT1cME0sCisJa2N1dTE9XDBILCBrZjA9XDBELCBrZjE9XDA7LCBrZjI9XDA8LCBrZjM9XDA9LCBrZjQ9XDA+LAorCWtmNT1cMD8sIGtmNj1cMEAsIGtmNz1cMEEsIGtmOD1cMEIsIGtmOT1cMEMsIGtob21lPVwwRywKKwlraWNoMT1cMFIsIGtsbD1cME8sIGtucD1cMFEsIGtwcD1cMEksIG5lbD1eTV5KLCByZXY9XEVbN20sCisJc2dyMD1cRVswbSwKKworIyBVc2UgdGhpcyBmb3IgY3lnd2luMzIgKHRlc3RlZCB3aXRoIGJldGEgMTkuMSkKKyMgdW5kZXJsaW5lIGlzIGNvbG9yZWQgYnJpZ2h0IG1hZ2VudGEKKyMgc2hpZnRlZCBrZjEta2YxMiBhcmUga2YxMS1rZjIyCitjeWd3aW5CMTl8YW5zaSBlbXVsYXRpb24gZm9yIGN5Z3dpbjMyLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtlbmQ9XEVbNH4sIGtmMT1cRVtbQSwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sCisJa2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sCisJa2YxOT1cRVszM34sIGtmMj1cRVtbQiwga2YyMD1cRVszNH4sIGtmMz1cRVtbQywga2Y0PVxFW1tELAorCWtmNT1cRVtbRSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LCBybWFtQCwgc21hbUAsCisJdXNlPWFuc2kuc3lzLAorCisjIFVzZSB0aGlzIGZvciBjeWd3aW4gKHRlc3RlZCB3aXRoIHZlcnNpb24gMS4xLjApLgorIyBJJ3ZlIGNvbWJpbmVkIHBjYW5zaSBhbmQgbGludXguICBTb21lIHZhbHVlcyBvZiBjb3Vyc2Ugd2VyZSBkaWZmZXJlbnQgYW5kCisjIEkndmUgaW5kaWNhdGVkIHdoaWNoIG9mIHRoZXNlIHdlcmUgYW5kIHdoaWNoIEkgdXNlZC4KKyMgQ2hlZXJzLCBlYXJuaWVfYm95ZEB5YWhvby5jb20KKyMgc2V2ZXJhbCBjaGFuZ2VzIGJhc2VkIG9uIHJ1bm5pbmcgd2l0aCB0YWNrIGFuZCBjb21wYXJpbmcgd2l0aCBvbGRlciBlbnRyeSAtVEQKKyMgbW9yZSBjaGFuZ2VzIGZyb20gY3N3OgorIyAgIGFkZCAgICBjYnQgICBbYmFja3RhYl0KKyMgICByZW1vdmUgZW8gICAgW2VyYXNlIG92ZXJzdHJpa2Ugd2l0aCBibGFua10KKyMgICBjaGFuZ2UgY2xlYXIgd2FzIFxFW0hcRVtKICBub3cgXEVbMkogIChmYXN0ZXI/KQorIyAgIHJlbW92ZSBjb2xzCisjICAgcmVtb3ZlIGxpbmVzCisjICAgcmVtb3ZlIG5jdiMzIFtjb2xvcnMgY29sbGlkZSB3aXRoIGhpZ2hsaWdodHMsIGJpdG1hc2tdIG5vdCBhcHBsaWNhYmxlCisjICAgICAgICAgICAgICAgIHRvIE1TRE9TIGJveD8KKyMgICBhZGQgICAgY3ViICAgW2N1cnNvciBiYWNrIHBhcmFtXQorIyAgIGFkZCAgICBjdWYgICBbY3Vyc29yIGZvcndhcmQgcGFyYW1dCisjICAgYWRkICAgIGN1dSAgIFtjdXJzb3IgdXAgcGFyYW1dCisjICAgYWRkICAgIGN1ZCAgIFtjdXJzb3IgZG93biBwYXJhbV0KKyMgICBhZGQgICAgaHMgICAgW2hhcyBzdGF0dXMgbGluZV0KKyMgICBhZGQgICAgZnNsICAgW3JldHVybiBmcm9tIHN0YXR1cyBsaW5lXQorIyAgIGFkZCAgICB0c2wgICBbZ28gdG8gc3RhdHVzIGxpbmVdCisjICAgYWRkICAgIHNtYWNzIFtTdGFydCBhbHQgY2hhcnNldF0gKG5vdCBzdXJlIGlmIHRoaXMgd29ya3MpCisjICAgYWRkICAgIHJtYWNzIFtFbmQgYWx0IGNoYXJzZXRdICAgKGRpdHRvKQorIyAgIGFkZCAgICBzbWN1cCBbZW50ZXJfY2FfbW9kZV0gKHNhdmUgY29uc29sZTsgdGhhbmtzIENvcmlubmEpCisjICAgYWRkICAgIHJtY3VwIFtleGl0X2NhX21vZGVdICAocmVzdG9yZSBjb25zb2xlOyB0aGFua3MgQ29yaW5uYSkKKyMgICBhZGQgICAga2IyICAgW2NlbnRlciBvZiBrZXlwYWRdCisjICAgYWRkICAgIHU4ICAgIFt1c2VyIHN0cmluZyA4XSBcRVs/NmMKKyMgICBhZGQgICAgZWwgICAgW2NsZWFyIHRvIGVuZCBvZiBsaW5lXSBcRVtLCisjIE5vdGVzOgorIyAgIGNub3JtIFttYWtlIGN1cnNvciBub3JtYWxdIG5vdCBpbXBsZW1lbnRlZAorIyAgIGZsYXNoIFtmbGFzaF0gbm90IGltcGxlbWVudGVkCisjICAgYmxpbmsgW2JsaW5rXSBub3QgaW1wbGVtZW50ZWQgdmVyeSB1c2VmdWxseSBpbiBjeWd3aW4/IFxFWzVtCisjICAgZGltICAgW2RpbV0gbm90IGltcGxlbWVudGVkIHZlcnkgdXNlZnVsbHkgaW4gY3lnd2luPyBcRVsybQorIyAgIGN1YjEgIFtjdXJzb3IgYmFjayAxXSB0eXBpY2FsbHkgXEVbRCwgYnV0IF5IIGlzIGZhc3Rlcj8KKyMgICBrTlhUICBbc2hpZnRlZCBuZXh0IGtleV0gbm90IGltcGxlbWVudGVkCisjICAga1BSViAgW3NoaWZ0ZWQgcHJldiBrZXldIG5vdCBpbXBsZW1lbnRlZAorIyAgIGtob21lIFtob21lIGtleV0gcmVhbGx5IGlzIFxFWzF+IE5PVCBcRVtICisjICAgdGJjICAgW2NsZWFyIHRhYiBzdG9wc10gbm90IGltcGxlbWVudGVkCisjICAgeGVubCAgW25ld2xpbmUgaWdubm9yZWQgYWZ0ZXIgODAgY29sc10gbWVzc2VzIHVwIGxhc3QgbGluZT8gRWh1ZCBLYXJuaQorIyAgIHNtcGNoIFtTdGFydCBQQyBjaGFyc2V0XSBpcyBcRVsxMW0sIHNhbWUgYXMgc21hY3MKKyMgICBybXBjaCBbRW5kIFBDIGNoYXJzZXRdIGlzIFxFWzEwbSwgc2FtZSBhcyBybWFjcworIyAgIG1pciAgIFttb3ZlIGluIGluc2VydCBtb2RlXSBmYWlscyBpbiB0YWNrPworIyAgIGJjZSAgIFtiYWNrIGNvbG9yIGVyYXNlXSBjYXVzZXMgcHJvYmxlbXMgd2l0aCBjaGFuZ2UgYmFja2dyb3VuZCBjb2xvcj8KKyMgICBjdnZpcyBbbWFrZSBjdXJzb3IgdmVyeSB2aXNpYmxlXSBjYXVzZXMgYSBzdGFja2R1bXAgd2hlbiB0ZXN0aW5nIHdpdGgKKyMgICAgICAgICB0ZXN0Y3VycyB1c2luZyB0aGUgb3V0cHV0IG9wdGlvbj8gXEVbPzI1aFxFWz84YworIyAgIGNpdmlzIFttYWtlIGN1cnNvciBpbnZpc2libGVdIGNhdXNlcyBldmVyeXRoaW5nIHRvIHN0YWNrZHVtcD8gXEVbPzI1bFxFWz8xYworIyAgIGVjaCAgIFtlcmFzZSBjaGFyYWN0ZXJzIHBhcmFtXSBicm9rZW4gXEVbJXAxJWRYCisjICAga2NidCAgW2JhY2stdGFiIGtleV0gbm90IGltcGxlbWVudGVkIGluIGN5Z3dpbj8gIFxFW1oKKyMKKyMgMjAwNS8xMS8xMiAtVEQKKyMJUmVtb3ZlIGNidCBzaW5jZSBpdCBkb2VzIG5vdCB3b3JrIGluIGN1cnJlbnQgY3lnd2luCisjCUFkZCAnbWlyJyBhbmQgJ2luJyBmbGFncyBiYXNlZCBvbiB0YWNrCitjeWd3aW58YW5zaSBlbXVsYXRpb24gZm9yIEN5Z3dpbiwKKwlhbSwgaHMsIG1pciwgbXNnciwgeG9uLAorCWNvbG9ycyM4LCBpdCM4LCBwYWlycyM2NCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsCisJY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZnNsPV5HLCBob21lPVxFW0gsCisJaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaW52aXM9XEVbOG0sIGtiMj1cRVtHLAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YxPVxFW1tBLCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwga2YyPVxFW1tCLCBrZjIwPVxFWzM0fiwga2YzPVxFW1tDLCBrZjQ9XEVbW0QsCisJa2Y1PVxFW1tFLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtzcGQ9XlosCisJbmVsPV5NXkosIG9wPVxFWzM5OzQ5bSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWFjcz1cRVsxMG0sIHJtY3VwPVxFWzJKXEVbPzQ3bFxFOCwgcm1pcj1cRVs0bCwKKwlybXBjaD1cRVsxMG0sIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgcnMxPVxFY1xFXVIsCisJc2M9XEU3LCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNncj1cRVswOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDkldDsxMSU7bSwKKwlzZ3IwPVxFWzA7MTBtLCBzbWFjcz1cRVsxMW0sIHNtY3VwPVxFN1xFWz80N2gsCisJc21pcj1cRVs0aCwgc21wY2g9XEVbMTFtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0c2w9XEVdOywKKwl2cGE9XEVbJWklcDElZGQsIHVzZT12dDEwMitlbnEsCisKKyMgSSd2ZSBzdXBwbGllZCB0aGlzIHNvIHRoYXQgeW91IGNhbiBoZWxwIHRlc3QgbmV3IHZhbHVlcyBhbmQgYWRkIG90aGVyCisjIGZlYXR1cmVzLiAgQ2hlZXJzLCBlYXJuaWVfYm95ZEB5YWhvby5jb20uCisjCisjIFNvbWUgZmVhdHVyZXMgYXJlIGZyb20gcGNhbnNpLiAgVGhlIG9wIHZhbHVlIGlzIGZyb20gbGludXguICBGdW5jdGlvbi1rZXlzCisjIGFyZSBmcm9tIGxpbnV4LiAgVGhlc2UgaGF2ZSBiZWVuIHRlc3RlZCBub3QgdG8gY2F1c2UgcHJvYmxlbXMuICB4ZW5sIHdhcyBpbgorIyB0aGlzIGxpc3QsIGJ1dCBET0VTIGNhdXNlIHByb2JsZW1zIHNvIGl0IGhhcyBiZWVuIHJlbW92ZWQKK2N5Z3dpbkRCR3xEZWJ1ZyBWZXJzaW9uIGZvciBDeWd3aW4sCisJYW0sIGVvLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIG5jdiMzLCBwYWlycyM2NCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLAorCWNub3JtPVxFWz8yNWgsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWZsYXNoPVxFWz81aFxFWz81bCQ8MjAwLz4sIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLAorCWh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVs4bSwga05YVD1cRVs2JCwga1BSVj1cRVs1JCwKKwlrYjI9XEVbRywga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sIGtlbmQ9XEVbNH4sIGtmMT1cRVtbQSwKKwlrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwKKwlrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwKKwlrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sIGtmMj1cRVtbQiwga2YyMD1cRVszNH4sCisJa2YzPVxFW1tDLCBrZjQ9XEVbW0QsIGtmNT1cRVtbRSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sCisJa25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtzcGQ9XlosIG5lbD1eTV5KLCBvcD1cRVszOTs0OW0sCisJcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwgcm1hY3M9XEVbMTBtLCBybWlyPVxFWzRsLAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczE9XEVjXEVdUiwgc2M9XEU3LAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzEyJTttLAorCXNncjA9XEVbMDsxMG0sIHNtYWNzPVxFWzExbSwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbMmcsIHZwYT1cRVslaSVwMSVkZCwgdXNlPXZ0MTAyK2VucSwKKworIyBLZXkgZGVmaW5pdGlvbnM6CisjIFRoZSBlbmNvZGluZ3MgZm9yIHVuc2hpZnRlZCBhcnJvdyBrZXlzLCBGMS1GMTIsIEhvbWUsIEluc2VydCwgZXRjLiAgbWF0Y2ggdGhlCisjIGVuY29kaW5ncyB1c2VkIGJ5IG90aGVyIHg4NiBlbnZpcm9ubWVudHMuICBBbGwgb3RoZXJzIGFyZSBpbnZlbnRlZCBmb3IgREpHUFAuCisjIE9kZGx5IGVub3VnaCwgd2hpbGUgc2V2ZXJhbCBjb21iaW5hdGlvbnMgb2YgbW9kaWZpZXJzIGFyZSB0YWJ1bGF0ZWQsIHRoZXJlIGlzCisjIG5vbmUgZm9yIHNoaWZ0ZWQgY3Vyc29yIGtleXMuCisjCisjCUYxCQkJXEVbW0EKKyMJRjIJCQlcRVtbQgorIwlGMwkJCVxFW1tDCisjCUY0CQkJXEVbW0QKKyMJRjUJCQlcRVtbRQorIwlGNgkJCVxFWzE3fgorIwlGNwkJCVxFWzE4fgorIwlGOAkJCVxFWzE5fgorIwlGOQkJCVxFWzIwfgorIwlGMTAJCQlcRVsyMX4KKyMJRjExCQkJXEVbMjN+CisjCUYxMgkJCVxFWzI0fgorIworIwlEZWxldGUJCQlcRVszfgorIwlEb3duIEFycm93CQlcRVtCCisjCUVuZAkJCVxFWzR+CisjCUhvbWUJCQlcRVsxfgorIwlJbnNlcnQJCQlcRVsyfgorIwlMZWZ0IEFycm93CQlcRVtECisjCVBhZ2UgRG93bgkJXEVbNn4KKyMJUGFnZSBVcAkJCVxFWzV+CisjCVJpZ2h0IEFycm93CQlcRVtDCisjCVVwIEFycm93CQlcRVtBCisjCisjCVNoaWZ0LUYxCQlcRVsyNX4KKyMJU2hpZnQtRjIJCVxFWzI2fgorIwlTaGlmdC1GMwkJXEVbMjd+CisjCVNoaWZ0LUY0CQlcRVsyOH4KKyMJU2hpZnQtRjUJCVxFWzI5fgorIwlTaGlmdC1GNgkJXEVbMzB+CisjCVNoaWZ0LUY3CQlcRVszMX4KKyMJU2hpZnQtRjgJCVxFWzMyfgorIwlTaGlmdC1GOQkJXEVbMzN+CisjCVNoaWZ0LUYxMAkJXEVbMzR+CisjCVNoaWZ0LUYxMQkJXEVbMzV+CisjCVNoaWZ0LUYxMgkJXEVbMzZ+CisjCisjCUN0cmwtRjEJCQlcRVs0N34KKyMJQ3RybC1GMgkJCVxFWzQ4fgorIwlDdHJsLUYzCQkJXEVbNDl+CisjCUN0cmwtRjQJCQlcRVs1MH4KKyMJQ3RybC1GNQkJCVxFWzUxfgorIwlDdHJsLUY2CQkJXEVbNTJ+CisjCUN0cmwtRjcJCQlcRVs1M34KKyMJQ3RybC1GOAkJCVxFWzU0fgorIwlDdHJsLUY5CQkJXEVbNTV+CisjCUN0cmwtRjEwCQlcRVs1Nn4KKyMJQ3RybC1GMTEJCVxFWzU3fgorIwlDdHJsLUYxMgkJXEVbNTh+CisjCisjCUN0cmwtRGVsZXRlCQlcRVs0M34KKyMJQ3RybC1Eb3duIEFycm93CQlcRVszOH4KKyMJQ3RybC1FbmQJCVxFWzQ0fgorIwlDdHJsLUhvbWUJCVxFWzQxfgorIwlDdHJsLUluc2VydAkJXEVbNDJ+CisjCUN0cmwtTGVmdCBBcnJvdwkJXEVbMzl+CisjCUN0cmwtUGFnZSBEb3duCQlcRVs0Nn4KKyMJQ3RybC1QYWdlIFVwCQlcRVs0NX4KKyMJQ3RybC1SaWdodCBBcnJvdwlcRVs0MH4KKyMJQ3RybC1VcCBBcnJvdwkJXEVbMzd+CisjCisjCUFsdC1GMQkJCVxFWzU5fgorIwlBbHQtRjIJCQlcRVs2MH4KKyMJQWx0LUYzCQkJXEVbNjF+CisjCUFsdC1GNAkJCVxFWzYyfgorIwlBbHQtRjUJCQlcRVs2M34KKyMJQWx0LUY2CQkJXEVbNjR+CisjCUFsdC1GNwkJCVxFWzY1fgorIwlBbHQtRjgJCQlcRVs2Nn4KKyMJQWx0LUY5CQkJXEVbNjd+CisjCUFsdC1GMTAJCQlcRVs2OH4KKyMJQWx0LUYxMQkJCVxFWzc5fgorIwlBbHQtRjEyCQkJXEVbODB+CisjCisjCUFsdC1EZWxldGUJCVxFWzY1fgorIwlBbHQtRG93biBBcnJvdwkJXEVbNjB+CisjCUFsdC1FbmQJCQlcRVs2Nn4KKyMJQWx0LUhvbWUJCVxFWzQxfgorIwlBbHQtSW5zZXJ0CQlcRVs2NH4KKyMJQWx0LUxlZnQgQXJyb3cJCVxFWzYxfgorIwlBbHQtUGFnZSBEb3duCQlcRVs2OH4KKyMJQWx0LVBhZ2UgVXAJCVxFWzY3fgorIwlBbHQtUmlnaHQgQXJyb3cJCVxFWzYyfgorIwlBbHQtVXAgQXJyb3cJCVxFWzU5fgorIworIyBBbHNvOgorIwlBbHQtQQkJCVxFWzgyfgorIwlBbHQtQgkJCVxFWzgyfgorIwlBbHQtQwkJCVxFWzgzfgorIwlBbHQtRAkJCVxFWzg0fgorIwlBbHQtRQkJCVxFWzg1fgorIwlBbHQtRgkJCVxFWzg2fgorIwlBbHQtRwkJCVxFWzg3fgorIwlBbHQtSAkJCVxFWzg4fgorIwlBbHQtSQkJCVxFWzg5fgorIwlBbHQtSgkJCVxFWzkwfgorIwlBbHQtSwkJCVxFWzkxfgorIwlBbHQtTAkJCVxFWzkyfgorIwlBbHQtTQkJCVxFWzkzfgorIwlBbHQtTgkJCVxFWzk0fgorIwlBbHQtTwkJCVxFWzk1fgorIwlBbHQtUAkJCVxFWzk2fgorIwlBbHQtUQkJCVxFWzk3fgorIwlBbHQtUgkJCVxFWzk4fgorIwlBbHQtUwkJCVxFWzk5fgorIwlBbHQtVAkJCVxFWzEwMH4KKyMJQWx0LVUJCQlcRVsxMDF+CisjCUFsdC1WCQkJXEVbMTAyfgorIwlBbHQtVwkJCVxFWzEwM34KKyMJQWx0LVgJCQlcRVsxMDR+CisjCUFsdC1ZCQkJXEVbMTA1fgorIwlBbHQtWgkJCVxFWzEwNn4KK2RqZ3BwfGFuc2kgZW11bGF0aW9uIGZvciBESkdQUCBhbHBoYSwKKwlhbSwgYmNlLCBtc2dyLCB4aHAsIHhvbiwgeHQsCisJY29sb3JzIzgsIGl0IzgsIHBhaXJzIzY0LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbMXYsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFW3YsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWzJ2LCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs4bSwga2JzPV5ILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LAorCWtlbmQ9XEVbNH4sIGtmMT1cRVtbQSwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjI9XEVbW0IsIGtmMz1cRVtbQywga2Y0PVxFW1tELCBrZjU9XEVbW0UsCisJa2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LCBuZWw9Xk1eSiwKKwlvcD1cRVszNzs0MG0sIHJldj1cRVs3bSwgcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwgcm1zbz1cRVttLAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyPVxFWzAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlZTsyNSU7JT8lcDYldDsxJTslPyVwNyV0OzglO20sCisJc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB2cGE9XEVbJWklcDElZGQsCisKK2RqZ3BwMjAzfEVudHJ5IGZvciBESkdQUCAyLjAzLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsCisJa2N1ZDE9XkosIG5lbD1eTV5KLAorCitkamdwcDIwNHxFbnRyeSBmb3IgREpHUFAgMi4wNCwKKwlPVGJzLCBhbSwgQVgsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCBuY3YjMywgcGFpcnMjNjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWzF2LAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XEVbdiwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsCisJY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBjdnZpcz1cRVsydiwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBodD1eSSwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1cRVtTLCBpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOG0sIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzN+LCBrZjA9XEVbMjF+LCBrZjE9XEVbW0EsIGtmMTA9XEVbMjF+LCBrZjI9XEVbW0IsCisJa2YzPVxFW1tDLCBrZjQ9XEVbW0QsIGtmNT1cRVtbRSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sCisJa2xsPVxFWzR+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwgbmVsPV5NXkosIHJldj1cRVs3bSwKKwlyaT1cRVtULCByaW49XEVbJXAxJWRULCBybXNvPVxFW20sIHNldGFiPVxFWzQlcDElZG0sCisJc2V0YWY9XEVbMyVwMSVkbSwgc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjIFRoaXMgaXMgdGVzdGVkIHVzaW5nIFUvV2luJ3MgdGVsbmV0LiAgU2Nyb2xsaW5nIGlzIG9taXR0ZWQgYmVjYXVzZSBpdCBpcworIyBidWdneS4gIEFub3RoZXIgb2RkIGJ1ZyBhcHBlYXJzIHdoZW4gZGlzcGxheWluZyAifiIgaW4gYWx0ZXJuYXRlIGNoYXJhY3RlcgorIyBzZXQgKHRoZSBlbXVsYXRvciBzcGl0cyBvdXQgZXJyb3IgbWVzc2FnZXMpLiAgQ29tcGFyZSB3aXRoIGF0dDYzODYgLVRECit1d2lufFUvV2luIDMuMiBjb25zb2xlLAorCWFtLCBlbywgaW4sIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xvcnMjOCwgaXQjOCwgbmN2IzU4LCBwYWlycyM2NCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBpXDMxNmpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLCBlY2g9XEVbJXAxJWRYLAorCWVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cMTc3LCBrZW5kPVxFW1ksIGtmMT1cRU9QLAorCWtmMTA9XEVPWSwga2YxMT1cRU9aLCBrZjEyPVxFT0EsIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2Y1PVxFT1QsIGtmNj1cRU9VLCBrZjc9XEVPViwga2Y4PVxFT1csIGtmOT1cRU9YLAorCWtob21lPVxFW0gsIGtpY2gxPVxFW0AsIG5lbD1eTV5KLCBvcD1cRVszOTs0OW0sIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJtYWNzPVxFWzEwbSwgcm1pcj1cRVs0bCwgcm1wY2g9XEVbMTBtLAorCXJtc289XEVbMjdtLCBybXVsPVxFW20sIHJzMT1cRWNcRV1SLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwgc2dyMD1cRVswOzEwbSwKKwlzbWFjcz1cRVsxMW0sIHNtaXI9XEVbNGgsIHNtcGNoPVxFWzExbSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHU2PVxFWyVpJWQ7JWRSLCB1Nz1cRVs2biwKKworIyBUaGlzIGVudHJ5IGZpdHMgdGhlIFdpbmRvd3MgTlQgY29uc29sZSB3aGVuIHRoZSBfUE9TSVhfVEVSTSBlbnZpcm9ubWVudAorIyB2YXJpYWJsZSBpcyBzZXQgdG8gJ29uJy4gIFdoaWxlIHRoZSBXaW5kb3dzIE5UIFBPU0lYIGNvbnNvbGUgaXMgc2VsZG9tIHVzZWQsCisjIHRoZSBUZWxuZXQgY2xpZW50IHN1cHBsaWVkIHdpdGggYm90aCB0aGUgV2luZG93cyBmb3IgV29ya0dyb3VwIDMuMTEgVENQL0lQCisjIHN0YWNrIGFuZCB0aGUgV2luMzIgKGkuZS4sIFdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQgMy4xIG9yIGxhdGVyKSBvcGVyYXRpbmcKKyMgc3lzdGVtcyBpcyBub3QsIGFuZCAoc3VycHJpc2UhKSB0aGV5IG1hdGNoIHZlcnkgd2VsbC4KKyMKKyMgU2VlOiAgTVMgS25vd2xlZGdlIEJhc2UgaXRlbSBRMTA4NTgxLCBkYXRlZCAxMy1NQVktMTk5NywgdGl0bGVkICJTZXR0aW5nIFVwCisjIFZJIFBPU0lYIEVkaXRvciBmb3IgV2luZG93cyBOVCAzLjEiLiAgVHJ1ZSB0byBNaWNyb3NvZnQgZm9ybSwgbm90IG9ubHkKKyMgYXJlIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGEgcGlsZSBvZiBtaW5kLW51bWJpbmcgYnVyZWF1Y3JhdGVzZSwKKyMgYnV0IHRoZSB0ZXJtY2FwIGVudHJ5IGlzIGFjdHVhbGx5IGJyb2tlbiBhbmQgdW51c2FibGUgYXMgZ2l2ZW47IHRoZSA6ZG86CisjIGNhcGFiaWxpdHkgaXMgbWlzc3BlbGxlZCAiZCIuCisjCisjIFRvIHVzZSB0aGlzLCB5b3UgbmVlZCB0byBhIGJ1bmNoIG9mIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyMKKyMgU0VUIF9QT1NJWF9URVJNPW9uCisjIFNFVCBURVJNPWFuc2kKKyMgU0VUIFRFUk1DQVA9bG9jYXRpb24gb2YgdGVybWNhcCBmaWxlIGluIFBPU0lYIGZpbGUgZm9ybWF0CisjIHdoaWNoIGlzIGNhc2Utc2Vuc2l0aXZlLgorIyBlLmcuIFNFVCBURVJNQ0FQPS8vRC9SRVNLSVQzNS9wb3NpeC90ZXJtY2FwCisjIFNFVCBUTVA9Ly9DL1RFTVAKKyMKKyMgSW1wb3J0YW50IG5vdGU6IHNldHRpbmcgdGhlIFRNUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBQT1NJWCBzdHlsZSByZW5kZXJzCisjIGl0IGluY29tcGF0aWJsZSB3aXRoIGEgbG90IG9mIG90aGVyIGFwcGxpY2F0aW9ucywgaW5jbHVkaW5nIFZpc3VhbCBDKysuIFNvCisjIHlvdSBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIGNvbW1hbmQgd2luZG93IGp1c3QgZm9yIHZpLiBBbGwgdGhlIG90aGVyCisjIHZhcmlhYmxlcyBtYXkgYmUgcGVybWFuZW50bHkgc2V0IGluIHRoZSBDb250cm9sIFBhbmVsXFN5c3RlbSBhcHBsZXQuCisjCisjIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgcmVzdHJpY3Rpb25zIG9mIHRoaXMgZmFjaWxpdHkgYXQKKyMgPGh0dHA6Ly93d3cubmVudHVnLm9yZy91bml4LXRvLW50L250cG9zaXguaHRtPi4KKyMKKyMgRnJvbTogRmVkZXJpY28gQmlhbmNoaSA8YmlhbmNoaUBtYWduYS5jaXNpZC51bmlwaS5pdD4sIDE1IEphbiAxOTk3CithbnNpLW50fHBzeF9hbnNpfE1pY3Jvc29mdCBXaW5kb3dzIE5UIGNvbnNvbGUgUE9TSVggQU5TSSBtb2RlLAorCWFtLCBidywgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGNsZWFyPVxFWzJKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgaHQ9XkksIGluZD1cRVtTLCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW1YsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwgbmVsPVxyXEVbUywgcmM9XEVbdSwgcmV2PVxFWzdtLAorCXJpPVxFW1QsIHJtc289XEVbbSwgc2M9XEVbcywgc2dyMD1cRVswbSwgc21zbz1cRVs3bSwKKyMgRnJvbTogamV3QHZlbnVzLnN1bnF1ZXN0LmNvbQorIyBEYXRlOiAxOSBGZWIgOTMgMjM6NDE6MDcgR01UCisjIEhlcmUncyAgYSAgY29tYmluYXRpb24gb2YgIGFuc2kgYW5kICB2dDEwMCB0ZXJtY2FwCisjIGVudHJpZXMgICB0aGF0ICB3b3JrcyAgbmVhcmx5ICAgcGVyZmVjdGx5ICBmb3IgIG1lCisjIChHYXRld2F5IDIwMDAgSGFuZGJvb2sgYW5kIE1pY3Jvc29mdCBXb3JrcyAzLjApOgorcGNtd3xQQyBydW5uaW5nIE1pY3Jvc29mdCBXb3JrcywKKwlhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyLz4sIGJvbGQ9XEVbMW0kPDIvPiwKKwljbGVhcj1cRVs7SFxFWzJKJDw1MC8+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFW0MkPDIvPiwgY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1Lz4sCisJY3V1MT1cRVtBJDwyLz4sIGVkPVxFW0okPDUwLz4sIGVsPVxFW0skPDMvPiwgaG9tZT1cRVtILAorCWh0PV5JLCBodHM9XEVIJDwyLz4sIGluZD1cRUQkPDUvPiwgaXMyPVxFWzE7MjRyXEVbMjQ7MUgsCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBuZWw9XHJcRUQkPDUvPiwKKwlyYz1cRTgsIHJldj1cRVs3bSQ8Mi8+LCByZj0vdXNyL3NoYXJlL2xpYi90YWJzZXQvdnQxMDAsCisJcmk9XEVNJDw1Lz4sIHJtc289XEVbbSQ8Mi8+LCBybXVsPVxFW20kPDIvPiwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyMD1cRVttJDwyLz4sIHNtc289XEVbN20kPDIvPiwgc211bD1cRVs0bSQ8Mi8+LAorCXRiYz1cRVszZyQ8Mi8+LAorCisjIEZyb206IEZlZGVyaWNvIEJpYW5jaGkKKyMgVGhpcyBpcyB0aGUgZW50cnkgZm9yIHRoZSBPcGVuTlQgdGVybWluYWwuCisjIFRoZSBudGNvbnNvbGUgbmFtZSBpcyBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eS4KKyMgVGhpcyBpcyBmb3IgT3Blbk5UIDIuMCBhbmQgbGF0ZXIuCisjIExhdGVyIE9wZW5OVCB3YXMgcmVuYW1lZCB0byBJbnRlcml4LgorIworIyBQcmVzZW50bHkgaXQgaXMgZGlzdHJpYnV0ZWQgYnkgTWljcm9zb2Z0IGFzIFNlcnZpY2VzIEZvciBVbml4IChTRlUpLgorIyBUaGUgMy41IGJldGEgY29udGFpbnMgbmN1cnNlcyA0LjIgKHRoYXQgaXMgaGVhZGVyIGZpbGVzIGFuZCBleGVjdXRhYmxlcywKKyMgdGhlIGRvY3VtZW50YXRpb24gZGF0ZXMgZnJvbSAxLjkuOWUpIC1URAorCitpbnRlcml4fG9wZW5udHxvcGVubnQtMjV8bnRjb25zb2xlfG50Y29uc29sZS0yNXxPcGVuTlQtdGVybSBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJYW0sIGJ3LCBtc2dyLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBsaW5lcyMyNSwgbmN2IzMsIHBhaXJzIzY0LAorCWFjc2M9YFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnFcMzA0clwzNjJzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM3MXpcMzcye1wzNzN8XDM3NH1cMzc1flwzNzYuXDAzMS1cMDMwXCxcMDIxK15QMFwzMzNwXDMwNHJcMzA0eVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNCwKKwliZWw9XkcsIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVsySiwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgaHQ9XkksIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtNLCBrZW5kPVxFW1UsIGtmMD1cRUZBLAorCWtmMT1cRUYxLCBrZjEwPVxFRkEsIGtmMTE9XEVGQiwga2YxMj1cRUZDLCBrZjEzPVxFRkQsCisJa2YxND1cRUZFLCBrZjE1PVxFRkYsIGtmMTY9XEVGRywga2YxNz1cRUZILCBrZjE4PVxFRkksCisJa2YxOT1cRUZKLCBrZjI9XEVGMiwga2YyMD1cRUZLLCBrZjIxPVxFRkwsIGtmMjI9XEVGTSwKKwlrZjIzPVxFRk4sIGtmMjQ9XEVGTywga2YyNT1cRUZQLCBrZjI2PVxFRlEsIGtmMjc9XEVGUiwKKwlrZjI4PVxFRlMsIGtmMjk9XEVGVCwga2YzPVxFRjMsIGtmMzA9XEVGVSwga2YzMT1cRUZWLAorCWtmMzI9XEVGVywga2YzMz1cRUZYLCBrZjM0PVxFRlksIGtmMzU9XEVGWiwga2YzNj1cRUZhLAorCWtmMzc9XEVGYiwga2YzOD1cRUZjLCBrZjM5PVxFRmQsIGtmND1cRUY0LCBrZjQwPVxFRmUsCisJa2Y0MT1cRUZmLCBrZjQyPVxFRmcsIGtmNDM9XEVGaCwga2Y0ND1cRUZpLCBrZjQ1PVxFRmosCisJa2Y0Nj1cRUZrLCBrZjQ3PVxFRm0sIGtmNDg9XEVGbiwga2Y0OT1cRUZvLCBrZjU9XEVGNSwKKwlrZjUwPVxFRnAsIGtmNTE9XEVGcSwga2Y1Mj1cRUZyLCBrZjUzPVxFRnMsIGtmNTQ9XEVGdCwKKwlrZjU1PVxFRnUsIGtmNTY9XEVGdiwga2Y1Nz1cRUZ3LCBrZjU4PVxFRngsIGtmNTk9XEVGeSwKKwlrZjY9XEVGNiwga2Y2MD1cRUZ6LCBrZjYxPVxFRissIGtmNjI9XEVGLSwKKwlrZjYzPVxFRlwwMTQga2Y2ND1cRUYkLCBrZjc9XEVGNywga2Y4PVxFRjgsIGtmOT1cRUY5LAorCWtpY2gxPVxFW0wsIGtsbD1cRVtVLCBrbnA9XEVbVCwga3BwPVxFW1MsIGxsPVxFW1UsIG5lbD1eTV5KLAorCW9wPVxFW20sIHJjPVxFW3UsIHJldj1cRVs3bSwgcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwKKwlybWN1cD1cRVsyYlxFW3VcclxFW0ssIHJtc289XEVbbSwgcm11bD1cRVttLCByczE9XEVjLAorCXNjPVxFW3MsIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2V0Yj1cRVslcDElezQwfSUrJWRtLCBzZXRmPVxFWyVwMSV7MzB9JSslZG0sCisJc2dyMD1cRVswbSwgc21jdXA9XEVbc1xFWzFiLCBzbXNvPVxFWzFtLCBzbXVsPVxFWzRtLAorCitvcGVubnQtMzV8bnRjb25zb2xlLTM1fE9wZW5OVC10ZXJtMzUgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzM1LCB1c2U9b3Blbm50LAorCitvcGVubnQtNTB8bnRjb25zb2xlLTUwfE9wZW5OVC10ZXJtNTAgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzUwLCB1c2U9b3Blbm50LAorCitvcGVubnQtNjB8bnRjb25zb2xlLTYwfE9wZW5OVC10ZXJtNjAgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzYwLCB1c2U9b3Blbm50LAorCitvcGVubnQtMTAwfG50Y29uc29sZS0xMDB8T3Blbk5ULXRlcm0xMDAgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzEwMCwgdXNlPW9wZW5udCwKKworIyBPcGVuTlQgd2lkZSB0ZXJtaW5hbHMKK29wZW5udC13fG9wZW5udC0yNS13fG50Y29uc29sZS13fG50Y29uc29sZS0yNS13fE9wZW5OVC10ZXJtLXcgY29tcGF0IHdpdGggY29sb3IsCisJY29scyMxMjUsIHVzZT1vcGVubnQsCisKK29wZW5udC0zNS13fG50Y29uc29sZS0zNS13fE9wZW5OVC10ZXJtMzUtdyBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjMzUsIHVzZT1vcGVubnQtdywKKworb3Blbm50LTUwLXd8bnRjb25zb2xlLTUwLXd8T3Blbk5ULXRlcm01MC13IGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlsaW5lcyM1MCwgdXNlPW9wZW5udC13LAorCitvcGVubnQtNjAtd3xudGNvbnNvbGUtNjAtd3xPcGVuTlQtdGVybTYwLXcgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzYwLCB1c2U9b3Blbm50LXcsCisKK29wZW5udC13LXZ0fG9wZW5udC0yNS13LXZ0fG50Y29uc29sZS13LXZ0fG50Y29uc29sZS0yNS13LXZ0fE9wZW5OVC10ZXJtLXctdnQgY29tcGF0IHdpdGggY29sb3IsCisJY29scyMxMzIsIHVzZT1vcGVubnQsCisKKyMgT3Blbk5UIHRlcm1pbmFscyB3aXRoIG5vIHNtY3VwL3JtY3VwIChuYW1lcyBtYXRjaCB0ZXJtY2FwIGVudHJpZXMpCitpbnRlcml4LW50aXxvcGVubnQtbnRpfG9wZW5udC0yNS1udGl8bnRjb25zb2xlLTI1LW50aXxPcGVuTlQtbnRpIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlybWN1cEAsIHNtY3VwQCwgdXNlPW9wZW5udCwKKworb3Blbm50LTM1LW50aXxudGNvbnNvbGUtMzUtbnRpfE9wZW5OVC10ZXJtMzUtbnRpIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlsaW5lcyMzNSwgdXNlPW9wZW5udC1udGksCisKK29wZW5udC01MC1udGl8bnRjb25zb2xlLTUwLW50aXxPcGVuTlQtdGVybTUwLW50aSBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjNTAsIHVzZT1vcGVubnQtbnRpLAorCitvcGVubnQtNjAtbnRpfG50Y29uc29sZS02MC1udGl8T3Blbk5ULXRlcm02MC1udGkgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzYwLCB1c2U9b3Blbm50LW50aSwKKworb3Blbm50LTEwMC1udGl8bnRjb25zb2xlLTEwMC1udGl8T3Blbk5ULXRlcm0xMDAtbnRpIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlsaW5lcyMxMDAsIHVzZT1vcGVubnQtbnRpLAorCisjIyMjIyMjIyBDT01NT04gVEVSTUlOQUwgVFlQRVMKKyMKKyMgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0ZXJtaW5hbCBjbGFzc2VzIGFuZCBtYWtlciBicmFuZHMgdGhhdCBhcmUgc3RpbGwKKyMgcXVpdGUgY29tbW9uLCBidXQgaGF2ZSBwcm9wcmlldGFyeSBjb21tYW5kIHNldHMgbm90IGJsZXNzZWQgYnkgQU5TSS4KKyMKKworIyMjIyBBbHRvcworIworIyBBbHRvcyBtYWRlIGEgbW9kZXJhdGVseSBzdWNjZXNzZnVsIGxpbmUgb2YgVU5JWCBib3hlcy4gIEluIDE5OTAgdGhleSB3ZXJlCisjIGJvdWdodCBvdXQgYnkgQWNlciwgYSBtYWpvciBUYWl3YW5lc2UgbWFudWZhY3R1cmVyIG9mIFBDLWNsb25lcy4KKyMgQWNlciBoYXMgYSB3ZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFjZXIuY29tLgorIworIyBBbHRvcyBkZXNjcmlwdGlvbnMgZnJvbSBUZWQgTWl0dGVsc3RhZWR0IDx0ZWRtQGFnb3JhLnJhaW4uY29tPiA0IFNlcCAxOTkzCisjIEhpcyBjb21tZW50cyBzdWdnZXN0IHRoZXkgd2VyZSBzaGlwcGVkIHdpdGggdGhlIHN5c3RlbS4KKyMKKworIyAoYWx0b3MyOiBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworIwk6YzA9XkFgXHI6YzE9XkFhXHI6YzI9XkFiXHI6YzM9XkFjXHI6XAorIwk6YzQ9XkFkXHI6YzU9XkFlXHI6YzY9XkFmXHI6Yzc9XkFnXHI6XAorIwk6Yzg9XkFoXHI6Yzk9XkFpXHI6Y0E9XkFqXHI6Y0I9XkFrXHI6XAorIwk6Y0M9XkFsXHI6Y0Q9XkFtXHI6Y0U9XkFuXHI6Y0Y9XkFvXHI6CisjCTpYVT1eQXFccjpYRD1eQXJccjpYUj1eQXNccjpYTD1eQXRccjpcCisjCTpZVT1eQVFccjpZRD1eQVJccjpZUj1eQVNccjpZTD1eQVRccjpcCisjCTpITD1eQVBccjpTUD1cRVtpOlwKKyMJOklTPVxFW0A6REU9XEVbUDpJTD1cRVtMOk5TPVxFW1M6UFM9XEVbVDpcCisjCTpMTz1cRVswcTpMQz1cRVs1cTpMTD1cRVs2cTpcCisjIENvbXBhcmlzb24gd2l0aCB0aGUgayogY2FwYWJpbGl0aWVzIG1ha2VzIGl0IG9idmlvdXMgdGhhdCB0aGUgYyogdGhpbmdzIGFyZQorIyBzaGlmdCBrZXlzLiAgSSBoYXZlIHJlbmFtZWQgdGhlbSB0byBrZXlzIDMyIGFuZCB1cCBhY2NvcmRpbmdseS4gIEFsc28sCisjIDpzcjogd2FzIGdpdmVuIGFzIGEgYm9vbGVhbi0tIGVzcikKK2FsdG9zMnxhbHQyfGFsdG9zLTJ8YWx0b3MgSUksCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMwLAorCWNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbMUIsIGN1ZjE9XEVbMUMsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFWzFBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGljaDE9XEVbQCwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBrREw9XkFtXHIsCisJa0VPTD1eQW5cciwga2JzPV5ILCBrY2J0PV5BS1xyLCBrY2xyPV5BTFxyLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPV5BTVxyLCBrZWw9XkFOXHIsCisJa2YwPV5BSVxyLCBrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjMyPV5BYFxyLAorCWtmMzM9XkFhXHIsIGtmMzQ9XkFiXHIsIGtmMzU9XkFjXHIsIGtmMzY9XkFkXHIsIGtmMzc9XkFlXHIsCisJa2YzOD1eQWZcciwga2YzOT1eQWdcciwga2Y0PV5BQ1xyLCBrZjQwPV5BaFxyLCBrZjQxPV5BaVxyLAorCWtmNDI9XkFqXHIsIGtmNDM9XkFrXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPVxFW2YsIGtpbDE9XkFKXHIsIGtpbmQ9XkFPXHIsCisJbmVsPV5NXkosIHJtYW09XEVbPzdsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLAorCXNtYW09XEVbPzdoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyAoYWx0b3MzOiBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworIwk6YzA9XkFgXHI6YzE9XkFhXHI6YzI9XkFiXHI6YzM9XkFjXHI6XAorIwk6YzQ9XkFkXHI6YzU9XkFlXHI6YzY9XkFmXHI6Yzc9XkFnXHI6XAorIwk6Yzg9XkFoXHI6Yzk9XkFpXHI6Y0E9XkFqXHI6Y0I9XkFrXHI6XAorIwk6Y0M9XkFsXHI6Y0Q9XkFtXHI6Y0U9XkFuXHI6Y0Y9XkFvXHI6CisjCTpYVT1eQXFccjpYRD1eQXJccjpYUj1eQXNccjpYTD1eQXRccjpcCisjCTpITD1eQVBccjpTUD1cRVtpOlwKKyMJOklTPVxFW0A6REU9XEVbUDpJTD1cRVtMOk5TPVxFW1M6UFM9XEVbVDpcCithbHRvczN8YWx0b3M1fGFsdDN8YWx0NXxhbHRvcy0zfGFsdG9zLTV8YWx0b3MgSUlJIG9yIFYsCisJYmxpbms9XEVbNXAsIHJpPVxFTSwgc2dyMD1cRVtwLCB1c2U9YWx0b3MyLAorYWx0b3M0fGFsdDR8YWx0b3MtNHxhbHRvcyBJViwKKwl1c2U9d3k1MCwKKyMgKGFsdG9zNzogaGFkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXM6CisjCTpHRyMwOkdJPVxFSDg6R0Y9XEVINzpcCisjCTpjMD1eQWBccjpjMT1eQWFccjpjMj1eQWJccjpjMz1eQWNccjpcCisjCTpjND1eQWRccjpjNT1eQWVccjpjNj1eQWZccjpjNz1eQWdccjpcCisjCTpjOD1eQWhccjpjOT1eQWlccjpjQT1eQWpccjpjQj1eQWtccjpcCisjCTpjQz1eQWxccjpjRD1eQW1ccjpjRT1eQW5ccjpjRj1eQW9ccjoKKyMgQ29tcGFyaXNvbiB3aXRoIHRoZSBrKiBjYXBhYmlsaXRpZXMgbWFrZXMgaXQgb2J2aW91cyB0aGF0IHRoZSBjKiB0aGluZ3MgYXJlCisjIHNoaWZ0IGtleXMuICBJIGhhdmUgcmVuYW1lZCB0aGVtIHRvIGtleXMgMzIgYW5kIHVwIGFjY29yZGluZ2x5LiAgSSBoYXZlCisjIGFsc28gbWFkZSB0aGlzIGVudHJ5IHJlbGF0aXZlIHRvIGFkbTEyIGluIG9yZGVyIHRvIGdpdmUgaXQgYW4gPHNncj4uIFRoZQorIyA8aW52aXM+IGltcG9ydGVkIGJ5IHVzZT1hZG0rc2dyIG1heSB3b3JrLCBsZXQgbWUga25vdy4gLS0gZXNyKQorYWx0b3M3fGFsdDd8YWx0b3MgVklJLAorCWFtLCBtaXIsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCWFjc2M9ajVrM2wybTFuOHFcOnQ0dTl2PXcweDYsIGJsaW5rPVxFRzIsIGJvbGQ9XEVHdCwKKwljbGVhcj1cRSteXiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGltPVxFR3AsIGRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULCBob21lPV5eLCBodD1eSSwgaWwxPVxFRSwKKwlpbmQ9XkosIGludmlzPVxFRzEsCisJaXMyPVxFYFw6XEVlKFxFT1xFZTZcRWM0MVxFfjRcRWMyMVxFdVxFfjIsIGtETD1eQW1cciwKKwlrRU9MPV5BblxyLCBrYnM9XkgsIGtjYnQ9XkFLXHIsIGtjbHI9XkFMXHIsIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPV5BTVxyLCBrZWw9XkFOXHIsCisJa2YwPV5BSVxyLCBrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjMyPV5BYFxyLAorCWtmMzM9XkFhXHIsIGtmMzQ9XkFiXHIsIGtmMzU9XkFjXHIsIGtmMzY9XkFkXHIsIGtmMzc9XkFlXHIsCisJa2YzOD1eQWZcciwga2YzOT1eQWdcciwga2Y0PV5BQ1xyLCBrZjQwPV5BaFxyLCBrZjQxPV5BaVxyLAorCWtmNDI9XkFqXHIsIGtmNDM9XkFrXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBraWwxPV5BSlxyLCBraW5kPV5BT1xyLAorCWtucD1cRUssIGtwcD1cRUosIG1jND1cRUosIG1jNT1cRWQjLCBuZWw9Xk1eSiwgcmk9XEVqLAorCXJtaXI9XEVyLCBzbWlyPVxFcSwgdXNlPWFkbStzZ3IsCithbHRvczdwY3xhbHQ3cGN8YWx0b3MgUEMgVklJLAorCWtlbmQ9XEVULCB1c2U9YWx0b3M3LAorCisjIyMjIEhld2xldHQtUGFja2FyZCAoaHApCisjCisjCUhld2xldHQtUGFja2FyZAorIwk4MDAwIEZvb3RoaWxscyBCbHZkCisjCVJvc2V2aWxsZSwgQ0EgOTU3NDcKKyMJVm94OiAxLSg5MTYpLTc4NS00MzYzCShUZWNobmljYWwgcmVzcG9uc2UgbGluZSBmb3IgVkRUcykKKyMJICAgICAxLSg4MDApLTYzMy0zNjAwCShHZW5lcmFsIGN1c3RvbWVyIHN1cHBvcnQpCisjCisjCisjIEFzIG9mIE1hcmNoIDE5OTgsIEhQIG5vIGxvbmdlciBoYXMgYW55IHRlcm1pbmFscyBpbiBwcm9kdWN0aW9uLgorIyBUaGUgNzAwIHNlcmllcyAoMjIsIDMyLCA0MSwgNDQsIDkyLCA5NCwgOTYsIDk4KSBpcyBzdGlsbCBiZWluZworIyBzdXBwb3J0ZWQgKHRoZXkgc3RpbGwgaGF2ZSBwYXJ0cykuIFNvIGFyZSB0aGUgMjM5MmEgYW5kIDIzOTRhLgorIyBTZWUgdGhlIFdPUktTVEFUSU9OIENPTlNPTEVTIHNlY3Rpb24gZm9yIHRoZSA3MDBzLgorIworCisjIEdlbmVyaWMgSFAgdGVybWluYWwgLSB0aGlzIHNob3VsZCAoaG9wZWZ1bGx5KSB3b3JrIG9uIGFueSBIUCB0ZXJtaW5hbC4KK2hwZ2VuZXJpY3xocHxoZXdsZXR0LXBhY2thcmQgZ2VuZXJpYyB0ZXJtaW5hbCwKKwlPVGJzLCBPVHB0LCBhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbG0jMCwgdnQjNiwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRSZhJXAyJWRjJXAxJWRZJDw2PiwgY3V1MT1cRUEsIGRjaDE9XEVQLCBkbDE9XEVNLAorCWVkPVxFSiwgZWw9XEVLLCBocGE9XEUmYSVwMSVkQywgaHQ9XkksIGh0cz1cRTEsIGlsMT1cRUwsCisJaW5kPV5KLCBrYnM9XkgsIGtjYnQ9XEVpLCBybWlyPVxFUiwgcm1zbz1cRSZkQCwgcm11bD1cRSZkQCwKKwlzZ3IwPVxFJmRALCBzbWlyPVxFUSwgc21zbz1cRSZkSiwgc211bD1cRSZkRCwgdGJjPVxFMywKKwl2cGE9XEUmYSVwMSVkWSwKKworaHAxMTB8aGV3bGV0dC1wYWNrYXJkIG1vZGVsIDExMCBwb3J0YWJsZSwKKwlsaW5lcyMxNiwgdXNlPWhwZ2VuZXJpYywKKworaHArcGZrK2NyfGhwIGZ1bmN0aW9uIGtleXMgd2l0aCBDUiwKKwlrZjE9XEVwXHIsIGtmMj1cRXFcciwga2YzPVxFclxyLCBrZjQ9XEVzXHIsIGtmNT1cRXRcciwKKwlrZjY9XEV1XHIsIGtmNz1cRXZcciwga2Y4PVxFd1xyLAorCitocCtwZmstY3J8aHAgZnVuY3Rpb24ga2V5cyB3L28gQ1IsCisJa2YxPVxFcCwga2YyPVxFcSwga2YzPVxFciwga2Y0PVxFcywga2Y1PVxFdCwga2Y2PVxFdSwga2Y3PVxFdiwKKwlrZjg9XEV3LAorCisjIFRoZSBocDI2MjFzIHVzZSB0aGUgc2FtZSBrZXlzIGZvciB0aGUgYXJyb3dzIGFuZCBmdW5jdGlvbiBrZXlzLAorIyBidXQgbm90IHNlcGFyYXRlIGVzY2FwZSBzZXF1ZW5jZXMuIFRoZXNlIGRlZmluaXRpb25zIGFsbG93IHRoZQorIyB1c2VyIHRvIHVzZSB0aG9zZSBrZXlzIGFzIGFycm93IGtleXMgcmF0aGVyIHRoYW4gYXMgZnVuY3Rpb24KKyMga2V5cy4KK2hwK3BmaythcnJvd3N8aHAgYWx0ZXJuYXRlIGFycm93IGRlZmluaXRpb25zLAorCWtjdWIxPVxFdVxyLCBrY3VkMT1cRXdcciwga2N1ZjE9XEV2XHIsIGtjdXUxPVxFdFxyLCBrZjFALAorCWtmMkAsIGtmM0AsIGtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIGtob21lPVxFcFxyLCBraW5kPVxFclxyLAorCWtsbD1cRXFcciwga3JpPVxFc1xyLAorCitocCthcnJvd3N8aHAgYXJyb3cgZGVmaW5pdGlvbnMsCisJa2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBraG9tZT1cRWgsCisJa2luZD1cRVMsIGtsbD1cRUYsIGtyaT1cRVQsCisKKyMgR2VuZXJpYyBzdHVmZiBmcm9tIHRoZSBIUCAyNjJ4IHNlcmllcworIworaHAyNjJ4fEhQIDI2MnggdGVybWluYWxzLAorCXhocCwKKwlibGluaz1cRSZkQSwgZGNoMT1cRVAkPDI+LCBlZD1cRUosIGh0PVwwMTEkPDI+LCBpbmQ9XEVTLAorCWludmlzPVxFJmRTLCBpcD0kPDI+LCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2RjaDE9XEVQLCBrZGwxPVxFTSwga2VkPVxFSiwga2VsPVxFSywga2hvbWU9XEVoLAorCWtpY2gxPVxFUSwga2lsMT1cRUwsIGtpbmQ9XEVTLCBrbnA9XEVVLCBrcHA9XEVWLCBrcmk9XEVULAorCWtybWlyPVxFUiwgcmV2PVxFJmRCLCBybWt4PVxFJnMwQSwgcm1zbz1cRSZkQCwgcm11bD1cRSZkQCwKKwlzZ3I9XEUmZCV7NjR9JT8lcDEldCV7NjZ9JXwlOyU/JXAyJXQlezY4fSV8JTslPyVwMyV0JXs2Nn0lfCU7JT8lcDQldCV7NjV9JXwlOyVjLAorCXNncjA9XEUmZEAsIHNta3g9XEUmczFBLCBzbXNvPVxFJmRCLCBzbXVsPVxFJmRELAorCisjIE5vdGU6IG5vIDxob21lPiBvbiBIUHMgc2luY2UgdGhhdCBob21lcyB0byB0b3Agb2YgbWVtb3J5LCBub3Qgc2NyZWVuLgorIyBEdWUgdG8gc2V2ZXJlIDI2MjEgYnJhaW5kYW1hZ2UsIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlIGFycm93IGtleXMgdG8KKyMgdHJhbnNtaXQgYW55dGhpbmcgYXQgYWxsIGlzIHRvIHR1cm4gb24gdGhlIGZ1bmN0aW9uIGtleSBsYWJlbHMKKyMgd2l0aCA8c21reD4sIGFuZCBldmVuIHRoZW4gdGhlIHVzZXIgaGFzIHRvIGhvbGQgZG93biBzaGlmdCEKKyMgVGhlIGRlZmF1bHQgMjYyMSB0dXJucyBvZmYgdGhlIGxhYmVscyBleGNlcHQgd2hlbiBpdCBoYXMgdG8gdG8KKyMgZW5hYmxlIHRoZSBmdW5jdGlvbiBrZXlzLiBJZiB5b3VyIGluc3RhbGxhdGlvbiBwcmVmZXJzIGxhYmVscworIyBvbiBhbGwgdGhlIHRpbWUsIG9yIG9mZiBhbGwgdGhlIHRpbWUgKGF0IHRoZSAiZXhwZW5zZSIgb2YgdGhlCisjIGZ1bmN0aW9uIGtleXMpLCB1c2UgMjYyMS1ubCBvciAyNjIxLXdsLgorIworIyBOb3RlOiB0aGVyZSBhcmUgbmV3ZXIgUk9NcyBmb3IgMjYyMSdzIHRoYXQgYWxsb3cgeW91IHRvIHNldAorIyBzdHJhcCBBIHNvIHRoZSByZWd1bGFyIGFycm93IGtleXMgeG1pdCBcRUEsIGV0YywgYXMgd2l0aCB0aGUKKyMgMjY0NS4gSG93ZXZlciwgZXZlbiB3aXRoIHRoaXMgc3RyYXAgc2V0LCB0aGUgdGVybWluYWwgc3RvcHMKKyMgeG1pdHRpbmcgaWYgeW91IHJlc2V0IGl0LCB1bnRpbCB5b3UgdW5zZXQgYW5kIHJlc2V0IHRoZSBzdHJhcCEKKyMgU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHNldC91bnNldCB0aGUgc3RyYXAgd2l0aCBhbiBlc2NhcGUKKyMgc2VxdWVuY2UsIHdlIGRvbid0IHVzZSBpdCBpbiB0aGUgZGVmYXVsdC4KKyMgSWYgeW91IGxpa2UsIHlvdSBjYW4gdXNlIDI2MjEtYmEgKGJyYWluLWRhbWFnZWQgYXJyb3cga2V5cykuCitocDI2MjEtYmF8MjYyMSB3L25ldyByb20gYW5kIHN0cmFwIEEgc2V0LAorCXJta3hALCBzbWt4QCwgdXNlPWhwK2Fycm93cywgdXNlPWhwMjYyMSwKKworIyBocDI2MjEgd2l0aCBmdW5jdGlvbiBsYWJlbHMuIE1vc3Qgb2YgdGhlIHRpbWUgdGhleSBhcmUgb2ZmLAorIyBidXQgaW5zaWRlIHZpLCB0aGUgZnVuY3Rpb24ga2V5IGxhYmVscyBhcHBlYXIuIFlvdSBoYXZlIHRvCisjIGhvbGQgZG93biBzaGlmdCB0byBnZXQgdGhlbSB0byB4bWl0LgoraHAyNjIxfGhwMjYyMWF8aHAyNjIxQXwyNjIxfDI2MjFhfDI2MjFBfGhwMjYyMS13bHwyNjIxLXdsfGhwIDI2MjEgdy9sYWJlbHMsCisJaXMyPVxFJmpBXHIsIHJta3g9XEUmakEsIHVzZT1ocDI2MjEtZmwsCitocDI2MjEtZmx8aHAgMjYyMSwKKwl4aHBALCB4b24sCisJcGIjMTkyMDAsCisJY2J0PVxFaSwgY3VwPVxFJmElcDIlZGMlcDElZFksIGRjaDE9XEVQJDwyPiwgaHQ9XDAxMSQ8Mj4sCisJaXA9JDwyPiwgaXMyPVxFJmpAXHIsIHJta3g9XEUmakAsIHJtc289XEUmZEAsIHJtdWw9XEUmZEAsCisJc2dyMD1cRSZkQCwgc21reD1cRSZqQiwgc21zbz1cRSZkRCwgc211bD1cRSZkRCwKKwl1c2U9aHArcGZrK2NyLCB1c2U9aHBnZW5lcmljLAorCisjIFRvIHVzZSBocDI2MjFwIHByaW50ZXIsIHNldGVudiBURVJNPTI2MjFwLCBQUklOVEVSPTI2MTJwCitocDI2MjFwfGhwIDI2MjEgd2l0aCBwcmludGVyLAorCW1jND1cRSZwMTNDLCBtYzU9XEUmcDExQywgdXNlPWhwMjYyMSwKKworaHAyNjIxcC1hfGhwMjYyMXAgd2l0aCBmbiBhcyBhcnJvd3MsCisJdXNlPWhwK3BmaythcnJvd3MsIHVzZT1ocDI2MjFwLAorCisjIGhwMjYyMSB3aXRoIGs0NSBrZXlib2FyZAoraHAyNjIxLWs0NXxocDI2MjFrNDV8azQ1fGhwIDI2MjEgd2l0aCA0NSBrZXlib2FyZCwKKwlrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlraG9tZT1cRWgsIHJta3g9XEUmczBBLCBzbWt4PVxFJnMxQSwgdXNlPWhwMjYyMSwKKworIyAyNjIxIHVzaW5nIGFsbCA0OCBsaW5lcyBvZiBtZW1vcnksIG9ubHkgMjQgdmlzaWJsZSBhdCBhbnkgdGltZS4KK2hwMjYyMS00OHw0OCBsaW5lIDI2MjEsCisJbGluZXMjNDgsCisJY3VwPVxFJmElcDIlZGMlcDElZFIsIGhvbWU9XEVILCB2cGE9XEUmYSVwMSVkUiwKKwl1c2U9aHAyNjIxLAorCisjIDI2MjEgd2l0aCBubyBsYWJlbHMgZXZlci4gQWxzbyBwcmV2ZW50cyB2aSBkZWxheXMgb24gZXNjYXBlLgoraHAyNjIxLW5sfGhwIDI2MjEgd2l0aCBubyBsYWJlbHMsCisJa2N1YjFALCBrY3VkMUAsIGtjdWYxQCwga2N1dTFALCBraG9tZUAsIHJta3hALCBzbWt4QCwKKwl1c2U9aHAyNjIxLWZsLAorCisjIE5lZWRlZCBmb3IgVUNCIEFSUEFWQVggY29uc29sZSwgc2luY2UgbHNpLTExIGV4cGFuZHMgdGFicworIyAod3JvbmcpLgorIworaHAyNjIxLW50fGhwIDI2MjEgdy9ubyB0YWJzLAorCWh0QCwgdXNlPWhwMjYyMSwKKworIyBIcCAyNjI0IEIgd2l0aCA0IG9yIDEwIHBhZ2VzIG9mIG1lbW9yeS4KKyMKKyMgU29tZSBhc3N1bXB0aW9ucyBhcmUgbWFkZSB3aXRoIHRoaXMgZW50cnkuIFRoZXNlIHNldHRpbmdzIGFyZQorIyBOT1Qgc2V0IHVwIGJ5IHRoZSBpbml0aWFsaXphdGlvbiBzdHJpbmdzLgorIworIyBQb3J0IENvbmZpZ3VyYXRpb24KKyMgCVJlY3ZQYWNlPVhvbi9Yb2ZmCisjIAlYbWl0UGFjZT1Yb24vWG9mZgorIyAJU3RyaXBOdWxEZWw9WWVzCisjCisjIFRlcm1pbmFsIENvbmZpZ3VyYXRpb24KKyMgCUluaEhuZFNoaz1ZZXMKKyMgCUluaERDMj1ZZXMKKyMgCVhtaXRGbmN0bihBKT1ObworIyAJSW5oRW9sV3JwPU5vCisjCisjIE5vdGU6IHRoZSAyNjI0IERPRVMgaGF2ZSBhIHRydWUgPGhvbWU+LCBiZWxpZXZlIGl0IG9yIG5vdCEKKyMKKyMgVGhlIDI2MjQgaGFzIGFuICJlcnJvciBsaW5lIiB0byB3aGljaCBtZXNzYWdlcyBjYW4gYmUgc2VudC4KKyMgVGhpcyBpcyBDTE9TRSB0byB3aGF0IGlzIGV4cGVjdGVkIGZvciBhICJzdGF0dXMgbGluZSIuIEhvd2V2ZXIsCisjIGFmdGVyIGEgbWVzc2FnZSBpcyBzZW50IHRvIHRoZSAiZXJyb3IgbGluZSIsIHRoZSBuZXh0IGNhcnJpYWdlCisjIHJldHVybiBpcyBFQVRFTiBhbmQgdGhlICJlcnJvciBsaW5lIiBpcyB0dXJuZWQgYmFjayBvZmYgYWdhaW4hCisjIFNvIEkgZ3Vlc3Mgd2UgY2FuJ3QgZGVmaW5lIDxocz4sIDxlc2xvaz4sIDx3c2w+LCA8ZHNsPiwgPGZzbD4sIDx0c2w+LgorIworIyBUaGlzIGVudHJ5IHN1cHBvcnRzIGVtYWNzIChhbmQgYW55IG90aGVyIHByb2dyYW0gdGhhdCB1c2VzIHJhdworIyBtb2RlKSBhdCA0ODAwIGJhdWQgYW5kIGxlc3MuIEkgY291bGRuJ3QgZ2V0IHRoZSBwYWRkaW5nIHJpZ2h0CisjIGZvciA5NjAwLgorIworIyAoaHAyNjI0OiByZXBsYWNlZCBOVUwgc2VxdWVuY2VzIGluIGZsYXNoIHdpdGggbWFuZGF0b3J5IHBhdXNlcyAtLSBlc3IpCitocDI2MjR8aHAyNjI0YXxocDI2MjRifGhwMjYyNGItNHB8SGV3bGV0dCBQYWNrYXJkIDI2MjQgQiwKKwlkYSwgZGIsCisJbG0jOTYsCisJZmxhc2g9XEUmdzEzRiQ8NjYvPlxFJncxMkYkPDY2Lz5cRSZ3MTNGJDw2Ni8+XEUmdzEyRiwKKwl1c2U9aHArbGFiZWxzLCB1c2U9c2NyaHAsCisKKyMgVGhpcyBocDI2MjYgZW50cnkgZG9lcyBub3QgdXNlIGFueSBvZiB0aGUgZmFuY3kgd2luZG93aW5nIHN0dWZmCisjIG9mIHRoZSAyNjI2LgorIworIyBJbmRlZWQsIHRlcm1pbmZvIGRvZXMgbm90IHlldCBoYW5kbGUgc3VjaCBzdHVmZi4gU2luY2UgY2hhbmdpbmcKKyMgYW55IHdpbmRvdyBjbGVhcnMgbWVtb3J5LCBpdCBpcyBwcm9iYWJseSBub3QgcG9zc2libGUgdG8gdXNlCisjIHRoaXMgZm9yIHNjcmVlbiBvcHQuCisjCisjIGVkIGlzIGluY3JlZGlibHkgc2xvdyBtb3N0IG9mIHRoZSB0aW1lIC0gSSBhbSBndWVzc2luZyBhdCB0aGUKKyMgZXhhY3QgcGFkZGluZy4gU2luY2UgdGhlIHRlcm1pbmFsIHVzZXMgeG9mZi94b24gdGhpcyBpcyBpbnRlbmRlZAorIyBvbmx5IGZvciBjb3N0IGNvbXB1dGF0aW9uLCBzbyB0aGF0IHRoZSB0ZXJtaW5hbCB3aWxsIHByZWZlciBlbAorIyBvciBldmVuIGRsMSB3aGljaCBpcyBwcm9iYWJseSBmYXN0ZXIhCisjCisjIFxFRFxFSlxFQyBoYWNrIGZvciBlZCBmcm9tIEVkIEJyYWRmb3JkIC0gYXBwYXJlbnRseSBlZCBpcyBvbmx5CisjIGV4dHJhIHNsb3cgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUgd2luZG93LgorIworIyBUaGUgcGFkZGluZyBwcm9iYWJseSBzaG91bGQgYmUgY2hhbmdlZC4KKyMKK2hwMjYyNnxocDI2MjZhfGhwMjYyNnB8aHAgMjYyNiwKKwlkYSwgZGIsCisJbG0jMCwgcGIjMTkyMDAsCisJZWQ9XEVEXEVKJDw1MDA+XEVDLCBpbmRuPVxFJnIlcDElZEQsIGlwPSQ8ND4sCisJaXMyPVxFJmpAXHIsIHJpbj1cRSZyJXAxJWRVLCB1c2U9aHArcGZrK2NyLAorCXVzZT1ocCtsYWJlbHMsIHVzZT1zY3JocCwKKworIyBUaGlzIGVudHJ5IGlzIGZvciBzeXNsaW5lLiBJdCBhbGxvY2F0ZXMgYSAyMyBsaW5lIHdpbmRvdyB3aXRoCisjIGEgMTE1IGxpbmUgd29ya3NwYWNlIGZvciByZWd1bGFyIHVzZSwgYW5kIGEgMSBsaW5lIHdpbmRvdyBmb3IKKyMgdGhlIHN0YXR1cyBsaW5lLgorIworIyBUaGlzIGFzc3VtZXMgcG9ydCAyIGlzIGJlaW5nIHVzZWQuCisjIFR1cm4gb2ZmIGhvcml6b250YWwgbGluZSwgQ3JlYXRlIHdzICMxIHdpdGggMTE1IGxpbmVzLAorIyBDcmVhdGUgd3MgIzIgd2l0aCAxIGxpbmUsIENyZWF0ZSB3aW5kb3cgIzEgbGluZXMgMS0yMywKKyMgQ3JlYXRlIHdpbmRvdyAjMiBsaW5lcyAyNC0yNCwgQXR0YWNoIGN1cnNvciB0byB3b3Jrc3BhY2UgIzEuCisjIE5vdGUgdGhhdCB0aGlzIGNsZWFycyB0aGUgdGFicyBzbyBpdCBtdXN0IGJlIGRvbmUgYnkgdHNldCBiZWZvcmUKKyMgaXQgc2V0cyB0aGUgdGFicy4KKyMKK2hwMjYyNi1zfGhwIDI2MjYgdXNpbmcgb25seSAyMyBsaW5lcywKKwllc2xvaywgaHMsCisJbGluZXMjMjMsCisJZnNsPVxFJmRAXEUmdzdmMnAxSVxFJnc0ZjFJLAorCWlzMT1cRSZxM3QwezBIIFxFJncwZjExNW4xSSBcRSZ3MGYxbjJJIFxFJncyZjFpMGQwdTIybDBTIFxFJncyZjJpMGQyM3UyM2wwUyBcRSZ3N2YycDFJIFxyLAorCXRzbD1cRSZ3N2YycDJJXEUmdzRmMklcclxFS1xFJmElcDElZEMsIHVzZT1ocDI2MjYsCisjIEZvcmNlIHRlcm1pbmFsIGJhY2sgdG8gMjQgbGluZXMgYWZ0ZXIgYmVpbmcgMjMuCitocDI2MjYtbnN8aHAgMjYyNiB1c2luZyBhbGwgMjQgbGluZXMsCisJaXMxPVxFJnEzdDB7MEggXEUmdzBmMTE4bjFJIFxFJncwZjFuMkkgXEUmdzJmMWkwZDB1MjNsMFMgXEUmdzNmMkkgXEUmdzdmMnAxSSBcciwKKwl1c2U9aHAyNjI2LAorIyBWYXJpb3VzIGVudHJpZXMgdXNlZnVsIGZvciBzbWFsbCB3aW5kb3dzIG9uIDI2MjYuCitocDI2MjYtMTJ8aGV3bGV0dC1wYWNrYXJkIDI2MjYgMTIgbGluZXMsCisJbGluZXMjMTIsIHVzZT1ocDI2MjYsCitocDI2MjYtMTJ4NDB8aGV3bGV0dC1wYWNrYXJkIDI2MjYgMTIgbGluZXMgNDAgY29sdW1ucywKKwljb2xzIzQwLCBsaW5lcyMxMiwgdXNlPWhwMjYyNiwKK2hwMjYyNi14NDB8aGV3bGV0dC1wYWNrYXJkIDI2MjYgNDAgY29sdW1ucywKKwljb2xzIzQwLCB1c2U9aHAyNjI2LAoraHAyNjI2LTEyLXN8aGV3bGV0dC1wYWNrYXJkIDI2MjYgMTEgbGluZXMgcGx1cyBzdGF0dXMsCisJbGluZXMjMTEsIHVzZT1ocDI2MjYtcywKKworIworIyBocDI2MjcgY29sb3IgdHViZXMgZnJvbSBVbml2ZXJzaXR5IG9mIFdpc2NvbnNpbgorIworaHAyNjI3YS1yZXZ8aHAgMjYyNyB3aXRoIHJldmVyc2UgdmlkZW8gY29sb3JzLAorCWNyPV5NLCBjdWQxPV5KLCBodD1eSSwgaW5kPV5KLAorCWlzMj1cRSZ2MG0xYTBiMGMxeDF5MXoxaTBhMGIxYzF4MXkxejBpMFNcRSZqQFxyXEUzXHIsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCBybXVsPVxFJnYwU1xFJmRALAorCXNtdWw9XEUmZERcRSZ2MVMsIHVzZT1ocDI2MjEtbmwsCitocDI2MjdhfGhwIDI2MjcgY29sb3IgdGVybWluYWwgd2l0aCBubyBsYWJlbHMsCisJY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosCisJaXMyPVxFJnYwbTFhMWIwYzFpMGExYjFjMmkxYTBiMGMwaTBTXEUmakBcclxFM1xyLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwgcm1zbz1cRSZ2MFMsCisJcm11bD1cRSZ2MFNcRSZkQCwgc21zbz1cRSZ2MlMsIHNtdWw9XEUmZERcRSZ2MVMsCisJdXNlPWhwMjYyMS1ubCwKK2hwMjYyN2N8aHAgMjYyNyBjb2xvciAoY3lhbikgdGVybWluYWwgd2l0aCBubyBsYWJlbHMsCisJY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosCisJaXMyPVxFJnYwbTFhMGIwYzJpMWExYjBjMWkwYTFiMWMwaTBTXEUmakBcclxFM1xyLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwgdXNlPWhwMjYyN2EsCisKKyMgaHAyNjQwYSBkb2Vzbid0IGhhdmUgdGhlIFkgY3Vyc29yIGFkZHJlc3NpbmcgZmVhdHVyZSwgYW5kIEMgaXMKKyMgbWVtb3J5IHJlbGF0aXZlIGluc3RlYWQgb2Ygc2NyZWVuIHJlbGF0aXZlLCBhcyB3ZSBuZWVkLgorIworaHAyNjQwYXxocCAyNjQwYSwKKwljdXBALCBybWt4QCwgc21reEAsIHVzZT1ocDI2NDUsCisKK2hwMjY0MGJ8aHAyNjQ0YXxocCAyNjR4IHNlcmllcywKKwlybWt4QCwgc21reEAsIHVzZT1ocDI2NDUsCisKKyMgKGhwMjY0MWE6IHJlbW92ZWQgdW5rbm93biA6Z3U6IC0tIGVzcikKK2hwMjY0MWF8aHAyNjQ1YXxocDI2NDdhfEhQIDI2ND9BIHNlcmllcyBCUkwgZW50cnksCisJYW0sIGRhLCBkYiwgbWlyLCB4aHAsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEUmYSVwMiUyZGMlcDElMmRZLCBjdXUxPVxFQSwgZGNoMT1cRVAsIGRsMT1cRU0sCisJZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJTJkQywgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkLCBpbDE9XEVMLCBpbmQ9XkosCisJaXMyPVxFRSQ8NTAwLz4sIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwKKwlybWlyPVxFUiwgcm1zbz1cRSZkQCwgc21pcj1cRVEsIHNtc289XEUmZEIsCisJdnBhPVxFJmElcDElMmRZLAorCisjIFRoaXMgdGVybWluYWwgc2hvdWxkIGJlIHVzZWQgYXQgNDgwMCBiYXVkIG9yIGxlc3MuIEl0IG5lZWRzIHBhZGRpbmcgZm9yCisjIHBsYWluIGNoYXJhY3RlcnMgYXQgOTYwMCwgSSBndWVzc2VkIGF0IGFuIGFwcHJvcHJpYXRlIGNyIGRlbGF5LiAgSXQgcmVhbGx5CisjIHdhbnRzIF5FL15GIGhhbmRzaGFraW5nLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgd2VsbCBldmVuIGlmIHlvdSB3cml0ZQorIyBzb2Z0d2FyZSB0byBzdXBwb3J0IGl0LgoraHAyNjQ1fGhwNDV8SFAgMjY0NSBzZXJpZXMsCisJcGIjOTYwMCwKKwlibGluaz1cRSZkQSwgY3I9XHIkPDIwPiwgZGltPVxFJmRILCBrY3RhYj1cRTIsIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLAorCWtlZD1cRUosIGtlbD1cRUssIGtob21lPVxFaCwga2h0cz1cRTEsIGtpY2gxPVxFUSwga2lsMT1cRUwsCisJa2luZD1cRVMsIGtucD1cRVUsIGtwcD1cRVYsIGtyaT1cRVQsIGtybWlyPVxFUiwgcmV2PVxFJmRCLAorCXJta3g9XEUmczBBLAorCXNncj1cRSZkJXs2NH0lPyVwMSV0JXs2Nn0lfCU7JT8lcDIldCV7Njh9JXwlOyU/JXAzJXQlezY2fSV8JTslPyVwNCV0JXs2NX0lfCU7JT8lcDUldCV7NzJ9JXwlOyU/JXA2JXQlezY2fSV8JTslYywKKwlzZ3IwPVxFJmRALCBzbWt4PVxFJnMxQSwgc211bD1cRSZkRCwgdXNlPWhwZ2VuZXJpYywKKyMgWW91IHNob3VsZCB1c2UgdGhpcyB0ZXJtaW5hbCBhdCA0ODAwIGJhdWQgb3IgbGVzcy4KK2hwMjY0OHxocDI2NDhhfEhQIDI2NDhhIGdyYXBoaWNzIHRlcm1pbmFsLAorCWNsZWFyPVxFSFxFSiQ8NTA+LCBjdXA9XEUmYSVwMiVkYyVwMSVkWSQ8MjA+LAorCWRjaDE9XEVQJDw3PiwgaXA9JDw1PiwgdXNlPWhwMjY0NSwKKworIyBUaGUgSFAgMTUwIHRlcm1pbmFsIGlzIGEgZmFpcmx5IHZhbmlsbGEgSFAgdGVybWluYWwsIHdpdGggdGhlCisjIGNscmVvbCBzdGFuZG91dCBwcm9ibGVtLiBJdCBhbHNvIGhhcyBncmFwaGljcyBjYXBhYmlsaXRpZXMgYW5kCisjIGEgdG91Y2ggc2NyZWVuLCB3aGljaCB3ZSBkb24ndCBkZXNjcmliZSBoZXJlLgoraHAxNTB8aGV3bGV0dCBwYWNrYXJkIE1vZGVsIDE1MCwKKwlPVGJzLCB1c2U9aHAyNjIyLAorCisjIEhQIDIzODJhIHRlcm1pbmFscywgInRoZSBsaXR0bGUgb25lcy4iIFRoZXkgZG9uJ3QgaGF2ZSBhbnkKKyMgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgc3VwcG9ydCBhbmQgc2VuZGluZyBvdXQgXk4vXk8gd2lsbAorIyBsZWF2ZSB0aGUgc2NyZWVuIGJsYW5rLgoraHAyMzgyYXxocDIzODJ8aGV3bGV0dCBwYWNrYXJkIDIzODJhLAorCWRhLCBkYiwKKwlsaCMxLCBsbSM0OCwKKwlhY3NjQCwKKwlwbG49XEUmZjBhJXAxJWRrJXAyJWwlUGElPyVnYSV0JWdhJWQlZTElO2QwTCU/JWdhJSEldCAlOyVwMiVzLAorCXJtYWNzQCwKKwlzZ3I9XEUmZCV7MH0lUGElPyVwNCV0JXsxfSVnYSUrJVBhJTslPyVwMSVwMyV8JXA2JXwldCV7Mn0lZ2ElKyVQYSU7JT8lcDIlcDYlfCV0JXs0fSVnYSUrJVBhJTslPyVwMSVwNSV8JXQlezh9JWdhJSslUGElOyU/JXA3JXQlPyVnYSV0cyVnYSV7NjR9JSslZSV7ODN9JTslZSU/JWdhJXQlZ2ElezY0fSUrJWUlezY0fSU7JTslYywKKwlzZ3IwPVxFJmRALCBzbWFjc0AsIHVzZT1ocCtsYWJlbHMsIHVzZT1zY3JocCwKKworaHAyNjIxLWF8aHAyNjIxYS1hfGhwMjYyMSB3aXRoIGZuIGFzIGFycm93cywKKwl1c2U9aHArcGZrK2Fycm93cywgdXNlPWhwMjYyMS1mbCwKKworIyBuZXdlciBoZXdsZXR0IHBhY2thcmQgdGVybWluYWxzCisKK25ld2hwa2V5Ym9hcmR8Z2VuZXJpYyBlbnRyeSBmb3IgSFAgZXh0ZW5kZWQga2V5Ym9hcmQsCisJa2JzPV5ILCBrY2J0PVxFaSwga2Nscj1cRUosIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLCBrZWQ9XEVKLCBrZWw9XEVLLCBraG9tZT1cRWgsCisJa2ljaDE9XEVRLCBraWwxPVxFTCwga2luZD1cRVQsIGtsbD1cRUYsIGtucD1cRVUsIGtwcD1cRVYsCisJa3JpPVxFUywga3JtaXI9XEVSLCBybWt4PVxFJnMwQSwgc21reD1cRSZzMUEsCisJdXNlPWhwK3Bmay1jciwKKworbmV3aHB8Z2VuZXJpYyBlbnRyeSBmb3IgbmV3IGhld2xldHQgcGFja2FyZCB0ZXJtaW5hbHMsCisJYW0sIGJ3LCBtaXIsIHhocCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBwYiM0ODAwLAorCWFjc2M9MlszQDQ+NUk5KFw6J0pTS1dMUU1BTyNQJFE7UiFTIlQxVTJWNFczWFw6WStaKmRIakdrVGxSbUZuL3FcLHQ1dTZ2OHc3eC4sCisJYmVsPV5HLCBibGluaz1cRSZkQSwgYm9sZD1cRSZkRiwgY2J0PVxFaSwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1cRUMsIGN1dTE9XEVBLCBkY2gxPVxFUCQ8Mj4sIGRpbT1cRSZkSCwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaHQ9XDAxMSQ8Mj4sIGh0cz1cRTEsIGlsMT1cRUwsIGluZD1eSiwKKwlpbnZpcz1cRSZkUywgaXA9JDwyPiwgaXMxPVxFJmpCJDw4PiwgbmVsPV5NXkosCisJcGZrZXk9XEUmZjBhJXAxJWRrMGQlcDIlbCVkTCVwMiVzLAorCXBmbG9jPVxFJmYxYSVwMSVkazBkJXAyJWwlZEwlcDIlcywKKwlwZng9XEUmZjJhJXAxJWRrMGQlcDIlbCVkTCVwMiVzLCByZXY9XEUmZEIsIHJpPVxFVCwKKwlybWFjcz1eTywgcm1pcj1cRVIsIHJtc289XEUmZEAsIHJtdWw9XEUmZEAsIHJzMT1cRWcsCisJc2dyPVxFJmQlezB9JVBhJT8lcDQldCV7MX0lZ2ElKyVQYSU7JT8lcDElcDMlfCVwNiV8JXQlezJ9JWdhJSslUGElOyU/JXAyJXA2JXwldCV7NH0lZ2ElKyVQYSU7JT8lcDElcDUlfCV0JXs4fSVnYSUrJVBhJTslPyVwNyV0JT8lZ2EldHMlZ2ElezY0fSUrJWUlezgzfSU7JWUlPyVnYSV0JWdhJXs2NH0lKyVlJXs2NH0lOyU7JWMlPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEUmZEBcMDE3LCBzbWFjcz1eTiwgc21pcj1cRVEsIHNtc289XEUmZEosIHNtdWw9XEUmZEQsCisJdGJjPVxFMywgdXNlPW5ld2hwa2V5Ym9hcmQsCisKK21lbWhwfG1lbW9yeSByZWxhdGl2ZSBhZGRyZXNzaW5nIGZvciBuZXcgSFAgdHR5cywKKwl2dCM2LAorCWNsZWFyPVxFSFxFSiQ8NDA+LCBjdWI9XEUmYS0lcDElZEMsIGN1ZD1cRSZhKyVwMSVkUiwKKwljdWY9XEUmYSslcDElZEMsIGN1cD1cRSZhJXAxJWRyJXAyJWRDLCBjdXU9XEUmYS0lcDElZFIsCisJaG9tZT1cRUgsIGhwYT1cRSZhJXAxJWRDLCBsbD1cRSZhMjNSXHIsCisJbXJjdXA9XEUmYSVwMSVkciVwMiVkQywgdnBhPVxFJmElcDElZFIsIHVzZT1uZXdocCwKKworc2NyaHB8c2NyZWVuIHJlbGF0aXZlIGFkZHJlc3NpbmcgZm9yIG5ldyBIUCB0dHlzLAorCWNsZWFyPVxFJmEwYzBZXEVKJDw0MD4sIGN1Yj1cRSZhLSVwMSVkQywKKwljdWQ9XEUmYSslcDElZFIsIGN1Zj1cRSZhKyVwMSVkQywKKwljdXA9XEUmYSVwMSVkeSVwMiVkQyQ8MTA+LCBjdXU9XEUmYS0lcDElZFIsCisJaG9tZT1cRSZhMHkwQywgaHBhPVxFJmElcDElZEMsIGxsPVxFJmEweTBDXEVBLAorCW1yY3VwPVxFJmElcDElZHIlcDIlZEMsIHZwYT1cRSZhJXAxJWRZLCB1c2U9bmV3aHAsCisKKyMgKGhwK2xhYmVsczogYWRkZWQgbGFiZWwgdmFsdWVzIGZyb20gYSBCUkwgdGVybWNhcCAtLSBlc3IpCitocCtsYWJlbHN8InN0YW5kYXJkIiBsYWJlbCBpbmZvIGZvciBuZXcgSFAgdHR5cywKKwlsaCMyLCBsdyM4LCBubGFiIzgsCisJbGYwPWYxLCBsZjE9ZjIsIGxmMj1mMywgbGYzPWY0LCBsZjQ9ZjUsIGxmNT1mNiwgbGY2PWY3LCBsZjc9ZjgsCisJcGxuPVxFJmYyYSVwMSVkayVwMiVsJVBhJT8lZ2EldCVnYSVkJWUxJTtkMEwlPyVnYSUhJXQgJTslcDIlcywKKwlybWxuPVxFJmpALCBzbWxuPVxFJmpCLAorCitocCtwcmludGVyfCJzdGFuZGFyZCIgcHJpbnRlciBpbmZvIGZvciBIUCB0dHlzLAorCWZmPVxFJnA0dTBDLCBtYzA9XEVIXEUmcDRkRiwgbWM0PVxFJnAxM0MsIG1jNT1cRSZwMTFDLAorCisKKyMgVGhlIG5ldyBocDI2MjFiIGlzIGtpbmQgb2YgYSBjcm9zcyBiZXR3ZWVuIHRoZSBvbGQgMjYyMSBhbmQgdGhlCisjIG5ldyAyNjJ4IHNlcmllcyBvZiBtYWNoaW5lcy4gSXQgaGFzIGRpcC1zd2l0Y2hlZCBvcHRpb25zLgorIyBUaGUgZmlybXdhcmUgaGFzIGEgYnVnIGluIGl0IHN1Y2ggdGhhdCBpZiB5b3UgZ2l2ZSBpdCBhIG51bGwKKyMgbGVuZ3RoIGxhYmVsLCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBlYXRlbiEKK2hwMjYyMWJ8aHAgMjYyMWIgd2l0aCBvbGQgc3R5bGUga2V5Ym9hcmQsCisJbGgjMSwgbG0jNDgsIGx3IzgsIG5sYWIjOCwKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFaCwKKwlraW5kPVxFVCwga2xsPVxFRiwga3JpPVxFUywKKwlwbG49XEUmZjBhJXAxJWRrJXAyJWwlUGElPyVnYSV0JWdhJWQlZTElO2QzTCU/JWdhJSEldCV7MzJ9JWMlOyVwMiVzXEUlezExMX0lcDElKyVjXHIsCisJc21sbj1cRSZqQiwgdXNlPWhwMjYyMSwKKworaHAyNjIxYi1wfGhwIDI2MjFiIHdpdGggcHJpbnRlciwKKwl1c2U9aHArcHJpbnRlciwgdXNlPWhwMjYyMWIsCisKKyMgaHAyNjIxYiAtIG5ldyAyNjIxYiB3aXRoIG5ldyBleHRlbmRlZCBrZXlib2FyZAorIyB0aGVzZSBhcmUgY2xvc2VyIHRvIHRoZSBuZXcgMjZ4eCBzZXJpZXMgdGhhbiB0aGUgb3RoZXIgMjYyMWIKK2hwMjYyMWIta3h8aHAgMjYyMWIgd2l0aCBleHRlbmRlZCBrZXlib2FyZCwKKwl1c2U9bmV3aHBrZXlib2FyZCwgdXNlPWhwMjYyMWIsCisKK2hwMjYyMWIta3gtcHxocCAyNjIxYiB3aXRoIG5ldyBrZXlib2FyZCAmIHByaW50ZXIsCisJdXNlPWhwK3ByaW50ZXIsIHVzZT1ocDI2MjFiLWt4LAorCisjIFNvbWUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgaW4gdGhlIGZvbGxvd2luZyBlbnRyaWVzLgorIyBUaGVzZSBzZXR0aW5ncyBhcmUgTk9UIHNldCB1cCBieSB0aGUgaW5pdGlhbGl6YXRpb24gc3RyaW5ncy4KKyMKKyMgICAgUG9ydCBDb25maWd1cmF0aW9uCisjIFJlY3ZQYWNlPVhvbi9Yb2ZmCVhtaXRQYWNlPVhvbi9Yb2ZmCVN0cmlwTnVsRGVsPVllcworIworIyAgICBUZXJtaW5hbCBDb25maWd1cmF0aW9uCisjIEluaEhuZFNoayhHKT1ZZXMJSW5oREMyKEgpPVllcworIyBYbWl0Rm5jdG4oQSk9Tm8JCUluaEVvbFdycD1ObworIworIworIyBIcCAyNjIyYSAmIGhwMjYyM2EgZGlzcGxheSBhbmQgZ3JhcGhpY3MgdGVybWluYWxzCisjCitocDI2MjJ8aHAyNjIyYXxocCAyNjIyLAorCWRhLCBkYiwKKwlsbSMwLCBwYiMxOTIwMCwKKwlpczI9XEUmZGpAXHIsIHVzZT1ocCtwZmsrY3IsIHVzZT1ocCtsYWJlbHMsIHVzZT1zY3JocCwKKworIyBUaGUgMjYyMyBpcyBhIDI2MjIgd2l0aCBleHRyYSBncmFwaGljcyBoYXJkd2FyZS4KK2hwMjYyM3xocDI2MjNhfGhwIDI2MjMsCisJdXNlPWhwMjYyMiwKKworaHAyNjI0Yi1wfGhwMjYyNGItNHAtcHxoZXdsZXR0IHBhY2thcmQgMjYyNCBCIHdpdGggcHJpbnRlciwKKwl1c2U9aHArcHJpbnRlciwgdXNlPWhwMjYyNCwKKworIyBUaGUgaGV3bGV0dCBwYWNrYXJkIEIgY2FuIGhhdmUgYW4gb3B0aW9uYWwgZXh0cmEgNiBwYWdlcyBvZiBtZW1vcnkuCitocDI2MjQtMTBwfGhwMjYyNGEtMTBwfGhwMjYyNGItMTBwfGhld2xldHQgcGFja2FyZCAyNjI0IEIgdy8gMTAgcGFnZXMgb2YgbWVtb3J5LAorCWxtIzI0MCwgdXNlPWhwMjYyNCwKKworaHAyNjI0Yi0xMHAtcHxoZXdsZXR0IHBhY2thcmQgMjYyNCBCIHcvIGV4dHJhIG1lbW9yeSAmIHByaW50ZXIsCisJbG0jMjQwLCB1c2U9aHAyNjI0Yi1wLAorCisjIENvbG9yIG1hbmlwdWxhdGlvbnMgZm9yIEhQIHRlcm1pbmFscworaHArY29sb3J8aHAgd2l0aCBjb2xvcnMsCisJY2NjLAorCWNvbG9ycyMxNiwgbmN2IzE3LCBwYWlycyM3LAorCWluaXRwPVxFJnYlPyVwMiV7MTAwMH0lPSV0MSVlLiVwMiVkJTthJT8lcDMlezEwMDB9JT0ldDElZS4lcDMlZCU7YiU/JXA0JXsxMDAwfSU9JXQxJWUuJXA0JWQlO2MlPyVwNSV7MTAwMH0lPSV0MSVlLiVwNSVkJTt4JT8lcDYlezEwMDB9JT0ldDElZS4lcDYlZCU7eSU/JXA3JXsxMDAwfSU9JXQxJWUuJXA3JWQlO3olcDElZEksCisJb2M9XEUmdjBtMWExYjFjMElcRSZ2MWExSVxFJnYxYjJJXEUmdjFhMWIzSVxFJnYxYzRJXEUmdjFhMWM1SVxFJnYxYjFjNklcRSZ2MXgxeTdJLAorCW9wPVxFJnYwUywgc2NwPVxFJnYlcDElZFMsCisKKyMgPGlzMj4gc2V0cyB0aGUgc2NyZWVuIHRvIGJlIDgwIGNvbHVtbnMgd2lkZQoraHAyMzk3YXxocDIzOTd8aGV3bGV0dCBwYWNrYXJkIDIzOTdBIGNvbG9yIHRlcm1pbmFsLAorCWlzMj1cRSZ3NmY4MFgsIHVzZT1tZW1ocCwgdXNlPWhwK2xhYmVscywgdXNlPWhwK2NvbG9yLAorCisjICBIUCA3MDAvNDQgU2V0dXAgcGFyYW1ldGVyczoKKyMgVGVybWluYWwgTW9kZQkJSFAtUEN0ZXJtCisjIEluaGliaXQgQXV0byBXcmFwCU5PCisjIFN0YXR1cyBMaW5lCQlIb3N0IFdyaXRhYmxlCisjIFBDIENoYXJhY3RlciBTZXQJWUVTCisjIFR3ZW50eS1GaXZlIExpbmUgTW9kZQlZRVMKKyMgWE9OL1hPRkYJCUAxMjggb3IgNjQgKHNjKQorIyBLZXljb2RlIE1vZGUgCQlOTyAgIG9yIFlFUyAoc2MpCisjIEJhY2tzcGFjZSBLZXkJCUJTIG9yIEJTL0RFTAorIworIyA8aXMyPiAJc2V0cyBwY3Rlcm07IGF1dG93cmFwOyAyNSBsaW5lczsgcGMgY2hhciBzZXQ7IHByb2cgREVMIGtleTsKKyMgXEVcXD8gZG9lcyBub3QgdHVybiBvZmYga2V5Y29kZSBtb2RlCisjIDxzbXNjPglzZXRzIGFsdGVybmF0ZSBzdGFydC9zdG9wOyBrZXljb2RlIG9uCitocGFuc2l8aHA3MDB8aGV3bGV0dCBwYWNrYXJkIDcwMC80NCBpbiBIUC1QQ3Rlcm0gbW9kZSwKKwlhbSwgZW8sIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwlhY3NjPWpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVxXDMwNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjMsCisJYmVsPV5HLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwgY2xlYXI9XEVbMkpcRVtILAorCWNub3JtPVxFWz8yNWgsIGNyPV5NLCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGljaDE9XEVbQCwgaWwxPVxFW0wsCisJaW5kPV5KLAorCWlzMj1cRVs0NCJwXEVbPzdoXEVbPjEwaFxFWz4xMmhcRVAxOzF8My83RlxFXFwsCisJa2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2VuZD1cRVs0fiwga2YxPVxFWzE3fiwga2YxMD1cRVsyOH4sCisJa2YyPVxFWzE4fiwga2YzPVxFWzE5fiwga2Y0PVxFWzIwfiwga2Y1PVxFWzIxfiwga2Y2PVxFWzIzfiwKKwlrZjc9XEVbMjR+LCBrZjg9XEVbMjV+LCBrZjk9XEVbMjZ+LCBraG9tZT1cRVsxfiwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwgcm1hbT1cRVs/N2wsCisJcm1zYz1cRVs+MTFsXEVQMSoqeDAvMTE7MS8xM1xFW21cRVxcLCBybXNvPVxFW20sCisJcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtYW09XEVbPzdoLAorCXNtc2M9XEVbPjExaFxFUE8qKngwLzY1OzEvNjdcRVxcJDwyNTA+LCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHhvZmZjPWcsIHhvbmM9ZSwKKyMKKyMgKGhwMjM5MjogY29waWVkIDxybWlyPiBoZXJlIGZyb20gaHBleCAtLSBlc3IpCitocDIzOTJ8MjM5eCBzZXJpZXMsCisJY29scyM4MCwKKwljYnQ9XEVpLCBjdXA9XEUmYSVwMSVkeSVwMiVkQywga2YxPVxFcFxyLCBrZjI9XEVxXHIsCisJa2YzPVxFclxyLCBrZjQ9XEVzXHIsIGtmNT1cRXRcciwga2Y2PVxFdVxyLCBrZjc9XEV2XHIsCisJa2Y4PVxFd1xyLCBraG9tZT1cRWgsIGtpbmQ9XEVVLCBrbnA9XEV1LCBrcHA9XEV2LCBrcmk9XEVWLAorCXJtaXI9XEVSLCBybXVsPVxFJmRALCBzbWlyPVxFUSwgc211bD1cRSZkRCwgdnBhPVxFJmElcDElZFksCisJdXNlPWhwc3ViLAorCitocHN1YnxocCB0ZXJtaW5hbHMgLS0gY2FwYWJpbGl0eSBzdWJzZXQsCisJYW0sIGRhLCBkYiwgbWlyLCB4aHAsIHhvbiwKKwlsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXUxPVxFQSwgZGNoMT1cRVAsIGRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBocGE9XEUmYSVwMSVkQywKKwlodD1eSSwgaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LCBpbDE9XEVMLCBpbmQ9XkosCisJaXMyPVxFJnMxQVxFPFxFJmswXFwsIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFaCwgcm1reD1cRSZzMEEsIHJtc289XEUmZEAsCisJc2dyMD1cRSZkQCwgc21reD1cRSZzMUEsIHNtc289XEUmZEIsCisKKyMgaHBleDoKKyMJTWF5IGJlIHVzZWQgZm9yIG1vc3QgMjQgeCA4MCBocCB0ZXJtaW5hbHMsCisjIGJ1dCBoYXMgbm8gcGFkZGluZyBhZGRlZCwgc28gbWF5IGFsbG93IHJ1bm92ZXIgaW4gc29tZSB0ZXJtaW5hbHMgYXQgaGlnaAorIyBiYXVkIHJhdGVzLiAgV2lsbCBub3Qgd29yayBmb3IgaHAyNjQwYSBvciBocDI2NDBiIHRlcm1pbmFscywgaHA5OHg2IGFuZAorIyBocDk4eDUgdGVybWluYWwgZW11bGF0b3JzIG9yIGhwOTh4NiBjb25zb2xlcy4KKyMgCUFkZHMgeHktY3Vyc29yIGFkZHJlc3NpbmcsIHZlcnRpY2FsIGN1cnNvciBhZGRyZXNzaW5nLCBob21lLAorIyBsYXN0IGxpbmUsIGFuZCB1bmRlcmxpbmUgY2FwYWJpbGl0aWVzLgorIworIyAoaHBleDogcmVtb3ZlZCBtZW1vcnktbG9jayBjYXBhYmlsaXRpZXMgIjptbD1cRWw6bXU9XEVtOiIsCisjIG1vdmVkIDxybWlyPiBoZXJlIGZyb20gaHBzdWIgLS0gZXNyKQoraHBleHxocCBleHRlbmRlZCBjYXBhYmlsaXRlcywKKwljcj1eTSwgY3VkMT1eSiwgY3VwPVxFJmElcDElZHklcDIlZEMsIGh0PV5JLCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCBybWlyPVxFUiwgcm11bD1cRSZkQCwgc21pcj1cRVEsCisJc211bD1cRSZkRCwgdnBhPVxFJmElcDElZFksIHVzZT1ocHN1YiwKKworIyBGcm9tOiBWaWxsZSBTdWxrbyA8VmlsbGUuU3Vsa29AYmlwLmF0ay50cG8uZmk+LCAwNSBBdWcgMTk5NgoraHAyfGhwZXgyfGhld2xldHQtcGFja2FyZCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgbmV3ZXIgdmVyc2lvbiwKKwlhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzgwLCBsaCMyLCBsaW5lcyMyNCwgbG0jMCwgbHcjOCwgbmxhYiM4LCB4bWMjMCwKKwliZWw9XkcsIGNsZWFyPVxFJmEweTBDXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRUIsCisJY3VmMT1cRUMsIGN1cD1cRSZhJXAxJWR5JXAyJWRDLCBjdXUxPVxFQSwgZGNoMT1cRVAsCisJZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLCBodD1eSSwgaHRzPVxFMSwKKwlpbDE9XEVMLCBpbmQ9XkosIGticz1eSCwga2Nscj1cRUosIGtjdGFiPVxFMiwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtkY2gxPVxFUCwga2RsMT1cRU0sCisJa2VkPVxFSiwga2VsPVxFSywga2YxPVxFcCwga2YyPVxFcSwga2YzPVxFciwga2Y0PVxFcywga2Y1PVxFdCwKKwlrZjY9XEV1LCBrZjc9XEV2LCBrZjg9XEV3LCBraG9tZT1cRWgsIGtodHM9XEUxLCBraWNoMT1cRVEsCisJa2lsMT1cRUwsIGtpbmQ9XEVTLCBrbGw9XEVGLCBrbnA9XEVVLCBrcHA9XEVWLCBrcmk9XEVULAorCWtybWlyPVxFUiwga3RiYz1cRTMsIG1lbWw9XEVsLCBtZW11PVxFbSwKKwlwZmtleT1cRSZmJXAxJWRrJXAyJWwlZEwlcDIlcywKKwlwZmxvYz1cRSZmMWElcDElZGslcDIlbCVkTCVwMiVzLAorCXBmeD1cRSZmMmElcDElZGslcDIlbCVkTCVwMiVzLAorCXBsbj1cRSZmJXAxJWRrJXAyJWwlZGQwTCVwMiVzLCBybWlyPVxFUiwgcm1reD1cRSZzMEEsCisJcm1sbj1cRSZqQCwgcm1zbz1cRSZkQCwgcm11bD1cRSZkQCwKKwlzZ3I9XEUmZCU/JXA3JXQlezExNX0lYyU7JXAxJXAzJXwlcDYlfCV7Mn0lKiVwMiV7NH0lKiUrJXA0JSslcDUlezh9JSolKyV7NjR9JSslYyU/JXA5JXQlJ1wwMTYnJWMlZSUnXDAxNyclYyU7LAorCXNncjA9XEUmZEAsIHNtaXI9XEVRLCBzbWt4PVxFJnMxQSwgc21sbj1cRSZqQiwgc21zbz1cRSZkQiwKKwlzbXVsPVxFJmRELCB0YmM9XEUzLCB2cGE9XEUmYSVwMSVkWSwKKworIyBIUCAyMzYgY29uc29sZQorIyBGcm9tOiA8ZGRhdmlzQGljLmJlcmtlbGV5LmVkdT4KK2hwMjM2fGhwMjM2IGludGVybmFsIHRlcm1pbmFsIGVtdWxhdG9yLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFRiwgY25vcm09XEVERSwgY3ViMT1eSCwKKwljdXA9XEVFJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBjdnZpcz1cRURCLAorCWRjaDE9XEVKLCBkbDE9XEVILCBlbD1cRUssIGljaDE9XEVJLCBpbDE9XEVHLCBybXNvPVxFQ0ksCisJc2dyMD1cRUNJLCBzbXNvPVxFQkksCisKKyMgVGhpcyB3b3JrcyBvbiBhIGhwMzAwIGNvbnNvbGUgcnVubmluZyBVdGFoIDQuMyBCU0QKKyMgRnJvbTogQ3JhaWcgTGVyZXMgPGxlcmVzQG9rZWVmZmUuYmVya2VsZXkuZWR1PgoraHAzMDBofEhQIENhdHNleWUgY29uc29sZSwKKwlPVGJzLCBhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzEyOCwgbGluZXMjNTEsIGxtIzAsIHhtYyMwLAorCWJlbD1eRywgY2J0PVxFaSwgY2xlYXI9XEUmYTB5MENcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFQiwKKwljdWYxPVxFQywgY3VwPVxFJmElcDElZHklcDIlZEMsIGN1dTE9XEVBLCBkY2gxPVxFUCwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaHBhPVxFJmElcDElZEMsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaWwxPVxFTCwgaW5kPV5KLCBrYnM9XkgsCisJa2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBraG9tZT1cRWgsCisJcm1pcj1cRVIsIHJta3g9XEUmczBBLCBybXNvPVxFJmRALCBybXVsPVxFJmRALCBzZ3IwPVxFJmRALAorCXNtaXI9XEVRLCBzbWt4PVxFJnMxQSwgc21zbz1cRSZkQiwgc211bD1cRSZkRCwgdGJjPVxFMywKKwl2cGE9XEUmYSVwMSVkWSwKKyMgRnJvbTogR3JlZyBDb3VjaCA8Z3JlZ2NAZXJuaWUuYmVya2VsZXkuZWR1PgoraHA5ODM3fGhwOTg3MjB8aHA5ODcyMXxIUCA5MDAwLzMwMCB3b3Jrc3RhdGlvbnMsCisJT1RicywgYW0sIGRhLCBkYiwgbWlyLCB4aHAsCisJY29scyMxMjgsIGl0IzgsIGxpbmVzIzQ2LCBsbSMwLAorCWJlbD1eRywgY2J0PVxFaSwgY2xlYXI9XEUmYTB5MENcRUosIGN1YjE9XkgsIGN1ZDE9XEVCLAorCWN1ZjE9XEVDLCBjdXA9XEUmYSVwMSVkeSVwMiVkQywgY3V1MT1cRUEsIGRjaDE9XEVQLAorCWRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBocGE9XEUmYSVwMSVkQywgaHQ9XkksIGh0cz1cRTEsCisJaWwxPVxFTCwgaW5kPV5KLCBpczI9XEUmdjBtMWIwaSZqQCwga2JzPV5ILCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2RjaDE9XEVQLCBrZGwxPVxFTSwKKwlrZWQ9XEVKLCBrZWw9XEVLLCBraG9tZT1cRWgsIGtpY2gxPVxFUSwga2lsMT1cRUwsIGtucD1cRVUsCisJa3BwPVxFViwgcm1pcj1cRVIsIHJta3g9XEUmczBBLCBybXNvPVxFJnYwUywgcm11bD1cRSZkQCwKKwlzZ3IwPVxFJmRALCBzbWlyPVxFUSwgc21reD1cRSZzMUEsIHNtc289XEUmdjVTLCBzbXVsPVxFJmRELAorCXRiYz1cRTMsIHZwYT1cRSZhJXAxJWRZLAorIyBIUCA5ODQ1IGRlc2t0b3AgY29tcHV0ZXIgZnJvbSBCUkwKKyMgKGhwOTg0NTogcmVtb3ZlZCB1bmtub3duIGNhcGFiaWxpdHkgOmd1OiAtLSBlc3IpCitocDk4NDV8SFAgOTg0NSwKKwlPVGJzLCBhbSwgZGEsIGRiLCBlbywgbWlyLCB4aHAsCisJY29scyM4MCwgbGluZXMjMjEsCisJT1RiYz1cRUQsIGNsZWFyPVxFSFxFSiwgY3VmMT1cRUMsIGN1cD1cRSZhJXAyJTJkYyVwMSUyZFksCisJY3V1MT1cRUEsIGRjaDE9XEVQLCBkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGQsIGlsMT1cRUwsIHJtaXI9XEVSLCBybXNvPVxFJmRALAorCXNtaXI9XEVRLCBzbXNvPVxFJmRCLAorIyBGcm9tOiBDaGFybGVzIEEuIEZpbm5lbGwgb2YgTUlUUkUgPGZpbm5lbGxAbWl0cmUub3JnPiwgZGV2ZWxvcGVkIDA3U0VQOTAKKyMgKGhwOTg1NTA6IHJlcGxhY2VkIC91c3Ivc2hhcmUvdGFic2V0Lzk4Mzcgd2l0aCBzdGQgYmVjYXVzZSA8aXQjOD4sPGh0cz1cRTE+OworIyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gYXZvaWQgd2FybmluZ3MgcmUgPHNtYWNzPi88cm1hY3M+IC0tZXNyKQoraHA5ODU1MHxocDk4NTUwYXxIUCA5MDAwIFNlcmllcyAzMDAgY29sb3IgY29uc29sZSwKKwlPVGJzLCBhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzEyOCwgaXQjOCwgbGluZXMjNDksIGxtIzAsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEUmZEEsIGJvbGQ9XEUmZEosIGNidD1cRWksIGNpdmlzPVxFKmRSLAorCWNsZWFyPVxFSFxFSiwgY25vcm09XEUqZFEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEUmYSVwMSVkeSVwMiVkQywgY3V1MT1cRUEsIGRjaDE9XEVQLCBkaW09XEUmZEgsCisJZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLCBodD1eSSwgaHRzPVxFMSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGQsIGlsMT1cRUwsIGluZD1eSiwgaW52aXM9XEUmZHMsCisJa2JzPV5ILCBrY2xyPVxFSiwga2N0YWI9XEUyLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2RjaDE9XEVQLCBrZGwxPVxFTSwga2VkPVxFSiwga2VsPVxFSywga2YxPVxFcCwKKwlrZjI9XEVxLCBrZjM9XEVyLCBrZjQ9XEVzLCBrZjU9XEV0LCBrZjY9XEV1LCBrZjc9XEV2LCBrZjg9XEV3LAorCWtob21lPVxFaCwga2h0cz1cRTEsIGtpY2gxPVxFUSwga2lsMT1cRUwsIGtpbmQ9XEVTLCBrbGw9XEVGLAorCWtucD1cRVUsIGtwcD1cRVYsIGtyaT1cRVQsIGtybWlyPVxFUiwga3RiYz1cRTMsIHJldj1cRSZkSiwKKwlybWFjcz1eTywgcm1pcj1cRVIsIHJta3g9XEUmczBBLCBybXNvPVxFJmRALCBybXVsPVxFJmRALAorCXNncjA9XEUmZEAsIHNtYWNzPV5OLCBzbWlyPVxFUSwgc21reD1cRSZzMUEsIHNtc289XEUmZEosCisJc211bD1cRSZkRCwgdGJjPVxFMywgdnBhPVxFJmElcDElZFksCisjIEZyb206IFZpY3RvciBEdWNob3ZuaSA8dmljQGZpbmUucHJpbmNldG9uLmVkdT4KKyMgKGhwNzAwLXd5OiByZW1vdmVkIG9ic29sZXRlICI6bmw9Xko6IjsKKyMgcmVwbGFjZWQgL3Vzci9zaGFyZS90YWJzZXQvaHA3MDAtd3kgd2l0aCBzdGQgYmVjYXVzZSA8aXQjOD4sPGh0cz1cRTE+IC0tIGVzcikKK2hwNzAwLXd5fEhQNzAwLzQxIGVtdWxhdGluZyB3eXNlMzAsCisJT1RicywgYW0sIGJ3LCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMxLAorCWNidD1cRUksIGNsZWFyPV5aLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eViwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCQ8MTAvPiwgaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LCBpbDE9XEVFJDwwLjcqLz4sCisJaXMxPVxFfiJcRUNcRXJcRShcRUcwXDAwM1xFYDlcRWAxLCBrYnM9XDE3Nywga2NidD1cRUksCisJa2Nscj1eWiwga2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwga2N1dTE9XkssIGtlZD1cRVksCisJa2VsPVxFVCwga2hvbWU9Xl4sIGtodHM9XEVJLCBraWNoMT1cRXEsIGtybWlyPVxFciwgbGw9Xl5eSywKKwlyaT1cRWosIHJtaXI9XEVyLCBybXNvPVxFRzAkPDEwLz4sIHJtdWw9XEVHMCQ8MTAvPiwKKwlzZ3IwPVxFRzAkPDEwLz4sIHNtaXI9XEVxLCBzbXNvPVxFRzQkPDEwLz4sCisJc211bD1cRUc4JDwxMC8+LCB0YmM9XEUwLCB2cGE9XEVbJXAxJXszMn0lKyVjLAoraHA3MDA5MnxocDcwMDkyYXxocDcwMDkyQXxIUCA3MDAvOTIsCisJYW0sIGRhLCBkYiwgeGhwLAorCWNvbHMjODAsIGxoIzIsIGxpbmVzIzI0LCBsbSMwLCBsdyM4LCBubGFiIzgsCisJYWNzYz0wY2pna3Rscm1mbi9xXCx0NXU2djh3N3guLCBiZWw9XkcsIGJsaW5rPVxFJmRBLAorCWJvbGQ9XEUmZEIsIGNidD1cRWksIGNsZWFyPVxFJmEweTBDXEVKLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPVxFQiwgY3VmMT1cRUMsIGN1cD1cRSZhJXAxJWR5JXAyJWRDLCBjdXUxPVxFQSwKKwlkY2gxPVxFUCwgZGltPVxFJmRILCBkbDE9XEVNLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLCBodD1eSSwKKwlodHM9XEUxLCBpbDE9XEVMLCBrYnM9XkgsIGtjbHI9XEVKLCBrY3RhYj1cRTIsIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLAorCWtlZD1cRUosIGtlbD1cRUssIGtmMT1cRXAsIGtmMj1cRXEsIGtmMz1cRXIsIGtmND1cRXMsIGtmNT1cRXQsCisJa2Y2PVxFdSwga2Y3PVxFdiwga2Y4PVxFdywga2hvbWU9XEVoLCBraHRzPVxFMSwga2ljaDE9XEVRLAorCWtpbDE9XEVMLCBraW5kPVxFUywga2xsPVxFRiwga25wPVxFVSwga3BwPVxFViwga3JpPVxFVCwKKwlrcm1pcj1cRVIsIGt0YmM9XEUzLCByZXY9XEUmZEIsIHJpPVxFVCwgcm1hY3M9Xk8sIHJtaXI9XEVSLAorCXJta3g9XEUmczBBLCBybWxuPVxFJmpALCBybXNvPVxFJmRALCBybXVsPVxFJmRALAorCXNncjA9XEUmZEAsIHNtYWNzPV5OLCBzbWlyPVxFUSwgc21reD1cRSZzMUEsIHNtbG49XEUmakIsCisJc21zbz1cRSZkSiwgc211bD1cRSZkRCwgdGJjPVxFMywgdnBhPVxFJmElcDElZFksCisKK2JvYmNhdHxzYm9iY2F0fEhQIDkwMDAgbW9kZWwgMzAwIGNvbnNvbGUsCisJYW0sIGRhLCBkYiwgbWlyLCB4aHAsCisJY29scyMxMjgsIGl0IzgsIGxpbmVzIzQ3LCB4bWMjMCwKKwljYnQ9XEVpLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFJmElcDElZHklcDIlZEMkPDYvPiwgY3V1MT1cRUEsIGRjaDE9XEVQLAorCWRsMT1cRU0kPDEwKi8+LCBlZD1cRUosIGVsPVxFSywgaHBhPVxFJmElcDElZEMkPDYvPiwgaHQ9XkksCisJaWwxPVxFTCQ8MTAqLz4sIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2hvbWU9XEVoLCBuZWw9Xk1eSiwgcm1pcj1cRVIsCisJcm1reD1cRSZzMEEsIHJtc289XEUmZEAsIHJtdWw9XEUmZEAsIHNncjA9XEUmZEAsIHNtaXI9XEVRLAorCXNta3g9XEUmczFBLCBzbXNvPVxFJmRCLCBzbXVsPVxFJmRELCB2cGE9XEUmYSVwMSVkWSQ8Ni8+LAorZ2F0b3ItdHxIUCA5MDAwIG1vZGVsIDIzNyBlbXVsYXRpbmcgZXh0cmEtdGFsbCBBQUEsCisJbGluZXMjOTQsIHVzZT1nYXRvciwKK2dhdG9yfEhQIDkwMDAgbW9kZWwgMjM3IGVtdWxhdGluZyBBQUEsCisJYncsIGttLCBtaXIsIHVsLAorCWNvbHMjMTI4LCBpdCM4LCBsaW5lcyM0NywKKwliZWw9XkcsIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVNLAorCWRjaD1cRVslcDElZFAkPDQvPiwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0kPDEqLz4sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRgLAorCWh0PV5JLCBpY2g9XEVbJXAxJWRAJDw0Lz4sIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMJDwxKi8+LAorCWlsMT1cRVtMLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosCisJcmVwPSVwMSVjXEVbJXAyJWRiJDwxKi8+LCByZXY9XEVbN20sIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHNncjA9XEVbbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK2dhdG9yLTUyfEhQIDkwMDAgbW9kZWwgMjM3IGVtdWxhdGluZyBWVDUyLAorCWNvbHMjMTI4LCBsaW5lcyM0NywgdXNlPXZ0NTIsCitnYXRvci01MnR8SFAgOTAwMCBtb2RlbCAyMzcgZW11bGF0aW5nIGV4dHJhLXRhbGwgVlQ1MiwKKwlsaW5lcyM5NCwgdXNlPWdhdG9yLTUyLAorCisjIyMjIEhvbmV5d2VsbC1CdWxsCisjCisjIEZyb206IE1pY2hhZWwgSGFhcmR0IDxtaWNoYWVsQGdhbmRhbGYubW9yaWE+IDExIEphbiA5MworIworCisjIEhvbmV5d2VsbCBCdWxsIHRlcm1pbmFsLiAgSXRzIGN1cnNvciBhbmQgZnVuY3Rpb24ga2V5cyBzZW5kIHNpbmdsZQorIyBjb250cm9sIGNoYXJhY3RlcnMgYW5kIGl0IGhhcyBzdGFuZG91dC91bmRlcmxpbmUgZ2xpdGNoLiAgTW9zdCBwcm9ncmFtcworIyBkbyBub3QgbGlrZSB0aGVzZSBmZWF0dXJlcy9idWdzLiAgVmlzdWFsIGJlbGwgaXMgcmVhbGl6ZWQgYnkgZmxhc2hpbmcgdGhlCisjICJrZXlib2FyZCBsb2NrZWQiIExFRC4KK2RrdTcwMDMtZHVtYnxIb25leXdlbGwgQnVsbCBES1UgNzAwMyBkdW1iIG1vZGUsCisJY29scyM4MCwgbGluZXMjMjUsCisJY2xlYXI9Xl1eXywgY3I9Xk0sIGN1YjE9XlksIGN1ZDE9XkssIGN1ZjE9XlgsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPV5aLCBlZD1eXywgZWw9XEVbSywKKwlmbGFzaD1cRVsyaFxFWzJsLCBob21lPV5dLCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5ZLAorCWtjdWQxPV5LLCBrY3VmMT1eWCwga2N1dTE9XlosIGtob21lPV5dLCBuZWw9Xk1eSiwKK2RrdTcwMDN8SG9uZXl3ZWxsIEJ1bGwgREtVIDcwMDMgYWxsIGZlYXR1cmVzIGRlc2NyaWJlZCwKKwltc2dyLAorCXhtYyMxLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzdtLCBkaW09XEVbMm0sIHJldj1cRVs3bSwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXVzZT1ka3U3MDAzLWR1bWIsCisKKyMjIyMgTGVhci1TaWVnbGVyIChhZG0pCisjCisjIFRoZXNlIGd1eXMgYXJlIGxvbmcgc2luY2Ugb3V0IG9mIHRoZSB0ZXJtaW5hbHMgYnVzaW5lc3MsIGJ1dAorIyBpbiAxOTk1IG1hbnkgY3VycmVudCB0ZXJtaW5hbHMgc3RpbGwgaGF2ZSBhbiBhZG0gdHlwZSBhcyBvbmUgb2YgdGhlaXIKKyMgZW11bGF0aW9ucyAodXN1YWxseSB0aGVpciBzdHVwaWRlc3QsIGFuZCB1c3VhbGx5IGxhYmVsZWQgYWRtMywgdGhvdWdoCisjIHRoZXNlIGBhZG0zJyBlbXVsYXRpb25zIG5vcm1hbGx5IGhhdmUgYWRtM2ErIGNhcGFiaWxpdGllcykuCisjCisjIFdBUk5JTkc6IFNvbWUgZWFybHkgQURNIHRlcm1pbmFscyAoaW5jbHVkaW5nIHRoZSBBRE0zIGFuZCBBRE01KSBoYWQgYQorIyBgZGlhZ25vc3RpYyBmZWF0dXJlJyB0aGF0IHNlbmRpbmcgdGhlbSBhIF5HIHdoaWxlIHBpbiAyMiAoYFJpbmcgSW5kaWNhdG9yJykKKyMgd2FzIGJlaW5nIGhlbGQgdG8gZ3JvdW5kIHdvdWxkIHRyaWdnZXIgYSBzZW5kIG9mIHRoZSB0b3AgbGluZSBvbiB0aGUgc2NyZWVuLgorIyBBIHF1aWNrIGZpeCBtaWdodCBiZSB0byBkcm9wIGJhY2sgdG8gYSBjaGVlc3kgNC13aXJlIGNhYmxlIHdpdGggcGluIDIyCisjIGhhbmdpbmcgaW4gdGhlIGFpci4gKFRoYW5rcyB0byBFcmljIEZpc2NoZXIsIDxlcmljQGZ1ZGdlLnVjaGljYWdvLmVkdT4sCisjIGZvciBjbGVhcmluZyB1cCB0aGlzIHBvaW50LikKKworYWRtMWF8YWRtMXxsc2kgYWRtMWEsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRTskPDE+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBob21lPV5eLAorCWluZD1eSiwKK2FkbTJ8bHNpIGFkbTIsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRTssIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULCBob21lPV5eLCBpY2gxPVxFUSwgaWwxPVxFRSwgaW5kPV5KLAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBraG9tZT1eXiwKKyMgKGFkbTM6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS15QOiIgLS0gZXNyKQorYWRtM3xsc2kgYWRtMywKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5aLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaW5kPV5KLAorIyBUaGUgZm9sbG93aW5nIEFETS0zQSBzd2l0Y2ggc2V0dGluZ3MgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCVNQQUNFCQlVL0xfRElTUAlDTFJfU0NSTgkyNF9MSU5FCisjCUNVUl9DVEwJCUxDX0VOCQlBVVRPX05MCQlGRFgKKyMgT3RoZXIgc3dpdGNoZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHMuICBJIHJlY29tbWVuZAorIwlESVNBQkxFX0tCX0xPQ0sJTE9DQUxfT0ZGCTEwMwkJMjAyX09GRgorIwlFVFhfT0ZGCQlFT1RfT0ZGCisjIE1vc3Qgb2YgdGhlc2UgdGVybWluYWxzIHJlcXVpcmVkIGFuIG9wdGlvbiBST00gdG8gc3VwcG9ydCBsb3dlciBjYXNlIGRpc3BsYXkuCisjIE9wZW4gdGhlIGNhc2UgYW5kIGxvb2sgYXQgdGhlIG1vdGhlcmJvYXJkOyBpZiB5b3Ugc2VlIGFuIG9wZW4gMjQtcGluIERJUAorIyBzb2NrZXQsIHlvdSBtYXkgYmUgb3V0IG9mIGx1Y2suCisjCisjIChhZG0zYTogc29tZSBjYXBhYmlsaXRpZXMgbWVyZ2VkIGluIGZyb20gQlJsIGVudHJ5IC0tIGVzcikKK2FkbTNhfGxzaSBhZG0zYSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlPVG1hPV5LXlAsIE9Ubmw9XkosIGJlbD1eRywgY2xlYXI9XDAzMiQ8MS8+LCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XkssIGhvbWU9Xl4sIGluZD1eSiwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywgcnMyPV5OLAorYWRtM2ErfGFkbTNhIHBsdXMsCisJa2JzPV5ILCB1c2U9YWRtM2EsCisjIChhZG01OiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkhoXkpqXktrXkxsXl5IOiIgJiBkdXBsaWNhdGUgIjpkbz1eSjoiIC0tIGVzcikKK2FkbTV8bHNpIGFkbTUsCisJeG1jIzEsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgZWQ9XEVZLCBlbD1cRVQsIGticz1eSCwga2hvbWU9Xl4sCisJcm1zbz1cRUcsIHNtc289XEVHLCB1c2U9YWRtM2ErLAorIyBBIGxvdCBvZiB0ZXJtaW5hbHMgb3RoZXIgdGhhbiBhZG0xMXMgdXNlIHRoZXNlLiAgV2hlcmV2ZXIgeW91IHNlZQorIyB1c2U9YWRtK3NnciB3aXRoIHNvbWUgb2YgaXRzIGNhcGFiaWxpdGllcyBkaXNhYmxlZCwgdHJ5IHRoZQorIyBkaXNhYmxlZCBvbmVzLiAgVGhleSBtYXkgd2VsbCB3b3JrIGJ1dCBub3QgaGF2ZSBiZWVuIGRvY3VtZW50ZWQgb3IKKyMgZXhwcmVzc2VkIGluIHRoZSB1c2luZyBlbnRyeS4gIFdlJ2QgbGlrZSB0byBjb29rIHVwIGFuIDxzZ3I+IGJ1dCB0aGUKKyMgPHJtYWNzPi88c21hY3M+IHNlcXVlbmNlcyBvZiB0aGUgdXNpbmcgZW50cmllcyB2YXJ5IHRvbyBtdWNoLgorYWRtK3NncnxhZG0gc3R5bGUgaGlnaGxpZ2h0IGNhcGFiaWxpdGllcywKKwlpbnZpcz1cRUcxLCByZXY9XEVHNCwgcm1zbz1cRUcwLCBybXVsPVxFRzAsIHNncjA9XEVHMCwKKwlzbXNvPVxFRzQsIHNtdWw9XEVHOCwKKyMgTFNJIEFETS0xMSBmcm9tIEdlb3JnZSBXaWxsaWFtIEhhcnR3aWcsIEpyLiA8Z2VvQEJSTC1UR1IuQVJQQT4gdmlhIEJSTAorIyBTdGF0dXMgbGluZSBhZGRpdGlvbnMgZnJvbSBTdGVwaGVuIEouIE11aXIgPHN0ZXBoZW4lY29tcC5sYW5jcy5hYy51a0B1Y2wtY3M+CisjIDxraG9tZT4gZnJvbSA8c3RlcGhlbiVjb21wLmxhbmNzLmFjLnVrQHVjbC1jcy5hcnBhPi4gIDxjbGVhcj4gY291bGQgYWxzbworIyBiZSBeWiwgYWNjb3JkaW5nIHRvIGhpcyBlbnRyeS4KKyMgKGFkbTExOiA8c211bD49XEVHNCB3YXMgb2J2aW91c2x5IGVycm9uZW91cyBiZWNhdXNlIGl0IGFsc28gc2FpZAorIyA8cmV2Pj1cRUc0LiAgTG9va2luZyBhdCBvdGhlciBBRE1zIGNvbmZpcm1zIHRoaXMgLS0gZXNyKQorYWRtMTF8TFNJIEFETS0xMSwKKwlPVGJzLCBhbSwgaHMsCisJT1RrbiM4LCBjb2xzIzgwLCBsaW5lcyMyNCwKKwlPVG5sPV5KLCBiZWw9XkcsIGJsaW5rPVxFRzIsIGNsZWFyPVxFKiwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPV5LLCBkc2w9XEVoLCBlZD1cRVksIGVsPVxFVCwgZnNsPVxFKFxyLCBob21lPV5eLCBodD1eSSwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjE9XkFAXHIsCisJa2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsCisJa2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtob21lPV5eLCBuZWw9Xk1eSiwgdHNsPVxFRlxFKSwKKwl1c2U9YWRtK3NnciwKKyMgRnJvbTogQW5kcmV3IFNjb3R0IEJlYWxzIDxiYW5keUBsbGwtY3JnLkFSUEE+CisjIENvcnJlY3RlZCBieSBPbGFmIFNpZWJlcnQgPHJoaWFsdG9AcG9sZGVyLnViYy5rdW4ubmw+LCAxMSBNYXkgMTk5NQorIyBTdXBlcnZpc29yIG1vZGUgaW5mbyBieSBBcmkgV3VvbGxlLCA8YXd1b2xsZUBkZWx0YS5odXQuZmk+LCAyNyBBdWcgMTk5NgorIyAoYWRtMTI6IHJlbW92ZWQgb2Jzb2xldGUgIjprbjptYT1qXkprXlBeS15QbCBeUl5MXkwgOiIuICBUaGlzIGZvcm1lcmx5IGhhZAorIyA8aXMyPj1cRXEgYnV0IHRoYXQgbG9va2VkIHdyb25nOyB0aGlzIDxpczI+IGlzIGZyb20gRGF2ZSBZb3N0IDxlc3F1aXJlIXlvc3Q+CisjIHZpYSBCUkwuICBUaGF0IGVudHJ5IGFzc2VydGVkIDx4bWMjMT4sIGJ1dCBJJ3ZlIGxlZnQgdGhhdCBvdXQgYmVjYXVzZQorIyBuZWl0aGVyIGVhcmxpZXIgbm9yIGxhdGVyIEFETVNzIGhhdmUgaXQgLS0gZXNyKQorIworIyBZb3Ugd2lsbCBuZWVkIHRvIGdldCBpbnRvIHRoZSBzdXBlcnZpc29yIHNldHVwIGJlZm9yZSB5b3UgY2FuIHNldAorIyBiYXVkcmF0ZSBldGMuIGZvciB5b3VyIEFETS0xMisuIFByZXNzIFNoaWZ0LUN0cmwtU2V0dXAgYW5kIHlvdSBzaG91bGQKKyMgc2VlIGEgbG90IG1vcmUgc2V0dXAgb3B0aW9ucy4KKyMKKyMgV2hpbGUgaW4gc3VwZXJ2aXNvciBzZXR1cCB5b3UgY2FuIGFsc28gdXNlIGZvbGxvd2luZyBjb2RlczoKKyMKKyMgQ3RybC1QIFBlcnNvbmFsaXR5IGNoYXJhY3RlciBzZWxlY3Rpb25zIChjb25maWd1cmUgZm9yIGV4YW1wbGUgd2hhdAorIyAgICAgICAgYXJyb3cga2V5cyBzZW5kLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkpCisjIEN0cmwtVCB0YWJzIDEtODAgICB1c2UgbGVmdCZyaWdodCB0byBtb3ZlIGFuZCB1cCB0byBzZXQgYW5kCisjIEN0cmwtViB0YWJzIDgxLTE1OCBkb3duIHRvIGNsZWFyIHRhYi4gU2hpZnQtQ3RybC1NIHNldHMgcmlnaHQgbWFyZ2luIGF0IGN1cnNvcgorIyBDdHJsLUIgQmluYXJ5IHNldHVwIChwcm9iYWJseSBub3QgbmVlZGVkLiBJIHRoaW5rIHRoYXQgZXZlcnl0aGluZyBjYW4KKyMgICAgICAgIGJlIHNldCB1c2luZyBub3JtYWwgc2V0dXApCisjIEN0cmwtQSBBbnN3ZXJiYWNrIG1vZGUgKGVudGVyIGFuc3dlcmJhY2sgbWVzc2FnZSkKKyMgQ3RybC1VIFVzZXIgZnJpZW5kbHkgbW9kZSAobm9ybWFsIHNldHVwKQorIyBDdHJsLUQgRGVmYXVsdHMgZW50aXJlIHNldHVwIGFuZCBmdW5jdGlvbiBrZXlzIGZyb20gRVBST00gdGFibGVzCisjIEN0cmwtUyBTYXZlIGJvdGggc2V0dXAgYW5kIGZ1bmN0aW9ucyBrZXlzLiBUYWtlcyBmcm9tIDYgdG8gMTAgc2Vjb25kcy4KKyMgQ3RybC1SIFJlYWRzIGJvdGggc2V0dXAgYW5kIGZ1bmN0aW9ucyBrZXlzIGZyb20gTlZNLgorIyBTaGlmdC1DdHJsLVggVW5sb2NrIGtleWJvYXJkIGFuZCBjYW5jZWwgcmVjZWl2ZWQgWC1PRkYgc3RhdHVzCisjCisjIEFETS0xMisgc3VwcG9ydHMgaGFyZHdhcmUgaGFuZHNoYWtpbmcsIGJ1dCBpdCBpcyBEVFIvQ1RTIGFzIG9wcG9zZWQgdG8KKyMgUlRTL0NUUyB1c2VkIG5vd2FkYXlzIHdpdGggdmlydHVhbGx5IGV2ZXJ5IG1vZGVtIGFuZCBjb21wdXRlci4gMTkyMDAKKyMgYnBzIHdvcmtzIGZpbmUgd2l0aCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCisjCisjIFRoZSBmb2xsb3dpbmcgbnVsbC1tb2RlbSBjYWJsZSBzaG91bGQgZml4IHRoaXMgYW5kIGVuYWJsZSB5b3UgdG8gdXNlCisjIFJUUy9DVFMgaGFuZHNoYWtpbmcgKHdoaWNoIExpbnV4IHN1cHBvcnRzLCB1c2UgQ1JUU0NUUyBzZXR0aW5nKS4gQWxzbworIyBzZXQgQURNLTEyKyBmb3IgRFRSIGhhbmRzaGFraW5nIGZyb20gc3VwZXJ2aXNvciBzZXR1cC4KKyMKKyMgUEMgU2VyaWFsICAgQURNLTEyKworIyAgLS0tLS0tLS0gICAtLS0tLS0tCisjICAgICAgICAgMiAtIDMKKyMgICAgICAgICAzIC0gMgorIyAgICAgICAgIDQgLSA1CisjICAgICAgICAgNSAtIDIwCisjICAgICAgIDYsOCAtIDQKKyMgICAgICAgICA3IC0gNworIyAgICAgICAgMjAgLSA2LDgKKyMKK2FkbTEyfGxzaSBhZG0xMiwKKwlPVGJzLCBPVHB0LCBhbSwgbWlyLAorCU9UdWcjMSwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGhvbWU9Xl4sIGh0cz1cRTEsIGljaDE9XEVRLCBpbDE9XEVFLAorCWlzMj1cRTAgICAgICAgIFxFMSAgICAgICAgXEUxICAgICAgICBcRTEgICAgICAgIFxFMSAgICAgICAgXEUxICAgICAgICBcRTEgICAgICAgIFxFMSAgICAgICAgXEUxLAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjA9XkEwXHIsIGtmMT1eQTFcciwKKwlrZjI9XkEyXHIsIGtmMz1eQTNcciwga2Y0PV5BNFxyLCBrZjU9XkE1XHIsIGtmNj1eQTZcciwKKwlrZjc9XkE3XHIsIGtmOD1eQThcciwga2Y5PV5BOVxyLCBybWlyPVxFciwgc21pcj1cRXEsIHRiYz1cRTAsCisJdXNlPWFkbStzZ3IsCisjIChhZG0yMDogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuIzc6IiAtLSBlc3IpCithZG0yMHxsZWFyIHNpZWdsZXIgYWRtMjAsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZjE9XkwsCisJY3VwPVxFPSVpJXAyJXszMX0lKyVjJXAxJXszMX0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwgaG9tZT1eXiwgaHQ9XkksIGljaDE9XEVRLCBpbDE9XEVFLAorCWtmMT1eQSwga2YyPV5CLCBrZjM9XlcsIGtmND1eRCwga2Y1PV5FLCBrZjY9XlgsIGtmNz1eWiwgcm1zbz1cRSgsCisJc2dyMD1cRSgsIHNtc289XEUpLAorYWRtMjF8bGVhciBzaWVnbGVyIGFkbTIxLAorCXhtYyMxLAorCWJlbD1eRywgY3I9Xk0sIGN1ZDE9XkosIGRjaDE9XEVXLCBkbDE9MzAqXEVSLCBlZD1cRVksIGVsPVxFVCwKKwlpY2gxPVxFUSwgaWwxPTMwKlxFRSwgaW5kPV5KLCBpbnZpc0AsIGticz1eSCwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2hvbWU9Xl4sIHVzZT1hZG0rc2dyLAorCXVzZT1hZG0zYSwKKyMgKGFkbTIyOiAiOmVtPToiIHdhcyBhbiBvYnZpb3VzIHR5cG8gZm9yICI6ZWk9OiI7IGFsc28sCisjIHJlbW92ZWQgb2Jzb2xldGUgIjprbiM3Om1hPWpeSmteUF5LXlBsIF5SXkxeTCA6IjsKKyMgcmVtb3ZlZCBib2d1cy1sb29raW5nIFwyMDAgZnJvbSBiZWZvcmUgPGN1cD4uIC0tIGVzcikKK2FkbTIyfGxzaSBhZG0yMiwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRUksIGNsZWFyPVxFKywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEV5LCBlbD1cRXQsIGhvbWU9Xl4sIGh0PVxFaSwgaWNoMT1cRVEsIGlsMT1cRUUsCisJaXMyPVxFJVwwMTRcMDE0XDAxNFwwMTZcMDAzXDBcMDAzXDAwMlwwMDNcMDAyXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjE9XkFAXHIsCisJa2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsCisJa2Y3PV5BRlxyLCBraG9tZT1eXiwgbGYxPUYxLCBsZjI9RjIsIGxmMz1GMywgbGY0PUY0LCBsZjU9RjUsCisJbGY2PUY2LCBsZjc9RjcsIHJtc289XEUoLCBzZ3IwPVxFKCwgc21zbz1cRSksCisjIEFETSAzMSBESVAgU3dpdGNoZXMKKyMKKyMgVGhpcyBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHR3byB2ZXJzaW9ucyBvZiB0aGUgbWFudWFsIGZvciB0aGUKKyMgTGVhci1TaWVnbGVyIEFETSAzMS4KKyMKKyMgTWFpbiBib2FyZDoKKyMgICAgICAgICAgICAgICAgICByZWFyIG9mIGNhc2UKKyMgICArLXx8fHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAgICsgUzFTMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8UyAgICArCisjICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwzICAgICsKKyMgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIyAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8UyAgICAgICArCisjICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHw0ICAgICAgICsKKyMgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIyAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisjICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyMgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIyAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisjICstKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKworIyArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyMgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTNSBTNiBTNyAgICAgICArCisjICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gPT0gPT0gICAgICAgKworIyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICBmcm9udCBvZiBjYXNlIChrZXlib2FyZCkKKyMKKyMgIFMxIC0gRGF0YSBSYXRlIC0gTW9kZW0KKyMgIFMyIC0gRGF0YSBSYXRlIC0gUHJpbnRlcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGF0YSBSYXRlICAgU2V0dGluZworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIDUwICAgICAgICAgIDAgMCAwIDAKKyMgNzUgICAgICAgICAgMSAwIDAgMAorIyAxMTAgICAgICAgICAwIDEgMCAwCisjIDEzNC41ICAgICAgIDEgMSAwIDAKKyMgMTUwICAgICAgICAgMCAwIDEgMAorIyAzMDAgICAgICAgICAxIDAgMSAwCisjIDYwMCAgICAgICAgIDAgMSAxIDAKKyMgMTIwMCAgICAgICAgMSAxIDEgMAorIyAxODAwICAgICAgICAwIDAgMCAxCisjIDIwMDAgICAgICAgIDEgMCAwIDEKKyMgMjQwMCAgICAgICAgMCAxIDAgMQorIyAzNjAwICAgICAgICAxIDEgMCAxCisjIDQ4MDAgICAgICAgIDAgMCAxIDEKKyMgNzIwMCAgICAgICAgMSAwIDEgMQorIyA5NjAwICAgICAgICAwIDEgMSAxCisjIHggICAgICAgICAgIDEgMSAxIDEKKyMKKyMgUzMgLSBJbnRlcmZhY2UvUHJpbnRlci9BdHRyaWJ1dGVzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludGVyIEJ1c3kgQ29udHJvbAorIyBzdzEgICBzdzIgICBzdzMKKyMgLS0tLS0tLS0tLS0tLS0tCisjIG9mZiAgIG9mZiAgIG9mZiAgIEJ1c3kgbm90IGFjdGl2ZSwgQ0QgZGlzYWJsZWQKKyMgb2ZmICAgb2ZmICAgb24gICAgQnVzeSBub3QgYWN0aXZlLCBDRCBlbmFibGVkCisjIG9mZiAgIG9uICAgIG9mZiAgIEJ1c3kgYWN0aXZlIG9uIEo1LTIwLCBDRCBkaXNhYmxlZAorIyBvbiAgICBvZmYgICBvZmYgICBCdXN5IGFjdGl2ZSBvbiBKNS0xOSwgQ0QgZGlzYWJsZWQgLSBGYWN0b3J5IFNldC4KKyMgb24gICAgb2ZmICAgb24gICAgQnVzeSBhY3RpdmUgb24gSjUtMTksIENEIGVuYWJsZWQKKyMKKyMgc3c0ICAgVXNlZCBpbiBjb25qdWN0aW9uIHdpdGggUzQgZm9yIGNvbW0gaW50ZXJmYWNlIGNvbnRyb2wgLSBGYWN0IDAKKyMKKyMgc3c1ICAgU2Vjb25kYXJ5IENoYW5uZWwgQ29udHJvbCAoSGFyZHdhcmUgaW1wbGVtZW50YXRpb24gb25seSkgLSBGYWN0IDAKKyMKKyMgc3c2ICAgT04gZW5hYmxlcyBwcmludGVyIEJVU1kgYWN0aXZlIExPVyAtIEZhY3RvcnkgU2V0dGluZworIyAgICAgICBPRkYgZW5hYmxlcyBwcmludGVyIEJVU1kgYWN0aXZlIEhJR0ggLSBJZiBzZXQgdG8gdGhpcywgQURNMzEgc2Vuc2VzCisjCisjIHN3NyAgIE9OIC0gc3RlYWR5IGN1cnNvciAtIEZhY3RvcnkgU2V0dGluZworIyAgICAgICBPRkYgLSBibGlua2luZyBjdXJzb3IKKyMKKyMgc3c4ICAgT04gY2F1c2VzIHNlbGVjdGVkIGF0dHJpYnV0ZSBjaGFyYWN0ZXIgdG8gYmUgZGlzcGxheWVkCisjICAgICAgIE9GRiBjYXVzZXMgU1BBQ0UgdG8gYmUgZGlzcGxheWVkIGluc3RlYWQgLSBGYWN0b3J5IFNldHRpbmcKKyMKKyMgUzQgLSBJbnRlcmZhY2UKKyMgLS0tLS0tLS0tLS0tLS0KKyMgTW9kZW0gSW50ZXJmYWNlCisjIFMzICAgIFM0ICAgIFM0ICAgIFM0ICAgIFM0CisjIHN3NCAgIHN3MSAgIHN3MiAgIHN3MyAgIHN3NAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT0ZGICAgT04gICAgT0ZGICAgT04gICAgT0ZGICAgRW5hYmxlIFJTLTIzMkMgaW50ZXJmYWNlLCBEaXJlY3QgQ29ubmVjdCBhbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBMb29wIGRpc2FibGVkIC0gRmFjdG9yeSBTZXR0aW5nCisjIE9OICAgIE9OICAgIE9GRiAgIE9OICAgIE9GRiAgIEVuYWJsZSBDdXJyZW50IExvb3AgaW50ZXJmYWNlLCBEaXJlY3QgQ29ubmVjdAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZAorIyBPRkYgICBPRkYgICBPTiAgICBPRkYgICBPTiAgICBFbmFibGUgRGlyZWN0IENvbm5lY3QgaW50ZXJmYWNlLCBSUy0yMzJDIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IExvb3AgRGlzYWJsZWQKKyMKKyMgc3c1ICAgT04gZGlzYWJsZXMgZG90IHN0cmV0Y2hpbmcgbW9kZSAtIEZhY3RvcnkgU2V0dGluZworIyAgICAgICBPRkYgZW5hYmxlcyBkb3Qgc3RyZXRjaGluZyBtb2RlCisjIHN3NiAgIE9OIGVuYWJsZXMgYmxhbmtpbmcgZnVuY3Rpb24KKyMgICAgICAgT0ZGIGVuYWJsZXMgdW5kZXJsaW5lIGZ1bmN0aW9uIC0gRmFjdG9yeSBTZXR0aW5nCisjIHN3NyAgIE9OIGNhdXNlcyBOVUxMUyB0byBiZSBkaXNwbGF5ZWQgYXMgTlVMTFMKKyMgICAgICAgT0ZGIGNhdXNlcyBOVUxMUyB0byBiZSBkaXNwbGF5ZWQgYXMgU1BBQ0VTIC0gRmFjdG9yeSBTZXR0aW5nCisjCisjIFM1IC0gV29yZCBTdHJ1Y3R1cmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzdzEgICBPTiBlbmFibGVzIEJSRUFLIGtleSAtIEZhY3RvcnkgU2V0dGluZworIyAgICAgICBPRkYgZGlzYWJsZXMgQlJFQUsga2V5CisjIHN3MiAgIE9OIHNlbGVjdHMgNTBIeiBtb25pdG9yIHJlZnJlc2ggcmF0ZQorIyAgICAgICBPRkYgc2VsZWN0cyA2MEh6IG1vbml0b3IgcmVmcmVzaCByYXRlIC0gRmFjdG9yeSBTZXR0aW5nCisjCisjIE1vZGVtIFBvcnQgU2VsZWN0aW9uCisjIHN3MyAgIHN3NCAgIHN3NQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgT04gICAgT04gICAgT04gICAgU2VsZWN0cyA3IERBVEEgYml0cywgZXZlbiBwYXJpdHksIDIgU1RPUCBiaXRzCisjIE9GRiAgIE9OICAgIE9OICAgIFNlbGVjdHMgNyBEQVRBIGJpdHMsIG9kZCAgcGFyaXR5LCAyIFNUT1AgYml0cworIyBPTiAgICBPRkYgICBPTiAgICBTZWxlY3RzIDcgREFUQSBiaXRzLCBldmVuIHBhcml0eSwgMSBTVE9QIGJpdCAtIEZhY3RvcnkgU2V0LgorIyBPRkYgICBPRkYgICBPTiAgICBTZWxlY3RzIDcgREFUQSBiaXRzLCBvZGQgIHBhcml0eSwgMSBTVE9QIGJpdAorIyBPTiAgICBPTiAgICBPRkYgICBTZWxlY3RzIDggREFUQSBiaXRzLCBubyAgIHBhcml0eSwgMiBTVE9QIGJpdHMKKyMgT0ZGICAgT04gICAgT0ZGICAgU2VsZWN0cyA4IERBVEEgYml0cywgbm8gICBwYXJpdHksIDEgU1RPUCBiaXQKKyMgT04gICAgT0ZGICAgT0ZGICAgU2VsZWN0cyA4IERBVEEgYml0cywgZXZlbiBwYXJpdHksIDEgU1RPUCBiaXQKKyMgT0ZGICAgT0ZGICAgT0ZGICAgU2VsZWN0cyA4IERBVEEgYml0cywgb2RkICBwYXJpdHksIDEgU1RPUCBiaXQKKyMKKyMgc3c2ICAgT04gIHNlbmRzIGJpdCA4IGEgMSAobWFyaykKKyMgICAgICAgT0ZGIHNlbmRzIGJpdCA4IGFzIDAgKHNwYWNlKSAtIEZhY3RvcnkgU2V0dGluZworIyBzdzcgICBPTiAgc2VsZWN0cyBCbG9jayBNb2RlCisjICAgICAgIE9GRiBzZWxlY3RzIENvbnZlcnNhdGlvbiBNb2RlIC0gRmFjdG9yeSBTZXR0aW5nCisjIHN3OCAgIE9OICBzZWxlY3RzIEZ1bGwgRHVwbGV4IG9wZXJhdGlvbgorIyAgICAgICBPRkYgc2VsZWN0cyBIYWxmIER1cGxleCBvcGVyYXRpb24gLSBGYWN0b3J5IFNldHRpbmcKKyMKKyMgUzYgLSBQcmludGVyCisjIC0tLS0tLS0tLS0tLQorIyBzdzEsIHN3Miwgc3c2LCBzdzcgICBSZXNlcnZlZCAtIEZhY3RvcnkgMAorIworIyBQcmludGVyIFBvcnQgU2VsZWN0aW9uCisjIHNhbWUgYXMgTW9kZW0gYWJvdmUsIGJpdCA4ICh3aGVuIDggREFUQSBiaXRzKSBpcyBhbHdheXMgPSAwCisjCisjIHN3OCAgIE9OICAgZW5hYmxlcyBQcmludGVyIFBvcnQKKyMgICAgICAgT0ZGIGRpc2FibGVzIFByaW50ZXIgUG9ydCAtIEZhY3RvcnkgU2V0dGluZworIworIyBTNyAtIFBvbGxpbmcgQWRkcmVzcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzdzEtNyBFc3RhYmxpc2ggQVNDSUkgY2hhcmFjdGVyIHdoaWNoIGRlc2lnbmF0ZXMgdGVybWluYWwgcG9sbGluZyBhZGRyZXNzCisjICAgICAgIE9OICA9IGxvZ2ljIDAKKyMgICAgICAgT0ZGID0gbG9naWMgMSAtIEZhY3RvcnkgU2V0dGluZworIyBzdzggICBPTiAgIGVuYWJsZXMgUG9sbGluZyBPcHRpb24KKyMgICAgICAgT0ZGIGRpc2FibGVzIFBvbGxpbmcgT3B0aW9uIC0gRmFjdG9yeSBTZXR0aW5nCisjCisjCisjIE9uIHNvbWUgb2xkZXIgYWRtMzFzLCBTNCBkb2VzIG5vdCBleGlzdCwgYW5kIFM1LXN3NiBpcyBub3QgZGVmaW5lZC4KKyMKKyMgVGhpcyBhZG0zMSBlbnRyeSB1c2VzIHVuZGVybGluZSBhcyB0aGUgc3RhbmRvdXQgbW9kZS4KKyMgSWYgdGhlIGFkbTMxIGdpdmVzIHlvdSB0cm91YmxlIHdpdGggc3RhbmRvdXQgbW9kZSwgY2hlY2sgdGhlIERJUCBzd2l0Y2ggaW4KKyMgcG9zaXRpb24gNiwgYmFuayBAYzExLCAyNSUgZnJvbSBiYWNrIGVuZCBvZiB0aGUgY2lyY3VpdCBib2FyZC4gIFNob3VsZCBiZQorIyBPRkYuICBJZiB0aGVyZSBpcyBubyBzdWNoIHN3aXRjaCwgeW91IGhhdmUgYW4gb2xkIGFkbTMxIGFuZCBtdXN0IHVzZSBvYWRtMzEuCisjIChhZG0zMTogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPWpeSmteUF5LXlBsIF5SXkxeTCA6IiAtLSBlc3IpCithZG0zMXxsc2kgYWRtMzEgd2l0aCBzdzYgc2V0IGZvciB1bmRlcmxpbmUgbW9kZSwKKwlPVGJzLCBhbSwgbWlyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEUqLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwgaG9tZT1eXiwgaWwxPVxFRSwgaW5kPV5KLCBpczI9XEV1XEUwLAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjA9XkEwXHIsIGtmMT1eQTFcciwKKwlrZjI9XkEyXHIsIGtmMz1eQTNcciwga2Y0PV5BNFxyLCBrZjU9XkE1XHIsIGtmNj1eQTZcciwKKwlrZjc9XkE3XHIsIGtmOD1eQThcciwga2Y5PV5BOVxyLCBybWlyPVxFciwgcm1zbz1cRUcwLAorCXJtdWw9XEVHMCwgc2dyMD1cRUcwLCBzbWlyPVxFcSwgc21zbz1cRUcxLCBzbXVsPVxFRzEsCithZG0zMS1vbGR8bzMxfG9sZCBhZG0zMSwKKwlybXVsQCwgc21zbz1cRUc0LCBzbXVsQCwgdXNlPWFkbTMxLAorIyBMU0kgQURNLTM2IGZyb20gQ29sLiBHZW9yZ2UgTC4gU2ljaGVybWFuIDxnbG9yaWEhY29sb25lbD4gdmlhIEJSTAorYWRtMzZ8TFNJIEFETTM2LAorCU9UYnMsIE9UcHQsCisJT1RrbiM0LAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLAorCWlzMj1cRTxcRT5cRVs2Oz8yOz83Oz84aFxFWzQ7MjA7PzE7PzM7PzQ7PzU7PzY7PzE4Oz8xOWwsCisJdXNlPXZ0MTAwLAorIyAoYWRtNDI6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS15QOiIgLS0gZXNyKQorYWRtNDJ8bHNpIGFkbTQyLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XEU7LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLAorCWN2dmlzPVxFQ1xFMyBcRTMoLCBkY2gxPVxFVywgZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGh0PV5JLAorCWlsMT1cRUUkPDI3MD4sIGluZD1eSiwgaW52aXNALCBpcD0kPDYqPiwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywga2hvbWU9Xl4sIHBhZD1cMTc3LCBybWlyPVxFciwgcm11bEAsCisJc21pcj1cRXEsIHNtdWxALCB1c2U9YWRtK3NnciwKKyMgVGhlIGZvbGxvd2luZyB0ZXJtY2FwIGZvciB0aGUgTGVhciBTaWVnbGVyIEFETS00MiBsZWF2ZXMgdGhlCisjICJzeXN0ZW0gbGluZSIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuIGJsYW5rIChmb3IgdGhvc2Ugd2hvCisjIGZpbmQgaXQgZGlzdHJhY3Rpbmcgb3RoZXJ3aXNlKQorYWRtNDItbnN8bHNpIGFkbS00MiB3aXRoIG5vIHN5c3RlbSBsaW5lLAorCWNidD1cRUlcRUYgXDAxMSwgY2xlYXI9XEU7XEVGIFwwMTEsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8Nj5cRUYgXDAxMSwKKwlkY2gxPVxFV1xFRiBcMDExLCBkbDE9XEVSXEVGIFwwMTEsIGVkPVxFWVxFRiBcMDExLAorCWVsPVxFVFxFRiBcMDExLCBpbDE9XEVFXEVGIFwwMTEsIHJtaXI9XEVyXEVGIFwwMTEsCisJc21pcj1cRXFcRUYgXDAxMSwgdXNlPWFkbTQyLAorIyBBRE0gMTE3OCB0ZXJtaW5hbCAtLSByYXRoZXIgbGlrZSBhbiBBRE0tNDIuICBNYW51YWwgaXMgZGF0ZWQgTWFyY2ggMSAxOTg1LgorIyBUaGUgaW5zZXJ0IG1vZGUgb2YgdGhpcyB0ZXJtaW5hbCBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQncyBicm9rZW4gZm9yIG91cgorIyBwdXJwb3NlcyBpbiB0aGF0IGl0IHdpbGwgc2hpZnQgdGhlIHBvc2l0aW9uIG9mIGV2ZXJ5IGNoYXJhY3RlciBvbiB0aGUgcGFnZSwKKyMgbm90IGp1c3QgdGhlIGN1cnNvciBsaW5lIQorIyBGcm9tOiBNaWNoYWVsIERyaXNjb2xsIDxmZW5yaXNAbGlnaHRzcGVlZC5uZXQ+IDEwIEp1bHkgMTk5NgorYWRtMTE3OHwxMTc4fGxzaSBhZG0xMTc4LAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGJvbGQ9XEUoLCBjYnQ9XEVJLCBjbGVhcj1cRSssIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJY3Z2aXM9XEVDXEUzIFxFMygsIGRjaDE9XEVXLCBkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwKKwlob21lPV5eLCBodD1eSSwgaWwxPVxFRSwgaW5kPV5KLCBpcD0kPDYqLz4sIGticz1eSCwga2N1YjE9XkgsCisJa2N1ZDE9XkosIG5lbD1eTV5KLCBwYWQ9XDE3NywgcmV2PVxFRzQsIHJtc289XEVHMCwgcm11bD1cRUcwLAorCXNncjA9XEUpLCBzbXNvPVxFRzQsIHNtdWw9XEVHMSwKKworIyMjIyBQcmltZQorIworIyBZZXMsIFByaW1lIG1hZGUgdGVybWluYWxzLiAgVGhlc2UgZW50cmllcyB3ZXJlIHBvc3RlZCBieSBLZXZpbiBKLiBDdW1taW5ncworIyA8Y3VtbWluZ3NAcHJpbWVyZC5wcmltZS5jb20+IG9uIDE0IERlYyAxOTkyIGFuZCBsaWdodGx5IGVkaXRlZCBieSBlc3IuCisjIFByaW1lIG1lcmdlZCB3aXRoIENvbXB1dGVyVmlzaW9uIGluIHRoZSBsYXRlIDE5ODBzOyB5b3UgY2FuIHJlYWNoIHRoZW0gYXQ6CisjCisjCUNvbXB1dGVyVmlzaW9uIFNlcnZpY2VzCisjCTUwMCBPbGQgQ29ubmVjdGljdXQgUGF0aAorIwlGcmFtaW5naGFtLCBNYXNzLgorIworCisjIFN0YW5kb3V0IG1vZGUgaXMgZGltIHJldmVyc2UtdmlkZW8uCitwdDEwMHxwdDIwMHx3cmVufGZlbml4fHByaW1lIHB0MTAwL3B0MjAwLAorCWFtLCBidywgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNidD1cRVtaLCBjbGVhcj1cRT8sIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVELCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFMCVwMSV7MzN9JSslYyVwMiV7MzN9JSslYywgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFTSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsMT1cRVtNLAorCWVkPVxFW0pcRVtyLCBlbD1cRVtLXEVbdCwgZmxhc2g9XEUkJDwyMDAvPlxFJFAsCisJaG9tZT1cRSRCLCBodD1eSSwgaWwxPVxFW0xcRVt0LCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRSRBLCBuZWw9Xk1eSiwKKwlybWN1cD0sIHJtaXI9XEVbNGwsIHJta3g9XEVbPjEzbCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLAorCXNtY3VwPVxFWz4xbFxFWz4ybFxFWz4xNmxcRVs0bFxFWz45bFxFWzIwbFxFWz4zbFxFWz43aFxFWz4xMmxcRVsxUSwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz4xM2gsIHNtc289XEVbMjs3bSwgc211bD1cRVs0bSwKK3B0MTAwd3xwdDIwMHd8d3Jlbnd8ZmVuaXh3fHByaW1lIHB0MTAwL3B0MjAwIGluIDEzMi1jb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIHVzZT1wdDEwMCwKK3B0MjUwfFByaW1lIFBUMjUwLAorCXJtc29ALCBzbXNvQCwgdXNlPXB0MTAwLAorcHQyNTB3fFByaW1lIFBUMjUwIGluIDEzMi1jb2x1bW4gbW9kZSwKKwlybXNvQCwgc21zb0AsIHVzZT1wdDEwMHcsCisKKyMjIyMgUXVtZSAocXZ0KQorIworIwlRdW1lLCBJbmMuCisjCTM0NzUtQSBOb3J0aCAxc3QgU3RyZWV0CisjCVNhbiBKb3NlIENBIDk1MTM0CisjCVZveDogKDgwMCktNDU3LTQ0NDcKKyMJRmF4OiAoNDA4KS00NzMtMTUxMAorIwlOZXQ6IGpvc2VkQHRlY2hzdXBwLnd5c2UuY29tIChKb3NlIEQnT2xpdmVpcmEpCisjCisjIFF1bWUgd2FzIGJvdWdodCBieSBXeXNlLCBidXQgc3RpbGwgKGFzIG9mIGVhcmx5IDE5OTUpIGhhcyBpdHMgb3duIHN1cHBvcnQKKyMgZ3JvdXAgYW5kIHByb2R1Y3Rpb24gZGl2aXNpb24uCisjCisjIERpc2NvbnRpbnVlZCBRdW1lIG1vZGVsczoKKyMKKyMgVGhlIHF2dDEwMSBhbmQgcXZ0MTAyIGxpc3RlZCBoZXJlIGFyZSBsb25nIG9ic29sZXRlOyBzbyBpcyB0aGUgcXZ0MTAxKworIyBidWlsdCB0byByZXBsYWNlIHRoZW0sIGFuZCBhIHF2dDExOSsgd2hpY2ggd2FzIGEgMTAxKyB3aXRoIGF2YWlsYWJsZSB3aWRlCisjIG1vZGUgKDEzMiBjb2x1bW5zKS4gIFRoZXJlIHdhcyBhIHF2dDEwMyB3aGljaCBhZGRlZCB2dDEwMC92dDEzMSBlbXVsYXRpb25zCisjIGFuZCBhbiBBTlNJLWNvbXBhdGlibGUgcXZ0MjAzIHRoYXQgcmVwbGFjZWQgaXQuICBRdW1lIHN0YXJ0ZWQgcHJvZHVjaW5nCisjIEFOU0ktY29tcGF0aWJsZSB0ZXJtaW5hbHMgd2l0aCB0aGUgcXZ0MzIzIGFuZCBxdnQ2MS4KKyMKKyMgQ3VycmVudCBRdW1lIG1vZGVscyAoYXMgb2YgRmVicnVhcnkgMTk5NSk6CisjCisjIEFsbCBjdXJyZW50IFF1bWUgdGVybWluYWxzIGhhdmUgQU5TSS1jb21wYXRpYmxlIG9wZXJhdGlvbiBtb2Rlcy4KKyMgUXVtZSBpcyBzdGlsbCBwcm9kdWNpbmcgdGhlIHF2dDYyLCB3aGljaCBmZWF0dXJlcyBlbXVsYXRpb25zIGZvciBvdGhlcgorIyBwb3B1bGFyIGxpbmVzIHN1Y2ggYXMgQUREUywgYW5kIGR1YWwtaG9zdCBjYXBhYmlsaXRpZXMuICBUaGUgcXZ0ODIgaXMKKyMgZGVzaWduZWQgZm9yIHVzZSBhcyBhIFNDTyBBTlNJIHRlcm1pbmFsLiAgVGhlIHF2dDcwIGlzIGEgY29sb3IgdGVybWluYWwKKyMgd2l0aCBtYW55IGVtdWxhdGlvbnMgaW5jbHVkaW5nIFd5c2UzNzAsIFd5c2UgMzI1LCBldGMuICBUaGVpciBuZXdlc3QKKyMgbW9kZWwgaXMgdGhlIHF2dDUyMCwgd2hpY2ggaXMgdnQ0MjAtY29tcGF0aWJsZS4KKyMKKyMgVGhlcmUgYXJlIHNvbWUgYW5jaWVudCBwcmludGluZyBRdW1lIHRlcm1pbmFscyB1bmRlciBgRGFpc3kgV2hlZWwgUHJpbnRlcnMnCisjCisjIElmIHlvdSBpbmhlcml0IGEgUXVtZSB3aXRob3V0IGRvY3MsIHRyeSBDdHJsLVNoaWZ0LVNldHVwIHRvIGVudGVyIGl0cworIyBzZXR1cCBtb2RlLiAgU2hpZnQtcyBzaG91bGQgYmUgYSBjb25maWd1cmF0aW9uIHNhdmUgdG8gTlZSQU0uCisKK3F2dDEwMXxxdnQxMDh8cXVtZSBxdnQgMTAxIGFuZCBRVlQgMTA4LAorCXhtYyMxLCB1c2U9cXZ0MTAxKywKKworIyBUaGlzIHVzZWQgdG8gaGF2ZSA8Y3Z2aXM9XEUuMj4gYnV0IG5vIDxjbm9ybT4gb3IgPGNpdmlzPi4gIFRoZSBCU0QgdGVybWNhcAorIyBmaWxlIGhhZCA8Y3Z2aXM9XEVNNCBcMjAwXDIwMFwyMDA+LiAgSSd2ZSBkb25lIHRoZSBzYWZlIHRoaW5nIGFuZCB5YW5rZWQKKyMgYm90aC4gVGhlIDxyZXY+IGlzIGZyb20gQlNELCB3aGljaCBhbHNvIGNsYWltZWQgYm9sZD1cRSggYW5kIGRpbT1cRSkuCisjIFdoYXQgc2VlbXMgdG8gYmUgZ29pbmcgb24gaGVyZSBpcyB0aGF0IHRoaXMgZW50cnkgd2FzIGRlc2lnbmVkIHNvIHRoYXQKKyMgdGhlIG5vcm1hbCBoaWdobGlnaHQgaXMgYm9sZCBhbmQgc3RhbmRvdXQgaXMgZGltIHBsdXMgc29tZXRoaW5nIGVsc2UKKyMgKHJldmVyc2UtdmlkZW8gbWF5YmU/ICBCdXQgdGhlbiwgYXJlIHRoZXJlIHR3byA8cmV2PiBzZXF1ZW5jZXM/KQorcXZ0MTAxK3xxdnQxMDFwfHF1bWUgcXZ0IDEwMSBQTFVTIHByb2R1Y3QsCisJYW0sIGJ3LCBocywgdWwsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XlosIGNub3JtPVxFLjQsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVcsIGRsMT1cRVIsIGRzbD1cRWdcRWZcciwgZWQ9XEVZLCBlbD1cRVQsCisJZmxhc2g9XEViJDwyMDA+XEVkLCBmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLAorCWljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosIGludmlzQCwga2JzPV5ILCBrY2J0PVxFSSwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RsMT1cRVIsIGtlZD1cRVksIGtlbD1cRVQsCisJa2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLAorCWtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLAorCWtob21lPV5eLCBraWNoMT1cRVEsIGtpbDE9XEVFLCBtYzQ9XEVBLCBtYzU9XEVALCBybXNvPVxFKCwKKwlzbXNvPVxFMFBcRSksIHRiYz1cRTMsIHRzbD1cRWdcRWYsIHVzZT1hZG0rc2dyLAorcXZ0MTAyfHF1bWUgcXZ0IDEwMiwKKwljbm9ybT1cRS4sIHVzZT1xdnQxMDEsCisjIChxdnQxMDM6IGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gaW5pdCBzdHJpbmcgLS0gZXNyKQorcXZ0MTAzfHF1bWUgcXZ0IDEwMywKKwlhbSwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbMkokPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EkPDI+LCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLAorCWtjdXUxPVxFT0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCByYz1cRTgsCisJcmV2PVxFWzdtJDwyPiwgcmk9XEVNJDw1Piwgcm1hbT1cRVs/N2wsIHJta3g9XEVbPzFsXEU+LAorCXJtc289XEVbbSQ8Mj4sIHJtdWw9XEVbbSQ8Mj4sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7bSQ8Mj4sCisJc2dyMD1cRVttJDwyPiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20kPDI+LCBzbXVsPVxFWzRtJDwyPiwgdGJjPVxFWzNnLAorcXZ0MTAzLXd8cXVtZSBxdnQxMDMgMTMyIGNvbHMsCisJY29scyMxMzIsIGxpbmVzIzI0LAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/OGgsIHVzZT1xdnQxMDMsCitxdnQxMTkrfHF2dDExOXB8cXZ0MTE5fHF1bWUgcXZ0IDExOSBhbmQgMTE5UExVUyB0ZXJtaW5hbHMsCisJYW0sIGhzLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XEUqMSwgY25vcm09XEUuNCwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPV5LLCBjdnZpcz1cRS4yLCBkY2gxPVxFVywgZGwxPVxFUiwgZHNsPVxFZ1xFZlxyLCBlZD1cRXksCisJZWw9XEV0LCBmbGFzaD1cRW4wJDwyMDA+XEVuMSwgZnNsPV5NLCBob21lPV5eLCBodD1eSSwKKwlodHM9XEUxLCBpbDE9XEVFLCBpbmQ9XkosIGlzMj1cRURGXEVDXEVHMFxFclxFKFxFJUVYLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMD1eQUlcciwKKwlrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwKKwlrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLAorCW1jND1cRUEsIG1jNT1cRUAsIHJpPVxFSiwgcm1pcj1cRXIsIHNtaXI9XEVxLCBzbXVsPVxFRzgsCisJdGJjPVxFMywgdHNsPVxFZ1xFZiwgdXNlPWFkbStzZ3IsCitxdnQxMTkrLTI1fHF2dDExOXAtMjV8UVZUIDExOSBQTFVTIHdpdGggMjUgZGF0YSBsaW5lcywKKwlsaW5lcyMyNSwgdXNlPXF2dDExOSssCitxdnQxMTkrLXd8cXZ0MTE5cC13fHF2dDExOS13fFFWVCAxMTkgYW5kIDExOSBQTFVTIGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwKKwlpczI9XEVERlxFQ1xFRzBcRXJcRShcRSVcRVhcRW40LCB1c2U9cXZ0MTE5KywKK3F2dDExOSstMjUtd3xxdnQxMTlwLTI1LXd8cXZ0MTE5LTI1LXd8UVZUIDExOSBhbmQgMTE5IFBMVVMgMTMyIGJ5IDI1LAorCWxpbmVzIzI1LCB1c2U9cXZ0MTE5KywKK3F2dDIwM3xxdnQyMDMrfHF1bWUgcXZ0IDIwMyBQbHVzLAorCWRjaDE9XEVbUCQ8Nz4sIGRsMT1cRVtNJDw5OT4sIGlsMT1cRVtMJDw5OT4sIGluZD1cbiQ8MzA+LAorCWlwPSQ8Nz4sIGtmMD1cRVsyOX4sIGtmMT1cRVsxN34sIGtmMj1cRVsxOH4sIGtmMz1cRVsxOX4sCisJa2Y0PVxFWzIwfiwga2Y1PVxFWzIxfiwga2Y2PVxFWzIzfiwga2Y3PVxFWzI0fiwga2Y4PVxFWzI1fiwKKwlrZjk9XEVbMjh+LCBybWlyPVxFWzRsLCBzbWlyPVxFWzRoLCB1c2U9cXZ0MTAzLAorcXZ0MjAzLXd8cXZ0MjAzLXctYW18cXVtZSBxdnQgMjAzIFBMVVMgaW4gMTMyIGNvbHMgKHcvYWR2YW5jZWQgdmlkZW8pLAorCWNvbHMjMTMyLCBsaW5lcyMyNCwKKwlyczI9XEU+XEVbPzNoXEVbPzRsXEVbPzVsXEVbPzhoLCB1c2U9cXZ0MjAzLAorIworIwlTaW5jZSBhIGNvbW1hbmQgaXMgcHJlc2VudCBmb3IgZW5hYmxpbmcgMjUgZGF0YSBsaW5lcywKKyMJYSBzcGVjaWZpYyB0ZXJtaW5mbyBlbnRyeSBtYXkgYmUgZ2VuZXJhdGVkIGZvciB0aGUgMjAzLgorIwlJZiBvbmUgaXMgZGVzaXJlZCBmb3IgdGhlIFFWVCAxMTkgUExVUyB0aGVuIDI1IGxpbmVzIG11c3QKKyMJYmUgc2VsZWN0ZWQgaW4gdGhlIHN0YXR1cyBsaW5lIChzZXR1cCBsaW5lIDkpLgorIworcXZ0MjAzLTI1fFFWVCAyMDMgUExVUyB3aXRoIDI1IGJ5IDgwIGNvbHVtbiBtb2RlLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWlzMj1cRVs9NDBoXEVbPzNsLCB1c2U9cXZ0MjAzLAorcXZ0MjAzLTI1LXd8UVZUIDIwMyBQTFVTIHdpdGggMjUgYnkgMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIGxpbmVzIzI1LAorCXJzMj1cRVs/M2hcRVs9NDBoLCB1c2U9cXZ0MjAzLAorCisjIyMjIFRlbGV2aWRlbyAodHZpKQorIworIwlUZWxlVmlkZW8KKyMJNTUwIEVhc3QgQnJva2F3IFJvYWQKKyMJUE8gQm94IDQ5MDQ4ICAgIDk1MTYxCisjCVNhbiBKb3NlIENBIDk1MTEyCisjCVZveDogKDQwOCktOTU0LTgzMzMKKyMJRmF4OiAoNDA4KS05NTQtMDYyMworIworIworIyBUaGVzZSByZXF1aXJlIGluY3JlZGlibGUgYW1vdW50cyBvZiBwYWRkaW5nLgorIworIyBBbGwgb2YgdGhlc2UgdGVybWluYWxzICg5MTIgdG8gOTcwIGFuZCB0aGUgdHZpcHQpIGFyZSBkaXNjb250aW51ZWQuICBOZXdlcgorIyBUZWxldmlkZW8gdGVybWluYWxzIGFyZSBBTlNJIGFuZCBQQy1BTlNJIGNvbXBhdGlibGUuCisKK3R2aTgwM3x0ZWxldmlkZW8gODAzLAorCWNsZWFyPVxFKiQ8MTA+LCB1c2U9dHZpOTUwLAorCisjIFZhbmlsbGEgdHZpOTEwIC0tIFcuIEdpc2ggPGNzd2FycmVuQHZpb2xldD4gMTAvMjkvODYKKyMgU3dpdGNoIHNldHRpbmdzIGFyZToKKyMKKyMgUzEgIDEgMiAzIDQKKyMgICAgIEQgRCBEIEQgIDk2MDAKKyMgICAgIEQgRCBEIFUgICAgNTAKKyMgICAgIEQgRCBVIEQgICAgNzUKKyMgICAgIEQgRCBVIFUgICAxMTAKKyMgICAgIEQgVSBEIEQgICAxMzUKKyMgICAgIEQgVSBEIFUgICAxNTAKKyMgICAgIEQgVSBVIEQgICAzMDAKKyMgICAgIEQgVSBVIFUgICA2MDAKKyMgICAgIFUgRCBEIEQgIDEyMDAKKyMgICAgIFUgRCBEIFUgIDE4MDAKKyMgICAgIFUgRCBVIEQgIDI0MDAKKyMgICAgIFUgRCBVIFUgIDM2MDAKKyMgICAgIFUgVSBEIEQgIDQ4MDAKKyMgICAgIFUgVSBEIFUgIDcyMDAKKyMgICAgIFUgVSBVIEQgIDk2MDAKKyMgICAgIFUgVSBVIFUgMTkyMDAKKyMKKyMgUzEgIDUgNiA3IDgKKyMgICAgIFUgRCBYIEQgIDdOMSAoZGF0YSBiaXRzLCBwYXJpdHksIHN0b3AgYml0cykgKFggbWVhbnMgaWdub3JlZCkKKyMgICAgIFUgRCBYIFUgIDdOMgorIyAgICAgVSBVIEQgRCAgN08xCisjICAgICBVIFUgRCBVICA3TzIKKyMgICAgIFUgVSBVIEQgIDdFMQorIyAgICAgVSBVIFUgVSAgN0UyCisjICAgICBEIEQgWCBEICA4TjEKKyMgICAgIEQgRCBYIFUgIDhOMgorIyAgICAgRCBVIEQgRCAgOE8xCisjICAgICBEIFUgVSBVICA4RTIKKyMKKyMgUzEgIDkgIEF1dG93cmFwCisjICAgICBVICBvbgorIyAgICAgRCAgb2ZmCisjCisjIFMxIDEwICBDUi9MRgorIyAgICAgVSAgZG8gQ1IvTEYgd2hlbiBDUiByZWNlaXZlZAorIyAgICAgRCAgZG8gQ1Igd2hlbiBDUiByZWNlaXZlZAorIworIyBTMiAgMSAgTW9kZQorIyAgICAgVSAgYmxvY2sKKyMgICAgIEQgIGNvbnZlcnNhdGlvbmFsCisjCisjIFMyICAyICBEdXBsZXgKKyMgICAgIFUgIGhhbGYKKyMgICAgIEQgIGZ1bGwKKyMKKyMgUzIgIDMgIEhlcnR6CisjICAgICBVICA1MAorIyAgICAgRCAgNjAKKyMKKyMgUzIgIDQgIEVkaXQgbW9kZQorIyAgICAgVSAgbG9jYWwKKyMgICAgIEQgIGR1cGxleAorIworIyBTMiAgNSAgQ3Vyc29yIHR5cGUKKyMgICAgIFUgIHVuZGVybGluZQorIyAgICAgRCAgYmxvY2sKKyMKKyMgUzIgIDYgIEN1cnNvciBkb3duIGtleQorIyAgICAgVSAgc2VuZCBeSgorIyAgICAgRCAgc2VuZCBeVgorIworIyBTMiAgNyAgU2NyZWVuIGNvbG91cgorIyAgICAgVSAgZ3JlZW4gb24gYmxhY2sKKyMgICAgIEQgIGJsYWNrIG9uIGdyZWVuCisjCisjIFMyICA4ICBEU1Igc3RhdHVzIChwaW4gNikKKyMgICAgIFUgIGRpc2Nvbm5lY3RlZAorIyAgICAgRCAgY29ubmVjdGVkCisjCisjIFMyICA5ICBEQ0Qgc3RhdHVzIChwaW4gOCkKKyMgICAgIFUgIGRpc2Nvbm5lY3RlZAorIyAgICAgRCAgZHVwbGV4CisjCisjIFMyIDEwICBEVFIgc3RhdHVzIChwaW4gMjApCisjICAgICBVICBkaXNjb25uZWN0ZWQKKyMgICAgIEQgIGR1cGxleAorIyAodHZpOTEwOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XktrXkxsXlJeTDoiOyBhZGRlZCA8a2hvbWU+LCA8Y3ViMT4sIDxjdWQxPiwKKyMgPGluZD4sIDxocGE+LCA8dnBhPiwgPGFtPiwgPG1zZ3I+IGZyb20gU0NPIGVudHJ5IC0tIGVzcikKK3R2aTkxMHx0ZWxldmlkZW8gbW9kZWwgOTEwLAorCU9UYnMsIGFtLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGNidD1cRUksIGNsZWFyPV5aLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBlZD1cRVksIGVsPVxFVCwKKwlob21lPVxFPVwwMDFcMDAxLCBocGE9XEVdJXAxJXszMn0lKyVjLCBodD1eSSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGluZD1eSiwgaW52aXNALCBrYnM9XkgsCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMD1eQUlcciwga2YxPV5BQFxyLAorCWtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLAorCWtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLAorCXZwYT1cRVslcDElezMyfSUrJWMsIHVzZT1hZG0rc2dyLAorIyBGcm9tOiBBbGFuIFIuIFJvZ2VycyA8cm9nZXJzJWFsYmFueUBjc25ldC1yZWxheT4KKyMgYXMgc3Vic2VxdWVudGx5IGhhY2tlZCBvdmVyIGJ5IHNvbWVvbmUgYXQgU0NPCisjICh0dmk5MTArOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkteUF5MIDoiIC0tIGVzcikKKyMKKyMgSGVyZSBhcmUgdGhlIDkxMCsncyBESVAgc3dpdGNoZXMgKFUgPSB1cCwgRCA9IGRvd24sIFggPSBkb24ndCBjYXJlKToKKyMKKyMgUzEgIDEgMiAzIDQ6CisjICAgICBEIEQgRCBEICA5NjAwICAgICBEIEQgRCBVICAgIDUwICAgICBEIEQgVSBEICAgIDc1ICAgICBEIEQgVSBVICAgMTEwCisjICAgICBEIFUgRCBEICAgMTM1ICAgICBEIFUgRCBVICAgMTUwICAgICBEIFUgVSBEICAgMzAwICAgICBEIFUgVSBVICAgNjAwCisjICAgICBVIEQgRCBEICAxMjAwICAgICBVIEQgRCBVICAxODAwICAgICBVIEQgVSBEICAyNDAwICAgICBVIEQgVSBVICAzNjAwCisjICAgICBVIFUgRCBEICA0ODAwICAgICBVIFUgRCBVICA3MjAwICAgICBVIFUgVSBEICA5NjAwICAgICBVIFUgVSBVIDE5MjAwCisjCisjIFMxICA1IDYgNyA4OgorIyAgICAgVSBEIFggRCAgN04xICAgICBVIEQgWCBVICA3TjIgICAgIFUgVSBEIEQgIDdPMSAgICAgVSBVIEQgVSAgN08yCisjICAgICBVIFUgVSBEICA3RTEgICAgIFUgVSBVIFUgIDdFMiAgICAgRCBEIFggRCAgOE4xICAgICBEIEQgWCBVICA4TjIKKyMgICAgIEQgVSBEIEQgIDhPMSAgICAgRCBVIFUgVSAgOEUyCisjCisjIFMxICA5ICBBdXRvd3JhcCAgICAgICAgICAgIChVID0gb24sIEQgPSBvZmYpCisjIFMxIDEwICBDUi9MRiAgICAgICAgICAgICAgIChVID0gQ1IvTEYgb24gQ1IgcmVjZWl2ZWQsIEQgPSBDUiBvbiBDUiByZWNlaXZlZCkKKyMgUzIgIDEgIE1vZGUgICAgICAgICAgICAgICAgKFUgPSBibG9jaywgRCA9IGNvbnZlcnNhdGlvbmFsKQorIyBTMiAgMiAgRHVwbGV4ICAgICAgICAgICAgICAoVSA9ICBoYWxmLCBEID0gZnVsbCkKKyMgUzIgIDMgIEhlcnR6ICAgICAgICAgICAgICAgKFUgPSA1MCwgRCA9IDYwKQorIyBTMiAgNCAgRWRpdCBtb2RlICAgICAgICAgICAoVSA9IGxvY2FsLCBEID0gZHVwbGV4KQorIyBTMiAgNSAgQ3Vyc29yIHR5cGUgICAgICAgICAoVSA9IHVuZGVybGluZSwgRCA9IGJsb2NrKQorIyBTMiAgNiAgQ3Vyc29yIGRvd24ga2V5ICAgICAoVSA9IHNlbmQgXkosIEQgPSBzZW5kIF5WKQorIyBTMiAgNyAgU2NyZWVuIGNvbG91ciAgICAgICAoVSA9IGdyZWVuIG9uIGJsYWNrLCBEID0gYmxhY2sgb24gZ3JlZW4pCisjIFMyICA4ICBEU1Igc3RhdHVzIChwaW4gNikgIChVID0gZGlzY29ubmVjdGVkLCBEID0gY29ubmVjdGVkKQorIyBTMiAgOSAgRENEIHN0YXR1cyAocGluIDgpICAoVSA9IGRpc2Nvbm5lY3RlZCwgRCA9IGNvbm5lY3RlZCkKKyMgUzIgMTAgIERUUiBzdGF0dXMgKHBpbiAyMCkgKFUgPSBkaXNjb25uZWN0ZWQsIEQgPSBjb25uZWN0ZWQpCisjCit0dmk5MTArfHRlbGV2aWRlbyA5MTArLAorCWRjaDE9XEVXLCBkbDE9XEVSJDwzMyo+LCBob21lPV5eLCBpY2gxPVxFUSwgaWwxPVxFRSQ8MzMqPiwKKwlrZjA9XkFAXHIsIGtmMT1eQUFcciwga2YyPV5BQlxyLCBrZjM9XkFDXHIsIGtmND1eQURcciwKKwlrZjU9XkFFXHIsIGtmNj1eQUZcciwga2Y3PV5BR1xyLCBrZjg9XkFIXHIsIGtmOT1eQUlcciwKKwlsbD1cRT03XHMsIHVzZT10dmk5MTAsCisKKyMgKHR2aTkxMjogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5LXlBeTCA6IiwgYWRkZWQgIDxmbGFzaD4gYW5kCisjIDxraG9tZT4gZnJvbSBCUkwgZW50cnkgLS0gZXNyKQordHZpOTEyfHR2aTkxNHx0dmk5MjB8b2xkIHRlbGV2aWRlbyA5MTIvOTE0LzkyMCwKKwlPVGJzLCBPVHB0LCBhbSwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgeG1jIzEsCisJYmVsPV5HLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiQ8MzMqPiwgZWQ9XEV5LCBlbD1cRVQsIGZsYXNoPVxFYiQ8NTAvPlxFZCwgaG9tZT1eXiwKKwlodD1eSSwgaHRzPVxFMSwgaWNoMT1cRVEsIGlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwKKwlpbDE9XEVFJDwzMyo+LCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywga2YwPV5BSVxyLCBrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLAorCWtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLAorCWtmOT1eQUhcciwga2hvbWU9Xl4sIHJtc289XEVrLCBybXVsPVxFbSwgc21zbz1cRWosIHNtdWw9XEVsLAorCXRiYz1cRTMsCisjIFdlIGdvdCBzb21lIG5ldyB0dmk5MTJjIHRlcm1pbmFscyB0aGF0IGFjdCByZWFsbHkgd2VpcmQgb24gdGhlIHJlZ3VsYXIKKyMgdGVybWNhcCwgc28gb25lIG9mIG91ciBndXJ1cyB3b3JrZWQgdGhpcyB1cC4gU2VlbXMgdGhhdCBjdXJzb3IKKyMgYWRkcmVzc2luZyBpcyBicm9rZW4uCit0dmk5MTJjY3x0dmk5MTIgYXQgY293ZWxsIGNvbGxlZ2UsCisJY3VwQCwgdXNlPXR2aTkxMmMsCisKKyMgdHZpezkxMiw5MjB9W2JjXSAtIFRlbGVWaWRlbyBUVkktOTEyQi9UVkktOTIwQiBhbmQgVFZJLTkxMkMvVFZJLTkyMEMKKyMgRnJvbTogQmVuamFtaW4gQy4gVy4gU2l0dGxlcgorIworIyBTb21lb25lIGhhcyBwdXQgYSBzY2FubmVkIGNvcHkgb2YgdGhlIG1hbnVhbCBvbmxpbmUgYXQ6CisjICAgICBodHRwOi8vdnQxMDAubmV0L3RlbGV2aWRlby85MTJiLW9tLworIworIyBUaGVzZSB0ZXJtaW5hbHMgd2VyZSBwcm9kdWNlZCBjYS4gMTk3OSwgYW5kIGhhZCBhIDEyIiBtb25vY2hyb21lCisjIHNjcmVlbiwgc3VwcG9ydGVkIDc1LTk2MDAgYmF1ZCAobm8gaGFuZHNoYWtpbmcpLCBtb25vY2hyb21lLCA3LWJpdAorIyBBU0NJSSwgYW5kIHdlcmUgZ2VuZXJhbGx5IHNpbWlsYXIgdG8gYWRtM2EgYnV0IHdpdGggYXR0cmlidXRlcworIyAoaW5jbHVkaW5nIHNvbWUgd2l0aCBtYWdpYyBjb29raWVzKSwgZmFuY3kgaGFsZi1kdXBsZXggbW9kZSwgYW5kCisjIGRpZmZlcmVudCBidWdzLgorIworIyBTb21lIG9wZXJhdGlvbnMgcmVxaXJlIHRydWx5IGluY3JlZGlibGUgYW1vdW50cyBvZiBwYWRkaW5nLiBUaGUKKyMgaW5zZXJ0X2xpbmUgKDxpbDE+KSBhbmQgZGVsZXRlX2xpbmUgKDxkbDE+KSBvcGVyYXRpb25zIGluIHBhcnRpY3VsYXIKKyMgYXJlIHNvIHNsb3cgYXMgdG8gYmUgbmVhcmx5IHVudXNhYmxlLgorIworIyBUaGVyZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gYSBzZXBhcmF0ZSwgZWFybGllciBzZXJpZXMgb2YgOTEyLzkyMAorIyB0ZXJtaW5hbHMgKHdpdGhvdXQgdGhlICJCIiBhbmQgIkMiIHN1ZmZpeCk7IEkgaGF2ZSBuZXZlciBzZWVuIG9uZSwKKyMgYW5kIHRoZSBtYW51YWwgb25seSBkZXNjcmliZXMgdGhlICJCIiBhbmQgIkMiIHNlcmllcy4gVGhlIDkxMiBhbmQgOTIwCisjIGFyZSBxdWl0ZSBkaXN0aW5jdCBmcm9tIHRoZSA5MTQgYW5kIDkyNCwgd2hpY2ggd2VyZSBtdWNoIG5pY2VyIG5vbi0KKyMgbWFnaWMtY29va2llIHRlcm1pbmFscyBzaW1pbGFyIHRvIHRoZSA5NTAuCisjCisjIFRoaXMgaXMgYSBuZXcgZGVzY3JpcHRpb24gZm9yIHRoZSBmb2xsb3dpbmcgVGVsZVZpZGVvIHRlcm1pbmFscywKKyMgZGlzdGluZ3Vpc2hlZCBjaGllZmx5IGJ5IHRoZWlyIGtleWJvYXJkczoKKyMKKyMgICBUVkktOTEyQiAtIHZlcnkgb2RkIGxheW91dCwgbm8gZnVuY3Rpb24ga2V5cyAoODQga2V5cykKKyMgICBUVkktOTIwQiAtIHR5cGV3cml0ZXIgbGF5b3V0LCBubyBmdW5jdGlvbiBrZXlzICgxMDMga2V5cykKKyMgICBUVkktOTEyQyAtIHZlcnkgb2RkIGxheW91dCwgZnVuY3Rpb24ga2V5cyBGMS1GMTEgKDgyIGtleXMpCisjICAgVFZJLTkyMEMgLSB0eXBld3JpdGVyIGxheW91dCwgZnVuY3Rpb24ga2V5cyBGMS1GMTEgKDEwMSBrZXlzKQorIworIyBUbyBjaG9vc2UgYSBzZXR0aW5nIGZvciB0aGUgVEVSTSB2YXJpYWJsZSwgc3RhcnQgd2l0aCB0aGUgbW9kZWw6CisjCisjICAgIE1vZGVsICB8fCBiYXNlIG5hbWUKKyMgLS0tLS0tLS0tLXx8LS0tLS0tLS0tLS0KKyMgIFRWSS05MTJCIHx8IHR2aTkxMmIKKyMgIFRWSS05MTJDIHx8IHR2aTkxMmMKKyMgIFRWSS05MjBCIHx8IHR2aTkyMGIKKyMgIFRWSS05MjBDIHx8IHR2aTkyMGMKKyMKKyMgVGhlbiBhZGQgYSBzdWZmaXggZnJvbSB0aGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJpbmcgaW5zdGFsbGVkIG9wdGlvbnMKKyMgYW5kIGhvdyB5b3UnZCBsaWtlIHRvIHVzZSB0aGUgdGVybWluYWw6CisjCisjICAgVXNlIFZpZGVvIHwgU2Vjb25kIHwgVmlzdWFsIHwgIE1hZ2ljICB8ICBQYWdlIHx8IGZlYXR1cmUKKyMgIEF0dHJpYnV0ZXMgfCAgUGFnZSAgfCAgQmVsbCAgfCBDb29raWVzIHwgUHJpbnQgfHwgc3VmZml4CisjIC0tLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLXx8LS0tLS0tLS0tCisjICAgICAgTm8gICAgIHwgICBObyAgIHwgIE4vQSAgIHwgICBOL0EgICB8ICAgTm8gIHx8IC11bmsKKyMgICAgICBObyAgICAgfCAgIE5vICAgfCAgTi9BICAgfCAgIE4vQSAgIHwgIFllcyAgfHwgLXAKKyMgICAgICBObyAgICAgfCAgWWVzICAgfCAgIE5vICAgfCAgIE4vQSAgIHwgICBObyAgfHwgLTJwLXVuaworIyAgICAgIE5vICAgICB8ICBZZXMgICB8ICAgTm8gICB8ICAgTi9BICAgfCAgWWVzICB8fCAtMnAtcAorIyAgICAgIE5vICAgICB8ICBZZXMgICB8ICBZZXMgICB8ICAgTi9BICAgfCAgIE5vICB8fCAtdmItdW5rCisjICAgICAgTm8gICAgIHwgIFllcyAgIHwgIFllcyAgIHwgICBOL0EgICB8ICBZZXMgIHx8IC12Yi1wCisjICAgICBZZXMgICAgIHwgICBObyAgIHwgIE4vQSAgIHwgICAgTm8gICB8ICBOL0EgIHx8CisjICAgICBZZXMgICAgIHwgICBObyAgIHwgIE4vQSAgIHwgICBZZXMgICB8ICBOL0EgIHx8IC1tYworIyAgICAgWWVzICAgICB8ICBZZXMgICB8ICAgTm8gICB8ICAgIE5vICAgfCAgTi9BICB8fCAtMnAKKyMgICAgIFllcyAgICAgfCAgWWVzICAgfCAgIE5vICAgfCAgIFllcyAgIHwgIE4vQSAgfHwgLTJwLW1jCisjICAgICBZZXMgICAgIHwgIFllcyAgIHwgIFllcyAgIHwgICAgTm8gICB8ICBOL0EgIHx8IC12YgorIyAgICAgWWVzICAgICB8ICBZZXMgICB8ICBZZXMgICB8ICAgWWVzICAgfCAgTi9BICB8fCAtdmItbWMKKyMKKyMgU28gZS5nLiBhIG1vZGVsIDkyMCBDIHdpdGggc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiwgdmlzdWFsIGJlbGwKKyMgYW5kIG5vIG1hZ2ljIGNvb2tpZXMgd291bGQgYmUgdHZpOTIwYy12YjsgYSBtb2RlbCA5MTIgQiB3aXRob3V0IHRoZQorIyBzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uIGFuZCB1c2luZyBtYWdpYyBjb29raWVzIHdvdWxkIGJlCisjIHR2aTkxMmItbWMKKyMKKyMgUEFERElORworIworIyBBdCA5NjAwIGJhdWQsIHRoZSB0ZXJtaW5hbCBpcyBwcm9uZSB0byBvdmVyZmxvdyBpdHMgaW5wdXQgYnVmZmVyCisjIGR1cmluZyBjb21wbGV4IG9wZXJhdGlvbnMgKGluc2VydC9kZWxldGUKKyMgY2hhcmFjdGVyL2xpbmUvc2NyZWVuL3BhZ2UpLCBhbmQgaXQgZG9lcyBub3Qgc2lnbmFsIHRoaXMgb3ZlciB0aGUKKyMgUlMyMzIgY2FibGUuIFRoZSB0eXBpY2FsIHN5bXB0b20gb2YgYW4gb3ZlcnJ1biBpcyB0aGF0IHRoZSB0ZXJtaW5hbAorIyBzdGFydHMgYmVlcGluZywgYW5kIG91dHB1dCBiZWNvbWVzIGdhcmJsZWQuCisjCisjIFRoZSBwYWRkaW5nIGRlbGF5cyBpbiB0aGlzIHRlcm1pbmZvIHdlcmUgZGVyaXZlZCB1c2luZyB0YWNrKDEpCisjIHJ1bm5pbmcgb24gYSBMaW51eCBib3ggY29ubmVjdGVkIHRvIGEgVFZJLTkyMEMgd2l0aCBhIGxhdGVyLW1vZGVsCisjIChBNDlDMS1zdHlsZSkgUk9NIHJ1bm5pbmcgYXQgOTYwMCBiYXVkLCBzbyB5b3VyIG1pbGVhZ2UgbWF5CisjIHZhcnkuIFRoZSBudW1iZXJzIGJlbG93IHNlZW0gdG8gZ2l2ZSB0aGUgdGVybWluYWwgZW5vdWdoIHRpbWUgc28KKyMgdGhhdCBpdCBkb2Vzbid0IG92ZXJmbG93IGl0cyBpbnB1dCBidWZmZXIgYW5kIHN0YXJ0IGxvc2luZworIyBjaGFyYWN0ZXJzLgorIworIyBLRVlTCisjCisjIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlVOQ1Qga2V5IG9uIGEgdHZpOTEyW2JjXSwgdXNlIHRoZQorIyBjb3JyZXNwb25kaW5nIHR2aTkyMFtiY10gdGVybWluZm8gd2l0aCBGVU5DVCArIC4uLiBlcXVpdmFsZW50cyBmcm9tCisjIHRoZSBmb2xsb3dpbmcgdGFibGUgKHRoZXNlIGFsc28gd29yayBvbiB0aGUgOTIwIHNlcmllcyk6CisjCisjIFVuc2hpZnRlZCBGdW5jdGlvbiBLZXlzOgorIworIyAgS2V5IHwgY2FwbmFtZXx8IEVxdWl2YWxlbnQKKyMgLS0tLS18LS0tLS0tLS18fC0tLS0tLS0tLS0tLQorIyAgIEYxIHwgIDxrZjE+IHx8IEZVTkNUICsgQAorIyAgIEYyIHwgIDxrZjI+IHx8IEZVTkNUICsgQQorIyAgIEYzIHwgIDxrZjM+IHx8IEZVTkNUICsgQgorIyAgIEY0IHwgIDxrZjQ+IHx8IEZVTkNUICsgQworIyAgIEY1IHwgIDxrZjU+IHx8IEZVTkNUICsgRAorIyAgIEY2IHwgIDxrZjY+IHx8IEZVTkNUICsgRQorIyAgIEY3IHwgIDxrZjc+IHx8IEZVTkNUICsgRgorIyAgIEY4IHwgIDxrZjg+IHx8IEZVTkNUICsgRworIyAgIEY5IHwgIDxrZjk+IHx8IEZVTkNUICsgSAorIyAgRjEwIHwgPGtmMTA+IHx8IEZVTkNUICsgSQorIyAgRjExIHwgPGtmMTE+IHx8IEZVTkNUICsgSgorIworIyBTaGlmdGVkIEZ1bmN0aW9uIEtleXM6CisjCisjICBTSElGVCArIEtleSB8IGNhcG5hbWV8fCBFcXVpdmFsZW50CisjIC0tLS0tLS0tLS0tLS18LS0tLS0tLS18fC0tLS0tLS0tLS0tLQorIyAgIFNISUZUICsgRjEgfCA8a2YxMj4gfHwgRlVOQ1QgKyBgCisjICAgU0hJRlQgKyBGMiB8IDxrZjEzPiB8fCBGVU5DVCArIGEKKyMgICBTSElGVCArIEYzIHwgPGtmMTQ+IHx8IEZVTkNUICsgYgorIyAgIFNISUZUICsgRjQgfCA8a2YxNT4gfHwgRlVOQ1QgKyBjCisjICAgU0hJRlQgKyBGNSB8IDxrZjE2PiB8fCBGVU5DVCArIGQKKyMgICBTSElGVCArIEY2IHwgPGtmMTc+IHx8IEZVTkNUICsgZQorIyAgIFNISUZUICsgRjcgfCA8a2YxOD4gfHwgRlVOQ1QgKyBmCisjICAgU0hJRlQgKyBGOCB8IDxrZjE5PiB8fCBGVU5DVCArIGcKKyMgICBTSElGVCArIEY5IHwgPGtmMjA+IHx8IEZVTkNUICsgaAorIyAgU0hJRlQgKyBGMTAgfCA8a2YyMT4gfHwgRlVOQ1QgKyBpCisjICBTSElGVCArIEYxMSB8IDxrZjIyPiB8fCBGVU5DVCArIGoKKyMKKyMgUE9SVFMgQU5EIFNXSVRDSCBTRVRUSU5HUworIworIyBIZXJlIGFyZSB0aGUgc3dpdGNoIHNldHRpbmdzIGZvciB0aGUgVFZJLTkxMkIvVFZJLTkyMEIgYW5kCisjIFRWSS05MTJDL1RWSS05MjBDOgorIworIyBTMSAoTGluZSksIGFuZCBTMyAoUHJpbnRlcikgYmF1ZCByYXRlcyAtLSBwdXQgb25lLCBhbmQgb25seSBvbmUsIHN3aXRjaCBkb3duOgorIyAyOiA5NjAwCTM6IDQ4MDAJCTQ6IDI0MDAJCTU6IDEyMDAKKyMgNjogIDYwMAk3OiAgMzAwCQk4OiAgMTUwCQk5OiAgIDc1CisjIDEwOiAxMTAKKyMKKyMgUzIgVUFSVC9UZXJtaW5hbCBvcHRpb25zOgorIyAJCVVwCQkJRG93bgorIyAxOgkJTm90IHVzZWQJCU5vdCBhbGxvd2VkCisjIDI6CUFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CSAgU3RhbmRhcmQgY2hhcmFjdGVyIHNldAorIyAzOgkgICAgRnVsbCBkdXBsZXgJCSAgICBIYWxmIGR1cGxleAorIyA0OgkgICAgNTAgSHogcmVmcmVzaAkgICAgNjAgSHogcmVmcmVzaAorIyA1OgkgICAgICBObyBwYXJpdHkJCSAgICAgU2VuZCBwYXJpdHkKKyMgNjoJICAgICAyIHN0b3AgYml0cwkgICAgIDEgc3RvcCBiaXQKKyMgNzoJICAgICA4IGRhdGEgYml0cwkgICAgIDcgZGF0YSBiaXRzCisjIDg6CQlOb3QgdXNlZAkJTm90IGFsbG93ZWQgb24gUmV2IEUgb3IgbG93ZXIKKyMgOToJICAgICBFdmVuIHBhcml0eQkgICAgIE9kZCBwYXJpdHkKKyMgMTA6CSAgICBTdGVhZHkgY3Vyc29yCSAgICBCbGlua2luZyBjdXJzb3IKKyMgCShPbiBSZXYgRSBvciBsb3dlciwgdXNlIFcyNSBpbnN0ZWFkIG9mIHN3aXRjaCAxMC4pCisjCisjIFM1IFVBUlQvVGVybWluYWwgb3B0aW9uczoKKyMgCQlPcGVuCQkJQ2xvc2VkCisjIDE6CVAzLTYgTm90IGNvbm5lY3RlZAlEU1IgcmVjZWl2ZWQgb24gUDMtNgorIyAyOglQMy04IE5vdCBjb25uZWN0ZWQJRENEIHJlY2VpdmVkIG9uIFAzLTgKKyMKKyMgMyBPcGVuLCA0IE9wZW46CQlQMy0yMCBOb3QgY29ubmVjdGVkCisjIDMgT3BlbiwgNCBDbG9zZWQ6CURUUiBvbiB3aGVuIHRlcm1pbmFsIGlzIG9uCisjIDMgQ2xvc2VkLCA0IE9wZW46CURUUiBpcyBjb25uZWN0ZWQgdG8gUlRTCisjIDMgQ2xvc2VkLCA0IENsb3NlZDoJTm90IGFsbG93ZWQKKyMKKyMgNSBDbG9zZWQ6CUhEWCBwcmludGVyIChoYXJkd2FyZSBjb250cm9sKSBSZXYuIEsgd2l0aCBleHRlbnNpb24gcG9ydCBvZmYsCisjIAkJYWxsIGRhdGEgdHJhbnNtaXR0ZWQgb3V0IG9mIHRoZSBtb2RlbSBwb3J0IChQMykgd2lsbCBhbHNvIGJlCisjIAkJdHJhbnNtaXR0ZWQgb3V0IG9mIHRoZSBwcmludGVyIHBvcnQgKFA0KS4KKyMKKyMgNiBPcGVuLCA3IE9wZW46CQlOb3QgYWxsb3dlZAorIyA2IE9wZW4sIDcgQ2xvc2VkOgkyMG1hIGN1cnJlbnQgbG9vcCBpbnB1dAorIyA2IENsb3NlZCwgNyBPcGVuOglSUzIzMiBpbnB1dAorIyA2IENsb3NlZCwgNyBDbG9zZWQ6CU5vdCBhbGxvd2VkCisjCisjIEp1bXBlciBvcHRpb25zOgorIyBJZiB0aGUganVtcGVyIGlzIGluc3RhbGxlZCwgdGhlIGVmZmVjdCB3aWxsIG9jY3VyICh0aGUgbmV4dCB0aW1lIHRoZSB0ZXJtaW5hbAorIyBpcyBzd2l0Y2hlZCBvbikuCisjCisjIFM0L1czMToJRW5hYmxlcyBhdXRvbWF0aWMgTEYgdXBvbiByZWNlaXB0IG9mIENSIGZyb20KKyMgCQlyZW1vdGUgb3Iga2V5Ym9hcmQuCisjIFM0L1czMjoJRW5hYmxlcyB0cmFuc21pc3Npb24gb2YgRU9UIGF0IHRoZSBlbmQgb2YgU2VuZC4gIElmIG5vdAorIyAJCWluc3RhbGxlZCwgYSBjYXJyaWFnZSByZXR1cm4gaXMgc2VudC4KKyMgUzQvVzMzOglEaXNhYmxlcyBhdXRvbWF0aWMgY2FycmlhZ2UgcmV0dXJuIGluIGNvbHVtbiA4MC4KKyMgUzQvVzM0OglTZWxlY3RzIFBhZ2UgUHJpbnQgTW9kZSBhcyBpbml0aWFsIGNvbmRpdGlvbi4gIElmIG5vdAorIyAJCWluc3RhbGxlZCwgRXh0ZW5zaW9uIE1vZGUgaXMgc2VsZWN0ZWQuCisjCisjIE5PTi1TVEFOREFSRCBDQVBBQklMSVRJRVMKKyMKKyMgU2VuZGluZyA8dTk+IG9yIDx1Nz4gcmV0dXJucyBhIGN1cnNvciBwb3NpdGlvbiByZXBvcnQgaW4gdGhlIGZvcm1hdAorIyBZWFxyLCB3aGVyZSBZIGFuZCBYIGFyZSBhcyBpbiA8Y3VwPi4gVGhpcyBmb3JtYXQgaXMgZGVzY3JpYmVkIGluCisjIDx1OD4gYW5kIDx1Nj4sIGJ1dCBpdCdzIG5vdCBjbGVhciBob3cgb25lIHNob3VsZCB3cml0ZSBhbgorIyBhcHByb3ByaWF0ZSBzY2FuZiBzdHJpbmcsIHNpbmNlIHdlIG5lZWQgdG8gc3VidHJhY3QgJScgJyBmcm9tIHRoZQorIyBjaGFyYWN0ZXIgYWZ0ZXIgcmVhZGluZyBpdC4gVGhlIDx1OT4gY2FwYWJpbGl0eSBpcyB1c2VkIGJ5IHRhY2soMSkKKyMgdG8gc3luY2hyb25pemUgZHVyaW5nIHBhZGRpbmcgdGVzdHMsIGFuZCBzZWVtcyB0byB3b3JrIGZvciB0aGF0CisjIHB1cnBvc2UuCisjCisjIFRoaXMgZGVzY3JpcHRpb24gYWxzbyBpbmNsdWRlcyB0aGUgb2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMKKyMgaGFzX2hhcmR3YXJlX3RhYnMgKDxPVHB0PikgYW5kIGJhY2tzcGFjZXNfd2l0aF9icyAoPE9UYnM+KS4KKyMKKyMgRkVBVFVSRVMgTk9UIFlFVCBERVNDUklCRUQgSU4gVEhJUyBURVJNSU5GTworIworIyBUaGUgRlVOQ1QgbW9kaWZpZXIgYWN0dWFsbHkgd29ya3Mgd2l0aCBldmVyeSBub3JtYWwga2V5IGJ5IHNlbmRpbmcKKyMgXkFYXHIsIHdoZXJlIFggaXMgdGhlIHNlcXVlbmNlIG5vcm1hbGx5IHNlbnQgYnkgdGhhdCBrZXkuIFRoaXMgaXMgYQorIyBzb3J0IG9mIG1ldGEga2V5IG5vdCBjdXJyZW50bHkgZGVzY3JpYmFibGUgaW4gdGVybWluZm8uCisjCisjIFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBvdGhlciBrZXlzIChlc3BlY2lhbGx5IG9uIHRoZSA5MjAgbW9kZWxzLCkgYnV0CisjIHRoZXkgYXJlIGZvciB0aGUgbW9zdCBwYXJ0IG9ubHkgdXNlZnVsIGluIGJsb2NrIG1vZGUuCisjCisjIFRoZXNlIHRlcm1pbmFscyBoYXZlIGxvdHMgb2YgZm9ybXMgbWFuaXB1bGF0aW9uIGZlYXR1cmVzLCBtYWlubHkKKyMgdXNlZnVsIGluIGJsb2NrIG1vZGUsIGluY2x1ZGluZyAiY2xlYXIgWCB0byBudWxscyIgKHZzLiAiY2xlYXIgWCB0bworIyBzcGFjZXMiOyBudWxscyBhcmUgc2VudGluZWxzIGZvciAic2VuZCBYIiBvcGVyYXRpb25zKTsgInNlbmQgWCIKKyMgb3BlcmF0aW9ucyBmb3IgdXBsb2FkaW5nIGFsbCBvciBwYXJ0IG9mIHRoZSBzY3JlZW47IGFuZCBibG9jay1tb2RlCisjIGVkaXRpbmcga2V5cyAodGhleSBkb24ndCBzZW5kIGVzY2FwZSBzZXF1ZW5jZXMsIGJ1dCBtYW5pcHVsYXRlIHZpZGVvCisjIG1lbW9yeSBkaXJlY3RseSkuIEJsb2NrIG1vZGUgaXMgdXNlZCBmb3IgbG9jYWwgZWRpdGluZywgYW5kIHByb3RlY3QKKyMgbW9kZSAoaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgIndyaXRlIHByb3RlY3QiIGF0dHJpYnV0ZSwKKyMgYS5rLmEuIGhhbGYtaW50ZW5zaXR5IG91dHNpZGUgb2YgcHJvdGVjdCBtb2RlKSBpcyB1c2VkIHRvIGNvbnRyb2wKKyMgd2hpY2ggcGFydHMgb2YgdGhlIHNjcmVlbiBhcmUgZWRpdGVkL3NlbnQvcHJpbnRlZCAoYnkgPG1jMD4pLgorIworIyBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIG1ham9yIGZhbWlsaWVzIG9mIFJPTSwgImVhcmx5IiBhbmQKKyMgQTQ5QjEvQTQ5QzE7IHRoZSBtYWpvciBkaWZmZXJlbmNlIHNlZW1zIHRvIGJlIHRoYXQgdGhlIGxhdHRlciBST01zCisjIHN1cHBvcnQgYSBmZXcgZXh0cmEgZXNjYXBlIHNlcXVlbmNlcyBmb3IgbWFuaXB1bGF0aW5nIHRoZSBvZmYtc2NyZWVuCisjIG1lbW9yeSBwYWdlLCBhbmQgZm9yIHNlbmRpbmcgd2hvbGUgcGFnZXMgYmFjayB0byB0aGUgaG9zdCAobWFpbmx5CisjIHVzZWZ1bCBpbiBibG9jayBtb2RlLikgVGhlIGRlc2NyaXB0aW9ucyBpbiB0aGlzIGZpbGUgZG9uJ3QgdXNlIGFueQorIyBvZiB0aG9zZSBzZXF1ZW5jZXM6IHNldCBjdXJzb3IgcG9zaXRpb24gaW5jbHVkaW5nIHBhZ2UgKFxFLVBZWCwKKyMgd2hlcmUgUCBpcyBccyBmb3IgcGFnZSAwIGFuZCAhIGZvciBwYWdlIDEgW2FjdHVhbGx5IG9ubHkgdGhlIExTQiBvZgorIyBQIGlzIHRha2VuIGludG8gYWNjb3VudCwgc28gZS5nLiAwIGFuZCAxIHdvcmsgdG9vLF0gYW5kIFkgYW5kIFggYXJlCisjIGFzIGluIDxjdXA+KTsgcmVhZCBjdXJzb3IgcG9zaXRpb24gKFxFLyksIHdoaWNoIGlzIGFuYWxvZ291cyB0byA8dTk+CisjIGFuZCByZXR1cm5zIFBZWFxyLCB3aGVyZSBQIGlzIFxzIGZvciBwYWdlIDAgb3IgISBmb3IgcGFnZSAxLCBhbmQgWVgKKyMgYXJlIGFzIGluIDxjdXA+LCBhbmQgc29tZSAic2VuZCBwYWdlIiBmZWF0dXJlcyBtYWlubHkgdXNlZnVsIGZvcgorIyBmb3JtcyBtYW5pcHVsYXRpb24uCisjCisjIFRoZSBrZXlib2FyZCBlbmFibGUgKFxFIikgYW5kIGRpc2FibGUgKFxFIykgc2VxdWVuY2VzIGFyZSB1bnVzZWQsCisjIGV4Y2VwdCB0aGF0IGEgdGVybWluYWwgcmVzZXQgKDxpczI+KSBlbmFibGVzIHRoZSBrZXlib2FyZC4KKyMKKyMgQXV0by1mbGlwIG1vZGUgKFxFdikgaXMgbGlrZWx5IGZhc3RlciB0aGFuIHRoZSBzY3JvbGxpbmcgbW9kZSAoXEV3KQorIyBlbmFibGVkIGluIDxpczI+LCBidXQgYXV0by1mbGlwIGlzIHZlcnkgamFycmluZyBzbyB3ZSBkb24ndCB1c2UgaXQuCisjCisjIEJVR1MKKyMKKyMgQXQgbGVhc3QgdXAgdG8gdGhlIEE0OUIxIGFuZCBBNDlDMSBST01zLCB0aGVyZSBhcmUgbm8gXEViIGFuZCBcRWQKKyMgc2VxdWVuY2VzIChJIGluZmVyIHRoYXQgaW4gc29tZSBUZWxlVmlkZW8gdGVybWluYWwgdGhleSBtYXkgaW52ZXJ0CisjIGFuZCB1bmludmVydCB0aGUgZGlzcGxheSkgc28gdGhlIDxmbGFzaD4gc2VxdWVuY2UgZ2l2ZW4gaGVyZSBpcyBhCisjIGNoZWVzeSBwYWdlLWZsaXAgaW5zdGVhZC4KKyMKKyMgVGhlIGJhY2tfdGFiICg8Y2J0Pikgc2VxdWVuY2UgKFxFSSkgZG9lc24ndCB3b3JrIGFjY29yZGluZyB0bworIyB0YWNrKDEpLCBzbyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdy4KKyMKKyMgSXQncyBub3QgY2xlYXIgd2hldGhlciBhdXRvX2xlZnRfbWFyZ2luICg8Ync+KSBmbGFnIHNob3VsZCBiZSBzZXQKKyMgZm9yIHRoZXNlIHRlcm1pbmFsczsgdGFjayBzYXlzIHllcywgc28gaXQgaXMgc2V0IGhlcmUsIGJ1dCB0aGlzCisjIGRpZmZlcnMgZnJvbSBvdGhlciBkZXNjcmlwdGlvbnMgSSd2ZSBzZWVuLgorIworIyBFeHRlbnNpb24gcHJpbnQgbW9kZSAoPG1jNT4pIGVjaG9lcyBhbGwgY2hhcmFjdGVycyB0byB0aGUgcHJpbnRlcgorIyBwb3J0IFtpbiBhZGRpdGlvbiB0byBkaXNwbGF5aW5nIHRoZW1dIGV4Y2VwdCBmb3IgdGhlIHBhZ2UgcHJpbnQgbW9kZQorIyBzZXF1ZW5jZSAoPG1jND4pOyB0aGlzIGlzIGEgc2xpZ2h0IHZpb2xhdGlvbiBvZiB0aGUgdGVybWluZm8KKyMgZGVmaW5pdGlvbiBmb3IgPG1jNT4gYnV0IEkgZG9uJ3QgZXhwZWN0IGl0IHRvIGNhdXNlIHByb2JsZW1zLiAgV2UKKyMgcmVzZXQgdG8gcGFnZSBwcmludCBtb2RlIGluIDxyczE+IHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gZW5hYmxlZAorIyBhY2NpZGVudGFsbHkuCisjCisjIFRoZSBkZXNjcmlwdGlvbnMgd2l0aCBwbHVzIHNpZ25zICgrKSBhcmUgYnVpbGRpbmcgYmxvY2tzLgorCit0dmk5MTJiLXVua3x0dmk5MTJjLXVua3xUZWxlVmlkZW8gVFZJLTkxMkIgb3IgVFZJLTkxMkMgKG5vIGF0dHJpYnV0ZXMpLAorCU9UYnMsIE9UcHQsIGFtLCBidywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMzIkPDUwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSUnICclKyVjJXAyJScgJyUrJWMsIGN1dTE9XkssIGRjaDE9XEVXJDwzMD4sCisJZGwxPVxFUiQ8MSo+JDwxMDA+LCBlZD1cRXkkPDIqPiQ8MTA+LCBlbD1cRVQkPDE1PiwKKwlob21lPV5eLCBodD1eSSwgaHRzPVxFMSwgaWNoMT1cRVEkPDMwPiwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUUkPDEqPiQ8MTAwPiwKKwlpbmQ9XG4kPDEwPiwgaXMyPVxFd1xFQVxFJ1xFIlxFKCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XDE3Nywga2VudD1eTSwga2hvbWU9Xl4sIG1jND1cRUEsCisJbWM1PVxFQCwgcnMxPVxFa1wwMTBcRW1cMDEwXEVxXDAzMiwgdGJjPVxFMywgdTY9JWMlY1xyLAorCXU3PVxFPywgdTg9JWMlY1xyLCB1OT1cRT8sCisKKyMgVGhpcyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgYmFzaWMgY2FwYWJpbGl0aWVzIGJlY2F1c2UgaXQgaXMKKyMgdHlwaWNhbGx5IHVudXNhYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGZ1bGwgcmFuZ2Ugb2YgdmlkZW8KKyMgYXR0cmlidXRlcywgc2luY2UgdGhlIG1hZ2ljIGNvb2tpZSBhdHRyaWJ1dGVzIHR1cm4gaW50byBBU0NJSQorIyBjb250cm9sIGNoYXJhY3RlcnMsIGFuZCB0aGUgaGFsZi1pbnRlbnNpdHkgKCJwcm90ZWN0ZWQiKSBhdHRyaWJ1dGUKKyMgY29udmVydHMgYWxsIGFmZmVjdGVkIGNoYXJhY3RlcnMgdG8gc3BhY2VzLgorCit0dmk5MTJiK3ByaW50ZXJ8VGVsZVZpZGVvIFRWSS05MTJCL1RWSS05MjBCIGFuZCBUVkktOTEyQy9UVkktOTIwQyBwYWdlIHByaW50IHN1cHBvcnQsCisJbWMwPVxFUCwKKworIyBUaGlzIHVzZXMgaGFsZi1pbnRlbnNpdHkgbW9kZSAoPGRpbT4pIGZvciBzdGFuZG91dCAoPHNtc28+KSwgYW5kCisjIGV4cG9zZXMgbm8gb3RoZXIgYXR0cmlidXRlcyAoaGFsZi1pbnRlbnNpdHkgaXMgdGhlIG9ubHkgYXR0cmlidXRlCisjIHRoYXQgZG9lcyBub3QgZ2VuZXJhdGUgYSBtYWdpYyBjb29raWUuKQorCit0dmk5MTJiK2RpbXxUZWxlVmlkZW8gVFZJLTkxMkIvVFZJLTkyMEIgYW5kIFRWSS05MTJDL1RWSS05MjBDIGhhbGYtaW50ZW5zaXR5IGF0dHJpYnV0ZSBzdXBwb3J0LAorCW1zZ3IsCisJZGltPVxFKSwgcm1zbz1cRSgsIHNncj1cRSU/JXAxJXA1JXwldCklZSglOywgc2dyMD1cRSgsCisJc21zbz1cRSksCisKKyMgRnVsbCBtYWdpYy1jb29raWUgYXR0cmlidXRlIHN1cHBvcnQsIHdpdGggaGFsZi1pbnRlbnNpdHkgcmV2ZXJzZQorIyB2aWRlbyBmb3Igc3RhbmRvdXQuIE5vdGUgdGhhdCB3ZSBhZGQgYSBzcGFjZSBpbiB0aGUgPGRpbT4gc2VxdWVuY2UKKyMgdG8gZ2l2ZSBhIGNvbnNpc3RlbnQgbWFnaWMtY29va2llIGNvdW50LiBBbHNvIG5vdGUgdGhhdCA8c2dyPiB1c2VzCisjIGJhY2tzcGFjaW5nIChpbiB0aGUgVFZJLXN1cHBvcnRlZCBvcmRlcikgdG8gYXBwbHkgYWxsIHJlcXVlc3RlZAorIyBhdHRyaWJ1dGVzIHdpdGggb25seSBhIHNpbmdsZSBtYWdpYyBjb29raWUuCisKK3R2aTkxMmIrbWN8VGVsZVZpZGVvIFRWSS05MTJCL1RWSS05MjBCIGFuZCBUVkktOTEyQy9UVkktOTIwQyBmdWxsIG1hZ2ljLWNvb2tpZSBhdHRyaWJ1dGUgc3VwcG9ydCwKKwl4bWMjMSwKKwlibGluaz1cRVxeLCBkaW09XEUpXHMsIGludmlzPVxFXywgcmV2PVxFaiwgcm1zbz1cRShcRWssCisJcm11bD1cRW0sCisJc2dyPVxFJT8lcDElcDUlfCV0KSVlKCU7IFwwMTBcRSU/JXAxJXAzJXwldGolZWslO1wwMTBcRSU/JXAyJXRsJWVtJTtcMDEwXEUlPyVwNyV0XyVlJT8lcDQldFxeJWVxJTslOywKKwlzZ3IwPVxFKFxFa1wwMTBcRW1cMDEwXEVxLCBzbXNvPVxFKVxFaiwgc211bD1cRWwsCisKKyMgVGhpcyB1c2VzIHRoZSBzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uIHRvIHNhdmUgJiByZXN0b3JlIHNjcmVlbgorIyBjb250ZW50cy4gSWYgeW91ciB0ZXJtaW5hbCBpcyBtaXNzaW5nIHRoZSBvcHRpb24sIHRoaXMgZGVzY3JpcHRpb24KKyMgc2hvdWxkIHN0aWxsIHdvcmssIGJ1dCB0aGF0IGhhcyBub3QgYmVlbiB0ZXN0ZWQuCisKK3R2aTkxMmIrMnB8VGVsZVZpZGVvIFRWSS05MTJCL1RWSS05MjBCIGFuZCBUVkktOTEyQy9UVkktOTIwQyBzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uIHN1cHBvcnQsCisJZmxhc2g9XEVLJDwxMDA+XEVLLCBybWN1cD1cMDMyJDw1MD5cRUtcRT03XHMsCisJc21jdXA9XEVLXDAzMiQ8NTA+XEUoXEVrXDAxMFxFbVwwMTBcRXFcMDMyJDw1MD4sCisKKyMgVGhpcyBzaW11bGF0ZXMgZmxhc2hpbmcgYnkgYnJpZWZseSB0b2dnbGluZyB0byB0aGUgb3RoZXIgcGFnZQorIyAoa2x1ZGdlISkKKwordHZpOTEyYit2YnxUZWxlVmlkZW8gVFZJLTkxMkIvVFZJLTkyMEIgYW5kIFRWSS05MTJDL1RWSS05MjBDIHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gInZpc2libGUgYmVsbCIgc3VwcG9ydCwKKwliZWw9XEVLJDwxMDA+XEVLLCB1c2U9dHZpOTEyYisycCwKKworIyBGdW5jdGlvbiBrZXlzICg8a2YxMj4gLi4gPGtmMjI+IGFyZSBzaGlmdGVkIDxrZjE+IC4uIDxrZjExPikKKwordHZpOTIwYitmbnxUZWxlVmlkZW8gVFZJLTkyMEIgYW5kIFRWSS05MjBDIGZ1bmN0aW9uIGtleSBzdXBwb3J0LAorCWtmMT1eQUBcciwga2YxMD1eQUlcciwga2YxMT1eQUpcciwga2YxMj1eQWBcciwga2YxMz1eQWFcciwKKwlrZjE0PV5BYlxyLCBrZjE1PV5BY1xyLCBrZjE2PV5BZFxyLCBrZjE3PV5BZVxyLCBrZjE4PV5BZlxyLAorCWtmMTk9XkFnXHIsIGtmMj1eQUFcciwga2YyMD1eQWhcciwga2YyMT1eQWlcciwga2YyMj1eQWpcciwKKwlrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwKKwlrZjg9XkFHXHIsIGtmOT1eQUhcciwKKworIyBDb21iaW5hdGlvbnMgb2YgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcworCit0dmk5MTJiLTJwLXVua3x0dmk5MTJjLTJwLXVua3x0dmk5MTJiLXVuay0ycHx0dmk5MTJjLXVuay0ycHxUZWxlVmlkZW8gVFZJLTkxMkIgb3IgVFZJLTkxMkMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb247IG5vIGF0dHJpYnV0ZXMpLAorCXVzZT10dmk5MTJiKzJwLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkxMmItdmItdW5rfHR2aTkxMmMtdmItdW5rfHR2aTkxMmItdW5rLXZifHR2aTkxMmMtdW5rLXZifFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIjsgbm8gYXR0cmlidXRlcyksCisJdXNlPXR2aTkxMmIrdmIsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi1wfHR2aTkxMmMtcHxUZWxlVmlkZW8gVFZJLTkxMkIgb3IgVFZJLTkxMkMgKG5vIGF0dHJpYnV0ZXM7IHBhZ2UgcHJpbnQpLAorCXVzZT10dmk5MTJiK3ByaW50ZXIsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi0ycC1wfHR2aTkxMmMtMnAtcHx0dmk5MTJiLXAtMnB8dHZpOTEyYy1wLTJwfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbjsgbm8gYXR0cmlidXRlczsgcGFnZSBwcmludCksCisJdXNlPXR2aTkxMmIrMnAsIHVzZT10dmk5MTJiK3ByaW50ZXIsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi12Yi1wfHR2aTkxMmMtdmItcHx0dmk5MTJiLXAtdmJ8dHZpOTEyYy1wLXZifFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIjsgbm8gYXR0cmlidXRlczsgcGFnZSBwcmludCksCisJdXNlPXR2aTkxMmIrdmIsIHVzZT10dmk5MTJiK3ByaW50ZXIsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi0ycHx0dmk5MTJjLTJwfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbjsgaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlKSwKKwl1c2U9dHZpOTEyYisycCwgdXNlPXR2aTkxMmIrZGltLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkxMmItMnAtbWN8dHZpOTEyYy0ycC1tY3x0dmk5MTJiLW1jLTJwfHR2aTkxMmMtbWMtMnB8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uOyBtYWdpYyBjb29raWVzKSwKKwl1c2U9dHZpOTEyYisycCwgdXNlPXR2aTkxMmIrbWMsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi12Ynx0dmk5MTJjLXZifFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIjsgaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlKSwKKwl1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmIrZGltLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkxMmItdmItbWN8dHZpOTEyYy12Yi1tY3x0dmk5MTJiLW1jLXZifHR2aTkxMmMtbWMtdmJ8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBtYWdpYyBjb29raWVzKSwKKwl1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmIrbWMsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYnx0dmk5MTJjfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlKSwKKwl1c2U9dHZpOTEyYitkaW0sIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi1tY3x0dmk5MTJjLW1jfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAobWFnaWMgY29va2llcyksCisJdXNlPXR2aTkxMmIrbWMsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi11bmt8dHZpOTIwYy11bmt8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChubyBhdHRyaWJ1dGVzKSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLTJwLXVua3x0dmk5MjBjLTJwLXVua3x0dmk5MjBiLXVuay0ycHx0dmk5MjBjLXVuay0ycHxUZWxlVmlkZW8gVFZJLTkyMEIgb3IgVFZJLTkyMEMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb247IG5vIGF0dHJpYnV0ZXMpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYisycCwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLXZiLXVua3x0dmk5MjBjLXZiLXVua3x0dmk5MjBiLXVuay12Ynx0dmk5MjBjLXVuay12YnxUZWxlVmlkZW8gVFZJLTkyMEIgb3IgVFZJLTkyMEMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gInZpc2libGUgYmVsbCI7IG5vIGF0dHJpYnV0ZXMpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLXB8dHZpOTIwYy1wfFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAobm8gYXR0cmlidXRlczsgcGFnZSBwcmludCksCisJdXNlPXR2aTkyMGIrZm4sIHVzZT10dmk5MTJiK3ByaW50ZXIsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi0ycC1wfHR2aTkyMGMtMnAtcHx0dmk5MjBiLXAtMnB8dHZpOTIwYy1wLTJwfFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbjsgbm8gYXR0cmlidXRlczsgcGFnZSBwcmludCksCisJdXNlPXR2aTkyMGIrZm4sIHVzZT10dmk5MTJiKzJwLCB1c2U9dHZpOTEyYitwcmludGVyLAorCXVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi12Yi1wfHR2aTkyMGMtdmItcHx0dmk5MjBiLXAtdmJ8dHZpOTIwYy1wLXZifFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIjsgbm8gYXR0cmlidXRlczsgcGFnZSBwcmludCksCisJdXNlPXR2aTkyMGIrZm4sIHVzZT10dmk5MTJiK3ZiLCB1c2U9dHZpOTEyYitwcmludGVyLAorCXVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi0ycHx0dmk5MjBjLTJwfFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbjsgaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlKSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrMnAsIHVzZT10dmk5MTJiK2RpbSwKKwl1c2U9dHZpOTEyYi11bmssCisKK3R2aTkyMGItMnAtbWN8dHZpOTIwYy0ycC1tY3x0dmk5MjBiLW1jLTJwfHR2aTkyMGMtbWMtMnB8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uOyBtYWdpYyBjb29raWVzKSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrMnAsIHVzZT10dmk5MTJiK21jLAorCXVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi12Ynx0dmk5MjBjLXZifFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIjsgaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlKSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrdmIsIHVzZT10dmk5MTJiK2RpbSwKKwl1c2U9dHZpOTEyYi11bmssCisKK3R2aTkyMGItdmItbWN8dHZpOTIwYy12Yi1tY3x0dmk5MjBiLW1jLXZifHR2aTkyMGMtbWMtdmJ8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBtYWdpYyBjb29raWVzKSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrdmIsIHVzZT10dmk5MTJiK21jLAorCXVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYnx0dmk5MjBjfFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlKSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrZGltLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkyMGItbWN8dHZpOTIwYy1tY3xUZWxlVmlkZW8gVFZJLTkyMEIgb3IgVFZJLTkyMEMgKG1hZ2ljIGNvb2tpZXMpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYittYywgdXNlPXR2aTkxMmItdW5rLAorCisjIFRlbGV2aWRlbyA5MjEgYW5kIHZhcmlhbnRzCisjIEZyb206IFRpbSBUaGVpc2VuIDx0aW1AY3Mud2lzYy5lZHU+IDIyIFNlcHQgMTk5NQorIyAodHZpOTIxOiByZW1vdmVkIDprbz1idDogYmVmb3JlIHRyYW5zbGF0aW9uLCBJIHNlZSBubyBiYWNrdGFiIGNhcDsKKyMgYWxzbyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmcgLS0gZXNyKQordHZpOTIxfHRlbGV2aWRlbyBtb2RlbCA5MjEgd2l0aCBzeXNsaW5lIHNhbWUgYXMgcGFnZSAmIHJlYWwgdmkgZnVuY3Rpb24sCisJT1RicywgT1RwdCwgYW0sIGhzLCB4ZW5sLCB4aHAsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCWFjc2M9LCBjbGVhcj1eWiwgY25vcm09XEUuMywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XlYsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8My8+LCBjdXUxPV5LLAorCWN2dmlzPVxFLjIsIGRjaDE9XEVXLCBkbDE9XEVSJDwxKi8+LCBkc2w9XEVmXHJcRWcsIGVkPVxFWSwKKwllbD1cRVQsIGZzbD1cRWcsIGhvbWU9Xl4sIGh0PV5JLCBpY2gxPVxFUSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUUsIGluZD1eSiwgaW52aXNALAorCWlzMj1cRWxcRSJcRUYxXEUuM1wwMTdcRUFcRTwsIGticz1eSCwga2Nscj1eWiwga2N1YjE9XkgsCisJa2N1ZDE9XlYsIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLCBrZGwxPVxFUiQ8MSovPiwKKwlrZWQ9XEVZLCBrZWw9XEVULCBraWNoMT1cRVEsIGtpbDE9XEVFLCBuZWw9Xk1eSiwgcm1hY3M9XEUlJSwKKwlybWlyPSwgc21hY3M9XEUkLCBzbWlyPSwgdHNsPVxFZlxFRzAsIHVzZT1hZG0rc2dyLAorIyB3aXRob3V0IHRoZSBiZWVwZXIKKyMgKHR2aTkyQjogcmVtb3ZlZCA6a289YnQ6IGJlZm9yZSB0cmFuc2xhdGlvbiwgSSBzZWUgbm8gYmFja3RhYiBjYXA7CisjIGFsc28gYWRkZWQgZW1wdHkgPGFjc2M+IHRvIHN1cHByZXNzIHRpYyB3YXJuaW5nIC0tIGVzcikKK3R2aTkyQnx0ZWxldmlkZW8gbW9kZWwgOTIxIHdpdGggc3lzbGluZSBzYW1lIGFzIHBhZ2UgJiByZWFsIHZpIGZ1bmN0aW9uICYgbm8gYmVlcGVyLAorCWFtLCBocywgeGVubCwgeGhwLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMCwKKwlhY3NjPSwgY2xlYXI9XlosIGNub3JtPVxFLjMsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5WLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDMvPiwgY3V1MT1eSywKKwljdnZpcz1cRS4yLCBkY2gxPVxFVywgZGwxPVxFUiQ8MSovPiwgZHNsPVxFZlxyXEVnLCBlZD1cRVksCisJZWw9XEVULCBmbGFzaD1cRWIkPDIwMC8+XEVkLCBmc2w9XEVnLCBob21lPV5eLCBodD1eSSwKKwlpY2gxPVxFUSwgaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LCBpbDE9XEVFLCBpbmQ9XkosCisJaW52aXNALCBpczI9XEVsXEUiXEVGMVxFLjNcMDE3XEVBXEU8LCBrYnM9XkgsIGtjbHI9XlosCisJa2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywKKwlrZGwxPVxFUiQ8MSovPiwga2VkPVxFWSwga2VsPVxFVCwga2ljaDE9XEVRLCBraWwxPVxFRSwKKwluZWw9Xk1eSiwgcm1hY3M9XEUlJSwgc21hY3M9XEUkLCB0c2w9XEVmXEVHMCwgdXNlPWFkbStzZ3IsCisjICh0dmk5MkQ6IHJlbW92ZWQgOmtvPWJ0OiBiZWZvcmUgdHJhbnNsYXRpb24sIEkgc2VlIG5vIGJhY2t0YWIgY2FwIC0tIGVzcikKK3R2aTkyRHx0dmk5MkIgd2l0aCBEVFIgaW5zdGVhZCBvZiBYT04vWE9GRiAmIGJldHRlciBwYWRkaW5nLAorCWRsMT1cRVIkPDIqLz4sIGlsMT1cRUUkPDIqLz4sCisJaXMyPVxFbFxFIlxFRjFcRS4zXDAxNlxFQVxFPCwga2RsMT1cRVIkPDIqLz4sCisJa2lsMT1cRUUkPDIqLz4sIHVzZT10dmk5MkIsCisKKyMgKHR2aTkyNDogVGhpcyB1c2VkIHRvIGhhdmUgPGRzbD1cRXMwPiwgPGZzbD1cMDMxPi4gIEkgcHV0IHRoZSBuZXcgc3RyaW5ncworIyBpbiBmcm9tIGEgQlNEIHRlcm1jYXAgZmlsZSBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgdGhleSBkbyBzb21ldGhpbmcgdGhlCisjIG9sZCBvbmVzIHNraXAgLS0gZXNyKQordHZpOTI0fHRlbGV2aWRlbyB0dmk5MjQsCisJYW0sIGJ3LCBocywgaW4sIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjODAsIHhtYyMwLAorCWJlbD1eRywgYmxpbms9XEVHMiwgY2J0PVxFSSwgY2l2aXM9XEUuMCwgY2xlYXI9XEUqMCwKKwljbm9ybT1cRS4zLCBjcj1eTSwgY3NyPVxFXyVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdWIxPV5ILCBjdWQxPV5WLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGN2dmlzPVxFLjEsCisJZGNoMT1cRVcsIGRsMT1cRVIsIGRzbD1cRXMwXEVmXDAzMSwgZWQ9XEV5LCBlbD1cRXQsCisJZmxhc2g9XEViJDwyMDA+XEVkLCBmc2w9XDAzMVxFczEsIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLAorCWljaDE9XEVRLCBpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUUsIGluZD1eSiwKKwlpbnZpc0AsIGlzMT1cMDE3XEUlXEUnXEUoXEVERlxFQ1xFRzBcRU4wXEVzMFxFdjAsCisJa2JzPV5ILCBrY2xyPVxFKjAsIGtjdWIxPV5ILCBrY3VkMT1eViwga2N1ZjE9XkwsIGtjdXUxPV5LLAorCWtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRXksIGtlbD1cRXQsIGtmMD1eQUBcciwga2YxPV5BQVxyLAorCWtmMTA9XkFKXHIsIGtmMTE9XkFLXHIsIGtmMTI9XkFMXHIsIGtmMTM9XkFNXHIsIGtmMTQ9XkFOXHIsCisJa2YxNT1eQU9cciwga2YyPV5BQlxyLCBrZjM9XkFDXHIsIGtmND1eQURcciwga2Y1PV5BRVxyLAorCWtmNj1eQUZcciwga2Y3PV5BR1xyLCBrZjg9XkFIXHIsIGtmOT1eQUlcciwga2hvbWU9Xl4sCisJa2ljaDE9XEVRLCBraWwxPVxFRSwgbGYwPUYxLCBsZjE9RjIsIGxmMTA9RjExLCBsZjI9RjMsIGxmMz1GNCwKKwlsZjQ9RjUsIGxmNT1GNiwgbGY2PUY3LCBsZjc9RjgsIGxmOD1GOSwgbGY5PUYxMCwKKwlwZmtleT1cRXwlcDElezQ5fSUrJWMlcDIlc1wwMzEsIHJpPVxFaiwgdGJjPVxFMywgdHNsPVxFZiwKKwl1c2U9YWRtK3NnciwKKworIyBUVkk5MjUgRElQIHN3aXRjaGVzLiAgSW4gZWFjaCBvZiB0aGVzZSwgRCA9IERvd24gYW5kIFUgPSBVcCwKKyMKKyMgSGVyZSBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZXh0ZXJuYWwgKGJhdWQpIHN3aXRjaGVzIChTMSk6CisjCisjICAgICAgICAgICAgIFBvc2l0aW9uCQlCYXVkCisjIDcJOAk5CTEwCQlbUHJpbnRlcl0KKyMgMQkyCTMJNAkJW01haW4gUlMyMzJdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEQJRAlECUQJOTYwMAorIyBECUQJRAlVCSAgNTAKKyMgRAlECVUJRAkgIDc1CisjIEQJRAlVCVUJIDExMAorIyBECVUJRAlECSAxMzUKKyMgRAlVCUQJVQkgMTUwCisjIEQJVQlVCUQJIDMwMAorIyBECVUJVQlVCSA2MDAKKyMgVQlECUQJRAkxMjAwCisjIFUJRAlECVUJMTgwMAorIyBVCUQJVQlECTI0MDAKKyMgVQlECVUJVQkzNjAwCisjIFUJVQlECUQJNDgwMAorIyBVCVUJRAlVCTcyMDAKKyMgVQlVCVUJRAk5NjAwCisjIFUJVQlVCVUJMTkyMDAKKyMKKyMKKyMgU2V0dGluZ3MgZm9yIHdvcmQgbGVuZ3RoIGFuZCBzdG9wLWJpdHMgKFMxKQorIworIyAgUG9zaXRpb24JRGVzY3JpcHRpb24KKyMgNQk2CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVCS0JNy1iaXQgd29yZAorIyBECS0JOC1iaXQgd29yZAorIyAtCVUJMiBzdG9wIGJpdHMKKyMgLQlECTEgc3RvcCBiaXQKKyMKKyMKKyMgUzIgKGV4dGVybmFsKSBzZXR0aW5ncworIworIyBQb3NpdGlvbglVcAlEbglEZXNjcmlwdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAxCQlYCQlMb2NhbCBlZGl0CisjIAkJCVgJRHVwbGV4IGVkaXQgKHRyYW5zbWl0IGVkaXRpbmcga2V5cykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMgkJWAkJOTEyLzkyMCBlbXVsYXRpb24KKyMgCQkJWAk5MjUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMwkJCVgKKyMgNAkJCVgJTm8gcGFyaXR5CisjIDUJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDMJCQlYCisjIDQJCQlYCU9kZCBwYXJpdHkKKyMgNQkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAzCQkJWAorIyA0CQlYCQlFdmVuIHBhcml0eQorIyA1CQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDMJCVgKKyMgNAkJCVgJTWFyayBwYXJpdHkKKyMgNQkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAzCQlYCisjIDQJCVgJCVNwYWNlIHBhcml0eQorIyA1CQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDYJCVgJCVdoaXRlIG9uIGJsYWNrIGRpc3BsYXkKKyMgCQkJWAlCbGFjayBvbiB3aGl0ZSBkaXNwbGF5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDcJCQlYCUhhbGYgRHVwbGV4CisjIDgJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDcJCVgJCUZ1bGwgRHVwbGV4CisjIDgJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDcJCQlYCUJsb2NrIG1vZGUKKyMgOAkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyA5CQkJWAk1MCBIegorIyAJCVgJCTYwIEh6CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDEwCQlYCQlDUi9MRiAoQXV0byBMRikKKyMgCQkJWAlDUiBvbmx5CisjCisjIFMzIChpbnRlcm5hbCBzd2l0Y2gpIHNldHRpbmdzOgorIworIyBQb3NpdGlvbglVcAlEbglEZXNjcmlwdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAxCQlYCQlLZXljbGljayBvZmYKKyMgCQkJWAlLZXljbGljayBvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAyCQkJWAlFbmdsaXNoCisjIDMJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDIJCQlYCUdlcm1hbgorIyAzCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDIJCVgJCUZyZW5jaAorIyAzCQkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAyCQlYCQlTcGFuaXNoCisjIDMJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNAkJCVgJQmxpbmtpbmcgYmxvY2sgY3Vyc29yCisjIDUJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDQJCQlYCUJsaW5raW5nIHVuZGVybGluZSBjdXJzb3IKKyMgNQkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyA0CQlYCQlTdGVhZHkgYmxvY2sgY3Vyc29yCisjIDUJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDQJCVgJCVN0ZWFkeSB1bmRlcmxpbmUgY3Vyc29yCisjIDUJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNgkJWAkJU2NyZWVuIGJsYW5raW5nIHRpbWVyIChPTikKKyMgCQkJWAlTY3JlZW4gYmxhbmtpbmcgdGltZXIgKE9GRikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNwkJWAkJUGFnZSBhdHRyaWJ1dGVzCisjIAkJCVgJTGluZSBhdHRyaWJ1dGVzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDgJCVgJCURDRCBkaXNjb25uZWN0ZWQKKyMgCQkJWAlEQ0QgY29ubmVjdGVkCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDkJCVgJCURTUiBkaXNjb25uZWN0ZWQKKyMgCQkJWAlEU1IgY29ubmVjdGVkCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDEwCQlYCQlEVFIgRGlzY29ubmVjdGVkCisjIAkJCVgJRFRSIGNvbm5lY3RlZAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyAodHZpOTI1OiBCU0QgaGFzIDxjbGVhcj1cRSo+LiAgSSBnb3QgPGlzMj4gYW5kIDxyaT4gZnJvbSB0aGVyZSAtLSBlc3IpCit0dmk5MjV8dGVsZXZpZGVvIDkyNSwKKwlPVGJzLCBhbSwgYncsIGhzLCB1bCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1eWiwgY25vcm09XEUuNCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XlYsCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwljdnZpcz1cRS4yLCBkY2gxPVxFVywgZGwxPVxFUiwgZHNsPVxFaCwgZWQ9XEVZLCBlbD1cRVQsCisJZmxhc2g9XEViJDwyMDA+XEVkLCBmc2w9Xk1cRWcsIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLAorCWljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosIGludmlzQCwgaXMyPVxFbFxFIiwga2JzPV5ILCBrY2xyPV5aLAorCWtjdWIxPV5ILCBrY3VkMT1eViwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLAorCWtlZD1cRVksIGtlbD1cRVQsIGtmMD1eQUlcciwga2YxPV5BQFxyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwKKwlrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwKKwlrZjk9XkFIXHIsIGtob21lPV5eLCBraWNoMT1cRVEsIGtpbDE9XEVFLCByaT1cRWosIHRiYz1cRTMsCisJdHNsPVxFaFxFZiwgdXNlPWFkbStzZ3IsCisjIFRlbGVWaWRlbyA5MjUgZnJvbSBNaXRjaCBCcmFkbGV5IDxzdW4hd21iPiB2aWEgQlJMCisjIHRvIGF2b2lkICJtYWdpYyBjb29raWUiIHN0YW5kb3V0IGdsaXRjaDoKK3R2aTkyNS1oaXxUZWxlVmlkZW8gTW9kZWwgOTI1IHdpdGggaGFsZiBpbnRlbnNpdHkgc3RhbmRvdXQgbW9kZSwKKwl4bWNALAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBybXNvPVxFKCwgc21zbz1cRSksIHVzZT10dmk5MjUsCisKKyMgRnJvbTogVG9kZCBMaXR3aW4gPGxpdHdpbkBsaXR3aW4uanBsLm5hc2EuZ292PiAyOCBNYXkgMTk5MworIyBPcmlnaW5hbGx5IFRpbSBDdXJyeSwgVW5pdi4gb2YgQ2VudHJhbCBGbGEuLCA8ZHVrZSF1Y2YtY3MhdGltPiA1LzIxLzgyCisjIGZvciBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcywKKyMgVGhlIGZvbGxvd2luZyB0dmkgZGVzY3JpcHRpb25zIGZyb20gQjpwanBoYXIgYW5kIHZpcnVzIW1pa2UKKyMgaXMgZm9yIGFsbCA5NTBzLiAgSXQgc2V0cyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisjIGZ1bGwgZHVwbGV4IChcRURGKQkJd3JpdGUgcHJvdGVjdCBvZmYgKFxFKCkKKyMgY29udmVyc2F0aW9uIG1vZGUgKFxFQykJZ3JhcGhpY3MgbW9kZSBvZmYgKFxFJSkKKyMgd2hpdGUgb24gYmxhY2sgKFxFZCkJCWF1dG8gcGFnZSBmbGlwIG9mZiAoXEV3KQorIyB0dXJuIG9mZiBzdGF0dXMgbGluZSAoXEVnKQljbGVhciBzdGF0dXMgbGluZSAoXEVmXHIpCisjIG5vcm1hbCB2aWRlbyAoXEUwKQkJbW9uaXRvciBtb2RlIG9mZiAoXEVYIG9yIFxFdSkKKyMgZWRpdCBtb2RlIChcRXIpCQlsb2FkIGJsYW5rIGNoYXIgdG8gc3BhY2UgKFxFZVwwNDApCisjIGxpbmUgZWRpdCBtb2RlIChcRU8pCQllbmFibGUgYnVmZmVyIGNvbnRyb2wgKF5PKQorIyBwcm90ZWN0IG1vZGUgb2ZmIChcRVwwNDcpCWR1cGxleCBlZGl0IGtleXMgKFxFbCkKKyMgcHJvZ3JhbSB1bnNoaWZ0ZWQgc2VuZCBrZXkgdG8gc2VuZCBsaW5lIGFsbCAoXEUwMTYpCisjIHByb2dyYW0gc2hpZnRlZCBzZW5kIGtleSB0byBzZW5kIGxpbmUgdW5wcm90ZWN0ZWQgKFxFMDA0KQorIyBzZXQgdGhlIGZvbGxvd2luZyB0byBudWxsczoKKyMJZmllbGQgZGVsaW1pdGVyIChcRXgwXDIwMFwyMDApCisjCWxpbmUgZGVsaW1pdGVyIChcRXgxXDIwMFwyMDApCisjCXN0YXJ0LXByb3RlY3RlZCBmaWVsZCBkZWxpbWl0ZXIgKFxFeDJcMjAwXDIwMCkKKyMJZW5kLXByb3RlY3RlZCBmaWVsZCBkZWxpbWl0ZXIgKFxFeDNcMjAwXDIwMCkKKyMgc2V0IGVuZCBvZiB0ZXh0IGRlbGltaXRlciB0byBjYXJyaWFnZSByZXR1cm4vbnVsbCAoXEV4NFxyXDIwMCkKKyMKKyMgICAgICAgICAgICAgICAgICAgICBUVkkgOTUwIFN3aXRjaCBTZXR0aW5nIFJlZmVyZW5jZSBDaGFydHMKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEUgMToKKyMKKyMgICAgICBTMSAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAgICAgOCAgICAgOSAgICAxMAorIyAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjICAgICAgICAgIHwgQ29tcHV0ZXIgQmF1ZCBSYXRlICAgIHxEYXRhIHxTdG9wIHwgUHJpbnRlciBCYXVkIFJhdGUgICAgIHwKKyMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfEJpdHMgfEJpdHMgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjICAgfCAgVXAgIHwgICAgICAgIFNlZSAgICAgICAgICAgIHwgIDcgIHwgIDIgIHwgICAgICAgIFNlZSAgICAgICAgICAgIHwKKyMgICArLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAgIHwgRG93biB8ICAgICAgVEFCTEUgMiAgICAgICAgICB8ICA4ICB8ICAxICB8ICAgICAgVEFCTEUgMiAgICAgICAgICB8CisjICAgKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMKKyMKKyMgICAgICBTMiAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAgICAgOCAgICAgOSAgICAxMAorIyAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rCisjICAgICAgICAgIHxFZGl0IHxDdXJzcnwgICAgUGFyaXR5ICAgICAgIHxWaWRlb3xUcmFuc21pc3MnbnwgSHogIHxDbGlja3wKKyMgICArLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKworIyAgIHwgIFVwICB8IERwbHh8Qmxpbmt8ICAgICAgU2VlICAgICAgICB8R29uQmt8ICAgU2VlICAgICB8IDYwICB8IE9mZiB8CisjICAgKy0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLSstLS0tLSstLS0tLSsKKyMgICB8IERvd24gfExvY2FsfFN0J2R5fCAgICBUQUJMRSAzICAgICAgfEJrb25HfCAgQ0hBUlQgICAgfCA1MCAgfCBPbiAgfAorIyAgICstLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rCisjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEUgMjoKKyMKKyMgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tKworIyAgICAgICAgICAgICB8IERpc3BsYXkgICB8ICAxICB8ICAyICB8ICAzICB8ICA0ICB8ICAgQmF1ZCAgICB8CisjICAgICAgICAgICAgICstLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsgICAgICAgICAgIHwKKyMgICAgICAgICAgICAgfCBQcmludGVyICAgfCAgNyAgfCAgOCAgfCAgOSAgfCAxMCAgfCAgIFJhdGUgICAgfAorIyAgICAgICAgICAgICArLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rCisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIEQgIHwgIEQgIHwgIEQgIHwgICA5NjAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgRCAgfCAgRCAgfCAgRCAgfCAgICAgNTAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBVICB8ICBEICB8ICBEICB8ICAgICA3NSAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIFUgIHwgIEQgIHwgIEQgIHwgICAgMTEwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgRCAgfCAgVSAgfCAgRCAgfCAgICAxMzUgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBEICB8ICBVICB8ICBEICB8ICAgIDE1MCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIFUgIHwgIFUgIHwgIEQgIHwgICAgMzAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgVSAgfCAgVSAgfCAgRCAgfCAgICA2MDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBEICB8ICBEICB8ICBVICB8ICAgMTIwMCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIEQgIHwgIEQgIHwgIFUgIHwgICAxODAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgVSAgfCAgRCAgfCAgVSAgfCAgIDI0MDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBVICB8ICBEICB8ICBVICB8ICAgMzYwMCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIEQgIHwgIFUgIHwgIFUgIHwgICA0ODAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgRCAgfCAgVSAgfCAgVSAgfCAgIDcyMDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBVICB8ICBVICB8ICBVICB8ICAgOTYwMCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIFUgIHwgIFUgIHwgIFUgIHwgIDE5MjAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tKworIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFIDM6CisjICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMyAgfCAgNCAgfCAgNSAgfCAgIFBhcml0eSAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rCisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFggIHwgIFggIHwgIEQgIHwgICAgTm9uZSAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgRCAgfCAgVSAgfCAgICAgT2RkICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBVICB8ICBVICB8ICAgIEV2ZW4gICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIEQgIHwgIFUgIHwgICAgTWFyayAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgVSAgfCAgVSAgfCAgIFNwYWNlICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9IGRvbid0IGNhcmUKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUlQ6CisjICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNyAgfCAgOCAgfCBDb21tdW5pY2F0aW9uICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIEQgIHwgIEhhbGYgRHVwbGV4ICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgVSAgfCAgRnVsbCBEdXBsZXggICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBEICB8ICAgICBCbG9jayAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIFUgIHwgICAgIExvY2FsICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworIworIyAodHZpOTUwOiBlYXJseSB2ZXJzaW9ucyBoYWQgb2Jzb2xldGUgIjptYT1eVmpeS2teSGheTGxeXkg6Ii4KKyMgSSBhbHNvIGluc2VydGVkIDxpY2gxPiBhbmQgPGtpY2gxPjsgdGhlIDprbzogc3RyaW5nIGluZGljYXRlZCB0aGF0IDxpY2g+CisjIHNob3VsZCBiZSBwcmVzZW50IGFuZCBhbGwgdHZpIG5hdGl2ZSBtb2RlcyB1c2UgdGhlIHNhbWUgc3RyaW5nIGZvciB0aGlzLgorIyBGaW5hbGx5LCBub3RlIHRoYXQgQlNEIGhhcyBjdWQxPV5WLiAtLSBlc3IpCit0dmk5NTB8dGVsZXZpZGVvIDk1MCwKKwlPVGJzLCBhbSwgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwlhY3NjPWJcMDExY1wwMTRkXHJlXG5pXDAxMywgYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1cRSosCisJY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZHNsPVxFZ1xFZlxyLCBlZD1cRXksIGVsPVxFdCwgZmxhc2g9XEViJDwyMDAvPlxFZCwKKwlmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLCBpY2gxPVxFUSwgaWwxPVxFRSwgaW5kPV5KLAorCWludmlzQCwKKwlpczI9XEVERlxFQ1xFZFxFRzBcRWdcRXJcRU9cRSdcRShcRSVcRXdcRVhcRWUgXDAxN1wwMTFcRWxcRTAxNlxFMDA0XEV4MFwwXDBcRXgxXDBcMFxFeDJcMFwwXDAxMVxFeDNcMFwwXEV4NFxyXDBcRWZcciwKKwlrYnM9XkgsIGtjYnQ9XEVJLCBrY2xyPVxFKiwga2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywga2RjaDE9XEVXLCBrZGwxPVxFUiwga2VkPVxFeSwga2VsPVxFdCwga2YwPV5BMFxyLAorCWtmMT1eQUBcciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLAorCWtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sCisJa2ljaDE9XEVRLCBraWwxPVxFRSwgbWM0PVxFYSwgbWM1PVxFYCwgcmk9XEVqLCBybWFjcz1eWCwKKwlybWlyPVxFciwgc21hY3M9XlUsIHNtaXI9XEVxLCB0YmM9XEUzLCB0c2w9XEVnXEVmLAorCXVzZT1hZG0rc2dyLAorIworIyBpcyBmb3IgOTUwIHdpdGggdHdvIHBhZ2VzIGFkZHMgdGhlIGZvbGxvd2luZzoKKyMJc2V0IDQ4IGxpbmUgcGFnZSAoXEVcXDIpCisjCXBsYWNlIGN1cnNvciBhdCBwYWdlIDAsIGxpbmUgMjQsIGNvbHVtbiAxIChcRS0wNyApCisjCXNldCBsb2NhbCAobm8gc2VuZCkgZWRpdCBrZXlzIChcRWspCisjCisjIHR3byBwYWdlIDk1MCBhZGRzIHRoZSBmb2xsb3dpbmc6CisjCXdoZW4gZW50ZXJpbmcgZXgsIHNldCAyNCBsaW5lIHBhZ2UgKFxFXFwxKQorIwl3aGVuIGV4aXRpbmcgZXgsIHJlc2V0IDQ4IGxpbmUgcGFnZSAoXEVcXDIpCisjCQkJIHBsYWNlIGN1cnNvciBhdCAwLDI0LDEgKFxFLTA3ICkKKyMJc2V0IGR1cGxleCAoc2VuZCkgZWRpdCBrZXlzIChcRWwpIHdoZW4gZW50ZXJpbmcgdmkKKyMJc2V0IGxvY2FsIChubyBzZW5kKSBlZGl0IGtleXMgKFxFaykgd2hlbiBleGl0aW5nIHZpCisjCit0dmk5NTAtMnB8dGVsZXZpZGVvOTUwIHcvMiBwYWdlcywKKwlpczI9XEVERlxFQ1xFZFxFRzBcRWdcRXJcRU9cRSdcRShcRSVcRXdcRVhcRWUgXDAxN1wwMTFcRWtcRTAxNlxFMDA0XEV4MFwwXDBcRXgxXDBcMFxFeDJcMFwwXDAxMVxFeDNcMFwwXEV4NFxyXDBcRVxcMlxFLTA3IFwwMTEsCisJcm1jdXA9XEVcXDJcRS0wN1xzLCBybWt4PVxFaywgc21jdXA9XEVcXDFcRS0wN1xzLAorCXNta3g9XEVsLCB1c2U9dHZpOTUwLAorIworIyBpcyBmb3IgOTUwIHdpdGggZm91ciBwYWdlcyBhZGRzIHRoZSBmb2xsb3dpbmc6CisjCXNldCA5NiBsaW5lIHBhZ2UgKFxFXFwzKQorIwlwbGFjZSBjdXJzb3IgYXQgcGFnZSAwLCBsaW5lIDI0LCBjb2x1bW4gMSAoXEUtMDcgKQorIworIyBmb3VyIHBhZ2UgOTUwIGFkZHMgdGhlIGZvbGxvd2luZzoKKyMJd2hlbiBlbnRlcmluZyBleCwgc2V0IDI0IGxpbmUgcGFnZSAoXEVcXDEpCisjCXdoZW4gZXhpdGluZyBleCwgcmVzZXQgOTYgbGluZSBwYWdlIChcRVxcMykKKyMJCQkgcGxhY2UgY3Vyc29yIGF0IDAsMjQsMSAoXEUtMDcgKQorIwordHZpOTUwLTRwfHRlbGV2aWRlbzk1MCB3LzQgcGFnZXMsCisJaXMyPVxFREZcRUNcRWRcRUcwXEVnXEVyXEVPXEUnXEUoXEUlXEV3XEVYXEVlIFwwMTdcMDExXEVrXEUwMTZcRTAwNFxFeDBcMFwwXEV4MVwwXDBcRXgyXDBcMFwwMTFcRXgzXDBcMFxFeDRcclwwXEVcXDNcRS0wNyBcMDExLAorCXJtY3VwPVxFXFwzXEUtMDdccywgcm1reD1cRWssIHNtY3VwPVxFXFwxXEUtMDdccywKKwlzbWt4PVxFbCwgdXNlPXR2aTk1MCwKKyMKKyMgPGlzMj4gZm9yIHJldmVyc2UgdmlkZW8gOTUwIGNoYW5nZXMgdGhlIGZvbGxvd2luZzoKKyMJc2V0IHJldmVyc2UgdmlkZW8gKFxFZCkKKyMKKyMgc2V0IHZiIGFjY29yZGluZ2x5IChcRWQgLi4uZGVsYXkuLi4gXEViKQorIwordHZpOTUwLXJ2fHRlbGV2aWRlbzk1MCByZXYgdmlkZW8sCisJZmxhc2g9XEVkJDwyMDAvPlxFYiwKKwlpczI9XEVERlxFQ1xFYlxFRzBcRWdcRXJcRU9cRSdcRShcRSVcRXdcRVhcRWUgXDAxN1wwMTFcRWxcRTAxNlxFMDA0XEV4MFwwXDBcRXgxXDBcMFxFeDJcMFwwXDAxMVxFeDNcMFwwXEV4NFxyXDAsCisJdXNlPXR2aTk1MCwKKworIyB0dmk5NTAtcnYtMnAgdXNlcyB0aGUgYXBwcm9wcmlhdGUgZW50cmllcyBmcm9tIDk1MC0ycCBhbmQgOTUwLXJ2Cit0dmk5NTAtcnYtMnB8dGVsZXZpZGVvOTUwIHJldiB2aWRlbyB3LzIgcGFnZXMsCisJZmxhc2g9XEVkJDwyMDAvPlxFYiwKKwlpczI9XEVERlxFQ1xFYlxFRzBcRWdcRXJcRU9cRSdcRShcRSVcRXdcRVhcRWUgXDAxN1wwMTFcRWtcRTAxNlxFMDA0XEV4MFwwXDBcRXgxXDBcMFxFeDJcMFwwXDAxMVxFeDNcMFwwXEV4NFxyXDBcRVxcMlxFLTA3XHMsCisJcm1jdXA9XEVcXDJcRS0wN1xzLCBybWt4PVxFaywgc21jdXA9XEVcXDFcRS0wN1xzLAorCXNta3g9XEVsLCB1c2U9dHZpOTUwLAorCisjIHR2aTk1MC1ydiB1c2VzIHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzIGZyb20gOTUwLTRwIGFuZCA5NTAtcnYKK3R2aTk1MC1ydi00cHx0ZWxldmlkZW85NTAgcmV2IHZpZGVvIHcvNCBwYWdlcywKKwlmbGFzaD1cRWQkPDIwMC8+XEViLAorCWlzMj1cRURGXEVDXEViXEVHMFxFclxFT1xFJ1xFKFxFJVxFd1xFWFxFZSBcMDE3XDAxMVxFa1xFMDE2XEUwMDRcRXgwXDBcMFxFeDFcMFwwXEV4MlwwXDBcMDExXEV4M1wwXDBcRXg0XHJcMFxFXFwzXEUtMDdccywKKwlybWN1cD1cRVxcM1xFLTA3XHMsIHJta3g9XEVrLCBzbWN1cD1cRVxcMVxFLTA3XHMsCisJc21reD1cRWwsIHVzZT10dmk5NTAsCisjIEZyb206IEFuZHJlYXMgU3RvbGNrZSA8c3RvbGNrZUBpY3NpLmJlcmtlbGV5LmVkdT4KKyMgKHR2aTk1NTogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hOj1eVmpeS2teSGheTGxeXkgiOworIyByZW1vdmVkIGluY29ycmVjdCAoYW5kIG92ZXJyaWRkZW4pICI6ZG89Xko6IjsgZml4ZWQgYnJva2VuIGNvbnRpbnVhdGlvbnMgaW4KKyMgdGhlIDpyczogc3RyaW5nLCBpbnNlcnRlZCB0aGUgPGljaD4gaW1wbGllZCBieSB0aGUgdGVybWNhcCA6a286IHN0cmluZy4gIE5vdGUKKyMgdGhlIDprbzogc3RyaW5nIGhhZCA6Y2w6IGluIGl0LCB3aGljaCBtZWFucyB0aGF0IG9uZSBvZiB0aGUgb3JpZ2luYWwKKyMgPGNsZWFyPVxFKj4sIDxrY2xyPVxFWT4gaGFkIHRvIGJlIHdyb25nOyBzZXQgPGtjbHI9XEUqPiBiZWNhdXNlIHRoYXQncyB3aGF0CisjIHRoZSA5NTAgaGFzLiAgIEZpbmFsbHksIGNvcnJlY3RlZCB0aGUgPGtlbD4gc3RyaW5nIHRvIG1hdGNoIHRoZSA5NTAgYW5kIHdoYXQKKyMga28gaW1wbGllcyAtLSBlc3IpCisjIElmIHRoZSBCU0QgdGVybWNhcCBmaWxlIHdhcyByaWdodCwgPGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWM+IHdvdWxkCisjIGFsc28gd29yay4KK3R2aTk1NXx0ZWxldmlkZW8gOTU1LAorCU9UYnMsIG1jNWksIG1zZ3JALAorCWl0IzgsIHhtY0AsCisJYWNzYz0wX2BSakhrR2xGbUVuSW9QcUtzUXRNdUx2T3dOeEosIGJsaW5rPVxFRzIsCisJY2l2aXM9XEUuMCwgY25vcm09XEUuMiwgY3VkMT1eViwgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN2dmlzPVxFLjEsIGRpbT1cRVs9NWgsIGluZEAsIGludmlzPVxFRzEsCisJaXMyPVxFWz0zbFxFRjFcRWRcRUcwXEVbPTVsXEUlXEVsLCBrY3RhYj1cRTIsIGtodHM9XEUxLAorCWtucD1cRUssIGtwcD1cRUosIGtybWlyPVxFUSwga3RiYz1cRTMsIG1jMD1cRVAsIHJtYWNzPVxFJSUsCisJcm1hbT1cRVs9N2wsIHJteG9uPV5OLAorCXJzMT1cRURGXEVDXEVnXEVyXEVPXEUnXEUoXEV3XEVYXEVlIFwwMTdcRTBQXEU2XDBcRTBwXEU0XDBcRWZcciwKKwlzZ3IwPVxFRzBcRVs9NWwsIHNtYWNzPVxFJCwgc21hbT1cRVs9N2gsIHNteG9uPV5PLAorCXVzZT10dmk5NTAsCit0dmk5NTUtd3w5NTUtd3x0ZWxldmlkZW85NTUgdy8xMzIgY29scywKKwljb2xzIzEzMiwKKwlpczI9XEVbPTNoXEVGMVxFZFxFRzBcRVs9NWxcRSVcRWwsIHVzZT10dmk5NTUsCisjIHVzZSBoYWxmLWludGVuc2l0eSBhcyBub3JtYWwgbW9kZSwgZnVsbCBpbnRlbnNpdHkgYXMgPGJvbGQ+Cit0dmk5NTUtaGJ8OTU1LWhifHRlbGV2aWRlbzk1NSBoYWxmLWJyaWdodCwKKwlib2xkPVxFWz01bCwgZGltQCwgaXMyPVxFWz0zbFxFRjFcRWRcRUcwXEVbPTVoXEUlXEVsLAorCXNncjA9XEVHMFxFWz01aCwgdXNlPXR2aTk1NSwKKyMgRnJvbTogSHVtYmVydG8gQXBwbGV0b24gPGJldG9AY3MudXRleGFzLmVkdT4sIDg4MDUyMSBVVCBBdXN0aW4KKyMgKHR2aTk3MDogcmVtb3ZlZCAiOnNnIzA6IjsgcmVtb3ZlZCA8cm1zbz49XEVbbSwgPHJtdWw+PVxFW207CisjIGFkZGVkIDxhbT4vPGNzcj4vPGhvbWU+LzxocGE+Lzx2cGE+LzxzbWN1cD4vPHJtY3VwPiBmcm9tIEJSTC4KKyMgQWNjb3JkaW5nIHRvIEJSTCB3ZSBjb3VsZCBoYXZlIDxybWt4Pj1cRT4sIDxzbWt4Pj1cRT0gYnV0IEknbSBub3Qgc3VyZSB3aGF0CisjIGl0IGRvZXMgdG8gdGhlIGZ1bmN0aW9uIGtleXMuICBJIGRlZHVjZWQgPHJtYW0+LzxzbWFtPi4KKyMgYWxzbyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmcsICAtLSBlc3IpCit0dmk5NzB8dGVsZXZpZGVvIDk3MCwKKwlPVGJzLCBPVHB0LCBhbSwgZGEsIGRiLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbMkosIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPVxFRCwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZGYsCisJY3V1MT1cRU0sIGN2dmlzPVxFWzFRLCBkY2gxPVxFW1AsIGRsMT1cRVtNLCBkc2w9XEVnXEVmXHIsCisJZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XEVbNW0kPDIwMC8+XEVbbSwgaG9tZT1cRVtILAorCWhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGlsMT1cRVtMLAorCWlzMj1cRTxcRVs/MjFsXEVbMTloXEVbMVFcRVsxMGxcRVs3bFxFW0hcRVsySiwKKwlrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2YxPVxFP2EsIGtmMj1cRT9iLCBrZjM9XEU/Yywga2Y0PVxFP2QsIGtmNT1cRT9lLCBrZjY9XEU/ZiwKKwlrZjc9XEU/Zywga2Y4PVxFP2gsIGtmOT1cRT9pLCBraG9tZT1cRVtILCByaT1cRU0sIHJtYWNzPVxFKEIsCisJcm1hbT1cRVs/N2gsIHJtY3VwPSwgcm1pcj1cRVs0bCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWFjcz1cRShCLCBzbWFtPVxFWz83bCwKKwlzbWN1cD1cRVs/MjBsXEVbPzdoXEVbMVEsIHNtaXI9XEVbNGgsIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdnBhPVxFWyVpJXAxJWRkLAordHZpOTcwLXZifHRlbGV2aWRlbyA5NzAgd2l0aCB2aXN1YWwgYmVsbCwKKwlmbGFzaD1cRVs/NWhcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFxFWz81bCwKKwl1c2U9dHZpOTcwLAordHZpOTcwLTJwfHRlbGV2aWRlbyA5NzAgd2l0aCB1c2luZyAyIHBhZ2VzIG9mIG1lbW9yeSwKKwlybWN1cD1cRVtIXEVbSlxFW1YsIHNtY3VwPVxFW1VcRVs/MjBsXEVbPzdoXEVbMVEsCisJdXNlPXR2aTk3MCwKKyMgV29ya3Mgd2l0aCB2aSBhbmQgcm9ndWUuICBOT1RFOiBFc2MgdiBzZXRzIGF1dG93cmFwIG9uLCBFc2MgdSBzZXRzIDgwIGNoYXJzCisjIHBlciBsaW5lIChyYXRoZXIgdGhhbiA0MCksIEVzYyBLIGNob29zZXMgdGhlIG5vcm1hbCBjaGFyYWN0ZXIgc2V0LiAgTm90IHN1cmUKKyMgcGFkZGluZyBpcyBuZWVkZWQsIGJ1dCBhZGFwdGVkIGZyb20gdGhlIHR2aTkyMGMgdGVybWNhcC4gIFRoZSA8c21zbz4gYW5kCisjIDxzbXVsPiBzdHJpbmdzIGFyZSBrbHV0enksIGJ1dCBhdCBsZWFzdCB1c2Ugbm8gc2NyZWVuIHNwYWNlLgorIyAodHZpcHQ6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS2teTGxeUl5MOiIuICBJIHdpc2ggd2Uga25ldyA8cm1hbT4sCisjIGl0cyBhYnNlbmNlIG1lYW5zIDxzbWFtPj1cRXYgaXNuJ3Qgc2FmZSB0byB1c2UuIC0tIGVzcikKKyMgRnJvbTogR2VuZSBSb2NobGluIDxhcm1zaXNAYW1iZXIuYmVya2VsZXkuZWR1PiA5LzE5Lzg0LgorIyBUaGUgPGVkPi88a2YwPi88a2YxPi88a2hvbWU+LzxtYzQ+LCBhbmQgPG1jNT4gY2FwcyBhcmUgZnJvbSBCUkwsIHdoaWNoIHNheXM6CisjIEYxIGFuZCBGMiBzaG91bGQgYmUgcHJvZ3JhbW1lZCBhcyBeQSBhbmQgXkI7IHJlcXVpcmVkIGZvciBVTklGWS4KK3R2aXB0fHRlbGV2aWRlbyBwZXJzb25hbCB0ZXJtaW5hbCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljYnQ9XEVJLCBjbGVhcj1eWiwgY3ViMT1eSCwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkbDE9XEVSJDw1Kj4sCisJZWQ9XEVZLCBlbD1cRVQsIGhvbWU9Xl4sIGlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwKKwlpbDE9XEVFJDw1Kj4sIGlzMj1cRXZcRXVcRUssIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywga2YwPV5BLCBrZjE9XkIsIGtob21lPV5eLCBtYzQ9XlQsIG1jNT1eUiwKKwlybXNvPVxFRiwgcm11bD1cRUYsIHNtc289XEVHMUBBXEVILCBzbXVsPVxFRzFCQFxFSCwKKyMgRnJvbTogTmF0aGFuIFBldGVyc29uIDxuYXRoYW5Ac2NvLmNvbT4sIDAzIFNlcCAxOTk2Cit0dmk5MDY1fHRlbGV2aWRlbyA5MDY1LAorCWFtLCBidywgY2h0cywgaHMsIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzEsIGxpbmVzIzI1LCBsbSMwLCBsdyM5LCBtYSM0LCBubGFiIzgsIHZ0IzAsCisJd251bSMwLCB3c2wjMzAsCisJYWNzYz0ncjBfamhrZ2xmbWVuaW9wcWtzcXRtdWx2b3dueGosIGJlbD1eRywKKwlibGluaz1cRUcyLCBib2xkPVxFR1wsLCBjYnQ9XEVJLCBjaXZpcz1cRS4wLCBjbGVhcj1eWiwKKwljbm9ybT1cRS4zLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XlYsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1PVxFWyVwMSVkQSwKKwljdXUxPV5LLCBjdnZpcz1cRS4yLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFVywgZGltPVxFR3AsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVSLCBkc2w9XEVfMzBcciwgZWNoPVxFWyVwMSVkQCwgZWQ9XEVZLAorCWVsPVxFVCwgZmxhc2g9XEViJDwxNT5cRWQsIGZzbD1eTSwgaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsCisJaWNoPVxFWyVwMSVkQCwgaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFRSwgaW5kPV5KLCBpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVHMSwKKwlpcD0kPDM+LAorCWlzMT1cRSJcRSVcRSdcRShcRUdAXEVPXEVYXEVbPTVsXEVbPTZsXEVbPTdoXEVkXEVyLAorCWlzMj1cRUYyXEVHMFxFXFxMLCBpczM9XEU8XEVbPTRsXEVbPThoLCBrSE9NPVxFXHNcc1xzLAorCWticz1eSCwga2NidD1cRUksIGtjdWIxPV5ILCBrY3VkMT1eViwga2N1ZjE9XkwsIGtjdXUxPV5LLAorCWtkY2gxPVxFVywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLCBrZjEyPV5BS1xyLAorCWtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLAorCWtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBsbD1cRVsyNTsxSCwKKwltYzA9XEVbMDswaSwgbWM0PVxFYSwgbWM1PVxFYCwgbmVsPV5NXkosCisJcGZrZXk9XEV8JXAxJXs0OH0lKyVjMyVwMiVzXDAzMSwKKwlwZmxvYz1cRXwlcDElezQ4fSUrJWMyJXAyJXNcMDMxLAorCXBmeD1cRXwlcDElezQ4fSUrJWMxJXAyJXNcMDMxLAorCXBsbj1cRV8lcDElezYzfSUrJWMlcDIlc1xyLCBwcm90PVxFJiwKKwlyZXA9XEVbJXAyJWRiJXAxJWMsIHJldj1cRUc0LAorCXJmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgcmk9XEVqLCByaW49XEVbJXAxJWRULAorCXJtYWNzPVxFJSUsIHJtYW09XEVbPTdsLCBybWN1cD1cRS4zXEVyXEVbMTsyNXJcRVsyNTswSCwKKwlybWRjPVwwLCBybWlyPVxFciwgcm1sbj1cRVs0OzF2LCBybXNvPVxFRzAsIHJtdWw9XEVHMCwKKwlybXhvbj1eTiwgcnMxPVxFQ1xFREZcRVswOzB2XEVbODsxdlxFWz02NWwsCisJcnMyPVxFLmJcRVsxMDsyMHZcRVsxNDsxdlxFWzM7MHZcRVs3OzB2XEVbPTExLmhcRVs9MTIuaFxFWz0xMy5oXEVbPTE0LmhcRVs9MTVsXEVbPTIwaFxFWz02MGxcRVs9NjFoXEVbPTlsXEVbPTEwbFxFWz0yMWxcRVs9MjNsXEVbPTNsXEVfNDBcRV81MFxFblxFd1xFZSBcRXgwXDBcMFxFeDFcMFwwXEV4MlwwXDBcRXgzXDBcMFxFeDRcMFwwXEUxLAorCXJzMz1cRVs9MTloXEUuM1xFOVxFME9cMFwwXDBcMFwwXEUwb1wwXDBcMFwwXDBcRTBKXDE3N1wwXDBcMFwwLAorCXNncj1cRUcwJT8lcDEldFxFR3QlOyU/JXAyJXRcRUc4JTslPyVwMyV0XEVHNCU7JT8lcDQldFxFRzIlOyU/JXA1JXRcRUdwJTslPyVwNiV0XEVHXCwlOyU/JXA3JXRcRUcxJTslPyVwOSV0XEUkJWVcRSUlJTssCisJc2dyMD1cRUcwLCBzbWFjcz1cRSQsIHNtYW09XEU9N2gsIHNtY3VwPVxFLjIsIHNtZGM9XEVyLAorCXNtaXI9XEVxLCBzbWxuPVxFWzQ7MnYsIHNtc289XEVHdCwgc211bD1cRUc4LCBzbXhvbj1eTywKKwl0YmM9XEUzLCB0c2w9XEVbNDsxdlxFXzMwLCB1Yz1cRUc4XEVHMCwKKworIyMjIyBWaXN1YWwgKHZpKQorIworIyBJbiBTZXB0ZW1iZXIgMTk5MywgVmlzdWFsIFRlY2hub2xvZ3kgb2YgV2VzdGJvcm8sIE1hc3NhY2h1c2V0dHMsCisjIG1lcmdlZCB3aXRoIFdoaXRlIFBpbmUgU29mdHdhcmUgb2YgTmFzaHVhLCBOZXcgSGFtcHNoaXJlLgorIworIyBXaGl0ZSBQaW5lIFNvZnR3YXJlIG1heSBiZSBjb250YWN0ZWQgYXQgKzEgNjAzLzg4Ni05MDUwLgorIyBPciB2aXNpdCBXaGl0ZSBQaW5lIG9uIHRoZSBXb3JsZCBXaWRlIFdlYiBhdCBVUkwgaHR0cDovL3d3dy53cGluZS5jb20uCisjCisKKyMgVmlzdWFsIDUwIGZyb20gQmVhdSBTaGVraXRhLCBCVEwtV2hpcHBhbnkgPHdodXhsYiFlanM+CisjIFJlY2VudGx5IEkgaGFja2VkIHRvZ2V0aGVyIHRoZSBmb2xsb3dpbmcgdGVybWNhcCBmb3IgVmlzdWFsCisjIFRlY2hub2xvZ3kncyBWaXN1YWwgNTAgdGVybWluYWwuIEl0J3MgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIG9mCisjIHRoZSB2dDUyIHRlcm1jYXAuCisjIEl0J3MgaW50ZW5kZWQgdG8gcnVuIHdoZW4gdGhlIFZpc3VhbCA1MCBpcyBpbiB2dDUyIGVtdWxhdGlvbiBtb2RlCisjIChJIGtub3cgd2hhdCB5b3UncmUgdGhpbmtpbmc7IGlmIGl0J3MgZW11bGF0aW5nIGEgdnQ1MiwgdGhlbiB3aHkKKyMgYW5vdGhlciB0ZXJtY2FwPyBXZWxsLCBpdCB0dXJucyBvdXQgdGhhdCB0aGUgVmlzdWFsIDUwIGNhbiBoYW5kbGUKKyMgPGRsMT4gYW5kIGRiKD8pIGFtb25nIG90aGVyIHRoaW5ncywgd2hpY2ggdGhlIHZ0NTIgY2FuJ3QpCisjIFRoZSB0ZXJtY2FwIHdvcmtzIE9LIGZvciB0aGUgbW9zdCBwYXJ0LiBUaGUgb25seSBwcm9ibGVtIGlzIG9uCisjIGNoYXJhY3RlciBpbnNlcnRzLiBUaGUgd2hvbGUgbGluZSBnZXRzIHBhaW5mdWxseSByZWRyYXduIGZvciBlYWNoCisjIGNoYXJhY3RlciB0eXBlZC4gQW55IHN1Z2dlc3Rpb25zPworIyBCZWF1J3MgZW50cnkgaXMgY29tYmluZWQgd2l0aCB0aGUgdmk1MCBlbnRyeSBmcm9tIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luLgorIyBOb3RlIGVzcGVjaWFsbHkgdGhlIDxpbDE+IGZ1bmN0aW9uLiAgPGtmND4tPGtmNj4gYXJlIHJlYWxseSBsNC1sNiBpbgorIyBkaXNndWlzZTsgPGtmNz4tPGtmOT4gYXJlIHJlYWxseSBsMS1sMy4KK3ZpNTB8dmlzdWFsIDUwLAorCU9UYnMsIE9UcHQsIGFtLCBkYSwgZGIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJT1RubD1eSiwgYmVsPV5HLCBjYnQ9XEV6JDw0Lz4sIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1cRUIsIGN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XEVBLCBkbDE9XEVNJDwzKi8+LCBlZD1cRUosIGVsPVxFSyQ8MTYvPiwgaG9tZT1cRUgsCisJaHQ9XkksIGlsMT1cRUwsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YxPVxFUCwga2YyPVxFUSwga2YzPVxFUiwga2Y0PVxFViwKKwlrZjU9XEVFLCBrZjY9XEVdLCBrZjc9XEVMLCBrZjg9XEV2LCBrZjk9XEVNLCBraG9tZT1cRUgsCisJbmVsPV5NXkosIHJpPVxFSSwgcm1zbz1cRVQsIHJtdWw9XEVXLCBzbXNvPVxFVSwgc211bD1cRVMsCisjIHRoaXMgb25lIHdhcyBCU0QgJiBTQ08ncyB2aTUwCit2aTUwYWRtfHZpc3VhbCA1MCBpbiBhZG0zYSBtb2RlLAorCWFtLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRsMT1cRU0sCisJZWQ9XEVrLCBlbD1cRUssIGhvbWU9XEVILCBodD1eSSwgaWwxPVxFTCwgaW5kPV5KLCBrYnM9XkgsCisJa2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBraG9tZT1cRUgsCisJcm1zbz1cRVQsIHNtc289XEVVLAorIyBGcm9tOiBKZWZmIFNpZWdhbCA8amJzQHF1aW90aXguY29tPgordmk1NXxWaXN1YWwgNTUsCisJT1RicywgYW0sIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRXYsIGNzcj1cRV8lcDElezY1fSUrJWMlcDIlezY1fSUrJWMsIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1cRUEsIGRjaDE9XEV3LCBkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLAorCWlsMT1cRUwsIGlzMj1cRXZcRV9BWFxFYlxFV1xFOVBcRVQsIGticz1eSCwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIHJpPVxFSSwgcm1pcj1cRWIsIHJtc289XEVULAorCXNtaXI9XEVhLCBzbXNvPVxFVSwKKworIyBWaXN1YWwgMjAwIGZyb20gQlJMCisjIFRoZSBmb2xsb3dpbmcgc3dpdGNoIHNldHRpbmdzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uOgorIwlGVUxMX0RVUExFWAkJU0NST0xMCQkJQ1IKKyMJQVVUT19ORVdfTElORV9PTglWSVNVQUxfMjAwX0VNVUxBVElPTl9NT0RFCisjIE90aGVyIHN3aXRjaGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yIGNvbW11bmljYXRpb24KKyMgcmVxdWlyZW1lbnRzLgorIyBDaGFyYWN0ZXIgaW5zZXJ0aW9uIGlzIGtsdWRnZWQgaW4gb3JkZXIgdG8gZ2V0IGFyb3VuZCB0aGUgImJlZXAiIG1pc2ZlYXR1cmUuCisjIChUaGlzIGNhcCBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgPHNtaXI+LzxybWlyPiBpcyBtb3JlIGVmZmljaWVudCAtLSBlc3IpCisjIFN1cHBvc2VkbHkgIjQqIiBkZWxheXMgc2hvdWxkIGJlIHVzZWQgZm9yIDxpbDE+LCA8ZWQ+LCA8Y2xlYXI+LCA8ZGNoMT4sCisjIGFuZCA8ZGwxPiBzdHJpbmdzLCBidXQgd2Ugc2VlbSB0byBnZXQgYWxvbmcgZmluZSB3aXRob3V0IHRoZW0uCit2aTIwMHx2aXN1YWwgMjAwLAorCU9UYnMsIE9UcHQsIGFtLCBtaXIsIG1zZ3IsCisJT1RrbiMxMCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz0sIGJlbD1eRywgY2J0PVxFeiwgY2xlYXI9XEV2LCBjbm9ybT1cRWMsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XEVBLCBjdnZpcz1cRWQsIGRjaDE9XEVPLCBkaW09XEU0LCBkbDE9XEVNLCBlZD1cRXksCisJZWw9XEV4LCBob21lPVxFSCwgaHQ9XkksIGh0cz1cRTEsIGlsMT1cRUwsIGluZD1eSiwgaW52aXM9XEVhLAorCWticz1eSCwga2Nscj1cRXYsIGtjdGFiPVxFMiwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtkY2gxPVxFTywga2RsMT1cRU0sIGtlZD1cRUosIGtlbD1cRXQsIGtmMD1cRT9wLAorCWtmMT1cRT9xLCBrZjI9XEU/ciwga2YzPVxFP3MsIGtmND1cRT90LCBrZjU9XEU/dSwga2Y2PVxFP3YsCisJa2Y3PVxFP3csIGtmOD1cRT94LCBrZjk9XEU/eSwga2hvbWU9XEVILCBraHRzPVxFMSwga2ljaDE9XEVpLAorCWtpbDE9XEVMLCBrcm1pcj1cRWosIG1jMD1cRUhcRV0sIG1jND1cRVgsIG1jNT1cRVcsIHJpPVxFSSwKKwlybWFjcz1cRUcsIHJta3g9XEU+LCBybXNvPVxFMywKKwlyczE9XEUzXEViXEVqXEVcRWxcRUdcRWNcRWtcRVgsIHNncjA9XEUzXEViLCBzbWFjcz1cRUYsCisJc21reD1cRT0sIHNtc289XEU0LCB0YmM9XEVnLAorIyBUaGUgb2xkZXIgVmlzdWFscyBkaWRuJ3QgY29tZSB3aXRoIGZ1bmN0aW9uIGtleXMuIFRoaXMgZW50cnkgdXNlcworIyA8c21reD4gYW5kIDxybWt4PiBzbyB0aGF0IHRoZSBrZXlwYWQga2V5cyBjYW4gYmUgdXNlZCBhcyBmdW5jdGlvbiBrZXlzLgorIyBJZiB5b3VyIHZlcnNpb24gb2YgdmkgZG9lc24ndCBzdXBwb3J0IGZ1bmN0aW9uIGtleXMgeW91IG1heSB3YW50CisjIHRvIHVzZSB2aTIwMC1mLgordmkyMDAtZnx2aXN1YWwgMjAwIG5vIGZ1bmN0aW9uIGtleXMsCisJaXMyPVxFM1xFYlxFalxFXFxcRWxcRUdcRWRcRWssIGtmMD1cRT9wLCBrZjE9XEU/cSwKKwlrZjI9XEU/ciwga2YzPVxFP3MsIGtmND1cRT90LCBrZjU9XEU/dSwga2Y2PVxFP3YsIGtmNz1cRT93LAorCWtmOD1cRT94LCBrZjk9XEU/eSwgcm1reD1cRT4sIHJtc29ALCBzbWt4PVxFPSwgc21zb0AsCisJdXNlPXZpMjAwLAordmkyMDAtcnZ8dmlzdWFsIDIwMCByZXZlcnNlIHZpZGVvLAorCWNub3JtQCwgY3Z2aXNALCByaUAsIHJtc289XEUzLCBzbXNvPVxFNCwgdXNlPXZpMjAwLAorCisjIHRoZSBmdW5jdGlvbiBrZXlzIGFyZSBwcm9ncmFtbWFibGUgYnV0IHdlIGRvbid0IHJlcHJvZ3JhbSB0aGVtIHRvIHRoZWlyCisjIGRlZmF1bHQgdmFsdWVzIHdpdGggPGlzMj4gYmVjYXVzZSBwcm9ncmFtbWluZyB0aGVtIGlzIHZlcnkgdmVyYm9zZS4gbWF5YmUKKyMgYW4gaW5pdGlhbGl6YXRpb24gZmlsZSBzaG91bGQgYmUgbWFkZSBmb3IgdGhlIDMwMCBhbmQgdGhleSBjb3VsZCBiZSBzdHVjaworIyBpbiBpdC4KKyMgKHZpMzAwOiBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIGluaXQgc3RyaW5nIC0tIGVzcikKK3ZpMzAwfHZpc3VhbCAzMDAgYW5zaSB4My42NCwKKwlhbSwgYncsIG1pciwgeGVubCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwlkY2gxPVxFW1AkPDQwPiwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksCisJaWwxPVxFW0wsIGluZD1eSiwKKwlpczI9XEVbN3NcRVsyOzM7NDsyMDs/NTs/NmxcRVsxMjs/N2hcRVsxUVxFWzA7MShEXEVbOHMsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVfQVxFXFwsIGtmMj1cRV9CXEVcXCwga2YzPVxFX0NcRVxcLCBrZjQ9XEVfRFxFXFwsCisJa2Y1PVxFX0VcRVxcLCBrZjY9XEVfRlxFXFwsIGtmNz1cRV9HXEVcXCwga2Y4PVxFX0hcRVxcLAorCWtmOT1cRV9JXEVcXCwga2hvbWU9XEVbSCwgcmk9XEVNLCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzFtLCBzbXVsPVxFWzRtLAorIyBzb21lIG9mIHRoZSB2aTMwMHMgaGF2ZSBvbGRlciBmaXJtd2FyZSB0aGF0IGhhcyB0aGUgY29tbWFuZAorIyBzZXF1ZW5jZSBmb3Igc2V0dGluZyBlZGl0aW5nIGV4dGVudCByZXZlcnNlZC4KK3ZpMzAwLW9sZHx2aXN1YWwgMzAwIHdpdGggb2xkIGZpcm13YXJlIChzZXQgZWRpdCBleHRlbnQgcmV2ZXJzZWQpLAorCWlzMj1cRVs3c1xFWzI7Mzs0OzIwOz81Oz82bFxFWzEyOz83aFxFWzJRXEVbMDsxKERcRVs4cywKKwl1c2U9dmkzMDAsCisKKyMgVmlzdWFsIDUwMCBwcm90b3R5cGUgZW50cnkgZnJvbSBVbml2ZXJzaXR5IG9mIFdpc2NvbnNpbi4KKyMgVGhlIGJlc3QgcGxhY2UgdG8gbG9vayBmb3IgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgaXMgcGFnZSBBMS0xIG9mIHRoZQorIyBWaXN1YWwgNTAwIG1hbnVhbC4gIFRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBnaXZlbiBoZXJlIG1heSBiZQorIyBvdmVya2lsbCwgYnV0IGl0IGRvZXMgbGVhdmUgb3V0IHNvbWUgb2YgdGhlIGluaXRpYWxpemF0aW9ucyB3aGljaCBjYW4KKyMgYmUgZG9uZSB3aXRoIHRoZSBtZW51cyBpbiBzZXQtdXAgbW9kZS4KKyMgVGhlIDp4cDogbGluZSBiZWxvdyBpcyBzbyB0aGF0IGVtYWNzIGNhbiB1bmRlcnN0YW5kIHRoZSBwYWRkaW5nIHJlcXVpcmVtZW50cworIyBvZiB0aGlzIHNsb3cgdGVybWluYWwuICA6eHA6IGlzIDEwIHRpbWUgdGhlIHBhZGRpbmcgZmFjdG9yLgorIyAodmk1MDA6IHJlbW92ZWQgdW5rbm93biA6eHAjNDogdGVybWNhcDsKKyMgYWxzbyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmcgLS0gZXNyKQordmk1MDB8dmlzdWFsIDUwMCwKKwlhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzMzLAorCWFjc2M9LCBjYnQ9XEV6JDw0Lz4sIGNsZWFyPVxFdiQ8NiovPiwgY3I9Xk0sCisJY3NyPVxFKCVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3ViMT1eSCwgY3VkMT1cRUIsCisJY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWRjaDE9XEVPJDwzKi8+LCBkbDE9XEVNJDwzKi8+LCBlZD1cRXkkPDMqLz4sCisJZWw9XEV4JDwxNi8+LCBob21lPVxFSCwgaHQ9XDAxMSQ8OC8+LCBpbDE9XEVMXEV4JDwzKi8+LAorCWluZD1eSiwKKwlpczI9XEUzXEVcMDAxXEVcMDA3XEVcMDAzXEVrXEVHXEVkXEVYXEVsXEU+XEViXEVcXCwKKwlrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlraG9tZT1cRUgsIG5lbD1eTV5KLCBybWFjcz1eTywgcm1pcj1cRWosIHJtc289XEVeRywKKwlybXVsPVxFXkMsIHNtYWNzPV5OLCBzbWlyPVxFaSwgc21zbz1cRV5ILCBzbXVsPVxFXkQsCisKKyMgVGhlIHZpc3VhbCA1NTAgaXMgYSB2aXN1YWwgMzAwIHdpdGggdGVrdHJvbml4IGdyYXBoaWNzLAorIyBhbmQgd2l0aCAzMyBsaW5lcy4gY2xlYXIgc2NyZWVuIGlzIG1vZGlmaWVkIGhlcmUgdG8KKyMgYWxzbyBjbGVhciB0aGUgZ3JhcGhpY3MuCit2aTU1MHx2aXN1YWwgNTUwIGFuc2kgeDMuNjQsCisJbGluZXMjMzMsCisJY2xlYXI9XDAzMFxFW0hcRVsySiwgdXNlPXZpMzAwLAorCit2aTYwM3x2aXN1YWw2MDN8dmlzdWFsIDYwMywKKwlocywgbWlyLAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVtKLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWRzbD1cRVAyOzF+XEVcXCwgZWQ9XEVbSiwgZWw9XEVbSywgZnNsPVxFXFwsIGlsMT1cRVtMLAorCWluZD1cRUQsIGlzMT1cRT5cRVs/M2xcRVs/NGxcRVs/N2hcRVs/OGhcRVsxOzI0ciwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcm1pcj1cRVs0bCwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXNncjA9XEVbbSwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdHNsPVxFUDJ+LAorCXVzZT12dDEwMCwKKworIyMjIyBXeXNlICh3eSkKKyMKKyMJV3lzZSBUZWNobm9sb2d5CisjCTM0NzEgTm9ydGggRmlyc3QgU3RyZWV0CisjCVNhbiBKb3NlLCBDQSA5NTEzNAorIwlWb3g6ICg0MDgpLTQ3My0xMjAwCisjCUZheDogKDQwOCkgNDczLTEyMjIKKyMJV2ViOiBodHRwOi8vd3d3Lnd5c2UuY29tCisjCisjIFd5c2Ugc2FsZXMgY2FuIGJlIHJlYWNoZWQgYnkgcGhvbmUgYXQgMS04MDAtR0VULVdZU0UuICBUZWNoIHN1cHBvcnQgaXMgYXQKKyMgKDgwMCktODAwLVdZU0UgKG9wdGlvbiA1IGdldHMgeW91IGEgaHVtYW4pLiAgVGhlcmUncyBhIFdlYiBwYWdlIGF0IHRoZQorIyBvYnZpb3VzIGFkZHJlc3MsIDxodHRwOi8vd3d3Lnd5c2UuY29tPi4gIFRoZXkga2VlcCB0ZXJtaW5mbyBlbnRyaWVzIGF0CisjIDxodHRwOi8vd3d3Lnd5c2UuY28udWsvc3VwcG9ydC9hcHBub3Rlcy9pZHhhcHBudC5odG0+LgorIworIyBXeXNlIGJvdWdodCBvdXQgTGluayBUZWNobm9sb2d5LCBJbmMuIGluIDE5OTAgYW5kIGNsb3NlZCBpdCBkb3duIGluIDE5OTUuCisjIFRoZXkgbm93IG93biB0aGUgUXVtZSBhbmQgQW1kZWsgYnJhbmRzLCB0b28uICBTbyB0aGVzZSBhcmUgdGhlIHBlb3BsZSB0bworIyB0YWxrIHdpdGggYWJvdXQgYWxsIExpbmssIFF1bWUsIGFuZCBBbWRlayB0ZXJtaW5hbHMuCisjCisjIFRoZXNlIGVudHJpZXMgaW5jbHVkZSBhIGZldyBzbWFsbCBmaXhlcy4KKyMgSSBjYW5jZWxlZCB0aGUgYmVsIGNhcGFjaXRpZXMgaW4gdGhlIHZiIGVudHJpZXMuCisjIEkgbWFkZSB0d28gdHJpdmlhbCBzeW50YXggZml4ZXMgaW4gdGhlIHd5c2UzMCBlbnRyeS4KKyMgSSBtYWRlIHNvbWUgZW50cmllcyByZWxhdGl2ZSB0byBhZG0rc2dyLgorIworIworIyBOb3RlOiBUaGUgd3lzZTc1LCB3eXNlODUsIGFuZCB3eXNlOTkgaGF2ZSBiZWVuIGRpc2NvbnRpbnVlZC4KKworIwkgICBBbHRob3VnaCB0aGUgV3lzZSAzMCBjYW4gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZQorIwlpdCByZXF1aXJlcyBtYWdpYyBjb29raWVzIHRvIGRvIHNvLiAgTWFueSBhcHBsaWNhdGlvbnMgZG8gbm90CisjCWZ1bmN0aW9uIHdlbGwgd2l0aCBtYWdpYyBjb29raWVzLiAgVGhlIGZvbGxvd2luZyB0ZXJtaW5mbyB1c2VzCisjCXRoZSBwcm90ZWN0IG1vZGUgdG8gc3VwcG9ydCBvbmUgYXR0cmlidXRlIChkaW0pIHdpdGhvdXQgY29va2llcy4KKyMJSWYgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUgaXMgbmVlZGVkIHRoZW4gdGhlIHd5MzAtbWMgdGVybWluZm8KKyMJc2hvdWxkIGJlIHVzZWQuCisjCit3eTMwfHd5c2UzMHxXeXNlIDMwLAorCWFtLCBidywgaHMsIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBtYSMxLCBubGFiIzgsIHdzbCM0NSwKKwlhY3NjPTB3YV9oW2p1a3Nscm1xbnhxenR0dXl2XXdweHYsIGJlbD1eRywgY2J0PVxFSSwKKwljaXZpcz1cRWAwLCBjbGVhcj1cRSskPDgwPiwgY25vcm09XEVgMSwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPV5LLCBkY2gxPVxFVyQ8MTA+LCBkaW09XEVgN1xFKSwgZGwxPVxFUiQ8MT4sCisJZHNsPVxFRlxyLCBlZD1cRVkkPDgwPiwgZWw9XEVULCBmbGFzaD1cRWA4JDwxMDAvPlxFYDksCisJZnNsPV5NLCBob21lPV5eLCBodD1cMDExJDwxPiwgaHRzPVxFMSwgaWwxPVxFRSQ8Mj4sCisJaW5kPVxuJDwyPiwgaXA9JDwyPiwgaXMyPVxFJ1xFKFxFXF4zXEVgOVwwMTZcMDI0LAorCWtIT009XEV7LCBrYnM9XkgsIGtjYnQ9XEVJLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEVZLCBrZWw9XEVULCBrZW50PVxFNywKKwlrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwKKwlrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBraG9tZT1eXiwga2ljaDE9XEVRLAorCWtpbDE9XEVFLCBrbnA9XEVLLCBrcHA9XEVKLCBrcnBsPVxFciwgbGw9Xl5eSywgbWMwPVxFUCwgbWM0PV5ULAorCW1jNT1eWCwgbmVsPV5NXkosIHBmeD1cRXolcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGxuPVxFeiVwMSV7NDd9JSslYyVwMiVzXHIsIHByb3Q9XEVgN1xFKSwgcmk9XEVqJDwzPiwKKwlybWFjcz1cRUheQywgcm1pcj1cRXIsIHJtbG49XEVBMTEsIHJtc289XEUoLAorCXNncj0lPyVwMSVwNSVwOCV8JXwldFxFYDdcRSklZVxFKCU7JT8lcDkldFxFSFwwMDIlZVxFSFwwMDMlOywKKwlzZ3IwPVxFKFxFSFwwMDMsIHNtYWNzPVxFSF5CLCBzbWlyPVxFcSwgc21sbj1cRUExMCwKKwlzbXNvPVxFYDdcRSksIHRiYz1cRTAsIHRzbD1cRUYsCisjCisjCVRoaXMgdGVybWluYWwgZGVzY3JpcHRpb24gdXNlcyB0aGUgbm9uLWhpZGRlbiBhdHRyaWJ1dGUgbW9kZQorIwkod2l0aCBtYWdpYyBjb29raWUpLgorIworIyAod3kzMC1tYzogYWRkZWQgPHNtY3VwPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZyAtLWVzcikKK3d5MzAtbWN8d3lzZTMwLW1jfHd5c2UgMzAgd2l0aCBtYWdpYyBjb29raWVzLAorCW1zZ3JALAorCW1hQCwgeG1jIzEsCisJYmxpbms9XEVHMiwgZGltPVxFR3AsIHByb3Q9XEVHMFxFKSwgcm1hY3M9XEVHMFxFSFwwMDMsCisJcm1jdXA9XEVHMCwgcm1zbz1cRUcwLAorCXNncj1cRUclezQ4fSU/JXAyJXA2JXwldCV7OH0lfCU7JT8lcDElcDMlfCVwNiV8JXQlezR9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXAxJXA1JXwldCV7NjR9JXwlOyU/JXA3JXQlezF9JXwlOyVjJT8lcDgldFxFKSVlXEUoJTslPyVwOSV0XEVIXDAwMiVlXEVIXDAwMyU7LAorCXNncjA9XEVHMFxFKFxFSFwwMDMsIHNtYWNzPVxFRzBcRUhcMDAyLCBzbWN1cD0sCisJc21zbz1cRUc0LCB1c2U9d3kzMCwgdXNlPWFkbStzZ3IsCisjCVRoZSBtYW5kYXRvcnkgcGF1c2UgdXNlZCBieSA8Zmxhc2g+IGRvZXMgbm90IHdvcmsgd2l0aAorIwlvbGRlciB2ZXJzaW9ucyBvZiB0ZXJtaW5mby4gIElmIHlvdSBzZWUgdGhpcyBlZmZlY3QgdGhlbgorIwl1bnNldCB4b24gYW5kIGRlbGV0ZSB0aGUgLyBmcm9tIHRoZSBkZWxheS4KKyMJaS5lLiBjaGFuZ2UgJDwxMDAvPiB0byAkPDEwMD4KK3d5MzAtdmJ8d3lzZTMwLXZifHd5c2UgMzAgdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTMwLAorIworIwkgICBUaGUgV3lzZSA1MCBjYW4gc3VwcG9ydCBvbmUgYXR0cmlidXRlIChlLmcuIERpbSwgSW52ZXJzZSwKKyMJTm9ybWFsKSB3aXRob3V0IG1hZ2ljIGNvb2tpZXMgYnkgdXNpbmcgdGhlIHByb3RlY3QgbW9kZS4KKyMJVGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiB1c2VzIHRoaXMgZmVhdHVyZSwgYnV0IHdoZW4gbW9yZQorIwl0aGFuIG9uZSBhdHRyaWJ1dGUgaXMgcHV0IG9uIHRoZSBzY3JlZW4gYXQgb25jZSwgYWxsIGF0dHJpYnV0ZXMKKyMJd2lsbCBiZSBjaGFuZ2VkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBsYXN0IGF0dHJpYnV0ZSBnaXZlbi4KKyMJICAgVGhlIFd5c2UgNTAgY2FuIHN1cHBvcnQgbW9yZSBhdHRyaWJ1dGVzIHdoZW4gdXNlZCB3aXRoIG1hZ2ljCisjCWNvb2tpZXMuICBUaGUgd3k1MC1tYyB0ZXJtaW5hbCBkZXNjcmlwdGlvbiB1c2VzIG1hZ2ljIGNvb2tpZXMKKyMJdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aXBsZSBhdHRyaWJ1dGVzIG9uIGEgc2NyZWVuLgorIword3k1MHx3eXNlNTB8V3lzZSA1MCwKKwlhbSwgYncsIGhzLCBtYzVpLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBsaCMxLCBsaW5lcyMyNCwgbHcjOCwgbWEjMSwgbmxhYiM4LCB3c2wjNDUsCisJYWNzYz0wd2FfaFtqdWtzbHJtcW54cXp0dHV5dl13cHh2LCBiZWw9XkcsIGNidD1cRUksCisJY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDwyMD4sIGNub3JtPVxFYDEsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1eSywgZGNoMT1cRVckPDE+LCBkaW09XEVgN1xFKSwgZGwxPVxFUiwgZHNsPVxFRlxyLAorCWVkPVxFWSQ8MjA+LCBlbD1cRVQsIGZsYXNoPVxFYDgkPDEwMC8+XEVgOSwgZnNsPV5NLAorCWhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLCBpbDE9XEVFLCBpbmQ9XG4kPDI+LCBpcD0kPDE+LAorCWlzMT1cRWBcOlxFYDkkPDMwPiwgaXMyPVwwMTZcMDI0XEUnXEUoLCBrSE9NPVxFeywga2JzPV5ILAorCWtjYnQ9XEVJLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLAorCWtkbDE9XEVSLCBrZWQ9XEVZLCBrZWw9XEVULCBrZW50PVxFNywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLAorCWtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsCisJa2YxNj1eQU9cciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLAorCWtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sCisJa2ljaDE9XEVRLCBraWwxPVxFRSwga25wPVxFSywga3BwPVxFSiwga3BydD1cRVAsIGtycGw9XEVyLAorCWxsPV5eXkssIG1jMD1cRVAsIG1jND1eVCwgbWM1PV5YLCBuZWw9Xk1eSiwKKwlwZng9XEV6JXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBsbj1cRXolcDElezQ3fSUrJWMlcDIlc1xyLCBwcm90PVxFYDdcRSksIHJldj1cRWA2XEUpLAorCXJpPVxFaiwgcm1hY3M9XEVIXkMsIHJtaXI9XEVyLCBybWxuPVxFQTExLCBybXNvPVxFKCwKKwlzZ3I9JT8lcDElcDMlfCV0XEVgNlxFKSVlJXA1JXA4JXwldFxFYDdcRSklZVxFKCU7JT8lcDkldFxFSFwwMDIlZVxFSFwwMDMlOywKKwlzZ3IwPVxFKFxFSFwwMDMsIHNtYWNzPVxFSF5CLCBzbWlyPVxFcSwgc21sbj1cRUExMCwKKwlzbXNvPVxFYDZcRSksIHRiYz1cRTAsIHRzbD1cRUYsCisjCisjCVRoaXMgdGVybWluYWwgZGVzY3JpcHRpb24gdXNlcyB0aGUgbm9uLWhpZGRlbiBhdHRyaWJ1dGUgbW9kZQorIwkod2l0aCBtYWdpYyBjb29raWUpLgorIworIwlUaGUgbWFuZGF0b3J5IHBhdXNlIHVzZWQgYnkgZmxhc2ggZG9lcyBub3Qgd29yayB3aXRoIHNvbWUKKyMJb2xkZXIgdmVyc2lvbnMgb2YgdGVybWluZm8uICBJZiB5b3Ugc2VlIHRoaXMgZWZmZWN0IHRoZW4KKyMJdW5zZXQgPHhvbj4gYW5kIGRlbGV0ZSB0aGUgLyBmcm9tIHRoZSBkZWxheS4KKyMJaS5lLiBjaGFuZ2UgJDwxMDAvPiB0byAkPDEwMD4KKyMgKHd5NTAtbWM6IGFkZGVkIDxzbWN1cD4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmcgLS1lc3IpCit3eTUwLW1jfHd5c2U1MC1tY3x3eXNlIDUwIHdpdGggbWFnaWMgY29va2llcywKKwltc2dyQCwKKwltYUAsIHhtYyMxLAorCWJsaW5rPVxFRzIsIGRpbT1cRUdwLCBwcm90PVxFRzBcRSksIHJldj1cRUc0LAorCXJtYWNzPVxFRzBcRUhcMDAzLCBybWN1cD1cRUcwLCBybXNvPVxFRzAsCisJc2dyPVxFRyV7NDh9JT8lcDIlcDYlfCV0JXs4fSV8JTslPyVwMSVwMyV8JXA2JXwldCV7NH0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDElcDUlfCV0JXs2NH0lfCU7JT8lcDcldCV7MX0lfCU7JWMlPyVwOCV0XEUpJWVcRSglOyU/JXA5JXRcRUhcMDAyJWVcRUhcMDAzJTssCisJc2dyMD1cRUcwXEUoXEVIXDAwMywgc21hY3M9XEVHMFxFSFwwMDIsIHNtY3VwPSwKKwlzbXNvPVxFR3QsIHVzZT13eTUwLCB1c2U9YWRtK3NnciwKK3d5NTAtdmJ8d3lzZTUwLXZifHd5c2UgNTAgdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTUwLAord3k1MC13fHd5c2U1MC13fHd5c2UgNTAgMTMyLWNvbHVtbiwKKwljb2xzIzEzMiwgbHcjNywgbmxhYiMxNiwgd3NsIzk3LAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQywgZGNoMT1cRVckPDI+LCBpczE9XEVgO1xFYDkkPDMwPiwKKwl1c2U9d3k1MCwKK3d5NTAtd3ZifHd5c2U1MC13dmJ8d3lzZSA1MCAxMzItY29sdW1uIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3k1MC13LAorCisjCisjCVRoZSBXeXNlIDM1MCBpcyBhIFd5c2UgNTAgd2l0aCBjb2xvci4KKyMJVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHRoYXQgaXQgaGFzIG1hZ2ljIGNvb2tpZXMuCisjCVRoZSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBkZXNpZ25lZCB0byBvdmVybGFwIHRoZSByZXZlcnNlLCBkaW0gYW5kCisjCXVuZGVybGluZSBhdHRyaWJ1dGVzLiAgVGhpcyBpcyBuaWNlIGZvciBtb25vY2hyb21lIGFwcGxpY2F0aW9ucworIwliZWNhdXNlIHlvdSBjYW4gbWFrZSB1bmRlcmxpbmUgc3R1ZmYgZ3JlZW4gKG9yIGFueSBvdGhlciBjb2xvcikKKyMJYnV0IGZvciB0cnVlIGNvbG9yIGFwcGxpY2F0aW9ucyBpdCdzIG5vdCBzbyBob3QgYmVjYXVzZSB5b3UgY2Fubm90CisjCW1peCBjb2xvciB3aXRoIHJldmVyc2UsIGRpbSBvciB1bmRlcmxpbmUuCisjCSAgICBUbyBmdXJ0aGVyIGNvbXBsaWNhdGUgdGhpbmdzIG9uZSBvZiB0aGUgYXR0cmlidXRlcyBtdXN0IGJlCisjCWJsYWNrIChlaXRoZXIgdGhlIGZvcmVncm91bmQgb3IgdGhlIGJhY2tncm91bmQpLiAgSW4gcmV2ZXJzZSB2aWRlbworIwl0aGUgYmFja2dyb3VuZCBjaGFuZ2VzIGNvbG9yIHdpdGggYmxhY2sgbGV0dGVycy4gIEluIG5vcm1hbCB2aWRlbworIwl0aGUgZm9yZWdyb3VuZCBjaGFuZ2VzIGNvbG9ycyBvbiBhIGJsYWNrIGJhY2tncm91bmQuCisjCSAgICBUaGlzIHRlcm1pbmZvIHVzZXMgc29tZSBvZiB0aGUgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBvZiBjdXJzZXMKKyMJdG8gZGlzcGxheSBib3RoIGNvbG9yIGFuZCBibGluay4gIEluIHRoZSBmaW5hbCBhbmFseXNpcyBJIGFtIG5vdAorIwlzdXJlIHRoYXQgdGhlIHd5MzUwIHJ1bnMgYmV0dGVyIHdpdGggdGhpcyB0ZXJtaW5mbyB0aGFuIGl0IGRvZXMKKyMJd2l0aCB0aGUgd3k1MCB0ZXJtaW5mbyAod2l0aCB1c2VyIGFkanVzdGVkIGNvbG9ycykuCisjCisjCVRoZSBtYW5kYXRvcnkgcGF1c2UgdXNlZCBieSBmbGFzaCBkb2VzIG5vdCB3b3JrIHdpdGgKKyMJb2xkZXIgdmVyc2lvbnMgb2YgdGVybWluZm8uICBJZiB5b3Ugc2VlIHRoaXMgZWZmZWN0IHRoZW4KKyMJdW5zZXQgeG9uIGFuZCBkZWxldGUgdGhlIC8gZnJvbSB0aGUgZGVsYXkuCisjCWkuZS4gY2hhbmdlICQ8MTAwLz4gdG8gJDwxMDA+CisjCisjIEJ1ZzogVGhlIDxvcD4gY2FwYWJpbGl0eSByZXNldHMgYXR0cmlidXRlcy4KK3d5MzUwfHd5c2UzNTB8V3lzZSAzNTAsCisJYW0sIGJ3LCBocywgbWM1aSwgbWlyLCB4b24sCisJY29sb3JzIzgsIGNvbHMjODAsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBuY3YjNTUsIG5sYWIjOCwgcGFpcnMjOCwKKwl3c2wjNDUsIHhtYyMxLAorCWFjc2M9MHdhX2hbanVrc2xybXFueHF6dHR1eXZdd3B4diwgYmVsPV5HLCBibGluaz1cRUcyLAorCWNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVxFKyQ8MjA+LCBjbm9ybT1cRWAxLCBjcj1eTSwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXJDwxPiwKKwlkaW09XEVHcCwgZGwxPVxFUiwgZHNsPVxFRlxyLCBlZD1cRVkkPDIwPiwgZWw9XEVULAorCWZsYXNoPVxFYDgkPDEwMC8+XEVgOSwgZnNsPV5NLCBob21lPV5eLCBodD1eSSwgaHRzPVxFMSwKKwlpbDE9XEVFLCBpbmQ9XG4kPDI+LCBpcD0kPDE+LCBpczE9XEVgXDpcRWA5JDwzMD4sCisJaXMyPVwwMTZcMDI0XEUnXEUoLCBpczM9XEUlPywga0hPTT1cRXssIGticz1eSCwga2NidD1cRUksCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsCisJa2VkPVxFWSwga2VsPVxFVCwga2VudD1cRTcsIGtmMT1eQUBcciwga2YxMD1eQUlcciwKKwlrZjExPV5BSlxyLCBrZjEyPV5BS1xyLCBrZjEzPV5BTFxyLCBrZjE0PV5BTVxyLCBrZjE1PV5BTlxyLAorCWtmMTY9XkFPXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwKKwlrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLAorCWtpY2gxPVxFUSwga2lsMT1cRUUsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLCBrcnBsPVxFciwKKwlsbD1eXl5LLCBtYzA9XEVQLCBtYzQ9XlQsIG1jNT1eWCwgbmVsPV5NXkosIG9jPVxFJT8sIG9wPVxFRzAsCisJcGZ4PVxFeiVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwbG49XEV6JXAxJXs0N30lKyVjJXAyJXNcciwgcHJvdD1cRUcwXEUpLCByaT1cRWosCisJcm1hY3M9XEVHMFxFSFwwMDMsIHJtaXI9XEVyLCBybWxuPVxFQTExLCBzZXRiPSwKKwlzZXRmPSU/JXAxJXswfSU9JXQlezc2fSVlJXAxJXsxfSU9JXQlezY0fSVlJXAxJXsyfSU9JXQlezh9JWUlcDElezN9JT0ldCV7NzJ9JWUlcDElezR9JT0ldCV7NH0lZSVwMSV7NX0lPSV0JXs2OH0lZSVwMSV7Nn0lPSV0JXsxMn0lZSVwMSV7N30lPSV0JXswfSU7JVBDXEVHJWdDJWdBJSslezQ4fSUrJWMsCisJc2dyPSV7MH0lPyVwNCV0JXsyfSV8JTslPyVwNyV0JXsxfSV8JTslUEFcRUclPyVnQyV0JWdDJWUlezB9JT8lcDEldCV7NH0lfCU7JT8lcDIldCV7OH0lfCU7JT8lcDMldCV7NH0lfCU7JT8lcDUldCV7NjR9JXwlOyU7JWdBJSslezQ4fSUrJWMlPyVwOCV0XEUpJWVcRSglOyU/JXA5JXRcRUhcMDAyJWVcRUhcMDAzJTssCisJc2dyMD1cRUcwXEUoXEVIXDAwMyV7MH0lUEElezB9JVBDLCBzbWFjcz1cRUcwXEVIXDAwMiwKKwlzbWlyPVxFcSwgc21sbj1cRUExMCwgdGJjPVxFMCwgdHNsPVxFRiwgdXNlPWFkbStzZ3IsCit3eTM1MC12Ynx3eXNlMzUwLXZifHd5c2UgMzUwIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3kzNTAsCit3eTM1MC13fHd5c2UzNTAtd3x3eXNlIDM1MCAxMzItY29sdW1uLAorCWNvbHMjMTMyLCBsdyM3LCBubGFiIzE2LCB3c2wjOTcsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDLCBkY2gxPVxFVyQ8Mj4sIGlzMT1cRWA7XEVgOSQ8MzA+LAorCXVzZT13eTM1MCwKK3d5MzUwLXd2Ynx3eXNlMzUwLXd2Ynx3eXNlIDM1MCAxMzItY29sdW1uIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3kzNTAtdywKKyMKKyMJVGhpcyB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBpcyB1bnRlc3RlZC4KKyMJVGhlIHd5c2UxMDAgZW11bGF0ZXMgYW4gYWRtMzEsIHNvIHRoZSBhZG0zMSBlbnRyeSBzaG91bGQgd29yay4KKyMKK3d5MTAwfHd5c2UgMTAwLAorCWhzLCBtaXIsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCWJlbD1eRywgY2xlYXI9XEU7LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBkc2w9XEVBMzEsIGVkPVxFWSwgZWw9XEVULCBmc2w9Xk0sIGlsMT1cRUUsIGluZD1eSiwKKwlpbnZpc0AsIGlzMj1cRXVcRTAsIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywga2YxPV5BQFxyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLAorCWtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2hvbWU9XEV7LAorCXJtaXI9XEVyLCBzbWlyPVxFcSwgdHNsPVxFRiwgdXNlPWFkbStzZ3IsCisjCisjCVRoZSBXeXNlIDEyMC8xNTAgaGFzIG1vc3Qgb2YgdGhlIGZlYXR1cmVzIG9mIHRoZSBXeXNlIDYwLgorIwlUaGlzIHRlcm1pbmFsIGRvZXMgbm90IG5lZWQgcGFkZGluZyB1cCB0byA5NjAwIGJhdWQhCisjCTxtc2dyPiBzaG91bGQgYmUgc2V0IGJ1dCB0aGUgY2xlYXIgc2NyZWVuIGZhaWxzIHdoZW4gaW4KKyMJYWx0LWNoYXJzZXQgbW9kZS4gIFRyeSBcRWNFXHNcc1xFK1xzIGlmIHRoZSBzY3JlZW4gaXMgcmVhbGx5IGNsZWFyCisjCXRoZW4gc2V0IDxtc2dyPi4KKyMKK3d5MTIwfHd5c2UxMjB8d3kxNTB8d3lzZTE1MHxXeXNlIDEyMC8xNTAsCisJYW0sIGJ3LCBocywga20sIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHBiIzk2MDEsIHdzbCM0NSwKKwlhY3NjPSsvXCwuMFtpaGEyZnhncWgxallrP2xabUBuRXFEdEN1NHZBd0J4M3lzenJ7Y35+LAorCWJlbD1eRywgYmxpbms9XEVHMiwgY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDw1MD4sCisJY25vcm09XEVgMSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVckPDc+LAorCWRpbT1cRUdwLCBkbDE9XEVSJDwzPiwgZHNsPVxFRlxyLCBlZD1cRVkkPDUwPiwgZWw9XEVUJDw0PiwKKwlmbGFzaD1cRWA4JDwxMDAvPlxFYDksIGZzbD1eTSwgaG9tZT1eXiwgaHQ9XDAxMSQ8MT4sCisJaHRzPVxFMSwgaWwxPVxFRSQ8Mz4sIGluZD1cbiQ8Mz4sIGlwPSQ8Mj4sIGlzMT1cRWNCMFxFY0MxLAorCWlzMj1cRWQkXEVjRFxFJ1xFclxFSFwwMDNcRWQvXEVPXEVlMVxFZCpcRWBAXEVgOVxFYDFcMDE2XDAyNFxFbCwKKwlpczM9XEV3SlxFdzEkPDE1MD4sIGtIT009XEV7LCBrYnM9XkgsIGtjYnQ9XEVJLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEVZLAorCWtlbD1cRVQsIGtlbnQ9XEU3LCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsCisJa2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwga2YxNj1eQU9cciwKKwlrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwKKwlrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwga2ljaDE9XEVRLAorCWtpbDE9XEVFLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwga3JwbD1cRXIsIGxsPV5eXkssCisJbWMwPVxFUCwgbWM0PV5ULCBtYzU9XEVkIywgbmVsPVxyXG4kPDM+LAorCXBmbG9jPVxFWjIlcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGZ4PVxFWjElcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGxuPVxFeiVwMSV7NDd9JSslYyVwMiVzXHIsIHByb3Q9XEUpLCByaT1cRWokPDI+LAorCXJtYWNzPVxFY0QsIHJtYW09XEVkLiwgcm1jdXA9XEV3MSwgcm1pcj1cRXIsIHJtbG49XEVBMTEsCisJcm14b249XEVjMjAsIHJzMT1cRX4hXEV+NCQ8MzA+LCByczI9XEVlRlxFYFw6JDw3MD4sCisJcnMzPVxFd0dcRWUoJDwxMDA+LAorCXNncj0lPyVwOCV0XEUpJWVcRSglOyU/JXA5JXRcRWNFJWVcRWNEJTtcRUclezQ4fSU/JXAyJXQlezh9JXwlOyU/JXAxJXAzJXwlcDYlfCV0JXs0fSV8JTslPyVwNCV0JXsyfSV8JTslPyVwMSVwNSV8JXQlezY0fSV8JTslPyVwNyV0JXsxfSV8JTslYywKKwlzZ3IwPVxFKFxFSFwwMDNcRUcwXEVjRCwgc21hY3M9XEVjRSwgc21hbT1cRWQvLAorCXNtY3VwPVxFdzAsIHNtaXI9XEVxLCBzbWxuPVxFQTEwLCBzbXNvPVxFR3QsIHNteG9uPVxFYzIxLAorCXRiYz1cRTAsIHRzbD1cRUYsIHVzZT1hZG0rc2dyLAorIword3kxMjAtd3x3eXNlMTIwLXd8d3kxNTAtd3x3eXNlMTUwLXd8d3lzZSAxMjAvMTUwIDEzMi1jb2x1bW4sCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5NywKKwljdXA9XEVhJWklcDElZFIlcDIlZEMsIGRjaDE9XEVXJDwxMj4sIGlwPSQ8ND4sCisJcnMyPVxFYDskPDcwPiwgdXNlPXd5MTIwLAorIword3kxMjAtMjV8d3lzZTEyMC0yNXx3eTE1MC0yNXx3eXNlMTUwLTI1fHd5c2UgMTIwLzE1MCA4MC1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDEwMD4sIHVzZT13eTEyMCwKKyMKK3d5MTIwLTI1LXd8d3lzZTEyMC0yNS13fHd5MTUwLTI1LXd8d3lzZTE1MC0yNS13fHd5c2UgMTIwLzE1MCAxMzItY29sdW1uIDI1LWxpbmVzLAorCWxoQCwgbGluZXMjMjUsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwxMDA+LCB1c2U9d3kxMjAtdywKKyMKK3d5MTIwLXZifHd5c2UxMjAtdmJ8d3kxNTAtdmJ8d3lzZTE1MC12YnxXeXNlIDEyMC8xNTAgdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTEyMCwKKyMKK3d5MTIwLXctdmJ8d3kxMjAtd3ZifHd5c2UxMjAtd3ZifHd5MTUwLXctdmJ8d3lzZTE1MC13LXZifFd5c2UgMTIwLzE1MCAxMzItY29sdW1uIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3kxMjAtdywKKyMKKyMJVGhlIFd5c2UgNjAgaXMgbGlrZSB0aGUgV3lzZSA1MCBidXQgd2l0aCBtb3JlIHBhZGRpbmcuCisjCVRoZSByZXNldCBzdHJpbmdzIGFyZSBzbG93IGFuZCB0aGUgcGFkIHRpbWVzIHZlcnkgZGVwZW5kaW5nCisjCW9uIG90aGVyIHBhcmFtZXRlcnMgc3VjaCBhcyBmb250IGxvYWRpbmcuICBJIGhhdmUgdHJpZWQKKyMJdG8gZm9sbG93IHRoZSBmb2xsb3dpbmcgb3V0bGluZToKKyMKKyMJCTxyczE+IC0+IHNldCBwZXJzb25hbGl0eQorIwkJPHJzMj4gLT4gc2V0IG51bWJlciBvZiBjb2x1bW5zCisjCQk8cnMzPiAtPiBzZXQgbnVtYmVyIG9mIGxpbmVzCisjCQk8aXMxPiAtPiBzZWxlY3QgdGhlIHByb3BlciBmb250CisjCQk8aXMyPiAtPiBkbyB0aGUgaW5pdGlhbGl6YXRpb24KKyMJCTxpczM+IC0+IHNldCB1cCBkaXNwbGF5IG1lbW9yeSAoMiBwYWdlcykKKyMKKyMJVGhlIFd5c2UgNjAncyB0aGF0IGhhdmUgdnQxMDAgZW11bGF0aW9uIGFyZSBzbG93ZXIgdGhhbiB0aGUKKyMJb2xkZXIgV3lzZSA2MCdzLiAgVGhpcyBjaGFuZ2UgaGFwcGVuZWQgbWlkLTE5ODcuCisjCVRoZSBjYXBhYmlsaXRpZXMgZWZmZWN0ZWQgYXJlIDxkY2gxPiA8ZGwxPiA8aWwxPiA8aW5kPiA8cmk+CisjCisjCVRoZSBtZXRhIGtleSBpcyBvbmx5IGhhbGYgcmlnaHQuICBUaGlzIHRlcm1pbmFsIHdpbGwgcmV0dXJuIHRoZQorIwloaWdoIG9yZGVyIGJpdCBzZXQgd2hlbiB5b3UgaGl0IENUUkwtZnVuY3Rpb25fa2V5CisjCisjCUl0IG1heSBiZSB1c2VmdWwgdG8gYXNzaWduIHR3byBmdW5jdGlvbiBrZXlzIHdpdGggdGhlCisjCXZhbHVlcyAgXEU9KFxzICBsb29rIGF0IG9sZCBkYXRhIGluIHBhZ2UgMQorIwkgICAgICAgIFxFPVcsICAgbG9vayBhdCBib3R0b20gb2YgcGFnZSAxCisjCXdoZXJlIFxzIGlzIGEgc3BhY2UgKCApLgorIworIwlOb3RlOgorIwkgICBUaGUgV3lzZSA2MCBydW5zIGZhc3RlciB3aGVuIHRoZSBYT04vWE9GRgorIwkgICBoYW5kc2hha2UgaXMgdHVybmVkIG9mZi4KKyMKKyMgKHd5NjA6IHdlIHVzZSBcRXsgcmF0aGVyIHRoYW4gXl4gZm9yIGhvbWUgKGJvdGggYXJlIGRvY3VtZW50ZWQpIHRvIGF2b2lkCisjIGEgYnVnIHJlcG9ydGVkIGJ5IFJvYmVydCBEdW5uLCA8cmNkaWlAaW5saW5rLmNvbT4gLS0gZXNyKQord3k2MHx3eXNlNjB8V3lzZSA2MCwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHdzbCM0NSwKKwlhY3NjPSsvXCwuMFtpaGEyZnhncWgxallrP2xabUBuRXFEdEN1NHZBd0J4M3lzenJ7Y35+LAorCWJlbD1eRywgYmxpbms9XEVHMiwgY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDwxMDA+LAorCWNub3JtPVxFYDEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVckPDExPiwgZGNsaz1cRWBiLCBkaW09XEVHcCwgZGwxPVxFUiQ8NT4sIGRzbD1cRUZcciwKKwllZD1cRVkkPDEwMD4sIGVsPVxFVCwgZmxhc2g9XEVgOCQ8MTAwLz5cRWA5LCBmc2w9Xk0sCisJaG9tZT1cRXssIGh0PVwwMTEkPDE+LCBodHM9XEUxLCBpbDE9XEVFJDw0PiwgaW5kPVxuJDw1PiwKKwlpcD0kPDM+LCBpczE9XEVjQjBcRWNDMSwKKwlpczI9XEVkJFxFY0RcRSdcRXJcRUhcMDAzXEVkL1xFT1xFZTFcRWQqXEVgQFxFYDlcRWAxXDAxNlwwMjRcRWwsCisJaXMzPVxFd0pcRXcxJDwxNTA+LCBrSE9NPVxFeywga2JzPV5ILCBrY2J0PVxFSSwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLCBrZGwxPVxFUiwga2VkPVxFWSwKKwlrZWw9XEVULCBrZW50PVxFNywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLAorCWtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsIGtmMTY9XkFPXHIsCisJa2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsCisJa2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sIGtpY2gxPVxFUSwKKwlraWwxPVxFRSwga25wPVxFSywga3BwPVxFSiwga3BydD1cRVAsIGtycGw9XEVyLCBsbD1cRXteSywKKwltYzA9XEVQLCBtYzQ9XlQsIG1jNT1cRWQjLCBuZWw9XHJcbiQ8Mz4sCisJcGZsb2M9XEVaMiVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwZng9XEVaMSVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwbG49XEV6JXAxJXs0N30lKyVjJXAyJXNcciwgcHJvdD1cRSksIHJpPVxFaiQ8Nz4sCisJcm1hY3M9XEVjRCwgcm1hbT1cRWQuLCBybWNsaz1cRWBjLCBybWN1cD1cRXcxLCBybWlyPVxFciwKKwlybWxuPVxFQTExLCBybXhvbj1cRWMyMCwgcnMxPVxFfiFcRX40JDwxNTA+LAorCXJzMj1cRWVHJDwxNTA+LCByczM9XEV3R1xFZSgkPDIwMD4sCisJc2dyPSU/JXA4JXRcRSklZVxFKCU7JT8lcDkldFxFY0UlZVxFY0QlO1xFRyV7NDh9JT8lcDIldCV7OH0lfCU7JT8lcDElcDMlfCVwNiV8JXQlezR9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXAxJXA1JXwldCV7NjR9JXwlOyU/JXA3JXQlezF9JXwlOyVjLAorCXNncjA9XEUoXEVIXDAwM1xFRzBcRWNELCBzbWFjcz1cRWNFLCBzbWFtPVxFZC8sCisJc21jdXA9XEV3MCwgc21pcj1cRXEsIHNtbG49XEVBMTAsIHNtc289XEVHdCwgc214b249XEVjMjEsCisJdGJjPVxFMCwgdHNsPVxFRiwgdXNlPWFkbStzZ3IsCisjCit3eTYwLXd8d3lzZTYwLXd8d3lzZSA2MCAxMzItY29sdW1uLAorCWNvbHMjMTMyLCBsdyM3LCBubGFiIzE2LCB3c2wjOTcsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDLCBkY2gxPVxFVyQ8MTY+LCBpcD0kPDU+LAorCXJzMj1cRWVGJDwxNTA+XEVgOyQ8MTUwPiwgdXNlPXd5NjAsCisjCit3eTYwLTI1fHd5c2U2MC0yNXx3eXNlIDYwIDgwLWNvbHVtbiAyNS1saW5lcywKKwlsaEAsIGxpbmVzIzI1LCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRXdHXEVlKSQ8MjAwPiwgdXNlPXd5NjAsCit3eTYwLTI1LXd8d3lzZTYwLTI1LXd8d3lzZSA2MCAxMzItY29sdW1uIDI1LWxpbmVzLAorCWxoQCwgbGluZXMjMjUsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwyMDA+LCB1c2U9d3k2MC13LAorIword3k2MC00Mnx3eXNlNjAtNDJ8d3lzZSA2MCA4MC1jb2x1bW4gNDItbGluZXMsCisJbGluZXMjNDIsCisJY2xlYXI9XEUrJDwyNjA+LCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwyPiwKKwlkY2gxPVxFVyQ8MTY+LCBkbDE9XEVSJDwxMT4sIGVkPVxFeSQ8MjYwPiwgaWwxPVxFRSQ8MTE+LAorCWluZD1cbiQ8OT4sIGlwPSQ8NT4sIGlzMT1cRWNCMlxFY0MzLCBuZWw9XHJcbiQ8Nj4sCisJcmk9XEVqJDwxMD4sIHJzMz1cRWUqJDwxNTA+LCB1c2U9d3k2MCwKK3d5NjAtNDItd3x3eXNlNjAtNDItd3x3eXNlIDYwIDEzMi1jb2x1bW4gNDItbGluZXMsCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5NywKKwljbGVhcj1cRSskPDI2MD4sIGN1cD1cRWElaSVwMSVkUiVwMiVkQyQ8Mj4sCisJZGNoMT1cRVckPDE5PiwgZWQ9XEV5JDwyNjA+LCBob21lPVwwMzYkPDI+LCBpcD0kPDY+LAorCW5lbD1cclxuJDwxMT4sIHJzMj1cRWVGJDwxNTA+XEVgOyQ8MTUwPiwgdXNlPXd5NjAtNDIsCisjCit3eTYwLTQzfHd5c2U2MC00M3x3eXNlIDYwIDgwLWNvbHVtbiA0My1saW5lcywKKwlsaEAsIGxpbmVzIzQzLCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRWUrJDwxNTA+LCB1c2U9d3k2MC00MiwKK3d5NjAtNDMtd3x3eXNlNjAtNDMtd3x3eXNlIDYwIDEzMi1jb2x1bW4gNDMtbGluZXMsCisJbGhALCBsaW5lcyM0MywgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEVlKyQ8MTUwPiwgdXNlPXd5NjAtNDItdywKKyMKK3d5NjAtdmJ8d3lzZTYwLXZifFd5c2UgNjAgdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTYwLAord3k2MC13LXZifHd5NjAtd3ZifHd5c2U2MC13dmJ8V3lzZSA2MCAxMzItY29sdW1uIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3k2MC13LAorCisjCVRoZSBXeXNlLTk5R1QgbG9va3MgYXQgbG90IGxpa2UgdGhlIFd5c2UgNjAgZXhjZXB0IHRoYXQgaXQKKyMJZG9lcyBub3QgaGF2ZSB0aGUgNDIvNDMgbGluZSBtb2RlLiAgSW4gdGhlIFd5c2UtNjAgdGhlICJsaW5lcyIKKyMJc2V0dXAgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgbGluZXMgb24gdGhlIHNjcmVlbi4KKyMJRm9yIHRoZSBXeXNlIDk5R1QgdGhlICJsaW5lcyIgc2V0dXAgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZQorIwludW1iZXIgb2YgbGluZXMgaW4gYSBwYWdlLiAgVGhlIHNjcmVlbiBjYW4gZGlzcGxheSAyNSBsaW5lcyBtYXguCisjCSAgICBUaGUgV3lzZS05OUdUIGFsc28gaGFzIHBlcnNvbmFsaXRpZXMgZm9yIHRoZSBWVDIyMCBhbmQKKyMJVGVrdHJvbml4IDQwMTQuICBCdXQgdGhpcyBoYXMgbm8gYmVhcmluZyBvbiB0aGUgbmF0aXZlIG1vZGUuCisjCisjCShtc2dyKSBzaG91bGQgYmUgc2V0IGJ1dCB0aGUgY2xlYXIgc2NyZWVuIGZhaWxzIHdoZW4gaW4KKyMJYWx0LWNoYXJzZXQgbW9kZS4gIFRyeSBcRWNFXHNcc1xFK1xzIGlmIHRoZSBzY3JlZW4gaXMgcmVhbGx5IGNsZWFyCisjCXRoZW4gc2V0IG1zZ3IsIGVsc2UgdXNlIG1zZ3JALgorIworIwl1MCAtPiBlbnRlciBUZWt0cm9uaXggbW9kZQorIwl1MSAtPiBleGl0IFRla3Ryb25peCBtb2RlCisjCit3eTk5Z3R8d3lzZTk5Z3R8V3lzZSA5OWd0LAorCW1zZ3JALAorCWNsZWFyPVxFKyQ8MTMwPiwgZGNoMT1cRVckPDc+LCBkbDE9XEVSJDw0PiwgZWQ9XEV5JDwxMzA+LAorCWVsPVxFdCQ8NT4sIGZsYXNoPVxFYDgkPDEwMC8+XEVgOSwgaHQ9XDAxMSQ8MT4sCisJaWwxPVxFRSQ8ND4sIGluZD1cbiQ8ND4sIGlwPSQ8Mj4sIGlzMz1cRXcwJDwyMD4sIG5lbEAsCisJcmk9XEVqJDwzPiwgcm1jdXA9XEV3MCwgcnMyPVxFYFw6JDwxNTA+LCBzbWN1cD1cRXcxLAorCXUwPVxFfj5cRTgsIHUxPVxFWzQyaCwgdXNlPXd5NjAsCisjCit3eTk5Z3Qtd3x3eXNlOTlndC13fHd5c2UgOTlndCAxMzItY29sdW1uLAorCWNvbHMjMTMyLCBsdyM3LCBubGFiIzE2LCB3c2wjOTcsCisJY2xlYXI9XEUrJDwxNjA+LCBjdXA9XEVhJWklcDElZFIlcDIlZEMkPDI+LAorCWRjaDE9XEVXJDw5PiwgZWQ9XEV5JDwxNjA+LCBpcD0kPDQ+LCByczI9XEVgOyQ8MTUwPiwKKwl1c2U9d3k5OWd0LAorIword3k5OWd0LTI1fHd5c2U5OWd0LTI1fHd5c2UgOTlndCA4MC1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczI9XEVgXDokPDE1MD4sIHJzMz1cRXdHXEVlKSQ8MjAwPiwgdXNlPXd5OTlndCwKKyMKK3d5OTlndC0yNS13fHd5c2U5OWd0LTI1LXd8d3lzZSA5OWd0IDEzMi1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczI9XEVgOyQ8MTUwPiwgdXNlPXd5OTlndC13LAorIword3k5OWd0LXZifHd5c2U5OWd0LXZifFd5c2UgOTlndCB2aXNpYmxlIGJlbGwsCisJYmVsQCwgdXNlPXd5OTlndCwKKyMKK3d5OTlndC13LXZifHd5OTlndC13dmJ8d3lzZTk5Z3Qtd3ZifFd5c2UgOTlndCAxMzItY29sdW1uIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3k5OWd0LXcsCisKKyMgQ2FuJ3Qgc2V0IHRhYnMhIE90aGVyIGJ1Z3MgKEFOU0kgbW9kZSBvbmx5KToKKyMgLSBjYW4ndCByZWRlZmluZSBmdW5jdGlvbiBrZXlzIChhbnl3YXksIGtleSByZWRlZmluaXRpb24gaW4gQU5TSSBtb2RlCisjICAgaXMgdG9vIG11Y2ggY29tcGxleCB0byBiZSBkZXNjcmliZWQpOworIyAtIG1ldGEga2V5IGNhbid0IGJlIGRlc2NyaWJlZCAodGhlIHRlcm1pbmFsIGZvcmdldHMgaXQgd2hlbiByZXNldCk7CisjIFRoZSB4b24teG9mZiBoYW5kc2hha2luZyBjYW4ndCBiZSBkaXNhYmxlZCB3aGlsZSBpbiBhbnNpIHBlcnNvbmFsaXR5LCBzbworIyBlbWFjcyBjYW4ndCB3b3JrIGF0IHNwZWVkIGdyZWF0ZXIgdGhhbiA5NjAwIGJhdWQuICBObyBwYWRkaW5nIGlzIG5lZWRlZCBhdAorIyB0aGlzIHNwZWVkLgorIyAgIGRjaDEgaGFzIGJlZW4gY29tbWVudGVkIG91dCBiZWNhdXNlIGl0IGNhdXNlcyBhbm5veWluZyBnbGl0dGVyaW5nIHdoZW4KKyMgdmkgZGVsZXRlcyBvbmUgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIHdpdGggdGFicyBpbiBpdC4KKyMgICBkY2ggbWFrZXMgc3lzZ2VuKDFNKSBoYXZlIGEgaG9ycmlibGUgYmVoYXZpb3VyIHdoZW4gZGVsZXRpbmcKKyMgYSBzY3JlZW4gYW5kIG1ha2VzIHNjcmVlbigxKSBiZWhhdmUgYmFkbHksIHNvIGl0IGlzIGRpc2FibGVkIHRvby4gVGhlIG5pY2UKKyMgdGhpbmcgaXMgdGhhdCB2aSBnb2VzIGNyYXp5IGlmIHNtaXItcm1pciBhcmUgcHJlc2VudCBhbmQgYm90aCBkY2gtZGNoMSBhcmUKKyMgbm90LCBzbyBzbWlyIGFuZCBybWlyIGFyZSBjb21tZW50ZWQgb3V0IGFzIHdlbGwuCisjIEZyb206IEZyYW5jZXNjbyBQb3RvcnRpYCA8Ri5Qb3RvcnRpQGNudWNlLmNuci5pdD4sIDI0IEF1ZyAxOTk4Cit3eTk5LWFuc2l8V3lzZSBXWS05OUdUIGluIGFuc2kgbW9kZSAoaW50J2wgUEMga2V5Ym9hcmQpLAorCWFtLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29xcXNzdHR1dXZ2d3d4eHt7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDwyMDA+LCBjbm9ybT1cRVszNGhcRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQkPDE+LAorCWN1YjE9XDAxMCQ8MT4sIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVELAorCWN1Zj1cRVslcDElZEMkPDE+LCBjdWYxPVxFW0MkPDE+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sCisJY3Z2aXM9XEVbMzRsXEVbPzI1aCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0okPDgqPiwgZWw9XEVbSyQ8MT4sIGVsMT1cRVsxSyQ8MT4sCisJZW5hY3M9XEUpMCwgZmxhc2g9XEVbPzVoJDwzMC8+XEVbPzVsLCBob21lPVxFW0gsCisJaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XG4kPDE+LCBpbnZpcz1cRVs4bSwKKwlpczI9XEU3XEVbMXJcRThcRVsyOzM7NDsxMzsyMDszNDszOTszNmxcRVsxMjsxNjszNGhcRVs/MTszOzQ7NTsxMDsxOGxcRVs/Nzs4OzI1aFxFPlxFWz81V1xFKEJcMDE3XEVbNGksCisJa2JzPV5ILCBrY2J0PVxFW3osIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwga2YxPVxFT1AsIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxNz1cRVtLLCBrZjE4PVxFWzMxfiwga2YxOT1cRVszMn4sIGtmMj1cRU9RLAorCWtmMjA9XEVbMzN+LCBrZjIxPVxFWzM0fiwga2YyMj1cRVszNX4sIGtmMjM9XEVbMX4sCisJa2YyND1cRVsyfiwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVbTSwga2Y2PVxFWzE3fiwKKwlrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBsbD1cRVsyNEUsIG1jMD1cRVs/MTloLAorCW1jND1cRVs0aSwgbWM1PVxFWzVpLCBuZWw9XEVFLCBwcm90PVxFWzEicSwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWwsIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczI9XEVbNjEicFxFWzQwaFxFWz82bFxFWzFyXEVbMjszOzQ7MTM7MjA7MzQ7Mzk7MzZsXEVbMTI7MTY7MzRoXEVbPzE7Mzs0OzU7MTA7MThsXEVbPzc7ODsyNWhcRT5cRVs/NVdcRShCXDAxN1xFWzI0RVxFWzRpLAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyVPJXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA3JXQ7OCU7bVxFWyU/JXA4JXQxJTsicSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxN1xFWyJxLCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHZwYT1cRVslaSVwMSVkZCwKKworIyAgIFRoaXMgaXMgdGhlIGFtZXJpY2FuIHRlcm1pbmFsLiBIZXJlIHRhYnMgd29yayBmaW5lLgorIyBGcm9tOiBGcmFuY2VzY28gUG90b3J0aWAgPEYuUG90b3J0aUBjbnVjZS5jbnIuaXQ+LCAyNCBBdWcgMTk5OAord3k5OWEtYW5zaXxXeXNlIFdZLTk5R1QgaW4gYW5zaSBtb2RlIChVUyBQQyBrZXlib2FyZCksCisJaHRzPVxFSCwgaXMzPVxFWz81bCwgcnMzPVxFWz81bCwgdGJjPVxFWzNnLCB1c2U9d3k5OS1hbnNpLAorCisjIFRoaXMgdGVybWluYWwgKGZpcm13YXJlIHZlcnNpb24gMDIpIGhhcyBhIGxvdCBvZiBidWdzOgorIyAtIGNhbid0IHNldCB0YWJzOworIyAtIG90aGVyIGJ1Z3MgaW4gQU5TSSBtb2RlcyAoc2VlIGFib3ZlKS4KKyMgVGhpcyBkZXNjcmlwdGlvbiBkaXNhYmxlcyBoYW5kc2hha2luZyB3aGVuIHVzaW5nIGN1cC4gVGhpcyBpcyBiZWNhdXNlCisjIEdOVSBlbWFjcyBkb2Vzbid0IGxpa2UgWG9uLVhvZmYgaGFuZHNoYWtpbmcuIFRoaXMgbWVhbnMgdGhlIHRlcm1pbmFsCisjIGNhbm5vdCBiZSB1c2VkIGF0IHNwZWVkcyBncmVhdGVyIHRoYW4gOTYwMCBiYXVkLCBiZWNhdXNlIGF0IGdyZWF0ZXIKKyMgc3BlZWRzIGhhbmRzaGFraW5nIGlzIG5lZWRlZCBldmVuIGZvciBjaGFyYWN0ZXIgc2VuZGluZy4gSWYgeW91IHVzZQorIyBEVFIgaGFuZHNoYWtpbmcsIHlvdSBjYW4gdXNlIGV2ZW4gZ3JlYXRlciBzcGVlZHMuCisjIEZyb206IEZyYW5jZXNjbyBQb3RvcnRpYCA8Ri5Qb3RvcnRpQGNudWNlLmNuci5pdD4sIDI0IEF1ZyAxOTk4Cit3eTk5Znx3eTk5Zmd0fHd5LTk5Zmd0fFd5c2UgV1ktOTlHVCAoaW50J2wgUEMga2V5Ym9hcmQpLAorCWFtLCBidywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgd3NsIzQ2LAorCWFjc2M9J3greS53aX5fdmooaydsJm0lbilvOXEqczh0LXUudlwsdyt4PSwgYmVsPV5HLAorCWJsaW5rPVxFRzIsIGNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVxFJ1xFKFwwMzIsCisJY25vcm09XEVgNFxFYDEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFaiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLAorCWN2dmlzPVxFYDJcRWAxLCBkY2gxPVxFVywgZGltPVxFR3AsIGRsMT1cRVIsIGRzbD1cRUZcciwKKwllZD1cRVkkPDgqPiwgZWw9XEVUJDw4PiwgZW5hY3M9XEVjQDFKJDwyMDAwPiwKKwlmbGFzaD1cRVxeMSQ8MzAvPlxFXF4wLCBmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLCBpbDE9XEVFLAorCWluZD1eSiwgaW52aXM9XEVHMywKKwlpczI9XEV1XEVlNlxFQ1xFREZcRWMyMVxFYzMxXEVjNjJcRWM3MlxFZTtcMDE2XEUnXEVlTFxFYDlcRVxeMFxFYDFcRWA0XEVlLlxFYFw6XEVlMVxFRzBcRShcRWQvXEVlNFxFZCpcRU9cRWBJXEVyXEVlIlxFY0RcMDI0LAorCWthMT1eXiwga2EzPVxFSiwga2JzPV5ILCBrYzE9XEVULCBrYzM9XEVLLCBrY2J0PVxFSSwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLAorCWtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsIGtmMTM9XkFgXHIsIGtmMTQ9XkFhXHIsIGtmMTU9XkFiXHIsCisJa2YxNj1eQWNcciwga2YxNz1eQWRcciwga2YxOD1eQWVcciwga2YxOT1eQWZcciwga2YyPV5BQVxyLAorCWtmMjA9XkFnXHIsIGtmMjE9XkFoXHIsIGtmMjI9XkFpXHIsIGtmMjM9XkFqXHIsIGtmMjQ9XkFrXHIsCisJa2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtwcnQ9XEVQLCBtYzA9XEVQLCBtYzQ9XlQsIG1jNT1cRWQjLAorCW5lbD1eXywgcHJvdD1cRSksIHJldj1cRUc0LCByaT1cRWosIHJtYWNzPVxFY0QsIHJtYW09XEVkLiwKKwlybWN1cD1cRWMyMVxFYzMxLCBybWlyPVxFciwgcm1zbz1cRUcwLCBybXhvbj1cRWMyMFxFYzMwLAorCXJzMj1cRXVcRX40XEVlNlxFQ1xFREZcRWMyMVxFYzMxXEVjNjJcRWM3MlxFZTtcMDE2XEUnXEVlTFxFYDlcRVxeMFxFYDFcRWA0XEVlLlxFYFw6XEVlKVxFd1xFd0dcRXcwXEVlMVxFRzBcRShcRWQvXEVlNFxFZCpcRU9cRWBJXEVyXEVlIlxFY0AwQlxFY0RcMDI0LAorCXNncj1cRShcRUclezQ4fSU/JXAxJXAzJU8ldCV7NH0lKyU7JT8lcDIldCV7OH0lKyU7JT8lcDQldCV7Mn0lKyU7JT8lcDUldCV7NjR9JSslOyU/JXA3JXQlezF9JSslOyVjJT8lcDgldFxFKSU7JT8lcDkldFxFY0UlZVxFY0QlOywKKwlzZ3IwPVxFKFxFRzAsIHNtYWNzPVxFY0UsIHNtYW09XEVkLywgc21jdXA9XEVjMjBcRWMzMCwKKwlzbWlyPVxFcSwgc21zbz1cRUc0LCBzbXhvbj1cRWMyMVxFYzMxLCB0c2w9XEVGLAorCisjIFRoaXMgaXMgdGhlIGFtZXJpY2FuIHRlcm1pbmFsLiBIZXJlIHRhYnMgd29yay4KKyMgRnJvbTogRnJhbmNlc2NvIFBvdG9ydGlgIDxGLlBvdG9ydGlAY251Y2UuY25yLml0PiwgMjQgQXVnIDE5OTgKK3d5OTlmYXx3eTk5Zmd0YXx3eS05OWZndGF8V3lzZSBXWS05OUdUIChVUyBQQyBrZXlib2FyZCksCisJaHRzPVxFMSwgdGJjPVxFMCwgdXNlPXd5OTlmLAorCisjCisjCVRoZSBXeXNlIDE2MCBpcyBjb21iaW5hdGlvbiBvZiB0aGUgV1ktNjAgYW5kIHRoZSBXWS05OWd0LgorIwlUaGUgcmVzZXQgc3RyaW5ncyBhcmUgc2xvdyBhbmQgdGhlIHBhZCB0aW1lcyB2ZXJ5IGRlcGVuZGluZworIwlvbiBvdGhlciBwYXJhbWV0ZXJzIHN1Y2ggYXMgZm9udCBsb2FkaW5nLiAgSSBoYXZlIHRyaWVkCisjCXRvIGZvbGxvdyB0aGUgZm9sbG93aW5nIG91dGxpbmU6CisjCisjCQk8cnMxPiAtPiBzZXQgcGVyc29uYWxpdHkKKyMJCTxyczI+IC0+IHNldCBudW1iZXIgb2YgY29sdW1ucworIwkJPHJzMz4gLT4gc2V0IG51bWJlciBvZiBsaW5lcworIwkJPGlzMT4gLT4gc2VsZWN0IHRoZSBwcm9wZXIgZm9udAorIwkJPGlzMj4gLT4gZG8gdGhlIGluaXRpYWxpemF0aW9uCisjCQk8aXMzPiAtPiBzZXQgdXAgZGlzcGxheSBtZW1vcnkgKDIgcGFnZXMpCisjCisjCVRoZSBkaXNwbGF5IG1lbW9yeSBtYXkgYmUgdXNlZCBmb3IgZWl0aGVyIHRleHQgb3IgZ3JhcGhpY3MuCisjCVdoZW4gIkRpc3BsYXkgTWVtb3J5ID0gU2hhcmVkIiB0aGUgdGVybWluYWwgd2lsbCBoYXZlIG1vcmUgcGFnZXMKKyMJYnV0IGdhcmJhZ2UgbWF5IGJlIGxlZnQgb24gdGhlIHNjcmVlbiB3aGVuIHlvdSBzd2l0Y2ggZnJvbQorIwlncmFwaGljcyB0byB0ZXh0LiAgSWYgIkRpc3BsYXkgTWVtb3J5ID0gVW5zaGFyZWQiIHRoZW4gdGhlCisjCXRleHQgYXJlYSB3aWxsIGJlIG9ubHkgb25lIHBhZ2UgbG9uZy4KKyMKKyMgKHd5MTYwOiB3ZSB1c2UgXEV7IHJhdGhlciB0aGFuIF5eIGZvciBob21lIChib3RoIGFyZSBkb2N1bWVudGVkKSB0byBhdm9pZAorIyBhIGJ1ZyByZXBvcnRlZCBieSBSb2JlcnQgRHVubiwgPHJjZGlpQGlubGluay5jb20+IC0tIGVzcikKK3d5MTYwfHd5c2UxNjB8V3lzZSAxNjAsCisJYW0sIGJ3LCBocywga20sIG1jNWksIG1pciwgbXNnciwKKwljb2xzIzgwLCBsaCMxLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCB3c2wjMzgsCisJYWNzYz0rL1wsLjBbaWhhMmZ4Z3FoMWpZaz9sWm1AbkVxRHRDdTR2QXdCeDN5c3pye2N+fiwKKwliZWw9XkcsIGJsaW5rPVxFRzIsIGNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVxFKyQ8MzA+LAorCWNub3JtPVxFYDEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXJDw1PiwKKwlkY2xrPVxFYGIsIGRpbT1cRUdwLCBkbDE9XEVSJDwxPiwgZHNsPVxFRlxyLCBlZD1cRVkkPDMwPiwKKwllbD1cRVQkPDU+LCBmbGFzaD1cRWA4JDwxMDAvPlxFYDksIGZzbD1eTSwgaG9tZT1cRXssIGh0PV5JLAorCWh0cz1cRTEsIGlsMT1cRUUkPDE+LCBpbmQ9XG4kPDE+LCBpcD0kPDI+LCBpczE9XEVjQjBcRWNDMSwKKwlpczI9XEVkJFxFY0RcRSdcRXJcRUhcMDAzXEVkL1xFT1xFZTFcRWQqXEVgQFxFYDlcRWAxXDAxNlwwMjRcRWwsCisJaXMzPVxFdzAkPDEwMD4sIGtIT009XEV7LCBrYnM9XkgsIGtjYnQ9XEVJLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEVZLAorCWtlbD1cRVQsIGtlbnQ9XEU3LCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsCisJa2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwga2YxNj1eQU9cciwKKwlrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwKKwlrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwga2ljaDE9XEVRLAorCWtpbDE9XEVFLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwga3JwbD1cRXIsIGxsPVxFe15LLAorCW1jMD1cRVAsIG1jND1eVCwgbWM1PVxFZCMsIG5lbD1cclxuJDwxPiwKKwlwZmxvYz1cRVoyJXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBmeD1cRVoxJXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBsbj1cRXolcDElezQ3fSUrJWMlcDIlc1xyLCBwcm90PVxFKSwgcmk9XEVqJDwxPiwKKwlybWFjcz1cRWNELCBybWFtPVxFZC4sIHJtY2xrPVxFYGMsIHJtY3VwPVxFdzAsIHJtaXI9XEVyLAorCXJtbG49XEVBMTEsIHJteG9uPVxFYzIwLCByczE9XEV+IVxFfjQkPDcwPiwKKwlyczI9XEVgXDokPDEwMD4sIHJzMz1cRXdHXEVlKCQ8MTQwPiwKKwlzZ3I9JT8lcDgldFxFKSVlXEUoJTslPyVwOSV0XEVjRSVlXEVjRCU7XEVHJXs0OH0lPyVwMiV0JXs4fSV8JTslPyVwMSVwMyV8JXA2JXwldCV7NH0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDElcDUlfCV0JXs2NH0lfCU7JT8lcDcldCV7MX0lfCU7JWMsCisJc2dyMD1cRShcRUhcMDAzXEVHMFxFY0QsIHNtYWNzPVxFY0UsIHNtYW09XEVkLywKKwlzbWN1cD1cRXcxLCBzbWlyPVxFcSwgc21sbj1cRUExMCwgc21zbz1cRUd0LCBzbXhvbj1cRWMyMSwKKwl0YmM9XEUwLCB0c2w9XEVGLCB1c2U9YWRtK3NnciwKKyMKK3d5MTYwLXd8d3lzZTE2MC13fHd5c2UgMTYwIDEzMi1jb2x1bW4sCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5MCwKKwljdXA9XEVhJWklcDElZFIlcDIlZEMsIGRjaDE9XEVXJDw5PiwKKwlyczI9XEVlRiQ8MTUwPlxFYDskPDE1MD4sIHVzZT13eTE2MCwKKyMKK3d5MTYwLTI1fHd5c2UxNjAtMjV8d3lzZSAxNjAgODAtY29sdW1uIDI1LWxpbmVzLAorCWxoQCwgbGluZXMjMjUsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwyMDA+LCB1c2U9d3kxNjAsCit3eTE2MC0yNS13fHd5c2UxNjAtMjUtd3x3eXNlIDE2MCAxMzItY29sdW1uIDI1LWxpbmVzLAorCWxoQCwgbGluZXMjMjUsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwyMDA+LCB1c2U9d3kxNjAtdywKKyMKK3d5MTYwLTQyfHd5c2UxNjAtNDJ8d3lzZSAxNjAgODAtY29sdW1uIDQyLWxpbmVzLAorCWxpbmVzIzQyLAorCWNsZWFyPVxFKyQ8NTA+LCBkbDE9XEVSJDwyPiwgZWQ9XEV5JDw1MD4sIGlsMT1cRUUkPDI+LAorCWluZD1cbiQ8Mj4sIGlzMT1cRWNCMlxFY0MzLCBuZWw9XHJcbiQ8Mj4sIHJpPVxFaiQ8Mj4sCisJcnMzPVxFZSokPDE1MD4sIHVzZT13eTE2MCwKK3d5MTYwLTQyLXd8d3lzZTE2MC00Mi13fHd5c2UgMTYwIDEzMi1jb2x1bW4gNDItbGluZXMsCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5MCwKKwljdXA9XEVhJWklcDElZFIlcDIlZEMsIGRjaDE9XEVXJDw4PiwgaXA9JDwzPiwKKwlyczI9XEVlRiQ8MTUwPlxFYDskPDE1MD4sIHVzZT13eTE2MC00MiwKKyMKK3d5MTYwLTQzfHd5c2UxNjAtNDN8d3lzZSAxNjAgODAtY29sdW1uIDQzLWxpbmVzLAorCWxoQCwgbGluZXMjNDMsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFZSskPDE1MD4sIHVzZT13eTE2MC00MiwKK3d5MTYwLTQzLXd8d3lzZTE2MC00My13fHd5c2UgMTYwIDEzMi1jb2x1bW4gNDMtbGluZXMsCisJbGhALCBsaW5lcyM0MywgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEVlKyQ8MTUwPiwgdXNlPXd5MTYwLTQyLXcsCisjCit3eTE2MC12Ynx3eXNlMTYwLXZifFd5c2UgMTYwIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3kxNjAsCit3eTE2MC13LXZifHd5MTYwLXd2Ynx3eXNlMTYwLXd2YnxXeXNlIDE2MCAxMzItY29sdW1uIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3kxNjAtdywKKyMKKyMJVGhlIFd5c2UgNzUgaXMgYSB2dDEwMCBsb29rYWxpa2Ugd2l0aG91dCBhZHZhbmNlZCB2aWRlby4KKyMKKyMJICAgVGhlIFd5c2UgNzUgY2FuIHN1cHBvcnQgb25lIGF0dHJpYnV0ZSAoZS5nLiBEaW0sIEludmVyc2UsCisjCVVuZGVybGluZSkgd2l0aG91dCBtYWdpYyBjb29raWVzLiAgVGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbgorIwl1c2VzIHRoaXMgY2FwYWJpbGl0eSwgYnV0IHdoZW4gbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUgaXMKKyMJcHV0IG9uIHRoZSBzY3JlZW4gYXQgb25jZSwgYWxsIGF0dHJpYnV0ZXMgd2lsbCBiZSBjaGFuZ2VkCisjCXRvIGJlIHRoZSBzYW1lIGFzIHRoZSBsYXN0IGF0dHJpYnV0ZSBnaXZlbi4KKyMJICAgVGhlIFd5c2UgNzUgY2FuIHN1cHBvcnQgbW9yZSBhdHRyaWJ1dGVzIHdoZW4gdXNlZCB3aXRoIG1hZ2ljCisjCWNvb2tpZXMuICBUaGUgd3k3NS1tYyB0ZXJtaW5hbCBkZXNjcmlwdGlvbiB1c2VzIG1hZ2ljIGNvb2tpZXMKKyMJdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aXBsZSBhdHRyaWJ1dGVzIG9uIGEgc2NyZWVuLgorIword3k3NXx3eXNlNzV8d3lzZSA3NSwKKwlhbSwgaHMsIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBtYSMxLCBwYiMxMjAxLCB3c2wjNzgsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLCBjbGVhcj1cRVtIXEVbSiQ8MzA+LAorCWNub3JtPVxFWz8yNWgsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIkPDI+LAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQJDwzKj4sCisJZGNoMT1cRVtQJDwzPiwgZGltPVxFWzB0XEVbMm0sIGRsPVxFWyVwMSVkTSQ8MSo+LAorCWRsMT1cRVtNLCBkc2w9XEVbPlwsXDAwMVwwMDFcRVs+LVwwMDFcMDAxLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0okPDMwPiwgZWw9XEVbSyQ8Mz4sIGVsMT1cRVsxSyQ8Mz4sCisJZW5hY3M9XEUpMCwgZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MjUwPiwgZnNsPV5BLAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRAJDwxKj4sIGlsPVxFWyVwMSVkTCQ8Mio+LCBpbDE9XEVbTCQ8Mj4sCisJaW5kPVxuJDwyPiwgaXA9JDwxPiwKKwlpczE9XEVbMjs0OzIwOzMwbFxFWz8xOzEwbFxFWzEyaFxFWz83Ozg7MjVoLAorCWlzMj1cRT5cRShCXEUpMFwwMTcsIGlzMz1cRVttLCBrYnM9XkgsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RsMT1cRVtNLCBrZWw9XEVbSywKKwlrZjE9XEVbPzVpLCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LAorCWtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LAorCWtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sIGtmMj1cRVs/M2ksCisJa2YyMD1cRVszNH4sIGtmMjE9XEVbMzV+LCBrZjM9XEVbMmksIGtmND1cRVtALCBrZjU9XEVbTSwKKwlrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LAorCWtobHA9XEVbMjh+LCBraG9tZT1cRVtILCBraWNoMT1cRVtALCBraWwxPVxFW0wsIGtucD1cRVs2fiwKKwlrcHA9XEVbNX4sIGtwcnQ9XEVbPzVpLCBrc2x0PVxFWzR+LCBtYzA9XEVbMGksIG1jND1cRVs0aSwKKwltYzU9XEVbNWksIHJjPVxFOCwgcmV2PVxFWzF0XEVbN20sIHJpPVxFTSQ8Mj4sIHJtYWNzPV5PLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFWzEzbFxFWzNsXEUhcCwgcnMyPVxFWzM1aFxFWz8zbCQ8ODA+LCByczM9XEVbPzVsLAorCXNjPVxFNywKKwlzZ3I9JT8lcDUldFxFWzB0JTslPyVwMyVwMSV8JXRcRVsxdCU7JT8lcDIldFxFWzJ0JTslPyVwNCV0XEVbM3QlOyU/JXAxJXAyJXAzJXA0JXA1JXwlfCV8JXwldFxFWzdtJWVcRVttJTslPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xbFxFWz83aFxFPSwgc21zbz1cRVsxdFxFWzdtLCBzbXVsPVxFWzJ0XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVbPlwsXDAwMSwgdXNlPXZ0MjIwK2tleXBhZCwKKyMKKyMJVGhpcyB0ZXJtaW5hbCBkZXNjcmlwdGlvbiB1c2VzIHRoZSBub24taGlkZGVuIGF0dHJpYnV0ZSBtb2RlCisjCSh3aXRoIG1hZ2ljIGNvb2tpZSkuCisjCit3eTc1LW1jfHd5c2U3NS1tY3x3eXNlIDc1IHdpdGggbWFnaWMgY29va2llcywKKwltc2dyQCwKKwltYUAsIHhtYyMxLAorCWJsaW5rPVxFWzJwLCBkaW09XEVbMXAsIGludmlzPVxFWzRwLCBpczM9XEVbbVxFW3AsCisJcmV2PVxFWzE2cCwgcm1hY3M9XEVbMHBcMDE3LCBybXNvPVxFWzBwLCBybXVsPVxFWzBwLAorCXNncj1cRVslezB9JT8lcDIlcDYlfCV0JXs4fSV8JTslPyVwMSVwMyV8JXA2JXwldCV7MTZ9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXAxJXA1JXwldCV7MX0lfCU7JT8lcDcldCV7NH0lfCU7JWRwJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFWzBwXDAxNywgc21hY3M9XEVbMHBcMDE2LCBzbXNvPVxFWzE3cCwgc211bD1cRVs4cCwKKwl1c2U9d3k3NSwKK3d5NzUtdmJ8d3lzZTc1LXZifHd5c2UgNzUgd2l0aCB2aXNpYmxlIGJlbGwsCisJcGJALAorCWJlbEAsIHVzZT13eTc1LAord3k3NS13fHd5c2U3NS13fHd5c2UgNzUgaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB3c2wjMTMwLAorCXJzMj1cRVszNWhcRVs/M2gkPDgwPiwgdXNlPXd5NzUsCit3eTc1LXd2Ynx3eXNlNzUtd3ZifHd5c2UgNzUgd2l0aCB2aXNpYmxlIGJlbGwgMTMyIGNvbHVtbnMsCisJcGJALAorCWJlbEAsIHVzZT13eTc1LXcsCisjCisjCVd5c2UgODUgZW11bGF0aW5nIGEgdnQyMjAgNyBiaXQgbW9kZS4KKyMJCTI0IGxpbmUgc2NyZWVuIHdpdGggc3RhdHVzIGxpbmUuCisjCisjCVRoZSB2dDIyMCBtb2RlIHBlcm1pdHMgbW9yZSBmdW5jdGlvbiBrZXlzIGJ1dCBpdCB3aXBlcyBvdXQKKyMJdGhlIGVzY2FwZSBrZXkuICBJIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IDxmMTE+IGJlIHNldCB0bworIwllc2NhcGUgKGVzYykuCisjCVRoZSB0ZXJtaW5hbCBtYXkgaGF2ZSB0byBiZSBzZXQgZm9yIDggZGF0YSBiaXRzIGFuZCAyIHN0b3AKKyMJYml0cyBmb3IgdGhlIGFycm93IGtleXMgdG8gd29yay4KKyMJVGhlIFd5c2UgODUgcnVucyBmYXN0ZXIgd2l0aCBYT04vWE9GRiBlbmFibGVkLiAgQWxzbyB0aGUKKyMJPGRjaD4gYW5kIDxpY2g+IHdvcmsgYmVzdCB3aGVuIFhPTi9YT0ZGIGlzIHNldC4gIDxpY2g+IGFuZAorIwk8ZGNoPiBsZWF2ZSB0cmFzaCBvbiB0aGUgc2NyZWVuIHdoZW4gdXNlZCB3aXRob3V0IFhPTi9YT0ZGLgorIword3k4NXx3eXNlODV8d3lzZSA4NSwKKwlhbSwgaHMsIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiQ8MTEwPiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDE+LCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCQ8Myo+LCBkY2gxPVxFW1AkPDM+LCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNJDwzKj4sIGRsMT1cRVtNJDwzPiwgZHNsPVxFWzQwbCwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKJDwxMTA+LCBlbD1cRVtLJDwxPiwgZWwxPVxFWzFLLAorCWVuYWNzPVxFKTAsIGZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDMwMD4sCisJZnNsPVxFWzE7MjRyXEU4LCBob21lPVxFW0gsIGh0PVwwMTEkPDE+LCBodHM9XEVILAorCWljaD1cRVslcDElZEAkPDQqPiwgaWw9XEVbJXAxJWRMJDw1Kj4sIGlsMT1cRVtMJDw1PiwKKwlpbmQ9XG4kPDM+LCBpbnZpcz1cRVs4bSwgaXA9JDwzPiwgaXMxPVxFWzYyOzEicFxFWz81VywKKwlpczI9XEVbMjs0OzIwOzMwbFxFWz8xOzQ7MTA7MTZsXEVbMTJoXEVbPzc7ODsyNWgkPDE2PiwKKwlpczM9XEU+XEUoQlxFKTBcMDE3XEVbbSwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwga2YyMD1cRVszNH4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwga2hscD1cRVsyOH4sCisJa2hvbWU9XEVbMjZ+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NsdD1cRVs0fiwgbGYxPVBGMSwgbGYyPVBGMiwgbGYzPVBGMywgbGY0PVBGNCwgbWMwPVxFWzBpLAorCW1jND1cRVs0aSwgbWM1PVxFWzVpLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNJDwzPiwKKwlybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEU+LCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczE9XEVbMTNsXEVbM2xcRSFwLCByczI9XEVbMzVoXEVbPzNsJDw3MD4sCisJcnMzPVxFWz81bCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDIldDs0JTslPyVwMyVwMSV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWxcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbNDBoXEU3XEVbMjU7JWklcDElZEgsIHVzZT12dDIyMCtrZXlwYWQsCisjCisjCVd5c2UgODUgd2l0aCB2aXN1YWwgYmVsbC4KK3d5ODUtdmJ8d3lzZTg1LXZifHd5c2UgODUgd2l0aCB2aXNpYmxlIGJlbGwsCisJYmVsQCwgZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MzAwPiwgdXNlPXd5ODUsCisjCisjCVd5c2UgODUgaW4gMTMyLWNvbHVtbiBtb2RlLgord3k4NS13fHd5c2U4NS13fHd5c2UgODUgaW4gMTMyLWNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCXJzMj1cRVszNWhcRVs/M2gkPDcwPiwgdXNlPXd5ODUsCisjCisjCVd5c2UgODUgaW4gMTMyLWNvbHVtbiBtb2RlIHdpdGggdmlzdWFsIGJlbGwuCit3eTg1LXd2Ynx3eXNlODUtd3ZifHd5c2UgODUgd2l0aCB2aXNpYmxlIGJlbGwgMTMyLWNvbHVtbnMsCisJYmVsQCwgdXNlPXd5ODUtdywKKworIyBGcm9tOiBLZXZpbiBUdXJuZXIgPGtldmludEBhcmFjbmV0LmNvbT4sIDEyIEp1bCAxOTk4CisjIFRoaXMgY29wZXMgd2l0aCBhbiBhcHBhcmVudCBmaXJtd2FyZSBidWcgaW4gdGhlIHd5ODUuICBIZSB3cml0ZXM6CisjICJXaGF0IEkgZGlkIHdhcyBjaGFuZ2UgbGVhdmUgdGhlIHRlcm1pbmFsIGN1cnNvciBrZXlzIHNldCB0byBOb3JtYWwKKyMgKGluc3RlYWQgb2YgYXBwbGljYXRpb24pLCBhbmQgY2hhbmdlIFxFWyB0byBcMjMzIGZvciBhbGwgdGhlIGtleXMgaW4KKyMgdGVybWluZm8uIEF0IG9uZSBwb2ludCwgSSBmb3VuZCBzb21lIHJlZmVyZW5jZSBpbmRpY2F0aW5nIHRoYXQgdGhpcworIyB0ZXJtaW5hbCBidWcgKG5vdCBzZW5kaW5nIFxFWykgd2FzIGFja25vd2xlZGdlZCBieSBXeXNlIChzbyBpdCdzIG5vdCBqdXN0CisjIG1lKSwgYnV0IEkgY2FuJ3QgZmluZCB0aGF0IGFuZCB0aGUgc2VydmVyIHVuZGVyIG15IGJvb2ttYXJrIHRvICJXeXNlCisjIFRlY2huaWNhbCIgaXNuJ3QgcmVzcG9uZGluZy4gIFNvIHRoZXJlJ3MgdGhlIHF1ZXN0aW9uIG9mIHdldGhlciB0aGUgd3k4NQorIyB0ZXJtaW5mbyBzaG91bGQgcmVmbGVjdCB0aGUgbWFudWZhY3R1ZXIncyBpbnRlbmRlZCBiZWhhdmlvdXIgb2YgdGhlIHRlcm1pbmFsCisjIG9yIHRoZSBhY3R1YWwuIgord3k4NS04Yml0fHd5c2U4NS04Yml0fHd5c2UgODUgaW4gOC1iaXQgbW9kZSwKKwlhbSwgaHMsIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiQ8MTEwPiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDE+LCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCQ8Myo+LCBkY2gxPVxFW1AkPDM+LCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNJDwzKj4sIGRsMT1cRVtNJDwzPiwgZHNsPVxFWzQwbCwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKJDwxMTA+LCBlbD1cRVtLJDwxPiwgZWwxPVxFWzFLLAorCWVuYWNzPVxFKTAsIGZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDMwMD4sCisJZnNsPVxFWzE7MjRyXEU4LCBob21lPVxFW0gsIGh0PVwwMTEkPDE+LCBodHM9XEVILAorCWljaD1cRVslcDElZEAkPDQqPiwgaWw9XEVbJXAxJWRMJDw1Kj4sIGlsMT1cRVtMJDw1PiwKKwlpbmQ9XG4kPDM+LCBpbnZpcz1cRVs4bSwgaXA9JDwzPiwgaXMxPVxFWzYyOzEicFxFWz81VywKKwlpczI9XEVbMjs0OzIwOzMwbFxFWz8xOzQ7MTA7MTZsXEVbMTJoXEVbPzc7ODsyNWgkPDE2PiwKKwlpczM9XEU+XEUoQlxFKTBcMDE3XEVbbSwga2ExPVxFT3csIGthMz1cRU95LCBrYjI9XEVPdSwKKwlrYnM9XkgsIGtjMT1cRU9xLCBrYzM9XEVPcywga2N1YjE9XDIzM0QsIGtjdWQxPVwyMzNCLAorCWtjdWYxPVwyMzNDLCBrY3V1MT1cMjMzQSwga2RjaDE9XDIzMzN+LCBrZW50PVxFT00sCisJa2YxPVxFT1AsIGtmMTA9XDIzMzIxfiwga2YxMT1cMjMzMjN+LCBrZjEyPVwyMzMyNH4sCisJa2YxMz1cMjMzMjV+LCBrZjE0PVwyMzMyNn4sIGtmMTU9XDIzMzI4fiwga2YxNj1cMjMzMjl+LAorCWtmMTc9XDIzMzMxfiwga2YxOD1cMjMzMzJ+LCBrZjE5PVwyMzMzM34sIGtmMj1cRU9RLAorCWtmMjA9XDIzMzM0fiwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjY9XDIzMzE3fiwga2Y3PVwyMzMxOH4sCisJa2Y4PVwyMzMxOX4sIGtmOT1cMjMzMjB+LCBrZm5kPVwyMzMxfiwga2hscD1cMjMzMjh+LAorCWtob21lPVwyMzMyNn4sIGtpY2gxPVwyMzMyfiwga25wPVwyMzM2fiwga3BwPVwyMzM1fiwKKwlrc2x0PVwyMzM0fiwgbGYxPVBGMSwgbGYyPVBGMiwgbGYzPVBGMywgbGY0PVBGNCwgbWMwPVxFWzBpLAorCW1jND1cRVs0aSwgbWM1PVxFWzVpLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNJDwzPiwKKwlybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEU+LCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczE9XEVbMTNsXEVbM2xcRSFwLCByczI9XEVbMzVoXEVbPzNsJDw3MD4sCisJcnMzPVxFWz81bCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDIldDs0JTslPyVwMyVwMSV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTsrbSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFsXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdHNsPVxFWzQwaFxFN1xFWzI1OyVpJXAxJWRILAorIworIwlXeXNlIDE4NSBlbXVsYXRpbmcgYSB2dDMyMCA3IGJpdCBtb2RlLgorIworIwlUaGlzIHRlcm1pbmFsIGFsd2F5cyBkaXNwbGF5cyAyNSBsaW5lcy4gIFRoZXNlIGxpbmVzIG1heSBiZSB1c2VkCisjCWFzIDI0IGRhdGEgbGluZXMgYW5kIGEgdGVybWluYWwgc3RhdHVzIGxpbmUgKHRvcCBvciBib3R0b20pIG9yCisjCTI1IGRhdGEgbGluZXMuICBUaGUgNDggYW5kIDUwIGxpbmUgbW9kZXMgY2hhbmdlIHRoZSBwYWdlIHNpemUKKyMJYW5kIG5vdCB0aGUgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBzY3JlZW4uCisjCisjCVRoZSBDb21wb3NlIENoYXJhY3RlciBrZXkgY2FuIGJlIHVzZWQgYXMgYSBtZXRhIGtleSBpZiBjaGFuZ2VkCisjCWJ5IHNldC11cC4KKyMKK3d5MTg1fHd5c2UxODV8d3lzZSAxODUsCisJYW0sIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDw0MD4sIGNub3JtPVxFWzM0aFxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciQ8MjA+LCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MjVoXEVbMzRsLCBkY2g9XEVbJXAxJWRQJDwzPiwgZGNoMT1cRVtQJDwzPiwKKwlkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSQ8Mio+LCBkbDE9XEVbTSQ8Mj4sCisJZHNsPVxFN1xFWzk5OzBIXEVbS1xFOCwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiQ8NDA+LAorCWVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9XEUpMCwKKwlmbGFzaD1cRVszMGhcRVwsXEVbMzBsJDwxMDA+LCBmc2w9XEVbMTsyNHJcRTgsCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZGAsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAkPDI+LCBpbD1cRVslcDElZEwkPDMqPiwgaWwxPVxFW0wkPDM+LAorCWluZD1cbiQ8Mj4sIGludmlzPVxFWzhtLCBpcD0kPDQ+LCBpczE9XEVbPzVXLAorCWlzMj1cRVsyOzQ7MjA7MzBsXEVbPzE7NDsxMDsxNmxcRVsxMmhcRVs/Nzs4OzI1aCwKKwlpczM9XEU+XEUoQlxFKTBcMDE3XEVbbSwga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sIGtmMT1cRU9QLAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LAorCWtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LAorCWtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFT1EsIGtmMjA9XEVbMzR+LCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwga2hvbWU9XEVbMjZ+LCBraWNoMT1cRVsyfiwKKwlrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3NsdD1cRVs0fiwgbGYxPVBGMSwgbGYyPVBGMiwgbGYzPVBGMywKKwlsZjQ9UEY0LCBtYzA9XEVbMGksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCByYz1cRTgsIHJldj1cRVs3bSwKKwlyaT1cRU0kPDI+LCBybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtY3VwPVxFWyBSLCBybWlyPVxFWzRsLAorCXJta3g9XEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMxPVxFWzEzbFxFWzNsXEVcXFxFWzYzOzEicFxFWyFwLCByczI9XEVbMzVoXEVbPzNsLAorCXJzMz1cRVs/NWxcRVs0N2hcRVs0MGxcRVtyLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMiV0OzQlOyU/JXAzJXAxJXwldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbIFEsCisJc21pcj1cRVs0aCwgc21reD1cRVs/MWxcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEU3XEVbOTk7JWklcDElZEgsIHZwYT1cRVslaSVwMSVkZCwKKwl1c2U9dnQyMjAra2V5cGFkLAorIworIwlXeXNlIDE4NSB3aXRoIDI0IGRhdGEgbGluZXMgYW5kIHRvcCBzdGF0dXMgKHRlcm1pbmFsIHN0YXR1cykKK3d5MTg1LTI0fHd5c2UxODUtMjR8d3lzZSAxODUgd2l0aCAyNCBkYXRhIGxpbmVzLAorCWhzQCwKKwlkc2xALCBmc2xALCByczM9XEVbPzVsXEVbNDdoXEVbNDBsXEVbMTsyNHIsIHRzbEAsCisJdXNlPXd5MTg1LAorIworIwlXeXNlIDE4NSB3aXRoIHZpc3VhbCBiZWxsLgord3kxODUtdmJ8d3lzZTE4NS12Ynx3eXNlIDE4NStmbGFzaCwKKwliZWxALCB1c2U9d3kxODUsCisjCisjCVd5c2UgMTg1IGluIDEzMi1jb2x1bW4gbW9kZS4KK3d5MTg1LXd8d3lzZTE4NS13fHd5c2UgMTg1IGluIDEzMi1jb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlkY2g9XEVbJXAxJWRQJDw3PiwgZGNoMT1cRVtQJDw3PiwgaWNoPVxFWyVwMSVkQCQ8Nz4sCisJaXA9JDw3PiwgcnMyPVxFWzM1aFxFWz8zaCwgdXNlPXd5MTg1LAorIworIwlXeXNlIDE4NSBpbiAxMzItY29sdW1uIG1vZGUgd2l0aCB2aXN1YWwgYmVsbC4KK3d5MTg1LXd2Ynx3eXNlMTg1LXd2Ynx3eXNlIDE4NStmbGFzaCsxMzIgY29scywKKwliZWxALCB1c2U9d3kxODUtdywKKworIyB3eTMyNSB0ZXJtaW5mbyBlbnRyaWVzCisjIERvbmUgYnkgSm9lIEguIERhdmlzICAgICAgICAzLTktOTIKKworIyBsaW5lcyAyNSAgY29sdW1ucyA4MAorIword3kzMjV8d3lzZTMyNXxXeXNlIGVwYywKKwlhbSwgYncsIGhzLCBtYzVpLCBtaXIsCisJY29scyM4MCwgbGgjMSwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwgcGIjOTYwMSwgd3NsIzQ1LAorCWFjc2M9Ky9cLC4wW2loYTJmeGdxaDFqWWs/bFptQG5FcUR0Q3U0dkF3QngzeXN6cntjfn4sCisJYmVsPV5HLCBibGluaz1cRUcyLCBjYnQ9XEVJLCBjaXZpcz1cRWAwLCBjbGVhcj1cRSskPDUwPiwKKwljbm9ybT1cRWAxLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVyQ8Nz4sCisJZGltPVxFR3AsIGRsMT1cRVIkPDM+LCBkc2w9XEVGXHIsIGVkPVxFWSQ8NTA+LCBlbD1cRVQkPDQ+LAorCWZsYXNoPVxFYDgkPDEwMC8+XEVgOSwgZnNsPV5NLCBob21lPV5eLCBodD1eSSwgaHRzPVxFMSwKKwlpbDE9XEVFJDwzPiwgaW5kPVxuJDwzPiwgaXA9JDwyPiwgaXMxPVxFY0IwXEVjQzEsCisJaXMyPVxFY0RcRSdcRXJcRUhcMDAzXEVkL1xFT1xFZTFcRWQqXEVgQFxFYDlcRWAxXDAxNlwwMjRcRWwsCisJaXMzPVxFdzAkPDE2Piwga0hPTT1cRXssIGticz1eSCwga2NidD1cRUksIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRVksCisJa2VsPVxFVCwga2VudD1cRTcsIGtmMT1eQUBcciwga2YxMD1eQUlcciwga2YxMT1eQUpcciwKKwlrZjEyPV5BS1xyLCBrZjEzPV5BTFxyLCBrZjE0PV5BTVxyLCBrZjE1PV5BTlxyLCBrZjE2PV5BT1xyLAorCWtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLAorCWtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBraWNoMT1cRXEsCisJa2lsMT1cRUUsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLCBrcnBsPVxFciwgbGw9Xl5eSywKKwltYzA9XEVQLCBtYzQ9XlQsIG1jNT1cRWQjLAorCXBmbG9jPVxFWjIlcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGZ4PVxFWjElcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGxuPVxFeiVwMSV7NDd9JSslYyVwMiVzXHIsIHByb3Q9XEUpLCByaT1cRWokPDI+LAorCXJtYWNzPVxFY0QsIHJtYW09XEVkLiwgcm1jdXA9XEV3MCwgcm1pcj1cRXIsIHJtbG49XEVBMTEsCisJcnMxPVxFfiFcRX40JDwzMD4sIHJzMj1cRWVGXEVgXDokPDcwPiwKKwlyczM9XEV3R1xFZSgkPDEwMD4sCisJc2dyPSU/JXA4JXRcRSklZVxFKCU7JT8lcDkldFxFY0UlZVxFY0QlO1xFRyV7NDh9JT8lcDIldCV7OH0lfCU7JT8lcDElcDMlfCVwNiV8JXQlezR9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXAxJXA1JXwldCV7NjR9JXwlOyU/JXA3JXQlezF9JXwlOyVjLAorCXNncjA9XEUoXEVIXDAwM1xFRzBcRWNELCBzbWFjcz1cRWNFLCBzbWFtPVxFZC8sCisJc21jdXA9XEV3MSwgc21pcj1cRXEsIHNtbG49XEVBMTAsIHNtc289XEVHdCwgdGJjPVxFMCwKKwl0c2w9XEVGLCB1c2U9YWRtK3NnciwKKworIworIyBsaW5lcyAyNCAgY29sdW1ucyA4MCAgdmIKKyMKK3d5MzI1LXZifHd5c2UzMjUtdmJ8d3lzZS0zMjUgd2l0aCB2aXN1YWwgYmVsbCwKKwliZWxALCB1c2U9d3kzMjUsCisKKyMKKyMgbGluZXMgMjQgIGNvbHVtbnMgMTMyCisjCit3eTMyNS13fHd5c2UzMjUtd3x3eTMyNXctMjR8d3lzZS0zMjUgaW4gd2lkZSBtb2RlLAorCWNvbHMjMTMyLCBsdyM3LCBubGFiIzE2LCB3c2wjOTcsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDLCBkY2gxPVxFVyQ8MTI+LCBpcD0kPDQ+LAorCXJzMj1cRWA7JDw3MD4sIHVzZT13eTMyNSwKKyMKKyMgbGluZXMgMjUgIGNvbHVtbnMgODAKKyMKK3d5MzI1LTI1fHd5c2UzMjUtMjV8d3kzMjUtODB8d3lzZS0zMjV8d3lzZS0zMjUgMjUgbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDEwMD4sIHVzZT13eTMyNSwKKyMKKyMgbGluZXMgMjUgIGNvbHVtbnMgMTMyCisjCit3eTMyNS0yNXd8d3lzZTMyNS0yNXd8d3kzMjUgMTMyIGNvbHVtbnMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDEwMD4sIHVzZT13eTMyNS13LAorIworIyBsaW5lcyAyNSAgY29sdW1ucyAxMzIgIHZiCisjCit3eTMyNS13LXZifHd5MzI1LXd2Ynx3eXNlMzI1LXd2Ynx3eXNlLTMyNSB3aWRlIG1vZGUgcmV2ZXJzZSB2aWRlbywKKwliZWxALCB1c2U9d3kzMjUtdywKKworIworIyBsaW5lcyA0MiAgY29sdW1ucyA4MAorIword3kzMjUtNDJ8d3lzZTMyNS00Mnx3eXNlLTMyNSA0MiBsaW5lcywKKwlsaEAsIGxpbmVzIzQyLCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRXdHXEVlKSQ8MTAwPiwgdXNlPXd5MzI1LAorIworIyBsaW5lcyA0MiAgY29sdW1ucyAxMzIKKyMKK3d5MzI1LTQyd3x3eXNlMzI1LTQyd3x3eXNlLTMyNSA0MiBsaW5lcyB3aWRlIG1vZGUsCisJbGhALCBsaW5lcyM0MiwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDEwMD4sIHVzZT13eTMyNS13LAorIworIyBsaW5lcyA0MiAgY29sdW1ucyAxMzIgIHZiCisjCit3eTMyNS00MnctdmJ8d3kzMjUtNDJ3dmJ8d3lzZS0zMjUgNDIgbGluZXMgd2lkZSBtb2RlIHZpc3VhbCBiZWxsLAorCWJlbEAsIHVzZT13eTMyNS13LAorIworIyBsaW5lcyA0MyAgY29sdW1ucyA4MAorIword3kzMjUtNDN8d3lzZTMyNS00M3x3eXNlLTMyNSA0MyBsaW5lcywKKwlsaEAsIGxpbmVzIzQzLCBsd0AsIG5sYWJALAorCXBsbkAsIHVzZT13eTMyNSwKKyMKKyMgbGluZXMgNDMgIGNvbHVtbnMgMTMyCisjCit3eTMyNS00M3d8d3lzZTMyNS00M3d8d3lzZS0zMjUgNDMgbGluZXMgd2lkZSBtb2RlLAorCWxoQCwgbGluZXMjNDMsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwxMDA+LCB1c2U9d3kzMjUtdywKKyMKKyMgbGluZXMgNDMgIGNvbHVtbnMgMTMyICB2YgorIword3kzMjUtNDN3LXZifHd5MzI1LTQzd3ZifHd5c2UtMzI1IDQzIGxpbmVzIHdpZGUgbW9kZSB2aXN1YWwgYmVsbCwKKwliZWxALCB1c2U9d3kzMjUtdywKKworIwlXeXNlIDM3MCAtLSAyNCBsaW5lIHNjcmVlbiB3aXRoIHN0YXR1cyBsaW5lLgorIworIwlUaGUgdGVybWluYWwgbWF5IGhhdmUgdG8gYmUgc2V0IGZvciA4IGRhdGEgYml0cyBhbmQgMiBzdG9wCisjCWJpdHMgZm9yIHRoZSBhcnJvdyBrZXlzIHRvIHdvcmsuCisjCisjCUlmIHlvdSBjaGFuZ2Uga2V5Ym9hcmRzIHRoZSB0ZXJtaW5hbCB3aWxsIHNlbmQgZGlmZmVyZW50CisjCWVzY2FwZSBzZXF1ZW5jZXMuCisjCVRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBpcyBmb3IgdGhlIGJhc2ljIHRlcm1pbmFsIHdpdGhvdXQKKyMJZnVuY3Rpb24ga2V5cy4KKyMKKyMJPHUwPiAtPiBlbnRlciBUZWt0cm9uaXggNDAxMC80MDE0IG1vZGUKKyMJPHUxPiAtPiBleGl0ICBUZWt0cm9uaXggNDAxMC80MDE0IG1vZGUKKyMJPHUyPiAtPiBlbnRlciBBU0NJSSBtb2RlIChmcm9tIGFueSBBTlNJIG1vZGUpCisjCTx1Mz4gLT4gZXhpdCAgQVNDSUkgbW9kZSAoZ290byBuYXRpdmUgQU5TSSBtb2RlKQorIwk8dTQ+IC0+IGVudGVyIFRlayA0MjA3IEFOU0kgbW9kZSAoZnJvbSBhbnkgQU5TSSBtb2RlKQorIwk8dTU+IC0+IGV4aXQgIFRlayA0MjA3IG1vZGUgKGdvdG8gbmF0aXZlIEFOU0kgbW9kZSkKKyMKKyMgQnVnOiBUaGUgPG9wPiBjYXBhYmlsaXR5IHJlc2V0cyBhdHRyaWJ1dGVzLgord3kzNzAtbmt8d3lzZSAzNzAgd2l0aG91dCBmdW5jdGlvbiBrZXlzLAorCWFtLCBjY2MsIGhzLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xvcnMjNjQsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBuY3YjNDgsIHBhaXJzIzY0LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiQ8NDA+LCBjbm9ybT1cRVszNGhcRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MT4sIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MjVoXEVbMzRsLCBkY2g9XEVbJXAxJWRQJDwxKj4sIGRjaDE9XEVbUCQ8MT4sCisJZGNsaz1cRVszMWgsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNJDwyKj4sIGRsMT1cRVtNJDwyPiwKKwlkc2w9XEVbNDBsLCBlY2g9XEVbJXAxJWRYJDwuMSo+LCBlZD1cRVtKJDw0MD4sCisJZWw9XEVbSyQ8MTA+LCBlbDE9XEVbMUskPDEyPiwgZW5hY3M9XEUpMCwKKwlmbGFzaD1cRVszMGhcRVwsXEVbMzBsJDwzMDA+LCBmc2w9XEVbMTsyNHJcRTgsCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZGAsIGh0PVwwMTEkPDE+LCBodHM9XEVILAorCWljaD1cRVslcDElZEAkPDEqPiwgaWw9XEVbJXAxJWRMJDwyKj4sIGlsMT1cRVtMJDwyPiwKKwlpbmQ9XG4kPDI+LAorCWluaXRjPVxFWzY2OyVwMSVkOyU/JXAyJXsyNTB9JTwldCV7MH0lZSVwMiV7NTAwfSU8JXQlezE2fSVlJXAyJXs3NTB9JTwldCV7MzJ9JWUlezQ4fSU7JT8lcDMlezI1MH0lPCV0JXswfSVlJXAzJXs1MDB9JTwldCV7NH0lZSVwMyV7NzUwfSU8JXQlezh9JWUlezEyfSU7JT8lcDQlezI1MH0lPCV0JXswfSVlJXA0JXs1MDB9JTwldCV7MX0lZSVwNCV7NzUwfSU8JXQlezJ9JWUlezN9JTslezF9JSslKyUrJWR3LAorCWludmlzPVxFWzhtLCBpcD0kPDE+LCBpczE9XEVbOTA7MSJwXEVbPzVXJDw2PiwKKwlpczI9XEVbMjs0OzIwOzMwOzQwbFxFWz8xOzEwOzE2bFxFWzEyaFxFWz83Ozg7MjVoLAorCWlzMz1cRT5cMDE3XEUpMFxFKEJcRVs2Mzswd1xFW20sIG1jMD1cRVswaSwgbWM0PVxFWzRpLAorCW1jNT1cRVs1aSwKKwlvYz1cRVs2MHdcRVs2Mzswd1xFWzY2OzE7NHdcRVs2NjsyOzEzd1xFWzY2OzM7MTZ3XEVbNjY7NDs0OXdcRVs2Njs1OzUxd1xFWzY2OzY7NjF3XEVbNjY7Nzs2NHcsCisJb3A9XEVbbSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSQ8Mj4sIHJtYWNzPV5PLAorCXJtYW09XEVbPzdsLCBybWNsaz1cRVszMWwsIHJtY3VwPVxFWyBSLCBybWlyPVxFWzRsLAorCXJta3g9XEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMxPVxFWzEzbFxFWzNsXEUhcFxFWz80aSwgcnMyPVxFWzM1aFxFWz8zbCQ8OD4sCisJcnMzPVxFWz81bCwgc2M9XEU3LCBzZXRiPVxFWzYyOyVwMSVkdywgc2V0Zj1cRVs2MTslcDElZHcsCisJc2dyPVxFWzAlPyVwMiV0OzQlOyU/JXAzJXAxJXwldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbIFEsCisJc21pcj1cRVs0aCwgc21reD1cRVs/MWxcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVbNDBsXEVbNDBoXEU3XEVbOTk7JWklcDElZEgsCisJdTA9XEVbPzM4aFxFOCwgdTE9XEVbPzM4bFxFKTAsIHUyPVxFWzkyOzUyInAsIHUzPVxFfkIsCisJdTQ9XEVbOTI7NzYicCwgdTU9XEUlITFcRVs5MDsxInAsIHZwYT1cRVslaSVwMSVkZCwKKyMKKyMJRnVuY3Rpb24ga2V5IHNldCBmb3IgdGhlIEFTQ0lJICh3eS01MCBjb21wYXRpYmxlKSBrZXlib2FyZAorIwlUaGlzIGlzIHRoZSBkZWZhdWx0IDM3MC4KKyMKK3d5MzcwfHd5c2UzNzB8d3kzNzAtMTAxa3xXeXNlIDM3MCB3aXRoIDEwMSBrZXkga2V5Ym9hcmQsCisJa2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2RjaDE9XEVPUSwga2RsMT1cRU9RLCBrZW50PVxFT00sIGtmMT1cRVs/NGksCisJa2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sCisJa2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwga2YyPVxFWz8zaSwKKwlrZjM9XEVbMmksIGtmND1cRVtALCBrZjU9XEVbTSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraG9tZT1cRVtILCBraWNoMT1cRU9QLCBraWwxPVxFT1AsCisJa25wPVxFW1UsIGtwcD1cRVtWLCB1c2U9d3kzNzAtbmssCisjCisjCUZ1bmN0aW9uIGtleSBzZXQgZm9yIHRoZSBWVC0zMjAgKGFuZCB3eTg1KSBjb21wYXRpYmxlIGtleWJvYXJkCisjCit3eTM3MC0xMDVrfFd5c2UgMzcwIHdpdGggMTA1IGtleSBrZXlib2FyZCwKKwlrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sCisJa2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sCisJa2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyMD1cRVszNH4sCisJa2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwKKwlraGxwPVxFWzI4fiwga2hvbWU9XEVbMjZ+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwga3NsdD1cRVs0fiwgbGYxPVBGMSwgbGYyPVBGMiwgbGYzPVBGMywgbGY0PVBGNCwKKwl1c2U9d3kzNzAtbmssIHVzZT12dDIyMCtrZXlwYWQsCisjCisjCUZ1bmN0aW9uIGtleSBzZXQgZm9yIHRoZSBQQyBjb21wYXRpYmxlIGtleWJvYXJkCisjCit3eTM3MC1FUEN8V3lzZSAzNzAgd2l0aCAxMDIga2V5IGtleWJvYXJkLAorCWticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtlbmQ9XEVbMX4sIGtlbnQ9XEVPTSwga2YxPVxFT1AsIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywKKwlrZjU9XEVbTSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlraG9tZT1cRVtILCBraWNoMT1cRVsyfiwga25wPVxFW1UsIGtwcD1cRVtWLCB1c2U9d3kzNzAtbmssCisjCisjCVd5c2UgMzcwIHdpdGggdmlzdWFsIGJlbGwuCit3eTM3MC12YnxXeXNlIDM3MCB3aXRoIHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3kzNzAsCisjCisjCVd5c2UgMzcwIGluIDEzMi1jb2x1bW4gbW9kZS4KK3d5MzcwLXd8V3lzZSAzNzAgaW4gMTMyLWNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCXJzMj1cRVszNWhcRVs/M2gkPDcwPiwgdXNlPXd5MzcwLAorIworIwlXeXNlIDM3MCBpbiAxMzItY29sdW1uIG1vZGUgd2l0aCB2aXN1YWwgYmVsbC4KK3d5MzcwLXd2YnxXeXNlIDM3MCB3aXRoIHZpc2libGUgYmVsbCAxMzItY29sdW1ucywKKwlmbGFzaD1cRVszMGhcRVwsXEVbMzBsJDwzMDA+LCB1c2U9d3kzNzAtdywKK3d5MzcwLXJ2fFd5c2UgMzcwIHJldmVyc2UgdmlkZW8sCisJcnMzPVxFWzMyaFxFWz81aCwgdXNlPXd5MzcwLAorIworIwlXeXNlIDk5Z3QgVGVrdHJvbml4IDQwMTAvNDAxNCBlbXVsYXRvciwKKyMKK3d5OTlndC10ZWt8V3lzZSA5OWd0IFRla3Ryb25peCA0MDEwLzQwMTQgZW11bGF0b3IsCisJYW0sIG9zLAorCWNvbHMjNzQsIGxpbmVzIzM1LAorCWJlbD1eRywgY2xlYXI9XEVeTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XHMsCisJY3VwPVwwMzUlezMwNDB9JXs4OX0lcDElKiUtJVB5JXAyJXs1NX0lKiVQeCVneSV7MTI4fSUvJXszMX0lJiV7MzJ9JSslYyVneSV7M30lJiV7NH0lKiVneCV7M30lJiUrJXs5Nn0lKyVjJWd5JXswMDR9JS8lezMxfSUmJXs5Nn0lKyVjJWd4JXsxMjh9JS8lezMxfSUmJXszMn0lKyVjJWd4JXswMDR9JS8lezMxfSUmJXs2NH0lKyVjXDAzNywKKwljdXUxPV5LLCBmZj1eTCwKKwloZD1cMDM2SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcMDM3LAorCWhvbWU9Xl03YHggQFwwMzcsCisJaHU9XDAzNkREREREREREREREREREREREREREREREREREREREREREREREREREREREXDAzNywKKwlpczI9XEU4LCBuZWw9Xk1eSiwgdTA9XEV+PlxFOCwgdTE9XEVbNDJoLAorIworIwlXeXNlIDE2MCBUZWt0cm9uaXggNDAxMC80MDE0IGVtdWxhdG9yLAorIword3kxNjAtdGVrfFd5c2UgMTYwIFRla3Ryb25peCA0MDEwLzQwMTQgZW11bGF0b3IsCisJY3VwPVwwMzUlezMxMDN9JXs5MX0lcDElKiUtJVB5JXAyJXs1NX0lKiVQeCVneSV7MTI4fSUvJXszMX0lJiV7MzJ9JSslYyVneSV7M30lJiV7NH0lKiVneCV7M30lJiUrJXs5Nn0lKyVjJWd5JXswMDR9JS8lezMxfSUmJXs5Nn0lKyVjJWd4JXsxMjh9JS8lezMxfSUmJXszMn0lKyVjJWd4JXswMDR9JS8lezMxfSUmJXs2NH0lKyVjXDAzNywKKwlob21lPV5dOGBnIEBcMDM3LCB1c2U9d3k5OWd0LXRlaywKKyMKKyMJV3lzZSAzNzAgVGVrdHJvbml4IDQwMTAvNDAxNCBlbXVsYXRvciwKKyMKK3d5MzcwLXRla3xXeXNlIDM3MCBUZWt0cm9uaXggNDAxMC80MDE0IGVtdWxhdG9yLAorCWFtLCBvcywKKwljb2xzIzgwLCBsaW5lcyMzNiwKKwliZWw9XkcsIGNsZWFyPVxFXkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxzLAorCWN1cD1cMDM1JXs3NzV9JXsxMDh9JXAxJSolezV9JS8lLSVQeSVwMiV7NjR9JSolezR9JSslezV9JS8lUHglZ3klezMyfSUvJXszMX0lJiV7MzJ9JSslYyVneSV7MzF9JSYlezk2fSUrJWMlZ3glezMyfSUvJXszMX0lJiV7MzJ9JSslYyVneCV7MzF9JSYlezY0fSUrJWNcMDM3LAorCWN1dTE9XkssIGZmPV5MLAorCWhkPVwwMzZISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcMDM3LAorCWhvbWU9Xl04ZyBAXDAzNywKKwlodT1cMDM2RERERERERERERERERERERERERERERERERERERERERERERERERERERFwwMzcsCisJaXMyPVxFOCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5JLCBrY3V1MT1eSywKKwluZWw9Xk1eSiwgdTA9XEVbPzM4aFxFOCwgdTE9XEVbPzM4bFxFKTAsCisKKyMgVmVuZG9yLXN1cHBsaWVkIFd5c2UgZW50cmllcyBlbmQgaGVyZS4KKworIworI1RJVExFOiAgVEVSTUlORk8gRU5UUlkgV1k1MjAKKyNEQVRFOiAgIDgvNS85MworIyBUaGUgV1k1MjAgdGVybWluZm8gaXMgYmFzZWQgb24gdGhlIFdZMjg1IGVudHJ5IHB1Ymxpc2hlZCBvbiB0aGUgV1lTRQorIyBCQlMgd2l0aCB0aGUgYWRkaXRpb24gb2YgbW9yZSBmdW5jdGlvbiBrZXlzIGFuZCBzcGVjaWFsIGtleXMuCisjCisjICAgICAgICAgICAgICAgcnMxIC0+IHNldCBwZXJzb25hbGl0eQorIyAgICAgICAgICAgICAgIHJzMiAtPiBzZXQgbnVtYmVyIG9mIGNvbHVtbnMKKyMgICAgICAgICAgICAgICByczMgLT4gc2V0IG51bWJlciBvZiBsaW5lcworIyAgICAgICAgICAgICAgIGlzMSAtPiBzZWxlY3QgdGhlIHByb3BlciBmb250CisjICAgICAgICAgICAgICAgaXMyIC0+IGRvIHRoZSBpbml0aWFsaXphdGlvbgorIyAgICAgICAgICAgICAgIGlzMyAtPiBJZiB0aGlzIHN0cmluZyBpcyBlbXB0eSB0aGVuIHJzMyBnZXRzIHNlbnQuCisjCisjICAgICAgIFd5c2UgNTIwIGVtdWxhdGluZyBhIHZ0NDIwIDcgYml0IG1vZGUgd2l0aCBkZWZhdWx0IEFOU0kga2V5Ym9hcmQKKyMgICAgICAgLSBUaGUgQlMga2V5IGlzIHByb2dyYW1tZWQgdG8gZ2VuZXJhdGUgQlMgaW4gc21jdXAgc2luY2UKKyMgICAgICAgICBpczIgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisjICAgICAgIC0gUmVtb3ZlIGFuZCBzaGlmdC9SZW1vdmU6IGRlbGV0ZSBhIGNoYXJhY3RlcgorIyAgICAgICAtIEluc2VydCA6IGVudGVyIGluc2VydCBtb2RlCisjICAgICAgIC0gRmluZCAgIDogZGVsZXRlIHRvIGVuZCBvZiBmaWxlCisjICAgICAgIC0gU2VsZWN0IDogY2xlYXIgYSBsaW5lCisjICAgICAgIC0gRjExLCBGMTIsIEYxMzogc2VuZCBkZWZhdWx0IHNlcXVlbmNlcyAobm90IEVTQywgQlMsIExGKQorIyAgICAgICAtIEYxNCA6IEhvbWUga2V5CisjICAgICAgIC0gQm90dG9tIHN0YXR1cyBsaW5lIChob3N0IHdyaXRhYmxlIGxpbmUpIGlzIHVzZWQuCisjICAgICAgIC0gc21reCxybWt4IGFyZSByZW1vdmVkIGJlY2F1c2UgdGhpcyB3b3VsZCBwdXQgdGhlIG51bWVyaWMKKyMgICAgICAgICBrZXlwYWQgaW4gRGVjIGFwcGxpY2F0aW9uIG1vZGUgd2hpY2ggZG9lc24ndCBzZWVtIHRvIHdvcmsKKyMgICAgICAgICB3aXRoIFNDTyBhcHBsaWNhdGlvbnMuCisjCit3eTUyMHx3eXNlNTIwfHd5c2UgNTIwLAorCWFtLCBocywga20sIG1jNWksIG1pciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiQ8NDA+LCBjbm9ybT1cRVszNGhcRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIkPDIwPiwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPzI1aFxFWzM0bCwgZGNoPVxFWyVwMSVkUCQ8Mz4sIGRjaDE9XEVbUCQ8MzA+LAorCWRpbT1cRVsybSwgZGw9XEVbJXAxJWRNJDwyKj4sIGRsMT1cRVtNJDwyPiwgZHNsPVxFWzAkfiwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKJDw0MD4sIGVsPVxFW0ssIGVsMT1cRVsxSywKKwllbmFjcz1cRSkwLCBmc2w9XEVbMCR9LCBob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XkksCisJaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCQ8Mj4sIGlsPVxFWyVwMSVkTCQ8Myo+LAorCWlsMT1cRVtMJDwzPiwgaW5kPVxuJDwyPiwgaW52aXM9XEVbOG0sIGlwPSQ8ND4sIGlzMT1cRVs/NVcsCisJaXMyPVxFWzI7NDsyMDszMGxcRVs/MTs0OzEwOzE2bFxFWzEyaFxFWz83Ozg7MjU7NjdoLAorCWlzMz1cRT5cRShCXEUpMFwwMTdcRVttLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVszfiwga2VkPVxFWzF+LAorCWtlbD1cRVs0fiwga2VudD1cRU9NLCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sCisJa2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sCisJa2YyMD1cRVszNH4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sCisJa2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwga2hscD1cRVsyOH4sIGtob21lPVxFWzI2fiwKKwlraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtzbHQ9XEVbNH4sIGxmMT1QRjEsCisJbGYyPVBGMiwgbGYzPVBGMywgbGY0PVBGNCwgbWMwPVxFWzBpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwKKwlyYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNJDwyPiwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLAorCXJtY3VwPVxFWyBSLCBybWlyPVxFWzRsLCBybXNvPVxFW20sIHJtdWw9XEVbMjRtLAorCXJzMT1cRVsxM2xcRVszbFxFXFxcRVs2MzsxInBcRVshcCwgcnMyPVxFWzM1aFxFWz8zbCwKKwlyczM9XEVbPzVsXEVbNDdoXEVbNDBsXEVbciwgc2M9XEU3LAorCXNncj1cRVswJT8lcDIldDs0JTslPyVwMyVwMSV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsCisJc21jdXA9XEVbIFFcRVs/Njc7OGgsIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVbMiR+XEVbMSR9XEVbJWklcDElZGAsCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9dnQyMjAra2V5cGFkLAorIworIyAgICAgICBXeXNlIDUyMCB3aXRoIDI0IGRhdGEgbGluZXMgYW5kIHN0YXR1cyAodGVybWluYWwgc3RhdHVzKQord3k1MjAtMjR8d3lzZTUyMC0yNHx3eXNlIDUyMCB3aXRoIDI0IGRhdGEgbGluZXMsCisJaHNALAorCWRzbEAsIGZzbEAsIHJzMz1cRVs/NWxcRVs0N2hcRVs0MGxcRVsxOzI0ciwgdHNsQCwKKwl1c2U9d3k1MjAsCisjCisjICAgICAgIFd5c2UgNTIwIHdpdGggdmlzdWFsIGJlbGwuCit3eTUyMC12Ynx3eXNlNTIwLXZifHd5c2UgNTIwIHdpdGggdmlzaWJsZSBiZWxsLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDEwMD4sIHVzZT13eTUyMCwKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiBtb2RlLgord3k1MjAtd3x3eXNlNTIwLXd8d3lzZSA1MjAgaW4gMTMyLWNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWRjaD1cRVslcDElZFAkPDc+LCBkY2gxPVxFW1AkPDc+LCBpY2g9XEVbJXAxJWRAJDw3PiwKKwlpcD0kPDc+LCByczI9XEVbMzVoXEVbPzNoLCB1c2U9d3k1MjAsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDEzMi1jb2x1bW4gbW9kZSB3aXRoIHZpc3VhbCBiZWxsLgord3k1MjAtd3ZifHd5c2U1MjAtd3ZifHd5c2UgNTIwIHdpdGggdmlzaWJsZSBiZWxsIDEzMi1jb2x1bW5zLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDEwMD4sIHVzZT13eTUyMC13LAorIworIworIyAgICAgICBXeXNlIDUyMCBlbXVsYXRpbmcgYSB2dDQyMCA3IGJpdCBtb2RlLgorIyAgICAgICBUaGUgREVMIGtleSBpcyBwcm9ncmFtbWVkIHRvIGdlbmVyYXRlIEJTIGluIGlzMi4KKyMgICAgICAgV2l0aCBFUEMga2V5Ym9hcmQuCisjICAgICAgIC0gJ0VuZCcga2V5IHdpbGwgY2xlYXIgdGlsbCBlbmQgb2YgbGluZSBvbiBFUEMga2V5Ym9hcmQKKyMgICAgICAgLSBTaGlmdC9FbmQgOiBpZ25vcmVkLgorIyAgICAgICAtIEluc2VydCA6IGVudGVyIGluc2VydCBtb2RlLgorIyAgICAgICAtIERlbGV0ZSA6IGRlbGV0ZSBhIGNoYXJhY3RlciAoaGF2ZSB0byBjaGFuZ2UgaW50ZXJydXB0IGNoYXJhY3RlcgorIyAgICAgICAgICAgICAgICAgIHRvIENUUkwtQzogc3R0eSBpbnRyICdeYycpIGZvciBpdCB0byB3b3JrIHNpbmNlIHRoZQorIyAgICAgICAgICAgICAgICAgIERlbGV0ZSBrZXkgc2VuZHMgN0ZILgord3k1MjAtZXBjfHd5c2U1MjAtZXBjfHd5c2UgNTIwIHdpdGggRVBDIGtleWJvYXJkLAorCWtkY2gxPVwxNzcsIGtlbD1cRVs0fiwga2VuZD1cRVs0fiwga2YwPVxFWzIxfiwga2YxPVxFWzExfiwKKwlrZjI9XEVbMTJ+LCBrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LCBrZjU9XEVbMTV+LCBraG9tZT1cRVtILAorCXVzZT13eTUyMCwKKyMKKyMgICAgICAgV3lzZSA1MjAgd2l0aCAyNCBkYXRhIGxpbmVzIGFuZCBzdGF0dXMgKHRlcm1pbmFsIHN0YXR1cykKKyMgICAgICAgd2l0aCBFUEMga2V5Ym9hcmQuCit3eTUyMC1lcGMtMjR8d3lzZTUyMC1wYy0yNHx3eXNlIDUyMCB3aXRoIDI0IGRhdGEgbGluZXMgYW5kIEVQQyBrZXlib2FyZCwKKwloc0AsCisJZHNsQCwgZnNsQCwgcnMzPVxFWz81bFxFWzQ3aFxFWzQwbFxFWzE7MjRyLCB0c2xALAorCXVzZT13eTUyMC1lcGMsCisjCisjICAgICAgIFd5c2UgNTIwIHdpdGggdmlzdWFsIGJlbGwuCit3eTUyMC1lcGMtdmJ8d3lzZTUyMC1wYy12Ynx3eXNlIDUyMCB3aXRoIHZpc2libGUgYmVsbCBhbmQgRVBDIGtleWJvYXJkLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDEwMD4sIHVzZT13eTUyMC1lcGMsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDEzMi1jb2x1bW4gbW9kZS4KK3d5NTIwLWVwYy13fHd5c2U1MjAtZXBjLXd8d3lzZSA1MjAgaW4gMTMyLWNvbHVtbiBtb2RlIHdpdGggRVBDIGtleWJvYXJkLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWRjaD1cRVslcDElZFAkPDc+LCBkY2gxPVxFW1AkPDc+LCBpY2g9XEVbJXAxJWRAJDw3PiwKKwlpcD0kPDc+LCByczI9XEVbMzVoXEVbPzNoLCB1c2U9d3k1MjAtZXBjLAorIworIyAgICAgICBXeXNlIDUyMCBpbiAxMzItY29sdW1uIG1vZGUgd2l0aCB2aXN1YWwgYmVsbC4KK3d5NTIwLWVwYy13dmJ8d3lzZTUyMC1wLXd2Ynx3eXNlIDUyMCB3aXRoIHZpc2libGUgYmVsbCAxMzItY29sdW1ucyBhbmQgRVBDIGtleWJvYXJkLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDEwMD4sIHVzZT13eTUyMC1lcGMtdywKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gODAtY29sdW1uLCAzNiBsaW5lcword3k1MjAtMzZ8d3lzZTUyMC0zNnx3eXNlIDUyMCB3aXRoIDM2IGRhdGEgbGluZXMsCisJaHNALAorCWxpbmVzIzM2LAorCWRzbEAsIGZzbEAsIHJzMz1cRVs/NWxcRVszNip8XEVbMzZ0XEVbNDBsXEVbMTszNnIsIHRzbEAsCisJdXNlPXd5NTIwLAorIworIyAgICAgICBXeXNlIDUyMCBpbiA4MC1jb2x1bW4sIDQ4IGxpbmVzCit3eTUyMC00OHx3eXNlNTIwLTQ4fHd5c2UgNTIwIHdpdGggNDggZGF0YSBsaW5lcywKKwloc0AsCisJbGluZXMjNDgsCisJZHNsQCwgZnNsQCwgcnMzPVxFWz81bFxFWzQ4KnxcRVs0OHRcRVs0MGxcRVsxOzQ4ciwgdHNsQCwKKwl1c2U9d3k1MjAsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDEzMi1jb2x1bW4sIDM2IGxpbmVzCit3eTUyMC0zNnd8d3lzZTUyMC0zNnd8d3lzZSA1MjAgd2l0aCAxMzIgY29sdW1ucyBhbmQgMzYgZGF0YSBsaW5lcywKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlyczI9XEVbPzNoLAorCXJzMz1cRVs/NWxcRVszNip8XEVbMzZ0XEVbNDBsXEVbMTszNnJcRVsxMzIkfCwKKwl1c2U9d3k1MjAtMzYsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDEzMi1jb2x1bW4sIDQ4IGxpbmVzCit3eTUyMC00OHd8d3lzZTUyMC00OHd8d3lzZSA1MjAgd2l0aCA0OCBkYXRhIGxpbmVzLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCXJzMj1cRVs/M2gsCisJcnMzPVxFWz81bFxFWzQ4KnxcRVs0OHRcRVs0MGxcRVsxOzQ4clxFWzEzMiR8LAorCXVzZT13eTUyMC00OCwKKyMKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gODAtY29sdW1uLCAzNiBsaW5lcyB3aXRoIEVQQyBrZXlib2FyZAord3k1MjAtMzZwY3x3eXNlNTIwLTM2cGN8d3lzZSA1MjAgd2l0aCAzNiBkYXRhIGxpbmVzIGFuZCBFUEMga2V5Ym9hcmQsCisJaHNALAorCWxpbmVzIzM2LAorCWRzbEAsIGZzbEAsIHJzMz1cRVs/NWxcRVszNip8XEVbMzZ0XEVbNDBsXEVbMTszNnIsIHRzbEAsCisJdXNlPXd5NTIwLWVwYywKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gODAtY29sdW1uLCA0OCBsaW5lcyB3aXRoIEVQQyBrZXlib2FyZAord3k1MjAtNDhwY3x3eXNlNTIwLTQ4cGN8d3lzZSA1MjAgd2l0aCA0OCBkYXRhIGxpbmVzIGFuZCBFUEMga2V5Ym9hcmQsCisJaHNALAorCWxpbmVzIzQ4LAorCWRzbEAsIGZzbEAsIHJzMz1cRVs/NWxcRVs0OCp8XEVbNDh0XEVbNDBsXEVbMTs0OHIsIHRzbEAsCisJdXNlPXd5NTIwLWVwYywKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiwgMzYgbGluZXMgd2l0aCBFUEMga2V5Ym9hcmQKK3d5NTIwLTM2d3BjfHd5c2U1MjAtMzZ3cGN8d3lzZSA1MjAgd2l0aCAzNiBkYXRhIGxpbmVzIGFuZCBFUEMga2V5Ym9hcmQsCisJY29scyMxMzIsIHdzbCMxMzIsCisJcnMyPVxFWz8zaCwKKwlyczM9XEVbPzVsXEVbMzYqfFxFWzM2dFxFWzQwbFxFWzE7MzZyXEVbMTMyJHwsCisJdXNlPXd5NTIwLTM2cGMsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDEzMi1jb2x1bW4sIDQ4IGxpbmVzIHdpdGggRVBDIGtleWJvYXJkCit3eTUyMC00OHdwY3x3eXNlNTIwLTQ4d3BjfHd5c2UgNTIwIHdpdGggNDggZGF0YSBsaW5lcyBhbmQgRVBDIGtleWJvYXJkLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCXJzMj1cRVs/M2gsCisJcnMzPVxFWz81bFxFWzQ4KnxcRVs0OHRcRVs0MGxcRVsxOzQ4clxFWzEzMiR8LAorCXVzZT13eTUyMC00OHBjLAorCisjIEZyb206IEpvaG4gR2lsbW9yZSA8aG9wdG9hZCFnbnVAbGxsLWNyZy5hcnBhPgorIyAod3lzZS12cDogcmVtb3ZlZCA8aWY9L3Vzci9zaGFyZS90YWJzZXQvd3lzZS1hZGRzPiwgdGhlcmUncyBubyBzdWNoCisjIGZpbGUgYW5kIHdlIGRvbid0IGtub3cgd2hhdCA8aHRzPiBpcyAtLSBlc3IpCit3eXNlLXZwfFd5c2UgNTAgaW4gQUREUyBWaWV3cG9pbnQgZW11bGF0aW9uIG1vZGUgd2l0aCAiZW5oYW5jZSIgb24sCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkYsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eWiwgZGNoMT1cRVcsCisJZGwxPVxFbCwgZWQ9XEVrLCBlbD1cRUssIGhvbWU9XkEsIGh0PV5JLCBpbDE9XEVNLCBpbmQ9XkosCisJaXMyPVxFYFw6XEVgOVwwMTdcRXIsIGticz1eSCwga2N1YjE9XlUsIGtjdWQxPV5KLCBrY3VmMT1eRiwKKwlrY3V1MT1eWiwga2hvbWU9XkEsIGxsPV5BXlosIG5lbD1eTV5KLCBybWlyPVxFciwgcm1zbz1eTywKKwlybXVsPV5PLCByczE9XEVgXDpcRWA5XDAxN1xFciwgc2dyMD1eTywgc21pcj1cRXEsIHNtc289Xk4sCisJc211bD1eTiwKKword3k3NWFwfHd5c2U3NWFwfHd5LTc1YXB8d3lzZS03NWFwfFd5c2UgV1ktNzUgQXBwbGljYXRpb25zIGFuZCBDdXJzb3Iga2V5cGFkLAorCWlzMj1cRVsxOzI0clxFWz8xMDszbFxFWz8xOzI1aFxFWzRsXEVbbVxFKEJcRT0sCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtob21lPVxFT0gsIHJta3g9XEVbPzFsXEU+JDwxMC8+LCBzbWt4PVxFWz8xaFxFPSQ8MTAvPiwKKwl1c2U9d3k3NSwKKworIyBGcm9tOiBFcmljIEZyZXVkZW50aGFsIDxmcmV1ZGVudEBlcmljLnVsdHJhLm55dS5lZHU+Cit3eTEwMHF8V3lzZSAxMDAgZm9yIFF1b3Ryb24sCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJY2J0PVxFSSwgY2xlYXI9XlosIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGhvbWU9Xl4sIGlsMT1cRUUsIGludmlzQCwKKwlpczI9XEVgXDpcMFxFQ1xFREZcRTBcRSdcRShcRUEyMSwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywgcmk9XEVqLCBybWlyPVxFciwgc21pcj1cRXEsIHVzZT1hZG0rc2dyLAorCisjIyMjIEtlcm1pdCB0ZXJtaW5hbCBlbXVsYXRpb25zCisjCisjIE9ic29sZXRlIEtlcm1pdCB2ZXJzaW9ucyBtYXkgYmUgbGlzdGVkIGluIHRoZSBzZWN0aW9uIGRlc2NyaWJpbmcgb2Jzb2xldGUKKyMgbm9uLUFOU0kgdGVybWluYWwgZW11bGF0b3JzIGxhdGVyIGluIHRoZSBmaWxlLgorIworCisjIEtFUk1JVCBzdGFuZGFyZCBhbGwgdmVyc2lvbnMuCisjIFN0cmFpZ2h0IGFzY2lpIGtleWJvYXJkLiA6c3I9XEVJOiBub3QgYXZhaWwuIG1hbnkgdmVyc2lvbnMgKyBidWcgcHJvbmUgaW4gdmkuCisjIChrZXJtaXQ6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eSGheSmpeS2teTGxeXkg6IiAtLSBlc3IpCisjIEZyb206IGdyZWcgc21hbGwgPGd0c0Bwb3B1bGkuYmVya2VsZXkuZWR1PiA5LTI1LTg0CitrZXJtaXR8c3RhbmRhcmQga2VybWl0LAorCU9UYnMsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVFLCBjdWIxPV5ILCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZWQ9XEVKLAorCWVsPVxFSywgaG9tZT1cRUgsIGlzMj1LMCBTdGFuZGFyZCBLZXJtaXQgIDktMjUtODRcbiwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2hvbWU9Xl4sCitrZXJtaXQtYW18c3RhbmRhcmQga2VybWl0IHBsdXMgYXV0by1tYXJnaW4sCisJYW0sCisJaXMyPUsxIFN0YW5kYXJkIEtlcm1pdCBwbHVzIEF1dG9tYXRpYyBNYXJnaW5zXG4sCisJdXNlPWtlcm1pdCwKKyMgSUJNUEMgS2VybWl0IDEuMi4KKyMgQnVnczogPGVkPiwgPGVsPjogZG8gbm90IHdvcmsgZXhjZXB0IGF0IGJlZ2lubmluZyBvZiBsaW5lISAgPGNsZWFyPiBkb2VzCisjIG5vdCB3b3JrLCBidXQgZmFrZSB3aXRoIDpjbD1cRUhcRUogKHNpbmNlIDpjZD1cRUo6IHdvcmtzIGF0IGJlZ2lubmluZyBvZgorIyBsaW5lKS4KKyMgRnJvbTogZ3JlZyBzbWFsbCA8Z3RzQHBvcHVsaS5iZXJrZWxleS5lZHU+IDgtMzAtODQKK3Bja2VybWl0fHBja2VybWl0MTJ8VUNCIElCTVBDIEtlcm1pdCAxLjIsCisJYW0sCisJbGluZXMjMjUsCisJY2xlYXI9XEVIXEVKLCBlZEAsIGVsQCwKKwlpczI9SzIgVUNCIElCTVBDIEtlcm1pdCAxLjIgIDgtMzAtODRcbiwgdXNlPWtlcm1pdCwKKyMgSUJNUEMgS2VybWl0IDEuMjAKKyMgQ2Fubm90IHVzZSBsaW5lIDI1LCBub3cgYWN0cyBmdW5ueSBsaWtlIGFuc2kgc3BlY2lhbCBzY3JvbGxpbmcgcmVnaW9uLgorIyBJbml0aWFsaXphdGlvbiBtdXN0IGVzY2FwZSBmcm9tIHRoYXQgcmVnaW9uIGJ5IGN1cnNvciBwb3NpdGlvbiB0byBsaW5lIDI0LgorIyBDYW5ub3QgdXNlIGNoYXJhY3RlciBpbnNlcnQgYmVjYXVzZSAxLjIwIGdvZXMgY3JhenkgaWYgaW5zZXJ0IGF0IGNvbCA4MC4KKyMgRG9lcyBub3QgdXNlIDphbTogYmVjYXVzZSBhdXRvd3JhcCBpcyBsb3N0IHdoZW4ga2VybWl0IGRyb3BwZWQgYW5kIHJlc3RhcnRlZC4KKyMgRnJvbTogZ3JlZyBzbWFsbCA8Z3RzQHBvcHVsaS5iZXJrZWxleS5lZHU+IDEyLTE5LTg0CitwY2tlcm1pdDEyMHxVQ0IgSUJNUEMgS2VybWl0IDEuMjAsCisJaXQjOCwgbGluZXMjMjQsCisJY3VkMT1cRUIsIGN2dmlzPVxFT1xFcVxFRUszLCBkY2gxPVxFTiwgZGwxPVxFTSwgaHQ9XkksCisJaWwxPVxFTCwKKwlpczI9XEVPXEVxXEVKXEVZNyBLMyBVQ0IgSUJNUEMgS2VybWl0IDEuMjAgIDEyLTE5LTg0XG4sCisJcm1pckAsIHJtc289XEVxLCBzbWlyQCwgc21zbz1cRXAsIHVzZT1rZXJtaXQsCisjIE1TLURPUyBLZXJtaXQgMi4yNyBmb3IgdGhlIElCTVBDCisjIFN0cmFpZ2h0IGFzY2lpIGtleWJvYXJkLiA6c3I9XEVJOiBub3QgYXZhaWwuIG1hbnkgdmVyc2lvbnMgKyBidWcgcHJvbmUgaW4gdmkuCisjIENhbm5vdCB1c2UgbGluZSAyNSwgbm93IGFjdHMgZnVubnkgbGlrZSBhbnNpIHNwZWNpYWwgc2Nyb2xsaW5nIHJlZ2lvbi4KKyMgSW5pdGlhbGl6YXRpb24gbXVzdCBlc2NhcGUgZnJvbSB0aGF0IHJlZ2lvbiBieSBjdXJzb3IgcG9zaXRpb24gdG8gbGluZSAyNC4KKyMgRG9lcyBub3QgdXNlIGFtOiBiZWNhdXNlIGF1dG93cmFwIGlzIGxvc3Qgd2hlbiBrZXJtaXQgZHJvcHBlZCBhbmQgcmVzdGFydGVkLgorIyBSZXZlcnNlIHZpZGVvIGZvciBzdGFuZG91dCBsaWtlIEgxOS4KKyMgKG1zazIyNzogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5IaF5Kal5La15MbF5eSDoiIC0tIGVzcikKKyMgRnJvbTogZ3JlZyBzbWFsbCA8Z3RzQHBvcHVsaS5iZXJrZWxleS5lZHU+IDMtMTctODUKK21zazIyN3xtc2tlcm1pdDIyN3xNUy1ET1MgS2VybWl0IDIuMjcgZm9yIHRoZSBJQk1QQywKKwlPVGJzLCBhbUAsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XEVFLCBjdWIxPV5ILCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJY3Z2aXM9XEVPXEVxXEVHXEV3SzQsIGRjaDE9XEVOLCBkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywKKwlob21lPVxFSCwgaHQ9XkksIGlsMT1cRUwsCisJaXMyPVxFT1xFcVxFR1xFd1xFSlxFWTcgSzQgTVMgS2VybWl0IDIuMjcgZm9yIHRoZSBJQk1QQyAzLTE3LTg1XG4sCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtob21lPV5eLCByYz1cRWssCisJcm1pcj1cRU8sIHJtc289XEVxLCBzYz1cRWosIHNtaXI9XEVALCBzbXNvPVxFcCwKKyMgTVMtRE9TIEtlcm1pdCAyLjI3IHdpdGggYXV0b21hdGljIG1hcmdpbnMKKyMgRnJvbToJZ3JlZyBzbWFsbCA8Z3RzQHBvcHVsaS5iZXJrZWxleS5lZHU+IDMtMTctODUKK21zazIyN2FtfG1za2VybWl0MjI3YW18VUNCIE1TLURPUyBLZXJtaXQgMi4yNyB3aXRoIGF1dG9tYXRpYyBtYXJnaW5zLAorCWFtLAorCWN2dmlzPVxFT1xFcVxFR1xFdks1LAorCWlzMj1cRU9cRXFcRUdcRXZcRUpcRVk3IEs1IE1TIEtlcm1pdCAyLjI3ICthdXRvbWF0aWMgbWFyZ2lucyAzLTE3LTg1XG4sCisJdXNlPW1zazIyNywKKyMgTVMtRE9TIEtlcm1pdCAyLjI3IFVDQiAyMjcuMTQgZm9yIHRoZSBJQk0gUEMKKyMgQXV0b21hdGljIG1hcmdpbnMgbm93IGRlZmF1bHQuICBVc2UgYW5zaSA8c2dyPiBmb3IgaGlnaGxpZ2h0cy4KKyMgRGVmaW5lIGZ1bmN0aW9uIGtleXMuCisjIChtc2syMjcxNDogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuIzEwOiIgLS0gZXNyKQorIyBGcm9tOiBncmVnIHNtYWxsIDxndHNAcG9wdWxpLmJlcmtlbGV5LmVkdT4gMy0xNy04NQorbXNrMjI3MTR8bXNrZXJtaXQyMjcxNHxVQ0IgTVMtRE9TIEtlcm1pdCAyLjI3IFVDQiAyMjcuMTQgSUJNIFBDLAorCWFtLAorCWJvbGQ9XEVbMW0sIGN2dmlzPVxFT1xFcVxFR1xFdks2LAorCWlzMj1cRU9cRXFcRUdcRXZcRUpcRVk3IEs2IE1TIEtlcm1pdCAyLjI3IFVDQiAyMjcuMTQgSUJNIFBDIDMtMTctODVcbiwKKwlrZjA9XEUwLCBrZjE9XEUxLCBrZjI9XEUyLCBrZjM9XEUzLCBrZjQ9XEU0LCBrZjU9XEU1LCBrZjY9XEU2LAorCWtmNz1cRTcsIGtmOD1cRTgsIGtmOT1cRTksIHJldj1cRVs3bSwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbXNvPVxFWzFtLCBzbXVsPVxFWzRtLCB1c2U9bXNrZXJtaXQyMjcsCisjIFRoaXMgd2FzIGRlc2lnbmVkIGZvciBhIFZUMzIwIGVtdWxhdG9yLCBidXQgaXQgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0CisjIGF0IHN1cHBvcnQgZm9yIHRoZSBWVDMyMCBpdHNlbGYuCisjIFBsZWFzZSBzZW5kIGNoYW5nZXMgd2l0aCBleHBsYW5hdGlvbnMgdG8gYnVnLWdudS1lbWFjc0BwcmVwLmFpLm1pdC5lZHUuCisjICh2dDMyMC1rMzogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCit2dDMyMC1rM3xNUy1LZXJtaXQgMy4wMCdzIHZ0MzIwIGVtdWxhdGlvbiwKKwlhbSwgZXNsb2ssIGhzLCBrbSwgbWlyLCBtc2dyLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzQ5LCBwYiM5NjAwLCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY21kY2g9XEUsIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWRzbD1cRVswJH4sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssCisJZmxhc2g9XEVbPzVoXEVbPzVsXEVbPzVoXEVbPzVsXEVbPzVoXEVbPzVsLAorCWZzbD1cRVswJH0sIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaXMyPVxFPlxFIEZcRVs/MWxcRVs/N2hcRVtyXEVbMiR+LCBrYnM9XkgsIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2RsMT1cRVszfiwga2YwPVxFWzIxfiwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y2PVxFWzE3fiwKKwlrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwgbWMwPVxFWzBpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgbmVsPV5NXkosIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcmluPVxFWyVwMSVkTCwgcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsCisJcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEUoQlxFKUJcRT5cRSBGXEVbNDsyMGxcRVsxMmhcRVs/MTs1OzY7Mzg7NDJsXEVbPzc7MjVoXEVbNGlcRVs/NGlcRVttXEVbclxFWzIkfiwKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbMSR9XHJcRVtLLCB2cGE9XEVbJWklcDElZGQsCisjIEZyb206IEpvc2VwaCBHaWwgPHlvZ2lAY3MudWJjLmNhPiAxMyBEZWMgMTk5MQorIyBBQ1MgY2FwYWJpbGl0aWVzIGZyb20gUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4gMzAgTWF5IDE5OTYKKyMgKEkgcmVtb3ZlZCBhIGJvZ3VzIGJvb2xlYW4gOm1vOiBhbmQgYWRkZWQgPG1zZ3I+LCA8c21hbT4sIDxybWFtPiAtLSBlc3IpCit2dDMyMC1rMzExfGRlYyB2dDMyMCBzZXJpZXMgYXMgZGVmaW5lZCBieSBrZXJtaXQgMy4xMSwKKwlhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbO0hcRVsySiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZHNsPVxFWzIkflxyXEVbMSR9XEVbS1xFWyR9LCBlZD1cRVtKLCBlbD1cRVtLLAorCWZsYXNoPVxFWz81aFxFWz81bCwgZnNsPVxFWyR9LCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wkPDMvPiwgaW5kPVxFRCwKKwlpczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoXEVbMTsyNHJcRVsyNDsxSCwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNj1cRVsxN34sCisJa2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwgbGYxPXBmMSwgbGYyPXBmMiwKKwlsZjM9cGYzLCBsZjQ9cGY0LCBuZWw9Xk1cRUQsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCByaT1cRU0sIHJtYWNzPV5PLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sIHJzMT1cRVs/M2wsIHNjPVxFNywgc2dyMD1cRVttLCBzbWFjcz1eTiwKKwlzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLCB0c2w9XEVbMiR+XEVbMSR9XEVbMTslZEgsCisKKyMjIyMjIyMjIE5PTi1BTlNJIFRFUk1JTkFMIEVNVUxBVElPTlMKKyMKKworIyMjIyBBdmF0YXIKKyMKKyMgVGhlc2UgZW50cmllcyBhdHRlbXB0IHRvIGRlc2NyaWJlIEF2YXRhciwgYSB0ZXJtaW5hbCBlbXVsYXRpb24gdXNlZCB3aXRoCisjIE1TLURPUyBidWxsZXRpbi1ib2FyZCBzeXN0ZW1zLiAgSXQgd2FzIGRlc2lnbmVkIHRvIGdpdmUgQU5TSS1saWtlCisjIGNhcGFiaWxpdGllcywgYnV0IHdpdGggY2hlYXBlciAoc2hvcnRlcikgY29udHJvbCBzZXF1ZW5jZXMuICBNZXNzeSBkZXNpZ24sCisjIGV4Y2Vzc2l2ZWx5IGRlcGVuZGVudCBvbiBQQyBpZGlvc3luY3JhY2llcywgYnV0IGFwcGFyZW50bHkgcmF0aGVyIHBvcHVsYXIKKyMgaW4gdGhlIEJCUyB3b3JsZC4KKyMKKyMgTm8gY29sb3Igc3VwcG9ydC4gIEF2YXRhciBkb2Vzbid0IGZpdCBlaXRoZXIgb2YgdGhlIFRla3Ryb25peCBvciBIUCBjb2xvcgorIyBtb2RlbHMgdGhhdCB0ZXJtaW5mbyBrbm93cyBhYm91dC4gIEFuIEF2YXRhciBjb2xvciBhdHRyaWJ1dGUgaXMgdGhlCisjIGxvdyA3IGJpdHMgb2YgdGhlIElCTS1QQyBkaXNwbGF5LW1lbW9yeSBhdHRyaWJ1dGUuICBCbGV0Y2guCisjCisjIEkgd3JvdGUgdGhlc2UgZW50cmllcyB3aGlsZSBsb29raW5nIGF0IHRoZSBBdmF0YXIgc3BlYy4gIEkgZG9uJ3QgaGF2ZQorIyB0aGUgZmFjaWxpdGllcyB0byB0ZXN0IHRoZW0uICBMZXQgbWUga25vdyBpZiB0aGV5IHdvcmssIG9yIGRvbid0LgorIworIyBBdmF0YXIgZXNjYXBlcyBub3QgdXNlZCBieSB0aGVzZSBlbnRyaWVzIChiZWNhdXNlIG1heWJlIHlvdSdyZSBzbWFydGVyCisjIGFuZCBtb3JlIG1vdGl2YXRlZCB0aGFuIEkgYW0gYW5kIGNhbiBmaWd1cmUgb3V0IGhvdyB0byB3cmFwIHRlcm1pbmZvCisjIGFyb3VuZCBzb21lIG9mIHRoZW0sIGFuZCBiZWNhdXNlIHRoZXkgYXJlIHdlaXJkIGVub3VnaCB0byBiZSBmdW5ueSk6CisjCQkJCWxldmVsIDA6CisjIF5MCQktLSBjbGVhciB3aW5kb3cvcmVzZXQgY3VycmVudCBhdHRyaWJ1dGUgdG8gZGVmYXVsdAorIyBeVl5BJXAxJWMJLS0gc2V0IGN1cnJlbnQgY29sb3IgYXR0cmlidXRlLCBwYXJhbWV0ZXIgZGVjb2RlcyBhcyBmb2xsb3dzOgorIworIyAgICAgIGJpdDogICAgICAgICA2ICAgNSAgIDQgICAzICAgMiAgIDEgICAwCisjICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgIHwgICB8ICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rICAgfCAgICstLS0rLS0tKworIyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgZm9yZWdyb3VuZCBjb2xvcgorIyAgICAgICAgICAgICAgICAgICAgICAgfCAgZm9yZWdyb3VuZCBpbnRlbnNpdHkKKyMgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kIGNvbG9yCisjCQkJCWxldmVsIDArOgorIyBeVl5KJXAxJWMlcDIlYyVwMyVjJXA0JWMlcDUlYwktLSBzY3JvbGwgKHAyLHAzKSB0byAocDQscDUpIHVwIGJ5IHAxIGxpbmVzCisjIF5WXkslcDElYyVwMiVjJXAzJWMlcDQlYyVwNSVjCS0tIHNjcm9sbCAocDIscDMpIHRvIChwNCxwNSkgZG93biBieSBwMSBsaW5lcworIyBeVl5MJXAxJWMlcDIlYyVwMyVjCQktLSBjbGVhciBwMiBsaW5lcyBhbmQgcDMgY29scyB3L2F0dHIgJXAxCisjIF5WXk0lcDElYyVwMiVjJXAzJWMlcDQlYwktLSBmaWxsIHAzIGxpbmVzICYgcDQgY29scyB3L2NoYXIgcDIrYXR0ciAlcDEKKyMgKF5WXkwgYW5kIF5WXk0gc2V0IHRoZSBjdXJyZW50IGF0dHJpYnV0ZSBhcyBhIHNpZGUtZWZmZWN0LikKKyMgXlYgXlkgPGE+IFsuLi5dIDxjPgktLSByZXBlYXQgcGF0dGVybi4gPGE+IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisjCQkJICAgaW4gdGhlIHBhdHRlcm4sIDxjPiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBwYXR0ZXJuCisjCQkgIAkgICBzaG91bGQgYmUgcmVwZWF0ZWQuIElmIGVpdGhlciB2YWx1ZSBpcyAwLCBuby1vcC4KKyMJCQkgICBUaGUgcGF0dGVybiBjYW4gY29udGFpbiBBdmF0YXIgY29uc29sZSBjb2RlcywKKyMJCQkgICBpbmNsdWRpbmcgb3RoZXIgXlYgXlkgcGF0dGVybnMuCisjCQkJCWxldmVsIDE6CisjIF5WXk8JCS0tIGNsb2Nrd2lzZSBtb2RlIG9uOyB0dXJuIHByaW50IGRpcmVjdGlvbiByaWdodCBlYWNoIHRpbWUgeW91CisjCQkgICBoaXQgYSB3aW5kb3cgZWRnZSAoeWVzLCByZWFsbHkpLiAgVHVybmVkIG9mZiBieSBDUgorIyBeVl5QCQktLSBuby1vcAorIyBeVl5RJWMJLS0gcXVlcnkgdGhlIGRyaXZlcgorIyBeVl5SCQktLSBkcml2ZXIgcmVzZXQKKyMgXlZeUwkJLS0gU291bmQgdG9uZSAoUEMtc3BlY2lmaWMpCisjIF5WXlQJCQktLSBjaGFuZ2UgaGlnaGxpZ2h0IGF0IGN1cnJlbnQgY3Vyc29yIHBvaXRpb24gdG8gJWMKKyMgXlZeVSVwMSVjJXAyJWMJLS0gaGlnaGxpZ2h0IHdpbmRvdyA8YT4gd2l0aCBhdHRyaWJ1dGUgPGI+CisjIF5WXlYlcDElYyVwMiVjJXAzJWMlcDQlYyVwNSVjCisjCQkJLS0gZGVmaW5lIHdpbmRvdworIworIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gMSBOb3YgMTk5NQorIyAoVGhlIDxibGluaz4vPGJvbGQ+LzxyZXY+LzxzbWFjcz4vPHNtdWw+LzxzbXNvPiBjYXBhYmlsaXRpZXMgZXhpc3Qgb25seSB0bworIyB0ZWxsIG5jdXJzZXMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBoaWdobGlnaHRzIGV4aXN0OyBpdCBzaG91bGQgdXNlIDxzZ3I+LAorIyB3aGljaCBpcyB0aGUgb25seSBtZXRob2QgdGhhdCB3aWxsIGFjdHVhbGx5IHdvcmsgZm9yIG11bHRpcGxlIGhpZ2hsaWdodHMuKQorIworIyBVcGRhdGUgYnkgVEQgLSAyMDA0OiBoYWxmIG9mIHRoaXMgd2FzIGluY29uc2lzdGVudC4gIEZvdW5kIGRvY3VtZW50YXRpb24KKyMgYW5kIHJlcGFpcmVkIG1vc3Qgb2YgdGhlIGRhbWFnZS4gIHNncjAgaXMgcHJvYmFibHkgaW5jb3JyZWN0LCBidXQgdGhlCisjIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGdpdmVzIG5vIGNsdWVzIGZvciBhIHdvcmthYmxlIHN0cmluZy4KK2F2YXRhcjB8YXZhdGFyIHRlcm1pbmFsIGVtdWxhdG9yIGxldmVsIDAsCisJYW0sIGJjZSwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwlibGluaz1eVl5CLCBib2xkPV5WXkFeUCwgY3I9Xk0sIGN1YjE9XlZeRSwgY3VkMT1eVl5ELAorCWN1ZjE9XlZeRiwgY3VwPVwwMjZcMDEwJXAxJWMlcDIlYywgY3V1MT1eVl5DLCBlbD1eVl5HLAorCWluZD1eSiwgaW52aXM9XlZeQVwwLCByZXA9XDAzMSVwMSVjJXAyJWMsIHJldj1eVl5BcCwKKwlybWFjc0AsIHJzMj1eTCwKKwlzZ3I9JT8lcDElcDIlfCVwMyV8JXA2JXwlcDclfCV0XDAyNlwwMDElPyVwNyV0JXsxMjh9JWUlezB9JT8lcDEldCV7MTEyfSV8JTslPyVwMiV0JXsxfSV8JTslPyVwMyV0JXsxMTJ9JXwlOyU/JXA2JXQlezE2fSV8JTslOyVjJTslPyVwNCV0XDAyNlwwMDIlOywKKwlzZ3IwPV5WXkFeRywgc21hY3NALCBzbXNvPV5WXkFwLCBzbXVsPV5WXkFeQSwKKwl1c2U9a2xvbmUrYWNzLAorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gMSBOb3YgMTk5NQorYXZhdGFyMCt8YXZhdGFyIHRlcm1pbmFsIGVtdWxhdG9yIGxldmVsIDArLAorCWRjaDE9XlZeTiwgcm1pcj1cMDI2XG5cMFwwXDBcMCwgc21pcj1eVl5JLCB1c2U9YXZhdGFyMCwKKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IDEgTm92IDE5OTUKK2F2YXRhcnxhdmF0YXIxfGF2YXRhciB0ZXJtaW5hbCBlbXVsYXRvciBsZXZlbCAxLAorCWNpdmlzPV5WJ15CLCBjbm9ybT1eVideQSwgY3Z2aXM9XlZeQywgZGwxPV5WLSwgaWwxPV5WKywKKwlybWFtPV5WIiwgcm1pcj1eVl5QLCBzbWFtPV5WJCwgdXNlPWF2YXRhcjArLAorCisjIyMjIFJCY29tbQorIworIyBSQkNvbW0gaXMgYSBsZWFuIGFuZCBtZWFuIHRlcm1pbmFsIGVtdWxhdG9yIHdyaXR0ZW4gYnkgdGhlIEludGVycnVwdCBMaXN0CisjIG1haW50YWluZXIsIFJhbGYgQnJvd24uIEl0IHdhcyBmYWlybHkgcG9wdWxhciBpbiB0aGUgbGF0ZSBET1MgeWVhcnMgKGVhcmx5CisjICc5MHMpLCBlc3BlY2lhbGx5IGluIHRoZSBCQlMgd29ybGQsIGFuZCBzdGlsbCBoYXMgc29tZSBsb3lhbCB1c2VycyBkdWUgdG8KKyMgaXRzIHZlcnkgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgdG8gYSBjdXRlIG1hY3JvIGxhbmd1YWdlLgorcmJjb21tfElCTSBQQyB3aXRoIFJCY29tbSBhbmQgRU1BQ1Mga2V5YmluZGluZ3MsCisJYW0sIGJ3LCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XkwsIGNub3JtPVxFWz8yNWgsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1eQywgY3VmMT1eQiwKKwljdXA9XDAzNyVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXiwgZGNoMT1eVywKKwlkbD1cRVslcDElZE0sIGRsMT1eWiwgZWNoPVxFWyVwMSVkWCwgZWQ9XkY1LCBlbD1eUF5QLCBodD1eSSwKKwlpbD1cRVslcDElZEwsIGlsMT1eSywgaW5kPVxFRCwgaW52aXM9XEVbOG0sCisJaXMyPVwwMTdcMDM1XEUoQlxFKTBcRVs/N2hcRVs/M2xcRVs+OGcsIGticz1eSCwKKwlrY3ViMT1eQiwga2N1ZDE9Xk4sIGtjdWYxPV5GLCBrY3V1MT1eUCwga2hvbWU9XkEsIG5lbD1eTVxFRCwKKwlyYz1cRTgsIHJlcD1cMDMwJXAxJWMlcDIlYywgcmV2PV5SLCByaT1cRU0sIHJtY3VwPSwgcm1kYz0sCisJcm1pcj1eXSwgcm1reD1cRT4sIHJtc289XlUsIHJtdWw9XlUsCisJcnMxPVwwMTdcRShCXEUpMFwwMjVcRVs/M2xcRVs+OGcsIHNjPVxFNywgc2dyMD1cRVttLAorCXNtY3VwPSwgc21kYz0sIHNtaXI9XlwsIHNta3g9XEU9LCBzbXNvPV5SLCBzbXVsPV5ULAorcmJjb21tLW5hbXxJQk0gUEMgd2l0aCBSQmNvbW0gd2l0aG91dCBhdXRvd3JhcCwKKwlhbUAsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwKKwlpczI9XDAxN1wwMzVcRShCXEUpMFxFWz83bFxFWz8zbFxFWz44Zywga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosIHVzZT1yYmNvbW0sCityYmNvbW0td3xJQk0gUEMgd2l0aCBSQmNvbW0gaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosCisJaXMyPVwwMTdcMDM1XEUoQlxFKTBcRVs/N2hcRVs/M2hcRVs+OGcsIGticz1eSCwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCB1c2U9cmJjb21tLAorCisjIyMjIyMjIyBMQ0QgRElTUExBWVMKKyMKKworIyMjIyBNYXRyaXggT3JiaXRhbAorIyBmcm9tOiBFcmljIFouIEF5ZXJzICAoZXJpY0BhbGUub3JnKQorIworIyBNYXRyaXggT3JiaXRhbCAyMHg0IExDRCBkaXNwbGF5CisjIENvbW1hbmQgQ2hhcmFjdGVyIGlzIDB4RkUgKGRlY2ltYWwgMjU0LCBvY3RhbCAzNzYpCisjCisjIE9uIHRoaXMgZGV2aWNlLCBjdXJzb3IgYWRkcmVzc2FiaWxpdHkgaXNuJ3QgcG9zc2libGUuICBUaGUgTENEIGV4cGVjdHM6CisjICAgICAgMHhmZSBHIDxjb2w+IDxyb3c+CisjICAgICAgZm9yIGN1cDogJXAxID09IHJvdyBhbmQgJXAyIGlzIGNvbHVtbgorIworIyBUaGlzIGxpbmU6CisjCWN1cD1cMzc2RyVwMiVjJXAxJWMKKyMgTE9PS1MgbGlrZSBpdCB3aWxsIHdvcmssIGJ1dCBzb21ldGltZXMgb25seSBvbmUgb2YgdGhlIHR3byBudW1iZXJzIGlzIHNlbnQuCisjIFNlZSB0aGUgdGVybWluZm8gKDUpIG1hbnBhZ2UgY29tbWVudGVkIHJlZ2FyZGluZyAnVGVybWluYWxzIHdoaWNoIHVzZSAiJWMiJy4KKyMKKyMgQWxhcywgdGhlcmUgaXMgbm8gY3Vyc29yIHVwbGluZSBjYXBhYmlsaXR5IG9uIHRoaXMgZGlzcGxheS4KKyMKKyMgVGhlc2UgZW50cmllcyBhZGQgc29tZSAnc2FuaXR5IHN0dWZmJyB0byB0aGUgY2xlYXIgZnVuY3Rpb24uICBUaGF0IGlzLCBpdAorIyBkb2VzIGEgJ2NsZWFyJyBhbmQgYWxzbyB0dXJucyBPRkYgYXV0byBzY3JvbGwsIHR1cm5zIE9OIEF1dG8gTGluZSBXcmFwcGluZywKKyMgYW5kIHR1cm5zIG9mZiB0aGUgY3Vyc29yIGJsaW5raW5nIGFuZCBzdHVmZiBsaWtlIHRoYXQuCisjCisjIE5PVEU6IGNhbGxpbmcgJ2JlZXAnIHR1cm5zIG9uIHRoZSBiYWNrbGlnaHQgKGJlbGwpCisjIE5PVEU6IGNhbGxpbmcgJ2ZsYXNoJyB0dXJucyBpdCBvbiBhbmQgYmFjayBvZmYgKHZpc3VhbCBiZWxsKQorIworTXR4T3JifEdlbmVyaWMgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXksCisJYmVsPVwzNzZCXkEsIGNsZWFyPVwzNzZYXDM3NkNcMzc2UlwzNzZLXDM3NlQsCisJY25vcm09XDM3NktcMzc2VCwgY3ViMT1cMzc2TCwgY3VmMT1cMzc2TSwKKwlmbGFzaD1cMzc2QlwwMDEkPDIwMD5cMzc2RiwgaG9tZT1cMzc2SCwKK010eE9yYjIwNHwyMHg0IE1hdHJpeCBPcmJpdGFsIExDRCBkaXNwbGF5LAorCWNvbHMjMjAsIGxpbmVzIzQsIHVzZT1NdHhPcmIsCitNdHhPcmIxNjJ8MTZ4MiBNYXRyaXggT3JiaXRhbCBMQ0QgZGlzcGxheSwKKwljb2xzIzE2LCBsaW5lcyMyLCB1c2U9TXR4T3JiLAorIyBUaGUgZW5kCisKKyMjIyMjIyMjIE9MREVSIFRFUk1JTkFMIFRZUEVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBkZXZvdGVkIHRvIG9sZGVyIGNvbW1lcmNpYWwgdGVybWluYWwgYnJhbmRzIHRoYXQgYXJlIG5vdworIyBkaXNjb250aW51ZWQsIGJ1dCBrbm93biB0byBiZSBzdGlsbCBpbiB1c2Ugb3IgcmVwcmVzZW50ZWQgYnkgZW11bGF0aW9ucy4KKyMKKworIyMjIyBBVCZUIChhdHQsIHR0eSkKKyMKKyMgVGhpcyBzZWN0aW9uIGFsc28gaW5jbHVkZXMgVGVsZXR5cGUtYnJhbmRlZCBWRFRzLgorIworIyBUaGUgQVQmVC9UZWxldHlwZSB0ZXJtaW5hbHMgZ3JvdXAgd2FzIHNvbGQgdG8gU3VuUml2ZXIgRGF0YSBTeXN0ZW1zIChub3cKKyMgQm91bmRsZXNzIFRlY2hub2xvZ2llcyk7IGZvciBkZXRhaWxzLCBzZWUgdGhlIGhlYWRlciBjb21tZW50IG9uIHRoZSBBRERTCisjIHNlY3Rpb24uCisjCisjIFRoZXNlIGFyZSBBVCZUJ3Mgb2ZmaWNpYWwgdGVybWluZm8gZW50cmllcy4gIEFsbC1jYXBzIGFsaWFzZXMgaGF2ZSBiZWVuCisjIHJlbW92ZWQuCisjCithdHQyMzAwfHN2ODB8QVQmVCAyMzAwIFZpZGVvIEluZm9ybWF0aW9uIFRlcm1pbmFsIDgwIGNvbHVtbiBtb2RlLAorCWFtLCBlbywgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUssIGhvbWU9XEVbSCwgaHQ9XkksIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2Nscj1cRVtKLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsCisJa2RsMT1cRVtNLCBrZjE9XEVbMXIsIGtmMTA9XEVbMTByLCBrZjExPVxFWzExciwKKwlrZjEyPVxFWzEyciwga2YxMz1cRVsxM3IsIGtmMTQ9XEVbMTRyLCBrZjE1PVxFWzE1ciwKKwlrZjE2PVxFWzE2ciwga2YyPVxFWzJyLCBrZjM9XEVbM3IsIGtmND1cRVs0ciwga2Y1PVxFWzVyLAorCWtmNj1cRVs2ciwga2Y3PVxFWzdyLCBrZjg9XEVbOHIsIGtmOT1cRVs5ciwga2hvbWU9XEVbSCwKKwlraWNoMT1cRVtALCBraWwxPVxFW0wsIG1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJcmV2PVxFWzdtLCBybWlyPVxFWzRsLCBybXNvPVxFW20sIHNncjA9XEVbbSwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLAorYXR0MjM1MHxBVCZUIDIzNTAgVmlkZW8gSW5mb3JtYXRpb24gVGVybWluYWwgODAgY29sdW1uIG1vZGUsCisJbWMwQCwgbWM0QCwgbWM1QCwgdXNlPWF0dDIzMDAsCisKKyMgTXVzdCBzZXR1cCBSRVRVUk4gS0VZIC0gQ1IsIFJFQydWRCBMRiAtIElOREVYLgorIyBTZWVtcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIHZ0MTAwLCBwbHVzIGlucy9kZWwgbGluZS9jaGFyLgorIyBPbiBzZ3IsIHRoZSBwcm90ZWN0aW9uIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorIyBObyBjaGVjayBpcyBtYWRlIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgMyBwYXJhbWV0ZXJzIGFyZSBvdXRwdXQuCisjIAlzdGFuZG91dD0gcmV2ZXJzZSArIGhhbGYtaW50ZW5zaXR5ID0gMyB8IDUuCisjIAlib2xkPSByZXZlcnNlICsgdW5kZXJsaW5lID0gMiB8IDMuCisjIG5vdGUgdGhhdCBoYWxmLWJyaWdodCBibGlua2luZyBkb2Vzbid0IGxvb2sgZGlmZmVyZW50IGZyb20gbm9ybWFsIGJsaW5raW5nLgorIyBOT1RFOnlvdSBtdXN0IHByb2dyYW0gdGhlIGZ1bmN0aW9uIGtleXMgZmlyc3QsIGxhYmVsIHNlY29uZCEKKyMgKGF0dDQ0MTA6IGEgQlNEIGVudHJ5IGhhcyBiZWVuIHNlZW4gd2l0aCB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdGllczoKKyMgPGlzMj1cRVs/Nmw+LCA8a2YxPVxFT2M+LCA8a2YyPVxFT2Q+LCA8a2YzPVxFT2U+LCA8a2Y0PVxFT2c+LAorIyA8a2Y2PVxFT2g+LCA8a2Y3PVxFT2k+LCA8a2Y4PVxFT2o+LCAtLSBlc3IpCithdHQ1NDEwdjF8YXR0NDQxMHYxfHR0eTU0MTB2MXxBVCZUIDQ0MTAvNTQxMCA4MCBjb2x1bW5zIC0gdmVyc2lvbiAxLAorCWFtLCBocywgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGgjMiwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwgd3NsIzgwLAorCWFjc2M9KytcLFwsLS0uLjAwYGBhYWZmZ2doaGpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzI7N20sIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZnNsPVxFOCwgaG9tZT1cRVtILCBodD1eSSwKKwlpY2gxPVxFW0AsIGlsMT1cRVtMLCBpbmQ9XkosIGludmlzPVxFWzhtLCBpczE9XEVbPzNsXEUpMCwKKwlpczM9XEVbMTswM3EgICBmMSAgICAgICAgICAgXEVPUFxFWzI7MDNxICAgZjIgICAgICAgICAgIFxFT1FcRVszOzAzcSAgIGYzICAgICAgICAgICBcRU9SXEVbNDswM3EgICBmNCAgICAgICAgICAgXEVPU1xFWzU7MDNxICAgZjUgICAgICAgICAgIFxFT1RcRVs2OzAzcSAgIGY2ICAgICAgICAgICBcRU9VXEVbNzswM3EgICBmNyAgICAgICAgICAgXEVPVlxFWzg7MDNxICAgZjggICAgICAgICAgIFxFT1csCisJa2JzPV5ILCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPVCwKKwlrZjY9XEVPVSwga2Y3PVxFT1YsIGtmOD1cRU9XLCBraG9tZT1cRVtILCBrbGw9XEVbMjQ7MUgsCisJbGw9XEVbMjRILCBuZWw9Xk1eSiwKKwlwZng9XEVbJXAxJTFkOyVwMiVsJTIuMmRxICAgZiVwMSUxZCAgICAgICAgICAgJXAyJXMsCisJcGxuPVxFWyVwMSVkOzAwcSVwMiU6LTE2cywgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWFjcz1eTywgcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMj1cRWNcRVs/M2xcRVsyOzB5LAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA1JXwldDsyJTslPyVwMiVwNiV8JXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXA2JXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRzbD1cRTdcRVsyNTslcDElezF9JSslZEgsCisKK2F0dDQ0MTB2MS13fGF0dDU0MTB2MS13fHR0eTU0MTB2MS13fEFUJlQgNDQxMC81NDEwIDEzMiBjb2x1bW5zIC0gdmVyc2lvbiAxLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMT1cRVs/M2hcRSkwLCByczI9XEVjXEVbPzNoXEVbMjsweSwgdXNlPWF0dDU0MTB2MSwKKworYXR0NDQxMHxhdHQ1NDEwfHR0eTU0MTB8QVQmVCA0NDEwLzU0MTAgODAgY29sdW1ucyAtIHZlcnNpb24gMiwKKwlPVGJzLAorCXBmeD1cRVslcDElZDslcDIlbCUwMmRxICAgZiVwMSVkICAgICAgICAgICAlcDIlcywKKwl1c2U9YXR0NTQxMHYxLAorCithdHQ1NDEwLXd8YXR0NDQxMC13fDQ0MTAtd3x0dHk1NDEwLXd8NTQxMC13fEFUJlQgNDQxMC81NDEwIGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczE9XEVbPzNoXEUpMCwgcnMyPVxFY1xFWz8zaFxFWzI7MHksIHVzZT1hdHQ0NDEwLAorCisjIDU0MTAgaW4gdGVybXMgb2YgYSB2dDEwMAorIyAodjU0MTA6IGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gaW5pdCBzdHJpbmcgLS0gZXNyKQordjU0MTB8YXR0NTQxMCBpbiB0ZXJtcyBvZiBhIHZ0MTAwLAorCWFtLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbSiQ8NTA+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1MT1cRVtBJDwyPiwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBlbDE9XEVbMUskPDM+LAorCWVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2gxPVxFW0AsCisJaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLAorCWtjdXUxPVxFT0EsIHJjPVxFOCwgcmV2PVxFWzdtJDwyPiwgcmk9XEVNJDw1Piwgcm1hY3M9Xk8sCisJcm1hbT1cRVs/N2wsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20kPDI+LAorCXJtdWw9XEVbbSQ8Mj4sIHJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDI+LAorCXNncjA9XEVbbVwwMTckPDI+LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbMTs3bSQ8Mj4sIHNtdWw9XEVbNG0kPDI+LCB0YmM9XEVbM2csCisJdXNlPXZ0MTAwK2Zua2V5cywKKworIworIyBUZWxldHlwZSBNb2RlbCA1NDIwIC0tIEEgc291cGVkIHVwIDU0MTAsIHdpdGggbXVsdGlwbGUgd2luZG93cywKKyMgZXZlbiEgdGhlIDU0MjAgaGFzIHRocmVlIG1vZGVzOiBzY3JvbGwsIHdpbmRvdyBvciBwYWdlIG1vZGUKKyMgdGhpcyB0ZXJtaW5mbyBzaG91bGQgd29yayBpbiBzY3JvbGwgb3Igd2luZG93IG1vZGUsIGJ1dCBkb2Vzbid0CisjIHRha2UgYWR2YW50YWdlIG9mIGFueSBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLgorIworIyBIYXMgbWVtb3J5IGJlbG93ICgyIGxpbmVzISkKKyMgMyBwYWdlcyBvZiBtZW1vcnkgKHBsdXMgc29tZSBzcGFyZSkKKyMgVGhlIDU0MTAgc2VxdWVuY2VzIGZvciA8Y3VwPiwgPGN2dmlzPiwgPGRjaD4sIDxkbD4sIDxlY2g+LCA8Zmxhc2g+LCA8aG9tZT4sCisjIDxocGE+LCA8aHRzPiB3b3VsZCB3b3JrIGZvciB0aGVzZSwgYnV0IHRoZXNlIHdvcmsgaW4gYm90aCBzY3JvbGwgYW5kIHdpbmRvdworIyBtb2RlLi4uIFVuc2V0IGluc2VydCBjaGFyYWN0ZXIgc28gaW5zZXJ0IG1vZGUgd29ya3MKKyMgPGlzMT4gc2V0cyA4MCBjb2x1bW4gbW9kZSwKKyMgPGlzMj4gZXNjYXBlIHNlcXVlbmNlOgorIyAxKSB0dXJuIG9mZiBhbGwgZm9udHMKKyMgMikgZnVuY3Rpb24ga2V5cyBvZmYsIGtleWJvYXJkIGxvY2sgb2ZmLCBjb250cm9sIGRpc3BsYXkgb2ZmLAorIyAgICBpbnNlcnQgbW9kZSBvZmYsIGVyYXN1cmUgbW9kZSBvZmYsCisjIDMpIGZ1bGwgZHVwbGV4LCBtb25pdG9yIG1vZGUgb2ZmLCBzZW5kIGdyYXBoaWNzIG9mZiwgbmwgb24gbGYgb2ZmCisjIDQpIHJlc2V0IG9yaWdpbiBtb2RlCisjIDUpIHNldCBsaW5lIHdyYXBhcm91bmQKKyMgNikgZXhpdCBlcmFzdXJlIG1vZGUsIHBvc2l0aW9uYWwgYXR0cmlidXRlIG1vZGUsIGFuZCBlcmFzdXJlIGV4dGVudCBtb2RlCisjIDcpIGNsZWFyIG1hcmdpbnMKKyMgOCkgcHJvZ3JhbSBFTlRFUiB0byB0cmFuc21pdCBeSiwKKyMgV2UgdXNlIFwyMTIgdG8gcHJvZ3JhbSB0aGUgXkogYmVjYXVzZSBhIGJhcmUgXkogd2lsbCBnZXQgdHJhbnNsYXRlZCBieQorIyBVTklYIGludG8gYSBDUi9MRi4gVGhlIGVudGVyIGtleSBpcyBuZWVkZWQgZm9yIEFUJlQgdU9NUy4KKyMgICAgIDEgICAgICAyICAgICAgICAgICAgMyAgICAgICAgICAgICAgNCAgICAgNSAgICAgNiAgICA3ICA4CisjIDxpczM+IHNldCBzY3JlZW4gY29sb3IgdG8gYmxhY2ssCisjIE5vIHJlcHJlc2VudGF0aW9uIGluIHRlcm1pbmZvIGZvciB0aGUgZGVsZXRlIHdvcmQga2V5OiBrZHcxPVxFZAorIyBLZXkgY2FwYWJpbGl0aWVzIGFzc3VtZSB0aGUgcG93ZXItdXAgc2VuZCBzZXF1ZW5jZS4uLgorIyBUaGlzIDxybWN1cD4gaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGl0IGhlbHBzIG1heGltaXplCisjIG1lbW9yeSB1c2VmdWxuZXNzOiA8cm1jdXA9XEV6PiwKKyMgQWx0ZXJuYXRlIHNncjA6CTxzZ3IwPVxFW21cRVdeTz4sCisjIEFsdGVybmF0ZSBzZ3I6CTxzZ3I9XEVbJT8lcDEldDI7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNyV0OzglO20lPyVwOCV0XEVWJTslPyVwOSV0Xk4lZV5PJTs+LAorIyBzbWt4IHByb2dyYW1zIHRoZSBTWVMgUEYga2V5cyB0byBzZW5kIGEgc2V0IHNlcXVlbmNlLgorIyBJdCBhbHNvIHNldHMgdXAgbGFiZWxzIGYxLCBmMiwgLi4uLCBmOCwgYW5kIHNlbmRzIGVkaXQga2V5cy4KKyMgVGhpcyBzdHJpbmcgY2F1c2VzIHRoZW0gdG8gc2VuZCB0aGUgc3RyaW5ncyA8a2YxPi08a2Y4PgorIyB3aGVuIHByZXNzZWQgaW4gU1lTIFBGIG1vZGUuCisjIChhdHQ0NDE1OiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2F0dDQ0MTV8dHR5NTQyMHxhdHQ1NDIwfEFUJlQgNDQxNS81NDIwIDgwIGNvbHMsCisJT1RicywgZGIsIG1pciwgeG9uLAorCWxoIzIsIGxtIzc4LCBsdyM4LCBubGFiIzgsIHdzbCM1NSwKKwljYnQ9XEVbWiwgY2xlYXI9XEVbeFxFW0osIGNub3JtPVxFWzExOzBqLCBjdWI9XEVbJXAxJWRELAorCWN1ZD1cRVslcDElZEIsIGN1Zj1cRVslcDElZEMsIGN1cD1cRVslaSVwMSVkOyVwMiVkeCwKKwljdXU9XEVbJXAxJWRBLCBjdnZpcz1cRVsxMTsxaiwgZGNoPVxFWyVwMSVkUCwKKwlkbD1cRVslcDElZE0sIGVjaD1cRVslcDElZHNcRVslcDElZEQsCisJZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBob21lPVxFW3gsCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMUAsCisJaWw9XEVbJXAxJWRMLCBpbmRuPVxFWyVwMSVkRSwgaXMxPVxFWz8zbCQ8MTAwPiwKKwlpczI9XEVbbVwwMTdcRVsxOzI7Mzs0OzZsXEVbMTI7MTM7MTQ7MjBsXEVbPzY7OTc7OTlsXEVbPzdoXEVbNGlcRXhcRVsyMTsxalwyMTIsCisJaXMzPVxFWz81bCwga2JlZz1cRXQsIGtjYnQ9XEVbWiwga2RjaDE9XEVbUCwga2RsMT1cRVtNLAorCWtlbD1cRVsySywga2VuZD1cRXosIGtlbnQ9XEVlbnQsIGtmMT1cRU9jLCBrZjI9XEVPZCwKKwlrZjM9XEVPZSwga2Y0PVxFT2YsIGtmNT1cRU9nLCBrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLAorCWtpY2gxPVxFWzRoLCBraWwxPVxFW0wsIGtpbmQ9XEVbVCwga2xsPVxFdSwga25wPVxFW1UsCisJa3BwPVxFW1YsIGtyaT1cRVtTLCBsZjE9RjEsIGxmMj1GMiwgbGYzPUYzLCBsZjQ9RjQsIGxmNT1GNSwKKwlsZjY9RjYsIGxmNz1GNywgbGY4PUY4LCBsbD1cRXcsIG1jMD1cRVs/MmksIG1jND1cRVs/OWksCisJbWM1PVxFWz80aSwgbXJjdXA9XEVbJWklcDElZDslcDIlZHQsCisJcGZ4PVxFWyVwMSVkOyVwMiVsJTAyZHEgICBGJXAxJWQgICAgICAgICAgICVwMiVzLAorCXBsbj1cRVslcDElZDswOzA7MHElcDIlOi0xNi4xNnMsIHByb3Q9XEVWLAorCXJpbj1cRVslcDElZEYsIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJta3g9XEVbMTk7MGpcRVsyMTsxalwyMTIsIHJtbG49XEV8LAorCXNncj1cRVswJT8lcDElcDUlfCV0OzIlOyU/JXAyJXA2JXwldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwlcDYlfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVsxOTsxalxFWzIxOzRqXEVlbnQsIHNtbG49XEV+LCB0YmM9XEVbM2csCisJdHNsPVxFN1xFWzI1OyVwMSV7OH0lKyVkSCwgdnBhPVxFWyVwMSV7MX0lKyVkZCwKKwl1c2U9YXR0NDQxMCwKKworYXR0NDQxNS13fHR0eTU0MjAtd3xhdHQ1NDIwLXd8QVQmVCA0NDE1LzU0MjAgMTMyIGNvbHMsCisJY29scyMxMzIsIGxtIzU0LCB3c2wjOTcsCisJaXMxPVxFWz8zaCQ8MTAwPiwgdXNlPWF0dDQ0MTUsCisKK2F0dDQ0MTUtcnZ8dHR5NTQyMC1ydnxhdHQ1NDIwLXJ2fEFUJlQgNDQxNS81NDIwIDgwIGNvbHMvcnYsCisJZmxhc2g9XEVbPzVsJDwyMDA+XEVbPzVoLCBpczM9XEVbPzVoLCB1c2U9YXR0NDQxNSwKKworYXR0NDQxNS13LXJ2fHR0eTU0MjAtdy1ydnxhdHQ1NDIwLXctcnZ8QVQmVCA0NDE1LzU0MjAgMTMyIGNvbHMvcnYsCisJY29scyMxMzIsIGxtIzU0LCB3c2wjOTcsCisJZmxhc2g9XEVbPzVsJDwyMDA+XEVbPzVoLCBpczE9XEVbPzNoJDwxMDA+LCBpczM9XEVbPzVoLAorCXVzZT1hdHQ0NDE1LAorCisjIE5vdGUgdGhhdCB0aGlzIG1vZGUgcGVybWl0cyBwcm9ncmFtbWluZyBVU0VSIFBGIEtFWVMgYW5kIGxhYmVscworIyBIb3dldmVyLCB3aGVuIHlvdSBwcm9ncmFtIHVzZXIgcGYgbGFiZWxzIHlvdSBoYXZlIHRvIHJlc2VsZWN0CisjIHVzZXIgcGYga2V5cyB0byBtYWtlIHRoZW0gYXBwZWFyIQorYXR0NDQxNStubHx0dHk1NDIwK25sfGF0dDU0MjArbmx8Z2VuZXJpYyBBVCZUIDQ0MTUvNTQyMCBjaGFuZ2VzIGZvciBub3QgY2hhbmdpbmcgbGFiZWxzLAorCWtmMUAsIGtmMkAsIGtmM0AsIGtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsCisJcGZ4PVxFWyVwMSVkOyVwMiVsJTAyZDswOzFxICAgRiVwMSVkICAgICAgICAgICAlcDIlcywKKwlwbG49XEVbJXAxJWQ7MDswOzFxJXAyJTotMTYuMTZzLAorCithdHQ0NDE1LW5sfHR0eTU0MjAtbmx8YXR0NTQyMC1ubHxBVCZUIDQ0MTUvNTQyMCB3aXRob3V0IGNoYW5naW5nIGxhYmVscywKKwlrZjFALCBrZjJALCBrZjNALCBrZjRALCBrZjVALCBrZjZALCBrZjdALCBrZjhALCB1c2U9YXR0NDQxNStubCwKKwl1c2U9YXR0NDQxNSwKKworYXR0NDQxNS1ydi1ubHx0dHk1NDIwLXJ2LW5sfGF0dDU0MjAtcnYtbmx8QVQmVCA0NDE1LzU0MjAgcmV2ZXJzZSB2aWRlbyB3aXRob3V0IGNoYW5naW5nIGxhYmVscywKKwlrZjFALCBrZjJALCBrZjNALCBrZjRALCBrZjVALCBrZjZALCBrZjdALCBrZjhALCB1c2U9YXR0NDQxNStubCwKKwl1c2U9YXR0NDQxNS1ydiwKKworYXR0NDQxNS13LW5sfHR0eTU0MjAtdy1ubHxhdHQ1NDIwLXctbmx8QVQmVCA0NDE1LzU0MjAgMTMyIGNvbHMgd2l0aG91dCBjaGFuZ2luZyBsYWJlbHMsCisJa2YxQCwga2YyQCwga2YzQCwga2Y0QCwga2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwgdXNlPWF0dDQ0MTUrbmwsCisJdXNlPWF0dDQ0MTUtdywKKworYXR0NDQxNS13LXJ2LW58dHR5NTQyMC13LXJ2LW58YXR0NTQyMC13LXJ2LW58QVQmVCA0NDE1LzU0MjAgMTMyIGNvbHMgcmV2ZXJzZSB3aXRob3V0IGNoYW5naW5nIGxhYmVscywKKwlrZjFALCBrZjJALCBrZjNALCBrZjRALCBrZjVALCBrZjZALCBrZjdALCBrZjhALCB1c2U9YXR0NDQxNStubCwKKwl1c2U9YXR0NDQxNS13LXJ2LAorCithdHQ1NDIwXzJ8QVQmVCA1NDIwIG1vZGVsIDIgODAgY29scywKKwlhbSwgZGIsIGhzLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaCMyLCBsaW5lcyMyNCwgbG0jNzgsIGx3IzgsIG5sYWIjOCwgd3NsIzU1LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmxpbms9XEVbNW0sIGNidD1cRVsxWiwgY2xlYXI9XEVIXEVKLCBjbm9ybT1cRVsxMTswaiwKKwljcj1cRUcsIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQxPVxFWzFCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFWzFDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3Z2aXM9XEVbMTE7MWosCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkc1xFWyVwMSVkRCwgZWQ9XEVbMEosIGVsPVxFWzBLLAorCWVsMT1cRVsxSywgZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBmc2w9XEU4LCBob21lPVxFW0gsCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGluZG49XEVbJXAxJWRFLAorCWludmlzPVxFWzhtLAorCWlzMT1cRVswOzIzclxFeFxFeVxFWzI7MGpcRVszOzNqXEVbNDswalxFWzU7MGpcRVs2OzBqXEVbNzswalxFWzg7MGpcRVs5OzFqXEVbMTA7MGpcRVsxNTswalxFWzE2OzFqXEVbMTk7MGpcRVsyMDsxalxFWzI5OzBqXEVbMTsyNHIsCisJa2JlZz1cRXQsIGticz1eSCwga2NidD1cRVtaLCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsIGtkbDE9XEVbTSwKKwlrZWw9XEVbMkssIGtlbmQ9XEV6LCBrZW50PV5KLCBrZjE9XEVPYywga2YyPVxFT2QsIGtmMz1cRU9lLAorCWtmND1cRU9mLCBrZjU9XEVPZywga2Y2PVxFT2gsIGtmNz1cRU9pLCBrZjg9XEVPaiwga2hvbWU9XEVbSCwKKwlraWNoMT1cRVs0aCwga2lsMT1cRVtMLCBraW5kPVxFW1QsIGtsbD1cRXUsIGtucD1cRVtVLAorCWtwcD1cRVtWLCBrcmk9XEVbUywgbGYxPUYxLCBsZjI9RjIsIGxmMz1GMywgbGY0PUY0LCBsZjU9RjUsCisJbGY2PUY2LCBsZjc9RjcsIGxmOD1GOCwgbGw9XEV3LCBtYzA9XEVbPzsyaSwgbWM0PVxFWzRpLAorCW1jNT1cRVs1aSwgbXJjdXA9XEVbJWklcDElZDslcDIlZHQsIG5lbD1eTV5KLAorCXBmeD1cRVslcDElZDslcDIlbCUwMmRxICAgRiVwMSVkICAgICAgICAgICAlcDIlc1xFfiwKKwlwbG49XEVbJXAxJWQ7MDswOzBxJXAyJTotMTYuMTZzXEV+LCBwcm90PVxFViwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCByaW49XEVbJXAxJWRGLCBybWFjcz1eTywgcm1reD1cRVsxOTswaiwKKwlybWxuPVxFfCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMj1cRWNcRVs/M2xcRVsyOzB5LAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA1JXwldDsyJTslPyVwMiVwNiV8JXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXA2JXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWt4PVxFWzE5OzFqLCBzbWxuPVxFfiwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdHNsPVxFN1xFWzI1OyVwMSV7OH0lKyVkSCwgdnBhPVxFWyVwMSV7MX0lKyVkZCwKK2F0dDU0MjBfMi13fEFUJlQgNTQyMCBtb2RlbCAyIGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwKKwlpczE9XEVbMDsyM3JcRXhcRXlcRVsyOzBqXEVbMzszalxFWzQ7MGpcRVs1OzFqXEVbNjswalxFWzc7MGpcRVs4OzBqXEVbOTsxalxFWzEwOzBqXEVbMTU7MGpcRVsxNjsxalxFWzE5OzBqXEVbMjA7MWpcRVsyOTswalxFWzE7MjRyLAorCXVzZT1hdHQ1NDIwXzIsCisKK2F0dDQ0MTh8YXR0NTQxOHxBVCZUIDU0MTggODAgY29scywKKwlhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbMVAsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVswSiwgZWw9XEVbMEssIGhvbWU9XEVbSCwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFWzFALCBpbD1cRVslcDElZEwsIGlsMT1cRVsxTCwgaW5kPV5KLAorCWlzMT1cRVs/M2wsIGlzMj1cRSkwXEU/NmxcRT81bCwga2Nscj1cRVslJSwga2N1YjE9XEVALAorCWtjdWQxPVxFVSwga2N1ZjE9XEVBLCBrY3V1MT1cRVMsIGtlbnQ9XEVbLCBrZjE9XEVbaCwKKwlrZjEwPVxFW20sIGtmMTE9XEVbbiwga2YxMj1cRVtvLCBrZjEzPVxFW0gsIGtmMTQ9XEVbSSwKKwlrZjE1PVxFW0osIGtmMTg9XEVbSywga2YxOT1cRVtMLCBrZjI9XEVbaSwga2YyMD1cRVtFLAorCWtmMjE9XEVbXywga2YyMj1cRVtNLCBrZjIzPVxFW04sIGtmMjQ9XEVbTywga2YzPVxFW2osCisJa2Y2PVxFW2ssIGtmNz1cRVtsLCBrZjg9XEVbZiwga2Y5PVxFW3csIGtob21lPVxFYywgcmM9XEU4LAorCXJldj1cRVs3bSwgcm1hY3M9Xk8sIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCithdHQ0NDE4LXd8YXR0NTQxOC13fEFUJlQgNTQxOCAxMzIgY29scywKKwljb2xzIzEzMiwKKwlpczE9XEVbPzNoLCB1c2U9YXR0NTQxOCwKKworYXR0NDQyMHx0dHk0NDIwfHRlbGV0eXBlIDQ0MjAsCisJT1RicywgZGEsIGRiLCBlbywgbXNnciwgdWwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbG0jNzIsCisJYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPVxFRywgY3ViMT1cRUQsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRVAsCisJZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRXosIGhvbWU9XEVILCBpbDE9XEVMLCBpbmQ9XEVIXEVNXEVZN1xzLAorCWtjYnQ9XEVPLCBrY2xyPVxFSiwga2N1YjE9XkgsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2RjaDE9XEVQLCBrZGwxPVxFTSwga2YwPVxFVSwga2YzPVxFQCwga2hvbWU9XEVILAorCWtpY2gxPVxFXF4sIGtpbDE9XEVMLCBraW5kPVxFUywga3JpPVxFVCwKKwlsZjA9c2VnbWVudCBhZHZhbmNlLCBsZjM9Y3Vyc29yIHRhYiwgcm1kY0AsIHJtc289XEV+LAorCXJtdWw9XEVaLCBzbWRjQCwgc21zbz1cRX0sIHNtdWw9XEVcXCwKKworIyAgVGhlIGZvbGxvd2luZyBpcyBhIHRlcm1pbmZvIGVudHJ5IGZvciB0aGUgVGVsZXR5cGUgNDQyNAorIyAgYXN5bmNocm9ub3VzIGtleWJvYXJkLWRpc3BsYXkgdGVybWluYWwuICBJdCBzdXBwb3J0cworIyAgdGhlIHZpIGVkaXRvci4gIFRoZSB0ZXJtaW5hbCBtdXN0IGJlIHNldCB1cCBhcyBmb2xsb3dzLAorIworIyAJSElHSExJR0hUIERFRklOSVRJT04JMy1UT05FCisjIAlESVNQTEFZIEZVTkNUSU9OCUdST1VQIElJSQorIworIyAgVGhlIHNlY29uZCBlbnRyeSBiZWxvdyBwcm92aWRlcyBsaW1pdGVkIChhIGxhIGFkbTNhKQorIyAgb3BlcmF0aW9uIHVuZGVyIEdST1VQIElJLgorIworIyAgVGhpcyBtdXN0IGJlIHVzZWQgd2l0aCBESVNQTEFZIEZVTkNUSU9OIEdST1VQIEkgb3IgSUlJCisjIAlhbmQgSElHSExJR0hUIERFRklOSVRJT04gMy1UT05FCisjIFRoZSB0ZXJtaW5hbCBoYXMgZWl0aGVyIGJvbGQgb3IgYmxpbmssIGRlcGVuZGluZyBvbiBvcHRpb25zCisjCisjIChhdHQ0NDI0OiBjb21tZW50ZWQgb3V0IDxzbWN1cD49XEVbMW0sIHdlIGRvbid0IG5lZWQgYnJpZ2h0IGxvY2tlZCBvbiAtLSBlc3IpCithdHQ0NDI0fHR0eTQ0MjR8dGVsZXR5cGUgNDQyNCwKKwlPVGJzLCBhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRTMsIGJvbGQ9XEUzLCBjYnQ9XEVPLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRUMsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFUCwgZGltPVxFVywgZGw9XEVbJXAxJWRNLCBkbDE9XEVNLAorCWVkPVxFSiwgZWw9XEV6LCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVcXiwgaWw9XEVbJXAxJWRMLCBpbDE9XEVMLCBpbmQ9XkosIGlzMj1cRVsyMGxcRVs/N2gsCisJa2JzPV5ILCBrY2xyPVxFSiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywKKwlraG9tZT1cRVtILCBuZWw9XEVFLCByZXY9XEV9LCByaT1cRVQsIHJtYWNzPVxFKEIsIHJtc289XEV+LAorCXJtdWw9XEVaLAorCXNncj1cRVslPyVwMSV0NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA2JXQ7MSU7JT8lcDYlcDQlfCV0OzUlOyU/JXA1JXQ7MCU7bSwKKwlzZ3IwPVxFWFxFflxFWlxFNFxFKEIsIHNtYWNzPVxFKDAsIHNtc289XEV9LCBzbXVsPVxFXFwsCisJdGJjPVxFRiwKKworYXR0NDQyNC0xfHR0eTQ0MjQtMXx0ZWxldHlwZSA0NDI0IGluIGRpc3BsYXkgZnVuY3Rpb24gZ3JvdXAgSSwKKwlrY2xyQCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBraG9tZUAsCisJdXNlPWF0dDQ0MjQsCisKKyMgVGhpcyBlbnRyeSBpcyBub3Qgb25lIG9mIEFUJlQncyBvZmZpY2lhbCBvbmVzLCBpdCB3YXMgdHJhbnNsYXRlZCBmcm9tIHRoZQorIyA0LjRCU0QgdGVybWNhcCBmaWxlLiAgVGhlIGhpZ2hsaWdodCBzdHJpbmdzIGFyZSBkaWZmZXJlbnQgZnJvbSBhdHQ0NDI0LgorIyBJIGhhdmUgbm8gaWRlYSB3aHkgdGhpcyBpcyAtLSBvbGRlciBmaXJtd2FyZSB2ZXJzaW9uLCBtYXliZT8KKyMgVGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIHRoZSBjb21tZW50IG9yaWdpbmFsbHkgYXR0YWNoZWQgdG8gdGhlIGVudHJ5OgorIyBUaGlzIGVudHJ5IGFwcGVhcnMgdG8gYXZvaWQgdGhlIHRvcCBsaW5lIC0gSSBoYXZlIG5vIGlkZWEgd2h5LgorIyBGcm9tOiBqd2IgV2VkIE1hciAzMSAxMzoyNTowOSAxOTgyIHJlbW90ZSBmcm9tIGlodXhwCithdHQ0NDI0bXx0dHk0NDI0bXx0ZWxldHlwZSA0NDI0TSwKKwlhbSwgZGEsIGRiLCBtaXIsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjMsCisJYmVsPV5HLCBjbGVhcj1cRVsyO0hcRVtKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSUyZDslcDIlMmRIXEVbQiwgY3V1MT1cRVtBLCBkY2gxPVxFUCwKKwlkbDE9XEVNLCBlbD1cRVtLLCBodD1eSSwgaWNoMT1cRVxeLCBpbDE9XEVMLCBpbmQ9XkosIGlwPSQ8Mi8+LAorCWlzMj1cRVttXEVbMjsyNHIsIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLAorCWtmND1cRU9TLCBraG9tZT1cRVtILCBuZWw9Xk1eSiwgcmk9XEVULCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMgVGhlIFRlbGV0eXBlIDU0MjUgaXMgcmVhbGx5IHZlcnNpb24gMiBvZiB0aGUgVGVsZXR5cGUgNTQyMC4gSXQKKyMgaXMgcXVpdGUgc2ltaWxhciwgZXhjZXB0IGZvciBzb21lIG1pbm9yIGRpZmZlcmVuY2VzLiBObyBwYWdlCisjIG1vZGUsIGZvciBleGFtcGxlLCBzbyBhbGwgb2YgdGhlIDxjdXA+IHNlcXVlbmNlcyB1c2VkIGFib3ZlIGhhdmUKKyMgdG8gY2hhbmdlIGJhY2sgdG8gd2hhdCdzIGJlaW5nIHVzZWQgZm9yIHRoZSA1NDEwLiBNYW55IG9mIHRoZQorIyBvcHRpb24gc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkIHRoZWlyIG51bWJlcmluZyBhcyB3ZWxsLgorIworIyBUaGlzIGhhcyBiZWVuIHRlc3RlZCBvbiBhIHByZWxpbWluYXJ5IG1vZGVsLgorIworIyAoYXR0NTQyNTogYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorYXR0NTQyNXx0dHk1NDI1fGF0dDQ0MjV8QVQmVCA0NDI1LzU0MjUsCisJYW0sIGRhLCBkYiwgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzIsIGxpbmVzIzI0LCBsbSM3OCwgbHcjOCwgbmxhYiM4LCB3c2wjNTUsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzI7N20sIGNidD1cRVtaLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVsxMjswaiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVsxMjsxaiwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWNoPVxFWyVwMSVkc1xFWyVwMSVkRCwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkwLAorCWZsYXNoPVxFWz81aCQ8MjAwPlxFWz81bCwgZnNsPVxFOCwgaG9tZT1cRVtILAorCWhwYT1cRVslcDElezF9JSslZEcsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaW5kbj1cRVslcDElZEUsCisJaW52aXM9XEVbOG0sIGlzMT1cRTxcRVs/M2wkPDEwMD4sCisJaXMyPVxFW21cMDE3XEVbMTsyOzM7NDs2bFxFWzEyOzEzOzE0OzIwbFxFWz82Ozk3Ozk5bFxFWz83aFxFWzRpXEV4XEVbMjU7MWpcMjEyLAorCWlzMz1cRVs/NWwsIGtiZWc9XEV0LCBrYnM9XkgsIGtjYnQ9XEVbWiwga2Nscj1cRVtKLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsCisJa2RsMT1cRVtNLCBrZWw9XEVbMkssIGtlbmQ9XEV6LCBrZW50PVxFZW50LCBrZjE9XEVPYywKKwlrZjI9XEVPZCwga2YzPVxFT2UsIGtmND1cRU9mLCBrZjU9XEVPZywga2Y2PVxFT2gsIGtmNz1cRU9pLAorCWtmOD1cRU9qLCBraG9tZT1cRVtILCBraWNoMT1cRVs0aCwga2lsMT1cRVtMLCBraW5kPVxFW1QsCisJa3JpPVxFW1MsIGxsPVxFWzI0SCwgbWMwPVxFWz8yaSwgbWM0PVxFWz85aSwgbWM1PVxFWz80aSwKKwluZWw9Xk1eSiwKKwlwZng9XEVbJXAxJWQ7JXAyJWwlMDJkcSAgIEYlcDElMWQgICAgICAgICAgICVwMiVzLAorCXBsbj1cRVslcDElZDswOzA7MHElcDIlOi0xNi4xNnMsIHByb3Q9XEVWLCByYz1cRTgsCisJcmV2PVxFWzdtLCByaT1cRU0sIHJpbj1cRVslcDElZEYsIHJtYWNzPV5PLCBybWFtPVxFWz83bCwKKwlybWlyPVxFWzRsLCBybWt4PVxFWzIxOzBqXEVbMjU7MWpcMjEyLCBybWxuPVxFfCwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgcnMyPVxFY1xFWz8zbFxFWzI7MHksIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA1JXwldDsyJTslPyVwMiVwNiV8JXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXA2JXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWzIxOzFqXEVbMjU7NGpcRWVudFxFfiwgc21sbj1cRX4sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLCB0c2w9XEU3XEVbMjU7JXAxJXs4fSUrJWRILAorCXZwYT1cRVslcDElezF9JSslZGQsCisKK2F0dDU0MjUtbmx8dHR5NTQyNS1ubHxhdHQ0NDI1LW5sfEFUJlQgNDQyNS81NDI1IDgwIGNvbHVtbnMgbm8gbGFiZWxzLAorCXNta3g9XEVbMjE7MWpcRVsyNTs0alxFZW50LCB1c2U9YXR0NDQyNSwKKworYXR0NTQyNS13fGF0dDQ0MjUtd3x0dHk1NDI1LXd8dGVsZXR5cGUgNDQyNS81NDI1IGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwgbG0jNTQsIHdzbCM5NywKKwlpczE9XEVbPzNoJDwxMDA+LCB1c2U9dHR5NTQyNSwKKworIyAoYXR0NDQyNjogaGlzIGhhZCBib2d1cyBjYXBhYmlsaXRpZXM6IDpyaT1cRU06LCA6cmk9XEVbMVU6LgorIyBJIGFsc28gYWRkZWQgPHJtYW0+LzxzbWFtPiAtLSBlc3IpCithdHQ0NDI2fHR0eTQ0MjZ8dGVsZXR5cGUgNDQyNlMsCisJYW0sIGRhLCBkYiwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBsbSM0OCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYm9sZD1cRVs1bSwgY2xlYXI9XEVbSFxFWzJKXEVbMVVcRVtIXEVbMkpcRVsxViwKKwljcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRUEsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFWzBLLCBob21lPVxFW0gsCisJaHBhPVxFWyVwMSVkRywgaHQ9XkksIGh0cz1cRTEsIGljaD1cRVslcDElZEAsIGljaDE9XEVcXiwKKwlpbD1cRVslcDElZEwsIGlsMT1cRUwsIGluZD1eSiwgaW5kbj1cRVslcDElZFMsCisJaXMxPVxFY1xFWz83aCwgaXMyPVxFW21cRVsxOzI0ciwga2JzPV5ILCBrY2J0PVxFTywKKwlrY2xyPVxFWzJKLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULCBrZjY9XEVPVSwKKwlrZjc9XEVPViwga2Y4PVxFT1csIGtob21lPVxFW0gsIGtsbD1cRVsyNDsxSCwgbGw9XEVbMjRILAorCW5lbD1eTV5KLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVULCByaW49XEVbJXAxJWRULAorCXJtYWNzPVxFKEIsIHJtYW09XEVbPzdsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEVjXEVbPzNsXEVbMjsweSwgc2M9XEU3LCBzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwLAorCXNtYW09XEVbPzdoLCBzbXNvPVxFWzVtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdnBhPVxFWyVwMSVkZCwKKworIyBUZXJtaW5mbyBlbnRyeSBmb3IgdGhlIEFUJlQgNTEwIEEgUGVyc29uYWwgVGVybWluYWwKKyMgRnVuY3Rpb24ga2V5cyA5IC0gMTYgYXJlIGF2YWlsYWJsZSBvbmx5IGFmdGVyIHRoZQorIyBzY3JlZW4gbGFiZWxlZCAoc29mdCBrZXlzL2FjdGlvbiBibG9ja3MpIGFyZSBsYWJlbGVkLiAgRnVuY3Rpb24ga2V5CisjIDkgY29ycmVzcG9uZHMgdG8gdGhlIGxlZnRtb3N0IHRvdWNoIHRhcmdldCBvbiB0aGUgc2NyZWVuLAorIyBmdW5jdGlvbiBrZXkgMTYgY29ycmVzcG9uZHMgdG8gdGhlIHJpZ2h0bW9zdC4KKyMKKyMgVGhpcyBlbnRyeSBpcyBiYXNlZCBvbiBvbmUgZG9uZSBieSBFcm5pZSBSaWNlIGF0IFN1bW1pdCwgTkogYW5kCisjIGNoYW5nZWQgYnkgQW5uZSBHYWxsdXAsIFNrb2tpZSwgSUwsIHR0cmRjIWFubmUKK2F0dDUxMGF8YmN0NTEwYXxBVCZUIDUxMEEgUGVyc29uYWwgVGVybWluYWwsCisJYW0sIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGxoIzIsIGxpbmVzIzI0LCBsdyM3LCBubGFiIzgsCisJYWNzYz0rZ1wsaC1mLmVgYmhyaXNqamtrbGxtbW5ucXF0dHV1dnZ3d3h4e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsyOzdtLCBjYnQ9XEVbWiwKKwljaXZpcz1cRVsxMTswfCwgY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWzExOzN8LCBjcj1eTSwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFWzFCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgY3Z2aXM9XEVbMTE7MnwsIGRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFWzBKLAorCWVsPVxFWzBLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkxLCBmZj1eTCwgaG9tZT1cRVtILCBodD1eSSwKKwlodHM9XEVILCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGlzMT1cRShCXEUpMVxFWzJsLAorCWlzMz1cRVsyMTsxfFwyMTIsIGtMRlQ9XEVbdSwga1JJVD1cRVt2LCBrYnM9XkgsIGtjYnQ9XEVbWiwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVPbSwKKwlrZjEwPVxFT2QsIGtmMTE9XEVPZSwga2YxMj1cRU9mLCBrZjEzPVxFT2csIGtmMTQ9XEVPaCwKKwlrZjE1PVxFT2ksIGtmMTY9XEVPaiwga2YyPVxFT1YsIGtmMz1cRU91LCBrZjQ9XEVOaiwga2Y1PVxFTmUsCisJa2Y2PVxFTmYsIGtmNz1cRU5oLCBrZjg9XEVbSCwga2Y5PVxFT2MsIGtpbmQ9XEVbUywga3JpPVxFW1QsCisJbWMwPVxFWzBpLCBtYzQ9XEVbPzhpLCBtYzU9XEVbPzRpLCBuZWw9XEVFLAorCXBsbj1cRVslcDElZHAlcDIlOi0xNnMsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1hY3M9Xk8sIHJta3g9XEVbMTk7MHwsIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNSVwNiV8JXQ7MiU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwlcDYlfCV0OzclO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWt4PVxFWzE5OzF8LCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywKKworIyBUZXJtaW5mbyBlbnRyeSBmb3IgdGhlIEFUJlQgNTEwIEQgUGVyc29uYWwgVGVybWluYWwKKyMgRnVuY3Rpb24ga2V5cyA5IHRocm91Z2ggMTYgYXJlIGFjY2Vzc2VkIGJ5IGJyaW5naW5nIHVwIHRoZQorIyBzeXN0ZW0gYmxvY2tzLgorIyBGdW5jdGlvbiBrZXkgOSBjb3JyZXNwb25kcyB0byB0aGUgbGVmdG1vc3QgdG91Y2ggdGFyZ2V0IG9uIHRoZSBzY3JlZW4sCisjIGZ1bmN0aW9uIGtleSAxNiBjb3JyZXNwb25kcyB0byB0aGUgcmlnaHRtb3N0LgorIworIyBUaGVyZSBhcmUgcHJvYmxlbXMgd2l0aCBzb2Z0IGtleSBsYWJlbGluZy4gIFRoZXNlIGFyZSBkdWUgdG8KKyMgc3RyYW5nZW5lc3NlcyBpbiB0aGUgbmF0aXZlIHRlcm1pbmFsIHRoYXQgYXJlIGltcG9zc2libGUgdG8KKyMgZGVzY3JpYmUgaW4gYSB0ZXJtaW5mby4KK2F0dDUxMGR8YmN0NTEwZHxBVCZUIDUxMEQgUGVyc29uYWwgVGVybWluYWwsCisJYW0sIGRhLCBkYiwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGgjMiwgbGluZXMjMjQsIGxtIzQ4LCBsdyM3LCBubGFiIzgsCisJYWNzYz0rZ1wsaC1mLmVgYmhyaXNqamtrbGxtbW5ucXF0dHV1dnZ3d3h4e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsyOzdtLCBjYnQ9XEVbWiwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbMTE7M3wsIGNyPV5NLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbMUIsIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBjdnZpcz1cRVsxMTsyfCwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbMEosIGVsPVxFWzBLLAorCWVsMT1cRVsxSywgZW5hY3M9XEUoQlxFKTEsIGZmPV5MLCBob21lPVxFW0gsCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpbmRuPVxFWyVwMSVkUywKKwlpbnZpcz1cRVs4bSwgaXMxPVxFKEJcRSkxXEVbNTswfCwgaXMzPVxFWzIxOzF8XDIxMiwKKwlrTEZUPVxFW3UsIGtSSVQ9XEVbdiwga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFT20sIGtmMTA9XEVPZCwKKwlrZjExPVxFT2UsIGtmMTI9XEVPZiwga2YxMz1cRU9nLCBrZjE0PVxFT2gsIGtmMTU9XEVPaSwKKwlrZjE2PVxFT2osIGtmMj1cRU9WLCBrZjM9XEVPdSwga2Y0PVxFTmosIGtmNT1cRU5lLCBrZjY9XEVOZiwKKwlrZjc9XEVOaCwga2Y4PVxFW0gsIGtmOT1cRU9jLCBraW5kPVxFW1MsIGtyaT1cRVtULCBsbD1cRSMyLAorCW1jMD1cRVswaSwgbWM0PVxFWz84aSwgbWM1PVxFWz80aSwgbWdjPVxFXDosIG5lbD1cRUUsCisJcGxuPVxFWyVwMSVkcCVwMiU6LTE2cywgcmM9XEU4LAorCXJlcD0lcDElY1xFWyVwMiV7MX0lLSVkYiwgcmV2PVxFWzdtLCByaT1cRU0sCisJcmluPVxFWyVwMSVkVCwgcm1hY3M9Xk8sIHJtaXI9XEVbNGwsIHJta3g9XEVbMTk7MHwsCisJcm1sbj1cRTwsIHJtc289XEVbbSwgcm11bD1cRVttLCBybXhvbj1cRVsyOTsxfCwKKwlyczI9XEVbNTswfCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDUlcDYlfCV0OzIlOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXA2JXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWdsPVxFNCwgc21ncj1cRTUsIHNtaXI9XEVbNGgsCisJc21reD1cRVsxOTsxfCwgc21sbj1cRT8sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJc214b249XEVbMjk7MHwsIHRiYz1cRVszZywgdnBhPVxFWyVwMSV7MX0lKyVkZCwKKworIyAoYXR0NTAwOiBJIG1lcmdlZCB0aGlzIHdpdGggdGhlIGF0dDUxMyBlbnRyeSwgYXR0NTAwIGp1c3QgdXNlZCBhdHQ1MTMgLS0gZXNyKQorYXR0NTAwfGF0dDUxM3xBVCZUIDUxMyB1c2luZyBwYWdlIG1vZGUsCisJYW0sIGNodHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGxoIzIsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsCisJYWNzYz0rZ1wsaC1mLmVgYmhyaXNqamtrbGxtbW5ucXF0dHV1dnZ3d3h4e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsyOzdtLCBjYnQ9XEVbWiwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbMTE7MHwsIGNyPV5NLAorCWNzcj0laVxFWyVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbMTE7MXwsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCQ8MT4sIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZW5hY3M9XEUoQlxFKTEsIGhvbWU9XEVbSCwgaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XkksCisJaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWluZG49XEVbJXAxJWRFLCBpbnZpcz1cRVs4bSwKKwlpczE9XEU/XEVbMzszfFxFWzEwOzB8XEVbMjE7MXxcMjEyXEVbNjsxfFxFWzF7XEVbPzk5bCwKKwlrQkVHPVxFTkIsIGtDQU49XEVPVywga0NNRD1cRU9VLCBrQ1BZPVxFTkQsIGtDUlQ9XEVPTiwKKwlrREM9XEVORiwga0RMPVxFTkUsIGtFTkQ9XEVOTiwga0VPTD1cRU9BLCBrRVhUPVxFT0ssCisJa0ZORD1cRU9YLCBrSExQPVxFT00sIGtIT009XEVOTSwga0lDPVxFTkosIGtMRlQ9XEVOSywKKwlrTU9WPVxFTkMsIGtNU0c9XEVPTCwga05YVD1cRU5ILCBrT1BUPVxFT1IsIGtQUlQ9XEVPWiwKKwlrUFJWPVxFTkcsIGtSRE89XEVPVCwga1JFUz1cRU9RLCBrUklUPVxFTkwsIGtSUEw9XEVPWSwKKwlrU0FWPVxFT08sIGtTUEQ9XEVPUCwga1VORD1cRU9TLCBrYmVnPVxFOSwga2JzPV5ILCBrY2FuPVxFT3csCisJa2NidD1cRVtaLCBrY2xvPVxFT1YsIGtjbHI9XEVbSiwga2NtZD1cRU91LCBrY3B5PVxFTmQsCisJa2NydD1cRU9uLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFTmYsIGtkbDE9XEVOZSwga2VsPVxFT2EsIGtlbmQ9XEUwLCBrZW50PVxFZW50LAorCWtleHQ9XEVPaywga2YxPVxFT2MsIGtmMj1cRU9kLCBrZjM9XEVPZSwga2Y0PVxFT2YsIGtmNT1cRU9nLAorCWtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osIGtmbmQ9XEVPeCwga2hscD1cRU9tLAorCWtob21lPVxFW0gsIGtpY2gxPVxFTmosIGtpbmQ9XEVbUywga21vdj1cRU5jLCBrbXJrPVxFTmksCisJa21zZz1cRU9sLCBrbnA9XEVbVSwga254dD1cRU5oLCBrb3BuPVxFT3YsIGtvcHQ9XEVPciwKKwlrcHA9XEVbViwga3BydD1cRU96LCBrcHJ2PVxFTmcsIGtyZG89XEVPdCwga3JlZj1cRU9iLAorCWtyZXM9XEVPcSwga3Jmcj1cRU5hLCBrcmk9XEVbVCwga3JwbD1cRU95LCBrcnN0PVxFT0IsCisJa3Nhdj1cRU9vLCBrc2x0PVxFTkksIGtzcGQ9XEVPcCwga3VuZD1cRU9zLCBsbD1cRSMyLAorCW1jMD1cRVs/OThsXEVbMGksIG1jND1cRVs/OThsXEVbPzhpLCBtYzU9XEVbPzk4bFxFWz80aSwKKwluZWw9XEVFLAorCXBma2V5PVxFWyVwMSVkOyVwMiVsJWQ7MzswcCAgIEYlcDElZCAgICAgICAgICAgJXAyJXMsCisJcGZsb2M9XEVbJXAxJWQ7JXAyJWwlZDsyOzBwICAgRiVwMSVkICAgICAgICAgICAlcDIlcywKKwlwZng9XEVbJXAxJWQ7JXAyJWwlZDsxOzBwICAgRiVwMSVkICAgICAgICAgICAlcDIlcywKKwlwbG49XEVbJXAxJWRwJXAyJTotMTZzLCByYz1cRTgsCisJcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLCByZXY9XEVbN20sIHJpPVxFTSwKKwlyaW49XEVbJXAxJWRGLCBybWFjcz1eTywgcm1pcj1cRVs0bCwKKwlybWt4PVxFWzE5OzB8XEVbMjE7MXxcMjEyLCBybWxuPVxFPCwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlyczE9XEU/XEVbMzszfFxFWzEwOzB8XEVbMjE7MXxcMjEyXEVbNjsxfFxFWzF7XEVbPzk5bFxFWzI7MHxcRVs2OzF8XEVbODswfFxFWzE5OzB8XEVbMXtcRVs/OTlsLAorCXJzMj1cRVs1OzB8LCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNSV8JXQ7MiU7JT8lcDIlcDYlfCV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCVwNiV8JXQ7NyU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWzE5OzF8XEVbMjE7NHxcRWVudCwgc21sbj1cRT8sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorCisjIDAxLTA3LTg4CisjIHByaW50ZXIgbXVzdCBiZSBzZXQgdG8gRU1VTCBBTlNJIHRvIGFjY2VwdCBFU0MgY29kZXMKKyMgPGN1dTE+IHN0b3BzIGF0IHRvcCBtYXJnaW4KKyMgPGlzMT4gc2V0cyBjcGkgMTAsbHBpIDYsZm9ybSA2NixsZWZ0IDEscmlnaHQgMTMyLHRvcCAxLGJvdHRvbSA2Nixmb250CisjCWFuZCBhbHQgZm9udCBhc2NpaSx3cmFwIG9uLHRhYnMgY2xlYXJlZAorIyA8aXMyPiBkaXNhYmxlcyBuZXdsaW5lIG9uIExGLEVtcGhhc2l6ZWQgb2ZmCisjIFRoZSA8dTA+IGNhcGFiaWxpdHkgc2V0cyBmb3JtIGxlbmd0aAorYXR0NTMxMHxhdHQ1MzIwfEFUJlQgTW9kZWwgNTMyMTAgb3IgNTMyMCBtYXRyaXggcHJpbnRlciwKKwl4aHBhLCB4dnBhLAorCWJ1ZnN6IzgxOTIsIGNvbHMjMTMyLCBjcHMjMTIwLCBpdCM4LCBsaW5lcyM2Niwgb3JjIzEwLAorCW9yaGkjMTAwLCBvcmwjMTIsIG9ydmkjNzIsCisJY3BpPSU/JXAxJXsxMH0lPSV0XEVbdyVlJXAxJXsxMn0lPSV0XEVbMnclZSVwMSV7NX0lPSV0XEVbNXclZSVwMSV7MTN9JT0lcDElezE0fSU9JU8ldFxFWzN3JWUlcDElezE2fSU9JXAxJXsxN30lPSVPJXRcRVs0dyVlJXAxJXs2fSU9JXRcRVs2dyVlJXAxJXs3fSU9JXRcRVs3dyVlJXAxJXs4fSU9JXRcRVs4dyU7LAorCWNyPV5NLAorCWNzbm09JT8lcDElezB9JT0ldHVzYXNjaWklZSVwMSV7MX0lPSV0ZW5nbGlzaCVlJXAxJXsyfSU9JXRmaW5uaXNoJWUlcDElezN9JT0ldGphcGFuZXNlJWUlcDElezR9JT0ldG5vcndlZ2lhbiVlJXAxJXs1fSU9JXRzd2VkaXNoJWUlcDElezZ9JT0ldGdlcm1hbmljJWUlcDElezd9JT0ldGZyZW5jaCVlJXAxJXs4fSU9JXRjYW5hZGlhbl9mcmVuY2glZSVwMSV7OX0lPSV0aXRhbGlhbiVlJXAxJXsxMH0lPSV0c3BhbmlzaCVlJXAxJXsxMX0lPSV0bGluZSVlJXAxJXsxMn0lPSV0c2VjdXJpdHklZSVwMSV7MTN9JT0ldGViY2RpYyVlJXAxJXsxNH0lPSV0YXBsJWUlcDElezE1fSU9JXRtb3NhaWMlOywKKwljdWQ9XEVbJXAxJWRlLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRhLCBjdWYxPVxzLCBjdXUxPVxFTSwKKwlmZj1eTCwgaHBhPVxFWyVwMSVkYCwgaHQ9XkksIGlzMT1cRWMsIGlzMj1cRVsyMGxcciwKKwlscGk9JT8lcDElezJ9JT0ldFxFWzR6JWUlcDElezN9JT0ldFxFWzV6JWUlcDElezR9JT0ldFxFWzZ6JWUlcDElezZ9JT0ldFxFW3olZSVwMSV7OH0lPSV0XEVbMnolZSVwMSV7MTJ9JT0ldFxFWzN6JTssCisJcnNobT1cRVttLAorCXNjcz0lPyVwMSV7MH0lPSV0XEUoQiVlJXAxJXsxfSU9JXRcRShBJWUlcDElezJ9JT0ldFxFKEMlZSVwMSV7M30lPSV0XEUoRCVlJXAxJXs0fSU9JXRcRShFJWUlcDElezV9JT0ldFxFKEglZSVwMSV7Nn0lPSV0XEUoSyVlJXAxJXs3fSU9JXRcRShSJWUlcDElezh9JT0ldFxFKFElZSVwMSV7OX0lPSV0XEUoWSVlJXAxJXsxMH0lPSV0XEUoWiVlJXAxJXsxMX0lPSV0XEUoMCVlJXAxJXsxMn0lPSV0XEUoMSVlJXAxJXsxM30lPSV0XEUoMyVlJXAxJXsxNH0lPSV0XEUoOCVlJXAxJXsxNX0lPSV0XEUofSU7LAorCXNtZ2JwPVxFWzslcDElZHIsIHNtZ2xwPVxFWyV7MX0lcDElKyVkcywKKwlzbWdycD1cRVs7JXsxfSVwMSUrJWRzLCBzbWd0cD1cRVslcDElZHIsIHNzaG09XEVbNW0sCisJdTA9XEVbJXAxJWR0LCB2cGE9XEVbJXAxJWRkLAorCisjIFRlbGV0eXBlIDU2MjAsIGZpcm13YXJlIHZlcnNpb24gMS4xICg4Ozc7Mykgb3IgZWFybGllciBmcm9tIEJSTAorIyBUaGUgZm9sbG93aW5nIFNFVC1VUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJQ1JfREVGPUNSCU5MX0RFRj1JTkRFWAlEVVBMRVg9RlVMTAorIyBPdGhlciBTRVQtVVAgbW9kZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHMuICBUaGlzIHRlcm1jYXAgZGVzY3JpcHRpb24gaXMgZm9yIHRoZSBSZXNpZGVudCBUZXJtaW5hbCBNb2RlLgorIyBObyBkZWxheXMgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgVGhlIEJSTCBlbnRyeSBhbHNvIHNhaWQ6IFVOU0FGRSA6bGw9XEVbNzBIOgorYXR0NTYyMC0xfHR0eTU2MjAtMXxkbWQxfFRlbGV0eXBlIDU2MjAgd2l0aCBvbGQgUk9NcywKKwlhbSwgeG9uLAorCWNvbHMjODgsIGl0IzgsIGxpbmVzIzcwLCB2dCMzLAorCWJlbD1eRywgY2xlYXI9XEVbSFxFW0osIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgaHQ9XkksIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosIGluZG49XEVbJXAxJWRTLCBrYnM9XkgsIGtjbHI9XEVbMkosCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2hvbWU9XEVbSCwKKwlrbGw9XEVbNzA7MUgsIG5lbD1eTV5KLCByYz1cRTgsIHJpPVxFW1QsIHJpbj1cRVslcDElZFQsCisJcnMxPVxFYywgc2M9XEU3LAorCisjIDU2MjAgdGVybWluZm8gICgyLjAgb3IgbGF0ZXIgUk9NUyB3aXRoIGNoYXIgYXR0cmlidXRlcykKKyMgVGhlIGZvbGxvd2luZyBTRVQtVVAgbW9kZXMgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCURVUExFWD1GVUxMCUdFTl9GTE9XPU9OCU5FV0xJTkU9SU5ERVgJUkVUVVJOPUNSCisjIE90aGVyIFNFVC1VUCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50cy4gIFRoaXMgdGVybWNhcCBkZXNjcmlwdGlvbiBpcyBmb3IgUmVzaWRlbnQgVGVybWluYWwgTW9kZS4gIE5vCisjIGRlbGF5cyBhcmUgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgYXNzdW1wdGlvbnM6IDxpbmQ+IChzY3JvbGwgZm9yd2FyZCBvbmUgbGluZSkgaXMgb25seSBkb25lIGF0IHNjcmVlbiBib3R0b20KKyMgQmUgYXdhcmUgdGhhdCBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgZG1kIGhhdmUgYSBmaXJtd2FyZSBidWcgdGhhdCBhZmZlY3RzCisjIHBhcmFtZXRlciBkZWZhdWx0aW5nOyBmb3IgdGhpcyB0ZXJtaW5hbCwgdGhlIDAgaW4gXEVbMG0gaXMgbm90IG9wdGlvbmFsLgorIyA8bXNncj4gaXMgZnJvbSBhbiBvdGhlcndpc2UgaW5mZXJpb3IgQlJMIGZvciB0aGlzIHRlcm1pbmFsLiAgVGhhdCBlbnRyeQorIyBhbHNvIGhhcyA8bGw+PVxFWzcwSCBjb21tZW50ZWQgb3V0IGFuZCBtYXJrZWQgdW5zYWZlLgorIyBGb3IgbW9yZSwgc2VlIHRoZSA1NjIwIEZBUSBtYWludGFpbmVkIGJ5IERhdmlkIEJyZW5lbWFuIDxkYXZlYkBkZ3RsLmNvbT4uCithdHQ1NjIwfGRtZHx0dHk1NjIwfHR0eWRtZHw1NjIwfDU2MjAgdGVybWluYWwgODggY29sdW1ucywKKwlPVGJzLCBhbSwgbXNnciwgbnBjLCB4b24sCisJY29scyM4OCwgaXQjOCwgbGluZXMjNzAsCisJYmVsPV5HLCBib2xkPVxFWzJtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1cRVtCLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVbUywKKwlpbmRuPVxFWyVwMSVkUywga2JzPV5ILCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsIGtsbD1cRVs3MDsxSCwgbmVsPV5KLAorCXBmeD1cRVslcDElZDslcDIlbCVkcSVwMiVzLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVbVCwKKwlyaW49XEVbJXAxJWRULCBybXNvPVxFWzBtLCBybXVsPVxFWzBtLCByczE9XEVjLCBzYz1cRTcsCisJc2dyMD1cRVswbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK2F0dDU2MjAtMjR8dHR5NTYyMC0yNHxkbWQtMjR8dGVsZXR5cGUgZG1kIDU2MjAgaW4gYSAyNHg4MCBsYXllciwKKwlsaW5lcyMyNCwgdXNlPWF0dDU2MjAsCithdHQ1NjIwLTM0fHR0eTU2MjAtMzR8ZG1kLTM0fHRlbGV0eXBlIGRtZCA1NjIwIGluIGEgMzR4ODAgbGF5ZXIsCisJbGluZXMjMzQsIHVzZT1hdHQ1NjIwLAorIyA1NjIwIGxheWVyIHJ1bm5pbmcgdGhlICJTIiBzeXN0ZW0ncyBkb3dubG9hZGVkIGdyYXBoaWNzIGhhbmRsZXI6CithdHQ1NjIwLXN8dHR5NTYyMC1zfGxheWVyfHZpdHR5fDU2MjAgUyBsYXllciwKKwlPVGJzLCBPVHB0LCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyM3MiwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdXA9XEVZJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5LLCBkbDE9XEVELAorCWVsPVxFSywgZmxhc2g9XEVeRywgaHQ9XkksIGlsMT1cRUksIGluZD1eSiwga2JzPV5ILCBrY2xyPVxFWzJKLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsCisJa2xsPVxFWzcwOzFILAorCisjIEVudHJpZXMgZm9yIDxrZjE1PiB0aHJ1IDxrZjI4PiByZWZlciB0byB0aGUgc2hpZnRlZCBzeXN0ZW0gcGYga2V5cy4KKyMKKyMgRW50cmllcyBmb3IgPGtmMjk+IHRocnUgPGtmNDY+IHJlZmVyIHRvIHRoZSBhbHRlcm5hdGUga2V5cGFkIG1vZGUKKyMga2V5czogID0gKiAvICsgNyA4IDkgLSA0IDUgNiAsIDEgMiAzIDAgLiBFTlRFUgorYXR0NjA1fEFUJlQgNjA1IDgwIGNvbHVtbiAxMDJrZXkga2V5Ym9hcmQsCisJYW0sIGVvLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLAorCWNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwKKwlkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUssIGZzbD1cRTgsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsCisJaWwxPVxFW0wsIGluZD1eSiwgaW52aXM9XEVbOG0sCisJaXMxPVxFWzg7MHxcRVs/XEVbMTM7MjBsXEVbP1xFWzEyaCwgaXMyPVxFW21cMDE3LAorCWtMRlQ9XEVbIEEsIGtSSVQ9XEVbIEAsIGticz1eSCwga2NidD1cRVtaLCBrY2xyPVxFWzJKLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsCisJa2RsMT1cRVtNLCBrZW5kPVxFWzI0OzFILCBrZjE9XEVPYywga2YxMD1cRU5wLCBrZjExPVxFTnEsCisJa2YxMj1cRU5yLCBrZjEzPVxFTnMsIGtmMTQ9XEVOdCwga2YxNT1cRU9DLCBrZjE2PVxFT0QsCisJa2YxNz1cRU9FLCBrZjE4PVxFT0YsIGtmMTk9XEVPRywga2YyPVxFT2QsIGtmMjA9XEVPSCwKKwlrZjIxPVxFT0ksIGtmMjI9XEVPSiwga2YyMz1cRU5PLCBrZjI0PVxFTlAsIGtmMjU9XEVOUSwKKwlrZjI2PVxFTlIsIGtmMjc9XEVOUywga2YyOD1cRU5ULCBrZjI5PVxFT1AsIGtmMz1cRU9lLAorCWtmMzA9XEVPUSwga2YzMT1cRU9SLCBrZjMyPVxFT1MsIGtmMzM9XEVPdywga2YzND1cRU94LAorCWtmMzU9XEVPeSwga2YzNj1cRU9tLCBrZjM3PVxFT3QsIGtmMzg9XEVPdSwga2YzOT1cRU92LAorCWtmND1cRU9mLCBrZjQwPVxFT2wsIGtmNDE9XEVPcSwga2Y0Mj1cRU9yLCBrZjQzPVxFT3MsCisJa2Y0ND1cRU9wLCBrZjQ1PVxFT24sIGtmNDY9XEVPTSwga2Y1PVxFT2csIGtmNj1cRU9oLAorCWtmNz1cRU9pLCBrZjg9XEVPaiwga2Y5PVxFTm8sIGtob21lPVxFW0gsIGtpY2gxPVxFW0AsCisJa2lsMT1cRVtMLCBraW5kPVxFW1MsIGtucD1cRVtVLCBrcHA9XEVbViwgbGw9XEVbMjRILAorCW1jND1cRVs/NGksIG1jNT1cRVs/NWksIG5lbD1cRUUsCisJcGZ4PVxFWyVwMSVkOyVwMiVsJTAyZHEgICBGJXAxJTFkICAgICAgICAgICAlcDIlcywKKwlwbG49XEVbJXAxJWQ7MDswOzBxJXAyJTotMTYuMTZzLCByYz1cRTgsIHJldj1cRVs3bSwKKwlybWFjcz1eTywgcm1pcj1cRVs0bCwgcm1sbj1cRVsycCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVxFY1xFWz8zbCwgc2M9XEU3LCBzZ3IwPVxFW21cMDE3LCBzbWFjcz1cRSkwXDAxNiwKKwlzbWlyPVxFWzRoLCBzbWxuPVxFW3AsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdHNsPVxFN1xFWzI1OyVpJXAxJWR4LAorYXR0NjA1LXBjfEFUVCA2MDUgaW4gcGMgdGVybSBtb2RlLAorCWFjc2M9alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNXFcMzA0dFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2MywKKwljYnQ9XEVbWiwgY3ViMT1cRVtELCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywgY3V1MT1cRVtBLAorCWRjaDE9XEVbUCwgZGwxPVxFW00sIGljaDE9XEVbQCwgaWwxPVxFW0wsIGtjYnQ9XEVbWiwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLAorCWtkbDE9XEVbTSwga2VuZD1cRVtGLCBrZjE9XEVbTSwga2YxMD1cRVtWLCBrZjI9XEVbTiwKKwlrZjM9XEVbTywga2Y0PVxFW1AsIGtmNT1cRVtRLCBrZjY9XEVbUiwga2Y3PVxFW1MsIGtmOD1cRVtULAorCWtmOT1cRVtVLCBraG9tZT1cRVtILCBraWNoMT1cRVtALCBrbnA9XEVbRywga3BwPVxFW0ksCisJcm1zYz00MDBcRVs1MDswfCwgc21zYz0yNTBcRVs/MTFsXEVbNTA7MXwsIHhvZmZjPWcsCisJeG9uYz1lLCB1c2U9YXR0NjA1LAorYXR0NjA1LXd8QVQmVCA2MDUtdyAxMzIgY29sdW1uIDEwMiBrZXkga2V5Ym9hcmQsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMxPVxFWzg7MHxcRVs/NDs1OzEzOzE1bFxFWzEzOzIwbFxFWz8zOzdoXEVbMTJoXEUoQlxFKTAsCisJdXNlPWF0dDYwNSwKKyMgKGF0dDYxMDogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZy4gIEkgYWxzbworIyBhZGRlZCA8aW5kbj4gYW5kIDxyaW4+IGJlY2F1c2UgdGhlIEJTRCBmaWxlIHNheXMgdGhlIGF0dDYxNXMgaGF2ZSB0aGVtLAorIyBhbmQgdGhlIDYxNSBpcyBsaWtlIGEgNjEwIHdpdGggYSBiaWcga2V5Ym9hcmQsIGFuZCBtb3N0IG9mIHRoZWlyIG90aGVyCisjIHNtYXJ0IHRlcm1pbmFscyBzdXBwb3J0IHRoZSBzYW1lIHNlcXVlbmNlIC0tIGVzcikKK2F0dDYxMHxBVCZUIDYxMDsgODAgY29sdW1uOyA5OGtleSBrZXlib2FyZCwKKwlhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaCMyLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbPzI1aFxFWz8xMmwsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MTI7MjVoLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBmc2w9XEU4LCBob21lPVxFW0gsIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaW5kbj1cRVslcDElZFMsIGludmlzPVxFWzhtLAorCWlzMT1cRVs4OzB8XEVbPzM7NDs1OzEzOzE1bFxFWzEzOzIwbFxFWz83aFxFWzEyaFxFKEJcRSkwLAorCWlzMj1cRVttXDAxNywgaXMzPVxFKEJcRSkwLCBrTEZUPVxFWyBALCBrUklUPVxFWyBBLCBrYnM9XkgsCisJa2NidD1cRVtaLCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9jLCBrZjEwPVxFTnAsIGtmMTE9XEVOcSwga2YxMj1cRU5yLAorCWtmMTM9XEVOcywga2YxND1cRU50LCBrZjI9XEVPZCwga2YzPVxFT2UsIGtmND1cRU9mLCBrZjU9XEVPZywKKwlrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLCBrZjk9XEVObywga2hvbWU9XEVbSCwKKwlraW5kPVxFW1MsIGtyaT1cRVtULCBsbD1cRVsyNEgsIG1jND1cRVs/NGksIG1jNT1cRVs/NWksCisJbmVsPVxFRSwKKwlwZng9XEVbJXAxJWQ7JXAyJWwlMDJkcSAgIEYlcDElMWQgICAgICAgICAgICVwMiVzLAorCXBsbj1cRVslcDElZDswOzA7MHElcDIlOi0xNi4xNnMsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFTSwgcmluPVxFWyVwMSVkVCwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJtbG49XEVbMnAsIHJtc289XEVbbSwgcm11bD1cRVttLCByczI9XEVjXEVbPzNsLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXA1JXQ7MiU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWxuPVxFW3AsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRzbD1cRTdcRVsyNTslaSVwMSVkeCwKK2F0dDYxMC13fEFUJlQgNjEwOyAxMzIgY29sdW1uOyA5OGtleSBrZXlib2FyZCwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczE9XEVbODswfFxFWz80OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzM7N2hcRVsxMmgsCisJdXNlPWF0dDYxMCwKKworYXR0NjEwLTEwM2t8QVQmVCA2MTA7IDgwIGNvbHVtbjsgMTAza2V5IGtleWJvYXJkLAorCWtCRUc9XEVOQiwga0NBTj1cRU9XLCBrQ01EPVxFT1UsIGtDUFk9XEVORCwga0NSVD1cRU9OLAorCWtEQz1cRU5GLCBrREw9XEVORSwga0VORD1cRU5OLCBrRU9MPVxFT0EsIGtFWFQ9XEVPSywKKwlrRk5EPVxFT1gsIGtITFA9XEVPTSwga01PVj1cRU5DLCBrTVNHPVxFT0wsIGtOWFQ9XEVOSCwKKwlrT1BUPVxFT1IsIGtQUlQ9XEVPWiwga1BSVj1cRU5HLCBrUkRPPVxFT1QsIGtSRVM9XEVPUSwKKwlrUlBMPVxFT1ksIGtTQVY9XEVPTywga1NQRD1cRU9QLCBrVU5EPVxFT1MsIGtiZWc9XEU5LAorCWtjYW49XEVPdywga2Nsbz1cRU9WLCBrY21kPVxFT3UsIGtjcHk9XEVOZCwga2NydD1cRU9uLAorCWtkY2gxPVxFTmYsIGtkbDE9XEVOZSwga2VsPVxFT2EsIGtlbmQ9XEUwLCBrZW50PV5NLAorCWtleHQ9XEVPaywga2YxMEAsIGtmMTFALCBrZjEyQCwga2YxM0AsIGtmMTRALCBrZjlALCBrZm5kPVxFT3gsCisJa2hscD1cRU9tLCBraWNoMT1cRU5qLCBrbW92PVxFTmMsIGttcms9XEVOaSwga21zZz1cRU9sLAorCWtucD1cRVtVLCBrbnh0PVxFTmgsIGtvcG49XEVPdiwga29wdD1cRU9yLCBrcHA9XEVbViwKKwlrcHJ0PVxFT3osIGtwcnY9XEVOZywga3Jkbz1cRU90LCBrcmVmPVxFT2IsIGtyZXM9XEVPcSwKKwlrcmZyPVxFTmEsIGtybWlyPVxFTmosIGtycGw9XEVPeSwga3JzdD1cRU9CLCBrc2F2PVxFT28sCisJa3NsdD1cRU5JLCBrc3BkPVxFT3AsIGt1bmQ9XEVPcywgdXNlPWF0dDYxMCwKK2F0dDYxMC0xMDNrLXd8QVQmVCA2MTA7IDEzMiBjb2x1bW47IDEwM2tleSBrZXlib2FyZCwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczE9XEVbODswfFxFWz80OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzM7N2hcRVsxMmgsCisJdXNlPWF0dDYxMC0xMDNrLAorYXR0NjE1fEFUJlQgNjE1OyA4MCBjb2x1bW47IDk4a2V5IGtleWJvYXJkLAorCWtMRlQ9XEVbIEEsIGtSSVQ9XEVbIEAsIGtmMTU9XEVPQywga2YxNj1cRU9ELCBrZjE3PVxFT0UsCisJa2YxOD1cRU9GLCBrZjE5PVxFT0csIGtmMjA9XEVPSCwga2YyMT1cRU9JLCBrZjIyPVxFT0osCisJa2YyMz1cRU5PLCBrZjI0PVxFTlAsIGtmMjU9XEVOUSwga2YyNj1cRU5SLCBrZjI3PVxFTlMsCisJa2YyOD1cRU5ULCBrZjI5PVxFT1AsIGtmMzA9XEVPUSwga2YzMT1cRU9SLCBrZjMyPVxFT1MsCisJa2YzMz1cRU93LCBrZjM0PVxFT3gsIGtmMzU9XEVPeSwga2YzNj1cRU9tLCBrZjM3PVxFT3QsCisJa2YzOD1cRU91LCBrZjM5PVxFT3YsIGtmNDA9XEVPbCwga2Y0MT1cRU9xLCBrZjQyPVxFT3IsCisJa2Y0Mz1cRU9zLCBrZjQ0PVxFT3AsIGtmNDU9XEVPbiwga2Y0Nj1cRU9NLCB1c2U9YXR0NjEwLAorYXR0NjE1LXd8QVQmVCA2MTU7IDEzMiBjb2x1bW47IDk4a2V5IGtleWJvYXJkLAorCWtMRlQ9XEVbIEEsIGtSSVQ9XEVbIEAsIGtmMTU9XEVPQywga2YxNj1cRU9ELCBrZjE3PVxFT0UsCisJa2YxOD1cRU9GLCBrZjE5PVxFT0csIGtmMjA9XEVPSCwga2YyMT1cRU9JLCBrZjIyPVxFT0osCisJa2YyMz1cRU5PLCBrZjI0PVxFTlAsIGtmMjU9XEVOUSwga2YyNj1cRU5SLCBrZjI3PVxFTlMsCisJa2YyOD1cRU5ULCBrZjI5PVxFT1AsIGtmMzA9XEVPUSwga2YzMT1cRU9SLCBrZjMyPVxFT1MsCisJa2YzMz1cRU93LCBrZjM0PVxFT3gsIGtmMzU9XEVPeSwga2YzNj1cRU9tLCBrZjM3PVxFT3QsCisJa2YzOD1cRU91LCBrZjM5PVxFT3YsIGtmNDA9XEVPbCwga2Y0MT1cRU9xLCBrZjQyPVxFT3IsCisJa2Y0Mz1cRU9zLCBrZjQ0PVxFT3AsIGtmNDU9XEVPbiwga2Y0Nj1cRU9NLCB1c2U9YXR0NjEwLXcsCithdHQ2MTUtMTAza3xBVCZUIDYxNTsgODAgY29sdW1uOyAxMDNrZXkga2V5Ym9hcmQsCisJa0xGVD1cRVsgQSwga1JJVD1cRVsgQCwgdXNlPWF0dDYxMC0xMDNrLAorYXR0NjE1LTEwM2std3xBVCZUIDYxNTsgMTMyIGNvbHVtbjsgMTAza2V5IGtleWJvYXJkLAorCWtMRlQ9XEVbIEEsIGtSSVQ9XEVbIEAsIHVzZT1hdHQ2MTAtMTAzay13LAorIyAoYXR0NjIwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIGFuZAorIyA8cmluPi88aW5kbj4gZnJvbSBhIEJTRCB0ZXJtY2FwIC0tIGVzcikKK2F0dDYyMHxBVCZUIDYyMDsgODAgY29sdW1uOyA5OGtleSBrZXlib2FyZCwKKwlhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaCMyLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbPzI1aFxFWz8xMmwsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MTI7MjVoLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBmc2w9XEU4LCBob21lPVxFW0gsIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaW5kbj1cRVslcDElZFMsIGludmlzPVxFWzhtLAorCWlzMT1cRVs4OzB8XEVbPzM7NDs1OzEzOzE1bFxFWzEzOzIwbFxFWz83aFxFWzEyaCwKKwlpczI9XEVbbVwwMTcsIGlzMz1cRShCXEUpMCwga0xGVD1cRVsgQSwga1JJVD1cRVsgQCwga2JzPV5ILAorCWtjYnQ9XEVbWiwga2Nscj1cRVsySiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZjE9XEVPYywga2YxMD1cRU5wLCBrZjExPVxFTnEsIGtmMTI9XEVOciwKKwlrZjEzPVxFTnMsIGtmMTQ9XEVOdCwga2YxNT1cRU9DLCBrZjE2PVxFT0QsIGtmMTc9XEVPRSwKKwlrZjE4PVxFT0YsIGtmMTk9XEVPRywga2YyPVxFT2QsIGtmMjA9XEVPSCwga2YyMT1cRU9JLAorCWtmMjI9XEVPSiwga2YyMz1cRU5PLCBrZjI0PVxFTlAsIGtmMjU9XEVOUSwga2YyNj1cRU5SLAorCWtmMjc9XEVOUywga2YyOD1cRU5ULCBrZjI5PVxFT1AsIGtmMz1cRU9lLCBrZjMwPVxFT1EsCisJa2YzMT1cRU9SLCBrZjMyPVxFT1MsIGtmMzM9XEVPdywga2YzND1cRU94LCBrZjM1PVxFT3ksCisJa2YzNj1cRU9tLCBrZjM3PVxFT3QsIGtmMzg9XEVPdSwga2YzOT1cRU92LCBrZjQ9XEVPZiwKKwlrZjQwPVxFT2wsIGtmNDE9XEVPcSwga2Y0Mj1cRU9yLCBrZjQzPVxFT3MsIGtmNDQ9XEVPcCwKKwlrZjQ1PVxFT24sIGtmNDY9XEVPTSwga2Y1PVxFT2csIGtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osCisJa2Y5PVxFTm8sIGtob21lPVxFW0gsIGtpbmQ9XEVbUywga3JpPVxFW1QsIGxsPVxFWzI0SCwKKwltYzQ9XEVbPzRpLCBtYzU9XEVbPzVpLCBuZWw9XEVFLAorCXBmeD1cRVslcDElZDslcDIlbCUwMmRxICAgRiVwMSUxZCAgICAgICAgICAgJXAyJXMsCisJcGxuPVxFWyVwMSVkOzA7MDswcSVwMiU6LTE2LjE2cywgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCByaW49XEVbJXAxJWRULCBybWFjcz1cRShCXDAxNywgcm1hbT1cRVs/N2wsCisJcm1pcj1cRVs0bCwgcm1sbj1cRVsycCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVxFY1xFWz8zbCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXEUoQlwwMTcsIHNtYWNzPVxFKTBcMDE2LCBzbWFtPVxFWz83aCwKKwlzbWlyPVxFWzRoLCBzbWxuPVxFW3AsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdHNsPVxFN1xFWzI1OyVpJXAxJWR4LAorYXR0NjIwLXd8QVQmVCA2MjA7IDEzMiBjb2x1bW47IDk4a2V5IGtleWJvYXJkLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMT1cRVs4OzB8XEVbPzQ7NTsxMzsxNWxcRVsxMzsyMGxcRVs/Mzs3aFxFWzEyaCwKKwl1c2U9YXR0NjIwLAorYXR0NjIwLTEwM2t8QVQmVCA2MjA7IDgwIGNvbHVtbjsgMTAza2V5IGtleWJvYXJkLAorCWtCRUc9XEVOQiwga0NBTj1cRU9XLCBrQ01EPVxFT1UsIGtDUFk9XEVORCwga0NSVD1cRU9OLAorCWtEQz1cRU5GLCBrREw9XEVORSwga0VORD1cRU5OLCBrRU9MPVxFT0EsIGtFWFQ9XEVPSywKKwlrRk5EPVxFT1gsIGtITFA9XEVPTSwga01PVj1cRU5DLCBrTVNHPVxFT0wsIGtOWFQ9XEVOSCwKKwlrT1BUPVxFT1IsIGtQUlQ9XEVPWiwga1BSVj1cRU5HLCBrUkRPPVxFT1QsIGtSRVM9XEVPUSwKKwlrUlBMPVxFT1ksIGtTQVY9XEVPTywga1NQRD1cRU9QLCBrVU5EPVxFT1MsIGtiZWc9XEU5LAorCWtjYW49XEVPdywga2Nsbz1cRU9WLCBrY21kPVxFT3UsIGtjcHk9XEVOZCwga2NydD1cRU9uLAorCWtkY2gxPVxFTmYsIGtkbDE9XEVOZSwga2VsPVxFT2EsIGtlbmQ9XEUwLCBrZW50PV5NLAorCWtleHQ9XEVPaywga2YxMEAsIGtmMTFALCBrZjEyQCwga2YxM0AsIGtmMTRALCBrZjE1QCwga2YxNkAsIGtmMTdALAorCWtmMThALCBrZjE5QCwga2YyMEAsIGtmMjFALCBrZjIyQCwga2YyM0AsIGtmMjRALCBrZjI1QCwga2YyNkAsIGtmMjdALAorCWtmMjhALCBrZjI5QCwga2YzMEAsIGtmMzFALCBrZjMyQCwga2YzM0AsIGtmMzRALCBrZjM1QCwga2YzNkAsIGtmMzdALAorCWtmMzhALCBrZjM5QCwga2Y0MEAsIGtmNDFALCBrZjQyQCwga2Y0M0AsIGtmNDRALCBrZjQ1QCwga2Y0NkAsIGtmOUAsCisJa2ZuZD1cRU94LCBraGxwPVxFT20sIGtpY2gxPVxFTmosIGttb3Y9XEVOYywga21yaz1cRU5pLAorCWttc2c9XEVPbCwga25wPVxFW1UsIGtueHQ9XEVOaCwga29wbj1cRU92LCBrb3B0PVxFT3IsCisJa3BwPVxFW1YsIGtwcnQ9XEVPeiwga3Bydj1cRU5nLCBrcmRvPVxFT3QsIGtyZWY9XEVPYiwKKwlrcmVzPVxFT3EsIGtyZnI9XEVOYSwga3JtaXI9XEVOaiwga3JwbD1cRU95LCBrcnN0PVxFT0IsCisJa3Nhdj1cRU9vLCBrc2x0PVxFTkksIGtzcGQ9XEVPcCwga3VuZD1cRU9zLCB1c2U9YXR0NjIwLAorCithdHQ2MjAtMTAzay13fEFUJlQgNjIwOyAxMzIgY29sdW1uOyAxMDNrZXkga2V5Ym9hcmQsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMxPVxFWzg7MHxcRVs/NDs1OzEzOzE1bFxFWzEzOzIwbFxFWz8zOzdoXEVbMTJoLAorCXVzZT1hdHQ2MjAtMTAzaywKKworIyBBVCZUIChmb3JtZXJseSBUZWxldHlwZSkgNjMwIE11bHRpLVRhc2tpbmcgR3JhcGhpY3MgdGVybWluYWwKKyMgVGhlIGZvbGxvd2luZyBTRVRVUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJTG9jYWxfRWNobz1PZmYJR2VuX0Zsb3c9T24JUmV0dXJuPUNSCVJlY2VpdmVkX05ld2xpbmU9TEYKKyMJRm9udF9TaXplPUxhcmdlCQlOb24tTGF5ZXJzX1dpbmRvd19Db2xzPTgwCisjCQkJCU5vbi1MYXllcnNfV2luZG93X1Jvd3M9NjAKKyMgT3RoZXIgU0VUVVAgbW9kZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHMuICBTb21lIGNhcGFiaWxpdGllcyBhc3N1bWUgYSBwcmludGVyIGF0dGFjaGVkIHRvIHRoZSBBdXggRUlBCisjIHBvcnQuICBUaGlzIHRlcm1jYXAgZGVzY3JpcHRpb24gaXMgZm9yIHRoZSBGaXhlZCBOb24tTGF5ZXJzIFdpbmRvdy4gIE5vCisjIGRlbGF5cyBhcmUgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgKGF0dDYzMDogYWRkZWQgPGljaDE+LCA8Ymxpbms+IGFuZCA8ZGltPiBmcm9tIGEgQlNEIHRlcm1jYXAgZmlsZSAtLSBlc3IpCithdHQ2MzB8QVQmVCA2MzAgd2luZG93aW5nIHRlcm1pbmFsLAorCU9UYnMsIGFtLCBkYSwgZGIsIG1pciwgbXNnciwgbnBjLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjNjAsIGxtIzAsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGltPVxFWzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLAorCWVsMT1cRVsxSywgaG9tZT1cRVtILCBodD1eSSwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsIGluZG49XEVbJXAxJWRTLCBpczI9XEVbbSwKKwlrYnM9XkgsIGtjYnQ9XEVbWiwga2Nscj1cRVsySiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sIGtlbnQ9Xk0sCisJa2YxMD1cRU5wLCBrZjExPVxFTnEsIGtmMTI9XEVOciwga2YxMz1cRU5zLCBrZjE0PVxFTnQsCisJa2YxNT1cRU51LCBrZjE2PVxFTnYsIGtmMTc9XEVOdywga2YxOD1cRU54LCBrZjE5PVxFTnksCisJa2YyMD1cRU56LCBrZjIxPVxFTnssIGtmMjI9XEVOfCwga2YyMz1cRU59LCBrZjI0PVxFTn4sCisJa2Y5PVxFTm8sIGtob21lPVxFW0gsIGtpY2gxPVxFW0AsIGtpbDE9XEVbTCwgbWM0PVxFWz80aSwKKwltYzU9XEVbPzVpLCBuZWw9Xk1eSiwgcGZ4PVxFWyVwMSVkOyVwMiVsJWRxJXAyJXMsIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcmluPVxFWyVwMSVkVCwgcm1pcj1cRVs0bCwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgcnMyPVxFYywgc2M9XEU3LAorCXNncj1cRVswJT8lcDIldDs0JTslPyVwMSVwMyV8JXA0JXwlcDUlfCV0OzclO20sCisJc2dyMD1cRVttLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorYXR0NjMwLTI0fDU2MzAtMjR8NTYzMERNRC0yNHw2MzBNVEctMjR8QVQmVCA2MzAgd2luZG93aW5nIHRlcm1pbmFsIDI0IGxpbmVzLAorCWxpbmVzIzI0LCB1c2U9YXR0NjMwLAorCisjIFRoaXMgaXMgdGhlIGF0dDcwMCBlbnRyeSBmb3IgNzAwIG5hdGl2ZSBlbXVsYXRpb24gb2YgdGhlIEFUJlQgNzAwCisjIHRlcm1pbmFsLiAgQ29tbWVudHMgYXJlIHJlbGF0aXZlIHRvIGNoYW5nZXMgZnJvbSB0aGUgNjA1VjIgZW50cnkgYW5kCisjIGF0dDczMCBvbiB3aGljaCB0aGUgZW50cnkgaXMgYmFzZWQuICBDb21tZW50cyBzaG93IHRoZSB0ZXJtaW5mbworIyBjYXBhYmlsaXR5IG5hbWUsIHRlcm1jYXAgbmFtZSwgYW5kIGRlc2NyaXB0aW9uLgorIworIyBIZXJlIGlzIHdoYXQncyBnb2luZyBvbm0gaW4gdGhlIGluaXQgc3RyaW5nOgorIwlFU0MgWyA1MDs0fAlzZXQgNzAwIG5hdGl2ZSBtb2RlIChyZWFsbHkgaXMgNjA1KQorIyB4CUVTQyBbIDU2O3BzfCAJc2V0IGxpbmVzIHRvIDI0OiBwcz0wOyA0MDogcHM9MSAocGx1cyBzdGF0dXMgbGluZSkKKyMJRVNDIFsgNTM7MHwJc2V0IEdlbkZsb3cgdG8gWG9uL1hvZmYKKyMJRVNDIFsgOCA7MHwJc2V0IENSIG9uIE5MCisjIHgJRVNDIFsgPyAzIGwvaAlzZXQgd29ya3NwYWNlOiA4MCBjb2wobCk7IDEzMiBjb2woaCkKKyMJRVNDIFsgPyA0IGwJanVtcCBzY3JvbGwKKyMJRVNDIFsgPyA1IGwvaAl2aWRlbzogbm9ybWFsIChsKTsgcmV2ZXJzZSAoaCkKKyMJRVNDIFsgPzEzIGwJTGFiZWxzIG9uCisjCUVTQyBbID8xNSBsCXBhcml0eSBjaGVjayA9IG5vCisjCUVTQyBbIDEzIGwJbW9uaXRvciBtb2RlIG9mZgorIwlFU0MgWyAyMCBsCUxGIG9uIE5MIChub3QgQ1JMRiBvbiBOTCkKKyMJRVNDIFsgPyA3IGgJYXV0b3dyYXAgb24KKyMJRVNDIFsgMTIgaAlsb2NhbCBlY2hvIG9mZgorIwlFU0MgKCBCCQlHTyA9IEFTQ0lJCisjCUVTQyApIDAJCUcxID0gU3BlY2lhbCBDaGFyICYgTGluZSBEcmF3aW5nCisjCUVTQyBbID8gMzEgbAlTZXQgNyBiaXQgY29udHJvbHMKKyMKKyMgTm90ZTogTW9zdCB0ZXJtaW5hbHMsIGVzcGVjaWFsbHkgdGhlIDYwMCBmYW1pbHkgdXNlIFJldmVyc2UgVmlkZW8gZm9yCisjIHN0YW5kb3V0IG1vZGUuICBERUMgYWxzbyB1c2VzIHJldmVyc2UgdmlkZW8uICBUaGUgVlQxMDAgdXNlcyBib2xkIGluIGFkZGl0aW9uCisjIEFzc3VtZSB3ZSBzaG91bGQgc3RheSB3aXRoIHJldmVyc2UgdmlkZW8gZm9yIDcwLi4gIEhvd2V2ZXIsIHRoZSA2MDVWMiBleGl0cworIyBzdGFuZG91dCBtb2RlIHdpdGggXEVbbSAoYWxsIG5vcm1hbCBhdHRyaWJ1dGVzKS4gIFRoZSA3MzAgZW50cnkgc2ltcGx5CisjIGV4aXRzIHJldmVyc2UgdmlkZW8gd2hpY2ggd291bGQgbGVhdmUgb3RoZXIgY3VycmVudCBhdHRyaWJ1dGVzIGludGFjdC4gIEl0CisjIHdhcyBhc3N1bWVkIHRoZSA3MzAgZW50cnkgdG8gYmUgbW9yZSBjb3JyZWN0IHNvIHJtc28gaGFzIGNoYW5nZWQuICBUaGUKKyMgNjA1VjIgaGFzIG5vIHNlcXVlbmNlcyB0byB0dXJuIGluZGl2aWR1YWwgYXR0cmlidXRlcyBvZmYsIHRodXMgaXRzIHNldHRpbmcKKyMgYW5kIHRoZSBybXNvL3Ntc28gc2V0dGluZ3MgZnJvbSB0aGUgNzMwLgorIworIyBOb3RlOiBGb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFib3ZlIGluIHJtc28gSSBjaGFuZ2VkIGV4aXQgdW5kZXItc2NvcmUgbW9kZQorIyB0byBzcGVjaWZpY2FsbHkgdHVybiBvZmYgdW5kZXJzY29yZSwgcmF0aGVyIHRoYW4gcmV0dXJuIHRvIGFsbCBub3JtYWwKKyMgYXR0cmlidXRlcworIworIyBOb3RlOiBUaGUgZm9sbG93aW5nIHBrZXlfeG1pdCBpcyB0YWtlbiBmcm9tIHRoZSA2MDVWMiB3aGljaCBjb250YWluZWQgdGhlCisjIGNhcGFiaWxpdHkgYXMgcGZ4bC4gIEl0IHdhcyBjaGFuZ2VkIGhlcmUgdG8gcGZ4IHNpbmNlIHBmeGwKKyMgd2lsbCBvbmx5IGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IHdpdGggVW5peCA0LjAgdGljLiAgQWxzbyBub3RlIHRoYXQgcGZ4IG9ubHkKKyMgYWxsb3dzIHN0cmluZ3MgdG8gYmUgcGFyYW1ldGVycyBhbmQgbGFiZWwgdmFsdWVzIG11c3QgYmUgcHJvZ3JhbW1lZCBhcworIyBjb25zdGFudCBzdHJpbmdzLiAgU3VwcG9zZWRseSB0aGUgcGZ4bCBvZiBWZXJzaW9uIDQuMCBhbGxvd3MgYm90aCBsYWJlbHMKKyMgYW5kIHN0cmluZ3MgdG8gYmUgcGFyYW1ldGVycy4gIFRoZSA2MDVWMiBwZnggZW50cnkgc2hvdWxkIGJlIGV4YW1pbmVkIGxhdGVyCisjIGluIHRoaXMgcmVnYXJkLiBGb3IgcmVmZXJlbmNlIHRoZSA3MzAgcGZ4bCBlbnRyeSBpcyBzaG93biBoZXJlIGZvciBjb21wYXJpc29uCisjIDczMCBwZnggZW50cnk6CisjICAgICBwZnhsPVxFWyU/JXAxJXsyNX0lPCV0JXAxJWUlcDElezI0fSUtJTslZDslcDIlbCUwMmQlPyVwMSV7MjV9JTwldHFcc1xzXHMKKyMgU1lTXHNcc1xzXHNcc0YlcDElOi0yZFxzXHMlZTswOzNxJTslcDIlcywKKyMKKyMgKGZvciA0LjAgdGljKQorIyAgICAgcGZ4bD1cRVslcDElZDslcDIlbCUwMmRxJT8lcDElezl9JTwldCAgIEYlcDElMWQgICAgICAgICAgICU7JXAyJXMsCisjCisjIChmb3IgPDQuMCB0aWMpCisjICAgICBwZng9XEVbJXAxJWQ7JXAyJWwlMDJkcSU/JXAxJXs5fSU8JXQgICBGJXAxJTFkICAgICAgICAgICAlOyVwMiVzLAorIworIyBGcm9tIHRoZSBBVCZUIDcwNSBNdWx0aS10YXNraW5nIHRlcm1pbmFsIHVzZXIncyBndWlkZSBQYWdlIDgtOCw4LTkKKyMKKyMgUG9ydDEgSW50ZXJmYWNlCisjCisjIG1vZHVsYXIgMTAgcGluIENvbm5lY3RvcgorIyBMZWZ0IHNpZGUgICAgICAgUmlnaHQgc2lkZQorIyBQaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKKyMKKyMgICAgICAgIEtleSAobm90Y2gpIGF0IGJvdHRvbQorIworIyBQaW4gICAgMSBEU1IKKyMgICAgICAgIDMgRENECisjICAgICAgICA0IERUUgorIyAgICAgICAgNSBTaWcgR3JvdW5kCisjICAgICAgICA2IFJECisjICAgICAgICA3IFNECisjICAgICAgICA4IENUUworIyAgICAgICAgOSBSVFMKKyMgICAgICAgIDEwIEZyYW1lIEdyb3VuZAorIworIyBUaGUgbWFudWFsIGlzIDE4OSBwYWdlcyBhbmQgaXMgbG9hZGVkIHdpdGggZGV0YWlscyBhYm91dCB0aGUgZXNjYXBlIGNvZGVzLAorIyBldGMuLi4uLiBBdmFpbGFibGUgZnJvbSBBVCZUIENJQyA4MDAtNDMyLTY2MDAuLi4KKyMgYXNrIGZvciBEb2N1bWVudCBudW1iZXIgOTk5LTMwMC02NjAuLgorIworYXR0NzAwfEFUJlQgNzAwIDI0eDgwIGNvbHVtbiBkaXNwbGF5IHcvMTAya2V5IGtleWJvYXJkLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzIsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoXEVbPzEybCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8xMjsyNWgsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwllbmFjcz1cRShCXEUpMCwgZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBmbG49NFwsNCwKKwlmc2w9XEU4LCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsIGludmlzPVxFWzhtLAorCWlzMj1cRVs1MDs0fFxFWzUzOzB8XEVbODswfFxFWz80OzEzOzE1bFxFWzEzOzIwbFxFWz83aFxFWzEyaFxFKEJcRSkwXEVbPzMxbFxFWzBtXDAxNywKKwlpczM9XEUoQlxFKTAsIGtMRlQ9XEVbIEEsIGtSSVQ9XEVbIEAsIGticz1eSCwga2NidD1cRVtaLAorCWtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbUCwga2RsMT1cRVtNLCBrZW5kPVxFWzI0OzFILCBrZjE9XEVPYywga2YxMD1cRU5wLAorCWtmMTE9XEVOcSwga2YxMj1cRU5yLCBrZjEzPVxFTnMsIGtmMTQ9XEVOdCwga2YxNT1cRU9DLAorCWtmMTY9XEVPRCwga2YxNz1cRU9FLCBrZjE4PVxFT0YsIGtmMTk9XEVPRywga2YyPVxFT2QsCisJa2YyMD1cRU9ILCBrZjIxPVxFT0ksIGtmMjI9XEVPSiwga2YyMz1cRU5PLCBrZjI0PVxFTlAsCisJa2YyNT1cRU5RLCBrZjI2PVxFTlIsIGtmMjc9XEVOUywga2YyOD1cRU5ULCBrZjI5PVxFT3EsCisJa2YzPVxFT2UsIGtmMzA9XEVPciwga2YzMT1cRU9zLCBrZjMyPVxFT3QsIGtmMzM9XEVPdSwKKwlrZjM0PVxFT3YsIGtmMzU9XEVPdywga2YzNj1cRU94LCBrZjM3PVxFT3ksIGtmMzg9XEVPdSwKKwlrZjM5PVxFT3YsIGtmND1cRU9mLCBrZjQwPVxFT2wsIGtmNDE9XEVPcSwga2Y0Mj1cRU9yLAorCWtmNDM9XEVPcywga2Y0ND1cRU9wLCBrZjQ1PVxFT24sIGtmNDY9XEVPTSwga2Y1PVxFT2csCisJa2Y2PVxFT2gsIGtmNz1cRU9pLCBrZjg9XEVPaiwga2Y5PVxFTm8sIGtob21lPVxFW0gsCisJa2ljaDE9XEVbQCwga2lsMT1cRVtMLCBrbnA9XEVbVSwga3BwPVxFW1YsIGxsPVxFWzI0SCwKKwltYzA9XEVbaSwgbWM0PVxFWz80aSwgbWM1PVxFWz81aSwgbmVsPVxFRSwKKwlwZng9XEVbJXAxJWQ7JXAyJWwlMDJkcSU/JXAxJXs5fSU8JXQgICBGJXAxJTFkICAgICAgICAgICAlOyVwMiVzLAorCXBsbj1cRVslcDElZDswOzA7MHElcDIlOi0xNi4xNnMsIHJjPVxFOCwKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWlyPVxFWzRsLCBybWxuPVxFWzJwLCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcm14b249XEVbNTM7M3wsIHJzMT1cRWNcRVs/Mzs1bFxFWzU2OzB8LCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXA1JXQ7MiU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWlyPVxFWzRoLCBzbWxuPVxFW3AsIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgc214b249XEVbNTM7MHwsIHRiYz1cRVszZywKKwl0c2w9XEU3XEVbOTk7JWklcDElZHgsCisKKyMgVGhpcyBlbnRyeSB3YXMgbW9kaWZpZWQgMy8xMy85MCBieSBKV0UuCisjIGZpeGVzIGluY2x1ZGUgYWRkaXRpb25zIG9mIDxlbmFjcz4sIGNvcnJlY3RpbmcgPHJlcD4sIGFuZCBtb2RpZmljYXRpb24KKyMgb2YgPGtIT00+LiAgKFNlZSBjb21tZW50cyBiZWxvdykKKyMgYXR0NzMwIGhhcyBzdGF0dXMgbGluZSBvZiA4MCBjaGFycworIyBUaGVzZSB3ZXJlIGNvbW1lbnRlZCBvdXQ6IDxpbmRuPVxFWyVwMSVkUz4sIDxyaW49XEVbJXAxJWRUPiwKKyMgdGhlIDxrZjI1PiBhbmQgdXAga2V5cyBhcmUgdXNlZCBmb3Igc2hpZnRlZCBzeXN0ZW0gRmtleXMKKyMgTk9URTogSldFIDMvMTMvOTAgVGhlIDk4IGtleSBrZXlib2FyZCB0cmFuc2xhdGlvbiBmb3Igc2hpZnQvSE9NRSBpcworIyBjdXJyZW50bHkgdGhlIHNhbWUgYXMgPGtob21lPiAodW5zaGlmdGVkIEhPTUUgb3IgXEVbSCkuICBPbiB0aGUgMTAyLCAxMDIrMQorIyBhbmQgMTIyIGtleSBrZXlib2FyZHMsIHRoZSA3MzAncyB0cmFuc2xhdGlvbiBpcyBcRVsySi4gIEZvciBjb25zaXN0ZW5jeQorIyA8a0hPTT4gaGFzIGJlZW4gY29tbWVudGVkIG91dC4gIFRoZSB1c2VyIGNhbiB1bmNvbW1lbnQgPGtIT00+IGlmIHVzaW5nIHRoZQorIyAxMDIsIDEwMisxLCBvciAxMjIga2V5IGtleWJvYXJkcworIyAgICAgICBrSE9NPVxFWzJKLAorIyAoYXR0NzMwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2F0dDczMHxBVCZUIDczMCB3aW5kb3dpbmcgdGVybWluYWwsCisJYW0sIGRhLCBkYiwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIG5wYywgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzIsIGxpbmVzIzYwLCBsbSMwLCBsdyM4LCBubGFiIzI0LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbPzI1aFxFWz8xMmwsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MTI7MjVoLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZW5hY3M9XEUoQlxFKTAsIGZsYXNoPVxFWz81aCQ8MjAwPlxFWz81bCwgZnNsPVxFOCwKKwlob21lPVxFW0gsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLAorCWluZD1cRUQsIGludmlzPVxFWzhtLAorCWlzMT1cRVs4OzB8XEVbPzM7NDs1OzEzOzE1bFxFWzEzOzIwbFxFWz83aFxFWzEyaFxFKEJcRSlCLAorCWlzMj1cRVttXDAxNywgaXMzPVxFKEJcRSkwLCBrTEZUPVxFWyBALCBrUklUPVxFWyBBLCBrYnM9XkgsCisJa2NidD1cRVtaLCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9jLCBrZjEwPVxFTnAsIGtmMTE9XEVOcSwga2YxMj1cRU5yLAorCWtmMTM9XEVOcywga2YxND1cRU50LCBrZjE1PVxFTnUsIGtmMTY9XEVOdiwga2YxNz1cRU53LAorCWtmMTg9XEVOeCwga2YxOT1cRU55LCBrZjI9XEVPZCwga2YyMD1cRU56LCBrZjIxPVxFTnssCisJa2YyMj1cRU58LCBrZjIzPVxFTn0sIGtmMjQ9XEVOfiwga2YyNT1cRU9DLCBrZjI2PVxFT0QsCisJa2YyNz1cRU9FLCBrZjI4PVxFT0YsIGtmMjk9XEVPRywga2YzPVxFT2UsIGtmMzA9XEVPSCwKKwlrZjMxPVxFT0ksIGtmMzI9XEVPSiwga2YzMz1cRU5PLCBrZjM0PVxFTlAsIGtmMzU9XEVOUSwKKwlrZjM2PVxFTlIsIGtmMzc9XEVOUywga2YzOD1cRU5ULCBrZjM5PVxFT1UsIGtmND1cRU9mLAorCWtmNDA9XEVPViwga2Y0MT1cRU9XLCBrZjQyPVxFT1gsIGtmNDM9XEVPWSwga2Y0ND1cRU9aLAorCWtmNDU9XEVPWywga2Y0Nj1cRU9ccywga2Y0Nz1cRU9dLCBrZjQ4PVxFT1xeLCBrZjU9XEVPZywKKwlrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLCBrZjk9XEVObywga2hvbWU9XEVbSCwKKwlraWNoMT1cRVtALCBraWwxPVxFW0wsIGtpbmQ9XEVbUywga3JpPVxFW1QsCisJbWMwPVxFWz8xOWhcRVswaSwgbWM0PVxFWz80aSwgbWM1PVxFWz81aSwgbmVsPVxFRSwKKwlwZng9XEVbJT8lcDElezI1fSU8JXQlcDElZSVwMSV7MjR9JS0lOyVkOyVwMiVsJTAyZCU/JXAxJXsyNX0lPCV0cSAgIFNZUyAgICAgRiVwMSU6LTJkICAlZTswOzNxJTslcDIlcywKKwlwZnhsPVxFWyVwMSVkOyVwMiVsJTAyZDswOzBxJXAzJTotMTYuMTZzJXAyJXMsCisJcGxuPVxFWyVwMSVkOzA7MDswcSVwMiU6LTE2LjE2cywgcmM9XEU4LAorCXJlcD0lcDElY1xFWyVwMiV7MX0lLSVkYiwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWxuPVxFWz8xM2gsIHJtc289XEVbMjdtLAorCXJtdWw9XEVbMjRtLCBybXhvbj1cRVs/MjFsLCByczI9XEVjXEVbPzNsLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXA1JXQ7MiU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWxuPVxFWz8xM2wsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHNteG9uPVxFWz8yMWgsCisJc3dpZG09XEUjNiwgdHNsPVxFN1xFWzslaSVwMSVkeCwKK2F0dDczMC00MXw3MzBNVEctNDF8QVQmVCA3MzAtNDEgd2luZG93aW5nIHRlcm1pbmFsIFZlcnNpb24sCisJbGluZXMjNDEsIHVzZT1hdHQ3MzAsCithdHQ3MzAtMjR8NzMwTVRHLTI0fEFUJlQgNzMwLTI0IHdpbmRvd2luZyB0ZXJtaW5hbCBWZXJzaW9uLAorCWxpbmVzIzI0LCB1c2U9YXR0NzMwLAorYXR0NzMwcnw3MzBNVEdyfEFUJlQgNzMwIHJldiB2aWRlbyB3aW5kb3dpbmcgdGVybWluYWwgVmVyc2lvbiwKKwlmbGFzaD1cRVs/NWwkPDIwMD5cRVs/NWgsCisJaXMxPVxFWzg7MHxcRVs/Mzs0OzEzOzE1bFxFWz81aFxFWzEzOzIwbFxFWz83aFxFWzEyaFxFKEJcRSlCLAorCXVzZT1hdHQ3MzAsCithdHQ3MzByLTQxfDczME1URy00MXJ8QVQmVCA3MzByLTQxIHJldiB2aWRlbyB3aW5kb3dpbmcgdGVybWluYWwgVmVyc2lvbiwKKwlsaW5lcyM0MSwgdXNlPWF0dDczMHIsCithdHQ3MzByLTI0fDczME1UR3ItMjR8QVQmVCA3MzByLTI0IHJldiB2aWRlbyB3aW5kb3dpbmcgdGVybWluYWwgVmVyc2lvbiwKKwlsaW5lcyMyNCwgdXNlPWF0dDczMHIsCisKKyMgVGhlIGZvbGxvd2luZyByZXByZXNlbnRzIHRoZSBzY3JlZW4gbGF5b3V0IGFsb25nIHdpdGggdGhlIGFzc29jaWF0ZWQKKyMgYmV6ZWwgYnV0dG9ucyBmb3IgdGhlIDU0MzAvcHQ1MDUgdGVybWluYWwuIFRoZSAia2YiIGRlc2lnbmF0aW9ucyBkbworIyBub3QgYXBwZWFyIG9uIHRoZSBzY3JlZW4gYnV0IGFyZSBzaG93biB0byByZWZlcmVuY2UgdGhlIGJlemVsIGJ1dHRvbnMuCisjIFRoZSAiQ01EIiwgIk1BSUwiLCBhbmQgIlJFRFJBVyIgYnV0dG9ucyBhcmUgc2hvd24gaW4gdGhlaXIgYXBwcm94aW1hdGUKKyMgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHNjcmVlbi4KKyMKKyMKKyMKKyMgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgWFhYWCB8IGtmMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZjI0IHwgWFhYWAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyBYWFhYIHwga2YxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmMjMgfCBYWFhYCisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjIFhYWFggfCBrZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2YyMiB8IFhYWFgKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgWFhYWCB8IGtmMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZjIxIHwgWFhYWAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyBYWFhYIHwga2Y0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmMjAgfCBYWFhYCisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjIFhYWFggfCBrZjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2YxOSB8IFhYWFgKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgWFhYWCB8IGtmNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZjE4IHwgWFhYWAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyBYWFhYIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYCisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjCisjICAgICAgICAgIFhYWFggIFhYWFggIFhYWFggIFhYWFggIFhYWFggIFhYWFggIFhYWFggIFhYWFggIFhYWFggIFhYWFgKKyMKKyMgTm90ZTogWFhYWCByZXByZXNlbnRzIHRoZSBzY3JlZW4gYnV0dG9ucworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTUQgICBSRURSQVcKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFJTAorIworIyB2ZXJzaW9uIDEgbm90ZToKKyMJVGhlIGNoYXJhY3RlciBzdHJpbmcgc2VudCBieSBrZXkgJ2tmMjYnIG1heSBiZSB1c2VyIHByb2dyYW1tYWJsZQorIyAgICAgICB0byBzZW5kIGVpdGhlciBcRVsxNnMsIG9yIFxFWzI2cy4KKyMgICAgICAgVGhlIGNoYXJhY3RlciBzdHJpbmcgc2VudCBieSBrZXkgJ2tyZnInIG1heSBiZSB1c2VyIHByb2dyYW1tYWJsZQorIyAgICAgICB0byBzZW5kIGVpdGhlciBcRVsxN3MsIG9yIFxFWzI3cy4KKyMKKyMgRGVwcmVzc2lvbiBvZiB0aGUgIkNNRCIga2V5IHNlbmRzICAgIFxFISAgICAoa2NtZCkKKyMgRGVwcmVzc2lvbiBvZiB0aGUgIk1BSUwiIGtleSBzZW5kcyAgIFxFWzI2cyAoa2YyNikKKyMgIlJFRFJBVyIgc2FtZSBhcyAiUkVGUkVTSCIgKGtyZnIpCisjCisjICJrZiIgZnVuY3Rpb25zIGFkZHMgY2FycmlhZ2UgcmV0dXJuIHRvIG91dHB1dCBzdHJpbmcgaWYgdGVybWluYWwgaXMgaW4KKyMgJ25ldyBsaW5lJyBtb2RlLgorIworIyBUaGUgZm9sbG93aW5nIGFyZSBmdW5jdGlvbnMgbm90IGNvdmVyZWQgaW4gdGhlIHRhYmxlIGFib3ZlOgorIworIyAgICAgICBTZXQga2V5Ym9hcmQgY2hhcmFjdGVyIChTS0MpOiBcRVBuMTtQbjJ3CisjICAgICAgICAgICAgICAgICAgICAgICBQbjE9IDAgQmFjayBTcGFjZSBrZXkKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMT0gMSBCcmVhayBrZXkKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMj0gICBQcm9ncmFtIGNoYXIgKGhleCkKKyMKKyMgICAgICAgU2NyZWVuIERlZmluaXRpb24gKFNERik6IFxFW1BuMTtQbjI7UG4zO1BuNDtQbjV0CisjICAgICAgICAgICAgICAgICAgICAgICBQbjE9ICAgICBXaW5kb3cgbnVtYmVyICgxLTM5KQorIyAgICAgICAgICAgICAgICAgICAgICAgUG4yLVBuNT0gWTtYO1k7WCBjb29yZGluYXRlcworIworIyAgICAgICBTY3JlZW4gU2VsZWN0aW9uIChTU0wpOiBcRVtQbnUKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSBXaW5kb3cgbnVtYmVyCisjCisjICAgICAgIFNldCBUZXJtaW5hbCBNb2RlcyAoU00pOiBcRVtQbmgKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSAzIEdyYXBoaWNzIG1vZGUKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSA+IEN1cnNvciBibGluaworIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDwgRW50ZXIgbmV3IGxpbmUgbW9kZQorIyAgICAgICAgICAgICAgICAgICAgICAgUG49ID0gRW50ZXIgcmV2ZXJzZSBpbnNlcnQvcmVwbGFjZSBtb2RlCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPyBFbnRlciBubyBzY3JvbGwgbW9kZQorIworIyAgICAgICBSZXNldCBUZXJtaW5hbCBNb2RlIChSTSk6IFxFW1BubAorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDMgRXhpdCBncmFwaGljcyBtb2RlCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPiBFeGl0IGN1cnNvciBibGluaworIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDwgRXhpdCBuZXcgbGluZSBtb2RlCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPSBFeGl0IHJldmVyc2UgaW5zZXJ0L3JlcGxhY2UgbW9kZQorIyAgICAgICAgICAgICAgICAgICAgICAgUG49ID8gRXhpdCBubyBzY3JvbGwgbW9kZQorIworIyAgICAgICBTY3JlZW4gU3RhdHVzIFJlcG9ydCAoU1NSKTogXEVbUG5wCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gMCBSZXF1ZXN0IGN1cnJlbnQgd2luZG93IG51bWJlcgorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDEgUmVxdWVzdCBjdXJyZW50IHdpbmRvdyBkaW1lbnNpb25zCisjCisjICAgICAgIERldmljZSBTdGF0dXMgUmVwb3J0IChEU1IpOiBcRVs2biAgICBSZXF1ZXN0IGN1cnNvciBwb3NpdGlvbgorIworIyAgICAgICBDYWxsIFN0YXR1cyBSZXBvcnQgKENTUik6IFxFW1BudgorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDAgQ2FsbCBmYWlsZWQKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSAxIENhbGwgc3VjY2Vzc2Z1bAorIworIyAgICAgICBUcmFuc3BhcmVudCBCdXR0b24gU3RyaW5nIChUQlMpOiBcRVtQbjE7UG4yO1BuMzt7c3RyaW5nCisjICAgICAgICAgICAgICAgICAgICAgICBQbjE9IEJ1dHRvbiBudW1iZXIgdG8gYmUgbG9hZGVkCisjICAgICAgICAgICAgICAgICAgICAgICBQbjI9IENoYXJhY3RlciBjb3VudCBvZiAic3RyaW5nIgorIyAgICAgICAgICAgICAgICAgICAgICAgUG4zPSBLZXkgbW9kZSBiZWluZyBsb2FkZWQ6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA9IFVuc2hpZnRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPSBTaGlmdGVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI9IENvbnRyb2wKKyMgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZz0gVGV4dCBzdHJpbmcgKDE1IGNoYXJzIG1heCkKKyMKKyMgICAgICAgU2NyZWVuIE51bWJlciBSZXBvcnQgKFNOUik6IFxFW1BucAorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IFNjcmVlbiBudW1iZXIKKyMKKyMgICAgICAgU2NyZWVuIERpbWVuc2lvbiBSZXBvcnQgKFNEUik6IFxFW1BuMTtQbjJyCisjICAgICAgICAgICAgICAgICAgICAgICBQbjE9IE51bWJlciBvZiByb3dzIGF2YWlsYWJsZSBpbiB3aW5kb3cKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMj0gTnVtYmVyIG9mIGNvbHVtbnMgYXZhaWxhYmxlIGluIHdpbmRvdworIworIyAgICAgICBDdXJzb3IgUG9zaXRpb24gUmVwb3J0IChDUFIpOiBcRVtQbjE7UG4yUgorIyAgICAgICAgICAgICAgICAgICAgICAgUG4xPSAiWSIgUG9zaXRpb24gb2YgY3Vyc29yCisjICAgICAgICAgICAgICAgICAgICAgICBQbjI9ICJYIiBQb3NpdGlvbiBvZiBjdXJzb3IKKyMKKyMgICAgICAgUmVxdWVzdCBBbnN3ZXIgQmFjayAoUkFCKTogXEVbYworIworIyAgICAgICBBbnN3ZXIgQmFjayBSZXNwb25zZSAoQUJSKTogXEVbPzsqOzMwO1ZTVgorIyAgICAgICAgICAgICAgICAgICAgICAgKj0gIDAgTm8gcHJpbnRlciBhdmFpbGFibGUKKyMgICAgICAgICAgICAgICAgICAgICAgICo9ICAyIFByaW50ZXIgYXZhaWxhYmxlCisjICAgICAgICAgICAgICAgICAgICAgICBWPSAgU29mdHdhcmUgdmVyc2lvbiBudW1iZXIKKyMgICAgICAgICAgICAgICAgICAgICAgIFNWPSBTb2Z0d2FyZSBzdWIgdmVyc2lvbiBudW1iZXIKKyMJKHByaW50ZXItYXZhaWxhYmxlIGZpZWxkIG5vdCBkb2N1bWVudGVkIGluIHYxKQorIworIyAgICAgICBTY3JlZW4gQWxpZ25tZW50IEFpZDogXEVuCisjCisjICAgICAgIEJlbGwgKGxvd2VyIHBpdGNoKTogXEVbeAorIworIyAgICAgICBEaWFsIFBob25lIE51bWJlcjogXEVQZHN0cmluZ1wKKyMgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZz0gUGhvbmUgbnVtYmVyIHRvIGJlIGRpYWxlZAorIworIyAgICAgICBTZXQgUGhvbmUgTGFiZWxzOiBcRVBwc3RyaW5nXAorIyAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nPSBMYWJlbCBmb3IgcGhvbmUgYnV0dG9ucworIworIyAgICAgICBTZXQgQ2xvY2s6IFxFUGNob3VyO21pbnV0ZTtzZWNvbmRcCisjCisjICAgICAgIFBvc2l0aW9uIENsb2NrOiBcRVBzWTtYXAorIyAgICAgICAgICAgICAgICAgICAgICAgWT0gIlkiIGNvb3JkaW5hdGUKKyMgICAgICAgICAgICAgICAgICAgICAgIFg9ICJYIiBjb29yZGluYXRlCisjCisjICAgICAgIERlbGV0ZSBDbG9jazogXEVwclwKKyMKKyMgICAgICAgUHJvZ3JhbW1pbmcgVGhlIEZ1bmN0aW9uIEJ1dHRvbnM6IFxFUGZQbjtzdHJpbmdcCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gQnV0dG9uIG51bWJlciAoMDAtMDYsIDE4LTI0KQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtmMDAta2YwNiwga2YxOC1rZjI0KQorIyAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nPSBUZXh0IHRvIHNlbnQgb24gYnV0dG9uIGRlcHJlc3Npb24KKyMKKyMgVGhlIGZvbGxvd2luZyBpbiB2ZXJzaW9uIDIgb25seToKKyMKKyMgICAgICAgUmVxdWVzdCBGb3IgTG9jYWwgRGlyZWN0b3J5IERhdGE6IFxFUHAxMjtcCisjCisjICAgICAgIExvY2FsIERpcmVjdG9yeSBEYXRhIHRvIGhvc3Q6IFxFUHAxMTtMT0NBTC4uLkRJUkVDVE9SWS4uLkRBVEFcCisjCisjCVJlcXVlc3QgZm9yIExvY2FsIERpcmVjdG9yeSBEYXRhIGluIHByaW50IGZvcm1hdDogXEVQcDEzO1wKKyMKKyMJRW5hYmxlICdQcnQgb24gTGluZScgbW9kZTogXDAyMiAoREMyKQorIworIwlEaXNhYmxlICdQcnQgb24gTGluZScgbW9kZTogXDAyNCAoREM0KQorIworCisjIDA1LUF1Zy04NjoKKyMgVGhlIGZvbGxvd2luZyBUZXJtaW5mbyBlbnRyeSBkZXNjcmliZXMgZnVuY3Rpb25zIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkKKyMgdGhlIEFUJlQgNTQzMC9wdDUwNSB0ZXJtaW5hbCBzb2Z0d2FyZSB2ZXJzaW9uIDIgYW5kIGxhdGVyLgorYXR0NTA1fHB0NTA1fGF0dDU0MzB8Z3M1NDMwfEFUJlQgUGVyc29uYWwgVGVybWluYWwgNTA1IG9yIDU0MzAgR0VUU0VUIHRlcm1pbmFsLAorCWFtLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVsySlxFW0gsCisJY25vcm09XEVbPmwsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz5oLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbMEosIGVsPVxFWzBLLCBlbDE9XEVbMkssIGhvbWU9XEVbSCwgaHQ9XkksCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWlzMT1cRVByXFxFWzB1XEVbMkpcRVswOzBIXEVbbVxFWzNsXEVbPGxcRVs0bFxFWz5sXEVbPWxcRVs/bCwKKwlrYnM9XkgsIGtjbWQ9XEUhLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMD1cRVswMHMsIGtmMT1cRVswMXMsIGtmMTg9XEVbMThzLAorCWtmMTk9XEVbMTlzLCBrZjI9XEVbMDJzLCBrZjIwPVxFWzIwcywga2YyMT1cRVsyMXMsCisJa2YyMj1cRVsyMnMsIGtmMjM9XEVbMjNzLCBrZjI0PVxFWzI0cywga2YyNj1cRVsyNnMsCisJa2YzPVxFWzAzcywga2Y0PVxFWzA0cywga2Y1PVxFWzA1cywga2Y2PVxFWzA2cywKKwlrcmZyPVxFWzI3cywgbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJtYWNzPVxFWzEwbSwgcm1hbT1cRVsxMTsxaiwgcm1pcj1cRVs0bCwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgcnMxPVxFYywgc2M9XEU3LCBzZ3IwPVxFW20sIHNtYWNzPVxFWzExbSwKKwlzbWFtPVxFWzExOzBqLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzFtLCBzbXVsPVxFWzRtLAorCisjIFRoZSBmb2xsb3dpbmcgVGVybWluZm8gZW50cnkgZGVzY3JpYmVzIGZ1bmN0aW9ucyB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5CisjIHRoZSBBVCZUIDU0MzAvcHQ1MDUgdGVybWluYWwgc29mdHdhcmUgdmVyc2lvbiAxLgorYXR0NTA1LTI0fHB0NTA1LTI0fGdzNTQzMC0yNHxBVCZUIFBUNTA1IG9yIDU0MzAgR0VUU0VUIHZlcnNpb24gMSAyNCBsaW5lcywKKwlsaW5lcyMyNCwKKwltYzRALCBtYzVALCByY0AsIHJtYW1ALCBzY0AsIHNtYW1ALCB1c2U9YXR0NTA1LAordHQ1MDUtMjJ8cHQ1MDUtMjJ8Z3M1NDMwLTIyfEFUJlQgUFQ1MDUgb3IgNTQzMCBHRVRTRVQgdmVyc2lvbiAxIDIyIGxpbmVzLAorCWxpbmVzIzIyLCB1c2U9YXR0NTA1LAorIworIyMjIyAtLS0tLS0tLS0tLS0tLS0tLS0gVEVSTUlORk8gRklMRSBDQU4gQkUgU1BMSVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBjdXQgbWFyayBoZWxwcyBtYWtlIGxpZmUgbGVzcyBwYWluZnVsIGZvciBwZW9wbGUgcnVubmluZyBuY3Vyc2VzIHRpYworIyBvbiBtYWNoaW5lcyB3aXRoIHJlbGF0aXZlbHkgbGl0dGxlIFJBTS4gIFRoZSBmaWxlIGNhbiBiZSBicm9rZW4gaW4gaGFsZiBoZXJlCisjIGNsZWFubHkgYW5kIGNvbXBpbGVkIGluIHNlY3Rpb25zIC0tIG5vIGB1c2UnIHJlZmVyZW5jZXMgY3Jvc3MgdGhpcyBjdXQKKyMgZ29pbmcgZm9yd2FyZC4KKyMKKworIyMjIyBBbXBleCAoRGlhbG9ndWUpCisjCisjIFllcywgdGhlc2UgYXJlIHRoZSBzYW1lIHBlb3BsZSB3aG8gYXJlIGJldHRlci1rbm93biBmb3IgbWFraW5nIGF1ZGlvLSBhbmQKKyMgdmlkZW90YXBlLiAgSSdtIHRvbGQgdGhleSBhcmUgbG9jYXRlZCBpbiBSZWR3b29kIENpdHksIENBLgorIworCisjIEZyb206IDxjYm9zZyF1Y2J2YXghU1JDOmdlb3JnZT4gRnJpIFNlcCAxMSAyMjozODozMiAxOTgxCisjIChhbXBleDgwOiBzb21lIGNhcGFiaWxpdGllcyBtZXJnZWQgaW4gZnJvbSBTQ08ncyBlbnRyeSAtLSBlc3IpCithbXBleDgwfGE4MHxkODB8ZGlhbG9ndWV8ZGlhbG9ndWU4MHxhbXBleCBkaWFsb2d1ZSA4MCwKKwlPVGJzLCBhbSwgYncsIHVsLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XEUqJDw3NT4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVcsIGRsMT1cRVIkPDUqPiwgZWQ9XEV5LCBlbD1cRXQsIGh0PV5JLCBodHM9XEUxLAorCWljaDE9XEVRLCBpbDE9XEVFJDw1Kj4sIGluZD1eSiwgaXMyPVxFQSwgcm1zbz1cRWssIHJtdWw9XEVtLAorCXNtc289XEVqLCBzbXVsPVxFbCwgdGJjPVxFMywKKyMgVGhpcyBlbnRyeSB3YXMgZnJvbSBzb21lYm9keSBhbm9ueW1vdXMsIFR1ZSBBdWcgIDkgMjA6MTE6MzcgMTk4Mywgd2hvIHdyb3RlOgorYW1wZXgxNzV8YW1wZXggZDE3NSwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFKywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEV5LCBlbD1cRXQsIGhvbWU9Xl4sIGljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosCisJaXMyPVxFWFxFQVxFRiwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssCisJa2RjaDE9XEVXLCBrZGwxPVxFUiwga2hvbWU9Xl4sIGtpY2gxPVxFUSwga2lsMT1cRUUsIGxsPV5eXkssCisJcm1jdXA9XEVGLCBybXNvPVxFaywgcm11bD1cRW0sIHNtY3VwPVxFTiwgc21zbz1cRWosIHNtdWw9XEVsLAorIyBObyBiYWNrc3BhY2Uga2V5IGluIHRoZSBtYWluIFFXRVJUWSBjbHVzdGVyLiBGb3J0dW5hdGVseSwgaXQgaGFzIGEKKyMgTkVXTElORS9QQUdFIGtleSBqdXN0IGFib3ZlIFJFVFVSTiB0aGF0IHNlbmRzIGEgc3RyYW5nZSBzaW5nbGUtY2hhcmFjdGVyCisjIGNvZGUuICBHaXZlbiBhIHN1aXRhYmxlIFVuaXggKG9uZSB0aGF0IGxldHMgeW91IHNldCBhbiBlY2hvLWVyYXNlLWFzLUJTLVNQLUJTCisjIG1vZGUpLCB0aGlzIGtleSBjYW4gYmUgdXNlZCBhcyB0aGUgZXJhc2Uga2V5OyBJIGZpbmQgSSBsaWtlIHRoaXMuIEJlY2F1c2UKKyMgc29tZSBwZW9wbGUgYW5kIHNvbWUgc3lzdGVtcyBtYXkgbm90LCB0aGVyZSBpcyBhbm90aGVyIHRlcm1jYXAgKCJhbXBleDE3NSIpCisjIHRoYXQgc3VwcHJlc3NlcyB0aGlzIGxpdHRsZSBlY2NlbnRyaWNpdHkgYnkgb21pdHRpbmcgdGhlIHJlbGV2YW50IGNhcGFiaWxpdHkuCithbXBleDE3NS1ifGFtcGV4IGQxNzUgdXNpbmcgbGVmdCBhcnJvdyBmb3IgZXJhc2UsCisJa2JzPV5fLCB1c2U9YW1wZXgxNzUsCisjIEZyb206IFJpY2hhcmQgQmFzY292ZSA8YXRkIWRzZCFyY2JAdWNidmF4LmJlcmtlbGV5LmVkdT4KKyMgKGFtcGV4MjEwOiByZW1vdmVkIG9ic29sZXRlICI6a24jMTA6IiAtLSBlc3IpCithbXBleDIxMHxhMjEwfGFtcGV4IGEyMTAsCisJT1RicywgYW0sIGhzLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwljYnQ9XEVJLCBjbGVhcj1cRSosIGN1YjE9XkgsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEV5LCBlbD1cRXQsIGZsYXNoPVxFVVxFWFxFVVxFWFxFVVxFWFxFVVxFWCwKKwlmc2w9XEUuMiwgaG9tZT1eXiwgaHQ9XkksIGljaDE9XEVRLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZCwgaWwxPVxFRSwgaW52aXNALAorCWlzMj1cRUNcRXVcRSdcRShcRWxcRUFcRSVcRXtcRS4yXEVHMFxFZFxFbiwga2N1YjE9XkgsCisJa2N1ZDE9XlYsIGtjdWYxPV5MLCBrY3V1MT1eSywga2YwPV5BMFxyLCBrZjE9XkExXHIsCisJa2YyPV5BMlxyLCBrZjM9XkEzXHIsIGtmND1eQTRcciwga2Y1PV5BNVxyLCBrZjY9XkE2XHIsCisJa2Y3PV5BN1xyLCBrZjg9XkE4XHIsIGtmOT1eQTlcciwga2hvbWU9Xl4sCisJdHNsPVxFLjBcRWdcRX1cRWYsIHVzZT1hZG0rc2dyLAorIyAoYW1wZXgyMTk6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcsIGFkZGVkIDxjdnZpcz4KKyMgZnJvbSBhbXBleDIxOXcsIGFkZGVkIDxjbm9ybT49XEVbPzNsLCBpcnJlc2lzdGlibHkgc3VnZ2VzdGVkIGJ5IDxjdnZpcz4sCisjIGFuZCBtb3ZlZCB0aGUgcGFkZGluZyB0byBiZSAqYWZ0ZXIqIHRoZSBjYXBzIC0tIGVzcikKK2FtcGV4MjE5fGFtcGV4LTIxOXxhbXAyMTl8QW1wZXggd2l0aCBBdXRvbWFyZ2lucywKKwlocywgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sIGNidD1cRVtaLAorCWNsZWFyPVxFW0hcRVsySiQ8NTA+LCBjbm9ybT1cRVs/M2wsIGNyPV5NLAorCWNzcj0laVxFWyVwMSUyZDslcDIlMmRyLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDJDwyPiwgY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwKKwljdXUxPVxFW0EkPDI+LCBjdnZpcz1cRVs/M2gsIGRpbT1cRVsxbSwgZWQ9XEVbSiQ8NTA+LAorCWVsPVxFW0skPDM+LCBob21lPVxFW0gsIGh0PV5JLCBpbmQ9XkosCisJaXMyPVxFPlxFWz8xbFxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjA9XEVbMjF+LAorCWtmMT1cRVs3fiwga2YyPVxFWzh+LCBrZjM9XEVbOX4sIGtmND1cRVsxMH4sIGtmNT1cRVsxMX4sCisJa2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2hvbWU9XEVbSCwKKwlyZXY9XEVbN20sIHJpPVxFTSQ8NT4sIHJtYW09XEVbPzdsLCBybWt4PVxFPiwKKwlybXNvPVxFW20kPDI+LCBybXVsPVxFW20kPDI+LCBzZ3IwPVxFW20kPDI+LCBzbWFtPVxFWz83aCwKKwlzbWt4PVxFPSwgc21zbz1cRVs3bSQ8Mj4sIHNtdWw9XEVbNG0kPDI+LAorYW1wZXgyMTl3fGFtcGV4LTIxOXd8YW1wMjE5d3xBbXBleCAxMzIgY29scywKKwljb2xzIzEzMiwgbGluZXMjMjQsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgaW5kPV5KLAorCWlzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHVzZT1hbXBleDIxOSwKKyMgKGFtcGV4MjMyOiByZW1vdmVkIDxpZj0vdXNyL3NoYXJlL3RhYnNldC9hbXBleD4sIG5vIGZpbGUgYW5kIG5vIDxodHM+IC0tZXNyKQorYW1wZXgyMzJ8YW1wZXgtMjMyfEFtcGV4IE1vZGVsIDIzMiwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJY2J0PVxFSSwgY2l2aXM9XEUuMCwgY2xlYXI9XEUrLCBjbm9ybT1cRS40LCBjdWIxPV5ILCBjdWQxPV5WLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVcsIGRsMT1cRVIkPDUqLz4sIGVkPVxFWSwgZWw9XEVULAorCWZsYXNoPVxFYiQ8MjAwLz5cRWQsIGh0PV5JLCBpY2gxPVxFUSwgaWwxPVxFRSQ8NSovPiwKKwlpbnZpc0AsIGlzMj1cRWdcRWwsIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywga2YwPV5BQFxyLCBrZjE9XkFBXHIsIGtmMj1eQUJcciwga2YzPV5BQ1xyLAorCWtmND1eQURcciwga2Y1PV5BRVxyLCBrZjY9XkFGXHIsIGtmNz1eQUdcciwga2Y4PV5BSFxyLAorCWtmOT1eQUlcciwga2hvbWU9Xl4sIHVzZT1hZG0rc2dyLAorIyAoYW1wZXg6IHJlbW92ZWQgPGlmPS91c3Ivc2hhcmUvdGFic2V0L2FtcC0xMzI+LCBubyBmaWxlIGFuZCBubyA8aHRzPiAtLSBlc3IpCithbXBleDIzMnd8QW1wZXggTW9kZWwgMjMyIC8gMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIGxpbmVzIzI0LAorCWlzMj1cRVwwMzRFZ1xFbCwgdXNlPWFtcGV4MjMyLAorCisjIyMjIEFubiBBcmJvciAoYWEpCisjCisjIEFubiBBcmJvciBtYWRlIGRyZWFtIHRlcm1pbmFscyBmb3IgaGFja2VycyAtLSBsYXJnZSBzY3JlZW4gc2l6ZXMgYW5kIGh1Z2UKKyMgbnVtYmVycyBvZiBmdW5jdGlvbiBrZXlzLiAgQXQgbGVhc3Qgc29tZSB1c2VkIG1vbml0b3JzIGluIHBvcnRyYWl0IG1vZGUsCisjIGFsbG93aW5nIHVwIHRvIDc2LWNoYXJhY3RlciBzY3JlZW4gaGVpZ2h0cyEgIFRoZXkgd2VyZSByZWFjaGFibGUgYXQ6CisjCisjCUFubiBBcmJvciBUZXJtaW5hbHMKKyMJNjE3NSBKYWNrc29uIFJvYWQKKyMJQW5uIEFyYm9yLCBNSSA0ODEwMworIwkoMzEzKS02NjMtODAwMAorIworIyBCdXQgaW4gMTk5NiB0aGUgcGhvbmUgbnVtYmVyIHJlYWNoZXMgc29tZSBraXRzY2h5IHJldGFpbCBzaG9wLCBhbmQgQW5uIEFyYm9yCisjIGNhbid0IGJlIGZvdW5kIG9uIHRoZSBXZWI7IEkgZmVhciB0aGV5J3JlIGxvbmcgZGVhZC4gIFIuSS5QLgorIworCisKKyMgT3JpZ2luYWxseSBmcm9tIE1pa2UgTydCcmllbkBSYW5kIGFuZCBIb3dhcmQgS2F0c2VmZiBhdCBCZWxsIExhYnMuCisjIEhpZ2hseSBtb2RpZmllZCA2LzIyIGJ5IE1pa2UgTydCcmllbi4KKyMgc3BsaXQgb3V0IGludG8gc2V2ZXJhbCBmb3IgdGhlIHZhcmlvdXMgc2NyZWVuIHNpemVzIGJ5IGRhdmUteW9zdEByYW5kCisjIE1vZGlmaWNhdGlvbnMgbWFkZSAzLzgyIGJ5IE1hcmsgSG9ydG9uCisjIE1vZGlmaWVkIGJ5IFRvbSBRdWFybGVzIGF0IFVDQiBmb3IgZ3JlYXRlciBlZmZpY2llbmN5IGFuZCBtb3JlIGRpdmVyc2l0eQorIyBzdGF0dXMgbGluZSBtb3ZlZCB0byB0b3Agb2Ygc2NyZWVuLCA8Zmxhc2g+IHJlbW92ZWQgNS84MgorIyBTb21lIHVua25vd24gcGVyc29uIGF0IFNDTyB0aGVuIGhhY2tlZCB0aGUgaW5pdCBzdHJpbmdzIHRvIG1ha2UgdGhlbSBtb3JlCisjIGVmZmljaWVudC4KKyMKKyMgYXNzdW1lcyB0aGUgZm9sbG93aW5nIHNldHVwOgorIyAgIEEgbWVudTogMDAwMCAxMDEwICAwMDAxIDAwMDAKKyMgICBCIG1lbnU6IDk2MDAgIDAxMDAgMTAwMCAgMDAwMCAwMDAwICAxMDAwIDAwMDAgIDE3ICAxOQorIyAgIEMgbWVudTogNTYgICA2NiAgIDAgICAgMCAgICA5NjAwICAwMTEwIDExMDAKKyMgICBEIG1lbnU6IDAxMTAgMTAwMSAgIDEgICAwCisjCisjCUJyaWVmbHksIHRoZSBzZXR0aW5ncyBhcmUgZm9yIHRoZSBmb2xsb3dpbmcgbW9kZXM6CisjCSAgICh2YWx1ZXMgYXJlIGZvciBiaXQgc2V0L2NsZWFyIHdpdGggKiBpbmRpY2F0aW5nIG91ciBwcmVmZXJlbmNlCisjCSAgICBhbmQgdGhlIHZhbHVlIHVzZWQgdG8gdGVzdCB0aGVzZSB0ZXJtY2FwcykKKyMJTm90ZSB0aGF0IG1hbnkgb2YgdGhlc2Ugc2V0dGluZ3MgYXJlIGlycmVsZXZlbnQgdG8gdGhlIHRlcm1pbmZvCisjCWFuZCBhcmUganVzdCBzZXQgdG8gdGhlIGRlZmF1bHQgbW9kZSBvZiB0aGUgdGVybWluYWwgYXMgc2hpcHBlZAorIwlieSB0aGUgZmFjdG9yeS4KKyMKKyMgQSBtZW51OiAwMDAwIDEwMTAgIDAwMDEgMDAwMAorIwlCbG9jay91bmRlcmxpbmUgY3Vyc29yKgorIwlibGlua2luZy9ub25ibGlua2luZyBjdXJzb3IqCisjCWtleSBjbGljay9ubyBrZXkgY2xpY2sqCisjCWJlbGwvbm8gYmVsbCBhdCBjb2x1bW4gNzIqCisjCisjCWtleSBwYWQgaXMgY3Vyc29yIGNvbnRyb2wqL2tleSBwYWQgaXMgbnVtZXJpYworIwlyZXR1cm4gYW5kIGxpbmUgZmVlZC9yZXR1cm4gZm9yIDxjcj4ga2V5ICoKKyMJcmVwZWF0IGFmdGVyIC41IHNlYyovbm8gcmVwZWF0CisjCXJlcGVhdCBhdCAyNS8xNSBjaGFycyBwZXIgc2VjLiAqCisjCisjCWhvbGQgZGF0YSB1bnRpbCBwYXVzZSBwcmVzc2VkL3Byb2Nlc3MgZGF0YSB1bmxlc3MgcGF1c2UgcHJlc3NlZCoKKyMJc2xvdyBzY3JvbGwvbm8gc2xvdyBzY3JvbGwqCisjCUhvbGQgaW4gYXJlYS9kb24ndCBob2xkIGluIGFyZWEqCisjCWZ1bmN0aW9ucyBrZXlzIGhhdmUgZGVmYXVsdCovZnVuY3Rpb24ga2V5cyBkaXNhYmxlZCBvbiBwb3dlcnVwCisjCisjCXNob3cvZG9uJ3Qgc2hvdyBwb3NpdGlvbiBvZiBjdXJzb3IgZHVyaW5nIHBhZ2UgdHJhbnNtaXQqCisjCXVudXNlZAorIwl1bnVzZWQKKyMJdW51c2VkCisjCisjIEIgbWVudTogOTYwMCAgMDEwMCAxMDAwICAwMDAwIDAwMDAgIDEwMDAgMDAwMCAgMTcgIDE5CisjCUJhdWQgcmF0ZSAoOTYwMCopCisjCisjCTIgYml0cyBvZiBwYXJpdHkgLSAwMD1vZGQsMDE9ZXZlbiosMTA9c3BhY2UsMTE9bWFyaworIwkxIHN0b3AgYml0Ki8yIHN0b3AgYml0cworIwlwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIG9mZiovb24KKyMKKyMJa2V5Ym9hcmQgbG9jYWwvb24gbGluZSoKKyMJaGFsZi9mdWxsIGR1cGxleCoKKyMJZGlzYWJsZS9kbyBub3QgZGlzYWJsZSBrZXlib2FyZCBhZnRlciBkYXRhIHRyYW5zbWlzc2lvbioKKyMKKyMJdHJhbnNtaXQgZW50aXJlIHBhZ2Uvc3RvcCB0cmFuc21pc3Npb24gYXQgY3Vyc29yKgorIwl0cmFuc2Zlci9kbyBub3QgdHJhbnNmZXIgcHJvdGVjdGVkIGNoYXJhY3RlcnMqCisjCXRyYW5zbWl0IGFsbCBjaGFyYWN0ZXJzL3RyYW5zbWl0IG9ubHkgc2VsZWN0ZWQgY2hhcmFjdGVycyoKKyMJdHJhbnNtaXQgYWxsIHNlbGVjdGVkIGFyZWFzL3RyYW5zbWl0IG9ubHkgMSBzZWxlY3RlZCBhcmVhKgorIworIwl0cmFuc21pdC9kbyBub3QgdHJhbnNtaXQgbGluZSBzZXBhcmF0b3JzIHRvIGhvc3QqCisjCXRyYW5zbWl0L2RvIG5vdCB0cmFuc21pdCBwYWdlIHRhYiBzdG9wcyB0YWJzIHRvIGhvc3QqCisjCXRyYW5zbWl0L2RvIG5vdCB0cmFuc21pdCBjb2x1bW4gdGFiIHN0b3AgdGFicyB0byBob3N0KgorIwl0cmFuc21pdC9kbyBub3QgdHJhbnNtaXQgZ3JhcGhpY3MgY29udHJvbCAodW5kZXJsaW5lLGludmVyc2UuLikqCisjCisjCWVuYWJsZSovZGlzYWJsZSBhdXRvIFhPTi9YT0ZGIGNvbnRyb2wKKyMJcmVxdWlyZS9kbyBub3QgcmVxdWlyZSByZWNlaXB0IG9mIGEgREMxIGZyb20gaG9zdCBhZnRlciBlYWNoIExGKgorIwlwYXVzZSBrZXkgYWN0cyBhcyBhIG1ldGEga2V5L3BhdXNlIGtleSBpcyBwYXVzZSoKKyMJdW51c2VkCisjCisjCXVudXNlZAorIwl1bnVzZWQKKyMJdW51c2VkCisjCXVudXNlZAorIworIwlYT04gY2hhcmFjdGVyICgxNyopCisjCVhPRkYgY2hhcmFjdGVyICgxOSopCisjCisjIEMgbWVudTogNTYgICA2NiAgIDAgICAgMCAgICA5NjAwICAwMTEwIDExMDAKKyMJbnVtYmVyIG9mIGxpbmVzIHRvIHByaW50IGRhdGEgb24gKHByaW50ZXIpICg1NiopCisjCisjCW51bWJlciBvZiBsaW5lcyBvbiBhIHNoZWV0IG9mIHBhcGVyIChwcmludGVyKSAoNjYqKQorIworIwlsZWZ0IG1hcmdpbiAocHJpbnRlcikgKDAqKQorIworIwludW1iZXIgb2YgcGFkIGNoYXJzIG9uIG5ldyBsaW5lIHRvIHByaW50ZXIgKDAqKQorIworIwlwcmludGVyIGJhdWQgcmF0ZSAoOTYwMCopCisjCisjCXByaW50ZXIgcGFyaXR5OiAwMD1vZGQsMDE9ZXZlbiosMTA9c3BhY2UsMTE9bWFyaworIwlwcmludGVyIHN0b3AgYml0czogMiovMQorIwlwcmludC9kbyBub3QgcHJpbnQgZ3VhcmRlZCBhcmVhcyoKKyMKKyMJbmV3IGxpbmUgaXM6IDAxPUxGLDEwPUNSLDExPUNSTEYqCisjCXVudXNlZAorIwl1bnVzZWQKKyMKKyMgRCBtZW51OiAwMTEwIDEwMDEgICAxICAgMAorIwlMRiBpcyBuZXdsaW5lL0xGIGlzIGRvd24gb25lIGxpbmUsIHNhbWUgY29sdW1uKgorIwl3cmFwIHRvIHByZWNlZGluZyBsaW5lIGlmIG1vdmUgbGVmdCBmcm9tIGNvbCAxKi9kb24ndCB3cmFwCisjCXdyYXAgdG8gbmV4dCBsaW5lIGlmIG1vdmUgcmlnaHQgZnJvbSBjb2wgODAqL2Rvbid0IHdyYXAKKyMJYmFja3NwYWNlIGlzL2lzIG5vdCBkZXN0cnVjdGl2ZSoKKyMKKyMJZGlzcGxheSovaWdub3JlIERFTCBjaGFyYWN0ZXIKKyMJZGlzcGxheSB3aWxsIG5vdC93aWxsIHNjcm9sbCoKKyMJcGFnZS9jb2x1bW4gdGFiIHN0b3BzKgorIwllcmFzZSBldmVyeXRoaW5nKi9lcmFzZSB1bnByb3RlY3RlZCBvbmx5CisjCisjCWVkaXRpbmcgZXh0ZW50OiAwPWRpc3BsYXksMT1saW5lKiwyPWZpZWxkLDM9YXJlYQorIworIwl1bnVzZWQKKyMKKworYW5uYXJib3I0MDgwfGFhNDA4MHxhbm4gYXJib3IgNDA4MCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyM0MCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDI+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eXywKKwljdXA9XDAxNyVwMiV7MTB9JS8lezE2fSUqJXAyJXsxMH0lbSUrJWMlcDElPyVwMSV7MTl9JT4ldCV7MTJ9JSslOyV7NjR9JSslYywKKwljdXUxPV5OLCBob21lPV5LLCBodD1eSSwgaHRzPV5dXlAxLCBpbmQ9XkosIGticz1eXiwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5fLCBrY3V1MT1eTiwga2hvbWU9XkssIHRiYz1eXF5QXlAsCisKKyMgU3RyYW5nZSBBbm4gQXJib3IgdGVybWluYWwgZnJvbSBCUkwKK2FhczE5MDF8QW5uIEFyYm9yIEs0MDgwIHcvUzE5MDEgbW9kLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzQwLAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5fLCBjdXUxPV5OLAorCWhvbWU9XkssIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBsbD1eT1wwYywKKwluZWw9Xk1eSiwKKworIyBJZiB5b3UncmUgdXNpbmcgdGhlIEdOVSB0ZXJtY2FwIGxpYnJhcnksIGFkZAorIwk6Y1M9XEVbJXAxJWQ7JXAyJWQ7JXAzJWQ7JXA0JWRwOgorIyB0byB0aGVzZSBjYXBhYmlsaXRpZXMuICBUaGlzIGlzIHRoZSBub25zdGFuZGFyZCBHTlUgdGVybWNhcCBzY3JvbGxpbmcKKyMgY2FwYWJpbGl0eSwgYXJndW1lbnRzIGFyZToKKyMgICAxLiBUb3RhbCBudW1iZXIgb2YgbGluZXMgb24gdGhlIHNjcmVlbi4KKyMgICAyLiBOdW1iZXIgb2YgbGluZXMgYWJvdmUgZGVzaXJlZCBzY3JvbGwgcmVnaW9uLgorIyAgIDMuIE51bWJlciBvZiBsaW5lcyBiZWxvdyAob3V0c2lkZSBvZikgZGVzaXJlZCBzY3JvbGwgcmVnaW9uLgorIyAgIDQuIFRvdGFsIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgc2NyZWVuLCB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLgorIyBUaGUgZ2VuZXJpYyBBbm4gQXJib3IgZW50cnkgaXMgdGhlIG9ubHkgb25lIHRoYXQgdXNlcyB0aGlzLgorYWFhK3Vua3xhYWEtdW5rfGFubiBhcmJvciBhbWJhc3NhZG9yIChpbnRlcm5hbCAtIGRvbid0IHVzZSB0aGlzIGRpcmVjdGx5KSwKKwlPVGJzLCBhbSwga20sIG1jNWksIG1pciwgeG9uLAorCWNvbHMjODAsIGl0IzgsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osCisJY2xlYXI9XEVbSFxFW0okPDE1Nj4sIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkssIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSyQ8NT4sIGhvbWU9XEVbSCwgaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XkksCisJaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCQ8NCo+LCBpY2gxPVxFW0AkPDQ+LCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wkPDM+LCBpbmQ9XkssIGludmlzPVxFWzhtLCBpczE9XEVbbVxFN1xFW0hcRTlcRTgsCisJaXMzPVxFWzFRXEVbPjIwOzMwbFxFUGAreH5NXEVcXCwga2JzPV5ILCBrY2J0PVxFW1osCisJa2Nscj1cRVtKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFW1AsIGtkbDE9XEVbTSwga2YxPVxFT0EsIGtmMTA9XEVPSiwga2YxMT1cRU9LLAorCWtmMTI9XEVPTCwga2YxMz1cRU9NLCBrZjE0PVxFT04sIGtmMTU9XEVPTywga2YxNj1cRU9QLAorCWtmMTc9XEVPUSwga2YxOD1cRU9SLCBrZjE5PVxFT1MsIGtmMj1cRU9CLCBrZjIwPVxFT1QsCisJa2YyMT1cRU9VLCBrZjIyPVxFT1YsIGtmMjM9XEVPVywga2YyND1cRU9YLCBrZjM9XEVPQywKKwlrZjQ9XEVPRCwga2Y1PVxFT0UsIGtmNj1cRU9GLCBrZjc9XEVPRywga2Y4PVxFT0gsIGtmOT1cRU9JLAorCWtob21lPVxFW0gsIGtpY2gxPVxFW0AsIGtpbDE9XEVbTCwga3JtaXI9XEU2LCBtYzA9XEVbMGksCisJbWM0PV5DLCBtYzU9XEVbdiwgbWM1cD1cRVslcDElZHYsIHJjPVxFOCwKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJldj1cRVs3bSwKKwlybWt4PVxFUGA+eX5bW0pgOHh5fltbQWA0eHl+W1tEYDZ4eX5bW0NgMnh5fltbQlxFXFwsCisJcm1tPVxFWz41MmwsIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsCisJc2dyPVxFWyU/JXAxJXQ3OyU7JT8lcDIldDQ7JTslPyVwMyV0NzslOyU/JXA0JXQ1OyU7JT8lcDYldDE7JTttLAorCXNncjA9XEVbbSwKKwlzbWt4PVxFUGA+en5bW0pgOHh6fltbQWA0eHp+W1tEYDZ4en5bW0NgMnh6fltbQlxFXFwsCisJc21tPVxFWz41MmgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVsyZywKKwl2cGE9XEVbJXAxJXsxfSUrJWRkLAorCithYWErcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IgaW4gcmV2ZXJzZSB2aWRlbywKKwlibGluaz1cRVs1OzdtLCBib2xkPVxFWzE7N20sIGludmlzPVxFWzc7OG0sCisJaXMxPVxFWzdtXEU3XEVbSFxFOVxFOCwgcmV2PVxFW20sIHJtc289XEVbN20sIHJtdWw9XEVbN20sCisJcnMxPVxFW0hcRVs3bVxFW0okPDE1Nj4sCisJc2dyPVxFWyU/JXAxJXAzJXwlISV0NzslOyU/JXAyJXQ0OyU7JT8lcDQldDU7JTslPyVwNiV0MTslOyU/JXA3JXQ4OyU7bSwKKwlzZ3IwPVxFWzdtXDAxNiwgc21zbz1cRVttLCBzbXVsPVxFWzQ7N20sCisjIEFtYmFzc2Fkb3Igd2l0aCB0aGUgREVDIG9wdGlvbiwgZm9yIHBhcnRpYWwgdnQxMDAgY29tcGF0aWJpbGl0eS4KK2FhYStkZWN8YW5uIGFyYm9yIGFtYmFzc2Fkb3IgaW4gZGVjIHZ0MTAwIG1vZGUsCisJYWNzYz1hYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19LAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgZW5hY3M9XEUoMCwgcm1hY3M9Xk4sCisJc2dyPVxFWyU/JXAxJXAzJXwlISV0NzslOyU/JXAyJXQ0OyU7JT8lcDQldDU7JTslPyVwNiV0MTslOyU/JXA3JXQ4OyU7bSU/JXA5JXRcMDE3JWVcMDE2JTssCisJc21hY3M9Xk8sCithYWEtMTh8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMTggbGluZXMsCisJbGluZXMjMTgsCisJaXMyPVxFN1xFWzYwOzA7MDsxOHBcRTgsCisJcm1jdXA9XEVbNjA7MDswOzE4cFxFWzYwOzFIXEVbSywgc21jdXA9XEVbMTg7MDswOzE4cCwKKwl1c2U9YWFhK3VuaywKK2FhYS0xOC1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci8xOCBsaW5lcytyZXZlcnNlIHZpZGVvLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtMTgsCithYWEtMjB8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMjAgbGluZXMsCisJbGluZXMjMjAsCisJaXMyPVxFN1xFWzYwOzA7MDsyMHBcRTgsCisJcm1jdXA9XEVbNjA7MDswOzIwcFxFWzYwOzFIXEVbSywgc21jdXA9XEVbMjA7MDswOzIwcCwKKwl1c2U9YWFhK3VuaywKK2FhYS0yMnxhbm4gYXJib3IgYW1iYXNzYWRvci8yMiBsaW5lcywKKwlsaW5lcyMyMiwKKwlpczI9XEU3XEVbNjA7MDswOzIycFxFOCwKKwlybWN1cD1cRVs2MDswOzA7MjJwXEVbNjA7MUhcRVtLLCBzbWN1cD1cRVsyMjswOzA7MjJwLAorCXVzZT1hYWErdW5rLAorYWFhLTI0fGFubiBhcmJvciBhbWJhc3NhZG9yLzI0IGxpbmVzLAorCWxpbmVzIzI0LAorCWlzMj1cRTdcRVs2MDswOzA7MjRwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDsyNHBcRVs2MDsxSFxFW0ssIHNtY3VwPVxFWzI0OzA7MDsyNHAsCisJdXNlPWFhYSt1bmssCithYWEtMjQtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMjQgbGluZXMrcmV2ZXJzZSB2aWRlbywKKwl1c2U9YWFhK3J2LCB1c2U9YWFhLTI0LAorYWFhLTI2fGFubiBhcmJvciBhbWJhc3NhZG9yLzI2IGxpbmVzLAorCWxpbmVzIzI2LAorCWlzMj1cRTdcRVs2MDswOzA7MjZwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDsyNnBcRVsyNjsxSFxFW0ssCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVsyNjswOzA7MjZwLCB1c2U9YWFhK3VuaywKK2FhYS0yOHxhbm4gYXJib3IgYW1iYXNzYWRvci8yOCBsaW5lcywKKwlsaW5lcyMyOCwKKwlpczI9XEU3XEVbNjA7MDswOzI4cFxFOCwKKwlybWN1cD1cRVs2MDswOzA7MjhwXEVbMjg7MUhcRVtLLAorCXNtY3VwPVxFW0hcRVtKJDwxNTY+XEVbMjg7MDswOzI4cCwgdXNlPWFhYSt1bmssCithYWEtMzAtc3xhYWEtc3xhbm4gYXJib3IgYW1iYXNzYWRvci8zMCBsaW5lcyB3L3N0YXR1cywKKwllc2xvaywgaHMsCisJbGluZXMjMjksCisJZHNsPVxFN1xFWzYwOzA7MDszMHBcRVsxOzFIXEVbS1xFW0hcRThcclxuXEVbSywKKwlmc2w9XEVbPjUxbCwgaXMyPVxyXG5cRVtBXEU3XEVbNjA7MTswOzMwcFxFOCwKKwlybWN1cD1cRVs2MDsxOzA7MzBwXEVbMjk7MUhcRVtLLAorCXNtY3VwPVxFW0hcRVtKJDwxNTY+XEVbMzA7MTswOzMwcFxFWzMwOzFIXEVbSywKKwl0c2w9XEVbPjUxaFxFWzE7JXAxJWRIXEVbMkssIHVzZT1hYWErdW5rLAorYWFhLTMwLXMtcnZ8YWFhLXMtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzAgbGluZXMrc3RhdHVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS0zMC1zLAorYWFhLXMtY3R4dHxhYWEtMzAtcy1jdHh0fGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzK3N0YXR1cytzYXZlIGNvbnRleHQsCisJcm1jdXA9XEVbNjA7MTswOzMwcFxFWzU5OzFIXEVbSywKKwlzbWN1cD1cRVszMDsxSFxFW0tcRVszMDsxOzA7MzBwLCB1c2U9YWFhLTMwLXMsCithYWEtcy1ydi1jdHh0fGFhYS0zMC1zLXJ2LWN0fGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzK3N0YXR1cytzYXZlIGNvbnRleHQrcmV2ZXJzZSB2aWRlbywKKwlybWN1cD1cRVs2MDsxOzA7MzBwXEVbNTk7MUhcRVtLLAorCXNtY3VwPVxFWzMwOzFIXEVbS1xFWzMwOzE7MDszMHAsIHVzZT1hYWEtMzAtcy1ydiwKK2FhYXxhYWEtMzB8YW1iYXN8YW1iYXNzYWRvcnxhbm4gYXJib3IgYW1iYXNzYWRvci8zMCBsaW5lcywKKwlsaW5lcyMzMCwKKwlpczI9XEU3XEVbNjA7MDswOzMwcFxFOCwKKwlybWN1cD1cRVs2MDswOzA7MzBwXEVbMzA7MUhcRVtLLAorCXNtY3VwPVxFW0hcRVtKJDwxNTY+XEVbMzA7MDswOzMwcCwgdXNlPWFhYSt1bmssCithYWEtMzAtcnZ8YWFhLXJ2fGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzIGluIHJldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS0zMCwKK2FhYS0zMC1jdHh0fGFhYS1jdHh0fGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzOyBzYXZpbmcgY29udGV4dCwKKwlybWN1cD1cRVs2MDswOzA7MzBwXEVbNjA7MUhcRVtLLCBzbWN1cD1cRVszMDswOzA7MzBwLAorCXVzZT1hYWEtMzAsCithYWEtMzAtcnYtY3R4dHxhYWEtcnYtY3R4dHxhbm4gYXJib3IgYW1iYXNzYWRvci8zMCBsaW5lcyByZXZlcnNlIHZpZGVvOyBzYXZpbmcgY29udGV4dCwKKwlybWN1cD1cRVs2MDswOzA7MzBwXEVbNjA7MUhcRVtLLCBzbWN1cD1cRVszMDswOzA7MzBwLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtMzAsCithYWEtMzZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzYgbGluZXMsCisJbGluZXMjMzYsCisJaXMyPVxFN1xFWzYwOzA7MDszNnBcRTgsCisJcm1jdXA9XEVbNjA7MDswOzM2cFxFWzM2OzFIXEVbSywKKwlzbWN1cD1cRVtIXEVbSiQ8MTU2PlxFWzM2OzA7MDszNnAsIHVzZT1hYWErdW5rLAorYWFhLTM2LXJ2fGFubiBhcmJvciBhbWJhc3NhZG9yLzM2IGxpbmVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS0zNiwKK2FhYS00MHxhbm4gYXJib3IgYW1iYXNzYWRvci80MCBsaW5lcywKKwlsaW5lcyM0MCwKKwlpczI9XEU3XEVbNjA7MDswOzQwcFxFOCwKKwlybWN1cD1cRVs2MDswOzA7NDBwXEVbNDA7MUhcRVtLLAorCXNtY3VwPVxFW0hcRVtKJDwxNTY+XEVbNDA7MDswOzQwcCwgdXNlPWFhYSt1bmssCithYWEtNDAtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvNDAgbGluZXMrcmV2ZXJzZSB2aWRlbywKKwl1c2U9YWFhK3J2LCB1c2U9YWFhLTQwLAorYWFhLTQ4fGFubiBhcmJvciBhbWJhc3NhZG9yLzQ4IGxpbmVzLAorCWxpbmVzIzQ4LAorCWlzMj1cRTdcRVs2MDswOzA7NDhwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDs0OHBcRVs0ODsxSFxFW0ssCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVs0ODswOzA7NDhwLCB1c2U9YWFhK3VuaywKK2FhYS00OC1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci80OCBsaW5lcytyZXZlcnNlIHZpZGVvLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtNDgsCithYWEtNjAtc3xhbm4gYXJib3IgYW1iYXNzYWRvci81OSBsaW5lcytzdGF0dXMsCisJZXNsb2ssIGhzLAorCWxpbmVzIzU5LAorCWRzbD1cRTdcRVs2MDswOzA7NjBwXEVbMTsxSFxFW0tcRVtIXEU4XHJcblxFW0ssCisJZnNsPVxFWz41MWwsIGlzMj1cclxuXEVbQVxFN1xFWzYwOzE7MDs2MHBcRTgsCisJdHNsPVxFWz41MWhcRVsxOyVwMSVkSFxFWzJLLCB1c2U9YWFhK3VuaywKK2FhYS02MC1zLXJ2fGFubiBhcmJvciBhbWJhc3NhZG9yLzU5IGxpbmVzK3N0YXR1cytyZXZlcnNlIHZpZGVvLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtNjAtcywKK2FhYS02MC1kZWMtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvZGVjIG1vZGUrNTkgbGluZXMrc3RhdHVzK3JldiB2aWRlbywKKwl1c2U9YWFhK2RlYywgdXNlPWFhYStydiwgdXNlPWFhYS02MC1zLAorYWFhLTYwfGFubiBhcmJvciBhbWJhc3NhZG9yLzYwIGxpbmVzLAorCWxpbmVzIzYwLAorCWlzMj1cRTdcRVs2MDswOzA7NjBwXEVbMVFcRVttXEVbPjIwOzMwbFxFOCwKKwl1c2U9YWFhK3VuaywKK2FhYS02MC1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci82MCBsaW5lcytyZXZlcnNlIHZpZGVvLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtNjAsCithYWEtZGJ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IgMzAvZGVzdHJ1Y3RpdmUgYmFja3NwYWNlLAorCU9UYnNALAorCWN1YjE9XEVbRCwgaXMzPVxFWzFRXEVbbVxFWz4yMGxcRVs+MzBoLCB1c2U9YWFhLTMwLAorCitndXJ1fGd1cnUtMzN8Z3VydSt1bmt8YW5uIGFyYm9yIGd1cnUvMzMgbGluZXMgODAgY29scywKKwlsaW5lcyMzMywKKwlmbGFzaD1cRVs+NTloJDwxMDA+XEVbPjU5bCwKKwlpczI9XEU3XEVbMjU1OzA7MDszMzs4MDs4MHBcRThcRVtKLCBpczM9XEVbPjU5bCwKKwlybWN1cD1cRVsyNTVwXEVbMjU1OzFIXEVbSywgc21jdXA9XEVbMzNwLCB1c2U9YWFhK3VuaywKK2d1cnUrcnZ8Z3VydSBjaGFuZ2VzIGZvciByZXZlcnNlIHZpZGVvLAorCWZsYXNoPVxFWz41OWwkPDEwMD5cRVs+NTloLCBpczM9XEVbPjU5aCwKK2d1cnUtcnZ8Z3VydS0zMy1ydnxhbm4gYXJib3IgZ3VydS8zMyBsaW5lcytyZXZlcnNlIHZpZGVvLAorCXVzZT1ndXJ1K3J2LCB1c2U9Z3VydS0zMywKK2d1cnUrc3xndXJ1IHN0YXR1cyBsaW5lLAorCWVzbG9rLCBocywKKwlkc2w9XEU3XEVbOzBwXEVbMTsxSFxFW0tcRVtIXEU4XHJcblxFW0ssIGZzbD1cRVs+NTFsLAorCXJtY3VwPVxFWzI1NTsxcFxFWzI1NTsxSFxFW0ssIHNtY3VwPSwKKwl0c2w9XEVbPjUxaFxFWzE7JXAxJWRIXEVbMkssCitndXJ1LW5jdHh0fGd1cnUgd2l0aCBubyBzYXZlZCBjb250ZXh0LAorCXNtY3VwPVxFW0hcRVtKJDwxNTY+XEVbMzNwXEVbMjU1OzFIXEVbSywgdXNlPWd1cnUsCitndXJ1LXN8Z3VydS0zMy1zfGFubiBhcmJvciBndXJ1LzMzIGxpbmVzK3N0YXR1cywKKwlsaW5lcyMzMiwKKwlpczI9XHJcblxFW0FcRTdcRVsyNTU7MTswOzMzOzgwOzgwcFxFOFxFW0osCisJc21jdXA9XEVbMzM7MXBcRVsyNTU7MUhcRVtLLCB1c2U9Z3VydStzLCB1c2U9Z3VydSt1bmssCitndXJ1LTI0fGFubiBhcmJvciBndXJ1IDI0IGxpbmVzLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWlzMj1cRTdcRVsyNTU7MDswOzI0OzgwOzgwcFxFOFxFW0osIHNtY3VwPVxFWzI0cCwKKwl1c2U9Z3VydSt1bmssCitndXJ1LTQ0fGFubiBhcmJvciBndXJ1IDQ0IGxpbmVzLAorCWNvbHMjOTcsIGxpbmVzIzQ0LAorCWlzMj1cRTdcRVsyNTU7MDswOzQ0Ozk3OzEwMHBcRThcRVtKLCBzbWN1cD1cRVs0NHAsCisJdXNlPWd1cnUrdW5rLAorZ3VydS00NC1zfGFubiBhcmJvciBndXJ1LzQ0IGxpbmVzK3N0YXR1cywKKwlsaW5lcyM0MywKKwlpczI9XHJcblxFW0FcRTdcRVsyNTU7MTswOzQ0OzgwOzgwcFxFOFxFW0osCisJc21jdXA9XEVbNDQ7MXBcRVsyNTU7MUhcRVtLLCB1c2U9Z3VydStzLCB1c2U9Z3VydSt1bmssCitndXJ1LTc2fGd1cnUgd2l0aCA3NiBsaW5lcyBieSA4OSBjb2xzLAorCWNvbHMjODksIGxpbmVzIzc2LAorCWlzMj1cRTdcRVsyNTU7MDswOzc2Ozg5OzEwMHBcRThcRVtKLCBzbWN1cD1cRVs3NnAsCisJdXNlPWd1cnUrdW5rLAorZ3VydS03Ni1zfGFubiBhcmJvciBndXJ1Lzc2IGxpbmVzK3N0YXR1cywKKwljb2xzIzg5LCBsaW5lcyM3NSwKKwlpczI9XHJcblxFW0FcRTdcRVsyNTU7MTswOzc2Ozg5OzEwMHBcRThcRVtKLAorCXNtY3VwPVxFWzc2OzFwXEVbMjU1OzFIXEVbSywgdXNlPWd1cnUrcywgdXNlPWd1cnUrdW5rLAorZ3VydS03Ni1scHxndXJ1LWxwfGd1cnUgd2l0aCBwYWdlIGJpZ2dlciB0aGFuIGxpbmUgcHJpbnRlciwKKwljb2xzIzEzNCwgbGluZXMjNzYsCisJaXMyPVxFN1xFWzI1NTswOzA7NzY7MTM0OzEzNHBcRThcRVtKLCBzbWN1cD1cRVs3NnAsCisJdXNlPWd1cnUrdW5rLAorZ3VydS03Ni13fGd1cnUgNzYgbGluZXMgYnkgMTc4IGNvbHMsCisJY29scyMxNzgsIGxpbmVzIzc2LAorCWlzMj1cRTdcRVsyNTU7MDswOzc2OzE3ODsxNzhwXEU4XEVbSiwgc21jdXA9XEVbNzZwLAorCXVzZT1ndXJ1K3VuaywKK2d1cnUtNzYtdy1zfGFubiBhcmJvciBndXJ1Lzc2IGxpbmVzK3N0YXR1cyt3aWRlLAorCWNvbHMjMTc4LCBsaW5lcyM3NSwKKwlpczI9XHJcblxFW0FcRTdcRVsyNTU7MTswOzc2OzE3ODsxNzhwXEU4XEVbSiwKKwlzbWN1cD1cRVs3NjsxcFxFWzI1NTsxSFxFW0ssIHVzZT1ndXJ1K3MsIHVzZT1ndXJ1K3VuaywKK2d1cnUtNzYtd218Z3VydSA3NiBsaW5lcyBieSAxNzggY29scyB3aXRoIDI1NSBjb2xzIG1lbW9yeSwKKwljb2xzIzE3OCwgbGluZXMjNzYsCisJaXMyPVxFN1xFWzI1NTswOzA7NzY7MTc4OzI1NXBcRThcRVtKLCBzbWN1cD1cRVs3NnAsCisJdXNlPWd1cnUrdW5rLAorYWFhLXJ2LXVua3xhbm4gYXJib3IgdW5rbm93biB0eXBlLAorCWxoIzAsIGx3IzAsIG5sYWIjMCwKKwlibGluaz1cRVs1OzdtLCBib2xkPVxFWzE7N20sIGhvbWU9XEVbSCwgaW52aXM9XEVbNzs4bSwKKwlpczE9XEVbN21cRTdcRVtIXEU5XEU4LCByZXY9XEVbbSwgcm1zbz1cRVs3bSwgcm11bD1cRVs3bSwKKwlyczE9XEVbSFxFWzdtXEVbSiwKKwlzZ3I9XEVbJT8lcDElISV0NzslOyU/JXAyJXQ0OyU7JT8lcDMldDc7JTslPyVwNCV0NTslOyU/JXA2JXQxOyU7JT8lcDcldDg7JTttLAorCXNncjA9XEVbN20sIHNtc289XEVbbSwgc211bD1cRVs0OzdtLAorCisjIyMjIEFwcGxpZWQgRGlnaXRhbCBEYXRhIFN5c3RlbXMgKGFkZHMpCisjCisjIEFERFMgaXRzZWxmIGlzIGxvbmcgZ29uZS4gIEFERFMgd2FzIGJvdWdodCBieSBOQ1IsIGFuZCB0aGUgc2FtZSBncm91cCBtYWRlCisjIEFERFMgYW5kIE5DUiB0ZXJtaW5hbHMuICBXaGVuIEFUJlQgYW5kIE5DUiBtZXJnZWQsIHRoZSBlbmdpbmVlcmluZyBmb3IKKyMgdGVybWluYWxzIHdhcyBtZXJnZWQgYWdhaW4uICBUaGVuIEFUJlQgc29sZCB0aGUgdGVybWluYWwgYnVzaW5lc3MgdG8KKyMgU3VuUml2ZXIsIHdoaWNoIGxhdGVyIGNoYW5nZWQgaXRzICBuYW1lIHRvIEJvdW5kbGVzcyBUZWNobm9sb2dpZXMuICBUaGUKKyMgZW5naW5lZXJzIGZyb20gVGVsZXR5cGUsIEFUJlQgdGVybWluYWxzLCBBRERTLCBhbmQgTkNSICh3aG8gYXJlIHN0aWxsIHRoZXJlCisjIGFzIG9mIGVhcmx5IDE5OTUpIGFyZSBhdDoKKyMKKyMJQm91bmRsZXNzIFRlY2hub2xvZ2llcworIwkxMDAgTWFyY3VzIEJvdWxldmFyZAorIwlIYXVwcGF1Z2UsIE5ZIDExNzg4LTM3NjIKKyMJVm94OiAoODAwKS0yMzEtNTQ0NQorIwlGYXg6ICg1MTYpLTM0Mi03Mzc4CisjCVdlYjogaHR0cDovL2JvdW5kbGVzcy5jb20KKyMKKyMgVGhlaXIgdm9pY2UgbWFpbCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBwbGFjZSBhcyAiU3VuUml2ZXIgKGZvcm1lcmx5IEFERFMpIi4KKyMgSW4gMTk5NSBCb3VuZGxlc3MgYWNxdWlyZWQgREVDJ3MgdGVybWluYWxzIGJ1c2luZXNzLgorIworCisjIFJlZ2VudDogbG93ZXN0IGNvbW1vbiBkZW5vbWluYXRvciwgd29ya3Mgb24gYWxsIHJlZ2VudHMuCisjIChyZWdlbnQ6IHJlbmFtZWQgIjpiYzoiIHRvICI6bGU6IiAtLSBlc3IpCityZWdlbnR8QWRkcyBSZWdlbnQgU2VyaWVzLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5VLCBjdWQxPV5KLCBjdWYxPV5GLCBjdXUxPV5aLAorCWhvbWU9XEVZXHNccywgaW5kPV5KLCBsbD1eQSwKKyMgUmVnZW50IDEwMCBoYXMgYSBidWcgd2hlcmUgaWYgY29tcHV0ZXIgc2VuZHMgZXNjYXBlIHdoZW4gdXNlciBpcyBob2xkaW5nCisjIGRvd24gc2hpZnQga2V5IGl0IGdldHMgY29uZnVzZWQsIHNvIHdlIGF2b2lkIGVzY2FwZS4KK3JlZ2VudDEwMHxBZGRzIFJlZ2VudCAxMDAsCisJeG1jIzEsCisJYmVsPV5HLAorCWN1cD1cMDEzJXAxJScgJyUrJWNcMDIwJXAyJXsxMH0lLyV7MTZ9JSolcDIlezEwfSVtJSslYywKKwlrZjA9XkIxXHIsIGtmMT1eQjJcciwga2YyPV5CM1xyLCBrZjM9XkI0XHIsIGtmND1eQjVcciwKKwlrZjU9XkI2XHIsIGtmNj1eQjdcciwga2Y3PV5COFxyLCBsZjA9RjEsIGxmMT1GMiwgbGYyPUYzLAorCWxmMz1GNCwgbGY0PUY1LCBsZjU9RjYsIGxmNj1GNywgbGY3PUY4LCBybXNvPVxFMEAsIHJtdWw9XEUwQCwKKwlzZ3IwPVxFMEAsIHNtc289XEUwUCwgc211bD1cRTBgLCB1c2U9cmVnZW50LAorcmVnZW50MjB8QWRkcyBSZWdlbnQgMjAsCisJYmVsPV5HLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBlZD1cRWssIGVsPVxFSywKKwl1c2U9cmVnZW50LAorcmVnZW50MjV8QWRkcyBSZWdlbnQgMjUsCisJYmVsPV5HLCBrY3ViMT1eVSwga2N1ZDE9XkosIGtjdWYxPV5GLCBrY3V1MT1eWiwga2hvbWU9XkEsCisJdXNlPXJlZ2VudDIwLAorcmVnZW50NDB8QWRkcyBSZWdlbnQgNDAsCisJeG1jIzEsCisJYmVsPV5HLCBkbDE9XEVsJDwyKj4sIGlsMT1cRU0kPDIqPiwga2YwPV5CMVxyLCBrZjE9XkIyXHIsCisJa2YyPV5CM1xyLCBrZjM9XkI0XHIsIGtmND1eQjVcciwga2Y1PV5CNlxyLCBrZjY9XkI3XHIsCisJa2Y3PV5COFxyLCBsZjA9RjEsIGxmMT1GMiwgbGYyPUYzLCBsZjM9RjQsIGxmND1GNSwgbGY1PUY2LAorCWxmNj1GNywgbGY3PUY4LCBybXNvPVxFMEAsIHJtdWw9XEUwQCwgc2dyMD1cRTBALCBzbXNvPVxFMFAsCisJc211bD1cRTBgLCB1c2U9cmVnZW50MjUsCityZWdlbnQ0MCt8QWRkcyBSZWdlbnQgNDArLAorCWlzMj1cRUIsIHVzZT1yZWdlbnQ0MCwKK3JlZ2VudDYwfHJlZ2VudDIwMHxBZGRzIFJlZ2VudCA2MCwKKwlkY2gxPVxFRSwgaXMyPVxFVlxFQiwga2RjaDE9XEVFLCBraWNoMT1cRUYsIGtybWlyPVxFRiwKKwlybWlyPVxFRiwgcm1zbz1cRVJcRTBAXEVWLCBzbWlyPVxFRiwgc21zbz1cRVJcRTBQXEVWLAorCXVzZT1yZWdlbnQ0MCssCisjIEZyb206IDxlZHdhcmRAb255eC5iZXJrZWxleS5lZHU+IFRodSBKdWwgIDkgMDk6Mjc6MzMgMTk4MQorIyAodmlld3BvaW50OiBhZGRlZCA8a2N1ZjE+LCBmdW5jdGlvbiBrZXksIGFuZCA8ZGwxPiBjYXBhYmlsaXRpZXMgLS0gZXNyKQordmlld3BvaW50fGFkZHN2aWV3cG9pbnR8YWRkcyB2aWV3cG9pbnQsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY25vcm09XDAxN1xFMGAsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XkYsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XlosCisJY3Z2aXM9XDAxN1xFMFAsIGRsMT1cRWwsIGVkPVxFayQ8MTYuMSo+LCBlbD1cRUskPDE2PiwKKwlpbmQ9XkosIGlzMj1cMDE3XEUwYCwga2N1YjE9XlUsIGtjdWQxPV5KLCBrY3VmMT1eRiwga2N1dTE9XlosCisJa2YwPV5CMSwga2YyPV5CMiwga2YzPV5CISwga2Y0PV5CIiwga2Y1PV5CIywga2hvbWU9XkEsIGxsPV5BLAorCXJtc289Xk8sIHJtdWw9Xk8sIHNncjA9Xk8sIHNtc289Xk4sIHNtdWw9Xk4sCisjIFNvbWUgdmlld3BvaW50cyBoYXZlIGJhZCBST01zIHRoYXQgZm9vIHVwIG9uIF5PCitzY3Jld3BvaW50fGFkZHMgdmlld3BvaW50IHdpdGggXk8gYnVnLAorCWN2dmlzQCwgcm1zb0AsIHJtdWxALCBzbXNvQCwgc211bEAsIHVzZT12aWV3cG9pbnQsCisKKyMgRnJvbTogSmF5IFMuIFJvdW1hbiA8anNyQGRleHRlci5taS5vcmc+IDUgSnVsIDkyCisjIFRoZSA8Y2l2aXM+Lzxjbm9ybT4vPHNncj4vPHNncjA+IHN0cmluZ3Mgd2VyZSBhZGRlZCBieSBFU1IgZnJvbSBzcGVjcy4KKyMgVGhlb3J5OyB0aGUgdnAzYSsgd2FudHMgXEUwJWMgdG8gc2V0IGhpZ2hsaWdodHMsIHdoZXJlIG5vcm1hbD0wMTAwMDAwMCwKKyMgdW5kZXJsaW5lPTAxMTAwMDAwLCByZXY9MDEwMTAwMDAsIGJsaW5rPTAxMDAwMDEwLGRpbT0wMTAwMDAwMSwKKyMgaW52aXM9MDEwMDAxMDAgYW5kICVjIGlzIHRoZSBsb2dpY2FsIG9yIG9mIGRlc2lyZWQgYXR0cmlidXRlcy4KKyMgVGhlcmUgaXMgYWxzbyBhIGB0YWcgYml0JyBlbmFibGluZyBhdHRyaWJ1dGVzLCBzZXQgYnkgXEUpIGFuZCB1bnNldCBieSBcRSguCisjCisjIFVwZGF0ZSBieSBURCAtIDIwMDQ6CisjIEFkYXB0ZWQgZnJvbQorIwlodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnNodWZvcmQvdGVybWluYWwvYWRkc192aWV3cG9pbnRfbmV3cy50eHQKKyMKKyMgQ09NTUFORFMgICAgICAgICAgICAgICAgICAgICAgICBBU0NJSSBDT0RFCisjCisjIEFkZHJlc3MsIEFic29sdXRlICAgICAgICAgICAgICAgRVNDLD0scm93LGNvbHVtbgorIyBCZWVwICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJFTAorIyBBdXggUG9ydCBFbmFibGUgICAgICAgICAgICAgICAgIEVTQyxACisjIEF1eCBQb3J0IERpc2FibGUgICAgICAgICAgICAgICAgRVNDLEEKKyMgQmFja3NwYWNlICAgICAgICAgICAgICAgICAgICAgICBCUworIyBDdXJzb3IgYmFjayAgICAgICAgICAgICAgICAgICAgIEJTCisjIEN1cnNvciBkb3duICAgICAgICAgICAgICAgICAgICAgTEYKKyMgQ3Vyc29yIGZvcndhcmQgICAgICAgICAgICAgICAgICBGRgorIyBDdXJzb3IgaG9tZSAgICAgICAgICAgICAgICAgICAgIFJTCisjIEN1cnNvciB1cCAgICAgICAgICAgICAgICAgICAgICAgVlQKKyMgQ3Vyc29yIHN1cHJlc3MgICAgICAgICAgICAgICAgICBFVEIKKyMgQ3Vyc29yIGVuYWJsZSAgICAgICAgICAgICAgICAgICBDQU4KKyMgRXJhc2UgdG8gZW5kIG9mIGxpbmUgICAgICAgICAgICBFU0MsVAorIyBFcmFzZSB0byBlbmQgb2YgcGFnZSAgICAgICAgICAgIEVTQyxZCisjIEVyYXNlIHNjcmVlbiAgICAgICAgICAgICAgICAgICAgU1VCCisjIEtleWJvYXJkIGxvY2sgICAgICAgICAgICAgICAgICAgU0kKKyMgS2V5Ym9hcmQgdW5sb2NrICAgICAgICAgICAgICAgICBTTworIyBSZWFkIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uICAgIEVTQyw/CisjIFNldCBBdHRyaWJ1dGUgICAgICAgICAgICAgICAgICAgRVNDLDAseCAgKHNlZSBiZWxvdyBmb3IgdmFsdWVzIG9mIHgpCisjIFRhZyBiaXQgcmVzZXQgICAgICAgICAgICAgICAgICAgRVNDLCgKKyMgVGFnIGJpdCBzZXQgICAgICAgICAgICAgICAgICAgICBFU0MsKQorIyBUcmFuc3BhcmVudCBQcmludCBvbiAgICAgICAgICAgIEVTQywzCisjIFRyYW5zcGFyZW50IFByaW50IG9mZiAgICAgICAgICAgRVNDLDQKKyMKKyMKKyMgQVRUUklCVVRFUworIworIyBOb3JtYWwgICAgICAgICAgICAgICAgICAgICAgICAgIEAJMDEwMAorIyBIYWxmIEludGVuc2l0eSAgICAgICAgICAgICAgICAgIEEJMDEwMQorIyBCbGlua2luZyAgICAgICAgICAgICAgICAgICAgICAgIEIJMDEwMgorIyBIYWxmIEludGVuc2l0eSBCbGlua2luZyAgICAgICAgIEMJMDEwMworIyBSZXZlcnNlIFZpZGVvICAgICAgICAgICAgICAgICAgIFAJMDEyMAorIyBSZXZlcnNlIFZpZGVvIEhhbGYgSW50ZW5zaXR5ICAgIFEJMDEyMQorIyBSZXZlcnNlIFZpZGVvIEJsaW5raW5nICAgICAgICAgIFIJMDEyMgorIyBSZXZlcnNlIFZpZGVvIEhhbGYgSW50ZW5zaXR5CisjICAgIEJsaW5raW5nICAgICAgICAgICAgICAgICAgICAgUwkwMTIzCisjIFVuZGVybGluZWQgICAgICAgICAgICAgICAgICAgICAgYAkwMTQwCisjIFVuZGVybGluZWQgSGFsZiBJbnRlbnNpdHkgICAgICAgYQkwMTQxCisjIFVuZGVybGluZWQgQmxpbmtpbmcgICAgICAgICAgICAgYgkwMTQyCisjIFVuZGVybGluZWQgSGFsZiBJbnRlbnNpdHkKKyMgICAgQmxpbmtpbmcgICAgICAgICAgICAgICAgICAgICBjCTAxNDMKKyMgVmlkZW8gc3VwcHJlc3MgICAgICAgICAgICAgICAgICBECTAxMDQKK3ZwM2ErfHZpZXdwb2ludDNhK3xhZGRzIHZpZXdwb2ludCAzYSssCisJYW0sIGJ3LAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJsaW5rPVxFMEJcRSksIGNpdmlzPV5XLCBjbGVhcj1cRSokPDgwPiwgY25vcm09XlgsIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGltPVxFMEFcRSksCisJZWQ9XEVZJDw4MD4sIGVsPVxFVCwgaG9tZT1eXiwgaHQ9XkksIGluZD1eSiwgaW52aXM9XEUwRFxFKSwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBraG9tZT1eXiwKKwluZWw9Xk1eSiwgcmV2PVxFMFBcRSksIHJtc289XEUoLAorCXNncj0lPyVwMSVwMiV8JXAzJXwlcDQlfCVwNSV8JXA3JXwldFxFMCV7NjR9JT8lcDEldCV7MTd9JXwlOyU/JXAyJXQlezMyfSV8JTslPyVwMyV0JXsxNn0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDUldCV7MX0lfCU7JWMlPyVwNyV0RCU7XEUpJWVcRSglOywKKwlzZ3IwPVxFKCwgc21zbz1cRTBRXEUpLCBzbXVsPVxFMGBcRSksCit2cDYwfHZpZXdwb2ludDYwfGFkZHN2cDYwfGFkZHMgdmlld3BvaW50NjAsCisJdXNlPXJlZ2VudDQwLAorIworIyBhZGRzIHZpZXdwb2ludCA5MCAtIGZyb20gY29ybmVsbAorIyBOb3RlOiAgZW1hY3Mgc2VuZHMgZWkgb2NjYXNpb25hbGx5IHRvIGluc3VyZSB0aGUgdGVybWluYWwgaXMgb3V0IG9mCisjICAgICAgICBpbnNlcnQgbW9kZS4gVGhpcyB1bmZvcnR1bmF0ZWx5IHB1dHMgdGhlIHZpZXdwb2ludDkwIElOIGluc2VydAorIyAgICAgICAgbW9kZS4gIEEgaGFjayB0byBnZXQgYXJvdW5kIHRoaXMgaXMgPGljaDE9XEVGXHNcRUZeVT4uICAoQWxzbywKKyMgICAtICAgIDplaT06aW09OiBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHRlcm1jYXAgdHJhbnNsYXRpb24uKQorIyAgIC0gICAgPHhocD4gaW5kaWNhdGVzIGdsaXRjaCB0aGF0IGF0dHJpYnV0ZXMgc3RpY2sgdG8gbG9jYXRpb24KKyMgICAtICAgIDxtc2dyPiBtZWFucyBpdCdzIHNhZmUgdG8gbW92ZSBpbiBzdGFuZG91dCBtb2RlCisjICAgLSAgICA8Y2xlYXI9XEVHXEVrPjogY2xlYXJzIHNjcmVlbiBhbmQgdmlzdWFsIGF0dHJpYnV0ZXMgd2l0aG91dCBhZmZlY3RpbmcKKyMgICAgICAgICAgICAgICB0aGUgc3RhdHVzIGxpbmUKKyMgRnVuY3Rpb24ga2V5IGFuZCBsYWJlbCBjYXBhYmlsaXRpZXMgbWVyZ2VkIGluIGZyb20gU0NPLgordnA5MHx2aWV3cG9pbnQ5MHxhZGRzIHZpZXdwb2ludCA5MCwKKwlPVGJzLCBidywgbXNnciwgeGhwLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFR1xFaywgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eRiwKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5aLCBkY2gxPVxFRSwKKwlkbDE9XEVsLCBlZD1cRWssIGVsPVxFSywgaG9tZT1cRVlcc1xzLCBodD1eSSwKKwlpY2gxPVxFRiBcRUZcMDI1LCBpbmQ9XkosIGticz1eSCwga2N1YjE9XlUsIGtjdWQxPV5KLAorCWtjdWYxPV5GLCBrY3V1MT1eWiwga2YwPV5CMVxyLCBrZjE9XkIyXHIsIGtmMTA9XkI7XHIsCisJa2YyPV5CM1xyLCBrZjM9XkI0XHIsIGtmND1eQjVcciwga2Y1PV5CNlxyLCBrZjY9XkI3XHIsCisJa2Y3PV5COFxyLCBrZjg9XkI5XHIsIGtmOT1eQlw6XHIsIGtob21lPV5BLCBsZjA9RjEsIGxmMT1GMiwKKwlsZjEwPUYxMSwgbGYyPUYzLCBsZjM9RjQsIGxmND1GNSwgbGY1PUY2LCBsZjY9RjcsIGxmNz1GOCwgbGY4PUY5LAorCWxmOT1GMTAsIGxsPV5BLCBybXNvPVxFUlxFMEBcRVYsIHJtdWw9XEVSXEUwQFxFViwKKwlzZ3IwPVxFUlxFMEBcRVYsIHNtc289XEVSXEUwUVxFViwgc211bD1cRVJcRTBgXEVWLAorIyBOb3RlOiBpZiByZXR1cm4gYWN0cyB3ZWlyZCBvbiBhOTgwLCBjaGVjayBpbnRlcm5hbCBzd2l0Y2ggIzIKKyMgb24gdGhlIHRvcCBjaGlwIG9uIHRoZSBDT05UUk9MIHBjIGJvYXJkLgorYWRkczk4MHxhOTgwfGFkZHMgY29uc3VsIDk4MCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDE+XDAxM0AsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVeRTAxLCBjdXA9XDAxMyVwMSV7NjR9JSslY1xFXDAwNSVwMiUyZCwKKwlkbDE9XEVcMDE3JDwxMz4sIGlsMT1cRVwwMTYkPDEzPiwgaW5kPV5KLCBrZjA9XEUwLCBrZjE9XEUxLAorCWtmMj1cRTIsIGtmMz1cRTMsIGtmND1cRTQsIGtmNT1cRTUsIGtmNj1cRTYsIGtmNz1cRTcsIGtmOD1cRTgsCisJa2Y5PVxFOSwgcm1zbz1eTywgc2dyMD1eTywgc21zbz1eWV5eXk4sCisKKyMjIyMgQy4gSXRvaCBFbGVjdHJvbmljcworIworIyBBcyBvZiAxOTk1IHRoZXNlIHBlb3BsZSBubyBsb25nZXIgbWFrZSB0ZXJtaW5hbHMgKHRoZXkncmUgc3RpbGwgaW4gdGhlCisjIHByaW50ZXIgYnVzaW5lc3MpLiAgVGhlaXIgdGVybWluYWxzIHdlcmUgYWxsIGNsb25lcyBvZiB0aGUgREVDIFZUIHNlcmllcy4KKyMgVGhleSdyZSBsb2NhdGVkIGluIE9yYW5nZSBDb3VudHksIENBLgorIworCisjIENJVCA4MCAgLSB2dC01MiBlbXVsYXRvciwgdGhlIHRlcm1jYXAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmVtb3ZlCisjICAgICAgICAgICB0aGUgZGVsYXkgdGltZXMgYW5kIGRvIGFuIGF1dG8gdGFiIHNldCByYXRoZXIgdGhhbiB0aGUgaW5kaXJlY3QKKyMgICAgICAgICAgIGZpbGUgdXNlZCBpbiB2dDEwMC4KK2NpdDgwfGNpdC04MHxjaXRvaCA4MCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cRVtIXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSUyZDslcDIlMmRILCBjdXUxPVxFW0EsIGVkPVxFSiwgZWw9XEVLLCBmZj1eTCwKKwlpbmQ9XkosIGlzMj1cRT4sIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwgcm1reD1cRVs/MWxcRT4sIHNta3g9XEVbPzFoXEU9LAorIyBGcm9tOiBUaW0gV29vZCA8bXR4aW51IXN5YmFzZSF0aW0+IEZyaSBTZXAgMjcgMDk6Mzk6MTIgUERUIDE5ODUKKyMgKGNpdDEwMTogYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiBpbml0IHN0cmluZywgbWVyZ2VkIHRoaXMgd2l0aCBjMTAxIC0tIGVzcikKK2NpdDEwMXxjaXRjfEMuaXRvaCBmYXN0IHZ0MTAwLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVtWXEU4LCBjdWIxPV5ILCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGN2dmlzPVxFN1xFW1UsCisJZGNoMT1cRVtQLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywKKwlmbGFzaD1cRVs/NWgkPDIwMC8+XEVbPzVsLCBpY2gxPVxFW0AsIGlsMT1cRVtMLAorCWlzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVszZ1xFWz41ZywKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCXJtYW09XEVbPzdsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwKKyMgQ0lFIFRlcm1pbmFscyBDSVQtMTAxZSBmcm9tIEdlb2ZmIEt1ZW5uaW5nIDxjYWxsYW4hZ2VvZmY+IHZpYSBCUkwKKyMgVGhlIGZvbGxvd2luZyB0ZXJtY2FwIGVudHJ5IHdhcyBjcmVhdGVkIGZyb20gdGhlIENhbGxhbiBjZDEwMCBlbnRyeS4gIFRoZQorIyBsYXN0IHR3byBsaW5lcyAod2l0aCB0aGUgY2FwYWJpbGl0aWVzIGluIGNhcHMpIGFyZSB1c2VkIGJ5IFJNLWNvYm9sIHRvIGFsbG93CisjIGZ1bGwgc2VsZWN0aW9uIG9mIGNvbWJpbmF0aW9ucyBvZiByZXZlcnNlIHZpZGVvLCB1bmRlcmxpbmUsIGFuZCBibGluay4KKyMgKGNpdDEwMWU6IHJlbW92ZWQgdW5rbm93biA6ZjA9XEVPcDpmMT1cRU9xOmYyPVxFT3I6ZjM9XEVPczpmND1cRU90OmY1PVxFT3U6XAorIyBmNj1cRU92OmY3PVxFT3c6Zjg9XEVPeDpmOT1cRU95OkFCPVxFWzA7NW06QUw9XEVbbTpBUj1cRVswOzdtOkFTPVxFWzA7NTs3bTpcCisjIDpOQj1cRVswOzE7NW06Tk09XEVbMDsxbTpOUj1cRVswOzE7N206TlM9XEVbMDsxOzU7N206IC0tIGVzcikKK2NpdDEwMWV8Qy4gSXRvaCBDSVQtMTAxZSwKKwlPVGJzLCBPVHB0LCBhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9LCBjbGVhcj1cRVtIXEVbSiwgY25vcm09LCBjc3I9XEVbJWklcDElMmQ7JXAyJTJkciwKKwljdWQxPVxFW0IsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEgsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MWxcRVs/NGxcRVs/N2gsIGRjaDE9XEVbUCwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIGlsMT1cRVtMLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMD1cRU9ULAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPbSwga2Y2PVxFT2wsCisJa2Y3PVxFT00sIGtmOD1cRU9uLCByYz1cRTgsIHJpPVxFTSwgcm1hY3M9Xk8sIHJtaXI9XEVbNGwsCisJcm1reD1cRT4sIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsIHNtYWNzPV5OLCBzbWlyPVxFWzRoLAorCXNta3g9XEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyBGcm9tOiBEYXZpZCBTLiBMYXd5ZXIsIEp1bmUgMTk5NzoKKyMgVGhlIENJVCAxMDEtZSB3YXMgbWFkZSBpbiBKYXBhbiBpbiAxOTgzLTQgYW5kIGltcG9ydGVkIGJ5IENJRQorIyBUZXJtaW5hbHMgaW4gSXJ2aW5lLCBDQS4gIEl0IHdhcyBwYXJ0IG9mIENJVE9IIEVsZWN0cm9uaWNzLiAgSW4gdGhlCisjIGxhdGUgMTk4MCdzIENJVCBUZXJtaW5hbHMgd2VudCBvdXQgb2YgYnVzaW5lc3MuCisjIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHRoZSBpbml0aWFsaXphdGlvbiBzdHJpbmcgaXM9Li4uIChieSBpbnZva2luZworIyB0c2V0IG9yIHNldHRlcm0gZXRjLikgcHJvdmlkZWQgdGhhdCB0aGUgdGVybWluYWwgaGFzIGJlZW4gbWFudWFsbHkgc2V0CisjIHVwIChhbmQgdGhlIHNldHVwIHNhdmVkIHdpdGggXlMpIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIHRlcm1jYXAuICBUbyBiZQorIyBjb21wYXRpYmxlIGl0IHNob3VsZCBiZSBpbiBBTlNJIG1vZGUgKG5vdCBWVDUyKS4gICBBIHNldC11cCB0aGF0CisjIHdvcmtzIGlzIHRvIHNldCBhbGwgdGhlIG1hbnVhbGx5IHNldGFibGUgc3R1ZmYgdG8gZmFjdG9yeSBkZWZhdWx0cworIyBieSBwcmVzc2luZyBeRCBpbiBzZXQtdXAgbW9kZS4gIFRoZW4gaW5jcmVzZSB0aGUgYnJpZ2huZXNzIHdpdGggdGhlCisjIHVwLWFycm93IGtleSBzaW5jZSB0aGUgZmFjdG9yeSBkZWZhdWx0IHdpbGwgbGlrZWx5IGJlIGRpbSBvbiBhbiBvbGQKKyMgdGVybWluYWwuICBUaGVuIGNoYW5nZSBhbnkgb3B0aW9ucyB5b3Ugd2FudCAocHJvdmlkZWQgdGhhdCB0aGV5IGFyZQorIyBjb21wYXRpYmxlIHdpdGggdGhlIHRlcm1jYXApLiAgRm9yIG15IHRlcm1pbmFsIEkgc2V0OiBTY3JlZW4KKyMgQmFja2dyb3VuZDogbGlnaHQ7IEtleWNsaWNrczogc2lsZW50OyBBdXRvIHdyYXBhcm91bmQ6IG9uOyBDUlQgc2F2ZXI6CisjIG9uLiAgSSBhbHNvIHNldCB1cCBtaW5lIGZvciBwYXJpdHkgKGJ1dCB5b3UgbWF5IG5vdCBuZWVkIGl0KS4gIFRoZW4KKyMgc2F2ZSB0aGUgc2V0dXAgd2l0aCBeUy4KKyMgKGNpdDEwMWUtcnY6IGFkZGVkIGVtcHR5IDxybWN1cD4gdG8gc3VwcHJlc3MgYSB0aWMgd2FybmluZy4gLS1lc3IpCitjaXQxMDFlLXJ2fENpdG9oIENJVC0xMDFlIChzZXRzIHJldmVyc2UgdmlkZW8pLAorCWFtLCBlbywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJT1RubD1cRU0sIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLAorCWNpdmlzPVxFWzF2LCBjbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbMDszOzR2LCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbMzs1diwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGZsYXNoPVxFWz81bFxFWz81aCQ8MjAwLz4sCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpbmRuPVxFWyVwMSVkUywKKwlpczI9XEU8XEU+XEVbPzFsXEVbPzNsXEVbPzRsXEVbPzVoXEVbPzdoXEVbPzhoXEVbM2dcRVs+NWdcRShCXEVbbVxFWzIwbFxFWzE7MjRyXEVbMjQ7MUgsCisJa2JzPVwxNzcsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIG5lbD1cRUUsIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcmluPVxFWyVwMSVkVCwgcm1jdXA9LCBybWlyPVxFWzRsLAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczE9XEVjXEVbPzdoXEVbPjVnLCBzYz1cRTcsCisJc2dyMD1cRVttLCBzbWN1cD1cRVs+NWdcRVs/N2hcRVs/NWgsIHNtaXI9XEVbNGgsCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLCB1Nj1cRVslaSVwMSVkOyVwMiVkUiwKKwl1Nz1cRVs2biwgdTg9XEVbPzZjLCB1OT1cRVtjLAorY2l0MTAxZS1ufENJVC0xMDFlIHcvbyBhbSwKKwlhbUAsCisJY3Z2aXM9XEVbPzFsXEVbPzRsXEVbPzdsLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwl1c2U9Y2l0MTAxZSwKK2NpdDEwMWUtMTMyfENJVC0xMDFlIHdpdGggMTMyIGNvbHMsCisJY29scyMxMzIsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIHVzZT1jaXQxMDFlLAorY2l0MTAxZS1uMTMyfENJVC0xMDFlIHdpdGggMTMyIGNvbHMgdy9vIGFtLAorCWFtQCwKKwljb2xzIzEzMiwKKwljdnZpcz1cRVs/MWxcRVs/NGxcRVs/N2wsIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCXVzZT1jaXQxMDFlLAorIyBDSUUgVGVybWluYWxzIENJVC01MDAgZnJvbSBCUkwKKyMgVGhlIGZvbGxvd2luZyBTRVQtVVAgbW9kZXMgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCUdFTkVSQVRFX1hPTi9YT0ZGOllFUwlEVVBMRVg6RlVMTAkJTkVXTElORTpPRkYKKyMJQVVUT1dSQVA6T04JCU1PREU6QU5TSQkJU0NSRUVOX0xFTkdUSDo2NF9MSU5FUworIwlEU1BMWV9DTlRSTF9DT0RFUz9OTwlQQUdFX1dJRFRIOjgwCQlFRElUX01PREU6T0ZGCisjIE90aGVyIFNFVC1VUCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50cy4KKyMgSGFyZHdhcmUgdGFicyBhcmUgYXNzdW1lZCB0byBiZSBzZXQgZXZlcnkgOCBjb2x1bW5zOyB0aGV5IGNhbiBiZSBzZXQgdXAKKyMgYnkgdGhlICJyZXNldCIsICJ0c2V0Iiwgb3IgInRhYnMiIHV0aWxpdGllcy4gIE5vIGRlbGF5cyBhcmUgc3BlY2lmaWVkOyB1c2UKKyMgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgKGNpdDUwMDogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCitjaXQ1MDB8Q0lFIFRlcm1pbmFscyBDSVQtNTAwLAorCU9UYnMsIE9UcHQsIG1pciwgbXNnciwgeG9uLAorCU9Ua24jMTAsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzY0LCB2dCMzLAorCWFjc2M9LCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwKKwljbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVNLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpczI9XEU8XEUpMCwga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2RjaDE9XEVbUCwga2RsMT1cRVtNLAorCWtlZD1cRUosIGtlbD1cRUssIGtmMD1cRU9QLCBrZjE9XEVPUSwga2YyPVxFT1IsIGtmMz1cRU9TLAorCWtmND1cRU9VLCBrZjU9XEVPViwga2Y2PVxFT1csIGtmNz1cRU9YLCBrZjg9XEVPWSwga2Y5PVxFT1osCisJa2hvbWU9XEVbSCwga2ljaDE9XEVbNGgsIGtpbDE9XEVbTCwga3JtaXI9XEVbNGwsIGxmMD1QRjEsCisJbGYxPVBGMiwgbGYyPVBGMywgbGYzPVBGNCwgbGY0PUYxNSwgbGY1PUYxNiwgbGY2PUYxNywgbGY3PUYxOCwKKwlsZjg9RjE5LCBsZjk9RjIwLCBsbD1cRVs2NEgsIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFTSwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczE9XEU8XEUyXEVbMjBsXEVbPzZsXEVbclxFW21cRVtxXEUoQlwwMTdcRSkwXEU+LAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKworIyBDLiBJdG9oIHByaW50ZXJzIGJlZ2luIGhlcmUKK2NpdG9ofGNpODUxMHw4NTEwfGMuaXRvaCA4NTEwYSwKKwljb2xzIzgwLCBpdCM4LAorCWJvbGQ9XEUhLCBjdWIxQCwKKwlpczI9XEUoMDA5XCwwMTdcLDAyNVwsMDMzXCwwNDFcLDA0OVwsMDU3XCwwNjVcLDA3My4sCisJcmVwPVxFUiVwMiUwM2QlcDElYywgcmk9XEVyLCBybXVsPVxFWSwgc2dyMD1cRSJcRVksCisJc211bD1cRVgsIHVzZT1scHIsCitjaXRvaC1waWNhfGNpdG9oIGluIHBpY2EsCisJaXMxPVxFTiwgdXNlPWNpdG9oLAorY2l0b2gtZWxpdGV8Y2l0b2ggaW4gZWxpdGUsCisJY29scyM5NiwKKwlpczE9XEVFLAorCWlzMj1cRSgwMDlcLDAxN1wsMDI1XCwwMzNcLDA0MVwsMDQ5XCwwNTdcLDA2NVwsMDczXCwwODFcLDA4OS4sCisJdXNlPWNpdG9oLAorY2l0b2gtY29tcHxjaXRvaCBpbiBjb21wcmVzc2VkLAorCWNvbHMjMTM2LAorCWlzMT1cRVEsCisJaXMyPVxFKDAwOVwsMDE3XCwwMjVcLDAzM1wsMDQxXCwwNDlcLDA1N1wsMDY1XCwwNzNcLDA4MVwsMDg5XCwwOTdcLDEwNVwsMTEzXCwxMjFcLDEyOS4sCisJdXNlPWNpdG9oLAorIyBjaXRvaCBoYXMgaW5maW5pdGUgY29scyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgbHAgZXZlciBpbnNlcnRpbmcgXG5cdCoqLgorY2l0b2gtcHJvcHxjaXRvaC1wc3xpcHN8Y2l0b2ggaW4gcHJvcG9ydGlvbmFsIHNwYWNpbmcgbW9kZSwKKwljb2xzIzMyNzY3LAorCWlzMT1cRVAsIHVzZT1jaXRvaCwKK2NpdG9oLTZscGl8Y2l0b2ggaW4gNiBsaW5lcyBwZXIgaW5jaCBtb2RlLAorCWlzMz1cRUEsIHVzZT1jaXRvaCwKK2NpdG9oLThscGl8Y2l0b2ggaW4gOCBsaW5lcyBwZXIgaW5jaCBtb2RlLAorCWxpbmVzIzg4LAorCWlzMz1cRUIsIHVzZT1jaXRvaCwKKworIyMjIyBDb250cm9sIERhdGEgKGNkYykKKyMKKworY2RjNDU2fGNkYyA0NTYgdGVybWluYWwsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eWV5YLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEUxJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5aLCBkbDE9XEVKLCBlZD1eWCwKKwllbD1eViwgaG9tZT1eWSwgaWwxPVxFTCwgaW5kPV5KLAorCisjIEFzc29ydGVkIENEQyB0ZXJtaW5hbHMgZnJvbSBCUkwgKGltcHJvdmVtZW50cyBieSBEQUcgJiBGZXJkIEJydW5kaWNrKQorY2RjNzIxfENEQyBWaWtpbmcsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XkwsIGN1ZjE9XlgsIGN1cD1cMDAyJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLAorCWN1dTE9XlcsIGVsPV5LLCBob21lPV5ZLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5JLAorCWtjdXUxPV5XLCBraG9tZT1eWSwKK2NkYzcyMWxsfENEQyBWaWtpbmdsbCwKKwlPVGJzLCBhbSwKKwljb2xzIzEzMiwgbGluZXMjMjQsCisJY2xlYXI9XkwsIGN1ZjE9XlgsIGN1cD1cMDAyJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLAorCWN1dTE9XlcsIGVsPV5LLCBob21lPV5ZLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5JLAorCWtjdXUxPV5XLCBraG9tZT1eWSwKKyMgKGNkYzc1MjogdGhlIEJSTCBlbnRyeSBoYWQgOmxsPVxFMSAgXlo6IGNvbW1lbnRlZCBvdXQKK2NkYzc1MnxDREMgNzUyLAorCU9UYnMsIGFtLCBidywgeGhwLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAzMFxFMVxzXHMsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5VLAorCWN1cD1cRTElcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XlosIGVsPV5WLAorCWhvbWU9XEUxXHNccywgaW5kPV5KLCBsbD1eWSwgcnMxPVxFMSAgXDAzMFwwMDJcMDAzXDAxNywKKyMgQ0RDIDc1NgorIyBUaGUgZm9sbG93aW5nIHN3aXRjaC9rZXkgc2V0dGluZ3MgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCTk2IGNoYXJzCVNDUk9MTAkJRlVMTCBkdXBsZXgJbm90IEJMT0NLCisjIE90aGVyIHN3aXRjaGVzIG1heSBiZSBzZXQgYWNjb3JkaW5nIHRvIGNvbW11bmljYXRpb24gcmVxdWlyZW1lbnRzLgorIyBJbnNlcnQvZGVsZXRlLWNoYXJhY3RlciBjYW5ub3QgYmUgdXNlZCwgYXMgdGhlIHdob2xlIGRpc3BsYXkgaXMgYWZmZWN0ZWQuCisjICJzbyIgJiAic2UiIGFyZSBjb21tZW50ZWQgb3V0IHVudGlsIGpvdmUgaGFuZGxlcyAic2ciIGNvcnJlY3RseS4KK2NkYzc1NnxDREMgNzU2LAorCU9UYnMsIGFtLCBidywKKwlPVGtuIzEwLCBjb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5ZXlgsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5VLAorCWN1cD1cRTElcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XlosCisJZGwxPVxFSiQ8NiovPiwgZWQ9XlgsIGVsPV5WLCBob21lPV5ZLCBpbDE9XEVMJDw2Ki8+LCBpbmQ9XkosCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5VLCBrY3V1MT1eWiwga2RjaDE9XEVJLAorCWtkbDE9XEVMLCBrZWQ9XlgsIGtlbD1eViwga2YwPVxFQSwga2YxPVxFQiwga2YyPVxFQywga2YzPVxFRCwKKwlrZjQ9XEVFLCBrZjU9XEVGLCBrZjY9XEVHLCBrZjc9XEVILCBrZjg9XEVhLCBrZjk9XEViLCBraG9tZT1eWSwKKwlraHRzPV5PLCBraWNoMT1cRUssIGtpbDE9XEVMLCBsZjA9RjEsIGxmMT1GMiwgbGYyPUYzLCBsZjM9RjQsCisJbGY0PUY1LCBsZjU9RjYsIGxmNj1GNywgbGY3PUY4LCBsZjg9RjksIGxmOT1GMTAsIGxsPV5ZXlosCisJcnMxPVwwMzFcMDMwXDAwMlwwMDNcMDE3LAorIworIyBDREMgNzIxIGZyb20gUm9iZXJ0IFZpZHV5YSwgR2EuIFRlY2guIDxpaG5wNCFnYXRlY2ghZ2l0cHlyIXJvYmVydD4gdmlhIEJSTC4KKyMKKyMgUGFydCBvZiB0aGUgbG9uZyBpbml0aWFsaXphdGlvbiBzdHJpbmcgZGVmaW5lcyB0aGUgIkRPV04iIGtleSB0byB0aGUgbGVmdAorIyBvZiB0aGUgdGFiIGtleSB0byBzZW5kIGFuIEVTQy4gIFRoZSByZWFsIEVTQyBrZXkgaXMgcG9zaXRpb25lZCB3YXkgb3V0CisjIGluIHJpZ2h0IGZpZWxkLgorIworIyBUaGUgdGVybWNhcCB3b24ndCB3b3JrIGluIDEzMiBjb2x1bW4gbW9kZSBkdWUgdG8gdGhlIHdheSBpdCBpdCBtb3ZlcyB0aGUKKyMgY3Vyc29yLiAgVGVybWNhcCBkb2Vzbid0IGhhdmUgdGhlIGNhcGFiaWxpdHkgKGFzIGZhciBhcyBJIGNvdWxkIHRlbGwpIHRvCisjIGhhbmRsZSB0aGUgNzIxIGluIDEzMiBjb2x1bW4gbW9kZS4KKyMKKyMgKGNkYzcyMTogY2hhbmdlZCA6cmk6IHRvIDpzcjogLS0gZXNyKQorY2RjNzIxLWVzY3xDb250cm9sIERhdGEgNzIxLAorCU9UYnMsIE9UcHQsIGFtLCBidywgbXNnciwgeG9uLAorCU9Ua24jMTAsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzMwLAorCWJlbD1eRywgYmxpbms9Xk4sIGNidD1eXl5LLCBjbGVhcj1eTCwgY3ViMT1eSCwgY3VkMT1eWiwKKwljdWYxPV5YLCBjdXA9XDAwMiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eVywKKwlkY2gxPV5eTiwgZGltPV5cLCBkbDE9Xl5RLCBlZD1eXlAsIGVsPV5LLCBob21lPV5ZLCBodHM9Xl5eUlcsCisJaWNoMT1eXk8sIGlsMT1eXlIsIGluZD1cMDM2VyA9XDAzNlUsIGludmlzPV5eXlJbLAorCWlzMj1cMDM2XDAyMkJcMDAzXDAzNlwwMzVcMDE3XDAyMlwwMjVcMDM1XDAzNkVcMDM2XDAyMkhcMDM2XDAyMkpcMDM2XDAyMkxcMDM2XDAyMk5cMDM2XDAyMlBcMDM2XDAyMlFcMDM2XDAyMlwwMzZcMDIyXF5cMDM2XDAyMmJcMDM2XDAyMmlcMDM2VyA9XDAzNlwwMjJaXDAzNlwwMTFDMS1gIGAhay9vLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5aLCBrY3VmMT1eWCwga2N1dTE9XlcsIGtmMD1eXnEsCisJa2YxPV5eciwga2YyPV5ecywga2YzPV5edCwga2Y0PV5edSwga2Y1PV5ediwga2Y2PV5edywga2Y3PV5eeCwKKwlrZjg9Xl55LCBrZjk9Xl56LCBraG9tZT1eWSwgbGw9XkIgPSwgcmV2PV5eRCwKKwlyaT1cMDM2VyA9XDAzNlYsIHJtaXI9LCBybWt4PV5eXlJsLCBybXNvPV5eRSwgcm11bD1eXSwKKwlzZ3IwPVwwMTdcMDI1XDAzNVwwMzZFXDAzNlwwMjJcXCwgc21pcj0sIHNta3g9Xl5eUmssCisJc21zbz1eXkQsIHNtdWw9XlwsIHRiYz1eXl5SWSwKKworIyMjIyBHZXRyb25pY3MKKyMKKyMgR2V0cm9uaWNzIGlzIGEgRHV0Y2ggZWxlY3Ryb25pY3MgY29tcGFueSB0aGF0IGF0IG9uZSB0aW1lIHdhcyBjYWxsZWQKKyMgYEdldmVrZScgYW5kIG1hZGUgYXN5bmMgdGVybWluYWxzOyBidXQgKGFjY29yZGluZyB0byB0aGUgY29tcGFueSBpdHNlbGYhKQorIyB0aGV5J3ZlIGxvc3QgYWxsIHRoZWlyIGRvY3VtZW50YXRpb24gb24gdGhlIGNvbW1hbmQgc2V0LiAgVGhlIGhhcmR3YXJlCisjIGRvY3VtZW50YXRpb24gc3VnZ2VzdHMgdGhlIHRlcm1pbmFscyB3ZXJlIGFjdHVhbGx5IG1hbnVmYWN0dXJlZCBieSBhCisjIFRhaXdhbmVzZSBlbGVjdHJvbmljcyBjb21wYW55IG5hbWVkIENhbC1Db21wLiAgVGhlcmUgYXJlIGtub3duCisjIHRvIGhhdmUgYmVlbiBhdCBsZWFzdCB0d28gbW9kZWxzLCB0aGUgMzMgYW5kIHRoZSA1MC4KKyMKKworIyBUaGUgNTAgc2VlbXMgdG8gYmUgYSB0b3AgZW5kIHZ0MjIwIGNsb25lLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIGhpZ2hlcgorIyBzY3JlZW4gcmVzb2x1dGlvbiwgYSBsYXJnZXIgc2NyZWVuLCBhdCBsZWFzdCAxIHBhZ2Ugb2YgbWVtb3J5IGFib3ZlIGFuZAorIyBiZWxvdyB0aGUgc2NyZWVuLCBhcHBhcmVudGx5IHBhZ2VzIG9mIG1lbW9yeSByaWdodCBhbmQgbGVmdCBvZiB0aGUgc2NyZWVuCisjIHdoaWNoIGNhbiBiZSBwYW5uZWQsIGFuZCBhYm91dCA3NSBmdW5jdGlvbiBrZXlzICgxNSBmdW5jdGlvbiBrZXlzIHggbm9ybWFsLAorIyBzaGlmdCwgY29udHJvbCwgZnVuYyBBLCBmdW5jIEIpLiBJdCBhbHNvIGhhcyBtb3JlIHNldHVwIHBvc3NpYmlsaXRpZXMgdGhhbgorIyB0aGUgdnQyMjAuIFRoZSBtb25pdG9yIGNhc2UgaXMgZGF0ZWQgTm92ZW1iZXIgMTk3OCBhbmQgdGhlIGtleWJvYXJkIGNhc2UgaXMKKyMgTWF5IDE5ODIuCisjCisjIFRoZSB2dDEwMCBlbXVsYXRpb24gd29ya3MgYXMgaXMuICBUaGUgZW50cnkgYmVsb3cgZGVzY3JpYmVzIHRoZSByYXRoZXIKKyMgbm9uLWNvbmZvcm1hbnQgKGJ1dCBtb3JlIGZlYXR1cmVmdWwpIEFOU0kgbW9kZS4KKyMKKyMgRnJvbTogU3RlcGhlbiBQZXRlcnNvbiA8c3R2QHV0cmVjaHQub3cubmw+LCAyNyBNYXkgMTk5NQordmlzYTUwfGdldmVrZSB2aXNhIDUwIHRlcm1pbmFsIGluIGFuc2kgODAgY2hhcmFjdGVyIG1vZGUsCisJYncsIG1pciwgbXNnciwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwlhY3NjPTBfYWFmZmdnaCBqamtrbGxtbW5ub29xcXNzdHR1dXZ2d3d4eCwgYmVsPV5HLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRYLCBkY2gxPVxFW1gsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBmbGFzaD1cRVs/NWhcRVs/NWwsIGhvbWU9XEVbSCwKKwlocGE9XEVbJWklcDElZEcsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVs4bSwKKwlpczI9XEUwOzJtXEVbMTsyNXJcRVsyNTsxSFxFWz8zbFxFWz83aFxFWz84aCwKKwlrYTE9XEVbZiwga2EzPVxFT1EsIGtiMj1cRU9QLCBrYnM9XkgsIGtjMT1cRU9SLCBrYzM9XEVPUywKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtBLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cMTc3LAorCWtkbDE9XEVPUywga2YwPVxFMDEwLCBrZjE9XEUwMDEsIGtmMTA9XEUwMTEsIGtmMj1cRTAwMiwKKwlrZjM9XEUwMDMsIGtmND1cRTAwNCwga2Y1PVxFMDA1LCBrZjY9XEUwMDYsIGtmNz1cRTAwNywKKwlrZjg9XEUwMDgsIGtmOT1cRTAwOSwga2hvbWU9XEVbZiwgbGYyPUEgZGVsZXRlIGNoYXIsCisJbGYzPUEgaW5zZXJ0IGxpbmUsIGxmND1BIGRlbGV0ZSBsaW5lLCBsZjU9QSBjbGVhciwKKwlsZjY9QSBjZSBvZi9jZiBnbiwgbGY3PUEgcHJpbnQsIGxmOD1BIG9uLWxpbmUsCisJbGY5PUEgZnVuY2wwPUEgc2VuZCwgbmVsPV5NXkosIHJldj1cRVs3bSwgcm1hY3M9XEVbM2wsCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEU+LCBybXNvPVxFWzA7Mm0sCisJcm11bD1cRVswbSwgc2dyMD1cRVswOzJtLCBzbWFjcz1cRTNoLCBzbWFtPVxFPzdoLAorCXNtaXI9XEVbNGgsIHNta3g9XEU9LCBzbXNvPVxFWzI7N20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl2cGE9XEVbJWklcDElZGQsCisKKyMjIyMgSHVtYW4gRGVzaWduZWQgU3lzdGVtcyAoQ29uY2VwdCkKKyMKKyMJSHVtYW4gRGVzaWduZWQgU3lzdGVtcworIwk0MDAgRmVobGV5IERyaXZlCisjCUtpbmcgb2YgUHJ1c3NpYSwgUEEgMTk0MDYKKyMJVm94OiAoNjEwKS0yNzctODMwMAorIwlGYXg6ICg2MTApLTI3NS01NzM5CisjCU5ldDogc3VwcG9ydEBoZHMuY29tCisjCisjIEpvaG4gTWFydGluIDxqb2huQGhkcy5jb20+IGlzIHRoZWlyIHRlcm1jYXAgZXhwZXJ0LiAgVGhleSdyZSBtb3N0bHkgb3V0IG9mCisjIHRoZSBjaGFyYWN0ZXItdGVybWluYWwgYnVzaW5lc3Mgbm93ICgxOTk1KSBhbmQgbWFraW5nIFggdGVybWluYWxzLiAgSW4KKyMgcGFydGljdWxhciwgdGhlIHdob2xlIGBDb25jZXB0JyBsaW5lIGRlc2NyaWJlZCBoZXJlIHdhcyBkaXNjb250aW51ZWQgbG9uZworIyBhZ28uCisjCisKKyMgRnJvbTogPHZheDEzNSFocGs+ICBTYXQgSnVuIDI3IDA3OjQxOjIwIDE5ODEKKyMgRXh0ZW5zaXZlIGNoYW5nZXMgdG8gYzEwOCBieSBhcnBhdmF4OmVyaWMgRmViIDE5ODIKKyMgU29tZSB1bmtub3duIHBlcnNvbiBhdCBTQ08gdGhlbiB0cmFuc2xhdGVkIGl0IHRvIHRlcm1pbmZvLgorIworIyBUaGVyZSBzZWVtIHRvIGJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgQzEwOCBQUk9NUworIyAod2l0aCBidWcgZml4ZXMgaW4gaXRzIFotODAgcHJvZ3JhbSkuCisjCisjIFRoZSBmaXJzdCBvbmUgdGhhdCB3ZSBoYWQgd291bGQgbG9jayBvdXQgdGhlIGtleWJvYXJkIG9mIHlvdQorIyBzZW50IGxvdHMgb2Ygc2hvcnQgbGluZXMgKGxpa2UgL3Vzci9kaWN0L3dvcmRzKSBhdCA5NjAwIGJhdWQuCisjIFRyeSB0aGF0IG9uIHlvdXIgQzEwOCBhbmQgc2VlIGlmIGl0IHNlbmRzIGEgXlMgd2hlbiB5b3UgdHlwZSBpdC4KKyMgSWYgc28sIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBQUk9Ncy4KKyMKKyMgWW91IHNob3VsZCBjb25maWd1cmUgdGhlIEMxMDggdG8gc2VuZCBeUy9eUSBiZWZvcmUgcnVubmluZyB0aGlzLgorIyBJdCBpcyBtdWNoIGZhc3RlciAoYXQgOTYwMCBiYXVkKSB0aGFuIHRoZSBjMTAwIGJlY2F1c2UgdGhlIGRlbGF5cworIyBhcmUgbm90IGZpeGVkLgorIyBuZXcgc3RhdHVzIGxpbmUgZGlzcGxheSBlbnRyaWVzIGZvciBjMTA4LThwOgorIyA8aXMzPiAtIGluaXQgc3RyICMzIC0gc2V0dXAgdGVybSBmb3Igc3RhdHVzIGRpc3BsYXkgLQorIyBzZXQgcHJvZ3JhbW1lciBtb2RlLCBzZWxlY3Qgd2luZG93IDIsIGRlZmluZSB3aW5kb3cgYXQgbGFzdAorIyBsaW5lIG9mIG1lbW9yeSwgc2V0IGJrZ25kIHN0YXQgbWVzZyB0aGVyZSwgc2VsZWN0IHdpbmRvdyAwLgorIworIyA8dHNsPiAtIHRvIHN0YXR1cyBsaW5lIC0gc2VsZWN0IHdpbmRvdyAyLCBob21lIGN1cnNvciwgZXJhc2UgdG8KKyMgZW5kLW9mLXdpbmRvdywgMS8yIGJyaWdodCBvbiwgZ290byhsaW5lIzAsIGNvbCM/KQorIworIyA8ZnNsPiAtIGZyb20gc3RhdHVzIGxpbmUgLSAxLzIgYnJpZ2h0IG9mZiwgc2VsZWN0IHdpbmRvdyAwCisjCisjIDxkc2w+IC0gZGlzYWJsZSBzdGF0dXMgZGlzcGxheSAtIHNldCBia2duZCBzdGF0dXMgbWVzZyB3aXRoCisjIGlsbGVnYWwgd2luZG93ICMKKyMKKyMgVGhlcmUgYXJlIHByb2JhYmx5IG1vcmUgZnVuY3Rpb24ga2V5cyB0aGF0IHNob3VsZCBiZSBhZGRlZCBidXQKKyMgSSBkb24ndCBrbm93IHdoYXQgdGhleSBhcmUuCisjCisjIE5vIGRlbGF5cyBuZWVkZWQgb24gYzEwOCBiZWNhdXNlIG9mIF5TL15RIGhhbmRzaGFraW5nCisjCitjMTA4fGNvbmNlcHQxMDh8YzEwOC04cHxjb25jZXB0MTA4LThwfGNvbmNlcHQgMTA4IHcvOCBwYWdlcywKKwlpczM9XEVVXEUgeiJcRXZcMDAxXDE3NyAhcFxFIDsiXEUgeiBcRXYgIFwwMDFcMTc3cFxFcFxuLAorCXJtY3VwPVxFdiAgXDAwMVwxNzdwXEVwXHJcbiwgdXNlPWMxMDgtNHAsCitjMTA4LTRwfGNvbmNlcHQxMDgtNHB8Y29uY2VwdCAxMDggdy80IHBhZ2VzLAorCU9UYnMsIGVzbG9rLCBocywgeG9uLAorCXBiQCwKKwlhY3NjPWpFa1RsXFxtTXFMeFUsIGNub3JtPVxFdywgY3I9Xk0sCisJY3VwPVxFYSVwMSU/JXAxJXs5NX0lPiV0XDAwMSV7OTZ9JS0lOyV7MzJ9JSslYyVwMiU/JXAyJXs5NX0lPiV0XDAwMSV7OTZ9JS0lOyV7MzJ9JSslYywKKwljdnZpcz1cRVcsIGRjaDE9XEUgMSQ8MTYqPiwgZHNsPVxFIDtcMTc3LCBmc2w9XEVlXEUgelxzLAorCWluZD1eSiwgaXMxPVxFS1xFIVxFIEYsCisJaXMzPVxFVVxFIHoiXEV2XDE3NyAhcFxFIDsiXEUgeiBcRXYgIFwwMDEgcFxFcFxuLAorCXJtYWNzPVxFalxzLCBybWN1cD1cRXYgIFwwMDEgcFxFcFxyXG4sIHNtYWNzPVxFaiEsCisJc21jdXA9XEVVXEV2ICA4cFxFcFxyXEVcMDI1LAorCXRzbD1cRSB6IlxFP1xFXDAwNVxFRVxFYSAlK1xzLCB1c2U9YzEwMCwKK2MxMDgtcnZ8YzEwOC1ydi04cHxjb25jZXB0IDEwOCB3LzggcGFnZXMgaW4gcmV2ZXJzZSB2aWRlbywKKwlybWN1cD1cRXYgIFwwMDIgcFxFcFxyXG4sIHNtY3VwPVxFVVxFdiAgOHBcRXBcciwKKwl1c2U9YzEwOC1ydi00cCwKK2MxMDgtcnYtNHB8Y29uY2VwdDEwOHJ2NHB8Y29uY2VwdCAxMDggdy80IHBhZ2VzIGluIHJldmVyc2UgdmlkZW8sCisJZmxhc2g9XEVLJDwyMDA+XEVrLCBpczE9XEVrLCBybXNvPVxFZSwgc21zbz1cRUUsCisJdXNlPWMxMDgtNHAsCitjMTA4LXd8YzEwOC13LThwfGNvbmNlcHQxMDgtdy04fGNvbmNlcHQxMDgtdzhwfGNvbmNlcHQgMTA4IHcvOCBwYWdlcyBpbiB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJaXMxPVxFIEZcRSIsIHJtY3VwPVxFdiAgXkEwXDAwMURcRXBcclxuLAorCXNtY3VwPVxFVVxFdiAgOFwwMDFEXEVwXHIsIHVzZT1jMTA4LThwLAorCisjIENvbmNlcHQgMTAwOgorIyBUaGVzZSBoYXZlIG9ubHkgd2luZG93IHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLCBub3Qgc2NyZWVuCisjIHJlbGF0aXZlLiBUbyBnZXQgaXQgdG8gd29yayByaWdodCBoZXJlLCBzbWN1cC9ybWN1cCAod2hpY2gKKyMgd2VyZSBpbnZlbnRlZCBmb3IgdGhlIGNvbmNlcHQpIGxvY2sgeW91IGludG8gYSBvbmUgcGFnZQorIyB3aW5kb3cgZm9yIHNjcmVlbiBzdHlsZSBwcm9ncmFtcy4KKyMKKyMgVG8gZ2V0IG91dCBvZiB0aGUgb25lIHBhZ2Ugd2luZG93LCB3ZSB1c2UgYSBjbGV2ZXIgdHJpY2s6CisjIHdlIHNldCB0aGUgd2luZG93IHNpemUgdG8gemVybyAoIlxFdiAgICAiIGluIHJtY3VwKSB3aGljaCB0aGUKKyMgdGVybWluYWwgcmVjb2duaXplcyBhcyBhbiBlcnJvciBhbmQgcmVzZXRzIHRoZSB3aW5kb3cgdG8gYWxsCisjIG9mIG1lbW9yeS4KKyMKKyMgVGhpcyB0cmljayB3b3JrcyBvbiBjMTAwIGJ1dCBkb2VzIG5vdCBvbiBjMTA4LCBzaWdoLgorIworIyBTb21lIHR0eSBkcml2ZXJzIHVzZSBjcjMgZm9yIGNvbmNlcHQsIG90aGVycyB1c2UgbmwzLCBoZW5jZQorIyB0aGUgZGVsYXlzIG9uIGNyIGFuZCBpbmQgYmVsb3cuIFRoaXMgcGFkZGluZyBpcyBvbmx5IG5lZWRlZCBhdAorIyA5NjAwIGJhdWQgYW5kIHVwLiAgT25lIG9yIHRoZSBvdGhlciBpcyBjb21tZW50ZWQgb3V0IGRlcGVuZGluZyBvbgorIyBsb2NhbCBjb252ZW50aW9ucy4KKyMKKyMgMiBtcyBwYWRkaW5nIG9uIDxybWN1cD4gaXNuJ3QgYWx3YXlzIGVub3VnaC4gNiB3b3JrcyBmaW5lLiBNYXliZQorIyBsZXNzIHRoYW4gNiBidXQgbW9yZSB0aGFuIDIgd2lsbCB3b3JrLgorIworIyBOb3RlOiBjYW4ndCB1c2UgZnVuY3Rpb24ga2V5cyBmNy1mMTAgYmVjYXVzZSB0aGV5IGFyZQorIyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFycm93IGtleXMgKCEpLCBhbHNvLCBkZWwgY2hhciBhbmQKKyMgY2xlYXIgZW9sIHVzZSB4b24veG9mZiBzbyB0aGV5IHByb2JhYmx5IHdvbid0IHdvcmsgdmVyeSB3ZWxsLgorIworIyBBbHNvIG5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgaW5zcnQvZGVsIGNoYXIvZGVsbGluZS9lb3Avc2VuZAorIyBiZWNhdXNlIHRoZXkgZG9uJ3QgdHJhbnNtaXQgdW5sZXNzIHdlIHJlc2V0IHRoZW0gLSBJIGZpZ3VyZWQKKyMgaXQgd2FzIGEgYmFkIGlkZWEgdG8gY2xvYmJlciB0aGVpciBkZWZpbml0aW9ucy4KKyMKKyMgVGhlIDxtYzU+IHNlcXVlbmNlIGNoYW5nZXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgdG8gXl4gc28gdGhhdAorIyBlc2NhcGVzIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHByaW50ZXIuIE9ubHkgdHJvdWJsZQorIyBpcyB0aGF0IF5eIHdvbid0IGJlIC0gXl4gd2FzIGNob3NlbiB0byBiZSB1bmxpa2VseS4KKyMgVW5mb3J0dW5hdGVseSwgaWYgeW91J3JlIHNlbmRpbmcgcmFzdGVyIGJpdHMgdGhyb3VnaCB0byBiZQorIyBwbG90dGVkLCBhbnkgY2hhcmFjdGVyIHlvdSBjaG9vc2Ugd2lsbCBiZSBsaWtlbHksIHNvIHdlIGxvc2UuCisjCisjIFxFUSJcRVkoXlcgKHNlbmQgYW55dGhpbmcgZnJvbSBwcmludGVyIHRvIGhvc3QsIGZvciB4b24veG9mZikKKyMgY2Fubm90IGJlICMgaW4gaXMyIGJlY2F1c2UgaXQgd2lsbCBoYW5nIGEgYzEwMCB3aXRoIG5vIHByaW50ZXIKKyMgaWYgc2VudCB0d2ljZS4KK2MxMDB8Y29uY2VwdDEwMHxjb25jZXB0fGMxMDR8YzEwMC00cHxoZHMgY29uY2VwdCAxMDAsCisJT1RicywgYW0sIGVvLCBtaXIsIHVsLCB4ZW5sLAorCWNvbHMjODAsIGxpbmVzIzI0LCBwYiM5NjAwLCB2dCM4LAorCWJlbD1eRywgYmxpbms9XEVDLCBjbGVhcj1cRT9cRVwwMDUkPDIqPiwgY3I9JDw5PlxyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEU9LAorCWN1cD1cRWElcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEU7LAorCWRjaDE9XEVcMDIxJDwxNio+LCBkaW09XEVFLCBkbDE9XEVcMDAyJDwzKj4sCisJZWQ9XEVcMDA1JDwxNio+LCBlbD1cRVwwMjUkPDE2PiwgZmxhc2g9XEVrJDwyMDA+XEVLLAorCWh0PVwwMTEkPDg+LCBpbDE9XEVcMDIyJDwzKj4sIGluZD1eSiwgaW52aXM9XEVILCBpcD0kPDE2Kj4sCisJaXMxPVxFSywKKwlpczI9XEVVXEVmXEU3XEU1XEU4XEVsXEVOSFxFXDBcRW8mXDBcRW8nXEVcRW8hXDBcRVwwMDchXEVcMDEwQUAgXEU0I1w6IlxFXDphXEU0IzsiXEVcOmJcRTQjPCJcRVw6YywKKwlpczM9XEV2ICAgICQ8Nj5cRXBcbiwga2JzPV5ILCBrY2J0PVxFJywga2N0YWI9XEVfLAorCWtjdWIxPVxFPiwga2N1ZDE9XEU8LCBrY3VmMT1cRT0sIGtjdXUxPVxFOywga2RjaDE9XEVeUSwKKwlrZGwxPVxFXkIsIGtlZD1cRV5DLCBrZWw9XEVeUywga2YxPVxFNSwga2YyPVxFNiwga2YzPVxFNywKKwlrZjQ9XEU4LCBrZjU9XEU5LCBrZjY9XEVcOmEsIGtmNz1cRVw6Yiwga2Y4PVxFXDpjLCBraG9tZT1cRT8sCisJa2h0cz1cRV0sIGtpY2gxPVxFXlAsIGtpbDE9XEVeUiwga2luZD1cRVssIGtucD1cRS0sIGtwcD1cRS4sCisJa3JpPVxFXFwsIGtybWlyPVxFXDAsIG1jND1cMDM2byBcRVxFUSFcRVlQXDAyNywKKwltYzU9XEVRIlxFWShcMDI3XEVZRFxFbyBcMDM2LCBwcm90PVxFSSwKKwlyZXA9XEVyJXAxJWMlcDIlezMyfSUrJWMkPC4yKj4sIHJldj1cRUQsCisJcm1jdXA9XEV2ICAgICQ8Nj5cRXBcclxuLCBybWlyPVxFXHNccywgcm1reD1cRXgsCisJcm1zbz1cRWQsIHJtdWw9XEVnLCBzZ3IwPVxFTkAsCisJc21jdXA9XEVVXEV2ICA4cFxFcFxyXEVcMDI1JDwxNj4sIHNtaXI9XEVeUCwgc21reD1cRVgsCisJc21zbz1cRUQsIHNtdWw9XEVHLAorYzEwMC1ydnxjMTAwLXJ2LTRwfGNvbmNlcHQxMDAtcnZ8YzEwMCByZXYgdmlkZW8sCisJY25vcm1ALCBjdnZpc0AsIGZsYXNoPVxFSyQ8MjAwPlxFaywgaXMxPVxFaywgcm1zbz1cRWUsCisJc21zbz1cRUUsIHVzZT1jMTAwLAorb2MxMDB8b2NvbmNlcHR8YzEwMC0xcHxvbGQgMSBwYWdlIGNvbmNlcHQgMTAwLAorCWluLAorCWlzM0AsIHVzZT1jMTAwLAorCisjIEZyb206IFdhbHRlciBTa29yc2tpIDx3YWx0QGdlbmV0aWNzMS5KTVAuVEpVLkVEVT4sIDE2LW9jdC0xOTk2LgorIyBMb3RzIG9mIG5vdGVzLCBvcmlnaW5hbGx5IGlubGluZSwgYnV0IG5jdXJzZXMgZG9lc24ndCBncm9rIHRoYXQuCisjCisjIGFtOiAJbm90IGF2YWlsYWJsZSBpbiBwb3dlciBvbiBtb2RlLCBidXQgdHVybmVkIG9uIHdpdGggXEVbPTEwNzsyMDdoIGluCisjCWlzMj0uICBBbHNvLCBcRT0xMjRsIGluIGlzMj0gY291bGQgaGF2ZSBiZWVuIHVzZWQgdG8gcHJldmVudCBuZWVkaW5nCisjCXRvIHNwZWNpZnkgeGVubDosIGJ1dCB0aGF0IHdvdWxkIGhhdmUgcmVuZGVyZWQgdGhlIGxhc3Qgc3BhY2Ugb24gdGhlCisjCWxhc3QgbGluZSB1c2VsZXNzLgorIyBidzoJTm90IGF2YWlsYWJsZSBpbiBwb3dlciBvbiBtb2RlLCBidXQgdHVybmVkIG9uIHdpdGggXEVbPTEwNzsyMDdoIGluCisjCWlzMj0uCisjIGNsZWFyOiBDb3VsZCBiZSBkb25lIHdpdGggXEVbMkogYWxvbmUsIGV4Y2VwdCB0aGF0IHZpIChhbmQgcHJvYmFibHkgbW9zdAorIwlvdGhlciBwcm9ncmFtcykgYXNzdW1lIHRoYXQgdGhpcyBhbHNvIGhvbWVzIHRoZSBjdXJzb3IuCisjIGRzbDoJR28gdG8gd2luZG93IDIsIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUsIHVzZSBhIGxpbmUgZmVlZCB0bworIwlzY3JvbGwgdGhlIHdpbmRvdywgYW5kIGdvIGJhY2sgdG8gd2luZG93IDEuCisjIGlzMjoJdGhlIHN0cmluZyBtYXkgY2F1c2UgYSB3YXJuaW5nIHRvIGJlIGlzc3VlZCBieSB0aWMgdGhhdCBpdAorIwlmb3VuZCBhIHZlcnkgbG9uZyBsaW5lIGFuZCB0aGF0IGl0IHN1c3BlY3RzIHRoYXQgYSBjb21tYSBpcyBtaXNzaW5nCisjCXNvbWV3aGVyZS4gIFRoaXMgd2FybmluZyBjYW4gYmUgaWdub3JlZCAodW5sZXNzIGl0IGNvbWVzIHVwIG1vcmUgdGhhbgorIwlvbmNlKS4gIFRoZSBpbml0aWFsaXphdGlvbiBzdHJpbmcgY29udGFpbnMgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKyMKKyMJIFtTZXR1cCBtb2RlIGl0ZW1zIGNoYW5nZWQgZnJvbSBmYWN0b3J5IGRlZmF1bHRzOl0KKyMJCVxFKTAJCQlzZXQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgdG8KKyMJCQkJCQlncmFwaGljcworIwkJXk8JCQlzZXQgY2hhcmFjdGVyIHNldCB0byBkZWZhdWx0CisjCSBbSW4gY2FzZSBpdCB3YXNuJ3RdCisjCQlcRVttCQkJdHVybiBvZmYgYWxsIGF0dHJpYnV0ZXMKKyMJIFtJbiBjYXNlIHRoZXkgd2VyZW4ndCBvZmZdCisjCQlcRVs9MTA3OwkJY3Vyc29yIHdyYXAgYW5kCisjCQkJMjA3aAkJCWNoYXJhY3RlciB3cmFwIG9uCisjCQlcRVs5MDszdQkJc2V0IEZrZXkgZGVmaW5pdGlvbnMgdG8gInRyYW5zbWl0IgorIwkJCQkJCWRlZmF1bHRzCisjCQlcRVs5MjszdQkJc2V0IGN1cnNvciBrZXkgZGVmaW5pdGlvbnMgdG8KKyMJCQkJCQkidHJhbnNtaXQiIGRlZmF1bHRzCisjCQlcRVs0MzsxdQkJc2V0IHNoaWZ0IEYxMyB0byB0cmFuc21pdC4uLgorIwkJXDE3N1xFJFBcMTc3CisjCQlcRVs0NDsxdQkJc2V0IHNoaWZ0IEYxNCB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRRXDE3NworIwkJXEVbNDU7MXUJCXNldCBzaGlmdCBGMTUgdG8gdHJhbnNtaXQuLi4KKyMJCQlcMTc3XEUkUlwxNzcKKyMJCVxFWzQ2OzF1CQlzZXQgc2hpZnQgRjE2IHRvIHRyYW5zbWl0Li4uCisjCQkJXDE3N1xFJFNcMTc3CisjCQlcRVsyMDA7MXUJCXNldCBzaGlmdCB1cCB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRBXDE3NworIwkJXEVbMjAxOzF1CQlzZXQgc2hpZnQgZG93biB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRCXDE3NworIwkJXEVbMjAyOzF1CQlzZXQgc2hpZnQgcmlnaHQgdG8gdHJhbnNtaXQuLi4KKyMJCQlcMTc3XEUkQ1wxNzcKKyMJCVxFWzIwMzsxdQkJc2V0IHNoaWZ0IGxlZnQgdG8gdHJhbnNtaXQuLi4KKyMJCQlcMTc3XEUkRFwxNzcKKyMJCVxFWzIwNDsxdQkJc2V0IHNoaWZ0IGhvbWUgdG8gdHJhbnNtaXQuLi4KKyMJCQlcMTc3XEUkSFwxNzcKKyMJCVxFWzIxMjsxdQkJc2V0IGJhY2t0YWIgdG8gdHJhbnNtaXQuLi4KKyMJCQlcMTc3XEUkSVwxNzcKKyMJCVxFWzIxMzsxdQkJc2V0IHNoaWZ0IGJhY2tzcGFjZSB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSReSFwxNzcKKyMJCVxFWzIxNDsxdQkJc2V0IHNoaWZ0IGRlbCB0byB0cmFuc21pdC4uLgorIwkJCSJcRSRcMTc3IgorIwkgW05lY2Vzc2FyeSBpdGVtcyBub3QgbWVudGlvbmVkIGluIHNldHVwIG1vZGU6XQorIwkJXEVbMiF3CQkJbW92ZSB0byB3aW5kb3cgMgorIwkJXEVbMjU7MjV3CQlkZWZpbmUgd2luZG93IGFzIGxpbmUgMjUgb2YgbWVtb3J5CisjCQlcRVshdwkJCW1vdmUgdG8gd2luZG93IDEKKyMJCVxFWzIqdwkJCXNob3cgY3VycmVudCBsaW5lIG9mIHdpbmRvdyAyIGFzCisjCQkJCQkJc3RhdHVzIGxpbmUKKyMJCVxFWzIreAkJCXNldCBtZXRhIGtleSB0byB1c2UgaGlnaCBiaXQKKyMJCVxFWzszK30JCQltb3ZlIHVuZGVybGluZSB0byBib3R0b20gb2YgY2hhcmFjdGVyCisjCisjCUFsbCBGa2V5cyBhcmUgc2V0IHRvIHRoZWlyIGRlZmF1bHQgdHJhbnNtaXQgZGVmaW5pdGlvbnMgd2l0aCBcRVs5MDszdQorIwlpbiBpczI9LiAgSU1QT1JUQU5UOiAgdG8gdXNlIHRoaXMgdGVybWluYWwgZGVmaW5pdGlvbiwgdGhlICJxdWl0IiBzdHR5CisjCXNldHRpbmcgTVVTVCBiZSByZWRlZmluZWQgb3IgZGVhY3RpdmF0ZWQsIGJlY2F1c2UgdGhlIGRlZmF1bHQgaXMKKyMJY29udGFpbmVkIGluIGFsbW9zdCBhbGwgb2YgdGhpcyB0ZXJtaW5hbCdzIEZrZXkgc3RyaW5ncyEgIElmIGZvciBzb21lCisjCXJlYXNvbiAicXVpdCIgY2Fubm90IGJlIGFsdGVyZWQsIHRoZSBGa2V5cyBjYW4sIGJ1dCBpdCB3b3VsZCBiZQorIwluZWNlc3NhcnkgdG8gY2hhbmdlIF58IHRvIF5dIGluIGFsbCBvZiB0aGVzZSBkZWZpbml0aW9ucywgYW5kIGFkZAorIwlcRVsyOzAyOSF0IHRvIGlzMi4KKyMgbGluZXM6IGlzIHNldCB0byAyNCBiZWNhdXNlIHRoaXMgdGVybWluYWwgcmVmdXNlcyB0byB0cmVhdCB0aGUgMjV0aAorIwlsaW5lIG5vcm1hbGx5LgorIyBsbDoJTm90IGF2YWlsYWJsZSBpbiBwb3dlciBvbiBtb2RlLCBidXQgdHVybmVkIG9uIHdpdGggXEVbPTEwNzsyMDdoIGluCisjCWlzMj0uCisjIGxtOglQb2ludGxlc3MsIGdpdmVuIHRoYXQgdGhpcyBkZWZpbml0aW9uIGxvY2tzIGEgc2luZ2xlIHNjcmVlbiBvZgorIwltZW1vcnkgaW50byB2aWV3LCBidXQgd2hhdCB0aGUgaGV5Li4uCisjIHJtc286IENvdWxkIHVzZSBcRVsxOzcheyB0byB0dXJuIG9mZiBvbmx5IGJvbGQgYW5kIHJldmVyc2UgKGxlYXZpbmcgYW55CisjCW90aGVyIGF0dHJpYnV0ZXMgYWxvbmUpLCBidXQgc29tZSBwcm9ncmFtcyBleHBlY3QgdGhpcyB0byB0dXJuIG9mZgorIwlldmVyeXRoaW5nLgorIyBybXVsOiBDb3VsZCB1c2UgXEVbNCF7IHRvIHR1cm4gb2ZmIG9ubHkgdW5kZXJsaW5lIChsZWF2aW5nIGFueSBvdGhlcgorIwlhdHRyaWJ1dGVzIGFsb25lKSwgYnV0IHNvbWUgcHJvZ3JhbXMgZXhwZWN0IHRoaXMgdG8gdHVybiBvZmYKKyMJZXZlcnl0aGluZy4KKyMgc2dyOglBdHRyaWJ1dGVzIGFyZSBzZXQgb24gdGhpcyB0ZXJtaW5hbCB3aXRoIHRoZSBzdHJpbmcgXEVbIGZvbGxvd2VkIGJ5CisjCWEgbGlzdCBvZiBhdHRyaWJ1dGUgY29kZSBudW1iZXJzIChpbiBkZWNpbWFsLCBzZXBhcmF0ZWQgYnkKKyMJc2VtaWNvbG9ucyksIGZvbGxvd2VkIGJ5IHRoZSBjaGFyYWN0ZXIgbS4gIFRoZSBhdHRyaWJ1dGUgY29kZQorIwludW1iZXJzIGFyZToKKyMJCSAgMSBmb3IgYm9sZDsKKyMJCSAgMiBmb3IgZGltICh3aGljaCBpcyBpZ25vcmVkIGluIHBvd2VyIG9uIG1vZGUpOworIwkJICA0IGZvciB1bmRlcmxpbmU7CisjCQkgIDUgZm9yIGJsaW5raW5nOworIwkJICA3IGZvciBpbnZlcnNlOworIwkJICA4IGZvciBub3QgZGlzcGxheWFibGU7IGFuZAorIwkJPTk5IGZvciBwcm90ZWN0ZWQgKGV4Y2VwdCB0aGF0IHRoZXJlIGFyZSBzdHJhbmdlIHNpZGUKKyMJCWVmZmVjdHMgdG8gcHJvdGVjdGVkIGNoYXJhY3RlcnMgd2hpY2ggbWFrZSB0aGVtIGluYWR2aXNhYmxlKS4KKyMJIFRoZSBtYXBwaW5nIG9mIHRlcm1pbmZvIHBhcmFtZXRlcnMgdG8gYXR0cmlidXRlcyBpcyBhcyBmb2xsb3dzOgorIwkJJXAxIChzdGFuZG91dCkgPSBib2xkIGFuZCBpbnZlcnNlIHRvZ2V0aGVyOworIwkJJXAyICh1bmRlcmxpbmUpID0gdW5kZXJsaW5lOworIwkJJXAzIChyZXZlcnNlKSA9IGludmVyc2U7CisjCQklcDQgKGJsaW5rKSA9IGJsaW5raW5nOworIwkJJXA1IChkaW0pIGlzIGlnbm9yZWQ7CisjCQklcDYgKGJvbGQpID0gYm9sZDsKKyMJCSVwNyAoaW52aXNpYmxlKSA9IG5vdCBkaXNwbGF5YWJsZTsKKyMJCSVwOCAocHJvdGVjdGVkKSBpcyBpZ25vcmVkOyBhbmQKKyMJCSVwOSAoYWx0IGNoYXIgc2V0KSA9IGFsdCBjaGFyIHNldC4KKyMJIFRoZSBjb2RlIHRvIGRvIHRoaXMgaXM6CisjCQlcRVswCQlPVVRQVVQJXEVbMAorIwkJJT8lcDElcDYlTwlJRgkoc3RhbmRvdXQ7IGJvbGQpIE9SCisjCQkldDsxCQlUSEVOCU9VVFBVVAk7MQorIwkJJTsJCUVORElGCisjCQklPyVwMgkJSUYJdW5kZXJsaW5lCisjCQkldDs0CQlUSEVOCU9VVFBVVAk7NAorIwkJJTsJCUVORElGCisjCQklPyVwNAkJSUYJYmxpbmsKKyMJCSV0OzUJCVRIRU4JT1VUUFVUCTs1CisjCQklOwkJRU5ESUYKKyMJCSU/JXAxJXAzJU8JSUYJKHN0YW5kb3V0OyByZXZlcnNlKSBPUgorIwkJJXQ7NwkJVEhFTglPVVRQVVQJOzcKKyMJCSU7CQlFTkRJRgorIwkJJT8lcDcJCUlGCWludmlzaWJsZQorIwkJJXQ7OAkJVEhFTglPVVRQVVQJOzgKKyMJCSU7CQlFTkRJRgorIwkJbQkJT1VUUFVUCW0KKyMJCSU/JXA5CQlJRglhbHRjaGFyc2V0CisjCQkldF5OCQlUSEVOCU9VVFBVVAleTgorIwkJJWVeTwkJRUxTRQlPVVRQVVQJXk8KKyMJCSU7CQlFTkRJRgorIyBzZ3IwOiBFdmVyeXRoaW5nIGlzIHR1cm5lZCBvZmYgKGluY2x1ZGluZyBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCksIHNpbmNlCisjCXRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIHdoYXQgaXQgaXMgdGhhdCB0aGUgcHJvZ3JhbSB3YW50cyB0dXJuZWQKKyMJb2ZmLgorIyBzbXVsOiBUaGUgInVuZGVybGluZSIgYXR0cmlidXRlIGlzIHJlY29uZmlndXJhYmxlIHRvIGFuIG92ZXJsaW5lIG9yCisjCXN0cmlrZXRocnUsIG9yIChhcyBkb25lIHdpdGggXEVbOzMrfSBpbiBpczI9KSwgdG8gYSBsaW5lIGF0IHRoZSB0cnVlCisjCWJvdHRvbSBvZiB0aGUgY2hhcmFjdGVyIGNlbGwuICBUaGlzIHdhcyBkb25lIHRvIGFsbG93IGZvciBtb3JlIHJlYWRhYmxlCisjCXVuZGVybGluZWQgY2hhcmFjdGVycywgYW5kIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbgorIwl1bmRlcmxpbmVkIHNwYWNlLCBhbiB1bmRlcnNjb3JlLCBhbmQgYW4gdW5kZXJsaW5lZCB1bmRlcnNjb3JlLgorIyB4ZW5sOiBUZXJtaW5hbCBjYW4gYmUgY29uZmlndXJlZCB0byBub3QgbmVlZCB0aGlzLCBidXQgdGhpcyAiZ2xpdGNoIgorIwliZWhhdmlvciBpcyBhY3R1YWxseSBwcmVmZXJhYmxlIHdpdGggYXV0b3dyYXAgdGVybWluYWxzLgorIworIyBQYXJhbWV0ZXJzIGtmMzE9IHRocnUga2Y1Mz0gYWN0dWFsbHkgY29udGFpbiB0aGUgc3RyaW5ncyBzZW50IGJ5IHRoZSBzaGlmdGVkCisjIEZrZXlzLiAgVGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgZm9yIHNoaWZ0ZWQgRmtleXMgaW4gdGVybWluZm8uICBUaGUgaXMyCisjIHN0cmluZyBtb2RpZmllcyB0aGUgJ08nIGluIGtmNDMgdG8ga2Y0NiB0byBhICckJy4KKyMKKyMga2NidCB3YXMgb3JpZ2luYWxseSBeSSBidXQgcmVkZWZpbmVkIGluIGlzMj0uCisjIGtIT00gd2FzIFxFW0ggb3JpZ2luYWxseSBidXQgcmVkZWZpbmVkIGluIGlzMj0sIGFzIHdlcmUgYSBudW1iZXIgb2YKKyMgb3RoZXIga2V5cy4KKyMga0RDIHdhcyBvcmlnaW5hbGx5IFwxNzcgYnV0IHJlZGVmaW5lZCBpbiBpczI9LgorIworIyBrYnM6CVNoaWZ0IHdhcyBhbHNvIF5IIG9yaWdpbmFsbHkgYnV0IHJlZGVmaW5lZCBhcyBcRSReSCBpbiBpczI9LgorIyB0c2w6CUdvIHRvIHdpbmRvdyAyLCB0aGVuIGRvIGFuIGhwYT0uCisjCisjLS0tLS0tLSBmbGFzaD1cRVs4OzMhfV5HXEVbMzszIX0KKyMtLS0tLS0tIGZsYXNoPVxFWz81aCQ8MTAwPlxFWz81bAorIyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZmxhc2ggdGhlIHNjcmVlbiwgYm90aCBvZiB3aGljaCBoYXZlIHRoZWlyIGRyYXdiYWNrcy4KKyMgVGhlIGZpcnN0IGlzIHRvIHNldCB0aGUgYmVsbCBtb2RlIHRvIHZpZGVvLCB0cmFuc21pdCBhIGJlbGwgY2hhcmFjdGVyLCBhbmQKKyMgc2V0IHRoZSBiZWxsIG1vZGUgYmFjayAtIGJ1dCB0byB3aGF0PyAgVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB0aGUKKyMgdXNlcidzIG9sZCBiZWxsIHNldHRpbmcgd2FzIGJlZm9yZSB3ZSBtZXNzZWQgd2l0aCBpdC4gIFdvcnNlLCB0aGUgY29tbWFuZCB0bworIyBzZXQgdGhlIGJlbGwgbW9kZSBhbHNvIHNldHMgdGhlIGtleSBjbGljayB2b2x1bWUsIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gc2F5CisjICJsZWF2ZSB0aGF0IGFsb25lIiwgb3IgdG8ga25vdyB3aGF0IGl0J3Mgc2V0IHRvLCBlaXRoZXIuCisjIFRoZSBzZWNvbmQgd2F5IHRvIGRvIGEgZmxhc2ggaXMgdG8gc2V0IHRoZSBzY3JlZW4gdG8gaW52ZXJzZSB2aWRlbywgcGFkIGZvciBhCisjIHRlbnRoIG9mIGEgc2Vjb25kLCBhbmQgc2V0IGl0IGJhY2sgLSBidXQgbGlrZSBiZWZvcmUsIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKKyMgdGhhdCB0aGUgc2NyZWVuIHdhc24ndCBBTFJFQURZIGluIGludmVyc2UgdmlkZW8sIG9yIHRoYXQgdGhlIHVzZXIgbWF5IHByZWZlcgorIyBpdCB0aGF0IHdheS4gIFRoZSBwb2ludCBpcyBtb290IGFueXdheSwgc2luY2UgdmkgKGFuZCBwcm9iYWJseSBvdGhlcgorIyBwcm9ncmFtcykgYXNzdW1lIHRoYXQgYnkgZGVmaW5pbmcgZmxhc2g9LCB5b3Ugd2FudCB0aGUgY29tcHV0ZXIgdG8gdXNlIGl0CisjIElOU1RFQUQgb2YgYmVsPSwgcmF0aGVyIHRoYW4gYXMgYSBzZWNvbmRhcnkgdHlwZSBvZiBzaWduYWwuCisjCisjLS0tLS0tLSBjdnZpcz1cRVsreworIyBUaGUgaXMgdGhlIHBvd2VyIG9uIHNldHRpbmcsIHdoaWNoIGlzIGFsc28gYXMgdmlzaWJsZSBhcyB0aGUgY3Vyc29yCisjIGdldHMuCisjLS0tLS0tLSAgd2luZD1cRVslaSVwMSVkOyVwMiVkOyVwMyV7MX0lKyVkOyVwNCV7MX0lKyVkdworIyBXaW5kb3dpbmcgaXMgcG9zc2libGUsIGJ1dCBub3QgZGVmaW5lZCBoZXJlIGJlY2F1c2UgaXQgaXMgYWxzbyB1c2VkIHRvCisjIGVtdWxhdGUgc3RhdHVzIGxpbmUgZnVuY3Rpb25zLiAgQWxsb3dpbmcgYSBwcm9ncmFtIHRvIHNldCBhIHdpbmRvdyBjb3VsZAorIyBjbG9iYmVyIHRoZSBzdGF0dXMgbGluZSBvciByZW5kZXIgaXQgdW51c2FibGUuICBUaGVyZSBpcyBhZGRpdGlvbmFsIG1lbW9yeSwKKyMgYnV0IHNjcmVlbiBzY3JvbGwgZnVuY3Rpb25zIGFyZSBkZXN0cnVjdGl2ZSBhbmQgZG8gbm90IG1ha2UgdXNlIG9mIGl0LgorIworIy0tLS0tLS0gICBkaW09CQkJTm90IGF2YWlsYWJsZSBpbiBwb3dlciBvbiBtb2RlLgorIyBZb3UgaGF2ZSBhIGNob2ljZSBvZiBkZWZpbmluZyBsb3cgaW50ZW5zaXR5IGNoYXJhY3RlcnMgYXMgImhhbGYgYnJpZ2h0IiBhbmQKKyMgaGlnaCBpbnRlbnNpdHkgYXMgIm5vcm1hbCIsIG9yIGRlZmluaW5nIGxvdyBhcyAibm9ybWFsIiBhbmQgaGlnaCBhcyAiYm9sZCIuCisjIE5vIG1hdHRlciB3aGljaCB5b3UgY2hvb3NlLCBvbmx5IG9uZSBvZiBlaXRoZXIgImhhbGYgYnJpZ2h0IiBvciAiYm9sZCIgaXMKKyMgYXZhaWxhYmxlIGF0IGFueSB0aW1lLCBzbyB0YWtpbmcgdGhlIHRpbWUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaXMKKyMgcG9pbnRsZXNzLgorIworIy0tLS0tLS0gIHByb3Q9XEVbPTA7OTltCisjIE5vdCBkZWZpbmVkLCBiZWNhdXNlIGl0IGFwcGVhcnMgdG8gaGF2ZSBzb21lIHN0cmFuZ2Ugc2lkZSBlZmZlY3RzLgorIy0tLS0tLS0gcGZrZXk9JT8lcDElezI0fSU8JXAxJXszMH0lPiVwMSV7NTR9JTwlQSVPJXRcRVslcDElZHVcMTc3JXAyJXNcMTc3JTsKKyMtLS0tLS0tIHBmbG9jPSU/JXAxJXsyNH0lPCVwMSV7MzB9JT4lcDElezU0fSU8JUElTyV0XEVbJXAxJWR1XDE3NyVwMiVzXDE3NyU7CisjLS0tLS0tLSAgIHBmeD0lPyVwMSV7MjR9JTwlcDElezMwfSU+JXAxJXs1NH0lPCVBJU8ldFxFWyVwMSVkOzF1XDE3NyVwMiVzXDE3NyU7CisjCSBBdmFpbGFibGUsIGJ1dCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgaXMgaW5hZHZpc2FibGUuCisjCSBUaGUgY29kZSB0byBkbyB0aGlzIGlzOgorIwkJJT8lcDElezI0fSU8CUlGCSgoa2V5OyAyNCkgPDsKKyMJCSVwMSV7MzB9JT4JCSAoKGtleTsgMzApID47CisjCQklcDElezU0fSU8CQkgIChrZXk7IDU0KSA8CisjCQklQQkJCSApIEFORAorIwkJJU8JCSAgCSkgT1IKKyMJIFt0aGF0IGlzLCAiSUYga2V5IDwgMjQgT1IgKGtleSA+IDMwIEFORCBrZXkgPCA1NCkiLF0KKyMJCSV0XEVbCQlUSEVOCU9VVFBVVAlcRVsKKyMJCSVwMSVkCQkJT1VUUFVUCShrZXkpIGFzIGRlY2ltYWwKKyMJIFtuZXh0IGxpbmUgYXBwbGllcyB0byBwZnggb25seV0KKyMJCTsxCQkJT1VUUFVUCTsxCisjCQl1CQkJT1VUUFVUCXUKKyMJCVwxNzcJCQlPVVRQVVQJXDE3NworIwkJJXAyJXMJCQlPVVRQVVQJKHN0cmluZykgYXMgc3RyaW5nCisjCQlcMTc3CQkJT1VUUFVUCVwxNzcKKyMJIFtERUwgY2hvc2VuIGFzIGRlbGltaXRlciwgYnV0IGNvdWxkIGJlIGFueSBjaGFyYWN0ZXJdCisjCSBbaW1wbGllZDoJCUVMU0UJZG8gbm90aGluZ10KKyMJCSU7CQlFTkRJRgorIworIy0tLS0tLS0gICByczI9CisjIE5vdCBkZWZpbmVkIHNpbmNlIGFueXRoaW5nIGl0IG1pZ2h0IGRvIGNvdWxkIGJlIGRvbmUgZmFzdGVyIGFuZCBlYXNpZXIgd2l0aAorIyBlaXRoZXIgTWV0YS1TaGlmdC1SZXNldCBvciB0aGUgbWFpbiBwb3dlciBzd2l0Y2guCisjCisjLS0tLS0tLSAgc21reD1cRVsxIXoKKyMtLS0tLS0tICBybWt4PVxFWyF6CisjIFRoZXNlIHNlcXVlbmNlcyBhcHBseSB0byB0aGUgY3Vyc29yIGFuZCBzZXR1cCBrZXlzIG9ubHksIG5vdCB0byB0aGUKKyMgbnVtZXJpYyBrZXlwYWQuICBCdXQgaXQgZG9lc24ndCBtYXR0ZXIgYW55d2F5LCBzaW5jZSBtYWtpbmcgdGhlc2UKKyMgYXZhaWxhYmxlIHRvIHByb2dyYW1zIGlzIGluYWR2aXNhYmxlLgorIyBGb3IgdGhlIGtleSBkZWZpbml0aW9ucyBiZWxvdywgYWxsIHNlcXVlbmNlcyBiZWdpbm5pbmcgd2l0aCBcRSQgYXJlCisjIGN1c3RvbSBhbmQgcHJvZ3JhbW1lZCBpbnRvIHRoZSB0ZXJtaW5hbCB2aWEgaXMyLiAgXEUkIGFsc28gaGFzIG5vCisjIG1lYW5pbmcgdG8gYW55IG90aGVyIHRlcm1pbmFsLgorIworIy0tLS0tLS0gY21kY2g9XEVbOyVwMSVkIXQKKyMgQXZhaWxhYmxlLCBidXQgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBwcm9ncmFtcyBpcyBpbmFkdmlzYWJsZS4KKyMtLS0tLS0tIHNteG9uPVxFWzEqcQorIyBBdmFpbGFibGUsIGJ1dCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIHByb2dyYW1zIGlzIGluYWR2aXNhYmxlLgorIyBUZXJtaW5hbCB3aWxsIHNlbmQgWE9OL1hPRkYgb24gYnVmZmVyIG92ZXJmbG93LgorIy0tLS0tLS0gcm14b249XEVbKnEKKyMgQXZhaWxhYmxlLCBidXQgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBwcm9ncmFtcyBpcyBpbmFkdmlzYWJsZS4KKyMgVGVybWluYWwgd2lsbCBub3Qgbm90aWZ5IG9uIGJ1ZmZlciBvdmVyZmxvdy4KKyMtLS0tLS0tICAgc21tPVxFWzIreAorIy0tLS0tLS0gICBybW09XEVbK3gKKyMgQXZhaWxhYmxlLCBidXQgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIHByb2dyYW1zIGlzIGluYWR2aXNhYmxlLgorIworIyBQcmludGluZzoKKyMJIEl0J3Mgbm90IG1hZGUgY2xlYXIgaW4gdGhlIG1hbnVhbHMsIGJ1dCBiYXNlZCBvbiBvdGhlciBhbnNpL3Z0IHR5cGUKKyMJIHRlcm1pbmFscywgaXQncyBhIGdvb2QgZ3Vlc3MgdGhhdCB0aGlzIHRlcm1pbmFsIGlzIGNhcGFibGUgb2YgYm90aAorIwkgInRyYW5zcGFyZW50IHByaW50IiAod2hpY2ggZG9lc24ndCBjb3B5IGRhdGEgdG8gdGhlIHNjcmVlbiwgYW5kCisjCSB0aGVyZWZvcmUgbmVlZHMgbWM1aTogc3BlY2lmaWVkIHRvIHNheSBzbykgYW5kICJhdXhpbGxpYXJ5IHByaW50IgorIwkgKHdoaWNoIGRvZXMgZHVwbGljYXRlIHByaW50ZWQgZGF0YSBvbiB0aGUgc2NyZWVuLCBpbiB3aGljaCBjYXNlIG1jND0KKyMJIGFuZCBtYzU9IHNob3VsZCB1c2UgdGhlIFxFWz80aSBhbmQgXEVbPzVpIHN0cmluZ3MgaW5zdGVhZCkuCisKK2hkczIwMHxIdW1hbiBEZXNpZ25lZCBTeXN0ZW1zIEhEUzIwMCwKKwlhbSwgYncsIGVzbG9rLCBocywga20sIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBsbSMwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29xcXNzdHR1dXZ2d3d4eH5+LCBiZWw9XkcsCisJYmxpbms9XEVbMDs1bSwgYm9sZD1cRVswOzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbNit7LAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVsreywgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWRzbD1cRVsyIXdcclxuXEVbIXcsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwlmc2w9XEVbIXcsIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWludmlzPVxFWzA7OG0sCisJaXMyPVxFKTBcMDE3XEVbbVxFWz0xMDc7MjA3aFxFWzkwOzN1XEVbOTI7M3VcRVs0MzsxdVwxNzdcRSRQXDE3N1xFWzQ0OzF1XDE3N1xFJFFcMTc3XEVbNDU7MXVcMTc3XEUkUlwxNzdcRVs0NjsxdVwxNzdcRSRTXDE3N1xFWzIwMDsxdVwxNzdcRSRBXDE3N1xFWzIwMTsxdVwxNzdcRSRCXDE3N1xFWzIwMjsxdVwxNzdcRSRDXDE3N1xFWzIwMzsxdVwxNzdcRSREXDE3N1xFWzIwNDsxdVwxNzdcRSRIXDE3N1xFWzIxMjsxdVwxNzdcRSRJXDE3N1xFWzIxMzsxdVwxNzdcRSRcMDEwXDE3N1xFWzIxNDsxdSJcRSRcMTc3IlxFWzIhd1xFWzI1OzI1d1xFWyF3XEVbMip3XEVbMit4XEVbOzMrfSwKKwlrREM9XEUkXDE3Nywga0hPTT1cRSRILCBrTEZUPVxFJEQsIGtSSVQ9XEUkQywga2JzPV5ILAorCWtjYnQ9XEUkSSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cMTc3LCBrZW50PV5NLCBrZjE9XlwwMDFcciwga2YxMD1eXDAxMFxyLAorCWtmMTE9XlwwMTFcciwga2YxMj1eXDAxMlxyLCBrZjEzPVxFT1AsIGtmMTQ9XEVPUSwKKwlrZjE1PVxFT1IsIGtmMTY9XEVPUywga2YxNz1eXDAxN1xyLCBrZjE4PV5cMDE4XHIsCisJa2YxOT1eXDAxOVxyLCBrZjI9XlwwMDJcciwga2YyMD1eXDAyMFxyLCBrZjIxPV5cMDIxXHIsCisJa2YyMj1eXDAyMlxyLCBrZjIzPV5cMDIzXHIsIGtmMz1eXDAwM1xyLCBrZjMxPV5cMDMxXHIsCisJa2YzMj1eXDAzMlxyLCBrZjMzPV5cMDMzXHIsIGtmMzQ9XlwwMzRcciwga2YzNT1eXDAzNVxyLAorCWtmMzY9XlwwMzZcciwga2YzNz1eXDAzN1xyLCBrZjM4PV5cMDM4XHIsIGtmMzk9XlwwMzlcciwKKwlrZjQ9XlwwMDRcciwga2Y0MD1eXDA0MFxyLCBrZjQxPV5cMDQxXHIsIGtmNDI9XlwwNDJcciwKKwlrZjQzPVxFJFAsIGtmNDQ9XEUkUSwga2Y0NT1cRSRSLCBrZjQ2PVxFJFMsIGtmNDc9XlwwNDdcciwKKwlrZjQ4PV5cMDQ4XHIsIGtmNDk9XlwwNDlcciwga2Y1PV5cMDA1XHIsIGtmNTA9XlwwNTBcciwKKwlrZjUxPV5cMDUxXHIsIGtmNTI9XlwwNTJcciwga2Y1Mz1eXDA1M1xyLCBrZjY9XlwwMDZcciwKKwlrZjc9XlwwMDdcciwga2Y4PV5cMDA4XHIsIGtmOT1eXDAwOVxyLCBraG9tZT1cRVtILAorCWtpbmQ9XEVbVCwga25wPVxFW1UsIGtwcD1cRVtWLCBrcmk9XEVbUywgbGw9XEVbSFxFW0EsCisJbWMwPVxFW2ksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBuZWw9XEVbRSwgcmM9XEU4LAorCXJldj1cRVswOzdtLCByaT1cRU0sIHJtYWNzPV5PLCBybWlyPVxFWzRsLCBybXNvPVxFW21cMDE3LAorCXJtdWw9XEVbbVwwMTcsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA2JU8ldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlTyV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtaXI9XEVbNGgsIHNtc289XEVbMDsxOzdtLAorCXNtdWw9XEVbMDs0bSwgdGJjPVxFWzNnLCB0c2w9XEVbMiF3XEVbJWklcDElZEcsCisJdnBhPVxFWyVpJXAxJWRkLAorCisjIDxodD4gdGhyb3VnaCA8ZWw+IGluY2x1ZGVkIHRvIHNwZWNpZnkgcGFkZGluZyBuZWVkZWQgaW4gcmF3IG1vZGUuCisjIChhdnQtbnM6IGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyBhIHRpYyB3YXJuaW5nIC0tZXNyKQorYXZ0LW5zfGNvbmNlcHQgYXZ0IG5vIHN0YXR1cyBsaW5lLAorCU9UYnMsIGFtLCBlbywgbWlyLCB1bCwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBsbSMxOTIsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLAorCWNsZWFyPVxFW0hcRVtKJDwzOD4sIGNub3JtPVxFWz0xMTlsLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz0xMTloLCBkY2gxPVxFW1AsIGRpbT1cRVsxIXssIGRsPVxFWyVwMSVkTSQ8NCo+LAorCWRsMT1cRVtNJDw0PiwgZWQ9XEVbSiQ8OTY+LCBlbD1cRVtLJDw2PiwgaG9tZT1cRVtILAorCWhwYT1cRVslcDElezF9JSslZEcsIGh0PVwwMTEkPDQ+LCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwgaWw9XEVbJXAxJWRMJDw0Kj4sIGlsMT1cRVtMJDw0PiwgaW5kPVxuJDw4PiwKKwlpbnZpcz1cRVs4bSwgaXA9JDw0PiwgaXMxPVxFWz0xMDNsXEVbPTIwNWwsCisJaXMyPVxFWzEqcVxFWzIhdFxFWzchdFxFWz00OzEwMTsxMTk7MTIybFxFWz0xMDc7MTE4OzIwN2hcRSkxXEVbMVFcRVdcRVsheVxFWyF6XEU+XEVbMFw6MFw6MzIhclxFWzAqd1xFW3dcRTJcclxuXEVbMjsyNyF0LAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRV5CXHIsIGtlZD1cRV5EXHIsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsCisJa2Y0PVxFT1MsIGtob21lPVxFW0gsIGtpY2gxPVxFXkFcciwga2lsMT1cRV5DXHIsIGxsPVxFWzI0SCwKKwltYzA9XEVbMGksIG1jND1cRVs0aSwgbWM1PVxFWzVpLAorCXBmbG9jPVxFWyVwMSVkOzB1IyVwMiVzIywgcGZ4PVxFWyVwMSVkOzF1IyVwMiVzIywKKwlwcm90PVxFWzk5bSwgcmM9XEU4LCByZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJldj1cRVs3bSwKKwlyaT1cRU0kPDQ+LCBybWFjcz1cMDE2JDwxPiwgcm1jdXA9XEVbd1xFMlxyXG4sCisJcm1pcj1cRVs0bCwgcm1reD1cRVshelxFWzA7MnUsIHJtc289XEVbNyF7LCBybXVsPVxFWzQheywKKwlzYz1cRTcsCisJc2dyPVxFWyU/JXAxJXQ3OyU7JT8lcDIldDQ7JTslPyVwMyV0NzslOyU/JXA0JXQ1OyU7JT8lcDYldDE7JTttLAorCXNncjA9XEVbbSwgc21hY3M9XDAxNyQ8MT4sIHNtY3VwPVxFWz00bFxFWzE7MjR3XEUyXHIsCisJc21pcj1cRVs0aCwgc21reD1cRVsxIXpcRVswOzN1LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVsyZywgdnBhPVxFWyVwMSV7MX0lKyVkZCwKK2F2dC1ydi1uc3xjb25jZXB0IGF2dCBpbiByZXZlcnNlIHZpZGVvIG1vZGUvbm8gc3RhdHVzIGxpbmUsCisJZmxhc2g9XEVbPTIwNWwkPDIwMD5cRVs9MjA1aCwgaXMxPVxFWz0xMDNsXEVbPTIwNWgsCisJdXNlPWF2dC1ucywKK2F2dC13LW5zfGNvbmNlcHQgYXZ0IGluIDEzMiBjb2x1bW4gbW9kZS9ubyBzdGF0dXMgbGluZSwKKwlpczE9XEVbPTEwM2hcRVs9MjA1bCwgc21jdXA9XEVbSFxFWzE7MjQ7MTsxMzJ3LAorCXVzZT1hdnQtbnMsCithdnQtdy1ydi1uc3xjb25jZXB0IGF2dCBpbiAxMzIgY29sdW1uIG1vZGUvbm8gc3RhdHVzIGxpbmUvcmV2ZXJzZSB2aWRlbywKKwlmbGFzaD1cRVs9MjA1bCQ8MjAwPlxFWz0yMDVoLCBpczE9XEVbPTEwM2hcRVs9MjA1aCwKKwlzbWN1cD1cRVtIXEVbMTsyNDsxOzEzMncsIHVzZT1hdnQtbnMsCisKKyMgQ29uY2VwdCBBVlQgd2l0aCBzdGF0dXMgbGluZS4gV2UgZ2V0IHRoZSBzdGF0dXMgbGluZSB1c2luZyB0aGUKKyMgIkJhY2tncm91bmQgc3RhdHVzIGxpbmUiIGZlYXR1cmUgb2YgdGhlIHRlcm1pbmFsLiBXZSBzd2lwZSB0aGUKKyMgZmlyc3QgbGluZSBvZiBtZW1vcnkgaW4gd2luZG93IDIgZm9yIHRoZSBzdGF0dXMgbGluZSwga2VlcGluZworIyAxOTEgbGluZXMgb2YgbWVtb3J5IGFuZCAyNCBzY3JlZW4gbGluZXMgZm9yIHJlZ3VsYXIgdXNlLgorIyBUaGUgZmlyc3QgbGluZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGxhc3Qgc28gdGhhdCB0aGlzIHdvcmtzCisjIG9uIGJvdGggNCBhbmQgOCBwYWdlIEFWVHMuIChOb3RlIHRoZSBsbSMxOTEgb3IgMTkyIC0gdGhpcworIyBhc3N1bWVzIGFuIDggcGFnZSBBVlQgYnV0IGxtIGlzbid0IGN1cnJlbnRseSB1c2VkIGFueXdoZXJlLikKKyMKK2F2dCtzfGNvbmNlcHQgYXZ0IHN0YXR1cyBsaW5lIGNoYW5nZXMsCisJZXNsb2ssIGhzLAorCWxtIzE5MSwKKwlkc2w9XEVbMCp3LCBmc2w9XEVbMTsxIXcsCisJaXMzPVxFWzJ3XEVbMiF3XEVbMTsxOzE7ODB3XEVbSFxFWzIqd1xFWzEhd1xFMlxyXG4sCisJcm1jdXA9XEVbMndcRTJcclxuLCBzbWN1cD1cRVsyOzI1d1xFMlxyLAorCXRzbD1cRVsyOzEhd1xFWzslcDElZEhcRVsySywKK2F2dHxhdnQtc3xjb25jZXB0LWF2dHxhdnQgdy84MCBjb2x1bW5zLAorCXVzZT1hdnQrcywgdXNlPWF2dC1ucywKK2F2dC1ydnxhdnQtcnYtc3xhdnQgcmV2ZXJzZSB2aWRlbyB3L3NsLAorCWZsYXNoPVxFWz0yMDVsJDwyMDA+XEVbPTIwNWgsIGlzMT1cRVs9MTAzbFxFWz0yMDVoLAorCXVzZT1hdnQrcywgdXNlPWF2dC1ucywKK2F2dC13fGF2dC13LXN8Y29uY2VwdCBhdnQgMTMyIGNvbHMrc3RhdHVzLAorCWlzMT1cRVs9MTAzaFxFWz0yMDVsLCBzbWN1cD1cRVtIXEVbMTsyNDsxOzEzMncsCisJdXNlPWF2dCtzLCB1c2U9YXZ0LW5zLAorYXZ0LXctcnZ8YXZ0LXctcnYtc3xhdnQgd2lkZStzdGF0dXMrcnYsCisJZmxhc2g9XEVbPTIwNWwkPDIwMD5cRVs9MjA1aCwgaXMxPVxFWz0xMDNoXEVbPTIwNWgsCisJc21jdXA9XEVbSFxFWzE7MjQ7MTsxMzJ3LCB1c2U9YXZ0K3MsIHVzZT1hdnQtbnMsCisKKyMjIyMgQ29udGVsIEJ1c2luZXNzIFN5c3RlbXMuCisjCisKKyMgQ29udGVsIGMzMDAgYW5kIGMzMjAgdGVybWluYWxzLgorY29udGVsMzAwfGNvbnRlbDMyMHxjMzAwfENvbnRlbCBCdXNpbmVzcyBTeXN0ZW1zIEMtMzAwIG9yIEMtMzIwLAorCWFtLCBpbiwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGNsZWFyPVxFSywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVglcDElezMyfSUrJWNcRVklcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWRjaDE9XEVPJDw1LjUqPiwgZGwxPVxFTSQ8NS41Kj4sIGVkPVxFSiQ8NS41Kj4sCisJZWw9XEVJJDw1LjU+LCBmbGFzaD1cMDIwXDAwMiQ8MjAwLz5cMDIwXDAwMywgaG9tZT1cRUgsCisJaHRzPVxFMSwgaWNoMT1cRU4sIGlsMT1cRUwkPDUuNSo+LCBpbmQ9XkosIGlwPSQ8NS41Kj4sCisJa2JzPV5ILCBrZjA9XEVSSiwga2YxPVxFUkEsIGtmMj1cRVJCLCBrZjM9XEVSQywga2Y0PVxFUkQsCisJa2Y1PVxFUkUsIGtmNj1cRVJGLCBrZjc9XEVSRywga2Y4PVxFUkgsIGtmOT1cRVJJLCBsbD1cRUhcRUEsCisJcm1zbz1cRSFcMCwgc2dyMD1cRSFcMCwgc21zbz1cRSFcciwgdGJjPVxFMywKKyMgQ29udGVsIGMzMDEgYW5kIGMzMjEgdGVybWluYWxzLgorY29udGVsMzAxfGNvbnRlbDMyMXxjMzAxfGMzMjF8Q29udGVsIEJ1c2luZXNzIFN5c3RlbXMgQy0zMDEgb3IgQy0zMjEsCisJZmxhc2hALCBpY2gxQCwgaXBALCBybXNvPVxFIVwwJDwyMD4sIHNtc289XEUhXHIkPDIwPiwKKwl1c2U9Y29udGVsMzAwLAorCisjIyMjIERhdGEgR2VuZXJhbCAoZGcpCisjCisjIEFjY29yZGluZyB0byBKYW1lcyBDYXJsc29uIDxjYXJsc29uQHh5bG9naWNzLmNvbT4gd3JpdGluZyBpbiBKYW51YXJ5IDE5OTUsCisjIHRoZSB0ZXJtaW5hbHMgZ3JvdXAgYXQgRGF0YSBHZW5lcmFsIHdhcyBzaHV0IGRvd24gaW4gMTk5MTsgYWxsIHRoZXNlCisjIHRlcm1pbmFscyBoYXZlIHRodXMgYmVlbiBkaXNjb250aW51ZWQuCisjCisjIERHIHRlcm1pbmFscyBoYXZlIGZ1bmN0aW9uIGtleXMgdGhhdCByZXNwb25kIHRvIHRoZSBTSElGVCBhbmQgQ1RSTCBrZXlzLAorIyBlLmcuLCBTSElGVC1GMSBnZW5lcmF0ZXMgYSBkaWZmZXJlbnQgY29kZSBmcm9tIEYxLiAgVG8gbnVtYmVyIHRoZSBrZXlzCisjIHNlcXVlbnRpYWxseSwgZmlyc3QgdGhlIHVubW9kaWZpZWQga2V5IGNvZGVzIGFyZSBsaXN0ZWQgYXMgRjEgdGhyb3VnaCBGMTUuCisjIFRoZW4gdGhlaXIgU0hJRlQgdmVyc2lvbnMgYXJlIGxpc3RlZCBhcyBGMTYgdGhyb3VnaCBGMzAsIHRoZWlyIENUUkwgdmVyc2lvbnMKKyMgYXJlIGxpc3RlZCBhcyBGMzEgdGhyb3VnaCBGNDUsIGFuZCB0aGVpciBDVFJMLVNISUZUIHZlcnNpb25zIGFyZSBsaXN0ZWQgYXMKKyMgRjQ2IHRocm91Z2ggRjYwLiAgVGhpcyBpcyBkb25lIGluIHRoZSBwcml2YXRlICJpbmNsdWRlcyIgYmVsb3cgd2hvc2UgbmFtZXMKKyMgc3RhcnQgd2l0aCAiZGdrZXlzKyIuCisjCisjIERHIHRlcm1pbmFscyBnZW5lcmFsbHkgc3VwcG9ydCA4IGJpdCBjaGFyYWN0ZXJzLiAgRm9yIGVhY2ggb2YgdGhlc2UgdGVybWluYWxzCisjIHR3byBkZXNjcmlwdGlvbnMgYXJlIHN1cHBsaWVkOgorIwkxKSBBIGRlZmF1bHQgZGVzY3JpcHRpb24gZm9yIDggYml0cy9jaGFyYWN0ZXIgY29tbXVuaWNhdGlvbnMsIHdoaWNoCisjCSAgIHVzZXMgdGhlIGRlZmF1bHQgREcgaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIgc2V0IGFuZCBrZXlib2FyZCBjb2Rlcy4KKyMJMikgQSBkZXNjcmlwdGlvbiB3aXRoIHN1ZmZpeCAiLTdiIiBmb3IgNyBiaXRzL2NoYXJhY3RlciBjb21tdW5pY2F0aW9ucy4KKyMJICAgVGhpcyBkZXNjcmlwdGlvbiBtdXN0IHVzZSB0aGUgTk9OLURFRkFVTFQgbmF0aXZlIGtleWJvYXJkIGxhbmd1YWdlLgorCisjIFVubW9kaWZpZWQgZmtleXMgKGtmMS1rZjExKSwgU2hpZnQgZmtleXMgKGtmMTIta2YyMiksIEN0cmwgZmtleXMgKGtmMjMta2YzMyksCisjIEN0cmwvU2hpZnQgZmRrZXlzIChrZjM0LWtmNDQpLgorCitkZ2tleXMrOGJ8UHJpdmF0ZSBlbnRyeSBkZXNjcmliaW5nIERHIHRlcm1pbmFsIDgtYml0IEFOU0kgbW9kZSBzcGVjaWFsIGtleXMsCisJa2ExPVwyMzMwMjB6LCBrYTM9XDIzMzAyMXosIGtjMT1cMjMzMDIyeiwga2MzPVwyMzMwMjN6LAorCWtjbHI9XDIzMzJKLCBrY3ViMT1cMjMzRCwga2N1ZDE9XDIzM0IsIGtjdWYxPVwyMzNDLAorCWtjdXUxPVwyMzNBLCBrZWw9XDIzM0ssIGtmMT1cMjMzMDAxeiwga2YxMD1cMjMzMDEweiwKKwlrZjExPVwyMzMwMTF6LCBrZjEyPVwyMzMwMTJ6LCBrZjEzPVwyMzMwMTN6LAorCWtmMTQ9XDIzMzAxNHosIGtmMTU9XDIzMzAwMHosIGtmMTY9XDIzMzEwMXosCisJa2YxNz1cMjMzMTAyeiwga2YxOD1cMjMzMTAzeiwga2YxOT1cMjMzMTA0eiwKKwlrZjI9XDIzMzAwMnosIGtmMjA9XDIzMzEwNXosIGtmMjE9XDIzMzEwNnosCisJa2YyMj1cMjMzMTA3eiwga2YyMz1cMjMzMTA4eiwga2YyND1cMjMzMTA5eiwKKwlrZjI1PVwyMzMxMTB6LCBrZjI2PVwyMzMxMTF6LCBrZjI3PVwyMzMxMTJ6LAorCWtmMjg9XDIzMzExM3osIGtmMjk9XDIzMzExNHosIGtmMz1cMjMzMDAzeiwKKwlrZjMwPVwyMzMxMDB6LCBrZjMxPVwyMzMyMDF6LCBrZjMyPVwyMzMyMDJ6LAorCWtmMzM9XDIzMzIwM3osIGtmMzQ9XDIzMzIwNHosIGtmMzU9XDIzMzIwNXosCisJa2YzNj1cMjMzMjA2eiwga2YzNz1cMjMzMjA3eiwga2YzOD1cMjMzMjA4eiwKKwlrZjM5PVwyMzMyMDl6LCBrZjQ9XDIzMzAwNHosIGtmNDA9XDIzMzIxMHosCisJa2Y0MT1cMjMzMjExeiwga2Y0Mj1cMjMzMjEyeiwga2Y0Mz1cMjMzMjEzeiwKKwlrZjQ0PVwyMzMyMTR6LCBrZjQ1PVwyMzMyMDB6LCBrZjQ2PVwyMzMzMDF6LAorCWtmNDc9XDIzMzMwMnosIGtmNDg9XDIzMzMwM3osIGtmNDk9XDIzMzMwNHosCisJa2Y1PVwyMzMwMDV6LCBrZjUwPVwyMzMzMDV6LCBrZjUxPVwyMzMzMDZ6LAorCWtmNTI9XDIzMzMwN3osIGtmNTM9XDIzMzMwOHosIGtmNTQ9XDIzMzMwOXosCisJa2Y1NT1cMjMzMzEweiwga2Y1Nj1cMjMzMzExeiwga2Y1Nz1cMjMzMzEyeiwKKwlrZjU4PVwyMzMzMTN6LCBrZjU5PVwyMzMzMTR6LCBrZjY9XDIzMzAwNnosCisJa2Y2MD1cMjMzMzAweiwga2Y3PVwyMzMwMDd6LCBrZjg9XDIzMzAwOHosIGtmOT1cMjMzMDA5eiwKKwlraG9tZT1cMjMzSCwga3BydD1cMjMzaSwKKworZGdrZXlzKzdifFByaXZhdGUgZW50cnkgZGVzY3JpYmluZyBERyB0ZXJtaW5hbCA3LWJpdCBBTlNJIG1vZGUgc3BlY2lhbCBrZXlzLAorCWthMT1cRVswMjB6LCBrYTM9XEVbMDIxeiwga2MxPVxFWzAyMnosIGtjMz1cRVswMjN6LAorCWtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2VsPVxFW0ssIGtmMT1cRVswMDF6LCBrZjEwPVxFWzAxMHosIGtmMTE9XEVbMDExeiwKKwlrZjEyPVxFWzAxMnosIGtmMTM9XEVbMDEzeiwga2YxND1cRVswMTR6LCBrZjE1PVxFWzAwMHosCisJa2YxNj1cRVsxMDF6LCBrZjE3PVxFWzEwMnosIGtmMTg9XEVbMTAzeiwga2YxOT1cRVsxMDR6LAorCWtmMj1cRVswMDJ6LCBrZjIwPVxFWzEwNXosIGtmMjE9XEVbMTA2eiwga2YyMj1cRVsxMDd6LAorCWtmMjM9XEVbMTA4eiwga2YyND1cRVsxMDl6LCBrZjI1PVxFWzExMHosIGtmMjY9XEVbMTExeiwKKwlrZjI3PVxFWzExMnosIGtmMjg9XEVbMTEzeiwga2YyOT1cRVsxMTR6LCBrZjM9XEVbMDAzeiwKKwlrZjMwPVxFWzEwMHosIGtmMzE9XEVbMjAxeiwga2YzMj1cRVsyMDJ6LCBrZjMzPVxFWzIwM3osCisJa2YzND1cRVsyMDR6LCBrZjM1PVxFWzIwNXosIGtmMzY9XEVbMjA2eiwga2YzNz1cRVsyMDd6LAorCWtmMzg9XEVbMjA4eiwga2YzOT1cRVsyMDl6LCBrZjQ9XEVbMDA0eiwga2Y0MD1cRVsyMTB6LAorCWtmNDE9XEVbMjExeiwga2Y0Mj1cRVsyMTJ6LCBrZjQzPVxFWzIxM3osIGtmNDQ9XEVbMjE0eiwKKwlrZjQ1PVxFWzIwMHosIGtmNDY9XEVbMzAxeiwga2Y0Nz1cRVszMDJ6LCBrZjQ4PVxFWzMwM3osCisJa2Y0OT1cRVszMDR6LCBrZjU9XEVbMDA1eiwga2Y1MD1cRVszMDV6LCBrZjUxPVxFWzMwNnosCisJa2Y1Mj1cRVszMDd6LCBrZjUzPVxFWzMwOHosIGtmNTQ9XEVbMzA5eiwga2Y1NT1cRVszMTB6LAorCWtmNTY9XEVbMzExeiwga2Y1Nz1cRVszMTJ6LCBrZjU4PVxFWzMxM3osIGtmNTk9XEVbMzE0eiwKKwlrZjY9XEVbMDA2eiwga2Y2MD1cRVszMDB6LCBrZjc9XEVbMDA3eiwga2Y4PVxFWzAwOHosCisJa2Y5PVxFWzAwOXosIGtob21lPVxFW0gsIGtwcnQ9XEVbaSwKKworZGdrZXlzKzExfFByaXZhdGUgZW50cnkgZGVzY3JpYmluZyAxMSBtaW5pbWFsLXN1YnNldCBERyBtb2RlIHNwZWNpYWwga2V5cywKKwlrY2xyPV5MLCBrY3ViMT1eWSwga2N1ZDE9XlosIGtjdWYxPV5YLCBrY3V1MT1eVywga2VsPV5LLAorCWtmMT1eXnEsIGtmMTA9Xl56LCBrZjExPV5eeywga2YxMj1eXmEsIGtmMTM9Xl5iLCBrZjE0PV5eYywKKwlrZjE1PV5eZCwga2YxNj1eXmUsIGtmMTc9Xl5mLCBrZjE4PV5eZywga2YxOT1eXmgsIGtmMj1eXnIsCisJa2YyMD1eXmksIGtmMjE9Xl5qLCBrZjIyPV5eaywga2YyMz1eXjEsIGtmMjQ9Xl4yLCBrZjI1PV5eMywKKwlrZjI2PV5eNCwga2YyNz1eXjUsIGtmMjg9Xl42LCBrZjI5PV5eNywga2YzPV5ecywga2YzMD1eXjgsCisJa2YzMT1eXjksIGtmMzI9Xl5cOiwga2YzMz1eXjssIGtmMzQ9Xl4hLCBrZjM1PV5eIiwga2YzNj1eXiMsCisJa2YzNz1eXiQsIGtmMzg9Xl4lJSwga2YzOT1eXiYsIGtmND1eXnQsIGtmNDA9Xl4nLCBrZjQxPV5eKCwKKwlrZjQyPV5eKSwga2Y0Mz1eXiosIGtmNDQ9Xl4rLCBrZjU9Xl51LCBrZjY9Xl52LCBrZjc9Xl53LAorCWtmOD1eXngsIGtmOT1eXnksIGtob21lPV5ILAorCitkZ2tleXMrMTV8UHJpdmF0ZSBlbnRyeSBkZXNjcmliaW5nIDE1IERHIG1vZGUgc3BlY2lhbCBrZXlzLAorCWtIT009Xl5eSCwga0xGVD1eXl5ZLCBrUklUPV5eXlgsIGthMT1eXlxcLCBrYTM9Xl5dLCBrYzE9Xl5cXiwKKwlrYzM9Xl5fLCBrZjE9Xl5xLCBrZjEwPV5eeiwga2YxMT1eXnssIGtmMTI9Xl58LCBrZjEzPV5efSwKKwlrZjE0PV5efiwga2YxNT1eXnAsIGtmMTY9Xl5hLCBrZjE3PV5eYiwga2YxOD1eXmMsIGtmMTk9Xl5kLAorCWtmMj1eXnIsIGtmMjA9Xl5lLCBrZjIxPV5eZiwga2YyMj1eXmcsIGtmMjM9Xl5oLCBrZjI0PV5eaSwKKwlrZjI1PV5eaiwga2YyNj1eXmssIGtmMjc9Xl5sLCBrZjI4PV5ebSwga2YyOT1eXm4sIGtmMz1eXnMsCisJa2YzMD1eXmAsIGtmMzE9Xl4xLCBrZjMyPV5eMiwga2YzMz1eXjMsIGtmMzQ9Xl40LCBrZjM1PV5eNSwKKwlrZjM2PV5eNiwga2YzNz1eXjcsIGtmMzg9Xl44LCBrZjM5PV5eOSwga2Y0PV5edCwga2Y0MD1eXlw6LAorCWtmNDE9Xl47LCBrZjQyPV5ePCwga2Y0Mz1eXj0sIGtmNDQ9Xl4+LCBrZjQ1PV5eMCwga2Y0Nj1eXiEsCisJa2Y0Nz1eXiIsIGtmNDg9Xl4jLCBrZjQ5PV5eJCwga2Y1PV5edSwga2Y1MD1eXiUlLCBrZjUxPV5eJiwKKwlrZjUyPV5eJywga2Y1Mz1eXigsIGtmNTQ9Xl4pLCBrZjU1PV5eKiwga2Y1Nj1eXissIGtmNTc9Xl5cLCwKKwlrZjU4PV5eLSwga2Y1OT1eXi4sIGtmNj1eXnYsIGtmNjA9Xl5ccywga2Y3PV5edywga2Y4PV5eeCwKKwlrZjk9Xl55LAorCisjIERhdGEgR2VuZXJhbCBjb2xvciB0ZXJtaW5hbHMgdXNlIHRoZSAiVGVrdHJvbml4IiBjb2xvciBtb2RlbC4gIFRoZSB0b3RhbAorIyBudW1iZXIgb2YgY29sb3JzIHZhcmllcyB3aXRoIHRoZSB0ZXJtaW5hbCBtb2RlbCwgYXMgZG9lcyBzdXBwb3J0IGZvcgorIyBhdHRyaWJ1dGVzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBjb2xvci4KKworIyBSZW1vdmVkIHU3LCB1OCBkZWZpbml0aW9ucyBzaW5jZSB0aGV5IGNvbmZsaWN0IHdpdGggdGFjazoKKyMJCVByZXNlcnZlIHVzZXItZGVmaW5lZCBjb2xvcnMgaW4gYXQgbGVhc3Qgc29tZSBjYXNlcy4KKyMJdTc9Xl5GaCwKKyMJCURlZmF1bHQgaXMgQUNNIG1vZGUuCisjCXU4PV5eRn0yMF5eRmleXkZ9MjEsCisjCitkZ3VuaXgrZml4ZWR8Rml4ZWQgY29sb3IgaW5mbyBmb3IgREcgRDQzMEMgdGVybWluYWxzIGluIERHLVVOSVggbW9kZSwKKwliY2UsCisJY29sb3JzIzE2LCBuY3YjNTMsIHBhaXJzIzI1NiwKKwlvcD1cMDM2QWRcMDM2QmQsCisJc2V0YWI9XDAzNkIlcDElPyVwMSV7OH0lPCV0JXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JTslezQ4fSUrJWMsCisJc2V0YWY9XDAzNkElcDElPyVwMSV7OH0lPCV0JXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JTslezQ4fSUrJWMsCisJc2V0Yj1cMDM2QiVwMSV7NDh9JSslYywgc2V0Zj1cMDM2QSVwMSV7NDh9JSslYywKKworZGcrZml4ZWR8Rml4ZWQgY29sb3IgaW5mbyBmb3IgREcgRDQzMEMgdGVybWluYWxzIGluIERHIG1vZGUsCisJdXNlPWRndW5peCtmaXhlZCwKKworIyBWaWRlbyBhdHRyaWJ1dGVzIGFyZSBjb29yZGluYXRlZCB1c2luZyBzdGF0aWMgdmFyaWFibGVzIHNldCBieSAic2dyIiwgdGhlbgorIyBjaGVja2VkIGJ5ICJvcCIsICJzZXRhW2JmXSIsIGFuZCAic2V0W2JmXSIgdG8gcmVmcmVzaCB0aGUgYXR0cmlidXRlIHNldHRpbmdzLgorIyAoRD1kaW0sIFU9dW5kZXJsaW5lLCBCPWJsaW5rLCBSPXJldmVyc2UuKQorZGcrY29sb3I4fENvbG9yIGluZm8gZm9yIERhdGEgR2VuZXJhbCBEMjIwIGFuZCBEMjMwQyB0ZXJtaW5hbHMgaW4gQU5TSSBtb2RlLAorCWJjZSwKKwljb2xvcnMjOCwgbmN2IzE2LCBwYWlycyM2NCwKKwlvcD1cRVslPyVnRCV0MjslOyU/JWdVJXQ0OyU7JT8lZ0IldDU7JTslPyVnUiV0NzslO20sCisJc2V0YWI9XEVbNCVwMSVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCXNldGFmPVxFWzMlcDElZCU/JWdEJXQ7MiU7JT8lZ1UldDs0JTslPyVnQiV0OzUlOyU/JWdSJXQ7NyU7bSwKKwlzZXRiPVxFWzQlcDElezJ9JSYlPyVwMSV7MX0lJiV0JXs0fSV8JTslPyVwMSV7NH0lJiV0JXsxfSV8JTslZCU/JWdEJXQ7MiU7JT8lZ1UldDs0JTslPyVnQiV0OzUlOyU/JWdSJXQ7NyU7bSwKKwlzZXRmPVxFWzMlcDElezJ9JSYlPyVwMSV7MX0lJiV0JXs0fSV8JTslPyVwMSV7NH0lJiV0JXsxfSV8JTslZCU/JWdEJXQ7MiU7JT8lZ1UldDs0JTslPyVnQiV0OzUlOyU/JWdSJXQ7NyU7bSwKKworZGcrY29sb3J8Q29sb3IgaW5mbyBmb3IgRGF0YSBHZW5lcmFsIEQ0NzBDIHRlcm1pbmFscyBpbiBBTlNJIG1vZGUsCisJY29sb3JzIzE2LCBuY3YjNTMsIHBhaXJzIzI1NiwKKwlzZXRhYj1cRVslPyVwMSV7OH0lPCV0NCVwMSVlPSVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyU7JWQlPyVnRCV0OzIlOyU/JWdVJXQ7NCU7JT8lZ0IldDs1JTslPyVnUiV0OzclO20sCisJc2V0YWY9XEVbJT8lcDElezh9JTwldDMlcDElZTwlcDElezJ9JSYlPyVwMSV7MX0lJiV0JXs0fSV8JTslPyVwMSV7NH0lJiV0JXsxfSV8JTslOyVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCXNldGI9XEVbJT8lcDElezh9JTwldDQlZT0lOyVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCXNldGY9XEVbJT8lcDElezh9JTwldDMlZTwlOyVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCXVzZT1kZytjb2xvcjgsCisKK2RnbW9kZStjb2xvcjh8Q29sb3IgaW5mbyBmb3IgRGF0YSBHZW5lcmFsIEQyMjAvRDIzMEMgdGVybWluYWxzIGluIERHIG1vZGUsCisJYmNlLAorCWNvbG9ycyM4LCBuY3YjMTYsIHBhaXJzIzY0LAorCW9wPVwwMzZBZFwwMzZCZCwKKwlzZXRhYj1cMDM2QiVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyV7NDh9JSslYywKKwlzZXRhZj1cMDM2QSVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyV7NDh9JSslYywKKwlzZXRiPVwwMzZCJXAxJXs0OH0lKyVjLCBzZXRmPVwwMzZBJXAxJXs0OH0lKyVjLAorCitkZ21vZGUrY29sb3J8Q29sb3IgaW5mbyBmb3IgRGF0YSBHZW5lcmFsIEQ0NzBDIHRlcm1pbmFscyBpbiBERyBtb2RlLAorCWNvbG9ycyMxNiwgcGFpcnMjMjU2LAorCXNldGFiPVwwMzZCJXAxJT8lcDElezh9JTwldCV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyU7JXs0OH0lKyVjLAorCXNldGFmPVwwMzZBJXAxJT8lcDElezh9JTwldCV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyU7JXs0OH0lKyVjLAorCXVzZT1kZ21vZGUrY29sb3I4LAorCitkZ3VuaXgrY2NjfENvbmZpZ3VyYWJsZSBjb2xvciBpbmZvIGZvciBERyBENDMwQyB0ZXJtaW5hbHMgaW4gREctVU5JWCBtb2RlLAorCWJjZSwgY2NjLAorCWNvbG9ycyM1MiwgbmN2IzUzLCBwYWlycyMyNiwKKwlpbml0cD1cMDM2UkcwJXAxJTAyWCVwMiV7MjU2fSUqJXsxMDAxfSUvJTAyWCVwMyV7MjU2fSUqJXsxMDAxfSUvJTAyWCVwNCV7MjU2fSUqJXsxMDAxfSUvJTAyWCVwNSV7MjU2fSUqJXsxMDAxfSUvJTAyWCVwNiV7MjU2fSUqJXsxMDAxfSUvJTAyWCVwNyV7MjU2fSUqJXsxMDAxfSUvJTAyWCwKKwlvYz1cMDM2UkcwMUEwMEZGMDAwMDAwMDBcMDM2UkcwMUIwMDAwMDAwMEZGMDBcMDM2UkcwMUMwMDdGMDAwMDAwMDBcMDM2UkcwMUQwMDAwMDAwMDdGMDAsCisJb3A9XDAzNlJGNDgzMUFcMDM2UkYyRTMxQlwwMzZSRjFEMzFDXDAzNlJGM0YzMUQsCisJc2NwPVwwMzZSRzIlcDElMDJYLAorCisjIENvbG9ycyBhcmUgaW4gdGhlIG9yZGVyOiAgbm9ybWFsLCByZXZlcnNlLCBkaW0sIGRpbSArIHJldmVyc2UuCitkZytjY2N8Q29uZmlndXJhYmxlIGNvbG9yIGluZm8gZm9yIERHIEQ0MzBDIHRlcm1pbmFscyBpbiBERyBtb2RlLAorCWJjZSwgY2NjLAorCWNvbG9ycyM1MiwgbmN2IzUzLCBwYWlycyMyNiwKKwlpbml0cD1cMDM2UkcwJXAxJXsxNn0lLyV7NDh9JSslYyVwMSV7MTZ9JW0lezQ4fSUrJWMlcDIlezI1Nn0lKiV7MTAwMX0lLyVQYSVnYSV7MTZ9JS8lezQ4fSUrJWMlZ2ElezE2fSVtJXs0OH0lKyVjJXAzJXsyNTZ9JSolezEwMDF9JS8lUGElZ2ElezE2fSUvJXs0OH0lKyVjJWdhJXsxNn0lbSV7NDh9JSslYyVwNCV7MjU2fSUqJXsxMDAxfSUvJVBhJWdhJXsxNn0lLyV7NDh9JSslYyVnYSV7MTZ9JW0lezQ4fSUrJWMlcDUlezI1Nn0lKiV7MTAwMX0lLyVQYSVnYSV7MTZ9JS8lezQ4fSUrJWMlZ2ElezE2fSVtJXs0OH0lKyVjJXA2JXsyNTZ9JSolezEwMDF9JS8lUGElZ2ElezE2fSUvJXs0OH0lKyVjJWdhJXsxNn0lbSV7NDh9JSslYyVwNyV7MjU2fSUqJXsxMDAxfSUvJVBhJWdhJXsxNn0lLyV7NDh9JSslYyVnYSV7MTZ9JW0lezQ4fSUrJWMsCisJb2M9XDAzNlJHMDFcOjAwPz8wMDAwMDAwMFwwMzZSRzAxOzAwMDAwMDAwPz8wMFwwMzZSRzAxPDAwNz8wMDAwMDAwMFwwMzZSRzAxPTAwMDAwMDAwNz8wMCwKKwlvcD1cMDM2UkY0ODMxXDpcMDM2UkYyPjMxO1wwMzZSRjE9MzE8XDAzNlJGMz8zMT0sCisJc2NwPVwwMzZSRzIlcDElezE2fSUvJXs0OH0lKyVjJXAxJXsxNn0lbSV7NDh9JSslYywKKworIyBUaGUgZ2VuZXJpYyBERyB0ZXJtaW5hbCB0eXBlIChhbiA4LWJpdC1jbGVhbiBzdWJzZXQgb2YgdGhlIDYwNTMpCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAxIHNldHM6CisjCV5SCQktIHZlcnRpY2FsIHNjcm9sbGluZyBlbmFibGVkCisjCV5DCQktIGJsaW5raW5nIGVuYWJsZWQKK2RnLWdlbmVyaWN8R2VuZXJpYyBEYXRhIEdlbmVyYWwgdGVybWluYWwgaW4gREcgbW9kZSwKKwlhbSwgYncsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPV5OLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XlksIGN1ZDE9XlosIGN1ZjE9XlgsCisJY3VwPVwwMjAlcDIlYyVwMSVjLCBjdXUxPV5XLCBkaW09XlwsIGVsPV5LLCBpbmQ9XkosIGlzMT1eUl5DLAorCW1jMD1eUSwgbmVsPV5KLCBybXNvPV5dLCBybXVsPV5VLCBzZ3IwPV5PXlVeXSwgc21zbz1eXCwKKwlzbXVsPV5ULCB1c2U9ZGdrZXlzKzExLAorCisjIEFjY29yZGluZyB0byB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZSwgdGhlIGRnMjAwIDxjdXA+IHNob3VsZCBiZSB0aGUKKyMgdGVybWNhcCBlcXVpdmFsZW50IG9mIFwwMjAlcDIlezEyOH0lKyVjJXAxJXsxMjh9JSslYyAoaW4gdGVybWNhcAorIyBub3RhdGlvbiB0aGF0J3MgIl5QJXIlK1wyMDAlK1wyMDAiKS4gIFRob3NlIFwyMDBzIGFyZSBzdXNwaWNpb3VzLAorIyBtYXliZSB0aGV5IHdlcmUgb3JpZ2luYWxseSBudWxzICh3aGljaCB3b3VsZCBmaXQpLgorCitkZzIwMHxkYXRhIGdlbmVyYWwgZGFzaGVyIDIwMCwKKwlPVGJzLCBhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XlksIGN1ZDE9XlosIGN1ZjE9XlgsCisJY3VwPVwwMjAlcDIlYyVwMSVjLCBjdXUxPV5XLCBlbD1eSywgaG9tZT1eSCwgaW5kPV5KLAorCWtjdWIxPV5ZLCBrY3VkMT1eWiwga2N1ZjE9XlgsIGtjdXUxPV5XLCBrZjA9Xl56LCBrZjE9Xl5xLAorCWtmMj1eXnIsIGtmMz1eXnMsIGtmND1eXnQsIGtmNT1eXnUsIGtmNj1eXnYsIGtmNz1eXncsIGtmOD1eXngsCisJa2Y5PV5eeSwga2hvbWU9XkgsIGxmMD1mMTAsIG5lbD1eSiwgcm1zbz1eXkUsIHJtdWw9XlUsCisJc21zbz1eXkQsIHNtdWw9XlQsCisKKyMgRGF0YSBHZW5lcmFsIDIxMC8yMTEgKGFuZCA0MTA/KQlmcm9tIExlZSBQZWFyc29uICh1bWljaCFscCkgdmlhIEJSTAorZGcyMTB8ZGctYW5zaXxEYXRhIEdlbmVyYWwgMjEwLzIxMSwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlPVG5sPVxFW0IsIGNsZWFyPVxFWzJKLCBjdWQxPVxFW0IsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXUxPVxFW0EsIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILAorCW5lbD1cclxFW0hcRVtBXG4sIHJtc289XEVbMDttLCBybXVsPVxFWzA7bSwgc21zbz1cRVs3O20sCisJc211bD1cRVs0O20sCisjIEZyb206IFBldGVyIE4uIFdhbiA8aWhucDQhZ2F0ZWNoIWdhY3NyIXdhbj4KKyMgY291cnRlc3kgb2YgQ2FybG9zIFJ1Y2FsZGUgb2YgVmFudGFnZSBTb2Z0d2FyZSwgSW5jLgorIyAoZGcyMTE6IHRoaXMgaGFkIDxjdXA9XDAyMCVyJS4lPi4sIHdoaWNoIHdhcyBhbiBhbmNpZW50IHRlcm1jYXAgaGFuZ292ZXIuCisjIEkgc3VzcGVjdCB0aGUgZDIwMCBmdW5jdGlvbiBrZXlzIGFjdHVhbGx5IHdvcmsgb24gdGhlIGRnMjExLCBjaGVjayBpdCBvdXQuKQorZGcyMTF8RGF0YSBHZW5lcmFsIGQyMTEsCisJY25vcm09XkwsIGN2dmlzPV5MXlIsIGh0PV5JLCBpbmRALCBrYnM9XlksIGtmMEAsIGtmMUAsIGtmMkAsIGtmM0AsCisJa2Y0QCwga2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwga2Y5QCwgbGYwQCwgbmVsPV5NXlosIHJtY3VwPV5MLAorCXJtc289XDAzNkUkPFwwLz4sIHNtY3VwPV5MXlIsIHNtc289XDAzNkQkPDUvPiwgdXNlPWRnMjAwLAorCisjIGRnNDUwIGZyb20gQ29ybmVsbCAobm90IG9mZmljaWFsKQorZGc0NTB8ZGc2MTM0fGRhdGEgZ2VuZXJhbCA2MTM0LAorCWN1YjFALCBjdWYxPV5YLCB1c2U9ZGcyMDAsCisKKyMgTm90IG9mZmljaWFsLi4uCisjIE5vdGU6IGxlc3NlciBEYXNoZXIgdGVybWluYWxzIHdpbGwgbm90IHdvcmsgd2l0aCB2aSBiZWNhdXNlIHZpIGluc2lzdHMgdXBvbgorIyBoYXZpbmcgYSBjb21tYW5kIHRvIG1vdmUgc3RyYWlnaHQgZG93biBmcm9tIGFueSBwb3NpdGlvbiBvbiB0aGUgYm90dG9tIGxpbmUKKyMgYW5kIHNjcm9sbCB0aGUgc2NyZWVuIHVwLCBvciBhIGRpcmVjdCB2ZXJ0aWNhbCBzY3JvbGwgY29tbWFuZC4gIFRoZSA0NjAgYW5kCisjIGFib3ZlIGhhdmUgYm90aCwgdGhlIEQyMTAvMjExLCBmb3IgaW5zdGFuY2UsIGhhcyBuZWl0aGVyLiAgV2UgbXVzdCB1c2UgQU5TSQorIyBtb2RlIHJhdGhlciB0aGFuIERHIG1vZGUgYmVjYXVzZSBzdGFuZGFyZCBVTklYIHR0eSBkcml2ZXJzIGFzc3VtZSB0aGF0IF5IIGlzCisjIGJhY2tzcGFjZSBvbiBhbGwgdGVybWluYWxzLiAgVGhpcyBpcyBub3Qgc28gaW4gREcgbW9kZS4KKyMgKGRnNDYwLWFuc2k6IHJlbW92ZWQgb2Jzb2xldGUgIjprbiM2OiI7IGFsc28gcmVtb3ZlZCAiOm11PVxFVzoiLCBvbiB0aGUKKyMgZ3JvdW5kcyB0aGF0IHRoZXJlIGlzIG5vIG1hdGNoaW5nICI6bWw6IgorIyBmaXhlZCBnYXJibGVkICI6azk9XEVbMDBcOno6IiBjYXBhYmlsaXR5IC0tIGVzcikKK2RnNDYwLWFuc2l8RGF0YSBHZW5lcmFsIERhc2hlciA0NjAgaW4gQU5TSS1tb2RlLAorCU9UYnMsIGFtLCBtc2dyLCB1bCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlPVG5sPVxFRCwgYmxpbms9XEVbNW0sIGNsZWFyPVxFWzJKLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsCisJZGltPVxFWzJtLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpY2gxPVxFW0AsIGlsMT1cRVtMLCBpbmQ9XEVbUywgaXMyPV5eRkAsIGticz1cRVtELAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2YwPVxFWzAwMXosIGtmMT1cRVswMDJ6LCBrZjI9XEVbMDAzeiwga2YzPVxFWzAwNHosCisJa2Y0PVxFWzAwNXosIGtmNT1cRVswMDZ6LCBrZjY9XEVbMDA3eiwga2Y3PVxFWzAwOHosCisJa2Y4PVxFWzAwOXosIGtmOT1cRVswMTB6LCBraG9tZT1cRVtILCBsZjA9ZjEsIGxmMT1mMiwgbGYyPWYzLAorCWxmMz1mNCwgbGY0PWY1LCBsZjU9ZjYsIGxmNj1mNywgbGY3PWY4LCBsZjk9ZjEwLCByZXY9XEVbN20sCisJcmk9XEVbVCwgcm1zbz1cRVttLCBybXVsPVxFWzA1LCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwKKyMgRnJvbTogV2F5bmUgVGhyb29wIDxtY25jIXJ0aS1zZWwhcnRwNDchdGhyb29wdz4gKG5vdCBvZmZpY2lhbCkKKyMgRGF0YSBHZW5lcmFsIDYwNXgKKyMgT3VnaHQgdG8gd29yayBmb3IgYSBNb2RlbCA2MjQyLCBUeXBlIEQyMTAgYXMgd2VsbCBhcyBhIDYwNXguCisjIE5vdGUgdGhhdCB0aGUgY3Vyc29yLWRvd24ga2V5IHRyYW5zbWl0cyBeWi4gIEpvYiBjb250cm9sIHVzZXJzLCBiZXdhcmUhCisjIFRoaXMgYWxzbyBtYXRjaGVzIGEgcG9zdGVkIGRlc2NyaXB0aW9uIG9mIHNvbWV0aGluZyBjYWxsZWQgYSBgRGFzaGVyIDEwMCcKKyMgc28gdGhlcmUncyBhIGRnMTAwIGFsaWFzIGhlcmUuCisjIChkZzYwNTM6IHRoZSA0LjRCU0QgZmlsZSBoYWQgPGN1YjE9Xkg+LCA8Y3VkMT1eSj4sIDxjdWYxPV5TPi4gLS0gZXNyKQorZGc2MDUzLW9sZHxkZzEwMHxkYXRhIGdlbmVyYWwgNjA1MywKKwlPVGJzLCBhbSwgYncsIHVsLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCU9UYmM9XlksIGJlbD1eRywgY2xlYXI9XkwsIGNub3JtPV5MLCBjcj1eTSwgY3ViMT1eWSwgY3VkMT1eWiwKKwljdWYxPV5YLCBjdXA9XDAyMCVwMiVjJXAxJWMsIGN1dTE9XlcsIGN2dmlzPV5MXlIsIGVsPV5LLAorCWhvbWU9XkgsIGh0PV5JLCBpczI9XlIsIGticz1eWSwga2N1YjE9XlksIGtjdWQxPV5aLCBrY3VmMT1eWCwKKwlrY3V1MT1eVywga2YwPV5ecSwga2YxPV5eciwga2YyPV5ecywga2YzPV5edCwga2Y0PV5edSwga2Y1PV5ediwKKwlrZjY9Xl53LCBrZjc9Xl54LCBrZjg9Xl55LCBrZjk9Xl56LCBraG9tZT1eSCwgcm1jdXA9XkwsCisJcm1zbz1cMF5eRSwgcm11bD1eVSwgc21jdXA9XkxeUiwgc21zbz1cMFwwXDBcMFwwXDAzNkQsCisJc211bD1eVCwKKworIyAoU29tZSBwZXJmb3JtYW5jZSBjYW4gYmUgZ2FpbmVkIG92ZXIgdGhlIGdlbmVyaWMgREcgdGVybWluYWwgdHlwZSkKK2RnNjA1M3w2MDUzfDYwNTMtZGd8ZGc2MDV4fDYwNXh8NjA1eC1kZ3xkMnxkMi1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIDYwNTMsCisJeG9uQCwKKwlob21lPV5QXDBcMCwgbGw9XlBcMF5XLCB1c2U9ZGctZ2VuZXJpYywKKworIyBMaWtlIDYwNTMsIGJ1dCBhZGRzIHJldmVyc2UgdmlkZW8gYW5kIG1vcmUga2V5cGFkIGFuZCBmdW5jdGlvbiBrZXlzLgorZDIwMHxkMjAwLWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDIwMCwKKwlib2xkPV5eRF5ULCBob21lQCwgbGxALCByZXY9Xl5ELCBybXNvPV5eRV5dLAorCXNncj1cMDM2JT8lcDElcDMlfCVwNiV8JXREJWVFJTslPyVwMiVwNiV8JXRcMDI0JWVcMDI1JTslPyVwNCV0XDAxNiVlXDAxNyU7JT8lcDElcDUlfCV0XDAzNCVlXDAzNSU7LAorCXNncjA9XDAxN1wwMjVcMDM1XDAzNkUsIHNtc289Xl5EXlwsIHVzZT1kZ2tleXMrMTUsCisJdXNlPWRnNjA1MywKKworIyBEQVNIRVIgRDIxMCBzZXJpZXMgdGVybWluYWxzIGluIEFOU0kgbW9kZS4KKyMJUmV2ZXJzZSB2aWRlbywgbm8gaW5zZXJ0L2RlbGV0ZSBjaGFyYWN0ZXIvbGluZSwgNyBiaXRzL2NoYXJhY3RlciBvbmx5LgorIworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMSBzZXRzOgorIwk8MAkJLSBzY3JvbGxpbmcgZW5hYmxlZAorIwk8MQkJLSBibGluayBlbmFibGVkCisjCTw0CQktIHByaW50IGNoYXJhY3RlcnMgcmVnYXJkbGVzcyBvZiBhdHRyaWJ1dGVzCitkMjEwfGQyMTR8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjEwIHNlcmllcywKKwlhbSwgYncsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzQ7N20sIGNsZWFyPVxFWzJKLCBjcj1eTSwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkaW09XEVbMm0sIGVkPVxFW0osIGVsPVxFW0ssCisJZWwxPVxFWzFLLCBob21lPVxFW0gsIGluZD1eSiwgaXMxPVxFWzwwOzwxOzw0bCwKKwlsbD1cRVtIXEVbQSwgbmVsPV5KLCByZXY9XEVbN20sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNncj1cRVslPyVwMSVwMyV8JXA2JXwldDc7JTslPyVwNCV0NTslOyU/JXAyJXA2JXwldDQ7JTslPyVwMSVwNSV8JXQyOyU7bSwKKwlzZ3IwPVxFW20sIHNtc289XEVbMjs3bSwgc211bD1cRVs0bSwgdXNlPWRna2V5cys3YiwKKworIyBEQVNIRVIgRDIxMCBzZXJpZXMgdGVybWluYWxzIGluIERHIG1vZGUuCisjIExpa2UgRDIwMCwgYnV0IGFkZHMgY2xlYXIgdG8gZW5kLW9mLXNjcmVlbiBhbmQgbmVlZHMgWE9OL1hPRkYuCitkMjEwLWRnfGQyMTQtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjEwIHNlcmllcyBpbiBERyBtb2RlLAorCXhvbiwKKwllZD1eXkZGLCB1c2U9ZDIwMC1kZywKKworIyBEQVNIRVIgRDIxMSBzZXJpZXMgdGVybWluYWxzIGluIEFOU0kgbW9kZS4KKyMgTGlrZSB0aGUgRDIxMCwgYnV0IHdpdGggOC1iaXQgY2hhcmFjdGVycyBhbmQgbG9jYWwgcHJpbnRlciBzdXBwb3J0LgorIworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMiBzZXRzOgorIwlcRVsyOzE7MTsxdgorIwkJMjsxCS0gOCBiaXQgb3BlcmF0aW9ucworIwkJMTsxCS0gOCBiaXQgKGludGVybmF0aW9uYWwpIGtleWJvYXJkIGxhbmd1YWdlCisjCVxFKEIJCS0gZGVmYXVsdCBwcmltYXJ5IGNoYXJhY3RlciBzZXQgKFUuUy4gQVNDSUkpCisjCVxFKTQJCS0gZGVmYXVsdCBzZWNvbmRhcnkgY2hhcmFjdGVyIHNldCAoaW50ZXJuYXRpb25hbCkKKyMJXk8JCS0gcHJpbWFyeSBjaGFyYWN0ZXIgc2V0CisjCitkMjExfGQyMTV8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjExIHNlcmllcywKKwlrbSwKKwlpczI9XEVbMjsxOzE7MXZcRShCXEUpNFwwMTcsIG1jMD1cRVtpLCB1c2U9ZGdrZXlzKzhiLAorCXVzZT1kMjEwLAorCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAyIHNldHM6CisjCVxFWzI7MDsxOzB2CisjCQkyOzAJLSA3IGJpdCBvcGVyYXRpb25zCisjCQkxOzAJLSA3IGJpdCAobmF0aXZlKSBrZXlib2FyZCBsYW5ndWFnZQorIwlcRSgwCQktIGRlZmF1bHQgY2hhcmFjdGVyIHNldCAodGhlIGtleWJvYXJkIG5hdGl2ZSBsYW5ndWFnZSkKKyMJXk8JCS0gcHJpbWFyeSBjaGFyYWN0ZXIgc2V0CitkMjExLTdifGQyMTUtN2J8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjExIHNlcmllcyBpbiA3IGJpdCBtb2RlLAorCWttQCwKKwlpczI9XEVbMjswOzE7MHZcRSgwXDAxNywgdXNlPWRna2V5cys3YiwgdXNlPWQyMTEsCisKKyMgTGlrZSB0aGUgRDIxMCBzZXJpZXMsIGJ1dCBhZGRzIHN1cHBvcnQgZm9yIDgtYml0IGNoYXJhY3RlcnMuCisjCisjIFJlc2V0IHN0cmluZyAyIHNldHM6CisjCV5eTgktIHNlY29uZGFyeSBjaGFyYWN0ZXIgc2V0CisjCV5eRlMwPgktIDggYml0IGludGVybmF0aW9uYWwgY2hhcmFjdGVyIHNldAorIwleXk8JLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKKyMJXl5GUzAwCS0gZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IChtYXRjaGluZyB0aGUgbmF0aXZlIGtleWJvYXJkIGxhbmd1YWdlKQorIworZDIxMS1kZ3xkMjE1LWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDIxMSBzZXJpZXMgaW4gREcgbW9kZSwKKwlrbSwKKwlyczI9XDAzNk5cMDM2RlMwPlwwMzZPXDAzNkZTMDAsIHVzZT1kMjEwLWRnLAorCitkMjE2LWRnfGQyMTZlLWRnfGQyMTYrZGd8ZDIxNmUrZGd8ZDIxNy1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTYgc2VyaWVzIGluIERHIG1vZGUsCisJdXNlPWQyMTEtZGcsCisKKyMgRW5oYW5jZWQgREcgbW9kZSB3aXRoIGNoYW5nZXMgdG8gYmUgbW9yZSBVTklYIGNvbXBhdGlibGUuCitkMjE2LXVuaXh8ZDIxNmUtdW5peHxkMjE2K3xkMjE2ZSt8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjE2KyBpbiBERy1VTklYIG1vZGUsCisJbWM1aSwKKwlpdCM4LAorCWFjc2M9YVwxNzdqJGsibCFtI24pcSt0J3Umdih3JXgqLCBibGluaz1eXlBJLAorCWNsZWFyPV5eUEgsIGN1YjE9Xl5QRCwgY3VkMT1eXlBCLCBjdWYxPV5eUEMsIGN1dTE9Xl5QQSwKKwllbD1eXlBFLCBob21lPV5eUEYsIGhwYT1cMDIwJXAxJWNcMTc3LCBodD1eSSwgaW5kPV5KLAorCWlzMT1cMDIyXDAwM1wwMzZQQDEsIGlzMz1cMDM2RnowLCBrSE9NPV5eUGYsIGtMRlQ9Xl5QZCwKKwlrUFJUPV5eUDEsIGtSSVQ9Xl5QYywga2Nscj1eXlBILCBrY3ViMT1eXlBELCBrY3VkMT1eXlBCLAorCWtjdWYxPV5eUEMsIGtjdXUxPV5eUEEsIGtlbD1eXlBFLCBraG9tZT1eXlBGLCBrcHJ0PV5eUDAsCisJbWMwPVwwMzZGPzksIG1jND1eXkZhLCBtYzU9Xl5GYCwgcm1hY3M9XDAzNkZTMDAsCisJcnMyPVwwMzZOXDAzNkZTMEVcMDM2T1wwMzZGUzAwLAorCXNncj1cMDM2JT8lcDElcDMlfCVwNiV8JXREJWVFJTslPyVwMiVwNiV8JXRcMDI0JWVcMDI1JTtcMDM2UCU/JXA0JXRJJWVKJTslPyVwMSVwNSV8JXRcMDM0JWVcMDM1JTtcMDM2RlMlPyVwOSV0MTElZTAwJTssCisJc2dyMD1cMDM2UEpcMDI1XDAzNVwwMzZFXDAzNkZTMDAsIHNtYWNzPVwwMzZGUzExLAorCXZwYT1cMDIwXDE3NyVwMSVjLCB1c2U9ZGdrZXlzKzE1LCB1c2U9ZDIxNi1kZywKK2QyMTYtdW5peC0yNXxkMjE2KzI1fERhdGEgR2VuZXJhbCBEQVNIRVIgRDIxNisgaW4gREctVU5JWCBtb2RlIHdpdGggMjUgbGluZXMsCisJbGluZXMjMjUsCisJaXMzPVwwMzZGejIsIHVzZT1kMjE2KywKKworZDIxNy11bml4fERhdGEgR2VuZXJhbCBEQVNIRVIgRDIxNyBpbiBERy1VTklYIG1vZGUsCisJdXNlPWQyMTYtdW5peCwKK2QyMTctdW5peC0yNXxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTcgaW4gREctVU5JWCBtb2RlIHdpdGggMjUgbGluZXMsCisJdXNlPWQyMTYtdW5peC0yNSwKKworIyBEQVNIRVIgRDIyMCBjb2xvciB0ZXJtaW5hbCBpbiBBTlNJIG1vZGUuCisjIExpa2UgdGhlIEQ0NzBDIGJ1dCB3aXRoIGZld2VyIGNvbG9ycyBhbmQgc2NyZWVuIGVkaXRpbmcgZmVhdHVyZXMuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAxIHNldHM6CisjCVxFWzwwOzwxOzw0bAorIwkJPDAJLSBzY3JvbGxpbmcgZW5hYmxlZAorIwkJPDEJLSBibGluayBlbmFibGVkCisjCQk8NAktIHByaW50IGNoYXJhY3RlcnMgcmVnYXJkbGVzcyBvZiBhdHRyaWJ1dGVzCisjCVxFW20JCS0gYWxsIGF0dHJpYnV0ZXMgb2ZmCisjIFJlc2V0IHN0cmluZyAxIHNldHM6CisjCVxFYwkJLSBpbml0aWFsIG1vZGUgZGVmYXVsdHMgKFJJUykKKyMKK2QyMjB8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjIwLAorCW1jNWlALAorCWRsQCwgZGwxQCwgaWxALCBpbDFALCBpczE9XEVbPDA7PDE7PDRsXEVbbSwgbWM0QCwgbWM1QCwgcnMxPVxFYywKKwl1c2U9ZGcrY29sb3I4LCB1c2U9ZDQ3MGMsCisKK2QyMjAtN2J8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjIwIGluIDcgYml0IG1vZGUsCisJbWM1aUAsCisJZGxALCBkbDFALCBpbEAsIGlsMUAsIGlzMT1cRVs8MDs8MTs8NGxcRVttLCBtYzRALCBtYzVALCByczE9XEVjLAorCXVzZT1kZytjb2xvcjgsIHVzZT1kNDcwYy03YiwKKworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMyBzZXRzOgorIwktIGRlZmF1bHQgY3Vyc29yIChzb2xpZCByZWN0YW5nbGUpCisjIFJlc2V0IHN0cmluZyAyIHNldHM6CisjCV5eTiAgICAgLSBzZWNvbmRhcnkgY2hhcmFjdGVyIHNldAorIwleXkZTMD4gIC0gOCBiaXQgaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIgc2V0CisjCV5eTyAgICAgLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKKyMgICAgICAgXl5GUzAwICAtIGRlZmF1bHQgY2hhcmFjdGVyIHNldCAobWF0Y2hpbmcgdGhlIG5hdGl2ZSBrZXlib2FyZCBsYW5ndWFnZSkKKyMKK2QyMjAtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjIwIGNvbG9yIHRlcm1pbmFsIGluIERHIG1vZGUsCisJbWM1aUAsCisJZGwxQCwgaG9tZUAsIGlsMUAsIGlzMkAsIGlzMz1cMDM2RlEyLCBsbEAsIG1jNEAsIG1jNUAsIHJzMUAsCisJcnMyPVwwMzZOXDAzNkZTMD5cMDM2T1wwMzZGUzAwLCB1c2U9ZGdtb2RlK2NvbG9yOCwKKwl1c2U9ZDQ3MGMtZGcsCisKKyMgREFTSEVSIEQyMzBDIGNvbG9yIHRlcm1pbmFsIGluIEFOU0kgbW9kZS4KKyMgTGlrZSB0aGUgRDIyMCBidXQgd2l0aCBtaW5vciBBTlNJIGNvbXBhdGliaWxpdHkgaW1wcm92ZW1lbnRzLgorIworZDIzMGN8ZDIzMHxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMzBDLAorCWJsaW5rPVxFWzU7NTBtLCBib2xkPVxFWzQ7Nzs1MG0sIGRpbT1cRVsyOzUwbSwgbmVsPV5NXkosCisJcmV2PVxFWzc7NTBtLCBybWt4PVxFWzI7MXYsIHJtc289XEVbNTBtLCBybXVsPVxFWzUwbSwKKwlzZ3I9XEVbNTAlPyVwMSVwMyV8JXA2JXwldDs3JXsxfSVlJXswfSU7JVBSJT8lcDQldDs1JXsxfSVlJXswfSU7JVBCJT8lcDIlcDYlfCV0OzQlezF9JWUlezB9JTslUFUlPyVwMSVwNSV8JXQ7MiV7MX0lZSV7MH0lOyVQRG1cRSklPyVwOSV0NlwwMTYlZTRcMDE3JTssCisJc2dyMD1cRVs1MG1cRSk0XDAxNywgc21reD1cRVsyOzB2LCBzbXNvPVxFWzI7Nzs1MG0sCisJc211bD1cRVs0OzUwbSwgdXNlPWRna2V5cys3YiwgdXNlPWQyMjAsCisKK2QyMzBjLWRnfGQyMzAtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjMwQyBpbiBERyBtb2RlLAorCXVzZT1kMjIwLWRnLAorCisjIERBU0hFUiBENDAwL0Q0NTAgc2VyaWVzIHRlcm1pbmFscy4KKyMgVGhlc2UgYWRkIGludGVsbGlnZW50IGZlYXR1cmVzIGxpa2UgaW5zZXJ0L2RlbGV0ZSB0byB0aGUgRDIwMCBzZXJpZXMuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAyIHNldHM6CisjCV5eRlEyCQktIGRlZmF1bHQgY3Vyc29yIChzb2xpZCByZWN0YW5nbGUpCisjCV5eRlcJCS0gY2hhcmFjdGVyIHByb3RlY3Rpb24gZGlzYWJsZWQKKyMJXl5GSgkJLSBub3JtYWwgKDgwIGNvbHVtbikgbW9kZQorIwleXkZcXgkJLSBob3Jpem9udGFsIHNjcm9sbGluZyBlbmFibGVkIChmb3IgYWxpZ25tZW50KQorIwleXkZYMDA0PwktIG1hcmdpbnMgYXQgY29sdW1ucyAwIGFuZCA3OQorIwleXkZdCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGRpc2FibGVkCisjCV5eTwkJLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKKyMJXl5GUzAwCQktIGRlZmF1bHQgY2hhcmFjdGVyIHNldCAodGhlIGtleWJvYXJkIG5hdGl2ZSBsYW5ndWFnZSkKKyMJLSAoc2hvdWxkIHJlc2V0IHNjcm9sbGluZyByZWdpb25zLCBidXQgdGhhdCBnbGl0Y2hlcyB0aGUgc2NyZWVuKQorIyBSZXNldCBzdHJpbmcgMSBzZXRzOgorIwleXkZBCQktIGFsbCB0ZXJtaW5hbCBkZWZhdWx0cyBleGNlcHQgc2Nyb2xsIHJhdGUKKyMgUmVzZXQgc3RyaW5nIDIgc2V0czoKKyMJXl5GXQkJLSBob3Jpem9udGFsIHNjcm9sbGluZyBkaXNhYmxlZAorIwleXkZUMAkJLSBqdW1wIHNjcm9sbGluZworIworZDQwMHxkNDAwLWRnfGQ0NTB8ZDQ1MC1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MDAvRDQ1MCBzZXJpZXMsCisJbWM1aSwKKwlhY3NjPWokayJsIW0jbilxK3QndSZ2KHcleCosIGNpdmlzPVwwMzZGUTAsCisJY25vcm09XDAzNkZRMiwgZGNoMT1eXkssIGRsMT1eXkZJLAorCWVuYWNzPVwwMzZOXDAzNkZTMTFcMDM2TywgaG9tZT1eXkZHLCBocGE9XDAyMCVwMSVjXDE3NywKKwlpY2gxPV5eSiwgaWwxPV5eRkgsCisJaXMyPVwwMzZGUTJcMDM2RldcMDM2RkpcMDM2RlxeXDAzNkZYMDA0P1wwMzZGXVwwMzZPXDAzNkZTMDAsCisJbGw9XDAzNkZHXDAyNywgbWM0PV5eRmEsIG1jNT1eXkZgLCByaT1eXkksIHJtYWNzPV5eTywKKwlyczE9Xl5GQSwgcnMyPVwwMzZGXVwwMzZGVDAsCisJc2dyPVwwMzYlPyVwMSVwMyV8JXA2JXwldEQlZUUlOyU/JXAyJXA2JXwldFwwMjQlZVwwMjUlOyU/JXA0JXRcMDE2JWVcMDE3JTslPyVwMSVwNSV8JXRcMDM0JWVcMDM1JTtcMDM2JT8lcDkldE4lZU8lOywKKwlzZ3IwPVwwMTdcMDI1XDAzNVwwMzZFXDAzNk8sIHNtYWNzPV5eTiwKKwl2cGE9XDAyMFwxNzclcDElYywgdXNlPWQyMTAtZGcsCisKKyMgREFTSEVSIEQ0MTAvRDQ2MCBzZXJpZXMgdGVybWluYWxzIGluIEFOU0kgbW9kZS4KKyMgVGhlc2UgYWRkIGEgbGFyZ2UgbnVtYmVyIG9mIGludGVsbGlnZW50IHRlcm1pbmFsIGZlYXR1cmVzLgorIworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMSBzZXRzOgorIwlcRVs8MDs8MTs8Mjs8NGwKKyMJCTwwCS0gc2Nyb2xsaW5nIGVuYWJsZWQKKyMJCTwxCS0gYmxpbmsgZW5hYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBlbmFibGVkIChmb3IgYWxpZ25tZW50KQorIwkJPDQJLSBwcmludCBjaGFyYWN0ZXJzIHJlZ2FyZGxlc3Mgb2YgYXR0cmlidXRlcworIwlcRVs1OzB2CQktIG5vcm1hbCAoODAgY29sdW1uKSBtb2RlCisjCVxFWzE7MTs4MHcJLSBtYXJnaW5zIGF0IGNvbHVtbnMgMSBhbmQgODAKKyMJXEVbMTs2OzwyaAorIwkJMQktIHByaW50IGFsbCBjaGFyYWN0ZXJzIGV2ZW4gaWYgcHJvdGVjdGVkCisjCQk2CS0gY2hhcmFjdGVyIHByb3RlY3Rpb24gZGlzYWJsZWQKKyMJCTwyCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMJLSAoc2hvdWxkIHJlc2V0IHNjcm9sbGluZyByZWdpb25zLCBidXQgdGhhdCBnbGl0Y2hlcyB0aGUgc2NyZWVuKQorIworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMiBzZXRzOgorIwlcRVszOzI7MjsxOzE7MXYKKyMJCTM7MgktIGRlZmF1bHQgY3Vyc29yIChzb2xpZCByZWN0YW5nbGUpCisjCQkyOzEJLSA4IGJpdCBvcGVyYXRpb25zCisjCQkxOzEJLSBpbnRlcm5hdGlvbmFsIGtleWJvYXJkIGxhbmd1YWdlCisjCVxFKEIJCS0gZGVmYXVsdCBwcmltYXJ5IGNoYXJhY3RlciBzZXQgKFUuUy4gQVNDSUkpCisjCVxFKTQJCS0gZGVmYXVsdCBzZWNvbmRhcnkgY2hhcmFjdGVyIHNldCAoaW50ZXJuYXRpb25hbCkKKyMJXk8JCS0gcHJpbWFyeSBjaGFyYWN0ZXIgc2V0CisjCisjCVJlc2V0IHN0cmluZyAxIHNldHM6CisjCVxFYwkJLSBpbml0aWFsIG1vZGUgZGVmYXVsdHMgKFJJUykKKyMJXEVbPDJoCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGRpc2FibGVkCisjCisjIFJlc2V0IHN0cmluZyAyIHNldHM6CisjCVxFWzQ7MDsyOzE7MTsxdgorIwkJNDswCS0ganVtcCBzY3JvbGxpbmcKKyMJCTI7MQktIDggYml0IG9wZXJhdGlvbnMKKyMJCTE7MQktIDggYml0IChpbnRlcm5hdGlvbmFsKSBrZXlib2FyZCBsYW5ndWFnZQorIwlcRShCCQktIGRlZmF1bHQgcHJpbWFyeSBjaGFyYWN0ZXIgc2V0IChVLlMuIEFTQ0lJKQorIwlcRSk0CQktIGRlZmF1bHQgc2Vjb25kYXJ5IGNoYXJhY3RlciBzZXQgKGludGVybmF0aW9uYWwpCisjCitkNDEwfGQ0MTF8ZDQ2MHxkNDYxfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMC9ENDYwIHNlcmllcywKKwltYzVpLAorCWFjc2M9aiRrImwhbSNuKXErdCd1JnYodyV4KiwgY2l2aXM9XEVbMzswdiwKKwljbm9ybT1cRVszOzJ2LCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLAorCWlzMT1cRVs8MDs8MTs8Mjs8NGxcRVs1OzB2XEVbMTsxOzgwd1xFWzE7Njs8MmgsCisJaXMyPVxFWzM7MjsyOzE7MTsxdlxFKEJcRSk0XDAxNywgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJcmk9XEVNLCBybWFjcz1cRSk0XDAxNywgcnMxPVxFY1xFWzwyaCwKKwlyczI9XEVbNDswOzI7MTsxOzF2XEUoQlxFKTQsCisJc2dyPVxFWyU/JXAxJXAzJXwlcDYlfCV0NzslOyU/JXA0JXQ1OyU7JT8lcDIlcDYlfCV0NDslOyU/JXAxJXA1JXwldDI7JTttXEUpJT8lcDkldDZcMDE2JWU0XDAxNyU7LAorCXNncjA9XEVbbVxFKTRcMDE3LCBzbWFjcz1cRSk2XDAxNiwgdXNlPWQyMTEsCisKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDIgc2V0czoKKyMJXEVbMzsyOzI7MDsxOzB2CisjCQkzOzIJLSBkZWZhdWx0IGN1cnNvciAoc29saWQgcmVjdGFuZ2xlKQorIwkJMjswCS0gNyBiaXQgb3BlcmF0aW9ucworIwkJMTswCS0gNyBiaXQgKG5hdGl2ZSkga2V5Ym9hcmQgbGFuZ3VhZ2UKKyMJXEUoMAkJLSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgKHRoZSBrZXlib2FyZCBuYXRpdmUgbGFuZ3VhZ2UpCisjCV5PCQktIHByaW1hcnkgY2hhcmFjdGVyIHNldAorIworIyBSZXNldCBzdHJpbmcgMiBzZXRzOgorIwlcRVs0OzA7MjswOzE7MHYKKyMJCTQ7MAktIGp1bXAgc2Nyb2xsaW5nCisjCQkyOzAJLSA3IGJpdCBvcGVyYXRpb25zCisjCQkxOzAJLSA3IGJpdCAobmF0aXZlKSBrZXlib2FyZCBsYW5ndWFnZQorIwlcRSgwCQktIGRlZmF1bHQgY2hhcmFjdGVyIHNldCAodGhlIGtleWJvYXJkIG5hdGl2ZSBsYW5ndWFnZSkKKyMKK2Q0MTAtN2J8ZDQxMS03YnxkNDYwLTdifGQ0NjEtN2J8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEwL0Q0NjAgc2VyaWVzIGluIDcgYml0IG1vZGUsCisJa21ALAorCWVuYWNzPVxFKTYsIGlzMj1cRVszOzI7MjswOzE7MHZcRSgwXDAxNywgcm1hY3M9Xk8sCisJcnMyPVxFWzQ7MDsyOzA7MTswdlxFKDAsCisJc2dyPVxFWyU/JXAxJXAzJXwlcDYlfCV0NzslOyU/JXA0JXQ1OyU7JT8lcDIlcDYlfCV0NDslOyU/JXAxJXA1JXwldDI7JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgdXNlPWRna2V5cys3YiwgdXNlPWQ0MTAsCisKK2Q0MTAtZGd8ZDQ2MC1kZ3xkNDExLWRnfGQ0NjEtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEwL0Q0NjAgc2VyaWVzIGluIERHIG1vZGUsCisJa20sCisJZW5hY3NALCBybWFjcz1cMDM2RlMwMCwKKwlzZ3I9XDAzNiU/JXAxJXAzJXwlcDYlfCV0RCVlRSU7JT8lcDIlcDYlfCV0XDAyNCVlXDAyNSU7JT8lcDQldFwwMTYlZVwwMTclOyU/JXAxJXA1JXwldFwwMzQlZVwwMzUlO1wwMzZGUyU/JXA5JXQxMSVlMDAlOywKKwlzZ3IwPVwwMTdcMDI1XDAzNVwwMzZFXDAzNkZTMDAsIHNtYWNzPVwwMzZGUzExLAorCXVzZT1kNDAwLWRnLAorCisjIERBU0hFUiBENDEwL0Q0NjAgc2VyaWVzIHRlcm1pbmFscyBpbiB3aWRlICgxMjYgY29sdW1ucykgQU5TSSBtb2RlLgorIworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMSBzZXRzOgorIwlcRVs8MDs8MTs8Mjs8NGwKKyMJCTwwCS0gc2Nyb2xsaW5nIGVuYWJsZWQKKyMJCTwxCS0gYmxpbmsgZW5hYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBlbmFibGVkIChmb3IgYWxpZ25tZW50KQorIwkJPDQJLSBwcmludCBjaGFyYWN0ZXJzIHJlZ2FyZGxlc3Mgb2YgYXR0cmlidXRlcworIwlcRVs1OzF2CQktIGNvbXByZXNzZWQgKDEzNSBjb2x1bW4pIG1vZGUKKyMJXEVbMTsxOzEyNgktIG1hcmdpbnMgYXQgY29sdW1ucyAxIGFuZCAxMjYKKyMJXEVbMTs2OzwyaAorIwkJMQktIHByaW50IGFsbCBjaGFyYWN0ZXJzIGV2ZW4gaWYgcHJvdGVjdGVkCisjCQk2CS0gY2hhcmFjdGVyIHByb3RlY3Rpb24gZGlzYWJsZWQKKyMJCTwyCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMJLSAoc2hvdWxkIHJlc2V0IHNjcm9sbGluZyByZWdpb25zLCBidXQgdGhhdCBnbGl0Y2hlcyB0aGUgc2NyZWVuKQorIworIyBSZXNldCBzdHJpbmcgMSBzZXRzOgorIwlcRWMJCS0gaW5pdGlhbCBtb2RlIGRlZmF1bHRzIChSSVMpCisjCVxFWzU7MXYJCS0gY29tcHJlc3NlZCAoMTM1IGNvbHVtbikgbW9kZQorIwlcRVsxOzE7MTI2dwktIG1hcmdpbnMgYXQgY29sdW1ucyAxIGFuZCAxMjYKKyMJXEVbPDJoCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGRpc2FibGVkCisjCitkNDEwLXd8ZDQxMS13fGQ0NjAtd3xkNDYxLXd8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEwL0Q0NjAgc2VyaWVzIGluIHdpZGUgbW9kZSwKKwljb2xzIzEyNiwKKwlpczE9XEVbPDA7PDE7PDI7PDRsXEVbNTsxdlxFWzE7MTsxMjZ3XEVbMTs2OzwyaCwKKwlyczE9XEVjXEVbNTsxdlxFWzE7MTsxMjZ3XEVbPDJoLCB1c2U9ZDQxMCwKKworZDQxMC03Yi13fGQ0MTEtN2Itd3xkNDYwLTdiLXd8ZDQ2MS03Yi13fERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMC9ENDYwIHNlcmllcyBpbiB3aWRlIDcgYml0IG1vZGUsCisJY29scyMxMjYsCisJaXMxPVxFWzwwOzwxOzwyOzw0bFxFWzU7MXZcRVsxOzE7MTI2d1xFWzE7Njs8MmgsCisJcnMxPVxFY1xFWzU7MXZcRVsxOzE7MTI2d1xFWzwyaCwgdXNlPWQ0MTAtN2IsCisKK2Q0MTItZGd8ZDQ2Mi1kZ3xkNDYyZS1kZ3xkNDEyK2RnfGQ0NjIrZGd8ZDQxMy1kZ3xkNDYzLWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMi9ENDYyIHNlcmllcyBpbiBERyBtb2RlLAorCXVzZT1kNDEwLWRnLAorCisjIFRoZXNlIGFkZCBpbnRlbGxpZ2VudCBmZWF0dXJlcyBsaWtlIHNjcm9sbGluZyByZWdpb25zLgorZDQxMi11bml4fGQ0NjItdW5peHxkNDEyK3xkNDYyK3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTIrL0Q0NjIrIHNlcmllcyBpbiBVbml4IG1vZGUsCisJY2l2aXM9XDAzNkZRMCwgY2xlYXI9Xl5GRSwgY25vcm09XDAzNkZRNSwKKwljdXA9XDAzNkZQJXAyJTIuMlglcDElMi4yWCwgZGNoMT1eXkssIGRsMT1eXkZJLAorCWhvbWU9Xl5GRywgaHBhPVwwMzZGUCVwMSUyLjJYRkYsIGljaDE9Xl5KLCBpbDE9Xl5GSCwKKwlpczI9XDAzNkZRNVwwMzZGV1wwMzZGSlwwMzZGXF5cMDM2RlgwMDRGXDAzNk9cMDM2RlMwMCwKKwlsbD1cMDM2RkdcMDM2UEEsIG1jMD1eQSwgcmM9XDAzNkZ9MTEsIHJpPV5eSSwKKwlyczE9XDAzNkZBXDAzNkZUMCwgcnMyPVwwMzZQQDEsIHNjPVwwMzZGfTEwLAorCXZwYT1cMDM2RlBGRiVwMSUyLjJYLAorCXdpbmQ9XDAzNkZCJT8lcDEldCVwMSUyLjJYMCU7JXAyJXAxJS0lezF9JSslMi4yWDAlPyV7MjN9JXAyJT4ldDAwMCU7XDAzNkZYJXAzJTIuMlglcDQlMi4yWCwKKwl1c2U9ZDIxNissCitkNDEyLXVuaXgtd3xkNDYyLXVuaXgtd3xkNDEyK3d8ZDQ2Mit3fERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMisvRDQ2Misgc2VyaWVzIGluIHdpZGUgVW5peCBtb2RlLAorCWNvbHMjMTMyLAorCWlzMj1cMDM2RlE1XDAzNkZXXDAzNkZLXDAzNkZcXlwwMzZGWDAwODNcMDM2T1wwMzZGUzAwLAorCXJzMj1cMDM2UEAxXDAzNkZLXDAzNkZYMDA4MywKKwl3aW5kPVwwMzZGQiU/JXAxJXQlcDElMi4yWDElOyVwMiVwMSUtJXsxfSUrJTIuMlgxJT8lezIzfSVwMiU+JXQwMDElO1wwMzZGWCVwMyUyLjJYJXA0JTIuMlgsCisJdXNlPWQ0MTItdW5peCwKK2Q0MTItdW5peC0yNXxkNDYyLXVuaXgtMjV8ZDQxMisyNXxkNDYyKzI1fERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMisvRDQ2Misgc2VyaWVzIGluIFVuaXggbW9kZSB3aXRoIDI1IGxpbmVzLAorCWxpbmVzIzI1LAorCWlzMz1cMDM2RnoyLAorCXdpbmQ9XDAzNkZCJT8lcDEldCVwMSUyLjJYMCU7JXAyJXAxJS0lezF9JSslMi4yWDAlPyV7MjR9JXAyJT4ldDAwMCU7XDAzNkZYJXAzJTIuMlglcDQlMi4yWCwKKwl1c2U9ZDQ2MissCitkNDEyLXVuaXgtc3xkNDYyLXVuaXgtc3xkNDEyK3N8ZDQ2MitzfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMisvRDQ2MisgaW4gVW5peCBtb2RlIHdpdGggc3RhdHVzIGxpbmUsCisJZXNsb2ssIGhzLAorCWNsZWFyPVwwMzZGR1wwMzZQSCwgZnNsPVwwMzZGfTAxXDAyMiwKKwlpczM9XDAzNkZ6MlwwMzZGfTAwXDAzNkZCMTgwMDAwXDAzNkZ9MDEsIGxsQCwKKwl0c2w9XDAzNkZ9MDBcMDM2RlAlcDElMi4yWDE4XDAzNlBHLAorCXdpbmQ9XDAzNkZCJT8lcDEldCVwMSUyLjJYMCU7JXAyJXAxJS0lezF9JSslMi4yWDAlPyV7MjN9JXAyJT4ldCV7MjN9JXAyJS0lMi4yWDAlOzAwMFwwMzZGWCVwMyUyLjJYJXA0JTIuMlgsCisJdXNlPWQ0NjIrLAorCisjCVJlbGF0aXZlIGN1cnNvciBtb3Rpb25zIGFyZSBjb25maW5lZCB0byB0aGUgY3VycmVudCB3aW5kb3csCisjCXdoaWNoIGlzIG5vdCB3aGF0IHRoZSBzY3JvbGxpbmcgcmVnaW9uIHNwZWNpZmljYXRpb24gZXhwZWN0cy4KKyMJVGh1cywgcmVsYXRpdmUgdmVydGljYWwgY3Vyc29yIHBvc2l0aW9uaW5nIG11c3QgYmUgZGVsZXRlZC4KK2Q0MTItdW5peC1zcnxkNDYyLXVuaXgtc3J8ZDQxMitzcnxkNDYyK3NyfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMisvRDQ2MisgaW4gVW5peCBtb2RlIHdpdGggc2Nyb2xsaW5nIHJlZ2lvbiwKKwljc3I9XDAzNkZCJT8lcDEldCVwMSUyLjJYMCU7JXAyJXAxJS0lezF9JSslMi4yWDAlPyV7MjN9JXAyJT4ldDAwMCU7LAorCWN1ZDFALCBjdXUxQCwgbGxALCB1c2U9ZDQ2MissCisKK2Q0MTMtdW5peHxkNDYzLXVuaXh8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEzL0Q0NjMgc2VyaWVzIGluIERHLVVOSVggbW9kZSwKKwl1c2U9ZDQxMi11bml4LAorZDQxMy11bml4LXd8ZDQ2My11bml4LXd8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEzL0Q0NjMgc2VyaWVzIGluIHdpZGUgREctVU5JWCBtb2RlLAorCXVzZT1kNDEyLXVuaXgtdywKK2Q0MTMtdW5peC0yNXxkNDYzLXVuaXgtMjV8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEzL0Q0NjMgc2VyaWVzIGluIERHLVVOSVggbW9kZSB3aXRoIDI1IGxpbmVzLAorCXVzZT1kNDEyLXVuaXgtMjUsCitkNDEzLXVuaXgtc3xkNDYzLXVuaXgtc3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTMvRDQ2MyBpbiBERy1VTklYIG1vZGUgd2l0aCBzdGF0dXMgbGluZSwKKwl1c2U9ZDQxMi11bml4LXMsCitkNDEzLXVuaXgtc3J8ZDQ2My11bml4LXNyfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMy9ENDYzIGluIERHLVVOSVggbW9kZSB3aXRoIHNjcm9sbGluZyByZWdpb24sCisJdXNlPWQ0MTItdW5peC1zciwKKworZDQxNC11bml4fGQ0NjQtdW5peHxEYXRhIEdlbmVyYWwgRDQxNC9ENDY0IGluIERHLVVOSVggbW9kZSwKKwl1c2U9ZDQxMy11bml4LAorZDQxNC11bml4LXd8ZDQ2NC11bml4LXd8RGF0YSBHZW5lcmFsIEQ0MTQvRDQ2NCBpbiB3aWRlIERHLVVOSVggbW9kZSwKKwl1c2U9ZDQxMy11bml4LXcsCitkNDE0LXVuaXgtMjV8ZDQ2NC11bml4LTI1fERhdGEgR2VuZXJhbCBENDE0L0Q0NjQgaW4gREctVU5JWCBtb2RlIHdpdGggMjUgbGluZXMsCisJdXNlPWQ0MTMtdW5peC0yNSwKK2Q0MTQtdW5peC1zfGQ0NjQtdW5peC1zfERhdGEgR2VuZXJhbCBENDE0L0Q0NjQgaW4gREctVU5JWCBtb2RlIHdpdGggc3RhdHVzIGxpbmUsCisJdXNlPWQ0MTMtdW5peC1zLAorZDQxNC11bml4LXNyfGQ0NjQtdW5peC1zcnxEYXRhIEdlbmVyYWwgRDQxNC9ENDY0IGluIERHLVVOSVggbW9kZSB3aXRoIHNjcm9sbGluZyByZWdpb24sCisJdXNlPWQ0MTMtdW5peC1zciwKKworZDQzMGMtZGd8ZDQzMC1kZ3xEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREcgbW9kZSwKKwl1c2U9ZDQxMy1kZywgdXNlPWRnK2ZpeGVkLAorZDQzMGMtZGctY2NjfGQ0MzAtZGctY2NjfERhdGEgR2VuZXJhbCBENDMwQyBpbiBERyBtb2RlIHdpdGggY29uZmlndXJhYmxlIGNvbG9ycywKKwl1c2U9ZDQxMy1kZywgdXNlPWRnK2NjYywKKworZDQzMGMtdW5peHxkNDMwLXVuaXh8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIERHLVVOSVggbW9kZSwKKwl1c2U9ZDQxMy11bml4LCB1c2U9ZGd1bml4K2ZpeGVkLAorZDQzMGMtdW5peC13fGQ0MzAtdW5peC13fERhdGEgR2VuZXJhbCBENDMwQyBpbiB3aWRlIERHLVVOSVggbW9kZSwKKwl1c2U9ZDQxMy11bml4LXcsIHVzZT1kZ3VuaXgrZml4ZWQsCitkNDMwYy11bml4LTI1fGQ0MzAtdW5peC0yNXxEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREctVU5JWCBtb2RlIHdpdGggMjUgbGluZXMsCisJdXNlPWQ0MTMtdW5peC0yNSwgdXNlPWRndW5peCtmaXhlZCwKK2Q0MzBjLXVuaXgtc3xkNDMwLXVuaXgtc3xEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREctVU5JWCBtb2RlIHdpdGggc3RhdHVzIGxpbmUsCisJdXNlPWQ0MTMtdW5peC1zLCB1c2U9ZGd1bml4K2ZpeGVkLAorZDQzMGMtdW5peC1zcnxkNDMwLXVuaXgtc3J8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIERHLVVOSVggbW9kZSB3aXRoIHNjcm9sbGluZyByZWdpb24sCisJdXNlPWQ0MTMtdW5peC1zciwgdXNlPWRndW5peCtmaXhlZCwKK2Q0MzBjLXVuaXgtY2NjfGQ0MzAtdW5peC1jY2N8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIERHLVVOSVggbW9kZSB3aXRoIGNvbmZpZ3VyYWJsZSBjb2xvcnMsCisJdXNlPWQ0MTMtdW5peCwgdXNlPWRndW5peCtjY2MsCitkNDMwYy11bml4LXctY2NjfGQ0MzAtdW5peC13LWNjY3xEYXRhIEdlbmVyYWwgRDQzMEMgaW4gd2lkZSBERy1VTklYIG1vZGUgd2l0aCBjb25maWd1cmFibGUgY29sb3JzLAorCXVzZT1kNDEzLXVuaXgtdywgdXNlPWRndW5peCtjY2MsCitkNDMwYy11bml4LTI1LWNjY3xkNDMwLXVuaXgtMjUtY2NjfERhdGEgR2VuZXJhbCBENDMwQyBpbiBERy1VTklYIG1vZGUgd2l0aCAyNSBsaW5lcyBhbmQgY29uZmlndXJhYmxlIGNvbG9ycywKKwl1c2U9ZDQxMy11bml4LTI1LCB1c2U9ZGd1bml4K2NjYywKK2Q0MzBjLXVuaXgtcy1jY2N8ZDQzMC11bml4LXMtY2NjfERhdGEgR2VuZXJhbCBENDMwQyBpbiBERy1VTklYIG1vZGUgd2l0aCBzdGF0dXMgbGluZSBhbmQgY29uZmlndXJhYmxlIGNvbG9ycywKKwl1c2U9ZDQxMy11bml4LXMsIHVzZT1kZ3VuaXgrY2NjLAorZDQzMGMtdW5peC1zci1jY2N8ZDQzMC11bml4LXNyLWNjY3xEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREctVU5JWCBtb2RlIHdpdGggc2Nyb2xsaW5nIHJlZ2lvbiBhbmQgY29uZmlndXJhYmxlIGNvbG9ycywKKwl1c2U9ZDQxMy11bml4LXNyLCB1c2U9ZGd1bml4K2NjYywKKworIyBEQVNIRVIgRDQ3MEMgY29sb3IgdGVybWluYWwgaW4gQU5TSSBtb2RlLgorIyBMaWtlIHRoZSBENDYwIGJ1dCB3aXRoIDE2IGNvbG9ycyBhbmQgd2l0aG91dCBhIGNvbXByZXNzZWQgbW9kZS4KKyMKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDEgc2V0czoKKyMJXEVbPDA7PDE7PDI7PDRsCisjCQk8MAktIHNjcm9sbGluZyBlbmFibGVkCisjCQk8MQktIGJsaW5rIGVuYWJsZWQKKyMJCTwyCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZW5hYmxlZCAoZm9yIGFsaWdubWVudCkKKyMJCTw0CS0gcHJpbnQgY2hhcmFjdGVycyByZWdhcmRsZXNzIG9mIGF0dHJpYnV0ZXMKKyMJXEVbMTsxOzgwdwktIG1hcmdpbnMgYXQgY29sdW1ucyAxIGFuZCA4MAorIwlcRVsxOzY7PDJoCisjCQkxCS0gcHJpbnQgYWxsIGNoYXJhY3RlcnMgZXZlbiBpZiBwcm90ZWN0ZWQKKyMJCTYJLSBjaGFyYWN0ZXIgcHJvdGVjdGlvbiBkaXNhYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBkaXNhYmxlZAorIwktIChzaG91bGQgcmVzZXQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGJ1dCB0aGF0IGdsaXRjaGVzIHRoZSBzY3JlZW4pCisjCitkNDcwY3xkNDcwfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQ3MEMsCisJaXMxPVxFWzwwOzwxOzwyOzw0bFxFWzE7MTs4MHdcRVsxOzY7PDJoLAorCXNncj1cRVslPyVwMSVwMyV8JXA2JXwldDc7JXsxfSVlJXswfSU7JVBSJT8lcDQldDU7JXsxfSVlJXswfSU7JVBCJT8lcDIlcDYlfCV0NDslezF9JWUlezB9JTslUFUlPyVwMSVwNSV8JXQyOyV7MX0lZSV7MH0lOyVQRG1cRSklPyVwOSV0NlwwMTYlZTRcMDE3JTssCisJdXNlPWRnK2NvbG9yLCB1c2U9ZDQ2MCwKKworZDQ3MGMtN2J8ZDQ3MC03YnxEYXRhIEdlbmVyYWwgREFTSEVSIEQ0NzBDIGluIDcgYml0IG1vZGUsCisJaXMxPVxFWzwwOzwxOzwyOzw0bFxFWzE7MTs4MHdcRVsxOzY7PDJoLAorCXNncj1cRVslPyVwMSVwMyV8JXA2JXwldDc7JXsxfSVlJXswfSU7JVBSJT8lcDQldDU7JXsxfSVlJXswfSU7JVBCJT8lcDIlcDYlfCV0NDslezF9JWUlezB9JTslUFUlPyVwMSVwNSV8JXQyOyV7MX0lZSV7MH0lOyVQRG0lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXVzZT1kZytjb2xvciwgdXNlPWQ0NjAtN2IsCisKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDIgc2V0czoKKyMJXl5GUTIJCS0gZGVmYXVsdCBjdXJzb3IgKHNvbGlkIHJlY3RhbmdsZSkKKyMJXl5GVwkJLSBjaGFyYWN0ZXIgcHJvdGVjdGlvbiBkaXNhYmxlZAorIwleXkZcXgkJLSBob3Jpem9udGFsIHNjcm9sbGluZyBlbmFibGVkIChmb3IgYWxpZ25tZW50KQorIwleXkZYMDA0PwktIG1hcmdpbnMgYXQgY29sdW1ucyAwIGFuZCA3OQorIwleXkZdCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGRpc2FibGVkCisjCV5eTwkJLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKKyMJXl5GUzAwCQktIGRlZmF1bHQgY2hhcmFjdGVyIHNldCAodGhlIGtleWJvYXJkIG5hdGl2ZSBsYW5ndWFnZSkKKyMJLSAoc2hvdWxkIHJlc2V0IHNjcm9sbGluZyByZWdpb25zLCBidXQgdGhhdCBnbGl0Y2hlcyB0aGUgc2NyZWVuKQorIworZDQ3MGMtZGd8ZDQ3MC1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0NzBDIGluIERHIG1vZGUsCisJaXMyPVwwMzZGUTJcMDM2RldcMDM2RlxeXDAzNkZYMDA0P1wwMzZGXVwwMzZPXDAzNkZTMDAsCisJdXNlPWRnbW9kZStjb2xvciwgdXNlPWQ0NjAtZGcsCisKKyMgREFTSEVSIEQ1NTUgdGVybWluYWwgaW4gQU5TSSBtb2RlLgorIyBMaWtlIGEgRDQxMSwgYnV0IGhhcyBhbiBpbnRlZ3JhdGVkIHBob25lLgorZDU1NXxEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NTUsCisJdXNlPWQ0MTEsCitkNTU1LTdifERhdGEgR2VuZXJhbCBEQVNIRVIgRDU1NSBpbiA3LWJpdCBtb2RlLAorCXVzZT1kNDExLTdiLAorZDU1NS13fERhdGEgR2VuZXJhbCBEQVNIRVIgRDU1NSBpbiB3aWRlIG1vZGUsCisJdXNlPWQ0MTEtdywKK2Q1NTUtN2Itd3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NTUgaW4gd2lkZSA3LWJpdCBtb2RlLAorCXVzZT1kNDExLTdiLXcsCitkNTU1LWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDU1NSBzZXJpZXMgaW4gREcgbW9kZSwKKwl1c2U9ZDQxMS1kZywKKworIyBEQVNIRVIgRDU3NyB0ZXJtaW5hbCBpbiBBTlNJIG1vZGUuCisjIExpa2UgYSBENDExLCBidXQgYWN0cyBhcyBhIGtleWJvYXJkIGZvciBzZXJpYWwgcHJpbnRlcnMgKCJLU1IiIG1vZGVzKS4KK2Q1Nzd8RGF0YSBHZW5lcmFsIERBU0hFUiBENTc3LAorCXVzZT1kNDExLAorZDU3Ny03YnxEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzcgaW4gNy1iaXQgbW9kZSwKKwl1c2U9ZDQxMS03YiwKK2Q1Nzctd3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzcgaW4gd2lkZSBtb2RlLAorCXVzZT1kNDExLXcsCitkNTc3LTdiLXd8RGF0YSBHZW5lcmFsIERBU0hFUiBENTc3IGluIHdpZGUgNy1iaXQgbW9kZSwKKwl1c2U9ZDQxMS03Yi13LAorCitkNTc3LWRnfGQ1NzgtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBENTc3L0Q1Nzggc2VyaWVzIGluIERHIG1vZGUsCisJdXNlPWQ0MTEtZGcsCisKKyMgREFTSEVSIEQ1NzggdGVybWluYWwuCisjIExpa2UgYSBENTc3LCBidXQgd2l0aG91dCBjb21wcmVzc2VkIG1vZGU7IGxpa2UgYSBENDcwQyBpbiB0aGlzIHJlc3BlY3QuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAxIHNldHM6CisjCVxFWzwwOzwxOzwyOzw0bAorIwkJPDAJLSBzY3JvbGxpbmcgZW5hYmxlZAorIwkJPDEJLSBibGluayBlbmFibGVkCisjCQk8MgktIGhvcml6b250YWwgc2Nyb2xsaW5nIGVuYWJsZWQgKGZvciBhbGlnbm1lbnQpCisjCQk8NAktIHByaW50IGNoYXJhY3RlcnMgcmVnYXJkbGVzcyBvZiBhdHRyaWJ1dGVzCisjCVxFWzE7MTs4MHcJLSBtYXJnaW5zIGF0IGNvbHVtbnMgMSBhbmQgODAKKyMJXEVbMTs2OzwyaAorIwkJMQktIHByaW50IGFsbCBjaGFyYWN0ZXJzIGV2ZW4gaWYgcHJvdGVjdGVkCisjCQk2CS0gY2hhcmFjdGVyIHByb3RlY3Rpb24gZGlzYWJsZWQKKyMJCTwyCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMJLSAoc2hvdWxkIHJlc2V0IHNjcm9sbGluZyByZWdpb25zLCBidXQgdGhhdCBnbGl0Y2hlcyB0aGUgc2NyZWVuKQorIworZDU3OHxEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzgsCisJaXMxPVxFWzwwOzwxOzwyOzw0bFxFWzE7MTs4MHdcRVsxOzY7PDJoLCB1c2U9ZDU3NywKK2Q1NzgtN2J8RGF0YSBHZW5lcmFsIERBU0hFUiBENTc4IGluIDctYml0IG1vZGUsCisJaXMxPVxFWzwwOzwxOzwyOzw0bFxFWzE7MTs4MHdcRVsxOzY7PDJoLCB1c2U9ZDU3Ny03YiwKKworIyMjIyBEYXRhbWVkaWEgKGRtKQorIworIyBEYXRhbWVkaWEgd2FzIGhlYWRxdWFydGVyZWQgaW4gTmFzaHVhLCBOZXcgSGFtcHNoaXJlIHVudGlsIGl0IHdlbnQKKyMgb3V0IG9mIGJ1c2luZXNzIGluIDE5OTMsIGJ1dCB0aGUgSUQgcGxhdGVzIG9uIHRoZSB0ZXJtaW5hbHMgcmVmZXJyZWQKKyMgdG8gdGhlIGZhY3RvcnkgaW4gUGVubnNhdWtlbiwgTkouICBUaGUgZmFjdG9yeSB3YXMgc29sZCB0byBhIFBDQiBib2FyZAorIyBtYW51ZmFjdHVyZXIgd2hpY2ggdGhyZXcgb3V0IGFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVybWluYWxzLgorIworCitjczEwfGNvbG9yc2NhbnxEYXRhbWVkaWEgQ29sb3IgU2NhbiAxMCwKKwltc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFW0osIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJTAyZDslcDIlMDJkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLCBlbD1cRVtLLAorCWluZD1eSiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorY3MxMC13fERhdGFtZWRpYSBDb2xvciBTY2FuIDEwIHdpdGggMTMyIGNvbHVtbnMsCisJY29scyMxMzIsCisJY3VwPVxFWyVpJXAxJTAyZDslcDIlMDNkSCwgdXNlPWNzMTAsCisKKyMgKGRtMTUyMDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5cIF5fXlBeWUg6IiAtLSBlc3IpCitkbTE1MjB8ZG0xNTIxfGRhdGFtZWRpYSAxNTIwLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5cLAorCWN1cD1cMDM2JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5fLCBlZD1eSywgZWw9Xl0sCisJaG9tZT1eWSwgaHQ9XkksIGluZD1eSiwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eXCwga2N1dTE9Xl8sCisJa2hvbWU9XlksCisjIGRtMjUwMDogdGhpcyB0ZXJtaW5hbCBoYXMgYm90aCA8aWNoPiBhbmQgPHNtaXI+LiBBcHBsaWNhdGlvbnMgdXNpbmcKKyMgdGVybWNhcC90ZXJtaW5mbyBkaXJlY3RseSAocmF0aGVyIHRoYW4gdGhyb3VnaCBuY3Vyc2VzKSBtaWdodCBiZSBjb25mdXNlZC4KK2RtMjUwMHxkYXRhbWVkaWEyNTAwfGRhdGFtZWRpYSAyNTAwLAorCU9UYnMsIE9UbmMsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eXl5eXDE3NywgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eXCwKKwljdXA9XDAxNCVwMiV7OTZ9JV4lYyVwMSV7OTZ9JV4lYywgY3V1MT1eWiwKKwlkY2gxPVwwMjBcMDEwXDAzMFwwMzUkPDEwKj4sCisJZGwxPVwwMjBcMDMyXDAzMFwwMzUkPDEwKj4sIGVsPV5XLCBob21lPV5CLAorCWljaDE9XDAyMFwwMzRcMDMwXDAzNSQ8MTAqPiwKKwlpbDE9XDAyMFxuXDAzMFwwMzVcMDMwXDAzNSQ8MTU+LCBpbmQ9XkosIHBhZD1cMzc3LAorCXJtZGM9XlheXSwgcm1pcj1cMzc3XDM3N1wwMzBcMDM1JDwxMD4sIHJtc289XlheXSwKKwlzbWRjPV5QLCBzbWlyPV5QLCBzbXNvPV5OLAorIyBkbWNoYXQgaXMgbGlrZSBETTI1MDAsIGJ1dCBET0VTIG5lZWQgImFsbCB0aGF0IHBhZGRpbmciIChqY20gMS8zMS84MikKKyMgYWxzbywgaGFzIGEgbWV0YS1rZXkuCisjIEZyb206IDxnb2xkYmVyZ2VyQHN1LWNzbGkuYXJwYT4KKyMgKGRtY2hhdDogIjpNVDoiIGNoYW5nZWQgdG8gIjprbToiIC0tIGVzcikKK2RtY2hhdHxkbWNoYXQgdmVyc2lvbiBvZiBkYXRhbWVkaWEgMjUwMCwKKwlrbSwKKwlkbDE9XDAyMFwwMzJcMDMwXDAzNSQ8Mi8+LAorCWlsMT1cMDIwXG5cMDMwXDAzNVwwMzBcMDM1JDwxKi8+LCB1c2U9ZG0yNTAwLAorIyAoZG0zMDI1OiAiOk1UOiIgY2hhbmdlZCB0byAiOmttOiIgLS0gZXNyKQorZG0zMDI1fGRhdGFtZWRpYSAzMDI1YSwKKwlPVGJzLCBrbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFTSQ8Mj4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPVxFQSwKKwlkY2gxPVwwMTAkPDY+LCBkbDE9XEVQXEVBXEVRJDwxMzA+LCBlZD1cRUokPDI+LCBlbD1cRUssCisJaG9tZT1cRUgsIGh0PV5JLCBpbDE9XEVQXG5cRVEkPDEzMD4sIGluZD1eSiwgaXA9JDw2PiwKKwlpczI9XEVRXEVVXEVWLCBybWRjPVxFUSwgcm1pcj1cRVEsIHJtc289XEVPMCwgc21kYz1cRVAsCisJc21pcj1cRVAsIHNtc289XEVPMSwKK2RtMzA0NXxkYXRhbWVkaWEgMzA0NWEsCisJT1RicywgYW0sIGVvLCBrbUAsIHVsLCB4ZW5sLAorCWRjaDE9XEVCJDw2PiwgZGwxQCwgaWwxQCwgaXMyPVxFVVxFViwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsCisJa2YwPVxFeVxyLCBrZjE9XEVwXHIsIGtmMj1cRXFcciwga2YzPVxFclxyLCBrZjQ9XEVzXHIsCisJa2Y1PVxFdFxyLCBrZjY9XEV1XHIsIGtmNz1cRXZcciwga2Y4PVxFd1xyLCBrZjk9XEV4XHIsCisJa2hvbWU9XEVILCBwYWQ9XDE3Nywgcm1kY0AsIHJtaXI9XEVQLCBybXNvQCwgc21kY0AsIHNtc29ALAorCXVzZT1kbTMwMjUsCisjIERhdGFtZWRpYSBEVDgwIHNvZnQgc3dpdGNoZXM6CisjIDEJMD1KdW1wICAxPVNtb290aAorIyAJQXV0b3JlcGVhdCAJMD1vZmYgIDE9b24KKyMgCVNjcmVlbgkJMD1EYXJrIDE9bGlnaHQKKyMgCUN1cnNvcgkJMD11L2wgIDE9YmxvY2sKKyMKKyMgMglNYXJnaW4gQmVsbAkwPW9mZiAgMT1vbgorIyAJS2V5Y2xpY2sJMD1vZmYgIDE9b24KKyMgCUFuc2kvVlQ1MgkwPVZUNTIgMT1BbnNpCisjIAlYb24vWG9mZgkwPU9mZiAgMT1PbgorIworIyAzCVNoaWZ0MwkJMD1IYXNoIDE9VUsgUG91bmQKKyMgCVdyYXAJCTA9T2ZmICAxPU9uCisjIAlOZXdsaW5lCQkwPU9mZiAgMT1PbgorIyAJSW50ZXJsYWNlCTA9T2ZmICAxPU9uCisjCisjIDQJUGFyaXR5CQkwPU9kZCAgMT1FdmVuCisjIAlQYXJpdHkJCTA9T2ZmICAxPU9uCisjIAlCaXRzL0NoYXIJMD03ICAgIDE9OAorIyAJUG93ZXIJCTA9NjBIeiAxPTUwSHoKKyMKKyMgNQlMaW5lIEludGVyZmFjZSAgMD1FSUEgIDE9TG9vcAorIyAJQXV4IEludGVyZmFjZSAgIDA9RUlBICAxPUxvb3AKKyMgCUxvY2FsIENvcHkgICAgCTA9T2ZmICAxPU9uCisjIAlTcGFyZQorIworIyA2CUF1eCBQYXJpdHkJMD1PZGQgIDE9RXZlbgorIyAJQXV4IFBhcml0eQkwPU9mZiAgMT1PbgorIyAJQXV4IEJpdHMvQ2hhciAgIDA9NyAgICAxPTgKKyMgCUNSVCBTYXZlcgkwPU9mZiAgMT1PbgorIyBkbTgwLzEgaXMgYSB2dDEwMCBsb29rYWxpa2UsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gbmVlZCBhbnkgcGFkZGluZy4KK2RtODB8ZG1kdDgwfGR0ODB8ZGF0YW1lZGlhIGR0ODAvMSwKKwljbGVhcj1cRVsySlxFW0gsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9JWlcRVslcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIG1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJpPVxFTSwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXVzZT12dDEwMCwKKyMgZXhjZXB0IGluIDEzMiBjb2x1bW4gbW9kZSwgd2hlcmUgaXQgbmVlZHMgYSBsaXR0bGUgcGFkZGluZy4KKyMgVGhpcyBpcyBzdGlsbCBsZXNzIHBhZGRpbmcgdGhhbiB0aGUgdnQxMDAsIGFuZCB5b3UgY2FuIGFsd2F5cyB0dXJuIG9uCisjIHRoZSBeUy9eUSBoYW5kc2hha2luZywgc28geW91IGNhbiB1c2UgdnQxMDAgZmxhdm9ycyBmb3IgdGhpbmdzIGxpa2UKKyMgcmV2ZXJzZSB2aWRlby4KK2RtODB3fGRtZHQ4MHd8ZHQ4MHd8ZGF0YW1lZGlhIGR0ODAvMSBpbiAxMzIgY2hhciBtb2RlLAorCWNvbHMjMTMyLAorCWNsZWFyPVxFW0hcRVsySiQ8NTAvPiwgY3VkMT1eSiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDUvPiwgY3V1MT1cRVtBJDw1Lz4sCisJZWQ9XEVbMEokPDIwLz4sIGVsPVxFWzBLJDwyMC8+LCB1c2U9ZG04MCwKKyMgRnJvbTogQWRhbSBUaG9tcHNvbiA8YXRob21wc29AcGFuZ2VhLmNhPiBTZXB0IDEwIDE5OTUKK2R0ODAtc2FzfERhdGFtZWRpYSBEVDgwMy9EVFggZm9yIFNBUyB1c2FnZSwKKwlhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz1gYGExZnhncWgwallrP2xabUBuRW9vcHBxRHJyc3N0Q3U0dkF3QngzeXl6ent7fHx9fX5+LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLAorCWNzcj1cRT0lcDElezMyfSUrJWMlezMyfSVjXEUjMVxFPSVwMiV7MzJ9JSslYyV7MzJ9JWNcRSMyLAorCWN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPV5cLAorCWN1cD1cRT0lcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGRsMT1cRU0sIGVkPV5LLAorCWVsPV5dLCBmZj1eTCwgaG9tZT1eWSwgaHQ9XkksIGh0cz1cRScxLCBpbDE9XEVMLCBpbmQ9XEVCLAorCWlzMj1cRSkwXEU8XEVQXEUnMFxFJDIsIGtjbHI9XkwsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwlrY3VmMT1eXCwga2N1dTE9Xl8sIGtlZD1eSywga2VsPV5dLCBraG9tZT1eWSwgbWM0PV5PLCBtYzU9Xk4sCisJcmV2PVxFJDJcMDA0LCByaT1cRUksIHJtYWNzPVxFRywgcm1zbz1eWCwgc2dyMD1eWCwgc21hY3M9XEVGLAorCXNtc289XEUkMlwwMDQsIHRiYz1cRScwLAorCisjIERhdGFtZWRpYSBFeGNlbCA2MiwgNjQgZnJvbSBHb3VsZC9TRUwgVVRYLzMyIHZpYSBCUkwKKyMgVGhlc2UgYXJlbid0IGVuZC1hbGwgRXhjZWwgdGVybWNhcHM7IGJ1dCBkbyBpbnNlcnQvZGVsZXRlIGNoYXIvbGluZQorIyBhbmQgbmFtZSBzb21lIG9mIHRoZSBleHRyYSBmdW5jdGlvbiBrZXlzLiAgKE1pa2UgRmVsZG1hbiBjY3ZheGEhZmVsZG1hbikKKyMgVGhlIG5hbWluZyBjb252ZW50aW9uIGhhcyBiZWVuIGJlbnQgc29tZXdoYXQsIHdpdGggdGhlIHVzZSBvZiBFPyAod2hlcmUKKyMgRSBpcyBmb3IgJ0V4Y2VsJykgYXMgIyBhIG5hbWUuICBUaGlzIHdhcyBkb25lIHRvIGRpc3Rpbmd1aXNoIHRoZSBlbnRyaWVzCisjIGZyb20gdGhlIG90aGVyIERhdGFtZWRpYXMgaW4gdXNlIGhlcmUsIGFuZCB5ZXQgdG8gYXNzb2NpYXRlIGEgbW9kZWwgb2YKKyMgdGhlIEV4Y2VsIHRlcm1pbmFscyB3aXRoIHRoZSByZWd1bGFyIGRhdGFtZWRpYSB0ZXJtaW5hbHMgdGhhdCBzaGFyZQorIyBtYWpvciBjaGFyYWN0ZXJpc3RpY3MuCitleGNlbDYyfGV4Y2VsNjR8ZGF0YW1lZGlhIEV4Y2VsIDYyLAorCWRjaDE9XEVbUCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtmNT1cRU91LCBrZjY9XEVPdiwKKwlrZjc9XEVPdywga2Y4PVxFT3gsIGtmOT1cRU95LCBybWlyPVxFWzRsLCBzbWlyPVxFWzRoLAorCXVzZT1kdDgwLAorZXhjZWw2Mi13fGV4Y2VsNjQtd3xkYXRhbWVkaWEgRXhjZWwgNjIgaW4gMTMyIGNoYXIgbW9kZSwKKwlkY2gxPVxFW1AsIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrZjU9XEVPdSwga2Y2PVxFT3YsCisJa2Y3PVxFT3csIGtmOD1cRU94LCBrZjk9XEVPeSwgcm1pcj1cRVs0bCwgc21pcj1cRVs0aCwKKwl1c2U9ZHQ4MHcsCitleGNlbDYyLXJ2fGV4Y2VsNjQtcnZ8ZGF0YW1lZGlhIEV4Y2VsIDYyIGluIHJldmVyc2UgdmlkZW8gbW9kZSwKKwlkY2gxPVxFW1AsIGZsYXNoPVxFWz81bFxFWz81aCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2Y1PVxFT3UsIGtmNj1cRU92LCBrZjc9XEVPdywga2Y4PVxFT3gsIGtmOT1cRU95LCBybWlyPVxFWzRsLAorCXNtaXI9XEVbNGgsIHVzZT1kdDgwLAorCisjIyMjIEZhbGNvCisjCisjCUZhbGNvIERhdGEgUHJvZHVjdHMKKyMJNDQwIFBvdHJlcm8gQXZlbnVlCisjCVN1bm55dmFsZSwgQ0EgOTQwODY0LTE5NgorIwlWb3g6ICg4MDApLTMyNS0yNjQ4CisjCUZheDogKDQwOCktNzQ1LTc4NjAKKyMJTmV0OiB0ZWNoc3VwQGNoYXJtLnN5cy5mYWxjby5jb20KKyMKKyMgQ3VycmVudCBGYWxjbyBtb2RlbHMgYXMgb2YgMTk5NSBhcmUgZ2VuZXJhbGx5IEFOU0ktY29tcGF0aWJsZSBhbmQgc3VwcG9ydAorIyBlbXVsYXRpb25zIG9mIERFQyBWVC1zZXJpZXMsIFd5c2UsIGFuZCBUZWxldmlkZW8gdHlwZXMuCisjCisKKyMgVGVzdCB2ZXJzaW9uIGZvciBGYWxjbyB0cy0xLiBTZWUgPGFycGF2YXguaGlja21hbkB1Y2I+IGZvciBpbmZvCisjIFRoaXMgdGVybWluYWwgd2FzIHJlbGVhc2VkIGFyb3VuZCAxOTgzIGFuZCB3YXMgZGlzY29udGludWVkIGxvbmcgYWdvLgorIyBUaGUgc3RhbmRvdXQgYW5kIHVuZGVybGluZSBoaWdobGlnaHRzIGFyZSB0aGUgc2FtZS4KK2ZhbGNvfHRzMXx0cy0xfGZhbGNvIHRzLTEsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRSosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVkPVxFWSwgZWw9XEVUXEVHMFwwMTAsIGhvbWU9Xl4sIGh0PV5JLCBpbDE9XEVFLAorCWluZD1eSiwgaXMyPVxFdVxFMywga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssCisJa2YwPV5BMFxyLCBybWlyPVxFciwgcm1zbz1cRWcwLCBybXVsPVxFZzAsIHNncjA9XEVnMCwKKwlzbWlyPVxFcSwgc21zbz1cRWcxLCBzbXVsPVxFZzEsCitmYWxjby1wfHRzMXB8dHMtMXB8ZmFsY28gdHMtMSB3aXRoIHBhZ2luZyBvcHRpb24sCisJT1RicywgYW0sIGRhLCBkYiwgbWlyLCBtc2dyLCB1bCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRUksIGNsZWFyPVxFKiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVbQSwKKwlkY2gxPVxFVywgZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVRcRUcwXDAxMFxFZzAsIGh0PV5JLAorCWlsMT1cRUUsIGluZD1eSiwgaXMyPVxFWlxFM1xFX2MsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2hvbWU9XEVbSCwgcm1jdXA9XEVfYiwgcm1pcj1cRXIsCisJcm1zbz1cRWcwLCBybXVsPVxFZzAsIHNncjA9XEVnMCwgc21jdXA9XEVfZCwgc21pcj1cRXEsCisJc21zbz1cRWc0LCBzbXVsPVxFZzEsCisjICh0czEwMDogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCit0czEwMHx0czEwMC1zcHxmYWxjbyB0czEwMC1zcCwKKwlhbSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sCisJY2xlYXI9XEVbSFxFW0okPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EkPDI+LCBkY2gxPVxFflcsIGRsMT1cRX5SLCBlZD1cRVtKJDw1MD4sCisJZWw9XEVbSyQ8Mz4sIGVsMT1cRVsxSyQ8Mz4sIGVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsCisJaHQ9XkksIGh0cz1cRUgsIGljaDE9XEV+USwgaWwxPVxFfkUsIGluZD1eSiwgaXMxPVxFfilcRX5lYSwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJcmM9XEU4LCByZXY9XEVbN20kPDI+LCByaT1cRU0kPDU+LCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mj4sIHJtdWw9XEVbbSQ8Mj4sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDI+LAorCXNncjA9XEVbbVwwMTckPDI+LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbMTs3bSQ8Mj4sIHNtdWw9XEVbNG0kPDI+LCB0YmM9XEVbM2csCisJdXNlPXZ0MTAwK2Zua2V5cywKK3RzMTAwLWN0eHR8ZmFsY28gdHMtMTAwIHNhdmluZyBjb250ZXh0LAorCXJtY3VwPVxFfl9iLCBzbWN1cD1cRX5fZFxFWzJKLCB1c2U9dHMxMDAsCisKKyMjIyMgRmxvcmlkYSBDb21wdXRlciBHcmFwaGljcworIworCisjIEZsb3JpZGEgQ29tcHV0ZXIgR3JhcGhpY3MgQmVhY29uIFN5c3RlbSwgdXNpbmcgdGVybWluYWwgZW11bGF0b3IgcHJvZ3JhbQorIyAiaG9zdC5jb20iLCBhcyBwcm92aWRlZCBieSBGQ0cuICBUaGlzIGRlc2NyaXB0aW9uIGlzIGZvciBhbiBlYXJseSByZWxlYXNlCisjIG9mIHRoZSAiaG9zdCIgcHJvZ3JhbS4gIEtub3duIGJ1ZzogPGVkPiBjbGVhcnMgdGhlIHdob2xlIHNjcmVlbiwgc28gaXQncworIyBjb21tZW50ZWQgb3V0LgorCisjIEZyb206IERhdmlkIEJyeWFudCA8Y2Jvc2chZGpiPiAxLzcvODMKK2JlYWNvbnxGQ0cgQmVhY29uIFN5c3RlbSwKKwlhbSwgZGEsIGRiLAorCWNvbHMjODAsIGxpbmVzIzMyLAorCWJlbD1cRVNUQVJUXHJcRTM3XHJcRUVORFxyJDwxPiwKKwlibGluaz1cRVNUQVJUXHJcRTYxXCwxXHJcRUVORFxyLCBjbGVhcj1cRVokPDEwPiwgY3I9Xk0sCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVYsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MjA+LCBjdXUxPVxFVSwKKwlkY2gxPVxFVywgZGwxPVxFUiwgZWw9XEVULCBob21lPVxFSCQ8MTA+LCBpY2gxPVxFUSwgaWwxPVxFRSwKKwlpbmQ9XkosIHJldj1cRVNUQVJUXHJcRTU5XCwxXHJcRUVORFxyLCBybWN1cD0sCisJcm1zbz1cRVNUQVJUXHJcRTcwXCwwXHJcRUVORFxyJDwyMD4sCisJcm11bD1cRVNUQVJUXHJcRTYwXCwwXHJcRUVORFxyLAorCXNncjA9XEVTVEFSVFxyXEU3OFxyXEU3MFwsMFxyXEVFTkRcciQ8MjA+LAorCXNtY3VwPVxFU1RBUlRcclxFMlwsMFxyXEUxMlxyXEVFTkRcciQ8MTA+LAorCXNtc289XEVTVEFSVFxyXEU3MFwsNlxyXEVFTkRcciQ8MjA+LAorCXNtdWw9XEVTVEFSVFxyXEU2MFwsMVxyXEVFTkRcciwKKworIyMjIyBGbHVrZQorIworCisjIFRoZSBmMTcyMGEgZGlmZmVyZW5jZXMgZnJvbSBBTlNJOiBubyBhdXRvIG1hcmdpbiwgZGVzdHJ1Y3RpdmUKKyMgdGFicywgIyBvZiBsaW5lcywgZnVubnkgaGlnaGxpZ2h0aW5nIGFuZCB1bmRlcmxpbmluZworZjE3MjB8ZjE3MjBhfGZsdWtlIDE3MjBBLAorCXh0LAorCWNvbHMjODAsIGxpbmVzIzE2LCB4bWMjMSwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLAorCWVsPVxFW0ssIGluZD1cRUQsIGlzMj1cRVtIXEVbMkosIGtjdWIxPV5fLCBrY3VkMT1eXSwKKwlrY3VmMT1eXiwga2N1dTE9XlwsIHJpPVxFTSwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNncjA9XEVbbSwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjIyMjIExpYmVydHkgRWxlY3Ryb25pY3MgKEZyZWVkb20pCisjCisjCUxpYmVydHkgRWxlY3Ryb25pY3MKKyMJNDgwODkgRnJlbW9udCBCbHZkCisjCUZyZW1vbnQgQ0EgOTQ1MzgKKyMJVm94OiAoNTEwKS02MjMtNjAwMAorIwlGYXg6ICg1MTApLTYyMy03MDIxCisKKyMgRnJvbTogPGZhbGV0dGlAYmVya2VsZXkuZWR1PgorIyAoZjEwMDogYWRkZWQgZW1wdHkgPGFjc2M+IHRvIHN1cHByZXNzIGEgdGljIHdhcm5pbmc7CisjIG1hZGUgdGhpcyByZWxhdGl2ZSB0byBhZG0rc2dyIC0tIG5vdGUgdGhhdCA8aW52aXM+IGlzbid0CisjIGtub3duIHRvIHdvcmsgZm9yIGYxMDAgYnV0IGRvZXMgb24gdGhlIGYxMTAuIC0tZXNyKQorZjEwMHxmcmVlZG9tfGZyZWVkb20xMDB8ZnJlZWRvbSBtb2RlbCAxMDAsCisJT1RicywgYW0sIGJ3LCBocywgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz0sIGJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVcsIGRsMT1cRVIkPDExLjUqPiwgZHNsPVxFZ1xFZlxyLCBlZD1cRVksIGVsPVxFVCwKKwlmbGFzaD1cRWIkPDIwMD5cRWQsIGZzbD1eTSwgaG9tZT1eXiwgaHBhPVxFXSVwMSV7MzJ9JSslYywKKwlodD1eSSwgaHRzPVxFMSwgaWwxPVxFRSQ8OC41Kj4sIGluZD1eSiwgaXA9JDw2PiwKKwlpczI9XEVnXEVmXHJcRWQsIGticz1eSCwga2NidD1cRUksIGtjdWIxPV5ILCBrY3VkMT1eViwKKwlrY3VmMT1eTCwga2N1dTE9XkssIGtmMT1eQUBcciwga2YxMD1eQUlcciwga2YyPV5BQVxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwgcmk9XEVqLCBybWFjcz1cRSQsIHJtaXI9XEVyLAorCXNtYWNzPVxFJSUsIHNtaXI9XEVxLCB0YmM9XEUzLCB0c2w9XEVnXEVmLAorCXZwYT1cRVslcDElezMyfSUrJWMsIHVzZT1hZG0rc2dyLAorZjEwMC1ydnxmcmVlZG9tLXJ2fGZyZWVkb20gMTAwIGluIHJldmVyc2UgdmlkZW8sCisJZmxhc2g9XEVkJDwyMDA+XEViLCBpczI9XEVnXEVmXHJcRWIsIHVzZT1mMTAwLAorIyBUaGUgZjExMCBhbmQgZjIwMCBoYXZlIHByb2JsZW1zIHdpdGggdmkoMSkuICBUaGV5IHVzZSB0aGUgXlYKKyMgY29kZSBmb3IgdGhlIGRvd24gY3Vyc29yIGtleS4gV2hlbiBrY3VkMSBpcyBkZWZpbmVkIGluIHRlcm1pbmZvCisjIGFzIF5WLCB0aGUgQ29udHJvbCBDaGFyYWN0ZXIgUXVvdGluZyBjYXBhYmlsaXR5ICheViBpbiBpbnNlcnQgbW9kZSkKKyMgaXMgbG9zdCEgSXQgY2Fubm90IGJlIHJlbWFwcGVkIGluIHZpIGJlY2F1c2UgaXQgaXMgbmVjZXNzYXJ5IHRvIGVudGVyCisjIGEgXlYgdG8gdG8gcXVvdGUgdGhlIF5WIHRoYXQgaXMgYmVpbmcgcmVtYXBwZWQhISEKKyMKKyMgZjExMC9mMjAwIHVzZXJzIHdpbGwgaGF2ZSB0byBkZWNpZGUgd2hldGhlcgorIyB0byBsb3NlIHRoZSBkb3duIGN1cnNvciBrZXkgb3IgdGhlIHF1b3RpbmcgY2FwYWJpbGl0eS4gV2Ugd2lsbCBvcHQKKyMgaW5pdGlhbGx5IGZvciBsZWF2aW5nIHRoZSBxdW90aW5nIGNhcGFiaWxpdHkgb3V0LCBzaW5jZSB1c2Ugb2YgVkkKKyMgaXMgbm90IGdlbmVyYWxseSBhcHBsaWNhYmxlIHRvIG1vc3QgaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zCisjIChmMTEwOiBhZGRlZCA8aHQ+LCA8a2hvbWU+ICYgPGtjYnQ+IGZyb20gZjEwMCAtLSBlc3IpCitmMTEwfGZyZWVkb20xMTB8TGliZXJ0eSBGcmVlZG9tIDExMCwKKwlid0AsIGVzbG9rLAorCWl0IzgsIHdzbCM4MCwKKwlibGluaz1cRUcyLCBib2xkPVxFRzAsIGNpdmlzPVxFLjEsIGNub3JtPVxFLjIsIGN1ZDE9XlYsCisJZGltPVxFR0AsIGRsMT1cRVIsIGRzbD1cRWZcciwgZmxhc2g9XEViJDwyMDAvPlxFZCwgaWwxPVxFRSwKKwlpcEAsIGlzMkAsIGtjbHI9Xl4sIGtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRVksIGtlbD1cRVQsCisJa2YwPV5BSVxyLCBrZjEwQCwga2ljaDE9XEVRLCBraWwxPVxFRSwgbWM0PVxFYSwgbWM1PVxFYCwKKwlyaT1cRUosIHJtYWNzPVxFJSUsIHJtaXI9XEVyXEVPLCBzbWFjcz1cRSQsIHNtaXI9XEVPXEVxLAorCXNtc289XEVHPCwgdHNsPVxFZiwgdXNlPWYxMDAsCitmMTEwLTE0fExpYmVydHkgRnJlZWRvbSAxMTAgMTRpbmNoLAorCWRjaDFALCB1c2U9ZjExMCwKK2YxMTAtd3xMaWJlcnR5IEZyZWVkb20gMTEwIC0gMTMyIGNvbHMsCisJY29scyMxMzIsIHVzZT1mMTEwLAorZjExMC0xNHd8TGliZXJ0eSBGcmVlZG9tIDExMCAxNGluLzEzMiBjb2xzLAorCWNvbHMjMTMyLAorCWRjaDFALCB1c2U9ZjExMCwKKyMgKGYyMDA6IGFkZGVkIDxhY3NjPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZ3MgcmUgPHNtYWNzPi88cm1hY3M+IC0tZXNyKQorZjIwMHxmcmVlZG9tMjAwfExpYmVydHkgRnJlZWRvbSAyMDAsCisJT1RicywgYW0sIGVzbG9rLCBocywgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRUcyLCBib2xkPVxFRzAsIGNidD1cRUksIGNpdmlzPVxFLjAsCisJY2xlYXI9XlosIGNub3JtPVxFLjEsIGNyPV5NLAorCWNzcj1cRW0wJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdWIxPV5ILCBjdWQxPV5WLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVcsIGRpbT1cRUdALCBkbDE9XEVSLCBkc2w9XEVmXHIsIGVkPVxFWSwgZWw9XEVULAorCWZsYXNoPVxFbyQ8MjAwLz5cRW4sIGZzbD1eTSwgaG9tZT1eXiwKKwlocGE9XEVdJXAxJXszMn0lKyVjLCBodHM9XEUxLCBpbDE9XEVFLCBpbmQ9XkosIGticz1eSCwKKwlrY2xyPV5eLCBrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLAorCWtkbDE9XEVSLCBrZWQ9XEVZLCBrZWw9XEVULCBrZjA9XkFJXHIsIGtmMT1eQUBcciwga2YyPV5BQVxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraWNoMT1cRVEsIGtpbDE9XEVFLCBtYzQ9XEVhLCBtYzU9XEVgLAorCXJpPVxFSiwgcm1hY3M9XEUlJSwgcm1pcj1cRXIsIHNtYWNzPVxFJCwgc21pcj1cRXEsIHNtc289XEVHPCwKKwl0YmM9XEUzLCB0c2w9XEVmLCB2cGE9XEVbJXAxJXszMn0lKyVjLCB1c2U9YWRtK3NnciwKK2YyMDAtd3xMaWJlcnR5IEZyZWVkb20gMjAwIC0gMTMyIGNvbHMsCisJY29scyMxMzIsIHVzZT1mMjAwLAorIyBUaGUgZjIwMCBoYXMgdGhlIGFiaWxpdHkgdG8gcmVwcm9ncmFtIHRoZSBkb3duIGN1cnNvciBrZXkuIFRoZSBrZXkgaXMKKyMgcmVwcm9ncmFtbWVkIHRvIF5KIChsaW5lZmVlZCkuIFRoaXMgdmFsdWUgaXMgcmVtZW1iZXJlZCBpbiBub24tdm9sYXRpbGUgUkFNLAorIyBzbyBwb3dlcmluZyB0aGUgdGVybWluYWwgb2ZmIGFuZCBvbiB3aWxsIG5vdCBjYXVzZSB0aGUgY2hhbmdlIHRvIGJlIGxvc3QuCitmMjAwdml8TGliZXJ0eSBGcmVlZG9tIDIwMCBmb3IgdmksCisJZmxhc2g9XEViJDwyMDAvPlxFZCwga2N1ZDE9XkosIHVzZT1mMjAwLAorZjIwMHZpLXd8TGliZXJ0eSBGcmVlZG9tIDIwMCAtIDEzMiBjb2xzIGZvciB2aSwKKwljb2xzIzEzMiwgdXNlPWYyMDB2aSwKKworIyMjIyBHcmFwaE9uIChnbykKKyMKKyMJR3JhcGhvbiBDb3Jwb3JhdGlvbgorIwk1NDQgRGl2aXNpb24gU3RyZWV0CisjCUNhbXBiZWxsLCBDQSA5NTAwOAorIwlWb3g6ICg0MDgpLTM3MC00MDgwCisjCUZheDogKDQwOCktMzcwLTUwNDcKKyMJTmV0OiB0cm95QGdyYXBob24uY29tIChUcm95IE1vcnJpc29uKQorIworIworIyBUaGUgZ28xNDAgYW5kIGdvMjI1IGhhdmUgYmVlbiBkaXNjb250aW51ZWQuICBHcmFwaE9uIG5vdyBtYWtlcyBYIHRlcm1pbmFscywKKyMgaW5jbHVkaW5nIG9uZSBvZGQgaHlicmlkIHRoYXQgc3RhcnRzIG91dCBsaWZlIG9uIHBvd2VyLXVwIGFzIGEgY2hhcmFjdGVyCisjIHRlcm1pbmFsLCB0aGFuIGNhbiBiZSBzd2l0Y2hlZCB0byBYIGdyYXBoaWNzIG1vZGUgKGRyaXZlbiBvdmVyIHRoZSBzZXJpYWwKKyMgbGluZSkgYnkgYW4gZXNjYXBlIHNlcXVlbmNlLiAgTm8gaW5mbyBvbiB0aGlzIGJlYXN0IHlldC4KKyMgKGdvMTQwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2dvMTQwfGdyYXBob24gZ28tMTQwLAorCU9UYnMsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XEVbSFxFWzJKJDwxMC8+LCBjdWIxPV5ILCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEgsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbDE9XEVbTSwKKwllZD1cRVtKJDwxMC8+LCBlbD1cRVtLLCBodD1eSSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWwxPVxFW0wsCisJaXMyPVxFPFxFPVxFWz8zbFxFWz83bFxFKEJcRVtKXEU3XEVbO3JcRThcRVttXEVbcSwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBraG9tZT1cRVtILCByaT1cRU0sCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sCisJcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorZ28xNDB3fGdyYXBob24gZ28tMTQwIGluIDEzMiBjb2x1bW4gbW9kZSwKKwlhbSwKKwljb2xzIzEzMiwKKwlpczI9XEU8XEU9XEVbPzNoXEVbPzdoXEUoQlxFW0pcRTdcRVs7clxFOFxFW21cRVtxLAorCXVzZT1nbzE0MCwKKyMgSGFja2VkIHVwIHZ0MjAwIHRlcm1jYXAgdG8gaGFuZGxlIEdPLTIyNS9WVDIyMAorIyBGcm9tOiA8ZWRtQG53bmV4dXMuV0EuQ09NPgorIyAoZ28yMjU6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorZ28yMjV8Z28tMjI1fEdyYXBob24gMjI1LAorCU9UYnMsIGFtLCBtaXIsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIHZ0IzMsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVtKLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBraG9tZT1cRVtILCByYz1cRTgsIHJldj1cRVs3bSwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgcmk9XEVNLCBybWFtPVxFWz83bCwKKwlybWN1cD1cRVshcFxFWz83aFxFWzI7MTsxI3csIHJtaXI9XEVbNGwsIHJta3g9XEU+LAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgcnMxPVxFWyFwXEVbPzdoXEVbMjsxOzEjdywKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21hbT1cRVs/N2gsIHNtY3VwPVxFWzI7MCN3XEVbMTsyNXIsCisJc21pcj1cRVs0aCwgc21reD1cRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMjIyMgSGFycmlzIChCZWVoaXZlKQorIworIyBCbGV0Y2guICBUaGVzZSBndXlzIHNoYXJlZCB0aGUgVGVybWluYWwgQnJhaW4gRGFtYWdlIGxhdXJlbHMgd2l0aCBIYXplbHRpbmUuCisjIFRoZWlyIHRlcm1pbmFsIGdyb3VwIGlzIGFuY2llbnQgaGlzdG9yeSBub3cgKDE5OTUpIHRob3VnaCB0aGUgcGFyZW50CisjIGNvbXBhbnkgaXMgc3RpbGwgaW4gYnVzaW5lc3MuCisjCisKKyMgQmVlaGl2ZSBkb2N1bWVudGF0aW9uIGlzIHVuZGF0ZWQgYW5kIG1hcmtlZCBQcmVsaW1pbmFyeSBhbmQgaGFzIG5vIGZpZ3VyZXMKKyMgc28gd2UgbXVzdCBoYXZlIGVhcmx5IFN1cGVyYmVlMiAoTW9kZWwgNjAwLCBhY2NvcmRpbmcgdG8gcGhvbmUgY29udmVyc2F0aW9uCisjIHdpdGggbWZyLikuIEl0IGhhcyBwcm92ZWQgcmVsaWFibGUgZXhjZXB0IGZvciBzb21lIG1pc3NpbmcgcGFkZGluZworIyAobm90YWJseSBhZnRlciBcRUsgYW5kIDxubD4gYXQgYm90dG9tIG9mIHNjcmVlbikuCisjCisjIFRoZSBrZXkgaWRlYSBpcyB0aGF0IEFFUCBtb2RlIGlzIHBvaXNvbiBmb3IgPGN1cD4gJiB0aGF0IFVTJ3MgaW4KKyMgdGhlIGxvY2FsIG1lbW9yeSBzaG91bGQgYmUgYXZvaWRlZCBsaWtlIHRoZSBwbGFndWUuIFRoYXQgbWVhbnMKKyMgdGhhdCB0aGUgMjA0OCBjaGFyYWN0ZXIgbG9jYWwgYnVmZmVyIGlzIHVzZWQgYXMgMjUgbGluZXMgb2YgODAKKyMgY2hhcmFjdGVycywgcGVyaW9kLiBObyBzY3JvbGxpbmcgbG9jYWwgbWVtb3J5LCBmb2xrcy4gSXQgYWxzbworIyBhcHBlYXJzIHRoYXQgd2UgY2Fubm90IHVzZSBuYWtlZCBJTlMgTElORSBmZWF0dXJlIHNpbmNlIGl0IHVzZXMKKyMgVVMuIFRoZSBzYmkgZmFrZXMgPGlsMT4gd2l0aCBhbiA4MC1zcGFjZSBpbnNlcnQgdGhhdCBtYXkgYmUgdG9vCisjIHNsb3cgYXQgbG93IHNwZWVkczsgYWxzbyBzcGFjZXMgZ2V0IGNvbnZlcnRlZCB0byBcMDQwIHdoaWNoIGlzCisjIHRvbyBsb25nIGZvciBzb21lIHByb2dyYW1zIChub3QgdmkpLiAgREVMIExJTkUgaXMgb2sgYnV0IHNsb3cuCisjCisjIFRoZSA8bmw+IHN0cmluZyBpcyBkZXNpZ25lZCBmb3IgbGFzdCBsaW5lIG9mIHNjcmVlbiBPTkxZOyBjdXAgdG8KKyMgMjV0aCBsaW5lIGNvcnJlY3RzIHRoZSBtb3Rpb24gaW5oZXJlbnQgaW4gc2Nyb2xsaW5nIHRvIFBhZ2UgMS4KKyMKKyMgVGhlcmUgaXMgb25lIHVuZGVyc3Rvb2QgYnVnLiBJdCBpcyB0aGF0IHRoZSBzY3JlZW4gYXBwZWFycyB0bworIyBwb3AgdG8gYSBuZXcgKGJsYW5rKSBwYWdlIGFmdGVyIGEgPG5lbD4sIG9yIGxlYXZlIGEgaGFsZi1saW5lCisjIGVsbGlwc2lzIHRvIGEgcXVhZCB0aGF0IGlzIHRoZSBleHRyYSA0OCBtZW1vcnkgbG9jYXRpb25zLiBUaGUKKyMgZGF0YSByZWNlaXZlZCBpcyBkdW1wZWQgaW50byBtZW1vcnkgYnV0IG5vdCBkaXNwbGF5ZWQuICBOb3QgdG8KKyMgd29ycnkgaWYgPGN1cD4gaXMgYmVpbmcgdXNlZDsgdGhlIGxpbmVzIG5vdCBkaXNwbGF5ZWQgd2lsbCBiZSwKKyMgd2hlbmV2ZXIgdGhlIGN1cnNvciBpcyBtb3ZlZCB1cCB0aGVyZS4gU2luY2UgPGN1cD4gaXMgYWRkcmVzc2VkCisjIHJlbGF0aXZlIHRvIE1FTU9SWSBvZiB3aW5kb3csIG5vdGhpbmcgaXMgbG9zdDsgYnV0IGJld2FyZSBvZgorIyByZWxhdGl2ZSBjdXJzb3IgbW90aW9uICg8Y3V1MT4sPGN1ZDE+LDxjdWYxPiw8Y3ViMT4pLiBSZWNvbW1lbmRlZCwKKyMgdGhlcmVmb3JlLCBpcyBzZXRlbnYgTU9SRSAtYyAuCisjCisjIFdBUk5JTkc6IE5vdCBhbGwgZmVhdHVyZXMgdGVzdGVkLgorIworIyBUaW1pbmdzIGFyZSBhc3NlbWJsZWQgZnJvbSAzIHNvdXJjZXMuIFNvbWUgdGltaW5ncyBtYXkgcmVmbGVjdAorIyBTQjIvTW9kZWwgMzAwIHRoYXQgd2VyZSB1c2VkIGlmIG1vcmUgY29uc2VydmF0aXZlLgorIyBUZXN0ZWQgb24gYSBNb2RlbCA2MDAgYXQgMTIwMCBhbmQgOTYwMCBiZC4KKyMKKyMgVGhlIEJBQ0tTUEFDRWtiIG9wdGlvbiBpcyBjdXRlLiBUaGUgTkVXTElORSBrZXksIHNvIGNsZXZlcmx5CisjIHBsYWNlZCBvbiB0aGUga2V5Ym9hcmQgYW5kIHVzZWxlc3MgYmVjYXVzZSBvZiBBRVAsIGlzIG1hZGUKKyMgaW50byBhIGJhY2tzcGFjZSBrZXkuIEluIHVzZSBFU0MgbXVzdCBiZSBwcmVzc2VkIHR3aWNlICh0byBzZW5kKQorIyBhbmQgc2VuZGluZyBeQyBtdXN0IGJlIHByZWZpeGVkIGJ5IEVTQyB0byBhdm9pZCB0aGF0IHdlaXJkCisjIHRyYW5zbWl0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIEVOVEVSIGtleS4KKyMKKyMgSUYgVEVSTUlOQUwgRVZFUiBHT0VTIENBVEFUT05JQyB3aXRoIHRoZSBjdXJzb3IgYnV6emluZyBhY3Jvc3MKKyMgdGhlIHNjcmVlbiwgdGhlbiBpdCBoYXMgZHJvcHBlZCBpbnRvIEVOVEVSIG1vZGU7IGhpdAorIyBSRVNFVC0tT05MSU5FLS0hdHNldC4KKyMKKyMgQXMgZGVsaXZlcmVkIHRoaXMgbWFjaGluZSBoYXMgYSBGQVRBTCBmZWF0dXJlIHRoYXQgd2lsbCB0aHJvdworIyBpdCBpbnRvIHRoYXQgc3RyYW5nZSB0cmFuc21pdCBzdGF0ZSAoU1BPVykgaWYgdGhlIHNwYWNlIGJhciBpcworIyBoaXQgYWZ0ZXIgYSBDUiBpcyByZWNlaXZlZCwgYnV0IGJlZm9yZSByZWNlaXZpbmcgYSBMRiAob3IgYQorIyBmZXcgb3RoZXJzKS4KKyMKKyMgVGhlIGNpcmN1aXRzIE1VU1QgYmUgbW9kaWZpZWQgdG8gZWxpbWluYXRlIHRoZSBTUE9XIGxhdGNoLgorIyBUaGlzIGlzIGRvbmUgYnkgc3RyYXBwaW5nIG9uIGNoaXAgQTQ2IG9mIHRoZSBJL08gYm9hcmQ7IGN1dAorIyB0aGUgcC5jLiBjb25uZWN0aW9uIHRvIFBpbiA1IGFuZCBzdHJhcCBQaW4gNSB0byBQaW4gOCBvZiB0aGF0CisjIGNoaXAuIFRoaXMgbW9kIGhhcyBiZWVuIGNoZWNrZWQgb3V0IG9uIGEgTW9kIDYwMCBvZiBTdXBlcmJlZSBJSS4KKyMgV2l0aCB0aGlzIG1vZGlmaWNhdGlvbiBhYnN1cmRseSBoaWdoIHRpbWluZ3Mgb24gY3IgYXJlCisjIHVubmVjZXNzYXJ5LgorIworIyBOT1RFIFdFTEwgdGhhdCB0aGUgcmVhciBwYW5lbCBzd2l0Y2ggc2hvdWxkIGJlIHNldCB0byBDUi9MRiwKKyMgbm90IEFFUCEKKyMKK3NiMXxiZWVoaXZlIHN1cGVyYmVlLAorCU9UYnMsIGFtLCBidywgZGEsIGRiLCBtaXIsIHVsLCB4c2IsCisJY29scyM4MCwgbGluZXMjMjUsIHhtYyMxLAorCWJlbD1eRywgY2J0PVxFYCQ8NjUwPiwgY2xlYXI9XEVIJDwxPlxFSiQ8Mz4sIGNyPSQ8MT5cciwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQyQ8Mz4sIGN1cD1cRUYlcDIlMDNkJXAxJTAzZCwKKwljdXUxPVxFQSQ8Mz4sIGRjaDE9XEVQJDwzPiwgZGwxPVxFTSQ8MTAwPiwgZWQ9XEVKJDwzPiwKKwllbD1cRUskPDM+LCBob21lPVxFSCQ8MT4sIGh0PV5JLCBodHM9XEUxLAorCWlsMT1cRU5cRUwkPDM+XEVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcRVAkPDM+IFxFT1xFUlxFQSQ8Mz4sCisJaW5kPV5KLCBpczI9XEVFJDwzPlxFWFxFWlxFT1xFYlxFZ1xFUiwga2JzPV5fLCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2RsMT1cRU0sIGtlZD1cRUosIGtlbD1cRUssCisJa2YwPVxFMiwga2YxPVxFcCwga2YyPVxFcSwga2YzPVxFciwga2Y0PVxFcywga2Y1PVxFdCwga2Y2PVxFdSwKKwlrZjc9XEV2LCBrZjg9XEV3LCBrZjk9XEUxLCBraG9tZT1cRUgsIGtpY2gxPVxFUVxFTywKKwlrcm1pcj1cRVIsIGxmMD1UQUIgQ0xFQVIsIGxmOT1UQUIgU0VULCBybWN1cD0sIHJtaXI9XEVSLAorCXJtc289XEVfMywgcm11bD1cRV8zLCBzZ3IwPVxFXzMsIHNtY3VwPVxFTywgc21pcj1cRVFcRU8sCisJc21zbz1cRV8xLCBzbXVsPVxFXzAsIHRiYz1cRTMsCitzYml8c3VwZXJiZWV8YmVlaGl2ZSBzdXBlcmJlZSBhdCBJbmRpYW5hIFUuLAorCXhzYiwKKwljcj1cciQ8MT4sIGlsMT0xXEVOXEVMJDw5PlxFUSBcRVAkPDk+IFxFT1xFUlxFQSwKKwl1c2U9c2IxLAorIyBBbHRlcm5hdGUgKG9sZGVyKSBkZXNjcmlwdGlvbiBvZiBTdXBlcmJlZSAtIGYxPWVzY2FwZSwgZjI9XkMuCisjIE5vdGU6IHRoZXJlIGFyZSBhdCBsZWFzdCAzIGtpbmRzIG9mIHN1cGVyYmVlcyBpbiB0aGUgd29ybGQuICBUaGUgc2IxCisjIGhvbGRzIG9udG8gZXNjYXBlcyBhbmQgYm90Y2hlcyBeQydzLiAgVGhlIHNiMiBpcyB0aGUgYmVzdCBvZiB0aGUgMy4KKyMgVGhlIHNiMyBwdXRzIGdhcmJhZ2Ugb24gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuIHdoZW4geW91IHNjcm9sbCB3aXRoCisjIHRoZSBzd2l0Y2ggaW4gdGhlIGJhY2sgc2V0IHRvIENSTEYgaW5zdGVhZCBvZiBBRVAuICBUaGlzIGRlc2NyaXB0aW9uCisjIGlzIHRlc3RlZCBvbiB0aGUgc2IyIGJ1dCBzaG91bGQgd29yayBvbiBhbGwgd2l0aCBlaXRoZXIgc3dpdGNoIHNldHRpbmcuCisjIFRoZSBmMS9mMiBidXNpbmVzcyBpcyBmb3IgdGhlIHNiMSBhbmQgdGhlIDx4c2I+IGNhbiBiZSB0YWtlbiBvdXQgZm9yCisjIHRoZSBvdGhlciB0d28gaWYgeW91IHdhbnQgdG8gdHJ5IHRvIGhpdCB0aGF0IHRpbnkgZXNjYXBlIGtleS4KKyMgVGhpcyBkZXNjcmlwdGlvbiBpcyB0cmlja3k6IGJlaW5nIGFibGUgdG8gdXNlIGN1cCBkZXBlbmRzIG9uIHRoZXJlIGJlaW5nCisjIDIwNDggYnl0ZXMgb2YgbWVtb3J5IGFuZCB0aGUgaGFpcnkgPG5sPiBzdHJpbmcuCitzdXBlcmJlZS14c2J8YmVlaGl2ZSBzdXBlciBiZWUsCisJYW0sIGRhLCBkYiwgeHNiLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWNsZWFyPVxFSFxFSiQ8Mz4sIGNub3JtPV5KLCBjcj1cciQ8MTAwMD4sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1cRUMsIGN1cD1cRUYlcDIlM2QlcDElM2QsIGN1dTE9XEVBJDwzPiwKKwlkY2gxPVxFUCQ8Mz4sIGRsMT1cRU0kPDEwMD4sIGVkPVxFSiQ8Mz4sIGVsPVxFSyQ8Mz4sCisJaG9tZT1cRUgsIGh0PV5JLCBodHM9XEUxLAorCWluZD1cblwwXDBcMFxuXDBcMFwwXEVBXEVLXDBcMFwwXEVUXEVULCBpczI9XEVIXEVKLAorCWtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YxPVxFcCwga2YyPVxFcSwKKwlrZjM9XEVyLCBrZjQ9XEVzLCBrZjU9XEV0LCBrZjY9XEV1LCBrZjc9XEV2LCBrZjg9XEV3LAorCWtob21lPVxFSCwgcm1zbz1cRV8zLCBzZ3IwPVxFXzMsIHNtc289XEVfMSwgdGJjPVxFMywKKyMgVGhpcyBsb3NlcyBvbiBsaW5lcyA+IDgwIGNoYXJzIGxvbmcsIHVzZSBhdCB5b3VyIG93biByaXNrCitzdXBlcmJlZWljfHN1cGVyIGJlZSB3aXRoIGluc2VydCBjaGFyLAorCWljaDE9LCBybWlyPVxFUiwgc21pcj1cRVEsIHVzZT1zdXBlcmJlZS14c2IsCitzYjJ8c2IzfGZpeGVkIHN1cGVyYmVlLAorCXhzYkAsIHVzZT1zdXBlcmJlZSwKKworIyMjIyAgQmVlaGl2ZSBNZWRpY2FsIEVsZWN0cm9uaWNzCisjCisjIFN0ZXZlIFNleW1vdXIgPHNyc2V5bW91ckBtaW5kc3ByaW5nLmNvbT4gd3JpdGVzIChXZWQsIDAzIEZlYiAxOTk5KToKKyMgUmVnYXJkaW5nIHlvdXIgcXVlc3Rpb24gdGhvdWdoOyBCZWVoaXZlIHRlcm1pbmFscyB3ZXJlbid0IG1hZGUgYnkgSGFycmlzLgorIyBUaGV5IHdlcmUgbWFkZSBieSBCZWVoaXZlIE1lZGljYWwgRWxlY3Ryb25pY3MgaW4gVXRhaC4gVGhleSB3ZW50IG91dCBvZgorIyBidXNpbmVzcyBpbiB0aGUgZWFybHkgJzgwcy4KKyMKKyMgKE9LLCB0aGVuLCBJIGRvbid0IGtub3cgd2h5IGEgY291cGxlIG9mIHRoZXNlIHNheSAiaGFycmlzIGJlZWhpdmUiLikKKyMKKworIyBSZXBvcnRzIGFyZSB0aGF0IG1vc3Qgb2YgdGhlc2UgQmVlaGl2ZSBlbnRyaWVzIChleGNlcHQgc3VwZXJiZWUpIGhhdmUgbm90CisjIGJlZW4gdGVzdGVkIGFuZCBkbyBub3Qgd29yayByaWdodC4gIDxybXNvPiBpcyBhIHRyb3VibGUgc3BvdC4gIEJlIHdhcm5lZC4KKworIyAoYmVlOiA8aWNoMT4gd2FzIGVtcHR5LCB3aGljaCBpcyBvYnZpb3VzbHkgYm9ndXMgLS0gZXNyKQorYmVlaGl2ZXxiZWV8aGFycmlzIGJlZWhpdmUsCisJT1RicywgYW0sIG1pciwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljYnQ9XEU+LCBjbGVhcj1cRUUsIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVGJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRVAsCisJZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVILCBpbDE9XEVMLCBrYnM9XkgsIGtjYnQ9XEU+LAorCWtjbHI9XEVFLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsCisJa2RjaDE9XEVQLCBrZGwxPVxFTSwga2VsPVxFSywga2hvbWU9XEVILCBraWNoMT1cRVEsIGtpbDE9XEVMLAorCWtybWlyPVxFQCwgcm1pcj1cRUAsIHJtc289XEVkQCwgcm11bD1cRWRALCBzZ3IwPVxFZEAsCisJc21pcj1cRVEsIHNtc289XEVkUCwgc211bD1cRWRgLAorIyBzZXQgdGFiIGlzIF5GLCBjbGVhciAob25lKSB0YWIgaXMgXlYsIG5vIHdheSB0byBjbGVhciBhbGwgdGFicy4KKyMgZ29vZCBncmllZiAtIGRvZXMgdGhpcyBlbnRyeSBtYWtlIDpzZzovOnVnOiB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSB0bz8KKyMgbG9vayBhdCB0aG9zZSBzcGFjZXMgaW4gPHJtc28+LzxzbXNvPi4gIFNlZW1zIHN0cmFuZ2UgdG8gbWUuLi4KKyMgKGJlZWhpdmU6IDxpZj0vdXNyL3NoYXJlL3RhYnNldC9iZWVoaXZlPiByZW1vdmVkLCBubyBzdWNoIGZpbGUuICBJZiB5b3UKKyMgcmVhbGx5IGNhcmUsIGNvb2sgdXAgb25lIHVzaW5nIF5GIC0tIGVzcikKK2JlZWhpdmUzfGJoM218YmVlaGl2ZUlJSW18aGFycmlzIGJlZWhpdmUgM20sCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjAsCisJYmVsPV5HLCBjbGVhcj1eRV5SLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwgY3V1MT1eSywKKwlkbDE9XDAyMSQ8MzUwPiwgZWQ9XlIsIGVsPV5QLCBob21lPV5FLCBodD1eSSwgaHRzPV5GLAorCWlsMT1cMDIzJDwxNjA+LCBpbmQ9XkosIGxsPV5FXkssIHJtc289XHNeXywgc21zbz1eXVxzLAorYmVlaGl2ZTR8Ymg0fGJlZWhpdmUgNCwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFRSwgY3I9Xk0sIGN1YjE9XEVELCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXUxPVxFQSwgZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVILCBpbmQ9XkosCisjIFRoZXJlIHdhcyBhbiBlYXJseSBBdXN0cmFsaWFuIGtpdC1idWlsdCBjb21wdXRlciBjYWxsZWQgYSAiTWljcm9iZWUiLgorIyBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoaXMgaXMgZm9yIG9uZSBvZiB0aG9zZSBvciBmb3IgYSByZWxhdGl2ZQorIyBvZiB0aGUgQmVlaGl2ZS4KK21pY3JvYnxtaWNyb2JlZXxtaWNybyBiZWUgc2VyaWVzLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVFLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFRiVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGVkPVxFSiwKKwllbD1cRUssIGh0PV5JLCBpbmQ9XkosIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZjE9XEVwLCBrZjI9XEVxLCBrZjM9XEVyLCBrZjQ9XEVzLCBrZjU9XEV0LAorCWtmNj1cRXUsIGtmNz1cRXYsIGtmOD1cRXcsIGtmOT1cRXgsIGtob21lPVxFSCwgcm1zbz1cRWRALAorCXJtdWw9XEVkQCwgc2dyMD1cRWRALCBzbXNvPVxzXEVkUCwgc211bD1cRWRgLAorCisjIDg2NzUsIDg2ODYsIGFuZCBiZWUgZnJvbSBDeXJ1cyBSYWhtYW4KKyMgKDg2NzU6IGNoYW5nZWQgazEwLCBrMTEuLi5rMTYgdG8gazssIEYxLi4uRjYgLS0gZXNyKQoraGE4Njc1fGhhcnJpcyA4Njc1LAorCWlzMj1cRVNcRSNcRSpcRWhcRW1cRT9cRTFcRTlcRUBcRVhcRVUsIGtmMT1eRiwKKwlrZjEwPVxFZCwga2YxMT1eVywga2YxMj1cRVIsIGtmMTM9XEVFLCBrZjE0PVxFSSwga2YxNT1cRWksCisJa2YxNj1cRWcsIGtmMj1eUCwga2YzPV5OLCBrZjQ9XlYsIGtmNT1eSiwga2Y2PV5ULCBrZjc9XkgsCisJa2Y4PVwxNzcsIGtmOT1cRWUsIHVzZT1iZWUsCisjICg4Njg2OiBjaGFuZ2VkIGsxMCwgazExLi4uazE2IHRvIGs7LCBGMS4uLkY2OyBmaXhlZCBicm9rZW4gY29udGludWF0aW9uCisjIGluIDppczogLS0gZXNyKQoraGE4Njg2fGhhcnJpcyA4Njg2LAorCWlzMj1cRVNcRSNcRSpcRWhcRW1cRT9cRTFcRTlcRUBcRVhcRVVcRSIqWjAxXEUiOEYzNTAyMUI3QzgzI1xFIjhGNDUwMjFCN0Q4MyNcRSI4RjU1MDIxQjdFODMjXEUiOEY2NTAyMUI3RjgzI1xFIjhGNzUwMjFCNzM4MyNcRSI4Rjg1MUJENyNcRSI4Rjk1MDIxQjcwODMjXEUiOEZBNTAyMUI3MTgzI1xFIjhGQjUwMjFCNzI4MyMsCisJa2YxPVwwMDJcRXBcMDAzLCBrZjEwPVxFaiwga2YxMT1cRVcsIGtmMTI9XDAwMlxFe1wwMDMsCisJa2YxMz1cMDAyXEV8XDAwMywga2YxND1cMDAyXEV9XDAwMywga2YxNT1cMDAyXEV+XDAwMywKKwlrZjE2PVwwMDJcRVwxNzdcMDAzLCBrZjI9XDAwMlxFcVwwMDMsIGtmMz1cMDAyXEVyXDAwMywKKwlrZjQ9XDAwMlxFc1wwMDMsIGtmNT1cRTMsIGtmNj1cRUksIGtmNz1cRVIsIGtmOD1cRUosIGtmOT1cRSgsCisJdXNlPWJlZSwKKworIyMjIyBIYXplbHRpbmUKKyMKKyMgSGF6ZWx0aW5lIGFwcGVhcnMgdG8gYmUgb3V0IG9mIHRoZSB0ZXJtaW5hbCBidXNpbmVzcyBhcyBvZiAxOTk1LiAgVGhlc2UKKyMgZ3V5cyB3ZXJlIGNvLW93bmVycyBvZiB0aGUgVGVybWluYWwgQnJhaW4gRGFtYWdlIEhhbGwgT2YgRmFtZSBhbG9uZyB3aXRoCisjIEhhcnJpcy4gVGhleSBoYXZlIGEgaGF6ZWx0aW5lLmNvbSBkb21haW4gKGJ1dCBubyB3ZWIgcGFnZSB0aGVyZSApIGFuZCBjYW4KKyMgYmUgcmVhY2hlZCBhdDoKKyMKKyMJSGF6ZWx0aW5lCisjCTQ1MCBFYXN0IFB1bGFza2kgUm9hZAorIwlHcmVlbmxhd24sIE5ldyBZb3JrIDExNzQwCisjCisjIEFzIGxhdGUgYXMgMTk5MywgbWFudWFscyBmb3IgdGhlIHRlcm1pbmFsIHByb2R1Y3QgbGluZSBjb3VsZCBzdGlsbCBiZQorIyBwdXJjaGFzZWQgZnJvbToKKyMKKyMJVFJXIEN1c3RvbWVyIFNlcnZpY2UgRGl2aXNpb24KKyMJMTUgTGF3IERyaXZlCisjCVAuTy4gQm94IDIwNzYKKyMJRmFpcmZpZWxkLCBOSiAwNzAwNy0yMDc4CisjCisjIFRoZXkncmUgbm93ICgxOTk4KSBhIHN1YnNpZGlhcnkgb2YgR2VuZXJhbCBFbGVjdHJpYywgb3BlcmF0aW5nIHVuZGVyIHRoZQorIyBtYXJxdWUgIkdFQy1NYXJjb25pIEhhemVsdGluZSIgYW5kIGRvaW5nIG1pbGl0YXJ5IGF2aW9uaWNzLiAgV2ViIHBhZ2UKKyMgYXQgPGh0dHA6Ly93d3cuZ2VjLmNvbS9jcGQvMW5jcGQuaHRtIzEuNTU+LgorIworCisjIFNpbmNlIDxjdWYxPiBpcyBibGFuaywgd2hlbiB5b3Ugd2FudCB0byBlcmFzZSBzb21ldGhpbmcgeW91CisjIGFyZSBvdXQgb2YgbHVjay4gIFlvdSB3aWxsIGhhdmUgdG8gZG8gXkwncyBhIGxvdCB0bworIyByZWRyYXcgdGhlIHNjcmVlbi4gIGgxMDAwIGlzIHVudGVzdGVkLiAgSXQgZG9lc24ndCB3b3JrIGluCisjIHZpIC0gdGhpcyB0ZXJtaW5hbCBpcyB0b28gZHVtYiBmb3IgZXZlbiB2aS4gIChUaGUgY29kZSBpcworIyB0aGVyZSBidXQgaXQgaXNuJ3QgZGVidWdnZWQgZm9yIHRoaXMgY2FzZS4pCitoejEwMDB8aGF6ZWx0aW5lIDEwMDAsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMxMiwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1ccywgaG9tZT1eSywKKwlpbmQ9XkosCisjIEZyb206IDxjYm9zZyF1Y2J2YXghcHVyLWVlIWNpbmN5IWNocmlzPiBUaHUgQXVnIDIwIDA5OjA5OjE4IDE5ODEKK2h6MTQyMHxoYXplbHRpbmUgMTQyMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFXlwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5QLAorCWN1cD1cRVwwMjElcDIlYyVwMSV7MzJ9JSslYywgY3V1MT1cRV5MLCBkbDE9XEVeUywKKwllZD1cRV5YLCBlbD1cRV5PLCBodD1eTiwgaWwxPVxFXlosIGluZD1eSiwgcm1zbz1cRV5ZLAorCXNtc289XEVeXywKKyMgTmV3ICJzYWZlIiBjdXJzb3IgbW92ZW1lbnQgKDExLzg3KSBmcm9tIDxjZ3NAdW1kNS51bWQuZWR1Pi4gIFByZXZlbnRzCisjIGZyZWFrb3V0IHdpdGggb3V0LW9mLXJhbmdlIGFyZ3MgYW5kIHRuMzI3MC4gIE5vIGh6IHNpbmNlIGl0IG5lZWRzIHRvCisjIHJlY2VpdmUgdGlsZGVzLgoraHoxNTAwfGhhemVsdGluZSAxNTAwLAorCU9UYnMsIGFtLCBoeiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPX5eXCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9fl5LLCBjdWYxPV5QLAorCWN1cD1+XDAyMSVwMiVwMiU/JXszMH0lPiV0JXszMn0lKyU7JXs5Nn0lKyVjJXAxJXs5Nn0lKyVjLAorCWN1dTE9fl5MLCBkbDE9flwwMjMkPDQwPiwgZWQ9flwwMzAkPDEwPiwgZWw9fl5PLCBob21lPX5eUiwKKwlpbDE9flwwMzIkPDQwPiwgaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5QLAorCWtjdXUxPX5eTCwga2hvbWU9fl5SLCBybXNvPX5eWSwgc21zbz1+Xl8sCisjIGgxNTEwIGFzc3VtZWQgdG8gYmUgaW4gc2FuZSBlc2NhcGUgbW9kZS4gIEVsc2UgdXNlIGgxNTAwLgorIyAoaDE1MTA6IGVhcmx5IHZlcnNpb25zIG9mIHRoaXMgZW50cnkgYXBwYXJlbnRseSBoYWQgIjxybXNvPVxFXl8+LAorIyA8c21zbz1cRV5ZPiwgYnV0IHRoZXNlIGNhcHMgd2VyZSBjb21tZW50ZWQgb3V0IGluIDguMzsgYWxzbywKKyMgcmVtb3ZlZCBpbmNvcnJlY3QgYW5kIG92ZXJyaWRkZW4gIjpkbz1eSjoiIC0tIGVzcikKK2h6MTUxMHxoYXplbHRpbmUgMTUxMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFXlwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFXkssIGN1ZjE9XlAsCisJY3VwPVxFXDAyMSVwMiVjJXAxJWMsIGN1dTE9XEVeTCwgZGwxPVxFXlMsIGVkPVxFXlgsCisJZWw9XEVeTywgaWwxPVxFXlosIGluZD1eSiwKKyMgSGF6ZWx0aW5lIDE1MjAKKyMgVGhlIGZvbGxvd2luZyBzd2l0Y2ggc2V0dGluZ3MgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCUZVTEwJCUNSCQlVL0xfQ0FTRQlFU0NBUEUKKyMJRk9STUFUX09GRglFT01fQV9PRkYJRU9NX0JfT0ZGCVdSQVBBUk9VTkRfT04KKyMgT3RoZXIgc3dpdGNoZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHMuCitoejE1MjB8SGF6ZWx0aW5lIDE1MjAsCisJT1RicywgYW0sIGJ3LCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgYm9sZD1cRV5fLCBjbGVhcj1cRV5cLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPV5QLCBjdXA9XEVcMDIxJXAyJWMlcDElYywgY3V1MT1cRV5MLCBkbDE9XEVeUywKKwllZD1cRV5YLCBlbD1cRV5PLCBob21lPVxFXlIsIGlsMT1cRV5aLCBpbmQ9XkosIGticz1eSCwKKwlrY2xyPVxFXlwsIGtjdWIxPV5ILCBrY3VkMT1cRV5LLCBrY3VmMT1eUCwga2N1dTE9XEVeTCwKKwlrZGwxPVxFXlMsIGtlZD1cRV5YLCBrZWw9XEVeTywga2hvbWU9XEVeUiwga2lsMT1cRV5aLAorCXJtc289XEVeWSwgcnMxPVxFJFxFXDAwNVxFP1xFXDAzMSwgc2dyMD1cRV5ZLCBzbXNvPVxFXl8sCisjIFRoaXMgdmVyc2lvbiB3b3JrcyB3aXRoIHRoZSBlc2NhcGUgc3dpdGNoIG9mZgorIyAoaDE1MjA6IHJlbW92ZWQgaW5jb3JyZWN0IGFuZCBvdmVycmlkZGVuICI6ZG89Xko6IiAtLSBlc3IpCitoejE1MjAtbm9lc2N8aGF6ZWx0aW5lIDE1MjAsCisJYW0sIGh6LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9fl5cLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1+XkssIGN1ZjE9XlAsCisJY3VwPX5cMDIxJXAyJWMlcDElYyQ8MT4sIGN1dTE9fl5MLCBkbDE9fl5TLCBlZD1+XlgsIGVsPX5eTywKKwlob21lPX5eUiwgaWwxPX5eWiwgaW5kPV5KLCBybXNvPX5eWSwgc21zbz1+Xl8sCisjIE5vdGU6IHRoZSBoMTU1MiBhcHBlYXJzIHRvIGJlIHRoZSBmaXJzdCBIYXplbHRpbmUgdGVybWluYWwgd2hpY2gKKyMgaXMgbm90IGJyYWluZGFtYWdlZC4gIEl0IGhhcyB0aWxkZXMgYW5kIGJhY2twcmltZXMgYW5kIGV2ZXJ5dGhpbmchCisjIEJlIHN1cmUgdGhlIGF1dG8gbGYvY3Igc3dpdGNoIGlzIHNldCB0byBjci4KK2h6MTU1MnxoYXplbHRpbmUgMTU1MiwKKwlPVGJzLAorCWN1ZDE9XkosIGRsMT1cRU8sIGlsMT1cRUUsIGtmMT1cRVAsIGtmMj1cRVEsIGtmMz1cRVIsIGxmMT1ibHVlLAorCWxmMj1yZWQsIGxmMz1ncmVlbiwgdXNlPXZ0NTIsCitoejE1NTItcnZ8aGF6ZWx0aW5lIDE1NTIgcmV2ZXJzZSB2aWRlbywKKwljdWQxPV5KLCBybXNvPVxFVCwgc21zbz1cRVMsIHVzZT1oejE1NTIsCisjIE5vdGU6IGgyMDAwIHdvbid0IHdvcmsgd2VsbCBiZWNhdXNlIG9mIGEgY2xhc2ggYmV0d2VlbiB1cHBlciBjYXNlIGFuZCB+J3MuCitoejIwMDB8aGF6ZWx0aW5lIDIwMDAsCisJT1RicywgT1RuYywgYW0sCisJY29scyM3NCwgbGluZXMjMjcsCisJYmVsPV5HLCBjbGVhcj1+XDAzNCQ8Nj4sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VwPX5cMDIxJXAyJWMlcDElYywgZGwxPX5cMDIzJDw2PiwgaG9tZT1+XlIsCisJaWwxPX5cMDMyJDw2PiwgaW5kPV5KLCBwYWQ9XDE3NywKKyMgRGF0ZTogRnJpIEp1bCAyMyAxMDoyNzo1MyAxOTgyLiAgU29tZSB1bmtub3duIHBlcnNvbiB3cm90ZToKKyMgSSB0ZXN0ZWQgdGhpcyB0ZXJtY2FwIGVudHJ5IGZvciB0aGUgSGF6ZWx0aW5lIEVzcHJpdCB3aXRoIHZpLiBJdCBzZWVtcworIyB0byB3b3JrIG9rLiBUaGVyZSBpcyBvbmUgcHJvYmxlbSB0aG91Z2ggaWYgb25lIHR5cGVzIGEgbG90IG9mIGdhcmJhZ2UKKyMgY2hhcmFjdGVycyB2ZXJ5IGZhc3Qgdmkgc2VlbXMgbm90IGFibGUgdG8ga2VlcCB1cCBhbmQgaGFuZ3Mgd2hpbGUgdHJ5aW5nCisjIHRvIGluc2VydC4gVGhhdCdzIGluIGluc2VydCBtb2RlIHdoaWxlIHRyeWluZyB0byBpbnNlcnQgaW4gdGhlIG1pZGRsZSBvZgorIyBhIGxpbmUuIEl0IG1pZ2h0IGJlIGJlY2F1c2UgdGhlIEVzcHJpdCBkb2Vzbid0IGhhdmUgaW5zZXJ0IGNoYXIgYW5kIGRlbGV0ZQorIyBjaGFyIGFzIGEgYnVpbHQgaW4gZnVuY3Rpb24uIFZpIGhhcyB0byBkZWxldGUgdG8gZW5kIG9mIGxpbmUgYW5kIHRoZW4KKyMgcmVkcmF3IHRoZSByZXN0IG9mIHRoZSBsaW5lLgorZXNwcml0fEhhemVsdGluZSBFc3ByaXQgSSwKKwlPVGJzLCBhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9XEVeVCwgY2xlYXI9XEVeXCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVeSywKKwljdWYxPV5QLCBjdXA9XEVcMDIxJXAyJWMlcDElYywgY3V1MT1cRV5MLCBkbDE9XEVeUywKKwllZD1cRV5XLCBlbD1cRV5PLCBob21lPVxFXlIsIGlsMT1cRV5aLCBpbmQ9XkosIGlzMj1cRT8sIGticz1eSCwKKwlrY3ViMT1eSCwga2N1ZDE9XEVeSywga2N1ZjE9XlAsIGtjdXUxPVxFXkwsIGtmMD1eQjBeSiwKKwlrZjE9XkIxXkosIGtmMj1eQjJeSiwga2YzPV5CM15KLCBrZjQ9XkI0XkosIGtmNT1eQjVeSiwKKwlrZjY9XkI2XkosIGtmNz1eQjdeSiwga2Y4PV5COF5KLCBrZjk9XkI5XkosIGtob21lPVxFXlIsCisJbGYwPTAsIGxmMT0xLCBsZjI9MiwgbGYzPTMsIGxmND00LCBsZjU9NSwgbGY2PTYsIGxmNz03LCBsZjg9OCwgbGY5PTksCisJcm1reD1cRT4sIHJtc289XEVeWSwgc21reD1cRTwsIHNtc289XEVeXywKK2VzcHJpdC1hbXxoYXplbHRpbmUgZXNwcml0IGF1dG8tbWFyZ2luLAorCWFtLCB1c2U9ZXNwcml0LAorIyBIYXplbHRpbmUgTW9kdWxhci0xIGZyb20gQ2xpZmYgU2hhY2tlbHRvbiA8aXR0dmF4IWl0dHJhbCFzaGFja2VsdD4gdmlhIEJSTAorIyBWaSBpdCBzZWVtcyBhbHdheXMgd2FudHMgdG8gc2VuZCBhIGNvbnRyb2wgSiBmb3IgImRvIiBhbmQgaXQgdHVybmVkIG91dAorIyB0aGF0IHRoZSB0ZXJtaW5hbCB3b3VsZCB3b3JrIHNvbWV3aGF0IGlmIHRoZSBhdXRvIExGL0NSIHdhcyB0dXJuZWQgb2ZmLgorIyAoaG1vZDE6IHJlbW92ZWQgOmRuPX5eSzogLS0gZXNyKQoraG1vZDF8SGF6ZWx0aW5lIE1vZHVsYXIgMSwKKwlPVGJzLCBhbSwgaHosCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9fl5ULCBjbGVhcj1+XlwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPX5eSywgY3VmMT1eUCwKKwljdXA9flwwMjElcDIlYyVwMSVjLCBjdXUxPX5eTCwgZGwxPX5eUywgaG9tZT1+XlIsIGlsMT1+XlosCisJaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9fl5LLCBrY3VmMT1eUCwga2N1dTE9fl5MLCBraG9tZT1+XlIsCisJcmM9fl5RLCBybXNvPX5eWSwgc2M9fl5FLCBzZ3IwPX5eWSwgc21zbz1+Xl8sCisjCisjIEhhemVsdGluZSBFeGVjdXRpdmUgODAgTW9kZWwgMzAgKDE1NTQ/KQorIwlmcm9tICBXaWxsIE1hcnRpbiA8Y29udHJvbEBBTE1TQS0xLkFSUEE+IHZpYSBCUkwKKyMgTGlrZSBWVDEwMCwgZXhjZXB0IGZvciBkaWZmZXJlbnQgImFtIiBiZWhhdmlvci4KK2hhemVsfGV4ZWM4MHxoODB8aGU4MHxIYXplbHRpbmUgRXhlY3V0aXZlIDgwLAorCU9UYnMsIE9UcHQsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCU9Ubmw9XkosIGJlbD1eRywgYmxpbms9XEVbNW0kPDIvPiwgYm9sZD1cRVsxbSQ8Mi8+LAorCWNsZWFyPVxFWztIXEVbMkokPDUwLz4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDJDwyLz4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1Lz4sIGN1dTE9XEVbQSQ8Mi8+LAorCWVkPVxFW0okPDUwLz4sIGVsPVxFW0skPDMvPiwgaG9tZT1cRVtILCBodD1eSSwKKwlpczI9XEVbMTsyNHJcRVsyNDsxSCwga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsCisJa2Y0PVxFT1MsIHJjPVxFOCwgcmV2PVxFWzdtJDwyLz4sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIHJpPVxFTSQ8NS8+LAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20kPDIvPiwgcm11bD1cRVttJDwyLz4sCisJcnMxPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncjA9XEVbbSQ8Mi8+LCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSQ8Mi8+LAorCXNtdWw9XEVbNG0kPDIvPiwKKworIyMjIyBJQk0KKyMKKworaWJtMzI3eHxsaW5lIG1vZGUgSUJNIDMyNzAgc3R5bGUsCisJZ24sCisJY2xlYXI9Xk1eSiwgZWw9Xk0sIGhvbWU9Xk0sCisKK2libTMxMDF8aTMxMDF8SUJNIDMxMDEtMTAsCisJT1RicywgYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlZD1cRUosCisJZWw9XEVJLCBob21lPVxFSCwgaHRzPVxFMCwgaW5kPV5KLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwgbmVsPV5NXkosIHRiYz1cRUgsCitpYm0zMTUxfElCTSAzMTUxIGRpc3BsYXksCisJaXMyPVxFIFMsIHJtYWNzPVxFPkIsIHJtY3VwPVxFPkIsIHJzMj1cRSBTLCBzMGRzPVxFPkIsCisJc2dyPVxFNCV7NjR9JT8lcDEldCV7NjV9JXwlOyU/JXAyJXQlezY2fSV8JTslPyVwMyV0JXs2NX0lfCU7JT8lcDQldCV7Njh9JXwlOyU/JXA1JXQlezY0fSV8JTslPyVwNiV0JXs3Mn0lfCU7JT8lcDcldCV7ODB9JXwlOyVjJT8lcDkldFxFPkElZVxFPkIlOywKKwlzZ3IwPVxFNEBcRT5CLCBzbWFjcz1cRT5BLCBzbWN1cD1cRT5CLCB1c2U9aWJtMzE2MiwKKyMgRnJvbTogTWFyayBFYXN0ZXIgPG1hcmtlQGZzaS1zc2QuY3NnLnNzZC5mc2kuY29tPiAyOSBPY3QgMTk5MgorIyByZW1vdmVkIGtlbmQsIGtucCwga3BwIC1URAoraWJtMzE2MXxpYm0zMTYzfHd5NjAtMzE2WHx3eXNlNjAtMzE2WHxJQk0gMzE2MS8zMTYzIGRpc3BsYXksCisJT1RicywgYW0sIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWpcMzUya1wzNTNsXDM1NG1cMzU1blwzNTZxXDM2MXRcMzY0dVwzNjV2XDM2NndcMzY3eFwzNzAsCisJYmVsPV5HLCBibGluaz1cRTRELCBib2xkPVxFNEgsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XEVELAorCWN1ZDE9XEVCLCBjdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPVxFQSwgZGNoMT1cRVEsIGRsMT1cRU8sIGVkPVxFSiwgZWw9XEVJLCBob21lPVxFSCwgaW5kPV5KLAorCWludmlzPVxFNFAsIGticz1eSCwga2NidD1cRTIsIGtjbHI9XEVMXHIsIGtjdGFiPVxFMSwKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtkY2gxPVxFUSwKKwlrZGwxPVxFTywga2VkPVxFSiwga2VsPVxFSSwga2YxPVxFYVxyLCBrZjEwPVxFalxyLAorCWtmMTE9XEVrXHIsIGtmMTI9XEVsXHIsIGtmMTM9XEUhYVxyLCBrZjE0PVxFIWJcciwKKwlrZjE1PVxFIWNcciwga2YxNj1cRSFkXHIsIGtmMTc9XEUhZVxyLCBrZjE4PVxFIWZcciwKKwlrZjE5PVxFIWdcciwga2YyPVxFYlxyLCBrZjIwPVxFIWhcciwga2YyMT1cRSFpXHIsCisJa2YyMj1cRSFqXHIsIGtmMjM9XEUha1xyLCBrZjI0PVxFIWxcciwga2YzPVxFY1xyLAorCWtmND1cRWRcciwga2Y1PVxFZVxyLCBrZjY9XEVmXHIsIGtmNz1cRWdcciwga2Y4PVxFaFxyLAorCWtmOT1cRWlcciwga2hvbWU9XEVILCBraHRzPVxFMCwga2ljaDE9XEVQIFwwMTAsIGtpbDE9XEVOLAorCWt0YmM9XEUgMSwgbWM0PV5QXlQsIG1jNT1eUF5SLCByZXY9XEU0QSwgcm1jdXA9XEU+QSwKKwlybXNvPVxFNEAsIHJtdWw9XEU0QCwKKwlzZ3I9XEU0JXs2NH0lPyVwMSV0JXs2NX0lfCU7JT8lcDIldCV7NjZ9JXwlOyU/JXAzJXQlezY1fSV8JTslPyVwNCV0JXs2OH0lfCU7JT8lcDUldCV7NjR9JXwlOyU/JXA2JXQlezcyfSV8JTslPyVwNyV0JXs4MH0lfCU7JWMlPyVwOSV0XEU+QSVlXEU8QCU7LAorCXNncjA9XEU0QFxFPEAsIHNtY3VwPVxFPkEsIHNtc289XEU0QSwgc211bD1cRTRCLAorCitpYm0zMTYxLUN8SUJNIDMxNjEtQyBOTFMgdGVybWluYWwgdXNpbmcgY2FydHJpZGdlLAorCXJtY3VwPVxFPkIsIHMwZHM9XEU+QiwgczFkcz1cRT5BLCBzbWN1cD1cRT5CLCB1c2U9aWJtMzE2MSwKK2libTMxNjJ8SUJNIDMxNjIgZGlzcGxheSwKKwlibGluaz1cRTQkYSwgYm9sZD1cRTQoYSwgaWwxPVxFTiwgaW52aXM9XEU0MGEsIHJldj1cRTQhYSwKKwlybXNvPVxFND5iLCBybXVsPVxFND1iLCBzZ3IwPVxFNEAsIHNtc289XEU0IWEsIHNtdWw9XEU0ImEsCisJdXNlPWlibTMxNjEtQywKKworIyBUaGlzIHJlYWxseSBzaG91bGQgbm90IHVzZSBzZXRhYi9zZXRhZiwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgdGhlCisjIG9yaWdpbmFsIHRlcm1pbmZvIGRvZXMgbm90IHRvZ2dsZSByZWQvYmx1ZSBjb2xvcnMgYXMgaW4gc2V0Yi9zZXRmLgoraWJtMzE2NHxpMzE2NHxJQk0gMzE2NCwKKwltc2dyLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlvcD1cRTQgIkAsIHJtY3VwPVxFITkoTlxFPkIsIHMwZHM9XEU+QiwgczFkcz1cRT5BLAorCXNldGFiPVxFNCAgJXAxJXs2NH0lKyVjLAorCXNldGFmPVxFNCU/JXAxJXQgJXAxJXszMn0lKyVjJWUhJyU7QCwKKwlzbWN1cD1cRSE5L05cRT5CLCB1c2U9aWJtMzE2MSwKKworaWJtNTE1MXx3eTYwLUFUfHd5c2U2MC1BVHxJQk0gNTE1MSBNb25vY2hyb21lIGRpc3BsYXksCisJYW0sIGJ3LCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYWNzYz1qXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1cVwzMDR0XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzLAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwKKwlocGE9XEVbJWklcDElZEcsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs4bSwgaXMyPVxFYywga2JzPV5ILCBrY2J0PVxFW1osCisJa2Nscj1cRVsxNDRxLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsIGtlZD1cRVsxNDhxLCBrZWw9XEVbMTQycSwKKwlrZW5kPVxFWzE0NnEsIGtmMT1cRVswMDFxLCBrZjEwPVxFWzAxMHEsIGtmMTE9XEVbMDExcSwKKwlrZjEyPVxFWzAxMnEsIGtmMTM9XEVbMDEzcSwga2YxND1cRVswMTRxLCBrZjE1PVxFWzAxNXEsCisJa2YxNj1cRVswMTZxLCBrZjE3PVxFWzAxN3EsIGtmMTg9XEVbMDE4cSwga2YxOT1cRVswMTlxLAorCWtmMj1cRVswMDJxLCBrZjIwPVxFWzAyMHEsIGtmMjE9XEVbMDIxcSwga2YyMj1cRVswMjJxLAorCWtmMjM9XEVbMDIzcSwga2YyND1cRVswMjRxLCBrZjI1PVxFWzAyNXEsIGtmMjY9XEVbMDI2cSwKKwlrZjI3PVxFWzAyN3EsIGtmMjg9XEVbMDI4cSwga2YyOT1cRVswMjlxLCBrZjM9XEVbMDAzcSwKKwlrZjMwPVxFWzAzMHEsIGtmMzE9XEVbMDMxcSwga2YzMj1cRVswMzJxLCBrZjMzPVxFWzAzM3EsCisJa2YzND1cRVswMzRxLCBrZjM1PVxFWzAzNXEsIGtmMzY9XEVbMDM2cSwga2Y0PVxFWzAwNHEsCisJa2Y1PVxFWzAwNXEsIGtmNj1cRVswMDZxLCBrZjc9XEVbMDA3cSwga2Y4PVxFWzAwOHEsCisJa2Y5PVxFWzAwOXEsIGtob21lPVxFW0gsIGtpY2gxPVxFWzEzOXEsIGtpbDE9XEVbMTQwcSwKKwlraW5kPVxFWzE1MXEsIGtucD1cRVsxNTRxLCBrcHA9XEVbMTUwcSwga3JpPVxFWzE1NXEsCisJa3JtaXI9XEVbNGwsIHJldj1cRVs3bSwgcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwgcm1pcj1cRVs0bCwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgcnMyPVxFYywKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7bSwKKwlzZ3IwPVxFWzBtLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCitpYm1hZWR8SUJNIEV4cGVyaW1lbnRhbCBkaXNwbGF5LAorCU9UYnMsIGFtLCBlbywgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyM1MiwKKwljbGVhcj1cRUhcRUssIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRVEsCisJZGwxPVxFTywgZWQ9XEVKLCBlbD1cRUksIGZsYXNoPVxFRywgaG9tZT1cRUgsIGh0PV5JLCBpY2gxPVxFUCwKKwlpbDE9XEVOLCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlybXNvPVxFMCwgc2dyMD1cRTAsIHNtc289XEUwLAoraWJtLWFwbHxhcGx8SUJNIGFwbCB0ZXJtaW5hbCBzaW11bGF0b3IsCisJbGluZXMjMjUsIHVzZT1kbTE1MjAsCisjIChpYm1tb25vOiB0aGlzIGhhZCBhbiB1bmtub3duIGBzYicgYm9vbGVhbiwgSSBjaGFuZ2VkIGl0IHRvIGBicycuCisjIEFsc28gaXQgaGFkICI6STA9ZjEwOiIgd2hpY2ggcHJldHR5IG9idmlvdXNseSBzaG91bGQgYmUgImwwPWYxMCIgLS0gZXNyKQoraWJtbW9ub3xJQk0gd29ya3N0YXRpb24gbW9ub2Nocm9tZSwKKwllc2xvaywgaHMsCisJYm9sZD1cRVosIGRsMT1cRU0sIGRzbD1cRWpcRVk4IFxFSVxFaywgZnNsPVxFaywgaWwxPVxFTCwKKwlpbnZpcz1cRUZcRWYwO1xFYjA7LCBrYnM9XkgsIGtmMD1cRTwsIGtmMT1cRVMsIGtmMj1cRVQsCisJa2YzPVxFVSwga2Y0PVxFViwga2Y1PVxFVywga2Y2PVxFUCwga2Y3PVxFUSwga2Y4PVxFUiwga2Y5PVxFWSwKKwlraG9tZT1cRUgsIGtpY2gxPVwwLCBraW5kPVxFRSwga25wPVxFRSwga3BwPVxFZywga3JpPVxFRywKKwlsZjA9ZjEwLCByZXY9XEVwLCByaT1cRUEsIHJtc289XEV6LCBybXVsPVxFdywKKwlzZ3IwPVxFd1xFcVxFelxFQiwgc21zbz1cRVosIHNtdWw9XEVXLCB0c2w9XEVqXEVZOCUrIFxFbywKKwl1c2U9aWJtMzEwMSwKK2libWVnYXxJQk0gRW5oYW5jZWQgQ29sb3IgRGlzcGxheSwKKwljcj1eTSwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosCisJbmVsPV5NXkosIHVzZT1pYm1tb25vLAorIyBUaGlzIGNvbG9yIHNjaGVtZSBpcyBhc3N1bWVkIGluIHNvbWUgcmVjZW50IElCTSB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMKKyMgKGdyZWVuIG9uIGJsYWNrLCBlbXVsYXRlZCBvbiBhIDE2LWNvbG9yIHRlcm1pbmFsKS4KK2libStjb2xvcnxJQk0gY29sb3IgZGVmaW5pdGlvbnMsCisJY29sb3JzIzgsIG5jdiMzLCBwYWlycyM2NCwKKwlvcD1cRVszMm1cRVs0MG0sCisJc2V0Yj1cRVslPyVwMSV7MH0lPSV0NDBtJWUlcDElezF9JT0ldDQxbSVlJXAxJXsyfSU9JXQ0Mm0lZSVwMSV7M30lPSV0NDNtJWUlcDElezR9JT0ldDQ0bSVlJXAxJXs1fSU9JXQ0NW0lZSVwMSV7Nn0lPSV0NDZtJWUlcDElezd9JT0ldDEwN20lOywKKwlzZXRmPVxFWyU/JXAxJXswfSU9JXQzMG0lZSVwMSV7MX0lPSV0MzFtJWUlcDElezJ9JT0ldDMybSVlJXAxJXszfSU9JXQzM20lZSVwMSV7NH0lPSV0MzRtJWUlcDElezV9JT0ldDM1bSVlJXAxJXs2fSU9JXQzNm0lZSVwMSV7N30lPSV0OTdtJTssCitpYm0rMTZjb2xvcnxJQk0gYWl4dGVybSBjb2xvciBkZWZpbml0aW9ucywKKwljb2xvcnMjMTYsIHBhaXJzIzI1NiwKKwlzZXRhYj1cRVslPyVwMSV7OH0lPCV0JXAxJXs0MH0lKyVlJXAxJXs5Mn0lKyU7JWRtLAorCXNldGFmPVxFWyU/JXAxJXs4fSU8JXQlcDElezMwfSUrJWUlcDElezgyfSUrJTslZG0sCisJc2V0Yj0lcDElezh9JS8lezZ9JSolezR9JStcRVslZCVwMSV7OH0lbSVQYSU/JWdhJXsxfSU9JXQ0JWUlZ2ElezN9JT0ldDYlZSVnYSV7NH0lPSV0MSVlJWdhJXs2fSU9JXQzJWUlZ2ElZCU7bSwKKwlzZXRmPSVwMSV7OH0lLyV7Nn0lKiV7M30lK1xFWyVkJXAxJXs4fSVtJVBhJT8lZ2ElezF9JT0ldDQlZSVnYSV7M30lPSV0NiVlJWdhJXs0fSU9JXQxJWUlZ2ElezZ9JT0ldDMlZSVnYSVkJTttLAoraWJtNTE1NHxJQk0gNTE1NCBDb2xvciBkaXNwbGF5LAorCWNvbG9ycyM4LCBuY3ZALCBwYWlycyM2NCwKKwlib2xkQCwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwgdXNlPWlibTUxNTEsCisJdXNlPWlibStjb2xvciwKK2libWVnYS1jfGlibTUxNTQtY3xJQk0gRW5oYW5jZWQgQ29sb3IgRGlzcGxheSB3aXRoIHN0YW5kb3V0IGFuZCB1bmRlcmxpbmUsCisJcm1zbz1cRUIsIHJtdWw9XEVCLCBzbXNvPVxFRlxFZjM7LCBzbXVsPVxFRlxFZjI7LAorCXVzZT1pYm1tb25vLAoraWJtdmdhLWN8SUJNIFZHQSBkaXNwbGF5IGNvbG9yIHRlcm1jYXAsCisJY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCW5lbD1eTV5KLCB1c2U9aWJtZWdhLWMsCitpYm12Z2F8SUJNIFZHQSBkaXNwbGF5LAorCWNyPV5NLCBjdWQxPV5KLCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwluZWw9Xk1eSiwgdXNlPWlibWVnYSwKKyMgaWJtYXBhKiBhbmQgaWJtbW9ubyBlbnRyaWVzIGNvbWUgZnJvbSBBQ0lTIDQuMyBkaXN0cmlidXRpb24KK3J0cGN8aWJtYXBhMTZ8SUJNIDYxNTUgRXh0ZW5kZWQgTW9ub2Nocm9tZSBHcmFwaGljcyBEaXNwbGF5LAorCWxpbmVzIzMyLAorCWRzbD1cRWpcRVlAIFxFSVxFaywgdHNsPVxFalxFWUAlKyBcRW8sIHVzZT1pYm1tb25vLAoraWJtNjE1NXxJQk0gNjE1NSBCbGFjayAmIFdoaXRlIGRpc3BsYXksCisJYmxpbmtALCBib2xkQCwgdXNlPWlibTUxNTEsCisjIEFkdmFuY2VkIE1vbm9jaHJvbWUgKDYxNTMpIGFuZCBDb2xvciAoNjE1NCkgR3JhcGhpY3MgRGlzcGxheToKK2libWFwYThjfGlibWFwYTh8SUJNIDYxNTQgQWR2YW5jZWQgR3JhcGhpY3MgRGlzcGxheSwKKwlsaW5lcyMzMSwKKwlkc2w9XEVqXEVZPyBcRUlcRWssIHRzbD1cRWpcRVk/JSsgXEVvLCB1c2U9aWJtbW9ubywKK2libWFwYThjLWN8aWJtNjE1NC1jfElCTSA2MTU0IEFkdmFuY2VkIENvbG9yIEdyYXBoaWNzIERpc3BsYXksCisJbGluZXMjMzEsCisJZGltPVxFRlxFZjc7LCBkc2w9XEVqXEVZPyBcRUlcRWssIHRzbD1cRWpcRVk/JSsgXEVvLAorCXVzZT1pYm1lZ2EtYywKK2libTYxNTR8SUJNIDYxNTQgQ29sb3IgZGlzcGxheXMsCisJYmxpbmtALCBib2xkPVxFWzEybSwgczBkcz1cRVsxMG0sIHMxZHM9XEVbMTFtLCBzMmRzPVxFWzEybSwKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzEyJTttLAorCXNncjA9XEVbMDsxMG0sIHVzZT1pYm01MTU0LAoraWJtNjE1M3xJQk0gNjE1MyBCbGFjayAmIFdoaXRlIGRpc3BsYXksCisJYmxpbmtALCBib2xkPVxFWzEybSwgczBkcz1cRVsxMG0sIHMxZHM9XEVbMTFtLCBzMmRzPVxFWzEybSwKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzEyJTttLAorCXNncjA9XEVbMDsxMG0sIHVzZT1pYm01MTUxLAoraWJtNjE1My05MHxJQk0gNjE1MyBCbGFjayAmIFdoaXRlIGRpc3BsYXksCisJY29scyM5MCwgbGluZXMjMzYsCisJYmxpbmtALCBib2xkQCwgdXNlPWlibTUxNTEsCitpYm02MTUzLTQwfElCTSA2MTUzIEJsYWNrICYgV2hpdGUgZGlzcGxheSwKKwljb2xzIzQwLCBsaW5lcyMxMiwgdXNlPWlibTYxNTMtOTAsCitpYm04NTEyfGlibTg1MTN8SUJNIGNvbG9yIFZHQSBUZXJtaW5hbCwKKwlhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWFjc2M9ampra2xsbW1ubnFxdHR1dXZ2d3d4eCwgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sCisJY2xlYXI9XEVbSFxFW0osIGN1YjE9XEVbRCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpczI9XEViXEVbbVwwMTdcRVs/N2gsIGtjdWQxPVxFW0IsIGtjdXUxPVxFW0EsCisJa2YwPVxFWzAxMHEsIGtmMT1cRVswMDFxLCBrZjI9XEVbMDAycSwga2YzPVxFWzAwM3EsCisJa2Y0PVxFWzAwNHEsIGtmNT1cRVswMDVxLCBrZjY9XEVbMDA2cSwga2Y3PVxFWzAwN3EsCisJa2Y4PVxFWzAwOHEsIGtmOT1cRVswMDlxLCBraG9tZT1cRVtILCByYz1cRVt1LCByZXY9XEVbN20sCisJcm1hY3M9Xk8sIHJtYW09XEVbPzdsLCBybWN1cD1cRVsyMGgsIHJtZGM9XEVbNGwsCisJcm1pcj1cRVs0bCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFYlxFW21cMDE3XEVbPzdoXEVbSFxFW0osIHNjPVxFW3MsIHNncjA9XEVbbSwKKwlzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtY3VwPVxFWzIwOzRsXEVbPzdoXEViLAorCXNtZGM9XEVbNGgsIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdXNlPWlibTg1MDMsCitoZnQtY3xIRlQgd2l0aCBDb2xvciwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJYWNzYz1qamtrbGxtbW5ucXF0dHV1dnZ3d3h4LCBzMGRzPVxFKEIsIHMxZHM9XEUoMCwKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCBzZ3IwPVxFWzBtXEUoQiwKKwl1c2U9aWJtNTE1MSwgdXNlPWlibStjb2xvciwKK2hmdC1jLW9sZHxIRlQgd2l0aCBDb2xvciBQQzg1MCwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwgdXNlPWlibTUxNTEsCisJdXNlPWlibStjb2xvciwKK2hmdC1vbGR8QUlXUyBIaWdoIEZ1bmN0aW9uIFRlcm1pbmFsLAorCWFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjUsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILAorCWh0PV5JLCBpY2gxPVxFW0AsIGlsMT1cRVtMLCBpbmQ9XkosIGludmlzPVxFWzhtLCBrYnM9XkgsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVbMDAxcSwga2YyPVxFWzAwMnEsIGtmMz1cRVswMDNxLCBrZjQ9XEVbMDA0cSwKKwlrZjU9XEVbMDA1cSwga2Y2PVxFWzAwNnEsIGtmNz1cRVswMDdxLCBrZjg9XEVbMDA4cSwKKwlrZjk9XEVbMDA5cSwga2hvbWU9XEVbSCwga25wPVxFWzE1M3EsIGtwcD1cRVsxNTlxLAorCWt0YmM9XEVbMDEwcSwgcmV2PVxFWzdtLCBybWlyPVxFNiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWlyPVxFNiwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdXNlPWlibStjb2xvciwKK2libS1zeXN0ZW0xfHN5c3RlbTF8aWJtIHN5c3RlbS8xIGNvbXB1dGVyLAorCWFtLCB4dCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5aLCBjdWIxPV5ILCBjdWYxPV5cLAorCWN1cD1cMDA1JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5eLCBob21lPV5LLAorCWluZD1eSiwKKyMgICAgICAgbGZ0LXBjODUwIDogSUJNIExvdyBGdW5jdGlvbiBUZXJtaW5hbCBEZXZpY2UKKyMgICAgbGZ0ICJzdXBwb3J0cyIgdW5kZXJsaW5lLCBib2xkLCBhbmQgYmxpbmsgaW4gdGhlIHNlbnNlIHRoYXQgdGhlIGxmdCBjb2RlCisjICAgIHNldHMgYWxsIHRoZSByaWdodCBiaXRzLiAgSE9XRVZFUiwgZGVwZW5kaW5nIHVwb24gdGhlIGFkYXB0ZXIsIHRoZXNlCisjICAgIGF0dHJpYnV0ZXMgbWF5IG9yIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLgorbGZ0fGxmdC1wYzg1MHxMRlQtUEM4NTB8SUJNIExGVCBQQzg1MCBEZXZpY2UsCisJYW0sIGJ3LCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYWNzYz1qXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1cVwzMDR0XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzLAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbSiwKKwljcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVsySiwgZWw9XEVbMEssCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPVxFRCwgaW5kbj1cRVslcDElZFMsIGludmlzPVxFWzhtLCBpczI9XEVjLAorCWticz1eSCwga2NidD1cRVtaLCBrY2xyPVxFWzE0NHEsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2VkPVxFWzE0OHEsCisJa2VsPVxFWzE0MnEsIGtlbmQ9XEVbMTQ2cSwga2YxPVxFWzAwMXEsIGtmMTA9XEVbMDEwcSwKKwlrZjExPVxFWzAxMXEsIGtmMTI9XEVbMDEycSwga2YxMz1cRVswMTNxLCBrZjE0PVxFWzAxNHEsCisJa2YxNT1cRVswMTVxLCBrZjE2PVxFWzAxNnEsIGtmMTc9XEVbMDE3cSwga2YxOD1cRVswMThxLAorCWtmMTk9XEVbMDE5cSwga2YyPVxFWzAwMnEsIGtmMjA9XEVbMDIwcSwga2YyMT1cRVswMjFxLAorCWtmMjI9XEVbMDIycSwga2YyMz1cRVswMjNxLCBrZjI0PVxFWzAyNHEsIGtmMjU9XEVbMDI1cSwKKwlrZjI2PVxFWzAyNnEsIGtmMjc9XEVbMDI3cSwga2YyOD1cRVswMjhxLCBrZjI5PVxFWzAyOXEsCisJa2YzPVxFWzAwM3EsIGtmMzA9XEVbMDMwcSwga2YzMT1cRVswMzFxLCBrZjMyPVxFWzAzMnEsCisJa2YzMz1cRVswMzNxLCBrZjM0PVxFWzAzNHEsIGtmMzU9XEVbMDM1cSwga2YzNj1cRVswMzZxLAorCWtmND1cRVswMDRxLCBrZjU9XEVbMDA1cSwga2Y2PVxFWzAwNnEsIGtmNz1cRVswMDdxLAorCWtmOD1cRVswMDhxLCBrZjk9XEVbMDA5cSwga2hvbWU9XEVbSCwga2ljaDE9XEVbMTM5cSwKKwlraWwxPVxFWzE0MHEsIGtpbmQ9XEVbMTUxcSwga25wPVxFWzE1NHEsIGtwcD1cRVsxNTBxLAorCWtyaT1cRVsxNTVxLCBrcm1pcj1cRVs0bCwgcmV2PVxFWzdtLCByaT1cRUwsIHJpbj1cRVslcDElZFQsCisJcm1hY3M9XEUoQiwgcm1pcj1cRVs0bCwgcm1zbz1cRVswbSwgcm11bD1cRVswbSwgcnMyPVxFYywKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7bSU/JXA5JXRcRSgwJWVcRShCJTssCisJc2dyMD1cRVswbSwgc21hY3M9XEUoMCwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csCitpYm01MDgxfGhmdHxJQk0gTWVnYXBlbCBDb2xvciBkaXNwbGF5LAorCWFjc2M9ampra2xsbW1ubnFxdHR1dXZ2d3d4eCwgYmxpbmtALCBib2xkQCwgczBkcz1cRShCLAorCXMxZHM9XEUoMCwgc2dyMD1cRVswbVxFKEIsIHVzZT1pYm01MTU0LAoraWJtNTA4MS1jfGlibW1wZWwtY3xJQk0gNTA4MSAxMDI0eDEwMjQgMjU2LzQwOTYgTWVnYXBlbCBlbmhhbmNlZCBjb2xvciBkaXNwbGF5LAorCWVzbG9rLCBocywKKwlsaW5lcyMzMywKKwlkc2w9XEVqXEVZQSBcRUlcRWssIGZzbD1cRWssIHRzbD1cRWpcRVlBJSsgXEVvLAorCXVzZT1pYm1lZ2EtYywKK2libTg1MDN8aWJtODUwN3xpYm04NjA0fElCTSA4NTAzIEIgJiBXIFZHQSBkaXNwbGF5LAorCXVzZT1oZnQtYywKK2libTg1MTR8SUJNIDg1MTQvYSBjb2xvciBWR0EgZGlzcGxheSwKKwllc2xvaywgaHMsCisJZHNsPVxFalxFWUkgXEVJXEVrLCBmc2w9XEVrLCB0c2w9XEVqXEVZSSUrIFxFbywgdXNlPWhmdCwKK2libTg1MTQtY3xJQk0gODUxNCBjb2xvciBkaXNwbGF5IHdpdGggc3RhbmRvdXQgYW5kIHVuZGVybGluZSwKKwllc2xvaywgaHMsCisJbGluZXMjNDEsCisJY3I9Xk0sIGN1ZDE9XkosIGRzbD1cRWpcRVlJIFxFSVxFaywgZnNsPVxFaywgaHQ9XkksIGluZD1eSiwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosIHRzbD1cRWpcRVlJJSsgXEVvLAorCXVzZT1pYm1lZ2EtYywKKworIworIyBBSVggZW50cmllcy4gIElCTSBzaGlwcyB0aGVzZSB3aXRoIEFJWCAzLjIuNS4KKyMgLS0gYWRkZWQgcmMsIHNjIGJhc2VkIG9uIG1hbnBhZ2UgLVRECisjIE5vdGUgdGhhdCB3ZSBjb3VsZCB1c2UgaWJtKzE2Y29sb3IsIGJ1dCB0aGF0IGlzIG5vdCBob3cgSUJNIGRlZmluZXMgdGhpcyBvbmUuCithaXh0ZXJtfElCTSBBaXh0ZXJtIFRlcm1pbmFsIEVtdWxhdG9yLAorCWVzbG9rLCBocywKKwlhY3NjPWpqa2tsbG1tbm5xcXR0dXV2dnd3eHgsIGJvbGQ9XEVbMW0sIGRzbD1cRVs/RSwKKwlmc2w9XEVbP0YsIHJjPVxFOCwgcmlALCBzMGRzPVxFKEIsIHMxZHM9XEUoMCwgc2M9XEU3LAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTttJT8lcDkldFxFKDAlZVxFKEIlOywKKwlzZ3IwPVxFWzA7MTBtXEUoQiwgdHNsPVxFWz8lcDElZFQsIHVzZT1pYm02MTU0LAorYWl4dGVybS1tfElCTSBBSVh0ZXJtIE1vbm9jaHJvbWUgVGVybWluYWwgRW11bGF0b3IsCisJZXNsb2ssIGhzLAorCWFjc2M9ampra2xsbW1ubnFxdHR1dXZ2d3d4eCwgYm9sZD1cRVsxbSwgZHNsPVxFWz9FLAorCWZzbD1cRVs/RiwgcmlALCBzMGRzPVxFKEIsIHMxZHM9XEUoMCwKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20sCisJc2dyMD1cRVswOzEwbVxFKEIsIHRzbD1cRVs/JXAxJWRULCB1c2U9aWJtNjE1MywKK2FpeHRlcm0tbS1vbGR8b2xkIElCTSBBSVh0ZXJtIE1vbm9jaHJvbWUgVGVybWluYWwgRW11bGF0b3IsCisJZXNsb2ssIGhzLAorCWJvbGQ9XEVbMW0sIGRzbD1cRVs/RSwgZnNsPVxFWz9GLCByaUAsCisJc2dyPVxFWyU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTttLAorCXRzbD1cRVs/JXAxJWRULCB1c2U9aWJtNjE1MywKK2phaXh0ZXJtfElCTSBLYW5qaSBBaXh0ZXJtIFRlcm1pbmFsIEVlbXVsYXRvciwKKwlhY3NjQCwgdXNlPWFpeHRlcm0sCitqYWl4dGVybS1tfElCTSBLYW5qaSBBSVh0ZXJtIE1vbm9jaHJvbWUgVGVybWluYWwgRW11bGF0b3IsCisJYWNzY0AsIHVzZT1haXh0ZXJtLW0sCisKKyMgVGhpcyBmbGF2b3IgaXMgYWRhcHRlZCBmcm9tIHh0ZXJtLCBpbiB0dXJuIGZyb20gYWl4dGVybSBkb2N1bWVudGF0aW9uIC1URAorYWl4dGVybS0xNmNvbG9yfElCTSBBaXh0ZXJtIFRlcm1pbmFsIEVtdWxhdG9yIHdpdGggMTYgY29sb3JzLAorCXVzZT1pYm0rMTZjb2xvciwgdXNlPWFpeHRlcm0sCisKKyMjIyMgSW5mb3Rvbi9HZW5lcmFsIFRlcm1pbmFsIENvcnAuCisjCisKKyMgZ3QxMDAgc291bmRzIGxpa2Ugc29tZXRoaW5nIERFQyB3b3VsZCBjb21lIG91dCB3aXRoLiAgTGV0J3MgaG9wZSB0aGV5IGRvbid0LgoraTEwMHxndDEwMHxndDEwMGF8R2VuZXJhbCBUZXJtaW5hbCAxMDBBIChmb3JtZXJseSBJbmZvdG9uIDEwMCksCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRWYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XEVBLCBkbDE9XEVNLAorCWVkPVxFSiwgZWw9XEVLLCBmbGFzaD1cRWIkPDIwMC8+XEVhLCBob21lPVxFSCwgaWwxPVxFTCwKKwlpbmQ9XkosIHJtc289XEVhLCBzbXNvPVxFYiwKK2k0MDB8aW5mb3RvbiA0MDAsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjUsCisJYmVsPV5HLCBjbGVhcj1cRVsySiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElM2Q7JXAyJTNkSCwgY3V1MT1cRVtBLAorCWRjaDE9XEVbNGhcRVsyUVxFW1BcRVs0bFxFWzBRLCBkbDE9XEVbTSwgZWw9XEVbTiwKKwlpbDE9XEVbTCwgaW5kPV5KLCBybWlyPVxFWzRsXEVbMFEsIHNtaXI9XEVbNGhcRVsyUSwKKyMgKGFkZHJpbmZvOiByZW1vdmVkIG9ic29sZXRlICI6YmM9Xlo6IiAtLSBlc3IpCithZGRyaW5mbywKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eWiwgY3VkMT1eSiwgY3VmMT1eWSwKKwljdXA9XDAzNyVwMSVjJXAyJWMsIGN1dTE9XlwsIGVkPV5LLCBob21lPV5ILCBpbmQ9XkosIGxsPV5IXlwsCisjIChpbmZvdG9uOiB1c2VkIHRvIGhhdmUgdGhlIG5vLW9wcyA8bGgjMD4sIDxsdyMwPiwgPG5sYWIjMD4gLS0gZXNyKQoraW5mb3RvbiwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eWiwgY3VkMT1eSiwgY3VmMT1eWSwgY3V1MT1eXCwKKwllZD1eSywgaW5kPV5KLCBsbD1eSF5cLAorCisjIFRoZSBJQ0w2NDAyIHdhcyBhY3R1YWxseSB0aGUgS29rdXNhaSBEaXNwbGF5IFN5c3RlbSA2NDAyLgorIyBUaGUgNjQwNCB3YXMgdGhlIEtEUzczNzIgKGNvbG9yIHZlcnNpb24gb2YgdGhlIDY0MDIpLgorIworIyBJQ0w2NDA0IGNvbnRyb2wgY29kZXMgZm9sbG93OgorIworI2NvZGUgICAgICAgICAgICBmdW5jdGlvbgorI35+fn5+fn5+fn5+ICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjY3RybC1BICAgICAgICAgIHNldCBTT00gcG9zaXRpb24gYXQgY3Vyc29yIHBvc2l0aW9uCisjY3RybC1HICAgICAgICAgIEJlbGwKKyNjdHJsLUggICAgICAgICAgQmFja3NwYWNlCisjY3RybC1JICAgICAgICAgIEhvcml6IHRhYgorI2N0cmwtSiAgICAgICAgICBMaW5lZmVlZAorI2N0cmwtSyAgICAgICAgICBDdXJzb3IgdXAKKyNjdHJsLUwgICAgICAgICAgQ3Vyc29yIHJpZ2h0CisjY3RybC1NICAgICAgICAgIENhcnJpYWdlIHJldHVybgorI2N0cmwtTiAgICAgICAgICBEaXNhYmxlIHhvbi94b2ZmIHRvIGhvc3QKKyNjdHJsLU8gICAgICAgICAgRW5hYmxlIHhvbi94b2ZmIHRvIGhvc3QKKyNjdHJsLVIgICAgICAgICAgRW5hYmxlIGJpZGlyZWN0aW9uYWwgbW9kZQorI2N0cmwtVCAgICAgICAgICBEaXNhYmxlIGJpZGlyZWN0aW9uYWwgbW9kZQorI2N0cmwtViAgICAgICAgICBDdXJzb3IgZG93bgorI2N0cmwtWiAgICAgICAgICBDbGVhciB1bnByb3RlY3RlZCBkYXRhIHRvIGluc2VydCBjaGFyCisjY3RybC1eICAgICAgICAgIEN1cnNvciBob21lCisjY3RybC1fICAgICAgICAgIE5ld2xpbmUKKyMKKyNFU0MgICAgICAgICAgICAgbGVhZC1pbiBjaGFyIGZvciBtdWx0aXBsZSBjaGFyYWN0ZXIgY29tbWFuZAorIworI0VTQyBzcGFjZSBSICAgICBleGVjdXRlIHBvd2VyIG9uIHNlcXVlbmNlCisjRVNDICEgcDEgcDIgICAgIGRlZmluZSBzY3JvbGwgcmVnaW9uOgorIyAgICAgICAgICAgICAgICBwMSA9IHNjcm9sbCB0b3AgICAgbGluZTogIDIwaCAtIDM3aAorIyAgICAgICAgICAgICAgICBwMSA9IHNjcm9sbCBib3R0b20gbGluZTogIDIwaCAtIDM3aAorI0VTQyAiICAgICAgICAgICB1bmxvY2sga2V5Ym9hcmQKKyNFU0MgIyAgICAgICAgICAgbG9jayBrZXlib2FyZAorI0VTQyAkICAgICAgICAgICBTZW1pLWdyYXBoaWNzIG1vZGUgb24KKyNFU0MgJSAgICAgICAgICAgU2VtaS1ncmFwaGljcyBtb2RlIG9mZgorI0VTQyAmICAgICAgICAgICBwcm90ZWN0IG1vZGUgb24KKyNFU0MgJyAgICAgICAgICAgcHJvdGVjdCBtb2RlIG9mZgorI0VTQyAoICAgICAgICAgICB3cml0ZSBwcm90ZWN0IG1vZGUgb2ZmIChmdWxsIGludGVuc2l0eSkKKyNFU0MgKSAgICAgICAgICAgd3JpdGUgcHJvdGVjdCBtb2RlIG9uIChoYWxmIGludGVuc2l0eSkKKyMKKyNFU0MgKiAgICAgICAgICAgY2xlYXIgc2NyZWVuCisjRVNDICsgICAgICAgICAgIGNsZWFyIHVucHJvdGVjdGVkIGRhdGEgdG8gaW5zZXJ0IGNoYXIKKyNFU0MgLCAgICAgICAgICAgY2xlYXIgdW5wcm90ZWN0ZWQgZGF0YSB0byBoYWxmIGludGVuc2l0eSBzcGFjZXMKKyNFU0MgLSBwMSBwMiBwMyBwNCAgICAgYWRkcmVzcyBjdXJzb3IgdG8gcGFnZSwgcm93LCBjb2x1bW46CisjICAgICAgICAgICAgICAgICAgICAgIHAxID0gcGFnZSBudW1iZXIgIDAgLSAzCisjICAgICAgICAgICAgICAgICAgICAgIHAyID0gcm93ICAgICAgICAgIDIwaCAtIDdmaAorIyAgICAgICAgICAgICAgICAgICAgICBwMyA9IGNvbHVtbiAobG8pICAyMGggLSA3ZmgKKyMgICAgICAgICAgICAgICAgICAgICAgcDQgPSBjb2x1bW4gKGhpKSAgMjBoIC0gMjFoIChvbmx5IDEzMiBjb2wpCisjRVNDIC4gcDEgICAgICAgIHNldCBjdXJzb3Igc3R5bGU6CisjICAgICAgICAgICAgICAgIHAxID0gMCAgaW52aXNpYmxlIGN1cnNvcgorIyAgICAgICAgICAgICAgICBwMSA9IDEgIGJsb2NrIGJsaW5raW5nIGN1cnNvcgorIyAgICAgICAgICAgICAgICBwMSA9IDIgIGJsb2NrIHN0ZWFkeSBjdXJzb3IKKyMgICAgICAgICAgICAgICAgcDEgPSAzICB1bmRlcmxpbmUgYmxpbmtpbmcgY3Vyc29yCisjICAgICAgICAgICAgICAgIHAxID0gNCAgdW5kZXJsaW5lIHN0ZWFkeSBjdXJzb3IKKyNFU0MgLyAgICAgICAgICAgdHJhbnNtaXQgY3Vyc29yIGxvY2F0aW9uIChwYWdlLCByb3csIGNvbHVtbikKKyNFU0MgMCBwMSBwMiBwMyBwNCAgICAgcHJvZ3JhbSBlZGl0IGtleToKKyMgICAgICAgICAgICAgICAgICAgICAgcDEgPSBlZGl0IGtleSBjb2RlOiAnQCctJ1MnLCAnYCctJ3MnCisjICAgICAgICAgICAgICAgICAgICAgIHAyIHAzIHA0ID0gcHJvZ3JhbSBkYXRhICgzIGJ5dGVzKQorIworI0VTQyAxICAgICAgICAgICBzZXQgdGFiCisjRVNDIDIgICAgICAgICAgIGNsZWFyIHRhYiBhdCBjdXJzb3IKKyNFU0MgMyAgICAgICAgICAgY2xlYXIgYWxsIHRhYnMKKyNFU0MgNCAgICAgICAgICAgc2VuZCB1bnByb3RlY3QgbGluZSB0byBjdXJzb3IKKyNFU0MgNSAgICAgICAgICAgc2VuZCB1bnByb3RlY3QgcGFnZSB0byBjdXJzb3IKKyNFU0MgNiAgICAgICAgICAgc2VuZCBsaW5lIHRvIGN1cnNvcgorI0VTQyA3ICAgICAgICAgICBzZW5kIHBhZ2UgdG8gY3Vyc29yCisjRVNDIDggbiAgICAgICAgIHNldCBzY3JvbGwgbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBzZXQganVtcCBzY3JvbGwKKyMgICAgICAgICAgICAgICAgbiA9IDEgICBzZXQgc21vb3RoIHNjcm9sbAorI0VTQyA5IG4gICAgICAgICBjb250cm9sIGRpc3BsYXk6CisjICAgICAgICAgICAgICAgIG4gPSAwICAgZGlzcGxheSBvZmYKKyMgICAgICAgICAgICAgICAgbiA9IDEgICBkaXNwbGF5IG9uCisjRVNDIDogICAgICAgICAgIGNsZWFyIHVucHJvdGVjdGVkIGRhdGEgdG8gbnVsbAorI0VTQyA7ICAgICAgICAgICBjbGVhciB1bnByb3RlY3RlZCBkYXRhIHRvIGluc2VydCBjaGFyCisjCisjRVNDIDwgICAgICAgICAgIGtleWNsaWNrIG9uCisjRVNDID0gcDEgcDIgICAgIGFkZHJlc3MgY3Vyc29yIHRvIHJvdywgY29sdW1uCisjICAgICAgICAgICAgICAgIHAxID0gcm93ICAgICAgICAgIDIwaCAtIDdmaAorIyAgICAgICAgICAgICAgICBwMiA9IGNvbHVtbiAobG8pICAyMGggLSA3ZmgKKyMgICAgICAgICAgICAgICAgcDMgPSBjb2x1bW4gKGhpKSAgMjBoIC0gMjFoIChvbmx5IDEzMiBjb2wpCisjRVNDID4gICAgICAgICAgIGtleWNsaWNrIG9mZgorI0VTQyA/ICAgICAgICAgICB0cmFuc21pdCBjdXJzb3IgbG9jYXRpb24gKHJvdywgY29sdW1uKQorIworI0VTQyBAICAgICAgICAgICBjb3B5IHByaW50IG1vZGUgb24KKyNFU0MgQSAgICAgICAgICAgY29weSBwcmludCBtb2RlIG9mZgorI0VTQyBCICAgICAgICAgICBibG9jayBtb2RlIG9uCisjRVNDIEMgICAgICAgICAgIGJsb2NrIG1vZGUgb2ZmIChjb252ZXJzYXRpb24gbW9kZSkKKyNFU0MgRCBGICAgICAgICAgc2V0IGZ1bGwgZHVwbGV4CisjRVNDIEQgSCAgICAgICAgIHNldCBoYWxmIGR1cGxleAorI0VTQyBFICAgICAgICAgICBsaW5lIGluc2VydAorI0VTQyBGIHAxIHAyICAgICBzZXQgcGFnZSBjb2xvdXIgKHAxID0gZi9ncm5kLCBwMiA9IGIvZ3JuZCkKKyMgICAgICAgICAgICAgICAgMCA9IGJsYWNrLCAxID0gcmVkLCAgICAgMiA9IGdyZWVuLCAzID0geWVsbG93CisjICAgICAgICAgICAgICAgIDQgPSBibHVlLCAgNSA9IG1hZ2VudGEsIDYgPSBjeWFuLCAgNyA9IHdoaXRlCisjRVNDIEcgbiAgICAgICAgIHNldCBzZXJpYWwgZmllbGQgYXR0cmlidXRlIChuID0gMzBoIC0gM0ZoKQorI0VTQyBIIG4gICAgICAgICBmdWxsIGdyYXBoaWNzIG1vZGU6CisjICAgICAgICAgICAgICAgIG4gPSAwICBleGl0IGZ1bGwgZ3JhcGhpY3MgbW9kZQorIyAgICAgICAgICAgICAgICBuID0gMSAgZW50ZXIgZnVsbCBncmFwaGljcyBtb2RlCisjRVNDIEkgICAgICAgICAgIGJhY2sgdGFiCisjRVNDIEogICAgICAgICAgIGJhY2sgcGFnZQorI0VTQyBLICAgICAgICAgICBmb3J3YXJkIHBhZ2UKKyMKKyNFU0MgTCAgICAgICAgICAgdW5mb3JtYXR0ZWQgcGFnZSBwcmludAorI0VTQyBNIEwgICAgICAgICBtb3ZlIHdpbmRvdyBsZWZ0ICAoMTMyIGNvbCBtb2RlIG9ubHkpCisjRVNDIE0gUiAgICAgICAgIG1vdmUgd2luZG93IHJpZ2h0ICgxMzIgY29sIG1vZGUgb25seSkKKyNFU0MgTiAgICAgICAgICAgc2V0IHBhZ2UgZWRpdCAoY2xlYXIgbGluZSBlZGl0KQorI0VTQyBPICAgICAgICAgICBzZXQgbGluZSBlZGl0IChjbGVhciBwYWdlIGVkaXQpCisjRVNDIFAgICAgICAgICAgIGZvcm1hdHRlZCBwYWdlIHByaW50CisjRVNDIFEgICAgICAgICAgIGNoYXJhY3RlciBpbnNlcnQKKyNFU0MgUiAgICAgICAgICAgbGluZSBkZWxldGUKKyNFU0MgUyAgICAgICAgICAgc2VuZCBtZXNzYWdlIHVucHJvdGVjdGVkIG9ubHkKKyNFU0MgVCAgICAgICAgICAgZXJhc2UgbGluZSB0byBpbnNlcnQgY2hhcgorI0VTQyBVICAgICAgICAgICBzZXQgbW9uaXRvciBtb2RlICAgKHNlZSBFU0MgWCwgRVNDIHUpCisjCisjRVNDIFYgbiAgICAgICAgIHNlbGVjdCB2aWRlbyBhdHRyaWJ1dGUgbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBzZXJpYWwgZmllbGQgYXR0cmlidXRlIG1vZGUKKyMgICAgICAgICAgICAgICAgbiA9IDEgICBwYXJhbGxlbCBjaGFyYWN0ZXIgYXR0cmlidXRlIG1vZGUKKyNFU0MgViAyIG4gICAgICAgZGVmaW5lIGxpbmUgYXR0cmlidXRlOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIHNpbmdsZSB3aWR0aCBzaW5nbGUgaGVpZ2h0CisjICAgICAgICAgICAgICAgIG4gPSAxICAgc2luZ2xlIHdpZHRoIGRvdWJsZSBoZWlnaHQKKyMgICAgICAgICAgICAgICAgbiA9IDIgICBkb3VibGUgd2lkdGggc2luZ2xlIGhlaWdodAorIyAgICAgICAgICAgICAgICBuID0gMyAgIGRvdWJsZSB3aWR0aCBkb3VibGUgaGVpZ2h0CisjRVNDIFYgMyBuICAgICAgIHNlbGVjdCBjaGFyYWN0ZXIgZm9udDoKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBzeXN0ZW0gZm9udAorIyAgICAgICAgICAgICAgICBuID0gMSAgIHVzZXIgZGVmaW5lZCBmb250CisjRVNDIFYgNCBuICAgICAgIHNlbGVjdCBzY3JlZW4gbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBwYWdlIHNjcmVlbiBtb2RlCisjICAgICAgICAgICAgICAgIG4gPSAxICAgdmlydHVhbCBzY3JlZW4gbW9kZQorI0VTQyBWIDUgbiAgICAgICBjb250cm9sIG1vdXNlIG1vZGU6CisjICAgICAgICAgICAgICAgIG4gPSAwICAgZGlzYWJsZSBtb3VzZQorIyAgICAgICAgICAgICAgICBuID0gMSAgIGVuYWJsZSBzYW1wbGUgbW9kZQorIyAgICAgICAgICAgICAgICBuID0gMiAgIHNlbmQgbW91c2UgaW5mb3JtYXRpb24KKyMgICAgICAgICAgICAgICAgbiA9IDMgICBlbmFibGUgcmVxdWVzdCBtb2RlCisjRVNDIFcgICAgICAgICAgIGNoYXJhY3RlciBkZWxldGUKKyNFU0MgWCAgICAgICAgICAgY2xlYXIgbW9uaXRvciBtb2RlIChzZWUgRVNDIFUsIEVTQyB1KQorI0VTQyBZICAgICAgICAgICBlcmFzZSBwYWdlIHRvIGluc2VydCBjaGFyCisjCisjRVNDIFogbiAgICAgICAgIHNlbmQgdXNlci9zdGF0dXMgbGluZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBzZW5kIHVzZXIgbGluZQorIyAgICAgICAgICAgICAgICBuID0gMSAgIHNlbmQgc3RhdHVzIGxpbmUKKyMgICAgICAgICAgICAgICAgbiA9IDIgICBzZW5kIHRlcm1pbmFsIElECisjRVNDIFsgcDEgcDIgcDMgIHNldCBjaGFyYWN0ZXIgYXR0cmlidXRlIChwYXJhbGxlbCBjaGFyIG1vZGUpOgorIyAgICAgICAgICAgICAgICBwMTogMCA9IG5vcm1hbAorIyAgICAgICAgICAgICAgICAgICAgMSA9IGJsYW5rCisjICAgICAgICAgICAgICAgICAgICAyID0gYmxpbmsKKyMgICAgICAgICAgICAgICAgICAgIDMgPSBibGluayBibGFuayAoPSBibGFuaykKKyMgICAgICAgICAgICAgICAgICAgIDQgPSByZXZlcnNlCisjICAgICAgICAgICAgICAgICAgICA1ID0gcmV2ZXJzZSBibGFuaworIyAgICAgICAgICAgICAgICAgICAgNiA9IHJldmVyc2UgYmxpbmsKKyMgICAgICAgICAgICAgICAgICAgIDcgPSByZXZlcnNlIGJsaW5rIGJsYW5rICg9IHJldmVyc2UgYmxhbmspCisjICAgICAgICAgICAgICAgICAgICA4ID0gdW5kZXJsaW5lCisjICAgICAgICAgICAgICAgICAgICA5ID0gdW5kZXJsaW5lIGJsYW5rCisjICAgICAgICAgICAgICAgICAgICA6ID0gdW5kZXJsaW5lIGJsaW5rCisjICAgICAgICAgICAgICAgICAgICA7ID0gdW5kZXJsaW5lIGJsaW5rIGJsYW5rCisjICAgICAgICAgICAgICAgICAgICA8ID0gcmV2ZXJzZSB1bmRlcmxpbmUKKyMgICAgICAgICAgICAgICAgICAgID0gPSByZXZlcnNlIHVuZGVybGluZSBibGFuaworIyAgICAgICAgICAgICAgICAgICAgPiA9IHJldmVyc2UgdW5kZXJsaW5lIGJsaW5rCisjICAgICAgICAgICAgICAgICAgICA/ID0gcmV2ZXJzZSB1bmRlcmxpbmUgYmxpbmsgYmxhbmsKKyMgICAgICAgICAgICAgICAgcDIsIHAzOiBmL2dybmQsIGIvZ3JuZCBjb2xvdXIKKyMgICAgICAgICAgICAgICAgKHNlZSBFU0MgRiBmb3IgY29sb3VycykKKyMgICAgICAgICAgICAgICAgdXNlIFpaIGZvciBtb25vLCBlZy4KKyMgICAgICAgICAgICAgICAgICAgIEVTQyBbIDAgWiBaIGZvciBub3JtYWwKKyMgICAgICAgICAgICAgICAgICAgIEVTQyBbIDQgWiBaIGZvciBpbnZlcnNlIGV0Yy4KKyMKKyNFU0MgXCBuICAgICAgICAgc2V0IHBhZ2Ugc2l6ZToKKyMgICAgICAgICAgICAgICAgbiA9IDEgICAyNCBsaW5lcy9wYWdlCisjICAgICAgICAgICAgICAgIG4gPSAyICAgNDggbGluZXMvcGFnZQorIyAgICAgICAgICAgICAgICBuID0gMyAgIDcyIGxpbmVzL3BhZ2UKKyMgICAgICAgICAgICAgICAgbiA9IDQgICA5NiBsaW5lcy9wYWdlCisjRVNDIF0gbiAgICAgICAgIHNldCBXb3Jkc3RhciBtb2RlOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIG5vcm1hbCAoS0RTNzM3MikgbW9kZQorIyAgICAgICAgICAgICAgICBuID0gMSAgIFdvcmRzdGFyIG1vZGUKKyMKKyNFU0MgYiAgICAgICAgICAgc2V0IGZvcmVncm91bmQgY29sb3VyIHNjcmVlbgorIworI0VTQyBjIG4gICAgICAgICBlbnRlciBzZWxmLXRlc3QgbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBleGl0IHNlbGYgdGVzdCBtb2RlCisjICAgICAgICAgICAgICAgIG4gPSAxICAgUk9NIHRlc3QKKyMgICAgICAgICAgICAgICAgbiA9IDIgICBSQU0gdGVzdAorIyAgICAgICAgICAgICAgICBuID0gMyAgIE5WUkFNIHRlc3QKKyMgICAgICAgICAgICAgICAgbiA9IDQgICBzY3JlZW4gZGlzcGxheSB0ZXN0CisjICAgICAgICAgICAgICAgIG4gPSA1ICAgbWFpbi9wcmludGVyIHBvcnQgdGVzdAorIyAgICAgICAgICAgICAgICBuID0gNiAgIG1vdXNlIHBvcnQgdGVzdAorIyAgICAgICAgICAgICAgICBuID0gNyAgIGdyYXBoaWNzIGJvYXJkIHRlc3QKKyMgICAgICAgICAgICAgICAgbiA9IDggICBncmFwaGljcyBtZW1vcnkgdGVzdAorIyAgICAgICAgICAgICAgICBuID0gOSAgIGRpc3BsYXkgYWxsICdFJworIyAgICAgICAgICAgICAgICBuID0gOiAgIGRpc3BsYXkgYWxsICdIJworI0VTQyBkICAgICAgICAgICBzZXQgYmFja2dyb3VuZCBjb2xvdXIgc2NyZWVuCisjCisjRVNDIGUgbiAgICAgICAgIHByb2dyYW0gaW5zZXJ0IGNoYXIgKG4gPSBpbnNlcnQgY2hhcikKKyNFU0MgZiB0ZXh0IENSICAgbG9hZCB1c2VyIHN0YXR1cyBsaW5lIHdpdGggJ3RleHQnCisjCisjRVNDIGcgICAgICAgICAgIGRpc3BsYXkgdXNlciBzdGF0dXMgbGluZSBvbiAyNXRoIGxpbmUKKyNFU0MgaCAgICAgICAgICAgZGlzcGxheSBzeXN0ZW0gc3RhdHVzIGxpbmUgb24gMjV0aCBsaW5lCisjRVNDIGkgICAgICAgICAgIHRhYgorI0VTQyBqICAgICAgICAgICByZXZlcnNlIGxpbmVmZWVkCisjRVNDIGsgbiAgICAgICAgIGR1cGxleC9sb2NhbCBlZGl0IG1vZGU6CisjICAgICAgICAgICAgICAgIG4gPSAwICAgZHVwbGV4IGVkaXQgbW9kZQorIyAgICAgICAgICAgICAgICBuID0gMSAgIGxvY2FsIGVkaXQgbW9kZQorI0VTQyBsIG4gICAgICAgICBzZWxlY3QgdmlydHVhbCBzY3JlZW46CisjICAgICAgICAgICAgICAgIG4gPSAwICAgc2NyZWVuIDEKKyMgICAgICAgICAgICAgICAgbiA9IDEgICBzY3JlZW4gMgorI0VTQyBtICAgICAgICAgICBzYXZlIGN1cnJlbnQgY29uZmlnIHRvIE5WUkFNCisjRVNDIG4gcDEgICAgICAgIHNlbGVjdCBkaXNwbGF5IHNjcmVlbjoKKyMgICAgICAgICAgICAgICAgcDEgPSAwICBzY3JlZW4gMQorIyAgICAgICAgICAgICAgICBwMSA9IDEgIHNjcmVlbiAyCisjICAgICAgICAgICAgICAgIHAxID0gMiAgc2NyZWVuIDMKKyMgICAgICAgICAgICAgICAgcDEgPSAzICBzY3JlZW4gNAorI0VTQyBvIHAxIHAyICAgICBzZXQgY2hhcmFjdGVycy9saW5lIGFuZCBhdHRyaWJ1dGU6CisjICAgICAgICAgICAgICAgIHAxID0gMCAgODAgY2hhcnMvbGluZQorIworI0VTQyBvIHAxIHAyICAgICBzZXQgY2hhcmFjdGVycy9saW5lIGFuZCBhdHRyaWJ1dGU6CisjICAgICAgICAgICAgICAgIHAxID0gMCAgODAgY2hhcnMvbGluZQorIyAgICAgICAgICAgICAgICBwMSA9IDEgIDEzMiBjaGFycy9saW5lCisjICAgICAgICAgICAgICAgIHAyID0gMCAgc2luZ2xlIHdpZHRoIHNpbmdsZSBoZWlnaHQKKyMgICAgICAgICAgICAgICAgcDIgPSAxICBzaW5nbGUgd2lkdGggZG91YmxlIGhlaWdodAorIyAgICAgICAgICAgICAgICBwMiA9IDIgIGRvdWJsZSB3aWR0aCBzaW5nbGUgaGVpZ2h0CisjICAgICAgICAgICAgICAgIHAyID0gMyAgZG91YmxlIHdpZHRoIGRvdWJsZSBoZWlnaHQKKyMKKyNFU0MgcSAgICAgICAgICAgaW5zZXJ0IG1vZGUgb24KKyNFU0MgciAgICAgICAgICAgZWRpdCBtb2RlIG9uCisjRVNDIHMgICAgICAgICAgIHNlbmQgbWVzc2FnZSBhbGwKKyNFU0MgdCAgICAgICAgICAgZXJhc2UgbGluZSB0byBudWxsCisjRVNDIHUgICAgICAgICAgIGNsZWFyIG1vbml0b3IgbW9kZSAoc2VlIEVTQyBVLCBFU0MgWCkKKyNFU0MgdiAgICAgICAgICAgYXV0b3BhZ2UgbW9kZSBvbgorI0VTQyB3ICAgICAgICAgICBhdXRvcGFnZSBtb2RlIG9mZgorI0VTQyB4IHAxIHAyIHAzICBkZWZpbmUgZGVsaW1pdGVyIGNvZGUuLi4KKyNFU0MgeSAgICAgICAgICAgZXJhc2UgcGFnZSB0byBudWxsCisjCisjRVNDIHogMiBwMSBwMiBwMyBwNCAgIGRyYXcgcXVhZHJhbmdsZToKKyMgICAgICAgICAgICAgICAgICAgICAgcDEgPSBzdGFydGluZyByb3cKKyMgICAgICAgICAgICAgICAgICAgICAgcDIgPSBzdGFydGluZyBjb2x1bW4KKyMgICAgICAgICAgICAgICAgICAgICAgcDMgPSBlbmQgcm93CisjICAgICAgICAgICAgICAgICAgICAgIHA0ID0gZW5kIGNvbHVtbgorIworI0VTQyB7IHAxIHAyIHAzIHA0ICAgICBjb25maWd1cmUgbWFpbiBwb3J0CisjICAgICAgICAgICAgICAgICAgICAgIChiYXVkLCBzdG9wIGJpdHMsIHBhcml0eSwgd29yZCBsZW5ndGgpCisjCisjRVNDIHwgcDEgcDIgdGV4dCBDdHJsLVkgICAgcHJvZ3JhbSBmdW5jdGlvbiBrZXkgd2l0aCAndGV4dCc6CisjICAgICAgICAgICAgICAgICAgICAgICAgcDEgPSBmdW5jdGlvbiBrZXkgY29kZToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxJyAtICc7JyAgbm9ybWFsIGYxLSBmMTEKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8JyAtICdGJyAgc2hpZnRlZCBmMSAtIGYxMQorIyAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gcHJvZ3JhbSBtb2RlOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEZEWAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IExPQworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IEhEWAorIyAgICAgICAgICAgICAgICAgICAgICAgIEN0cmwtWSA9IHRlcm1pbmF0b3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAodXNlIEN0cmwtUCB0byBlc2NhcGUgXlAsIF5ZICkKKyMKKyNFU0MgfSBwMSBwMiBwMyBwNCAgICAgY29uZmlndXJlIHByaW50ZXIgcG9ydAorIyAgICAgICAgICAgICAgICAgICAgICAoYmF1ZCwgc3RvcCBiaXRzLCBwYXJpdHksIHdvcmQgbGVuZ3RoKQorI0VTQyB+ICAgICAgICAgICBzZW5kIHN5c3RlbSBzdGF0dXMKKyMKKyMgQ29kZXMgYW5kIGluZm8gZnJvbSBQZXRlciBEaXNkYWxlIDxwZXRlQHBkbG1haWwuZGVtb24uY28udWs+IDEyIE1heSAxOTk3CisjCisjIEVudHJ5IGlzIGJ5IGVzciBnb2luZyBzb2xlbHkgb24gYWJvdmUgaW5mb3JtYXRpb24gYW5kIGlzIFVOVEVTVEVELgorIyBUaGlzIGFjdHVhbGx5IGxvb2tzIGEgbG90IGxpa2UgYSBUZWxldmlkZW8gOXh4LgorIyBUaGlzIGVudHJ5IHVzZXMgcGFnZSAwIGFuZCBpcyBtb25vY2hyb21lOyBJJ20gbm90IGJyYXZlIGVub3VnaCB0byB0cnkKKyMgdG8gbWFrZSBjb2xvciB3b3JrIHdpdGhvdXQgYSB0ZXN0IHRlcm1pbmFsLiAgVGhlIDxhbT4gY2FwYWJpbGl0eSBpcyBhIGd1ZXNzLgorIyBUaGUgaW5pdGlhbGl6YXRpb24gc3RyaW5nIHNldHMgY29udmVyc2F0aW9uIG1vZGUsIGJsaW5raW5nIHVuZGVybGluZSBjdXJzb3IsCisjIGZ1bGwgZHVwbGV4LCBwYXJhbGxlbCBhdHRyaWJ1dGUgbW9kZSwgZGlzcGxheSB1c2VyIHN0YXR1cyBsaW5lLCB3aGl0ZQorIyBmb3JlZ3JvdW5kLCBibGFjayBiYWNrZ3JvdW5kLCBub3JtYWwgaGlnaGxpZ2h0LgorIworaWNsNjQwNHxrZHM3MzcyfGljbDY0MDJ8a2RzNjQwMnxJQ0wgNjQwNCBha2EgS29rdXNhaSBEaXNwbGF5IFN5c3RlbXMgNzM3MiwKKwlPVGJzLCBhbSwgaHMsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVsyWlosIGNidD1cRUksIGNpdmlzPVxFLjAsIGNsZWFyPVxFKiwKKwljbm9ybT1cRS4zLCBjcj1eTSwKKwljc3I9XEUhJSslcDElezMyfSUrJXAyJXszMn0gY3VkMT1cMDI2LCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezgwfSVtJXszMn0lKyVjJXAyJXs4MH0lPiV7MzJ9JSslYywKKwljdXUxPV5LLCBjdnZpcz1cRS4xLCBkY2gxPVxFVywgZGwxPVxFUiwgaG9tZT1eXiwgaHQ9XkksCisJaHRzPVxFMSwgaWwxPVxFRSwgaW52aXM9XEVbMVpaLAorCWlzMT1cRUNcRS4zXEVERlxFVjFcRWdcRVswWlosIG5lbD1eXywgcmV2PVxFWzRaWiwKKwlybWlyPVxFciwgcm1zbz1cRVslZ2glezR9JV4lUGglZ2glZFpaLAorCXJtdWw9XEVbJWdoJXs4fSVeJVBoJWdoJWRaWiwgcnMyPVxFbzEsCisJc2dyPVxFWyV7MH0lPyVwMSV0JXs0fSV8JTslPyVwMiV0JXs4fSV8JTslPyVwMyV0JXs0fSV8JTslPyVwNCV0JXsyfSV8JTslPyVwNyV0JXsxfSV8JTtaWiwKKwlzZ3IwPVxFWzBaWiwgc21pcj1cRXEsIHNtc289XEVbOFpaLCBzbXVsPVxFWzhaWiwgdGJjPVxFMywKK2ljbDY0MDQtd3xrZHM3MzcyLXd8SUNMIDY0MDQgYWthIEtva3VzYWkgRGlzcGxheSBTeXN0ZW1zIDczNzIgMTMyIGNvbHMsCisJcnMyPVxFbzEsIHVzZT1pY2w2NDA0LAorCisjIyMjIEludGVyYWN0aXZlIFN5c3RlbXMgQ29ycAorIworIyBJU0MgdXNlZCB0byBzZWxsIE9FTWVkIGFuZCBjdXN0b21pemVkIGhhcmR3YXJlIHRvIHN1cHBvcnQgSVNDIFVOSVguCisjIElTQyBVTklYIHN0aWxsIGV4aXN0cyBpbiAxOTk1LCBidXQgSVNDIGl0c2VsZiBpcyBubyBtb3JlOyB0aGV5IGdvdAorIyBib3VnaHQgb3V0IGJ5IFN1bi4KKyMKKworIyBGcm9tOiA8Y2l0aGVwIWVyaWM+ICBXZWQgU2VwIDE2IDA4OjA2OjQ0IDE5ODEKKyMgKGludGV4dDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5LXlBeUl5MXkwgOjpiYz1eXzoiLCBhbHNvIHRoZQorIyAiOmxlPV5fOiIgbGF0ZXIgb3ZlcnJpZGRlbiAtLSBlc3IpCitpbnRleHR8SW50ZXJhY3RpdmUgU3lzdGVtcyBDb3Jwb3JhdGlvbiBtb2RpZmllZCBvd2wgMTIwMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgeG1jIzEsCisJYmVsPV5HLCBjYnQ9XlksIGNsZWFyPVwwMTQkPDEzMj4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9Xl4sIGN1cD1cMDE3JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5cLAorCWRjaDE9XDAyMiQ8NS41Kj4sIGRsMT1cMDIxJDw1LjUqPiwgZWQ9XDAyNkokPDUuNSo+LAorCWVsPV5LcF5SLCBodD1eSSwgaWwxPVwwMjAkPDUuNSo+LCBpbmQ9XkosIGlwPSQ8NS41Kj4sIGticz1eSCwKKwlrY3ViMT1eXywga2N1ZDE9XkosIGtjdWYxPV5eLCBrY3V1MT1eXCwga2YwPV5WSlxyLCBrZjE9XlZBXHIsCisJa2YyPV5WQlxyLCBrZjM9XlZDXHIsIGtmND1eVkRcciwga2Y1PV5WRVxyLCBrZjY9XlZGXHIsCisJa2Y3PV5WR1xyLCBrZjg9XlZIXHIsIGtmOT1eVklcciwga2hvbWU9XlosIHJtaXI9XlY8LAorCXJta3g9XlY5LCBybXNvPV5WI1xzLCBzbWlyPV5WOywgc21reD1cMDM2XDpcMjY0XDAyNiUlLAorCXNtc289XlYkXCwsCitpbnRleHQyfGludGV4dGlpfElOVEVSQUNUSVZFIG1vZGlmaWVkIG93bCAxMjUxLAorCWFtLCBidywgdWwsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCWJlbD1eRywgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssCisJZmxhc2g9XEVbOzs7Ozs7Ozs7Mjs7dSQ8MjAwLz5cRVs7Ozs7Ozs7OzsxOzt1LAorCWhwYT1cRVslcDElezF9JSslZEcsIGh0PV5JLCBpY2gxPVxFW0AsIGlsMT1cRVtMLCBpbmQ9XEVbUywKKwlrYnM9XkgsIGtjdWIxPVxFRFxyLCBrY3VkMT1cRUJcciwga2N1ZjE9XEVDXHIsIGtjdXUxPVxFQVxyLAorCWtmMD1cRUBcciwga2YxPVxFUFxyLCBrZjI9XEVRXHIsIGtmMz1cRVNcciwga2Y0PVxFVFxyLAorCWtmNT1cRVVcciwga2Y2PVxFVlxyLCBrZjc9XEVXXHIsIGtmOD1cRVhcciwga2Y5PVxFWVxyLAorCWtob21lPVxFUlxyLCBsZjA9UkVGUlNILCBsZjE9REVMIENILCBsZjI9VEFCU0VULCBsZjM9R09UTywKKwlsZjQ9K1BBR0UsIGxmNT0rU1JDSCwgbGY2PS1QQUdFLCBsZjc9LVNSQ0gsIGxmOD1MRUZULAorCWxmOT1SSUdIVCwgcmk9XEVbVCwgcm1zbz1cRVsyIEQsIHJtdWw9XEVbMiBELCBzbXNvPVxFWzYgRCwKKwlzbXVsPVxFWzE4IEQsCisKKyMjIyMgS2ltdHJvbiAoYWJtLCBrdCkKKyMKKyMgS2ltdHJvbiBzZWVtcyB0byBiZSBoaXN0b3J5LCBidXQgYXMgTWFyY2ggMTk5OCB0aGVzZSBwZW9wbGUgYXJlIHN0aWxsCisjIG9mZmVyaW5nIHJlcGFpciBzZXJ2aWNlcyBmb3IgS2ltdHJvbiBlcXVpcG1lbnQ6CisjCisjICAgIENvbS9QYWlyIE1vbml0b3IgU2VydmljZQorIyAgICAxMTA1IE4uIENsaWZmIEF2ZS4KKyMgICAgU2lvdXggRmFsbHMsIFNvdXRoIERha290YSA1NzEwMworIworIyAgICBXQVRTIHZvaWNlOiAgMS04MDAvMzk4LTQ5NDYKKyMgICAgUE9UUyAgIGZheDogKzEgNjA1LzMzOC04NzA5CisjICAgIFBPVFMgdm9pY2U6ICsxIDYwNS8zMzgtOTY1MAorIyAgICAgICAgIEVtYWlsOiA8Y29tcGFpckBzZC5jeWJlcm5leC5uZXQ+CisjICBJbnRlcm5ldC9XZWI6IDxodHRwOi8vd3d3LmNvbS1wYWlyLmNvbT4KKyMKKyMgS2ltdHJvbiBlbnRyaWVzIGluY2x1ZGUgKHVuZG9jdW1lbnRlZCkgY29kZXMgZm9yOiBlbnRlciBkaW0gbW9kZSwKKyMgZW50ZXIgYm9sZCBtb2RlLCBlbnRlciByZXZlcnNlIG1vZGUsIHR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzLgorIworCisjIEtpbXRyb24gQUJNIDg1IGFkZGVkIGJ5IER1YWwgU3lzdGVtcworIyAoYWJtODU6IHJlbW92ZWQgZHVwbGljYXRlZCAiOmtkPV5KOiIgLS0gZXNyKQorYWJtODV8S2ltdHJvbiBBQk0gODUsCisJT1RicywgYW0sIGJ3LCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwljYnQ9XEVJLCBjbGVhcj1cRSosIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEV5LCBlbD1cRXQsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaWwxPVxFRSwKKwlpczI9XEVDXEVYXEVnXEVuXEUlXEVyXEUoXEVrXEVtXEVxLCBrYnM9XkgsIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtob21lPV5eLCBybWlyPVxFciwgcm1zbz1cRWssCisJcm11bD1cRW0sIHNtaXI9XEVRLCBzbXNvPVxFaiwgc211bD1cRWwsCisjIEtpbXRyb24gQUJNIDg1SCBhZGRlZCBieSBEdWFsIFN5c3RlbXMuCisjIFNvbWUgbm90ZXMgYWJvdXQgdGhlIGFibTg1aCBlbnRyaWVzOgorIyAxKSB0aGVyZSBhcmUgc2V2ZXJhbCBmaXJtd2FyZSByZXZzIG9mIDg1SCBpbiB0aGUgd29ybGQuIFVzZSBhYm04NWgtb2xkIGZvcgorIyAgICBmaXJtd2FyZSByZXZzIHByaW9yIHRvIFNQNTEKKyMgMikgTWFrZSBzdXJlIHRvIHVzZSBhYm04NWggZW50cnkgaWYgdGhlIHRlcm1pbmFsIGlzIGluIDg1aCBtb2RlIGFuZCB0aGUKKyMgICAgYWJtODVlIGVudHJ5IGlmIGl0IGlzIGluIHR2aTkyMCBlbXVsYXRpb24gbW9kZS4gVGhleSBhcmUgaW5jb21wYXRpYmxlCisjICAgIGluIHNvbWUgcGxhY2VzIGFuZCBOT1Qgc29mdHdhcmUgc2V0dGFibGUgaS5lLiwgPGlzMj4gY2FuJ3QgZml4IGl0KQorIyAzKSBJbiA4NWggbW9kZSwgdGhlIGFycm93IGtleXMgYW5kIHNwZWNpYWwgZnVuY3Rpb25zIHRyYW5zbWl0IHdoZW4KKyMgICAgdGhlIHRlcm1pbmFsIGlzIGluIGR1cC1lZGl0LCBhbmQgd29yayBvbmx5IGxvY2FsbHkgaW4gbG9jYWwtZWRpdC4KKyMgICAgVmkgd29uJ3Qgc3dhbGxvdyBgZGVsIGNoYXInIGZvciBpbnN0YW5jZSwgYnV0IDxzbWN1cD4gdHVybnMgb24KKyMgICAgZHVwLWVkaXQgYW55d2F5IHNvIHRoYXQgdGhlIGFycm93IGtleXMgd2lsbCB3b3JrIHJpZ2h0LiBJZiB0aGUKKyMgICAgYXJyb3cga2V5cyBkb24ndCB3b3JrIHRoZSB3YXkgeW91IGxpa2UsIGNoYW5nZSA8c21jdXA+LCA8cm1jdXA+LCBhbmQKKyMgICAgPGlzMj4uICBOb3RlIHRoYXQgOTIwRSBtb2RlIGRvZXMgbm90IGhhdmUgc29mdHdhcmUgY29tbWFuZHMgdG8gdG9nZ2xlCisjICAgIGJldHdlZW4gZHVwIGFuZCBsb2NhbCBlZGl0LCBzbyB5b3UgZ2V0IHdoYXRldmVyIHdhcyBzZXQgbGFzdCBvbiB0aGUKKyMgICAgdGVybWluYWwuCisjIDQpIDxmbGFzaD4gYXR0cmlidXRlIGlzIG5pY2UsIGJ1dCBzZWVtcyB0b28gc2xvdyB0byB3b3JrIGNvcnJlY3RseQorIyAgICAoXEViPHBhZD5cRWQpCisjIDUpIE1ha2Ugc3VyZSBgaGlkZGVuJyBhdHRyaWJ1dGVzIGFyZSBzZWxlY3RlZC4gSWYgYGVtYmVkZGVkJyBhdHRyaWJ1dGVzCisjICAgIGFyZSBzZWxlY3RlZCwgdGhlIDx4bWNAPiBlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZC4KKyMgNikgYXV0byBuZXctbGluZSBzaG91bGQgYmUgb24gKHNlbGVjdGFibGUgZnJvbSBzZXR1cCBtb2RlIG9ubHkpCisjCisjIEZyb206IEVyaWsgRmFpciA8ZmFpckB1Y2JhcnBhPiAgU3VuIE9jdCAyNyAwNzoyMTowNSAxOTg1CithYm04NWh8S2ltdHJvbiBBQk0gODVIIG5hdGl2ZSBtb2RlLAorCWhzLAorCXhtY0AsCisJYmVsPV5HLCBjbm9ybT1cRS40LCBjdnZpcz1cRS4yLCBkaW09XEUpLCBkc2w9XEVlLCBmbGFzaEAsCisJZnNsPV5NLCBpbnZpc0AsCisJaXMyPVxFQ1xFTlxFWFwwMjRcMDE2XEVBXEVhXEUlXEU5XEVlXEVyXEVuXEUiXEV9XEUnXEUoXEVmXHJcRUcwXEVkXEUuNFxFbCwKKwlrY3VkMT1eViwgc2dyMD1cRShcRUcwLCBzbWlyPVxFWiwgdHNsPVxFZ1xFZiwgdXNlPWFkbStzZ3IsCisJdXNlPWFibTg1LAorYWJtODVlfEtpbXRyb24gQUJNIDg1SCBpbiA5MjBFIG1vZGUsCisJeG1jQCwKKwliZWw9XkcsIGRpbT1cRSksIGZsYXNoQCwKKwlpczI9XEVDXEVYXEVBXEUlXEU5XEVlXEVyXEVuXEUiXEV9XEUnXEUoXEVmXHJcRWtcRXFcRW0sCisJcmV2PVxFaiwgc2dyMD1cRShcRWssIHNtaXI9XEVaLCB1c2U9YWJtODUsCithYm04NWgtb2xkfG9hYm04NWh8bzg1aHxLaW10cm9uIEFCTSA4NUggd2l0aCBvbGQgZmlybXdhcmUgcmV2LiwKKwl4bWNALAorCWJlbD1eRywgZGltPVxFKSwKKwlpczI9XEV9XEVDXEVYXEVlXEVuXEUlXEVyXEUoXEVrXEVtXEVxXEVkXEVUXEVDXEU5XEVGLAorCXJldj1cRWosIHNncjA9XEUoXEVrLCBzbWlyPVxFWiwgdXNlPWFibTg1LAorIyBGcm9tOiA8bWFsbWFuQGJibi12YXguYXJwYT4KKyMgKGt0NzogcmVtb3ZlZCBvYnNvbGV0ZSA6bWE9XlZeSl5MIDoiIC0tIGVzcikKK2t0N3xraW10cm9uIG1vZGVsIGt0LTcsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2J0PVxFSSwgY2xlYXI9XlosIGN1YjE9XkgsIGN1ZDE9XlYsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGZzbD1cRWcsIGhvbWU9Xl4sIGh0PV5JLCBpY2gxPVxFUSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUUsIGludmlzQCwgaXMyPVxFbFxFIiwKKwlrYnM9XkgsIGtjYnQ9XEVJLCBrY2xyPV5aLCBrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEVZLCBrZWw9XEVULCBrZjA9XkFJXHIsCisJa2YxPV5BQFxyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsCisJa2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwKKwlraWNoMT1cRVEsIGtpbDE9XEVFLCB0c2w9XEVmLCB1c2U9YWRtK3NnciwKKyMgUmVuYW1lZCBUQj1eSSB0byA6dGE6LCBCRT1eRyB0byA6Ymw6LCBCUz1eSCB0byA6a2I6LCBOIHRvIDprUzogKGJhc2VkIG9uIHRoZQorIyBvdGhlciBrdDcgZW50cnkgYW5kIHRoZSBhZGphY2VudCBrZXkgY2FwYWJpbGl0aWVzKS4gIFJlbW92ZWQgRUUgd2hpY2ggaXMKKyMgaWRlbnRpY2FsIHRvIDptaDouICBSZW1vdmVkIDpFUz1cRUdEOiB3aGljaCBpcyBzb21lIGtpbmQgb2YgaGlnaGxpZ2h0CisjIGJ1dCB3ZSBjYW4ndCBmaWd1cmUgb3V0IHdoYXQuCitrdDdpeHxraW10cm9uIG1vZGVsIGt0LTcgb3IgNzAgaW4gSVggbW9kZSwKKwlhbSwgYncsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYWNzYz1qWWs/bFptQG5FcUR0NHVDdkF3QngzLCBiZWw9XkcsIGJsaW5rPVxFRzIsIGNidD1cRUksCisJY2l2aXM9XEUuMCwgY2xlYXI9XEUqLCBjbm9ybT1cRS4zLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eViwKKwljdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLAorCWRjaDE9XEVXLCBkaW09XEVHQCwgZGwxPVxFUiwgZHNsPVxFZlxyLCBlZD1cRVksIGVsPVxFVCwgZnNsPV5NLAorCWhvbWU9Xl4sIGh0PV5JLCBpY2gxPVxFUSwgaWwxPVxFRSwgaW5kPV5KLAorCWlzMj1cRUcwXEUgc1wwMTdcRX4sIGticz1eSCwga2NidD1cRUksIGtjbHI9XEUqLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkbDE9XEVSLAorCWtlZD1cRVksIGtlbD1cRVQsIGtlbmQ9XEVZLCBrZjA9XkFJXHIsIGtmMT1eQUBcciwga2YyPV5BQVxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwga2ljaDE9XEVRLCBraWwxPVxFRSwga25wPVxFSiwKKwluZWw9Xk1eSiwgcHVsc2U9XEVLLCBybWFjcz1cRSUlLCBybWlyPSwgcm1zbz1cRUcwLCBybXVsPVxFRzAsCisJc2dyMD1cRUcwLCBzbWFjcz1cRSQsIHNtaXI9LCBzbXNvPVxFRzQsIHNtdWw9XEVHOCwgdHNsPVxFZiwKKworIyMjIyBNaWNyb2RhdGEvTURJUworIworIyBUaGlzIHdhcyBhIGxpbmUgb2YgdGVybWluYWxzIG1hZGUgYnkgTWNEb25uZWxsLURvdWdsYXMgSW5mb3JtYXRpb24gU3lzdGVtcy4KKyMgVGhlc2UgZW50cmllcyBjb21lIGRpcmVjdCBmcm9tIE1ESVMgZG9jdW1lbnRhdGlvbi4gIEkgaGF2ZSBlZGl0ZWQgdGhlbSBvbmx5CisjIHRvIG1vdmUgcHJpbWFyeSBuYW1lcyBvZiB0aGUgZm9ybSBwWzAtOV0gKiB0byBhbGlhc2VzLCBhbmQgdG8gY29tbWVudCBvdXQKKyMgPHJtYWNzPi88c21hY3M+IGluIGEgY291cGxlIG9mIGVudHJpZXMgd2l0aG91dCA8YWNzYz4gc3RyaW5ncy4gIEkgaGF2ZQorIyBhbHNvIHJlbW92ZWQgdGhlIGNoYW5nZSBoaXN0b3J5OyB0aGUgbGFzdCB2ZXJzaW9uIGluZGljYXRlcyB0aGlzIGlzCisjIHZlcnNpb24gNC4zIGJ5IEEuQmFya3VzLCBTZXB0ZW1iZXIgMTk5MCAoZWFybGllc3QgZW50cnkgaXMgT2N0b2JlciAxOTg5KS4KKyMKKworIyBNY0Rvbm5lbGwgSW5mb3JtYXRpb24gU3lzdGVtcyBUZXJtaW5hbCBGYW1pbHkgSGlzdG9yeQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBQcmlzbS0xLCBQcmlzbS0yIGFuZCBQOTk6CisjICAgICAgIEFuY2llbnQgTWljcm9kYXRhIGFuZCBDTUMgdGVybWluYWxzLCB2YWd1ZWx5IGxpa2UgQWRkcyBSZWdlbnQgMjUuCisjCisjIFByaXNtLTQgYW5kIFByaXNtLTU6CisjICAgICAgIFNsaWdodGx5IGxlc3MgYW5jaWVudCByYW5nZSBvZiBNaWNyb2RhdGEgdGVybWluYWxzLiBGb2xsb3ctb24gZnJvbQorIyAgICAgICBQcmlzbS0yLCBidXQgd2l0aCBtYW55IGVuaGFuY2VtZW50cy4gUDUgaGFzIGVpZ2h0IGRpc3BsYXkgcGFnZXMuCisjCisjIFByaXNtLTY6CisjICAgICAgIEEgc3BlY2lhbCB0ZXJtaW5hbCBmb3IgdXNlIHdpdGggbGlicmFyeSBzeXN0ZW1zLCBwcmltYXJpbHkgaW4gR2VybWFueS4KKyMgICAgICAgTGltaXRlZCBudW1iZXJzLiBTaW1pbGFyIGZ1bmN0aW9uYWxpdHkgdG8gUDUgKGV4Y2VwdCBhdHRyaWJ1dGVzPykuCisjCisjIFByaXNtLTcsIFByaXNtLTggYW5kIFByaXNtLTk6CisjICAgICAgIE1vcmUgcmVjZW50IHJhbmdlIG9mIE1ESVMgdGVybWluYWxzLCBpbiB3aGljaCBQNyBhbmQgUDgKKyMgICAgICAgcmVwbGFjZSB0aGUgUDQgJiBQNSwgd2l0aCBhZGRlZCBmdW5jdGlvbmFsaXR5LCBhbmQgUDkgaXMgdGhlIGZsYWdzaGlwLgorIyAgICAgICBUaGUgUDkgaGFzIHR3byBlbXVsYXRpb24gbW9kZXMgLSBQOCBhbmQgQU5TSSAtIGFuZCBpbmNsdWRlcyBhCisjICAgICAgIGxhcmdlIG51bWJlciBvZiB0aGUgREVDIFZUMjIwIGNvbnRyb2wgc2VxdWVuY2VzLiBCb3RoCisjICAgICAgIFA4IGFuZCBQOSBzdXBwb3J0IDgwYy8yNGxuLzhwZyBhbmQgMTMyY2wvMjRsaS80cGcgZm9ybWF0cy4KKyMKKyMgUHJpc20tMTIgYW5kIFByaXNtLTE0OgorIyAgICAgICBMYXRlc3QgcmFuZ2UsIGZ1bmN0aW9uYWxseSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIFA5LiAgVGhlIFAxNCBoYXMgYQorIyAgICAgICBibGFjay1vbi13aGl0ZSBvdmVyc2Nhbm5pbmcgc2NyZWVuLgorIworIyBUaGUgdGVybWluZm8gZGVmaW5pdGlvbnMgZ2l2ZW4gaGVyZSBhcmU6CisjCisjIHAyICAgICAgLSBQcmlzbS0yIChvciBQcmlzbS0xIG9yIFA5OSkuCisjCisjIHA0ICAgICAgLSBQcmlzbS00IChhbmQgb2xkZXIgUDdzICYgUDhzKS4KKyMgcDUgICAgICAtIFByaXNtLTUgKG9yIFByaXNtLTYpLgorIworIyBwNyAgICAgIC0gUHJpc20tNy4KKyMgcDggICAgICAtIFByaXNtLTggKGluIG5hdGlvbmFsIG9yIG11bHRpbmF0aW9uYWwgbW9kZSkuCisjIHA4LXcgICAgLSAxMzIgY29sdW1uIHZlcnNpb24gb2YgcDguCisjIHA5ICAgICAgLSBQcmlzbS05IGluIEFOU0kgbW9kZS4KKyMgcDktdyAgICAtIDEzMiBjb2x1bW4gdmVyc2lvbiBvZiBwOS4KKyMgcDktOCAgICAtIFByaXNtLTkgaW4gUHJpc20tOCBlbXVsYXRpb24gbW9kZS4KKyMgcDktOC13ICAtIEFzIHA5LTgsIGJ1dCB3aXRoIDEzMiBjb2x1bW5zLgorIworIyBwMTIgICAgIC0gUHJpc20tMTIgaW4gQU5TSSBtb2RlLgorIyBwMTItdyAgIC0gMTMyIGNvbHVtbiB2ZXJzaW9uIG9mIHAxMi4KKyMgcDEyLW0gICAtIFByaXNtLTEyIGluIE1EQyBlbXVsYXRpb24gbW9kZS4KKyMgcDEyLW0tdyAtIEFzIHAxMi1tLCBidXQgd2l0aCAxMzIgY29sdW1ucy4KKyMgcDE0ICAgICAtIFByaXNtLTE0IGluIEFOU0kgbW9kZS4KKyMgcDE0LXcgICAtIDEzMiBjb2x1bW4gdmVyc2lvbiBvZiBwMTQuCisjIHAxNC1tICAgLSBQcmlzbS0xNCBpbiBNREMgZW11bGF0aW9uIG1vZGUuCisjIHAxNC1tLXcgLSBBcyBwMTQtbSwgYnV0IHdpdGggMTMyIGNvbHVtbnMuCisjCisjIHAyOiBQcmlzbS0yCisjIC0tLS0tLS0tLS0tCisjCisjIEluY2x1ZGVzIFByaXNtLTEgYW5kIGJhc2ljIFA5OSB3aXRob3V0IFNQIG9yIE1QIGxvYWRlZC4KKyMgVGhlIHNpbXBsZXN0IGZvcm0gb2YgUHJpc20tdHlwZSB0ZXJtaW5hbC4KKyMgQmFzaWMgY3Vyc29yIG1vdmVtZW50IGFuZCBjbGVhcmluZyBvcGVyYXRpb25zIG9ubHkuCisjIE5vIHZpZGVvIGF0dHJpYnV0ZXMuCisjIE5vdGVzOgorIyAgSG9yaXpvbnRhbCBjdXJzb3IgcXVhbGlmaWVycyBvZiBOVUwsIFhPTiBhbmQgWE9GRiBhcmUgbWFwcGVkIHRvIHRoZSBuZXh0CisjICB2YWx1ZSB1cCwgZm9sbG93ZWQgYnkgYmFja3NwYWNlLgorIworcHJpc20yfE1EQyBQcmlzbS0yLAorCWFtLCBidywgbXNnciwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDIwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkYsCisJY3VwPVwwMTMlcDElezMyfSUrJWNcMDIwJXAyJXsxMH0lLyV7MTZ9JSolcDIlezEwfSVtJSslUGMlPyV7MTd9JWdjJT0lezE5fSVnYyU9JXwlZ2MlISV8JXQlezF9JWdjJSslYyV7OH0lZSVnYyU7JWMsCisJY3V1MT1eWiwgZWQ9XEVKLCBlbD1cRUssIGhvbWU9XkEsCisJaHBhPVwwMjAlcDElezEwfSUvJXsxNn0lKiVwMSV7MTB9JW0lKyVQYyU/JXsxN30lZ2MlPSV7MTl9JWdjJT0lfCVnYyUhJXwldCV7MX0lZ2MlKyVjJXs4fSVlJWdjJTslYywKKwlpbmQ9XkosIGticz1eSCwga2hvbWU9XkEsIHZwYT1cMDEzJXAxJXszMn0lKyVjLAorCisjIHA0OiBQcmlzbS00CisjIC0tLS0tLS0tLS0tCisjCisjIEluY2x1ZGVzIGVhcmx5IHZlcnNpb25zIG9mIFA3ICYgUDguCisjIEJhc2ljIGZhbWlseSBkZWZpbml0aW9uIGZvciBtb3N0IFByaXNtcyAoZXhjZXB0IFAyIGFuZCBQOSBBTlNJKS4KKyMgTm90ZXM6CisjICBIb3Jpem9udGFsIGN1cnNvciBxdWFsaWZpZXJzIG9mIE5VTCwgWE9OIGFuZCBYT0ZGIGFyZSBtYXBwZWQgdG8gdGhlIG5leHQKKyMgIHZhbHVlIHVwLCBmb2xsb3dlZCBieSBiYWNrc3BhY2UuCisjICBDdXJzb3Iga2V5IGRlZmluaXRpb25zIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGludGVyZmVyZSB3aXRoIHZpIGFuZCBjc2gga2V5cy4KKyMKK3ByaXNtNHxwNHxQNHxNREMgUHJpc20tNCwKKwlhbSwgYncsIGhzLCBtYzVpLCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LCB3c2wjNzIsIHhtYyMxLAorCWJlbD1eRywgYmxpbms9XkNCLCBjaXZpcz1eXVwzNDQsIGNsZWFyPVwwMTQkPDIwPiwKKwljbm9ybT1eXVwzNDIsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5GLAorCWN1cD1cMDEzJXAxJXszMn0lKyVjXDAyMCVwMiV7MTB9JS8lezE2fSUqJXAyJXsxMH0lbSUrJVBjJT8lezE3fSVnYyU9JXsxOX0lZ2MlPSV8JWdjJSElfCV0JXsxfSVnYyUrJWMlezh9JWUlZ2MlOyVjLAorCWN1dTE9XlosIGRpbT1eQ0EsIGRzbD1cMDM1XDM0M1wwMzVcMzQ1LCBlZD1cRUosIGVsPVxFSywKKwlmc2w9Xl1cMzQ1LCBob21lPV5BLAorCWhwYT1cMDIwJXAxJXsxMH0lLyV7MTZ9JSolcDElezEwfSVtJSslUGMlPyV7MTd9JWdjJT0lezE5fSVnYyU9JXwlZ2MlISV8JXQlezF9JWdjJSslYyV7OH0lZSVnYyU7JWMsCisJaW5kPV5KLCBpbnZpcz1eQ0gsIGticz1eSCwga2hvbWU9XkEsIG1jMD1cRVUsIG1jND1cRVQsIG1jNT1cRVIsCisJcmV2PV5DRCwgcm1zbz1eQ1xzLCBybXVsPV5DXHMsCisJc2dyPVwwMDMlezY0fSU/JXAxJXAzJXwldCV7NH0lKyU7JT8lcDIldCV7MTZ9JSslOyU/JXA0JXQlezJ9JSslOyU/JXA1JXQlezF9JSslOyU/JXA3JXQlezh9JSslOyVjJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPV5DXHMsIHNtc289XkNELCBzbXVsPV5DUCwgdHNsPV5dXDM0MywKKwl2cGE9XDAxMyVwMSV7MzJ9JSslYywKKworIyBwNTogUHJpc20tNQorIyAtLS0tLS0tLS0tLQorIworIyBTYW1lIGRlZmluaXRpb24gYXMgcDQuIEluY2x1ZGVzIFByaXNtLTYgKG5vdCB0ZXN0ZWQhKS4KKyMgRG9lcyBub3QgdXNlIGFueSBtdWx0aS1wYWdlIGZlYXR1cmVzLgorIworcHJpc201fHA1fFA1fE1EQyBQcmlzbS01LAorCXVzZT1wNCwKKworIyBwNzogUHJpc20tNworIyAtLS0tLS0tLS0tLQorIworIyBTaW1pbGFyIGRlZmluaXRpb24gdG8gcDQuIFVzZXMgQU5TSSBjdXJzb3IgbW90aW9uIHRvIGF2b2lkIG5ldHdvcmsgcHJvYmxlbXMuCisjIE5vdGVzOgorIyAgVXNlIHA0IGZvciB2ZXJ5IGVhcmx5IG1vZGVscyBvZiBQNy4KKyMgIFJldi1pbmRleCByZW1vdmVkOyBjYW4ndCBzZW5kIG51bGxzIHRvIHRlcm1pbmFsIGluIDgtYml0IG1vZGVzLgorIworcHJpc203fHA3fFA3fE1EQyBQcmlzbS03LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgaHBhQCwgdnBhQCwgdXNlPXA0LAorCisjIHA4OiBQcmlzbS04CisjIC0tLS0tLS0tLS0tCisjCisjIFNpbWlsYXIgZGVmaW5pdGlvbiB0byBwNy4gVXNlcyBBTlNJIGN1cnNvciBtb3Rpb24gdG8gYXZvaWQgbmV0d29yayBwcm9ibGVtcy4KKyMgU3VwcG9ydHMgbmF0aW9uYWwgYW5kIG11bHRpbmF0aW9uYWwgY2hhcmFjdGVyIHNldHMuCisjIE5vdGVzOgorIyAgQWx0ZXJuYXRlIGNoYXIgc2V0IG9wZXJhdGlvbnMgb25seSB3b3JrIGluIG11bHRpbmF0aW9uYWwgbW9kZS4KKyMgIFVzZSBwNCBmb3IgdmVyeSBlYXJseSBtb2RlbHMgb2YgUDguCisjICBSZXYtaW5kZXggcmVtb3ZlZDsgY2FuJ3Qgc2VuZCBudWxscyB0byB0ZXJtaW5hbCBpbiA4LWJpdCBtb2Rlcy4KKyMgKGVzcjogY29tbWVudGVkIG91dCA8c21hY3M+LzxybWFjcz4gYmVjYXVzZSB0aGVyZSdzIG5vIDxhY3NjPikKKyMKK3ByaXNtOHxwOHxQOHxNREMgUHJpc20tOCwKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGhwYT1cRVslaSVwMSVkYCwgaXMyPVxFWzwxMmgsCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9cDQsCisKKyMgcDgtdzogUHJpc20tOCBpbiAxMzIgY29sdW1uIG1vZGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgJ1dpZGUnIHZlcnNpb24gb2YgcDguCisjIE5vdGVzOgorIyAgUmV2LWluZGV4IHJlbW92ZWQ7IGNhbid0IHNlbmQgbnVsbHMgdG8gdGVybWluYWwgaW4gOC1iaXQgbW9kZXMuCisjCitwcmlzbTgtd3xwOC13fFA4LVd8TURDIFByaXNtLTggaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLAorCWlzMj1cRVs8MTJoXEVbPDE0aCwgdXNlPXA4LAorCisjIHA5OiBQcmlzbS05IGluIEFOU0kgbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFRoZSAiZmxhZ3NoaXAiIG1vZGVsIG9mIHRoaXMgZ2VuZXJhdGlvbiBvZiB0ZXJtaW5hbHMuCisjIEFOU0kgWDMuNjQgKElTTyA2NDI5KSBzdGFuZGFyZCBzZXF1ZW5jZXMsIHBsdXMgbWFueSBERUMgVlQyMjAgb25lcy4KKyMgTm90ZXM6CisjICBUYWJzIG9ubHkgcmVzZXQgYnkgInJlc2V0Ii4gT3RoZXJ3aXNlIGFzc3VtZXMgZGVmYXVsdCAoOCBjb2xzKS4KKyMgIEZpeGVzIHRvIGRlYWwgd2l0aCB0ZXJtaW5hbCBmaXJtd2FyZSBidWdzOgorIyAgLiAncmknIHVzZXMgaW5zZXJ0LWxpbmUgc2luY2UgcmV2IGluZGV4IGRvZXNuJ3QgYWx3YXlzCisjICAuICdzZ3IwJyBoYXMgZXh0cmEgJzAnIHNpbmNlIGVzY1ttIGZhaWxzCisjICAuICdmc2wnICYgJ2RzbCcgdXNlIGlsbGVnYWwgY2hhciBzaW5jZSBjciBpcyBhY3Rpb25lZCB3cm9uZyBvbiBsaW5lIDI1CisjICBOb3QgY292ZXJlZCBpbiB0aGUgY3VycmVudCBkZWZpbml0aW9uOgorIyAgLiBMYWJlbHMKKyMgIC4gUHJvZ3JhbW1pbmcgRm4ga2V5cworIyAgLiBHcmFwaGljIGNoYXJhY3RlcnMgKGRlZmF1bHRzIGNvcnJlY3RseSB0byB2dDEwMCkKKyMgIC4gUGFkZGluZyB2YWx1ZXMgKHNldHMgeG9uKQorIyAoZXNyOiBjb21tZW50ZWQgb3V0IDxzbWFjcz4vPHJtYWNzPiBiZWNhdXNlIHRoZXJlJ3Mgbm8gPGFjc2M+KQorIworcHJpc205fHA5fFA5fE1EQyBQcmlzbS05IGluIEFOU0lJIG1vZGUsCisJYW0sIGJ3LCBocywgbWM1aSwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLCB3c2wjNzIsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWzw0bCwKKwljbGVhcj1eTCwgY25vcm09XEVbPDRoLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWQlJXYsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBkc2w9XEVbJX1cMDI0LCBlY2g9XEVbJXAxJWRYLAorCWVkPVxFW0okPDEwPiwgZWw9XEVbSywgZnNsPV5ULCBob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwKKwlodD1eSSwgaHRzPVxFSCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRVsmcFxFWzwxMmxcRSBGLCBrYnM9XkgsIGtjbHI9XkwsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFWzExfiwKKwlrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwKKwlrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwKKwlrZjE4PVxFWzMyfiwga2YyPVxFWzEyfiwga2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFW0gsIG1jMD1cRVtpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgbmVsPV5NXkosCisJcHJvdD1cRVszMiV7LCByYz1cRVsleiwgcmVwPVxFWyVwMiVkYiVwMSVjLCByZXY9XEVbN20sCisJcmk9XEVbTCwgcm1pcj1cRVs0bCwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRVsmcFxFWzwxMmxcRSBGXEVbM2dcRVs5OzE3OzI1OzMzOzQxOzQ5OzU3OzY1OzczIE4sCisJc2M9XEVbJXksCisJc2dyPVxFWyV7MH0lPyVwMSVwMyV8JXQlezd9JSslOyU/JXAyJXQlezJ9JSslOyU/JXA0JXQlezV9JSslOyU/JXA2JXQlezF9JSslO20lPyVwOCV0XEVbJXszMn0lKyVkJSV7JTslPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbMG1cMDE3LCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVsyZywgdHNsPVxFWyVpJXAxJWQlJX0sIHZwYT1cRVslaSVwMSVkZCwKKworIyBwOS13OiBQcmlzbS05IGluIDEzMiBjb2x1bW4gbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyAnV2lkZScgdmVyc2lvbiBvZiBwOS4KKyMKK3ByaXNtOS13fHA5LXd8UDktV3xNREMgUHJpc20tOSBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsCisJaXMyPVxFWyZwXEVbPDEybFxFIEZcRVs8MTRoLAorCXJzMj1cRVsmcFxFWzwxMmxcRSBGXEVbPDE0aCwgdXNlPXA5LAorCisjIHA5LTg6IFByaXNtLTkgaW4gUDggbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUDkgdGVybWluYWwgaW4gUDggZW11bGF0aW9uIG1vZGUuCisjIFNpbWlsYXIgdG8gcDggZGVmaW5pdGlvbi4KKyMgSW5zZXJ0aW9uIGFuZCBkZWxldGlvbiBvcGVyYXRpb25zIHBvc3NpYmxlLgorIworcHJpc205LTh8cDktOHxQOS04fE1EQyBQcmlzbS05IGluIFA4IG1vZGUsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgdXNlPXA4LAorCisjIHA5LTgtdzogUHJpc20tOSBpbiBQOCBhbmQgMTMyIGNvbHVtbiBtb2RlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUDkgdGVybWluYWwgaW4gUDggZW11bGF0aW9uIG1vZGUgYW5kIDEzMiBjb2x1bW4gbW9kZS4KKyMKK3ByaXNtOS04LXd8cDktOC13fFA5LTgtV3xNREMgUHJpc20tOSBpbiBQcmlzbSA4IGVtdWxhdGlvbiBhbmQgMTMyIGNvbHVtbiBtb2RlLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIHVzZT1wOC13LAorCisjIHAxMjogUHJpc20tMTIgaW4gQU5TSSBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBTZWUgcDkgZGVmaW5pdGlvbi4KKyMKK3ByaXNtMTJ8cDEyfFAxMnxNREMgUHJpc20tMTIgaW4gQU5TSSBtb2RlLAorCXVzZT1wOSwKKworIyBwMTItdzogUHJpc20tMTIgaW4gMTMyIGNvbHVtbiBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgJ1dpZGUnIHZlcnNpb24gb2YgcDEyLgorIworcHJpc20xMi13fHAxMi13fFAxMi1XfE1EQyBQcmlzbS0xMiBpbiAxMzIgY29sdW1uIG1vZGUsCisJdXNlPXA5LXcsCisKKyMgcDEyLW06IFByaXNtLTEyIGluIE1EQyBlbXVsYXRpb24gbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFAxMiB0ZXJtaW5hbCBpbiBNREMgZW11bGF0aW9uIG1vZGUuCisjIFNpbWlsYXIgdG8gcDggZGVmaW5pdGlvbi4KKyMgSW5zZXJ0aW9uIGFuZCBkZWxldGlvbiBvcGVyYXRpb25zIHBvc3NpYmxlLgorIworcHJpc20xMi1tfHAxMi1tfFAxMi1NfE1EQyBQcmlzbS0xMiBpbiBNREMgZW11bGF0aW9uIG1vZGUsCisJdXNlPXA5LTgsCisKKyMgcDEyLW0tdzogUHJpc20tMTIgaW4gTURDIGVtdWxhdGlvbiBhbmQgMTMyIGNvbHVtbiBtb2RlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFAxMiB0ZXJtaW5hbCBpbiBNREMgZW11bGF0aW9uIG1vZGUgYW5kIDEzMiBjb2x1bW4gbW9kZS4KKyMKK3ByaXNtMTItbS13fHAxMi1tLXd8UDEyLU0tV3xNREMgUHJpc20tMTIgaW4gTURDIGVtdWxhdGlvbiBhbmQgMTMyIGNvbHVtbiBtb2RlLAorCXVzZT1wOS04LXcsCisKKyMgcDE0OiBQcmlzbS0xNCBpbiBBTlNJSSBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBTZWUgcDkgZGVmaW5pdGlvbi4KKyMKK3ByaXNtMTR8cDE0fFAxNHxNREMgUHJpc20tMTQgaW4gQU5TSUkgbW9kZSwKKwl1c2U9cDksCisKKyMgcDE0LXc6IFByaXNtLTE0IGluIDEzMiBjb2x1bW4gbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjICdXaWRlJyB2ZXJzaW9uIG9mIHAxNC4KKyMKK3ByaXNtMTQtd3xwMTQtd3xQMTQtV3xNREMgUHJpc20tMTQgaW4gMTMyIGNvbHVtbiBtb2RlLAorCXVzZT1wOS13LAorCisjIHAxNC1tOiBQcmlzbS0xNCBpbiBNREMgZW11bGF0aW9uIG1vZGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBQMTQgdGVybWluYWwgaW4gTURDIGVtdWxhdGlvbiBtb2RlLgorIyBTaW1pbGFyIHRvIHA4IGRlZmluaXRpb24uCisjIEluc2VydGlvbiBhbmQgZGVsZXRpb24gb3BlcmF0aW9ucyBwb3NzaWJsZS4KKyMKK3ByaXNtMTQtbXxwMTQtbXxQMTQtTXxNREMgUHJpc20tMTQgaW4gTURDIGVtdWxhdGlvbiBtb2RlLAorCXVzZT1wOS04LAorCisjIHAxNC1tLXc6IFByaXNtLTE0IGluIE1EQyBlbXVsYXRpb24gYW5kIDEzMiBjb2x1bW4gbW9kZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBQMTQgdGVybWluYWwgaW4gTURDIGVtdWxhdGlvbiBtb2RlIGFuZCAxMzIgY29sdW1uIG1vZGUuCisjCitwcmlzbTE0LW0td3xwMTQtbS13fFAxNC1NLVd8TURDIFByaXNtLTE0IGluIE1EQyBlbXVsYXRpb24gYW5kIDEzMiBjb2x1bW4gbW9kZSwKKwl1c2U9cDktOC13LAorCisjIEVuZCBvZiBNY0Rvbm5lbGwgSW5mb3JtYXRpb24gU3lzdGVtcyBQcmlzbSBkZWZpbml0aW9ucworCisjIFRoZXNlIHRoaW5ncyB3ZXJlIHBvcHVsYXIgaW4gdGhlIFBpY2sgZGF0YWJhc2UgY29tbXVuaXR5IGF0IG9uZSB0aW1lCisjIEZyb206IEdlb3JnZSBMYW5kIDxnZW9yZ2VsYW5kQGFvbC5jb20+IDI0IFNlcCAxOTk2CitwOGdsfHByaXNtOGdsfE1jRG9ubmVsbC1Eb3VnbGFzIFByaXNtLTggYWx0ZXJuYXRlIGRlZmluaXRpb24sCisJYW0sIGJ3LCBocywgbWlyLAorCWNvbHMjODAsIGxpbmVzIzI0LCBtYSMxLCB3c2wjNzgsIHhtYyMxLAorCWJlbD1eRywgYmxpbms9XkNCLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XlUsIGN1ZDE9XkosIGN1ZjE9XkYsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPV5aLCBkY2gxPVxzXkgsIGRpbT1eQ0EsIGRsMT1eUCwKKwllZD1cRUosIGVsPVxFSywgaG9tZT1eQSwgaW5kPV5KLCBpbnZpcz1eQ0gsIGticz1eSCwga2N1YjE9XlUsCisJa2N1ZDE9XkosIGtjdWYxPV5GLCBrY3V1MT1eWiwga2RjaDE9XHNeSCwga2RsMT1eUCwga2VkPVxFSiwKKwlrZWw9XEVLLCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTI9XkFKXHIsIGtmMTM9XkFLXHIsCisJa2YxND1eQUxcciwga2YxNT1eQU1cciwga2YxNj1eQU5cciwga2YxNz1eQU9cciwga2YyPV5BQVxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eQSwgbGYxPUYxLCBsZjEwPUYxMCwgbGYyPUYyLAorCWxmMz1GMywgbGY0PUY0LCBsZjU9RjUsIGxmNj1GNiwgbGY3PUY3LCBsZjg9RjgsIGxmOT1GOSwgbmVsPV5KXk0sCisJcGFkPVwwLCByZXY9XkNELCBybXNvPV5DXHMsIHJtdWw9XkNccywgc2dyMD1eQ1xzLCBzbXNvPV5DRSwKKwlzbXVsPV5DMCwKKworIyMjIyBNaWNyb3Rlcm0gKGFjdCwgbWltZSkKKyMKKyMgVGhlIG1pbWUxIGVudHJpZXMgcmVmZXIgdG8gdGhlIE1pY3JvdGVybSBNaW1lIEkgb3IgTWltZSBJSS4KKyMgVGhlIGRlZmF1bHQgbWltZSBpcyBhc3N1bWVkIHRvIGJlIGluIGVuaGFuY2VkIGFjdCBpdiBtb2RlLgorIworCisjIE5ldyAic2FmZSIgY3Vyc29yIG1vdmVtZW50ICg1Lzg3KSBmcm9tIDxyZXVzc0B1bWQ1LnVtZC5lZHU+LiAgUHJldmVudHMKKyMgZnJlYWtvdXQgd2l0aCBvdXQtb2YtcmFuZ2UgYXJncyBvbiBTeXRlayBtdWx0aXBsZXhvcnMuICBObyA8c21zbz1eTj4gYW5kCisjIDxybXNvPV5OPiBzaW5jZSAgaXQgZ2V0cyBjb25mdXNlZCBhbmQgaXQncyB0b28gZGltIGFueXdheS4gIE5vIDxpY2gxPgorIyBzaW5jZSBTeXRlayBpbnNpc3RzIF5TIG1lYW5zIHhvZmYuCisjIChhY3Q0OiBmb3VuZCAiOmljPTJeUzplaT06aW09OmlwPS4xKl5WOiIgY29tbWVudGVkIG91dCBpbiA4LjMgLS0gZXNyKQorYWN0NHxtaWNyb3Rlcm18bWljcm90ZXJtIGFjdCBpdiwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDEyLz4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5LLCBjdWYxPV5YLAorCWN1cD1cMDI0JXAxJXsyNH0lKyVjJXAyJXAyJT8lezQ3fSU+JXQlezQ4fSUrJTslezgwfSUrJWMsCisJY3V1MT1eWiwgZGNoMT1cMDA0JDwuMSovPiwgZGwxPVwwMjckPDIuMyovPiwKKwllZD1cMDM3JDwyLjIqLz4sIGVsPVwwMzYkPC4xKi8+LCBob21lPV5dLAorCWlsMT1cMDAxPDIuMyovPiwgaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9XkssIGtjdWYxPV5YLAorCWtjdXUxPV5aLAorIyBUaGUgcGFkZGluZyBvbiA6c3I6IGFuZCA6dGE6IGZvciBhY3Q1IGFuZCBtaW1lIGlzIGEgZ3Vlc3MgYW5kIG5vdCBmaW5hbC4KKyMgVGhlIGFjdCA1IGhhcyBoYXJkd2FyZSB0YWJzLCBidXQgdGhleSBhcmUgaW4gY29sdW1ucyA4LCAxNiwgMjQsIDMyLCA0MSAoISkuLi4KKyMgKG1pY3JvdGVybTU6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT09XlpeUF5YbF5LajoiIC0tIGVzcikKK2FjdDV8bWljcm90ZXJtNXxtaWNyb3Rlcm0gYWN0IHYsCisJa2N1YjE9XkgsIGtjdWQxPV5LLCBrY3VmMT1eWCwga2N1dTE9XlosIHJpPVxFSCQ8Mz4sIHVjPV5IXEVBLAorCXVzZT1hY3Q0LAorIyBNaW1lcyB1c2luZyBicmlnaHRuZXNzIGZvciBzdGFuZG91dC4gIEhhbGYgYnJpZ2h0IGlzIHJlYWxseSBkaW0gdW5sZXNzCisjIHlvdSB0dXJuIHVwIHRoZSBicmlnaHRuZXNzIHNvIGZhciB0aGF0IGxpbmVzIHNob3cgdXAgb24gdGhlIHNjcmVlbi4KK21pbWUtZmJ8ZnVsbCBicmlnaHQgbWltZTEsCisJaXMyPV5TXEUsIHJtc289XlMsIHNtc289XlksIHVzZT1taW1lLAorbWltZS1oYnxoYWxmIGJyaWdodCBtaW1lMSwKKwlpczI9XllcRSwgcm1zbz1eWSwgc21zbz1eUywgdXNlPW1pbWUsCisjIChtaW1lOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XlggXkteSl5aXlA6IjsgcmVtb3ZlZCAiOmRvPV5LOiIgdGhhdCBvdmVycm9kZQorIyB0aGUgbW9yZSBwbGF1c2libGUgIjpkbz1eSjoiIC0tIGVzcikKKyMgdWMgd2FzIGF0IG9uZSB0aW1lIGRpc2FibGVkIHRvIGdldCBhcm91bmQgYSBjdXJzZXMgYnVnLCBiZSB3YXJ5IG9mIGl0CittaW1lfG1pbWUxfG1pbWUyfG1pbWVpfG1pbWVpaXxtaWNyb3Rlcm0gbWltZTEsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzksCisJYmVsPV5HLCBjbGVhcj1eXV5DLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eWCwKKwljdXA9XDAyNCVwMSV7MjR9JSslYyVwMiVwMiU/JXszMn0lPiV0JXs0OH0lKyU7JXs4MH0lKyVjLAorCWN1dTE9XlosIGRsMT1cMDI3JDw4MD4sIGVkPV5fLCBlbD1eXiwgaG9tZT1eXSwgaHQ9XDAxMSQ8Mj4sCisJaWwxPVwwMDEkPDgwPiwgaW5kPV5KLCBpczI9XlNcRV5RLCBrY3ViMT1eSCwga2N1ZDE9XkssCisJa2N1ZjE9XlgsIGtjdXUxPV5aLCByaT1cMDIyJDwzPiwgdWM9XlUsCisjIFRoZXNlIHRlcm1jYXBzIChmb3IgbWltZTJhKSBwdXQgdGhlIHRlcm1pbmFsIGluIGxvdyBpbnRlbnNpdHkgbW9kZQorIyBzaW5jZSBoaWdoIGludGVuc2l0eSBtb2RlIGlzIHNvIG9ibm94aW91cy4KK21pbWUyYS1zfG1pY3JvdGVybSBtaW1lMmEgKGVtdWxhdGluZyBhbiBlbmhhbmNlZCBzb3JvYyBpcTEyMCksCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVJLCBkY2gxPVxFRCwKKwlkbDE9XDAyNyQ8MjAqPiwgZWQ9XEVKJDwyMCo+LCBlbD1cRUssIGhvbWU9Xl4sCisJaWwxPVwwMDEkPDIwKj4sIGluZD1eSiwgaXA9JDwyPiwgaXMyPVxFKSwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywgcmk9XEVJLCBybWlyPV5aLCBybXNvPVxFOywgcm11bD1cRTcsCisJc21pcj1cRUUsIHNtc289XEVcOiwgc211bD1cRTYsCisjIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBtb2RlIChidXQgXlggY2FuJ3QgYmUgdXNlZCBhcyBhIGtpbGwgY2hhcmFjdGVyKQorbWltZTJhfG1pbWUyYS12fG1pY3JvdGVybSBtaW1lMmEgKGVtdWxhdGluZyBhbiBlbmhhbmNlZCB2dDUyKSwKKwlPVGJzLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVMLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9Xk4sCisJZGwxPVwwMjckPDIwKj4sIGVkPVxFUSQ8MjAqPiwgZWw9XEVQLCBob21lPVxFSCwgaHQ9XkksCisJaWwxPVwwMDEkPDIwKj4sIGluZD1eSiwgaXA9JDwyPiwgaXMyPV5ZLCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwgcmk9XEVBLCBybWlyPV5aLCBybXNvPVxFOSwKKwlybXVsPVxFNSwgc21pcj1eTywgc21zbz1cRTgsIHNtdWw9XEU0LAorIyAobWltZTNhOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XlggXkteSl5aXlA6IiAtLSBlc3IpCittaW1lM2F8bWltZTEgZW11bGF0aW5nIDNhLAorCWFtQCwKKwlrY3ViMT1eSCwga2N1ZDE9XkssIGtjdWYxPV5YLCBrY3V1MT1eWiwgdXNlPWFkbTNhLAorbWltZTNheHxtaW1lLTNheHxtaW1lMSBlbXVsYXRpbmcgZW5oYW5jZWQgM2EsCisJaXQjOCwKKwlkbDE9XDAyNyQ8ODA+LCBlZD1eXywgZWw9XlgsIGh0PVwwMTEkPDM+LCBpbDE9XDAwMSQ8ODA+LAorCXVzZT1taW1lM2EsCisjIFdlZCBNYXIgIDkgMTg6NTM6MjEgMTk4MworIyBXZSBydW4gb3VyIHRlcm1pbmFscyBhdCAyNDAwIGJhdWQsIHNvIHRoZXJlIG1pZ2h0IGJlIHNvbWUgdGltaW5nIHByb2JsZW1zIGF0CisjIGhpZ2hlciBzcGVlZHMuIFRoZSBtYWpvciBpbXByb3ZlbWVudHMgaW4gdGhpcyBtb2RlbCBhcmUgdGhlIHRlcm1pbmFsIG5vdworIyBzY3JvbGxzIGRvd24gYW5kIGluc2VydCBtb2RlIHdvcmtzIHdpdGhvdXQgcmVkcmF3aW5nIHRoZSByZXN0IG9mIHRoZSBsaW5lCisjIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLiBUaGlzIGlzIGRvbmUgd2l0aCBhIGJpdCBvZiBhIGtsdWRnZSB1c2luZyB0aGUKKyMgZXhpdCBncmFwaGljcyBtb2RlIHRvIGdldCBvdXQgb2YgaW5zZXJ0LCBidXQgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGh1cnQKKyMgYW55dGhpbmcgd2hlbiB1c2luZyB2aSBhdCBsZWFzdC4gSWYgeW91IGhhdmUgc29tZSB1c2VycyB1c2luZyBhY3Q0cyB3aXRoCisjIHByb2dyYW1zIHRoYXQgdXNlIGN1cnNlcyBhbmQgZ3JhcGhpY3MgbW9kZSB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbS4KK21pbWUzMTR8bW0zMTR8bWltZSAzMTQsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XkwsIGN1YjE9XkgsIGN1ZjE9XlgsIGN1cD1cMDI0JXAxJWMlcDIlYywgY3V1MT1eWiwKKwlkY2gxPV5ELCBkbDE9XlcsIGVkPV5fLCBlbD1eXiwgaG9tZT1eXSwgaHQ9XkksIGlsMT1eQSwga2N1YjE9XkgsCisJa2N1ZDE9XkssIGtjdWYxPV5YLCBrY3V1MT1eWiwgcm1pcj1eViwgc21pcj1eUywKKyMgTWljcm90ZXJtIG1pbWUgMzQwIGZyb20gVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4KK21tMzQwfG1pbWUzNDB8bWltZSAzNDAsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XDAzMiQ8MTIvPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFIyQ8Mi4xKi8+LCBkbDE9XEVWJDw0OS42Lz4sIGVkPVwwMzckPDIqLz4sCisJZWw9XEVMJDwyLjEvPiwgaHQ9XkksIGlsMT1cRVUkPDQ2Lz4sIGluZD1eSiwgaXMyPVxFXCwsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdXUxPV5LLCBuZWw9Xk1eSiwKKyMgVGhpcyBjYW1lIGZyb20gVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4gbWFya2VkICJhc3RybyB0ZXJtY2FwIGZvciBqb29zcyIuCisjIChtdDQ1MjAtcnY6IHJlbW92ZWQgb2Jzb2xldGUgIjprbiM0OiIgYW5kIGluY29ycmVjdCAiOnJpPVxFW0M6IjsKKyMgYWxzbyBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkICBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorbXQ0NTIwLXJ2fG1pY3JvLXRlcm0gNDUyMCByZXZlcnNlIHZpZGVvLAorCWFtLCBocywgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjODAsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbMFZcRTgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFN1xFWzBVLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XEVbPzVsJDwyMDAvPlxFWz81aCwKKwlmc2w9XEVbPzVsXEVbPzVoLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEUoQlxFWzJsXEU+XEVbMjBsXEVbPzNsXEVbPzVoXEVbPzdoXEVbMTsyNHJcRVsyNDsxSFxFW0hcRVtKLAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2hvbWU9XEVbSCwKKwlsbD1cRVsyNDsxSCwgbmVsPVxFRSwgcmM9XEU4LCByZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwKKwlyaT1cRU0sIHJtYW09XEVbPzdsLCBybXNvPVxFWzBtLCBybXVsPVxFWzI0bSwKKwlyczE9XEUoQlxFWzJsXEU+XEVbMjBsXEVbPzNsXEVbPzVoXEVbPzdoXEVbSFxFW0osCisJc2M9XEU3LCBzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVtnLCB0c2w9XEVbMjU7MUgsCisKKyMgRnJpIEF1ZyAgNSAwODoxMTo1NyAxOTgzCisjIFRoaXMgZW50cnkgd29ya3MgZm9yIHRoZSBlcmdvIDQwMDAgd2l0aCB0aGUgZm9sbG93aW5nIHNldHVwczoKKyMgYW5zaSx3cmFwYXJvdW5kLG5ld2xpbmUgZGlzYWJsZWQsIHhvbi94b2ZmIGRpc2FibGVkIGluIGJvdGgKKyMgc2V0dXAgYSAmIGMuCisjCisjIFdBUk5JTkchISEgVGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIEVSR08gNDAwMCBtaWNyb2NvZGUKKyMgQmUgYWR2aXNlZCB0aGF0IHZlcnkgZWFybHkgdmVyc2lvbnMgRE8gTk9UIFdPUksgUklHSFQgISEKKyMgTWljcm90ZXJtIGRvZXMgaGF2ZSBhIFJPTSBleGNoYW5nZSBwcm9ncmFtLSB1c2UgaXQgb3IgbG9zZSBiaWcKKyMgKGVyZ280MDA6IGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2VyZ280MDAwfG1pY3JvdGVybSBlcmdvIDQwMDAsCisJZGEsIGRiLCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzY2LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFWzJKJDw4MD4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwlkY2gxPVxFWzFQJDw4MD4sIGRsMT1cRVsxTSQ8NSo+LCBlZD1cRVswSiQ8MTU+LAorCWVsPVxFWzBLJDwxMz4sIGh0PV5JLCBpbDE9XEVbMUwkPDUqPiwgaW5kPVxFRCQ8MjAqPiwKKwlpczI9XEU8XEU9XEVbPzFsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoJDwzMDA+LAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGxmMT1wZjEsIGxmMj1wZjIsIGxmMz1wZjMsCisJbGY0PXBmNCwgcmk9XEVNJDwyMCo+LCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFPSQ8ND4sIHJtc289XEVbbSQ8MjA+LCBzZ3IwPVxFW20kPDIwPiwKKwlzbWFtPVxFWz83bSwgc21pcj1cRVs0aCQ8Nj4sIHNta3g9XEU9JDw0PiwKKwlzbXNvPVxFWzdtJDwyMD4sCisKKyMjIyMgTkNSCisjCisjIE5DUidzIHRlcm1pbmFsIGdyb3VwIHdhcyBtZXJnZWQgd2l0aCBBVCZUJ3Mgd2hlbiBBVCZUIGJvdWdodCB0aGUgY29tcGFueS4KKyMgRm9yIHdoYXQgaGFwcGVuZWQgdG8gdGhhdCBncm91cCwgc2VlIHRoZSBBRERTIHNlY3Rpb24uCisjCisjIFRoZXJlIGlzIGFuIE5DUjQxMDMgdGVybWluYWwgdGhhdCdzIGp1c3QgYSByZS1iYWRnZWQgV3lzZS01MC4KKyMKKworIyBUaGUgZm9sbG93aW5nIHZlbmRvci1zdXBwbGllZCB0ZXJtY2FwcyB3ZXJlIGNhcHR1cmVkIGZyb20gdGhlIEJvdW5kbGVzcworIyBUZWNobm9sb2dpZXMgc2l0ZSwgOCBNYXJjaCAxOTk4LiAgSSByZW1vdmVkIGFsbC11cHBlci1jYXNlIG5hbWVzIHRoYXQgd2VyZQorIyBpZGVudGljYWwsIGV4Y2VwdCBmb3IgY2FzZSwgdG8gbG93ZXItY2FzZSBvbmVzLiAgSSBhbHNvIHVuY29tbWVudGVkIHRoZSBhY3NjCisjIGNhcGFiaWxpdGllcy5YCisjCisjIFRoZSBJbnRlY29sb3IgZW11bGF0aW9uIG9mIHRoZSBOQ1IgMjkwMC8yNjBDIGNvbG9yIHRlcm1pbmFsIGlzIGJhc2ljYWxseSBhCisjIERFQyB2dDIwMC8zMDAgd2l0aCBjb2xvciBjYXBhYmlsaXRpZXMgYWRkZWQuCituY3IyNjBpbnRhbnxOQ1IgSW50ZWNvbG9yIGVtdWxhdGlvbiBvZiB0aGUgMjkwMF8yNjBDIHdpdGggYW4gQU5TSSBrZXlib2FyZCwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJb3A9XEVbMG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJdXNlPW5jcjI2MHZ0MzAwYW4sCisjIFRoZSBJbnRlY29sb3IgZW11bGF0aW9uIG9mIHRoZSBOQ1IgMjkwMC8yNjBDIGNvbG9yIHRlcm1pbmFsIGlzIGJhc2ljYWxseSBhCisjIERFQyB2dDIwMC8zMDAgd2l0aCBjb2xvciBjYXBhYmlsaXRpZXMgYWRkZWQuCituY3IyNjBpbnR3YW58TkNSIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIDI5MDBfMjYwQyB3aXRoIGFuIEFOU0kga2V5Ym9hcmQsCisJY29sb3JzIzgsIHBhaXJzIzY0LAorCW9wPVxFWzBtLCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXVzZT1uY3IyNjB2dDMwMHdhbiwKKyMgVGhlIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIE5DUiAyOTAwLzI2MEMgY29sb3IgdGVybWluYWwgaXMgYmFzaWNhbGx5IGEKKyMgREVDIHZ0MjAwLzMwMCB3aXRoIGNvbG9yIGNhcGFiaWxpdGllcyBhZGRlZC4KK25jcjI2MGludHBwfE5DUiBJbnRlY29sb3IgZW11bGF0aW9uIG9mIHRoZSAyOTAwXzI2MEMgd2l0aCBhIFBDKyBrZXlib2FyZCwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJb3A9XEVbMG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJdXNlPW5jcjI2MHZ0MzAwcHAsCisjIFRoZSBJbnRlY29sb3IgZW11bGF0aW9uIG9mIHRoZSBOQ1IgMjkwMC8yNjBDIGNvbG9yIHRlcm1pbmFsIGlzIGJhc2ljbHkgYQorIyBERUMgdnQyMDAvMzAwIHdpdGggY29sb3IgY2FwYWJpbGl0aWVzIGFkZGVkLgorbmNyMjYwaW50d3BwfE5DUiBJbnRlY29sb3IgZW11bGF0aW9uIG9mIHRoZSAyOTAwXzI2MEMgd2l0aCBhIFBDKyBrZXlib2FyZCBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29sb3JzIzgsIHBhaXJzIzY0LAorCW9wPVxFWzBtLCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXVzZT1uY3IyNjB2dDMwMHdwcCwKKyMgVGhpcyBkZWZpbml0aW9uIGZvciBWaWV3UG9pbnQgc3VwcG9ydHMgc2V2ZXJhbCBhdHRyaWJ1dGVzLiAgVGhpcyBtZWFucworIyB0aGF0IGl0IGhhcyBtYWdpYyBjb29raWVzIChleHRyYSBzcGFjZXMgd2hlcmUgdGhlIGF0dHJpYnV0ZXMgYmVnaW4pLgorIyBTb21lIGFwcGxpY2F0aW9ucyBkbyBub3QgZnVuY3Rpb24gd2VsbCB3aXRoIG1hZ2ljIGNvb2tpZXMuICBUaGUgU3lzdGVtCisjIEFkbWluaXN0cmF0b3IncyBTaGVsbCBpbiBOQ1IgVW5peCBTVlI0IDEuMDMgaXMgb25lIHN1Y2ggYXBwbGljYXRpb24uCisjIElmIHN1cHBvcnRpbmcgdmFyaW91cyBhdHRyaWJ1dGVzIGlzIG5vdCB2aXRhbCwgJ3htYyMxJyBhbmQgdGhlIGV4dHJhCisjIGF0dHJpYnV0ZXMgY2FuIGJlIHJlbW92ZWQuCisjIE1hcHBpbmcgdG8gQVNDSUkgY2hhcmFjdGVyIHNldCAoJ2Fjc2MnIGNhcGFiaWxpdHkpIGNhbiBhbHNvIGJlCisjIHJlc3RvcmVkIGlmIG5lZWRlZC4KK25jcjI2MHZwcHB8TkNSIDI5MDBfMjYwIHZpZXdwb2ludCwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIG5sYWIjMzIsIHhtYyMxLAorCWFjc2M9MDdhP2g7ajVrM2wybTFuOHFcOnQ0dTl2PXcweDYsIGJlbD1eRywgYmxpbms9XEVHMiwKKwljYnQ9XEVJLCBjaXZpcz1cRWAwLCBjbGVhcj1cMDE0JDw0MD4sIGNub3JtPVxFYDUsCisJY3I9XHIkPDI+LCBjdWIxPVwwMTAkPDI+LCBjdWQxPVxuJDwyPiwgY3VmMT1cMDA2JDwyPiwKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDw1PiwgY3V1MT1cMDMyJDwyPiwKKwlkY2gxPVxFVyQ8Mj4sIGRpbT1cRUdwLCBkbDE9XEVsJDwyPiwgZHNsPVxFYGMsIGVkPVxFayQ8Mj4sCisJZWw9XEVLJDwyPiwgZnNsPV5NLCBob21lPVwwMzYkPDI+LCBodD1eSSwgaHRzPVxFMSwKKwlpbDE9XEVNJDwyPiwgaW5kPVxuJDwyPiwgaW52aXM9XEVHMSwKKwlpczI9XEVlNlxFfiUkPDEwMD5cRStcRWBcOlxFZC9cRWAxXEVPXEVlNFxFY0AwQFxFY0AxQVxFY0IwXEVjQzFcRWU3JDwxMDA+LAorCWtEQz1cRWwsIGtFTkQ9XEVrLCBrSE9NPV5BLCBrUFJUPVxFNywga1JJVD1eRiwga2ExPV5BLCBrYTM9XEVKLAorCWticz1eSCwga2MxPVxFVCwga2MzPVxFSiwga2N1YjE9XlUsIGtjdWQxPV5KLCBrY3VmMT1eRiwKKwlrY3V1MT1eWiwga2RjaDE9XEVXLCBrZW5kPVxFSywga2YxPV5CMVxyLCBrZjEwPV5CXDpcciwKKwlrZjExPV5CO1xyLCBrZjEyPV5CPFxyLCBrZjEzPV5CPVxyLCBrZjE0PV5CPlxyLCBrZjE1PV5CP1xyLAorCWtmMTY9XkJAXHIsIGtmMTc9XkIhXHIsIGtmMTg9XkIiXHIsIGtmMTk9XkIjXHIsIGtmMj1eQjJcciwKKwlrZjIwPV5CJFxyLCBrZjIxPVwwMDIlXk0sIGtmMjI9XkImXHIsIGtmMjM9XkInXHIsCisJa2YyND1eQihcciwga2YyNT1eQilcciwga2YyNj1eQipcciwga2YyNz1eQitcciwKKwlrZjI4PV5CXCxcciwga2YyOT1eQi1cciwga2YzPV5CM1xyLCBrZjMwPV5CLlxyLCBrZjMxPV5CL1xyLAorCWtmMzI9XkIwXHIsIGtmND1eQjRcciwga2Y1PV5CNVxyLCBrZjY9XkI2XHIsIGtmNz1eQjdcciwKKwlrZjg9XkI4XHIsIGtmOT1eQjlcciwga2hvbWU9XkEsIGtpY2gxPVxFcSwga25wPVxFSiwga3BwPVxFSiwKKwlrcHJ0PVxFUCwgbGw9XDAwMSQ8NT4sIG1jMD1cRVAkPDEwMD4sIG1jND1eVCwgbWM1PV5SLAorCW1yY3VwPVxFd0AlcDElezQ4fSUrJWMlcDIlezMyfSUrJWMlcDMlezMyfSUrJWMkPDU+LAorCW5lbD1cMDM3JDwyPiwgcmV2PVxFRzQsIHJpPVxFaiQ8Mj4sIHJtYWNzPVxFY0IwXEVIXDAwMywKKwlybWlyPVxFciwgcm1zbz1cRUcwLCBybXVsPVxFRzAsIHJteG9uPVxFYzIwLAorCXJzMj1cRWU2XEV+JSQ8MTAwPlxFK1xFYFw6XEVkL1xFYDFcRU9cRWU0XEVjQDBAXEVjQDFBXEVjQjBcRWNDMVxFZTckPDEwMD4sCisJc2dyMD1cRUcwXEVIXDAwMywgc21hY3M9XEVjQjFcRUhcMDAyLCBzbWlyPVxFcSwKKwlzbXNvPVxFRzQsIHNtdWw9XEVHOCwgc214b249XEVjMjEsIHRzbD1cRUYsCituY3IyNjB2cHdwcHxOQ1IgMjkwMF8yNjAgdmlld3BvaW50IHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwljdXA9XEVhJWklcDElZFIlcDIlZEMkPDMwPiwKKwlpczI9XEVlNlxFfiUkPDEwMD5cRStcRWA7XEVkL1xFYDFcRU9cRWU0XEVjQDBAXEVjQDFBXEVjQjBcRWNDMVxFZTckPDEwMD4sCisJcnMyPVxFZTZcRX4lJDwxMDA+XEUrXEVgO1xFZC9cRWAxXEVPXEVlNFxFY0AwQFxFY0AxQVxFY0IwXEVjQzFcRWU3JDwxMDA+LAorCXVzZT1uY3IyNjB2cHBwLAorbmNyMjYwdnQxMDBhbnxOQ1IgMjkwMF8yNjAgdnQxMDAgd2l0aCBhbnNpIGt5YmQsCisJYW0sIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbmxhYiMzMiwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcXFzc3R0dXV2dnd3eHh+fiwgYmVsPV5HLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFWzJKXEVbMTsxSCQ8MjA+LCBjbm9ybT1cRVs/MjVoLCBjcj1cciQ8MT4sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWREJDw1PiwKKwljdWIxPVxFW0QkPDU+LCBjdWQ9XEVbJXAxJWRCJDw1PiwgY3VkMT1cRVtCJDw1PiwKKwljdWY9XEVbJXAxJWRDJDw1PiwgY3VmMT1cRVtDJDw1PiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDEwPiwgY3V1PVxFWyVwMSVkQSQ8NT4sCisJY3V1MT1cRVtBJDw1PiwgZGNoPVxFWyVwMSVkUCQ8NT4sIGRjaDE9XEVbMVAkPDU+LAorCWRsPVxFWyVwMSVkTSQ8NT4sIGRsMT1cRVtNJDw1PiwgZHNsPVxFWzAkflxFWzEkfiwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVswSiQ8NT4sIGVsPVxFWzBLJDwzPiwgZWwxPVxFWzFLJDwzPiwKKwlmc2w9XEVbMCR9LCBob21lPVxFW0gkPDE+LCBocGE9XEVbJXAxJWRHJDw0MD4sIGh0PV5JLAorCWh0cz1cRUgsIGljaD1cRVslcDElZEAkPDU+LCBpbD1cRVslcDElZEwkPDU+LAorCWlsMT1cRVtMJDw1PiwgaW5kPVxFRCQ8NT4sIGluZG49XEVbJXAxJWRFJDw1PiwKKwlpbnZpcz1cRVs4bSwKKwlpczI9XEVbIXBcRVs/NzsxOTs2N2hcRVs/MTszOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZGNoMT1cRVszfiwga2ZuZD1cRVsxfiwga2hscD1cRVsyOH4sIGtpY2gxPVxFWzJ+LAorCWtucD1cRVs2fiwga3BwPVxFWzV+LCBrcmRvPVxFWzI5fiwga3NsdD1cRVs0fiwgbmVsPVxFRSQ8NT4sCisJcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSQ8NT4sIHJtYWNzPV5PLCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzBtLCBybXVsPVxFWzBtLAorCXJzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDIwPiwKKwlzZ3IwPVxFWzBtXDAxNyQ8MjA+LCBzbWFjcz1eTiwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVsxOzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdHNsPVxFWzIkflxFWzEkfSwgdnBhPVxFWyVwMSVkZCQ8NDA+LCB1c2U9dnQyMjAra2V5cGFkLAorbmNyMjYwdnQxMDB3YW58TkNSIDI5MDBfMjYwIHZ0MTAwIHdpZGUgbW9kZSBhbnNpIGt5YmQsCisJY29scyMxMzIsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwzMD4sCisJaXMyPVxFWyFwXEVbPzM7NzsxOTs2N2hcRVs/MTs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlyczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz8xOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCXVzZT1uY3IyNjB2dDEwMGFuLAorbmNyMjYwdnQxMDBwcHxOQ1IgMjkwMF8yNjAgdnQxMDAgd2l0aCBQQysga3liZCwKKwlpczI9XEVbIXBcRVs/NzsxOTs2N2hcRVs/MTszOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCWthMT1cRVtILCBrYTM9XEVPdSwga2IyPVxFW1YsIGtjMz1cRVtVLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzR+LAorCWtlbmQ9XEVbNX4sIGtob21lPVxFWzJ+LCBraWNoMT1cRVsxfiwga25wPVxFWzZ+LCBrcHA9XEVbM34sCisJbGYxPXBmMSwgbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwgcm1reD1cRT4sCisJcnMyPVxFWyFwXEVbPzc7MTk7NjdoXEVbPzE7Mzs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlzbWt4PVxFPSwgdXNlPW5jcjI2MHZ0MTAwYW4sCituY3IyNjB2dDEwMHdwcHxOQ1IgMjkwMF8yNjAgdnQxMDAgd2lkZSBtb2RlIHBjKyAga3liZCwKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDMwPiwKKwlpczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz8xOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCXJzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzE7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJdXNlPW5jcjI2MHZ0MTAwcHAsCituY3IyNjB2dDIwMGFufE5DUiAyOTAwXzI2MCB2dDIwMCB3aXRoIGFuc2kga3liZCwKKwlhbSwgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBubGFiIzMyLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29xcXNzdHR1dXZ2d3d4eH5+LCBiZWw9XkcsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbMkpcRVsxOzFIJDwyMD4sIGNub3JtPVxFWz8yNWgsIGNyPVxyJDwxPiwKKwljc3I9XEVbJWklcDElZDslcDIlZHIkPDU+LCBjdWI9XEVbJXAxJWREJDw1PiwKKwljdWIxPVxFW0QkPDU+LCBjdWQ9XEVbJXAxJWRCJDw1PiwgY3VkMT1cRVtCJDw1PiwKKwljdWY9XEVbJXAxJWRDJDw1PiwgY3VmMT1cRVtDJDw1PiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDEwPiwgY3V1PVxFWyVwMSVkQSQ8NT4sCisJY3V1MT1cRVtBJDw1PiwgZGNoPVxFWyVwMSVkUCQ8NT4sIGRjaDE9XEVbMVAkPDU+LAorCWRsPVxFWyVwMSVkTSQ8NT4sIGRsMT1cRVtNJDw1PiwgZHNsPVxFWzAkflxFWzEkfiwKKwllY2g9XEVbJXAxJWRYJDw1PiwgZWQ9XEVbMEosIGVsPVxFWzBLJDw1PiwgZWwxPVxFWzFLJDw1PiwKKwlmc2w9XEVbMCR9LCBob21lPVxFW0gsIGhwYT1cRVslcDElZEckPDQwPiwgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCQ8NT4sIGlsPVxFWyVwMSVkTCQ8NT4sIGlsMT1cRVtMJDw1PiwKKwlpbmQ9XEVEJDw1PiwgaW5kbj1cRVslcDElZEUkPDU+LCBpbnZpcz1cRVs4bSwKKwlpczI9XEVbIXBcRVs/NzsxOTs2N2hcRVs/MTszOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZGNoMT1cRVszfiwga2YwPVxFT3ksIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVPUSwga2YyMD1cRVszNH4sIGtmMjE9XEVbMzF+LCBrZjIyPVxFWzMyfiwKKwlrZjIzPVxFWzMzfiwga2YyND1cRVszNH4sIGtmMjU9XEVbMzV+LCBrZjI2PVxFWzF+LAorCWtmMjc9XEVbMn4sIGtmMjg9XEVbM34sIGtmMjk9XEVbNH4sIGtmMz1cRU9SLCBrZjMwPVxFWzV+LAorCWtmMzE9XEVbNn4sIGtmMzI9XEVbN34sIGtmMzM9XEVbOH4sIGtmMzQ9XEVbOX4sCisJa2YzNT1cRVsxMH4sIGtmND1cRU9TLCBrZjU9XEVbTSwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwKKwlraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtyZG89XEVbMjl+LCBrc2x0PVxFWzR+LAorCW1jMD1cRVtpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNJDw1Piwgcm1hY3M9XDAxNyQ8MjA+LCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDIwPiwKKwlzZ3IwPVxFWzBtXDAxNyQ8MjA+LCBzbWFjcz1cMDE2JDwyMD4sIHNtYW09XEVbPzdoLAorCXNtaXI9XEVbNGgsIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVszZywgdHNsPVxFWzIkflxFWzEkfSwgdnBhPVxFWyVwMSVkZCQ8NDA+LAorCXVzZT12dDIyMCtrZXlwYWQsCituY3IyNjB2dDIwMHdhbnxOQ1IgMjkwMF8yNjAgdnQyMDAgd2lkZSBtb2RlIGFuc2kga3liZCwKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDMwPiwKKwlpczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz80bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSCQ8MjAwPiwKKwlyczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz80bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSCQ8MjAwPiwKKwl1c2U9bmNyMjYwdnQyMDBhbiwKK25jcjI2MHZ0MjAwcHB8TkNSIDI5MDBfMjYwIHZ0MjAwIHdpdGggcGMrIGt5YmQsCisJa2ExPVxFW0gsIGthMz1cRU91LCBrYjI9XEVbViwga2MzPVxFW1UsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbNH4sCisJa2VuZD1cRVsxfiwga2hvbWU9XEVbSCwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWxmMT1wZjEsIGxmMj1wZjIsIGxmMz1wZjMsIGxmND1wZjQsIHJta3g9XEU+LCBzbWt4PVxFPSwKKwl1c2U9bmNyMjYwdnQyMDBhbiwKK25jcjI2MHZ0MjAwd3BwfE5DUiAyOTAwXzI2MCB2dDIwMCB3aWRlIG1vZGUgcGMrICBreWJkLAorCWNvbHMjMTMyLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MzA+LAorCWlzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzE7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJcnMyPVxFWyFwXEVbPzM7NzsxOTs2N2hcRVs/MTs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwl1c2U9bmNyMjYwdnQyMDBwcCwKK25jcjI2MHZ0MzAwYW58TkNSIDI5MDBfMjYwIHZ0MzAwIHdpdGggYW5zaSBreWJkLAorCWFtLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIG5sYWIjMzIsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4fn4sIGJlbD1eRywKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVsySlxFWzE7MUgkPDIwPiwgY25vcm09XEVbPzI1aCwgY3I9XHIkPDE+LAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciQ8NT4sIGN1Yj1cRVslcDElZEQkPDU+LAorCWN1YjE9XEVbRCQ8NT4sIGN1ZD1cRVslcDElZEIkPDU+LCBjdWQxPVxFW0IkPDU+LAorCWN1Zj1cRVslcDElZEMkPDU+LCBjdWYxPVxFW0MkPDU+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MTA+LCBjdXU9XEVbJXAxJWRBJDw1PiwKKwljdXUxPVxFW0EkPDU+LCBkY2g9XEVbJXAxJWRQJDw1PiwgZGNoMT1cRVsxUCQ8NT4sCisJZGw9XEVbJXAxJWRNJDw1PiwgZGwxPVxFW00kPDU+LCBkc2w9XEVbMCR+XEVbMSR+LAorCWVjaD1cRVslcDElZFgkPDU+LCBlZD1cRVswSiwgZWw9XEVbMEskPDU+LCBlbDE9XEVbMUskPDU+LAorCWZzbD1cRVswJH0sIGhvbWU9XEVbSCwgaHBhPVxFWyVwMSVkRyQ8NDA+LCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRAJDw1PiwgaWw9XEVbJXAxJWRMJDw1PiwgaWwxPVxFW0wkPDU+LAorCWluZD1cRUQkPDU+LCBpbmRuPVxFWyVwMSVkRSQ8NT4sIGludmlzPVxFWzhtLAorCWlzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRVsxOzAld1xFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2RjaDE9XEVbM34sIGtmMD1cRU95LCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sCisJa2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sCisJa2YyMD1cRVszNH4sIGtmMjE9XEVbMzF+LCBrZjIyPVxFWzMyfiwga2YyMz1cRVszM34sCisJa2YyND1cRVszNH4sIGtmMjU9XEVbMzV+LCBrZjI2PVxFWzF+LCBrZjI3PVxFWzJ+LAorCWtmMjg9XEVbM34sIGtmMjk9XEVbNH4sIGtmMzA9XEVbNX4sIGtmMzE9XEVbNn4sIGtmMzI9XEVbN34sCisJa2YzMz1cRVs4fiwga2YzND1cRVs5fiwga2YzNT1cRVsxMH4sIGtmNT1cRVtNLCBrZjY9XEVbMTd+LAorCWtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtmbmQ9XEVbMX4sCisJa2hscD1cRVsyOH4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrcmRvPVxFWzI5fiwga3NsdD1cRVs0fiwgbWMwPVxFW2ksIG1jND1cRVs0aSwgbWM1PVxFWzVpLAorCW5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0kPDU+LCBybWFjcz1cMDE3JDwyMD4sCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwKKwlybXVsPVxFWzI0bSwKKwlyczI9XEVbIXBcRVs/NzsxOTs2N2hcRVs/MTszOzRsXEVbMTswJXdcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDIwPiwKKwlzZ3IwPVxFWzBtXDAxNyQ8MjA+LCBzbWFjcz1cMDE2JDwyMD4sIHNtYW09XEVbPzdoLAorCXNtaXI9XEVbNGgsIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVszZywgdHNsPVxFWzIkflxFWzEkfSwgdnBhPVxFWyVwMSVkZCQ8NDA+LAorCXVzZT12dDIyMCtrZXlwYWQsCituY3IyNjB2dDMwMHdhbnxOQ1IgMjkwMF8yNjAgdnQzMDAgd2lkZSBtb2RlIGFuc2kga3liZCwKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDMwPiwKKwlpczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz80bFxFWzE7MCV3XEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIJDwyMDA+LAorCXJzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzRsXEVbMTswJXdcRShCXEUpMFwwMTdcRVsySlxFWzE7MUgkPDIwMD4sCisJdXNlPW5jcjI2MHZ0MzAwYW4sCituY3IyNjB2dDMwMHBwfE5DUiAyOTAwXzI2MCB2dDMwMCB3aXRoIHBjKyBreWJkLAorCWthMT1cRVtILCBrYTM9XEVPdSwga2IyPVxFW1YsIGtjMz1cRVtVLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzR+LAorCWtlbmQ9XEVbMX4sIGtob21lPVxFW0gsIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlsZjE9cGYxLCBsZjI9cGYyLCBsZjM9cGYzLCBsZjQ9cGY0LCBybWt4PVxFPiwgc21reD1cRT0sCisJdXNlPW5jcjI2MHZ0MzAwYW4sCitOQ1IyNjBWVDMwMFdQUHxuY3IyNjB2dDMwMHdwcHxOQ1IgMjkwMF8yNjAgdnQzMDAgd2lkZSBtb2RlIHBjKyAga3liZCwKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDMwPiwKKwlpczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz8xOzRsXEVbMTswJXdcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJcnMyPVxFWyFwXEVbPzM7NzsxOTs2N2hcRVs/MTs0bFxFWzE7MCV3XEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCXVzZT1uY3IyNjB2dDMwMHBwLAorIyBUaGlzIHRlcm1pbmZvIGZpbGUgY29udGFpbnMgY29sb3IgY2FwYWJpbGl0aWVzIGZvciB0aGUgV3lzZTMyNSBlbXVsYXRpb24gb2YKKyMgdGhlIE5DUiAyOTAwLzI2MEMgY29sb3IgdGVybWluYWwuICBCZWNhdXNlIG9mIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbW1hbmQKKyMgKGVzY2FwZSBzZXF1ZW5jZSkgdXNlZCB0byBzZXQgY29sb3IgYXR0cmlidXRlcywgb25lIG9mIHRoZSBmb3JlL2JhY2tncm91bmQKKyMgY29sb3JzIG11c3QgYmUgcHJlc2V0IHRvIGEgZ2l2ZW4gdmFsdWUuIEkgaGF2ZSBzZXQgdGhlIGJhY2tncm91bmQgY29sb3IgdG8KKyMgYmxhY2suICBUaGUgdXNlciBjYW4gY2hhbmdlIHRoaXMgc2V0dXAgYnkgYWx0ZXJpbmcgdGhlIGxhc3Qgc2VjdGlvbiBvZiB0aGUKKyMgJ3NldGYnIGRlZmluaXRpb24uICBUaGUgZXNjYXBlIHNlcXVlbmNlIHRvIHNldCBjb2xvciBhdHRyaWJ1dGVzIGlzCisjCQlFU0MgZCB5IDxmb3JlZ3JvdW5kX2NvbG9yPiA8YmFja2dyb3VuZF9jb2xvcj4gMQorIyBJbiBhZGRpdGlvbiwgdGhlIGJhY2tncm91bmQgY29sb3IgY2FuIGJlIGNoYW5nZWQgdGhyb3VnaCB0aGUgZGVzayBhY2Nlc3Nvcmllcy4KKyMgVGhlIGNhcGFibGl0aXkgJ29wJyBzZXRzIGNvbG9ycyB0byBncmVlbiBvbiBibGFjayAoZGVmYXVsdCBjb21iaW5hdGlvbikuCisjCisjIE5PVEU6ICBUaGUgTkNSIFVuaXggU3lzdGVtIEFkbWluaXN0cmF0b3IncyBTaGVsbCB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseQorIyAJICAgIGlmIHRoZSAncGFpcnMnIGNhcGFiaWxpdHkgaXMgZGVmaW5lZC4gVW4tQ29tbWVudCB0aGUgJ3BhaXJzJworIwkgICAgY2FwYWJpbGl0eSBhbmQgcmVjb21waWxlIGlmIHlvdSB3aXNoIHRvIGhhdmUgaXQgaW5jbHVkZWQuCisjCituY3IyNjB3eTMyNXBwfE5DUiAyOTAwXzI2MCB3eXNlIDMyNSwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29sb3JzIzE2LCBjb2xzIzgwLCBsaW5lcyMyNCwgbmN2IzMzLCBubGFiIzMyLAorCWFjc2M9MDdhP2g7ajVrM2wybTFuOHFcOnQ0dTl2PXcweDYsIGJlbD1eRywgYmxpbms9XEVHMiwKKwljYnQ9XEVJLCBjaXZpcz1cRWAwLCBjbGVhcj1cRSokPDEwPiwgY25vcm09XEVgMSwgY3I9Xk0sCisJY3ViMT1cMDEwJDw1PiwgY3VkMT1cbiQ8NT4sIGN1ZjE9XDAxNCQ8NT4sCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MTA+LCBjdXUxPVwwMTMkPDU+LAorCWN2dmlzPVxFYDUsIGRjaDE9XEVXJDw1MD4sIGRsMT1cRVIkPDU+LCBkc2w9XEVgYywKKwllZD1cRXkkPDU+LCBlbD1cRXQkPDU+LCBmc2w9Xk0sIGhvbWU9XDAzNiQ8NT4sIGh0PV5JLAorCWh0cz1cRTEsIGlsMT1cRUUkPDU+LCBpbmQ9XG4kPDU+LCBpbnZpcz1cRUcxLAorCWlzMj1cRWU2XEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYFw6XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCWtEQz1cRVIsIGtFTkQ9XEVZLCBrSE9NPVxFeywga05YVD1cRUssIGtQUlQ9XEU3LCBrUFJWPVxFSiwKKwlrUklUPV5MLCBrYTE9Xl4sIGtiMj1cRUosIGticz1eSCwga2MxPVxFVCwga2MzPVxFSywga2NidD1cRUksCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2VuZD1cRVQsCisJa2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLCBrZjEyPV5BS1xyLCBrZjEzPV5BTFxyLAorCWtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsIGtmMTY9XkFPXHIsIGtmMTc9XkFgXHIsIGtmMTg9XkFhXHIsCisJa2YxOT1eQWJcciwga2YyPV5BQVxyLCBrZjIwPV5BY1xyLCBrZjIxPV5BZFxyLCBrZjIyPV5BZVxyLAorCWtmMjM9XkFmXHIsIGtmMjQ9XkFnXHIsIGtmMjU9XkFoXHIsIGtmMjY9XkFpXHIsIGtmMjc9XkFqXHIsCisJa2YyOD1eQWtcciwga2YyOT1eQWxcciwga2YzPV5BQlxyLCBrZjMwPV5BbVxyLCBrZjMxPV5BblxyLAorCWtmMzI9XkFvXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwKKwlrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sIGtpY2gxPVxFcSwga25wPVxFSywga3BwPVxFSiwKKwlrcHJ0PVxFUCwgbWMwPVxFUCwgbWM0PV5ULCBtYzU9XlIsCisJbXJjdXA9XEV3QCVwMSV7NDh9JSslYyVwMiV7MzJ9JSslYyVwMyV7MzJ9JSslYyQ8MTA+LAorCW5lbD1cMDM3JDw1PiwgcmV2PVxFRzQsIHJpPVxFaiQ8NT4sIHJtYWNzPVxFSFwwMDNcRWNCMCwKKwlybWFtPVxFZC4sIHJtaXI9XEVyLCBybXNvPVxFRzAsIHJtdWw9XEVHMCwgcm14b249XEVjMjAsCisJcnMyPVxFZTZcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgXDpcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDEwMD4sCisJc2V0Yj1ccywKKwlzZXRmPSU/JXAxJXswfSU9JXQlezQ5fSVlJXAxJXsxfSU9JXQlezUwfSVlJXAxJXsyfSU9JXQlezUxfSVlJXAxJXszfSU9JXQlezUyfSVlJXAxJXs0fSU9JXQlezUzfSVlJXAxJXs1fSU9JXQlezU0fSVlJXAxJXs2fSU9JXQlezU1fSVlJXAxJXs3fSU9JXQlezY0fSVlJXAxJXs4fSU9JXQlezU3fSVlJXAxJXs5fSU9JXQlezU4fSVlJXAxJXsxMH0lPSV0JXs1OX0lZSVwMSV7MTF9JT0ldCV7NjB9JWUlcDElezEyfSU9JXQlezYxfSVlJXAxJXsxM30lPSV0JXs2Mn0lZSVwMSV7MTR9JT0ldCV7NjN9JWUlcDElezE1fSU9JXQlezU2fSU7XEVkeSVjMTEkPDEwMD4sCisJc2dyMD1cRUcwXEVjQjBcRWNEJDwxNT4sIHNtYWNzPVxFSFwwMDJcRWNCMSwgc21hbT1cRWQvLAorCXNtaXI9XEVxLCBzbXNvPVxFR3QsIHNtdWw9XEVHOCwgc214b249XEVjMjEsIHRiYz1cRTAsCisJdHNsPVxFRiwKK25jcjI2MHd5MzI1d3BwfE5DUiAyOTAwXzI2MCB3eXNlIDMyNSB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDJDwzMD4sCisJaXMyPVxFZTZcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlyczI9XEVlNlxFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWA7XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCXVzZT1uY3IyNjB3eTMyNXBwLAorIyBUaGlzIGRlZmluaXRpb24gZm9yIFd5c2UgMzUwIHN1cHBvcnRzIHNldmVyYWwgYXR0cmlidXRlcy4gIFRoaXMgbWVhbnMKKyMgdGhhdCBpdCBoYXMgbWFnaWMgY29va2llcyAoZXh0cmEgc3BhY2VzIHdoZXJlIHRoZSBhdHRyaWJ1dGVzIGJlZ2luKS4KKyMgU29tZSBhcHBsaWNhdGlvbnMgZG8gbm90IGZ1bmN0aW9uIHdlbGwgd2l0aCBtYWdpYyBjb29raWVzLiAgVGhlIFN5c3RlbQorIyBBZG1pbmlzdHJhdG9yJ3MgU2hlbGwgaW4gTkNSIFVuaXggU1ZSNCAxLjAzIGlzIG9uZSBzdWNoIGFwcGxpY2F0aW9uLgorIyBJZiBzdXBwb3J0aW5nIHZhcmlvdXMgYXR0cmlidXRlcyBpcyBub3Qgdml0YWwsICd4bWMjMScgYW5kIHRoZSBleHRyYQorIyBhdHRyaWJ1dGVzIGNhbiBiZSByZW1vdmVkLgorIyBNYXBwaW5nIHRvIEFTQ0lJIGNoYXJhY3RlciBzZXQgKCdhY3NjJyBjYXBhYmlsaXR5KSBjYW4gYWxzbyBiZQorIyByZXN0b3JlZCBpZiBuZWVkZWQuCisjIEluIGFkZGl0aW9uLCBjb2xvciBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoaXMgZmlsZS4gIFRoZSBkcmF3YmFjaywKKyMgaG93ZXZlciwgaXMgdGhhdCB0aGUgYmFja2dyb3VuZCBjb2xvciBoYXMgdG8gYmUgYmxhY2suICBUaGUgZm9yZWdyb3VuZCBjb2xvcnMKKyMgYXJlIG51bWJlcmVkIDAgdGhyb3VnaCAxNS4KKyMKKyMgTk9URTogIFRoZSBOQ1IgVW5peCBTeXN0ZW0gQWRtaW5pc3RyYXRvcidzIFNoZWxsIGRvZXMgbm90IGZ1bmN0aW9uIHByb3Blcmx5CisjIAkgICAgd2l0aCB0aGUgJ3BhaXJzJyBjYXBhYmlsaXR5IGRlZmluZWQgYXMgYmVsb3cuICBJZiB5b3Ugd2lzaCB0bworIwkgICAgaGF2ZSBpdCBpbmNsdWRlZCwgVW4tY29tbWVudCBpdCBhbmQgcmVjb21waWxlICh1c2luZyAndGljJykuCisjCituY3IyNjB3eTM1MHBwfE5DUiAyOTAwXzI2MCB3eXNlIDM1MCwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29sb3JzIzE2LCBjb2xzIzgwLCBsaW5lcyMyNCwgbmN2IzMzLCBubGFiIzMyLCBwYWlycyMxNiwgeG1jIzEsCisJYWNzYz0wN2E/aDtqNWszbDJtMW44cVw6dDR1OXY9dzB4NiwgYmVsPV5HLCBibGluaz1cRUcyLAorCWNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVxFKyQ8MjA+LCBjbm9ybT1cRWAxLCBjcj1eTSwKKwljdWIxPVwwMTAkPDU+LCBjdWQxPVxuJDw1PiwgY3VmMT1cMDE0JDw1PiwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDw0MD4sIGN1dTE9XDAxMyQ8NT4sCisJY3Z2aXM9XEVgNSwgZGNoMT1cRVckPDUwPiwgZGltPVxFR3AsIGRsMT1cRVIkPDU+LCBkc2w9XEVgYywKKwllZD1cRXkkPDU+LCBlbD1cRXQkPDU+LCBmc2w9Xk0sIGhvbWU9XDAzNiQ8MTA+LCBodD1eSSwKKwlodHM9XEUxLCBpbDE9XEVFJDw1PiwgaW5kPVxuJDw1PiwgaW52aXM9XEVHMSwKKwlpczI9XEVlNlxFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWBcOlxFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlrREM9XEVSLCBrRU5EPVxFWSwga0hPTT1cRXssIGtQUlQ9XEU3LCBrUklUPV5MLCBrYTE9Xl4sIGticz1eSCwKKwlrYzE9XEVULCBrYzM9XEVLLCBrY2J0PVxFSSwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywga2RjaDE9XEVXLCBrZW5kPVxFVCwga2YxPV5BQFxyLCBrZjEwPV5BSVxyLAorCWtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsCisJa2YxNj1eQU9cciwga2YxNz1eQWBcciwga2YxOD1eQWFcciwga2YxOT1eQWJcciwga2YyPV5BQVxyLAorCWtmMjA9XkFjXHIsIGtmMjE9XkFkXHIsIGtmMjI9XkFlXHIsIGtmMjM9XkFmXHIsIGtmMjQ9XkFnXHIsCisJa2YyNT1eQWhcciwga2YyNj1eQWlcciwga2YyNz1eQWpcciwga2YyOD1eQWtcciwga2YyOT1eQWxcciwKKwlrZjM9XkFCXHIsIGtmMzA9XkFtXHIsIGtmMzE9XkFuXHIsIGtmMzI9XkFvXHIsIGtmND1eQUNcciwKKwlrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwKKwlraG9tZT1eXiwga2ljaDE9XEVxLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwKKwltYzA9XEVQJDwxMD4sIG1jND1eVCwgbWM1PV5SLAorCW1yY3VwPVxFd0AlcDElezQ4fSUrJWMlcDIlezMyfSUrJWMlcDMlezMyfSUrJWMkPDIwPiwKKwluZWw9XDAzNyQ8NT4sIHJldj1cRUc0LCByaT1cRWokPDU+LCBybWFjcz1cRUhcMDAzXEVjQjAsCisJcm1hbT1cRWQuLCBybWlyPVxFciwgcm1zbz1cRUcwLCBybXVsPVxFRzAsIHJteG9uPVxFYzIwLAorCXJzMj1cRWU2XEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYFw6XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCXNldGI9XHMsCisJc2V0Zj0lPyVwMSV7MH0lPSV0JXs0OX0lZSVwMSV7MX0lPSV0JXs1MH0lZSVwMSV7Mn0lPSV0JXs1MX0lZSVwMSV7M30lPSV0JXs1Mn0lZSVwMSV7NH0lPSV0JXs1M30lZSVwMSV7NX0lPSV0JXs1NH0lZSVwMSV7Nn0lPSV0JXs1NX0lZSVwMSV7N30lPSV0JXsxMDJ9JWUlcDElezh9JT0ldCV7OTd9JWUlcDElezl9JT0ldCV7OTh9JWUlcDElezEwfSU9JXQlezk5fSVlJXAxJXsxMX0lPSV0JXsxMDF9JWUlcDElezEyfSU9JXQlezEwNn0lZSVwMSV7MTN9JT0ldCV7MTEwfSVlJXAxJXsxNH0lPSV0JXsxMTF9JWUlcDElezE1fSU9JXQlezU2fSU7XEVtMCVjJDwxMDA+LAorCXNncjA9XEVHMFxFSFwwMDNcRWNELCBzbWFjcz1cRUhcMDAyXEVjQjEsIHNtYW09XEVkLywKKwlzbWlyPVxFcSwgc21zbz1cRUd0LCBzbXVsPVxFRzgsIHNteG9uPVxFYzIxLCB0YmM9XEUwLAorCXRzbD1cRUYsCituY3IyNjB3eTM1MHdwcHxOQ1IgMjkwMF8yNjAgd3lzZSAzNTAgd2lkZSBtb2RlLAorCWNvbHMjMTMyLAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQyQ8MzA+LAorCWlzMj1cRWU2XEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYDtcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDIwMD4sCisJcnMyPVxFZTZcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MjAwPiwKKwl1c2U9bmNyMjYwd3kzNTBwcCwKKyMgVGhpcyBkZWZpbml0aW9uIGZvciBXeXNlIDUwKyBzdXBwb3J0cyBzZXZlcmFsIGF0dHJpYnV0ZXMuICBUaGlzIG1lYW5zCisjIHRoYXQgaXQgaGFzIG1hZ2ljIGNvb2tpZXMgKGV4dHJhIHNwYWNlcyB3aGVyZSB0aGUgYXR0cmlidXRlcyBiZWdpbikuCisjIFNvbWUgYXBwbGljYXRpb25zIGRvIG5vdCBmdW5jdGlvbiB3ZWxsIHdpdGggbWFnaWMgY29va2llcy4gIFRoZSBTeXN0ZW0KKyMgQWRtaW5pc3RyYXRvcidzIFNoZWxsIGluIE5DUiBVbml4IFNWUjQgMS4wMyBpcyBvbmUgc3VjaCBhcHBsaWNhdGlvbi4KKyMgSWYgc3VwcG9ydGluZyB2YXJpb3VzIGF0dHJpYnV0ZXMgaXMgbm90IHZpdGFsLCAneG1jIzEnIGFuZCB0aGUgZXh0cmEKKyMgYXR0cmlidXRlcyBjYW4gYmUgcmVtb3ZlZC4KKyMgTWFwcGluZyB0byBBU0NJSSBjaGFyYWN0ZXIgc2V0ICgnYWNzYycgY2FwYWJpbGl0eSkgY2FuIGFsc28gYmUKKyMgcmVzdG9yZWQgaWYgbmVlZGVkLgorIyAobmNyMjYwd3k1MCtwcDogb3JpZ2luYWxseSBjb250YWluZWQgY29tbWVudGVkLW91dAorIyA8YWNzYz1qNWszbDJtMW44cTp0NHU5dj13MHg2PiwgYXMgd2VsbCBhcyB0aGUgY29tbWVudGVkLW91dCBvbmUgdGhlcmUgLS0gZXNyKQorbmNyMjYwd3k1MCtwcHxOQ1IgMjkwMF8yNjAgd3lzZSA1MCssCisJYW0sIGJ3LCBocywga20sIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBubGFiIzMyLCB4bWMjMSwKKwlhY3NjPTB3YV9oW2p1a3Nscm1xbnhxenR0dXl2XXdweHYsIGJlbD1eRywgYmxpbms9XEVHMiwKKwljYnQ9XEVJJDw1PiwgY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDwyMD4sIGNub3JtPVxFYDEsIGNyPV5NLAorCWN1YjE9XDAxMCQ8NT4sIGN1ZDE9XG4kPDU+LCBjdWYxPVwwMTQkPDU+LAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDMwPiwgY3V1MT1cMDEzJDw1PiwKKwljdnZpcz1cRWA1LCBkY2gxPVxFVyQ8NTA+LCBkaW09XEVHcCwgZGwxPVxFUiQ8NT4sIGRzbD1cRWBjLAorCWVkPVxFWSQ8NT4sIGVsPVxFVCQ8NT4sIGZzbD1eTSwgaG9tZT1cMDM2JDwxMD4sCisJaHQ9XDAxMSQ8NT4sIGh0cz1cRTEkPDU+LCBpbDE9XEVFJDw1PiwgaW5kPVxuJDw1PiwKKwlpbnZpcz1cRUcxLAorCWlzMj1cRWU2XEV+IiQ8MTAwPlxFK1xFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWBcOlxFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlrREM9XEVSLCBrRU5EPVxFWSwga0hPTT1cRXssIGtQUlQ9XEU3LCBrUklUPV5MLCBrYTE9Xl4sIGticz1eSCwKKwlrYzE9XEVULCBrYzM9XEVLLCBrY2J0PVxFSSwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwKKwlrY3V1MT1eSywga2RjaDE9XEVXLCBrZW5kPVxFVCwga2YxPV5BQFxyLCBrZjEwPV5BSVxyLAorCWtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsCisJa2YxNj1eQU9cciwga2YxNz1eQWBcciwga2YxOD1eQWFcciwga2YxOT1eQWJcciwga2YyPV5BQVxyLAorCWtmMjA9XkFjXHIsIGtmMjE9XkFkXHIsIGtmMjI9XkFlXHIsIGtmMjM9XkFmXHIsIGtmMjQ9XkFnXHIsCisJa2YyNT1eQWhcciwga2YyNj1eQWlcciwga2YyNz1eQWpcciwga2YyOD1eQWtcciwga2YyOT1eQWxcciwKKwlrZjM9XkFCXHIsIGtmMzA9XkFtXHIsIGtmMzE9XkFuXHIsIGtmMzI9XkFvXHIsIGtmND1eQUNcciwKKwlrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwKKwlraG9tZT1eXiwga2ljaDE9XEVxLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwKKwltYzA9XEVQJDwxMD4sIG1jND1eVCwgbWM1PV5SLAorCW1yY3VwPVxFd0AlcDElezQ4fSUrJWMlcDIlezMyfSUrJWMlcDMlezMyfSUrJWMkPDEwPiwKKwluZWw9XDAzNyQ8NT4sIHJldj1cRUc0LCByaT1cRWokPDU+LCBybWFjcz1cRUheQywgcm1hbT1cRWQuLAorCXJtaXI9XEVyLCBybXNvPVxFRzAsIHJtdWw9XEVHMCwgcm14b249XEVjMjAsCisJcnMyPVxFZTZcRX4iJDwxMDA+XEUrXEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYFw6XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCXNncjA9XEVHMFxFSFwwMDMkPDE1Piwgc21hY3M9XEVIXkIsIHNtYW09XEVkLywgc21pcj1cRXEsCisJc21zbz1cRUd0LCBzbXVsPVxFRzgsIHNteG9uPVxFYzIxLCB0YmM9XEUwJDw1PiwgdHNsPVxFRiwKK25jcjI2MHd5NTArd3BwfE5DUiAyOTAwXzI2MCB3eXNlIDUwKyB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDJDwzMD4sCisJaXMyPVxFZTZcRX4iJDwxMDA+XEUrXEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYDtcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDIwMD4sCisJcnMyPVxFZTZcRX4iJDwxMDA+XEUrXEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYDtcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDIwMD4sCisJdXNlPW5jcjI2MHd5NTArcHAsCituY3IyNjB3eTYwcHB8TkNSIDI5MDBfMjYwIHd5c2UgNjAsCisJYW0sIGJ3LCBocywga20sIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBubGFiIzMyLAorCWFjc2M9MDdhP2g7ajVrM2wybTFuOHFcOnQ0dTl2PXcweDYsIGJlbD1eRywgYmxpbms9XEVHMiwKKwljYnQ9XEVJJDwxNT4sIGNpdmlzPVxFYDAsIGNsZWFyPVxFKiQ8MTAwPiwgY25vcm09XEVgMSwKKwljcj1eTSwgY3ViMT1cMDEwJDw1PiwgY3VkMT1cbiQ8NT4sIGN1ZjE9XDAxNCQ8NT4sCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MTA+LCBjdXUxPVwwMTMkPDU+LAorCWN2dmlzPVxFYDUsIGRjaDE9XEVXJDw1MD4sIGRsMT1cRVIkPDU+LCBkc2w9XEVgYywKKwllZD1cRXkkPDU+LCBlbD1cRXQkPDU+LCBmc2w9Xk0sIGhvbWU9XDAzNiQ8MjU+LAorCWh0PVwwMTEkPDE1PiwgaHRzPVxFMSQ8MTU+LCBpbDE9XEVFJDw1PiwgaW5kPVxuJDw1PiwKKwlpbnZpcz1cRUcxLAorCWlzMj1cRWU2XEV+NCQ8MTAwPlxFK1xFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWBcOlxFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlrREM9XEVSLCBrRU5EPVxFWSwga0hPTT1cRXssIGtOWFQ9XEVLLCBrUFJUPVxFNywga1BSVj1cRUosCisJa1JJVD1eTCwga2ExPV5eLCBrYjI9XEVKLCBrYnM9XkgsIGtjMT1cRVQsIGtjMz1cRUssCisJa2NidD1cRUkkPDE1Piwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssCisJa2RjaDE9XEVXLCBrZW5kPVxFVCwga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLAorCWtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsIGtmMTY9XkFPXHIsCisJa2YxNz1eQWBcciwga2YxOD1eQWFcciwga2YxOT1eQWJcciwga2YyPV5BQVxyLCBrZjIwPV5BY1xyLAorCWtmMjE9XkFkXHIsIGtmMjI9XkFlXHIsIGtmMjM9XkFmXHIsIGtmMjQ9XkFnXHIsIGtmMjU9XkFoXHIsCisJa2YyNj1eQWlcciwga2YyNz1eQWpcciwga2YyOD1eQWtcciwga2YyOT1eQWxcciwga2YzPV5BQlxyLAorCWtmMzA9XkFtXHIsIGtmMzE9XkFuXHIsIGtmMzI9XkFvXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLAorCWtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sCisJa2ljaDE9XEVxLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwgbWMwPVxFUCwgbWM0PV5ULCBtYzU9XlIsCisJbXJjdXA9XEV3QCVwMSV7NDh9JSslYyVwMiV7MzJ9JSslYyVwMyV7MzJ9JSslYyQ8MzA+LAorCW5lbD1cMDM3JDw1PiwgcmV2PVxFRzQsIHJpPVxFaiQ8NT4sIHJtYWNzPVxFSF5DLCBybWFtPVxFZC4sCisJcm1pcj1cRXIsIHJtc289XEVHMCwgcm11bD1cRUcwLCBybXhvbj1cRWMyMCwKKwlyczI9XEVlNlxFfjQkPDEwMD5cRStcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgXDpcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDEwMD4sCisJc2dyMD1cRUcwXEVjQjBcRWNEJDwxNT4sIHNtYWNzPVxFSF5CLCBzbWFtPVxFZC8sCisJc21pcj1cRXEsIHNtc289XEVHdCwgc211bD1cRUc4LCBzbXhvbj1cRWMyMSwgdGJjPVxFMCQ8MTU+LAorCXRzbD1cRUYsCituY3IyNjB3eTYwd3BwfE5DUiAyOTAwXzI2MCB3eXNlIDYwIHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwljdXA9XEVhJWklcDElZFIlcDIlZEMkPDMwPiwKKwlpczI9XEVlNlxFfjQkPDEwMD5cRStcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlyczI9XEVlNlxFfjQkPDEwMD5cRStcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwl1c2U9bmNyMjYwd3k2MHBwLAorbmNyMTYwdnBwcHxOQ1IgMjkwMF8xNjAgdmlld3BvaW50LAorCXVzZT1uY3IyNjB2cHBwLAorbmNyMTYwdnB3cHB8TkNSIDI5MDBfMTYwIHZpZXdwb2ludCB3aWRlIG1vZGUsCisJdXNlPW5jcjI2MHZwd3BwLAorbmNyMTYwdnQxMDBhbnxOQ1IgMjkwMF8xNjAgdnQxMDAgd2l0aCBhbnNpIGt5YmQsCisJdXNlPW5jcjI2MHZ0MTAwYW4sCituY3IxNjB2dDEwMHBwfE5DUiAyOTAwXzE2MCB2dDEwMCB3aXRoIFBDKyBreWJkLAorCXVzZT1uY3IyNjB2dDEwMHBwLAorbmNyMTYwdnQxMDB3YW58TkNSIDI5MDBfMTYwIHZ0MTAwIHdpZGUgbW9kZSBhbnNpIGt5YmQsCisJdXNlPW5jcjI2MHZ0MTAwd2FuLAorbmNyMTYwdnQxMDB3cHB8TkNSIDI5MDBfMTYwIHZ0MTAwIHdpZGUgbW9kZSBwYysgIGt5YmQsCisJdXNlPW5jcjI2MHZ0MTAwd3BwLAorbmNyMTYwdnQyMDBhbnxOQ1IgMjkwMF8xNjAgdnQyMDAgd2l0aCBhbnNpIGt5YmQsCisJdXNlPW5jcjI2MHZ0MjAwYW4sCituY3IxNjB2dDIwMHBwfE5DUiAyOTAwXzE2MCB2dDIwMCB3aXRoIHBjKyBreWJkLAorCXVzZT1uY3IyNjB2dDIwMHBwLAorbmNyMTYwdnQyMDB3YW58TkNSIDI5MDBfMTYwIHZ0MjAwIHdpZGUgbW9kZSBhbnNpIGt5YmQsCisJdXNlPW5jcjI2MHZ0MjAwd2FuLAorbmNyMTYwdnQyMDB3cHB8TkNSIDI5MDBfMTYwIHZ0MjAwIHdpZGUgbW9kZSBwYysgIGt5YmQsCisJdXNlPW5jcjI2MHZ0MjAwd3BwLAorbmNyMTYwdnQzMDBhbnxOQ1IgMjkwMF8xNjAgdnQzMDAgd2l0aCBhbnNpIGt5YmQsCisJdXNlPW5jcjI2MHZ0MzAwYW4sCituY3IxNjB2dDMwMHBwfE5DUiAyOTAwXzE2MCB2dDMwMCB3aXRoIHBjKyBreWJkLAorCXVzZT1uY3IyNjB2dDMwMHBwLAorbmNyMTYwdnQzMDB3YW58TkNSIDI5MDBfMTYwIHZ0MzAwIHdpZGUgbW9kZSBhbnNpIGt5YmQsCisJdXNlPW5jcjI2MHZ0MzAwd2FuLAorbmNyMTYwdnQzMDB3cHB8TkNSIDI5MDBfMTYwIHZ0MzAwIHdpZGUgbW9kZSBwYysgIGt5YmQsCisJdXNlPW5jcjI2MHZ0MzAwd3BwLAorbmNyMTYwd3k1MCtwcHxOQ1IgMjkwMF8xNjAgd3lzZSA1MCssCisJdXNlPW5jcjI2MHd5NTArcHAsCituY3IxNjB3eTUwK3dwcHxOQ1IgMjkwMF8xNjAgd3lzZSA1MCsgd2lkZSBtb2RlLAorCXVzZT1uY3IyNjB3eTUwK3dwcCwKK25jcjE2MHd5NjBwcHxOQ1IgMjkwMF8xNjAgd3lzZSA2MCwKKwl1c2U9bmNyMjYwd3k2MHBwLAorbmNyMTYwd3k2MHdwcHxOQ1IgMjkwMF8xNjAgd3lzZSA2MCB3aWRlIG1vZGUsCisJdXNlPW5jcjI2MHd5NjB3cHAsCituY3J2dDEwMGFufG5jcnZ0MTAwcHB8TkNSIHZ0MTAwIGZvciB0aGUgMjkwMCB0ZXJtaW5hbCwKKwlhbSwgaHMsIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBubGFiIzMyLAorCWFjc2M9YGBhYWZmZ2doaGlpampra2xsbW1ubnFxdHR1dXZ2d3d4eHl5enp+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwzMD4sIGJvbGQ9XEVbMW0kPDMwPiwKKwljbGVhcj1cRVsySlxFWzE7MUgkPDMwMD4sIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciQ8MTAwPiwgY3ViPVxFWyVwMSVkRCQ8MzA+LAorCWN1YjE9XEVbRCQ8Mj4sIGN1ZD1cRVslcDElZEIkPDMwPiwgY3VkMT1cRVtCJDwyPiwKKwljdWY9XEVbJXAxJWRDJDwzMD4sIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxMDA+LCBjdXU9XEVbJXAxJWRBJDwzMD4sCisJY3V1MT1cRVtBJDwyPiwgZGNoPVxFWyVwMSVkUCQ8NDA+LCBkY2gxPVxFWzFQJDwxMD4sCisJZGw9XEVbJXAxJWRNJDw3MD4sIGRsMT1cRVtNJDw0MD4sIGRzbD1cRVszMWwkPDI1PiwKKwllZD1cRVswSiQ8MzAwPiwgZWw9XEVbMEskPDMwPiwgZWwxPVxFWzFLJDwzMD4sCisJZW5hY3M9XEUoQlxFKTAkPDQwPiwgZnNsPTEkPDEwPiwgaG9tZT1cRVtIJDwyPiQ8ODA+LAorCWh0PV5JLCBodHM9XEVILCBpbD1cRVslcDElZEwkPDgwPiwgaWwxPVxFW0JcRVtMJDw4MD4sCisJaW5kPVxFRCwKKwlpczI9XEVbMTJoXEVbPzEwbFxFJS8wblxFW1BcMDMxXEVbPzNsXEUoQlxFKTAkPDIwMD4sCisJa0xGVD1cRVtELCBrUklUPVxFW0MsIGthMT1cRVtILCBrYnM9XkgsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2VudD1eTSwga2YxPVxFT1AsCisJa2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgbWMwPVxFW2kkPDEwMD4sIG5lbD1cRUUsCisJcmM9XEU4LCByZXY9XEVbN20kPDMwPiwgcmk9XEVNJDw1MD4sIHJtYWNzPVwwMTckPDkwPiwKKwlybWlyPVxFWzRsJDw4MD4sIHJtc289XEVbMG0kPDMwPiwgcm11bD1cRVswbSQ8MzA+LAorCXJzMj1cRWNcRVsxMjszMWhcRVs/Mzs0OzU7MTBsXEVbPzY7NzsxOTsyNWhcRVszMzszNGxcRVswbVxFKEJcRSkwXEUlLzBuXEVbUFwwMzEkPDIwMD4sCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDEwMD4sCisJc2dyMD1cMDE3XEVbMG0kPDEyMD4sIHNtYWNzPVwwMTYkPDkwPiwgc21pcj1cRVs0aCQ8ODA+LAorCXNtc289XEVbN20kPDMwPiwgc211bD1cRVs0bSQ8MzA+LCB0YmM9XEVbM2ckPDQwPiwKKwl0c2w9XEVbPisxJDw3MD4sCituY3J2dDEwMHdhbnxOQ1JWVDEwMFdQUHxuY3J2dDEwMHdwcHxOQ1IgVlQxMDAgZW11bGF0aW9uIG9mIHRoZSAyOTAwIHRlcm1pbmFsLAorCWNvbHMjMTMyLAorCWlzMj1cRVsxMmhcRVs/MTBsXEUlLzBuXEVbUFwwMzFcRVs/M2hcRShCXEUpMCQ8MjAwPiwKKwlyczI9XEVjXEVbMTI7MzFoXEVbPzQ7NTsxMGxcRT8zOzY7NzsxOTsyNWhcRVszMzszNGxcRVswbVxFKEJcRSkwXEUlLzBuXEVbUFwwMzEkPDIwMD4sCisJdXNlPW5jcnZ0MTAwYW4sCisjCisjIFZlbmRvci1zdXBwbGllZCBOQ1IgdGVybWNhcHMgZW5kIGhlcmUKKworIyBOQ1I3OTAwIERJUCBzd2l0Y2hlczoKKyMKKyMgU3dpdGNoIEE6CisjIDEtNCAtIEJhdWQgUmF0ZQorIyA1ICAgLSBQYXJpdHkgKE9kZC9FdmVuKQorIyA2ICAgLSBEb24ndCBTZW5kIG9yIERvIFNlbmQgU3BhY2VzCisjIDcgICAtIFBhcml0eSBFbmFibGUKKyMgOCAgIC0gU3RvcCBCaXRzIChPbmUvVHdvKQorIworIyBTd2l0Y2ggQjoKKyMgMSAgIC0gVXBwZXIvTG93ZXIgU2hpZnQKKyMgMiAgIC0gVHlwZXdyaXRlciBTaGlmdAorIyAzICAgLSBIYWxmIER1cGxleCAvIEZ1bGwgRHVwbGV4CisjIDQgICAtIExpZ2h0L0RhcmsgQmFja2dyb3VuZAorIyA1LTYgLSBDYXJyaWFnZSBSZXR1cm4gV2l0aG91dCAvIFdpdGggTGluZSBGZWVkCisjIDcgICAtIEV4dGVuZGVkIE1vZGUKKyMgOCAgIC0gU3VwcHJlc3MgS2V5Ym9hcmQgRGlzcGxheQorIworIyBTd2l0Y2ggQzoKKyMgMSAgIC0gRW5kIG9mIGxpbmUgZW50cnkgZGlzYWJsZWQvZW5hYmxlZAorIyAyICAgLSBDb252ZXJzYXRpb25hbCBtb2RlIC8gKExvY2FsPykgTW9kZQorIyAzICAgLSBDb250cm9sIGNoYXJhY3RlcnMgZGlzcGxheWVkIC8gbm90IGRpc3BsYXllZAorIyA0ICAgLSAoMi13aXJlPykgLyA0LXdpcmUgY29tbXVuaWNhdGlvbnMKKyMgNSAgIC0gUlRTIG9uIGFuZCBvZmYgZm9yIGVhY2ggY2hhcmFjdGVyCisjIDYgICAtICg1MEh6PykgLyA2MCBIegorIyA3ICAgLSBFeGl0IGFmdGVyIGxldmVsIHplcm8gZGlhZ25vc3RpY3MKKyMgOCAgIC0gUlMtMjMyIGludGVyZmFjZQorIworIyBTd2l0Y2ggRDoKKyMgMSAgIC0gUmV2ZXJzZSBDaGFubmVsICh5ZXMgLyBubykKKyMgMiAgIC0gTWFudWFsIGFuc3dlciAobm8gLyB5ZXMpCisjIDMtNCAtIEN1cnNvciBhcHBlYXJhbmNlCisjIDUgICAtIENvbW11bmljYXRpb24gUmF0ZQorIyA2ICAgLSBFbmFibGUgLyBEaXNhYmxlIEVYVCB0dXJub2ZmCisjIDcgICAtIEVuYWJsZSAvIERpc2FibGUgQ1IgdHVybm9mZgorIyA4ICAgLSBFbmFibGUgLyBEaXNhYmxlIGJhY2tzcGFjZQorIworIyBTaW5jZSBlYWNoIGF0dHJpYnV0ZSBwYXJhbWV0ZXIgaXMgMCBvciAxLCB3ZSBzaGlmdCBlYWNoIGF0dHJpYnV0ZSAoc3RhbmRvdXQsCisjIHJldmVyc2UsIGJsaW5rLCBkaW0sIGFuZCB1bmRlcmxpbmUpIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgYml0cyAoYnkKKyMgbXVsdGlwbHlpbmcgdGhlIDAgb3IgMSBieSBhIGNvcnJlY3QgZmFjdG9yIHRvIHNoaWZ0KSBzbyB0aGUgYmlhcyBjaGFyYWN0ZXIsCisjICdAJyBpcyAoZWZmZWN0aXZlbHkpICJvciJlZCB3aXRoIGVhY2ggYXR0cmlidXRlIHRvIGdlbmVyYXRlIHRoZSBwcm9wZXIgdGhpcmQKKyMgY2hhcmFjdGVyIGluIHRoZSA8RVNDPjAgc2VxdWVuY2UuICBUaGUgPHNncj4gc3RyaW5nIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZworIyBlcXVhdGlvbjoKKyMKKyMgKCgoKCgnQCcgKyBQNSkgfCAoUDQgPDwgMSkpIHwgKFAzIDw8IDMpKSB8IChQMiA8PCA0KSkgfCAocDEgKiAxNykpICAgID0+CisjICgoKCgoJ0AnICsgUDUpICsgKFA0IDw8IDEpKSArIChQMyA8PCAzKSkgKyAoUDIgPDwgNCkpICsgKHAxICogMTcpKQorIworIwlXaGVyZTogIFAxIDw9PT4gU3RhbmRvdXQgYXR0cmlidXRlIHBhcmFtZXRlcgorIwkJUDIgPD09PiBVbmRlcmxpbmUgYXR0cmlidXRlIHBhcmFtZXRlcgorIwkJUDMgPD09PiBSZXZlcnNlIGF0dHJpYnV0ZSBwYXJhbWV0ZXIKKyMJCVA0IDw9PT4gQmxpbmsgYXR0cmlidXRlIHBhcmFtZXRlcgorIwkJUDUgPD09PiBEaW0gYXR0cmlidXRlIHBhcmFtZXRlcgorIyBGcm9tIDxyb290QGdvbGlhdGgudW4uYXRsYW50YWdhLk5DUi5DT00+LCBpbml0IHN0cmluZyBoYWNrZWQgYnkgU0NPLgorbmNyNzkwMGl8bmNyNzkwMHxuY3IgNzkwMCBtb2RlbCAxLAorCWFtLCBidywgdWwsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCWJlbD1eRywgYmxpbms9XEUwQiwgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5GLAorCWN1cD1cRTElcDIlYyVwMSVjLCBjdXUxPV5aLCBkaW09XEUwQSwgZWQ9XEVrLCBlbD1cRUssIGluZD1eSiwKKwlpczI9XEUwQFwwMTBcRTNcRTRcRTcsIGtjdWIxPV5VLCBrY3VkMT1eSiwga2N1ZjE9XkYsCisJa2N1dTE9XlosIGtob21lPV5BLCBsbD1eQSwgbWM0PV5ULCBtYzU9XlIsIHJldj1cRTBQLCBybXNvPVxFMEAsCisJcm11bD1cRTBALAorCXNncj1cRTAlcDUlezY0fSUrJXA0JXsyfSUqJSslcDMlezE2fSUqJSslcDIlezMyfSUqJSslcDElezE3fSUqJSslYywKKwlzZ3IwPVxFMEAsIHNtc289XEUwUSwgc211bD1cRTBgLAorbmNyNzkwMGl2fG5jciA3OTAwIG1vZGVsIDQsCisJYW0sIGJ3LCBlc2xvaywgaHMsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VwPVwwMTMlcDElezY0fSUrJWNcRVwwMDUlcDIlMDJkLCBkbDE9XEVeTywgZHNsPVxFeTEsCisJZnNsPVxFa1xFeTUsIGhvbWU9XDAxM0BcRV5FMDAsIGlsMT1cRV5OLCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMT1cRVMsIGtmMj1cRVQsCisJa2YzPVxFVSwga2Y0PVxFViwga2Y1PVxFVywga2Y2PVxFUCwga2Y3PVxFUSwga2Y4PVxFUiwKKwlraG9tZT1cRUgsIGxmNj1ibHVlLCBsZjc9cmVkLCBsZjg9d2hpdGUsIG5lbD1eTV5KLAorCXRzbD1cRWpcRXg1XEV4MVxFWTglcDElezMyfSUrJWNcRW8sCisjIFdhcm5pbmc6IFRoaXMgdGVybWluYWwgd2lsbCBsb2NrIG91dCB0aGUga2V5Ym9hcmQgd2hlbiBpdCByZWNlaXZlcyBhIENUUkwtRC4KKyMJICAgVGhlIHVzZXIgY2FuIGVudGVyIGEgQ1RSTC1CIHRvIGdldCBvdXQgb2YgdGhpcyBsb2NrZWQgc3RhdGUuCisjIEluIDxocGE+LCB3ZSB3YW50IHRvIG91dHB1dCB0aGUgY2hhcmFjdGVyIGdpdmVuIGJ5IHRoZSBmb3JtdWxhOgorIwkJKChjb2wgLyAxMCkgKiAxNikgKyAoY29sICUgMTApCQl3aGVyZSAiY29sIiBpcyAicDEiCituY3I3OTAxfG5jciA3OTAxIG1vZGVsLAorCWFtLCBidywgdWwsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRTBCLCBjaXZpcz1eVywgY2xlYXI9XkwsIGNub3JtPV5YLCBjcj1eTSwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5GLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XlosIGRpbT1cRTBBLAorCWVkPVxFaywgZWw9XEVLLAorCWhwYT1cMDIwJXAxJXsxMH0lLyV7MTZ9JSolcDElezEwfSVtJSslYywgaW5kPV5KLAorCWlzMj1cRTReTywga2Nscj1eTCwga2N1YjE9XlUsIGtjdWQxPV5KLCBrY3VmMT1eRiwga2N1dTE9XlosCisJa2hvbWU9XkgsIGxsPV5BLCBtYzQ9XlQsIG1jNT1eUiwgcmV2PVxFMFAsIHJtc289Xk8sIHJtdWw9Xk8sCisJc2dyPVxFMCVwNSV7NjR9JSslcDQlezJ9JSolKyVwMyV7MTZ9JSolKyVwMiV7MzJ9JSolKyVwMSV7MTd9JSolKyVjXDAxNiwKKwlzZ3IwPV5PLCBzbXNvPVxFMFFcMDE2LCBzbXVsPVxFMGBcMDE2LAorCXZwYT1cMDEzJXAxJXs2NH0lKyVjLAorCisjIE5ld2J1cnkgRGF0YSBSZWNvcmRpbmcgTGltaXRlZCAoTmV3YnVyeSBEYXRhKQorIworIyBIYXZlIGJlZW4gbWFudWZhY3R1cmluZyBhbmQgcmVzZWxsaW5nICB2YXJpb3VzIHBlcmlwaGVyYWxzIGZvciBhIGxvbmcgdGltZQorIyBUaGV5IGRvbid0IG1ha2UgdGVybWluYWxzIGFueW1vcmUsIGJ1dCBhcmUgc3RpbGwgaW4gYnVzaW5lc3MgKGluIDIwMDcpLgorIyBUaGVpciBlLW1haWwgYWRkcmVzcyBpcyBhdCBuZHNhbGVzQG5ld2J1cnlkYXRhLmNvLnVrCisjIGFuZCB0aGVpciBwb3N0IGFkZHJlc3MgaXM6CisjCisjIE5ld2J1cnkgRGF0YSBSZWNvcmRpbmcgTHRkLAorIyBQcmVtaWVyIFBhcmssIFJvYWQgT25lLAorIyBXaW5zZm9yZCwgQ2hlc2hpcmUsIENXNyAzUFQKKyMKKyMgVGhlaXIgdGVjaG5pY2FsIHN1cHBvcnQgaXMgc3RpbGwgZ29vZCwgdGhleSBzZW50IG1lIGZvciBmcmVlIGEgcHJpbnRlZCBjb3B5CisjIG9mIHRoZSA5NTAwIHVzZXIgbWFudWFsIGFuZCBJIGdvdCBpdCBqdXN0IDEgd2VlayBhZnRlciBJIGZpcnN0IGNvbnRhY3RlZCB0aGVtCisjIChpbiAyMDA1KSEKKworIyBORFIgOTUwMAorIyBNYW51ZmFjdHVyZWQgaW4gdGhlIGVhcmx5L21pZCBlaWdodGllcywgYmVoYXZlcyBhbG1vc3QgdGhlIHNhbWUgYXMgYQorIyBUZWxldmlkZW8gOTUwLiAgVGFrZSBhIDk1MCwgY2hhbmdlIGl0cyBjYWJpbmV0IGZvciBhIG1vcmUgODBzLWlzaCBvbmUgKGJ1dAorIyBrZWVwIHRoZSBzYW1lIGtleWJvYXJkIGxheW91dCksIGFkZCBhbiBvcHRpb25hbCAyNS1saW5lIG1vZGUsIHJlcGxhY2UgdGhlIERJUAorIyBzd2l0Y2hlcyB3aXRoIGEgbWVudSBhbmQgcmVtb3ZlIHRoZSAibG9jayBsaW5lIiBmZWF0dXJlIChFU0MgISAgMSBhbmQgRVNDICEgCisjIDIpLCBoZXJlIGlzIHRoZSBORFIgOTUwMC4gIEV2ZW4gdGhlIGxpbmUtbG9jaywgYWxiZWl0IGRpc2FibGVkLCBpcworIyByZWNvZ25pemVkOiAgaWYgeW91IHR5cGUgaW4gIkVTQyAhIiwgdGhlIG5leHQgKHRoaXJkKSBjaGFyYWN0ZXIgaXMgbm90CisjIGVjaG9lZCwgc2hvd2luZyB0aGF0IHRoZSB0ZXJtaW5hbCB3YXMgYWN0dWFsbHkgd2FpdGluZyBmb3IgYSBwYXJhbWV0ZXIhCituZHI5NTAwfG5kOTUwMHxOZXdidXJ5IERhdGEgOTUwMCwKKwlhbSwgYncsIGhzLCBtYzVpLCBtaXIsIG1zZ3IsIHVsLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHdzbCM3OSwKKwlhY3NjPXFLbkltQWpEd051THRNdk9sQmtDeEosIGJlbD1eRywgY2J0PVxFSSwgY2l2aXM9XEUuMCwKKwljbGVhcj1cRTssIGNub3JtPVxFLjEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5WLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRpbT1cRSksIGRsMT1cRVIsIGRzbD1cRWgsIGVkPVxFWSwgZWw9XEVULAorCWZsYXNoPVxFYiQ8NTAvPlxFZCwgZnNsPV5NLCBob21lPV5eLCBodD1eSSwgaHRzPVxFMSwKKwlpY2gxPVxFUSwgaWwxPVxFRSwgaW5kPV5KLCBpczI9XEV3XEUnXEVERlxFbFxFclxFTywKKwlrREM9XEVyLCBrREw9XEVPLCBrRU9MPVxFdCwga0lDPVxFcSwga2NidD1cRUksIGtjbHI9XlosCisJa2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsCisJa2VkPVxFWSwga2VsPVxFVCwga2VudD1eTSwga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLAorCWtmMTI9XkFgXHIsIGtmMTM9XkFhXHIsIGtmMTQ9XkFiXHIsIGtmMTU9XkFjXHIsIGtmMTY9XkFkXHIsCisJa2YxNz1eQWVcciwga2YxOD1eQWZcciwga2YxOT1eQWdcciwga2YyPV5BQVxyLCBrZjIwPV5BaFxyLAorCWtmMjE9XkFpXHIsIGtmMjI9XkFqXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsCisJa2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwKKwlraWNoMT1cRVEsIGtpbDE9XEVFLCBrcHJ0PVxFUCwgbWM0PVxFYSwgbWM1PVxFYCwgbmVsPV5fLAorCXBmbG9jPVxFfCV7NDh9JXAxJSslYzIlcDJcMDMxLAorCXBmeD1cRXwlezQ4fSVwMSUrJWMxJXAyXDAzMSwgcHJvdD1cRSksIHJpPVxFaiwKKwlybWFjcz1cRSUlLCBybWlyPVxFciwgcm1zbz1cRSgsIHJteG9uPV5OLAorCXNncj1cRSUlXEUoJT8lcDElcDUlcDglfCV8JXRcRSklOyU/JXA5JXRcRSQlOywKKwlzZ3IwPVxFRzBcRSUlXEUoLCBzbWFjcz1cRSQsIHNtaXI9XEVxLCBzbXNvPVxFKSwgc214b249Xk8sCisJdGJjPVxFMywgdHNsPVxFZ1xFZlwwMTElcDElezMyfSUrJWMsIC5rYnM9XkgsCisKK25kcjk1MDAtbmx8TkRSIDk1MDAgd2l0aCBubyBzdGF0dXMgbGluZSwKKwloc0AsCisJd3NsQCwKKwlkc2xALCBmc2xALCB0c2xALCB1c2U9bmRyOTUwMCwKKworbmRyOTUwMC0yNXxORFIgOTUwMCB3aXRoIDI1dGggbGluZSBlbmFibGVkLAorCWxpbmVzIzI1LCB1c2U9bmRyOTUwMCwKKworbmRyOTUwMC0yNS1ubHxORFIgOTUwMCB3aXRoIDI1IGxpbmVzIGFuZCBubyBzdGF0dXMgbGluZSwKKwlsaW5lcyMyNSwgdXNlPW5kcjk1MDAtbmwsCisKK25kcjk1MDAtbWN8TkRSIDk1MDAgd2l0aCBtYWdpYyBjb29raWVzIChlbmFibGVzIHVuZGVybGluZSBpbnZlcnNlIHZpZGVvIGludmlzaWJsZSBhbmQgYmxpbmspLAorCW1zZ3JALAorCXhtYyMxLAorCWJsaW5rPVxFRzIsIGludmlzPVxFRzEsIHJldj1cRUc0LCBybXNvPVxFRzAsIHJtdWw9XEVHMCwKKwlzZ3I9XEUlJVxFKCU/JXA1JXA4JXwldFxFKSU7JT8lcDkldFxFJCU7XEVHJXs0OH0lPyVwNyV0JXsxfSUrJTslPyVwNCV0JXsyfSUrJTslPyVwMyVwMSV8JXQlezR9JSslOyU/JXAyJXQlezh9JSslOyVjLAorCXNncjA9XEVHMFxFJSVcRSgsIHNtc289XEVHNCwgc211bD1cRUc4LCB1c2U9bmRyOTUwMCwKKworbmRyOTUwMC0yNS1tY3xORFIgNTAwIHdpdGggMjUgbGluZXMgYW5kIG1hZ2ljIGNvb2tpZXMsCisJbGluZXMjMjUsIHVzZT1uZHI5NTAwLW1jLAorCituZHI5NTAwLW1jLW5sfE5EUiA5NTAwIHdpdGggbWFnaWMgY29va2llcyBhbmQgbm8gc3RhdHVzIGxpbmUsCisJaHNALAorCXdzbEAsCisJZHNsQCwgZnNsQCwgdHNsQCwgdXNlPW5kcjk1MDAtbWMsCisKK25kcjk1MDAtMjUtbWMtbmx8TkRSIDk1MDAgd2l0aCAyNSBsaW5lcyBhbmQgbWFnaWMgY29va2llcyBhbmQgbm8gc3RhdHVzIGxpbmUsCisJbGluZXMjMjUsIHVzZT1uZHI5NTAwLW1jLW5sLAorCisjIyMjIFBlcmtpbi1FbG1lciAoT3dsKQorIworIyBUaGVzZSBhcmUgb2ZmaWNpYWwgdGVybWluZm8gZW50cmllcyBmcm9tIHdpdGhpbiBQZXJraW4tRWxtZXIuCisjCisKK2JhbnRhbXxwZTU1MHxwZTYxMDB8cGVya2luIGVsbWVyIDU1MCwKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVLJDwyMD4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVYJXAxJXszMn0lKyVjXEVZJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwKKwllbD1cRUkkPDIwPiwgaG9tZT1cRUgsIGluZD1eSiwgbGw9XEVIXEVBLAorZm94fHBlMTEwMHxwZXJraW4gZWxtZXIgMTEwMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiQ8MTMyPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1cRUMsIGN1cD1cRVglcDElezMyfSUrJWNcRVklcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWVkPVxFSiQ8NS41Kj4sIGVsPVxFSSwgZmxhc2g9XDAyMFwwMDIkPDIwMC8+XDAyMFwwMDMsCisJaG9tZT1cRUgsIGh0cz1cRTEsIGluZD1eSiwgbGw9XEVIXEVBLCB0YmM9XEUzLAorb3dsfHBlMTIwMHxwZXJraW4gZWxtZXIgMTIwMCwKKwlPVGJzLCBhbSwgaW4sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUhcRUokPDEzMj4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVDLCBjdXA9XEVYJXAxJXszMn0lKyVjXEVZJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwKKwlkY2gxPVxFTyQ8NS41Kj4sIGRsMT1cRU0kPDUuNSo+LCBlZD1cRUokPDUuNSo+LAorCWVsPVxFSSQ8NS41PiwgZmxhc2g9XDAyMFwwMDIkPDIwMC8+XDAyMFwwMDMsIGhvbWU9XEVILAorCWh0cz1cRTEsIGljaDE9XEVOLCBpbDE9XEVMJDw1LjUqPiwgaW5kPV5KLCBpcD0kPDUuNSo+LAorCWticz1eSCwga2YwPVxFUkosIGtmMT1cRVJBLCBrZjI9XEVSQiwga2YzPVxFUkMsIGtmND1cRVJELAorCWtmNT1cRVJFLCBrZjY9XEVSRiwga2Y3PVxFUkcsIGtmOD1cRVJILCBrZjk9XEVSSSwgbGw9XEVIXEVBLAorCXJtc289XEUhXDAsIHNncjA9XEUhXDAsIHNtc289XEUhXkgsIHRiYz1cRTMsCitwZTEyNTF8cGU2MzAwfHBlNjMxMnxwZXJraW4gZWxtZXIgMTI1MSwKKwlhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGIjMzAwLCB2dCM4LCB4bWMjMSwKKwliZWw9XkcsIGNsZWFyPVxFSyQ8MzMyPiwgY3I9Xk0sIGN1YjE9XEVELCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWCVwMSV7MzJ9JSslY1xFWSVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJZWQ9XEVKJDwyMCo+LCBlbD1cRUkkPDEwKj4sIGhvbWU9XEVILCBodHM9XEUxLCBpbmQ9XkosCisJa2YwPVxFUkEsIGtmMT1cRVJCLCBrZjEwPVxFUkssIGtmMj1cRVJDLCBrZjM9XEVSRCwga2Y0PVxFUkUsCisJa2Y1PVxFUkYsIGtmNj1cRVJHLCBrZjc9XEVSSCwga2Y4PVxFUkksIGtmOT1cRVJKLCB0YmM9XEUzLAorIyAocGU3MDAwbTogdGhpcyBoYWQKKyMgCXJtdWw9XEUhXDAsIHNtdWw9XEUhXDA0MCwKKyMgd2hpY2ggaXMgcHJvYmFibHkgd3JvbmcsIGl0IGNvbGxpZGVzIHdpdGgga2YwCitwZTcwMDBtfHBlcmtpbiBlbG1lciA3MDAwIHNlcmllcyBtb25vY2hyb21lIG1vbml0b3IsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9XEUhWSwgY2xlYXI9XEVLLCBjcj1eTSwgY3ViMT1cRUQsIGN1ZDE9XEVCLAorCWN1ZjE9XEVDLCBjdXA9XEVTJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwKKwllZD1cRUosIGVsPVxFSSwgaG9tZT1cRUgsIGluZD1eSiwKKwlpczE9XEUhXDBcRVcgIDdvXEVnZlxFUzdccywga2JzPV5ILCBrY3ViMT1cRSFWLAorCWtjdWQxPVxFIVUsIGtjdWYxPVxFIVcsIGtjdXUxPVxFIVQsIGtmMD1cRSFcMCwga2YxPVxFIV5BLAorCWtmMTA9XEUhXkosIGtmMj1cRSFeQiwga2YzPVxFIV5DLCBrZjQ9XEUhXkQsIGtmNT1cRSFeRSwKKwlrZjY9XEUhXkYsIGtmNz1cRSFeRywga2Y4PVxFIV5ILCBrZjk9XEUhXkksIGtob21lPVxFIVMsCisJbGw9XEVTN1xzLCByaT1cRVIsCitwZTcwMDBjfHBlcmtpbiBlbG1lciA3MDAwIHNlcmllcyBjb2xvdXIgbW9uaXRvciwKKwlpczE9XEUhXDBcRVcgIDdvXEVnZlxFYjBcRWM3XEVTN1xzLCBybXNvPVxFYjAsCisJcm11bD1cRSFcMCwgc21zbz1cRWIyLCBzbXVsPVxFIVxzLCB1c2U9cGU3MDAwbSwKKworIyMjIyBTcGVycnkgVW5pdmFjCisjCisjIFNwZXJyeSBVbml2YWMgaGFzIG1lcmdlZCB3aXRoIEJ1cnJvdWdocyB0byBmb3JtIFVuaXN5cy4KKyMKKworIyBUaGlzIGVudHJ5IGlzIGZvciB0aGUgU3BlcnJ5IFVUUzMwIHRlcm1pbmFsIHJ1bm5pbmcgdGhlIFRUWQorIyB1dGlsaXR5IHVuZGVyIGNvbnRyb2wgb2YgQ1AvTSBQbHVzIDFSMS4gVGhlIGZ1bmN0aW9uYWxpdHkKKyMgcHJvdmlkZWQgaXMgY29tcGFyYWJsZSB0byB0aGUgREVDIHZ0MTAwLgorIyAodXRzMzA6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQordXRzMzB8c3BlcnJ5IHV0czMwIHdpdGggY3AvbUAxUjEsCisJYW0sIGJ3LCBocywKKwljb2xzIzgwLCBsaW5lcyMyNCwgd3NsIzQwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVSLCBjbGVhcj1eTCwKKwljbm9ybT1cRVMsIGNyPV5NLCBjc3I9XEVVJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFTSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRUwsIGVkPVxFW0osIGVsPVxFW0ssIGZzbD1eTSwgaG9tZT1cRVtILAorCWh0PV5JLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFTywgaWw9XEVbJXAxJWRMLCBpbDE9XEVOLAorCWluZD1eSiwgaW5kbj1cRVslcDElZEIsIGlzMj1cRVtVIDdcRVsyNDsxSCwga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtob21lPVxFW0gsCisJcmM9XEVYLCByZXY9XEVbN20sIHJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCByaT1cRUksCisJcmluPVxFWyVwMSVkQSwgcm1hY3M9XEVkLCBybWFtPVxFWz83bCwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwKKwlzYz1cRVcsIHNncjA9XEVbbSwgc21hY3M9XEVGLCBzbWFtPVxFWz83bSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0c2w9XEVdLCB1Yz1cRVBCLAorCisjIyMjIFRhbmRlbQorIworIyBUYW5kZW0gYnVpbGRzIHRoZXNlIHRoaW5ncyBmb3IgdXNlIHdpdGggaXRzIGxpbmUgb2YgZmF1bHQtdG9sZXJhbnQKKyMgdHJhbnNhY3Rpb24tcHJvY2Vzc2luZyBjb21wdXRlcnMuICBUaGV5IGFyZW4ndCBnZW5lcmFsbHkgYXZhaWxhYmxlCisjIG9uIHRoZSBtZXJjaGFudCBtYXJrZXQsIGFuZCBzbyBhcmUgZmFpcmx5IHVuY29tbW9uLgorIworCit0YW5kZW02NTEwfGFkbTNhIHJlcGFja2FnZWQgYnkgVGFuZGVtLAorCXVzZT1hZG0zYSwKKworIyBBIGZ1bm55IHNlcmllcyBvZiB0ZXJtaW5hbCB0aGF0IFRBTkRFTSB1c2VzLiAgVGhlIGFjdHVhbCBtb2RlbCBudW1iZXJzCisjIGhhdmUgYSBmb3VydGggZGlnaXQgYWZ0ZXIgNjUzIHRoYXQgZGVzaWduYXRlcyBtaW5vciB2YXJpYW50cy4gIFRoZXNlIGFyZQorIyBuYXRpdmVseSBibG9jay1tb2RlIGFuZCByYXRoZXIgdWdseSwgYnV0IHRoZXkgaGF2ZSBhIGNoYXJhY3RlciBtb2RlIHdoaWNoCisjIHRoaXMgZG91YnRsZXNzKD8pIGV4cGxvaXRzLiAgVGhlcmUgaXMgYSA2NTIwIHRoYXQgaXMgc2xpZ2h0bHkgZHVtYmVyLgorIyAodGFuZGVtNjUzOiBoYWQgIjpzYj1cRVM6IiwgcHJvYmFibHkgc29tZW9uZSdzIG1pc3Rha2UgZm9yIHNmOyBhbHNvLAorIyByZW1vdmVkIDxpZj0vdXNyL3NoYXJlL3RhYnNldC90YW5kZW02NTM+LCBubyBzdWNoIGZpbGUgLS0gZXNyKQordGFuZGVtNjUzfHQ2NTN4fFRhbmRlbSA2NTN4IG11bHRpcGFnZSB0ZXJtaW5hbCwKKwlPVGJzLCBhbSwgZGEsIGRiLCBocywKKwljb2xzIzgwLCBsaW5lcyMyNCwgd3NsIzY0LCB4bWMjMSwKKwljbGVhcj1cRUksIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cMDIzJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZHNsPVxFb1xyLAorCWVkPVxFSiwgZWw9XEVLLCBmc2w9Xk0sIGhvbWU9XEVILCBpbmQ9XEVTLCByaT1cRVQsIHJtc289XEU2XHMsCisJcm11bD1cRTZccywgc2dyMD1cRTZccywgc21zbz1cRTYkLCBzbXVsPVxFNjAsIHRzbD1cRW8sCisKKyMjIyMgVGFuZHkvUmFkaW8gU2hhY2sKKyMKKyMgVGFuZHkgaGFzIGEgbGluZSBvZiBWRFRzIGRpc3RpbmN0IGZyb20gaXRzIG1pY3JvY29tcHV0ZXJzLgorIworCitkbXRlcm18ZGVza21hdGUgdGVybWluYWwsCisJYW0sIGJ3LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2l2aXM9XEVHNSwgY2xlYXI9XEVqLCBjbm9ybT1cRUc2LCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPVxFQiwgY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1cRUEsIGRjaDE9XEVTLCBkbDE9XEVSLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLAorCWljaDE9XEVRLCBpbDE9XEVQLCBpbmQ9XEVYLCBpbnZpc0AsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBrZjA9XEUxLCBrZjE9XEUyLCBrZjI9XEUzLCBrZjM9XEU0LAorCWtmND1cRTUsIGtmNT1cRTYsIGtmNj1cRTcsIGtmNz1cRTgsIGtmOD1cRTksIGtmOT1cRTAsCisJa2hvbWU9XEVILCBsZjA9ZjEsIGxmMT1mMiwgbGYyPWYzLCBsZjM9ZjQsIGxmND1mNSwgbGY1PWY2LAorCWxmNj1mNywgbGY3PWY4LCBsZjg9ZjksIGxmOT1mMTAsIGxsPVxFRSwgcm11bEAsIHNtdWxALAorCXVzZT1hZG0rc2dyLAorZHQxMDB8ZHQtMTAwfFRhbmR5IERULTEwMCB0ZXJtaW5hbCwKKwl4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCWFjc2M9ampra2xsbW1ubnFxdHR1dXZ2d3d4eCwgYmVsPV5HLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVwMSUyZDslcDIlMmRyLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XDAxMFxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtALAorCWlsMT1cRVtMLCBpbmQ9XkosIGlzMj1cRVs/M2xcRSkwXEUoQiwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVbPzNpLAorCWtmMTA9XEVbPzVpLCBrZjI9XEVbMmksIGtmMz1cRVtALCBrZjQ9XEVbTSwga2Y1PVxFWzE3fiwKKwlrZjY9XEVbMTh+LCBrZjc9XEVbMTl+LCBrZjg9XEVbMjB+LCBrZjk9XEVbMjF+LCBraG9tZT1cRVtILAorCWtucD1cRVsyOX4sIGtwcD1cRVsyOH4sIGxmMT1mMSwgbGYyPWYyLCBsZjM9ZjMsIGxmND1mNCwgbGY1PWY1LAorCWxmNj1mNiwgbGY3PWY3LCBsZjg9ZjgsIHJpPVxFTSwgcm1hY3M9Xk8sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNncjA9XEVbbSwgc21hY3M9Xk4sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCitkdDEwMHd8ZHQtMTAwd3xUYW5keSBEVC0xMDAgdGVybWluYWwgKHdpZGUgbW9kZSksCisJY29scyMxMzIsIHVzZT1kdDEwMCwKK2R0MTEwfFRhbmR5IERULTExMCBlbXVsYXRpbmcgYW5zaSwKKwl4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz1qamtrbGxtbW5ucXF0dHV1dnZ3d3h4LCBiZWw9XkcsIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XEVbMEIsIGN1ZjE9XEVbQywKKwljdXA9XDAxMFxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFWzBBLCBkY2gxPVxFWzBQLAorCWRsMT1cRVswTSwgZWQ9XEVbMEosIGVsPVxFWzBLLCBlbmFjcz1cRShCXEUpMCwgaG9tZT1cRVtILAorCWh0PV5JLCBpY2gxPVxFWzBALCBpbDE9XEVbMEwsIGluZD1eSiwgaXMyPVxFWz8zbFxFKTBcRShCLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtlbmQ9XEVbSywKKwlrZjE9XEVbMX4sIGtmMTA9XEVbMTB+LCBrZjI9XEVbMn4sIGtmMz1cRVszfiwga2Y0PVxFWzR+LAorCWtmNT1cRVs1fiwga2Y2PVxFWzZ+LCBrZjc9XEVbN34sIGtmOD1cRVs4fiwga2Y5PVxFWzl+LAorCWtob21lPVxFW0csIGtpY2gxPVxFW0AsIGtucD1cRVsyNn4sIGtwcD1cRVsyNX4sIGxmMD1mMSwKKwlsZjE9ZjIsIGxmMj1mMywgbGYzPWY0LCBsZjQ9ZjUsIGxmNT1mNiwgbGY2PWY3LCBsZjc9ZjgsIGxmOD1mOSwKKwlsZjk9ZjEwLCByaT1cRU0sIHJtYWNzPV5PLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLAorCXNtYWNzPV5OLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorcHQyMTB8VFJTLTgwIFBULTIxMCBwcmludGluZyB0ZXJtaW5hbCwKKwloYywgb3MsCisJY29scyM4MCwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBpbmQ9XkosCisKKyMjIyMgVGVrdHJvbml4ICh0ZWspCisjCisjIFRla3Ryb25peCB0dWJlcyBhcmUgZ3JhcGhpY3MgdGVybWluYWxzLiAgTW9zdCBvZiB0aGVtIHVzZSBtb2RpZmllZAorIyBvc2NpbGxvc2NvcGUgdGVjaG5vbG9neSBpbmNvcnBvcmF0aW5nIGEgbG9uZy1wZXJzaXN0ZW5jZSBncmVlbiBwaG9zcGhvciwKKyMgYW5kIHN1cHBvcnQgdmVjdG9yIGdyYXBoaWNzIG9uIGEgbWFpbiBzY3JlZW4gd2l0aCBhbiBhdHRhY2hlZCAiZGlhbG9ndWUKKyMgYXJlYSIgZm9yIGludGVyYWN0aXZlIHRleHQuCisjCisKK3Rla3x0ZWs0MDEyfHRla3Ryb25peCA0MDEyLAorCU9UYnMsIG9zLAorCWNvbHMjNzUsIGxpbmVzIzM1LAorCWJlbD1eRywgY2xlYXI9XEVcMDE0JDwxMDAwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJZmY9XDAxNCQ8MTAwMD4sIGlzMj1cRV5PLAorIyAodGVrNDAxMzogYWRkZWQgPGFjc2M+IHRvIHN1cHByZXNzIHRpYyB3YXJuaW5ncyByZSA8c21hY3M+LzxybWFjcz4gLS1lc3IpCit0ZWs0MDEzfHRla3Ryb25peCA0MDEzLAorCWFjc2M9LCBybWFjcz1cRV5PLCBzbWFjcz1cRV5OLCB1c2U9dGVrNDAxMiwKK3RlazQwMTR8dGVrdHJvbml4IDQwMTQsCisJY29scyM4MSwgbGluZXMjMzgsCisJaXMyPVxFXDAxN1xFOSwgdXNlPXRlazQwMTIsCisjICh0ZWs0MDE1OiBhZGRlZCA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmdzIHJlIDxzbWFjcz4vPHJtYWNzPiAtLWVzcikKK3RlazQwMTV8dGVrdHJvbml4IDQwMTUsCisJYWNzYz0sIHJtYWNzPVxFXk8sIHNtYWNzPVxFXk4sIHVzZT10ZWs0MDE0LAordGVrNDAxNC1zbXx0ZWt0cm9uaXggNDAxNCBpbiBzbWFsbCBmb250LAorCWNvbHMjMTIxLCBsaW5lcyM1OCwKKwlpczI9XEVcMDE3XEVcOiwgdXNlPXRlazQwMTQsCisjICh0ZWs0MDE1LXNtOiBhZGRlZCA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmdzIHJlIDxzbWFjcz4vPHJtYWNzPiAtLWVzcikKK3RlazQwMTUtc218dGVrdHJvbml4IDQwMTUgaW4gc21hbGwgZm9udCwKKwlhY3NjPSwgcm1hY3M9XEVeTywgc21hY3M9XEVeTiwgdXNlPXRlazQwMTQtc20sCisjIFRla3Ryb25peCA0MDIzIGZyb20gQW5kcmV3IEtsb3NzbmVyIDxvcmNhIWFuZHJldy50ZWt0cm9uaXhAY3NuZXQtcmVsYXk+CisjCisjIFlvdSBuZWVkIHRvIGhhdmUgInN0dHkgbmwyIiBpbiBlZmZlY3QuICBTb21lIHZlcnNpb25zIG9mIHRzZXQoMSkga25vdworIyBob3cgdG8gc2V0IGl0IGZvciB5b3UuCisjCisjIEl0J3MgZ290IHRoZSBNYWdpYyBDb29raWUgcHJvYmxlbSBhcm91bmQgc3RhbmQtb3V0IG1vZGUuICBJZiB5b3UgY2FuJ3QKKyMgbGl2ZSB3aXRoIE1hZ2ljIENvb2tpZSwgcmVtb3ZlIHRoZSA6c286IGFuZCA6c2U6IGZpZWxkcyBhbmQgZG8gd2l0aG91dAorIyByZXZlcnNlIHZpZGVvLiAgSWYgeW91IGxpa2UgcmV2ZXJzZSB2aWRlbyBzdGFuZC1vdXQgbW9kZSBidXQgZG9uJ3Qgd2FudAorIyBpdCB0byBmbGFzaCwgY2hhbmdlIHRoZSBsZXR0ZXIgJ0gnIHRvICdQJyBpbiB0aGUgOnNvOiBmaWVsZC4KK3RlazQwMjN8dGVrdHJvbml4IDQwMjMsCisJT1RicywgYW0sCisJT1RkTiM0LCBjb2xzIzgwLCBsaW5lcyMyNCwgdnQjNCwgeG1jIzEsCisJT1RubD1eSiwgYmVsPV5HLCBjbGVhcj1cRVwwMTQkPDQvPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eSSwgY3VwPVwwMzQlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGticz1eSCwKKwlybXNvPV5fQCwgc21zbz1eX1AsCisjIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHJ1biB0aGUgNDAyNSBhdCA0ODAwIGJhdWQgb3IgbGVzczsKKyMgdmFyaW91cyBidWdzIGluIHRoZSB0ZXJtaW5hbCBhcHBlYXIgYXQgOTYwMC4gIEl0IHdlZGdlcyBhdCB0aGUKKyMgYm90dG9tIG9mIG1lbW9yeSAodHJ5ICJjYXQgL3Vzci9kaWN0L3dvcmRzIik7IF5TIGFuZCBeUSB0eXBlZAorIyBvbiBrZXlib2FyZCBkb24ndCB3b3JrLiAgWW91IGhhdmUgdG8gaGl0IEJSRUFLIHR3aWNlIHRvIGdldAorIyBvbmUgYnJlYWsgYXQgYW55IHNwZWVkIC0gdGhpcyBpcyBhIGRvY3VtZW50ZWQgZmVhdHVyZS4KKyMgQ2FuJ3QgdXNlIGN1cnNvciBtb3Rpb24gYmVjYXVzZSBpdCdzIG1lbW9yeSByZWxhdGl2ZSwgYW5kCisjIGJlY2F1c2UgaXQgb25seSB3b3JrcyBpbiB0aGUgd29ya3NwYWNlLCBub3QgdGhlIG1vbml0b3IuCisjIFNhbWUgZm9yIGhvbWUuIExpa2V3aXNlLCBzdGFuZG91dCBvbmx5IHdvcmtzIGluIHRoZSB3b3Jrc3BhY2UuCisjCisjIDxlbD4gd2FzIGNvbW1lbnRlZCBvdXQgc2luY2UgdmkgYW5kIHJvZ3VlIHNlZW0gdG8gd29yayBiZXR0ZXIKKyMgc2ltdWxhdGluZyBpdCB3aXRoIGxvdHMgb2Ygc3BhY2VzIQorIworIyA8aWwxPiBhbmQgPGlsPiBoYWQgMTQ1bXMgb2YgcGFkZGluZywgYnV0IHRoYXQgc2xvd2VkIGRvd24gdmkncyBeVQorIyBhbmQgZGlkbid0IHNlZW0gbmVjZXNzYXJ5LgorIwordGVrNDAyNHx0ZWs0MDI1fHRlazQwMjd8dGVrdHJvbml4IDQwMjQvNDAyNS80MDI3LAorCU9UYnMsIGFtLCBkYSwgZGIsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzQsIGxtIzAsCisJYmVsPV5HLCBjbGVhcj1cMDM3ZXJhXHJcblxuLCBjbWRjaD1eXywgY3I9Xk0sCisJY3ViPVwwMzdsZWYgJXAxJWRcciwgY3ViMT1eSCwgY3VkPVwwMzdkb3cgJXAxJWRcciwKKwljdWQxPV5GXkosIGN1Zj1cMDM3cmlnICVwMSVkXHIsIGN1ZjE9XDAzN3JpZ1xyLAorCWN1dT1cMDM3dXAgJXAxJWRcciwgY3V1MT1eSywgZGNoMT1cMDM3ZGNoXHIsCisJZGw9XDAzN2RsaSAlcDElZFxyXDAwNiwgZGwxPVwwMzdkbGlcclwwMDYsCisJZWQ9XDAzN2RsaSA1MFxyLCBodD1eSSwgaWNoMT1cMDM3aWNoXHIgXDAxMCwKKwlpbD1cMDM3dXBcclwwMzdpbGkgJXAxJWRcciwgaWwxPVwwMzd1cFxyXDAzN2lsaVxyLAorCWluZD1eRl5KLAorCWlzMj0hY29tIDMxXHJcblwwMzdzdG8gOSAxNyAyNSAzMyA0MSA0OSA1NyA2NSA3M1xyLAorCXJta3g9XDAzN2xlYSBwMlxyXDAzN2xlYSBwNFxyXDAzN2xlYSBwNlxyXDAzN2xlYSBwOFxyXDAzN2xlYSBmNVxyLAorCXNta3g9XDAzN2xlYSBwNCAvaC9cclwwMzdsZWEgcDggL2svXHJcMDM3bGVhIHA2IC8gL1xyXDAzN2xlYSBwMiAvai9cclwwMzdsZWEgZjUgL0gvXHIsCit0ZWs0MDI1LTE3fHRlayA0MDI1IDE3IGxpbmUgd2luZG93LAorCWxpbmVzIzE3LCB1c2U9dGVrNDAyNSwKK3RlazQwMjUtMTctd3N8dGVrIDQwMjUgMTcgbGluZSB3aW5kb3cgaW4gd29ya3NwYWNlLAorCWlzMj0hY29tIDMxXHJcblwwMzdzdG8gOSAxNyAyNSAzMyA0MSA0OSA1NyA2NSA3M1xyXDAzN3dvciAxN1xyXDAzN21vbiAxN1xyLAorCXJtY3VwPVwwMzdtb24gaFxyLCBybXNvPVwwMzdhdHQgc1xyLCBzbWN1cD1cMDM3d29yIGhcciwKKwlzbXNvPVwwMzdhdHQgZVxyLCB1c2U9dGVrNDAyNS0xNywKK3RlazQwMjUtZXh8dGVrNDAyNy1leHx0ZWsgNDAyNS80MDI3IHcvISwKKwlpczI9XDAzN2NvbSAzM1xyXG4hc3RvIDkgMTcgMjUgMzMgNDEgNDkgNTcgNjUgNzNcciwKKwlybWN1cD1cMDM3Y29tIDMzXHIsIHNtY3VwPSFjb20gMzFcciwgdXNlPXRlazQwMjUsCisjIFRla3Ryb25peCA0MDI1YQorIyBGcm9tOiBEb3VnIEd3eW4gPGd3eW5AYnJsLXNtb2tlLkFSUEE+CisjIFRoZSBmb2xsb3dpbmcgc3RhdHVzIG1vZGVzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uIChyZXBsYWNlIHRoZQorIyBpbml0aWFsICIhIiBieSB3aGF0ZXZlciB0aGUgY3VycmVudCBjb21tYW5kIGNoYXJhY3RlciBpcyk6CisjCSFDT00gMjkJCQkjIE5PVEU6IGNoYW5nZXMgY29tbWFuZCBjaGFyYWN0ZXIgdG8gR1MgKF5dKQorIwleXURVUAorIwleXUVDSCBSCisjCV5dRU9MCisjCV5dUlNTIFQKKyMJXl1TTk8gTgorIwleXVNUTyA5IDE3IDI1IDMzIDQxIDQ5IDU3IDY1IDczCisjIE90aGVyIG1vZGVzIG1heSBiZSBzZXQgYWNjb3JkaW5nIHRvIGNvbW11bmljYXRpb24gcmVxdWlyZW1lbnRzLgorIyBJZiB0aGUgY29tbWFuZCBjaGFyYWN0ZXIgaXMgaW5hZHZlcnRlbnRseSBjaGFuZ2VkLCB0ZXJtY2FwIGNhbid0IHJlc3RvcmUgaXQuCisjIEluc2VydC1jaGFyYWN0ZXIgY2Fubm90IGJlIG1hZGUgdG8gd29yayBvbiBib3RoIHRvcCBhbmQgYm90dG9tIHJvd3MuCisjIENsZWFyLXRvLWVuZC1vZi1kaXNwbGF5IGVtdWxhdGlvbiB2aWEgIURMSSA5ODggaXMgdG9vIGdyb3R0eSB0byB1c2UsIGFsYXMuCisjIFRoZXJlIGFsc28gc2VlbXMgdG8gYmUgYSBwcm9ibGVtIHdpdGggdmVydGljYWwgbW90aW9uLCBwZXJoYXBzIGludm9sdmluZworIyBkZWxldGUvaW5zZXJ0LWxpbmUsIGZvbGxvd2luZyBhIHR5cGVkIGNhcnJpYWdlIHJldHVybi4gIFRoaXMgdGVybWluYWwgc3Vja3MuCisjIERlbGF5cyBub3Qgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgKHRlazQwMjVhOiByZW1vdmVkIG9ic29sZXRlICI6eHg6Ii4gVGhpcyBtYXkgbWVhbiB0aGUgdGVrNDAyNWEgZW50cnkgd29uJ3QKKyMgd29yayBhbnkgbW9yZS4gLS0gZXNyKQordGVrNDAyNWF8VGVrdHJvbml4IDQwMjVBLAorCU9UYnMsIE9UcHQsIGFtLCBidywgZGEsIGRiLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzQsCisJYmVsPV5HLCBjYnQ9XDAzNWJhYzssIGNsZWFyPVwwMzVlcmE7XG5cMDM1cnVwOywgY21kY2g9Xl0sCisJY3I9Xk0sIGN1Yj1cMDM1bGVmICVwMSVkOywgY3ViMT1eSCwgY3VkPVwwMzVkb3cgJXAxJWQ7LAorCWN1ZDE9XkosIGN1Zj1cMDM1cmlnICVwMSVkOywgY3VmMT1cMDM1cmlnOywKKwljdXU9XDAzNXVwICVwMSVkOywgY3V1MT1eSywgZGNoPVwwMzVkY2ggJXAxJWQ7LAorCWRjaDE9XDAzNWRjaDssIGRsPVwwMzVkbGkgJXAxJWQ7LCBkbDE9XDAzNWRsaTssCisJZWw9XDAzNWRjaCA4MDssIGhwYT1cclwwMzVyaWcgJXAxJWQ7LCBodD1eSSwKKwlpbDE9XDAxM1wwMzVpbGk7LCBpbmQ9XkosIGluZG49XDAzNWRvdyAlcDElZDssCisJcnMyPSFjb20gMjlcMDM1ZGVsIDBcMDM1cnNzIHRcMDM1YnVmXDAzNWJ1ZiBuXDAzNWNsZVwwMzVkaXNcMDM1ZHVwXDAzNWVjaCByXDAzNWVvbFwwMzVlcmEgZ1wwMzVmb3IgblwwMzVwYWQgMjAzXDAzNXBhZCAyMDlcMDM1c25vIG5cMDM1c3RvIDkgMTcgMjUgMzMgNDEgNDkgNTcgNjUgNzNcMDM1d29yIDA7LAorCXRiYz1cMDM1c3RvOywKKyMgRnJvbTogY2Jvc2chdGVrbGFicyFkYXZlbSBXZWQgU2VwIDE2IDIxOjExOjQxIDE5ODEKKyMgSGVyZSdzIHRoZSBjb21tYW5kIGZpbGUgdGhhdCBJIHVzZSB0byBnZXQgcm9ndWUgdG8gd29yayBvbiB0aGUgNDAyNS4KKyMgSXQgc2hvdWxkIHdvcmsgd2l0aCBhbnkgcHJvZ3JhbSB1c2luZyB0aGUgb2xkIGN1cnNlcyAoZS5nLiBpdCBiZXR0ZXIKKyMgbm90IHRyeSB0byBzY3JvbGwsIG9yIGN1cnNvciBhZGRyZXNzaW5nIHdvbid0IHdvcmsuICBBbHNvLCB5b3UgY2FuJ3QKKyMgc2VlIHRoZSBjdXJzb3IuKQorIyAoVGhpcyAibGVhcm5zIiB0aGUgYXJyb3cga2V5cyBmb3Igcm9ndWUuIEkgaGF2ZSBhZGFwdGVkIGl0IGZvciB0ZXJtY2FwIC0gbXJoKQordGVrNDAyNS1jcnx0ZWsgNDAyNSBmb3IgY3Vyc2VzIGFuZCByb2d1ZSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzMywKKwljbGVhcj1cMDM3ZXJhOywgY3ViMT1eSCwgY3VkMT1eRl5KLCBjdWYxPVwwMzdyaWc7LAorCWN1cD1cMDM3anVtJWklcDElZFwsJXAyJWQ7LCBjdXUxPV5LLCBodD1eSSwgaW5kPV5GXkosCisJaXMyPSFjb20gMzFcclxuXDAzN3N0byA5IDE3IDI1IDMzIDQxIDQ5IDU3IDY1IDczXHIsCisJcm1jdXA9XDAzN3dvciAwLCBzbWN1cD1cMDM3d29yIDMzaCwKKyMgbmV4dCB0d28gbGluZXMgY29tbWVudGVkIG91dCBzaW5jZSBjdXJzZXMgb25seSBhbGxvd3MgMTI4IGNoYXJzLCBzaWdoLgorIwk6dGk9XDAzN2xlYSBwMS9iL1wwMzdsZWEgcDIvai9cMDM3bGVhIHAzL24vXDAzN2xlYSBwNC9oL1wwMzdsZWEgcDUvIC9cMDM3bGVhIHA2L2wvXDAzN2xlYSBwNy95L1wwMzdsZWEgcDgvay9cMDM3bGVhIHA5L3UvXDAzN2xlYSBwLi9mL1wwMzdsZWEgcHQvYGVyYSB3LzEzXDAzN2xlYSBwMC9zL1wwMzd3b3IgMzNoOlwKKyMJOnRlPVwwMzdsZWEgcDFcMDM3bGVhIHAyXDAzN2xlYSBwM1wwMzdsZWEgcDRcMDM3bGVhIHB0XDAzN2xlYSBwNVwwMzdsZWEgcDZcMDM3bGVhIHA3XDAzN2xlYSBwOFwwMzdsZWEgcDkvbGEvMTNcMDM3bGVhIHAuXDAzN2xlYSBwMFwwMzd3b3IgMDoKK3RlazQwMjVleHw0MDI1ZXh8NDAyN2V4fHRlayA0MDI1IHcvISwKKwlpczI9XDAzN2NvbSAzM1xyXG4hc3RvIDlcLDE3XCwyNVwsMzNcLDQxXCw0OVwsNTdcLDY1XCw3M1xyLAorCXJtY3VwPVwwMzdjb20gMzNcciwgc21jdXA9IWNvbSAzMVxyLCB1c2U9dGVrNDAyNSwKK3RlazQxMDV8dGVrdHJvbml4IDQxMDUsCisJT1RicywgYW0sIG1pciwgbXNnciwgdWwsIHhlbmwsIHh0LAorCWNvbHMjNzksIGl0IzgsIGxpbmVzIzI5LAorCWFjc2M9LCBiZWw9XkcsIGJsaW5rPVxFWz0zOzw3bSwgYm9sZD1cRVs9Nzs8NG0sIGNidD1cRVtaLAorCWNsZWFyPVxFWzJKXEVbSCwgY3I9Xk0sIGN1ZDE9XEVbMUIsIGN1ZjE9XEVbMUMsCisJY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEgsIGN1dTE9XEVbMUEsIGRjaDE9XEVbMVAsCisJZGltPVxFWz0xOzw2bSwgZGwxPVxFWzFNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWlsMT1cRVsxTCwgaW5kPVxFW1MsIGludmlzPVxFWz02Ozw1LCBpczE9XEUlITFcRVttLAorCWlzMj1cRSUhMVxFWz82MTQxXEVbbSwga2JzPV5ILCBrY3ViMT1cRVsxRCwga2N1ZDE9XEVbMUIsCisJa2N1ZjE9XEVbMUMsIGtjdXUxPVxFWzFBLCByZXY9XEVbPTE7PDNtLCByaT1cRVtULAorCXJtYWNzPVxFW20sIHJtY3VwPSwgcm1pcj1cRVs0bCwgcm1zbz1cRVs9MDs8MW0sCisJcm11bD1cRVs9MDs8MW0sIHNncjA9XEVbPTA7PDFtLCBzbWFjcz1cRVsxbSwKKwlzbWN1cD1cRSUhMVxFWz82bFxFWzJKLCBzbWlyPVxFWzRoLCBzbXNvPVxFWz0yOzwzbSwKKwlzbXVsPVxFWz01OzwybSwgdGJjPVxFWzFnLAorCisjICh0ZWs0MTA1LTMwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK3RlazQxMDUtMzB8NDAxNSBlbXVsYXRpbmcgMzAgbGluZSB2dDEwMCwKKwlhbSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzAsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sCisJY2xlYXI9XEVbSFxFW0okPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EkPDI+LCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBlbDE9XEVbMUskPDM+LAorCWVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCByYz1cRTgsCisJcmV2PVxFWzdtJDwyPiwgcmk9XEVNJDw1Piwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20kPDI+LCBybXVsPVxFW20kPDI+LAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7JDwyPiwKKwlzZ3IwPVxFW21cMDE3JDwyPiwgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwKKwlzbXNvPVxFWzE7N20kPDI+LCBzbXVsPVxFWzRtJDwyPiwgdGJjPVxFWzNnLAorCXVzZT12dDEwMCtmbmtleXMsCisKKyMgVGVrdHJvbml4IDQxMDUgZnJvbSBCUkwKKyMgVGhlIGZvbGxvd2luZyBzZXR1cCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJQ09ERSBhbnNpCQlDUkxGIG5vCQkJREFCVUZGRVIgMTQxCisjCURBRU5BQkxFIHllcwkJREFMSU5FUyAzMAkJREFNT0RFIHJlcGxhY2UKKyMJREFWSVNJQklMSVRZIHllcwlFQ0hPIG5vCQkJRURJVE1BUkdJTlMgMSAzMAorIwlGTEFHR0lORyBpbnB1dAkJSU5TRVJUUkVQTEFDRSByZXBsYWNlCUxGQ1Igbm8KKyMJT1JJR0lOTU9ERSByZWxhdGl2ZQlQUk9NUFRNT0RFIG5vCQlTRUxFQ1RDSEFSU0VUIEcwIEIKKyMJU0VMRUNUQ0hBUlNFVCBHMSAwCVRBQlMgLTIKKyMgT3RoZXIgc2V0dXAgbW9kZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHM7IEkgcmVjb21tZW5kCisjCUFDVVJTT1IgMSAwCQlBVVRPUkVQRUFUIHllcwkJQVVUT1dSQVAgeWVzCisjCUJZUEFTU0NBTkNFTCA8TEY+CUNVUlNPUktFWU1PREUgbm8JREFJTkRFWCAxIDAgMAorIwlFT0ZTVFJJTkcgJycJCUVPTFNUUklORyA8Q1I+CQlFT01DSEFSUyA8Q1I+IDxOVT4KKyMJR0FNT0RFIG92ZXJzdHJpa2UJR0NVUlNPUiAwIDEwMCAwCQlHU1BFRUQgMTAgMQorIwlJR05PUkVERUwgbm8JCUtFWUVYQ0hBUiA8REw+CQlOVkRFRklORSAtNTMgIjxOVT4iCisjCVBST01QVFNUUklORyAnJwkJUVVFVUVTSVpFIDI0NjAJCVdJTkRPVyAwIDAgNDA5NSAzMTMyCisjCVhNVERFTEFZIDAKKyMgYW5kIGZhY3RvcnkgY29sb3IgbWFwcy4gIEFmdGVyIHNldHRpbmcgdGhlc2UgbW9kZXMsIHNhdmUgdGhlbSB3aXRoIE5WU0FWRS4gTm8KKyMgZGVsYXlzIGFyZSBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyAiSUMiIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggImltIiAmICJlaSIuCisjICJ0ZWs0MTA1YSIgaXMganVzdCBhIGd1ZXNzOgordGVrNDEwNWF8VGVrdHJvbml4IDQxMDUsCisJT1RicywgT1RwdCwgbXNnciwgeG9uLAorCU9Ua24jOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMzAsIHZ0IzMsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLAorCWNpdmlzPVxFJSEwXEVURDAwXEUlITEsIGNsZWFyPVxFW0hcRVtKLAorCWNub3JtPVxFJSEwXEVURDEwXEUlITEsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwgY3Z2aXM9XEUlITBcRVRENzBcRSUhMSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGluZG49XEVbJXAxJWRTLCBpczI9XEUlITEsCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtmMD1cRU9BLCBrZjE9XEVPQiwga2YyPVxFT0MsIGtmMz1cRU9ELCBrZjQ9XEVPUCwga2Y1PVxFT1EsCisJa2Y2PVxFT1IsIGtmNz1cRU9TLCBsZjA9RjEsIGxmMT1GMiwgbGYyPUYzLCBsZjM9RjQsIGxmND1GNSwKKwlsZjU9RjYsIGxmNj1GOCwgbGw9XEVbMzA7SCwgbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlyaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1jdXA9XEUlITBcRUxCSD1cRSUhMSwKKwlybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVwwMzBcRSUhMFxFS0NcRVwwMTRcRUtSMFxFS0YwXEVOTTBcRUxCSD1cRVRGODAwMDAxMEY0MFxFTEkxMDBcRUxMQT5cRUxNMFxFS0UwXEVORjFcRUtTMFxFTkQwXEUlITFcRWNcRVs/Mzs1bFxFWz83OzhoXEVbclxFW21cRT4sCisJc2M9XEU3LCBzZ3IwPVxFW20sIHNtYWNzPV5OLCBzbWN1cD1cRVs/NmwsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKworIworIyBUZWt0cm9uaXggNDEwNi80MTA3LzQxMDkgZnJvbSBCUkwKKyMgVGhlIGZvbGxvd2luZyBzZXR1cCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJQ09ERSBhbnNpCQlDT0xVTU5NT0RFIDgwCQlDUkxGIG5vCisjCURBQlVGRkVSIDE0MQkJREFFTkFCTEUgeWVzCQlEQUxJTkVTIDMyCisjCURBTU9ERSByZXBsYWNlCQlEQVZJU0lCSUxJVFkgeWVzCUVDSE8gbm8KKyMJRURJVE1BUkdJTlMgMSAzMglGTEFHR0lORyBpbnB1dAkJSU5TRVJUUkVQTEFDRSByZXBsYWNlCisjCUxGQ1Igbm8JCQlMT0NLS0VZQk9BUkQgbm8JCU9SSUdJTk1PREUgcmVsYXRpdmUKKyMJUFJPTVBUTU9ERSBubwkJU0VMRUNUQ0hBUlNFVCBHMCBCCVNFTEVDVENIQVJTRVQgRzEgMAorIwlUQUJTIC0yCisjIE90aGVyIHNldHVwIG1vZGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yIGNvbW11bmljYXRpb24KKyMgcmVxdWlyZW1lbnRzOyBJIHJlY29tbWVuZAorIwlBQ1VSU09SIDEgMAkJQVVUT1JFUEVBVCB5ZXMJCUFVVE9XUkFQIHllcworIwlCWVBBU1NDQU5DRUwgPExGPglDVVJTT1JLRVlNT0RFIG5vCURBSU5ERVggMSAwIDAKKyMJRU9GU1RSSU5HICcnCQlFT0xTVFJJTkcgPENSPgkJRU9NQ0hBUlMgPENSPiA8TlU+CisjCUdBTU9ERSBvdmVyc3RyaWtlCUdDVVJTT1IgMCAxMDAgMAkJR1NQRUVEIDkgMworIwlJR05PUkVERUwgbm8JCUtFWUVYQ0hBUiA8REw+CQlOVkRFRklORSAtNTMgIjxOVT4iCisjCVBST01QVFNUUklORyAnJwkJUVVFVUVTSVpFIDI2MjAJCVdJTkRPVyAwIDAgNDA5NSAzMTMyCisjCVhNVERFTEFZIDAKKyMgYW5kIGZhY3RvcnkgY29sb3IgbWFwcy4gIEFmdGVyIHNldHRpbmcgdGhlc2UgbW9kZXMsIHNhdmUgdGhlbSB3aXRoIE5WU0FWRS4gIE5vCisjIGRlbGF5cyBhcmUgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgIklDIiBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoICJpbSIgJiAiZWkiLgordGVrNDEwNmJybHx0ZWs0MTA3YnJsfHRlazQxMDlicmx8VGVrdHJvbml4IDQxMDYgNDEwNyBvciA0MTA5LAorCW1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzMiwgdnQjMywKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osCisJY2l2aXM9XEUlITBcRVREMDBcRSUhMSwgY2xlYXI9XEVbSFxFW0osCisJY25vcm09XEUlITBcRVREMTBcRSUhMSwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVNLCBjdnZpcz1cRSUhMFxFVEQ3MFxFJSExLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaW5kbj1cRVslcDElZFMsIGlzMj1cRSUhMSwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2YwPVxFT0EsIGtmMT1cRU9CLCBrZjI9XEVPQywga2YzPVxFT0QsIGtmND1cRU9QLCBrZjU9XEVPUSwKKwlrZjY9XEVPUiwga2Y3PVxFT1MsIGxmMD1GMSwgbGYxPUYyLCBsZjI9RjMsIGxmMz1GNCwgbGY0PUY1LAorCWxmNT1GNiwgbGY2PUY4LCBsbD1cRVszMjtILCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJpbj1cRVslcDElZFQsIHJtYWNzPV5PLCBybWN1cD1cRSUhMFxFTEJIPVxFJSExLAorCXJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczE9XDAzMFxFJSEwXEVLQ1xFXDAxNFxFS1IwXEVLRjBcRU5NMFxFTEJIPVxFVEY4MDAwMDEwRjQwXEVMSTEwMFxFTExCMFxFTE0wXEVLRTBcRU5GMVxFS1MwXEVORDBcRVJFMFxFJSExXEVjXEVbPzM7NWxcRVs/Nzs4aFxFW3JcRVttXEU+LAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWFjcz1eTiwgc21jdXA9XEVbPzZsLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzc7NDJtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisKK3RlazQxMDd8dGVrNDEwOXx0ZWt0cm9uaXggdGVybWluYWxzIDQxMDcgNDEwOSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLCB1bCwgeGVubCwgeHQsCisJY29scyM3OSwgaXQjOCwgbGluZXMjMjksCisJYmVsPV5HLCBibGluaz1cRSUhMVxFWzVtJDwyPlxFJSEwLAorCWJvbGQ9XEUlITFcRVsxbSQ8Mj5cRSUhMCwgY2xlYXI9XEVMWiwgY25vcm09XEUlITAsIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBjdnZpcz1cRSUhMywKKwlkaW09XEUlITFcRVs8MG0kPDI+XEUlITAsIGVkPVxFSiwgZWw9XEVLLCBodD1eSSwgaW5kPV5KLAorCWticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLAorCXJldj1cRSUhMVxFWzdtJDwyPlxFJTAsIHJpPVxFSSwKKwlybXNvPVxFJSExXEVbbSQ8Mj5cRSUhMCwgcm11bD1cRSUhMVxFW20kPDI+XEUlITAsCisJc2dyPVxFJSUhMVxFWyU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTttJDwyPlxFJSUhMCwKKwlzZ3IwPVxFJSExXEVbbSQ8Mj5cRSUhMCwgc21zbz1cRSUhMVxFWzc7NW0kPDI+XEUlITAsCisJc211bD1cRSUhMVxFWzRtJDwyPlxFJSEwLAorIyBUZWt0cm9uaXggNDIwNyB3aXRoIHN5c2xpbmUuICBJbiB0aGUgYW5jZXN0cmFsIHRlcm1jYXAgZmlsZSB0aGlzIHdhcyA0MTA3LXM7CisjIHNlZSB0aGUgbm90ZSBhdHRhY2hlZCB0byB0ZWs0MjA3LgordGVrNDIwNy1zfFRla3Ryb25peCA0MjA3IHdpdGggc3lzbGluZSBidXQgbm8gbWVtb3J5LAorCWVzbG9rLCBocywKKwlkc2w9XEU3XEVbPzZsXEVbMktcRVs/NmhcRTgsIGZzbD1cRVs/NmhcRTgsCisJaXMxPVxFJSExXEVbMjszMnJcRVsxMzJEXEVbMmdcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVtKLAorCWlzMj1cRTdcRVs/NmxcRVsyS1xFWz82aFxFOCwKKwl0c2w9XEU3XEVbPzZsXEVbMktcRVs7JWklZGYsIHVzZT10ZWs0MTA3LAorCisjIFRoZSA0MTEwIHNlcmllcyBtYXkgYmUgYSB3b25kZXJmdWwgZ3JhcGhpY3Mgc2VyaWVzLCBidXQgdGhleSBtYWtlIHRoZSA0MDI1CisjIGxvb2sgZ29vZCBmb3Igc2NyZWVuIGVkaXRpbmcuICBJbiB0aGUgZGlhbG9nIGFyZWEsIHlvdSBjYW4ndCBtb3ZlIHRoZSBjdXJzb3IKKyMgb2ZmIHRoZSBib3R0b20gbGluZS4gIE91dCBvZiB0aGUgZGlhbG9nIGFyZWEsIF5LIG1vdmVzIGl0IHVwLCBidXQgdGhlcmUKKyMgaXMgbm8gd2F5IHRvIHNjcm9sbC4KKyMKKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgZmxvcHB5IGZvciBmcmVlIGZyb20gVGVrIHRoYXQgbWFrZXMgdGhlCisjIDQxMTIgZW11bGF0ZSB0aGUgdnQ1MiAodXNlIHRoZSB2dDUyIHRlcm1jYXApLiBUaGVyZSBpcyBhbHNvCisjIGFuIGV4cGVjdGVkIGVuaGFuY2VtZW50IHRoYXQgd2lsbCB1c2UgQU5TSSBzdGFuZGFyZCBzZXF1ZW5jZXMuCisjCisjIDQxMTIgaW4gbm9uLWRpYWxvZyBhcmVhIHByZXRlbmRpbmcgdG8gc2Nyb2xsLiBJdCByZWFsbHkgd3JhcHMKKyMgYnV0IHZpIGlzIHNhaWQgdG8gd29yayAobW9yZSBvciBsZXNzKSBpbiB0aGlzIG1vZGUuCisjCisjICd2aScgd29ya3MgcmVhc29uYWJseSB3ZWxsIHdpdGggdGhpcyBlbnRyeS4KKyMKK290ZWs0MTEyfG80MTEyLW5kfG90ZWs0MTEzfG90ZWs0MTE0fG9sZCB0ZWt0cm9uaXggNDExMCBzZXJpZXMsCisJYW0sCisJY29scyM4MCwgbGluZXMjMzQsCisJYmVsPV5HLCBjbGVhcj1cRV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1eSywgaW5kPV5KLAorCXJtY3VwPVxFS0ExXEVMVjEsIHNtY3VwPVxFS0EwXEVMVjBcRU1HMCwKKyMgVGhlIDQxMTIgd2l0aCB0aGUgQU5TSSBjb21wYXRpYmlsaXR5IGVuaGFuY2VtZW50Cit0ZWs0MTEyfHRlazQxMTR8dGVrdHJvbml4IDQxMTAgc2VyaWVzLAorCU9UYnMsIGFtLCBkYiwKKwljb2xzIzgwLCBsaW5lcyMzNCwKKwljYnQ9XEVbWiwgY2xlYXI9XEVbMkpcRVswOzBILCBjdWIxPV5ILCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFTSwgZGNoMT1cRVtQLCBkbDE9XEVbTSwKKwllZD1cRVswSiwgZWw9XEVbMEssIGljaDE9XEVbQCwgaWwxPVxFW0wsCisJaW5kPVxFN1xFWzA7MEhcRVtNXEU4LCBpczI9XEUzITEsIHJpPVxFN1xFWzA7MEhcRVtMXEU4LAorCXJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCit0ZWs0MTEyLW5kfDQxMTIgbm90IGluIGRpYWxvZyBhcmVhLAorCU9UbnMsCisJY3V1MT1eSywgdXNlPXRlazQxMTIsCit0ZWs0MTEyLTV8NDExMiBpbiA1IGxpbmUgZGlhbG9nIGFyZWEsCisJbGluZXMjNSwgdXNlPXRlazQxMTIsCisjICh0ZWs0MTEzOiB0aGlzIHVzZWQgdG8gaGF2ZSAiPGN1ZjE9XExNMVxzXExNMD4iLCBzb21lb25lJ3MgbWlzdGFrZTsKKyMgcmVtb3ZlZCAiPHNtYWNzPVxFXk4+LCA8cm1hY3M9XEVeTz4iLCB3aGljaCBoYWQgYmVlbiBjb21tZW50ZWQgb3V0IGluIDguMy4KKyMgTm90ZSwgdGhlICEwIGFuZCAhMSBzZXF1ZW5jZXMgaW4gPHJtY3VwPi88c21jdXA+Lzxjbm9ybT4vPGNpdmlzPiB3ZXJlCisjIHByZXZpb3VzbHkgXDA0MTAgYW5kIFwwNDExIHNlcXVlbmNlcy4uLkkgZG9uJ3QgKnRoaW5rKiB0aGV5IHdlcmUgc3VwcG9zZWQKKyMgdG8gYmUgNC1kaWdpdCBvY3RhbCAtLSBlc3IpCit0ZWs0MTEzfHRla3Ryb25peCA0MTEzIGNvbG9yIGdyYXBoaWNzIHdpdGggNSBsaW5lIGRpYWxvZyBhcmVhLAorCU9UYnMsIGFtLCBkYSwgZW8sCisJY29scyM4MCwgbGluZXMjNSwKKwljbGVhcj1cRUxaLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFTE0xIFxFTE0wLAorCWZsYXNoPVxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkJBNFxFUkIwLAorCWlzMj1cRUtBMVxFTEw1XEVMVjBcRUxWMSwgdWM9XDAxMFxFTE0xX1xFTE0wLAordGVrNDExMy0zNHx0ZWt0cm9uaXggNDExMyBjb2xvciBncmFwaGljcyB3aXRoIDM0IGxpbmUgZGlhbG9nIGFyZWEsCisJbGluZXMjMzQsCisJaXMyPVxFS0ExXEVMTEIyXEVMVjBcRUxWMSwgdXNlPXRlazQxMTMsCisjIDpuczogbGVmdCBvZmYgdG8gYWxsb3cgdmkgdmlzdWFsIG1vZGUuIEFQTCBmb250ICg6YXM9XEVeTjovOmFlPVxFXk86KSBub3QKKyMgc3VwcG9ydGVkIGhlcmUuIDp1YzogaXMgc2xvdywgYnV0IGxvb2tzIG5pY2UuIFN1Z2dlc3Qgc2V0ZW52IE1PUkUgLXVwIC4KKyMgOnZiOiBuZWVkcyBlbm91Z2ggZGVsYXkgdG8gbGV0IHlvdSBzZWUgdGhlIGJhY2tncm91bmQgY29sb3IgYmVpbmcgdG9nZ2xlZC4KK3RlazQxMTMtbmR8dGVrdHJvbml4IDQxMTMgY29sb3IgZ3JhcGhpY3Mgd2l0aCBubyBkaWFsb2cgYXJlYSwKKwlPVGJzLCBhbSwgZW8sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzQsCisJY2xlYXI9XEVeTCwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eSSwgY3V1MT1eSywKKwljdnZpcz1cRUxaXEVLQTAsCisJZmxhc2g9XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQjAsCisJaG9tZT1cRUxGN2xcMTc3IEAsIGh0PV5JLCBpczI9XEVMWlxFS0EwXEVMRjdsXDE3NyBALAorCWxsPVxFTEYgaGwgQCwgcm1zbz1cRU1UMSwgc21zbz1cRU1UMiwgdWM9XDAxMFxFTUcxX1xFTUcwLAorIyBUaGlzIGVudHJ5IGlzIGZyb20gVGVrLiBJbmMuICAoQnJpYW4gQmllaGwpCisjICh0ZWs0MTE1OiA6YmM6IHJlbmFtZWQgdG8gOmxlOiwgPHJtYW0+LzxzbWFtPiBhZGRlZCBiYXNlZCBvbiBpbml0IHN0cmluZyAtLSBlc3IpCitvdGVrNDExNXxUZWt0cm9uaXggNDExNSwKKwlPVGJzLCBhbSwgZGEsIGRiLCBlbywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwKKwljYnQ9XEVbWiwgY2xlYXI9XEVbSFxFWzJKLAorCWNub3JtPVxFJSEwXEVMQkc4XEUlITFcRVszNDsxSCwgY3ViMT1cRVtELCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwljdnZpcz1cRSUhMFxFTEJCMlxFJSExLCBkY2gxPVxFW1AsIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLAorCWlsMT1cRVtMLAorCWlzMj1cRSUhMFxFJVwwMTRcRUxWMFxFS0ExXEVMQkIyXEVOVUA9XEVMTEIyXEVMTTBcRUxWMVxFS1lBP1xFJSExXEVbPDFsXEVbPzdoXEVbPzhoXEVbMzQ7MUhcRVszNEJcRVttLAorCWticz1eSCwgcmk9XEVNLCBybWFtPVxFWz83bCwKKwlybWN1cD1cRSUhMFxFTEJHOFxFJSExXEVbMzQ7MUhcRVtKLCBybWlyPVxFWzRsLAorCXJta3g9XEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbWFtPVxFWz83aCwKKwlzbWN1cD1cRSUhMFxFTEJCMlxFJSExLCBzbWlyPVxFWzRoLCBzbWt4PVxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAordGVrNDExNXxuZXdlciB0ZWt0cm9uaXggNDExNSBlbnRyeSB3aXRoIG1vcmUgQU5TSSBjYXBhYmlsaXRpZXMsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMzNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osCisJY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBocGE9XEVbJXAxJXsxfSUrJWRHLAorCWh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVs4bSwga2JzPV5ILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsCisJcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLCByZXY9XEVbN20sIHJtYW09XEVbPzdsLAorCXJtc289XEVbbSwgcm11bD1cRVttLAorCXNncj1cRVslPyVwMSV0NzslOyU/JXAyJXQ0OyU7JT8lcDMldDc7JTslPyVwNCV0NTslOyU/JXA2JXQxOyU7bSwKKwlzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbMmcsCisJdnBhPVxFWyVwMSV7MX0lKyVkZCwKKyMgVGhlIHRlazQxMjUgZW11bGF0ZXMgYSB2dDEwMCBpbmNvcnJlY3RseSAtIHRoZSBzY3JvbGxpbmcgcmVnaW9uCisjIGNvbW1hbmQgaXMgaWdub3JlZC4gIFRoZSBmb2xsb3dpbmcgZW50cnkgcmVwbGFjZXMgPGNzcj4gd2l0aCB0aGUgbmVlZGVkCisjIDxpbD4sIDxpbD4sIGFuZCA8c21pcj47IHJlbW92ZXMgc29tZSBjdXJzb3IgcGFkIGNvbW1hbmRzIHRoYXQgdGhlIHRlazQxMjUKKyMgY2hva2VzIG9uOyBhbmQgYWRkcyBhIGxvdCBvZiBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHRlayBkaWFsb2cgYXJlYS4KKyMgTm90ZSB0aGF0IHRoaXMgZW50cnkgdXNlcyBhbGwgMzQgbGluZXMgYW5kIHNldHMgdGhlIGN1cnNvciBjb2xvciB0byBncmVlbi4KKyMgU3RldmUgSmFjb2Jzb24gOC84NQorIyAodGVrNDEyNTogdGhlcmUgd2VyZSB0d28gIlwhInMgaW4gdGhlIGlzIHRoYXQgSSByZXBsYWNlZCB3aXRoICJcRSEiOworIyBjb21tZW50ZWQgb3V0LCA8c21pcj49XEUxIGJlY2F1c2UgdGhlcmUncyBubyA8cm1pcj4gIC0tIGVzcikKK3RlazQxMjV8dGVrdHJvbml4IDQxMjUsCisJbGluZXMjMzQsCisJY3NyQCwgZGwxPVxFWzFNLCBpbDE9XEVbMUwsCisJaXMyPVxFJVxFITBcRVFEMVxFVVgwM1xFS0FcRUxCQjJcRUxDRTBcRUxJMTAwXEVMSjJcRUxMQjJcRUxNMFxFTFMxXEVMWDAwXEVMVjFcRSVcRSExXEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXJjQCwgc2NALCBzbWt4PVxFPSwgdXNlPXZ0MTAwLAorCisjIEZyb206IDxqY29rZXJAdWNiaWM+CisjICh0ZWs0MjA3OiBUaGlzIHdhcyB0aGUgdGVybWNhcCBmaWxlJ3MgZW50cnkgZm9yIHRoZSA0MTA3LzQyMDcsIGJ1dCBTQ08KKyMgc3VwcGxpZWQgYW5vdGhlciwgbGVzcyBjYXBhYmxlIDQxMDcgZW50cnkuICBTbyB3ZSdsbCB1c2UgdGhhdCBmb3IgNDEwNyBhbmQKKyMgbm90ZSB0aGF0IGlmIGpjb2tlciB3YXNuJ3QgY29uZnVzZWQgeW91IG1heSBiZSBhYmxlIHRvIHVzZSB0aGlzIG9uZS4KKyMgSSBtZXJnZWQgaW4gPG1zZ3I+LDxpbmQ+LDxyaT4sPGludmlzPiw8dGJjPiBmcm9tIGEgQlJMIGVudHJ5IC0tIGVzcikKK3RlazQyMDd8VGVrdHJvbml4IDQyMDcgZ3JhcGhpY3MgdGVybWluYWwgd2l0aCBtZW1vcnksCisJYW0sIGJ3LCBtaXIsIG1zZ3IsIHVsLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzMyLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0okPDE1Ni8+LAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVNLCBkY2gxPVxFW1AkPDQvPiwgZGwxPVxFW00kPDMvPiwgZWQ9XEVbSiwKKwllbD1cRVtLJDw1Lz4sIGhvbWU9XEVbSCwgaHQ9XkksIGljaDE9XEVbQCQ8NC8+LAorCWlsMT1cRVtMJDwzLz4sIGluZD1cRVtTLCBpbnZpcz1cRVs9Njs8NSwKKwlpczI9XEUlITBcRUxCUDBcRSUhMVxFW0hcRVsyZ1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFW0osCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVELCBrY3VmMT1cRVtDLCBrY3V1MT1cRU0sIGtob21lPVxFW0gsCisJcmV2PVxFWzdtLCByaT1cRVtULAorCXJtY3VwPVxFWz82aFxFJSEwXEVMQlAwXEUlITFcRVszMjsxZiwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbWN1cD1cRVs/NmxcRVtIXEVbSiwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbMWcsCisKKyMgRnJvbTogPGNhcm9seW5AZGFsaS5iZXJrZWxleS5lZHU+ICBUaHUgT2N0IDMxIDEyOjU0OjI3IDE5ODUKKyMgKHRlazQ0MDQ6IFRoZXJlIHdhcyBhICJcISIgaW4gPHNtY3VwPiB0aGF0IEkgcmVwbGFjZWQgd2l0aCAiXEUhIi4KKyMgVGFiIGhhZCBiZWVuIGdpdmVuIGFzIFxFMkksdGhhdCBtdXN0IGJlIHRoZSB0YWItc2V0IGNhcGFiaWxpdHkgLS0gZXNyKQordGVrNDQwNHx0ZWt0cm9uaXggNDQwNCwKKwlPVGJzLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzMyLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMkosCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFWzFNLAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRVsySSwgaWwxPVxFWzFMLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIHJjPVxFOCwKKwlybWN1cD1cRVsxOzFIXEVbMEpcRVs/NmhcRVs/MWwsIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWgsIHJtc289XEVbMjdtLCBybXVsPVxFW20sIHNjPVxFNywgc2dyMD1cRVttLAorCXNtY3VwPVxFJVxFITFcRVsxOzMyclxFWz82bFxFPiwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xbCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMgU29tZSB1bmtub3duIHBlcnNvbiB3cm90ZToKKyMgSSBhZGRlZCB0aGUgaXMgc3RyaW5nIC0gc3RyYWlnaHQgVW5peCBoYXMgRVNDIDsgaW4gdGhlIGxvZ2luCisjIHN0cmluZyB3aGljaCBzZXRzIGEgY3Q4NTAwIGludG8gbW9uaXRvciBtb2RlIChha2EgNDAyNSBzbm9vcHkKKyMgbW9kZSkuIFRoZSBpcyBzdHJpbmcgaGVyZSBjbGVhbnMgdXAgYSBmZXcgdGhpbmdzIChidXQgbm90CisjIGV2ZXJ5dGhpbmcpLgorY3Q4NTAwfHRla3Ryb25peCBjdDg1MDAsCisJYW0sIGJ3LCBkYSwgZGIsCisJY29scyM4MCwgbGluZXMjMjUsCisJYmVsPV5HLCBjYnQ9XEVeSSwgY2xlYXI9XEVeRSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1cRVMsIGN1cD1cRXwlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVSLAorCWRjaDE9XEVeXSwgZGwxPVxFXk0sIGVkPVxFXlUsIGVsPVxFXlQsIGh0PV5JLCBpY2gxPVxFXlwsCisJaWwxPVxFXkwsIGluZD1eSiwgaXMyPVwwMzdcRVpcRWssIHJpPVxFXkEsIHJtc289XEVccywKKwlybXVsPVxFXHMsIHNncjA9XEVccywgc21zbz1cRSQsIHNtdWw9XEUhLAorCisjIFRla3Ryb25peCA0MjA1IHRlcm1pbmFsLgorIworIyBhbSBpcyBub3QgZGVmaW5lZCBiZWNhdXNlIHRoZSB3cmFwIGFyb3VuZCBvY2N1cnMgbm90IHdoZW4gdGhlIGNoYXIuCisjIGlzIHBsYWNlZCBpbiB0aGUgODAndGggY29sdW1uLCBidXQgd2hlbiB3ZSBhcmUgYXR0ZW1wdGluZyB0byB0eXBlCisjIHRoZSA4MSdzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuICAoZXNyOiBobW0sIHRoaXMgaXMgbGlrZSB0aGUgdnQxMDAKKyMgdmVyc2lvbiBvZiB4ZW5sLCBwZXJoYXBzIGFtICsgeGVubCB3b3VsZCB3b3JrISkKKyMKKyMgQm9sZCwgZGltLCBhbmQgc3RhbmRvdXQgYXJlIHNpbXVsYXRlZCBieSBjb2xvcnMgYW5kIHRodXMgbm90IGFsbG93ZWQKKyMgd2l0aCBjb2xvcnMuICBUaGUgdGVrdHJvbml4IGNvbG9yIHRhYmxlIGlzIG1hcHBlZCBpbnRvIHRoZSBSR0IgY29sb3IKKyMgdGFibGUgYnkgc2V0Zi9zZXRiLiBBbGwgY29sb3JzIGFyZSByZXNldCB0byBmYWN0b3J5IHNwZWNpZmljYXRpb25zIGJ5IG9jLgorIyBUaGUgPGluaXRjPiBjYXAgdXNlcyBSR0Igbm90YXRpb24gdG8gZGVmaW5lIGNvbG9ycy4gIGZvciBhcmd1bWVudHMgMS0zIHRoZQorIyBpbnRlcnZhbCAoMC0xMDAwKSBpcyBicm9rZW4gaW50byA4IHNtYWxsZXIgc3ViLWludGVydmFscyAoMTI1KS4gIEVhY2ggc3ViLQorIyBpbnRlcnZhbCB0aGVuIG1hcHMgaW50byBwcmUtZGVmaW5lZCB2YWx1ZS4KK3RlazQyMDV8dGVrdHJvbml4IDQyMDUsCisJY2NjLCBtaXIsIG1zZ3IsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzMwLCBuY3YjNDksIHBhaXJzIzYzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVs9Nzs8NG0sIGNidD1cRVtaLAorCWNsZWFyPVxFWzJKXEVbSCwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2gxPVxFWzFQLCBkaW09XEVbPTE7PDZtLCBkbDE9XEVbMU0sIGVjaD1cRSVwMSVkWCwKKwllZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksCisJaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbMUwsIGluZD1cRUQsCisJaW5pdGM9XEUlJSEwXEVURjQlPyVwMSV7MH0lPSV0MCVlJXAxJXsxfSU9JXQ0JWUlcDElezJ9JT0ldDMlZSVwMSV7M30lPSV0NSVlJXAxJXs0fSU9JXQyJWUlcDElezV9JT0ldDYlZSVwMSV7Nn0lPSV0NyVlMSU7JT8lcDIlezEyNX0lPCV0MCVlJXAyJXsyNTB9JTwldEEyJWUlcDIlezM3NX0lPCV0QT8lZSVwMiV7NTAwfSU8JXRDOCVlJXAyJXs2MjV9JTwldEQ0JWUlcDIlezc1MH0lPCV0RTElZSVwMiV7ODc1fSU8JXRFXDolZUY0JTslPyVwMyV7MTI1fSU8JXQwJWUlcDMlezI1MH0lPCV0QTIlZSVwMyV7Mzc1fSU8JXRBPyVlJXAzJXs1MDB9JTwldEM4JWUlcDMlezYyNX0lPCV0RDQlZSVwMyV7NzUwfSU8JXRFMSVlJXAzJXs4NzV9JTwldEVcOiVlRjQlOyU/JXA0JXsxMjV9JTwldDAlZSVwNCV7MjUwfSU8JXRBMiVlJXA0JXszNzV9JTwldEE/JWUlcDQlezUwMH0lPCV0QzglZSVwNCV7NjI1fSU8JXRENCVlJXA0JXs3NTB9JTwldEUxJWUlcDQlezg3NX0lPCV0RVw6JWVGNCU7XEUlJSExLAorCWludmlzPVxFWz02Ozw1LCBpczE9XEUlITBcRVRNMVxFJSExXEVbbSwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMD1cRU9BLAorCWtmMT1cRU9CLCBrZjI9XEVPQywga2YzPVxFT0QsIGtmND1cRVAsIGtmNT1cRVEsIGtmNj1cRVIsCisJa2Y3PVxFUywKKwlvYz1cRSUhMFxFVEZCMDAwMDAxRjRGNEY0MkY0MDAzMEY0MDRBNEM8RjQ1MEY0RjQ2RjQwRjQ3RjRGNDBcRSUhMSwKKwlvcD1cRVszOTs0MG0sIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywgcm1jdXA9LAorCXJtaXI9XEVbNGwsIHJtc289XEVbPTA7PDFtLCBybXVsPVxFWzI0bSwKKwlzZXRiPVxFWz0lPyVwMSV7MH0lPSV0MG0lZSVwMSV7MX0lPSV0NG0lZSVwMSV7Mn0lPSV0M20lZSVwMSV7M30lPSV0NW0lZSVwMSV7NH0lPSV0Mm0lZSVwMSV7NX0lPSV0Nm0lZSVwMSV7Nn0lPSV0N20lZTFtJTssCisJc2V0Zj1cRVs8JT8lcDElezB9JT0ldDBtJWUlcDElezF9JT0ldDRtJWUlcDElezJ9JT0ldDNtJWUlcDElezN9JT0ldDVtJWUlcDElezR9JT0ldDJtJWUlcDElezV9JT0ldDZtJWUlcDElezZ9JT0ldDdtJWUxbSU7LAorCXNncjA9XEVbPTA7PDFtXEVbMjQ7MjU7MjdtXDAxNywgc21hY3M9Xk4sCisJc21jdXA9XEUlJSExXEVbPzZsXEVbMkosIHNtaXI9XEVbNGgsIHNtc289XEVbPTI7PDNtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVsxZywKKworIyMjIyBUZWxldHlwZSAodHR5KQorIworIyBUaGVzZSBhcmUgdGhlIGhhcmRjb3B5IFRlbGV0eXBlcyBmcm9tIGJlZm9yZSBBVCZUIGJvdWdodCB0aGUgY29tcGFueSwKKyMgY2xhdHRlcmluZyBlbGVjdHJvbWVjaGFuaWNhbCBkaW5vc2F1cnMgaW4gQmFrZWxpdGUgY2FzZXMgdGhhdCBwcmludGVkIG9uCisjIHB1bHB5IHllbGxvdyByb2xsIHBhcGVyLiAgSWYgeW91IHJlbWVtYmVyIHRoZXNlIHlvdSBnbyBiYWNrIGEgd2F5cy4KKyMgVGVsZXR5cGUtYnJhbmRlZCBWRFRzIGFyZSBsaXN0ZWQgaW4gdGhlIEFUJlQgc2VjdGlvbi4KKyMKKyMgVGhlIGVhcmxpZXN0IFVOSVhlcyB3ZXJlIGRlc2lnbmVkIHRvIHVzZSB0aGVzZSBjbHVua2VyczsgbnJvZmYgYW5kIGEgZmV3CisjIG90aGVyIHByb2dyYW1zIHN0aWxsIGRlZmF1bHQgdG8gZW1pdHRpbmcgY29kZXMgZm9yIHRoZSBNb2RlbCAzNy4KKyMKKwordHR5MzN8dHR5MzV8bW9kZWwgMzMgb3IgMzUgdGVsZXR5cGUsCisJaGMsIG9zLCB4b24sCisJY29scyM3MiwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBpbmQ9XkosCit0dHkzN3xtb2RlbCAzNyB0ZWxldHlwZSwKKwlPVGJzLCBoYywgb3MsIHhvbiwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdXUxPVxFNywgaGQ9XEU5LCBodT1cRTgsCisJaW5kPV5KLAorCisjIFRoZXJlIGFyZSBrbm93biB0byBiZSBhdCBsZWFzdCB0aHJlZSBmbGF2b3JzIG9mIHRoZSB0dHk0MCwgYWxsIHNlZW0gbW9yZQorIyBsaWtlIElCTSBoYWxmIGR1cGxleCBmb3JtcyBmaWxsZXJzIHRoYW4gQVNDSUkgdGVybWluYWxzLiAgVGhleSBoYXZlIGxvdHMgb2YKKyMgYXdmdWwgYnJhaW5kYW1hZ2UsIHN1Y2ggYXMgcHJpbnRpbmcgYSB2aXNpYmxlIG5ld2xpbmUgaW5kaWNhdG9yIGFmdGVyIGVhY2gKKyMgbmV3bGluZS4gIFRoZSA0MC0xIGlzIGEgaGFsZiBkdXBsZXggdGVybWluYWwgYW5kIGlzIGhvcGVsZXNzLiAgVGhlIDQwLTIgaXMKKyMgYnJhaW5kYW1hZ2VkIGJ1dCBoYXMgaG9wZSBhbmQgaXMgZGVzY3JpYmVkIGhlcmUuICBUaGUgNDAtNCBpcyBhIDMyNzAKKyMgbG9va2FsaWtlIGFuZCBiZXlvbmQgaG9wZS4gIFRoZSB0ZXJtaW5hbCBoYXMgdmlzaWJsZSBiZWxsIGJ1dCBJIGRvbid0IGtub3cKKyMgaXQgLSBpdCdzIG51bGwgaGVyZSB0byBwcmV2ZW50IGl0IGZyb20gc2hvd2luZyB0aGUgQkwgY2hhcmFjdGVyLgorIyBUaGVyZSBpcyBhbiBcRUcgaW4gPG5sPiBiZWNhdXNlIG9mIGEgYnVnIGluIG9sZCB2aSAoaWYgc3R0eSBzYXlzIHlvdSBoYXZlCisjIGEgIm5ld2xpbmUiIHN0eWxlIHRlcm1pbmFsICgtY3Jtb2RlKSB2aSBmaWd1cmVzIGFsbCBpdCBuZWVkcyBpcyBubAorIyB0byBnZXQgY3JsZiwgZXZlbiBpZiA8Y3I+IGlzIG5vdCBeTS4pCisjICh0dHk0MDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm5sPVxFR1xFQjoiLCBpdCdzIGp1c3QgZG8rY3IgLS0gZXNyKQordHR5NDB8ZHM0MHxkczQwLTJ8ZGF0YXNwZWVkNDB8dGVsZXR5cGUgZGF0YXNwZWVkIDQwLzIsCisJT1RicywgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFSCQ8MjA+XEVKJDw4MD4sIGNyPVxFRywgY3ViMT1eSCwgY3VkMT1cRUIsCisJY3VmMT1cRUMsIGN1dTE9XEU3LCBkY2gxPVxFUCQ8NTA+LCBkbDE9XEVNJDw1MD4sCisJZWQ9XEVKJDw3NT4sIGhvbWU9XEVIJDwxMD4sIGh0PVxFQCQ8MTA+LCBodHM9XEUxLAorCWljaDE9XEVcXiQ8NTA+LCBpbDE9XEVMJDw1MD4sIGluZD1cRVMkPDIwPiwga2JzPV5dLAorCWtjdWIxPV5ILCBtYzQ9XlQsIG1jNT1cMDIyJDwyMDAwPiwgcmk9XEVUJDwxMD4sIHJtc289XEU0LAorCXJzMj1cMDIzXEVSJDw2MD4sIHNtc289XEUzLCB0YmM9XEVIXEUyJDw4MD4sCit0dHk0M3xtb2RlbCA0MyB0ZWxldHlwZSwKKwlPVGJzLCBhbSwgaGMsIG9zLCB4b24sCisJY29scyMxMzIsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaW5kPV5KLCBrYnM9XkgsCisKKyMjIyMgVHltc2hhcmUKKyMKKworIyBZb3UgY2FuIGFkZCA8aXMyPVxFPD4gdG8gcHV0IHRoaXMgNDAtY29sdW1uIG1vZGUsIHRob3VnaCBJIGNhbid0CisjIGZvciB0aGUgbGlmZSBvZiBtZSB0aGluayB3aHkgYW55b25lIHdvdWxkIHdhbnQgdG8uCitzY2Fuc2V0fHNjNDEwfHNjNDE1fFR5bXNoYXJlIFNjYW4gU2V0LAorCWFtLCBidywgbXNnciwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlhY3NjPWolazRsPG0tcVwseDUsIGJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5JLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XkssIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaW5kPV5KLCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwgbWMwPVxFOzMsIG1jND1cRTswLAorCW1jNT1cRTswLCByYz1eQywgcm1hY3M9Xk8sIHJzMT1cRT4sIHNjPV5CLCBzbWFjcz1eTiwKKworIyMjIyBWb2xrZXItQ3JhaWcgKHZjKQorIworIyBJZiB5b3Ugc2F3IGEgQnl0ZSBNYWdhemluZSBjb3ZlciB3aXRoIGEgdGVybWluYWwgb24gaXQgZHVyaW5nIHRoZSBlYXJseQorIyAxOTgwcywgaXQgd2FzIHByb2JhYmx5IG9uZSBvZiB0aGVzZS4gIENhcmwgSGVsbWVycyBsaWtlZCB0aGVtIGJlY2F1c2UKKyMgdGhleSBjb3VsZCBjcmFuayAxOS4yIGFuZCB3ZXJlIGNoZWFwICh0aGF0IGlzLCBoZSBsaWtlZCB0aGVtIHVudGlsIGhlIHRyaWVkCisjIHRvIHByb2dyYW0gb25lLi4uKQorIworCisjIE1pc3NpbmcgaW4gdmMzMDNhIGFuZCB2YzMwMyBkZXNjcmlwdGlvbnM6ICB0aGV5IHNjcm9sbCAyIGxpbmVzIGF0IGEgdGltZQorIyBldmVyeSBvdGhlciBsaW5lZmVlZC4KK3ZjMzAzfHZjMTAzfHZjMjAzfHZvbGtlci1jcmFpZyAzMDMsCisJT1RicywgT1RucywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDE0JDw0MD4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5JLAorCWN1dTE9Xk4sIGhvbWU9XDAxMyQ8NDA+LCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5JLAorCWtjdXUxPV5OLCBsbD1cMDE3JDwxPlcsCit2YzMwM2F8dmM0MDNhfHZvbGtlci1jcmFpZyAzMDNhLAorCWNsZWFyPVwwMzAkPDQwPiwgY3VmMT1eVSwgY3V1MT1eWiwgZWw9XDAyNiQ8MjA+LAorCWhvbWU9XDAzMSQ8NDA+LCBrY3VmMT1eVSwga2N1dTE9XlosIGxsPV5QLCB1c2U9dmMzMDMsCisjICh2YzQwNDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5aXlBeVSA6IiAtLSBlc3IpCit2YzQwNHx2b2xrZXItY3JhaWcgNDA0LAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAzMCQ8NDA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eVSwKKwljdXA9XDAyMCVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eWiwKKwllZD1cMDI3JDw0MD4sIGVsPVwwMjYkPDIwPiwgaG9tZT1cMDMxJDw0MD4sIGluZD1eSiwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5VLCBrY3V1MT1eWiwKK3ZjNDA0LXN8dm9sa2VyLWNyYWlnIDQwNCB3L3N0YW5kb3V0IG1vZGUsCisJY3VkMT1eSiwgcm1zbz1eTywgc21zbz1eTiwgdXNlPXZjNDA0LAorIyBGcm9tOiA8d29sZmdhbmdAY3Muc2Z1LmNhPgorIyAodmM0MTQ6IG1lcmdlZCBpbiBjdXAvZGwxL2hvbWUgZnJvbSBhbiBvbGQgdmM0MTRoLW5veG9uKQordmM0MTR8dmM0MTRofFZvbGtlci1DcmFpZyA0MTRIIGluIHNhbmUgZXNjYXBlIG1vZGUuLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFXDAzNCQ8NDA+LCBjdWQxPVxFXkssIGN1ZjE9XlAsCisJY3VwPVxFXDAyMSVwMiVjJXAxJWMkPDQwPiwgY3V1MT1cRV5MLCBkY2gxPVxFMywKKwlkbDE9XEVcMDIzJDw0MD4sIGVkPVxFXlgsIGVsPVxFXDAxNyQ8MTAvPiwgaG9tZT1cRV5SLAorCWljaDE9XEVcOiwgaWwxPVxFXDAzMiQ8NDA+LCBrY3ViMT1eSCwga2N1ZDE9XEVeSywga2N1ZjE9XlAsCisJa2N1dTE9XEVeTCwga2YwPVxFQSwga2YxPVxFQiwga2YyPVxFQywga2YzPVxFRCwga2Y0PVxFRSwKKwlrZjU9XEVGLCBrZjY9XEVHLCBrZjc9XEVILCBraG9tZT1cRV5SLCBsZjA9UEYxLCBsZjE9UEYyLAorCWxmMj1QRjMsIGxmMz1QRjQsIGxmND1QRjUsIGxmNT1QRjYsIGxmNj1QRjcsIGxmNz1QRjgsCisJcm1zbz1cRV5fLCBzbXNvPVxFXlksCit2YzQxNXx2b2xrZXItY3JhaWcgNDE1LAorCWNsZWFyPV5MLCB1c2U9dmM0MDQsCisKKyMjIyMjIyMjIE9CU09MRVRFIFBFUlNPTkFMLU1JQ1JPIENPTlNPTEVTIEFORCBFTVVMQVRJT05TCisjCisKKyMjIyMgSUJNIFBDIGFuZCBjbG9uZXMKKyMKKworIyBUaGUgcGNwbG90IElCTS1QQyB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSBpcyByZWFsbHkgbWVzc2VkIHVwLiBJdCBpcworIyBzdXBwb3NlZCB0byBlbXVsYXRlIGEgdnQtMTAwLCBidXQgZW11bGF0ZXMgdGhlIHdyYXBhcm91bmQgYnVnIGluY29ycmVjdGx5LAorIyBkb2Vzbid0IHN1cHBvcnQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGlnbm9yZXMgYWRkIGxpbmUgY29tbWFuZHMsIGFuZCBpZ25vcmVzCisjIGRlbGV0ZSBsaW5lIGNvbW1hbmRzLiBDb25zZXF1ZW50bHksIHRoZSByZXN1bHRpbmcgYmVoYXZpb3IgbG9va3MgbGlrZSBhCisjIGNydWRlIGFkbTNhLXR5cGUgdGVybWluYWwuCisjIFN0ZXZlIEphY29ic29uIDgvODUKK3BjcGxvdHxwYy1wbG90IHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtLAorCXhlbmxALAorCWNzckAsIGRsQCwgZGwxQCwgaWxALCBpbDFALCByY0AsIHNjQCwgdXNlPXZ0MTAwLAorIyBLYXlQcm8gSUkgZnJvbSBSaWNoYXJkIEcgVHVybmVyIDxydHVybmVyIGF0IERhcmNvbS1IcS5BUlBBPgorIyBJJ3ZlIGZvdW5kIHRoYXQgbXkgS2F5UHJvIElJLCBydW5uaW5nIE1ETTczMCwgY29udGludWVzIHRvIGVtdWxhdGUgYW4KKyMgQURNLTNBIHRlcm1pbmFsLCBqdXN0IGxpa2UgSSB3YXMgcnVubmluZyBURVJNLkNPTS4gT24gb3VyIDQuMiBVTklYCisjIHN5c3RlbSB0aGUgZm9sbG93aW5nIHRlcm1jYXAgZW50cnkgd29ya3Mgd2VsbDoKKyMgSSBoYXZlIG5vdGljZWQgYSBjb3VwbGUgb2YgbWlub3IgZ2xpdGNoZXMsIGJ1dCBub3RoaW5nIEkgY2FuJ3Qgd29yaworIyBhcm91bmQuIChJIGFkZGVkIHR3byBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgQlJMIGVudHJ5IC0tIGVzcikKK2theXByb3xrYXlwcm8yfGtheXBybyBJSSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMzIkPDEvPiwgY3I9Xk0sIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGwxPVxFUiwgZWQ9XlcsCisJZWw9XlgsIGhvbWU9Xl4sIGlsMT1cRUUsIGluZD1eSiwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKworIyBGcm9tIElCTSwgVGh1IE1heSAgNSAxOTozNToyNyAxOTgzCisjIChpYm1wYzogY29tbWVudGVkIG91dCA8c21pcj49XDIwMFIgYmVjYXVzZSB3ZSBkb24ndCBrbm93IDxybWlyPiAtLSBlc3IpCitpYm0tcGN8aWJtNTA1MXw1MDUxfElCTSBQZXJzb25hbCBDb21wdXRlciAobm8gQU5TSS5TWVMpLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkxeSywgY3I9Xk1eXiwgY3ViMT1eXSwgY3VkMT1eSiwgY3VmMT1eXCwKKwljdXUxPV5eLCBob21lPV5LLCBpbmQ9XG4kPDEwPiwga2N1ZDE9Xl8sCisKK2libXBjfHd5NjAtUEN8d3lzZTYwLVBDfElCTSBQQy9YVCBydW5uaW5nIFBDL0lYLAorCU9UYnMsIGFtLCBidywgZW8sIGhzLCBrbSwgbXNnciwgdWwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1qXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1cVwzMDR0XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzLAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFYywgY3I9Xk0sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBpbmQ9XEVbU1xFW0IsCisJaW5kbj1cRVslcDElZFNcRVslcDElZEIsIGludmlzPVxFWzMwOzQwbSwga2JzPV5ILAorCWtjYnQ9Xl0sIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XDE3Nywga2VuZD1cRVtZLCBrZjE9XDI0MCwga2YxMD1cMjUxLCBrZjI9XDI0MSwKKwlrZjM9XDI0Miwga2Y0PVwyNDMsIGtmNT1cMjQ0LCBrZjY9XDI0NSwga2Y3PVwyNDYsIGtmOD1cMjQ3LAorCWtmOT1cMjUwLCBraG9tZT1cRVtILCBraWNoMT1cRVteSCwga25wPVxFW1UsIGtwcD1cRVtWLAorCWxsPVxFWzI0OzFILCBuZWw9Xk0sIHJldj1cRVs3bSwgcmk9XEVbVFxFW0EsCisJcmluPVxFWyVwMSVkVFxFWyVwMSVkQSwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyPVxFWyU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTttLAorCXNncjA9XEVbbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyMjIyBBcHBsZSBJSQorIworIyBBcHBsZSBJSSBmaXJtd2FyZSBjb25zb2xlIGZpcnN0LCB0aGVuIHZhcmlvdXMgODAtY29sdW1uIGNhcmRzIGFuZAorIyB0ZXJtaW5hbCBlbXVsYXRvcnMuICBGb3IgdHdvIGNlbnRzIEknZCB0b3NzIGFsbCB0aGVzZSBpbiB0aGUgVUZPIGZpbGUKKyMgYWxvbmcgd2l0aCB0aGUgNDAtY29sdW1uIGFwcGxlIGVudHJpZXMuCisjCisKKyMgRnJvbTogYnJzbWl0aEB1bW4tY3MuY3MudW1uLmVkdSAoQnJpYW4gUi4gU21pdGgpIHZpYSBCUkwKKyMJJ2l0IzgnIHRlbGxzIFVOSVggdGhhdCB5b3UgaGF2ZSB0YWJzIGV2ZXJ5IDggY29sdW1ucy4gIFRoaXMgaXMgYQorIwkJZnVuY3Rpb24gb2YgVElDLCBub3QgdGhlIGZpcm13YXJlLgorIwlUaGUgY2xlYXIga2V5IG9uIGEgSUlncyB3aWxsIGRvIHNvbWV0aGluZyBsaWtlIGNsZWFyLXNjcmVlbiwKKyMJCWRlcGVuZGluZyBvbiB3aGF0IHlvdSdyZSBpbi4KK2FwcGxlSUlnc3xhcHBsZUlJZXxhcHBsZUlJY3xBcHBsZSA4MCBjb2x1bW4gZmlybXdhcmUgaW50ZXJmYWNlLAorCU9UYnMsIGFtLCBidywgZW8sIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlwsCisJY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGVkPV5LLCBlbD1eXSwKKwlob21lPV5ZLCBodD1eSSwgaW5kPV5XLCBrYnM9XkgsIGtjbHI9XlgsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwlrY3VmMT1eVSwga2N1dTE9XkssIGtkY2gxPVwxNzcsIG5lbD1eTV5XLCByaT1eViwgcm1zbz1eTiwKKwlzbXNvPV5PLAorIyBBcHBsZSAvL2Ugd2l0aCA4MC1jb2x1bW4gY2FyZCwgZW50cnkgZnJvbSBCUkwKKyMgVGhlIG1vZGVtIGludGVyZmFjZSBpcyBwZXJtaXR0ZWQgdG8gZGlzY2FyZCBMRiAobWF5YmUgREMxKSwgb3RoZXJ3aXNlCisjIHBhc3NpbmcgY2hhcmFjdGVycyB0byB0aGUgODAtY29sdW1uIGZpcm13YXJlIHZpYSBDT1VUIChQUiMzIGFzc3VtZWQpLgorIyBBdXRvLXdyYXAgZG9lcyBub3Qgd29yayByaWdodCBkdWUgdG8gbmV3bGluZSBzY3JvbGxpbmcgZGVsYXksIHdoaWNoIGFsc28KKyMgcmVxdWlyZXMgdGhhdCB5b3Ugc2V0ICJzdHR5IGNyMiIuCisjIE5vdGU6IEN1cnNvciBhZGRyZXNzaW5nIGlzIG9ubHkgYXZhaWxhYmxlIHZpYSB0aGUgUGFzY2FsIFYxLjEgZW50cnksCisjIG5vdCB2aWEgdGhlIEJBU0lDIFBSIzMgaG9vay4gIEFsbCB0aGlzIG5vbnNlbnNlIGNhbiBiZSBhdm9pZGVkIG9ubHkgYnkKKyMgdXNpbmcgYSB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBmaXJtd2FyZS4KK2FwcGxlMmV8QXBwbGUgLy9lLAorCWJ3LCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8MTAwLz4sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9Xl8sCisJZWQ9XDAxMyQ8NCovPiwgZWw9XDAzNSQ8NC8+LCBob21lPV5ZLCBodD1eSSwgaW5kPV5XLAorCWlzMj1eUl5OLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XlUsIGtjdXUxPV5LLAorCW5lbD1cciQ8MTAwLz4sIHJldj1eTywgcmk9XlYsIHJtc289Xk4sIHJzMT1eUl5OLCBzZ3IwPV5OLAorCXNtc289Xk8sCisjIG1jdmF4IXZ1NDQhdnU0NSF3aWxja2UgdXNlcyB0aGUgImFwIiBlbnRyeSB0b2dldGhlciB3aXRoIEFzY2lpIEV4cHJlc3MgUHJvCisjIDQuMjAsIHdpdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIHRlcm1pbmFscyBib3RoIG9uIDAsIGVtdWxhdGlvbiBPbi4KK2FwcGxlMmUtcHxBcHBsZSAvL2UgdmlhIFBhc2NhbCwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywga2JzPV5ILCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwgdXNlPWFwcGxlMmUsCisjIChBU0NJSSBFeHByZXNzKSBNb3VzZVRhbGsgIlN0YW5kYXJkIEFwcGxlIC8vIiBlbXVsYXRpb24gZnJvbSBCUkwKKyMgRW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIHdpdGggInN0dHkgaXhvbiAtaXhhbnkiLgorYXBwbGUtYWV8QVNDSUkgRXhwcmVzcywKKwlPVGJzLCBhbSwgYncsIG1zZ3IsIG54b24sIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XDAwNyQ8NTAwLz4sIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eVSwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgZWQ9XkssIGVsPV5dLAorCWhvbWU9XlksIGluZD1eVywgaXMyPV5SXk4sIGtjbHI9XlgsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwlrY3VmMT1eVSwga2N1dTE9XkssIHJldj1eTywgcmk9XlYsIHJtc289Xk4sIHJzMT1eUl5OLCBzZ3IwPV5OLAorCXNtc289Xk8sCithcHBsZUlJfGFwcGxlIGlpIHBsdXMsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XkwsIGNub3JtPV5UQzIsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlwsCisJY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGN2dmlzPV5UQzYsCisJZWQ9XkssIGVsPV5dLCBmbGFzaD1cMDI0RzEkPDIwMC8+XDAyNFQxLCBob21lPVxFXlksIGh0PV5JLAorCWlzMj1cMDI0VDFcMDE2LCBrY3VkMT1eSiwga2N1ZjE9XlUsIHJtc289Xk4sIHNncjA9Xk4sCisJc21zbz1eTywKKyMgT3JpZ2luYWxseSBieSBHYXJ5IEZvcmQgMjFOT1Y4MworIyBGcm9tOiA8ZWUxNzhhY2klc2RjYzdAU0RDU1ZBWC5BUlBBPiAgRnJpIE9jdCAxMSAyMToyNzowMCAxOTg1CithcHBsZS04MHxhcHBsZSBJSSB3aXRoIHNtYXJ0ZXJtIDgwIGNvbCwKKwlPVGJzLCBhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2J0PV5SLCBjbGVhcj1cMDE0JDwxMCovPiwgY3I9XHIkPDEwKi8+LCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XlwsIGN1cD1cMDM2JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5fLAorCWVkPVwwMTMkPDEwKi8+LCBlbD1cMDM1JDwxMC8+LCBob21lPV5ZLAorYXBwbGUtc29yb2N8YXBwbGUgZW11bGF0aW5nIHNvcm9jIDEyMCwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFKiQ8MzAwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZWQ9XEVZLCBlbD1cRVQsCisJaG9tZT1eXiwgaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKyMgRnJvbSBQZXRlciBIYXJyaXNvbiwgQ29tcHV0ZXIgR3JhcGhpY3MgTGFiLCBTYW4gRnJhbmNpc2NvCisjICAgdWNidmF4IXVjc2ZtaXMhaGFycmlzb24gIC4uLi4udXVjcAorIyAgIHVjYnZheCF1Y3NmbWlzIWhhcnJpc29uQEJFUktFTEVZICAgLi4uLi4uLkFSUEEKKyMgIlRoZXNlIHR3byB3b3JrLiAgSWYgeW91IGRvbid0IGhhdmUgdGhlIGludmVyc2UgdmlkZW8gY2hpcCBmb3IgdGhlCisjIEFwcGxlIHdpdGggdmlkZXggdGhlbiByZW1vdmUgdGhlIDpzbzogYW5kIDpzZTogZmllbGRzLiIKKyMgKGFwcGxlLXZpZGV4OiB0aGlzIHVzZWQgdG8gYmUgY2FsbGVkIERhbGVBcHBsZSAtLSBlc3IpCithcHBsZS12aWRleHxBcHBsZSB3aXRoIHZpZGV4IHZpZGVvdGVybSA4MCBjb2x1bW4gYm9hcmQgd2l0aCBpbnZlcnNlIHZpZGVvLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVwwMTQkPDMwMC8+LCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5cLAorCWN1cD1cMDM2JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5fLCBlZD1eSywgZWw9Xl0sCisJaG9tZT1eWSwgaHQ9XkksIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XlUsIGtob21lPV5ZLAorCXJtc289XloyLCBzZ3IwPV5aMiwgc21zbz1eWjMsCisjIE15IHN5c3RlbSBbZm9yIHJlZmVyZW5jZV0gOiBBcHBsZSBdWyssIDY0SywgVWx0cmF0ZXJtIGRpc3BsYXkgY2FyZCwKKyMJCQkgICAgICBBcHBsZSBDYXQgXVsgMjEyIG1vZGVtLCArIG1vcmUgYWxsCisjCQkJICAgICAgY29udHJvbGxlZCBieSBBU0NJSSBFeHByZXNzOiBQcm8uCisjIEZyb20gRGF2ZSBTaGF2ZXIgPGlzdWNzMSFzaGF2ZXI+CithcHBsZS11dGVybS12YnxWaWRleCBVbHRyYXRlcm0gZm9yIEFwcGxlIG1pY3JvcyB3aXRoIFZpc2libGUgQmVsbCwKKwlPVGJzLCBhbSwgZW8sIHh0LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9LCBjbGVhcj1eTCwgY3VmMT1eXCwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgZWQ9XkssIGVsPV5dLAorCWZsYXNoPV5XMzVeVzA2LCBob21lPV5ZLAorCWlzMj1eVjReVzA2XDAxN1xyVmlzaWJsZSBCZWxsIEluc3RhbGxlZC5cMDE2XHJcbiwKKwlybXNvPV5OLCBzbXNvPV5PLAorYXBwbGUtdXRlcm18VWx0cmF0ZXJtIGZvciBBcHBsZSBtaWNyb3MsCisJT1RicywgYW0sIGVvLCB4dCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlhY3NjPSwgY2xlYXI9XkwsIGN1ZjE9XlwsCisJY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGVkPV5LLCBlbD1eXSwKKwlob21lPV5ZLCBpczI9XlY0XlcwNlwwMTYsIHJtc289Xk4sIHNtc289Xk8sCisjIGZyb20gdHJ3cmJhIWJ3b25nIChCcmFkbGV5IFcuIFdvbmcpOgorIworIyBUaGlzIGVudHJ5IGFzc3VtZXMgdGhhdCB5b3UgYXJlIHVzaW5nIGFuIGFwcGxlIHdpdGggdGhlIFVDU0QgUGFzY2FsCisjIGxhbmd1YWdlIGNhcmQuICBTWVNURU0uTUlTQ0lORk8gaXMgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGF0CisjIHN1cHBsaWVkIHdpdGggdGhlIHN0YW5kYXJkIGFwcGxlIGV4Y2VwdCB0aGF0IHNjcmVlbndpZHRoIHNob3VsZCBiZSBzZXQKKyMgdXNpbmcgU0VUVVAgdG8gODAgY29sdW1ucy4gIE5vdGUgdGhhdCB0aGUgcmlnaHQgYXJyb3cgaW4gbm90IG1hcHBlZCBpbgorIyB0aGlzIHRlcm1jYXAgZW50cnkuICBUaGlzIGlzIGJlY2F1c2UgdGhhdCBrZXksIG9uIHRoZSBBcHBsZSwgdHJhbnNtaXRzCisjIGEgXlUgYW5kIHdvdWxkIHRodXMgcHJlZW1wdCB0aGUgbW9yZSB1c2VmdWwgInVwIiBmdW5jdGlvbiBvZiB2aS4KKyMKKyMgSE1IIDIvMjMvODEKK2FwcGxlODBwfDgwLWNvbHVtbiBhcHBsZSB3aXRoIFBhc2NhbCBjYXJkLAorCWFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1eWV5MLCBjdWYxPV5cXDosCisJY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGVkPV5LLCBlbD1eXSwKKwlob21lPV5ZLCBrY3ViMT1eSCwKKyMKKyMgQXBwbGUgSUkrIGVxdWlwcGVkIHdpdGggVmlkZXggODAgY29sdW1uIGNhcmQKKyMKKyMgVGVybWluZm8gZnJvbSBpaG5wNCFpaHUxZyFkamMxIChEYXZlIENocmlzdGVuc2VuKSB2aWEgQlJMOworIyBtYW51YWxseSBjb252ZXJ0ZWQgYnkgRCBBIEd3eW4KKyMKKyMgRE8gTk9UIHVzZSBhbnkgdGVybWluYWwgZW11bGF0aW9uIHdpdGggdGhpcyBkYXRhIGJhc2UsIGl0IHdvcmtzIGRpcmVjdGx5CisjIHdpdGggdGhlIFZpZGV4IGNhcmQuICBUaGlzIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHZpIDEyMDAgYmF1ZCBhbmQgd29ya3MgZmluZS4KKyMKKyMgVGhpcyB3b3JrcyBncmVhdCBmb3IgdmksIGV4Y2VwdCBJJ3ZlIG5vdGljZWQgaW4gcHJlLVIyLCBeVSB3aWxsIHNjcm9sbCBiYWNrCisjIDEgc2NyZWVuLCB3aGlsZSBpbiBSMiBeVSBkb2Vzbid0LgorIyBGb3IgaW52ZXJzZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBhZGQ6CisjCTxzbWFjcz49Xk86PHJtYWNzPj1eTjoKKyMgKGFwcGxlLXY6IGFkZGVkIGl0IzggLS0gZXNyKQorYXBwbGUtdmlkZXgyfEFwcGxlIElJKyB3LyBWaWRleCBjYXJkIChzaW1pbGFyIHRvIERhdGFtZWRpYSBoMTUyMCksCisJYW0sIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPVwwMDckPDEwMC8+LCBjbGVhcj1cMDE0JDwxNiovPiwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1eXCwgY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsCisJY3V1MT1eXywgZWQ9XDAxMyQ8MTYqLz4sIGVsPV5dLCBob21lPV5ZLCBodD1cMDExJDw4Lz4sCisJaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XlwsIGtjdXUxPV5fLAorCWtob21lPV5ZLCBybXNvPV5aMiwgc21zbz1eWjMsCithcHBsZS12aWRleDN8dmFwcGxlfEFwcGxlIElJIHdpdGggODAgY29sIGNhcmQsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEV2LCBjdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPVxFQSwgZWw9XEV4LCBob21lPVxFSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtmMD1cRVAsIGtmMT1cRVEsIGtmMj1cRVIsIGtmMz1cRVxzLCBrZjQ9XEUhLAorCWtmNT1cRSIsIGtmNj1cRSMsIGtmNz1cRSQsIGtmOD1cRSUlLCBrZjk9XEUmLCBraG9tZT1cRUgsCisjRnJvbTogZGVjdmF4IWNib3NnZCFjYmRrYzEhbXd3IE1pa2UgV2FycmVuIHZpYSBCUkwKK2FlcHJvfEFwcGxlIElJKyBydW5uaW5nIEFTQ0lJIEV4cHJlc3MgUHJvLS12dDUyLAorCU9UYnMsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XDAxNCQ8MzAwLz4sIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlZD1cRUosCisJZWw9XEVLLCBob21lPVxFSCwKKyMgVUNTRCBhZGRpdGlvbjogWWV0IGFub3RoZXIgdGVybWNhcCBmcm9tIEJyaWFuIEthbnRvcidzIE1pY3JvIE11bmdlciBGYWN0b3J5CithcHBsZS12bTgwfGFwLXZtODB8YXBwbGUgd2l0aCB2aWV3bWF4LTgwLAorCU9UYnMsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XDAxNCQ8MzAwLz4sIGN1ZjE9XlxcOiwKKwljdXA9XDAzNiVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MTAwLz4sIGN1dTE9Xl8sCisJZWQ9XDAxMyQ8MzAwLz4sIGVsPV5dLCBob21lPVwwMzEkPDIwMC8+LAorCisjIyMjIEFwcGxlIExpc2EgJiBNYWNpbnRvc2gKKyMKKworIyAobGlzYTogY2hhbmdlZCA8Y3Z2aXM+IHRvIDxjbm9ybT4gLS0gZXNyKQorbGlzYXxhcHBsZSBsaXNhIGNvbnNvbGUgZGlzcGxheSAoYmxhY2sgb24gd2hpdGUpLAorCU9UYnMsIGFtLCBlbywgbXNnciwKKwljb2xzIzg4LCBpdCM4LCBsaW5lcyMzMiwKKwlhY3NjPWpka2NsZm1lbmJxYXR0dXZ2dXdzeGAsIGNpdmlzPVxFWzVoLCBjbGVhcj1eTCwKKwljbm9ybT1cRVs1bCwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtALCBpbDE9XEVbTCwKKwlpczI9XEU+XEVbbVwwMTQsIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBybWFjcz1cRVsxMG0sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNncjA9XEVbbSwgc21hY3M9XEVbMTFtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorbGlzd2J8YXBwbGUgbGlzYSBjb25zb2xlIGRpc3BsYXkgKHdoaXRlIG9uIGJsYWNrKSwKKwlpczI9XEU+XEVbMDs3bVwwMTQsIHJtc289XEVbMDs3bSwgcm11bD1cRVswOzdtLAorCXNtc289XEVbbSwgc211bD1cRVs0bSwgdXNlPWxpc2EsCisKKyMgbGlzYXRlcm0gZnJvbSB1bHlzc2VzIWdhbW1hIWVwc2lsb24hbWIyYyFqZWQgKEpvaG4gRS4gRHVuY2FuIElJSSkgdmlhIEJSTDsKKyMgPGlzMj4gcmV2aXNlZCBieSBGZXJkIEJydW5kaWNrIDxmc2JybkBCUkwuQVJQQT4KKyMKKyMgVGhlc2UgZW50cmllcyBhc3N1bWUgdGhhdCB0aGUgJ0F1dG8gV3JhcGFyb3VuZCcgaXMgZW5hYmxlZC4KKyMgWG9uLVhvZmYgZmxvdyBjb250cm9sIHNob3VsZCBhbHNvIGJlIGVuYWJsZWQuCisjCisjIFRoZSB2dDEwMCB1c2VzIDpyczI6IGFuZCA6cmY6IHJhdGhlciB0aGFuIDppczI6Lzp0YmM6LzpodHM6IGJlY2F1c2UgdGhlIHRhYgorIyBzZXR0aW5ncyBhcmUgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeSBhbmQgZG9uJ3QgbmVlZCB0byBiZSByZXNldCB1cG9uIGxvZ2luLgorIyBBbHNvIHNldHRpbmcgdGhlIG51bWJlciBvZiBjb2x1bW5zIGdsaXRjaGVzIHRoZSBzY3JlZW4gYW5ub3lpbmdseS4KKyMgWW91IGNhbiB0eXBlICJyZXNldCIgdG8gZ2V0IHRoZW0gc2V0LgorIworbGlzYXRlcm18QXBwbGUgTGlzYSBvciBMaXNhLzIgcnVubmluZyBMaXNhVGVybSB2dDEwMCBlbXVsYXRpb24sCisJT1RicywgT1RwdCwgYW0sIHhlbmwsIHhvbiwKKwlPVGtuIzQsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjA9XEVPUCwga2YxPVxFT1EsCisJa2YyPVxFT1IsIGtmMz1cRU9TLCBsZjA9RjEsIGxmMT1GMiwgbGYyPUYzLCBsZjM9RjQsIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cRT5cRVs/MWxcRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0ciwKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLAorIyBMaXNhdGVybSBpbiAxMzIgY29sdW1uICgid2lkZSIpIG1vZGUuCitsaXNhdGVybS13fEFwcGxlIExpc2Egd2l0aCBMaXNhdGVybSBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIHVzZT1saXNhdGVybSwKKyMgQWx0aG91Z2ggTWFjVGVybWluYWwgaGFzIGluc2VydC9kZWxldGUgbGluZSwgaXQgaXMgY29tbWVudGVkIG91dCBoZXJlCisjIHNpbmNlIGl0IGlzIG11Y2ggZmFzdGVyIGFuZCBjbGVhbmVyIHRvIHVzZSB0aGUgImxvY2sgc2Nyb2xsaW5nIHJlZ2lvbiIKKyMgbWV0aG9kIG9mIGluc2VydGluZyBhbmQgZGVsZXRpbmcgbGluZXMgZHVlIHRvIHRoZSBNYWNUZXJtaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyMgQWxzbywgdGhlICJJbnNlcnQvZGVsZXRlIGNoIiBzdHJpbmdzIGhhdmUgYW4gZXh0cmEgY2hhcmFjdGVyIGFwcGVuZGVkIHRvIHRoZW0KKyMgZHVlIHRvIGEgYnVnIGluIE1hY1Rlcm1pbmFsIFYxLjEuICBCbGluayBpcyBkaXNhYmxlZCBzaW5jZSBpdCBpcyBub3QKKyMgc3VwcG9ydGVkIGJ5IE1hY1Rlcm1pbmFsLgorbWFjfG1hY2ludG9zaHxNYWNpbnRvc2ggd2l0aCBNYWNUZXJtaW5hbCwKKwl4ZW5sLAorCU9UZE4jMzAsCisJYmxpbmtALCBkY2gxPVxFW1AkPDcvPiwgaWNoMT1cRVtAJDw5Lz4sIGlwPSQ8Ny8+LCB1c2U9bGlzYSwKKyMgTGlzYXRlcm0gaW4gMTMyIGNvbHVtbiAoIndpZGUiKSBtb2RlLgorbWFjLXd8bWFjdGVybWluYWwtd3xBcHBsZSBNYWNpbnRvc2ggd2l0aCBNYWN0ZXJtaW5hbCBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHVzZT1tYWMsCisKKyMgVGhlIEFwcEtpdCBUZXJtaW5hbC5hcHAgZGVzY3JpcHRpb25zIGFsbCBoYXZlIG5hbWVzIGJlZ2lubmluZyB3aXRoCisjICJuc3Rlcm0iLiBOb3RlIHRoYXQgdGhlIHN0YXR1c2xpbmUgKC1zKSB2ZXJzaW9ucyB1c2UgdGhlIHdpbmRvdworIyB0aXRsZWJhciBhcyBhIHBob255IHN0YXR1cyBsaW5lLCBhbmQgbWF5IHByb2R1Y2Ugd2FybmluZ3MgZHVyaW5nCisjIGNvbXBpbGF0aW9uIGFzIGEgcmVzdWx0ICgidHNsIHVzZXMgMCBwYXJhbWV0ZXJzLCBleHBlY3RlZCAxIi4pIElnbm9yZQorIyB0aGVzZSB3YXJuaW5ncywgb3IgZXZlbiBpZ25vcmUgdGhlc2UgZW50cmllcyBlbnRpcmVseS4gQXBwcyB3aGljaAorIyBuZWVkIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3Igb3IgZG8gb3RoZXIgZmFuY3kgc3R1ZmYgaW5zaWRlIHRoZSBzdGF0dXMKKyMgbGluZSB3b24ndCB3b3JrIHdpdGggdGhlc2UgZW50cmllcy4gVGhleSdyZSBwcmltYXJpbHkgdXNlZnVsIGZvcgorIyBwcm9ncmFtcyBsaWtlIFBpbmUgd2hpY2ggcHJvdmlkZSBzaW1wbGUgbm90aWZpY2F0aW9ucyBpbiB0aGUgc3RhdHVzCisjIGxpbmUuIFBsZWFzZSBub3RlIHRoYXQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgZG9uJ3Qgd29yayByaWdodCBpbiB0aGUKKyMgc3RhdHVzIGxpbmUsIHNpbmNlIFRlcm1pbmFsLmFwcCBpbmNvcnJlY3RseSBpbnRlcnByZXRzIHRoZWlyIFVuaWNvZGUKKyMgY29kZXBvaW50cyBhcyBNYWNSb21hbiBjb2RlcG9pbnRzLgorIworIyAqIFJlbmFtZWQgdGhlIEFwcEtpdCBUZXJtaW5hbC5hcHAgZW50cnkgZnJvbSAiQXBwbGVfVGVybWluYWwiIHRvCisjICAgIm5zdGVybSIgdG8gY29tcGx5IHdpdGggdGhlIG5hbWUgbGVuZ3RoIGFuZCBjYXNlIGNvbnZlbnRpb25zIGFuZAorIyAgIGxpbWl0YXRpb25zIG9mIHZhcmlvdXMgc29mdHdhcmUgcGFja2FnZXMgW25vdGFibHkgU29sYXJpcyB0ZXJtaW5mbworIyAgIGFuZCBVTklYLl0gQSBzaW5nbGUgQXBwbGVfVGVybWluYWwgYWxpYXMgaXMgcmV0YWluZWQgZm9yCisjICAgYmFja3dhcmRzLWNvbXBhdGJpbGl0eS4KKyMKKyMgKiBBZGRlZCBmdW5jdGlvbiBrZXkgc3VwcG9ydCAoRjEtRjQpLiBUaGVzZSBvbmx5IHdvcmsgaW4gVGVybWluYWwuYXBwCisjICAgdmVyc2lvbiA1MSwgaG9wZWZ1bGx5IHRoZSBjYXBhYmlsaXRpZXMgd29uJ3QgY2F1c2UgcHJvYmxlbXMgZm9yIHBlb3BsZQorIyAgIHVzaW5nIHZlcnNpb24gNDEuCisjCisjICogQWRkZWQgImZ1bGwgY29sb3IiICgtYykgZW50cmllcyB3aGljaCBzdXBwb3J0IHRoZSAxNi1jb2xvciBtb2RlIGluCisjICAgdmVyc2lvbiA1MS4KKyMKKyMgKiBCeSBkZWZhdWx0LCB2ZXJzaW9uIDUxIHVzZXMgVVRGLTggZW5jb2Rpbmcgd2l0aCBicm9rZW4gYWx0Y2hhcnNldAorIyAgIHN1cHBvcnQsIHNvICJBU0NJSSIgKC03KSBlbnRyaWVzIHdpdGhvdXQgYWx0Y2hhcnNldCBzdXBwb3J0IHdlcmUKKyMgICBhZGRlZC4KKworIyBuc3Rlcm0gLSBBcHBLaXQgVGVybWluYWwuYXBwCisjCisjIEFwcGxlJ3MgTWFjIE9TIFggaW5jbHVkZXMgYSBUZXJtaW5hbC5hcHAgZGVyaXZlZCBmcm9tIHRoZSBvbGQgTmVYVAorIyBUZXJtaW5hbC5hcHAuIEl0IGlzIGEgcGFydGlhbCBWVDEwMCBlbXVsYXRpb24gd2l0aCBzb21lIHh0ZXJtLWxpa2UKKyMgZXh0ZW5zaW9ucy4gVGhpcyB0ZXJtaW5mbyB3YXMgd3JpdHRlbiB0byBkZXNjcmliZSB2ZXJzaW9ucyA0MQorIyAoc2hpcHBlZCB3aXRoIE1hYyBPUyBYIHZlcnNpb24gMTAuMCkgYW5kIDUxIChzaGlwcGVkIHdpdGggTWFjIE9TIFgKKyMgdmVyc2lvbiAxMC4xKSBvZiBUZXJtaW5hbC5hcHAuCisjCisjIFRlcm1pbmFsLmFwcCBydW5zIHVuZGVyIHRoZSBNYWMgT1MgWCBRdWFydHogd2luZG93aW5nIHN5c3RlbSAoYW5kCisjIG90aGVyIEFwcEtpdC1zdXBwb3J0ZWQgd2luZG93aW5nIHN5c3RlbXMuKSAgT24gdGhlIE1hYyBPUyBYIG1hY2hpbmUgSQorIyB1c2UsIHRoZSBleGVjdXRhYmxlIGZvciBUZXJtaW5hbC5hcHAgaXM6CisjIC9BcHBsaWNhdGlvbnMvVXRpbGl0aWVzL1Rlcm1pbmFsLmFwcC9Db250ZW50cy9NYWNPUy9UZXJtaW5hbAorIworIyBJZiB5b3UncmUgbG9va2luZyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVsbC1zY3JlZW4gc3lzdGVtCisjIGNvbnNvbGUgd2hpY2ggcnVucyB1bmRlciBBcHBsZSdzIERhcndpbiBvcGVyYXRpbmcgc3lzdGVtIG9uIFBvd2VyUEMKKyMgcGxhdGZvcm1zLCBzZWUgdGhlICJ4bnVwcGMiIGVudHJ5IGluc3RlYWQuCisjCisjIFRoZXJlIHdlcmUgbm8gZnVuY3Rpb24ga2V5cyBpbiB2ZXJzaW9uIDQxLiBJbiB2ZXJzaW9uIDUxLCB0aGVyZSBhcmUKKyMgZm91ciB3b3JraW5nIGZ1bmN0aW9uIGtleXMgKEYxLCBGMiwgRjMgYW5kIEY0LikgVGhlIGZ1bmN0aW9uIGtleXMKKyMgYXJlIGluY2x1ZGVkIGluIGFsbCBvZiB0aGVzZSBlbnRyaWVzLgorIworIyBJdCBkb2VzIG5vdCBzdXBwb3J0IG1vdXNlIHBvaW50ZXIgcG9zaXRpb24gcmVwb3J0aW5nLiBVbmRlciBzb21lCisjIGNpcmN1bXN0YW5jZXMgdGhlIGN1cnNvciBjYW4gYmUgcG9zaXRpb25lZCB1c2luZyBvcHRpb24tY2xpY2s7IHRoaXMKKyMgd29ya3MgYnkgY29tcGFyaW5nIHRoZSBjdXJzb3IgcG9zaXRpb24gYW5kIHRoZSBzZWxlY3RlZCBwb3NpdGlvbiwKKyMgYW5kIHNpbXVsYXRpbmcgZW5vdWdoIGN1cnNvci1rZXkgcHJlc3NlcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlCisjIHNlbGVjdGVkIHBvc2l0aW9uLiBUaGlzIHRlY2huaXF1ZSBmYWlscyBpbiBhbGwgYnV0IHRoZSBzaW1wbGVzdAorIyBhcHBsaWNhdGlvbnMuCisjCisjIEl0IHByb3ZpZGVzIHBhcnRpYWwgQU5TSSBjb2xvciBzdXBwb3J0IChiYWNrZ3JvdW5kIGNvbG9ycyBpbnRlcmFjdGVkCisjIGJhZGx5IHdpdGggYm9sZCBpbiB2ZXJzaW9uIDQxLCB0aG91Z2gsIGFzIHJlZmxlY3RlZCBpbiA6bmN2Oi4pIFRoZQorIyBtb25vY2hyb21lICgtbSkgZW50cmllcyBhcmUgdXNlZnVsIGlmIHlvdSd2ZSBkaXNhYmxlZCBjb2xvciBzdXBwb3J0CisjIG9yIHVzZSBhIG1vbm9jaHJvbWUgbW9uaXRvci4gVGhlIGZ1bGwgY29sb3IgKC1jKSBlbnRyaWVzIGFyZSB1c2VmdWwKKyMgaW4gdmVyc2lvbiA1MSwgd2hpY2ggZG9lc24ndCBleGhpYml0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGJ1Zy4gVGhleQorIyBhbHNvIGVuYWJsZSBhbiB4dGVybS1jb21wYXRpYmxlIDE2LWNvbG9yIG1vZGUuCisjCisjIFRoZSBjb25maWd1cmFibGUgdGl0bGViYXIgaXMgc2V0IHVzaW5nIHh0ZXJtLWNvbXBhdGlibGUgc2VxdWVuY2VzOworIyBpdCBpcyB1c2VkIGFzIGEgc3RhdHVzIGJhciBpbiB0aGUgc3RhdHVzbGluZSAoLXMpIGVudHJpZXMuIEl0cyB3aWR0aAorIyBkZXBlbmRzIG9uIGZvbnQgc2l6ZXMgYW5kIHdpbmRvdyBzaXplcywgYnV0IDUwIGNoYXJhY3RlcnMgc2VlbXMgdG8KKyMgYmUgdGhlIGRlZmF1bHQgZm9yIGFuIDgweDI0IHdpbmRvdy4KKyMKKyMgVGhlIE1hY1JvbWFuIGNoYXJhY3RlciBlbmNvZGluZyBpcyB1c2VkIGZvciBzb21lIG9mIHRoZSBhbHRlcm5hdGUKKyMgY2hhcmFjdGVycyBpbiB0aGUgIk1hY1JvbWFuIiBlbnRyaWVzOyB0aGUgIkFTQ0lJIiAoLTcpIGVudHJpZXMKKyMgZGlzYWJsZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBzdXBwb3J0IGVudGlyZWx5LCBhbmQgdGhlICJWVDEwMCIKKyMgKC1hY3MpIGVudHJpZXMgcmVseSBpbnN0ZWFkIG9uIFRlcm1pbmFsLmFwcCdzIG93biBidWdneSBWVDEwMAorIyBncmFwaGljcyBlbXVsYXRpb24sIHdoaWNoIHNlZW1zIHRvIHRoaW5rIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMKKyMgdGhlIG9sZCBOZVhUIGNoYXJzZXQgaW5zdGVhZCBvZiBNYWNSb21hbi4gVGhlICJBU0NJSSIgKC03KSBlbnRyaWVzCisjIGFyZSB1c2VmdWwgaW4gVGVybWluYWwuYXBwIHZlcnNpb24gNTEsIHdoaWNoIHN1cHBvcnRzIFVURi04IGFuZAorIyBvdGhlciBBU0NJSS1jb21wYXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3MgYnV0IGRvZXMgbm90IGNvcnJlY3RseQorIyBpbXBsZW1lbnQgVlQxMDAgZ3JhcGhpY3M7IG9uY2UgVlQxMDAgZ3JhcGhpY3MgYXJlIGNvcnJlY3RseQorIyBpbXBsZW1lbnRlZCBpbiBUZXJtaW5hbC5hcHAsIHRoZSAiVlQxMDAiICgtYWNzKSBlbnRyaWVzIHNob3VsZCBiZQorIyB1c2FibGUgaW4gYW55IEFTQ0lJLWNvbXBhdGlibGUgY2hhcmFjdGVyIGVuY29kaW5nIFtleGNlcHQgcGVyaGFwcworIyBpbiBVVEYtOCwgd2hlcmUgc29tZSBleHBlcnRzIGFyZ3VlIGZvciBkaXNhbGxvd2luZyBhbHRlcm5hdGUKKyMgY2hhcmFjdGVycyBlbnRpcmVseS5dCisjCisjIFRlcm1pbmFsLmFwcCByZXBvcnRzICJ2dDEwMCIgYXMgdGhlIHRlcm1pbmFsIHR5cGUsIGJ1dCBleHBvcnRzCisjIHNldmVyYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWNoIG1heSBhaWQgZGV0ZWN0aW9uIGluIGEgc2hlbGwKKyMgcHJvZmlsZSAoaS5lLiAucHJvZmlsZSBvciAubG9naW4pOgorIworIyBURVJNPXZ0MTAwCisjIFRFUk1fUFJPR1JBTT1BcHBsZV9UZXJtaW5hbAorIyBURVJNX1BST0dSQU1fVkVSU0lPTj00MSAgICAgICMgaW4gVGVybWluYWwuYXBwIHZlcnNpb24gNDEKKyMgVEVSTV9QUk9HUkFNX1ZFUlNJT049NTEgICAgICAjIGluIFRlcm1pbmFsLmFwcCB2ZXJzaW9uIDUxCisjCisjIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIEJvdXJuZSBzaGVsbCBzY3JpcHQgd291bGQgZGV0ZWN0IHRoZQorIyBjb3JyZWN0IHRlcm1pbmFsIHR5cGU6CisjCisjIGlmIFsgOiIkVEVSTSIgPSA6InZ0MTAwIiAtYSA6IiRURVJNX1BST0dSQU0iID0gOiJBcHBsZV9UZXJtaW5hbCIgXQorIyB0aGVuCisjICAgICBleHBvcnQgVEVSTQorIyAgICAgaWYgWyA6IiRURVJNX1BST0dSQU1fVkVSU0lPTiIgPSA6NDEgXQorIyAgICAgdGhlbgorIyAgICAgICAgIFRFUk09Im5zdGVybSIKKyMgICAgIGVsc2UKKyMgICAgICAgICBURVJNPSJuc3Rlcm0tYy03IgorIyAgICAgZmkKKyMgZmkKKyMKKyMgSW4gYSBDIHNoZWxsIGRlcml2YXRpdmUsIHRoaXMgd291bGQgYmUgYWNjb21wbGlzaGVkIGJ5OgorIworIyBpZiAoICQ/VEVSTSAmJiAkP1RFUk1fUFJPR1JBTSAmJiAkP1RFUk1fUFJPR1JBTV9WRVJTSU9OKSB0aGVuCisjICAgICBpZiAoIDoiJFRFUk0iID09IDoidnQxMDAiICYmIDoiJFRFUk1fUFJPR1JBTSIgPT0gOiJBcHBsZV9UZXJtaW5hbCIgKSB0aGVuCisjICAgICAgICAgIGlmICggOiIkVEVSTV9QUk9HUkFNX1ZFUlNJT04iID09IDo0MSApIHRoZW4KKyMgICAgICAgICAgICAgIHNldGVudiBURVJNICJuc3Rlcm0iCisjICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIHNldGVudiBURVJNICJuc3Rlcm0tYy03IgorIyAgICAgICAgICBlbmRpZgorIyAgICAgZW5kaWYKKyMgZW5kaWYKKworIyBUaGUgJysnIGVudHJpZXMgYXJlIGJ1aWxkaW5nIGJsb2NrcworbnN0ZXJtKzd8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIGJhc2ljIGNhcGFiaWxpdGllcyB3L0FTQ0lJIGNoYXJzZXQsCisJYW0sIGJ3LCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlrYnM9XDE3Nywga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZW50PVxFT00sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYW09XEVbPzdsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSwKKwlzZ3IwPVxFW21cMDE3LCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLCB1c2U9dnQxMDArZW5xLCB1c2U9dnQxMDArcGZrZXlzLAorCituc3Rlcm0rYWNzfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyBiYXNpYyBjYXBhYmlsaXRpZXMgdy9WVDEwMCBhbHRlcm5hdGUtY2hhcnNldCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWVuYWNzPVxFKEJcRSkwLCBybWFjcz1eTywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzbWFjcz1eTiwgdXNlPW5zdGVybSs3LAorCituc3Rlcm0rbWFjfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyBiYXNpYyBjYXBhYmlsaXRpZXMgdy9NYWNSb21hbiBhbHRlcm5hdGUtY2hhcnNldCwKKwlhY3NjPTAjYFwzMjdhXDpmXDI0MWdcMjYxaCNpXDM2MGpqa2tsbG1tbm5vXDM3MHBcMzcwcVwzMjFycnNzdHR1dXZ2d3d4eHlcMjYyelwyNjN7XDI3MXxcMjU1fVwyNDN+XDI0NStcMzM1LVwzNjZcLFwzMzQuXDM3NywKKwllbmFjcz1cRShCXEUpMCwgcm1hY3M9Xk8sCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc21hY3M9Xk4sIHVzZT1uc3Rlcm0rNywKKworbnN0ZXJtK3N8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHN0YXR1cy1saW5lICh3aW5kb3cgdGl0bGViYXIpIHN1cHBvcnQsCisJaHMsCisJd3NsIzUwLAorCWRzbD1cRV0yO1wwMDcsIGZzbD1eRywgdHNsPVxFXTI7LAorCituc3Rlcm0rY3xBcHBLaXQgVGVybWluYWwuYXBwIHY1MSsgZnVsbCBjb2xvciBzdXBwb3J0IChpbmNsdWRpbmcgMTYgY29sb3JzKSwKKwlvcD1cRVswbSwgdXNlPWlibSsxNmNvbG9yLAorCituc3Rlcm0rYzQxfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxIGNvbG9yIHN1cHBvcnQsCisJY29sb3JzIzgsIG5jdiMzNywgcGFpcnMjNjQsCisJb3A9XEVbMG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisKKyMgVGhlc2UgYXJlIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrcworCisjIEFTQ0lJIGNoYXJzZXQgKC03KQorbnN0ZXJtLW0tN3xuc3Rlcm0tNy1tfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L0FTQ0lJIGNoYXJzZXQgKG1vbm9jaHJvbWUpLAorCXVzZT1uc3Rlcm0rNywKKworbnN0ZXJtLW0tcy03fG5zdGVybS03LW0tc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9BU0NJSSBjaGFyc2V0IChtb25vY2hyb21lIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtKzcsCisKK25zdGVybS03fEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L0FTQ0lJIGNoYXJzZXQgKGNvbG9yKSwKKwl1c2U9bnN0ZXJtK2M0MSwgdXNlPW5zdGVybSs3LAorCituc3Rlcm0tNy1jfG5zdGVybS1jLTd8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NTErIHcvQVNDSUkgY2hhcnNldCAoZnVsbCBjb2xvciksCisJdXNlPW5zdGVybStjLCB1c2U9bnN0ZXJtKzcsCisKK25zdGVybS1zLTd8bnN0ZXJtLTctc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9BU0NJSSBjaGFyc2V0IChjb2xvciB3L3N0YXR1c2xpbmUpLAorCXVzZT1uc3Rlcm0rcywgdXNlPW5zdGVybStjNDEsIHVzZT1uc3Rlcm0rNywKKworbnN0ZXJtLWMtcy03fG5zdGVybS03LWMtc3xBcHBLaXQgVGVybWluYWwuYXBwIHY1MSsgdy9BU0NJSSBjaGFyc2V0IChmdWxsIGNvbG9yIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtK2MsIHVzZT1uc3Rlcm0rNywKKworIyBWVDEwMCBhbHRlcm5hdGUtY2hhcnNldCAoLWFjcykKK25zdGVybS1tLWFjc3xuc3Rlcm0tYWNzLW18QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvVlQxMDAgYWx0ZXJuYXRlLWNoYXJzZXQgKG1vbm9jaHJvbWUpLAorCXVzZT1uc3Rlcm0rYWNzLAorCituc3Rlcm0tbS1zLWFjc3xuc3Rlcm0tYWNzLW0tc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9WVDEwMCBhbHRlcm5hdGUtY2hhcnNldCAobW9ub2Nocm9tZSB3L3N0YXR1c2xpbmUpLAorCXVzZT1uc3Rlcm0rcywgdXNlPW5zdGVybSthY3MsCisKK25zdGVybS1hY3N8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvVlQxMDAgYWx0ZXJuYXRlLWNoYXJzZXQgKGNvbG9yKSwKKwl1c2U9bnN0ZXJtK2M0MSwgdXNlPW5zdGVybSthY3MsCisKK25zdGVybS1jLWFjc3xuc3Rlcm0tYWNzLWN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NTErIHcvVlQxMDAgYWx0ZXJuYXRlLWNoYXJzZXQgKGZ1bGwgY29sb3IpLAorCXVzZT1uc3Rlcm0rYywgdXNlPW5zdGVybSthY3MsCisKK25zdGVybS1zLWFjc3xuc3Rlcm0tYWNzLXN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvVlQxMDAgYWx0ZXJuYXRlLWNoYXJzZXQgKGNvbG9yIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtK2M0MSwgdXNlPW5zdGVybSthY3MsCisKK25zdGVybS1jLXMtYWNzfG5zdGVybS1hY3MtYy1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjUxKyB3L1ZUMTAwIGFsdGVybmF0ZS1jaGFyc2V0IChmdWxsIGNvbG9yIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtK2MsIHVzZT1uc3Rlcm0rYWNzLAorCisjIE1hY1JvbWFuIGNoYXJzZXQKK25zdGVybS1tfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L01hY1JvbWFuIGNoYXJzZXQgKG1vbm9jaHJvbWUpLAorCXVzZT1uc3Rlcm0rbWFjLAorCituc3Rlcm0tbS1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L01hY1JvbWFuIGNoYXJzZXQgKG1vbm9jaHJvbWUgdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rbWFjLAorCituc3Rlcm18QXBwbGVfVGVybWluYWx8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvTWFjUm9tYW4gY2hhcnNldCAoY29sb3IpLAorCXVzZT1uc3Rlcm0rYzQxLCB1c2U9bnN0ZXJtK21hYywKKworbnN0ZXJtLWN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NTErIHcvTWFjUm9tYW4gY2hhcnNldCAoZnVsbCBjb2xvciksCisJdXNlPW5zdGVybStjLCB1c2U9bnN0ZXJtK21hYywKKworbnN0ZXJtLXN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvTWFjUm9tYW4gY2hhcnNldCAoY29sb3Igdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rYzQxLCB1c2U9bnN0ZXJtK21hYywKKworbnN0ZXJtLWMtc3xBcHBLaXQgVGVybWluYWwuYXBwIHY1MSsgdy9NYWNSb21hbiBjaGFyc2V0IChmdWxsIGNvbG9yIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtK2MsIHVzZT1uc3Rlcm0rbWFjLAorCisKKyMgVGhpcyBlbnRyeSBpcyBiYXNlZCBvbiBuZXdzZ3JvdXAgY29tbWVudHMgYnkgQWxhaW4gQmVuY2gsIENocmlzdGlhbiBFYmVydCwKKyMgYW5kIEQgUCBTY2hyZWJlciBjb21wYXJpbmcgdG8gbnN0ZXJtLWMtcy1hY3MuCisjCisjIEQgUCBTY2hyZWJlciBub3RlcyB0aGF0ICRURVJNIGNhbiBiZSBzZXQgaW4gVGVybWluYWwuYXBwLCBlLmcuLAorIwlkZWZhdWx0cyB3cml0ZSBjb20uYXBwbGUuVGVybWluYWwgVGVybUNhcFN0cmluZyBuc3Rlcm0tYy1zLWFjcworIyBhbmQgdGhhdCBpdCBpcyBub3Qgc2V0IGluIFRlcm1pbmFsJ3MgcHJlZmVyZW5jZXMgZGlhbG9nLgorbnN0ZXJtLTE2Y29sb3J8QXBwS2l0IFRlcm1pbmFsLmFwcCB2MTAwLjEuOCB3aXRoIE1hY09TIFggMTAuMy45LAorCWtkY2gxPVxFWzN+LCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa25wPVxFWzZ+LCBrcHA9XEVbNX4sIHVzZT1uc3Rlcm0tYy1zLWFjcywKKworIyB4bnVwcGMgLSBEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChhLmsuYS4gImRhcndpbiIpCisjCisjIE9uIFBvd2VyUEMgcGxhdGZvcm1zLCBBcHBsZSdzIERhcndpbiBvcGVyYXRpbmcgc3lzdGVtIHVzZXMgYQorIyBmdWxsLXNjcmVlbiBzeXN0ZW0gY29uc29sZSBkZXJpdmVkIGZyb20gYSBOZXRCU0QgZnJhbWVidWZmZXIKKyMgY29uc29sZS4gSXQgaXMgYW4gQU5TSS1zdHlsZSB0ZXJtaW5hbCwgYW5kIGlzIG5vdCByZWFsbHkgVlQtMTAwCisjIGNvbXBhdGlibGUuCisjCisjIFVuZGVyIE1hYyBPUyBYLCB0aGlzIGlzIHRoZSBzeXN0ZW0gY29uc29sZSBkcml2ZXIgdXNlZCB3aGlsZSBpbgorIyBzaW5nbGUtdXNlciBtb2RlIFtyZWFjaGFibGUgYnkgaG9sZGluZyBkb3duIENvbW1hbmQtUyBkdXJpbmcgdGhlCisjIGJvb3QgcHJvY2Vzc10gYW5kIHdoZW4gbG9nZ2VkIGluIHVzaW5nIGNvbnNvbGUgbW9kZSBbcmVhY2hhYmxlIGJ5CisjIHR5cGluZyAiPmNvbnNvbGUiIGF0IHRoZSBncmFwaGljYWwgbG9naW4gcHJvbXB0Ll0KKyMKKyMgSWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIFRlcm1pbmFsLmFwcCB0ZXJtaW5hbAorIyBlbXVsYXRvciB3aGljaCBydW5zIHVuZGVyIHRoZSBNYWMgT1MgWCBRdWFydHogd2luZG93aW5nIHN5c3RlbSAoYW5kCisjIG90aGVyIEFwcEtpdC1zdXBwb3J0ZWQgd2luZG93aW5nIHN5c3RlbXMsKSBzZWUgdGhlICJuc3Rlcm0iCisjIGVudHJ5IGluc3RlYWQuCisjCisjIE5PVEU6IFVuZGVyIE1hYyBPUyBYIHZlcnNpb24gMTAuMSwgdGhlIGRlZmF1bHQgbG9naW4gd2luZG93IGRvZXMgbm90CisjIHByb21wdCBmb3IgdXNlciBuYW1lLCBpbnN0ZWFkIHJlcXVpcmluZyBhbiBpY29uIHRvIGJlIHNlbGVjdGVkIGZyb20KKyMgYSBsaXN0IG9mIGtub3duIHVzZXJzLiBTaW5jZSB0aGUgc3BlY2lhbCAiPmNvbnNvbGUiIGxvZ2luIGlzIG5vdCBpbgorIyB0aGlzIGxpc3QsIHlvdSBtdXN0IG1ha2Ugb25lIG9mIHR3byBjaGFuZ2VzIGluIHRoZSBMb2dpbiBXaW5kb3cKKyMgcGFuZWwgb2YgdGhlIExvZ2luIHNlY3Rpb24gb2YgU3lzdGVtIFByZWZzIHRvIG1ha2UgdGhlIHNwZWNpYWwKKyMgIj5jb25zb2xlIiBsb2dpbiBhY2Nlc3NpYmxlLiBUaGUgZmlyc3Qgb3B0aW9uIGlzIHRvIGVuYWJsZSAnU2hvdworIyAiT3RoZXIgVXNlciIgaW4gbGlzdCBmb3IgbmV0d29yayB1c2VycycsIHdoaWNoIHdpbGwgYWRkIGEgc3BlY2lhbAorIyAiT3RoZXIuLi4iIGljb24gdG8gdGhlIGdyYXBoaWNhbCBsb2dpbiBwYW5lbC4gU2VsZWN0aW5nICJPdGhlci4uLiIKKyMgd2lsbCBwcmVzZW50IHRoZSByZWd1bGFyIGdyYXBoaWNhbCBsb2dpbiBwcm9tcHQuIFRoZSBzZWNvbmQgb3B0aW9uCisjIGlzIHRvIGNoYW5nZSB0aGUgJ0Rpc3BsYXkgTG9naW4gV2luZG93IGFzOicgc2V0dGluZyB0byAnTmFtZSBhbmQKKyMgcGFzc3dvcmQgZW50cnkgZmllbGRzJywgd2hpY2ggcmVwbGFjZXMgdGhlIGxvZ2luIHBhbmVsIHdpdGggYQorIyBncmFwaGljYWwgbG9naW4gcHJvbXB0LgorIworIyBUaGVyZSBhcmUgbm8gZnVuY3Rpb24ga2V5cywgYXQgbGVhc3Qgbm90IGluIERhcndpbiAxLjMuCisjCisjIEl0IGhhcyBubyBtb3VzZSBzdXBwb3J0LgorIworIyBJdCBoYXMgZnVsbCBBTlNJIGNvbG9yIHN1cHBvcnQsIGFuZCBjb2xvciBjb21iaW5lcyBjb3JyZWN0bHkgd2l0aAorIyBhbGwgdGhyZWUgc3VwcG9ydGVkIGF0dHJpYnV0ZXM6IGJvbGQsIGludmVyc2UtdmlkZW8gYW5kIHVuZGVybGluZS4KKyMgSG93ZXZlciwgYm9sZCBjb2xvcmVkIHRleHQgaXMgYWxtb3N0IHVucmVhZGFibGUgKGJvbGRpbmcgaXMKKyMgYWNjb21wbGlzaGVkIHVzaW5nIHNoaWZ0aW5nIGFuZCBvci1pbmcsIGFuZCBsb29rcyBzbWVhcmVkKSBzbyBib2xkCisjIGhhcyBiZWVuIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3Qgb2YgY29sb3ItY29tcGF0aWJsZSBhdHRyaWJ1dGVzCisjIFt1c2luZyAobmN2KV0uIFRoZSBtb25vY2hyb21lIGVudHJ5ICgtbSkgaXMgdXNlZnVsIGlmIHlvdSB1c2UgYQorIyBtb25vY2hyb21lIG1vbml0b3IuCisjCisjIFRoZXJlIGlzIG9uZSBzZXJpb3VzIGJ1ZyB3aXRoIHRoaXMgdGVybWluYWwgZW11bGF0aW9uJ3MgY29sb3IKKyMgc3VwcG9ydDogcmVwb3NpdGlvbmluZyB0aGUgY3Vyc29yIG9udG8gYSBjZWxsIHdpdGggbm9uLW1hdGNoaW5nCisjIGNvbG9ycyBvYmxpdGVyYXRlcyB0aGF0IGNlbGwncyBjb250ZW50cywgcmVwbGFjaW5nIGl0IHdpdGggYSBibGFuaworIyBhbmQgZGlzcGxheWluZyBhIGNvbG9yZWQgY3Vyc29yIGluIHRoZSAiY3VycmVudCIgY29sb3JzLiBUaGVyZSBpcworIyBubyBjb21wbGV0ZSB3b3JrYXJvdW5kIGF0IHByZXNlbnQgW290aGVyIHRoYW4gdXNpbmcgdGhlIG1vbm9jaHJvbWUKKyMgKC1tKSBlbnRyaWVzLF0gYnV0IHJlbW92aW5nIHRoZSAobXNncikgY2FwYWJpbGl0eSBzZWVtZWQgdG8gaGVscC4KKyMKKyMgVGhlICJzdGFuZG91dCIgY2hvc2VuIHdhcyBzaW1wbGUgcmV2ZXJzZS12aWRlbywgYWx0aG91Z2ggYSBjb2xvcmZ1bAorIyBzdGFuZG91dCBtaWdodCBiZSBtb3JlIGFlc3RoZXRpY2FsbHkgcGxlYXNpbmcuIFNpbWlsYXJseSwgdGhlIGJvbGQKKyMgY2hvc2VuIGlzIHRoZSB0ZXJtaW5hbCdzIG93biBzbWVhcmVkIGJvbGQsIGFsdGhvdWdoIGEgc2ltcGxlCisjIGNvbG9yLWNoYW5nZSBtaWdodCBiZSBtb3JlIHJlYWRhYmxlLiBUaGUgY29sb3ItYm9sZCAoLWIpIGVudHJpZXMKKyMgdXNlcyBtYWdlbnRhIGNvbG9yZWQgdGV4dCBmb3IgYm9sZGluZyBpbnN0ZWFkLiBUaGUgZmFuY3kgY29sb3IgKC1mCisjIGFuZCAtZjIpIGVudHJpZXMgdXNlIGNvbG9yIGZvciBib2xkLCBzdGFuZG91dCBhbmQgdW5kZXJsaW5lZCB0ZXh0CisjICh1bmRlcmxpbmVkIHRleHQgaXMgc3RpbGwgdW5kZXJsaW5lZCwgdGhvdWdoLikKKyMKKyMgQXBwYXJlbnRseSB0aGUgdGVybWluYWwgZW11bGF0b3IgZG9lcyBzdXBwb3J0IGEgVlQtMTAwLXN0eWxlCisjIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LCBidXQgYWxsIHRoZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorIyBwb3NpdGlvbnMgaGF2ZSBiZWVuIGxlZnQgYmxhbmsgaW4gdGhlIGZvbnQuIEZvciB0aGlzIHJlYXNvbiwgbm8KKyMgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiB0aGlzCisjIGRlc2NyaXB0aW9uLiBUaGUgY29uc29sZSBkcml2ZXIgYXBwZWFycyB0byBiZSBBU0NJSS1vbmx5LCBzbyAoZW5hY3MpCisjIGhhcyBiZWVuIGV4Y2x1ZGVkIFthbHRob3VnaCB0aGUgVlQtMTAwIHNlcXVlbmNlIGRvZXMgd29yay5dCisjCisjIFRoZSBkZWZhdWx0IE1hYyBPUyBYIGFuZCBEYXJ3aW4gaW5zdGFsbGF0aW9uIHJlcG9ydHMgInZ0MTAwIiBhcyB0aGUKKyMgdGVybWluYWwgdHlwZSwgYW5kIGV4cG9ydHMgbm8gaGVscGZ1bCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRvIGZpeAorIyB0aGlzLCBjaGFuZ2UgdGhlICJjb25zb2xlIiBlbnRyeSBpbiAvZXRjL3R0eXMgZnJvbSAidnQxMDAiIHRvCisjICJ4bnVwcGMtV3hIIiwgd2hlcmUgVyBhbmQgSCBhcmUgdGhlIGNoYXJhY3RlciBkaW1lbnNpb25zIG9mIHlvdXIKKyMgY29uc29sZSAoc2VlIGJlbG93LikKKyMKKyMgVGhlIGZvbnQgdXNlZCBieSB0aGUgdGVybWluYWwgZW11bGF0b3IgaXMgYXBwYXJlbnRseSBvbmUgb3JpZ2luYWxseQorIyBkcmF3biBieSBLYS1QaW5nIFllZSwgYW5kIHVzZXMgOHgxNi1waXhlbCBjaGFyYWN0ZXJzLiBUaGlzCisjIGZpbGUgaW5jbHVkZXMgZGVzY3JpcHRpb25zIGZvciB0aGUgZm9sbG93aW5nIGdlb21ldHJpZXM6CisjCisjICAgICBQaXhlbHMgICAgICAgIENoYXJhY3RlcnMgICBFbnRyeSBOYW1lIChhcHBlbmQgLW0gZm9yIG1vbm9jaHJvbWUpCisjICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIDY0MHg0MDAgICAgICAgODB4MjUgICAgICAgIHhudXBwYy04MHgyNQorIyAgICAgNjQweDQ4MCAgICAgICA4MHgzMCAgICAgICAgeG51cHBjLTgweDMwCisjICAgICA3MjB4NDgwICAgICAgIDkweDMwICAgICAgICB4bnVwcGMtOTB4MzAKKyMgICAgIDgwMHg2MDAgICAgICAgMTAweDM3ICAgICAgIHhudXBwYy0xMDB4MzcKKyMgICAgIDg5Nng2MDAgICAgICAgMTEyeDM3ICAgICAgIHhudXBwYy0xMTJ4MzcKKyMgICAgIDEwMjR4NjQwICAgICAgMTI4eDQwICAgICAgIHhudXBwYy0xMjh4NDAKKyMgICAgIDEwMjR4NzY4ICAgICAgMTI4eDQ4ICAgICAgIHhudXBwYy0xMjh4NDgKKyMgICAgIDExNTJ4NzY4ICAgICAgMTQ0eDQ4ICAgICAgIHhudXBwYy0xNDR4NDgKKyMgICAgIDEyODB4MTAyNCAgICAgMTYweDY0ICAgICAgIHhudXBwYy0xNjB4NjQKKyMgICAgIDE2MDB4MTAyNCAgICAgMjAweDY0ICAgICAgIHhudXBwYy0yMDB4NjQKKyMgICAgIDE2MDB4MTIwMCAgICAgMjAweDc1ICAgICAgIHhudXBwYy0yMDB4NzUKKyMgICAgIDIwNDh4MTUzNiAgICAgMjU2eDk2ICAgICAgIHhudXBwYy0yNTZ4OTYKKyMKKyMgVGhlIGJhc2ljICJ4bnVwcGMiIGVudHJ5IGluY2x1ZGVzIG5vIHNpemUgaW5mb3JtYXRpb24sIGFuZCB0aGUKKyMgZW11bGF0b3IgaW5jbHVkZXMgbm8gcmVwb3J0aW5nIGNhcGFiaWxpdHksIHNvIHlvdSdsbCBiZSBhdCB0aGUgbWVyY3kKKyMgb2YgdGhlIFRUWSBkZXZpY2UgKHdoaWNoIHJlcG9ydHMgaW5jb3JyZWN0bHkgb24gbXkgaGFyZHdhcmUuKSBUaGUKKyMgY29sb3ItYm9sZCBlbnRyaWVzIGRvIG5vdCBpbmNsdWRlIHNpemUgaW5mb3JtYXRpb24uCisKKyMgVGhlICcrJyBlbnRyaWVzIGFyZSBidWlsZGluZyBibG9ja3MKK3hudXBwYytiYXNpY3xEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIGJhc2ljIGNhcGFiaWxpdGllcywKKwlhbSwgYmNlLCBtaXIsIHhlbmwsCisJaXQjOCwKKwlib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRzbD1cRV0yO1wwMDcsIGVkPVxFW0osIGVsPVxFW0ssCisJZWwxPVxFWzFLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbmQ9XkosIGticz1cMTc3LAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcm1hbT1cRVs/N2wsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7bSwKKwlzZ3IwPVxFW21cMDE3LCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLCB1c2U9dnQxMDAra2V5cGFkLAorCit4bnVwcGMrY3xEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIEFOU0kgY29sb3Igc3VwcG9ydCwKKwljb2xvcnMjOCwgbmN2IzMyLCBwYWlycyM2NCwKKwlvcD1cRVszNzs0MG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisKK3hudXBwYytifERhcndpbiBQb3dlclBDIENvbnNvbGUgY29sb3ItYm9sZCBzdXBwb3J0LAorCW5jdiMzMiwKKwlib2xkPVxFWzM1bSwKKwlzZ3I9XEVbMCU/JXA2JXQ7MzUlOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclO20sCisJdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjK2Z8RGFyd2luIFBvd2VyUEMgQ29uc29sZSBmYW5jeSBjb2xvciBzdXBwb3J0LAorCW5jdiMzNSwKKwlzZ3I9XEVbMCU/JXA2JXQ7MzUlOyU/JXAyJXQ7MzY7NCU7JT8lcDEldDszMzs0NCU7JT8lcDMldDs3JTttLAorCXNtc289XEVbMzM7NDRtLCBzbXVsPVxFWzM2OzRtLCB1c2U9eG51cHBjK2IsCisKK3hudXBwYytmMnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIGFsdGVybmF0ZSBmYW5jeSBjb2xvciBzdXBwb3J0LAorCW5jdiMzNSwKKwlib2xkPVxFWzMzbSwKKwlzZ3I9XEVbMCU/JXA2JXQ7MzMlOyU/JXAyJXQ7MzQlOyU/JXAxJXQ7MzE7NDclOyU/JXAzJXQ7NyU7bSwKKwlzbXNvPVxFWzMxOzQ3bSwgc211bD1cRVszNG0sIHVzZT14bnVwcGMrYmFzaWMsCisKKyMgQnVpbGRpbmcgYmxvY2tzIGZvciBzcGVjaWZpYyBzY3JlZW4gc2l6ZXMKK3hudXBwYys4MHgyNXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIDgweDI1IHN1cHBvcnQgKDY0MHg0MDAgcGl4ZWxzKSwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKworeG51cHBjKzgweDMwfERhcndpbiBQb3dlclBDIENvbnNvbGUgODB4MzAgc3VwcG9ydCAoNjQweDQ4MCBwaXhlbHMpLAorCWNvbHMjODAsIGxpbmVzIzMwLAorCit4bnVwcGMrOTB4MzB8RGFyd2luIFBvd2VyUEMgQ29uc29sZSA5MHgzMCBzdXBwb3J0ICg3MjB4NDgwIHBpeGVscyksCisJY29scyM5MCwgbGluZXMjMzAsCisKK3hudXBwYysxMDB4Mzd8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAxMDB4Mzcgc3VwcG9ydCAoODAweDYwMCBwaXhlbHMpLAorCWNvbHMjMTAwLCBsaW5lcyMzNywKKworeG51cHBjKzExMngzN3xEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIDExMngzNyBzdXBwb3J0ICg4OTZ4NjAwIHBpeGVscyksCisJY29scyMxMTIsIGxpbmVzIzM3LAorCit4bnVwcGMrMTI4eDQwfERhcndpbiBQb3dlclBDIENvbnNvbGUgMTI4eDQwIHN1cHBvcnQgKDEwMjR4NjQwIHBpeGVscyksCisJY29scyMxMjgsIGxpbmVzIzQwLAorCit4bnVwcGMrMTI4eDQ4fERhcndpbiBQb3dlclBDIENvbnNvbGUgMTI4eDQ4IHN1cHBvcnQgKDEwMjR4NzY4IHBpeGVscyksCisJY29scyMxMjgsIGxpbmVzIzQ4LAorCit4bnVwcGMrMTQ0eDQ4fERhcndpbiBQb3dlclBDIENvbnNvbGUgMTQ0eDQ4IHN1cHBvcnQgKDExNTJ4NzY4IHBpeGVscyksCisJY29scyMxNDQsIGxpbmVzIzQ4LAorCit4bnVwcGMrMTYweDY0fERhcndpbiBQb3dlclBDIENvbnNvbGUgMTYweDY0IHN1cHBvcnQgKDEyODB4MTAyNCBwaXhlbHMpLAorCWNvbHMjMTYwLCBsaW5lcyM2NCwKKworeG51cHBjKzIwMHg2NHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIDIwMHg2NCBzdXBwb3J0ICgxNjAweDEwMjQgcGl4ZWxzKSwKKwljb2xzIzIwMCwgbGluZXMjNjQsCisKK3hudXBwYysyMDB4NzV8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAyMDB4NzUgc3VwcG9ydCAoMTYwMHgxMjAwIHBpeGVscyksCisJY29scyMyMDAsIGxpbmVzIzc1LAorCit4bnVwcGMrMjU2eDk2fERhcndpbiBQb3dlclBDIENvbnNvbGUgMjU2eDk2IHN1cHBvcnQgKDIwNDh4MTUzNiBwaXhlbHMpLAorCWNvbHMjMjU2LCBsaW5lcyM5NiwKKworIyBUaGVzZSBhcmUgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB0aGUgYnVpbGRpbmcgYmxvY2tzCisKK3hudXBwYy1tfGRhcndpbi1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpLAorCXVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwY3xkYXJ3aW58RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpLAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLW0tYnxkYXJ3aW4tbS1ifERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUgdy9jb2xvci1ib2xkKSwKKwl1c2U9eG51cHBjK2IsCisKK3hudXBwYy1ifGRhcndpbi1ifERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yIHcvY29sb3ItYm9sZCksCisJdXNlPXhudXBwYytiLCB1c2U9eG51cHBjK2MsCisKK3hudXBwYy1tLWZ8ZGFyd2luLW0tZnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChmYW5jeSBtb25vY2hyb21lKSwKKwl1c2U9eG51cHBjK2YsCisKK3hudXBwYy1mfGRhcndpbi1mfERhcndpbiBQb3dlclBDIENvbnNvbGUgKGZhbmN5IGNvbG9yKSwKKwl1c2U9eG51cHBjK2YsIHVzZT14bnVwcGMrYywKKworeG51cHBjLW0tZjJ8ZGFyd2luLW0tZjJ8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoYWx0ZXJuYXRlIGZhbmN5IG1vbm9jaHJvbWUpLAorCXVzZT14bnVwcGMrZjIsCisKK3hudXBwYy1mMnxkYXJ3aW4tZjJ8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoYWx0ZXJuYXRlIGZhbmN5IGNvbG9yKSwKKwl1c2U9eG51cHBjK2YyLCB1c2U9eG51cHBjK2MsCisKKyMgQ29tYmluYXRpb25zIGZvciBzcGVjaWZpYyBzY3JlZW4gc2l6ZXMKK3hudXBwYy04MHgyNS1tfGRhcndpbi04MHgyNS1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDgweDI1LAorCXVzZT14bnVwcGMrODB4MjUsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy04MHgyNXxkYXJ3aW4tODB4MjV8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDgweDI1LAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYys4MHgyNSwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTgweDMwLW18ZGFyd2luLTgweDMwLW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgODB4MzAsCisJdXNlPXhudXBwYys4MHgzMCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTgweDMwfGRhcndpbi04MHgzMHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgODB4MzAsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzgweDMwLCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtOTB4MzAtbXxkYXJ3aW4tOTB4MzAtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSA5MHgzMCwKKwl1c2U9eG51cHBjKzkweDMwLCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtOTB4MzB8ZGFyd2luLTkweDMwfERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSA5MHgzMCwKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrOTB4MzAsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xMDB4MzctbXxkYXJ3aW4tMTAweDM3LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgMTAweDM3LAorCXVzZT14bnVwcGMrMTAweDM3LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTAweDM3fGRhcndpbi0xMDB4Mzd8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDEwMHgzNywKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrMTAweDM3LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTEyeDM3LW18ZGFyd2luLTExMngzNy1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDExMngzNywKKwl1c2U9eG51cHBjKzExMngzNywgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTExMngzN3xkYXJ3aW4tMTEyeDM3fERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSAxMTJ4MzcsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzExMngzNywgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTEyOHg0MC1tfGRhcndpbi0xMjh4NDAtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSAxMjh4NDAsCisJdXNlPXhudXBwYysxMjh4NDAsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xMjh4NDB8ZGFyd2luLTEyOHg0MHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgMTI4eDQwLAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYysxMjh4NDAsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xMjh4NDgtbXxkYXJ3aW4tMTI4eDQ4LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgMTI4eDQ4LAorCXVzZT14bnVwcGMrMTI4eDQ4LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTI4eDQ4fGRhcndpbi0xMjh4NDh8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDEyOHg0OCwKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrMTI4eDQ4LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTQ0eDQ4LW18ZGFyd2luLTE0NHg0OC1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDE0NHg0OCwKKwl1c2U9eG51cHBjKzE0NHg0OCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTE0NHg0OHxkYXJ3aW4tMTQ0eDQ4fERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSAxNDR4NDgsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzE0NHg0OCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTE2MHg2NC1tfGRhcndpbi0xNjB4NjQtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSAxNjB4NjQsCisJdXNlPXhudXBwYysxNjB4NjQsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xNjB4NjR8ZGFyd2luLTE2MHg2NHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgMTYweDY0LAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYysxNjB4NjQsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0yMDB4NjQtbXxkYXJ3aW4tMjAweDY0LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgMjAweDY0LAorCXVzZT14bnVwcGMrMjAweDY0LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMjAweDY0fGRhcndpbi0yMDB4NjR8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDIwMHg2NCwKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrMjAweDY0LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMjAweDc1LW18ZGFyd2luLTIwMHg3NS1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDIwMHg3NSwKKwl1c2U9eG51cHBjKzIwMHg3NSwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTIwMHg3NXxkYXJ3aW4tMjAweDc1fERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSAyMDB4NzUsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzIwMHg3NSwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTI1Nng5Ni1tfGRhcndpbi0yNTZ4OTYtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSAyNTZ4OTYsCisJdXNlPXhudXBwYysyNTZ4OTYsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0yNTZ4OTZ8ZGFyd2luLTI1Nng5NnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgMjU2eDk2LAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYysyNTZ4OTYsIHVzZT14bnVwcGMrYmFzaWMsCisKKyMjIyMgUmFkaW8gU2hhY2svVGFuZHkKKyMKKworIyAoY29jbzM6IFRoaXMgaGFkICJ0YSIgdXNlZCBpbmNvcnJlY3RseSBhcyBhIGJvb2xlYW4gYW5kIGJsIGdpdmVuIGFzICJibCM3Ii4KKyMgSSByZWFkIHRoZXNlIGFzIG1pc3Rha2VzIGZvciAiOml0Izg6IiBhbmQgIjpibD1cMDA3OiIgcmVzcGVjdGl2ZWx5IC0tIGVzcikKKyMgRnJvbTogPHtwYnJvd24sY3RsfUBvY2YuYmVya2VsZXkuZWR1PiAxMiBNYXIgOTAKK2NvY28zfG9zOUxJSXxUYW5keSBDb0NvMyAyNCo4MCBPUzkgTGV2ZWwgSUksCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1eXyIsIGJvbGQ9XEVcOl5BLCBjaXZpcz1eRVxzLAorCWNsZWFyPVwwMTQkPDUqLz4sIGNub3JtPV5FISwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eRiwKKwljdXA9XDAwMiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYyQ8Mi8+LCBjdXUxPV5JLAorCWRsMT1eXzEsIGVkPV5LLCBlbD1eRCwgaG9tZT1eQSwgaWwxPV5fMCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5JLCBrY3V1MT1eTCwgcmV2PV5fXHMsIHJtc289Xl8hLCBybXVsPV5fIywKKwlzZ3IwPVwwMzchXEVcOlwwLCBzbXNvPV5fXHMsIHNtdWw9Xl8iLAorIyAodHJzMjogcmVtb3ZlZCBvYnNvbGV0ZSAiOm5sPV5fOiIgLS0gZXNyKQordHJzMnx0cnNJSXx0cnM4MElJfFJhZGlvIFNoYWNrIE1vZGVsIElJIHVzaW5nIFAmVCBDUC9NLAorCU9UYnMsIGFtLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5fLCBjdWYxPV5dLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9Xl4sIGRsMT1eSywgZWQ9XkIsCisJZWw9XkEsIGhvbWU9XkYsIGh0PV5JLCBpbDE9XkQsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eXCwKKwlrY3VkMT1eXywga2N1ZjE9Xl0sIGtjdXUxPV5eLCBybXNvPV5PLCBzZ3IwPV5PLCBzbXNvPV5OLAorIyBGcm9tOiBLZXZpbiBCcmF1bnNkb3JmIDxrc2JAbWVudG9yLmNjLnB1cmR1ZS5lZHU+CisjIChUaGlzIGhhZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzCisjCTpCTj1cRVs/MzNoOkJGPVxFWz8zM2w6VUM9XEVbXyBxOkJDPVxFW1wxNzcgcTpcCisjCTpDTj1cRVJDOkNGPVxFUmM6TlI9XEVSRDpOTT1cRVJAOgorIyBJIGFsc28gZGVsZXRlZCB0aGUgdW5uZWNlc3NhcnkgIjprbiMyOiIsICI6c2cjMDoiIC0tIGVzcikKK3RyczE2fHRycy04MCBtb2RlbCAxNiBjb25zb2xlLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9amFrYGxfbWJxdXZld2N4cywgYmVsPV5HLCBjaXZpcz1cRVJjLCBjbGVhcj1eTCwKKwljbm9ybT1cRVJDLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFUSwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpY2gxPVxFUCwgaWwxPVxFTCwKKwlpbmQ9XkosIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLAorCWtmMD1eQSwga2YxPV5CLCBrZjI9XkQsIGtmMz1eTCwga2Y0PV5VLCBrZjU9XlAsIGtmNj1eTiwga2Y3PV5TLAorCWtob21lPV5XLCBsZjA9ZjEsIGxmMT1mMiwgbGYyPWYzLCBsZjM9ZjQsIGxmND1mNSwgbGY1PWY2LCBsZjY9ZjcsCisJbGY3PWY4LCBtYzQ9XEVdKywgbWM1PVxFXT0sIHJtYWNzPVxFUmcsIHJtc289XEVSQCwgc2dyMD1cRVJALAorCXNtYWNzPVxFUkcsIHNtc289XEVSRCwKKworIyMjIyBBdGFyaSBTVAorIworCisjIEZyb206IFNpbXNvbiBMLiBHYXJmaW5rZWwgPHNpbXNvbmdAbWVkaWEtbGFiLm1pdC5lZHU+CithdGFyaXxhdGFyaSBzdCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwljbGVhcj1cRUhcRUosIGN1YjE9XEVELCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRsMT1cRU0sCisJZWQ9XEVKLCBlbD1cRUssIGh0PV5JLCBpbDE9XEVMLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwgcmk9XEVJLCBybXNvPVxFcSwgc2dyMD1cRXEsIHNtc289XEVwLAorIyBVbmlUZXJtIHRlcm1pbmFsIHByb2dyYW0gZm9yIHRoZSBBdGFyaSBTVDogIDQ5LWxpbmUgVlQyMjAgZW11bGF0aW9uIG1vZGUKKyMgRnJvbTogUGF1bCBNLiBBb2tpIDxhb2tpQHVjYnZheC5iZXJrZWxleS5lZHU+Cit1bml0ZXJtfHVuaXRlcm00OXxVbmlUZXJtIFZUMjIwIGVtdWxhdG9yIHdpdGggNDkgbGluZXMsCisJbGluZXMjNDksCisJaXMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7NDlyXEVbNDk7MUgsCisJdXNlPXZ0MjIwLAorIyBNaU5UIFZUNTIgZW11bGF0aW9uLiA4MCBjb2x1bW5zLCAyNSByb3dzLgorIyBNaU5UIGlzIE5vdyBUT1MsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdoaWNoIGNvbWVzIHdpdGggYWxsIEF0YXJpcyBub3cKKyMgKG1haW5seSBBdGFyaSBGYWxjb24pLiBUaGlzIHRlcm1jYXAgaXMgZm9yIHRoZSBWVDUyIGVtdWxhdGlvbiB5b3UgZ2V0CisjIHVuZGVyIHRjc2gvenNoL2Jhc2gvc2gva3NoL2FzaC9jc2ggd2hlbiB5b3UgcnVuIE1pTlQgaW4gYGNvbnNvbGUnIG1vZGUKKyMgRnJvbTogUGVyIFBlcnNzb24gPHBwQGdudS5haS5taXQuZWR1PiwgMjcgRmViIDE5OTYKK3N0NTJ8QXRhcmkgU1Qgd2l0aCBWVDUyIGVtdWxhdGlvbiwKKwlhbSwga20sCisJY29scyM4MCwgbGluZXMjMjUsCisJYmVsPV5HLCBjaXZpcz1cRWYsIGNsZWFyPVxFSFxFSiwgY25vcm09XEVlLCBjcj1eTSwgY3ViMT1cRUQsCisJY3VkMT1cRUIsIGN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XEVBLCBkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpbDE9XEVMLAorCWluZD1eSiwga2ExPVxFIzcsIGthMz1cRSM1LCBrYjI9XEUjOSwga2JzPV5ILCBrYzE9XEUjMSwKKwlrYzM9XEUjMywga2Nscj1cRSM3LCBrY3ViMT1cRSNLLCBrY3VkMT1cRSNQLCBrY3VmMT1cRSNNLAorCWtjdXUxPVxFI0gsIGtmMD1cRSNELCBrZjE9XEUjOywga2YyPVxFIzwsIGtmMz1cRSM9LCBrZjQ9XEUjPiwKKwlrZjU9XEUjPywga2Y2PVxFI0AsIGtmNz1cRSNBLCBrZjg9XEUjQiwga2Y5PVxFI0MsIGtob21lPVxFI0csCisJa2lsMT1cRSNSLCBraW5kPVxFIzIsIGtyaT1cRSM4LCBsZjA9ZjEwLCBuZWw9Xk1eSiwgcmM9XEVrLAorCXJpPVxFSSwgcm1jdXA9LCBybXNvPVxFcSwgcnMxPVxFel9cRWJAXEVjQSwgc2M9XEVqLCBzZ3IwPVxFcSwKKwlzbWN1cD1cRWUsIHNtc289XEVwLAorCisjIyMjIENvbW1vZG9yZSBCdXNpbmVzcyBNYWNoaW5lcworIworIyBGb3JtZXJseSBsb2NhdGVkIGluIFdlc3QgQ2hlc3RlciwgUEE7IHdlbnQgc3BlY3RhY3VsYXJseSBidXN0IGluIDE5OTQKKyMgYWZ0ZXIgeWVhcnMgb2Ygc2hha3kgZW5naW5lZXJpbmcgYW5kIGVncmVnaW91cyBtaXNtYW5hZ2VtZW50LiAgTWFkZSBvbmUKKyMgcmVhbGx5IG5pY2UgbWFjaGluZSAodGhlIEFtaWdhKSBhbmQgYm9hdGxvYWRzIG9mIG5hc3R5IG9uZXMgKFBFVCwgQy02NCwKKyMgQy0xMjgsIFZJQy0yMCkuICBUaGUgQy02NCBpcyBzYWlkIHRvIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIG1hY2hpbmUKKyMgZXZlciAobW9zdCB1bml0cyBzb2xkKTsgdGhleSBjYW4gc3RpbGwgYmUgZm91bmQgZ2F0aGVyaW5nIGR1c3QgaW4gY2xvc2V0cworIyBldmVyeXdoZXJlLgorIworCisjIEZyb206IEtlbnQgUG9sayA8a2VudEBzd3JpbmRlLm5kZS5zd3JpLmVkdT4sIDMwIE1heSA5MAorIyBBZGRlZCBhIGZldyBtb3JlIGVudHJpZXMsIGNvbnZlcnRlZCBjYXJldC10eXBlIGNvbnRyb2wgc2VxdWVuY2UgKF54KSBlbnRyaWVzCisjIHRvICdcMHh4JyBlbnRyaWVzIHNpbmNlIGEgY291cGxlIG9mIHBlb3BsZSBtZW50aW9uZWQgbG9zaW5nICdeeCcgc2VxdWVuY2VzLgorIyBDb3JyZWN0aW9ucyBieSBUeSBTYXJuYSA8dHNhcm5hQGVuZGljb3IuY29tPiwgU2F0IEZlYiAyOCAxODo1NToxNSAxOTk4CisjCisjIDphczosIDphZToJCQlTdXBwb3J0IGZvciBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldHMuCisjIDp2ZT1cRVtcMDQwcDp2aT1cRVtcMDYwXDA0MHA6CWN1cnNvciB2aXNpYmxlL2ludmlzaWJsZS4KKyMgOnhuOiAgdnQxMDAga2x1ZGdpbmVzcyBhdCBjb2x1bW4gODAvTkVXTElORSBpZ25vcmUgYWZ0ZXIgODAgY29scyhDb25jZXB0KQorIyAgICAgVGhpcyBvbmUgYXBwZWFycyB0byBmaXggYSBwcm9ibGVtIEkgYWx3YXlzIGhhZCB3aXRoIGEgbGluZSBlbmRpbmcKKyMgICAgIGF0ICd3aWR0aCsxJyAoSSB0aGluaykgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGluIHZpLiBUaGUgYmxhbmsKKyMgICAgIGxpbmUgdGVuZGVkIHRvIGRpc2FwcGVhciBhbmQgcmVhcHBlYXIgZGVwZW5kaW5nIG9uIGhvdyB0aGUgc2NyZWVuCisjICAgICB3YXMgcmVmcmVzaGVkLiBOb3RlIHRoYXQgdGhpcyBpcyBwcm9iYWJseSBuZWVkZWQgb25seSBpZiB5b3UgdXNlCisjICAgICBzb21ldGhpbmcgbGlrZSBhIERuZXQgRnRlcm0gd2l0aCB0aGUgd2luZG93IHNpemVkIHRvIHNvbWUgcGVjdWxpYXIKKyMgICAgIGRpbWVuc2lvbiBsYXJnZXIgdGhhbiA4MCBjb2x1bW5zLgorIyA6azA9XEU5fjoJbWFwIEYxMCB0byBrMCAtIGNvdWxkIGhhdmUgRjAtOSAtPiBrMC05LCBidXQgLi4uIEYxMCB3YXMgJ2s7JworIyAoYW1pZ2E6IHJlbW92ZWQgb2Jzb2xldGUgOmtuIzEwOiwKKyMgYWxzbyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgYSB3YXJuaW5nIC0tZXNyKQorYW1pZ2F8QW1pZ2EgQU5TSSwKKwlPVGJzLCBhbSwgYncsIHhlbmwsCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEVbNzsybSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osCisJY2l2aXM9XEVbMCBwLCBjbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbIHAsIGN1Yj1cRVslcDElZEQsCisJY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsCisJaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVbUywKKwlpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOG0sIGlzMj1cRVsyMGwsIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjA9XEVbOX4sCisJa2YxPVxFWzB+LCBrZjI9XEVbMX4sIGtmMz1cRVsyfiwga2Y0PVxFWzN+LCBrZjU9XEVbNH4sCisJa2Y2PVxFWzV+LCBrZjc9XEVbNn4sIGtmOD1cRVs3fiwga2Y5PVxFWzh+LCByZXY9XEVbN20sCisJcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwgcm1hY3M9Xk8sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cRWMsIHNncjA9XEVbbSwgc21hY3M9Xk4sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMgRnJvbTogSGFucyBWZXJrdWlsIDxoYW5zQHd5c3QuaG9iYnkubmw+LCA0IERlYyAxOTk1CisjIChhbWlnYTogYWRkZWQgZW1wdHkgPGFjc2M+IHRvIHN1cHByZXNzIGEgd2FybmluZy4KKyMgSSdtIHRvbGQgdGhpcyBlbnRyeSBzY3Jld3MgdXAgYmFkbHkgd2l0aCBBUzIyNSwgdGhlIEFtaWdhCisjIFRDUC9JUCBwYWNrYWdlIG9uY2UgZnJvbSBDb21tb2RvcmUsIGFuZCBub3cgc29sZCBieSBJbnRlcldvcmtzLi0tZXNyKQorYW1pZ2EtaHxIYW5zIFZlcmt1aWwncyBBbWlnYSBBTlNJLAorCU9UYnMsIGJ3LCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9LCBiZWw9XkcsIGJsaW5rPVwyMzM3OzJtLCBib2xkPVwyMzMxbSwgY2J0PVwyMzNaLAorCWNpdmlzPVwyMzMwIHAsIGNsZWFyPVwyMzNIXDIzM0osIGNub3JtPVwyMzMgcCwgY3I9Xk0sCisJY3ViPVwyMzMlcDElZEQsIGN1YjE9XDIzM0QsIGN1ZD1cMjMzJXAxJWRCLCBjdWQxPVwyMzNCLAorCWN1Zj1cMjMzJXAxJWRDLCBjdWYxPVwyMzNDLCBjdXA9XDIzMyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cMjMzJXAxJWRBLCBjdXUxPVwyMzNBLCBkY2g9XDIzMyVwMSVkUCwgZGNoMT1cMjMzUCwKKwlkaW09XDIzMzJtLCBlY2g9XDIzMyVwMSVkUCwgZWQ9XDIzM0osIGVsPVwyMzNLLCBmbGFzaD1eRywKKwlob21lPVwyMzNILCBodD1eSSwgaWNoPVwyMzMlcDElZEAsIGljaDE9XDIzM0AsIGluZD1cMjMzUywKKwlpbmRuPVwyMzMlcDElZFMsIGludmlzPVwyMzM4bSwgaXMyPVwyMzMyMGwsIGticz1eSCwKKwlrY3ViMT1cMjMzRCwga2N1ZDE9XDIzM0IsIGtjdWYxPVwyMzNDLCBrY3V1MT1cMjMzQSwKKwlrZGNoMT1cMTc3LCBrZjA9XDIzMzl+LCBrZjE9XDIzMzB+LCBrZjI9XDIzMzF+LCBrZjM9XDIzMzJ+LAorCWtmND1cMjMzM34sIGtmNT1cMjMzNH4sIGtmNj1cMjMzNX4sIGtmNz1cMjMzNn4sIGtmOD1cMjMzN34sCisJa2Y5PVwyMzM4fiwgbmVsPVwyMzNCXHIsIHJldj1cMjMzN20sIHJpPVwyMzNULAorCXJpbj1cMjMzJXAxJWRULCBybWFjcz1eTywgcm1jdXA9XDIzMz83aCwgcm1zbz1cMjMzMG0sCisJcm11bD1cMjMzMG0sIHJzMT1cRWMsIHNncjA9XDIzMzBtLCBzbWFjcz1eTiwgc21jdXA9XDIzMz83bCwKKwlzbXNvPVwyMzM3bSwgc211bD1cMjMzNG0sCisKKyMgRnJvbTogSGVubmluZyAnRmFyb3VsJyBQZXRlcnMgPEZhcm91bEBiZXlvbmQua24tYnJlbWVuLmRlPiwgMjUgU2VwIDE5OTkKKyMKKyMgUGF2ZWwgRmVkaW4gYWRkZWQKKyMJSG9tZSAgICBTaGlmdCtMZWZ0CisjCUVuZCAgICAgU2hpZnQrUmlnaHQKKyMJUGdVcCAgICBTaGlmdCtVcAorIwlQZ0RuICAgIFNoaWZ0K0Rvd24KK2FtaWdhLThiaXR8QW1pZ2EgQU5TSSB1c2luZyA4LWJpdCBjb250cm9scywKKwlhY3NjPSwgZGw9XDIzMyVwMSVkTSwgZGwxPVwyMzNNLCBpbD1cMjMzJXAxJWRMLCBpbDE9XDIzM0wsCisJaW5kPVwyMDQsIGluZG5ALCBrZW5kPVwyMzMgQCwga2hvbWU9XDIzMyBBLCBrbnA9XDIzM1MsCisJa3BwPVwyMzNULCByaT1cMjE1LCByaW5ALCB1c2U9YW1pZ2EtaCwKKworIyBGcm9tOiBSdWVkaWdlciBLdWhsbWFubiA8dGVybWluZm9AcnVlZGlnZXIta3VobG1hbm4uZGU+LCAxOCBKdWwgMjAwMAorIyByZXF1aXJlcyB1c2Ugb2YgYXBwcm9wcmlhdGUgcHJlZmVyZW5jZXMgc2V0dGluZ3MuCithbWlnYS12bmN8QW1pZ2EgdXNpbmcgVk5DIGNvbnNvbGUgKGJsYWNrIG9uIGxpZ2h0IGdyYXkpLAorCWFtLCBkYSwgZGIsIG1zZ3IsIG5kc2NyLAorCWJ0bnMjMSwgY29sb3JzIzE2LCBjb2xzIzgwLCBsaW5lcyMyNCwgbG0jMCwgbmN2IzAsIHBhaXJzIzI1NiwKKwliZWw9XkcsIGJsaW5rPVxFWzc7Mm0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWzBwLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVtwXEVbPj82bCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPj82aCwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbMU0sIGVkPVxFW0osIGVsPVxFW0ssIGZsYXNoPV5HLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbMUwsIGluZD1cRUQsCisJaW5kbj1cRVslcDElZFMsIGludmlzPVxFOG0sCisJaXMyPVxFWz4/MjsxOGxcRVs+PzI2Oz82OzIwOz4/MTU7Pzc7Pj8yMjs+PzhoLAorCWticz1eSCwga2NidD1cMjMzWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZGNoMT1cMTc3LCBrZjA9XEVbOX4sIGtmMT1cRVswfiwga2YyPVxFWzF+LAorCWtmMz1cRVsyfiwga2Y0PVxFWzN+LCBrZjU9XEVbNH4sIGtmNj1cRVs1fiwga2Y3PVxFWzZ+LAorCWtmOD1cRVs3fiwga2Y5PVxFWzh+LCBraGxwPVxFWz9+LCBraG9tZT1cRVs0NH4sIGtsbD1cRVs0NX4sCisJa21vdXM9XEVbTSwga25wPVxFWzQyfiwga3BwPVxFWzQxfiwgbmVsPVxFRSwgb2M9XEVbMG0sCisJcmV2PVxFWzdtLCByaT1cRU0sIHJpbj1cRVslcDElZFQsIHJtY3VwPVxFWz83aFxFW3JcRVtKLAorCXJta3g9XEVbPzFsLCBybXNvPVxFWzIxbSwgcm11bD1cRVsyNG0sIHJzMT1cRWMsCisJcnMyPVxFWz4/MjsxOGxcRVs+PzI2Oz82OzIwOz4/MTU7Pzc7Pj8yMjs+PzhoLAorCXNldGFiPVxFWyU/JXAxJXs4fSU+JXQlJ0YnJXAxJSslZCVlNCVwMSVkJTttLAorCXNldGFmPVxFWyU/JXAxJXs4fSU+JXQlJzInJXAxJSslZCVlMyVwMSVkJTttLAorCXNncjA9XEVbMG1cMDE3XEVbMzA7ODU7PjE1bSwgc21jdXA9XEVbPzdoLCBzbWt4PVxFWz8xaCwKKwlzbXNvPVxFWzFtLCBzbXVsPVxFWzRtLAorCisjIE1vcnBoT1Mgb24gR2VuZXNpIFBlZ2Fzb3MKKyMgQnkgUGF2ZWwgRmVkaW4gPHNvbmljX2FtaWdhQHJhbWJsZXIucnU+Cittb3JwaG9zLAorCWFjc2M9LCBkbD1cMjMzJXAxJWRNLCBkbDE9XDIzM00sIGlsPVwyMzMlcDElZEwsIGlsMT1cMjMzTCwKKwlpbmQ9XDIwNCwgaW5kbkAsIGtlbmQ9XDIzMzQ1fiwga2YxMT1cMjMzMjB+LCBrZjEyPVwyMzMyMX4sCisJa2hvbWU9XDIzMzQ0fiwga2ljaDE9XDIzMzQwfiwga25wPVwyMzM0Mn4sIGtwcD1cMjMzNDF+LAorCXJpPVwyMTUsIHJpbkAsIHVzZT1hbWlnYS1oLAorCisjIENvbW1vZG9yZSBCLTEyOCBtaWNyb2NvbXB1dGVyIGZyb20gRG91ZyBUeXJvbCA8ZGV0QEhFTC1BQ0UuQVJQQT4KKyMgCUknbSB0cnlpbmcgdG8gd3JpdGUgYSB0ZXJtY2FwIGZvciBhIGNvbW1vZG9yZSBiLTEyOCwgYW5kIEknbQorIyBoYXZpbmcgYSBsaXR0bGUgdHJvdWJsZS4gSSd2ZSBoYWQgdG8gbWFwIG1vc3Qgb2YgbXkgY29udHJvbCBjaGFyYWN0ZXJzCisjIHRvIHNvbWV0aGluZyB0aGF0IHVuaXggd2lsbCBhY2NlcHQgKG15IGRlbGV0ZS1jaGFyIGlzIGEgY3RybC10LCBldGMpLAorIyBhbmQgY3JlYXRlIHNvbWUgZnVuY3Rpb25zIChsaWtlIGNtKSwgYnV0IHRoYXRzIGxpZmUuCisjIAlUaGUgcHJvYmxlbSBpcyB3aXRoIHRoZSBhcnJvdyBrZXlzIC0gcmlnaHQsIGFuZCB1cCB3b3JrIGZpbmUsIGJ1dAorIyBsZWZ0IGRlbGV0ZXMgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBhbmQgZG93biBJIGp1c3QgY2FuJ3QgZmlndXJlIG91dC4KKyMgSm92ZSBrbm93cyB3aGF0IEkgd2FudCwgYnV0IEkgZG9uJ3Qga25vdyB3aGF0IGl0J3Mgc2VuZGluZyB0byBtZSAoaXQKKyMgaXNuJ3QgdGhhdHMgYm91bmQgdG8gbmV4dC1saW5lIGluIGpvdmUpLgorIyAJQW55Ym9keSBnb3QgYW55IGlkZWFzPyBIZXJlJ3MgbXkgdGVybWNhcC4KKyMgREFHIC0tIEkgY2hhbmdlZCBoaXMgIl5uIiBlbnRyaWVzIHRvICJcbiI7IHNlZSBpZiB0aGF0IHdvcmtzLgorIworY29tbW9kb3JlfGItMTI4fENvbW1vZG9yZSBCLTEyOCBtaWNybywKKwlhbSwgYncsCisJT1RkTiMyMCwgY29scyM4MCwgbGluZXMjMjQsIHBiIzE1MCwKKwlPVGJjPV5ILCBPVG5sPV5NLCBjbGVhcj1cRVwwMDYkPDEwLz4sIGNyPV5NLCBjdWQxPV5KLAorCWN1ZjE9XkYsIGN1cD1cRVwwMTMlcDElMmRcLCVwMiUyZFwsJDwyMC8+LCBjdXUxPV5QLAorCWRjaDE9XDE3NyQ8MTAqLz4sIGRsMT1cRWQkPDEwKi8+LCBlbD1cRXEkPDEwLz4sCisJaG9tZT1cRV5FLCBodD1cMDExJDw1Lz4sIGljaDE9XEVcbiQ8NS8+LCBpbDE9XEVpJDwxMC8+LAorCWtjdWIxPV5CLCBrY3VkMT1eSiwga2N1ZjE9XkYsIGtjdXUxPV5QLCBraG9tZT1cRV5FLCBybWlyPSwKKwlzbWlyPSwKKworIyMjIyBOb3J0aCBTdGFyCisjCisjIE5vcnRoIFN0YXIgQWR2YW50YWdlIGZyb20gTHQuIEZpY2tpZSA8YnJsLWliZCFmaWNraWU+IHZpYSBCUkwKK25vcnRoc3RhcnxOb3J0aCBTdGFyIEFkdmFudGFnZSwKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVwwMDQkPDIwMC8+LAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDEvPiwgZWQ9XDAxNyQ8MjAwLz4sCisJZWw9XDAxNiQ8MjAwLz4sIGhvbWU9XDAzNFwwMzIkPDIwMC8+LAorCisjIyMjIE9zYm9ybmUKKyMKKyMgVGh1IEp1bCAgNyAwMzo1NToxNiAxOTgzCisjCisjIEFzIGFuIGFzaWRlLCBiZSBjYXJlZnVsOyBpdCBtYXkgc291bmQgbGlrZSBhbiBhbm9tYWx5IG9uIHRoZQorIyBPc2Jvcm5lLCBidXQgd2l0aCB0aGUgODAtY29sdW1uIHVwZ3JhZGUsIGl0J3MgdG9vIGVhc3kgdG8KKyMgZW50ZXIgbGluZXMgPjgwIGNvbHVtbnMhCisjCisjIEkndmUgYWxyZWFkeSBoYWQgc2V2ZXJhbCBjb21tZW50cy4uLgorIyBUaGUgT3Nib3JuZS0xIHdpdGggdGhlIDgwLWNvbCBvcHRpb24gaXMgY2FwYWJsZSBvZiBiZWluZworIyA1MiwgODAsIG9yIDEwNCBjaGFyYWN0ZXJzIHdpZGU7IGRlZmF1bHQgdG8gODAgZm9yIGNvbXBhdGliaWxpdHkKKyMgd2l0aCBtb3N0IHN5c3RlbXMuCisjCisjIFRoZSB0YWIgaXMgZGVzdHJ1Y3RpdmUgb24gdGhlIE96emllOyBtYWtlIHN1cmUgdG8gJ3N0dHkgLXRhYnMnLgorb3Nib3JuZS13fG9zYm9ybmUxLXd8b3Nib3JuZSBJIGluIDEwNC1jb2x1bW4gbW9kZSwKKwltc2dyLCB1bCwgeHQsCisJY29scyMxMDQsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVsPVxFVCwgaWNoMT1cRVEsIGlsMT1cRUUsIGluZD1eSiwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywgcm1zbz1cRSgsIHJtdWw9XEVtLCBzbXNvPVxFKSwgc211bD1cRWwsCisjIE9zYm9ybmUgSQlmcm9tIHB0c2ZhIXJoYyAoUm9iZXJ0IENvaGVuKSB2aWEgQlJMCitvc2Jvcm5lfG9zYm9ybmUxfG9zYm9ybmUgSSBpbiA4MC1jb2x1bW4gbW9kZSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLCB1bCwgeGhwLAorCU9UZEIjNCwgY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XlosIGN1YjE9XDAxMCQ8ND4sIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVyQ8NC8+LCBkbDE9XEVSLCBlbD1cRVQsIGlsMT1cRUUsIGlzMj1eWiwga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBybWlyPSwgcm1zbz1cRSksCisJcm11bD1cRW0sIHNtaXI9XEVRLCBzbXNvPVxFKCwgc211bD1cRWwsCisjCisjIE9zYm9ybmUgRXhlY3V0aXZlIGRlZmluaXRpb24gZnJvbSBCUkwKKyMgU2ltaWxhciB0byB0dmk5MjAKKyMgQWRkZWQgYnkgRGF2aWQgTWlsbGlnYW4gYW5kIFRvbSBTbWl0aCAoU01VKQorb3NleGVjfE9zYm9ybmUgZXhlY3V0aXZlLAorCU9UYnMsIGFtLAorCU9UdWcjMSwgY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCU9Ubmw9XkosIGJlbD1eRywgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULCBob21lPV5eLCBodHM9XEUxLCBpY2gxPVxFUSwgaWwxPVxFRSwKKwlpczI9XEVxXEVrXEVtXEVBXEV4MCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZjA9XkFAXHIsIGtmMT1eQUFcciwga2YyPV5BQlxyLCBrZjM9XkFDXHIsCisJa2Y0PV5BRFxyLCBrZjU9XkFFXHIsIGtmNj1eQUZcciwga2Y3PV5BR1xyLCBrZjg9XkFIXHIsCisJa2Y5PV5BSVxyLCBybWlyPSwgcm1zbz1cRWssIHJtdWw9XEVtLCBzbWlyPSwgc21zbz1cRWosCisJc211bD1cRWwsIHRiYz1cRTMsCisKKyMjIyMgQ29uc29sZSB0eXBlcyBmb3Igb2Jzb2xldGUgVU5JWCBjbG9uZXMKKyMKKyMgQ29oZXJlbnQsIE1pbml4LCBWZW5peCwgYW5kIHNldmVyYWwgbGVzc2VyLWtub3duIGtpbiB3ZXJlIE9TcyBmb3IgODA4OAorIyBtYWNoaW5lcyB0aGF0IHRyaWVkIHRvIGVtdWxhdGUgdGhlIFVOSVggbG9vayduJ2ZlZWwuICBDb2hlcmVudCBhbmQgVmVuaXgKKyMgd2VyZSBjb21tZXJjaWFsLCBNaW5peCBhbiBlZHVjYXRpb25hbCB0b29sIHNvbGQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGJvb2suCisjIE1lbW9yeS1zZWdtZW50YXRpb24gbGltaXRzIGFuZCBhIHN0cm9uZyB0ZW5kZW5jeSB0byBsb29rIGxpa2UgVjcgbG9uZyBhZnRlcgorIyBpdCB3YXMgb2Jzb2xldGUgbWFkZSBhbGwgdGhyZWUgcHJldHR5IGxhbWUuICBWZW5peCBjcm9ha2VkIGVhcmx5LiAgQ29oZXJlbnQKKyMgYW5kIE1pbml4IHdlcmUgcG9ydGVkIHRvIDMyLWJpdCBJbnRlbCBib3hlcywgb25seSB0byBiZSBydW4gb3ZlciBieSBhCisjIHN0ZWFtcm9sbGVyIG5hbWVkIGBMaW51eCcgKHdoaWNoLCB0byBiZSBmYWlyLCB0cmFjZXMgc29tZSBsaW5lYWdlIHRvIE1pbml4KS4KKyMgQ29oZXJlbnQncyB2ZW5kb3IsIHRoZSBNYXJrIFdpbGxpYW1zIENvbXBhbnksIHdlbnQgYmVsbHktdXAgaW4gMTk5NC4gIFRoZXJlCisjIGFyZSBhbHNvLCBJJ20gdG9sZCwgTWluaXggcG9ydHMgdGhhdCByYW4gb24gQW1pZ2EgYW5kIEF0YXJpIG1hY2hpbmVzIGFuZAorIyBldmVuIGFzIHNpbmdsZSBwcm9jZXNzZXMgdW5kZXIgU3VuT1MgYW5kIHRoZSBNYWNpbnRvc2ggT1MuCisjCisKKyMgVGhpcyBpcyB0aGUgZW50cnkgcHJvdmlkZWQgd2l0aCBtaW5peCAxLjcuNCwgd2l0aCBib2d1cyA6cmk6IHJlbW92ZWQuCittaW5peHxtaW5peCBjb25zb2xlICh2MS43KSwKKwlhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMEosIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVswSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczI9XEVbMG0sIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZjA9XEVbWSwga2YxPVxFW1YsIGtmMj1cRVtVLCBrZjM9XEVbVCwga2Y0PVxFW1MsCisJa2Y1PVxFW0csIGtob21lPVxFW0gsIGxmMD1FbmQsIGxmMT1QZ1VwLCBsZjI9UGdEbiwgbGYzPU51bSArLAorCWxmND1OdW0gLSwgbGY1PU51bSA1LCBuZWw9Xk1eSiwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1zbz1cRVswbSwgcm11bD1cRVswbSwgc2dyMD1cRVswbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMgQ29ycmVjdGVkIEphbiAxNCwgMTk5NyBieSBWaW5jZW50IEJyb21hbiA8YnJvbWFuQG5vc2MubWlsPgorbWluaXgtb2xkfG1pbml4IGNvbnNvbGUgKHYxLjUpLAorCXhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMEosIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVswSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2YwPVxFW1ksIGtmMT1cRVtWLCBrZjI9XEVbVSwga2YzPVxFW1QsIGtmND1cRVtTLCBrZjU9XEVbRywKKwlraG9tZT1cRVtILCBuZWw9Xk1eSiwgcmV2PVxFWzdtLCByaT1cRU0sIHJtc289XEVbMG0sCisJcm11bD1cRVswbSwgc2dyMD1cRVswbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMgVGhlIGxpbmV3cmFwIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGJ5IGVkaXRpbmcgL3Vzci9pbmNsdWRlL21pbml4L2NvbmZpZy5oCisjIGJlZm9yZSByZWNvbXBpbGluZyB0aGUgbWluaXggMS41IGtlcm5lbC4KK21pbml4LW9sZC1hbXxtaW5peCBjb25zb2xlIHdpdGggbGluZXdyYXAsCisJYW0sIHVzZT1taW5peC1vbGQsCisKK3BjLW1pbml4fG1pbml4IGNvbnNvbGUgb24gYW4gSW50ZWwgYm94LAorCXVzZT1rbG9uZSthY3MsIHVzZT1taW5peCwKKworIyBBY2NvcmRpbmcgdG8gdGhlIENvaGVyZW50IDIuMyBtYW51YWwsIHRoZSBQQyBjb25zb2xlIGlzIHNpbWlsYXIKKyMgdG8gYSB6MTkuIFRoZSBkaWZmZXJlbmNlcyBzZWVtIHRvIGJlICgxKSAyNSBsaW5lcywgKDIpIG5vIHN0YXR1cworIyBsaW5lLCAoMykgc3RhbmRvdXQgaXMgYnJva2VuLCAoNCkgaW5zL2RlbCBsaW5lIGlzIGJyb2tlbiwgKDUpCisjIGhhcyBibGlua2luZyBhbmQgYm9sZC4KK3BjLWNvaGVyZW50fHBjejE5fGNvaGVyZW50fElCTSBQQyBjb25zb2xlIHJ1bm5pbmcgQ29oZXJlbnQsCisJYW0sIG1pciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGNsZWFyPVxFRSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRU4sCisJZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVILCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBraG9tZT1cRUgsIHJpPVxFSSwgcm1pcj1cRU8sCisJcm1zbz1cRXEsIHNncjA9XEVxLCBzbWlyPVxFQCwgc21zbz1cRXAsCisKKyMgQWNjb3JkaW5nIHRvIHRoZSBWZW5peCAxLjEgbWFudWFsLCB0aGUgUEMgY29uc29sZSBpcyBzaW1pbGFyCisjIHRvIGEgREVDIHZ0NTIuICBEaWZmZXJlbmNlcyBzZWVtIHRvIGJlICgxKSBhcnJvdyBrZXlzIHNlbmQKKyMgZGlmZmVyZW50IHN0cmluZ3MsICgyKSBlbmhhbmNlZCBzdGFuZG91dCwgKDMpIGFkZGVkIGluc2VydC9kZWxldGUgbGluZS4KKyMgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgaXQgZG9lc24ndCBoYXZlIGF1dG9tYXRpYyBtYXJnaW5zLgorIyBUaGVyZSBhcmUgb3RoZXIga2V5cyAoZjEtZjEwLCBrcHAsIGtucCwga2NidCwga2ljaDEsIGtkY2gxKSBidXQgdGhleQorIyBub3QgZGVzY3JpYmVkIGhlcmUgYmVjYXVzZSB0aGlzIGRlcml2ZXMgZnJvbSBhbiBvbGQgdGVybWNhcCBlbnRyeS4KK3BjLXZlbml4fHZlbml4fElCTSBQQyBjb25zb2xlIHJ1bm5pbmcgVmVuaXgsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGwxPVxFTSwKKwllZD1cRUosIGVsPVxFSywgaHQ9XkksIGlsMT1cRUwsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUssCisJa2N1ZDE9XEVQLCBrY3VmMT1cRU0sIGtjdXUxPVxFSCwga2hvbWU9XEVHLCByaT1cRUksCisKKyMjIyMgTWlzY2VsbGFuZW91cyBtaWNyb2NvbXB1dGVyIGNvbnNvbGVzCisjCisjIElmIHlvdSBrbm93IGFueXRoaW5nIG1vcmUgYWJvdXQgYW55IG9mIHRoZXNlLCBwbGVhc2UgdGVsbCBtZS4KKyMKKworIyBUaGUgTUFJIEJhc2ljIEZvdXIgY29tcHV0ZXIgd2FzIG9ic29sZXRlIGF0IHRoZSBlbmQgb2YgdGhlIDE5ODBzLgorIyBJdCBtYXkgYmUgdXNlZCBhcyBhIHRlcm1pbmFsIGJ5IHB1dHRpbmcgaXQgaW4gImxpbmUiIG1vZGUgYXMgc2VlbiBvbgorIyBvbmUgb2YgdGhlIHN0YXR1cyBsaW5lcy4KKyMgSW5pdGlhbGl6YXRpb24gaXMgc2ltaWxhciB0byBDSVQ4MC4gPGlzMj4gd2lsbCBzZXQgQU5TSSBtb2RlIGZvciB5b3UuCisjIEhhcmR3YXJlIHRhYnMgc2V0IGJ5IDxpZj4gYXQgOC1zcGFjaW5nLiAgQXV0byBsaW5lIHdyYXAgY2F1c2VzIGdsaXRjaGVzIHNvCisjIHdyYXAgbW9kZSBpcyByZXNldCBieSA8Y3Z2aXM+LiAgVXNpbmcgPGluZD49XEVbUyBjYXVzZWQgZXJyb3JzIHNvIEkKKyMgdXNlZCBcRUQgaW5zdGVhZC4KKyMgRnJvbTogYmYzNDdAbGFmbi5vcmcgKERhdmlkIExhd3llciksIDI4IEp1biAxOTk3CittYWl8YmFzaWM0fE1BSSBCYXNpYyBGb3VyIGluIGFuc2kgbW9kZSwKKwlhbSwgZGEsIGRiLCBtaXIsIG1zZ3IsCisJY29scyM4MiwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9Xl1eXywgY25vcm09XEVbPzdoLAorCWNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlgsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPV5aLCBjdnZpcz1cRVs/N2wsIGRjaDE9XEVbMVAsCisJZGwxPVxFW00sIGVkPV5fLCBlbD1eXiwgaG9tZT1eXSwgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRT5cRVs/MWhcRVs/N2hcRVs/NWxcMDE3XEUoQlxFW21cRVsyMGxcRVsxOzI0clxFWzI0OzFILAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFT1QsIGtmNj1cRU9VLAorCWtmNz1cRU9WLCBrZjg9XEVPVywgbmVsPV5NXEVELCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVbVCwKKwlybWlyPVxFWzRsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2M9XEU3LCBzZ3IwPVxFW20sCisJc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMgYmFzaXMgZnJvbSBQZXRlciBIYXJyaXNvbiwgQ29tcHV0ZXIgR3JhcGhpY3MgTGFiLCBTYW4gRnJhbmNpc2NvCisjICAgdWNidmF4IXVjc2ZtaXMhaGFycmlzb24gLi4udXVjcCAvIHVjYnZheCF1Y3NmbWlzIWhhcnJpc29uQEJFUktFTEVZIC4uLkFSUEEKKyMKKyMgT24gU2F0LCA3IEF1ZyAxOTk5LCBUb3JzdGVuIEplcnplbWJlY2sgPHRvamVAbmlnaHRpbmdhbGUubXMuc3ViLm9yZz4gd3JvdGU6CisjIFRoZSBCYXNpcyAxMDggd2FzIGEgQXBwbGUgSUkgY2xvbmUsIG1hbnVmYWN0dXJlZCBieSB0aGUgIkJhc2lzCisjIE1pa3JvY29tcHV0ZXIgR21iSCIgaW4gTXVuc3RlciwgR2VybWFueSAodGhlIGNvbXBhbnkgc3RpbGwgZXhpc3RzIHRvZGF5LAorIyBhYm91dCAxLDUga20gZnJvbSB3aGVyZSBJIGxpdmUsIGJ1dCBkb2Vzbid0IGJ1aWxkIG93biBjb21wdXRlcnMgYW55CisjIG1vcmUpLiBBIEJhc2lzIDEwOCBmZWF0dXJlZCBhIHJlYWxseSBoZWF2eSAoY2FzdCBhbHVtaW5pdW0/KSBjYXNlLCB3YXMKKyMgZXF1aXBwZWQgd2l0aCBvbmUgb3IgdHdvIDUuMjUiIGRpc2sgZHJpdmVzLCBoYWQgYSBtb25vY2hyb21lIGFuZCBjb2xvdXIKKyMgdmlkZW8gb3V0cHV0IGZvciBhIFRWIHNldCBvciBhIGRlZGljYXRlZCBtb25pdG9yIGFuZCBzZXZlcmFsIHNsb3RzIGZvcgorIyBBcHBsZSBJSSBjYXJkcy4gQmFzaXMgMTA4IHdlcmUgcXVpdGUgcG9wdWxhciBhdCBnZXJtYW4gc2Nob29scyBiZWZvcmUKKyMgdGhlIGFkdmVudCBvZiB0aGUgSUJNIFBDLiBUaGV5IHJ1biwgZm9yIGV4YW1wbGUsIHRoZSBVQ1NEIFBhc2NhbAorIyBkZXZlbG9wbWVudCBzeXN0ZW0gKHdoaWNoIEkgdXNlZCBldmVuIGluIDE5OTMgdG8gcHJvZ3JhbSB0aGUgc3RlZXJpbmcKKyMgYW5kIGRhdGEgcmVjb3JkaW5nIGZvciBvdXIgc2Nob29sJ3MgZXhwZXJpbWVudGFsIHNvbGFyIHBhbmVsIDopLCBBcHBsZSBET1MKKyMgb3IgQ1AvTS4KKyMgKGJhc2lzOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkteUF5SXkxeTCA6bmw9NTAwMCpeSjoiIC0tIGVzcikKK2Jhc2lzfEJBU0lTMTA4IGNvbXB1dGVyIHdpdGggdGVybWluYWwgdHJhbnNsYXRpb24gdGFibGUgYWN0aXZlLAorCWNsZWFyPVxFKiQ8MzAwLz4sIGN1ZDE9XG4kPDUwMDAvPiwgZWQ9XEVZLCBlbD1cRVQsIGticz1eSCwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywgcm1zbz1cRSksIHNncjA9XEUpLAorCXNtc289XEUoLCB1c2U9YWRtM2EsCisjIGx1bmEncyBCTUMgdGVybWluYWwgZW11bGF0b3IKK2x1bmF8bHVuYTY4a3xMVU5BNjhLIEJpdG1hcCBjb25zb2xlLAorCWNvbHMjODgsIGxpbmVzIzQ2LCB1c2U9YW5zaS1taW5pLAorbWVnYXRla3xwZWdhc3VzIHdvcmtzdGF0aW9uIHRlcm1pbmFsIGVtdWxhdG9yLAorCWFtLCBvcywKKwljb2xzIzgzLCBsaW5lcyM2MCwKKyMgVGhlIFhlcm94IDgyMCB3YXMgYSBaODAgbWljcm8gd2l0aCBhIHNuYXp6eSBYRVJPWCBQQVJDLWRlcml2ZWQKKyMgaW50ZXJmYWNlIChwcmUtTWFjaW50b3NoIGJ5IHNldmVyYWwgeWVhcnMpIHRoYXQgd2VudCBub3doZXJlLgoreGVyb3g4MjB8eDgyMHxYZXJveCA4MjAsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj0xXlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGVkPV5RLCBlbD1eWCwKKwlob21lPV5eLCBpbmQ9XkosCisKKyMjIyMgVmlkZW90ZXggYW5kIHRlbGV0ZXh0CisjCisKKyMgXEVcOjF9CXN3aXRjaCB0byB0ZSdsZSdpbmZvcm1hdGlxdWUgbW9kZSAoYXNjaWkgdGVybWluYWwvSVNPIDY0MjkpCisjIFxFWz8zbAk4MCBjb2x1bW5zCisjIFxFWz80bAlzY3JvbGxpbmcgb24KKyMgXEVbMTJoCWxvY2FsIGVjaG8gb2ZmCisjIFxFYwkJcmVzZXQ6IEcwIFUuUy4gY2hhcnNldCAodG8gZ2V0ICMsQCx7LH0sLi4uKSwgODAgY29scywgY2xlYXIgc2NyZWVuCisjIFxFKTAJCUcxIERFQyBzZXQgKGxpbmUgZ3JhcGhpY3MpCisjCisjIEZyb206IElnb3IgVGFtaXRlZ2FtYSA8aWdvckBwcHAxNDkzLWZ0LnRlYXNlci5mcj4sIDE4IEphbiAxOTk3CittMi1uYW18bWluaXRlbHxtaW5pdGVsLTJ8bWluaXRlbC0yLW5hbXxGcmFuY2UgVGVsZWNvbSBNaW5pdGVsIDIgbW9kZSB0ZSdsZSdpbmZvcm1hdGlxdWUsCisJT1RicywgZXNsb2ssIGhzLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjNzIsIHhtYyMwLAorCWFjc2M9YWFmZmdnampra2xsbW1ubm9vcXFzc3R0dXV2dnd3eHgsIGJlbD1eRywKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPDFoLCBjbGVhcj1cRVtIXEVbSiwKKwljbm9ybT1cRVs8MWwsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XkcsIGZzbD1eSiwKKwlob21lPVxFW0gsIGh0PV5JLCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGlwPSQ8Ny8+LAorCWlzMT1cRVw6MX1cRWNcRVs/NGxcRVsxMmgsIGlzMj1cRWNcRVsxMmhcRSkwLAorCWlzMz1cRVs/M2wga2JzPVwwMTAsIGtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2RsMT1cRVtNLCBrZjA9XEVPcCwKKwlrZjE9XEVPcSwga2YxMD1cRU9wLCBrZjI9XEVPciwga2YzPVxFT3MsIGtmND1cRU90LCBrZjU9XEVPdSwKKwlrZjY9XEVPdiwga2Y3PVxFT3csIGtmOD1cRU94LCBrZjk9XEVPeSwga2hvbWU9XEVbSCwKKwlraWNoMT1cRVs0aCwga2lsMT1cRVs0bCwga25wPVxFT24sIGtwcD1cRU9SLCBsbD1cRVsyNDs4MEgsCisJbWMwPVxFW2ksIG5lbD1eTV5KLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWlyPVxFWzRsLCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMxPVxFY1xFWz80bFxFWzEyaCwgcnMyPVxFY1xFKTAsIHNjPVxFNywgc2dyMD1cRVttLAorCXNtYWNzPV5OLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0c2w9Xl9AQSwKKwl1Nj1cRVslaSVkOyVkUiwgdTc9XEVbNm4sCisKKyMgRnJvbTogQWxleGFuZHJlIE1vbnRhcm9uIDxjYW5hbEBteWdhbGUub3JnPiwgMTggSnVuIDE5OTgKKyMKK21pbml0ZWwxfG1pbml0ZWwgMSwKKwlhbSwgYncsIGVzbG9rLCBocywgaHosIG1zZ3IsCisJY29sb3JzIzgsIGNvbHMjNDAsIGxpbmVzIzI0LCBwYWlycyM4LAorCWFjc2M9Ky5cLFwsLi9mMGcxLCBiZWw9XkcsIGJsaW5rPVxFSCwgY2l2aXM9XlQsIGNsZWFyPV5MLAorCWNub3JtPV5RLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eSSwKKwljdXA9XDAzNyVwMSV7NjV9JSslYyVwMiV7NjV9JSslYywgY3V1MT1eSywgZWw9XlgsCisJZW5hY3M9XlksIGZzbD1eSiwgaG9tZT1eXiwgaW5kPV5KLAorCWlzMj1cRTtgWlFcRVw6aUNcRVw6aUVcMDIxLCBuZWw9Xk1eSiwgb3A9XEVHLAorCXJlcD0lcDElY1wwMjIlcDIlezYzfSUrJWMsIHJldj1cRV0sIHJpPV5LLCBybXNvPVxFXFwsCisJc2V0Zj1cRSU/JXAxJXsxfSU9JXREJWUlcDElezN9JT0ldEYlZSVwMSV7NH0lPSV0QSVlJXAxJXs2fSU9JXRDJWUlcDElezY0fSUrJWMlOywKKwlzZ3I9JT8lcDEldFxFXSU7JT8lcDMldFxFXSU7JT8lcDQldFxFSCU7LAorCXNncjA9XEVJXEVcXCwgc21zbz1cRV0sIHRzbD1cMDM3QCVwMSV7NjV9JSslYywKKyMgaXMyPUZuY3QgVEUsIEZuY3QgTVIsIEZuY3QgQ00gZXQgcG91ciBmaW5pcjogY3Vyc2V1ciBPTi4KK21pbml0ZWwxYnxtaW5pdGVsIDEtYmlzdGFuZGFyZCAoaW4gNDBjb2xzIG1vZGUpLAorCW1pciwKKwljdWI9XEVbJXAxJWRELCBjdWQ9XEVbJXAxJWRCLCBjdWY9XEVbJXAxJWRDLAorCWN1dT1cRVslcDElZEEsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbDE9XEVbMUssIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsCisJaXMxPVxFO2lZQVxFO2pZQywga2Nscj1cRVsySiwga2N0YWI9XkksIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2RsMT1cRVtNLAorCWtlbD1eWCwga2hvbWU9XEVbSCwga2ljaDE9XEVbNGgsIGtpbDE9XEVbTCwgcm1pcj1cRVs0bCwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFO2lZQVxFO2pZQywgdXNlPW1pbml0ZWwxLAorIyA8cm1reD4gcG9zYWl0IGRlcyBwcm9ibGVtZXMgKGxvZ291dCBlbiBzb3J0YW50IGRlIHZpKS4KK21pbml0ZWwxYi04MHxtaW5pdGVsIDEtYmlzdGFuZGFyZCAoc3RhbmRhcmQgdGVsZWluZm9ybWF0aXF1ZSksCisJYW1ALCBid0AsIGh6QCwKKwljb2xvcnNALCBjb2xzIzgwLCBpdCM4LCBwYWlyc0AsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVwwMzdAQVwwMjRcbiwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVwwMzdAQVwwMjFcbiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlbD1cRVtLLCBob21lPVxFW0gsCisJaHQ9XkksIGluZD1cRUQsIGlzMUAsIGlzMkAsIGtlbnQ9XEVPTSwga2YwPVxFT3AsIGtmMT1cRU9xLAorCWtmMj1cRU9yLCBrZjM9XEVPcywga2Y0PVxFT3QsIGtmNT1cRU91LCBrZjY9XEVPdiwga2Y3PVxFT3csCisJa2Y4PVxFT3gsIGtmOT1cRU95LCBuZWw9XEVFLCBvcEAsIHJjPVxFOCwgcmVwQCwgcmV2PVxFWzdtLAorCXJpPVxFTSwgcm1reEAsIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgc2M9XEU3LCBzZXRmQCwKKwlzZ3I9XEVbJT8lcDEldDc7JTslPyVwMiV0NDslOyU/JXAzJXQ3OyU7JT8lcDQldDU7JTslPyVwNiV0MTslO20sCisJc2dyMD1cRVttLCBzbWt4QCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdXNlPW1pbml0ZWwxYiwKKworIyMjIyMjIyMgT0JTT0xFVEUgVkRUIFRZUEVTCisjCisjIFRoZXNlIHRlcm1pbmFscyBhcmUgKmxvbmcqIGRlYWQgLS0gdGhlc2UgZW50cmllcyBhcmUgcmV0YWluZWQgZm9yCisjIGhpc3RvcmljYWwgaW50ZXJlc3Qgb25seS4KKworIyMjIyBBbXRlayBCdXNpbmVzcyBNYWNoaW5lcworIworCisjIChhYm04MDogZWFybHkgdmVyc2lvbnMgb2YgdGhpcyBlbnRyeSBhcHBhcmVudGx5IGhhZCAiOnNlPVxFXl86c289XEVeWSIsCisjIGJ1dCB0aGVzZSBjYXBzIHdlcmUgY29tbWVudGVkIG91dCBpbiA4LjM7IGFsc28sIHJlbW92ZWQgb3ZlcnJpZGRlbgorIyAiOmRvPV5KOiIgLS0gZXNyKQorYWJtODB8YW10ZWsgYnVzaW5lc3MgbWFjaGluZXMgODAsCisJT1RicywgYW0sIGJ3LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNidD1eVCwgY2xlYXI9XEVeXCwgY3ViMT1eSCwgY3VkMT1cRV5LLCBjdWYxPV5QLAorCWN1cD1cRVwwMjElcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XEVeTCwKKwlkbDE9XEVeUywgZWQ9XEVeWCwgZWw9XEVeTywgaG9tZT1cRV5SLCBpbDE9XEVeWiwKKworIyMjIyBCZWxsIExhYnMgYmxpdCB0ZXJtaW5hbHMKKyMKKyMgVGhlc2Ugd2VyZSBBVCZUJ3Mgb2ZmaWNpYWwgZW50cmllcy4gIFRoZSA1NjIwIEZBUSBtYWludGFpbmVkIGJ5CisjIERhdmlkIEJyZW5lbWFuIDxkYXZlYkBkZ3RsLmNvbT4gaGFzIHRoaXMgdG8gc2F5OgorIworIyAgQWN0dWFsbHksIGluIHRoZSBiZWdpbm5pbmcgd2FzIHRoZSBKZXJxLCBhbmQgdGhlIEplcnEgd2FzIHdoaXRlIHdpdGggYQorIyAgZ3JlZW4gZmFjZSwgYW5kIExvY2FudGhpIGFuZCBQaWtlIGxvb2tlZCB1cG9uIHRoZSBKZXJxIGFuZCBzYWlkIHRoZSBKZXJxCisjICB3YXMgZ29vZC4gIEJ1dCBsbywgdXBvbiB0aGUgaG9yaXpvbiBsb29tZWQgYSBtaWdodHkgbWFuYWdlbWVudC10eXBlIHBlcnNvbgorIyAgKGtub3duIG5vdyBvbmx5IGJ5IHRoZSBpbml0aWFscyBWUCkgd2hvIHNhaWQsIHRoZSBtaWdodHkgSmVycSBtdXN0IHN0YXkKKyMgIGFsb25lLCBhbmQgY291bGQgbm90IGdvIGZvcnRoIGludG8gdGhlIHdvcmxkLiBTbyBMb2NhbnRoaSBhbmQgUGlrZSBwdXQgdGhlCisjICBKZXJxIHRvIHNsZWVwLCBjbG9uZWQgaXRzIHBhcnRzLCBhbmQgdGhlIEJsaXQgd2FzIGJyb3VnaHQgZm9ydGggdW50byB0aGUKKyMgIHdvcmxkLiBBbmQgdGhlIEplcnEgbGl2ZWQgdGhlIHJlc3Qgb2YgaXRzIGRheXMgaW4gcmVzZWFyY2gsIGJ1dCBuZXZlcgorIyAgc3RyYXllZCBmcm9tIHRob3NlIHBhdGhzLgorIworIyAgSW4gYWxsIHNlcmlvdXNuZXNzLCB0aGUgQmxpdCB3YXMgb3JpZ2luYWxseSBrbm93biBhcyB0aGUgSmVycSwgYnV0IHdoZW4KKyMgIGl0IHN0YXJ0ZWQgdG8gYmUgc2hvd24gb3V0c2lkZSBvZiB0aGUgaGFsbHMgb2YgdGhlIEJlbGwgTGFicyBSZXNlYXJjaAorIyAgb3JnYW5pemF0aW9uLCB0aGUgbWFuYWdlbWVudCBwb3dlcnMgdGhhdCBiZSBkZWNpZGVkIHRoYXQgdGhlIG5hbWUgY291bGQKKyMgIG5vdCByZW1haW4uIFNvIGl0IHdhcyByZW5hbWVkIHRvIGJlIEJsaXQuIFRoaXMgd2FzIGluIGxhdGUgMTk4MS4KKyMKKyMgKFRoZSBBVCZUIDU2MjAgd2FzIHRoZSBjb21tZXJjaWFsaXplZCBCbGl0LiAgSXRzIHN1Y2Nlc3NvcnMgd2VyZSB0aGUgNjMwLAorIyA3MzAsIGFuZCA3MzArLikKKyMKKworYmxpdHxqZXJxfGJsaXQgcnVubmluZyB0ZWxldHlwZSByb20sCisJYW0sIGVvLCB1bCwgeG9uLAorCWNvbHMjODcsIGl0IzgsIGxpbmVzIzcyLAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPVxFRCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1cRUEsCisJZGNoPVxFZSVwMSV7MzJ9JSslYywgZGNoMT1cRWUhLCBkbD1cRUUlcDElezMyfSUrJWMsCisJZGwxPVxFRSEsIGVsPVxFSywgaHQ9XkksIGljaD1cRWYlcDElezMyfSUrJWMsIGljaDE9XEVmISwKKwlpbD1cRUYlcDElezMyfSUrJWMsIGlsMT1cRUYhLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMT1cRXgsIGtmMj1cRXksIGtmMz1cRXosCisKKyMgKGNiYmxpdDogaGVyZSdzIGEgQlNEIHRlcm1jYXAgdGhhdCBzYXlzIDxjdWQxPVxFRz4gLS0gZXNyKQorY2JibGl0fGZpeHRlcm18YmxpdCBydW5uaW5nIGNvbHVtYnVzIGNvZGUsCisJY29scyM4OCwKKwllZD1cRUosIGZsYXNoPVxFXkcsIGljaDFALCBtYzQ9XlQsIG1jNT1eUiwgbWM1cD1cRVAlcDElMDNkLAorCXJtaXI9XEVSLCBybXNvPVxFViEsIHJtdWw9XEVWIiwgc21pcj1cRVEsIHNtc289XEVVISwKKwlzbXVsPVxFVSIsIHVzZT1ibGl0LAorCitvYmxpdHxvamVycXxmaXJzdCB2ZXJzaW9uIG9mIGJsaXQgcm9tLAorCWFtLCBkYSwgZGIsIGVvLCBtaXIsIHVsLCB4b24sCisJY29scyM4OCwgaXQjOCwgbGluZXMjNzIsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XEVELCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRU8sCisJZGw9XEVlJXAxJXszMn0lKyVjLCBkbDE9XEVFLCBlZD1cRUosIGVsPVxFSywgZmxhc2g9XEVeRywKKwlodD1eSSwgaWw9XEVmJXAxJXszMn0lKyVjLCBpbDE9XEVGLCBpbmQ9XkosIGticz1eSCwgcm1pcj1cRVIsCisJc21pcj1cRVEsCisKKyMjIyMgQm9sdCwgQmVyYW5layAmIE5ld21hbiAoYmJuKQorIworIyBUaGUgQml0R3JhcGggd2FzIGEgcHJvZHVjdCBvZiB0aGUgbm93LWRlZnVuY3QgQkJOIENvbXB1dGVyIENvcnBvcmF0aW9uLgorIyBUaGUgcGFyZW50IGNvbXBhbnksIGJlc3Qga25vd24gYXMgdGhlIGFyY2hpdGVjdHMgb2YgdGhlIEludGVybmV0LCBpcworIyBzdGlsbCBhcm91bmQuCisjCisjIEplZmYgRGVsUGFwYSA8ZHBAd29ybGQuc3RkLmNvbT4gd3JpdGVzOgorIyBUaGUgYml0Z3JhcGggd2FzIGEgbGFyZ2Ugd2hpdGUgYm94IHRoYXQgY29udGFpbmVkIGEgbW9ub2Nocm9tZSBiaXRtYXAKKyMgZGlzcGxheSwgYW5kIGEgNjgwMDAgdG8gcnVuIGl0LiAgWW91IGNvdWxkIGRvd25sb2FkIGNvZGUgYW5kIHJ1biBpdCBvbgorIyB0aGUgY3B1LCBpdCBoYWQgMTI4a2IgKEkgdGhpbmspIG9mIG1lbW9yeS4gIEkgdXNlZCBvbmUgaW4gdGhlIGxhdGUKKyMgNzAncywgc3VyZSBiZWF0IGEgdnQxMDAuICBJdCBoYWQgb25lIHN0cmFuZ2UgZmVhdHVyZSB0aG8gLS0gaXQgdXNlZAorIyB0aGUgY3B1IHRvIGJpdGJsdCBwaXhlbHMgdG8gc2Nyb2xsLCBpdCB0b29rIGxvbmdlciB0aGFuIHRoZSByZWZyZXNoCisjIHJhdGUsIGFuZCBsb29rZWQgbGlrZSBhIHJ1YmJlciBzaGVldCBzdHJldGNoaW5nLCB0aGVuIHNuYXBwaW5nCisjIHVwd2FyZHMuICBJdCBoYWQgZXZlcnl0aGluZyB0aGUgZWFybHkgbWFjIGhhZCwgZXhjZXB0IGEgZmxvcHB5IGRyaXZlIGEKKyMgc21hbGwgc2NyZWVuIChpdCBoYWQgYSAxNyIgY3Jpc3AgYmVhdXR5KSBhbmQgYSByZWFsIE9TLiBUaGV5IChCb2x0CisjIEJlcmFuZWsgYW5kIE5ldW1hbikgc29sZCBhdCBtb3N0IGEgZmV3IGh1bmRyZWQgb2YgdGhlbSB0byB0aGUgcmVhbAorIyB3b3JsZC4gIERPRCBtYXkgaGF2ZSBib3VnaHQgbW9yZS4uLgorIworCisjIEVudHJpZXMgZm9yIHRoZSBCaXRHcmFwaCB0ZXJtaW5hbHMuICBUaGUgcHJvYmxlbQorIyB3aXRoIHNjcm9sbGluZyBpbiB2aSBjYW4gb25seSBiZSBmaXhlZCBieSBnZXR0aW5nIEJCTiB0byBwdXQKKyMgc21hcnRlciBzY3JvbGwgbG9naWMgaW4gdGhlIHRlcm1pbmFsIG9yIGNoYW5naW5nIHZpIG9yIHBhZGRpbmcKKyMgc2Nyb2xscyB3aXRoIGFib3V0IDUwMCBtcyBkZWxheS4KKyMKKyMgSSBhbHdheXMgdGhvdWdodCB0aGUgcHJvYmxlbSB3YXMgcmVsYXRlZCB0byB0aGUgdGVybWluYWwKKyMgY291bnRpbmcgbmV3bGluZXMgaW4gaXRzIGlucHV0IGJ1ZmZlciBiZWZvcmUgc2Nyb2xsaW5nIGFuZAorIyB0aGVuIG1vdmluZyB0aGUgc2NyZWVuIHRoYXQgbXVjaC4gVGhlbiB2aSBjb21lcyBhbG9uZyBhbmQKKyMgcGFpbnRzIGxpbmVzIGluIG9uIHRoZSBib3R0b20gbGluZSBvZiB0aGUgc2NyZWVuLCBzbyB5b3UgZ2V0CisjIHRoaXMgYmlnIHdoaXRlIGdhcC4KKworYml0Z3JhcGh8YmcyLjBudnxiZzMuMTBudnxiYm4gYml0Z3JhcGggMi4wIG9yIGxhdGVyIChub3JtYWwgdmlkZW8pLAorCWZsYXNoPVxFWz81aCQ8MjAwLz5cRVs/NWwsIGlzMj1cRT5cRVs/NWxcRVs/N2gsCisJdXNlPWJnMi4wLAorYmcyLjBydnxiZzMuMTBydnxiYm4gYml0Z3JhcGggMi4wIChyZXZlcnNlIHZpZGVvKSwKKwlmbGFzaD1cRVs/NWwkPDIwMC8+XEVbPzVoLCBpczI9XEU+XEVbPzVoXEVbPzdoLAorCXVzZT1iZzIuMCwKK2JnMi4wfGJnMy4xMHxiYm4gYml0Z3JhcGggMi4wIG9yIGxhdGVyIChubyBpbml0KSwKKwlPVGJzLCB4ZW5sLAorCWNvbHMjODUsIGxpbmVzIzY0LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFW0okPDE1MD4sIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPSVpXEVbJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRsMT1cRVtNJDwyKj4sCisJZWQ9XEVbSiQ8MTUwPiwgZWw9XEVbSyQ8Mj4sIGh0PV5JLCBpbDE9XEVbTCQ8Mio+LAorCWluZD1cbiQ8MjgwPiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgbGYxPVBGMSwKKwlsZjI9UEYyLCBsZjM9UEYzLCBsZjQ9UEY0LCByYz1cRTgsIHJta3g9XEU+LCBybXNvPVxFW20sIHNjPVxFNywKKwlzZ3IwPVxFW20sIHNta3g9XEU9LCBzbXNvPVxFWzdtLAorCitiZzEuMjVydnxiYm4gYml0Z3JhcGggMS4yNSAocmV2ZXJzZSB2aWRlbyksCisJZmxhc2g9XEVbPzVsJDwyMDAvPlxFWz81aCwgaXMyPVxFPlxFWz81aFxFWz83aCwKKwl1c2U9YmcxLjI1LAorYmcxLjI1bnZ8YmJuIGJpdGdyYXBoIDEuMjUgKG5vcm1hbCB2aWRlbyksCisJZmxhc2g9XEVbPzVoJDwyMDAvPlxFWz81bCwgaXMyPVxFPlxFWz81bFxFWz83aCwKKwl1c2U9YmcxLjI1LAorIyAoYmcxLjI1OiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2JnMS4yNXxiYm4gYml0Z3JhcGggMS4yNSwKKwljb2xzIzg1LCBsaW5lcyM2NCwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVtKJDwxNTA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPSVpXEVbJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsCisJZGwxPVxFW00kPDIqPiwgZWQ9XEVbSiQ8MTUwPiwgZWw9XEVbSyQ8Mj4sIGh0PV5JLAorCWlsMT1cRVtMJDwyKj4sIGluZD1cbiQ8MjgwPiwga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMT1cRVAsIGtmMj1cRVEsIGtmMz1cRVIsIGtmND1cRVMsCisJbGYxPVBGMSwgbGYyPVBGMiwgbGYzPVBGMywgbGY0PVBGNCwgbGw9XEVbNjQ7MUgsIHJtYW09XEVbPzdsLAorCXJta3g9XEU+LCBybXNvPVxFW20sIHNncjA9XEVbbSwgc21hbT1cRVs/N2gsIHNta3g9XEU9LAorCXNtc289XEVbN20sCisKKyMjIyMgQnVsbCAoYnEsIGRrdSwgdmlwKQorIworIyAoQWRhcHRlZCBmb3IgdGVybWluZm87IEFJWCBleHRlbnNpb24gY2FwYWJpbGl0aWVzIHRyYW5zbGF0ZWQgLS0gZXNyKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisjIEJVTEwgUVVFU1RBUiAyMTAgYFNEUCcgdGVybWluYWxzIGVtdWxhdGlvbiAjCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisjCisjIERlc2NyaXB0aW9uIHdyaXR0ZW4gYnkgUi5LLlNhdW5kZXJzIChCdWxsIFRyYW5zYWMpCisjCisjIE1vZGlmaWNhdGlvbnMgd3JpdHRlbiBieSBGLiBHaXJhcmQgKEJ1bGwgTVRTKQorIwkJMTktMDUtODcgVjAyLjAwLjAxCisjCQkxNy0xMi04NyBWMDIuMDAuMDIKKyMJCTE1LTA5LTg5IFYwMi4wMC4wNQorIworIwlUeXBpY2FsIHRlY2huaWNhbCBzZWxlY3Rpb25zIEYxIChtb2RlcyBTRFAvUk9MTCk6CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgfCAgIDAxICAgMDIgICAwMyAgIDA0ICAgMDUgICAwNiAgIDA3ICAgMDggICAwOSAgIDEwICAgfAorIyB8ICAxMDEwIDAwMTEgMTAxMCAwMTEwIDAxMTAgMDAwMSAwMTAwIDAwMDAgMDAwMCAwMDAwICB8CisjIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgfCAgIDExICAgMTIgICAxMyAgIDE0ICAgMTUgICAxNiAgIDE3ICAgMTggICAxOSAgIDIwICAgfAorIyB8ICAwMDAwIDAxMTAgMTAwPyAwMDAwIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMCAwMDAxICB8CisjIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgfCAgIDIxICAgMjIgICAyMyAgIDI0ICAgMjUgICAyNiAgIDI3ICAgMjggICAyOSAgIDMwICAgfAorIyB8ICAwMDExIDAwMDAgMDAwMSAxMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwICB8CisjIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgfCAgIDMxICAgMzIgICAzMyAgIDM0ICAgMzUgICAzNiAgIDM3ICAgMzggICAzOSAgIDQwICAgfAorIyB8ICAxMDEwIDAwMTEgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwICB8CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJVHlwaWNhbCBmaXJtd2FyZSBpZGVudGlmaWNhdGlvbiBGNSAiZXRhdCA2IjoKKyMgIFAyODcuMDIuMDRiCShBWkVSVFkpCisjICBQMjk3LjExLjA0CSgyNC1waW46IDI3MzIpCW9yIFA3OTguMTEuMDQJKDI4LXBpbjogMjc2NCkKKyMgIFAyOTguMDMuMDMJKG1vbm9jaHJvbWUpCW9yIFAzNzQuMDMuMDIJKGNvbG91cikKKyMKKyMJU00gU0RQIG1vZGUgKFZJUCBjb21tYW5kKToJXltbPz1oCisjCVJJUyAoZXJhc2VzIHNjcmVlbik6CQleW2MKKyMJRE1JIGRpc2FibGUga2V5Ym9hcmQ6CQleW2AKKyMJU00gZG91YmxlIHJlbmRpdGlvbiBtb2RlOgleW1s/PmgKKyMJUk0gc29saWNpdGVkIHN0YXR1cyBtb2RlOgleW1s1bAorIwlSTSBjaGFyYWN0ZXIgbW9kZToJCV5bWz5sCisjCVJNIGVjaG9wbGV4IG1vZGU6CQleW1sxMmwKKyMJUk0gY29sdW1uIHRhYiBtb2RlOgkJXltbMThsCisjCVJNIGZvcmJpZCBTUzIga2V5Ym9hcmQgbW9kZToJXltbPzxsCisjCVNNIHNjcm9sbCBtb2RlOgkJCV5bWz1oCisjCUZDRiBlbmFibGUgWE9OL1hPRkY6CQleW1Axc15bXAorIwlNVEwgc2VsZWN0IGVuZCBtc2cgY2hhcmFjdGVyOgleW1teV3AKKyMJRU1JIGVuYWJsZSBrZXlib2FyZDoJCV5bYgorIwlSSVMgcmV0b3VyIGV0YXQgaW5pdGlhbDoJXltjCisjCWVuYWJsZSBGQyBrZXlwYWQ6CQleW1s/PGgsCisjCU1QVyBtYXAgc3RhdHVzIGxpbmUgd2luZG93OgleW1BZOTk6OTheW1wKKyMJU0NQIHNlbGVjdCBzdGF0dXMgbGluZToJCV5bWzA7OTh2CisjCUVEIGVyYXNlIGVudGlyZSBwYXJ0aXRpb246CV5bWzJKCisjCVNDUCBzZWxlY3QgbWFpbiBwYXJ0aXRpb246CV5bW3YKKyMJU00gY2hhcmFjdGVyIGluc2VydGlvbiBtb2RlOgleW1s0aAorIwlSTSBjaGFyYWN0ZXIgcmVwbGFjZW1lbnQgbW9kZToJXltbNGwKKyMJQ09PIGN1cnNvciBvbjoJCQleW1tyCisjCUNPTyBjdXJzb3Igb2ZmOgkJCV5bWzFyCisjCVNHUiBkaW0gKHR1cnF1b2lzZSkgcmV2IGF0dHI6CV5bWzI7N20KKyMJU0dSIERhdGEgbm9ybWFsIGF0dHI6CQleW1ttCisjCVNPIExpbmUtZ3JhcGhpYyBtb2RlIE9OOgleTgorIwlTSSBMaW5lLWdyYXBoaWMgbW9kZSBPRkY6CV5PCisjCU1DIHN0YXJ0IHJvdXRpbmcgdG8gcHJpbnRlcjoJXltbNWkKKyMJTUMgc3RvcCByb3V0aW5nIHRvIHByaW50ZXI6CV5NXltbNGkKKyMKKworIyBUaGlzIGVudHJ5IGNvdmVycyB0aGUgZm9sbG93aW5nIHRlcm1pbmFsczoKKyMgZGt1NzEwMiwgdHdzMjEwMiwgYW5kIHR3cyBtb2RlbHMgMjEwNSB0byAyMTEyCit0d3MtZ2VuZXJpY3xka3U3MTAyfEJ1bGwgUXVlc3RhciB0d3MgdGVybWluYWxzLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeGhwQCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2opa1wsbCZtI24vb29wcHEqcnJzc3QndS12K3cueCV5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVswOzVtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbMXIsIGNsZWFyPVxFWzJKLAorCWNub3JtPVxFW3IsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLAorCWN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRmLAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRpbT1cRVswOzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWRzbD1cRVBZOTlcOjk4XEVcXFxFWzA7OTh2XEVbMkpcRVt2LCBlZD1cRVtKLCBlbD1cRVtLLAorCWZzbD1cRVt2LCBob21lPVxFW0gsIGh0PVxFW0ksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVswOzhtLAorCWlzMT1cRVs/PWhcRWNcRWBcRVs/PmhcRVBZOTlcOjk4XEVcXCwKKwlpczI9XEVbNTs+OzEyOzE4Oz88bFxFWz1oXEVQMXNcRVxcXEVbXDAyN3AsCisJaXMzPVxFYlxFWz88aCwga2JzPV5ILCBrY2J0PVxFW1osIGtjdGFiPVxFW2csIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2RsMT1cRVtNLAorCWtlZD1cRVtKLCBrZWw9XEVbSywga2YxPVxFWzF1XDAyNywga2YyPVxFWzJ1XDAyNywKKwlrZjM9XEVbM3VcMDI3LCBrZjQ9XEVbNHVcMDI3LCBrZjU9XEVbNXVcMDI3LAorCWtmNj1cRVs2dVwwMjcsIGtmNz1cRVs3dVwwMjcsIGtmOD1cRVs4dVwwMjcsIGtob21lPVxFW0gsCisJa2h0cz1cRUgsIGtpbDE9XEVbTCwga3JtaXI9XEVbNGwsIGxsPVxFW0hcRVtBLCBtYzA9XEVbMGksCisJbWM0PVxyXEVbNGksIG1jNT1cRVs1aSwgcmV2PVxFWzA7N20sIHJtYWNzPV5PLAorCXJtY3VwPVxFWzA7OTh2XEVbMkpcRVt2LCBybWlyPVxFWzRsLCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczI9XEVbPz1oXEVjLCBzMGRzPV5PLCBzMWRzPV5OLAorCXNncj1cRVswJT8lcDElcDMlfCV0OzclOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtY3VwPVxFWz8+aFxFUFk5OVw6OThcRVxcLAorCXNtaXI9XEVbNGgsIHNtc289XEVbMDs3bSwgc211bD1cRVswOzRtLCB0YmM9XEVbMmcsCisJdHNsPVxFUFk5OVw6OThcRVxcXEVbMDs5OHZcRVsyOzdtLAordHdzMjEwMi1zbmF8ZGt1NzEwMi1zbmF8QlVMTCBRdWVzdGFyIHR3czIxMDIgZm9yIFNOQSwKKwlkc2w9XEVbMDs5OHZcRVsySlxFW3YsIGZzbD1cRVt2LCBpczM9XEViLCB0c2w9XEVbMDs5OHYsCisJdXNlPXR3cy1nZW5lcmljLAordHdzMjEwM3x4ZGt1fEJVTEwgUXVlc3RhciB0d3MyMTAzLAorCWh0PV5JLCB1c2U9dHdzLWdlbmVyaWMsCit0d3MyMTAzLXNuYXxka3U3MTAzLXNuYXxCVUxMIFF1ZXN0YXIgdHdzMjEwMyBmb3IgU05BLAorCWh0PV5JLCB1c2U9dHdzMjEwMi1zbmEsCitka3U3MTAyLW9sZHxCVUxMIFF1ZXN0YXIgMjAwIERLVTcxMDIgKG1pY3JvY29kZSB2ZXJzaW9uIDwgNiksCisJY2xlYXI9XEVbMkpcRVtILCBjdXBALCBkbEAsIGRsMUAsCisJZHNsPVxFUFk5OVw6OThcRVxcXEVbMDs5OHZcRVsySlxFW0hcRVt2LCBlbD1cRVtLXEVbbSwKKwlpbEAsIGlsMUAsIHRzbD1cRVBZOTlcOjk4XEVcXFxFWzA7OTh2XEVbSFxFWzI7N20sCisJdXNlPXR3cy1nZW5lcmljLAorZGt1NzIwMnxCVUxMIFF1ZXN0YXIgMjAwIERLVTcyMDIgKGNvbG91ci9jaGFyYWN0ZXIgYXR0cmlidXRlcyksCisJYmxpbms9XEVbMDsyOzRtLCBkaW09XEVbMDs1bSwgaHQ9XkksIGlzMz1cRVs/M2hcRWIsCisJc21zbz1cRVswOzQ7NTs3bSwgc211bD1cRVswOzJtLCB1c2U9dHdzLWdlbmVyaWMsCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisjIEJVTEwgUVVFU1RBUiAzMDMgJiAzMTAgYERFQyBWVCAzMjAnIHRlcm1pbmFscyBlbXVsYXRpb24gIworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKyMKKyMgRGVzY3JpcHRpb24gd3JpdHRlbiBieSBKLiBTdGFlcmNrIChCVUxMIFNBKQorIyAgICAgICBDb3B5cmlnaHQgKGMpIDE5ODkgQlVMTCBTQQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgVGhpcyBlbnRyeSBpcyB1c2VkIGZvciB0ZXJtaW5hbHMgd2l0aCB2dDMyMCBlbXVsYXRpb24gbW9kZQorIyAgYW5kIGZvbGxvd2luZyBzZXQtdXAgOgorIyAgICA4IGJpdCBJU08gTGF0aW4gQ2hhcmFjdGVyIFNldCAoSVNPIDg4NTktMSksCisjICAgIDcgYml0IENvbnRyb2wgQ2hhcmFjdGVycywKKyMgICAgODAgY29sdW1ucyBzY3JlZW4uCisjICBIZXJlYWZ0ZXIgYXJlIHNvbWUgREVDIHZ0IHRlcm1pbmFscycgY29tbWFuZHMuICh2YWxpZCBvbiB2dDIwMCBhbmQgMzAwKQorIyAgVGhleSBhcmUgdXNlZCBpbiBzdHJpbmcgY2FwYWJpbGl0aWVzIHdpdGggdnQyMjAtMzIwIGVtdWxhdGlvbiBtb2RlLgorIyAgSW4gdGhlIGZvbGxvd2luZyBERUMgZGVmaW5pdGlvbnMsIHR3byBraW5kcyBvZiB0ZXJtaW5mbyBkYXRhYmFzZXMgYXJlCisjICAgIHByb3ZpZGVkIDoKKyMgICAgMS4gdGhlIGZpcnN0IHdpdGggQ29tbWFuZCBTZXF1ZW5jZSBJbnRyb2R1Y2VyIHN0YXJ0aW5nIHdpdGggZXNjYXBlCisjICAgICAgIHNlcXVlbmNlIGluIDcgYml0cyBjaGFyYWN0ZXJzIGV4LiBFU0MgWyA6IDIgY2hhcnMuIGluIDctYml0IG1vZGUuCisjICAgIDIuIHRoZSBzZWNvbmQgd2l0aCBDb21tYW5kIFNlcXVlbmNlIEludHJvZHVjZXIgc3RhcnRpbmcgd2l0aCBlc2NhcGUKKyMgICAgICAgc2VxdWVuY2UgaW4gOCBiaXRzIGNoYXJhY3RlcnMgZXguIEVTQyBbIDogMSBjaGFyLiAnQ1NJJyA9eDlCLgorIwlTb2Z0IFRlcm1pbmFsIFJlc2V0CQllc2MgWyAhIHAKKyMJUklTIChlcmFzZXMgc2NyZWVuKToJCWVzYyBjCisjCURFQ0tQTk0gbnVtZXJpYyBrZXlwYWQgbW9kZToJZXNjID4KKyMJREVDS1BBTSBhcHBsaWMuIGtleXBhZCBtb2RlOgllc2MgPQorIwlERUNTVEJNIFNjcm9sbGluZyByZWdpb246CWVzYyBbIHIKKyMJU0NTIHNlbGVjdCBHMCA9IFVTOgkJZXNjICggQgorIwlTQ1Mgc2VsZWN0IEcxID0gbGluZS1ncmFwaGljOgllc2MgKSAwCisjCVNlbGVjdCA3LWJpdCBDMSBjb250cm9sczoJZXNjIHNwIEYKKyMJU2VsZWN0IDgtYml0IEMxIGNvbnRyb2xzOgllc2Mgc3AgRworIwlTZWxlY3QgY3Vyc29yIGhvbWU6CQllc2MgWyAgSAorIwlTZWxlY3QgZXJhc2Ugc2NyZWVuOgkJZXNjIFsgIEoKKyMJU00gS0FNIGxvY2sga2V5Ym9hcmQ6CQllc2MgWyAyIGgKKyMJUk0gS0FNIHVubG9jayBrZXlib2FyZDoJCWVzYyBbIDIgbAorIwlTTSBTUk0gbG9jYWwgZWNobyBvZmY6CQllc2MgWyAxIDIgaAorIwlSTSBTUk0gbG9jYWwgZWNobyBvbjoJCWVzYyBbIDEgMiBsCisjCVNNIExOTSBOZXcgbGluZSA6CQllc2MgWyAyIDAgaAorIwlSTSBMTk0gcmV0dXJuID0gQ1Igb25seToJZXNjIFsgMiAwIGwKKyMJU00gREVDQ0tNIGN1cnNvciBrZXlzIG1vZGU6CWVzYyBbID8gMSBoCisjCVJNIERFQ0NLTSBhcHBsaS4ga2V5cyBtb2RlOgllc2MgWyA/IDEgbAorIwlTTSBERUNBTk0gQU5TSSBtb2RlIG9uOgkJZXNjIFsgPyAyIGgKKyMJUk0gREVDQU5NIEFOU0kgbW9kZSBvZmY6CWVzYyBbID8gMiBsCisjCVNNIERFQ0NPTE0gMTMyLWNvbHVtbiBzY3JlZW46CWVzYyBbID8gMyBoCisjCVJNIERFQ0NPTE0gODAtY29sdW1uIHNjcmVlbjoJZXNjIFsgPyAzIGwKKyMJU00gREVDU0NMTSBTbW9vdGggc2Nyb2xsOgllc2MgWyA/IDQgaAorIwlSTSBERUNTQ0xNIEp1bXAgc2Nyb2xsOgkJZXNjIFsgPyA0IGwKKyMJU00gREVDU0NOTSBzY3JlZW4gbGlnaHQgYmFja2dyLgllc2MgWyA/IDUgaAorIwlSTSBERUNTQ05NIHNjcmVlbiBkYXJrIGJhY2tnci4JZXNjIFsgPyA1IGwKKyMJU00gREVDT00gbW92ZSB3aXRoaW4gbWFyZ2luczoJZXNjIFsgPyA2IGgKKyMJUk0gREVDT00gbW92ZSBvdXRzaWRlIG1hcmdpbnM6CWVzYyBbID8gNiBsCisjCVNNIERFQ0FXTSBhdXRvIHJpZ2h0IG1hcmdpbjoJZXNjIFsgPyA3IGgKKyMJUk0gREVDQVdNIGF1dG8gcmlnaHQgbWFyZ2luOgllc2MgWyA/IDcgbAorIwlTTSBERUNBUk0gYXV0byByZXBlYXQ6CQllc2MgWyA/IDggaAorIwlSTSBERUNBUk0gYXV0byByZXBlYXQ6CQllc2MgWyA/IDggbAorIwlERUNTQVNEIFNlbGVjdCBhY3RpdmUgbWFpbjoJZXNjIFsgMCAkIH0KKyMJREVDU0FTRCBTZWxlY3QgYWN0aXZlIHN0YXR1czoJZXNjIFsgMSAkIH0KKyMJREVDU1NEVCBTZWxlY3Qgc3RhdHVzIG5vbmU6CWVzYyBbIDAgJCB+CisjCURFQ1NTRFQgU2VsZWN0IHN0YXR1cyBpbmRpYy46CWVzYyBbIDEgJCB+CisjCURFQ1NTRFQgU2VsZWN0IHN0YXR1cyBob3N0LXdyOgllc2MgWyAyICQgfgorIwlTTSBERUNUQ0VNIFZpc2libGUgY3Vyc29yOgllc2MgWyA/IDIgNSBoCisjCVJNIERFQ1RDRU0gSW52aXNpYmxlIGN1cnNvcjoJZXNjIFsgPyAyIDUgbAorIwlTTSBERUNOQ1JNIDcgYml0cyBOQ1Igc2V0Ogllc2MgWyA/IDQgMiBoCisjCVJNIERFQ05DUk0gTXVsdGkgb3IgSVNPIGxhdGluOgllc2MgWyA/IDQgMiBsCisjCVNNIERFQ05LTSBudW1lcmljIGtleXBhZCBtb2RlOgllc2MgWyA/IDYgNiBoCisjCVJNIERFQ05LTSBudW1lcmljIGtleXBhZCBhcHBsLjoJZXNjIFsgPyA2IDYgbAorIwlTTSBERUNLQlVNIGNsYXZpZXIgaW5mb3JtYXRpcXVlCWVzYyBbID8gNiA4IGgKKyMJUk0gREVDS0JVTSBjbGF2aWVyIGJ1cmVhdXRpcXVlOgllc2MgWyA/IDYgOCBsCisjCURFQ1NDTCB2dDMwMCBtb2RlIDgtYml0IGN0cmw6CWVzYyBbIDYgMyAiIHAKKyMgb3IJREVDU0NMIHZ0MzAwIG1vZGUgOC1iaXQgY3RybDoJZXNjIFsgNiAzIDsgMCAiIHAKKyMgb3IJREVDU0NMIHZ0MzAwIG1vZGUgOC1iaXQgY3RybDoJZXNjIFsgNiAzIDsgMiAiIHAKKyMJREVDU0NMIHZ0MzAwIG1vZGUgNy1iaXQgY3RybDoJZXNjIFsgNiAzIDsgMSAiIHAKKyMJQ2hhci4gYW5kIExpbmUgYXR0cmlidXRlczoJZXNjIFsgUHMgLi4uIFBzIG0KKyMgd2l0aDogIDAgQWxsIG9mZiwgMSBCb2xkLCA0IFVuZGVybGluZSwgNSBCbGlua2luZywgNyBSZXZlcnNlCisjIGFuZCA6IDIyIEJvbGQgb2ZmLCAyNCBVbmRlcmxpbmUgb2ZmLCAyNSBCbGlua2luZyBvZmYsIDI3IFJldmVyc2Ugb2ZmCisjCisKKyMgVGhpcyBlbnRyeSBjb3ZlcnMgQlEzMDMsIEJRMzA2LCBCUTMxMCwgUTMwMywgUTMwNiwgUTMxMAorYnEzMDB8QnVsbCB2dDMyMCBJU08gTGF0aW4gMSA4MCBjb2x1bW5zIHRlcm1pbmFsLAorCWFtLCBlbywgZXNsb2ssIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwlkc2w9XEVbMSR9XEVbMiR+XG5cRVswJH0sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osCisJZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRShCXEUpMCwKKwlmbGFzaD1cRVs/NWgkPDUwPlxFWz81bCwgZnNsPVxFWzAkfSwgaG9tZT1cRVtILCBodD1eSSwKKwlodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMT1cRVs2MzsxInBcRVsyaCwKKwlpczI9XEVbPzJoXEVbPzNsXEVbPzVsXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgRlxFWz80MmxcRVs/NGwsCisJaXMzPVxFWzAkfVxFWz8yNWhcRVsybFxFW0hcRVtKLCBrYTE9XEVPdywga2EzPVxFT3ksCisJa2IyPVxFT3UsIGticz1eSCwga2MxPVxFT3EsIGtjMz1cRU9zLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LCBrZjE9XEVPUCwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sCisJa2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sCisJa2YxOT1cRVszM34sIGtmMj1cRU9RLCBrZjIwPVxFWzM0fiwga2YzPVxFT1IsIGtmND1cRU9TLAorCWtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtmbmQ9XEVbMX4sCisJa2hscD1cRVsyOH4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrcmRvPVxFWzI5fiwga3NsdD1cRVs0fiwgbGYxPXBmMSwgbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwKKwltYzA9XEVbaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFTSwgcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHJtY3VwPVxFWz83aCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCByczE9XEVbIXAsCisJcnMyPVxFWz8zbCwgczBkcz1cRShCLCBzMWRzPVxFKDAsIHNjPVxFNywKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20lPyVwOSV0XEUoMCVlXEUoQiU7LAorCXNncjA9XEVbMG1cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwKKwlzbWN1cD1cRVs/N2xcRVs/MWxcRShCLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywgdHNsPVxFWzEkfVxFWzIkfiwKK2JxMzAwLXJ2fEJ1bGwgdnQzMjAgcmV2ZXJzZSA4MCBjb2x1bW5zLAorCWZsYXNoPVxFWz81bCQ8NTA+XEVbPzVoLAorCWlzMj1cRVs/MmhcRVs/M2xcRVs/NWhcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBGXEVbPzQybFxFWz80bCwKKwl1c2U9YnEzMDAsCiticTMwMC13fEJ1bGwgdnQzMjAgMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMyPVxFWz8yaFxFWz8zaFxFWz81bFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEZcRVs/NDJsXEVbPzRsLAorCXJzMj1cRVs/M2gsIHVzZT1icTMwMCwKK2JxMzAwLXctcnZ8QnVsbCB2dDMyMCByZXZlcnNlIG1vZGUgMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIHdzbCMxMzIsCisJZmxhc2g9XEVbPzVsJDw1MD5cRVs/NWgsCisJaXMyPVxFWz8yaFxFWz8zaFxFWz81aFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEZcRVs/NDJsXEVbPzRsLAorCXJzMj1cRVs/M2gsIHVzZT1icTMwMCwKKworIyAgVGhpcyBlbnRyeSBpcyB1c2VkIGZvciB0ZXJtaW5hbHMgd2l0aCB2dDMyMCBlbXVsYXRpb24gbW9kZQorIyAgYW5kIGZvbGxvd2luZyBzZXQtdXAgOgorIyAgICA4IGJpdCBJU08gTGF0aW4gQ2hhcmFjdGVyIFNldCAoSVNPIDg4NTktMSksCisjICAgIDggYml0IENvbnRyb2wgQ2hhcmFjdGVycywgKENTSSBjb2RlZCBhcyB4OUIgZm9yIEVTQyBbKQorIyAgICA4MCBjb2x1bW5zIHNjcmVlbi4KKyMJU29mdCBUZXJtaW5hbCBSZXNldAkJY3NpICEgcAorIwlSSVMgKGVyYXNlcyBzY3JlZW4pOgkJZXNjIGMKKyMJREVDS1BOTSBudW1lcmljIGtleXBhZCBtb2RlOgllc2MgPgorIwlERUNLUEFNIGFwcGxpYy4ga2V5cGFkIG1vZGU6CWVzYyA9CisjCURFQ1NUQk0gU2Nyb2xsaW5nIHJlZ2lvbjoJZXNjIFsgcgorIwlTQ1Mgc2VsZWN0IEcwID0gVVM6CQllc2MgKCBCCisjCVNDUyBzZWxlY3QgRzEgPSBsaW5lLWdyYXBoaWM6CWVzYyApIDAKKyMJU2VsZWN0IDctYml0IEMxIGNvbnRyb2xzOgllc2Mgc3AgRgorIwlTZWxlY3QgOC1iaXQgQzEgY29udHJvbHM6CWVzYyBzcCBHCisjCVNlbGVjdCBjdXJzb3IgaG9tZToJCWNzaSBICisjCVNlbGVjdCBlcmFzZSBzY3JlZW46CQljc2kgSgorIwlTTSBLQU0gbG9jayBrZXlib2FyZDoJCWNzaSAyIGgKKyMJUk0gS0FNIHVubG9jayBrZXlib2FyZDoJCWNzaSAyIGwKKyMJU00gU1JNIGxvY2FsIGVjaG8gb2ZmOgkJY3NpIDEgMiBoCisjCVJNIFNSTSBsb2NhbCBlY2hvIG9uOgkJY3NpIDEgMiBsCisjCVNNIExOTSBOZXcgbGluZSA6CQljc2kgMiAwIGgKKyMJUk0gTE5NIHJldHVybiA9IENSIG9ubHk6CWNzaSAyIDAgbAorIwlTTSBERUNDS00gY3Vyc29yIGtleXMgbW9kZToJY3NpID8gMSBoCisjCVJNIERFQ0NLTSBhcHBsaS4ga2V5cyBtb2RlOgljc2kgPyAxIGwKKyMJU00gREVDQU5NIEFOU0kgbW9kZSBvbjoJCWNzaSA/IDIgaAorIwlSTSBERUNBTk0gQU5TSSBtb2RlIG9mZjoJY3NpID8gMiBsCisjCVNNIERFQ0NPTE0gMTMyLWNvbHVtbiBzY3JlZW46CWNzaSA/IDMgaAorIwlSTSBERUNDT0xNIDgwLWNvbHVtbiBzY3JlZW46CWNzaSA/IDMgbAorIwlTTSBERUNTQ0xNIFNtb290aCBzY3JvbGw6CWNzaSA/IDQgaAorIwlSTSBERUNTQ0xNIEp1bXAgc2Nyb2xsOgkJY3NpID8gNCBsCisjCVNNIERFQ1NDTk0gc2NyZWVuIGxpZ2h0IGJhY2tnci4JY3NpID8gNSBoCisjCVJNIERFQ1NDTk0gc2NyZWVuIGRhcmsgYmFja2dyLgljc2kgPyA1IGwKKyMJU00gREVDT00gbW92ZSB3aXRoaW4gbWFyZ2luczoJY3NpID8gNiBoCisjCVJNIERFQ09NIG1vdmUgb3V0c2lkZSBtYXJnaW5zOgljc2kgPyA2IGwKKyMJU00gREVDQVdNIGF1dG8gcmlnaHQgbWFyZ2luOgljc2kgPyA3IGgKKyMJUk0gREVDQVdNIGF1dG8gcmlnaHQgbWFyZ2luOgljc2kgPyA3IGwKKyMJU00gREVDQVJNIGF1dG8gcmVwZWF0OgkJY3NpID8gOCBoCisjCVJNIERFQ0FSTSBhdXRvIHJlcGVhdDoJCWNzaSA/IDggbAorIwlERUNTQVNEIFNlbGVjdCBhY3RpdmUgbWFpbjoJY3NpIDAgJCB9CisjCURFQ1NBU0QgU2VsZWN0IGFjdGl2ZSBzdGF0dXM6CWNzaSAxICQgfQorIwlERUNTU0RUIFNlbGVjdCBzdGF0dXMgbm9uZToJY3NpIDAgJCB+CisjCURFQ1NTRFQgU2VsZWN0IHN0YXR1cyBpbmRpYy46CWNzaSAxICQgfgorIwlERUNTU0RUIFNlbGVjdCBzdGF0dXMgaG9zdC13cjoJY3NpIDIgJCB+CisjCVNNIERFQ1RDRU0gVmlzaWJsZSBjdXJzb3I6CWNzaSA/IDIgNSBoCisjCVJNIERFQ1RDRU0gSW52aXNpYmxlIGN1cnNvcjoJY3NpID8gMiA1IGwKKyMJU00gREVDTkNSTSA3IGJpdHMgTkNSIHNldDoJY3NpID8gNCAyIGgKKyMJUk0gREVDTkNSTSBNdWx0aSBvciBJU08gbGF0aW46CWNzaSA/IDQgMiBsCisjCURFQ1NDTCB2dDMwMCBtb2RlIDgtYml0IGN0cmw6CWNzaSA2IDMgIiBwCisjIG9yCURFQ1NDTCB2dDMwMCBtb2RlIDgtYml0IGN0cmw6CWNzaSA2IDMgOyAwICIgcAorIwlERUNTQ0wgdnQzMDAgbW9kZSA3LWJpdCBjdHJsOgljc2kgNiAzIDsgMSAiIHAKKyMJQ2hhci4gYW5kIExpbmUgYXR0cmlidXRlczoJY3NpIFBzIC4uLiBQcyBtCisjIHdpdGg6ICAwIEFsbCBvZmYsIDEgQm9sZCwgNCBVbmRlcmxpbmUsIDUgQmxpbmtpbmcsIDcgUmV2ZXJzZQorIyBhbmQgOiAyMiBCb2xkIG9mZiwgMjQgVW5kZXJsaW5lIG9mZiwgMjUgQmxpbmtpbmcgb2ZmLCAyNyBSZXZlcnNlIG9mZgorIyAoYnEzMDAtODogPGN1YjE+LDxjdWYxPiw8Y3V1MT4sPGN1ZDE+LDxkbDE+LDxpbDE+IHRvIGdldCB1bmRlciAxMDI0IC0tZXNyKQorYnEzMDAtOHxCdWxsIHZ0MzIwIGZ1bGwgOCBiaXRzIDgwIGNvbHVtbnMsCisJYW0sIGVvLCBlc2xvaywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cMjMzNW0sIGJvbGQ9XDIzMzFtLCBjaXZpcz1cMjMzPzI1bCwKKwljbGVhcj1cMjMzSFwyMzNKLCBjbm9ybT1cMjMzPzI1aCwgY3I9Xk0sCisJY3NyPVwyMzMlaSVwMSVkOyVwMiVkciwgY3ViPVwyMzMlcDElZEQsIGN1ZD1cMjMzJXAxJWRCLAorCWN1Zj1cMjMzJXAxJWRDLCBjdXA9XDIzMyVpJXAxJWQ7JXAyJWRILCBjdXU9XDIzMyVwMSVkQSwKKwlkY2g9XDIzMyVwMSVkUCwgZGNoMT1cMjMzUCwgZGw9XDIzMyVwMSVkTSwKKwlkc2w9XDIzMzEkfVwyMzMyJH5cblwyMzMwJH0sIGVjaD1cMjMzJXAxJWRYLCBlZD1cMjMzSiwKKwllbD1cMjMzSywgZWwxPVwyMzMxSywgZW5hY3M9XEUoQlxFKTAsCisJZmxhc2g9XDIzMz81aCQ8NTA+XDIzMz81bCwgZnNsPVwyMzMwJH0sIGhvbWU9XDIzM0gsCisJaHQ9XkksIGh0cz1cRUgsIGljaD1cMjMzJXAxJWRALCBpbD1cMjMzJXAxJWRMLCBpbmQ9XEVELAorCWlzMT1cRVs2MzsyInBcRVsyaCwKKwlpczI9XEVbPzJoXEVbPzNsXEVbPzVsXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgR1xFWz80MmxcRVs/NGwsCisJaXMzPVwyMzMwJH1cMjMzPzI1aFwyMzMybFwyMzNIXDIzM0osIGthMT1cMjE3dywKKwlrYTM9XDIxN3ksIGtiMj1cMjE3dSwga2JzPV5ILCBrYzE9XDIxN3EsIGtjMz1cMjE3cywKKwlrY3ViMT1cMjMzRCwga2N1ZDE9XDIzM0IsIGtjdWYxPVwyMzNDLCBrY3V1MT1cMjMzQSwKKwlrZGNoMT1cMjMzM34sIGtmMT1cMjE3UCwga2YxMD1cMjMzMjF+LCBrZjExPVwyMzMyM34sCisJa2YxMj1cMjMzMjR+LCBrZjEzPVwyMzMyNX4sIGtmMTQ9XDIzMzI2fiwga2YxNT1cMjMzMjh+LAorCWtmMTY9XDIzMzI5fiwga2YxNz1cMjMzMzF+LCBrZjE4PVwyMzMzMn4sIGtmMTk9XDIzMzMzfiwKKwlrZjI9XDIxN1EsIGtmMjA9XDIzMzM0fiwga2YzPVwyMTdSLCBrZjQ9XDIxN1MsIGtmNj1cMjMzMTd+LAorCWtmNz1cMjMzMTh+LCBrZjg9XDIzMzE5fiwga2Y5PVwyMzMyMH4sIGtmbmQ9XDIzMzF+LAorCWtobHA9XDIzMzI4fiwga2ljaDE9XDIzMzJ+LCBrbnA9XDIzMzZ+LCBrcHA9XDIzMzV+LAorCWtyZG89XDIzMzI5fiwga3NsdD1cMjMzNH4sIGxmMT1wZjEsIGxmMj1wZjIsIGxmMz1wZjMsCisJbGY0PXBmNCwgbWMwPVwyMzNpLCBtYzQ9XDIzMzRpLCBtYzU9XDIzMzVpLCBuZWw9XEVFLCByYz1cRTgsCisJcmV2PVwyMzM3bSwgcmk9XEVNLCBybWFjcz1eTywgcm1hbT1cMjMzPzdsLCBybWN1cD1cMjMzPzdoLAorCXJtaXI9XDIzMzRsLCBybWt4PVwyMzM/MWxcRT4sIHJtc289XDIzMzI3bSwgcm11bD1cMjMzMjRtLAorCXJzMT1cRVshcCwgcnMyPVxFWz8zbCwgczBkcz1cRShCLCBzMWRzPVxFKDAsIHNjPVxFNywKKwlzZ3I9XDIzMyU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTttJT8lcDkldFxFKDAlZVxFKEIlOywKKwlzZ3IwPVwyMzMwbVxFKEIsIHNtYWNzPV5OLCBzbWFtPVwyMzM/N2gsCisJc21jdXA9XDIzMz83bFwyMzM/MWxcRShCLCBzbWlyPVwyMzM0aCwgc21zbz1cMjMzN20sCisJc211bD1cMjMzNG0sIHRiYz1cMjMzM2csIHRzbD1cMjMzMSR9XDIzMzIkfiwKK2JxMzAwLThydnxCdWxsIHZ0MzIwIDgtYml0IHJldmVyc2UgbW9kZSA4MCBjb2x1bW5zLAorCWZsYXNoPVwyMzM/NWwkPDUwPlwyMzM/NWgsCisJaXMyPVxFWz8yaFxFWz8zbFxFWz81aFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEdcRVs/NDJsXEVbPzRsLAorCXVzZT1icTMwMC04LAorYnEzMDAtOHd8QnVsbCB2dDMyMCA4LWJpdCAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczI9XEVbPzJoXEVbPzNoXEVbPzVsXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgR1xFWz80MmxcRVs/NGwsCisJcnMyPVwyMzM/M2gsIHVzZT1icTMwMC04LAorYnEzMDAtdy04cnZ8QnVsbCB2dDMyMCA4LWJpdCByZXZlcnNlIG1vZGUgMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIHdzbCMxMzIsCisJZmxhc2g9XDIzMz81bCQ8NTA+XDIzMz81aCwKKwlpczI9XEVbPzJoXEVbPzNoXEVbPzVoXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgR1xFWz80MmxcRVs/NGwsCisJcnMyPVwyMzM/M2gsIHVzZT1icTMwMC04LAorCisjICBUaGlzIGVudHJ5IGlzIHVzZWQgZm9yIHRlcm1pbmFscyB3aXRoIHZ0MzIwIGVtdWxhdGlvbiBtb2RlCisjICBhIDEwMiBrZXlzIGtleWJvYXJkIChQQyBzY2FuY29kZSAhKSBhbmQgZm9sbG93aW5nIHNldC11cCA6CisjICAgIDggYml0IElTTyBMYXRpbiBDaGFyYWN0ZXIgU2V0IChJU08gODg1OS0xKSwKKyMgICAgNyBiaXQgQ29udHJvbCBDaGFyYWN0ZXJzLAorIyAgICA4MCBjb2x1bW5zIHNjcmVlbi4KK2JxMzAwLXBjfFF1ZXN0YXIgMzAzIHdpdGggUEMga2V5Ym9hcmQgSVNPIExhdGluIDEgODAgY29sdW1ucywKKwlrYnM9XkgsIGtkY2gxPVxFWzN+LCBrZW5kPVxFWzR+LCBrZjE9XEVbMTd+LCBrZjEwPVxFWzI4fiwKKwlrZjExPVxFWzI5fiwga2YxMj1cRVszMX4sIGtmMTNALCBrZjE0QCwga2YxNUAsIGtmMTZALCBrZjE3QCwKKwlrZjE4QCwga2YxOUAsIGtmMj1cRVsxOH4sIGtmMjBALCBrZjM9XEVbMTl+LCBrZjQ9XEVbMjB+LAorCWtmNT1cRVsyMX4sIGtmNj1cRVsyM34sIGtmNz1cRVsyNH4sIGtmOD1cRVsyNX4sIGtmOT1cRVsyNn4sCisJa2ZuZEAsIGtobHBALCBraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtyZG9ALCBrc2x0QCwgbGYxQCwgbGYyQCwgbGYzQCwgbGY0QCwgdXNlPWJxMzAwLAorYnEzMDAtcGMtcnZ8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCByZXZlcnNlIG1vZGUgODAgY29sdW1ucywKKwlmbGFzaD1cRVs/NWwkPDUwPlxFWz81aCwKKwlpczI9XEVbPzJoXEVbPzNsXEVbPzVoXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgRlxFWz80MmxcRVs/NGwsCisJdXNlPWJxMzAwLXBjLAorYnEzMDAtcGMtd3xRdWVzdGFyIDMwMyB3aXRoIFBDIGtleWJvYXJkIDEzMiBjb2x1bW5zIHRlcm1pbmFsLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMj1cRVs/MmhcRVs/M2hcRVs/NWxcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBGXEVbPzQybFxFWz80bCwKKwlyczI9XEVbPzNoLCB1c2U9YnEzMDAtcGMsCiticTMwMC1wYy13LXJ2fFF1ZXN0YXIgMzAzIHdpdGggUEMga2V5Ym9hcmQgcmV2ZXJzZSBtb2RlIDEzMiBjb2x1bW5zLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWZsYXNoPVxFWz81bCQ8NTA+XEVbPzVoLAorCWlzMj1cRVs/MmhcRVs/M2hcRVs/NWhcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBGXEVbPzQybFxFWz80bCwKKwlyczI9XEVbPzNoLCB1c2U9YnEzMDAtcGMsCisjICAgIDggYml0IElTTyBMYXRpbiBDaGFyYWN0ZXIgU2V0IChJU08gODg1OS0xKSwKKyMgICAgOCBiaXQgQ29udHJvbCBDaGFyYWN0ZXJzLAorIyAgICA4MCBjb2x1bW5zIHNjcmVlbi4KK2JxMzAwLTgtcGN8UTMwNi04LXBjfFF1ZXN0YXIgMzAzIHdpdGggUEMga2V5Ym9hcmQgaW4gZnVsbCA4IGJpdHMgODAgY29sdW1ucywKKwlrYnM9XkgsIGtkY2gxPVwyMzMzfiwga2VuZD1cMjMzNH4sIGtmMT1cMjMzMTd+LAorCWtmMTA9XDIzMzI4fiwga2YxMT1cMjMzMjl+LCBrZjEyPVwyMzMzMX4sIGtmMTNALCBrZjE0QCwKKwlrZjE1QCwga2YxNkAsIGtmMTdALCBrZjE4QCwga2YxOUAsIGtmMj1cMjMzMTh+LCBrZjIwQCwKKwlrZjM9XDIzMzE5fiwga2Y0PVwyMzMyMH4sIGtmNT1cMjMzMjF+LCBrZjY9XDIzMzIzfiwKKwlrZjc9XDIzMzI0fiwga2Y4PVwyMzMyNX4sIGtmOT1cMjMzMjZ+LCBrZm5kQCwga2hscEAsCisJa2hvbWU9XDIzMzF+LCBraWNoMT1cMjMzMn4sIGtucD1cMjMzNn4sIGtwcD1cMjMzNX4sIGtyZG9ALAorCWtzbHRALCBsZjFALCBsZjJALCBsZjNALCBsZjRALCB1c2U9YnEzMDAtOCwKK2JxMzAwLTgtcGMtcnZ8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCBmdWxsIDggYml0cyByZXZlcnNlIG1vZGUgODAgY29sdW1ucywKKwlmbGFzaD1cRVs/NWwkPDUwPlxFWz81aCwKKwlpczI9XEVbPzJoXEVbPzNsXEVbPzVoXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgR1xFWz80MmxcRVs/NGwsCisJdXNlPWJxMzAwLTgtcGMsCiticTMwMC04LXBjLXd8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCBmdWxsIDggYml0cyAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczI9XEVbPzJoXEVbPzNoXEVbPzVsXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgR1xFWz80MmxcRVs/NGwsCisJcnMyPVxFWz8zaCwgdXNlPWJxMzAwLTgtcGMsCiticTMwMC04LXBjLXctcnZ8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCBmdWxsIDggYml0cyByZXZlcnNlIDEzMiBjb2x1bW5zLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWZsYXNoPVxFWz81bCQ8NTA+XEVbPzVoLAorCWlzMj1cRVs/MmhcRVs/M2hcRVs/NWhcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBHXEVbPzQybFxFWz80bCwKKwlyczI9XEVbPzNoLCB1c2U9YnEzMDAtOC1wYywKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKyMgQlVMTCBRVUVTVEFSIDMxMCBgVklQIDc4MDAvODgwMCcgdGVybWluYWxzIGVtdWxhdGlvbiAjCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworCisjIG5vcm1hbCBtb2RlLCA4IGJpdHMsIDgwIGNvbHVtbnMgdGVybWluYWwuCisjCVJFUyByZXNldCA6CQkJXltlCisjCVJJUyByZXNldCBpbml0aWFsIHN0YXRlOgleW2MKKyMJQkxFIGJlbGwgZW5hYmxlCQkJXltoCisjCUJMRCBiZWxsIGRpc2FibGUJCV5bZworIwlDQU1TIGNoYXIuIGF0dHIuIG1vZGUgc2V0CV5bW0QKKyMJQ0FNUiBjaGFyLiBhdHRyLiBtb2RlIHJlc2V0CV5bW0cKKyMJQ0xSIGNsZWFyCQkJXltgCisjCUtCVSBrZXlib2FyZCB1bmxvY2sgKHNldCkJXltbVworIwlLQkwga2V5Ym9hcmQgbG9jayAocmVzZXQpCV5bW1gKKyMJQ00gIGNoYXJhY3RlciBtb2RlIChhc3luYy4pIAleW2sKKyMJTkVQIG5vbiBlY2hvcGxleCBtb2RlIChieSBob3N0KQleW2wKKyMJRVAgIGVjaG9wbGV4IG1vZGUgKGJ5IGhvc3QpIAleW20KKyMJSU0gIGluc2VydCBtb2RlIHNldAkJXltbSQorIwlJTSAgaW5zZXJ0IG1vZGUgcmVzZXQgCQleW1tKCisjCVJNUyByb2xsIG1vZGUgc2V0IAkJXltyCisjCVJNUiByb2xsIG1vZGUgcmVzZXQgCQleW3EKKyMJU003OCBzZXQgbW9kZSB2aXA3ODAwCSAJXltbMXEKKyMJU0QgIHNjcm9sbCB1cCAgCSg3MiBsaW5lcykgCV5bWzBzCisjCVNEICBzY3JvbGwgZG93bgkoNzIgbGluZXMpIAleW1sxcworIwlSQk0gYmxvY2sgbW9kZSByZXNldAkJXltbRQorIwlTTFMgc3RhdHVzIGxpbmUgc2V0IAkJXlt3CisjCVNMUiBzdGF0dXMgbGluZSByZXNldCAJCV5bdgorIwlTTEwgc3RhdHVzIGxpbmUgbG9jayAJCV5bTworIwlMR1MgTGluZS1ncmFwaGljIG1vZGUgc2V0IAleW0cKKyMJTEdSIExpbmUtZ3JhcGhpYyBtb2RlIHJlc2V0IAleW0YKKyMJVEJDIHRhYiBjbGVhciAoYXQgY3Vyc29yIHBvcy4pCV5bW2cKKyMJVEJJIHRhYiBpbml0aWFsaXplIAkJXltbTgorIwlUQlMgdGFiIHNldCAoYXQgY3Vyc29yIHBvcy4pCV5bcAorIwlQRFMgIHByaW50IGRhdGEgc3BhY2UJCV5bWzBwCisjCVBIRCAgcHJpbnQgaG9zdCBkYXRhIAkJXltbM3AKKyMJUERUICBwcmludCBkYXRhIHRlcm1pbmF0b3IJXltbPHAKKyMJUFJFUyBwcmludCBhZGFwdGVyIHJlc2V0CV5bWzJwCisjCVNTUFIgbXVsdGktcGFydC4gcmVzZXQJCV5bWzw+dQorIwlTU1AwIHBhcnRpdGlvbiAwIHNldAkJXltbMDB1CisjCVNTUDEgcGFydGl0aW9uIG4gZm9ybWF0IDEgCV5bW1BuUG5TVFJJTkd1CisjCVNTUDIgcGFydGl0aW9uIG4gZm9ybWF0IDIgCV5bW1BuUG5TVFJJTkd1CisjCVNTUDMgcGFydGl0aW9uIG4gZm9ybWF0IDMgCV5bW1BuUG51CisjCUFUUiBhdHRyaWJ1dGUgKHZpc3VhbCkKKyMJICAgIGJsaW5rIDoJCQleW3NCCisjCSAgICBkaW0gOgkJCV5bc0wKKyMJICAgIGhpZGUgKGJsYW5rKSA6CQleW3NICisjCSAgICByZXN0b3JlIDoJCQleW3NSCisjCSAgICBpbnZlcnNlIHZpZGVvIDoJCV5bc0kKKyMJICAgIHByb3QuIDoJCQleW3NQCisjCSAgICB1bmRlcmxpbmUgOgkJCV5bc18KKyMJICAgIHJlc2V0IDoJCQleeworIworIyBUaGlzIGNvdmVycyB0aGUgdmlwNzgwMCBhbmQgQlEzMTU1LXZpcDc4MDAKK3ZpcHxCdWxsIFF1ZXN0YXIgMzE1NS03ODAwLAorCWFtLCBlc2xvaywgaHMsIGttLCBtYzVpLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsIHdzbCM4MCwKKwlhY3NjPTBwamRrYmxhbWNua3FpdGd1ZnZod2V4aiwgYmVsPV5HLCBibGluaz1cRXNCLAorCWNidD1cRVtaLCBjbGVhcj1cRWAsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVbJWklcDElMDNkJXAyJTAzZGYsIGN1dTE9XEVBLCBkY2gxPVxFW1AsIGRpbT1cRXNMLAorCWRsMT1cRVtNLCBkc2w9XEV2LCBlZD1cRUosIGVsPVxFSywKKwlmbGFzaD1cMDA3JDw4MD5cMDA3JDw4MD5cMDA3LCBmc2w9XEVPLCBob21lPVxFSCwgaHQ9XkksCisJaHRzPVxFcCwgaWNoMT1cRVtJLCBpbmQ9XkosIGludmlzPVxFc0gsCisJaXMyPVxFWzAwdVxFWzw+MDAxMDAxMDI0MDgwMDI0MDgwdVxFWzAxdSwKKwlpczM9XEVyXEVbV1xFYCwga0hPTT1cRUgsIGtMRlQ9XEVvLCBrUklUPVxFdSwga2JzPV5ILAorCWtjYnQ9XEVbWiwga2Nscj1cRWAsIGtjdGFiPVxFW2csIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sIGtlZD1cRUosCisJa2VsPVxFSywga2YxPVxFMCwga2YxMD1cRVQsIGtmMTE9XEVcXCwga2YxMj1cRVxeLCBrZjEzQCwga2YxNEAsCisJa2YxNUAsIGtmMTZALCBrZjE3QCwga2YxOEAsIGtmMTlALCBrZjI9XEUyLCBrZjIwQCwga2YyMT1cRTEsCisJa2YyMj1cRTUsIGtmMjM9XEU3LCBrZjI0PVxFOSwga2YyNT1cRTssIGtmMjY9XEU9LCBrZjI3PVxFPywKKwlrZjI4PVxFUSwga2YyOT1cRVMsIGtmMz1cRTYsIGtmMzA9XEVWLCBrZjMxPVxFXSwga2YzMj1cRV8sCisJa2Y0PVxFOCwga2Y1PVxFXDosIGtmNj1cRTwsIGtmNz1cRT4sIGtmOD1cRVAsIGtmOT1cRVIsCisJa2hvbWU9XEVILCBraHRzPVxFcCwga2ljaDE9XEVbSSwga2lsMT1cRVtMLCBraW5kPVxFWzBzLAorCWtsbD1cRUhcRUEsIGtyaT1cRVsxcywga3JtaXI9XEVbSiwga3RiYz1cRVtOLCBsZjE9cGYxLAorCWxmMj1wZjIsIGxmMz1wZjMsIGxmND1wZjQsIGxsPVxFSFxFQSwgbWMwPVxFWzBwLCBtYzQ9XEVbPHAsCisJbWM1PVxFWzNwLCBuZWw9Xk0sIHByb3Q9XEVzUCwgcmV2PVxFc0ksCisJcmk9XEVBXEVKXEVIXEVbTCQ8MTA+LCBybWFjcz1cRUYsIHJtaXI9XEVbSiwgcm1zbz1cRXNSLAorCXJtdWw9XEVzUiwgcnMxPVxFYywgcnMyPVxFW0csIHMwZHM9XEVGLCBzMWRzPVxFRywKKwlzZ3IwPVxFc1JcRXNVXEVGLCBzbWFjcz1cRUcsIHNtaXI9XEVbSSwgc21zbz1cRXNJLAorCXNtdWw9XEVzXywgdGJjPVxFW04sIHRzbD1cRXcsCisjIG5vcm1hbCBzY3JlZW4sIDggYml0cywgMTMyIGNvbHVtbnMgdGVybWluYWwuCit2aXAtd3x2aXA3ODAwLXd8UTMxMC12aXAtd3xRMzEwLXZpcC13LWFtfFF1ZXN0YXIgMzE1NS12aXA3ODAwIHdpZGUsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMyPVxFWzAwdVxFWzw+MDAxMDAxMDI0MTMyMDI0MTMydVxFWzAxdSwgdXNlPXZpcCwKK3ZpcC1IfHZpcDc4MDAtSHxRMzEwLXZpcC1IfFEzMTAtdmlwLUgtYW18UXVlc3RhciAzMTU1LXZpcDc4MDAgNzIgbGluZXMsCisJbGluZXMjNzIsCisJaXMyPVxFWzAwdVxFWzw+MDAxMDAxMDI0MDgwMDcyMDgwdVxFWzAxdSwgdXNlPXZpcCwKK3ZpcC1Id3x2aXA3ODAwLUh3fFEzMTAtdmlwLUh3fFF1ZXN0YXIgMzE1NS12aXA3ODAwIHdpZGUgNzIgbGluZXMsCisJY29scyMxMzIsIGxpbmVzIzcyLCB3c2wjMTMyLAorCWlzMj1cRVswMHVcRVs8PjAwMTAwMTAyNDEzMjA3MjEzMnVcRVswMXUsIHVzZT12aXAsCisKKyMjIyMgQ2hyb21hdGljcworIworCisjIEkgaGF2ZSBwdXQgdGhlIGxvbmcgc3RyaW5ncyBpbiA8c21jdXA+LzxybWN1cD4uIFRpIHNldHMgdXAgYSB3aW5kb3cKKyMgdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIHNjcmVlbiwgYW5kIHB1dHMgdXAgYSB3YXJuaW5nIG1lc3NhZ2UKKyMgb3V0c2lkZSB0aGUgd2luZG93LiBUZSBlcmFzZXMgdGhlIHdhcm5pbmcgbWVzc2FnZSwgcHV0cyB0aGUKKyMgd2luZG93IGJhY2sgdG8gYmUgdGhlIHdob2xlIHNjcmVlbiwgYW5kIHB1dHMgdGhlIGN1cnNvciBhdCBqdXN0CisjIGJlbG93IHRoZSBzbWFsbCB3aW5kb3cuIEkgZGVmaW5lZCA8Y25vcm0+IGFuZCA8Y2l2aXM+IHRvIHJlYWxseSB0dXJuCisjIHRoZSBjdXJzb3Igb24gYW5kIG9mZiwgYnV0IEkgaGF2ZSB0YWtlbiB0aGlzIG91dCBzaW5jZSBJIGRvbid0CisjIGxpa2UgdGhlIGN1cnNvciBiZWluZyB0dXJuZWQgb2ZmIHdoZW4gdmkgZXhpdHMuCitjZzc5MDB8Y2hyb21hdGljc3xjaHJvbWF0aWNzIDc5MDAsCisJYW0sCisJY29scyM4MCwgbGluZXMjNDAsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9Xl0sCisJY3VwPVwwMDFNJXAyJWRcLCVwMSVkXCwsIGN1dTE9XkssIGRjaDE9XkE8MSwgZGwxPV5BPDIsCisJZWQ9XkFsLCBlbD1eQWAsIGhvbWU9XlwsIGljaDE9XkE+MSwgaWwxPV5BPjIsIGluZD1eSiwgbGw9XkF8LAorCXJtY3VwPVwwMDFXMFwsNDBcLDg1XCw0OFwsXDAxNFwwMDFXMFwsMFwsODVcLDQ4XCxcMDAxTTBcLDQwXCwsCisJcm1zbz1cMDAxQzFcLFwwMDFjMlwsLAorCXNtY3VwPVwwMDFQMFwwMDFPMVwwMDFSMVwwMDFDNFwsXDAwMWMwXCxcMDE0XDAwMU0wXCw0MlwsV0FSTklORyBET1VCTEUgRU5URVIgRVNDQVBFIGFuZCBcMDI1XDAwMUMxXCxcMDAxYzJcLFwwMDFXMFwsMFwsNzlcLDM5XCwsCisJc21zbz1cMDAxQzRcLFwwMDFjN1wsLCB1Yz1cMDAxXDAwMV9cMDAxXDAsCisKKyMjIyMgQ29tcHV0ZXIgQXV0b21hdGlvbgorIworCitjYTIyODUxfGNvbXB1dGVyIGF1dG9tYXRpb24gMjI4NTEsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDE0JDw4PiwgY3I9Xk0sIGN1YjE9XlUsIGN1ZDE9XkosIGN1ZjE9XkksCisJY3VwPVwwMDIlaSVwMSVjJXAyJWMsIGN1dTE9XlYsIGVkPV5cLCBlbD1eXSwgaG9tZT1eXiwgaW5kPV5KLAorCWtjdWIxPV5VLCBrY3VkMT1eVywga2N1dTE9XlYsIGtob21lPV5eLAorCisjIyMjIEN5YmVybmV4CisjCisKKyMgVGhpcyBlbnRyeSBoYXMgY29ycmVjdCBwYWRkaW5nIGFuZCB0aGUgdW5kb2N1bWVudGVkICJyaSIgY2FwYWJpbGl0eQorY3liODN8eGw4M3xjeWJlcm5leCB4bC04MywKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDYyPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkksCisJY3VwPVwwMjclcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9Xk4sCisJZWQ9XDAyMCQ8NjI+LCBlbD1cMDE3JDwzPiwgaG9tZT1eSywgaW5kPV5KLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkksIGtjdXUxPV5OLCByaT1eTiwKKyMgKG1kbDExMDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5aXlA6IiBhbmQgb3ZlcnJpZGRlbiAiOmNkPTE0NV5OQV5XOiIgLS0gZXNyKQorY3liMTEwfG1kbDExMHxjeWJlcm5leCBtZGwtMTEwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAzMCQ8NzA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eVSwKKwljdXA9XDAyMCVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eWiwKKwlkY2gxPVwwMTZBXDAzNiQ8My41PiwgZGwxPVwwMTZBXDAxNlwwMzYkPDQwPiwKKwllZD1cMDE2QFwwMjYkPDY+LCBlbD1cMDE2QFwwMjYkPDE0NT4sIGhvbWU9XlksCisJaHQ9XDAxMSQ8NDM+LCBpY2gxPVwwMTZBXDAzNSQ8My41PiwKKwlpbDE9XDAxNkFcMDE2XDAzNSQ8NjU+LCBpbmQ9XkosIHJtc289Xk5HLCBzbXNvPV5ORiwKKworIyMjIyBEYXRhcG9pbnQKKyMKKyMgRGF0YXBvaW50IGlzIGdvbmUuICBUaGV5IHVzZWQgdG8gYmUgaGVhZHF1YXJ0ZXJlZCBpbiBUZXhhcy4KKyMgVGhleSBjcmVhdGVkIEFSQ25ldCwgYW4gRXRoZXJuZXQgY29tcGV0aXRvciB0aGF0IGZsb3VyaXNoZWQgZm9yIGEgd2hpbGUKKyMgaW4gdGhlIGVhcmx5IDE5ODBzIGJlZm9yZSAzQ09NIGdvdCB3aXNlIGFuZCBjdXQgaXRzIHByaWNlcy4gIFRoZSBzZXJ2aWNlCisjIHNpZGUgb2YgRGF0YXBvaW50IHN0aWxsIGxpdmVzICgxOTk1KSBpbiB0aGUgZm9ybSBvZiBJbnRlbG9naWMgVHJhY2UuCisjCisKK2RwMzM2MHxkYXRhcG9pbnR8ZGF0YXBvaW50IDMzNjAsCisJT1RicywgYW0sCisJY29scyM4MiwgbGluZXMjMjUsCisJYmVsPV5HLCBjbGVhcj1eXV5fLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eWCwgY3V1MT1eWiwKKwllZD1eXywgZWw9Xl4sIGhvbWU9Xl0sIGluZD1eSiwKKworIyBGcm9tOiBKYW4gV2lsbGVtIFN0dW1wZWwgPGp3LnN0dW1wZWxAaW50ZXIubmwubmV0PiwgMTEgTWF5IDE5OTcKKyMgVGhlIERhdGFwb2ludCA4MjQyIFdvcmtzdGF0aW9uIHdhcyBzb2xkIGF0IGxlYXN0IGJldHdlZW4gMTk4NQorIyBhbmQgMTk4OS4gVG8gbWFrZSB0aGUgdGVybWluYWwgd29yayB3aXRoIHRoaXMgZW50cnksIHByZXNzCisjIENPTlRST0wtSU5ULUlOVCB0byB0YWtlIHRoZSB0ZXJtaW5hbCBvZmYtbGluZSwgYW5kIHR5cGUgKG9wdCkuCisjIFNldCB0aGUgb3B0aW9ucyBBVVRPIFJPTEwsIFJPTEwgRE4sIGFuZCBFU0MgS0JEIG9uLCBhbmQgQVVUTworIyBDUi9MRiBvZmYuIFVzZSBjb250cm9sLXNoaWZ0LVtdIGFzIGVzY2FwZSBrZXksIGNvbnRyb2wtSSBhcyB0YWIsCisjIHNoaWZ0LUYxIHRvIHNoaWZ0LUY1IGFzIEY2IHRvIEYxMCAodW5zaGlmdGVkIEYxIHRvIEY1IGFyZSBpbgorIyBmYWN0IHVudXNhYmxlIGJlY2F1c2UgdGhlIHN0cmluZ3Mgc2VudCBieSB0aGUgdGVybWluYWwgY29uZmxpY3QKKyMgd2l0aCBvdGhlciBrZXlzKS4KKyMgVGhlIHRlcm1pbmFsIGlzIGNhcGFibGUgb2YgZGlzcGxheWluZyAiYm94IGRyYXciIGNoYXJhY3RlcnMuCisjIEZvciBlYWNoIGdyYXBoaWMgY2hhcmFjdGVyIHlvdSBtdXN0IHNlbmQgMiBFU0MncyAoXEVcRSkgZm9sbG93ZWQKKyMgYnkgYSBjb250cm9sIGNoYXJhY3RlciBhcyBmb2xsb3dzOgorIyAgICAgICAgIGNoYXJhY3RlciAgICAgICAgbWVhbmluZworIyAgICAgICAgID09PT09PT09PSAgICAgICAgPT09PT09PQorIyAgICAgICAgIGN0cmwtRSAgICAgICAgICAgdG9wIHRlZQorIyAgICAgICAgIGN0cmwtRiAgICAgICAgICAgcmlnaHQgdGVlCisjICAgICAgICAgY3RybC1HICAgICAgICAgICBib3R0b20gdGVlCisjICAgICAgICAgY3RybC1IICAgICAgICAgICBsZWZ0IHRlZQorIyAgICAgICAgIGN0cmwtSSAgICAgICAgICAgY3Jvc3MKKyMgICAgICAgICBjdHJsLUogICAgICAgICAgIHRvcCBsZWZ0IGNvcm5lcgorIyAgICAgICAgIGN0cmwtSyAgICAgICAgICAgdG9wIHJpZ2h0IGNvcm5lcgorIyAgICAgICAgIGN0cmwtTCAgICAgICAgICAgYm90dG9tIGxlZnQgY29ybmVyCisjICAgICAgICAgY3RybC1NICAgICAgICAgICBib3R0b20gcmlnaHQgY29ybmVyCisjICAgICAgICAgY3RybC1OICAgICAgICAgICBob3Jpem9udGFsIGxpbmUKKyMgICAgICAgICBjdHJsLU8gICAgICAgICAgIHZlcnRpY2FsIGxpbmUKKyMgVW5mb3J0dW5hdGVseSB0aGlzIGNhbm5vdCBiZSBmaXR0ZWQgaW50byB0aGUgdGVybWNhcC90ZXJtaW5mbworIyBkZXNjcmlwdGlvbiBzY2hlbWUuCitkcDgyNDJ8ZGF0YXBvaW50IDgyNDIsCisJbXNnciwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwliZWw9XkcsIGNpdmlzPV5ZLCBjbGVhcj1cMDI1XEVcMDA0XDAyN1wwMzAsIGNub3JtPV5YLAorCWNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1cD1cMDExJXAyJSdcMCclKyVjJXAxJSdcMCclKyVjLCBkbDE9XEVeWiwgZWQ9XlcsIGVsPV5WLAorCWhvbWU9XlUsIGh0PV5JLCBpbDE9XEVeVCwgaW5kPV5DLAorCWlzMT1cRVwwMTRcRVwwMTZcMFwyMzBcMFwzMTdcMDI1XDAyN1wwMzBcRVwwMDQsCisJa2JzPV5ILCBrY3ViMT1eRCwga2N1ZDE9XkIsIGtjdWYxPV5GLCBrY3V1MT1eRSwga2YxPV5HXEVlLAorCWtmMTA9XEVLXEVhLCBrZjI9XklcRWQsIGtmMz1eSlxFYywga2Y0PV5KXEViLCBrZjU9XlNcRWEsCisJa2Y2PVxFT1xFZSwga2Y3PVxFTlxFZCwga2Y4PVxFTVxFYywga2Y5PVxFTFxFYiwgbmVsPV5NXkosCisJcmVwPVxFXDAyMyVwMSVjJXAyJWMsIHJpPV5LLCBybXNvPVxFXkQsIHJtdWw9XEVeRCwKKwlyczE9XEVcMDE0XEVcMDE2XDBcMjMwXDBcMzE3XDAyNVwwMjdcMDMwXEVcMDA0LAorCXNtc289XEVeRSwgc211bD1cRV5GLAorCXdpbmQ9XEVcMDE0XEVcMDE2JXAxJSdcMCclKyVjJXAyJSdcMCclKyVjJXAzJSdcMCclKyVjJXA0JSdcMCclKyVjXDAyNSwKKworIyMjIyBERUMgdGVybWluYWxzIChPYnNvbGV0ZSB0eXBlczogREVDd3JpdGVyIGFuZCB2dDQwLzQyLzUwKQorIworIyBUaGVzZSBlbnRyaWVzIGFyZSBERUMncyBvZmZpY2lhbCB0ZXJtaW5mb3MgZm9yIGl0cyBvbGRlciB0ZXJtaW5hbHMuCisjIENvbnRhY3QgQmlsbCBIZWRiZXJnIDxoZWRiZXJnQGhhbm5haC5lbmV0LmRlYy5jb20+IG9mIFRlcm1pbmFsIFN1cHBvcnQKKyMgRW5naW5lZXJpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBVcGRhdGVkIHRlcm1pbmZvcyBhbmQgdGVybWNhcHMKKyMgYXJlIGtlcHQgYXZhaWxhYmxlIGF0IGZ0cDovL2dhdGVrZWVwZXIuZGVjLmNvbS9wdWIvREVDL3Rlcm1jYXBzLgorIworCitndDQwfGRlYyBndDQwLAorCU9UYnMsIG9zLAorCWNvbHMjNzIsIGxpbmVzIzMwLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCitndDQyfGRlYyBndDQyLAorCU9UYnMsIG9zLAorCWNvbHMjNzIsIGxpbmVzIzQwLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCit2dDUwfGRlYyB2dDUwLAorCU9UYnMsCisJY29scyM4MCwgbGluZXMjMTIsCisJYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXUxPVxFQSwgZWQ9XEVKLCBlbD1cRUssIGh0PV5JLCBpbmQ9XkosCit2dDUwaHxkZWMgdnQ1MGgsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMxMiwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlZD1cRUosCisJZWw9XEVLLCBodD1eSSwgaW5kPV5KLCByaT1cRUksCisjICh2dDYxOiB0aGVyZSdzIGEgQlNEIHRlcm1jYXAgdGhhdCBjbGFpbXMgPGRsMT1cRVBkPiwgPGlsMT1cRVBmLj4gPGticz1eSD4pCit2dDYxfHZ0LTYxfHZ0NjEuNXxkZWMgdnQ2MSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiQ8MTIwPiwgY3I9XHIkPDIwPiwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFQyQ8MjA+LCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwyMD4sCisJY3V1MT1cRUEkPDIwPiwgZWQ9XEVKJDwxMjA+LCBlbD1cRUskPDcwPiwgaHQ9XkksCisJaW5kPVxuJDwyMD4sIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlyaT1cRSQ8MjA+SSwKKworIyBUaGUgZ2lnaSBkb2VzIHN0YW5kb3V0IHdpdGggcmVkIQorIyAoZ2lnaTogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZywgY29ycmVjdGVkIGN1YjEgLS0gZXNyKQorZ2lnaXx2azEwMHxkZWMgZ2lnaSBncmFwaGljcyB0ZXJtaW5hbCwKKwlPVGJzLCBhbSwgeGVubCwKKwljb2xzIzg0LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBlZD1cRVtKLAorCWVsPVxFW0ssIGh0PV5JLCBpbmQ9XkosCisJaXMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz8yMGxcRVs/N2hcRVs/OGgsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YxPVxFT1AsCisJa2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2hvbWU9XEVbSCwgcmk9XEVNLAorCXJtYW09XEVbPzdsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbNzszMW0sCisJc211bD1cRVs0bSwKKworIyBERUMgUFJPLTM1MCBjb25zb2xlIChWVDIyMC1zdHlsZSkuICBUaGUgMzUwIHdhcyBERUMncyBhdHRlbXB0IHRvIHByb2R1Y2UKKyMgYSBQQyBkaWZmZXJlbnRpYXRlZCBmcm9tIHRoZSBJQk0gY2xvbmVzLiAgSXQgd2FzIGEgdG90YWwsIGx1ZGljcm91cywKKyMgZ3Jvc3NseS1vdmVycHJpY2VkIGZhaWx1cmUgKGFtb25nIG90aGVyIHRoaW5ncywgREVDJ3MgT1MgZGlkbid0IGluY2x1ZGUKKyMgYSBmb3JtYXQgcHJvZ3JhbSwgc28geW91IGhhZCB0byBidXkgcHJlLWZvcm1hdHRlZCBmbG9wcGllcyBmcm9tIERFQyBhdAorIyBhIGhlZnR5IHByZW1pdW0hKS4KK3BybzM1MHxkZWNwcm98ZGVjIHBybyBjb25zb2xlLAorCU9UYnMsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwljbGVhcj1cRUhcRUosIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZWQ9XEVKLAorCWVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2YwPVxFRSwga2YxPVxFRiwga2YyPVxFRywga2YzPVxFSCwga2Y0PVxFSSwKKwlrZjU9XEVKLCBrZjY9XEVpLCBrZjc9XEVqLCBraG9tZT1cRUgsIHJpPVxFSSwgcm1hY3M9XEVHLAorCXJtc289XEVeTiwgcm11bD1cRV5DLCBzbWFjcz1cRUYsIHNtc289XEVeSCwgc211bD1cRV5ELAorCitkdzF8ZGVjd3JpdGVyIEksCisJT1RicywgaGMsIG9zLAorCWNvbHMjNzIsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaW5kPV5KLAorZHcyfGRlY3dyaXRlcnxkd3xkZWN3cml0ZXIgSUksCisJT1RicywgaGMsIG9zLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGluZD1eSiwga2JzPV5ILAorIyBcRShCCQlVc2UgVS5TLiBjaGFyYWN0ZXIgc2V0IChvdGhlcndpc2UgIyA9PiBicml0aXNoIHBvdW5kICEpCisjIFxFWzIwbAlEaXNhYmxlICJsaW5lZmVlZCBuZXdsaW5lIiBtb2RlIChlbHNlIHB1dHMgXHIgYWZ0ZXIgXG4sXGYsXHYpCisjIFxFW3cgICAJMTAgY2hhci9pbiBwaXRjaAorIyBcRVsxOzEzMglmdWxsIHdpZHRoIGhvcml6b250YWwgbWFyZ2lucworIyBcRVsyZwkJY2xlYXIgYWxsIHRhYiBzdG9wcworIyBcRVt6CQk2IGxpbmVzL2luCisjIFxFWzY2dAk2NiBsaW5lcy9wYWdlIChmb3IgXGYpCisjIFxFWzE7NjZyCWZ1bGwgdmVydGljYWwgcGFnZSBjYW4gYmUgcHJpbnRlZAorIyBcRVs0ZwkJY2xlYXIgdmVydGljYWwgdGFiIHN0b3BzCisjIFxFPgkJZGlzYWJsZSBhbHRlcm5hdGUga2V5cGFkIG1vZGUgKHNvIGl0IHRyYW5zbWl0cyBudW1iZXJzISkKKyMgXEVbJWklcDElZHUJc2V0IHRhYiBzdG9wIGF0IGNvbHVtbiAlZCAob3JpZ2luID09IDEpCisjCQkoRnVsbCBzeW50YXggaXMgXEVbbjtuO247bjtuOy4uLjtudSB3aGVyZSBlYWNoICduJyBpcworIwkJYSB0YWIgc3RvcCkKKyMKKyMgICAgICAgVGhlIGR3MyBkb2VzIHN0YW5kb3V0IHdpdGggd2lkZSBjaGFyYWN0ZXJzLgorIworZHczfGxhMTIwfGRlY3dyaXRlciBJSUksCisJT1RicywgaGMsIG9zLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosCisJaXMxPVxFKEJcRVsyMGxcRVt3XEVbMDsxMzJzXEVbMmdcRVt6XEVbNjZ0XEVbMTs2NnJcRVs0Z1xFPiwKKwlpczI9XEVbOTsxNzsyNTszMzs0MTs0OTs1Nzs2NTs3Mzs4MTs4OTs5NzsxMDU7MTEzOzEyMTsxMjl1XHIsCisJa2JzPV5ILCBybXNvPVxFW3csIHNncjA9XEVbdywgc21zbz1cRVs2dywKK2R3NHxkZWN3cml0ZXIgSVYsCisJT1RicywgYW0sIGhjLCBvcywKKwljb2xzIzEzMiwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBodD1eSSwgaW5kPV5KLCBpczI9XEVjLCBrYnM9XkgsCisJa2YwPVxFT1AsIGtmMT1cRU9RLCBrZjI9XEVPUiwga2YzPVxFT1MsCisKKyMgVGhlc2UgYXJlbid0IG9mZmljaWFsCitsbjAzfGRlYyBsbjAzIGxhc2VyIHByaW50ZXIsCisJaGMsCisJY29scyM4MCwgbGluZXMjNjYsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgaGQ9XEVLLCBodD1eSSwgaHU9XEVMLCBpbmQ9XkosIG5lbD1eTV5KLAorCXJtc289XEVbMjJtLCBybXVsPVxFWzI0bSwgc2dyMD1cRVttLCBzbXNvPVxFWzFtLAorCXNtdWw9XEVbNG0sCitsbjAzLXd8ZGVjIGxuMDMgbGFzZXIgcHJpbnRlciAxMzIgY29scywKKwljb2xzIzEzMiwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBuZWw9Xk1eSiwgdXNlPWxuMDMsCisKKyMjIyMgRGVsdGEgRGF0YSAoZGQpCisjCisKKyMgVW50ZXN0ZWQuIFRoZSBjdXAgc2VxdWVuY2UgaXMgaGFpcnkgZW5vdWdoIHRoYXQgaXQgcHJvYmFibHkgbmVlZHMgd29yay4KKyMgVGhlIGlkZWEgaXMgY3RybChPKSwgZGQocm93KSwgZGQoY29sKSwgd2hlcmUgZGQoeCkgaXMgeCAtIDIqKHglMTYpICsgJzknLgorIyBUaGVyZSBhcmUgQlNELWRlcml2ZWQgdGVybWNhcCBlbnRyaWVzIGZsb2F0aW5nIGFyb3VuZCBmb3IgdGhpcyBwdXBweQorIyB0aGF0IGFyZSAqY2VydGFpbmx5KiB3cm9uZy4KK2RlbHRhfGRkNTAwMHxkZWx0YSBkYXRhIDUwMDAsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjcsCisJYmVsPV5HLCBjbGVhcj1eTlIsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlksCisJY3VwPVwwMTclcDElcDElezE2fSVtJXsyfSUqJS0lezU3fSUrJWMlcDIlcDIlezE2fSVtJXsyfSUqJS0lezU3fSUrJWMsCisJY3V1MT1eWiwgZGNoMT1eTlYsIGVsPV5OVSwgaG9tZT1eTlEsIGluZD1eSiwKKworIyMjIyBEaWdpdGFsIERhdGEgUmVzZWFyY2ggKGRkcikKKyMKKworIyAoZGRyOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2RkcnxyZWJ1czMxODB8ZGRyMzE4MHxSZWJ1cy9ERFIgMzE4MCB2dDEwMCBlbXVsYXRvciwKKwlPVGJzLCBhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlibGluaz1cRVs1bSQ8Mi8+LCBib2xkPVxFWzFtJDwyLz4sCisJY2xlYXI9XEVbSFxFWzJKJDw1MC8+LCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1cRVtDJDwyLz4sIGN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8NS8+LAorCWN1dTE9XEVbQSQ8Mi8+LCBlZD1cRVtKJDw1MC8+LCBlbD1cRVtLJDwzLz4sIGhvbWU9XEVbSCwKKwlodD1eSSwgaW5kPVxFRCQ8NS8+LCBpczI9XEVbMTsyNHJcRVsyNDsxSCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHJjPVxFOCwgcmV2PVxFWzdtJDwyLz4sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIHJpPVxFTSQ8NS8+LCBybWFtPVxFWzdsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSQ8Mi8+LAorCXJzMT1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3IwPVxFW20kPDIvPiwgc21hbT1cRVs3bCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSQ8Mi8+LAorCisjIyMjIEV2YW5zICYgU3V0aGVybGFuZAorIworCisjIEpvbiBMZWVjaCA8bGVlY2hAY3MudW5jLmVkdT4gdGVsbHMgdXM6CisjIFRoZSBwczMwMCB3YXMgdGhlIEV2YW5zICYgU3V0aGVybGFuZCBQaWN0dXJlIFN5c3RlbSAzMDAsIGEgaGlnaAorIyBwZXJmb3JtYW5jZSAzRCB2ZWN0b3IgZ3JhcGhpY3Mgc3lzdGVtIHdpdGggYSBidW5jaCBvZiBzcGVjaWFsaXplZCBoYXJkd2FyZS4KKyMgQXBwcm94aW1hdGUgZGF0ZSBvZiByZWxlYXNlIHdhcyAxOTgyIChlYXJseSA4MHMsIGFueXdheSksIGFuZCBpdCBoYWQgc2V2ZXJhbAorIyBldm9sdXRpb25zIGluY2x1ZGluZyAobGltaXRlZCkgY29sb3IgdmVyc2lvbnMgc3VjaCBhcyB0aGUgUFMzMzBDLiBQUzMwMHMKKyMgd2VyZSBlZmZlY3RpdmVseSBvYnNvbGV0ZSBieSB0aGUgbGF0ZSA4MHMsIHJlcGxhY2VkIGJ5IHJhc3RlciBncmFwaGljcworIyBzeXN0ZW1zLCBhbHRob3VnaCBzcGVjaWFsaXplZCBhcHBsaWNhdGlvbnMgbGlrZSBtb2xlY3VsYXIgbW9kZWxsaW5nCisjIGh1bmcgb250byB0aGVtIGZvciBhIHdoaWxlIGxvbmdlci4gIEFGQUlLIGFsbCBFJlMgdmVjdG9yIGdyYXBoaWNzIHN5c3RlbXMKKyMgYXJlIG91dCBvZiBwcm9kdWN0aW9uLCB0aG91Z2ggb2YgY291cnNlIEUmUyBpcyB2ZXJ5IG11Y2ggYWxpdmUgKGluIDE5OTYpLgorIyAocHMzMDA6IGNoYW5nZWQgIjpwdEA6IiB0byAiaXRAIiAtLSBlc3IpCisjCitwczMwMHxQaWN0dXJlIFN5c3RlbSAzMDAsCisJeHQsCisJaXRALAorCXJtc29ALCBybXVsQCwgc21zb0AsIHNtdWxALCB1c2U9dnQxMDAsCisKKyMjIyMgR2VuZXJhbCBFbGVjdHJpYyAoZ2UpCisjCisKK3Rlcm1pbmV0MTIwMHx0ZXJtaW5ldDMwMHx0bjEyMDB8dG4zMDB8dGVybWluZXR8R0UgdGVybWluZXQgMTIwMCwKKwlPVGJzLCBoYywgb3MsCisJY29scyMxMjAsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgaW5kPV5KLAorCisjIyMjIEhlYXRoa2l0L1plbml0aAorIworCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgSDE5IERJUCBzd2l0Y2hlczoKKyMKKyMgUzQwMQorIyAwLTMgPSBiYXVkIHJhdGUgYXMgZm9sbG93czoKKyMKKyMgICAgICAgICAzICAgICAgIDIgICAgICAgMSAgICAgICAwCisjCS0tLQktLS0JLS0tCS0tLQorIyAgICAgICAgIDAgICAgICAgMCAgICAgICAxICAgICAgIDEgICAgICAgMzAwIGJhdWQKKyMgICAgICAgICAwICAgICAgIDEgICAgICAgMCAgICAgICAxICAgICAgIDEyMDAgYmF1ZAorIyAgICAgICAgIDEgICAgICAgMCAgICAgICAwICAgICAgIDAgICAgICAgMjQwMCBiYXVkCisjICAgICAgICAgMSAgICAgICAwICAgICAgIDEgICAgICAgMCAgICAgICA0ODAwIGJhdWQKKyMgICAgICAgICAxICAgICAgIDEgICAgICAgMCAgICAgICAwICAgICAgIDk2MDAgYmF1ZAorIyAgICAgICAgIDEgICAgICAgMSAgICAgICAwICAgICAgIDEgICAgICAgMTkuMksgYmF1ZAorIworIyA0ID0gcGFyaXR5ICgwID0gbm8gcGFyaXR5KQorIyA1ID0gZXZlbiBwYXJpdHkgKDAgPSBvZGQgcGFyaXR5KQorIyA2ID0gc3RpY2sgcGFyaXR5ICgwID0gbm9ybWFsIHBhcml0eSkKKyMgNyA9IGZ1bGwgZHVwbGV4ICgwID0gaGFsZiBkdXBsZXgpCisjCisjIFM0MDIKKyMgMCA9IGJsb2NrIGN1cnNvciAoMCA9IHVuZGVyc2NvcmUgY3Vyc29yKQorIyAxID0gbm8ga2V5IGNsaWNrICgwID0ga2V5Y2xpY2spCisjIDIgPSB3cmFwIGF0IGVuZCBvZiBsaW5lICgwID0gbm8gd3JhcCkKKyMgMyA9IGF1dG8gTEYgb24gQ1IgKDAgPSBubyBMRiBvbiBDUikKKyMgNCA9IGF1dG8gQ1Igb24gTEYgKDAgPSBubyBDUiBvbiBMRikKKyMgNSA9IEFOU0kgbW9kZSAoMCA9IFZUNTIgbW9kZSkKKyMgNiA9IGtleXBhZCBzaGlmdGVkICgwID0ga2V5cGFkIHVuc2hpZnRlZCkKKyMgNyA9IDUwSHogcmVmcmVzaCAoMSA9IDYwSHogcmVmcmVzaCkKKyMKKyMgRmFjdG9yeSBEZWZhdWx0IHNldHRpbmdzIGFyZSBhcyBmb2xsb3dzOgorIyAgICAgICAgICA3IDYgNSA0IDMgMiAxIDAKKyMgUzQwMSAgICAgMSAwIDAgMCAxIDEgMCAwCisjIFM0MDIgICAgIDAgMCAwIDAgMCAwIDAgMAorIyAoaDE5OiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nOworIyBhbHNvIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyBhIHRpYyB3YXJuaW5nIC0tIGVzcikKK2gxOS1hfGgxOWF8aGVhdGgtYW5zaXxoZWF0aGtpdC1hfGhlYXRoa2l0IGgxOSBhbnNpIG1vZGUsCisJT1RicywgYW0sIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPSwgYmVsPV5HLCBjbGVhcj1cRVsySiwgY25vcm09XEVbPjRsLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPVxFWzFCLCBjdWYxPVxFWzFDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVsxQSwgY3Z2aXM9XEVbPjRoLCBkY2gxPVxFWzFQLCBkbDE9XEVbMU0kPDEqPiwKKwllZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBpbDE9XEVbMUwkPDEqPiwgaW5kPV5KLAorCWlzMj1cRTxcRVs+MTsyOzM7NDs1OzY7Nzs4OzlsXEVbbVxFWzExbVxFWz83aCwKKwlrYnM9XkgsIGtjdWIxPVxFWzFELCBrY3VkMT1cRVsxQiwga2N1ZjE9XEVbMUMsIGtjdXUxPVxFWzFBLAorCWtmMT1cRU9TLCBrZjI9XEVPVCwga2YzPVxFT1UsIGtmND1cRU9WLCBrZjU9XEVPVywga2Y2PVxFT1AsCisJa2Y3PVxFT1EsIGtmOD1cRU9SLCBraG9tZT1cRVtILCBsZjY9Ymx1ZSwgbGY3PXJlZCwgbGY4PXdoaXRlLAorCXJpPVxFTSwgcm1hY3M9XEVbMTFtLCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1zbz1cRVttLAorCXNtYWNzPVxFWzEwbSwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsIHNtc289XEVbN20sCitoMTktYnN8aGVhdGhraXQgdy9rZXlwYWQgc2hpZnRlZCwKKwlybWt4PVxFdSwgc21reD1cRXQsIHVzZT1oMTktYiwKK2gxOS11c3xoMTl1c3xoMTktc211bHxoZWF0aGtpdCB3L2tleXBhZCBzaGlmdGVkL3VuZGVyc2NvcmUgY3Vyc29yLAorCXJta3g9XEV1LCBzbWt4PVxFdCwgdXNlPWgxOS11LAorIyAoaDE5OiBtZXJnZWQgaW4gPGlwPiBmcm9tIEJTREkgaHAxOS1lIGVudHJ5PjsKKyMgYWxzbyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgYSB0aWMgd2FybmluZyAtLWVzcikKKyMgRnJvbTogVGltIFBpZXJjZSA8dHdwQHNrZXBzaXMuY29tPiwgMjMgRmViIDE5OTgKKyMgVGltIHRlbGxzIHVzIHRoYXQ6CisjIEkgaGF2ZSBhbiBvbGQgWmVuaXRoLTE5IHRlcm1pbmFsIGF0IGhvbWUgdGhhdCBzdGlsbCBnZXRzIGEgbG90IG9mIHVzZS4KKyMgVGhpcyB0ZXJtaW5hbCBzdWZmZXJzIGZyb20gdGhlIHNhbWUgZmFtb3VzIGluc2VydC1tb2RlIHBhZGRpbmcgbG9zc2FnZQorIyB0aGF0IGhhcyBiZWVuIGFja25vd2xlZGdlZCBmb3IgdGhlIFoyOSB0ZXJtaW5hbC4gIEVtYWNzIGlzIG5lYXJseQorIyB1bnVzYWJsZSBvbiB0aGlzIGJveCwgc2luY2UgZXZlbiBhIGhhbGYtc2Nyb2xsIHVwIG9yIGRvd24gdGhlIHdpbmRvdworIyBjYXVzZXMgZmxhbWluZyB0ZXJtaW5hbCBkZWF0aC4KKyMKKyMgT24gdGhlIFoxOSwgdGhlIG9ubHkgd2F5IEkgaGF2ZSBmb3VuZCBhcm91bmQgdGhpcyBwcm9ibGVtIGlzIHRvIHJlbW92ZQorIyB0aGUgOmFsOiBhbmQgOmRsOiBlbnRyaWVzIGVudGlyZWx5LiAgTm8gYW1vdW50IG9mIGV4dHJhIHBhZGRpbmcgd2lsbAorIyBoZWxwIChJIGhhdmUgdHJpZWQgdXAgdG8gMjAwMDApLiAgUmVtb3ZpbmcgPGlsMT1cRUwkPiBhbmQgPGRsMT1cRU0kPgorIyBtYWtlcyBFbWFjcyBhIGxpdHRsZSBzbG93ZXIsIGJ1dCBpdCByZW1haW5zIGluIHRoZSBsYW5kIG9mIHRoZSBsaXZpbmcuCisjIEJpZyB3aW4uCitoMTl8aGVhdGh8aDE5LWJ8aGVhdGhraXR8aGVhdGgtMTl8ejE5fHplbml0aHxoZWF0aGtpdCBoMTksCisJT1RicywgYW0sIGVzbG9rLCBocywgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9flxeeGBxYW5ia2NqZG1lbGZnZytoYWkua3dzdXR2dXR2b3pzeywgYmVsPV5HLAorCWNsZWFyPVxFRSwgY25vcm09XEV5NCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgY3Z2aXM9XEV4NCwKKwlkY2gxPVxFTiwgZWQ9XEVKLCBlbD1cRUssIGZzbD1cRWtcRXk1LCBob21lPVxFSCwgaHQ9XkksIGluZD1eSiwKKwlpcD08MS41Lz4sIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtmMT1cRVMsIGtmMj1cRVQsIGtmMz1cRVUsIGtmND1cRVYsIGtmNT1cRVcsCisJa2Y2PVxFUCwga2Y3PVxFUSwga2Y4PVxFUiwga2hvbWU9XEVILCBsZjY9Ymx1ZSwgbGY3PXJlZCwKKwlsZjg9d2hpdGUsIHJpPVxFSSwgcm1hY3M9XEVHLCBybWlyPVxFTywgcm1zbz1cRXEsIHNtYWNzPVxFRiwKKwlzbWlyPVxFQCwgc21zbz1cRXAsIHRzbD1cRWpcRXg1XEVZOCVwMSV7MzJ9JSslY1xFb1xFbywKK2gxOS11fGhlYXRoa2l0IHdpdGggdW5kZXJzY29yZSBjdXJzb3IsCisJY25vcm1ALCBjdnZpc0AsIHVzZT1oMTktYiwKK2gxOS1nfGgxOWd8aGVhdGhraXQgdy9ibG9jayBjdXJzb3IsCisJY25vcm09XEV4NCwgY3Z2aXNALCB1c2U9aDE5LWIsCithbHRvLWgxOXxhbHRvaDE5fGFsdG9oZWF0aHxhbHRvLWhlYXRofGFsdG8gZW11bGF0aW5nIGhlYXRoa2l0IGgxOSwKKwlsaW5lcyM2MCwKKwlkbDE9XEVNLCBpbDE9XEVMLCB1c2U9aDE5LAorCisjIFRoZSBtYWpvciBwcm9ibGVtIHdpdGggdGhlIFoyOSBpcyB0aGF0IGl0IHJlcXVpcmVzIG1vcmUgcGFkZGluZyB0aGFuIHRoZSBaMTkuCisjCisjIFRoZSBwcm9ibGVtIHdpdGggZGVjbGFyaW5nIGFuIEgxOSB0byBiZSBzeW5vbnltb3VzIHdpdGggYSBaMjkgaXMgdGhhdAorIyBpdCBuZWVkcyBtb3JlIHBhZGRpbmcuIEl0IGVzcGVjaWFsbHkgbG9zZXMgaWYgYSBwcm9ncmFtIGF0dGVtcHRzCisjIHRvIHB1dCB0aGUgWjI5IGludG8gaW5zZXJ0IG1vZGUgYW5kIGluc2VydCB0ZXh0IGF0IDk2MDAgYmF1ZC4gSXQKKyMgZXZlbiBsb3NlcyB3b3JzZSBpZiB0aGUgcHJvZ3JhbSBhdHRlbXB0cyB0byBpbnNlcnQgdGFicyBhdCA5NjAwCisjIGJhdWQuIEFkZGluZyBwYWRkaW5nIHRvIHRleHQgdGhhdCBpcyBpbnNlcnRlZCBsb3NlcyBiZWNhdXNlIGluCisjIG9yZGVyIHRvIG1ha2UgdGhlIFoyOSBub3QgZGllLCBvbmUgbXVzdCBhZGQgc28gbXVjaCBwYWRkaW5nIHRoYXQKKyMgd2hlbmV2ZXIgdGhlIHByb2dyYW0gdHJpZXMgdG8gdXNlIGluc2VydCBtb2RlLCB0aGUgZWZmZWN0aXZlCisjIHJhdGUgaXMgYWJvdXQgMTEwIGJhdWQuCisjCisjIFdoYXQgcHJvZ3JhbSB3b3VsZCB3YW50IHRvIHB1dCB0aGUgdGVybWluYWwgaW50byBpbnNlcnQgbW9kZQorIyBhbmQgc2hvdmUgc3R1ZmYgYXQgaXQgYXQgOTYwMCBiYXVkIHlvdSBhc2s/CisjCisjIEVtYWNzLiBFbWFjcyBzZWVtcyB0byB3YW50IHRvIGRvIHRoZSBtYXRoZW1hdGljYWxseSBvcHRpbWFsCisjIHRoaW5nIGluIGRvaW5nIGEgcmVkaXNwbGF5IHJhdGhlciB0aGFuIHRoZSBwcmFjdGljYWwgdGhpbmcuCisjIFdoZW4gaXQgaXMgYWJvdXQgdG8gb3V0cHV0IGEgbGluZSBvbiB0b3Agb2YgYSBsaW5lIHRoYXQgaXMKKyMgYWxyZWFkeSBvbiB0aGUgc2NyZWVuLCBpbnN0ZWFkIG9mIGp1c3Qga2lsbGluZyB0byB0aGUgZW5kIG9mCisjIHRoZSBsaW5lIGFuZCBvdXRwdXR0aW5nIHRoZSBuZXcgbGluZSwgaXQgY29tcGFyZXMgdGhlIG9sZCBsaW5lCisjIGFuZCB0aGUgbmV3IGxpbmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc2ltaWxhcml0aWVzLCBpdAorIyBjb25zdHJ1Y3RzIHRoZSBuZXcgbGluZSBieSBkZWxldGluZyB0aGUgdGV4dCBvbiB0aGUgb2xkIGxpbmUKKyMgb24gdGhlIHRlcm1pbmFsIHRoYXQgaXMgYWxyZWFkeSB0aGVyZSBhbmQgdGhlbiBpbnNlcnRpbmcgbmV3CisjIHRleHQgaW50byB0aGUgbGluZSB0byB0cmFuc2Zvcm0gaXQgaW50byB0aGUgbmV3IGxpbmUgdGhhdCBpcworIyB0byBiZSBkaXNwbGF5ZWQuIFRoZSBaMjkgZG9lcyBub3QgcmVhY3Qga2luZGx5IHRvIHRoaXMuCisjCisjIEJ1dCBkb24ndCBjcnkgZm9yIHRvbyBsb25nLi4uLiBUaGVyZSBpcyBhIHNvbHV0aW9uLiBZb3UgY2FuIG1ha2UKKyMgYSB0ZXJtY2FwIGVudHJ5IGZvciB0aGUgWjI5IHRoYXQgc2F5cyB0aGUgWjI5IGhhcyBubyBpbnNlcnQgbW9kZS4KKyMgVGhlbiBFbWFjcyBjYW5ub3QgdXNlIGl0LiAiT2gsIG5vLCBidXQgbm93IGluc2VydGluZyBpbnRvIGEKKyMgbGluZSB3aWxsIGJlIHJlYWxseSBzbG93IiwgeW91IHNheS4gV2VsbCB0aGVyZSBpcyBhIHNvcnQgb2YgYQorIyBzb2x1dGlvbiB0byB0aGF0IHRvby4gVGhlcmUgaXMgYW4gaW5zZXJ0IGNoYXJhY3RlciBvcHRpb24gb24KKyMgdGhlIFoyOSB0aGF0IHdpbGwgaW5zZXJ0IG9uZSBjaGFyYWN0ZXIuIFVuZm9ydHVuYXRlbHksIGl0CisjIGludm9sdmVzIHB1dHRpbmcgdGhlIHRlcm1pbmFsIGludG8gYW5zaSBtb2RlLCBpbnNlcnRpbmcgdGhlCisjIGNoYXJhY3RlciwgYW5kIGNoYW5naW5nIGl0IGJhY2sgdG8gSDE5IG1vZGUuIEFsbCB0aGlzIHRha2VzIDEyCisjIGNoYXJhY3RlcnMuIFByZXR0eSBleHBlbnNpdmUgdG8gaW5zZXJ0IG9uZSBjaGFyYWN0ZXIsIGJ1dCBpdAorIyB3b3Jrcy4gRWl0aGVyIEVtYWNzIGRvZXNuJ3QgdHJ5IHRvIHVzZSBpdHMgaW5zZXJ0aW5nIGhhY2sgd2hlbgorIyBpdCdzIG9ubHkgZ2l2ZW4gYW4gaW5zZXJ0IGNoYXJhY3RlciBhYmlsaXR5IG9yIHRoZSBaMjkgZG9lc24ndAorIyByZXF1aXJlIHBhZGRpbmcgd2l0aCB0aGlzICh0aGUgZm9ybWVyIGlzIHByb2JhYmx5IG1vcmUgbGlrZWx5LAorIyBidXQgSSBoYXZlbid0IGNoZWNrZWQgaXQgb3V0KS4KKyMgKHoyOTogYWRkZWQgZW1wdHkgPGFjc2M+IHRvIHN1cHByZXNzIGEgdGljIHdhcm5pbmcsIG1lcmdlZCBpbgorIyBzdGF0dXMgbGluZSBjYXBhYmlsaXRpZXMgZnJvbSBCUkwgZW50cnkgLS1lc3IpCit6Mjl8emVuaXRoMjl8ejI5Ynx6ZW5pdGggejI5YiwKKwlPVGJzLCBPVHB0LCBhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsCisJT1RrbiMxMCwgY29scyM4MCwgbGluZXMjMjQsCisJT1RiYz1cRUQsIGFjc2M9LCBiZWw9XkcsIGNidD1cRS0sIGNsZWFyPVxFRSQ8MTQ+LCBjbm9ybT1cRXk0LAorCWNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRSQ8MT5BLAorCWN2dmlzPVxFeDQsIGRjaDE9XEVOJDwwLjEqPiwgZGwxPVxFTSQ8MS8+LCBkc2w9XEV5MSwKKwllZD1cRUokPDE0PiwgZWw9XEVLJDwxPiwgZnNsPVxFa1xFeTUsIGhvbWU9XEVILCBodD1eSSwKKwlpY2gxPVxFPFxFWzFAXEVbPzJoJDwxPiwgaWwxPVxFTCQ8MS8+LCBpbmQ9XG4kPDI+LAorCWlzMj1cRTxcRVs/MmhcRXYsIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtmMD1cRX4sIGtmMT1cRVMsIGtmMj1cRVQsIGtmMz1cRVUsIGtmND1cRVYsCisJa2Y1PVxFVywga2Y2PVxFUCwga2Y3PVxFUSwga2Y4PVxFUiwga2Y5PVxFMEksIGtob21lPVxFSCwKKwlsZjA9aG9tZSwgcmk9XEVJJDwyLz4sIHJtYWNzPVxFRiwgcm1pcj1cRU8sIHJtc289XEVxLAorCXJtdWw9XEVzMCwgc21hY3M9XEVHLCBzbWlyPVxFQCwgc21zbz1cRXAsIHNtdWw9XEVzOCwKKwl0c2w9XEVqXEV4NVxFeDFcRVk4JSsgXEVvLAorIyB6MjkgaW4gYW5zaSBtb2RlLiBBc3N1bWVzIHRoYXQgdGhlIGN1cnNvciBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgYW5kIHRoYXQKKyMgdGhlIHdvcmxkIGlzIHN0YWJsZS4gPHJzMT4gY2F1c2VzIHRoZSB0ZXJtaW5hbCB0byBiZSByZXNldCB0byB0aGUgc3RhdGUKKyMgaW5kaWNhdGVkIGJ5IHRoZSBuYW1lLiBrYyAtPiBrZXkgY2xpY2ssIG5rYyAtPiBubyBrZXkgY2xpY2ssIHVjIC0+IHVuZGVyc2NvcmUKKyMgY3Vyc29yLCBiYyAtPiBibG9jayBjdXJzb3IuCisjIEZyb206IE1pa2UgTWV5ZXJzCisjICh6MjlhOiByZXBsYWNlZCBub25leGlzdGVudCA8aWY9L3Vzci9zaGFyZS90YWJzZXQvemVuaXRoMjk+IGJlZmF1c2UgPGh0cz4KKyMgbG9va3MgdnQxMDAtY29tcGF0aWJsZSAtLSBlc3IpCit6MjlhfHoyOWEta2MtYmN8aDI5YS1rYy1iY3xoZWF0aC96ZW5pdGggMjkgaW4gYW5zaSBtb2RlLAorCU9UYnMsIE9UcHQsIGFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwKKwlPVGtuIzEwLCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlPVGJjPVxFRCwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsybSwgY2xlYXI9XEVbMkosCisJY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVsxUCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sCisJZHNsPVxFWz4xbCwgZWQ9XEVbSiwgZWw9XEVbSywgZnNsPVxFW3VcRVs+NWwsIGhvbWU9XEVbSCwKKwlodD1eSSwgaHRzPVxFSCwgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIGlsPVxFWyVwMSVkTCwKKwlpbmQ9XEVELCBrYnM9XkgsIGtjbHI9XEVbSiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwKKwlrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZWQ9XEVbSiwga2YwPVxFW34sIGtmMT1cRU9TLAorCWtmMj1cRU9ULCBrZjM9XEVPVSwga2Y0PVxFT1YsIGtmNT1cRU9XLCBrZjY9XEVPUCwga2Y3PVxFT1EsCisJa2Y4PVxFT1IsIGtmOT1cRU9YLCBraG9tZT1cRVtILCBsZjA9aGVscCwgbWMwPVxFIzcsCisJbmVsPV5NXEVELCByYz1cRVtyLCByZXY9XEVbN20sIHJpPVxFTSwgcm1jdXA9XEVbPzdoLAorCXJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cRTxcRVsxOzI0clxFWzI0OzFIXEVbPzdoXEVbPjRoXEVbPjE7MjszOzU7Njs3Ozg7OWxcRVttXEVbMTFtLAorCXNjPVxFW3MsIHNncjA9XEVbbSwgc21jdXA9XEVbPzdsLCBzbXNvPVxFWzc7Mm0sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVbc1xFWz41OzFoXEVbMjU7JWklZEhcRVsxSywKK3oyOWEta2MtdWN8aDI5YS1rYy11Y3x6MjkgYW5zaSBtb2RlIHdpdGgga2V5Y2tpY2sgYW5kIHVuZGVyc2NvcmUgY3Vyc29yLAorCXJzMT1cRTxcRVsxOzI0clxFWzI0OzFIXEVbPzdoXEVbPjE7MjszOzQ7NTs2Ozc7ODs5bFxFW21cRVsxMW0sCisJdXNlPXoyOWEsCit6MjlhLW5rYy1iY3xoMjlhLW5rYy1iY3x6MjkgYW5zaSBtb2RlIHdpdGggYmxvY2sgY3Vyc29yIGFuZCBubyBrZXljbGljaywKKwlyczE9XEU8XEVbMTsyNHJcRVsyNDsxSFxFWz83aFxFWz4yOzRoXEVbPjE7Mzs1OzY7Nzs4OzlsXEVbbVxFWzExbSwKKwl1c2U9ejI5YSwKK3oyOWEtbmtjLXVjfGgyOWEtbmtjLXVjfHoyOSBhbnNpIG1vZGUgd2l0aCB1bmRlcnNjb3JlIGN1cnNvciBhbmQgbm8ga2V5Y2xpY2ssCisJcnMxPVxFPFxFWzE7MjRyXEVbMjQ7MUhcRVs/N2hcRVs+MmhcRVs+MTszOzQ7NTs2Ozc7ODs5bFxFW21cRVsxMW0sCisJdXNlPXoyOWEsCisjIEZyb206IEplZmYgQmFydGlnIDxqZWZmYkBkb250LmRvaXQud2lzYy5lZHU+IDMxIE1hciAxOTk1Cit6MzktYXx6MzlhfHplbml0aDM5LWF8emVuaXRoMzktYW5zaXxaZW5pdGggMzkgaW4gQU5TSSBtb2RlLAorCWFtLCBlc2xvaywgaHMsIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9MGFgYGFhZmZnZ2pqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4fn4sIGJlbD1eRywKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFWzFaLCBjaXZpcz1cRVs+NWgsCisJY2xlYXI9XEVbMkpcRVtILCBjbm9ybT1cRVs+NWwsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFWzFQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbMU0sIGRzbD1cRVs+MWwsIGVkPVxFWzBKLCBlbD1cRVswSywgZWwxPVxFWzFLLAorCWZzbD1cRVt1LCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpbD1cRVslcDElZEwsIGlsMT1cRVsxTCwKKwlpbmQ9XkosIGlzMj1cRTxcRVs+MTszOzU7Njs3bFxFWzBtXEVbMkosIGthMT1cRU93LAorCWthMz1cRU91LCBrYjI9XEVPeSwga2JzPV5ILCBrYzE9XEVPcSwga2MzPVxFT3MsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2VkPVxFW0osIGtmMT1cRU9TLAorCWtmMj1cRU9ULCBrZjM9XEVPVSwga2Y0PVxFT1YsIGtmNT1cRU9XLCBrZjY9XEVPUCwga2Y3PVxFT1EsCisJa2Y4PVxFT1IsIGtmOT1cRU9YLCBraGxwPVxFW34sIGtob21lPVxFW0gsIGxsPVxFWzI0OzFILAorCW1jMD1cRVs/MTloXEVbaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJjPVxFW3UsIHJldj1cRVs3bSwKKwlybWFjcz1cRShCLCBybWlyPVxFWzRsLCBybWt4PVxFWz43bCwgcm1zbz1cRVswbSwKKwlybXVsPVxFWzBtLCByczI9XEU8XEVjXDAsIHNjPVxFW3MsIHNncjA9XEVbMG0sIHNtYWNzPVxFKDAsCisJc21pcj1cRVs0aCwgc21reD1cRVs+N2gsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbc1xFWz4xaFxFWzI1OyVpJXAxJWRILAorCisjIEZyb206IEJyYWQgQnJhaG1zIDxCcmFobXNAVVNDLUVDTEM+Cit6MTAwfGgxMDB8ejExMHx6LTEwMHxoLTEwMHxoZWF0aC96ZW5pdGggei0xMDAgcGMgd2l0aCBjb2xvciBtb25pdG9yLAorCWNub3JtPVxFeTRcRW03MCwgY3Z2aXM9XEV4NFxFbTcxLCB1c2U9ejEwMGJ3LAorIyAoejEwMGJ3OiByZW1vdmVkIG9ic29sZXRlICI6a24jMTA6IiwgYWRkZWQgZW1wdHkgPGFjc2M+IC0tIGVzcikKK3oxMDBid3xoMTAwYnd8ejExMGJ3fHotMTAwYnd8aC0xMDBid3xoZWF0aC96ZW5pdGggei0xMDAgcGMsCisJT1RicywgT1RwdCwgbWlyLCBtc2dyLAorCU9Ua24jMTAsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9flxeeGBxYW5ia2NqZG1lbGZnZytoYWkua3dzdXR2dXR2b3pzeywKKwljbGVhcj1cRUUkPDUqLz4sIGNub3JtPVxFeTQsIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwxKi8+LCBjdXUxPVxFQSwKKwljdnZpcz1cRXg0LCBkY2gxPVxFTiQ8MSovPiwgZGwxPVxFTSQ8NSovPiwgZWQ9XEVKLCBlbD1cRUssCisJaG9tZT1cRUgsIGh0PV5JLCBpbDE9XEVMJDw1Ki8+LCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBrZjA9XEVKLCBrZjE9XEVTLCBrZjI9XEVULCBrZjM9XEVVLAorCWtmND1cRVYsIGtmNT1cRVcsIGtmNj1cRVAsIGtmNz1cRVEsIGtmOD1cRVIsIGtmOT1cRU9JLAorCWtob21lPVxFSCwgcmk9XEVJLCBybWFjcz1cRUcsIHJtaXI9XEVPLCBybXNvPVxFcSwgc21hY3M9XEVGLAorCXNtaXI9XEVALCBzbXNvPVxFcCwKK3AxOXxoMTktYiB3aXRoIGlsMS9kbDEsCisJZGwxPVxFTSQ8MiovPiwgaWwxPVxFTCQ8MiovPiwgdXNlPWgxOS1iLAorIyBGcm9tOiA8dWNzY2MhQi5maWF0bHV4QHVjYnZheC5iZXJrZWxleS5lZHU+CisjICh6dHg6IHJlbW92ZWQgZHVwbGljYXRlIDpzcjogLS0gZXNyKQorenR4fHp0eDExfHp0LTF8aHR4MTF8enR4LTEtYXx6dHgtMTAgb3IgMTEsCisJT1RicywgYW0sIGVzbG9rLCBocywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRUUsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkbDE9XEVNLAorCWRzbD1cRXkxLCBlZD1cRUosIGVsPVxFSywgZnNsPVxFa1xFeTUsIGhvbWU9XEVILCBodD1eSSwKKwlpbDE9XEVMLCBpczI9XEVqXEVIXEVxXEVrXEV2XEV5MVxFeTVcRUdcRXk4XEV5OVxFeT4sCisJa2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMD1cRVMsCisJa2YxPVxFQiwga2YyPVxFVSwga2YzPVxFViwga2Y0PVxFVywga2Y1PVxFUCwga2Y2PVxFUSwga2Y3PVxFUiwKKwlyaT1cRUksIHJtc289XEVxLCBybXVsPVxFcSwgc21zbz1cRXM1LCBzbXVsPVxFczIsCisJdHNsPVxFalxFeDVcRXgxXEVZOCUrIFxFbywKKworIyMjIyBJTVMgSW50ZXJuYXRpb25hbCAoaW1zKQorIworIyBUaGVyZSB3YXMgYSBjb21wYW55IGNhbGxlZCBJTVMgSW50ZXJuYXRpb25hbCBsb2NhdGVkIGluIENhcnNvbiBDaXR5LAorIyBOZXZhZGEsIHRoYXQgZmxvdXJpc2hlZCBmcm9tIHRoZSBtaWQtNzBzIHRvIG1pZC04MHMuICBUaGV5IG1hZGUgUy0xMDAKKyMgYnVzL1o4MCBoYXJkd2FyZSBhbmQgYSBsaW5lIG9mIHRlcm1pbmFscyBjYWxsZWQgVWx0aW1hcy4KKyMKKworIyBGcm9tOiBFcmlrIEZhaXIgPGZhaXJAdWNiYXJwYS5iZXJrZWxleS5lZHU+ICBTdW4gT2N0IDI3IDA3OjIxOjA1IDE5ODUKK2ltczk1MC1ifGJhcmUgaW1zOTUwIG5vIGluaXQgc3RyaW5nLAorCWlzMkAsIHVzZT1pbXM5NTAsCisjIChpbXM5NTA6IHJlbW92ZWQgb2Jzb2xldGUgIjprb0A6IiAtLSBlc3IpCitpbXM5NTB8aW1zIHRlbGV2aWRlbyA5NTAgZW11bGF0aW9uLAorCXhlbmxALAorCWZsYXNoQCwga2JzQCwga2N1YjFALCBrY3VkMUAsIGtjdWYxQCwga2N1dTFALCBrZjBALCBrZjFALCBrZjJALCBrZjNALAorCWtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIGtmOUAsIGtob21lQCwgdXNlPXR2aTk1MCwKKyMgKGltczk1MC1ydjogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtvQDoiIC0tIGVzcikKK2ltczk1MC1ydnxpbXMgdHZpOTUwIHJldiB2aWRlbywKKwl4ZW5sQCwKKwlmbGFzaEAsIGtic0AsIGtjdWIxQCwga2N1ZDFALCBrY3VmMUAsIGtjdXUxQCwga2YwQCwga2YxQCwga2YyQCwga2YzQCwKKwlrZjRALCBrZjVALCBrZjZALCBrZjdALCBrZjhALCBrZjlALCBraG9tZUAsIHVzZT10dmk5NTAtcnYsCitpbXMtYW5zaXx1bHRpbWEyfHVsdGltYUlJfElNUyBVbHRpbWEgSUksCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XEVbSFxFWzJKLCBjdWIxPV5ILCBjdWQxPVxFRCwKKwljdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRU0sIGVkPVxFWzBKLCBlbD1cRVswSywKKwlodD1eSSwgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsCisJaXMyPVxFW21cRVs+MTRsXEVbPzE7PzU7MjBsXEU+XEVbMW1cciwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILCByaT1cRU0sCisJcm1zbz1cRVttXEVbMW0sIHJtdWw9XEVbbVxFWzFtLCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwKKworIyMjIyBJbnRlcnRlYyBEYXRhIFN5c3RlbXMKKyMKKyMgSSB0aGluayB0aGlzIGNvbXBhbnkgaXMgbG9uZyBkZWFkIGFzIG9mIDE5OTUuICBUaGV5IG1hZGUgYW4gZWFybHkgQ1AvTQorIyBtaWNybyBjYWxsZWQgdGhlICJJbnRlcnRlYyBTdXBlcmJyYWluIiB0aGF0IHdhcyBtb2RlcmF0ZWx5IHBvcHVsYXIsCisjIHRoZW4gc2FuayBvdXQgb2Ygc2lnaHQuCisjCisKK3N1cGVyYnJhaW58aW50ZXJ0ZWMgc3VwZXJicmFpbiwKKwlPVGJzLCBhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJT1RiYz1eVSwgYmVsPV5HLCBjbGVhcj1cMDE0JDw1Kj4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XkYsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDIwPiwgY3V1MT1eSywKKwllZD1cRX5rPDEwKj4sIGVsPVxFfkskPDE1PiwgaHQ9XkksIGluZD1eSiwga2N1YjE9XlUsCisJa2N1ZDE9XkosIGtjdWYxPV5GLCBrY3V1MT1eSywgcm1jdXA9XkwsIHNtY3VwPV5MLAorIyAoaW50ZXJ0dWJlOiBhIEdvdWxkIGVudHJ5IHZpYSBCUkwgYXNzZXJ0ZWQgc211bD1cRTBAJDwyMDAvPiwKKyMgcm11bD1cRTBBJDwyMDAvPjsgbXkgZ3Vlc3MgaXMgdGhlIGhpZ2hsaWdodCBsZXR0ZXIgaXMgYml0LWNvZGVkIGxpa2UgYW4gQURNLAorIyBhbmQgdGhlIHJldmVyc2UgaXMgYWN0dWFsbHkgdHJ1ZS4gIFRyeSBpdC4gLS0gZXNyKQoraW50ZXJ0dWJlfGludGVydGVjfEludGVydGVjIEludGVyVHViZSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eRiwKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDw1MD4sIGN1dTE9XlosIGhvbWU9XkEsCisJaW5kPV5KLCBybXNvPVxFMEAsIHNtc289XEUwUCwKKyMgVGhlIGludGVydHViZSAyIGhhcyB0aGUgImZ1bGwgZHVwbGV4IiBwcm9ibGVtIGxpa2UgdGhlIHRlayA0MDI1OiBpZiB5b3UKKyMgYXJlIHR5cGluZyBhbmQgYSBjb21tYW5kIGNvbWVzIGluLCB0aGUga2V5c3Ryb2tlcyB5b3UgdHlwZSBnZXQgaW50ZXJzcGVyc2VkCisjIHdpdGggdGhlIGNvbW1hbmQgYW5kIGl0IG1lc3NlcyB1cAoraW50ZXJ0dWJlMnxpbnRlcnRlYyBkYXRhIHN5c3RlbXMgaW50ZXJ0dWJlIDIsCisJT1RicywKKwljdXA9XDAxNiVwMSVjXDAyMCVwMiV7MTB9JS8lezE2fSUqJXAyJXsxMH0lbSUrJWMsCisJZWw9XEVLLCBocGE9XDAyMCVwMSV7MTB9JS8lezE2fSUqJXAxJXsxMH0lbSUrJWMsCisJbGw9XkteWFxyLCB2cGE9XDAxMyVwMSVjLCB1c2U9aW50ZXJ0dWJlLAorCisjIyMjIEl0aGFjYSBJbnRlcnN5c3RlbXMKKyMKKyMgVGhpcyBjb21wYW55IG1hZGUgUzEwMC1idXMgcGVyc29uYWwgY29tcHV0ZXJzIGxvbmcgYWdvIGluIHRoZSBwcmUtSUJNLVBDCisjIHBhc3QuICBUaGV5IHVzZWQgdG8gYmUgcmVhY2hhYmxlIGF0OgorIworIwlJdGhhY2EgSW50ZXJzeXN0ZW1zCisjCTE2NTAgSGFuc2hhdyBSb2FkCisjCUl0aGFjYSwgTmV3IFlvcmsgMTQ4NTAKKyMKKyMgSG93ZXZlciwgdGhlIG91dGZpdCB3ZW50IGJhbmtydXB0IHllYXJzIGFnby4KKyMKKworIyBUaGUgR3JhcGhvcyBJSUkgd2FzIGEgY29sb3IgZ3JhcGhpY3MgdGVybWluYWwgZnJvbSBJdGhhY2EgSW50ZXJzeXN0ZW1zLgorIyBUaGVzZSBlbnRyaWVzIHdlcmUgd3JpdHRlbiAob3JpZ2luYWxseSBpbiB0ZXJtY2FwIHN5bnRheCkgYnkgQnJpYW4gWWFuZGVsbAorIyA8eWFuZGVsbEBzdGF0Lndpc2MuZWR1PiBhbmQgTWlrZSBNZXllciA8bWlrZW1Ac3RhdC53aXNjLmVkdT4gYXQgdGhlCisjIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luLgorCisjIChncmFwaG9zOiByZW1vdmVkIG9ic29sZXRlIGFuZCBzeW50YWN0aWNhbGx5IGluY29ycmVjdCA6a249NDosCisjIHJlbW92ZWQgPGlmPS91c3Ivc2hhcmUvdGFic2V0L2luaXQuZ3JhcGhvcz4gYW5kCisjIDxyZj0vdXNyL3NoYXJlL3RhYnNldC9pbml0LmdyYXBob3M+IG5vIHN1Y2ggZmlsZSAmIG5vIDxodHM+IC0tIGVzcikKK2dyYXBob3N8Z3JhcGhvcyBJSUksCisJYW0sIG1pciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFejU2OzI7MDswelxFejczelxFejQ7MTsxeiwKKwljcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRXo0OzI7MXpcRXo1NjsyOzgwOzI0eiwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPVxFRCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsCisJa2Y0PVxFT1MsIGtob21lPVxFW0gsIG5lbD1eTVxFRCwgcmM9XEU4LCByaT1cRU0sIHJtZGM9XEVbNGwsCisJcm1pcj1cRVs0bCwgcm1zbz1cRVttLCBzYz1cRTcsIHNncjA9XEVbbSwgc21kYz1cRVs0aCwKKwlzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLAorZ3JhcGhvcy0zMHxncmFwaG9zIElJSSB3aXRoIDMwIGxpbmVzLAorCWxpbmVzIzMwLAorCWN2dmlzPVxFejQ7MjsxelxFejU2OzI7ODA7MzB6LCB1c2U9Z3JhcGhvcywKKworIyMjIyBNb2RncmFwaAorIworIyBUaGVzZSBwZW9wbGUgdXNlZCB0byBiZSByZWFjaGFibGUgYXQ6CisjCisjCU1vZGdyYXBoLCBJbmMKKyMJMTM5MyBNYWluIFN0cmVldCwKKyMJV2FsdGhhbSwgTUEgMDIxNTQKKyMJVm94OiAoNjE3KS04OTAtNTc5Ni4KKyMKKyMgSG93ZXZlciwgaWYgeW91IGNhbGwgdGhhdCBudW1iZXIgdG9kYXkgeW91J2xsIGdldCBhbiBpbnN1cmFuY2UgY29tcGFueS4KKyMgSSBoYXZlIG1haWwgZnJvbSAiTWljaGFlbCBCZXJtYW4sIFYuUC4gU2FsZXMsIE1vZGdyYXBoIiBkYXRlZAorIyAyNiBGZWIgMTk5NyB0aGF0IHNheXM6CisjCisjIE1vZGdyYXBoIEdYLTEwMDAsIHJlcGxhY2VkIGJ5IEdYLTIwMDAuICBCb3RoIGFyZSBvdXQgb2YgcHJvZHVjdGlvbiwgaGF2ZSBiZWVuCisjIGZvciB+NyB5ZWFycy4gIE1vZGdyYXBoIHN0aWxsIGluIGJ1c2luZXNzLiAgUHJvZHVjdHMgYXJlIHJ1Z2dlZCBsYXB0b3AgYW5kCisjIHBvcnRhYmxlIFBDJ3MgYW5kIHNwZWNpYWxpemVkIENSVCBhbmQgTENEIG1vbml0b3JzIChydWdnZWQsIHJhY2stbW91bnQKKyMgcGFuZWwtbW91bnQgZXRjKS4gIEkgY2FuIGJlIGVtYWlsZWQgYXQgc29uZm91ckBhb2wuY29tCisjCisjIFBldGVyIEQuIFNtaXRoIDxwZHNtaXRoQG5iYm4uY29tPiBub3RlcyB0aGF0IGhpcyBtb2RncmFwaCBtYW51YWwgd2FzCisjIGRhdGVkIDE5ODQuICBBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCwgaXQgZmVhdHVyZWQgVGVrIDQwMTAvNDAxNAorIyBncmFwaGljcyBhbmQgREVDIFZUMTAwL1ZUNTIgKyBBRE0tM0EgZW11bGF0aW9uIHdpdGggYSBWVDIyMC1zdHlsZSBrZXlib2FyZC4KKyMKKworbW9kZ3JhcGh8bW9kMjR8bW9kZ3JhcGggdGVybWluYWwgZW11bGF0aW5nIHZ0MTAwLAorCXhlbmxALAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWN2dmlzPVxFXF45OzBzXEVcXjc7MXMsCisJaXMyPVxFXF45OzBzXEVcXjc7MXNcRVszZ1xFXF4xMTs5c1xFXF4xMTsxN3NcRVxeMTE7MjVzXEVcXjExOzMzc1xFXF4xMTs0MXNcRVxeMTE7NDlzXEVcXjExOzU3c1xFXF4xMTs2NXNcRVxeMTE7NzNzXEVcXjExOzgxc1xFXF4xMTs4OXMsCisJcmZALCByaT1cRU1cRVtLJDw1Lz4sIHVzZT12dDEwMCwKKyMgVGhlIEdYLTEwMDAgbWFudWFsIGlzIGRhdGVkIDE5ODQuICBUaGlzIGxvb2tzIHJhdGhlciBsaWtlIGEgVlQtNTIuCittb2RncmFwaDJ8bW9kZ3JhcGggZ3gtMTAwMCA4MHgyNCB3aXRoIGtleXBhZCBub3QgZW5hYmxlZCwKKwlhbSwgZGEsIGRiLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFSFxFSiQ8NTAvPiwgY3ViMT1eSCwgY3VmMT1cRUMkPDIvPiwKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDw1Lz4sIGN1dTE9XEVBJDwyLz4sCisJZWQ9XEVKJDw1MC8+LCBlbD1cRUskPDMvPiwgaHQ9XkksCisJaXMyPVxFPFxFXF41OzJzXEVcXjc7MXNcRVszZ1xFXF4xMTs5c1xFXF4xMTsxN3NcRVxeMTE7MjVzXEVcXjExOzMzc1xFXF4xMTs0MXNcRVxeMTE7NDlzXEVcXjExOzU3c1xFXF4xMTs2NXNcRVxeMTE7NzNzXEVcXjExOzgxc1xFXF4xMTs4OXNcRVxeMTI7MHNcRVxeMTQ7MnNcRVxeMTU7OXNcRVxeMjU7MXNcRVxeOTsxc1xFXF4yNzsxLAorCXJpPVxFSSQ8NS8+LAorIworIyBNb2RncmFwaCBmcm9tIE5hbmN5IEwuIENpZGVyIDxuYW5jeWNAYnJsLXRiZD4KKyMgQlVHIE5PVEUgZnJvbSBCYXJiYXJhIEUuIFJpbmdlcnMgPGJhcmJAYnJsLXRiZD46CisjIElmIHdlIHNldCBURVJNPXZ0MTAwLCBhbmQgc2V0IHRoZSBNb2RncmFwaCBzY3JlZW4gdG8gMjQgbGluZXMsIHNldHRpbmcgYQorIyBtYXJrIGFuZCB1c2luZyBkZWxldGUtdG8ta2lsbGJ1ZmZlciB3b3JrIGNvcnJlY3RseS4gIEhvd2V2ZXIsIHdlIHdvdWxkCisjIGxpa2Ugbm9ybWFsIG1vZGUgb2Ygb3BlcmF0aW9uIHRvIGJlIHVzaW5nIGEgTW9kZ3JhcGggd2l0aCA0OCBsaW5lIHNldHRpbmcuCisjIElmIHdlIHNldCBURVJNPW1vZCAod2hpY2ggaXMgYSB2YWxpZCBlbnRyeSBpbiB0ZXJtY2FwIHdpdGggNDggbGluZXMpCisjIHRoZSBzZXR0aW5nIG1hcmsgYW5kIGRlbGV0ZS10by1raWxsYnVmZmVyIHJlc3VsdHMgaW4gdGhlIGRlbGV0aW9uIG9mIG9ubHkKKyMgdGhlIGxpbmUgdGhlIG1hcmsgaXMgc2V0IG9uLgorIyBXZSd2ZSBkaXNjb3ZlcmVkIHRoYXQgdGhlIGRlbGV0ZS10by1raWxsYnVmZmVyIHdvcmtzIGNvcnJlY3RseQorIyB3aXRoIFRFUk09bW9kIGFuZCBzY3JlZW4gc2V0IHRvIDgweDQ4IGJ1dCBpdCdzIG5vdCBvYnZpb3VzLiAgT25seQorIyB0aGUgZmlyc3QgbGluZSBkaXNhcHBlYXJzIGJ1dCBhIGN0cmwtbCBzaG93cyB0aGF0IGl0IGRpZCB3b3JrCisjIGNvcnJlY3RseS4KK21vZGdyYXBoNDh8bW9kfE1vZGdyYXBoIHcvNDggbGluZXMsCisJT1RicywgT1RwdCwgYW0sIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjNDgsIHZ0IzMsCisJT1RubD1eSiwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbO0hcRVsySiwKKwljcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVkPVxFW0osIGVsPVxFW0ssCisJZmxhc2g9XEVbPzVoXEVbMHFcRVsxOzJxXEVbPzVsXEVbMHFcRVs0OzNxLAorCWhvbWU9XEVbSCwgaHQ9XkksIGlzMj1cRTxcRVsxOzQ4clxFWzBxXEVbMzs0cVxFPVxFWz8xaCwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFTSwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cRT1cRVswcVxFPiwgc2M9XEU3LCBzZ3IwPVxFW20sIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMjIyMgTW9ycm93IERlc2lnbnMKKyMKKyMgVGhpcyB3YXMgR2VvcmdlIE1vcnJvdydzIGNvbXBhbnkuICBUaGV5IHN0YXJ0ZWQgaW4gdGhlIGxhdGUgMTk3MHMgbWFraW5nCisjIFMxMDAtYnVzIG1hY2hpbmVzLiAgVGhleSB1c2VkIHRvIGJlIHJlYWNoYWJsZSBhdDoKKyMKKyMgICAgICAgIE1vcnJvdworIyAgICAgICAgNjAwIE1jQ29ybWljayBTdC4KKyMgICAgICAgIFNhbiBMZWFuZHJvLCBDQSA5NDU3NworIworIyBidXQgdGhleSdyZSBsb25nIGdvbmUgbm93ICgxOTk1KS4KKyMKKworIyBUaGUgbXQ3MCB0ZXJtaW5hbCB3YXMgc2hpcHBlZCB3aXRoIHRoZSBNb3Jyb3cgTUQtMyBtaWNyb2NvbXB1dGVyLgorIyBKZWZmJ3Mgc3BlY2ltZW4gd2FzIGRhdGVkIEp1bmUgMTk4NC4KKyMgRnJvbTogSmVmZiBXaWVsYW5kIDx3aWVsYW5kQGFjbi5wdXJkdWUuZWR1PiAyNCBGZWIgMTk5NQorbXQ3MHxtdC03MHxNb3Jyb3cgTUQtNzA7IG5hdGl2ZSBNb3Jyb3cgbW9kZSwKKwlhbSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz0relwsey14LnlPaWB8akdrRmxFbURuSHFKdEx1S3ZOd014SSwgYmVsPV5HLAorCWNidD1cRUksIGNpdmlzPVxFIjAsIGNsZWFyPV5aLCBjbm9ybT1cRSIyLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwxPiwKKwljdXUxPV5LLCBkY2gxPVxFVywgZGltPVxFRzIsIGRsMT1cRVIsIGVkPVxFWSwgZWw9XEVUJDwxMD4sCisJZmxhc2g9XEVLMSQ8MjAwPlxFSzAsIGhvbWU9Xl4sIGh0PV5JLCBpY2gxPVxFUSwgaWwxPVxFRSwKKwlpbmQ9XkosIGludmlzQCwgaXMxPVxFIjJcRUcwXEVdLCBrYnM9XkgsIGtjYnQ9XkFeWlxyLAorCWtjbHI9XkFuXHIsIGtjdWIxPV5BTFxyLCBrY3VkMT1eQUtcciwga2N1ZjE9XkFNXHIsCisJa2N1dTE9XkFKXHIsIGtkY2gxPVwxNzcsIGtmMT1eQUBcciwga2YxMD1eQUlcciwga2YxMT1eQWBcciwKKwlrZjEyPV5BYVxyLCBrZjEzPV5BYlxyLCBrZjE0PV5BY1xyLCBrZjE1PV5BZFxyLCBrZjE2PV5BZVxyLAorCWtmMTc9XkFmXHIsIGtmMTg9XkFnXHIsIGtmMTk9XkFoXHIsIGtmMj1eQUFcciwga2YyMD1eQWlcciwKKwlrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwKKwlrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hscD1eQU9cciwga2hvbWU9XkFOXHIsIG5lbD1eXywKKwlybWFjcz1cRSUlLCBybWN1cD0sIHNtYWNzPVxFJCwgc21jdXA9XEUiMlxFRzBcRV0sCisJc211bD1cRUcxLCB0YmM9XEUwLCB1c2U9YWRtK3NnciwKKworIyMjIyBNb3Rvcm9sYQorIworCisjIE1vdG9yb2xhIEVYT1J0ZXJtIDE1NQlmcm9tIHtkZWN2YXgsIGlobnA0fSFwaGlsYWJzIXNiY3MhbWVnYWQhc2V0aCB2aWEgQlJMCisjIChTZXRoIEggWmlyaW4pCitleDE1NXxNb3Rvcm9sYSBFeG9ydGVybSAxNTUsCisJT1RicywgYW0sIGJ3LAorCU9Ua24jNSwgT1R1ZyMxLCBjb2xzIzgwLCBsaW5lcyMyNCwKKwljYnQ9XEVbLCBjbGVhcj1cRVgsIGN1ZDE9XEVCLCBjdWYxPVxFRCwKKwljdXA9XEVFJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBlZD1cRVQsIGVsPVxFVSwKKwlob21lPVxFQCwgaHQ9XEVaLCBrYnM9XkgsIGtjYnQ9XEVbLCBrY2xyPVxFWCwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2VkPVxFVCwga2VsPVxFVSwga2hvbWU9XEVALAorCXJtc289XEVjXEVELCBybXVsPVxFZ1xFRCwgc21zbz1cRWJcRUQsIHNtdWw9XEVmXEVELAorCisjIyMjIE9tcm9uCisjCisjIFRoaXMgY29tcGFueSBpcyBzdGlsbCBhcm91bmQgaW4gMTk5NSwgbWFudWZhY3R1cmluZyBwb2ludC1vZi1zYWxlIHN5c3RlbXMuCisKK29tcm9ufE9tcm9uIDgwMjVBRywKKwlPVGJzLCBhbSwgZGEsIGRiLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsIGN1dTE9XEVBLAorCWN2dmlzPVxFTiwgZGNoMT1cRVAsIGRsMT1cRU0sIGVkPVxFUiwgZWw9XEVLLCBob21lPVxFSCwKKwlpbDE9XEVMLCBpbmQ9XEVTLCByaT1cRVQsIHJtc289XEU0LCBzbXNvPVxFZiwKKworIyMjIyBSYW10ZWsKKyMKKyMgUmFtdGVrIHdhcyBhIHZlbmRvciBvZiBoaWdoLWVuZCBncmFwaGljcyB0ZXJtaW5hbHMgYXJvdW5kIDE5NzktMTk4MzsgdGhleQorIyB3ZXJlIGNvbXBldGl0aW9uIGZvciB0aGluZ3MgbGlrZSB0aGUgVGVrdHJvbmljcyA0MDI1LgorIworCisjIFJhbXRlayA2MjIxIGZyb20gQlJMLCBwcm9iYWJseSBieSBEb3VnIEd3eW4KKyMgVGhlIGZvbGxvd2luZyBTRVQtVVAgbW9kZXMgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCVVOREVSTElORV9DVVJTT1IJQU5TSV9NT0RFCUFVVE9fWE9OL1hPRkZfT04KKyMJTkVXTElORV9PRkYJCTgwX0NPTFVNTlMKKyMgT3RoZXIgU0VULVVQIG1vZGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yIGNvbW11bmljYXRpb24KKyMgcmVxdWlyZW1lbnRzOyBJIHJlY29tbWVuZAorIwlTTU9PVEhfU0NST0xMCUFVVE9fUkVQRUFUX09OCTNfI19TSElGVEVECVdSQVBfQVJPVU5EX09OCisjIEhhcmR3YXJlIHRhYnMgYXJlIGFzc3VtZWQgdG8gYmUgZXZlcnkgOCBjb2x1bW5zOyB0aGV5IGNhbiBiZSBzZXQgdXAgYnkgdGhlCisjICJyZXNldCIsICJ0c2V0Iiwgb3IgInRhYnMiIHV0aWxpdGllcyAodXNlIHJ0NjIyMS13LCAxNjAgY29sdW1ucywgZm9yIHRoaXMpLgorIyBOb3RlIHRoYXQgdGhlIENvbnRyb2wtRSBrZXkgaXMgdXNlbGVzcyBvbiB0aGlzIGJyYWluLWRhbWFnZWQgdGVybWluYWwuICBObworIyBkZWxheXMgYXJlIHNwZWNpZmllZDsgdXNlICJzdHR5IGl4b24gLWl4YW55IiB0byBlbmFibGUgREMzL0RDMSBmbG93IGNvbnRyb2whCitydDYyMjF8UmFtdGVrIDYyMjEgODB4MjQsCisJT1RicywgT1RwdCwgbXNnciwgeG9uLAorCU9Ua24jNCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz41bCwKKwljbGVhcj1cRVsxOzFIXEVbSiwgY25vcm09XEVbPjVoXEVbPjloLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSywgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sCisJY3Z2aXM9XEVbPjdoXEVbPjlsLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFWzE7MUgsIGh0PV5JLAorCWh0cz1cRUgsIGluZD1eSiwgaXMyPVxFKTAsIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjA9XEVPUCwga2YxPVxFT1EsIGtmMj1cRU9SLAorCWtmMz1cRU9TLCBsZjA9UEYxLCBsZjE9UEYyLCBsZjI9UEYzLCBsZjM9UEY0LCBsbD1cRVsyNDsxSCwKKwluZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywgcm1reD1cRT4sCisJcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFWzF3XEVbPjM3bVxFWz4zOW1cRVsxdlxFWzIwbFxFWz8zbFxFWz82bFxFWz41aFxFWz42aFxFWz43aFxFWz44bFxFWz45aFxFWz4xMGxcRVsxOzI0clxFW21cRVtxXEUoQlwwMTdcRSkwXEUjNVxFPiwKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21hY3M9Xk4sIHNta3g9XEU9LCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywKKyMgW1RPIERPOiBDaGVjayBvdXQ6IHNob3J0IGZvcm1zIG9mIGhvL2NsIGFuZCBsbDsgcmVzZXQgKFxFYyldLgorcnQ2MjIxLXd8UmFtdGVrIDYyMjEgMTYweDQ4LAorCWNvbHMjMTYwLCBsaW5lcyM0OCwKKwlsbD1cRVs0ODsxSCwgdXNlPXJ0NjIyMSwKKworIyMjIyBSQ0EKKyMKKworIyBSQ0EgVlAzMzAxIG9yIFZQMzUwMQorcmNhfHJjYSB2cDMzMDEvdnAzNTAxLAorCU9UYnMsCisJY29scyM0MCwgbGluZXMjMjQsCisJY2xlYXI9XkwsIGN1ZjE9XlUsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1eSywgaG9tZT1eWiwgcm1zbz1cRVxFUzAsIHNtc289XEVcRVMxLAorCisKKyMjIyMgU2VsYW5hcgorIworCisjIFNlbGFuYXIgSGlSRVotMTAwIGZyb20gQlJMLCBwcm9iYWJseSBieSBEb3VnIEd3eW4KKyMgVGhlIGZvbGxvd2luZyBTRVQtVVAgbW9kZXMgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCVNFVF9ERUZBVUxUX1RBQlMJNDhfTElORVMJCTgwX0NPTFVNTlMKKyMJT05MSU5FCQkJQU5TSQkJCUNVUlNPUl9WSVNJQkxFCisjCVZUMTAyX0FVVE9fV1JBUF9PTglWVDEwMl9ORVdMSU5FX09GRglWVDEwMl9NT05JVE9SX01PREVfT0ZGCisjCUxPQ0FMX0VDSE9fT0ZGCQlVU19DSEFSX1NFVAkJV1BTX1RFUk1JTkFMX0RJU0FCTEVECisjCUNQVV9BVVRPX1hPTi9YT0ZGX0VOQUJMRUQJCQlQUklOVF9GVUxMX1NDUkVFTgorIyBGb3IgdXNlIHdpdGggZ3JhcGhpY3Mgc29mdHdhcmUsIGFsbCBncmFwaGljcyBtb2RlcyBzaG91bGQgYmUgc2V0IHRvIGZhY3RvcnkKKyMgZGVmYXVsdC4gIE90aGVyIFNFVC1VUCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvcgorIyBjb21tdW5pY2F0aW9uIHJlcXVpcmVtZW50cy4gIE5vIGRlbGF5cyBhcmUgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiCisjIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKKyMgSSBjb21tZW50ZWQgb3V0IHRoZSBzY3JvbGxpbmcgY2FwYWJpbGl0aWVzIHNpbmNlIHRoZXkgYXJlIHRvbyBzbG93LgoraGlyZXoxMDB8U2VsYW5hciBIaVJFWi0xMDAsCisJT1RicywgT1RwdCwgbWlyLCBtc2dyLCB4b24sCisJT1RrbiM0LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyM0OCwgdnQjMywKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osCisJY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGlzMj1cRTxcRSkwLCBrYnM9XkgsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YwPVxFT1AsCisJa2YxPVxFT1EsIGtmMj1cRU9SLCBrZjM9XEVPUywgbGYwPVBGMSwgbGYxPVBGMiwgbGYyPVBGMywKKwlsZjM9UEY0LCBsbD1cRVs0OEgsIG1jMD1cRVtpLCBtYzQ9XEVbNGlcRVs/NGksCisJbWM1PVxFWz81aVxFWzVpLCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcm1hY3M9Xk8sCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cMDMwXEUyXEU8XEVbNGlcRVs/NGlcRVsxMmhcRVsyOzQ7MjBsXEVbPzA7N2hcRVs/MTszOzY7MTlsXEVbclxFW21cRShCXDAxN1xFKTBcRT4sCisJc2M9XEU3LCBzZ3IwPVxFW20sIHNtYWNzPV5OLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csCitoaXJlejEwMC13fFNlbGFuYXIgSGlSRVotMTAwIGluIDEzMi1jb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwgdXNlPWhpcmV6MTAwLAorCisjIyMjIFNpZ25ldGljcworIworCisjIEZyb20gVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4KK3ZzY3xTaWduZXRpY3MgVnNjIFZpZGVvIGRyaXZlciBieSBSTUMsCisJYW0sIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjYsCisJY2xlYXI9XEVbO0hcRVsySiQ8NTAvPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZWw9XEVbSywgaG9tZT1cRVtILAorCWh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwgcmV2PV5fXHMsCisJcm1zbz1eXyEsIHJtdWw9Xl8jLCBzZ3IwPV5fISwgc21zbz1eX1xzLCBzbXVsPV5fIiwKKworIyMjIyBTb3JvYworIworIyBBbGFuIEZyaXNiaWUgPGZyaXNiaWVAZmx5aW5nLWRpc2suY29tPiB3cml0ZXM6CisjCisjIEFzIHlvdSBtYXkgcmVjYWxsLCB0aGUgU29yb2MgbG9nbyBjb25zaXN0ZWQgb2YgdGhlaXIgbmFtZSwKKyMgd2l0aCB0aGUgbGV0dGVyICJTIiBzdXBlcmltcG9zZWQgb3ZlciBhbiBvZGQgZGVzaWduLiAgIFRoaXMKKyMgY29uc2lzdGVkIG9mIGEgY2lyY2xlIHdpdGggYSBzbGlnaHRseSBzbWFsbGVyIDE1IGRlZ3JlZSAoYXBwcm94LikKKyMgd2VkZ2Ugd2l0aCByb3VuZGVkIGNvcm5lcnMgaW5zaWRlIGl0LiAgIFRoZSBjb2xvciB3YXMgc29ydCBvZgorIyBhIG1ldGFsbGljIGdvbGQveWVsbG93LgorIworIyBJZiBJIGhhZCBiZWVuIG1vcmUgb2YgYSBiZWVyIGRyaW5rZXIgaXQgbWlnaHQgaGF2ZSBiZWVuIG9idmlvdXMKKyMgdG8gbWUsIGJ1dCBpdCB0b29rIGEgY2x1ZSBmcm9tIHRoZWlyIHNlcnZpY2UgZGVwYXJ0bWVudCB0byBtYWtlCisjIG1lIGV4Y2xhaW0sICJPZiBjb3Vyc2UhIiAgIFRoZSBjaXJjdWxhciBvYmplY3Qgd2FzIHRoZSB0b3Agb2YKKyMgYSBiZWVyIGNhbiAodGhlIG9sZCByZW1vdmFibGUgcG9wLXRvcCBzdHlsZSkgYW5kICJTb3JvYyIgd2FzIGFuCisjIGFuYWdyYW0gZm9yICJDb29ycyIuCisjCisjIEkgY2FuIGp1c3QgaW1hZ2luZSB0aGUgZm91bmRlcnMgb2YgdGhlIGNvbXBhbnkgc2l0dGluZyBhcm91bmQKKyMgb25lIGV2ZW5pbmcsIHRvc3NpbmcgYmFjayBhIGZldyBhbmQgdHJ5aW5nIHRvIGRlY2lkZSB3aGF0IHRvCisjIGNhbGwgdGhlaXIgbmV3IGNvbXBhbnkgYW5kIHdoYXQgdG8gdXNlIGZvciBhIGxvZ28uCisjCisKKyMgKHNvcm9jMTIwOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkteUF5SXkxeTCA6IiAtLSBlc3IpCitzb3JvYzEyMHxpcTEyMHxzb3JvY3xzb3JvYyBpcTEyMCwKKwljbGVhcj1cRSokPDI+LCBjdWQxPV5KLCBlZD1cRVksIGVsPVxFVCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5MLCBrY3V1MT1eSywgdXNlPWFkbTNhLAorc29yb2MxNDB8aXExNDB8c29yb2MgaXExNDAsCisJT1RicywgYW0sIG1pciwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRUksIGNsZWFyPVxFKywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRXcsCisJZGwxPVxFciQ8LjcqPiwgZWQ9XEV5LCBlbD1cRXQsIGhvbWU9Xl4sIGlsMT1cRWUkPDEqPiwgaW5kPV5KLAorCWticz1eSCwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjA9XkEwXHIsIGtmMT1eQUBcciwga2YyPV5BQVxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwgbGw9Xl5eSywgcm1pcj1cRTgsCisJcm1zbz1cRVwxNzcsIHJtdWw9XEVeQSwgc21pcj1cRTksIHNtc289XEVcMTc3LCBzbXVsPVxFXkEsCisKKyMjIyMgU291dGh3ZXN0IFRlY2huaWNhbCBQcm9kdWN0cworIworIyBUaGVzZSBndXlzIG1hZGUgYW4gZWFybHkgcGVyc29uYWwgbWljcm8gY2FsbGVkIHRoZSBNNjgwMC4KKyMgVGhlIGN0ODIgd2FzIHByb2JhYmx5IGl0cyBjb25zb2xlIHRlcm1pbmFsLgorIworCisjIChzd3RwOiByZW1vdmVkIG9ic29sZXRlICI6YmM9XkQ6IiAtLSBlc3IpCitzd3RwfGN0ODJ8c291dGh3ZXN0IHRlY2huaWNhbCBwcm9kdWN0cyBjdDgyLAorCWFtLAorCWNvbHMjODIsIGxpbmVzIzIwLAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ELCBjdWQxPV5KLCBjdWYxPV5TLAorCWN1cD1cMDEzJXAyJWMlcDElYywgY3V1MT1eQSwgZGNoMT1eXF5ILCBkbDE9XlosIGVkPV5WLCBlbD1eRiwKKwlob21lPV5QLCBpY2gxPV5cXlgsIGlsMT1eXF5ZLCBpbmQ9Xk4sCisJaXMyPVwwMzRcMDIyXDAzNlwwMjNcMDM2XDAwNFwwMzVcMDI3XDAxMVwwMjNcMDM2XDAzNVwwMzZcMDE3XDAzNVwwMjdcMDIyXDAxMSwKKwlsbD1eQywgcmk9Xk8sIHJtc289Xl5eRiwgc21zbz1eXl5WLAorCisjIyMjIFN5bmVydGVrCisjCisjIEJvYiBNYW5zb24gPG1hbnNvbkBwYXR0eXIuYWNzLm9oaW8tc3RhdGUuZWR1PiB3cml0ZXMgKDI4IEFwciAxOTk1KToKKyMKKyMgU3luZXJ0ZWsgdXNlZCB0byBtYWtlIElDcywgdmFyaW91cyA2NTAyLWJhc2VkIHNpbmdsZS1ib2FyZCBwcm9jZXNzCisjIGNvbnRyb2wgYW5kIGhvYmJ5aXN0IGNvbXB1dGVycywgYW5kIGFzc29ydGVkIHBlcmlwaGVyYWxzIGluY2x1ZGluZyBhCisjIHNlcmllcyBvZiBzbWFsbCBpbmV4cGVuc2l2ZSB0ZXJtaW5hbHMgKEkgdGhpbmsgdGhleSB3ZXJlIG9uZSBvZiB0aGUKKyMgZmlyc3QgdG8gaGF2ZSBhICJ0ZXJtaW5hbC1vbi1hLWtleWJvYXJkIiwgd2hlcmUgdGhlIHRlcm1pbmFsIGl0c2VsZgorIyB3YXMgb25seSBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUga2V5Ym9hcmQpLgorIworIyBUaGV5IGFwcGFyZW50bHkgaGFkIGEgS1RNLTEgbW9kZWwsIHdoaWNoIEkndmUgbmV2ZXIgc2Vlbi4gVGhlIEtUTS0yLzQwCisjIHdhcyBhIDQweDI0IHRlcm1pbmFsIHRoYXQgY291bGQgY29ubmVjdCB0byBhIHN0YW5kYXJkIFRWIHRocm91Z2ggYQorIyB2aWRlbyBtb2R1bGF0b3IuICBUaGUgS1RNLTIvODAgd2FzIHRoZSA4MC1jb2x1bW4gdmVyc2lvbiAodGhlIDIvNDAKKyMgY291bGQgYmUgdXBncmFkZWQgdG8gdGhlIDIvODAgYnkgYWRkaW5nIDIgMjExNCBTUkFNcyBhbmQgYSBuZXcgUk9NKS4KKyMgSSBoYXZlIGEgS1RNLTIvODAgc3RpbGwgaW4gd29ya2luZyBvcmRlci4gIFRoZSBLVE0tMnMgaGFkIGZ1bGx5CisjIHNvY2tldGVkIHBhcnRzLCB1c2VkIDIgNjUwN3MsIGEgNjUzMiBhcyBrZXlib2FyZCBzY2FubmVyLCBhIHByb2dyYW0KKyMgUk9NIGFuZCAyIFJPTXMgYXMgY2hhcmFjdGVyIGdlbmVyYXRvcnMuIFRoZXkgd2VyZSBpbmNyZWRpYmx5IHNpbXBsZSwKKyMgYW5kIEkndmUgbmV2ZXIgaGFkIGFueSBwcm9ibGVtcyB3aXRoIG1pbmUgKHdpdG5lc3MgdGhlIGZhY3QgdGhhdCBtaW5lCisjIHdhcyBtYWRlIGluIDE5ODEgYW5kIGlzIHN0aWxsIHdvcmtpbmcgZ3JlYXQuLi4gSSd2ZSBibG93biB0aGUgdmlkZW8KKyMgb3V0cHV0IHRyYW5zaXN0b3IgYSBjb3VwbGUgb2YgdGltZXMsIGJ1dCBpdCdzIGEgMk4yMjIyIDotKQorIworIyBUaGUgS1RNLTMgKHdoaWNoIGlzIHdoYXQgaXMgbGlzdGVkIGluIHRoZSB0ZXJtaW5mbyBmaWxlKSB3YXMgdGhlaXIKKyMgYXR0ZW1wdCBhdCBwdXR0aW5nIGEgS1RNLTIgaW4gYSBib3ggKGFuZCBzb21lIG1vZGVscyBjYW1lIHdpdGggYQorIyBDUlQpLiBJdCB3YXNuJ3QgbXVjaCBkaWZmZXJlbnQgZnJvbSB0aGUgS1RNLTIgaGFyZHdhcmUtd2lzZSwgYnV0IHRoZQorIyBjb250cm9sIGFuZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSB2ZXJ5IGRpZmZlcmVudC4gVGhlIEtUTS0zIHdhcyBhbHdheXMKKyMgcmVhbCBicm9rZW4sIGF0IGxlYXN0IGFjY29yZGluZyB0byB0aGUgZm9sa3MgSSd2ZSB0YWxrZWQgdG8gYWJvdXQgaXQuCisjCisjIFRoZSBwYWRkaW5nIGluIHRoZSBlbnRyeSBpcyBwcm9iYWJseSBvZmYtLXRoZXNlIHRlcm1pbmFscyB3ZXJlIHZlcnkKKyMgc2xvdyAoaXQgdGFrZXMgbGlrZSAxMDBtcyBmb3IgdGhlIEtUTS0yIHRvIGNsZWFyIHRoZSBzY3JlZW4uLi4pIEFuZAorIyBhbnlvbmUgd2l0aCBhbnkgc2FuaXR5IHJlcGxhY2VkIHRoZSBST01zIHdpdGggc29tZXRoaW5nIHRoYXQgcHJvdmlkZWQKKyMgYSByZWFzb25hYmxlIHN1YnNldCBvZiBWVDEwMCBmdW5jdGlvbmFsaXR5LCBzaW5jZSB0aGUgdXN1YWwgUk9NcyB3ZXJlCisjIG9idmlvdXNseSB2ZXJ5IHByaW1pdGl2ZS4uLiBvaCwgeW91IGNvdWxkIGdldCBhbiB1cGdyYWRlZCBST00gZnJvbQorIyBTeW5lcnRlayBmb3Igc29tZSBpbmNyZWRpYmxlIGFtb3VudCBvZiBtb25leSwgYnV0IHdoYXQgaGFja2VyIHdpdGggYW4KKyMgRVBST00gYnVybmVyIHdvdWxkIGRvIHRoYXQ/IDopCisjCisjIFNvcnJ5IEkgZG9uJ3QgaGF2ZSBhbnkgY29udGFjdCBpbmZvOyBJIGJlbGlldmUgdGhleSB3ZXJlIGxvY2F0ZWQgaW4KKyMgU3Vubnl2YWxlLCBhbmQgSSdtIGZhaXJseSBzdXJlIHRoZXkgYXJlIHN0aWxsIG1hbnVmYWN0dXJpbmcgSUNzCisjICh0aGV5J3ZlIGdvbmUgdG8gQVNJQ3MgYW5kIEZQR0FzKSwgYnV0IEkgZG91YnQgdGhleSdyZSBpbiB0aGUgY29tcHV0ZXIKKyMgYnVzaW5lc3MgdGhlc2UgZGF5cy4KKyMKKworIyBUZXN0ZWQsIHNlZW1zIHRvIHdvcmsgZmluZSB3aXRoIHZpLgorc3luZXJ0ZWt8a3RtfHN5bmVydGVrMzgwfHN5bmVydGVrIGt0bSAzLzgwIHR1YmVsZXNzIHRlcm1pbmFsLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPV5aLCBjdWIxPV5ILCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGVkPVxFSiwgZWw9XEVLLAorCisjIyMjIFRhYiBPZmZpY2UgUHJvZHVjdHMKKyMKKyMJVEFCIFByb2R1Y3RzIENvLiAtIFBhbG8gQWx0bywgQ2FsaWZvcm5pYQorIwlFbGVjdHJvbmljIE9mZmljZSBQcm9kdWN0cywKKyMJMTQ1MSBDYWxpZm9ybmlhIEF2ZW51ZSA5NDMwNAorIworIyBJIHRoaW5rIHRoZXkncmUgb3V0IG9mIGJ1c2luZXNzLgorIworCisjIFRoZSB0YWIgMTMyIHVzZXMgeG9uL3hvZmYsIHNvIG5vIHBhZGRpbmcgbmVlZGVkLgorIyA8c21reD4vPHJta3g+IGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGFycm93IGtleXMuCisjIDxpczI+IHNldHMgODAgY29sIG1vZGUsIG5vcm1hbCB2aWRlbywgYXV0b3dyYXAgb24gKGZvciA8YW0+KS4KKyMgU2VlbXMgdG8gYmUgbm8gd2F5IHRvIGdldCByaWQgb2Ygc3RhdHVzIGxpbmUuCisjIFRoZSBtYW51YWwgZm9yIHRoaXMgcHVwcHkgd2FzIGRhdGVkIEp1bmUgMTk4MS4gIEl0IGNsYWltcyB0byBiZSBWVDUyLQorIyBjb21wYXRpYmxlIGJ1dCBsb29rcyBtb3JlIHZ0MTAwLWxpa2UuCit0YWIxMzJ8dGFifHRhYjEzMi0xNXx0YWIgMTMyLzE1LAorCWRhLCBkYiwKKwlPVGROQCwgY29scyM4MCwgbGluZXMjMjQsIGxtIzk2LAorCWN1ZDE9XkosIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgZGNoMT1cRVtQLCBkbDE9XEVbTSwKKwlpbDE9XEVbTCwgaXMyPVxFWz83aFxFWz8zbFxFWz81bCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3V1MT1cRVtBLCBybWlyPVxFWzRsLCBybWt4QCwgc21pcj1cRVs0aCwgc21reEAsIHVzZT12dDEwMCwKK3RhYjEzMi13fHRhYjEzMiBpbiB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJaXMyPVxFWz83aFxFWz8zaFxFWz81bCwgdXNlPXRhYjEzMiwKK3RhYjEzMi1ydnx0YWIxMzIgaW4gcmV2ZXJzZS12aWRlbyBtb2RlLAorCWlzMj1cRVs/N2hcRVs/M2xcRVs/NWgsIHVzZT10YWIxMzIsCit0YWIxMzItdy1ydnx0YWIxMzIgaW4gcmV2ZXJzZS12aWRlby93aWRlIG1vZGUsCisJaXMyPVxFWz83aFxFWz8zaFxFWz81aCwgdXNlPXRhYjEzMi13LAorCisKKyMjIyMgVGVsZXJheQorIworIwlSZXNlYXJjaCBJbmNvcnBvcmF0ZWQKKyMJNjQyNSBGbHlpbmcgQ2xvdWQgRHJpdmUKKyMJRWRlbiBQcmFpcmllLCBNTiA1NTM0NAorIwlWb3g6ICg2MTIpLTk0MS0zMzAwCisjCisjIFRoZSBUZWxlcmF5IHRlcm1pbmFscyB3ZXJlIGFsbCBkaXNjb250aW51ZWQgaW4gMTk5Mi05My4gIFJJIHN0aWxsIHNlcnZpY2VzCisjIGFuZCByZXBhaXJzIHRoZXNlIGJlYXN0cywgYnV0IG5vIGxvbmdlciBtYW51ZmFjdHVyZXMgdGhlbS4gIFRoZSBUZWxlcmF5CisjIHBlb3BsZSBiZWxpZXZlIHRoYXQgYWxsIHRoZSB0eXBlcyBsaXN0ZWQgYmVsb3cgYXJlIHZlcnkgcmFyZSBub3cgKDE5OTUpLgorIyBUaGVyZSB3YXMgYSBuZXdlciBsaW5lIG9mIFRlbGVyYXlzIChNb2RlbCA3LCBNb2RlbCAyMCwgTW9kZWwgMzAsIGFuZAorIyBNb2RlbCAxMDApIHRoYXQgd2VyZSBBTlNJLWNvbXBhdGlibGUuCisjCisjIE5vdGUgdHdvIHRoaW5ncyBjYWxsZWQgInRlbGVyYXkiLiAgUmVvcmRlciBzaG91bGQgbW92ZSB0aGUgY29tbW9uIG9uZQorIyB0byB0aGUgZnJvbnQgaWYgeW91IGhhdmUgZWl0aGVyLiAgQSBkdW1iIHRlbGVyYXkgd2l0aCB0aGUgY3Vyc29yIHN0dWNrCisjIG9uIHRoZSBib3R0b20gYW5kIG5vIG9idmlvdXMgbW9kZWwgbnVtYmVyIGlzIHByb2JhYmx5IGEgMzcwMC4KKyMKKwordDM3MDB8ZHVtYiB0ZWxlcmF5IDM3MDAsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaW5kPV5KLAordDM4MDB8dGVsZXJheSAzODAwIHNlcmllcywKKwlPVGJzLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBlZD1cRUosIGVsPVxFSywKKwlob21lPVxFSCwgaHQ9XkksIGluZD1eSiwgbGw9XEVZN1xzLAordDEwNjF8dGVsZXJheXx0ZWxlcmF5IDEwNjEsCisJT1RicywgYW0sIGttLCB4aHAsIHh0LAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDE+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9XEVRLAorCWRsMT1cRU0kPDIqPiwgZWQ9XEVKJDwxPiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGh0cz1cRUYsCisJaWNoMT1cRVAsIGlsMT1cRUwkPDIqPiwgaW5kPV5KLCBpcD0kPDAuNCo+LAorCWlzMj1cRWVcRVUwMV5aMVxFVlxFVTAyXloyXEVWXEVVMDNeWjNcRVZcRVUwNF5aNFxFVlxFVTA1Xlo1XEVWXEVVMDZeWjZcRVZcRVUwN15aN1xFVlxFVTA4Xlo4XEVWXEVmLAorCWtmMT1eWjEsIGtmMj1eWjIsIGtmMz1eWjMsIGtmND1eWjQsIGtmNT1eWjUsIGtmNj1eWjYsIGtmNz1eWjcsCisJa2Y4PV5aOCwgcm1zbz1cRVJALCBybXVsPVxFUkAsIHNtc289XHNcRVJELCBzbXVsPVxFUkgsCisJdGJjPVxFRywKK3QxMDYxZnx0ZWxlcmF5IDEwNjEgd2l0aCBmYXN0IFBST01zLAorCWRsMT1cRU0sIGlsMT1cRUwsIGlwQCwgdXNlPXQxMDYxLAorIyAiVGVsZXJheSBBcnBhIFNwZWNpYWwiLCBvZmZpY2lhbGx5IGRlc2lnbmF0ZWQgYXMKKyMgIlRlbGVyYXkgQXJwYSBuZXR3b3JrIG1vZGVsIDEwIiB3aXRoICJTcGVjaWFsIGZlYXR1cmUgNzIwIi4KKyMgVGhpcyBpcyB0aGUgbmV3ICgxOTgxKSBmYXN0IG1pY3JvY29kZSB1cGRhdGluZyB0aGUgb2xkZXIgImFycGEiIHByb21zCisjICh3aGljaCBnYXZlIG1ldGEta2V5IGFuZCBwcm9ncmFtbWFibGUtZnhuIGtleXMpLiAgNzIwIGlzIG11Y2ggbXVjaCBmYXN0ZXIsCisjIGNvbnZlcnRzIHRoZSBrZXlwYWQgdG8gcHJvZ3JhbW1hYmxlIGZ1bmN0aW9uIGtleXMsIGFuZCBoYXMgb3RoZXIgZ29vZGllcy4KKyMgU3RhbmRvdXQgbW9kZSBpcyBzdGlsbCBicm9rZW4gKG1hZ2ljIGNvb2tpZSwgZXRjKSBzbyBpcyBzdXBwcmVzc2VkIGFzIG5vCisjIHByb2dyYW1zIGhhbmRsZSBzdWNoIGxvc3NhZ2UgcHJvcGVybHkuCisjIE5vdGU6IHRoaXMgaXMgTk9UIHRoZSBvbGQgdGVybWNhcCdzICJ0MTA2MWYgd2l0aCBmYXN0IHByb21zLiIKKyMgRnJvbTogSi4gTGVwcmVhdSA8bGVwcmVhdUB1dGFoLWNzPiBUdWUgRmViICAxIDA2OjM5OjM3IDE5ODMsIFVuaXYgb2YgVXRhaAorIyAodDEwOiByZW1vdmVkIG92ZXJyaWRkZW4gIjpzb0A6c2VAOnVzQDp1ZUA6IiAtLSBlc3IpCit0MTB8dGVsZXJheSAxMCBzcGVjaWFsLAorCU9UYnMsIGttLCB4aHAsIHh0LAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMiwKKwljbGVhcj1cRWokPDMwLz4sIGN1YjE9XkgsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFUSwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpY2gxPVxFUCwgaWwxPVxFTCwKKwlpbmQ9XEVxLCBwYWQ9XDAsIHJpPVxFcCwgcm1zbz1cRVJALCBybXVsPVxFUkAsIHNtc289XEVSRCwKKwlzbXVsPVxFUkgsCisjIHRlbGVyYXkgMTYgLSBtYXAgdGhlIGFycm93IGtleXMgZm9yIHZpL3JvZ3VlLCBzaGlmdGVkIHRvIHVwL2Rvd24gcGFnZSwgYW5kCisjIGJhY2svZm9ydGggd29yZHMuIFB1dCB0aGUgZnVuY3Rpb24ga2V5cyAoZjEtZjEwKSB3aGVyZSB0aGV5IGNhbiBiZQorIyBmb3VuZCwgYW5kIHR1cm4gb2ZmIHRoZSBvdGhlciBtYWdpYyBrZXlzIGFsb25nIHRoZSB0b3Agcm93LCBleGNlcHQKKyMgZm9yIGxpbmUvbG9jYWwuIERvIHRoZSBtYWdpYyBhcHByb3ByaWF0ZSB0byBtYWtlIHRoZSBwYWdlIHNoaWZ0cyB3b3JrLgorIyBBbHNvIHRvZ2dsZSBeUy9eUSBmb3IgdGhvc2Ugb2YgdXMgd2hvIHVzZSBFbWFjcy4KK3QxNnx0ZWxlcmF5IDE2LAorCWFtLCBkYSwgZGIsIG1pciwgeGhwLCB4dCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD0laVxFWyVwMSVkOyVwMiVkZiwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsCisJZGwxPVxFW00sIGVkPVxFWzBKLCBlbD1cRVswSywgaG9tZT1cRVtILCBodD1eSSwgaWwxPVxFW0wsCisJaW5kPV5KLCBrZjE9XloxLCBrZjEwPV5aMCwga2YyPV5aMiwga2YzPV5aMywga2Y0PV5aNCwga2Y1PV5aNSwKKwlrZjY9Xlo2LCBrZjc9Xlo3LCBrZjg9Xlo4LCBrZjk9Xlo5LCByaT1cRVtULAorCXJtY3VwPVxFW1ZcRVsyNDsxZlxFWz8zOGgsIHJtaXI9XEVbNGwsIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHNncjA9XEVbbSwgc21jdXA9XEVbVVxFWz8zOGwsIHNtaXI9XEVbNGgsCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyMjIyBUZXhhcyBJbnN0cnVtZW50cyAodGkpCisjCisKKyMgVGhlIFNpbGVudCA3MDAgd2FzIHNvIGNhbGxlZCBiZWNhdXNlIGl0IHdhcyBidWlsdCBhcm91bmQgYSBxdWlldCB0aGVybWFsCisjIHByaW50ZXIuICBJdCB3YXMgcG9ydGFibGUsIGVxdWlwcGVkIHdpdGggYW4gYWNvdXN0aWMgY291cGxlciwgYW5kIHByZXR0eQorIyBuZWF0IGZvciBpdHMgZGF5LgordGk3MDB8dGk3MzN8dGk3MzV8dGk3NDV8dGk4MDB8dGkgc2lsZW50IDcwMC83MzMvNzM1Lzc0NSBvciBvbW5pIDgwMCwKKwlPVGJzLCBoYywgb3MsCisJY29scyM4MCwKKwliZWw9XkcsIGNyPVxyJDwxNjI+LCBjdWIxPV5ILCBjdWQxPV5KLCBpbmQ9XkosCisKKyMKKyMgVGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA3IGJpdCBjb250cm9sIG1vZGUKKyMKK3RpOTE2fHRpOTE2LTIyMC03fFRleGFzIEluc3RydW1lbnRzIDkxNiBWRFQgODg1OS8xIHZ0MjIwIG1vZGUgNyBiaXQgQ1RSTCwKKwlkYSwgZGIsIGluLCBtc2dyLAorCWNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLCBjbGVhcj1cRVtIXEVbMkokPDY+LAorCWNub3JtPVxFWz8yNWgsIGN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsCisJY3VmPVxFWyVwMSVkQywgY3VwPVxFWyVwMSVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLAorCWRjaD1cRVslcDElZFAkPDI1MD4sIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWVjaD1cRVslcDElZFgkPDIwPiwgZWQ9XEVbSiQ8Nj4sIGVsPVxFWzBLLCBlbDE9XEVbMUssCisJZW5hY3M9XEUoQlxFKTAsIGZmPV5MLCBmbGFzaD1cRVs/NWhcRVs/NWwkPDY+LAorCWhwYT1cRVslcDElezF9JSslZEcsIGh0cz1cRVswVywgaWNoPVxFWyVwMSVkQCQ8MjUwPiwKKwlpbD1cRVslcDElZEwkPDM2PiwgaXA9JDwxMD4sIGlzMj1cRVsxOzI0clxFWzI0OzFILAorCWtjbWQ9XEVbMjl+LCBrZGNoMT1cRVtQLCBrZW50PV5KLCBrZjE9XEVbMTd+LCBrZjEwPVxFWzI4fiwKKwlrZjExPVxFWzI5fiwga2YxMj1cRVszMX4sIGtmMj1cRVsxOH4sIGtmMz1cRVsxOX4sCisJa2Y0PVxFWzIwfiwga2Y1PVxFWzIxfiwga2Y2PVxFWzIzfiwga2Y3PVxFWzI0fiwga2Y4PVxFWzI1fiwKKwlrZjk9XEVbMjZ+LCBraG9tZT1cRVtILCBraWNoMT1cRVtALCBrbnA9XEVbUywga3BwPVxFW1QsCisJa3BydD1eWCwgcHJvdD1cRSYsIHJtYWNzPVwwMTckPDI+LCByczI9XEVbIXAsIHNnckAsCisJc21hY3M9XDAxNiQ8Mj4sIHRiYz1cRVszZywgdnBhPVxFWyVwMSV7MX0lKyVkZCwKKwl1c2U9dnQyMjAsCisjCisjIFRleGFzIEluc3RydW1lbnRzIDkxNiBWRFQgOCBiaXQgY29udHJvbCBtb2RlCisjCit0aTkxNi04fHRpOTE2LTIyMC04fFRleGFzIEluc3RydW1lbnRzIDkxNiBWRFQgODg1OS8xIDggdnQyMjAgbW9kZSBiaXQgQ1RSTCwKKwlrY21kPVwyMzMyOX4sIGtjdWIxPVwyMzNELCBrY3VkMT1cMjMzQiwga2N1ZjE9XDIzM0MsCisJa2N1dTE9XDIzM0EsIGtkY2gxPVwyMzNQLCBrZW50PV5KLCBrZjE9XDIzMzE3fiwKKwlrZjEwPVwyMzMyOH4sIGtmMTE9XDIzMzI5fiwga2YxMj1cMjMzMzF+LCBrZjI9XDIzMzE4fiwKKwlrZjM9XDIzMzE5fiwga2Y0PVwyMzMyMH4sIGtmNT1cMjMzMjF+LCBrZjY9XDIzMzIzfiwKKwlrZjc9XDIzMzI0fiwga2Y4PVwyMzMyNX4sIGtmOT1cMjMzMjZ+LCBraG9tZT1cMjMzSCwKKwlraWNoMT1cMjMzQCwga25wPVwyMzNTLCBrcHA9XDIzM1QsIGtwcnQ9XlgsIHVzZT10aTkxNiwKKyMKKyMgVGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA4ODU5LzEgNyBiaXQgY29udHJvbCAxMzIgY29sdW1uIG1vZGUKKyMKK3RpOTE2LTEzMnxUZXhhcyBJbnN0cnVtZW50cyA5MTYgVkRUIHZ0MjIwIDEzMiBjb2x1bW4sCisJY29scyMxMzIsIHVzZT10aTkxNiwKKyMKKyMgVGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA4ODU5LzEgOCBiaXQgY29udHJvbCAxMzIgY29sdW1uIG1vZGUKKyMKK3RpOTE2LTgtMTMyfFRleGFzIEluc3RydW1lbnRzIDkxNiBWRFQgOC1iaXQgdnQyMjAgMTMyIGNvbHVtbiwKKwljb2xzIzEzMiwgdXNlPXRpOTE2LTgsCit0aTkyNHxUZXhhcyBJbnN0cnVtZW50cyA5MjQgVkRUIDg4NTkvMSA3IGJpdCBDVFJMLAorCU9UYnMsIGFtLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVsySlxFW0gsIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj0laVxFWyVwMSVkOyVwMiVkciwgY3ViMT1cRVtELCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9JWlcRVslcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgY3Z2aXM9XEVbPzMxaCwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwKKwlpbDE9XEVbTCwgaW5kPVxFRCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsIGtmMT1cRU9QLCBrZjI9XEVPUSwKKwlrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRVsxNn4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2ljaDE9XEVbQCwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2M9XEU3LCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLAordGk5MjQtOHxUZXhhcyBJbnN0cnVtZW50cyA5MjQgVkRUIDg4NTkvMSA4IGJpdCBDVFJMLAorCWFtLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVsySlxFW0gsIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj0laVxFWyVwMSVkOyVwMiVkciwgY3ViMT1cRVtELCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9JWlcRVslcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgY3Z2aXM9XEVbPzMxaCwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwKKwlpbDE9XEVbTCwgaW5kPVxFRCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVAkPFwyMzM+LCBrZjE9UCQ8XDIxNz4sCisJa2YyPVEkPFwyMTc+LCBrZjM9UiQ8XDIxNz4sIGtmND1TJDxcMjE3Piwga2Y1PX4kPFwyMzMxNj4sCisJa2Y2PX4kPFwyMzMxNz4sIGtmNz1+JDxcMjMzMTg+LCBrZjg9fiQ8XDIzMzE5PiwKKwlrZjk9fiQ8XDIzMzIwPiwga2ljaDE9QCQ8XDIzMz4sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywgc2dyMD1cRVttLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywKK3RpOTI0d3xUZXhhcyBJbnN0cnVtZW50cyA5MjQgVkRUIDcgYml0IC0gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB1c2U9dGk5MjQsCit0aTkyNC04d3xUZXhhcyBJbnN0cnVtZW50cyA5MjQgVkRUIDggYml0IC0gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB1c2U9dGk5MjQtOCwKK3RpOTMxfFRleGFzIEluc3RydW1lbnRzIDkzMSBWRFQsCisJT1RicywgYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFNFAsIGNsZWFyPVxFTCwgY25vcm09XEU0QCwgY3I9Xk0sIGN1YjE9XEVELAorCWN1ZDE9XEVCLCBjdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPVxFQSwgZGNoMT1cRVEsIGRsMT1cRU8sIGVkPVxFSiwgZWw9XEVJLCBob21lPVxFSCwKKwlpY2gxPVxFUlxFUFxFTSwgaWwxPVxFTiwgaW5kPVxFYSwgaW52aXM9XEU0SCwKKwlpczI9XEVHQlxFKEBCQEBcRSksIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZGNoMT1cRVEsIGtkbDE9XEVPLCBrZjE9XEVpMSwga2YyPVxFaTIsIGtmMz1cRWkzLAorCWtmND1cRWk0LCBrZjU9XEVpNSwga2Y2PVxFaTYsIGtmNz1cRWk3LCBrZjg9XEVpOCwga2Y5PVxFaTksCisJa2ljaDE9XEVQLCBraWwxPVxFTiwgcmV2PVxFNEIsIHJpPVxFYiwgcm1zbz1cRTRALCBybXVsPVxFNEAsCisJc2dyMD1cRTRALCBzbXNvPVxFNEEsIHNtdWw9XEU0RCwKK3RpOTI2fFRleGFzIEluc3RydW1lbnRzIDkyNiBWRFQgODg1OS8xIDcgYml0IENUUkwsCisJY3NyQCwgaW5kPVxFWzFTLCByaT1cRVsxVCwgdXNlPXRpOTI0LAorIyAodGk5MjYtODogSSBjb3JyZWN0ZWQgdGhpcyBmcm9tIHRoZSBicm9rZW4gU0NPIGVudHJ5IC0tIGVzcikKK3RpOTI2LTh8VGV4YXMgSW5zdHJ1bWVudHMgOTI2IFZEVCA4ODU5LzEgOCBiaXQgQ1RSTCwKKwljc3JALCBpbmQ9XDIzMzFTLCByaT1cMjMzMVQsIHVzZT10aTkyNC04LAordGlfYW5zaXxiYXNpYyBlbnRyeSBmb3IgdGk5MjgsCisJYW0sIGJjZSwgZW8sIHhlbmwsIHhvbiwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIHBhaXJzIzY0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVsySlxFW0gsCisJY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtALAorCWlsMT1cRVtMLCBpbmQ9XEVbUywga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtlbmQ9XEVbRiwga2YwPVxFW1YsIGtmMT1cRVtNLAorCWtmMj1cRVtOLCBrZjM9XEVbTywga2Y0PVxFW1AsIGtmNT1cRVtRLCBrZjY9XEVbUiwga2Y3PVxFW1MsCisJa2Y4PVxFW1QsIGtmOT1cRVtVLCBraG9tZT1cRVtILCBrbnA9XEVbRywga3BwPVxFW0ksCisJb3A9XEVbMzc7NDBtLCByaT1cRVtULCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCBzZ3IwPVxFW20sCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMKKyMgICAgICAgOTI4IFZEVCA3IGJpdCBjb250cm9sIG1vZGUKKyMKK3RpOTI4fFRleGFzIEluc3RydW1lbnRzIDkyOCBWRFQgODg1OS8xIDcgYml0IENUUkwsCisJa2RjaDE9XEVbUCwga2VuZD1cRV8xXEVcXCwga2VudD1cRVs4fiwga2YxPVxFWzE3fiwKKwlrZjEwPVxFWzI4fiwga2YxMT1cRVsyOX4sIGtmMTI9XEVbMzF+LCBrZjEzPVxFWzMyfiwKKwlrZjE1PVxFWzM0fiwga2YyPVxFWzE4fiwga2YzPVxFWzE5fiwga2Y0PVxFWzIwfiwKKwlrZjU9XEVbMjF+LCBrZjY9XEVbMjN+LCBrZjc9XEVbMjR+LCBrZjg9XEVbMjV+LCBrZjk9XEVbMjZ+LAorCWtpY2gxPVxFW0AsIGtucD1cRVtTLCBrcHA9XEVbVCwga3BydD1cRVszNX4sIHVzZT10aV9hbnNpLAorIworIyAgICAgICA5MjggVkRUIDggYml0IGNvbnRyb2wgbW9kZQorIwordGk5MjgtOHxUZXhhcyBJbnN0cnVtZW50cyA5MjggVkRUIDg4NTkvMSA4IGJpdCBDVFJMLAorCWtkY2gxPVwyMzNQLCBrZW5kPVwyMzcxXDIzNCwga2VudD1cMjMzOH4sIGtmMT1cMjMzMTd+LAorCWtmMTA9XDIzMzI4fiwga2YxMT1cMjMzMjl+LCBrZjEyPVwyMzMzMX4sIGtmMTM9XDIzMzMyfiwKKwlrZjE1PVwyMzMzNH4sIGtmMj1cMjMzMTh+LCBrZjM9XDIzMzE5fiwga2Y0PVwyMzMyMH4sCisJa2Y1PVwyMzMyMX4sIGtmNj1cMjMzMjN+LCBrZjc9XDIzMzI0fiwga2Y4PVwyMzMyNX4sCisJa2Y5PVwyMzMyNn4sIGtob21lPVwyMzNILCBraWNoMT1cMjMzQCwga25wPVwyMzNTLAorCWtwcD1cMjMzVCwga3BydD1cMjMzMzV+LCB1c2U9dGlfYW5zaSwKKworIyMjIyBaZW50ZWMgKHplbikKKyMKKworIyAoemVuMzA6IHJlbW92ZWQgb2Jzb2xldGUgOm1hPV5MIF5SXkxeS15QOi4gIFRoaXMgZW50cnkgb3JpZ2luYWxseQorIyBoYWQganVzdCA8c21zbz49XEVHNiB3aGljaCBJIHRoaW5rIG1lYW5zIHN0YW5kb3V0IHdhcyBzdXBwb3NlZCB0byBiZQorIyBkaW0tcmV2ZXJzZSB1c2luZyBBRE0xMi1zdHlsZSBhdHRyaWJ1dGVzLiBBRE0xMiA8c211bD4vPHJtdWw+IGFuZAorIyA8aW52aXM+IG1pZ2h0IHdvcmstLSBlc3IpCit6ZW4zMHx6MzB8emVudGVjIDMwLAorCU9UYnMsIGFtLCBtaXIsIHVsLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEUqLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkaW09XEVHMiwgZGwxPVxFUiQ8MS41Kj4sIGVkPVxFWSwgZWw9XEVUJDwxLjAqPiwgaG9tZT1eXiwKKwlpbDE9XEVFJDwxLjUqPiwgaW5kPV5KLCBybWlyPVxFciwgcm11bEAsIHNtaXI9XEVxLCBzbXNvPVxFRzYsCisJc211bEAsIHVzZT1hZG0rc2dyLAorIyAoemVuNTA6IHRoaXMgaGFkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMKKyMJOkJTPV5VOkNMPV5WOkNSPV5COgorIyBVSy9ESy9SSy9MSy9ITSB3ZXJlIHNvbWVvbmUncyBhbGlhc2VzIGZvciBrdS9rZC9rbC9rci9raCwKKyMgd2hpY2ggd2VyZSBhbHNvIGluIHRoZSBvcmlnaW5hbCBlbnRyeSAtLSBlc3IpCisjICh6ZW41MDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5IaF5MbF5Kal5LazoiIC0tIGVzcikKK3plbjUwfHo1MHx6ZW50ZWMgemVwaHlyLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMSwKKwljbGVhcj1cRSssIGN1YjE9XkgsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1eSywgZGNoMT1cRVcsIGRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULCBpY2gxPVxFUSwgaWwxPVxFRSwKKwlpbnZpc0AsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBraG9tZT1eXiwKKwlybXVsQCwgc211bEAsIHVzZT1hZG0rc2dyLAorCisjIENDSSA0NTc0IChPZmZpY2UgUG93ZXIpIGZyb20gV2lsbCBNYXJ0aW4gPHdtYXJ0aW5AQlJMLkFSUEE+IHZpYSBCUkwKK2NjaXxjY2kxfHo4MDAxfHplbjgwMDF8Q0NJIEN1c3RvbSBaZW50ZWMgODAwMSwKKwlPVGJzLCBhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmxpbms9XEVNIiwgY2xlYXI9XEVIXEVKLCBjbm9ybT1cRVAsCisJY3NyPVxFUiVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJY3Z2aXM9XEVGXEVRXEVNIFxFUiA3LCBkaW09XEVNISwgZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVILAorCWludmlzPVxFTSgsIGlzMj1cRU0gXEVGXEVUXEVQXEVSIDcsIGticz1eSCwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFSCwgbWM0PV5ULCBtYzU9XlIsCisJcmV2PVxFTSQsIHJpPVxFSSwgcm1zbz1cRU1ccywgcm11bD1cRU1ccywgc2dyMD1cRU1ccywKKwlzbXNvPVxFTSQsIHNtdWw9XEVNMCwKKworIyMjIyMjIyMgT0JTT0xFVEUgVU5JWCBDT05TT0xFUworIworCisjIyMjIEFwb2xsbyBjb25zb2xlcworIworIyBBcG9sbG8gZ290IGJvdWdodCBieSBIZXdsZXR0LVBhY2thcmQuICBUaGUgQXBvbGxvIHdvcmtzdGF0aW9ucyBhcmUKKyMgbGFiZWxlZCBIUDcwMHMgbm93LgorIworCisjIEZyb206IEdhcnkgRGFybGFuZCA8Z29vZG1hbmNAZ2FybmV0LmJlcmtlbGV5LmVkdT4KK2Fwb2xsb3xhcG9sbG8gY29uc29sZSwKKwlPVGJzLCBhbSwgbWlyLAorCWNvbHMjODgsIGxpbmVzIzUzLAorCWNsZWFyPV5MLCBjdWIxPV5ILCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFTSVwMSV7MzJ9JSslYyVwMiVkKSwgY3V1MT1cRUEsIGRjaDE9XEVQLCBkbDE9XEVMLAorCWVkPVxFSiwgZWw9XEVLLCBocGE9XEVOJXAxJWQsIGlsMT1cRUksIGluZD1cRUUsIHJpPVxFRCwKKwlybWN1cD1cRVgsIHJtaXI9XEVSLCBybXNvPVxFVCwgcm11bD1cRVYsIHNtY3VwPVxFVywgc21pcj1cRVEsCisJc21zbz1cRVMsIHNtdWw9XEVVLCB2cGE9XEVPK1xzLAorCisjIFdlIGRvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhlIGFwb2xsbyBndXlzIHJlcGxpY2F0ZWQgREVDJ3MgZmlybXdhcmUgYnVnCisjIGluIHRoZSBWVDEzMiB0aGF0IHJldmVyc2VkIDxybWlyPi88c21pcj4uICBUbyBiZSBvbiB0aGUgc2FmZSBzaWRlLCBkaXNhYmxlCisjIGJvdGggdGhlc2UgY2FwYWJpbGl0aWVzLgorYXBvbGxvXzE1UHxhcG9sbG8gMTUgaW5jaCBkaXNwbGF5LAorCXJtaXJALCBzbWlyQCwgdXNlPXZ0MTMyLAorYXBvbGxvXzE5THxhcG9sbG8gMTkgaW5jaCBkaXNwbGF5LAorCXJtaXJALCBzbWlyQCwgdXNlPXZ0MTMyLAorYXBvbGxvX2NvbG9yfGFwb2xsbyBjb2xvciBkaXNwbGF5LAorCXJtaXJALCBzbWlyQCwgdXNlPXZ0MTMyLAorCisjIyMjIENvbnZlcmdlbnQgVGVjaG5vbG9neQorIworIyBCdXJyb3VnaHMgYm91Z2h0IENvbnZlcmdlbnQgc2hvcnRseSBiZWZvcmUgaXQgbWVyZ2VkIHdpdGggVW5pdmFjLgorIyBDVE9TIGlzIChJIGJlbGlldmUpIGRlYWQuICBQcm9iYWJseSB0aGUgYXdzIGlzIHRvbyAodGhpcyBlbnRyeSBkYXRlcworIyBmcm9tIDE5OTEgb3IgZWFybGllcikuCisjCisKKyMgQ29udmVyZ2VudCBBV1Mgd29ya3N0YXRpb24gZnJvbSBHb3VsZC9TRUwgVVRYLzMyIHZpYSBCUkwKKyMgKGF3czogcmVtb3ZlZCB1bmtub3duIDpkbj1eSzogLS0gZXNyKQorYXdzfENvbnZlcmdlbnQgVGVjaG5vbG9naWVzIEFXUyB3b3Jrc3RhdGlvbiB1bmRlciBVVFggYW5kIFhlbml4LAorCWFtLAorCU9UdWcjMCwgY29scyM4MCwgbGluZXMjMjgsIHhtYyMwLAorCU9UYmM9XkgsIE9UbWE9XDAxNmhcMDEzalwwMDFrXDAyMmxcMDAybSwgT1RubD1eSiwgYWNzYz0sCisJY2xlYXI9XkwsIGN1ZDE9XkssIGN1ZjE9XlIsIGN1cD1cRUMlcDIlYyVwMSVjLCBjdXUxPV5BLAorCWRjaDE9XEVEQywgZGwxPVxFREwsIGVkPVxFRUYsIGVsPVxFRUwsIGhwYT1cRUglcDElYywKKwlpY2gxPVxFSUMsIGlsMT1cRUlMLCBpbmQ9XEVTVSwga2JzPV5ILCBrY3ViMT1eTiwga2N1ZDE9XkssCisJa2N1ZjE9XlIsIGtjdXUxPV5BLCByaT1cRVNELCBybWFjcz1cRUFBRiwgcm1zbz1cRUFSRiwKKwlybXVsPVxFQVVGLCBzbWFjcz1cRUFBTiwgc21zbz1cRUFSTiwgc211bD1cRUFVTiwKKwl2cGE9XEVWJXAxJWMsCithd3NjfENvbnZlcmdlbnQgVGVjaG5vbG9naWVzIEFXUyB3b3Jrc3RhdGlvbiB1bmRlciBDVE9TLAorCWFtLAorCU9UdWcjMCwgY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCU9UYmM9Xk4sIE9UbWE9XDAxNmhcMDEzalwwMDFrXDAyMmxcMDAybSwgYWNzYz0sIGNsZWFyPV5MLAorCWN1ZDE9XkssIGN1ZjE9XlIsIGN1cD1cRUMlcDIlYyVwMSVjLCBjdXUxPV5BLCBlZD1cRUVGLAorCWVsPVxFRUwsIGticz1eSCwga2N1YjE9Xk4sIGtjdWQxPV5LLCBrY3VmMT1eUiwga2N1dTE9XkEsCisJcm1hY3M9XEVBQUYsIHJtc289XEVBQSwgcm11bD1cRUFBLCBzbWFjcz1cRUFBTiwgc21zbz1cRUFFLAorCXNtdWw9XEVBQywKKworIyMjIyBERUMgY29uc29sZXMKKyMKKworIyBUaGUgTWljcm9WYXggY29uc29sZS4gIFRpbSBUaGVpc2VuIDx0aW1AY3Mud2lzYy5lZHU+IHdyaXRlczoKKyMgVGhlIGRpZ2l0YWwgdVZheCBJSSdzIGhhZCBhIGdyYXBoaWMgZGlzcGxheSBjYWxsZWQgYSBxZHNzLiAgSXQgd2FzCisjIHN1cHBvc2VkIHRvIGJlIGEgaGlnaCBwZXJmb3JtYW5jZSBncmFwaGljIGFjY2VsZXJhdG9yLCBidXQgaXQgd2FzCisjIGxhdGUgdG8gbWFya2V0IGFuZCBiYXJlbHkgYXBwZWFyZWQgYmVmb3JlIGZhc3RlciBkdW1iIGZyYW1lIGJ1ZmZlcnMKKyMgYXBwZWFyZWQuICBJIGhhdmUgb25seSB1c2VkIHRoaXMgZGlzcGxheSB3aGlsZSBydW5uaW5nIFgxMS4gIEhvd2V2ZXIsCisjIGR1cmluZyBib290dXAsIGl0IHdhcyBpbiB0ZXh0IG1vZGUsIGFuZCBwcm9iYWJseSBoYWQgYSB0ZXJtaW5hbCBlbXVsYXRvcgorIyB3aXRoaW4gaXQuICBBbmQgdGhhdCBpcyB3aGF0IHlvdXIgdGVybWNhcCBlbnRyeSBpcyBmb3IuICBJbiBncmFwaGljcworIyBtb2RlIHRoZSBzY3JlZW4gc2l6ZSBpcyAxMDI0eDg2NCBwaXhlbHMuCitxZHNzfHFkY29uc3xxZHNzIGdsYXNzIHR0eSwKKwlPVGJzLCBhbSwKKwljb2xzIzEyOCwgbGluZXMjNTcsCisJY2xlYXI9XDAzMiQ8MS8+LCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElYyVwMiVjLCBjdXUxPV5LLAorCisjIyMjIEZvcnR1bmUgU3lzdGVtcyBjb25zb2xlcworIworIyBGb3J0dW5lIG1hZGUgYSBsaW5lIG9mIDY4Sy1iYXNlZCBVTklYIGJveGVzIHRoYXQgd2VyZSBwcmV0dHkgbmlmdHkKKyMgaW4gdGhlaXIgZGF5OyBJIChlc3IpIHVzZWQgb25lIG15c2VsZiBmb3IgYSB5ZWFyIG9yIHNvIGFyb3VuZCAxOTg0LgorIyBUaGV5IGhhZCBubyBncmFwaGljcywgdGhvdWdoLCBhbmQgY291bGRuJ3QgY29tcGV0ZSBhZ2FpbnN0IFN1bnMgYW5kCisjIHRoZSBsaWtlLiAgUi5JLlAuCisjCisKKyMgRnJvbTogUm9iZXJ0IE5hdGhhbnNvbiA8YzE2MC0zYnBAQ29yYWw+IHZpYSB0dXQgICBXZWQgT2N0IDUsIDE5ODMKKyMgKFRoaXMgaGFkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMKKyMJOnJ2PVxFSDpyZT1cRUk6cmc9MDpHRz0wOlwKKyMJOkNPPVxFXFw6V0w9XkFhXHI6V1I9XkFiXHI6Q0w9XkFjXHI6Q1I9XkFkXHI6REw9XkFlXHI6UkY9XkFmXHI6XAorIwk6UkM9XkFnXHI6Q1c9XkFoXHI6TlU9XkFqXHI6RU49XkFrXHI6SE09XkFsOlBMPV5BbVxyOlwKKyMJOlBVPV5BblxyOlBEPV5Bb1xyOlBSPV5BcFxyOkhQPV5BQFxyOlJUPV5BcVxyOlRCPVxyOkNOPVwxNzc6TVA9XEUrRjoKKyMgSXQgaGFkIGJvdGggIjpiczoiIGFuZCAiOmJzPV5IOiI7IEkgcmVtb3ZlZCB0aGUgbGF0dGVyLiAgQWxzbywgaXQgaGFkCisjICI6c2c9MDoiIGFuZCAiOnVnPTA6IjsgZXZpZGVudGx5IHRoZSBjb21wb3NlciB3YXMgdHJ5aW5nICh1bm5lY2Vzc2FyaWx5KQorIyB0byBmb3JjZSBib3RoIG1hZ2ljIGNvb2tpZSBnbGl0Y2hlcyBvZmYuICBPbmNlIHVwb24gYSB0aW1lLCBJCisjIHVzZWQgYSBGb3J0dW5lIG15c2VsZiwgc28gSSBrbm93IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGZvcm0gXkFbYS16XVxyIGFyZQorIyBmdW5jdGlvbiBrZXlzOyB0aHVzIHRoZSAiQWwiIHZhbHVlIGZvciBITSB3YXMgY2VydGFpbmx5IGFuIGVycm9yLiAgSSByZW5hbWVkCisjIEVOL1BEL1BVL0NPL0NGL1JUIGFjY29yZGluZyB0byB0aGUgWEVOSVgvVEMgbWFwcGluZ3MsIGJ1dCBub3QgSE0vREwvUkYvUkMuCisjIEkgdGhpbmsgOnJ2OiBhbmQgOnJlOiBhcmUgc3RhcnQvZW5kIHJldmVyc2UgdmlkZW8gYW5kIDpyZzogaXMgYSBub25leGlzdGVudAorIyAicmV2ZXJzZS12aWRlby1nbGl0Y2giIGNhcGFiaWxpdHk7IEkgaGF2ZSBwdXQgOnJ2OiBhbmQgOnJlOiBpbiB3aXRoIHN0YW5kYXJkCisjIG5hbWVzIGJlbG93LiAgSSd2ZSByZW1vdmVkIG9ic29sZXRlICI6bmw9NV5KOiIgYXMgdGhlcmUgaXMgYSA6ZG86IC0tIGVzcikKK2Zvc3xmb3J0dW5lfEZvcnR1bmUgc3lzdGVtLAorCU9UYnMsIGFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwlhY3NjPWoqayhsIG0icSZ2JXcjeC0sIGJlbD1eRywgYmxpbms9XEVOLCBjaXZpcz1cRV0sCisJY2xlYXI9XDAxNCQ8MjA+LCBjbm9ybT1cRVxcLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cbiQ8Mz4sCisJY3VwPVwwMzRDJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVwwMTMkPDM+LAorCWN2dmlzPVxFXDosIGRjaDE9XDAzNFckPDU+LCBkbDE9XDAzNFIkPDE1PiwKKwllZD1cMDM0WSQ8Myo+LCBlbD1eXFosIGhvbWU9XDAzNiQ8MTA+LCBodD1eWiwKKwlpY2gxPVwwMzRRJDw1PiwgaWwxPVwwMzRFJDwxNT4sIGluZD1eSiwgaXMyPV5fLi4sIGticz1eSCwKKwlrY3ViMT1eQXdcciwga2N1ZDE9XkF5XHIsIGtjdWYxPV5BelxyLCBrY3V1MT1eQXhcciwKKwlrZW5kPV5Ba1xyLCBrZW50PV5BcSwga2YxPV5BYVxyLCBrZjI9XkFiXHIsIGtmMz1eQWNcciwKKwlrZjQ9XkFkXHIsIGtmNT1eQWVcciwga2Y2PV5BZlxyLCBrZjc9XkFnXHIsIGtmOD1eQWhcciwKKwlraG9tZT1eQT9cciwga25wPV5Bb1xyLCBrcHA9XkFuXHIsIG5lbD1eTV5KLCByZXY9XEVILAorCXJtYWNzPV5PLCBybXNvPV5cSWAsIHJtdWw9XlxJUCwgc2dyMD1cRUksIHNtYWNzPVxFbywKKwlzbXNvPV5cSGAsIHNtdWw9XlxIUCwKKworIyMjIyBNYXNzY29tcCBjb25zb2xlcworIworIyBNYXNzY29tcCBoYXMgZ29uZSBvdXQgb2YgYnVzaW5lc3MuICBUaGVpciBwcm9kdWN0IGxpbmUgd2FzIHB1cmNoYXNlZCBieQorIyBjb21hbnkgaW4gR2VvcmdpYSAoVVMpIGNhbGxlZCAiWFMgSW50ZXJuYXRpb25hbCIsIHBhcnRzIGFuZCBzZXJ2aWNlIG1heQorIyBzdGlsbCBiZSBhdmFpbGFibGUgdGhyb3VnaCB0aGVtLgorIworCisjIChtYXNzY29tcDogIjpNVDoiIGNoYW5nZWQgdG8gIjprbToiOyAgLS0gZXNyKQorbWFzc2NvbXB8bWFzc2NvbXAgd29ya3N0YXRpb24gY29uc29sZSwKKwlPVGJzLCBrbSwgbWlyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFWzJKLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbDE9XEVbTSwKKwllZD1cRVtKLCBlbD1cRVtLLCBodD1eSSwgaWwxPVxFW0wsIGlzMj1cRUdjXEVHYlxFR3csIGticz1eSCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBybWlyPVxFWzRsLAorCXJtc289XEVbbSwgcm11bD1cRUdhdSwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRUd1LAorbWFzc2NvbXAxfG1hc3Njb21wIGxhcmdlIHNjcmVlbiB2ZXJzaW9uIDEsCisJY29scyMxMDQsIGxpbmVzIzM2LCB1c2U9bWFzc2NvbXAsCittYXNzY29tcDJ8bWFzc2NvbXAgbGFyZ2Ugc2NyZWVuIHZlcnNpb24gMiwKKwljb2xzIzY0LCBsaW5lcyMyMSwgdXNlPW1hc3Njb21wLAorCisjIyMjIyMjIyBPVEhFUiBPQlNPTEVURSBUWVBFUworIworIyBUaGVzZSB0ZXJtaW5hbHMgYXJlICpsb25nKiBkZWFkIC0tIHRoZXNlIGVudHJpZXMgYXJlIHJldGFpbmVkIGZvcgorIyBoaXN0b3JpY2FsIGludGVyZXN0IG9ubHkuCisjCisKKyMjIyMgT2Jzb2xldGUgbm9uLUFOU0kgc29mdHdhcmUgZW11bGF0aW9ucworIworCisjIENUUk0gdGVybWluYWwgZW11bGF0b3IKKyMgMS4gdW5kZXJsaW5pbmcgaXMgbm90IGFsbG93ZWQgd2l0aCBjb2xvcnM6IGZpcnN0LCBpcyBpcyBzaW11bGF0ZWQgYnkKKyMgYmxhY2sgb24gd2hpdGUsIHNlY29uZCwgaXQgZGlzYWJsZXMgYmFja2dyb3VuZCBjb2xvciBtYW5pcHVsYXRpb25zLgorIyAyLiBCTElOS0lORywgUkVWRVJTRSBhbmQgQk9MRCBhcmUgYWxsb3dlZCB3aXRoIGNvbG9ycywKKyMgc28gd2UgaGF2ZSB0byBzYXZlIHRoZWlyIHN0YXR1cyBpbiB0aGUgc3RhdGljIHJlZ2lzdGVycyBBLCBCIGFuZCBICisjIHJlc3BlY3RpdmVseSwgdG8gYmUgYWJsZSB0byByZXN0b3JlIHRoZW0gd2hlbiBjb2xvciBjaGFuZ2VzCisjIChiZWNhdXNlIGFueSBjb2xvciBjaGFuZ2UgdHVybnMgb2ZmIEFMTCBhdHRyaWJ1dGVzKQorIyAzLiA8Ym9sZD4gYW5kIDxyZXY+IHNlcXVlbmNlcyBhbHRlcm5hdGUgbW9kZXMsCisjIHJhdGhlciB0aGFuIHNpbXBseSAgZW50ZXJpbmcgdGhlbS4gIFRodXMgd2UgaGF2ZSB0byBjaGVjayB0aGUKKyMgc3RhdGljIHJlZ2lzdGVyIEIgYW5kIEggdG8gZGV0ZXJtaW5lIHRoZSBzdGF0dXMsIGJlZm9yZSBzZW5kaW5nIHRoZQorIyBlc2NhcGUgc2VxdWVuY2UuCisjIDQuIDxzZ3IwPiBub3cgbXVzdCBzZXQgdGhlIHN0YXR1cyBvZiBhbGwgMyByZWdpc3RlciAoQSxCLEgpIHRvIHplcm8KKyMgYW5kIHRoZW4gcmVzZXQgY29sb3JzCisjIDUuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm90ZWN0IG1vZGUgd291bGQgYmFkbHkgcGVuYWxpemUgdGhlIHBlcmZvcm1hbmNlLgorIyB3ZSB3b3VsZCBoYXZlIHRvIHVzZSBcRSZibiBzZXF1ZW5jZSB0byB0dXJuIG9mZiBjb2xvcnMgKGFzIHdlbGwgYXMgYWxsCisjIG90aGVyIGF0dHJpYnV0ZXMpLCBhbmQga2VlcCB0aGUgc3RhdHVzIG9mIHByb3RlY3QgbW9kZSBpbiB5ZXQgYW5vdGhlcgorIyBzdGF0aWMgdmFyaWFibGUuICBJZiBzb21lb25lIHJlYWxseSBuZWVkcyB0aGlzIG1vZGUsIHRoZXkgd291bGQgaGF2ZSB0bworIyBjcmVhdGUgYW5vdGhlciB0ZXJtaW5mbyBlbnRyeS4KKyMgNi4gb3JpZ2luYWwgY29sb3ItcGFpciBpcyB3aGl0ZSBvbiBibGFjay4KKyMgc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IGNvbG9ycyBpbnRvIHN0YXRpYyByZWdpc3RlcnMKKyMgNy4gc2V0IGZvcmVncm91bmQgY29sb3IuICBpdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzLgorIyAgIDEpIHR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzCisjICAgMikgdHVybiBvbiB0aGUgYmFja2dyb3VuZCBhbmQgdmlkZW8gYXR0cmlidXRlcyB0aGF0IGhhdmUgYmVlbiB0dXJuZWQKKyMgICAgICBvbiBiZWZvcmUgKHRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHN0YXRpYyByZWdpc3RlcnMgWCxZLFosQSxCLEgsRCkuCisjICAgMykgdHVybiBvbiBmb3JlZ3JvdW5kIGF0dHJpYnV0ZXMKKyMgICA0KSBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBmb3JlZ3JvdW5kIGludG8gVSxWLFcgc3RhdGljIHJlZ2lzdGVycworIyA4LiB0dXJuIG9uIGJhY2tncm91bmQ6IHNpbWlsYXIgdG8gdHVybiBvbiBmb3JlZ3JvdW5kIGFib3ZlCitjdHJtfEMgdGVybWluYWwgZW11bGF0b3IsCisJYW0sIGJjZSwgeG9uLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBsaCMwLCBsaW5lcyMyNCwgbG0jMCwgbHcjMCwgbmN2IzIsIG5sYWIjMCwKKwlwYWlycyM2MywgcGIjMTkyMDAsIHZ0IzYsCisJYmVsPV5HLCBibGluaz1cRSZkQSV7MX0lUEEsCisJYm9sZD0lPyVnSCV7MH0lPSV0XEUmZEglezF9JVBIJTssIGNidD1cRWksCisJY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFJmElcDIlZGMlcDElZFksIGN1dTE9XEVBLCBkY2gxPVxFUCQ8Mj4sIGRsMT1cRU0sCisJZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLCBodD1cMDExJDwyPiwgaHRzPVxFMSwKKwlpbDE9XEVMLCBpbmQ9XkosIGlwPSQ8Mj4sIGlzMj1cRSZqQVxyLCBrYnM9XkgsIGtjdWIxPVxFdVxyLAorCWtjdWQxPVxFd1xyLCBrY3VmMT1cRXZcciwga2N1dTE9XEV0XHIsIGtmMT1cRXBcciwKKwlrZjI9XEVxXHIsIGtmMz1cRXJcciwga2Y0PVxFc1xyLCBrZjU9XEV0XHIsIGtmNj1cRXVcciwKKwlrZjc9XEV2XHIsIGtmOD1cRXdcciwga2hvbWU9XEVwXHIsCisJb3A9XEUmYm5cRSZiQlxFJmJHXEUmYlIlezB9JVBYJXswfSVQWSV7MH0lUFolezF9JVBXJXsxfSVQViV7MX0lUFUsCisJcmV2PSU/JWdCJXswfSU9JXRcRSZkQiV7MX0lUEIlOywgcm1pcj1cRVIsIHJta3g9XEUmakEsCisJc2V0Yj1cRSZibiU/JWdBJXRcRSZkQSU7JT8lZ0IldFxFJmRCJTslPyVnSCV0XEUmZEglOyU/JWdVJXRcRSZiUiU7JT8lZ1YldFxFJmJHJTslPyVnVyV0XEUmYkIlOyU/JXAxJXsxfSUmJXRcRSZiYiV7MX0lZSV7MH0lOyVQWiU/JXAxJXsyfSUmJXRcRSZiZyV7MX0lZSV7MH0lOyVQWSU/JXAxJXs0fSUmJXRcRSZiciV7MX0lZSV7MH0lOyVQWCwKKwlzZXRmPVxFJmJuJT8lZ0EldFxFJmRBJTslPyVnQiV0XEUmZEIlOyU/JWdIJXRcRSZkSCU7JT8lZ1gldFxFJmJyJTslPyVnWSV0XEUmYmclOyU/JWdaJXRcRSZiYiU7JT8lcDElezF9JSYldFxFJmJCJXsxfSVlJXswfSU7JVBXJT8lcDElezJ9JSYldFxFJmJHJXsxfSVlJXswfSU7JVBWJT8lcDElezR9JSYldFxFJmJSJXsxfSVlJXswfSU7JVBVLAorCXNncj1cRSZkQCV7MH0lUEElezB9JVBCJXswfSVQRCV7MH0lUEglPyVwMSVwMyVwNSV8JXwldFxFJmRCJXsxfSVQQiU7JT8lcDQldFxFJmRBJXsxfSVQQSU7JT8lcDYldFxFJmRIJXsxfSVQSCU7JT8lcDIldFxFJmREJTssCisJc2dyMD1cRSZkQCV7MH0lUEElezB9JVBCJXswfSVQSCwgc21pcj1cRVEsIHNta3g9XEUmakIsCisJc21zbz1cRSZkRCwgc211bD1cRSZkRCwgdGJjPVxFMywgdnBhPVxFJmElcDElZFksCisKKyMgZ3M2MzAwIC0gY2FuJ3QgdXNlIGJsdWUgZm9yZWdyb3VuZCwgaXQgY2xhc2hlcyB3aXRoIHVuZGVybGluZTsKKyMgaXQncyBzaW11bGF0ZWQgd2l0aCBjeWFuCisjIEJ1ZzogVGhlIDxvcD4gY2FwYWJpbGl0eSBwcm9iYWJseSByZXNldHMgYXR0cmlidXRlcy4KKyMgKGdzNjMwMDogY29tbWVudGVkIG91dCA8cm1sbj4gKG5vIDxzbWxuPikgLS1lc3IpCitnczYzMDB8ZW1vdHN8QVQmVCBQQzYzMDAgd2l0aCBFTU9UUyB0ZXJtaW5hbCBlbXVsYXRvciwKKwlhbSwgYmNlLCBtc2dyLCB4b24sCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBwYWlycyM2MywKKwlhY3NjPSsrXCxcLC0tLi5gYGFhZmZnZ2hoaWlqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczI9XEVbbSwga2JzPV5ILCBrY2J0PV5SXkksIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFWzBzLCBrZjI9XEVbMjRzLCBrZjM9XEVbMXMsCisJa2Y0PVxFWzIzcywga2Y1PVxFWzJzLCBrZjY9XEVbMjJzLCBrZjc9XEVbM3MsIGtmOD1cRVsyMXMsCisJa2hvbWU9XEVbSCwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIG9wPVxFWz87bSwgcmV2PVxFWzdtLAorCXJpPVxFW0wsIHJtYWNzPVxFWzEwbSwgcnMxPVxFYywgc2V0Yj1cRVs/OyVwMSVkbSwKKwlzZXRmPVxFWz8lPyVwMSV7MH0lPSV0MCVlJXAxJXsxfSU9JXQyJWUlcDElezF9JS0lZCU7bSwKKwlzZ3IwPVxFW21cRVsxMG0sIHNtYWNzPVxFWzExbSwgc21zbz1cRVsxbSwgc211bD1cRVs0bSwKKworIyBGcm9tOiA8ZWFybGVAc21lYWdvbC5VVUNQPiAyOSBPY3QgODUgMDU6NDA6MTggR01UCisjIE1TLUtlcm1pdCB3aXRoIEhlYXRoLTE5IGVtdWxhdGlvbiBtb2RlIGVuYWJsZWQKKyMgKGgxOWs6IGNoYW5nZWQgIjpwdEA6IiB0byAiOml0QCIKK2gxOWt8aDE5a2VybWl0fGhlYXRoa2l0IGVtdWxhdGlvbiBwcm92aWRlZCBieSBLZXJtaXQgKG5vIGF1dG8gbWFyZ2luKSwKKwlhbUAsIGRhLCBkYiwgeHQsCisJaXRALAorCWh0QCwgdXNlPWgxOS11LAorCisjIEFwcGxlIE1hY2ludG9zaCB3aXRoIFZlcnNhdGVybSwgYSB0ZXJtaW5hbCBlbXVsYXRvciBkaXN0cmlidXRlZCBieSBTeW5lcmd5CisjIFNvZnR3YXJlIChmb3JtZXJseSBQZXJpcGhlcmFscyBDb21wdXRlcnMgJiBTdXBwbGllcywgSW5jKSBvZgorIyAyNDU3IFBlcmtpb21lbiBBdmUuLCBSZWFkaW5nLCBQQSAxOTYwNiwgMS04MDAtODc2LTgzNzYuICBUaGV5IGNhbgorIyBhbHNvIGJlIHJlYWNoZWQgYXQgc3VwcG9ydEBzeW5lcmd5LmNvbS4KK3ZlcnNhdGVybXx2ZXJzYXRlcm0gdnQxMDAgZW11bGF0b3IgZm9yIHRoZSBtYWNpbnRvc2gsCisJYW0sIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSQ8Mi8+LCBib2xkPVxFWzFtJDwyLz4sCisJY2xlYXI9XEVbO0hcRVsySiQ8NTAvPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MkPDIvPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDUvPiwgY3V1MT1cRVtBJDwyLz4sCisJZGNoMT1cRVsxUCQ8Ny8+LCBkbDE9XEVbMU0kPDkvPiwgZWQ9XEVbSiQ8NTAvPiwKKwllbD1cRVtLJDwzLz4sIGhvbWU9XEVbSCwgaHQ9XkksIGljaDE9XEVbMUAkPDcvPiwKKwlpbDE9XEVbMUwkPDkvPiwgaXMyPVxFWzE7MjRyXEVbMjQ7MUgsIGticz1eSCwga2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjE9XEVPUCwga2YyPVxFT1EsCisJa2YzPVxFT1IsIGtmND1cRU9TLCBuZWw9Xk1eSiwgcmM9XEU4LCByZXY9XEVbN20kPDIvPiwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgcmk9XEVNJDw1Lz4sCisJcm1reD1cRT5cRVs/MWwsIHJtc289XEVbbSQ8Mi8+LCBybXVsPVxFW20kPDIvPiwgcnMxPVxFPiwKKwlzYz1cRTcsIHNncjA9XEVbbSQ8Mi8+LCBzbWt4PVxFPVxFWz8xaCwgc21zbz1cRVs3bSQ8Mi8+LAorCXNtdWw9XEVbNG0kPDIvPiwKKworIyBGcm9tOiBSaWNrIFRob21hcyA8aWhucDQhYnRsdW5peCFyYnQ+CisjICh4dGFsazogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZy4KK3h0YWxrfElCTSBQQyB3aXRoIHh0YWxrIGNvbW11bmljYXRpb24gcHJvZ3JhbSAodmVyc2lvbnMgdXAgdG8gMy40KSwKKwlhbSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsIHhtYyMxLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiQ8NTA+LCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MkPDI+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8NT4sIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBJDwyPiwgZGwxPVxFW00kPDk5PiwgZWQ9XEVbSiQ8NTA+LCBlbD1cRVtLJDwzPiwKKwllbDE9XEVbMUskPDM+LCBlbmFjcz1cRShCXEUpMCwgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwKKwlpbDE9XEVbTCQ8OTk+LCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwKKwlrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCByaT1cRU0kPDU+LCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbVxzLAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNncjA9XEVbbSwKKwlzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtXHMsCisJdGJjPVxFWzNnLCB1c2U9dnQxMDArZm5rZXlzLAorCisjIFRoZSBvZmZpY2lhbCBQQyB0ZXJtaW5hbCBlbXVsYXRvciBwcm9ncmFtIG9mIHRoZSBBVCZUIFByb2R1Y3QgQ2VudGVycy4KKyMgTm90ZSAtIGluc2VydCBtb2RlIGNvbW1lbnRlZCBvdXQgLSBkb2Vzbid0IHNlZW0gdG8gd29yayBvbiBBVCZUIFBDLgorc2ltdGVybXxhdHRwYyBydW5uaW5nIHNpbXRlcm0sCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9XEVSLAorCWRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaWwxPVxFTCwgaW5kPV5KLCBybWN1cD1cRVZFLAorCXJtc289XEUmZEAsIHNncjA9XEUmZEAsIHNtY3VwPVxFVlMsIHNtc289XEUmZEIsCisKKyMjIyMgRGFpc3kgd2hlZWwgcHJpbnRlcnMKKyMKKyMgVGhpcyBzZWN0aW9uIGNvbGxlY3RzIERpYWJsbywgRFRDLCBYZXJveCwgUXVtZSwgYW5kIG90aGVyIGRhaXN5CisjIHdoZWVsIHRlcm1pbmFscy4gIFRoZXNlIGFyZSBub3cgbGFyZ2VseSBvYnNvbGV0ZS4KKyMKKworIyAoZGlhYmxvMTYyMDogcmVtb3ZlZCA8aWY9L3Vzci9zaGFyZS90YWJzZXQveGVyb3gxNzIwPiwgbm8gc3VjaCBmaWxlIC0tIGVzcikKK2RpYWJsbzE2MjB8ZGlhYmxvMTcyMHxkaWFibG80NTB8aXBzaXxkaWFibG8gMTYyMCwKKwloYywgb3MsCisJY29scyMxMzIsIGl0IzgsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1cRV5KLCBoZD1cRUQsIGhwYT1cRVwwMTElaSVwMSVjLAorCWh0PV5JLCBodHM9XEUxLCBodT1cRVUsIGticz1eSCwgdGJjPVxFMiwKK2RpYWJsbzE2MjAtbTh8ZGlhYmxvMTY0MC1tOHxkaWFibG8gMTYyMCB3LzggY29sdW1uIGxlZnQgbWFyZ2luLAorCWNvbHMjMTI0LAorCWlzMj1cciAgICAgICAgXEU5LCB1c2U9ZGlhYmxvMTYyMCwKKyMgKGRpYWJsbzE2NDA6IHJlbW92ZWQgPGlmPS91c3Ivc2hhcmUvdGFic2V0L3hlcm94MTczMD4sIG5vIHN1Y2ggZmlsZSAtLSBlc3IpCitkaWFibG8xNjQwfGRpYWJsbzE3MzB8ZGlhYmxvMTc0MHxkaWFibG82MzB8eDE3MDB8ZGlhYmxvfHhlcm94fGRpYWJsbyAxNjQwLAorCWJlbD1eRywgcm1zbz1cRSYsIHJtdWw9XEVSLCBzbXNvPVxFVywgc211bD1cRUUsCisJdXNlPWRpYWJsbzE2MjAsCisjIChkaWFibG8xNjQwLWxtOiByZW1vdmVkIDxpZj0vdXNyL3NoYXJlL3RhYnNldC94ZXJveDE3MzAtbG0+LCBubyBzdWNoCisjIGZpbGUgLS0gZXNyKQorZGlhYmxvMTY0MC1sbXxkaWFibG8tbG18eGVyb3gtbG18ZGlhYmxvIDE2NDAgd2l0aCBpbmRlbnRlZCBsZWZ0IG1hcmdpbiwKKwljb2xzIzEyNCwKKwlybXNvPVxFJiwgcm11bD1cRVIsIHNtc289XEVXLCBzbXVsPVxFRSwgdXNlPWRpYWJsbzE2MjAsCitkaWFibG8xNzQwLWxtfDYzMC1sbXwxNzMwLWxtfHgxNzAwLWxtfGRpYWJsbyAxNzQwIHByaW50ZXIsCisJdXNlPWRpYWJsbzE2NDAtbG0sCisjIERUQyAzODIgd2l0aCBWRFUuICBIYXMgbm8gPGVkPiBzbyB3ZSBmYWtlIGl0IHdpdGggPGVsPi4gIFN0YW5kb3V0CisjIDxzbXNvPV5QXHNcMDAyXlBGPiB3b3JrcyBidXQgd29uJ3QgZ28gYXdheSB3aXRob3V0IGR5bmFtaXRlIDxybXNvPV5QXHNcMD4uCisjIFRoZSB0ZXJtaW5hbCBoYXMgdGFicywgYnV0IEknbSBnZXR0aW5nIHRpcmVkIG9mIGZpZ2h0aW5nIHRoZSBicmFpbmRhbWFnZS4KKyMgSWYgbm8gdGFiIGlzIHNldCBvciB0aGUgdGVybWluYWwncyBpbiBhIGJhZCBtb29kLCBpdCBnbGl0Y2hlcyB0aGUgc2NyZWVuCisjIGFyb3VuZCBhbGwgb2YgbWVtb3J5LiAgTm90ZSB0aGF0IHJldHVybiBwdXRzIGEgYmxhbmsgKCJhIHJldHVybiBjaGFyYWN0ZXIiKQorIyBpbiB0aGUgc3BhY2UgdGhlIGN1cnNvciB3YXMgYXQsIHNvIHdlIHVzZSBeUCByZXR1cm4gKGFuZCB0aHVzIF5QIG5ld2xpbmUgZm9yCisjIG5ld2xpbmUpLiAgTm90ZSBhbHNvIHRoYXQgaWYgeW91IHR1cm4gb2ZmIDpwdDogYW5kIGxldCBVbml4IGV4cGFuZCB0YWJzLAorIyBjdXJzZXMgd29uJ3Qgd29yayAoc29tZSBvbGQgQlNEIHZlcnNpb25zKSBiZWNhdXNlIGl0IGRvZXNuJ3QgY2xlYXIgdGhpcyBiaXQsCisjIGFuZCBjdXJzb3IgYWRkcmVzc2luZyBzZW5kcyBhIHRhYiBmb3Igcm93L2NvbHVtbiA5LiAgV2hhdCBhIGxvc2luZyB0ZXJtaW5hbCEKKyMgSSBoYXZlIGJlZW4gdW5hYmxlIHRvIGdldCB0YWJzIHNldCBpbiBhbGwgOTYgbGluZXMgLSBpdCBhbHdheXMgbGVhdmVzIGF0CisjIGxlYXN0IG9uZSBsaW5lIHdpdGggbm8gdGFicyBpbiBpdCwgYW5kIG9uY2UgeW91IHRhYiB0aHJvdWdoIHRoYXQgbGluZSwKKyMgaXQgY29tcGxldGVseSB3ZWlyZHMgb3V0LgorIyAoZHRjMzgyOiBjaGFuZ2UgPHJtY3VwPiB0byA8c21jdXA+IC0tIGl0ICBqdXN0IGRvZXMgYSBjbGVhciAtLWVzcikKK2R0YzM4MnxEVEMgMzgyLAorCWFtLCBkYSwgZGIsIHhocCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbG0jOTYsCisJYmVsPV5HLCBjbGVhcj1cMDIwXDAzNSQ8MjA+LCBjbm9ybT1eUGIsIGNyPV5QXk0sIGN1YjE9XkgsCisJY3VmMT1eUFIsIGN1cD1cMDIwXDAyMSVwMiVjJXAxJWMsIGN1dTE9XlBeTCwgY3Z2aXM9XlBCLAorCWRjaDE9XlgsIGRsMT1eUF5TLCBlZD1cMDIwXDAyNVwwMjBcMDIzXDAyMFwwMjMsIGVsPV5QXlUsCisJaG9tZT1eUF5SLCBpbDE9XlBeWiwgaW5kPV5KLCBwYWQ9XDE3Nywgcm1jdXA9LCBybWlyPV5QaSwKKwlybXVsPV5QIFwwLCBzbWN1cD1cMDIwXDAzNSQ8MjA+LCBzbWlyPV5QSSwgc211bD1eUCBeUCwKK2R0YzMwMHN8RFRDIDMwMHMsCisJaGMsIG9zLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9XlosIGZmPV5MLCBoZD1cRWgsIGh0PV5JLAorCWh0cz1cRTEsIGh1PVxFSCwgaW5kPV5KLCBrYnM9XkgsIHRiYz1cRTMsCitnc2l8bXlzdGVyeSBnc2kgdGVybWluYWwsCisJaGMsIG9zLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9XlosIGhkPVxFaCwgaHQ9XkksIGh1PVxFSCwKKwlpbmQ9XkosCithajgzMHxhajgzMnxhanxhbmRlcnNvbiBqYWNvYnNvbiwKKwloYywgb3MsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1cRTcsIGhkPVxFOSwgaHU9XEU4LAorCWluZD1eSiwKKyMgRnJvbTogQ2hyaXMgVG9yZWsgPGNocmlzQGd5cmUudW1kLmVkdT4gVGh1LCA3IE5vdiA4NSAxODoyMTo1OCBFU1QKK2FqNTEwfEFuZGVyc29uLUphY29ic29uIG1vZGVsIDUxMCwKKwlhbSwgbWlyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPV5MLCBjdWIxPV5ILCBjdWYxPVxFWCwKKwljdXA9XEUjJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFWSwKKwlkY2gxPS4xKlxFJ0QsIGRsMT1cRSZEJDwyKi8+LCBlZD1cRSdQLCBlbD1cRSdMLCBpY2gxPSwKKwlpbDE9XEUmSSQ8MiovPiwgaXA9JDwuMSovPiwga2N1YjE9XEVXLCBrY3VkMT1cRVosCisJa2N1ZjE9XEVYLCBrY3V1MT1cRVksIHBhZD1cMTc3LCBybWN1cD1cRSJOLCBybWlyPVxFJ0osCisJcm1zbz1cRSJJLCBybXVsPVxFIlUsIHNtY3VwPVxFIk4sIHNtaXI9XEUnSSwgc21zbz1cRSJJLAorCXNtdWw9XEUiVSwKKyMgRnJvbTogPGNib3NnIXVjYnZheCFwdXItZWUhY2luY3khY2hyaXM+IFRodSBBdWcgMjAgMDk6MDk6MTggMTk4MQorIyBUaGlzIGlzIGluY29tcGxldGUsIGJ1dCBpdCdzIGEgc3RhcnQuCituZWM1NTIwfG5lY3xzcGlud3JpdGVyfG5lYyA1NTIwLAorCWhjLCBvcywKKwljb2xzIzEzMiwgaXQjOCwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdXUxPVxFOSwgZmY9XkwsCisJaGQ9XEVdc1xuXEVdVywgaHQ9XkksIGh0cz1cRTEsIGh1PVxFXXNcRTlcRV1XLCBpbmQ9XkosCisJa2JzPV5ILCB0YmM9XEUzLAorcXVtZTV8cXVtZXxRdW1lIFNwcmludCA1LAorCWhjLCBvcywKKwljb2xzIzgwLCBpdCM4LAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9XlosIGZmPV5MLCBoZD1cRWgsIGh0PV5JLAorCWh0cz1cRTEsIGh1PVxFSCwgaW5kPV5KLCBrYnM9XkgsIHRiYz1cRTMsCisjIEkgc3VzcGVjdCB0aGUgeGVyb3ggMTcyMCBpcyB0aGUgc2FtZSBhcyB0aGUgZGlhYmxvIDE2MjAuCit4ZXJveDE3MjB8eDE3MjB8eDE3NTB8eGVyb3ggMTcyMCwKKwloYywgb3MsCisJY29scyMxMzIsIGl0IzgsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgZmY9XkwsIGh0PV5JLCBodHM9XEUxLCBpbmQ9XkosCisJdGJjPVxFMiwKKworIyMjIyBNaXNjZWxsYW5lb3VzIG9ic29sZXRlIHRlcm1pbmFscywgbWFudWZhY3R1cmVycyB1bmtub3duCisjCisjIElmIHlvdSBoYXZlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSAobGlrZSwgYSBtYW51ZmFjdHVyZXIncyBuYW1lLAorIyBhbmQgYSBkYXRlIG9uIHRoZSBzZXJpYWwtbnVtYmVyIHBsYXRlKSBwbGVhc2Ugc2VuZCBpdCEKKworY2FkNjgtM3xjZ2MzfGNhZDY4IGJhc2ljIG1vbml0b3IgdHJhbnNwYXJlbnQgbW9kZSBzaXplIDMgY2hhcnMsCisJT1RicywgYW0sCisJY29scyM3MywgbGluZXMjMzYsCisJY2xlYXI9XlosIGN1YjE9XkgsIGN1ZjE9XkwsIGN1dTE9XkssIGhvbWU9Xl4sCitjYWQ2OC0yfGNnYzJ8Y2FkNjggYmFzaWMgbW9uaXRvciB0cmFuc3BhcmVudCBtb2RlIHNpemUgMiBjaGFycywKKwlPVGJzLCBhbSwKKwljb2xzIzg1LCBsaW5lcyMzOSwKKwljbGVhcj1eWiwgY3ViMT1eSCwgY3VmMT1eTCwgY3V1MT1eSywgaG9tZT1eXiwga2N1YjE9XEUzLAorCWtjdWQxPVxFMiwga2N1ZjE9XEU0LCBrY3V1MT1cRTEsIGtmMT1cRTUsIGtmMj1cRTYsIGtmMz1cRTcsCisJa2Y0PVxFOCwgcm1zbz1cRW1eQywgc21zbz1cRW1eTCwKK2NvcHMxMHxjb3BzfGNvcHMtMTB8Y29wcyAxMCwKKwlhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDMwJDwzMC8+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XDAyMCVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZWQ9XlcsIGVsPV5WLAorCWluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKwlraG9tZT1eWSwKKyMgKGQxMzI6IHJlbW92ZWQgZHVwbGljYXRlIDppYz1cRTU6LAorIyBtZXJnZWQgaW4gY2FwYWJpbGl0aWVzIGZyb20gYSBCUkwgZW50cnkgLS0gZXNyKQorZDEzMnxkYXRhZ3JhcGhpeHxkYXRhZ3JhcGhpeCAxMzJhLAorCWRhLCBkYiwgaW4sCisJY29scyM4MCwgbGluZXMjMzAsCisJYmVsPV5HLCBjbGVhcj1eTCwgY25vcm09XEVtXEVuLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFTCwgY3VwPVxFOCVpJXAxJTNkJXAyJTNkLCBjdXUxPVxFSywgY3Z2aXM9XEV4LAorCWRjaDE9XEU2LCBob21lPVxFVCwgaHQ9XkksIGljaDE9XEU1LCBpbDE9XEUzLCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCByaT1cRXcsCisjIFRoZSBkODAwIHdhcyBhbiBlYXJseSBwb3J0YWJsZSB0ZXJtaW5hbCBmcm9tIGMuMTk4NC04NSB0aGF0IGxvb2tlZCBhIGxvdAorIyBsaWtlIHRoZSBvcmlnaW5hbCBDb21wYXEgYGx1bmNoYm94JyBwb3J0YWJsZSAoYnV0IG5vIGhhbmRsZSkuICBJdCBoYWQgYSB2dDIyMAorIyBtb2RlICh3aGljaCBpcyB3aGF0IHRoaXMgZW50cnkgbG9va3MgbGlrZSkgYW5kIHNldmVyYWwgb3RoZXIgbGVzc2VyLWtub3duCisjIGVtdWxhdGlvbnMuCitkODAwfERpcmVjdCA4MDAvQSwKKwlPVGJzLCBhbSwgZGEsIGRiLCBtc2dyLCB4aHAsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1gYGExZnhncWgwallrP2xabUBuRW9vcHBxRHJyc3N0Q3U0dkF3QngzeXl6ent7fHx9fX5+LAorCWJlbD1eRywgY2xlYXI9XEVbMTsxSFxFWzJKLCBjbm9ybT1cRVs+MTJoLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz4xMmwsIGVkPVxFW0osIGVsPVxFW0ssIGh0PV5JLCBpbmQ9XEVELCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwKKwlrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULCBrZjY9XEVPVSwga2Y3PVxFT1YsIGtmOD1cRU9XLAorCXJpPVxFTSwgcm1hY3M9XEVbbSwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNncjA9XEVbbSwKKwlzbWFjcz1cRVsxbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK2RpZ2lsb2d8ZGlnaWxvZyAzMzMsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMxNiwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5JLCBjdXUxPV5PLCBlbD1eWCwKKwlob21lPV5OLCBpbmQ9XkosCisjIFRoZSBEV0sgd2FzIGEgdGVybWluYWwgbWFudWZhY3R1cmVkIGluIHRoZSBTb3ZpZXQgVW5pb24gYy4xOTg2Citkd2t8ZHdrLXZ0fGR3ayB0ZXJtaW5hbCwKKwlhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPStcXlwsUS1TLk0wXDE3N2ArYVw6ZidnI2gjaSNqWGtDbEptRm5Ob35xVXNfdEV1UHZcXHdLeFd+XywKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFUCwKKwllZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpY2gxPVxFUSwgaW5kPV5KLCBrYnM9XDE3NywKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtkY2gxPVxFZSwKKwlrZjE9XEVmMSwga2YxMD1cRWYwLCBrZjI9XEVmMiwga2YzPVxFZjMsIGtmND1cRWY0LCBrZjU9XEVmNSwKKwlrZjY9XEVmNiwga2Y3PVxFZjcsIGtmOD1cRWY4LCBrZjk9XEVmOSwga2ljaDE9XEVkLCBrbnA9XEVoLAorCWtwcD1cRWcsIG5lbD1eTV5KLCByZXY9XEVULCByaT1cRVMsIHJtYWNzPVxFRywgcm1zbz1cRVgsCisJc2dyMD1cRVgsIHNtYWNzPVxFRiwgc21zbz1cRVQsCitlbnYyMzB8ZW52aXNpb24yMzB8ZW52aXNpb24gMjMwIGdyYXBoaWNzIHRlcm1pbmFsLAorCXhlbmxALAorCW1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJc2dyPVxFWyU/JXAxJXQ7MSU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTttJDwyPiwKKwl1c2U9dnQxMDAsCisjIFRoZXNlIGV4ZWN1cG9ydHMgd2VyZSBpbXBhY3QtcHJpbnRlciB0dHlzIHdpdGggYSAzMC0gb3IgbWF5YmUgMTUtY3BzIGFjb3VzdGljCisjIGNvdXBsZXIgYXR0YWNoZWQsIHRoZSB3aG9sZSByaWcgZml0dGluZyBpbiBhIHN1aXRjYXNlIGFuZCBtb3JlIG9yIGxlc3MKKyMgcG9ydGFibGUuICBIb3Qgc3R1ZmYgZm9yIGMuMTk3NyA6LSkgLS0gZXNyCitlcDQ4fGVwNDA4MHxleGVjdXBvcnQgNDA4MCwKKwlPVGJzLCBhbSwgb3MsCisJY29scyM4MCwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBoZD1eXCwgaHU9Xl4sIGluZD1eSiwKK2VwNDB8ZXA0MDAwfGV4ZWN1cG9ydCA0MDAwLAorCWNvbHMjMTM2LCB1c2U9ZXA0MDgwLAorIyBBZGFtIFRob21wc29uIDxhdGhvbXBzb0BwYW5nZWEuY2E+IHRlbGxzIHVzOgorIyBJbmZvcm1lciBzZXJpZXMgLSB0aGVzZSBhcmUgYWxsIHBvcnRhYmxlIHVuaXRzLCByZXNlbWJsaW5nIG9sZGVyCisjIGF1dG9tYXRpYyBicmVhZC1iYWtpbmcgbWFjaGluZXMuICBUaGUgdGVybWluYWwgbG9va3MgbGlrZSBhIGBjbGFtc2hlbGwnCisjIGRlc2lnbiwgYnV0IGlzbid0LiAgVGhlIHN0cnVjdHVyZSBpcyBzaW1pbGFyIHRvIHRoZSBEaXJlY3QgdGVybWluYWxzLAorIyBidXQgb25seSBoYWxmIHRoZSB3aWR0aC4gIFRoZSBlbnRpcmUgdW5pdCBpcyBvbmx5IGFib3V0IDEwIiB3aWRlLgorIyBJdCBmZWF0dXJlcyBhbiA4IiBzY3JlZW4gKDYiIG9yIDciIGlmIHlvdSBoYXZlIGNvbG9yISksIGFuZCBhbiA5Ing2IgorIyBrZXlib2FyZC4gIEFsbCB0aGUga2V5cyBhcmUgY3JhbW1lZCB0b2dldGhlciwgbXVjaCBsaWtlIHNvbWUgbGFwdG9wCisjIFBDcyB0b2RheSwgYnV0IHBlcmhhcHMgbGVzcyB3ZWxsIG9yZ2FuaXplZC4uLmFsbCB0aGVzZSB1bml0cyBoYXZlIGEKKyMgYmV3aWxkZXJpbmcgYXJyYXkgb2YgcGx1Z3Mgb24gdGhlIGJhY2ssIGluY2x1ZGluZyBhIGJ1aWx0LWluIG1vZGVtLgorIyBUaGUgMzA1IHdhcyBhIGNvbG9yIHZlcnNpb24gb2YgdGhlIDMwNDsgdGhlIDMwNiBhbmQgMzA3IHdlcmUgbW9ubyBhbmQKKyMgY29sb3IgdGVybWluYWxzIGJ1aWx0IGZvciBJQk0gYmlzeW5jIHByb3RvY29scy4KKyMgRnJvbTogUGF1bCBMZW9uZGlzIDx1bmxsYWJAYW1iZXIuYmVya2VsZXkuZWR1PgoraWZtcnxJbmZvcm1lciBEMzA0LAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFWiwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9XEVcXCwKKwllZD1cRS8sIGVsPVxFUSwgaG9tZT1cRUgsIGljaDE9XEVbLCByaT1cRW4sIHJtc289XEVLLCBzZ3IwPVxFSywKKwlzbXNvPVxFSiwKKyMgRW50cnkgbGFyZ2VseSBiYXNlZCBvbiB3eTYwIGFuZCBoYXMgdGhlIGZlYXR1cmVzIG9mIHd5NjBhay4KK29wdXMzbjErfEVzcHJpdCBPcHVzM24xKyBpbiB3eTYwIG1vZGUgd2l0aCBBTlNJIGFycm93IGtleXMsCisJYW0sIGJ3LCBocywga20sIG1pciwgbXNnciwgdWwsIHhvbiwKKwljb2xzIzgwLCBsaCMxLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCB3c2wjODAsCisJYWNzYz0wd2FfaFtqdWtzbHJtcW54cXp0dHV5dl13cHh2LCBiZWw9XkcsIGJsaW5rPVxFRzIsCisJY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUqJDwxMDA+LCBjbm9ybT1cRWAxLCBjcj1eTSwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLCBjdXA9XEVhJWklcDElZFIlcDIlZEMsIGN1dTE9XkssCisJZGNoMT1cRVckPDExPiwgZGltPVxFR3AsIGRsMT1cRVIkPDU+LCBkc2w9XEV6KFxyLAorCWVkPVxFWSQ8MTAwPiwgZWw9XEVULCBmc2w9Xk0sIGhvbWU9XDAzNiQ8Mj4sIGh0PVwwMTEkPDU+LAorCWh0cz1cRTEsIGlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZCwgaWwxPVxFRSQ8ND4sIGluZD1eSiwKKwlpcD0kPDM+LAorCWlzMj1cRWBcOlxFZShcRU9cRWU2XEVjNDFcRX40XEVjMjFcRWQvXEV6eiZcRVtBXDE3N1xFenonXEVbQlwxNzdcRXp6KFxFW0RcMTc3XEV6eilcRVtDXDE3N1xFeno8XEVbUVwxNzdcRXp6YFxFW0ZcMTc3XEVBMSpcRVpIMTIsCisJa0hPTT1cRXssIGticz1eSCwga2NidD1cRUksIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVXLCBrZGwxPVxFUiwga2VkPVxFWSwKKwlrZWw9XEVULCBrZW5kPVxFW0YsIGtlbnQ9XEU3LCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsCisJa2YxMT1eQUpcciwga2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwKKwlrZjE2PV5BT1xyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsCisJa2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwKKwlraWNoMT1cRVEsIGtpbDE9XEVFLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwga3JwbD1cRXIsCisJbWMwPVxFUCwgbWM0PV5ULCBtYzU9XlIsIG5lbD1cclxuJDwzPiwKKwlwZmxvYz1cRVoyJXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBmeD1cRVoxJXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBsbj1cRXolcDElezQ3fSUrJWMlcDIlc1xyLCBwcm90PVxFKSwgcmk9XEVqJDw3PiwKKwlybWFjcz1cRUheQywgcm1hbT1cRWQuLCBybWN1cD0sIHJtaXI9XEVyLCBybWxuPVxFQTExLAorCXJteG9uPVxFYzIwLCByczE9XEV+IVxFfjQkPDE1MD4sIHJzMj1cRWVGJDwxNTA+LAorCXJzMz1cRXdHXEVlKCQ8MTUwPiwKKwlzZ3I9JT8lcDgldFxFKSVlXEUoJTslPyVwOSV0XEVIXDAwMiVlXEVIXDAwMyU7XEVHJXs0OH0lPyVwMiVwNiV8JXQlezh9JXwlOyU/JXAxJXAzJXwlcDYlfCV0JXs0fSV8JTslPyVwNCV0JXsyfSV8JTslPyVwMSVwNSV8JXQlezY0fSV8JTslPyVwNyV0JXsxfSV8JTslYywKKwlzZ3IwPVxFKFxFSFwwMDNcRUcwXEVjRCwgc21hY3M9XEVIXkIsIHNtYW09XEVkLywKKwlzbWN1cD1cRXp6JlxFW0FcMTc3XEV6eidcRVtCXDE3N1xFenooXEVbRFwxNzdcRXp6KVxFW0NcMTc3XEV6ejxcRVtRXDE3NywKKwlzbWlyPVxFcSwgc21sbj1cRUExMCwgc214b249XEVjMjEsIHRiYz1cRTAsIHRzbD1cRXooLAorCXVjPVxFRzhcRUcwLCB1c2U9YWRtK3NnciwKK3RlbGV0ZWN8VGVsZXRlYyBEYXRhc2NyZWVuLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5fLCBjdXUxPV5LLAorCWhvbWU9Xl4sIGluZD1eSiwKKyMgRnJvbTogTWFyayBEb3JuZmVsZCA8cm9td2FAdWNidmF4LmJlcmtlbGV5LmVkdT4KKyMgVGhpcyBkZXNjcmlwdGlvbiBpcyBmb3IgdGhlIExBTlBBUiBUZWNobm9sb2dpZXMgVklTSU9OIDMyMjAKKyMgdGVybWluYWwgZnJvbSAxOTg0Lzg1LiAgVGhlIGZ1bmN0aW9uIGtleSBkZWZpbml0aW9ucyBrMC1rNSByZXByZXNlbnQgdGhlCisjIGVkaXQga2V5cGFkOiBGSU5ELCBJTlNFUlQgSEVSRSwgUkVNT1ZFLCBTRUxFQ1QsIFBSRVYgU0NSRUVOLAorIyBORVhUIFNDUkVFTi4gVGhlIGtleSBkZWZpbml0aW9ucyBrNi1rOSByZXByZXNlbnQgdGhlIFBGMSB0byBQRjQga2V5cy4KKyMKKyMgS2VubmV0aCBSYW5kZWxsIDxrZW5yQGRhdGFtZXRyaWNzLmNvbT4gd3JpdGVzIG9uIDMxIERlYyAxOTk4OgorIyBJIGhhZCBhIGNvdXBsZSBvZiBzY29wZXMgKDMyMjEpIGxpa2UgdGhpcyBvbmNlIHdoZXJlIEkgdXNlZCB0byB3b3JrLCBhcm91bmQKKyMgdGhlIDE5ODcgdGltZSBmcmFtZSBpZiBtZW1vcnkgc2VydmVzIG1lIGNvcnJlY3RseS4gIFRoZXNlIHNjb3BlcyB3ZXJlIG1hZGUKKyMgYnkgYW4gb3V0Zml0IGNhbGxlZCBMQU5QQVIgVGVjaG5vbG9naWVzLCBhbmQgd2VyZSBtZWFudCB0byBtZSBERUMgVlQgMjIwCisjIGNvbXBhdGlibGUuICBUaGUgMzIyMCB3YXMgYSBwbGFpbiB0ZXh0IHRlcm1pbmFsIGxpa2UgdGhlIFZULTIyMCwgdGhlIDMyMjEKKyMgd2FzIGEgbGlrZSB0aGUgVlQtMjQwIChtb25vY2hyb21lIHdpdGggUmVnaXMgKyBTaXhlbCBncmFwaGljcyksIGFuZCB0aGUgMzIyMgorIyB3YXMgbGlrZSB0aGUgVlQtMjQxIChjb2xvciB3aXRoIFJlZ2lzICsgU2l4ZWwgR3JhcGhpY3MpLiAgVGhlc2UgdGVybWluYWxzCisjICgzMjIxKSBjb3N0IGFib3V0ICQxNTAwIGVhY2gsIGFuZCBvbmUgd2FzIGFsd2F5cyBicm9rZW4gLS0gaGFkIHRvIGJlIHNlbnQKKyMgYmFjayB0byB0aGUgc2hvcCBmb3IgcmVwYWlycy4KKyMgVGhlIG9ubHkgcmVhbCBhZHZhbnRhZ2UgdGhlc2Ugc2NvcGVzIGhhZCBvdmVyIHRoZSBWVC0yNDAncyB3ZXJlOgorIyAxKSBUaGV5IHdlcmUgZmFzdGVyIGluIHRoZSBSZWdpcyBkaXNwbGF5LCBvciBhdCBsZWFzdCB0aGUgb25lcyBJIGRpZAorIyAyKSBUaGV5IGhhZCBhIGhhbmR5IGRlYnVnZ2luZyBmZWF0dXJlIHdoZXJlIHlvdSBjb3VsZCBzcGxpdC1zY3JlZW4gdGhlCisjIHNjb3BlLCB0aGUgZ3JhcGhpY3Mgd291bGQgYXBwZWFyIG9uIHRoZSB0b3AsIGFuZCB0aGUgUkVHSVMgY29tbWFuZHMgd291bGQKKyMgYXBwZWFyIG9uIHRoZSBib3R0b20uICBJIGRvbid0IHJlbWVtYmVyIHRoZSBWVC0yNDBzIGJlaW5nIGFibGUgdG8gZG8gdGhhdC4KKyMgSSB3b3VsZCBzd2VhciB0aGF0IExBTlBBUiBUZWNobm9sb2dpZXMgd2FzIGluIE1BIHNvbWVwbGFjZSwgYnV0IHNpbmNlIEkKKyMgZG9uJ3Qgd29yayBhdCB0aGUgc2FtZSBwbGFjZSBhbnltb3JlLCBhbmQgdGhvc2UgdGVybWluYWxzIGFuZCBtYW51YWxzIHdlcmUKKyMgbG9uZyBzaW5jZSBqdW5rZWQsIEkgY2Fubm90IGJlIGFueSBtb3JlIHN1cmUgdGhhbiB0aGF0LgorIworIyAodjMyMjA6IHJlbW92ZWQgb2Jzb2xldGUgIjprbiMxMDoiLAorIyBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK3YzMjIwfExBTlBBUiBWaXNpb24gSUkgbW9kZWwgMzIyMC8zMjIxLzMyMjIsCisJT1RicywgYW0sIG1pciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRVtIXEVbSiwgY3ViMT1eSCwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGh0PV5JLCBpbDE9XEVbTCwKKwlpczI9XEU+XEVbPzNsXEVbPzdoXEVbPzhoXEVbcCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjA9XEVbMX4sIGtmMT1cRVsyfiwga2YyPVxFWzN+LAorCWtmMz1cRVs0fiwga2Y0PVxFWzV+LCBrZjU9XEVbNn4sIGtmNj1cRVtPUCwga2Y3PVxFW09RLAorCWtmOD1cRVtPUiwga2Y5PVxFW09TLCBraG9tZT1cRVtILCByaT1cRU0sIHJtYW09XEVbPzdsLAorCXJtaXI9XEVbNGwsIHJta3g9XEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLAorCXNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLCBzbWt4PVxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMjIyMjIyMjIElDSC9JQ0gxIFZFUlNVUyBSTUlSL1NNSVIKKyMKKyMgU29tZSBub24tY3Vyc2VzIGFwcGxpY2F0aW9ucyBnZXQgY29uZnVzZWQgaWYgYm90aCBpY2gvaWNoMSBhbmQgcm1pci9zbWlyCisjIGFyZSBwcmVzZW50OyB0aGUgc3ltcHRvbSBpcyBkb3VibGVkIGNoYXJhY3RlcnMgaW4gYW4gdXBkYXRlIHVzaW5nIGluc2VydC4KKyMgVGhlc2UgYXBwbGljYXRpb25zIGFyZSB0ZWNobmljYWxseSBjb3JyZWN0OyBpbiBib3RoIDQuM0JTRCB0ZXJtY2FwIGFuZAorIyB0ZXJtaW5mbywgeW91J3JlIG5vdCBhY3R1YWxseSBzdXBwb3NlZCB0byBzcGVjaWZ5IGJvdGggaWNoL2ljaDEgYW5kIHJtaXIvc21pcgorIyB1bmxlc3MgdGhlIHRlcm1pbmFsIG5lZWRzIGJvdGguICBUbyBteSBrbm93bGVkZ2UsIG5vIHRlcm1pbmFsIHN0aWxsIGluIHRoaXMKKyMgZmlsZSByZXF1aXJlcyBib3RoIG90aGVyIHRoYW4gdGhlIHZlcnkgb2Jzb2xldGUgZG0yNTAwLgorIworIyBGb3IgbmN1cnNlcy1iYXNlZCBhcHBsaWNhdGlvbnMgdGhpcyBpcyBub3QgYSBwcm9ibGVtLCBhcyBuY3Vyc2VzIHVzZXMKKyMgb25lIG9yIHRoZSBvdGhlciBhcyBhcHByb3ByaWF0ZSBidXQgbmV2ZXIgbWl4ZXMgdGhlIHR3by4gIFRoZXJlZm9yZSB3ZQorIyBoYXZlIG5vdCBjb3JyZWN0ZWQgZW50cmllcyBsaWtlIGBsaW51eCcgYW5kIGB4dGVybScgdGhhdCBzcGVjaWZ5IGJvdGguCisjIElmIHlvdSBzZWUgZG91YmxlZCBjaGFyYWN0ZXJzIGZyb20gdGhlc2UsIHVzZSB0aGUgbGludXgtbmljIGFuZCB4dGVybS1uaWMKKyMgZW50cmllcyB0aGF0IHN1cHByZXNzIGljaC9pY2gxLiAgQW5kIHVwZ3JhZGUgdG8gbmN1cnNlcyEKKyMKKworIyMjIyMjIyMgVlQxMDAvQU5TSS9JU08gNjQyOS9FQ01BLTQ4L1BDLVRFUk0gVEVSTUlOQUwgU1RBTkRBUkRTCisjCisjIEFOU0kgWDMuNjQgaGFzIGJlZW4gd2l0aGRyYXduIGFuZCByZXBsYWNlZCBieSBFQ01BLTQ4LiAgVGhlIElTTyA2NDI5IGFuZAorIyBFQ01BLTQ4IHN0YW5kYXJkcyBhcmUgc2FpZCB0byBiZSBhbG1vc3QgaWRlbnRpY2FsLCBidXQgYXJlIG5vdCB0aGUgc2FtZQorIyBhcyBYMy42NCAodGhvdWdoIGZvciBwcmFjdGljYWwgcHVycG9zZXMgdGhleSBhcmUgY2xvc2Ugc3VwZXJzZXRzIG9mIGl0KS4KKyMKKyMgWW91IGNhbiBvYnRhaW4gRUNNQS00OCBmb3IgZnJlZSBieSBzZW5kaW5nIGVtYWlsIHRvIGhlbHBkZXNrQGVjbWEuY2gKKyMgcmVxdWVzdGluZyB0aGUgc3RhbmRhcmQocykgeW91IHdhbnQgKGkuZS4gRUNNQS00OCwgIkNvbnRyb2wgRnVuY3Rpb25zIGZvcgorIyBDb2RlZCBDaGFyYWN0ZXIgU2V0cyIpLCBpbmNsdWRlIHlvdXIgc25haWwtbWFpbCBhZGRyZXNzLCBhbmQgeW91IHNob3VsZAorIyByZWNlaXZlIHRoZSBkb2N1bWVudCBpbiBkdWUgY291cnNlLiAgRG9uJ3QgZXhwZWN0IGFuIGVtYWlsIGFja25vd2xlZGdlbWVudC4KKyMKKyMgUmVsYXRlZCBzdGFuZGFyZHMgaW5jbHVkZSAiWDMuNC0xOTc3OiBBbWVyaWNhbiBOYXRpb25hbCBTdGFuZGFyZCBDb2RlIGZvcgorIyBJbmZvcm1hdGlvbiBJbnRlcmNoYW5nZSIgKHRoZSBBU0NJSSBzdGFuZGFyZCkgYW5kICJYMy40MS4xOTc0OgorIyBDb2RlLUV4dGVuc2lvbiBUZWNobmlxdWVzIGZvciBVc2Ugd2l0aCB0aGUgNy1CaXQgQ29kZWQgQ2hhcmFjdGVyIFNldCBvZgorIyBBbWVyaWNhbiBOYXRpb25hbCBTdGFuZGFyZCBmb3IgSW5mb3JtYXRpb24gSW50ZXJjaGFuZ2UuIiAgSSBiZWxpZXZlIChidXQKKyMgYW0gbm90IGNlcnRhaW4pIHRoYXQgdGhlc2UgYXJlIGVmZmVjdGl2ZWx5IGlkZW50aWNhbCB0byBFQ01BLTYgYW5kIEVDTUEtMzUKKyMgcmVzcGVjdGl2ZWx5LgorIworCisjIyMjIFZUMTAwL0FOU0kvRUNNQS00OAorIworIyBBTlNJIFN0YW5kYXJkIChYMy42NCkgQ29udHJvbCBTZXF1ZW5jZXMgZm9yIFZpZGVvIFRlcm1pbmFscyBhbmQgUGVyaXBoZXJhbHMKKyMgYW5kIEVDTUEtNDggQ29udHJvbCBGdW5jdGlvbnMgZm9yIENvZGVkIENoYXJhY3RlciBTZXRzLgorIworIyBNdWNoIG9mIHRoZSBjb250ZW50IG9mIHRoaXMgY29tbWVudCBpcyBhZGFwdGVkIGZyb20gYSB0YWJsZSBwcmVwYXJlZCBieQorIyBSaWNoYXJkIFNodWZvcmQsIGJhc2VkIG9uIGEgMTk4NCBCeXRlIGFydGljbGUuICBUZXJtaW5mbyBjb3JyZXNwb25kZW5jZXMsCisjIGRpc2N1c3Npb24gb2Ygc29tZSB0ZXJtaW5mby1yZWxhdGVkIGlzc3VlcywgYW5kIHVwZGF0ZXMgdG8gY2FwdHVyZSBFQ01BLTQ4CisjIGhhdmUgYmVlbiBhZGRlZC4gIENvbnRyb2wgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBFQ01BLTQ4IG9ubHkgYXJlIHRhZ2dlZAorIyB3aXRoICogYWZ0ZXIgdGhlaXIgbmFtZXMuCisjCisjIFRoZSB0YWJsZSBpcyBhIGNvbXBsZXRlIGxpc3Qgb2YgdGhlIGRlZmluZWQgQU5TSSBYMy42NC9FQ01BLTQ4IGNvbnRyb2wKKyMgc2VxdWVuY2VzLiAgSW4gdGhlIG1haW4gdGFibGUsIFxFIHN0YW5kcyBmb3IgYW4gZXNjYXBlIChcMDMzKSBjaGFyYWN0ZXIsCisjIFNQQyBmb3Igc3BhY2UuICBQbiBzdGFuZHMgZm9yIGEgc2luZ2xlIG51bWVyaWMgcGFyYW1ldGVyIHRvIGJlIGluc2VydGVkCisjIGluIGRlY2ltYWwgQVNDSUkuICBQcyBzdGFuZHMgZm9yIGEgbGlzdCBvZiBzdWNoIHBhcmFtZXRlcnMgc2VwYXJhdGVkIGJ5CisjIHNlbWljb2xvbnMuICBQYXJhbWV0ZXIgbWVhbmluZ3MgZm9yIG1vc3QgcGFyYW1ldHJpemVkIHNlcXVlbmNlcyBhcmUKKyMgZGVjcmliZWQgaW4gdGhlIG5vdGVzLgorIworIyBTZXF1ZW5jZSAgICAgU2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciAgIG9yCisjIE1uZW1vbmljICAgICBOYW1lICAgICAgICAgICAgICBTZXF1ZW5jZSAgICAgICAgICAgVmFsdWUgICAgICBNb2RlICAgdGVybWluZm8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQVBDICBBcHBsaWNhdG4gUHJvZ3JhbSBDb21tYW5kIFxFIF8gICAgICAgICAgICAgICAgLSAgICAgICAgIERlbGltICAtCisjIEJFTCAgQmVsbCAqICAgICAgICAgICAgICAgICAgICBeRyAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgYmVsCisjIEJQSCAgQnJlYWsgUGVybWl0dGVkIEhlcmUgKiAgICBcRSBCICAgICAgICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBCUyAgIEJhY2twYWNlICogICAgICAgICAgICAgICAgXkggICAgICAgICAgICAgICAgICAtICAgICAgICAgRUYgICAgIC0KKyMgQ0FOICBDYW5jZWwgKiAgICAgICAgICAgICAgICAgIF5YICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtICAgKEEpCisjIENCVCAgQ3Vyc29yIEJhY2t3YXJkIFRhYiAgICAgICBcRSBbIFBuIFogICAgICAgICAgIDEgICAgICAgICBlRiAgICAgY2J0CisjIENDSCAgQ2FuY2VsIFByZXZpb3VzIENoYXJhY3RlciBcRSBUICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBDSEEgIEN1cnNvciBIb3Jpem50YWwgQWJzb2x1dGUgXEUgWyBQbiBHICAgICAgICAgICAxICAgICAgICAgZUYgICAgIGhwYSAoQikKKyMgQ0hUICBDdXJzb3IgSG9yaXpvbnRhbCBUYWIgICAgIFxFIFsgUG4gSSAgICAgICAgICAgMSAgICAgICAgIGVGICAgICB0YWIgKEMpCisjIENNRCAgQ29kaW5nIE1ldGhvZCBEZWxpbWl0ZXIgKiBcRQorIyBDTkwgIEN1cnNvciBOZXh0IExpbmUgICAgICAgICAgXEUgWyBQbiBFICAgICAgICAgICAxICAgICAgICAgZUYgICAgIG5lbCAoRCkKKyMgQ1BMICBDdXJzb3IgUHJlY2VkaW5nIExpbmUgICAgIFxFIFsgUG4gRiAgICAgICAgICAgMSAgICAgICAgIGVGICAgICAtCisjIENQUiAgQ3Vyc29yIFBvc2l0aW9uIFJlcG9ydCAgICBcRSBbIFBuIDsgUG4gUiAgICAgIDEsIDEgICAgICAtICAgICAgLSAgIChFKQorIyBDU0kgIENvbnRyb2wgU2VxdWVuY2UgSW50cm8gICAgXEUgWyAgICAgICAgICAgICAgICAtICAgICAgICAgSW50cm8gIC0KKyMgQ1RDICBDdXJzb3IgVGFidWxhdGlvbiBDb250cm9sIFxFIFsgUHMgVyAgICAgICAgICAgMCAgICAgICAgIGVGICAgICAtICAgKEYpCisjIENVQiAgQ3Vyc29yIEJhY2t3YXJkICAgICAgICAgICBcRSBbIFBuIEQgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgY3ViCisjIENVRCAgQ3Vyc29yIERvd24gICAgICAgICAgICAgICBcRSBbIFBuIEIgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgY3VkCisjIENVRiAgQ3Vyc29yIEZvcndhcmQgICAgICAgICAgICBcRSBbIFBuIEMgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgY3VmCisjIENVUCAgQ3Vyc29yIFBvc2l0aW9uICAgICAgICAgICBcRSBbIFBuIDsgUG4gSCAgICAgIDEsIDEgICAgICBlRiAgICAgY3VwIChHKQorIyBDVVUgIEN1cnNvciBVcCAgICAgICAgICAgICAgICAgXEUgWyBQbiBBICAgICAgICAgICAxICAgICAgICAgZUYgICAgIGN1dQorIyBDVlQgIEN1cnNvciBWZXJ0aWNhbCBUYWIgICAgICAgXEUgWyBQbiBZICAgICAgICAgICAtICAgICAgICAgZUYgICAgIC0gICAoSCkKKyMgREEgICBEZXZpY2UgQXR0cmlidXRlcyAgICAgICAgIFxFIFsgUG4gYyAgICAgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIERBUSAgRGVmaW5lIEFyZWEgUXVhbGlmaWNhdGlvbiBcRSBbIFBzIG8gICAgICAgICAgIDAgICAgICAgICAtICAgICAgLQorIyBEQ0ggIERlbGV0ZSBDaGFyYWN0ZXIgICAgICAgICAgXEUgWyBQbiBQICAgICAgICAgICAxICAgICAgICAgZUYgICAgIGRjaAorIyBEQ1MgIERldmljZSBDb250cm9sIFN0cmluZyAgICAgXEUgUCAgICAgICAgICAgICAgICAtICAgICAgICAgRGVsaW0gIC0KKyMgREwgICBEZWxldGUgTGluZSAgICAgICAgICAgICAgIFxFIFsgUG4gTSAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBkbAorIyBETEUgIERhdGEgTGluayBFc2NhcGUgKiAgICAgICAgXlAgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgRE1JICBEaXNhYmxlIE1hbnVhbCBJbnB1dCAgICAgIFxFIFwgICAgICAgICAgICAgICAgLSAgICAgICAgIEZzICAgICAtCisjIERTUiAgRGV2aWNlIFN0YXR1cyBSZXBvcnQgICAgICBcRSBbIFBzIG4gICAgICAgICAgIDAgICAgICAgICAtICAgICAgLSAgIChJKQorIyBEVEEgIERpbWVuc2lvbiBUZXh0IEFyZWEgKiAgICAgXEUgWyBQbiA7IFBuIFNQQyBUICAtICAgICAgICAgUEMgICAgIC0KKyMgRUEgICBFcmFzZSBpbiBBcmVhICAgICAgICAgICAgIFxFIFsgUHMgTyAgICAgICAgICAgMCAgICAgICAgIGVGICAgICAtICAgKEopCisjIEVDSCAgRXJhc2UgQ2hhcmFjdGVyICAgICAgICAgICBcRSBbIFBuIFggICAgICAgICAgIDEgICAgICAgICBlRiAgICAgZWNoCisjIEVEICAgRXJhc2UgaW4gRGlzcGxheSAgICAgICAgICBcRSBbIFBzIEogICAgICAgICAgIDAgICAgICAgICBlRiAgICAgZWQgIChKKQorIyBFRiAgIEVyYXNlIGluIEZpZWxkICAgICAgICAgICAgXEUgWyBQcyBOICAgICAgICAgICAwICAgICAgICAgZUYgICAgIC0KKyMgRUwgICBFcmFzZSBpbiBMaW5lICAgICAgICAgICAgIFxFIFsgUHMgSyAgICAgICAgICAgMCAgICAgICAgIGVGICAgICBlbCAgKEopCisjIEVNICAgRW5kIG9mIE1lZGl1bSAqICAgICAgICAgICBeWSAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBFTUkgIEVuYWJsZSBNYW51YWwgSW5wdXQgICAgICAgXEUgYiAgICAgICAgICAgICAgICAgICAgICAgICAgRnMgICAgIC0KKyMgRU5RICBFbnF1aXJlICAgICAgICAgICAgICAgICAgIF5FICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIEVPVCAgRW5kIE9mIFRyYW5zbWlzc2lvbiAgICAgICBeRCAgICAgICAgICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBFUEEgIEVuZCBvZiBQcm90ZWN0ZWQgQXJlYSAgICAgXEUgVyAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0gICAoSykKKyMgRVNBICBFbmQgb2YgU2VsZWN0ZWQgQXJlYSAgICAgIFxFIEcgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIEVTQyAgRXNjYXBlICAgICAgICAgICAgICAgICAgICBeWyAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBFVEIgIEVuZCBUcmFuc21pc3Npb24gQmxvY2sgICAgXlcgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgRVRYICBFbmQgb2YgVGV4dCAgICAgICAgICAgICAgIF5DICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIEZGICAgRm9ybSBGZWVkICAgICAgICAgICAgICAgICBeTCAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBGTksgIEZ1bmN0aW9uIEtleSAqICAgICAgICAgICAgXEUgWyBQbiBTUEMgVyAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgR0NDICBHcmFwaGljIENoYXIgQ29tYmluYXRpb24qIFxFIFsgUG4gOyBQbiBTUEMgQiAgLSAgICAgICAgIC0gICAgICAtCisjIEZOVCAgRm9udCBTZWxlY3Rpb24gICAgICAgICAgICBcRSBbIFBuIDsgUG4gU1BDIEQgIDAsIDAgICAgICBGRSAgICAgLQorIyBHU00gIEdyYXBoaWMgU2l6ZSBNb2RpZnkgICAgICAgXEUgWyBQbiA7IFBuIFNQQyBCICAxMDAsIDEwMCAgRkUgICAgIC0gICAoTCkKKyMgR1NTICBHcmFwaGljIFNpemUgU2VsZWN0aW9uICAgIFxFIFsgUG4gU1BDIEMgICAgICAgbm9uZSAgICAgIEZFICAgICAtCisjIEhQQSAgSG9yeiBQb3NpdGlvbiBBYnNvbHV0ZSAgICBcRSBbIFBuIGAgICAgICAgICAgIDEgICAgICAgICBGRSAgICAgLSAgIChCKQorIyBIUEIgIENoYXIgUG9zaXRpb24gQmFja3dhcmQgICAgXEUgWyBqICAgICAgICAgICAgICAxICAgICAgICAgRkUgICAgIC0KKyMgSFBSICBIb3J6IFBvc2l0aW9uIFJlbGF0aXZlICAgIFxFIFsgUG4gYSAgICAgICAgICAgMSAgICAgICAgIEZFICAgICAtICAgKE0pCisjIEhUICAgSG9yaXpvbnRhbCBUYWIgKiAgICAgICAgICBeSSAgICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgLSAgIChOKQorIyBIVEogIEhvcnogVGFiIHcvSnVzdGlmaWNhdGlvbiAgXEUgSSAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIC0KKyMgSFRTICBIb3Jpem9udGFsIFRhYiBTZXQgICAgICAgIFxFIEggICAgICAgICAgICAgICAgLSAgICAgICAgIEZFICAgICBodHMKKyMgSFZQICBIb3J6ICYgVmVydGljYWwgUG9zaXRpb24gIFxFIFsgUG4gOyBQbiBmICAgICAgMSwgMSAgICAgIEZFICAgICAtICAgKEcpCisjIElDSCAgSW5zZXJ0IENoYXJhY3RlciAgICAgICAgICBcRSBbIFBuIEAgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgaWNoCisjIElEQ1MgSUQgRGV2aWNlIENvbnRyb2wgU3RyaW5nICBcRSBbIFNQQyBPICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBJR1MgIElEIEdyYXBoaWMgU3VicmVwZXJ0b2lyZSAgXEUgWyBTUEMgTSAgICAgICAgICAtICAgICAgICAgKiAgICAgIC0KKyMgSUwgICBJbnNlcnQgTGluZSAgICAgICAgICAgICAgIFxFIFsgUG4gTCAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBpbAorIyBJTkQgIEluZGV4ICAgICAgICAgICAgICAgICAgICAgXEUgRCAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIC0KKyMgSU5UICBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgIFxFIGEgICAgICAgICAgICAgICAgLSAgICAgICAgIEZzICAgICAtCisjIEpGWSAgSnVzdGlmeSAgICAgICAgICAgICAgICAgICBcRSBbIFBzIFNQQyBGICAgICAgIDAgICAgICAgICBGRSAgICAgLQorIyBJUzEgIEluZm8gU2VwYXJhdG9yICMxICogICAgICAgXl8gICAgICAgICAgICAgICAgICAtICAgICAgICAgKiAgICAgIC0KKyMgSVMyICBJbmZvIFNlcGFyYXRvciAjMSAqICAgICAgIF5eICAgICAgICAgICAgICAgICAgLSAgICAgICAgICogICAgICAtCisjIElTMyAgSW5mbyBTZXBhcmF0b3IgIzEgKiAgICAgICBeXSAgICAgICAgICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBJUzQgIEluZm8gU2VwYXJhdG9yICMxICogICAgICAgXlwgICAgICAgICAgICAgICAgICAtICAgICAgICAgKiAgICAgIC0KKyMgTEYgICBMaW5lIEZlZWQgICAgICAgICAgICAgICAgIF5KICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIExTMVIgTG9ja2luZyBTaGlmdCBSaWdodCAxICogICBcRSB+ICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBMUzIgIExvY2tpbmcgU2hpZnQgMiAqICAgICAgICAgXEUgbiAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgTFMyUiBMb2NraW5nIFNoaWZ0IFJpZ2h0IDIgKiAgIFxFIH0gICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIExTMyAgTG9ja2luZyBTaGlmdCAzICogICAgICAgICBcRSBvICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBMUzNSIExvY2tpbmcgU2hpZnQgUmlnaHQgMyAqICAgXEUgfCAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgTUMgICBNZWRpYSBDb3B5ICAgICAgICAgICAgICAgIFxFIFsgUHMgaSAgICAgICAgICAgMCAgICAgICAgIC0gICAgICAtICAgKFMpCisjIE1XICAgTWVzc2FnZSBXYWl0aW5nICAgICAgICAgICBcRSBVICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBOQUsgIE5lZ2F0aXZlIEFja25vd2xlZGdlICogICAgXlUgICAgICAgICAgICAgICAgICAtICAgICAgICAgKiAgICAgIC0KKyMgTkJIICBObyBCcmVhayBIZXJlICogICAgICAgICAgIFxFIEMgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIE5FTCAgTmV4dCBMaW5lICAgICAgICAgICAgICAgICBcRSBFICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgbmVsIChEKQorIyBOUCAgIE5leHQgUGFnZSAgICAgICAgICAgICAgICAgXEUgWyBQbiBVICAgICAgICAgICAxICAgICAgICAgZUYgICAgIC0KKyMgTlVMICBOdWxsICogICAgICAgICAgICAgICAgICAgIF5AICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIE9TQyAgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kICBcRSBdICAgICAgICAgICAgICAgIC0gICAgICAgICBEZWxpbSAgLQorIyBQRUMgIFByZXMuIEV4cGFuZC9Db250cmFjdCAqICAgXEUgUG4gU1BDIFogICAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgUEZTICBQYWdlIEZvcm1hdCBTZWxlY3Rpb24gKiAgIFxFIFBuIFNQQyBKICAgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFBMRCAgUGFydGlhbCBMaW5lIERvd24gICAgICAgICBcRSBLICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgLSAgIChUKQorIyBQTFUgIFBhcnRpYWwgTGluZSBVcCAgICAgICAgICAgXEUgTCAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIC0gICAoVSkKKyMgUE0gICBQcml2YWN5IE1lc3NhZ2UgICAgICAgICAgIFxFIF4gICAgICAgICAgICAgICAgLSAgICAgICAgIERlbGltICAtCisjIFBQICAgUHJlY2VkaW5nIFBhZ2UgICAgICAgICAgICBcRSBbIFBuIFYgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgLQorIyBQUEEgIFBhZ2UgUG9zaXRpb24gQWJzb2x1dGUgKiAgXEUgWyBQbiBTUEMgUCAgICAgICAxICAgICAgICAgRkUgICAgIC0KKyMgUFBCICBQYWdlIFBvc2l0aW9uIEJhY2t3YXJkICogIFxFIFsgUG4gU1BDIFIgICAgICAgMSAgICAgICAgIEZFICAgICAtCisjIFBQUiAgUGFnZSBQb3NpdGlvbiBGb3J3YXJkICogICBcRSBbIFBuIFNQQyBRICAgICAgIDEgICAgICAgICBGRSAgICAgLQorIyBQVFggIFBhcmFsbGVsIFRleHRzICogICAgICAgICAgXEUgWyBcICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgUFUxICBQcml2YXRlIFVzZSAxICAgICAgICAgICAgIFxFIFEgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFBVMiAgUHJpdmF0ZSBVc2UgMiAgICAgICAgICAgICBcRSBSICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBRVUFEIFR5cG9ncmFwaGljIFF1YWRkaW5nICAgICAgXEUgWyBQcyBTUEMgSCAgICAgICAwICAgICAgICAgRkUgICAgIC0KKyMgUkVQICBSZXBlYXQgQ2hhciBvciBDb250cm9sICAgIFxFIFsgUG4gYiAgICAgICAgICAgMSAgICAgICAgIC0gICAgICByZXAKKyMgUkkgICBSZXZlcnNlIEluZGV4ICAgICAgICAgICAgIFxFIE0gICAgICAgICAgICAgICAgLSAgICAgICAgIEZFICAgICAtICAgKFYpCisjIFJJUyAgUmVzZXQgdG8gSW5pdGlhbCBTdGF0ZSAgICBcRSBjICAgICAgICAgICAgICAgIC0gICAgICAgICBGcyAgICAgLQorIyBSTSAgIFJlc2V0IE1vZGUgKiAgICAgICAgICAgICAgXEUgWyBQcyBsICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0gICAoVykKKyMgU0FDUyBTZXQgQWRkLiBDaGFyLiBTZXAuICogICAgIFxFIFsgUG4gU1BDIC8gICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFNBUFYgU2VsLiBBbHQuIFByZXNlbnQuIFZhci4gKiBcRSBbIFBzIFNQQyBdICAgICAgIDAgICAgICAgICAtICAgICAgLSAgIChYKQorIyBTQ0kgIFNpbmdsZS1DaGFyIEludHJvZHVjZXIgICAgXEUgWiAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU0NPICBTZWwuIENoYXIuIE9yaWVudGF0aW9uICogIFxFIFsgUG4gOyBQbiBTUEMgayAgLSAgICAgICAgIC0gICAgICAtCisjIFNDUyAgU2V0IENoYXIuIFNwYWNpbmcgKiAgICAgICBcRSBbIFBuIFNQQyBnICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTRCAgIFNjcm9sbCBEb3duICAgICAgICAgICAgICAgXEUgWyBQbiBUICAgICAgICAgICAxICAgICAgICAgZUYgICAgIHJpbgorIyBTRFMgIFN0YXJ0IERpcmVjdGVkIFN0cmluZyAqICAgXEUgWyBQbiBdICAgICAgICAgICAxICAgICAgICAgLSAgICAgIC0KKyMgU0VFICBTZWxlY3QgRWRpdGluZyBFeHRlbnQgICAgIFxFIFsgUHMgUSAgICAgICAgICAgMCAgICAgICAgIC0gICAgICAtICAgKFkpCisjIFNFRiAgU2hlZXQgRWplY3QgJiBGZWVkICogICAgICBcRSBbIFBzIDsgUHMgU1BDIFkgIDAsMCAgICAgICAtICAgICAgLQorIyBTR1IgIFNlbGVjdCBHcmFwaGljIFJlbmRpdGlvbiAgXEUgWyBQcyBtICAgICAgICAgICAwICAgICAgICAgRkUgICAgIHNnciAoTykKKyMgU0hTICBTZWxlY3QgQ2hhci4gU3BhY2luZyAqICAgIFxFIFsgUHMgU1BDIEsgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFNJICAgU2hpZnQgSW4gICAgICAgICAgICAgICAgICBeTyAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLSAgIChQKQorIyBTSU1EIFNlbC4gSW1wLiBNb3ZlIERpcmVjdC4gKiAgXEUgWyBQcyBeICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU0wgICBTY3JvbGwgTGVmdCAgICAgICAgICAgICAgIFxFIFsgUG4gU1BDIEAgICAgICAgMSAgICAgICAgIGVGICAgICAtCisjIFNMSCAgU2V0IExpbmUgSG9tZSAqICAgICAgICAgICBcRSBbIFBuIFNQQyBVICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTTEwgIFNldCBMaW5lIExpbWl0ICogICAgICAgICAgXEUgWyBQbiBTUEMgViAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU0xTICBTZXQgTGluZSBTcGFjaW5nICogICAgICAgIFxFIFsgUG4gU1BDIGggICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNNICAgU2VsZWN0IE1vZGUgICAgICAgICAgICAgICBcRSBbIFBzIGggICAgICAgICAgIG5vbmUgICAgICAtICAgICAgLSAgIChXKQorIyBTTyAgIFNoaWZ0IE91dCAgICAgICAgICAgICAgICAgXk4gICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0gICAoUSkKKyMgU09IICBTdGFydCBPZiBIZWFkaW5nICogICAgICAgIF5BICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNPUyAgU3RhcnQgb2YgU3RyaW5nICogICAgICAgICBcRSBYICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTUEEgIFN0YXJ0IG9mIFByb3RlY3RlZCBBcmVhICAgXEUgViAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0gICAoWikKKyMgU1BEICBTZWxlY3QgUHJlcy4gRGlyZWN0aW9uICogIFxFIFsgUHMgOyBQcyBTUEMgUyAgMCwwICAgICAgIC0gICAgICAtCisjIFNQSCAgU2V0IFBhZ2UgSG9tZSAqICAgICAgICAgICBcRSBbIFBzIFNQQyBHICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTUEkgIFNwYWNpbmcgSW5jcmVtZW50ICAgICAgICAgXEUgWyBQbiA7IFBuIFNQQyBHICBub25lICAgICAgRkUgICAgIC0KKyMgU1BMICBTZXQgUGFnZSBMaW1pdCAqICAgICAgICAgIFxFIFsgUHMgU1BDIGogICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNQUVIgU2V0IFByLiBRdWFsLiAmIFJhcGlkLiAqICBcRSBbIFBzIFNQQyBYICAgICAgIDAgICAgICAgICAtICAgICAgLQorIyBTUiAgIFNjcm9sbCBSaWdodCAgICAgICAgICAgICAgXEUgWyBQbiBTUEMgQSAgICAgICAxICAgICAgICAgZUYgICAgIC0KKyMgU1JDUyBTZXQgUmVkdWNlZCBDaGFyLiBTZXAuICogIFxFIFsgUG4gU1BDIGYgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFNSUyAgU3RhcnQgUmV2ZXJzZWQgU3RyaW5nICogICBcRSBbIFBzIFsgICAgICAgICAgIDAgICAgICAgICAtICAgICAgLQorIyBTU0EgIFN0YXJ0IG9mIFNlbGVjdGVkIEFyZWEgICAgXEUgRiAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU1NVICBTZWxlY3QgU2l6ZSBVbml0ICogICAgICAgIFxFIFsgUG4gU1BDIEkgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFNTVyAgU2V0IFNwYWNlIFdpZHRoICogICAgICAgICBcRSBbIFBuIFNQQyBbICAgICAgIG5vbmUgICAgICAtICAgICAgLQorIyBTUzIgIFNpbmdsZSBTaGlmdCAyIChHMiBzZXQpICAgXEUgTiAgICAgICAgICAgICAgICAtICAgICAgICAgSW50cm8gIC0KKyMgU1MzICBTaW5nbGUgU2hpZnQgMyAoRzMgc2V0KSAgIFxFIE8gICAgICAgICAgICAgICAgLSAgICAgICAgIEludHJvICAtCisjIFNUICAgU3RyaW5nIFRlcm1pbmF0b3IgICAgICAgICBcRSBcICAgICAgICAgICAgICAgIC0gICAgICAgICBEZWxpbSAgLQorIyBTVEFCIFNlbGVjdGl2ZSBUYWJ1bGF0aW9uICogICAgXEUgWyBQbiBTUEMgXiAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU1RTICBTZXQgVHJhbnNtaXQgU3RhdGUgICAgICAgIFxFIFMgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNUWCAgU3RhcnQgcGYgVGV4dCAqICAgICAgICAgICBeQiAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTVSAgIFNjcm9sbCBVcCAgICAgICAgICAgICAgICAgXEUgWyBQbiBTICAgICAgICAgICAxICAgICAgICAgZUYgICAgIGluZG4KKyMgU1VCICBTdWJzdGl0dXRlICogICAgICAgICAgICAgIF5aICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNWUyAgU2VsZWN0IExpbmUgU3BhY2luZyAqICAgICBcRSBbIFBuIFNQQyBcICAgICAgIDEgICAgICAgICAtICAgICAgLQorIyBTWU4gIFN5bmNocm9ub3VzIElkbGUgKiAgICAgICAgXkYgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgVEFDICBUYWJ1bC4gQWxpZ25lZCBDZW50ZXJlZCAqIFxFIFsgUG4gU1BDIGIgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFRBTEUgVGFidWwuIEFsLiBMZWFkaW5nIEVkZ2UgKiBcRSBbIFBuIFNQQyBhICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBUQVRFIFRhYnVsLiBBbC4gVHJhaWxpbmcgRWRnZSogXEUgWyBQbiBTUEMgYCAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgVEJDICBUYWIgQ2xlYXIgICAgICAgICAgICAgICAgIFxFIFsgUHMgZyAgICAgICAgICAgMCAgICAgICAgIEZFICAgICB0YmMKKyMgVENDICBUYWJ1bC4gQ2VudGVyZWQgb24gQ2hhciAqIFxFIFsgUG4gU1BDIGMgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFRTUiAgVGFidWxhdGlvbiBTdG9wIFJlbW92ZSAgKiBcRSBbIFBuIFNQQyBkICAgICAgIC0gICAgICAgICBGRSAgICAgLQorIyBUU1MgIFRoaW4gU3BhY2UgU3BlY2lmaWNhdGlvbiAgXEUgWyBQbiBTQyBFICAgICAgICBub25lICAgICAgRkUgICAgIC0KKyMgVlBBICBWZXJ0LiBQb3NpdGlvbiBBYnNvbHV0ZSAgIFxFIFsgUG4gZCAgICAgICAgICAgMSAgICAgICAgIEZFICAgICB2cGEKKyMgVlBCICBMaW5lIFBvc2l0aW9uIEJhY2t3YXJkICogIFxFIFsgUG4gayAgICAgICAgICAgMSAgICAgICAgIEZFICAgICAtCisjIFZQUiAgVmVydC4gUG9zaXRpb24gUmVsYXRpdmUgICBcRSBbIFBuIGUgICAgICAgICAgIDEgICAgICAgICBGRSAgICAgLSAgIChSKQorIyBWVCAgIFZlcnRpY2FsIFRhYnVsYXRpb24gKiAgICAgXksgICAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIC0KKyMgVlRTICBWZXJ0aWNhbCBUYWJ1bGF0aW9uIFNldCAgIFxFIEogICAgICAgICAgICAgICAgLSAgICAgICAgIEZFICAgICAtCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBOb3RlczoKKyMKKyMgU29tZSBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGxpc3RlZCBpbiB0aGUgRUNNQS00OCBzdGFuZGFyZCB3aXRob3V0CisjIGJlaW5nIGFzc2lnbmVkIGZ1bmN0aW9ucyByZWxldmFudCB0byB0ZXJtaW5hbCBjb250cm9sIHRoZXJlICh0aGV5CisjIHJlZmVycmVkIHRvIG90aGVyIHN0YW5kYXJkcyBzdWNoIGFzIElTTyAxNzQ1IG9yIEVDTUEtMzUpLiAgVGhleSBhcmUgbGlzdGVkCisjIGhlcmUgYW55d2F5IGZvciBjb21wbGV0ZW5lc3MuCisjCisjIChBKSBFQ01BLTQ4IGNhbGxzIHRoaXMgIkNhbmNlbENoYXJhY3RlciIgYnV0IHJldGFpbnMgdGhlIENDSCBhYmJyZXZpYXRpb24uCisjCisjIChCKSBUaGVyZSBzZWVtcyB0byBiZSBzb21lIGNvbmZ1c2lvbiBhYnJvYWQgYmV0d2VlbiBDSEEgYW5kIEhQQS4gIE1vc3QKKyMgYEFOU0knIHRlcm1pbmFscyBhY2NlcHQgdGhlIENIQSBzZXF1ZW5jZSwgbm90IHRoZSBIUEEuIGJ1dCB0ZXJtaW5mbyBjYWxscworIyB0aGUgY2FwYWJpbGl0eSAoaHBhKS4gIEVDTUEtNDggY2FsbHMgdGhpcyAiQ3Vyc29yIENoYXJhY3RlciBBYnNvbHV0ZSIgYnV0CisjIHByZXNlcnZlZCB0aGUgQ0hBIGFiYnJldmlhdGlvbi4KKyMKKyMgKEMpIENIVCBjb3JyZXNwb25kcyB0byB0ZXJtaW5mbyAodGFiKS4gIFVzdWFsbHkgaXQgaGFzIHRoZSB2YWx1ZSBeSS4KKyMgT2NjYXNpb25hbGx5IChhcyBvbiwgZm9yIGV4YW1wbGUsIGNlcnRhaW4gSFAgdGVybWluYWxzKSB0aGlzIGhhcyB0aGUgSFRKCisjIHZhbHVlLiAgRUNNQS00OCBjYWxscyB0aGlzICJDdXJzb3IgRm9yd2FyZCBUYWJ1bGF0aW9uIiBidXQgcHJlc2VydmVkIHRoZQorIyBDSFQgYWJicmV2aWF0aW9uLgorIworIyAoRCkgdGVybWluZm8gKG5lbCkgaXMgdXN1YWxseSBcclxuIHJhdGhlciB0aGFuIEFOU0kgXEVFLgorIworIyAoRSkgRUNNQS00OCBjYWxscyB0aGlzICJBY3RpdmUgUG9zaXRpb24gUmVwb3J0IiBidXQgcHJlc2VydmVzIHRoZSBDUFIKKyMgYWJicmV2aWF0aW9uLgorIworIyAoRikgQ1RDIHBhcmFtZXRlciB2YWx1ZXM6IDAgPSBzZXQgY2hhciB0YWIsIDEgPSBzZXQgbGluZSB0YWIsIDIgPSBjbGVhcgorIyBjaGFyIHRhYiwgMyA9IGNsZWFyIGxpbmUgdGFiLCA0ID0gY2xlYXIgYWxsIGNoYXIgdGFicyBvbiBjdXJyZW50IGxpbmUsCisjIDUgPSBjbGVhciBhbGwgY2hhciB0YWJzLCA2ID0gY2xlYXIgYWxsIGxpbmUgdGFicy4KKyMKKyMgKEcpIENVUCBhbmQgSFZQIGFyZSBpZGVudGljYWwgaW4gZWZmZWN0LiAgU29tZSBBTlNJLlNZUyB2ZXJzaW9ucyBhY2NlcHQKKyMgSFZQLCBidXQgYWx3YXlzIGFsbG93IENVUCBhcyBhbiBhbHRlcm5hdGUuICBFQ01BLTQ4IGNhbGxzIEhWUCAiQ2hhcmFjdGVyCisjIFBvc2l0aW9uIEFic29sdXRlIiBidXQgcmV0YWlucyB0aGUgSFZQIGFiYnJldmlhdGlvbi4KKyMKKyMgKEgpIEVDTUEgY2FsbHMgdGhpcyAiQ3Vyc29yIExpbmUgVGFidWxhdGlvbiIgYnV0IHByZXNlcnZlcyB0aGUgQ1ZUCisjIGFiYnJldmlhdGlvbi4KKyMKKyMgKEkpIERTUiBwYXJhbWV0ZXIgdmFsdWVzOiAwID0gcmVhZHksIDEgPSBidXN5LCAyID0gYnVzeSwgd2lsbCBzZW5kIERTUgorIyBsYXRlciwgMyA9IG1hbGZ1bmN0aW9uLCA0ID0gbWFsZnVuY3Rpb24sIHdpbGwgc2VuZCBEU1IgbGF0ZXIsIDUgPSByZXF1ZXN0CisjIERTUiwgNiA9IHJlcXVlc3QgQ1BSIHJlc3BvbnNlLgorIworIyAoSikgRUNNQSBjYWxscyBFRCAiRXJhc2UgSW4gUGFnZSIuIEVBL0VEL0VMIHBhcmFtZXRlcnM6IDAgPSBjbGVhciB0byBlbmQsCisjIDEgPSBjbGVhciBmcm9tIGJlZ2lubmluZywgMiA9IGNsZWFyLgorIworIyAoSykgRUNNQSBjYWxscyB0aGlzICJFbmQgb2YgR3VhcmRlZCBBcmVhIiBidXQgcHJlc2VydmVzIHRoZSBFUEEgYWJicmV2aWF0aW9uLgorIworIyAoTCkgVGhlIEdTTSBwYXJhbWV0ZXJzIGFyZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBwYXJhbWV0ZXJzIHRvIHNjYWxlIGJ5LgorIworIyAoTSkgU29tZSBBTlNJLlNZUyB2ZXJzaW9ucyBhY2NlcHQgSFBSLCBidXQgbW9yZSBjb21tb25seSBgQU5TSScgdGVybWluYWxzCisjIHVzZSBDVUYgZm9yIHRoaXMgZnVuY3Rpb24gYW5kIGlnbm9yZSBIUFIuICBFQ01BLTQ4IGNhbGxzIHRoaXMgIkNoYXJhY3RlcgorIyBQb3NpdGlvbiBSZWxhdGl2ZSIgYnV0IHJldGFpbnMgdGhlIEhQUiBhYmJyZXZpYXRpb24uCisjCisjIChOKSBFQ01BLTQ4IGNhbGxzIHRoaXMgIkNoYXJhY3RlciBUYWJ1bGF0aW9uIiBidXQgcmV0YWlucyB0aGUgSFQKKyMgYWJicmV2aWF0aW9uLgorIworIyAoTykgU0dSIHBhcmFtZXRlciB2YWx1ZXM6IDAgPSBkZWZhdWx0IG1vZGUgKGF0dHJpYnV0ZXMgb2ZmKSwgMSA9IGJvbGQsCisjIDIgPSBkaW0sIDMgPSBpdGFsaWNpemVkLCA0ID0gdW5kZXJsaW5lZCwgNSA9IHNsb3cgYmxpbmssIDYgPSBmYXN0IGJsaW5rLAorIyA3ID0gcmV2ZXJzZSB2aWRlbywgOCA9IGludmlzaWJsZSwgOSA9IGNyb3NzZWQtb3V0IChtYXJrZWQgZm9yIGRlbGV0aW9uKSwKKyMgMTAgPSBwcmltYXJ5IGZvbnQsIDEwICsgbiAobiBpbiAxLi45KSA9IG50aCBhbHRlcm5hdGl2ZSBmb250LCAyMCA9IEZyYWt0dXIsCisjIDIxID0gZG91YmxlIHVuZGVybGluZSwgMjIgPSB0dXJuIG9mZiAyLCAyMyA9IHR1cm4gb2ZmIDMsIDI0ID0gdHVybiBvZmYgNCwKKyMgMjUgPSB0dXJuIG9mZiA1LCAyNiA9IHByb3BvcnRpb25hbCBzcGFjaW5nLCAyNyA9IHR1cm4gb2ZmIDcsIDI4ID0gdHVybiBvZmYKKyMgOCwgMjkgPSB0dXJuIG9mZiA5LCAzMCA9IGJsYWNrIGZnLCAzMSA9IHJlZCBmZywgMzIgPSBncmVlbiBmZywgMzMgPSB5ZWxsb3cKKyMgZmcsIDM0ID0gYmx1ZSBmZywgMzUgPSBtYWdlbnRhIGZnLCAzNiA9IGN5YW4gZmcsIDM3ID0gd2hpdGUgZmcsIDM4ID0gc2V0CisjIGZnIGNvbG9yIGFzIGluIENDSVQgVC40MTYsIDM5ID0gc2V0IGRlZmF1bHQgZmcgY29sb3IsIDQwID0gYmxhY2sgYmcKKyMgNDEgPSByZWQgYmcsIDQyID0gZ3JlZW4gYmcsIDQzID0geWVsbG93IGJnLCA0NCA9IGJsdWUgYmcsIDQ1ID0gbWFnZW50YSBiZywKKyMgNDYgPSBjeWFuIGJnLCA0NyA9IHdoaXRlIGJnLCA0OCA9IHNldCBiZyBjb2xvciBhcyBpbiBDQ0lUIFQuNDE2LCAzOSA9IHNldAorIyBkZWZhdWx0IGJnIGNvbG9yLCA1MCA9IHR1cm4gb2ZmIDI2LCA1MSA9IGZyYW1lZCwgNTIgPSBlbmNpcmNsZWQsIDUzID0KKyMgb3ZlcmxpbmVkLCA1NCA9IHR1cm4gb2ZmIDUxICYgNTIsIDU1ID0gbm90IG92ZXJsaW5lZCwgNTYtNTkgPSByZXNlcnZlZCwKKyMgNjEtNjUgPSB2YXJpYWJsZSBoaWdobGlnaHRzIGZvciBpZGVvZ3JhbXMuCisjCisjIChQKSBTSSBpcyBhbHNvIGNhbGxlZCBMU08sIExvY2tpbmcgU2hpZnQgWmVyby4KKyMKKyMgKFEpIFNJIGlzIGFsc28gY2FsbGVkIExTMSwgTG9ja2luZyBTaGlmdCBPbmUuCisjCisjIChSKSBTb21lIEFOU0kuU1lTIHZlcnNpb25zIGFjY2VwdCBWUFIsIGJ1dCBtb3JlIGNvbW1vbmx5IGBBTlNJJyB0ZXJtaW5hbHMKKyMgdXNlIENVRCBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgaWdub3JlIFZQUi4gIEVDTUEgY2FsbHMgaXQgYExpbmUgUG9zaXRpb24KKyMgQWJzb2x1dGUnIGJ1dCByZXRhaW5zIHRoZSBWUEEgYWJicmV2aWF0aW9uLgorIworIyAoUykgTUMgcGFyYW1ldGVyczogMCA9IHN0YXJ0IHhmZXIgdG8gcHJpbWFyeSBhdXggZGV2aWNlLCAxID0gc3RhcnQgeGZlciBmcm9tCisjIHByaW1hcnkgYXV4IGRldmljZSwgMiA9IHN0YXJ0IHhmZXIgdG8gc2Vjb25kYXJ5IGF1eCBkZXZpY2UsIDMgPSBzdGFydCB4ZmVyCisjIGZyb20gc2Vjb25kYXJ5IGF1eCBkZXZpY2UsIDQgPSBzdG9wIHJlbGF5IHRvIHByaW1hcnkgYXV4IGRldmljZSwgNSA9CisjIHN0YXJ0IHJlbGF5IHRvIHByaW1hcnkgYXV4IGRldmljZSwgNiA9IHN0b3AgcmVsYXkgdG8gc2Vjb25kYXJ5IGF1eCBkZXZpY2UsCisjIDcgPSBzdGFydCByZWxheSB0byBzZWNvbmRhcnkgYXV4IGRldmljZS4KKyMKKyMgKFQpIEVDTUEtNDggY2FsbHMgdGhpcyAiUGFydGlhbCBMaW5lIEZvcndhcmQiIGJ1dCByZXRhaW5zIHRoZSBQTEQKKyMgYWJicmV2aWF0aW9uLgorIworIyAoVSkgRUNNQS00OCBjYWxscyB0aGlzICJQYXJ0aWFsIExpbmUgQmFja3dhcmQiIGJ1dCByZXRhaW5zIHRoZSBQTFUKKyMgYWJicmV2aWF0aW9uLgorIworIyAoVikgRUNNQS00OCBjYWxscyB0aGlzICJSZXZlcnNlIExpbmUgRmVlZCIgYnV0IHJldGFpbnMgdGhlIFJJIGFiYnJldmlhdGlvbi4KKyMKKyMgKFcpIFJNL1NNIG1vZGVzIGFyZSBhcyBmb2xsb3dzOiAxID0gR3VhcmRlZCBBcmVhIFRyYW5zZmVyIE1vZGUgKEdBVE0pLAorIyAyID0gS2V5Ym9hcmQgQWN0aW9uIE1vZGUgKEtBTSksIDMgPSBDb250cm9sIFJlcHJlc2VudGF0aW9uIE1vZGUgKENSTSksCisjIDQgPSBJbnNlcnRpb24gUmVwbGFjZW1lbnQgTW9kZSwgNSA9IFN0YXR1cyBSZXBvcnQgVHJhbnNmZXIgTW9kZSAoU1JUTSksCisjIDYgPSBFcmFzdXJlIE1vZGUgKEVSTSksIDcgPSBMaW5lIEVkaXRpbmcgTW9kZSAoTEVNKSwgOCA9IEJpLURpcmVjdGlvbmFsCisjIFN1cHBvcnQgTW9kZSAoQkRTTSksIDkgPSBEZXZpY2UgQ29tcG9uZW50IFNlbGVjdCBNb2RlIChEQ1NNKSwKKyMgMTAgPSBDaGFyYWN0ZXIgRWRpdGluZyBNb2RlIChIRU0pLCAxMSA9IFBvc2l0aW9uaW5nIFVuaXQgTW9kZSAoUFVNKSwKKyMgMTIgPSBTZW5kL1JlY2VpdmUgTW9kZSwgMTMgPSBGb3JtYXQgRWZmZWN0b3IgQWN0aW9uIE1vZGUgKEZFQU0pLAorIyAxNCA9IEZvcm1hdCBFZmZlY3RvciBUcmFuc2ZlciBNb2RlIChGRVRNKSwgMTUgPSBNdWx0aXBsZSBBcmVhIFRyYW5zZmVyCisjIE1vZGUgKE1BVE0pLCAxNiA9IFRyYW5zZmVyIFRlcm1pbmF0aW9uIE1vZGUsIDE3ID0gU2VsZWN0ZWQgQXJlYSBUcmFuc2ZlcgorIyBNb2RlLCAxOCA9IFRhYnVsYXRpb24gU3RvcCBNb2RlLCAxOSA9IEVkaXRpbmcgQm91bmRhcnkgTW9kZSwgMjAgPSBMaW5lIEZlZWQKKyMgTmV3IExpbmUgTW9kZSAoTEYvTkwpLCBHcmFwaGljIFJlbmRpdGlvbiBDb21iaW5hdGlvbiBNb2RlIChHUkNNKSwgMjIgPQorIyBaZXJvIERlZmF1bHQgTW9kZSAoWkRNKS4gIFRoZSBFQk0gYW5kIExGL05MIG1vZGVzIGhhdmUgYWN0dWFsbHkgYmVlbiByZW1vdmVkCisjIGZyb20gRUNNQS00OCdzIDV0aCBlZGl0aW9uIGJ1dCBhcmUgbGlzdGVkIGhlcmUgZm9yIHJlZmVyZW5jZS4KKyMKKyMgKFgpIFNlbGVjdCBBbHRlcm5hdGUgUHJlc2VudGF0aW9uIFZhcmlhbnRzIGlzIHVzZWQgb25seSBmb3Igbm9uLUxhdGluCisjIGFscGhhYmV0cy4KKyMKKyMgKFkpICJTZWxlY3QgRWRpdGluZyBFeHRlbnQiIChTRUUpIHdhcyBBTlNJICJTZWxlY3QgRWRpdCBFeHRlbnQgTW9kZSIgKFNFTSkuCisjCisjIChaKSBFQ01BLTQ4IGNhbGxzIHRoaXMgIlN0YXJ0IG9mIEd1YXJkZWQgQXJlYSIgYnV0IHJldGFpbnMgdGhlIFNQQQorIyBhYmJyZXZpYXRpb24uCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBBYmJyZXZpYXRpb25zOgorIworIyBJbnRybyAgYW4gSW50cm9kdWNlciBvZiBzb21lIGtpbmQgb2YgZGVmaW5lZCBzZXF1ZW5jZTsgdGhlIG5vcm1hbCA3LWJpdAorIyAgICAgICAgWDMuNjQgQ29udHJvbCBTZXF1ZW5jZSBJbnRyb2R1Y2VyIGlzIHRoZSB0d28gY2hhcmFjdGVycyAiRXNjYXBlIFsiCisjCisjIERlbGltICBhIERlbGltaXRlcgorIworIyB4L3kgICAgaWRlbnRpZmllcyBhIGNoYXJhY3RlciBieSBwb3NpdGlvbiBpbiB0aGUgQVNDSUkgdGFibGUgKGNvbHVtbi9yb3cpCisjCisjIGVGICAgICBlZGl0b3IgZnVuY3Rpb24gKHNlZSBleHBsYW5hdGlvbikKKyMKKyMgRkUgICAgIGZvcm1hdCBlZmZlY3RvciAoc2VlIGV4cGxhbmF0aW9uKQorIworIyBGICAgICAgaXMgYSBGaW5hbCBjaGFyYWN0ZXIgaW4KKyMgICAgICAgICAgICAgYW4gRXNjYXBlIHNlcXVlbmNlIChGIGZyb20gMy8wIHRvIDcvMTQgaW4gdGhlIEFTQ0lJIHRhYmxlKQorIyAgICAgICAgICAgICBhIGNvbnRyb2wgc2VxdWVuY2UgKEYgZnJvbSA0LzAgdG8gNy8xNCkKKyMKKyMgR3MgICAgIGlzIGEgZ3JhcGhpYyBjaGFyYWN0ZXIgYXBwZWFyaW5nIGluIHN0cmluZ3MgKEdzIHJhbmdlcyBmcm9tCisjICAgICAgICAyLzAgdG8gNy8xNCkgaW4gdGhlIEFTQ0lJIHRhYmxlCisjCisjIENlICAgICBpcyBhIGNvbnRyb2wgcmVwcmVzZW50ZWQgYXMgYSBzaW5nbGUgYml0IGNvbWJpbmF0aW9uIGluIHRoZSBDMSBzZXQKKyMgICAgICAgIG9mIGNvbnRyb2xzIGluIGFuIDgtYml0IGNoYXJhY3RlciBzZXQKKyMKKyMgQzAgICAgIHRoZSBmYW1pbGlhciBzZXQgb2YgNy1iaXQgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzCisjCisjIEMxICAgICByb3VnaGx5LCB0aGUgc2V0IG9mIGNvbnRyb2wgY2hhcnMgYXZhaWxhYmxlIG9ubHkgaW4gOC1iaXQgc3lzdGVtcy4KKyMgICAgICAgIFRoaXMgaXMgdG9vIGNvbXBsaWNhdGVkIHRvIGV4cGxhaW4gZnVsbHkgaGVyZSwgc28gcmVhZCBKaW0gRmxlbWluZydzCisjICAgICAgICBhcnRpY2xlIGluIHRoZSBGZWJydWFyeSAxOTgzIEJZVEUsIGVzcGVjaWFsbHkgcGFnZXMgMjE0IHRocm91Z2ggMjI0LgorIworIyBGZSAgICAgaXMgYSBGaW5hbCBjaGFyYWN0ZXIgb2YgYSAyLWNoYXJhY3RlciBFc2NhcGUgc2VxdWVuY2UgdGhhdCBoYXMgYW4KKyMgICAgICAgIGVxdWl2YWxlbnQgcmVwcmVzZW50YXRpb24gaW4gYW4gOC1iaXQgZW52aXJvbm1lbnQgYXMgYSBDZS10eXBlCisjICAgICAgICAoRmUgcmFuZ2VzIGZyb20gNC8wIHRvIDUvMTUpCisjCisjIEZzICAgICBpcyBhIEZpbmFsIGNoYXJhY3RlciBvZiBhIDItY2hhcmFjdGVyIEVzY2FwZSBzZXF1ZW5jZSB0aGF0IGlzCisjICAgICAgICBzdGFuZGFyZGl6ZWQgaW50ZXJuYXRpb25hbGx5IHdpdGggaWRlbnRpY2FsIHJlcHJlc2VudGF0aW9uIGluIDctYml0CisjICAgICAgICBhbmQgOC1iaXQgZW52aXJvbm1lbnRzIGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY3VycmVudGx5CisjICAgICAgICBkZXNpZ25hdGVkIEMwIGFuZCBDMSBjb250cm9sIHNldHMgKEZzIHJhbmdlcyBmcm9tIDYvMCB0byA3LzE0KQorIworIyBJICAgICAgaXMgYW4gSW50ZXJtZWRpYXRlIGNoYXJhY3RlciBmcm9tIDIvMCB0byAyLzE1IChpbmNsdXNpdmUpIGluIHRoZQorIyAgICAgICAgQVNDSUkgdGFibGUKKyMKKyMgUCAgICAgIGlzIGEgcGFyYW1ldGVyIGNoYXJhY3RlciBmcm9tIDMvMCB0byAzLzE1IChpbmNsdXNpdmUpIGluIHRoZSBBU0NJSQorIyAgICAgICAgdGFibGUKKyMKKyMgUG4gICAgIGlzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgaW4gYSBjb250cm9sIHNlcXVlbmNlLCBhIHN0cmluZyBvZiB6ZXJvIG9yCisjICAgICAgICBtb3JlIGNoYXJhY3RlcnMgcmFuZ2luZyBmcm9tIDMvMCB0byAzLzkgaW4gdGhlIEFTQ0lJIHRhYmxlCisjCisjIFBzICAgICBpcyBhIHZhcmlhYmxlIG51bWJlciBvZiBzZWxlY3RpdmUgcGFyYW1ldGVycyBpbiBhIGNvbnRyb2wgc2VxdWVuY2UKKyMgICAgICAgIHdpdGggZWFjaCBzZWxlY3RpdmUgcGFyYW1ldGVyIHNlcGFyYXRlZCBmcm9tIHRoZSBvdGhlciBieSB0aGUgY29kZQorIyAgICAgICAgMy8xMSAod2hpY2ggdXN1YWxseSByZXByZXNlbnRzIGEgc2VtaWNvbG9uKTsgUHMgcmFuZ2VzIGZyb20KKyMgICAgICAgIDMvMCB0byAzLzkgYW5kIGluY2x1ZGVzIDMvMTEKKyMKKyMgKiAgICAgIE5vdCByZWxldmFudCB0byB0ZXJtaW5hbCBjb250cm9sLCBsaXN0ZWQgZm9yIGNvbXBsZXRlbmVzcyBvbmx5LgorIworIyBGb3JtYXQgRWZmZWN0b3JzIHZlcnN1cyBFZGl0b3IgRnVuY3Rpb25zCisjCisjIEEgZm9ybWF0IGVmZmVjdG9yIHNwZWNpZmllcyBob3cgZm9sbG93aW5nIG91dHB1dCBpcyB0byBiZSBkaXNwbGF5ZWQuCisjIEFuIGVkaXRvciBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIG1vZGlmeSB0aGUgZGlzcGxheS4gIEluZm9ybWFsbHkKKyMgZm9ybWF0IGVmZmVjdG9ycyBtYXkgYmUgZGVzdHJ1Y3RpdmU7IGZvcm1hdCBlZmZlY3RvcnMgc2hvdWxkIG5vdCBiZS4KKyMKKyMgRm9yIGluc3RhbmNlLCBhIGZvcm1hdCBlZmZlY3RvciB0aGF0IG1vdmVzIHRoZSAiYWN0aXZlIHBvc2l0aW9uIiAodGhlCisjIGN1cnNvciBvciBlcXVpdmFsZW50KSBvbmUgc3BhY2UgdG8gdGhlIGxlZnQgd291bGQgYmUgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8KKyMgY3JlYXRlIGFuIG92ZXJzdHJpa2UsIGEgY29tcG91bmQgY2hhcmFjdGVyIG1hZGUgb2YgdHdvIHN0YW5kYXJkIGNoYXJhY3RlcnMKKyMgb3ZlcmxhaWQuIENvbnRyb2wtSCwgdGhlIEJhY2tzcGFjZSBjaGFyYWN0ZXIsIGlzIGFjdHVhbGx5IHN1cHBvc2VkIHRvIGJlIGEKKyMgZm9ybWF0IGVmZmVjdG9yLCBzbyB5b3UgY2FuIGRvIHRoaXMuIEJ1dCBtYW55IHN5c3RlbXMgdXNlIGl0IGluIGEKKyMgbm9uc3RhbmRhcmQgZmFzaGlvbiwgYXMgYW4gZWRpdG9yIGZ1bmN0aW9uLCBkZWxldGluZyB0aGUgY2hhcmFjdGVyIHRvIHRoZQorIyBsZWZ0IG9mIHRoZSBjdXJzb3IgYW5kIG1vdmluZyB0aGUgY3Vyc29yIGxlZnQuIFdoZW4gQ29udHJvbC1IIGlzIGFzc3VtZWQgdG8KKyMgYmUgYW4gZWRpdG9yIGZ1bmN0aW9uLCB5b3UgY2Fubm90IHByZWRpY3Qgd2hldGhlciBpdHMgdXNlIHdpbGwgY3JlYXRlIGFuCisjIG92ZXJzdHJpa2UgdW5sZXNzIHlvdSBhbHNvIGtub3cgd2hldGhlciB0aGUgb3V0cHV0IGRldmljZSBpcyBpbiBhbiAiaW5zZXJ0CisjIG1vZGUiIG9yIGFuICJvdmVyd3JpdGUgbW9kZSIuIFdoZW4gQ29udHJvbC1IIGlzIHVzZWQgYXMgYSBmb3JtYXQgZWZmZWN0b3IsCisjIGl0cyBlZmZlY3QgY2FuIGFsd2F5cyBiZSBwcmVkaWN0ZWQuIFRoZSBmYW1pbGlhciBjaGFyYWN0ZXJzIGNhcnJpYWdlCisjIHJldHVybiwgbGluZWZlZWQsIGZvcm1mZWVkLCBldGMuLCBhcmUgZGVmaW5lZCBhcyBmb3JtYXQgZWZmZWN0b3JzLgorIworIyBOT1RFUyBPTiBUSEUgREVDIFZUMTAwIElNUExFTUVOVEFUSU9OCisjCisjIENvbnRyb2wgc2VxdWVuY2VzIGltcGxlbWVudGVkIGluIHRoZSBWVDEwMCBhcmUgYXMgZm9sbG93czoKKyMKKyMgICAgICBDUFIsIENVQiwgQ1VELCBDVUYsIENVUCwgQ1VVLCBEQSwgRFNSLCBFRCwgRUwsIEhUUywgSFZQLCBJTkQsCisjICAgICAgTE5NLCBORUwsIFJJLCBSSVMsIFJNLCBTR1IsIFNNLCBUQkMKKyMKKyMgcGx1cyBzZXZlcmFsIHByaXZhdGUgREVDIGNvbW1hbmRzLgorIworIyBFcmFzaW5nIHBhcnRzIG9mIHRoZSBkaXNwbGF5IChFTCBhbmQgRUQpIGluIHRoZSBWVDEwMCBpcyBwZXJmb3JtZWQgdGh1czoKKyMKKyMgICAgICBFcmFzZSBmcm9tIGN1cnNvciB0byBlbmQgb2YgbGluZSAgICAgICAgICAgRXNjIFsgMCBLICAgIG9yIEVzYyBbIEsKKyMgICAgICBFcmFzZSBmcm9tIGJlZ2lubmluZyBvZiBsaW5lIHRvIGN1cnNvciAgICAgRXNjIFsgMSBLCisjICAgICAgRXJhc2UgbGluZSBjb250YWluaW5nIGN1cnNvciAgICAgICAgICAgICAgIEVzYyBbIDIgSworIyAgICAgIEVyYXNlIGZyb20gY3Vyc29yIHRvIGVuZCBvZiBzY3JlZW4gICAgICAgICBFc2MgWyAwIEogICAgb3IgRXNjIFsgSgorIyAgICAgIEVyYXNlIGZyb20gYmVnaW5uaW5nIG9mIHNjcmVlbiB0byBjdXJzb3IgICBFc2MgWyAxIEoKKyMgICAgICBFcmFzZSBlbnRpcmUgc2NyZWVuICAgICAgICAgICAgICAgICAgICAgICAgRXNjIFsgMiBKCisjCisjIFNvbWUgYnJhaW4tZGFtYWdlZCB0ZXJtaW5hbC9lbXVsYXRvcnMgcmVzcG9uZCB0byBFc2MgWyBKIGFzIGlmIGl0IHdlcmUKKyMgRXNjIFsgMiBKLCBidXQgdGhpcyBpcyB3cm9uZzsgdGhlIGRlZmF1bHQgaXMgMC4KKyMKKyMgVGhlIFZUMTAwIHJlc3BvbmRzIHRvIHJlY2VpdmluZyB0aGUgREEgKERldmljZSBBdHRyaWJ1dGVzKSBjb250cm9sCisjCisjICAgICAgRXNjIFsgYyAgICAob3IgRXNjIFsgMCBjKQorIworIyBieSB0cmFuc21pdHRpbmcgdGhlIHNlcXVlbmNlCisjCisjICAgICAgRXNjIFsgPyBsIDsgUHMgYworIworIyB3aGVyZSBQcyBpcyBhIGNoYXJhY3RlciB0aGF0IGRlc2NyaWJlcyBpbnN0YWxsZWQgb3B0aW9ucy4KKyMKKyMgVGhlIFZUMTAwJ3MgY3Vyc29yIGxvY2F0aW9uIGNhbiBiZSByZWFkIHdpdGggdGhlIERTUiAoRGV2aWNlIFN0YXR1cworIyBSZXBvcnQpIGNvbnRyb2wKKyMKKyMgICAgICBFc2MgWyA2IG4KKyMKKyMgVGhlIFZUMTAwIHJlcG9ydHMgYnkgdHJhbnNtaXR0aW5nIHRoZSBDUFIgc2VxdWVuY2UKKyMKKyMgICAgICBFc2MgWyBQbCA7IFBjIFIKKyMKKyMgd2hlcmUgUGwgaXMgdGhlIGxpbmUgbnVtYmVyIGFuZCBQYyBpcyB0aGUgY29sdW1uIG51bWJlciAoaW4gZGVjaW1hbCkuCisjCisjIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgREVDIFZUMTAwIGlzIGRvY3VtZW50IEVLLVZUMTAwLVVHLTAwMy4KKworIyMjIyBBTlNJLlNZUworIworIyBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbG9yIGFuZCBhdHRyaWJ1dGUgY29udHJvbHMgc3VwcG9ydGVkIGluIHRoZQorIyB0aGUgQU5TSS5TWVMgZHJpdmVyIHVuZGVyIE1TLURPUy4gIE1vc3QgY29uc29sZSBkcml2ZXJzIGFuZCBBTlNJCisjIHRlcm1pbmFsIGVtdWxhdG9ycyBmb3IgSW50ZWwgYm94ZXMgb2JleSB0aGVzZS4gIFRoZXkgYXJlIGEgcHJvcGVyIHN1YnNldAorIyBvZiB0aGUgRUNNQS00OCBlc2NhcGVzLgorIworIyAwCWFsbCBhdHRyaWJ1dGVzIG9mZgorIyAxCWZvcmVncm91bmQgYnJpZ2h0CisjIDQJdW5kZXJzY29yZSBvbgorIyA1CWJsaW5rIG9uL2JhY2tncm91bmQgYnJpZ2h0IChub3QgcmVsaWFibGUgd2l0aCBicm93bikKKyMgNwlyZXZlcnNlLXZpZGVvCisjIDgJc2V0IGJsYW5rIChub24tZGlzcGxheSkKKyMgMTAJc2V0IHByaW1hcnkgZm9udAorIyAxMQlzZXQgZmlyc3QgYWx0ZXJuYXRlIGZvbnQgKG9uIFBDcywgZGlzcGxheSBST00gY2hhcmFjdGVycyAxLTMxKQorIyAxMglzZXQgc2Vjb25kIGFsdGVybmF0ZSBmb250IChvbiBQQ3MsIGRpc3BsYXkgSUJNIGhpZ2gtaGFsZiBjaGFycykKKyMKKyMJCQlDb2xvciBhdHRyaWJ1dGUgc2V0cworIyAzbglzZXQgZm9yZWdyb3VuZCBjb2xvciAgICAgICAvIDA9YmxhY2ssIDE9cmVkLCAgICAgMj1ncmVlbiwgMz1icm93biwKKyMgNG4Jc2V0IGJhY2tncm91bmQgY29sb3IgICAgICAgXCA0PWJsdWUsICA1PW1hZ2VudGEsIDY9Y3lhbiwgIDc9d2hpdGUKKyMgQnJpZ2h0IGJsYWNrIGJlY29tZXMgZ3JheS4gIEJyaWdodCBicm93biBiZWNvbWVzIHllbGxvdywKKyMgVGhlc2UgY29pbmNpZGUgd2l0aCB0aGUgcHJlc2NyaXB0aW9ucyBvZiB0aGUgSVNPIDY0MjkvRUNNQS00OCBzdGFuZGFyZC4KKyMKKyMgKiBJZiB0aGUgNSBhdHRyaWJ1dGUgaXMgb24gYW5kIHlvdSBzZXQgYSBiYWNrZ3JvdW5kIGNvbG9yICg0MC00NykgaXQgaXMKKyMgICBzdXBwb3NlZCB0byBlbmFibGUgYnJpZ2h0IGJhY2tncm91bmQuCisjCisjICogTWFueSBWR0EgY2FyZHMgKHN1Y2ggYXMgdGhlIFBhcmFkaXNlIGFuZCBjb21wYXRpYmxlcykgZG8gdGhlIHdyb25nIHRoaW5nCisjICAgd2hlbiB5b3UgdHJ5IHRvIHNldCBhICJicmlnaHQgYnJvd24iICh5ZWxsb3cpIGJhY2tncm91bmQgd2l0aCBhdHRyaWJ1dGUKKyMgICA1ICh5b3UgZ2V0IGEgYmxpbmtpbmcgeWVsbG93IGZvcmVncm91bmQgaW5zdGVhZCkuICBBIGZldyBkaXNwbGF5cworIyAgIChpbmNsdWRpbmcgdGhlIFN5c3RlbSBWIGNvbnNvbGUpIHN1cHBvcnQgYW4gYXR0cmlidXRlIDYgdGhhdCB1bmRvZXMgdGhpcworIyAgIGJyYWluZGFtYWdlICh0aGlzIGlzIHJlcXVpcmVkIGJ5IGlCQ1MyKS4KKyMKKyMgKiBTb21lIG9sZGVyIHZlcnNpb25zIG9mIEFOU0kuU1lTIGhhdmUgYSBidWcgdGhhdCBjYXVzZXMgdGhlbXMgdG8gcmVxdWlyZQorIyAgIEVTQyBbIFBuIGsgYXMgRUwgcmF0aGVyIHRoYW4gdGhlIEFOU0kgRVNDIFsgUG4gSy4gIChUaGlzIGlzIG5vdCBFQ01BLTQ4CisjICAgY29tcGF0aWJsZS4pCisKKyMjIyMgSW50ZWwgQmluYXJ5IENvbXBhdGliaWxpdHkgU3RhbmRhcmQKKyMKKyMgRm9yIGNvbXBhcmlzb24sIGhlcmUgYXJlIHRoZSBjYXBhYmlsaXRpZXMgaW1wbGllZCBieSB0aGUgSW50ZWwgQmluYXJ5CisjIENvbXBhdGliaWxpdHkgU3RhbmRhcmQgZm9yIFVOSVggc3lzdGVtcyAoSW50ZWwgb3JkZXIgbnVtYmVyIDQ2ODM2Ni0wMDEpLgorIyBUaGVzZSByZWNvbW1lbmRhdGlvbnMgYXJlIG9wdGlvbmFsLiAgSUJDUzIgYWxsb3dzIHRoZSBsZWFkaW5nIGVzY2FwZSB0bworIyBiZSBlaXRoZXIgdGhlIDctYml0IFxFWyBvciA4LWJpdCBcMDIzMyBpbnRyb2R1Y2VyLCBpbiBhY2NvcmRhbmNlIHdpdGgKKyMgdGhlIEFOU0kgWC4zNjQvSVNPIDY0MjkvRUNNQS00OCBzdGFuZGFyZC4gIEhlcmUgYXJlIHRoZSBpQkNTMiBjYXBhYmlsaXRpZXMKKyMgKGFzIGRlc2NyaWJlZCBpbiBmaWd1cmUgOS0zIG9mIHRoZSBzdGFuZGFyZCkuICBUaG9zZSBleHByZXNzZWQgaW4gdGhlIGliY3MyCisjIHRlcm1pbmZvIGVudHJ5IGFyZSBmb2xsb3dlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNhcGFiaWxpdHkgaW4gcGFyZW5zOgorIworIwlDU0kgPG4+awkJZGlzYWJsZSAobj0wKSBvciBlbmFibGUgKG49MSkga2V5Y2xpY2sKKyMJQ1NJIDJoICAgCQlsb2NrIGtleWJvYXJkCisjCUNTSSAyaSAgCQlzZW5kIHNjcmVlbiBhcyBpbnB1dAorIwlDU0kgMmwgIAkJdW5sb2NrIGtleWJvYXJkCisjCUNTSSA2bSAgCQllbmFibGUgYmFja2dyb3VuZCBjb2xvciBpbnRlbnNpdHkKKyMJQ1NJIDwwLTI+YwkJcmVzZXJ2ZWQKKyMJQ1NJIDwwLTU5Pm0JCXNlbGVjdCBncmFwaGljIHJlbmRpdGlvbgorIwlDU0kgPG4+OzxtPkgJKGN1cCkJY3Vyc29yIHRvIGxpbmUgbiBhbmQgY29sdW1uIG0KKyMJQ1NJIDxuPjs8bT5mCQljdXJzb3IgdG8gbGluZSBuIGFuZCBjb2x1bW4gbQorIwlDU0kgPG4+QAkoaWNoKQlpbnNlcnQgY2hhcmFjdGVycworIwlDU0kgPG4+QQkoY3V1KQljdXJzb3IgdXAgbiBsaW5lcworIwlDU0kgPG4+QgkoY3VkKQljdXJzb3IgZG93biBuIGxpbmVzCisjCUNTSSA8bj5DCShjdXUpCWN1cnNvciByaWdodCBuIGNoYXJhY3RlcnMKKyMJQ1NJIDxuPkQJKGN1ZCkJY3Vyc29yIGxlZnQgbiBjaGFyYWN0ZXJzCisjCUNTSSA8bj5FCQljdXJzb3IgZG93biBuIGxpbmVzIGFuZCBpbiBmaXJzdCBjb2x1bW4KKyMJQ1NJIDxuPkYJCWN1cnNvciB1cCBuIGxpbmVzIGFuZCBpbiBmaXJzdCBjb2x1bW4KKyMJQ1NJIDxuPkcJKGhwYSkJcG9zaXRpb24gY3Vyc29yIGF0IGNvbHVtbiBuLTEKKyMJQ1NJIDxuPkoJKGVkKQllcmFzZSBpbiBkaXNwbGF5CisjCUNTSSA8bj5LCShlbCkJZXJhc2UgaW4gbGluZQorIwlDU0kgPG4+TAkoaWwpCWluc2VydCBsaW5lKHMpCisjCUNTSSA8bj5QCShkY2gpCWRlbGV0ZSBjaGFyYWN0ZXJzCisjCUNTSSA8bj5TCShpbmRuKQlzY3JvbGwgdXAgbiBsaW5lcworIwlDU0kgPG4+VAkocmluKQlzY3JvbGwgZG93biBuIGxpbmVzCisjCUNTSSA8bj5YCShlY2gpCWVyYXNlIGNoYXJhY3RlcnMKKyMJQ1NJIDxuPloJKGNidCkJYmFjayB1cCBuIHRhYiBzdG9wcworIwlDU0kgPG4+YAkJY3Vyc29yIHRvIGNvbHVtbiBuIG9uIGxpbmUKKyMJQ1NJIDxuPmEJKGN1dSkJY3Vyc29yIHJpZ2h0IG4gY2hhcmFjdGVycworIwlDU0kgPG4+ZAkodnBhKQljdXJzb3IgdG8gbGluZSBuCisjCUNTSSA8bj5lCQljdXJzb3IgZG93biBuIGxpbmVzIGFuZCBpbiBmaXJzdCBjb2x1bW4KKyMJQ1NJIDxuPmcJKGNidCkJY2xlYXIgYWxsIHRhYnMKKyMJQ1NJIDxuPnoJCW1ha2UgdmlydHVhbCB0ZXJtaW5hbCBuIGFjdGl2ZQorIwlDU0kgPzdoIAkoc21hbSkJdHVybiBhdXRvbWFyZ2luIG9uCisjCUNTSSA/N2wgCShybWFtKQl0dXJuIGF1dG9tYXJnaW4gb2ZmCisjCUNTSSBzICAgICAJCXNhdmUgY3Vyc29yIHBvc2l0aW9uCisjCUNTSSB1ICAgCQlyZXN0b3JlIGN1cnNvciBwb3NpdGlvbiB0byBzYXZlZCB2YWx1ZQorIwlDU0kgPTxjPkEJCXNldCBvdmVyc2NhbiBjb2xvcgorIwlDU0kgPTxjPkYJCXNldCBub3JtYWwgZm9yZWdyb3VuZCBjb2xvcgorIwlDU0kgPTxjPkcJCXNldCBub3JtYWwgYmFja2dyb3VuZCBjb2xvcgorIwlDU0kgPTxjPkgJCXNldCByZXZlcnNlIGZvcmVncm91bmQgY29sb3IKKyMJQ1NJID08Yz5JCQlzZXQgcmV2ZXJzZSBmb3JlZ3JvdW5kIGNvbG9yCisjCUNTSSA9PGM+SgkJc2V0IGdyYXBoaWMgZm9yZWdyb3VuZCBjb2xvcgorIwlDU0kgPTxjPksJCXNldCBncmFwaGljIGZvcmVncm91bmQgY29sb3IKKyMJQ1NJID08bj5nCShkaXNwYykgZGlzcGxheSBuIGZyb20gYWx0ZXJuYXRlIGdyYXBoaWNzIGNoYXJhY3RlciBzZXQKKyMJQ1NJID08cD47PGQ+QgkJc2V0IGJlbGwgcGFyYW1ldGVycworIwlDU0kgPTxzPjs8ZT5DCQlzZXQgY3Vyc29yIHBhcmFtZXRlcnMKKyMJQ1NJID08eD5ECQllbmFibGUvZGlzYWJsZSBpbnRlbnNpdHkgb2YgYmFja2dyb3VuZCBjb2xvcgorIwlDU0kgPTx4PkUJCXNldC9jbGVhciBibGluayB2cy4gYm9sZCBiYWNrZ3JvdW5kCisjCUNTSSA3ICAgICAJKHNjKQkoc2MpIHNhdmUgY3Vyc29yIHBvc2l0aW9uCisjCUNTSSA4ICAgCShyYykJKHJjKSByZXN0b3JlIGN1cnNvciBwb3NpdGlvbiB0byBzYXZlZCB2YWx1ZQorIwlDU0kgSAkJKGh0cykJKGh0cykgc2V0IHRhYiBzdG9wCisjCUNTSSBRPG4+PHN0cmluZz4JZGVmaW5lIGZ1bmN0aW9uIGtleSBzdHJpbmcKKyMJCQkJKHN0cmluZyBtdXN0IGJlZ2luIGFuZCBlbmQgd2l0aCBkZWxpbWl0ZXIgY2hhcikKKyMJQ1NJIGMgICAJKGNsZWFyKSBjbGVhciBzY3JlZW4KKyMKKyMgVGhlIGxhY2sgb2YgYW55IHNwZWNpZmljYXRpb24gZm9yIGF0dHJpYnV0ZXMgaW4gU0dSIChhbW9uZyBvdGhlciB0aGluZ3MpCisjIG1ha2VzIHRoaXMgYSB3cmV0Y2hlZGx5IHdlYWsgc3RhbmRhcmQuIFRoZSB0YWJsZSBhYm92ZSBpcyBsaXRlcmFsbHkKKyMgZXZlcnl0aGluZyBpQlNDMiBoYXMgdG8gc2F5IGFib3V0IHRlcm1pbmFsIGVzY2FwZSBzZXF1ZW5jZXM7IHRoZXJlIGlzCisjIG5vIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiB0aGVpciBtZWFuaW5nIG9yIGhvdyB0byBzZXQgdGhlIHBhcmFtZXRlcnMKKyMgaW4gdGhlc2Ugc2VxdWVuY2VzIGF0IGFsbC4KKyMKKworIyMjIyMjIyMgTk9OU1RBTkRBUkQgQ0FQQUJJTElUWSBUUkFOU0xBVElPTlMgVVNFRCBJTiBUSElTIEZJTEUKKyMKKyMgVGhlIGhpc3RvcmljYWwgdGVybWNhcCBmaWxlIGVudHJpZXMgd2VyZSB3cml0dGVuIHByaW1hcmlseSBpbiA0LjRCU0QgdGVybWNhcC4KKyMgVGhlIDQuNEJTRCB0ZXJtY2FwIHNldCB3YXMgc3Vic3RhbnRpYWxseSBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgNC4xQlNEIHNldCwKKyMgd2l0aCB0aGUgZXh0ZW5zaW9uIG5hbWVzIGNob3NlbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB0ZXJtY2FwIG5hbWVzCisjIGFzc2lnbmVkIGluIFN5c3RlbSBWIHRlcm1pbmZvLiAgVGhlcmUgYXJlIHNvbWUgdmFyaWFudCBleHRlbnNpb24gc2V0cyBvdXQKKyMgdGhlcmUuICBXZSB0cnkgdG8gZGVzY3JpYmUgdGhlbSBoZXJlLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBUaGUgWEVOSVggZXh0ZW5zaW9ucyBpbmNsdWRlIGEgc2V0IG9mIGZ1bmN0aW9uLWtleSBjYXBhYmlsaXRpZXMgYXMgZm9sbG93czoKKyMKKyMgICAgICAgY29kZQlYRU5JWCB2YXJpYWJsZSBuYW1lCXRlcm1pbmZvIG5hbWUJbmFtZSBjbGFzaGVzPworIwktLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwlDTAlrZXlfY2hhcl9sZWZ0CisjCUNSCWtleV9jaGFyX3JpZ2h0CisjCUNXCWtleV9jaGFuZ2Vfd2luZG93CQkJY3JlYXRlX3dpbmRvdworIwlFTglrZXlfZW5kICAgICAgICAgIAlrZW5kCisjCUhNCWtleV9ob21lCQlraG9tZQorIwlIUAk/PworIwlMRAlrZXlfZGVsZXRlX2xpbmUgIAlrZGwxCisjCUxGCWtleV9saW5lZmVlZCAgICAgCQkJbGFiZWxfb2ZmCisjCU5VCWtleV9uZXh0X3VubG9ja2VkX2NlbGwKKyMJUEQJa2V5X3BhZ2VfZG93biAgIAlrbnAKKyMJUEwJPz8KKyMJUE4Jc3RhcnRfcHJpbnQJCW1jNQorIwlQUgk/PworIwlQUwlzdG9wX3ByaW50CQltYzQKKyMJUFUJa2V5X3BhZ2VfdXAgICAgIAlrcHAJCXB1bHNlCisjCVJDCWtleV9yZWNhbGMJCQkJcmVtb3ZlX2Nsb2NrCisjCVJGCWtleV90b2dnbGVfcmVmCQkJCXJlcV9mb3JfaW5wdXQKKyMJUlQJa2V5X3JldHVybiAgICAgIAlrZW50CisjCVVQCWtleV91cF9hcnJvdyAgICAgICAgICAgCWtjdXUxICAgCXBhcm1fdXBfY3Vyc29yCisjCVdMCWtleV93b3JkX2xlZnQKKyMJV1IJa2V5X3dvcmRfcmlnaHQKKyMKKyMgVGhlIFhFTklYIGV4dGVuc2lvbnMgYWxzbyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLXNldCBhbmQgaGlnaGxpZ2h0CisjIGNhcGFiaWxpdGllczoKKyMKKyMJWEVOSVgJdGVybWluZm8JZnVuY3Rpb24KKyMJLS0tLS0JLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUdTCXNtYWNzCQlzdGFydCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorIwlHRQlybWFjcwkJZW5kIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisjCUdHCQkJOmFzOi86YWU6IGdsaXRjaCAoYW5hbG9nb3VzIHRvIDpzZzovOnVnOikKKyMJYm8JYmxpbmsJCWJlZ2luIGJsaW5rIChub3QgdXNlZCBpbiAvZXRjL3Rlcm1jYXApCisjCWJlCQkJZW5kIGJsaW5rIChub3QgdXNlZCBpbiAvZXRjL3Rlcm1jYXApCisjCWJiCQkJYmxpbmsgZ2xpdGNoICAobm90IHVzZWQgaW4gL2V0Yy90ZXJtY2FwKQorIwlpdAlkaW0JCWJlZ2luIGRpbSAobm90IHVzZWQgaW4gL2V0Yy90ZXJtY2FwKQorIwlpZQkJCWVuZCBkaW0gKG5vdCB1c2VkIGluIC9ldGMvdGVybWNhcCkKKyMJaWcJCQlkaW0gZ2xpdGNoICAobm90IHVzZWQgaW4gL2V0Yy90ZXJtY2FwKQorIworIyBGaW5hbGx5LCBYRU5JWCBhbHNvIHVzZWQgdGhlIGZvbGxvd2luZyBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMJc2luZ2xlCWRvdWJsZSAgdHlwZSAgICAgICAgICAgICBBU0NJSSBhcHByb3hpbWF0aW9uCisjCS0tLS0tLQktLS0tLS0JLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisjCUdWCUd2CXZlcnRpY2FsIGxpbmUgICAgICAgICAgICAgfAorIwlHSAlHdglob3Jpem9udGFsIGxpbmUgICAgICAgLSAgIF8KKyMJRzEJRzUJdG9wIHJpZ2h0IGNvcm5lciAgICAgICBfICAgfAorIwlHMglHNgl0b3AgbGVmdCBjb3JuZXIgICAgICAgfAorIwlHMwlHNwlib3R0b20gbGVmdCBjb3JuZXIgICAgICAgICB8XworIwlHNAlHOAlib3R0b20gcmlnaHQgY29ybmVyICAgX3wKKyMJR0QJR2QJZG93bi10aWNrIGNoYXJhY3RlciAgICAgICAgVAorIwlHTAlHbAlsZWZ0LXRpY2sgY2hhcmFjdGVyICAgLXwKKyMJR1IJR3IJcmlnaHQtdGljayBjaGFyYWN0ZXIgICAgICAgfC0KKyMJR0MJR2MJbWlkZGxlIGludGVyc2VjdGlvbiAgIC18LQorIwlHVQlHdQl1cC10aWNrIGNoYXJhY3RlciAgICAgICAgICBffF8KKyMKKyMgVGhlc2Ugd2VyZSBpbnZlbnRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgSUJNIFBDIFJPTSBjaGFyYWN0ZXIgc2V0LiAgT25lCisjIGNhbiBjb21wb3NlIGFuIGFjc2Mgc3RyaW5nIGZyb20gdGhlIHNpbmdsZS13aWR0aCBjaGFyYWN0ZXJzIGFzIGZvbGxvd3MKKyMJImp7RzR9a3tHMX1se0cyfW17RzN9cXtHSH14e0dWfXR7R1J9dXtHTH12e0dVfXd7R0R9bntHQ30iCisjIFdoZW4gdHJhbnNsYXRpbmcgYSB0ZXJtY2FwIGZpbGUsIG5jdXJzZXMgdGljIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LgorIyBUaGUgZG91YmxlIGZvcm1zIGNoYXJhY3RlcnMgZG9uJ3QgZml0IHRoZSBTVnI0IHRlcm1pbmZvIG1vZGVsLgorIworIyBBVCZUIEV4dGVuc2lvbnM6CisjCisjIFRoZSBvbGQgQVQmVCA1NDEwLCA1NDIwLCA1NDI1LCBwYzYzMDBwbHVzLCA2MTAsIGFuZCBzNCBlbnRyaWVzIHVzZWQgYSBzZXQgb2YKKyMgbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzLiAgSXRzIHNpZ25hdHVyZSBpcyB0aGUgS00gY2FwYWJpbGl0eSwgdXNlZCB0byBuYW1lCisjIHNvbWUgc29ydCBvZiBrZXltYXAgZmlsZS4gIEVFLCBCTywgQ0ksIENWLCBYUywgRFMsIEZMIGFuZCBGRSBhcmUgaW4gdGhpcworIyBzZXQuICBDb21tZW50cyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBhIGxpdHRsZSBjcm9zcy1jaGVja2luZyB3aXRoIG90aGVyIEFUJlQKKyMgZG9jdW1lbnRhdGlvbiwgc2VlbSB0byBlc3RhYmxpc2ggdGhhdCBCTz06bXI6IChzdGFydCByZXZlcnNlIHZpZGVvKSwgRFM9Om1oOgorIyAoc3RhcnQgZGltKSwgWFM9Om1rOiAoc2VjdXJlL2ludmlzaWJsZSBtb2RlKSwgRUU9Om1lOiAoZW5kIGhpZ2hsaWdodHMpLAorIyBGTD06TE86IChlbmFibGUgc29mdCBsYWJlbHMpLCBGRT06TEY6IChkaXNhYmxlIHNvZnQgbGFiZWxzKSwgQ0k9OnZpOiAobWFrZQorIyBjdXJzb3IgaW52aXNpYmxlKSwgYW5kIENWPTp2ZTogKG1ha2UgY3Vyc29yIG5vcm1hbCkuCisjCisjIEhQIEV4dGVuc2lvbnMKKyMKKyMgVGhlIEhQIGxpYnJhcnkgKGFzIG9mIG1pZC0xOTk1LCB0aGVpciB0ZXJtLmggZmlsZSB2ZXJzaW9uIDcwLjEpIGFwcGVhcnMgdG8KKyMgaGF2ZSB0aGUgU3lzdGVtIFYgY2FwYWJpbGl0aWVzIHVwIHRvIFNWcjEgbGV2ZWwuICBBZnRlciB0aGF0LCBpdCBzdXBwb3J0cworIyB0d28gbm9uc3RhbmRhcmQgY2FwcyBtZW1sIGFuZCBtZW11IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9sZCB0ZXJtY2FwIDptbDosCisjIDptdTogY2FwYWJpbGl0aWVzLiAgQWZ0ZXIgdGhhdCwgaXQgc3VwcG9ydHMgY2FwcyBwbGFiX25vcm0sIGxhYmVsX29uLAorIyBsYWJlbF9vZmYsIGFuZCBrZXlfZjExLi5rZXlfZjYzIGNhcGFiaWxpdGllcyBsaWtlIFNWcjQncy4gIFRoaXMgbWFrZXMgdGhlCisjIEhQIGJpbmFyeSBmb3JtYXQgaW5jb21wYXRpYmxlIHdpdGggU1ZyNCdzLgorIworIyBJQk0gRXh0ZW5zaW9ucworIworIyBUaGVyZSBpcyBhIHNldCBvZiBub25zdGFuZGFyZCB0ZXJtaW5mb3MgdXNlZCBieSBJQk0ncyBBSVggb3BlcmF0aW5nIHN5c3RlbS4KKyMgVGhlIEFJWCB0ZXJtaW5mbyBsaWJyYXJ5IGRpdmVyZ2VkIGZyb20gU1ZyMSB0ZXJtaW5mbywgYW5kIHJlcGxhY2VzIGFsbAorIyBjYXBhYmlsaXRpZXMgZm9sbG93aW5nIHBydHJfbm9uIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNhcGFiaWx0aWVzOgorIyBib3hbMTJdLCBiYXR0WzEyXSwgY29sYlswMTIzNDU2Nzg5XSwgY29sZlswMTIzNDU2Nzg5XSwgZlswMTIzNDU2N10sIGtidGFiLAorIyBrZG8sIGtjbWQsIGtjcG4sIGtlbmQsIGtobHAsIGtubCwga25wbiwga3Bwbiwga3Bwbiwga3F1aXQsIGtzZWwsIGtzY2wsIGtzY3IsCisjIGt0YWIsIGttcGZbMTIzNDU2Nzg5XSwgYXBzdHIsIGtzZjEuLmtzZjEwLCBrZjExLi4ua2Y2Mywga2FjdCwgdG9wbCwgYnRtbCwKKyMgcnZlcnQsIGx2ZXJ0LiAgIFNvbWUgb2YgdGhlc2UgYXJlIGlkZW50aWNhbCB0byBYUEc0L1NWcjQgZXF1aXZhbGVudHM6CisjIGtjbWQsIGtlbmQsIGtobHAsIGFuZCBrZjExLi4ua2Y2My4gIFR3byBvdGhlcnMgKGtidGFiIGFuZCBrc2VsKSBjYW4gYmUKKyMgcmVuYW1lZCAodG8ga2NidCBhbmQga3NsdCkuICBUaGUgcGxhY2VzIGluIHRoZSBib3hbMTJdIGNhcGFiaWxpdGllcworIyBjb3JyZXNwb25kIHRvIGFjc2MgY2hhcnMsIGhlcmUgaXMgdGhlIG1hcHBpbmc6CisjCisjCWJveDFbMF0gID0gQUNTX1VMQ09STkVSCisjCWJveDFbMV0gID0gQUNTX0hMSU5FCisjCWJveDFbMl0gID0gQUNTX1VSQ09STkVSCisjCWJveDFbM10gID0gQUNTX1ZMSU5FCisjCWJveDFbNF0gID0gQUNTX0xSQ09STkVSCisjCWJveDFbNV0gID0gQUNTX0xMQ09STkVSCisjCWJveDFbNl0gID0gQUNTX1RURUUKKyMJYm94MVs3XSAgPSBBQ1NfUlRFRQorIwlib3gxWzhdICA9IEFDU19CVEVFCisjCWJveDFbOV0gID0gQUNTX0xURUUKKyMJYm94MVsxMF0gPSBBQ1NfUExVUworIworIyBUaGUgYm94MiBjaGFyYWN0ZXJzIGFyZSB0aGUgZG91YmxlLWxpbmUgdmVyc2lvbnMgb2YgdGhlc2UgZm9ybXMgZ3JhcGhpY3MuCisjIFRoZSBBSVggYmluYXJ5IHRlcm1pbmZvIGZvcm1hdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBTVnI0J3MuCisjCisjIElyaXMgY29uc29sZSBleHRlbnNpb25zOgorIworIyBIUyBpcyBoYWxmLWludGVuc2l0eSBzdGFydDsgSEUgaXMgaGFsZi1pbnRlbnNpdHkgZW5kCisjIENUIGlzIGNvbG9yIHRlcm1pbmFsIHR5cGUgKGZvciBDdXJzZXMgJiByb2d1ZSkKKyMgQ1AgaXMgY29sb3IgY2hhbmdlIGVzY2FwZSBzZXF1ZW5jZQorIyBDWiBhcmUgY29sb3IgbmFtZXMgKGZvciBDdXJzZXMgJiByb2d1ZSkKKyMKKyMgVGhlIG5jdXJzZXMgdGljIHV0aWxpdHkgcmVjb2duaXplcyBIUyBhcyBhbiBhbGlhcyBmb3IgbWggPGRpbT4uCisjCisjIFRDIEV4dGVuc2lvbnM6CisjCisjIFRoZXJlIGlzIGEgc2V0IG9mIGV4dGVuZGVkIHRlcm1jYXBzIGFzc29jaWF0ZWQgd2l0aCBzb21ldGhpbmcKKyMgY2FsbGVkIHRoZSAiVGVybWluYWwgQ29udHJvbCIgb3IgVEMgcGFja2FnZSBjcmVhdGVkIGJ5IE1haW5TdHJlYW0gU3lzdGVtcywKKyMgV2luZmllbGQgS2Fuc2FzLiAgVGhpcyBvbmUgYWxzbyB1c2VzIEdTL0dFIGZvciBhcy9hZSwgYW5kIGFsc28gdXNlcworIyBDRiBmb3IgY2l2aXMgYW5kIENPIGZvciBjdnZpcy4gIEZpbmFsbHksIHRoZXkgZGVmaW5lIGEgYm9vbGVhbiA6Y3Q6CisjIHRoYXQgZmxhZ3MgY29sb3IgdGVybWluYWxzLgorIworIyMjIyMjIyMgQ0hBTkdFIEhJU1RPUlkKKyMKKyMgVGhlIGxhc3QgL2V0Yy90ZXJtY2FwIHZlcnNpb24gbWFpbnRhaW5lZCBieSBKb2huIEt1bnplIHdhcyA4LjMsIGRhdGVkIDgvNS85NC4KKyMgUmVsZWFzZXMgOSBhbmQgdXAgYXJlIG1haW50YWluZWQgYnkgRXJpYyBTLiBSYXltb25kIGFzIHBhcnQgb2YgdGhlIG5jdXJzZXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBwcmVzZW50IGluIEpvaG4gS3VuemUncworIyBsYXN0IHZlcnNpb24gb2YgdGhlIHRlcm1jYXAgbWFzdGVyIGZpbGUsIGV4Y2VwdCBhcyBub3RlZCBpbiB0aGUgY2hhbmdlCisjIGNvbW1lbnRzIGF0IGVuZCBvZiBmaWxlLiAgU29tZSBpbmZvcm1hdGlvbiBhYm91dCB2ZXJ5IGFuY2llbnQgb2Jzb2xldGUKKyMgY2FwYWJpbGl0aWVzIGhhcyBiZWVuIG1vdmVkIHRvIGNvbW1lbnRzLiAgU29tZSBhbGwtbnVtZXJpYyBuYW1lcyBvZiBvbGRlcgorIyB0ZXJtaW5hbHMgaGF2ZSBiZWVuIHJldGlyZWQuCisjCisjIEkgY2hhbmdlZCA6TVQ6IHRvIDprbTogKHRoZSA0LjRCU0QgbmFtZSkgZXZlcnl3aGVyZS4gIEkgY29tbWVudGVkIG91dCBzb21lCisjIGNhcGFiaWxpdGllcyAoRVAsIGRGLCBkVCwgZFYsIGtuLCBtYSwgbWwsIG11LCB4ciwgeHgpIHRoYXQgYXJlIG5vIGxvbmdlcgorIyB1c2VkIGJ5IEJTRCBjdXJzZXMuCisjCisjIFRoZSA5LjEuMCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB3YXMgdHJhbnNsYXRlZCBmcm9tIG15IGxpZ2h0bHktZWRpdGVkIGNvcHkgb2YKKyMgOC4zLCB0aGVuIG1lY2hhbmljYWxseSBjaGVja2VkIGFnYWluc3QgOC4zIHVzaW5nIEVtYWNzIExpc3AgY29kZSB3cml0dGVuIGZvcgorIyB0aGUgcHVycG9zZS4gIFVubGVzcyB0aGUgbmN1cnNlcyB0aWMgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBMaXNwIGNvZGUgd2VyZQorIyBtYWtpbmcgcGVyZmVjdGx5IHN5bmNocm9uaXplZCBtaXN0YWtlcyB3aGljaCBJIHRoZW4gZmFpbGVkIHRvIGNhdGNoIGJ5CisjIGV5ZWJhbGwsIHRoZSB0cmFuc2xhdGlvbiB3YXMgY29ycmVjdCBhbmQgcGVyZmVjdGx5IGluZm9ybWF0aW9uLXByZXNlcnZpbmcuCisjCisjIE1ham9yIHZlcnNpb24gbnVtYmVyIGJ1bXBzIGNvcnJlc3BvbmQgdG8gbWFqb3IgdmVyc2lvbiBjaGFuZ2VzIGluIG5jdXJzZXMuCisjCisjIEhlcmUgaXMgYSBsb2cgb2YgdGhlIGNoYW5nZXMgc2luY2UgdGhlbjoKKyMKKyMgOS4xLjAgKFdlZCBGZWIgIDEgMDQ6NTA6MzIgRVNUIDE5OTUpOgorIwkqIEZpcnN0IHRlcm1pbmZvIG1hc3RlciB0cmFuc2xhdGVkIGZyb20gOC4zLgorIyA5LjIuMCAoV2VkIEZlYiAgMSAxMjoyMTo0NSBFU1QgMTk5NSk6CisjCSogUmVwbGFjZWQgV3lzZSBlbnRyaWVzIHdpdGggdXBkYXRlZCBlbnRyaWVzIHN1cHBsaWVkIGJ5IHZlbmRvci4KKyMKKyMgOS4zLjAgKE1vbiBGZWIgIDYgMTk6MTQ6NDAgRVNUIDE5OTUpOgorIwkqIEFkZGVkIGNvbnRhY3QgJiBzdGF0dXMgaW5mbyBmcm9tIEcuIENsYXJrIEJyb3duIDxjbGFya0Bzc3NpLmNvbT4uCisjIDkuMy4xIChUdWUgRmViICA3IDEyOjAwOjI0IEVTVCAxOTk1KToKKyMJKiBCZXR0ZXIgWEVOSVgga2V5Y2FwIHRyYW5zbGF0aW9uLiAgRGVzY3JpYmUgVEMgdGVybWNhcHMuCisjCSogQ29udGFjdCBhbmQgaGlzdG9yeSBpbmZvIHN1cHBsaWVkIGJ5IFF1bWUuCisjIDkuMy4yIChTYXQgRmViIDExIDIzOjQwOjAyIEVTVCAxOTk1KToKKyMJKiBSYWlkZWQgdGhlIFNodWZvcmQgRlRQIHNpdGUgZm9yIHJlY2VudCB0ZXJtY2Fwcy90ZXJtaW5mb3MuCisjCSogQWRkZWQgaW5mb3JtYXRpb24gb24gWDMuNjQgYW5kIFZUMTAwIHN0YW5kYXJkIGVzY2FwZSBzZXF1ZW5jZXMuCisjIDkuMy4zIChNb24gRmViIDEzIDEyOjI2OjE1IEVTVCAxOTk1KToKKyMJKiBBZGRlZCBhIGNvcnJlY3QgWDExUjYgeHRlcm0gZW50cnkuCisjCSogRml4ZWQgdGVybWluZm8gdHJhbnNsYXRpb25zIG9mIHBhZGRpbmcuCisjIDkuMy40IChXZWQgRmViIDIyIDE5OjI3OjM0IEVTVCAxOTk1KToKKyMJKiBBZGRlZCBjb3JyZWN0IGFjc2Mvc21hY3Mvcm1hY3Mgc3RyaW5ncyBmb3IgdnQxMDAgYW5kIHh0ZXJtLgorIwkqIEFkZGVkIHU2L3U3L3U4L3U5IGNhcGFiaWxpdGllcy4KKyMJKiBBZGRlZCBQQ1ZUIGVudHJ5LgorIyA5LjMuNSAoVGh1IEZlYiAyMyAwOTozNzoxMiBFU1QgMTk5NSk6CisjCSogRW1hY3MgdXNlcyA6c286LCBub3QgOm1yOiwgZm9yIGl0cyBtb2RlIGxpbmUuICBGaXggbGludXggZW50cnkKKyMJICB0byB1c2UgcmV2ZXJzZS12aWRlbyBzdGFuZG91dCBzbyBFbWFjcyB3aWxsIGxvb2sgcmlnaHQuCisjCSogQWRkZWQgZWwxIGNhcGFiaWxpdHkgdG8gYW5zaS4KKyMJKiBBZGRlZCBzbWFjcy9ybWFjcyB0byBhbnNpLnN5cy4KKyMKKyMgOS40LjAgKFNhdCBGZWIgMjUgMTY6NDM6MjUgRVNUIDE5OTUpOgorIwkqIE5ldyBtdDcwIGVudHJ5LgorIwkqIEFkZGVkIENPUFlSSUdIVFMgQU5EIE9USEVSIERFTFVTSU9OUy4KKyMJKiBBZGRlZCBBVCZUIDIzeHggJiA1MDAvNTEzLCB2dDIyMCBhbmQgdnQ0MjAsIG9wdXMzbjErLCBuZXRyb25pY3MKKyMJICBzbWFydHZpZCAmIHNtYXJ0ZXJtLCBhbXBleCAxNzUgJiAyMTkgJiAyMzIsCisjCSAgZW52MjMwLCBmYWxjbyB0czEwMCwgZmx1a2UsIGludGVydHViZSwgc3VwZXJicmFpbiwgbmNyNzkwMSwgdmljMjAsCisjCSAgb3p6aWUsIHRyczIwMCwgdHI2MDAsIFRhbmR5ICYgVGV4YXMgSW5zdHJ1bWVudHMgVkRUcywgaW50ZXh0MiwKKyMJICBzY3Jld3BvaW50LCBmdmlld3BvaW50LCBDb250ZWwgQnVzaW5lc3MgU3lzdGVtcywgRGF0YW1lZGlhIENvbG9yc2NhbiwKKyMJICBhZG0zNiwgbWltZTMxNCwgZXJnbzQwMDAsIGNhMjI4NTEuICBSZXBsYWNlZCBhdHQ3MzAwLCBlc3ByaXQsIGRkNTUwMC4KKyMJKiBSZXBsYWNlZCB0aGUgUGVya2luLUVsbWVyIGVudHJpZXMgd2l0aCB2ZW5kb3IncyBvZmZpY2lhbCBvbmVzLgorIwkqIFJlc3RvcmVkIHRoZSBvbGQgbWluaW1hbC1hbnNpIGVudHJ5LCBsdW5hIG5lZWRzIGl0LgorIwkqIEZpeGVkIHNvbWUgaW5jb3JyZWN0IGlwIGFuZCBwcm9wb3J0aW9uYWwtcGFkZGluZyB0cmFuc2xhdGlvbnMuCisjIDkuNC4xIChNb24gRmViIDI3IDE0OjE4OjMzIEVTVCAxOTk1KToKKyMJKiBGaXggbGludXggJiBBVDM4NiBzZ3Igc3RyaW5ncyB0byBkbyBBX0FMVENIQVJTRVQgdHVybm9mZiBjb3JyZWN0bHkuCisjCSogTWFrZSB0aGUgeHRlcm0gZW50cnkgNjUgbGluZXMgYWdhaW47IGNyZWF0ZSB4dGVybTI1IGFuZCB4dGVybTI0CisjCSAgdG8gZm9yY2UgYSBwYXJ0aWN1bGFyIGhlaWdodC4KKyMJKiBBZGRlZCBiZWVoaXZlNCBhbmQgcmVvcmdhbml6ZWQgb3RoZXIgSGFycmlzIGVudHJpZXMuCisjIDkuNC4yIChUaHUgTWFyICA5IDAxOjQ1OjQ0IEVTVCAxOTk1KToKKyMJKiBNZXJnZWQgaW4gREVDJ3Mgb2ZmaWNpYWwgZW50cmllcyBmb3IgaXRzIHRlcm1pbmFscy4gIFRoZSBvbmx5IG9sZAorIwkgIGVudHJ5IEkga2VwdCB3YXMgRG91ZyBHd3luJ3MgYWx0ZXJuYXRlIHZ0MTAwIChhcyB2dDEwMC1hdm8pLgorIwkqIFJlcGxhY2VkIHRoZSB0cmFuc2xhdGVkIEJCTiBCaXRncmFwaCBlbnRyaWVzIHdpdGggcHVycG9zZS1idWlsdAorIwkgIG9uZXMgZnJvbSBBVCZUJ3MgU1ZyMy4KKyMJKiBSZXBsYWNlZCB0aGUgQVQmVCBlbnRyaWVzIHdpdGggQVQmVCdzIG9mZmljaWFsIHRlcm1pbmZvcy4KKyMJKiBBZGRlZCB0ZWxlcmF5IDE2LCB2YzQxNSwgY29wczEwLgorIwkqIE1lcmdlZCBpbiBtYW55IGluZGl2aWR1YWwgY2FwYWJpbGl0aWVzIGZyb20gU0NPIHRlcm1pbmZvIGZpbGVzLgorIyA5LjQuMyAoTW9uIE1hciAxMyAwMjozNzo1MyBFU1QgMTk5NSk6CisjCSogVHlwbyBmaXhlcy4KKyMJKiBDaGFuZ2UgbGludXggZW50cnkgc28gQV9QUk9URUNUIGVuYWJsZXMgSUJNLVBDIFJPTSBjaGFyYWN0ZXJzLgorIyA5LjQuNCAoTW9uIE1hciAyNyAxMjozMjozNSBFU1QgMTk5NSk6CisjCSogQWRkZWQgdHR5MzUsIEFubiBBcmJvciBHdXJ1IHNlcmllcy4gdmkzMDAgYW5kIDU1MCwgY2c3OTAwLCB0dmk4MDMsCisjCSAgcHQyMTAsIGlibTMxNjQsIElCTSBTeXN0ZW0gMSwgY3RybSwgVHltc2hhcmUgc2NhbnNldCwgZHQyMDAsIGFkbTIxLAorIwkgIHNpbXRlcm0sIGNpdG9oIGFuZCB2YXJpYW50cy4KKyMJKiBSZXBsYWNlZCBzb2wgZW50cnkgd2l0aCBzb2wxIGFuZCBzb2wyLgorIwkqIFJlcGxhY2VkIFF1bWUgUVZUIGFuZCBGcmVlZG9tLXNlcmllcyBlbnRyaWVzIHdpdGggcHVycG9zZS1idWlsdAorIwkgIHRlcm1pbmZvIGVudHJpZXMuCisjCSogRW5oYW5jZWQgdnQyMjAsIHR2aTkxMCwgdHZpOTI0LCBocHRlcm0sIGhwMjY0NSwgYWRtNDIsIHRlaworIwkgIGFuZCBkZzIwMCBlbnRyaWVzIHVzaW5nIGNhcHMgZnJvbSBmcm9tIFNDTy4KKyMJKiBBZGRlZCB0aGUgdXN1YWwgc2V0IG9mIGZ1bmN0aW9uLWtleSBtYXBwaW5ncyB0byBBTlNJIGVudHJ5LgorIwkqIENvcnJlY3RlZCB4dGVybSdzIGZ1bmN0aW9uLWtleSBjYXBhYmlsaXRpZXMuCisjIDkuNC41IChUdWUgTWFyIDI4IDE0OjI3OjQ5IEVTVCAxOTk1KToKKyMJKiBGaXggaW4geHRlcm0gZW50cnksIGN1YiBhbmQgY3VkIGFyZSBub3QgcmVsaWFibGUgdW5kZXIgWDExUjYuCisjIDkuNC42IChUaHUgTWFyIDMwIDE0OjUyOjE1IEVTVCAxOTk1KToKKyMJKiBGaXggaW4geHRlcm0gZW50cnksIGdldCB0aGUgYXJyb3cga2V5cyByaWdodC4KKyMJKiBDaGFuZ2Ugc29tZSBcMCBlc2NhcGVzIHRvIFwyMDAuCisjIDkuNC43IChUdWUgQXByICA0IDExOjI3OjExIEVEVCAxOTk1KQorIwkqIEFkZGVkIGFwcGxlIChWaWRleCBjYXJkKSwgYWRtMWEsIG9hZG0zMS4KKyMJKiBGaXhlZCBtYWxmb3JtZWQgYW1wZXggY3NyLgorIwkqIEZpeGVkIGFjdDQsIGN5YjExMDsgdGhleSBoYWQgb2xkLXN0eWxlIHByZWZpeCBwYWRkaW5nIGxlZnQgaW4uCisjCSogQ2hhbmdlZCBtYW5kYXRvcnkgdG8gYWR2aXNvcnkgcGFkZGluZyBpbiBtYW55IGVudHJpZXMuCisjCSogUmVwbGFjZWQgSFAgZW50cmllcyB1cCB0byBocHN1YiB3aXRoIHB1cnBvc2UtYnVpbHQgb25lcy4KKyMJKiBCbGFuayBybWlyL3NtaXIvcm1kYy9zbWRjIGNhcGFiaWxpdGllcyByZW1vdmVkLgorIwkqIFNtYWxsIGZpeGVzIG1lcmdlZCBpbiBmcm9tIFNDTyBlbnRyaWVzIGZvciBscHIsIGZvcywgdHZpOTEwKywgdHZpOTI0LgorIyA5LjQuOCAoRnJpIEFwciAgNyAwOTozNjozNCBFRFQgMTk5KToKKyMJKiBSZXBsYWNlZCB0aGUgQW5uIEFyYm9yIGVudHJpZXMgd2l0aCBTQ08ncywgdGhlIGluaXQgc3RyaW5ncyBhcmUKKyMJICBtb3JlIGVmZmljaWVudCAoYnV0IHRoZSBlbnRyaWVzIG90aGVyd2lzZSBpZGVudGljYWwpLgorIwkqIEFkZGVkIGRnMjExIGZyb20gU2h1Zm9yZCBhcmNoaXZlLgorIwkqIEFkZGVkIHN5bmVydGVrLCBhcHBsZS1zb3JvYywgaWJtcGMsIHBjLXZlbml4LCBwYy1jb2hlcmVudCwgeHRhbGssCisjCSAgYWRtNDItbmwsIHBjNTIsIGdzNjMwMCwgeGVyb3g4MjAsIHV0czMwLgorIwkqIFB1bGwgU0NPJ3MgcGFkZGluZyBpbnRvIHZpMjAwIGVudHJ5LgorIwkqIEltcHJvdmVkIGNhcGFiaWxpdGllcyBmb3IgdHZpNDEwNyBhbmQgb3RoZXIgVGVsZXZpZGVvIGFuZCBWaWV3cG9pbnQKKyMJICBlbnRyaWVzIG1lcmdlZCBpbiBmcm9tIFNDTydzIGRlc2NyaXB0aW9ucy4KKyMJKiBGaXhlZCBvbGQtc3R5bGUgcHJlZml4IHBhZGRpbmcgb24gemVuNTAsIGgxNTAwLgorIwkqIE1vdmVkIG9sZCBzdXBlcmJlZSBlbnRyeSB0byBzdXBlcmJlZS14c2IsIHB1bGxlZCBpbiBuZXcgc3VwZXJiZWUKKyMJICBlbnRyeSBmcm9tIFNDTydzIGRlc2NyaXB0aW9uLgorIwkqIFJlb3JnYW5pemVkIHRoZSBzcGVjaWFsIGVudHJpZXMuCisjCSogQWRkZWQgbG0jMCB0byBjYnVuaXggYW5kIHZpcnR1YWwgZW50cmllcy4KKyMKKyMgOS41LjAgKE1vbiBBcHIgMTAgMTE6MzA6MDAgRURUIDE5OTUpOgorIwkqIFJlc3RvcmVkIGNkYzQ1NnRzdC4KKyMJKiBGaXhlZCBzYjEgZW50cnksIFNDTyBlcnJvbmVvdXNseSBsZWZ0IG91dCB0aGUgeHNiIGdsaXRjaC4KKyMJKiBBZGRlZCBtZWdhdGVrLCBiZWFjb24sIG1pY3Jva2l0LgorIwkqIEZyZWV6ZSBmb3IgbmN1cnNlcy0xLjkgcmVsZWFzZS4KKyMgOS41LjEgKEZyaSBBcHIgMjEgMTI6NDY6NDIgRURUIDE5OTUpOgorIwkqIEFkZGVkIGhpc3RvcmljYWwgZGF0YSBmb3IgVEFCLgorIwkqIENvbW1lbnQgZml4ZXMgZnJvbSBEYXZpZCBNYWNLZW56aWUuCisjCSogQWRkZWQgdGhlIG5ldyBCU0RJIHBjMyBlbnRyeS4KKyMgOS41LjIgKFR1ZSBBcHIgMjUgMTc6Mjc6NTIgRURUIDE5OTUpCisjCSogQSBjaGFuZ2UgaW4gdGhlIHRpYyAtQyBsb2dpYyBub3cgZW5zdXJlcyB0aGF0IGFsbCBlbnRyaWVzIGluCisjCSAgdGhlIHRlcm1jYXAgdHJhbnNsYXRpb24gd2lsbCBmaXQgaW4gPCAxMDI0IGJ5dGVzLgorIwkqIEFkZGVkIGBib2JjYXQnIGFuZCBgZ2F0b3InIEhQIGNvbnNvbGVzIGFuZCB0aGUgTnUgbWFjaGluZSBlbnRyaWVzCisjCSAgZnJvbSBHTlUgdGVybWNhcCBmaWxlLiAgVGhpcyBtZXJnZXMgaW4gYWxsIHRoZWlyIGxvY2FsIGluZm9ybWF0aW9uLgorIyA5LjUuMyAoVHVlIEFwciAyNSAyMjoyODoxMyBFRFQgMTk5NSkKKyMJKiBDaGFuZ2VkIHRpYyAtQyBsb2dpYyB0byBkdW1wIGFsbCBjYXBhYmlsaXRpZXMgdXNlZCBieSBHTlUgdGVybWNhcC4KKyMJKiBBZGRlZCB3YXJuaW5ncyBhYm91dCBlbnRyaWVzIHdpdGggbG9uZyB0cmFuc2xhdGlvbnMgKHJlc3RvcmluZworIwkgIGFsbCB0aGUgR05VIHRlcm1jYXBzIHB1c2hlcyBhIGZldyBvdmVyIHRoZSBlZGdlKS4KKyMgOS41LjQgKFdlZCBBcHIgMjYgMTU6MzU6MDkgRURUIDE5OTUpCisjCSogWWV0IGFub3RoZXIgdGljIGNoYW5nZSwgYW5kIGEgY291cGxlIG9mIGVudHJ5IHR3ZWFrcywgdG8gcmVkdWNlIHRoZQorIwkgIG51bWJlciBvZiBsb25nICg+IDEwMjQpIHRlcm1jYXAgdHJhbnNsYXRpb25zIGJhY2sgdG8gMC4KKyMKKyMgOS42LjAgKE1vbiBNYXkgIDEgMTA6MzU6NTQgRURUIDE5OTUpCisjCSogQWRkZWQga2YxMy1rZjIwIHRvIExpbnV4IGVudHJ5LgorIwkqIFJlZ3VsYXJpemUgUHJpbWUgdGVybWluYWwgbmFtZXMuCisjCSogSGlzdG9yaWNhbCBkYXRhIG9uIFN5bmVydGVrLgorIwkqIEZyZWV6ZSBmb3IgbmN1cnNlcy0xLjkuMS4KKyMgOS42LjEgKFNhdCBNYXkgIDYgMDI6MDA6NTIgRURUIDE5OTUpOgorIwkqIEFkZGVkIHRydWUgeHRlcm0tY29sb3IgZW50cnksIHJlbmFtZWQgZGptJ3MgcHNldWRvLWNvbG9yIGVudHJ5LgorIwkqIEVsaW1pbmF0ZSB3aGl0ZXNwYWNlIGluIHNob3J0IG5hbWUgZmllbGRzLCB0aGlzIHRhbmtzIHNvbWUgc2NyaXB0cy4KKyMJKiBOYW1lIGZpZWxkIGNoYW5nZXMgdG8gc2hvcnRlbiBzb21lIGxvbmcgZW50cmllcy4KKyMJKiBUZXJtY2FwIHRyYW5zbGF0aW9uIG5vdyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBlbXB0eSBybWlyL3NtaXIKKyMJICB3aGVuIGljaDEvaWNoIGlzIHByZXNlbnQgKGNvcGVzIHdpdGggYW4gYW5jaWVudCB2aSBidWcpLgorIwkqIEFkZGVkIGBzY3JlZW4nIGVudHJpZXMgZnJvbSBGU0YncyBzY3JlZW4tMy42LjIuCisjCSogQWRkZWQgbGludXgtbmljIGFuZCB4dGVybS1uaWMgZW50cmllcy4KKyMgOS42LjIgKFNhdCBNYXkgIDYgMTc6MDA6NTUgRURUIDE5OTUpOgorIwkqIENoYW5nZSBsaW51eCBlbnRyeSB0byB1c2Ugc21hY3M9XEVbMTFtIGFuZCBoYXZlIGFuIGV4cGxpY2l0IGFjc2MsCisjCSAgZWxpbWluYXRpbmcgc29tZSBzcGVjaWFsLWNhc2UgY29kZSBpbiBuY3Vyc2VzLgorIworIyA5LjcuMCAoVHVlIE1heSAgOSAxODowMzoxMiBFRFQgMTk5NSk6CisjCSogQWRkZWQgdnQzMjAtazMsIHJzdmlkdHggZnJvbSB0aGUgRW1hY3MgdGVybWNhcC5kYXQgZmlsZS4gIEkgdGhpbmsKKyMJICB0aGF0IGNhcHR1cmVzIGV2ZXJ5dGhpbmcgdW5pcXVlIGZyb20gaXQuCisjCSogQWRkZWQgcmVvcmRlciBzY3JpcHQgZ2VuZXJhdG9yLgorIwkqIEZyZWV6ZSBmb3IgbmN1cnNlcyAxLjkuMiByZWxlYXNlLgorIyA5LjcuMSAoVGh1IEp1biAyOSAwOTozNToyMiBFRFQgMTk5NSk6CisjCSogQWRkZWQgU2VhbiBGYXJsZXkncyBrc3BkLCBmbGFzaCwgcnMxIGNhcGFiaWxpdGllcyBmb3IgbGludXguCisjCSogQWRkZWQgT2xhZiBTaWViZXJ0J3MgY29ycmVjdGlvbnMgZm9yIGFkbTEyLgorIwkqIGFuc2ktcGMtY29sb3Igbm93IGluY2x1ZGVzIHRoZSBjb2xvcnMgYW5kIHBhaXJzIGNhcHMsIHNvIHRoYXQKKyMJICBlbnRyaWVzIHdoaWNoIHVzZSBpdCB3aWxsIGluaGVyaXQgdGhlbSBhdXRvbWF0aWNhbGx5LgorIwkqIFRoZSBsaW51eCBlbnRyeSBjYW4gbm93IHJlY29nbml6ZSB0aGUgY2VudGVyIChrZXlwYWQgNSkga2V5LgorIwkqIFJlbW92ZWQgc29tZSBqdW5rIHRoYXQgZm91bmQgaXRzIHdheSBpbnRvIExpbnV4IGFjc2MuCisjCisjIDkuOC4wIChGcmkgSnVsICA3IDA0OjQ2OjU3IEVEVCAxOTk1KToKKyMJKiBBZGQgNTAlIGN1dCBtYXJrIGFzIGEgZGVzcGVyYXRlIGhhY2sgdG8gcmVkdWNlIHRpYydzIGNvcmUgdXNhZ2UuCisjCSogeHRlcm0gZG9lc24ndCB0cnkgdG8gdXNlIGFwcGxpY2F0aW9uIGtleXBhZCBtb2RlIGFueSBtb3JlLgorIwkqIEZyZWV6ZSBmb3IgbmN1cnNlcy0xLjkuMyByZWxlYXNlLgorIyA5LjguMSAoVGh1IEp1bCAxOSAxNzowMjoxMiBFRFQgMTk5NSk6CisjCSogQWRkZWQgY29ycmVjdGVkIHN1biBlbnRyeSBmcm9tIHZlbmRvci4KKyMJKiBBZGRlZCBjc3IgY2FwYWJpbGl0eSB0byBsaW51eCBlbnRyeS4KKyMJKiBQZXRlciBXZW1tIHNheXMgdGhlIGF0Mzg2IGhwYSBzaG91bGQgYmUgXEVbJWklcDElZEcsIG5vdCBcRVslcDElZEcuCisjCSogQWRkZWQgdnQxMDItbnNnciB0byBjb3BlIHdpdGggc3R1cGlkIElCTSBQQyBgVlQxMDAnIGVtdWxhdG9ycy4KKyMJKiBTb21lIGNvbW1lbnRlZC1vdXQgY2FwcyBpbiBsb25nIGVudHJpZXMgY29tZSBiYWNrIGluLCBteSBjb2RlCisjCSAgZm9yIGNvbXB1dGluZyBzdHJpbmctdGFibGUgbGVuZ3RocyBoYWQgYSBidWcgaW4gaXQuCisjCSogcGNhbnNpIHNlcmllcyBtb2RpZmllZCB0byBmaXQgY29tbS1wcm9ncmFtIHJlYWxpdHkgYmV0dGVyLgorIyA5LjguMiAoU2F0IFNlcCAgOSAyMzozNTowMCBFRFQgMTk5NSk6CisjCSogQlNEL09TIGFjdHVhbGx5IHNoaXBzIHRoZSBpYm1wYzMgYm9sZCBlbnRyeSBhcyBpdHMgY29uc29sZS4KKyMJKiBDb3JyZWN0IHNvbWUgYmFkIGFsaWFzZXMgaW4gdGhlIHBjYW5zaSBzZXJpZXMKKyMJKiBBZGRlZCBlbnRyeSBmb3IgUU5YIGNvbnNvbGUuCisjCSogQ2xlYW4gdXAgZHVwbGljYXRlIGxvbmcgbmFtZXMgZm9yIHVzZSB3aXRoIDQuNCBsaWJyYXJ5LgorIwkqIENoYW5nZSB2dDEwMCBzdGFuZG91dCB0byBiZSBub3JtYWwgcmV2ZXJzZSB2aWRlLCBub3QgYnJpZ2h0IHJldmVyc2U7CisjCSAgdGhpcyBtYWtlcyB0aGUgRW1hY3Mgc3RhdHVzIGxpbmUgbG9vayBiZXR0ZXIuCisjIDkuOC4zIChTdW4gU2VwIDEwIDEzOjA3OjM0IEVEVCAxOTk1KToKKyMJKiBBZGRlZCBBZGFtIFRob21wc29uJ3MgVlQzMjAgZW50cmllcywgYWxzbyBoaXMgZHR4LXNhcyBhbmQgejM0MC4KKyMJKiBNaW5vciBzdXJnZXJ5LCBtb3N0bHkgb24gbmFtZSBzdHJpbmdzLCB0byBzaG9ydGVuIHRlcm1jYXAgdmVyc2lvbi4KKyMKKyMgOS45LjAgKFNhdCBTZXAgMTYgMjM6MDM6NDggRURUIDE5OTUpOgorIwkqIEFkZGVkIGRlYy12dDEwMCBmb3IgdXNlIHdpdGggdGhlIEVXQU4gZW11bGF0b3IuCisjCSogQWRkZWQga21vdXMgdG8geHRlcm0gZm9yIHVzZSB3aXRoIHh0ZXJtJ3MgbW91c2UtdHJhY2tpbmcgZmFjaWxpdHkuCisjCSogRnJlZXplIGZvciAxLjkuNSBhbHBoYSByZWxlYXNlLgorIyA5LjkuMSAoV2VkIFNlcCAyMCAxMzo0NjowOSBFRFQgMTk5NSk6CisjCSogQ2hhbmdlZCB4dGVybSBsaW5lcyB0byAyNCwgdGhlIFgxMVI2IGRlZmF1bHQuCisjIDkuOS4yIChTYXQgU2VwIDIzIDIxOjI5OjIxIEVEVCAxOTk1KToKKyMJKiBBZGRlZCA3IG5ld2x5IGRpc2NvdmVyZWQsIHVuZG9jdW1lbnRlZCBhY3NjIGNoYXJhY3RlcnMgdG8gbGludXgKKyMJICBlbnRyeSAodGhlIHByeXp7fH0gY2hhcmFjdGVycykuCisjCSogbmN1cnNlcyBubyBsb25nZXIgc3RlYWxzIEFfUFJPVEVDVC4gIFNpbXBsaWZ5IGxpbnV4IHNnciBhY2NvcmRpbmdseS4KKyMJKiBDb3JyZWN0IHR3byB0eXBvcyBpbiB0aGUgeHRlcm0gZW50cmllcyBpbnRyb2R1Y2VkIGluIDkuOS4xLgorIwkqIEkgZmluYWxseSBmaWd1cmVkIG91dCBob3cgdG8gdHJhbnNsYXRlIGtvIGNhcGFiaWxpdGllcy4gIERvbmUuCisjCSogQWRkZWQgdHZpOTIxIGVudHJpZXMgZnJvbSBUaW0gVGhlaXNlbi4KKyMJKiBDbGVhbnVwOiBkZ2QyMTEgLT4gZGcyMTEsIGFkbTQyLW5sIC0+IGFkbTQyLW5zbC4KKyMJKiBSZW1vdmVkIG15c3RlcnkgdGVjIGVudHJ5LCBpdCB3YXMgbmVpdGhlciBpbnRlcmVzdGluZyBub3IgdXNlZnVsLgorIwkqIHNob3J0ZW5lZCBhbHRvczMsIHF2dDIwMywgdHZpOTEwKywgdHZpOTJELCB0dmk5MjEtZywgdHZpOTU1LCB2aTIwMC1mLAorIwkgIHZpMzAwLXNzLCBhdHQ1MDUtMjQsIGNvbnRlbDMwMSwgZG0zMDQ1LCBmMjAwdmksIHBlNzAwMGMsIHZjMzAzYSwKKyMJICB0cnMyMDAsIHdpbmQyNiwgd2luZDQwLCB3aW5kNTAsIGNkYzQ1NnRzdCwgZGt1NzAwMywgZjExMCwgZGcyMTEsCisjCSAgYnkgbWFraW5nIHRoZW0gcmVsYXRpdmUgdG8gdXNlIGNhcGFiaWxpdGllcworIwkqIEFkZGVkIGN1ZjE9XkwgdG8gdHZpOTI1IGZyb20gZGVsZXRlZCB2YXJpYW50IHR2aTkyNWEuCisjCSogZml4ZWQgY3VwIGluIGFkbTIyIGVudHJ5IGFuZCBwYXJhbWV0cml6ZWQgc3RyaW5ncyBpbiB2dDMyMC1rMy4KKyMJKiBhZGRlZCBpdCM4IHRvIGVudHJpZXMgdGhhdCB1c2VkIHRvIGhhdmUgOnB0OiAtLSB0dmk5MTIsIHZpMjAwLAorIwkgIGFtcGV4ODAsCisjCSogVHJhbnNsYXRlIGFsbCBob21lPVxFWztIIGNhcGFiaWxpdGllcyB0byBob21lPVxFW0gsIHRoZXkncmUKKyMJICBlcXVpdmFsZW50LgorIwkqIFRyYW5zbGF0ZSBcRVswbSAtPiBcRVttIGluIFtyc11tc28sIFtyc11tdWwsIGFuZCBpbml0IHN0cmluZ3Mgb2YKKyMJICB2dDEwMCBhbmQgQU5TSS1saWtlIHRlcm1pbmFscy4KKyMgOS45LjMgKFR1ZSBTZXAgMjYgMjA6MTE6MTUgRURUIDE5OTUpOgorIwkqIEFkZGVkIGl0IzggYW5kIGh0PVx0IHRvICphbGwqIGVudHJpZXMgd2l0aCA6cHQ6OyB0aGUgbmN1cnNlcyB0aWMKKyMJICBkb2VzIHRoaXMgbm93LCB0b28uCisjCSogZnZpZXdwb2ludCBpcyBnb25lLCBpdCBkdXBsaWNhdGVkIHNjcmV3cG9pbnQuCisjCSogQWRkZWQgaHAyNjI3LCBncmFwaG9zLCBncmFwaG9zLTMwLCBocGV4LCBpYm1lZ2EsIGlibTg1MTQsIGlibTg1MTQtYywKKyMJICBpYm12Z2EsIGlibXZnYS1jLCBtaW5peCwgbW0zNDAsIG10NDUyMC1ydiwgc2NyZWVuMiwgc2NyZWVuMywKKyMJICB2ZXJzYXRlcm0sIHZpNTAwLCB2c2MsIHZ0MTMxLCB2dDM0MCwgdnQ0MDAgZW50cmllcyBmcm9tIFVXLgorIwkgIFRoZSBVVyB2aTUwIHJlcGxhY2VzIHRoZSBvbGQgb25lLCB3aGljaCBiZWNvbWVzIHZpNTBhZG0sCisjCSogTm8gbW9yZSBlbWJlZGRlZCBjb21tYXMgaW4gbmFtZSBmaWVsZHMuCisjCisjIDkuMTAuMCAoV2VkIE9jdCAgNCAxNTozOTozNyBFRFQgMTk5NSk6CisjCSogWEVOSVggZm9ybXMgY2hhcmFjdGVycyBpbiBmb3MsIHRyczE2LCBzY29hbnNpIGJlY29tZSBhY3NjIHN0cmluZ3MsCisjCSogSW50cm9kdWNlZCBrbG9uZSsqIGVudHJpZXMgZm9yIGRlc2NyaWJpbmcgSW50ZWwtY29uc29sZSBiZWhhdmlvci4KKyMJKiBMaW51eCBrYnMgaXMgZGVmYXVsdC1tYXBwZWQgdG8gZGVsZXRlIGZvciBzb21lIGJyYWluLWRlYWQgcmVhc29uLgorIwkqIC1uc2wgLT4gLW5zLiAgVGhlIC1wcCBzeW50YXggaXMgb2Jzb2xldGUuCisjCSogRWxpbWluYXRlIFtBLVpdKiBwcmltYXJpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIFNWcjQgdGVybWluZm8gZG9jcy4KKyMJKiBNYWtlIHh0ZXJtIGVudHJ5IGRvIGFwcGxpY2F0aW9uLWtleXBhZCBtb2RlIGFnYWluLiAgSSBnb3QgY29tcGxhaW50cworIwkgIHRoYXQgaXQgd2FzIG1lc3NpbmcgdXAgc29tZW9uZSdzIDMyNzAgZW11bGF0b3IuCisjCSogQWRkZWQgc29tZSBsb25nbmFtZSBmaWVsZHMgaW4gb3JkZXIgdG8gYXZvaWQgd2FybmluZyBtZXNzYWdlcyBmcm9tCisjCSAgb2xkZXIgdGljIGltcGxlbWVudGF0aW9ucy4KKyMJKiBBY2NvcmRpbmcgdG8gY3Rsc2Vxcy5tcywgeHRlcm0gaGFzIGEgZnVsbCB2dDEwMCBncmFwaGljcyBzZXQuICBVc2UKKyMJICBpdCEgKFRoaXMgZ2l2ZXMgdXMgcGksIGdyZWF0ZXIgdGhhbiwgbGVzcyB0aGFuLCBhbmQgYSBmZXcgbW9yZS4pCisjCSogRnJlZXplIGZvciBuY3Vyc2VzLTEuOS42IHJlbGVhc2UuCisjIDkuMTAuMSAoU2F0IE9jdCAyMSAyMjoxODowOSBFRFQgMTk5NSk6CisjCSogQWRkIHhvbiB0byBhIG51bWJlciBvZiBjb25zb2xlIGVudHJpZXMsIHRoZXkncmUgbWVtb3J5LW1hcHBlZCBhbmQKKyMJICBkb24ndCBuZWVkIHBhZGRpbmcuCisjCSogQ29ycmVjdCB0aGUgdXNlIGRlcGVuZGVuY2llcyBpbiB0aGUgYW5zaSBzZXJpZXMuCisjCSogSGFuZC10cmFuc2xhdGUgbW9yZSBYRU5JWCBjYXBhYmlsaXRpZXMuCisjCSogQWRkZWQgaHB0ZXJtIGVudHJ5IGZvciBIUCdzIFggdGVybWluYWwgZW11bGF0b3IuCisjCSogQWRkZWQgYWl4dGVybSBlbnRyaWVzLgorIwkqIFNob3J0ZW5lZCBmb3VyIG5hbWVzIHNvIGV2ZXJ5dGhpbmcgZml0cyBpbiAxNCBjaGFycy4KKyMKKyMgOS4xMS4wIChUaHUgTm92ICAyIDE3OjI5OjM1IEVTVCAxOTk1KToKKyMJKiBBZGRlZCBpYmNzMiBlbnRyeSBhbmQgaW5mbyBvbiBpQkNTMiBzdGFuZGFyZC4KKyMJKiBDb3JyZWN0ZWQgaHBhL3ZwYSBpbiBsaW51eCBlbnRyeS4gIFRoZXkgc3RpbGwgZmFpbCB0aGUgd29ybSB0ZXN0LgorIwkqIFdlIGNhbiBoYW5kbGUgdGhlIEhQIG1lbWwvbWVtdSBjYXBhYmlsaXR5IG5vdy4KKyMJKiBBZGRlZCBzbWFjcyB0byBrbG9uZSBlbnRyaWVzLCBqdXN0IGFzIGRvY3VtZW50YXRpb24uCisjCSogQ2FycmVjdGVkIGFuc2kuc3lzIGFuZCBjaXQtNTAwIGVudHJpZXMuCisjCSogQWRkZWQgejM5LCB2dDMyMC1rMzExLCB2MjIwYywgYW5kIGF2YXRhciBlbnRyaWVzLgorIwkqIE1ha2UgcGNhbnNpIHVzZSB0aGUgYW5zaS5zeXMgaW52aXMgY2FwYWJpbGl0eS4KKyMJKiBBZGRlZCBESVAgc3dpdGNoIGRlc2NyaXB0aW9ucyBmb3IgdnQxMDAsIGFkbTMxLCB0dmk5MTAsIHR2aTkyMGMsCisjCSAgdHZpOTI1LCB0dmk5NTAsIGR0ODAsIG5jcjc5MDBpLCBoMTkuCisjCSogWDMuNjQgaGFzIGJlZW4gd2l0aGRyYXduLCBjaGFuZ2Ugc29tZSByZWZlcmVuY2VzLgorIwkqIFJlbW92ZWQgZnVuY3Rpb24ga2V5cyBmcm9tIGFuc2ktbSBlbnRyeS4KKyMJKiBDb3JyZWN0ZWQgYW5zaS5zeXMgZW50cnkuCisjCSogRnJlZXplIGZvciBuY3Vyc2VzLTEuOS43IHJlbGVhc2UuCisjIDkuMTEuMSAoVHVlIE5vdiAgNiAxODoxODozOCBFU1QgMTk5NSk6CisjCSogQWRkZWQgcm1hbS9zbWFtIGNhcGFiaWxpdGllcyB0byBtYW55IGVudHJpZXMgYmFzZWQgb24gaW5pdCBzdHJpbmdzLgorIwkqIEFkZGVkIGNvcnJlY3QgaHBhL3ZwYSB0byBsaW51eC4KKyMJKiBSZWR1Y2VkIHNldmVyYWwgZW50cmllcyByZWxhdGl2ZSB0byB2dDUyLgorIyA5LjExLjIgKFR1ZSBOb3YgIDcgMDA6MjE6MDYgRVNUIDE5OTUpOgorIwkqIEV4aWxlZCBzb21lIHV0dGVybHkgdW5pZGVudGlmaWFibGUgY3VzdG9tIGFuZCBob21lYnJldyB0eXBlcyB0byB0aGUKKyMJICBVRk8gZmlsZTsgYWxzbywgb2Jzb2xldGUgc21hbGwtc2NyZWVuIGhhcmR3YXJlOyBhbHNvLCBlbnRyaWVzIHdoaWNoCisjCSAgbG9vayBmbGF0LW91dCBpbmNvcnJlY3QsIGdhcmJsZWQsIG9yIHJlZHVuZGFudC4gIFRoZXNlIGluY2x1ZGUgdGhlCisjCSAgZm9sbG93aW5nIGVudHJpZXM6IGNhcmxvY2ssIGNkYzQ1NnRzdCwgbWljcm9raXQsIHFkc3MsIHJhbXRlaywgdGVjLAorIwkgIHRlYzQwMCwgdGVjNTAwLCB1YmVsbCwgd2luZCwgd2luZDE2LCB3aW5kNDAsIHdpbmQ1MCwgcGxhc21hLCBhZ2lsZSwKKyMJICBhcHBsZSwgYmNoLCBkYWxlYmxpdCwgbnVjdGVybSwgdHR5d2lsbGlhbXMsIG51dGVybWluYWwsIG51MjQsIGJudSwKKyMJICBmbnUsIG51bml4LTMwLCBudW5peC02MSwgZXhpZHksIGV4MzAwMCwgc2V4aWR5LCBwYzUyLCBzYW55bzU1LAorIwkgIHl0ZXJtMTAsIHl0ZXJtMTEsIHl0ZXJtMTBuYXQsIGFlZCwgYWVkLXVjYiwgY29tcHVjb2xvciwgY29tcHVjb2xvcjIsCisjCSAgdmljMjAsIGRnMSwgYWN0NXMsIG5ldHgsIHNtYXJ0dmlkLCBzbWFydGVybSwgc29sLCBzb2wyLCBkdDIwMCwKKyMJICB0cnM4MCwgdHJzMTAwLCB0cnMyMDAsIHRyczYwMCwgeGl0ZXgsIHJzdmlkdHgsIHZpZCwgYXR0MjMwMC14NDAsCisjCSAgYXR0MjM1MC14NDAsIGF0dDQ0MTAtbmZrLCBhdHQ1NDEwLW5zLCBvdHR5NTQxMCwgYXR0NTQyNS1ubC13LAorIwkgIHR0eTU0MjUtZmssIHR0eTU0MjUtdy1maywgY2l0YSwgYzEwOC1uYSwgYzEwOC1ydi1uYSwgYzEwMC1ydi1uYSwKKyMJICBjMTA4LW5hLWFjcywgYzEwOC1ydi1uYS1hY3MsIGltczk1MC1ucywgaW5mb3RvbktBUywgbmNyNzkwMGktbmEsCisjCSAgcmVnZW50NjBuYSwgc2NhbnNldC1uLCB0dmk5MjEtZywgdHZpOTI1biwgdHZpOTI1dmJuLCB0dmk5MjV2YiwKKyMJICB2YzQwNC1uYSwgdmM0MDQtcy1uYSwgdnQ0MjBuYW0sIHZ0NDIwZi1uYW0sIHZ0NDIwcGMtbmFtLCB2dDUxMG5hbSwKKyMJICB2dDUxMHBjLW5hbSwgdnQ1MjBuYW0sIHZ0NTI1bmFtLCB4dGVybTI1LCB4dGVybTUwLCB4dGVybTY1LCB4dGVybXMuCisjCSogQ29ycmVjdGVkIHBjdnQyNWggYXMgc3VnZ2VzdGVkIGJ5IEJyaWFuIEMuIEdyYXlzb24KKyMJICA8YmdyYXlzb25AcGluZS5lY2UudXRleGFzLmVkdT4uCisjIDkuMTEuMyAoVGh1IE5vdiAgOSAxMjoxNDo0MCBFU1QgMTk5NSk6CisjCSogQWRkZWQga3NwZD1cRVtQLCBrY2J0PVxFW1osIHRvIGxpbnV4IGVudHJ5LCBjaGFuZ2VkIGticyBiYWNrIHRvIF5ILgorIwkqIEFkZGVkIGtlbnQ9XEVPTSB0byB4dGVybSBlbnRyeS4KKyMKKyMgOS4xMS40IChGcmkgTm92IDEwIDA4OjMxOjM1IEVTVCAxOTk1KToKKyMJKiBDb3JyZWN0ZWQgZ2lnaSBlbnRyeS4KKyMJKiBSZXN0b3JlZCBjdWYvY3VkMSB0byB4dGVybSwgdGhlaXIgYXBwYXJlbnQgYnVnZ2luZXNzIHdhcyBkdWUgdG8KKyMJICBiYWQgaHBhL3ZwYSBjYXBhYmlsaXRpZXMuCisjCSogQ29ycmVjdGVkIGZsYXNoIHN0cmluZ3MgdG8gaGF2ZSBhIHVuaWZvcm0gZGVsYXkgb2YgLjIgc2VjLiAgTm8KKyMJICBtb3JlIHNwZWVkLWRlcGVuZGVudCBOVUwtcGFkZGluZyEKKyMJKiB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMgaW4gY29tbWVudHMgYnJhY2tldGVkIHdpdGggPD4uCisjIDkuMTEuNSAoRnJpIE5vdiAxMCAxNTozNTowMiBFU1QgMTk5NSk6CisjCSogUmVwbGFjZWQgcGN2dCB3aXRoIHRoZSAzLjMxIHBjdnQgZW50cmllcy4KKyMJKiBGcmVlemUgZm9yIDEuOS43YS4KKyMgOS4xMS42IChNb24gTm92IDEzIDEwOjIwOjI0IEVTVCAxOTk1KToKKyMJKiBBZGRlZCBlbXUgZW50cnkgZnJvbSB0aGUgWDExUjYgY29udHJpYiB0YXBlIHNvdXJjZXMuCisjCisjIDkuMTIuMCAoV2VkIE5vdiAyOSAwNDoyMjoyNSBFU1QgMTk5NSk6CisjCSogSW1wcm92ZWQgaXJpcy1hbnNpIGFuZCBzdW4gZW50cmllcy4KKyMJKiBNb3JlIGZsYXNoIHN0cmluZyBpbXByb3ZlbWVudHMuCisjCSogQ29ycmVjdGVkIHd5MTYwICYgd3kxNjAgYXMgc3VnZ2VzdGVkIGJ5IFJvYmVydCBEdW5uCisjCSogQWRkZWQgZGltIHRvIGF0Mzg2LgorIwkqIFJlY29uY2lsZWQgcGMzIGFuZCBpYm1wYzMgd2l0aCB0aGUgQlNESSB0ZXJtY2FwIGZpbGUuICBLZWl0aCBzYXlzCisjCSAgaGUncyByZWFkeSB0byBzdGFydCB1c2luZyB0aGUgdGVybWNhcCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9uZS4KKyMJKiBBZGRlZCB2dDEwMi13LCB2dDIyMC13LCB4dGVybS1ib2xkLCB3eXNlLXZwLCB3eTc1YXAsIGF0dDQ0MjRtLAorIwkgIGxuMDMsIGxubzMtdywgaDE5LWcsIHoyOWEqLCBxZHNzLiAgTWFkZSB2dDIwMCBhbiBhbGlhcyBvZiB2dDIyMC4KKyMJKiBJbXByb3ZlZCBocHRlcm0sIGFwb2xsbyBjb25zb2xlcywgZm9zLCBxdnQxMDEsIHR2aTkyNC4gdHZpOTI1LAorIwkgIGF0dDYxMCwgYXR0NjIwLCBhdHQ2MzAsCisjCSogQ2hhbmdlZCBoYXplbHRpbmUgbmFtZSBwcmVmaXggZnJvbSBoIHRvIGh6LgorIwkqIFNlbnQgdDUwMCB0byB0aGUgVUZJIGZpbGUuCisjCSogSSB0aGluayB3ZSd2ZSBzdWNrZWQgYWxsIHRoZSBqdWljZSBvdXQgb2YgQlNESSdzIHRlcm1jYXAgZmlsZSBub3cuCisjCSogRnJlZXplIGZvciBuY3Vyc2VzIDEuOS44IHJlbGVhc2UKKyMgOS4xMi4xIChUaHUgTm92IDMwIDAzOjE0OjA2IEVTVCAxOTk1KQorIwkqIFVuZnJlZXplLCBsaW51eCBrYnMgbmVlZGVkIHRvIGJlIGZpeGVkLgorIwkqIFRpbSBUaGVpc2VuIHBpbm5lZCBkb3duIGEgYnVnIGluIHRoZSBETUQgZmlybXdhcmUuCisjIDkuMTIuMiAoVGh1IE5vdiAzMCAxOTowODo1NSBFU1QgMTk5NSk6CisjCSogRml4ZXMgdG8gYW5zaSBhbmQga2xvbmUgY2FwYWJpbGl0aWVzICh0aGFuayB5b3UsIEFhcm9uIFVja28pLgorIwkgIChUaGUgYnJva2VuIG9uZXMgaGFkIGJlZW4gc2hhZG93ZWQgYnkgc2dyLikKKyMgOS4xMi4zIChUaHUgRGVjICA3IDE3OjQ3OjIyIEVTVCAxOTk1KToKKyMJKiBBZGRlZCBkb2N1bWVudGF0aW9uIG9uIEVDTUEtNDggc3RhbmRhcmQuCisjCSogTmV3IEFtaWdhIGVudHJ5LgorIyA5LjEyLjQgKFRodSBEZWMgMTQgMDQ6MTY6MzkgRVNUIDE5OTUpOgorIwkqIE1vcmUgRUNNQS00OCBzdHVmZgorIwkqIENvcnJlY3RlZCB0eXBvIGluIG1pbml4IGVudHJ5LCBhZGRlZCBwYy1taW5peC4KKyMJKiBDb3JyZWN0ZWQga2hvbWUva2VuZCBpbiB4dGVybSAodGhhbmsgeW91IGFnYWluLCBBYXJvbiBVY2tvKS4KKyMJKiBBZGRlZCByeHZ0IGVudHJ5LgorIwkqIEFkZGVkIDEuMy54IGNvbG9yLWNoYW5nZSBjYXBhYmlsaXRpZXMgdG8gbGludXggZW50cnkuCisjIDkuMTIuNSAoVHVlIERlYyAxOSAwMDoyMjoxMCBFU1QgMTk5NSk6CisjCSogQ29ycmVjdGVkIHJ4dnQgZW50cnkga2hvbWUva2VuZC4KKyMJKiBDb3JyZWN0ZWQgbGludXggY29sb3IgY2hhbmdlIGNhcGFiaWxpdGllcy4KKyMJKiBOZVhUIGVudHJpZXMgZnJvbSBEYXZlIFdldHplbC4KKyMJKiBDbGVhbmVkIHVwIGlmIGFuZCByZiBmaWxlIG5hbWVzIChhbGwgaW4gL3Vzci9zaGFyZSBub3cpLgorIwkqIENoYW5nZWQgbGludXggb3AgY2FwYWJpbGl0eSB0byBhdm9pZCBzY3Jld2luZyB1cCBhIGJhY2tncm91bmQgY29sb3IKKyMJICBwYWlyIHNldCBieSBzZXR0ZXJtLgorIyA5LjEyLjYgKFdlZCBGZWIgIDcgMTY6MTQ6MzUgRVNUIDE5OTYpOgorIwkqIEFkZGVkIHh0ZXJtLXN1bi4KKyMgOS4xMi43IChGcmkgRmViICA5IDEzOjI3OjM1IEVTVCAxOTk2KToKKyMJKiBBZGRlZCB2aXNhNTAuCisjCisjIDkuMTMuMCAoU3VuIE1hciAxMCAwMDoxMzowOCBFU1QgMTk5Nik6CisjCSogQW5vdGhlciBzd2VlcCB0aHJvdWdoIHRoZSBTaHVmb3JkIGFyY2hpdmUgbG9va2luZyBmb3IgbmV3IGluZm8uCisjCSogQWRkZWQgZGcxMDAgYWxpYXMgdG8gZGc2MDUzIGJhc2VkIG9uIGEgY29tcC50ZXJtaW5hbHMgcG9zdGluZy4KKyMgCSogQWRkZWQgc3Q1MiBmcm9tIFBlciBQZXJzc29uLgorIwkqIEFkZGVkIGV0ZXJtIGZyb20gdGhlIEdOVSBFbWFjcyAxOS4zMCBkaXN0cmlidXRpb24uCisjCSogRnJlZXplIGZvciAxLjkuOS4KKyMgOS4xMy4xIChGcmkgTWFyIDI5IDE0OjA2OjQ2IEVTVCAxOTk2KToKKyMJKiBGcmVlQlNEIGNvbnNvbGUgZW50cmllcyBmcm9tIEFuZHJldyBDaGVybm92LgorIwkqIFJlbW92ZWQgZHVwbGljYXRlIEF0YXJpIHN0NTIgbmFtZS4KKyMgOS4xMy4yIChUdWUgTWF5ICA3IDE2OjEwOjA2IEVEVCAxOTk2KQorIwkqIHh0ZXJtIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBBQ1NfQkxPQ0suCisjCSogQ2hhbmdlIGtsb25lK2NvbG9yIHNldGYvc2V0YiB0byBzaW1wbGVyIGZvcm1zIHRoYXQgY2FuIGJlCisjCSAgdHJhbnNsYXRlZCBpbnRvIHRlcm1jYXAuCisjCSogQWRkZWQgeHRlcm0xLgorIwkqIFJlbW92ZWQgbWVjaGFuaWNhbGx5LWdlbmVyYXRlZCBqdW5rIGNhcGFiaWxpdGllcyBmcm9tIGNvbnMqIGVudHJpZXMuCisjCSogQWRkZWQgY29sb3Igc3VwcG9ydCB0byBic2Rvcy4KKyMgOS4xMy4zIChUaHUgTWF5ICA5IDEwOjM1OjUxIEVEVCAxOTk2KToKKyMJKiBBZGRlZCBXeXNlIDUyMCBlbnRyaWVzIGZyb20gV20uIFJhbmRvbHBoIEZyYW5rbGluIDx3cmZAZWNzZS5ycGkuZWR1Pi4KKyMJKiBDcmVhdGVkIGVjbWErY29sb3IsIGxpbnV4IGNhbiB1c2UgaXQuICBBbHNvIGFkZGVkIGVjaCB0byBsaW51eC4KKyMJKiBUZWFjaCB4dGVybSBhYm91dCBtb3JlIGtleXMuIEFkZCBUaG9tYXMgRGlja2V5J3MgMy4xLjJFIHVwZGF0ZXMuCisjCSogQWRkIGRlc2NyaXB0aW9ucyB0byBGcmVlQlNEIGNvbnNvbGUgZW50cmllcy4gIEFsc28gc2hvcnRlbgorIwkgIHNvbWUgYWxpYXNlcyB0byA8PSAxNCBjaGFycyBmb3IgcG9ydGFiaWxpdHkuCisjCSogQWRkZWQgeDY4ayBjb25zb2xlCisjCSogQWRkZWQgT1RicyB0byBzZXZlcmFsIFZULXNlcmllcyBlbnRyaWVzLgorIyA5LjEzLjQgKFdlZCBNYXkgMjIgMTA6NTQ6MDkgRURUIDE5OTYpOgorIwkqIHNjcmVlbiBlbnRyeSB1cGRhdGUgZm9yIDMuNy4xIGZyb20gTWljaGFlbCBBbGFuIERvcm1hbi4KKyMgOS4xMy41IChXZWQgSnVuICA1IDExOjIyOjQxIEVEVCAxOTk2KToKKyMJKiBrdGVybSBjb3JyZWN0aW9uIGR1ZSB0byBLZW5qaSBSaWtpdGFrZS4KKyMJKiBBQ1MgY29ycmVjdGlvbiBpbiB2dDMyMC1rbGwgZHVlIHRvIFBoaWxsaXBwZSBEZSBNdXl0ZXIuCisjIDkuMTMuNiAoU3VuIEp1biAxNiAxNTowMTowNyBFRFQgMTk5Nik6CisjCSogU3VuIGNvbnNvbGUgZW50cnkgY29ycmVjdGlvbiBmcm9tIEouVC4gQ29ua2xpbi4KKyMJKiBDaGFuZ2VkIGFsbCBERUMgVlQzMDAgYW5kIHVwIHRlcm1pbmFscyB0byB1c2UgVlQzMDAgdGFiIHNldAorIyA5LjEzLjcgKE1vbiBKdWwgIDggMjA6MTQ6MzIgRURUIDE5OTYpOgorIwkqIEFkZGVkIHNtdWwgdG8gbGludXggZW50cnkgKHdlIG5ldmVyIG5vdGljZWQgaXQgd2FzIG1pc3NpbmcKKyMJICBiZWNhdXNlIG9mIHNnciEpLgorIwkqIEFkZGVkIHJtbG4gdG8gaHArbGFiZWxzIChkZWR1Y2VkIGZyb20gb3RoZXIgSFAgZW50cmllcykuCisjCSogQWRkZWQgdnQxMDAgYWNzYyBjYXBhYmlsaXR5IHRvIHZ0MjIwLCB2dDM0MCwgdnQ0MDAsIGQ4MDAsIGR0ODAtc2FzLAorIwkgIHBybzM1MCwgYXR0NzMwMCwgNTQyMF8yLCBhdHQ0NDE4LCBhdHQ0NDI0LCBhdHQ0NDI2LCBhdHQ1MDUsIHZ0MzIwLWszLgorIwkqIENvcnJlY3RlZCB2dDIyMCBhY3NjLgorIwkqIFRoZSBrbG9uZStzZ3IgYW5kIGtsb25lK3Nnci1kdW1iIGVudHJpZXMgbm93IHVzZSBrbG9uZSthY3M7CisjCSAgdGhpcyBjb3JyZXNwb25kcyB0byByZWFsaXR5IGFuZCBoZWxwcyBwcmV2ZW50IHNvbWUgdGljIHdhcm5pbmdzLgorIwkqIEFkZGVkIHNncjAgdG8gYzEwMSwgcGNpeCwgdnQxMDAtbmF2LCBzY3JlZW4yLCBvbGRzdW4sIG5leHQsIGFsdG9zMiwKKyMJICBocGdlbmVyaWMsIGhwYW5zaSwgaHBzdWIsIGhwMjM2LCBocDcwMC13eSwgYm9iY2F0LCBka3U3MDAzLCBhZG0xMSwKKyMJICBhZG0xMiwgYWRtMjAsIGFkbTIxLCBhZG0yMiwgYWRtMzEsIGFkbTM2LCBhZG00MiwgcHQxMDAsIHB0MjAwLAorIwkgIHF2dDEwMSwgdHZpOTEwLCB0dmk5MjEsIHR2aTkyQiwgdHZpOTI1LCB0dmk5NTAsIHR2aTk3MCwgd3kzMC1tYywKKyMJICB3eTUwLW1jLCB3eTEwMCwgd3lzZS12cCwgYW1wZXgyMzIsIHJlZ2VudDEwMCwgdmlld3BvaW50LCB2cDkwLAorIwkgIGFkZHM5ODAsIGNpdDEwMSwgY2l0NTAwLCBjb250ZWwzMDAsIGNzMTAsIGRtODAsIGZhbGNvLCBmYWxjby1wLAorIwkgIGYxNzIwYSwgZ28xNDAsIHNiMSwgc3VwZXJiZWVpYywgbWljcm9iLCBpYm04NTEyLCBrdDcsIGVyZ280MDAwLAorIwkgIG93bCwgdXRzMzAsIGRtdGVybSwgZHQxMDAsIGR0MTAwLCBkdDExMCwgYXBwbGVJSSwgYXBwbGUtdmlkZXgsCisjCSAgbGlzYSwgdHJzSUksIGF0YXJpLCBzdDUyLCBwYy1jb2hlcmVudCwgYmFzaXMsIG0yLW1hbiwgYmcyLjAsIGJnMS4yNSwKKyMJICBkdzMsIGxuMDMsIGltcy1hbnNpLCBncmFwaG9zLCB0MTYsIHplbjMwLCB4dGFsaywgc2ltdGVybSwgZDgwMCwKKyMJICBpZm1yLCB2MzIyMCwgd3kxMDBxLCB0YW5kZW02NTMsIGlibWFlZC4KKyMJKiBBZGRlZCBEV0sgdGVybWluYWwgZGVzY3JpcHRpb24uCisjIDkuMTMuOCAoV2VkIEp1bCAxMCAxMTo0NToyMSBFRFQgMTk5Nik6CisjCSogTWFueSBlbnRyaWVzIG5vdyBoYXZlIGhpZ2hsaWdodHMgaW5oZXJpdGVkIGZyb20gYWRtK3Nnci4KKyMJKiB4dGVybSBlbnRyeSBub3cgY29ycmVzcG9uZHMgdG8gWEZyZWU4NiAzLjEuMkUsIHdpdGggY29sb3IuCisjCSogeHRpdGxlIGFuZCB4dGl0bGUtdHdtIGVuYWJsZSBhY2Nlc3MgdG8gdGhlIFggc3RhdHVzIGxpbmUuCisjCSogQWRkZWQgbGludXgtMS4zLjYgY29sb3IgcGFsZXR0ZSBjYXBzIGluIGNvbnZlbnRpb25hbCBmb3JtYXQuCisjCSogQWRkZWQgYWRtMTE3OCB0ZXJtaW5hbC4KKyMJKiBNb3ZlIGZvcyBhbmQgYXBvbGxvIHRlcm1pbmFscyB0byBvYnNvbGV0ZSBjYXRlZ29yeS4KKyMJKiBBaGEhIFRoZSBCUkwgdGVybWluYWxzIGZpbGUgdG9sZCB1cyB3aGF0IHRoZSBJcmlzIGV4dGVuc2lvbnMgbWVhbi4KKyMJKiBBZGRlZCwgZnJvbSB0aGUgQlJMIHRlcm1jYXAgZmlsZTogcnQ2MjIxLCBydDYyMjEtdywgbm9ydGhzdGFyLAorIwkgIGNvbW1vZG9yZSwgY2RjNzIxLWVzYywgZXhjZWw2Miwgb3NleGVjLiAgUmVwbGFjZWQgZnJvbSB0aGUgQlJMIGZpbGU6CisjCSAgY2l0NTAwLCBhZG0xMS4KKyMgOS4xMy45IChNb24gSnVsIDE1IDAwOjMyOjUxIEVEVCAxOTk2KToKKyMJKiBBZGRlZCwgZnJvbSB0aGUgQlJMIHRlcm1jYXAgZmlsZTogY2RjNzIxLCBjZGM3MjFsLCBjZGM3NTIsIGNkYzc1NiwKKyMJICBhd3MsIGF3c2MsIHplbnRlYzgwMDEsIG1vZGdyYXBoNDgsIHJjYSB2cDMzMDEvdnAzNTAxLCBleDE1NS4KKyMJKiBDb3JyZWN0ZWQsIGZyb20gQlJMIHRlcm1jYXAgZmlsZTogdmk1MC4KKyMJKiBCZXR0ZXIgcnh2dCBlbnRyeSAmIGNvcnJlY3RlZCB4dGVybSBlbnRyaWVzIGZyb20gVGhvbWFzIERpY2tleS4KKyMgOS4xMy4xMCAoTW9uIEp1bCAxNSAxMjoyMDoxMyBFRFQgMTk5Nik6CisjCSogQWRkZWQgZnJvbSBCUkw6IGNpdDEwMWUgJiB2YXJpYW50cywgaG1vZDEsIHZpMjAwLCBhbnNpNzcsIGF0dDU2MjAtMSwKKyMJICBhdHQ1NjIwLXMsIGF0dDU2MjAtcywgZGcyMTAsIGFhczE5MDEsIGh6MTUyMCwgaHA5ODQ1LCBvc2Jvcm5lCisjCSAgKG9sZCBvc2Jvcm5lIG1vdmVkIHRvIG9zYm9ybmUtdyksIHR2aTk3MC12YiwgdHZpOTcwLTJwLCB0dmk5MjUtaGksCisjCSAgdGVrNDEwNWJybCwgdGVrNDEwNmJybCwgdGVrNDEwN2JybCx0ZWs0MTA5YnJsLCBoYXplbCwgYWVwcm8sCisjCSAgYXBwbGU0MHAsIGFwcGxlODBwLCBhcHBsZUlJZ3MsIGFwcGxlMmUsIGFwcGxlMmUtcCwgYXBwbGUtYWUuCisjCSogUGFpcmVkLWF0dHJpYnV0ZSBmaXhlcyB0byB2YXJpb3VzIHRlcm1pbmFscy4KKyMJKiBTdW4gZW50cnkgY29ycmVjdGlvbnMgZnJvbSBBLiBMdWt5YW5vdiAmIEdlcnQtSmFuIFZvbnMuCisjCSogeHRlcm0gZW50cnkgY29ycmVjdGlvbnMgZnJvbSBUaG9tYXMgRGlja2V5LgorIyA5LjEzLjExIChUdWUgSnVsIDMwIDE2OjQyOjU4IEVEVCAxOTk2KToKKyMJKiBBZGRlZCB0OTE2IGVudHJ5LCB0cmFuc2xhdGVkIGZyb20gYSB0ZXJtY2FwIGluIFNDTydzIHN1cHBvcnQgYXJlYS4KKyMJKiBOZXcgcW54IGVudHJ5IGZyb20gTWljaGFlbCBIdW50ZXIuCisjIDkuMTMuMTIgKE1vbiBBdWcgIDUgMTQ6MzE6MTEgRURUIDE5OTYpOgorIwkqIEFkZGVkIGhwZXgyIGZyb20gVmlsbGUgU3Vsa28uCisjCSogRml4ZWQgYSBidWcgdGhhdCByYW4gdGhlIHFueCBhbmQgcGN2dFhYIHRvZ2V0aGVyLgorIyA5LjEzLjEzIChGcmkgQXVnICA5IDAxOjE2OjE3IEVEVCAxOTk2KToKKyMJKiBBZGRlZCBkdHRlcm0gZW50cnkgZnJvbSBTb2xhcmlzIENERS4KKyMgOS4xMy4xNCAoVHVlIFNlcCAxMCAxNTozMTo1NiBFRFQgMTk5Nik6CisjCSogY29ycmVjdGVkIHBhaXJzIzggdHlwbyBpbiBkdHRlcm0gZW50cnkuCisjCSogYWRkZWQgdHZpOTA2NS4KKyMgOS4xMy4xNSAoU3VuIFNlcCAxNSAwMjo0NzowNSBFRFQgMTk5Nik6CisjCSogdXBkYXRlZCB4dGVybSBlbnRyeSB0byBjb3ZlciAzLjEuMkUncyBuZXcgZmVhdHVyZXMuCisjIDkuMTMuMTYgKFR1ZSBTZXAgMjQgMTI6NDc6NDMgRURUIDE5OTYpOgorIwkqIEFkZGVkIG5ldyBtaW5peCBlbnRyeQorIwkqIFJlbW92ZWQgYWxpYXNlcyBvZiB0aGUgZm9ybSBeWzAtOV0qIGZvciBvYnNvbGV0ZSB0ZXJtaW5hbHMuCisjCSogQ29tbWVudGVkIG91dCBsaW51eC1vbGQsIG5vYm9keSdzIHVzaW5nIHByZS0xLjIga2VybmVscyBub3cuCisjIDkuMTMuMTcgKEZyaSBTZXAgMjcgMTM6MjU6MzggRURUIDE5OTYpOgorIwkqIEFkZGVkIFByaXNtIGVudHJpZXMgYW5kIGt0N2l4LgorIwkqIENhdXRpb24gbm90ZXMgYWJvdXQgRVdBTiBhbmQgdGFic2V0IGZpbGVzLgorIwkqIENoYW5nZWQgL3Vzci9saWIvdGFic2V0IC0+IC91c3Ivc2hhcmUvdGFic2V0LgorIwkqIEFkZGVkIGFjc2Mvcm1hY3Mvc21hY3MgdG8gdnQ1Mi4KKyMgOS4xMy4xOCAoTW9uIE9jdCAyOCAxMzoyNDo1OSBFU1QgMTk5Nik6CisjCSogTWVyZ2VkIGluIFRob21hcyBEaWNrZXkncyByZW9yZ2FuaXphdGlvbiBvZiB0aGUgeHRlcm0gZW50cmllczsKKyMJICBhZGRlZCB0ZWNobmljYWwgY29ycmVjdGlvbnMgdG8gYXZvaWQgd2FybmluZyBtZXNzYWdlcy4KKyMgOS4xMy4xOSAoU2F0IE5vdiAxNiAxNjowNTo0OSBFU1QgMTk5Nik6CisjCSogQWRkZWQgcm1zbz1cRVsyN20gaW4gTGludXggZW50cnkuCisjCSogQWRkZWQga29pOC1yIHN1cHBvcnQgZm9yIExpbnV4IGNvbnNvbGUuCisjCSogUmVwbGFjZSB4dGVybSBlbnRyaWVzIHdpdGggY2Fub25pY2FsIG9uZXMgZnJvbSBYRnJlZTg2IDMuMi4KKyMgOS4xMy4yMCAoU3VuIE5vdiAxNyAyMzowMjo1MSBFU1QgMTk5Nik6CisjCSogQWRkZWQgY29sb3JfeHRlcm0gZnJvbSBKYWNvYiBNYW5kZWxzb24KKyMgOS4xMy4yMSAoTW9uIE5vdiAxOCAxMjo0Mzo0MiBFU1QgMTk5Nik6CisjCSogQmFjayBvZmYgdGhlIHh0ZXJtIGVudHJ5IHRvIHVzZSByNiBhcyBhIGJhc2UuCisjIDkuMTMuMjIgKFNhdCBOb3YgMzAgMTE6NTE6MzEgRVNUIDE5OTYpOgorIwkqIEFkZGVkIGRlYy12dDIyMCBhdCBBZHJpYW4gR2Fyc2lkZSdzIHJlcXVlc3QuCisjCisjLShvcmlnaW5hbC1jaGFuZ2Vsb2ctMTk5Ni8xMi8yOS10by0xOTk4LzAyLzI4LWJ5LVREKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyAxMC4xLjAgKFN1biBEZWMgMjkgMDI6MzY6MzEgRVNUIDE5OTYpOiB3aXRoZHJhd24KKyMJKiBNaW5vciBjb3JyZWN0aW9ucyB0byB4dGVybSBlbnRyaWVzLgorIwkqIFJlcGxhY2VkIEVXQU4gdGVsbmV0IGVudHJ5LgorIwkqIERyb3BwZWQgdGhlIHJlb3JkZXIgc2NyaXB0IGdlbmVyYXRvci4gIEl0IHdhcyBhIGZvc3NpbC4KKyMgOS4xMy4yMyAoRnJpIEZlYiAyMSAxNjozNjowNiBFU1QgMTk5Nyk6CisjCSogUmVwbGFjZWQgbWluaXRlbC0yIGVudHJ5LgorIwkqIEFkZGVkIE1HUiwgYW5zaS1udC4KKyMgOS4xMy4yNCAoU3VuIEZlYiAyMyAyMDo1NToyMyBFU1QgMTk5Nyk6CisjCSogVGhvcnN0ZW4gTG9ja2VydCBhZGRlZCB0ZXJtY2FwIGBicycgdG8gYSBsb3Qgb2YgdHlwZXMsIHdvcmtpbmcgZnJvbQorIwkgIHRoZSA0LjRCU0QgTGl0ZTIgZmlsZS4KKyMKKyMgMTAuMS4xIChTYXQgTWF5ICAzIDIxOjQxOjI3IEVEVCAxOTk3KToKKyMJKiBVc2Ugc2V0YWYvc2V0YWIgY29uc2lzdGVudGx5IHdpdGggU1ZyNC4KKyMJKiBSZW1vdmUgZWNoLCBlbDEgZnJvbSBjb25zMjV3LCB0aGV5IGRvIG5vdCB3b3JrIGluIEZyZWVCU0QgMi4xLjUKKyMgMTAuMS4yIChTYXQgTWF5IDI0IDIxOjEwOjU3IEVEVCAxOTk3KQorIwkqIHVwZGF0ZSB4dGVybS14Zjg2LXYzMiB0byBtYXRjaCBYRnJlZTg2IDMuMkEgKGNoYW5nZXMgRjEtRjQpCisjCSogYWRkIHh0ZXJtLTE2Y29sb3IsIGZvciBYRnJlZTg2IDMuMworIyAxMC4xLjMgKFNhdCBNYXkgMzEgMTI6MjE6MDUgRURUIDE5OTcpCisjCSogY29ycmVjdCB0eXBvIGluIGVtdQorIwkqIGNvcnJlY3QgdHlwbyBpbiB2dDEwMi13IChSb2JlcnQgV3Vlc3QpCisjCSogbWFrZSBuZXcgZW50cnkgeHRlcm0teGY4Ni12MzMsIHJlc3RvcmVkIHh0ZXJtLXhmODYtdjMyLgorIyAxMC4xLjQgKFN1biBKdW4gMTUgMDg6Mjk6MDUgRURUIDE5OTcpCisjCSogcmVtb3ZlIGVjaCBjYXBhYmlsaXR5IGZyb20gcnh2dCAoaXQgZG9lcyB0aGUgd3JvbmcgdGhpbmcpCisjIDEwLjEuNSAoU2F0IEp1biAyOCAyMTozNDozNiBFRFQgMTk5NykKKyMJKiByZW1vdmUgc3B1cmlvdXMgbmV3bGluZXMgZnJvbSBzZXZlcmFsIGVudHJpZXMgKGhwK2NvbG9yLCB3eTUwLAorIwkgIHd5MzUwLCB3eTM3MC1uaywgd3k5OWd0LXRlaywgd3kzNzAtdGVrLCBpYm0zMTYxLCB0ZWs0MjA1LCBjdHJtLAorIwkgIGdzNjMwMCkKKyMgMTAuMS42IChTYXQgSnVsICA1IDE1OjA4OjE2IEVEVCAxOTk3KQorIwkqIGNvcnJlY3Qgcm1zbyBjYXBhYmlsaXR5IG9mIHd5NTAtbWMKKyMgMTAuMS43IChTYXQgSnVsIDEyIDIwOjA1OjU1IEVEVCAxOTk3KQorIwkqIGFkZCBjYnQgdG8geHRlcm0teGY4Ni12MzIKKyMJKiBkaXNlbnRhbmdsZSBzb21lIGVudHJpZXMgZnJvbSAneHRlcm0nLCBwcmVmZXJyaW5nIHh0ZXJtLXI2IGluIGNhc2UKKyMJICAneHRlcm0nIGlzIGRlcml2ZWQgZnJvbSB4dGVybS14Zjg2LXYzMiwgd2hpY2ggaW1wbGVtZW50cyBlY2ggYW5kCisjCSAgb3RoZXIgY2FwYWJpbGl0aWVzIG5vdCBpbiB4dGVybS1yNi4KKyMJKiByZW1vdmUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgZnJvbSBrdGVybSBlbnRyeS4KKyMgMTAuMS44IChTYXQgQXVnICAyIDE4OjQzOjE4IEVEVCAxOTk3KQorIwkqIGNvcnJlY3QgYWNzYyBlbnRyaWVzIGZvciBBQ1NfTEFOVEVSTiwgd2hpY2ggaXMgJ2knLCBub3QgJ0knLgorIyAxMC4xLjkgKFNhdCBBdWcgMjMgMTc6NTQ6MzggRURUIDE5OTcpCisjCSogYWRkIHh0ZXJtLThiaXQgZW50cnkuCisjIDEwLjEuMTAgKFNhdCBPY3QgIDQgMTg6MTc6MTMgRURUIDE5OTcpCisjCSogcmVwYWlyIHNldmVyYWwgcGxhY2VzIHdoZXJlIGVhcmx5IHZlcnNpb24gb2YgdGljIHJlcGxhY2VkIFwsIHdpdGggXFxcLAorIwkqIG1ha2UgYWNzYyBlbnRyaWVzIGNhbm9uaWNhbCBmb3JtIChzb3J0ZWQsIHVuaXEpLgorIwkqIG1vZGlmeSBhY3NjIGVudHJpZXMgZm9yIGxpbnV4LCBsaW51eC1rb2k4CisjCSogbmV3IHJ4dnQgZW50cnksIGZyb20gY29ycmVjdGVkIGNvcHkgb2YgZGlzdHJpYnV0aW9uIGluIHJ4dnQgMi4yMWIKKyMJKiBhZGQgY29sb3IsIG1vdXNlIHN1cHBvcnQgdG8ga3Rlcm0uCisjIDEwLjEuMTEgKFNhdCBPY3QgMTEgMTQ6NTc6MTAgRURUIDE5OTcpCisjCSogY29ycmVjdCB3eTEyMCBzbXhvbi90YmMgY2FwYWJpbGl0aWVzIHdoaWNoIHdlcmUgc3R1Y2sgdG9nZXRoZXIuCisjIDEwLjEuMTIgKFNhdCBPY3QgMTggMTc6Mzg6NDEgRURUIDE5OTcpCisjCSogYWRkIGVudHJ5IGZvciB4dGVybS14Zjg2LXYzOXQKKyMgMTAuMS4xMyAoU2F0IE5vdiAgOCAxMzo0MzozMyBFU1QgMTk5NykKKyMJKiBhZGQgdTgsdTkgdG8gc3VuLWlsIGRlc2NyaXB0aW9uCisjIDEwLjEuMTQgKFNhdCBOb3YgMjIgMTk6NTk6MDMgRVNUIDE5OTcpCisjCSogYWRkIHZ0MjIwLWpzLCBwaWxvdCwgcmJjb21tLCBkYXRhcG9pbnQgZW50cmllcyBmcm9tIGVzcidzIDI3LWp1bi05NworIwkgIHZlcnNpb24uCisjCSogYWRkIGhkczIwMCBkZXNjcmlwdGlvbiAoV2FsdGVyIFNrb3Jza2kpCisjCSogYWRkIEVNWCAwLjliIGRlc2NyaXB0aW9ucworIwkqIGNvcnJlY3Qgcm1zby9zbXNvIGNhcGFiaWxpdGllcyBpbiB3eTMwLW1jIGFuZCB3eTUwLW1jIChEYW5pZWwgV2VhdmVyKQorIwkqIHJlbmFtZSB4aHB0ZXJtIGJhY2sgdG8gaHB0ZXJtLgorIyAxMC4xLjE1IChTYXQgTm92IDI5IDE5OjIxOjU5IEVTVCAxOTk3KQorIwkqIGNoYW5nZSBpbml0YyBpbiBsaW51eC1jLW5jIHRvIHVzZSAwLi4xMDAwIHJhbmdlLgorIyAxMC4xLjE2IChTYXQgRGVjIDEzIDE5OjQxOjU5IEVTVCAxOTk3KQorIwkqIHJlbW92ZSBocGEvdnBhIGZyb20gcnh2dCwgd2hpY2ggaW1wbGVtZW50cyB0aGVtIGluY29ycmVjdGx5LgorIwkqIGFkZCBzZ3IwIGZvciByeHZ0LgorIwkqIHJlbW92ZSBib2d1cyBzbWFjcy9ybWFjcyBmcm9tIEVNWCBkZXNjcmlwdGlvbnMuCisjIDEwLjEuMTcgKFNhdCBEZWMgMjAgMTc6NTQ6MTAgRVNUIDE5OTcpCisjCSogcmV2aXNlZCBlbnRyeSBmb3IgYXR0NzMwMAorIyAxMC4xLjE4IChTYXQgSmFuICAzIDE3OjU4OjQ5IEVTVCAxOTk4KQorIwkqIHVzZSBcMCByYXRoZXIgdGhhbiBcMjAwLgorIwkqIHJlbmFtZSByeHZ0LWNvbG9yIHRvIHJ4dnQgdG8gbWF0Y2ggcnh2dCAyLjQuNSBkaXN0cmlidXRpb24uCisjIDEwLjEuMTkgKFNhdCBKYW4gMTcgMTQ6MjQ6NTcgRVNUIDE5OTgpCisjCSogY2hhbmdlIHh0ZXJtICh4dGVybS14Zjg2LXY0MCksIHh0ZXJtLThiaXQgcnMxIHRvIHVzZSBoYXJkIHJlc2V0LgorIwkqIHJlbmFtZSB4dGVybS14Zjg2LXYzOXQgdG8geHRlcm0teGY4Ni12NDAKKyMJKiByZW1vdmUgYm9sZC91bmRlcmxpbmUgZnJvbSBzdW4gY29uc29sZSBlbnRyaWVzIHNpbmNlIHRoZXkncmUgbm90CisjCSAgaW1wbGVtZW50ZWQuCisjIDEwLjEuMjAgKFNhdCBKYW4gMjQgMTE6MDI6NTEgRVNUIDE5OTgpCisjCSogYWRkIGJldGVybSBlbnRyeSAoRnJlZCBGaXNoKQorIwkqIGFkZCBpcml4LWNvbG9yL3h3c2ggZW50cnkuCisjCSogdHVybiBuY3Ygb2ZmIGZvciBsaW51eC4KKyMgMTAuMS4yMSAoU2F0IEphbiAzMSAxNzozOToxNiBFU1QgMTk5OCkKKyMJKiBzZXQgbmN2IGZvciBGcmVlQlNEIGNvbnNvbGUgKHRyZWF0IGNvbG9ycyB3aXRoIHJldmVyc2Ugc3BlY2lhbGx5KS4KKyMJKiByZW1vdmUgc2dyIHN0cmluZyBmcm9tIHFueCBiYXNlZCBvbiByZXBvcnQgYnkgWGlhb2RhbiBUYW5nCisjIDEwLjEuMjIgKFdlZCBGZWIgMTEgMTg6NDA6MTIgRVNUIDE5OTgpCisjCSogcmVtb3ZlIHNwdXJpb3VzIGNvbW1hcyBmcm9tIGRlc2NyaXB0aW9ucworIwkqIGNvcnJlY3QgeHRlcm0tOGJpdCB0byBtYXRjaCBYRnJlZTg2IDMuOUFkIEYxLUY0LgorIyAxMC4xLjIzIChTYXQgRmViIDI4IDE3OjQ4OjM4IEVTVCAxOTk4KQorIwkqIGFkZCBsaW51eC1rb2k4ciB0byByZXBsYWNlIGxpbnV4LWtvaTggKHdoaWNoIHVzZXMgYSBjb3JydXB0IGFjc2MsCisjCSAgYXBwYXJlbnRseSBiYXNlZCBvbiBjcC04NjYpLgorIworIy0ocmVwbGFjZWQtY2hhbmdlbG9nLTE5OTgvMDIvMjgtYnktRVNSKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgOS4xMy4yMyAoRnJpIEZlYiAyMSAxNjozNjowNiBFU1QgMTk5Nyk6CisjCSogUmVwbGFjZWQgbWluaXRlbC0yIGVudHJ5LgorIwkqIEFkZGVkIE1HUiwgYW5zaS1udC4KKyMJKiBNaW5vciBjb3JyZWN0aW9ucyB0byB4dGVybSBlbnRyaWVzLgorIwkqIFJlcGxhY2VkIEVXQU4gdGVsbmV0IGVudHJ5LgorIwkqIERyb3BwZWQgdGhlIHJlb3JkZXIgc2NyaXB0IGdlbmVyYXRvci4gIEl0IHdhcyBhIGZvc3NpbC4KKyMgOS4xMy4yNCAoU3VuIEZlYiAyMyAyMDo1NToyMyBFU1QgMTk5Nyk6CisjCSogVGhvcnN0ZW4gTG9ja2VydCBhZGRlZCB0ZXJtY2FwIGBicycgdG8gYSBsb3Qgb2YgdHlwZXMsIHdvcmtpbmcgZnJvbQorIwkgIHRoZSA0LjRCU0QgTGl0ZTIgZmlsZS4KKyMgOS4xMy4yNSAoRnJpIEp1biAyMCAxMjozMzozNiBFRFQgMTk5Nyk6CisjCSogQWRkZWQgRGF0YXBvaW50IDgyNDIsIHBpbG90LCBhbnNpX3BzeCwgcmJjb21tLCB2dDIyMGpzLgorIwkqIFVwZGF0ZWQgaXJpcy1hbnNpOyBjb3JyZWN0ZWQgdnQxMDItdy4KKyMJKiBTd2l0Y2ggYmFzZSB4dGVybSBlbnRyeSB0byAzLjMgbGV2ZWwuCisjIDkuMTMuMjYgKE1vbiBKdW4gMzAgMjI6NDU6NDUgRURUIDE5OTcpCisjCSogQWRkZWQgYmFzaWM0LgorIwkqIFJlbW92ZWQgcm1pci9zbWlyIGZyb20gdHY5MkIuCisjCisjIDEwLjIuMCAoU2F0IEZlYiAyOCAxMjo0NzozNiBFU1QgMTk5OCk6CisjCSogYWRkIGhkczIwMCBkZXNjcmlwdGlvbiAoV2FsdGVyIFNrb3Jza2kpCisjCSogYWRkIGJldGVybSBlbnRyeSAoRnJlZCBGaXNoKQorIwkqIGFkZCBUaG9tYXMgRGlja2V5J3MgeHRlcm0teGY4Ni12NDAsIHh0ZXJtLThiaXQsIHh0ZXJtLTE2Y29sb3IsCisjCSAgaXJpcy1jb2xvciBlbnRyaWVzLgorIwkqIGFkZCBlbXggZW50cmllcy4KKyMJKiBSZXBsYWNlZCB1bml4cGMgZW50cnkgd2l0aCBCZW5qYW1pbiBTaXR0bGVyJ3MgY29ycmVjdGVkIHZlcnNpb24uCisjCSogUmVwbGFjZWQgeHRlcm0vcnh2dC9lbXUvc3lzY29ucyBlbnRyaWVzIHdpdGggVGhvbWFzIERpY2tleSdzCisjCSAgdmVyc2lvbnMuCisjCSogcmVtb3ZlIHNnciBzdHJpbmcgZnJvbSBxbnggYmFzZWQgb24gcmVwb3J0IGJ5IFhpYW9kYW4gVGFuZworIwkqIEFkZGVkIHU4L3U5LCByZW1vdmVkIHJtdWwvc211bCBmcm9tIHN1bi1pbC4KKyMJKiA0LjIgdGljIGRpc3BsYXlzIFwwIHJhdGhlciB0aGFuIFwyMDAuCisjCSogYWRkIGxpbnV4LWtvaThyIHRvIHJlcGxhY2UgbGludXgta29pOCAod2hpY2ggdXNlcyBhIGNvcnJ1cHQgYWNzYywKKyMJICBhcHBhcmVudGx5IGJhc2VkIG9uIGNwLTg2NikuCisjCSogTWVyZ2VkIGluIFBhdmVsIFJvc2tpbidzIGFjc2MgZm9yIGxpbnV4LWtvaTgKKyMJKiBDb3JyZWN0ZWQgc29tZSBlcnJvbmVvdXMgXFwncyB0byBcLgorIwkqIDQuMiBuY3Vyc2VzIGhhcyBiZWVuIGNoYW5nZWQgdG8gdXNlIHNldGFmL3NldGFiLCBjb25zaXN0ZW50IHcvU3lzVi4KKyMJKiBJSSAtPiBpaSBpbiBwY3Z0WFgsIHNjcmVlbiwgeHRlcm0uCisjCSogUmVtb3ZlZCBcbiBjaGFycyBmb2xsb3dpbmcgQU5TSSBlc2NhcGVzIGluIHNnciAmIGZyaWVuZHMuCisjCSogVXBkYXRlZCBXeXNlIGVudHJpZXMuCisjCSogaDE5IGNvcnJlY3Rpb25zIGZyb20gVGltIFBpZXJjZS4KKyMJKiBOb3RlZCB0aGF0IHRoZSBkbTI1MDAgaGFzIGJvdGggaWNoIGFuZCBzbWlyLgorIwkqIGFkZGVkIHBjY29ucyBmb3IgdGhlIEFscGhhIHVuZGVyIE9TRi8xLgorIwkqIEFkZGVkIFNvbnkgTkVXUyB3b3Jrc3RhdGlvbiBlbnRyaWVzIGFuZCBjaXQxMDFlLXJ2LgorIwkqIFJldmVydGVkIGBhbWlnYSc7IHRvIEtlbnQgUG9saydzIHZlcnNpb24sIGFzIEknbSB0b2xkCisjCSAgdGhlIFZlcmt1aWwgZW50cnkgbWVzc2VzIHVwIHdpdGggQW1pZ2EgVGVsbmV0LgorIyAxMC4yLjEgKFN1biBNYXIgIDggMTg6MzI6MDQgRVNUIDE5OTgpOgorIwkqIENvcnJlY3RlZCBhdHRyaWJ1dGlvbnMgaW4gMTAuMi4wIHJlbGVhc2Ugbm90ZXMuCisjCSogU2Nhbm5lZCB0aGUgU2h1Zm9yZCBhcmNoaXZlIGZvciBuZXcgdGVybWluZm9zIGFuZCBpbmZvcm1hdGlvbi4KKyMJKiBSZW1vdmVkIHNnciBmcm9tIHFueCBlbnRyeSAoVGhvbWFzIERpY2tleSkuCisjCSogQWRkZWQgZW50cmllcyBmb3IgSUNMIGFuZCBLb2t1c2FpIERhdGEgU3lzdGVtcyB0ZXJtaW5hbHMuCisjCSogSW5jb3Jwb3JhdGVkIE5DUiB0ZXJtaW5mb3MgZnJvbSB0aGUgQm91bmRsZXNzIFRlY2hub2xvZ3kgRlRQIHNpdGUuCisjCSogSW5jb3Jwb3JhdGVkIGF0dDcwMCBmcm9tIHRoZSBCb3VuZGxlc3MgVGVjaG5vbG9neSBGVFAgc2l0ZS4KKyMJKiBNaXNjZWxsYW5lb3VzIGNvbnRhY3QtYWRkcmVzcyBhbmQgV2ViLXBhZ2UgdXBkYXRlcy4KKyMKKyMtKGNoYW5nZWxvZy1iZWdpbm5pbmctbmN1cnNlcy00LjIpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIDE5OTgvNS85CisjCSogYWRkIG54dGVybSBhbmQgeHRlcm0tY29sb3IgdGVybWluZm8gZGVzY3JpcHRpb24gKHJlcXVlc3QgYnkgQ3Jpc3RpYW4KKyMJICBHYWZ0b24gPGdhZnRvbkByZWRoYXQuY29tPikuCisjCSogbW9kaWZ5IHJ4dnQgdGVybWluZm8gZGVzY3JpcHRpb24gdG8gY2xlYXIgYWx0ZXJuYXRlIHNjcmVlbiBiZWZvcmUKKyMJICBzd2l0Y2hpbmcgYmFjayB0byBub3JtYWwgc2NyZWVuLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFwcGxpY2F0aW9ucworIwkgIHdoaWNoIHVzZSB4dGVybSAocmVwb3J0ZWQgYnkgTWFub2ogS2FzaWNoYWludWxhIDxtYW5vamtAaW8uY29tPikuCisjCSogbW9kaWZ5IGxpbnV4IHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIHJlc2V0IGNvbG9yIHBhbGV0dGUgKHJlcG9ydGVkCisjCSAgYnkgVGVsZm9yZCBUZW5keXMgPHRlbGZvcmRAZW5nLnV0cy5lZHUuYXU+KS4KKyMKKyMgMTk5OC83LzQKKyMJKiBtZXJnZSBjaGFuZ2VzIGZyb20gY3VycmVudCBYRnJlZTg2IHh0ZXJtIHRlcm1pbmZvIGRlc2NyaXB0aW9ucy4KKyMKKyMgMTk5OC83LzI1CisjCSogQWRkZWQgbWluaXRlbDEgZW50cmllcyBmcm9tIEFsZXhhbmRlciBNb250YXJvbi4KKyMJKiBBZGRlZCBxbnh0MiBmcm9tIEZlZGVyaWNvIEJpYW5jaGkuCisjCSogQWRkZWQgYXJtMTAwIHRlcm1pbmZvIGVudHJpZXMgZnJvbSBEYXZlIE1pbGxlbi4KKyMKKyMgMTk5OC84LzYKKyMJKiBBZGRlZCBuY3NhIHRlbG5ldCBlbnRyaWVzIGZyb20gRnJhbmNlc2NvIFBvdG9ydGkKKyMKKyMgMTk5OC84LzE1CisjCSogbW9kaWZ5IG5jc2EgdGVsbmV0IGVudHJ5IHRvIHJlZmxlY3QgY29sb3IsIG90aGVyIGNhcGFiaWxpdGllcyBiYXNlZCBvbgorIwkgIGV4YW1pbmF0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSAtIFQuRGlja2V5LgorIworIyAxOTk4LzgvMjIKKyMJKiBDb3JyZWN0ZWQgc29tZSBlcnJvbmVvdXMgXFwncyB0byBcIChldGVybSwgb3Nib3JuZSkgLSBURC4KKyMKKyMgMTk5OC84LzI5CisjCSogQWRkZWQgRnJhbmNlc2NvIFBvdG9ydGkncyB0dW5lZCBXeXNlIDk5IGVudHJpZXMuCisjCSogZHR0ZXJtIGVuYWNzIGNvcnJlY3Rpb24gZnJvbSBBbGV4YW5kZXIgVi4gTHVreWFub3YuCisjCSogQWRkIG5jc2EtbnMsIG5jc2EtbS1ucyBhbmQgbmNzYS1tIGVudHJpZXMgZnJvbSBlc3IgdmVyc2lvbi4KKyMJKiBjb3JyZWN0IGEgdHlwbyBpbiBpY2w2NDA0IGVudHJ5LgorIwkqIGFkZCB4dGVybW0gYW5kIHh0ZXJtYworIworIyAxOTk4LzkvMjYKKyMJKiBmb3JtYXQgbW9zdCAlJ2NoYXInIHNlcXVlbmNlcyB0byAle251bWJlcn0KKyMJKiBhZGFwdCBJQk0gQUlYIDMuMi41IHRlcm1pbmZvIC0gVC5EaWNrZXkKKyMJKiBtZXJnZSBEYXRhIEdlbmVyYWwgdGVybWluZm8gZnJvbSBIYXN1ZmluIDxoYXN1ZmluQHZpZG5ldC5uZXQ+IC0gVEQKKyMKKyMgMTk5OC8xMC8xMAorIwkqIHVwZGF0ZSB4dGVybS14ZnJlZTg2IHRvIGN1cnJlbnQgKHBhdGNoIDg0KSwgZm9yIGlzMi9yczIgY2hhbmdlcyAtIFRECisjCSogY29ycmVjdCBpbml0aWFsaXphdGlvbiBzdHJpbmcgaW4geHRlcm0tcjUsIGFkZCBtaXNjIG90aGVyIGZlYXR1cmVzCisjCSAgdG8gY29ycmVzcG9uZCB3aXRoIHh0ZXJtIHBhdGNoIDg0IC0gVEQKKyMKKyMgMTk5OC8xMi8xOQorIwkqIHVwZGF0ZSB4dGVybS14ZnJlZTg2IHRvIGN1cnJlbnQgKHBhdGNoIDkwKSwgc21jdXIvcm1jdXIgY2hhbmdlcyAtIFRECisjCSogYWRkIE1hdGhldyBWZXJub24ncyBtYWNoIGNvbnNvbGUgZW50cmllcworIwkqIGNvcnJlY3Rpb25zIGZvciBuY3NhIGZ1bmN0aW9uLWtleXMgKHJlcG9ydCBieSBMYXJyeSBWaXJkZW4pCisjCisjIDE5OTgvMTIvMTkKKyMJKiBjaGFuZ2UgbGludXggdG8gdXNlIG5jdiMyLCBzaW5jZSB1bmRlcmxpbmUgZG9lcyBub3Qgd29yayB3aXRoIGNvbG9yIC0gVEQKKyMKKyMgMTk5OS8xLzkKKyMJKiBhZGQga2J0IHRvIGlyaXMtYW5zaSwgZG9jdW1lbnQgb3RoZXIgc2hpZnQvY29udHJvbCBmdW5jdGlvbmtleXMgLSBURAorIwkqIGNvcnJlY3QgaXJpcy1hbnNpIGFuZCBpcmlzLWFuc2ktYXAgd2l0aCByZXNwZWN0IHRvIG5vcm1hbCB2cyBrZXlwYWQKKyMJICBhcHBsaWNhdGlvbiBtb2RlcywgY2hhbmdlIGtlbnQgdG8gdXNlIHRoZSBjb3JyZWN0IGtleXBhZCBjb2RlIC0gVEQKKyMKKyMgMTk5OS8xLzEwCisjCSogYWRkIGVudHJ5IGZvciBUZXJhIFRlcm0gLSBURAorIworIyAxOTk5LzEvMjMKKyMJKiBtaW5vciBpbXByb3ZlbWVudHMgZm9yIHRlcmF0ZXJtIGVudHJ5IC0gVEQKKyMJKiByZW5hbWUgc2V2ZXJhbCBlbnRyaWVzIHVzZWQgYnkgQlNESTogYnNkb3MgdG8gYnNkb3MtcGMtbm9ib2xkLAorIwkgIGFuZCBic2Rvcy1ib2xkIHRvIGJzZG9zLXBjIChKZWZmcmV5IEMgSG9uaWcpCisjCisjIDE5OTkvMi8yMAorIwkqIHJlc29sdmUgYW1iaWd1aXR5IG9mIGtlbmQva2xsL2tzbHQgYW5kIGtob21lL2tmbmQva2ljaDEgc3RyaW5ncyBpbgorIwkgIHh0ZXJtIGFuZCBuY3NhIGVudHJpZXMgYnkgcmVtb3ZpbmcgdGhlIHVubmVlZGVkIG9uZXMuICBOb3RlIHRoYXQKKyMJICBzb21lIGVudHJpZXMgd2lsbCByZXR1cm4ga2VuZCAmIGtob21lIHZlcnN1cyBrc2x0IGFuZCBrZm5kLCBmb3IKKyMJICBQQy1zdHlsZSBrZXlib2FyZHMgdmVyc3VzIHN0cmljdCB2dDIyMCBjb21wYXRpYmxpdHkgLSBURAorIworIyAxOTk5LzMvMTMKKyMJKiBhZGp1c3QgeHRlcm0teGZyZWU4NiBraG9tZS9rZW5kIHRvIG1hdGNoIGRlZmF1bHQgUEMtc3R5bGUga2V5Ym9hcmQKKyMJICB0YWJsZXMgLSBURAorIwkqIGFkZCAnY3J0JyBlbnRyeSAtIFRECisjCSogY29ycmVjdCB0eXBvcyBpbiAnbGludXgtYycgZW50cnkgLSBURAorIworIyAxOTk5LzMvMTQKKyMJKiB1cGRhdGUgZW50cmllcyBmb3IgQlNEL09TIGNvbnNvbGUgdG8gdXNlIGtsb25lK3NnciBhbmQga2xvbmUrY29sb3IKKyMJICAoSmVmZnJleSBDIEhvbmlnKQorIworIyAxOTk5LzMvMjcKKyMJKiBhZGp1c3QgeHRlcm0teGZyZWU4NiBtaXNjZWxsYW5lb3VzIGtleXBhZCBrZXlzLCBhcyBwZXIgcGF0Y2ggIzk0IC0gVEQuCisjCisjIDE5OTkvNC8xMAorIwkqIGFkZCBsaW51eC1sYXQsIGZyb20gUmVkSGF0IHBhdGNoZXMgdG8gbmN1cnNlcyA0LjIKKyMKKyMgMTk5OS80LzE3CisjCSogYWRkIGNvbXBsZXRlIHNldCBvZiBkZWZhdWx0IGZ1bmN0aW9uLWtleSBkZWZpbml0aW9ucyBmb3Igc2NvYW5zaSAtIFRELgorIworIyAxOTk5LzcvMworIwkqIGFkZCBjbm9ybSwgY3Z2aXMgZm9yIExpbnV4IDIuMiBrZXJuZWxzCisjCisjIDE5OTkvNy8yNAorIwkqIGFkZCBrbW91cyB0byB4dGVybS1yNSAtVEQKKyMJKiBjb3JyZWN0IGVudHJpZXMgeHRlcm0rc2wgYW5kIHh0ZXJtK3NsLXR3bSwgd2hpY2ggd2VyZSBtaXNzaW5nIHRoZQorIwkgIHBhcmVudCAidXNlIiBjbGF1c2UgLVRECisjCisjIDE5OTkvNy8zMQorIwkqIGNvcnJlY3RlZCBjbm9ybSwgYWRkZWQgZWwxIGluICdzY3JlZW4nIGRlc2NyaXB0aW9uIC1URAorIworIyAxOTk5LzgvMTQKKyMJKiBhZGQgbXMtdnQxMDAgLVRECisjCisjIDE5OTkvOC8yMQorIwkqIGNvcnJlY3Rpb25zIHRvIGJldGVybSBlbnRyeSAtVEQKKyMKKyMgMTk5OS84LzI4CisjCSogYWRkIGN5Z3dpbiBlbnRyeSAtVEQKKyMKKyMgMTk5OS85LzQKKyMJKiBtaW5vciBjb3JyZWN0aW9ucyBmb3IgYmV0ZXJtIGVudHJ5IC1URAorIworIyAxOTk5LzkvMTgKKyMJKiBhZGQgYWNzYyBzdHJpbmcgdG8gSFAgNzAwOTIgdGVybWluZm8gZW50cnkgLUpvZXJnIFd1bnNjaAorIworIyAxOTk5LzkvMjUKKyMJKiBhZGQgYW1pZ2EtOGJpdCBlbnRyeQorIwkqIGFkZCBjb25zb2xlIGVudHJpZXMgZnJvbSBOZXRCU0Q6IG9mY29ucywgd3N2dDI1LCB3c3Z0MjVtLCByY29ucywKKyMJICByY29ucy1jb2xvciwgYmFzZWQgb24KKyMJICBmdHA6Ly9mdHAubmV0YnNkLm9yZy9wdWIvTmV0QlNEL05ldEJTRC1jdXJyZW50L3NyYy9zaGFyZS90ZXJtY2FwL3Rlcm1jYXAuc3JjCisjCSogYWRkIGFsaWFzIGZvciBpcmlzLWFuc2ktbmV0CisjCisjIDE5OTkvMTAvMgorIwkqIGNvcnJlY3RlZCBzY29hbnNpIGVudHJ5J3MgYWNzYywgc29tZSBmdW5jdGlvbiBrZXlzLCBhZGQgY29sb3IgLVRECisjCisjIDE5OTkvMTAvMjMKKyMJKiBhZGQgY25vcm0sIGN2dmlzIHRvIGNvbnMyNXcsIGFuZCBtb2RpZnkgbmN2IHRvIGFkZCAnZGltJyAtVEQKKyMJKiByZW9yZGVyIG5jc2EgZW50cmllcyB0byBtYWtlIG5jc2EtdnQyMjAgdXNlIHRoZSBhbHRlcm5hdGUgZnVuY3Rpb24KKyMJICBrZXkgbWFwcGluZywgbGVhdmluZyBQb3RvcnRpJ3MgZW50cmllcyBtb3JlIGxpa2UgaGUgbmFtZWQgdGhlbSAtVEQKKyMJKiByZW1vdmUgZW50ZXIvZXhpdCBhbS1tb2RlIGZyb20gY3lnd2luIC1URAorIworIyAxOTk5LzEwLzMwCisjCSogY29ycmVjdCB0eXBvcyBpbiBzZXZlcmFsIGVudHJpZXMgKG1pc3NpbmcgJ1snIGZyb20gQ1NJKToKKyMJICBtZ3Itc3VuLCBuY3NhLW0sIHZ0MzIwLWszLCBhdHQ1MDUsIGF2dC1ucywgYXMgd2VsbCBhcyBzbWlyL3JtaXIKKyMJICBzdHJpbmdzIGZvciBhdnQtbnMgLVRECisjCSogYWRkICdkaW0nIHRvIG5jdiBtYXNrIGZvciBsaW51eCAocmVwb3J0IGJ5IEtsYXVzIFdlaWRlKS4KKyMKKyMgMTk5OS8xMS8yNworIwkqIGNvcnJlY3Qga2YxLWtmNCBpbiB4dGVybS1yNiB3aGljaCB3ZXJlIHZ0MTAwLXN0eWxlIFBGMS1QRjQgLVRECisjCSogYWRkIGh0cyB0byB4dGVybS1yNiwgYW5kIHU2LXU5IHRvIHh0ZXJtLXI1IC1URAorIwkqIGFkZCB4dGVybS04OGNvbG9yIGFuZCB4dGVybS0yNTZjb2xvciAtVEQKKyMKKyMgMTk5OS8xMi80CisjCSogYWRkICJvYnNvbGV0ZSIgdGVybWNhcCBzdHJpbmdzIC1URAorIwkqIGFkZCBrdnQgYW5kIGdub21lIGVudHJpZXMgLVRECisjCisjIDE5OTkvMTIvMTEKKyMJKiBjb3JyZWN0IGN1cCBzdHJpbmcgZm9yIHJlZ2VudDEwMCAtVEQKKyMKKyMgMjAwMC8xLzEKKyMJKiB1cGRhdGUgbWFjaCwgYWRkIG1hY2gtY29sb3IgYmFzZWQgb24gRGViaWFuIGRpZmZzIGZvciBuY3Vyc2VzIDUuMCAtVEQKKyMJKiBhZGQgZW50cmllcyBmb3IgeHRlcm0taHAsIHh0ZXJtLXZ0MjIwLCB4dGVybS12dDUyIGFuZCB4dGVybS1ub2FwcCAtVEQKKyMJKiBjaGFuZ2UgT1RycyBjYXBhYmlsaXRpZXMgdG8gcnMyIC1URAorIwkqIGFkZCBvYnNvbGV0ZSBhbmQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIHRvICdzY3JlZW4nIC1URAorIworIyAyMDAwLzEvNQorIwkqIHJlbW92ZSBrZjAgZnJvbSByeHZ0LCB2dDUyMCwgdnQ1MjUgYW5kIGlibTUxNTEgc2luY2UgaXQgY29uZmxpY3RzCisjCSAgd2l0aCBrZjEwIC1URAorIwkqIHVwZGF0ZWQgeHRlcm0teGY4Ni12NDAsIG1ha2luZyBrZGNoMSBjb3JyZXNwb25kIHRvIHZ0MjIwICdSZW1vdmUnLAorIwkgIGFuZCBhZGRpbmcga2NidCAtVEQKKyMKKyMgMjAwMC8xLzEyCisjCSogcmVtb3ZlIGluY29ycmVjdCBraG9tZS9rZW5kIGZyb20geHRlcm0teGY4Ni12MzMzLCB3aGljaCB3YXMgYmFzZWQgb24KKyMJICBub25zdGFuZGFyZCByZXNvdXJjZSBzZXR0aW5ncyAtVEQKKyMKKyMgMjAwMC8yLzI2CisjCSogbWlub3IgZml4ZXMgZm9yIHh0ZXJtLSosIGJhc2VkIG9uIERlYmlhbiAjNTg1MzAgLVRECisjCisjIDIwMDAvMy80CisjCSogYWRkIHNldmVyYWwgdGVybWluYWwgdHlwZXMgZnJvbSBlc3IncyAiMTEuMCIsIGFzIHdlbGwgYXMgY29tbWVudHMuCisjCSAgYnEzMDAqLCBka3U3MTAyLW9sZCwgZGt1NzIwMiwgaGZ0LCBsZnQsIHBjbXcsIHBtY29ucywgdHdzKiwgdmlwKiwKKyMJICB2dDIyMC04Yml0LCB2dDIyMC1vbGQsIHd5ODUtOGJpdAorIworIyAyMDAwLzMvMTgKKyMJKiBhZGQgc2V2ZXJhbCB0ZXJtaW5hbCB0eXBlcyBmcm9tIGVzcidzICIxMS4wLjEiIChhbnNpLSopLgorIwkqIHVwZGF0ZSBPVHh4IGNhcGFiaWxpdGllcyBmb3IgY2hhbmdlcyBvbiAyMDAwLzMvNC4KKyMJKiByZXZlcnQgcGFydCBvZiB2dDIyMCBjaGFuZ2UgKHJlcXVlc3QgYnkgVG9kZCBDIE1pbGxlciBmb3IgT3BlbkJTRCkKKyMKKyMgMjAwMC8zLzI2CisjCSogbW92ZSBzY3JlZW4ncyBBWCBleHRlbnNpb24gdG8gZWNtYStjb2xvciwgbW9kaWZ5IHNldmVyYWwgZW50cmllcyB0bworIwkgIHVzZSB0aGF0LCBhZGp1c3RpbmcgbmN2IGFzIG5lZWRlZCAtVEQKKyMKKyMgMjAwMC80LzgKKyMJKiBhZGQgYnNkb3MtcGMtbSwgYnNkb3MtcGMtbW9ubyAoSmVmZnJleSBDIEhvbmlnKQorIwkqIGNvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZW50cnkgbmFtZTogYnEzMDAtcnYgd2FzIGdpdmVuIGFzIGJnMzAwLXJ2CisjCSAgaW4gZXNyJ3MgdmVyc2lvbi4KKyMKKyMgMjAwMC80LzE1CisjCSogYWRkIGN1ZCwgZWNoLCBldGMuLCB0byBiZXRlcm0gYmFzZWQgb24gZmVlZGJhY2sgZnJvbSBSaWNvIFR1ZG9yIC1URAorIwkqIGNvcnJlY3QgY29sb3IgZGVmaW5pdGlvbiBmb3IgaWJtMzE2NCwgbWFrZSBtaW5vciBjaGFuZ2VzIHRvIG90aGVyCisjCSAgSUJNIHRlcm1pbmFsIGRlZmluaXRpb25zIGJhc2VkIG9uIHJlY2VudCB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgLVRECisjCisjIDIwMDAvNC8yMgorIwkqIGFkZCBtZ3Rlcm0sIGZyb20gTmV0QlNEIC1URAorIwkqIGFkZCBhbGlhcyBzdW4tY2dzaXggZm9yIHN1bi1zczUgYXMgcGVyIE5ldEJTRAorIwkqIGNoYW5nZSBjb25zMjV3IHRvIHVzZSByczIgZm9yIHJlc2V0IHJhdGhlciB0aGFuIHJzMSAtVEQKKyMJKiBhZGQgcmMvc2MgdG8gYWl4dGVybSBiYXNlZCBvbiBtYW5wYWdlIC1URAorIworIyAyMDAwLzUvMTMKKyMJKiByZW1vdmUgbmN2IGZyb20geHRlcm0tMTZjb2xvciwgeHRlcm0tMjU2Y29sb3IKKyMKKyMgMjAwMC82LzEwCisjCSogYWRkIGttb3VzIGNhcGFiaWxpdHkgdG8gbGludXggdG8gdXNlIEpvZXJnIFNjaG9lbidzIGdwbSBwYXRjaC4KKyMKKyMgMjAwMC83LzEKKyMJKiBhZGQgRXRlcm0gKE1pY2hhZWwgSmVubmluZ3MpCisjCisjIDIwMDAtMDctMTgKKyMgICAgICAgKiBhZGQgYW1pZ2Etdm5jIGVudHJ5LgorIworIyAyMDAwLTA4LTEyCisjCSogY29ycmVjdCBkZXNjcmlwdGlvbiBvZiBUb3AgR3VuIFRlbG5ldC4KKyMJKiBhZGQga3Rlcm0tY29sb3IKKyMKKyMgMjAwMC0wOC0yNgorIwkqIGFkZCBxYW5zaSogZW50cmllcyBmcm9tIFFOWCBmdHAgc2l0ZS4KKyMKKyMgMjAwMC0wOS0xNgorIwkqIGFkZCBNYXRyaXggT3JiaXRhbCBlbnRyaWVzIGJ5IEVyaWMgWi4gQXllcnMpLgorIwkqIGFkZCB4dGVybS1iYXNpYywgeHRlcm0tc2NvIGVudHJpZXMsIHVwZGF0ZSByZWxhdGVkIGVudHJpZXMgdG8gWEZyZWU4NgorIwkgIDQuMC4xYyAtVEQKKyMKKyMgMjAwMC0wOS0xNworIwkqIGFkZCBTMCwgRTAgZXh0ZW5zaW9ucyB0byBzY3JlZW4ncyBlbnRyeSAtVEQKKyMKKyMgMjAwMC0wOS0yMworIwkqIHNldmVyYWwgY29ycmVjdGlvbnMgYmFzZWQgb24gdGljJ3MgbmV3IHBhcmFtZXRlci1jaGVja2luZyBjb2RlIC1URAorIwkqIG1vZGlmeSB4dGVybS1yNiBhbmQgc2ltaWxhciByczIgc2VxdWVuY2VzIHdoaWNoIGhhZCBcRTcuLi5cRTgKKyMJICBicmFja2V0aW5nIHNlcXVlbmNlcyB0aGF0IHJlc2V0IHZpZGVvIGF0dHJpYnV0ZXMgKFxFOCB3b3VsZCByZXN0b3JlCisjCSAgdGhlbSkgLVRECisjCisjIDIwMDAtMTEtMTEKKyMJKiByZW5hbWUgY3lnd2luIHRvIGN5Z3dpbkIxOSwgYWRhcHQgbmV3ZXIgZW50cnkgZnJvbSBFYXJuaWUgQm95ZCAtVEQKKyMKKyMgMjAwMC0xMi0xNgorIwkqIGltcHJvdmVkIHNjb2Fuc2ksIGJhc2VkIG9uIFNDTyBtYW4tcGFnZSwgYW5kIHRlc3RpbmcgY29uc29sZSwKKyMJICBzY290ZXJtIHdpdGggdGFjayAtVEQKKyMKKyMgMjAwMS0wMS0yNworIwkqIG1vZGlmeSBrdGVybSB0byB1c2UgYWNzYyB2aWEgU0NTIGNvbnRyb2xzLgorIworIyAyMDAxLTAyLTEwCisjCSogc2NyZWVuIDMuOS44IGFsbG93cyB4dGVybSBtb3VzZSBjb250cm9scyB0byBwYXNzLXRocm91Z2gKKyMKKyMgMjAwMS0wMy0xMQorIwkqIHJlbW92ZSBzcHVyaW91cyAiJXwiIGZyb20gc29tZSB4dGVybSBlbnRyaWVzLgorIworIyAyMDAxLTAzLTMxCisjCSogbW9kaWZ5ICdzY3JlZW4nIGtob21lL2tlbmQgdG8gbWF0Y2ggc2NyZWVuIDMuMDkuMDgKKyMJKiBhZGQgZXhhbXBsZXMgb2YgJ3NjcmVlbicgY3VzdG9taXphdGlvbiAoc2NyZWVuLnh0ZXJtLXhmcmVlODYsCisjCSAgc2NyZWVuLnh0ZXJtLXI2LCBzY3JlZW4udGVyYXRlcm0pIC1URAorIworIyAyMDAxLTA0LTE0CisjCSogY29ycmVjdCBkZWZpbml0aW9ucyBvZiBzaGlmdGVkIGVkaXRpbmcga2V5cyBmb3IgeHRlcm0teGZyZWU4NiAtVEQKKyMJKiBhZGQgIkFwcGxlX1Rlcm1pbmFsIiBlbnRyaWVzIC1CZW5qYW1pbiBTaXR0bGVyCisjCSogcmVtb3ZlIHRpbWUtZGVsYXlzIGZyb20gIkFwcGxlX1Rlcm1pbmFsIiBlbnRyaWVzIC1URAorIwkqIG1ha2Ugc2dyIGVudHJpZXMgdGltZS1kZWxheXMgY29uc2lzdGVudCB3aXRoIGluZGl2aWR1YWwgY2FwcyAtVEQKKyMKKyMgMjAwMS0wNS0wNQorIwkqIGNvcnJlY3RlZC91cGRhdGVkIHNjcmVlbi54dGVybS14ZnJlZTg2CisjCisjIDIwMDEtMDUtMTkKKyMJKiBFTEtTIGRlc2NyaXB0aW9ucywgZnJvbSBGZWRlcmljbyBCaWFuY2hpCisjCSogYWRkIHU2IChDU1IpIHRvIEV0ZXJtIChNaWNoYWVsIEplbm5pbmdzKS4KKyMKKyMgMjAwMS0wNy0yMQorIwkqIHJlbmFtZWQgIkFwcGxlX1Rlcm1pbmFsIiBlbnRyaWVzIHRvICJuc3Rlcm0iIHRvIHdvcmsgd2l0aCBTb2xhcmlzJ3MKKyMJICB0aWMgd2hpY2ggaGFuZGxlcyBuYW1lcyBubyBsb25nZXIgdGhhbiAxNCBjaGFyYWN0ZXJzLiAgQWRkCisjCSAgY29ycmVzcG9uZGluZyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBEYXJ3aW4gUG93ZXJQQyBjb25zb2xlIG5hbWVkCisjCSAgInhudXBwYyIgLUJlbmphbWluIFNpdHRsZXIKKyMKKyMgMjAwMS0wOS0wMQorIwkqIGNoYW5nZSBrYnMgaW4gbWFjaCBlbnRyaWVzIHRvIF4/IChNYXJjdXMgQnJpbmttYW5uKS4KKyMKKyMgMjAwMS0xMS0xNworIwkqIGFkZCAicHV0dHkiIGVudHJ5IC1URAorIwkqIHVwZGF0ZWQgIkFwcGxlX1Rlcm1pbmFsIiBlbnRyaWVzIC1CZW5qYW1pbiBTaXR0bGVyCisjCisjIDIwMDEtMTEtMjQKKyMJKiBhZGQgbXMtdnQxMDAtY29sb3IgZW50cnkgLVRECisjCSogYWRkICJrb25zb2xlIiBlbnRyaWVzIC1URAorIworIyAyMDAxLTEyLTA4CisjCSogdXBkYXRlIGdub21lIGVudHJ5IHRvIFJlZGhhdCA3LjIgLVRECisjCisjIDIwMDItMDUtMjUKKyMJKiBhZGQga2YxMy1rZjQ4IHN0cmluZ3MgdG8gY29uczI1dyAtVEQKKyMJKiBhZGQgcGN2dDI1LWNvbG9yIGVudHJ5IC1URAorIwkqIGNoYW5nZWQgYSBmZXcgL3Vzci9saWIvdGFic2V0IC0+IC91c3Ivc2hhcmUvdGFic2V0LgorIwkqIGltcHJvdmUgc29tZSBmZWF0dXJlcyBvZiBzY29hbnNpIGVudHJ5IGJhc2VkIG9uIFNDTydzIHZlcnNpb24gLVRECisjCSogYWRkIHNjb2Fuc2ktbmV3IGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gT3BlblNlcnZlciA1LjAuNgorIworIyAyMDAyLTA2LTE1CisjCSogYWRkIGtjYnQgdG8gc2NyZWVuIGVudHJ5IC1URAorIworIyAyMDAyLTA2LTIyCisjCSogYWRkIHJ4dnQtMTZjb2xvciwgaWJtKzE2Y29sb3IsIG12dGVybSBlbnRyaWVzIC1URAorIworIyAyMDAyLTA5LTI4CisjCSogc3BsaXQgb3V0IGxpbnV4LWJhc2ljIGVudHJ5LCBtYWtpbmcgbGludXgtYyBpbmhlcml0IGZyb20gdGhhdCwgYW5kCisjCSAgaW4gdHVybiBsaW51eCAod2l0aCBjbm9ybSwgZXRjKSBpbmhlcml0IGZyb20gbGludXgtYy1uYyB0byByZWZsZWN0CisjCSAgdGhlIGhpc3Rvcnkgb2YgdGhpcyBjb25zb2xlIHR5cGUgLVRECisjCSogc2NhbGVkIHRoZSBsaW51eC1jIHRlcm1pbmZvIGVudHJ5IHRvIG1hdGNoIGxpbnV4LWMtbmMsIGkuZS4sIHRoZQorIwkgIHIvZy9iIHBhcmFtZXRlcnMgb2YgaW5pdGMgYXJlIGluIHRoZSByYW5nZSAwIHRvIDEwMDAgLVRECisjCisjIDIwMDItMTAtMDUKKyMJKiBtaW5vciBmaXggZm9yIHNjYWxlLWZhY3RvciBvZiBsaW51eC1jIGFuZCBsaW51eC1jLW5jIC1URAorIworIyAyMDAyLTExLTA5CisjCSogc3BsaXQtb3V0IHZ0MTAwK2tleXBhZCBhbmQgdnQyMjAra2V5cGFkLCBmaXggaW50ZXJjaGFuZ2VkIGthMy9rYjIKKyMJICBpbiB0aGUgbGF0dGVyIC1URAorIworIyAyMDAyLTExLTE2CisjCSogYWRkIGVudHJpZXMgZm9yIG10ZXJtIChtdGVybSwgbXRlcm0tYW5zaSwgZGVjYW5zaSkgLVRECisjCSogbmNyMjYwd3kzNTBwcCBoYXMgb25seSAxNiBjb2xvciBwYWlycyAtVEQKKyMJKiBhZGQgc3VuLXR5cGU0IGZyb20gTmV0QlNEIC1URAorIwkqIHVwZGF0ZSB4dGVybS14ZnJlZTg2IHRvIGN1cnJlbnQgKHBhdGNoIDE3MCkgLVRECisjCSogYWRkIHNjcmVlbi1iY2UsIHNjcmVlbi1zIGVudHJpZXMgLVRECisjCSogYWRkIHh0ZXJtLTEwMDIsIHh0ZXJtLTEwMDMgZW50cmllcyAtVEQKKyMKKyMgMjAwMy0wMS0xMQorIwkqIHVwZGF0ZSBob21lcGFnZSBmb3IgVG9wIEd1biBUZWxuZXQvU1NICisjCisjIDIwMDMtMDEtMjUKKyMJKiByZWR1Y2UgZHVwbGljYXRpb24gaW4gZW14IGVudHJpZXMsIGFkZGVkIGVteC1iYXNlIC1URAorIworIyAyMDAzLTA1LTI0CisjCSogY29ycmVjdGVkIGFjcyBmb3Igc2NyZWVuLnRlcmF0ZXJtIC1URAorIwkqIGFkZCB0a3Rlcm0gZW50cnkgLVRECisjCisjIDIwMDMtMDctMTUKKyMJKiBjeWd3aW4gY2hhbmdlcyBmcm9tIENoYXJsZXMgV2lsc29uOgorIwkgIG1pc2MvdGVybWluZm8uc3JjIChueHRlcm18eHRlcm0tY29sb3IpOiBtYWtlIHh0ZXJtLWNvbG9yCisjCSAgcHJpbWFyeSBpbnN0ZWFkIG9mIG54dGVybSwgdG8gbWF0Y2ggWEZyZWU4NidzIHh0ZXJtLnRlcm1pbmZvCisjCSAgdXNhZ2UgYW5kIHRvIHByZXZlbnQgY2lyY3VsYXIgbGlua3MuCisjCSAgKHJ4dnQpOiBhZGQgYWRkaXRpb25hbCBjb2RlcyBmcm9tIHJ4dnQub3JnLgorIwkgIChyeHZ0LWNvbG9yKTogbmV3IGFsaWFzCisjCSAgKHJ4dnQteHBtKTogbmV3IGFsaWFzCisjCSAgKHJ4dnQtY3lnd2luKTogbGlrZSByeHZ0LCBidXQgd2l0aCBzcGVjaWFsIGFjc2MgY29kZXMuCisjCSAgKHJ4dnQtY3lnd2luLW5hdGl2ZSk6IGRpdHRvLiAgcnh2dCBtYXkgYmUgcnVuIHVuZGVyIFhXaW5kb3dzLCBvcgorIwkgIHdpdGggYSAibmF0aXZlIiBNU1dpbiBHVUkuICBFYWNoIHRha2VzIGRpZmZlcmVudCBhY3NjIGNvZGVzLAorIwkgIHdoaWNoIGFyZSBib3RoIGRpZmZlcmVudCBmcm9tIHRoZSAibm9ybWFsIiByeHZ0J3MgYWNzYy4KKyMJICAoY3lnd2luKTogY3lnd2luLWluLWNtZC5leGUgd2luZG93LiAgTG90cyBvZiBmaXhlcy4KKyMJICAoY3lnd2luREJHKTogZGl0dG8uCisjCisjIDIwMDMtMDktMjcKKyMJKiB1cGRhdGUgZ25vbWUgdGVybWluYWwgZW50cmllcyAtVEQKKyMKKyMgMjAwMy0xMC0wNAorIwkqIGFkZCBlbnRyaWVzIGZvciBkamdwcCAyLjAzIGFuZCAyLjA0IC1URAorIworIyAyMDAzLTEwLTI1CisjCSogYWRkIGFsaWFzIGZvciB2dG50IC1URAorIwkqIHVwZGF0ZSB4dGVybS14ZnJlZTg2IGZvciBYRnJlZTg2IDQuNCAtVEQKKyMKKyMgMjAwMy0xMS0yMgorIwkqIGFkZCBsaW51eC12dCAoQW5kcmV5IFYgTHVreWFub3YpCisjCisjIDIwMDMtMTItMjAKKyMJKiBhZGQgc2NyZWVuLmxpbnV4IC1URAorIworIyAyMDA0LTAxLTEwCisjCSogcmV2aXNlZC9pbXByb3ZlZCBlbnRyaWVzIGZvciB0dmk5MTJiLCB0dmk5MjBiIChCZW5qYW1pbiBTaXR0bGVyKQorIworIyAyMDA0LTAxLTE3CisjCSogYWRkIE9wZW5OVC9JbnRlcml4L1NGVSBlbnRyaWVzIChGZWRlcmljbyBCaWFuY2hpKQorIwkqIGFkZCB2dDEwMCsgYW5kIHZ0LXV0ZjggZW50cmllcyAtVEQKKyMJKiBhZGQgdXdpbiBlbnRyeSAtVEQKKyMKKyMgMjAwNC0wMy0yNworIwkqIGFkZCBzZ3Igc3RyaW5ncyB0byBzZXZlcmFsIGNvbW1vbiBlbnRyaWVzIGxhY2tpbmcgdGhlbSwgZS5nLiwKKyMJICBzY3JlZW4sIHRvIG1ha2UgdGhlIGVudHJpZXMgbW9yZSBwb3J0YWJsZSAtVEQKKyMJKiByZW1vdmUgY3Z2aXMgZnJvbSByeHZ0IGVudHJ5LCBzaW5jZSBpdCBpcyB0aGUgc2FtZSBhcyBjbm9ybSAtVEQKKyMJKiBzaW1pbGFyIGZpeHVwcyBmb3IgY3Z2aXMvY25vcm0gdmFyaW91cyBlbnRyaWVzIC1URAorIworIyAyMDA0LTA1LTIyCisjCSogcmVtb3ZlICduY3YnIGZyb20geHRlcm0tMjU2Y29sb3IgKHBhdGNoIDE4OCkgLVRECisjCisjIDIwMDQtMDYtMjYKKyMJKiBhZGQgbWx0ZXJtIC1URAorIwkqIGFkZCB4dGVybS14Zjg2LXY0NCAtVEQKKyMJKiBtb2RpZnkgeHRlcm0tbmV3IGFrYSB4dGVybS14ZnJlZTg2IHRvIGFjY29tbW9kYXRlIGx1aXQsIHdoaWNoIHJlbGllcworIwkgIG9uIEcxIGJlaW5nIHVzZWQgdmlhIGFuIElTTy0yMDIyIGVzY2FwZSBzZXF1ZW5jZSAocmVwb3J0IGJ5CisjCSAgSnVsaXVzeiBDaHJvYm9jemVrKSAtVEQKKyMJKiBhZGQgJ2h1cmQnIGVudHJ5IC1URAorIworIyAyMDA0LTA3LTAzCisjCSogbWFrZSB4dGVybS14Zjg2LXY0MyBkZXJpdmVkIGZyb20geHRlcm0teGY4Ni12NDAgcmF0aGVyIHRoYW4KKyMJICB4dGVybS1iYXNpYyAtVEQKKyMJKiBhbGlnbiB3aXRoIHh0ZXJtICMxOTIncyB1c2Ugb2YgeHRlcm0tbmV3IC1URAorIwkqIHVwZGF0ZSB4dGVybS1uZXcgYW5kIHh0ZXJtLThiaXQgZm9yIGN2dmlzL2Nub3JtIHN0cmluZ3MgLVRECisjCSogbWFrZSB4dGVybS1uZXcgdGhlIGRlZmF1bHQgInh0ZXJtIiAtVEQKKyMKKyMgMjAwNC0wNy0xMAorIwkqIG1pbm9yIGZpeGVzIGZvciBlbXUgLVRECisjCSogYWRkIGVtdS0yMjAKKyMJKiBhZGQgcm1hbS9zbWFtIHRvIGxpbnV4IChUcmV2b3IgVmFuIEJyZW1lbikKKyMJKiBjaGFuZ2Ugd3lzZSBhY3NjIHN0cmluZ3MgdG8gdXNlICdpJyBtYXAgcmF0aGVyIHRoYW4gJ0knIC1URAorIwkqIGZpeGVzIGZvciBhdmF0YXIwIC1URAorIwkqIGZpeGVzIGZvciB2cDNhKyAtVEQKKyMKKyMgMjAwNC0wNy0xNworIwkqIGFkZCB4dGVybS1wYy1ma2V5cyAtVEQKKyMJKiByZXZpZXcvdXBkYXRlIGdub21lIGFuZCBnbm9tZS1yaDkwIGVudHJpZXMgKHByb21wdGVkIGJ5CisjCSAgUmVkaGF0IEJ1Z3ppbGxhICMxMjI4MTUpIC1URAorIwkqIHJldmlldy91cGRhdGUga29uc29sZSBlbnRyaWVzIC1URAorIwkqIGFkZCBzZ3IsIGNvcnJlY3Qgc2dyMCBmb3Iga3Rlcm0gYW5kIG1sdGVybSAtVEQKKyMJKiBjb3JyZWN0IHRzbCBzdHJpbmcgaW4ga3Rlcm0gLVRECisjCisjIDIwMDQtMDctMjQKKyMJKiBtYWtlIG5jc2EtbSBybWFjcy9zbWFjcyBjb25zaXN0ZW50IHdpdGggc2dyIC1URAorIwkqIGFkZCBzZ3IsIHJjL3NjIGFuZCBlY2ggdG8gc3lzY29ucyBlbnRyaWVzIC1URAorIwkqIGFkZCBmdW5jdGlvbi1rZXlzIHRvIGRlY2Fuc2kgLVRECisjCSogYWRkIHNnciB0byBtdGVybS1hbnNpIC1URAorIwkqIGFkZCBzZ3IsIGNpdmlzLCBjbm9ybSB0byBlbXUgLVRECisjCSogY29ycmVjdC9zaW1wbGlmeSBjdXAgaW4gYWRkcmluZm8gLVRECisjCSogY29ycmVjdGlvbnMgZm9yIGdub21lIGFuZCBrb25zb2xlIGVudHJpZXMKKyMJICAoUmVkaGF0IEJ1Z3ppbGxhICMxMjI4MTUpIC1IYW5zIGRlIEdvZWRlCisjCSogbW9kaWZ5IERFQyBlbnRyaWVzICh2dDIyMCwgZXRjKSwgdG8gYWRkIHNnciBzdHJpbmcsIGFuZCB0byB1c2UKKyMJICBJU08tMjAyMiBzdHJpbmdzIGZvciBybWFjcy9zbWFjcyAtVEQKKyMKKyMgMjAwNC0wNy0zMQorIwkqIHJlbmFtZSB4dGVybS1wYy1ma2V5cyB0byB4dGVybStwY2ZrZXlzIC1URAorIworIyAyMDA0LTA4LTA3CisjCSogaW1wcm92ZWQgcHV0dHkgZW50cnkgLVJvYmVydCBkZSBCYXRoCisjCisjIDIwMDQtMDgtMTQKKyMJKiByZW1vdmUgZGNoL2RjaDEgZnJvbSByeHZ0IGJlY2F1c2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5jb25zaXN0ZW50bHkKKyMJICB3aXRoIHRoZSBjb21tb24gdXNhZ2Ugb2YgYmNlL2VjaCAtVEQKKyMJKiByZW1vdmUga2hvbWUgZnJvbSB2dDIyMCAodnQyMjAncyBoYXZlIG5vIGhvbWUga2V5KSAtVEQKKyMJKiBhZGQgcnh2dCtwY2ZrZXlzIC1URAorIworIyAyMDA0LTA4LTIxCisjCSogbW9kaWZ5IHNldmVyYWwgZW50cmllcyB0byBlbnN1cmUgeHRlcm0gbW91c2UgYW5kIGN1cnNvciB2aXNpYmlsaXR5CisjCSAgYXJlIHJlc2V0IGluIHJzMiBzdHJpbmc6ICBodXJkLCBwdXR0eSwgZ25vbWUsIGtvbnNvbGUtYmFzZSwgbWx0ZXJtLAorIwkgIEV0ZXJtLCBzY3JlZW4uICAoVGhlIHh0ZXJtIGVudHJpZXMgYXJlIGxlZnQgYWxvbmUgLSBvbGQgb25lcyBmb3IKKyMJICBjb21wYXRpYmlsaXR5LCBhbmQgdGhlIG5ldyBvbmVzIGRvIG5vdCByZXF1aXJlIHRoaXMgY2hhbmdlKSAtVEQKKyMKKyMgMjAwNC0wOC0yOAorIwkqIGFkZCBtb3JwaG9zIGVudHJ5IC1QYXZlbCBGZWRpbgorIwkqIG1vZGlmeSBhbWlnYS04Yml0IHRvIGFkZCBraG9tZS9rZW5kL2tucC9rcHAgLVBhdmVsIEZlZGluCisjCSogY29ycmVjdGVkIFxFWzU/bCB0byBcRVs/NWwgaW4gdnQzMjAgZW50cmllcyAtVEQKKyMKKyMgMjAwNC0xMS0yMAorIwkqIHVwZGF0ZSB3c3Z0MjUgZW50cnkgLVRECisjCisjIDIwMDUtMDEtMjkKKyMJKiB1cGRhdGUgcGFpcnMgZm9yIHh0ZXJtLTg4Y29sb3IgYW5kIHh0ZXJtLTI1NmNvbG9yIHRvIHJlZmxlY3QgdGhlCisjCSAgbmN1cnNlcyBleHRlbmRlZC1jb2xvciBzdXBwb3J0IC1URAorIworIyAyMDA1LTAyLTI2CisjCSogbW9kaWZ5IHNnci9zZ3IwIGluIHh0ZXJtLW5ldyB0byBpbXByb3ZlIHRnZXRlbnQncyBkZXJpdmVkICJtZSIgLVRECisjCSogYWRkIGFpeHRlcm0tMTZjb2xvciB0byBkZW1vbnN0cmF0ZSAxNi1jb2xvciBjYXBhYmlsaXR5IC1URAorIworIyAyMDA1LTA0LTIzCisjCSogYWRkIG1lZGlhLWNvcHkgdG8gdnQxMDAgLVRECisjCSogY29ycmVjdGVkIGFjc2Mgc3RyaW5nIGZvciB2dDUyIC1URAorIworIyAyMDA1LTA0LTMwCisjCSogYWRkIGtVUCwga0ROICh1c2VyLWRlZmluZWQgc2hpZnRlZCB1cC9kb3duIGFycm93KSBkZWZpbml0aW9ucyBmb3IKKyMJICB4dGVybS1uZXcgLVRECisjCSogYWRkIGtVUDUsIGtVUDYsIGV0Yy4sIGZvciB4dGVybS1uZXcgYW5kIHJ4dnQgLVRECisjCisjIDIwMDUtMDUtMDcKKyMJKiByZS1jb3JyZWN0ZWQgYWNzYyBzdHJpbmcgZm9yIHZ0NTIgLVRECisjCisjIDIwMDUtMDUtMjgKKyMJKiBjb3JyZWN0ZWQgc3VuLWlsIHNnciBzdHJpbmcgd2hpY2ggcmVmZXJyZWQgdG8gYm9sZCBhbmQgdW5kZXJsaW5lIC1URAorIwkqIGFkZCBzdW4tY29sb3IgZW50cnkgLVRECisjCisjIDIwMDUtMDctMjMKKyMJKiBtb2RpZnkgc2dyMCBpbiBzZXZlcmFsIGVudHJpZXMgdG8gcmVzZXQgYWx0ZXJuYXRlLWNoYXJzZXQgYXMgaW4gdGhlCisjCSAgc2dyIHN0cmluZyAtVEQKKyMJKiBtb2RpZnkgc2dyIHN0cmluZyBvZiBwcmlzbTkgdG8gYmV0dGVyIG1hdGNoIHRoZSBpbmRpdmlkdWFsCisjCSAgYXR0cmlidXRlcyAtVEQKKyMKKyMgMjAwNS0xMC0xNQorIwkqIGNvcnJlY3Qgb3JkZXIgb2YgdXNlPSBpbiByeHZ0LWJhc2ljIC1URAorIworIyAyMDA1LTEwLTI2CisjCSogdXNlIGtpbmQva3JpIGFzIHNoaWZ0ZWQgdXAvZG93biBjdXJzb3Iga2V5cyBmb3IgeHRlcm0tbmV3IC1URAorIworIyAyMDA1LTExLTEyCisjCSogb3RoZXIgbWlub3IgZml4ZXMgdG8gY3lnd2luIGJhc2VkIG9uIHRhY2sgLVRECisjCSogY29ycmVjdCBzbWFjcyBpbiBjeWd3aW4gKHJlcG9ydCBieSBCYXVyemhhbiBJc21hZ3Vsb3YpLgorIworIyAyMDA2LTAyLTE4CisjCSogYWRkIG5zdGVybS0xNmNvbG9yIGVudHJ5IC1URAorIwkqIHJlbW92ZSBuY3YgZmxhZyBmcm9tIHh0ZXJtLTE2Y29sb3IgLVRECisjCSogcmVtb3ZlIHNldGYvc2V0YiBmcm9tIHh0ZXJtLTI1NmNvbG9yIHRvIG1hdGNoIHh0ZXJtICMyMDkgLVRECisjCSogdXBkYXRlIG1sdGVybSBlbnRyeSB0byAyLjkuMiAtVEQKKyMKKyMgMjAwNi0wMi0yNQorIwkqIGZpeGVzIHRvIG1ha2UgbnN0ZXJtLTE2Y29sb3IgbWF0Y2ggcmVwb3J0CisjCSAgYnkgQ2hyaXN0aWFuIEViZXJ0IC1BbGFpbiBCZW5jaAorIworIyAyMDA2LTA0LTIyCisjCSogYWRkIHh0ZXJtKzI1NmNvbG9yIGJ1aWxkaW5nIGJsb2NrIC1URAorIwkqIGFkZCBnbm9tZS0yNTZjb2xvciwgcHV0dHktMjU2Y29sb3IsIHJ4dnQtMjU2Y29sb3IgLVRECisjCisjIDIwMDYtMDUtMDYKKyMJKiBhZGQgaHB0ZXJtLWNvbG9yIC1URAorIworIyAyMDA2LTA2LTI0CisjCSogYWRkIHh0ZXJtK3BjYzAsIHh0ZXJtK3BjYzEsIHh0ZXJtK3BjYzIsIHh0ZXJtK3BjYzMgLVRECisjCSogYWRkIGdub21lLWZjNSAocHJvbXB0ZWQgYnkgR2VuVG9vICMxMjI1NjYpIC1URAorIwkqIHJlbW92ZSBvYnNvbGV0ZS9taXNsZWFkaW5nIGNvbW1lbnRzIGFib3V0IGtjYnQgb24gTGludXggLUFsYWluIEJlbmNoCisjCSogaW1wcm92ZSB4dGVybS0yNTZjb2xvciBieSBjb21iaW5pbmcgdGhlIGlibSsxNmNvbG9yIHNldGFmL3NldGFiCisjCSAgc3RyaW5ncyB3aXRoIFNHUiA0OC4gIFRoZSBzZXRmL3NldGIgc3RyaW5ncyBhbHNvIGFyZSBjYW5jZWxsZWQgaGVyZQorIwkgIHJhdGhlciB0aGFuIG9taXR0ZWQgc28gZGVyaXZlZCBlbnRyaWVzIHdpbGwgY2FuY2VsIHRob3NlIGFsc28gLUFsYWluCisjCSAgQmVuY2gKKyMKKyMgMjAwNi0wNy0wMQorIwkqIGFkZCBzb21lIG5vdGVzIHJlZ2FyZGluZyBjb3B5cmlnaHQgdG8gdGVybWluZm8uc3JjIC1URAorIwkqIHVzZSByeHZ0K3BjZmtleXMgaW4gRXRlcm0gLVRECisjCSogcmVtb3ZlIGttIGFuZCBmbGFzaCBmcm9tIGdub21lLCBFdGVybSBhbmQgcnh2dCBzaW5jZSB0aGV5IGRvIG5vdCB3b3JrCisjCSAgYXMgb25lIHdvdWxkIGV4cGVjdCAoa20gc2VuZHMgRVNDIHJhdGhlciB0aGFuIHNldHRpbmcgdGhlIDh0aCBiaXQKKyMJICBvZiB0aGUga2V5KSAtVEQKKyMJKiBhZGQvdXNlIGFuc2krZW5xLCB2dDEwMCtlbnEgYW5kIHZ0MTAyK2VucSAtVEQKKyMJKiBhZGQga29uc29sZS1zb2xhcmlzIC1URAorIworIyAyMDA2LTA3LTIyCisjCSogdXBkYXRlIHh0ZXJtLXN1biBhbmQgeHRlcm0tc2NvIGVudHJpZXMgdG8gbWF0Y2ggeHRlcm0gIzIxNiAtVEQKKyMJKiBtb2RpZnkgaXMyL3JzMiBzdHJpbmdzIGZvciB4dGVybS1yNiBhcyBwZXIgZml4IGluIHh0ZXJtICMxNDggLVRECisjCSogbW9kaWZ5IHh0ZXJtLTI0IHRvIGluaGVyaXQgZnJvbSAieHRlcm0iIC1URAorIwkqIGFkZCB4aXRlcm0gZW50cnkgLVRECisjCSogYWRkIHB1dHR5LXZ0MTAwIGVudHJ5IC1URAorIwkqIGNvcnJlY3RlZCBzcGVsbGluZyBvZiBNaWNoYWVsIEEgRG9ybWFuJ3MgbmFtZSwgcHJvbXB0ZWQgYnkKKyMJICBodHRwOi8vd3d3LmFkdm9nYXRvLm9yZy9wZXJzb24vbWRvcm1hbi9kaWFyeS5odG1sIC1URAorIworIyAyMDA2LTA4LTA1CisjCSogYWRkIHh0ZXJtK3BjZjAsIHh0ZXJtK3BjZjIgZnJvbSB4dGVybSAjMjE2IC1URAorIwkqIHVwZGF0ZSB4dGVybStwY2ZrZXlzIHRvIG1hdGNoIHh0ZXJtICMyMTYgLVRECisjCisjIDIwMDYtMDgtMTcKKyMJKiBtYWtlIGRlc2NyaXB0aW9ucyBvZiB4dGVybSBlbnRyaWVzIGNvbnNpc3RlbnQgd2l0aCBpdHMgdGVybWluZm8gLVRECisjCisjIDIwMDYtMDgtMjYKKyMJKiBhZGQgeGZjZSwgbWd0IC1URAorIworIyAyMDA2LTA5LTAyCisjCSogY29ycmVjdCBhY3NjIHN0cmluZyBpbiBrdGVybSAtVEQKKyMKKyMgMjAwNi0wOS0wOQorIwkqIGFkZCBrb24gZW50cnkgLVRECisjCSogcmVtb3ZlIGludmlzIGZyb20gbGludXggYW5kIHJlbGF0ZWQgZW50cmllcywgYWRkIGtsb25lK3NncjggZm9yIHRob3NlCisjCSAgdGhhdCBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgKG9yIGhhdmUgbm90IGJlZW4gc2hvd24gdG8gbGFjayBpdCkgLVRECisjCisjIDIwMDYtMDktMjMKKyMJKiBhZGQga2EyLCBrYjEsIGtiMywga2MyIHRvIHZ0MjIwLWtleXBhZCBhcyBhbiBleHRlbnNpb24gLVRECisjCSogbWlub3IgaW1wcm92ZW1lbnRzIHRvIHJ4dnQrcGNma2V5cyAtVEQKKyMKKyMgMjAwNi0wOS0zMAorIwkqIGZpeCBhIGZldyB0eXBvcyBpbiBpZi90aGVuL2Vsc2UgZXhwcmVzc2lvbnMgLVRECisjCisjIDIwMDYtMTAtMDcKKyMJKiBhZGQgc2V2ZXJhbCBHTlUgU2NyZWVuIHZhcmlhdGlvbnMgd2l0aCAxNi0gYW5kIDI1Ni1jb2xvcnMsIGFuZAorIwkgIHN0YXR1cyBsaW5lIChBbGFpbiBCZW5jaCkuCisjCisjIDIwMDctMDMtMDMKKyMJKiBhZGQgTmV3YnVyeSBEYXRhIGVudHJpZXMgKEplYW4tQ2hhcmxlcyBCaWxsYXVkKS4KKyMKKyMgMjAwNy0wNi0xMAorIwkqIGNvcnJlY3RlZCB4dGVybStwY2YyIG1vZGlmaWVycyBmb3IgRjEtRjQsIG1hdGNoIHh0ZXJtICMyMjYgLVRECisjCisjIDIwMDctMDctMTQKKyMJKiByZXN0b3JlIHNlY3Rpb24gb2YgcHJlLW5jdXJzZXMtNC4yIGNoYW5nZWxvZyB0byBmaXggYXR0cmlidXRpb24gLVRECisjCSogYWRkIGtvbnNvbGUtMjU2Y29sb3IgZW50cnkgLVRECisjCisjIDIwMDctMDgtMTgKKyMJKiBhZGQgOXRlcm0gZW50cnkgKHJlcXVlc3QgYnkgSnVoYXBla2thIFRvbHZhbmVuKSAtVEQKKyMKKyMgMjAwNy0xMC0xMworIwkqIGNvcnJlY3Qga0lDIGluIHJ4dnQrcGNma2V5cyAocHJvbXB0ZWQgYnkgRGViaWFuICM0NDY0NDQpIC1URAorIwkqIGFkZCBzaGlmdC1jb250cm9sLSBhbmQgY29udHJvbC1tb2RpZmllZCBrZXlzIGZvciByeHZ0IGVkaXRpbmcKKyMJICBrZXlwYWQgLVRECisjCSogdXBkYXRlIG1sdGVybSBlbnRyeSB0byAyLjkuMyAtVEQKKyMJKiBhZGQgbWx0ZXJtK3BjZmtleXMgLVRECisjCisjIDIwMDctMTAtMjAKKyMJKiBtb3ZlIGtMRlQsIGtSSVQsIGtpbmQgYW5kIGtyaSBjYXBhYmlsaXRpZXMgZnJvbSB4dGVybS1uZXcgdG8KKyMJICB4dGVybStwY2MwLCBldGMuLCB0byBtYWtlIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkaW5nIGJsb2NrcyByZWZsZWN0CisjCSAgeHRlcm0ncyBjYXBhYmlsaXRpZXMgLVRECisjCSogYWRkIG1yeHZ0IGVudHJ5IC1URAorIwkqIGFkZCB4dGVybStyNmYyLCB1c2UgaW4gbWx0ZXJtIGFuZCBtcnh2dCBlbnRyaWVzIC1URAorIworIyAyMDA3LTExLTAzCisjCSogY29ycmVjdCBhY3NjIHN0cmluZ3MgZm9yIGgxOSBhbmQgejEwMCAoQmVuamFtaW4gU2l0dGxlcikKKyMKKyMgMjAwNy0xMS0xMQorIwkqIHVzZSB4dGVybS14Zjg2LXY0NCBmb3IgInh0ZXJtLXhmcmVlODYiLCByZWZsZWN0aW5nIGNoYW5nZXMgdG8KKyMJICB4dGVybSBzdGFydGluZyB3aXRoIHBhdGNoICMyMTYgLVRECisjCSogbWFrZSBsZWdhY3kgeHRlcm0gZW50cmllcyBzdWNoIGFzIHh0ZXJtLTI0IGluaGVyaXQgZnJvbSB4dGVybS1vbGQsCisjCSAgdG8gbWF0Y2ggeHRlcm0gIzIzMCAtVEQKKyMJKiBleHRlbmQgeHRlcm0rcGNjWCBlbnRyaWVzIHRvIG1hdGNoIHh0ZXJtICMyMzAgLVRECisjCSogYWRkIHh0ZXJtK2FwcCwgeHRlcm0rbm9hcHAsIGZyb20geHRlcm0gIzIzMCAtVEQKKyMJKiBhZGQvdXNlIHh0ZXJtK3BjZTIgZnJvbSB4dGVybSAjMjMwLCBpbiB4dGVybStwY2ZrZXlzIC1URAorIworIyAyMDA4LTA0LTE5CisjCSogYWRkIHNjcmVlbi5yeHZ0IC1URAorIworIyAyMDA4LTA0LTI4CisjCSogYWRkIHNjcmVlbitma2V5cyAocHJvbXB0ZWQgYnkgRGViaWFuICMgNDc4MDk0KSAtVEQKKyMKKyMgMjAwOC0wNi0yOAorIwkqIGFkZCBzY3JlZW4ubWx0ZXJtIC1URAorIwkqIGltcHJvdmUgbWx0ZXJtIGFuZCBtbHRlcm0rcGNma2V5cyAtVEQKKyMKKyMgMjAwOC0wOC0yMworIwkqIGFkZCBFdGVybS0yNTZjb2xvciwgRXRlcm0tODhjb2xvciAtVEQKKyMJKiBhZGQgcnh2dC04OGNvbG9yIC1URAorIworIyAyMDA4LTEwLTEyCisjCSogYWRkIHRlcmF0ZXJtNC41OSBlbnRyeSwgdXNlIHRoYXQgYXMgcHJpbWFyeSB0ZXJhdGVybSBlbnRyeSwgcmVuYW1lCisjCSAgb3JpZ2luYWwgdG8gdGVyYXRlcm0yLjMgLVRECisjCSogdXBkYXRlICJnbm9tZSIgdG8gMi4yMi4zIC1URAorIwkqIHVwZGF0ZSAia29uc29sZSIgdG8gMS42LjYgLVRECisjCSogYWRkICJhdGVybSIgLVRECisjCSogYWRkICJsaW51eDIuNi4yNiIgLVRECisjCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MuCisjIExvY2FsIFZhcmlhYmxlczoKKyMgZmlsbC1wcmVmaXg6Ilx0IgorIyBmaWxsLWNvbHVtbjo3NQorIyBjb21tZW50LWNvbHVtbjowCisjIGNvbW1lbnQtc3RhcnQtc2tpcDoiXiMrIgorIyBjb21tZW50LXN0YXJ0OiIjICIKKyMgY29tcGlsZS1jb21tYW5kOiJ0aWMgLWMgdGVybWluZm8ubWFzdGVyIgorIyBFbmQ6CisjIyMjIyMjIyBTSEFOVElIISAgU0hBTlRJSCEgIFNIQU5USUghCmRpZmYgLS1naXQgYS9tay0wdGguYXdrIGIvbWstMHRoLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTkxY2NhCi0tLSAvZGV2L251bGwKKysrIGIvbWstMHRoLmF3awpAQCAtMCwwICsxLDEwOSBAQAorIyAkSWQ6IG1rLTB0aC5hd2ssdiAxLjE3IDIwMDUvMDEvMjIgMTY6MzE6NDAgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NiwxOTk3CisjCisjIEdlbmVyYXRlIGxpc3Qgb2Ygc291cmNlcyBmb3IgYSBsaWJyYXJ5LCB0b2dldGhlciB3aXRoIGxpbnQvbGludGxpYiBydWxlcworIworIyBWYXJpYWJsZXM6CisjCWxpYm5hbWUgKGxpYnJhcnkgbmFtZSwgZS5nLiwgIm5jdXJzZXMiLCAicGFuZWwiLCAiZm9ybXMiLCAibWVudXMiKQorIwlzdWJzZXRzIChpcyB1c2VkIGhlcmUgdG8gZGVjaWRlIGlmIHdpZGUtY2hhcmFjdGVyIGNvZGUgaXMgdXNlZCkKKyMKK0JFR0lOCXsKKwkJdXNpbmcgPSAwOworCQlmb3VuZCA9IDA7CisJfQorCSEvXltAI10vIHsKKwkJaWYgKHVzaW5nID09IDApCisJCXsKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjIGdlbmVyYXRlZCBieSBtay0wdGguYXdrIgorCQkJcHJpbnRmICIjICAgbGlibmFtZTogICAgJXNcbiIsIGxpYm5hbWUKKwkJCXByaW50ZiAiIyAgIHN1YnNldHM6ICAgICVzXG4iLCBzdWJzZXRzCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLlNVRkZJWEVTOiAuYyAuY2MgLmggLmkgLmlpIgorCQkJcHJpbnQgICIuYy5pIDoiCisJCQlwcmludGYgIlx0JChDUFApICQoQ1BQRkxBR1MpICQ8ID4kQFxuIgorCQkJcHJpbnQgICIuY2MuaWkgOiIKKwkJCXByaW50ZiAiXHQkKENQUCkgJChDUFBGTEFHUykgJDwgPiRAXG4iCisJCQlwcmludCAgIi5oLmkgOiIKKwkJCXByaW50ZiAiXHQkKENQUCkgJChDUFBGTEFHUykgJDwgPiRAXG4iCisJCQlwcmludCAgIiIKKwkJCXVzaW5nID0gMTsKKwkJfQorCQlpZiAoICQwICE9ICIiICYmICQxICE9ICJsaW5rX3Rlc3QiICkKKwkJeworCQkJaWYgKCBmb3VuZCA9PSAwICkKKwkJCXsKKwkJCQlpZiAoIHN1YnNldHMgfiAvd2lkZWNoYXIvICkKKwkJCQkJd2lkZWNoYXIgPSAxOworCQkJCWVsc2UKKwkJCQkJd2lkZWNoYXIgPSAwOworCQkJCXByaW50ZiAiQ19TUkMgPSIKKwkJCQlpZiAoICQyID09ICJsaWIiICkKKwkJCQkJZm91bmQgPSAxCisJCQkJZWxzZQorCQkJCQlmb3VuZCA9IDIKKwkJCX0KKwkJCWlmICggbGlibmFtZSA9PSAiYysrIiB8fCBsaWJuYW1lID09ICJjKyt3IiApIHsKKwkJCQlwcmludGYgIiBcXFxuXHQlcy8lcy5jYyIsICQzLCAkMQorCQkJfSBlbHNlIGlmICggd2lkZWNoYXIgPT0gMSB8fCAkMyAhPSAiJCh3aWRlKSIgKSB7CisJCQkJcHJpbnRmICIgXFxcblx0JXMvJXMuYyIsICQzLCAkMQorCQkJfQorCQl9CisJfQorRU5ECXsKKwkJcHJpbnQgICIiCisJCWlmICggZm91bmQgPT0gMSApCisJCXsKKwkJCXByaW50ICAiIgorCQkJcHJpbnRmICIjIFByb2R1Y2luZyBsbGliLWwlcyBpcyB0aW1lLWNvbnN1bWluZywgc28gdGhlcmUncyBubyBkaXJlY3QtZGVwZW5kZW5jeSBmb3JcbiIsIGxpYm5hbWUKKwkJCXByaW50ICAiIyBpdCBpbiB0aGUgbGludGxpYiBydWxlLiAgV2UnbGwgb25seSByZW1vdmUgaW4gdGhlIGNsZWFuZXN0IHNldHVwLiIKKwkJCXByaW50ICAiY2xlYW4gOjoiCisJCQlwcmludGYgIlx0cm0gLWYgbGxpYi1sJXMuKlxuIiwgbGlibmFtZQorCQkJcHJpbnQgICIiCisJCQlwcmludCAgInJlYWxjbGVhbiA6OiIKKwkJCXByaW50ZiAiXHRybSAtZiBsbGliLWwlc1xuIiwgbGlibmFtZQorCQkJcHJpbnQgICIiCisJCQlwcmludGYgImxsaWItbCVzIDogJChDX1NSQylcbiIsIGxpYm5hbWUKKwkJCXByaW50ZiAiXHRjcHJvdG8gLWEgLWwgLUROQ1VSU0VTX0VOQUJMRV9TVERCT09MX0g9MCAtRExJTlQgJChDUFBGTEFHUykgJChDX1NSQykgPiRAXG4iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAibGludGxpYiA6IgorCQkJcHJpbnRmICJcdHNoICQoc3JjZGlyKS8uLi9taXNjL21ha2VsbGliICVzICQoQ1BQRkxBR1MpIiwgbGlibmFtZQorCQkJcHJpbnQgIiIKKwkJCXByaW50ICJsaW50IDoiCisJCQlwcmludCAiXHQkKExJTlQpICQoTElOVF9PUFRTKSAkKENQUEZMQUdTKSAkKENfU1JDKSAkKExJTlRfTElCUykiCisJCX0KKwkJZWxzZQorCQl7CisJCQlwcmludCAgIiIKKwkJCXByaW50ICAibGludGxpYiA6IgorCQkJcHJpbnQgICJcdEBlY2hvIG5vIGFjdGlvbiBuZWVkZWQiCisJCX0KKwl9CmRpZmYgLS1naXQgYS9tay0xc3QuYXdrIGIvbWstMXN0LmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY1NGVhCi0tLSAvZGV2L251bGwKKysrIGIvbWstMXN0LmF3awpAQCAtMCwwICsxLDQ3NCBAQAorIyAkSWQ6IG1rLTFzdC5hd2ssdiAxLjc4IDIwMDcvMDMvMjQgMjI6MTA6NTUgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorIworIyBHZW5lcmF0ZSBsaXN0IG9mIG9iamVjdHMgZm9yIGEgZ2l2ZW4gbW9kZWwgbGlicmFyeQorIyBWYXJpYWJsZXM6CisjCW5hbWUJCSAgKGxpYnJhcnkgbmFtZSwgZS5nLiwgIm5jdXJzZXMiLCAicGFuZWwiLCAiZm9ybXMiLCAibWVudXMiKQorIwl0cmFjZXMJCSAgKCJhbGwiIG9yICJERUJVRyIsIHRvIGNvbnRyb2wgd2hldGhlciB0cmFjaW5nIGlzIGNvbXBpbGVkIGluKQorIwlNT0RFTAkJICAoZS5nLiwgIkRFQlVHIiwgdXBwZXJjYXNlOyB0b3VwcGVyIGlzIG5vdCBwb3J0YWJsZSkKKyMJbW9kZWwJCSAgKGRpcmVjdG9yeSBpbnRvIHdoaWNoIHdlIGNvbXBpbGUsIGUuZy4sICJvYmoiKQorIwlwcmVmaXgJCSAgKGUuZy4sICJsaWIiLCBmb3IgVW5peC1zdHlsZSBsaWJyYXJpZXMpCisjCXN1ZmZpeAkJICAoZS5nLiwgIl9nLmEiLCBmb3IgZGVidWcgbGlicmFyaWVzKQorIwlzdWJzZXQJCSAgKCJub25lIiwgImJhc2UiLCAiYmFzZStleHRfZnVuY3MiIG9yICJ0ZXJtbGliIiwgZXRjLikKKyMJU2hsaWJWZXIJICAoInJlbCIsICJhYmkiIG9yICJhdXRvIiwgdG8gYXVnbWVudCBEb0xpbmtzIHZhcmlhYmxlKQorIwlTaGxpYlZlckluZml4ICgieWVzIiBvciAibm8iLCBkZXRlcm1pbmVzIGxvY2F0aW9uIG9mIHZlcnNpb24gIykKKyMgICBUZXJtbGliUm9vdCAgICgidGluZm8iIG9yIG90aGVyIHJvb3QgZm9yIGxpYnRlcm0uc28pCisjICAgVGVybWxpYlN1ZmZpeCAoIi5zbyIgb3Igb3RoZXIgc3VmZml4IGZvciBsaWJ0ZXJtLnNvKQorIwlSZUxpbmsJCSAgKCJ5ZXMiLCBvciAibm8iLCBmbGFnIHRvIHJlYnVpbGQgc2hhcmVkIGxpYnMgb24gaW5zdGFsbCkKKyMJRG9MaW5rcwkJICAoInllcyIsICJyZXZlcnNlIiBvciAibm8iLCBmbGFnIHRvIGFkZCBzeW1ib2xpYyBsaW5rcykKKyMJcm1Tb0xvY3MJICAoInllcyIgb3IgIm5vIiwgZmxhZyB0byBhZGQgZXh0cmEgY2xlYW4gdGFyZ2V0KQorIwlsZGNvbmZpZwkgIChwYXRoIGZvciB0aGlzIHRvb2wsIGlmIHVzZWQpCisjCW92ZXJ3cml0ZQkgICgieWVzIiBvciAibm8iLCBmbGFnIHRvIGFkZCBsaW5rIHRvIGxpYmN1cnNlcy5hCisjCWRlcGVuZAkJICAob3B0aW9uYWwgZGVwZW5kZW5jaWVzIGZvciBhbGwgb2JqZWN0cywgZS5nLCBuY3Vyc2VzX2NmZy5oKQorIwlob3N0CQkgIChjcm9zcy1jb21waWxlIGhvc3QsIGlmIGFueSkKKyMKKyMgTm90ZXM6CisjCUNMSVhzIG5hd2sgZG9lcyBub3QgbGlrZSB1bmRlcnNjb3JlcyBpbiBjb21tYW5kLWxpbmUgdmFyaWFibGUgbmFtZXMuCisjCU1peGVkLWNhc2UgdmFyaWFibGUgbmFtZXMgYXJlIG9rLgorIwlIUC9VWCByZXF1aXJlcyBzaGFyZWQgbGlicmFyaWVzIHRvIGhhdmUgZXhlY3V0YWJsZSBwZXJtaXNzaW9ucy4KKyMKK2Z1bmN0aW9uIGlzX3RpY2xpYigpIHsKKwkJcmV0dXJuICggc3Vic2V0IH4gL150aWNsaWIkLyApOworCX0KK2Z1bmN0aW9uIGlzX3Rlcm1saWIoKSB7CisJCXJldHVybiAoIHN1YnNldCB+IC9eKHRpY2xpYlwrKT90ZXJtbGliKFwrZXh0X3RpbmZvKT8kLyApOworCX0KKyMgc2VlIGxpYl9uYW1lCitmdW5jdGlvbiBsaWJfbmFtZV9vZihhX25hbWUpIHsKKwkJcmV0dXJuIHNwcmludGYoIiVzJXMlcyIsIHByZWZpeCwgYV9uYW1lLCBzdWZmaXgpCisJfQorIyBzZWUgaW1wX25hbWUKK2Z1bmN0aW9uIGltcF9uYW1lX29mKGFfbmFtZSkgeworCQlpZiAoU2hsaWJWZXJJbmZpeCA9PSAiY3lnZGxsIikgeworCQkJcmVzdWx0ID0gc3ByaW50ZigiJXMlcyVzLmEiLCBwcmVmaXgsIGFfbmFtZSwgc3VmZml4KTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9ICIiOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorIyBzZWUgYWJpX25hbWUKK2Z1bmN0aW9uIGFiaV9uYW1lX29mKGFfbmFtZSkgeworCQlpZiAoU2hsaWJWZXJJbmZpeCA9PSAiY3lnZGxsIikgeworCQkJcmVzdWx0ID0gc3ByaW50ZigiJXMlcyQoQUJJX1ZFUlNJT04pJXMiLCAiY3lnIiwgYV9uYW1lLCBzdWZmaXgpOworCQl9IGVsc2UgaWYgKFNobGliVmVySW5maXggPT0gInllcyIpIHsKKwkJCXJlc3VsdCA9IHNwcmludGYoIiVzJXMuJChBQklfVkVSU0lPTiklcyIsIHByZWZpeCwgYV9uYW1lLCBzdWZmaXgpOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gc3ByaW50ZigiJXMuJChBQklfVkVSU0lPTikiLCBsaWJfbmFtZV9vZihhX25hbWUpKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKyMgc2VlIHJlbF9uYW1lCitmdW5jdGlvbiByZWxfbmFtZV9vZihhX25hbWUpIHsKKwkJaWYgKFNobGliVmVySW5maXggPT0gImN5Z2RsbCIpIHsKKwkJCXJlc3VsdCA9IHNwcmludGYoIiVzJXMkKFJFTF9WRVJTSU9OKSVzIiwgImN5ZyIsIGFfbmFtZSwgc3VmZml4KTsKKwkJfSBlbHNlIGlmIChTaGxpYlZlckluZml4ID09ICJ5ZXMiKSB7CisJCQlyZXN1bHQgPSBzcHJpbnRmKCIlcyVzLiQoUkVMX1ZFUlNJT04pJXMiLCBwcmVmaXgsIGFfbmFtZSwgc3VmZml4KTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IHNwcmludGYoIiVzLiQoUkVMX1ZFUlNJT04pIiwgbGliX25hbWVfb2YoYV9uYW1lKSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisjIHNlZSBlbmRfbmFtZQorZnVuY3Rpb24gZW5kX25hbWVfb2YoYV9uYW1lKSB7CisJCWlmICggTU9ERUwgIT0gIlNIQVJFRCIgKSB7CisJCQlyZXN1bHQgPSBsaWJfbmFtZV9vZihhX25hbWUpOworCQl9IGVsc2UgaWYgKCBEb0xpbmtzID09ICJyZXZlcnNlIikgeworCQkJcmVzdWx0ID0gbGliX25hbWVfb2YoYV9uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWlmICggU2hsaWJWZXIgPT0gInJlbCIgKSB7CisJCQkJcmVzdWx0ID0gcmVsX25hbWVfb2YoYV9uYW1lKTsKKwkJCX0gZWxzZSBpZiAoIFNobGliVmVyID09ICJhYmkiIHx8IFNobGliVmVyID09ICJjeWdkbGwiICkgeworCQkJCXJlc3VsdCA9IGFiaV9uYW1lX29mKGFfbmFtZSk7CisJCQl9IGVsc2UgeworCQkJCXJlc3VsdCA9IGxpYl9uYW1lX29mKGFfbmFtZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdAorCX0KK2Z1bmN0aW9uIHN5bWxpbmsoc3JjLGRzdCkgeworCQlpZiAoIHNyYyAhPSBkc3QgKSB7CisJCQlwcmludGYgInJtIC1mICVzOyAiLCBkc3QKKwkJCXByaW50ZiAiJChMTl9TKSAlcyAlczsgIiwgc3JjLCBkc3QKKwkJfQorCX0KK2Z1bmN0aW9uIHJtbGluayhkaXJlY3RvcnksIGRzdCkgeworCQlwcmludGYgIlx0LXJtIC1mICVzLyVzXG4iLCBkaXJlY3RvcnksIGRzdAorCX0KK2Z1bmN0aW9uIHJlbW92ZWxpbmtzKGRpcmVjdG9yeSkgeworCQlybWxpbmsoZGlyZWN0b3J5LCBlbmRfbmFtZSk7CisJCWlmICggRG9MaW5rcyA9PSAicmV2ZXJzZSIgKSB7CisJCQlpZiAoIFNobGliVmVyID09ICJyZWwiICkgeworCQkJCXJtbGluayhkaXJlY3RvcnksIGFiaV9uYW1lKTsKKwkJCQlybWxpbmsoZGlyZWN0b3J5LCByZWxfbmFtZSk7CisJCQl9IGVsc2UgaWYgKCBTaGxpYlZlciA9PSAiYWJpIiApIHsKKwkJCQlybWxpbmsoZGlyZWN0b3J5LCBhYmlfbmFtZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIFNobGliVmVyID09ICJyZWwiICkgeworCQkJCXJtbGluayhkaXJlY3RvcnksIGFiaV9uYW1lKTsKKwkJCQlybWxpbmsoZGlyZWN0b3J5LCBsaWJfbmFtZSk7CisJCQl9IGVsc2UgaWYgKCBTaGxpYlZlciA9PSAiYWJpIiApIHsKKwkJCQlybWxpbmsoZGlyZWN0b3J5LCBsaWJfbmFtZSk7CisJCQl9CisJCX0KKwl9CitmdW5jdGlvbiBtYWtlX3NobGliKG9ianMsIHNobGliX2xpc3QpIHsKKwkJcHJpbnRmICJcdCQoTUtfU0hBUkVEX0xJQikgJCglc19PQkpTKSAkKCVzKSAkKExERkxBR1MpXG4iLCBvYmpzLCBzaGxpYl9saXN0CisJfQorZnVuY3Rpb24gc2hhcmVkbGlua3MoZGlyZWN0b3J5KSB7CisJCWlmICggU2hsaWJWZXIgIT0gImF1dG8iICYmIFNobGliVmVyICE9ICJjeWdkbGwiICkgeworCQkJcHJpbnRmICJcdGNkICVzICYmICgiLCBkaXJlY3RvcnkKKwkJCWlmICggRG9MaW5rcyA9PSAicmV2ZXJzZSIgKSB7CisJCQkJaWYgKCBTaGxpYlZlciA9PSAicmVsIiApIHsKKwkJCQkJc3ltbGluayhsaWJfbmFtZSwgYWJpX25hbWUpOworCQkJCQlzeW1saW5rKGFiaV9uYW1lLCByZWxfbmFtZSk7CisJCQkJfSBlbHNlIGlmICggU2hsaWJWZXIgPT0gImFiaSIgKSB7CisJCQkJCXN5bWxpbmsobGliX25hbWUsIGFiaV9uYW1lKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICggU2hsaWJWZXIgPT0gInJlbCIgKSB7CisJCQkJCXN5bWxpbmsocmVsX25hbWUsIGFiaV9uYW1lKTsKKwkJCQkJc3ltbGluayhhYmlfbmFtZSwgbGliX25hbWUpOworCQkJCX0gZWxzZSBpZiAoIFNobGliVmVyID09ICJhYmkiICkgeworCQkJCQlzeW1saW5rKGFiaV9uYW1lLCBsaWJfbmFtZSk7CisJCQkJfQorCQkJfQorCQkJcHJpbnRmICIpXG4iCisJCX0KKwl9CisjIHRlcm1saWIgbWF5IGJlIG5hbWVkIGV4cGxpY2l0bHkgdmlhICItLXdpdGgtdGVybWxpYj1YWFgiLCB3aGljaCBvdmVycmlkZXMKKyMgYW55IHN1ZmZpeC4gIFRlbXBvcmFyaWx5IG92ZXJyaWRlICJzdWZmaXgiIHRvIGFjY291bnQgZm9yIHRoaXMuCitmdW5jdGlvbiB0ZXJtbGliX2VuZF9vZigpIHsKKwl0ZXJtbGliX3NhdmVfc3VmZml4ID0gc3VmZml4OworCXN1ZmZpeCA9IFRlcm1saWJTdWZmaXg7CisJdGVybWxpYl90ZW1wX3Jlc3VsdCA9IGVuZF9uYW1lX29mKFRlcm1saWJSb290KTsKKwlzdWZmaXggPSB0ZXJtbGliX3NhdmVfc3VmZml4OworCXJldHVybiB0ZXJtbGliX3RlbXBfcmVzdWx0OworfQorZnVuY3Rpb24gc2hsaWJfYnVpbGQoZGlyZWN0b3J5KSB7CisJCWRzdF9saWJzID0gc3ByaW50ZigiJXMvJXMiLCBkaXJlY3RvcnksIGVuZF9uYW1lKTsKKwkJcHJpbnRmICIlcyA6IFxcXG4iLCBkc3RfbGlicworCQlwcmludGYgIlx0XHQlcyBcXFxuIiwgZGlyZWN0b3J5CisJCWlmIChzdWJzZXQgfiAvXmJhc2UvIHx8IHN1YnNldCA9PSAidGljbGliIiApIHsKKwkJCXNhdmVfc3VmZml4ID0gc3VmZml4CisJCQlzdWIoL15bXi5dXC4vLCIuIixzdWZmaXgpCisJCQlpZiAoZGlyZWN0b3J5ICE9ICIuLi9saWIiKSB7CisJCQkJcHJpbnRmICJcdFx0JXMvJXMgXFxcbiIsICIuLi9saWIiLCB0ZXJtbGliX2VuZF9vZigpOworCQkJfQorCQkJcHJpbnRmICJcdFx0JXMvJXMgXFxcbiIsIGRpcmVjdG9yeSwgdGVybWxpYl9lbmRfb2YoKTsKKwkJCXN1ZmZpeCA9IHNhdmVfc3VmZml4CisJCX0KKwkJcHJpbnRmICJcdFx0JCglc19PQkpTKVxuIiwgT0JKUworCQlwcmludGYgIlx0QGVjaG8gbGlua2luZyAkQFxuIgorCQlpZiAoIGlzX3RpY2xpYigpICkgeworCQkJbWFrZV9zaGxpYihPQkpTLCAiVElDU19MSVNUIikKKwkJfSBlbHNlIGlmICggaXNfdGVybWxpYigpICkgeworCQkJbWFrZV9zaGxpYihPQkpTLCAiVElORk9fTElTVCIpCisJCX0gZWxzZSB7CisJCQltYWtlX3NobGliKE9CSlMsICJTSExJQl9MSVNUIikKKwkJfQorCQlzaGFyZWRsaW5rcyhkaXJlY3RvcnkpCisJfQorZnVuY3Rpb24gc2hsaWJfaW5zdGFsbChkaXJlY3RvcnkpIHsKKwkJc3JjX2xpYjEgPSBzcHJpbnRmKCIuLi9saWIvJXMiLCBlbmRfbmFtZSk7CisJCWRzdF9saWIxID0gc3ByaW50ZigiJXMvJXMiLCBkaXJlY3RvcnksIGVuZF9uYW1lKTsKKwkJcHJpbnRmICIlcyA6IFxcXG4iLCBkc3RfbGliMQorCQlwcmludGYgIlx0XHQlcyBcXFxuIiwgZGlyZWN0b3J5CisJCXByaW50ZiAiXHRcdCVzXG4iLCBzcmNfbGliMQorCQlwcmludGYgIlx0QGVjaG8gaW5zdGFsbGluZyAkQFxuIgorCQlwcmludGYgIlx0JChJTlNUQUxMX0xJQikgJXMgJXNcbiIsIHNyY19saWIxLCBkc3RfbGliMTsKKwkJc2hhcmVkbGlua3MoZGlyZWN0b3J5KQorCX0KK2Z1bmN0aW9uIGluc3RhbGxfZGxsKGRpcmVjdG9yeSxmaWxlbmFtZSkgeworCQlzcmNfbmFtZSA9IHNwcmludGYoIi4uL2xpYi8lcyIsIGZpbGVuYW1lKTsKKwkJZHN0X25hbWUgPSBzcHJpbnRmKCIkKERFU1RESVIpJXMvJXMiLCBkaXJlY3RvcnksIGZpbGVuYW1lKTsKKwkJcHJpbnRmICJcdEBlY2hvIGluc3RhbGxpbmcgJXMgYXMgJXNcbiIsIHNyY19uYW1lLCBkc3RfbmFtZQorCQlpZiAoIGRpcmVjdG9yeSA9PSAiJChiaW5kaXIpIiApIHsKKwkJCXByb2dyYW0gPSAiJChJTlNUQUxMKSAtbSA3NTUiOworCQl9IGVsc2UgeworCQkJcHJvZ3JhbSA9ICIkKElOU1RBTExfTElCKSI7CisJCX0KKwkJcHJpbnRmICJcdCVzICVzICVzXG4iLCBwcm9ncmFtLCBzcmNfbmFtZSwgZHN0X25hbWUKKwl9CitCRUdJTgl7CisJCWZvdW5kID0gMAorCQl1c2luZyA9IDAKKwl9CisJL15ALyB7CisJCXVzaW5nID0gMAorCQlpZiAoc3Vic2V0ID09ICJub25lIikgeworCQkJdXNpbmcgPSAxCisJCX0gZWxzZSBpZiAoaW5kZXgoc3Vic2V0LCQyKSA+IDApIHsKKwkJCWlmICh1c2luZyA9PSAwKSB7CisJCQkJaWYgKGZvdW5kID09IDApIHsKKwkJCQkJcHJpbnQgICIiCisJCQkJCXByaW50ZiAiIyBnZW5lcmF0ZWQgYnkgbWstMXN0LmF3ayAoc3Vic2V0PSVzKVxuIiwgc3Vic2V0CisJCQkJCXByaW50ZiAiIyAgbmFtZTogICAgICAgICAgJXNcbiIsIG5hbWUgCisJCQkJCXByaW50ZiAiIyAgdHJhY2VzOiAgICAgICAgJXNcbiIsIHRyYWNlcyAKKwkJCQkJcHJpbnRmICIjICBNT0RFTDogICAgICAgICAlc1xuIiwgTU9ERUwgCisJCQkJCXByaW50ZiAiIyAgbW9kZWw6ICAgICAgICAgJXNcbiIsIG1vZGVsIAorCQkJCQlwcmludGYgIiMgIHByZWZpeDogICAgICAgICVzXG4iLCBwcmVmaXggCisJCQkJCXByaW50ZiAiIyAgc3VmZml4OiAgICAgICAgJXNcbiIsIHN1ZmZpeCAKKwkJCQkJcHJpbnRmICIjICBzdWJzZXQ6ICAgICAgICAlc1xuIiwgc3Vic2V0IAorCQkJCQlwcmludGYgIiMgIFNobGliVmVyOiAgICAgICVzXG4iLCBTaGxpYlZlciAKKwkJCQkJcHJpbnRmICIjICBTaGxpYlZlckluZml4OiAlc1xuIiwgU2hsaWJWZXJJbmZpeCAKKwkJCQkJcHJpbnRmICIjICBUZXJtbGliUm9vdDogICAlc1xuIiwgVGVybWxpYlJvb3QgCisJCQkJCXByaW50ZiAiIyAgVGVybWxpYlN1ZmZpeDogJXNcbiIsIFRlcm1saWJTdWZmaXggCisJCQkJCXByaW50ZiAiIyAgUmVMaW5rOiAgICAgICAgJXNcbiIsIFJlTGluayAKKwkJCQkJcHJpbnRmICIjICBEb0xpbmtzOiAgICAgICAlc1xuIiwgRG9MaW5rcyAKKwkJCQkJcHJpbnRmICIjICBybVNvTG9jczogICAgICAlc1xuIiwgcm1Tb0xvY3MgCisJCQkJCXByaW50ZiAiIyAgbGRjb25maWc6ICAgICAgJXNcbiIsIGxkY29uZmlnIAorCQkJCQlwcmludGYgIiMgIG92ZXJ3cml0ZTogICAgICVzXG4iLCBvdmVyd3JpdGUgCisJCQkJCXByaW50ZiAiIyAgZGVwZW5kOiAgICAgICAgJXNcbiIsIGRlcGVuZCAKKwkJCQkJcHJpbnRmICIjICBob3N0OiAgICAgICAgICAlc1xuIiwgaG9zdCAKKwkJCQkJcHJpbnQgICIiCisJCQkJfQorCQkJCXVzaW5nID0gMQorCQkJfQorCQkJaWYgKCBpc190aWNsaWIoKSApIHsKKwkJCQlPQkpTICA9IE1PREVMICJfUCIKKwkJCX0gZWxzZSBpZiAoIGlzX3Rlcm1saWIoKSApIHsKKwkJCQlPQkpTICA9IE1PREVMICJfVCIKKwkJCX0gZWxzZSB7CisJCQkJT0JKUyAgPSBNT0RFTAorCQkJfQorCQl9CisJfQorCS9eW0AjXS8geworCQluZXh0CisJfQorCSQxIH4gL3RyYWNlLyB7CisJCWlmICh0cmFjZXMgIT0gImFsbCIgJiYgdHJhY2VzICE9IE1PREVMICYmICQxICE9ICJsaWJfdHJhY2UiKQorCQkJbmV4dAorCX0KKwl7CisJCWlmICh1c2luZyBcCisJCSAmJiAoICQxICE9ICJsaW5rX3Rlc3QiICkgXAorCQkgJiYgKCAkMiA9PSAibGliIiBcCisJCSAgIHx8ICQyID09ICJwcm9ncyIgXAorCQkgICB8fCAkMiA9PSAiYysrIiBcCisJCSAgIHx8ICQyID09ICJ0YWNrIiApKQorCQl7CisJCQlpZiAoIGZvdW5kID09IDAgKQorCQkJeworCQkJCXByaW50ZiAiJXNfT0JKUyA9IiwgT0JKUworCQkJCWlmICggJDIgPT0gImxpYiIgKQorCQkJCQlmb3VuZCA9IDEKKwkJCQllbHNlCisJCQkJCWZvdW5kID0gMgorCQkJfQorCQkJcHJpbnRmICIgXFxcblx0Li4vJXMvJXMkbyIsIG1vZGVsLCAkMQorCQl9CisJfQorRU5ECXsKKwkJcHJpbnQgICIiCisJCWlmICggZm91bmQgIT0gMCApCisJCXsKKwkJCXByaW50ZiAiXG4kKCVzX09CSlMpIDogJXNcbiIsIE9CSlMsIGRlcGVuZAorCQl9CisJCWlmICggZm91bmQgPT0gMSApCisJCXsKKwkJCXByaW50ICAiIgorCQkJbGliX25hbWUgPSBsaWJfbmFtZV9vZihuYW1lKTsKKwkJCWlmICggTU9ERUwgPT0gIlNIQVJFRCIgKQorCQkJeworCQkJCWFiaV9uYW1lID0gYWJpX25hbWVfb2YobmFtZSk7CisJCQkJcmVsX25hbWUgPSByZWxfbmFtZV9vZihuYW1lKTsKKwkJCQlpbXBfbmFtZSA9IGltcF9uYW1lX29mKG5hbWUpOworCQkJCWVuZF9uYW1lID0gZW5kX25hbWVfb2YobmFtZSk7CisKKwkJCQlzaGxpYl9idWlsZCgiLi4vbGliIikKKworCQkJCXByaW50ICAiIgorCQkJCXByaW50ICAiaW5zdGFsbCBcXCIKKwkJCQlwcmludCAgImluc3RhbGwubGlicyBcXCIKKworCQkJCWlmICggU2hsaWJWZXIgPT0gImN5Z2RsbCIgKSB7CisKKwkJCQkJZHN0X2RpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSAkKERFU1RESVIpJChsaWJkaXIpIjsKKwkJCQkJcHJpbnRmICJpbnN0YWxsLiVzIDo6ICVzICQoTElCUkFSSUVTKVxuIiwgbmFtZSwgZHN0X2RpcnMKKwkJCQkJaW5zdGFsbF9kbGwoIiQoYmluZGlyKSIsZW5kX25hbWUpOworCQkJCQlpbnN0YWxsX2RsbCgiJChsaWJkaXIpIixpbXBfbmFtZSk7CisKKwkJCQl9IGVsc2UgeworCisJCQkJCWxpYl9kaXIgPSAiJChERVNURElSKSQobGliZGlyKSI7CisJCQkJCXByaW50ZiAiaW5zdGFsbC4lcyA6OiAlcy8lc1xuIiwgbmFtZSwgbGliX2RpciwgZW5kX25hbWUKKwkJCQkJcHJpbnQgIiIKKwkJCQkJaWYgKCBSZUxpbmsgPT0gInllcyIgKSB7CisJCQkJCQlzaGxpYl9idWlsZChsaWJfZGlyKQorCQkJCQl9IGVsc2UgeworCQkJCQkJc2hsaWJfaW5zdGFsbChsaWJfZGlyKQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBvdmVyd3JpdGUgPT0gInllcyIgJiYgbmFtZSA9PSAibmN1cnNlcyIgKQorCQkJCXsKKwkJCQkJaWYgKCBTaGxpYlZlciA9PSAiY3lnZGxsIiApIHsKKwkJCQkJCW92cl9uYW1lID0gc3ByaW50ZigibGliY3Vyc2VzJXMuYSIsIHN1ZmZpeCkKKwkJCQkJCXByaW50ZiAiXHRAZWNobyBsaW5raW5nICVzIHRvICVzXG4iLCBpbXBfbmFtZSwgb3ZyX25hbWUKKwkJCQkJCXByaW50ZiAiXHRjZCAkKERFU1RESVIpJChsaWJkaXIpICYmIChybSAtZiAlczsgJChMTl9TKSAlcyAlczsgKVxuIiwgb3ZyX25hbWUsIGltcF9uYW1lLCBvdnJfbmFtZQorCQkJCQl9IGVsc2UgeworCQkJCQkJb3ZyX25hbWUgPSBzcHJpbnRmKCJsaWJjdXJzZXMlcyIsIHN1ZmZpeCkKKwkJCQkJCXByaW50ZiAiXHRAZWNobyBsaW5raW5nICVzIHRvICVzXG4iLCBlbmRfbmFtZSwgb3ZyX25hbWUKKwkJCQkJCXByaW50ZiAiXHRjZCAkKERFU1RESVIpJChsaWJkaXIpICYmIChybSAtZiAlczsgJChMTl9TKSAlcyAlczsgKVxuIiwgb3ZyX25hbWUsIGVuZF9uYW1lLCBvdnJfbmFtZQorCQkJCQl9CisJCQkJfQorCQkJCWlmICggbGRjb25maWcgIT0gIiIgJiYgbGRjb25maWcgIT0gIjoiICkgeworCQkJCQlwcmludGYgIlx0LSB0ZXN0IC16IFwiJChERVNURElSKVwiICYmICVzXG4iLCBsZGNvbmZpZworCQkJCX0KKwkJCQlwcmludCAgIiIKKwkJCQlwcmludCAgInVuaW5zdGFsbCBcXCIKKwkJCQlwcmludCAgInVuaW5zdGFsbC5saWJzIFxcIgorCQkJCXByaW50ZiAidW5pbnN0YWxsLiVzIDo6XG4iLCBuYW1lCisJCQkJaWYgKCBTaGxpYlZlciA9PSAiY3lnZGxsIiApIHsKKworCQkJCQlwcmludGYgIlx0QGVjaG8gdW5pbnN0YWxsaW5nICQoREVTVERJUikkKGJpbmRpcikvJXNcbiIsIGVuZF9uYW1lCisJCQkJCXByaW50ZiAiXHQtQHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJXNcbiIsIGVuZF9uYW1lCisKKwkJCQkJcHJpbnRmICJcdEBlY2hvIHVuaW5zdGFsbGluZyAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBpbXBfbmFtZQorCQkJCQlwcmludGYgIlx0LUBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBpbXBfbmFtZQorCisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRmICJcdEBlY2hvIHVuaW5zdGFsbGluZyAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBlbmRfbmFtZQorCQkJCQlyZW1vdmVsaW5rcygiJChERVNURElSKSQobGliZGlyKSIpCisJCQkJCWlmICggb3ZlcndyaXRlID09ICJ5ZXMiICYmIG5hbWUgPT0gIm5jdXJzZXMiICkKKwkJCQkJeworCQkJCQkJaWYgKCBTaGxpYlZlciA9PSAiY3lnZGxsIiApIHsKKwkJCQkJCQlvdnJfbmFtZSA9IHNwcmludGYoImxpYmN1cnNlcyVzLmEiLCBzdWZmaXgpCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCW92cl9uYW1lID0gc3ByaW50ZigibGliY3Vyc2VzJXMiLCBzdWZmaXgpCisJCQkJCQl9CisJCQkJCQlwcmludGYgIlx0LUBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBvdnJfbmFtZQorCQkJCQl9CisJCQkJfQorCQkJCWlmICggcm1Tb0xvY3MgPT0gInllcyIgKSB7CisJCQkJCXByaW50ICAiIgorCQkJCQlwcmludCAgIm1vc3RseWNsZWFuIFxcIgorCQkJCQlwcmludCAgImNsZWFuIDo6IgorCQkJCQlwcmludGYgIlx0LUBybSAtZiBzb19sb2NhdGlvbnNcbiIKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmICggTU9ERUwgPT0gIkxJQlRPT0wiICkKKwkJCXsKKwkJCQlpZiAoICQyID09ICJjKysiICkgeworCQkJCQljb21waWxlPSJDWFgiCisJCQkJfSBlbHNlIHsKKwkJCQkJY29tcGlsZT0iQ0MiCisJCQkJfQorCQkJCWVuZF9uYW1lID0gbGliX25hbWU7CisJCQkJcHJpbnRmICIuLi9saWIvJXMgOiAkKCVzX09CSlMpXG4iLCBsaWJfbmFtZSwgT0JKUworCQkJCXByaW50ZiAiXHRjZCAuLi9saWIgJiYgJChMSUJUT09MX0xJTkspICQoJXMpIC1vICVzICQoJXNfT0JKUzokbz0ubG8pIC1ycGF0aCAkKERFU1RESVIpJChsaWJkaXIpIC12ZXJzaW9uLWluZm8gJChOQ1VSU0VTX01BSk9SKTokKE5DVVJTRVNfTUlOT1IpICQoU0hMSUJfTElTVClcbiIsIGNvbXBpbGUsIGxpYl9uYW1lLCBPQkpTCisJCQkJcHJpbnQgICIiCisJCQkJcHJpbnQgICJpbnN0YWxsIFxcIgorCQkJCXByaW50ICAiaW5zdGFsbC5saWJzIFxcIgorCQkJCXByaW50ZiAiaW5zdGFsbC4lcyA6OiAkKERFU1RESVIpJChsaWJkaXIpIC4uL2xpYi8lc1xuIiwgbmFtZSwgbGliX25hbWUKKwkJCQlwcmludGYgIlx0QGVjaG8gaW5zdGFsbGluZyAuLi9saWIvJXMgYXMgJChERVNURElSKSQobGliZGlyKS8lc1xuIiwgbGliX25hbWUsIGxpYl9uYW1lCisJCQkJcHJpbnRmICJcdGNkIC4uL2xpYjsgJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTCkgJXMgJChERVNURElSKSQobGliZGlyKVxuIiwgbGliX25hbWUKKwkJCQlwcmludCAgIiIKKwkJCQlwcmludCAgInVuaW5zdGFsbCBcXCIKKwkJCQlwcmludCAgInVuaW5zdGFsbC5saWJzIFxcIgorCQkJCXByaW50ZiAidW5pbnN0YWxsLiVzIDo6XG4iLCBuYW1lCisJCQkJcHJpbnRmICJcdEBlY2hvIHVuaW5zdGFsbGluZyAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBsaWJfbmFtZQorCQkJCXByaW50ZiAiXHQtQCQoTElCVE9PTF9VTklOU1RBTEwpIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGxpYl9uYW1lCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZW5kX25hbWUgPSBsaWJfbmFtZTsKKwkJCQlwcmludGYgIi4uL2xpYi8lcyA6ICQoJXNfT0JKUylcbiIsIGxpYl9uYW1lLCBPQkpTCisJCQkJcHJpbnRmICJcdCQoQVIpICQoQVJfT1BUUykgJEAgJD9cbiIKKwkJCQlwcmludGYgIlx0JChSQU5MSUIpICRAXG4iCisJCQkJaWYgKCBob3N0ID09ICJ2eHdvcmtzIiApCisJCQkJeworCQkJCQlwcmludGYgIlx0JChMRCkgJChMRF9PUFRTKSAkPyAtbyAkKEA6LmE9JG8pXG4iCisJCQkJfQorCQkJCXByaW50ICAiIgorCQkJCXByaW50ICAiaW5zdGFsbCBcXCIKKwkJCQlwcmludCAgImluc3RhbGwubGlicyBcXCIKKwkJCQlwcmludGYgImluc3RhbGwuJXMgOjogJChERVNURElSKSQobGliZGlyKSAuLi9saWIvJXNcbiIsIG5hbWUsIGxpYl9uYW1lCisJCQkJcHJpbnRmICJcdEBlY2hvIGluc3RhbGxpbmcgLi4vbGliLyVzIGFzICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGxpYl9uYW1lLCBsaWJfbmFtZQorCQkJCXByaW50ZiAiXHQkKElOU1RBTExfREFUQSkgLi4vbGliLyVzICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGxpYl9uYW1lLCBsaWJfbmFtZQorCQkJCWlmICggb3ZlcndyaXRlID09ICJ5ZXMiICYmIGxpYl9uYW1lID09ICJsaWJuY3Vyc2VzLmEiICkKKwkJCQl7CisJCQkJCXByaW50ZiAiXHRAZWNobyBsaW5raW5nIGxpYmN1cnNlcy5hIHRvIGxpYm5jdXJzZXMuYVxuIgorCQkJCQlwcmludGYgIlx0LUBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmN1cnNlcy5hXG4iCisJCQkJCXByaW50ZiAiXHQoY2QgJChERVNURElSKSQobGliZGlyKSAmJiAkKExOX1MpIGxpYm5jdXJzZXMuYSBsaWJjdXJzZXMuYSlcbiIKKwkJCQl9CisJCQkJcHJpbnRmICJcdCQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBsaWJfbmFtZQorCQkJCWlmICggaG9zdCA9PSAidnh3b3JrcyIgKQorCQkJCXsKKwkJCQkJcHJpbnRmICJcdEBlY2hvIGluc3RhbGxpbmcgLi4vbGliL2xpYiVzJG8gYXMgJChERVNURElSKSQobGliZGlyKS9saWIlcyRvXG4iLCBuYW1lLCBuYW1lCisJCQkJCXByaW50ZiAiXHQkKElOU1RBTExfREFUQSkgLi4vbGliL2xpYiVzJG8gJChERVNURElSKSQobGliZGlyKS9saWIlcyRvXG4iLCBuYW1lLCBuYW1lCisJCQkJfQorCQkJCXByaW50ICAiIgorCQkJCXByaW50ICAidW5pbnN0YWxsIFxcIgorCQkJCXByaW50ICAidW5pbnN0YWxsLmxpYnMgXFwiCisJCQkJcHJpbnRmICJ1bmluc3RhbGwuJXMgOjpcbiIsIG5hbWUKKwkJCQlwcmludGYgIlx0QGVjaG8gdW5pbnN0YWxsaW5nICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGxpYl9uYW1lCisJCQkJcHJpbnRmICJcdC1Acm0gLWYgJChERVNURElSKSQobGliZGlyKS8lc1xuIiwgbGliX25hbWUKKwkJCQlpZiAoIG92ZXJ3cml0ZSA9PSAieWVzIiAmJiBsaWJfbmFtZSA9PSAibGlibmN1cnNlcy5hIiApCisJCQkJeworCQkJCQlwcmludGYgIlx0QGVjaG8gbGlua2luZyBsaWJjdXJzZXMuYSB0byBsaWJuY3Vyc2VzLmFcbiIKKwkJCQkJcHJpbnRmICJcdC1Acm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJjdXJzZXMuYVxuIgorCQkJCX0KKwkJCQlpZiAoIGhvc3QgPT0gInZ4d29ya3MiICkKKwkJCQl7CisJCQkJCXByaW50ZiAiXHRAZWNobyB1bmluc3RhbGxpbmcgJChERVNURElSKSQobGliZGlyKS9saWIlcyRvXG4iLCBuYW1lCisJCQkJCXByaW50ZiAiXHQtQHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliJXMkb1xuIiwgbmFtZQorCQkJCX0KKwkJCX0KKwkJCXByaW50ICIiCisJCQlwcmludCAiY2xlYW4gOjoiCisJCQlyZW1vdmVsaW5rcygiLi4vbGliIik7CisJCQlwcmludCAiIgorCQkJcHJpbnQgIm1vc3RseWNsZWFuOjoiCisJCQlwcmludGYgIlx0LXJtIC1mICQoJXNfT0JKUylcbiIsIE9CSlMKKwkJCWlmICggTU9ERUwgPT0gIkxJQlRPT0wiICkgeworCQkJCXByaW50ZiAiXHQtJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKCVzX09CSlM6JG89LmxvKVxuIiwgT0JKUworCQkJfQorCQl9CisJCWVsc2UgaWYgKCBmb3VuZCA9PSAyICkKKwkJeworCQkJcHJpbnQgIiIKKwkJCXByaW50ICJtb3N0bHljbGVhbjo6IgorCQkJcHJpbnRmICJcdC1ybSAtZiAkKCVzX09CSlMpXG4iLCBPQkpTCisJCQlpZiAoIE1PREVMID09ICJMSUJUT09MIiApIHsKKwkJCQlwcmludGYgIlx0LSQoTElCVE9PTF9DTEVBTikgcm0gLWYgJCglc19PQkpTOiRvPS5sbylcbiIsIE9CSlMKKwkJCX0KKwkJCXByaW50ICIiCisJCQlwcmludCAiY2xlYW4gOjoiCisJCQlwcmludGYgIlx0LXJtIC1mICQoJXNfT0JKUylcbiIsIE9CSlMKKwkJCWlmICggTU9ERUwgPT0gIkxJQlRPT0wiICkgeworCQkJCXByaW50ZiAiXHQtJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKCVzX09CSlM6JG89LmxvKVxuIiwgT0JKUworCQkJfQorCQl9CisJfQorIyB2aWxlOnRzPTQgc3c9NApkaWZmIC0tZ2l0IGEvbWstMm5kLmF3ayBiL21rLTJuZC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2Mzc2MwotLS0gL2Rldi9udWxsCisrKyBiL21rLTJuZC5hd2sKQEAgLTAsMCArMSwxNDYgQEAKKyMgJElkOiBtay0ybmQuYXdrLHYgMS4xOSAyMDA1LzAxLzIyIDE2OjMwOjA0IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgR2VuZXJhdGUgY29tcGlsZS1ydWxlcyBmb3IgdGhlIG1vZHVsZXMgdGhhdCB3ZSBhcmUgdXNpbmcgaW4gbGlicmFyaWVzIG9yCisjIHByb2dyYW1zLiAgV2UgYXJlIGxpc3RpbmcgdGhlbSBleHBsaWNpdGx5IGJlY2F1c2Ugd2UgaGF2ZSB0dXJuZWQgb2ZmIHRoZQorIyBzdWZmaXggcnVsZXMgKHRvIGZvcmNlIGNvbXBpbGF0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzKS4gIFdlIGNvdWxkIHVzZQorIyBtYWtlLXJlY3Vyc2lvbiBidXQgdGhhdCB3b3VsZCByZXN1bHQgaW4gbWFrZWZpbGVzIHRoYXQgYXJlIHVzZWxlc3MgZm9yCisjIGRldmVsb3BtZW50LgorIworIyBWYXJpYWJsZXM6CisjCW1vZGVsIGRpcmVjdG9yeSBpbnRvIHdoaWNoIG9iamVjdHMgYXJlIGNvbXBpbGVkLgorIwlNT0RFTCAodXBwZXJjYXNlIHZlcnNpb24gb2YgIm1vZGVsIjsgdG91cHBlciBpcyBub3QgcG9ydGFibGUpCisjCWVjaG8gKHllcyBpZmYgd2Ugd2lsbCBzaG93IHRoZSAkKENDKSBsaW5lcykKKyMJc3Vic2V0ICgibm9uZSIsICJiYXNlIiwgImJhc2UrZXh0X2Z1bmNzIiBvciAidGVybWxpYiIpCisjCWNyZW5hbWVzICgieWVzIiBvciAibm8iLCBmbGFnIHRvIGNvbnRyb2wgd2hldGhlciAtYyAmIC1vIG9wdGlvbnMgYXJlIHVzZWQpCisjCWN4eHJlbmFtZXMgKCJ5ZXMiIG9yICJubyIsIGZsYWcgdG8gY29udHJvbCB3aGV0aGVyIC1jICYgLW8gb3B0aW9ucyBhcmUgdXNlZCkKKyMJdHJhY2VzICgiYWxsIiBvciAiREVCVUciLCB0byBjb250cm9sIHdoZXRoZXIgdHJhY2luZyBpcyBjb21waWxlZCBpbikKKyMJc3JjZGlyIGlzIGV4cGFuZGVkIHdoZW4gImNvbmZpZ3VyZSAtLXNyY2RpciIgd2FzIHVzZWQKKyMKKyMgRmllbGRzIGluIHNyYy9tb2R1bGVzOgorIwkkMSA9IG1vZHVsZSBuYW1lCisjCSQyID0gcHJvZ3N8bGlifGMrKworIwkkMyA9IHNvdXJjZS1kaXJlY3RvcnkKKyMKKyMgRmllbGRzIGluIHNyYy9tb2R1bGVzIHBhc3QgJDMgYXJlIGRlcGVuZGVuY2llcworIworQkVHSU4JeworCQlmb3VuZCA9IDAKKwkJdXNpbmcgPSAwCisJfQorCS9eQC8geworCQl1c2luZyA9IDAKKwkJaWYgKHN1YnNldCA9PSAibm9uZSIpIHsKKwkJCXVzaW5nID0gMQorCQl9IGVsc2UgaWYgKGluZGV4KHN1YnNldCwkMikgPiAwKSB7CisJCQlpZiAodXNpbmcgPT0gMCkgeworCQkJCWlmIChmb3VuZCA9PSAwKSB7CisJCQkJCXByaW50ICAiIgorCQkJCQlwcmludCAgIiMgZ2VuZXJhdGVkIGJ5IG1rLTJuZC5hd2siCisJCQkJCXByaW50ZiAiIyAgIG1vZGVsOiAgICAgICVzXG4iLCBtb2RlbAorCQkJCQlwcmludGYgIiMgICBNT0RFTDogICAgICAlc1xuIiwgTU9ERUwKKwkJCQkJcHJpbnRmICIjICAgZWNobzogICAgICAgJXNcbiIsIGVjaG8gCisJCQkJCXByaW50ZiAiIyAgIHN1YnNldDogICAgICVzXG4iLCBzdWJzZXQKKwkJCQkJcHJpbnRmICIjICAgY3JlbmFtZXM6ICAgJXNcbiIsIGNyZW5hbWVzCisJCQkJCXByaW50ZiAiIyAgIGN4eHJlbmFtZXM6ICVzXG4iLCBjeHhyZW5hbWVzCisJCQkJCXByaW50ZiAiIyAgIHRyYWNlczogICAgICVzXG4iLCB0cmFjZXMKKwkJCQkJcHJpbnRmICIjICAgc3JjZGlyOiAgICAgJXNcbiIsIHNyY2RpcgorCQkJCX0KKwkJCQl1c2luZyA9IDEKKwkJCX0KKwkJfQorCX0KKwkvXltAI10vIHsKKwkJbmV4dAorCX0KKwkkMSB+IC90cmFjZS8geworCQlpZiAodHJhY2VzICE9ICJhbGwiICYmIHRyYWNlcyAhPSBNT0RFTCAmJiAkMSAhPSAibGliX3RyYWNlIikKKwkJCW5leHQKKwl9CisJeworCQlpZiAoJDAgIT0gIiIgXAorCQkgJiYgdXNpbmcgIT0gMCkgeworCQkJZm91bmQgPSAxCisJCQlpZiAoICQxICE9ICIiICkgeworCQkJCXByaW50ICAiIgorCQkJCWlmICggJDIgPT0gImMrKyIgKSB7CisJCQkJCWNvbXBpbGU9IkNYWCIKKwkJCQkJc3VmZml4PSIuY2MiCisJCQkJCXVzZV9jX289Y3h4cmVuYW1lcworCQkJCX0gZWxzZSB7CisJCQkJCWNvbXBpbGU9IkNDIgorCQkJCQlzdWZmaXg9Ii5jIgorCQkJCQl1c2VfY19vPWNyZW5hbWVzCisJCQkJfQorCQkJCXByaW50ZiAiLi4vJXMvJXMkbyA6XHQlcy8lcyVzIiwgbW9kZWwsICQxLCAkMywgJDEsIHN1ZmZpeAorCQkJCWZvciAobiA9IDQ7IG4gPD0gTkY7IG4rKykgcHJpbnRmICIgXFxcblx0XHRcdCVzIiwgJG4KKwkJCQlwcmludCAgIiIKKwkJCQlpZiAoIGVjaG8gPT0gInllcyIgKQorCQkJCQlhdHNpZ249IiIKKwkJCQllbHNlIHsKKwkJCQkJYXRzaWduPSJAIgorCQkJCQlwcmludGYgIlx0QGVjaG8gJ2NvbXBpbGluZyAlcyAoJXMpJ1xuIiwgJDEsIG1vZGVsCisJCQkJfQorCQkJCXByaW50ZiAiXHQlcyIsIGF0c2lnbjsKKwkJCQlpZiAoIHVzZV9jX28gIT0gInllcyIgKSB7CisJCQkJCXByaW50ZiAiY2QgLi4vJXM7ICIsIG1vZGVsOworCQkJCX0KKwkJCQkjIFRoZSBjaG9pY2UgaGVyZSBpcyBiZXR3ZWVuCisJCQkJIwliYXNlK2V4dF9mdW5jcyBhbmQKKwkJCQkjCXRlcm1saWIrZXh0X3RpbmZvCisJCQkJIyBidXQgdGhleSBtYXkgYXBwZWFyIGluIHRoZSBzYW1lIHZhbHVlLgorCQkJCWlmICggc3Vic2V0IH4gL2Jhc2UvICkgeworCQkJCQlteWNmbGFncz0iIgorCQkJCX0gZWxzZSBpZiAoIHN1YnNldCB+IC90ZXJtbGliLyApIHsKKwkJCQkJbXljZmxhZ3M9IiAtRFVTRV9URVJNTElCIgorCQkJCX0KKwkJCQlwcmludGYgIiQoTElCVE9PTF9DT01QSUxFKSAkKCVzKSAkKENGTEFHU18lcyklcyAtYyAiLCBjb21waWxlLCBNT0RFTCwgbXljZmxhZ3MKKwkJCQlpZiAoICQzID09ICIuIiB8fCBzcmNkaXIgPT0gIi4iICkgeworCQkJCQlkaXIgPSAkMyAiLyIKKwkJCQkJc3ViKCJeXFwkXFwoc3JjZGlyXFwpLyIsIiIsZGlyKTsKKwkJCQkJc3ViKCJeXFwuLyIsIiIsZGlyKTsKKwkJCQkJcHJpbnRmICIuLi8lcy8lcyVzJXMiLCBuYW1lLCBkaXIsICQxLCBzdWZmaXgKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGYgIiVzLyVzJXMiLCAkMywgJDEsIHN1ZmZpeAorCQkJCX0KKwkJCQlpZiAoIHVzZV9jX28gPT0gInllcyIgKSB7CisJCQkJCXByaW50ZiAiIC1vIC4uLyVzLyVzJG8iLCBtb2RlbCwgJDEKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXByaW50ZiAiJXMiLCAkMQorCQkJCWZvciAobiA9IDI7IG4gPD0gTkY7IG4rKykgcHJpbnRmICIgJXMiLCAkbgorCQkJfQorCQkJcHJpbnQgICIiCisJCX0KKwl9CitFTkQJeworCQlwcmludCAgIiIKKwl9CmRpZmYgLS1naXQgYS9tay1oZHIuYXdrIGIvbWstaGRyLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZiZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWstaGRyLmF3awpAQCAtMCwwICsxLDEwNyBAQAorIyAkSWQ6IG1rLWhkci5hd2ssdiAxLjIgMjAwNy8wMy8zMSAxNTo0ODo0NSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CTIwMDcKKyMKKyMgR2VuZXJhdGUgaW5zdGFsbC91bmluc3RhbGwgcnVsZXMgZm9yIGhlYWRlciBmaWxlcworIyBWYXJpYWJsZXM6CisjCXN1YnNldAkgICgibm9uZSIsICJiYXNlIiwgImJhc2UrZXh0X2Z1bmNzIiBvciAidGVybWxpYiIsIGV0Yy4pCisjCWNvbXBhdAkgICgieWVzIiBvciAibm8iLCBmbGFnIHRvIGFkZCBsaW5rIHRvIGN1cnNlcy5oCisjCitmdW5jdGlvbiBiYXNlbmFtZShwYXRoKSB7CisJc3ViKC9eLipcLy8sIiIscGF0aCkKKwlyZXR1cm4gcGF0aDsKK30KK0JFR0lOCXsKKwkJZm91bmQgPSAwCisJCXVzaW5nID0gMQorCQljb3VudCA9IDAKKwl9CisJL15ALyB7CisJCXVzaW5nID0gMAorCQlpZiAoc3Vic2V0ID09ICJub25lIikgeworCQkJdXNpbmcgPSAxCisJCX0gZWxzZSBpZiAoaW5kZXgoc3Vic2V0LCQyKSA+IDApIHsKKwkJCXVzaW5nID0gMQorCQl9IGVsc2UgeworCQkJdXNpbmcgPSAwCisJCX0KKwl9CisJL15bQCNdLyB7CisJCW5leHQKKwl9CisJeworCQlpZiAodXNpbmcgJiYgTkYgIT0gMCkgeworCQkJaWYgKGZvdW5kID09IDApIHsKKwkJCQlwcmludCAgIiIKKwkJCQlwcmludCAgIiMgZ2VuZXJhdGVkIGJ5IG1rLWhkci5hd2siCisJCQkJcHJpbnRmICIjICBzdWJzZXQ6ICAgICAlc1xuIiwgc3Vic2V0IAorCQkJCXByaW50ZiAiIyAgY29tcGF0OiAgICAgJXNcbiIsIGNvbXBhdCAKKwkJCQlwcmludCAgIiIKKwkJCQlmb3VuZCA9IDEKKwkJCX0KKwkJCWRhdGFbY291bnRdID0gJDEKKwkJCWNvdW50ID0gY291bnQgKyAxCisJCX0KKwl9CitFTkQJeworCQlpZiAoIGNvdW50ID4gMCApCisJCXsKKwkJCXByaW50ICIke0RFU1RESVJ9JHtpbmNsdWRlZGlyfSA6IgorCQkJcHJpbnQgIglzaCAke3NyY2Rpcn0vLi4vbWtkaXJzLnNoICRAIgorCQkJcHJpbnQgIiIKKwkJCXByaW50ICJpbnN0YWxsIFxcIgorCQkJcHJpbnQgImluc3RhbGwubGlicyBcXCIKKwkJCXByaW50ICJpbnN0YWxsLmluY2x1ZGVzIDo6ICR7QVVUT19TUkN9ICR7REVTVERJUn0ke2luY2x1ZGVkaXJ9IFxcIgorCisJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kpIHsKKwkJCQlwcmludGYgIgkJJXMgXFxcbiIsIGRhdGFbaV0KKwkJCX0KKwkJCXByaW50ZiAiCQklc1xuIiwgZGF0YVtjb3VudCAtIDFdCisKKwkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCQkJcHJpbnRmICIJQCAoY2QgJHtERVNURElSfSR7aW5jbHVkZWRpcn0gJiYgcm0gLWYgJXMpIDsgLi4vaGVhZGVycy5zaCAke0lOU1RBTExfREFUQX0gJHtERVNURElSfSR7aW5jbHVkZWRpcn0gJHtzcmNkaXJ9ICVzXG4iLCBiYXNlbmFtZShkYXRhW2ldKSwgZGF0YVtpXQorCQkJCWlmIChkYXRhW2ldID09ICJjdXJzZXMuaCIgJiYgY29tcGF0ID09ICJ5ZXMiKSB7CisJCQkJCXByaW50ZiAiCUAgKGNkICR7REVTVERJUn0ke2luY2x1ZGVkaXJ9ICYmIHJtIC1mIG5jdXJzZXMuaCAmJiAke0xOX1N9ICVzIG5jdXJzZXMuaClcbiIsIGRhdGFbaV0KKwkJCQl9CisJCQl9CisJCQlwcmludCAiIgorCQkJcHJpbnQgInVuaW5zdGFsbCBcXCIKKwkJCXByaW50ICJ1bmluc3RhbGwubGlicyBcXCIKKwkJCXByaW50ICJ1bmluc3RhbGwuaW5jbHVkZXMgOjoiCisKKwkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCQkJcHJpbnRmICIJLUAgKGNkICR7REVTVERJUn0ke2luY2x1ZGVkaXJ9ICYmIHJtIC1mICVzKVxuIiwgYmFzZW5hbWUoZGF0YVtpXSkKKwkJCQlpZiAoZGF0YVtpXSA9PSAiY3Vyc2VzLmgiICYmIGNvbXBhdCA9PSAieWVzIikgeworCQkJCQlwcmludGYgIgktQCAoY2QgJHtERVNURElSfSR7aW5jbHVkZWRpcn0gJiYgcm0gLWYgbmN1cnNlcy5oKVxuIgorCQkJCX0KKwkJCX0KKwkJfQorCX0KKyMgdmlsZTp0cz00IHN3PTQKZGlmZiAtLWdpdCBhL21rZGlycy5zaCBiL21rZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OWZjMzljCi0tLSAvZGV2L251bGwKKysrIGIvbWtkaXJzLnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhIC9iaW4vc2gKKyMgJElkOiBta2RpcnMuc2gsdiAxLjUgMjAwNy8wMy8yNSAyMjoyOTo0NiB0b20gRXhwICQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIEF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIExhc3QgbW9kaWZpZWQ6IDE5OTQtMDMtMjUKKyMgUHVibGljIGRvbWFpbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlcnJzdGF0dXM9MAordW1hc2sgMDIyCisKK2ZvciBmaWxlIGluICR7MSsiJEAifSA7IGRvCisgICBzZXQgZm5vcmQgYGVjaG8gIjokZmlsZSIgfCBzZWQgLW5lICdzL146XC8vIy87cy9eOi8vO3MvXC8vIC9nO3MvXiMvXC8vO3AnYAorICAgc2hpZnQKKworICAgcGF0aGNvbXA9CisgICBmb3IgZCBpbiAkezErIiRAIn0gOyBkbworICAgICBwYXRoY29tcD0iJHBhdGhjb21wJGQiCisgICAgIGNhc2UgIiRwYXRoY29tcCIgaW4KKyAgICAgICAtKiApIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CisgICAgIGVzYWMKKworICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIiAxPiYyCisgICAgICAgIGNhc2UgIiRwYXRoY29tcCIgaW4KKyAgICAgICAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl06ICkKKyAgICAgICAgICAgIDs7ICAgICAgICAgICAgICAgIyBET1NJU0ggc3lzdGVtcworICAgICAgICAgICogKQorICAgICAgICAgICAgbWtkaXIgIiRwYXRoY29tcCIKKyAgICAgICAgICAgIGVycnN0YXR1cz0kPworICAgICAgICAgICAgaWYgdGVzdCAkZXJyc3RhdHVzICE9IDAKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICMgbWF5IGhhdmUgZmFpbGVkIGlmIGludm9rZWQgaW4gYSBwYXJhbGxlbCAibWFrZSAtaiMgaW5zdGFsbCIKKyAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRwYXRoY29tcCIKKyAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgIGVycnN0YXR1cz0wCisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgZmkKKworICAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKyAgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgbWtpbnN0YWxsZGlycyBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL25jdXJzZXMvTWFrZWZpbGUuaW4gYi9uY3Vyc2VzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGY3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjg0IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjExMyAyMDA4LzEwLzE4IDE0OjExOjU0IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbgorIworIyBNYWtlZmlsZSBmb3IgbmN1cnNlcyBzb3VyY2UgY29kZS4KKyMKKyMgVGhpcyBtYWtlcyB0aGUgZm9sbG93aW5nOgorIwlwcm9ncmFtcworIwlpbmNsdWRlcworIwlsaWJyYXJpZXMgKG5vcm1hbC9kZWJ1Zy9wcm9maWxlL3NoYXJlZCkKKyMKKyMgVGhlIHZhcmlhYmxlICdzcmNkaXInIHJlZmVycyB0byB0aGUgc291cmNlLWRpc3RyaWJ1dGlvbiwgYW5kIGNhbiBiZSBzZXQgd2l0aAorIyB0aGUgY29uZmlndXJlIHNjcmlwdCBieSAiLS1zcmNkaXI9RElSIi4KKyMKKyMgVGhlIHJ1bGVzIGFyZSBvcmdhbml6ZWQgdG8gcHJvZHVjZSB0aGUgbGlicmFyaWVzIGZvciB0aGUgY29uZmlndXJlZCBtb2RlbHMsCisjIGFuZCB0aGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29uZmlndXJlZCBkZWZhdWx0IG1vZGVsLgorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK0NGX01GTEFHUyAJPSBAY2ZfY3ZfbWFrZWZsYWdzQAorQFNFVF9NQUtFQAorCit4CQk9IEBFWEVFWFRACitvCQk9IC5AT0JKRVhUQAorCitNT0RFTAkJPSBAREZUX0xXUl9NT0RFTEAKK0RFU1RESVIJCT0gQERFU1RESVJACit0b3Bfc3JjZGlyCT0gQHRvcF9zcmNkaXJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitiaW5kaXIJCT0gQGJpbmRpckAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorZGF0YWRpcgkJPSBAZGF0YWRpckAKKworTElCVE9PTAkJPSBATElCVE9PTEAKK0xJQlRPT0xfQ0xFQU4JPSBATElCX0NMRUFOQAorTElCVE9PTF9DT01QSUxFCT0gQExJQl9DT01QSUxFQAorTElCVE9PTF9MSU5LCT0gQExJQl9MSU5LQAorTElCVE9PTF9JTlNUQUxMCT0gQExJQl9JTlNUQUxMQAorTElCVE9PTF9VTklOU1RBTEwgPSBATElCX1VOSU5TVEFMTEAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfTElCCT0gQElOU1RBTExAIEBJTlNUQUxMX0xJQkAKK0lOU1RBTExfUFJPRwk9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBUgkJPSBAQVJACitBUl9PUFRTCQk9IEBBUl9PUFRTQAorQVdLCQk9IEBBV0tACitMRAkJPSBATERACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitDUFAJCT0gQENQUEAKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorCitJTkNESVIJCT0gJChzcmNkaXIpLy4uL2luY2x1ZGUKK0NQUEZMQUdTCT0gLURIQVZFX0NPTkZJR19IIC1JLi4vbmN1cnNlcyAtSSQoc3JjZGlyKSBAQ1BQRkxBR1NACisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0JVSUxEX0NQUEZMQUdTCT0gLUkuLi9pbmNsdWRlIEBCVUlMRF9DUFBGTEFHU0AKK0JVSUxEX0NDCT0gQEJVSUxEX0NDQAorQlVJTERfQ0NGTEFHUwk9IC1ESEFWRV9DT05GSUdfSCAtSS4uL25jdXJzZXMgLUkkKHNyY2RpcikgLUkkKElOQ0RJUikgJChCVUlMRF9DUFBGTEFHUykgQEJVSUxEX0NGTEFHU0AKK0JVSUxEX0xERkxBR1MJPSBAQlVJTERfTERGTEFHU0AKK0JVSUxEX0xJQlMJPSBAQlVJTERfTElCU0AKKworIyBUaGUgZXhlY3V0YWJsZXMgYnVpbHQgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIHVzZWQgZm9yIGdlbmVyYXRpbmcgc291cmNlIHRoYXQKKyMgaXMgY29tcGlsZWQgaW50byB0aGUgYnVpbGQsIG9yIGFyZSB0ZXN0LXByb2dyYW1zIHRoYXQgYXJlIG5vdCBpbnN0YWxsZWQuCisKK0JVSUxEX0VYRUVYVAk9IEBCVUlMRF9FWEVFWFRACit4CQk9IEBQUk9HX0VYVEAKKworQ0ZMQUdTX0xJQlRPT0wJPSAkKENDRkxBR1MpCitDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ0NfR19PUFRAIC1EVFJBQ0UKK0NGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKK0NGTEFHU19TSEFSRUQJPSAkKENDRkxBR1MpIEBDQ19TSEFSRURfT1BUU0AKKworQ0ZMQUdTX0RFRkFVTFQJPSAkKENGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK0xJTksJCT0gJChMSUJUT09MKQorTERGTEFHUwkJPSBATERGTEFHU0AgQExEX01PREVMQCBATElCU0AKKworU0hMSUJfRElSUwk9IC1MLi4vbGliCitTSExJQl9MSVNUCT0gJChTSExJQl9ESVJTKSBAU0hMSUJfTElTVEAKK1RJTkZPX0xJU1QJPSAkKFNITElCX0RJUlMpIEBUSU5GT19MSVNUQAorVElDU19MSVNUCT0gJChTSExJQl9ESVJTKSBAVElDU19MSVNUQAorCitNS19TSEFSRURfTElCCT0gQE1LX1NIQVJFRF9MSUJACisKK05DVVJTRVNfTUFKT1IJPSBATkNVUlNFU19NQUpPUkAKK05DVVJTRVNfTUlOT1IJPSBATkNVUlNFU19NSU5PUkAKK1JFTF9WRVJTSU9OCT0gQGNmX2N2X3JlbF92ZXJzaW9uQAorQUJJX1ZFUlNJT04JPSBAY2ZfY3ZfYWJpX3ZlcnNpb25ACisKK1JBTkxJQgkJPSBATElCX1BSRVBACisKK0xJQlJBUklFUwk9IEBMSUJTX1RPX01BS0VACisKK0xJTlQJCT0gQExJTlRACitMSU5UX09QVFMJPSBATElOVF9PUFRTQAorTElOVF9MSUJTCT0gLWxuY3Vyc2VzIEBMSUJTQAorCitGQUxMQkFDS19MSVNUCT0gQEZBTExCQUNLX0xJU1RACisKK1VTRV9CSUdfU1RSSU5HUwk9IEBVU0VfQklHX1NUUklOR1NACitURVJNSU5GT19DQVBTCT0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL0BURVJNSU5GT19DQVBTQAorCitBVVRPX1NSQyA9IFwKKwkuL2NvZGVzLmMgXAorCS4vY29tcF9jYXB0YWIuYyBcCisJLi9leHBhbmRlZC5jIFwKKwkuL2ZhbGxiYWNrLmMgXAorCS4vbGliX2dlbi5jIFwKKwkuL2xpYl9rZXluYW1lLmMgXAorCS4vbGlua190ZXN0LmMgXAorCS4vbmFtZXMuYyBcCisJLi91bmN0cmwuYyBcCisJaW5pdF9rZXl0cnkuaCBcCisJa2V5cy5saXN0CisKK1RFU1RfREVQUwk9IC4uL2xpYi9ATElCX1BSRUZJWEBuY3Vyc2VzQERGVF9ERVBfU1VGRklYQAorVEVTVF9BUkdTCT0gQExERkxBR1NfU1RBVElDQCBAVEVTVF9BUkdTQCBATERGTEFHU19TSEFSRURAIAorVEVTVF9MREZMQUdTCT0gQExEX01PREVMQCAkKFRFU1RfQVJHUykgQExJQlNAIEBMT0NBTF9MREZMQUdTQCBATERGTEFHU0AKKworVEVTVF9QUk9HUyA9IFwKKwljYXB0b2luZm8keCBcCisJaGFyZHNjcm9sbCR4IFwKKwlsaW5rX3Rlc3QkeCBcCisJaGFzaG1hcCR4IFwKKwlsaWJfbXZjdXIkeAorCitiYXNlCT0gJChzcmNkaXIpL2Jhc2UKK3NlcmlhbAk9ICQoc3JjZGlyKS90dHkKK3RpbmZvCT0gJChzcmNkaXIpL3RpbmZvCit0cmFjZQk9ICQoc3JjZGlyKS90cmFjZQord2lkZQk9ICQoc3JjZGlyKS93aWRlY2hhcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWxsIFwKK2xpYnMgOjoJCSQoQVVUT19TUkMpIC4uL2xpYiAkKExJQlJBUklFUykKKworc291cmNlczoJJChBVVRPX1NSQykKKworJChERVNURElSKSQoYmluZGlyKSBcCiskKERFU1RESVIpJChsaWJkaXIpIDoKKwlzaCAkKHNyY2RpcikvLi4vbWtkaXJzLnNoICRACisKKy4uL2xpYiA6IDsgbWtkaXIgJEAKKworLi9mYWxsYmFjay5jIDogJCh0aW5mbykvTUtmYWxsYmFjay5zaAorCXNoIC1lICQodGluZm8pL01LZmFsbGJhY2suc2ggQFRFUk1JTkZPQCBAVEVSTUlORk9fU1JDQCAkKEZBTExCQUNLX0xJU1QpID4kQAorCisuL2xpYl9nZW4uYyA6ICQoYmFzZSkvTUtsaWJfZ2VuLnNoIC4uL2luY2x1ZGUvY3Vyc2VzLmgKKwlzaCAtZSAkKGJhc2UpL01LbGliX2dlbi5zaCAiJChDUFApICQoQ1BQRkxBR1MpIiAiJChBV0spIiBnZW5lcmF0ZWQgPC4uL2luY2x1ZGUvY3Vyc2VzLmggPiRACisKK2luaXRfa2V5dHJ5Lmg6IG1ha2Vfa2V5cyQoQlVJTERfRVhFRVhUKSBrZXlzLmxpc3QKKwkuL21ha2Vfa2V5cyQoQlVJTERfRVhFRVhUKSBrZXlzLmxpc3QgPiAkQAorCitrZXlzLmxpc3QgOgkkKHRpbmZvKS9NS2tleXNfbGlzdC5zaAorCUFXSz0kKEFXSykgc2ggJCh0aW5mbykvTUtrZXlzX2xpc3Quc2ggJChURVJNSU5GT19DQVBTKSB8IHNvcnQgPiRACisKK21ha2Vfa2V5cyQoQlVJTERfRVhFRVhUKSA6IFwKKwkJJCh0aW5mbykvbWFrZV9rZXlzLmMgXAorCQluYW1lcy5jCisJJChCVUlMRF9DQykgLW8gJEAgJChCVUlMRF9DQ0ZMQUdTKSAkKHRpbmZvKS9tYWtlX2tleXMuYyAkKEJVSUxEX0xERkxBR1MpICQoQlVJTERfTElCUykKKworbWFrZV9oYXNoJChCVUlMRF9FWEVFWFQpIDogXAorCQkkKHRpbmZvKS9jb21wX2hhc2guYyBcCisJCS4uL2luY2x1ZGUvaGFzaHNpemUuaAorCSQoQlVJTERfQ0MpIC1vICRAICQoQlVJTERfQ0NGTEFHUykgLURNQUlOX1BST0dSQU0gJCh0aW5mbykvY29tcF9oYXNoLmMgJChCVUlMRF9MREZMQUdTKSAkKEJVSUxEX0xJQlMpCisKKy4vZXhwYW5kZWQuYyA6ICQoc2VyaWFsKS9NS2V4cGFuZGVkLnNoCisJc2ggLWUgJChzZXJpYWwpL01LZXhwYW5kZWQuc2ggIiQoQ1BQKSIgJChDUFBGTEFHUykgPiAkQAorCisuL2NvbXBfY2FwdGFiLmM6IFwKKwkJbWFrZV9oYXNoJChCVUlMRF9FWEVFWFQpIFwKKwkJLi4vaW5jbHVkZS9oYXNoc2l6ZS5oIFwKKwkJJCh0aW5mbykvTUtjYXB0YWIuc2ggXAorCQkkKHRpbmZvKS9NS2NhcHRhYi5hd2sKKwlzaCAtZSAkKHRpbmZvKS9NS2NhcHRhYi5zaCAkKEFXSykgJChVU0VfQklHX1NUUklOR1MpICQodGluZm8pL01LY2FwdGFiLmF3ayAkKHNyY2RpcikvLi4vaW5jbHVkZS9AVEVSTUlORk9fQ0FQU0AgPiAkQAorCisuL2xpYl9rZXluYW1lLmM6IGtleXMubGlzdCAkKGJhc2UpL01La2V5bmFtZS5hd2sKKwkkKEFXSykgLWYgJChiYXNlKS9NS2tleW5hbWUuYXdrIGJpZ3N0cmluZ3M9JChVU0VfQklHX1NUUklOR1MpIGtleXMubGlzdCA+ICRACisKKy4vY29kZXMuYzogJCh0aW5mbykvTUtjb2Rlcy5hd2sKKwkkKEFXSykgLWYgJCh0aW5mbykvTUtjb2Rlcy5hd2sgYmlnc3RyaW5ncz0kKFVTRV9CSUdfU1RSSU5HUykgJChzcmNkaXIpLy4uL2luY2x1ZGUvQFRFUk1JTkZPX0NBUFNAID4kQAorCisuL25hbWVzLmM6ICQodGluZm8pL01LbmFtZXMuYXdrCisJJChBV0spIC1mICQodGluZm8pL01LbmFtZXMuYXdrIGJpZ3N0cmluZ3M9JChVU0VfQklHX1NUUklOR1MpICQoc3JjZGlyKS8uLi9pbmNsdWRlL0BURVJNSU5GT19DQVBTQCA+JEAKKworLi91bmN0cmwuYzogJChiYXNlKS9NS3VuY3RybC5hd2sKKwllY2hvIHwgJChBV0spIC1mICQoYmFzZSkvTUt1bmN0cmwuYXdrIGJpZ3N0cmluZ3M9JChVU0VfQklHX1NUUklOR1MpID4kQAorCit0YWdzOgorCWN0YWdzICouW2NoXSAqLyouW2NoXQorCitATUFLRV9VUFBFUl9UQUdTQFRBR1M6CitATUFLRV9VUFBFUl9UQUdTQAlldGFncyAqLltjaF0gKi8qLltjaF0KKworbW9zdGx5Y2xlYW4gOjoKKwktcm0gLWYgY29yZSB0YWdzIFRBR1MgKn4gKi5iYWsgKi5pICoubG4gKi5hdGFjIHRyYWNlCisJLXJtIC1mICQoVEVTVF9QUk9HUykKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktcm0gLWYgJChBVVRPX1NSQykKKwktcm0gLWYgbWFrZV9rZXlzJChCVUlMRF9FWEVFWFQpCisJLXJtIC1mIG1ha2VfaGFzaCQoQlVJTERfRVhFRVhUKQorCS1ybSAtcmYgLmxpYnMKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworIyBUaGVzZSBydWxlcyBhcmUgdXNlZCB0byBhbGxvdyAibWFrZSAtbiIgdG8gd29yayBvbiBhIGNsZWFuIGRpcmVjdG9yeS10cmVlCisuLi9pbmNsdWRlL2hhc2hzaXplLmggXAorLi4vaW5jbHVkZS9wYXJhbWV0cml6ZWQuaCBcCisuLi9pbmNsdWRlL3Rlcm0uaCA6CisJY2QgLi4vaW5jbHVkZTsgJChNQUtFKSAkKENGX01GTEFHUykKKworIyBUaGVzZSBydWxlcyBidWlsZCB0ZXN0LXByb2dyYW1zIGZvciB0aGUgbW9kdWxlcyB0aGF0IGhhdmUgdGVzdC1kcml2ZXJzCit0ZXN0X3Byb2dzIDogJChURVNUX1BST0dTKQorCisuL2xpbmtfdGVzdC5jIDogJChiYXNlKS9NS2xpYl9nZW4uc2ggLi4vaW5jbHVkZS9jdXJzZXMuaAorCXNoIC1lICQoYmFzZSkvTUtsaWJfZ2VuLnNoICIkKENQUCkgJChDUFBGTEFHUykiICIkKEFXSykiIGltcGxlbWVudGVkIDwuLi9pbmNsdWRlL2N1cnNlcy5oID4kQAorCitjYXB0b2luZm8keCA6ICQodGluZm8pL2NhcHRvaW5mby5jICQoVEVTVF9ERVBTKQorCUBFQ0hPX0xJTktAICQoTElCVE9PTF9MSU5LKSAtbyAkQCAkKENGTEFHU19ERUZBVUxUKSAtRE1BSU4gJCh0aW5mbykvY2FwdG9pbmZvLmMgJChURVNUX0xERkxBR1MpCisKK2hhcmRzY3JvbGwkeCA6ICQoc2VyaWFsKS9oYXJkc2Nyb2xsLmMgJChURVNUX0RFUFMpCisJQEVDSE9fTElOS0AgJChMSUJUT09MX0xJTkspIC1vICRAICQoQ0ZMQUdTX0RFRkFVTFQpIC1EU0NST0xMREVCVUcgJChzZXJpYWwpL2hhcmRzY3JvbGwuYyAkKFRFU1RfTERGTEFHUykKKworaGFzaG1hcCR4IDogJChzZXJpYWwpL2hhc2htYXAuYyAkKHNlcmlhbCkvaGFyZHNjcm9sbC5jICQoVEVTVF9ERVBTKQorCUBFQ0hPX0xJTktAICQoTElCVE9PTF9MSU5LKSAtbyAkQCAkKENGTEFHU19ERUZBVUxUKSAtREhBU0hERUJVRyAkKHNlcmlhbCkvaGFzaG1hcC5jICQoc2VyaWFsKS9oYXJkc2Nyb2xsLmMgJChURVNUX0xERkxBR1MpCisKK2xpYl9tdmN1ciR4IDogJChzZXJpYWwpL2xpYl9tdmN1ci5jICQoVEVTVF9ERVBTKSBcCisJCS4uL0BERlRfT0JKX1NVQkRJUkAvZHVtcF9lbnRyeSRvCisJQEVDSE9fTElOS0AgJChMSUJUT09MX0xJTkspIC1vICRAICQoQ0ZMQUdTX0RFRkFVTFQpIC1ETkNVUlNFU19URVNUIC1JJChzZXJpYWwpLy4uLy4uL3Byb2dzICQoc2VyaWFsKS9saWJfbXZjdXIuYyAuLi9AREZUX09CSl9TVUJESVJAL2R1bXBfZW50cnkkbyAkKFRFU1RfTERGTEFHUykKKworbGlua190ZXN0JHggOiAuL2xpbmtfdGVzdC5jICQoVEVTVF9ERVBTKSBcCisJCS4uL0BERlRfT0JKX1NVQkRJUkAvbGlua190ZXN0JG8KKwlARUNIT19MSU5LQCAkKENDKSAtbyAkQCAkKENGTEFHU19ERUZBVUxUKSAuLi9AREZUX09CSl9TVUJESVJAL2xpbmtfdGVzdCRvICQoVEVTVF9MREZMQUdTKQorCisuLi9AREZUX09CSl9TVUJESVJAL2R1bXBfZW50cnkkbzoKKwljZCAuLi9wcm9ncyAmJiAkKE1BS0UpIC4uL0BERlRfT0JKX1NVQkRJUkAvZHVtcF9lbnRyeSRvCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL25jdXJzZXMvUkVBRE1FIGIvbmN1cnNlcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwYWE1YgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvUkVBRE1FCkBAIC0wLDAgKzEsMzEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRE1FLHYgMS45IDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGb3IgZGlzY3Vzc2lvbiBvZiB0aGUgcGFja2FnZSBpbnRlcm5hbHMsIHNlZSBoYWNrZ3VpZGUuaHRtbCBpbiB0aGUgZG9jL2h0bWwKK2RpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL25jdXJzZXMvUkVBRE1FLklaIGIvbmN1cnNlcy9SRUFETUUuSVoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyMDZjZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvUkVBRE1FLklaCkBAIC0wLDAgKzEsOTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRE1FLklaLHYgMS4yIDIwMDYvMDQvMjIgMjM6MTM6MDUgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBpcyB0aGUgcGF0Y2guICBJIGRpZCBubyB0ZXN0aW5nIHdoYXRzb2V2ZXIgd2l0aCBldmVudCB3YXRjaGluZworcmVxdWVzdHMgcHJlc2VudCAoSSBuZWVkIHNvbWUgYXBwbGljYXRpb25zIHdoaWNoIGV4ZXJzaXplIHRoaXMgYmVmb3JlCit0aGlzLCBwcm9iYWJseSBseW54IDstKSwgYnV0IHRoZSBjb2RlIGxvb2tzIHdvcmtpbmcgInRoZSBub3JtYWwgd2F5Ii4KKworSSBoYWQgbm8gd2F5IHRvIHRlc3QgdGhhdCB0aGUgcG9sbCgpIGJyYW5jaCBjb21waWxlcy93b3Jrcy4uLgorCitIZXJlIGlzIHRoZSBBUEk6IAorCisqKSB0d28gbmV3IGZ1bmN0aW9ucyB3Z2V0Y2hfZXZlbnRzKCkgd2dldHN0cm5fZXZlbnQoKSBhcmUgaW50cm9kdWNlZCwKKyAgIHdoaWNoIGFsbG93IGFuIGV2ZW50LXdhdGNoIHNwZWNpZmljYXRpb24gZ2l2ZW4gYXMgdGhlIGxhc3QgYXJndW1lbnQ7CisKKyopIGlmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIE5VTEwsIHRoZXkgYmVoYXZlIGFzIHdnZXRjaCgpIGFuZAorICAgd2dldHN0cm4oKSAoVEVTVEVEISk7CisKKyopIHRoZSBldmVudCBzcGVjaWZpY2F0aW9uIGlzIGEgcG9pbnRlciB0byBfbmNfZXZlbnRsaXN0LCB3aGljaAorICAgY29udGFpbnMgYm9va2tlZXBpbmcgZWxlbWVudHMgKGNvdW50IGFuZCB0aGUgc3VtbWFyeSBvZiByZXN1bHRzKSwKKyAgIGFuZCBhbiBhcnJheSBvZiBwb2ludGVycyB0byBfbmNfZXZlbnQ7CisKKyopIGVhY2ggX25jX2V2ZW50IGlzIGEgdHlwZWQgdW5pb24sIHdpdGggdHdvIHR5cGVzIHN1cHBvcnRlZCAiYXMKKyAgIHNoaXBwZWQiOiBfTkNfRVZFTlRfVElNRU9VVF9NU0VDLCBfTkNfRVZFTlRfRklMRS4gIEZvcgorICAgX05DX0VWRU5UX0ZJTEUgdGhlIGZpZWxkcyBhcmUgZmQsIGZsYWcsIGFuZCB0aGUgb3V0cHV0IGZpZWxkLgorCisqKSBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyAiYXMgc2hpcHBlZCIgaXMgX05DX0VWRU5UX0ZJTEVfUkVBREFCTEUuCisgICBJZiB0aGUgZmlsZSB3YXMgZm91bmQgcmVhZGFibGUsIHRoZSByZXR1cm4gZmllbGQgaXMgc2V0IHRvIHRoaXMsCisgICBvdGhlcndpc2UgdG8gMDsKKworKikgSWYgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBLRVlfRVZFTlQsIHRoaXMgbWVhbnMgdGhhdCB0aGUgcmV0dXJuCisgICBmaWVsZHMgaW4gYm90aCB0aGUgX25jX2V2ZW50bGlzdCBhbmQgX25jX2V2ZW50IHN0cnVjdHVyZXMgbWFrZQorICAgc2Vuc2UuICBUaGUgZmllbGQgcmVzdWx0X2ZsYWdzIG9mIF9uY19ldmVudGxpc3QgbWF5IGhhdmUgYQorICAgY29tYmluYXRpb24gb2YgYml0cyBfTkNfRVZFTlRfVElNRU9VVF9NU0VDIGFuZCBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRQorICAgc2V0OworCisqKSBUaGUgdGltZW91dF9tc2VjIGZpZWxkIG9mIF9OQ19FVkVOVF9USU1FT1VUX01TRUMgX25jX2V2ZW50J3MgaXMKKyAgIHVwZGF0ZWQgb24gcmV0dXJuLCBldmVuIGlmIHRoZSByZXR1cm4gaXMgbm90IEtFWV9FVkVOVC4gIEhvd2V2ZXIsCisgICB0aGUgY2hhbmdlIGluIHRoZSB2YWx1ZSByZXByZXNlbnRzIG9ubHkgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IGluCisgICB3YWl0aW5nIGZvciBldmVudHMsIG5vdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgYm9va2tlZXBpbmc7CisKKyopIHRoZSByZXR1cm4gS0VZX0VWRU5UIG9mIHdnZXRzdHJuX2V2ZW50KCkgbWVhbnMgdGhhdCB0aGUgb3V0cHV0CisgICBzdHJpbmcgaW5jbHVkZXMgdGhlIHVzZXIgaW5wdXQgdHlwZWQgc28gZmFyLCBidXQgdGhlIHVzZXIgZGlkIG5vdCBoYXZlCisgICBhIGNoYW5jZSB0byBwcmVzcyBFTlRFUiAob3Igd2hhdGV2ZXIpLiAgVGhpcyBjYWxsIHNob3VsZCBiZQorICAgcmVwZWF0ZWQgKHdpdGggInNoaWZ0ZWQiIHBvaW50ZXIgdG8gYSBidWZmZXIsIG9mIGNvdXJzZSkgdG8KKyAgIGNvbXBsZXRlIHRoZSBpbnB1dDsKKworKikgVGhlIHByZXNlbmNlIG9mIHRoaXMgZXh0ZW5zaW9uIGNhbiBiZSBjaGVja2VkIHZpYSBpbnNwZWN0aW5nCisgICAjaWZkZWYgTkNVUlNFU19FVkVOVF9WRVJTSU9OLiAgVGhpcyBzeW1ib2wgaXMgbm90IGRlZmluZWQgb24gQmVPUywKKyAgIHNpbmNlIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHRoaXMgb24gQmVPUy4KKworS25vd24gaXNzdWVzOiAgY2FsbHMgaW50ZXJydXB0ZWQgYnkgS0VZX0VWRU5UIHJlc2V0IHRoZSBFU0NERUxBWQordGltZXIuICBUaGlzIGlzIG5vdCBlbnRpcmVseSBuZXcsIHNpbmNlIG90aGVyIHN5bnRoZXRpYyBldmVudHMgYmVoYXZlCit0aGUgc2FtZSAoc2VlICJpZiAoY2ggPj0gS0VZX01JTikiIGJyYW5jaCBvZiBrZ2V0Y2goKSkuICBIb3dldmVyLAorS0VZX0VWRU5UIG1heSBiZSBnZW5lcmF0ZWQgaW4gYSBjb250aW51b3VzIHN0cmVhbSAoc2F5LCB3aGVuCitkb3dubG9hZGluZyBhIGZpbGUpLCB0aHVzIHRoaXMgbWF5IGJlIG1vcmUgaW1wb3J0YW50IHRoYW4gd2l0aCBvdGhlcgorc3ludGhldGljIGtleXMuICBBbiBhZGRpdGlvbmFsIGZpZWxkIGluIHdpbmRvdyBzdHJ1Y3R1cmUgd2hpY2gga2VlcHMKK3RpbWVzdGFtcCBvZiB0aGUgZmlyc3QgcmF3IGtleSBpbiB0aGUgcXVldWUgbWF5IGJlIG5lZWRlZCB0bworY2lyY3VtdmVudCB0aGlzLgorCitBbm90aGVyIHBvc3NpYmxlIGlzc3VlOiBLRVlfRVZFTlQgaGFzIGEgcHJlZmVyZW5jZSBvdmVyIGEgdXNlciBpbnB1dCwKK3NvIGEgc3RyZWFtIG9mIEtFWV9FVkVOVCdzIGNhbiBtYWtlIGlucHV0IGhhcmQuICBNYXliZSB1c2UKK3Jlc3VsdF9mbGFncyBhcyBpbiBpbnB1dCBwYXJhbWV0ZXIgdG9vLCB3aGljaCBzcGVjaWZpZXMgd2hldGhlciB0aGUKK3VzZXIgaW5wdXQgc2hvdWxkIGhhdmUgaGlnaGVyIHByZWNlZGVuY2U/CisKK0Fsc286IEkgdG9vayBhbiBvcHBvcnR1bml0eSB0byBkb2N1bWVudCBrZ2V0Y2goKSBiZXR0ZXIuCisKK0Vuam95LAorSWx5YQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9TaWdBY3Rpb24uaCBiL25jdXJzZXMvU2lnQWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmZGU2NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvU2lnQWN0aW9uLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogJElkOiBTaWdBY3Rpb24uaCx2IDEuOCAyMDA1LzA4LzA2IDIwOjA1OjMyIHRvbSBFeHAgJAorICoKKyAqIFRoaXMgZmlsZSBleGlzdHMgdG8gaGFuZGxlIG5vbi1QT1NJWCBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgPHVuaXN0ZC5oPiwKKyAqIGFuZCB1c3VhbGx5IG5vIHNpZ2FjdGlvbigpIG5vciA8dGVybWlvcy5oPgorICovCisKKyNpZm5kZWYgX1NJR0FDVElPTl9ICisjZGVmaW5lIF9TSUdBQ1RJT05fSAorCisjaWZuZGVmIEhBVkVfU0lHQUNUSU9OCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU0lHVkVDCisjZGVmaW5lIEhBVkVfU0lHVkVDIDAKKyNlbmRpZgorCisjaWYgSEFWRV9TSUdBQ1RJT04KKworI2lmICFIQVZFX1RZUEVfU0lHQUNUSU9OCit0eXBlZGVmIHN0cnVjdCBzaWdhY3Rpb24gc2lnYWN0aW9uX3Q7CisjZW5kaWYKKworI2Vsc2UJLyogIUhBVkVfU0lHQUNUSU9OICovCisKKyNpZiBIQVZFX1NJR1ZFQworCisjdW5kZWYgIFNJR19CTE9DSworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgMDAKKworI3VuZGVmICBTSUdfVU5CTE9DSworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgMDEKKworI3VuZGVmICBTSUdfU0VUTUFTSworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgMDIKKworIAkvKgorCSAqIDxic2Qvc2lnbmFsLmg+IGlzIGluIHRoZSBMaW51eCAxLjIuOCArIGdjYyAyLjcuMCBjb25maWd1cmF0aW9uLAorCSAqIGFuZCBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgdGhpcyBoZWFkZXIgZmlsZS4KKwkgKi8KKyNpZiBIQVZFX0JTRF9TSUdOQUxfSAorI2luY2x1ZGUgPGJzZC9zaWduYWwuaD4KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBzaWd2ZWMgc2lnYWN0aW9uX3Q7CisKKyNkZWZpbmUgc2lnc2V0X3QgX25jX3NpZ3NldF90Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKyN1bmRlZiAgc2FfbWFzaworI2RlZmluZSBzYV9tYXNrIHN2X21hc2sKKyN1bmRlZiAgc2FfaGFuZGxlcgorI2RlZmluZSBzYV9oYW5kbGVyIHN2X2hhbmRsZXIKKyN1bmRlZiAgc2FfZmxhZ3MKKyNkZWZpbmUgc2FfZmxhZ3Mgc3ZfZmxhZ3MKKworI3VuZGVmICBzaWdhY3Rpb24KKyNkZWZpbmUgc2lnYWN0aW9uICAgX25jX3NpZ2FjdGlvbgorI3VuZGVmICBzaWdwcm9jbWFzaworI2RlZmluZSBzaWdwcm9jbWFzayBfbmNfc2lncHJvY21hc2sKKyN1bmRlZiAgc2lnZW1wdHlzZXQKKyNkZWZpbmUgc2lnZW1wdHlzZXQgX25jX3NpZ2VtcHR5c2V0CisjdW5kZWYgIHNpZ3N1c3BlbmQKKyNkZWZpbmUgc2lnc3VzcGVuZCAgX25jX3NpZ3N1c3BlbmQKKyN1bmRlZiAgc2lnZGVsc2V0CisjZGVmaW5lIHNpZ2RlbHNldCAgIF9uY19zaWdkZWxzZXQKKyN1bmRlZiAgc2lnYWRkc2V0CisjZGVmaW5lIHNpZ2FkZHNldCAgIF9uY19zaWdhZGRzZXQKKworLyogdHR5L2xpYl90c3RwLmMgaXMgdGhlIG9ubHkgdXNlciAqLworI2luY2x1ZGUgPGJhc2Uvc2lnYWN0aW9uLmM+CisKKyNlbmRpZiAvKiBIQVZFX1NJR1ZFQyAqLworI2VuZGlmIC8qIEhBVkVfU0lHQUNUSU9OICovCisjZW5kaWYgLyogIWRlZmluZWQoX1NJR0FDVElPTl9IKSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL01La2V5bmFtZS5hd2sgYi9uY3Vyc2VzL2Jhc2UvTUtrZXluYW1lLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzViYTJhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL01La2V5bmFtZS5hd2sKQEAgLTAsMCArMSwxNjEgQEAKKyMgJElkOiBNS2tleW5hbWUuYXdrLHYgMS40MCAyMDA4LzA3LzEyIDE4OjQwOjAwIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQkVHSU4geworCXByaW50ICIvKiBnZW5lcmF0ZWQgYnkgTUtrZXluYW1lLmF3ayAqLyIKKwlwcmludCAiIgorCXByaW50ICIjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4iCisJcHJpbnQgIiNpbmNsdWRlIDx0aWMuaD4iCisJcHJpbnQgIiNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+IgorCXByaW50ICIiCisJZmlyc3QgPSAxOworfQorCisvXlteI10vIHsKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJCWlmIChmaXJzdCkgIHsKKwkJCQlwcmludCAic3RydWN0IGtuIHsgc2hvcnQgb2Zmc2V0OyBpbnQgY29kZTsgfTsiCisJCQkJcHJpbnQgInN0YXRpYyBjb25zdCBzdHJ1Y3Qga24gX25jX2tleV9uYW1lc1tdID0geyIKKwkJCX0KKwkJCXByaW50ZiAiXHR7ICVkLCAlcyB9LFxuIiwgb2Zmc2V0LCAkMQorCQkJb2Zmc2V0ICs9IGxlbmd0aCgkMSkgKyAxCisJCQluYW1lcyA9IG5hbWVzIlxuXHRcIiIkMSJcXDBcIiIKKwkJfSBlbHNlIHsKKwkJCWlmIChmaXJzdCkgeworCQkJCXByaW50ICJzdHJ1Y3Qga24geyBjb25zdCBjaGFyICpuYW1lOyBpbnQgY29kZTsgfTsiCisJCQkJcHJpbnQgInN0YXRpYyBjb25zdCBzdHJ1Y3Qga24gX25jX2tleV9uYW1lc1tdID0geyIKKwkJCX0KKwkJCXByaW50ZiAiXHR7IFwiJXNcIiwgJXMgfSxcbiIsICQxLCAkMTsKKwkJfQorCQlmaXJzdCA9IDA7CisJfQorCitFTkQgeworCWlmIChiaWdzdHJpbmdzKSB7CisJCXByaW50ZiAiXHR7IC0xLCAwIH19O1xuIgorCQlwcmludCAiIgorCQlwcmludCAic3RhdGljIGNvbnN0IGNoYXIga2V5X25hbWVzW10gPSAibmFtZXMiOyIKKwl9IGVsc2UgeworCQlwcmludGYgIlx0eyAwLCAwIH19O1xuIgorCX0KKwlwcmludCAiIgorCXByaW50ICIjZGVmaW5lIFNJWkVPRl9UQUJMRSAyNTYiCisJcHJpbnQgIiNkZWZpbmUgTXlUYWJsZSBfbmNfZ2xvYmFscy5rZXluYW1lX3RhYmxlIgorCXByaW50ICIiCisJcHJpbnQgIk5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciAqKSBfbmNfa2V5bmFtZSAoU0NSRUVOICpzcCwgaW50IGMpIgorCXByaW50ICJ7IgorCXByaW50ICIJaW50IGk7IgorCXByaW50ICIJY2hhciBuYW1lWzIwXTsiCisJcHJpbnQgIgljaGFyICpwOyIKKwlwcmludCAiCU5DVVJTRVNfQ09OU1QgY2hhciAqcmVzdWx0ID0gMDsiCisJcHJpbnQgIiIKKwlwcmludCAiCWlmIChjID09IC0xKSB7IgorCXByaW50ICIJCXJlc3VsdCA9IFwiLTFcIjsiCisJcHJpbnQgIgl9IGVsc2UgeyIKKwlpZiAoYmlnc3RyaW5ncykgeworCQlwcmludCAiCQlmb3IgKGkgPSAwOyBfbmNfa2V5X25hbWVzW2ldLm9mZnNldCAhPSAtMTsgaSsrKSB7IgorCQlwcmludCAiCQkJaWYgKF9uY19rZXlfbmFtZXNbaV0uY29kZSA9PSBjKSB7IgorCQlwcmludCAiCQkJCXJlc3VsdCA9IChOQ1VSU0VTX0NPTlNUIGNoYXIgKilrZXlfbmFtZXMgKyBfbmNfa2V5X25hbWVzW2ldLm9mZnNldDsiCisJCXByaW50ICIJCQkJYnJlYWs7IgorCQlwcmludCAiCQkJfSIKKwkJcHJpbnQgIgkJfSIKKwl9IGVsc2UgeworCQlwcmludCAiCQlmb3IgKGkgPSAwOyBfbmNfa2V5X25hbWVzW2ldLm5hbWUgIT0gMDsgaSsrKSB7IgorCQlwcmludCAiCQkJaWYgKF9uY19rZXlfbmFtZXNbaV0uY29kZSA9PSBjKSB7IgorCQlwcmludCAiCQkJCXJlc3VsdCA9IChOQ1VSU0VTX0NPTlNUIGNoYXIgKilfbmNfa2V5X25hbWVzW2ldLm5hbWU7IgorCQlwcmludCAiCQkJCWJyZWFrOyIKKwkJcHJpbnQgIgkJCX0iCisJCXByaW50ICIJCX0iCisJfQorCXByaW50ICIiCisJcHJpbnQgIgkJaWYgKHJlc3VsdCA9PSAwICYmIChjID49IDAgJiYgYyA8IFNJWkVPRl9UQUJMRSkpIHsiCisJcHJpbnQgIgkJCWlmIChNeVRhYmxlID09IDApIgorCXByaW50ICIJCQkJTXlUYWJsZSA9IHR5cGVDYWxsb2MoY2hhciAqLCBTSVpFT0ZfVEFCTEUpOyIKKwlwcmludCAiCQkJaWYgKE15VGFibGUgIT0gMCkgeyIKKwlwcmludCAiCQkJCWlmIChNeVRhYmxlW2NdID09IDApIHsiCisJcHJpbnQgIgkJCQkJaW50IGNjID0gYzsiCisJcHJpbnQgIgkJCQkJcCA9IG5hbWU7IgorCXByaW50ICIJCQkJCWlmIChjYyA+PSAxMjggJiYgKHNwID09IDAgfHwgc3AtPl91c2VfbWV0YSkpIHsiCisJcHJpbnQgIgkJCQkJCXN0cmNweShwLCBcIk0tXCIpOyIKKwlwcmludCAiCQkJCQkJcCArPSAyOyIKKwlwcmludCAiCQkJCQkJY2MgLT0gMTI4OyIKKwlwcmludCAiCQkJCQl9IgorCXByaW50ICIJCQkJCWlmIChjYyA8IDMyKSIKKwlwcmludCAiCQkJCQkJc3ByaW50ZihwLCBcIl4lY1wiLCBjYyArICdAJyk7IgorCXByaW50ICIJCQkJCWVsc2UgaWYgKGNjID09IDEyNykiCisJcHJpbnQgIgkJCQkJCXN0cmNweShwLCBcIl4/XCIpOyIKKwlwcmludCAiCQkJCQllbHNlIgorCXByaW50ICIJCQkJCQlzcHJpbnRmKHAsIFwiJWNcIiwgY2MpOyIKKwlwcmludCAiCQkJCQlNeVRhYmxlW2NdID0gc3RyZHVwKG5hbWUpOyIKKwlwcmludCAiCQkJCX0iCisJcHJpbnQgIgkJCQlyZXN1bHQgPSBNeVRhYmxlW2NdOyIKKwlwcmludCAiCQkJfSIKKwlwcmludCAiI2lmIE5DVVJTRVNfRVhUX0ZVTkNTICYmIE5DVVJTRVNfWE5BTUVTIgorCXByaW50ICIJCX0gZWxzZSBpZiAocmVzdWx0ID09IDAgJiYgY3VyX3Rlcm0gIT0gMCkgeyIKKwlwcmludCAiCQkJaW50IGosIGs7IgorCXByaW50ICIJCQljaGFyICogYm91bmQ7IgorCXByaW50ICIJCQlURVJNVFlQRSAqdHAgPSAmKGN1cl90ZXJtLT50eXBlKTsiCisJcHJpbnQgIgkJCWludCBzYXZlX3RyYWNlID0gX25jX3RyYWNpbmc7IgorCXByaW50ICIiCisJcHJpbnQgIgkJCV9uY190cmFjaW5nID0gMDsJLyogcHJldmVudCByZWN1cnNpb24gdmlhIGtleWJvdW5kKCkgKi8iCisJcHJpbnQgIgkJCWZvciAoaiA9IDA7IChib3VuZCA9IGtleWJvdW5kKGMsIGopKSAhPSAwOyArK2opIHsiCisJcHJpbnQgIgkJCQlmb3IoayA9IFNUUkNPVU5UOyBrIDwgKGludCkgTlVNX1NUUklOR1ModHApOyAgaysrKSB7IgorCXByaW50ICIJCQkJCWlmICh0cC0+U3RyaW5nc1trXSAhPSAwICYmICFzdHJjbXAoYm91bmQsIHRwLT5TdHJpbmdzW2tdKSkgeyIKKwlwcmludCAiCQkJCQkJcmVzdWx0ID0gRXh0U3RybmFtZSh0cCwgaywgc3RybmFtZXMpOyIKKwlwcmludCAiCQkJCQkJYnJlYWs7IgorCXByaW50ICIJCQkJCX0iCisJcHJpbnQgIgkJCQl9IgorCXByaW50ICIJCQkJZnJlZShib3VuZCk7IgorCXByaW50ICIJCQkJaWYgKHJlc3VsdCAhPSAwKSIKKwlwcmludCAiCQkJCQlicmVhazsiCisJcHJpbnQgIgkJCX0iCisJcHJpbnQgIgkJCV9uY190cmFjaW5nID0gc2F2ZV90cmFjZTsiCisJcHJpbnQgIiNlbmRpZiIKKwlwcmludCAiCQl9IgorCXByaW50ICIJfSIKKwlwcmludCAiCXJldHVybiByZXN1bHQ7IgorCXByaW50ICJ9IgorCXByaW50ICIiCisJcHJpbnQgIk5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciAqKSBrZXluYW1lIChpbnQgYykiCisJcHJpbnQgInsiCisJcHJpbnQgIlx0cmV0dXJuIF9uY19rZXluYW1lKFNQLCBjKTsiCisJcHJpbnQgIn0iCisJcHJpbnQgIiIKKwlwcmludCAiI2lmIE5PX0xFQUtTIgorCXByaW50ICJ2b2lkIF9uY19rZXluYW1lX2xlYWtzKHZvaWQpIgorCXByaW50ICJ7IgorCXByaW50ICIJaW50IGo7IgorCXByaW50ICIJaWYgKE15VGFibGUgIT0gMCkgeyIKKwlwcmludCAiCQlmb3IgKGogPSAwOyBqIDwgU0laRU9GX1RBQkxFOyArK2opIHsiCisJcHJpbnQgIgkJCUZyZWVJZk5lZWRlZChNeVRhYmxlW2pdKTsiCisJcHJpbnQgIgkJfSIKKwlwcmludCAiCQlGcmVlQW5kTnVsbChNeVRhYmxlKTsiCisJcHJpbnQgIgl9IgorCXByaW50ICJ9IgorCXByaW50ICIjZW5kaWYgLyogTk9fTEVBS1MgKi8iCit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvTUtsaWJfZ2VuLnNoIGIvbmN1cnNlcy9iYXNlL01LbGliX2dlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTg0ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL01LbGliX2dlbi5zaApAQCAtMCwwICsxLDQyOSBAQAorIyEvYmluL3NoCisjCisjIE1LbGliX2dlbi5zaCAtLSBnZW5lcmF0ZSBzb3VyY2VzIGZyb20gY3Vyc2VzLmggbWFjcm8gZGVmaW5pdGlvbnMKKyMKKyMgKCRJZDogTUtsaWJfZ2VuLnNoLHYgMS4zNCAyMDA4LzA4LzMwIDE5OjIwOjUwIHRvbSBFeHAgJCkKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgcmVxdWlyZXMgYWxsIGN1cnNlcyBlbnRyeSBwb2ludHMgdG8gZXhpc3QgYXMKKyMgZnVuY3Rpb25zLCBldmVuIHRob3VnaCBtYW55IGRlZmluaXRpb25zIHdvdWxkIG5vcm1hbGx5IGJlIHNoYWRvd2VkCisjIGJ5IG1hY3Jvcy4gIFJhdGhlciB0aGFuIGhhbmQtaGFjayBhbGwgdGhhdCBjb2RlLCB3ZSBhY3R1YWxseQorIyBnZW5lcmF0ZSBmdW5jdGlvbnMgZnJvbSB0aGUgbWFjcm9zLgorIworIyBUaGlzIHNjcmlwdCBhY2NlcHRzIGEgZmlsZSBvZiBwcm90b3R5cGVzIG9uIHN0YW5kYXJkIGlucHV0LiAgSXQgZGlzY2FyZHMKKyMgYW55IHRoYXQgZG9uJ3QgaGF2ZSBhIGBnZW5lcmF0ZWQnIGNvbW1lbnQgYXR0YWNoZWQuIEl0IHRoZW4gcGFyc2VzIGVhY2gKKyMgcHJvdG90eXBlIChyZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgbm9uZSBvZiB0aGUgbWFjcm9zIHRha2UgZnVuY3Rpb24KKyMgcG9pbnRlciBvciBhcnJheSBhcmd1bWVudHMpIGFuZCBnZW5lcmF0ZXMgQyBzb3VyY2UgZnJvbSBpdC4KKyMKKyMgSGVyZSBpcyB3aGF0IHRoZSBwaXBlbGluZSBzdGFnZXMgYXJlIGRvaW5nOgorIworIyAxLiBzZWQ6IGV4dHJhY3QgcHJvdG90eXBlcyBvZiBnZW5lcmF0ZWQgZnVuY3Rpb25zCisjIDIuIHNlZDogZGVjb3JhdGUgcHJvdG90eXBlcyB3aXRoIGdlbmVyYXRlZCBhcmd1bWVudHMgYTEuIGEyLC4uLnoKKyMgMy4gYXdrOiBnZW5lcmF0ZSB0aGUgY2FsbHMgd2l0aCBhcmdzIG1hdGNoaW5nIHRoZSBmb3JtYWxzCisjIDQuIHNlZDogcHJlZml4IGZ1bmN0aW9uIG5hbWVzIGluIHByb3RvdHlwZXMgc28gdGhlIHByZXByb2Nlc3NvciB3b24ndCBleHBhbmQKKyMgICAgICAgICB0aGVtLgorIyA1LiBjcHA6IG1hY3JvLWV4cGFuZCB0aGUgZmlsZSBzbyB0aGUgbWFjcm8gY2FsbHMgdHVybiBpbnRvIEMgY2FsbHMKKyMgNi4gYXdrOiBzdHJpcCB0aGUgZXhwYW5zaW9uIGp1bmsgb2ZmIHRoZSBmcm9udCBhbmQgYWRkIHRoZSBuZXcgaGVhZGVyCisjIDcuIHNlZDogc3F1ZWV6ZSBzcGFjZXMsIHN0cmlwIG9mZiBnZW5fIHByZWZpeCwgY3JlYXRlIG5lZWRlZCAjdW5kZWYKKyMKKworIyBrZWVwIHRoZSBlZGl0aW5nIGluZGVwZW5kZW50IG9mIGxvY2FsZToKK2lmIHRlc3QgIiR7TEFOR1VBR0Urc2V0fSIgICAgPSBzZXQ7IHRoZW4gTEFOR1VBR0U9QzsgICAgZXhwb3J0IExBTkdVQUdFOyAgICBmaQoraWYgdGVzdCAiJHtMQU5HK3NldH0iICAgICAgICA9IHNldDsgdGhlbiBMQU5HPUM7ICAgICAgICBleHBvcnQgTEFORzsgICAgICAgIGZpCitpZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiAgICAgID0gc2V0OyB0aGVuIExDX0FMTD1DOyAgICAgIGV4cG9ydCBMQ19BTEw7ICAgICAgZmkKK2lmIHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgPSBzZXQ7IHRoZW4gTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyBmaQoraWYgdGVzdCAiJHtMQ19DVFlQRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQ19DVFlQRT1DOyAgICBleHBvcnQgTENfQ1RZUEU7ICAgIGZpCitpZiB0ZXN0ICIke0xDX0NPTExBVEUrc2V0fSIgID0gc2V0OyB0aGVuIExDX0NPTExBVEU9QzsgIGV4cG9ydCBMQ19DT0xMQVRFOyAgZmkKKworcHJlcHJvY2Vzc29yPSIkMSAtRE5DVVJTRVNfSU5URVJOQUxTIC1JLi4vaW5jbHVkZSIKK0FXSz0iJDIiCitVU0U9IiQzIgorCitQSUQ9JCQKK0VEMT1zZWQxXyR7UElEfS5zZWQKK0VEMj1zZWQyXyR7UElEfS5zZWQKK0VEMz1zZWQzXyR7UElEfS5zZWQKK0VEND1zZWQ0XyR7UElEfS5zZWQKK0FXMT1hd2sxXyR7UElEfS5hd2sKK0FXMj1hd2syXyR7UElEfS5hd2sKK1RNUD1nZW5fXyR7UElEfS5jCit0cmFwICJybSAtZiAkRUQxICRFRDIgJEVEMyAkRUQ0ICRBVzEgJEFXMiAkVE1QIiAwIDEgMiA1IDE1CisKK0FMTD0kVVNFCitpZiB0ZXN0ICIkVVNFIiA9IGltcGxlbWVudGVkIDsgdGhlbgorCUNBTEw9ImNhbGxfIgorCWNhdCA+JEVEMSA8PEVPRjEKKy9eZXh0ZXJuLippbXBsZW1lbnRlZC97CisJaAorCXMvXi4qaW1wbGVtZW50ZWQ6XChbXiAJKl0qXCkuKi9QX1BPVU5EQ2lmX1VTRV9cMV9TVVBQT1JUL3AKKwlnCisJcy9eZXh0ZXJuIFwoW147XSpcKTsuKi9cMS9wCisJZworCXMvXi4qaW1wbGVtZW50ZWQ6XChbXiAJKl0qXCkuKi9QX1BPVU5EQ2VuZGlmL3AKK30KKy9eZXh0ZXJuLipnZW5lcmF0ZWQveworCWgKKwlzL14uKmdlbmVyYXRlZDpcKFteIAkqXSpcKS4qL1BfUE9VTkRDaWZfVVNFX1wxX1NVUFBPUlQvcAorCWcKKwlzL15leHRlcm4gXChbXjtdKlwpOy4qL1wxL3AKKwlnCisJcy9eLipnZW5lcmF0ZWQ6XChbXiAJKl0qXCkuKi9QX1BPVU5EQ2VuZGlmL3AKK30KK0VPRjEKK2Vsc2UKKwlDQUxMPSIiCisJY2F0ID4kRUQxIDw8RU9GMQorL15leHRlcm4uKiR7QUxMfS97CisJaAorCXMvXi4qJHtBTEx9OlwoW14gCSpdKlwpLiovUF9QT1VORENpZl9VU0VfXDFfU1VQUE9SVC9wCisJZworCXMvXmV4dGVybiBcKFteO10qXCk7LiovXDEvcAorCWcKKwlzL14uKiR7QUxMfTpcKFteIAkqXSpcKS4qL1BfUE9VTkRDZW5kaWYvcAorfQorRU9GMQorZmkKKworY2F0ID4kRUQyIDw8RU9GMgorL15QXy9iIG5jCisvKHZvaWQpL2IgbmMKKwlzLywvIGExJSAvCisJcy8sLyBhMiUgLworCXMvLC8gYTMlIC8KKwlzLywvIGE0JSAvCisJcy8sLyBhNSUgLworCXMvLC8gYTYlIC8KKwlzLywvIGE3JSAvCisJcy8sLyBhOCUgLworCXMvLC8gYTklIC8KKwlzLywvIGExMCUgLworCXMvLC8gYTExJSAvCisJcy8sLyBhMTIlIC8KKwlzLywvIGExMyUgLworCXMvLC8gYTE0JSAvCisJcy8sLyBhMTUlIC8KKwlzLyovICogL2cKKwlzLyUvICwgL2cKKwlzLykvIHopLworCXMvXC5cLlwuIHopLy4uLikvCis6bmMKKwlzLygvICggLworCXMvKS8gKS8KK0VPRjIKKworY2F0ID4kRUQzIDw8RU9GMworL15QXy97CisJcy9eUF9QT1VORENpZl8vI2lmIC8KKwlzL15QX1BPVU5EQ2VuZGlmLyNlbmRpZi8KKwlzL15QXy8vCisJYiBkb25lCit9CisJcy8JCSovIC9nCisJcy8gICovIC9nCisJcy8gLC8sL2cKKwlzLyggLygvZworCXMvICkvKS9nCisJcy8gZ2VuXy8gLworCXMvXk1fLyN1bmRlZiAvCisJcy9eWyAJXSpAWyAJXSpAWyAJXSovCS8KKzpkb25lCitFT0YzCisKK2lmIHRlc3QgIiRVU0UiID0gZ2VuZXJhdGVkIDsgdGhlbgorY2F0ID4kRUQ0IDw8RU9GCisJcy9eXCguKlwpIFwoLipcKSAoXCguKlwpKVwkL05DVVJTRVNfRVhQT1JUKFwxKSBcMiAoXDMpLworRU9GCitlbHNlCitjYXQgPiRFRDQgPDxFT0YKKy9eXCguKlwpIFwoLipcKSAoXCguKlwpKVwkLyB7CisJaAorCXMvXlwoLipcKSBcKC4qXCkgKFwoLipcKSlcJC9leHRlcm4gXDEgY2FsbF9cMiAoXDMpOy8KKwlwCisJZworCXMvXlwoLipcKSBcKC4qXCkgKFwoLipcKSlcJC9cMSBjYWxsX1wyIChcMykvCisJfQorRU9GCitmaQorCitjYXQgPiRBVzEgPDxcRU9GMQorQkVHSU4JeworCQlza2lwPTA7CisJfQorL15QX1BPVU5EQ2lmLyB7CisJCXByaW50ICJcbiIKKwkJcHJpbnQgJDAKKwkJc2tpcD0wOworfQorL15QX1BPVU5EQ2VuZGlmLyB7CisJCXByaW50ICQwCisJCXNraXA9MTsKK30KKyQwICF+IC9eUF8vIHsKKwlpZiAoc2tpcCkKKwkJcHJpbnQgIlxuIgorCXNraXA9MTsKKworCWZpcnN0PSQxCisJZm9yIChpID0gMTsgaSA8PSBORjsgaSsrKSB7CisJCWlmICggJGkgIT0gIk5DVVJTRVNfQ09OU1QiICkgeworCQkJZmlyc3QgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc2Vjb25kID0gZmlyc3QgKyAxOworCWlmICggJGZpcnN0ID09ICJjaHR5cGUiICkgeworCQlyZXR1cm5UeXBlID0gIkNoYXIiOworCX0gZWxzZSBpZiAoICRmaXJzdCA9PSAiU0NSRUVOIiApIHsKKwkJcmV0dXJuVHlwZSA9ICJTUCI7CisJfSBlbHNlIGlmICggJGZpcnN0ID09ICJXSU5ET1ciICkgeworCQlyZXR1cm5UeXBlID0gIldpbiI7CisJfSBlbHNlIGlmICggJGZpcnN0ID09ICJhdHRyX3QiIHx8ICRzZWNvbmQgPT0gImF0dHJzZXQiIHx8ICRzZWNvbmQgPT0gInN0YW5kb3V0IiB8fCAkc2Vjb25kID09ICJzdGFuZGVuZCIgfHwgJHNlY29uZCA9PSAid2F0dHJzZXQiIHx8ICRzZWNvbmQgPT0gIndzdGFuZG91dCIgfHwgJHNlY29uZCA9PSAid3N0YW5kZW5kIiApIHsKKwkJcmV0dXJuVHlwZSA9ICJBdHRyIjsKKwl9IGVsc2UgaWYgKCAkZmlyc3QgPT0gImJvb2wiIHx8ICRmaXJzdCA9PSAiTkNVUlNFU19CT09MIiApIHsKKwkJcmV0dXJuVHlwZSA9ICJCb29sIjsKKwl9IGVsc2UgaWYgKCAkc2Vjb25kID09ICIqIiApIHsKKwkJcmV0dXJuVHlwZSA9ICJQdHIiOworCX0gZWxzZSB7CisJCXJldHVyblR5cGUgPSAiQ29kZSI7CisJfQorCW15ZnVuYyA9IHNlY29uZDsKKwlmb3IgKGkgPSBzZWNvbmQ7IGkgPD0gTkY7IGkrKykgeworCQlpZiAoJGkgIT0gIioiKSB7CisJCQlteWZ1bmMgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHVzaW5nID09ICJnZW5lcmF0ZWQiKSB7CisJCXByaW50ICJNXyIgJG15ZnVuYworCX0KKwlwcmludCAkMDsKKwlwcmludCAieyI7CisJYXJnY291bnQgPSAxOworCWNoZWNrID0gTkYgLSAxOworCWlmICgkY2hlY2sgPT0gInZvaWQiKQorCQlhcmdjb3VudCA9IDA7CisJaWYgKGFyZ2NvdW50ICE9IDApIHsKKwkJZm9yIChpID0gMTsgaSA8PSBORjsgaSsrKQorCQkJaWYgKCRpID09ICIsIikKKwkJCQlhcmdjb3VudCsrOworCX0KKworCSMgc3VwcHJlc3MgdHJhY2UtY29kZSBmb3IgZnVuY3Rpb25zIHRoYXQgd2UgY2Fubm90IGRvIHByb3Blcmx5IGhlcmUsCisJIyBzaW5jZSB0aGV5IHJldHVybiBkYXRhLgorCWRvdHJhY2UgPSAxOworCWlmICgkbXlmdW5jIH4gL2lubnN0ci8pCisJCWRvdHJhY2UgPSAwOworCWlmICgkbXlmdW5jIH4gL2lubndzdHIvKQorCQlkb3RyYWNlID0gMDsKKworCSMgd29ya2Fyb3VuZCBmdW5jdGlvbnMgdGhhdCB3ZSBkbyBub3QgcGFyc2UgcHJvcGVybHkKKwlpZiAoJG15ZnVuYyB+IC9yaXBvZmZsaW5lLykgeworCQlkb3RyYWNlID0gMDsKKwkJYXJnY291bnQgPSAyOworCX0KKwlpZiAoJG15ZnVuYyB+IC93dW5jdHJsLykgeworCQlkb3RyYWNlID0gMDsKKwl9CisKKwljYWxsID0gIkBAVCgoVF9DQUxMRUQoXCIiCisJYXJncyA9ICIiCisJY29tbWEgPSAiIgorCW51bSA9IDA7CisJcG9pbnRlciA9IDA7CisJdmFfbGlzdCA9IDA7CisJdmFyYXJncyA9IDA7CisJYXJndHlwZSA9ICIiCisJZm9yIChpID0gbXlmdW5jOyBpIDw9IE5GOyBpKyspIHsKKwkJY2ggPSAkaTsKKwkJaWYgKCBjaCA9PSAiKiIgKQorCQkJcG9pbnRlciA9IDE7CisJCWVsc2UgaWYgKCBjaCA9PSAidmFfbGlzdCIgKQorCQkJdmFfbGlzdCA9IDE7CisJCWVsc2UgaWYgKCBjaCA9PSAiLi4uIiApCisJCQl2YXJhcmdzID0gMTsKKwkJZWxzZSBpZiAoIGNoID09ICJjaGFyIiApCisJCQlhcmd0eXBlID0gImNoYXIiOworCQllbHNlIGlmICggY2ggPT0gImludCIgKQorCQkJYXJndHlwZSA9ICJpbnQiOworCQllbHNlIGlmICggY2ggPT0gInNob3J0IiApCisJCQlhcmd0eXBlID0gInNob3J0IjsKKwkJZWxzZSBpZiAoIGNoID09ICJjaHR5cGUiICkKKwkJCWFyZ3R5cGUgPSAiY2h0eXBlIjsKKwkJZWxzZSBpZiAoIGNoID09ICJhdHRyX3QiIHx8IGNoID09ICJOQ1VSU0VTX0FUVFJfVCIgKQorCQkJYXJndHlwZSA9ICJhdHRyIjsKKworCQlpZiAoIGNoID09ICIsIiB8fCBjaCA9PSAiKSIgKSB7CisJCQlpZiAodmFfbGlzdCkgeworCQkJCWNhbGwgPSBjYWxsICIlcyIKKwkJCX0gZWxzZSBpZiAodmFyYXJncykgeworCQkJCWNhbGwgPSBjYWxsICIlcyIKKwkJCX0gZWxzZSBpZiAocG9pbnRlcikgeworCQkJCWlmICggYXJndHlwZSA9PSAiY2hhciIgKSB7CisJCQkJCWNhbGwgPSBjYWxsICIlcyIKKwkJCQkJY29tbWEgPSBjb21tYSAiX25jX3Zpc2J1ZjIoIiBudW0gIiwiCisJCQkJCXBvaW50ZXIgPSAwOworCQkJCX0gZWxzZQorCQkJCQljYWxsID0gY2FsbCAiJXAiCisJCQl9IGVsc2UgaWYgKGFyZ2NvdW50ICE9IDApIHsKKwkJCQlpZiAoIGFyZ3R5cGUgPT0gImludCIgfHwgYXJndHlwZSA9PSAic2hvcnQiICkgeworCQkJCQljYWxsID0gY2FsbCAiJWQiCisJCQkJCWFyZ3R5cGUgPSAiIgorCQkJCX0gZWxzZSBpZiAoIGFyZ3R5cGUgIT0gIiIgKSB7CisJCQkJCWNhbGwgPSBjYWxsICIlcyIKKwkJCQkJY29tbWEgPSBjb21tYSAiX3RyYWNlIiBhcmd0eXBlICIyKCIgbnVtICIsIgorCQkJCX0gZWxzZSB7CisJCQkJCWNhbGwgPSBjYWxsICIlI2x4IgorCQkJCQljb21tYSA9IGNvbW1hICIobG9uZykiCisJCQkJfQorCQkJfQorCQkJaWYgKGNoID09ICIsIikgeworCQkJCWFyZ3MgPSBhcmdzIGNvbW1hICJhIiArK251bTsKKwkJCX0gZWxzZSBpZiAoIGFyZ2NvdW50ICE9IDAgKSB7CisJCQkJaWYgKCB2YV9saXN0ICkgeworCQkJCQlhcmdzID0gYXJncyBjb21tYSAiXCJ2YV9saXN0XCIiCisJCQkJfSBlbHNlIGlmICggdmFyYXJncyApIHsKKwkJCQkJYXJncyA9IGFyZ3MgY29tbWEgIlwiLi4uXCIiCisJCQkJfSBlbHNlIHsKKwkJCQkJYXJncyA9IGFyZ3MgY29tbWEgInoiCisJCQkJfQorCQkJfQorCQkJY2FsbCA9IGNhbGwgY2gKKwkJCWlmIChwb2ludGVyID09IDAgJiYgYXJnY291bnQgIT0gMCAmJiBhcmd0eXBlICE9ICIiICkKKwkJCQlhcmdzID0gYXJncyAiKSIKKwkJCWlmIChhcmdzICE9ICIiKQorCQkJCWNvbW1hID0gIiwgIgorCQkJcG9pbnRlciA9IDA7CisJCQlhcmd0eXBlID0gIiIKKwkJfQorCQlpZiAoIGkgPT0gMiB8fCBjaCA9PSAiKCIgKQorCQkJY2FsbCA9IGNhbGwgY2gKKwl9CisJY2FsbCA9IGNhbGwgIlwiKSIKKwlpZiAoYXJncyAhPSAiIikKKwkJY2FsbCA9IGNhbGwgIiwgIiBhcmdzCisJY2FsbCA9IGNhbGwgIikpOyAiCisKKwlpZiAoZG90cmFjZSkKKwkJcHJpbnRmICIlcyIsIGNhbGwKKworCWlmIChtYXRjaCgkMCwgIl52b2lkIikpCisJCWNhbGwgPSAiIgorCWVsc2UgaWYgKGRvdHJhY2UpCisJCWNhbGwgPSBzcHJpbnRmKCJyZXR1cm4lcyggIiwgcmV0dXJuVHlwZSk7CisJZWxzZQorCQljYWxsID0gIkBAcmV0dXJuICI7CisKKwljYWxsID0gY2FsbCAkbXlmdW5jICIoIjsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnY291bnQ7IGkrKykgeworCQlpZiAoaSAhPSAxKQorCQkJY2FsbCA9IGNhbGwgIiwgIjsKKwkJY2FsbCA9IGNhbGwgImEiIGk7CisJfQorCWlmICggYXJnY291bnQgIT0gMCAmJiAkY2hlY2sgIT0gIi4uLiIgKSB7CisJCWlmIChhcmdjb3VudCAhPSAxKQorCQkJY2FsbCA9IGNhbGwgIiwgIjsKKwkJY2FsbCA9IGNhbGwgInoiOworCX0KKwlpZiAoIW1hdGNoKCQwLCAiXnZvaWQiKSkKKwkJY2FsbCA9IGNhbGwgIikgIjsKKwlpZiAoZG90cmFjZSkKKwkJY2FsbCA9IGNhbGwgIikiOworCXByaW50IGNhbGwgIjsiCisKKwlpZiAobWF0Y2goJDAsICJedm9pZCIpKQorCQlwcmludCAiQEByZXR1cm5Wb2lkOyIKKwlwcmludCAifSI7Cit9CitFT0YxCisKK2NhdCA+JEFXMiA8PEVPRjEKK0JFR0lOCQl7CisJCXByaW50ICIvKiIKKwkJcHJpbnQgIiAqIERPIE5PVCBFRElUIFRISVMgRklMRSBCWSBIQU5EISIKKwkJcHJpbnRmICIgKiBJdCBpcyBnZW5lcmF0ZWQgYnkgJDAgJXMuXG4iLCAiJFVTRSIKKwkJaWYgKCAiJFVTRSIgPT0gImdlbmVyYXRlZCIgKSB7CisJCQlwcmludCAiICoiCisJCQlwcmludCAiICogVGhpcyBpcyBhIGZpbGUgb2YgdHJpdmlhbCBmdW5jdGlvbnMgZ2VuZXJhdGVkIGZyb20gbWFjcm8iCisJCQlwcmludCAiICogZGVmaW5pdGlvbnMgaW4gY3Vyc2VzLmggdG8gc2F0aXNmeSB0aGUgWFNJIEN1cnNlcyByZXF1aXJlbWVudCIKKwkJCXByaW50ICIgKiB0aGF0IGV2ZXJ5IG1hY3JvIGFsc28gZXhpc3QgYXMgYSBjYWxsYWJsZSBmdW5jdGlvbi4iCisJCQlwcmludCAiICoiCisJCQlwcmludCAiICogSXQgd2lsbCBuZXZlciBiZSBsaW5rZWQgdW5sZXNzIHlvdSBjYWxsIG9uZSBvZiB0aGUgZW50cnkiCisJCQlwcmludCAiICogcG9pbnRzIHdpdGggaXRzIG5vcm1hbCBtYWNybyBkZWZpbml0aW9uIGRpc2FibGVkLiAgSW4gdGhhdCIKKwkJCXByaW50ICIgKiBjYXNlLCBpZiB5b3UgaGF2ZSBubyBzaGFyZWQgbGlicmFyaWVzLCBpdCB3aWxsIGluZGlyZWN0bHkiCisJCQlwcmludCAiICogcHVsbCBtb3N0IG9mIHRoZSByZXN0IG9mIHRoZSBsaWJyYXJ5IGludG8geW91ciBsaW5rIGltYWdlLiIKKwkJfQorCQlwcmludCAiICovIgorCQlwcmludCAiI2RlZmluZSBOQ1VSU0VTX0FUVFJfVCBpbnQiCisJCXByaW50ICIjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4iCisJCXByaW50ICIiCisJCX0KKy9eREVDTEFSQVRJT05TLwl7c3RhcnQgPSAxOyBuZXh0O30KKwkJe2lmIChzdGFydCkgcHJpbnQgXCQwO30KK0VORAkJeworCQlpZiAoICIkVVNFIiAhPSAiZ2VuZXJhdGVkIiApIHsKKwkJCXByaW50ICJpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9IgorCQl9CisJCX0KK0VPRjEKKworY2F0ID4kVE1QIDw8RU9GCisjaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKyN1bmRlZiBOQ1VSU0VTX05PTUFDUk9TCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKK0RFQ0xBUkFUSU9OUworCitFT0YKKworc2VkIC1uIC1mICRFRDEgXAorfCBzZWQgLWUgJ3MvTkNVUlNFU19FWFBPUlQoXCguKlwpKSBcKC4qXCkgKFwoLipcKSkvXDEgXDIoXDMpLycgXAorfCBzZWQgLWYgJEVEMiBcCit8ICRBV0sgLWYgJEFXMSB1c2luZz0kVVNFIFwKK3wgc2VkIFwKKwktZSAncy8gWyBdKiQvL2cnIFwKKwktZSAncy9eXChbYS16QS1aX11bYS16QS1aX10qWyAqXSpcKS9cMSBnZW5fLycgXAorCS1lICdzL2dlbl8kLy8nIFwKKwktZSAncy8gIC8gL2cnID4+JFRNUAorCiskcHJlcHJvY2Vzc29yICRUTVAgMj4vZGV2L251bGwgXAorfCBzZWQgXAorCS1lICdzLyAgLyAvZycgXAorCS1lICdzL14gLy8nIFwKKwktZSAncy9fQm9vbC9OQ1VSU0VTX0JPT0wvZycgXAorfCAkQVdLIC1mICRBVzIgXAorfCBzZWQgLWYgJEVEMyBcCit8IHNlZCBcCisJLWUgJ3MvXi4qVF9DQUxMRUQuKnJldHVybkNvZGUoIFwoW2Etel0uKikgXCkpOy8JcmV0dXJuIFwxOy8nIFwKKwktZSAncy9eLipUX0NBTExFRC4qcmV0dXJuQ29kZSggXCgod21vdmUuKikgXCkpOy8JcmV0dXJuIFwxOy8nIFwKKwktZSAncy9nZW5fLy8nIFwKKwktZSAncy9eWyAJXSojLyMvJyBcCisJLWUgJy8jaWRlbnQvZCcgXAorCS1lICcvI2xpbmUvZCcgXAorfCBzZWQgLWYgJEVENApkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL01LdW5jdHJsLmF3ayBiL25jdXJzZXMvYmFzZS9NS3VuY3RybC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmYmVlYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9NS3VuY3RybC5hd2sKQEAgLTAsMCArMSwxOTIgQEAKKyMgJElkOiBNS3VuY3RybC5hd2ssdiAxLjIzIDIwMDgvMTAvMDQgMjE6NDA6MjQgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAoMTk5Ny1vbikKKyMKKworQkVHSU4JeworCQlwcmludCAiLyogZ2VuZXJhdGVkIGJ5IE1LdW5jdHJsLmF3ayAqLyIKKwkJcHJpbnQgIiIKKwkJcHJpbnQgIiNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPiIKKwkJcHJpbnQgIiNpbmNsdWRlIDxjdHlwZS5oPiIKKwkJcHJpbnQgIiIKKwkJcHJpbnQgIiNpZiBVU0VfV0lERUNfU1VQUE9SVCIKKwkJcHJpbnQgIiNpZiBIQVZFX1dDVFlQRV9IIgorCQlwcmludCAiI2luY2x1ZGUgPHdjdHlwZS5oPiIKKwkJcHJpbnQgIiNlbmRpZiIKKwkJcHJpbnQgIiNlbmRpZiIKKwkJcHJpbnQgIiIKKwkJcHJpbnQgIiN1bmRlZiB1bmN0cmwiCisJCXByaW50ICIiCisJfQorRU5ECXsKKwkJcHJpbnQgIk5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciAqKSBfbmNfdW5jdHJsIChTQ1JFRU4gKnNwLCBjaHR5cGUgY2gpIgorCQlwcmludCAieyIKKworCQlibG9iPSIiCisJCW9mZnNldD0wCisJCWlmIChiaWdzdHJpbmdzKSB7CisJCQlwcmludGYgInN0YXRpYyBjb25zdCBzaG9ydCB1bmN0cmxfdGFibGVbXSA9IHsiCisJCX0gZWxzZSB7CisJCQlwcmludGYgInN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB1bmN0cmxfdGFibGVbXSA9IHsiCisJCX0KKwkJZm9yICggY2ggPSAwOyBjaCA8IDI1NjsgY2grKyApIHsKKwkJCWdhcCA9ICIsIgorCQkJcGFydD0iIgorCQkJaWYgKChjaCAlIDgpID09IDApIHsKKwkJCQlwcmludGYgIlxuICAgICIKKwkJCQlpZiAoY2ggIT0gMCkKKwkJCQkJYmxvYiA9IGJsb2IgIlwiIgorCQkJCWJsb2IgPSBibG9iICJcbiAgICBcIiIKKwkJCX0KKwkJCWlmIChiaWdzdHJpbmdzKQorCQkJCXByaW50ZiAiJTRkJXMiLCBvZmZzZXQsIGdhcDsKKwkJCWlmIChjaCA8IDMyKSB7CisJCQkJcGFydCA9IHNwcmludGYgKCJeXFwlMDNvIiwgY2ggKyA2NCk7CisJCQkJb2Zmc2V0ID0gb2Zmc2V0ICsgMzsKKwkJCX0gZWxzZSBpZiAoY2ggPT0gMTI3KSB7CisJCQkJcGFydCA9ICJePyI7CisJCQkJb2Zmc2V0ID0gb2Zmc2V0ICsgMzsKKwkJCX0gZWxzZSBpZiAoY2ggPj0gMTI4ICYmIGNoIDwgMTYwKSB7CisJCQkJcGFydCA9IHNwcmludGYoIn5cXCUwM28iLCBjaCAtIDY0KTsKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyAzOworCQkJfSBlbHNlIGlmIChjaCA9PSAyNTUpIHsKKwkJCQlwYXJ0ID0gIn4/IjsKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyAzOworCQkJfSBlbHNlIGlmIChjaCA+PSAxNjApIHsKKwkJCQlwYXJ0ID0gc3ByaW50ZigiTS1cXCUwM28iLCBjaCAtIDEyOCk7CisJCQkJb2Zmc2V0ID0gb2Zmc2V0ICsgNDsKKwkJCX0gZWxzZSB7CisJCQkJZ2FwID0gZ2FwICIgIgorCQkJCXBhcnQgPSBzcHJpbnRmKCJcXCUwM28iLCBjaCk7CisJCQkJb2Zmc2V0ID0gb2Zmc2V0ICsgMjsKKwkJCX0KKwkJCWlmIChjaCA9PSAyNTUpCisJCQkJZ2FwID0gIlxuIgorCQkJZWxzZSBpZiAoKChjaCArIDEpICUgOCkgIT0gMCkKKwkJCQlnYXAgPSBnYXAgIiAiCisJCQlpZiAoYmlnc3RyaW5ncykgeworCQkJCWJsb2IgPSBibG9iIHBhcnQgIlxcMCI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZiAiXCIlc1wiJXMiLCBwYXJ0LCBnYXAKKwkJCX0KKwkJfQorCQlwcmludCAifTsiCisJCWJsb2IgPSBibG9iICJcIiI7CisKKwkJcHJpbnQgIiIKKwkJcHJpbnRmICIjaWYgTkNVUlNFU19FWFRfRlVOQ1NcbiI7CisJCWlmIChiaWdzdHJpbmdzKSB7CisJCQlibG9iID0gYmxvYiAiXG4vKiBwcmludGFibGUgdmFsdWVzIGluIDEyOC0yNTUgcmFuZ2UgKi8iCisJCQlwcmludGYgInN0YXRpYyBjb25zdCBzaG9ydCB1bmN0cmxfYzFbXSA9IHsiCisJCX0gZWxzZSB7CisJCQlwcmludGYgInN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB1bmN0cmxfYzFbXSA9IHsiCisJCX0KKwkJZm9yICggY2ggPSAxMjg7IGNoIDwgMjU2OyBjaCsrICkgeworCQkJZ2FwID0gIiwiCisJCQlpZiAoKGNoICUgOCkgPT0gMCkgeworCQkJCWlmIChjaCAhPSAxMjgpCisJCQkJCWJsb2IgPSBibG9iICJcIiIKKwkJCQlwcmludGYgIlxuICAgICIKKwkJCQlibG9iID0gYmxvYiAiXG4gICAgXCIiCisJCQl9CisJCQlpZiAoYmlnc3RyaW5ncykgeworCQkJCXByaW50ZiAiJTRkJXMiLCBvZmZzZXQsIGdhcDsKKwkJCQlwYXJ0ID0gc3ByaW50ZigiXFwlMDNvXFwwIiwgY2gpOworCQkJCWJsb2IgPSBibG9iIHBhcnQKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyAyOworCQkJCWlmICgoKGNoICsgMSkgJSA4KSAhPSAwKQorCQkJCQlnYXAgPSBnYXAgIiAiCisJCQl9IGVsc2UgeworCQkJCWlmIChjaCA+PSAxMjgpIHsKKwkJCQkJcHJpbnRmICJcIlxcJTAzb1wiIiwgY2gKKwkJCQkJZ2FwID0gZ2FwICIgIgorCQkJCX0KKwkJCQlpZiAoY2ggPT0gMjU1KQorCQkJCQlnYXAgPSAiXG4iCisJCQkJZWxzZSBpZiAoKChjaCArIDEpICUgOCkgIT0gMCkKKwkJCQkJZ2FwID0gZ2FwICIgIgorCQkJCXByaW50ZiAiJXMiLCBnYXAKKwkJCX0KKwkJfQorCQlwcmludCAifTsiCisJCXByaW50ICIjZW5kaWYgLyogTkNVUlNFU19FWFRfRlVOQ1MgKi8iCisJCWJsb2IgPSBibG9iICJcIlxuIgorCisJCXByaW50ICIiCisJCWlmIChiaWdzdHJpbmdzKSB7CisJCQlwcmludCAic3RhdGljIGNvbnN0IGNoYXIgdW5jdHJsX2Jsb2JbXSA9ICJibG9iIjsiCisJCQlwcmludCAiIgorCQkJc3RyaW5nbmFtZSA9ICJ1bmN0cmxfYmxvYiArIHVuY3RybCIKKwkJfSBlbHNlIHsKKwkJCXN0cmluZ25hbWUgPSAidW5jdHJsIgorCQl9CisJCXByaW50ICAiXHRpbnQgY2hlY2sgPSBDaENoYXJPZihjaCk7IgorCQlwcmludCAgIlx0Y29uc3QgY2hhciAqcmVzdWx0OyIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiXHRpZiAoY2hlY2sgPj0gMCAmJiBjaGVjayA8IChpbnQpU0laRU9GKHVuY3RybF90YWJsZSkpIHsiCisJCXByaW50ICAiI2lmIE5DVVJTRVNfRVhUX0ZVTkNTIgorCQlwcmludCAgIlx0XHRpZiAoKHNwICE9IDApIgorCQlwcmludCAgIlx0XHQgJiYgKHNwLT5fbGVnYWN5X2NvZGluZyA+IDEpIgorCQlwcmludCAgIlx0XHQgJiYgKGNoZWNrID49IDEyOCkiCisJCXByaW50ICAiXHRcdCAmJiAoY2hlY2sgPCAxNjApKSIKKwkJcHJpbnRmICJcdFx0XHRyZXN1bHQgPSAlc19jMVtjaGVjayAtIDEyOF07XG4iLCBzdHJpbmduYW1lOworCQlwcmludCAgIlx0XHRlbHNlIgorCQlwcmludCAgIiNpZiBVU0VfV0lERUNfU1VQUE9SVCIKKwkJcHJpbnQgICJcdFx0aWYgKChjaGVjayA+PSAxNjApIgorCQlwcmludCAgIlx0XHQgJiYgKGNoZWNrIDwgMjU2KSIKKwkJcHJpbnQgICJcdFx0ICYmICgoc3AgIT0gMCkiCisJCXByaW50ICAiXHRcdCAgJiYgKChzcC0+X2xlZ2FjeV9jb2RpbmcgPiAwKSIKKwkJcHJpbnQgICJcdFx0ICAgfHwgKHNwLT5fbGVnYWN5X2NvZGluZyA9PSAwIgorCQlwcmludCAgIlx0XHQgICAgICAgJiYgKGlzcHJpbnQoY2hlY2spIHx8IGlzd3ByaW50KGNoZWNrKSkpKSkpIgorCQlwcmludGYgIlx0XHRcdHJlc3VsdCA9ICVzX2MxW2NoZWNrIC0gMTI4XTtcbiIsIHN0cmluZ25hbWU7CisJCXByaW50ICAiXHRcdGVsc2UiCisJCXByaW50ICAiI2Vsc2UiCisJCXByaW50ICAiXHRcdGlmICgoY2hlY2sgPj0gMTYwKSIKKwkJcHJpbnQgICJcdFx0ICYmIChjaGVjayA8IDI1NikiCisJCXByaW50ICAiXHRcdCAmJiAoKHNwICE9IDApIgorCQlwcmludCAgIlx0XHQgICYmICgoc3AtPl9sZWdhY3lfY29kaW5nID4gMCkiCisJCXByaW50ICAiXHRcdCAgIHx8IChzcC0+X2xlZ2FjeV9jb2RpbmcgPT0gMCIKKwkJcHJpbnQgICJcdFx0ICAgICAgICYmIGlzcHJpbnQoY2hlY2spKSkpKSIKKwkJcHJpbnRmICJcdFx0XHRyZXN1bHQgPSAlc19jMVtjaGVjayAtIDEyOF07XG4iLCBzdHJpbmduYW1lOworCQlwcmludCAgIlx0XHRlbHNlIgorCQlwcmludCAgIiNlbmRpZiAvKiBVU0VfV0lERUNfU1VQUE9SVCAqLyIKKwkJcHJpbnQgICIjZW5kaWYgLyogTkNVUlNFU19FWFRfRlVOQ1MgKi8iCisJCXByaW50ZiAiXHRcdFx0cmVzdWx0ID0gJXNfdGFibGVbY2hlY2tdO1xuIiwgc3RyaW5nbmFtZTsKKwkJcHJpbnQgICJcdH0gZWxzZSB7IgorCQlwcmludCAgIlx0XHRyZXN1bHQgPSAwOyIKKwkJcHJpbnQgICJcdH0iCisJCXByaW50ICAiXHRyZXR1cm4gKE5DVVJTRVNfQ09OU1QgY2hhciAqKXJlc3VsdDsiCisJCXByaW50ICAifSIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCBjaGFyICopIHVuY3RybCAoY2h0eXBlIGNoKSIKKwkJcHJpbnQgICJ7IgorCQlwcmludCAgIlx0cmV0dXJuIF9uY191bmN0cmwoU1AsIGNoKTsiCisJCXByaW50ICAifSIKKwl9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvUkVBRE1FIGIvbmN1cnNlcy9iYXNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc3ZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL1JFQURNRQpAQCAtMCwwICsxLDM1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQURNRSx2IDEuMiAyMDA2LzA0LzIyIDIyOjE5OjM3IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb25zIGluIHRoaXMgZGlyZWN0b3J5IGFyZSB0aGUgZ2VuZXJpYyAobm90IGRldmljZS1zcGVjaWZpYykgbW9kdWxlcworb2YgbmN1cnNlcy4KKworQXMgYSBydWxlLCB0aGVzZSBtb2R1bGVzIHNob3VsZCBub3QgZGVwZW5kIGRpcmVjdGx5IG9uIHRlcm0uaCByZWZlcmVuY2VzIGFuZAorYXNzb2NpYXRlZCB0ZXJtaW5mbyBmdW5jdGlvbiBhbmQgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2RlZmluZV9rZXkuYyBiL25jdXJzZXMvYmFzZS9kZWZpbmVfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1ODE1ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9kZWZpbmVfa2V5LmMKQEAgLTAsMCArMSw3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTctb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBkZWZpbmVfa2V5LmMsdiAxLjEzIDIwMDYvMTIvMzAgMjM6MjM6MzEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVmaW5lX2tleShjb25zdCBjaGFyICpzdHIsIGludCBrZXljb2RlKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImRlZmluZV9rZXkoJXMsJWQpIiksIF9uY192aXNidWYoc3RyKSwga2V5Y29kZSkpOworICAgIGlmIChTUCA9PSAwKSB7CisJY29kZSA9IEVSUjsKKyAgICB9IGVsc2UgaWYgKGtleWNvZGUgPiAwKSB7CisJdW5zaWduZWQgdWtleSA9ICh1bnNpZ25lZCkga2V5Y29kZTsKKworCWlmIChzdHIgIT0gMCkgeworCSAgICBkZWZpbmVfa2V5KHN0ciwgMCk7CisJfSBlbHNlIGlmIChoYXNfa2V5KGtleWNvZGUpKSB7CisJICAgIHdoaWxlIChfbmNfcmVtb3ZlX2tleSgmKFNQLT5fa2V5dHJ5KSwgdWtleSkpCisJCWNvZGUgPSBPSzsKKwl9CisJaWYgKHN0ciAhPSAwKSB7CisJICAgIGlmIChrZXlfZGVmaW5lZChzdHIpID09IDApIHsKKwkJaWYgKF9uY19hZGRfdG9fdHJ5KCYoU1AtPl9rZXl0cnkpLCBzdHIsIHVrZXkpID09IE9LKSB7CisJCSAgICBjb2RlID0gT0s7CisJCX0gZWxzZSB7CisJCSAgICBjb2RlID0gRVJSOworCQl9CisJICAgIH0gZWxzZSB7CisJCWNvZGUgPSBFUlI7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwl3aGlsZSAoX25jX3JlbW92ZV9zdHJpbmcoJihTUC0+X2tleXRyeSksIHN0cikpCisJICAgIGNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9rZXlfZGVmaW5lZC5jIGIvbmN1cnNlcy9iYXNlL2tleV9kZWZpbmVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5YWQ4MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9rZXlfZGVmaW5lZC5jCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5LCAyMDAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDoga2V5X2RlZmluZWQuYyx2IDEuNiAyMDA2LzEyLzMwIDIzOjIyOjU1IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQKK2ZpbmRfZGVmaW5pdGlvbihUUklFUyAqIHRyZWUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBUUklFUyAqcHRyOworICAgIGludCByZXN1bHQgPSBPSzsKKworICAgIGlmIChzdHIgIT0gMCAmJiAqc3RyICE9ICdcMCcpIHsKKwlmb3IgKHB0ciA9IHRyZWU7IHB0ciAhPSAwOyBwdHIgPSBwdHItPnNpYmxpbmcpIHsKKwkgICAgaWYgKFVDaGFyKCpzdHIpID09IFVDaGFyKHB0ci0+Y2gpKSB7CisJCWlmIChzdHJbMV0gPT0gJ1wwJyAmJiBwdHItPmNoaWxkICE9IDApIHsKKwkJICAgIHJlc3VsdCA9IEVSUjsKKwkJfSBlbHNlIGlmICgocmVzdWx0ID0gZmluZF9kZWZpbml0aW9uKHB0ci0+Y2hpbGQsIHN0ciArIDEpKQorCQkJICAgPT0gT0spIHsKKwkJICAgIHJlc3VsdCA9IHB0ci0+dmFsdWU7CisJCX0gZWxzZSBpZiAoc3RyWzFdID09ICdcMCcpIHsKKwkJICAgIHJlc3VsdCA9IEVSUjsKKwkJfQorCSAgICB9CisJICAgIGlmIChyZXN1bHQgIT0gT0spCisJCWJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIChyZXN1bHQpOworfQorCisvKgorICogUmV0dXJucyB0aGUga2V5Y29kZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHN0cmluZy4gIElmIG5vbmUgaXMgZm91bmQsCisgKiByZXR1cm4gT0suICBJZiB0aGUgc3RyaW5nIGlzIG9ubHkgYSBwcmVmaXggdG8gb3RoZXIgc3RyaW5ncywgcmV0dXJuIEVSUi4KKyAqIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBrZXljb2RlJ3MgdmFsdWUgKG5laXRoZXIgT0svRVJSKS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQora2V5X2RlZmluZWQoY29uc3QgY2hhciAqc3RyKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImtleV9kZWZpbmVkKCVzKSIpLCBfbmNfdmlzYnVmKHN0cikpKTsKKyAgICBpZiAoU1AgIT0gMCAmJiBzdHIgIT0gMCkgeworCWNvZGUgPSBmaW5kX2RlZmluaXRpb24oU1AtPl9rZXl0cnksIHN0cik7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9rZXlib3VuZC5jIGIvbmN1cnNlcy9iYXNlL2tleWJvdW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5NTcxNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9rZXlib3VuZC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAxOTk5LW9uICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDoga2V5Ym91bmQuYyx2IDEuNyAyMDA2LzA2LzE3IDE4OjE5OjI0IHRvbSBFeHAgJCIpCisKKy8qCisgKiBSZXR1cm5zIHRoZSBjb3VudCd0aCBzdHJpbmcgZGVmaW5pdGlvbiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiBnaXZlbiBrZXljb2RlLiAgVGhlIHJlc3VsdCBpcyBtYWxsb2MnZCwgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitrZXlib3VuZChpbnQgY29kZSwgaW50IGNvdW50KQoreworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisKKyAgICBUKChUX0NBTExFRCgia2V5Ym91bmQoJWQsJWQpIiksIGNvZGUsIGNvdW50KSk7CisgICAgaWYgKFNQICE9IDAgJiYgY29kZSA+PSAwKSB7CisJcmVzdWx0ID0gX25jX2V4cGFuZF90cnkoU1AtPl9rZXl0cnksICh1bnNpZ25lZCkgY29kZSwgJmNvdW50LCAwKTsKKyAgICB9CisgICAgcmV0dXJuUHRyKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2Uva2V5b2suYyBiL25jdXJzZXMvYmFzZS9rZXlvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkODk4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2Uva2V5b2suYwpAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgIDE5OTctb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGtleW9rLmMsdiAxLjcgMjAwNi8xMi8zMCAxNjoyMjozMyB0b20gRXhwICQiKQorCisvKgorICogRW5hYmxlIChvciBkaXNhYmxlKSBuY3Vyc2VzJyBpbnRlcnByZXRhdGlvbiBvZiBhIGtleWNvZGUgYnkgYWRkaW5nIChvcgorICogcmVtb3ZpbmcpIHRoZSBjb3JyZXNwb25kaW5nICd0cmllcycgZW50cnkuCisgKgorICogRG8gdGhpcyBieSBzdG9yaW5nIGEgc2Vjb25kIHRyZWUgb2YgdHJpZXMsIHdoaWNoIHJlY29yZHMgdGhlIGRpc2FibGVkIGtleXMuIAorICogVGhlIHNpbXBsZXN0IHdheSB0byBjb3B5IGlzIHRvIG1ha2UgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHN0cmluZyAod2l0aAorICogbnVsbHMgc2V0IHRvIDAyMDApLCB0aGVuIHVzZSB0aGF0IHRvIHJlaW5zZXJ0IHRoZSBzdHJpbmcgaW50byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdHJlZS4KKyAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitrZXlvayhpbnQgYywgYm9vbCBmbGFnKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIGludCBjb3VudCA9IDA7CisgICAgY2hhciAqczsKKworICAgIFQoKFRfQ0FMTEVEKCJrZXlvayglZCwlZCkiKSwgYywgZmxhZykpOworICAgIGlmIChjID49IDApIHsKKwl1bnNpZ25lZCBjaCA9ICh1bnNpZ25lZCkgYzsKKwlpZiAoZmxhZykgeworCSAgICB3aGlsZSAoKHMgPSBfbmNfZXhwYW5kX3RyeShTUC0+X2tleV9vaywgY2gsICZjb3VudCwgMCkpICE9IDAKKwkJICAgJiYgX25jX3JlbW92ZV9rZXkoJihTUC0+X2tleV9vayksIGNoKSkgeworCQljb2RlID0gX25jX2FkZF90b190cnkoJihTUC0+X2tleXRyeSksIHMsIGNoKTsKKwkJZnJlZShzKTsKKwkJY291bnQgPSAwOworCQlpZiAoY29kZSAhPSBPSykKKwkJICAgIGJyZWFrOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgd2hpbGUgKChzID0gX25jX2V4cGFuZF90cnkoU1AtPl9rZXl0cnksIGNoLCAmY291bnQsIDApKSAhPSAwCisJCSAgICYmIF9uY19yZW1vdmVfa2V5KCYoU1AtPl9rZXl0cnkpLCBjaCkpIHsKKwkJY29kZSA9IF9uY19hZGRfdG9fdHJ5KCYoU1AtPl9rZXlfb2spLCBzLCBjaCk7CisJCWZyZWUocyk7CisJCWNvdW50ID0gMDsKKwkJaWYgKGNvZGUgIT0gT0spCisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9sZWdhY3lfY29kaW5nLmMgYi9uY3Vyc2VzL2Jhc2UvbGVnYWN5X2NvZGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmYxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGVnYWN5X2NvZGluZy5jCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGVnYWN5X2NvZGluZy5jLHYgMS4yIDIwMDUvMTIvMTcgMjM6Mzg6MTcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQordXNlX2xlZ2FjeV9jb2RpbmcoaW50IGxldmVsKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgidXNlX2xlZ2FjeV9jb2RpbmcoJWQpIiksIGxldmVsKSk7CisgICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPD0gMiAmJiBTUCAhPSAwKSB7CisJcmVzdWx0ID0gU1AtPl9sZWdhY3lfY29kaW5nOworCVNQLT5fbGVnYWN5X2NvZGluZyA9IGxldmVsOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2FkZGNoLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2FkZGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhOTdhMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfYWRkY2guYwpAQCAtMCwwICsxLDU0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9hZGRjaC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2FkZGNoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9hZGRjaC5jLHYgMS4xMTMgMjAwOC8wOC8xNiAxOToyMDowNCB0b20gRXhwICQiKQorCitzdGF0aWMgY29uc3QgTkNVUlNFU19DSF9UIGJsYW5rY2hhciA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CisKKy8qCisgKiBVZ2x5IG1pY3JvdHdlYWtpbmcgYWxlcnQuICBFdmVyeXRoaW5nIGZyb20gaGVyZSB0byBlbmQgb2YgbW9kdWxlIGlzCisgKiBsaWtlbHkgdG8gYmUgc3BlZWQtY3JpdGljYWwgLS0gcHJvZmlsaW5nIGRhdGEgc3VyZSBzYXlzIGl0IGlzIQorICogTW9zdCBvZiB0aGUgaW1wb3J0YW50IHNjcmVlbi1wYWludGluZyBmdW5jdGlvbnMgYXJlIHNoZWxscyBhcm91bmQKKyAqIHdhZGRjaCgpLiAgU28gd2UgbWFrZSBldmVyeSBlZmZvcnQgdG8gcmVkdWNlIGZ1bmN0aW9uLWNhbGwgb3ZlcmhlYWQKKyAqIGJ5IGlubGluaW5nIHN0dWZmLCBldmVuIGF0IHRoZSBjb3N0IG9mIG1ha2luZyB3cmFwcGVkIGNvcGllcyBmb3IKKyAqIGV4cG9ydC4gIEFsc28gd2Ugc3VwcGx5IHNvbWUgaW50ZXJuYWwgdmVyc2lvbnMgdGhhdCBkb24ndCBjYWxsIHRoZQorICogd2luZG93IHN5bmMgaG9vaywgZm9yIHVzZSBieSBzdHJpbmctcHV0IGZ1bmN0aW9ucy4KKyAqLworCisvKiBSZXR1cm4gYml0IG1hc2sgZm9yIGNsZWFyaW5nIGNvbG9yIHBhaXIgbnVtYmVyIGlmIGdpdmVuIGNoIGhhcyBjb2xvciAqLworI2RlZmluZSBDT0xPUl9NQVNLKGNoKSAofihhdHRyX3QpKChjaCkgJiBBX0NPTE9SID8gQV9DT0xPUiA6IDApKQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgTkNVUlNFU19DSF9UCityZW5kZXJfY2hhcihXSU5ET1cgKndpbiwgTkNVUlNFU19DSF9UIGNoKQorLyogY29tcHV0ZSBhIHJlbmRpdGlvbiBvZiB0aGUgZ2l2ZW4gY2hhciBjb3JyZWN0IGZvciB0aGUgY3VycmVudCBjb250ZXh0ICovCit7CisgICAgYXR0cl90IGEgPSBXSU5ET1dfQVRUUlMod2luKTsKKyAgICBpbnQgcGFpciA9IEdldFBhaXIoY2gpOworCisgICAgaWYgKElTQkxBTksoY2gpCisJJiYgQXR0ck9mKGNoKSA9PSBBX05PUk1BTAorCSYmIHBhaXIgPT0gMCkgeworCS8qIGNvbG9yL3BhaXIgaW4gYXR0cnMgaGFzIHByZWNlZGVuY2Ugb3ZlciBia2dybmQgKi8KKwljaCA9IHdpbi0+X25jX2JrZ2Q7CisJU2V0QXR0cihjaCwgYSB8IEF0dHJPZih3aW4tPl9uY19ia2dkKSk7CisJaWYgKChwYWlyID0gR0VUX1dJTkRPV19QQUlSKHdpbikpID09IDApCisJICAgIHBhaXIgPSBHZXRQYWlyKHdpbi0+X25jX2JrZ2QpOworCVNldFBhaXIoY2gsIHBhaXIpOworICAgIH0gZWxzZSB7CisJLyogY29sb3IgaW4gYXR0cnMgaGFzIHByZWNlZGVuY2Ugb3ZlciBia2dybmQgKi8KKwlhIHw9IEF0dHJPZih3aW4tPl9uY19ia2dkKSAmIENPTE9SX01BU0soYSk7CisJLyogY29sb3IgaW4gY2ggaGFzIHByZWNlZGVuY2UgKi8KKwlpZiAocGFpciA9PSAwKSB7CisJICAgIGlmICgocGFpciA9IEdFVF9XSU5ET1dfUEFJUih3aW4pKSA9PSAwKQorCQlwYWlyID0gR2V0UGFpcih3aW4tPl9uY19ia2dkKTsKKwl9CisjaWYgMAorCWlmIChwYWlyID4gMjU1KSB7CisJICAgIE5DVVJTRVNfQ0hfVCBmaXhtZSA9IGNoOworCSAgICBTZXRQYWlyKGZpeG1lLCBwYWlyKTsKKwl9CisjZW5kaWYKKwlBZGRBdHRyKGNoLCAoYSAmIENPTE9SX01BU0soQXR0ck9mKGNoKSkpKTsKKwlTZXRQYWlyKGNoLCBwYWlyKTsKKyAgICB9CisKKyAgICBUUihUUkFDRV9WSVJUUFVULAorICAgICAgICgicmVuZGVyX2NoYXIgYmtnICVzICglZCksIGF0dHJzICVzICglZCkgLT4gY2ggJXMgKCVkKSIsCisJX3RyYWNlY2hfdDIoMSwgQ0hSRUYod2luLT5fbmNfYmtnZCkpLAorCUdldFBhaXIod2luLT5fbmNfYmtnZCksCisJX3RyYWNlYXR0cihXSU5ET1dfQVRUUlMod2luKSksCisJR0VUX1dJTkRPV19QQUlSKHdpbiksCisJX3RyYWNlY2hfdDIoMywgQ0hSRUYoY2gpKSwKKwlHZXRQYWlyKGNoKSkpOworCisgICAgcmV0dXJuIChjaCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ0hfVCkKK19uY19yZW5kZXIoV0lORE9XICp3aW4sIE5DVVJTRVNfQ0hfVCBjaCkKKy8qIG1ha2UgcmVuZGVyX2NoYXIoKSB2aXNpYmxlIHdoaWxlIHN0aWxsIGFsbG93aW5nIHVzIHRvIGlubGluZSBpdCBiZWxvdyAqLworeworICAgIHJldHVybiByZW5kZXJfY2hhcih3aW4sIGNoKTsKK30KKworLyogY2hlY2sgaWYgcG9zaXRpb24gaXMgbGVnYWw7IGlmIG5vdCwgcmV0dXJuIGVycm9yICovCisjaWZuZGVmIE5ERUJVRwkJCS8qIHRyZWF0IHRoaXMgbGlrZSBhbiBhc3NlcnRpb24gKi8KKyNkZWZpbmUgQ0hFQ0tfUE9TSVRJT04od2luLCB4LCB5KSBcCisJaWYgKHkgPiB3aW4tPl9tYXh5IFwKKwkgfHwgeCA+IHdpbi0+X21heHggXAorCSB8fCB5IDwgMCBcCisJIHx8IHggPCAwKSB7IFwKKwkJVFIoVFJBQ0VfVklSVFBVVCwgKCJBbGVydCEgV2luPSVwIF9jdXJ4ID0gJWQsIF9jdXJ5ID0gJWQgIiBcCisJCQkJICAgIihfbWF4eCA9ICVkLCBfbWF4eSA9ICVkKSIsIHdpbiwgeCwgeSwgXAorCQkJCSAgIHdpbi0+X21heHgsIHdpbi0+X21heHkpKTsgXAorCQlyZXR1cm4oRVJSKTsgXAorCX0KKyNlbHNlCisjZGVmaW5lIENIRUNLX1BPU0lUSU9OKHdpbiwgeCwgeSkJLyogbm90aGluZyAqLworI2VuZGlmCisKK3N0YXRpYyBib29sCituZXdsaW5lX2ZvcmNlc19zY3JvbGwoV0lORE9XICp3aW4sIE5DVVJTRVNfU0laRV9UICogeXBvcykKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKCp5cG9zID49IHdpbi0+X3JlZ3RvcCAmJiAqeXBvcyA9PSB3aW4tPl9yZWdib3R0b20pIHsKKwkqeXBvcyA9IHdpbi0+X3JlZ2JvdHRvbTsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0gZWxzZSB7CisJKnlwb3MgKz0gMTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoZSBfV1JBUFBFRCBmbGFnIGlzIHVzZWZ1bCBvbmx5IGZvciB0ZWxsaW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2UndmUganVzdAorICogd3JhcHBlZCB0aGUgY3Vyc29yLiAgV2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIGZsYWcgZXhjZXB0IHNldCBpdCB3aGVuCisgKiB3cmFwcGluZywgYW5kIGNsZWFyIGl0IHdoZW5ldmVyIHdlIG1vdmUgdGhlIGN1cnNvci4gIElmIHdlIHRyeSB0byB3cmFwIGF0CisgKiB0aGUgbG93ZXItcmlnaHQgY29ybmVyIG9mIGEgd2luZG93LCB3ZSBjYW5ub3QgbW92ZSB0aGUgY3Vyc29yIChzaW5jZSB0aGF0CisgKiB3b3VsZG4ndCBiZSBsZWdhbCkuICBTbyB3ZSByZXR1cm4gYW4gZXJyb3IgKHdoaWNoIGlzIHdoYXQgU1ZyNCBkb2VzKS4gCisgKiBVbmxpa2UgU1ZyNCwgd2UgY2FuIHN1Y2Nlc3NmdWxseSBhZGQgYSBjaGFyYWN0ZXIgdG8gdGhlIGxvd2VyLXJpZ2h0IGNvcm5lcgorICogKFNvbGFyaXMgMi42IGRvZXMgdGhpcyBhbHNvLCBob3dldmVyKS4KKyAqLworc3RhdGljIGludAord3JhcF90b19uZXh0X2xpbmUoV0lORE9XICp3aW4pCit7CisgICAgd2luLT5fZmxhZ3MgfD0gX1dSQVBQRUQ7CisgICAgaWYgKG5ld2xpbmVfZm9yY2VzX3Njcm9sbCh3aW4sICYod2luLT5fY3VyeSkpKSB7CisJd2luLT5fY3VyeCA9IHdpbi0+X21heHg7CisJaWYgKCF3aW4tPl9zY3JvbGwpCisJICAgIHJldHVybiAoRVJSKTsKKwlzY3JvbGwod2luKTsKKyAgICB9CisgICAgd2luLT5fY3VyeCA9IDA7CisgICAgcmV0dXJuIChPSyk7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorc3RhdGljIGludCB3YWRkY2hfbGl0ZXJhbChXSU5ET1cgKiwgTkNVUlNFU19DSF9UKTsKKy8qCisgKiBGaWxsIHRoZSBnaXZlbiBudW1iZXIgb2YgY2VsbHMgd2l0aCBibGFua3MgdXNpbmcgdGhlIGN1cnJlbnQgYmFja2dyb3VuZAorICogcmVuZGl0aW9uLiAgVGhpcyBzYXZlcy9yZXN0b3JlcyB0aGUgY3VycmVudCB4LXBvc2l0aW9uLgorICovCitzdGF0aWMgdm9pZAorZmlsbF9jZWxscyhXSU5ET1cgKndpbiwgaW50IGNvdW50KQoreworICAgIE5DVVJTRVNfQ0hfVCBibGFuayA9IGJsYW5rY2hhcjsKKyAgICBpbnQgc2F2ZV94ID0gd2luLT5fY3VyeDsKKyAgICBpbnQgc2F2ZV95ID0gd2luLT5fY3VyeTsKKworICAgIHdoaWxlIChjb3VudC0tID4gMCkgeworCWlmICh3YWRkY2hfbGl0ZXJhbCh3aW4sIGJsYW5rKSA9PSBFUlIpCisJICAgIGJyZWFrOworICAgIH0KKyAgICB3aW4tPl9jdXJ4ID0gc2F2ZV94OworICAgIHdpbi0+X2N1cnkgPSBzYXZlX3k7Cit9CisjZW5kaWYKKworLyoKKyAqIEJ1aWxkIHVwIHRoZSBieXRlcyBmb3IgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLCByZXR1cm5pbmcgdGhlIGxlbmd0aCB3aGVuCisgKiBjb21wbGV0ZSAoYSBwb3NpdGl2ZSBudW1iZXIpLCAtMSBmb3IgZXJyb3IgYW5kIC0yIGZvciBpbmNvbXBsZXRlLgorICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19idWlsZF93Y2goV0lORE9XICp3aW4sIEFSR19DSF9UIGNoKQoreworICAgIGNoYXIgKmJ1ZmZlciA9IFdJTkRPV19FWFQod2luLCBhZGRjaF93b3JrKTsKKyAgICBpbnQgbGVuOworICAgIGludCB4ID0gd2luLT5fY3VyeDsKKyAgICBpbnQgeSA9IHdpbi0+X2N1cnk7CisgICAgbWJzdGF0ZV90IHN0YXRlOworICAgIHdjaGFyX3QgcmVzdWx0OworCisgICAgaWYgKChXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgIT0gMCkgJiYKKwkoV0lORE9XX0VYVCh3aW4sIGFkZGNoX3gpICE9IHggfHwKKwkgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3kpICE9IHkpKSB7CisJLyogZGlzY2FyZCB0aGUgaW5jb21wbGV0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVyICovCisJV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpID0gMDsKKwlUUihUUkFDRV9WSVJUUFVULAorCSAgICgiQWxlcnQgZGlzY2FyZGVkIG11bHRpYnl0ZSBvbiBtb3ZlICglZCwlZCkgLT4gKCVkLCVkKSIsCisJICAgIFdJTkRPV19FWFQod2luLCBhZGRjaF95KSwgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3gpLAorCSAgICB5LCB4KSk7CisgICAgfQorICAgIFdJTkRPV19FWFQod2luLCBhZGRjaF94KSA9IHg7CisgICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3kpID0geTsKKworICAgIGluaXRfbWIoc3RhdGUpOworICAgIGJ1ZmZlcltXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCldID0gKGNoYXIpIENoYXJPZihDSERFUkVGKGNoKSk7CisgICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpICs9IDE7CisgICAgYnVmZmVyW1dJTkRPV19FWFQod2luLCBhZGRjaF91c2VkKV0gPSAnXDAnOworICAgIGlmICgobGVuID0gbWJydG93YygmcmVzdWx0LAorCQkgICAgICAgYnVmZmVyLAorCQkgICAgICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpLCAmc3RhdGUpKSA+IDApIHsKKwlhdHRyX3QgYXR0cnMgPSBBdHRyT2YoQ0hERVJFRihjaCkpOworCWlmX0VYVF9DT0xPUlMoaW50IHBhaXIgPSBHZXRQYWlyKENIREVSRUYoY2gpKSk7CisJU2V0Q2hhcihDSERFUkVGKGNoKSwgcmVzdWx0LCBhdHRycyk7CisJaWZfRVhUX0NPTE9SUyhTZXRQYWlyKENIREVSRUYoY2gpLCBwYWlyKSk7CisJV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpID0gMDsKKyAgICB9IGVsc2UgaWYgKGxlbiA9PSAtMSkgeworCS8qCisJICogQW4gZXJyb3Igb2NjdXJyZWQuICBXZSBjb3VsZCBlaXRoZXIgZGlzY2FyZCBldmVyeXRoaW5nLAorCSAqIG9yIGFzc3VtZSB0aGF0IHRoZSBlcnJvciB3YXMgaW4gdGhlIHByZXZpb3VzIGlucHV0LgorCSAqIFRyeSB0aGUgbGF0dGVyLgorCSAqLworCVRSKFRSQUNFX1ZJUlRQVVQsICgiQWxlcnQhIG1icnRvd2MgcmV0dXJucyBlcnJvciIpKTsKKwkvKiBoYW5kbGUgdGhpcyB3aXRoIHVuY3RybCgpICovCisJV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKyNlbmRpZiAvKiBVU0VfV0lERUNfU1VQUE9SVCAqLworCitzdGF0aWMKKyNpZiAhVVNFX1dJREVDX1NVUFBPUlQJCS8qIGNhbm5vdCBiZSBpbmxpbmUgaWYgaXQgaXMgcmVjdXJzaXZlICovCitOQ1VSU0VTX0lOTElORQorI2VuZGlmCitpbnQKK3dhZGRjaF9saXRlcmFsKFdJTkRPVyAqd2luLCBOQ1VSU0VTX0NIX1QgY2gpCit7CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgc3RydWN0IGxkYXQgKmxpbmU7CisKKyAgICB4ID0gd2luLT5fY3VyeDsKKyAgICB5ID0gd2luLT5fY3VyeTsKKworICAgIENIRUNLX1BPU0lUSU9OKHdpbiwgeCwgeSk7CisKKyAgICBjaCA9IHJlbmRlcl9jaGFyKHdpbiwgY2gpOworCisgICAgbGluZSA9IHdpbi0+X2xpbmUgKyB5OworCisgICAgQ0hBTkdFRF9DRUxMKGxpbmUsIHgpOworCisgICAgLyoKKyAgICAgKiBCdWlsZCB1cCBtdWx0aWJ5dGUgY2hhcmFjdGVycyB1bnRpbCB3ZSBoYXZlIGEgd2lkZS1jaGFyYWN0ZXIuCisgICAgICovCisgICAgaWZfV0lERUMoeworCWlmIChXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgIT0gMCB8fCAhQ2hhcmFibGUoY2gpKSB7CisJICAgIGludCBsZW4gPSBfbmNfYnVpbGRfd2NoKHdpbiwgQ0hSRUYoY2gpKTsKKworCSAgICBpZiAobGVuID49IC0xKSB7CisJCS8qIGhhbmRsZSBFSUxTRVEgKi8KKwkJaWYgKGlzOGJpdHMoQ2hhck9mKGNoKSkpIHsKKwkJICAgIGNvbnN0IGNoYXIgKnMgPSB1bmN0cmwoKGNodHlwZSkgQ2hhck9mKGNoKSk7CisJCSAgICBpZiAoc1sxXSAhPSAwKSB7CisJCQlyZXR1cm4gd2FkZHN0cih3aW4sIHMpOworCQkgICAgfQorCQl9CisJCWlmIChsZW4gPT0gLTEpCisJCSAgICByZXR1cm4gd2FkZGNoKHdpbiwgJyAnKTsKKwkgICAgfSBlbHNlIHsKKwkJcmV0dXJuIE9LOworCSAgICB9CisJfQorICAgIH0pOworCisgICAgLyoKKyAgICAgKiBOb24tc3BhY2luZyBjaGFyYWN0ZXJzIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCBjZWxsLgorICAgICAqCisgICAgICogU3BhY2luZyBjaGFyYWN0ZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gb25lIGNvbHVtbiByZXF1aXJlIHNvbWUgZGlzcGxheQorICAgICAqIGFkanVzdG1lbnRzLgorICAgICAqLworICAgIGlmX1dJREVDKHsKKwlpbnQgbGVuID0gd2N3aWR0aChDaGFyT2YoY2gpKTsKKwlpbnQgaTsKKwlpbnQgajsKKwl3Y2hhcl90ICpjaGFyczsKKworCWlmIChsZW4gPT0gMCkgewkJLyogbm9uLXNwYWNpbmcgKi8KKwkgICAgaWYgKCh4ID4gMCAmJiB5ID49IDApCisJCXx8ICh3aW4tPl9tYXh4ID49IDAgJiYgd2luLT5fY3VyeSA+PSAxKSkgeworCQlpZiAoeCA+IDAgJiYgeSA+PSAwKQorCQkgICAgY2hhcnMgPSAod2luLT5fbGluZVt5XS50ZXh0W3ggLSAxXS5jaGFycyk7CisJCWVsc2UKKwkJICAgIGNoYXJzID0gKHdpbi0+X2xpbmVbeSAtIDFdLnRleHRbd2luLT5fbWF4eF0uY2hhcnMpOworCQlmb3IgKGkgPSAwOyBpIDwgQ0NIQVJXX01BWDsgKytpKSB7CisJCSAgICBpZiAoY2hhcnNbaV0gPT0gMCkgeworCQkJVFIoVFJBQ0VfVklSVFBVVCwKKwkJCSAgICgiYWRkZWQgbm9uLXNwYWNpbmcgJWQ6ICV4IiwKKwkJCSAgICB4LCAoaW50KSBDaGFyT2YoY2gpKSk7CisJCQljaGFyc1tpXSA9IENoYXJPZihjaCk7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGdvdG8gdGVzdHdyYXBwaW5nOworCX0gZWxzZSBpZiAobGVuID4gMSkgewkvKiBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycyAqLworCSAgICAvKgorCSAgICAgKiBDaGVjayBpZiB0aGUgY2hhcmFjdGVyIHdpbGwgZml0IG9uIHRoZSBjdXJyZW50IGxpbmUuICBJZiBpdCBkb2VzCisJICAgICAqIG5vdCBmaXQsIGZpbGwgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB3aXRoIGJsYW5rcy4gIGFuZAorCSAgICAgKiBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUuCisJICAgICAqLworCSAgICBpZiAobGVuID4gd2luLT5fbWF4eCArIDEpIHsKKwkJVFIoVFJBQ0VfVklSVFBVVCwgKCJjaGFyYWN0ZXIgd2lsbCBub3QgZml0IikpOworCQlyZXR1cm4gRVJSOworCSAgICB9IGVsc2UgaWYgKHggKyBsZW4gPiB3aW4tPl9tYXh4ICsgMSkgeworCQlpbnQgY291bnQgPSB3aW4tPl9tYXh4ICsgMSAtIHg7CisJCVRSKFRSQUNFX1ZJUlRQVVQsICgiZmlsbCAlZCByZW1haW5pbmcgY2VsbHMiLCBjb3VudCkpOworCQlmaWxsX2NlbGxzKHdpbiwgY291bnQpOworCQlpZiAod3JhcF90b19uZXh0X2xpbmUod2luKSA9PSBFUlIpCisJCSAgICByZXR1cm4gRVJSOworCQl4ID0gd2luLT5fY3VyeDsKKwkJeSA9IHdpbi0+X2N1cnk7CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogQ2hlY2sgZm9yIGNlbGxzIHdoaWNoIGFyZSBvcnBoYW5lZCBieSBhZGRpbmcgdGhpcyBjaGFyYWN0ZXIsIHNldAorCSAgICAgKiB0aG9zZSB0byBibGFua3MuCisJICAgICAqCisJICAgICAqIEZJWE1FOiB0aGlzIGFjdHVhbGx5IGNvdWxkIGZpbGwgai1pIGNlbGxzLCBtb3JlIGNvbXBsaWNhdGVkIHRvCisJICAgICAqIHNldHVwIHRob3VnaC4KKwkgICAgICovCisJICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworCQlpZiAoaXNXaWRlY0Jhc2Uod2luLT5fbGluZVt5XS50ZXh0W3ggKyBpXSkpIHsKKwkJICAgIGJyZWFrOworCQl9IGVsc2UgaWYgKGlzV2lkZWNFeHQod2luLT5fbGluZVt5XS50ZXh0W3ggKyBpXSkpIHsKKwkJICAgIGZvciAoaiA9IGk7IHggKyBqIDw9IHdpbi0+X21heHg7ICsraikgeworCQkJaWYgKCFpc1dpZGVjRXh0KHdpbi0+X2xpbmVbeV0udGV4dFt4ICsgal0pKSB7CisJCQkgICAgVFIoVFJBQ0VfVklSVFBVVCwgKCJmaWxsICVkIG9ycGhhbiBjZWxscyIsIGopKTsKKwkJCSAgICBmaWxsX2NlbGxzKHdpbiwgaik7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIC8qCisJICAgICAqIEZpbmFsbHksIGFkZCB0aGUgY2VsbHMgZm9yIHRoaXMgY2hhcmFjdGVyLgorCSAgICAgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCU5DVVJTRVNfQ0hfVCB2YWx1ZSA9IGNoOworCQlTZXRXaWRlY0V4dCh2YWx1ZSwgaSk7CisJCVRSKFRSQUNFX1ZJUlRQVVQsICgibXVsdGljb2x1bW4gJWQ6JWQgKCVkLCVkKSIsCisJCQkJICAgaSArIDEsIGxlbiwKKwkJCQkgICB3aW4tPl9iZWd5ICsgeSwgd2luLT5fYmVneCArIHgpKTsKKwkJbGluZS0+dGV4dFt4XSA9IHZhbHVlOworCQlDSEFOR0VEX0NFTEwobGluZSwgeCk7CisJCSsreDsKKwkgICAgfQorCSAgICBnb3RvIHRlc3R3cmFwcGluZzsKKwl9CisgICAgfSk7CisKKyAgICAvKgorICAgICAqIFNpbmdsZS1jb2x1bW4gY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBsaW5lLT50ZXh0W3grK10gPSBjaDsKKyAgICAvKgorICAgICAqIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IGZvciB3aWRlLWNoYXJhY3RlcnMuCisgICAgICovCisgICAgaWZfV0lERUMoCisgIHRlc3R3cmFwcGluZzoKKyAgICApOworCisgICAgVFIoVFJBQ0VfVklSVFBVVCwgKCJjZWxsICglbGQsICVsZC4uJWQpID0gJXMiLAorCQkgICAgICAgKGxvbmcpIHdpbi0+X2N1cnksIChsb25nKSB3aW4tPl9jdXJ4LCB4IC0gMSwKKwkJICAgICAgIF90cmFjZWNoX3QoQ0hSRUYoY2gpKSkpOworCisgICAgaWYgKHggPiB3aW4tPl9tYXh4KSB7CisJcmV0dXJuIHdyYXBfdG9fbmV4dF9saW5lKHdpbik7CisgICAgfQorICAgIHdpbi0+X2N1cnggPSB4OworICAgIHJldHVybiBPSzsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAord2FkZGNoX25vc3luYyhXSU5ET1cgKndpbiwgY29uc3QgTkNVUlNFU19DSF9UIGNoKQorLyogdGhlIHdvcmtob3JzZSBmdW5jdGlvbiAtLSBhZGQgYSBjaGFyYWN0ZXIgdG8gdGhlIGdpdmVuIHdpbmRvdyAqLworeworICAgIE5DVVJTRVNfU0laRV9UIHgsIHk7CisgICAgY2h0eXBlIHQgPSBDaGFyT2YoY2gpOworICAgIGNvbnN0IGNoYXIgKnMgPSB1bmN0cmwodCk7CisKKyAgICAvKgorICAgICAqIElmIHdlIGFyZSB1c2luZyB0aGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQsIGZvcmdldCBhYm91dCBsb2NhbGUuCisgICAgICogT3RoZXJ3aXNlLCBpZiB1bmN0cmwoKSByZXR1cm5zIGEgc2luZ2xlLWNoYXJhY3RlciBvciB0aGUgbG9jYWxlCisgICAgICogY2xhaW1zIHRoZSBjb2RlIGlzIHByaW50YWJsZSwgdHJlYXQgaXQgdGhhdCB3YXkuCisgICAgICovCisgICAgaWYgKChBdHRyT2YoY2gpICYgQV9BTFRDSEFSU0VUKQorCXx8ICgKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSAgICAgICAoU1AgIT0gMCAmJiBTUC0+X2xlZ2FjeV9jb2RpbmcpICYmCisjZW5kaWYKKwkgICAgICAgc1sxXSA9PSAwCisJKQorCXx8ICgKKwkgICAgICAgaXNwcmludCh0KQorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJICAgICAgIHx8ICgoU1AgPT0gMCB8fCAhU1AtPl9sZWdhY3lfY29kaW5nKSAmJgorCQkgICAoV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpCisJCSAgICB8fCAhX25jX2lzX2NoYXJhYmxlKENoYXJPZihjaCkpKSkKKyNlbmRpZgorCSkpCisJcmV0dXJuIHdhZGRjaF9saXRlcmFsKHdpbiwgY2gpOworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgY2FycmlhZ2UgY29udHJvbCBhbmQgb3RoZXIgY29kZXMgdGhhdCBhcmUgbm90IHByaW50YWJsZSwgb3IgYXJlCisgICAgICoga25vd24gdG8gZXhwYW5kIHRvIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGFjY29yZGluZyB0byB1bmN0cmwoKS4KKyAgICAgKi8KKyAgICB4ID0gd2luLT5fY3VyeDsKKyAgICB5ID0gd2luLT5fY3VyeTsKKworICAgIHN3aXRjaCAodCkgeworICAgIGNhc2UgJ1x0JzoKKwl4ICs9IChUQUJTSVpFIC0gKHggJSBUQUJTSVpFKSk7CisKKwkvKgorCSAqIFNwYWNlLWZpbGwgdGhlIHRhYiBvbiB0aGUgYm90dG9tIGxpbmUgc28gdGhhdCB3ZSdsbCBnZXQgdGhlCisJICogImNvcnJlY3QiIGN1cnNvciBwb3NpdGlvbi4KKwkgKi8KKwlpZiAoKCF3aW4tPl9zY3JvbGwgJiYgKHkgPT0gd2luLT5fcmVnYm90dG9tKSkKKwkgICAgfHwgKHggPD0gd2luLT5fbWF4eCkpIHsKKwkgICAgTkNVUlNFU19DSF9UIGJsYW5rID0gYmxhbmtjaGFyOworCSAgICBBZGRBdHRyKGJsYW5rLCBBdHRyT2YoY2gpKTsKKwkgICAgd2hpbGUgKHdpbi0+X2N1cnggPCB4KSB7CisJCWlmICh3YWRkY2hfbGl0ZXJhbCh3aW4sIGJsYW5rKSA9PSBFUlIpCisJCSAgICByZXR1cm4gKEVSUik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfSBlbHNlIHsKKwkgICAgd2NscnRvZW9sKHdpbik7CisJICAgIHdpbi0+X2ZsYWdzIHw9IF9XUkFQUEVEOworCSAgICBpZiAobmV3bGluZV9mb3JjZXNfc2Nyb2xsKHdpbiwgJnkpKSB7CisJCXggPSB3aW4tPl9tYXh4OworCQlpZiAod2luLT5fc2Nyb2xsKSB7CisJCSAgICBzY3JvbGwod2luKTsKKwkJICAgIHggPSAwOworCQl9CisJICAgIH0gZWxzZSB7CisJCXggPSAwOworCSAgICB9CisJfQorCWJyZWFrOworICAgIGNhc2UgJ1xuJzoKKwl3Y2xydG9lb2wod2luKTsKKwlpZiAobmV3bGluZV9mb3JjZXNfc2Nyb2xsKHdpbiwgJnkpKSB7CisJICAgIGlmICh3aW4tPl9zY3JvbGwpCisJCXNjcm9sbCh3aW4pOworCSAgICBlbHNlCisJCXJldHVybiAoRVJSKTsKKwl9CisJLyogRkFMTFRIUlUgKi8KKyAgICBjYXNlICdccic6CisJeCA9IDA7CisJd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCWJyZWFrOworICAgIGNhc2UgJ1xiJzoKKwlpZiAoeCA9PSAwKQorCSAgICByZXR1cm4gKE9LKTsKKwl4LS07CisJd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJd2hpbGUgKCpzKSB7CisJICAgIE5DVVJTRVNfQ0hfVCBzY2g7CisJICAgIFNldENoYXIoc2NoLCAqcysrLCBBdHRyT2YoY2gpKTsKKwkgICAgaWZfRVhUX0NPTE9SUyhTZXRQYWlyKHNjaCwgR2V0UGFpcihjaCkpKTsKKwkgICAgaWYgKHdhZGRjaF9saXRlcmFsKHdpbiwgc2NoKSA9PSBFUlIpCisJCXJldHVybiBFUlI7CisJfQorCXJldHVybiAoT0spOworICAgIH0KKworICAgIHdpbi0+X2N1cnggPSB4OworICAgIHdpbi0+X2N1cnkgPSB5OworCisgICAgcmV0dXJuIChPSyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY193YWRkY2hfbm9zeW5jKFdJTkRPVyAqd2luLCBjb25zdCBOQ1VSU0VTX0NIX1QgYykKKy8qIGV4cG9ydCBjb3B5IG9mIHdhZGRjaF9ub3N5bmMoKSBzbyB0aGUgc3RyaW5nLXB1dCBmdW5jdGlvbnMgY2FuIHVzZSBpdCAqLworeworICAgIHJldHVybiAod2FkZGNoX25vc3luYyh3aW4sIGMpKTsKK30KKworLyoKKyAqIFRoZSB2ZXJzaW9ucyBiZWxvdyBjYWxsIF9uY19zeW5jaG9vaygpLiAgV2Ugd2FudGVkIHRvIGF2b2lkIHRoaXMgaW4gdGhlCisgKiB2ZXJzaW9uIGV4cG9ydGVkIGZvciBzdHJpbmcgcHV0czsgdGhleSdsbCBjYWxsIF9uY19zeW5jaG9vayBvbmNlIGF0IGVuZAorICogb2YgcnVuLgorICovCisKKy8qIFRoZXNlIGFyZSBhY3R1YWwgZW50cnkgcG9pbnRzICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dhZGRjaChXSU5ET1cgKndpbiwgY29uc3QgY2h0eXBlIGNoKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIE5DVVJTRVNfQ0hfVCB3Y2g7CisgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisKKyAgICBUUihUUkFDRV9WSVJUUFVUIHwgVFJBQ0VfQ0NBTExTLCAoVF9DQUxMRUQoIndhZGRjaCglcCwgJXMpIiksIHdpbiwKKwkJCQkgICAgICBfdHJhY2VjaHR5cGUoY2gpKSk7CisKKyAgICBpZiAod2luICYmICh3YWRkY2hfbm9zeW5jKHdpbiwgd2NoKSAhPSBFUlIpKSB7CisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKworICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICAgIHJldHVybiAoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dlY2hvY2hhcihXSU5ET1cgKndpbiwgY29uc3QgY2h0eXBlIGNoKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIE5DVVJTRVNfQ0hfVCB3Y2g7CisgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisKKyAgICBUUihUUkFDRV9WSVJUUFVUIHwgVFJBQ0VfQ0NBTExTLCAoVF9DQUxMRUQoIndlY2hvY2hhciglcCwgJXMpIiksIHdpbiwKKwkJCQkgICAgICBfdHJhY2VjaHR5cGUoY2gpKSk7CisKKyAgICBpZiAod2luICYmICh3YWRkY2hfbm9zeW5jKHdpbiwgd2NoKSAhPSBFUlIpKSB7CisJYm9vbCBzYXZlX2ltbWVkID0gd2luLT5faW1tZWQ7CisJd2luLT5faW1tZWQgPSBUUlVFOworCV9uY19zeW5jaG9vayh3aW4pOworCXdpbi0+X2ltbWVkID0gc2F2ZV9pbW1lZDsKKwljb2RlID0gT0s7CisgICAgfQorICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICAgIHJldHVybiAoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2FkZHN0ci5jIGIvbmN1cnNlcy9iYXNlL2xpYl9hZGRzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNhMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9hZGRzdHIuYwpAQCAtMCwwICsxLDI0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBSZXdyaXR0ZW4gMjAwMS0yMDA0IHRvIHN1cHBvcnQgd2lkZS1jaGFyYWN0ZXJzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAqCisgKglTdmVuIFZlcmRvb2xhZWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCVRob21hcyBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfYWRkc3RyLmMKKyoKKyoqCVRoZSByb3V0aW5lcyB3YWRkbnN0cigpLCB3YWRkY2huc3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfYWRkc3RyLmMsdiAxLjQ4IDIwMDcvMTAvMTMgMTk6NTY6NTcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2FkZG5zdHIoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKmFzdHIsIGludCBuKQoreworICAgIGNvbnN0IGNoYXIgKnN0ciA9IGFzdHI7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgid2FkZG5zdHIoJXAsJXMsJWQpIiksIHdpbiwgX25jX3Zpc2J1Zm4oYXN0ciwgbiksIG4pKTsKKworICAgIGlmICh3aW4gJiYgKHN0ciAhPSAwKSkgeworCVRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9BVFRSUywKKwkgICAoIi4uLiBjdXJyZW50ICVzIiwgX3RyYWNlYXR0cihXSU5ET1dfQVRUUlMod2luKSkpKTsKKwljb2RlID0gT0s7CisJaWYgKG4gPCAwKQorCSAgICBuID0gKGludCkgc3RybGVuKGFzdHIpOworCisJVFIoVFJBQ0VfVklSVFBVVCwgKCJzdHIgaXMgbm90IG51bGwsIGxlbmd0aCA9ICVkIiwgbikpOworCXdoaWxlICgobi0tID4gMCkgJiYgKCpzdHIgIT0gJ1wwJykpIHsKKwkgICAgTkNVUlNFU19DSF9UIGNoOworCSAgICBUUihUUkFDRV9WSVJUUFVULCAoIipzdHIgPSAlI28iLCBVQ2hhcigqc3RyKSkpOworCSAgICBTZXRDaGFyKGNoLCBVQ2hhcigqc3RyKyspLCBBX05PUk1BTCk7CisJICAgIGlmIChfbmNfd2FkZGNoX25vc3luYyh3aW4sIGNoKSA9PSBFUlIpIHsKKwkJY29kZSA9IEVSUjsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJX25jX3N5bmNob29rKHdpbik7CisgICAgfQorICAgIFRSKFRSQUNFX1ZJUlRQVVQsICgid2FkZG5zdHIgcmV0dXJucyAlZCIsIGNvZGUpKTsKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YWRkY2huc3RyKFdJTkRPVyAqd2luLCBjb25zdCBjaHR5cGUgKmFzdHIsIGludCBuKQoreworICAgIE5DVVJTRVNfU0laRV9UIHksIHg7CisgICAgaW50IGNvZGUgPSBPSzsKKyAgICBpbnQgaTsKKyAgICBzdHJ1Y3QgbGRhdCAqbGluZTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3YWRkY2huc3RyKCVwLCVwLCVkKSIpLCB3aW4sIGFzdHIsIG4pKTsKKworICAgIGlmICghd2luKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIHkgPSB3aW4tPl9jdXJ5OworICAgIHggPSB3aW4tPl9jdXJ4OworICAgIGlmIChuIDwgMCkgeworCWNvbnN0IGNodHlwZSAqc3RyOworCW4gPSAwOworCWZvciAoc3RyID0gKGNvbnN0IGNodHlwZSAqKSBhc3RyOyAqc3RyICE9IDA7IHN0cisrKQorCSAgICBuKys7CisgICAgfQorICAgIGlmIChuID4gd2luLT5fbWF4eCAtIHggKyAxKQorCW4gPSB3aW4tPl9tYXh4IC0geCArIDE7CisgICAgaWYgKG4gPT0gMCkKKwlyZXR1cm5Db2RlKGNvZGUpOworCisgICAgbGluZSA9ICYod2luLT5fbGluZVt5XSk7CisgICAgZm9yIChpID0gMDsgaSA8IG4gJiYgQ2hDaGFyT2YoYXN0cltpXSkgIT0gJ1wwJzsgKytpKSB7CisJU2V0Q2hhcjIobGluZS0+dGV4dFtpICsgeF0sIGFzdHJbaV0pOworICAgIH0KKyAgICBDSEFOR0VEX1JBTkdFKGxpbmUsIHgsIHggKyBuIC0gMSk7CisKKyAgICBfbmNfc3luY2hvb2sod2luKTsKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3djaHN0cmxlbihjb25zdCBjY2hhcl90ICpzKQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIHdoaWxlIChDaGFyT2Yoc1tyZXN1bHRdKSAhPSBMJ1wwJykgeworCXJlc3VsdCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YWRkX3djaG5zdHIoV0lORE9XICp3aW4sIGNvbnN0IGNjaGFyX3QgKmFzdHIsIGludCBuKQoreworICAgIHN0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBOZXdDaGFyKEJMQU5LX1RFWFQpOworICAgIE5DVVJTRVNfU0laRV9UIHk7CisgICAgTkNVUlNFU19TSVpFX1QgeDsKKyAgICBpbnQgY29kZSA9IE9LOworICAgIHN0cnVjdCBsZGF0ICpsaW5lOworICAgIGludCBpLCBqLCBzdGFydCwgbGVuLCBlbmQ7CisKKyAgICBUKChUX0NBTExFRCgid2FkZF93Y2huc3RyKCVwLCVzLCVkKSIpLCB3aW4sIF9uY192aXNjYnVmKGFzdHIsIG4pLCBuKSk7CisKKyAgICBpZiAoIXdpbikKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICB5ID0gd2luLT5fY3VyeTsKKyAgICB4ID0gd2luLT5fY3VyeDsKKyAgICBpZiAobiA8IDApIHsKKwluID0gX25jX3djaHN0cmxlbihhc3RyKTsKKyAgICB9CisgICAgaWYgKG4gPiB3aW4tPl9tYXh4IC0geCArIDEpCisJbiA9IHdpbi0+X21heHggLSB4ICsgMTsKKyAgICBpZiAobiA9PSAwKQorCXJldHVybkNvZGUoY29kZSk7CisKKyAgICBsaW5lID0gJih3aW4tPl9saW5lW3ldKTsKKyAgICBzdGFydCA9IHg7CisgICAgZW5kID0geCArIG4gLSAxOworCisgICAgLyoKKyAgICAgKiBSZXNldCBvcnBoYW5lZCBjZWxscyBvZiBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycyB0aGF0IGV4dGVuZCB1cCB0byB0aGUKKyAgICAgKiBuZXcgc3RyaW5nJ3MgbG9jYXRpb24gdG8gYmxhbmtzLgorICAgICAqLworICAgIGlmICh4ID4gMCAmJiBpc1dpZGVjRXh0KGxpbmUtPnRleHRbeF0pKSB7CisJZm9yIChpID0gMDsgaSA8PSB4OyArK2kpIHsKKwkgICAgaWYgKCFpc1dpZGVjRXh0KGxpbmUtPnRleHRbeCAtIGldKSkgeworCQkvKiBtdXN0IGJlIGlzV2lkZWNCYXNlKCkgKi8KKwkJc3RhcnQgLT0gaTsKKwkJd2hpbGUgKGkgPiAwKSB7CisJCSAgICBsaW5lLT50ZXh0W3ggLSBpLS1dID0gX25jX3JlbmRlcih3aW4sIGJsYW5rKTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENvcHkgdGhlIG5ldyBzdHJpbmcgdG8gdGhlIHdpbmRvdy4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbiAmJiBDaGFyT2YoYXN0cltpXSkgIT0gTCdcMCcgJiYgeCA8PSB3aW4tPl9tYXh4OyArK2kpIHsKKwlpZiAoaXNXaWRlY0V4dChhc3RyW2ldKSkKKwkgICAgY29udGludWU7CisKKwlsZW4gPSB3Y3dpZHRoKENoYXJPZihhc3RyW2ldKSk7CisKKwlpZiAoeCArIGxlbiAtIDEgPD0gd2luLT5fbWF4eCkgeworCSAgICBsaW5lLT50ZXh0W3hdID0gX25jX3JlbmRlcih3aW4sIGFzdHJbaV0pOworCSAgICBpZiAobGVuID4gMSkgeworCQlmb3IgKGogPSAwOyBqIDwgbGVuOyArK2opIHsKKwkJICAgIGlmIChqICE9IDApIHsKKwkJCWxpbmUtPnRleHRbeCArIGpdID0gbGluZS0+dGV4dFt4XTsKKwkJICAgIH0KKwkJICAgIFNldFdpZGVjRXh0KGxpbmUtPnRleHRbeCArIGpdLCBqKTsKKwkJfQorCSAgICB9CisJICAgIHggKz0gbGVuOworCSAgICBlbmQgKz0gbGVuIC0gMTsKKwl9IGVsc2UgeworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXQgb3JwaGFuZWQgY2VsbHMgb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMgd2hpY2ggbGllIGFmdGVyIHRoZSBuZXcKKyAgICAgKiBzdHJpbmcgdG8gYmxhbmtzLgorICAgICAqLworICAgIHdoaWxlICh4IDw9IHdpbi0+X21heHggJiYgaXNXaWRlY0V4dChsaW5lLT50ZXh0W3hdKSkgeworCWxpbmUtPnRleHRbeF0gPSBfbmNfcmVuZGVyKHdpbiwgYmxhbmspOworCSsrZW5kOworCSsreDsKKyAgICB9CisgICAgQ0hBTkdFRF9SQU5HRShsaW5lLCBzdGFydCwgZW5kKTsKKworICAgIF9uY19zeW5jaG9vayh3aW4pOworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dhZGRud3N0cihXSU5ET1cgKndpbiwgY29uc3Qgd2NoYXJfdCAqc3RyLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3YWRkbndzdHIoJXAsJXMsJWQpIiksIHdpbiwgX25jX3Zpc3didWZuKHN0ciwgbiksIG4pKTsKKworICAgIGlmICh3aW4gJiYgKHN0ciAhPSAwKSkgeworCVRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9BVFRSUywKKwkgICAoIi4uLiBjdXJyZW50ICVzIiwgX3RyYWNlYXR0cihXSU5ET1dfQVRUUlMod2luKSkpKTsKKwljb2RlID0gT0s7CisJaWYgKG4gPCAwKQorCSAgICBuID0gKGludCkgd2NzbGVuKHN0cik7CisKKwlUUihUUkFDRV9WSVJUUFVULCAoInN0ciBpcyBub3QgbnVsbCwgbGVuZ3RoID0gJWQiLCBuKSk7CisJd2hpbGUgKChuLS0gPiAwKSAmJiAoKnN0ciAhPSBMKCdcMCcpKSkgeworCSAgICBOQ1VSU0VTX0NIX1QgY2g7CisJICAgIFRSKFRSQUNFX1ZJUlRQVVQsICgiKnN0clswXSA9ICUjbHgiLCAodW5zaWduZWQgbG9uZykgKnN0cikpOworCSAgICBTZXRDaGFyKGNoLCAqc3RyKyssIEFfTk9STUFMKTsKKwkgICAgaWYgKHdhZGRfd2NoKHdpbiwgJmNoKSA9PSBFUlIpIHsKKwkJY29kZSA9IEVSUjsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJX25jX3N5bmNob29rKHdpbik7CisgICAgfQorICAgIFRSKFRSQUNFX1ZJUlRQVVQsICgid2FkZG53c3RyIHJldHVybnMgJWQiLCBjb2RlKSk7CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2JlZXAuYyBiL25jdXJzZXMvYmFzZS9saWJfYmVlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzhmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2JlZXAuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgliZWVwLmMKKyAqCisgKglUaGUgcm91dGluZSBiZWVwKCkuCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGJlZXAsIGZsYXNoICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfYmVlcC5jLHYgMS4xMCAyMDA1LzA0LzA5IDE1OjIwOjA0IHRvbSBFeHAgJCIpCisKKy8qCisgKgliZWVwKCkKKyAqCisgKglTb3VuZCB0aGUgY3VycmVudCB0ZXJtaW5hbCdzIGF1ZGlibGUgYmVsbCBpZiBpdCBoYXMgb25lLiAgIElmIG5vdCwKKyAqCWZsYXNoIHRoZSBzY3JlZW4gaWYgcG9zc2libGUuCisgKgorICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2JlZXAodm9pZCkKK3sKKyAgICBpbnQgcmVzID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImJlZXAoKSIpKSk7CisKKyAgICAvKiBGSVhNRTogc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBub3QgaW4gYWx0Y2hhciBtb2RlICovCisgICAgaWYgKGN1cl90ZXJtID09IDApIHsKKwlyZXMgPSBFUlI7CisgICAgfSBlbHNlIGlmIChiZWxsKSB7CisJVFBVVFNfVFJBQ0UoImJlbGwiKTsKKwlyZXMgPSBwdXRwKGJlbGwpOworCV9uY19mbHVzaCgpOworICAgIH0gZWxzZSBpZiAoZmxhc2hfc2NyZWVuKSB7CisJVFBVVFNfVFJBQ0UoImZsYXNoX3NjcmVlbiIpOworCXJlcyA9IHB1dHAoZmxhc2hfc2NyZWVuKTsKKwlfbmNfZmx1c2goKTsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKHJlcyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2JrZ2QuYyBiL25jdXJzZXMvYmFzZS9saWJfYmtnZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OWUwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2JrZ2QuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTcgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFN2ZW4gVmVyZG9vbGFlZ2UgICAgICAgICAgICAgICAgICAgICAgICAyMDAwICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2JrZ2QuYyx2IDEuMzYgMjAwOC8wMy8yMyAwMDowOToxNCB0b20gRXhwICQiKQorCisvKgorICogU2V0IHRoZSB3aW5kb3cncyBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLgorICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK05DVVJTRVNfRVhQT1JUKHZvaWQpCisjZWxzZQorc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKKyNlbmRpZgord2JrZ3JuZHNldChXSU5ET1cgKndpbiwgY29uc3QgQVJHX0NIX1QgY2gpCit7CisgICAgVCgoVF9DQUxMRUQoIndia2dkc2V0KCVwLCVzKSIpLCB3aW4sIF90cmFjZWNoX3QoY2gpKSk7CisKKyAgICBpZiAod2luKSB7CisJYXR0cl90IG9mZiA9IEF0dHJPZih3aW4tPl9uY19ia2dkKTsKKwlhdHRyX3Qgb24gPSBBdHRyT2YoQ0hERVJFRihjaCkpOworCisJdG9nZ2xlX2F0dHJfb2ZmKFdJTkRPV19BVFRSUyh3aW4pLCBvZmYpOworCXRvZ2dsZV9hdHRyX29uKFdJTkRPV19BVFRSUyh3aW4pLCBvbik7CisKKyNpZiBOQ1VSU0VTX0VYVF9DT0xPUlMKKwl7CisJICAgIGludCBwYWlyOworCisJICAgIGlmICgocGFpciA9IEdldFBhaXIod2luLT5fbmNfYmtnZCkpICE9IDApCisJCVNFVF9XSU5ET1dfUEFJUih3aW4sIDApOworCSAgICBpZiAoKHBhaXIgPSBHZXRQYWlyKENIREVSRUYoY2gpKSkgIT0gMCkKKwkJU0VUX1dJTkRPV19QQUlSKHdpbiwgcGFpcik7CisJfQorI2VuZGlmCisKKwlpZiAoQ2hhck9mKENIREVSRUYoY2gpKSA9PSBMKCdcMCcpKSB7CisJICAgIFNldENoYXIod2luLT5fbmNfYmtnZCwgQkxBTktfVEVYVCwgQXR0ck9mKENIREVSRUYoY2gpKSk7CisJICAgIGlmX0VYVF9DT0xPUlMoU2V0UGFpcih3aW4tPl9uY19ia2dkLCBHZXRQYWlyKENIREVSRUYoY2gpKSkpOworCX0gZWxzZSB7CisJICAgIHdpbi0+X25jX2JrZ2QgPSBDSERFUkVGKGNoKTsKKwl9CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkvKgorCSAqIElmIHdlJ3JlIGNvbXBpbGVkIGZvciB3aWRlLWNoYXJhY3RlciBzdXBwb3J0LCBfYmtncm5kIGlzIHRoZQorCSAqIHByZWZlcnJlZCBsb2NhdGlvbiBmb3IgdGhlIGJhY2tncm91bmQgaW5mb3JtYXRpb24gc2luY2UgaXQgc3RvcmVzCisJICogbW9yZSB0aGFuIF9ia2dkLiAgVXBkYXRlIF9ia2dkIGVhY2ggdGltZSB3ZSBtb2RpZnkgX2JrZ3JuZCwgc28gdGhlCisJICogbWFjcm8gZ2V0YmtnZCgpIHdpbGwgd29yay4KKwkgKi8KKwl7CisJICAgIGNjaGFyX3Qgd2NoOworCSAgICBpbnQgdG1wOworCisJICAgIHdnZXRia2dybmQod2luLCAmd2NoKTsKKwkgICAgdG1wID0gX25jX3RvX2NoYXIoKHdpbnRfdCkgQ2hhck9mKHdjaCkpOworCisJICAgIHdpbi0+X2JrZ2QgPSAoKCh0bXAgPT0gRU9GKSA/ICcgJyA6IChjaHR5cGUpIHRtcCkKKwkJCSAgfCAoQXR0ck9mKHdjaCkgJiBBTExfQlVUX0NPTE9SKQorCQkJICB8IENPTE9SX1BBSVIoR0VUX1dJTkRPV19QQUlSKHdpbikpKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3dia2dkc2V0KFdJTkRPVyAqd2luLCBjaHR5cGUgY2gpCit7CisgICAgTkNVUlNFU19DSF9UIHdjaDsKKyAgICBTZXRDaGFyMih3Y2gsIGNoKTsKKyAgICB3Ymtncm5kc2V0KHdpbiwgQ0hSRUYod2NoKSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHdpbmRvdydzIGJhY2tncm91bmQgaW5mb3JtYXRpb24gYW5kIGFwcGx5IGl0IHRvIGVhY2ggY2VsbC4KKyAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitOQ1VSU0VTX0VYUE9SVChpbnQpCisjZWxzZQorc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorI3VuZGVmIHdia2dybmQKKyNlbmRpZgord2JrZ3JuZChXSU5ET1cgKndpbiwgY29uc3QgQVJHX0NIX1QgY2gpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgaW50IHgsIHk7CisgICAgTkNVUlNFU19DSF9UIG5ld19ia2dkID0gQ0hERVJFRihjaCk7CisKKyAgICBUKChUX0NBTExFRCgid2JrZ2QoJXAsJXMpIiksIHdpbiwgX3RyYWNlY2hfdChjaCkpKTsKKworICAgIGlmICh3aW4pIHsKKwlOQ1VSU0VTX0NIX1Qgb2xkX2JrZ3JuZDsKKwl3Z2V0Ymtncm5kKHdpbiwgJm9sZF9ia2dybmQpOworCisJd2JrZ3JuZHNldCh3aW4sIENIUkVGKG5ld19ia2dkKSk7CisJd2F0dHJzZXQod2luLCBBdHRyT2Yod2luLT5fbmNfYmtnZCkpOworCisJZm9yICh5ID0gMDsgeSA8PSB3aW4tPl9tYXh5OyB5KyspIHsKKwkgICAgZm9yICh4ID0gMDsgeCA8PSB3aW4tPl9tYXh4OyB4KyspIHsKKwkJaWYgKENoYXJFcSh3aW4tPl9saW5lW3ldLnRleHRbeF0sIG9sZF9ia2dybmQpKSB7CisJCSAgICB3aW4tPl9saW5lW3ldLnRleHRbeF0gPSB3aW4tPl9uY19ia2dkOworCQl9IGVsc2UgeworCQkgICAgTkNVUlNFU19DSF9UIHdjaCA9IHdpbi0+X2xpbmVbeV0udGV4dFt4XTsKKwkJICAgIFJlbUF0dHIod2NoLCAofihBX0FMVENIQVJTRVQgfCBBX0NIQVJURVhUKSkpOworCQkgICAgd2luLT5fbGluZVt5XS50ZXh0W3hdID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisJCX0KKwkgICAgfQorCX0KKwl0b3VjaHdpbih3aW4pOworCV9uY19zeW5jaG9vayh3aW4pOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2JrZ2QoV0lORE9XICp3aW4sIGNodHlwZSBjaCkKK3sKKyAgICBOQ1VSU0VTX0NIX1Qgd2NoOworICAgIFNldENoYXIyKHdjaCwgY2gpOworICAgIHJldHVybiB3Ymtncm5kKHdpbiwgQ0hSRUYod2NoKSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2JveC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9ib3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmNmYzZjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9ib3guYwpAQCAtMCwwICsxLDEyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFN2ZW4gVmVyZG9vbGFlZ2UgICAgICAgICAgICAgICAgICAgICAgICAyMDAxICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9ib3guYworKioKKyoqCVRoZSByb3V0aW5lIHdib3JkZXIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9ib3guYyx2IDEuMjIgMjAwNS8xMS8yNiAxNTozOTo0MiB0b20gRXhwICQiKQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBjaHR5cGUKK19teV9yZW5kZXIoV0lORE9XICp3aW4sIGNodHlwZSBjaCkKK3sKKyAgICBOQ1VSU0VTX0NIX1Qgd2NoOworICAgIFNldENoYXIyKHdjaCwgY2gpOworICAgIHdjaCA9IF9uY19yZW5kZXIod2luLCB3Y2gpOworICAgIHJldHVybiBDaGFyT2Yod2NoKSB8IEF0dHJPZih3Y2gpOworfQorI2RlZmluZSBSRU5ERVJfV0lUSF9ERUZBVUxUKGNoLGRlZikgdyAjIyBjaCA9IF9teV9yZW5kZXIod2luLCAoY2ggPT0gMCkgPyBkZWYgOiBjaCkKKyNlbHNlCisjZGVmaW5lIFJFTkRFUl9XSVRIX0RFRkFVTFQoY2gsZGVmKSB3ICMjIGNoID0gX25jX3JlbmRlcih3aW4sIChjaCA9PSAwKSA/IGRlZiA6IGNoKQorI2VuZGlmCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dib3JkZXIoV0lORE9XICp3aW4sCisJY2h0eXBlIGxzLCBjaHR5cGUgcnMsCisJY2h0eXBlIHRzLCBjaHR5cGUgYnMsCisJY2h0eXBlIHRsLCBjaHR5cGUgdHIsCisJY2h0eXBlIGJsLCBjaHR5cGUgYnIpCit7CisgICAgTkNVUlNFU19TSVpFX1QgaTsKKyAgICBOQ1VSU0VTX1NJWkVfVCBlbmR4LCBlbmR5OworICAgIGNodHlwZSB3bHMsIHdycywgd3RzLCB3YnMsIHd0bCwgd3RyLCB3YmwsIHdicjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Ym9yZGVyKCVwLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzKSIpLAorICAgICAgIHdpbiwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDEsIGxzKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDIsIHJzKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDMsIHRzKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDQsIGJzKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDUsIHRsKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDYsIHRyKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDcsIGJsKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDgsIGJyKSkpOworCisgICAgaWYgKCF3aW4pCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgUkVOREVSX1dJVEhfREVGQVVMVChscywgQUNTX1ZMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKHJzLCBBQ1NfVkxJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQodHMsIEFDU19ITElORSk7CisgICAgUkVOREVSX1dJVEhfREVGQVVMVChicywgQUNTX0hMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKHRsLCBBQ1NfVUxDT1JORVIpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQodHIsIEFDU19VUkNPUk5FUik7CisgICAgUkVOREVSX1dJVEhfREVGQVVMVChibCwgQUNTX0xMQ09STkVSKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGJyLCBBQ1NfTFJDT1JORVIpOworCisgICAgVCgoInVzaW5nICVzLCAlcywgJXMsICVzLCAlcywgJXMsICVzLCAlcyIsCisgICAgICAgX3RyYWNlY2h0eXBlMigxLCB3bHMpLAorICAgICAgIF90cmFjZWNodHlwZTIoMiwgd3JzKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDMsIHd0cyksCisgICAgICAgX3RyYWNlY2h0eXBlMig0LCB3YnMpLAorICAgICAgIF90cmFjZWNodHlwZTIoNSwgd3RsKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDYsIHd0ciksCisgICAgICAgX3RyYWNlY2h0eXBlMig3LCB3YmwpLAorICAgICAgIF90cmFjZWNodHlwZTIoOCwgd2JyKSkpOworCisgICAgZW5keCA9IHdpbi0+X21heHg7CisgICAgZW5keSA9IHdpbi0+X21heHk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IGVuZHg7IGkrKykgeworCVNldENoYXIyKHdpbi0+X2xpbmVbMF0udGV4dFtpXSwgd3RzKTsKKwlTZXRDaGFyMih3aW4tPl9saW5lW2VuZHldLnRleHRbaV0sIHdicyk7CisgICAgfQorICAgIHdpbi0+X2xpbmVbZW5keV0uZmlyc3RjaGFyID0gd2luLT5fbGluZVswXS5maXJzdGNoYXIgPSAwOworICAgIHdpbi0+X2xpbmVbZW5keV0ubGFzdGNoYXIgPSB3aW4tPl9saW5lWzBdLmxhc3RjaGFyID0gZW5keDsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gZW5keTsgaSsrKSB7CisJU2V0Q2hhcjIod2luLT5fbGluZVtpXS50ZXh0WzBdLCB3bHMpOworCVNldENoYXIyKHdpbi0+X2xpbmVbaV0udGV4dFtlbmR4XSwgd3JzKTsKKwl3aW4tPl9saW5lW2ldLmZpcnN0Y2hhciA9IDA7CisJd2luLT5fbGluZVtpXS5sYXN0Y2hhciA9IGVuZHg7CisgICAgfQorICAgIFNldENoYXIyKHdpbi0+X2xpbmVbMF0udGV4dFswXSwgd3RsKTsKKyAgICBTZXRDaGFyMih3aW4tPl9saW5lWzBdLnRleHRbZW5keF0sIHd0cik7CisgICAgU2V0Q2hhcjIod2luLT5fbGluZVtlbmR5XS50ZXh0WzBdLCB3YmwpOworICAgIFNldENoYXIyKHdpbi0+X2xpbmVbZW5keV0udGV4dFtlbmR4XSwgd2JyKTsKKworICAgIF9uY19zeW5jaG9vayh3aW4pOworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9jaGdhdC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9jaGdhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZWVmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2NoZ2F0LmMKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogU3ZlbiBWZXJkb29sYWVnZSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAyMDA1ICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9jaGdhdC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2NoZ2F0KCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfY2hnYXQuYyx2IDEuNyAyMDA2LzA3LzE1IDIyOjA3OjExIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3djaGdhdChXSU5ET1cgKndpbiwgaW50IG4sIGF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvciwgY29uc3Qgdm9pZCAqb3B0cyBHQ0NfVU5VU0VEKQoreworICAgIGludCBpOworCisgICAgVCgoVF9DQUxMRUQoIndjaGdhdCglcCwlZCwlcywlZCkiKSwgd2luLCBuLCBfdHJhY2VhdHRyKGF0dHIpLCBjb2xvcikpOworCisgICAgaWYgKHdpbikgeworCXN0cnVjdCBsZGF0ICpsaW5lID0gJih3aW4tPl9saW5lW3dpbi0+X2N1cnldKTsKKworCXRvZ2dsZV9hdHRyX29uKGF0dHIsIENPTE9SX1BBSVIoY29sb3IpKTsKKworCWZvciAoaSA9IHdpbi0+X2N1cng7IGkgPD0gd2luLT5fbWF4eCAmJiAobiA9PSAtMSB8fCAobi0tID4gMCkpOyBpKyspIHsKKwkgICAgU2V0QXR0cihsaW5lLT50ZXh0W2ldLCBhdHRyKTsKKwkgICAgU2V0UGFpcihsaW5lLT50ZXh0W2ldLCBjb2xvcik7CisJICAgIENIQU5HRURfQ0VMTChsaW5lLCBpKTsKKwl9CisKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2NsZWFyLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2NsZWFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiNGVkZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfY2xlYXIuYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9jbGVhci5jCisqKgorKioJVGhlIHJvdXRpbmUgd2NsZWFyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfY2xlYXIuYyx2IDEuNyAyMDAwLzEyLzEwIDAyOjQzOjI2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3djbGVhcihXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Y2xlYXIoJXApIiksIHdpbikpOworCisgICAgaWYgKChjb2RlID0gd2VyYXNlKHdpbikpICE9IEVSUikKKwl3aW4tPl9jbGVhciA9IFRSVUU7CisKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9jbGVhcm9rLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2NsZWFyb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU2YmQxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9jbGVhcm9rLmMKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfY2xlYXJvay5jCisqKgorKioJVGhlIHJvdXRpbmUgY2xlYXJvay4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jbGVhcm9rLmMsdiAxLjQgMjAwMC8xMi8xMCAwMjo0MzoyNiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitjbGVhcm9rKFdJTkRPVyAqd2luLCBib29sIGZsYWcpCit7CisgICAgVCgoVF9DQUxMRUQoImNsZWFyb2soJXAsJWQpIiksIHdpbiwgZmxhZykpOworCisgICAgaWYgKHdpbikgeworCXdpbi0+X2NsZWFyID0gZmxhZzsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2NscmJvdC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9jbHJib3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjE5NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9jbHJib3QuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9jbHJib3QuYworKioKKyoqCVRoZSByb3V0aW5lIHdjbHJ0b2JvdCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2NscmJvdC5jLHYgMS4yMCAyMDA2LzEwLzE0IDIwOjQzOjMxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3djbHJ0b2JvdChXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Y2xydG9ib3QoJXApIiksIHdpbikpOworCisgICAgaWYgKHdpbikgeworCU5DVVJTRVNfU0laRV9UIHk7CisJTkNVUlNFU19TSVpFX1Qgc3RhcnR4ID0gd2luLT5fY3VyeDsKKwlOQ1VSU0VTX0NIX1QgYmxhbmsgPSB3aW4tPl9uY19ia2dkOworCisJVCgoImNsZWFyaW5nIGZyb20geSA9ICVsZCB0byB5ID0gJWxkIHdpdGggbWF4eCA9ICAlbGQiLAorCSAgIChsb25nKSB3aW4tPl9jdXJ5LCAobG9uZykgd2luLT5fbWF4eSwgKGxvbmcpIHdpbi0+X21heHgpKTsKKworCWZvciAoeSA9IHdpbi0+X2N1cnk7IHkgPD0gd2luLT5fbWF4eTsgeSsrKSB7CisJICAgIHN0cnVjdCBsZGF0ICpsaW5lID0gJih3aW4tPl9saW5lW3ldKTsKKwkgICAgTkNVUlNFU19DSF9UICpwdHIgPSAmKGxpbmUtPnRleHRbc3RhcnR4XSk7CisJICAgIE5DVVJTRVNfQ0hfVCAqZW5kID0gJihsaW5lLT50ZXh0W3dpbi0+X21heHhdKTsKKworCSAgICBDSEFOR0VEX1RPX0VPTChsaW5lLCBzdGFydHgsIHdpbi0+X21heHgpOworCisJICAgIHdoaWxlIChwdHIgPD0gZW5kKQorCQkqcHRyKysgPSBibGFuazsKKworCSAgICBzdGFydHggPSAwOworCX0KKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2NscmVvbC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9jbHJlb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDZlYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9jbHJlb2wuYwpAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDE5OTksMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9jbHJlb2wuYworKioKKyoqCVRoZSByb3V0aW5lIHdjbHJ0b2VvbCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2NscmVvbC5jLHYgMS4yMSAyMDAxLzEyLzE5IDAxOjA2OjA0IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3djbHJ0b2VvbChXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Y2xydG9lb2woJXApIiksIHdpbikpOworCisgICAgaWYgKHdpbikgeworCU5DVVJTRVNfQ0hfVCBibGFuazsKKwlOQ1VSU0VTX0NIX1QgKnB0ciwgKmVuZDsKKwlzdHJ1Y3QgbGRhdCAqbGluZTsKKwlOQ1VSU0VTX1NJWkVfVCB5ID0gd2luLT5fY3VyeTsKKwlOQ1VSU0VTX1NJWkVfVCB4ID0gd2luLT5fY3VyeDsKKworCS8qCisJICogSWYgd2UgaGF2ZSBqdXN0IHdyYXBwZWQgdGhlIGN1cnNvciwgdGhlIGNsZWFyIGFwcGxpZXMgdG8gdGhlCisJICogbmV3IGxpbmUsIHVubGVzcyB3ZSBhcmUgYXQgdGhlIGxvd2VyIHJpZ2h0IGNvcm5lci4KKwkgKi8KKwlpZiAoKHdpbi0+X2ZsYWdzICYgX1dSQVBQRUQpICE9IDAKKwkgICAgJiYgeSA8IHdpbi0+X21heHkpIHsKKwkgICAgd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCX0KKworCS8qCisJICogVGhlcmUncyBubyBwb2ludCBpbiBjbGVhcmluZyBpZiB3ZSdyZSBub3Qgb24gYSBsZWdhbAorCSAqIHBvc2l0aW9uLCBlaXRoZXIuCisJICovCisJaWYgKCh3aW4tPl9mbGFncyAmIF9XUkFQUEVEKSAhPSAwCisJICAgIHx8IHkgPiB3aW4tPl9tYXh5CisJICAgIHx8IHggPiB3aW4tPl9tYXh4KQorCSAgICByZXR1cm5Db2RlKEVSUik7CisKKwlibGFuayA9IHdpbi0+X25jX2JrZ2Q7CisJbGluZSA9ICZ3aW4tPl9saW5lW3ldOworCUNIQU5HRURfVE9fRU9MKGxpbmUsIHgsIHdpbi0+X21heHgpOworCisJcHRyID0gJihsaW5lLT50ZXh0W3hdKTsKKwllbmQgPSAmKGxpbmUtPnRleHRbd2luLT5fbWF4eF0pOworCisJd2hpbGUgKHB0ciA8PSBlbmQpCisJICAgICpwdHIrKyA9IGJsYW5rOworCisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9jb2xvci5jIGIvbmN1cnNlcy9iYXNlL2xpYl9jb2xvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWU0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2NvbG9yLmMKQEAgLTAsMCArMSw1OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogbGliX2NvbG9yLmMKKyAqCisgKiBIYW5kbGVzIGNvbG9yIGVtdWxhdGlvbiBvZiBTWVMgViBjdXJzZXMKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm0uaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jb2xvci5jLHYgMS44NSAyMDA3LzA0LzA3IDE3OjA3OjI4IHRvbSBFeHAgJCIpCisKKy8qCisgKiBUaGVzZSBzaG91bGQgYmUgc2NyZWVuIHN0cnVjdHVyZSBtZW1iZXJzLiAgVGhleSBuZWVkIHRvIGJlIGdsb2JhbHMgZm9yCisgKiBoaXN0b3JpY2FsIHJlYXNvbnMuICBTbyB3ZSBhc3NpZ24gdGhlbSBpbiBzdGFydF9jb2xvcigpIGFuZCBhbHNvIGluCisgKiBzZXRfdGVybSgpJ3Mgc2NyZWVuLXN3aXRjaGluZyBsb2dpYy4KKyAqLworI2lmIFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfRVhQT1JUKGludCkKK05DVVJTRVNfUFVCTElDX1ZBUihDT0xPUl9QQUlSUykgKHZvaWQpCit7CisgICAgcmV0dXJuIFNQID8gU1AtPl9wYWlyX2NvdW50IDogLTE7Cit9CitOQ1VSU0VTX0VYUE9SVChpbnQpCitOQ1VSU0VTX1BVQkxJQ19WQVIoQ09MT1JTKSAodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgPyBTUC0+X2NvbG9yX2NvdW50IDogLTE7Cit9CisjZWxzZQorTkNVUlNFU19FWFBPUlRfVkFSKGludCkgQ09MT1JfUEFJUlMgPSAwOworTkNVUlNFU19FWFBPUlRfVkFSKGludCkgQ09MT1JTID0gMDsKKyNlbmRpZgorCisjZGVmaW5lIERBVEEocixnLGIpIHtyLGcsYiwgMCwwLDAsIDB9CisKKyNkZWZpbmUgVFlQRV9DQUxMT0ModHlwZSxlbHRzKSB0eXBlQ2FsbG9jKHR5cGUsICh1bnNpZ25lZCkoZWx0cykpCisKKyNkZWZpbmUgTUFYX1BBTEVUVEUJOAorCisjZGVmaW5lIE9rQ29sb3JIaShuKQkoKChuKSA8IENPTE9SUykgJiYgKChuKSA8IG1heF9jb2xvcnMpKQorI2RlZmluZSBJblBhbGV0dGUobikJKChuKSA+PSAwICYmIChuKSA8IE1BWF9QQUxFVFRFKQorCisvKgorICogR2l2ZW4gYSBSR0IgcmFuZ2Ugb2YgMC4uMTAwMCwgd2UnbGwgbm9ybWFsbHkgc2V0IHRoZSBpbmRpdmlkdWFsIHZhbHVlcworICogdG8gYWJvdXQgMi8zIG9mIHRoZSBtYXhpbXVtLCBsZWF2aW5nIGZ1bGwtcmFuZ2UgZm9yIGJvbGQvYnJpZ2h0IGNvbG9ycy4KKyAqLworI2RlZmluZSBSR0JfT04gIDY4MAorI2RlZmluZSBSR0JfT0ZGIDAKKy8qICpJTkRFTlQtT0ZGKiAqLworc3RhdGljIGNvbnN0IGNvbG9yX3QgY2dhX3BhbGV0dGVbXSA9Cit7CisgICAgLyogIFIgICAgICAgICAgICAgICBHICAgICAgICAgICAgICAgQiAqLworICAgIERBVEEoUkdCX09GRiwJUkdCX09GRiwJUkdCX09GRiksCS8qIENPTE9SX0JMQUNLICovCisgICAgREFUQShSR0JfT04sCVJHQl9PRkYsCVJHQl9PRkYpLAkvKiBDT0xPUl9SRUQgKi8KKyAgICBEQVRBKFJHQl9PRkYsCVJHQl9PTiwJCVJHQl9PRkYpLAkvKiBDT0xPUl9HUkVFTiAqLworICAgIERBVEEoUkdCX09OLAlSR0JfT04sCQlSR0JfT0ZGKSwJLyogQ09MT1JfWUVMTE9XICovCisgICAgREFUQShSR0JfT0ZGLAlSR0JfT0ZGLAlSR0JfT04pLAkvKiBDT0xPUl9CTFVFICovCisgICAgREFUQShSR0JfT04sCVJHQl9PRkYsCVJHQl9PTiksCS8qIENPTE9SX01BR0VOVEEgKi8KKyAgICBEQVRBKFJHQl9PRkYsCVJHQl9PTiwJCVJHQl9PTiksCS8qIENPTE9SX0NZQU4gKi8KKyAgICBEQVRBKFJHQl9PTiwJUkdCX09OLAkJUkdCX09OKSwJLyogQ09MT1JfV0hJVEUgKi8KK307CisKK3N0YXRpYyBjb25zdCBjb2xvcl90IGhsc19wYWxldHRlW10gPQoreworICAgIC8qICAJSCAgICAgICBMICAgICAgIFMgKi8KKyAgICBEQVRBKAkwLAkwLAkwKSwJCS8qIENPTE9SX0JMQUNLICovCisgICAgREFUQSgJMTIwLAk1MCwJMTAwKSwJCS8qIENPTE9SX1JFRCAqLworICAgIERBVEEoCTI0MCwJNTAsCTEwMCksCQkvKiBDT0xPUl9HUkVFTiAqLworICAgIERBVEEoCTE4MCwJNTAsCTEwMCksCQkvKiBDT0xPUl9ZRUxMT1cgKi8KKyAgICBEQVRBKAkzMzAsCTUwLAkxMDApLAkJLyogQ09MT1JfQkxVRSAqLworICAgIERBVEEoCTYwLAk1MCwJMTAwKSwJCS8qIENPTE9SX01BR0VOVEEgKi8KKyAgICBEQVRBKAkzMDAsCTUwLAkxMDApLAkJLyogQ09MT1JfQ1lBTiAqLworICAgIERBVEEoCTAsCTUwLAkxMDApLAkJLyogQ09MT1JfV0hJVEUgKi8KK307CisvKiAqSU5ERU5ULU9OKiAqLworCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKy8qCisgKiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gX25jX2RvX2NvbG9yKCksIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20KKyAqIHZpZGF0dHIgLSBzbyB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IFNQIG1heSBiZSBudWxsLgorICovCitzdGF0aWMgaW50CitkZWZhdWx0X2ZnKHZvaWQpCit7CisgICAgcmV0dXJuIChTUCAhPSAwKSA/IFNQLT5fZGVmYXVsdF9mZyA6IENPTE9SX1dISVRFOworfQorCitzdGF0aWMgaW50CitkZWZhdWx0X2JnKHZvaWQpCit7CisgICAgcmV0dXJuIFNQICE9IDAgPyBTUC0+X2RlZmF1bHRfYmcgOiBDT0xPUl9CTEFDSzsKK30KKyNlbHNlCisjZGVmaW5lIGRlZmF1bHRfZmcoKSBDT0xPUl9XSElURQorI2RlZmluZSBkZWZhdWx0X2JnKCkgQ09MT1JfQkxBQ0sKKyNlbmRpZgorCisvKgorICogU1ZyNCBjdXJzZXMgaXMga25vd24gdG8gaW50ZXJjaGFuZ2UgY29sb3IgY29kZXMgKDEsNCkgYW5kICgzLDYpLCBwb3NzaWJseQorICogdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIGEgcHJlLUFOU0kgc2NoZW1lLiAgVGhlIHNhbWUgc2NoZW1lIGlzCisgKiBhbHNvIHVzZWQgaW4gdGhlIEZyZWVCU0Qgc3lzY29ucy4KKyAqLworc3RhdGljIGludAordG9nZ2xlZF9jb2xvcnMoaW50IGMpCit7CisgICAgaWYgKGMgPCAxNikgeworCXN0YXRpYyBjb25zdCBpbnQgdGFibGVbXSA9CisJezAsIDQsIDIsIDYsIDEsIDUsIDMsIDcsCisJIDgsIDEyLCAxMCwgMTQsIDksIDEzLCAxMSwgMTV9OworCWMgPSB0YWJsZVtjXTsKKyAgICB9CisgICAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfYmFja2dyb3VuZF9jb2xvcihpbnQgYmcsIGludCAoKm91dGMpIChpbnQpKQoreworICAgIGlmIChzZXRfYV9iYWNrZ3JvdW5kKSB7CisJVFBVVFNfVFJBQ0UoInNldF9hX2JhY2tncm91bmQiKTsKKwl0cHV0cyhUUEFSTV8xKHNldF9hX2JhY2tncm91bmQsIGJnKSwgMSwgb3V0Yyk7CisgICAgfSBlbHNlIHsKKwlUUFVUU19UUkFDRSgic2V0X2JhY2tncm91bmQiKTsKKwl0cHV0cyhUUEFSTV8xKHNldF9iYWNrZ3JvdW5kLCB0b2dnbGVkX2NvbG9ycyhiZykpLCAxLCBvdXRjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfZm9yZWdyb3VuZF9jb2xvcihpbnQgZmcsIGludCAoKm91dGMpIChpbnQpKQoreworICAgIGlmIChzZXRfYV9mb3JlZ3JvdW5kKSB7CisJVFBVVFNfVFJBQ0UoInNldF9hX2ZvcmVncm91bmQiKTsKKwl0cHV0cyhUUEFSTV8xKHNldF9hX2ZvcmVncm91bmQsIGZnKSwgMSwgb3V0Yyk7CisgICAgfSBlbHNlIHsKKwlUUFVUU19UUkFDRSgic2V0X2ZvcmVncm91bmQiKTsKKwl0cHV0cyhUUEFSTV8xKHNldF9mb3JlZ3JvdW5kLCB0b2dnbGVkX2NvbG9ycyhmZykpLCAxLCBvdXRjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2NvbG9yX3RhYmxlKHZvaWQpCit7CisgICAgY29uc3QgY29sb3JfdCAqdHA7CisgICAgaW50IG47CisKKyAgICB0cCA9IChodWVfbGlnaHRuZXNzX3NhdHVyYXRpb24pID8gaGxzX3BhbGV0dGUgOiBjZ2FfcGFsZXR0ZTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgQ09MT1JTOyBuKyspIHsKKwlpZiAoSW5QYWxldHRlKG4pKSB7CisJICAgIFNQLT5fY29sb3JfdGFibGVbbl0gPSB0cFtuXTsKKwl9IGVsc2UgeworCSAgICBTUC0+X2NvbG9yX3RhYmxlW25dID0gdHBbbiAlIE1BWF9QQUxFVFRFXTsKKwkgICAgaWYgKGh1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbikgeworCQlTUC0+X2NvbG9yX3RhYmxlW25dLmdyZWVuID0gMTAwOworCSAgICB9IGVsc2UgeworCQlpZiAoU1AtPl9jb2xvcl90YWJsZVtuXS5yZWQpCisJCSAgICBTUC0+X2NvbG9yX3RhYmxlW25dLnJlZCA9IDEwMDA7CisJCWlmIChTUC0+X2NvbG9yX3RhYmxlW25dLmdyZWVuKQorCQkgICAgU1AtPl9jb2xvcl90YWJsZVtuXS5ncmVlbiA9IDEwMDA7CisJCWlmIChTUC0+X2NvbG9yX3RhYmxlW25dLmJsdWUpCisJCSAgICBTUC0+X2NvbG9yX3RhYmxlW25dLmJsdWUgPSAxMDAwOworCSAgICB9CisJfQorICAgIH0KK30KKworLyoKKyAqIFJlc2V0IHRoZSBjb2xvciBwYWlyLCBlLmcuLCB0byB3aGF0ZXZlciBjb2xvciBwYWlyIDAgaXMuCisgKi8KK3N0YXRpYyBib29sCityZXNldF9jb2xvcl9wYWlyKHZvaWQpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIGlmIChvcmlnX3BhaXIgIT0gMCkgeworCVRQVVRTX1RSQUNFKCJvcmlnX3BhaXIiKTsKKwlwdXRwKG9yaWdfcGFpcik7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJlc2V0IGNvbG9yIHBhaXJzIGFuZCBkZWZpbml0aW9ucy4gIEFjdHVhbGx5IHdlIGRvIGJvdGggbW9yZSB0byBhY2NvbW1vZGF0ZQorICogYmFkbHktd3JpdHRlbiB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgdGhhbiBmb3IgdGhlIHJlbGF0aXZlbHkgcmFyZSBjYXNlIHdoZXJlCisgKiBzb21lb25lIGhhcyBjaGFuZ2VkIHRoZSBjb2xvciBkZWZpbml0aW9ucy4KKyAqLworYm9vbAorX25jX3Jlc2V0X2NvbG9ycyh2b2lkKQoreworICAgIGludCByZXN1bHQgPSBGQUxTRTsKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfcmVzZXRfY29sb3JzKCkiKSkpOworICAgIGlmIChTUC0+X2NvbG9yX2RlZnMgPiAwKQorCVNQLT5fY29sb3JfZGVmcyA9IC0oU1AtPl9jb2xvcl9kZWZzKTsKKworICAgIGlmIChyZXNldF9jb2xvcl9wYWlyKCkpCisJcmVzdWx0ID0gVFJVRTsKKyAgICBpZiAob3JpZ19jb2xvcnMgIT0gMCkgeworCVRQVVRTX1RSQUNFKCJvcmlnX2NvbG9ycyIpOworCXB1dHAob3JpZ19jb2xvcnMpOworCXJlc3VsdCA9IFRSVUU7CisgICAgfQorICAgIHJldHVybkJvb2wocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorc3RhcnRfY29sb3Iodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoInN0YXJ0X2NvbG9yKCkiKSkpOworCisgICAgaWYgKFNQID09IDApIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfSBlbHNlIGlmIChTUC0+X2NvbG9yb24pIHsKKwlyZXN1bHQgPSBPSzsKKyAgICB9IGVsc2UgeworCisJaWYgKHJlc2V0X2NvbG9yX3BhaXIoKSAhPSBUUlVFKSB7CisJICAgIHNldF9mb3JlZ3JvdW5kX2NvbG9yKGRlZmF1bHRfZmcoKSwgX25jX291dGNoKTsKKwkgICAgc2V0X2JhY2tncm91bmRfY29sb3IoZGVmYXVsdF9iZygpLCBfbmNfb3V0Y2gpOworCX0KKworCWlmIChtYXhfcGFpcnMgPiAwICYmIG1heF9jb2xvcnMgPiAwKSB7CisJICAgIFNQLT5fcGFpcl9jb3VudCA9IG1heF9wYWlyczsKKwkgICAgU1AtPl9jb2xvcl9jb3VudCA9IG1heF9jb2xvcnM7CisjaWYgIVVTRV9SRUVOVFJBTlQKKwkgICAgQ09MT1JfUEFJUlMgPSBtYXhfcGFpcnM7CisJICAgIENPTE9SUyA9IG1heF9jb2xvcnM7CisjZW5kaWYKKworCSAgICBpZiAoKFNQLT5fY29sb3JfcGFpcnMgPSBUWVBFX0NBTExPQyhjb2xvcnBhaXJfdCwKKwkJCQkJCW1heF9wYWlycykpICE9IDApIHsKKwkJaWYgKChTUC0+X2NvbG9yX3RhYmxlID0gVFlQRV9DQUxMT0MoY29sb3JfdCwKKwkJCQkJCSAgICBtYXhfY29sb3JzKSkgIT0gMCkgeworCQkgICAgU1AtPl9jb2xvcl9wYWlyc1swXSA9IFBBSVJfT0YoZGVmYXVsdF9mZygpLCBkZWZhdWx0X2JnKCkpOworCQkgICAgaW5pdF9jb2xvcl90YWJsZSgpOworCisJCSAgICBUKCgic3RhcnRlZCBjb2xvcjogQ09MT1JTID0gJWQsIENPTE9SX1BBSVJTID0gJWQiLAorCQkgICAgICAgQ09MT1JTLCBDT0xPUl9QQUlSUykpOworCisJCSAgICBTUC0+X2NvbG9yb24gPSAxOworCQkgICAgcmVzdWx0ID0gT0s7CisJCX0gZWxzZSBpZiAoU1AtPl9jb2xvcl9wYWlycyAhPSAwKSB7CisJCSAgICBGcmVlQW5kTnVsbChTUC0+X2NvbG9yX3BhaXJzKTsKKwkJfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgcmVzdWx0ID0gT0s7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBEYW5pZWwgV2VhdmVyIDxkYW53QHpueXguY29tPiAqLworc3RhdGljIHZvaWQKK3JnYjJobHMoc2hvcnQgciwgc2hvcnQgZywgc2hvcnQgYiwgc2hvcnQgKmgsIHNob3J0ICpsLCBzaG9ydCAqcykKKy8qIGNvbnZlcnQgUkdCIHRvIEhMUyBzeXN0ZW0gKi8KK3sKKyAgICBzaG9ydCBtaW4sIG1heCwgdDsKKworICAgIGlmICgobWluID0gZyA8IHIgPyBnIDogcikgPiBiKQorCW1pbiA9IGI7CisgICAgaWYgKChtYXggPSBnID4gciA/IGcgOiByKSA8IGIpCisJbWF4ID0gYjsKKworICAgIC8qIGNhbGN1bGF0ZSBsaWdodG5lc3MgKi8KKyAgICAqbCA9IChtaW4gKyBtYXgpIC8gMjA7CisKKyAgICBpZiAobWluID09IG1heCkgewkJLyogYmxhY2ssIHdoaXRlIGFuZCBhbGwgc2hhZGVzIG9mIGdyYXkgKi8KKwkqaCA9IDA7CisJKnMgPSAwOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBjYWxjdWxhdGUgc2F0dXJhdGlvbiAqLworICAgIGlmICgqbCA8IDUwKQorCSpzID0gKChtYXggLSBtaW4pICogMTAwKSAvIChtYXggKyBtaW4pOworICAgIGVsc2UKKwkqcyA9ICgobWF4IC0gbWluKSAqIDEwMCkgLyAoMjAwMCAtIG1heCAtIG1pbik7CisKKyAgICAvKiBjYWxjdWxhdGUgaHVlICovCisgICAgaWYgKHIgPT0gbWF4KQorCXQgPSAxMjAgKyAoKGcgLSBiKSAqIDYwKSAvIChtYXggLSBtaW4pOworICAgIGVsc2UgaWYgKGcgPT0gbWF4KQorCXQgPSAyNDAgKyAoKGIgLSByKSAqIDYwKSAvIChtYXggLSBtaW4pOworICAgIGVsc2UKKwl0ID0gMzYwICsgKChyIC0gZykgKiA2MCkgLyAobWF4IC0gbWluKTsKKworICAgICpoID0gdCAlIDM2MDsKK30KKworLyoKKyAqIEV4dGVuc2lvbiAoMTk5Ny8xLzE4KSAtIEFsbG93IG5lZ2F0aXZlIGYvYiB2YWx1ZXMgdG8gc2V0IGRlZmF1bHQgY29sb3IKKyAqIHZhbHVlcy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQoraW5pdF9wYWlyKHNob3J0IHBhaXIsIHNob3J0IGYsIHNob3J0IGIpCit7CisgICAgY29sb3JwYWlyX3QgcmVzdWx0OworCisgICAgVCgoVF9DQUxMRUQoImluaXRfcGFpciglZCwlZCwlZCkiKSwgcGFpciwgZiwgYikpOworCisgICAgaWYgKChwYWlyIDwgMCkgfHwgKHBhaXIgPj0gQ09MT1JfUEFJUlMpIHx8IFNQID09IDAgfHwgIVNQLT5fY29sb3JvbikKKwlyZXR1cm5Db2RlKEVSUik7CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBpZiAoU1AtPl9kZWZhdWx0X2NvbG9yKSB7CisJaWYgKGYgPCAwKQorCSAgICBmID0gQ09MT1JfREVGQVVMVDsKKwlpZiAoYiA8IDApCisJICAgIGIgPSBDT0xPUl9ERUZBVUxUOworCWlmICghT2tDb2xvckhpKGYpICYmICFpc0RlZmF1bHRDb2xvcihmKSkKKwkgICAgcmV0dXJuQ29kZShFUlIpOworCWlmICghT2tDb2xvckhpKGIpICYmICFpc0RlZmF1bHRDb2xvcihiKSkKKwkgICAgcmV0dXJuQ29kZShFUlIpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworCWlmICgoZiA8IDApIHx8ICFPa0NvbG9ySGkoZikKKwkgICAgfHwgKGIgPCAwKSB8fCAhT2tDb2xvckhpKGIpCisJICAgIHx8IChwYWlyIDwgMSkpCisJICAgIHJldHVybkNvZGUoRVJSKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gYSBwYWlyJ3MgY29udGVudCBpcyBjaGFuZ2VkLCByZXBsYWNlIGl0cyBjb2xvcnMgKGlmIHBhaXIgd2FzCisgICAgICogaW5pdGlhbGl6ZWQgYmVmb3JlIGEgc2NyZWVuIHVwZGF0ZSBpcyBwZXJmb3JtZWQgcmVwbGFjaW5nIG9yaWdpbmFsCisgICAgICogcGFpciBjb2xvcnMgd2l0aCB0aGUgbmV3IG9uZXMpLgorICAgICAqLworICAgIHJlc3VsdCA9IFBBSVJfT0YoZiwgYik7CisgICAgaWYgKFNQLT5fY29sb3JfcGFpcnNbcGFpcl0gIT0gMAorCSYmIFNQLT5fY29sb3JfcGFpcnNbcGFpcl0gIT0gcmVzdWx0KSB7CisJaW50IHksIHg7CisKKwlmb3IgKHkgPSAwOyB5IDw9IGN1cnNjci0+X21heHk7IHkrKykgeworCSAgICBzdHJ1Y3QgbGRhdCAqcHRyID0gJihjdXJzY3ItPl9saW5lW3ldKTsKKwkgICAgYm9vbCBjaGFuZ2VkID0gRkFMU0U7CisJICAgIGZvciAoeCA9IDA7IHggPD0gY3Vyc2NyLT5fbWF4eDsgeCsrKSB7CisJCWlmIChHZXRQYWlyKHB0ci0+dGV4dFt4XSkgPT0gcGFpcikgeworCQkgICAgLyogU2V0IHRoZSBvbGQgY2VsbCB0byB6ZXJvIHRvIGVuc3VyZSBpdCB3aWxsIGJlCisJCSAgICAgICB1cGRhdGVkIG9uIHRoZSBuZXh0IGRvdXBkYXRlKCkgKi8KKwkJICAgIFNldENoYXIocHRyLT50ZXh0W3hdLCAwLCAwKTsKKwkJICAgIENIQU5HRURfQ0VMTChwdHIsIHgpOworCQkgICAgY2hhbmdlZCA9IFRSVUU7CisJCX0KKwkgICAgfQorCSAgICBpZiAoY2hhbmdlZCkKKwkJX25jX21ha2Vfb2xkaGFzaCh5KTsKKwl9CisgICAgfQorICAgIFNQLT5fY29sb3JfcGFpcnNbcGFpcl0gPSByZXN1bHQ7CisgICAgaWYgKEdFVF9TQ1JFRU5fUEFJUihTUCkgPT0gcGFpcikKKwlTRVRfU0NSRUVOX1BBSVIoU1AsIChjaHR5cGUpICh+MCkpOwkvKiBmb3JjZSBhdHRyaWJ1dGUgdXBkYXRlICovCisKKyAgICBpZiAoaW5pdGlhbGl6ZV9wYWlyICYmIEluUGFsZXR0ZShmKSAmJiBJblBhbGV0dGUoYikpIHsKKwljb25zdCBjb2xvcl90ICp0cCA9IGh1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbiA/IGhsc19wYWxldHRlIDogY2dhX3BhbGV0dGU7CisKKwlUUihUUkFDRV9BVFRSUywKKwkgICAoImluaXRpYWxpemluZyBwYWlyOiBwYWlyID0gJWQsIGZnPSglZCwlZCwlZCksIGJnPSglZCwlZCwlZCkiLAorCSAgICBwYWlyLAorCSAgICB0cFtmXS5yZWQsIHRwW2ZdLmdyZWVuLCB0cFtmXS5ibHVlLAorCSAgICB0cFtiXS5yZWQsIHRwW2JdLmdyZWVuLCB0cFtiXS5ibHVlKSk7CisKKwlUUFVUU19UUkFDRSgiaW5pdGlhbGl6ZV9wYWlyIik7CisJcHV0cChUUEFSTV83KGluaXRpYWxpemVfcGFpciwKKwkJICAgICBwYWlyLAorCQkgICAgIHRwW2ZdLnJlZCwgdHBbZl0uZ3JlZW4sIHRwW2ZdLmJsdWUsCisJCSAgICAgdHBbYl0ucmVkLCB0cFtiXS5ncmVlbiwgdHBbYl0uYmx1ZSkpOworICAgIH0KKworICAgIHJldHVybkNvZGUoT0spOworfQorCisjZGVmaW5lIG9rUkdCKG4pICgobikgPj0gMCAmJiAobikgPD0gMTAwMCkKKworTkNVUlNFU19FWFBPUlQoaW50KQoraW5pdF9jb2xvcihzaG9ydCBjb2xvciwgc2hvcnQgciwgc2hvcnQgZywgc2hvcnQgYikKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImluaXRfY29sb3IoJWQsJWQsJWQsJWQpIiksIGNvbG9yLCByLCBnLCBiKSk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZV9jb2xvciAhPSBOVUxMCisJJiYgU1AgIT0gMAorCSYmIFNQLT5fY29sb3JvbgorCSYmIChjb2xvciA+PSAwICYmIE9rQ29sb3JIaShjb2xvcikpCisJJiYgKG9rUkdCKHIpICYmIG9rUkdCKGcpICYmIG9rUkdCKGIpKSkgeworCisJU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uaW5pdCA9IDE7CisJU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uciA9IHI7CisJU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uZyA9IGc7CisJU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uYiA9IGI7CisKKwlpZiAoaHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uKSB7CisJICAgIHJnYjJobHMociwgZywgYiwKKwkJICAgICZTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5yZWQsCisJCSAgICAmU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uZ3JlZW4sCisJCSAgICAmU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uYmx1ZSk7CisJfSBlbHNlIHsKKwkgICAgU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0ucmVkID0gcjsKKwkgICAgU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uZ3JlZW4gPSBnOworCSAgICBTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5ibHVlID0gYjsKKwl9CisKKwlUUFVUU19UUkFDRSgiaW5pdGlhbGl6ZV9jb2xvciIpOworCXB1dHAoVFBBUk1fNChpbml0aWFsaXplX2NvbG9yLCBjb2xvciwgciwgZywgYikpOworCVNQLT5fY29sb3JfZGVmcyA9IG1heChjb2xvciArIDEsIFNQLT5fY29sb3JfZGVmcyk7CisJcmVzdWx0ID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2Nhbl9jaGFuZ2VfY29sb3Iodm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgiY2FuX2NoYW5nZV9jb2xvcigpIikpKTsKKyAgICByZXR1cm5Db2RlKChjYW5fY2hhbmdlICE9IDApID8gVFJVRSA6IEZBTFNFKTsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2hhc19jb2xvcnModm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgiaGFzX2NvbG9ycygpIikpKTsKKyAgICByZXR1cm5Db2RlKChWQUxJRF9OVU1FUklDKG1heF9jb2xvcnMpICYmIFZBTElEX05VTUVSSUMobWF4X3BhaXJzKQorCQkmJiAoKChzZXRfZm9yZWdyb3VuZCAhPSBOVUxMKQorCQkgICAgICYmIChzZXRfYmFja2dyb3VuZCAhPSBOVUxMKSkKKwkJICAgIHx8ICgoc2V0X2FfZm9yZWdyb3VuZCAhPSBOVUxMKQorCQkJJiYgKHNldF9hX2JhY2tncm91bmQgIT0gTlVMTCkpCisJCSAgICB8fCBzZXRfY29sb3JfcGFpcikpID8gVFJVRSA6IEZBTFNFKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorY29sb3JfY29udGVudChzaG9ydCBjb2xvciwgc2hvcnQgKnIsIHNob3J0ICpnLCBzaG9ydCAqYikKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgVCgoVF9DQUxMRUQoImNvbG9yX2NvbnRlbnQoJWQsJXAsJXAsJXApIiksIGNvbG9yLCByLCBnLCBiKSk7CisgICAgaWYgKGNvbG9yIDwgMCB8fCAhT2tDb2xvckhpKGNvbG9yKSB8fCBTUCA9PSAwIHx8ICFTUC0+X2NvbG9yb24pIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfSBlbHNlIHsKKwlOQ1VSU0VTX0NPTE9SX1QgY19yID0gU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0ucmVkOworCU5DVVJTRVNfQ09MT1JfVCBjX2cgPSBTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5ncmVlbjsKKwlOQ1VSU0VTX0NPTE9SX1QgY19iID0gU1AtPl9jb2xvcl90YWJsZVtjb2xvcl0uYmx1ZTsKKworCWlmIChyKQorCSAgICAqciA9IGNfcjsKKwlpZiAoZykKKwkgICAgKmcgPSBjX2c7CisJaWYgKGIpCisJICAgICpiID0gY19iOworCisJVFIoVFJBQ0VfQVRUUlMsICgiLi4uY29sb3JfY29udGVudCglZCwlZCwlZCwlZCkiLAorCQkJIGNvbG9yLCBjX3IsIGNfZywgY19iKSk7CisJcmVzdWx0ID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcGFpcl9jb250ZW50KHNob3J0IHBhaXIsIHNob3J0ICpmLCBzaG9ydCAqYikKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgVCgoVF9DQUxMRUQoInBhaXJfY29udGVudCglZCwlcCwlcCkiKSwgcGFpciwgZiwgYikpOworCisgICAgaWYgKChwYWlyIDwgMCkgfHwgKHBhaXIgPj0gQ09MT1JfUEFJUlMpIHx8IFNQID09IDAgfHwgIVNQLT5fY29sb3JvbikgeworCXJlc3VsdCA9IEVSUjsKKyAgICB9IGVsc2UgeworCU5DVVJTRVNfQ09MT1JfVCBmZyA9ICgoU1AtPl9jb2xvcl9wYWlyc1twYWlyXSA+PiBDX1NISUZUKSAmIENfTUFTSyk7CisJTkNVUlNFU19DT0xPUl9UIGJnID0gKFNQLT5fY29sb3JfcGFpcnNbcGFpcl0gJiBDX01BU0spOworCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwlpZiAoZmcgPT0gQ09MT1JfREVGQVVMVCkKKwkgICAgZmcgPSAtMTsKKwlpZiAoYmcgPT0gQ09MT1JfREVGQVVMVCkKKwkgICAgYmcgPSAtMTsKKyNlbmRpZgorCisJaWYgKGYpCisJICAgICpmID0gZmc7CisJaWYgKGIpCisJICAgICpiID0gYmc7CisKKwlUUihUUkFDRV9BVFRSUywgKCIuLi5wYWlyX2NvbnRlbnQoJWQsJWQsJWQpIiwgcGFpciwgZmcsIGJnKSk7CisJcmVzdWx0ID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19kb19jb2xvcihzaG9ydCBvbGRfcGFpciwgc2hvcnQgcGFpciwgYm9vbCByZXZlcnNlLCBpbnQgKCpvdXRjKSAoaW50KSkKK3sKKyAgICBOQ1VSU0VTX0NPTE9SX1QgZmcgPSBDT0xPUl9ERUZBVUxUOworICAgIE5DVVJTRVNfQ09MT1JfVCBiZyA9IENPTE9SX0RFRkFVTFQ7CisgICAgTkNVUlNFU19DT0xPUl9UIG9sZF9mZywgb2xkX2JnOworCisgICAgaWYgKHBhaXIgPCAwIHx8IHBhaXIgPj0gQ09MT1JfUEFJUlMpIHsKKwlyZXR1cm47CisgICAgfSBlbHNlIGlmIChwYWlyICE9IDApIHsKKwlpZiAoc2V0X2NvbG9yX3BhaXIpIHsKKwkgICAgVFBVVFNfVFJBQ0UoInNldF9jb2xvcl9wYWlyIik7CisJICAgIHRwdXRzKFRQQVJNXzEoc2V0X2NvbG9yX3BhaXIsIHBhaXIpLCAxLCBvdXRjKTsKKwkgICAgcmV0dXJuOworCX0gZWxzZSBpZiAoU1AgIT0gMCkgeworCSAgICBwYWlyX2NvbnRlbnQoKHNob3J0KSBwYWlyLCAmZmcsICZiZyk7CisJfQorICAgIH0KKworICAgIGlmIChvbGRfcGFpciA+PSAwCisJJiYgU1AgIT0gMAorCSYmIHBhaXJfY29udGVudChvbGRfcGFpciwgJm9sZF9mZywgJm9sZF9iZykgIT0gRVJSKSB7CisJaWYgKChpc0RlZmF1bHRDb2xvcihmZykgJiYgIWlzRGVmYXVsdENvbG9yKG9sZF9mZykpCisJICAgIHx8IChpc0RlZmF1bHRDb2xvcihiZykgJiYgIWlzRGVmYXVsdENvbG9yKG9sZF9iZykpKSB7CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwkgICAgLyoKKwkgICAgICogQSBtaW5vciBvcHRpbWl6YXRpb24gLSBidXQgZXh0ZW5zaW9uLiAgSWYgIkFYIiBpcyBzcGVjaWZpZWQgaW4KKwkgICAgICogdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLCB0cmVhdCBpdCBhcyBzY3JlZW4ncyBpbmRpY2F0b3Igb2YgRUNNQQorCSAgICAgKiBTR1IgMzkgYW5kIFNHUiA0OSwgYW5kIGFzc3VtZSB0aGUgdHdvIHNlcXVlbmNlcyBhcmUgaW5kZXBlbmRlbnQuCisJICAgICAqLworCSAgICBpZiAoU1AtPl9oYXNfc2dyXzM5XzQ5CisJCSYmIGlzRGVmYXVsdENvbG9yKG9sZF9iZykKKwkJJiYgIWlzRGVmYXVsdENvbG9yKG9sZF9mZykpIHsKKwkJdHB1dHMoIlwwMzNbMzltIiwgMSwgb3V0Yyk7CisJICAgIH0gZWxzZSBpZiAoU1AtPl9oYXNfc2dyXzM5XzQ5CisJCSAgICAgICAmJiBpc0RlZmF1bHRDb2xvcihvbGRfZmcpCisJCSAgICAgICAmJiAhaXNEZWZhdWx0Q29sb3Iob2xkX2JnKSkgeworCQl0cHV0cygiXDAzM1s0OW0iLCAxLCBvdXRjKTsKKwkgICAgfSBlbHNlCisjZW5kaWYKKwkJcmVzZXRfY29sb3JfcGFpcigpOworCX0KKyAgICB9IGVsc2UgeworCXJlc2V0X2NvbG9yX3BhaXIoKTsKKwlpZiAob2xkX3BhaXIgPCAwKQorCSAgICByZXR1cm47CisgICAgfQorCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBpZiAoaXNEZWZhdWx0Q29sb3IoZmcpKQorCWZnID0gZGVmYXVsdF9mZygpOworICAgIGlmIChpc0RlZmF1bHRDb2xvcihiZykpCisJYmcgPSBkZWZhdWx0X2JnKCk7CisjZW5kaWYKKworICAgIGlmIChyZXZlcnNlKSB7CisJTkNVUlNFU19DT0xPUl9UIHh4ID0gZmc7CisJZmcgPSBiZzsKKwliZyA9IHh4OworICAgIH0KKworICAgIFRSKFRSQUNFX0FUVFJTLCAoInNldHRpbmcgY29sb3JzOiBwYWlyID0gJWQsIGZnID0gJWQsIGJnID0gJWQiLCBwYWlyLAorCQkgICAgIGZnLCBiZykpOworCisgICAgaWYgKCFpc0RlZmF1bHRDb2xvcihmZykpIHsKKwlzZXRfZm9yZWdyb3VuZF9jb2xvcihmZywgb3V0Yyk7CisgICAgfQorICAgIGlmICghaXNEZWZhdWx0Q29sb3IoYmcpKSB7CisJc2V0X2JhY2tncm91bmRfY29sb3IoYmcsIG91dGMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfY29sb3JzZXQuYyBiL25jdXJzZXMvYmFzZS9saWJfY29sb3JzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTczYzUzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9jb2xvcnNldC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsICAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSwgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2NvbG9yc2V0LmMKKyoqCisqKglUaGUgcm91dGluZSB3Y29sb3Jfc2V0KCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jb2xvcnNldC5jLHYgMS4xMSAyMDA1LzAxLzI5IDIxOjQwOjUxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3djb2xvcl9zZXQoV0lORE9XICp3aW4sIHNob3J0IGNvbG9yX3BhaXJfbnVtYmVyLCB2b2lkICpvcHRzKQoreworICAgIFQoKFRfQ0FMTEVEKCJ3Y29sb3Jfc2V0KCVwLCVkKSIpLCB3aW4sIGNvbG9yX3BhaXJfbnVtYmVyKSk7CisgICAgaWYgKHdpbgorCSYmICFvcHRzCisJJiYgKGNvbG9yX3BhaXJfbnVtYmVyID49IDApCisJJiYgKGNvbG9yX3BhaXJfbnVtYmVyIDwgQ09MT1JfUEFJUlMpKSB7CisJVFIoVFJBQ0VfQVRUUlMsICgiLi4uIGN1cnJlbnQgJWxkIiwgKGxvbmcpIEdFVF9XSU5ET1dfUEFJUih3aW4pKSk7CisJU0VUX1dJTkRPV19QQUlSKHdpbiwgY29sb3JfcGFpcl9udW1iZXIpOworCWlmX0VYVF9DT0xPUlMod2luLT5fY29sb3IgPSBjb2xvcl9wYWlyX251bWJlcik7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9kZWxjaC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9kZWxjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzBmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2RlbGNoLmMKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfZGVsY2guYworKioKKyoqCVRoZSByb3V0aW5lIHdkZWxjaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2RlbGNoLmMsdiAxLjEyIDIwMDEvMTIvMTkgMDE6MDY6MDkgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2RlbGNoKFdJTkRPVyAqd2luKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndkZWxjaCglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luKSB7CisJTkNVUlNFU19DSF9UIGJsYW5rID0gd2luLT5fbmNfYmtnZDsKKwlzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVt3aW4tPl9jdXJ5XSk7CisJTkNVUlNFU19DSF9UICplbmQgPSAmKGxpbmUtPnRleHRbd2luLT5fbWF4eF0pOworCU5DVVJTRVNfQ0hfVCAqdGVtcDIgPSAmKGxpbmUtPnRleHRbd2luLT5fY3VyeCArIDFdKTsKKwlOQ1VSU0VTX0NIX1QgKnRlbXAxID0gdGVtcDIgLSAxOworCisJQ0hBTkdFRF9UT19FT0wobGluZSwgd2luLT5fY3VyeCwgd2luLT5fbWF4eCk7CisJd2hpbGUgKHRlbXAxIDwgZW5kKQorCSAgICAqdGVtcDErKyA9ICp0ZW1wMisrOworCisJKnRlbXAxID0gYmxhbms7CisKKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2RlbHdpbi5jIGIvbmN1cnNlcy9iYXNlL2xpYl9kZWx3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJjNDAzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9kZWx3aW4uYwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9kZWx3aW4uYworKioKKyoqCVRoZSByb3V0aW5lIGRlbHdpbigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2RlbHdpbi5jLHYgMS4xNyAyMDA4LzA2LzA3IDE0OjEwOjU2IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBib29sCitjYW5ub3RfZGVsZXRlKFdJTkRPVyAqd2luKQoreworICAgIFdJTkRPV0xJU1QgKnA7CisgICAgYm9vbCByZXN1bHQgPSBUUlVFOworCisgICAgZm9yIChlYWNoX3dpbmRvdyhwKSkgeworCWlmICgmKHAtPndpbikgPT0gd2luKSB7CisJICAgIHJlc3VsdCA9IEZBTFNFOworCX0gZWxzZSBpZiAoKHAtPndpbi5fZmxhZ3MgJiBfU1VCV0lOKSAhPSAwCisJCSAgICYmIHAtPndpbi5fcGFyZW50ID09IHdpbikgeworCSAgICByZXN1bHQgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2RlbHdpbihXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImRlbHdpbiglcCkiKSwgd2luKSk7CisKKyAgICBpZiAoX25jX3RyeV9nbG9iYWwoY3Vyc2VzKSA9PSAwKSB7CisJaWYgKHdpbiA9PSAwCisJICAgIHx8IGNhbm5vdF9kZWxldGUod2luKSkgeworCSAgICByZXN1bHQgPSBFUlI7CisJfSBlbHNlIHsKKworCSAgICBpZiAod2luLT5fZmxhZ3MgJiBfU1VCV0lOKQorCQl0b3VjaHdpbih3aW4tPl9wYXJlbnQpOworCSAgICBlbHNlIGlmIChjdXJzY3IgIT0gMCkKKwkJdG91Y2h3aW4oY3Vyc2NyKTsKKworCSAgICByZXN1bHQgPSBfbmNfZnJlZXdpbih3aW4pOworCX0KKwlfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2RmdF9mZ2JnLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2RmdF9mZ2JnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1M2MxNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfZGZ0X2ZnYmcuYwpAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZGZ0X2ZnYmcuYyx2IDEuMTggMjAwNS8xMS8yNiAyMDowMzozOCB0b20gRXhwICQiKQorCisvKgorICogTW9kaWZ5IHRoZSBiZWhhdmlvciBvZiBjb2xvci1wYWlyIDAgc28gdGhhdCB0aGUgbGlicmFyeSBkb2Vzbid0IGFzc3VtZSB0aGF0CisgKiBpdCBpcyB3aGl0ZSBvbiBibGFjay4gIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIFhTSSBjdXJzZXMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3VzZV9kZWZhdWx0X2NvbG9ycyh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJ1c2VfZGVmYXVsdF9jb2xvcnMoKSIpKSk7CisgICAgcmV0dXJuQ29kZShhc3N1bWVfZGVmYXVsdF9jb2xvcnMoLTEsIC0xKSk7Cit9CisKKy8qCisgKiBNb2RpZnkgdGhlIGJlaGF2aW9yIG9mIGNvbG9yLXBhaXIgMCBzbyB0aGF0IHRoZSBsaWJyYXJ5IGFzc3VtZXMgdGhhdCBpdAorICogaXMgc29tZXRoaW5nIHNwZWNpZmljLCBwb3NzaWJseSBub3Qgd2hpdGUgb24gYmxhY2suCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2Fzc3VtZV9kZWZhdWx0X2NvbG9ycyhpbnQgZmcsIGludCBiZykKK3sKKyAgICBUKChUX0NBTExFRCgiYXNzdW1lX2RlZmF1bHRfY29sb3JzKCVkLCVkKSIpLCBmZywgYmcpKTsKKworICAgIGlmICghb3JpZ19wYWlyICYmICFvcmlnX2NvbG9ycykKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBpZiAoaW5pdGlhbGl6ZV9wYWlyKQkvKiBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyAqLworCXJldHVybkNvZGUoRVJSKTsKKworICAgIFNQLT5fZGVmYXVsdF9jb2xvciA9IGlzRGVmYXVsdENvbG9yKGZnKSB8fCBpc0RlZmF1bHRDb2xvcihiZyk7CisgICAgU1AtPl9oYXNfc2dyXzM5XzQ5ID0gKHRpZ2V0ZmxhZygiQVgiKSA9PSBUUlVFKTsKKyAgICBTUC0+X2RlZmF1bHRfZmcgPSBpc0RlZmF1bHRDb2xvcihmZykgPyBDT0xPUl9ERUZBVUxUIDogKGZnICYgQ19NQVNLKTsKKyAgICBTUC0+X2RlZmF1bHRfYmcgPSBpc0RlZmF1bHRDb2xvcihiZykgPyBDT0xPUl9ERUZBVUxUIDogKGJnICYgQ19NQVNLKTsKKyAgICBpZiAoU1AtPl9jb2xvcl9wYWlycyAhPSAwKSB7CisJYm9vbCBzYXZlID0gU1AtPl9kZWZhdWx0X2NvbG9yOworCVNQLT5fZGVmYXVsdF9jb2xvciA9IFRSVUU7CisJaW5pdF9wYWlyKDAsIChzaG9ydCkgZmcsIChzaG9ydCkgYmcpOworCVNQLT5fZGVmYXVsdF9jb2xvciA9IHNhdmU7CisgICAgfQorICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9lY2hvLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2VjaG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ0NzEzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9lY2hvLmMKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgllY2hvLmMKKyAqCisgKglSb3V0aW5lczoKKyAqCQllY2hvKCkKKyAqCQlub2VjaG8oKQorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9lY2hvLmMsdiAxLjUgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitlY2hvKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoImVjaG8oKSIpKSk7CisgICAgU1AtPl9lY2hvID0gVFJVRTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbm9lY2hvKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoIm5vZWNobygpIikpKTsKKyAgICBTUC0+X2VjaG8gPSBGQUxTRTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfZW5kd2luLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2VuZHdpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjYyODcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2VuZHdpbi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2VuZHdpbi5jCisqKgorKioJVGhlIHJvdXRpbmUgZW5kd2luKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2VuZHdpbi5jLHYgMS4xOSAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2VuZHdpbih2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJlbmR3aW4oKSIpKSk7CisKKyAgICBpZiAoU1ApIHsKKwlTUC0+X2VuZHdpbiA9IFRSVUU7CisJU1AtPl9tb3VzZV93cmFwKFNQKTsKKwlfbmNfc2NyZWVuX3dyYXAoKTsKKwlfbmNfbXZjdXJfd3JhcCgpOwkvKiB3cmFwIHVwIGN1cnNvciBhZGRyZXNzaW5nICovCisJcmV0dXJuQ29kZShyZXNldF9zaGVsbF9tb2RlKCkpOworICAgIH0KKworICAgIHJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfZXJhc2UuYyBiL25jdXJzZXMvYmFzZS9saWJfZXJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY2ZThiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9lcmFzZS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9lcmFzZS5jCisqKgorKioJVGhlIHJvdXRpbmUgd2VyYXNlKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZXJhc2UuYyx2IDEuMTYgMjAwNS8xMC8zMCAwMDozNjozNiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3ZXJhc2UoV0lORE9XICp3aW4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgaW50IHk7CisgICAgTkNVUlNFU19DSF9UIGJsYW5rOworICAgIE5DVVJTRVNfQ0hfVCAqc3AsICplbmQsICpzdGFydDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3ZXJhc2UoJXApIiksIHdpbikpOworCisgICAgaWYgKHdpbikgeworCWJsYW5rID0gd2luLT5fbmNfYmtnZDsKKwlmb3IgKHkgPSAwOyB5IDw9IHdpbi0+X21heHk7IHkrKykgeworCSAgICBzdGFydCA9IHdpbi0+X2xpbmVbeV0udGV4dDsKKwkgICAgZW5kID0gJnN0YXJ0W3dpbi0+X21heHhdOworCisJICAgIC8qCisJICAgICAqIElmIHRoaXMgaXMgYSBkZXJpdmVkIHdpbmRvdywgd2UgaGF2ZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUKKwkgICAgICogYSBtdWx0aWNvbHVtbiBjaGFyYWN0ZXIgZXh0ZW5kcyBpbnRvIHRoZSB3aW5kb3cgdGhhdCB3ZSBhcmUKKwkgICAgICogZXJhc2luZy4KKwkgICAgICovCisJICAgIGlmX1dJREVDKHsKKwkJaWYgKGlzV2lkZWNFeHQoc3RhcnRbMF0pKSB7CisJCSAgICBpbnQgeCA9ICh3aW4tPl9wYXJlbnQgIT0gMCkgPyAod2luLT5fYmVneCkgOiAwOworCQkgICAgd2hpbGUgKHgtLSA+IDApIHsKKwkJCWlmIChpc1dpZGVjQmFzZShzdGFydFstMV0pKSB7CisJCQkgICAgLS1zdGFydDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCS0tc3RhcnQ7CisJCSAgICB9CisJCX0KKwkgICAgfSk7CisKKwkgICAgZm9yIChzcCA9IHN0YXJ0OyBzcCA8PSBlbmQ7IHNwKyspCisJCSpzcCA9IGJsYW5rOworCisJICAgIHdpbi0+X2xpbmVbeV0uZmlyc3RjaGFyID0gMDsKKwkgICAgd2luLT5fbGluZVt5XS5sYXN0Y2hhciA9IHdpbi0+X21heHg7CisJfQorCXdpbi0+X2N1cnggPSB3aW4tPl9jdXJ5ID0gMDsKKwl3aW4tPl9mbGFncyAmPSB+X1dSQVBQRUQ7CisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9mbGFzaC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjAyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2ZsYXNoLmMKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglmbGFzaC5jCisgKgorICoJVGhlIHJvdXRpbmUgZmxhc2goKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogYmVlcCwgZmxhc2ggKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9mbGFzaC5jLHYgMS42IDIwMDAvMTIvMTAgMDI6NDM6MjcgdG9tIEV4cCAkIikKKworLyoKKyAqCWZsYXNoKCkKKyAqCisgKglGbGFzaCB0aGUgY3VycmVudCB0ZXJtaW5hbCdzIHNjcmVlbiBpZiBwb3NzaWJsZS4gICBJZiBub3QsCisgKglzb3VuZCB0aGUgYXVkaWJsZSBiZWxsIGlmIG9uZSBleGlzdHMuCisgKgorICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2ZsYXNoKHZvaWQpCit7CisgICAgaW50IHJlcyA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJmbGFzaCgpIikpKTsKKworICAgIC8qIEZJWE1FOiBzaG91bGQgbWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5vdCBpbiBhbHRjaGFyIG1vZGUgKi8KKyAgICBpZiAoZmxhc2hfc2NyZWVuKSB7CisJVFBVVFNfVFJBQ0UoImZsYXNoX3NjcmVlbiIpOworCXJlcyA9IHB1dHAoZmxhc2hfc2NyZWVuKTsKKwlfbmNfZmx1c2goKTsKKyAgICB9IGVsc2UgaWYgKGJlbGwpIHsKKwlUUFVUU19UUkFDRSgiYmVsbCIpOworCXJlcyA9IHB1dHAoYmVsbCk7CisJX25jX2ZsdXNoKCk7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShyZXMpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9mcmVlYWxsLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2ZyZWVhbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQwMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9mcmVlYWxsLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworI2lmIEhBVkVfTkNfRlJFRUFMTAorCisjaWYgSEFWRV9MSUJEQk1BTExPQworZXh0ZXJuIGludCBtYWxsb2NfZXJyZmQ7CS8qIEZJWE1FICovCisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9mcmVlYWxsLmMsdiAxLjU0IDIwMDgvMDkvMjcgMTM6MDk6NTcgdG9tIEV4cCAkIikKKworLyoKKyAqIEZyZWUgYWxsIG5jdXJzZXMgZGF0YS4gIFRoaXMgaXMgdXNlZCBmb3IgdGVzdGluZyBvbmx5ICh0aGVyZSdzIG5vIHByYWN0aWNhbAorICogdXNlIGZvciBpdCBhcyBhbiBleHRlbnNpb24pLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVhbGwodm9pZCkKK3sKKyAgICBXSU5ET1dMSVNUICpwLCAqcTsKKyAgICBzdGF0aWMgdmFfbGlzdCBlbXB0eV92YTsKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfZnJlZWFsbCgpIikpKTsKKyNpZiBOT19MRUFLUworICAgIGlmIChTUCAhPSAwKSB7CisJaWYgKFNQLT5fb2xkbnVtX2xpc3QgIT0gMCkgeworCSAgICBGcmVlQW5kTnVsbChTUC0+X29sZG51bV9saXN0KTsKKwl9CisJaWYgKFNQLT5fcGFuZWxIb29rLmRlc3Ryb3kgIT0gMCkgeworCSAgICBTUC0+X3BhbmVsSG9vay5kZXN0cm95KFNQLT5fcGFuZWxIb29rLnN0ZHNjcl9wc2V1ZG9fcGFuZWwpOworCX0KKyAgICB9CisjZW5kaWYKKyAgICBpZiAoU1AgIT0gMCkgeworCV9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisJd2hpbGUgKF9uY193aW5kb3dzICE9IDApIHsKKwkgICAgYm9vbCBkZWxldGVkID0gRkFMU0U7CisKKwkgICAgLyogRGVsZXRlIG9ubHkgd2luZG93cyB0aGF0J3JlIG5vdCBhIHBhcmVudCAqLworCSAgICBmb3IgKGVhY2hfd2luZG93KHApKSB7CisJCWJvb2wgZm91bmQgPSBGQUxTRTsKKworCQlmb3IgKGVhY2hfd2luZG93KHEpKSB7CisJCSAgICBpZiAoKHAgIT0gcSkKKwkJCSYmIChxLT53aW4uX2ZsYWdzICYgX1NVQldJTikKKwkJCSYmICgmKHAtPndpbikgPT0gcS0+d2luLl9wYXJlbnQpKSB7CisJCQlmb3VuZCA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCisJCWlmICghZm91bmQpIHsKKwkJICAgIGlmIChkZWx3aW4oJihwLT53aW4pKSAhPSBFUlIpCisJCQlkZWxldGVkID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBEb24ndCBjb250aW51ZSB0byBsb29wIGlmIHRoZSBsaXN0IGlzIHRyYXNoZWQuCisJICAgICAqLworCSAgICBpZiAoIWRlbGV0ZWQpCisJCWJyZWFrOworCX0KKwlkZWxzY3JlZW4oU1ApOworCV9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgfQorICAgIGlmIChjdXJfdGVybSAhPSAwKQorCWRlbF9jdXJ0ZXJtKGN1cl90ZXJtKTsKKworICAgICh2b2lkKSBfbmNfcHJpbnRmX3N0cmluZygwLCBlbXB0eV92YSk7CisjaWZkZWYgVFJBQ0UKKyAgICAodm9pZCkgX25jX3RyYWNlX2J1ZigtMSwgMCk7CisjZW5kaWYKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIEZyZWVJZk5lZWRlZChfbmNfd2Fjcyk7CisjZW5kaWYKKyAgICBfbmNfbGVha3NfdGluZm8oKTsKKworI2lmIEhBVkVfTElCREJNQUxMT0MKKyAgICBtYWxsb2NfZHVtcChtYWxsb2NfZXJyZmQpOworI2VsaWYgSEFWRV9MSUJETUFMTE9DCisjZWxpZiBIQVZFX0xJQk1QQVRST0wKKyAgICBfX21wX3N1bW1hcnkoKTsKKyNlbGlmIEhBVkVfUFVSSUZZCisgICAgcHVyaWZ5X2FsbF9pbnVzZSgpOworI2VuZGlmCisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX2FuZF9leGl0KGludCBjb2RlKQoreworICAgIGNoYXIgKmxhc3Rfc2V0YnVmID0gKFNQICE9IDApID8gU1AtPl9zZXRidWYgOiAwOworCisgICAgX25jX2ZyZWVhbGwoKTsKKyNpZmRlZiBUUkFDRQorICAgIHRyYWNlKDApOwkJCS8qIGNsb3NlIHRyYWNlIGZpbGUsIGZyZWVpbmcgaXRzIHNldGJ1ZiAqLworICAgIHsKKwlzdGF0aWMgdmFfbGlzdCBmYWtlOworCWZyZWUoX25jX3ZhcmFyZ3MoIj8iLCBmYWtlKSk7CisgICAgfQorI2VuZGlmCisgICAgZmNsb3NlKHN0ZG91dCk7CisgICAgRnJlZUlmTmVlZGVkKGxhc3Rfc2V0YnVmKTsKKyAgICBleGl0KGNvZGUpOworfQorCisjZWxzZQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlYWxsKHZvaWQpCit7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfZnJlZV9hbmRfZXhpdChpbnQgY29kZSkKK3sKKyAgICBpZiAoU1ApCisJZGVsc2NyZWVuKFNQKTsKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkKKwlkZWxfY3VydGVybShjdXJfdGVybSk7CisgICAgZXhpdChjb2RlKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9nZXRjaC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9nZXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODEyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2dldGNoLmMKQEAgLTAsMCArMSw2NjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9nZXRjaC5jCisqKgorKioJVGhlIHJvdXRpbmUgZ2V0Y2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9nZXRjaC5jLHYgMS45OSAyMDA4LzA5LzIwIDE5OjQ2OjEzIHRvbSBFeHAgJCIpCisKKyNpbmNsdWRlIDxmaWZvX2RlZnMuaD4KKworI2lmIFVTRV9SRUVOVFJBTlQKKyNkZWZpbmUgR2V0RXNjZGVsYXkoc3ApIChzcCktPl9FU0NERUxBWQorTkNVUlNFU19FWFBPUlQoaW50KQorTkNVUlNFU19QVUJMSUNfVkFSKEVTQ0RFTEFZKSAodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgPyBHZXRFc2NkZWxheShTUCkgOiAxMDAwOworfQorI2Vsc2UKKyNkZWZpbmUgR2V0RXNjZGVsYXkoc3ApIEVTQ0RFTEFZCitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KQorRVNDREVMQVkgPSAxMDAwOwkJLyogbWF4IGludGVydmFsIGJldHcuIGNoYXJzIGluIGZ1bmtleXMsIGluIG1pbGxpc2VjcyAqLworI2VuZGlmCisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2VzY2RlbGF5KGludCB2YWx1ZSkKK3sKKyAgICBpbnQgY29kZSA9IE9LOworI2lmIFVTRV9SRUVOVFJBTlQKKyAgICBpZiAoU1ApIHsKKwlTUC0+X0VTQ0RFTEFZID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKwljb2RlID0gRVJSOworICAgIH0KKyNlbHNlCisgICAgRVNDREVMQVkgPSB2YWx1ZTsKKyNlbmRpZgorICAgIHJldHVybiBjb2RlOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK19uY191c2VfbWV0YShXSU5ET1cgKndpbikKK3sKKyAgICBTQ1JFRU4gKnNwID0gX25jX3NjcmVlbl9vZih3aW4pOworICAgIHJldHVybiAoc3AgPyBzcC0+X3VzZV9tZXRhIDogMCk7Cit9CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyNkZWZpbmUgVFdBSVRfTUFTSyA3CisjZWxzZQorI2RlZmluZSBUV0FJVF9NQVNLIDMKKyNlbmRpZgorCisvKgorICogQ2hlY2sgZm9yIG1vdXNlIGFjdGl2aXR5LCByZXR1cm5pbmcgbm9uemVybyBpZiB3ZSBmaW5kIGFueS4KKyAqLworc3RhdGljIGludAorY2hlY2tfbW91c2VfYWN0aXZpdHkoU0NSRUVOICpzcCwgaW50IGRlbGF5IEVWRU5UTElTVF8ybmQoX25jX2V2ZW50bGlzdCAqIGV2bCkpCit7CisgICAgaW50IHJjOworCisjaWYgVVNFX1NZU01PVVNFCisgICAgaWYgKChzcC0+X21vdXNlX3R5cGUgPT0gTV9TWVNNT1VTRSkKKwkmJiAoc3AtPl9zeXNtb3VzZV9oZWFkIDwgc3AtPl9zeXNtb3VzZV90YWlsKSkgeworCXJldHVybiAyOworICAgIH0KKyNlbmRpZgorICAgIHJjID0gX25jX3RpbWVkX3dhaXQoc3AsIFRXQUlUX01BU0ssIGRlbGF5LCAoaW50ICopIDAgRVZFTlRMSVNUXzJuZChldmwpKTsKKyNpZiBVU0VfU1lTTU9VU0UKKyAgICBpZiAoKHNwLT5fbW91c2VfdHlwZSA9PSBNX1NZU01PVVNFKQorCSYmIChzcC0+X3N5c21vdXNlX2hlYWQgPCBzcC0+X3N5c21vdXNlX3RhaWwpCisJJiYgKHJjID09IDApCisJJiYgKGVycm5vID09IEVJTlRSKSkgeworCXJjIHw9IDI7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50CitmaWZvX3BlZWsoU0NSRUVOICpzcCkKK3sKKyAgICBpbnQgY2ggPSBzcC0+X2ZpZm9bcGVla107CisgICAgVFIoVFJBQ0VfSUVWRU5ULCAoInBlZWtpbmcgYXQgJWQiLCBwZWVrKSk7CisKKyAgICBwX2luYygpOworICAgIHJldHVybiBjaDsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorZmlmb19wdWxsKFNDUkVFTiAqc3ApCit7CisgICAgaW50IGNoOworICAgIGNoID0gc3AtPl9maWZvW2hlYWRdOworICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJwdWxsaW5nICVzIGZyb20gJWQiLCBfbmNfdHJhY2VjaGFyKHNwLCBjaCksIGhlYWQpKTsKKworICAgIGlmIChwZWVrID09IGhlYWQpIHsKKwloX2luYygpOworCXBlZWsgPSBoZWFkOworICAgIH0gZWxzZQorCWhfaW5jKCk7CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX0lFVkVOVCkpIHsKKwlfbmNfZmlmb19kdW1wKHNwKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBjaDsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorZmlmb19wdXNoKFNDUkVFTiAqc3AgRVZFTlRMSVNUXzJuZChfbmNfZXZlbnRsaXN0ICogZXZsKSkKK3sKKyAgICBpbnQgbjsKKyAgICBpbnQgY2ggPSAwOworICAgIGludCBtYXNrID0gMDsKKworICAgICh2b2lkKSBtYXNrOworICAgIGlmICh0YWlsID09IC0xKQorCXJldHVybiBFUlI7CisKKyNpZmRlZiBISURFX0VJTlRSCisgIGFnYWluOgorICAgIGVycm5vID0gMDsKKyNlbmRpZgorCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKGV2bAorI2lmIFVTRV9HUE1fU1VQUE9SVCB8fCBVU0VfRU1YX01PVVNFIHx8IFVTRV9TWVNNT1VTRQorCXx8IChzcC0+X21vdXNlX2ZkID49IDApCisjZW5kaWYKKwkpIHsKKwltYXNrID0gY2hlY2tfbW91c2VfYWN0aXZpdHkoc3AsIC0xIEVWRU5UTElTVF8ybmQoZXZsKSk7CisgICAgfSBlbHNlCisJbWFzayA9IDA7CisKKyAgICBpZiAobWFzayAmIDQpIHsKKwlUKCgiZmlmb19wdXNoOiB1bmdldGNoIEtFWV9FVkVOVCIpKTsKKwlfbmNfdW5nZXRjaChzcCwgS0VZX0VWRU5UKTsKKwlyZXR1cm4gS0VZX0VWRU5UOworICAgIH0KKyNlbGlmIFVTRV9HUE1fU1VQUE9SVCB8fCBVU0VfRU1YX01PVVNFIHx8IFVTRV9TWVNNT1VTRQorICAgIGlmIChzcC0+X21vdXNlX2ZkID49IDApIHsKKwltYXNrID0gY2hlY2tfbW91c2VfYWN0aXZpdHkoc3AsIC0xIEVWRU5UTElTVF8ybmQoZXZsKSk7CisgICAgfQorI2VuZGlmCisKKyNpZiBVU0VfR1BNX1NVUFBPUlQgfHwgVVNFX0VNWF9NT1VTRQorICAgIGlmICgoc3AtPl9tb3VzZV9mZCA+PSAwKSAmJiAobWFzayAmIDIpKSB7CisJc3AtPl9tb3VzZV9ldmVudChzcCk7CisJY2ggPSBLRVlfTU9VU0U7CisJbiA9IDE7CisgICAgfSBlbHNlCisjZW5kaWYKKyNpZiBVU0VfU1lTTU9VU0UKKwlpZiAoKHNwLT5fbW91c2VfdHlwZSA9PSBNX1NZU01PVVNFKQorCSAgICAmJiAoc3AtPl9zeXNtb3VzZV9oZWFkIDwgc3AtPl9zeXNtb3VzZV90YWlsKSkgeworCXNwLT5fbW91c2VfZXZlbnQoc3ApOworCWNoID0gS0VZX01PVVNFOworCW4gPSAxOworICAgIH0gZWxzZSBpZiAoKHNwLT5fbW91c2VfdHlwZSA9PSBNX1NZU01PVVNFKQorCSAgICAgICAmJiAobWFzayA8PSAwKSAmJiBlcnJubyA9PSBFSU5UUikgeworCXNwLT5fbW91c2VfZXZlbnQoc3ApOworCWNoID0gS0VZX01PVVNFOworCW4gPSAxOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgewkJCQkvKiBDYW4gYmxvY2suLi4gKi8KKwl1bnNpZ25lZCBjaGFyIGMyID0gMDsKKwluID0gcmVhZChzcC0+X2lmZCwgJmMyLCAxKTsKKwljaCA9IGMyOworICAgIH0KKworI2lmZGVmIEhJREVfRUlOVFIKKyAgICAvKgorICAgICAqIFVuZGVyIFN5c3RlbSBWIGN1cnNlcyB3aXRoIG5vbi1yZXN0YXJ0aW5nIHNpZ25hbHMsIGdldGNoKCkgcmV0dXJucworICAgICAqIHdpdGggdmFsdWUgRVJSIHdoZW4gYSBoYW5kbGVkIHNpZ25hbCBrZWVwcyBpdCBmcm9tIGNvbXBsZXRpbmcuCisgICAgICogSWYgc2lnbmFscyByZXN0YXJ0IHN5c3RlbSBjYWxscywgT1RPSCwgdGhlIHNpZ25hbCBpcyBpbnZpc2libGUKKyAgICAgKiBleGNlcHQgdG8gaXRzIGhhbmRsZXIuCisgICAgICoKKyAgICAgKiBXZSBkb24ndCB3YW50IHRoaXMgZGlmZmVyZW5jZSB0byBzaG93LiAgVGhpcyBwaWVjZSBvZiBjb2RlCisgICAgICogdHJpZXMgdG8gbWFrZSBpdCBsb29rIGxpa2Ugd2UgYWx3YXlzIGhhdmUgcmVzdGFydGluZyBzaWduYWxzLgorICAgICAqLworICAgIGlmIChuIDw9IDAgJiYgZXJybm8gPT0gRUlOVFIpCisJZ290byBhZ2FpbjsKKyNlbmRpZgorCisgICAgaWYgKChuID09IC0xKSB8fCAobiA9PSAwKSkgeworCVRSKFRSQUNFX0lFVkVOVCwgKCJyZWFkKCVkLCZjaCwxKT0lZCwgZXJybm89JWQiLCBzcC0+X2lmZCwgbiwgZXJybm8pKTsKKwljaCA9IEVSUjsKKyAgICB9CisgICAgVFIoVFJBQ0VfSUVWRU5ULCAoInJlYWQgJWQgY2hhcmFjdGVycyIsIG4pKTsKKworICAgIHNwLT5fZmlmb1t0YWlsXSA9IGNoOworICAgIHNwLT5fZmlmb2hvbGQgPSAwOworICAgIGlmIChoZWFkID09IC0xKQorCWhlYWQgPSBwZWVrID0gdGFpbDsKKyAgICB0X2luYygpOworICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJwdXNoZWQgJXMgYXQgJWQiLCBfbmNfdHJhY2VjaGFyKHNwLCBjaCksIHRhaWwpKTsKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX0lFVkVOVCkpIHsKKwlfbmNfZmlmb19kdW1wKHNwKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBjaDsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK2ZpZm9fY2xlYXIoU0NSRUVOICpzcCkKK3sKKyAgICBtZW1zZXQoc3AtPl9maWZvLCAwLCBzaXplb2Yoc3AtPl9maWZvKSk7CisgICAgaGVhZCA9IC0xOworICAgIHRhaWwgPSBwZWVrID0gMDsKK30KKworc3RhdGljIGludCBrZ2V0Y2goU0NSRUVOICpFVkVOVExJU1RfMm5kKF9uY19ldmVudGxpc3QgKiBldmwpKTsKKworc3RhdGljIHZvaWQKK3JlY3VyX3dyZWZyZXNoKFdJTkRPVyAqd2luKQoreworI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIFNDUkVFTiAqc3AgPSBfbmNfc2NyZWVuX29mKHdpbik7CisgICAgaWYgKF9uY191c2VfcHRocmVhZHMgJiYgc3AgIT0gU1ApIHsKKwlTQ1JFRU4gKnNhdmVfU1A7CisKKwkvKiB0ZW1wb3JhcmlseSBzd2l0Y2ggdG8gdGhlIHdpbmRvdydzIHNjcmVlbiB0byBjaGVjay9yZWZyZXNoICovCisJX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisJc2F2ZV9TUCA9IFNQOworCV9uY19zZXRfc2NyZWVuKHNwKTsKKwlyZWN1cl93cmVmcmVzaCh3aW4pOworCV9uY19zZXRfc2NyZWVuKHNhdmVfU1ApOworCV9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgfSBlbHNlCisjZW5kaWYKKwlpZiAoKGlzX3dpbnRvdWNoZWQod2luKSB8fCAod2luLT5fZmxhZ3MgJiBfSEFTTU9WRUQpKQorCSAgICAmJiAhKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSkgeworCXdyZWZyZXNoKHdpbik7CisgICAgfQorfQorCitzdGF0aWMgaW50CityZWN1cl93Z2V0bnN0cihXSU5ET1cgKndpbiwgY2hhciAqYnVmKQoreworICAgIFNDUkVFTiAqc3AgPSBfbmNfc2NyZWVuX29mKHdpbik7CisgICAgaW50IHJjOworCisgICAgaWYgKHNwICE9IDApIHsKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKwlpZiAoX25jX3VzZV9wdGhyZWFkcyAmJiBzcCAhPSBTUCkgeworCSAgICBTQ1JFRU4gKnNhdmVfU1A7CisKKwkgICAgLyogdGVtcG9yYXJpbHkgc3dpdGNoIHRvIHRoZSB3aW5kb3cncyBzY3JlZW4gdG8gZ2V0IGNvb2tlZCBpbnB1dCAqLworCSAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKwkgICAgc2F2ZV9TUCA9IFNQOworCSAgICBfbmNfc2V0X3NjcmVlbihzcCk7CisJICAgIHJjID0gcmVjdXJfd2dldG5zdHIod2luLCBidWYpOworCSAgICBfbmNfc2V0X3NjcmVlbihzYXZlX1NQKTsKKwkgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkgICAgc3AtPl9jYWxsZWRfd2dldGNoID0gVFJVRTsKKwkgICAgcmMgPSB3Z2V0bnN0cih3aW4sIGJ1ZiwgTUFYQ09MVU1OUyk7CisJICAgIHNwLT5fY2FsbGVkX3dnZXRjaCA9IEZBTFNFOworCX0KKyAgICB9IGVsc2UgeworCXJjID0gRVJSOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY193Z2V0Y2goV0lORE9XICp3aW4sCisJICAgdW5zaWduZWQgbG9uZyAqcmVzdWx0LAorCSAgIGludCB1c2VfbWV0YQorCSAgIEVWRU5UTElTVF8ybmQoX25jX2V2ZW50bGlzdCAqIGV2bCkpCit7CisgICAgU0NSRUVOICpzcDsKKyAgICBpbnQgY2g7CisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgbG9uZyBldmVudF9kZWxheSA9IC0xOworI2VuZGlmCisKKyAgICBUKChUX0NBTExFRCgiX25jX3dnZXRjaCglcCkiKSwgd2luKSk7CisKKyAgICAqcmVzdWx0ID0gMDsKKworICAgIHNwID0gX25jX3NjcmVlbl9vZih3aW4pOworICAgIGlmICh3aW4gPT0gMCB8fCBzcCA9PSAwKSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0KKworICAgIGlmIChjb29rZWRfa2V5X2luX2ZpZm8oKSkgeworCXJlY3VyX3dyZWZyZXNoKHdpbik7CisJKnJlc3VsdCA9IGZpZm9fcHVsbChzcCk7CisJcmV0dXJuQ29kZSgqcmVzdWx0ID49IEtFWV9NSU4gPyBLRVlfQ09ERV9ZRVMgOiBPSyk7CisgICAgfQorI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmIChldmwgJiYgKGV2bC0+Y291bnQgPT0gMCkpCisJZXZsID0gTlVMTDsKKyAgICBldmVudF9kZWxheSA9IF9uY19ldmVudGxpc3RfdGltZW91dChldmwpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEhhbmRsZSBjb29rZWQgbW9kZS4gIEdyYWIgYSBzdHJpbmcgZnJvbSB0aGUgc2NyZWVuLAorICAgICAqIHN0dWZmIGl0cyBjb250ZW50cyBpbiB0aGUgRklGTyBxdWV1ZSwgYW5kIHBvcCBvZmYKKyAgICAgKiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHJldHVybiBpdC4KKyAgICAgKi8KKyAgICBpZiAoaGVhZCA9PSAtMSAmJgorCSFzcC0+X25vdHR5ICYmCisJIXNwLT5fcmF3ICYmCisJIXNwLT5fY2JyZWFrICYmCisJIXNwLT5fY2FsbGVkX3dnZXRjaCkgeworCWNoYXIgYnVmW01BWENPTFVNTlNdLCAqYnVmcDsKKwlpbnQgcmM7CisKKwlUUihUUkFDRV9JRVZFTlQsICgiZmlsbGluZyBxdWV1ZSBpbiBjb29rZWQgbW9kZSIpKTsKKworCXJjID0gcmVjdXJfd2dldG5zdHIod2luLCBidWYpOworCisJLyogdW5nZXRjaCBpbiByZXZlcnNlIG9yZGVyICovCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJaWYgKHJjICE9IEtFWV9FVkVOVCkKKyNlbmRpZgorCSAgICBfbmNfdW5nZXRjaChzcCwgJ1xuJyk7CisJZm9yIChidWZwID0gYnVmICsgc3RybGVuKGJ1Zik7IGJ1ZnAgPiBidWY7IGJ1ZnAtLSkKKwkgICAgX25jX3VuZ2V0Y2goc3AsIGJ1ZnBbLTFdKTsKKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworCS8qIFJldHVybiBpdCBmaXJzdCAqLworCWlmIChyYyA9PSBLRVlfRVZFTlQpIHsKKwkgICAgKnJlc3VsdCA9IHJjOworCX0gZWxzZQorI2VuZGlmCisJICAgICpyZXN1bHQgPSBmaWZvX3B1bGwoc3ApOworCXJldHVybkNvZGUoKnJlc3VsdCA+PSBLRVlfTUlOID8gS0VZX0NPREVfWUVTIDogT0spOworICAgIH0KKworICAgIGlmICh3aW4tPl91c2Vfa2V5cGFkICE9IHNwLT5fa2V5cGFkX29uKQorCV9uY19rZXlwYWQoc3AsIHdpbi0+X3VzZV9rZXlwYWQpOworCisgICAgcmVjdXJfd3JlZnJlc2god2luKTsKKworICAgIGlmICh3aW4tPl9ub3RpbWVvdXQgfHwgKHdpbi0+X2RlbGF5ID49IDApIHx8IChzcC0+X2NicmVhayA+IDEpKSB7CisJaWYgKGhlYWQgPT0gLTEpIHsJLyogZmlmbyBpcyBlbXB0eSAqLworCSAgICBpbnQgZGVsYXk7CisJICAgIGludCByYzsKKworCSAgICBUUihUUkFDRV9JRVZFTlQsICgidGltZWQgZGVsYXkgaW4gd2dldGNoKCkiKSk7CisJICAgIGlmIChzcC0+X2NicmVhayA+IDEpCisJCWRlbGF5ID0gKHNwLT5fY2JyZWFrIC0gMSkgKiAxMDA7CisJICAgIGVsc2UKKwkJZGVsYXkgPSB3aW4tPl9kZWxheTsKKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworCSAgICBpZiAoZXZlbnRfZGVsYXkgPj0gMCAmJiBkZWxheSA+IGV2ZW50X2RlbGF5KQorCQlkZWxheSA9IGV2ZW50X2RlbGF5OworI2VuZGlmCisKKwkgICAgVFIoVFJBQ0VfSUVWRU5ULCAoImRlbGF5IGlzICVkIG1pbGxpc2Vjb25kcyIsIGRlbGF5KSk7CisKKwkgICAgcmMgPSBjaGVja19tb3VzZV9hY3Rpdml0eShzcCwgZGVsYXkgRVZFTlRMSVNUXzJuZChldmwpKTsKKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworCSAgICBpZiAocmMgJiA0KSB7CisJCSpyZXN1bHQgPSBLRVlfRVZFTlQ7CisJCXJldHVybkNvZGUoS0VZX0NPREVfWUVTKTsKKwkgICAgfQorI2VuZGlmCisJICAgIGlmICghcmMpIHsKKwkJcmV0dXJuQ29kZShFUlIpOworCSAgICB9CisJfQorCS8qIGVsc2UgZ28gb24gdG8gcmVhZCBkYXRhIGF2YWlsYWJsZSAqLworICAgIH0KKworICAgIGlmICh3aW4tPl91c2Vfa2V5cGFkKSB7CisJLyoKKwkgKiBUaGlzIGlzIHRyaWNreS4gIFdlIG9ubHkgd2FudCB0byBnZXQgc3BlY2lhbC1rZXkKKwkgKiBldmVudHMgb25lIGF0IGEgdGltZS4gIEJ1dCB3ZSB3YW50IHRvIGFjY3VtdWxhdGUKKwkgKiBtb3VzZSBldmVudHMgdW50aWwgZWl0aGVyIChhKSB0aGUgbW91c2UgbG9naWMgdGVsbHMKKwkgKiB1cyBpdCdzIHBpY2tlZCB1cCBhIGNvbXBsZXRlIGdlc3R1cmUsIG9yIChiKQorCSAqIHRoZXJlJ3MgYSBkZXRlY3RhYmxlIHRpbWUgbGFwc2UgYWZ0ZXIgb25lLgorCSAqCisJICogTm90ZTogaWYgdGhlIG1vdXNlIGNvZGUgc3RhcnRzIGZhaWxpbmcgdG8gY29tcG9zZQorCSAqIHByZXNzL3JlbGVhc2UgZXZlbnRzIGludG8gY2xpY2tzLCB5b3Ugc2hvdWxkIHByb2JhYmx5CisJICogaW5jcmVhc2UgdGhlIHdhaXQgd2l0aCBtb3VzZWludGVydmFsKCkuCisJICovCisJaW50IHJ1bmNvdW50ID0gMDsKKwlpbnQgcmM7CisKKwlkbyB7CisJICAgIGNoID0ga2dldGNoKHNwIEVWRU5UTElTVF8ybmQoZXZsKSk7CisJICAgIGlmIChjaCA9PSBLRVlfTU9VU0UpIHsKKwkJKytydW5jb3VudDsKKwkJaWYgKHNwLT5fbW91c2VfaW5saW5lKHNwKSkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGlmIChzcC0+X21heGNsaWNrIDwgMCkKKwkJYnJlYWs7CisJfSB3aGlsZQorCSAgICAoY2ggPT0gS0VZX01PVVNFCisJICAgICAmJiAoKChyYyA9IGNoZWNrX21vdXNlX2FjdGl2aXR5KHNwLCBzcC0+X21heGNsaWNrCisJCQkJCSAgICAgRVZFTlRMSVNUXzJuZChldmwpKSkgIT0gMAorCQkgICYmICEocmMgJiA0KSkKKwkJIHx8ICFzcC0+X21vdXNlX3BhcnNlKHNwLCBydW5jb3VudCkpKTsKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKwlpZiAoKHJjICYgNCkgJiYgIWNoID09IEtFWV9FVkVOVCkgeworCSAgICBfbmNfdW5nZXRjaChzcCwgY2gpOworCSAgICBjaCA9IEtFWV9FVkVOVDsKKwl9CisjZW5kaWYKKwlpZiAocnVuY291bnQgPiAwICYmIGNoICE9IEtFWV9NT1VTRSkgeworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworCSAgICAvKiBtb3VzZSBldmVudCBzZXF1ZW5jZSBlbmRlZCBieSBhbiBldmVudCwgcmVwb3J0IGV2ZW50ICovCisJICAgIGlmIChjaCA9PSBLRVlfRVZFTlQpIHsKKwkJX25jX3VuZ2V0Y2goc3AsIEtFWV9NT1VTRSk7CS8qIEZJWE1FIFRoaXMgaW50ZXJydXB0cyBhIGdlc3R1cmUuLi4gKi8KKwkgICAgfSBlbHNlCisjZW5kaWYKKwkgICAgeworCQkvKiBtb3VzZSBldmVudCBzZXF1ZW5jZSBlbmRlZCBieSBrZXlzdHJva2UsIHN0b3JlIGtleXN0cm9rZSAqLworCQlfbmNfdW5nZXRjaChzcCwgY2gpOworCQljaCA9IEtFWV9NT1VTRTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWlmIChoZWFkID09IC0xKQorCSAgICBmaWZvX3B1c2goc3AgRVZFTlRMSVNUXzJuZChldmwpKTsKKwljaCA9IGZpZm9fcHVsbChzcCk7CisgICAgfQorCisgICAgaWYgKGNoID09IEVSUikgeworI2lmIFVTRV9TSVpFQ0hBTkdFCisJaWYgKF9uY19oYW5kbGVfc2lnd2luY2goc3ApKSB7CisJICAgIF9uY191cGRhdGVfc2NyZWVuc2l6ZShzcCk7CisJICAgIC8qIHJlc2l6ZXRlcm0gY2FuIHB1c2ggS0VZX1JFU0laRSAqLworCSAgICBpZiAoY29va2VkX2tleV9pbl9maWZvKCkpIHsKKwkJKnJlc3VsdCA9IGZpZm9fcHVsbChzcCk7CisJCXJldHVybkNvZGUoKnJlc3VsdCA+PSBLRVlfTUlOID8gS0VZX0NPREVfWUVTIDogT0spOworCSAgICB9CisJfQorI2VuZGlmCisJcmV0dXJuQ29kZShFUlIpOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgZWNobygpIGlzIGluIGVmZmVjdCwgZGlzcGxheSB0aGUgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhlCisgICAgICoga2V5IG9uIHRoZSBzY3JlZW4uICBDYXJyaWFnZSByZXR1cm4gYW5kIGJhY2tzcGFjZSBhcmUgdHJlYXRlZAorICAgICAqIHNwZWNpYWxseSBieSBTb2xhcmlzIGN1cnNlczoKKyAgICAgKgorICAgICAqIElmIGNhcnJpYWdlIHJldHVybiBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24ga2V5IGluIHRoZQorICAgICAqIHRlcm1pbmZvLCBlLmcuLCBrZW50LCB0aGVuIFNvbGFyaXMgbWF5IHJldHVybiBlaXRoZXIgXkogKG9yIF5NCisgICAgICogaWYgbm9ubCgpIGlzIHNldCkgb3IgS0VZX0VOVEVSIGRlcGVuZGluZyBvbiB0aGUgZWNobygpIG1vZGUuIAorICAgICAqIFdlIGVjaG8gYmVmb3JlIHRyYW5zbGF0aW5nIGNhcnJpYWdlIHJldHVybiBiYXNlZCBvbiBub25sKCksCisgICAgICogc2luY2UgdGhlIHZpc3VhbCByZXN1bHQgc2ltcGx5IG1vdmVzIHRoZSBjdXJzb3IgdG8gY29sdW1uIDAuCisgICAgICoKKyAgICAgKiBCYWNrc3BhY2UgaXMgYSBkaWZmZXJlbnQgbWF0dGVyLiAgU29sYXJpcyBjdXJzZXMgZG9lcyBub3QKKyAgICAgKiB0cmFuc2xhdGUgaXQgdG8gS0VZX0JBQ0tTUEFDRSBpZiBrYnM9XkguICBUaGlzIGRvZXMgbm90IGRlcGVuZAorICAgICAqIG9uIHRoZSBzdHR5IG1vZGVzLCBidXQgYXBwZWFycyB0byBiZSBhIGhhcmRjb2RlZCBzcGVjaWFsIGNhc2UuCisgICAgICogVGhpcyBpcyBhIGRpZmZlcmVuY2UgZnJvbSBuY3Vyc2VzLCB3aGljaCB1c2VzIHRoZSB0ZXJtaW5mbyBlbnRyeS4KKyAgICAgKiBIb3dldmVyLCB3ZSBwcm92aWRlIHRoZSBzYW1lIHZpc3VhbCByZXN1bHQgYXMgU29sYXJpcywgbW92aW5nIHRoZQorICAgICAqIGN1cnNvciB0byB0aGUgbGVmdC4KKyAgICAgKi8KKyAgICBpZiAoc3AtPl9lY2hvICYmICEod2luLT5fZmxhZ3MgJiBfSVNQQUQpKSB7CisJY2h0eXBlIGJhY2t1cCA9IChjaCA9PSBLRVlfQkFDS1NQQUNFKSA/ICdcYicgOiBjaDsKKwlpZiAoYmFja3VwIDwgS0VZX01JTikKKwkgICAgd2VjaG9jaGFyKHdpbiwgYmFja3VwKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNpbXVsYXRlIElDUk5MIG1vZGUKKyAgICAgKi8KKyAgICBpZiAoKGNoID09ICdccicpICYmIHNwLT5fbmwpCisJY2ggPSAnXG4nOworCisgICAgLyogU3RyaXAgOHRoLWJpdCBpZiBzbyBkZXNpcmVkLiAgV2UgZG8gdGhpcyBvbmx5IGZvciBjaGFyYWN0ZXJzIHRoYXQKKyAgICAgKiBhcmUgaW4gdGhlIHJhbmdlIDEyOC0yNTUsIHRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIHRlcm1pbmFscworICAgICAqIHRoYXQgZGlzcGxheSBvbmx5IDctYml0IGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgJ2NoJyBtYXkgYmUgYQorICAgICAqIGZ1bmN0aW9uIGtleSBhdCB0aGlzIHBvaW50LCBzbyB3ZSBtdXN0bid0IHN0cmlwIF90aG9zZV8uCisgICAgICovCisgICAgaWYgKCF1c2VfbWV0YSkKKwlpZiAoKGNoIDwgS0VZX01JTikgJiYgKGNoICYgMHg4MCkpCisJICAgIGNoICY9IDB4N2Y7CisKKyAgICBUKCgid2dldGNoIHJldHVybmluZyA6ICVzIiwgX25jX3RyYWNlY2hhcihzcCwgY2gpKSk7CisKKyAgICAqcmVzdWx0ID0gY2g7CisgICAgcmV0dXJuQ29kZShjaCA+PSBLRVlfTUlOID8gS0VZX0NPREVfWUVTIDogT0spOworfQorCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3Z2V0Y2hfZXZlbnRzKFdJTkRPVyAqd2luLCBfbmNfZXZlbnRsaXN0ICogZXZsKQoreworICAgIGludCBjb2RlOworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKyAgICBUKChUX0NBTExFRCgid2dldGNoX2V2ZW50cyglcCwlcCkiKSwgd2luLCBldmwpKTsKKyAgICBjb2RlID0gX25jX3dnZXRjaCh3aW4sCisJCSAgICAgICZ2YWx1ZSwKKwkJICAgICAgX25jX3VzZV9tZXRhKHdpbikKKwkJICAgICAgRVZFTlRMSVNUXzJuZChldmwpKTsKKyAgICBpZiAoY29kZSAhPSBFUlIpCisJY29kZSA9IHZhbHVlOworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQoaW50KQord2dldGNoKFdJTkRPVyAqd2luKQoreworICAgIGludCBjb2RlOworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKyAgICBUKChUX0NBTExFRCgid2dldGNoKCVwKSIpLCB3aW4pKTsKKyAgICBjb2RlID0gX25jX3dnZXRjaCh3aW4sCisJCSAgICAgICZ2YWx1ZSwKKwkJICAgICAgX25jX3VzZV9tZXRhKHdpbikKKwkJICAgICAgRVZFTlRMSVNUXzJuZCgoX25jX2V2ZW50bGlzdCAqKSAwKSk7CisgICAgaWYgKGNvZGUgIT0gRVJSKQorCWNvZGUgPSB2YWx1ZTsKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCisvKgorKiogICAgICBpbnQKKyoqICAgICAga2dldGNoKCkKKyoqCisqKiAgICAgIEdldCBhbiBpbnB1dCBjaGFyYWN0ZXIsIGJ1dCB0YWtlIGNhcmUgb2Yga2V5cGFkIHNlcXVlbmNlcywgcmV0dXJuaW5nCisqKiAgICAgIGFuIGFwcHJvcHJpYXRlIGNvZGUgd2hlbiBvbmUgbWF0Y2hlcyB0aGUgaW5wdXQuICBBZnRlciBlYWNoIGNoYXJhY3RlcgorKiogICAgICBpcyByZWNlaXZlZCwgc2V0IGFuIGFsYXJtIGNhbGwgYmFzZWQgb24gRVNDREVMQVkuICBJZiBubyBtb3JlIG9mIHRoZQorKiogICAgICBzZXF1ZW5jZSBpcyByZWNlaXZlZCBieSB0aGUgdGltZSB0aGUgYWxhcm0gZ29lcyBvZmYsIHBhc3MgdGhyb3VnaAorKiogICAgICB0aGUgc2VxdWVuY2UgZ290dGVuIHNvIGZhci4KKyoqCisqKglUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGNvb2tlZCBrZXlzIGluIHF1ZXVlLgorKioJKHRoYXQgaXMgaGVhZD09LTEgfHwgcGVlaz09aGVhZCkKKyoqCisqLworCitzdGF0aWMgaW50CitrZ2V0Y2goU0NSRUVOICpzcCBFVkVOVExJU1RfMm5kKF9uY19ldmVudGxpc3QgKiBldmwpKQoreworICAgIFRSSUVTICpwdHI7CisgICAgaW50IGNoID0gMDsKKyAgICBpbnQgdGltZWxlZnQgPSBHZXRFc2NkZWxheShzcCk7CisKKyAgICBUUihUUkFDRV9JRVZFTlQsICgia2dldGNoKCkgY2FsbGVkIikpOworCisgICAgcHRyID0gc3AtPl9rZXl0cnk7CisKKyAgICBmb3IgKDs7KSB7CisJaWYgKGNvb2tlZF9rZXlfaW5fZmlmbygpICYmIHNwLT5fZmlmb1toZWFkXSA+PSBLRVlfTUlOKSB7CisJICAgIGJyZWFrOworCX0gZWxzZSBpZiAoIXJhd19rZXlfaW5fZmlmbygpKSB7CisJICAgIGNoID0gZmlmb19wdXNoKHNwIEVWRU5UTElTVF8ybmQoZXZsKSk7CisJICAgIGlmIChjaCA9PSBFUlIpIHsKKwkJcGVlayA9IGhlYWQ7CS8qIHRoZSBrZXlzIHN0YXkgdW5pbnRlcnByZXRlZCAqLworCQlyZXR1cm4gRVJSOworCSAgICB9CisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJICAgIGVsc2UgaWYgKGNoID09IEtFWV9FVkVOVCkgeworCQlwZWVrID0gaGVhZDsJLyogdGhlIGtleXMgc3RheSB1bmludGVycHJldGVkICovCisJCXJldHVybiBmaWZvX3B1bGwoc3ApOwkvKiBSZW1vdmUgS0VZX0VWRU5UIGZyb20gdGhlIHF1ZXVlICovCisJICAgIH0KKyNlbmRpZgorCX0KKworCWNoID0gZmlmb19wZWVrKHNwKTsKKwlpZiAoY2ggPj0gS0VZX01JTikgeworCSAgICAvKiBJZiBub3QgZmlyc3QgaW4gcXVldWUsIHNvbWVib2R5IHB1dCB0aGlzIGtleSB0aGVyZSBvbiBwdXJwb3NlIGluCisJICAgICAqIGVtZXJnZW5jeS4gIENvbnNpZGVyIGl0IGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSB1bmZpbmlzaGVkCisJICAgICAqIGtleXNlcXVlbmNlIHdlIGFyZSBwYXJzaW5nLgorCSAgICAgKi8KKwkgICAgcGVlayA9IGhlYWQ7CisJICAgIC8qIGFzc3VtZSB0aGUga2V5IGlzIHRoZSBsYXN0IGluIGZpZm8gKi8KKwkgICAgdF9kZWMoKTsJCS8qIHJlbW92ZSB0aGUga2V5ICovCisJICAgIHJldHVybiBjaDsKKwl9CisKKwlUUihUUkFDRV9JRVZFTlQsICgiY2g6ICVzIiwgX25jX3RyYWNlY2hhcihzcCwgKHVuc2lnbmVkIGNoYXIpIGNoKSkpOworCXdoaWxlICgocHRyICE9IE5VTEwpICYmIChwdHItPmNoICE9ICh1bnNpZ25lZCBjaGFyKSBjaCkpCisJICAgIHB0ciA9IHB0ci0+c2libGluZzsKKworCWlmIChwdHIgPT0gTlVMTCkgeworCSAgICBUUihUUkFDRV9JRVZFTlQsICgicHRyIGlzIG51bGwiKSk7CisJICAgIGJyZWFrOworCX0KKwlUUihUUkFDRV9JRVZFTlQsICgicHRyPSVwLCBjaD0lZCwgdmFsdWU9JWQiLAorCQkJICBwdHIsIHB0ci0+Y2gsIHB0ci0+dmFsdWUpKTsKKworCWlmIChwdHItPnZhbHVlICE9IDApIHsJLyogc2VxdWVuY2UgdGVybWluYXRlZCAqLworCSAgICBUUihUUkFDRV9JRVZFTlQsICgiZW5kIG9mIHNlcXVlbmNlIikpOworCSAgICBpZiAocGVlayA9PSB0YWlsKQorCQlmaWZvX2NsZWFyKHNwKTsKKwkgICAgZWxzZQorCQloZWFkID0gcGVlazsKKwkgICAgcmV0dXJuIChwdHItPnZhbHVlKTsKKwl9CisKKwlwdHIgPSBwdHItPmNoaWxkOworCisJaWYgKCFyYXdfa2V5X2luX2ZpZm8oKSkgeworCSAgICBpbnQgcmM7CisKKwkgICAgVFIoVFJBQ0VfSUVWRU5ULCAoIndhaXRpbmcgZm9yIHJlc3Qgb2Ygc2VxdWVuY2UiKSk7CisJICAgIHJjID0gY2hlY2tfbW91c2VfYWN0aXZpdHkoc3AsIHRpbWVsZWZ0IEVWRU5UTElTVF8ybmQoZXZsKSk7CisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJICAgIGlmIChyYyAmIDQpIHsKKwkJVFIoVFJBQ0VfSUVWRU5ULCAoImludGVycnVwdGVkIGJ5IGEgdXNlciBldmVudCIpKTsKKwkJLyogRklYTUUgU2hvdWxkIGhhdmUgcHJlc2VydmVkIHJlbWFpbmRlciB0aW1lbGVmdCBmb3IgcmV1c2UuLi4gKi8KKwkJcGVlayA9IGhlYWQ7CS8qIFJlc3RhcnQgaW50ZXJwcmV0aW5nIGxhdGVyICovCisJCXJldHVybiBLRVlfRVZFTlQ7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAoIXJjKSB7CisJCVRSKFRSQUNFX0lFVkVOVCwgKCJyYW4gb3V0IG9mIHRpbWUiKSk7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICBjaCA9IGZpZm9fcHVsbChzcCk7CisgICAgcGVlayA9IGhlYWQ7CisgICAgcmV0dXJuIGNoOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9nZXRzdHIuYyBiL25jdXJzZXMvYmFzZS9saWJfZ2V0c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZGYwMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfZ2V0c3RyLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2dldHN0ci5jCisqKgorKioJVGhlIHJvdXRpbmUgd2dldHN0cigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9nZXRzdHIuYyx2IDEuMjcgMjAwOC8wOC8xNiAxOToyMDowNCB0b20gRXhwICQiKQorCisvKgorICogVGhpcyB3aXBlcyBvdXQgdGhlIGxhc3QgY2hhcmFjdGVyLCBubyBtYXR0ZXIgd2hldGhlciBpdCB3YXMgYSB0YWIsIGNvbnRyb2wKKyAqIG9yIG90aGVyIGNoYXJhY3RlciwgYW5kIGhhbmRsZXMgcmV2ZXJzZSB3cmFwYXJvdW5kLgorICovCitzdGF0aWMgY2hhciAqCitXaXBlT3V0KFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNoYXIgKmZpcnN0LCBjaGFyICpsYXN0LCBib29sIGVjaG9lZCkKK3sKKyAgICBpZiAobGFzdCA+IGZpcnN0KSB7CisJKi0tbGFzdCA9ICdcMCc7CisJaWYgKGVjaG9lZCkgeworCSAgICBpbnQgeTEgPSB3aW4tPl9jdXJ5OworCSAgICBpbnQgeDEgPSB3aW4tPl9jdXJ4OworCisJICAgIHdtb3ZlKHdpbiwgeSwgeCk7CisJICAgIHdhZGRzdHIod2luLCBmaXJzdCk7CisJICAgIGdldHl4KHdpbiwgeSwgeCk7CisJICAgIHdoaWxlICh3aW4tPl9jdXJ5IDwgeTEKKwkJICAgfHwgKHdpbi0+X2N1cnkgPT0geTEgJiYgd2luLT5fY3VyeCA8IHgxKSkKKwkJd2FkZGNoKHdpbiwgKGNodHlwZSkgJyAnKTsKKworCSAgICB3bW92ZSh3aW4sIHksIHgpOworCX0KKyAgICB9CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dnZXRuc3RyX2V2ZW50cyhXSU5ET1cgKndpbiwKKwkJY2hhciAqc3RyLAorCQlpbnQgbWF4bGVuLAorCQlFVkVOVExJU1RfMXN0KF9uY19ldmVudGxpc3QgKiBldmwpKQoreworICAgIFNDUkVFTiAqc3AgPSBfbmNfc2NyZWVuX29mKHdpbik7CisgICAgVFRZIGJ1ZjsKKyAgICBib29sIG9sZG5sLCBvbGRlY2hvLCBvbGRyYXcsIG9sZGNicmVhazsKKyAgICBjaGFyIGVyYXNlYzsKKyAgICBjaGFyIGtpbGxjOworICAgIGNoYXIgKm9sZHN0cjsKKyAgICBpbnQgY2g7CisgICAgaW50IHksIHg7CisKKyAgICBUKChUX0NBTExFRCgid2dldG5zdHIoJXAsJXAsICVkKSIpLCB3aW4sIHN0ciwgbWF4bGVuKSk7CisKKyAgICBpZiAoIXdpbikKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBfbmNfZ2V0X3R0eV9tb2RlKCZidWYpOworCisgICAgb2xkbmwgPSBzcC0+X25sOworICAgIG9sZGVjaG8gPSBzcC0+X2VjaG87CisgICAgb2xkcmF3ID0gc3AtPl9yYXc7CisgICAgb2xkY2JyZWFrID0gc3AtPl9jYnJlYWs7CisgICAgbmwoKTsKKyAgICBub2VjaG8oKTsKKyAgICBub3JhdygpOworICAgIGNicmVhaygpOworCisgICAgZXJhc2VjID0gZXJhc2VjaGFyKCk7CisgICAga2lsbGMgPSBraWxsY2hhcigpOworCisgICAgb2xkc3RyID0gc3RyOworICAgIGdldHl4KHdpbiwgeSwgeCk7CisKKyAgICBpZiAoaXNfd2ludG91Y2hlZCh3aW4pIHx8ICh3aW4tPl9mbGFncyAmIF9IQVNNT1ZFRCkpCisJd3JlZnJlc2god2luKTsKKworICAgIHdoaWxlICgoY2ggPSB3Z2V0Y2hfZXZlbnRzKHdpbiwgZXZsKSkgIT0gRVJSKSB7CisJLyoKKwkgKiBTb21lIHRlcm1pbmFscyAodGhlIFd5c2UtNTAgaXMgdGhlIG1vc3QgY29tbW9uKSBnZW5lcmF0ZQorCSAqIGEgXG4gZnJvbSB0aGUgZG93bi1hcnJvdyBrZXkuICBXaXRoIHRoaXMgbG9naWMsIGl0J3MgdGhlCisJICogdXNlcidzIGNob2ljZSB3aGV0aGVyIHRvIHNldCBrY3VkPVxuIGZvciB3Z2V0Y2goKTsKKwkgKiB0ZXJtaW5hdGluZyAqZ2V0c3RyKCkgd2l0aCBcbiBzaG91bGQgd29yayBlaXRoZXIgd2F5LgorCSAqLworCWlmIChjaCA9PSAnXG4nCisJICAgIHx8IGNoID09ICdccicKKwkgICAgfHwgY2ggPT0gS0VZX0RPV04KKwkgICAgfHwgY2ggPT0gS0VZX0VOVEVSKSB7CisJICAgIGlmIChvbGRlY2hvID09IFRSVUUKKwkJJiYgd2luLT5fY3VyeSA9PSB3aW4tPl9tYXh5CisJCSYmIHdpbi0+X3Njcm9sbCkKKwkJd2VjaG9jaGFyKHdpbiwgKGNodHlwZSkgJ1xuJyk7CisJICAgIGJyZWFrOworCX0KKyNpZmRlZiBLRVlfRVZFTlQKKwlpZiAoY2ggPT0gS0VZX0VWRU5UKQorCSAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNJWkUKKwlpZiAoY2ggPT0gS0VZX1JFU0laRSkKKwkgICAgYnJlYWs7CisjZW5kaWYKKwlpZiAoY2ggPT0gZXJhc2VjIHx8IGNoID09IEtFWV9MRUZUIHx8IGNoID09IEtFWV9CQUNLU1BBQ0UpIHsKKwkgICAgaWYgKHN0ciA+IG9sZHN0cikgeworCQlzdHIgPSBXaXBlT3V0KHdpbiwgeSwgeCwgb2xkc3RyLCBzdHIsIG9sZGVjaG8pOworCSAgICB9CisJfSBlbHNlIGlmIChjaCA9PSBraWxsYykgeworCSAgICB3aGlsZSAoc3RyID4gb2xkc3RyKSB7CisJCXN0ciA9IFdpcGVPdXQod2luLCB5LCB4LCBvbGRzdHIsIHN0ciwgb2xkZWNobyk7CisJICAgIH0KKwl9IGVsc2UgaWYgKGNoID49IEtFWV9NSU4KKwkJICAgfHwgKG1heGxlbiA+PSAwICYmIHN0ciAtIG9sZHN0ciA+PSBtYXhsZW4pKSB7CisJICAgIGJlZXAoKTsKKwl9IGVsc2UgeworCSAgICAqc3RyKysgPSAoY2hhcikgY2g7CisJICAgIGlmIChvbGRlY2hvID09IFRSVUUpIHsKKwkJaW50IG9sZHkgPSB3aW4tPl9jdXJ5OworCQlpZiAod2FkZGNoKHdpbiwgKGNodHlwZSkgY2gpID09IEVSUikgeworCQkgICAgLyoKKwkJICAgICAqIFdlIGNhbid0IHJlYWxseSB1c2UgdGhlIGxvd2VyLXJpZ2h0CisJCSAgICAgKiBjb3JuZXIgZm9yIGlucHV0LCBzaW5jZSBpdCdsbCBtZXNzCisJCSAgICAgKiB1cCBib29ra2VlcGluZyBmb3IgZXJhc2VzLgorCQkgICAgICovCisJCSAgICB3aW4tPl9mbGFncyAmPSB+X1dSQVBQRUQ7CisJCSAgICB3YWRkY2god2luLCAoY2h0eXBlKSAnICcpOworCQkgICAgc3RyID0gV2lwZU91dCh3aW4sIHksIHgsIG9sZHN0ciwgc3RyLCBvbGRlY2hvKTsKKwkJICAgIGNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHdpbi0+X2ZsYWdzICYgX1dSQVBQRUQpIHsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB0aGUgbGFzdCB3YWRkY2ggZm9yY2VkIGEgd3JhcCAmCisJCSAgICAgKiBzY3JvbGwsIGFkanVzdCBvdXIgcmVmZXJlbmNlIHBvaW50CisJCSAgICAgKiBmb3IgZXJhc3VyZXMuCisJCSAgICAgKi8KKwkJICAgIGlmICh3aW4tPl9zY3JvbGwKKwkJCSYmIG9sZHkgPT0gd2luLT5fbWF4eQorCQkJJiYgd2luLT5fY3VyeSA9PSB3aW4tPl9tYXh5KSB7CisJCQlpZiAoLS15IDw9IDApIHsKKwkJCSAgICB5ID0gMDsKKwkJCX0KKwkJICAgIH0KKwkJICAgIHdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKwkJfQorCQl3cmVmcmVzaCh3aW4pOworCSAgICB9CisJfQorICAgIH0KKworICAgIHdpbi0+X2N1cnggPSAwOworICAgIHdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKyAgICBpZiAod2luLT5fY3VyeSA8IHdpbi0+X21heHkpCisJd2luLT5fY3VyeSsrOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICAvKiBSZXN0b3JlIHdpdGggYSBzaW5nbGUgSS9PIGNhbGwsIHRvIGZpeCBtaW5vciBhc3ltbWV0cnkgYmV0d2VlbgorICAgICAqIHJhdy9ub3JhdywgZXRjLgorICAgICAqLworICAgIHNwLT5fbmwgPSBvbGRubDsKKyAgICBzcC0+X2VjaG8gPSBvbGRlY2hvOworICAgIHNwLT5fcmF3ID0gb2xkcmF3OworICAgIHNwLT5fY2JyZWFrID0gb2xkY2JyZWFrOworCisgICAgX25jX3NldF90dHlfbW9kZSgmYnVmKTsKKworICAgICpzdHIgPSAnXDAnOworICAgIGlmIChjaCA9PSBFUlIpCisJcmV0dXJuQ29kZShjaCk7CisKKyAgICBUKCgid2dldG5zdHIgcmV0dXJucyAlcyIsIF9uY192aXNidWYob2xkc3RyKSkpOworCisjaWZkZWYgS0VZX0VWRU5UCisgICAgaWYgKGNoID09IEtFWV9FVkVOVCkKKwlyZXR1cm5Db2RlKGNoKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNJWkUKKyAgICBpZiAoY2ggPT0gS0VZX1JFU0laRSkKKwlyZXR1cm5Db2RlKGNoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKK05DVVJTRVNfRVhQT1JUKGludCkKK3dnZXRuc3RyKFdJTkRPVyAqd2luLCBjaGFyICpzdHIsIGludCBtYXhsZW4pCit7CisgICAgcmV0dXJuQ29kZSh3Z2V0bnN0cl9ldmVudHMod2luLAorCQkJICAgICAgIHN0ciwKKwkJCSAgICAgICBtYXhsZW4sCisJCQkgICAgICAgRVZFTlRMSVNUXzFzdCgoX25jX2V2ZW50bGlzdCAqKSAwKSkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2hsaW5lLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2hsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmMmNjNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfaGxpbmUuYwpAQCAtMCwwICsxLDgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9obGluZS5jCisqKgorKioJVGhlIHJvdXRpbmUgd2hsaW5lKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaGxpbmUuYyx2IDEuMTEgMjAwNi8wMy8xMSAyMTo1MjoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aGxpbmUoV0lORE9XICp3aW4sIGNodHlwZSBjaCwgaW50IG4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgTkNVUlNFU19TSVpFX1Qgc3RhcnQ7CisgICAgTkNVUlNFU19TSVpFX1QgZW5kOworCisgICAgVCgoVF9DQUxMRUQoIndobGluZSglcCwlcywlZCkiKSwgd2luLCBfdHJhY2VjaHR5cGUoY2gpLCBuKSk7CisKKyAgICBpZiAod2luKSB7CisJc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbd2luLT5fY3VyeV0pOworCU5DVVJTRVNfQ0hfVCB3Y2g7CisKKwlzdGFydCA9IHdpbi0+X2N1cng7CisJZW5kID0gc3RhcnQgKyBuIC0gMTsKKwlpZiAoZW5kID4gd2luLT5fbWF4eCkKKwkgICAgZW5kID0gd2luLT5fbWF4eDsKKworCUNIQU5HRURfUkFOR0UobGluZSwgc3RhcnQsIGVuZCk7CisKKwlpZiAoY2ggPT0gMCkKKwkgICAgU2V0Q2hhcjIod2NoLCBBQ1NfSExJTkUpOworCWVsc2UKKwkgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisJd2NoID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisKKwl3aGlsZSAoZW5kID49IHN0YXJ0KSB7CisJICAgIGxpbmUtPnRleHRbZW5kXSA9IHdjaDsKKwkgICAgZW5kLS07CisJfQorCisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9pbW1lZG9rLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2ltbWVkb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk4OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9pbW1lZG9rLmMKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW1tZWRvay5jCisqKgorKioJVGhlIHJvdXRpbmUgaW1tZWRvay4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9pbW1lZG9rLmMsdiAxLjQgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQoraW1tZWRvayhXSU5ET1cgKndpbiwgYm9vbCBmbGFnKQoreworICAgIFQoKFRfQ0FMTEVEKCJpbW1lZG9rKCVwLCVkKSIpLCB3aW4sIGZsYWcpKTsKKworICAgIGlmICh3aW4pCisJd2luLT5faW1tZWQgPSBmbGFnOworCisgICAgcmV0dXJuVm9pZDsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfaW5jaHN0ci5jIGIvbmN1cnNlcy9iYXNlL2xpYl9pbmNoc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmMDE2OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfaW5jaHN0ci5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2luY2hzdHIuYworKioKKyoqCVRoZSByb3V0aW5lIHdpbmNobnN0cigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2luY2hzdHIuYyx2IDEuMTAgMjAwMS8wNi8wMiAyMzozNzo1OCBza2ltbyBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbmNobnN0cihXSU5ET1cgKndpbiwgY2h0eXBlICogc3RyLCBpbnQgbikKK3sKKyAgICBpbnQgaSA9IDA7CisKKyAgICBUKChUX0NBTExFRCgid2luY2huc3RyKCVwLCVwLCVkKSIpLCB3aW4sIHN0ciwgbikpOworCisgICAgaWYgKCFzdHIpCisJcmV0dXJuQ29kZSgwKTsKKworICAgIGlmICh3aW4pIHsKKwlmb3IgKDsgKG4gPCAwIHx8IChpIDwgbikpICYmICh3aW4tPl9jdXJ4ICsgaSA8PSB3aW4tPl9tYXh4KTsgaSsrKQorCSAgICBzdHJbaV0gPQorCQlDaGFyT2Yod2luLT5fbGluZVt3aW4tPl9jdXJ5XS50ZXh0W3dpbi0+X2N1cnggKyBpXSkgfAorCQlBdHRyT2Yod2luLT5fbGluZVt3aW4tPl9jdXJ5XS50ZXh0W3dpbi0+X2N1cnggKyBpXSk7CisgICAgfQorICAgIHN0cltpXSA9IChjaHR5cGUpIDA7CisKKyAgICByZXR1cm5Db2RlKGkpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9pbml0c2NyLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2luaXRzY3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZlZjBjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9pbml0c2NyLmMKQEAgLTAsMCArMSw5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtMjAwMyAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2luaXRzY3IuYworKioKKyoqCVRoZSByb3V0aW5lcyBpbml0c2NyKCksIGFuZCB0ZXJtbmFtZSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgSEFWRV9TWVNfVEVSTUlPX0gKKyNpbmNsdWRlIDxzeXMvdGVybWlvLmg+CQkvKiBuZWVkZWQgZm9yIElTQyAqLworI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5pdHNjci5jLHYgMS4zOCAyMDA4LzA4LzE2IDIxOjIwOjQ4IFdlcm5lci5GaW5rIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitpbml0c2NyKHZvaWQpCit7CisgICAgV0lORE9XICpyZXN1bHQ7CisKKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWU7CisKKyAgICBTVEFSVF9UUkFDRSgpOworICAgIFQoKFRfQ0FMTEVEKCJpbml0c2NyKCkiKSkpOworCisgICAgX25jX2luaXRfcHRocmVhZHMoKTsKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIC8qIFBvcnRhYmxlIGFwcGxpY2F0aW9ucyBtdXN0IG5vdCBjYWxsIGluaXRzY3IoKSBtb3JlIHRoYW4gb25jZSAqLworICAgIGlmICghX25jX2dsb2JhbHMuaW5pdF9zY3JlZW4pIHsKKwlfbmNfZ2xvYmFscy5pbml0X3NjcmVlbiA9IFRSVUU7CisKKwlpZiAoKG5hbWUgPSBnZXRlbnYoIlRFUk0iKSkgPT0gMAorCSAgICB8fCAqbmFtZSA9PSAnXDAnKQorCSAgICBuYW1lID0gInVua25vd24iOworI2lmZGVmIF9fQ1lHV0lOX18KKwkvKgorCSAqIDIwMDIvOS8yMQorCSAqIFdvcmsgYXJvdW5kIGEgYnVnIGluIEN5Z3dpbi4gIEZ1bGwtc2NyZWVuIHN1YnByb2Nlc3NlcyBydW4gZnJvbQorCSAqIGJhc2gsIGluIHR1cm4gc3Bhd25lZCBmcm9tIGFub3RoZXIgZnVsbC1zY3JlZW4gcHJvY2Vzcywgd2lsbCBkdW1wCisJICogY29yZSB3aGVuIGF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gc3Rkb3V0LiAgT3BlbmluZyAvZGV2L3R0eQorCSAqIGV4cGxpY2l0bHkgc2VlbXMgdG8gZml4IHRoZSBwcm9ibGVtLgorCSAqLworCWlmIChpc2F0dHkoZmlsZW5vKHN0ZG91dCkpKSB7CisJICAgIEZJTEUgKmZwID0gZm9wZW4oIi9kZXYvdHR5IiwgInciKTsKKwkgICAgaWYgKGZwICE9IDAgJiYgaXNhdHR5KGZpbGVubyhmcCkpKSB7CisJCWZjbG9zZShzdGRvdXQpOworCQlkdXAyKGZpbGVubyhmcCksIFNURE9VVF9GSUxFTk8pOworCQlzdGRvdXQgPSBmZG9wZW4oU1RET1VUX0ZJTEVOTywgInciKTsKKwkgICAgfQorCX0KKyNlbmRpZgorCWlmIChuZXd0ZXJtKG5hbWUsIHN0ZG91dCwgc3RkaW4pID09IDApIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIHRlcm1pbmFsOiAlcy5cbiIsIG5hbWUpOworCSAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJLyogZGVmX3NoZWxsX21vZGUgLSBkb25lIGluIG5ld3Rlcm0vX25jX3NldHVwc2NyZWVuICovCisJZGVmX3Byb2dfbW9kZSgpOworICAgIH0KKyAgICByZXN1bHQgPSBzdGRzY3I7CisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIHJldHVybldpbihyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9pbnNjaC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9pbnNjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2luc2NoLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFN2ZW4gVmVyZG9vbGFlZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW5zY2guYworKioKKyoqCVRoZSByb3V0aW5lIHdpbnNjaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5zY2guYyx2IDEuMjUgMjAwOC8wMi8wMyAwMDoxNDozNyB0b20gRXhwICQiKQorCisvKgorICogSW5zZXJ0IHRoZSBnaXZlbiBjaGFyYWN0ZXIsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGxvY2F0aW9uIHRvIHNpbXBsaWZ5CisgKiBpbnNlcnRpbmcgYSBzdHJpbmcuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19pbnNlcnRfY2goV0lORE9XICp3aW4sIGNodHlwZSBjaCkKK3sKKyAgICBpbnQgY29kZSA9IE9LOworICAgIE5DVVJTRVNfQ0hfVCB3Y2g7CisgICAgaW50IGNvdW50OworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqczsKKworICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlICdcdCc6CisJZm9yIChjb3VudCA9IChUQUJTSVpFIC0gKHdpbi0+X2N1cnggJSBUQUJTSVpFKSk7IGNvdW50ID4gMDsgY291bnQtLSkgeworCSAgICBpZiAoKGNvZGUgPSBfbmNfaW5zZXJ0X2NoKHdpbiwgJyAnKSkgIT0gT0spCisJCWJyZWFrOworCX0KKwlicmVhazsKKyAgICBjYXNlICdcbic6CisgICAgY2FzZSAnXHInOgorICAgIGNhc2UgJ1xiJzoKKwlTZXRDaGFyMih3Y2gsIGNoKTsKKwlfbmNfd2FkZGNoX25vc3luYyh3aW4sIHdjaCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlpZiAoCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkgICAgICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpID09IDAgJiYKKyNlbmRpZgorCSAgICAgICBpczhiaXRzKENoQ2hhck9mKGNoKSkgJiYKKwkgICAgICAgaXNwcmludChDaENoYXJPZihjaCkpKSB7CisJICAgIGlmICh3aW4tPl9jdXJ4IDw9IHdpbi0+X21heHgpIHsKKwkJc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbd2luLT5fY3VyeV0pOworCQlOQ1VSU0VTX0NIX1QgKmVuZCA9ICYobGluZS0+dGV4dFt3aW4tPl9jdXJ4XSk7CisJCU5DVVJTRVNfQ0hfVCAqdGVtcDEgPSAmKGxpbmUtPnRleHRbd2luLT5fbWF4eF0pOworCQlOQ1VSU0VTX0NIX1QgKnRlbXAyID0gdGVtcDEgLSAxOworCisJCVNldENoYXIyKHdjaCwgY2gpOworCisJCUNIQU5HRURfVE9fRU9MKGxpbmUsIHdpbi0+X2N1cngsIHdpbi0+X21heHgpOworCQl3aGlsZSAodGVtcDEgPiBlbmQpCisJCSAgICAqdGVtcDEtLSA9ICp0ZW1wMi0tOworCisJCSp0ZW1wMSA9IF9uY19yZW5kZXIod2luLCB3Y2gpOworCQl3aW4tPl9jdXJ4Kys7CisJICAgIH0KKwl9IGVsc2UgaWYgKGlzOGJpdHMoQ2hDaGFyT2YoY2gpKSAmJiBpc2NudHJsKENoQ2hhck9mKGNoKSkpIHsKKwkgICAgcyA9IHVuY3RybChDaENoYXJPZihjaCkpOworCSAgICB3aGlsZSAoKnMgIT0gJ1wwJykgeworCQljb2RlID0gX25jX2luc2VydF9jaCh3aW4sIENoQXR0ck9mKGNoKSB8IFVDaGFyKCpzKSk7CisJCWlmIChjb2RlICE9IE9LKQorCQkgICAgYnJlYWs7CisJCSsrczsKKwkgICAgfQorCX0KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCWVsc2UgeworCSAgICAvKgorCSAgICAgKiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaGVyZQorCSAgICAgKi8KKwkgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisJICAgIHdjaCA9IF9uY19yZW5kZXIod2luLCB3Y2gpOworCSAgICBjb3VudCA9IF9uY19idWlsZF93Y2god2luLCAmd2NoKTsKKwkgICAgaWYgKGNvdW50ID4gMCkgeworCQljb2RlID0gd2luc193Y2god2luLCAmd2NoKTsKKwkgICAgfSBlbHNlIGlmIChjb3VudCA9PSAtMSkgeworCQkvKiBoYW5kbGUgRUlMU0VRICovCisJCWlmIChpczhiaXRzKGNoKSkgeworCQkgICAgcyA9IHVuY3RybChDaENoYXJPZihjaCkpOworCQkgICAgd2hpbGUgKCpzICE9ICdcMCcpIHsKKwkJCWNvZGUgPSBfbmNfaW5zZXJ0X2NoKHdpbiwgQ2hBdHRyT2YoY2gpIHwgVUNoYXIoKnMpKTsKKwkJCWlmIChjb2RlICE9IE9LKQorCQkJICAgIGJyZWFrOworCQkJKytzOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgY29kZSA9IEVSUjsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW5zY2goV0lORE9XICp3aW4sIGNodHlwZSBjKQoreworICAgIE5DVVJTRVNfU0laRV9UIG95OworICAgIE5DVVJTRVNfU0laRV9UIG94OworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndpbnNjaCglcCwgJXMpIiksIHdpbiwgX3RyYWNlY2h0eXBlKGMpKSk7CisKKyAgICBpZiAod2luICE9IDApIHsKKwlveSA9IHdpbi0+X2N1cnk7CisJb3ggPSB3aW4tPl9jdXJ4OworCisJY29kZSA9IF9uY19pbnNlcnRfY2god2luLCBjKTsKKworCXdpbi0+X2N1cnggPSBveDsKKwl3aW4tPl9jdXJ5ID0gb3k7CisJX25jX3N5bmNob29rKHdpbik7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2luc2RlbC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9pbnNkZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDJjNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9pbnNkZWwuYwpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbnNkZWwuYworKioKKyoqCVRoZSByb3V0aW5lIHdpbnNkZWxsbih3aW4sIG4pLgorKiogIHBvc2l0aXZlIG4gaW5zZXJ0IG4gbGluZXMgYWJvdmUgY3VycmVudCBsaW5lCisqKiAgbmVnYXRpdmUgbiBkZWxldGUgbiBsaW5lcyBzdGFydGluZyBmcm9tIGN1cnJlbnQgbGluZQorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2luc2RlbC5jLHYgMS4xMiAyMDAzLzA3LzI2IDIyOjQwOjA2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbnNkZWxsbihXSU5ET1cgKndpbiwgaW50IG4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgid2luc2RlbGxuKCVwLCVkKSIpLCB3aW4sIG4pKTsKKworICAgIGlmICh3aW4pIHsKKwlpZiAobiAhPSAwKSB7CisJICAgIF9uY19zY3JvbGxfd2luZG93KHdpbiwgLW4sIHdpbi0+X2N1cnksIHdpbi0+X21heHksCisJCQkgICAgICB3aW4tPl9uY19ia2dkKTsKKwkgICAgX25jX3N5bmNob29rKHdpbik7CisJfQorCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfaW5zbnN0ci5jIGIvbmN1cnNlcy9iYXNlL2xpYl9pbnNuc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZGZkZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfaW5zbnN0ci5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW5zbnN0ci5jCisqKgorKioJVGhlIHJvdXRpbmUgd2luc25zdHIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2luc25zdHIuYyx2IDEuMSAyMDA0LzAyLzI4IDIzOjQ0OjU2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbnNuc3RyKFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpzLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKyAgICBOQ1VSU0VTX1NJWkVfVCBveTsKKyAgICBOQ1VSU0VTX1NJWkVfVCBveDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwOworCisgICAgVCgoVF9DQUxMRUQoIndpbnNuc3RyKCVwLCVzLCVkKSIpLCB3aW4sIF9uY192aXNidWZuKHMsIG4pLCBuKSk7CisKKyAgICBpZiAod2luICE9IDAgJiYgc3RyICE9IDApIHsKKwlveSA9IHdpbi0+X2N1cnk7CisJb3ggPSB3aW4tPl9jdXJ4OworCWZvciAoY3AgPSBzdHI7ICpjcCAmJiAobiA8PSAwIHx8IChjcCAtIHN0cikgPCBuKTsgY3ArKykgeworCSAgICBfbmNfaW5zZXJ0X2NoKHdpbiwgKGNodHlwZSkgVUNoYXIoKmNwKSk7CisJfQorCXdpbi0+X2N1cnggPSBveDsKKwl3aW4tPl9jdXJ5ID0gb3k7CisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9pbnN0ci5jIGIvbmN1cnNlcy9iYXNlL2xpYl9pbnN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYjI5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX2luc3RyLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbnN0ci5jCisqKgorKioJVGhlIHJvdXRpbmUgd2lubnN0cigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2luc3RyLmMsdiAxLjE2IDIwMDcvMDcvMjEgMjA6MTg6MTAgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2lubnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyLCBpbnQgbikKK3sKKyAgICBpbnQgaSA9IDAsIHJvdywgY29sOworCisgICAgVCgoVF9DQUxMRUQoIndpbm5zdHIoJXAsJXAsJWQpIiksIHdpbiwgc3RyLCBuKSk7CisKKyAgICBpZiAoIXN0cikKKwlyZXR1cm5Db2RlKDApOworCisgICAgaWYgKHdpbikgeworCWdldHl4KHdpbiwgcm93LCBjb2wpOworCisJaWYgKG4gPCAwKQorCSAgICBuID0gd2luLT5fbWF4eCAtIHdpbi0+X2N1cnggKyAxOworCisJZm9yICg7IGkgPCBuOykgeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJICAgIGNjaGFyX3QgKmNlbGwgPSAmKHdpbi0+X2xpbmVbcm93XS50ZXh0W2NvbF0pOworCSAgICB3Y2hhcl90ICp3Y2g7CisJICAgIGF0dHJfdCBhdHRyczsKKwkgICAgc2hvcnQgcGFpcjsKKwkgICAgaW50IG4yOworCSAgICBib29sIGRvbmUgPSBGQUxTRTsKKwkgICAgbWJzdGF0ZV90IHN0YXRlOworCSAgICBzaXplX3QgaTMsIG4zOworCSAgICBjaGFyICp0bXA7CisKKwkgICAgaWYgKCFpc1dpZGVjRXh0KCpjZWxsKSkgeworCQluMiA9IGdldGNjaGFyKGNlbGwsIDAsIDAsIDAsIDApOworCQlpZiAobjIgPiAwCisJCSAgICAmJiAod2NoID0gdHlwZUNhbGxvYyh3Y2hhcl90LCAodW5zaWduZWQpIG4yICsgMSkpICE9IDApIHsKKwkJICAgIGlmIChnZXRjY2hhcihjZWxsLCB3Y2gsICZhdHRycywgJnBhaXIsIDApID09IE9LKSB7CisKKwkJCWluaXRfbWIoc3RhdGUpOworCQkJbjMgPSB3Y3N0b21icygwLCB3Y2gsIDApOworCQkJaWYgKGlzRUlMU0VRKG4zKSB8fCAobjMgPT0gMCkpIHsKKwkJCSAgICA7CisJCQl9IGVsc2UgaWYgKChpbnQpIChuMyArIGkpID4gbikgeworCQkJICAgIGRvbmUgPSBUUlVFOworCQkJfSBlbHNlIGlmICgodG1wID0gdHlwZUNhbGxvYyhjaGFyLCBuMyArIDEwKSkgPT0gMCkgeworCQkJICAgIGRvbmUgPSBUUlVFOworCQkJfSBlbHNlIHsKKwkJCSAgICBpbml0X21iKHN0YXRlKTsKKwkJCSAgICB3Y3N0b21icyh0bXAsIHdjaCwgbjMpOworCQkJICAgIGZvciAoaTMgPSAwOyBpMyA8IG4zOyArK2kzKQorCQkJCXN0cltpKytdID0gdG1wW2kzXTsKKwkJCSAgICBmcmVlKHRtcCk7CisJCQl9CisJCSAgICB9CisJCSAgICBmcmVlKHdjaCk7CisJCSAgICBpZiAoZG9uZSkKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKyNlbHNlCisJICAgIHN0cltpKytdID0gKGNoYXIpIENoYXJPZih3aW4tPl9saW5lW3Jvd10udGV4dFtjb2xdKTsKKyNlbmRpZgorCSAgICBpZiAoKytjb2wgPiB3aW4tPl9tYXh4KSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICBzdHJbaV0gPSAnXDAnOwkJLyogU1ZyNCBkb2VzIG5vdCBzZWVtIHRvIGNvdW50IHRoZSBudWxsICovCisgICAgVCgoIndpbm5zdHIgcmV0dXJucyAlcyIsIF9uY192aXNidWYoc3RyKSkpOworICAgIHJldHVybkNvZGUoaSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX2lzZW5kd2luLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2lzZW5kd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzN2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfaXNlbmR3aW4uYwpAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9lbmR3aW4uYworKioKKyoqCVRoZSByb3V0aW5lIGVuZHdpbigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2lzZW5kd2luLmMsdiAxLjYgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChib29sKQoraXNlbmR3aW4odm9pZCkKK3sKKyAgICBpZiAoU1AgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIFNQLT5fZW5kd2luOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9sZWF2ZW9rLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX2xlYXZlb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2QwOTVkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9sZWF2ZW9rLmMKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfbGVhdmVvay5jCisqKgorKioJVGhlIHJvdXRpbmUgbGVhdmVvay4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9sZWF2ZW9rLmMsdiAxLjUgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitsZWF2ZW9rKFdJTkRPVyAqd2luLCBib29sIGZsYWcpCit7CisgICAgVCgoVF9DQUxMRUQoImxlYXZlb2soJXAsJWQpIiksIHdpbiwgZmxhZykpOworCisgICAgaWYgKHdpbikgeworCXdpbi0+X2xlYXZlb2sgPSBmbGFnOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfbW91c2UuYyBiL25jdXJzZXMvYmFzZS9saWJfbW91c2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWYyOWFhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9tb3VzZS5jCkBAIC0wLDAgKzEsMTQzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgbmN1cnNlcydzIGludGVyZmFjZSB0byBwb2ludGluZworICogZGV2aWNlcy4KKyAqCisgKiBUaGUgcHJpbWFyeSBtZXRob2QgdXNlZCBpcyB4dGVybSdzIGludGVybmFsIG1vdXNlLXRyYWNraW5nIGZhY2lsaXR5LgorICogQWRkaXRpb25hbCBtZXRob2RzIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm06CisgKglBbGVzc2FuZHJvIFJ1YmluaSdzIEdQTSBzZXJ2ZXIgKExpbnV4KQorICoJc3lzbW91c2UgKEZyZWVCU0QpCisgKglzcGVjaWFsLXB1cnBvc2UgbW91c2UgaW50ZXJmYWNlIGZvciBPUy8yIEVNWC4KKyAqCisgKiBOb3RlcyBmb3IgaW1wbGVtZW50b3JzIG9mIG5ldyBtb3VzZS1pbnRlcmZhY2UgbWV0aG9kczoKKyAqCisgKiBUaGUgY29kZSBpcyBsb2dpY2FsbHkgc3BsaXQgaW50byBhIGxvd2VyIGxldmVsIHRoYXQgYWNjZXB0cyBldmVudCByZXBvcnRzCisgKiBpbiBhIGRldmljZS1kZXBlbmRlbnQgZm9ybWF0IGFuZCBhbiB1cHBlciBsZXZlbCB0aGF0IHBhcnNlcyBtb3VzZSBnZXN0dXJlcworICogYW5kIGZpbHRlcnMgZXZlbnRzLiAgVGhlIG1lZGlhdGluZyBkYXRhIHN0cnVjdHVyZSBpcyBhIGNpcmN1bGFyIHF1ZXVlIG9mCisgKiBNRVZFTlQgc3RydWN0dXJlcy4KKyAqCisgKiBGdW5jdGlvbmFsbHksIHRoZSBsb3dlciBsZXZlbCdzIGpvYiBpcyB0byBwaWNrIHVwIHByaW1pdGl2ZSBldmVudHMgYW5kCisgKiBwdXQgdGhlbSBvbiB0aGUgY2lyY3VsYXIgcXVldWUuICBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mIHR3byB3YXlzOgorICogZWl0aGVyIChhKSBfbmNfbW91c2VfZXZlbnQoKSBkZXRlY3RzIGEgc2VyaWVzIG9mIGluY29taW5nIG1vdXNlIHJlcG9ydHMKKyAqIGFuZCBxdWV1ZXMgdGhlbSwgb3IgKGIpIGNvZGUgaW4gbGliX2dldGNoLmMgZGV0ZWN0cyB0aGUga21vdXMgcHJlZml4IGluCisgKiB0aGUga2V5Ym9hcmQgaW5wdXQgc3RyZWFtIGFuZCBjYWxscyBfbmNfbW91c2VfaW5saW5lIHRvIHF1ZXVlIHVwIGEgc2VyaWVzCisgKiBvZiBhZGphY2VudCBtb3VzZSByZXBvcnRzLgorICoKKyAqIEluIGVpdGhlciBjYXNlLCBfbmNfbW91c2VfcGFyc2UoKSBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSBzZXJpZXMgaXMKKyAqIGFjY2VwdGVkIHRvIHBhcnNlIHRoZSBkaWdlc3RlZCBtb3VzZSByZXBvcnRzIChsb3ctbGV2ZWwgTUVWRU5UcykgaW50bworICogYSBnZXN0dXJlIChhIGhpZ2gtbGV2ZWwgb3IgY29tcG9zaXRlIE1FVkVOVCkuCisgKgorICogRG9uJ3QgYmUgdG9vIHNoeSBhYm91dCBhZGRpbmcgbmV3IGV2ZW50IHR5cGVzIG9yIG1vZGlmaWVycywgaWYgeW91IGNhbiBmaW5kCisgKiByb29tIGZvciB0aGVtIGluIHRoZSAzMi1iaXQgbWFzay4gIFRoZSBBUEkgaXMgd3JpdHRlbiBzbyB0aGF0IHVzZXJzIGdldAorICogZmVlZGJhY2sgb24gd2hpY2ggdGhlb3JldGljYWwgZXZlbnQgdHlwZXMgdGhleSB3b24ndCBzZWUgd2hlbiB0aGV5IGNhbGwKKyAqIG1vdXNlbWFzay4gVGhlcmUncyBvbmUgYml0IHBlciBidXR0b24gKHRoZSBSRVNFUlZFRF9FVkVOVCBiaXQpIG5vdCBiZWluZworICogdXNlZCB5ZXQsIGFuZCBhIGNvdXBsZSBvZiBiaXRzIG9wZW4gYXQgdGhlIGhpZ2ggZW5kLgorICovCisKKyNpZmRlZiBfX0VNWF9fCisjICBpbmNsdWRlIDxpby5oPgorIyAgZGVmaW5lICBJTkNMX0RPUworIyAgZGVmaW5lICBJTkNMX1ZJTworIyAgZGVmaW5lICBJTkNMX0tCRAorIyAgZGVmaW5lICBJTkNMX01PVQorIyAgZGVmaW5lICBJTkNMX0RPU1BST0NFU1MKKyMgIGluY2x1ZGUgPG9zMi5oPgkJLyogTmVlZCB0byBpbmNsdWRlIGJlZm9yZSB0aGUgb3RoZXJzICovCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfbW91c2UuYyx2IDEuMTAyIDIwMDgvMTAvMTggMjE6NDg6NTUgdG9tIEV4cCAkIikKKworI2luY2x1ZGUgPHRlcm0uaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworI2lmIFVTRV9HUE1fU1VQUE9SVAorI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CS8qIGRlZmluZXMgS0dfKiBtYWNyb3MgKi8KKworI2lmZGVmIEhBVkVfTElCREwKKy8qIHVzZSBkeW5hbWljIGxvYWRlciB0byBhdm9pZCBsaW5rYWdlIGRlcGVuZGVuY3kgKi8KKyNpbmNsdWRlIDxkbGZjbi5oPgorCisjaWZkZWYgUlRMRF9OT1cKKyNkZWZpbmUgbXlfUlRMRCBSVExEX05PVworI2Vsc2UKKyNpZmRlZiBSVExEX0xBWlkKKyNkZWZpbmUgbXlfUlRMRCBSVExEX0xBWlkKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgkJCQkvKiBSVExEX05PVyAqLworI2VuZGlmCQkJCS8qIEhBVkVfTElCREwgKi8KKworI2VuZGlmCQkJCS8qIFVTRV9HUE1fU1VQUE9SVCAqLworCisjaWYgVVNFX1NZU01PVVNFCisjdW5kZWYgYnV0dG9ucwkJCS8qIHN5bWJvbCBjb25mbGljdCBpbiBjb25zaW8uaCAqLworI3VuZGVmIG1vdXNlX2luZm8JCS8qIHN5bWJvbCBjb25mbGljdCBpbiBjb25zaW8uaCAqLworI2luY2x1ZGUgPG9zcmVsZGF0ZS5oPgorI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMTcpCisjaW5jbHVkZSA8c3lzL2NvbnNpby5oPgorI2luY2x1ZGUgPHN5cy9mYmlvLmg+CisjZWxzZQorI2luY2x1ZGUgPG1hY2hpbmUvY29uc29sZS5oPgorI2VuZGlmCisjZW5kaWYJCQkJLyogdXNlX1NZU01PVVNFICovCisKKyNkZWZpbmUgTVlfVFJBQ0UgVFJBQ0VfSUNBTExTfFRSQUNFX0lFVkVOVAorCisjZGVmaW5lCU1BU0tfUkVMRUFTRSh4KQkJTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAwMSkKKyNkZWZpbmUJTUFTS19QUkVTUyh4KQkJTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAwMikKKyNkZWZpbmUJTUFTS19DTElDSyh4KQkJTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAwNCkKKyNkZWZpbmUJTUFTS19ET1VCTEVfQ0xJQ0soeCkJTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAxMCkKKyNkZWZpbmUJTUFTS19UUklQTEVfQ0xJQ0soeCkJTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAyMCkKKyNkZWZpbmUJTUFTS19SRVNFUlZFRF9FVkVOVCh4KQlOQ1VSU0VTX01PVVNFX01BU0soeCwgMDQwKQorCisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyNkZWZpbmUgQlVUVE9OX0NMSUNLRUQgICAgICAgIChCVVRUT04xX0NMSUNLRUQgICAgICAgIHwgQlVUVE9OMl9DTElDS0VEICAgICAgICB8IEJVVFRPTjNfQ0xJQ0tFRCAgICAgICAgfCBCVVRUT040X0NMSUNLRUQpCisjZGVmaW5lIEJVVFRPTl9QUkVTU0VEICAgICAgICAoQlVUVE9OMV9QUkVTU0VEICAgICAgICB8IEJVVFRPTjJfUFJFU1NFRCAgICAgICAgfCBCVVRUT04zX1BSRVNTRUQgICAgICAgIHwgQlVUVE9ONF9QUkVTU0VEKQorI2RlZmluZSBCVVRUT05fUkVMRUFTRUQgICAgICAgKEJVVFRPTjFfUkVMRUFTRUQgICAgICAgfCBCVVRUT04yX1JFTEVBU0VEICAgICAgIHwgQlVUVE9OM19SRUxFQVNFRCAgICAgICB8IEJVVFRPTjRfUkVMRUFTRUQpCisjZGVmaW5lIEJVVFRPTl9ET1VCTEVfQ0xJQ0tFRCAoQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCB8IEJVVFRPTjJfRE9VQkxFX0NMSUNLRUQgfCBCVVRUT04zX0RPVUJMRV9DTElDS0VEIHwgQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUgQlVUVE9OX1RSSVBMRV9DTElDS0VEIChCVVRUT04xX1RSSVBMRV9DTElDS0VEIHwgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCB8IEJVVFRPTjNfVFJJUExFX0NMSUNLRUQgfCBCVVRUT040X1RSSVBMRV9DTElDS0VEKQorI2RlZmluZSBNQVhfQlVUVE9OUyAgNAorI2Vsc2UKKyNkZWZpbmUgQlVUVE9OX0NMSUNLRUQgICAgICAgIChCVVRUT04xX0NMSUNLRUQgICAgICAgIHwgQlVUVE9OMl9DTElDS0VEICAgICAgICB8IEJVVFRPTjNfQ0xJQ0tFRCAgICAgICAgfCBCVVRUT040X0NMSUNLRUQgICAgICAgIHwgQlVUVE9ONV9DTElDS0VEKQorI2RlZmluZSBCVVRUT05fUFJFU1NFRCAgICAgICAgKEJVVFRPTjFfUFJFU1NFRCAgICAgICAgfCBCVVRUT04yX1BSRVNTRUQgICAgICAgIHwgQlVUVE9OM19QUkVTU0VEICAgICAgICB8IEJVVFRPTjRfUFJFU1NFRCAgICAgICAgfCBCVVRUT041X1BSRVNTRUQpCisjZGVmaW5lIEJVVFRPTl9SRUxFQVNFRCAgICAgICAoQlVUVE9OMV9SRUxFQVNFRCAgICAgICB8IEJVVFRPTjJfUkVMRUFTRUQgICAgICAgfCBCVVRUT04zX1JFTEVBU0VEICAgICAgIHwgQlVUVE9ONF9SRUxFQVNFRCAgICAgICB8IEJVVFRPTjVfUkVMRUFTRUQpCisjZGVmaW5lIEJVVFRPTl9ET1VCTEVfQ0xJQ0tFRCAoQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCB8IEJVVFRPTjJfRE9VQkxFX0NMSUNLRUQgfCBCVVRUT04zX0RPVUJMRV9DTElDS0VEIHwgQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCB8IEJVVFRPTjVfRE9VQkxFX0NMSUNLRUQpCisjZGVmaW5lIEJVVFRPTl9UUklQTEVfQ0xJQ0tFRCAoQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCB8IEJVVFRPTjJfVFJJUExFX0NMSUNLRUQgfCBCVVRUT04zX1RSSVBMRV9DTElDS0VEIHwgQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCB8IEJVVFRPTjVfVFJJUExFX0NMSUNLRUQpCisjZGVmaW5lIE1BWF9CVVRUT05TICA1CisjZW5kaWYKKworI2RlZmluZSBJTlZBTElEX0VWRU5UCS0xCisjZGVmaW5lIE5PUk1BTF9FVkVOVAkwCisKKyNpZiBVU0VfR1BNX1NVUFBPUlQKKworI2lmbmRlZiBMSUJHUE1fU09OQU1FCisjZGVmaW5lIExJQkdQTV9TT05BTUUgImxpYmdwbS5zbyIKKyNlbmRpZgorCisjZGVmaW5lIEdFVF9ETFNZTShuYW1lKSAobXlfIyNuYW1lID0gKFRZUEVfIyNuYW1lKSBkbHN5bShTUC0+X2Rsb3Blbl9ncG0sICNuYW1lKSkKKworI2VuZGlmCQkJCS8qIFVTRV9HUE1fU1VQUE9SVCAqLworCitzdGF0aWMgYm9vbCBfbmNfbW91c2VfcGFyc2UoU0NSRUVOICosIGludCk7CitzdGF0aWMgdm9pZCBfbmNfbW91c2VfcmVzdW1lKFNDUkVFTiAqKTsKK3N0YXRpYyB2b2lkIF9uY19tb3VzZV93cmFwKFNDUkVFTiAqKTsKKworLyogbWFpbnRhaW4gYSBjaXJjdWxhciBsaXN0IG9mIG1vdXNlIGV2ZW50cyAqLworCisjZGVmaW5lIEZpcnN0RVYoc3ApCSgoc3ApLT5fbW91c2VfZXZlbnRzKQorI2RlZmluZSBMYXN0RVYoc3ApCSgoc3ApLT5fbW91c2VfZXZlbnRzICsgRVZfTUFYIC0gMSkKKworI3VuZGVmICBORVhUCisjZGVmaW5lIE5FWFQoZXApCSgoZXAgPj0gTGFzdEVWKHNwKSkgXAorCQkJID8gRmlyc3RFVihzcCkgXAorCQkJIDogZXAgKyAxKQorCisjdW5kZWYgIFBSRVYKKyNkZWZpbmUgUFJFVihlcCkJKChlcCA8PSBGaXJzdEVWKHNwKSkgXAorCQkJID8gTGFzdEVWKHNwKSBcCisJCQkgOiBlcCAtIDEpCisKKyNkZWZpbmUgSW5kZXhFVihzcCwgZXApCShlcCAtIEZpcnN0RVYoc3ApKQorCisjZGVmaW5lIFJ1blBhcmFtcyhzcCwgZXZlbnRwLCBydW5wKSBcCisJCShsb25nKSBJbmRleEVWKHNwLCBydW5wKSwgXAorCQkobG9uZykgKEluZGV4RVYoc3AsIGV2ZW50cCkgKyAoRVZfTUFYIC0gMSkpICUgRVZfTUFYCisKKyNpZmRlZiBUUkFDRQorc3RhdGljIHZvaWQKK190cmFjZV9zbG90KFNDUkVFTiAqc3AsIGNvbnN0IGNoYXIgKnRhZykKK3sKKyAgICBNRVZFTlQgKmVwOworCisgICAgX3RyYWNlZih0YWcpOworCisgICAgZm9yIChlcCA9IEZpcnN0RVYoc3ApOyBlcCA8PSBMYXN0RVYoc3ApOyBlcCsrKQorCV90cmFjZWYoIm1vdXNlIGV2ZW50IHF1ZXVlIHNsb3QgJWxkID0gJXMiLAorCQkobG9uZykgSW5kZXhFVihzcCwgZXApLAorCQlfbmNfdHJhY2Vtb3VzZShzcCwgZXApKTsKK30KKyNlbmRpZgorCisjaWYgVVNFX0VNWF9NT1VTRQorCisjICBkZWZpbmUgVE9QX1JPVyAgICAgICAgICAwCisjICBkZWZpbmUgTEVGVF9DT0wgICAgICAgICAwCisKKyMgIGRlZmluZSBNX0ZEKHNwKSBzcC0+X21vdXNlX2ZkCisKK3N0YXRpYyB2b2lkCit3cml0ZV9ldmVudChTQ1JFRU4gKnNwLCBpbnQgZG93biwgaW50IGJ1dHRvbiwgaW50IHgsIGludCB5KQoreworICAgIGNoYXIgYnVmWzZdOworICAgIHVuc2lnbmVkIGxvbmcgaWdub3JlOworCisgICAgc3RybmNweShidWYsIGtleV9tb3VzZSwgMyk7CS8qIHNob3VsZCBiZSAiXDAzM1tNIiAqLworICAgIGJ1ZlszXSA9ICcgJyArIChidXR0b24gLSAxKSArIChkb3duID8gMCA6IDB4NDApOworICAgIGJ1Zls0XSA9ICcgJyArIHggLSBMRUZUX0NPTCArIDE7CisgICAgYnVmWzVdID0gJyAnICsgeSAtIFRPUF9ST1cgKyAxOworICAgIERvc1dyaXRlKHNwLT5fZW14bW91c2Vfd2ZkLCBidWYsIDYsICZpZ25vcmUpOworfQorCitzdGF0aWMgdm9pZAorbW91c2Vfc2VydmVyKHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisgICAgU0NSRUVOICpzcCA9IChTQ1JFRU4gKikgcGFyYW07CisgICAgdW5zaWduZWQgc2hvcnQgZldhaXQgPSBNT1VfV0FJVDsKKyAgICAvKiBOT1BUUlJFQ1QgbW91cnQgPSB7IDAsMCwyNCw3OSB9OyAqLworICAgIE1PVUVWRU5USU5GTyBtb3VldjsKKyAgICBITU9VIGhtb3U7CisgICAgdW5zaWduZWQgc2hvcnQgbWFzayA9IE1PVVNFX0JOMV9ET1dOIHwgTU9VU0VfQk4yX0RPV04gfCBNT1VTRV9CTjNfRE9XTjsKKyAgICBpbnQgbmJ1dHRvbnMgPSAzOworICAgIGludCBvbGRzdGF0ZSA9IDA7CisgICAgY2hhciBlcnJbODBdOworICAgIHVuc2lnbmVkIGxvbmcgcmM7CisKKyAgICAvKiBvcGVuIHRoZSBoYW5kbGUgZm9yIHRoZSBtb3VzZSAqLworICAgIGlmIChNb3VPcGVuKE5VTEwsICZobW91KSA9PSAwKSB7CisJcmMgPSBNb3VTZXRFdmVudE1hc2soJm1hc2ssIGhtb3UpOworCWlmIChyYykgewkJLyogcmV0cnkgd2l0aCAyIGJ1dHRvbnMgKi8KKwkgICAgbWFzayA9IE1PVVNFX0JOMV9ET1dOIHwgTU9VU0VfQk4yX0RPV047CisJICAgIHJjID0gTW91U2V0RXZlbnRNYXNrKCZtYXNrLCBobW91KTsKKwkgICAgbmJ1dHRvbnMgPSAyOworCX0KKwlpZiAocmMgPT0gMCAmJiBNb3VEcmF3UHRyKGhtb3UpID09IDApIHsKKwkgICAgZm9yICg7OykgeworCQkvKiBzaXQgYW5kIHdhaXQgb24gdGhlIGV2ZW50IHF1ZXVlICovCisJCXJjID0gTW91UmVhZEV2ZW50UXVlKCZtb3VldiwgJmZXYWl0LCBobW91KTsKKwkJaWYgKHJjKSB7CisJCSAgICBzcHJpbnRmKGVyciwgIkVycm9yIHJlYWRpbmcgbW91c2UgcXVldWUsIHJjPSVsdS5cclxuIiwgcmMpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKCFzcC0+X2VteG1vdXNlX2FjdGl2YXRlZCkKKwkJICAgIGdvdG8gZmluaXNoOworCisJCS8qCisJCSAqIE9TLzIgbnVtYmVycyBhIDMtYnV0dG9uIG1vdXNlIGluY29uc2lzdGVudGx5IGZyb20gb3RoZXIKKwkJICogcGxhdGZvcm1zOgorCQkgKiAgICAgIDEgPSBsZWZ0CisJCSAqICAgICAgMiA9IHJpZ2h0CisJCSAqICAgICAgMyA9IG1pZGRsZS4KKwkJICovCisJCWlmICgobW91ZXYuZnMgXiBvbGRzdGF0ZSkgJiBNT1VTRV9CTjFfRE9XTikKKwkJICAgIHdyaXRlX2V2ZW50KHNwLCBtb3Vldi5mcyAmIE1PVVNFX0JOMV9ET1dOLAorCQkJCXNwLT5fZW14bW91c2VfYnV0dG9uc1sxXSwgbW91ZXYuY29sLCBtb3Vldi5yb3cpOworCQlpZiAoKG1vdWV2LmZzIF4gb2xkc3RhdGUpICYgTU9VU0VfQk4yX0RPV04pCisJCSAgICB3cml0ZV9ldmVudChzcCwgbW91ZXYuZnMgJiBNT1VTRV9CTjJfRE9XTiwKKwkJCQlzcC0+X2VteG1vdXNlX2J1dHRvbnNbM10sIG1vdWV2LmNvbCwgbW91ZXYucm93KTsKKwkJaWYgKChtb3Vldi5mcyBeIG9sZHN0YXRlKSAmIE1PVVNFX0JOM19ET1dOKQorCQkgICAgd3JpdGVfZXZlbnQoc3AsIG1vdWV2LmZzICYgTU9VU0VfQk4zX0RPV04sCisJCQkJc3AtPl9lbXhtb3VzZV9idXR0b25zWzJdLCBtb3Vldi5jb2wsIG1vdWV2LnJvdyk7CisKKwkgICAgICBmaW5pc2g6CisJCW9sZHN0YXRlID0gbW91ZXYuZnM7CisJICAgIH0KKwl9IGVsc2UKKwkgICAgc3ByaW50ZihlcnIsICJFcnJvciBzZXR0aW5nIGV2ZW50IG1hc2ssIGJ1dHRvbnM9JWQsIHJjPSVsdS5cclxuIiwKKwkJICAgIG5idXR0b25zLCByYyk7CisKKwlEb3NXcml0ZSgyLCBlcnIsIHN0cmxlbihlcnIpLCAmcmMpOworCU1vdUNsb3NlKGhtb3UpOworICAgIH0KKyAgICBEb3NFeGl0KEVYSVRfVEhSRUFELCAwTCk7Cit9CisKKyNlbmRpZiAvKiBVU0VfRU1YX01PVVNFICovCisKKyNpZiBVU0VfU1lTTU9VU0UKK3N0YXRpYyB2b2lkCitzeXNtb3VzZV9zZXJ2ZXIoU0NSRUVOICpzcCkKK3sKKyAgICBzdHJ1Y3QgbW91c2VfaW5mbyB0aGVfbW91c2U7CisgICAgTUVWRU5UICp3b3JrOworCisgICAgdGhlX21vdXNlLm9wZXJhdGlvbiA9IE1PVVNFX0dFVElORk87CisgICAgaWYgKHNwICE9IDAKKwkmJiBzcC0+X21vdXNlX2ZkID49IDAKKwkmJiBzcC0+X3N5c21vdXNlX3RhaWwgPCBGSUZPX1NJWkUKKwkmJiBpb2N0bChzcC0+X21vdXNlX2ZkLCBDT05TX01PVVNFQ1RMLCAmdGhlX21vdXNlKSAhPSAtMSkgeworCisJaWYgKHNwLT5fc3lzbW91c2VfaGVhZCA+IHNwLT5fc3lzbW91c2VfdGFpbCkgeworCSAgICBzcC0+X3N5c21vdXNlX3RhaWwgPSAwOworCSAgICBzcC0+X3N5c21vdXNlX2hlYWQgPSAwOworCX0KKwl3b3JrID0gJihzcC0+X3N5c21vdXNlX2ZpZm9bc3AtPl9zeXNtb3VzZV90YWlsXSk7CisJbWVtc2V0KHdvcmssIDAsIHNpemVvZigqd29yaykpOworCXdvcmstPmlkID0gTk9STUFMX0VWRU5UOwkvKiB0aGVyZSdzIG9ubHkgb25lIG1vdXNlLi4uICovCisKKwlzcC0+X3N5c21vdXNlX29sZF9idXR0b25zID0gc3AtPl9zeXNtb3VzZV9uZXdfYnV0dG9uczsKKwlzcC0+X3N5c21vdXNlX25ld19idXR0b25zID0gdGhlX21vdXNlLnUuZGF0YS5idXR0b25zICYgMHg3OworCisJaWYgKHNwLT5fc3lzbW91c2VfbmV3X2J1dHRvbnMpIHsKKwkgICAgaWYgKHNwLT5fc3lzbW91c2VfbmV3X2J1dHRvbnMgJiAxKQorCQl3b3JrLT5ic3RhdGUgfD0gQlVUVE9OMV9QUkVTU0VEOworCSAgICBpZiAoc3AtPl9zeXNtb3VzZV9uZXdfYnV0dG9ucyAmIDIpCisJCXdvcmstPmJzdGF0ZSB8PSBCVVRUT04yX1BSRVNTRUQ7CisJICAgIGlmIChzcC0+X3N5c21vdXNlX25ld19idXR0b25zICYgNCkKKwkJd29yay0+YnN0YXRlIHw9IEJVVFRPTjNfUFJFU1NFRDsKKwl9IGVsc2UgeworCSAgICBpZiAoc3AtPl9zeXNtb3VzZV9vbGRfYnV0dG9ucyAmIDEpCisJCXdvcmstPmJzdGF0ZSB8PSBCVVRUT04xX1JFTEVBU0VEOworCSAgICBpZiAoc3AtPl9zeXNtb3VzZV9vbGRfYnV0dG9ucyAmIDIpCisJCXdvcmstPmJzdGF0ZSB8PSBCVVRUT04yX1JFTEVBU0VEOworCSAgICBpZiAoc3AtPl9zeXNtb3VzZV9vbGRfYnV0dG9ucyAmIDQpCisJCXdvcmstPmJzdGF0ZSB8PSBCVVRUT04zX1JFTEVBU0VEOworCX0KKworCS8qIGZvciBjb3NtZXRpYyBidWcgaW4gc3lzY29ucy5jIG9uIEZyZWVCU0QgMy5bMzRdICovCisJdGhlX21vdXNlLm9wZXJhdGlvbiA9IE1PVVNFX0hJREU7CisJaW9jdGwoc3AtPl9tb3VzZV9mZCwgQ09OU19NT1VTRUNUTCwgJnRoZV9tb3VzZSk7CisJdGhlX21vdXNlLm9wZXJhdGlvbiA9IE1PVVNFX1NIT1c7CisJaW9jdGwoc3AtPl9tb3VzZV9mZCwgQ09OU19NT1VTRUNUTCwgJnRoZV9tb3VzZSk7CisKKwkvKgorCSAqIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpZiB0aGUgYnV0dG9uIGlzIHByZXNzZWQgb3IgcmVsZWFzZWQuCisJICogRklYTUU6IGltcGxlbWVudCBjb250aW51b3VzIGV2ZW50LXRyYWNraW5nLgorCSAqLworCWlmIChzcC0+X3N5c21vdXNlX25ld19idXR0b25zICE9IHNwLT5fc3lzbW91c2Vfb2xkX2J1dHRvbnMpIHsKKwkgICAgc3AtPl9zeXNtb3VzZV90YWlsICs9IDE7CisJfQorCXdvcmstPnggPSB0aGVfbW91c2UudS5kYXRhLnggLyBzcC0+X3N5c21vdXNlX2NoYXJfd2lkdGg7CisJd29yay0+eSA9IHRoZV9tb3VzZS51LmRhdGEueSAvIHNwLT5fc3lzbW91c2VfY2hhcl9oZWlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3N5c21vdXNlKGludCBzaWcgR0NDX1VOVVNFRCkKK3sKKyAgICBzeXNtb3VzZV9zZXJ2ZXIoU1ApOworfQorI2VuZGlmIC8qIFVTRV9TWVNNT1VTRSAqLworCitzdGF0aWMgdm9pZAoraW5pdF94dGVybV9tb3VzZShTQ1JFRU4gKnNwKQoreworICAgIHNwLT5fbW91c2VfdHlwZSA9IE1fWFRFUk07CisgICAgc3AtPl9tb3VzZV94dGVybWNhcCA9IHRpZ2V0c3RyKCJYTSIpOworICAgIGlmICghVkFMSURfU1RSSU5HKHNwLT5fbW91c2VfeHRlcm1jYXApKQorCXNwLT5fbW91c2VfeHRlcm1jYXAgPSAiXDAzM1s/MTAwMCU/JXAxJXsxfSU9JXRoJWVsJTsiOworfQorCitzdGF0aWMgdm9pZAorZW5hYmxlX3h0ZXJtX21vdXNlKFNDUkVFTiAqc3AsIGludCBlbmFibGUpCit7CisjaWYgVVNFX0VNWF9NT1VTRQorICAgIHNwLT5fZW14bW91c2VfYWN0aXZhdGVkID0gZW5hYmxlOworI2Vsc2UKKyAgICBwdXRwKFRQQVJNXzEoc3AtPl9tb3VzZV94dGVybWNhcCwgZW5hYmxlKSk7CisjZW5kaWYKKyAgICBzcC0+X21vdXNlX2FjdGl2ZSA9IGVuYWJsZTsKK30KKworI2lmIFVTRV9HUE1fU1VQUE9SVAorc3RhdGljIGJvb2wKK2FsbG93X2dwbV9tb3VzZSh2b2lkKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICAvKiBHUE0gZG9lcyBwcmludGYncyB3aXRob3V0IGNoZWNraW5nIGlmIHN0ZG91dCBpcyBhIHRlcm1pbmFsICovCisgICAgaWYgKGlzYXR0eShmaWxlbm8oc3Rkb3V0KSkpIHsKKwljaGFyICpsaXN0ID0gZ2V0ZW52KCJOQ1VSU0VTX0dQTV9URVJNUyIpOworCWNoYXIgKmVudiA9IGdldGVudigiVEVSTSIpOworCWlmIChsaXN0ICE9IDApIHsKKwkgICAgaWYgKGVudiAhPSAwKSB7CisJCXJlc3VsdCA9IF9uY19uYW1lX21hdGNoKGxpc3QsIGVudiwgInw6Iik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICAvKiBHUE0gY2hlY2tzIHRoZSBiZWdpbm5pbmcgb2YgdGhlICRURVJNIHZhcmlhYmxlIHRvIGRlY2lkZSBpZiBpdAorCSAgICAgKiBzaG91bGQgcGFzcyB4dGVybSBldmVudHMgdGhyb3VnaC4gIFRoZXJlIGlzIG5vIHJlYWwgYWR2YW50YWdlIGluCisJICAgICAqIGFsbG93aW5nIEdQTSB0byBkbyB0aGlzLiAgUmVjZW50IHZlcnNpb25zIHJlbGF4IHRoYXQgY2hlY2ssIGFuZAorCSAgICAgKiBwcmV0ZW5kIHRoYXQgR1BNIGNhbiB3b3JrIHdpdGggYW55IHRlcm1pbmFsIGhhdmluZyB0aGUga21vdXMKKwkgICAgICogY2FwYWJpbGl0eS4gIFBlcmhhcHMgdGhhdCB3b3JrcyBmb3Igc29tZW9uZS4gIElmIHNvLCB0aGV5IGNhbgorCSAgICAgKiBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIChhYm92ZSkuCisJICAgICAqLworCSAgICBpZiAoZW52ICE9IDAgJiYgc3Ryc3RyKGVudiwgImxpbnV4IikgIT0gMCkgeworCQlyZXN1bHQgPSBUUlVFOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWZkZWYgSEFWRV9MSUJETAorc3RhdGljIHZvaWQKK3VubG9hZF9ncG1fbGlicmFyeShTQ1JFRU4gKnNwKQoreworICAgIGlmIChTUC0+X2Rsb3Blbl9ncG0gIT0gMCkgeworCVQoKCJ1bmxvYWQgR1BNIGxpYnJhcnkiKSk7CisJc3AtPl9tb3VzZV9ncG1fbG9hZGVkID0gRkFMU0U7CisJc3AtPl9tb3VzZV9mZCA9IC0xOworCWRsY2xvc2Uoc3AtPl9kbG9wZW5fZ3BtKTsKKwlzcC0+X2Rsb3Blbl9ncG0gPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2xvYWRfZ3BtX2xpYnJhcnkoU0NSRUVOICpzcCkKK3sKKyAgICBzcC0+X21vdXNlX2dwbV9mb3VuZCA9IEZBTFNFOworICAgIGlmICgoc3AtPl9kbG9wZW5fZ3BtID0gZGxvcGVuKExJQkdQTV9TT05BTUUsIG15X1JUTEQpKSAhPSAwKSB7CisJaWYgKEdFVF9ETFNZTShncG1fZmQpID09IDAgfHwKKwkgICAgR0VUX0RMU1lNKEdwbV9PcGVuKSA9PSAwIHx8CisJICAgIEdFVF9ETFNZTShHcG1fQ2xvc2UpID09IDAgfHwKKwkgICAgR0VUX0RMU1lNKEdwbV9HZXRFdmVudCkgPT0gMCkgeworCSAgICBUKCgiR1BNIGluaXRpYWxpemF0aW9uIGZhaWxlZDogJXMiLCBkbGVycm9yKCkpKTsKKwkgICAgdW5sb2FkX2dwbV9saWJyYXJ5KHNwKTsKKwl9IGVsc2UgeworCSAgICBzcC0+X21vdXNlX2dwbV9mb3VuZCA9IFRSVUU7CisJICAgIHNwLT5fbW91c2VfZ3BtX2xvYWRlZCA9IFRSVUU7CisJfQorICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbAorZW5hYmxlX2dwbV9tb3VzZShTQ1JFRU4gKnNwLCBib29sIGVuYWJsZSkKK3sKKyAgICBib29sIHJlc3VsdDsKKworICAgIFQoKFRfQ0FMTEVEKCJlbmFibGVfZ3BtX21vdXNlKCVkKSIpLCBlbmFibGUpKTsKKworICAgIGlmIChlbmFibGUgJiYgIXNwLT5fbW91c2VfYWN0aXZlKSB7CisjaWZkZWYgSEFWRV9MSUJETAorCWlmIChzcC0+X21vdXNlX2dwbV9mb3VuZCAmJiAhc3AtPl9tb3VzZV9ncG1fbG9hZGVkKSB7CisJICAgIGxvYWRfZ3BtX2xpYnJhcnkoc3ApOworCX0KKyNlbmRpZgorCWlmIChzcC0+X21vdXNlX2dwbV9sb2FkZWQpIHsKKwkgICAgLyogR1BNOiBpbml0aWFsaXplIGNvbm5lY3Rpb24gdG8gZ3BtIHNlcnZlciAqLworCSAgICBzcC0+X21vdXNlX2dwbV9jb25uZWN0LmV2ZW50TWFzayA9IEdQTV9ET1dOIHwgR1BNX1VQOworCSAgICBzcC0+X21vdXNlX2dwbV9jb25uZWN0LmRlZmF1bHRNYXNrID0KKwkJKHVuc2lnbmVkIHNob3J0KSAofihzcC0+X21vdXNlX2dwbV9jb25uZWN0LmV2ZW50TWFzayB8IEdQTV9IQVJEKSk7CisJICAgIHNwLT5fbW91c2VfZ3BtX2Nvbm5lY3QubWluTW9kID0gMDsKKwkgICAgc3AtPl9tb3VzZV9ncG1fY29ubmVjdC5tYXhNb2QgPQorCQkodW5zaWduZWQgc2hvcnQpICh+KCgxIDw8IEtHX1NISUZUKSB8CisJCQkJICAgICgxIDw8IEtHX1NISUZUTCkgfAorCQkJCSAgICAoMSA8PCBLR19TSElGVFIpKSk7CisJICAgIC8qCisJICAgICAqIE5vdGU6IEdQTSBoYXJkY29kZXMgXEVbPzEwMDFzIGFuZCBcRVs/MTAwMGggZHVyaW5nIGl0cyBvcGVuLgorCSAgICAgKiBUaGUgZm9ybWVyIGlzIHJlY29nbml6ZWQgYnkgd3Njb25zIChTdW5PUyksIGFuZCB0aGUgbGF0dGVyIGJ5CisJICAgICAqIHh0ZXJtLiAgVGhvc2Ugd2lsbCBub3Qgc2hvdyB1cCBpbiBuY3Vyc2VzJyB0cmFjZXMuCisJICAgICAqLworCSAgICByZXN1bHQgPSAobXlfR3BtX09wZW4oJnNwLT5fbW91c2VfZ3BtX2Nvbm5lY3QsIDApID49IDApOworCX0gZWxzZSB7CisJICAgIHJlc3VsdCA9IEZBTFNFOworCX0KKwlzcC0+X21vdXNlX2FjdGl2ZSA9IHJlc3VsdDsKKwlUKCgiR1BNIG9wZW4gJXMiLCByZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiKSk7CisgICAgfSBlbHNlIHsKKwlpZiAoIWVuYWJsZSAmJiBzcC0+X21vdXNlX2FjdGl2ZSkgeworCSAgICAvKiBHUE06IGNsb3NlIGNvbm5lY3Rpb24gdG8gZ3BtIHNlcnZlciAqLworCSAgICBteV9HcG1fQ2xvc2UoKTsKKwkgICAgc3AtPl9tb3VzZV9hY3RpdmUgPSBGQUxTRTsKKwkgICAgVCgoIkdQTSBjbG9zZWQiKSk7CisJfQorCXJlc3VsdCA9IGVuYWJsZTsKKyAgICB9CisjaWZkZWYgSEFWRV9MSUJETAorICAgIGlmICghcmVzdWx0KSB7CisJdW5sb2FkX2dwbV9saWJyYXJ5KHNwKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm5Cb29sKHJlc3VsdCk7Cit9CisjZW5kaWYgLyogVVNFX0dQTV9TVVBQT1JUICovCisKKyNkZWZpbmUgeHRlcm1fa21vdXMgIlwwMzNbTSIKKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVfbW91c2V0eXBlKFNDUkVFTiAqc3ApCit7CisgICAgVCgoVF9DQUxMRUQoImluaXRpYWxpemVfbW91c2V0eXBlKCkiKSkpOworCisgICAgLyogVHJ5IGdwbSBmaXJzdCwgYmVjYXVzZSBncG0gbWF5IGJlIGNvbmZpZ3VyZWQgdG8gcnVuIGluIHh0ZXJtICovCisjaWYgVVNFX0dQTV9TVVBQT1JUCisgICAgaWYgKGFsbG93X2dwbV9tb3VzZSgpKSB7CisJaWYgKCFzcC0+X21vdXNlX2dwbV9sb2FkZWQpIHsKKyNpZmRlZiBIQVZFX0xJQkRMCisJICAgIGxvYWRfZ3BtX2xpYnJhcnkoc3ApOworI2Vsc2UgLyogIUhBVkVfTElCREwgKi8KKwkgICAgc3AtPl9tb3VzZV9ncG1fZm91bmQgPSBUUlVFOworCSAgICBzcC0+X21vdXNlX2dwbV9sb2FkZWQgPSBUUlVFOworI2VuZGlmCisJfQorCisJLyoKKwkgKiBUaGUgZ3BtX2ZkIGZpbGUtZGVzY3JpcHRvciBtYXkgYmUgbmVnYXRpdmUgKHh0ZXJtKS4gIFNvIHdlIGhhdmUgdG8KKwkgKiBtYWludGFpbiBvdXIgbm90aW9uIG9mIHdoZXRoZXIgdGhlIG1vdXNlIGNvbm5lY3Rpb24gaXMgYWN0aXZlCisJICogd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlLWRlc2NyaXB0b3IuCisJICovCisJaWYgKHNwLT5fbW91c2VfZ3BtX2ZvdW5kICYmIGVuYWJsZV9ncG1fbW91c2Uoc3AsIFRSVUUpKSB7CisJICAgIHNwLT5fbW91c2VfdHlwZSA9IE1fR1BNOworCSAgICBzcC0+X21vdXNlX2ZkID0gKihteV9ncG1fZmQpOworCSAgICBUKCgiR1BNIG1vdXNlX2ZkICVkIiwgc3AtPl9tb3VzZV9mZCkpOworCSAgICByZXR1cm5Wb2lkOworCX0KKyAgICB9CisjZW5kaWYgLyogVVNFX0dQTV9TVVBQT1JUICovCisKKyAgICAvKiBPUy8yIFZJTyAqLworI2lmIFVTRV9FTVhfTU9VU0UKKyAgICBpZiAoIXNwLT5fZW14bW91c2VfdGhyZWFkCisJJiYgc3Ryc3RyKGN1cl90ZXJtLT50eXBlLnRlcm1fbmFtZXMsICJ4dGVybSIpID09IDAKKwkmJiBrZXlfbW91c2UpIHsKKwlpbnQgaGFuZGxlc1syXTsKKworCWlmIChwaXBlKGhhbmRsZXMpIDwgMCkgeworCSAgICBwZXJyb3IoIm1vdXNlIHBpcGUgZXJyb3IiKTsKKwkgICAgcmV0dXJuVm9pZDsKKwl9IGVsc2UgeworCSAgICBpbnQgcmM7CisKKwkgICAgaWYgKCFzcC0+X2VteG1vdXNlX2J1dHRvbnNbMF0pIHsKKwkJY2hhciAqcyA9IGdldGVudigiTU9VU0VfQlVUVE9OU18xMjMiKTsKKworCQlzcC0+X2VteG1vdXNlX2J1dHRvbnNbMF0gPSAxOworCQlpZiAocyAmJiBzdHJsZW4ocykgPj0gMykgeworCQkgICAgc3AtPl9lbXhtb3VzZV9idXR0b25zWzFdID0gc1swXSAtICcwJzsKKwkJICAgIHNwLT5fZW14bW91c2VfYnV0dG9uc1syXSA9IHNbMV0gLSAnMCc7CisJCSAgICBzcC0+X2VteG1vdXNlX2J1dHRvbnNbM10gPSBzWzJdIC0gJzAnOworCQl9IGVsc2UgeworCQkgICAgc3AtPl9lbXhtb3VzZV9idXR0b25zWzFdID0gMTsKKwkJICAgIHNwLT5fZW14bW91c2VfYnV0dG9uc1syXSA9IDM7CisJCSAgICBzcC0+X2VteG1vdXNlX2J1dHRvbnNbM10gPSAyOworCQl9CisJICAgIH0KKwkgICAgc3AtPl9lbXhtb3VzZV93ZmQgPSBoYW5kbGVzWzFdOworCSAgICBNX0ZEKHNwKSA9IGhhbmRsZXNbMF07CisJICAgIC8qIE5lZWRlZD8gKi8KKwkgICAgc2V0bW9kZShoYW5kbGVzWzBdLCBPX0JJTkFSWSk7CisJICAgIHNldG1vZGUoaGFuZGxlc1sxXSwgT19CSU5BUlkpOworCSAgICAvKiBEbyBub3QgdXNlIENSVCBmdW5jdGlvbnMsIHdlIG1heSBzaW5nbGUtdGhyZWFkZWQuICovCisJICAgIHJjID0gRG9zQ3JlYXRlVGhyZWFkKCh1bnNpZ25lZCBsb25nICopICZzcC0+X2VteG1vdXNlX3RocmVhZCwKKwkJCQkgbW91c2Vfc2VydmVyLCAobG9uZykgc3AsIDAsIDgxOTIpOworCSAgICBpZiAocmMpIHsKKwkJcHJpbnRmKCJtb3VzZSB0aHJlYWQgZXJyb3IgJWQ9JSN4IiwgcmMsIHJjKTsKKwkgICAgfSBlbHNlIHsKKwkJc3AtPl9tb3VzZV90eXBlID0gTV9YVEVSTTsKKwkgICAgfQorCSAgICByZXR1cm5Wb2lkOworCX0KKyAgICB9CisjZW5kaWYgLyogVVNFX0VNWF9NT1VTRSAqLworCisjaWYgVVNFX1NZU01PVVNFCisgICAgeworCXN0cnVjdCBtb3VzZV9pbmZvIHRoZV9tb3VzZTsKKwljaGFyICp0aGVfZGV2aWNlID0gMDsKKworCWlmIChpc2F0dHkoc3AtPl9pZmQpKQorCSAgICB0aGVfZGV2aWNlID0gdHR5bmFtZShzcC0+X2lmZCk7CisJaWYgKHRoZV9kZXZpY2UgPT0gMCkKKwkgICAgdGhlX2RldmljZSA9ICIvZGV2L3R0eSI7CisKKwlzcC0+X21vdXNlX2ZkID0gb3Blbih0aGVfZGV2aWNlLCBPX1JEV1IpOworCisJaWYgKHNwLT5fbW91c2VfZmQgPj0gMCkgeworCSAgICAvKgorCSAgICAgKiBzeXNtb3VzZSBkb2VzIG5vdCBoYXZlIGEgdXNhYmxlIHVzZXIgaW50ZXJmYWNlIGZvciBvYnRhaW5pbmcKKwkgICAgICogbW91c2UgZXZlbnRzLiAgVGhlIGxvZ2ljYWwgd2F5IHRvIHByb2NlZWQgKHJlYWRpbmcgZGF0YSBvbiBhCisJICAgICAqIHN0cmVhbSkgb25seSB3b3JrcyBpZiBvbmUgb3BlbnMgdGhlIGRldmljZSBhcyByb290LiAgRXZlbiBpbgorCSAgICAgKiB0aGF0IG1vZGUsIGNhcmVmdWwgZXhhbWluYXRpb24gc2hvd3Mgd2UgbG9zZSBldmVudHMKKwkgICAgICogb2NjYXNpb25hbGx5LiAgVGhlIGludGVyZmFjZSBwcm92aWRlZCBmb3IgdXNlciBwcm9ncmFtcyBpcyB0bworCSAgICAgKiBlc3RhYmxpc2ggYSBzaWduYWwgaGFuZGxlci4gIHJlYWxseS4KKwkgICAgICoKKwkgICAgICogVGFrZSBvdmVyIFNJR1VTUjIgZm9yIHRoaXMgcHVycG9zZSBzaW5jZSBTSUdVU1IxIGlzIG1vcmUKKwkgICAgICogbGlrZWx5IHRvIGJlIHVzZWQgYnkgYW4gYXBwbGljYXRpb24uICBnZXRjaCgpIHdpbGwgaGF2ZSB0bworCSAgICAgKiBoYW5kbGUgdGhlIG1pc2xlYWRpbmcgRUlOVFIncy4KKwkgICAgICovCisJICAgIHNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKKwkgICAgdGhlX21vdXNlLm9wZXJhdGlvbiA9IE1PVVNFX01PREU7CisJICAgIHRoZV9tb3VzZS51Lm1vZGUubW9kZSA9IDA7CisJICAgIHRoZV9tb3VzZS51Lm1vZGUuc2lnbmFsID0gU0lHVVNSMjsKKwkgICAgaWYgKGlvY3RsKHNwLT5fbW91c2VfZmQsIENPTlNfTU9VU0VDVEwsICZ0aGVfbW91c2UpICE9IC0xKSB7CisJCXNpZ25hbChTSUdVU1IyLCBoYW5kbGVfc3lzbW91c2UpOworCQl0aGVfbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfU0hPVzsKKwkJaW9jdGwoc3AtPl9tb3VzZV9mZCwgQ09OU19NT1VTRUNUTCwgJnRoZV9tb3VzZSk7CisKKyNpZiBkZWZpbmVkKEZCSU9fTU9ERUlORk8pIHx8IGRlZmluZWQoQ09OU19NT0RFSU5GTykJLyogRnJlZUJTRCA+IDIueCAqLworCQl7CisjaWZuZGVmIEZCSU9fR0VUTU9ERQkJLyogRnJlZUJTRCAzLnggKi8KKyNkZWZpbmUgRkJJT19HRVRNT0RFICAgIENPTlNfR0VUCisjZGVmaW5lIEZCSU9fTU9ERUlORk8gICBDT05TX01PREVJTkZPCisjZW5kaWYgLyogRkJJT19HRVRNT0RFICovCisJCSAgICB2aWRlb19pbmZvX3QgdGhlX3ZpZGVvOworCisJCSAgICBpZiAoaW9jdGwoc3AtPl9tb3VzZV9mZCwKKwkJCSAgICAgIEZCSU9fR0VUTU9ERSwKKwkJCSAgICAgICZ0aGVfdmlkZW8udmlfbW9kZSkgIT0gLTEKKwkJCSYmIGlvY3RsKHNwLT5fbW91c2VfZmQsCisJCQkJIEZCSU9fTU9ERUlORk8sCisJCQkJICZ0aGVfdmlkZW8pICE9IC0xKSB7CisJCQlzcC0+X3N5c21vdXNlX2NoYXJfd2lkdGggPSB0aGVfdmlkZW8udmlfY3dpZHRoOworCQkJc3AtPl9zeXNtb3VzZV9jaGFyX2hlaWdodCA9IHRoZV92aWRlby52aV9jaGVpZ2h0OworCQkgICAgfQorCQl9CisjZW5kaWYgLyogZGVmaW5lZChGQklPX01PREVJTkZPKSB8fCBkZWZpbmVkKENPTlNfTU9ERUlORk8pICovCisKKwkJaWYgKHNwLT5fc3lzbW91c2VfY2hhcl93aWR0aCA8PSAwKQorCQkgICAgc3AtPl9zeXNtb3VzZV9jaGFyX3dpZHRoID0gODsKKwkJaWYgKHNwLT5fc3lzbW91c2VfY2hhcl9oZWlnaHQgPD0gMCkKKwkJICAgIHNwLT5fc3lzbW91c2VfY2hhcl9oZWlnaHQgPSAxNjsKKwkJc3AtPl9tb3VzZV90eXBlID0gTV9TWVNNT1VTRTsKKwkJcmV0dXJuVm9pZDsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogVVNFX1NZU01PVVNFICovCisKKyAgICAvKiB3ZSBrbm93IGhvdyB0byByZWNvZ25pemUgbW91c2UgZXZlbnRzIHVuZGVyICJ4dGVybSIgKi8KKyAgICBpZiAoa2V5X21vdXNlICE9IDApIHsKKwlpZiAoIXN0cmNtcChrZXlfbW91c2UsIHh0ZXJtX2ttb3VzKQorCSAgICB8fCBzdHJzdHIoY3VyX3Rlcm0tPnR5cGUudGVybV9uYW1lcywgInh0ZXJtIikgIT0gMCkgeworCSAgICBpbml0X3h0ZXJtX21vdXNlKHNwKTsKKwl9CisgICAgfSBlbHNlIGlmIChzdHJzdHIoY3VyX3Rlcm0tPnR5cGUudGVybV9uYW1lcywgInh0ZXJtIikgIT0gMCkgeworCWlmIChfbmNfYWRkX3RvX3RyeSgmKHNwLT5fa2V5dHJ5KSwgeHRlcm1fa21vdXMsIEtFWV9NT1VTRSkgPT0gT0spCisJICAgIGluaXRfeHRlcm1fbW91c2Uoc3ApOworICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQorCitzdGF0aWMgYm9vbAorX25jX21vdXNlX2luaXQoU0NSRUVOICpzcCkKKy8qIGluaXRpYWxpemUgdGhlIG1vdXNlICovCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBpbnQgaTsKKworICAgIGlmIChzcCAhPSAwKSB7CisJaWYgKCFzcC0+X21vdXNlX2luaXRpYWxpemVkKSB7CisJICAgIHNwLT5fbW91c2VfaW5pdGlhbGl6ZWQgPSBUUlVFOworCisJICAgIFRSKE1ZX1RSQUNFLCAoIl9uY19tb3VzZV9pbml0KCkgY2FsbGVkIikpOworCisJICAgIHNwLT5fbW91c2VfZXZlbnRwID0gRmlyc3RFVihzcCk7CisJICAgIGZvciAoaSA9IDA7IGkgPCBFVl9NQVg7IGkrKykKKwkJc3AtPl9tb3VzZV9ldmVudHNbaV0uaWQgPSBJTlZBTElEX0VWRU5UOworCisJICAgIGluaXRpYWxpemVfbW91c2V0eXBlKHNwKTsKKworCSAgICBUKCgiX25jX21vdXNlX2luaXQoKSBzZXQgbW91c2V0eXBlIHRvICVkIiwgc3AtPl9tb3VzZV90eXBlKSk7CisJfQorCXJlc3VsdCA9IHNwLT5fbW91c2VfaW5pdGlhbGl6ZWQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBRdWVyeSB0byBzZWUgaWYgdGhlcmUgaXMgYSBwZW5kaW5nIG1vdXNlIGV2ZW50LiAgVGhpcyBpcyBjYWxsZWQgZnJvbQorICogZmlmb19wdXNoKCkgaW4gbGliX2dldGNoLmMKKyAqLworc3RhdGljIGJvb2wKK19uY19tb3VzZV9ldmVudChTQ1JFRU4gKnNwIEdDQ19VTlVTRUQpCit7CisgICAgTUVWRU5UICpldmVudHAgPSBzcC0+X21vdXNlX2V2ZW50cDsKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgKHZvaWQpIGV2ZW50cDsKKworICAgIHN3aXRjaCAoc3AtPl9tb3VzZV90eXBlKSB7CisgICAgY2FzZSBNX1hURVJNOgorCS8qIHh0ZXJtOiBuZXZlciBoYXZlIHRvIHF1ZXJ5LCBtb3VzZSBldmVudHMgYXJlIGluIHRoZSBrZXlib2FyZCBzdHJlYW0gKi8KKyNpZiBVU0VfRU1YX01PVVNFCisJeworCSAgICBjaGFyIGtidWZbM107CisKKwkgICAgaW50IGksIHJlcyA9IHJlYWQoTV9GRChzcCksICZrYnVmLCAzKTsJLyogRWF0IHRoZSBwcmVmaXggKi8KKwkgICAgaWYgKHJlcyAhPSAzKQorCQlwcmludGYoIkdvdCAlZCBjaGFycyBpbnN0ZWFkIG9mIDMgZm9yIHByZWZpeC5cbiIsIHJlcyk7CisJICAgIGZvciAoaSA9IDA7IGkgPCByZXM7IGkrKykgeworCQlpZiAoa2J1ZltpXSAhPSBrZXlfbW91c2VbaV0pCisJCSAgICBwcmludGYoIkdvdCBjaGFyICVkIGluc3RlYWQgb2YgJWQgZm9yIHByZWZpeC5cbiIsCisJCQkgICAoaW50KSBrYnVmW2ldLCAoaW50KSBrZXlfbW91c2VbaV0pOworCSAgICB9CisJICAgIHJlc3VsdCA9IFRSVUU7CisJfQorI2VuZGlmIC8qIFVTRV9FTVhfTU9VU0UgKi8KKwlicmVhazsKKworI2lmIFVTRV9HUE1fU1VQUE9SVAorICAgIGNhc2UgTV9HUE06CisJeworCSAgICAvKiBxdWVyeSBzZXJ2ZXIgZm9yIGV2ZW50LCByZXR1cm4gVFJVRSBpZiB3ZSBmaW5kIG9uZSAqLworCSAgICBHcG1fRXZlbnQgZXY7CisKKwkgICAgaWYgKG15X0dwbV9HZXRFdmVudCgmZXYpID09IDEpIHsKKwkJLyogdGhlcmUncyBvbmx5IG9uZSBtb3VzZS4uLiAqLworCQlldmVudHAtPmlkID0gTk9STUFMX0VWRU5UOworCisJCWV2ZW50cC0+YnN0YXRlID0gMDsKKwkJc3dpdGNoIChldi50eXBlICYgMHgwZikgeworCQljYXNlIChHUE1fRE9XTik6CisJCSAgICBpZiAoZXYuYnV0dG9ucyAmIEdQTV9CX0xFRlQpCisJCQlldmVudHAtPmJzdGF0ZSB8PSBCVVRUT04xX1BSRVNTRUQ7CisJCSAgICBpZiAoZXYuYnV0dG9ucyAmIEdQTV9CX01JRERMRSkKKwkJCWV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTjJfUFJFU1NFRDsKKwkJICAgIGlmIChldi5idXR0b25zICYgR1BNX0JfUklHSFQpCisJCQlldmVudHAtPmJzdGF0ZSB8PSBCVVRUT04zX1BSRVNTRUQ7CisJCSAgICBicmVhazsKKwkJY2FzZSAoR1BNX1VQKToKKwkJICAgIGlmIChldi5idXR0b25zICYgR1BNX0JfTEVGVCkKKwkJCWV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTjFfUkVMRUFTRUQ7CisJCSAgICBpZiAoZXYuYnV0dG9ucyAmIEdQTV9CX01JRERMRSkKKwkJCWV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTjJfUkVMRUFTRUQ7CisJCSAgICBpZiAoZXYuYnV0dG9ucyAmIEdQTV9CX1JJR0hUKQorCQkJZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OM19SRUxFQVNFRDsKKwkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgICAgYnJlYWs7CisJCX0KKworCQlldmVudHAtPnggPSBldi54IC0gMTsKKwkJZXZlbnRwLT55ID0gZXYueSAtIDE7CisJCWV2ZW50cC0+eiA9IDA7CisKKwkJLyogYnVtcCB0aGUgbmV4dC1mcmVlIHBvaW50ZXIgaW50byB0aGUgY2lyY3VsYXIgbGlzdCAqLworCQlzcC0+X21vdXNlX2V2ZW50cCA9IGV2ZW50cCA9IE5FWFQoZXZlbnRwKTsKKwkJcmVzdWx0ID0gVFJVRTsKKwkgICAgfQorCX0KKwlicmVhazsKKyNlbmRpZgorCisjaWYgVVNFX1NZU01PVVNFCisgICAgY2FzZSBNX1NZU01PVVNFOgorCWlmIChzcC0+X3N5c21vdXNlX2hlYWQgPCBzcC0+X3N5c21vdXNlX3RhaWwpIHsKKwkgICAgKmV2ZW50cCA9IHNwLT5fc3lzbW91c2VfZmlmb1tzcC0+X3N5c21vdXNlX2hlYWRdOworCisJICAgIC8qCisJICAgICAqIFBvaW50IHRoZSBmaWZvLWhlYWQgdG8gdGhlIG5leHQgcG9zc2libGUgbG9jYXRpb24uICBJZiB0aGVyZQorCSAgICAgKiBhcmUgbm9uZSwgcmVzZXQgdGhlIGluZGljZXMuICBUaGlzIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUKKwkgICAgICogc2lnbmFsIGhhbmRsZXIsIGRvaW5nIGVzc2VudGlhbGx5IHRoZSBzYW1lIHJlc2V0LgorCSAgICAgKi8KKwkgICAgc3AtPl9zeXNtb3VzZV9oZWFkICs9IDE7CisJICAgIGlmIChzcC0+X3N5c21vdXNlX2hlYWQgPT0gc3AtPl9zeXNtb3VzZV90YWlsKSB7CisJCXNwLT5fc3lzbW91c2VfdGFpbCA9IDA7CisJCXNwLT5fc3lzbW91c2VfaGVhZCA9IDA7CisJICAgIH0KKworCSAgICAvKiBidW1wIHRoZSBuZXh0LWZyZWUgcG9pbnRlciBpbnRvIHRoZSBjaXJjdWxhciBsaXN0ICovCisJICAgIHNwLT5fbW91c2VfZXZlbnRwID0gZXZlbnRwID0gTkVYVChldmVudHApOworCSAgICByZXN1bHQgPSBUUlVFOworCX0KKwlicmVhazsKKyNlbmRpZiAvKiBVU0VfU1lTTU9VU0UgKi8KKworICAgIGNhc2UgTV9OT05FOgorCWJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CQkvKiB0cnVlIGlmIHdlIGZvdW5kIGFuIGV2ZW50ICovCit9CisKK3N0YXRpYyBib29sCitfbmNfbW91c2VfaW5saW5lKFNDUkVFTiAqc3ApCisvKiBtb3VzZSByZXBvcnQgcmVjZWl2ZWQgaW4gdGhlIGtleWJvYXJkIHN0cmVhbSAtLSBwYXJzZSBpdHMgaW5mbyAqLworeworICAgIGludCBiOworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisgICAgTUVWRU5UICpldmVudHAgPSBzcC0+X21vdXNlX2V2ZW50cDsKKworICAgIFRSKE1ZX1RSQUNFLCAoIl9uY19tb3VzZV9pbmxpbmUoKSBjYWxsZWQiKSk7CisKKyAgICBpZiAoc3AtPl9tb3VzZV90eXBlID09IE1fWFRFUk0pIHsKKwl1bnNpZ25lZCBjaGFyIGtidWZbNF07CisJbW1hc2tfdCBwcmV2OworCXNpemVfdCBncmFiYmVkOworCWludCByZXM7CisKKwkvKiBUaGlzIGNvZGUgcmVxdWlyZXMgdGhhdCB5b3VyIHh0ZXJtIGVudHJ5IGNvbnRhaW4gdGhlIGttb3VzCisJICogY2FwYWJpbGl0eSBhbmQgdGhhdCBpdCBiZSBzZXQgdG8gdGhlIFxFW00gZG9jdW1lbnRlZCBpbiB0aGUKKwkgKiBYdGVybSBDb250cm9sIFNlcXVlbmNlcyByZWZlcmVuY2UuICBUaGlzIGlzIGhvdyB3ZQorCSAqIGFycmFuZ2UgZm9yIG1vdXNlIGV2ZW50cyB0byBiZSByZXBvcnRlZCB2aWEgYSBLRVlfTU9VU0UKKwkgKiByZXR1cm4gdmFsdWUgZnJvbSB3Z2V0Y2goKS4gIEFmdGVyIHRoaXMgdmFsdWUgaXMgcmVjZWl2ZWQsCisJICogX25jX21vdXNlX2lubGluZSgpIGdldHMgY2FsbGVkIGFuZCBpcyBpbW1lZGlhdGVseQorCSAqIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIHRoZSBtb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KKwkgKiBmb2xsb3dpbmcgdGhlIHByZWZpeC4KKwkgKgorCSAqIFRoZSBmb2xsb3dpbmcgcXVvdGVzIGZyb20gdGhlIGN0cmxzZXFzLm1zIGRvY3VtZW50IGluIHRoZQorCSAqIFggZGlzdHJpYnV0aW9uLCBkZXNjcmliaW5nIHRoZSBYIG1vdXNlIHRyYWNraW5nIGZlYXR1cmU6CisJICoKKwkgKiBQYXJhbWV0ZXJzIGZvciBhbGwgbW91c2UgdHJhY2tpbmcgZXNjYXBlIHNlcXVlbmNlcworCSAqIGdlbmVyYXRlZCBieSB4dGVybSBlbmNvZGUgbnVtZXJpYyBwYXJhbWV0ZXJzIGluIGEgc2luZ2xlCisJICogY2hhcmFjdGVyIGFzIHZhbHVlKzA0MC4gIEZvciBleGFtcGxlLCAhICBpcyAxLgorCSAqCisJICogT24gYnV0dG9uIHByZXNzIG9yIHJlbGVhc2UsIHh0ZXJtIHNlbmRzIEVTQyBbIE0gQ2JDeEN5LgorCSAqIFRoZSBsb3cgdHdvIGJpdHMgb2YgQ2IgZW5jb2RlIGJ1dHRvbiBpbmZvcm1hdGlvbjogMD1NQjEKKwkgKiBwcmVzc2VkLCAxPU1CMiBwcmVzc2VkLCAyPU1CMyBwcmVzc2VkLCAzPXJlbGVhc2UuICBUaGUKKwkgKiB1cHBlciBiaXRzIGVuY29kZSB3aGF0IG1vZGlmaWVycyB3ZXJlIGRvd24gd2hlbiB0aGUKKwkgKiBidXR0b24gd2FzIHByZXNzZWQgYW5kIGFyZSBhZGRlZCB0b2dldGhlci4gIDQ9U2hpZnQsCisJICogOD1NZXRhLCAxNj1Db250cm9sLiAgQ3ggYW5kIEN5IGFyZSB0aGUgeCBhbmQgeSBjb29yZGluYXRlcworCSAqIG9mIHRoZSBtb3VzZSBldmVudC4gIFRoZSB1cHBlciBsZWZ0IGNvcm5lciBpcyAoMSwxKS4KKwkgKgorCSAqIChFbmQgcXVvdGUpICBCeSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgd2UndmUgZWF0ZW4gdGhlCisJICoga2V5IHByZWZpeC4gIEZZSSwgdGhlIGxvb3AgYmVsb3cgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKwkgKiBtb3VzZSBjbGljayBpbmZvIGlzbid0IGd1YXJhbnRlZWQgdG8gcHJlc2VudCBhcyBhCisJICogc2luZ2xlIGNsaXN0IGl0ZW0uCisJICoKKwkgKiBXaGVlbCBtaWNlIG1heSByZXR1cm4gYnV0dG9ucyA0IGFuZCA1IHdoZW4gdGhlIHdoZWVsIGlzIHR1cm5lZC4KKwkgKiBXZSBlbmNvZGUgdGhvc2UgYXMgYnV0dG9uIHByZXNzZXMuCisJICovCisJZm9yIChncmFiYmVkID0gMDsgZ3JhYmJlZCA8IDM7IGdyYWJiZWQgKz0gKHNpemVfdCkgcmVzKSB7CisKKwkgICAgLyogRm9yIFZJTyBtb3VzZSB3ZSBhZGQgZXh0cmEgYml0IDY0IHRvIGRpc2FtYmlndWF0ZSBidXR0b24tdXAuICovCisjaWYgVVNFX0VNWF9NT1VTRQorCSAgICByZXMgPSByZWFkKE1fRkQoc3ApID49IDAgPyBNX0ZEKHNwKSA6IHNwLT5faWZkLCAma2J1ZiwgMyk7CisjZWxzZQorCSAgICByZXMgPSByZWFkKHNwLT5faWZkLCBrYnVmICsgZ3JhYmJlZCwgMyAtIGdyYWJiZWQpOworI2VuZGlmCisJICAgIGlmIChyZXMgPT0gLTEpCisJCWJyZWFrOworCX0KKwlrYnVmWzNdID0gJ1wwJzsKKworCVRSKFRSQUNFX0lFVkVOVCwKKwkgICAoIl9uY19tb3VzZV9pbmxpbmUgc2VlcyB0aGUgZm9sbG93aW5nIHh0ZXJtIGRhdGE6ICclcyciLCBrYnVmKSk7CisKKwkvKiB0aGVyZSdzIG9ubHkgb25lIG1vdXNlLi4uICovCisJZXZlbnRwLT5pZCA9IE5PUk1BTF9FVkVOVDsKKworCS8qIHByb2Nlc3NpbmcgY29kZSBnb2VzIGhlcmUgKi8KKwlldmVudHAtPmJzdGF0ZSA9IDA7CisJcHJldiA9IFBSRVYoZXZlbnRwKS0+YnN0YXRlOworCisjaWYgVVNFX0VNWF9NT1VTRQorI2RlZmluZSBQUkVTU19QT1NJVElPTihuKSBcCisJZXZlbnRwLT5ic3RhdGUgPSBNQVNLX1BSRVNTKG4pOyBcCisJaWYgKGtidWZbMF0gJiAweDQwKSBcCisJICAgIGV2ZW50cC0+YnN0YXRlID0gTUFTS19SRUxFQVNFKG4pCisjZWxzZQorI2RlZmluZSBQUkVTU19QT1NJVElPTihuKSBcCisJZXZlbnRwLT5ic3RhdGUgPSAobW1hc2tfdCkgKHByZXYgJiBNQVNLX1BSRVNTKG4pIFwKKwkJCQkgICAgPyBSRVBPUlRfTU9VU0VfUE9TSVRJT04gXAorCQkJCSAgICA6IE1BU0tfUFJFU1MobikpCisjZW5kaWYKKworCXN3aXRjaCAoa2J1ZlswXSAmIDB4MykgeworCWNhc2UgMHgwOgorCSAgICBpZiAoa2J1ZlswXSAmIDY0KQorCQlldmVudHAtPmJzdGF0ZSA9IE1BU0tfUFJFU1MoNCk7CisJICAgIGVsc2UKKwkJUFJFU1NfUE9TSVRJT04oMSk7CisJICAgIGJyZWFrOworCisJY2FzZSAweDE6CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDIKKwkgICAgaWYgKGtidWZbMF0gJiA2NCkKKwkJZXZlbnRwLT5ic3RhdGUgPSBNQVNLX1BSRVNTKDUpOworCSAgICBlbHNlCisjZW5kaWYKKwkJUFJFU1NfUE9TSVRJT04oMik7CisJICAgIGJyZWFrOworCisJY2FzZSAweDI6CisJICAgIFBSRVNTX1BPU0lUSU9OKDMpOworCSAgICBicmVhazsKKworCWNhc2UgMHgzOgorCSAgICAvKgorCSAgICAgKiBSZWxlYXNlIGV2ZW50cyBhcmVuJ3QgcmVwb3J0ZWQgZm9yIGluZGl2aWR1YWwgYnV0dG9ucywganVzdCBmb3IKKwkgICAgICogdGhlIGJ1dHRvbiBzZXQgYXMgYSB3aG9sZS4gIEhvd2V2ZXIsIGJlY2F1c2UgdGhlcmUgYXJlIG5vcm1hbGx5CisJICAgICAqIG5vIG1vdXNlIGV2ZW50cyB1bmRlciB4dGVybSB0aGF0IGludGVydmVuZSBiZXR3ZWVuIHByZXNzIGFuZAorCSAgICAgKiByZWxlYXNlLCB3ZSBjYW4gaW5mZXIgdGhlIGJ1dHRvbiBhY3R1YWxseSByZWxlYXNlZCBieSBsb29raW5nIGF0CisJICAgICAqIHRoZSBwcmV2aW91cyBldmVudC4KKwkgICAgICovCisJICAgIGlmIChwcmV2ICYgKEJVVFRPTl9QUkVTU0VEIHwgQlVUVE9OX1JFTEVBU0VEKSkgeworCQlldmVudHAtPmJzdGF0ZSA9IEJVVFRPTl9SRUxFQVNFRDsKKwkJZm9yIChiID0gMTsgYiA8PSBNQVhfQlVUVE9OUzsgKytiKSB7CisJCSAgICBpZiAoIShwcmV2ICYgTUFTS19QUkVTUyhiKSkpCisJCQlldmVudHAtPmJzdGF0ZSAmPSB+TUFTS19SRUxFQVNFKGIpOworCQl9CisJICAgIH0gZWxzZSB7CisJCS8qCisJCSAqIFhGcmVlODYgeHRlcm0gd2lsbCByZXR1cm4gYSBzdHJlYW0gb2YgcmVsZWFzZS1ldmVudHMgdG8KKwkJICogbGV0IHRoZSBhcHBsaWNhdGlvbiBrbm93IHdoZXJlIHRoZSBtb3VzZSBpcyBnb2luZywgaWYgdGhlCisJCSAqIHByaXZhdGUgbW9kZSAxMDAyIG9yIDEwMDMgaXMgZW5hYmxlZC4KKwkJICovCisJCWV2ZW50cC0+YnN0YXRlID0gUkVQT1JUX01PVVNFX1BPU0lUSU9OOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwlyZXN1bHQgPSAoZXZlbnRwLT5ic3RhdGUgJiBSRVBPUlRfTU9VU0VfUE9TSVRJT04pID8gVFJVRSA6IEZBTFNFOworCisJaWYgKGtidWZbMF0gJiA0KSB7CisJICAgIGV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTl9TSElGVDsKKwl9CisJaWYgKGtidWZbMF0gJiA4KSB7CisJICAgIGV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTl9BTFQ7CisJfQorCWlmIChrYnVmWzBdICYgMTYpIHsKKwkgICAgZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OX0NUUkw7CisJfQorCisJZXZlbnRwLT54ID0gKGtidWZbMV0gLSAnICcpIC0gMTsKKwlldmVudHAtPnkgPSAoa2J1ZlsyXSAtICcgJykgLSAxOworCVRSKE1ZX1RSQUNFLAorCSAgICgiX25jX21vdXNlX2lubGluZTogcHJpbWl0aXZlIG1vdXNlLWV2ZW50ICVzIGhhcyBzbG90ICVsZCIsCisJICAgIF9uY190cmFjZW1vdXNlKHNwLCBldmVudHApLAorCSAgICAobG9uZykgSW5kZXhFVihzcCwgZXZlbnRwKSkpOworCisJLyogYnVtcCB0aGUgbmV4dC1mcmVlIHBvaW50ZXIgaW50byB0aGUgY2lyY3VsYXIgbGlzdCAqLworCXNwLT5fbW91c2VfZXZlbnRwID0gTkVYVChldmVudHApOworI2lmIDAJCQkJLyogdGhpcyByZXR1cm4gd291bGQgYmUgbmVlZGVkIGZvciBRTlgncyBtb2RzIHRvIGxpYl9nZXRjaC5jICovCisJcmV0dXJuIChUUlVFKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQKK21vdXNlX2FjdGl2YXRlKFNDUkVFTiAqc3AsIGJvb2wgb24pCit7CisgICAgaWYgKCFvbiAmJiAhc3AtPl9tb3VzZV9pbml0aWFsaXplZCkKKwlyZXR1cm47CisKKyAgICBpZiAoIV9uY19tb3VzZV9pbml0KHNwKSkKKwlyZXR1cm47CisKKyAgICBpZiAob24pIHsKKworCXN3aXRjaCAoc3AtPl9tb3VzZV90eXBlKSB7CisJY2FzZSBNX1hURVJNOgorI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisJICAgIGtleW9rKEtFWV9NT1VTRSwgb24pOworI2VuZGlmCisJICAgIFRQVVRTX1RSQUNFKCJ4dGVybSBtb3VzZSBpbml0aWFsaXphdGlvbiIpOworCSAgICBlbmFibGVfeHRlcm1fbW91c2Uoc3AsIDEpOworCSAgICBicmVhazsKKyNpZiBVU0VfR1BNX1NVUFBPUlQKKwljYXNlIE1fR1BNOgorCSAgICBpZiAoZW5hYmxlX2dwbV9tb3VzZShzcCwgVFJVRSkpIHsKKwkJc3AtPl9tb3VzZV9mZCA9ICoobXlfZ3BtX2ZkKTsKKwkJVCgoIkdQTSBtb3VzZV9mZCAlZCIsIHNwLT5fbW91c2VfZmQpKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZgorI2lmIFVTRV9TWVNNT1VTRQorCWNhc2UgTV9TWVNNT1VTRToKKwkgICAgc2lnbmFsKFNJR1VTUjIsIGhhbmRsZV9zeXNtb3VzZSk7CisJICAgIHNwLT5fbW91c2VfYWN0aXZlID0gVFJVRTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwljYXNlIE1fTk9ORToKKwkgICAgcmV0dXJuOworCX0KKwkvKiBNYWtlIHJ1bnRpbWUgYmluZGluZyB0byBjdXQgZG93biBvbiBvYmplY3Qgc2l6ZSBvZiBhcHBsaWNhdGlvbnMgdGhhdAorCSAqIGRvIG5vdCB1c2UgdGhlIG1vdXNlIChlLmcuLCAnY2xlYXInKS4KKwkgKi8KKwlzcC0+X21vdXNlX2V2ZW50ID0gX25jX21vdXNlX2V2ZW50OworCXNwLT5fbW91c2VfaW5saW5lID0gX25jX21vdXNlX2lubGluZTsKKwlzcC0+X21vdXNlX3BhcnNlID0gX25jX21vdXNlX3BhcnNlOworCXNwLT5fbW91c2VfcmVzdW1lID0gX25jX21vdXNlX3Jlc3VtZTsKKwlzcC0+X21vdXNlX3dyYXAgPSBfbmNfbW91c2Vfd3JhcDsKKyAgICB9IGVsc2UgeworCisJc3dpdGNoIChzcC0+X21vdXNlX3R5cGUpIHsKKwljYXNlIE1fWFRFUk06CisJICAgIFRQVVRTX1RSQUNFKCJ4dGVybSBtb3VzZSBkZWluaXRpYWxpemF0aW9uIik7CisJICAgIGVuYWJsZV94dGVybV9tb3VzZShzcCwgMCk7CisJICAgIGJyZWFrOworI2lmIFVTRV9HUE1fU1VQUE9SVAorCWNhc2UgTV9HUE06CisJICAgIGVuYWJsZV9ncG1fbW91c2Uoc3AsIEZBTFNFKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBVU0VfU1lTTU9VU0UKKwljYXNlIE1fU1lTTU9VU0U6CisJICAgIHNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKKwkgICAgc3AtPl9tb3VzZV9hY3RpdmUgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwljYXNlIE1fTk9ORToKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisgICAgX25jX2ZsdXNoKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERldmljZS1pbmRlcGVuZGVudCBjb2RlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYm9vbAorX25jX21vdXNlX3BhcnNlKFNDUkVFTiAqc3AsIGludCBydW5jb3VudCkKKy8qIHBhcnNlIGEgcnVuIG9mIGF0b21pYyBtb3VzZSBldmVudHMgaW50byBhIGdlc3R1cmUgKi8KK3sKKyAgICBNRVZFTlQgKmV2ZW50cCA9IHNwLT5fbW91c2VfZXZlbnRwOworICAgIE1FVkVOVCAqZXAsICpydW5wLCAqbmV4dCwgKnByZXYgPSBQUkVWKGV2ZW50cCk7CisgICAgaW50IG47CisgICAgaW50IGI7CisgICAgYm9vbCBtZXJnZTsKKworICAgIFRSKE1ZX1RSQUNFLCAoIl9uY19tb3VzZV9wYXJzZSglZCkgY2FsbGVkIiwgcnVuY291bnQpKTsKKworICAgIC8qCisgICAgICogV2hlbiB3ZSBlbnRlciB0aGlzIHJvdXRpbmUsIHRoZSBldmVudCBsaXN0IG5leHQtZnJlZSBwb2ludGVyCisgICAgICogcG9pbnRzIGp1c3QgcGFzdCBhIHJ1biBvZiBtb3VzZSBldmVudHMgdGhhdCB3ZSBrbm93IHdlcmUgc2VwYXJhdGVkCisgICAgICogaW4gdGltZSBieSBsZXNzIHRoYW4gdGhlIGNyaXRpY2FsIGNsaWNrIGludGVydmFsLiBUaGUgam9iIG9mIHRoaXMKKyAgICAgKiByb3V0aW5lIGlzIHRvIGNvbGxhcHNlIHRoaXMgcnVuIGludG8gYSBzaW5nbGUgaGlnaGVyLWxldmVsIGV2ZW50CisgICAgICogb3IgZ2VzdHVyZS4KKyAgICAgKgorICAgICAqIFdlIGFjY29tcGxpc2ggdGhpcyBpbiB0d28gcGFzc2VzLiAgVGhlIGZpcnN0IHBhc3MgbWVyZ2VzIHByZXNzL3JlbGVhc2UKKyAgICAgKiBwYWlycyBpbnRvIGNsaWNrIGV2ZW50cy4gIFRoZSBzZWNvbmQgbWVyZ2VzIHJ1bnMgb2YgY2xpY2sgZXZlbnRzIGludG8KKyAgICAgKiBkb3VibGUgb3IgdHJpcGxlLWNsaWNrIGV2ZW50cy4KKyAgICAgKgorICAgICAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgcnVuIG1heSBub3QgcmVzb2x2ZSB0byBhIHNpbmdsZSBldmVudCAoZm9yCisgICAgICogZXhhbXBsZSwgaWYgdGhlIHVzZXIgcXVhZHJ1cGxlLWNsaWNrcykuICBJZiBzbywgbGVhZGluZyBldmVudHMKKyAgICAgKiBpbiB0aGUgcnVuIGFyZSBpZ25vcmVkLgorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoaXMgcm91dGluZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgZm9ybWF0IG9mIHRoZSBzcGVjaWZpYworICAgICAqIGZvcm1hdCBvZiB0aGUgcG9pbnRpbmctZGV2aWNlJ3MgcmVwb3J0cy4gIFdlIGNhbiB1c2UgaXQgdG8gcGFyc2UKKyAgICAgKiBnZXN0dXJlcyBvbiBhbnl0aGluZyB0aGF0IHJlcG9ydHMgcHJlc3MvcmVsZWFzZSBldmVudHMgb24gYSBwZXItCisgICAgICogYnV0dG9uIGJhc2lzLCBhcyBsb25nIGFzIHRoZSBkZXZpY2UtZGVwZW5kZW50IG1vdXNlIGNvZGUgcHV0cyBzdHVmZgorICAgICAqIG9uIHRoZSBxdWV1ZSBpbiBNRVZFTlQgZm9ybWF0LgorICAgICAqLworICAgIGlmIChydW5jb3VudCA9PSAxKSB7CisJVFIoTVlfVFJBQ0UsCisJICAgKCJfbmNfbW91c2VfcGFyc2U6IHJldHVybmluZyBzaW1wbGUgbW91c2UgZXZlbnQgJXMgYXQgc2xvdCAlbGQiLAorCSAgICBfbmNfdHJhY2Vtb3VzZShzcCwgcHJldiksCisJICAgIChsb25nKSBJbmRleEVWKHNwLCBwcmV2KSkpOworCXJldHVybiAocHJldi0+aWQgPj0gTk9STUFMX0VWRU5UKQorCSAgICA/ICgocHJldi0+YnN0YXRlICYgc3AtPl9tb3VzZV9tYXNrKSA/IFRSVUUgOiBGQUxTRSkKKwkgICAgOiBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBmaW5kIHRoZSBzdGFydCBvZiB0aGUgcnVuICovCisgICAgcnVucCA9IGV2ZW50cDsKKyAgICBmb3IgKG4gPSBydW5jb3VudDsgbiA+IDA7IG4tLSkgeworCXJ1bnAgPSBQUkVWKHJ1bnApOworICAgIH0KKworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfSUVWRU5UKSkgeworCV90cmFjZV9zbG90KHNwLCAiYmVmb3JlIG1vdXNlIHByZXNzL3JlbGVhc2UgbWVyZ2U6Iik7CisJX3RyYWNlZigiX25jX21vdXNlX3BhcnNlOiBydW4gc3RhcnRzIGF0ICVsZCwgZW5kcyBhdCAlbGQsIGNvdW50ICVkIiwKKwkJUnVuUGFyYW1zKHNwLCBldmVudHAsIHJ1bnApLAorCQlydW5jb3VudCk7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIC8qIGZpcnN0IHBhc3M7IG1lcmdlIHByZXNzL3JlbGVhc2UgcGFpcnMgKi8KKyAgICBkbyB7CisJbWVyZ2UgPSBGQUxTRTsKKwlmb3IgKGVwID0gcnVucDsgKG5leHQgPSBORVhUKGVwKSkgIT0gZXZlbnRwOyBlcCA9IG5leHQpIHsKKworI2RlZmluZSBNQVNLX0NIQU5HRUQoeCkgKCEoZXAtPmJzdGF0ZSAmIE1BU0tfUFJFU1MoeCkpIFwKKwkJICAgICAgPT0gIShuZXh0LT5ic3RhdGUgJiBNQVNLX1JFTEVBU0UoeCkpKQorCisJICAgIGlmIChlcC0+eCA9PSBuZXh0LT54ICYmIGVwLT55ID09IG5leHQtPnkKKwkJJiYgKGVwLT5ic3RhdGUgJiBCVVRUT05fUFJFU1NFRCkKKwkJJiYgTUFTS19DSEFOR0VEKDEpCisJCSYmIE1BU0tfQ0hBTkdFRCgyKQorCQkmJiBNQVNLX0NIQU5HRUQoMykKKwkJJiYgTUFTS19DSEFOR0VEKDQpCisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDIKKwkJJiYgTUFTS19DSEFOR0VEKDUpCisjZW5kaWYKKwkJKSB7CisJCWZvciAoYiA9IDE7IGIgPD0gTUFYX0JVVFRPTlM7ICsrYikgeworCQkgICAgaWYgKChzcC0+X21vdXNlX21hc2sgJiBNQVNLX0NMSUNLKGIpKQorCQkJJiYgKGVwLT5ic3RhdGUgJiBNQVNLX1BSRVNTKGIpKSkgeworCQkJZXAtPmJzdGF0ZSAmPSB+TUFTS19QUkVTUyhiKTsKKwkJCWVwLT5ic3RhdGUgfD0gTUFTS19DTElDSyhiKTsKKwkJCW1lcmdlID0gVFJVRTsKKwkJICAgIH0KKwkJfQorCQlpZiAobWVyZ2UpCisJCSAgICBuZXh0LT5pZCA9IElOVkFMSURfRVZFTlQ7CisJICAgIH0KKwl9CisgICAgfSB3aGlsZQorCShtZXJnZSk7CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX0lFVkVOVCkpIHsKKwlfdHJhY2Vfc2xvdChzcCwgImJlZm9yZSBtb3VzZSBjbGljayBtZXJnZToiKTsKKwlfdHJhY2VmKCJfbmNfbW91c2VfcGFyc2U6IHJ1biBzdGFydHMgYXQgJWxkLCBlbmRzIGF0ICVsZCwgY291bnQgJWQiLAorCQlSdW5QYXJhbXMoc3AsIGV2ZW50cCwgcnVucCksCisJCXJ1bmNvdW50KTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgLyoKKyAgICAgKiBTZWNvbmQgcGFzczsgbWVyZ2UgY2xpY2sgcnVucy4gIEF0IHRoaXMgcG9pbnQsIGNsaWNrIGV2ZW50cyBhcmUKKyAgICAgKiBlYWNoIGZvbGxvd2VkIGJ5IG9uZSBpbnZhbGlkIGV2ZW50LiBXZSBtZXJnZSBjbGljayBldmVudHMKKyAgICAgKiBmb3J3YXJkIGluIHRoZSBxdWV1ZS4KKyAgICAgKgorICAgICAqIE5PVEU6IFRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoaXMgZGVzaWduISAgSWYgdGhlIGFwcGxpY2F0aW9uCisgICAgICogYWxsb3dzIGVub3VnaCBjbGljayBldmVudHMgdG8gcGlsZSB1cCBpbiB0aGUgY2lyY3VsYXIgcXVldWUgc28KKyAgICAgKiB0aGV5IHdyYXAgYXJvdW5kLCBpdCB3aWxsIGNoZWVyZnVsbHkgbWVyZ2UgdGhlIG5ld2VzdCBmb3J3YXJkCisgICAgICogaW50byB0aGUgb2xkZXN0LCBjcmVhdGluZyBhIGJvZ3VzIGRvdWJsZWNsaWNrIGFuZCBjb25mdXNpbmcKKyAgICAgKiB0aGUgcXVldWUtdHJhdmVyc2FsIGxvZ2ljIHJhdGhlciBiYWRseS4gIEdlbmVyYWxseSB0aGlzIHdvbid0CisgICAgICogaGFwcGVuLCBiZWNhdXNlIGNhbGxpbmcgZ2V0bW91c2UoKSBtYXJrcyBvbGQgZXZlbnRzIGludmFsaWQgYW5kCisgICAgICogaW5lbGlnaWJsZSBmb3IgbWVyZ2VzLiAgVGhlIHRydWUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIHdvdWxkCisgICAgICogYmUgdG8gdGltZXN0YW1wIGVhY2ggTUVWRU5UIGFuZCBwZXJmb3JtIHRoZSBvYnZpb3VzIHNhbml0eSBjaGVjaywKKyAgICAgKiBidXQgdGhlIHRpbWVyIGVsZW1lbnQgd291bGQgaGF2ZSB0byBoYXZlIHN1Yi1zZWNvbmQgcmVzb2x1dGlvbiwKKyAgICAgKiB3aGljaCB3b3VsZCBnZXQgdXMgaW50byBwb3J0YWJpbGl0eSB0cm91YmxlLgorICAgICAqLworICAgIGRvIHsKKwlNRVZFTlQgKmZvbGxvd2VyOworCisJbWVyZ2UgPSBGQUxTRTsKKwlmb3IgKGVwID0gcnVucDsgKG5leHQgPSBORVhUKGVwKSkgIT0gZXZlbnRwOyBlcCA9IG5leHQpCisJICAgIGlmIChlcC0+aWQgIT0gSU5WQUxJRF9FVkVOVCkgeworCQlpZiAobmV4dC0+aWQgIT0gSU5WQUxJRF9FVkVOVCkKKwkJICAgIGNvbnRpbnVlOworCQlmb2xsb3dlciA9IE5FWFQobmV4dCk7CisJCWlmIChmb2xsb3dlci0+aWQgPT0gSU5WQUxJRF9FVkVOVCkKKwkJICAgIGNvbnRpbnVlOworCisJCS8qIG1lcmdlIGNsaWNrIGV2ZW50cyBmb3J3YXJkICovCisJCWlmICgoZXAtPmJzdGF0ZSAmIEJVVFRPTl9DTElDS0VEKQorCQkgICAgJiYgKGZvbGxvd2VyLT5ic3RhdGUgJiBCVVRUT05fQ0xJQ0tFRCkpIHsKKwkJICAgIGZvciAoYiA9IDE7IGIgPD0gTUFYX0JVVFRPTlM7ICsrYikgeworCQkJaWYgKChzcC0+X21vdXNlX21hc2sgJiBNQVNLX0RPVUJMRV9DTElDSyhiKSkKKwkJCSAgICAmJiAoZm9sbG93ZXItPmJzdGF0ZSAmIE1BU0tfQ0xJQ0soYikpKSB7CisJCQkgICAgZm9sbG93ZXItPmJzdGF0ZSAmPSB+TUFTS19DTElDSyhiKTsKKwkJCSAgICBmb2xsb3dlci0+YnN0YXRlIHw9IE1BU0tfRE9VQkxFX0NMSUNLKGIpOworCQkJICAgIG1lcmdlID0gVFJVRTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmIChtZXJnZSkKKwkJCWVwLT5pZCA9IElOVkFMSURfRVZFTlQ7CisJCX0KKworCQkvKiBtZXJnZSBkb3VibGUtY2xpY2sgZXZlbnRzIGZvcndhcmQgKi8KKwkJaWYgKChlcC0+YnN0YXRlICYgQlVUVE9OX0RPVUJMRV9DTElDS0VEKQorCQkgICAgJiYgKGZvbGxvd2VyLT5ic3RhdGUgJiBCVVRUT05fQ0xJQ0tFRCkpIHsKKwkJICAgIGZvciAoYiA9IDE7IGIgPD0gTUFYX0JVVFRPTlM7ICsrYikgeworCQkJaWYgKChzcC0+X21vdXNlX21hc2sgJiBNQVNLX1RSSVBMRV9DTElDSyhiKSkKKwkJCSAgICAmJiAoZm9sbG93ZXItPmJzdGF0ZSAmIE1BU0tfQ0xJQ0soYikpKSB7CisJCQkgICAgZm9sbG93ZXItPmJzdGF0ZSAmPSB+TUFTS19DTElDSyhiKTsKKwkJCSAgICBmb2xsb3dlci0+YnN0YXRlIHw9IE1BU0tfVFJJUExFX0NMSUNLKGIpOworCQkJICAgIG1lcmdlID0gVFJVRTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmIChtZXJnZSkKKwkJCWVwLT5pZCA9IElOVkFMSURfRVZFTlQ7CisJCX0KKwkgICAgfQorICAgIH0gd2hpbGUKKwkobWVyZ2UpOworCisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoVVNFX1RSQUNFRihUUkFDRV9JRVZFTlQpKSB7CisJX3RyYWNlX3Nsb3Qoc3AsICJiZWZvcmUgbW91c2UgZXZlbnQgcXVldWUgY29tcGFjdGlvbjoiKTsKKwlfdHJhY2VmKCJfbmNfbW91c2VfcGFyc2U6IHJ1biBzdGFydHMgYXQgJWxkLCBlbmRzIGF0ICVsZCwgY291bnQgJWQiLAorCQlSdW5QYXJhbXMoc3AsIGV2ZW50cCwgcnVucCksCisJCXJ1bmNvdW50KTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgLyoKKyAgICAgKiBOb3cgdHJ5IHRvIHRocm93IGF3YXkgdHJhaWxpbmcgZXZlbnRzIGZsYWdnZWQgaW52YWxpZCwgb3IgdGhhdAorICAgICAqIGRvbid0IG1hdGNoIHRoZSBjdXJyZW50IGV2ZW50IG1hc2suCisgICAgICovCisgICAgZm9yICg7IHJ1bmNvdW50OyBwcmV2ID0gUFJFVihldmVudHApLCBydW5jb3VudC0tKQorCWlmIChwcmV2LT5pZCA9PSBJTlZBTElEX0VWRU5UIHx8ICEocHJldi0+YnN0YXRlICYgc3AtPl9tb3VzZV9tYXNrKSkgeworCSAgICBzcC0+X21vdXNlX2V2ZW50cCA9IGV2ZW50cCA9IHByZXY7CisJfQorI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfSUVWRU5UKSkgeworCV90cmFjZV9zbG90KHNwLCAiYWZ0ZXIgbW91c2UgZXZlbnQgcXVldWUgY29tcGFjdGlvbjoiKTsKKwlfdHJhY2VmKCJfbmNfbW91c2VfcGFyc2U6IHJ1biBzdGFydHMgYXQgJWxkLCBlbmRzIGF0ICVsZCwgY291bnQgJWQiLAorCQlSdW5QYXJhbXMoc3AsIGV2ZW50cCwgcnVucCksCisJCXJ1bmNvdW50KTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyAgICBmb3IgKGVwID0gcnVucDsgZXAgIT0gZXZlbnRwOyBlcCA9IE5FWFQoZXApKQorCWlmIChlcC0+aWQgIT0gSU5WQUxJRF9FVkVOVCkKKwkgICAgVFIoTVlfVFJBQ0UsCisJICAgICAgICgiX25jX21vdXNlX3BhcnNlOiByZXR1cm5pbmcgY29tcG9zaXRlIG1vdXNlIGV2ZW50ICVzIGF0IHNsb3QgJWxkIiwKKwkJX25jX3RyYWNlbW91c2Uoc3AsIGVwKSwKKwkJKGxvbmcpIEluZGV4RVYoc3AsIGVwKSkpOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICAvKiBhZnRlciBhbGwgdGhpcywgZG8gd2UgaGF2ZSBhIHZhbGlkIGV2ZW50PyAqLworICAgIHJldHVybiAoUFJFVihldmVudHApLT5pZCAhPSBJTlZBTElEX0VWRU5UKTsKK30KKworc3RhdGljIHZvaWQKK19uY19tb3VzZV93cmFwKFNDUkVFTiAqc3ApCisvKiByZWxlYXNlIG1vdXNlIC0tIGNhbGxlZCBieSBlbmR3aW4oKSBiZWZvcmUgc2hlbGxvdXQvZXhpdCAqLworeworICAgIFRSKE1ZX1RSQUNFLCAoIl9uY19tb3VzZV93cmFwKCkgY2FsbGVkIikpOworCisgICAgc3dpdGNoIChzcC0+X21vdXNlX3R5cGUpIHsKKyAgICBjYXNlIE1fWFRFUk06CisJaWYgKHNwLT5fbW91c2VfbWFzaykKKwkgICAgbW91c2VfYWN0aXZhdGUoc3AsIEZBTFNFKTsKKwlicmVhazsKKyNpZiBVU0VfR1BNX1NVUFBPUlQKKwkvKiBHUE06IHBhc3MgYWxsIG1vdXNlIGV2ZW50cyB0byBuZXh0IGNsaWVudCAqLworICAgIGNhc2UgTV9HUE06CisJaWYgKHNwLT5fbW91c2VfbWFzaykKKwkgICAgbW91c2VfYWN0aXZhdGUoc3AsIEZBTFNFKTsKKwlicmVhazsKKyNlbmRpZgorI2lmIFVTRV9TWVNNT1VTRQorICAgIGNhc2UgTV9TWVNNT1VTRToKKwltb3VzZV9hY3RpdmF0ZShzcCwgRkFMU0UpOworCWJyZWFrOworI2VuZGlmCisgICAgY2FzZSBNX05PTkU6CisJYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorX25jX21vdXNlX3Jlc3VtZShTQ1JFRU4gKnNwKQorLyogcmUtY29ubmVjdCB0byBtb3VzZSAtLSBjYWxsZWQgYnkgZG91cGRhdGUoKSBhZnRlciBzaGVsbG91dCAqLworeworICAgIFRSKE1ZX1RSQUNFLCAoIl9uY19tb3VzZV9yZXN1bWUoKSBjYWxsZWQiKSk7CisKKyAgICBzd2l0Y2ggKHNwLT5fbW91c2VfdHlwZSkgeworICAgIGNhc2UgTV9YVEVSTToKKwkvKiB4dGVybTogcmUtZW5hYmxlIHJlcG9ydGluZyAqLworCWlmIChzcC0+X21vdXNlX21hc2spCisJICAgIG1vdXNlX2FjdGl2YXRlKHNwLCBUUlVFKTsKKwlicmVhazsKKworI2lmIFVTRV9HUE1fU1VQUE9SVAorICAgIGNhc2UgTV9HUE06CisJLyogR1BNOiByZWNsYWltIG91ciBldmVudCBzZXQgKi8KKwlpZiAoc3AtPl9tb3VzZV9tYXNrKQorCSAgICBtb3VzZV9hY3RpdmF0ZShzcCwgVFJVRSk7CisJYnJlYWs7CisjZW5kaWYKKworI2lmIFVTRV9TWVNNT1VTRQorICAgIGNhc2UgTV9TWVNNT1VTRToKKwltb3VzZV9hY3RpdmF0ZShzcCwgVFJVRSk7CisJYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIE1fTk9ORToKKwlicmVhazsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vdXNlIGludGVyZmFjZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBBUEkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK19uY19nZXRtb3VzZShTQ1JFRU4gKnNwLCBNRVZFTlQgKiBhZXZlbnQpCit7CisgICAgVCgoVF9DQUxMRUQoImdldG1vdXNlKCVwKSIpLCBhZXZlbnQpKTsKKworICAgIGlmICgoYWV2ZW50ICE9IDApICYmIChzcCAhPSAwKSAmJiAoc3AtPl9tb3VzZV90eXBlICE9IE1fTk9ORSkpIHsKKwlNRVZFTlQgKmV2ZW50cCA9IHNwLT5fbW91c2VfZXZlbnRwOworCS8qIGNvbXB1dGUgdGhlIGN1cnJlbnQtZXZlbnQgcG9pbnRlciAqLworCU1FVkVOVCAqcHJldiA9IFBSRVYoZXZlbnRwKTsKKworCS8qIGNvcHkgdGhlIGV2ZW50IHdlIGZpbmQgdGhlcmUgKi8KKwkqYWV2ZW50ID0gKnByZXY7CisKKwlUUihUUkFDRV9JRVZFTlQsICgiZ2V0bW91c2U6IHJldHVybmluZyBldmVudCAlcyBmcm9tIHNsb3QgJWxkIiwKKwkJCSAgX25jX3RyYWNlbW91c2Uoc3AsIHByZXYpLAorCQkJICAobG9uZykgSW5kZXhFVihzcCwgcHJldikpKTsKKworCXByZXYtPmlkID0gSU5WQUxJRF9FVkVOVDsJLyogc28gdGhlIHF1ZXVlIHNsb3QgYmVjb21lcyBmcmVlICovCisJcmV0dXJuQ29kZShPSyk7CisgICAgfQorICAgIHJldHVybkNvZGUoRVJSKTsKK30KKworLyogZ3JhYiBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgbW91c2UgZXZlbnQgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2dldG1vdXNlKE1FVkVOVCAqIGFldmVudCkKK3sKKyAgICByZXR1cm4gX25jX2dldG1vdXNlKFNQLCBhZXZlbnQpOworfQorCitzdGF0aWMgaW50CitfbmNfdW5nZXRtb3VzZShTQ1JFRU4gKnNwLCBNRVZFTlQgKiBhZXZlbnQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ1bmdldG1vdXNlKCVwKSIpLCBhZXZlbnQpKTsKKworICAgIGlmIChhZXZlbnQgIT0gMCAmJiBzcCAhPSAwKSB7CisJTUVWRU5UICpldmVudHAgPSBzcC0+X21vdXNlX2V2ZW50cDsKKworCS8qIHN0aWNrIHRoZSBnaXZlbiBldmVudCBpbiB0aGUgbmV4dC1mcmVlIHNsb3QgKi8KKwkqZXZlbnRwID0gKmFldmVudDsKKworCS8qIGJ1bXAgdGhlIG5leHQtZnJlZSBwb2ludGVyIGludG8gdGhlIGNpcmN1bGFyIGxpc3QgKi8KKwlzcC0+X21vdXNlX2V2ZW50cCA9IE5FWFQoZXZlbnRwKTsKKworCS8qIHB1c2ggYmFjayB0aGUgbm90aWZpY2F0aW9uIGV2ZW50IG9uIHRoZSBrZXlib2FyZCBxdWV1ZSAqLworCXJlc3VsdCA9IF9uY191bmdldGNoKHNwLCBLRVlfTU9VU0UpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qIGVucXVldWUgYSBzeW50aGVzaXplZCBtb3VzZSBldmVudCB0byBiZSBzZWVuIGJ5IHRoZSBuZXh0IHdnZXRjaCgpICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCit1bmdldG1vdXNlKE1FVkVOVCAqIGFldmVudCkKK3sKKyAgICByZXR1cm4gX25jX3VuZ2V0bW91c2UoU1AsIGFldmVudCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKG1tYXNrX3QpCittb3VzZW1hc2sobW1hc2tfdCBuZXdtYXNrLCBtbWFza190ICogb2xkbWFzaykKKy8qIHNldCB0aGUgbW91c2UgZXZlbnQgbWFzayAqLworeworICAgIG1tYXNrX3QgcmVzdWx0ID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJtb3VzZW1hc2soJSNseCwlcCkiKSwgKHVuc2lnbmVkIGxvbmcpIG5ld21hc2ssIG9sZG1hc2spKTsKKworICAgIGlmIChTUCAhPSAwKSB7CisJaWYgKG9sZG1hc2spCisJICAgICpvbGRtYXNrID0gU1AtPl9tb3VzZV9tYXNrOworCisJaWYgKG5ld21hc2sgfHwgU1AtPl9tb3VzZV9pbml0aWFsaXplZCkgeworCSAgICBfbmNfbW91c2VfaW5pdChTUCk7CisJICAgIGlmIChTUC0+X21vdXNlX3R5cGUgIT0gTV9OT05FKSB7CisJCXJlc3VsdCA9IG5ld21hc2sgJgorCQkgICAgKFJFUE9SVF9NT1VTRV9QT1NJVElPTgorCQkgICAgIHwgQlVUVE9OX0FMVAorCQkgICAgIHwgQlVUVE9OX0NUUkwKKwkJICAgICB8IEJVVFRPTl9TSElGVAorCQkgICAgIHwgQlVUVE9OX1BSRVNTRUQKKwkJICAgICB8IEJVVFRPTl9SRUxFQVNFRAorCQkgICAgIHwgQlVUVE9OX0NMSUNLRUQKKwkJICAgICB8IEJVVFRPTl9ET1VCTEVfQ0xJQ0tFRAorCQkgICAgIHwgQlVUVE9OX1RSSVBMRV9DTElDS0VEKTsKKworCQltb3VzZV9hY3RpdmF0ZShTUCwgKGJvb2wpIChyZXN1bHQgIT0gMCkpOworCisJCVNQLT5fbW91c2VfbWFzayA9IHJlc3VsdDsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuQml0cyhyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQord2VuY2xvc2UoY29uc3QgV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKKy8qIGNoZWNrIHRvIHNlZSBpZiBnaXZlbiB3aW5kb3cgZW5jbG9zZXMgZ2l2ZW4gc2NyZWVuIGxvY2F0aW9uICovCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3ZW5jbG9zZSglcCwlZCwlZCkiKSwgd2luLCB5LCB4KSk7CisKKyAgICBpZiAod2luICE9IDApIHsKKwl5IC09IHdpbi0+X3lvZmZzZXQ7CisJcmVzdWx0ID0gKCh3aW4tPl9iZWd5IDw9IHkgJiYKKwkJICAgd2luLT5fYmVneCA8PSB4ICYmCisJCSAgICh3aW4tPl9iZWd4ICsgd2luLT5fbWF4eCkgPj0geCAmJgorCQkgICAod2luLT5fYmVneSArIHdpbi0+X21heHkpID49IHkpID8gVFJVRSA6IEZBTFNFKTsKKyAgICB9CisgICAgcmV0dXJuQm9vbChyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittb3VzZWludGVydmFsKGludCBtYXhjbGljaykKKy8qIHNldCB0aGUgbWF4aW11bSBtb3VzZSBpbnRlcnZhbCB3aXRoaW4gd2hpY2ggdG8gcmVjb2duaXplIGEgY2xpY2sgKi8KK3sKKyAgICBpbnQgb2xkdmFsOworCisgICAgVCgoVF9DQUxMRUQoIm1vdXNlaW50ZXJ2YWwoJWQpIiksIG1heGNsaWNrKSk7CisKKyAgICBpZiAoU1AgIT0gMCkgeworCW9sZHZhbCA9IFNQLT5fbWF4Y2xpY2s7CisJaWYgKG1heGNsaWNrID49IDApCisJICAgIFNQLT5fbWF4Y2xpY2sgPSBtYXhjbGljazsKKyAgICB9IGVsc2UgeworCW9sZHZhbCA9IERFRkFVTFRfTUFYQ0xJQ0s7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShvbGR2YWwpOworfQorCisvKiBUaGlzIG1heSBiZSB1c2VkIGJ5IG90aGVyIHJvdXRpbmVzIHRvIGFzayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBtb3VzZQorICAgc3VwcG9ydCAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2hhc19tb3VzZSh2b2lkKQoreworICAgIHJldHVybiAoU1AtPl9tb3VzZV90eXBlID09IE1fTk9ORSA/IDAgOiAxKTsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK3dtb3VzZV90cmFmbyhjb25zdCBXSU5ET1cgKndpbiwgaW50ICpwWSwgaW50ICpwWCwgYm9vbCB0b19zY3JlZW4pCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3bW91c2VfdHJhZm8oJXAsJXAsJXAsJWQpIiksIHdpbiwgcFksIHBYLCB0b19zY3JlZW4pKTsKKworICAgIGlmICh3aW4gJiYgcFkgJiYgcFgpIHsKKwlpbnQgeSA9ICpwWTsKKwlpbnQgeCA9ICpwWDsKKworCWlmICh0b19zY3JlZW4pIHsKKwkgICAgeSArPSB3aW4tPl9iZWd5ICsgd2luLT5feW9mZnNldDsKKwkgICAgeCArPSB3aW4tPl9iZWd4OworCSAgICBpZiAod2VuY2xvc2Uod2luLCB5LCB4KSkKKwkJcmVzdWx0ID0gVFJVRTsKKwl9IGVsc2UgeworCSAgICBpZiAod2VuY2xvc2Uod2luLCB5LCB4KSkgeworCQl5IC09ICh3aW4tPl9iZWd5ICsgd2luLT5feW9mZnNldCk7CisJCXggLT0gd2luLT5fYmVneDsKKwkJcmVzdWx0ID0gVFJVRTsKKwkgICAgfQorCX0KKwlpZiAocmVzdWx0KSB7CisJICAgICpwWCA9IHg7CisJICAgICpwWSA9IHk7CisJfQorICAgIH0KKyAgICByZXR1cm5Cb29sKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX21vdmUuYyBiL25jdXJzZXMvYmFzZS9saWJfbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MmM0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX21vdmUuYwpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfbW92ZS5jCisqKgorKioJVGhlIHJvdXRpbmUgd21vdmUoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9tb3ZlLmMsdiAxLjEyIDIwMDQvMTIvMDQgMjE6NTA6MDcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord21vdmUoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKK3sKKyAgICBUKChUX0NBTExFRCgid21vdmUoJXAsJWQsJWQpIiksIHdpbiwgeSwgeCkpOworCisgICAgaWYgKExFR0FMWVgod2luLCB5LCB4KSkgeworCXdpbi0+X2N1cnggPSAoTkNVUlNFU19TSVpFX1QpIHg7CisJd2luLT5fY3VyeSA9IChOQ1VSU0VTX1NJWkVfVCkgeTsKKworCXdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKwl3aW4tPl9mbGFncyB8PSBfSEFTTU9WRUQ7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9tdndpbi5jIGIvbmN1cnNlcy9iYXNlL2xpYl9tdndpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGFkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX212d2luLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX212d2luLmMKKyoqCisqKglUaGUgcm91dGluZSBtdndpbigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX212d2luLmMsdiAxLjE0IDIwMDYvMDIvMjUgMjI6NTM6NDYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorbXZ3aW4oV0lORE9XICp3aW4sIGludCBieSwgaW50IGJ4KQoreworICAgIFQoKFRfQ0FMTEVEKCJtdndpbiglcCwlZCwlZCkiKSwgd2luLCBieSwgYngpKTsKKworICAgIGlmICghd2luIHx8ICh3aW4tPl9mbGFncyAmIF9JU1BBRCkpCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgLyoKKyAgICAgKiBtdndpbigpIHNob3VsZCBvbmx5IG1vZGlmeSB0aGUgaW5kaWNlcy4gIFNlZSB0ZXN0L2RlbW9fbWVudXMuYyBhbmQKKyAgICAgKiB0ZXN0L21vdmV3aW5kb3cuYyBmb3IgZXhhbXBsZXMuCisgICAgICovCisjaWYgMAorICAgIC8qIENvcHlpbmcgc3Vid2luZG93cyBpcyBhbGxvd2VkLCBidXQgaXQgaXMgZXhwZW5zaXZlLi4uICovCisgICAgaWYgKHdpbi0+X2ZsYWdzICYgX1NVQldJTikgeworCWludCBlcnIgPSBFUlI7CisJV0lORE9XICpwYXJlbnQgPSB3aW4tPl9wYXJlbnQ7CisJaWYgKHBhcmVudCkgewkJLyogTm93IGNvbWVzIHRoZSBjb21wbGljYXRlZCBhbmQgY29zdGx5IHBhcnQsIHlvdSBzaG91bGQgcmVhbGx5CisJCQkJICogdHJ5IHRvIGF2b2lkIHRvIG1vdmUgc3Vid2luZG93cy4gQmVjYXVzZSBhIHN1YndpbmRvdyBzaGFyZXMKKwkJCQkgKiB0aGUgdGV4dCBidWZmZXJzIHdpdGggaXRzIHBhcmVudCwgb25lIGNhbid0IGRvIGEgc2ltcGxlCisJCQkJICogbWVtbW92ZSBvZiB0aGUgdGV4dCBidWZmZXJzLiBPbmUgaGFzIHRvIGNyZWF0ZSBhIGNvcHksIHRoZW4KKwkJCQkgKiB0byByZWxvY2F0ZSB0aGUgc3Vid2luZG93IGFuZCB0aGVuIHRvIGRvIGEgY29weS4KKwkJCQkgKi8KKwkgICAgaWYgKChieSAtIHBhcmVudC0+X2JlZ3kgPT0gd2luLT5fcGFyeSkgJiYKKwkJKGJ4IC0gcGFyZW50LT5fYmVneCA9PSB3aW4tPl9wYXJ4KSkKKwkJZXJyID0gT0s7CS8qIHdlIGRvbid0IGFjdHVhbGx5IG1vdmUgKi8KKwkgICAgZWxzZSB7CisJCVdJTkRPVyAqY2xvbmUgPSBkdXB3aW4od2luKTsKKwkJaWYgKGNsb25lKSB7CisJCSAgICAvKiBub3cgd2UgaGF2ZSB0aGUgY2xvbmUsIHNvIHJlbG9jYXRlIHdpbiAqLworCisJCSAgICB3ZXJhc2Uod2luKTsJLyogRXJhc2UgdGhlIG9yaWdpbmFsIHBsYWNlICAgICAqLworCQkgICAgLyogZmlsbCB3aXRoIHBhcmVudHMgYmFja2dyb3VuZCAqLworCQkgICAgd2JrZ3JuZCh3aW4sIENIUkVGKHBhcmVudC0+X25jX2JrZ2QpKTsKKwkJICAgIHdzeW5jdXAod2luKTsJLyogVGVsbCB0aGUgcGFyZW50KHMpICAgICAgICAgICAqLworCisJCSAgICBlcnIgPSBtdmRlcndpbih3aW4sCisJCQkJICAgYnkgLSBwYXJlbnQtPl9iZWd5LAorCQkJCSAgIGJ4IC0gcGFyZW50LT5fYmVneCk7CisJCSAgICBpZiAoZXJyICE9IEVSUikgeworCQkJZXJyID0gY29weXdpbihjbG9uZSwgd2luLAorCQkJCSAgICAgIDAsIDAsIDAsIDAsIHdpbi0+X21heHksIHdpbi0+X21heHgsIDApOworCQkJaWYgKEVSUiAhPSBlcnIpCisJCQkgICAgd3N5bmN1cCh3aW4pOworCQkgICAgfQorCQkgICAgaWYgKEVSUiA9PSBkZWx3aW4oY2xvbmUpKQorCQkJZXJyID0gRVJSOworCQl9CisJICAgIH0KKwl9CisJcmV0dXJuQ29kZShlcnIpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGJ5ICsgd2luLT5fbWF4eSA+IHNjcmVlbl9saW5lcyAtIDEKKwl8fCBieCArIHdpbi0+X21heHggPiBzY3JlZW5fY29sdW1ucyAtIDEKKwl8fCBieSA8IDAKKwl8fCBieCA8IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgLyoKKyAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2luZG93IGlzIG1vdmVkLCB0b3VjaCB0aGUgd2luZG93J3MgY29udGVudHMgc28KKyAgICAgKiB0aGF0IGEgZm9sbG93aW5nIGNhbGwgdG8gJ3dyZWZyZXNoKCknIHdpbGwgcGFpbnQgdGhlIHdpbmRvdyBhdCB0aGUKKyAgICAgKiBuZXcgbG9jYXRpb24uICBUaGlzIGVuc3VyZXMgdGhhdCBpZiB0aGUgY2FsbGVyIGhhcyByZWZyZXNoZWQgYW5vdGhlcgorICAgICAqIHdpbmRvdyBhdCB0aGUgc2FtZSBsb2NhdGlvbiwgdGhhdCB0aGlzIG9uZSB3aWxsIGJlIGRpc3BsYXllZC4KKyAgICAgKi8KKyAgICB3aW4tPl9iZWd5ID0gYnk7CisgICAgd2luLT5fYmVneCA9IGJ4OworICAgIHJldHVybkNvZGUodG91Y2h3aW4od2luKSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX25ld3Rlcm0uYyBiL25jdXJzZXMvYmFzZS9saWJfbmV3dGVybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTgyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX25ld3Rlcm0uYwpAQCAtMCwwICsxLDIzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX25ld3Rlcm0uYworKioKKyoqCVRoZSBuZXd0ZXJtKCkgZnVuY3Rpb24uCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpZiBTVlI0X1RFUk1JTyAmJiAhZGVmaW5lZChfUE9TSVhfU09VUkNFKQorI2RlZmluZSBfUE9TSVhfU09VUkNFCisjZW5kaWYKKworI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGNsZWFyX3NjcmVlbiwgY3VwICYgZnJpZW5kcywgY3VyX3Rlcm0gKi8KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9uZXd0ZXJtLmMsdiAxLjczIDIwMDgvMDgvMTYgMjE6MjA6NDggV2VybmVyLkZpbmsgRXhwICQiKQorCisjaWZuZGVmIE9OTENSCQkJLyogQWxsb3dzIGNvbXBpbGF0aW9uIHVuZGVyIHRoZSBRTlggNC4yIE9TICovCisjZGVmaW5lIE9OTENSIDAKKyNlbmRpZgorCisvKgorICogU1ZyNC9YU0kgQ3Vyc2VzIHNwZWNpZnkgdGhhdCBoYXJkd2FyZSBlY2hvIGlzIHR1cm5lZCBvZmYgaW4gaW5pdHNjciwgYW5kIG5vdAorICogcmVzdG9yZWQgZHVyaW5nIHRoZSBjdXJzZXMgc2Vzc2lvbi4gIFRoZSBsaWJyYXJ5IHNpbXVsYXRlcyBlY2hvIGluIHNvZnR3YXJlLgorICogKFRoZSBiZWhhdmlvciBpcyB1bnNwZWNpZmllZCBpZiB0aGUgYXBwbGljYXRpb24gZW5hYmxlcyBoYXJkd2FyZSBlY2hvKS4KKyAqCisgKiBUaGUgbmV3dGVybSBmdW5jdGlvbiBhbHNvIGluaXRpYWxpemVzIHRlcm1pbmFsIHNldHRpbmdzLCBhbmQgc2luY2UgaW5pdHNjcgorICogaXMgc3VwcG9zZWQgdG8gYmVoYXZlIGFzIGlmIGl0IGNhbGxzIG5ld3Rlcm0sIHdlIGRvIGl0IGhlcmUuCisgKi8KK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBpbnQKK19uY19pbml0c2NyKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIC8qIGZvciBleHRlbmRlZCBYUEc0IGNvbmZvcm1hbmNlIHJlcXVpcmVzIGNicmVhaygpIGF0IHRoaXMgcG9pbnQgKi8KKyAgICAvKiAoU1ZyNCBjdXJzZXMgZG9lcyB0aGlzIGFueXdheSkgKi8KKyAgICBpZiAoY2JyZWFrKCkgPT0gT0spIHsKKwlUVFkgYnVmOworCisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyAmPSB+KEVDSE8gfCBFQ0hPTkwpOworCWJ1Zi5jX2lmbGFnICY9IH4oSUNSTkwgfCBJTkxDUiB8IElHTkNSKTsKKwlidWYuY19vZmxhZyAmPSB+KE9OTENSKTsKKyNlbGlmIEhBVkVfU0dUVFlfSAorCWJ1Zi5zZ19mbGFncyAmPSB+KEVDSE8gfCBDUk1PRCk7CisjZWxzZQorCW1lbXNldCgmYnVmLCAwLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKwlpZiAoKHJlc3VsdCA9IF9uY19zZXRfdHR5X21vZGUoJmJ1ZikpID09IE9LKQorCSAgICBjdXJfdGVybS0+TnR0eWIgPSBidWY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBmaWx0ZXIoKSBoYXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBlaXRoZXIgaW5pdHNjcigpIG9yIG5ld3Rlcm0oKSwgc28gdGhlcmUgaXMKKyAqIGFwcGFyZW50bHkgbm8gd2F5IHRvIG1ha2UgdGhpcyBmbGFnIGFwcGx5IHRvIHNvbWUgdGVybWluYWxzIGFuZCBub3Qgb3RoZXJzLAorICogYXNpZGUgZnJvbSBwb3NzaWJseSBkZWxheWluZyBhIGZpbHRlcigpIGNhbGwgdW50aWwgc29tZSB0ZXJtaW5hbHMgaGF2ZSBiZWVuCisgKiBpbml0aWFsaXplZC4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK2ZpbHRlcih2b2lkKQoreworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoImZpbHRlciIpKSk7CisgICAgX25jX3ByZXNjcmVlbi5maWx0ZXJfbW9kZSA9IFRSVUU7CisgICAgcmV0dXJuVm9pZDsKK30KKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisvKgorICogQW4gZXh0ZW5zaW9uLCBhbGxvd2luZyB0aGUgYXBwbGljYXRpb24gdG8gb3BlbiBhIG5ldyBzY3JlZW4gd2l0aG91dAorICogcmVxdWlyaW5nIGl0IHRvIGFsc28gYmUgZmlsdGVyZWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitub2ZpbHRlcih2b2lkKQoreworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoIm5vZmlsdGVyIikpKTsKKyAgICBfbmNfcHJlc2NyZWVuLmZpbHRlcl9tb2RlID0gRkFMU0U7CisgICAgcmV0dXJuVm9pZDsKK30KKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikKK25ld3Rlcm0oTkNVUlNFU19DT05TVCBjaGFyICpuYW1lLCBGSUxFICpvZnAsIEZJTEUgKmlmcCkKK3sKKyAgICBpbnQgdmFsdWU7CisgICAgaW50IGVycnJldDsKKyAgICBTQ1JFRU4gKmN1cnJlbnQ7CisgICAgU0NSRUVOICpyZXN1bHQgPSAwOworICAgIFRFUk1JTkFMICppdHNfdGVybTsKKworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoIm5ld3Rlcm0oXCIlc1wiLCVwLCVwKSIpLCBuYW1lLCBvZnAsIGlmcCkpOworCisgICAgX25jX2luaXRfcHRocmVhZHMoKTsKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIGN1cnJlbnQgPSBTUDsKKyAgICBpdHNfdGVybSA9IChTUCA/IFNQLT5fdGVybSA6IDApOworCisgICAgLyogdGhpcyBsb2FkcyB0aGUgY2FwYWJpbGl0eSBlbnRyeSwgdGhlbiBzZXRzIExJTkVTIGFuZCBDT0xTICovCisgICAgaWYgKHNldHVwdGVybShuYW1lLCBmaWxlbm8ob2ZwKSwgJmVycnJldCkgIT0gRVJSKSB7CisJaW50IHNsa19mb3JtYXQgPSBfbmNfZ2xvYmFscy5zbGtfZm9ybWF0OworCisJLyoKKwkgKiBUaGlzIGFjdHVhbGx5IGFsbG9jYXRlcyB0aGUgc2NyZWVuIHN0cnVjdHVyZSwgYW5kIHNhdmVzIHRoZSBvcmlnaW5hbAorCSAqIHRlcm1pbmFsIHNldHRpbmdzLgorCSAqLworCV9uY19zZXRfc2NyZWVuKDApOworCisJLyogYWxsb3cgdXNlciB0byBzZXQgbWF4aW11bSBlc2NhcGUgZGVsYXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgKi8KKwlpZiAoKHZhbHVlID0gX25jX2dldGVudl9udW0oIkVTQ0RFTEFZIikpID49IDApIHsKKwkgICAgc2V0X2VzY2RlbGF5KHZhbHVlKTsKKwl9CisKKwlpZiAoX25jX3NldHVwc2NyZWVuKExJTkVTLAorCQkJICAgIENPTFMsCisJCQkgICAgb2ZwLAorCQkJICAgIF9uY19wcmVzY3JlZW4uZmlsdGVyX21vZGUsCisJCQkgICAgc2xrX2Zvcm1hdCkgPT0gRVJSKSB7CisJICAgIF9uY19zZXRfc2NyZWVuKGN1cnJlbnQpOworCSAgICByZXN1bHQgPSAwOworCX0gZWxzZSB7CisJICAgIGFzc2VydChTUCAhPSAwKTsKKwkgICAgLyoKKwkgICAgICogSW4gc2V0dXB0ZXJtKCkgd2UgZGlkIGEgc2V0X2N1cnRlcm0oKSwgYnV0IGl0IHdhcyBiZWZvcmUgd2Ugc2V0CisJICAgICAqIFNQLiAgU28gdGhlICJjdXJyZW50IiBzY3JlZW4ncyB0ZXJtaW5hbCBwb2ludGVyIHdhcyBvdmVyd3JpdHRlbgorCSAgICAgKiB3aXRoIGEgZGlmZmVyZW50IHRlcm1pbmFsLiAgTGF0ZXIsIGluIF9uY19zZXR1cHNjcmVlbigpLCB3ZSBzZXQKKwkgICAgICogU1AgYW5kIHRoZSB0ZXJtaW5hbCBwb2ludGVyIGluIHRoZSBuZXcgc2NyZWVuLgorCSAgICAgKgorCSAgICAgKiBSZXN0b3JlIHRoZSB0ZXJtaW5hbC1wb2ludGVyIGZvciB0aGUgcHJlLWV4aXN0aW5nIHNjcmVlbiwgaWYKKwkgICAgICogYW55LgorCSAgICAgKi8KKwkgICAgaWYgKGN1cnJlbnQpCisJCWN1cnJlbnQtPl90ZXJtID0gaXRzX3Rlcm07CisKKwkgICAgLyogaWYgdGhlIHRlcm1pbmFsIHR5cGUgaGFzIHJlYWwgc29mdCBsYWJlbHMsIHNldCB0aG9zZSB1cCAqLworCSAgICBpZiAoc2xrX2Zvcm1hdCAmJiBudW1fbGFiZWxzID4gMCAmJiBTTEtfU1RERk1UKHNsa19mb3JtYXQpKQorCQlfbmNfc2xrX2luaXRpYWxpemUoc3Rkc2NyLCBDT0xTKTsKKworCSAgICBTUC0+X2lmZCA9IGZpbGVubyhpZnApOworCSAgICB0eXBlYWhlYWQoZmlsZW5vKGlmcCkpOworI2lmZGVmIFRFUk1JT1MKKwkgICAgU1AtPl91c2VfbWV0YSA9ICgoY3VyX3Rlcm0tPk90dHliLmNfY2ZsYWcgJiBDU0laRSkgPT0gQ1M4ICYmCisJCQkgICAgICEoY3VyX3Rlcm0tPk90dHliLmNfaWZsYWcgJiBJU1RSSVApKTsKKyNlbHNlCisJICAgIFNQLT5fdXNlX21ldGEgPSBGQUxTRTsKKyNlbmRpZgorCSAgICBTUC0+X2VuZHdpbiA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIENoZWNrIHdoZXRoZXIgd2UgY2FuIG9wdGltaXplIHNjcm9sbGluZyB1bmRlciBkdW1iIHRlcm1pbmFscyBpbgorCSAgICAgKiBjYXNlIHdlIGRvIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjYXBhYmlsaXRpZXMsIHNjcm9sbGluZworCSAgICAgKiBvcHRpbWl6YXRpb24gd2lsbCBiZSB1c2VsZXNzLgorCSAgICAgKi8KKwkgICAgU1AtPl9zY3JvbGxpbmcgPSAoKHNjcm9sbF9mb3J3YXJkICYmIHNjcm9sbF9yZXZlcnNlKSB8fAorCQkJICAgICAgKChwYXJtX3JpbmRleCB8fAorCQkJCXBhcm1faW5zZXJ0X2xpbmUgfHwKKwkJCQlpbnNlcnRfbGluZSkgJiYKKwkJCSAgICAgICAocGFybV9pbmRleCB8fAorCQkJCXBhcm1fZGVsZXRlX2xpbmUgfHwKKwkJCQlkZWxldGVfbGluZSkpKTsKKworCSAgICBiYXVkcmF0ZSgpOwkJLyogc2V0cyBhIGZpZWxkIGluIHRoZSBTUCBzdHJ1Y3R1cmUgKi8KKworCSAgICBTUC0+X2tleXRyeSA9IDA7CisKKwkgICAgLyoKKwkgICAgICogQ2hlY2sgZm9yIG1pc21hdGNoZWQgZ3JhcGhpYy1yZW5kaXRpb24gY2FwYWJpbGl0aWVzLiAgTW9zdCBTVnI0CisJICAgICAqIHRlcm1pbmZvIHRyZWVzIGNvbnRhaW4gZW50cmllcyB0aGF0IGhhdmUgcm11bCBvciBybXNvIGVxdWF0ZWQgdG8KKwkgICAgICogc2dyMCAoU29sYXJpcyBjdXJzZXMgY29wZXMgd2l0aCB0aG9zZSBlbnRyaWVzKS4gIFdlIGRvIHRoaXMgb25seQorCSAgICAgKiBmb3IgY3Vyc2VzLCBzaW5jZSBtYW55IHRlcm1jYXAgYXBwbGljYXRpb25zIGFzc3VtZSB0aGF0CisJICAgICAqIHNtc28vcm1zbyBhbmQgc211bC9ybXVsIGFyZSBwYWlyZWQsIGFuZCB3aWxsIG5vdCBmdW5jdGlvbgorCSAgICAgKiBwcm9wZXJseSBpZiB3ZSByZW1vdmUgcm1zbyBvciBybXVsLiAgQ3Vyc2VzIGFwcGxpY2F0aW9ucworCSAgICAgKiBzaG91bGRuJ3QgYmUgbG9va2luZyBhdCB0aGlzIGRldGFpbC4KKwkgICAgICovCisjZGVmaW5lIFNHUjBfVEVTVChtb2RlKSAobW9kZSAhPSAwKSAmJiAoZXhpdF9hdHRyaWJ1dGVfbW9kZSA9PSAwIHx8IHN0cmNtcChtb2RlLCBleGl0X2F0dHJpYnV0ZV9tb2RlKSkKKwkgICAgU1AtPl91c2Vfcm1zbyA9IFNHUjBfVEVTVChleGl0X3N0YW5kb3V0X21vZGUpOworCSAgICBTUC0+X3VzZV9ybXVsID0gU0dSMF9URVNUKGV4aXRfdW5kZXJsaW5lX21vZGUpOworCisJICAgIC8qIGNvbXB1dGUgbW92ZW1lbnQgY29zdHMgc28gd2UgY2FuIGRvIGJldHRlciBtb3ZlIG9wdGltaXphdGlvbiAqLworCSAgICBfbmNfbXZjdXJfaW5pdCgpOworCisJICAgIC8qIGluaXRpYWxpemUgdGVybWluYWwgdG8gYSBzYW5lIHN0YXRlICovCisJICAgIF9uY19zY3JlZW5faW5pdCgpOworCisJICAgIC8qIEluaXRpYWxpemUgdGhlIHRlcm1pbmFsIGxpbmUgc2V0dGluZ3MuICovCisJICAgIF9uY19pbml0c2NyKCk7CisKKwkgICAgX25jX3NpZ25hbF9oYW5kbGVyKFRSVUUpOworCisJICAgIHJlc3VsdCA9IFNQOworCX0KKyAgICB9CisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICByZXR1cm5TUChyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9uZXd3aW4uYyBiL25jdXJzZXMvYmFzZS9saWJfbmV3d2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3ZTgzYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfbmV3d2luLmMKQEAgLTAsMCArMSwzMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9uZXd3aW4uYworKioKKyoqCVRoZSByb3V0aW5lcyBuZXd3aW4oKSwgc3Vid2luKCkgYW5kIHRoZWlyIGRlcGVuZGVudAorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX25ld3dpbi5jLHYgMS41MiAyMDA4LzA2LzA3IDEzOjU4OjA5IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgd2luZG93X2lzKG5hbWUpICgoc3ApLT5fIyNuYW1lID09IHdpbikKKworI2lmIFVTRV9SRUVOVFJBTlQKKyNkZWZpbmUgcmVtb3ZlX3dpbmRvdyhuYW1lKSBcCisJCXNwLT5fIyNuYW1lID0gMAorI2Vsc2UKKyNkZWZpbmUgcmVtb3ZlX3dpbmRvdyhuYW1lKSBcCisJCXNwLT5fIyNuYW1lID0gMDsgXAorCQlpZiAod2luID09IG5hbWUpIFwKKwkJICAgIG5hbWUgPSAwCisjZW5kaWYKKworc3RhdGljIHZvaWQKK3JlbW92ZV93aW5kb3dfZnJvbV9zY3JlZW4oV0lORE9XICp3aW4pCit7CisgICAgU0NSRUVOICpzcDsKKworICAgIGZvciAoZWFjaF9zY3JlZW4oc3ApKSB7CisJaWYgKHdpbmRvd19pcyhjdXJzY3IpKSB7CisJICAgIHJlbW92ZV93aW5kb3coY3Vyc2NyKTsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmICh3aW5kb3dfaXMoc3Rkc2NyKSkgeworCSAgICByZW1vdmVfd2luZG93KHN0ZHNjcik7CisJICAgIGJyZWFrOworCX0gZWxzZSBpZiAod2luZG93X2lzKG5ld3NjcikpIHsKKwkgICAgcmVtb3ZlX3dpbmRvdyhuZXdzY3IpOworCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZnJlZXdpbihXSU5ET1cgKndpbikKK3sKKyAgICBXSU5ET1dMSVNUICpwLCAqcTsKKyAgICBpbnQgaTsKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIl9uY19mcmVld2luKCVwKSIpLCB3aW4pKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCWlmIChfbmNfdHJ5X2dsb2JhbChjdXJzZXMpID09IDApIHsKKwkgICAgcSA9IDA7CisJICAgIGZvciAoZWFjaF93aW5kb3cocCkpIHsKKwkJaWYgKCYocC0+d2luKSA9PSB3aW4pIHsKKwkJICAgIHJlbW92ZV93aW5kb3dfZnJvbV9zY3JlZW4od2luKTsKKwkJICAgIGlmIChxID09IDApCisJCQlfbmNfd2luZG93cyA9IHAtPm5leHQ7CisJCSAgICBlbHNlCisJCQlxLT5uZXh0ID0gcC0+bmV4dDsKKworCQkgICAgaWYgKCEod2luLT5fZmxhZ3MgJiBfU1VCV0lOKSkgeworCQkJZm9yIChpID0gMDsgaSA8PSB3aW4tPl9tYXh5OyBpKyspCisJCQkgICAgRnJlZUlmTmVlZGVkKHdpbi0+X2xpbmVbaV0udGV4dCk7CisJCSAgICB9CisJCSAgICBmcmVlKHdpbi0+X2xpbmUpOworCQkgICAgZnJlZShwKTsKKworCQkgICAgcmVzdWx0ID0gT0s7CisJCSAgICBUKCgiLi4uZGVsZXRlZCB3aW49JXAiLCB3aW4pKTsKKwkJICAgIGJyZWFrOworCQl9CisJCXEgPSBwOworCSAgICB9CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorbmV3d2luKGludCBudW1fbGluZXMsIGludCBudW1fY29sdW1ucywgaW50IGJlZ3ksIGludCBiZWd4KQoreworICAgIFdJTkRPVyAqd2luOworICAgIE5DVVJTRVNfQ0hfVCAqcHRyOworICAgIGludCBpOworCisgICAgVCgoVF9DQUxMRUQoIm5ld3dpbiglZCwlZCwlZCwlZCkiKSwgbnVtX2xpbmVzLCBudW1fY29sdW1ucywgYmVneSwgYmVneCkpOworCisgICAgaWYgKGJlZ3kgPCAwIHx8IGJlZ3ggPCAwIHx8IG51bV9saW5lcyA8IDAgfHwgbnVtX2NvbHVtbnMgPCAwKQorCXJldHVybldpbigwKTsKKworICAgIGlmIChudW1fbGluZXMgPT0gMCkKKwludW1fbGluZXMgPSBTUC0+X2xpbmVzX2F2YWlsIC0gYmVneTsKKyAgICBpZiAobnVtX2NvbHVtbnMgPT0gMCkKKwludW1fY29sdW1ucyA9IHNjcmVlbl9jb2x1bW5zIC0gYmVneDsKKworICAgIGlmICgod2luID0gX25jX21ha2VuZXcobnVtX2xpbmVzLCBudW1fY29sdW1ucywgYmVneSwgYmVneCwgMCkpID09IDApCisJcmV0dXJuV2luKDApOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9saW5lczsgaSsrKSB7CisJd2luLT5fbGluZVtpXS50ZXh0ID0gdHlwZUNhbGxvYyhOQ1VSU0VTX0NIX1QsICh1bnNpZ25lZCkgbnVtX2NvbHVtbnMpOworCWlmICh3aW4tPl9saW5lW2ldLnRleHQgPT0gMCkgeworCSAgICAodm9pZCkgX25jX2ZyZWV3aW4od2luKTsKKwkgICAgcmV0dXJuV2luKDApOworCX0KKwlmb3IgKHB0ciA9IHdpbi0+X2xpbmVbaV0udGV4dDsKKwkgICAgIHB0ciA8IHdpbi0+X2xpbmVbaV0udGV4dCArIG51bV9jb2x1bW5zOworCSAgICAgcHRyKyspCisJICAgIFNldENoYXIoKnB0ciwgQkxBTktfVEVYVCwgQkxBTktfQVRUUik7CisgICAgfQorCisgICAgcmV0dXJuV2luKHdpbik7Cit9CisKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorZGVyd2luKFdJTkRPVyAqb3JpZywgaW50IG51bV9saW5lcywgaW50IG51bV9jb2x1bW5zLCBpbnQgYmVneSwgaW50IGJlZ3gpCit7CisgICAgV0lORE9XICp3aW47CisgICAgaW50IGk7CisgICAgaW50IGZsYWdzID0gX1NVQldJTjsKKworICAgIFQoKFRfQ0FMTEVEKCJkZXJ3aW4oJXAsJWQsJWQsJWQsJWQpIiksIG9yaWcsIG51bV9saW5lcywgbnVtX2NvbHVtbnMsCisgICAgICAgYmVneSwgYmVneCkpOworCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgd2luZG93IGZpdHMgaW5zaWRlIHRoZSBvcmlnaW5hbCBvbmUKKyAgICAgKi8KKyAgICBpZiAoYmVneSA8IDAgfHwgYmVneCA8IDAgfHwgb3JpZyA9PSAwIHx8IG51bV9saW5lcyA8IDAgfHwgbnVtX2NvbHVtbnMgPCAwKQorCXJldHVybldpbigwKTsKKyAgICBpZiAoYmVneSArIG51bV9saW5lcyA+IG9yaWctPl9tYXh5ICsgMQorCXx8IGJlZ3ggKyBudW1fY29sdW1ucyA+IG9yaWctPl9tYXh4ICsgMSkKKwlyZXR1cm5XaW4oMCk7CisKKyAgICBpZiAobnVtX2xpbmVzID09IDApCisJbnVtX2xpbmVzID0gb3JpZy0+X21heHkgKyAxIC0gYmVneTsKKworICAgIGlmIChudW1fY29sdW1ucyA9PSAwKQorCW51bV9jb2x1bW5zID0gb3JpZy0+X21heHggKyAxIC0gYmVneDsKKworICAgIGlmIChvcmlnLT5fZmxhZ3MgJiBfSVNQQUQpCisJZmxhZ3MgfD0gX0lTUEFEOworCisgICAgaWYgKCh3aW4gPSBfbmNfbWFrZW5ldyhudW1fbGluZXMsIG51bV9jb2x1bW5zLCBvcmlnLT5fYmVneSArIGJlZ3ksCisJCQkgICBvcmlnLT5fYmVneCArIGJlZ3gsIGZsYWdzKSkgPT0gMCkKKwlyZXR1cm5XaW4oMCk7CisKKyAgICB3aW4tPl9wYXJ5ID0gYmVneTsKKyAgICB3aW4tPl9wYXJ4ID0gYmVneDsKKyAgICBXSU5ET1dfQVRUUlMod2luKSA9IFdJTkRPV19BVFRSUyhvcmlnKTsKKyAgICB3aW4tPl9uY19ia2dkID0gb3JpZy0+X25jX2JrZ2Q7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2xpbmVzOyBpKyspCisJd2luLT5fbGluZVtpXS50ZXh0ID0gJm9yaWctPl9saW5lW2JlZ3krK10udGV4dFtiZWd4XTsKKworICAgIHdpbi0+X3BhcmVudCA9IG9yaWc7CisKKyAgICByZXR1cm5XaW4od2luKTsKK30KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitzdWJ3aW4oV0lORE9XICp3LCBpbnQgbCwgaW50IGMsIGludCB5LCBpbnQgeCkKK3sKKyAgICBUKChUX0NBTExFRCgic3Vid2luKCVwLCAlZCwgJWQsICVkLCAlZCkiKSwgdywgbCwgYywgeSwgeCkpOworICAgIFQoKCJwYXJlbnQgaGFzIGJlZ3kgPSAlbGQsIGJlZ3ggPSAlbGQiLCAobG9uZykgdy0+X2JlZ3ksIChsb25nKSB3LT5fYmVneCkpOworCisgICAgcmV0dXJuV2luKGRlcndpbih3LCBsLCBjLCB5IC0gdy0+X2JlZ3ksIHggLSB3LT5fYmVneCkpOworfQorCitzdGF0aWMgYm9vbAorZGltZW5zaW9uX2xpbWl0KGludCB2YWx1ZSkKK3sKKyAgICBOQ1VSU0VTX1NJWkVfVCB0ZXN0ID0gdmFsdWU7CisgICAgcmV0dXJuICh0ZXN0ID09IHZhbHVlICYmIHZhbHVlID4gMCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorX25jX21ha2VuZXcoaW50IG51bV9saW5lcywgaW50IG51bV9jb2x1bW5zLCBpbnQgYmVneSwgaW50IGJlZ3gsIGludCBmbGFncykKK3sKKyAgICBpbnQgaTsKKyAgICBXSU5ET1dMSVNUICp3cDsKKyAgICBXSU5ET1cgKndpbjsKKyAgICBib29sIGlzX3BhZCA9IChmbGFncyAmIF9JU1BBRCk7CisKKyAgICBUKChUX0NBTExFRCgiX25jX21ha2VuZXcoJWQsJWQsJWQsJWQpIiksIG51bV9saW5lcywgbnVtX2NvbHVtbnMsIGJlZ3ksIGJlZ3gpKTsKKworICAgIGlmIChTUCA9PSAwKQorCXJldHVybldpbigwKTsKKworICAgIGlmICghZGltZW5zaW9uX2xpbWl0KG51bV9saW5lcykgfHwgIWRpbWVuc2lvbl9saW1pdChudW1fY29sdW1ucykpCisJcmV0dXJuV2luKDApOworCisgICAgaWYgKCh3cCA9IHR5cGVDYWxsb2MoV0lORE9XTElTVCwgMSkpID09IDApCisJcmV0dXJuV2luKDApOworCisgICAgd2luID0gJih3cC0+d2luKTsKKworICAgIGlmICgod2luLT5fbGluZSA9IHR5cGVDYWxsb2Moc3RydWN0IGxkYXQsICgodW5zaWduZWQpIG51bV9saW5lcykpKSA9PSAwKSB7CisJZnJlZSh3aW4pOworCXJldHVybldpbigwKTsKKyAgICB9CisKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIHdpbi0+X2N1cnggPSAwOworICAgIHdpbi0+X2N1cnkgPSAwOworICAgIHdpbi0+X21heHkgPSBudW1fbGluZXMgLSAxOworICAgIHdpbi0+X21heHggPSBudW1fY29sdW1ucyAtIDE7CisgICAgd2luLT5fYmVneSA9IGJlZ3k7CisgICAgd2luLT5fYmVneCA9IGJlZ3g7CisgICAgd2luLT5feW9mZnNldCA9IFNQLT5fdG9wc3RvbGVuOworCisgICAgd2luLT5fZmxhZ3MgPSBmbGFnczsKKyAgICBXSU5ET1dfQVRUUlMod2luKSA9IEFfTk9STUFMOworICAgIFNldENoYXIod2luLT5fbmNfYmtnZCwgQkxBTktfVEVYVCwgQkxBTktfQVRUUik7CisKKyAgICB3aW4tPl9jbGVhciA9IGlzX3BhZCA/IEZBTFNFIDogKG51bV9saW5lcyA9PSBzY3JlZW5fbGluZXMKKwkJCQkgICAgJiYgbnVtX2NvbHVtbnMgPT0gc2NyZWVuX2NvbHVtbnMpOworICAgIHdpbi0+X2lkbG9rID0gRkFMU0U7CisgICAgd2luLT5faWRjb2sgPSBUUlVFOworICAgIHdpbi0+X3Njcm9sbCA9IEZBTFNFOworICAgIHdpbi0+X2xlYXZlb2sgPSBGQUxTRTsKKyAgICB3aW4tPl91c2Vfa2V5cGFkID0gRkFMU0U7CisgICAgd2luLT5fZGVsYXkgPSAtMTsKKyAgICB3aW4tPl9pbW1lZCA9IEZBTFNFOworICAgIHdpbi0+X3N5bmMgPSAwOworICAgIHdpbi0+X3BhcnggPSAtMTsKKyAgICB3aW4tPl9wYXJ5ID0gLTE7CisgICAgd2luLT5fcGFyZW50ID0gMDsKKworICAgIHdpbi0+X3JlZ3RvcCA9IDA7CisgICAgd2luLT5fcmVnYm90dG9tID0gbnVtX2xpbmVzIC0gMTsKKworICAgIHdpbi0+X3BhZC5fcGFkX3kgPSAtMTsKKyAgICB3aW4tPl9wYWQuX3BhZF94ID0gLTE7CisgICAgd2luLT5fcGFkLl9wYWRfdG9wID0gLTE7CisgICAgd2luLT5fcGFkLl9wYWRfYm90dG9tID0gLTE7CisgICAgd2luLT5fcGFkLl9wYWRfbGVmdCA9IC0xOworICAgIHdpbi0+X3BhZC5fcGFkX3JpZ2h0ID0gLTE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2xpbmVzOyBpKyspIHsKKwkvKgorCSAqIFRoaXMgdXNlZCB0byBkbworCSAqCisJICogd2luLT5fbGluZVtpXS5maXJzdGNoYXIgPSB3aW4tPl9saW5lW2ldLmxhc3RjaGFyID0gX05PQ0hBTkdFOworCSAqCisJICogd2hpY2ggbWFya3MgdGhlIHdob2xlIHdpbmRvdyB1bmNoYW5nZWQuICBUaGF0J3MgaG93CisJICogU1ZyMSBjdXJzZXMgZGlkIGl0LCBidXQgU1ZyNCBjdXJzZXMgbWFya3MgdGhlIHdob2xlIG5ldworCSAqIHdpbmRvdyBjaGFuZ2VkLgorCSAqCisJICogV2l0aCB0aGUgb2xkIFNWcjEtbGlrZSBjb2RlLCBzYXkgeW91IGhhdmUgc3Rkc2NyIGZ1bGwgb2YKKwkgKiBjaGFyYWN0ZXJzLCB0aGVuIGNyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBuZXd3aW4oKSwKKwkgKiB0aGVuIGRvIGEgcHJpbnR3KHdpbiwgImZvbyAgICAgICAgIik7LCB0aGUgdHJhaWxpbmcgc3BhY2VzIGFyZQorCSAqIGNvbXBsZXRlbHkgaWdub3JlZCBieSB0aGUgZm9sbG93aW5nIHJlZnJlc2hlcy4gIFNvLCB5b3UKKwkgKiBnZXQgImZvb2p1bmtqdW5rIiBvbiB0aGUgc2NyZWVuIGluc3RlYWQgb2YgImZvbyAgICAgICAgIiBhcworCSAqIHlvdSBhY3R1YWxseSBpbnRlbmRlZC4KKwkgKgorCSAqIFNWcjQgZG9lc24ndCBkbyB0aGlzLiAgSW5zdGVhZCB0aGUgc3BhY2VzIGFyZSBhY3R1YWxseSB3cml0dGVuLgorCSAqIFNvIHRoYXQncyBob3cgd2Ugd2FudCBuY3Vyc2VzIHRvIGJlaGF2ZS4KKwkgKi8KKwl3aW4tPl9saW5lW2ldLmZpcnN0Y2hhciA9IDA7CisJd2luLT5fbGluZVtpXS5sYXN0Y2hhciA9IG51bV9jb2x1bW5zIC0gMTsKKworCWlmX1VTRV9TQ1JPTExfSElOVFMod2luLT5fbGluZVtpXS5vbGRpbmRleCA9IGkpOworICAgIH0KKworICAgIGlmICghaXNfcGFkICYmIChiZWd4ICsgbnVtX2NvbHVtbnMgPT0gc2NyZWVuX2NvbHVtbnMpKSB7CisJd2luLT5fZmxhZ3MgfD0gX0VORExJTkU7CisKKwlpZiAoYmVneCA9PSAwICYmIG51bV9saW5lcyA9PSBzY3JlZW5fbGluZXMgJiYgYmVneSA9PSAwKQorCSAgICB3aW4tPl9mbGFncyB8PSBfRlVMTFdJTjsKKworCWlmIChiZWd5ICsgbnVtX2xpbmVzID09IHNjcmVlbl9saW5lcykKKwkgICAgd2luLT5fZmxhZ3MgfD0gX1NDUk9MTFdJTjsKKyAgICB9CisKKyAgICB3cC0+bmV4dCA9IF9uY193aW5kb3dzOworICAgIHdwLT5zY3JlZW4gPSBTUDsKKyAgICBfbmNfd2luZG93cyA9IHdwOworCisgICAgVCgoVF9DUkVBVEUoIndpbmRvdyAlcCIpLCB3aW4pKTsKKworICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgcmV0dXJuV2luKHdpbik7Cit9CisKKy8qCisgKiB3Z2V0Y2goKSBhbmQgb3RoZXIgZnVuY3Rpb25zIHdpdGggYSBXSU5ET1cqIHBhcmFtZXRlciBtYXkgdXNlIGEgU0NSRUVOKgorICogaW50ZXJuYWxseSwgYW5kIGl0IGlzIHVzZWZ1bCB0byBhbGxvdyB0aG9zZSB0byBiZSBpbnZva2VkIHdpdGhvdXQgc3dpdGNoaW5nCisgKiBTQ1JFRU4ncywgZS5nLiwgZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KKyAqLworTkNVUlNFU19FWFBPUlQoU0NSRUVOICopCitfbmNfc2NyZWVuX29mKFdJTkRPVyAqd2luKQoreworICAgIFNDUkVFTiAqc3AgPSAwOworCisgICAgaWYgKHdpbiAhPSAwKSB7CisJV0lORE9XTElTVCAqd3AgPSAoV0lORE9XTElTVCAqKSB3aW47CisJc3AgPSB3cC0+c2NyZWVuOworICAgIH0KKyAgICByZXR1cm4gKHNwKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfbmwuYyBiL25jdXJzZXMvYmFzZS9saWJfbmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjUxNWRhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9ubC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMTk5OSwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbmwuYworICoKKyAqCVJvdXRpbmVzOgorICoJCW5sKCkKKyAqCQlub25sKCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfbmwuYyx2IDEuOCAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKKyNpZmRlZiBfX0VNWF9fCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitubCh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJubCgpIikpKTsKKworICAgIFNQLT5fbmwgPSBUUlVFOworCisjaWZkZWYgX19FTVhfXworICAgIF9uY19mbHVzaCgpOworICAgIF9mc2V0bW9kZShOQ19PVVRQVVQsICJ0Iik7CisjZW5kaWYKKworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitub25sKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoIm5vbmwoKSIpKSk7CisKKyAgICBTUC0+X25sID0gRkFMU0U7CisKKyNpZmRlZiBfX0VNWF9fCisgICAgX25jX2ZsdXNoKCk7CisgICAgX2ZzZXRtb2RlKE5DX09VVFBVVCwgImIiKTsKKyNlbmRpZgorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX292ZXJsYXkuYyBiL25jdXJzZXMvYmFzZS9saWJfb3ZlcmxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OWU4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX292ZXJsYXkuYwpAQCAtMCwwICsxLDIwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfb3ZlcmxheS5jCisqKgorKioJVGhlIHJvdXRpbmVzIG92ZXJsYXkoKSwgY29weXdpbigpLCBhbmQgb3ZlcndyaXRlKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfb3ZlcmxheS5jLHYgMS4yNyAyMDA4LzA2LzA3IDIzOjMwOjM0IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQKK292ZXJsYXAoY29uc3QgV0lORE9XICpjb25zdCBzcmMsIFdJTkRPVyAqY29uc3QgZHN0LCBpbnQgY29uc3QgZmxhZykKK3sKKyAgICBpbnQgcmMgPSBFUlI7CisgICAgaW50IHN4MSwgc3kxLCBzeDIsIHN5MjsKKyAgICBpbnQgZHgxLCBkeTEsIGR4MiwgZHkyOworICAgIGludCBzbWlucm93LCBzbWluY29sOworICAgIGludCBkbWlucm93LCBkbWluY29sOworICAgIGludCBkbWF4cm93LCBkbWF4Y29sOworCisgICAgVCgoVF9DQUxMRUQoIm92ZXJsYXAoJXAsJXAsJWQpIiksIHNyYywgZHN0LCBmbGFnKSk7CisKKyAgICBpZiAoc3JjICE9IDAgJiYgZHN0ICE9IDApIHsKKwlfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKworCVQoKCJzcmMgOiBiZWd5ICVsZCwgYmVneCAlbGQsIG1heHkgJWxkLCBtYXh4ICVsZCIsCisJICAgKGxvbmcpIHNyYy0+X2JlZ3ksCisJICAgKGxvbmcpIHNyYy0+X2JlZ3gsCisJICAgKGxvbmcpIHNyYy0+X21heHksCisJICAgKGxvbmcpIHNyYy0+X21heHgpKTsKKwlUKCgiZHN0IDogYmVneSAlbGQsIGJlZ3ggJWxkLCBtYXh5ICVsZCwgbWF4eCAlbGQiLAorCSAgIChsb25nKSBkc3QtPl9iZWd5LAorCSAgIChsb25nKSBkc3QtPl9iZWd4LAorCSAgIChsb25nKSBkc3QtPl9tYXh5LAorCSAgIChsb25nKSBkc3QtPl9tYXh4KSk7CisKKwlzeDEgPSBzcmMtPl9iZWd4OworCXN5MSA9IHNyYy0+X2JlZ3k7CisJc3gyID0gc3gxICsgc3JjLT5fbWF4eDsKKwlzeTIgPSBzeTEgKyBzcmMtPl9tYXh5OworCisJZHgxID0gZHN0LT5fYmVneDsKKwlkeTEgPSBkc3QtPl9iZWd5OworCWR4MiA9IGR4MSArIGRzdC0+X21heHg7CisJZHkyID0gZHkxICsgZHN0LT5fbWF4eTsKKworCWlmIChkeDIgPj0gc3gxICYmIGR4MSA8PSBzeDIgJiYgZHkyID49IHN5MSAmJiBkeTEgPD0gc3kyKSB7CisJICAgIHNtaW5yb3cgPSBtYXgoc3kxLCBkeTEpIC0gc3kxOworCSAgICBzbWluY29sID0gbWF4KHN4MSwgZHgxKSAtIHN4MTsKKwkgICAgZG1pbnJvdyA9IG1heChzeTEsIGR5MSkgLSBkeTE7CisJICAgIGRtaW5jb2wgPSBtYXgoc3gxLCBkeDEpIC0gZHgxOworCSAgICBkbWF4cm93ID0gbWluKHN5MiwgZHkyKSAtIGR5MTsKKwkgICAgZG1heGNvbCA9IG1pbihzeDIsIGR4MikgLSBkeDE7CisKKwkgICAgcmMgPSBjb3B5d2luKHNyYywgZHN0LAorCQkJIHNtaW5yb3csIHNtaW5jb2wsCisJCQkgZG1pbnJvdywgZG1pbmNvbCwKKwkJCSBkbWF4cm93LCBkbWF4Y29sLAorCQkJIGZsYWcpOworCX0KKwlfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJjKTsKK30KKworLyoKKyoqCisqKglvdmVybGF5KHdpbjEsIHdpbjIpCisqKgorKioKKyoqCW92ZXJsYXkoKSB3cml0ZXMgdGhlIG92ZXJsYXBwaW5nIGFyZWEgb2Ygd2luMSBiZWhpbmQgd2luMgorKioJb24gd2luMiBub24tZGVzdHJ1Y3RpdmVseS4KKyoqCisqKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorb3ZlcmxheShjb25zdCBXSU5ET1cgKndpbjEsIFdJTkRPVyAqd2luMikKK3sKKyAgICBUKChUX0NBTExFRCgib3ZlcmxheSglcCwlcCkiKSwgd2luMSwgd2luMikpOworICAgIHJldHVybkNvZGUob3ZlcmxhcCh3aW4xLCB3aW4yLCBUUlVFKSk7Cit9CisKKy8qCisqKgorKioJb3ZlcndyaXRlKHdpbjEsIHdpbjIpCisqKgorKioKKyoqCW92ZXJ3cml0ZSgpIHdyaXRlcyB0aGUgb3ZlcmxhcHBpbmcgYXJlYSBvZiB3aW4xIGJlaGluZCB3aW4yCisqKglvbiB3aW4yIGRlc3RydWN0aXZlbHkuCisqKgorKiovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK292ZXJ3cml0ZShjb25zdCBXSU5ET1cgKndpbjEsIFdJTkRPVyAqd2luMikKK3sKKyAgICBUKChUX0NBTExFRCgib3ZlcndyaXRlKCVwLCVwKSIpLCB3aW4xLCB3aW4yKSk7CisgICAgcmV0dXJuQ29kZShvdmVybGFwKHdpbjEsIHdpbjIsIEZBTFNFKSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2NvcHl3aW4oY29uc3QgV0lORE9XICpzcmMsIFdJTkRPVyAqZHN0LAorCWludCBzbWlucm93LCBpbnQgc21pbmNvbCwKKwlpbnQgZG1pbnJvdywgaW50IGRtaW5jb2wsCisJaW50IGRtYXhyb3csIGludCBkbWF4Y29sLAorCWludCBvdmVyKQoreworICAgIGludCByYyA9IEVSUjsKKyAgICBpbnQgc3gsIHN5LCBkeCwgZHk7CisgICAgYm9vbCB0b3VjaGVkOworICAgIGF0dHJfdCBiazsKKyAgICBhdHRyX3QgbWFzazsKKworICAgIFQoKFRfQ0FMTEVEKCJjb3B5d2luKCVwLCAlcCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQpIiksCisgICAgICAgc3JjLCBkc3QsIHNtaW5yb3csIHNtaW5jb2wsIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2wsIG92ZXIpKTsKKworICAgIGlmIChzcmMgJiYgZHN0KSB7CisJX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKwliayA9IEF0dHJPZihkc3QtPl9uY19ia2dkKTsKKwltYXNrID0gfihhdHRyX3QpICgoYmsgJiBBX0NPTE9SKSA/IEFfQ09MT1IgOiAwKTsKKworCS8qIG1ha2Ugc3VyZSByZWN0YW5nbGUgZXhpc3RzIGluIHNvdXJjZSAqLworCWlmICgoc21pbnJvdyArIGRtYXhyb3cgLSBkbWlucm93KSA8PSAoc3JjLT5fbWF4eSArIDEpICYmCisJICAgIChzbWluY29sICsgZG1heGNvbCAtIGRtaW5jb2wpIDw9IChzcmMtPl9tYXh4ICsgMSkpIHsKKworCSAgICBUKCgicmVjdGFuZ2xlIGV4aXN0cyBpbiBzb3VyY2UiKSk7CisKKwkgICAgLyogbWFrZSBzdXJlIHJlY3RhbmdsZSBmaXRzIGluIGRlc3RpbmF0aW9uICovCisJICAgIGlmIChkbWF4cm93IDw9IGRzdC0+X21heHkgJiYgZG1heGNvbCA8PSBkc3QtPl9tYXh4KSB7CisKKwkJVCgoInJlY3RhbmdsZSBmaXRzIGluIGRlc3RpbmF0aW9uIikpOworCisJCWZvciAoZHkgPSBkbWlucm93LCBzeSA9IHNtaW5yb3c7CisJCSAgICAgZHkgPD0gZG1heHJvdzsKKwkJICAgICBzeSsrLCBkeSsrKSB7CisKKwkJICAgIHRvdWNoZWQgPSBGQUxTRTsKKwkJICAgIGZvciAoZHggPSBkbWluY29sLCBzeCA9IHNtaW5jb2w7CisJCQkgZHggPD0gZG1heGNvbDsKKwkJCSBzeCsrLCBkeCsrKSB7CisJCQlpZiAob3ZlcikgeworCQkJICAgIGlmICgoQ2hhck9mKHNyYy0+X2xpbmVbc3ldLnRleHRbc3hdKSAhPSBMKCcgJykpICYmCisJCQkJKCFDaGFyRXEoZHN0LT5fbGluZVtkeV0udGV4dFtkeF0sCisJCQkJCSBzcmMtPl9saW5lW3N5XS50ZXh0W3N4XSkpKSB7CisJCQkJZHN0LT5fbGluZVtkeV0udGV4dFtkeF0gPQorCQkJCSAgICBzcmMtPl9saW5lW3N5XS50ZXh0W3N4XTsKKwkJCQlTZXRBdHRyKGRzdC0+X2xpbmVbZHldLnRleHRbZHhdLAorCQkJCQkoKEF0dHJPZihzcmMtPl9saW5lW3N5XS50ZXh0W3N4XSkgJgorCQkJCQkgIG1hc2spIHwgYmspKTsKKwkJCQl0b3VjaGVkID0gVFJVRTsKKwkJCSAgICB9CisJCQl9IGVsc2UgeworCQkJICAgIGlmICghQ2hhckVxKGRzdC0+X2xpbmVbZHldLnRleHRbZHhdLAorCQkJCQlzcmMtPl9saW5lW3N5XS50ZXh0W3N4XSkpIHsKKwkJCQlkc3QtPl9saW5lW2R5XS50ZXh0W2R4XSA9CisJCQkJICAgIHNyYy0+X2xpbmVbc3ldLnRleHRbc3hdOworCQkJCXRvdWNoZWQgPSBUUlVFOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmICh0b3VjaGVkKSB7CisJCQl0b3VjaGxpbmUoZHN0LCBkbWlucm93LCAoZG1heHJvdyAtIGRtaW5yb3cgKyAxKSk7CisJCSAgICB9CisJCX0KKwkJVCgoImZpbmlzaGVkIGNvcHl3aW4iKSk7CisJCXJjID0gT0s7CisJICAgIH0KKwl9CisJX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyYyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3BhZC5jIGIvbmN1cnNlcy9iYXNlL2xpYl9wYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2FkOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9wYWQuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGxpYl9wYWQuYworICogbmV3cGFkCS0tIGNyZWF0ZSBhIG5ldyBwYWQKKyAqIHBub3V0cmVmcmVzaCAtLSByZWZyZXNoIGEgcGFkLCBubyB1cGRhdGUKKyAqIHBlY2hvY2hhcgktLSBhZGQgYSBjaGFyIHRvIGEgcGFkIGFuZCByZWZyZXNoCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfcGFkLmMsdiAxLjQxIDIwMDYvMTAvMTQgMjA6NDc6MTMgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCituZXdwYWQoaW50IGwsIGludCBjKQoreworICAgIFdJTkRPVyAqd2luOworICAgIE5DVVJTRVNfQ0hfVCAqcHRyOworICAgIGludCBpOworCisgICAgVCgoVF9DQUxMRUQoIm5ld3BhZCglZCwgJWQpIiksIGwsIGMpKTsKKworICAgIGlmIChsIDw9IDAgfHwgYyA8PSAwKQorCXJldHVybldpbigwKTsKKworICAgIGlmICgod2luID0gX25jX21ha2VuZXcobCwgYywgMCwgMCwgX0lTUEFEKSkgPT0gTlVMTCkKKwlyZXR1cm5XaW4oMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7CisJaWZfVVNFX1NDUk9MTF9ISU5UUyh3aW4tPl9saW5lW2ldLm9sZGluZGV4ID0gX05FV0lOREVYKTsKKwlpZiAoKHdpbi0+X2xpbmVbaV0udGV4dCA9IHR5cGVDYWxsb2MoTkNVUlNFU19DSF9ULCAoKHNpemVfdCkgYykpKSA9PSAwKSB7CisJICAgICh2b2lkKSBfbmNfZnJlZXdpbih3aW4pOworCSAgICByZXR1cm5XaW4oMCk7CisJfQorCWZvciAocHRyID0gd2luLT5fbGluZVtpXS50ZXh0OyBwdHIgPCB3aW4tPl9saW5lW2ldLnRleHQgKyBjOyBwdHIrKykKKwkgICAgU2V0Q2hhcigqcHRyLCBCTEFOS19URVhULCBCTEFOS19BVFRSKTsKKyAgICB9CisKKyAgICByZXR1cm5XaW4od2luKTsKK30KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitzdWJwYWQoV0lORE9XICpvcmlnLCBpbnQgbCwgaW50IGMsIGludCBiZWd5LCBpbnQgYmVneCkKK3sKKyAgICBXSU5ET1cgKndpbiA9IChXSU5ET1cgKikgMDsKKworICAgIFQoKFRfQ0FMTEVEKCJzdWJwYWQoJWQsICVkKSIpLCBsLCBjKSk7CisKKyAgICBpZiAob3JpZykgeworCWlmICghKG9yaWctPl9mbGFncyAmIF9JU1BBRCkKKwkgICAgfHwgKCh3aW4gPSBkZXJ3aW4ob3JpZywgbCwgYywgYmVneSwgYmVneCkpID09IE5VTEwpKQorCSAgICByZXR1cm5XaW4oMCk7CisgICAgfQorICAgIHJldHVybldpbih3aW4pOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwcmVmcmVzaChXSU5ET1cgKndpbiwKKwkgaW50IHBtaW5yb3csCisJIGludCBwbWluY29sLAorCSBpbnQgc21pbnJvdywKKwkgaW50IHNtaW5jb2wsCisJIGludCBzbWF4cm93LAorCSBpbnQgc21heGNvbCkKK3sKKyAgICBUKChUX0NBTExFRCgicHJlZnJlc2goKSIpKSk7CisgICAgaWYgKHBub3V0cmVmcmVzaCh3aW4sIHBtaW5yb3csIHBtaW5jb2wsIHNtaW5yb3csIHNtaW5jb2wsIHNtYXhyb3csCisJCSAgICAgc21heGNvbCkgIT0gRVJSCisJJiYgZG91cGRhdGUoKSAhPSBFUlIpIHsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShFUlIpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwbm91dHJlZnJlc2goV0lORE9XICp3aW4sCisJICAgICBpbnQgcG1pbnJvdywKKwkgICAgIGludCBwbWluY29sLAorCSAgICAgaW50IHNtaW5yb3csCisJICAgICBpbnQgc21pbmNvbCwKKwkgICAgIGludCBzbWF4cm93LAorCSAgICAgaW50IHNtYXhjb2wpCit7CisgICAgTkNVUlNFU19TSVpFX1QgaSwgajsKKyAgICBOQ1VSU0VTX1NJWkVfVCBtLCBuOworICAgIE5DVVJTRVNfU0laRV9UIHBtYXhyb3c7CisgICAgTkNVUlNFU19TSVpFX1QgcG1heGNvbDsKKworI2lmIFVTRV9TQ1JPTExfSElOVFMKKyAgICBjb25zdCBpbnQgbXlfbGVuID0gMjsJLyogcGFyYW1ldGVyaXplIHRoZSB0aHJlc2hvbGQgZm9yIGhhcmRzY3JvbGwgKi8KKyAgICBOQ1VSU0VTX1NJWkVfVCBkaXNwbGFjZWQ7CisgICAgYm9vbCB3aWRlOworI2VuZGlmCisKKyAgICBUKChUX0NBTExFRCgicG5vdXRyZWZyZXNoKCVwLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkKSIpLAorICAgICAgIHdpbiwgcG1pbnJvdywgcG1pbmNvbCwgc21pbnJvdywgc21pbmNvbCwgc21heHJvdywgc21heGNvbCkpOworCisgICAgaWYgKHdpbiA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGlmICghKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICAvKiBuZWdhdGl2ZSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHplcm8gKi8KKyAgICBpZiAocG1pbnJvdyA8IDApCisJcG1pbnJvdyA9IDA7CisgICAgaWYgKHBtaW5jb2wgPCAwKQorCXBtaW5jb2wgPSAwOworICAgIGlmIChzbWlucm93IDwgMCkKKwlzbWlucm93ID0gMDsKKyAgICBpZiAoc21pbmNvbCA8IDApCisJc21pbmNvbCA9IDA7CisKKyAgICBwbWF4cm93ID0gcG1pbnJvdyArIHNtYXhyb3cgLSBzbWlucm93OworICAgIHBtYXhjb2wgPSBwbWluY29sICsgc21heGNvbCAtIHNtaW5jb2w7CisKKyAgICBUKCgiIHBtaW5yb3cgKyBzbWF4cm93IC0gc21pbnJvdyAlbGQsIHdpbi0+X21heHkgJWxkIiwKKyAgICAgICAobG9uZykgcG1heHJvdywgKGxvbmcpIHdpbi0+X21heHkpKTsKKyAgICBUKCgiIHBtaW5jb2wgKyBzbWF4Y29sIC0gc21pbmNvbCAlbGQsIHdpbi0+X21heHggJWxkIiwKKyAgICAgICAobG9uZykgcG1heGNvbCwgKGxvbmcpIHdpbi0+X21heHgpKTsKKworICAgIC8qCisgICAgICogVHJpbSB0aGUgY2FsbGVyJ3Mgc2NyZWVuIHNpemUgYmFjayB0byB0aGUgYWN0dWFsIGxpbWl0cy4KKyAgICAgKi8KKyAgICBpZiAocG1heHJvdyA+IHdpbi0+X21heHkpIHsKKwlzbWF4cm93IC09IChwbWF4cm93IC0gd2luLT5fbWF4eSk7CisJcG1heHJvdyA9IHBtaW5yb3cgKyBzbWF4cm93IC0gc21pbnJvdzsKKyAgICB9CisgICAgaWYgKHBtYXhjb2wgPiB3aW4tPl9tYXh4KSB7CisJc21heGNvbCAtPSAocG1heGNvbCAtIHdpbi0+X21heHgpOworCXBtYXhjb2wgPSBwbWluY29sICsgc21heGNvbCAtIHNtaW5jb2w7CisgICAgfQorCisgICAgaWYgKHNtYXhyb3cgPj0gc2NyZWVuX2xpbmVzCisJfHwgc21heGNvbCA+PSBzY3JlZW5fY29sdW1ucworCXx8IHNtaW5yb3cgPiBzbWF4cm93CisJfHwgc21pbmNvbCA+IHNtYXhjb2wpCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgVCgoInBhZCBiZWluZyByZWZyZXNoZWQiKSk7CisKKyNpZiBVU0VfU0NST0xMX0hJTlRTCisgICAgaWYgKHdpbi0+X3BhZC5fcGFkX3kgPj0gMCkgeworCWRpc3BsYWNlZCA9IHBtaW5yb3cgLSB3aW4tPl9wYWQuX3BhZF95CisJICAgIC0gKHNtaW5yb3cgLSB3aW4tPl9wYWQuX3BhZF90b3ApOworCVQoKCJwYWQgYmVpbmcgc2hpZnRlZCBieSAlZCBsaW5lKHMpIiwgZGlzcGxhY2VkKSk7CisgICAgfSBlbHNlCisJZGlzcGxhY2VkID0gMDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBGb3IgcHVyZSBlZmZpY2llbmN5LCB3ZSdkIHdhbnQgdG8gdHJhbnNmZXIgc2Nyb2xsaW5nIGluZm9ybWF0aW9uCisgICAgICogZnJvbSB0aGUgcGFkIHRvIG5ld3NjciB3aGVuZXZlciB0aGUgd2luZG93IGlzIHdpZGUgZW5vdWdoIHRoYXQKKyAgICAgKiBpdHMgdXBkYXRlIHdpbGwgZG9taW5hdGUgdGhlIGNvc3Qgb2YgdGhlIHVwZGF0ZSBmb3IgdGhlIGhvcml6b250YWwKKyAgICAgKiBiYW5kIG9mIG5ld3NjciB0aGF0IGl0IG9jY3VwaWVzLiAgVW5mb3J0dW5hdGVseSwgdGhpcyB0aHJlc2hvbGQKKyAgICAgKiB0ZW5kcyB0byBiZSBjb21wbGV4IHRvIGVzdGltYXRlLCBhbmQgaW4gYW55IGNhc2Ugc2Nyb2xsaW5nIHRoZQorICAgICAqIHdob2xlIGJhbmQgYW5kIHJld3JpdGluZyB0aGUgcGFydHMgb3V0c2lkZSB3aW4ncyBpbWFnZSB3b3VsZCBsb29rCisgICAgICogcmVhbGx5IHVnbHkuICBTby4gIFdoYXQgd2UgZG8gaXMgY29uc2lkZXIgdGhlIHBhZCAid2lkZSIgaWYgaXQKKyAgICAgKiBlaXRoZXIgKGEpIG9jY3VwaWVzIHRoZSB3aG9sZSB3aWR0aCBvZiBuZXdzY3IsIG9yIChiKSBvY2N1cGllcworICAgICAqIGFsbCBidXQgYXQgbW9zdCBvbmUgY29sdW1uIG9uIGVpdGhlciB2ZXJ0aWNhbCBlZGdlIG9mIHRoZSBzY3JlZW4KKyAgICAgKiAodGhpcyBjYXRlcnMgdG8gZnVzc3kgcGVvcGxlIHdobyBwdXQgYm94ZXMgYXJvdW5kIGZ1bGwtc2NyZWVuCisgICAgICogd2luZG93cykuICBOb3RlIHRoYXQgY2hhbmdpbmcgdGhpcyBmb3JtdWxhIHdpbGwgbm90IGJyZWFrIGFueSBjb2RlLAorICAgICAqIG1lcmVseSBjaGFuZ2UgdGhlIGNvc3RzIG9mIHZhcmlvdXMgdXBkYXRlIGNhc2VzLgorICAgICAqLworI2lmIFVTRV9TQ1JPTExfSElOVFMKKyAgICB3aWRlID0gKHNtaW5jb2wgPCBteV9sZW4gJiYgc21heGNvbCA+IChuZXdzY3ItPl9tYXh4IC0gbXlfbGVuKSk7CisjZW5kaWYKKworICAgIGZvciAoaSA9IHBtaW5yb3csIG0gPSBzbWlucm93ICsgd2luLT5feW9mZnNldDsKKwkgaSA8PSBwbWF4cm93ICYmIG0gPD0gbmV3c2NyLT5fbWF4eTsKKwkgaSsrLCBtKyspIHsKKwlyZWdpc3RlciBzdHJ1Y3QgbGRhdCAqbmxpbmUgPSAmbmV3c2NyLT5fbGluZVttXTsKKwlyZWdpc3RlciBzdHJ1Y3QgbGRhdCAqb2xpbmUgPSAmd2luLT5fbGluZVtpXTsKKwlmb3IgKGogPSBwbWluY29sLCBuID0gc21pbmNvbDsgaiA8PSBwbWF4Y29sOyBqKyssIG4rKykgeworCSAgICBOQ1VSU0VTX0NIX1QgY2ggPSBvbGluZS0+dGV4dFtqXTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSAgICAvKgorCSAgICAgKiBTcGVjaWFsIGNhc2UgZm9yIGxlZnRtb3N0IGNoYXJhY3RlciBvZiB0aGUgZGlzcGxheWVkIGFyZWEuCisJICAgICAqIE9ubHkgaGFsZiBvZiBhIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXIgbWF5IGJlIHZpc2libGUuCisJICAgICAqLworCSAgICBpZiAoaiA9PSBwbWluY29sCisJCSYmIGogPiAwCisJCSYmIGlzV2lkZWNFeHQoY2gpKSB7CisJCVNldENoYXIoY2gsIEwoJyAnKSwgQXR0ck9mKG9saW5lLT50ZXh0W2ogLSAxXSkpOworCSAgICB9CisjZW5kaWYKKwkgICAgaWYgKCFDaGFyRXEoY2gsIG5saW5lLT50ZXh0W25dKSkgeworCQlubGluZS0+dGV4dFtuXSA9IGNoOworCQlDSEFOR0VEX0NFTEwobmxpbmUsIG4pOworCSAgICB9CisJfQorCisjaWYgVVNFX1NDUk9MTF9ISU5UUworCWlmICh3aWRlKSB7CisJICAgIGludCBuaW5kID0gbSArIGRpc3BsYWNlZDsKKwkgICAgaWYgKG9saW5lLT5vbGRpbmRleCA8IDAKKwkJfHwgbmluZCA8IHNtaW5yb3cKKwkJfHwgbmluZCA+IHNtYXhyb3cpIHsKKwkJbmluZCA9IF9ORVdJTkRFWDsKKwkgICAgfSBlbHNlIGlmIChkaXNwbGFjZWQpIHsKKwkJcmVnaXN0ZXIgc3RydWN0IGxkYXQgKnBsaW5lID0gJmN1cnNjci0+X2xpbmVbbmluZF07CisJCWZvciAoaiA9IDA7IGogPD0gbXlfbGVuOyBqKyspIHsKKwkJICAgIGludCBrID0gbmV3c2NyLT5fbWF4eCAtIGo7CisJCSAgICBpZiAocGxpbmUtPnRleHRbal0gIT0gbmxpbmUtPnRleHRbal0KKwkJCXx8IHBsaW5lLT50ZXh0W2tdICE9IG5saW5lLT50ZXh0W2tdKSB7CisJCQluaW5kID0gX05FV0lOREVYOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICAgIG5saW5lLT5vbGRpbmRleCA9IG5pbmQ7CisJfQorI2VuZGlmIC8qIFVTRV9TQ1JPTExfSElOVFMgKi8KKwlvbGluZS0+Zmlyc3RjaGFyID0gb2xpbmUtPmxhc3RjaGFyID0gX05PQ0hBTkdFOworCWlmX1VTRV9TQ1JPTExfSElOVFMob2xpbmUtPm9sZGluZGV4ID0gaSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDbGVhbiB1cCBkZWJyaXMgZnJvbSBzY3JvbGxpbmcgb3IgcmVzaXppbmcgdGhlIHBhZCwgc28gd2UgZG8gbm90CisgICAgICogYWNjaWRlbnRhbGx5IHBpY2sgdXAgdGhlIGluZGV4IHZhbHVlIGR1cmluZyB0aGUgbmV4dCBjYWxsIHRvIHRoaXMKKyAgICAgKiBwcm9jZWR1cmUuICBUaGUgb25seSByb3dzIHRoYXQgc2hvdWxkIGhhdmUgYW4gaW5kZXggdmFsdWUgYXJlIHRob3NlCisgICAgICogdGhhdCBhcmUgZGlzcGxheWVkIGR1cmluZyB0aGlzIGN5Y2xlLgorICAgICAqLworI2lmIFVTRV9TQ1JPTExfSElOVFMKKyAgICBmb3IgKGkgPSBwbWlucm93IC0gMTsgKGkgPj0gMCkgJiYgKHdpbi0+X2xpbmVbaV0ub2xkaW5kZXggPj0gMCk7IGktLSkKKwl3aW4tPl9saW5lW2ldLm9sZGluZGV4ID0gX05FV0lOREVYOworICAgIGZvciAoaSA9IHBtYXhyb3cgKyAxOyAoaSA8PSB3aW4tPl9tYXh5KQorCSAmJiAod2luLT5fbGluZVtpXS5vbGRpbmRleCA+PSAwKTsgaSsrKQorCXdpbi0+X2xpbmVbaV0ub2xkaW5kZXggPSBfTkVXSU5ERVg7CisjZW5kaWYKKworICAgIHdpbi0+X2JlZ3ggPSBzbWluY29sOworICAgIHdpbi0+X2JlZ3kgPSBzbWlucm93OworCisgICAgaWYgKHdpbi0+X2NsZWFyKSB7CisJd2luLT5fY2xlYXIgPSBGQUxTRTsKKwluZXdzY3ItPl9jbGVhciA9IFRSVUU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBVc2UgdGhlIHBhZCdzIGN1cnJlbnQgcG9zaXRpb24sIGlmIGl0IHdpbGwgYmUgdmlzaWJsZS4KKyAgICAgKiBJZiBub3QsIGRvbid0IGRvIGFueXRoaW5nOyBpdCdzIG5vdCBhbiBlcnJvci4KKyAgICAgKi8KKyAgICBpZiAod2luLT5fbGVhdmVvayA9PSBGQUxTRQorCSYmIHdpbi0+X2N1cnkgPj0gcG1pbnJvdworCSYmIHdpbi0+X2N1cnggPj0gcG1pbmNvbAorCSYmIHdpbi0+X2N1cnkgPD0gcG1heHJvdworCSYmIHdpbi0+X2N1cnggPD0gcG1heGNvbCkgeworCW5ld3Njci0+X2N1cnkgPSB3aW4tPl9jdXJ5IC0gcG1pbnJvdyArIHdpbi0+X2JlZ3kgKyB3aW4tPl95b2Zmc2V0OworCW5ld3Njci0+X2N1cnggPSB3aW4tPl9jdXJ4IC0gcG1pbmNvbCArIHdpbi0+X2JlZ3g7CisgICAgfQorICAgIG5ld3Njci0+X2xlYXZlb2sgPSB3aW4tPl9sZWF2ZW9rOworICAgIHdpbi0+X2ZsYWdzICY9IH5fSEFTTU9WRUQ7CisKKyAgICAvKgorICAgICAqIFVwZGF0ZSBvdXIgY2FjaGUgb2YgdGhlIGxpbmUtbnVtYmVycyB0aGF0IHdlIGRpc3BsYXllZCBmcm9tIHRoZSBwYWQuCisgICAgICogV2Ugd2lsbCB1c2UgdGhpcyBvbiBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gdG8gZGVyaXZlCisgICAgICogdmFsdWVzIHRvIHN0dWZmIGludG8gJ29sZGluZGV4W10nIC0tIGZvciBzY3JvbGxpbmcgb3B0aW1pemF0aW9uLgorICAgICAqLworICAgIHdpbi0+X3BhZC5fcGFkX3kgPSBwbWlucm93OworICAgIHdpbi0+X3BhZC5fcGFkX3ggPSBwbWluY29sOworICAgIHdpbi0+X3BhZC5fcGFkX3RvcCA9IHNtaW5yb3c7CisgICAgd2luLT5fcGFkLl9wYWRfbGVmdCA9IHNtaW5jb2w7CisgICAgd2luLT5fcGFkLl9wYWRfYm90dG9tID0gc21heHJvdzsKKyAgICB3aW4tPl9wYWQuX3BhZF9yaWdodCA9IHNtYXhjb2w7CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcGVjaG9jaGFyKFdJTkRPVyAqcGFkLCBjb25zdCBjaHR5cGUgY2gpCit7CisgICAgVCgoVF9DQUxMRUQoInBlY2hvY2hhciglcCwgJXMpIiksIHBhZCwgX3RyYWNlY2h0eXBlKGNoKSkpOworCisgICAgaWYgKHBhZCA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGlmICghKHBhZC0+X2ZsYWdzICYgX0lTUEFEKSkKKwlyZXR1cm5Db2RlKHdlY2hvY2hhcihwYWQsIGNoKSk7CisKKyAgICB3YWRkY2gocGFkLCBjaCk7CisgICAgcHJlZnJlc2gocGFkLCBwYWQtPl9wYWQuX3BhZF95LAorCSAgICAgcGFkLT5fcGFkLl9wYWRfeCwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX3RvcCwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX2xlZnQsCisJICAgICBwYWQtPl9wYWQuX3BhZF9ib3R0b20sCisJICAgICBwYWQtPl9wYWQuX3BhZF9yaWdodCk7CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfcHJpbnR3LmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3ByaW50dy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYWU5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3ByaW50dy5jCkBAIC0wLDAgKzEsMTM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3ByaW50dy5jCisqKgorKioJVGhlIHJvdXRpbmVzIHByaW50dygpLCB3cHJpbnR3KCkgYW5kIGZyaWVuZHMuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfcHJpbnR3LmMsdiAxLjE4IDIwMDYvMTIvMTcgMTk6MjE6MzkgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorcHJpbnR3KGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworICAgIGludCBjb2RlOworCisjaWZkZWYgVFJBQ0UKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIFQoKFRfQ0FMTEVEKCJwcmludHcoJXMlcykiKSwKKyAgICAgICBfbmNfdmlzYnVmKGZtdCksIF9uY192YXJhcmdzKGZtdCwgYXJncCkpKTsKKyAgICB2YV9lbmQoYXJncCk7CisjZW5kaWYKKworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgY29kZSA9IHZ3cHJpbnR3KHN0ZHNjciwgZm10LCBhcmdwKTsKKyAgICB2YV9lbmQoYXJncCk7CisKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3cHJpbnR3KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKyAgICBpbnQgY29kZTsKKworI2lmZGVmIFRSQUNFCisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICBUKChUX0NBTExFRCgid3ByaW50dyglcCwlcyVzKSIpLAorICAgICAgIHdpbiwgX25jX3Zpc2J1ZihmbXQpLCBfbmNfdmFyYXJncyhmbXQsIGFyZ3ApKSk7CisgICAgdmFfZW5kKGFyZ3ApOworI2VuZGlmCisKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIGNvZGUgPSB2d3ByaW50dyh3aW4sIGZtdCwgYXJncCk7CisgICAgdmFfZW5kKGFyZ3ApOworCisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbXZwcmludHcoaW50IHksIGludCB4LCBjb25zdCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKyAgICBpbnQgY29kZTsKKworI2lmZGVmIFRSQUNFCisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICBUKChUX0NBTExFRCgibXZwcmludHcoJWQsJWQsJXMlcykiKSwKKyAgICAgICB5LCB4LCBfbmNfdmlzYnVmKGZtdCksIF9uY192YXJhcmdzKGZtdCwgYXJncCkpKTsKKyAgICB2YV9lbmQoYXJncCk7CisjZW5kaWYKKworICAgIGlmICgoY29kZSA9IG1vdmUoeSwgeCkpICE9IEVSUikgeworCXZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisJY29kZSA9IHZ3cHJpbnR3KHN0ZHNjciwgZm10LCBhcmdwKTsKKwl2YV9lbmQoYXJncCk7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK212d3ByaW50dyhXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKyAgICBpbnQgY29kZTsKKworI2lmZGVmIFRSQUNFCisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICBUKChUX0NBTExFRCgibXZ3cHJpbnR3KCVkLCVkLCVwLCVzJXMpIiksCisgICAgICAgeSwgeCwgd2luLCBfbmNfdmlzYnVmKGZtdCksIF9uY192YXJhcmdzKGZtdCwgYXJncCkpKTsKKyAgICB2YV9lbmQoYXJncCk7CisjZW5kaWYKKworICAgIGlmICgoY29kZSA9IHdtb3ZlKHdpbiwgeSwgeCkpICE9IEVSUikgeworCXZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisJY29kZSA9IHZ3cHJpbnR3KHdpbiwgZm10LCBhcmdwKTsKKwl2YV9lbmQoYXJncCk7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Z3cHJpbnR3KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncCkKK3sKKyAgICBjaGFyICpidWY7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgidndwcmludHcoJXAsJXMsdmFfbGlzdCkiKSwgd2luLCBfbmNfdmlzYnVmKGZtdCkpKTsKKworICAgIGlmICgoYnVmID0gX25jX3ByaW50Zl9zdHJpbmcoZm10LCBhcmdwKSkgIT0gMCkgeworCWNvZGUgPSB3YWRkc3RyKHdpbiwgYnVmKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfcmVkcmF3bG4uYyBiL25jdXJzZXMvYmFzZS9saWJfcmVkcmF3bG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA5MDVmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9yZWRyYXdsbi5jCkBAIC0wLDAgKzEsODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfcmVkcmF3bG4uYworICoKKyAqCVRoZSByb3V0aW5lIHdyZWRyYXdsbigpLgorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9yZWRyYXdsbi5jLHYgMS4xMiAyMDA3LzEwLzEzIDIwOjA4OjU2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dyZWRyYXdsbihXSU5ET1cgKndpbiwgaW50IGJlZywgaW50IG51bSkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgZW5kOworICAgIHNpemVfdCBsZW47CisKKyAgICBUKChUX0NBTExFRCgid3JlZHJhd2xuKCVwLCVkLCVkKSIpLCB3aW4sIGJlZywgbnVtKSk7CisKKyAgICBpZiAod2luID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKGJlZyA8IDApCisJYmVnID0gMDsKKworICAgIGlmICh0b3VjaGxpbmUod2luLCBiZWcsIG51bSkgPT0gRVJSKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGlmICh0b3VjaGxpbmUoY3Vyc2NyLCBiZWcgKyB3aW4tPl9iZWd5LCBudW0pID09IEVSUikKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBlbmQgPSBiZWcgKyBudW07CisgICAgaWYgKGVuZCA+IGN1cnNjci0+X21heHkgKyAxKQorCWVuZCA9IGN1cnNjci0+X21heHkgKyAxOworICAgIGlmIChlbmQgPiB3aW4tPl9tYXh5ICsgMSkKKwllbmQgPSB3aW4tPl9tYXh5ICsgMTsKKworICAgIGxlbiA9ICh3aW4tPl9tYXh4ICsgMSk7CisgICAgaWYgKGxlbiA+IChzaXplX3QpIChjdXJzY3ItPl9tYXh4ICsgMSkpCisJbGVuID0gKHNpemVfdCkgKGN1cnNjci0+X21heHggKyAxKTsKKyAgICBsZW4gKj0gc2l6ZW9mKGN1cnNjci0+X2xpbmVbMF0udGV4dFswXSk7CisKKyAgICBmb3IgKGkgPSBiZWc7IGkgPCBlbmQ7IGkrKykgeworCWludCBjcm93ID0gaSArIHdpbi0+X2JlZ3k7CisKKwltZW1zZXQoY3Vyc2NyLT5fbGluZVtjcm93XS50ZXh0ICsgd2luLT5fYmVneCwgMCwgbGVuKTsKKwlfbmNfbWFrZV9vbGRoYXNoKGNyb3cpOworICAgIH0KKworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9yZWZyZXNoLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3JlZnJlc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTljYWZiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9yZWZyZXNoLmMKQEAgLTAsMCArMSwyODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9yZWZyZXNoLmMKKyAqCisgKglUaGUgcm91dGluZXMgd3JlZnJlc2goKSBhbmQgd25vdXRyZWZyZXNoKCkuCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3JlZnJlc2guYyx2IDEuNDEgMjAwNy8wOS8yOSAyMDozOTozNCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3cmVmcmVzaChXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgY29kZTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3cmVmcmVzaCglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luID09IDApIHsKKwljb2RlID0gRVJSOworICAgIH0gZWxzZSBpZiAod2luID09IGN1cnNjcikgeworCWN1cnNjci0+X2NsZWFyID0gVFJVRTsKKwljb2RlID0gZG91cGRhdGUoKTsKKyAgICB9IGVsc2UgaWYgKChjb2RlID0gd25vdXRyZWZyZXNoKHdpbikpID09IE9LKSB7CisJaWYgKHdpbi0+X2NsZWFyKQorCSAgICBuZXdzY3ItPl9jbGVhciA9IFRSVUU7CisJY29kZSA9IGRvdXBkYXRlKCk7CisJLyoKKwkgKiBSZXNldCB0aGUgY2xlYXJvaygpIGZsYWcgaW4gY2FzZSBpdCB3YXMgc2V0IGZvciB0aGUgc3BlY2lhbAorCSAqIGNhc2UgaW4gaGFyZHNjcm9sbC5jIChpZiB3ZSBkb24ndCByZXNldCBpdCBoZXJlLCB3ZSdsbCBnZXQgMgorCSAqIHJlZnJlc2hlcyBiZWNhdXNlIHRoZSBmbGFnIGlzIGNvcGllZCBmcm9tIHN0ZHNjciB0byBuZXdzY3IpLgorCSAqIFJlc2V0dGluZyB0aGUgZmxhZyBzaG91bGRuJ3QgZG8gYW55IGhhcm0sIGFueXdheS4KKwkgKi8KKwl3aW4tPl9jbGVhciA9IEZBTFNFOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3bm91dHJlZnJlc2goV0lORE9XICp3aW4pCit7CisgICAgTkNVUlNFU19TSVpFX1QgbGltaXRfeDsKKyAgICBOQ1VSU0VTX1NJWkVfVCBzcmNfcm93LCBzcmNfY29sOworICAgIE5DVVJTRVNfU0laRV9UIGJlZ3g7CisgICAgTkNVUlNFU19TSVpFX1QgYmVneTsKKyAgICBOQ1VSU0VTX1NJWkVfVCBkc3Rfcm93LCBkc3RfY29sOworI2lmIFVTRV9TQ1JPTExfSElOVFMKKyAgICBib29sIHdpZGU7CisjZW5kaWYKKworICAgIFQoKFRfQ0FMTEVEKCJ3bm91dHJlZnJlc2goJXApIiksIHdpbikpOworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFKSkgeworCV90cmFjZWR1bXAoIi4uLndpbiIsIHdpbik7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJyZWFrIGJhZGx5IGlmIHdlIHRyeSB0byByZWZyZXNoIGEgcGFkLgorICAgICAqLworICAgIGlmICgod2luID09IDApCisJfHwgKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICAvKiBwdXQgdGhlbSBoZXJlIHNvICJ3aW4gPT0gMCIgd29uJ3QgYnJlYWsgb3VyIGNvZGUgKi8KKyAgICBiZWd4ID0gd2luLT5fYmVneDsKKyAgICBiZWd5ID0gd2luLT5fYmVneTsKKworICAgIG5ld3Njci0+X25jX2JrZ2QgPSB3aW4tPl9uY19ia2dkOworICAgIFdJTkRPV19BVFRSUyhuZXdzY3IpID0gV0lORE9XX0FUVFJTKHdpbik7CisKKyAgICAvKiBtZXJnZSBpbiBjaGFuZ2UgaW5mb3JtYXRpb24gZnJvbSBhbGwgc3Vid2luZG93cyBvZiB0aGlzIHdpbmRvdyAqLworICAgIHdzeW5jZG93bih3aW4pOworCisjaWYgVVNFX1NDUk9MTF9ISU5UUworICAgIC8qCisgICAgICogRm9yIHB1cmUgZWZmaWNpZW5jeSwgd2UnZCB3YW50IHRvIHRyYW5zZmVyIHNjcm9sbGluZyBpbmZvcm1hdGlvbgorICAgICAqIGZyb20gdGhlIHdpbmRvdyB0byBuZXdzY3Igd2hlbmV2ZXIgdGhlIHdpbmRvdyBpcyB3aWRlIGVub3VnaCB0aGF0CisgICAgICogaXRzIHVwZGF0ZSB3aWxsIGRvbWluYXRlIHRoZSBjb3N0IG9mIHRoZSB1cGRhdGUgZm9yIHRoZSBob3Jpem9udGFsCisgICAgICogYmFuZCBvZiBuZXdzY3IgdGhhdCBpdCBvY2N1cGllcy4gIFVuZm9ydHVuYXRlbHksIHRoaXMgdGhyZXNob2xkCisgICAgICogdGVuZHMgdG8gYmUgY29tcGxleCB0byBlc3RpbWF0ZSwgYW5kIGluIGFueSBjYXNlIHNjcm9sbGluZyB0aGUKKyAgICAgKiB3aG9sZSBiYW5kIGFuZCByZXdyaXRpbmcgdGhlIHBhcnRzIG91dHNpZGUgd2luJ3MgaW1hZ2Ugd291bGQgbG9vaworICAgICAqIHJlYWxseSB1Z2x5LiAgU28uICBXaGF0IHdlIGRvIGlzIGNvbnNpZGVyIHRoZSB3aW5kb3cgIndpZGUiIGlmIGl0CisgICAgICogZWl0aGVyIChhKSBvY2N1cGllcyB0aGUgd2hvbGUgd2lkdGggb2YgbmV3c2NyLCBvciAoYikgb2NjdXBpZXMKKyAgICAgKiBhbGwgYnV0IGF0IG1vc3Qgb25lIGNvbHVtbiBvbiBlaXRoZXIgdmVydGljYWwgZWRnZSBvZiB0aGUgc2NyZWVuCisgICAgICogKHRoaXMgY2F0ZXJzIHRvIGZ1c3N5IHBlb3BsZSB3aG8gcHV0IGJveGVzIGFyb3VuZCBmdWxsLXNjcmVlbgorICAgICAqIHdpbmRvd3MpLiAgTm90ZSB0aGF0IGNoYW5naW5nIHRoaXMgZm9ybXVsYSB3aWxsIG5vdCBicmVhayBhbnkgY29kZSwKKyAgICAgKiBtZXJlbHkgY2hhbmdlIHRoZSBjb3N0cyBvZiB2YXJpb3VzIHVwZGF0ZSBjYXNlcy4KKyAgICAgKi8KKyAgICB3aWRlID0gKGJlZ3ggPD0gMSAmJiB3aW4tPl9tYXh4ID49IChuZXdzY3ItPl9tYXh4IC0gMSkpOworI2VuZGlmCisKKyAgICB3aW4tPl9mbGFncyAmPSB+X0hBU01PVkVEOworCisgICAgLyoKKyAgICAgKiBNaWNyb3R3ZWFraW5nIGFsZXJ0ISAgVGhpcyBkb3VibGUgbG9vcCBpcyBvbmUgb2YgdGhlIGdlbnVpbmUKKyAgICAgKiBob3Qgc3BvdHMgaW4gdGhlIGNvZGUuICBFdmVuIGdjYyBkb2Vzbid0IHNlZW0gdG8gZG8gZW5vdWdoCisgICAgICogY29tbW9uLXN1YmV4cHJlc3Npb24gY2h1bmtpbmcgdG8gbWFrZSBpdCByZWFsbHkgdGVuc2UsCisgICAgICogc28gd2UnbGwgZm9yY2UgdGhlIGlzc3VlLgorICAgICAqLworCisgICAgLyogbGltaXQoZHN0X2NvbCkgKi8KKyAgICBsaW1pdF94ID0gd2luLT5fbWF4eDsKKyAgICAvKiBsaW1pdChzcmNfY29sKSAqLworICAgIGlmIChsaW1pdF94ID4gbmV3c2NyLT5fbWF4eCAtIGJlZ3gpCisJbGltaXRfeCA9IG5ld3Njci0+X21heHggLSBiZWd4OworCisgICAgZm9yIChzcmNfcm93ID0gMCwgZHN0X3JvdyA9IGJlZ3kgKyB3aW4tPl95b2Zmc2V0OworCSBzcmNfcm93IDw9IHdpbi0+X21heHkgJiYgZHN0X3JvdyA8PSBuZXdzY3ItPl9tYXh5OworCSBzcmNfcm93KyssIGRzdF9yb3crKykgeworCXJlZ2lzdGVyIHN0cnVjdCBsZGF0ICpubGluZSA9ICZuZXdzY3ItPl9saW5lW2RzdF9yb3ddOworCXJlZ2lzdGVyIHN0cnVjdCBsZGF0ICpvbGluZSA9ICZ3aW4tPl9saW5lW3NyY19yb3ddOworCisJaWYgKG9saW5lLT5maXJzdGNoYXIgIT0gX05PQ0hBTkdFKSB7CisJICAgIGludCBsYXN0X3NyYyA9IG9saW5lLT5sYXN0Y2hhcjsKKworCSAgICBpZiAobGFzdF9zcmMgPiBsaW1pdF94KQorCQlsYXN0X3NyYyA9IGxpbWl0X3g7CisKKwkgICAgc3JjX2NvbCA9IG9saW5lLT5maXJzdGNoYXI7CisJICAgIGRzdF9jb2wgPSBzcmNfY29sICsgYmVneDsKKworCSAgICBpZl9XSURFQyh7CisJCXJlZ2lzdGVyIGludCBqOworCisJCS8qCisJCSAqIEVuc3VyZSB0aGF0IHdlIHdpbGwgY29weSBjb21wbGV0ZSBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycworCQkgKiBvbiB0aGUgbGVmdC1ib3VuZGFyeS4KKwkJICovCisJCWlmIChpc1dpZGVjRXh0KG9saW5lLT50ZXh0W3NyY19jb2xdKSkgeworCQkgICAgaiA9IDEgKyBkc3RfY29sIC0gV2lkZWNFeHQob2xpbmUtPnRleHRbc3JjX2NvbF0pOworCQkgICAgaWYgKGogPCAwKQorCQkJaiA9IDA7CisJCSAgICBpZiAoZHN0X2NvbCA+IGopIHsKKwkJCXNyY19jb2wgLT0gKGRzdF9jb2wgLSBqKTsKKwkJCWRzdF9jb2wgPSBqOworCQkgICAgfQorCQl9CisKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgd2Ugd2lsbCBjb3B5IGNvbXBsZXRlIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzCisJCSAqIG9uIHRoZSByaWdodC1ib3VuZGFyeS4KKwkJICovCisJCWogPSBsYXN0X3NyYzsKKwkJaWYgKFdpZGVjRXh0KG9saW5lLT50ZXh0W2pdKSkgeworCQkgICAgKytqOworCQkgICAgd2hpbGUgKGogPD0gbGltaXRfeCkgeworCQkJaWYgKGlzV2lkZWNCYXNlKG9saW5lLT50ZXh0W2pdKSkgeworCQkJICAgIGJyZWFrOworCQkJfSBlbHNlIHsKKwkJCSAgICBsYXN0X3NyYyA9IGo7CisJCQl9CisJCQkrK2o7CisJCSAgICB9CisJCX0KKwkgICAgfSk7CisKKwkgICAgaWZfV0lERUMoeworCQlzdGF0aWMgY2NoYXJfdCBibGFuayA9IEJMQU5LOworCQlpbnQgbGFzdF9kc3QgPSBiZWd4ICsgKChsYXN0X3NyYyA8IHdpbi0+X21heHgpCisJCQkJICAgICAgID8gbGFzdF9zcmMKKwkJCQkgICAgICAgOiB3aW4tPl9tYXh4KTsKKwkJaW50IGZpeF9sZWZ0ID0gZHN0X2NvbDsKKwkJaW50IGZpeF9yaWdodCA9IGxhc3RfZHN0OworCQlyZWdpc3RlciBpbnQgajsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgYm91bmRhcnkgY2FzZXMgd2hlcmUgd2UgbWF5IG92ZXJ3cml0ZSBwYXJ0IG9mIGEKKwkJICogbXVsdGktY29sdW1uIGNoYXJhY3Rlci4gIEZvciB0aG9zZSwgd2lwZSB0aGUgcmVtYWluZGVyIG9mCisJCSAqIHRoZSBjaGFyYWN0ZXIgdG8gYmxhbmtzLgorCQkgKi8KKwkJaiA9IGRzdF9jb2w7CisJCWlmIChpc1dpZGVjRXh0KG5saW5lLT50ZXh0W2pdKSkgeworCQkgICAgLyoKKwkJICAgICAqIE9uIHRoZSBsZWZ0LCB3ZSBvbmx5IGNhcmUgYWJvdXQgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMKKwkJICAgICAqIHRoYXQgZXh0ZW5kIGludG8gdGhlIGNoYW5nZWQgcmVnaW9uLgorCQkgICAgICovCisJCSAgICBmaXhfbGVmdCA9IDEgKyBqIC0gV2lkZWNFeHQobmxpbmUtPnRleHRbal0pOworCQkgICAgaWYgKGZpeF9sZWZ0IDwgMCkKKwkJCWZpeF9sZWZ0ID0gMDsJLyogb25seSBpZiBjZWxsIGlzIGNvcnJ1cHQgKi8KKwkJfQorCisJCWogPSBsYXN0X2RzdDsKKwkJaWYgKFdpZGVjRXh0KG5saW5lLT50ZXh0W2pdKSAhPSAwKSB7CisJCSAgICAvKgorCQkgICAgICogT24gdGhlIHJpZ2h0LCBhbnkgbXVsdGktY29sdW1uIGNoYXJhY3RlciBpcyBhIHByb2JsZW0sCisJCSAgICAgKiB1bmxlc3MgaXQgaGFwcGVucyB0byBiZSBjb250YWluZWQgaW4gdGhlIGNoYW5nZSwgYW5kCisJCSAgICAgKiBlbmRpbmcgYXQgdGhlIHJpZ2h0IGJvdW5kYXJ5IG9mIHRoZSBjaGFuZ2UuICBUaGUKKwkJICAgICAqIGNvbXB1dGF0aW9uIGZvciAnZml4X2xlZnQnIGFjY291bnRzIGZvciB0aGUgbGVmdC1zaWRlIG9mCisJCSAgICAgKiB0aGlzIGNoYXJhY3Rlci4gIEZpbmQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyLgorCQkgICAgICovCisJCSAgICArK2o7CisJCSAgICB3aGlsZSAoaiA8PSBuZXdzY3ItPl9tYXh4ICYmIGlzV2lkZWNFeHQobmxpbmUtPnRleHRbal0pKSB7CisJCQlmaXhfcmlnaHQgPSBqKys7CisJCSAgICB9CisJCX0KKworCQkvKgorCQkgKiBUaGUgYW5hbHlzaXMgaXMgc2ltcGxlciBpZiB3ZSBkbyB0aGUgY2xlYXJpbmcgYWZ0ZXJ3YXJkcy4KKwkJICogRG8gdGhhdCBub3cuCisJCSAqLworCQlpZiAoZml4X2xlZnQgPCBkc3RfY29sIHx8IGZpeF9yaWdodCA+IGxhc3RfZHN0KSB7CisJCSAgICBmb3IgKGogPSBmaXhfbGVmdDsgaiA8PSBmaXhfcmlnaHQ7ICsraikgeworCQkJbmxpbmUtPnRleHRbal0gPSBibGFuazsKKwkJCUNIQU5HRURfQ0VMTChubGluZSwgaik7CisJCSAgICB9CisJCX0KKwkgICAgfSk7CisKKwkgICAgLyoKKwkgICAgICogQ29weSB0aGUgY2hhbmdlZCB0ZXh0LgorCSAgICAgKi8KKwkgICAgZm9yICg7IHNyY19jb2wgPD0gbGFzdF9zcmM7IHNyY19jb2wrKywgZHN0X2NvbCsrKSB7CisJCWlmICghQ2hhckVxKG9saW5lLT50ZXh0W3NyY19jb2xdLCBubGluZS0+dGV4dFtkc3RfY29sXSkpIHsKKwkJICAgIG5saW5lLT50ZXh0W2RzdF9jb2xdID0gb2xpbmUtPnRleHRbc3JjX2NvbF07CisJCSAgICBDSEFOR0VEX0NFTEwobmxpbmUsIGRzdF9jb2wpOworCQl9CisJICAgIH0KKworCX0KKyNpZiBVU0VfU0NST0xMX0hJTlRTCisJaWYgKHdpZGUpIHsKKwkgICAgaW50IG9pbmQgPSBvbGluZS0+b2xkaW5kZXg7CisKKwkgICAgbmxpbmUtPm9sZGluZGV4ID0gKChvaW5kID09IF9ORVdJTkRFWCkKKwkJCSAgICAgICA/IF9ORVdJTkRFWAorCQkJICAgICAgIDogKGJlZ3kgKyBvaW5kICsgd2luLT5feW9mZnNldCkpOworCX0KKyNlbmRpZiAvKiBVU0VfU0NST0xMX0hJTlRTICovCisKKwlvbGluZS0+Zmlyc3RjaGFyID0gb2xpbmUtPmxhc3RjaGFyID0gX05PQ0hBTkdFOworCWlmX1VTRV9TQ1JPTExfSElOVFMob2xpbmUtPm9sZGluZGV4ID0gc3JjX3Jvdyk7CisgICAgfQorCisgICAgaWYgKHdpbi0+X2NsZWFyKSB7CisJd2luLT5fY2xlYXIgPSBGQUxTRTsKKwluZXdzY3ItPl9jbGVhciA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKCF3aW4tPl9sZWF2ZW9rKSB7CisJbmV3c2NyLT5fY3VyeSA9IHdpbi0+X2N1cnkgKyB3aW4tPl9iZWd5ICsgd2luLT5feW9mZnNldDsKKwluZXdzY3ItPl9jdXJ4ID0gd2luLT5fY3VyeCArIHdpbi0+X2JlZ3g7CisgICAgfQorICAgIG5ld3Njci0+X2xlYXZlb2sgPSB3aW4tPl9sZWF2ZW9rOworCisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoVVNFX1RSQUNFRihUUkFDRV9VUERBVEUpKSB7CisJX3RyYWNlZHVtcCgibmV3c2NyIiwgbmV3c2NyKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9yZXN0YXJ0LmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Jlc3RhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTc3MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9yZXN0YXJ0LmMKQEAgLTAsMCArMSw5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGVybWluZm8tb25seSB0ZXJtaW5hbCBzZXR1cCByb3V0aW5lczoKKyAqCisgKgkJaW50IHJlc3RhcnR0ZXJtKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKikKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2lmIFNWUjRfVEVSTUlPICYmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorCisjaW5jbHVkZSA8dGVybS5oPgkJLyogbGluZXMsIGNvbHVtbnMsIGN1cl90ZXJtICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfcmVzdGFydC5jLHYgMS4xMCAyMDA4LzA2LzIxIDE3OjMxOjIyIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Jlc3RhcnR0ZXJtKE5DVVJTRVNfQ09OU1QgY2hhciAqdGVybXAsIGludCBmaWxlbnVtLCBpbnQgKmVycnJldCkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgVCgoVF9DQUxMRUQoInJlc3RhcnR0ZXJtKCVzLCVkLCVwKSIpLCB0ZXJtcCwgZmlsZW51bSwgZXJycmV0KSk7CisKKyAgICBpZiAoc2V0dXB0ZXJtKHRlcm1wLCBmaWxlbnVtLCBlcnJyZXQpICE9IE9LKSB7CisJcmVzdWx0ID0gRVJSOworICAgIH0gZWxzZSBpZiAoU1AgIT0gMCkgeworCWludCBzYXZlZWNobyA9IFNQLT5fZWNobzsKKwlpbnQgc2F2ZWNicmVhayA9IFNQLT5fY2JyZWFrOworCWludCBzYXZlcmF3ID0gU1AtPl9yYXc7CisJaW50IHNhdmVubCA9IFNQLT5fbmw7CisKKwlpZiAoc2F2ZWVjaG8pCisJICAgIGVjaG8oKTsKKwllbHNlCisJICAgIG5vZWNobygpOworCisJaWYgKHNhdmVjYnJlYWspIHsKKwkgICAgY2JyZWFrKCk7CisJICAgIG5vcmF3KCk7CisJfSBlbHNlIGlmIChzYXZlcmF3KSB7CisJICAgIG5vY2JyZWFrKCk7CisJICAgIHJhdygpOworCX0gZWxzZSB7CisJICAgIG5vY2JyZWFrKCk7CisJICAgIG5vcmF3KCk7CisJfQorCWlmIChzYXZlbmwpCisJICAgIG5sKCk7CisJZWxzZQorCSAgICBub25sKCk7CisKKwlyZXNldF9wcm9nX21vZGUoKTsKKworI2lmIFVTRV9TSVpFQ0hBTkdFCisJX25jX3VwZGF0ZV9zY3JlZW5zaXplKFNQKTsKKyNlbmRpZgorCisJcmVzdWx0ID0gT0s7CisgICAgfSBlbHNlIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2NhbncuYyBiL25jdXJzZXMvYmFzZS9saWJfc2NhbncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE1YTIyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9zY2Fudy5jCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAsMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9zY2Fudy5jCisqKgorKioJVGhlIHJvdXRpbmVzIHNjYW53KCksIHdzY2FudygpIGFuZCBmcmllbmRzLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3NjYW53LmMsdiAxLjExIDIwMDEvMDYvMzAgMjM6Mzk6NDEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQordndzY2FudyhXSU5ET1cgKndpbiwgTkNVUlNFU19DT05TVCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncCkKK3sKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworCisgICAgaWYgKHdnZXRuc3RyKHdpbiwgYnVmLCBzaXplb2YoYnVmKSAtIDEpID09IEVSUikKKwlyZXR1cm4gKEVSUik7CisKKyAgICByZXR1cm4gKHZzc2NhbmYoYnVmLCBmbXQsIGFyZ3ApKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorc2NhbncoTkNVUlNFU19DT05TVCBjaGFyICpmbXQsLi4uKQoreworICAgIGludCBjb2RlOworICAgIHZhX2xpc3QgYXA7CisKKyAgICBUKCgic2NhbncoXCIlc1wiLC4uLikgY2FsbGVkIiwgZm10KSk7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBjb2RlID0gdndzY2FudyhzdGRzY3IsIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord3NjYW53KFdJTkRPVyAqd2luLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmZtdCwuLi4pCit7CisgICAgaW50IGNvZGU7CisgICAgdmFfbGlzdCBhcDsKKworICAgIFQoKCJ3c2NhbncoJXAsXCIlc1wiLC4uLikgY2FsbGVkIiwgd2luLCBmbXQpKTsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIGNvZGUgPSB2d3NjYW53KHdpbiwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittdnNjYW53KGludCB5LCBpbnQgeCwgTkNVUlNFU19DT05TVCBjaGFyICpmbXQsLi4uKQoreworICAgIGludCBjb2RlOworICAgIHZhX2xpc3QgYXA7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBjb2RlID0gKG1vdmUoeSwgeCkgPT0gT0spID8gdndzY2FudyhzdGRzY3IsIGZtdCwgYXApIDogRVJSOworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbXZ3c2NhbncoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgTkNVUlNFU19DT05TVCBjaGFyICpmbXQsLi4uKQoreworICAgIGludCBjb2RlOworICAgIHZhX2xpc3QgYXA7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBjb2RlID0gKHdtb3ZlKHdpbiwgeSwgeCkgPT0gT0spID8gdndzY2Fudyh3aW4sIGZtdCwgYXApIDogRVJSOworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2NyZWVuLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTU4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3NjcmVlbi5jCkBAIC0wLDAgKzEsMjIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5NiBvbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3NjcmVlbi5jLHYgMS4zMSAyMDA4LzA4LzE2IDE5OjA1OjM3IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgTUFYX1NJWkUgMHgzZmZmCQkvKiAxNmsgaXMgYmlnIGVub3VnaCBmb3IgYSB3aW5kb3cgb3IgcGFkICovCisKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorZ2V0d2luKEZJTEUgKmZpbGVwKQoreworICAgIFdJTkRPVyB0bXAsICpud2luOworICAgIGludCBuOworCisgICAgVCgoVF9DQUxMRUQoImdldHdpbiglcCkiKSwgZmlsZXApKTsKKworICAgIGNsZWFyZXJyKGZpbGVwKTsKKyAgICAodm9pZCkgZnJlYWQoJnRtcCwgc2l6ZW9mKFdJTkRPVyksIDEsIGZpbGVwKTsKKyAgICBpZiAoZmVycm9yKGZpbGVwKQorCXx8IHRtcC5fbWF4eSA9PSAwCisJfHwgdG1wLl9tYXh5ID4gTUFYX1NJWkUKKwl8fCB0bXAuX21heHggPT0gMAorCXx8IHRtcC5fbWF4eCA+IE1BWF9TSVpFKQorCXJldHVybldpbigwKTsKKworICAgIGlmICh0bXAuX2ZsYWdzICYgX0lTUEFEKSB7CisJbndpbiA9IG5ld3BhZCh0bXAuX21heHkgKyAxLCB0bXAuX21heHggKyAxKTsKKyAgICB9IGVsc2UgeworCW53aW4gPSBuZXd3aW4odG1wLl9tYXh5ICsgMSwgdG1wLl9tYXh4ICsgMSwgMCwgMCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBkZWxpYmVyYXRlbHkgZG8gbm90IHJlc3RvcmUgdGhlIF9wYXJ4LCBfcGFyeSwgb3IgX3BhcmVudAorICAgICAqIGZpZWxkcywgYmVjYXVzZSB0aGUgd2luZG93IGhpZXJhcmNoeSB3aXRoaW4gd2hpY2ggdGhleQorICAgICAqIG1hZGUgc2Vuc2UgaXMgcHJvYmFibHkgZ29uZS4KKyAgICAgKi8KKyAgICBpZiAobndpbiAhPSAwKSB7CisJbndpbi0+X2N1cnggPSB0bXAuX2N1cng7CisJbndpbi0+X2N1cnkgPSB0bXAuX2N1cnk7CisJbndpbi0+X21heHkgPSB0bXAuX21heHk7CisJbndpbi0+X21heHggPSB0bXAuX21heHg7CisJbndpbi0+X2JlZ3kgPSB0bXAuX2JlZ3k7CisJbndpbi0+X2JlZ3ggPSB0bXAuX2JlZ3g7CisJbndpbi0+X3lvZmZzZXQgPSB0bXAuX3lvZmZzZXQ7CisJbndpbi0+X2ZsYWdzID0gdG1wLl9mbGFncyAmIH4oX1NVQldJTik7CisKKwlXSU5ET1dfQVRUUlMobndpbikgPSBXSU5ET1dfQVRUUlMoJnRtcCk7CisJbndpbi0+X25jX2JrZ2QgPSB0bXAuX25jX2JrZ2Q7CisKKwlud2luLT5fbm90aW1lb3V0ID0gdG1wLl9ub3RpbWVvdXQ7CisJbndpbi0+X2NsZWFyID0gdG1wLl9jbGVhcjsKKwlud2luLT5fbGVhdmVvayA9IHRtcC5fbGVhdmVvazsKKwlud2luLT5faWRsb2sgPSB0bXAuX2lkbG9rOworCW53aW4tPl9pZGNvayA9IHRtcC5faWRjb2s7CisJbndpbi0+X2ltbWVkID0gdG1wLl9pbW1lZDsKKwlud2luLT5fc2Nyb2xsID0gdG1wLl9zY3JvbGw7CisJbndpbi0+X3N5bmMgPSB0bXAuX3N5bmM7CisJbndpbi0+X3VzZV9rZXlwYWQgPSB0bXAuX3VzZV9rZXlwYWQ7CisJbndpbi0+X2RlbGF5ID0gdG1wLl9kZWxheTsKKworCW53aW4tPl9yZWd0b3AgPSB0bXAuX3JlZ3RvcDsKKwlud2luLT5fcmVnYm90dG9tID0gdG1wLl9yZWdib3R0b207CisKKwlpZiAodG1wLl9mbGFncyAmIF9JU1BBRCkKKwkgICAgbndpbi0+X3BhZCA9IHRtcC5fcGFkOworCisJZm9yIChuID0gMDsgbiA8PSBud2luLT5fbWF4eTsgbisrKSB7CisJICAgIGNsZWFyZXJyKGZpbGVwKTsKKwkgICAgKHZvaWQpIGZyZWFkKG53aW4tPl9saW5lW25dLnRleHQsCisJCQkgc2l6ZW9mKE5DVVJTRVNfQ0hfVCksCisJCQkgKHNpemVfdCkgKG53aW4tPl9tYXh4ICsgMSksCisJCQkgZmlsZXApOworCSAgICBpZiAoZmVycm9yKGZpbGVwKSkgeworCQlkZWx3aW4obndpbik7CisJCXJldHVybldpbigwKTsKKwkgICAgfQorCX0KKwl0b3VjaHdpbihud2luKTsKKyAgICB9CisgICAgcmV0dXJuV2luKG53aW4pOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwdXR3aW4oV0lORE9XICp3aW4sIEZJTEUgKmZpbGVwKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIGludCBuOworCisgICAgVCgoVF9DQUxMRUQoInB1dHdpbiglcCwlcCkiKSwgd2luLCBmaWxlcCkpOworCisgICAgaWYgKHdpbiAhPSAwKSB7CisJc2l6ZV90IGxlbiA9IChzaXplX3QpICh3aW4tPl9tYXh4ICsgMSk7CisKKwljbGVhcmVycihmaWxlcCk7CisJaWYgKGZ3cml0ZSh3aW4sIHNpemVvZihXSU5ET1cpLCAxLCBmaWxlcCkgIT0gMQorCSAgICB8fCBmZXJyb3IoZmlsZXApKQorCSAgICAgIHJldHVybkNvZGUoY29kZSk7CisKKwlmb3IgKG4gPSAwOyBuIDw9IHdpbi0+X21heHk7IG4rKykgeworCSAgICBpZiAoZndyaXRlKHdpbi0+X2xpbmVbbl0udGV4dCwKKwkJICAgICAgIHNpemVvZihOQ1VSU0VTX0NIX1QpLCBsZW4sIGZpbGVwKSAhPSBsZW4KKwkJfHwgZmVycm9yKGZpbGVwKSkgeworCQlyZXR1cm5Db2RlKGNvZGUpOworCSAgICB9CisJfQorCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorc2NyX3Jlc3RvcmUoY29uc3QgY2hhciAqZmlsZSkKK3sKKyAgICBGSUxFICpmcCA9IDA7CisKKyAgICBUKChUX0NBTExFRCgic2NyX3Jlc3RvcmUoJXMpIiksIF9uY192aXNidWYoZmlsZSkpKTsKKworICAgIGlmIChfbmNfYWNjZXNzKGZpbGUsIFJfT0spIDwgMAorCXx8IChmcCA9IGZvcGVuKGZpbGUsICJyYiIpKSA9PSAwKSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0gZWxzZSB7CisJZGVsd2luKG5ld3Njcik7CisJU1AtPl9uZXdzY3IgPSBnZXR3aW4oZnApOworI2lmICFVU0VfUkVFTlRSQU5UCisJbmV3c2NyID0gU1AtPl9uZXdzY3I7CisjZW5kaWYKKwkodm9pZCkgZmNsb3NlKGZwKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Njcl9kdW1wKGNvbnN0IGNoYXIgKmZpbGUpCit7CisgICAgRklMRSAqZnAgPSAwOworCisgICAgVCgoVF9DQUxMRUQoInNjcl9kdW1wKCVzKSIpLCBfbmNfdmlzYnVmKGZpbGUpKSk7CisKKyAgICBpZiAoX25jX2FjY2VzcyhmaWxlLCBXX09LKSA8IDAKKwl8fCAoZnAgPSBmb3BlbihmaWxlLCAid2IiKSkgPT0gMCkgeworCXJldHVybkNvZGUoRVJSKTsKKyAgICB9IGVsc2UgeworCSh2b2lkKSBwdXR3aW4obmV3c2NyLCBmcCk7CisJKHZvaWQpIGZjbG9zZShmcCk7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzY3JfaW5pdChjb25zdCBjaGFyICpmaWxlKQoreworICAgIEZJTEUgKmZwID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJzY3JfaW5pdCglcykiKSwgX25jX3Zpc2J1ZihmaWxlKSkpOworCisgICAgaWYgKGV4aXRfY2FfbW9kZSAmJiBub25fcmV2X3JtY3VwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGlmIChfbmNfYWNjZXNzKGZpbGUsIFJfT0spIDwgMAorCXx8IChmcCA9IGZvcGVuKGZpbGUsICJyYiIpKSA9PSAwKSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0gZWxzZSB7CisJZGVsd2luKGN1cnNjcik7CisJU1AtPl9jdXJzY3IgPSBnZXR3aW4oZnApOworI2lmICFVU0VfUkVFTlRSQU5UCisJY3Vyc2NyID0gU1AtPl9jdXJzY3I7CisjZW5kaWYKKwkodm9pZCkgZmNsb3NlKGZwKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Njcl9zZXQoY29uc3QgY2hhciAqZmlsZSkKK3sKKyAgICBUKChUX0NBTExFRCgic2NyX3NldCglcykiKSwgX25jX3Zpc2J1ZihmaWxlKSkpOworCisgICAgaWYgKHNjcl9pbml0KGZpbGUpID09IEVSUikgeworCXJldHVybkNvZGUoRVJSKTsKKyAgICB9IGVsc2UgeworCWRlbHdpbihuZXdzY3IpOworCVNQLT5fbmV3c2NyID0gZHVwd2luKGN1cnNjcik7CisjaWYgIVVTRV9SRUVOVFJBTlQKKwluZXdzY3IgPSBTUC0+X25ld3NjcjsKKyNlbmRpZgorCXJldHVybkNvZGUoT0spOworICAgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2Nyb2xsLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Njcm9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjODViZDUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Njcm9sbC5jCkBAIC0wLDAgKzEsMTUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LTIwMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfc2Nyb2xsLmMKKyoqCisqKglUaGUgcm91dGluZSB3c2NybCh3aW4sIG4pLgorKiogIHBvc2l0aXZlIG4gc2Nyb2xsIHRoZSB3aW5kb3cgdXAgKGllLiBtb3ZlIGxpbmVzIGRvd24pCisqKiAgbmVnYXRpdmUgbiBzY3JvbGwgdGhlIHdpbmRvdyBkb3duIChpZS4gbW92ZSBsaW5lcyB1cCkKKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zY3JvbGwuYyx2IDEuMjYgMjAwNi8xMC8xNCAyMDo0NjowOCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3Njcm9sbF93aW5kb3coV0lORE9XICp3aW4sCisJCSAgaW50IGNvbnN0IG4sCisJCSAgTkNVUlNFU19TSVpFX1QgY29uc3QgdG9wLAorCQkgIE5DVVJTRVNfU0laRV9UIGNvbnN0IGJvdHRvbSwKKwkJICBOQ1VSU0VTX0NIX1QgYmxhbmspCit7CisgICAgaW50IGxpbWl0OworICAgIGludCBsaW5lOworICAgIGludCBqOworICAgIHNpemVfdCB0b19jb3B5ID0gKHNpemVfdCkgKHNpemVvZihOQ1VSU0VTX0NIX1QpICogKHdpbi0+X21heHggKyAxKSk7CisKKyAgICBUUihUUkFDRV9NT1ZFLCAoIl9uY19zY3JvbGxfd2luZG93KCVwLCAlZCwgJWxkLCAlbGQpIiwKKwkJICAgIHdpbiwgbiwgKGxvbmcpIHRvcCwgKGxvbmcpIGJvdHRvbSkpOworCisgICAgaWYgKHRvcCA8IDAKKwl8fCBib3R0b20gPCB0b3AKKwl8fCBib3R0b20gPiB3aW4tPl9tYXh5KSB7CisJVFIoVFJBQ0VfTU9WRSwgKCJub3RoaW5nIHRvIHNjcm9sbCIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGlzIHVzZWQgdG8gZG8gYSBsaW5lLXRleHQgcG9pbnRlci1zaHVmZmxlIGluc3RlYWQgb2YgdGV4dCBjb3BpZXMuCisgICAgICogVGhhdCAoYSkgZG9lc24ndCB3b3JrIHdoZW4gdGhlIHdpbmRvdyBpcyBkZXJpdmVkIGFuZCBkb2Vzbid0IGhhdmUKKyAgICAgKiBpdHMgb3duIHN0b3JhZ2UsIChiKSBkb2Vzbid0IHNhdmUgeW91IGEgbG90IG9uIG1vZGVybiBtYWNoaW5lcworICAgICAqIGFueXdheS4gIFlvdXIgdHlwaWNhbCBtZW1jcHkgaW1wbGVtZW50YXRpb25zIGFyZSBjb2RlZCBpbgorICAgICAqIGFzc2VtYmxlciB1c2luZyBhIHRpZ2h0IEJMVCBsb29wOyBmb3IgdGhlIHNpemUgb2YgY29waWVzIHdlJ3JlCisgICAgICogdGFsa2luZyBoZXJlLCB0aGUgdG90YWwgZXhlY3V0aW9uIHRpbWUgaXMgZG9taW5hdGVkIGJ5IHRoZSBvbmUtdGltZQorICAgICAqIHNldHVwIGNvc3QuICBTbyB0aGVyZSBpcyBubyBwb2ludCBpbiB0cnlpbmcgdG8gYmUgZXhjZXNzaXZlbHkKKyAgICAgKiBjbGV2ZXIgLS0gZXNyLgorICAgICAqLworCisgICAgLyogc2hpZnQgbiBsaW5lcyBkb3dud2FyZHMgKi8KKyAgICBpZiAobiA8IDApIHsKKwlsaW1pdCA9IHRvcCAtIG47CisJZm9yIChsaW5lID0gYm90dG9tOyBsaW5lID49IGxpbWl0ICYmIGxpbmUgPj0gMDsgbGluZS0tKSB7CisJICAgIFRSKFRSQUNFX01PVkUsICgiLi4uY29weWluZyAlZCB0byAlZCIsIGxpbmUgKyBuLCBsaW5lKSk7CisJICAgIG1lbWNweSh3aW4tPl9saW5lW2xpbmVdLnRleHQsCisJCSAgIHdpbi0+X2xpbmVbbGluZSArIG5dLnRleHQsCisJCSAgIHRvX2NvcHkpOworCSAgICBpZl9VU0VfU0NST0xMX0hJTlRTKHdpbi0+X2xpbmVbbGluZV0ub2xkaW5kZXggPQorCQkJCXdpbi0+X2xpbmVbbGluZSArIG5dLm9sZGluZGV4KTsKKwl9CisJZm9yIChsaW5lID0gdG9wOyBsaW5lIDwgbGltaXQgJiYgbGluZSA8PSB3aW4tPl9tYXh5OyBsaW5lKyspIHsKKwkgICAgVFIoVFJBQ0VfTU9WRSwgKCIuLi5maWxsaW5nICVkIiwgbGluZSkpOworCSAgICBmb3IgKGogPSAwOyBqIDw9IHdpbi0+X21heHg7IGorKykKKwkJd2luLT5fbGluZVtsaW5lXS50ZXh0W2pdID0gYmxhbms7CisJICAgIGlmX1VTRV9TQ1JPTExfSElOVFMod2luLT5fbGluZVtsaW5lXS5vbGRpbmRleCA9IF9ORVdJTkRFWCk7CisJfQorICAgIH0KKworICAgIC8qIHNoaWZ0IG4gbGluZXMgdXB3YXJkcyAqLworICAgIGlmIChuID4gMCkgeworCWxpbWl0ID0gYm90dG9tIC0gbjsKKwlmb3IgKGxpbmUgPSB0b3A7IGxpbmUgPD0gbGltaXQgJiYgbGluZSA8PSB3aW4tPl9tYXh5OyBsaW5lKyspIHsKKwkgICAgbWVtY3B5KHdpbi0+X2xpbmVbbGluZV0udGV4dCwKKwkJICAgd2luLT5fbGluZVtsaW5lICsgbl0udGV4dCwKKwkJICAgdG9fY29weSk7CisJICAgIGlmX1VTRV9TQ1JPTExfSElOVFMod2luLT5fbGluZVtsaW5lXS5vbGRpbmRleCA9CisJCQkJd2luLT5fbGluZVtsaW5lICsgbl0ub2xkaW5kZXgpOworCX0KKwlmb3IgKGxpbmUgPSBib3R0b207IGxpbmUgPiBsaW1pdCAmJiBsaW5lID49IDA7IGxpbmUtLSkgeworCSAgICBmb3IgKGogPSAwOyBqIDw9IHdpbi0+X21heHg7IGorKykKKwkJd2luLT5fbGluZVtsaW5lXS50ZXh0W2pdID0gYmxhbms7CisJICAgIGlmX1VTRV9TQ1JPTExfSElOVFMod2luLT5fbGluZVtsaW5lXS5vbGRpbmRleCA9IF9ORVdJTkRFWCk7CisJfQorICAgIH0KKyAgICB0b3VjaGxpbmUod2luLCB0b3AsIGJvdHRvbSAtIHRvcCArIDEpOworCisgICAgaWZfV0lERUMoeworCWlmIChXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgIT0gMCkgeworCSAgICBpbnQgbmV4dCA9IFdJTkRPV19FWFQod2luLCBhZGRjaF95KSArIG47CisJICAgIGlmIChuZXh0IDwgMCB8fCBuZXh0ID4gd2luLT5fbWF4eSkgeworCQlUUihUUkFDRV9WSVJUUFVULAorCQkgICAoIkFsZXJ0IGRpc2NhcmRlZCBtdWx0aWJ5dGUgb24gc2Nyb2xsIikpOworCQlXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeSkgPSAwOworCSAgICB9IGVsc2UgeworCQlUUihUUkFDRV9WSVJUUFVULCAoInNjcm9sbGVkIHdvcmtpbmcgcG9zaXRpb24gdG8gJWQsJWQiLAorCQkJCSAgIFdJTkRPV19FWFQod2luLCBhZGRjaF95KSwKKwkJCQkgICBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeCkpKTsKKwkJV0lORE9XX0VYVCh3aW4sIGFkZGNoX3kpID0gbmV4dDsKKwkgICAgfQorCX0KKyAgICB9KQorfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3c2NybChXSU5ET1cgKndpbiwgaW50IG4pCit7CisgICAgVCgoVF9DQUxMRUQoIndzY3JsKCVwLCVkKSIpLCB3aW4sIG4pKTsKKworICAgIGlmICghd2luIHx8ICF3aW4tPl9zY3JvbGwpIHsKKwlUUihUUkFDRV9NT1ZFLCAoIi4uLnNjcm9sbG9rIGlzIGZhbHNlIikpOworCXJldHVybkNvZGUoRVJSKTsKKyAgICB9CisKKyAgICBpZiAobiAhPSAwKSB7CisJX25jX3Njcm9sbF93aW5kb3cod2luLCBuLCB3aW4tPl9yZWd0b3AsIHdpbi0+X3JlZ2JvdHRvbSwgd2luLT5fbmNfYmtnZCk7CisJX25jX3N5bmNob29rKHdpbik7CisgICAgfQorICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9zY3JvbGxvay5jIGIvbmN1cnNlcy9iYXNlL2xpYl9zY3JvbGxvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjMwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Njcm9sbG9rLmMKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfc2Nyb2xsb2suYworKioKKyoqCVRoZSByb3V0aW5lIHNjcm9sbG9rLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Njcm9sbG9rLmMsdiAxLjQgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzY3JvbGxvayhXSU5ET1cgKndpbiwgYm9vbCBmbGFnKQoreworICAgIFQoKFRfQ0FMTEVEKCJzY3JvbGxvayglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisKKyAgICBpZiAod2luKSB7CisJd2luLT5fc2Nyb2xsID0gZmxhZzsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3NjcnJlZy5jIGIvbmN1cnNlcy9iYXNlL2xpYl9zY3JyZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODVkNjBmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9zY3JyZWcuYwpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9zY3JyZWcuYworKioKKyoqCVRoZSByb3V0aW5lIHdzZXRzY3JyZWcoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zY3JyZWcuYyx2IDEuMTAgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3c2V0c2NycmVnKFdJTkRPVyAqd2luLCBpbnQgdG9wLCBpbnQgYm90dG9tKQoreworICAgIFQoKFRfQ0FMTEVEKCJ3c2V0c2NycmVnKCVwLCVkLCVkKSIpLCB3aW4sIHRvcCwgYm90dG9tKSk7CisKKyAgICBpZiAod2luICYmCisJdG9wID49IDAgJiYgdG9wIDw9IHdpbi0+X21heHkgJiYKKwlib3R0b20gPj0gMCAmJiBib3R0b20gPD0gd2luLT5fbWF4eSAmJgorCWJvdHRvbSA+IHRvcCkgeworCXdpbi0+X3JlZ3RvcCA9IChOQ1VSU0VTX1NJWkVfVCkgdG9wOworCXdpbi0+X3JlZ2JvdHRvbSA9IChOQ1VSU0VTX1NJWkVfVCkgYm90dG9tOworCisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9zZXRfdGVybS5jIGIvbmN1cnNlcy9iYXNlL2xpYl9zZXRfdGVybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjQzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3NldF90ZXJtLmMKQEAgLTAsMCArMSw2NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9zZXRfdGVybS5jCisqKgorKioJVGhlIHJvdXRpbmUgc2V0X3Rlcm0oKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGN1cl90ZXJtICovCisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2V0X3Rlcm0uYyx2IDEuMTE3IDIwMDgvMDgvMDQgMTg6MTE6MTIgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoU0NSRUVOICopCitzZXRfdGVybShTQ1JFRU4gKnNjcmVlbnApCit7CisgICAgU0NSRUVOICpvbGRTUDsKKyAgICBTQ1JFRU4gKm5ld1NQOworCisgICAgVCgoVF9DQUxMRUQoInNldF90ZXJtKCVwKSIpLCBzY3JlZW5wKSk7CisKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIG9sZFNQID0gU1A7CisgICAgX25jX3NldF9zY3JlZW4oc2NyZWVucCk7CisgICAgbmV3U1AgPSBTUDsKKworICAgIGlmIChuZXdTUCAhPSAwKSB7CisJc2V0X2N1cnRlcm0obmV3U1AtPl90ZXJtKTsKKyNpZiAhVVNFX1JFRU5UUkFOVAorCWN1cnNjciA9IG5ld1NQLT5fY3Vyc2NyOworCW5ld3NjciA9IG5ld1NQLT5fbmV3c2NyOworCXN0ZHNjciA9IG5ld1NQLT5fc3Rkc2NyOworCUNPTE9SUyA9IG5ld1NQLT5fY29sb3JfY291bnQ7CisJQ09MT1JfUEFJUlMgPSBuZXdTUC0+X3BhaXJfY291bnQ7CisjZW5kaWYKKyAgICB9IGVsc2UgeworCXNldF9jdXJ0ZXJtKDApOworI2lmICFVU0VfUkVFTlRSQU5UCisJY3Vyc2NyID0gMDsKKwluZXdzY3IgPSAwOworCXN0ZHNjciA9IDA7CisJQ09MT1JTID0gMDsKKwlDT0xPUl9QQUlSUyA9IDA7CisjZW5kaWYKKyAgICB9CisKKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgVCgoVF9SRVRVUk4oIiVwIiksIG9sZFNQKSk7CisgICAgcmV0dXJuIChvbGRTUCk7Cit9CisKK3N0YXRpYyB2b2lkCitfbmNfZnJlZV9rZXl0cnkoVFJJRVMgKiBrdCkKK3sKKyAgICBpZiAoa3QgIT0gMCkgeworCV9uY19mcmVlX2tleXRyeShrdC0+Y2hpbGQpOworCV9uY19mcmVlX2tleXRyeShrdC0+c2libGluZyk7CisJZnJlZShrdCk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbAorZGVsaW5rX3NjcmVlbihTQ1JFRU4gKnNwKQoreworICAgIFNDUkVFTiAqbGFzdCA9IDA7CisgICAgU0NSRUVOICp0ZW1wOworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBmb3IgKGVhY2hfc2NyZWVuKHRlbXApKSB7CisJaWYgKHRlbXAgPT0gc3ApIHsKKwkgICAgaWYgKGxhc3QpCisJCWxhc3QgPSBzcC0+X25leHRfc2NyZWVuOworCSAgICBlbHNlCisJCV9uY19zY3JlZW5fY2hhaW4gPSBzcC0+X25leHRfc2NyZWVuOworCSAgICByZXN1bHQgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisJbGFzdCA9IHRlbXA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gU0NSRUVOIHNwLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorZGVsc2NyZWVuKFNDUkVFTiAqc3ApCit7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgiZGVsc2NyZWVuKCVwKSIpLCBzcCkpOworCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgaWYgKGRlbGlua19zY3JlZW4oc3ApKSB7CisKKwkodm9pZCkgX25jX2ZyZWV3aW4oc3AtPl9jdXJzY3IpOworCSh2b2lkKSBfbmNfZnJlZXdpbihzcC0+X25ld3Njcik7CisJKHZvaWQpIF9uY19mcmVld2luKHNwLT5fc3Rkc2NyKTsKKworCWlmIChzcC0+X3NsayAhPSAwKSB7CisJICAgIGlmIChzcC0+X3Nsay0+ZW50ICE9IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IHNwLT5fc2xrLT5sYWJjbnQ7ICsraSkgeworCQkgICAgRnJlZUlmTmVlZGVkKHNwLT5fc2xrLT5lbnRbaV0uZW50X3RleHQpOworCQkgICAgRnJlZUlmTmVlZGVkKHNwLT5fc2xrLT5lbnRbaV0uZm9ybV90ZXh0KTsKKwkJfQorCQlmcmVlKHNwLT5fc2xrLT5lbnQpOworCSAgICB9CisJICAgIGZyZWUoc3AtPl9zbGspOworCSAgICBzcC0+X3NsayA9IDA7CisJfQorCisJX25jX2ZyZWVfa2V5dHJ5KHNwLT5fa2V5dHJ5KTsKKwlzcC0+X2tleXRyeSA9IDA7CisKKwlfbmNfZnJlZV9rZXl0cnkoc3AtPl9rZXlfb2spOworCXNwLT5fa2V5X29rID0gMDsKKworCUZyZWVJZk5lZWRlZChzcC0+X2N1cnJlbnRfYXR0cik7CisKKwlGcmVlSWZOZWVkZWQoc3AtPl9jb2xvcl90YWJsZSk7CisJRnJlZUlmTmVlZGVkKHNwLT5fY29sb3JfcGFpcnMpOworCisJRnJlZUlmTmVlZGVkKHNwLT5vbGRoYXNoKTsKKwlGcmVlSWZOZWVkZWQoc3AtPm5ld2hhc2gpOworCUZyZWVJZk5lZWRlZChzcC0+aGFzaHRhYik7CisKKwlGcmVlSWZOZWVkZWQoc3AtPl9hY3NfbWFwKTsKKwlGcmVlSWZOZWVkZWQoc3AtPl9zY3JlZW5fYWNzX21hcCk7CisKKwkvKgorCSAqIElmIHRoZSBhc3NvY2lhdGVkIG91dHB1dCBzdHJlYW0gaGFzIGJlZW4gY2xvc2VkLCB3ZSBjYW4gZGlzY2FyZCB0aGUKKwkgKiBzZXQtYnVmZmVyLiAgTGltaXQgdGhlIGVycm9yIGNoZWNrIHRvIEVCQURGLCBzaW5jZSBmZmx1c2ggbWF5IGZhaWwKKwkgKiBmb3Igb3RoZXIgcmVhc29ucyB0aGFuIHRyeWluZyB0byBvcGVyYXRlIHVwb24gYSBjbG9zZWQgc3RyZWFtLgorCSAqLworCWlmIChzcC0+X29mcCAhPSAwCisJICAgICYmIHNwLT5fc2V0YnVmICE9IDAKKwkgICAgJiYgZmZsdXNoKHNwLT5fb2ZwKSAhPSAwCisJICAgICYmIGVycm5vID09IEVCQURGKSB7CisJICAgIGZyZWUoc3AtPl9zZXRidWYpOworCX0KKworCWRlbF9jdXJ0ZXJtKHNwLT5fdGVybSk7CisJZnJlZShzcCk7CisKKwkvKgorCSAqIElmIHRoaXMgd2FzIHRoZSBjdXJyZW50IHNjcmVlbiwgcmVzZXQgZXZlcnl0aGluZyB0aGF0IHRoZQorCSAqIGFwcGxpY2F0aW9uIG1pZ2h0IHRyeSB0byB1c2UgKGV4Y2VwdCBjdXJfdGVybSwgd2hpY2ggbWF5IGhhdmUKKwkgKiBtdWx0aXBsZSByZWZlcmVuY2VzIGluIGRpZmZlcmVudCBzY3JlZW5zKS4KKwkgKi8KKwlpZiAoc3AgPT0gU1ApIHsKKyNpZiAhVVNFX1JFRU5UUkFOVAorCSAgICBjdXJzY3IgPSAwOworCSAgICBuZXdzY3IgPSAwOworCSAgICBzdGRzY3IgPSAwOworCSAgICBDT0xPUlMgPSAwOworCSAgICBDT0xPUl9QQUlSUyA9IDA7CisjZW5kaWYKKwkgICAgX25jX3NldF9zY3JlZW4oMCk7CisJfQorICAgIH0KKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgcmV0dXJuVm9pZDsKK30KKworc3RhdGljIGJvb2wKK25vX21vdXNlX2V2ZW50KFNDUkVFTiAqc3AgR0NDX1VOVVNFRCkKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBib29sCitub19tb3VzZV9pbmxpbmUoU0NSRUVOICpzcCBHQ0NfVU5VU0VEKQoreworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGJvb2wKK25vX21vdXNlX3BhcnNlKFNDUkVFTiAqc3AgR0NDX1VOVVNFRCwgaW50IGNvZGUgR0NDX1VOVVNFRCkKK3sKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK25vX21vdXNlX3Jlc3VtZShTQ1JFRU4gKnNwIEdDQ19VTlVTRUQpCit7Cit9CisKK3N0YXRpYyB2b2lkCitub19tb3VzZV93cmFwKFNDUkVFTiAqc3AgR0NDX1VOVVNFRCkKK3sKK30KKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTICYmIFVTRV9DT0xPUkZHQkcKK3N0YXRpYyBjaGFyICoKK2V4dHJhY3RfZmdiZyhjaGFyICpzcmMsIGludCAqcmVzdWx0KQoreworICAgIGNoYXIgKmRzdCA9IDA7CisgICAgbG9uZyB2YWx1ZSA9IHN0cnRvbChzcmMsICZkc3QsIDApOworCisgICAgaWYgKGRzdCA9PSAwKSB7CisJZHN0ID0gc3JjOworICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMCkgeworCSpyZXN1bHQgPSB2YWx1ZTsKKyAgICB9CisgICAgd2hpbGUgKCpkc3QgIT0gMCAmJiAqZHN0ICE9ICc7JykKKwlkc3QrKzsKKyAgICBpZiAoKmRzdCA9PSAnOycpCisJZHN0Kys7CisgICAgcmV0dXJuIGRzdDsKK30KKyNlbmRpZgorCisvKiBPUy1pbmRlcGVuZGVudCBzY3JlZW4gaW5pdGlhbGl6YXRpb25zICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfc2V0dXBzY3JlZW4oaW50IHNsaW5lcyBHQ0NfVU5VU0VELAorCQlpbnQgc2NvbHVtbnMgR0NDX1VOVVNFRCwKKwkJRklMRSAqb3V0cHV0LAorCQlib29sIGZpbHRlcmVkLAorCQlpbnQgc2xrX2Zvcm1hdCkKK3sKKyAgICBjaGFyICplbnY7CisgICAgaW50IGJvdHRvbV9zdG9sZW4gPSAwOworICAgIGJvb2wgc3VwcG9ydF9jb29raWVzID0gVVNFX1hNQ19TVVBQT1JUOworICAgIHJpcG9mZl90ICpyb3A7CisKKyAgICBUKChUX0NBTExFRCgiX25jX3NldHVwc2NyZWVuKCVkLCAlZCwgJXAsICVkLCAlZCkiKSwKKyAgICAgICBzbGluZXMsIHNjb2x1bW5zLCBvdXRwdXQsIGZpbHRlcmVkLCBzbGtfZm9ybWF0KSk7CisKKyAgICBhc3NlcnQoU1AgPT0gMCk7CQkvKiBoYXMgYmVlbiByZXNldCBpbiBuZXd0ZXJtKCkgISAqLworICAgIGlmICghX25jX2FsbG9jX3NjcmVlbigpCisJfHwgKChTUC0+X2Fjc19tYXAgPSB0eXBlQ2FsbG9jKGNodHlwZSwgQUNTX0xFTikpID09IDApCisJfHwgKChTUC0+X3NjcmVlbl9hY3NfbWFwID0gdHlwZUNhbGxvYyhib29sLCBBQ1NfTEVOKSkgPT0gMCkpIHsKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfQorCisgICAgVCgoImNyZWF0ZWQgU1AgJXAiLCBTUCkpOworICAgIFNQLT5fbmV4dF9zY3JlZW4gPSBfbmNfc2NyZWVuX2NoYWluOworICAgIF9uY19zY3JlZW5fY2hhaW4gPSBTUDsKKworICAgIGlmICgoU1AtPl9jdXJyZW50X2F0dHIgPSB0eXBlQ2FsbG9jKE5DVVJTRVNfQ0hfVCwgMSkpID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgLyoKKyAgICAgKiBXZSBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBzY3JlZW5zaXplLCBqdXN0IGluIGNhc2UuCisgICAgICovCisgICAgX25jX2dldF9zY3JlZW5zaXplKFNQLCAmc2xpbmVzLCAmc2NvbHVtbnMpOworICAgIFNFVF9MSU5FUyhzbGluZXMpOworICAgIFNFVF9DT0xTKHNjb2x1bW5zKTsKKyAgICBUKChUX0NSRUFURSgic2NyZWVuICVzICVkeCVkIiksIHRlcm1uYW1lKCksIExJTkVTLCBDT0xTKSk7CisKKyAgICBTUC0+X2ZpbHRlcmVkID0gZmlsdGVyZWQ7CisKKyAgICAvKiBpbXBsZW1lbnQgZmlsdGVyIG1vZGUgKi8KKyAgICBpZiAoZmlsdGVyZWQpIHsKKwlzbGluZXMgPSAxOworCVNFVF9MSU5FUyhzbGluZXMpOworCWNsZWFyX3NjcmVlbiA9IDA7CisJY3Vyc29yX2Rvd24gPSBwYXJtX2Rvd25fY3Vyc29yID0gMDsKKwljdXJzb3JfYWRkcmVzcyA9IDA7CisJY3Vyc29yX3VwID0gcGFybV91cF9jdXJzb3IgPSAwOworCXJvd19hZGRyZXNzID0gMDsKKworCWN1cnNvcl9ob21lID0gY2FycmlhZ2VfcmV0dXJuOworCVQoKCJmaWx0ZXIgc2NyZWVuc2l6ZSAlZHglZCIsIExJTkVTLCBDT0xTKSk7CisgICAgfQorI2lmZGVmIF9fREpHUFBfXworICAgIFQoKCJzZXR0aW5nIG91dHB1dCBtb2RlIHRvIGJpbmFyeSIpKTsKKyAgICBmZmx1c2gob3V0cHV0KTsKKyAgICBzZXRtb2RlKG91dHB1dCwgT19CSU5BUlkpOworI2VuZGlmCisgICAgX25jX3NldF9idWZmZXIob3V0cHV0LCBUUlVFKTsKKyAgICBTUC0+X3Rlcm0gPSBjdXJfdGVybTsKKyAgICBTUC0+X2xpbmVzID0gc2xpbmVzOworICAgIFNQLT5fbGluZXNfYXZhaWwgPSBzbGluZXM7CisgICAgU1AtPl9jb2x1bW5zID0gc2NvbHVtbnM7CisgICAgU1AtPl9jdXJzcm93ID0gLTE7CisgICAgU1AtPl9jdXJzY29sID0gLTE7CisgICAgU1AtPl9ubCA9IFRSVUU7CisgICAgU1AtPl9yYXcgPSBGQUxTRTsKKyAgICBTUC0+X2NicmVhayA9IDA7CisgICAgU1AtPl9lY2hvID0gVFJVRTsKKyAgICBTUC0+X2ZpZm9oZWFkID0gLTE7CisgICAgU1AtPl9lbmR3aW4gPSBUUlVFOworICAgIFNQLT5fb2ZwID0gb3V0cHV0OworICAgIFNQLT5fY3Vyc29yID0gLTE7CQkvKiBjYW5ub3Qga25vdyByZWFsIGN1cnNvciBzaGFwZSAqLworCisgICAgU2V0Tm9QYWRkaW5nKFNQKTsKKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisgICAgU1AtPl9kZWZhdWx0X2NvbG9yID0gRkFMU0U7CisgICAgU1AtPl9oYXNfc2dyXzM5XzQ5ID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIFNldCBvdXIgYXNzdW1wdGlvbiBvZiB0aGUgdGVybWluYWwncyBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQKKyAgICAgKiBjb2xvcnMuICBUaGUgY3Vyc19jb2xvciBtYW4tcGFnZSBzdGF0ZXMgdGhhdCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlCisgICAgICogYmFja2dyb3VuZCBpcyBibGFjay4gIFRoZSBvcmlnaW4gb2YgdGhpcyBhc3N1bXB0aW9uIGFwcGVhcnMgdG8gYmUKKyAgICAgKiB0ZXJtaW5hbHMgdGhhdCBkaXNwbGF5ZWQgY29sb3JlZCB0ZXh0LCBidXQgbm8gY29sb3JlZCBiYWNrZ3JvdW5kcywgZS5nLiwKKyAgICAgKiB0aGUgZmlyc3QgY29sb3JlZCB0ZXJtaW5hbHMgYXJvdW5kIDE5ODAuICBNb3JlIHJlY2VudCBvbmVzIHdpdGggYmV0dGVyCisgICAgICogdGVjaG5vbG9neSBjYW4gZGlzcGxheSBub3Qgb25seSBjb2xvcmVkIGJhY2tncm91bmRzLCBidXQgYWxsCisgICAgICogY29tYmluYXRpb25zLiAgU28gYSB0ZXJtaW5hbCBtaWdodCBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiAid2hpdGUiIG9uCisgICAgICogYmxhY2sgKGdyZWVuL2JsYWNrIGxvb2tzIG1vbm9jaHJvbWUgdG9vKSwgYnV0IGJsYWNrIG9uIHdoaXRlIG9yIGV2ZW4KKyAgICAgKiBvbiBpdm9yeS4KKyAgICAgKgorICAgICAqIFdoaXRlLW9uLWJsYWNrIGlzIHRoZSBzaW1wbGVzdCB0aGluZyB0byB1c2UgZm9yIG1vbm9jaHJvbWUuICBBbG1vc3QKKyAgICAgKiBhbGwgYXBwbGljYXRpb25zIHRoYXQgdXNlIGNvbG9yIHBhaW50IGJvdGggdGV4dCBhbmQgYmFja2dyb3VuZCwgc28KKyAgICAgKiB0aGUgZGlzdGluY3Rpb24gaXMgbW9vdC4gIEJ1dCBhIGZldyBkbyBub3QgLSB3aGljaCBpcyB3aHkgd2UgbGVhdmUgdGhpcworICAgICAqIGNvbmZpZ3VyYWJsZSAoYSBiZXR0ZXIgc29sdXRpb24gaXMgdG8gdXNlIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpIGZvcgorICAgICAqIHRoZSByYXJlIGFwcGxpY2F0aW9ucyB0aGF0IGRvIHJlcXVpcmUgdGhhdCBzb3J0IG9mIGFwcGVhcmFuY2UsIHNpbmNlCisgICAgICogaXMgYXBwZWFycyB0aGF0IG1vcmUgdXNlcnMgZXhwZWN0IHRvIGJlIGFibGUgdG8gbWFrZSBhIHdoaXRlLW9uLWJsYWNrCisgICAgICogb3IgYmxhY2stb24td2hpdGUgZGlzcGxheSB1bmRlciBjb250cm9sIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGFuIG5vdCkuCisgICAgICovCisjaWZkZWYgVVNFX0FTU1VNRURfQ09MT1IKKyAgICBTUC0+X2RlZmF1bHRfZmcgPSBDT0xPUl9XSElURTsKKyAgICBTUC0+X2RlZmF1bHRfYmcgPSBDT0xPUl9CTEFDSzsKKyNlbHNlCisgICAgU1AtPl9kZWZhdWx0X2ZnID0gQ19NQVNLOworICAgIFNQLT5fZGVmYXVsdF9iZyA9IENfTUFTSzsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBBbGxvdyB0aG9zZSBhc3N1bWVkL2RlZmF1bHQgY29sb3IgYXNzdW1wdGlvbnMgdG8gYmUgb3ZlcnJpZGRlbiBhdAorICAgICAqIHJ1bnRpbWU6CisgICAgICovCisgICAgaWYgKChlbnYgPSBnZXRlbnYoIk5DVVJTRVNfQVNTVU1FRF9DT0xPUlMiKSkgIT0gMCkgeworCWludCBmZywgYmc7CisJY2hhciBzZXAxLCBzZXAyOworCWludCBjb3VudCA9IHNzY2FuZihlbnYsICIlZCVjJWQlYyIsICZmZywgJnNlcDEsICZiZywgJnNlcDIpOworCWlmIChjb3VudCA+PSAxKSB7CisJICAgIFNQLT5fZGVmYXVsdF9mZyA9IChmZyA+PSAwICYmIGZnIDwgbWF4X2NvbG9ycykgPyBmZyA6IENfTUFTSzsKKwkgICAgaWYgKGNvdW50ID49IDMpIHsKKwkJU1AtPl9kZWZhdWx0X2JnID0gKGJnID49IDAgJiYgYmcgPCBtYXhfY29sb3JzKSA/IGJnIDogQ19NQVNLOworCSAgICB9CisJICAgIFRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLAorCSAgICAgICAoImZyb20gZW52aXJvbm1lbnQgYXNzdW1lZCBmZz0lZCwgYmc9JWQiLAorCQlTUC0+X2RlZmF1bHRfZmcsCisJCVNQLT5fZGVmYXVsdF9iZykpOworCX0KKyAgICB9CisjaWYgVVNFX0NPTE9SRkdCRworICAgIC8qCisgICAgICogSWYgcnh2dCdzICRDT0xPUkZHQkcgdmFyaWFibGUgaXMgc2V0LCB1c2UgaXQgdG8gc3BlY2lmeSB0aGUgYXNzdW1lZAorICAgICAqIGRlZmF1bHQgY29sb3JzLiAgTm90ZSB0aGF0IHJ4dnQgKG1pcyl1c2VzIGJvbGQgY29sb3JzLCBlcXVhdGluZyBhIGJvbGQKKyAgICAgKiBjb2xvciB0byB0aGF0IHZhbHVlIHBsdXMgOC4gIFdlJ2xsIG9ubHkgdXNlIHRoZSBub24tYm9sZCBjb2xvciBmb3Igbm93IC0KKyAgICAgKiBkZWNpZGUgbGF0ZXIgaWYgaXQgaXMgd29ydGggaGF2aW5nIGRlZmF1bHQgYXR0cmlidXRlcyBhcyB3ZWxsLgorICAgICAqLworICAgIGlmIChnZXRlbnYoIkNPTE9SRkdCRyIpICE9IDApIHsKKwljaGFyICpwID0gZ2V0ZW52KCJDT0xPUkZHQkciKTsKKwlUUihUUkFDRV9DSEFSUFVUIHwgVFJBQ0VfTU9WRSwgKCJkZWNvZGluZyBDT0xPUkZHQkcgJXMiLCBwKSk7CisJcCA9IGV4dHJhY3RfZmdiZyhwLCAmKFNQLT5fZGVmYXVsdF9mZykpOworCXAgPSBleHRyYWN0X2ZnYmcocCwgJihTUC0+X2RlZmF1bHRfYmcpKTsKKwlpZiAoKnApCQkJLyogYXNzdW1lIHJ4dnQgd2FzIGNvbXBpbGVkIHdpdGggeHBtIHN1cHBvcnQgKi8KKwkgICAgcCA9IGV4dHJhY3RfZmdiZyhwLCAmKFNQLT5fZGVmYXVsdF9iZykpOworCVRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLCAoImRlY29kZWQgZmc9JWQsIGJnPSVkIiwKKwkJCQkJU1AtPl9kZWZhdWx0X2ZnLCBTUC0+X2RlZmF1bHRfYmcpKTsKKwlpZiAoU1AtPl9kZWZhdWx0X2ZnID49IG1heF9jb2xvcnMpIHsKKwkgICAgaWYgKHNldF9hX2ZvcmVncm91bmQgIT0gQUJTRU5UX1NUUklORworCQkmJiAhc3RyY21wKHNldF9hX2ZvcmVncm91bmQsICJcMDMzWzMlcDElZG0iKSkgeworCQlzZXRfYV9mb3JlZ3JvdW5kID0gIlwwMzNbMyU/JXAxJXs4fSU+JXQ5JWUlcDElZCU7bSI7CisJICAgIH0gZWxzZSB7CisJCVNQLT5fZGVmYXVsdF9mZyAlPSBtYXhfY29sb3JzOworCSAgICB9CisJfQorCWlmIChTUC0+X2RlZmF1bHRfYmcgPj0gbWF4X2NvbG9ycykgeworCSAgICBpZiAoc2V0X2FfYmFja2dyb3VuZCAhPSBBQlNFTlRfU1RSSU5HCisJCSYmICFzdHJjbXAoc2V0X2FfYmFja2dyb3VuZCwgIlwwMzNbNCVwMSVkbSIpKSB7CisJCXNldF9hX2JhY2tncm91bmQgPSAiXDAzM1s0JT8lcDElezh9JT4ldDklZSVwMSVkJTttIjsKKwkgICAgfSBlbHNlIHsKKwkJU1AtPl9kZWZhdWx0X2JnICU9IG1heF9jb2xvcnM7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogTkNVUlNFU19FWFRfRlVOQ1MgKi8KKworICAgIFNQLT5fbWF4Y2xpY2sgPSBERUZBVUxUX01BWENMSUNLOworICAgIFNQLT5fbW91c2VfZXZlbnQgPSBub19tb3VzZV9ldmVudDsKKyAgICBTUC0+X21vdXNlX2lubGluZSA9IG5vX21vdXNlX2lubGluZTsKKyAgICBTUC0+X21vdXNlX3BhcnNlID0gbm9fbW91c2VfcGFyc2U7CisgICAgU1AtPl9tb3VzZV9yZXN1bWUgPSBub19tb3VzZV9yZXN1bWU7CisgICAgU1AtPl9tb3VzZV93cmFwID0gbm9fbW91c2Vfd3JhcDsKKyAgICBTUC0+X21vdXNlX2ZkID0gLTE7CisKKyAgICAvKgorICAgICAqIElmIHdlJ3ZlIG5vIG1hZ2ljIGNvb2tpZSBzdXBwb3J0LCB3ZSBzdXBwcmVzcyBhdHRyaWJ1dGVzIHRoYXQgeG1jIHdvdWxkCisgICAgICogYWZmZWN0LCBpLmUuLCB0aGUgYXR0cmlidXRlcyB0aGF0IGFmZmVjdCB0aGUgcmVuZGl0aW9uIG9mIGEgc3BhY2UuCisgICAgICovCisgICAgU1AtPl9va19hdHRyaWJ1dGVzID0gdGVybWF0dHJzKCk7CisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCVNQLT5fb2tfYXR0cmlidXRlcyB8PSBBX0NPTE9SOworICAgIH0KKyNpZiBVU0VfWE1DX1NVUFBPUlQKKyAgICAvKgorICAgICAqIElmIHdlIGhhdmUgbm8gbWFnaWMtY29va2llIHN1cHBvcnQgY29tcGlsZWQtaW4sIG9yIGlmIGl0IGlzIHN1cHByZXNzZWQKKyAgICAgKiBpbiB0aGUgZW52aXJvbm1lbnQsIHJlc2V0IHRoZSBzdXBwb3J0LWZsYWcuCisgICAgICovCisgICAgaWYgKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPj0gMCkgeworCWlmIChnZXRlbnYoIk5DVVJTRVNfTk9fTUFHSUNfQ09PS0lFIikgIT0gMCkgeworCSAgICBzdXBwb3J0X2Nvb2tpZXMgPSBGQUxTRTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIXN1cHBvcnRfY29va2llcyAmJiBtYWdpY19jb29raWVfZ2xpdGNoID49IDApIHsKKwlUKCgid2lsbCBkaXNhYmxlIGF0dHJpYnV0ZXMgdG8gd29yayB3L28gbWFnaWMgY29va2llcyIpKTsKKyAgICB9CisKKyAgICBpZiAobWFnaWNfY29va2llX2dsaXRjaCA+IDApIHsJLyogdHZpLCB3eXNlICovCisKKwlTUC0+X3htY190cmlnZ2VycyA9IFNQLT5fb2tfYXR0cmlidXRlcyAmICgKKwkJCQkJCSAgICAgQV9TVEFORE9VVCB8CisJCQkJCQkgICAgIEFfVU5ERVJMSU5FIHwKKwkJCQkJCSAgICAgQV9SRVZFUlNFIHwKKwkJCQkJCSAgICAgQV9CTElOSyB8CisJCQkJCQkgICAgIEFfRElNIHwKKwkJCQkJCSAgICAgQV9CT0xEIHwKKwkJCQkJCSAgICAgQV9JTlZJUyB8CisJCQkJCQkgICAgIEFfUFJPVEVDVAorCSAgICApOworI2lmIDAKKwkvKgorCSAqIFdlICJzaG91bGQiIHRyZWF0IGNvbG9ycyBhcyBhbiBhdHRyaWJ1dGUuICBUaGUgd3lzZTM1MCAoYW5kIGl0cworCSAqIGNsb25lcykgYXBwZWFyIHRvIGJlIHRoZSBvbmx5IG9uZXMgdGhhdCBoYXZlIGJvdGggY29sb3JzIGFuZCBtYWdpYworCSAqIGNvb2tpZXMuCisJICovCisJaWYgKGhhc19jb2xvcnMoKSkgeworCSAgICBTUC0+X3htY190cmlnZ2VycyB8PSBBX0NPTE9SOworCX0KKyNlbmRpZgorCVNQLT5feG1jX3N1cHByZXNzID0gU1AtPl94bWNfdHJpZ2dlcnMgJiAoY2h0eXBlKSB+KEFfQk9MRCk7CisKKwlUKCgibWFnaWMgY29va2llIGF0dHJpYnV0ZXMgJXMiLCBfdHJhY2VhdHRyKFNQLT5feG1jX3N1cHByZXNzKSkpOworCS8qCisJICogU3VwcG9ydGluZyBsaW5lLWRyYXdpbmcgbWF5IGJlIHBvc3NpYmxlLiAgQnV0IG1ha2UgdGhlIHJlZ3VsYXIKKwkgKiB2aWRlbyBhdHRyaWJ1dGVzIHdvcmsgZmlyc3QuCisJICovCisJYWNzX2NoYXJzID0gQUJTRU5UX1NUUklORzsKKwllbmFfYWNzID0gQUJTRU5UX1NUUklORzsKKwllbnRlcl9hbHRfY2hhcnNldF9tb2RlID0gQUJTRU5UX1NUUklORzsKKwlleGl0X2FsdF9jaGFyc2V0X21vZGUgPSBBQlNFTlRfU1RSSU5HOworI2lmIFVTRV9YTUNfU1VQUE9SVAorCS8qCisJICogVG8ga2VlcCB0aGUgY29va2llIHN1cHBvcnQgc2ltcGxlLCBzdXBwcmVzcyBhbGwgb2YgdGhlIG9wdGltaXphdGlvbgorCSAqIGhvb2tzIGV4Y2VwdCBmb3IgY2xlYXJfc2NyZWVuIGFuZCB0aGUgY3Vyc29yIGFkZHJlc3NpbmcuCisJICovCisJaWYgKHN1cHBvcnRfY29va2llcykgeworCSAgICBjbHJfZW9sID0gQUJTRU5UX1NUUklORzsKKwkgICAgY2xyX2VvcyA9IEFCU0VOVF9TVFJJTkc7CisJICAgIHNldF9hdHRyaWJ1dGVzID0gQUJTRU5UX1NUUklORzsKKwl9CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPT0gMCkgewkvKiBocHRlcm0gKi8KKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIG1hZ2ljIGNvb2tpZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIGNhbmNlbCB0aGUgc3RyaW5ncyB0aGF0IHNldAorICAgICAqIHZpZGVvIGF0dHJpYnV0ZXMuCisgICAgICovCisgICAgaWYgKCFzdXBwb3J0X2Nvb2tpZXMgJiYgbWFnaWNfY29va2llX2dsaXRjaCA+PSAwKSB7CisJbWFnaWNfY29va2llX2dsaXRjaCA9IEFCU0VOVF9OVU1FUklDOworCXNldF9hdHRyaWJ1dGVzID0gQUJTRU5UX1NUUklORzsKKwllbnRlcl9ibGlua19tb2RlID0gQUJTRU5UX1NUUklORzsKKwllbnRlcl9ib2xkX21vZGUgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX2RpbV9tb2RlID0gQUJTRU5UX1NUUklORzsKKwllbnRlcl9yZXZlcnNlX21vZGUgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX3N0YW5kb3V0X21vZGUgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX3VuZGVybGluZV9tb2RlID0gQUJTRU5UX1NUUklORzsKKyAgICB9CisKKyAgICAvKiBpbml0aWFsaXplIG5vcm1hbCBhY3MgYmVmb3JlIHdpZGUsIHNpbmNlIHdlIHVzZSBtYXBwaW5nIGluIHRoZSBsYXR0ZXIgKi8KKyNpZiAhVVNFX1dJREVDX1NVUFBPUlQKKyAgICBpZiAoX25jX3VuaWNvZGVfbG9jYWxlKCkgJiYgX25jX2xvY2FsZV9icmVha3NfYWNzKGN1cl90ZXJtKSkgeworCWFjc19jaGFycyA9IE5VTEw7CisJZW5hX2FjcyA9IE5VTEw7CisJZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSA9IE5VTEw7CisJZXhpdF9hbHRfY2hhcnNldF9tb2RlID0gTlVMTDsKKwlzZXRfYXR0cmlidXRlcyA9IE5VTEw7CisgICAgfQorI2VuZGlmCisgICAgX25jX2luaXRfYWNzKCk7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICBfbmNfaW5pdF93YWNzKCk7CisKKyAgICBTUC0+X3NjcmVlbl9hY3NfZml4ID0gKF9uY191bmljb2RlX2xvY2FsZSgpCisJCQkgICAmJiBfbmNfbG9jYWxlX2JyZWFrc19hY3MoY3VyX3Rlcm0pKTsKKyNlbmRpZgorICAgIGVudiA9IF9uY19nZXRfbG9jYWxlKCk7CisgICAgU1AtPl9sZWdhY3lfY29kaW5nID0gKChlbnYgPT0gMCkKKwkJCSAgfHwgIXN0cmNtcChlbnYsICJDIikKKwkJCSAgfHwgIXN0cmNtcChlbnYsICJQT1NJWCIpKTsKKyAgICBUKCgibGVnYWN5LWNvZGluZyAlZCIsIFNQLT5fbGVnYWN5X2NvZGluZykpOworCisgICAgX25jX2lkY29rID0gVFJVRTsKKyAgICBfbmNfaWRsb2sgPSBGQUxTRTsKKworICAgIFNQLT5vbGRoYXNoID0gMDsKKyAgICBTUC0+bmV3aGFzaCA9IDA7CisKKyAgICBUKCgiY3JlYXRpbmcgbmV3c2NyIikpOworICAgIGlmICgoU1AtPl9uZXdzY3IgPSBuZXd3aW4oc2xpbmVzLCBzY29sdW1ucywgMCwgMCkpID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgVCgoImNyZWF0aW5nIGN1cnNjciIpKTsKKyAgICBpZiAoKFNQLT5fY3Vyc2NyID0gbmV3d2luKHNsaW5lcywgc2NvbHVtbnMsIDAsIDApKSA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworI2lmICFVU0VfUkVFTlRSQU5UCisgICAgbmV3c2NyID0gU1AtPl9uZXdzY3I7CisgICAgY3Vyc2NyID0gU1AtPl9jdXJzY3I7CisjZW5kaWYKKyNpZiBVU0VfU0laRUNIQU5HRQorICAgIFNQLT5fcmVzaXplID0gcmVzaXpldGVybTsKKyNlbmRpZgorCisgICAgbmV3c2NyLT5fY2xlYXIgPSBUUlVFOworICAgIGN1cnNjci0+X2NsZWFyID0gRkFMU0U7CisKKyAgICBkZWZfc2hlbGxfbW9kZSgpOworICAgIGRlZl9wcm9nX21vZGUoKTsKKworICAgIGZvciAocm9wID0gcmlwb2ZmX3N0YWNrOworCSByb3AgIT0gcmlwb2ZmX3NwICYmIChyb3AgLSByaXBvZmZfc3RhY2spIDwgTl9SSVBTOworCSByb3ArKykgeworCisJLyogSWYgd2UgbXVzdCBzaW11bGF0ZSBzb2Z0IGxhYmVscywgZ3JhYiBvZmYgdGhlIGxpbmUgdG8gYmUgdXNlZC4KKwkgICBXZSBhc3N1bWUgdGhhdCB3ZSBtdXN0IHNpbXVsYXRlLCBpZiBpdCBpcyBub25lIG9mIHRoZSBzdGFuZGFyZAorCSAgIGZvcm1hdHMgKDQtNCBvciAzLTItMykgZm9yIHdoaWNoIHRoZXJlIG1heSBiZSBzb21lIGhhcmR3YXJlCisJICAgc3VwcG9ydC4gKi8KKwlpZiAocm9wLT5ob29rID09IF9uY19zbGtfaW5pdGlhbGl6ZSkKKwkgICAgaWYgKCEobnVtX2xhYmVscyA8PSAwIHx8ICFTTEtfU1RERk1UKHNsa19mb3JtYXQpKSkKKwkJY29udGludWU7CisJaWYgKHJvcC0+aG9vaykgeworCSAgICBpbnQgY291bnQ7CisJICAgIFdJTkRPVyAqdzsKKworCSAgICBjb3VudCA9IChyb3AtPmxpbmUgPCAwKSA/IC1yb3AtPmxpbmUgOiByb3AtPmxpbmU7CisJICAgIFQoKCJyaXBwaW5nIG9mZiAlaSBsaW5lcyBhdCAlcyIsIGNvdW50LAorCSAgICAgICAoKHJvcC0+bGluZSA8IDApCisJCT8gImJvdHRvbSIKKwkJOiAidG9wIikpKTsKKworCSAgICB3ID0gbmV3d2luKGNvdW50LCBzY29sdW1ucywKKwkJICAgICAgICgocm9wLT5saW5lIDwgMCkKKwkJCT8gU1AtPl9saW5lc19hdmFpbCAtIGNvdW50CisJCQk6IDApLAorCQkgICAgICAgMCk7CisJICAgIGlmICh3KSB7CisJCXJvcC0+d2luID0gdzsKKwkJcm9wLT5ob29rKHcsIHNjb2x1bW5zKTsKKwkgICAgfSBlbHNlIHsKKwkJcmV0dXJuQ29kZShFUlIpOworCSAgICB9CisJICAgIGlmIChyb3AtPmxpbmUgPCAwKQorCQlib3R0b21fc3RvbGVuICs9IGNvdW50OworCSAgICBlbHNlCisJCVNQLT5fdG9wc3RvbGVuICs9IGNvdW50OworCSAgICBTUC0+X2xpbmVzX2F2YWlsIC09IGNvdW50OworCX0KKyAgICB9CisgICAgLyogcmVzZXQgdGhlIHN0YWNrICovCisgICAgcmlwb2ZmX3NwID0gcmlwb2ZmX3N0YWNrOworCisgICAgVCgoImNyZWF0aW5nIHN0ZHNjciIpKTsKKyAgICBhc3NlcnQoKFNQLT5fbGluZXNfYXZhaWwgKyBTUC0+X3RvcHN0b2xlbiArIGJvdHRvbV9zdG9sZW4pID09IHNsaW5lcyk7CisgICAgaWYgKChTUC0+X3N0ZHNjciA9IG5ld3dpbihTUC0+X2xpbmVzX2F2YWlsLCBzY29sdW1ucywgMCwgMCkpID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgU0VUX0xJTkVTKFNQLT5fbGluZXNfYXZhaWwpOworI2lmICFVU0VfUkVFTlRSQU5UCisgICAgc3Rkc2NyID0gU1AtPl9zdGRzY3I7CisjZW5kaWYKKworICAgIHJldHVybkNvZGUoT0spOworfQorCisvKgorICogVGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGludGVycHJldHMgbGluZSBhcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHJpcAorICogb2ZmIGZyb20gdGhlIHRvcCBvciBib3R0b20uCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yaXBvZmZsaW5lKGludCBsaW5lLCBpbnQgKCppbml0KSAoV0lORE9XICosIGludCkpCit7CisgICAgVCgoVF9DQUxMRUQoIl9uY19yaXBvZmZsaW5lKCVkLCAlcCkiKSwgbGluZSwgaW5pdCkpOworCisgICAgaWYgKGxpbmUgIT0gMCkgeworCisJaWYgKHJpcG9mZl9zcCA9PSAwKQorCSAgICByaXBvZmZfc3AgPSByaXBvZmZfc3RhY2s7CisJaWYgKHJpcG9mZl9zcCA+PSByaXBvZmZfc3RhY2sgKyBOX1JJUFMpCisJICAgIHJldHVybkNvZGUoRVJSKTsKKworCXJpcG9mZl9zcC0+bGluZSA9IGxpbmU7CisJcmlwb2ZmX3NwLT5ob29rID0gaW5pdDsKKwlyaXBvZmZfc3ArKzsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcmlwb2ZmbGluZShpbnQgbGluZSwgaW50ICgqaW5pdCkgKFdJTkRPVyAqLCBpbnQpKQoreworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoInJpcG9mZmxpbmUoJWQsJXApIiksIGxpbmUsIGluaXQpKTsKKworICAgIGlmIChsaW5lID09IDApCisJcmV0dXJuQ29kZShPSyk7CisKKyAgICByZXR1cm5Db2RlKF9uY19yaXBvZmZsaW5lKChsaW5lIDwgMCkgPyAtMSA6IDEsIGluaXQpKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2xrLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MmY3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsay5jCkBAIC0wLDAgKzEsMTkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgIEdlcmhhcmQgRnVlcm5rcmFueiAgICAgICAgICAgICAgICAgICAgICAxOTkzIChvcmlnaW5hbCkgICAgICAgICAqCisgKiAgICAgICAgICBaZXlkIE0uIEJlbi1IYWxpbSAgICAgICAgICAgICAgICAgICAgICAgMTk5MiwxOTk1IChzaWMpICAgICAgICAgKgorICogICAgICAgICAgRXJpYyBTLiBSYXltb25kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgIEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBudW1fbGFiZWxzLCBsYWJlbF8qLCBwbGFiX25vcm0gKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGsuYyx2IDEuMzUgMjAwOC8wOS8yNyAxNDowNzozMyBqdWVyZ2VuIEV4cCAkIikKKworLyoKKyAqIEZyZWUgYW55IG1lbW9yeSByZWxhdGVkIHRvIHNvZnQgbGFiZWxzLCByZXR1cm4gYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3Nsa19mYWlsZWQodm9pZCkKK3sKKyAgICBpZiAoU1AtPl9zbGspIHsKKwlGcmVlSWZOZWVkZWQoU1AtPl9zbGstPmVudCk7CisJZnJlZShTUC0+X3Nsayk7CisJU1AtPl9zbGsgPSAoU0xLICopIDA7CisgICAgfQorICAgIHJldHVybiBFUlI7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNvZnQgbGFiZWxzLgorICogQ2FsbGVkIGZyb20gbmV3dGVybSgpCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19zbGtfaW5pdGlhbGl6ZShXSU5ET1cgKnN0d2luLCBpbnQgY29scykKK3sKKyAgICBpbnQgaSwgeDsKKyAgICBpbnQgcmVzID0gT0s7CisgICAgdW5zaWduZWQgbWF4X2xlbmd0aDsKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfc2xrX2luaXRpYWxpemUoKSIpKSk7CisKKyAgICBpZiAoU1AtPl9zbGspIHsJCS8qIHdlIGRpZCB0aGlzIGFscmVhZHksIHNvIHNpbXBseSByZXR1cm4gKi8KKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UgaWYgKChTUC0+X3NsayA9IHR5cGVDYWxsb2MoU0xLLCAxKSkgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBTUC0+X3Nsay0+ZW50ID0gTlVMTDsKKworICAgIC8qCisgICAgICogSWYgd2UgdXNlIGNvbG9ycywgdmlkcHV0cygpIHdpbGwgc3VwcHJlc3MgdmlkZW8gYXR0cmlidXRlcyB0aGF0IGNvbmZsaWN0CisgICAgICogd2l0aCBjb2xvcnMuICBJbiB0aGF0IGNhc2UsIHdlJ3JlIHN0aWxsIGd1YXJhbnRlZWQgdGhhdCAicmV2ZXJzZSIgd291bGQKKyAgICAgKiB3b3JrLgorICAgICAqLworICAgIGlmICgobm9fY29sb3JfdmlkZW8gJiAxKSA9PSAwKQorCVNldEF0dHIoU1AtPl9zbGstPmF0dHIsIEFfU1RBTkRPVVQpOworICAgIGVsc2UKKwlTZXRBdHRyKFNQLT5fc2xrLT5hdHRyLCBBX1JFVkVSU0UpOworCisgICAgU1AtPl9zbGstPm1heGxhYiA9ICgobnVtX2xhYmVscyA+IDApCisJCQk/IG51bV9sYWJlbHMKKwkJCTogTUFYX1NLRVkoX25jX2dsb2JhbHMuc2xrX2Zvcm1hdCkpOworICAgIFNQLT5fc2xrLT5tYXhsZW4gPSAoKG51bV9sYWJlbHMgPiAwKQorCQkJPyBsYWJlbF93aWR0aCAqIGxhYmVsX2hlaWdodAorCQkJOiBNQVhfU0tFWV9MRU4oX25jX2dsb2JhbHMuc2xrX2Zvcm1hdCkpOworICAgIFNQLT5fc2xrLT5sYWJjbnQgPSAoKFNQLT5fc2xrLT5tYXhsYWIgPCBNQVhfU0tFWShfbmNfZ2xvYmFscy5zbGtfZm9ybWF0KSkKKwkJCT8gTUFYX1NLRVkoX25jX2dsb2JhbHMuc2xrX2Zvcm1hdCkKKwkJCTogU1AtPl9zbGstPm1heGxhYik7CisKKyAgICBpZiAoU1AtPl9zbGstPm1heGxlbiA8PSAwCisJfHwgU1AtPl9zbGstPmxhYmNudCA8PSAwCisJfHwgKFNQLT5fc2xrLT5lbnQgPSB0eXBlQ2FsbG9jKHNsa19lbnQsCisJCQkJICAgICAgICh1bnNpZ25lZCkgU1AtPl9zbGstPmxhYmNudCkpID09IE5VTEwpCisJcmV0dXJuQ29kZShzbGtfZmFpbGVkKCkpOworCisgICAgbWF4X2xlbmd0aCA9IFNQLT5fc2xrLT5tYXhsZW47CisgICAgZm9yIChpID0gMDsgaSA8IFNQLT5fc2xrLT5sYWJjbnQ7IGkrKykgeworCXNpemVfdCB1c2VkID0gbWF4X2xlbmd0aCArIDE7CisKKwlpZiAoKFNQLT5fc2xrLT5lbnRbaV0uZW50X3RleHQgPSAoY2hhciAqKSBfbmNfZG9hbGxvYygwLCB1c2VkKSkgPT0gMCkKKwkgICAgcmV0dXJuQ29kZShzbGtfZmFpbGVkKCkpOworCW1lbXNldChTUC0+X3Nsay0+ZW50W2ldLmVudF90ZXh0LCAwLCB1c2VkKTsKKworCWlmICgoU1AtPl9zbGstPmVudFtpXS5mb3JtX3RleHQgPSAoY2hhciAqKSBfbmNfZG9hbGxvYygwLCB1c2VkKSkgPT0gMCkKKwkgICAgcmV0dXJuQ29kZShzbGtfZmFpbGVkKCkpOworCW1lbXNldChTUC0+X3Nsay0+ZW50W2ldLmZvcm1fdGV4dCwgMCwgdXNlZCk7CisKKwltZW1zZXQoU1AtPl9zbGstPmVudFtpXS5mb3JtX3RleHQsICcgJywgbWF4X2xlbmd0aCk7CisJU1AtPl9zbGstPmVudFtpXS52aXNpYmxlID0gKGNoYXIpIChpIDwgU1AtPl9zbGstPm1heGxhYik7CisgICAgfQorICAgIGlmIChfbmNfZ2xvYmFscy5zbGtfZm9ybWF0ID49IDMpIHsJLyogUEMgc3R5bGUgKi8KKwlpbnQgZ2FwID0gKGNvbHMgLSAzICogKDMgKyA0ICogbWF4X2xlbmd0aCkpIC8gMjsKKworCWlmIChnYXAgPCAxKQorCSAgICBnYXAgPSAxOworCisJZm9yIChpID0geCA9IDA7IGkgPCBTUC0+X3Nsay0+bWF4bGFiOyBpKyspIHsKKwkgICAgU1AtPl9zbGstPmVudFtpXS5lbnRfeCA9IHg7CisJICAgIHggKz0gbWF4X2xlbmd0aDsKKwkgICAgeCArPSAoaSA9PSAzIHx8IGkgPT0gNykgPyBnYXAgOiAxOworCX0KKyAgICB9IGVsc2UgeworCWlmIChfbmNfZ2xvYmFscy5zbGtfZm9ybWF0ID09IDIpIHsJLyogNC00ICovCisJICAgIGludCBnYXAgPSBjb2xzIC0gKFNQLT5fc2xrLT5tYXhsYWIgKiBtYXhfbGVuZ3RoKSAtIDY7CisKKwkgICAgaWYgKGdhcCA8IDEpCisJCWdhcCA9IDE7CisJICAgIGZvciAoaSA9IHggPSAwOyBpIDwgU1AtPl9zbGstPm1heGxhYjsgaSsrKSB7CisJCVNQLT5fc2xrLT5lbnRbaV0uZW50X3ggPSB4OworCQl4ICs9IG1heF9sZW5ndGg7CisJCXggKz0gKGkgPT0gMykgPyBnYXAgOiAxOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYgKF9uY19nbG9iYWxzLnNsa19mb3JtYXQgPT0gMSkgewkvKiAxIC0+IDMtMi0zICovCisJCWludCBnYXAgPSAoY29scyAtIChTUC0+X3Nsay0+bWF4bGFiICogbWF4X2xlbmd0aCkgLSA1KQorCQkvIDI7CisKKwkJaWYgKGdhcCA8IDEpCisJCSAgICBnYXAgPSAxOworCQlmb3IgKGkgPSB4ID0gMDsgaSA8IFNQLT5fc2xrLT5tYXhsYWI7IGkrKykgeworCQkgICAgU1AtPl9zbGstPmVudFtpXS5lbnRfeCA9IHg7CisJCSAgICB4ICs9IG1heF9sZW5ndGg7CisJCSAgICB4ICs9IChpID09IDIgfHwgaSA9PSA0KSA/IGdhcCA6IDE7CisJCX0KKwkgICAgfSBlbHNlCisJCXJldHVybkNvZGUoc2xrX2ZhaWxlZCgpKTsKKwl9CisgICAgfQorICAgIFNQLT5fc2xrLT5kaXJ0eSA9IFRSVUU7CisgICAgaWYgKChTUC0+X3Nsay0+d2luID0gc3R3aW4pID09IE5VTEwpIHsKKwlyZXR1cm5Db2RlKHNsa19mYWlsZWQoKSk7CisgICAgfQorCisgICAgLyogV2Ugbm93IHJlc2V0IHRoZSBmb3JtYXQgc28gdGhhdCB0aGUgbmV4dCBuZXd0ZXJtIGhhcyBhZ2FpbgorICAgICAqIHBlciBkZWZhdWx0IG5vIFNMSyBrZXlzIGFuZCBtYXkgY2FsbCBzbGtfaW5pdCBhZ2FpbiB0bworICAgICAqIGRlZmluZSBhIG5ldyBsYXlvdXQuIChqdWVyZ2VuIDAzLU1hci0xOTk5KQorICAgICAqLworICAgIFNQLT5zbGtfZm9ybWF0ID0gX25jX2dsb2JhbHMuc2xrX2Zvcm1hdDsKKyAgICBfbmNfZ2xvYmFscy5zbGtfZm9ybWF0ID0gMDsKKyAgICByZXR1cm5Db2RlKHJlcyk7Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSBzb2Z0IGxhYmVscyBvbiB0aGUgc2NyZWVuLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzbGtfcmVzdG9yZSh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfcmVzdG9yZSgpIikpKTsKKworICAgIGlmIChTUC0+X3NsayA9PSBOVUxMKQorCXJldHVybiAoRVJSKTsKKyAgICBTUC0+X3Nsay0+aGlkZGVuID0gRkFMU0U7CisgICAgU1AtPl9zbGstPmRpcnR5ID0gVFJVRTsKKworICAgIHJldHVybkNvZGUoc2xrX3JlZnJlc2goKSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cl9zZXQuYyBiL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzYxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cl9zZXQuYwpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6ICBUaG9tYXMgRS4gRGlja2V5IDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGthdHJfc2V0LmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICoJU2V0IHRoZSBsYWJlbCdzIGF0dHJpYnV0ZXMKKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrYXRyX3NldC5jLHYgMS4xMCAyMDA1LzAxLzI4IDIxOjExOjUzIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19hdHRyX3NldChjb25zdCBhdHRyX3QgYXR0ciwgc2hvcnQgY29sb3JfcGFpcl9udW1iZXIsIHZvaWQgKm9wdHMpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19hdHRyX3NldCglcywlZCkiKSwgX3RyYWNlYXR0cihhdHRyKSwgY29sb3JfcGFpcl9udW1iZXIpKTsKKworICAgIGlmIChTUCAhPSAwICYmIFNQLT5fc2xrICE9IDAgJiYgIW9wdHMgJiYKKwljb2xvcl9wYWlyX251bWJlciA+PSAwICYmIGNvbG9yX3BhaXJfbnVtYmVyIDwgQ09MT1JfUEFJUlMpIHsKKwlUUihUUkFDRV9BVFRSUywgKCIuLi4gY3VycmVudCAlcyIsIF90cmFjZWNoX3QoQ0hSRUYoU1AtPl9zbGstPmF0dHIpKSkpOworCVNldEF0dHIoU1AtPl9zbGstPmF0dHIsIGF0dHIpOworCWlmIChjb2xvcl9wYWlyX251bWJlciA+IDApIHsKKwkgICAgU2V0UGFpcihTUC0+X3Nsay0+YXR0ciwgY29sb3JfcGFpcl9udW1iZXIpOworCX0KKwlUUihUUkFDRV9BVFRSUywgKCJuZXcgYXR0cmlidXRlIGlzICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvZi5jIGIvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cm9mLmMKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiAgVGhvbWFzIEUuIERpY2tleSAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrYXRyb2YuYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKiAgICAgIFN3aXRjaCBvZmYgbGFiZWxzIGF0dHJpYnV0ZXMKKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrYXRyb2YuYyx2IDEuOCAyMDA1LzAxLzA4IDIzOjAxOjMyIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19hdHRyb2ZmKGNvbnN0IGNodHlwZSBhdHRyKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfYXR0cm9mZiglcykiKSwgX3RyYWNlYXR0cihhdHRyKSkpOworCisgICAgaWYgKFNQICE9IDAgJiYgU1AtPl9zbGsgIT0gMCkgeworCVRSKFRSQUNFX0FUVFJTLCAoIi4uLiBjdXJyZW50ICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJUmVtQXR0cihTUC0+X3Nsay0+YXR0ciwgYXR0cik7CisJaWYgKChhdHRyICYgQV9DT0xPUikgIT0gMCkgeworCSAgICBTZXRQYWlyKFNQLT5fc2xrLT5hdHRyLCAwKTsKKwl9CisJVFIoVFJBQ0VfQVRUUlMsICgibmV3IGF0dHJpYnV0ZSBpcyAlcyIsIF90cmFjZWNoX3QoQ0hSRUYoU1AtPl9zbGstPmF0dHIpKSkpOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyb24uYyBiL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFkZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvbi5jCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogIFRob21hcyBFLiBEaWNrZXkgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa2F0cm9uLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBTd2l0Y2ggb24gbGFiZWxzIGF0dHJpYnV0ZXMKKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrYXRyb24uYyx2IDEuOCAyMDA1LzAxLzA4IDIzOjAyOjAxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19hdHRyb24oY29uc3QgY2h0eXBlIGF0dHIpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19hdHRyb24oJXMpIiksIF90cmFjZWF0dHIoYXR0cikpKTsKKworICAgIGlmIChTUCAhPSAwICYmIFNQLT5fc2xrICE9IDApIHsKKwlUUihUUkFDRV9BVFRSUywgKCIuLi4gY3VycmVudCAlcyIsIF90cmFjZWNoX3QoQ0hSRUYoU1AtPl9zbGstPmF0dHIpKSkpOworCUFkZEF0dHIoU1AtPl9zbGstPmF0dHIsIGF0dHIpOworCWlmICgoYXR0ciAmIEFfQ09MT1IpICE9IDApIHsKKwkgICAgU2V0UGFpcihTUC0+X3Nsay0+YXR0ciwgUEFJUl9OVU1CRVIoYXR0cikpOworCX0KKwlUUihUUkFDRV9BVFRSUywgKCJuZXcgYXR0cmlidXRlIGlzICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJzZXQuYyBiL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhOTk4MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyc2V0LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiAgVGhvbWFzIEUuIERpY2tleSAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrYXRyc2V0LmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBTZXQgdGhlIGxhYmVscyBhdHRyaWJ1dGVzCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa2F0cnNldC5jLHYgMS43IDIwMDUvMDEvMDggMjE6NDY6NDcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX2F0dHJzZXQoY29uc3QgY2h0eXBlIGF0dHIpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19hdHRyc2V0KCVzKSIpLCBfdHJhY2VhdHRyKGF0dHIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBTUC0+X3NsayAhPSAwKSB7CisJU2V0QXR0cihTUC0+X3Nsay0+YXR0ciwgYXR0cik7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHRyLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTgyZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHRyLmMKQEAgLTAsMCArMSw1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiAgVGhvbWFzIEUuIERpY2tleSAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrYXR0ci5jCisgKglTb2Z0IGtleSByb3V0aW5lcy4KKyAqICAgICAgRmV0Y2ggdGhlIGxhYmVscyBhdHRyaWJ1dGVzCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa2F0dHIuYyx2IDEuNiAyMDA1LzAxLzA4IDIxOjQ0OjI4IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGF0dHJfdCkKK3Nsa19hdHRyKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19hdHRyKCkiKSkpOworCisgICAgaWYgKFNQICE9IDAgJiYgU1AtPl9zbGsgIT0gMCkgeworCWF0dHJfdCByZXN1bHQgPSBBdHRyT2YoU1AtPl9zbGstPmF0dHIpICYgQUxMX0JVVF9DT0xPUjsKKwlpbnQgcGFpciA9IEdldFBhaXIoU1AtPl9zbGstPmF0dHIpOworCisJcmVzdWx0IHw9IENPTE9SX1BBSVIocGFpcik7CisJcmV0dXJuQXR0cihyZXN1bHQpOworICAgIH0gZWxzZQorCXJldHVybkF0dHIoMCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2NsZWFyLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2NsZWFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2Y2VlYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfc2xrY2xlYXIuYwpAQCAtMCwwICsxLDY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni0xOTk5ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa2NsZWFyLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBSZW1vdmUgc29mdCBsYWJlbHMgZnJvbSB0aGUgc2NyZWVuLgorICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGtjbGVhci5jLHYgMS4xMCAyMDA3LzEyLzI5IDE3OjUxOjQ3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19jbGVhcih2b2lkKQoreworICAgIGludCByYyA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJzbGtfY2xlYXIoKSIpKSk7CisKKyAgICBpZiAoU1AgIT0gTlVMTCAmJiBTUC0+X3NsayAhPSBOVUxMKSB7CisJU1AtPl9zbGstPmhpZGRlbiA9IFRSVUU7CisJLyogRm9yIHNpbXVsYXRlZCBTTEsncyBpdCBsb29rcyBtdWNoIG1vcmUgbmF0dXJhbCB0bworCSAgIGluaGVyaXQgdGhvc2UgYXR0cmlidXRlcyBmcm9tIHRoZSBzdGFuZGFyZCBzY3JlZW4gKi8KKwlTUC0+X3Nsay0+d2luLT5fbmNfYmtnZCA9IHN0ZHNjci0+X25jX2JrZ2Q7CisJV0lORE9XX0FUVFJTKFNQLT5fc2xrLT53aW4pID0gV0lORE9XX0FUVFJTKHN0ZHNjcik7CisJaWYgKFNQLT5fc2xrLT53aW4gPT0gc3Rkc2NyKSB7CisJICAgIHJjID0gT0s7CisJfSBlbHNlIHsKKwkgICAgd2VyYXNlKFNQLT5fc2xrLT53aW4pOworCSAgICByYyA9IHdyZWZyZXNoKFNQLT5fc2xrLT53aW4pOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShyYyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2NvbG9yLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2NvbG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3N2I2NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfc2xrY29sb3IuYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6ICBUaG9tYXMgRS4gRGlja2V5IDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGtjb2xvci5jCisgKglTb2Z0IGtleSByb3V0aW5lcy4KKyAqCVNldCB0aGUgbGFiZWwncyBjb2xvcgorICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGtjb2xvci5jLHYgMS4xMiAyMDA1LzAxLzI4IDIxOjExOjUzIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19jb2xvcihzaG9ydCBjb2xvcl9wYWlyX251bWJlcikKK3sKKyAgICBUKChUX0NBTExFRCgic2xrX2NvbG9yKCVkKSIpLCBjb2xvcl9wYWlyX251bWJlcikpOworCisgICAgaWYgKFNQICE9IDAgJiYgU1AtPl9zbGsgIT0gMCAmJgorCWNvbG9yX3BhaXJfbnVtYmVyID49IDAgJiYgY29sb3JfcGFpcl9udW1iZXIgPCBDT0xPUl9QQUlSUykgeworCVRSKFRSQUNFX0FUVFJTLCAoIi4uLiBjdXJyZW50IGlzICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJU2V0UGFpcihTUC0+X3Nsay0+YXR0ciwgY29sb3JfcGFpcl9udW1iZXIpOworCVRSKFRSQUNFX0FUVFJTLCAoIm5ldyBhdHRyaWJ1dGUgaXMgJXMiLCBfdHJhY2VjaF90KENIUkVGKFNQLT5fc2xrLT5hdHRyKSkpKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2luaXQuYyBiL25jdXJzZXMvYmFzZS9saWJfc2xraW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDAxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2luaXQuYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xraW5pdC5jCisgKglTb2Z0IGtleSByb3V0aW5lcy4KKyAqICAgICAgSW5pdGlhbGl6ZSBzb2Z0IGxhYmVscy4gIENhbGxlZCBieSB0aGUgdXNlciBiZWZvcmUgaW5pdHNjcigpLgorICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGtpbml0LmMsdiAxLjcgMjAwOC8wMS8xMiAyMDoyMzozOSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzbGtfaW5pdChpbnQgZm9ybWF0KQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoInNsa19pbml0KCVkKSIpLCBmb3JtYXQpKTsKKyAgICBpZiAoZm9ybWF0ID49IDAgJiYgZm9ybWF0IDw9IDMgJiYgIV9uY19nbG9iYWxzLnNsa19mb3JtYXQpIHsKKwlfbmNfZ2xvYmFscy5zbGtfZm9ybWF0ID0gMSArIGZvcm1hdDsKKwljb2RlID0gX25jX3JpcG9mZmxpbmUoLVNMS19MSU5FUyhfbmNfZ2xvYmFscy5zbGtfZm9ybWF0KSwgX25jX3Nsa19pbml0aWFsaXplKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2xrbGFiLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2xhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmI0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2xhYi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa2xhYi5jCisgKglTb2Z0IGtleSByb3V0aW5lcy4KKyAqICAgICAgRmV0Y2ggdGhlIGxhYmVsIHRleHQuCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa2xhYi5jLHYgMS43IDIwMDMvMDMvMjkgMjI6NTM6NDggdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorc2xrX2xhYmVsKGludCBuKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfbGFiZWwoJWQpIiksIG4pKTsKKworICAgIGlmIChTUCA9PSBOVUxMIHx8IFNQLT5fc2xrID09IE5VTEwgfHwgbiA8IDEgfHwgbiA+IFNQLT5fc2xrLT5sYWJjbnQpCisJcmV0dXJuUHRyKDApOworICAgIHJldHVyblB0cihTUC0+X3Nsay0+ZW50W24gLSAxXS5lbnRfdGV4dCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3JlZnIuYyBiL25jdXJzZXMvYmFzZS9saWJfc2xrcmVmci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3JlZnIuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGtyZWZyLmMKKyAqCVdyaXRlIFNMSyB3aW5kb3cgdG8gdGhlICh2aXJ0dWFsKSBzY3JlZW4uCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIG51bV9sYWJlbHMsIGxhYmVsXyosIHBsYWJfbm9ybSAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa3JlZnIuYyx2IDEuMTcgMjAwOC8wOS8yNyAxNDowNzo1MyBqdWVyZ2VuIEV4cCAkIikKKworLyoKKyAqIFBhaW50IHRoZSBpbmZvIGxpbmUgZm9yIHRoZSBQQyBzdHlsZSBTTEsgZW11bGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorc2xrX3BhaW50X2luZm8oV0lORE9XICp3aW4pCit7CisgICAgU0NSRUVOICpzcCA9IF9uY19zY3JlZW5fb2Yod2luKTsKKworICAgIGlmICh3aW4gJiYgc3AgJiYgKHNwLT5zbGtfZm9ybWF0ID09IDQpKSB7CisJaW50IGk7CisKKwltdndobGluZSh3aW4sIDAsIDAsIDAsIGdldG1heHgod2luKSk7CisJd21vdmUod2luLCAwLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzcC0+X3Nsay0+bWF4bGFiOyBpKyspIHsKKwkgICAgbXZ3cHJpbnR3KHdpbiwgMCwgc3AtPl9zbGstPmVudFtpXS5lbnRfeCwgIkYlZCIsIGkgKyAxKTsKKwl9CisgICAgfQorfQorCisvKgorICogV3JpdGUgdGhlIHNvZnQgbGFiZWxzIHRvIHRoZSBzb2Z0LWtleSB3aW5kb3cuCisgKi8KK3N0YXRpYyB2b2lkCitzbGtfaW50ZXJuX3JlZnJlc2goU0xLICogc2xrKQoreworICAgIGludCBpOworICAgIGludCBmbXQgPSBTUC0+c2xrX2Zvcm1hdDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzbGstPmxhYmNudDsgaSsrKSB7CisJaWYgKHNsay0+ZGlydHkgfHwgc2xrLT5lbnRbaV0uZGlydHkpIHsKKwkgICAgaWYgKHNsay0+ZW50W2ldLnZpc2libGUpIHsKKwkJaWYgKG51bV9sYWJlbHMgPiAwICYmIFNMS19TVERGTVQoZm10KSkgeworCQkgICAgaWYgKGkgPCBudW1fbGFiZWxzKSB7CisJCQlUUFVUU19UUkFDRSgicGxhYl9ub3JtIik7CisJCQlwdXRwKFRQQVJNXzIocGxhYl9ub3JtLCBpICsgMSwgc2xrLT5lbnRbaV0uZm9ybV90ZXh0KSk7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBpZiAoZm10ID09IDQpCisJCQlzbGtfcGFpbnRfaW5mbyhzbGstPndpbik7CisJCSAgICB3bW92ZShzbGstPndpbiwgU0xLX0xJTkVTKGZtdCkgLSAxLCBzbGstPmVudFtpXS5lbnRfeCk7CisJCSAgICBpZiAoU1AtPl9zbGspIHsKKwkJCXdhdHRyc2V0KHNsay0+d2luLCBBdHRyT2YoU1AtPl9zbGstPmF0dHIpKTsKKwkJICAgIH0KKwkJICAgIHdhZGRzdHIoc2xrLT53aW4sIHNsay0+ZW50W2ldLmZvcm1fdGV4dCk7CisJCSAgICAvKiBpZiB3ZSBzaW11bGF0ZSBTTEsncywgaXQncyBsb29raW5nIG11Y2ggbW9yZQorCQkgICAgICAgbmF0dXJhbCB0byB1c2UgdGhlIGN1cnJlbnQgQVRUUklCVVRFIGFsc28KKwkJICAgICAgIGZvciB0aGUgbGFiZWwgd2luZG93ICovCisJCSAgICB3YXR0cnNldChzbGstPndpbiwgV0lORE9XX0FUVFJTKHN0ZHNjcikpOworCQl9CisJICAgIH0KKwkgICAgc2xrLT5lbnRbaV0uZGlydHkgPSBGQUxTRTsKKwl9CisgICAgfQorICAgIHNsay0+ZGlydHkgPSBGQUxTRTsKKworICAgIGlmIChudW1fbGFiZWxzID4gMCkgeworCWlmIChzbGstPmhpZGRlbikgeworCSAgICBUUFVUU19UUkFDRSgibGFiZWxfb2ZmIik7CisJICAgIHB1dHAobGFiZWxfb2ZmKTsKKwl9IGVsc2UgeworCSAgICBUUFVUU19UUkFDRSgibGFiZWxfb24iKTsKKwkgICAgcHV0cChsYWJlbF9vbik7CisJfQorICAgIH0KK30KKworLyoKKyAqIFJlZnJlc2ggdGhlIHNvZnQgbGFiZWxzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzbGtfbm91dHJlZnJlc2godm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgic2xrX25vdXRyZWZyZXNoKCkiKSkpOworCisgICAgaWYgKFNQID09IE5VTEwgfHwgU1AtPl9zbGsgPT0gTlVMTCkKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgaWYgKFNQLT5fc2xrLT5oaWRkZW4pCisJcmV0dXJuQ29kZShPSyk7CisgICAgc2xrX2ludGVybl9yZWZyZXNoKFNQLT5fc2xrKTsKKworICAgIHJldHVybkNvZGUod25vdXRyZWZyZXNoKFNQLT5fc2xrLT53aW4pKTsKK30KKworLyoKKyAqIFJlZnJlc2ggdGhlIHNvZnQgbGFiZWxzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzbGtfcmVmcmVzaCh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfcmVmcmVzaCgpIikpKTsKKworICAgIGlmIChTUCA9PSBOVUxMIHx8IFNQLT5fc2xrID09IE5VTEwpCisJcmV0dXJuQ29kZShFUlIpOworICAgIGlmIChTUC0+X3Nsay0+aGlkZGVuKQorCXJldHVybkNvZGUoT0spOworICAgIHNsa19pbnRlcm5fcmVmcmVzaChTUC0+X3Nsayk7CisKKyAgICByZXR1cm5Db2RlKHdyZWZyZXNoKFNQLT5fc2xrLT53aW4pKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2xrc2V0LmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOWY4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3NldC5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGtzZXQuYworICogICAgICBTZXQgc29mdCBsYWJlbCB0ZXh0LgorICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNpZiBIQVZFX1dDVFlQRV9ICisjaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYKKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa3NldC5jLHYgMS4xNyAyMDA3LzEwLzEzIDIwOjA4OjQ2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19zZXQoaW50IGksIGNvbnN0IGNoYXIgKmFzdHIsIGludCBmb3JtYXQpCit7CisgICAgU0xLICpzbGs7CisgICAgaW50IG9mZnNldDsKKyAgICBpbnQgbnVtY2hyczsKKyAgICBpbnQgbnVtY29sczsKKyAgICBpbnQgbGltaXQ7CisgICAgY29uc3QgY2hhciAqc3RyID0gYXN0cjsKKyAgICBjb25zdCBjaGFyICpwOworCisgICAgVCgoVF9DQUxMRUQoInNsa19zZXQoJWQsIFwiJXNcIiwgJWQpIiksIGksIHN0ciwgZm9ybWF0KSk7CisKKyAgICBpZiAoU1AgPT0gMAorCXx8IChzbGsgPSBTUC0+X3NsaykgPT0gMAorCXx8IGkgPCAxCisJfHwgaSA+IHNsay0+bGFiY250CisJfHwgZm9ybWF0IDwgMAorCXx8IGZvcm1hdCA+IDIpCisJcmV0dXJuQ29kZShFUlIpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKwlzdHIgPSAiIjsKKyAgICAtLWk7CQkJLyogQWRqdXN0IG51bWJlcmluZyBvZiBsYWJlbHMgKi8KKworICAgIGxpbWl0ID0gTUFYX1NLRVlfTEVOKFNQLT5zbGtfZm9ybWF0KTsKKyAgICB3aGlsZSAoaXNzcGFjZShVQ2hhcigqc3RyKSkpCisJc3RyKys7CQkJLyogc2tpcCBvdmVyIGxlYWRpbmcgc3BhY2VzICAqLworICAgIHAgPSBzdHI7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIG51bWNvbHMgPSAwOworICAgIHdoaWxlICgqcCAhPSAwKSB7CisJbWJzdGF0ZV90IHN0YXRlOworCXdjaGFyX3Qgd2M7CisJc2l6ZV90IG5lZWQ7CisKKwlpbml0X21iKHN0YXRlKTsKKwluZWVkID0gbWJydG93YygwLCBwLCBzdHJsZW4ocCksICZzdGF0ZSk7CisJaWYgKG5lZWQgPT0gKHNpemVfdCkgLTEpCisJICAgIGJyZWFrOworCW1icnRvd2MoJndjLCBwLCBuZWVkLCAmc3RhdGUpOworCWlmICghaXN3cHJpbnQoKHdpbnRfdCkgd2MpKQorCSAgICBicmVhazsKKwlpZiAod2N3aWR0aCh3YykgKyBudW1jb2xzID4gbGltaXQpCisJICAgIGJyZWFrOworCW51bWNvbHMgKz0gd2N3aWR0aCh3Yyk7CisJcCArPSBuZWVkOworICAgIH0KKyAgICBudW1jaHJzID0gKHAgLSBzdHIpOworI2Vsc2UKKyAgICB3aGlsZSAoaXNwcmludChVQ2hhcigqcCkpKQorCXArKzsJCQkvKiBUaGUgZmlyc3Qgbm9uLXByaW50IHN0b3BzICovCisKKyAgICBudW1jb2xzID0gKHAgLSBzdHIpOworICAgIGlmIChudW1jb2xzID4gbGltaXQpCisJbnVtY29scyA9IGxpbWl0OworICAgIG51bWNocnMgPSBudW1jb2xzOworI2VuZGlmCisKKyAgICBGcmVlSWZOZWVkZWQoc2xrLT5lbnRbaV0uZW50X3RleHQpOworICAgIGlmICgoc2xrLT5lbnRbaV0uZW50X3RleHQgPSBzdHJkdXAoc3RyKSkgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgc2xrLT5lbnRbaV0uZW50X3RleHRbbnVtY2hyc10gPSAnXDAnOworCisgICAgaWYgKChzbGstPmVudFtpXS5mb3JtX3RleHQgPSAoY2hhciAqKSBfbmNfZG9hbGxvYyhzbGstPmVudFtpXS5mb3JtX3RleHQsCisJCQkJCQkgICAgICAodW5zaWduZWQpIChsaW1pdCArCisJCQkJCQkJCSAgbnVtY2hycyArIDEpKQorCSkgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSAwOgkJCS8qIGxlZnQtanVzdGlmaWVkICovCisJb2Zmc2V0ID0gMDsKKwlicmVhazsKKyAgICBjYXNlIDE6CQkJLyogY2VudGVyZWQgKi8KKwlvZmZzZXQgPSAobGltaXQgLSBudW1jb2xzKSAvIDI7CisJYnJlYWs7CisgICAgY2FzZSAyOgkJCS8qIHJpZ2h0LWp1c3RpZmllZCAqLworCW9mZnNldCA9IGxpbWl0IC0gbnVtY29sczsKKwlicmVhazsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8PSAwKQorCW9mZnNldCA9IDA7CisgICAgZWxzZQorCW1lbXNldChzbGstPmVudFtpXS5mb3JtX3RleHQsICcgJywgKHVuc2lnbmVkKSBvZmZzZXQpOworCisgICAgbWVtY3B5KHNsay0+ZW50W2ldLmZvcm1fdGV4dCArIG9mZnNldCwKKwkgICBzbGstPmVudFtpXS5lbnRfdGV4dCwKKwkgICAodW5zaWduZWQpIG51bWNocnMpOworCisgICAgaWYgKG9mZnNldCA8IGxpbWl0KSB7CisJbWVtc2V0KHNsay0+ZW50W2ldLmZvcm1fdGV4dCArIG9mZnNldCArIG51bWNocnMsCisJICAgICAgICcgJywKKwkgICAgICAgKHVuc2lnbmVkKSAobGltaXQgLSAob2Zmc2V0ICsgbnVtY29scykpKTsKKyAgICB9CisKKyAgICBzbGstPmVudFtpXS5mb3JtX3RleHRbbnVtY2hycyAtIG51bWNvbHMgKyBsaW1pdF0gPSAwOworICAgIHNsay0+ZW50W2ldLmRpcnR5ID0gVFJVRTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfc2xrdG91Y2guYyBiL25jdXJzZXMvYmFzZS9saWJfc2xrdG91Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWI1ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl9zbGt0b3VjaC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa3RvdWNoLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBGb3JjZSB0aGUgY29kZSB0byBiZWxpZXZlIHRoYXQgdGhlIHNvZnQga2V5cyBoYXZlIGJlZW4gY2hhbmdlZC4KKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrdG91Y2guYyx2IDEuNSAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa190b3VjaCh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfdG91Y2goKSIpKSk7CisKKyAgICBpZiAoU1AgPT0gTlVMTCB8fCBTUC0+X3NsayA9PSBOVUxMKQorCXJldHVybkNvZGUoRVJSKTsKKyAgICBTUC0+X3Nsay0+ZGlydHkgPSBUUlVFOworCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3RvdWNoLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3RvdWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjMjFmMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfdG91Y2guYwpAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl90b3VjaC5jCisqKgorKioJICAgVGhlIHJvdXRpbmVzCXVudG91Y2h3aW4oKSwKKyoqCQkJd3RvdWNobG4oKSwKKyoqCQkJaXNfbGluZXRvdWNoZWQoKQorKioJCQlpc193aW50b3VjaGVkKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdG91Y2guYyx2IDEuOSAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGJvb2wpCitpc19saW5ldG91Y2hlZChXSU5ET1cgKndpbiwgaW50IGxpbmUpCit7CisgICAgVCgoVF9DQUxMRUQoImlzX2xpbmV0b3VjaGVkKCVwLCVkKSIpLCB3aW4sIGxpbmUpKTsKKworICAgIC8qIFhTSSBkb2Vzbid0IGRlZmluZSBhbnkgZXJyb3IgKi8KKyAgICBpZiAoIXdpbiB8fCAobGluZSA+IHdpbi0+X21heHkpIHx8IChsaW5lIDwgMCkpCisJcmV0dXJuQ29kZSgoYm9vbCkgRVJSKTsKKworICAgIHJldHVybkNvZGUod2luLT5fbGluZVtsaW5lXS5maXJzdGNoYXIgIT0gX05PQ0hBTkdFID8gVFJVRSA6IEZBTFNFKTsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2lzX3dpbnRvdWNoZWQoV0lORE9XICp3aW4pCit7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgiaXNfd2ludG91Y2hlZCglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luKQorCWZvciAoaSA9IDA7IGkgPD0gd2luLT5fbWF4eTsgaSsrKQorCSAgICBpZiAod2luLT5fbGluZVtpXS5maXJzdGNoYXIgIT0gX05PQ0hBTkdFKQorCQlyZXR1cm5Db2RlKFRSVUUpOworICAgIHJldHVybkNvZGUoRkFMU0UpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3dG91Y2hsbihXSU5ET1cgKndpbiwgaW50IHksIGludCBuLCBpbnQgY2hhbmdlZCkKK3sKKyAgICBpbnQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3dG91Y2hsbiglcCwlZCwlZCwlZCkiKSwgd2luLCB5LCBuLCBjaGFuZ2VkKSk7CisKKyAgICBpZiAoIXdpbiB8fCAobiA8IDApIHx8ICh5IDwgMCkgfHwgKHkgPiB3aW4tPl9tYXh5KSkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBmb3IgKGkgPSB5OyBpIDwgeSArIG47IGkrKykgeworCWlmIChpID4gd2luLT5fbWF4eSkKKwkgICAgYnJlYWs7CisJd2luLT5fbGluZVtpXS5maXJzdGNoYXIgPSBjaGFuZ2VkID8gMCA6IF9OT0NIQU5HRTsKKwl3aW4tPl9saW5lW2ldLmxhc3RjaGFyID0gY2hhbmdlZCA/IHdpbi0+X21heHggOiBfTk9DSEFOR0U7CisgICAgfQorICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl91bmdldGNoLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3VuZ2V0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQyZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl91bmdldGNoLmMKQEAgLTAsMCArMSw5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3VuZ2V0Y2guYworKioKKyoqCVRoZSByb3V0aW5lIHVuZ2V0Y2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl91bmdldGNoLmMsdiAxLjExIDIwMDgvMDUvMzEgMTY6NDQ6NTQgdG9tIEV4cCAkIikKKworI2luY2x1ZGUgPGZpZm9fZGVmcy5oPgorCisjaWZkZWYgVFJBQ0UKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfZmlmb19kdW1wKFNDUkVFTiAqc3ApCit7CisgICAgaW50IGk7CisgICAgVCgoImhlYWQgPSAlZCwgdGFpbCA9ICVkLCBwZWVrID0gJWQiLCBoZWFkLCB0YWlsLCBwZWVrKSk7CisgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJVCgoImNoYXIgJWQgPSAlcyIsIGksIF9uY190cmFjZWNoYXIoc3AsIHNwLT5fZmlmb1tpXSkpKTsKK30KKyNlbmRpZiAvKiBUUkFDRSAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfdW5nZXRjaChTQ1JFRU4gKnNwLCBpbnQgY2gpCit7CisgICAgaW50IHJjID0gRVJSOworCisgICAgaWYgKHRhaWwgIT0gLTEpIHsKKwlpZiAoaGVhZCA9PSAtMSkgeworCSAgICBoZWFkID0gMDsKKwkgICAgdF9pbmMoKTsKKwkgICAgcGVlayA9IHRhaWw7CS8qIG5vIHJhdyBrZXlzICovCisJfSBlbHNlCisJICAgIGhfZGVjKCk7CisKKwlzcC0+X2ZpZm9baGVhZF0gPSBjaDsKKwlUKCgidW5nZXRjaCAlcyBvayIsIF9uY190cmFjZWNoYXIoc3AsIGNoKSkpOworI2lmZGVmIFRSQUNFCisJaWYgKFVTRV9UUkFDRUYoVFJBQ0VfSUVWRU5UKSkgeworCSAgICBfbmNfZmlmb19kdW1wKHNwKTsKKwkgICAgX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKwl9CisjZW5kaWYKKwlyYyA9IE9LOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3VuZ2V0Y2goaW50IGNoKQoreworICAgIFQoKFRfQ0FMTEVEKCJ1bmdldGNoKCVzKSIpLCBfbmNfdHJhY2VjaGFyKFNQLCBjaCkpKTsKKyAgICByZXR1cm5Db2RlKF9uY191bmdldGNoKFNQLCBjaCkpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl92bGluZS5jIGIvbmN1cnNlcy9iYXNlL2xpYl92bGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjUzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3ZsaW5lLmMKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfdmxpbmUuYworKioKKyoqCVRoZSByb3V0aW5lIHd2bGluZSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3ZsaW5lLmMsdiAxLjEwIDIwMDYvMDMvMTEgMjE6NTI6MTkgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord3ZsaW5lKFdJTkRPVyAqd2luLCBjaHR5cGUgY2gsIGludCBuKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIE5DVVJTRVNfU0laRV9UIHJvdywgY29sOworICAgIE5DVVJTRVNfU0laRV9UIGVuZDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3dmxpbmUoJXAsJXMsJWQpIiksIHdpbiwgX3RyYWNlY2h0eXBlKGNoKSwgbikpOworCisgICAgaWYgKHdpbikgeworCU5DVVJTRVNfQ0hfVCB3Y2g7CisJcm93ID0gd2luLT5fY3VyeTsKKwljb2wgPSB3aW4tPl9jdXJ4OworCWVuZCA9IHJvdyArIG4gLSAxOworCWlmIChlbmQgPiB3aW4tPl9tYXh5KQorCSAgICBlbmQgPSB3aW4tPl9tYXh5OworCisJaWYgKGNoID09IDApCisJICAgIFNldENoYXIyKHdjaCwgQUNTX1ZMSU5FKTsKKwllbHNlCisJICAgIFNldENoYXIyKHdjaCwgY2gpOworCXdjaCA9IF9uY19yZW5kZXIod2luLCB3Y2gpOworCisJd2hpbGUgKGVuZCA+PSByb3cpIHsKKwkgICAgc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbZW5kXSk7CisJICAgIGxpbmUtPnRleHRbY29sXSA9IHdjaDsKKwkgICAgQ0hBTkdFRF9DRUxMKGxpbmUsIGNvbCk7CisJICAgIGVuZC0tOworCX0KKworCV9uY19zeW5jaG9vayh3aW4pOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvYmFzZS9saWJfd2F0dHJvZmYuYyBiL25jdXJzZXMvYmFzZS9saWJfd2F0dHJvZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjIwMjBlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL2xpYl93YXR0cm9mZi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl93YXR0cm9mZi5jCisqKgorKioJVGhlIHJvdXRpbmUgd2F0dHJfb2ZmKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl93YXR0cm9mZi5jLHYgMS45IDIwMDYvMDUvMjcgMTk6MzA6MzMgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2F0dHJfb2ZmKFdJTkRPVyAqd2luLCBhdHRyX3QgYXQsIHZvaWQgKm9wdHMgR0NDX1VOVVNFRCkKK3sKKyAgICBUKChUX0NBTExFRCgid2F0dHJfb2ZmKCVwLCVzKSIpLCB3aW4sIF90cmFjZWF0dHIoYXQpKSk7CisgICAgaWYgKHdpbikgeworCVQoKCIuLi4gY3VycmVudCAlcyAoJWQpIiwKKwkgICBfdHJhY2VhdHRyKFdJTkRPV19BVFRSUyh3aW4pKSwKKwkgICBHRVRfV0lORE9XX1BBSVIod2luKSkpOworCisJaWZfRVhUX0NPTE9SUyh7CisJICAgIGlmIChhdCAmIEFfQ09MT1IpCisJCXdpbi0+X2NvbG9yID0gMDsKKwl9KTsKKwl0b2dnbGVfYXR0cl9vZmYoV0lORE9XX0FUVFJTKHdpbiksIGF0KTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3dhdHRyb24uYyBiL25jdXJzZXMvYmFzZS9saWJfd2F0dHJvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTdkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvbGliX3dhdHRyb24uYwpAQCAtMCwwICsxLDY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfd2F0dHJvbi5jCisqKgorKioJVGhlIHJvdXRpbmVzIHdhdHRyX29uKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl93YXR0cm9uLmMsdiAxLjkgMjAwNi8wNS8yNyAxOTozMDo0NiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YXR0cl9vbihXSU5ET1cgKndpbiwgYXR0cl90IGF0LCB2b2lkICpvcHRzIEdDQ19VTlVTRUQpCit7CisgICAgVCgoVF9DQUxMRUQoIndhdHRyX29uKCVwLCVzKSIpLCB3aW4sIF90cmFjZWF0dHIoYXQpKSk7CisgICAgaWYgKHdpbiAhPSAwKSB7CisJVCgoIi4uLiBjdXJyZW50ICVzICglZCkiLAorCSAgIF90cmFjZWF0dHIoV0lORE9XX0FUVFJTKHdpbikpLAorCSAgIEdFVF9XSU5ET1dfUEFJUih3aW4pKSk7CisKKwlpZl9FWFRfQ09MT1JTKHsKKwkgICAgaWYgKGF0ICYgQV9DT0xPUikKKwkJd2luLT5fY29sb3IgPSBQQUlSX05VTUJFUihhdCk7CisJfSk7CisJdG9nZ2xlX2F0dHJfb24oV0lORE9XX0FUVFJTKHdpbiksIGF0KTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbGliX3dpbmNoLmMgYi9uY3Vyc2VzL2Jhc2UvbGliX3dpbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkYTljNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfd2luY2guYwpAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAsMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3dpbmNoLmMKKyoqCisqKglUaGUgcm91dGluZSB3aW5jaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3dpbmNoLmMsdiAxLjUgMjAwMS8wNi8wMiAyMzo0MjowOCBza2ltbyBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGNodHlwZSkKK3dpbmNoKFdJTkRPVyAqd2luKQoreworICAgIFQoKFRfQ0FMTEVEKCJ3aW5jaCglcCkiKSwgd2luKSk7CisgICAgaWYgKHdpbiAhPSAwKSB7CisJcmV0dXJuQ2hhcihDaGFyT2Yod2luLT5fbGluZVt3aW4tPl9jdXJ5XS50ZXh0W3dpbi0+X2N1cnhdKSB8CisJCSAgIEF0dHJPZih3aW4tPl9saW5lW3dpbi0+X2N1cnldLnRleHRbd2luLT5fY3VyeF0pKTsKKyAgICB9IGVsc2UgeworCXJldHVybkNoYXIoMCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL2xpYl93aW5kb3cuYyBiL25jdXJzZXMvYmFzZS9saWJfd2luZG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMzZlMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9saWJfd2luZG93LmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3dpbmRvdy5jCisqKgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3dpbmRvdy5jLHYgMS4yNSAyMDA4LzA2LzA3IDE0OjEyOjU2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc3luY2hvb2soV0lORE9XICp3aW4pCisvKiBob29rIHRvIGJlIGNhbGxlZCBhZnRlciBlYWNoIHdpbmRvdyBjaGFuZ2UgKi8KK3sKKyAgICBpZiAod2luLT5faW1tZWQpCisJd3JlZnJlc2god2luKTsKKyAgICBpZiAod2luLT5fc3luYykKKwl3c3luY3VwKHdpbik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK212ZGVyd2luKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpCisvKiBtb3ZlIGEgZGVyaXZlZCB3aW5kb3cgKi8KK3sKKyAgICBXSU5ET1cgKm9yaWc7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgibXZkZXJ3aW4oJXAsJWQsJWQpIiksIHdpbiwgeSwgeCkpOworCisgICAgaWYgKHdpbiAmJiAob3JpZyA9IHdpbi0+X3BhcmVudCkpIHsKKwlpZiAod2luLT5fcGFyeCA9PSB4ICYmIHdpbi0+X3BhcnkgPT0geSkKKwkgICAgcmV0dXJuQ29kZShPSyk7CisJaWYgKHggPCAwIHx8IHkgPCAwKQorCSAgICByZXR1cm5Db2RlKEVSUik7CisJaWYgKCh4ICsgZ2V0bWF4eCh3aW4pID4gZ2V0bWF4eChvcmlnKSkgfHwKKwkgICAgKHkgKyBnZXRtYXh5KHdpbikgPiBnZXRtYXh5KG9yaWcpKSkKKwkgICAgcmV0dXJuQ29kZShFUlIpOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKKyAgICB3c3luY3VwKHdpbik7CisgICAgd2luLT5fcGFyeCA9IHg7CisgICAgd2luLT5fcGFyeSA9IHk7CisgICAgZm9yIChpID0gMDsgaSA8IGdldG1heHkod2luKTsgaSsrKQorCXdpbi0+X2xpbmVbaV0udGV4dCA9ICYob3JpZy0+X2xpbmVbeSsrXS50ZXh0W3hdKTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorc3luY29rKFdJTkRPVyAqd2luLCBib29sIGJmKQorLyogZW5hYmxlL2Rpc2FibGUgYXV0b21hdGljIHdzeW5jdXAoKSBvbiBlYWNoIGNoYW5nZSB0byB3aW5kb3cgKi8KK3sKKyAgICBUKChUX0NBTExFRCgic3luY29rKCVwLCVkKSIpLCB3aW4sIGJmKSk7CisKKyAgICBpZiAod2luKSB7CisJd2luLT5fc3luYyA9IGJmOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3dzeW5jdXAoV0lORE9XICp3aW4pCisvKiBtYXJrIGNoYW5nZWQgZXZlcnkgY2VsbCBpbiB3aW4ncyBhbmNlc3RvcnMgdGhhdCBpcyBjaGFuZ2VkIGluIHdpbiAqLworLyogUmV3cml0dGVuIGJ5IEouIFBmZWlmZXIsIDEtQXByLTk2IChkb24ndCBldmVuIHRoaW5rIHRoYXQuLi4pICAgICAgKi8KK3sKKyAgICBXSU5ET1cgKndwOworCisgICAgVCgoVF9DQUxMRUQoIndzeW5jdXAoJXApIiksIHdpbikpOworICAgIGlmICh3aW4gJiYgd2luLT5fcGFyZW50KSB7CisJZm9yICh3cCA9IHdpbjsgd3AtPl9wYXJlbnQ7IHdwID0gd3AtPl9wYXJlbnQpIHsKKwkgICAgaW50IHk7CisJICAgIFdJTkRPVyAqcHAgPSB3cC0+X3BhcmVudDsKKworCSAgICBhc3NlcnQoKHdwLT5fcGFyeSA8PSBwcC0+X21heHkpICYmCisJCSAgICgod3AtPl9wYXJ5ICsgd3AtPl9tYXh5KSA8PSBwcC0+X21heHkpKTsKKworCSAgICBmb3IgKHkgPSAwOyB5IDw9IHdwLT5fbWF4eTsgeSsrKSB7CisJCWludCBsZWZ0ID0gd3AtPl9saW5lW3ldLmZpcnN0Y2hhcjsKKwkJaWYgKGxlZnQgPj0gMCkgewkvKiBsaW5lIGlzIHRvdWNoZWQgKi8KKwkJICAgIHN0cnVjdCBsZGF0ICpsaW5lID0gJihwcC0+X2xpbmVbd3AtPl9wYXJ5ICsgeV0pOworCQkgICAgLyogbGVmdCAmIHJpZ2h0IGNoYXJhY3RlciBpbiBwYXJlbnQgd2luZG93IGNvb3JkaW5hdGVzICovCisJCSAgICBpbnQgcmlnaHQgPSB3cC0+X2xpbmVbeV0ubGFzdGNoYXIgKyB3cC0+X3Bhcng7CisJCSAgICBsZWZ0ICs9IHdwLT5fcGFyeDsKKworCQkgICAgQ0hBTkdFRF9SQU5HRShsaW5lLCBsZWZ0LCByaWdodCk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3dzeW5jZG93bihXSU5ET1cgKndpbikKKy8qIG1hcmsgY2hhbmdlZCBldmVyeSBjZWxsIGluIHdpbiB0aGF0IGlzIGNoYW5nZWQgaW4gYW55IG9mIGl0cyBhbmNlc3RvcnMgKi8KKy8qIFJld3JpdHRlbiBieSBKLiBQZmVpZmVyLCAxLUFwci05NiAoZG9uJ3QgZXZlbiB0aGluayB0aGF0Li4uKSAgICAgICAgICAgKi8KK3sKKyAgICBUKChUX0NBTExFRCgid3N5bmNkb3duKCVwKSIpLCB3aW4pKTsKKworICAgIGlmICh3aW4gJiYgd2luLT5fcGFyZW50KSB7CisJV0lORE9XICpwcCA9IHdpbi0+X3BhcmVudDsKKwlpbnQgeTsKKworCS8qIFRoaXMgcmVjdXJzaW9uIGd1YXJhbnRlZXMsIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByb3BhZ2F0ZWQgZG93bi0KKwkgICB3YXJkcyBmcm9tIHRoZSByb290IHRvIG91ciBkaXJlY3QgcGFyZW50LiAqLworCXdzeW5jZG93bihwcCk7CisKKwkvKiBhbmQgbm93IHdlIG9ubHkgaGF2ZSB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZXMgZnJvbSBvdXIgZGlyZWN0CisJICAgcGFyZW50LCBpZiB0aGVyZSBhcmUgYW55LiAqLworCWFzc2VydCgod2luLT5fcGFyeSA8PSBwcC0+X21heHkpICYmCisJICAgICAgICgod2luLT5fcGFyeSArIHdpbi0+X21heHkpIDw9IHBwLT5fbWF4eSkpOworCisJZm9yICh5ID0gMDsgeSA8PSB3aW4tPl9tYXh5OyB5KyspIHsKKwkgICAgaWYgKHBwLT5fbGluZVt3aW4tPl9wYXJ5ICsgeV0uZmlyc3RjaGFyID49IDApIHsJLyogcGFyZW50IGNoYW5nZWQgKi8KKwkJc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbeV0pOworCQkvKiBsZWZ0IGFuZCByaWdodCBjaGFyYWN0ZXIgaW4gY2hpbGQgY29vcmRpbmF0ZXMgKi8KKwkJaW50IGxlZnQgPSBwcC0+X2xpbmVbd2luLT5fcGFyeSArIHldLmZpcnN0Y2hhciAtIHdpbi0+X3Bhcng7CisJCWludCByaWdodCA9IHBwLT5fbGluZVt3aW4tPl9wYXJ5ICsgeV0ubGFzdGNoYXIgLSB3aW4tPl9wYXJ4OworCQkvKiBUaGUgY2hhbmdlIG1heSBiZSBvdXRzaWRlIHRoZSBjaGlsZCdzIHJhbmdlICovCisJCWlmIChsZWZ0IDwgMCkKKwkJICAgIGxlZnQgPSAwOworCQlpZiAocmlnaHQgPiB3aW4tPl9tYXh4KQorCQkgICAgcmlnaHQgPSB3aW4tPl9tYXh4OworCQlDSEFOR0VEX1JBTkdFKGxpbmUsIGxlZnQsIHJpZ2h0KTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3djdXJzeW5jdXAoV0lORE9XICp3aW4pCisvKiBzeW5jIHRoZSBjdXJzb3IgaW4gYWxsIGRlcml2ZWQgd2luZG93cyB0byBpdHMgdmFsdWUgaW4gdGhlIGJhc2Ugd2luZG93ICovCit7CisgICAgV0lORE9XICp3cDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Y3Vyc3luY3VwKCVwKSIpLCB3aW4pKTsKKyAgICBmb3IgKHdwID0gd2luOyB3cCAmJiB3cC0+X3BhcmVudDsgd3AgPSB3cC0+X3BhcmVudCkgeworCXdtb3ZlKHdwLT5fcGFyZW50LCB3cC0+X3BhcnkgKyB3cC0+X2N1cnksIHdwLT5fcGFyeCArIHdwLT5fY3VyeCk7CisgICAgfQorICAgIHJldHVyblZvaWQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorZHVwd2luKFdJTkRPVyAqd2luKQorLyogbWFrZSBhbiBleGFjdCBkdXBsaWNhdGUgb2YgdGhlIGdpdmVuIHdpbmRvdyAqLworeworICAgIFdJTkRPVyAqbndpbiA9IDA7CisgICAgc2l6ZV90IGxpbmVzaXplOworICAgIGludCBpOworCisgICAgVCgoVF9DQUxMRUQoImR1cHdpbiglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luICE9IDApIHsKKworCV9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCWlmICh3aW4tPl9mbGFncyAmIF9JU1BBRCkgeworCSAgICBud2luID0gbmV3cGFkKHdpbi0+X21heHkgKyAxLAorCQkJICB3aW4tPl9tYXh4ICsgMSk7CisJfSBlbHNlIHsKKwkgICAgbndpbiA9IG5ld3dpbih3aW4tPl9tYXh5ICsgMSwKKwkJCSAgd2luLT5fbWF4eCArIDEsCisJCQkgIHdpbi0+X2JlZ3ksCisJCQkgIHdpbi0+X2JlZ3gpOworCX0KKworCWlmIChud2luICE9IDApIHsKKworCSAgICBud2luLT5fY3VyeCA9IHdpbi0+X2N1cng7CisJICAgIG53aW4tPl9jdXJ5ID0gd2luLT5fY3VyeTsKKwkgICAgbndpbi0+X21heHkgPSB3aW4tPl9tYXh5OworCSAgICBud2luLT5fbWF4eCA9IHdpbi0+X21heHg7CisJICAgIG53aW4tPl9iZWd5ID0gd2luLT5fYmVneTsKKwkgICAgbndpbi0+X2JlZ3ggPSB3aW4tPl9iZWd4OworCSAgICBud2luLT5feW9mZnNldCA9IHdpbi0+X3lvZmZzZXQ7CisKKwkgICAgbndpbi0+X2ZsYWdzID0gd2luLT5fZmxhZ3MgJiB+X1NVQldJTjsKKwkgICAgLyogRHVlIHRvIHRoZSB1c2Ugb2YgbmV3d2luKCksIHRoZSBjbG9uZSBpcyBub3QgYSBzdWJ3aW5kb3cuCisJICAgICAqIFRoZSB0ZXh0IGlzIHJlYWxseSBjb3BpZWQgaW50byB0aGUgY2xvbmUuCisJICAgICAqLworCisJICAgIFdJTkRPV19BVFRSUyhud2luKSA9IFdJTkRPV19BVFRSUyh3aW4pOworCSAgICBud2luLT5fbmNfYmtnZCA9IHdpbi0+X25jX2JrZ2Q7CisKKwkgICAgbndpbi0+X25vdGltZW91dCA9IHdpbi0+X25vdGltZW91dDsKKwkgICAgbndpbi0+X2NsZWFyID0gd2luLT5fY2xlYXI7CisJICAgIG53aW4tPl9sZWF2ZW9rID0gd2luLT5fbGVhdmVvazsKKwkgICAgbndpbi0+X3Njcm9sbCA9IHdpbi0+X3Njcm9sbDsKKwkgICAgbndpbi0+X2lkbG9rID0gd2luLT5faWRsb2s7CisJICAgIG53aW4tPl9pZGNvayA9IHdpbi0+X2lkY29rOworCSAgICBud2luLT5faW1tZWQgPSB3aW4tPl9pbW1lZDsKKwkgICAgbndpbi0+X3N5bmMgPSB3aW4tPl9zeW5jOworCSAgICBud2luLT5fdXNlX2tleXBhZCA9IHdpbi0+X3VzZV9rZXlwYWQ7CisJICAgIG53aW4tPl9kZWxheSA9IHdpbi0+X2RlbGF5OworCisJICAgIG53aW4tPl9wYXJ4ID0gMDsKKwkgICAgbndpbi0+X3BhcnkgPSAwOworCSAgICBud2luLT5fcGFyZW50ID0gKFdJTkRPVyAqKSAwOworCSAgICAvKiBTZWUgYWJvdmU6IHRoZSBjbG9uZSBpc24ndCBhIHN1YndpbmRvdyEgKi8KKworCSAgICBud2luLT5fcmVndG9wID0gd2luLT5fcmVndG9wOworCSAgICBud2luLT5fcmVnYm90dG9tID0gd2luLT5fcmVnYm90dG9tOworCisJICAgIGlmICh3aW4tPl9mbGFncyAmIF9JU1BBRCkKKwkJbndpbi0+X3BhZCA9IHdpbi0+X3BhZDsKKworCSAgICBsaW5lc2l6ZSA9ICh3aW4tPl9tYXh4ICsgMSkgKiBzaXplb2YoTkNVUlNFU19DSF9UKTsKKwkgICAgZm9yIChpID0gMDsgaSA8PSBud2luLT5fbWF4eTsgaSsrKSB7CisJCW1lbWNweShud2luLT5fbGluZVtpXS50ZXh0LCB3aW4tPl9saW5lW2ldLnRleHQsIGxpbmVzaXplKTsKKwkJbndpbi0+X2xpbmVbaV0uZmlyc3RjaGFyID0gd2luLT5fbGluZVtpXS5maXJzdGNoYXI7CisJCW53aW4tPl9saW5lW2ldLmxhc3RjaGFyID0gd2luLT5fbGluZVtpXS5sYXN0Y2hhcjsKKwkgICAgfQorCX0KKwlfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIH0KKyAgICByZXR1cm5XaW4obndpbik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvbWVtbW92ZS5jIGIvbmN1cnNlcy9iYXNlL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhZDcyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL21lbW1vdmUuYwpAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IG1lbW1vdmUuYyx2IDEuNSAyMDA3LzA4LzExIDE3OjEyOjQzIHRvbSBFeHAgJCIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBVU0VfTVlfTUVNTU9WRQorI2RlZmluZSBEU1QgKChjaGFyICopczEpCisjZGVmaW5lIFNSQyAoKGNvbnN0IGNoYXIgKilzMikKK05DVVJTRVNfRVhQT1JUKHZvaWQgKikKK19uY19tZW1tb3ZlKHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pCit7CisgICAgaWYgKG4gIT0gMCkgeworCWlmICgoRFNUICsgbiA+IFNSQykgJiYgKFNSQyArIG4gPiBEU1QpKSB7CisJICAgIHN0YXRpYyBjaGFyICpiZnI7CisJICAgIHN0YXRpYyBzaXplX3QgbGVuZ3RoOworCSAgICByZWdpc3RlciBzaXplX3QgajsKKwkgICAgaWYgKGxlbmd0aCA8IG4pIHsKKwkJbGVuZ3RoID0gKG4gKiAzKSAvIDI7CisJCWJmciA9IHR5cGVSZWFsbG9jKGNoYXIsIGxlbmd0aCwgYmZyKTsKKwkgICAgfQorCSAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQliZnJbal0gPSBTUkNbal07CisJICAgIHMyID0gYmZyOworCX0KKwl3aGlsZSAobi0tICE9IDApCisJICAgIERTVFtuXSA9IFNSQ1tuXTsKKyAgICB9CisgICAgcmV0dXJuIHMxOworfQorI2Vsc2UKK2V4dGVybgorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tZW1tb3ZlKHZvaWQpOwkJLyogcXVpZXQncyBnY2Mgd2FybmluZyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tZW1tb3ZlKHZvaWQpCit7Cit9CQkJCS8qIG5vbmVtcHR5IGZvciBzdHJpY3QgQU5TSSBjb21waWxlcnMgKi8KKyNlbmRpZiAvKiBVU0VfTVlfTUVNTU9WRSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL25jX3BhbmVsLmMgYi9uY3Vyc2VzL2Jhc2UvbmNfcGFuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJmYmJlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL25jX3BhbmVsLmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBuY19wYW5lbC5jLHYgMS40IDIwMDAvMTIvMTAgMDI6NDM6MjggdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoc3RydWN0IHBhbmVsaG9vayAqKQorX25jX3BhbmVsaG9vayh2b2lkKQoreworICAgIHJldHVybiAoU1AgPyAmKFNQLT5fcGFuZWxIb29rKSA6IE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL3Jlc2l6ZXRlcm0uYyBiL25jdXJzZXMvYmFzZS9yZXNpemV0ZXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0Y2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9yZXNpemV0ZXJtLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICBJdCBwcm92aWRlcyBjYWxsZXJzIHdpdGggYSBob29rCisgKiBpbnRvIHRoZSBOQ1VSU0VTIGRhdGEgdG8gcmVzaXplIHdpbmRvd3MsIHByaW1hcmlseSBmb3IgdXNlIGJ5IHByb2dyYW1zCisgKiBydW5uaW5nIGluIGFuIFggV2luZG93IHRlcm1pbmFsIChlLmcuLCB4dGVybSkuICBJIGFic3RyYWN0ZWQgdGhpcyBtb2R1bGUKKyAqIGZyb20gbXkgYXBwbGljYXRpb24gbGlicmFyeSBmb3IgTkNVUlNFUyBiZWNhdXNlIGl0IG11c3QgYmUgY29tcGlsZWQgd2l0aAorICogdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIC0tIFQuRGlja2V5IDE5OTUvNy80LgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IHJlc2l6ZXRlcm0uYyx2IDEuMzQgMjAwOC8wNi8wNyAxMzo1ODo0MCB0b20gRXhwICQiKQorCisjZGVmaW5lIHN0b2xlbl9saW5lcyAoc2NyZWVuX2xpbmVzIC0gU1AtPl9saW5lc19hdmFpbCkKKworLyoKKyAqIElmIHdlJ3JlIHRyeWluZyB0byBiZSByZWVudHJhbnQsIGRvIG5vdCB3YW50IGFueSBsb2NhbCBzdGF0aWNzLgorICovCisjaWYgVVNFX1JFRU5UUkFOVAorI2RlZmluZSBFWFRSQV9BUkdTICwgICAgIEN1ckxpbmVzLCAgICAgQ3VyQ29scworI2RlZmluZSBFWFRSQV9EQ0xTICwgaW50IEN1ckxpbmVzLCBpbnQgQ3VyQ29scworI2Vsc2UKK3N0YXRpYyBpbnQgY3VycmVudF9saW5lczsKK3N0YXRpYyBpbnQgY3VycmVudF9jb2xzOworI2RlZmluZSBDdXJMaW5lcyBjdXJyZW50X2xpbmVzCisjZGVmaW5lIEN1ckNvbHMgIGN1cnJlbnRfY29scworI2RlZmluZSBFWFRSQV9BUkdTCQkvKiBub3RoaW5nICovCisjZGVmaW5lIEVYVFJBX0RDTFMJCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKK3N0YXRpYyB2b2lkCitzaG93X3dpbmRvd19zaXplcyhjb25zdCBjaGFyICpuYW1lKQoreworICAgIFdJTkRPV0xJU1QgKndwOworCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgX3RyYWNlZigiJXMgcmVzaXppbmc6ICUyZCB4ICUyZCAoJTJkIHggJTJkKSIsIG5hbWUsIExJTkVTLCBDT0xTLAorCSAgICBzY3JlZW5fbGluZXMsIHNjcmVlbl9jb2x1bW5zKTsKKyAgICBmb3IgKGVhY2hfd2luZG93KHdwKSkgeworCV90cmFjZWYoIiAgd2luZG93ICVwIGlzICUybGQgeCAlMmxkIGF0ICUybGQsJTJsZCIsCisJCSYod3AtPndpbiksCisJCShsb25nKSB3cC0+d2luLl9tYXh5ICsgMSwKKwkJKGxvbmcpIHdwLT53aW4uX21heHggKyAxLAorCQkobG9uZykgd3AtPndpbi5fYmVneSwKKwkJKGxvbmcpIHdwLT53aW4uX2JlZ3gpOworICAgIH0KKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBkbyBub3QgbWF0Y2ggdGhlIGludGVybmFsIHRlcm1pbmFsCisgKiBzdHJ1Y3R1cmUncyBzaXplLgorICovCitOQ1VSU0VTX0VYUE9SVChib29sKQoraXNfdGVybV9yZXNpemVkKGludCBUb0xpbmVzLCBpbnQgVG9Db2xzKQoreworICAgIFQoKFRfQ0FMTEVEKCJpc190ZXJtX3Jlc2l6ZWQoJWQsICVkKSIpLCBUb0xpbmVzLCBUb0NvbHMpKTsKKyAgICByZXR1cm5Db2RlKFRvTGluZXMgPiAwCisJICAgICAgICYmIFRvQ29scyA+IDAKKwkgICAgICAgJiYgKFRvTGluZXMgIT0gc2NyZWVuX2xpbmVzCisJCSAgIHx8IFRvQ29scyAhPSBzY3JlZW5fY29sdW1ucykpOworfQorCisvKgorICovCitzdGF0aWMgcmlwb2ZmX3QgKgorcmlwcGVkX3dpbmRvdyhXSU5ET1cgKndpbikKK3sKKyAgICByaXBvZmZfdCAqcmVzdWx0ID0gMDsKKyAgICByaXBvZmZfdCAqcm9wOworCisgICAgaWYgKHdpbiAhPSAwKSB7CisJZm9yIChlYWNoX3JpcG9mZihyb3ApKSB7CisJICAgIGlmIChyb3AtPndpbiA9PSB3aW4gJiYgcm9wLT5saW5lICE9IDApIHsKKwkJcmVzdWx0ID0gcm9wOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSBib3R0b20gZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSByaXBwZWQKKyAqIG9mZiB3aW5kb3cuCisgKi8KK3N0YXRpYyBpbnQKK3JpcHBlZF9ib3R0b20oV0lORE9XICp3aW4pCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgcmlwb2ZmX3QgKnJvcDsKKworICAgIGlmICh3aW4gIT0gMCkgeworCWZvciAoZWFjaF9yaXBvZmYocm9wKSkgeworCSAgICBpZiAocm9wLT5saW5lIDwgMCkgeworCQlyZXN1bHQgLT0gcm9wLT5saW5lOworCQlpZiAocm9wLT53aW4gPT0gd2luKSB7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGV2ZWxzIG9mIGNoaWxkLXdpbmRvd3MgdW5kZXIgdGhlIGN1cnJlbnQgd2luZG93LgorICovCitzdGF0aWMgaW50CitjaGlsZF9kZXB0aChXSU5ET1cgKmNtcCkKK3sKKyAgICBpbnQgZGVwdGggPSAwOworCisgICAgaWYgKGNtcCAhPSAwKSB7CisJV0lORE9XTElTVCAqd3A7CisKKwlmb3IgKGVhY2hfd2luZG93KHdwKSkgeworCSAgICBXSU5ET1cgKnRzdCA9ICYod3AtPndpbik7CisJICAgIGlmICh0c3QtPl9wYXJlbnQgPT0gY21wKSB7CisJCWRlcHRoID0gMSArIGNoaWxkX2RlcHRoKHRzdCk7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gZGVwdGg7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsZXZlbHMgb2YgcGFyZW50LXdpbmRvd3MgYWJvdmUgdGhlIGN1cnJlbnQgd2luZG93LgorICovCitzdGF0aWMgaW50CitwYXJlbnRfZGVwdGgoV0lORE9XICpjbXApCit7CisgICAgaW50IGRlcHRoID0gMDsKKworICAgIGlmIChjbXAgIT0gMCkgeworCVdJTkRPVyAqdHN0OworCXdoaWxlICgodHN0ID0gY21wLT5fcGFyZW50KSAhPSAwKSB7CisJICAgICsrZGVwdGg7CisJICAgIGNtcCA9IHRzdDsKKwl9CisgICAgfQorICAgIHJldHVybiBkZXB0aDsKK30KKworLyoKKyAqIEZJWE1FOiBtdXN0IGFkanVzdCBwb3NpdGlvbiBzbyBpdCdzIHdpdGhpbiB0aGUgcGFyZW50IQorICovCitzdGF0aWMgaW50CithZGp1c3Rfd2luZG93KFdJTkRPVyAqd2luLCBpbnQgVG9MaW5lcywgaW50IFRvQ29scywgaW50IHN0b2xlbiBFWFRSQV9EQ0xTKQoreworICAgIGludCByZXN1bHQ7CisgICAgaW50IGJvdHRvbSA9IEN1ckxpbmVzICsgU1AtPl90b3BzdG9sZW4gLSBzdG9sZW47CisgICAgaW50IG15TGluZXMgPSB3aW4tPl9tYXh5ICsgMTsKKyAgICBpbnQgbXlDb2xzID0gd2luLT5fbWF4eCArIDE7CisgICAgcmlwb2ZmX3QgKnJvcCA9IHJpcHBlZF93aW5kb3cod2luKTsKKworICAgIFQoKFRfQ0FMTEVEKCJhZGp1c3Rfd2luZG93KCVwLCVkLCVkKSVzIGRlcHRoICVkLyVkIGN1cnJlbnRseSAlbGR4JWxkIGF0ICVsZCwlbGQiKSwKKyAgICAgICB3aW4sIFRvTGluZXMsIFRvQ29scywKKyAgICAgICAocm9wICE9IDApID8gIiAocmlwKSIgOiAiIiwKKyAgICAgICBwYXJlbnRfZGVwdGgod2luKSwKKyAgICAgICBjaGlsZF9kZXB0aCh3aW4pLAorICAgICAgIChsb25nKSBnZXRtYXh5KHdpbiksIChsb25nKSBnZXRtYXh4KHdpbiksCisgICAgICAgKGxvbmcpIGdldGJlZ3kod2luKSArIHdpbi0+X3lvZmZzZXQsIChsb25nKSBnZXRiZWd4KHdpbikpKTsKKworICAgIGlmIChyb3AgIT0gMCAmJiByb3AtPmxpbmUgPCAwKSB7CisJLyoKKwkgKiBJZiBpdCBpcyBhIHJpcHBlZC1vZmYgd2luZG93IGF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiwgc2ltcGx5CisJICogbW92ZSBpdCB0byB0aGUgc2FtZSByZWxhdGl2ZSBwb3NpdGlvbi4KKwkgKi8KKwl3aW4tPl9iZWd5ID0gVG9MaW5lcyAtIHJpcHBlZF9ib3R0b20od2luKSAtIDAgLSB3aW4tPl95b2Zmc2V0OworICAgIH0gZWxzZSBpZiAod2luLT5fYmVneSA+PSBib3R0b20pIHsKKwkvKgorCSAqIElmIGl0IGlzIGJlbG93IHRoZSBib3R0b20gb2YgdGhlIG5ldyBzY3JlZW4sIG1vdmUgdXAgYnkgdGhlIHNhbWUKKwkgKiBhbW91bnQgdGhhdCB0aGUgc2NyZWVuIHNocmFuay4KKwkgKi8KKwl3aW4tPl9iZWd5ICs9IChUb0xpbmVzIC0gQ3VyTGluZXMpOworICAgIH0gZWxzZSB7CisJaWYgKG15TGluZXMgPT0gKEN1ckxpbmVzIC0gc3RvbGVuKQorCSAgICAmJiBUb0xpbmVzICE9IEN1ckxpbmVzKSB7CisJICAgIG15TGluZXMgPSBUb0xpbmVzIC0gc3RvbGVuOworCX0gZWxzZSBpZiAobXlMaW5lcyA9PSBDdXJMaW5lcworCQkgICAmJiBUb0xpbmVzICE9IEN1ckxpbmVzKSB7CisJICAgIG15TGluZXMgPSBUb0xpbmVzOworCX0KKyAgICB9CisKKyAgICBpZiAobXlMaW5lcyA+IFRvTGluZXMpIHsKKwlteUxpbmVzID0gVG9MaW5lczsKKyAgICB9CisKKyAgICBpZiAobXlDb2xzID4gVG9Db2xzKQorCW15Q29scyA9IFRvQ29sczsKKworICAgIGlmIChteUNvbHMgPT0gQ3VyQ29scworCSYmIFRvQ29scyAhPSBDdXJDb2xzKQorCW15Q29scyA9IFRvQ29sczsKKworICAgIHJlc3VsdCA9IHdyZXNpemUod2luLCBteUxpbmVzLCBteUNvbHMpOworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyoKKyAqIElmIHdlJ3JlIGRlY3JlYXNpbmcgc2l6ZSwgcmVjdXJzaXZlbHkgc2VhcmNoIGZvciB3aW5kb3dzIHRoYXQgaGF2ZSBubworICogY2hpbGRyZW4sIGRlY3JlYXNlIHRob3NlIHRvIGZpdCwgdGhlbiBkZWNyZWFzZSB0aGUgY29udGFpbmluZyB3aW5kb3csIGV0Yy4KKyAqLworc3RhdGljIGludAorZGVjcmVhc2Vfc2l6ZShpbnQgVG9MaW5lcywgaW50IFRvQ29scywgaW50IHN0b2xlbiBFWFRSQV9EQ0xTKQoreworICAgIGJvb2wgZm91bmQ7CisgICAgaW50IGRlcHRoID0gMDsKKyAgICBXSU5ET1dMSVNUICp3cDsKKworICAgIFQoKFRfQ0FMTEVEKCJkZWNyZWFzZV9zaXplKCVkLCAlZCkiKSwgVG9MaW5lcywgVG9Db2xzKSk7CisKKyAgICBkbyB7CisJZm91bmQgPSBGQUxTRTsKKwlUUihUUkFDRV9VUERBVEUsICgiZGVjcmVhc2luZyBzaXplIG9mIHdpbmRvd3MgdG8gJWR4JWQsIGRlcHRoPSVkIiwKKwkJCSAgVG9MaW5lcywgVG9Db2xzLCBkZXB0aCkpOworCWZvciAoZWFjaF93aW5kb3cod3ApKSB7CisJICAgIFdJTkRPVyAqd2luID0gJih3cC0+d2luKTsKKworCSAgICBpZiAoISh3aW4tPl9mbGFncyAmIF9JU1BBRCkpIHsKKwkJaWYgKGNoaWxkX2RlcHRoKHdpbikgPT0gZGVwdGgpIHsKKwkJICAgIGZvdW5kID0gVFJVRTsKKwkJICAgIGlmIChhZGp1c3Rfd2luZG93KHdpbiwgVG9MaW5lcywgVG9Db2xzLAorCQkJCSAgICAgIHN0b2xlbiBFWFRSQV9BUkdTKSAhPSBPSykKKwkJCXJldHVybkNvZGUoRVJSKTsKKwkJfQorCSAgICB9CisJfQorCSsrZGVwdGg7CisgICAgfSB3aGlsZSAoZm91bmQpOworICAgIHJldHVybkNvZGUoT0spOworfQorCisvKgorICogSWYgd2UncmUgaW5jcmVhc2luZyBzaXplLCByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHdpbmRvd3MgdGhhdCBoYXZlIG5vCisgKiBwYXJlbnQsIGluY3JlYXNlIHRob3NlIHRvIGZpdCwgdGhlbiBpbmNyZWFzZSB0aGUgY29udGFpbmVkIHdpbmRvdywgZXRjLgorICovCitzdGF0aWMgaW50CitpbmNyZWFzZV9zaXplKGludCBUb0xpbmVzLCBpbnQgVG9Db2xzLCBpbnQgc3RvbGVuIEVYVFJBX0RDTFMpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBpbnQgZGVwdGggPSAwOworICAgIFdJTkRPV0xJU1QgKndwOworCisgICAgVCgoVF9DQUxMRUQoImluY3JlYXNlX3NpemUoJWQsICVkKSIpLCBUb0xpbmVzLCBUb0NvbHMpKTsKKworICAgIGRvIHsKKwlmb3VuZCA9IEZBTFNFOworCVRSKFRSQUNFX1VQREFURSwgKCJpbmNyZWFzaW5nIHNpemUgb2Ygd2luZG93cyB0byAlZHglZCwgZGVwdGg9JWQiLAorCQkJICBUb0xpbmVzLCBUb0NvbHMsIGRlcHRoKSk7CisJZm9yIChlYWNoX3dpbmRvdyh3cCkpIHsKKwkgICAgV0lORE9XICp3aW4gPSAmKHdwLT53aW4pOworCisJICAgIGlmICghKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSkgeworCQlpZiAocGFyZW50X2RlcHRoKHdpbikgPT0gZGVwdGgpIHsKKwkJICAgIGZvdW5kID0gVFJVRTsKKwkJICAgIGlmIChhZGp1c3Rfd2luZG93KHdpbiwgVG9MaW5lcywgVG9Db2xzLAorCQkJCSAgICAgIHN0b2xlbiBFWFRSQV9BUkdTKSAhPSBPSykKKwkJCXJldHVybkNvZGUoRVJSKTsKKwkJfQorCSAgICB9CisJfQorCSsrZGVwdGg7CisgICAgfSB3aGlsZSAoZm91bmQpOworICAgIHJldHVybkNvZGUoT0spOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFsbG9jYXRlcyBOQ1VSU0VTIHdpbmRvdyBzdHJ1Y3R1cmVzLCB3aXRoIG5vIHNpZGUtZWZmZWN0cworICogc3VjaCBhcyB1bmdldGNoKCkuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Jlc2l6ZV90ZXJtKGludCBUb0xpbmVzLCBpbnQgVG9Db2xzKQoreworICAgIGludCByZXN1bHQgPSBPSyBFWFRSQV9BUkdTOworICAgIGludCB3YXNfc3RvbGVuOworCisgICAgVCgoVF9DQUxMRUQoInJlc2l6ZV90ZXJtKCVkLCVkKSBvbGQoJWQsJWQpIiksCisgICAgICAgVG9MaW5lcywgVG9Db2xzLAorICAgICAgIHNjcmVlbl9saW5lcywgc2NyZWVuX2NvbHVtbnMpKTsKKworICAgIGlmIChTUCA9PSAwKSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0KKworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgd2FzX3N0b2xlbiA9IChzY3JlZW5fbGluZXMgLSBTUC0+X2xpbmVzX2F2YWlsKTsKKyAgICBpZiAoaXNfdGVybV9yZXNpemVkKFRvTGluZXMsIFRvQ29scykpIHsKKwlpbnQgbXlMaW5lcyA9IEN1ckxpbmVzID0gc2NyZWVuX2xpbmVzOworCWludCBteUNvbHMgPSBDdXJDb2xzID0gc2NyZWVuX2NvbHVtbnM7CisKKyNpZmRlZiBUUkFDRQorCWlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSkpIHsKKwkgICAgc2hvd193aW5kb3dfc2l6ZXMoImJlZm9yZSIpOworCSAgICBfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworCX0KKyNlbmRpZgorCWlmIChUb0xpbmVzID4gc2NyZWVuX2xpbmVzKSB7CisJICAgIGluY3JlYXNlX3NpemUobXlMaW5lcyA9IFRvTGluZXMsIG15Q29scywgd2FzX3N0b2xlbiBFWFRSQV9BUkdTKTsKKwkgICAgQ3VyTGluZXMgPSBteUxpbmVzOworCSAgICBDdXJDb2xzID0gbXlDb2xzOworCX0KKworCWlmIChUb0NvbHMgPiBzY3JlZW5fY29sdW1ucykgeworCSAgICBpbmNyZWFzZV9zaXplKG15TGluZXMsIG15Q29scyA9IFRvQ29scywgd2FzX3N0b2xlbiBFWFRSQV9BUkdTKTsKKwkgICAgQ3VyTGluZXMgPSBteUxpbmVzOworCSAgICBDdXJDb2xzID0gbXlDb2xzOworCX0KKworCWlmIChUb0xpbmVzIDwgbXlMaW5lcyB8fAorCSAgICBUb0NvbHMgPCBteUNvbHMpIHsKKwkgICAgZGVjcmVhc2Vfc2l6ZShUb0xpbmVzLCBUb0NvbHMsIHdhc19zdG9sZW4gRVhUUkFfQVJHUyk7CisJfQorCisJc2NyZWVuX2xpbmVzID0gbGluZXMgPSBUb0xpbmVzOworCXNjcmVlbl9jb2x1bW5zID0gY29sdW1ucyA9IFRvQ29sczsKKworCVNQLT5fbGluZXNfYXZhaWwgPSBsaW5lcyAtIHdhc19zdG9sZW47CisKKwlpZiAoU1AtPm9sZGhhc2gpIHsKKwkgICAgRnJlZUFuZE51bGwoU1AtPm9sZGhhc2gpOworCX0KKwlpZiAoU1AtPm5ld2hhc2gpIHsKKwkgICAgRnJlZUFuZE51bGwoU1AtPm5ld2hhc2gpOworCX0KKyNpZmRlZiBUUkFDRQorCWlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSkpIHsKKwkgICAgU0VUX0xJTkVTKFRvTGluZXMgLSB3YXNfc3RvbGVuKTsKKwkgICAgU0VUX0NPTFMoVG9Db2xzKTsKKwkgICAgc2hvd193aW5kb3dfc2l6ZXMoImFmdGVyIik7CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisJfQorI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbHdheXMgdXBkYXRlIExJTkVTLCB0byBhbGxvdyBmb3IgY2FsbCBmcm9tIGxpYl9kb3VwZGF0ZS5jIHdoaWNoCisgICAgICogbmVlZHMgdG8gaGF2ZSB0aGUgY291bnQgYWRqdXN0ZWQgYnkgdGhlIHN0b2xlbiAocmlwcGVkIG9mZikgbGluZXMuCisgICAgICovCisgICAgU0VUX0xJTkVTKFRvTGluZXMgLSB3YXNfc3RvbGVuKTsKKyAgICBTRVRfQ09MUyhUb0NvbHMpOworCisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhbGxvY2F0ZXMgTkNVUlNFUyB3aW5kb3cgc3RydWN0dXJlcy4gIEl0IGlzIGludm9rZWQgaW4KKyAqIHJlc3BvbnNlIHRvIGEgU0lHV0lOQ0ggaW50ZXJydXB0LiAgT3RoZXIgdXNlci1kZWZpbmVkIHdpbmRvd3MgbWF5IGFsc28gbmVlZAorICogdG8gYmUgcmVhbGxvY2F0ZWQuCisgKgorICogQmVjYXVzZSB0aGlzIHBlcmZvcm1zIG1lbW9yeSBhbGxvY2F0aW9uLCBpdCBzaG91bGQgbm90IChpbiBnZW5lcmFsKSBiZQorICogaW52b2tlZCBkaXJlY3RseSBmcm9tIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorcmVzaXpldGVybShpbnQgVG9MaW5lcywgaW50IFRvQ29scykKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoInJlc2l6ZXRlcm0oJWQsJWQpIG9sZCglZCwlZCkiKSwKKyAgICAgICBUb0xpbmVzLCBUb0NvbHMsCisgICAgICAgc2NyZWVuX2xpbmVzLCBzY3JlZW5fY29sdW1ucykpOworCisgICAgaWYgKFNQICE9IDApIHsKKwlyZXN1bHQgPSBPSzsKKwlTUC0+X3NpZ193aW5jaCA9IEZBTFNFOworCisJaWYgKGlzX3Rlcm1fcmVzaXplZChUb0xpbmVzLCBUb0NvbHMpKSB7CisjaWYgVVNFX1NJR1dJTkNICisJICAgIHJpcG9mZl90ICpyb3A7CisJICAgIGJvb2wgc2xrX3Zpc2libGUgPSAoU1AgIT0gMAorCQkJCSYmIFNQLT5fc2xrICE9IDAKKwkJCQkmJiAhKFNQLT5fc2xrLT5oaWRkZW4pKTsKKworCSAgICBpZiAoc2xrX3Zpc2libGUpIHsKKwkJc2xrX2NsZWFyKCk7CisJICAgIH0KKyNlbmRpZgorCSAgICByZXN1bHQgPSByZXNpemVfdGVybShUb0xpbmVzLCBUb0NvbHMpOworCisjaWYgVVNFX1NJR1dJTkNICisJICAgIF9uY191bmdldGNoKFNQLCBLRVlfUkVTSVpFKTsJLyogc28gYXBwbGljYXRpb24gY2FuIGtub3cgdGhpcyAqLworCSAgICBjbGVhcm9rKGN1cnNjciwgVFJVRSk7CS8qIHNjcmVlbiBjb250ZW50cyBhcmUgdW5rbm93biAqLworCisJICAgIC8qIHJpcHBlZC1vZmYgbGluZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiBpZiB3ZSBkaWQgbm90IGxlbmd0aGVuCisJICAgICAqIHRoZW0sIHdlIGhhdmVuJ3QgbW92ZWQgdGhlbSBlaXRoZXIuICByZXBhaW50IHRoZW0sIHRvby4KKwkgICAgICoKKwkgICAgICogZm9yIHRoZSByZXN0IC0gc3Rkc2NyIGFuZCBvdGhlciB3aW5kb3dzIC0gdGhlIGNsaWVudCBoYXMgdG8KKwkgICAgICogZGVjaWRlIHdoaWNoIHRvIHJlcGFpbnQsIHNpbmNlIHdpdGhvdXQgcGFuZWxzLCBuY3Vyc2VzIGRvZXMKKwkgICAgICogbm90IGtub3cgd2hpY2ggYXJlIHJlYWxseSBvbiB0b3AuCisJICAgICAqLworCSAgICBmb3IgKGVhY2hfcmlwb2ZmKHJvcCkpIHsKKwkJaWYgKHJvcC0+d2luICE9IHN0ZHNjcgorCQkgICAgJiYgcm9wLT53aW4gIT0gMAorCQkgICAgJiYgcm9wLT5saW5lIDwgMCkgeworCisJCSAgICBpZiAocm9wLT5ob29rICE9IF9uY19zbGtfaW5pdGlhbGl6ZSkgeworCQkJdG91Y2h3aW4ocm9wLT53aW4pOworCQkJd25vdXRyZWZyZXNoKHJvcC0+d2luKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgICAgLyogc29mdC1rZXlzIGFyZSBhIHNwZWNpYWwgY2FzZTogd2UgX2tub3dfIGhvdyB0byByZXBhaW50IHRoZW0gKi8KKwkgICAgaWYgKHNsa192aXNpYmxlKSB7CisJCXNsa19yZXN0b3JlKCk7CisJCXNsa190b3VjaCgpOworCisJCXNsa19yZWZyZXNoKCk7CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2Uvc2FmZV9zcHJpbnRmLmMgYi9uY3Vyc2VzL2Jhc2Uvc2FmZV9zcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjNWQ4OQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9zYWZlX3NwcmludGYuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHNhZmVfc3ByaW50Zi5jLHYgMS4yMCAyMDA3LzA0LzIxIDIyOjI4OjA2IHRvbSBFeHAgJCIpCisKKyNpZiBVU0VfU0FGRV9TUFJJTlRGCisKK3R5cGVkZWYgZW51bSB7CisgICAgRmxhZ3MsIFdpZHRoLCBQcmVjLCBUeXBlLCBGb3JtYXQKK30gUFJJTlRGOworCisjZGVmaW5lIFZBX0lOVEdSKHR5cGUpIGl2YWwgPSB2YV9hcmcoYXAsIHR5cGUpCisjZGVmaW5lIFZBX0ZMT0FUKHR5cGUpIGZ2YWwgPSB2YV9hcmcoYXAsIHR5cGUpCisjZGVmaW5lIFZBX1BPSU5UKHR5cGUpIHB2YWwgPSAodm9pZCAqKXZhX2FyZyhhcCwgdHlwZSkKKworLyoKKyAqIFNjYW4gYSB2YXJpYWJsZS1hcmd1bWVudCBsaXN0IGZvciBwcmludGYgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKKyAqIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBiZSBlbWl0dGVkLgorICovCitzdGF0aWMgaW50CitfbmNfcHJpbnRmX2xlbmd0aChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IEJVRlNJWjsKKyAgICBjaGFyICpidWZmZXI7CisgICAgY2hhciAqZm9ybWF0OworICAgIGludCBsZW4gPSAwOworICAgIHNpemVfdCBmbXRfbGVuOworICAgIGNoYXIgZm10X2FyZ1tCVUZTSVpdOworCisgICAgaWYgKGZtdCA9PSAwIHx8ICpmbXQgPT0gJ1wwJykKKwlyZXR1cm4gMDsKKyAgICBmbXRfbGVuID0gc3RybGVuKGZtdCkgKyAxOworICAgIGlmICgoZm9ybWF0ID0gdHlwZU1hbGxvYyhjaGFyLCBmbXRfbGVuKSkgPT0gMCkKKwkgIHJldHVybiAtMTsKKyAgICBpZiAoKGJ1ZmZlciA9IHR5cGVNYWxsb2MoY2hhciwgbGVuZ3RoKSkgPT0gMCkgeworCWZyZWUoZm9ybWF0KTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKCpmbXQgIT0gJ1wwJykgeworCWlmICgqZm10ID09ICclJykgeworCSAgICBzdGF0aWMgY2hhciBkdW1teVtdID0gIiI7CisJICAgIFBSSU5URiBzdGF0ZSA9IEZsYWdzOworCSAgICBjaGFyICpwdmFsID0gZHVtbXk7CS8qIGF2b2lkIGNvbnN0LWNhc3QgKi8KKwkgICAgZG91YmxlIGZ2YWwgPSAwLjA7CisJICAgIGludCBkb25lID0gRkFMU0U7CisJICAgIGludCBpdmFsID0gMDsKKwkgICAgaW50IHByZWMgPSAtMTsKKwkgICAgaW50IHR5cGUgPSAwOworCSAgICBpbnQgdXNlZCA9IDA7CisJICAgIGludCB3aWR0aCA9IC0xOworCSAgICBzaXplX3QgZiA9IDA7CisKKwkgICAgZm9ybWF0W2YrK10gPSAqZm10OworCSAgICB3aGlsZSAoKisrZm10ICE9ICdcMCcgJiYgbGVuID49IDAgJiYgIWRvbmUpIHsKKwkJZm9ybWF0W2YrK10gPSAqZm10OworCisJCWlmIChpc2RpZ2l0KFVDaGFyKCpmbXQpKSkgeworCQkgICAgaW50IG51bSA9ICpmbXQgLSAnMCc7CisJCSAgICBpZiAoc3RhdGUgPT0gRmxhZ3MgJiYgbnVtICE9IDApCisJCQlzdGF0ZSA9IFdpZHRoOworCQkgICAgaWYgKHN0YXRlID09IFdpZHRoKSB7CisJCQlpZiAod2lkdGggPCAwKQorCQkJICAgIHdpZHRoID0gMDsKKwkJCXdpZHRoID0gKHdpZHRoICogMTApICsgbnVtOworCQkgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBQcmVjKSB7CisJCQlpZiAocHJlYyA8IDApCisJCQkgICAgcHJlYyA9IDA7CisJCQlwcmVjID0gKHByZWMgKiAxMCkgKyBudW07CisJCSAgICB9CisJCX0gZWxzZSBpZiAoKmZtdCA9PSAnKicpIHsKKwkJICAgIFZBX0lOVEdSKGludCk7CisJCSAgICBpZiAoc3RhdGUgPT0gRmxhZ3MpCisJCQlzdGF0ZSA9IFdpZHRoOworCQkgICAgaWYgKHN0YXRlID09IFdpZHRoKSB7CisJCQl3aWR0aCA9IGl2YWw7CisJCSAgICB9IGVsc2UgaWYgKHN0YXRlID09IFByZWMpIHsKKwkJCXByZWMgPSBpdmFsOworCQkgICAgfQorCQkgICAgc3ByaW50ZihmbXRfYXJnLCAiJWQiLCBpdmFsKTsKKwkJICAgIGZtdF9sZW4gKz0gc3RybGVuKGZtdF9hcmcpOworCQkgICAgaWYgKChmb3JtYXQgPSByZWFsbG9jKGZvcm1hdCwgZm10X2xlbikpID09IDApIHsKKwkJCXJldHVybiAtMTsKKwkJICAgIH0KKwkJICAgIHN0cmNweSgmZm9ybWF0Wy0tZl0sIGZtdF9hcmcpOworCQkgICAgZiA9IHN0cmxlbihmb3JtYXQpOworCQl9IGVsc2UgaWYgKGlzYWxwaGEoVUNoYXIoKmZtdCkpKSB7CisJCSAgICBkb25lID0gVFJVRTsKKwkJICAgIHN3aXRjaCAoKmZtdCkgeworCQkgICAgY2FzZSAnWic6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdoJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2wnOgkvKiBGQUxMVEhSVSAqLworCQkJZG9uZSA9IEZBTFNFOworCQkJdHlwZSA9ICpmbXQ7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ2knOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnZCc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICd1JzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ3gnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnWCc6CS8qIEZBTExUSFJVICovCisJCQlpZiAodHlwZSA9PSAnbCcpCisJCQkgICAgVkFfSU5UR1IobG9uZyk7CisJCQllbHNlIGlmICh0eXBlID09ICdaJykKKwkJCSAgICBWQV9JTlRHUihzaXplX3QpOworCQkJZWxzZQorCQkJICAgIFZBX0lOVEdSKGludCk7CisJCQl1c2VkID0gJ2knOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdmJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2UnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnRSc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdnJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ0cnOgkvKiBGQUxMVEhSVSAqLworCQkJVkFfRkxPQVQoZG91YmxlKTsKKwkJCXVzZWQgPSAnZic7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ2MnOgorCQkJVkFfSU5UR1IoaW50KTsKKwkJCXVzZWQgPSAnaSc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ3MnOgorCQkJVkFfUE9JTlQoY2hhciAqKTsKKwkJCWlmIChwcmVjIDwgMCkKKwkJCSAgICBwcmVjID0gc3RybGVuKHB2YWwpOworCQkJaWYgKHByZWMgPiAoaW50KSBsZW5ndGgpIHsKKwkJCSAgICBsZW5ndGggPSBsZW5ndGggKyBwcmVjOworCQkJICAgIGJ1ZmZlciA9IHR5cGVSZWFsbG9jKGNoYXIsIGxlbmd0aCwgYnVmZmVyKTsKKwkJCSAgICBpZiAoYnVmZmVyID09IDApIHsKKwkJCQlmcmVlKGZvcm1hdCk7CisJCQkJcmV0dXJuIC0xOworCQkJICAgIH0KKwkJCX0KKwkJCXVzZWQgPSAncCc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ3AnOgorCQkJVkFfUE9JTlQodm9pZCAqKTsKKwkJCXVzZWQgPSAncCc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ24nOgorCQkJVkFfUE9JTlQoaW50ICopOworCQkJdXNlZCA9IDA7CisJCQlicmVhazsKKwkJICAgIGRlZmF1bHQ6CisJCQlicmVhazsKKwkJICAgIH0KKwkJfSBlbHNlIGlmICgqZm10ID09ICcuJykgeworCQkgICAgc3RhdGUgPSBQcmVjOworCQl9IGVsc2UgaWYgKCpmbXQgPT0gJyUnKSB7CisJCSAgICBkb25lID0gVFJVRTsKKwkJICAgIHVzZWQgPSAncCc7CisJCX0KKwkgICAgfQorCSAgICBmb3JtYXRbZl0gPSAnXDAnOworCSAgICBzd2l0Y2ggKHVzZWQpIHsKKwkgICAgY2FzZSAnaSc6CisJCXNwcmludGYoYnVmZmVyLCBmb3JtYXQsIGl2YWwpOworCQlicmVhazsKKwkgICAgY2FzZSAnZic6CisJCXNwcmludGYoYnVmZmVyLCBmb3JtYXQsIGZ2YWwpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJc3ByaW50ZihidWZmZXIsIGZvcm1hdCwgcHZhbCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGxlbiArPSAoaW50KSBzdHJsZW4oYnVmZmVyKTsKKwl9IGVsc2UgeworCSAgICBmbXQrKzsKKwkgICAgbGVuKys7CisJfQorICAgIH0KKworICAgIGZyZWUoYnVmZmVyKTsKKyAgICBmcmVlKGZvcm1hdCk7CisgICAgcmV0dXJuIGxlbjsKK30KKyNlbmRpZgorCisjZGVmaW5lIG15X2J1ZmZlciBfbmNfZ2xvYmFscy5zYWZlcHJpbnRfYnVmCisjZGVmaW5lIG15X2xlbmd0aCBfbmNfZ2xvYmFscy5zYWZlcHJpbnRfdXNlZAorCisvKgorICogV3JhcHBlciBmb3IgdnNwcmludGYgdGhhdCBhbGxvY2F0ZXMgYSBidWZmZXIgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19wcmludGZfc3RyaW5nKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKyAgICBjaGFyICpyZXN1bHQgPSAwOworCisgICAgaWYgKGZtdCAhPSAwKSB7CisjaWYgVVNFX1NBRkVfU1BSSU5URgorCWludCBsZW4gPSBfbmNfcHJpbnRmX2xlbmd0aChmbXQsIGFwKTsKKworCWlmICgoaW50KSBteV9sZW5ndGggPCBsZW4gKyAxKSB7CisJICAgIG15X2xlbmd0aCA9IDIgKiAobGVuICsgMSk7CisJICAgIG15X2J1ZmZlciA9IHR5cGVSZWFsbG9jKGNoYXIsIG15X2xlbmd0aCwgbXlfYnVmZmVyKTsKKwl9CisJaWYgKG15X2J1ZmZlciAhPSAwKSB7CisJICAgICpteV9idWZmZXIgPSAnXDAnOworCSAgICBpZiAobGVuID49IDApIHsKKwkJdnNwcmludGYobXlfYnVmZmVyLCBmbXQsIGFwKTsKKwkgICAgfQorCSAgICByZXN1bHQgPSBteV9idWZmZXI7CisJfQorI2Vsc2UKKyNkZWZpbmUgTXlDb2xzIF9uY19nbG9iYWxzLnNhZmVwcmludF9jb2xzCisjZGVmaW5lIE15Um93cyBfbmNfZ2xvYmFscy5zYWZlcHJpbnRfcm93cworCisJaWYgKHNjcmVlbl9saW5lcyA+IE15Um93cyB8fCBzY3JlZW5fY29sdW1ucyA+IE15Q29scykgeworCSAgICBpZiAoc2NyZWVuX2xpbmVzID4gTXlSb3dzKQorCQlNeVJvd3MgPSBzY3JlZW5fbGluZXM7CisJICAgIGlmIChzY3JlZW5fY29sdW1ucyA+IE15Q29scykKKwkJTXlDb2xzID0gc2NyZWVuX2NvbHVtbnM7CisJICAgIG15X2xlbmd0aCA9IChNeVJvd3MgKiAoTXlDb2xzICsgMSkpICsgMTsKKwkgICAgbXlfYnVmZmVyID0gdHlwZVJlYWxsb2MoY2hhciwgbXlfbGVuZ3RoLCBteV9idWZmZXIpOworCX0KKworCWlmIChteV9idWZmZXIgIT0gMCkgeworIyBpZiBIQVZFX1ZTTlBSSU5URgorCSAgICB2c25wcmludGYobXlfYnVmZmVyLCBteV9sZW5ndGgsIGZtdCwgYXApOwkvKiBHTlUgZXh0ZW5zaW9uICovCisjIGVsc2UKKwkgICAgdnNwcmludGYobXlfYnVmZmVyLCBmbXQsIGFwKTsJLyogQU5TSSAqLworIyBlbmRpZgorCSAgICByZXN1bHQgPSBteV9idWZmZXI7CisJfQorI2VuZGlmCisgICAgfSBlbHNlIGlmIChteV9idWZmZXIgIT0gMCkgewkvKiBzZWUgX25jX2ZyZWVhbGwoKSAqLworCWZyZWUobXlfYnVmZmVyKTsKKwlteV9idWZmZXIgPSAwOworCW15X2xlbmd0aCA9IDA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2Uvc2lnYWN0aW9uLmMgYi9uY3Vyc2VzL2Jhc2Uvc2lnYWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NDJlMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS9zaWdhY3Rpb24uYwpAQCAtMCwwICsxLDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni0yMDAzICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZmlsZSBwcm92aWRlcyBzaWdhY3Rpb24oKSBlbXVsYXRpb24gdXNpbmcgc2lndmVjKCkgKi8KKy8qIFVzZSBvbmx5IGlmIHRoaXMgaXMgbm9uIFBPU0lYIHN5c3RlbSAqLworCitNT0RVTEVfSUQoIiRJZDogc2lnYWN0aW9uLmMsdiAxLjE0IDIwMDMvMTIvMDcgMDE6MDY6NTIgdG9tIEV4cCAkIikKKworc3RhdGljIGludAorX25jX3NpZ2FjdGlvbihpbnQgc2lnLCBzaWdhY3Rpb25fdCAqIHNpZ2FjdCwgc2lnYWN0aW9uX3QgKiBvc2lnYWN0KQoreworICAgIHJldHVybiBzaWd2ZWMoc2lnLCBzaWdhY3QsIG9zaWdhY3QpOworfQorCitzdGF0aWMgaW50CitfbmNfc2lnZW1wdHlzZXQoc2lnc2V0X3QgKiBtYXNrKQoreworICAgICptYXNrID0gMDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX25jX3NpZ3Byb2NtYXNrKGludCBtb2RlLCBzaWdzZXRfdCAqIG1hc2ssIHNpZ3NldF90ICogb21hc2spCit7CisgICAgc2lnc2V0X3QgY3VycmVudCA9IHNpZ3NldG1hc2soMCk7CisKKyAgICBpZiAob21hc2spCisJKm9tYXNrID0gY3VycmVudDsKKworICAgIGlmIChtb2RlID09IFNJR19CTE9DSykKKwljdXJyZW50IHw9ICptYXNrOworICAgIGVsc2UgaWYgKG1vZGUgPT0gU0lHX1VOQkxPQ0spCisJY3VycmVudCAmPSB+Km1hc2s7CisgICAgZWxzZSBpZiAobW9kZSA9PSBTSUdfU0VUTUFTSykKKwljdXJyZW50ID0gKm1hc2s7CisKKyAgICBzaWdzZXRtYXNrKGN1cnJlbnQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfbmNfc2lnYWRkc2V0KHNpZ3NldF90ICogbWFzaywgaW50IHNpZykKK3sKKyAgICAqbWFzayB8PSBzaWdtYXNrKHNpZyk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIG5vdCB1c2VkIGluIGxpYl90c3RwLmMgKi8KKyNpZiAwCitzdGF0aWMgaW50CitfbmNfc2lnc3VzcGVuZChzaWdzZXRfdCAqIG1hc2spCit7CisgICAgcmV0dXJuIHNpZ3BhdXNlKCptYXNrKTsKK30KKworc3RhdGljIGludAorX25jX3NpZ2RlbHNldChzaWdzZXRfdCAqIG1hc2ssIGludCBzaWcpCit7CisgICAgKm1hc2sgJj0gfnNpZ21hc2soc2lnKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX25jX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICogbWFzaywgaW50IHNpZykKK3sKKyAgICByZXR1cm4gKCptYXNrICYgc2lnbWFzayhzaWcpKSAhPSAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvdHJpZXMuYyBiL25jdXJzZXMvYmFzZS90cmllcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjYzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2Jhc2UvdHJpZXMuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCXRyaWVzLmMKKyoqCisqKglGdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSB0cmVlIG9mIHBhcnRpYWwtY29tcGxldGlvbnMgZm9yIGtleWNvZGVzLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogdHJpZXMuYyx2IDEuMjcgMjAwOC8wOC8xNiAxOToyMjo1NSB0b20gRXhwICQiKQorCisvKgorICogRXhwYW5kIGEga2V5Y29kZSBpbnRvIHRoZSBzdHJpbmcgdGhhdCBpdCBjb3JyZXNwb25kcyB0bywgcmV0dXJuaW5nIG51bGwgaWYKKyAqIG5vIG1hdGNoIHdhcyBmb3VuZCwgb3RoZXJ3aXNlIGFsbG9jYXRpbmcgYSBzdHJpbmcgb2YgdGhlIHJlc3VsdC4KKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX2V4cGFuZF90cnkoVFJJRVMgKiB0cmVlLCB1bnNpZ25lZCBjb2RlLCBpbnQgKmNvdW50LCBzaXplX3QgbGVuKQoreworICAgIFRSSUVTICpwdHIgPSB0cmVlOworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoY29kZSAhPSAwKSB7CisJd2hpbGUgKHB0ciAhPSAwKSB7CisJICAgIGlmICgocmVzdWx0ID0gX25jX2V4cGFuZF90cnkocHRyLT5jaGlsZCwgY29kZSwgY291bnQsIGxlbiArIDEpKQorCQkhPSAwKSB7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChwdHItPnZhbHVlID09IGNvZGUpIHsKKwkJKmNvdW50IC09IDE7CisJCWlmICgqY291bnQgPT0gLTEpIHsKKwkJICAgIHJlc3VsdCA9IHR5cGVDYWxsb2MoY2hhciwgbGVuICsgMik7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIHB0ciA9IHB0ci0+c2libGluZzsKKwl9CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkgeworCWlmIChwdHIgIT0gMCAmJiAocmVzdWx0W2xlbl0gPSAoY2hhcikgcHRyLT5jaCkgPT0gMCkKKwkgICAgKigodW5zaWduZWQgY2hhciAqKSAocmVzdWx0ICsgbGVuKSkgPSAxMjg7CisjaWZkZWYgVFJBQ0UKKwlpZiAobGVuID09IDAgJiYgVVNFX1RSQUNFRihUUkFDRV9NQVhJTVVNKSkgeworCSAgICBfdHJhY2VmKCJleHBhbmRfa2V5ICVzICVzIiwgX25jX3RyYWNlY2hhcihTUCwgY29kZSksIF9uY192aXNidWYocmVzdWx0KSk7CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisJfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBjb2RlIGZyb20gdGhlIHNwZWNpZmllZCB0cmVlLCBmcmVlaW5nIHRoZSB1bnVzZWQgbm9kZXMuICBSZXR1cm5zCisgKiB0cnVlIGlmIHRoZSBjb2RlIHdhcyBmb3VuZC9yZW1vdmVkLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfcmVtb3ZlX2tleShUUklFUyAqKiB0cmVlLCB1bnNpZ25lZCBjb2RlKQoreworICAgIFQoKFRfQ0FMTEVEKCJfbmNfcmVtb3ZlX2tleSglcCwlZCkiKSwgdHJlZSwgY29kZSkpOworCisgICAgaWYgKGNvZGUgPT0gMCkKKwlyZXR1cm5Db2RlKEZBTFNFKTsKKworICAgIHdoaWxlICgqdHJlZSAhPSAwKSB7CisJaWYgKF9uY19yZW1vdmVfa2V5KCYoKnRyZWUpLT5jaGlsZCwgY29kZSkpIHsKKwkgICAgcmV0dXJuQ29kZShUUlVFKTsKKwl9CisJaWYgKCgqdHJlZSktPnZhbHVlID09IGNvZGUpIHsKKwkgICAgaWYgKCgqdHJlZSktPmNoaWxkKSB7CisJCS8qIGRvbid0IGN1dCB0aGUgd2hvbGUgc3ViLXRyZWUgKi8KKwkJKCp0cmVlKS0+dmFsdWUgPSAwOworCSAgICB9IGVsc2UgeworCQlUUklFUyAqdG9fZnJlZSA9ICp0cmVlOworCQkqdHJlZSA9ICgqdHJlZSktPnNpYmxpbmc7CisJCWZyZWUodG9fZnJlZSk7CisJICAgIH0KKwkgICAgcmV0dXJuQ29kZShUUlVFKTsKKwl9CisJdHJlZSA9ICYoKnRyZWUpLT5zaWJsaW5nOworICAgIH0KKyAgICByZXR1cm5Db2RlKEZBTFNFKTsKK30KKworLyoKKyAqIFJlbW92ZSBhIHN0cmluZyBmcm9tIHRoZSBzcGVjaWZpZWQgdHJlZSwgZnJlZWluZyB0aGUgdW51c2VkIG5vZGVzLiAgUmV0dXJucworICogdHJ1ZSBpZiB0aGUgc3RyaW5nIHdhcyBmb3VuZC9yZW1vdmVkLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfcmVtb3ZlX3N0cmluZyhUUklFUyAqKiB0cmVlLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgVCgoVF9DQUxMRUQoIl9uY19yZW1vdmVfc3RyaW5nKCVwLCVzKSIpLCB0cmVlLCBfbmNfdmlzYnVmKHN0cmluZykpKTsKKworICAgIGlmIChzdHJpbmcgPT0gMCB8fCAqc3RyaW5nID09IDApCisJcmV0dXJuQ29kZShGQUxTRSk7CisKKyAgICB3aGlsZSAoKnRyZWUgIT0gMCkgeworCWlmIChVQ2hhcigoKnRyZWUpLT5jaCkgPT0gVUNoYXIoKnN0cmluZykpIHsKKwkgICAgaWYgKHN0cmluZ1sxXSAhPSAwKQorCQlyZXR1cm5Db2RlKF9uY19yZW1vdmVfc3RyaW5nKCYoKnRyZWUpLT5jaGlsZCwgc3RyaW5nICsgMSkpOworCSAgICBpZiAoKCp0cmVlKS0+Y2hpbGQgPT0gMCkgeworCQlUUklFUyAqdG9fZnJlZSA9ICp0cmVlOworCQkqdHJlZSA9ICgqdHJlZSktPnNpYmxpbmc7CisJCWZyZWUodG9fZnJlZSk7CisJCXJldHVybkNvZGUoVFJVRSk7CisJICAgIH0gZWxzZSB7CisJCXJldHVybkNvZGUoRkFMU0UpOworCSAgICB9CisJfQorCXRyZWUgPSAmKCp0cmVlKS0+c2libGluZzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShGQUxTRSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvdXNlX3dpbmRvdy5jIGIvbmN1cnNlcy9iYXNlL3VzZV93aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQwOGMzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL3VzZV93aW5kb3cuYwpAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDcgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHVzZV93aW5kb3cuYyx2IDEuOCAyMDA4LzA2LzA3IDE0OjEzOjQ2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3VzZV93aW5kb3coV0lORE9XICp3aW4sIE5DVVJTRVNfV0lORE9XX0NCIGZ1bmMsIHZvaWQgKmRhdGEpCit7CisgICAgaW50IGNvZGUgPSBPSzsKKworICAgIFQoKFRfQ0FMTEVEKCJ1c2Vfd2luZG93KCVwLCVwLCVwKSIpLCB3aW4sIGZ1bmMsIGRhdGEpKTsKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICBjb2RlID0gZnVuYyh3aW4sIGRhdGEpOworICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9iYXNlL3ZlcnNpb24uYyBiL25jdXJzZXMvYmFzZS92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4Mzk2NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvYmFzZS92ZXJzaW9uLmMKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTkgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiB2ZXJzaW9uLmMsdiAxLjYgMjAwNS8wMS8wMiAwMToyMzo1NCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitjdXJzZXNfdmVyc2lvbih2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJjdXJzZXNfdmVyc2lvbigpIikpKTsKKyAgICByZXR1cm5DUHRyKCJuY3Vyc2VzICIgTkNVUlNFU19WRVJTSU9OX1NUUklORyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2UvdnNzY2FuZi5jIGIvbmN1cnNlcy9iYXNlL3Zzc2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjI1M2MzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL3Zzc2NhbmYuYwpAQCAtMCwwICsxLDM1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBTdGF0ZS1tYWNoaW5lIGZhbGxiYWNrIHdyaXR0ZW4gYnkgVGhvbWFzIEUuIERpY2tleSAyMDAyICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIHN1cHBvcnQgdndzY2FudworICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgIUhBVkVfVlNTQ0FORgorCitNT0RVTEVfSUQoIiRJZDogdnNzY2FuZi5jLHYgMS4xOCAyMDA0LzA0LzAzIDIwOjI3OjAyIHRvbSBFeHAgJCIpCisKKyNpZiAhKEhBVkVfVkZTQ0FORiB8fCBIQVZFX19ET1NDQU4pCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjZGVmaW5lIExfU1FVQVJFICdbJworI2RlZmluZSBSX1NRVUFSRSAnXScKKwordHlwZWRlZiBlbnVtIHsKKyAgICBjVW5rbm93bgorICAgICxjRXJyb3IJCQkvKiBhbnl0aGluZyB0aGF0IGlzbid0IEFOU0kgKi8KKyAgICAsY0Fzc2lnbmVkCisgICAgLGNDaGFyCisgICAgLGNJbnQKKyAgICAsY0Zsb2F0CisgICAgLGNEb3VibGUKKyAgICAsY1BvaW50ZXIKKyAgICAsY0xvbmcKKyAgICAsY1Nob3J0CisgICAgLGNSYW5nZQorICAgICxjU3RyaW5nCit9IENodW5rVHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBvVW5rbm93bgorICAgICxvU2hvcnQKKyAgICAsb0xvbmcKK30gT3RoZXJUeXBlOworCit0eXBlZGVmIGVudW0geworICAgIHNVbmtub3duCisgICAgLHNQZXJjZW50CQkJLyogbGFzdCB3YXMgJyUnIGJlZ2lubmluZyBhIGZvcm1hdCAqLworICAgICxzTm9ybWFsCQkJLyogLi4uc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgKi8KKyAgICAsc0xlZnQJCQkvKiBsYXN0IHdhcyBsZWZ0IHNxdWFyZSBicmFja2V0IGJlZ2lubmluZyBhIHJhbmdlICovCisgICAgLHNSYW5nZQkJCS8qIC4uLnNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlICovCisgICAgLHNGaW5hbAkJCS8qIGxhc3QgZmluaXNoZWQgYSBmb3JtYXQgKi8KK30gU2NhblN0YXRlOworCitzdGF0aWMgQ2h1bmtUeXBlCitmaW5hbF9jaChpbnQgY2gsIE90aGVyVHlwZSBvdGhlcikKK3sKKyAgICBDaHVua1R5cGUgcmVzdWx0ID0gY1Vua25vd247CisKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAnYyc6CisJaWYgKG90aGVyID09IG9Vbmtub3duKQorCSAgICByZXN1bHQgPSBjQ2hhcjsKKwllbHNlCisJICAgIHJlc3VsdCA9IGNFcnJvcjsKKwlicmVhazsKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdYJzoKKyAgICBjYXNlICd4JzoKKwlzd2l0Y2ggKG90aGVyKSB7CisJY2FzZSBvVW5rbm93bjoKKwkgICAgcmVzdWx0ID0gY0ludDsKKwkgICAgYnJlYWs7CisJY2FzZSBvU2hvcnQ6CisJICAgIHJlc3VsdCA9IGNTaG9ydDsKKwkgICAgYnJlYWs7CisJY2FzZSBvTG9uZzoKKwkgICAgcmVzdWx0ID0gY0xvbmc7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKKyAgICBjYXNlICdFJzoKKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlICdnJzoKKwlzd2l0Y2ggKG90aGVyKSB7CisJY2FzZSBvVW5rbm93bjoKKwkgICAgcmVzdWx0ID0gY0Zsb2F0OworCSAgICBicmVhazsKKwljYXNlIG9TaG9ydDoKKwkgICAgcmVzdWx0ID0gY0Vycm9yOworCSAgICBicmVhazsKKwljYXNlIG9Mb25nOgorCSAgICByZXN1bHQgPSBjRG91YmxlOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisgICAgY2FzZSAnbic6CisJaWYgKG90aGVyID09IG9Vbmtub3duKQorCSAgICByZXN1bHQgPSBjQXNzaWduZWQ7CisJZWxzZQorCSAgICByZXN1bHQgPSBjRXJyb3I7CisJYnJlYWs7CisgICAgY2FzZSAncCc6CisJaWYgKG90aGVyID09IG9Vbmtub3duKQorCSAgICByZXN1bHQgPSBjUG9pbnRlcjsKKwllbHNlCisJICAgIHJlc3VsdCA9IGNFcnJvcjsKKwlicmVhazsKKyAgICBjYXNlICdzJzoKKwlpZiAob3RoZXIgPT0gb1Vua25vd24pCisJICAgIHJlc3VsdCA9IGNTdHJpbmc7CisJZWxzZQorCSAgICByZXN1bHQgPSBjRXJyb3I7CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBPdGhlclR5cGUKK290aGVyX2NoKGludCBjaCkKK3sKKyAgICBPdGhlclR5cGUgcmVzdWx0ID0gb1Vua25vd247CisgICAgc3dpdGNoIChjaCkgeworICAgIGNhc2UgJ2gnOgorCXJlc3VsdCA9IG9TaG9ydDsKKwlicmVhazsKKyAgICBjYXNlICdsJzoKKwlyZXN1bHQgPSBvTG9uZzsKKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisvKlZBUkFSR1MyKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Zzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApCit7CisjaWYgSEFWRV9WRlNDQU5GIHx8IEhBVkVfX0RPU0NBTgorICAgIC8qCisgICAgICogVGhpcyBjb2RlIHNob3VsZCB3b3JrIG9uIGFueXRoaW5nIGRlc2NlbmRlZCBmcm9tIEFUJlQgU1ZyMS4KKyAgICAgKi8KKyAgICBGSUxFIHN0cmJ1ZjsKKworICAgIHN0cmJ1Zi5fZmxhZyA9IF9JT1JFQUQ7CisgICAgc3RyYnVmLl9wdHIgPSBzdHJidWYuX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKSBzdHI7CisgICAgc3RyYnVmLl9jbnQgPSBzdHJsZW4oc3RyKTsKKyAgICBzdHJidWYuX2ZpbGUgPSBfTkZJTEU7CisKKyNpZiBIQVZFX1ZGU0NBTkYKKyAgICByZXR1cm4gKHZmc2NhbmYoJnN0cmJ1ZiwgZm9ybWF0LCBhcCkpOworI2Vsc2UKKyAgICByZXR1cm4gKF9kb3NjYW4oJnN0cmJ1ZiwgZm9ybWF0LCBhcCkpOworI2VuZGlmCisjZWxzZQorICAgIHN0YXRpYyBpbnQgY2FuX2NvbnZlcnQgPSAtMTsKKworICAgIGludCBhc3NpZ25lZCA9IDA7CisgICAgaW50IGNvbnN1bWVkID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJ2c3NjYW5mKCVzLCVzLC4uLikiKSwKKyAgICAgICBfbmNfdmlzYnVmMigxLCBzdHIpLAorICAgICAgIF9uY192aXNidWYyKDIsIGZvcm1hdCkpKTsKKworICAgIC8qCisgICAgICogVGhpcyByZWxpZXMgb24gaGF2aW5nIGEgd29ya2luZyAiJW4iIGZvcm1hdCBjb252ZXJzaW9uLiAgQ2hlY2sgaWYgaXQKKyAgICAgKiB3b3Jrcy4gIE9ubHkgdmVyeSBvbGQgQyBsaWJyYXJpZXMgZG8gbm90IHN1cHBvcnQgaXQuCisgICAgICoKKyAgICAgKiBGSVhNRTogbW92ZSB0aGlzIGNoZWNrIGludG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICAgICovCisgICAgaWYgKGNhbl9jb252ZXJ0IDwgMCkgeworCWludCBjaGVjazE7CisJaW50IGNoZWNrMjsKKwlpZiAoc3NjYW5mKCIxMjMiLCAiJWQlbiIsICZjaGVjazEsICZjaGVjazIpID4gMAorCSAgICAmJiBjaGVjazEgPT0gMTIzCisJICAgICYmIGNoZWNrMiA9PSAzKSB7CisJICAgIGNhbl9jb252ZXJ0ID0gMTsKKwl9IGVsc2UgeworCSAgICBjYW5fY29udmVydCA9IDA7CisJfQorICAgIH0KKworICAgIGlmIChjYW5fY29udmVydCkgeworCXNpemVfdCBsZW5fZm10ID0gc3RybGVuKGZvcm1hdCkgKyAzMjsKKwljaGFyICpteV9mbXQgPSBtYWxsb2MobGVuX2ZtdCk7CisJQ2h1bmtUeXBlIGNodW5rLCBjdGVzdDsKKwlPdGhlclR5cGUgb3RoZXIsIG90ZXN0OworCVNjYW5TdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBuOworCWludCBlYXRlbjsKKwl2b2lkICpwb2ludGVyOworCisJaWYgKG15X2ZtdCAhPSAwKSB7CisJICAgIC8qCisJICAgICAqIFNwbGl0IHRoZSBvcmlnaW5hbCBmb3JtYXQgaW50byBjaHVua3MsIGFkZGluZyBhICIlbiIgdG8gdGhlIGVuZAorCSAgICAgKiBvZiBlYWNoIChleGNlcHQgb2YgY291cnNlIGlmIGl0IHVzZWQgJW4pLCBhbmQgdXNlIHRoYXQKKwkgICAgICogaW5mb3JtYXRpb24gdG8gZGVjaWRlIHdoZXJlIHRvIHN0YXJ0IHNjYW5uaW5nIHRoZSBuZXh0IGNodW5rLgorCSAgICAgKgorCSAgICAgKiBGSVhNRTogIGRvZXMgJW4gY291bnQgYnl0ZXMgb3IgY2hhcmFjdGVycz8gIElmIHRoZSBsYXR0ZXIsIHRoaXMKKwkgICAgICogd2lsbCByZXF1aXJlIGZ1cnRoZXIgd29yayBmb3IgbXVsdGlieXRlIHN0cmluZ3MuCisJICAgICAqLworCSAgICB3aGlsZSAoKmZvcm1hdCAhPSAnXDAnKSB7CisJCS8qIGZpbmQgYSBjaHVuayAqLworCQlzdGF0ZSA9IHNVbmtub3duOworCQljaHVuayA9IGNVbmtub3duOworCQlvdGhlciA9IG9Vbmtub3duOworCQlwb2ludGVyID0gMDsKKwkJZm9yIChuID0gMDsgZm9ybWF0W25dICE9IDAgJiYgc3RhdGUgIT0gc0ZpbmFsOyArK24pIHsKKwkJICAgIG15X2ZtdFtuXSA9IGZvcm1hdFtuXTsKKwkJICAgIHN3aXRjaCAoc3RhdGUpIHsKKwkJICAgIGNhc2Ugc1Vua25vd246CisJCQlpZiAoZm9ybWF0W25dID09ICclJykKKwkJCSAgICBzdGF0ZSA9IHNQZXJjZW50OworCQkJYnJlYWs7CisJCSAgICBjYXNlIHNQZXJjZW50OgorCQkJaWYgKGZvcm1hdFtuXSA9PSAnJScpIHsKKwkJCSAgICBzdGF0ZSA9IHNVbmtub3duOworCQkJfSBlbHNlIGlmIChmb3JtYXRbbl0gPT0gTF9TUVVBUkUpIHsKKwkJCSAgICBzdGF0ZSA9IHNMZWZ0OworCQkJfSBlbHNlIHsKKwkJCSAgICBzdGF0ZSA9IHNOb3JtYWw7CisJCQkgICAgLS1uOworCQkJfQorCQkJYnJlYWs7CisJCSAgICBjYXNlIHNMZWZ0OgorCQkJc3RhdGUgPSBzUmFuZ2U7CisJCQlpZiAoZm9ybWF0W25dID09ICdeJykgeworCQkJICAgICsrbjsKKwkJCSAgICBteV9mbXRbbl0gPSBmb3JtYXRbbl07CisJCQl9CisJCQlicmVhazsKKwkJICAgIGNhc2Ugc1JhbmdlOgorCQkJaWYgKGZvcm1hdFtuXSA9PSBSX1NRVUFSRSkgeworCQkJICAgIHN0YXRlID0gc0ZpbmFsOworCQkJICAgIGNodW5rID0gY1JhbmdlOworCQkJfQorCQkJYnJlYWs7CisJCSAgICBjYXNlIHNOb3JtYWw6CisJCQlpZiAoZm9ybWF0W25dID09ICcqJykgeworCQkJICAgIHN0YXRlID0gc1Vua25vd247CisJCQl9IGVsc2UgeworCQkJICAgIGlmICgoY3Rlc3QgPSBmaW5hbF9jaChmb3JtYXRbbl0sIG90aGVyKSkgIT0gY1Vua25vd24pIHsKKwkJCQlzdGF0ZSA9IHNGaW5hbDsKKwkJCQljaHVuayA9IGN0ZXN0OworCQkJICAgIH0gZWxzZSBpZiAoKG90ZXN0ID0gb3RoZXJfY2goZm9ybWF0W25dKSkgIT0gb1Vua25vd24pIHsKKwkJCQlvdGhlciA9IG90ZXN0OworCQkJICAgIH0gZWxzZSBpZiAoaXNhbHBoYShVQ2hhcihmb3JtYXRbbl0pKSkgeworCQkJCXN0YXRlID0gc0ZpbmFsOworCQkJCWNodW5rID0gY0Vycm9yOworCQkJICAgIH0KKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSBzRmluYWw6CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlteV9mbXRbbl0gPSAnXDAnOworCQlmb3JtYXQgKz0gbjsKKworCQlpZiAoY2h1bmsgPT0gY1Vua25vd24KKwkJICAgIHx8IGNodW5rID09IGNFcnJvcikgeworCQkgICAgaWYgKGFzc2lnbmVkID09IDApCisJCQlhc3NpZ25lZCA9IEVPRjsKKwkJICAgIGJyZWFrOworCQl9CisKKwkJLyogYWRkICVuLCBpZiB0aGUgZm9ybWF0IHdhcyBub3QgdGhhdCAqLworCQlpZiAoY2h1bmsgIT0gY0Fzc2lnbmVkKSB7CisJCSAgICBzdHJjYXQobXlfZm10LCAiJW4iKTsKKwkJfQorCisJCXN3aXRjaCAoY2h1bmspIHsKKwkJY2FzZSBjQXNzaWduZWQ6CisJCSAgICBzdHJjYXQobXlfZm10LCAiJW4iKTsKKwkJICAgIHBvaW50ZXIgPSAmZWF0ZW47CisJCSAgICBicmVhazsKKwkJY2FzZSBjSW50OgorCQkgICAgcG9pbnRlciA9IHZhX2FyZyhhcCwgaW50ICopOworCQkgICAgYnJlYWs7CisJCWNhc2UgY1Nob3J0OgorCQkgICAgcG9pbnRlciA9IHZhX2FyZyhhcCwgc2hvcnQgKik7CisJCSAgICBicmVhazsKKwkJY2FzZSBjRmxvYXQ6CisJCSAgICBwb2ludGVyID0gdmFfYXJnKGFwLCBmbG9hdCAqKTsKKwkJICAgIGJyZWFrOworCQljYXNlIGNEb3VibGU6CisJCSAgICBwb2ludGVyID0gdmFfYXJnKGFwLCBkb3VibGUgKik7CisJCSAgICBicmVhazsKKwkJY2FzZSBjTG9uZzoKKwkJICAgIHBvaW50ZXIgPSB2YV9hcmcoYXAsIGxvbmcgKik7CisJCSAgICBicmVhazsKKwkJY2FzZSBjUG9pbnRlcjoKKwkJICAgIHBvaW50ZXIgPSB2YV9hcmcoYXAsIHZvaWQgKik7CisJCSAgICBicmVhazsKKwkJY2FzZSBjQ2hhcjoKKwkJY2FzZSBjUmFuZ2U6CisJCWNhc2UgY1N0cmluZzoKKwkJICAgIHBvaW50ZXIgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCSAgICBicmVhazsKKwkJY2FzZSBjRXJyb3I6CisJCWNhc2UgY1Vua25vd246CisJCSAgICBicmVhazsKKwkJfQorCQkvKiBkbyB0aGUgY29udmVyc2lvbiAqLworCQlUKCgiLi4uY29udmVydGluZyBjaHVuayAjJWQgdHlwZSAlZCglcywlcykiLAorCQkgICBhc3NpZ25lZCArIDEsIGNodW5rLAorCQkgICBfbmNfdmlzYnVmMigxLCBzdHIgKyBjb25zdW1lZCksCisJCSAgIF9uY192aXNidWYyKDIsIG15X2ZtdCkpKTsKKwkJaWYgKHNzY2FuZihzdHIgKyBjb25zdW1lZCwgbXlfZm10LCBwb2ludGVyLCAmZWF0ZW4pID4gMCkKKwkJICAgIGNvbnN1bWVkICs9IGVhdGVuOworCQllbHNlCisJCSAgICBicmVhazsKKwkJKythc3NpZ25lZDsKKwkgICAgfQorCSAgICBmcmVlKG15X2ZtdCk7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKGFzc2lnbmVkKTsKKyNlbmRpZgorfQorI2Vsc2UKK2V4dGVybgorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY192c3NjYW5mKHZvaWQpOwkJLyogcXVpZXQncyBnY2Mgd2FybmluZyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY192c3NjYW5mKHZvaWQpCit7Cit9CQkJCS8qIG5vbmVtcHR5IGZvciBzdHJpY3QgQU5TSSBjb21waWxlcnMgKi8KKyNlbmRpZiAvKiAhSEFWRV9WU1NDQU5GICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzL2Jhc2Uvd3Jlc2l6ZS5jIGIvbmN1cnNlcy9iYXNlL3dyZXNpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDYwODVhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9iYXNlL3dyZXNpemUuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni0yMDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiB3cmVzaXplLmMsdiAxLjI5IDIwMDgvMDYvMDcgMTM6NTk6MDEgdG9tIEV4cCAkIikKKworc3RhdGljIGludAorY2xlYW51cF9saW5lcyhzdHJ1Y3QgbGRhdCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICB3aGlsZSAoLS1sZW5ndGggPj0gMCkKKwlmcmVlKGRhdGFbbGVuZ3RoXS50ZXh0KTsKKyAgICBmcmVlKGRhdGEpOworICAgIHJldHVybiBFUlI7Cit9CisKKy8qCisgKiBJZiB3ZSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBsZGF0IHN0cnVjdHMsIHdlIHdpbGwgaGF2ZSB0byByZXBhaXIgcG9pbnRlcnMKKyAqIHVzZWQgaW4gc3Vid2luZG93cy4KKyAqLworc3RhdGljIHZvaWQKK3JlcGFpcl9zdWJ3aW5kb3dzKFdJTkRPVyAqY21wKQoreworICAgIFdJTkRPV0xJU1QgKndwOworICAgIHN0cnVjdCBsZGF0ICpwbGluZSA9IGNtcC0+X2xpbmU7CisgICAgaW50IHJvdzsKKworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgZm9yIChlYWNoX3dpbmRvdyh3cCkpIHsKKwlXSU5ET1cgKnRzdCA9ICYod3AtPndpbik7CisKKwlpZiAodHN0LT5fcGFyZW50ID09IGNtcCkgeworCisJICAgIGlmICh0c3QtPl9wYXJ5ID4gY21wLT5fbWF4eSkKKwkJdHN0LT5fcGFyeSA9IGNtcC0+X21heHk7CisJICAgIGlmICh0c3QtPl9wYXJ4ID4gY21wLT5fbWF4eCkKKwkJdHN0LT5fcGFyeCA9IGNtcC0+X21heHg7CisKKwkgICAgaWYgKHRzdC0+X21heHkgKyB0c3QtPl9wYXJ5ID4gY21wLT5fbWF4eSkKKwkJdHN0LT5fbWF4eSA9IGNtcC0+X21heHkgLSB0c3QtPl9wYXJ5OworCSAgICBpZiAodHN0LT5fbWF4eCArIHRzdC0+X3BhcnggPiBjbXAtPl9tYXh4KQorCQl0c3QtPl9tYXh4ID0gY21wLT5fbWF4eCAtIHRzdC0+X3Bhcng7CisKKwkgICAgZm9yIChyb3cgPSAwOyByb3cgPD0gdHN0LT5fbWF4eTsgKytyb3cpIHsKKwkJdHN0LT5fbGluZVtyb3ddLnRleHQgPSAmcGxpbmVbdHN0LT5fcGFyeSArIHJvd10udGV4dFt0c3QtPl9wYXJ4XTsKKwkgICAgfQorCSAgICByZXBhaXJfc3Vid2luZG93cyh0c3QpOworCX0KKyAgICB9CisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKK30KKworLyoKKyAqIFJlYWxsb2NhdGUgYSBjdXJzZXMgV0lORE9XIHN0cnVjdCB0byBlaXRoZXIgc2hyaW5rIG9yIGdyb3cgdG8gdGhlIHNwZWNpZmllZAorICogbmV3IGxpbmVzL2NvbHVtbnMuICBJZiBpdCBncm93cywgdGhlIG5ldyBjaGFyYWN0ZXIgY2VsbHMgYXJlIGZpbGxlZCB3aXRoCisgKiBibGFua3MuICBUaGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yIHJlcGFpbnRpbmcgdGhlIGJsYW5rIGFyZWEuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3dyZXNpemUoV0lORE9XICp3aW4sIGludCBUb0xpbmVzLCBpbnQgVG9Db2xzKQoreworICAgIGludCBjb2wsIHJvdywgc2l6ZV94LCBzaXplX3k7CisgICAgc3RydWN0IGxkYXQgKnBsaW5lOworICAgIHN0cnVjdCBsZGF0ICpuZXdfbGluZXMgPSAwOworCisjaWZkZWYgVFJBQ0UKKyAgICBUKChUX0NBTExFRCgid3Jlc2l6ZSglcCwlZCwlZCkiKSwgd2luLCBUb0xpbmVzLCBUb0NvbHMpKTsKKyAgICBpZiAod2luKSB7CisJVFIoVFJBQ0VfVVBEQVRFLCAoIi4uLmJlZyAoJWxkLCAlbGQpLCBtYXgoJWxkLCVsZCksIHJlZyglbGQsJWxkKSIsCisJCQkgIChsb25nKSB3aW4tPl9iZWd5LCAobG9uZykgd2luLT5fYmVneCwKKwkJCSAgKGxvbmcpIHdpbi0+X21heHksIChsb25nKSB3aW4tPl9tYXh4LAorCQkJICAobG9uZykgd2luLT5fcmVndG9wLCAobG9uZykgd2luLT5fcmVnYm90dG9tKSk7CisJaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFKSkgeworCSAgICBfdHJhY2VkdW1wKCIuLi5iZWZvcmUiLCB3aW4pOworCSAgICBfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmICghd2luIHx8IC0tVG9MaW5lcyA8IDAgfHwgLS1Ub0NvbHMgPCAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIHNpemVfeCA9IHdpbi0+X21heHg7CisgICAgc2l6ZV95ID0gd2luLT5fbWF4eTsKKworICAgIGlmIChUb0xpbmVzID09IHNpemVfeQorCSYmIFRvQ29scyA9PSBzaXplX3gpCisJcmV0dXJuQ29kZShPSyk7CisKKyAgICBpZiAoKHdpbi0+X2ZsYWdzICYgX1NVQldJTikpIHsKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBuZXcgbGltaXRzIHdpbGwgZml0IGludG8gdGhlIHBhcmVudCB3aW5kb3cncyBzaXplLiAgSWYKKwkgKiBub3QsIGRvIG5vdCByZXNpemUuICBXZSBjb3VsZCBhZGp1c3QgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdWJ3aW5kb3csCisJICogYnV0IHRoZSBhcHBsaWNhdGlvbiBtYXkgbm90IGxpa2UgdGhhdC4KKwkgKi8KKwlpZiAod2luLT5fcGFyeSArIFRvTGluZXMgPiB3aW4tPl9wYXJlbnQtPl9tYXh5CisJICAgIHx8IHdpbi0+X3BhcnggKyBUb0NvbHMgPiB3aW4tPl9wYXJlbnQtPl9tYXh4KSB7CisJICAgIHJldHVybkNvZGUoRVJSKTsKKwl9CisJcGxpbmUgPSB3aW4tPl9wYXJlbnQtPl9saW5lOworICAgIH0gZWxzZSB7CisJcGxpbmUgPSAwOworICAgIH0KKworICAgIC8qCisgICAgICogQWxsb2NhdGUgbmV3IG1lbW9yeSBhcyBuZWVkZWQuICBEbyB0aGUgYWxsb2NhdGlvbnMgd2l0aG91dCBtb2RpZnlpbmcKKyAgICAgKiB0aGUgb3JpZ2luYWwgd2luZG93LCBpbiBjYXNlIGFuIGFsbG9jYXRpb24gZmFpbHMuICBBbHdheXMgYWxsb2NhdGUKKyAgICAgKiAoYXQgbGVhc3QgdGVtcG9yYXJpbHkpIHRoZSBhcnJheSBwb2ludGluZyB0byB0aGUgaW5kaXZpZHVhbCBsaW5lcy4KKyAgICAgKi8KKyAgICBuZXdfbGluZXMgPSB0eXBlQ2FsbG9jKHN0cnVjdCBsZGF0LCAodW5zaWduZWQpIChUb0xpbmVzICsgMSkpOworICAgIGlmIChuZXdfbGluZXMgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICAvKgorICAgICAqIEZvciBlYWNoIGxpbmUgaW4gdGhlIHRhcmdldCwgYWxsb2NhdGUgb3IgYWRqdXN0IHBvaW50ZXJzIGZvciB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRleHQsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgYSB3aW5kb3cgb3IgYQorICAgICAqIHN1YndpbmRvdy4KKyAgICAgKi8KKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8PSBUb0xpbmVzOyArK3JvdykgeworCWludCBiZWdpbiA9IChyb3cgPiBzaXplX3kpID8gMCA6IChzaXplX3ggKyAxKTsKKwlpbnQgZW5kID0gVG9Db2xzOworCU5DVVJTRVNfQ0hfVCAqczsKKworCWlmICghKHdpbi0+X2ZsYWdzICYgX1NVQldJTikpIHsKKwkgICAgaWYgKHJvdyA8PSBzaXplX3kpIHsKKwkJaWYgKFRvQ29scyAhPSBzaXplX3gpIHsKKwkJICAgIGlmICgocyA9IHR5cGVNYWxsb2MoTkNVUlNFU19DSF9ULCBUb0NvbHMgKyAxKSkgPT0gMCkKKwkJCXJldHVybkNvZGUoY2xlYW51cF9saW5lcyhuZXdfbGluZXMsIHJvdykpOworCQkgICAgZm9yIChjb2wgPSAwOyBjb2wgPD0gVG9Db2xzOyArK2NvbCkgeworCQkJc1tjb2xdID0gKGNvbCA8PSBzaXplX3gKKwkJCQkgID8gd2luLT5fbGluZVtyb3ddLnRleHRbY29sXQorCQkJCSAgOiB3aW4tPl9uY19ia2dkKTsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIHMgPSB3aW4tPl9saW5lW3Jvd10udGV4dDsKKwkJfQorCSAgICB9IGVsc2UgeworCQlpZiAoKHMgPSB0eXBlTWFsbG9jKE5DVVJTRVNfQ0hfVCwgVG9Db2xzICsgMSkpID09IDApCisJCSAgICByZXR1cm5Db2RlKGNsZWFudXBfbGluZXMobmV3X2xpbmVzLCByb3cpKTsKKwkJZm9yIChjb2wgPSAwOyBjb2wgPD0gVG9Db2xzOyArK2NvbCkKKwkJICAgIHNbY29sXSA9IHdpbi0+X25jX2JrZ2Q7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBzID0gJnBsaW5lW3dpbi0+X3BhcnkgKyByb3ddLnRleHRbd2luLT5fcGFyeF07CisJfQorCisJaWZfVVNFX1NDUk9MTF9ISU5UUyhuZXdfbGluZXNbcm93XS5vbGRpbmRleCA9IHJvdyk7CisJaWYgKHJvdyA8PSBzaXplX3kpIHsKKwkgICAgbmV3X2xpbmVzW3Jvd10uZmlyc3RjaGFyID0gd2luLT5fbGluZVtyb3ddLmZpcnN0Y2hhcjsKKwkgICAgbmV3X2xpbmVzW3Jvd10ubGFzdGNoYXIgPSB3aW4tPl9saW5lW3Jvd10ubGFzdGNoYXI7CisJfQorCWlmICgoVG9Db2xzICE9IHNpemVfeCkgfHwgKHJvdyA+IHNpemVfeSkpIHsKKwkgICAgaWYgKGVuZCA+PSBiZWdpbikgewkvKiBncm93aW5nICovCisJCWlmIChuZXdfbGluZXNbcm93XS5maXJzdGNoYXIgPCBiZWdpbikKKwkJICAgIG5ld19saW5lc1tyb3ddLmZpcnN0Y2hhciA9IGJlZ2luOworCSAgICB9IGVsc2UgewkJLyogc2hyaW5raW5nICovCisJCW5ld19saW5lc1tyb3ddLmZpcnN0Y2hhciA9IDA7CisJICAgIH0KKwkgICAgbmV3X2xpbmVzW3Jvd10ubGFzdGNoYXIgPSBUb0NvbHM7CisJfQorCW5ld19saW5lc1tyb3ddLnRleHQgPSBzOworICAgIH0KKworICAgIC8qCisgICAgICogRGlzcG9zZSBvZiB1bndhbnRlZCBtZW1vcnkuCisgICAgICovCisgICAgaWYgKCEod2luLT5fZmxhZ3MgJiBfU1VCV0lOKSkgeworCWlmIChUb0NvbHMgPT0gc2l6ZV94KSB7CisJICAgIGZvciAocm93ID0gVG9MaW5lcyArIDE7IHJvdyA8PSBzaXplX3k7IHJvdysrKSB7CisJCWZyZWUod2luLT5fbGluZVtyb3ddLnRleHQpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZm9yIChyb3cgPSAwOyByb3cgPD0gc2l6ZV95OyByb3crKykgeworCQlmcmVlKHdpbi0+X2xpbmVbcm93XS50ZXh0KTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBmcmVlKHdpbi0+X2xpbmUpOworICAgIHdpbi0+X2xpbmUgPSBuZXdfbGluZXM7CisKKyAgICAvKgorICAgICAqIEZpbmFsbHksIGFkanVzdCB0aGUgcGFyYW1ldGVycyBzaG93aW5nIHNjcmVlbiBzaXplIGFuZCBjdXJzb3IKKyAgICAgKiBwb3NpdGlvbjoKKyAgICAgKi8KKyAgICB3aW4tPl9tYXh4ID0gVG9Db2xzOworICAgIHdpbi0+X21heHkgPSBUb0xpbmVzOworCisgICAgaWYgKHdpbi0+X3JlZ3RvcCA+IHdpbi0+X21heHkpCisJd2luLT5fcmVndG9wID0gd2luLT5fbWF4eTsKKyAgICBpZiAod2luLT5fcmVnYm90dG9tID4gd2luLT5fbWF4eQorCXx8IHdpbi0+X3JlZ2JvdHRvbSA9PSBzaXplX3kpCisJd2luLT5fcmVnYm90dG9tID0gd2luLT5fbWF4eTsKKworICAgIGlmICh3aW4tPl9jdXJ4ID4gd2luLT5fbWF4eCkKKwl3aW4tPl9jdXJ4ID0gd2luLT5fbWF4eDsKKyAgICBpZiAod2luLT5fY3VyeSA+IHdpbi0+X21heHkpCisJd2luLT5fY3VyeSA9IHdpbi0+X21heHk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBzdWJ3aW5kb3dzIG9mIHRoaXMgb25lLCBhbmQgcmVhZGp1c3QgcG9pbnRlcnMgdG8gb3VyIHRleHQsCisgICAgICogaWYgbmVlZGVkLgorICAgICAqLworICAgIHJlcGFpcl9zdWJ3aW5kb3dzKHdpbik7CisKKyNpZmRlZiBUUkFDRQorICAgIFRSKFRSQUNFX1VQREFURSwgKCIuLi5iZWcgKCVsZCwgJWxkKSwgbWF4KCVsZCwlbGQpLCByZWcoJWxkLCVsZCkiLAorCQkgICAgICAobG9uZykgd2luLT5fYmVneSwgKGxvbmcpIHdpbi0+X2JlZ3gsCisJCSAgICAgIChsb25nKSB3aW4tPl9tYXh5LCAobG9uZykgd2luLT5fbWF4eCwKKwkJICAgICAgKGxvbmcpIHdpbi0+X3JlZ3RvcCwgKGxvbmcpIHdpbi0+X3JlZ2JvdHRvbSkpOworICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSkpIHsKKwlfdHJhY2VkdW1wKCIuLi5hZnRlcjoiLCB3aW4pOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL2N1cnNlcy5wcml2LmggYi9uY3Vyc2VzL2N1cnNlcy5wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllMTMxOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvY3Vyc2VzLnByaXYuaApAQCAtMCwwICsxLDE3MjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKgorICogJElkOiBjdXJzZXMucHJpdi5oLHYgMS4zOTQgMjAwOC8xMC8wNCAyMTozNzo0NSB0b20gRXhwICQKKyAqCisgKgljdXJzZXMucHJpdi5oCisgKgorICoJSGVhZGVyIGZpbGUgZm9yIGN1cnNlcyBsaWJyYXJ5IG9iamVjdHMgd2hpY2ggYXJlIHByaXZhdGUgdG8KKyAqCXRoZSBsaWJyYXJ5LgorICoKKyAqLworCisjaWZuZGVmIENVUlNFU19QUklWX0gKKyNkZWZpbmUgQ1VSU0VTX1BSSVZfSCAxCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2RsbC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorCisjaWYgVVNFX1JDU19JRFMKKyNkZWZpbmUgTU9EVUxFX0lEKGlkKSBzdGF0aWMgY29uc3QgY2hhciBJZGVudFtdID0gaWQ7CisjZWxzZQorI2RlZmluZSBNT0RVTEVfSUQoaWQpIC8qbm90aGluZyovCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19CU0RUWVBFU19ICisjaW5jbHVkZSA8c3lzL2JzZHR5cGVzLmg+CS8qIG5lZWRlZCBmb3IgSVNDICovCisjZW5kaWYKKworI2lmIEhBVkVfTElNSVRTX0gKKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxpZiBIQVZFX1NZU19QQVJBTV9ICisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmbmRlZiBQQVRIX01BWAorIyBpZiBkZWZpbmVkKF9QT1NJWF9QQVRIX01BWCkKKyMgIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKyMgZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjICBkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgorIyBlbHNlCisjICBkZWZpbmUgUEFUSF9NQVggMjU1CS8qIHRoZSBQb3NpeCBtaW5pbXVtIHBhdGgtc2l6ZSAqLworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBERUNMX0VSUk5PCitleHRlcm4gaW50IGVycm5vOworI2VuZGlmCisKKyNpbmNsdWRlIDxuY19wYW5lbC5oPgorCisvKiBTb21lIHN5c3RlbXMgaGF2ZSBhIGJyb2tlbiAnc2VsZWN0KCknLCBidXQgd29ya2FibGUgJ3BvbGwoKScuICBVc2UgdGhhdCAqLworI2lmIEhBVkVfV09SS0lOR19QT0xMCisjZGVmaW5lIFVTRV9GVU5DX1BPTEwgMQorI2lmIEhBVkVfUE9MTF9ICisjaW5jbHVkZSA8cG9sbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCisjZWxzZQorI2RlZmluZSBVU0VfRlVOQ19QT0xMIDAKKyNlbmRpZgorCisvKiBpbmNsdWRlIHNpZ25hbC5oIGJlZm9yZSBjdXJzZXMuaCB0byB3b3JrLWFyb3VuZCBkZWZlY3QgaW4gZ2xpYmMgMi4xLjMgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworLyogQWxlc3NhbmRybyBSdWJpbmkncyBHUE0gKGdlbmVyYWwtcHVycG9zZSBtb3VzZSkgKi8KKyNpZiBIQVZFX0xJQkdQTSAmJiBIQVZFX0dQTV9ICisjZGVmaW5lIFVTRV9HUE1fU1VQUE9SVCAxCisjZWxzZQorI2RlZmluZSBVU0VfR1BNX1NVUFBPUlQgMAorI2VuZGlmCisKKy8qIFFOWCBtb3VzZSBzdXBwb3J0ICovCisjaWYgZGVmaW5lZChfX1FOWF9fKSAmJiAhZGVmaW5lZChfX1FOWE5UT19fKQorI2RlZmluZSBVU0VfUU5YX01PVVNFIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9RTlhfTU9VU0UgMAorI2VuZGlmCisKKy8qIEVNWCBtb3VzZSBzdXBwb3J0ICovCisjaWZkZWYgX19FTVhfXworI2RlZmluZSBVU0VfRU1YX01PVVNFIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9FTVhfTU9VU0UgMAorI2VuZGlmCisKKyNkZWZpbmUgREVGQVVMVF9NQVhDTElDSyAxNjYKKyNkZWZpbmUgRVZfTUFYCQk4CS8qIHNpemUgb2YgbW91c2UgY2lyY3VsYXIgZXZlbnQgcXVldWUgKi8KKworLyoKKyAqIElmIHdlIGRvbid0IGhhdmUgc2lnbmFscyB0byBzdXBwb3J0IGl0LCBkb24ndCBhZGQgYSBzaWd3aW5jaCBoYW5kbGVyLgorICogSW4gYW55IGNhc2UsIHJlc2l6aW5nIGlzIGFuIGV4dGVuZGVkIGZlYXR1cmUuICBVc2UgaXQgaWYgd2UndmUgZ290IGl0LgorICovCisjaWYgIU5DVVJTRVNfRVhUX0ZVTkNTCisjdW5kZWYgSEFWRV9TSVpFQ0hBTkdFCisjZGVmaW5lIEhBVkVfU0laRUNIQU5HRSAwCisjZW5kaWYKKworI2lmIEhBVkVfU0laRUNIQU5HRSAmJiBVU0VfU0lHV0lOQ0ggJiYgZGVmaW5lZChTSUdXSU5DSCkKKyNkZWZpbmUgVVNFX1NJWkVDSEFOR0UgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1NJWkVDSEFOR0UgMAorI3VuZGVmIFVTRV9TSUdXSU5DSAorI2RlZmluZSBVU0VfU0lHV0lOQ0ggMAorI2VuZGlmCisKKy8qCisgKiBJZiBkZXNpcmVkLCBvbmUgY2FuIGNvbmZpZ3VyZSB0aGlzLCBkaXNhYmxpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQKKyAqIHBvaW50IHRvIGN1c3RvbSB0ZXJtaW5mby90ZXJtY2FwIGxvY2F0aW9ucy4KKyAqLworI2lmZGVmIFVTRV9ST09UX0VOVklST04KKyNkZWZpbmUgdXNlX3Rlcm1pbmZvX3ZhcnMoKSAxCisjZWxzZQorI2RlZmluZSB1c2VfdGVybWluZm9fdmFycygpIF9uY19lbnZfYWNjZXNzKCkKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19lbnZfYWNjZXNzICh2b2lkKTsKKyNlbmRpZgorCisvKgorICogTm90IGFsbCBwbGF0Zm9ybXMgaGF2ZSBtZW1tb3ZlOyBzb21lIGhhdmUgYW4gZXF1aXZhbGVudCBiY29weS4gIChTb21lIG1heQorICogaGF2ZSBuZWl0aGVyKS4KKyAqLworI2lmIFVTRV9PS19CQ09QWQorI2RlZmluZSBtZW1tb3ZlKGQscyxuKSBiY29weShzLGQsbikKKyNlbGlmIFVTRV9NWV9NRU1NT1ZFCisjZGVmaW5lIG1lbW1vdmUoZCxzLG4pIF9uY19tZW1tb3ZlKGQscyxuKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQgKikgX25jX21lbW1vdmUgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworI2VuZGlmCisKKy8qCisgKiBTY3JvbGwgaGludHMgYXJlIHVzZWxlc3Mgd2hlbiBoYXNobWFwIGlzIHVzZWQKKyAqLworI2lmICFVU0VfU0NST0xMX0hJTlRTCisjaWYgIVVTRV9IQVNITUFQCisjZGVmaW5lIFVTRV9TQ1JPTExfSElOVFMgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1NDUk9MTF9ISU5UUyAwCisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFX1NDUk9MTF9ISU5UUworI2RlZmluZSBpZl9VU0VfU0NST0xMX0hJTlRTKHN0bXQpIHN0bXQKKyNlbHNlCisjZGVmaW5lIGlmX1VTRV9TQ1JPTExfSElOVFMoc3RtdCkgLypub3RoaW5nKi8KKyNlbmRpZgorCisvKgorICogTm90ZTogIGh0L2NidCBleHBhbnNpb24gZmxha2VzIG91dCByYW5kb21seSB1bmRlciBMaW51eCAxLjEuNDcsIGJ1dCBvbmx5CisgKiB3aGVuIHdlJ3JlIHRocm93aW5nIGNvbnRyb2wgY29kZXMgYXQgdGhlIHNjcmVlbiBhdCBoaWdoIHZvbHVtZS4gIFRvIHNlZQorICogdGhpcywgcmUtZW5hYmxlIFVTRV9IQVJEX1RBQlMgYW5kIHJ1biB3b3JtIGZvciBhIHdoaWxlLiAgT3RoZXIgc3lzdGVtcworICogcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBkZWZpbmUgdGhpcyBlaXRoZXIgZHVlIHRvIHVuY2VydGFpbnRpZXMgYWJvdXQgdGFiCisgKiBkZWxheXMgYW5kIGV4cGFuc2lvbiBpbiByYXcgbW9kZS4KKyAqLworCisjZGVmaW5lIFRSSUVTIHN0cnVjdCB0cmllcwordHlwZWRlZiBUUklFUyB7CisJVFJJRVMgICAgKmNoaWxkOyAgICAgICAgICAgIC8qIHB0ciB0byBjaGlsZC4gIE5VTEwgaWYgbm9uZSAgICAgICAgICAqLworCVRSSUVTICAgICpzaWJsaW5nOyAgICAgICAgICAvKiBwdHIgdG8gc2libGluZy4gIE5VTEwgaWYgbm9uZSAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICAgIGNoOyAgICAgICAgLyogY2hhcmFjdGVyIGF0IHRoaXMgbm9kZSAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgc2hvcnQgICB2YWx1ZTsgICAgIC8qIGNvZGUgb2Ygc3RyaW5nIHNvIGZhci4gIDAgaWYgbm9uZS4gICAqLworI3VuZGVmIFRSSUVTCit9IFRSSUVTOworCisvKgorICogQ29tbW9uL3Ryb3VibGVzb21lIGNoYXJhY3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFN0cmluZ09mKGNoKSB7Y2gsIDB9CisKKyNkZWZpbmUgTF9CUkFDRSAneycKKyNkZWZpbmUgUl9CUkFDRSAnfScKKyNkZWZpbmUgU19RVU9URSAnXCcnCisjZGVmaW5lIERfUVVPVEUgJyInCisKKyNkZWZpbmUgVlRfQUNTQyAiYGBhYWZmZ2dpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiIKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgcGFsZXR0ZSB0YWJsZXMKKyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNob3J0IHJlZCwgZ3JlZW4sIGJsdWU7CS8qIHdoYXQgY29sb3JfY29udGVudCgpIHJldHVybnMgKi8KKyAgICBzaG9ydCByLCBnLCBiOwkJLyogcGFyYW1zIHRvIGluaXRfY29sb3IoKSAqLworICAgIGludCBpbml0OwkJCS8qIHRydWUgaWYgd2UgY2FsbGVkIGluaXRfY29sb3IoKSAqLworfQorY29sb3JfdDsKKworI2RlZmluZSBNQVhDT0xVTU5TICAgIDEzNQorI2RlZmluZSBNQVhMSU5FUyAgICAgIDY2CisjZGVmaW5lIEZJRk9fU0laRSAgICAgTUFYQ09MVU1OUysyICAvKiBmb3Igbm9jYnJlYWsgbW9kZSBpbnB1dCAqLworCisjZGVmaW5lIEFDU19MRU4gICAgICAgMTI4CisKKyNkZWZpbmUgV0lORE9XTElTVCBzdHJ1Y3QgX3dpbl9saXN0CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2RlZmluZSBfbmNfYmtnZCAgICBfYmtncm5kCisjZWxzZQorI3VuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX25jX2JrZ2QgICAgX2JrZ2QKKyNkZWZpbmUgd2dldGJrZ3JuZCh3aW4sIHdjaCkJKndjaCA9IHdpbi0+X2JrZ2QKKyNkZWZpbmUgd2JrZ3JuZAkgICAgd2JrZ2QKKyNlbmRpZgorCisjdW5kZWYgTkNVUlNFU19PUEFRVUUKKyNkZWZpbmUgTkNVUlNFU19JTlRFUk5BTFMgMQorI2RlZmluZSBOQ1VSU0VTX09QQVFVRSAwCisKKyNpbmNsdWRlIDxjdXJzZXMuaD4JLyogd2UnbGwgdXNlIC1JcGF0aCBkaXJlY3RpdmUgdG8gZ2V0IHRoZSByaWdodCBvbmUhICovCisjaW5jbHVkZSA8dGVybS5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKyNpbmNsdWRlIDxuY190cGFybS5oPgorCisjaWYgTkNVUlNFU19FWFRfQ09MT1JTICYmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIGlmX0VYVF9DT0xPUlMoc3RtdCkJc3RtdAorI2RlZmluZSBOZXRQYWlyKHZhbHVlLHApCSh2YWx1ZSkuZXh0X2NvbG9yID0gKHApLCBcCisJCQkJQXR0ck9mKHZhbHVlKSAmPSBBTExfQlVUX0NPTE9SLCBcCisJCQkJQXR0ck9mKHZhbHVlKSB8PSAoQV9DT0xPUiAmIENPTE9SX1BBSVIoKHAgPiAyNTUpID8gMjU1IDogcCkpCisjZGVmaW5lIFNldFBhaXIodmFsdWUscCkJKHZhbHVlKS5leHRfY29sb3IgPSAocCkKKyNkZWZpbmUgR2V0UGFpcih2YWx1ZSkJCSh2YWx1ZSkuZXh0X2NvbG9yCisjZGVmaW5lIHVuQ29sb3IobikJCShBdHRyT2YobikgJiBBTExfQlVUX0NPTE9SKQorI2RlZmluZSBHRVRfV0lORE9XX1BBSVIodykJKHcpLT5fY29sb3IKKyNkZWZpbmUgU0VUX1dJTkRPV19QQUlSKHcscCkJKHcpLT5fY29sb3IgPSAocCkKKyNkZWZpbmUgU2FtZUF0dHJPZihhLGIpCQkoQXR0ck9mKGEpID09IEF0dHJPZihiKSAmJiBHZXRQYWlyKGEpID09IEdldFBhaXIoYikpCisjZGVmaW5lIFZJREFUVFIoYXR0ciwgcGFpcikJdmlkX2F0dHIoYXR0ciwgcGFpciwgMCkKKyNlbHNlCisjZGVmaW5lIGlmX0VYVF9DT0xPUlMoc3RtdCkJLyogbm90aGluZyAqLworI2RlZmluZSBTZXRQYWlyKHZhbHVlLHApCVJlbUF0dHIodmFsdWUsIEFfQ09MT1IpLCBcCisJCQkJU2V0QXR0cih2YWx1ZSwgQXR0ck9mKHZhbHVlKSB8IChBX0NPTE9SICYgQ09MT1JfUEFJUihwKSkpCisjZGVmaW5lIEdldFBhaXIodmFsdWUpCQlQQUlSX05VTUJFUihBdHRyT2YodmFsdWUpKQorI2RlZmluZSB1bkNvbG9yKG4pCQkoQXR0ck9mKG4pICYgQUxMX0JVVF9DT0xPUikKKyNkZWZpbmUgR0VUX1dJTkRPV19QQUlSKHcpCVBBSVJfTlVNQkVSKFdJTkRPV19BVFRSUyh3KSkKKyNkZWZpbmUgU0VUX1dJTkRPV19QQUlSKHcscCkJV0lORE9XX0FUVFJTKHcpICY9IEFMTF9CVVRfQ09MT1IsIFwKKwkJCQlXSU5ET1dfQVRUUlModykgfD0gKEFfQ09MT1IgJiBDT0xPUl9QQUlSKHApKQorI2RlZmluZSBTYW1lQXR0ck9mKGEsYikJCShBdHRyT2YoYSkgPT0gQXR0ck9mKGIpKQorI2RlZmluZSBWSURBVFRSKGF0dHIsIHBhaXIpCXZpZGF0dHIoYXR0cikKKyNlbmRpZgorCisjaWYgTkNVUlNFU19OT19QQURESU5HCisjZGVmaW5lIEdldE5vUGFkZGluZyhzcCkJKChzcCkgPyAoc3ApLT5fbm9fcGFkZGluZyA6IF9uY19wcmVzY3JlZW4uX25vX3BhZGRpbmcpCisjZGVmaW5lIFNldE5vUGFkZGluZyhzcCkJX25jX3NldF9ub19wYWRkaW5nKHNwKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zZXRfbm9fcGFkZGluZyhTQ1JFRU4gKik7CisjZWxzZQorI2RlZmluZSBHZXROb1BhZGRpbmcoc3ApCUZBTFNFCisjZGVmaW5lIFNldE5vUGFkZGluZyhzcCkJLypub3RoaW5nKi8KKyNlbmRpZgorCisjZGVmaW5lIFdJTkRPV19BVFRSUyh3KQkJKCh3KS0+X2F0dHJzKQorCisjZGVmaW5lIFNDUkVFTl9BVFRSUyhzKQkJKCooKHMpLT5fY3VycmVudF9hdHRyKSkKKyNkZWZpbmUgR0VUX1NDUkVFTl9QQUlSKHMpCUdldFBhaXIoU0NSRUVOX0FUVFJTKHMpKQorI2RlZmluZSBTRVRfU0NSRUVOX1BBSVIocyxwKQlTZXRQYWlyKFNDUkVFTl9BVFRSUyhzKSwgcCkKKworI2lmIFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfRVhQT1JUKGludCAqKSBfbmNfcHRyX0xpbmVzICh2b2lkKTsKK05DVVJTRVNfRVhQT1JUKGludCAqKSBfbmNfcHRyX0NvbHMgKHZvaWQpOworI2RlZmluZSBwdHJMaW5lcygpIChTUCA/ICYoU1AtPl9MSU5FUykgOiAmKF9uY19wcmVzY3JlZW4uX0xJTkVTKSkKKyNkZWZpbmUgcHRyQ29scygpICAoU1AgPyAmKFNQLT5fQ09MUykgIDogJihfbmNfcHJlc2NyZWVuLl9DT0xTKSkKKyNkZWZpbmUgU0VUX0xJTkVTKHZhbHVlKSAqX25jX3B0cl9MaW5lcygpID0gdmFsdWUKKyNkZWZpbmUgU0VUX0NPTFModmFsdWUpICAqX25jX3B0cl9Db2xzKCkgPSB2YWx1ZQorI2Vsc2UKKyNkZWZpbmUgcHRyTGluZXMoKSAmTElORVMKKyNkZWZpbmUgcHRyQ29scygpICAmQ09MUworI2RlZmluZSBTRVRfTElORVModmFsdWUpIExJTkVTID0gdmFsdWUKKyNkZWZpbmUgU0VUX0NPTFModmFsdWUpICBDT0xTID0gdmFsdWUKKyNlbmRpZgorCisjZGVmaW5lIFRSX01VVEVYKGRhdGEpIF90cmFjZWYoIiVzQCVkOiBtZTolMDhsWCBDT1VOVDolMnUvJTJkLyU2ZC8lMmQvJXMlOXU6ICIgI2RhdGEsIFwKKwkgICAgX19GSUxFX18sIF9fTElORV9fLCBcCisJICAgICh1bnNpZ25lZCBsb25nKSAocHRocmVhZF9zZWxmKCkpLCBcCisJICAgIGRhdGEuX19kYXRhLl9fbG9jaywgXAorCSAgICBkYXRhLl9fZGF0YS5fX2NvdW50LCBcCisJICAgIGRhdGEuX19kYXRhLl9fb3duZXIsIFwKKwkgICAgZGF0YS5fX2RhdGEuX19raW5kLCBcCisJICAgIChkYXRhLl9fZGF0YS5fX251c2VycyA+IDUpID8gIiBPT1BTICIgOiAiIiwgXAorCSAgICBkYXRhLl9fZGF0YS5fX251c2VycykKKyNkZWZpbmUgVFJfR0xPQkFMX01VVEVYKG5hbWUpIFRSX01VVEVYKF9uY19nbG9iYWxzLm11dGV4XyMjbmFtZSkKKworI2lmZGVmIFVTRV9QVEhSRUFEUworCisjaWYgVVNFX1JFRU5UUkFOVAorI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfaW5pdF9wdGhyZWFkcyh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbXV0ZXhfaW5pdChwdGhyZWFkX211dGV4X3QgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKKyNkZWZpbmUgX25jX2xvY2tfZ2xvYmFsKG5hbWUpCV9uY19tdXRleF9sb2NrKCZfbmNfZ2xvYmFscy5tdXRleF8jI25hbWUpCisjZGVmaW5lIF9uY190cnlfZ2xvYmFsKG5hbWUpICAgIF9uY19tdXRleF90cnlsb2NrKCZfbmNfZ2xvYmFscy5tdXRleF8jI25hbWUpCisjZGVmaW5lIF9uY191bmxvY2tfZ2xvYmFsKG5hbWUpCV9uY19tdXRleF91bmxvY2soJl9uY19nbG9iYWxzLm11dGV4XyMjbmFtZSkKKworI2Vsc2UKKyNlcnJvciBQT1NJWCB0aHJlYWRzIHJlcXVpcmVzIC0tZW5hYmxlLXJlZW50cmFudCBvcHRpb24KKyNlbmRpZgorCisjaWYgVVNFX1dFQUtfU1lNQk9MUworI2lmIGRlZmluZWQoX19HTlVDX18pCisjICBpZiBkZWZpbmVkIF9fVVNFX0lTT0M5OQorIyAgICBkZWZpbmUgX2NhdF9wcmFnbWEoZXhwKQlfUHJhZ21hKCNleHApCisjICAgIGRlZmluZSBfd2Vha19wcmFnbWEoZXhwKQlfY2F0X3ByYWdtYSh3ZWFrIG5hbWUpCisjICBlbHNlCisjICAgIGRlZmluZSBfd2Vha19wcmFnbWEoZXhwKQorIyAgZW5kaWYKKyMgIGRlZmluZSBfZGVjbGFyZShuYW1lKQlfX2V4dGVuc2lvbl9fIGV4dGVybiBfX3R5cGVvZl9fKG5hbWUpIG5hbWUKKyMgIGRlZmluZSB3ZWFrX3N5bWJvbChuYW1lKQlfd2Vha19wcmFnbWEobmFtZSkgX2RlY2xhcmUobmFtZSkgX19hdHRyaWJ1dGVfXygod2VhaykpCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVVNFX1BUSFJFQURTCisjICBpZiBVU0VfV0VBS19TWU1CT0xTCit3ZWFrX3N5bWJvbChwdGhyZWFkX3NpZ21hc2spOword2Vha19zeW1ib2wocHRocmVhZF9zZWxmKTsKK3dlYWtfc3ltYm9sKHB0aHJlYWRfZXF1YWwpOword2Vha19zeW1ib2wocHRocmVhZF9tdXRleF9pbml0KTsKK3dlYWtfc3ltYm9sKHB0aHJlYWRfbXV0ZXhfbG9jayk7Cit3ZWFrX3N5bWJvbChwdGhyZWFkX211dGV4X3VubG9jayk7Cit3ZWFrX3N5bWJvbChwdGhyZWFkX211dGV4X3RyeWxvY2spOword2Vha19zeW1ib2wocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSk7Cit3ZWFrX3N5bWJvbChwdGhyZWFkX211dGV4YXR0cl9pbml0KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19zaWdwcm9jbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopOworIyAgICB1bmRlZiAgc2lncHJvY21hc2sKKyMgICAgZGVmaW5lIHNpZ3Byb2NtYXNrIF9uY19zaWdwcm9jbWFzaworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9OQU5PU0xFRVAKKyN1bmRlZiBIQVZFX05BTk9TTEVFUAorI2RlZmluZSBIQVZFX05BTk9TTEVFUCAwCS8qIG5hbm9zbGVlcCBzdXNwZW5kcyBhbGwgdGhyZWFkcyAqLworI2VuZGlmCisKKyNlbHNlIC8qICFVU0VfUFRIUkVBRFMgKi8KKworI2RlZmluZSBfbmNfaW5pdF9wdGhyZWFkcygpCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX25jX211dGV4X2luaXQob2JqKQkvKiBub3RoaW5nICovCisKKyNkZWZpbmUgX25jX2xvY2tfZ2xvYmFsKG5hbWUpCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX25jX3RyeV9nbG9iYWwobmFtZSkgICAgMAorI2RlZmluZSBfbmNfdW5sb2NrX2dsb2JhbChuYW1lKQkvKiBub3RoaW5nICovCisKKyNlbmRpZiAvKiBVU0VfUFRIUkVBRFMgKi8KKworI2lmIEhBVkVfR0VUVElNRU9GREFZCisjIGRlZmluZSBQUkVDSVNFX0dFVFRJTUUgMQorIyBkZWZpbmUgVGltZVR5cGUgc3RydWN0IHRpbWV2YWwKKyNlbHNlCisjIGRlZmluZSBQUkVDSVNFX0dFVFRJTUUgMAorIyBkZWZpbmUgVGltZVR5cGUgdGltZV90CisjZW5kaWYKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBjb2xvciBwYWlycworICovCit0eXBlZGVmIHVuc2lnbmVkIGNvbG9ycGFpcl90OwkvKiB0eXBlIGJpZyBlbm91Z2ggdG8gc3RvcmUgUEFJUl9PRigpICovCisjZGVmaW5lIENfU0hJRlQgOQkJLyogd2UgbmVlZCBtb3JlIGJpdHMgdGhhbiB0aGVyZSBhcmUgY29sb3JzICovCisjZGVmaW5lIENfTUFTSwkJCSgoMSA8PCBDX1NISUZUKSAtIDEpCisjZGVmaW5lIFBBSVJfT0YoZmcsIGJnKQkJKCgoKGZnKSAmIENfTUFTSykgPDwgQ19TSElGVCkgfCAoKGJnKSAmIENfTUFTSykpCisjZGVmaW5lIGlzRGVmYXVsdENvbG9yKGMpCSgoYykgPj0gQ09MT1JfREVGQVVMVCB8fCAoYykgPCAwKQorCisjZGVmaW5lIENPTE9SX0RFRkFVTFQJCUNfTUFTSworCisjaWYgZGVmaW5lZChVU0VfVEVSTUxJQikgJiYgIWRlZmluZWQoTkVFRF9OQ1VSU0VTX0NIX1QpCisKKyN1bmRlZiBOQ1VSU0VTX0NIX1QJCS8qIHRoaXMgaXMgbm90IGEgdGVybWxpYiBmZWF0dXJlICovCisjZGVmaW5lIE5DVVJTRVNfQ0hfVCB2b2lkCS8qIC4uLmJ1dCB3ZSBuZWVkIGEgcG9pbnRlciBpbiBTQ1JFRU4gKi8KKworI2VuZGlmCS8qIFVTRV9URVJNTElCICovCisKKyNpZm5kZWYgVVNFX1RFUk1MSUIKK3N0cnVjdCBsZGF0Cit7CisJTkNVUlNFU19DSF9UCSp0ZXh0OwkJLyogdGV4dCBvZiB0aGUgbGluZSAqLworCU5DVVJTRVNfU0laRV9UCWZpcnN0Y2hhcjsJLyogZmlyc3QgY2hhbmdlZCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgKi8KKwlOQ1VSU0VTX1NJWkVfVAlsYXN0Y2hhcjsJLyogbGFzdCBjaGFuZ2VkIGNoYXJhY3RlciBpbiB0aGUgbGluZSAqLworCU5DVVJTRVNfU0laRV9UCW9sZGluZGV4OwkvKiBpbmRleCBvZiB0aGUgbGluZSBhdCBsYXN0IHVwZGF0ZSAqLworfTsKKyNlbmRpZgkvKiBVU0VfVEVSTUxJQiAqLworCit0eXBlZGVmIGVudW0geworCU1fWFRFUk0JPSAtMQkJLyogdXNlIHh0ZXJtJ3MgbW91c2UgdHJhY2tpbmc/ICovCisJLE1fTk9ORSA9IDAJCS8qIG5vIG1vdXNlIGRldmljZSAqLworI2lmIFVTRV9HUE1fU1VQUE9SVAorCSxNX0dQTQkJCS8qIHVzZSBHUE0gKi8KKyNlbmRpZgorI2lmIFVTRV9TWVNNT1VTRQorCSxNX1NZU01PVVNFCQkvKiBGcmVlQlNEIHN5c21vdXNlIG9uIGNvbnNvbGUgKi8KKyNlbmRpZgorfSBNb3VzZVR5cGU7CisKKy8qCisgKiBTdHJ1Y3R1cmVzIGZvciBzY3JvbGxpbmcuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgaGFzaHZhbDsKKwlpbnQgb2xkY291bnQsIG5ld2NvdW50OworCWludCBvbGRpbmRleCwgbmV3aW5kZXg7Cit9IEhBU0hNQVA7CisKKy8qCisgKiBTdHJ1Y3R1cmVzIGZvciBzb2Z0IGxhYmVscy4KKyAqLworCitzdHJ1Y3QgX1NMSzsKKworI2lmbmRlZiBVU0VfVEVSTUxJQgorCit0eXBlZGVmIHN0cnVjdAoreworCWNoYXIgKmVudF90ZXh0OwkJLyogdGV4dCBmb3IgdGhlIGxhYmVsICovCisJY2hhciAqZm9ybV90ZXh0OwkvKiBmb3JtYXR0ZWQgdGV4dCAobGVmdC9jZW50ZXIvLi4uKSAqLworCWludCBlbnRfeDsJCS8qIHggY29vcmRpbmF0ZSBvZiB0aGlzIGZpZWxkICovCisJY2hhciBkaXJ0eTsJCS8qIHRoaXMgbGFiZWwgaGFzIGNoYW5nZWQgKi8KKwljaGFyIHZpc2libGU7CQkvKiBmaWVsZCBpcyB2aXNpYmxlICovCit9IHNsa19lbnQ7CisKK3R5cGVkZWYgc3RydWN0IF9TTEsgeworCWNoYXIgZGlydHk7CQkvKiBhbGwgbGFiZWxzIGhhdmUgY2hhbmdlZCAqLworCWNoYXIgaGlkZGVuOwkJLyogc29mdCBsYWJlbHMgYXJlIGhpZGRlbiAqLworCVdJTkRPVyAqd2luOworCXNsa19lbnQgKmVudDsKKwlzaG9ydCAgbWF4bGFiOwkJLyogbnVtYmVyIG9mIGF2YWlsYWJsZSBsYWJlbHMgKi8KKwlzaG9ydCAgbGFiY250OwkJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBsYWJlbHMgKi8KKwlzaG9ydCAgbWF4bGVuOwkJLyogbGVuZ3RoIG9mIGxhYmVscyAqLworCU5DVVJTRVNfQ0hfVCBhdHRyOwkvKiBzb2Z0IGxhYmVsIGF0dHJpYnV0ZSAqLworfSBTTEs7CisKKyNlbmRpZgkvKiBVU0VfVEVSTUxJQiAqLworCit0eXBlZGVmCXN0cnVjdCB7CisJV0lORE9XICp3aW47CQkvKiB0aGUgd2luZG93IHVzZWQgaW4gdGhlIGhvb2sgICAgICAqLworCWludAlsaW5lOwkJLyogbGluZXMgdG8gdGFrZSwgPCAwID0+IGZyb20gYm90dG9tKi8KKwlpbnQJKCpob29rKShXSU5ET1cgKiwgaW50KTsgLyogY2FsbGJhY2sgZm9yIHVzZXIJICAgICovCit9IHJpcG9mZl90OworCisjaWYgVVNFX0dQTV9TVVBQT1JUCisjdW5kZWYgYnV0dG9ucwkJCS8qIHRlcm0uaCBkZWZpbmVzIHRoaXMsIGFuZCBncG0gdXNlcyBpdCEgKi8KKyNpbmNsdWRlIDxncG0uaD4KKworI2lmZGVmIEhBVkVfTElCREwKKy8qIGxpbmsgZHluYW1pY2FsbHkgdG8gR1BNICovCit0eXBlZGVmIGludCAqVFlQRV9ncG1fZmQ7Cit0eXBlZGVmIGludCAoKlRZUEVfR3BtX09wZW4pIChHcG1fQ29ubmVjdCAqLCBpbnQpOwordHlwZWRlZiBpbnQgKCpUWVBFX0dwbV9DbG9zZSkgKHZvaWQpOwordHlwZWRlZiBpbnQgKCpUWVBFX0dwbV9HZXRFdmVudCkgKEdwbV9FdmVudCAqKTsKKworI2RlZmluZSBteV9ncG1fZmQgICAgICAgU1AtPl9tb3VzZV9ncG1fZmQKKyNkZWZpbmUgbXlfR3BtX09wZW4gICAgIFNQLT5fbW91c2VfR3BtX09wZW4KKyNkZWZpbmUgbXlfR3BtX0Nsb3NlICAgIFNQLT5fbW91c2VfR3BtX0Nsb3NlCisjZGVmaW5lIG15X0dwbV9HZXRFdmVudCBTUC0+X21vdXNlX0dwbV9HZXRFdmVudAorI2Vsc2UKKy8qIGxpbmsgc3RhdGljYWxseSB0byBHUE0gKi8KKyNkZWZpbmUgbXlfZ3BtX2ZkICAgICAgICZncG1fZmQKKyNkZWZpbmUgbXlfR3BtX09wZW4gICAgIEdwbV9PcGVuCisjZGVmaW5lIG15X0dwbV9DbG9zZSAgICBHcG1fQ2xvc2UKKyNkZWZpbmUgbXlfR3BtX0dldEV2ZW50IEdwbV9HZXRFdmVudAorI2VuZGlmIC8qIEhBVkVfTElCREwgKi8KKyNlbmRpZiAvKiBVU0VfR1BNX1NVUFBPUlQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGxvbmcgc2VxdWVuY2U7CisgICAgYm9vbCBsYXN0X3VzZWQ7CisgICAgY2hhciAqZml4X3NncjA7CQkvKiB0aGlzIGhvbGRzIHRoZSBmaWx0ZXJlZCBzZ3IwIHN0cmluZyAqLworICAgIGNoYXIgKmxhc3RfYnVmcDsJCS8qIGhlbHAgd2l0aCBmaXhfc2dyMCBsZWFrICovCisgICAgVEVSTUlOQUwgKmxhc3RfdGVybTsKK30gVEdFVEVOVF9DQUNIRTsKKworI2RlZmluZSBUR0VURU5UX01BWCA0CisKKy8qCisgKiBTdGF0ZSBvZiB0cGFybSgpLgorICovCisjZGVmaW5lIFNUQUNLU0laRSAyMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5pb24geworCQlpbnQJbnVtOworCQljaGFyCSpzdHI7CisJfSBkYXRhOworCWJvb2wgbnVtX3R5cGU7Cit9IFNUQUNLX0ZSQU1FOworCisjZGVmaW5lIE5VTV9WQVJTIDI2CisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZmRlZiBUUkFDRQorCWNvbnN0IGNoYXIJKnRuYW1lOworI2VuZGlmCisJY29uc3QgY2hhcgkqdHBhcmFtX2Jhc2U7CisKKwlTVEFDS19GUkFNRQlzdGFja1tTVEFDS1NJWkVdOworCWludAkJc3RhY2tfcHRyOworCisJY2hhcgkJKm91dF9idWZmOworCXNpemVfdAkJb3V0X3NpemU7CisJc2l6ZV90CQlvdXRfdXNlZDsKKworCWNoYXIJCSpmbXRfYnVmZjsKKwlzaXplX3QJCWZtdF9zaXplOworCisJaW50CQlkeW5hbWljX3ZhcltOVU1fVkFSU107CisJaW50CQlzdGF0aWNfdmFyc1tOVU1fVkFSU107Cit9IFRQQVJNX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqdGV4dDsKKyAgICBzaXplX3Qgc2l6ZTsKK30gVFJBQ0VCVUY7CisKKy8qCisgKiBUaGUgZmlsZXN5c3RlbSBkYXRhYmFzZSBub3JtYWxseSB1c2VzIGEgc2luZ2xlLWxldHRlciBmb3IgdGhlIGxvd2VyIGxldmVsCisgKiBvZiBkaXJlY3Rvcmllcy4gIFVzZSBhIGhleGFkZWNpbWFsIGNvZGUgZm9yIGZpbGVzeXN0ZW1zIHdoaWNoIGRvIG5vdAorICogcHJlc2VydmUgbWl4ZWQtY2FzZSBuYW1lcy4KKyAqLworI2lmIE1JWEVEQ0FTRV9GSUxFTkFNRVMKKyNkZWZpbmUgTEVBRl9GTVQgIiVjIgorI2Vsc2UKKyNkZWZpbmUgTEVBRl9GTVQgIiUwMngiCisjZW5kaWYKKworLyoKKyAqIFRSQUNFTVNFX0ZNVCBpcyBubyBsb25nZXIgdGhhbiA4MCBjb2x1bW5zLCB0aGVyZSBhcmUgNSBudW1iZXJzIHRoYXQKKyAqIGNvdWxkIGF0IG1vc3QgaGF2ZSAxMCBkaWdpdHMsIGFuZCB0aGUgbWFzayBjb250YWlucyBubyBtb3JlIHRoYW4gMzIgYml0cworICogd2l0aCBlYWNoIGJpdCByZXByZXNlbnRpbmcgbGVzcyB0aGFuIDE1IGNoYXJhY3RlcnMuICBVc3VhbGx5IHRoZSB3aG9sZQorICogc3RyaW5nIGlzIGxlc3MgdGhhbiA4MCBjb2x1bW5zLCBidXQgdGhpcyBidWZmZXIgc2l6ZSBpcyBhbiBhYnNvbHV0ZQorICogbGltaXQuCisgKi8KKyNkZWZpbmUgVFJBQ0VNU0VfTUFYCSg4MCArICg1ICogMTApICsgKDMyICogMTUpKQorI2RlZmluZSBUUkFDRU1TRV9GTVQJImlkICUyZCAgYXQgKCUyZCwgJTJkLCAlMmQpIHN0YXRlICU0bHggPSB7IiAvKiB9ICovCisKKy8qCisgKiBHbG9iYWwgZGF0YSB3aGljaCBpcyBub3Qgc3BlY2lmaWMgdG8gYSBzY3JlZW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlTSUdfQVRPTUlDX1QJaGF2ZV9zaWd3aW5jaDsKKwlTSUdfQVRPTUlDX1QJY2xlYW51cF9uZXN0ZWQ7CisKKwlib29sCQlpbml0X3NpZ25hbHM7CisJYm9vbAkJaW5pdF9zY3JlZW47CisKKwljb25zdCBjaGFyCSpjb21wX3NvdXJjZW5hbWU7CisJY2hhcgkJKmNvbXBfdGVybXR5cGU7CisKKwlib29sCQloYXZlX3RpY19kaXJlY3Rvcnk7CisJYm9vbAkJa2VlcF90aWNfZGlyZWN0b3J5OworCWNvbnN0IGNoYXIJKnRpY19kaXJlY3Rvcnk7CisKKwljaGFyCQkqZGJpX2xpc3Q7CisJaW50CQlkYmlfc2l6ZTsKKworCWNoYXIJCSpmaXJzdF9uYW1lOworCWNoYXIJCSoqa2V5bmFtZV90YWJsZTsKKworCWludAkJc2xrX2Zvcm1hdDsKKworCWNoYXIJCSpzYWZlcHJpbnRfYnVmOworCXNpemVfdAkJc2FmZXByaW50X3VzZWQ7CisKKwlUR0VURU5UX0NBQ0hFCXRnZXRlbnRfY2FjaGVbVEdFVEVOVF9NQVhdOworCWludAkJdGdldGVudF9pbmRleDsKKwlsb25nCQl0Z2V0ZW50X3NlcXVlbmNlOworCisJV0lORE9XTElTVAkqX25jX3dpbmRvd2xpc3Q7CisjZGVmaW5lIF9uY193aW5kb3dzCV9uY19nbG9iYWxzLl9uY193aW5kb3dsaXN0CisKKyNpZiBVU0VfSE9NRV9URVJNSU5GTworCWNoYXIJCSpob21lX3Rlcm1pbmZvOworI2VuZGlmCisKKyNpZiAhVVNFX1NBRkVfU1BSSU5URgorCWludAkJc2FmZXByaW50X2NvbHM7CisJaW50CQlzYWZlcHJpbnRfcm93czsKKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKKwlib29sCQlpbml0X3RyYWNlOworCWNoYXIJCXRyYWNlX2ZuYW1lW1BBVEhfTUFYXTsKKwlpbnQJCXRyYWNlX2xldmVsOworCUZJTEUJCSp0cmFjZV9mcDsKKworCWNoYXIJCSp0cmFjZWFyZ19idWY7CisJc2l6ZV90CQl0cmFjZWFyZ191c2VkOworCisJVFJBQ0VCVUYJKnRyYWNlYnVmX3B0cjsKKwlzaXplX3QJCXRyYWNlYnVmX3VzZWQ7CisKKwljaGFyCQl0cmFjZWNocl9idWZbNDBdOworCisJY2hhcgkJKnRyYWNlZG1wX2J1ZjsKKwlzaXplX3QJCXRyYWNlZG1wX3VzZWQ7CisKKwl1bnNpZ25lZCBjaGFyCSp0cmFjZXRyeV9idWY7CisJc2l6ZV90CQl0cmFjZXRyeV91c2VkOworCisJY2hhcgkJdHJhY2VhdHJfY29sb3JfYnVmWzJdWzgwXTsKKwlpbnQJCXRyYWNlYXRyX2NvbG9yX3NlbDsKKwlpbnQJCXRyYWNlYXRyX2NvbG9yX2xhc3Q7CisKKyNlbmRpZgkvKiBUUkFDRSAqLworCisjaWZkZWYgVVNFX1BUSFJFQURTCisJcHRocmVhZF9tdXRleF90CW11dGV4X2N1cnNlczsKKwlwdGhyZWFkX211dGV4X3QJbXV0ZXhfdHN0X3RyYWNlZjsKKwlwdGhyZWFkX211dGV4X3QJbXV0ZXhfdHJhY2VmOworCWludAkJbmVzdGVkX3RyYWNlZjsKKwlpbnQJCXVzZV9wdGhyZWFkczsKKyNkZWZpbmUgX25jX3VzZV9wdGhyZWFkcwlfbmNfZ2xvYmFscy51c2VfcHRocmVhZHMKKyNlbmRpZgorfSBOQ1VSU0VTX0dMT0JBTFM7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19HTE9CQUxTKSBfbmNfZ2xvYmFsczsKKworI2RlZmluZSBOX1JJUFMgNQorCisvKgorICogR2xvYmFsIGRhdGEgd2hpY2ggY2FuIGJlIHN3ZXB0IHVwIGludG8gYSBTQ1JFRU4gd2hlbiBvbmUgaXMgY3JlYXRlZC4KKyAqIEl0IG1heSBiZSBtb2RpZmllZCBiZWZvcmUgdGhlIG5leHQgU0NSRUVOIGlzIGNyZWF0ZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlib29sCQl1c2VfZW52OworCWJvb2wJCWZpbHRlcl9tb2RlOworCWF0dHJfdAkJcHJldmlvdXNfYXR0cjsKKwlyaXBvZmZfdAlyaXBwZWRvZmZbTl9SSVBTXTsKKwlyaXBvZmZfdAkqcnNwOworCVRQQVJNX1NUQVRFCXRwYXJtX3N0YXRlOworCVRUWQkJKnNhdmVkX3R0eTsJLyogc2F2ZXR0eS9yZXNldHR5IGluZm9ybWF0aW9uCSAgICAqLworI2lmIE5DVVJTRVNfTk9fUEFERElORworCWJvb2wJCV9ub19wYWRkaW5nOwkvKiBmbGFnIHRvIHNldCBpZiBwYWRkaW5nIGRpc2FibGVkICAqLworI2VuZGlmCisjaWYgQlJPS0VOX0xJTktFUiB8fCBVU0VfUkVFTlRSQU5UCisJY2h0eXBlCQkqcmVhbF9hY3NfbWFwOworCWludAkJX0xJTkVTOworCWludAkJX0NPTFM7CisJVEVSTUlOQUwJKl9jdXJfdGVybTsKKyNpZmRlZiBUUkFDRQorCWxvbmcJCV9vdXRjaGFyczsKKwljb25zdCBjaGFyCSpfdHB1dHNfdHJhY2U7CisjZW5kaWYKKyNlbmRpZgorfSBOQ1VSU0VTX1BSRVNDUkVFTjsKKworI2RlZmluZSByaXBvZmZfc3AJX25jX3ByZXNjcmVlbi5yc3AKKyNkZWZpbmUgcmlwb2ZmX3N0YWNrCV9uY19wcmVzY3JlZW4ucmlwcGVkb2ZmCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19QUkVTQ1JFRU4pIF9uY19wcmVzY3JlZW47CisKKy8qCisgKiBUaGUgU0NSRUVOIHN0cnVjdHVyZS4KKyAqLworCitzdHJ1Y3Qgc2NyZWVuIHsKKwlpbnQJCV9pZmQ7CQkvKiBpbnB1dCBmaWxlIHB0ciBmb3Igc2NyZWVuCSAgICAqLworCUZJTEUJCSpfb2ZwOwkJLyogb3V0cHV0IGZpbGUgcHRyIGZvciBzY3JlZW4JICAgICovCisJY2hhcgkJKl9zZXRidWY7CS8qIGJ1ZmZlcmVkIEkvTyBmb3Igb3V0cHV0CSAgICAqLworCWJvb2wJCV9maWx0ZXJlZDsJLyogZmlsdGVyKCkgd2FzIGNhbGxlZAkJICAgICovCisJYm9vbAkJX2J1ZmZlcmVkOwkvKiBzZXR2YnVmIHVzZXMgX3NldGJ1ZiBkYXRhCSAgICAqLworCWludAkJX2NoZWNrZmQ7CS8qIGZpbGVkZXNjIGZvciB0eXBlYWhlYWQgY2hlY2sJICAgICovCisJVEVSTUlOQUwJKl90ZXJtOwkJLyogdGVybWluYWwgdHlwZSBpbmZvcm1hdGlvbgkgICAgKi8KKwlUVFkJCV9zYXZlZF90dHk7CS8qIHNhdmV0dHkvcmVzZXR0eSBpbmZvcm1hdGlvbgkgICAgKi8KKwlOQ1VSU0VTX1NJWkVfVAlfbGluZXM7CQkvKiBzY3JlZW4gbGluZXMJCQkgICAgKi8KKwlOQ1VSU0VTX1NJWkVfVAlfY29sdW1uczsJLyogc2NyZWVuIGNvbHVtbnMJCSAgICAqLworCisJTkNVUlNFU19TSVpFX1QJX2xpbmVzX2F2YWlsOwkvKiBsaW5lcyBhdmFpbGFibGUgZm9yIHN0ZHNjcgkgICAgKi8KKwlOQ1VSU0VTX1NJWkVfVAlfdG9wc3RvbGVuOwkvKiBsaW5lcyBzdG9sZW4gZnJvbSB0b3AJICAgICovCisKKwlXSU5ET1cJCSpfY3Vyc2NyOwkvKiBjdXJyZW50IHNjcmVlbgkJICAgICovCisJV0lORE9XCQkqX25ld3NjcjsJLyogdmlydHVhbCBzY3JlZW4gdG8gYmUgdXBkYXRlZCB0byAgKi8KKwlXSU5ET1cJCSpfc3Rkc2NyOwkvKiBzY3JlZW4ncyBmdWxsLXdpbmRvdyBjb250ZXh0CSAgICAqLworCisJVFJJRVMJCSpfa2V5dHJ5OwkvKiAiVHJ5IiBmb3IgdXNlIHdpdGgga2V5cGFkIG1vZGUgICAqLworCVRSSUVTCQkqX2tleV9vazsJLyogRGlzYWJsZWQga2V5cyB2aWEga2V5b2soLEZBTFNFKSAgKi8KKwlib29sCQlfdHJpZWQ7CQkvKiBrZXlwYWQgbW9kZSB3YXMgaW5pdGlhbGl6ZWQJICAgICovCisJYm9vbAkJX2tleXBhZF9vbjsJLyoga2V5cGFkIG1vZGUgaXMgY3VycmVudGx5IG9uCSAgICAqLworCisJYm9vbAkJX2NhbGxlZF93Z2V0Y2g7CS8qIGNoZWNrIGZvciByZWN1cnNpb24gaW4gd2dldGNoKCkgICovCisJaW50CQlfZmlmb1tGSUZPX1NJWkVdOwkvKiBpbnB1dCBwdXNoLWJhY2sgYnVmZmVyICAgKi8KKwlzaG9ydAkJX2ZpZm9oZWFkLAkvKiBoZWFkIG9mIGZpZm8gcXVldWUJCSAgICAqLworCQkJX2ZpZm90YWlsLAkvKiB0YWlsIG9mIGZpZm8gcXVldWUJCSAgICAqLworCQkJX2ZpZm9wZWVrLAkvKiB3aGVyZSB0byBwZWVrIGZvciBuZXh0IGNoYXIJICAgICovCisJCQlfZmlmb2hvbGQ7CS8qIHNldCBpZiBicmVha291dCBtYXJrZWQJICAgICovCisKKwlpbnQJCV9lbmR3aW47CS8qIGFyZSB3ZSBvdXQgb2Ygd2luZG93IG1vZGU/CSAgICAqLworCU5DVVJTRVNfQ0hfVAkqX2N1cnJlbnRfYXR0cjsgLyogaG9sZHMgY3VycmVudCBhdHRyaWJ1dGVzIHNldAkgICAgKi8KKwlpbnQJCV9jb2xvcm9uOwkvKiBpcyBjb2xvciBlbmFibGVkPwkJICAgICovCisJaW50CQlfY29sb3JfZGVmczsJLyogYXJlIGNvbG9ycyBtb2RpZmllZAkJICAgICovCisJaW50CQlfY3Vyc29yOwkvKiB2aXNpYmlsaXR5IG9mIHRoZSBjdXJzb3IJICAgICovCisJaW50CQlfY3Vyc3JvdzsJLyogcGh5c2ljYWwgY3Vyc29yIHJvdwkJICAgICovCisJaW50CQlfY3Vyc2NvbDsJLyogcGh5c2ljYWwgY3Vyc29yIGNvbHVtbgkgICAgKi8KKwlib29sCQlfbm90dHk7CQkvKiB0cnVlIGlmIHdlIGNhbm5vdCBzd2l0Y2ggbm9uLXR0eSAqLworCWludAkJX25sOwkJLyogVHJ1ZSBpZiBOTCAtPiBDUi9OTCBpcyBvbgkgICAgKi8KKwlpbnQJCV9yYXc7CQkvKiBUcnVlIGlmIGluIHJhdyBtb2RlCQkgICAgKi8KKwlpbnQJCV9jYnJlYWs7CS8qIDEgaWYgaW4gY2JyZWFrIG1vZGUJCSAgICAqLworCQkJCQkvKiA+IDEgaWYgaW4gaGFsZmRlbGF5IG1vZGUJICAgICovCisJaW50CQlfZWNobzsJCS8qIFRydWUgaWYgZWNobyBvbgkJICAgICovCisJaW50CQlfdXNlX21ldGE7CS8qIHVzZSB0aGUgbWV0YSBrZXk/CQkgICAgKi8KKwlzdHJ1Y3QgX1NMSwkqX3NsazsJCS8qIHB0ciB0byBzb2Z0IGtleSBzdHJ1Y3QgLyBOVUxMICAgICovCisJaW50CQlzbGtfZm9ybWF0OwkvKiBzZWxlY3RlZCBmb3JtYXQgZm9yIHRoaXMgc2NyZWVuICAqLworCS8qIGN1cnNvciBtb3ZlbWVudCBjb3N0czsgdW5pdHMgYXJlIDEwdGhzIG9mIG1pbGxpc2Vjb25kcyAqLworI2lmIE5DVVJTRVNfTk9fUEFERElORworCWJvb2wJCV9ub19wYWRkaW5nOwkvKiBmbGFnIHRvIHNldCBpZiBwYWRkaW5nIGRpc2FibGVkICAqLworI2VuZGlmCisJaW50CQlfY2hhcl9wYWRkaW5nOwkvKiBjb3N0IG9mIGNoYXJhY3RlciBwdXQJICAgICovCisJaW50CQlfY3JfY29zdDsJLyogY29zdCBvZiAoY2FycmlhZ2VfcmV0dXJuKQkgICAgKi8KKwlpbnQJCV9jdXBfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX2FkZHJlc3MpCSAgICAqLworCWludAkJX2hvbWVfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX2hvbWUpCSAgICAqLworCWludAkJX2xsX2Nvc3Q7CS8qIGNvc3Qgb2YgKGN1cnNvcl90b19sbCkJICAgICovCisjaWYgVVNFX0hBUkRfVEFCUworCWludAkJX2h0X2Nvc3Q7CS8qIGNvc3Qgb2YgKHRhYikJCSAgICAqLworCWludAkJX2NidF9jb3N0OwkvKiBjb3N0IG9mIChiYWNrdGFiKQkJICAgICovCisjZW5kaWYgLyogVVNFX0hBUkRfVEFCUyAqLworCWludAkJX2N1YjFfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX2xlZnQpCSAgICAqLworCWludAkJX2N1ZjFfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX3JpZ2h0KQkgICAgKi8KKwlpbnQJCV9jdWQxX2Nvc3Q7CS8qIGNvc3Qgb2YgKGN1cnNvcl9kb3duKQkgICAgKi8KKwlpbnQJCV9jdXUxX2Nvc3Q7CS8qIGNvc3Qgb2YgKGN1cnNvcl91cCkJCSAgICAqLworCWludAkJX2N1Yl9jb3N0OwkvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl9sZWZ0KQkgICAgKi8KKwlpbnQJCV9jdWZfY29zdDsJLyogY29zdCBvZiAocGFybV9jdXJzb3JfcmlnaHQpCSAgICAqLworCWludAkJX2N1ZF9jb3N0OwkvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl9kb3duKQkgICAgKi8KKwlpbnQJCV9jdXVfY29zdDsJLyogY29zdCBvZiAocGFybV9jdXJzb3JfdXApCSAgICAqLworCWludAkJX2hwYV9jb3N0OwkvKiBjb3N0IG9mIChjb2x1bW5fYWRkcmVzcykJICAgICovCisJaW50CQlfdnBhX2Nvc3Q7CS8qIGNvc3Qgb2YgKHJvd19hZGRyZXNzKQkgICAgKi8KKwkvKiB1c2VkIGluIHR0eV91cGRhdGUuYywgbXVzdCBiZSBjaGFycyAqLworCWludAkJX2VkX2Nvc3Q7CS8qIGNvc3Qgb2YgKGNscl9lb3MpCQkgICAgKi8KKwlpbnQJCV9lbF9jb3N0OwkvKiBjb3N0IG9mIChjbHJfZW9sKQkJICAgICovCisJaW50CQlfZWwxX2Nvc3Q7CS8qIGNvc3Qgb2YgKGNscl9ib2wpCQkgICAgKi8KKwlpbnQJCV9kY2gxX2Nvc3Q7CS8qIGNvc3Qgb2YgKGRlbGV0ZV9jaGFyYWN0ZXIpCSAgICAqLworCWludAkJX2ljaDFfY29zdDsJLyogY29zdCBvZiAoaW5zZXJ0X2NoYXJhY3RlcikJICAgICovCisJaW50CQlfZGNoX2Nvc3Q7CS8qIGNvc3Qgb2YgKHBhcm1fZGNoKQkJICAgICovCisJaW50CQlfaWNoX2Nvc3Q7CS8qIGNvc3Qgb2YgKHBhcm1faWNoKQkJICAgICovCisJaW50CQlfZWNoX2Nvc3Q7CS8qIGNvc3Qgb2YgKGVyYXNlX2NoYXJzKQkgICAgKi8KKwlpbnQJCV9yZXBfY29zdDsJLyogY29zdCBvZiAocmVwZWF0X2NoYXIpCSAgICAqLworCWludAkJX2hwYV9jaF9jb3N0OwkvKiBjb3N0IG9mIChjb2x1bW5fYWRkcmVzcykJICAgICovCisJaW50CQlfY3VwX2NoX2Nvc3Q7CS8qIGNvc3Qgb2YgKGN1cnNvcl9hZGRyZXNzKQkgICAgKi8KKwlpbnQJCV9jdWZfY2hfY29zdDsJLyogY29zdCBvZiAocGFybV9jdXJzb3JfcmlnaHQpCSAgICAqLworCWludAkJX2lubGluZV9jb3N0OwkvKiBjb3N0IG9mIGlubGluZS1tb3ZlCQkgICAgKi8KKwlpbnQJCV9zbWlyX2Nvc3Q7CS8qIGNvc3Qgb2YgKGVudGVyX2luc2VydF9tb2RlKQkgICAgKi8KKwlpbnQJCV9ybWlyX2Nvc3Q7CS8qIGNvc3Qgb2YgKGV4aXRfaW5zZXJ0X21vZGUpCSAgICAqLworCWludAkJX2lwX2Nvc3Q7CS8qIGNvc3Qgb2YgKGluc2VydF9wYWRkaW5nKQkgICAgKi8KKwkvKiB1c2VkIGluIGxpYl9tdmN1ci5jICovCisJY2hhciAqCQlfYWRkcmVzc19jdXJzb3I7CisJLyogdXNlZCBpbiB0dHlfdXBkYXRlLmMgKi8KKwlpbnQJCV9zY3JvbGxpbmc7CS8qIDEgaWYgdGVybWluYWwncyBzbWFydCBlbm91Z2ggdG8gICovCisKKwkvKiB1c2VkIGluIGxpYl9jb2xvci5jICovCisJY29sb3JfdAkJKl9jb2xvcl90YWJsZTsJLyogc2NyZWVuJ3MgY29sb3IgcGFsZXR0ZQkgICAgICovCisJaW50CQlfY29sb3JfY291bnQ7CS8qIGNvdW50IG9mIGNvbG9ycyBpbiBwYWxldHRlCSAgICAgKi8KKwljb2xvcnBhaXJfdAkqX2NvbG9yX3BhaXJzOwkvKiBzY3JlZW4ncyBjb2xvciBwYWlyIGxpc3QJICAgICAqLworCWludAkJX3BhaXJfY291bnQ7CS8qIGNvdW50IG9mIGNvbG9yIHBhaXJzCQkgICAgICovCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwlib29sCQlfZGVmYXVsdF9jb2xvcjsgLyogdXNlIGRlZmF1bHQgY29sb3JzCQkgICAgICovCisJYm9vbAkJX2hhc19zZ3JfMzlfNDk7IC8qIGhhcyBFQ01BIGRlZmF1bHQgY29sb3Igc3VwcG9ydCAgICAqLworCWludAkJX2RlZmF1bHRfZmc7CS8qIGFzc3VtZWQgZGVmYXVsdCBmb3JlZ3JvdW5kCSAgICAgKi8KKwlpbnQJCV9kZWZhdWx0X2JnOwkvKiBhc3N1bWVkIGRlZmF1bHQgYmFja2dyb3VuZAkgICAgICovCisjZW5kaWYKKwljaHR5cGUJCV9va19hdHRyaWJ1dGVzOyAvKiB2YWxpZCBhdHRyaWJ1dGVzIGZvciB0ZXJtaW5hbCAgICAgKi8KKwljaHR5cGUJCV94bWNfc3VwcHJlc3M7CS8qIGF0dHJpYnV0ZXMgdG8gc3VwcHJlc3MgaWYgeG1jICAgICAqLworCWNodHlwZQkJX3htY190cmlnZ2VyczsJLyogYXR0cmlidXRlcyB0byBwcm9jZXNzIGlmIHhtYwkgICAgICovCisJY2h0eXBlICoJX2Fjc19tYXA7CS8qIHRoZSByZWFsIGFsdGVybmF0ZS1jaGFyc2V0IG1hcCAgICAqLworCWJvb2wgKgkJX3NjcmVlbl9hY3NfbWFwOworCisKKwkvKiB1c2VkIGluIGxpYl92aWRhdHRyLmMgKi8KKwlib29sCQlfdXNlX3Jtc287CS8qIHRydWUgaWYgd2UgbWF5IHVzZSAncm1zbycJICAgICAqLworCWJvb2wJCV91c2Vfcm11bDsJLyogdHJ1ZSBpZiB3ZSBtYXkgdXNlICdybXVsJwkgICAgICovCisKKwkvKgorCSAqIFRoZXNlIGRhdGEgY29ycmVzcG9uZCB0byB0aGUgc3RhdGUgb2YgdGhlIGlkY29rKCkgYW5kIGlkbG9rKCkKKwkgKiBmdW5jdGlvbnMuICBBIGNhdmVhdCBpcyBpbiBvcmRlciBoZXJlOiAgdGhlIFhTSSBhbmQgU1ZyNAorCSAqIGRvY3VtZW50YXRpb24gc3BlY2lmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcHBseSB0byB0aGUgd2luZG93IHdoaWNoCisJICogaXMgZ2l2ZW4gYXMgYW4gYXJndW1lbnQuICBIb3dldmVyLCBuY3Vyc2VzIGltcGxlbWVudHMgdGhpcyBsb2dpYworCSAqIG9ubHkgZm9yIHRoZSBuZXdzY3IvY3Vyc2NyIHVwZGF0ZSBwcm9jZXNzLCBfbm90XyBwZXItd2luZG93LgorCSAqLworCWJvb2wJCV9uY19zcF9pZGxvazsKKwlib29sCQlfbmNfc3BfaWRjb2s7CisjZGVmaW5lIF9uY19pZGxvayBTUC0+X25jX3NwX2lkbG9rCisjZGVmaW5lIF9uY19pZGNvayBTUC0+X25jX3NwX2lkY29rCisKKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgZGF0YSB0aGF0IHN1cHBvcnQgdGhlIG1vdXNlIGludGVyZmFjZS4KKwkgKi8KKwlib29sCQlfbW91c2VfaW5pdGlhbGl6ZWQ7CisJTW91c2VUeXBlCV9tb3VzZV90eXBlOworCWludAkJX21heGNsaWNrOworCWJvb2wJCSgqX21vdXNlX2V2ZW50KSAoU0NSRUVOICopOworCWJvb2wJCSgqX21vdXNlX2lubGluZSkoU0NSRUVOICopOworCWJvb2wJCSgqX21vdXNlX3BhcnNlKSAoU0NSRUVOICosIGludCk7CisJdm9pZAkJKCpfbW91c2VfcmVzdW1lKShTQ1JFRU4gKik7CisJdm9pZAkJKCpfbW91c2Vfd3JhcCkJKFNDUkVFTiAqKTsKKwlpbnQJCV9tb3VzZV9mZDsJLyogZmlsZS1kZXNjcmlwdG9yLCBpZiBhbnkgKi8KKwlib29sCQlfbW91c2VfYWN0aXZlOwkvKiB0cnVlIGlmIGluaXRpYWxpemVkICovCisJbW1hc2tfdAkJX21vdXNlX21hc2s7CisJTkNVUlNFU19DT05TVCBjaGFyICpfbW91c2VfeHRlcm1jYXA7IC8qIHN0cmluZyB0byBlbmFibGUvZGlzYWJsZSBtb3VzZSAqLworCU1FVkVOVAkJX21vdXNlX2V2ZW50c1tFVl9NQVhdOwkvKiBob2xkIHRoZSBsYXN0IG1vdXNlIGV2ZW50IHNlZW4gKi8KKwlNRVZFTlQJCSpfbW91c2VfZXZlbnRwOwkvKiBuZXh0IGZyZWUgc2xvdCBpbiBldmVudCBxdWV1ZSAqLworCisjaWYgVVNFX0dQTV9TVVBQT1JUCisJYm9vbAkJX21vdXNlX2dwbV9sb2FkZWQ7CisJYm9vbAkJX21vdXNlX2dwbV9mb3VuZDsKKyNpZmRlZiBIQVZFX0xJQkRMCisJdm9pZAkJKl9kbG9wZW5fZ3BtOworCVRZUEVfZ3BtX2ZkCV9tb3VzZV9ncG1fZmQ7CisJVFlQRV9HcG1fT3BlbglfbW91c2VfR3BtX09wZW47CisJVFlQRV9HcG1fQ2xvc2UJX21vdXNlX0dwbV9DbG9zZTsKKwlUWVBFX0dwbV9HZXRFdmVudCBfbW91c2VfR3BtX0dldEV2ZW50OworI2VuZGlmCisJR3BtX0Nvbm5lY3QJX21vdXNlX2dwbV9jb25uZWN0OworI2VuZGlmIC8qIFVTRV9HUE1fU1VQUE9SVCAqLworCisjaWYgVVNFX0VNWF9NT1VTRQorCWludAkJX2VteG1vdXNlX3dmZDsKKwlpbnQJCV9lbXhtb3VzZV90aHJlYWQ7CisJaW50CQlfZW14bW91c2VfYWN0aXZhdGVkOworCWNoYXIJCV9lbXhtb3VzZV9idXR0b25zWzRdOworI2VuZGlmCisKKyNpZiBVU0VfU1lTTU9VU0UKKwlNRVZFTlQJCV9zeXNtb3VzZV9maWZvW0ZJRk9fU0laRV07CisJaW50CQlfc3lzbW91c2VfaGVhZDsKKwlpbnQJCV9zeXNtb3VzZV90YWlsOworCWludAkJX3N5c21vdXNlX2NoYXJfd2lkdGg7CS8qIGNoYXJhY3RlciB3aWR0aCAqLworCWludAkJX3N5c21vdXNlX2NoYXJfaGVpZ2h0OwkvKiBjaGFyYWN0ZXIgaGVpZ2h0ICovCisJaW50CQlfc3lzbW91c2Vfb2xkX2J1dHRvbnM7CisJaW50CQlfc3lzbW91c2VfbmV3X2J1dHRvbnM7CisjZW5kaWYKKworCS8qCisJICogVGhpcyBzdXBwb3J0cyBhdXRvbWF0aWMgcmVzaXppbmcKKwkgKi8KKyNpZiBVU0VfU0laRUNIQU5HRQorCWludAkJKCpfcmVzaXplKShpbnQsaW50KTsKKyNlbmRpZgorCisJLyoKKwkgKiBUaGVzZSBhcmUgZGF0YSB0aGF0IHN1cHBvcnQgdGhlIHByb3BlciBoYW5kbGluZyBvZiB0aGUgcGFuZWwgc3RhY2sgb24gYW4KKwkgKiBwZXIgc2NyZWVuIGJhc2lzLgorCSAqLworCXN0cnVjdCBwYW5lbGhvb2sgX3BhbmVsSG9vazsKKworCWJvb2wJCV9zaWdfd2luY2g7CisJU0NSRUVOCQkqX25leHRfc2NyZWVuOworCisJLyogaGFzaGVzIGZvciBvbGQgYW5kIG5ldyBsaW5lcyAqLworCXVuc2lnbmVkIGxvbmcJKm9sZGhhc2gsICpuZXdoYXNoOworCUhBU0hNQVAJCSpoYXNodGFiOworCWludAkJaGFzaHRhYl9sZW47CisJaW50CQkqX29sZG51bV9saXN0OworCWludAkJX29sZG51bV9zaXplOworCisJYm9vbAkJX2NsZWFudXA7CS8qIGNsZWFudXAgYWZ0ZXIgaW50L3F1aXQgc2lnbmFsICovCisJaW50CQkoKl9vdXRjaCkoaW50KTsgLyogb3V0cHV0IGhhbmRsZXIgaWYgbm90IHB1dGMgKi8KKworCWludAkJX2xlZ2FjeV9jb2Rpbmc7CS8qIHNlZSB1c2VfbGVnYWN5X2NvZGluZygpICovCisKKyNpZiBVU0VfUkVFTlRSQU5UCisJY2hhcgkJX3R0eXR5cGVbTkFNRVNJWkVdOworCWludAkJX0VTQ0RFTEFZOworCWludAkJX1RBQlNJWkU7CisJaW50CQlfTElORVM7CisJaW50CQlfQ09MUzsKKyNpZmRlZiBUUkFDRQorCWxvbmcJCV9vdXRjaGFyczsKKwljb25zdCBjaGFyCSpfdHB1dHNfdHJhY2U7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKKwljaGFyCQl0cmFjZWNocl9idWZbNDBdOworCWNoYXIJCXRyYWNlbXNlX2J1ZltUUkFDRU1TRV9NQVhdOworI2VuZGlmCisJLyoKKwkgKiBuY3Vyc2VzL25jdXJzZXN3IGFyZSB0aGUgc2FtZSB1cCB0byB0aGlzIHBvaW50LgorCSAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJLyogcmVjZW50IHZlcnNpb25zIG9mICdzY3JlZW4nIGhhdmUgcGFydGlhbGx5LXdvcmtpbmcgc3VwcG9ydCBmb3IKKwkgKiBVVEYtOCwgYnV0IGRvIG5vdCBwZXJtaXQgQUNTIGF0IHRoZSBzYW1lIHRpbWUgKHNlZSB0dHlfdXBkYXRlLmMpLgorCSAqLworCWJvb2wJCV9zY3JlZW5fYWNzX2ZpeDsKKyNlbmRpZgorfTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihTQ1JFRU4gKikgX25jX3NjcmVlbl9jaGFpbjsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoU0lHX0FUT01JQ19UKSBfbmNfaGF2ZV9zaWd3aW5jaDsKKworCVdJTkRPV0xJU1QgeworCVdJTkRPVwl3aW47CQkvKiBmaXJzdCwgc28gV0lORE9XX0VYVCgpIHdvcmtzICovCisJV0lORE9XTElTVCAqbmV4dDsKKwlTQ1JFRU4gKnNjcmVlbjsJCS8qIHNjcmVlbiBjb250YWluaW5nIHRoZSB3aW5kb3cgKi8KKyNpZmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisJY2hhciBhZGRjaF93b3JrWyhNQl9MRU5fTUFYICogOSkgKyAxXTsKKwl1bnNpZ25lZCBhZGRjaF91c2VkOwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gYWRkY2hfd29ya1tdICovCisJaW50IGFkZGNoX3g7CQkvKiB4LXBvc2l0aW9uIGZvciBhZGRjaF93b3JrW10gKi8KKwlpbnQgYWRkY2hfeTsJCS8qIHktcG9zaXRpb24gZm9yIGFkZGNoX3dvcmtbXSAqLworI2VuZGlmCit9OworCisjZGVmaW5lIFdJTkRPV19FWFQod2luLGZpZWxkKSAoKChXSU5ET1dMSVNUICopKHdpbikpLT5maWVsZCkKKworLyogdXN1YWxseSBpbiA8bGltaXRzLmg+ICovCisjaWZuZGVmIFVDSEFSX01BWAorI2RlZmluZSBVQ0hBUl9NQVggMjU1CisjZW5kaWYKKworLyogVGhlIHRlcm1pbmZvIHNvdXJjZSBpcyBhc3N1bWVkIHRvIGJlIDctYml0IEFTQ0lJICovCisjZGVmaW5lIGlzN2JpdHMoYykJKCh1bnNpZ25lZCkoYykgPCAxMjgpCisKKy8qIENoZWNrcyBmb3IgaXNwcmludCgpIHNob3VsZCBiZSBkb25lIG9uIDgtYml0IGNoYXJhY3RlcnMgKG5vbi13aWRlKSAqLworI2RlZmluZSBpczhiaXRzKGMpCSgodW5zaWduZWQpKGMpIDw9IFVDSEFSX01BWCkKKworI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKGEsYikJKChhKSA+IChiKSAgPyAgKGIpICA6ICAoYSkpCisjZW5kaWYKKworI2lmbmRlZiBtYXgKKyNkZWZpbmUgbWF4KGEsYikJKChhKSA8IChiKSAgPyAgKGIpICA6ICAoYSkpCisjZW5kaWYKKworLyogdXN1YWxseSBpbiA8dW5pc3RkLmg+ICovCisjaWZuZGVmIFNURElOX0ZJTEVOTworI2RlZmluZSBTVERJTl9GSUxFTk8gMAorI2VuZGlmCisKKyNpZm5kZWYgU1RET1VUX0ZJTEVOTworI2RlZmluZSBTVERPVVRfRklMRU5PIDEKKyNlbmRpZgorCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyNkZWZpbmUgU1RERVJSX0ZJTEVOTyAyCisjZW5kaWYKKworI2lmbmRlZiBFWElUX1NVQ0NFU1MKKyNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyNlbmRpZgorCisjaWZuZGVmIEVYSVRfRkFJTFVSRQorI2RlZmluZSBFWElUX0ZBSUxVUkUgMQorI2VuZGlmCisKKyNpZm5kZWYgUl9PSworI2RlZmluZQlSX09LCTQJCS8qIFRlc3QgZm9yIHJlYWQgcGVybWlzc2lvbi4gICovCisjZW5kaWYKKyNpZm5kZWYgV19PSworI2RlZmluZQlXX09LCTIJCS8qIFRlc3QgZm9yIHdyaXRlIHBlcm1pc3Npb24uICAqLworI2VuZGlmCisjaWZuZGVmIFhfT0sKKyNkZWZpbmUJWF9PSwkxCQkvKiBUZXN0IGZvciBleGVjdXRlIHBlcm1pc3Npb24uICAqLworI2VuZGlmCisjaWZuZGVmIEZfT0sKKyNkZWZpbmUJRl9PSwkwCQkvKiBUZXN0IGZvciBleGlzdGVuY2UuICAqLworI2VuZGlmCisKKyNpZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgkJLyogbWF5IGRlZmluZSBPX0JJTkFSWQkqLworI2VuZGlmCisKKyNpZm5kZWYgT19CSU5BUlkKKyNkZWZpbmUgT19CSU5BUlkgMAorI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorI2lmIFVTRV9SRUVOVFJBTlQKKyNkZWZpbmUgQ09VTlRfT1VUQ0hBUlMobikgX25jX2NvdW50X291dGNoYXJzKG4pOworI2Vsc2UKKyNkZWZpbmUgQ09VTlRfT1VUQ0hBUlMobikgX25jX291dGNoYXJzICs9IChuKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgQ09VTlRfT1VUQ0hBUlMobikgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNkZWZpbmUgUkVTRVRfT1VUQ0hBUlMoKSBDT1VOVF9PVVRDSEFSUygtX25jX291dGNoYXJzKQorCisjZGVmaW5lIFVDaGFyKGMpCSgodW5zaWduZWQgY2hhcikoYykpCisjZGVmaW5lIENoQ2hhck9mKGMpCSgoYykgJiAoY2h0eXBlKUFfQ0hBUlRFWFQpCisjZGVmaW5lIENoQXR0ck9mKGMpCSgoYykgJiAoY2h0eXBlKUFfQVRUUklCVVRFUykKKworI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggOCAvKiBzaG91bGQgYmUgPj0gTUJfQ1VSX01BWCwgYnV0IHRoYXQgbWF5IGJlIGEgZnVuY3Rpb24gKi8KKyNlbmRpZgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQgLyogeyAqLworI2RlZmluZSBpc0VJTFNFUShzdGF0dXMpICgoKHNpemVfdClzdGF0dXMgPT0gKHNpemVfdCktMSkgJiYgKGVycm5vID09IEVJTFNFUSkpCisKKyNkZWZpbmUgaW5pdF9tYihzdGF0ZSkJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSkKKworI2lmIE5DVVJTRVNfRVhUX0NPTE9SUworI2RlZmluZSBOdWxDb2xvcgksIDAKKyNlbHNlCisjZGVmaW5lIE51bENvbG9yCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjZGVmaW5lIE51bENoYXIJCTAsMCwwLDAJLyogRklYTUU6IHNlZSBDQ0hBUldfTUFYICovCisjZGVmaW5lIENoYXJPZihjKQkoKGMpLmNoYXJzWzBdKQorI2RlZmluZSBBdHRyT2YoYykJKChjKS5hdHRyKQorCisjZGVmaW5lIEFkZEF0dHIoYyxhKQlBdHRyT2YoYykgfD0gICgoYSkgJiBBX0FUVFJJQlVURVMpCisjZGVmaW5lIFJlbUF0dHIoYyxhKQlBdHRyT2YoYykgJj0gfigoYSkgJiBBX0FUVFJJQlVURVMpCisjZGVmaW5lIFNldEF0dHIoYyxhKQlBdHRyT2YoYykgPSAgICgoYSkgJiBBX0FUVFJJQlVURVMpIHwgV2lkZWNFeHQoYykKKworI2RlZmluZSBOZXdDaGFyMihjLGEpCXsgYSwgeyBjLCBOdWxDaGFyIH0gTnVsQ29sb3IgfQorI2RlZmluZSBOZXdDaGFyKGNoKQlOZXdDaGFyMihDaENoYXJPZihjaCksIENoQXR0ck9mKGNoKSkKKworI2lmIENDSEFSV19NQVggPT0gNQorI2RlZmluZSBDaGFyRXEoYSxiKQkoKChhKS5hdHRyID09IChiKS5hdHRyKSBcCisJCSAgICAgICAmJiAoYSkuY2hhcnNbMF0gPT0gKGIpLmNoYXJzWzBdIFwKKwkJICAgICAgICYmIChhKS5jaGFyc1sxXSA9PSAoYikuY2hhcnNbMV0gXAorCQkgICAgICAgJiYgKGEpLmNoYXJzWzJdID09IChiKS5jaGFyc1syXSBcCisJCSAgICAgICAmJiAoYSkuY2hhcnNbM10gPT0gKGIpLmNoYXJzWzNdIFwKKwkJICAgICAgICYmIChhKS5jaGFyc1s0XSA9PSAoYikuY2hhcnNbNF0gXAorCQkJaWZfRVhUX0NPTE9SUygmJiAoYSkuZXh0X2NvbG9yID09IChiKS5leHRfY29sb3IpKQorI2Vsc2UKKyNkZWZpbmUgQ2hhckVxKGEsYikJKCFtZW1jbXAoJihhKSwgJihiKSwgc2l6ZW9mKGEpKSkKKyNlbmRpZgorCisjZGVmaW5lIFNldENoYXIoY2gsYyxhKSBkbyB7CQkJCQkJCSAgICBcCisJCQkgICAgTkNVUlNFU19DSF9UICpfY3AgPSAmY2g7CQkJCSAgICBcCisJCQkgICAgbWVtc2V0KF9jcCwgMCwgc2l6ZW9mKGNoKSk7CQkJCSAgICBcCisJCQkgICAgX2NwLT5jaGFyc1swXSA9IChjKTsJCQkJCSAgICBcCisJCQkgICAgX2NwLT5hdHRyID0gKGEpOwkJCQkJICAgIFwKKwkJCSAgICBpZl9FWFRfQ09MT1JTKFNldFBhaXIoY2gsIFBBSVJfTlVNQkVSKGEpKSk7CQkgICAgXAorCQkJfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ0hSRUYod2NoKQkoJndjaCkKKyNkZWZpbmUgQ0hERVJFRih3Y2gpCSgqd2NoKQorI2RlZmluZSBBUkdfQ0hfVAlOQ1VSU0VTX0NIX1QgKgorI2RlZmluZSBDQVJHX0NIX1QJY29uc3QgTkNVUlNFU19DSF9UICoKKyNkZWZpbmUgUFVUQ19EQVRBCWNoYXIgUFVUQ19idWZbTUJfTEVOX01BWF07IGludCBQVVRDX2ksIFBVVENfbjsgXAorCQkJbWJzdGF0ZV90IFBVVF9zdDsgd2NoYXJfdCBQVVRDX2NoCisjZGVmaW5lIFBVVENfSU5JVAlpbml0X21iIChQVVRfc3QpCisjZGVmaW5lIFBVVEMoY2gsYikJZG8geyBpZighaXNXaWRlY0V4dChjaCkpIHsJCQkJICAgIFwKKwkJCWlmIChDaGFyYWJsZShjaCkpIHsJCQkJCSAgICBcCisJCQkgICAgZnB1dGMoQ2hhck9mKGNoKSwgYik7CQkJCSAgICBcCisJCQkgICAgQ09VTlRfT1VUQ0hBUlMoMSk7CQkJCQkgICAgXAorCQkJfSBlbHNlIHsJCQkJCQkgICAgXAorCQkJICAgIFBVVENfSU5JVDsJCQkJCQkgICAgXAorCQkJICAgIGZvciAoUFVUQ19pID0gMDsgUFVUQ19pIDwgQ0NIQVJXX01BWDsgKytQVVRDX2kpIHsJICAgIFwKKwkJCQlQVVRDX2NoID0gKGNoKS5jaGFyc1tQVVRDX2ldOwkJCSAgICBcCisJCQkJaWYgKFBVVENfY2ggPT0gTCdcMCcpCQkJCSAgICBcCisJCQkJICAgIGJyZWFrOwkJCQkJICAgIFwKKwkJCQlQVVRDX24gPSB3Y3J0b21iKFBVVENfYnVmLAkJCSAgICBcCisJCQkJCQkgKGNoKS5jaGFyc1tQVVRDX2ldLCAmUFVUX3N0KTsJICAgIFwKKwkJCQlpZiAoUFVUQ19uIDw9IDApIHsJCQkJICAgIFwKKwkJCQkgICAgaWYgKFBVVENfY2ggJiYgaXM4Yml0cyhQVVRDX2NoKSAmJiBQVVRDX2kgPT0gMCkgXAorCQkJCQlwdXRjKFBVVENfY2gsYik7CQkJICAgIFwKKwkJCQkgICAgYnJlYWs7CQkJCQkgICAgXAorCQkJCX0JCQkJCQkgICAgXAorCQkJCWZ3cml0ZShQVVRDX2J1ZiwgKHVuc2lnbmVkKSBQVVRDX24sIDEsIGIpOwkgICAgXAorCQkJICAgIH0JCQkJCQkJICAgIFwKKwkJCSAgICBDT1VOVF9PVVRDSEFSUyhQVVRDX2kpOwkJCQkgICAgXAorCQkJfSB9IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQkxBTksJCU5ld0NoYXIyKCcgJywgV0FfTk9STUFMKQorI2RlZmluZSBaRVJPUwkJTmV3Q2hhcjIoJ1wwJywgV0FfTk9STUFMKQorI2RlZmluZSBJU0JMQU5LKGNoKQkoKGNoKS5jaGFyc1swXSA9PSBMJyAnICYmIChjaCkuY2hhcnNbMV0gPT0gTCdcMCcpCisKKwkvKgorCSAqIFdpZGUgY2hhcmFjdGVycyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIEFfQ0hBUlRFWFQgbWFzayBvZgorCSAqIGF0dHJfdCdzIGJ1dCBhbiBhcHBsaWNhdGlvbiBtaWdodCBoYXZlIHNldCBhIG5hcnJvdyBjaGFyYWN0ZXIgdGhlcmUuCisJICogQnV0IGV2ZW4gaW4gdGhhdCBjYXNlLCBpdCB3b3VsZCBvbmx5IGJlIGEgcHJpbnRhYmxlIGNoYXJhY3Rlciwgb3IKKwkgKiB6ZXJvLiAgT3RoZXJ3aXNlIHdlIGNhbiB1c2UgdGhvc2UgYml0cyB0byB0ZWxsIGlmIGEgY2VsbCBpcyB0aGUKKwkgKiBmaXJzdCBvciBleHRlbnNpb24gcGFydCBvZiBhIHdpZGUgY2hhcmFjdGVyLgorCSAqLworI2RlZmluZSBXaWRlY0V4dChjaCkJKEF0dHJPZihjaCkgJiBBX0NIQVJURVhUKQorI2RlZmluZSBpc1dpZGVjQmFzZShjaCkJKFdpZGVjRXh0KGNoKSA9PSAxKQorI2RlZmluZSBpc1dpZGVjRXh0KGNoKQkoV2lkZWNFeHQoY2gpID4gMSAmJiBXaWRlY0V4dChjaCkgPCAzMikKKyNkZWZpbmUgU2V0V2lkZWNFeHQoZHN0LCBleHQpCUF0dHJPZihkc3QpICY9IH5BX0NIQVJURVhULAkJXAorCQkJCUF0dHJPZihkc3QpIHw9IChleHQgKyAxKQorCisjZGVmaW5lIGlmX1dJREVDKGNvZGUpICBjb2RlCisjZGVmaW5lIENoYXJhYmxlKGNoKQkoKFNQICE9IDAgJiYgU1AtPl9sZWdhY3lfY29kaW5nKQkJXAorCQkJIHx8IChBdHRyT2YoY2gpICYgQV9BTFRDSEFSU0VUKQkJCVwKKwkJCSB8fCAoIWlzV2lkZWNFeHQoY2gpICYmCQkJCVwKKwkJCSAgICAgKGNoKS5jaGFyc1sxXSA9PSBMJ1wwJyAmJgkJCVwKKwkJCSAgICAgX25jX2lzX2NoYXJhYmxlKENoYXJPZihjaCkpKSkKKworI2RlZmluZSBMKGNoKQkJTCAjIyBjaAorI2Vsc2UgLyogfXsgKi8KKyNkZWZpbmUgQ2hhck9mKGMpCUNoQ2hhck9mKGMpCisjZGVmaW5lIEF0dHJPZihjKQlDaEF0dHJPZihjKQorI2RlZmluZSBBZGRBdHRyKGMsYSkJYyB8PSAoYSkKKyNkZWZpbmUgUmVtQXR0cihjLGEpCWMgJj0gfigoYSkgJiBBX0FUVFJJQlVURVMpCisjZGVmaW5lIFNldEF0dHIoYyxhKQljID0gKChjKSAmIH5BX0FUVFJJQlVURVMpIHwgKGEpCisjZGVmaW5lIE5ld0NoYXIoY2gpCShjaCkKKyNkZWZpbmUgTmV3Q2hhcjIoYyxhKQkoKGMpIHwgKGEpKQorI2RlZmluZSBDaGFyRXEoYSxiKQkoKGEpID09IChiKSkKKyNkZWZpbmUgU2V0Q2hhcihjaCxjLGEpCWNoID0gKGMpIHwgKGEpCisjZGVmaW5lIENIUkVGKHdjaCkJd2NoCisjZGVmaW5lIENIREVSRUYod2NoKQl3Y2gKKyNkZWZpbmUgQVJHX0NIX1QJTkNVUlNFU19DSF9UCisjZGVmaW5lIENBUkdfQ0hfVAlOQ1VSU0VTX0NIX1QKKyNkZWZpbmUgUFVUQ19EQVRBCWludCBkYXRhID0gMAorI2RlZmluZSBQVVRDKGNoLGIpCWRvIHsgZGF0YSA9IENoYXJPZihjaCk7IHB1dGMoZGF0YSxiKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBCTEFOSwkJKCcgJ3xBX05PUk1BTCkKKyNkZWZpbmUgWkVST1MJCSgnXDAnfEFfTk9STUFMKQorI2RlZmluZSBJU0JMQU5LKGNoKQkoQ2hhck9mKGNoKSA9PSAnICcpCisKKyNkZWZpbmUgaXNXaWRlY0V4dChjaCkJKDApCisjZGVmaW5lIGlmX1dJREVDKGNvZGUpIC8qIG5vdGhpbmcgKi8KKworI2RlZmluZSBMKGNoKQkJY2gKKyNlbmRpZiAvKiB9ICovCisKKyNkZWZpbmUgQXR0ck9mRChjaCkJQXR0ck9mKENIREVSRUYoY2gpKQorI2RlZmluZSBDaGFyT2ZEKGNoKQlDaGFyT2YoQ0hERVJFRihjaCkpCisjZGVmaW5lIFNldENoYXIyKHdjaCxjaCkgICAgU2V0Q2hhcih3Y2gsQ2hDaGFyT2YoY2gpLENoQXR0ck9mKGNoKSkKKworI2RlZmluZSBCTEFOS19BVFRSCUFfTk9STUFMCisjZGVmaW5lIEJMQU5LX1RFWFQJTCgnICcpCisKKyNkZWZpbmUgQ0hBTkdFRCAgICAgLTEKKworI2RlZmluZSBMRUdBTFlYKHcsIHksIHgpIFwKKwkgICAgICAoKHcpICE9IDAgJiYgXAorCQkoKHgpID49IDAgJiYgKHgpIDw9ICh3KS0+X21heHggJiYgXAorCQkgKHkpID49IDAgJiYgKHkpIDw9ICh3KS0+X21heHkpKQorCisjZGVmaW5lIENIQU5HRURfQ0VMTChsaW5lLGNvbCkgXAorCWlmIChsaW5lLT5maXJzdGNoYXIgPT0gX05PQ0hBTkdFKSBcCisJCWxpbmUtPmZpcnN0Y2hhciA9IGxpbmUtPmxhc3RjaGFyID0gY29sOyBcCisJZWxzZSBpZiAoKGNvbCkgPCBsaW5lLT5maXJzdGNoYXIpIFwKKwkJbGluZS0+Zmlyc3RjaGFyID0gY29sOyBcCisJZWxzZSBpZiAoKGNvbCkgPiBsaW5lLT5sYXN0Y2hhcikgXAorCQlsaW5lLT5sYXN0Y2hhciA9IGNvbAorCisjZGVmaW5lIENIQU5HRURfUkFOR0UobGluZSxzdGFydCxlbmQpIFwKKwlpZiAobGluZS0+Zmlyc3RjaGFyID09IF9OT0NIQU5HRSBcCisJIHx8IGxpbmUtPmZpcnN0Y2hhciA+IChzdGFydCkpIFwKKwkJbGluZS0+Zmlyc3RjaGFyID0gc3RhcnQ7IFwKKwlpZiAobGluZS0+bGFzdGNoYXIgPT0gX05PQ0hBTkdFIFwKKwkgfHwgbGluZS0+bGFzdGNoYXIgPCAoZW5kKSkgXAorCQlsaW5lLT5sYXN0Y2hhciA9IGVuZAorCisjZGVmaW5lIENIQU5HRURfVE9fRU9MKGxpbmUsc3RhcnQsZW5kKSBcCisJaWYgKGxpbmUtPmZpcnN0Y2hhciA9PSBfTk9DSEFOR0UgXAorCSB8fCBsaW5lLT5maXJzdGNoYXIgPiAoc3RhcnQpKSBcCisJCWxpbmUtPmZpcnN0Y2hhciA9IHN0YXJ0OyBcCisJbGluZS0+bGFzdGNoYXIgPSBlbmQKKworI2RlZmluZSBTSVpFT0YodikgKHNpemVvZih2KS9zaXplb2YodlswXSkpCisKKyNkZWZpbmUgRnJlZUlmTmVlZGVkKHApICBpZiAoKHApICE9IDApIGZyZWUocCkKKworLyogRnJlZUFuZE51bGwoKSBpcyBub3QgYSBjb21tYS1zZXBhcmF0ZWQgZXhwcmVzc2lvbiBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgKiBkbyBub3QgYWNjZXB0IGEgbWl4dHVyZSBvZiB2b2lkIHdpdGggdmFsdWVzLgorICovCisjZGVmaW5lIEZyZWVBbmROdWxsKHApICAgZnJlZShwKTsgcCA9IDAKKworI2luY2x1ZGUgPG5jX2FsbG9jLmg+CisKKy8qCisgKiBUVFkgYml0IGRlZmluaXRpb24gZm9yIGNvbnZlcnRpbmcgdGFicyB0byBzcGFjZXMuCisgKi8KKyNpZmRlZiBUQUIzCisjIGRlZmluZSBPRkxBR1NfVEFCUyBUQUIzCS8qIFBPU0lYIHNwZWNpZmllcyBUQUIzICovCisjZWxzZQorIyBpZmRlZiBYVEFCUworIyAgZGVmaW5lIE9GTEFHU19UQUJTIFhUQUJTCS8qIFhUQUJTIGlzIHVzdWFsbHkgdGhlICJzYW1lIiAqLworIyBlbHNlCisjICBpZmRlZiBPWFRBQlMKKyMgICBkZWZpbmUgT0ZMQUdTX1RBQlMgT1hUQUJTCS8qIHRoZSB0cmFkaXRpb25hbCBCU0QgZXF1aXZhbGVudCAqLworIyAgZWxzZQorIyAgIGRlZmluZSBPRkxBR1NfVEFCUyAwCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBTdGFuZGFyZGl6ZS9zaW1wbGlmeSBjb21tb24gbG9vcHMKKyAqLworI2RlZmluZSBlYWNoX3NjcmVlbihwKSBwID0gX25jX3NjcmVlbl9jaGFpbjsgcCAhPSAwOyBwID0gKHApLT5fbmV4dF9zY3JlZW4KKyNkZWZpbmUgZWFjaF93aW5kb3cocCkgcCA9IF9uY193aW5kb3dzOyBwICE9IDA7IHAgPSAocCktPm5leHQKKyNkZWZpbmUgZWFjaF9yaXBvZmYocCkgcCA9IHJpcG9mZl9zdGFjazsgKHAgLSByaXBvZmZfc3RhY2spIDwgTl9SSVBTOyArK3AKKworLyoKKyAqIFByZWZpeGVzIGZvciBjYWxsL3JldHVybiBwb2ludHMgb2YgbGlicmFyeSBmdW5jdGlvbiB0cmFjZXMuICBXZSB1c2UgdGhlc2UgdG8KKyAqIGluc3RydW1lbnQgdGhlIHB1YmxpYyBmdW5jdGlvbnMgc28gdGhhdCB0aGUgdHJhY2VzIGNhbiBiZSBlYXNpbHkgdHJhbnNmb3JtZWQKKyAqIGludG8gcmVncmVzc2lvbiBzY3JpcHRzLgorICovCisjZGVmaW5lIFRfQ0FMTEVEKGZtdCkgImNhbGxlZCB7IiBmbXQKKyNkZWZpbmUgVF9DUkVBVEUoZm10KSAiY3JlYXRlIDoiIGZtdAorI2RlZmluZSBUX1JFVFVSTihmbXQpICJyZXR1cm4gfSIgZm10CisKKyNpZmRlZiBUUkFDRQorCisjaWYgVVNFX1JFRU5UUkFOVAorI2RlZmluZSBUUFVUU19UUkFDRShzKQlfbmNfc2V0X3RwdXRzX3RyYWNlKHMpOworI2Vsc2UKKyNkZWZpbmUgVFBVVFNfVFJBQ0UocykJX25jX3RwdXRzX3RyYWNlID0gczsKKyNlbmRpZgorCisjZGVmaW5lIFNUQVJUX1RSQUNFKCkgXAorCWlmICgoX25jX3RyYWNpbmcgJiBUUkFDRV9NQVhJTVVNKSA9PSAwKSB7IFwKKwkgICAgaW50IHQgPSBfbmNfZ2V0ZW52X251bSgiTkNVUlNFU19UUkFDRSIpOyBcCisJICAgIGlmICh0ID49IDApIFwKKwkJdHJhY2UoKHVuc2lnbmVkKSB0KTsgXAorCX0KKworLyoKKyAqIE1hbnkgb2YgdGhlIF90cmFjZWYoKSBjYWxscyB1c2Ugc3RhdGljIGJ1ZmZlcnM7IGxvY2sgdGhlIHRyYWNlIHN0YXRlIGJlZm9yZQorICogdHJ5aW5nIHRvIGZpbGwgdGhlbS4KKyAqLworI2lmIFVTRV9SRUVOVFJBTlQKKyNkZWZpbmUgVVNFX1RSQUNFRihtYXNrKSBfbmNfdXNlX3RyYWNlZihtYXNrKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJX25jX3VzZV90cmFjZWYgKHVuc2lnbmVkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKQlfbmNfbG9ja2VkX3RyYWNlZiAoY29uc3QgY2hhciAqLCAuLi4pIEdDQ19QUklOVEZMSUtFKDEsMik7CisjZWxzZQorI2RlZmluZSBVU0VfVFJBQ0VGKG1hc2spIChfbmNfdHJhY2luZyAmIChtYXNrKSkKKyNkZWZpbmUgX25jX2xvY2tlZF90cmFjZWYgX3RyYWNlZgorI2VuZGlmCisKKyNkZWZpbmUgVFIobiwgYSkJaWYgKFVTRV9UUkFDRUYobikpIF9uY19sb2NrZWRfdHJhY2VmIGEKKyNkZWZpbmUgVChhKQkJVFIoVFJBQ0VfQ0FMTFMsIGEpCisjZGVmaW5lIFRSQUNFX1JFVFVSTih2YWx1ZSx0eXBlKSByZXR1cm4gX25jX3JldHJhY2VfIyN0eXBlKHZhbHVlKQorCisjZGVmaW5lIHJldHVybkF0dHIoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsYXR0cl90KQorI2RlZmluZSByZXR1cm5CaXRzKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLHVuc2lnbmVkKQorI2RlZmluZSByZXR1cm5Cb29sKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGJvb2wpCisjZGVmaW5lIHJldHVybkNQdHIoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsY3B0cikKKyNkZWZpbmUgcmV0dXJuQ1ZvaWRQdHIoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsY3ZvaWRfcHRyKQorI2RlZmluZSByZXR1cm5DaGFyKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGNodHlwZSkKKyNkZWZpbmUgcmV0dXJuQ29kZShjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxpbnQpCisjZGVmaW5lIHJldHVyblB0cihjb2RlKQkJVFJBQ0VfUkVUVVJOKGNvZGUscHRyKQorI2RlZmluZSByZXR1cm5TUChjb2RlKQkJVFJBQ0VfUkVUVVJOKGNvZGUsc3ApCisjZGVmaW5lIHJldHVyblZvaWQJCVQoKFRfUkVUVVJOKCIiKSkpOyByZXR1cm4KKyNkZWZpbmUgcmV0dXJuVm9pZFB0cihjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSx2b2lkX3B0cikKKyNkZWZpbmUgcmV0dXJuV2luKGNvZGUpCQlUUkFDRV9SRVRVUk4oY29kZSx3aW4pCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0JPT0wpICAgICBfbmNfcmV0cmFjZV9ib29sIChOQ1VSU0VTX0JPT0wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKSBfbmNfcmV0cmFjZV9jdm9pZF9wdHIgKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikgICAgICAgICBfbmNfcmV0cmFjZV9zcCAoU0NSRUVOICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSAgICAgICAgIF9uY19yZXRyYWNlX3dpbiAoV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGF0dHJfdCkgICAgICAgICAgIF9uY19yZXRyYWNlX2F0dHJfdCAoYXR0cl90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopICAgICAgICAgICBfbmNfcmV0cmFjZV9wdHIgKGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSAgICAgICAgICAgX25jX3RyYWNlX3R0eW1vZGUoVFRZICp0dHkpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgICAgICAgICAgIF9uY192YXJhcmdzIChjb25zdCBjaGFyICosIHZhX2xpc3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkgICAgICAgICAgIF9uY19yZXRyYWNlX2NodHlwZSAoY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopICAgICBfbmNfYWx0Y2hhcnNldF9uYW1lKGF0dHJfdCwgY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopICAgICBfbmNfcmV0cmFjZV9jcHRyIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgICAgICAgICAgICAgIF9uY19yZXRyYWNlX2ludCAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh1bnNpZ25lZCkgICAgICAgICBfbmNfcmV0cmFjZV91bnNpZ25lZCAodW5zaWduZWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQgKikgICAgICAgICAgIF9uY19yZXRyYWNlX3ZvaWRfcHRyICh2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpICAgICAgICAgICAgIF9uY19maWZvX2R1bXAgKFNDUkVFTiAqKTsKKworI2lmIFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfV1JBUFBFRF9WQVIobG9uZywgX25jX291dGNoYXJzKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoY29uc3QgY2hhciAqLCBfbmNfdHB1dHNfdHJhY2UpOworI2RlZmluZSBfbmNfb3V0Y2hhcnMgICAgICAgTkNVUlNFU19QVUJMSUNfVkFSKF9uY19vdXRjaGFycygpKQorI2RlZmluZSBfbmNfdHB1dHNfdHJhY2UgICAgTkNVUlNFU19QVUJMSUNfVkFSKF9uY190cHV0c190cmFjZSgpKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpCQlfbmNfc2V0X3RwdXRzX3RyYWNlIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpCQlfbmNfY291bnRfb3V0Y2hhcnMgKGxvbmcpOworI2Vsc2UKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY29uc3QgY2hhciAqKSBfbmNfdHB1dHNfdHJhY2U7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpICAgICAgICAgX25jX291dGNoYXJzOworI2VuZGlmCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIodW5zaWduZWQpICAgICBfbmNfdHJhY2luZzsKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfdmlzd2J1ZjIgKGludCwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXN3YnVmbiAoY29uc3Qgd2NoYXJfdCAqLCBpbnQpOworI2VuZGlmCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXNjYnVmMiAoaW50LCBjb25zdCBOQ1VSU0VTX0NIX1QgKiwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXNjYnVmIChjb25zdCBOQ1VSU0VTX0NIX1QgKiwgaW50KTsKKworI2Vsc2UgLyogIVRSQUNFICovCisKKyNkZWZpbmUgU1RBUlRfVFJBQ0UoKSAvKiBub3RoaW5nICovCisKKyNkZWZpbmUgVChhKQorI2RlZmluZSBUUihuLCBhKQorI2RlZmluZSBUUFVUU19UUkFDRShzKQorCisjZGVmaW5lIHJldHVybkF0dHIoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuQml0cyhjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5Cb29sKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkNQdHIoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuQ1ZvaWRQdHIoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuQ2hhcihjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5Db2RlKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVyblB0cihjb2RlKQkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuU1AoY29kZSkJCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVyblZvaWQJCXJldHVybgorI2RlZmluZSByZXR1cm5Wb2lkUHRyKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybldpbihjb2RlKQkJcmV0dXJuIGNvZGUKKworI2VuZGlmIC8qIFRSQUNFLyFUUkFDRSAqLworCisvKgorICogUmV0dXJuLWNvZGVzIGZvciB0Z2V0ZW50KCkgYW5kIGZyaWVuZHMuCisgKi8KKyNkZWZpbmUgVEdFVEVOVF9ZRVMgIDEJCS8qIGVudHJ5IGlzIGZvdW5kICovCisjZGVmaW5lIFRHRVRFTlRfTk8gICAwCQkvKiBlbnRyeSBpcyBub3QgZm91bmQgKi8KKyNkZWZpbmUgVEdFVEVOVF9FUlIgLTEJCS8qIGFuIGVycm9yIG9jY3VycmVkICovCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXNidWYyIChpbnQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfdmlzYnVmbiAoY29uc3QgY2hhciAqLCBpbnQpOworCisjZGVmaW5lIEVNUFRZX01PRFVMRShuYW1lKSBcCitleHRlcm4JTkNVUlNFU19FWFBPUlQodm9pZCkgbmFtZSAodm9pZCk7IFwKKwlOQ1VSU0VTX0VYUE9SVCh2b2lkKSBuYW1lICh2b2lkKSB7IH0KKworI2RlZmluZSBBTExfQlVUX0NPTE9SICgoY2h0eXBlKX4oQV9DT0xPUikpCisjZGVmaW5lIE5PTkJMQU5LX0FUVFIgKEFfTk9STUFMfEFfQk9MRHxBX0RJTXxBX0JMSU5LKQorI2RlZmluZSBYTUNfQ0hBTkdFUyhjKSAoKGMpICYgU1AtPl94bWNfc3VwcHJlc3MpCisKKyNkZWZpbmUgdG9nZ2xlX2F0dHJfb24oUyxhdCkge1wKKyAgIGlmIChQQUlSX05VTUJFUihhdCkgPiAwKSB7XAorICAgICAgKFMpID0gKChTKSAmIEFMTF9CVVRfQ09MT1IpIHwgKGF0KTtcCisgICB9IGVsc2Uge1wKKyAgICAgIChTKSB8PSAoYXQpO1wKKyAgIH1cCisgICBUUihUUkFDRV9BVFRSUywgKCJuZXcgYXR0cmlidXRlIGlzICVzIiwgX3RyYWNlYXR0cigoUykpKSk7fQorCisKKyNkZWZpbmUgdG9nZ2xlX2F0dHJfb2ZmKFMsYXQpIHtcCisgICBpZiAoUEFJUl9OVU1CRVIoYXQpID4gMCkge1wKKyAgICAgIChTKSAmPSB+KGF0fEFfQ09MT1IpO1wKKyAgIH0gZWxzZSB7XAorICAgICAgKFMpICY9IH4oYXQpO1wKKyAgIH1cCisgICBUUihUUkFDRV9BVFRSUywgKCJuZXcgYXR0cmlidXRlIGlzICVzIiwgX3RyYWNlYXR0cigoUykpKSk7fQorCisjZGVmaW5lIERlbENoYXJDb3N0KGNvdW50KSBcCisJCSgocGFybV9kY2ggIT0gMCkgXAorCQk/IFNQLT5fZGNoX2Nvc3QgXAorCQk6ICgoZGVsZXRlX2NoYXJhY3RlciAhPSAwKSBcCisJCQk/IChTUC0+X2RjaDFfY29zdCAqIGNvdW50KSBcCisJCQk6IElORklOSVRZKSkKKworI2RlZmluZSBJbnNDaGFyQ29zdChjb3VudCkgXAorCQkoKHBhcm1faWNoICE9IDApIFwKKwkJPyBTUC0+X2ljaF9jb3N0IFwKKwkJOiAoKGVudGVyX2luc2VydF9tb2RlICYmIGV4aXRfaW5zZXJ0X21vZGUpIFwKKwkJICA/IFNQLT5fc21pcl9jb3N0ICsgU1AtPl9ybWlyX2Nvc3QgKyAoU1AtPl9pcF9jb3N0ICogY291bnQpIFwKKwkJICA6ICgoaW5zZXJ0X2NoYXJhY3RlciAhPSAwKSBcCisJCSAgICA/ICgoU1AtPl9pY2gxX2Nvc3QgKyBTUC0+X2lwX2Nvc3QpICogY291bnQpIFwKKwkJICAgIDogSU5GSU5JVFkpKSkKKworI2lmIFVTRV9YTUNfU1VQUE9SVAorI2RlZmluZSBVcGRhdGVBdHRycyhjKQlpZiAoIVNhbWVBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSwgYykpIHsgXAorCQkJCWF0dHJfdCBjaGcgPSBBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSk7IFwKKwkJCQlWSURBVFRSKEF0dHJPZihjKSwgR2V0UGFpcihjKSk7IFwKKwkJCQlpZiAobWFnaWNfY29va2llX2dsaXRjaCA+IDAgXAorCQkJCSAmJiBYTUNfQ0hBTkdFUygoY2hnIF4gQXR0ck9mKFNDUkVFTl9BVFRSUyhTUCkpKSkpIHsgXAorCQkJCQlUKCgiJXMgQCVkIGJlZm9yZSBnbGl0Y2ggJWQsJWQiLCBcCisJCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCQkJCVNQLT5fY3Vyc3JvdywgXAorCQkJCQkJU1AtPl9jdXJzY29sKSk7IFwKKwkJCQkJX25jX2RvX3htY19nbGl0Y2goY2hnKTsgXAorCQkJCX0gXAorCQkJfQorI2Vsc2UKKyNkZWZpbmUgVXBkYXRlQXR0cnMoYykJaWYgKCFTYW1lQXR0ck9mKFNDUkVFTl9BVFRSUyhTUCksIGMpKSBcCisJCQkJVklEQVRUUihBdHRyT2YoYyksIEdldFBhaXIoYykpOworI2VuZGlmCisKKy8qCisgKiBNYWNyb3MgdG8gbWFrZSBhZGRpdGlvbmFsIHBhcmFtZXRlciB0byBpbXBsZW1lbnQgd2dldGNoX2V2ZW50cygpCisgKi8KKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyNkZWZpbmUgRVZFTlRMSVNUXzB0aChwYXJhbSkgcGFyYW0KKyNkZWZpbmUgRVZFTlRMSVNUXzFzdChwYXJhbSkgcGFyYW0KKyNkZWZpbmUgRVZFTlRMSVNUXzJuZChwYXJhbSkgLCBwYXJhbQorI2Vsc2UKKyNkZWZpbmUgRVZFTlRMSVNUXzB0aChwYXJhbSkgdm9pZAorI2RlZmluZSBFVkVOVExJU1RfMXN0KHBhcmFtKSAvKiBub3RoaW5nICovCisjZGVmaW5lIEVWRU5UTElTVF8ybmQocGFyYW0pIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaWYgTkNVUlNFU19FWFBBTkRFRCAmJiBOQ1VSU0VTX0VYVF9GVU5DUworCisjdW5kZWYgIHRvZ2dsZV9hdHRyX29uCisjZGVmaW5lIHRvZ2dsZV9hdHRyX29uKFMsYXQpIF9uY190b2dnbGVfYXR0cl9vbigmKFMpLCBhdCkKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdG9nZ2xlX2F0dHJfb24gKGF0dHJfdCAqLCBhdHRyX3QpOworCisjdW5kZWYgIHRvZ2dsZV9hdHRyX29mZgorI2RlZmluZSB0b2dnbGVfYXR0cl9vZmYoUyxhdCkgX25jX3RvZ2dsZV9hdHRyX29mZigmKFMpLCBhdCkKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdG9nZ2xlX2F0dHJfb2ZmIChhdHRyX3QgKiwgYXR0cl90KTsKKworI3VuZGVmICBEZWxDaGFyQ29zdAorI2RlZmluZSBEZWxDaGFyQ29zdChjb3VudCkgX25jX0RlbENoYXJDb3N0KGNvdW50KQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX0RlbENoYXJDb3N0IChpbnQpOworCisjdW5kZWYgIEluc0NoYXJDb3N0CisjZGVmaW5lIEluc0NoYXJDb3N0KGNvdW50KSBfbmNfSW5zQ2hhckNvc3QoY291bnQpCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfSW5zQ2hhckNvc3QgKGludCk7CisKKyN1bmRlZiAgVXBkYXRlQXR0cnMKKyNkZWZpbmUgVXBkYXRlQXR0cnMoYykgX25jX1VwZGF0ZUF0dHJzKGMpCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX1VwZGF0ZUF0dHJzIChOQ1VSU0VTX0NIX1QpOworCisjZWxzZQorCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2V4cGFuZGVkICh2b2lkKTsKKworI2VuZGlmCisKKyNpZiAhTkNVUlNFU19FWFRfRlVOQ1MKKyNkZWZpbmUgc2V0X2VzY2RlbGF5KHZhbHVlKSBFU0NERUxBWSA9IHZhbHVlCisjZW5kaWYKKworI2lmICFIQVZFX0dFVENXRAorI2RlZmluZSBnZXRjd2QoYnVmLGxlbikgZ2V0d2QoYnVmKQorI2VuZGlmCisKKy8qIGNoYXJhYmxlLmMgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19pc19jaGFyYWJsZSh3Y2hhcl90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY190b19jaGFyKHdpbnRfdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQod2ludF90KSBfbmNfdG9fd2lkZWNoYXIoaW50KTsKKyNlbmRpZgorCisvKiBjb21wX2NhcHRhYi5jICovCit0eXBlZGVmIHN0cnVjdCB7CisJc2hvcnQJbnRlX25hbWU7CS8qIG9mZnNldCBvZiBuYW1lIHRvIGhhc2ggb24gKi8KKwlpbnQJbnRlX3R5cGU7CS8qIEJPT0xFQU4sIE5VTUJFUiBvciBTVFJJTkcgKi8KKwlzaG9ydAludGVfaW5kZXg7CS8qIGluZGV4IG9mIGFzc29jaWF0ZWQgdmFyaWFibGUgaW4gaXRzIGFycmF5ICovCisJc2hvcnQJbnRlX2xpbms7CS8qIGluZGV4IGluIHRhYmxlIG9mIG5leHQgaGFzaCwgb3IgLTEgKi8KK30gbmFtZV90YWJsZV9kYXRhOworCit0eXBlZGVmIHN0cnVjdAoreworCXNob3J0CWZyb207CisJc2hvcnQJdG87CisJc2hvcnQJc291cmNlOworfSBhbGlhc190YWJsZV9kYXRhOworCisvKiBkb3VwZGF0ZS5jICovCisjaWYgVVNFX1hNQ19TVVBQT1JUCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2RvX3htY19nbGl0Y2ggKGF0dHJfdCk7CisjZW5kaWYKKworLyogaGFyZHNjcm9sbC5jICovCisjaWYgZGVmaW5lZChUUkFDRSkgfHwgZGVmaW5lZChTQ1JPTExERUJVRykgfHwgZGVmaW5lZChIQVNIREVCVUcpCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2xpbmVkdW1wICh2b2lkKTsKKyNlbmRpZgorCisvKiBsaWJfYWNzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfaW5pdF9hY3MgKHZvaWQpOwkvKiBjb3JyZXNwb25kcyB0byB0cmFkaXRpb25hbCAnaW5pdF9hY3MoKScgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19tc2VjX2Nvc3QgKGNvbnN0IGNoYXIgKmNvbnN0LCBpbnQpOyAgLyogdXNlZCBieSAndGFjaycgcHJvZ3JhbSAqLworCisvKiBsaWJfYWRkY2guYyAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19idWlsZF93Y2goV0lORE9XICp3aW4sIEFSR19DSF9UIGNoKTsKKyNlbmRpZgorCisvKiBsaWJfYWRkc3RyLmMgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVCAmJiAhZGVmaW5lZChVU0VfVEVSTUxJQikKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY193Y2hzdHJsZW4oY29uc3QgY2NoYXJfdCAqKTsKKyNlbmRpZgorCisvKiBsaWJfY29sb3IuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19yZXNldF9jb2xvcnModm9pZCk7CisKKy8qIGxpYl9nZXRjaC5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfd2dldGNoKFdJTkRPVyAqLCB1bnNpZ25lZCBsb25nICosIGludCBFVkVOVExJU1RfMm5kKF9uY19ldmVudGxpc3QgKikpOworCisvKiBsaWJfaW5zY2guYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2luc2VydF9jaChXSU5ET1cgKiwgY2h0eXBlKTsKKworLyogbGliX212Y3VyLmMgKi8KKyNkZWZpbmUgSU5GSU5JVFkJMTAwMDAwMAkvKiBjb3N0OiB0b28gaGlnaCB0byB1c2UgKi8KKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19tdmN1cl9pbml0ICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbXZjdXJfcmVzdW1lICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbXZjdXJfd3JhcCAodm9pZCk7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19zY3JvbGxuIChpbnQsIGludCwgaW50LCBpbnQpOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NjcmVlbl9pbml0ICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc2NyZWVuX3Jlc3VtZSAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NjcmVlbl93cmFwICh2b2lkKTsKKworLyogbGliX21vdXNlLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19oYXNfbW91c2UgKHZvaWQpOworCisvKiBsaWJfbXZjdXIuYyAqLworI2RlZmluZSBJTkZJTklUWQkxMDAwMDAwCS8qIGNvc3Q6IHRvbyBoaWdoIHRvIHVzZSAqLworI2RlZmluZSBCQVVEQllURQk5CS8qIDkgPSA3IGJpdHMgKyAxIHBhcml0eSArIDEgc3RvcCAqLworCisvKiBsaWJfc2V0dXAuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX2dldF9sb2NhbGUodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfdW5pY29kZV9sb2NhbGUodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfbG9jYWxlX2JyZWFrc19hY3MoVEVSTUlOQUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfc2V0dXB0ZXJtKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBpbnQsIGludCAqLCBib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZ2V0X3NjcmVlbnNpemUoU0NSRUVOICosIGludCAqLCBpbnQgKik7CisKKy8qIGxpYl90c3RwLmMgKi8KKyNpZiBVU0VfU0lHV0lOQ0gKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19oYW5kbGVfc2lnd2luY2goU0NSRUVOICopOworI2Vsc2UKKyNkZWZpbmUgX25jX2hhbmRsZV9zaWd3aW5jaChhKSAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyogbGliX3VuZ2V0Y2guYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3VuZ2V0Y2ggKFNDUkVFTiAqLCBpbnQpOworCisvKiBsaWJfd2Fjcy5jICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfaW5pdF93YWNzKHZvaWQpOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpzX2hlYWQ7CS8qIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIChtYXkgYmUgbnVsbCkgKi8KKyAgICBjaGFyICpzX3RhaWw7CS8qIGVuZCBvZiB0aGUgc3RyaW5nIChtYXkgYmUgbnVsbCkgKi8KKyAgICBzaXplX3Qgc19zaXplOwkvKiBjdXJyZW50IHJlbWFpbmluZyBzaXplIGF2YWlsYWJsZSAqLworICAgIHNpemVfdCBzX2luaXQ7CS8qIHRvdGFsIHNpemUgYXZhaWxhYmxlICovCit9IHN0cmluZ19kZXNjOworCisvKiBzdHJpbmdzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzdHJpbmdfZGVzYyAqKSBfbmNfc3RyX2luaXQgKHN0cmluZ19kZXNjICosIGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzdHJpbmdfZGVzYyAqKSBfbmNfc3RyX251bGwgKHN0cmluZ19kZXNjICosIHNpemVfdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoc3RyaW5nX2Rlc2MgKikgX25jX3N0cl9jb3B5IChzdHJpbmdfZGVzYyAqLCBzdHJpbmdfZGVzYyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfc2FmZV9zdHJjYXQgKHN0cmluZ19kZXNjICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3NhZmVfc3RyY3B5IChzdHJpbmdfZGVzYyAqLCBjb25zdCBjaGFyICopOworCisjaWYgIUhBVkVfU1RSU1RSCisjZGVmaW5lIHN0cnN0ciBfbmNfc3Ryc3RyCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworLyogc2FmZV9zcHJpbnRmLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19wcmludGZfc3RyaW5nIChjb25zdCBjaGFyICosIHZhX2xpc3QpOworCisvKiB0cmllcy5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfYWRkX3RvX3RyeSAoVFJJRVMgKiosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX2V4cGFuZF90cnkgKFRSSUVTICosIHVuc2lnbmVkLCBpbnQgKiwgc2l6ZV90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19yZW1vdmVfa2V5IChUUklFUyAqKiwgdW5zaWduZWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3JlbW92ZV9zdHJpbmcgKFRSSUVTICoqLCBjb25zdCBjaGFyICopOworCisvKiBlbHNld2hlcmUgLi4uICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRU5UUlkgKikgX25jX2RlbGlua19lbnRyeSAoRU5UUlkgKiwgVEVSTVRZUEUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCBjaGFyICopIF9uY19rZXluYW1lIChTQ1JFRU4gKiwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgX25jX3VuY3RybCAoU0NSRUVOICosIGNodHlwZSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoU0NSRUVOICopIF9uY19zY3JlZW5fb2YgKFdJTkRPVyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgX25jX21ha2VuZXcgKGludCwgaW50LCBpbnQsIGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY190cmFjZV9idWYgKGludCwgc2l6ZV90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY190cmFjZV9idWZjYXQgKGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY190cmFjZWNoYXIgKFNDUkVFTiAqLCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3RyYWNlbW91c2UgKFNDUkVFTiAqLCBNRVZFTlQgY29uc3QgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfYWNjZXNzIChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfYmF1ZHJhdGUgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZnJlZXdpbiAoV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2dldGVudl9udW0gKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfa2V5cGFkIChTQ1JFRU4gKiwgYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfb3NwZWVkIChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX291dGNoIChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3JlYWRfdGVybWNhcF9lbnRyeSAoY29uc3QgY2hhciAqY29uc3QsIFRFUk1UWVBFICpjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfc2V0dXBzY3JlZW4gKGludCwgaW50LCBGSUxFICosIGJvb2wsIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfdGltZWRfd2FpdCAoU0NSRUVOICosIGludCwgaW50LCBpbnQgKiBFVkVOVExJU1RfMm5kKF9uY19ldmVudGxpc3QgKikpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19kb19jb2xvciAoc2hvcnQsIHNob3J0LCBib29sLCBpbnQgKCopKGludCkpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mbHVzaCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfYW5kX2V4aXQgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfZW50cnkgKEVOVFJZICosIFRFUk1UWVBFICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mcmVlYWxsICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfaGFzaF9tYXAgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19pbml0X2tleXRyeSAoU0NSRUVOICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19rZWVwX3RpY19kaXIgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX21ha2Vfb2xkaGFzaCAoaW50IGkpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zY3JvbGxfb2xkaGFzaCAoaW50IG4sIGludCB0b3AsIGludCBib3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zY3JvbGxfb3B0aW1pemUgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zZXRfYnVmZmVyIChGSUxFICosIGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zaWduYWxfaGFuZGxlciAoYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3N5bmNob29rIChXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3RyYWNlX3RyaWVzIChUUklFUyAqKTsKKworI2lmIE5PX0xFQUtTCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2FsbG9jX2VudHJ5X2xlYWtzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19jYXB0b2luZm9fbGVha3Modm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2NvZGVzX2xlYWtzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19jb21wX2NhcHRhYl9sZWFrcyh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfY29tcF9zY2FuX2xlYWtzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19rZXluYW1lX2xlYWtzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19uYW1lc19sZWFrcyh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdGdldGVudF9sZWFrcyh2b2lkKTsKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9URVJNTElCCitleHRlcm4gTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DSF9UKSBfbmNfcmVuZGVyIChXSU5ET1cgKiwgTkNVUlNFU19DSF9UKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY193YWRkY2hfbm9zeW5jIChXSU5ET1cgKiwgY29uc3QgTkNVUlNFU19DSF9UKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc2Nyb2xsX3dpbmRvdyAoV0lORE9XICosIGludCBjb25zdCwgTkNVUlNFU19TSVpFX1QgY29uc3QsIE5DVVJTRVNfU0laRV9UIGNvbnN0LCBOQ1VSU0VTX0NIX1QpOworI2VuZGlmCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVCAmJiAhZGVmaW5lZChVU0VfVEVSTUxJQikKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzaXplX3QpIF9uY193Y3J0b21iIChjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsKKyNlbmRpZgorCisjaWYgVVNFX1NJWkVDSEFOR0UKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdXBkYXRlX3NjcmVlbnNpemUgKFNDUkVFTiAqKTsKKyNlbmRpZgorCisjaWYgSEFWRV9SRVNJWkVURVJNCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3Jlc2l6ZV9tYXJnaW5zIChXSU5ET1cgKik7CisjZWxzZQorI2RlZmluZSBfbmNfcmVzaXplX21hcmdpbnMod3ApIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZXZlbnRsaXN0X3RpbWVvdXQoX25jX2V2ZW50bGlzdCAqKTsKKyNlbHNlCisjZGVmaW5lIHdnZXRjaF9ldmVudHMod2luLCBldmwpIHdnZXRjaCh3aW4pCisjZGVmaW5lIHdnZXRuc3RyX2V2ZW50cyh3aW4sIHN0ciwgbWF4bGVuLCBldmwpIHdnZXRuc3RyKHdpbiwgc3RyLCBtYXhsZW4pCisjZW5kaWYKKworLyoKKyAqIE5vdCBldmVyeW9uZSBoYXMgdnNzY2FuZigpLCBidXQgd2UnZCBsaWtlIHRvIHVzZSBpdCBmb3Igc2NhbncoKS4KKyAqLworI2lmICFIQVZFX1ZTU0NBTkYKK2V4dGVybiBpbnQgdnNzY2FuZihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBfX2FyZyk7CisjZW5kaWYKKworLyogc2Nyb2xsIGluZGljZXMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoaW50ICopIF9uY19vbGRudW1zOworCisjZGVmaW5lIFVTRV9TRVRCVUZfMCAwCisKKyNkZWZpbmUgTkNfQlVGRkVSRUQoZmxhZykgX25jX3NldF9idWZmZXIoU1AtPl9vZnAsIGZsYWcpCisKKyNkZWZpbmUgTkNfT1VUUFVUICgoU1AgIT0gMCkgPyBTUC0+X29mcCA6IHN0ZG91dCkKKworLyoKKyAqIE9uIHN5c3RlbXMgd2l0aCBhIGJyb2tlbiBsaW5rZXIsIGRlZmluZSAnU1AnIGFzIGEgZnVuY3Rpb24gdG8gZm9yY2UgdGhlCisgKiBsaW5rZXIgdG8gcHVsbCBpbiB0aGUgZGF0YS1vbmx5IG1vZHVsZSB3aXRoICdTUCcuCisgKi8KKyNpZiBCUk9LRU5fTElOS0VSCisjZGVmaW5lIFNQIF9uY19zY3JlZW4oKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFNDUkVFTiAqKSBfbmNfc2NyZWVuICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19hbGxvY19zY3JlZW4gKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zZXRfc2NyZWVuIChTQ1JFRU4gKik7CisjZWxzZQorLyogY3VycmVudCBzY3JlZW4gaXMgcHJpdmF0ZSBkYXRhOyBhdm9pZCBwb3NzaWJsZSBsaW5raW5nIGNvbmZsaWN0cyB0b28gKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoU0NSRUVOICopIFNQOworI2RlZmluZSBfbmNfYWxsb2Nfc2NyZWVuKCkgKChTUCA9IHR5cGVDYWxsb2MoU0NSRUVOLCAxKSkgIT0gMCkKKyNkZWZpbmUgX25jX3NldF9zY3JlZW4oc3ApIFNQID0gc3AKKyNlbmRpZgorCisvKgorICogV2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGxpbmVzIG9yIGNvbHVtbnMgY2FwYWJpbGl0aWVzIGludGVybmFsbHksIGJlY2F1c2UKKyAqIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIG11bHRpcGxlIHNjcmVlbnMgdW5kZXIgWCwgaXQncyBxdWl0ZSBwb3NzaWJsZQorICogdGhleSBjb3VsZCBhbGwgaGF2ZSB0eXBlIHh0ZXJtIGJ1dCBoYXZlIGRpZmZlcmVudCBzaXplcyEgIFNvLi4uCisgKi8KKyNkZWZpbmUgc2NyZWVuX2xpbmVzCVNQLT5fbGluZXMKKyNkZWZpbmUgc2NyZWVuX2NvbHVtbnMJU1AtPl9jb2x1bW5zCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19zbGtfaW5pdGlhbGl6ZSAoV0lORE9XICosIGludCk7CisKKy8qCisgKiBTb21lIGNvbnN0YW50cyByZWxhdGVkIHRvIFNMSydzCisgKi8KKyNkZWZpbmUgTUFYX1NLRVlfT0xECSAgIDgJLyogY291bnQgb2Ygc29mdCBrZXlzICovCisjZGVmaW5lIE1BWF9TS0VZX0xFTl9PTEQgICA4CS8qIG1heCBsZW5ndGggb2Ygc29mdCBrZXkgdGV4dCAqLworI2RlZmluZSBNQVhfU0tFWV9QQyAgICAgICAxMiAgICAvKiBUaGlzIGlzIHdoYXQgbW9zdCBQQydzIGhhdmUgKi8KKyNkZWZpbmUgTUFYX1NLRVlfTEVOX1BDICAgIDUKKworLyogTWFjcm8gdG8gY2hlY2sgd2hldGhlciBvciBub3Qgd2UgdXNlIGEgc3RhbmRhcmQgZm9ybWF0ICovCisjZGVmaW5lIFNMS19TVERGTVQoZm10KSAoZm10IDwgMykKKy8qIE1hY3JvIHRvIGRldGVybWluZSBoZWlnaHQgb2YgbGFiZWwgd2luZG93ICovCisjZGVmaW5lIFNMS19MSU5FUyhmbXQpICAoU0xLX1NUREZNVChmbXQpID8gMSA6ICgoZm10KSAtIDIpKQorCisjZGVmaW5lIE1BWF9TS0VZKGZtdCkgICAgIChTTEtfU1RERk1UKGZtdCk/IE1BWF9TS0VZX09MRCA6IE1BWF9TS0VZX1BDKQorI2RlZmluZSBNQVhfU0tFWV9MRU4oZm10KSAoU0xLX1NUREZNVChmbXQpPyBNQVhfU0tFWV9MRU5fT0xEIDogTUFYX1NLRVlfTEVOX1BDKQorCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmlwb2ZmbGluZSAoaW50IGxpbmUsIGludCAoKmluaXQpKFdJTkRPVyAqLGludCkpOworCisvKgorICogQ29tbW9uIGVycm9yIG1lc3NhZ2VzCisgKi8KKyNkZWZpbmUgTVNHX05PX01FTU9SWSAiT3V0IG9mIG1lbW9yeSIKKyNkZWZpbmUgTVNHX05PX0lOUFVUUyAiUHJlbWF0dXJlIEVPRiIKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIENVUlNFU19QUklWX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMvZmlmb19kZWZzLmggYi9uY3Vyc2VzL2ZpZm9fZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOWFlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2ZpZm9fZGVmcy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29tbW9uIG1hY3JvcyBmb3IgbGliX2dldGNoLmMsIGxpYl91bmdldGNoLmMKKyAqCisgKiAkSWQ6IGZpZm9fZGVmcy5oLHYgMS42IDIwMDgvMDYvMjggMTU6NTI6MzIgdG9tIEV4cCAkCisgKi8KKworI2lmbmRlZiBGSUZPX0RFRlNfSAorI2RlZmluZSBGSUZPX0RFRlNfSCAxCisKKyNkZWZpbmUgaGVhZAlzcC0+X2ZpZm9oZWFkCisjZGVmaW5lIHRhaWwJc3AtPl9maWZvdGFpbAorLyogcGVlayBwb2ludHMgdG8gbmV4dCB1bmludGVycHJldGVkIGNoYXJhY3RlciAqLworI2RlZmluZSBwZWVrCXNwLT5fZmlmb3BlZWsKKworI2RlZmluZSBoX2luYygpIHsgaGVhZCA9PSBGSUZPX1NJWkUtMSA/IGhlYWQgPSAwIDogaGVhZCsrOyBpZiAoaGVhZCA9PSB0YWlsKSBoZWFkID0gLTEsIHRhaWwgPSAwO30KKyNkZWZpbmUgaF9kZWMoKSB7IGhlYWQgPT0gMCA/IGhlYWQgPSBGSUZPX1NJWkUtMSA6IGhlYWQtLTsgaWYgKGhlYWQgPT0gdGFpbCkgdGFpbCA9IC0xO30KKyNkZWZpbmUgdF9pbmMoKSB7IHRhaWwgPT0gRklGT19TSVpFLTEgPyB0YWlsID0gMCA6IHRhaWwrKzsgaWYgKHRhaWwgPT0gaGVhZCkgdGFpbCA9IC0xO30KKyNkZWZpbmUgdF9kZWMoKSB7IHRhaWwgPT0gMCA/IHRhaWwgPSBGSUZPX1NJWkUtMSA6IHRhaWwtLTsgaWYgKGhlYWQgPT0gdGFpbCkgZmlmb19jbGVhcihzcCk7fQorI2RlZmluZSBwX2luYygpIHsgcGVlayA9PSBGSUZPX1NJWkUtMSA/IHBlZWsgPSAwIDogcGVlaysrO30KKworI2RlZmluZSBjb29rZWRfa2V5X2luX2ZpZm8oKQkoKGhlYWQgIT0gLTEpICYmIChwZWVrICE9IGhlYWQpKQorI2RlZmluZSByYXdfa2V5X2luX2ZpZm8oKQkoKGhlYWQgIT0gLTEpICYmIChwZWVrICE9IHRhaWwpKQorCisjdW5kZWYgSElERV9FSU5UUgorCisjZW5kaWYgLyogRklGT19ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMvbGxpYi1sbmN1cnNlcyBiL25jdXJzZXMvbGxpYi1sbmN1cnNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBlMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy9sbGliLWxuY3Vyc2VzCkBAIC0wLDAgKzEsMzQzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni0yMDA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vdHR5L2hhcmRzY3JvbGwuYyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI3VuZGVmIF9uY19vbGRudW1zCitpbnQJKl9uY19vbGRudW1zOworCisjdW5kZWYgX25jX3Njcm9sbF9vcHRpbWl6ZQordm9pZAlfbmNfc2Nyb2xsX29wdGltaXplKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbGluZWR1bXAKK3ZvaWQJX25jX2xpbmVkdW1wKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHR5L2hhc2htYXAuYyAqLworCisjaW5jbHVkZSA8dGVybS5oPgorCisjdW5kZWYgX25jX2hhc2hfbWFwCit2b2lkCV9uY19oYXNoX21hcCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX21ha2Vfb2xkaGFzaAordm9pZAlfbmNfbWFrZV9vbGRoYXNoKAorCQlpbnQJaSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JvbGxfb2xkaGFzaAordm9pZAlfbmNfc2Nyb2xsX29sZGhhc2goCisJCWludAluLCAKKwkJaW50CXRvcCwgCisJCWludAlib3QpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfYWRkY2guYyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI3VuZGVmIF9uY19yZW5kZXIKK2NodHlwZQlfbmNfcmVuZGVyKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgX25jX3dhZGRjaF9ub3N5bmMKK2ludAlfbmNfd2FkZGNoX25vc3luYygKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZGNoCitpbnQJd2FkZGNoKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNodHlwZSBjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2VjaG9jaGFyCitpbnQJd2VjaG9jaGFyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNodHlwZSBjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2FkZHN0ci5jICovCisKKyN1bmRlZiB3YWRkbnN0cgoraW50CXdhZGRuc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKmFzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZGNobnN0cgoraW50CXdhZGRjaG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlICphc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9iZWVwLmMgKi8KKworI3VuZGVmIGJlZXAKK2ludAliZWVwKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9ia2dkLmMgKi8KKworI3VuZGVmIHdia2dkc2V0Cit2b2lkCXdia2dkc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHdia2dkCitpbnQJd2JrZ2QoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYm94LmMgKi8KKworI3VuZGVmIHdib3JkZXIKK2ludAl3Ym9yZGVyKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQlscywgCisJCWNodHlwZQlycywgCisJCWNodHlwZQl0cywgCisJCWNodHlwZQlicywgCisJCWNodHlwZQl0bCwgCisJCWNodHlwZQl0ciwgCisJCWNodHlwZQlibCwgCisJCWNodHlwZQlicikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NoZ2F0LmMgKi8KKworI3VuZGVmIHdjaGdhdAoraW50CXdjaGdhdCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbiwgCisJCWF0dHJfdAlhdHRyLCAKKwkJc2hvcnQJY29sb3IsIAorCQljb25zdCB2b2lkICpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xlYXIuYyAqLworCisjdW5kZWYgd2NsZWFyCitpbnQJd2NsZWFyKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NsZWFyb2suYyAqLworCisjdW5kZWYgY2xlYXJvaworaW50CWNsZWFyb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbHJib3QuYyAqLworCisjdW5kZWYgd2NscnRvYm90CitpbnQJd2NscnRvYm90KAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NscmVvbC5jICovCisKKyN1bmRlZiB3Y2xydG9lb2wKK2ludAl3Y2xydG9lb2woCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY29sb3IuYyAqLworCisjaW5jbHVkZSA8dGljLmg+CisKKyN1bmRlZiBDT0xPUl9QQUlSUworaW50CUNPTE9SX1BBSVJTOworI3VuZGVmIENPTE9SUworaW50CUNPTE9SUzsKKworI3VuZGVmIF9uY19yZXNldF9jb2xvcnMKK05DVVJTRVNfQk9PTCBfbmNfcmVzZXRfY29sb3JzKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHN0YXJ0X2NvbG9yCitpbnQJc3RhcnRfY29sb3Iodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5pdF9wYWlyCitpbnQJaW5pdF9wYWlyKAorCQlzaG9ydAlwYWlyLCAKKwkJc2hvcnQJZiwgCisJCXNob3J0CWIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluaXRfY29sb3IKK2ludAlpbml0X2NvbG9yKAorCQlzaG9ydAljb2xvciwgCisJCXNob3J0CXIsIAorCQlzaG9ydAlnLCAKKwkJc2hvcnQJYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2FuX2NoYW5nZV9jb2xvcgorTkNVUlNFU19CT09MIGNhbl9jaGFuZ2VfY29sb3Iodm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaGFzX2NvbG9ycworTkNVUlNFU19CT09MIGhhc19jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgY29sb3JfY29udGVudAoraW50CWNvbG9yX2NvbnRlbnQoCisJCXNob3J0CWNvbG9yLCAKKwkJc2hvcnQJKnIsIAorCQlzaG9ydAkqZywgCisJCXNob3J0CSpiKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwYWlyX2NvbnRlbnQKK2ludAlwYWlyX2NvbnRlbnQoCisJCXNob3J0CXBhaXIsIAorCQlzaG9ydAkqZiwgCisJCXNob3J0CSpiKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZG9fY29sb3IKK3ZvaWQJX25jX2RvX2NvbG9yKAorCQlzaG9ydAlvbGRfcGFpciwgCisJCXNob3J0CXBhaXIsIAorCQlOQ1VSU0VTX0JPT0wgcmV2ZXJzZSwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2NvbG9yc2V0LmMgKi8KKworI3VuZGVmIHdjb2xvcl9zZXQKK2ludAl3Y29sb3Jfc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2RlbGNoLmMgKi8KKworI3VuZGVmIHdkZWxjaAoraW50CXdkZWxjaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZWx3aW4uYyAqLworCisjdW5kZWYgZGVsd2luCitpbnQJZGVsd2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VjaG8uYyAqLworCisjdW5kZWYgZWNobworaW50CWVjaG8odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9lY2hvCitpbnQJbm9lY2hvKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lbmR3aW4uYyAqLworCisjdW5kZWYgZW5kd2luCitpbnQJZW5kd2luKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lcmFzZS5jICovCisKKyN1bmRlZiB3ZXJhc2UKK2ludAl3ZXJhc2UoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZmxhc2guYyAqLworCisjdW5kZWYgZmxhc2gKK2ludAlmbGFzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbGliX2dlbi5jICovCisKKyN1bmRlZiBhZGRjaAoraW50CWFkZGNoKAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkY2huc3RyCitpbnQJYWRkY2huc3RyKAorCQljb25zdCBjaHR5cGUgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZGNoc3RyCitpbnQJYWRkY2hzdHIoCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkbnN0cgoraW50CWFkZG5zdHIoCisJCWNvbnN0IGNoYXIgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZHN0cgoraW50CWFkZHN0cigKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cm9mZgoraW50CWF0dHJvZmYoCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJvbgoraW50CWF0dHJvbigKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cnNldAoraW50CWF0dHJzZXQoCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfZ2V0CitpbnQJYXR0cl9nZXQoCisJCWF0dHJfdAkqYTEsIAorCQlzaG9ydAkqYTIsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX29mZgoraW50CWF0dHJfb2ZmKAorCQlhdHRyX3QJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX29uCitpbnQJYXR0cl9vbigKKwkJYXR0cl90CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9zZXQKK2ludAlhdHRyX3NldCgKKwkJYXR0cl90CWExLCAKKwkJc2hvcnQJYTIsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBia2dkCitpbnQJYmtnZCgKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ2RzZXQKK3ZvaWQJYmtnZHNldCgKKwkJY2h0eXBlCXopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBib3JkZXIKK2ludAlib3JkZXIoCisJCWNodHlwZQlhMSwgCisJCWNodHlwZQlhMiwgCisJCWNodHlwZQlhMywgCisJCWNodHlwZQlhNCwgCisJCWNodHlwZQlhNSwgCisJCWNodHlwZQlhNiwgCisJCWNodHlwZQlhNywgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBib3gKK2ludAlib3goCisJCVdJTkRPVwkqYTEsIAorCQljaHR5cGUJYTIsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2hnYXQKK2ludAljaGdhdCgKKwkJaW50CWExLCAKKwkJYXR0cl90CWEyLCAKKwkJc2hvcnQJYTMsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjbGVhcgoraW50CWNsZWFyKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNscnRvYm90CitpbnQJY2xydG9ib3Qodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2xydG9lb2wKK2ludAljbHJ0b2VvbCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjb2xvcl9zZXQKK2ludAljb2xvcl9zZXQoCisJCXNob3J0CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgQ09MT1JfUEFJUgoraW50CUNPTE9SX1BBSVIoCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWxjaAoraW50CWRlbGNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlbGV0ZWxuCitpbnQJZGVsZXRlbG4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZWNob2NoYXIKK2ludAllY2hvY2hhcigKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGVyYXNlCitpbnQJZXJhc2Uodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmtnZAorY2h0eXBlCWdldGJrZ2QoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgZ2V0Y2gKK2ludAlnZXRjaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRuc3RyCitpbnQJZ2V0bnN0cigKKwkJY2hhcgkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0c3RyCitpbnQJZ2V0c3RyKAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBobGluZQoraW50CWhsaW5lKAorCQljaHR5cGUJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5jaAorY2h0eXBlCWluY2godm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgaW5jaG5zdHIKK2ludAlpbmNobnN0cigKKwkJY2h0eXBlCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbmNoc3RyCitpbnQJaW5jaHN0cigKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbm5zdHIKK2ludAlpbm5zdHIoCisJCWNoYXIJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc2NoCitpbnQJaW5zY2goCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNkZWxsbgoraW50CWluc2RlbGxuKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zZXJ0bG4KK2ludAlpbnNlcnRsbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNuc3RyCitpbnQJaW5zbnN0cigKKwkJY29uc3QgY2hhciAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zc3RyCitpbnQJaW5zc3RyKAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnN0cgoraW50CWluc3RyKAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3ZlCitpbnQJbW92ZSgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkY2gKK2ludAltdmFkZGNoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRjaG5zdHIKK2ludAltdmFkZGNobnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZGNoc3RyCitpbnQJbXZhZGRjaHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZG5zdHIKK2ludAltdmFkZG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkc3RyCitpbnQJbXZhZGRzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Y2hnYXQKK2ludAltdmNoZ2F0KAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQlhdHRyX3QJYTQsIAorCQlzaG9ydAlhNSwgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12ZGVsY2gKK2ludAltdmRlbGNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRjaAoraW50CW12Z2V0Y2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldG5zdHIKK2ludAltdmdldG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0c3RyCitpbnQJbXZnZXRzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aGxpbmUKK2ludAltdmhsaW5lKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbmNoCitjaHR5cGUJbXZpbmNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgbXZpbmNobnN0cgoraW50CW12aW5jaG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbmNoc3RyCitpbnQJbXZpbmNoc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5uc3RyCitpbnQJbXZpbm5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zY2gKK2ludAltdmluc2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNuc3RyCitpbnQJbXZpbnNuc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc3N0cgoraW50CW12aW5zc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc3RyCitpbnQJbXZpbnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ2bGluZQoraW50CW12dmxpbmUoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQlhMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRjaAoraW50CW12d2FkZGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZGNobnN0cgoraW50CW12d2FkZGNobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkY2hzdHIKK2ludAltdndhZGRjaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkbnN0cgoraW50CW12d2FkZG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRzdHIKK2ludAltdndhZGRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndjaGdhdAoraW50CW12d2NoZ2F0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJaW50CWE0LCAKKwkJYXR0cl90CWE1LCAKKwkJc2hvcnQJYTYsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndkZWxjaAoraW50CW12d2RlbGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldGNoCitpbnQJbXZ3Z2V0Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0bnN0cgoraW50CW12d2dldG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRzdHIKK2ludAltdndnZXRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndobGluZQoraW50CW12d2hsaW5lKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCWE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luY2gKK2NodHlwZQltdndpbmNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIG12d2luY2huc3RyCitpbnQJbXZ3aW5jaG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luY2hzdHIKK2ludAltdndpbmNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbm5zdHIKK2ludAltdndpbm5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNjaAoraW50CW12d2luc2NoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc25zdHIKK2ludAltdndpbnNuc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zc3RyCitpbnQJbXZ3aW5zc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zdHIKK2ludAltdndpbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3ZsaW5lCitpbnQJbXZ3dmxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgUEFJUl9OVU1CRVIKK2ludAlQQUlSX05VTUJFUigKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlZHJhd3dpbgoraW50CXJlZHJhd3dpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZWZyZXNoCitpbnQJcmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JsCitpbnQJc2NybCgKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcm9sbAoraW50CXNjcm9sbCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRzY3JyZWcKK2ludAlzZXRzY3JyZWcoCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzdGFuZG91dAoraW50CXN0YW5kb3V0KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHN0YW5kZW5kCitpbnQJc3RhbmRlbmQodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGltZW91dAordm9pZAl0aW1lb3V0KAorCQlpbnQJeikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHRvdWNobGluZQoraW50CXRvdWNobGluZSgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0b3VjaHdpbgoraW50CXRvdWNod2luKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVudG91Y2h3aW4KK2ludAl1bnRvdWNod2luKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZsaW5lCitpbnQJdmxpbmUoCisJCWNodHlwZQlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2d19wcmludHcKK2ludAl2d19wcmludHcoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaGFyICphMiwgCisJCXZhX2xpc3QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdndfc2NhbncKK2ludAl2d19zY2FudygKKwkJV0lORE9XCSphMSwgCisJCWNoYXIJKmEyLCAKKwkJdmFfbGlzdAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2hzdHIKK2ludAl3YWRkY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaHR5cGUgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRzdHIKK2ludAl3YWRkc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJvbgoraW50CXdhdHRyb24oCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJvZmYKK2ludAl3YXR0cm9mZigKKwkJV0lORE9XCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cnNldAoraW50CXdhdHRyc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyX2dldAoraW50CXdhdHRyX2dldCgKKwkJV0lORE9XCSphMSwgCisJCWF0dHJfdAkqYTIsIAorCQlzaG9ydAkqYTMsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cl9zZXQKK2ludAl3YXR0cl9zZXQoCisJCVdJTkRPVwkqYTEsIAorCQlhdHRyX3QJYTIsIAorCQlzaG9ydAlhMywgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdkZWxldGVsbgoraW50CXdkZWxldGVsbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0c3RyCitpbnQJd2dldHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbmNoc3RyCitpbnQJd2luY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNlcnRsbgoraW50CXdpbnNlcnRsbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zc3RyCitpbnQJd2luc3N0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnN0cgoraW50CXdpbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzdGFuZG91dAoraW50CXdzdGFuZG91dCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c3RhbmRlbmQKK2ludAl3c3RhbmRlbmQoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YXR0cnMKK2ludAlnZXRhdHRycygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRjdXJ4CitpbnQJZ2V0Y3VyeCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRjdXJ5CitpbnQJZ2V0Y3VyeSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRiZWd4CitpbnQJZ2V0YmVneCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRiZWd5CitpbnQJZ2V0YmVneSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRtYXh4CitpbnQJZ2V0bWF4eCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRtYXh5CitpbnQJZ2V0bWF4eSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRwYXJ4CitpbnQJZ2V0cGFyeCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRwYXJ5CitpbnQJZ2V0cGFyeSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0cGFyZW50CitXSU5ET1cJKndnZXRwYXJlbnQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIGlzX2NsZWFyZWQKK05DVVJTRVNfQk9PTCBpc19jbGVhcmVkKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2lkY29rCitOQ1VSU0VTX0JPT0wgaXNfaWRjb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfaWRsb2sKK05DVVJTRVNfQk9PTCBpc19pZGxvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19pbW1lZG9rCitOQ1VSU0VTX0JPT0wgaXNfaW1tZWRvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19rZXlwYWQKK05DVVJTRVNfQk9PTCBpc19rZXlwYWQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfbGVhdmVvaworTkNVUlNFU19CT09MIGlzX2xlYXZlb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfbm9kZWxheQorTkNVUlNFU19CT09MIGlzX25vZGVsYXkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfbm90aW1lb3V0CitOQ1VSU0VTX0JPT0wgaXNfbm90aW1lb3V0KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3Njcm9sbG9rCitOQ1VSU0VTX0JPT0wgaXNfc2Nyb2xsb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfc3luY29rCitOQ1VSU0VTX0JPT0wgaXNfc3luY29rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHdnZXRzY3JyZWcKK2ludAl3Z2V0c2NycmVnKAorCQljb25zdCBXSU5ET1cgKmExLCAKKwkJaW50CSphMiwgCisJCWludAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbW91c2VfdHJhZm8KK05DVVJTRVNfQk9PTCBtb3VzZV90cmFmbygKKwkJaW50CSphMSwgCisJCWludAkqYTIsIAorCQlOQ1VSU0VTX0JPT0wgeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2dldGNoLmMgKi8KKworI2luY2x1ZGUgPGZpZm9fZGVmcy5oPgorCisjdW5kZWYgRVNDREVMQVkKK2ludAlFU0NERUxBWTsKKworI3VuZGVmIHNldF9lc2NkZWxheQoraW50CXNldF9lc2NkZWxheSgKKwkJaW50CXZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfd2dldGNoCitpbnQJX25jX3dnZXRjaCgKKwkJV0lORE9XCSp3aW4sIAorCQl1bnNpZ25lZCBsb25nICpyZXN1bHQsIAorCQlpbnQJdXNlX21ldGEpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRjaAoraW50CXdnZXRjaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9nZXRzdHIuYyAqLworCisjdW5kZWYgd2dldG5zdHIKK2ludAl3Z2V0bnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpzdHIsIAorCQlpbnQJbWF4bGVuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaGxpbmUuYyAqLworCisjdW5kZWYgd2hsaW5lCitpbnQJd2hsaW5lKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW1tZWRvay5jICovCisKKyN1bmRlZiBpbW1lZG9rCit2b2lkCWltbWVkb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfaW5jaHN0ci5jICovCisKKyN1bmRlZiB3aW5jaG5zdHIKK2ludAl3aW5jaG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCSpzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luaXRzY3IuYyAqLworCisjdW5kZWYgaW5pdHNjcgorV0lORE9XCSppbml0c2NyKHZvaWQpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zY2guYyAqLworCisjdW5kZWYgX25jX2luc2VydF9jaAoraW50CV9uY19pbnNlcnRfY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zY2gKK2ludAl3aW5zY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnNkZWwuYyAqLworCisjdW5kZWYgd2luc2RlbGxuCitpbnQJd2luc2RlbGxuKAorCQlXSU5ET1cJKndpbiwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zbnN0ci5jICovCisKKyN1bmRlZiB3aW5zbnN0cgoraW50CXdpbnNuc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKnMsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc3RyLmMgKi8KKworI3VuZGVmIHdpbm5zdHIKK2ludAl3aW5uc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKnN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaXNlbmR3aW4uYyAqLworCisjdW5kZWYgaXNlbmR3aW4KK05DVVJTRVNfQk9PTCBpc2VuZHdpbih2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbGVhdmVvay5jICovCisKKyN1bmRlZiBsZWF2ZW9rCitpbnQJbGVhdmVvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX21vdXNlLmMgKi8KKworI3VuZGVmIGdldG1vdXNlCitpbnQJZ2V0bW91c2UoCisJCU1FVkVOVAkqYWV2ZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB1bmdldG1vdXNlCitpbnQJdW5nZXRtb3VzZSgKKwkJTUVWRU5UCSphZXZlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1vdXNlbWFzaworbW1hc2tfdAltb3VzZW1hc2soCisJCW1tYXNrX3QJbmV3bWFzaywgCisJCW1tYXNrX3QJKm9sZG1hc2spCisJCXsgcmV0dXJuKCoobW1hc2tfdCAqKTApOyB9CisKKyN1bmRlZiB3ZW5jbG9zZQorTkNVUlNFU19CT09MIHdlbmNsb3NlKAorCQljb25zdCBXSU5ET1cgKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIG1vdXNlaW50ZXJ2YWwKK2ludAltb3VzZWludGVydmFsKAorCQlpbnQJbWF4Y2xpY2spCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19oYXNfbW91c2UKK2ludAlfbmNfaGFzX21vdXNlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdtb3VzZV90cmFmbworTkNVUlNFU19CT09MIHdtb3VzZV90cmFmbygKKwkJY29uc3QgV0lORE9XICp3aW4sIAorCQlpbnQJKnBZLCAKKwkJaW50CSpwWCwgCisJCU5DVVJTRVNfQk9PTCB0b19zY3JlZW4pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9tb3ZlLmMgKi8KKworI3VuZGVmIHdtb3ZlCitpbnQJd21vdmUoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfbXZjdXIuYyAqLworCisjdW5kZWYgX25jX21zZWNfY29zdAoraW50CV9uY19tc2VjX2Nvc3QoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGNhcCwgCisJCWludAlhZmZjbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19tdmN1cl9yZXN1bWUKK3ZvaWQJX25jX212Y3VyX3Jlc3VtZSh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX212Y3VyX2luaXQKK3ZvaWQJX25jX212Y3VyX2luaXQodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tdmN1cl93cmFwCit2b2lkCV9uY19tdmN1cl93cmFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBtdmN1cgoraW50CW12Y3VyKAorCQlpbnQJeW9sZCwgCisJCWludAl4b2xkLCAKKwkJaW50CXluZXcsIAorCQlpbnQJeG5ldykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX29wdGltaXplX2VuYWJsZQoraW50CV9uY19vcHRpbWl6ZV9lbmFibGU7CisKKy8qIC4vYmFzZS9saWJfbXZ3aW4uYyAqLworCisjdW5kZWYgbXZ3aW4KK2ludAltdndpbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJYnksIAorCQlpbnQJYngpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9uZXd0ZXJtLmMgKi8KKworI3VuZGVmIGZpbHRlcgordm9pZAlmaWx0ZXIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG5vZmlsdGVyCit2b2lkCW5vZmlsdGVyKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBuZXd0ZXJtCitTQ1JFRU4JKm5ld3Rlcm0oCisJCWNoYXIJKm5hbWUsIAorCQlGSUxFCSpvZnAsIAorCQlGSUxFCSppZnApCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbmV3d2luLmMgKi8KKworI3VuZGVmIF9uY19mcmVld2luCitpbnQJX25jX2ZyZWV3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBuZXd3aW4KK1dJTkRPVwkqbmV3d2luKAorCQlpbnQJbnVtX2xpbmVzLCAKKwkJaW50CW51bV9jb2x1bW5zLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIGRlcndpbgorV0lORE9XCSpkZXJ3aW4oCisJCVdJTkRPVwkqb3JpZywgCisJCWludAludW1fbGluZXMsIAorCQlpbnQJbnVtX2NvbHVtbnMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgc3Vid2luCitXSU5ET1cJKnN1YndpbigKKwkJV0lORE9XCSp3LCAKKwkJaW50CWwsIAorCQlpbnQJYywgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbWFrZW5ldworV0lORE9XCSpfbmNfbWFrZW5ldygKKwkJaW50CW51bV9saW5lcywgCisJCWludAludW1fY29sdW1ucywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gsIAorCQlpbnQJZmxhZ3MpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX29mCitTQ1JFRU4JKl9uY19zY3JlZW5fb2YoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX25sLmMgKi8KKworI3VuZGVmIG5sCitpbnQJbmwodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9ubAoraW50CW5vbmwodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX292ZXJsYXkuYyAqLworCisjdW5kZWYgb3ZlcmxheQoraW50CW92ZXJsYXkoCisJCWNvbnN0IFdJTkRPVyAqd2luMSwgCisJCVdJTkRPVwkqd2luMikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgb3ZlcndyaXRlCitpbnQJb3ZlcndyaXRlKAorCQljb25zdCBXSU5ET1cgKndpbjEsIAorCQlXSU5ET1cJKndpbjIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNvcHl3aW4KK2ludAljb3B5d2luKAorCQljb25zdCBXSU5ET1cgKnNyYywgCisJCVdJTkRPVwkqZHN0LCAKKwkJaW50CXNtaW5yb3csIAorCQlpbnQJc21pbmNvbCwgCisJCWludAlkbWlucm93LCAKKwkJaW50CWRtaW5jb2wsIAorCQlpbnQJZG1heHJvdywgCisJCWludAlkbWF4Y29sLCAKKwkJaW50CW92ZXIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9wYWQuYyAqLworCisjdW5kZWYgbmV3cGFkCitXSU5ET1cJKm5ld3BhZCgKKwkJaW50CWwsIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHN1YnBhZAorV0lORE9XCSpzdWJwYWQoCisJCVdJTkRPVwkqb3JpZywgCisJCWludAlsLCAKKwkJaW50CWMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgcHJlZnJlc2gKK2ludAlwcmVmcmVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJcG1pbnJvdywgCisJCWludAlwbWluY29sLCAKKwkJaW50CXNtaW5yb3csIAorCQlpbnQJc21pbmNvbCwgCisJCWludAlzbWF4cm93LCAKKwkJaW50CXNtYXhjb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBub3V0cmVmcmVzaAoraW50CXBub3V0cmVmcmVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJcG1pbnJvdywgCisJCWludAlwbWluY29sLCAKKwkJaW50CXNtaW5yb3csIAorCQlpbnQJc21pbmNvbCwgCisJCWludAlzbWF4cm93LCAKKwkJaW50CXNtYXhjb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBlY2hvY2hhcgoraW50CXBlY2hvY2hhcigKKwkJV0lORE9XCSpwYWQsIAorCQljb25zdCBjaHR5cGUgY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9wcmludHcuYyAqLworCisjdW5kZWYgcHJpbnR3CitpbnQJcHJpbnR3KAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdwcmludHcKK2ludAl3cHJpbnR3KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZwcmludHcKK2ludAltdnByaW50dygKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3cHJpbnR3CitpbnQJbXZ3cHJpbnR3KAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZ3cHJpbnR3CitpbnQJdndwcmludHcoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJdmFfbGlzdAlhcmdwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcmVkcmF3bG4uYyAqLworCisjdW5kZWYgd3JlZHJhd2xuCitpbnQJd3JlZHJhd2xuKAorCQlXSU5ET1cJKndpbiwgCisJCWludAliZWcsIAorCQlpbnQJbnVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcmVmcmVzaC5jICovCisKKyN1bmRlZiB3cmVmcmVzaAoraW50CXdyZWZyZXNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd25vdXRyZWZyZXNoCitpbnQJd25vdXRyZWZyZXNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Jlc3RhcnQuYyAqLworCisjdW5kZWYgcmVzdGFydHRlcm0KK2ludAlyZXN0YXJ0dGVybSgKKwkJY2hhcgkqdGVybXAsIAorCQlpbnQJZmlsZW51bSwgCisJCWludAkqZXJycmV0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2NhbncuYyAqLworCisjdW5kZWYgdndzY2FudworaW50CXZ3c2NhbncoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqZm10LCAKKwkJdmFfbGlzdAlhcmdwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY2FudworaW50CXNjYW53KAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzY2FudworaW50CXdzY2FudygKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12c2NhbncKK2ludAltdnNjYW53KAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndzY2FudworaW50CW12d3NjYW53KAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JlZW4uYyAqLworCisjdW5kZWYgZ2V0d2luCitXSU5ET1cJKmdldHdpbigKKwkJRklMRQkqZmlsZXApCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBwdXR3aW4KK2ludAlwdXR3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJRklMRQkqZmlsZXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9yZXN0b3JlCitpbnQJc2NyX3Jlc3RvcmUoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9kdW1wCitpbnQJc2NyX2R1bXAoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9pbml0CitpbnQJc2NyX2luaXQoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9zZXQKK2ludAlzY3Jfc2V0KAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2Nyb2xsLmMgKi8KKworI3VuZGVmIF9uY19zY3JvbGxfd2luZG93Cit2b2lkCV9uY19zY3JvbGxfd2luZG93KAorCQlXSU5ET1cJKndpbiwgCisJCWludCBjb25zdCBuLCAKKwkJc2hvcnQgY29uc3QgdG9wLCAKKwkJc2hvcnQgY29uc3QgYm90dG9tLCAKKwkJY2h0eXBlCWJsYW5rKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd3NjcmwKK2ludAl3c2NybCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Njcm9sbG9rLmMgKi8KKworI3VuZGVmIHNjcm9sbG9rCitpbnQJc2Nyb2xsb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JyZWcuYyAqLworCisjdW5kZWYgd3NldHNjcnJlZworaW50CXdzZXRzY3JyZWcoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXRvcCwgCisJCWludAlib3R0b20pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zZXRfdGVybS5jICovCisKKyN1bmRlZiBzZXRfdGVybQorU0NSRUVOCSpzZXRfdGVybSgKKwkJU0NSRUVOCSpzY3JlZW5wKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisjdW5kZWYgZGVsc2NyZWVuCit2b2lkCWRlbHNjcmVlbigKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zZXR1cHNjcmVlbgoraW50CV9uY19zZXR1cHNjcmVlbigKKwkJaW50CXNsaW5lcywgCisJCWludAlzY29sdW1ucywgCisJCUZJTEUJKm91dHB1dCwgCisJCU5DVVJTRVNfQk9PTCBmaWx0ZXJlZCwgCisJCWludAlzbGtfZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmlwb2ZmbGluZQoraW50CV9uY19yaXBvZmZsaW5lKAorCQlpbnQJbGluZSwgCisJCWludAkoKmluaXQpKAorCQlXSU5ET1cJKnAxLCAKKwkJaW50CXAyKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmlwb2ZmbGluZQoraW50CXJpcG9mZmxpbmUoCisJCWludAlsaW5lLCAKKwkJaW50CSgqaW5pdCkoCisJCVdJTkRPVwkqcDEsIAorCQlpbnQJcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrLmMgKi8KKworI3VuZGVmIF9uY19zbGtfaW5pdGlhbGl6ZQoraW50CV9uY19zbGtfaW5pdGlhbGl6ZSgKKwkJV0lORE9XCSpzdHdpbiwgCisJCWludAljb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfcmVzdG9yZQoraW50CXNsa19yZXN0b3JlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGthdHJfc2V0LmMgKi8KKworI3VuZGVmIHNsa19hdHRyX3NldAoraW50CXNsa19hdHRyX3NldCgKKwkJY29uc3QgYXR0cl90IGF0dHIsIAorCQlzaG9ydAljb2xvcl9wYWlyX251bWJlciwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGthdHJvZi5jICovCisKKyN1bmRlZiBzbGtfYXR0cm9mZgoraW50CXNsa19hdHRyb2ZmKAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cm9uLmMgKi8KKworI3VuZGVmIHNsa19hdHRyb24KK2ludAlzbGtfYXR0cm9uKAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cnNldC5jICovCisKKyN1bmRlZiBzbGtfYXR0cnNldAoraW50CXNsa19hdHRyc2V0KAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0dHIuYyAqLworCisjdW5kZWYgc2xrX2F0dHIKK2F0dHJfdAlzbGtfYXR0cih2b2lkKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrY2xlYXIuYyAqLworCisjdW5kZWYgc2xrX2NsZWFyCitpbnQJc2xrX2NsZWFyKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtjb2xvci5jICovCisKKyN1bmRlZiBzbGtfY29sb3IKK2ludAlzbGtfY29sb3IoCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xraW5pdC5jICovCisKKyN1bmRlZiBzbGtfaW5pdAoraW50CXNsa19pbml0KAorCQlpbnQJZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrbGFiLmMgKi8KKworI3VuZGVmIHNsa19sYWJlbAorY2hhcgkqc2xrX2xhYmVsKAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrcmVmci5jICovCisKKyN1bmRlZiBzbGtfbm91dHJlZnJlc2gKK2ludAlzbGtfbm91dHJlZnJlc2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2xrX3JlZnJlc2gKK2ludAlzbGtfcmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrc2V0LmMgKi8KKworI3VuZGVmIHNsa19zZXQKK2ludAlzbGtfc2V0KAorCQlpbnQJaSwgCisJCWNvbnN0IGNoYXIgKmFzdHIsIAorCQlpbnQJZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrdG91Y2guYyAqLworCisjdW5kZWYgc2xrX3RvdWNoCitpbnQJc2xrX3RvdWNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl90b3VjaC5jICovCisKKyN1bmRlZiBpc19saW5ldG91Y2hlZAorTkNVUlNFU19CT09MIGlzX2xpbmV0b3VjaGVkKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlsaW5lKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc193aW50b3VjaGVkCitOQ1VSU0VTX0JPT0wgaXNfd2ludG91Y2hlZCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHd0b3VjaGxuCitpbnQJd3RvdWNobG4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJbiwgCisJCWludAljaGFuZ2VkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlZG1wLmMgKi8KKworI3VuZGVmIF90cmFjZWR1bXAKK3ZvaWQJX3RyYWNlZHVtcCgKKwkJY29uc3QgY2hhciAqbmFtZSwgCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZW1zZS5jICovCisKKyN1bmRlZiBfbmNfdHJhY2Vtb3VzZQorY2hhcgkqX25jX3RyYWNlbW91c2UoCisJCVNDUkVFTgkqc3AsIAorCQlNRVZFTlQgY29uc3QgKmVwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZW1vdXNlCitjaGFyCSpfdHJhY2Vtb3VzZSgKKwkJTUVWRU5UIGNvbnN0ICplcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHR5L2xpYl90c3RwLmMgKi8KKworI2luY2x1ZGUgPFNpZ0FjdGlvbi5oPgorCisjdW5kZWYgX25jX3NpZ25hbF9oYW5kbGVyCit2b2lkCV9uY19zaWduYWxfaGFuZGxlcigKKwkJTkNVUlNFU19CT09MIGVuYWJsZSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl91bmdldGNoLmMgKi8KKworI3VuZGVmIF9uY19maWZvX2R1bXAKK3ZvaWQJX25jX2ZpZm9fZHVtcCgKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY191bmdldGNoCitpbnQJX25jX3VuZ2V0Y2goCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVuZ2V0Y2gKK2ludAl1bmdldGNoKAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90dHkvbGliX3ZpZGF0dHIuYyAqLworCisjdW5kZWYgdmlkcHV0cworaW50CXZpZHB1dHMoCisJCWNodHlwZQluZXdtb2RlLCAKKwkJaW50CSgqb3V0YykoCisJCWludAlwMSkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZpZGF0dHIKK2ludAl2aWRhdHRyKAorCQljaHR5cGUJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGVybWF0dHJzCitjaHR5cGUJdGVybWF0dHJzKHZvaWQpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi9iYXNlL2xpYl92bGluZS5jICovCisKKyN1bmRlZiB3dmxpbmUKK2ludAl3dmxpbmUoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93YXR0cm9mZi5jICovCisKKyN1bmRlZiB3YXR0cl9vZmYKK2ludAl3YXR0cl9vZmYoCisJCVdJTkRPVwkqd2luLCAKKwkJYXR0cl90CWF0LCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dhdHRyb24uYyAqLworCisjdW5kZWYgd2F0dHJfb24KK2ludAl3YXR0cl9vbigKKwkJV0lORE9XCSp3aW4sIAorCQlhdHRyX3QJYXQsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2luY2guYyAqLworCisjdW5kZWYgd2luY2gKK2NodHlwZQl3aW5jaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93aW5kb3cuYyAqLworCisjdW5kZWYgX25jX3N5bmNob29rCit2b2lkCV9uY19zeW5jaG9vaygKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBtdmRlcndpbgoraW50CW12ZGVyd2luKAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHN5bmNvaworaW50CXN5bmNvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgYmYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzeW5jdXAKK3ZvaWQJd3N5bmN1cCgKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3c3luY2Rvd24KK3ZvaWQJd3N5bmNkb3duKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHdjdXJzeW5jdXAKK3ZvaWQJd2N1cnN5bmN1cCgKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBkdXB3aW4KK1dJTkRPVwkqZHVwd2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9iYXNlL25jX3BhbmVsLmMgKi8KKworI3VuZGVmIF9uY19wYW5lbGhvb2sKK3N0cnVjdCBwYW5lbGhvb2sgKl9uY19wYW5lbGhvb2sodm9pZCkKKwkJeyByZXR1cm4oKihzdHJ1Y3QgcGFuZWxob29rICoqKTApOyB9CisKKy8qIC4vYmFzZS9zYWZlX3NwcmludGYuYyAqLworCisjdW5kZWYgX25jX3ByaW50Zl9zdHJpbmcKK2NoYXIJKl9uY19wcmludGZfc3RyaW5nKAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90dHkvdHR5X3VwZGF0ZS5jICovCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorCisjdW5kZWYgZG91cGRhdGUKK2ludAlkb3VwZGF0ZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2Nyb2xsbgoraW50CV9uY19zY3JvbGxuKAorCQlpbnQJbiwgCisJCWludAl0b3AsIAorCQlpbnQJYm90LCAKKwkJaW50CW1heHkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zY3JlZW5fcmVzdW1lCit2b2lkCV9uY19zY3JlZW5fcmVzdW1lKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX2luaXQKK3ZvaWQJX25jX3NjcmVlbl9pbml0KHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX3dyYXAKK3ZvaWQJX25jX3NjcmVlbl93cmFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZG9feG1jX2dsaXRjaAordm9pZAlfbmNfZG9feG1jX2dsaXRjaCgKKwkJYXR0cl90CXByZXZpb3VzKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RyYWNlL3ZhcmFyZ3MuYyAqLworCit0eXBlZGVmIGVudW0geworICAgIGF0VW5rbm93biA9IDAsIGF0SW50ZWdlciwgYXRGbG9hdCwgYXRQb2ludCwgYXRTdHJpbmcKK30gQVJHVFlQRTsKKworI3VuZGVmIF9uY192YXJhcmdzCitjaGFyCSpfbmNfdmFyYXJncygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJdmFfbGlzdAlhcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9tZW1tb3ZlLmMgKi8KKworI3VuZGVmIF9uY19tZW1tb3ZlCit2b2lkCV9uY19tZW1tb3ZlKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS92c3NjYW5mLmMgKi8KKworI3VuZGVmIF9uY192c3NjYW5mCit2b2lkCV9uY192c3NjYW5mKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfZnJlZWFsbC5jICovCisKKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKKyN1bmRlZiBfbmNfZnJlZWFsbAordm9pZAlfbmNfZnJlZWFsbCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2ZyZWVfYW5kX2V4aXQKK3ZvaWQJX25jX2ZyZWVfYW5kX2V4aXQoCisJCWludAljb2RlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2V4cGFuZGVkLmMgKi8KKworI3VuZGVmIF9uY190b2dnbGVfYXR0cl9vbgordm9pZAlfbmNfdG9nZ2xlX2F0dHJfb24oCisJCWF0dHJfdAkqUywgCisJCWF0dHJfdAlhdCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY190b2dnbGVfYXR0cl9vZmYKK3ZvaWQJX25jX3RvZ2dsZV9hdHRyX29mZigKKwkJYXR0cl90CSpTLCAKKwkJYXR0cl90CWF0KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0RlbENoYXJDb3N0CitpbnQJX25jX0RlbENoYXJDb3N0KAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19JbnNDaGFyQ29zdAoraW50CV9uY19JbnNDaGFyQ29zdCgKKwkJaW50CWNvdW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfVXBkYXRlQXR0cnMKK3ZvaWQJX25jX1VwZGF0ZUF0dHJzKAorCQljaHR5cGUJYykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xlZ2FjeV9jb2RpbmcuYyAqLworCisjdW5kZWYgdXNlX2xlZ2FjeV9jb2RpbmcKK2ludAl1c2VfbGVnYWN5X2NvZGluZygKKwkJaW50CWxldmVsKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZGZ0X2ZnYmcuYyAqLworCisjdW5kZWYgdXNlX2RlZmF1bHRfY29sb3JzCitpbnQJdXNlX2RlZmF1bHRfY29sb3JzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFzc3VtZV9kZWZhdWx0X2NvbG9ycworaW50CWFzc3VtZV9kZWZhdWx0X2NvbG9ycygKKwkJaW50CWZnLCAKKwkJaW50CWJnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3ByaW50LmMgKi8KKworI3VuZGVmIG1jcHJpbnQKK2ludAltY3ByaW50KAorCQljaGFyCSpkYXRhLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvcmVzaXpldGVybS5jICovCisKKyN1bmRlZiBpc190ZXJtX3Jlc2l6ZWQKK05DVVJTRVNfQk9PTCBpc190ZXJtX3Jlc2l6ZWQoCisJCWludAlUb0xpbmVzLCAKKwkJaW50CVRvQ29scykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgcmVzaXplX3Rlcm0KK2ludAlyZXNpemVfdGVybSgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNpemV0ZXJtCitpbnQJcmVzaXpldGVybSgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvdHJhY2VfeG5hbWVzLmMgKi8KKworI3VuZGVmIF9uY190cmFjZV94bmFtZXMKK3ZvaWQJX25jX3RyYWNlX3huYW1lcygKKwkJVEVSTVRZUEUgKnRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL3VzZV9zY3JlZW4uYyAqLworCisjdW5kZWYgdXNlX3NjcmVlbgoraW50CXVzZV9zY3JlZW4oCisJCVNDUkVFTgkqc2NyZWVuLCAKKwkJTkNVUlNFU19TQ1JFRU5fQ0IgZnVuYywgCisJCXZvaWQJKmRhdGEpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3VzZV93aW5kb3cuYyAqLworCisjdW5kZWYgdXNlX3dpbmRvdworaW50CXVzZV93aW5kb3coCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19XSU5ET1dfQ0IgZnVuYywgCisJCXZvaWQJKmRhdGEpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3dyZXNpemUuYyAqLworCisjdW5kZWYgd3Jlc2l6ZQoraW50CXdyZXNpemUoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vYWNjZXNzLmMgKi8KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8bmNfYWxsb2MuaD4KKworI3VuZGVmIF9uY19yb290bmFtZQorY2hhcgkqX25jX3Jvb3RuYW1lKAorCQljaGFyCSpwYXRoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19pc19hYnNfcGF0aAorTkNVUlNFU19CT09MIF9uY19pc19hYnNfcGF0aCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3BhdGhsYXN0Cit1bnNpZ25lZCBfbmNfcGF0aGxhc3QoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCoodW5zaWduZWQgKikwKTsgfQorCisjdW5kZWYgX25jX2Jhc2VuYW1lCitjaGFyCSpfbmNfYmFzZW5hbWUoCisJCWNoYXIJKnBhdGgpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2FjY2VzcworaW50CV9uY19hY2Nlc3MoCisJCWNvbnN0IGNoYXIgKnBhdGgsIAorCQlpbnQJbW9kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2lzX2Rpcl9wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2Rpcl9wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaXNfZmlsZV9wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2ZpbGVfcGF0aCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX2Vudl9hY2Nlc3MKK2ludAlfbmNfZW52X2FjY2Vzcyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vYWRkX3RyaWVzLmMgKi8KKworI3VuZGVmIF9uY19hZGRfdG9fdHJ5CitpbnQJX25jX2FkZF90b190cnkoCisJCVRSSUVTCSoqdHJlZSwgCisJCWNvbnN0IGNoYXIgKnN0ciwgCisJCXVuc2lnbmVkIGNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hbGxvY190dHlwZS5jICovCisKKyN1bmRlZiBfbmNfYWxpZ25fdGVybXR5cGUKK3ZvaWQJX25jX2FsaWduX3Rlcm10eXBlKAorCQlURVJNVFlQRSAqdG8sIAorCQlURVJNVFlQRSAqZnJvbSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19jb3B5X3Rlcm10eXBlCit2b2lkCV9uY19jb3B5X3Rlcm10eXBlKAorCQlURVJNVFlQRSAqZHN0LCAKKwkJVEVSTVRZUEUgKnNyYykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9jb2Rlcy5jICovCisKKyN1bmRlZiBib29sY29kZXMKK2NoYXIJKmNvbnN0IGJvb2xjb2Rlc1tdID0gezB9OworI3VuZGVmIG51bWNvZGVzCitjaGFyCSpjb25zdCBudW1jb2Rlc1tdID0gezB9OworI3VuZGVmIHN0cmNvZGVzCitjaGFyCSpjb25zdCBzdHJjb2Rlc1tdID0gezB9OworCisvKiAuL3RpbmZvL2NvbXBfZXJyb3IuYyAqLworI3VuZGVmIF9uY19zdXBwcmVzc193YXJuaW5ncworTkNVUlNFU19CT09MIF9uY19zdXBwcmVzc193YXJuaW5nczsKKyN1bmRlZiBfbmNfY3Vycl9saW5lCitpbnQJX25jX2N1cnJfbGluZTsKKyN1bmRlZiBfbmNfY3Vycl9jb2wKK2ludAlfbmNfY3Vycl9jb2w7CisKKyN1bmRlZiBfbmNfZ2V0X3NvdXJjZQorY29uc3QgY2hhciAqX25jX2dldF9zb3VyY2Uodm9pZCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2V0X3NvdXJjZQordm9pZAlfbmNfc2V0X3NvdXJjZSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zZXRfdHlwZQordm9pZAlfbmNfc2V0X3R5cGUoCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3R5cGUKK3ZvaWQJX25jX2dldF90eXBlKAorCQljaGFyCSpuYW1lKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3dhcm5pbmcKK3ZvaWQJX25jX3dhcm5pbmcoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19lcnJfYWJvcnQKK3ZvaWQJX25jX2Vycl9hYm9ydCgKKwkJY29uc3QgY2hhciAqY29uc3QgZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3N5c2Vycl9hYm9ydAordm9pZAlfbmNfc3lzZXJyX2Fib3J0KAorCQljb25zdCBjaGFyICpjb25zdCBmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vZGJfaXRlcmF0b3IuYyAqLworCisjdW5kZWYgX25jX3RpY19kaXIKK2NvbnN0IGNoYXIgKl9uY190aWNfZGlyKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19rZWVwX3RpY19kaXIKK3ZvaWQJX25jX2tlZXBfdGljX2RpcigKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19sYXN0X2RiCit2b2lkCV9uY19sYXN0X2RiKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbmV4dF9kYgorY29uc3QgY2hhciAqX25jX25leHRfZGIoCisJCURCRElSUwkqc3RhdGUsIAorCQlpbnQJKm9mZnNldCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZmlyc3RfZGIKK3ZvaWQJX25jX2ZpcnN0X2RiKAorCQlEQkRJUlMJKnN0YXRlLCAKKwkJaW50CSpvZmZzZXQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vZG9hbGxvYy5jICovCisKKyN1bmRlZiBfbmNfZG9hbGxvYwordm9pZAkqX25jX2RvYWxsb2MoCisJCXZvaWQJKm9sZHAsIAorCQlzaXplX3QJYW1vdW50KQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi90aW5mby9lbnRyaWVzLmMgKi8KKworI3VuZGVmIF9uY19oZWFkCitFTlRSWQkqX25jX2hlYWQ7CisjdW5kZWYgX25jX3RhaWwKK0VOVFJZCSpfbmNfdGFpbDsKKworI3VuZGVmIF9uY19mcmVlX2VudHJ5Cit2b2lkCV9uY19mcmVlX2VudHJ5KAorCQlFTlRSWQkqaGVhZHAsIAorCQlURVJNVFlQRSAqdHRlcm0pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZnJlZV9lbnRyaWVzCit2b2lkCV9uY19mcmVlX2VudHJpZXMoCisJCUVOVFJZCSpoZWFkcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kZWxpbmtfZW50cnkKK0VOVFJZCSpfbmNfZGVsaW5rX2VudHJ5KAorCQlFTlRSWQkqaGVhZHAsIAorCQlURVJNVFlQRSAqdHRlcm0pCisJCXsgcmV0dXJuKCooRU5UUlkgKiopMCk7IH0KKworI3VuZGVmIF9uY19sZWFrc190aW5mbwordm9pZAlfbmNfbGVha3NfdGluZm8odm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9mYWxsYmFjay5jICovCisKKyN1bmRlZiBfbmNfZmFsbGJhY2sKK2NvbnN0IFRFUk1UWVBFICpfbmNfZmFsbGJhY2soCisJCWNvbnN0IGNoYXIgKm5hbWUpCisJCXsgcmV0dXJuKCooY29uc3QgVEVSTVRZUEUgKiopMCk7IH0KKworLyogLi90aW5mby9mcmVlX3R0eXBlLmMgKi8KKworI3VuZGVmIF9uY19mcmVlX3Rlcm10eXBlCit2b2lkCV9uY19mcmVlX3Rlcm10eXBlKAorCQlURVJNVFlQRSAqcHRyKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VzZXJfZGVmaW5hYmxlCitOQ1VSU0VTX0JPT0wgX25jX3VzZXJfZGVmaW5hYmxlOworCisjdW5kZWYgdXNlX2V4dGVuZGVkX25hbWVzCitpbnQJdXNlX2V4dGVuZGVkX25hbWVzKAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2dldGVudl9udW0uYyAqLworCisjdW5kZWYgX25jX2dldGVudl9udW0KK2ludAlfbmNfZ2V0ZW52X251bSgKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2hvbWVfdGVybWluZm8uYyAqLworCisjdW5kZWYgX25jX2hvbWVfdGVybWluZm8KK2NoYXIJKl9uY19ob21lX3Rlcm1pbmZvKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2luaXRfa2V5dHJ5LmMgKi8KKworI2lmIDAKKworI2luY2x1ZGUgPGluaXRfa2V5dHJ5Lmg+CisKKyN1bmRlZiBfbmNfdGluZm9fZmtleXMKK2NvbnN0IHN0cnVjdCB0aW5mb19ma2V5cyBfbmNfdGluZm9fZmtleXNbXSA9IHswfTsKKworI2VuZGlmCisKKyN1bmRlZiBfbmNfaW5pdF9rZXl0cnkKK3ZvaWQJX25jX2luaXRfa2V5dHJ5KAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2xpYl9hY3MuYyAqLworCisjdW5kZWYgYWNzX21hcAorY2h0eXBlCWFjc19tYXBbMTI4XTsKKworI3VuZGVmIF9uY19pbml0X2Fjcwordm9pZAlfbmNfaW5pdF9hY3Modm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9saWJfYmF1ZHJhdGUuYyAqLworCisjaW5jbHVkZSA8dGVybWNhcC5oPgorCitzdHJ1Y3Qgc3BlZWQgeworICAgIGludCBzOyAKKyAgICBpbnQgc3A7IAorfTsKKworI3VuZGVmIF9uY19iYXVkcmF0ZQoraW50CV9uY19iYXVkcmF0ZSgKKwkJaW50CU9TcGVlZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX29zcGVlZAoraW50CV9uY19vc3BlZWQoCisJCWludAlCYXVkUmF0ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYmF1ZHJhdGUKK2ludAliYXVkcmF0ZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2N1cl90ZXJtLmMgKi8KKworI3VuZGVmIGN1cl90ZXJtCitURVJNSU5BTCAqY3VyX3Rlcm07CisKKyN1bmRlZiBzZXRfY3VydGVybQorVEVSTUlOQUwgKnNldF9jdXJ0ZXJtKAorCQlURVJNSU5BTCAqdGVybXApCisJCXsgcmV0dXJuKCooVEVSTUlOQUwgKiopMCk7IH0KKworI3VuZGVmIGRlbF9jdXJ0ZXJtCitpbnQJZGVsX2N1cnRlcm0oCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9kYXRhLmMgKi8KKworI3VuZGVmIHN0ZHNjcgorV0lORE9XCSpzdGRzY3I7CisjdW5kZWYgY3Vyc2NyCitXSU5ET1cJKmN1cnNjcjsKKyN1bmRlZiBuZXdzY3IKK1dJTkRPVwkqbmV3c2NyOworI3VuZGVmIF9uY19zY3JlZW5fY2hhaW4KK1NDUkVFTgkqX25jX3NjcmVlbl9jaGFpbjsKKyN1bmRlZiBTUAorU0NSRUVOCSpTUDsKKyN1bmRlZiBfbmNfZ2xvYmFscworTkNVUlNFU19HTE9CQUxTIF9uY19nbG9iYWxzOworI3VuZGVmIF9uY19wcmVzY3JlZW4KK05DVVJTRVNfUFJFU0NSRUVOIF9uY19wcmVzY3JlZW47CisKKy8qIC4vdGluZm8vbGliX2hhc19jYXAuYyAqLworCisjdW5kZWYgaGFzX2ljCitOQ1VSU0VTX0JPT0wgaGFzX2ljKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGhhc19pbAorTkNVUlNFU19CT09MIGhhc19pbCh2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2tlcm5lbC5jICovCisKKyN1bmRlZiBlcmFzZWNoYXIKK2NoYXIJZXJhc2VjaGFyKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKTApOyB9CisKKyN1bmRlZiBraWxsY2hhcgorY2hhcglraWxsY2hhcih2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKikwKTsgfQorCisjdW5kZWYgZmx1c2hpbnAKK2ludAlmbHVzaGlucCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbGliX2tleW5hbWUuYyAqLworCitzdHJ1Y3Qga24geyBzaG9ydCBvZmZzZXQ7IGludCBjb2RlOyB9OworCisjdW5kZWYgX25jX2tleW5hbWUKK2NoYXIJKl9uY19rZXluYW1lKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYga2V5bmFtZQorY2hhcgkqa2V5bmFtZSgKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9sb25nbmFtZS5jICovCisKKyN1bmRlZiBsb25nbmFtZQorY2hhcgkqbG9uZ25hbWUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX25hcG1zLmMgKi8KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI3VuZGVmIG5hcG1zCitpbnQJbmFwbXMoCisJCWludAltcykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9vcHRpb25zLmMgKi8KKworI3VuZGVmIGlkbG9rCitpbnQJaWRsb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGlkY29rCit2b2lkCWlkY29rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgaGFsZmRlbGF5CitpbnQJaGFsZmRlbGF5KAorCQlpbnQJdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9kZWxheQoraW50CW5vZGVsYXkoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vdGltZW91dAoraW50CW5vdGltZW91dCgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3RpbWVvdXQKK3ZvaWQJd3RpbWVvdXQoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWRlbGF5KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYga2V5cGFkCitpbnQJa2V5cGFkKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZXRhCitpbnQJbWV0YSgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY3Vyc19zZXQKK2ludAljdXJzX3NldCgKKwkJaW50CXZpcykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHlwZWFoZWFkCitpbnQJdHlwZWFoZWFkKAorCQlpbnQJZmQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGhhc19rZXkKK2ludAloYXNfa2V5KAorCQlpbnQJa2V5Y29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2tleXBhZAoraW50CV9uY19rZXlwYWQoCisJCVNDUkVFTgkqc3AsIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9yYXcuYyAqLworCisjdW5kZWYgcmF3CitpbnQJcmF3KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNicmVhaworaW50CWNicmVhayh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBxaWZsdXNoCit2b2lkCXFpZmx1c2godm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG5vcmF3CitpbnQJbm9yYXcodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9jYnJlYWsKK2ludAlub2NicmVhayh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub3FpZmx1c2gKK3ZvaWQJbm9xaWZsdXNoKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBpbnRyZmx1c2gKK2ludAlpbnRyZmx1c2goCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfc2V0dXAuYyAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKworI3VuZGVmIHR0eXR5cGUKK2NoYXIJdHR5dHlwZVsyNTZdOworI3VuZGVmIExJTkVTCitpbnQJTElORVM7CisjdW5kZWYgQ09MUworaW50CUNPTFM7CisjdW5kZWYgVEFCU0laRQoraW50CVRBQlNJWkU7CisKKyN1bmRlZiBzZXRfdGFic2l6ZQoraW50CXNldF90YWJzaXplKAorCQlpbnQJdmFsdWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19oYW5kbGVfc2lnd2luY2gKK2ludAlfbmNfaGFuZGxlX3NpZ3dpbmNoKAorCQlTQ1JFRU4JKnNwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB1c2VfZW52Cit2b2lkCXVzZV9lbnYoCisJCU5DVVJTRVNfQk9PTCBmKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2dldF9zY3JlZW5zaXplCit2b2lkCV9uY19nZXRfc2NyZWVuc2l6ZSgKKwkJU0NSRUVOCSpzcCwgCisJCWludAkqbGluZXAsIAorCQlpbnQJKmNvbHApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdXBkYXRlX3NjcmVlbnNpemUKK3ZvaWQJX25jX3VwZGF0ZV9zY3JlZW5zaXplKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2dldF9sb2NhbGUKK2NoYXIJKl9uY19nZXRfbG9jYWxlKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3VuaWNvZGVfbG9jYWxlCitpbnQJX25jX3VuaWNvZGVfbG9jYWxlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19sb2NhbGVfYnJlYWtzX2FjcworaW50CV9uY19sb2NhbGVfYnJlYWtzX2FjcygKKwkJVEVSTUlOQUwgKnRlcm1wKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2V0dXB0ZXJtCitpbnQJX25jX3NldHVwdGVybSgKKwkJY2hhcgkqdG5hbWUsIAorCQlpbnQJRmlsZWRlcywgCisJCWludAkqZXJycmV0LCAKKwkJTkNVUlNFU19CT09MIHJldXNlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXR1cHRlcm0KK2ludAlzZXR1cHRlcm0oCisJCWNoYXIJKnRuYW1lLCAKKwkJaW50CUZpbGVkZXMsIAorCQlpbnQJKmVycnJldCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90ZXJtY2FwLmMgKi8KKworI3VuZGVmIFVQCitjaGFyCSpVUDsKKyN1bmRlZiBCQworY2hhcgkqQkM7CisKKyN1bmRlZiB0Z2V0ZW50CitpbnQJdGdldGVudCgKKwkJY2hhcgkqYnVmcCwgCisJCWNvbnN0IGNoYXIgKm5hbWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI2lmIDAKKworI2luY2x1ZGUgPGNhcGRlZmF1bHRzLmM+CisKKyNlbmRpZgorCisjdW5kZWYgdGdldGZsYWcKK2ludAl0Z2V0ZmxhZygKKwkJY2hhcgkqaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRnZXRudW0KK2ludAl0Z2V0bnVtKAorCQljaGFyCSppZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGdldHN0cgorY2hhcgkqdGdldHN0cigKKwkJY2hhcgkqaWQsIAorCQljaGFyCSoqYXJlYSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Rlcm1uYW1lLmMgKi8KKworI3VuZGVmIHRlcm1uYW1lCitjaGFyCSp0ZXJtbmFtZSh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdGdvdG8uYyAqLworCisjdW5kZWYgdGdvdG8KK2NoYXIJKnRnb3RvKAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQlpbnQJeCwgCisJCWludAl5KQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdGkuYyAqLworCisjdW5kZWYgdGlnZXRmbGFnCitpbnQJdGlnZXRmbGFnKAorCQljaGFyCSpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRpZ2V0bnVtCitpbnQJdGlnZXRudW0oCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGlnZXRzdHIKK2NoYXIJKnRpZ2V0c3RyKAorCQljaGFyCSpzdHIpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90cGFybS5jICovCisKKyN1bmRlZiBfbmNfdHBhcm1fZXJyCitpbnQJX25jX3RwYXJtX2VycjsKKworI3VuZGVmIF9uY190cGFybV9hbmFseXplCitpbnQJX25jX3RwYXJtX2FuYWx5emUoCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWNoYXIJKnBfaXNfc1s5XSwgCisJCWludAkqcG9wY291bnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRwYXJtCitjaGFyCSp0cGFybSgKKwkJY2hhcgkqc3RyaW5nLCAKKwkJLi4uKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdHB1dHMuYyAqLworCisjdW5kZWYgUEMKK2NoYXIJUEM7CisjdW5kZWYgb3NwZWVkCitOQ1VSU0VTX09TUEVFRAlvc3BlZWQ7CisjdW5kZWYgX25jX251bGxzX3NlbnQKK2ludAlfbmNfbnVsbHNfc2VudDsKKworI3VuZGVmIF9uY19zZXRfbm9fcGFkZGluZwordm9pZAlfbmNfc2V0X25vX3BhZGRpbmcoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBkZWxheV9vdXRwdXQKK2ludAlkZWxheV9vdXRwdXQoCisJCWludAltcykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2ZsdXNoCit2b2lkCV9uY19mbHVzaCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX291dGNoCitpbnQJX25jX291dGNoKAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHB1dHAKK2ludAlwdXRwKAorCQljb25zdCBjaGFyICpzdHJpbmcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRwdXRzCitpbnQJdHB1dHMoCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWludAlhZmZjbnQsIAorCQlpbnQJKCpvdXRjKSgKKwkJaW50CXAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZS5jICovCisKKyN1bmRlZiBfbmNfdHJhY2luZwordW5zaWduZWQgX25jX3RyYWNpbmc7CisjdW5kZWYgX25jX3RwdXRzX3RyYWNlCitjb25zdCBjaGFyICpfbmNfdHB1dHNfdHJhY2UgPSB7MH07CisjdW5kZWYgX25jX291dGNoYXJzCitsb25nCV9uY19vdXRjaGFyczsKKworI3VuZGVmIHRyYWNlCit2b2lkCXRyYWNlKAorCQljb25zdCB1bnNpZ25lZCBpbnQgdHJhY2VsZXZlbCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF90cmFjZWYKK3ZvaWQJX3RyYWNlZigKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3JldHJhY2VfYm9vbAorTkNVUlNFU19CT09MIF9uY19yZXRyYWNlX2Jvb2woCisJCU5DVVJTRVNfQk9PTCBjb2RlKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9pbnQKK2ludAlfbmNfcmV0cmFjZV9pbnQoCisJCWludAljb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV91bnNpZ25lZAordW5zaWduZWQgX25jX3JldHJhY2VfdW5zaWduZWQoCisJCXVuc2lnbmVkIGNvZGUpCisJCXsgcmV0dXJuKCoodW5zaWduZWQgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfcHRyCitjaGFyCSpfbmNfcmV0cmFjZV9wdHIoCisJCWNoYXIJKmNvZGUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfY3B0cgorY29uc3QgY2hhciAqX25jX3JldHJhY2VfY3B0cigKKwkJY29uc3QgY2hhciAqY29kZSkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9jdm9pZF9wdHIKK3ZvaWQJKl9uY19yZXRyYWNlX2N2b2lkX3B0cigKKwkJdm9pZAkqY29kZSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV92b2lkX3B0cgordm9pZAkqX25jX3JldHJhY2Vfdm9pZF9wdHIoCisJCXZvaWQJKmNvZGUpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2Vfc3AKK1NDUkVFTgkqX25jX3JldHJhY2Vfc3AoCisJCVNDUkVFTgkqY29kZSkKKwkJeyByZXR1cm4oKihTQ1JFRU4gKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3dpbgorV0lORE9XCSpfbmNfcmV0cmFjZV93aW4oCisJCVdJTkRPVwkqY29kZSkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2VhdHIuYyAqLworCisjdW5kZWYgX3RyYWNlYXR0cjIKK2NoYXIJKl90cmFjZWF0dHIyKAorCQlpbnQJYnVmbnVtLCAKKwkJY2h0eXBlCW5ld21vZGUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlYXR0cgorY2hhcgkqX3RyYWNlYXR0cigKKwkJYXR0cl90CW5ld21vZGUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfYXR0cl90CithdHRyX3QJX25jX3JldHJhY2VfYXR0cl90KAorCQlhdHRyX3QJY29kZSkKKwkJeyByZXR1cm4oKihhdHRyX3QgKikwKTsgfQorCisjdW5kZWYgX25jX2FsdGNoYXJzZXRfbmFtZQorY29uc3QgY2hhciAqX25jX2FsdGNoYXJzZXRfbmFtZSgKKwkJYXR0cl90CWF0dHIsIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlY2h0eXBlMgorY2hhcgkqX3RyYWNlY2h0eXBlMigKKwkJaW50CWJ1Zm51bSwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaHR5cGUKK2NoYXIJKl90cmFjZWNodHlwZSgKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2NodHlwZQorY2h0eXBlCV9uY19yZXRyYWNlX2NodHlwZSgKKwkJY2h0eXBlCWNvZGUpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2ViaXRzLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCB2YWw7CisgICAgY29uc3QgY2hhciAqbmFtZTsKK30gQklUTkFNRVM7CisKKyN1bmRlZiBfbmNfdHJhY2VfdHR5bW9kZQorY2hhcgkqX25jX3RyYWNlX3R0eW1vZGUoCisJCXN0cnVjdCB0ZXJtaW9zICp0dHkpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3RyYWNlYml0cworY2hhcgkqX25jX3RyYWNlYml0cyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2VjaHIuYyAqLworCisjdW5kZWYgX25jX3RyYWNlY2hhcgorY2hhcgkqX25jX3RyYWNlY2hhcigKKwkJU0NSRUVOCSpzcCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaGFyCitjaGFyCSpfdHJhY2VjaGFyKAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90dHlmbGFncy5jICovCisKKyN1bmRlZiBfbmNfZ2V0X3R0eV9tb2RlCitpbnQJX25jX2dldF90dHlfbW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKmJ1ZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NldF90dHlfbW9kZQoraW50CV9uY19zZXRfdHR5X21vZGUoCisJCXN0cnVjdCB0ZXJtaW9zICpidWYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlZl9zaGVsbF9tb2RlCitpbnQJZGVmX3NoZWxsX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVmX3Byb2dfbW9kZQoraW50CWRlZl9wcm9nX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXRfcHJvZ19tb2RlCitpbnQJcmVzZXRfcHJvZ19tb2RlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2V0X3NoZWxsX21vZGUKK2ludAlyZXNldF9zaGVsbF9tb2RlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNhdmV0dHkKK2ludAlzYXZldHR5KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2V0dHkKK2ludAlyZXNldHR5KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90dHkvbGliX3R3YWl0LmMgKi8KKworI3VuZGVmIF9uY190aW1lZF93YWl0CitpbnQJX25jX3RpbWVkX3dhaXQoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJbW9kZSwgCisJCWludAltaWxsaXNlY29uZHMsIAorCQlpbnQJKnRpbWVsZWZ0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbmFtZV9tYXRjaC5jICovCisKKyN1bmRlZiBfbmNfZmlyc3RfbmFtZQorY2hhcgkqX25jX2ZpcnN0X25hbWUoCisJCWNvbnN0IGNoYXIgKmNvbnN0IHNwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19uYW1lX21hdGNoCitpbnQJX25jX25hbWVfbWF0Y2goCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWVsc3QsIAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lLCAKKwkJY29uc3QgY2hhciAqY29uc3QgZGVsaW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9uYW1lcy5jICovCisKKyN1bmRlZiBib29sbmFtZXMKK2NoYXIJKmNvbnN0IGJvb2xuYW1lc1tdID0gezB9OworI3VuZGVmIGJvb2xmbmFtZXMKK2NoYXIJKmNvbnN0IGJvb2xmbmFtZXNbXSA9IHswfTsKKyN1bmRlZiBudW1uYW1lcworY2hhcgkqY29uc3QgbnVtbmFtZXNbXSA9IHswfTsKKyN1bmRlZiBudW1mbmFtZXMKK2NoYXIJKmNvbnN0IG51bWZuYW1lc1tdID0gezB9OworI3VuZGVmIHN0cm5hbWVzCitjaGFyCSpjb25zdCBzdHJuYW1lc1tdID0gezB9OworI3VuZGVmIHN0cmZuYW1lcworY2hhcgkqY29uc3Qgc3RyZm5hbWVzW10gPSB7MH07CisKKy8qIC4vdGluZm8vcmVhZF9lbnRyeS5jICovCisKKyNpbmNsdWRlIDxoYXNoZWRfZGIuaD4KKworI3VuZGVmIF9uY19yZWFkX3Rlcm10eXBlCitpbnQJX25jX3JlYWRfdGVybXR5cGUoCisJCVRFUk1UWVBFICpwdHIsIAorCQljaGFyCSpidWZmZXIsIAorCQlpbnQJbGltaXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZWFkX2ZpbGVfZW50cnkKK2ludAlfbmNfcmVhZF9maWxlX2VudHJ5KAorCQljb25zdCBjaGFyICpjb25zdCBmaWxlbmFtZSwgCisJCVRFUk1UWVBFICpwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZWFkX2VudHJ5CitpbnQJX25jX3JlYWRfZW50cnkoCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIAorCQljaGFyCSpjb25zdCBmaWxlbmFtZSwgCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL3JlYWRfdGVybWNhcC5jICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI3VuZGVmIF9uY19yZWFkX3Rlcm1jYXBfZW50cnkKK2ludAlfbmNfcmVhZF90ZXJtY2FwX2VudHJ5KAorCQljb25zdCBjaGFyICpjb25zdCB0biwgCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL3NldGJ1Zi5jICovCisKKyN1bmRlZiBfbmNfc2V0X2J1ZmZlcgordm9pZAlfbmNfc2V0X2J1ZmZlcigKKwkJRklMRQkqb2ZwLCAKKwkJTkNVUlNFU19CT09MIGJ1ZmZlcmVkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL3N0cmluZ3MuYyAqLworCisjdW5kZWYgX25jX3N0cl9pbml0CitzdHJpbmdfZGVzYyAqX25jX3N0cl9pbml0KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJY2hhcgkqc3JjLCAKKwkJc2l6ZV90CWxlbikKKwkJeyByZXR1cm4oKihzdHJpbmdfZGVzYyAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cl9udWxsCitzdHJpbmdfZGVzYyAqX25jX3N0cl9udWxsKAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJc2l6ZV90CWxlbikKKwkJeyByZXR1cm4oKihzdHJpbmdfZGVzYyAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cl9jb3B5CitzdHJpbmdfZGVzYyAqX25jX3N0cl9jb3B5KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJc3RyaW5nX2Rlc2MgKnNyYykKKwkJeyByZXR1cm4oKihzdHJpbmdfZGVzYyAqKikwKTsgfQorCisjdW5kZWYgX25jX3NhZmVfc3RyY2F0CitOQ1VSU0VTX0JPT0wgX25jX3NhZmVfc3RyY2F0KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJY29uc3QgY2hhciAqc3JjKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2FmZV9zdHJjcHkKK05DVVJTRVNfQk9PTCBfbmNfc2FmZV9zdHJjcHkoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQljb25zdCBjaGFyICpzcmMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV9idWYuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX2J1ZgorY2hhcgkqX25jX3RyYWNlX2J1ZigKKwkJaW50CWJ1Zm51bSwgCisJCXNpemVfdAl3YW50KQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY190cmFjZV9idWZjYXQKK2NoYXIJKl9uY190cmFjZV9idWZjYXQoCisJCWludAlidWZudW0sIAorCQljb25zdCBjaGFyICp2YWx1ZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHJhY2UvdHJhY2VfdHJpZXMuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX3RyaWVzCit2b2lkCV9uY190cmFjZV90cmllcygKKwkJVFJJRVMJKnRyZWUpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS90cmllcy5jICovCisKKyN1bmRlZiBfbmNfZXhwYW5kX3RyeQorY2hhcgkqX25jX2V4cGFuZF90cnkoCisJCVRSSUVTCSp0cmVlLCAKKwkJdW5zaWduZWQgY29kZSwgCisJCWludAkqY291bnQsIAorCQlzaXplX3QJbGVuKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZW1vdmVfa2V5CitpbnQJX25jX3JlbW92ZV9rZXkoCisJCVRSSUVTCSoqdHJlZSwgCisJCXVuc2lnbmVkIGNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZW1vdmVfc3RyaW5nCitpbnQJX25jX3JlbW92ZV9zdHJpbmcoCisJCVRSSUVTCSoqdHJlZSwgCisJCWNvbnN0IGNoYXIgKnN0cmluZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL3RyaW1fc2dyMC5jICovCisKKyN1bmRlZiBfbmNfdHJpbV9zZ3IwCitjaGFyCSpfbmNfdHJpbV9zZ3IwKAorCQlURVJNVFlQRSAqdHApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3VuY3RybC5jICovCisKKyN1bmRlZiBfbmNfdW5jdHJsCitjaGFyCSpfbmNfdW5jdHJsKAorCQlTQ1JFRU4JKnNwLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIHVuY3RybAorY2hhcgkqdW5jdHJsKAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL3Zpc2J1Zi5jICovCisKKyN1bmRlZiBfbmNfdmlzYnVmMgorY29uc3QgY2hhciAqX25jX3Zpc2J1ZjIoCisJCWludAlidWZudW0sIAorCQljb25zdCBjaGFyICpidWYpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2J1ZgorY29uc3QgY2hhciAqX25jX3Zpc2J1ZigKKwkJY29uc3QgY2hhciAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNidWZuCitjb25zdCBjaGFyICpfbmNfdmlzYnVmbigKKwkJY29uc3QgY2hhciAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzY2J1ZjIKK2NvbnN0IGNoYXIgKl9uY192aXNjYnVmMigKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNodHlwZSAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzY2J1ZgorY29uc3QgY2hhciAqX25jX3Zpc2NidWYoCisJCWNvbnN0IGNodHlwZSAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vYWxsb2NfZW50cnkuYyAqLworCisjdW5kZWYgX25jX2luaXRfZW50cnkKK3ZvaWQJX25jX2luaXRfZW50cnkoCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19jb3B5X2VudHJ5CitFTlRSWQkqX25jX2NvcHlfZW50cnkoCisJCUVOVFJZCSpvbGRwKQorCQl7IHJldHVybigqKEVOVFJZICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2F2ZV9zdHIKK2NoYXIJKl9uY19zYXZlX3N0cigKKwkJY29uc3QgY2hhciAqY29uc3Qgc3RyaW5nKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY193cmFwX2VudHJ5Cit2b2lkCV9uY193cmFwX2VudHJ5KAorCQlFTlRSWQkqY29uc3QgZXAsIAorCQlOQ1VSU0VTX0JPT0wgY29weV9zdHJpbmdzKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX21lcmdlX2VudHJ5Cit2b2lkCV9uY19tZXJnZV9lbnRyeSgKKwkJVEVSTVRZUEUgKmNvbnN0IHRvLCAKKwkJVEVSTVRZUEUgKmNvbnN0IGZyb20pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vY2FwdG9pbmZvLmMgKi8KKworI3VuZGVmIF9uY19jYXB0b2luZm8KK2NoYXIJKl9uY19jYXB0b2luZm8oCisJCWNvbnN0IGNoYXIgKmNhcCwgCisJCWNvbnN0IGNoYXIgKnMsIAorCQlpbnQgY29uc3QgcGFyYW1ldGVyaXplZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfaW5mb3RvY2FwCitjaGFyCSpfbmNfaW5mb3RvY2FwKAorCQljb25zdCBjaGFyICpjYXAsIAorCQljb25zdCBjaGFyICpzdHIsIAorCQlpbnQgY29uc3QgcGFyYW1ldGVyaXplZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vY29tcF9jYXB0YWIuYyAqLworCisjaW5jbHVkZSA8aGFzaHNpemUuaD4KKworI3VuZGVmIF9uY19nZXRfdGFibGUKK2NvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICpfbmNfZ2V0X3RhYmxlKAorCQlOQ1VSU0VTX0JPT0wgdGVybWNhcCkKKwkJeyByZXR1cm4oKihjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqKikwKTsgfQorCisjdW5kZWYgX25jX2dldF9oYXNoX3RhYmxlCitjb25zdCBzaG9ydCAqX25jX2dldF9oYXNoX3RhYmxlKAorCQlOQ1VSU0VTX0JPT0wgdGVybWNhcCkKKwkJeyByZXR1cm4oKihjb25zdCBzaG9ydCAqKikwKTsgfQorCisjdW5kZWYgX25jX2dldF9hbGlhc190YWJsZQorY29uc3Qgc3RydWN0IGFsaWFzICpfbmNfZ2V0X2FsaWFzX3RhYmxlKAorCQlOQ1VSU0VTX0JPT0wgdGVybWNhcCkKKwkJeyByZXR1cm4oKihjb25zdCBzdHJ1Y3QgYWxpYXMgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX2V4cGFuZC5jICovCisKKyN1bmRlZiBfbmNfdGljX2V4cGFuZAorY2hhcgkqX25jX3RpY19leHBhbmQoCisJCWNvbnN0IGNoYXIgKnNyY3AsIAorCQlOQ1VSU0VTX0JPT0wgdGljX2Zvcm1hdCwgCisJCWludAludW1iZXJzKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX2hhc2guYyAqLworCisjdW5kZWYgX25jX2ZpbmRfZW50cnkKK3N0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpfbmNfZmluZF9lbnRyeSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJY29uc3Qgc2hvcnQgKmhhc2hfdGFibGUpCisJCXsgcmV0dXJuKCooc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKiopMCk7IH0KKworI3VuZGVmIF9uY19maW5kX3R5cGVfZW50cnkKK3N0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpfbmNfZmluZF90eXBlX2VudHJ5KAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQlpbnQJdHlwZSwgCisJCWNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICp0YWJsZSkKKwkJeyByZXR1cm4oKihzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfcGFyc2UuYyAqLworCisjdW5kZWYgX25jX2NoZWNrX3Rlcm10eXBlMgordm9pZAkoKl9uY19jaGVja190ZXJtdHlwZTIpKAorCQlURVJNVFlQRSAqcDEsIAorCQlOQ1VSU0VTX0JPT0wgcDIpOworI3VuZGVmIF9uY19jaGVja190ZXJtdHlwZQordm9pZAkoKl9uY19jaGVja190ZXJtdHlwZSkoCisJCVRFUk1UWVBFICpwMSk7CisKKyN1bmRlZiBfbmNfZW50cnlfbWF0Y2gKK05DVVJTRVNfQk9PTCBfbmNfZW50cnlfbWF0Y2goCisJCWNoYXIJKm4xLCAKKwkJY2hhcgkqbjIpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19yZWFkX2VudHJ5X3NvdXJjZQordm9pZAlfbmNfcmVhZF9lbnRyeV9zb3VyY2UoCisJCUZJTEUJKmZwLCAKKwkJY2hhcgkqYnVmLCAKKwkJaW50CWxpdGVyYWwsIAorCQlOQ1VSU0VTX0JPT0wgc2lsZW50LCAKKwkJTkNVUlNFU19CT09MICgqaG9vaykoCisJCUVOVFJZCSpwMSkpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcmVzb2x2ZV91c2VzMgoraW50CV9uY19yZXNvbHZlX3VzZXMyKAorCQlOQ1VSU0VTX0JPT0wgZnVsbHJlc29sdmUsIAorCQlOQ1VSU0VTX0JPT0wgbGl0ZXJhbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3Jlc29sdmVfdXNlcworaW50CV9uY19yZXNvbHZlX3VzZXMoCisJCU5DVVJTRVNfQk9PTCBmdWxscmVzb2x2ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfc2Nhbi5jICovCisKKyN1bmRlZiBfbmNfc3ludGF4CitpbnQJX25jX3N5bnRheDsKKyN1bmRlZiBfbmNfY3Vycl9maWxlX3BvcworbG9uZwlfbmNfY3Vycl9maWxlX3BvczsKKyN1bmRlZiBfbmNfY29tbWVudF9zdGFydAorbG9uZwlfbmNfY29tbWVudF9zdGFydDsKKyN1bmRlZiBfbmNfY29tbWVudF9lbmQKK2xvbmcJX25jX2NvbW1lbnRfZW5kOworI3VuZGVmIF9uY19zdGFydF9saW5lCitsb25nCV9uY19zdGFydF9saW5lOworI3VuZGVmIF9uY19jdXJyX3Rva2VuCitzdHJ1Y3QgdG9rZW4gX25jX2N1cnJfdG9rZW47CisjdW5kZWYgX25jX2Rpc2FibGVfcGVyaW9kCitOQ1VSU0VTX0JPT0wgX25jX2Rpc2FibGVfcGVyaW9kOworCisjdW5kZWYgX25jX3Jlc2V0X2lucHV0Cit2b2lkCV9uY19yZXNldF9pbnB1dCgKKwkJRklMRQkqZnAsIAorCQljaGFyCSpidWYpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3Rva2VuCitpbnQJX25jX2dldF90b2tlbigKKwkJTkNVUlNFU19CT09MIHNpbGVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3RyYW5zX3N0cmluZworaW50CV9uY190cmFuc19zdHJpbmcoCisJCWNoYXIJKnB0ciwgCisJCWNoYXIJKmxhc3QpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19wdXNoX3Rva2VuCit2b2lkCV9uY19wdXNoX3Rva2VuKAorCQlpbnQJdG9rY2xhc3MpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcGFuaWNfbW9kZQordm9pZAlfbmNfcGFuaWNfbW9kZSgKKwkJY2hhcgljaCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9wYXJzZV9lbnRyeS5jICovCisKKyN1bmRlZiBfbmNfcGFyc2VfZW50cnkKK2ludAlfbmNfcGFyc2VfZW50cnkoCisJCXN0cnVjdCBlbnRyeSAqZW50cnlwLCAKKwkJaW50CWxpdGVyYWwsIAorCQlOQ1VSU0VTX0JPT0wgc2lsZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfY2FwY21wCitpbnQJX25jX2NhcGNtcCgKKwkJY29uc3QgY2hhciAqcywgCisJCWNvbnN0IGNoYXIgKnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmZyb207CisgICAgY29uc3QgY2hhciAqdG87Cit9IGFzc29jOworCisvKiAuL3RpbmZvL3dyaXRlX2VudHJ5LmMgKi8KKworI3VuZGVmIF9uY19zZXRfd3JpdGVkaXIKK3ZvaWQJX25jX3NldF93cml0ZWRpcigKKwkJY2hhcgkqZGlyKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3dyaXRlX2VudHJ5Cit2b2lkCV9uY193cml0ZV9lbnRyeSgKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3RpY193cml0dGVuCitpbnQJX25jX3RpY193cml0dGVuKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2RlZmluZV9rZXkuYyAqLworCisjdW5kZWYgZGVmaW5lX2tleQoraW50CWRlZmluZV9rZXkoCisJCWNvbnN0IGNoYXIgKnN0ciwgCisJCWludAlrZXljb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vaGFzaGVkX2RiLmMgKi8KKworI3VuZGVmIF9uY19oYXNoZWRfZGIKK3ZvaWQJX25jX2hhc2hlZF9kYih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2Uva2V5X2RlZmluZWQuYyAqLworCisjdW5kZWYga2V5X2RlZmluZWQKK2ludAlrZXlfZGVmaW5lZCgKKwkJY29uc3QgY2hhciAqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9rZXlib3VuZC5jICovCisKKyN1bmRlZiBrZXlib3VuZAorY2hhcgkqa2V5Ym91bmQoCisJCWludAljb2RlLCAKKwkJaW50CWNvdW50KQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL2tleW9rLmMgKi8KKworI3VuZGVmIGtleW9rCitpbnQJa2V5b2soCisJCWludAljLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3ZlcnNpb24uYyAqLworCisjdW5kZWYgY3Vyc2VzX3ZlcnNpb24KK2NvbnN0IGNoYXIgKmN1cnNlc192ZXJzaW9uKHZvaWQpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy9sbGliLWxuY3Vyc2VzdCBiL25jdXJzZXMvbGxpYi1sbmN1cnNlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5ZWY2MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvbGxpYi1sbmN1cnNlc3QKQEAgLTAsMCArMSwzNTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi90dHkvaGFyZHNjcm9sbC5jICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjdW5kZWYgX25jX29sZG51bXMKK2ludAkqX25jX29sZG51bXM7CisKKyN1bmRlZiBfbmNfc2Nyb2xsX29wdGltaXplCit2b2lkCV9uY19zY3JvbGxfb3B0aW1pemUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19saW5lZHVtcAordm9pZAlfbmNfbGluZWR1bXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90dHkvaGFzaG1hcC5jICovCisKKyNpbmNsdWRlIDx0ZXJtLmg+CisKKyN1bmRlZiBfbmNfaGFzaF9tYXAKK3ZvaWQJX25jX2hhc2hfbWFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbWFrZV9vbGRoYXNoCit2b2lkCV9uY19tYWtlX29sZGhhc2goCisJCWludAlpKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3Njcm9sbF9vbGRoYXNoCit2b2lkCV9uY19zY3JvbGxfb2xkaGFzaCgKKwkJaW50CW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9hZGRjaC5jICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjdW5kZWYgX25jX3JlbmRlcgorY2h0eXBlCV9uY19yZW5kZXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBfbmNfd2FkZGNoX25vc3luYworaW50CV9uY193YWRkY2hfbm9zeW5jKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNodHlwZSBjKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2gKK2ludAl3YWRkY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3ZWNob2NoYXIKK2ludAl3ZWNob2NoYXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYWRkc3RyLmMgKi8KKworI3VuZGVmIHdhZGRuc3RyCitpbnQJd2FkZG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqYXN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2huc3RyCitpbnQJd2FkZGNobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgKmFzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JlZXAuYyAqLworCisjdW5kZWYgYmVlcAoraW50CWJlZXAodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JrZ2QuYyAqLworCisjdW5kZWYgd2JrZ2RzZXQKK3ZvaWQJd2JrZ2RzZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2JrZ2QKK2ludAl3YmtnZCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9ib3guYyAqLworCisjdW5kZWYgd2JvcmRlcgoraW50CXdib3JkZXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWxzLCAKKwkJY2h0eXBlCXJzLCAKKwkJY2h0eXBlCXRzLCAKKwkJY2h0eXBlCWJzLCAKKwkJY2h0eXBlCXRsLCAKKwkJY2h0eXBlCXRyLCAKKwkJY2h0eXBlCWJsLCAKKwkJY2h0eXBlCWJyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2hnYXQuYyAqLworCisjdW5kZWYgd2NoZ2F0CitpbnQJd2NoZ2F0KAorCQlXSU5ET1cJKndpbiwgCisJCWludAluLCAKKwkJYXR0cl90CWF0dHIsIAorCQlzaG9ydAljb2xvciwgCisJCWNvbnN0IHZvaWQgKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbGVhci5jICovCisKKyN1bmRlZiB3Y2xlYXIKK2ludAl3Y2xlYXIoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xlYXJvay5jICovCisKKyN1bmRlZiBjbGVhcm9rCitpbnQJY2xlYXJvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NscmJvdC5jICovCisKKyN1bmRlZiB3Y2xydG9ib3QKK2ludAl3Y2xydG9ib3QoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xyZW9sLmMgKi8KKworI3VuZGVmIHdjbHJ0b2VvbAoraW50CXdjbHJ0b2VvbCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jb2xvci5jICovCisKKyNpbmNsdWRlIDx0aWMuaD4KKworI3VuZGVmIF9uY19DT0xPUl9QQUlSUworaW50CV9uY19DT0xPUl9QQUlSUyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfQ09MT1JTCitpbnQJX25jX0NPTE9SUyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVzZXRfY29sb3JzCitOQ1VSU0VTX0JPT0wgX25jX3Jlc2V0X2NvbG9ycyh2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBzdGFydF9jb2xvcgoraW50CXN0YXJ0X2NvbG9yKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluaXRfcGFpcgoraW50CWluaXRfcGFpcigKKwkJc2hvcnQJcGFpciwgCisJCXNob3J0CWYsIAorCQlzaG9ydAliKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbml0X2NvbG9yCitpbnQJaW5pdF9jb2xvcigKKwkJc2hvcnQJY29sb3IsIAorCQlzaG9ydAlyLCAKKwkJc2hvcnQJZywgCisJCXNob3J0CWIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNhbl9jaGFuZ2VfY29sb3IKK05DVVJTRVNfQk9PTCBjYW5fY2hhbmdlX2NvbG9yKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGhhc19jb2xvcnMKK05DVVJTRVNfQk9PTCBoYXNfY29sb3JzKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGNvbG9yX2NvbnRlbnQKK2ludAljb2xvcl9jb250ZW50KAorCQlzaG9ydAljb2xvciwgCisJCXNob3J0CSpyLCAKKwkJc2hvcnQJKmcsIAorCQlzaG9ydAkqYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcGFpcl9jb250ZW50CitpbnQJcGFpcl9jb250ZW50KAorCQlzaG9ydAlwYWlyLCAKKwkJc2hvcnQJKmYsIAorCQlzaG9ydAkqYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2RvX2NvbG9yCit2b2lkCV9uY19kb19jb2xvcigKKwkJc2hvcnQJb2xkX3BhaXIsIAorCQlzaG9ydAlwYWlyLCAKKwkJTkNVUlNFU19CT09MIHJldmVyc2UsIAorCQlpbnQJKCpvdXRjKSgKKwkJaW50CXAxKSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9jb2xvcnNldC5jICovCisKKyN1bmRlZiB3Y29sb3Jfc2V0CitpbnQJd2NvbG9yX3NldCgKKwkJV0lORE9XCSp3aW4sIAorCQlzaG9ydAljb2xvcl9wYWlyX251bWJlciwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZWxjaC5jICovCisKKyN1bmRlZiB3ZGVsY2gKK2ludAl3ZGVsY2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZGVsd2luLmMgKi8KKworI3VuZGVmIGRlbHdpbgoraW50CWRlbHdpbigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lY2hvLmMgKi8KKworI3VuZGVmIGVjaG8KK2ludAllY2hvKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vZWNobworaW50CW5vZWNobyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZW5kd2luLmMgKi8KKworI3VuZGVmIGVuZHdpbgoraW50CWVuZHdpbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZXJhc2UuYyAqLworCisjdW5kZWYgd2VyYXNlCitpbnQJd2VyYXNlKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2ZsYXNoLmMgKi8KKworI3VuZGVmIGZsYXNoCitpbnQJZmxhc2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2xpYl9nZW4uYyAqLworCisjdW5kZWYgYWRkY2gKK2ludAlhZGRjaCgKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZGNobnN0cgoraW50CWFkZGNobnN0cigKKwkJY29uc3QgY2h0eXBlICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRjaHN0cgoraW50CWFkZGNoc3RyKAorCQljb25zdCBjaHR5cGUgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZG5zdHIKK2ludAlhZGRuc3RyKAorCQljb25zdCBjaGFyICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRzdHIKK2ludAlhZGRzdHIoCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJvZmYKK2ludAlhdHRyb2ZmKAorCQlOQ1VSU0VTX0FUVFJfVAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyb24KK2ludAlhdHRyb24oCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJzZXQKK2ludAlhdHRyc2V0KAorCQlOQ1VSU0VTX0FUVFJfVAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX2dldAoraW50CWF0dHJfZ2V0KAorCQlhdHRyX3QJKmExLCAKKwkJc2hvcnQJKmEyLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9vZmYKK2ludAlhdHRyX29mZigKKwkJYXR0cl90CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9vbgoraW50CWF0dHJfb24oCisJCWF0dHJfdAlhMSwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfc2V0CitpbnQJYXR0cl9zZXQoCisJCWF0dHJfdAlhMSwgCisJCXNob3J0CWEyLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYmtnZAoraW50CWJrZ2QoCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBia2dkc2V0Cit2b2lkCWJrZ2RzZXQoCisJCWNodHlwZQl6KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgYm9yZGVyCitpbnQJYm9yZGVyKAorCQljaHR5cGUJYTEsIAorCQljaHR5cGUJYTIsIAorCQljaHR5cGUJYTMsIAorCQljaHR5cGUJYTQsIAorCQljaHR5cGUJYTUsIAorCQljaHR5cGUJYTYsIAorCQljaHR5cGUJYTcsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYm94CitpbnQJYm94KAorCQlXSU5ET1cJKmExLCAKKwkJY2h0eXBlCWEyLCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNoZ2F0CitpbnQJY2hnYXQoCisJCWludAlhMSwgCisJCWF0dHJfdAlhMiwgCisJCXNob3J0CWEzLCAKKwkJY29uc3Qgdm9pZCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2xlYXIKK2ludAljbGVhcih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjbHJ0b2JvdAoraW50CWNscnRvYm90KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNscnRvZW9sCitpbnQJY2xydG9lb2wodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY29sb3Jfc2V0CitpbnQJY29sb3Jfc2V0KAorCQlzaG9ydAlhMSwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIENPTE9SX1BBSVIKK2ludAlDT0xPUl9QQUlSKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVsY2gKK2ludAlkZWxjaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWxldGVsbgoraW50CWRlbGV0ZWxuKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGVjaG9jaGFyCitpbnQJZWNob2NoYXIoCisJCWNvbnN0IGNodHlwZSB6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBlcmFzZQoraW50CWVyYXNlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGJrZ2QKK2NodHlwZQlnZXRia2dkKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIGdldGNoCitpbnQJZ2V0Y2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0bnN0cgoraW50CWdldG5zdHIoCisJCWNoYXIJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldHN0cgoraW50CWdldHN0cigKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaGxpbmUKK2ludAlobGluZSgKKwkJY2h0eXBlCWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluY2gKK2NodHlwZQlpbmNoKHZvaWQpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIGluY2huc3RyCitpbnQJaW5jaG5zdHIoCisJCWNodHlwZQkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5jaHN0cgoraW50CWluY2hzdHIoCisJCWNodHlwZQkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5uc3RyCitpbnQJaW5uc3RyKAorCQljaGFyCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNjaAoraW50CWluc2NoKAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zZGVsbG4KK2ludAlpbnNkZWxsbigKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc2VydGxuCitpbnQJaW5zZXJ0bG4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zbnN0cgoraW50CWluc25zdHIoCisJCWNvbnN0IGNoYXIgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc3N0cgoraW50CWluc3N0cigKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zdHIKK2ludAlpbnN0cigKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbW92ZQoraW50CW1vdmUoCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZGNoCitpbnQJbXZhZGRjaCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkY2huc3RyCitpbnQJbXZhZGRjaG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNodHlwZSAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRjaHN0cgoraW50CW12YWRkY2hzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRuc3RyCitpbnQJbXZhZGRuc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZHN0cgoraW50CW12YWRkc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmNoZ2F0CitpbnQJbXZjaGdhdCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJYXR0cl90CWE0LCAKKwkJc2hvcnQJYTUsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmRlbGNoCitpbnQJbXZkZWxjaCgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0Y2gKK2ludAltdmdldGNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRuc3RyCitpbnQJbXZnZXRuc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaGFyCSphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldHN0cgoraW50CW12Z2V0c3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmhsaW5lCitpbnQJbXZobGluZSgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCWEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5jaAorY2h0eXBlCW12aW5jaCgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIG12aW5jaG5zdHIKK2ludAltdmluY2huc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5jaHN0cgoraW50CW12aW5jaHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmlubnN0cgoraW50CW12aW5uc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaGFyCSphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc2NoCitpbnQJbXZpbnNjaCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zbnN0cgoraW50CW12aW5zbnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2hhciAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNzdHIKK2ludAltdmluc3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnN0cgoraW50CW12aW5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12dmxpbmUKK2ludAltdnZsaW5lKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkY2gKK2ludAltdndhZGRjaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSB6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRjaG5zdHIKK2ludAltdndhZGRjaG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaHR5cGUgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZGNoc3RyCitpbnQJbXZ3YWRkY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaHR5cGUgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZG5zdHIKK2ludAltdndhZGRuc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkc3RyCitpbnQJbXZ3YWRkc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Y2hnYXQKK2ludAltdndjaGdhdCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWludAlhNCwgCisJCWF0dHJfdAlhNSwgCisJCXNob3J0CWE2LCAKKwkJY29uc3Qgdm9pZCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3ZGVsY2gKK2ludAltdndkZWxjaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRjaAoraW50CW12d2dldGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldG5zdHIKK2ludAltdndnZXRuc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2hhcgkqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0c3RyCitpbnQJbXZ3Z2V0c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aGxpbmUKK2ludAltdndobGluZSgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQlhNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbmNoCitjaHR5cGUJbXZ3aW5jaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAl6KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBtdndpbmNobnN0cgoraW50CW12d2luY2huc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbmNoc3RyCitpbnQJbXZ3aW5jaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5uc3RyCitpbnQJbXZ3aW5uc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2hhcgkqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zY2gKK2ludAltdndpbnNjaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNuc3RyCitpbnQJbXZ3aW5zbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNoYXIgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc3N0cgoraW50CW12d2luc3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc3RyCitpbnQJbXZ3aW5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnd2bGluZQoraW50CW12d3ZsaW5lKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCWE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIFBBSVJfTlVNQkVSCitpbnQJUEFJUl9OVU1CRVIoCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZWRyYXd3aW4KK2ludAlyZWRyYXd3aW4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVmcmVzaAoraW50CXJlZnJlc2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NybAoraW50CXNjcmwoCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JvbGwKK2ludAlzY3JvbGwoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0c2NycmVnCitpbnQJc2V0c2NycmVnKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3RhbmRvdXQKK2ludAlzdGFuZG91dCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzdGFuZGVuZAoraW50CXN0YW5kZW5kKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRpbWVvdXQKK3ZvaWQJdGltZW91dCgKKwkJaW50CXopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB0b3VjaGxpbmUKK2ludAl0b3VjaGxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdG91Y2h3aW4KK2ludAl0b3VjaHdpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB1bnRvdWNod2luCitpbnQJdW50b3VjaHdpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2bGluZQoraW50CXZsaW5lKAorCQljaHR5cGUJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdndfcHJpbnR3CitpbnQJdndfcHJpbnR3KAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2hhciAqYTIsIAorCQl2YV9saXN0CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZ3X3NjYW53CitpbnQJdndfc2NhbncoCisJCVdJTkRPVwkqYTEsIAorCQljaGFyCSphMiwgCisJCXZhX2xpc3QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZGNoc3RyCitpbnQJd2FkZGNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkc3RyCitpbnQJd2FkZHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyb24KK2ludAl3YXR0cm9uKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyb2ZmCitpbnQJd2F0dHJvZmYoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJzZXQKK2ludAl3YXR0cnNldCgKKwkJV0lORE9XCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cl9nZXQKK2ludAl3YXR0cl9nZXQoCisJCVdJTkRPVwkqYTEsIAorCQlhdHRyX3QJKmEyLCAKKwkJc2hvcnQJKmEzLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJfc2V0CitpbnQJd2F0dHJfc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJYXR0cl90CWEyLCAKKwkJc2hvcnQJYTMsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3ZGVsZXRlbG4KK2ludAl3ZGVsZXRlbG4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldHN0cgoraW50CXdnZXRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5jaHN0cgoraW50CXdpbmNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zZXJ0bG4KK2ludAl3aW5zZXJ0bG4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc3N0cgoraW50CXdpbnNzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zdHIKK2ludAl3aW5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c3RhbmRvdXQKK2ludAl3c3RhbmRvdXQoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N0YW5kZW5kCitpbnQJd3N0YW5kZW5kKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGF0dHJzCitpbnQJZ2V0YXR0cnMoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0Y3VyeAoraW50CWdldGN1cngoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0Y3VyeQoraW50CWdldGN1cnkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmVneAoraW50CWdldGJlZ3goCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmVneQoraW50CWdldGJlZ3koCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0bWF4eAoraW50CWdldG1heHgoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0bWF4eQoraW50CWdldG1heHkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0cGFyeAoraW50CWdldHBhcngoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0cGFyeQoraW50CWdldHBhcnkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldHBhcmVudAorV0lORE9XCSp3Z2V0cGFyZW50KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBpc19jbGVhcmVkCitOQ1VSU0VTX0JPT0wgaXNfY2xlYXJlZCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19pZGNvaworTkNVUlNFU19CT09MIGlzX2lkY29rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2lkbG9rCitOQ1VSU0VTX0JPT0wgaXNfaWRsb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfaW1tZWRvaworTkNVUlNFU19CT09MIGlzX2ltbWVkb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfa2V5cGFkCitOQ1VSU0VTX0JPT0wgaXNfa2V5cGFkKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2xlYXZlb2sKK05DVVJTRVNfQk9PTCBpc19sZWF2ZW9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX25vZGVsYXkKK05DVVJTRVNfQk9PTCBpc19ub2RlbGF5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX25vdGltZW91dAorTkNVUlNFU19CT09MIGlzX25vdGltZW91dCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19zY3JvbGxvaworTkNVUlNFU19CT09MIGlzX3Njcm9sbG9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3N5bmNvaworTkNVUlNFU19CT09MIGlzX3N5bmNvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0c2NycmVnCitpbnQJd2dldHNjcnJlZygKKwkJY29uc3QgV0lORE9XICphMSwgCisJCWludAkqYTIsIAorCQlpbnQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1vdXNlX3RyYWZvCitOQ1VSU0VTX0JPT0wgbW91c2VfdHJhZm8oCisJCWludAkqYTEsIAorCQlpbnQJKmEyLCAKKwkJTkNVUlNFU19CT09MIHopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9nZXRjaC5jICovCisKKyNpbmNsdWRlIDxmaWZvX2RlZnMuaD4KKworI3VuZGVmIF9uY19FU0NERUxBWQoraW50CV9uY19FU0NERUxBWSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRfZXNjZGVsYXkKK2ludAlzZXRfZXNjZGVsYXkoCisJCWludAl2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3dnZXRjaAoraW50CV9uY193Z2V0Y2goCisJCVdJTkRPVwkqd2luLCAKKwkJdW5zaWduZWQgbG9uZyAqcmVzdWx0LCAKKwkJaW50CXVzZV9tZXRhKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0Y2gKK2ludAl3Z2V0Y2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZ2V0c3RyLmMgKi8KKworI3VuZGVmIHdnZXRuc3RyCitpbnQJd2dldG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqc3RyLCAKKwkJaW50CW1heGxlbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2hsaW5lLmMgKi8KKworI3VuZGVmIHdobGluZQoraW50CXdobGluZSgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2ltbWVkb2suYyAqLworCisjdW5kZWYgaW1tZWRvawordm9pZAlpbW1lZG9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2luY2hzdHIuYyAqLworCisjdW5kZWYgd2luY2huc3RyCitpbnQJd2luY2huc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQkqc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbml0c2NyLmMgKi8KKworI3VuZGVmIGluaXRzY3IKK1dJTkRPVwkqaW5pdHNjcih2b2lkKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc2NoLmMgKi8KKworI3VuZGVmIF9uY19pbnNlcnRfY2gKK2ludAlfbmNfaW5zZXJ0X2NoKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc2NoCitpbnQJd2luc2NoKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zZGVsLmMgKi8KKworI3VuZGVmIHdpbnNkZWxsbgoraW50CXdpbnNkZWxsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc25zdHIuYyAqLworCisjdW5kZWYgd2luc25zdHIKK2ludAl3aW5zbnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICpzLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnN0ci5jICovCisKKyN1bmRlZiB3aW5uc3RyCitpbnQJd2lubnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2lzZW5kd2luLmMgKi8KKworI3VuZGVmIGlzZW5kd2luCitOQ1VSU0VTX0JPT0wgaXNlbmR3aW4odm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2xlYXZlb2suYyAqLworCisjdW5kZWYgbGVhdmVvaworaW50CWxlYXZlb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9tb3VzZS5jICovCisKKyN1bmRlZiBnZXRtb3VzZQoraW50CWdldG1vdXNlKAorCQlNRVZFTlQJKmFldmVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5nZXRtb3VzZQoraW50CXVuZ2V0bW91c2UoCisJCU1FVkVOVAkqYWV2ZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3VzZW1hc2sKK21tYXNrX3QJbW91c2VtYXNrKAorCQltbWFza190CW5ld21hc2ssIAorCQltbWFza190CSpvbGRtYXNrKQorCQl7IHJldHVybigqKG1tYXNrX3QgKikwKTsgfQorCisjdW5kZWYgd2VuY2xvc2UKK05DVVJTRVNfQk9PTCB3ZW5jbG9zZSgKKwkJY29uc3QgV0lORE9XICp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBtb3VzZWludGVydmFsCitpbnQJbW91c2VpbnRlcnZhbCgKKwkJaW50CW1heGNsaWNrKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaGFzX21vdXNlCitpbnQJX25jX2hhc19tb3VzZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3bW91c2VfdHJhZm8KK05DVVJTRVNfQk9PTCB3bW91c2VfdHJhZm8oCisJCWNvbnN0IFdJTkRPVyAqd2luLCAKKwkJaW50CSpwWSwgCisJCWludAkqcFgsIAorCQlOQ1VSU0VTX0JPT0wgdG9fc2NyZWVuKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbW92ZS5jICovCisKKyN1bmRlZiB3bW92ZQoraW50CXdtb3ZlKAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90dHkvbGliX212Y3VyLmMgKi8KKworI3VuZGVmIF9uY19tc2VjX2Nvc3QKK2ludAlfbmNfbXNlY19jb3N0KAorCQljb25zdCBjaGFyICpjb25zdCBjYXAsIAorCQlpbnQJYWZmY250KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfbXZjdXJfcmVzdW1lCit2b2lkCV9uY19tdmN1cl9yZXN1bWUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tdmN1cl9pbml0Cit2b2lkCV9uY19tdmN1cl9pbml0KHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbXZjdXJfd3JhcAordm9pZAlfbmNfbXZjdXJfd3JhcCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbXZjdXIKK2ludAltdmN1cigKKwkJaW50CXlvbGQsIAorCQlpbnQJeG9sZCwgCisJCWludAl5bmV3LCAKKwkJaW50CXhuZXcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19vcHRpbWl6ZV9lbmFibGUKK2ludAlfbmNfb3B0aW1pemVfZW5hYmxlOworCisvKiAuL2Jhc2UvbGliX212d2luLmMgKi8KKworI3VuZGVmIG12d2luCitpbnQJbXZ3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWJ5LCAKKwkJaW50CWJ4KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbmV3dGVybS5jICovCisKKyN1bmRlZiBmaWx0ZXIKK3ZvaWQJZmlsdGVyKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBub2ZpbHRlcgordm9pZAlub2ZpbHRlcih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbmV3dGVybQorU0NSRUVOCSpuZXd0ZXJtKAorCQljaGFyCSpuYW1lLCAKKwkJRklMRQkqb2ZwLCAKKwkJRklMRQkqaWZwKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX25ld3dpbi5jICovCisKKyN1bmRlZiBfbmNfZnJlZXdpbgoraW50CV9uY19mcmVld2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbmV3d2luCitXSU5ET1cJKm5ld3dpbigKKwkJaW50CW51bV9saW5lcywgCisJCWludAludW1fY29sdW1ucywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBkZXJ3aW4KK1dJTkRPVwkqZGVyd2luKAorCQlXSU5ET1cJKm9yaWcsIAorCQlpbnQJbnVtX2xpbmVzLCAKKwkJaW50CW51bV9jb2x1bW5zLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHN1YndpbgorV0lORE9XCSpzdWJ3aW4oCisJCVdJTkRPVwkqdywgCisJCWludAlsLCAKKwkJaW50CWMsIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX21ha2VuZXcKK1dJTkRPVwkqX25jX21ha2VuZXcoCisJCWludAludW1fbGluZXMsIAorCQlpbnQJbnVtX2NvbHVtbnMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4LCAKKwkJaW50CWZsYWdzKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX3NjcmVlbl9vZgorU0NSRUVOCSpfbmNfc2NyZWVuX29mKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihTQ1JFRU4gKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9ubC5jICovCisKKyN1bmRlZiBubAoraW50CW5sKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vbmwKK2ludAlub25sKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9vdmVybGF5LmMgKi8KKworI3VuZGVmIG92ZXJsYXkKK2ludAlvdmVybGF5KAorCQljb25zdCBXSU5ET1cgKndpbjEsIAorCQlXSU5ET1cJKndpbjIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG92ZXJ3cml0ZQoraW50CW92ZXJ3cml0ZSgKKwkJY29uc3QgV0lORE9XICp3aW4xLCAKKwkJV0lORE9XCSp3aW4yKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjb3B5d2luCitpbnQJY29weXdpbigKKwkJY29uc3QgV0lORE9XICpzcmMsIAorCQlXSU5ET1cJKmRzdCwgCisJCWludAlzbWlucm93LCAKKwkJaW50CXNtaW5jb2wsIAorCQlpbnQJZG1pbnJvdywgCisJCWludAlkbWluY29sLCAKKwkJaW50CWRtYXhyb3csIAorCQlpbnQJZG1heGNvbCwgCisJCWludAlvdmVyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcGFkLmMgKi8KKworI3VuZGVmIG5ld3BhZAorV0lORE9XCSpuZXdwYWQoCisJCWludAlsLCAKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBzdWJwYWQKK1dJTkRPVwkqc3VicGFkKAorCQlXSU5ET1cJKm9yaWcsIAorCQlpbnQJbCwgCisJCWludAljLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHByZWZyZXNoCitpbnQJcHJlZnJlc2goCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXBtaW5yb3csIAorCQlpbnQJcG1pbmNvbCwgCisJCWludAlzbWlucm93LCAKKwkJaW50CXNtaW5jb2wsIAorCQlpbnQJc21heHJvdywgCisJCWludAlzbWF4Y29sKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwbm91dHJlZnJlc2gKK2ludAlwbm91dHJlZnJlc2goCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXBtaW5yb3csIAorCQlpbnQJcG1pbmNvbCwgCisJCWludAlzbWlucm93LCAKKwkJaW50CXNtaW5jb2wsIAorCQlpbnQJc21heHJvdywgCisJCWludAlzbWF4Y29sKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwZWNob2NoYXIKK2ludAlwZWNob2NoYXIoCisJCVdJTkRPVwkqcGFkLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcHJpbnR3LmMgKi8KKworI3VuZGVmIHByaW50dworaW50CXByaW50dygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3cHJpbnR3CitpbnQJd3ByaW50dygKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12cHJpbnR3CitpbnQJbXZwcmludHcoCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3ByaW50dworaW50CW12d3ByaW50dygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2d3ByaW50dworaW50CXZ3cHJpbnR3KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCXZhX2xpc3QJYXJncCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3JlZHJhd2xuLmMgKi8KKworI3VuZGVmIHdyZWRyYXdsbgoraW50CXdyZWRyYXdsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJYmVnLCAKKwkJaW50CW51bSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3JlZnJlc2guYyAqLworCisjdW5kZWYgd3JlZnJlc2gKK2ludAl3cmVmcmVzaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdub3V0cmVmcmVzaAoraW50CXdub3V0cmVmcmVzaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9yZXN0YXJ0LmMgKi8KKworI3VuZGVmIHJlc3RhcnR0ZXJtCitpbnQJcmVzdGFydHRlcm0oCisJCWNoYXIJKnRlcm1wLCAKKwkJaW50CWZpbGVudW0sIAorCQlpbnQJKmVycnJldCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjYW53LmMgKi8KKworI3VuZGVmIHZ3c2NhbncKK2ludAl2d3NjYW53KAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKmZtdCwgCisJCXZhX2xpc3QJYXJncCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NhbncKK2ludAlzY2FudygKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c2NhbncKK2ludAl3c2NhbncoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnNjYW53CitpbnQJbXZzY2FudygKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3c2NhbncKK2ludAltdndzY2FudygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2NyZWVuLmMgKi8KKworI3VuZGVmIGdldHdpbgorV0lORE9XCSpnZXR3aW4oCisJCUZJTEUJKmZpbGVwKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgcHV0d2luCitpbnQJcHV0d2luKAorCQlXSU5ET1cJKndpbiwgCisJCUZJTEUJKmZpbGVwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JfcmVzdG9yZQoraW50CXNjcl9yZXN0b3JlKAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JfZHVtcAoraW50CXNjcl9kdW1wKAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JfaW5pdAoraW50CXNjcl9pbml0KAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3Jfc2V0CitpbnQJc2NyX3NldCgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Njcm9sbC5jICovCisKKyN1bmRlZiBfbmNfc2Nyb2xsX3dpbmRvdwordm9pZAlfbmNfc2Nyb2xsX3dpbmRvdygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQgY29uc3QgbiwgCisJCWludCBjb25zdCB0b3AsIAorCQlpbnQgY29uc3QgYm90dG9tLCAKKwkJY2h0eXBlCWJsYW5rKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd3NjcmwKK2ludAl3c2NybCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Njcm9sbG9rLmMgKi8KKworI3VuZGVmIHNjcm9sbG9rCitpbnQJc2Nyb2xsb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JyZWcuYyAqLworCisjdW5kZWYgd3NldHNjcnJlZworaW50CXdzZXRzY3JyZWcoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXRvcCwgCisJCWludAlib3R0b20pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zZXRfdGVybS5jICovCisKKyN1bmRlZiBzZXRfdGVybQorU0NSRUVOCSpzZXRfdGVybSgKKwkJU0NSRUVOCSpzY3JlZW5wKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisjdW5kZWYgZGVsc2NyZWVuCit2b2lkCWRlbHNjcmVlbigKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zZXR1cHNjcmVlbgoraW50CV9uY19zZXR1cHNjcmVlbigKKwkJaW50CXNsaW5lcywgCisJCWludAlzY29sdW1ucywgCisJCUZJTEUJKm91dHB1dCwgCisJCU5DVVJTRVNfQk9PTCBmaWx0ZXJlZCwgCisJCWludAlzbGtfZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmlwb2ZmbGluZQoraW50CV9uY19yaXBvZmZsaW5lKAorCQlpbnQJbGluZSwgCisJCWludAkoKmluaXQpKAorCQlXSU5ET1cJKnAxLCAKKwkJaW50CXAyKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmlwb2ZmbGluZQoraW50CXJpcG9mZmxpbmUoCisJCWludAlsaW5lLCAKKwkJaW50CSgqaW5pdCkoCisJCVdJTkRPVwkqcDEsIAorCQlpbnQJcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrLmMgKi8KKworI3VuZGVmIF9uY19zbGtfaW5pdGlhbGl6ZQoraW50CV9uY19zbGtfaW5pdGlhbGl6ZSgKKwkJV0lORE9XCSpzdHdpbiwgCisJCWludAljb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfcmVzdG9yZQoraW50CXNsa19yZXN0b3JlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGthdHJfc2V0LmMgKi8KKworI3VuZGVmIHNsa19hdHRyX3NldAoraW50CXNsa19hdHRyX3NldCgKKwkJY29uc3QgYXR0cl90IGF0dHIsIAorCQlzaG9ydAljb2xvcl9wYWlyX251bWJlciwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGthdHJvZi5jICovCisKKyN1bmRlZiBzbGtfYXR0cm9mZgoraW50CXNsa19hdHRyb2ZmKAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cm9uLmMgKi8KKworI3VuZGVmIHNsa19hdHRyb24KK2ludAlzbGtfYXR0cm9uKAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cnNldC5jICovCisKKyN1bmRlZiBzbGtfYXR0cnNldAoraW50CXNsa19hdHRyc2V0KAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0dHIuYyAqLworCisjdW5kZWYgc2xrX2F0dHIKK2F0dHJfdAlzbGtfYXR0cih2b2lkKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrY2xlYXIuYyAqLworCisjdW5kZWYgc2xrX2NsZWFyCitpbnQJc2xrX2NsZWFyKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtjb2xvci5jICovCisKKyN1bmRlZiBzbGtfY29sb3IKK2ludAlzbGtfY29sb3IoCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xraW5pdC5jICovCisKKyN1bmRlZiBzbGtfaW5pdAoraW50CXNsa19pbml0KAorCQlpbnQJZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrbGFiLmMgKi8KKworI3VuZGVmIHNsa19sYWJlbAorY2hhcgkqc2xrX2xhYmVsKAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrcmVmci5jICovCisKKyN1bmRlZiBzbGtfbm91dHJlZnJlc2gKK2ludAlzbGtfbm91dHJlZnJlc2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2xrX3JlZnJlc2gKK2ludAlzbGtfcmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrc2V0LmMgKi8KKworI3VuZGVmIHNsa19zZXQKK2ludAlzbGtfc2V0KAorCQlpbnQJaSwgCisJCWNvbnN0IGNoYXIgKmFzdHIsIAorCQlpbnQJZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrdG91Y2guYyAqLworCisjdW5kZWYgc2xrX3RvdWNoCitpbnQJc2xrX3RvdWNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl90b3VjaC5jICovCisKKyN1bmRlZiBpc19saW5ldG91Y2hlZAorTkNVUlNFU19CT09MIGlzX2xpbmV0b3VjaGVkKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlsaW5lKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc193aW50b3VjaGVkCitOQ1VSU0VTX0JPT0wgaXNfd2ludG91Y2hlZCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHd0b3VjaGxuCitpbnQJd3RvdWNobG4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJbiwgCisJCWludAljaGFuZ2VkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlZG1wLmMgKi8KKworI3VuZGVmIF90cmFjZWR1bXAKK3ZvaWQJX3RyYWNlZHVtcCgKKwkJY29uc3QgY2hhciAqbmFtZSwgCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZW1zZS5jICovCisKKyN1bmRlZiBfbmNfdHJhY2Vtb3VzZQorY2hhcgkqX25jX3RyYWNlbW91c2UoCisJCVNDUkVFTgkqc3AsIAorCQlNRVZFTlQgY29uc3QgKmVwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZW1vdXNlCitjaGFyCSpfdHJhY2Vtb3VzZSgKKwkJTUVWRU5UIGNvbnN0ICplcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHR5L2xpYl90c3RwLmMgKi8KKworI2luY2x1ZGUgPFNpZ0FjdGlvbi5oPgorCisjdW5kZWYgX25jX3NpZ25hbF9oYW5kbGVyCit2b2lkCV9uY19zaWduYWxfaGFuZGxlcigKKwkJTkNVUlNFU19CT09MIGVuYWJsZSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl91bmdldGNoLmMgKi8KKworI3VuZGVmIF9uY19maWZvX2R1bXAKK3ZvaWQJX25jX2ZpZm9fZHVtcCgKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY191bmdldGNoCitpbnQJX25jX3VuZ2V0Y2goCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVuZ2V0Y2gKK2ludAl1bmdldGNoKAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90dHkvbGliX3ZpZGF0dHIuYyAqLworCisjdW5kZWYgdmlkcHV0cworaW50CXZpZHB1dHMoCisJCWNodHlwZQluZXdtb2RlLCAKKwkJaW50CSgqb3V0YykoCisJCWludAlwMSkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZpZGF0dHIKK2ludAl2aWRhdHRyKAorCQljaHR5cGUJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGVybWF0dHJzCitjaHR5cGUJdGVybWF0dHJzKHZvaWQpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi9iYXNlL2xpYl92bGluZS5jICovCisKKyN1bmRlZiB3dmxpbmUKK2ludAl3dmxpbmUoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93YXR0cm9mZi5jICovCisKKyN1bmRlZiB3YXR0cl9vZmYKK2ludAl3YXR0cl9vZmYoCisJCVdJTkRPVwkqd2luLCAKKwkJYXR0cl90CWF0LCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dhdHRyb24uYyAqLworCisjdW5kZWYgd2F0dHJfb24KK2ludAl3YXR0cl9vbigKKwkJV0lORE9XCSp3aW4sIAorCQlhdHRyX3QJYXQsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2luY2guYyAqLworCisjdW5kZWYgd2luY2gKK2NodHlwZQl3aW5jaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93aW5kb3cuYyAqLworCisjdW5kZWYgX25jX3N5bmNob29rCit2b2lkCV9uY19zeW5jaG9vaygKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBtdmRlcndpbgoraW50CW12ZGVyd2luKAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHN5bmNvaworaW50CXN5bmNvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgYmYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzeW5jdXAKK3ZvaWQJd3N5bmN1cCgKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3c3luY2Rvd24KK3ZvaWQJd3N5bmNkb3duKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHdjdXJzeW5jdXAKK3ZvaWQJd2N1cnN5bmN1cCgKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBkdXB3aW4KK1dJTkRPVwkqZHVwd2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9iYXNlL25jX3BhbmVsLmMgKi8KKworI3VuZGVmIF9uY19wYW5lbGhvb2sKK3N0cnVjdCBwYW5lbGhvb2sgKl9uY19wYW5lbGhvb2sodm9pZCkKKwkJeyByZXR1cm4oKihzdHJ1Y3QgcGFuZWxob29rICoqKTApOyB9CisKKy8qIC4vYmFzZS9zYWZlX3NwcmludGYuYyAqLworCisjdW5kZWYgX25jX3ByaW50Zl9zdHJpbmcKK2NoYXIJKl9uY19wcmludGZfc3RyaW5nKAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90dHkvdHR5X3VwZGF0ZS5jICovCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorCisjdW5kZWYgZG91cGRhdGUKK2ludAlkb3VwZGF0ZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2Nyb2xsbgoraW50CV9uY19zY3JvbGxuKAorCQlpbnQJbiwgCisJCWludAl0b3AsIAorCQlpbnQJYm90LCAKKwkJaW50CW1heHkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zY3JlZW5fcmVzdW1lCit2b2lkCV9uY19zY3JlZW5fcmVzdW1lKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX2luaXQKK3ZvaWQJX25jX3NjcmVlbl9pbml0KHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX3dyYXAKK3ZvaWQJX25jX3NjcmVlbl93cmFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZG9feG1jX2dsaXRjaAordm9pZAlfbmNfZG9feG1jX2dsaXRjaCgKKwkJYXR0cl90CXByZXZpb3VzKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RyYWNlL3ZhcmFyZ3MuYyAqLworCit0eXBlZGVmIGVudW0geworICAgIGF0VW5rbm93biA9IDAsIGF0SW50ZWdlciwgYXRGbG9hdCwgYXRQb2ludCwgYXRTdHJpbmcKK30gQVJHVFlQRTsKKworI3VuZGVmIF9uY192YXJhcmdzCitjaGFyCSpfbmNfdmFyYXJncygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJdmFfbGlzdAlhcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9tZW1tb3ZlLmMgKi8KKworI3VuZGVmIF9uY19tZW1tb3ZlCit2b2lkCV9uY19tZW1tb3ZlKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS92c3NjYW5mLmMgKi8KKworI3VuZGVmIF9uY192c3NjYW5mCit2b2lkCV9uY192c3NjYW5mKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfZnJlZWFsbC5jICovCisKKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKKyN1bmRlZiBfbmNfZnJlZWFsbAordm9pZAlfbmNfZnJlZWFsbCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2ZyZWVfYW5kX2V4aXQKK3ZvaWQJX25jX2ZyZWVfYW5kX2V4aXQoCisJCWludAljb2RlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2V4cGFuZGVkLmMgKi8KKworI3VuZGVmIF9uY190b2dnbGVfYXR0cl9vbgordm9pZAlfbmNfdG9nZ2xlX2F0dHJfb24oCisJCWF0dHJfdAkqUywgCisJCWF0dHJfdAlhdCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY190b2dnbGVfYXR0cl9vZmYKK3ZvaWQJX25jX3RvZ2dsZV9hdHRyX29mZigKKwkJYXR0cl90CSpTLCAKKwkJYXR0cl90CWF0KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0RlbENoYXJDb3N0CitpbnQJX25jX0RlbENoYXJDb3N0KAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19JbnNDaGFyQ29zdAoraW50CV9uY19JbnNDaGFyQ29zdCgKKwkJaW50CWNvdW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfVXBkYXRlQXR0cnMKK3ZvaWQJX25jX1VwZGF0ZUF0dHJzKAorCQljaHR5cGUJYykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xlZ2FjeV9jb2RpbmcuYyAqLworCisjdW5kZWYgdXNlX2xlZ2FjeV9jb2RpbmcKK2ludAl1c2VfbGVnYWN5X2NvZGluZygKKwkJaW50CWxldmVsKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZGZ0X2ZnYmcuYyAqLworCisjdW5kZWYgdXNlX2RlZmF1bHRfY29sb3JzCitpbnQJdXNlX2RlZmF1bHRfY29sb3JzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFzc3VtZV9kZWZhdWx0X2NvbG9ycworaW50CWFzc3VtZV9kZWZhdWx0X2NvbG9ycygKKwkJaW50CWZnLCAKKwkJaW50CWJnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3ByaW50LmMgKi8KKworI3VuZGVmIG1jcHJpbnQKK2ludAltY3ByaW50KAorCQljaGFyCSpkYXRhLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvcmVzaXpldGVybS5jICovCisKKyN1bmRlZiBpc190ZXJtX3Jlc2l6ZWQKK05DVVJTRVNfQk9PTCBpc190ZXJtX3Jlc2l6ZWQoCisJCWludAlUb0xpbmVzLCAKKwkJaW50CVRvQ29scykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgcmVzaXplX3Rlcm0KK2ludAlyZXNpemVfdGVybSgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNpemV0ZXJtCitpbnQJcmVzaXpldGVybSgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvdHJhY2VfeG5hbWVzLmMgKi8KKworI3VuZGVmIF9uY190cmFjZV94bmFtZXMKK3ZvaWQJX25jX3RyYWNlX3huYW1lcygKKwkJVEVSTVRZUEUgKnRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL3VzZV9zY3JlZW4uYyAqLworCisjdW5kZWYgdXNlX3NjcmVlbgoraW50CXVzZV9zY3JlZW4oCisJCVNDUkVFTgkqc2NyZWVuLCAKKwkJTkNVUlNFU19TQ1JFRU5fQ0IgZnVuYywgCisJCXZvaWQJKmRhdGEpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3VzZV93aW5kb3cuYyAqLworCisjdW5kZWYgdXNlX3dpbmRvdworaW50CXVzZV93aW5kb3coCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19XSU5ET1dfQ0IgZnVuYywgCisJCXZvaWQJKmRhdGEpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3dyZXNpemUuYyAqLworCisjdW5kZWYgd3Jlc2l6ZQoraW50CXdyZXNpemUoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vYWNjZXNzLmMgKi8KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8bmNfYWxsb2MuaD4KKworI3VuZGVmIF9uY19yb290bmFtZQorY2hhcgkqX25jX3Jvb3RuYW1lKAorCQljaGFyCSpwYXRoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19pc19hYnNfcGF0aAorTkNVUlNFU19CT09MIF9uY19pc19hYnNfcGF0aCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3BhdGhsYXN0Cit1bnNpZ25lZCBfbmNfcGF0aGxhc3QoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCoodW5zaWduZWQgKikwKTsgfQorCisjdW5kZWYgX25jX2Jhc2VuYW1lCitjaGFyCSpfbmNfYmFzZW5hbWUoCisJCWNoYXIJKnBhdGgpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2FjY2VzcworaW50CV9uY19hY2Nlc3MoCisJCWNvbnN0IGNoYXIgKnBhdGgsIAorCQlpbnQJbW9kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2lzX2Rpcl9wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2Rpcl9wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaXNfZmlsZV9wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2ZpbGVfcGF0aCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX2Vudl9hY2Nlc3MKK2ludAlfbmNfZW52X2FjY2Vzcyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vYWRkX3RyaWVzLmMgKi8KKworI3VuZGVmIF9uY19hZGRfdG9fdHJ5CitpbnQJX25jX2FkZF90b190cnkoCisJCVRSSUVTCSoqdHJlZSwgCisJCWNvbnN0IGNoYXIgKnN0ciwgCisJCXVuc2lnbmVkIGNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hbGxvY190dHlwZS5jICovCisKKyN1bmRlZiBfbmNfYWxpZ25fdGVybXR5cGUKK3ZvaWQJX25jX2FsaWduX3Rlcm10eXBlKAorCQlURVJNVFlQRSAqdG8sIAorCQlURVJNVFlQRSAqZnJvbSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19jb3B5X3Rlcm10eXBlCit2b2lkCV9uY19jb3B5X3Rlcm10eXBlKAorCQlURVJNVFlQRSAqZHN0LCAKKwkJVEVSTVRZUEUgKnNyYykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9jb2Rlcy5jICovCisKKyN1bmRlZiBfbmNfYm9vbGNvZGVzCitjaGFyCSpjb25zdCAqX25jX2Jvb2xjb2Rlcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19udW1jb2RlcworY2hhcgkqY29uc3QgKl9uY19udW1jb2Rlcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJjb2RlcworY2hhcgkqY29uc3QgKl9uY19zdHJjb2Rlcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX2Vycm9yLmMgKi8KKworI3VuZGVmIF9uY19zdXBwcmVzc193YXJuaW5ncworTkNVUlNFU19CT09MIF9uY19zdXBwcmVzc193YXJuaW5nczsKKyN1bmRlZiBfbmNfY3Vycl9saW5lCitpbnQJX25jX2N1cnJfbGluZTsKKyN1bmRlZiBfbmNfY3Vycl9jb2wKK2ludAlfbmNfY3Vycl9jb2w7CisKKyN1bmRlZiBfbmNfZ2V0X3NvdXJjZQorY29uc3QgY2hhciAqX25jX2dldF9zb3VyY2Uodm9pZCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2V0X3NvdXJjZQordm9pZAlfbmNfc2V0X3NvdXJjZSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zZXRfdHlwZQordm9pZAlfbmNfc2V0X3R5cGUoCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3R5cGUKK3ZvaWQJX25jX2dldF90eXBlKAorCQljaGFyCSpuYW1lKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3dhcm5pbmcKK3ZvaWQJX25jX3dhcm5pbmcoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19lcnJfYWJvcnQKK3ZvaWQJX25jX2Vycl9hYm9ydCgKKwkJY29uc3QgY2hhciAqY29uc3QgZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3N5c2Vycl9hYm9ydAordm9pZAlfbmNfc3lzZXJyX2Fib3J0KAorCQljb25zdCBjaGFyICpjb25zdCBmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vZGJfaXRlcmF0b3IuYyAqLworCisjdW5kZWYgX25jX3RpY19kaXIKK2NvbnN0IGNoYXIgKl9uY190aWNfZGlyKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19rZWVwX3RpY19kaXIKK3ZvaWQJX25jX2tlZXBfdGljX2RpcigKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19sYXN0X2RiCit2b2lkCV9uY19sYXN0X2RiKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbmV4dF9kYgorY29uc3QgY2hhciAqX25jX25leHRfZGIoCisJCURCRElSUwkqc3RhdGUsIAorCQlpbnQJKm9mZnNldCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZmlyc3RfZGIKK3ZvaWQJX25jX2ZpcnN0X2RiKAorCQlEQkRJUlMJKnN0YXRlLCAKKwkJaW50CSpvZmZzZXQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vZG9hbGxvYy5jICovCisKKyN1bmRlZiBfbmNfZG9hbGxvYwordm9pZAkqX25jX2RvYWxsb2MoCisJCXZvaWQJKm9sZHAsIAorCQlzaXplX3QJYW1vdW50KQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi90aW5mby9lbnRyaWVzLmMgKi8KKworI3VuZGVmIF9uY19oZWFkCitFTlRSWQkqX25jX2hlYWQ7CisjdW5kZWYgX25jX3RhaWwKK0VOVFJZCSpfbmNfdGFpbDsKKworI3VuZGVmIF9uY19mcmVlX2VudHJ5Cit2b2lkCV9uY19mcmVlX2VudHJ5KAorCQlFTlRSWQkqaGVhZHAsIAorCQlURVJNVFlQRSAqdHRlcm0pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZnJlZV9lbnRyaWVzCit2b2lkCV9uY19mcmVlX2VudHJpZXMoCisJCUVOVFJZCSpoZWFkcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kZWxpbmtfZW50cnkKK0VOVFJZCSpfbmNfZGVsaW5rX2VudHJ5KAorCQlFTlRSWQkqaGVhZHAsIAorCQlURVJNVFlQRSAqdHRlcm0pCisJCXsgcmV0dXJuKCooRU5UUlkgKiopMCk7IH0KKworI3VuZGVmIF9uY19sZWFrc190aW5mbwordm9pZAlfbmNfbGVha3NfdGluZm8odm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9mYWxsYmFjay5jICovCisKKyN1bmRlZiBfbmNfZmFsbGJhY2sKK2NvbnN0IFRFUk1UWVBFICpfbmNfZmFsbGJhY2soCisJCWNvbnN0IGNoYXIgKm5hbWUpCisJCXsgcmV0dXJuKCooY29uc3QgVEVSTVRZUEUgKiopMCk7IH0KKworLyogLi90aW5mby9mcmVlX3R0eXBlLmMgKi8KKworI3VuZGVmIF9uY19mcmVlX3Rlcm10eXBlCit2b2lkCV9uY19mcmVlX3Rlcm10eXBlKAorCQlURVJNVFlQRSAqcHRyKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VzZXJfZGVmaW5hYmxlCitOQ1VSU0VTX0JPT0wgX25jX3VzZXJfZGVmaW5hYmxlOworCisjdW5kZWYgdXNlX2V4dGVuZGVkX25hbWVzCitpbnQJdXNlX2V4dGVuZGVkX25hbWVzKAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2dldGVudl9udW0uYyAqLworCisjdW5kZWYgX25jX2dldGVudl9udW0KK2ludAlfbmNfZ2V0ZW52X251bSgKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2hvbWVfdGVybWluZm8uYyAqLworCisjdW5kZWYgX25jX2hvbWVfdGVybWluZm8KK2NoYXIJKl9uY19ob21lX3Rlcm1pbmZvKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2luaXRfa2V5dHJ5LmMgKi8KKworI2lmIDAKKworI2luY2x1ZGUgPGluaXRfa2V5dHJ5Lmg+CisKKyN1bmRlZiBfbmNfdGluZm9fZmtleXMKK2NvbnN0IHN0cnVjdCB0aW5mb19ma2V5cyBfbmNfdGluZm9fZmtleXNbXSA9IHswfTsKKworI2VuZGlmCisKKyN1bmRlZiBfbmNfaW5pdF9rZXl0cnkKK3ZvaWQJX25jX2luaXRfa2V5dHJ5KAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2xpYl9hY3MuYyAqLworCisjdW5kZWYgX25jX2Fjc19tYXAKK2NodHlwZQkqX25jX2Fjc19tYXAodm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKiopMCk7IH0KKworI3VuZGVmIF9uY19pbml0X2Fjcwordm9pZAlfbmNfaW5pdF9hY3Modm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9saWJfYmF1ZHJhdGUuYyAqLworCisjaW5jbHVkZSA8dGVybWNhcC5oPgorCitzdHJ1Y3Qgc3BlZWQgeworICAgIGludCBzOyAKKyAgICBpbnQgc3A7IAorfTsKKworI3VuZGVmIF9uY19iYXVkcmF0ZQoraW50CV9uY19iYXVkcmF0ZSgKKwkJaW50CU9TcGVlZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX29zcGVlZAoraW50CV9uY19vc3BlZWQoCisJCWludAlCYXVkUmF0ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYmF1ZHJhdGUKK2ludAliYXVkcmF0ZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2N1cl90ZXJtLmMgKi8KKworI3VuZGVmIF9uY19jdXJfdGVybQorVEVSTUlOQUwgKl9uY19jdXJfdGVybSh2b2lkKQorCQl7IHJldHVybigqKFRFUk1JTkFMICoqKTApOyB9CisKKyN1bmRlZiBzZXRfY3VydGVybQorVEVSTUlOQUwgKnNldF9jdXJ0ZXJtKAorCQlURVJNSU5BTCAqdGVybXApCisJCXsgcmV0dXJuKCooVEVSTUlOQUwgKiopMCk7IH0KKworI3VuZGVmIGRlbF9jdXJ0ZXJtCitpbnQJZGVsX2N1cnRlcm0oCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9kYXRhLmMgKi8KKworI3VuZGVmIF9uY19zdGRzY3IKK1dJTkRPVwkqX25jX3N0ZHNjcih2b2lkKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX2N1cnNjcgorV0lORE9XCSpfbmNfY3Vyc2NyKHZvaWQpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbmV3c2NyCitXSU5ET1cJKl9uY19uZXdzY3Iodm9pZCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIF9uY19zY3JlZW5fY2hhaW4KK1NDUkVFTgkqX25jX3NjcmVlbl9jaGFpbjsKKyN1bmRlZiBTUAorU0NSRUVOCSpTUDsKKyN1bmRlZiBfbmNfZ2xvYmFscworTkNVUlNFU19HTE9CQUxTIF9uY19nbG9iYWxzOworI3VuZGVmIF9uY19wcmVzY3JlZW4KK05DVVJTRVNfUFJFU0NSRUVOIF9uY19wcmVzY3JlZW47CisKKyN1bmRlZiBfbmNfaW5pdF9wdGhyZWFkcwordm9pZAlfbmNfaW5pdF9wdGhyZWFkcyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX211dGV4X2luaXQKK3ZvaWQJX25jX211dGV4X2luaXQoCisJCXB0aHJlYWRfbXV0ZXhfdCAqb2JqKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX211dGV4X2xvY2sKK2ludAlfbmNfbXV0ZXhfbG9jaygKKwkJcHRocmVhZF9tdXRleF90ICpvYmopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19tdXRleF90cnlsb2NrCitpbnQJX25jX211dGV4X3RyeWxvY2soCisJCXB0aHJlYWRfbXV0ZXhfdCAqb2JqKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfbXV0ZXhfdW5sb2NrCitpbnQJX25jX211dGV4X3VubG9jaygKKwkJcHRocmVhZF9tdXRleF90ICpvYmopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfaGFzX2NhcC5jICovCisKKyN1bmRlZiBoYXNfaWMKK05DVVJTRVNfQk9PTCBoYXNfaWModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaGFzX2lsCitOQ1VSU0VTX0JPT0wgaGFzX2lsKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi90aW5mby9saWJfa2VybmVsLmMgKi8KKworI3VuZGVmIGVyYXNlY2hhcgorY2hhcgllcmFzZWNoYXIodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICopMCk7IH0KKworI3VuZGVmIGtpbGxjaGFyCitjaGFyCWtpbGxjaGFyKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKTApOyB9CisKKyN1bmRlZiBmbHVzaGlucAoraW50CWZsdXNoaW5wKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9saWJfa2V5bmFtZS5jICovCisKK3N0cnVjdCBrbiB7IHNob3J0IG9mZnNldDsgaW50IGNvZGU7IH07CisKKyN1bmRlZiBfbmNfa2V5bmFtZQorY2hhcgkqX25jX2tleW5hbWUoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBrZXluYW1lCitjaGFyCSprZXluYW1lKAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2xvbmduYW1lLmMgKi8KKworI3VuZGVmIGxvbmduYW1lCitjaGFyCSpsb25nbmFtZSh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfbmFwbXMuYyAqLworCisjdW5kZWYgbmFwbXMKK2ludAluYXBtcygKKwkJaW50CW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX29wdGlvbnMuYyAqLworCisjdW5kZWYgaWRsb2sKK2ludAlpZGxvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaWRjb2sKK3ZvaWQJaWRjb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBoYWxmZGVsYXkKK2ludAloYWxmZGVsYXkoCisJCWludAl0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2RlbGF5CitpbnQJbm9kZWxheSgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm90aW1lb3V0CitpbnQJbm90aW1lb3V0KAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3dGltZW91dAordm9pZAl3dGltZW91dCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJZGVsYXkpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBrZXlwYWQKK2ludAlrZXlwYWQoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1ldGEKK2ludAltZXRhKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjdXJzX3NldAoraW50CWN1cnNfc2V0KAorCQlpbnQJdmlzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0eXBlYWhlYWQKK2ludAl0eXBlYWhlYWQoCisJCWludAlmZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaGFzX2tleQoraW50CWhhc19rZXkoCisJCWludAlrZXljb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfa2V5cGFkCitpbnQJX25jX2tleXBhZCgKKwkJU0NSRUVOCSpzcCwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Jhdy5jICovCisKKyN1bmRlZiByYXcKK2ludAlyYXcodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2JyZWFrCitpbnQJY2JyZWFrKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHFpZmx1c2gKK3ZvaWQJcWlmbHVzaCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbm9yYXcKK2ludAlub3Jhdyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2NicmVhaworaW50CW5vY2JyZWFrKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vcWlmbHVzaAordm9pZAlub3FpZmx1c2godm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGludHJmbHVzaAoraW50CWludHJmbHVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9zZXR1cC5jICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsYW5naW5mby5oPgorCisjdW5kZWYgX25jX3R0eXR5cGUKK2NoYXIJKl9uY190dHl0eXBlKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3B0cl9MaW5lcworaW50CSpfbmNfcHRyX0xpbmVzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfTElORVMKK2ludAlfbmNfTElORVModm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3B0cl9Db2xzCitpbnQJKl9uY19wdHJfQ29scyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKikwKTsgfQorCisjdW5kZWYgX25jX0NPTFMKK2ludAlfbmNfQ09MUyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfVEFCU0laRQoraW50CV9uY19UQUJTSVpFKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF90YWJzaXplCitpbnQJc2V0X3RhYnNpemUoCisJCWludAl2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2hhbmRsZV9zaWd3aW5jaAoraW50CV9uY19oYW5kbGVfc2lnd2luY2goCisJCVNDUkVFTgkqc3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVzZV9lbnYKK3ZvaWQJdXNlX2VudigKKwkJTkNVUlNFU19CT09MIGYpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3NjcmVlbnNpemUKK3ZvaWQJX25jX2dldF9zY3JlZW5zaXplKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CSpsaW5lcCwgCisJCWludAkqY29scCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY191cGRhdGVfc2NyZWVuc2l6ZQordm9pZAlfbmNfdXBkYXRlX3NjcmVlbnNpemUoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X2xvY2FsZQorY2hhcgkqX25jX2dldF9sb2NhbGUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdW5pY29kZV9sb2NhbGUKK2ludAlfbmNfdW5pY29kZV9sb2NhbGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2xvY2FsZV9icmVha3NfYWNzCitpbnQJX25jX2xvY2FsZV9icmVha3NfYWNzKAorCQlURVJNSU5BTCAqdGVybXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zZXR1cHRlcm0KK2ludAlfbmNfc2V0dXB0ZXJtKAorCQljaGFyCSp0bmFtZSwgCisJCWludAlGaWxlZGVzLCAKKwkJaW50CSplcnJyZXQsIAorCQlOQ1VSU0VTX0JPT0wgcmV1c2UpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldHVwdGVybQoraW50CXNldHVwdGVybSgKKwkJY2hhcgkqdG5hbWUsIAorCQlpbnQJRmlsZWRlcywgCisJCWludAkqZXJycmV0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Rlcm1jYXAuYyAqLworCisjdW5kZWYgVVAKK2NoYXIJKlVQOworI3VuZGVmIEJDCitjaGFyCSpCQzsKKworI3VuZGVmIHRnZXRlbnQKK2ludAl0Z2V0ZW50KAorCQljaGFyCSpidWZwLCAKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjaWYgMAorCisjaW5jbHVkZSA8Y2FwZGVmYXVsdHMuYz4KKworI2VuZGlmCisKKyN1bmRlZiB0Z2V0ZmxhZworaW50CXRnZXRmbGFnKAorCQljaGFyCSppZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGdldG51bQoraW50CXRnZXRudW0oCisJCWNoYXIJKmlkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0Z2V0c3RyCitjaGFyCSp0Z2V0c3RyKAorCQljaGFyCSppZCwgCisJCWNoYXIJKiphcmVhKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdGVybW5hbWUuYyAqLworCisjdW5kZWYgdGVybW5hbWUKK2NoYXIJKnRlcm1uYW1lKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90Z290by5jICovCisKKyN1bmRlZiB0Z290bworY2hhcgkqdGdvdG8oCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWludAl4LCAKKwkJaW50CXkpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90aS5jICovCisKKyN1bmRlZiB0aWdldGZsYWcKK2ludAl0aWdldGZsYWcoCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGlnZXRudW0KK2ludAl0aWdldG51bSgKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aWdldHN0cgorY2hhcgkqdGlnZXRzdHIoCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RwYXJtLmMgKi8KKworI3VuZGVmIF9uY190cGFybV9lcnIKK2ludAlfbmNfdHBhcm1fZXJyOworCisjdW5kZWYgX25jX3RwYXJtX2FuYWx5emUKK2ludAlfbmNfdHBhcm1fYW5hbHl6ZSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJY2hhcgkqcF9pc19zWzldLCAKKwkJaW50CSpwb3Bjb3VudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHBhcm0KK2NoYXIJKnRwYXJtKAorCQljaGFyCSpzdHJpbmcsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90cHV0cy5jICovCisKKyN1bmRlZiBQQworY2hhcglQQzsKKyN1bmRlZiBvc3BlZWQKK05DVVJTRVNfT1NQRUVECW9zcGVlZDsKKyN1bmRlZiBfbmNfbnVsbHNfc2VudAoraW50CV9uY19udWxsc19zZW50OworCisjdW5kZWYgX25jX3NldF9ub19wYWRkaW5nCit2b2lkCV9uY19zZXRfbm9fcGFkZGluZygKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGRlbGF5X291dHB1dAoraW50CWRlbGF5X291dHB1dCgKKwkJaW50CW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZmx1c2gKK3ZvaWQJX25jX2ZsdXNoKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfb3V0Y2gKK2ludAlfbmNfb3V0Y2goCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcHV0cAoraW50CXB1dHAoCisJCWNvbnN0IGNoYXIgKnN0cmluZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHB1dHMKK2ludAl0cHV0cygKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CWFmZmNudCwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlLmMgKi8KKworI3VuZGVmIF9uY190cmFjaW5nCit1bnNpZ25lZCBfbmNfdHJhY2luZzsKKworI3VuZGVmIF9uY19fbmNfdHB1dHNfdHJhY2UKK2NvbnN0IGNoYXIgKl9uY19fbmNfdHB1dHNfdHJhY2Uodm9pZCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfX25jX291dGNoYXJzCitsb25nCV9uY19fbmNfb3V0Y2hhcnModm9pZCkKKwkJeyByZXR1cm4oKihsb25nICopMCk7IH0KKworI3VuZGVmIF9uY19zZXRfdHB1dHNfdHJhY2UKK3ZvaWQJX25jX3NldF90cHV0c190cmFjZSgKKwkJY29uc3QgY2hhciAqcykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19jb3VudF9vdXRjaGFycwordm9pZAlfbmNfY291bnRfb3V0Y2hhcnMoCisJCWxvbmcJaW5jcmVtZW50KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgdHJhY2UKK3ZvaWQJdHJhY2UoCisJCWNvbnN0IHVuc2lnbmVkIGludCB0cmFjZWxldmVsKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX3RyYWNlZgordm9pZAlfdHJhY2VmKAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9ib29sCitOQ1VSU0VTX0JPT0wgX25jX3JldHJhY2VfYm9vbCgKKwkJTkNVUlNFU19CT09MIGNvZGUpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2ludAoraW50CV9uY19yZXRyYWNlX2ludCgKKwkJaW50CWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3Vuc2lnbmVkCit1bnNpZ25lZCBfbmNfcmV0cmFjZV91bnNpZ25lZCgKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKih1bnNpZ25lZCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9wdHIKK2NoYXIJKl9uY19yZXRyYWNlX3B0cigKKwkJY2hhcgkqY29kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9jcHRyCitjb25zdCBjaGFyICpfbmNfcmV0cmFjZV9jcHRyKAorCQljb25zdCBjaGFyICpjb2RlKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2N2b2lkX3B0cgordm9pZAkqX25jX3JldHJhY2VfY3ZvaWRfcHRyKAorCQl2b2lkCSpjb2RlKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3ZvaWRfcHRyCit2b2lkCSpfbmNfcmV0cmFjZV92b2lkX3B0cigKKwkJdm9pZAkqY29kZSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9zcAorU0NSRUVOCSpfbmNfcmV0cmFjZV9zcCgKKwkJU0NSRUVOCSpjb2RlKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2Vfd2luCitXSU5ET1cJKl9uY19yZXRyYWNlX3dpbigKKwkJV0lORE9XCSpjb2RlKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX3VzZV90cmFjZWYKK2ludAlfbmNfdXNlX3RyYWNlZigKKwkJdW5zaWduZWQgbWFzaykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2xvY2tlZF90cmFjZWYKK3ZvaWQJX25jX2xvY2tlZF90cmFjZWYoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90cmFjZS9saWJfdHJhY2VhdHIuYyAqLworCisjdW5kZWYgX3RyYWNlYXR0cjIKK2NoYXIJKl90cmFjZWF0dHIyKAorCQlpbnQJYnVmbnVtLCAKKwkJY2h0eXBlCW5ld21vZGUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlYXR0cgorY2hhcgkqX3RyYWNlYXR0cigKKwkJYXR0cl90CW5ld21vZGUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfYXR0cl90CithdHRyX3QJX25jX3JldHJhY2VfYXR0cl90KAorCQlhdHRyX3QJY29kZSkKKwkJeyByZXR1cm4oKihhdHRyX3QgKikwKTsgfQorCisjdW5kZWYgX25jX2FsdGNoYXJzZXRfbmFtZQorY29uc3QgY2hhciAqX25jX2FsdGNoYXJzZXRfbmFtZSgKKwkJYXR0cl90CWF0dHIsIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlY2h0eXBlMgorY2hhcgkqX3RyYWNlY2h0eXBlMigKKwkJaW50CWJ1Zm51bSwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaHR5cGUKK2NoYXIJKl90cmFjZWNodHlwZSgKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2NodHlwZQorY2h0eXBlCV9uY19yZXRyYWNlX2NodHlwZSgKKwkJY2h0eXBlCWNvZGUpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2ViaXRzLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCB2YWw7CisgICAgY29uc3QgY2hhciAqbmFtZTsKK30gQklUTkFNRVM7CisKKyN1bmRlZiBfbmNfdHJhY2VfdHR5bW9kZQorY2hhcgkqX25jX3RyYWNlX3R0eW1vZGUoCisJCXN0cnVjdCB0ZXJtaW9zICp0dHkpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3RyYWNlYml0cworY2hhcgkqX25jX3RyYWNlYml0cyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2VjaHIuYyAqLworCisjdW5kZWYgX25jX3RyYWNlY2hhcgorY2hhcgkqX25jX3RyYWNlY2hhcigKKwkJU0NSRUVOCSpzcCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaGFyCitjaGFyCSpfdHJhY2VjaGFyKAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90dHlmbGFncy5jICovCisKKyN1bmRlZiBfbmNfZ2V0X3R0eV9tb2RlCitpbnQJX25jX2dldF90dHlfbW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKmJ1ZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NldF90dHlfbW9kZQoraW50CV9uY19zZXRfdHR5X21vZGUoCisJCXN0cnVjdCB0ZXJtaW9zICpidWYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlZl9zaGVsbF9tb2RlCitpbnQJZGVmX3NoZWxsX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVmX3Byb2dfbW9kZQoraW50CWRlZl9wcm9nX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXRfcHJvZ19tb2RlCitpbnQJcmVzZXRfcHJvZ19tb2RlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2V0X3NoZWxsX21vZGUKK2ludAlyZXNldF9zaGVsbF9tb2RlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNhdmV0dHkKK2ludAlzYXZldHR5KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2V0dHkKK2ludAlyZXNldHR5KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90dHkvbGliX3R3YWl0LmMgKi8KKworI3VuZGVmIF9uY190aW1lZF93YWl0CitpbnQJX25jX3RpbWVkX3dhaXQoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJbW9kZSwgCisJCWludAltaWxsaXNlY29uZHMsIAorCQlpbnQJKnRpbWVsZWZ0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbmFtZV9tYXRjaC5jICovCisKKyN1bmRlZiBfbmNfZmlyc3RfbmFtZQorY2hhcgkqX25jX2ZpcnN0X25hbWUoCisJCWNvbnN0IGNoYXIgKmNvbnN0IHNwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19uYW1lX21hdGNoCitpbnQJX25jX25hbWVfbWF0Y2goCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWVsc3QsIAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lLCAKKwkJY29uc3QgY2hhciAqY29uc3QgZGVsaW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9uYW1lcy5jICovCisKKyN1bmRlZiBfbmNfYm9vbG5hbWVzCitjaGFyCSpjb25zdCAqX25jX2Jvb2xuYW1lcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19ib29sZm5hbWVzCitjaGFyCSpjb25zdCAqX25jX2Jvb2xmbmFtZXModm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbnVtbmFtZXMKK2NoYXIJKmNvbnN0ICpfbmNfbnVtbmFtZXModm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbnVtZm5hbWVzCitjaGFyCSpjb25zdCAqX25jX251bWZuYW1lcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJuYW1lcworY2hhcgkqY29uc3QgKl9uY19zdHJuYW1lcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJmbmFtZXMKK2NoYXIJKmNvbnN0ICpfbmNfc3RyZm5hbWVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL3JlYWRfZW50cnkuYyAqLworCisjaW5jbHVkZSA8aGFzaGVkX2RiLmg+CisKKyN1bmRlZiBfbmNfcmVhZF90ZXJtdHlwZQoraW50CV9uY19yZWFkX3Rlcm10eXBlKAorCQlURVJNVFlQRSAqcHRyLCAKKwkJY2hhcgkqYnVmZmVyLCAKKwkJaW50CWxpbWl0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVhZF9maWxlX2VudHJ5CitpbnQJX25jX3JlYWRfZmlsZV9lbnRyeSgKKwkJY29uc3QgY2hhciAqY29uc3QgZmlsZW5hbWUsIAorCQlURVJNVFlQRSAqcHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVhZF9lbnRyeQoraW50CV9uY19yZWFkX2VudHJ5KAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lLCAKKwkJY2hhcgkqY29uc3QgZmlsZW5hbWUsIAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9yZWFkX3Rlcm1jYXAuYyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyN1bmRlZiBfbmNfcmVhZF90ZXJtY2FwX2VudHJ5CitpbnQJX25jX3JlYWRfdGVybWNhcF9lbnRyeSgKKwkJY29uc3QgY2hhciAqY29uc3QgdG4sIAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9zZXRidWYuYyAqLworCisjdW5kZWYgX25jX3NldF9idWZmZXIKK3ZvaWQJX25jX3NldF9idWZmZXIoCisJCUZJTEUJKm9mcCwgCisJCU5DVVJTRVNfQk9PTCBidWZmZXJlZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9zdHJpbmdzLmMgKi8KKworI3VuZGVmIF9uY19zdHJfaW5pdAorc3RyaW5nX2Rlc2MgKl9uY19zdHJfaW5pdCgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCWNoYXIJKnNyYywgCisJCXNpemVfdAlsZW4pCisJCXsgcmV0dXJuKCooc3RyaW5nX2Rlc2MgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJfbnVsbAorc3RyaW5nX2Rlc2MgKl9uY19zdHJfbnVsbCgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCXNpemVfdAlsZW4pCisJCXsgcmV0dXJuKCooc3RyaW5nX2Rlc2MgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJfY29weQorc3RyaW5nX2Rlc2MgKl9uY19zdHJfY29weSgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCXN0cmluZ19kZXNjICpzcmMpCisJCXsgcmV0dXJuKCooc3RyaW5nX2Rlc2MgKiopMCk7IH0KKworI3VuZGVmIF9uY19zYWZlX3N0cmNhdAorTkNVUlNFU19CT09MIF9uY19zYWZlX3N0cmNhdCgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCWNvbnN0IGNoYXIgKnNyYykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3NhZmVfc3RyY3B5CitOQ1VSU0VTX0JPT0wgX25jX3NhZmVfc3RyY3B5KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJY29uc3QgY2hhciAqc3JjKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vdHJhY2UvdHJhY2VfYnVmLmMgKi8KKworI3VuZGVmIF9uY190cmFjZV9idWYKK2NoYXIJKl9uY190cmFjZV9idWYoCisJCWludAlidWZudW0sIAorCQlzaXplX3QJd2FudCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhY2VfYnVmY2F0CitjaGFyCSpfbmNfdHJhY2VfYnVmY2F0KAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2hhciAqdmFsdWUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL3RyYWNlX3RyaWVzLmMgKi8KKworI3VuZGVmIF9uY190cmFjZV90cmllcwordm9pZAlfbmNfdHJhY2VfdHJpZXMoCisJCVRSSUVTCSp0cmVlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvdHJpZXMuYyAqLworCisjdW5kZWYgX25jX2V4cGFuZF90cnkKK2NoYXIJKl9uY19leHBhbmRfdHJ5KAorCQlUUklFUwkqdHJlZSwgCisJCXVuc2lnbmVkIGNvZGUsIAorCQlpbnQJKmNvdW50LCAKKwkJc2l6ZV90CWxlbikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVtb3ZlX2tleQoraW50CV9uY19yZW1vdmVfa2V5KAorCQlUUklFUwkqKnRyZWUsIAorCQl1bnNpZ25lZCBjb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVtb3ZlX3N0cmluZworaW50CV9uY19yZW1vdmVfc3RyaW5nKAorCQlUUklFUwkqKnRyZWUsIAorCQljb25zdCBjaGFyICpzdHJpbmcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby90cmltX3NncjAuYyAqLworCisjdW5kZWYgX25jX3RyaW1fc2dyMAorY2hhcgkqX25jX3RyaW1fc2dyMCgKKwkJVEVSTVRZUEUgKnRwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi91bmN0cmwuYyAqLworCisjdW5kZWYgX25jX3VuY3RybAorY2hhcgkqX25jX3VuY3RybCgKKwkJU0NSRUVOCSpzcCwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiB1bmN0cmwKK2NoYXIJKnVuY3RybCgKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90cmFjZS92aXNidWYuYyAqLworCisjdW5kZWYgX25jX3Zpc2J1ZjIKK2NvbnN0IGNoYXIgKl9uY192aXNidWYyKAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2hhciAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNidWYKK2NvbnN0IGNoYXIgKl9uY192aXNidWYoCisJCWNvbnN0IGNoYXIgKmJ1ZikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzYnVmbgorY29uc3QgY2hhciAqX25jX3Zpc2J1Zm4oCisJCWNvbnN0IGNoYXIgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2NidWYyCitjb25zdCBjaGFyICpfbmNfdmlzY2J1ZjIoCisJCWludAlidWZudW0sIAorCQljb25zdCBjaHR5cGUgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2NidWYKK2NvbnN0IGNoYXIgKl9uY192aXNjYnVmKAorCQljb25zdCBjaHR5cGUgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2FsbG9jX2VudHJ5LmMgKi8KKworI3VuZGVmIF9uY19pbml0X2VudHJ5Cit2b2lkCV9uY19pbml0X2VudHJ5KAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfY29weV9lbnRyeQorRU5UUlkJKl9uY19jb3B5X2VudHJ5KAorCQlFTlRSWQkqb2xkcCkKKwkJeyByZXR1cm4oKihFTlRSWSAqKikwKTsgfQorCisjdW5kZWYgX25jX3NhdmVfc3RyCitjaGFyCSpfbmNfc2F2ZV9zdHIoCisJCWNvbnN0IGNoYXIgKmNvbnN0IHN0cmluZykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfd3JhcF9lbnRyeQordm9pZAlfbmNfd3JhcF9lbnRyeSgKKwkJRU5UUlkJKmNvbnN0IGVwLCAKKwkJTkNVUlNFU19CT09MIGNvcHlfc3RyaW5ncykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tZXJnZV9lbnRyeQordm9pZAlfbmNfbWVyZ2VfZW50cnkoCisJCVRFUk1UWVBFICpjb25zdCB0bywgCisJCVRFUk1UWVBFICpjb25zdCBmcm9tKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2NhcHRvaW5mby5jICovCisKKyN1bmRlZiBfbmNfY2FwdG9pbmZvCitjaGFyCSpfbmNfY2FwdG9pbmZvKAorCQljb25zdCBjaGFyICpjYXAsIAorCQljb25zdCBjaGFyICpzLCAKKwkJaW50IGNvbnN0IHBhcmFtZXRlcml6ZWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2luZm90b2NhcAorY2hhcgkqX25jX2luZm90b2NhcCgKKwkJY29uc3QgY2hhciAqY2FwLCAKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJaW50IGNvbnN0IHBhcmFtZXRlcml6ZWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL2NvbXBfY2FwdGFiLmMgKi8KKworI2luY2x1ZGUgPGhhc2hzaXplLmg+CisKKyN1bmRlZiBfbmNfZ2V0X3RhYmxlCitjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqX25jX2dldF90YWJsZSgKKwkJTkNVUlNFU19CT09MIHRlcm1jYXApCisJCXsgcmV0dXJuKCooY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKiopMCk7IH0KKworI3VuZGVmIF9uY19nZXRfaGFzaF90YWJsZQorY29uc3Qgc2hvcnQgKl9uY19nZXRfaGFzaF90YWJsZSgKKwkJTkNVUlNFU19CT09MIHRlcm1jYXApCisJCXsgcmV0dXJuKCooY29uc3Qgc2hvcnQgKiopMCk7IH0KKworI3VuZGVmIF9uY19nZXRfYWxpYXNfdGFibGUKK2NvbnN0IHN0cnVjdCBhbGlhcyAqX25jX2dldF9hbGlhc190YWJsZSgKKwkJTkNVUlNFU19CT09MIHRlcm1jYXApCisJCXsgcmV0dXJuKCooY29uc3Qgc3RydWN0IGFsaWFzICoqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9leHBhbmQuYyAqLworCisjdW5kZWYgX25jX3RpY19leHBhbmQKK2NoYXIJKl9uY190aWNfZXhwYW5kKAorCQljb25zdCBjaGFyICpzcmNwLCAKKwkJTkNVUlNFU19CT09MIHRpY19mb3JtYXQsIAorCQlpbnQJbnVtYmVycykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9oYXNoLmMgKi8KKworI3VuZGVmIF9uY19maW5kX2VudHJ5CitzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqX25jX2ZpbmRfZW50cnkoCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWNvbnN0IHNob3J0ICpoYXNoX3RhYmxlKQorCQl7IHJldHVybigqKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZmluZF90eXBlX2VudHJ5CitzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqX25jX2ZpbmRfdHlwZV9lbnRyeSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CXR5cGUsIAorCQljb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqdGFibGUpCisJCXsgcmV0dXJuKCooc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX3BhcnNlLmMgKi8KKworI3VuZGVmIF9uY19jaGVja190ZXJtdHlwZTIKK3ZvaWQJKCpfbmNfY2hlY2tfdGVybXR5cGUyKSgKKwkJVEVSTVRZUEUgKnAxLCAKKwkJTkNVUlNFU19CT09MIHAyKTsKKyN1bmRlZiBfbmNfY2hlY2tfdGVybXR5cGUKK3ZvaWQJKCpfbmNfY2hlY2tfdGVybXR5cGUpKAorCQlURVJNVFlQRSAqcDEpOworCisjdW5kZWYgX25jX2VudHJ5X21hdGNoCitOQ1VSU0VTX0JPT0wgX25jX2VudHJ5X21hdGNoKAorCQljaGFyCSpuMSwgCisJCWNoYXIJKm4yKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVhZF9lbnRyeV9zb3VyY2UKK3ZvaWQJX25jX3JlYWRfZW50cnlfc291cmNlKAorCQlGSUxFCSpmcCwgCisJCWNoYXIJKmJ1ZiwgCisJCWludAlsaXRlcmFsLCAKKwkJTkNVUlNFU19CT09MIHNpbGVudCwgCisJCU5DVVJTRVNfQk9PTCAoKmhvb2spKAorCQlFTlRSWQkqcDEpKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3Jlc29sdmVfdXNlczIKK2ludAlfbmNfcmVzb2x2ZV91c2VzMigKKwkJTkNVUlNFU19CT09MIGZ1bGxyZXNvbHZlLCAKKwkJTkNVUlNFU19CT09MIGxpdGVyYWwpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZXNvbHZlX3VzZXMKK2ludAlfbmNfcmVzb2x2ZV91c2VzKAorCQlOQ1VSU0VTX0JPT0wgZnVsbHJlc29sdmUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9jb21wX3NjYW4uYyAqLworCisjdW5kZWYgX25jX3N5bnRheAoraW50CV9uY19zeW50YXg7CisjdW5kZWYgX25jX2N1cnJfZmlsZV9wb3MKK2xvbmcJX25jX2N1cnJfZmlsZV9wb3M7CisjdW5kZWYgX25jX2NvbW1lbnRfc3RhcnQKK2xvbmcJX25jX2NvbW1lbnRfc3RhcnQ7CisjdW5kZWYgX25jX2NvbW1lbnRfZW5kCitsb25nCV9uY19jb21tZW50X2VuZDsKKyN1bmRlZiBfbmNfc3RhcnRfbGluZQorbG9uZwlfbmNfc3RhcnRfbGluZTsKKyN1bmRlZiBfbmNfY3Vycl90b2tlbgorc3RydWN0IHRva2VuIF9uY19jdXJyX3Rva2VuOworI3VuZGVmIF9uY19kaXNhYmxlX3BlcmlvZAorTkNVUlNFU19CT09MIF9uY19kaXNhYmxlX3BlcmlvZDsKKworI3VuZGVmIF9uY19yZXNldF9pbnB1dAordm9pZAlfbmNfcmVzZXRfaW5wdXQoCisJCUZJTEUJKmZwLCAKKwkJY2hhcgkqYnVmKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2dldF90b2tlbgoraW50CV9uY19nZXRfdG9rZW4oCisJCU5DVVJTRVNfQk9PTCBzaWxlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY190cmFuc19zdHJpbmcKK2ludAlfbmNfdHJhbnNfc3RyaW5nKAorCQljaGFyCSpwdHIsIAorCQljaGFyCSpsYXN0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcHVzaF90b2tlbgordm9pZAlfbmNfcHVzaF90b2tlbigKKwkJaW50CXRva2NsYXNzKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3BhbmljX21vZGUKK3ZvaWQJX25jX3BhbmljX21vZGUoCisJCWNoYXIJY2gpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vcGFyc2VfZW50cnkuYyAqLworCisjdW5kZWYgX25jX3BhcnNlX2VudHJ5CitpbnQJX25jX3BhcnNlX2VudHJ5KAorCQlzdHJ1Y3QgZW50cnkgKmVudHJ5cCwgCisJCWludAlsaXRlcmFsLCAKKwkJTkNVUlNFU19CT09MIHNpbGVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2NhcGNtcAoraW50CV9uY19jYXBjbXAoCisJCWNvbnN0IGNoYXIgKnMsIAorCQljb25zdCBjaGFyICp0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpmcm9tOworICAgIGNvbnN0IGNoYXIgKnRvOworfSBhc3NvYzsKKworLyogLi90aW5mby93cml0ZV9lbnRyeS5jICovCisKKyN1bmRlZiBfbmNfc2V0X3dyaXRlZGlyCit2b2lkCV9uY19zZXRfd3JpdGVkaXIoCisJCWNoYXIJKmRpcikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY193cml0ZV9lbnRyeQordm9pZAlfbmNfd3JpdGVfZW50cnkoCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY190aWNfd3JpdHRlbgoraW50CV9uY190aWNfd3JpdHRlbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9kZWZpbmVfa2V5LmMgKi8KKworI3VuZGVmIGRlZmluZV9rZXkKK2ludAlkZWZpbmVfa2V5KAorCQljb25zdCBjaGFyICpzdHIsIAorCQlpbnQJa2V5Y29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2hhc2hlZF9kYi5jICovCisKKyN1bmRlZiBfbmNfaGFzaGVkX2RiCit2b2lkCV9uY19oYXNoZWRfZGIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2tleV9kZWZpbmVkLmMgKi8KKworI3VuZGVmIGtleV9kZWZpbmVkCitpbnQJa2V5X2RlZmluZWQoCisJCWNvbnN0IGNoYXIgKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2Uva2V5Ym91bmQuYyAqLworCisjdW5kZWYga2V5Ym91bmQKK2NoYXIJKmtleWJvdW5kKAorCQlpbnQJY29kZSwgCisJCWludAljb3VudCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9rZXlvay5jICovCisKKyN1bmRlZiBrZXlvaworaW50CWtleW9rKAorCQlpbnQJYywgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS92ZXJzaW9uLmMgKi8KKworI3VuZGVmIGN1cnNlc192ZXJzaW9uCitjb25zdCBjaGFyICpjdXJzZXNfdmVyc2lvbih2b2lkKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KZGlmZiAtLWdpdCBhL25jdXJzZXMvbGxpYi1sbmN1cnNlc3cgYi9uY3Vyc2VzL2xsaWItbG5jdXJzZXN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTcyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL2xsaWItbG5jdXJzZXN3CkBAIC0wLDAgKzEsNDIxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMjAwMS0yMDA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vdHR5L2hhcmRzY3JvbGwuYyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI3VuZGVmIF9uY19vbGRudW1zCitpbnQJKl9uY19vbGRudW1zOworCisjdW5kZWYgX25jX3Njcm9sbF9vcHRpbWl6ZQordm9pZAlfbmNfc2Nyb2xsX29wdGltaXplKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbGluZWR1bXAKK3ZvaWQJX25jX2xpbmVkdW1wKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHR5L2hhc2htYXAuYyAqLworCisjaW5jbHVkZSA8dGVybS5oPgorCisjdW5kZWYgX25jX2hhc2hfbWFwCit2b2lkCV9uY19oYXNoX21hcCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX21ha2Vfb2xkaGFzaAordm9pZAlfbmNfbWFrZV9vbGRoYXNoKAorCQlpbnQJaSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JvbGxfb2xkaGFzaAordm9pZAlfbmNfc2Nyb2xsX29sZGhhc2goCisJCWludAluLCAKKwkJaW50CXRvcCwgCisJCWludAlib3QpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfYWRkY2guYyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI3VuZGVmIF9uY19yZW5kZXIKK2NjaGFyX3QJX25jX3JlbmRlcigKKwkJV0lORE9XCSp3aW4sIAorCQljY2hhcl90CWNoKQorCQl7IHJldHVybigqKGNjaGFyX3QgKikwKTsgfQorCisjdW5kZWYgX25jX2J1aWxkX3djaAoraW50CV9uY19idWlsZF93Y2goCisJCVdJTkRPVwkqd2luLCAKKwkJY2NoYXJfdAkqY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY193YWRkY2hfbm9zeW5jCitpbnQJX25jX3dhZGRjaF9ub3N5bmMoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCBjKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2gKK2ludAl3YWRkY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3ZWNob2NoYXIKK2ludAl3ZWNob2NoYXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYWRkc3RyLmMgKi8KKworI3VuZGVmIHdhZGRuc3RyCitpbnQJd2FkZG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqYXN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2huc3RyCitpbnQJd2FkZGNobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgKmFzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3djaHN0cmxlbgoraW50CV9uY193Y2hzdHJsZW4oCisJCWNvbnN0IGNjaGFyX3QgKnMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRfd2NobnN0cgoraW50CXdhZGRfd2NobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICphc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRud3N0cgoraW50CXdhZGRud3N0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCB3Y2hhcl90ICpzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JlZXAuYyAqLworCisjdW5kZWYgYmVlcAoraW50CWJlZXAodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JrZ2QuYyAqLworCisjdW5kZWYgd2JrZ3JuZHNldAordm9pZAl3Ymtncm5kc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNjaGFyX3QgKmNoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2JrZ2RzZXQKK3ZvaWQJd2JrZ2RzZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2JrZ3JuZAoraW50CXdia2dybmQoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCAqY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdia2dkCitpbnQJd2JrZ2QoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYm94LmMgKi8KKworI3VuZGVmIHdib3JkZXIKK2ludAl3Ym9yZGVyKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQlscywgCisJCWNodHlwZQlycywgCisJCWNodHlwZQl0cywgCisJCWNodHlwZQlicywgCisJCWNodHlwZQl0bCwgCisJCWNodHlwZQl0ciwgCisJCWNodHlwZQlibCwgCisJCWNodHlwZQlicikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NoZ2F0LmMgKi8KKworI3VuZGVmIHdjaGdhdAoraW50CXdjaGdhdCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbiwgCisJCWF0dHJfdAlhdHRyLCAKKwkJc2hvcnQJY29sb3IsIAorCQljb25zdCB2b2lkICpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xlYXIuYyAqLworCisjdW5kZWYgd2NsZWFyCitpbnQJd2NsZWFyKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NsZWFyb2suYyAqLworCisjdW5kZWYgY2xlYXJvaworaW50CWNsZWFyb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbHJib3QuYyAqLworCisjdW5kZWYgd2NscnRvYm90CitpbnQJd2NscnRvYm90KAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NscmVvbC5jICovCisKKyN1bmRlZiB3Y2xydG9lb2wKK2ludAl3Y2xydG9lb2woCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY29sb3IuYyAqLworCisjaW5jbHVkZSA8dGljLmg+CisKKyN1bmRlZiBDT0xPUl9QQUlSUworaW50CUNPTE9SX1BBSVJTOworI3VuZGVmIENPTE9SUworaW50CUNPTE9SUzsKKworI3VuZGVmIF9uY19yZXNldF9jb2xvcnMKK05DVVJTRVNfQk9PTCBfbmNfcmVzZXRfY29sb3JzKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHN0YXJ0X2NvbG9yCitpbnQJc3RhcnRfY29sb3Iodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5pdF9wYWlyCitpbnQJaW5pdF9wYWlyKAorCQlzaG9ydAlwYWlyLCAKKwkJc2hvcnQJZiwgCisJCXNob3J0CWIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluaXRfY29sb3IKK2ludAlpbml0X2NvbG9yKAorCQlzaG9ydAljb2xvciwgCisJCXNob3J0CXIsIAorCQlzaG9ydAlnLCAKKwkJc2hvcnQJYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2FuX2NoYW5nZV9jb2xvcgorTkNVUlNFU19CT09MIGNhbl9jaGFuZ2VfY29sb3Iodm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaGFzX2NvbG9ycworTkNVUlNFU19CT09MIGhhc19jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgY29sb3JfY29udGVudAoraW50CWNvbG9yX2NvbnRlbnQoCisJCXNob3J0CWNvbG9yLCAKKwkJc2hvcnQJKnIsIAorCQlzaG9ydAkqZywgCisJCXNob3J0CSpiKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwYWlyX2NvbnRlbnQKK2ludAlwYWlyX2NvbnRlbnQoCisJCXNob3J0CXBhaXIsIAorCQlzaG9ydAkqZiwgCisJCXNob3J0CSpiKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZG9fY29sb3IKK3ZvaWQJX25jX2RvX2NvbG9yKAorCQlzaG9ydAlvbGRfcGFpciwgCisJCXNob3J0CXBhaXIsIAorCQlOQ1VSU0VTX0JPT0wgcmV2ZXJzZSwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2NvbG9yc2V0LmMgKi8KKworI3VuZGVmIHdjb2xvcl9zZXQKK2ludAl3Y29sb3Jfc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2RlbGNoLmMgKi8KKworI3VuZGVmIHdkZWxjaAoraW50CXdkZWxjaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZWx3aW4uYyAqLworCisjdW5kZWYgZGVsd2luCitpbnQJZGVsd2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VjaG8uYyAqLworCisjdW5kZWYgZWNobworaW50CWVjaG8odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9lY2hvCitpbnQJbm9lY2hvKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lbmR3aW4uYyAqLworCisjdW5kZWYgZW5kd2luCitpbnQJZW5kd2luKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lcmFzZS5jICovCisKKyN1bmRlZiB3ZXJhc2UKK2ludAl3ZXJhc2UoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZmxhc2guYyAqLworCisjdW5kZWYgZmxhc2gKK2ludAlmbGFzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbGliX2dlbi5jICovCisKKyN1bmRlZiBhZGRjaAoraW50CWFkZGNoKAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkY2huc3RyCitpbnQJYWRkY2huc3RyKAorCQljb25zdCBjaHR5cGUgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZGNoc3RyCitpbnQJYWRkY2hzdHIoCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkbnN0cgoraW50CWFkZG5zdHIoCisJCWNvbnN0IGNoYXIgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZHN0cgoraW50CWFkZHN0cigKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cm9mZgoraW50CWF0dHJvZmYoCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJvbgoraW50CWF0dHJvbigKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cnNldAoraW50CWF0dHJzZXQoCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfZ2V0CitpbnQJYXR0cl9nZXQoCisJCWF0dHJfdAkqYTEsIAorCQlzaG9ydAkqYTIsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX29mZgoraW50CWF0dHJfb2ZmKAorCQlhdHRyX3QJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX29uCitpbnQJYXR0cl9vbigKKwkJYXR0cl90CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9zZXQKK2ludAlhdHRyX3NldCgKKwkJYXR0cl90CWExLCAKKwkJc2hvcnQJYTIsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBia2dkCitpbnQJYmtnZCgKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ2RzZXQKK3ZvaWQJYmtnZHNldCgKKwkJY2h0eXBlCXopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBib3JkZXIKK2ludAlib3JkZXIoCisJCWNodHlwZQlhMSwgCisJCWNodHlwZQlhMiwgCisJCWNodHlwZQlhMywgCisJCWNodHlwZQlhNCwgCisJCWNodHlwZQlhNSwgCisJCWNodHlwZQlhNiwgCisJCWNodHlwZQlhNywgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBib3gKK2ludAlib3goCisJCVdJTkRPVwkqYTEsIAorCQljaHR5cGUJYTIsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2hnYXQKK2ludAljaGdhdCgKKwkJaW50CWExLCAKKwkJYXR0cl90CWEyLCAKKwkJc2hvcnQJYTMsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjbGVhcgoraW50CWNsZWFyKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNscnRvYm90CitpbnQJY2xydG9ib3Qodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2xydG9lb2wKK2ludAljbHJ0b2VvbCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjb2xvcl9zZXQKK2ludAljb2xvcl9zZXQoCisJCXNob3J0CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgQ09MT1JfUEFJUgoraW50CUNPTE9SX1BBSVIoCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWxjaAoraW50CWRlbGNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlbGV0ZWxuCitpbnQJZGVsZXRlbG4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZWNob2NoYXIKK2ludAllY2hvY2hhcigKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGVyYXNlCitpbnQJZXJhc2Uodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmtnZAorY2h0eXBlCWdldGJrZ2QoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgZ2V0Y2gKK2ludAlnZXRjaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRuc3RyCitpbnQJZ2V0bnN0cigKKwkJY2hhcgkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0c3RyCitpbnQJZ2V0c3RyKAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBobGluZQoraW50CWhsaW5lKAorCQljaHR5cGUJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5jaAorY2h0eXBlCWluY2godm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgaW5jaG5zdHIKK2ludAlpbmNobnN0cigKKwkJY2h0eXBlCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbmNoc3RyCitpbnQJaW5jaHN0cigKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbm5zdHIKK2ludAlpbm5zdHIoCisJCWNoYXIJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc2NoCitpbnQJaW5zY2goCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNkZWxsbgoraW50CWluc2RlbGxuKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zZXJ0bG4KK2ludAlpbnNlcnRsbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNuc3RyCitpbnQJaW5zbnN0cigKKwkJY29uc3QgY2hhciAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zc3RyCitpbnQJaW5zc3RyKAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnN0cgoraW50CWluc3RyKAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3ZlCitpbnQJbW92ZSgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkY2gKK2ludAltdmFkZGNoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRjaG5zdHIKK2ludAltdmFkZGNobnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZGNoc3RyCitpbnQJbXZhZGRjaHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZG5zdHIKK2ludAltdmFkZG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkc3RyCitpbnQJbXZhZGRzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Y2hnYXQKK2ludAltdmNoZ2F0KAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQlhdHRyX3QJYTQsIAorCQlzaG9ydAlhNSwgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12ZGVsY2gKK2ludAltdmRlbGNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRjaAoraW50CW12Z2V0Y2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldG5zdHIKK2ludAltdmdldG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0c3RyCitpbnQJbXZnZXRzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aGxpbmUKK2ludAltdmhsaW5lKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbmNoCitjaHR5cGUJbXZpbmNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgbXZpbmNobnN0cgoraW50CW12aW5jaG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbmNoc3RyCitpbnQJbXZpbmNoc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5uc3RyCitpbnQJbXZpbm5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zY2gKK2ludAltdmluc2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNuc3RyCitpbnQJbXZpbnNuc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc3N0cgoraW50CW12aW5zc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc3RyCitpbnQJbXZpbnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ2bGluZQoraW50CW12dmxpbmUoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQlhMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRjaAoraW50CW12d2FkZGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZGNobnN0cgoraW50CW12d2FkZGNobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkY2hzdHIKK2ludAltdndhZGRjaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkbnN0cgoraW50CW12d2FkZG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRzdHIKK2ludAltdndhZGRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndjaGdhdAoraW50CW12d2NoZ2F0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJaW50CWE0LCAKKwkJYXR0cl90CWE1LCAKKwkJc2hvcnQJYTYsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndkZWxjaAoraW50CW12d2RlbGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldGNoCitpbnQJbXZ3Z2V0Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0bnN0cgoraW50CW12d2dldG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRzdHIKK2ludAltdndnZXRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndobGluZQoraW50CW12d2hsaW5lKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCWE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luY2gKK2NodHlwZQltdndpbmNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIG12d2luY2huc3RyCitpbnQJbXZ3aW5jaG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luY2hzdHIKK2ludAltdndpbmNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbm5zdHIKK2ludAltdndpbm5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNjaAoraW50CW12d2luc2NoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc25zdHIKK2ludAltdndpbnNuc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zc3RyCitpbnQJbXZ3aW5zc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zdHIKK2ludAltdndpbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3ZsaW5lCitpbnQJbXZ3dmxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgUEFJUl9OVU1CRVIKK2ludAlQQUlSX05VTUJFUigKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlZHJhd3dpbgoraW50CXJlZHJhd3dpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZWZyZXNoCitpbnQJcmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JsCitpbnQJc2NybCgKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcm9sbAoraW50CXNjcm9sbCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRzY3JyZWcKK2ludAlzZXRzY3JyZWcoCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfYXR0cl9vZmYKK2ludAlzbGtfYXR0cl9vZmYoCisJCWNvbnN0IGF0dHJfdCBhMSwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNsa19hdHRyX29uCitpbnQJc2xrX2F0dHJfb24oCisJCWF0dHJfdAlhMSwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHN0YW5kb3V0CitpbnQJc3RhbmRvdXQodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3RhbmRlbmQKK2ludAlzdGFuZGVuZCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aW1lb3V0Cit2b2lkCXRpbWVvdXQoCisJCWludAl6KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgdG91Y2hsaW5lCitpbnQJdG91Y2hsaW5lKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRvdWNod2luCitpbnQJdG91Y2h3aW4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW50b3VjaHdpbgoraW50CXVudG91Y2h3aW4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmxpbmUKK2ludAl2bGluZSgKKwkJY2h0eXBlCWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZ3X3ByaW50dworaW50CXZ3X3ByaW50dygKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNoYXIgKmEyLCAKKwkJdmFfbGlzdAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2d19zY2FudworaW50CXZ3X3NjYW53KAorCQlXSU5ET1cJKmExLCAKKwkJY2hhcgkqYTIsIAorCQl2YV9saXN0CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRjaHN0cgoraW50CXdhZGRjaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZHN0cgoraW50CXdhZGRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cm9uCitpbnQJd2F0dHJvbigKKwkJV0lORE9XCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cm9mZgoraW50CXdhdHRyb2ZmKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyc2V0CitpbnQJd2F0dHJzZXQoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJfZ2V0CitpbnQJd2F0dHJfZ2V0KAorCQlXSU5ET1cJKmExLCAKKwkJYXR0cl90CSphMiwgCisJCXNob3J0CSphMywgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyX3NldAoraW50CXdhdHRyX3NldCgKKwkJV0lORE9XCSphMSwgCisJCWF0dHJfdAlhMiwgCisJCXNob3J0CWEzLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2RlbGV0ZWxuCitpbnQJd2RlbGV0ZWxuKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRzdHIKK2ludAl3Z2V0c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luY2hzdHIKK2ludAl3aW5jaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNodHlwZQkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc2VydGxuCitpbnQJd2luc2VydGxuKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNzdHIKK2ludAl3aW5zc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc3RyCitpbnQJd2luc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N0YW5kb3V0CitpbnQJd3N0YW5kb3V0KAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzdGFuZGVuZAoraW50CXdzdGFuZGVuZCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRhdHRycworaW50CWdldGF0dHJzKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGN1cngKK2ludAlnZXRjdXJ4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGN1cnkKK2ludAlnZXRjdXJ5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGJlZ3gKK2ludAlnZXRiZWd4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGJlZ3kKK2ludAlnZXRiZWd5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG1heHgKK2ludAlnZXRtYXh4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG1heHkKK2ludAlnZXRtYXh5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldHBhcngKK2ludAlnZXRwYXJ4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldHBhcnkKK2ludAlnZXRwYXJ5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRwYXJlbnQKK1dJTkRPVwkqd2dldHBhcmVudCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgaXNfY2xlYXJlZAorTkNVUlNFU19CT09MIGlzX2NsZWFyZWQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfaWRjb2sKK05DVVJTRVNfQk9PTCBpc19pZGNvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19pZGxvaworTkNVUlNFU19CT09MIGlzX2lkbG9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2ltbWVkb2sKK05DVVJTRVNfQk9PTCBpc19pbW1lZG9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2tleXBhZAorTkNVUlNFU19CT09MIGlzX2tleXBhZCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19sZWF2ZW9rCitOQ1VSU0VTX0JPT0wgaXNfbGVhdmVvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19ub2RlbGF5CitOQ1VSU0VTX0JPT0wgaXNfbm9kZWxheSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19ub3RpbWVvdXQKK05DVVJTRVNfQk9PTCBpc19ub3RpbWVvdXQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfc2Nyb2xsb2sKK05DVVJTRVNfQk9PTCBpc19zY3JvbGxvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19zeW5jb2sKK05DVVJTRVNfQk9PTCBpc19zeW5jb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgd2dldHNjcnJlZworaW50CXdnZXRzY3JyZWcoCisJCWNvbnN0IFdJTkRPVyAqYTEsIAorCQlpbnQJKmEyLCAKKwkJaW50CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRfd2NoCitpbnQJYWRkX3djaCgKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkX3djaG5zdHIKK2ludAlhZGRfd2NobnN0cigKKwkJY29uc3QgY2NoYXJfdCAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkX3djaHN0cgoraW50CWFkZF93Y2hzdHIoCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZG53c3RyCitpbnQJYWRkbndzdHIoCisJCWNvbnN0IHdjaGFyX3QgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZHdzdHIKK2ludAlhZGR3c3RyKAorCQljb25zdCB3Y2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBia2dybmQKK2ludAlia2dybmQoCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ3JuZHNldAordm9pZAlia2dybmRzZXQoCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBib3JkZXJfc2V0CitpbnQJYm9yZGVyX3NldCgKKwkJY29uc3QgY2NoYXJfdCAqYTEsIAorCQljb25zdCBjY2hhcl90ICphMiwgCisJCWNvbnN0IGNjaGFyX3QgKmEzLCAKKwkJY29uc3QgY2NoYXJfdCAqYTQsIAorCQljb25zdCBjY2hhcl90ICphNSwgCisJCWNvbnN0IGNjaGFyX3QgKmE2LCAKKwkJY29uc3QgY2NoYXJfdCAqYTcsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBib3hfc2V0CitpbnQJYm94X3NldCgKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNjaGFyX3QgKmEyLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZWNob193Y2hhcgoraW50CWVjaG9fd2NoYXIoCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldF93Y2gKK2ludAlnZXRfd2NoKAorCQl3aW50X3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldF93c3RyCitpbnQJZ2V0X3dzdHIoCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0Ymtncm5kCitpbnQJZ2V0Ymtncm5kKAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRuX3dzdHIKK2ludAlnZXRuX3dzdHIoCisJCXdpbnRfdAkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaGxpbmVfc2V0CitpbnQJaGxpbmVfc2V0KAorCQljb25zdCBjY2hhcl90ICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbl93Y2gKK2ludAlpbl93Y2goCisJCWNjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluX3djaG5zdHIKK2ludAlpbl93Y2huc3RyKAorCQljY2hhcl90CSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbl93Y2hzdHIKK2ludAlpbl93Y2hzdHIoCisJCWNjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGlubndzdHIKK2ludAlpbm53c3RyKAorCQl3Y2hhcl90CSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNfbndzdHIKK2ludAlpbnNfbndzdHIoCisJCWNvbnN0IHdjaGFyX3QgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc193Y2gKK2ludAlpbnNfd2NoKAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNfd3N0cgoraW50CWluc193c3RyKAorCQljb25zdCB3Y2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbndzdHIKK2ludAlpbndzdHIoCisJCXdjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkX3djaAoraW50CW12YWRkX3djaCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRfd2NobnN0cgoraW50CW12YWRkX3djaG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNjaGFyX3QgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkX3djaHN0cgoraW50CW12YWRkX3djaHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRud3N0cgoraW50CW12YWRkbndzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IHdjaGFyX3QgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkd3N0cgoraW50CW12YWRkd3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3Qgd2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRfd2NoCitpbnQJbXZnZXRfd2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQl3aW50X3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0X3dzdHIKK2ludAltdmdldF93c3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQl3aW50X3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0bl93c3RyCitpbnQJbXZnZXRuX3dzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCXdpbnRfdAkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZobGluZV9zZXQKK2ludAltdmhsaW5lX3NldCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2NoYXJfdCAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbl93Y2gKK2ludAltdmluX3djaCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbl93Y2huc3RyCitpbnQJbXZpbl93Y2huc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljY2hhcl90CSphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluX3djaHN0cgoraW50CW12aW5fd2Noc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmlubndzdHIKK2ludAltdmlubndzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCXdjaGFyX3QJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zX253c3RyCitpbnQJbXZpbnNfbndzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IHdjaGFyX3QgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zX3djaAoraW50CW12aW5zX3djaCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNfd3N0cgoraW50CW12aW5zX3dzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IHdjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW53c3RyCitpbnQJbXZpbndzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCXdjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12dmxpbmVfc2V0CitpbnQJbXZ2bGluZV9zZXQoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNjaGFyX3QgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZF93Y2gKK2ludAltdndhZGRfd2NoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkX3djaG5zdHIKK2ludAltdndhZGRfd2NobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNjaGFyX3QgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZF93Y2hzdHIKK2ludAltdndhZGRfd2Noc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkbndzdHIKK2ludAltdndhZGRud3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IHdjaGFyX3QgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZHdzdHIKK2ludAltdndhZGR3c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3Qgd2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0X3djaAoraW50CW12d2dldF93Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQl3aW50X3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldF93c3RyCitpbnQJbXZ3Z2V0X3dzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQl3aW50X3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldG5fd3N0cgoraW50CW12d2dldG5fd3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCXdpbnRfdAkqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aGxpbmVfc2V0CitpbnQJbXZ3aGxpbmVfc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2NoYXJfdCAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5fd2NoCitpbnQJbXZ3aW5fd2NoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5fd2NobnN0cgoraW50CW12d2luX3djaG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljY2hhcl90CSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbl93Y2hzdHIKK2ludAltdndpbl93Y2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbm53c3RyCitpbnQJbXZ3aW5ud3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCXdjaGFyX3QJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc19ud3N0cgoraW50CW12d2luc19ud3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IHdjaGFyX3QgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc193Y2gKK2ludAltdndpbnNfd2NoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zX3dzdHIKK2ludAltdndpbnNfd3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IHdjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2lud3N0cgoraW50CW12d2lud3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCXdjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3ZsaW5lX3NldAoraW50CW12d3ZsaW5lX3NldCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNjaGFyX3QgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZsaW5lX3NldAoraW50CXZsaW5lX3NldCgKKwkJY29uc3QgY2NoYXJfdCAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZF93Y2hzdHIKK2ludAl3YWRkX3djaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGR3c3RyCitpbnQJd2FkZHdzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCB3Y2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0X3dzdHIKK2ludAl3Z2V0X3dzdHIoCisJCVdJTkRPVwkqYTEsIAorCQl3aW50X3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRia2dybmQKK2ludAl3Z2V0Ymtncm5kKAorCQlXSU5ET1cJKmExLCAKKwkJY2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luX3djaHN0cgoraW50CXdpbl93Y2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zX3dzdHIKK2ludAl3aW5zX3dzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCB3Y2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3VzZV90cmFmbworTkNVUlNFU19CT09MIG1vdXNlX3RyYWZvKAorCQlpbnQJKmExLCAKKwkJaW50CSphMiwgCisJCU5DVVJTRVNfQk9PTCB6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZ2V0Y2guYyAqLworCisjaW5jbHVkZSA8Zmlmb19kZWZzLmg+CisKKyN1bmRlZiBFU0NERUxBWQoraW50CUVTQ0RFTEFZOworCisjdW5kZWYgc2V0X2VzY2RlbGF5CitpbnQJc2V0X2VzY2RlbGF5KAorCQlpbnQJdmFsdWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY193Z2V0Y2gKK2ludAlfbmNfd2dldGNoKAorCQlXSU5ET1cJKndpbiwgCisJCXVuc2lnbmVkIGxvbmcgKnJlc3VsdCwgCisJCWludAl1c2VfbWV0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldGNoCitpbnQJd2dldGNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2dldHN0ci5jICovCisKKyN1bmRlZiB3Z2V0bnN0cgoraW50CXdnZXRuc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKnN0ciwgCisJCWludAltYXhsZW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9obGluZS5jICovCisKKyN1bmRlZiB3aGxpbmUKK2ludAl3aGxpbmUoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbW1lZG9rLmMgKi8KKworI3VuZGVmIGltbWVkb2sKK3ZvaWQJaW1tZWRvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9pbmNoc3RyLmMgKi8KKworI3VuZGVmIHdpbmNobnN0cgoraW50CXdpbmNobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJKnN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5pdHNjci5jICovCisKKyN1bmRlZiBpbml0c2NyCitXSU5ET1cJKmluaXRzY3Iodm9pZCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnNjaC5jICovCisKKyN1bmRlZiBfbmNfaW5zZXJ0X2NoCitpbnQJX25jX2luc2VydF9jaCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNjaAoraW50CXdpbnNjaCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc2RlbC5jICovCisKKyN1bmRlZiB3aW5zZGVsbG4KK2ludAl3aW5zZGVsbG4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnNuc3RyLmMgKi8KKworI3VuZGVmIHdpbnNuc3RyCitpbnQJd2luc25zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqcywgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zdHIuYyAqLworCisjdW5kZWYgd2lubnN0cgoraW50CXdpbm5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pc2VuZHdpbi5jICovCisKKyN1bmRlZiBpc2VuZHdpbgorTkNVUlNFU19CT09MIGlzZW5kd2luKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9sZWF2ZW9rLmMgKi8KKworI3VuZGVmIGxlYXZlb2sKK2ludAlsZWF2ZW9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbW91c2UuYyAqLworCisjdW5kZWYgZ2V0bW91c2UKK2ludAlnZXRtb3VzZSgKKwkJTUVWRU5UCSphZXZlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVuZ2V0bW91c2UKK2ludAl1bmdldG1vdXNlKAorCQlNRVZFTlQJKmFldmVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbW91c2VtYXNrCittbWFza190CW1vdXNlbWFzaygKKwkJbW1hc2tfdAluZXdtYXNrLCAKKwkJbW1hc2tfdAkqb2xkbWFzaykKKwkJeyByZXR1cm4oKihtbWFza190ICopMCk7IH0KKworI3VuZGVmIHdlbmNsb3NlCitOQ1VSU0VTX0JPT0wgd2VuY2xvc2UoCisJCWNvbnN0IFdJTkRPVyAqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgbW91c2VpbnRlcnZhbAoraW50CW1vdXNlaW50ZXJ2YWwoCisJCWludAltYXhjbGljaykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2hhc19tb3VzZQoraW50CV9uY19oYXNfbW91c2Uodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd21vdXNlX3RyYWZvCitOQ1VSU0VTX0JPT0wgd21vdXNlX3RyYWZvKAorCQljb25zdCBXSU5ET1cgKndpbiwgCisJCWludAkqcFksIAorCQlpbnQJKnBYLCAKKwkJTkNVUlNFU19CT09MIHRvX3NjcmVlbikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX21vdmUuYyAqLworCisjdW5kZWYgd21vdmUKK2ludAl3bW92ZSgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHR5L2xpYl9tdmN1ci5jICovCisKKyN1bmRlZiBfbmNfbXNlY19jb3N0CitpbnQJX25jX21zZWNfY29zdCgKKwkJY29uc3QgY2hhciAqY29uc3QgY2FwLCAKKwkJaW50CWFmZmNudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX212Y3VyX3Jlc3VtZQordm9pZAlfbmNfbXZjdXJfcmVzdW1lKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbXZjdXJfaW5pdAordm9pZAlfbmNfbXZjdXJfaW5pdCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX212Y3VyX3dyYXAKK3ZvaWQJX25jX212Y3VyX3dyYXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG12Y3VyCitpbnQJbXZjdXIoCisJCWludAl5b2xkLCAKKwkJaW50CXhvbGQsIAorCQlpbnQJeW5ldywgCisJCWludAl4bmV3KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfb3B0aW1pemVfZW5hYmxlCitpbnQJX25jX29wdGltaXplX2VuYWJsZTsKKworLyogLi9iYXNlL2xpYl9tdndpbi5jICovCisKKyN1bmRlZiBtdndpbgoraW50CW12d2luKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlieSwgCisJCWludAlieCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX25ld3Rlcm0uYyAqLworCisjdW5kZWYgZmlsdGVyCit2b2lkCWZpbHRlcih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbm9maWx0ZXIKK3ZvaWQJbm9maWx0ZXIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG5ld3Rlcm0KK1NDUkVFTgkqbmV3dGVybSgKKwkJY2hhcgkqbmFtZSwgCisJCUZJTEUJKm9mcCwgCisJCUZJTEUJKmlmcCkKKwkJeyByZXR1cm4oKihTQ1JFRU4gKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9uZXd3aW4uYyAqLworCisjdW5kZWYgX25jX2ZyZWV3aW4KK2ludAlfbmNfZnJlZXdpbigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5ld3dpbgorV0lORE9XCSpuZXd3aW4oCisJCWludAludW1fbGluZXMsIAorCQlpbnQJbnVtX2NvbHVtbnMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgZGVyd2luCitXSU5ET1cJKmRlcndpbigKKwkJV0lORE9XCSpvcmlnLCAKKwkJaW50CW51bV9saW5lcywgCisJCWludAludW1fY29sdW1ucywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBzdWJ3aW4KK1dJTkRPVwkqc3Vid2luKAorCQlXSU5ET1cJKncsIAorCQlpbnQJbCwgCisJCWludAljLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIF9uY19tYWtlbmV3CitXSU5ET1cJKl9uY19tYWtlbmV3KAorCQlpbnQJbnVtX2xpbmVzLCAKKwkJaW50CW51bV9jb2x1bW5zLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCwgCisJCWludAlmbGFncykKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIF9uY19zY3JlZW5fb2YKK1NDUkVFTgkqX25jX3NjcmVlbl9vZigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbmwuYyAqLworCisjdW5kZWYgbmwKK2ludAlubCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub25sCitpbnQJbm9ubCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfb3ZlcmxheS5jICovCisKKyN1bmRlZiBvdmVybGF5CitpbnQJb3ZlcmxheSgKKwkJY29uc3QgV0lORE9XICp3aW4xLCAKKwkJV0lORE9XCSp3aW4yKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBvdmVyd3JpdGUKK2ludAlvdmVyd3JpdGUoCisJCWNvbnN0IFdJTkRPVyAqd2luMSwgCisJCVdJTkRPVwkqd2luMikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY29weXdpbgoraW50CWNvcHl3aW4oCisJCWNvbnN0IFdJTkRPVyAqc3JjLCAKKwkJV0lORE9XCSpkc3QsIAorCQlpbnQJc21pbnJvdywgCisJCWludAlzbWluY29sLCAKKwkJaW50CWRtaW5yb3csIAorCQlpbnQJZG1pbmNvbCwgCisJCWludAlkbWF4cm93LCAKKwkJaW50CWRtYXhjb2wsIAorCQlpbnQJb3ZlcikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3BhZC5jICovCisKKyN1bmRlZiBuZXdwYWQKK1dJTkRPVwkqbmV3cGFkKAorCQlpbnQJbCwgCisJCWludAljKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgc3VicGFkCitXSU5ET1cJKnN1YnBhZCgKKwkJV0lORE9XCSpvcmlnLCAKKwkJaW50CWwsIAorCQlpbnQJYywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBwcmVmcmVzaAoraW50CXByZWZyZXNoKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlwbWlucm93LCAKKwkJaW50CXBtaW5jb2wsIAorCQlpbnQJc21pbnJvdywgCisJCWludAlzbWluY29sLCAKKwkJaW50CXNtYXhyb3csIAorCQlpbnQJc21heGNvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcG5vdXRyZWZyZXNoCitpbnQJcG5vdXRyZWZyZXNoKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlwbWlucm93LCAKKwkJaW50CXBtaW5jb2wsIAorCQlpbnQJc21pbnJvdywgCisJCWludAlzbWluY29sLCAKKwkJaW50CXNtYXhyb3csIAorCQlpbnQJc21heGNvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcGVjaG9jaGFyCitpbnQJcGVjaG9jaGFyKAorCQlXSU5ET1cJKnBhZCwgCisJCWNvbnN0IGNodHlwZSBjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3ByaW50dy5jICovCisKKyN1bmRlZiBwcmludHcKK2ludAlwcmludHcoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3ByaW50dworaW50CXdwcmludHcoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnByaW50dworaW50CW12cHJpbnR3KAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndwcmludHcKK2ludAltdndwcmludHcoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdndwcmludHcKK2ludAl2d3ByaW50dygKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFyZ3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9yZWRyYXdsbi5jICovCisKKyN1bmRlZiB3cmVkcmF3bG4KK2ludAl3cmVkcmF3bG4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWJlZywgCisJCWludAludW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9yZWZyZXNoLmMgKi8KKworI3VuZGVmIHdyZWZyZXNoCitpbnQJd3JlZnJlc2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3bm91dHJlZnJlc2gKK2ludAl3bm91dHJlZnJlc2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcmVzdGFydC5jICovCisKKyN1bmRlZiByZXN0YXJ0dGVybQoraW50CXJlc3RhcnR0ZXJtKAorCQljaGFyCSp0ZXJtcCwgCisJCWludAlmaWxlbnVtLCAKKwkJaW50CSplcnJyZXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY2Fudy5jICovCisKKyN1bmRlZiB2d3NjYW53CitpbnQJdndzY2FudygKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpmbXQsIAorCQl2YV9saXN0CWFyZ3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjYW53CitpbnQJc2NhbncoCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3NjYW53CitpbnQJd3NjYW53KAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZzY2FudworaW50CW12c2NhbncoCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3NjYW53CitpbnQJbXZ3c2NhbncoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjcmVlbi5jICovCisKKyN1bmRlZiBnZXR3aW4KK1dJTkRPVwkqZ2V0d2luKAorCQlGSUxFCSpmaWxlcCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHB1dHdpbgoraW50CXB1dHdpbigKKwkJV0lORE9XCSp3aW4sIAorCQlGSUxFCSpmaWxlcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX3Jlc3RvcmUKK2ludAlzY3JfcmVzdG9yZSgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX2R1bXAKK2ludAlzY3JfZHVtcCgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX2luaXQKK2ludAlzY3JfaW5pdCgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX3NldAoraW50CXNjcl9zZXQoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JvbGwuYyAqLworCisjdW5kZWYgX25jX3Njcm9sbF93aW5kb3cKK3ZvaWQJX25jX3Njcm9sbF93aW5kb3coCisJCVdJTkRPVwkqd2luLCAKKwkJaW50IGNvbnN0IG4sIAorCQlzaG9ydCBjb25zdCB0b3AsIAorCQlzaG9ydCBjb25zdCBib3R0b20sIAorCQljY2hhcl90CWJsYW5rKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd3NjcmwKK2ludAl3c2NybCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Njcm9sbG9rLmMgKi8KKworI3VuZGVmIHNjcm9sbG9rCitpbnQJc2Nyb2xsb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JyZWcuYyAqLworCisjdW5kZWYgd3NldHNjcnJlZworaW50CXdzZXRzY3JyZWcoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXRvcCwgCisJCWludAlib3R0b20pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zZXRfdGVybS5jICovCisKKyN1bmRlZiBzZXRfdGVybQorU0NSRUVOCSpzZXRfdGVybSgKKwkJU0NSRUVOCSpzY3JlZW5wKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisjdW5kZWYgZGVsc2NyZWVuCit2b2lkCWRlbHNjcmVlbigKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zZXR1cHNjcmVlbgoraW50CV9uY19zZXR1cHNjcmVlbigKKwkJaW50CXNsaW5lcywgCisJCWludAlzY29sdW1ucywgCisJCUZJTEUJKm91dHB1dCwgCisJCU5DVVJTRVNfQk9PTCBmaWx0ZXJlZCwgCisJCWludAlzbGtfZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmlwb2ZmbGluZQoraW50CV9uY19yaXBvZmZsaW5lKAorCQlpbnQJbGluZSwgCisJCWludAkoKmluaXQpKAorCQlXSU5ET1cJKnAxLCAKKwkJaW50CXAyKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmlwb2ZmbGluZQoraW50CXJpcG9mZmxpbmUoCisJCWludAlsaW5lLCAKKwkJaW50CSgqaW5pdCkoCisJCVdJTkRPVwkqcDEsIAorCQlpbnQJcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrLmMgKi8KKworI3VuZGVmIF9uY19zbGtfaW5pdGlhbGl6ZQoraW50CV9uY19zbGtfaW5pdGlhbGl6ZSgKKwkJV0lORE9XCSpzdHdpbiwgCisJCWludAljb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfcmVzdG9yZQoraW50CXNsa19yZXN0b3JlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGthdHJfc2V0LmMgKi8KKworI3VuZGVmIHNsa19hdHRyX3NldAoraW50CXNsa19hdHRyX3NldCgKKwkJY29uc3QgYXR0cl90IGF0dHIsIAorCQlzaG9ydAljb2xvcl9wYWlyX251bWJlciwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGthdHJvZi5jICovCisKKyN1bmRlZiBzbGtfYXR0cm9mZgoraW50CXNsa19hdHRyb2ZmKAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cm9uLmMgKi8KKworI3VuZGVmIHNsa19hdHRyb24KK2ludAlzbGtfYXR0cm9uKAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cnNldC5jICovCisKKyN1bmRlZiBzbGtfYXR0cnNldAoraW50CXNsa19hdHRyc2V0KAorCQljb25zdCBjaHR5cGUgYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0dHIuYyAqLworCisjdW5kZWYgc2xrX2F0dHIKK2F0dHJfdAlzbGtfYXR0cih2b2lkKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrY2xlYXIuYyAqLworCisjdW5kZWYgc2xrX2NsZWFyCitpbnQJc2xrX2NsZWFyKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtjb2xvci5jICovCisKKyN1bmRlZiBzbGtfY29sb3IKK2ludAlzbGtfY29sb3IoCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xraW5pdC5jICovCisKKyN1bmRlZiBzbGtfaW5pdAoraW50CXNsa19pbml0KAorCQlpbnQJZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrbGFiLmMgKi8KKworI3VuZGVmIHNsa19sYWJlbAorY2hhcgkqc2xrX2xhYmVsKAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrcmVmci5jICovCisKKyN1bmRlZiBzbGtfbm91dHJlZnJlc2gKK2ludAlzbGtfbm91dHJlZnJlc2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2xrX3JlZnJlc2gKK2ludAlzbGtfcmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrc2V0LmMgKi8KKworI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjdW5kZWYgc2xrX3NldAoraW50CXNsa19zZXQoCisJCWludAlpLCAKKwkJY29uc3QgY2hhciAqYXN0ciwgCisJCWludAlmb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGt0b3VjaC5jICovCisKKyN1bmRlZiBzbGtfdG91Y2gKK2ludAlzbGtfdG91Y2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3RvdWNoLmMgKi8KKworI3VuZGVmIGlzX2xpbmV0b3VjaGVkCitOQ1VSU0VTX0JPT0wgaXNfbGluZXRvdWNoZWQoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWxpbmUpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3dpbnRvdWNoZWQKK05DVVJTRVNfQk9PTCBpc193aW50b3VjaGVkKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgd3RvdWNobG4KK2ludAl3dG91Y2hsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAluLCAKKwkJaW50CWNoYW5nZWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2VkbXAuYyAqLworCisjdW5kZWYgX3RyYWNlZHVtcAordm9pZAlfdHJhY2VkdW1wKAorCQljb25zdCBjaGFyICpuYW1lLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlbXNlLmMgKi8KKworI3VuZGVmIF9uY190cmFjZW1vdXNlCitjaGFyCSpfbmNfdHJhY2Vtb3VzZSgKKwkJU0NSRUVOCSpzcCwgCisJCU1FVkVOVCBjb25zdCAqZXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlbW91c2UKK2NoYXIJKl90cmFjZW1vdXNlKAorCQlNRVZFTlQgY29uc3QgKmVwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90dHkvbGliX3RzdHAuYyAqLworCisjaW5jbHVkZSA8U2lnQWN0aW9uLmg+CisKKyN1bmRlZiBfbmNfc2lnbmFsX2hhbmRsZXIKK3ZvaWQJX25jX3NpZ25hbF9oYW5kbGVyKAorCQlOQ1VSU0VTX0JPT0wgZW5hYmxlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX3VuZ2V0Y2guYyAqLworCisjdW5kZWYgX25jX2ZpZm9fZHVtcAordm9pZAlfbmNfZmlmb19kdW1wKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VuZ2V0Y2gKK2ludAlfbmNfdW5nZXRjaCgKKwkJU0NSRUVOCSpzcCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5nZXRjaAoraW50CXVuZ2V0Y2goCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfdmlkYXR0ci5jICovCisKKyN1bmRlZiB2aWRwdXRzCitpbnQJdmlkcHV0cygKKwkJY2h0eXBlCW5ld21vZGUsIAorCQlpbnQJKCpvdXRjKSgKKwkJaW50CXAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmlkYXR0cgoraW50CXZpZGF0dHIoCisJCWNodHlwZQluZXdtb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0ZXJtYXR0cnMKK2NodHlwZQl0ZXJtYXR0cnModm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3ZsaW5lLmMgKi8KKworI3VuZGVmIHd2bGluZQoraW50CXd2bGluZSgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dhdHRyb2ZmLmMgKi8KKworI3VuZGVmIHdhdHRyX29mZgoraW50CXdhdHRyX29mZigKKwkJV0lORE9XCSp3aW4sIAorCQlhdHRyX3QJYXQsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2F0dHJvbi5jICovCisKKyN1bmRlZiB3YXR0cl9vbgoraW50CXdhdHRyX29uKAorCQlXSU5ET1cJKndpbiwgCisJCWF0dHJfdAlhdCwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93aW5jaC5jICovCisKKyN1bmRlZiB3aW5jaAorY2h0eXBlCXdpbmNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dpbmRvdy5jICovCisKKyN1bmRlZiBfbmNfc3luY2hvb2sKK3ZvaWQJX25jX3N5bmNob29rKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG12ZGVyd2luCitpbnQJbXZkZXJ3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3luY29rCitpbnQJc3luY29rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBiZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N5bmN1cAordm9pZAl3c3luY3VwKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHdzeW5jZG93bgordm9pZAl3c3luY2Rvd24oCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2N1cnN5bmN1cAordm9pZAl3Y3Vyc3luY3VwKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGR1cHdpbgorV0lORE9XCSpkdXB3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Jhc2UvbmNfcGFuZWwuYyAqLworCisjdW5kZWYgX25jX3BhbmVsaG9vaworc3RydWN0IHBhbmVsaG9vayAqX25jX3BhbmVsaG9vayh2b2lkKQorCQl7IHJldHVybigqKHN0cnVjdCBwYW5lbGhvb2sgKiopMCk7IH0KKworLyogLi9iYXNlL3NhZmVfc3ByaW50Zi5jICovCisKKyN1bmRlZiBfbmNfcHJpbnRmX3N0cmluZworY2hhcgkqX25jX3ByaW50Zl9zdHJpbmcoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCXZhX2xpc3QJYXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3R0eS90dHlfdXBkYXRlLmMgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisKKyN1bmRlZiBkb3VwZGF0ZQoraW50CWRvdXBkYXRlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zY3JvbGxuCitpbnQJX25jX3Njcm9sbG4oCisJCWludAluLCAKKwkJaW50CXRvcCwgCisJCWludAlib3QsIAorCQlpbnQJbWF4eSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NjcmVlbl9yZXN1bWUKK3ZvaWQJX25jX3NjcmVlbl9yZXN1bWUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JlZW5faW5pdAordm9pZAlfbmNfc2NyZWVuX2luaXQodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JlZW5fd3JhcAordm9pZAlfbmNfc2NyZWVuX3dyYXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kb194bWNfZ2xpdGNoCit2b2lkCV9uY19kb194bWNfZ2xpdGNoKAorCQlhdHRyX3QJcHJldmlvdXMpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHJhY2UvdmFyYXJncy5jICovCisKK3R5cGVkZWYgZW51bSB7CisgICAgYXRVbmtub3duID0gMCwgYXRJbnRlZ2VyLCBhdEZsb2F0LCBhdFBvaW50LCBhdFN0cmluZworfSBBUkdUWVBFOworCisjdW5kZWYgX25jX3ZhcmFyZ3MKK2NoYXIJKl9uY192YXJhcmdzKAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL21lbW1vdmUuYyAqLworCisjdW5kZWYgX25jX21lbW1vdmUKK3ZvaWQJX25jX21lbW1vdmUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL3Zzc2NhbmYuYyAqLworCisjdW5kZWYgX25jX3Zzc2NhbmYKK3ZvaWQJX25jX3Zzc2NhbmYodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9mcmVlYWxsLmMgKi8KKworI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworI3VuZGVmIF9uY19mcmVlYWxsCit2b2lkCV9uY19mcmVlYWxsKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZnJlZV9hbmRfZXhpdAordm9pZAlfbmNfZnJlZV9hbmRfZXhpdCgKKwkJaW50CWNvZGUpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vd2lkZWNoYXIvY2hhcmFibGUuYyAqLworCisjdW5kZWYgX25jX2lzX2NoYXJhYmxlCitOQ1VSU0VTX0JPT0wgX25jX2lzX2NoYXJhYmxlKAorCQl3Y2hhcl90CWNoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfdG9fY2hhcgoraW50CV9uY190b19jaGFyKAorCQl3aW50X3QJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY190b193aWRlY2hhcgord2ludF90CV9uY190b193aWRlY2hhcigKKwkJaW50CWNoKQorCQl7IHJldHVybigqKHdpbnRfdCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2FkZF93Y2guYyAqLworCisjdW5kZWYgd2FkZF93Y2gKK2ludAl3YWRkX3djaCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICp3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdlY2hvX3djaGFyCitpbnQJd2VjaG9fd2NoYXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCAqd2NoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2JveF9zZXQuYyAqLworCisjdW5kZWYgd2JvcmRlcl9zZXQKK2ludAl3Ym9yZGVyX3NldCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICpscywgCisJCWNvbnN0IGNjaGFyX3QgKnJzLCAKKwkJY29uc3QgY2NoYXJfdCAqdHMsIAorCQljb25zdCBjY2hhcl90ICpicywgCisJCWNvbnN0IGNjaGFyX3QgKnRsLCAKKwkJY29uc3QgY2NoYXJfdCAqdHIsIAorCQljb25zdCBjY2hhcl90ICpibCwgCisJCWNvbnN0IGNjaGFyX3QgKmJyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2NjaGFyLmMgKi8KKworI3VuZGVmIHNldGNjaGFyCitpbnQJc2V0Y2NoYXIoCisJCWNjaGFyX3QJKndjdmFsLCAKKwkJY29uc3Qgd2NoYXJfdCAqd2NoLCAKKwkJY29uc3QgYXR0cl90IGF0dHJzLCAKKwkJc2hvcnQJY29sb3JfcGFpciwgCisJCWNvbnN0IHZvaWQgKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGNjaGFyCitpbnQJZ2V0Y2NoYXIoCisJCWNvbnN0IGNjaGFyX3QgKndjdmFsLCAKKwkJd2NoYXJfdAkqd2NoLCAKKwkJYXR0cl90CSphdHRycywgCisJCXNob3J0CSpjb2xvcl9wYWlyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9lcmFzZXdjaGFyLmMgKi8KKworI3VuZGVmIGVyYXNld2NoYXIKK2ludAllcmFzZXdjaGFyKAorCQl3Y2hhcl90CSp3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGtpbGx3Y2hhcgoraW50CWtpbGx3Y2hhcigKKwkJd2NoYXJfdAkqd2NoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2dldF93Y2guYyAqLworCisjdW5kZWYgd2dldF93Y2gKK2ludAl3Z2V0X3djaCgKKwkJV0lORE9XCSp3aW4sIAorCQl3aW50X3QJKnJlc3VsdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9nZXRfd3N0ci5jICovCisKKyN1bmRlZiB3Z2V0bl93c3RyCitpbnQJd2dldG5fd3N0cigKKwkJV0lORE9XCSp3aW4sIAorCQl3aW50X3QJKnN0ciwgCisJCWludAltYXhsZW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfaGxpbmVfc2V0LmMgKi8KKworI3VuZGVmIHdobGluZV9zZXQKK2ludAl3aGxpbmVfc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNjaGFyX3QgKmNoLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfaW5fd2NoLmMgKi8KKworI3VuZGVmIHdpbl93Y2gKK2ludAl3aW5fd2NoKAorCQlXSU5ET1cJKndpbiwgCisJCWNjaGFyX3QJKndjdmFsKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2luX3djaG5zdHIuYyAqLworCisjdW5kZWYgd2luX3djaG5zdHIKK2ludAl3aW5fd2NobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljY2hhcl90CSp3Y2hzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9pbnNfd2NoLmMgKi8KKworI3VuZGVmIHdpbnNfd2NoCitpbnQJd2luc193Y2goCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCAqd2NoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zX253c3RyCitpbnQJd2luc19ud3N0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCB3Y2hhcl90ICp3c3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfaW53c3RyLmMgKi8KKworI3VuZGVmIHdpbm53c3RyCitpbnQJd2lubndzdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJd2NoYXJfdAkqd3N0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW53c3RyCitpbnQJd2lud3N0cigKKwkJV0lORE9XCSp3aW4sIAorCQl3Y2hhcl90CSp3c3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2tleV9uYW1lLmMgKi8KKworI3VuZGVmIGtleV9uYW1lCitjaGFyCSprZXlfbmFtZSgKKwkJd2NoYXJfdAljKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfcGVjaG9fd2NoYXIuYyAqLworCisjdW5kZWYgcGVjaG9fd2NoYXIKK2ludAlwZWNob193Y2hhcigKKwkJV0lORE9XCSpwYWQsIAorCQljb25zdCBjY2hhcl90ICp3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfc2xrX3dzZXQuYyAqLworCisjdW5kZWYgc2xrX3dzZXQKK2ludAlzbGtfd3NldCgKKwkJaW50CWksIAorCQljb25zdCB3Y2hhcl90ICphc3RyLCAKKwkJaW50CWZvcm1hdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl91bmdldF93Y2guYyAqLworCisjdW5kZWYgX25jX3djcnRvbWIKK3NpemVfdAlfbmNfd2NydG9tYigKKwkJY2hhcgkqdGFyZ2V0LCAKKwkJd2NoYXJfdAlzb3VyY2UsIAorCQltYnN0YXRlX3QgKnN0YXRlKQorCQl7IHJldHVybigqKHNpemVfdCAqKTApOyB9CisKKyN1bmRlZiB1bmdldF93Y2gKK2ludAl1bmdldF93Y2goCisJCWNvbnN0IHdjaGFyX3Qgd2NoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX3ZpZF9hdHRyLmMgKi8KKworI3VuZGVmIHZpZF9wdXRzCitpbnQJdmlkX3B1dHMoCisJCWF0dHJfdAluZXdtb2RlLCAKKwkJc2hvcnQJcGFpciwgCisJCXZvaWQJKm9wdHMsIAorCQlpbnQJKCpvdXRjKSgKKwkJaW50CXAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmlkX2F0dHIKK2ludAl2aWRfYXR0cigKKwkJYXR0cl90CW5ld21vZGUsIAorCQlzaG9ydAlwYWlyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGVybV9hdHRycworYXR0cl90CXRlcm1fYXR0cnModm9pZCkKKwkJeyByZXR1cm4oKihhdHRyX3QgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl92bGluZV9zZXQuYyAqLworCisjdW5kZWYgd3ZsaW5lX3NldAoraW50CXd2bGluZV9zZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCAqY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl93YWNzLmMgKi8KKworI3VuZGVmIF9uY193YWNzCitjY2hhcl90CSpfbmNfd2FjczsKKworI3VuZGVmIF9uY19pbml0X3dhY3MKK3ZvaWQJX25jX2luaXRfd2Fjcyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3dpZGVjaGFyL2xpYl93dW5jdHJsLmMgKi8KKworI3VuZGVmIHd1bmN0cmwKK3djaGFyX3QJKnd1bmN0cmwoCisJCWNjaGFyX3QJKndjKQorCQl7IHJldHVybigqKHdjaGFyX3QgKiopMCk7IH0KKworLyogLi9leHBhbmRlZC5jICovCisKKyN1bmRlZiBfbmNfdG9nZ2xlX2F0dHJfb24KK3ZvaWQJX25jX3RvZ2dsZV9hdHRyX29uKAorCQlhdHRyX3QJKlMsIAorCQlhdHRyX3QJYXQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdG9nZ2xlX2F0dHJfb2ZmCit2b2lkCV9uY190b2dnbGVfYXR0cl9vZmYoCisJCWF0dHJfdAkqUywgCisJCWF0dHJfdAlhdCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19EZWxDaGFyQ29zdAoraW50CV9uY19EZWxDaGFyQ29zdCgKKwkJaW50CWNvdW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfSW5zQ2hhckNvc3QKK2ludAlfbmNfSW5zQ2hhckNvc3QoCisJCWludAljb3VudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1VwZGF0ZUF0dHJzCit2b2lkCV9uY19VcGRhdGVBdHRycygKKwkJY2NoYXJfdAljKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGVnYWN5X2NvZGluZy5jICovCisKKyN1bmRlZiB1c2VfbGVnYWN5X2NvZGluZworaW50CXVzZV9sZWdhY3lfY29kaW5nKAorCQlpbnQJbGV2ZWwpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZnRfZmdiZy5jICovCisKKyN1bmRlZiB1c2VfZGVmYXVsdF9jb2xvcnMKK2ludAl1c2VfZGVmYXVsdF9jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXNzdW1lX2RlZmF1bHRfY29sb3JzCitpbnQJYXNzdW1lX2RlZmF1bHRfY29sb3JzKAorCQlpbnQJZmcsIAorCQlpbnQJYmcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfcHJpbnQuYyAqLworCisjdW5kZWYgbWNwcmludAoraW50CW1jcHJpbnQoCisJCWNoYXIJKmRhdGEsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9yZXNpemV0ZXJtLmMgKi8KKworI3VuZGVmIGlzX3Rlcm1fcmVzaXplZAorTkNVUlNFU19CT09MIGlzX3Rlcm1fcmVzaXplZCgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiByZXNpemVfdGVybQoraW50CXJlc2l6ZV90ZXJtKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2l6ZXRlcm0KK2ludAlyZXNpemV0ZXJtKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV94bmFtZXMuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX3huYW1lcwordm9pZAlfbmNfdHJhY2VfeG5hbWVzKAorCQlURVJNVFlQRSAqdHApCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vdXNlX3NjcmVlbi5jICovCisKKyN1bmRlZiB1c2Vfc2NyZWVuCitpbnQJdXNlX3NjcmVlbigKKwkJU0NSRUVOCSpzY3JlZW4sIAorCQlOQ1VSU0VTX1NDUkVFTl9DQiBmdW5jLCAKKwkJdm9pZAkqZGF0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvdXNlX3dpbmRvdy5jICovCisKKyN1bmRlZiB1c2Vfd2luZG93CitpbnQJdXNlX3dpbmRvdygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX1dJTkRPV19DQiBmdW5jLCAKKwkJdm9pZAkqZGF0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2Uvd3Jlc2l6ZS5jICovCisKKyN1bmRlZiB3cmVzaXplCitpbnQJd3Jlc2l6ZSgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hY2Nlc3MuYyAqLworCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxuY19hbGxvYy5oPgorCisjdW5kZWYgX25jX3Jvb3RuYW1lCitjaGFyCSpfbmNfcm9vdG5hbWUoCisJCWNoYXIJKnBhdGgpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2lzX2Fic19wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2Fic19wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcGF0aGxhc3QKK3Vuc2lnbmVkIF9uY19wYXRobGFzdCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKih1bnNpZ25lZCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYmFzZW5hbWUKK2NoYXIJKl9uY19iYXNlbmFtZSgKKwkJY2hhcgkqcGF0aCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfYWNjZXNzCitpbnQJX25jX2FjY2VzcygKKwkJY29uc3QgY2hhciAqcGF0aCwgCisJCWludAltb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaXNfZGlyX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfZGlyX3BhdGgoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19pc19maWxlX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfZmlsZV9wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZW52X2FjY2VzcworaW50CV9uY19lbnZfYWNjZXNzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hZGRfdHJpZXMuYyAqLworCisjdW5kZWYgX25jX2FkZF90b190cnkKK2ludAlfbmNfYWRkX3RvX3RyeSgKKwkJVFJJRVMJKip0cmVlLCAKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2FsbG9jX3R0eXBlLmMgKi8KKworI3VuZGVmIF9uY19hbGlnbl90ZXJtdHlwZQordm9pZAlfbmNfYWxpZ25fdGVybXR5cGUoCisJCVRFUk1UWVBFICp0bywgCisJCVRFUk1UWVBFICpmcm9tKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2NvcHlfdGVybXR5cGUKK3ZvaWQJX25jX2NvcHlfdGVybXR5cGUoCisJCVRFUk1UWVBFICpkc3QsIAorCQlURVJNVFlQRSAqc3JjKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2NvZGVzLmMgKi8KKworI3VuZGVmIGJvb2xjb2RlcworY2hhcgkqY29uc3QgYm9vbGNvZGVzW10gPSB7MH07CisjdW5kZWYgbnVtY29kZXMKK2NoYXIJKmNvbnN0IG51bWNvZGVzW10gPSB7MH07CisjdW5kZWYgc3RyY29kZXMKK2NoYXIJKmNvbnN0IHN0cmNvZGVzW10gPSB7MH07CisKKy8qIC4vdGluZm8vY29tcF9lcnJvci5jICovCisjdW5kZWYgX25jX3N1cHByZXNzX3dhcm5pbmdzCitOQ1VSU0VTX0JPT0wgX25jX3N1cHByZXNzX3dhcm5pbmdzOworI3VuZGVmIF9uY19jdXJyX2xpbmUKK2ludAlfbmNfY3Vycl9saW5lOworI3VuZGVmIF9uY19jdXJyX2NvbAoraW50CV9uY19jdXJyX2NvbDsKKworI3VuZGVmIF9uY19nZXRfc291cmNlCitjb25zdCBjaGFyICpfbmNfZ2V0X3NvdXJjZSh2b2lkKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19zZXRfc291cmNlCit2b2lkCV9uY19zZXRfc291cmNlKAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NldF90eXBlCit2b2lkCV9uY19zZXRfdHlwZSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfdHlwZQordm9pZAlfbmNfZ2V0X3R5cGUoCisJCWNoYXIJKm5hbWUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfd2FybmluZwordm9pZAlfbmNfd2FybmluZygKKwkJY29uc3QgY2hhciAqY29uc3QgZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2Vycl9hYm9ydAordm9pZAlfbmNfZXJyX2Fib3J0KAorCQljb25zdCBjaGFyICpjb25zdCBmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc3lzZXJyX2Fib3J0Cit2b2lkCV9uY19zeXNlcnJfYWJvcnQoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9kYl9pdGVyYXRvci5jICovCisKKyN1bmRlZiBfbmNfdGljX2RpcgorY29uc3QgY2hhciAqX25jX3RpY19kaXIoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2tlZXBfdGljX2Rpcgordm9pZAlfbmNfa2VlcF90aWNfZGlyKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2xhc3RfZGIKK3ZvaWQJX25jX2xhc3RfZGIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19uZXh0X2RiCitjb25zdCBjaGFyICpfbmNfbmV4dF9kYigKKwkJREJESVJTCSpzdGF0ZSwgCisJCWludAkqb2Zmc2V0KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19maXJzdF9kYgordm9pZAlfbmNfZmlyc3RfZGIoCisJCURCRElSUwkqc3RhdGUsIAorCQlpbnQJKm9mZnNldCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9kb2FsbG9jLmMgKi8KKworI3VuZGVmIF9uY19kb2FsbG9jCit2b2lkCSpfbmNfZG9hbGxvYygKKwkJdm9pZAkqb2xkcCwgCisJCXNpemVfdAlhbW91bnQpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL3RpbmZvL2VudHJpZXMuYyAqLworCisjdW5kZWYgX25jX2hlYWQKK0VOVFJZCSpfbmNfaGVhZDsKKyN1bmRlZiBfbmNfdGFpbAorRU5UUlkJKl9uY190YWlsOworCisjdW5kZWYgX25jX2ZyZWVfZW50cnkKK3ZvaWQJX25jX2ZyZWVfZW50cnkoCisJCUVOVFJZCSpoZWFkcCwgCisJCVRFUk1UWVBFICp0dGVybSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19mcmVlX2VudHJpZXMKK3ZvaWQJX25jX2ZyZWVfZW50cmllcygKKwkJRU5UUlkJKmhlYWRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2RlbGlua19lbnRyeQorRU5UUlkJKl9uY19kZWxpbmtfZW50cnkoCisJCUVOVFJZCSpoZWFkcCwgCisJCVRFUk1UWVBFICp0dGVybSkKKwkJeyByZXR1cm4oKihFTlRSWSAqKikwKTsgfQorCisjdW5kZWYgX25jX2xlYWtzX3RpbmZvCit2b2lkCV9uY19sZWFrc190aW5mbyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2ZhbGxiYWNrLmMgKi8KKworI3VuZGVmIF9uY19mYWxsYmFjaworY29uc3QgVEVSTVRZUEUgKl9uY19mYWxsYmFjaygKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihjb25zdCBURVJNVFlQRSAqKikwKTsgfQorCisvKiAuL3RpbmZvL2ZyZWVfdHR5cGUuYyAqLworCisjdW5kZWYgX25jX2ZyZWVfdGVybXR5cGUKK3ZvaWQJX25jX2ZyZWVfdGVybXR5cGUoCisJCVRFUk1UWVBFICpwdHIpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdXNlcl9kZWZpbmFibGUKK05DVVJTRVNfQk9PTCBfbmNfdXNlcl9kZWZpbmFibGU7CisKKyN1bmRlZiB1c2VfZXh0ZW5kZWRfbmFtZXMKK2ludAl1c2VfZXh0ZW5kZWRfbmFtZXMoCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vZ2V0ZW52X251bS5jICovCisKKyN1bmRlZiBfbmNfZ2V0ZW52X251bQoraW50CV9uY19nZXRlbnZfbnVtKAorCQljb25zdCBjaGFyICpuYW1lKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vaG9tZV90ZXJtaW5mby5jICovCisKKyN1bmRlZiBfbmNfaG9tZV90ZXJtaW5mbworY2hhcgkqX25jX2hvbWVfdGVybWluZm8odm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vaW5pdF9rZXl0cnkuYyAqLworCisjaWYgMAorCisjaW5jbHVkZSA8aW5pdF9rZXl0cnkuaD4KKworI3VuZGVmIF9uY190aW5mb19ma2V5cworY29uc3Qgc3RydWN0IHRpbmZvX2ZrZXlzIF9uY190aW5mb19ma2V5c1tdID0gezB9OworCisjZW5kaWYKKworI3VuZGVmIF9uY19pbml0X2tleXRyeQordm9pZAlfbmNfaW5pdF9rZXl0cnkoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vbGliX2Fjcy5jICovCisKKyN1bmRlZiBhY3NfbWFwCitjaHR5cGUJYWNzX21hcFsxMjhdOworCisjdW5kZWYgX25jX2luaXRfYWNzCit2b2lkCV9uY19pbml0X2Fjcyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2xpYl9iYXVkcmF0ZS5jICovCisKKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisKK3N0cnVjdCBzcGVlZCB7CisgICAgaW50IHM7IAorICAgIGludCBzcDsgCit9OworCisjdW5kZWYgX25jX2JhdWRyYXRlCitpbnQJX25jX2JhdWRyYXRlKAorCQlpbnQJT1NwZWVkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfb3NwZWVkCitpbnQJX25jX29zcGVlZCgKKwkJaW50CUJhdWRSYXRlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBiYXVkcmF0ZQoraW50CWJhdWRyYXRlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfY3VyX3Rlcm0uYyAqLworCisjdW5kZWYgY3VyX3Rlcm0KK1RFUk1JTkFMICpjdXJfdGVybTsKKworI3VuZGVmIHNldF9jdXJ0ZXJtCitURVJNSU5BTCAqc2V0X2N1cnRlcm0oCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihURVJNSU5BTCAqKikwKTsgfQorCisjdW5kZWYgZGVsX2N1cnRlcm0KK2ludAlkZWxfY3VydGVybSgKKwkJVEVSTUlOQUwgKnRlcm1wKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2RhdGEuYyAqLworCisjdW5kZWYgc3Rkc2NyCitXSU5ET1cJKnN0ZHNjcjsKKyN1bmRlZiBjdXJzY3IKK1dJTkRPVwkqY3Vyc2NyOworI3VuZGVmIG5ld3NjcgorV0lORE9XCSpuZXdzY3I7CisjdW5kZWYgX25jX3NjcmVlbl9jaGFpbgorU0NSRUVOCSpfbmNfc2NyZWVuX2NoYWluOworI3VuZGVmIFNQCitTQ1JFRU4JKlNQOworI3VuZGVmIF9uY19nbG9iYWxzCitOQ1VSU0VTX0dMT0JBTFMgX25jX2dsb2JhbHM7CisjdW5kZWYgX25jX3ByZXNjcmVlbgorTkNVUlNFU19QUkVTQ1JFRU4gX25jX3ByZXNjcmVlbjsKKworLyogLi90aW5mby9saWJfaGFzX2NhcC5jICovCisKKyN1bmRlZiBoYXNfaWMKK05DVVJTRVNfQk9PTCBoYXNfaWModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaGFzX2lsCitOQ1VSU0VTX0JPT0wgaGFzX2lsKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi90aW5mby9saWJfa2VybmVsLmMgKi8KKworI3VuZGVmIGVyYXNlY2hhcgorY2hhcgllcmFzZWNoYXIodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICopMCk7IH0KKworI3VuZGVmIGtpbGxjaGFyCitjaGFyCWtpbGxjaGFyKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKTApOyB9CisKKyN1bmRlZiBmbHVzaGlucAoraW50CWZsdXNoaW5wKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9saWJfa2V5bmFtZS5jICovCisKK3N0cnVjdCBrbiB7IHNob3J0IG9mZnNldDsgaW50IGNvZGU7IH07CisKKyN1bmRlZiBfbmNfa2V5bmFtZQorY2hhcgkqX25jX2tleW5hbWUoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBrZXluYW1lCitjaGFyCSprZXluYW1lKAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2xvbmduYW1lLmMgKi8KKworI3VuZGVmIGxvbmduYW1lCitjaGFyCSpsb25nbmFtZSh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfbmFwbXMuYyAqLworCisjaW5jbHVkZSA8dGltZS5oPgorCisjdW5kZWYgbmFwbXMKK2ludAluYXBtcygKKwkJaW50CW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX29wdGlvbnMuYyAqLworCisjdW5kZWYgaWRsb2sKK2ludAlpZGxvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaWRjb2sKK3ZvaWQJaWRjb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBoYWxmZGVsYXkKK2ludAloYWxmZGVsYXkoCisJCWludAl0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2RlbGF5CitpbnQJbm9kZWxheSgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm90aW1lb3V0CitpbnQJbm90aW1lb3V0KAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3dGltZW91dAordm9pZAl3dGltZW91dCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJZGVsYXkpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBrZXlwYWQKK2ludAlrZXlwYWQoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1ldGEKK2ludAltZXRhKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjdXJzX3NldAoraW50CWN1cnNfc2V0KAorCQlpbnQJdmlzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0eXBlYWhlYWQKK2ludAl0eXBlYWhlYWQoCisJCWludAlmZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaGFzX2tleQoraW50CWhhc19rZXkoCisJCWludAlrZXljb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfa2V5cGFkCitpbnQJX25jX2tleXBhZCgKKwkJU0NSRUVOCSpzcCwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Jhdy5jICovCisKKyN1bmRlZiByYXcKK2ludAlyYXcodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2JyZWFrCitpbnQJY2JyZWFrKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHFpZmx1c2gKK3ZvaWQJcWlmbHVzaCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbm9yYXcKK2ludAlub3Jhdyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2NicmVhaworaW50CW5vY2JyZWFrKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vcWlmbHVzaAordm9pZAlub3FpZmx1c2godm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGludHJmbHVzaAoraW50CWludHJmbHVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9zZXR1cC5jICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsYW5naW5mby5oPgorCisjdW5kZWYgdHR5dHlwZQorY2hhcgl0dHl0eXBlWzI1Nl07CisjdW5kZWYgTElORVMKK2ludAlMSU5FUzsKKyN1bmRlZiBDT0xTCitpbnQJQ09MUzsKKyN1bmRlZiBUQUJTSVpFCitpbnQJVEFCU0laRTsKKworI3VuZGVmIHNldF90YWJzaXplCitpbnQJc2V0X3RhYnNpemUoCisJCWludAl2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2hhbmRsZV9zaWd3aW5jaAoraW50CV9uY19oYW5kbGVfc2lnd2luY2goCisJCVNDUkVFTgkqc3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVzZV9lbnYKK3ZvaWQJdXNlX2VudigKKwkJTkNVUlNFU19CT09MIGYpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3NjcmVlbnNpemUKK3ZvaWQJX25jX2dldF9zY3JlZW5zaXplKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CSpsaW5lcCwgCisJCWludAkqY29scCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY191cGRhdGVfc2NyZWVuc2l6ZQordm9pZAlfbmNfdXBkYXRlX3NjcmVlbnNpemUoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X2xvY2FsZQorY2hhcgkqX25jX2dldF9sb2NhbGUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdW5pY29kZV9sb2NhbGUKK2ludAlfbmNfdW5pY29kZV9sb2NhbGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2xvY2FsZV9icmVha3NfYWNzCitpbnQJX25jX2xvY2FsZV9icmVha3NfYWNzKAorCQlURVJNSU5BTCAqdGVybXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zZXR1cHRlcm0KK2ludAlfbmNfc2V0dXB0ZXJtKAorCQljaGFyCSp0bmFtZSwgCisJCWludAlGaWxlZGVzLCAKKwkJaW50CSplcnJyZXQsIAorCQlOQ1VSU0VTX0JPT0wgcmV1c2UpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldHVwdGVybQoraW50CXNldHVwdGVybSgKKwkJY2hhcgkqdG5hbWUsIAorCQlpbnQJRmlsZWRlcywgCisJCWludAkqZXJycmV0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Rlcm1jYXAuYyAqLworCisjdW5kZWYgVVAKK2NoYXIJKlVQOworI3VuZGVmIEJDCitjaGFyCSpCQzsKKworI3VuZGVmIHRnZXRlbnQKK2ludAl0Z2V0ZW50KAorCQljaGFyCSpidWZwLCAKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjaWYgMAorCisjaW5jbHVkZSA8Y2FwZGVmYXVsdHMuYz4KKworI2VuZGlmCisKKyN1bmRlZiB0Z2V0ZmxhZworaW50CXRnZXRmbGFnKAorCQljaGFyCSppZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGdldG51bQoraW50CXRnZXRudW0oCisJCWNoYXIJKmlkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0Z2V0c3RyCitjaGFyCSp0Z2V0c3RyKAorCQljaGFyCSppZCwgCisJCWNoYXIJKiphcmVhKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdGVybW5hbWUuYyAqLworCisjdW5kZWYgdGVybW5hbWUKK2NoYXIJKnRlcm1uYW1lKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90Z290by5jICovCisKKyN1bmRlZiB0Z290bworY2hhcgkqdGdvdG8oCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWludAl4LCAKKwkJaW50CXkpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90aS5jICovCisKKyN1bmRlZiB0aWdldGZsYWcKK2ludAl0aWdldGZsYWcoCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGlnZXRudW0KK2ludAl0aWdldG51bSgKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aWdldHN0cgorY2hhcgkqdGlnZXRzdHIoCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RwYXJtLmMgKi8KKworI3VuZGVmIF9uY190cGFybV9lcnIKK2ludAlfbmNfdHBhcm1fZXJyOworCisjdW5kZWYgX25jX3RwYXJtX2FuYWx5emUKK2ludAlfbmNfdHBhcm1fYW5hbHl6ZSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJY2hhcgkqcF9pc19zWzldLCAKKwkJaW50CSpwb3Bjb3VudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHBhcm0KK2NoYXIJKnRwYXJtKAorCQljaGFyCSpzdHJpbmcsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90cHV0cy5jICovCisKKyN1bmRlZiBQQworY2hhcglQQzsKKyN1bmRlZiBvc3BlZWQKK05DVVJTRVNfT1NQRUVECW9zcGVlZDsKKyN1bmRlZiBfbmNfbnVsbHNfc2VudAoraW50CV9uY19udWxsc19zZW50OworCisjdW5kZWYgX25jX3NldF9ub19wYWRkaW5nCit2b2lkCV9uY19zZXRfbm9fcGFkZGluZygKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGRlbGF5X291dHB1dAoraW50CWRlbGF5X291dHB1dCgKKwkJaW50CW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZmx1c2gKK3ZvaWQJX25jX2ZsdXNoKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfb3V0Y2gKK2ludAlfbmNfb3V0Y2goCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcHV0cAoraW50CXB1dHAoCisJCWNvbnN0IGNoYXIgKnN0cmluZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHB1dHMKK2ludAl0cHV0cygKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CWFmZmNudCwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlLmMgKi8KKworI3VuZGVmIF9uY190cmFjaW5nCit1bnNpZ25lZCBfbmNfdHJhY2luZzsKKyN1bmRlZiBfbmNfdHB1dHNfdHJhY2UKK2NvbnN0IGNoYXIgKl9uY190cHV0c190cmFjZSA9IHswfTsKKyN1bmRlZiBfbmNfb3V0Y2hhcnMKK2xvbmcJX25jX291dGNoYXJzOworCisjdW5kZWYgdHJhY2UKK3ZvaWQJdHJhY2UoCisJCWNvbnN0IHVuc2lnbmVkIGludCB0cmFjZWxldmVsKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX3RyYWNlZgordm9pZAlfdHJhY2VmKAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9ib29sCitOQ1VSU0VTX0JPT0wgX25jX3JldHJhY2VfYm9vbCgKKwkJTkNVUlNFU19CT09MIGNvZGUpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2ludAoraW50CV9uY19yZXRyYWNlX2ludCgKKwkJaW50CWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3Vuc2lnbmVkCit1bnNpZ25lZCBfbmNfcmV0cmFjZV91bnNpZ25lZCgKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKih1bnNpZ25lZCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9wdHIKK2NoYXIJKl9uY19yZXRyYWNlX3B0cigKKwkJY2hhcgkqY29kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9jcHRyCitjb25zdCBjaGFyICpfbmNfcmV0cmFjZV9jcHRyKAorCQljb25zdCBjaGFyICpjb2RlKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2N2b2lkX3B0cgordm9pZAkqX25jX3JldHJhY2VfY3ZvaWRfcHRyKAorCQl2b2lkCSpjb2RlKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3ZvaWRfcHRyCit2b2lkCSpfbmNfcmV0cmFjZV92b2lkX3B0cigKKwkJdm9pZAkqY29kZSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9zcAorU0NSRUVOCSpfbmNfcmV0cmFjZV9zcCgKKwkJU0NSRUVOCSpjb2RlKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2Vfd2luCitXSU5ET1cJKl9uY19yZXRyYWNlX3dpbigKKwkJV0lORE9XCSpjb2RlKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWF0ci5jICovCisKKyN1bmRlZiBfdHJhY2VhdHRyMgorY2hhcgkqX3RyYWNlYXR0cjIoCisJCWludAlidWZudW0sIAorCQljaHR5cGUJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VhdHRyCitjaGFyCSpfdHJhY2VhdHRyKAorCQlhdHRyX3QJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9hdHRyX3QKK2F0dHJfdAlfbmNfcmV0cmFjZV9hdHRyX3QoCisJCWF0dHJfdAljb2RlKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYWx0Y2hhcnNldF9uYW1lCitjb25zdCBjaGFyICpfbmNfYWx0Y2hhcnNldF9uYW1lKAorCQlhdHRyX3QJYXR0ciwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaHR5cGUyCitjaGFyCSpfdHJhY2VjaHR5cGUyKAorCQlpbnQJYnVmbnVtLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNodHlwZQorY2hhcgkqX3RyYWNlY2h0eXBlKAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfY2h0eXBlCitjaHR5cGUJX25jX3JldHJhY2VfY2h0eXBlKAorCQljaHR5cGUJY29kZSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgX3RyYWNlY2NoYXJfdDIKK2NoYXIJKl90cmFjZWNjaGFyX3QyKAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2NoYXJfdCAqY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlY2NoYXJfdAorY2hhcgkqX3RyYWNlY2NoYXJfdCgKKwkJY29uc3QgY2NoYXJfdCAqY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWJpdHMuYyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IHZhbDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfSBCSVROQU1FUzsKKworI3VuZGVmIF9uY190cmFjZV90dHltb2RlCitjaGFyCSpfbmNfdHJhY2VfdHR5bW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKnR0eSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhY2ViaXRzCitjaGFyCSpfbmNfdHJhY2ViaXRzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWNoci5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VjaGFyCitjaGFyCSpfbmNfdHJhY2VjaGFyKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNoYXIKK2NoYXIJKl90cmFjZWNoYXIoCisJCWludAljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3R0eWZsYWdzLmMgKi8KKworI3VuZGVmIF9uY19nZXRfdHR5X21vZGUKK2ludAlfbmNfZ2V0X3R0eV9tb2RlKAorCQlzdHJ1Y3QgdGVybWlvcyAqYnVmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2V0X3R0eV9tb2RlCitpbnQJX25jX3NldF90dHlfbW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKmJ1ZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVmX3NoZWxsX21vZGUKK2ludAlkZWZfc2hlbGxfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWZfcHJvZ19tb2RlCitpbnQJZGVmX3Byb2dfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNldF9wcm9nX21vZGUKK2ludAlyZXNldF9wcm9nX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXRfc2hlbGxfbW9kZQoraW50CXJlc2V0X3NoZWxsX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2F2ZXR0eQoraW50CXNhdmV0dHkodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXR0eQoraW50CXJlc2V0dHkodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfdHdhaXQuYyAqLworCisjdW5kZWYgX25jX3RpbWVkX3dhaXQKK2ludAlfbmNfdGltZWRfd2FpdCgKKwkJU0NSRUVOCSpzcCwgCisJCWludAltb2RlLCAKKwkJaW50CW1pbGxpc2Vjb25kcywgCisJCWludAkqdGltZWxlZnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9uYW1lX21hdGNoLmMgKi8KKworI3VuZGVmIF9uY19maXJzdF9uYW1lCitjaGFyCSpfbmNfZmlyc3RfbmFtZSgKKwkJY29uc3QgY2hhciAqY29uc3Qgc3ApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX25hbWVfbWF0Y2gKK2ludAlfbmNfbmFtZV9tYXRjaCgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZWxzdCwgCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIAorCQljb25zdCBjaGFyICpjb25zdCBkZWxpbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL25hbWVzLmMgKi8KKworI3VuZGVmIGJvb2xuYW1lcworY2hhcgkqY29uc3QgYm9vbG5hbWVzW10gPSB7MH07CisjdW5kZWYgYm9vbGZuYW1lcworY2hhcgkqY29uc3QgYm9vbGZuYW1lc1tdID0gezB9OworI3VuZGVmIG51bW5hbWVzCitjaGFyCSpjb25zdCBudW1uYW1lc1tdID0gezB9OworI3VuZGVmIG51bWZuYW1lcworY2hhcgkqY29uc3QgbnVtZm5hbWVzW10gPSB7MH07CisjdW5kZWYgc3RybmFtZXMKK2NoYXIJKmNvbnN0IHN0cm5hbWVzW10gPSB7MH07CisjdW5kZWYgc3RyZm5hbWVzCitjaGFyCSpjb25zdCBzdHJmbmFtZXNbXSA9IHswfTsKKworLyogLi90aW5mby9yZWFkX2VudHJ5LmMgKi8KKworI2luY2x1ZGUgPGhhc2hlZF9kYi5oPgorCisjdW5kZWYgX25jX3JlYWRfdGVybXR5cGUKK2ludAlfbmNfcmVhZF90ZXJtdHlwZSgKKwkJVEVSTVRZUEUgKnB0ciwgCisJCWNoYXIJKmJ1ZmZlciwgCisJCWludAlsaW1pdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JlYWRfZmlsZV9lbnRyeQoraW50CV9uY19yZWFkX2ZpbGVfZW50cnkoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZpbGVuYW1lLCAKKwkJVEVSTVRZUEUgKnB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JlYWRfZW50cnkKK2ludAlfbmNfcmVhZF9lbnRyeSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSwgCisJCWNoYXIJKmNvbnN0IGZpbGVuYW1lLCAKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vcmVhZF90ZXJtY2FwLmMgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjdW5kZWYgX25jX3JlYWRfdGVybWNhcF9lbnRyeQoraW50CV9uY19yZWFkX3Rlcm1jYXBfZW50cnkoCisJCWNvbnN0IGNoYXIgKmNvbnN0IHRuLCAKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vc2V0YnVmLmMgKi8KKworI3VuZGVmIF9uY19zZXRfYnVmZmVyCit2b2lkCV9uY19zZXRfYnVmZmVyKAorCQlGSUxFCSpvZnAsIAorCQlOQ1VSU0VTX0JPT0wgYnVmZmVyZWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vc3RyaW5ncy5jICovCisKKyN1bmRlZiBfbmNfc3RyX2luaXQKK3N0cmluZ19kZXNjICpfbmNfc3RyX2luaXQoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQljaGFyCSpzcmMsIAorCQlzaXplX3QJbGVuKQorCQl7IHJldHVybigqKHN0cmluZ19kZXNjICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc3RyX251bGwKK3N0cmluZ19kZXNjICpfbmNfc3RyX251bGwoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQlzaXplX3QJbGVuKQorCQl7IHJldHVybigqKHN0cmluZ19kZXNjICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc3RyX2NvcHkKK3N0cmluZ19kZXNjICpfbmNfc3RyX2NvcHkoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQlzdHJpbmdfZGVzYyAqc3JjKQorCQl7IHJldHVybigqKHN0cmluZ19kZXNjICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2FmZV9zdHJjYXQKK05DVVJTRVNfQk9PTCBfbmNfc2FmZV9zdHJjYXQoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQljb25zdCBjaGFyICpzcmMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19zYWZlX3N0cmNweQorTkNVUlNFU19CT09MIF9uY19zYWZlX3N0cmNweSgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCWNvbnN0IGNoYXIgKnNyYykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL3RyYWNlL3RyYWNlX2J1Zi5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VfYnVmCitjaGFyCSpfbmNfdHJhY2VfYnVmKAorCQlpbnQJYnVmbnVtLCAKKwkJc2l6ZV90CXdhbnQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3RyYWNlX2J1ZmNhdAorY2hhcgkqX25jX3RyYWNlX2J1ZmNhdCgKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNoYXIgKnZhbHVlKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV90cmllcy5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VfdHJpZXMKK3ZvaWQJX25jX3RyYWNlX3RyaWVzKAorCQlUUklFUwkqdHJlZSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL3RyaWVzLmMgKi8KKworI3VuZGVmIF9uY19leHBhbmRfdHJ5CitjaGFyCSpfbmNfZXhwYW5kX3RyeSgKKwkJVFJJRVMJKnRyZWUsIAorCQl1bnNpZ25lZCBjb2RlLCAKKwkJaW50CSpjb3VudCwgCisJCXNpemVfdAlsZW4pCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JlbW92ZV9rZXkKK2ludAlfbmNfcmVtb3ZlX2tleSgKKwkJVFJJRVMJKip0cmVlLCAKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JlbW92ZV9zdHJpbmcKK2ludAlfbmNfcmVtb3ZlX3N0cmluZygKKwkJVFJJRVMJKip0cmVlLCAKKwkJY29uc3QgY2hhciAqc3RyaW5nKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vdHJpbV9zZ3IwLmMgKi8KKworI3VuZGVmIF9uY190cmltX3NncjAKK2NoYXIJKl9uY190cmltX3NncjAoCisJCVRFUk1UWVBFICp0cCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdW5jdHJsLmMgKi8KKworI3VuZGVmIF9uY191bmN0cmwKK2NoYXIJKl9uY191bmN0cmwoCisJCVNDUkVFTgkqc3AsIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgdW5jdHJsCitjaGFyCSp1bmN0cmwoCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHJhY2UvdmlzYnVmLmMgKi8KKworI3VuZGVmIF9uY192aXNidWYyCitjb25zdCBjaGFyICpfbmNfdmlzYnVmMigKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNoYXIgKmJ1ZikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzYnVmCitjb25zdCBjaGFyICpfbmNfdmlzYnVmKAorCQljb25zdCBjaGFyICpidWYpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2J1Zm4KK2NvbnN0IGNoYXIgKl9uY192aXNidWZuKAorCQljb25zdCBjaGFyICpidWYsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXN3YnVmMgorY29uc3QgY2hhciAqX25jX3Zpc3didWYyKAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3Qgd2NoYXJfdCAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXN3YnVmCitjb25zdCBjaGFyICpfbmNfdmlzd2J1ZigKKwkJY29uc3Qgd2NoYXJfdCAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXN3YnVmbgorY29uc3QgY2hhciAqX25jX3Zpc3didWZuKAorCQljb25zdCB3Y2hhcl90ICpidWYsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXN3aWJ1ZgorY29uc3QgY2hhciAqX25jX3Zpc3dpYnVmKAorCQljb25zdCB3aW50X3QgKmJ1ZikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzY2J1ZjIKK2NvbnN0IGNoYXIgKl9uY192aXNjYnVmMigKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNjaGFyX3QgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2NidWYKK2NvbnN0IGNoYXIgKl9uY192aXNjYnVmKAorCQljb25zdCBjY2hhcl90ICpidWYsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9hbGxvY19lbnRyeS5jICovCisKKyN1bmRlZiBfbmNfaW5pdF9lbnRyeQordm9pZAlfbmNfaW5pdF9lbnRyeSgKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2NvcHlfZW50cnkKK0VOVFJZCSpfbmNfY29weV9lbnRyeSgKKwkJRU5UUlkJKm9sZHApCisJCXsgcmV0dXJuKCooRU5UUlkgKiopMCk7IH0KKworI3VuZGVmIF9uY19zYXZlX3N0cgorY2hhcgkqX25jX3NhdmVfc3RyKAorCQljb25zdCBjaGFyICpjb25zdCBzdHJpbmcpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3dyYXBfZW50cnkKK3ZvaWQJX25jX3dyYXBfZW50cnkoCisJCUVOVFJZCSpjb25zdCBlcCwgCisJCU5DVVJTRVNfQk9PTCBjb3B5X3N0cmluZ3MpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbWVyZ2VfZW50cnkKK3ZvaWQJX25jX21lcmdlX2VudHJ5KAorCQlURVJNVFlQRSAqY29uc3QgdG8sIAorCQlURVJNVFlQRSAqY29uc3QgZnJvbSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9jYXB0b2luZm8uYyAqLworCisjdW5kZWYgX25jX2NhcHRvaW5mbworY2hhcgkqX25jX2NhcHRvaW5mbygKKwkJY29uc3QgY2hhciAqY2FwLCAKKwkJY29uc3QgY2hhciAqcywgCisJCWludCBjb25zdCBwYXJhbWV0ZXJpemVkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19pbmZvdG9jYXAKK2NoYXIJKl9uY19pbmZvdG9jYXAoCisJCWNvbnN0IGNoYXIgKmNhcCwgCisJCWNvbnN0IGNoYXIgKnN0ciwgCisJCWludCBjb25zdCBwYXJhbWV0ZXJpemVkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9jb21wX2NhcHRhYi5jICovCisKKyNpbmNsdWRlIDxoYXNoc2l6ZS5oPgorCisjdW5kZWYgX25jX2dldF90YWJsZQorY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKl9uY19nZXRfdGFibGUoCisJCU5DVVJTRVNfQk9PTCB0ZXJtY2FwKQorCQl7IHJldHVybigqKGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZ2V0X2hhc2hfdGFibGUKK2NvbnN0IHNob3J0ICpfbmNfZ2V0X2hhc2hfdGFibGUoCisJCU5DVVJTRVNfQk9PTCB0ZXJtY2FwKQorCQl7IHJldHVybigqKGNvbnN0IHNob3J0ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZ2V0X2FsaWFzX3RhYmxlCitjb25zdCBzdHJ1Y3QgYWxpYXMgKl9uY19nZXRfYWxpYXNfdGFibGUoCisJCU5DVVJTRVNfQk9PTCB0ZXJtY2FwKQorCQl7IHJldHVybigqKGNvbnN0IHN0cnVjdCBhbGlhcyAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfZXhwYW5kLmMgKi8KKworI3VuZGVmIF9uY190aWNfZXhwYW5kCitjaGFyCSpfbmNfdGljX2V4cGFuZCgKKwkJY29uc3QgY2hhciAqc3JjcCwgCisJCU5DVVJTRVNfQk9PTCB0aWNfZm9ybWF0LCAKKwkJaW50CW51bWJlcnMpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfaGFzaC5jICovCisKKyN1bmRlZiBfbmNfZmluZF9lbnRyeQorc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKl9uY19maW5kX2VudHJ5KAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQljb25zdCBzaG9ydCAqaGFzaF90YWJsZSkKKwkJeyByZXR1cm4oKihzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKikwKTsgfQorCisjdW5kZWYgX25jX2ZpbmRfdHlwZV9lbnRyeQorc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKl9uY19maW5kX3R5cGVfZW50cnkoCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWludAl0eXBlLCAKKwkJY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKnRhYmxlKQorCQl7IHJldHVybigqKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICoqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9wYXJzZS5jICovCisKKyN1bmRlZiBfbmNfY2hlY2tfdGVybXR5cGUyCit2b2lkCSgqX25jX2NoZWNrX3Rlcm10eXBlMikoCisJCVRFUk1UWVBFICpwMSwgCisJCU5DVVJTRVNfQk9PTCBwMik7CisjdW5kZWYgX25jX2NoZWNrX3Rlcm10eXBlCit2b2lkCSgqX25jX2NoZWNrX3Rlcm10eXBlKSgKKwkJVEVSTVRZUEUgKnAxKTsKKworI3VuZGVmIF9uY19lbnRyeV9tYXRjaAorTkNVUlNFU19CT09MIF9uY19lbnRyeV9tYXRjaCgKKwkJY2hhcgkqbjEsIAorCQljaGFyCSpuMikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3JlYWRfZW50cnlfc291cmNlCit2b2lkCV9uY19yZWFkX2VudHJ5X3NvdXJjZSgKKwkJRklMRQkqZnAsIAorCQljaGFyCSpidWYsIAorCQlpbnQJbGl0ZXJhbCwgCisJCU5DVVJTRVNfQk9PTCBzaWxlbnQsIAorCQlOQ1VSU0VTX0JPT0wgKCpob29rKSgKKwkJRU5UUlkJKnAxKSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19yZXNvbHZlX3VzZXMyCitpbnQJX25jX3Jlc29sdmVfdXNlczIoCisJCU5DVVJTRVNfQk9PTCBmdWxscmVzb2x2ZSwgCisJCU5DVVJTRVNfQk9PTCBsaXRlcmFsKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVzb2x2ZV91c2VzCitpbnQJX25jX3Jlc29sdmVfdXNlcygKKwkJTkNVUlNFU19CT09MIGZ1bGxyZXNvbHZlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9zY2FuLmMgKi8KKworI3VuZGVmIF9uY19zeW50YXgKK2ludAlfbmNfc3ludGF4OworI3VuZGVmIF9uY19jdXJyX2ZpbGVfcG9zCitsb25nCV9uY19jdXJyX2ZpbGVfcG9zOworI3VuZGVmIF9uY19jb21tZW50X3N0YXJ0Citsb25nCV9uY19jb21tZW50X3N0YXJ0OworI3VuZGVmIF9uY19jb21tZW50X2VuZAorbG9uZwlfbmNfY29tbWVudF9lbmQ7CisjdW5kZWYgX25jX3N0YXJ0X2xpbmUKK2xvbmcJX25jX3N0YXJ0X2xpbmU7CisjdW5kZWYgX25jX2N1cnJfdG9rZW4KK3N0cnVjdCB0b2tlbiBfbmNfY3Vycl90b2tlbjsKKyN1bmRlZiBfbmNfZGlzYWJsZV9wZXJpb2QKK05DVVJTRVNfQk9PTCBfbmNfZGlzYWJsZV9wZXJpb2Q7CisKKyN1bmRlZiBfbmNfcmVzZXRfaW5wdXQKK3ZvaWQJX25jX3Jlc2V0X2lucHV0KAorCQlGSUxFCSpmcCwgCisJCWNoYXIJKmJ1ZikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfdG9rZW4KK2ludAlfbmNfZ2V0X3Rva2VuKAorCQlOQ1VSU0VTX0JPT0wgc2lsZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhbnNfc3RyaW5nCitpbnQJX25jX3RyYW5zX3N0cmluZygKKwkJY2hhcgkqcHRyLCAKKwkJY2hhcgkqbGFzdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3B1c2hfdG9rZW4KK3ZvaWQJX25jX3B1c2hfdG9rZW4oCisJCWludAl0b2tjbGFzcykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19wYW5pY19tb2RlCit2b2lkCV9uY19wYW5pY19tb2RlKAorCQljaGFyCWNoKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL3BhcnNlX2VudHJ5LmMgKi8KKworI3VuZGVmIF9uY19wYXJzZV9lbnRyeQoraW50CV9uY19wYXJzZV9lbnRyeSgKKwkJc3RydWN0IGVudHJ5ICplbnRyeXAsIAorCQlpbnQJbGl0ZXJhbCwgCisJCU5DVVJTRVNfQk9PTCBzaWxlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19jYXBjbXAKK2ludAlfbmNfY2FwY21wKAorCQljb25zdCBjaGFyICpzLCAKKwkJY29uc3QgY2hhciAqdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqZnJvbTsKKyAgICBjb25zdCBjaGFyICp0bzsKK30gYXNzb2M7CisKKy8qIC4vdGluZm8vd3JpdGVfZW50cnkuYyAqLworCisjdW5kZWYgX25jX3NldF93cml0ZWRpcgordm9pZAlfbmNfc2V0X3dyaXRlZGlyKAorCQljaGFyCSpkaXIpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfd3JpdGVfZW50cnkKK3ZvaWQJX25jX3dyaXRlX2VudHJ5KAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdGljX3dyaXR0ZW4KK2ludAlfbmNfdGljX3dyaXR0ZW4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvZGVmaW5lX2tleS5jICovCisKKyN1bmRlZiBkZWZpbmVfa2V5CitpbnQJZGVmaW5lX2tleSgKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJaW50CWtleWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9oYXNoZWRfZGIuYyAqLworCisjdW5kZWYgX25jX2hhc2hlZF9kYgordm9pZAlfbmNfaGFzaGVkX2RiKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9rZXlfZGVmaW5lZC5jICovCisKKyN1bmRlZiBrZXlfZGVmaW5lZAoraW50CWtleV9kZWZpbmVkKAorCQljb25zdCBjaGFyICpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2tleWJvdW5kLmMgKi8KKworI3VuZGVmIGtleWJvdW5kCitjaGFyCSprZXlib3VuZCgKKwkJaW50CWNvZGUsIAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL2Jhc2Uva2V5b2suYyAqLworCisjdW5kZWYga2V5b2sKK2ludAlrZXlvaygKKwkJaW50CWMsIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvdmVyc2lvbi5jICovCisKKyN1bmRlZiBjdXJzZXNfdmVyc2lvbgorY29uc3QgY2hhciAqY3Vyc2VzX3ZlcnNpb24odm9pZCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL21vZHVsZXMgYi9uY3Vyc2VzL21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4ZWY4MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvbW9kdWxlcwpAQCAtMCwwICsxLDIzMiBAQAorIyAkSWQ6IG1vZHVsZXMsdiAxLjExMiAyMDA3LzA5LzA4IDIyOjAzOjM0IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5Ni1vbgorIworCitAIGJhc2UKKyMgTGlicmFyeSBvYmplY3RzCitoYXJkc2Nyb2xsCWxpYgkJJChzZXJpYWwpCitoYXNobWFwCQlsaWIJCSQoc2VyaWFsKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2FkZGNoCWxpYgkJJChiYXNlKQorbGliX2FkZHN0cglsaWIJCSQoYmFzZSkKK2xpYl9iZWVwCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9ia2dkCWxpYgkJJChiYXNlKQorbGliX2JveCAJbGliCQkkKGJhc2UpCitsaWJfY2hnYXQJbGliCQkkKGJhc2UpCitsaWJfY2xlYXIJbGliCQkkKGJhc2UpCitsaWJfY2xlYXJvawlsaWIJCSQoYmFzZSkKK2xpYl9jbHJib3QJbGliCQkkKGJhc2UpCitsaWJfY2xyZW9sCWxpYgkJJChiYXNlKQorbGliX2NvbG9yCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9jb2xvcnNldAlsaWIJCSQoYmFzZSkKK2xpYl9kZWxjaAlsaWIJCSQoYmFzZSkKK2xpYl9kZWx3aW4JbGliCQkkKGJhc2UpCitsaWJfZWNobwlsaWIJCSQoYmFzZSkKK2xpYl9lbmR3aW4JbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2VyYXNlCWxpYgkJJChiYXNlKQorbGliX2ZsYXNoCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9nZW4gCWxpYgkJLgkJLi4vaW5jbHVkZS9jdXJzZXMuaAorbGliX2dldGNoCWxpYgkJJChiYXNlKQorbGliX2dldHN0cglsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfaGxpbmUJbGliCQkkKGJhc2UpCitsaWJfaW1tZWRvawlsaWIJCSQoYmFzZSkKK2xpYl9pbmNoc3RyCWxpYgkJJChiYXNlKQorbGliX2luaXRzY3IJbGliCQkkKGJhc2UpCQkkKElOQ0RJUikvdGljLmgKK2xpYl9pbnNjaAlsaWIJCSQoYmFzZSkKK2xpYl9pbnNkZWwJbGliCQkkKGJhc2UpCitsaWJfaW5zbnN0cglsaWIJCSQoYmFzZSkKK2xpYl9pbnN0cglsaWIJCSQoYmFzZSkKK2xpYl9pc2VuZHdpbglsaWIJCSQoYmFzZSkKK2xpYl9sZWF2ZW9rCWxpYgkJJChiYXNlKQorbGliX21vdXNlCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9tb3ZlCWxpYgkJJChiYXNlKQorbGliX212Y3VyCWxpYgkJJChzZXJpYWwpCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90aWMuaAorbGliX212d2luCWxpYgkJJChiYXNlKQorbGliX25ld3Rlcm0JbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX25ld3dpbglsaWIJCSQoYmFzZSkKK2xpYl9ubAkJbGliCQkkKGJhc2UpCitsaWJfb3ZlcmxheQlsaWIJCSQoYmFzZSkKK2xpYl9wYWQgCWxpYgkJJChiYXNlKQorbGliX3ByaW50dwlsaWIJCSQoYmFzZSkKK2xpYl9yZWRyYXdsbglsaWIJCSQoYmFzZSkKK2xpYl9yZWZyZXNoCWxpYgkJJChiYXNlKQorbGliX3Jlc3RhcnQJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3NjYW53CWxpYgkJJChiYXNlKQorbGliX3NjcmVlbglsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfc2Nyb2xsCWxpYgkJJChiYXNlKQorbGliX3Njcm9sbG9rCWxpYgkJJChiYXNlKQorbGliX3NjcnJlZwlsaWIJCSQoYmFzZSkKK2xpYl9zZXRfdGVybQlsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfc2xrIAlsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfc2xrYXRyX3NldAlsaWIJCSQoYmFzZSkKK2xpYl9zbGthdHJvZiAJbGliCQkkKGJhc2UpCitsaWJfc2xrYXRyb24gCWxpYgkJJChiYXNlKQorbGliX3Nsa2F0cnNldCAJbGliCQkkKGJhc2UpCitsaWJfc2xrYXR0ciAJbGliCQkkKGJhc2UpCitsaWJfc2xrY2xlYXIgCWxpYgkJJChiYXNlKQorbGliX3Nsa2NvbG9yIAlsaWIJCSQoYmFzZSkKK2xpYl9zbGtpbml0IAlsaWIJCSQoYmFzZSkKK2xpYl9zbGtsYWIJbGliCQkkKGJhc2UpCitsaWJfc2xrcmVmcglsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfc2xrc2V0CWxpYgkJJChiYXNlKQorbGliX3Nsa3RvdWNoCWxpYgkJJChiYXNlKQorbGliX3RvdWNoCWxpYgkJJChiYXNlKQorbGliX3RyYWNlZG1wCWxpYgkJJCh0cmFjZSkKK2xpYl90cmFjZW1zZQlsaWIJCSQodHJhY2UpCitsaWJfdHN0cAlsaWIJCSQoc2VyaWFsKQkkKHNyY2RpcikvU2lnQWN0aW9uLmgKK2xpYl91bmdldGNoCWxpYgkJJChiYXNlKQorbGliX3ZpZGF0dHIJbGliCQkkKHNlcmlhbCkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl92bGluZQlsaWIJCSQoYmFzZSkKK2xpYl93YXR0cm9mZglsaWIJCSQoYmFzZSkKK2xpYl93YXR0cm9uCWxpYgkJJChiYXNlKQorbGliX3dpbmNoCWxpYgkJJChiYXNlKQorbGliX3dpbmRvdwlsaWIJCSQoYmFzZSkKK2xpbmtfdGVzdCAJbGliCQkuCQkuLi9pbmNsdWRlL2N1cnNlcy5oCituY19wYW5lbAlsaWIJCSQoYmFzZSkKK3NhZmVfc3ByaW50ZglsaWIJCSQoYmFzZSkKK3R0eV91cGRhdGUJbGliCQkkKHNlcmlhbCkJLi4vaW5jbHVkZS90ZXJtLmgKK3ZhcmFyZ3MJCWxpYgkJJCh0cmFjZSkKKworIyBNb2R1bGVzIGZvciBwb3J0aW5nCittZW1tb3ZlCQlsaWIJCSQoYmFzZSkKK3Zzc2NhbmYgCWxpYgkJJChiYXNlKQorCisjIGFjdHVhbGx5IGFuIGV4dGVuc2lvbiwgYnV0IHdpdGggaXRzIG93biBjb25maWd1cmUgb3B0aW9uICgtLWRpc2FibGUtbGVha3MpCitsaWJfZnJlZWFsbAlsaWIJCSQoYmFzZSkKKworIyBYU0kgZXh0ZW5zaW9ucyB0byB0aGUgYmFzZSBsaWJyYXJ5ICh3aWRlLWNoYXJhY3RlcikKK0Agd2lkZWNoYXIKK2NoYXJhYmxlCWxpYgkJJCh3aWRlKQorbGliX2FkZF93Y2gJbGliCQkkKHdpZGUpCitsaWJfYm94X3NldAlsaWIJCSQod2lkZSkKK2xpYl9jY2hhcglsaWIJCSQod2lkZSkKK2xpYl9lcmFzZXdjaGFyCWxpYgkJJCh3aWRlKQorbGliX2dldF93Y2gJbGliCQkkKHdpZGUpCitsaWJfZ2V0X3dzdHIJbGliCQkkKHdpZGUpCitsaWJfaGxpbmVfc2V0CWxpYgkJJCh3aWRlKQorbGliX2luX3djaAlsaWIJCSQod2lkZSkKK2xpYl9pbl93Y2huc3RyCWxpYgkJJCh3aWRlKQorbGliX2luc193Y2gJbGliCQkkKHdpZGUpCitsaWJfaW53c3RyCWxpYgkJJCh3aWRlKQorbGliX2tleV9uYW1lCWxpYgkJJCh3aWRlKQorbGliX3BlY2hvX3djaGFyCWxpYgkJJCh3aWRlKQorbGliX3Nsa193c2V0CWxpYgkJJCh3aWRlKQorbGliX3VuZ2V0X3djaAlsaWIJCSQod2lkZSkKK2xpYl92aWRfYXR0cglsaWIJCSQod2lkZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfdmxpbmVfc2V0CWxpYgkJJCh3aWRlKQorbGliX3dhY3MJbGliCQkkKHdpZGUpCitsaWJfd3VuY3RybAlsaWIJCSQod2lkZSkKKworIyBFeHRlbnNpb25zIHRvIHRoZSBiYXNlIGxpYnJhcnkKK0AgZXh0X2Z1bmNzCitleHBhbmRlZAlsaWIJCS4KK2xlZ2FjeV9jb2RpbmcJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2RmdF9mZ2JnCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9wcmludAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oCityZXNpemV0ZXJtCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK3RyYWNlX3huYW1lcwlsaWIJCSQodHJhY2UpCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmgKK3VzZV9zY3JlZW4JbGliCQkkKHRpbmZvKQordXNlX3dpbmRvdwlsaWIJCSQoYmFzZSkKK3dyZXNpemUJCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKKworIyBTdXBwb3J0IGZvciB0ZXJtY2FwIChhbmQgdGljLCBldGMuKSwgd2hpY2ggY2FuIGJlIGEgc2VwYXJhdGUgbGlicmFyeQorQCB0ZXJtbGliCithY2Nlc3MJCWxpYgkJJCh0aW5mbykKK2FkZF90cmllcwlsaWIJCSQodGluZm8pCithbGxvY190dHlwZQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmggJChJTkNESVIpL3RpYy5oCitjb2RlcwkJbGliCQkuCitjb21wX2Vycm9yCWxpYgkJJCh0aW5mbykJJChJTkNESVIpL3RpYy5oCitkYl9pdGVyYXRvcglsaWIJCSQodGluZm8pCSQoSU5DRElSKS90aWMuaAorZG9hbGxvYwkJbGliCQkkKHRpbmZvKQorZW50cmllcwkJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGljLmgKK2ZhbGxiYWNrCWxpYgkJLgkJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oCitmcmVlX3R0eXBlCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKK2dldGVudl9udW0JbGliCQkkKHRpbmZvKQoraG9tZV90ZXJtaW5mbwlsaWIJCSQodGluZm8pCitpbml0X2tleXRyeQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90aWMuaCBpbml0X2tleXRyeS5oCitsaWJfYWNzIAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfYmF1ZHJhdGUJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2N1cl90ZXJtCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaAorbGliX2RhdGEJbGliCQkkKHRpbmZvKQorbGliX2hhc19jYXAJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2tlcm5lbAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfa2V5bmFtZQlsaWIJCS4JCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfbG9uZ25hbWUJbGliCQkkKHRpbmZvKQorbGliX25hcG1zCWxpYgkJJCh0aW5mbykKK2xpYl9vcHRpb25zCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9yYXcgCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9zZXR1cAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmgKK2xpYl90ZXJtY2FwCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmggJChJTkNESVIpL2NhcGRlZmF1bHRzLmMKK2xpYl90ZXJtbmFtZQlsaWIJCSQodGluZm8pCSQoSU5DRElSKS90aWMuaAorbGliX3Rnb3RvCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oCitsaWJfdGkJCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKK2xpYl90cGFybQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90aWMuaAorbGliX3RwdXRzCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oCitsaWJfdHJhY2UJbGliCQkkKHRyYWNlKQkkKElOQ0RJUikvdGljLmgKK2xpYl90cmFjZWF0cglsaWIJCSQodHJhY2UpCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfdHJhY2ViaXRzCWxpYgkJJCh0cmFjZSkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl90cmFjZWNocglsaWIJCSQodHJhY2UpCitsaWJfdHR5ZmxhZ3MJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3R3YWl0CWxpYgkJJChzZXJpYWwpCituYW1lX21hdGNoCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oCituYW1lcwkJbGliCQkuCityZWFkX2VudHJ5CWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKK3JlYWRfdGVybWNhcAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmggJChJTkNESVIpL3RpYy5oCitzZXRidWYJCWxpYgkJJCh0aW5mbykKK3N0cmluZ3MJCWxpYgkJJCh0aW5mbykKK3RyYWNlX2J1ZglsaWIJCSQodHJhY2UpCit0cmFjZV90cmllcwlsaWIJCSQodHJhY2UpCit0cmllcwkJbGliCQkkKGJhc2UpCit0cmltX3NncjAJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaAordW5jdHJsCQlsaWIJCS4KK3Zpc2J1ZgkJbGliCQkkKHRyYWNlKQkkKElOQ0RJUikvdGljLmgKKworIyBNb2R1bGVzIHVzZWQgb25seSBmb3IgdGljLCBvdGhlciBwcm9ncmFtcyB1c2luZyBpbnRlcm5hbCBpbnRlcmZhY2VzCitAIHRpY2xpYgorYWxsb2NfZW50cnkJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaAorY2FwdG9pbmZvCWxpYgkJJCh0aW5mbykJJChJTkNESVIpL3RpYy5oCitjb21wX2NhcHRhYglsaWIJCS4JCSQoSU5DRElSKS90aWMuaCAuLi9pbmNsdWRlL3Rlcm0uaCAuLi9pbmNsdWRlL2hhc2hzaXplLmgKK2NvbXBfZXhwYW5kCWxpYgkJJCh0aW5mbykJJChJTkNESVIpL3RpYy5oCitjb21wX2hhc2gJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGljLmggLi4vaW5jbHVkZS9oYXNoc2l6ZS5oCitjb21wX3BhcnNlCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKK2NvbXBfc2NhbglsaWIJCSQodGluZm8pCSQoSU5DRElSKS90aWMuaAorcGFyc2VfZW50cnkJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaCAuLi9pbmNsdWRlL3BhcmFtZXRyaXplZC5oICQoSU5DRElSKS9jYXBkZWZhdWx0cy5jCit3cml0ZV9lbnRyeQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmggJChJTkNESVIpL3RpYy5oCisKKyMgRXh0ZW5zaW9ucyB0byB0aGUgdGVybWxpYiBsaWJyYXJ5CitAIGV4dF90aW5mbworZGVmaW5lX2tleQlsaWIJCSQoYmFzZSkKK2hhc2hlZF9kYglsaWIJCSQodGluZm8pCitrZXlfZGVmaW5lZAlsaWIJCSQoYmFzZSkKK2tleWJvdW5kCWxpYgkJJChiYXNlKQora2V5b2sJCWxpYgkJJChiYXNlKQordmVyc2lvbgkJbGliCQkkKGJhc2UpCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9NS2NhcHRhYi5hd2sgYi9uY3Vyc2VzL3RpbmZvL01LY2FwdGFiLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQzZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9NS2NhcHRhYi5hd2sKQEAgLTAsMCArMSw5NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IE1LY2FwdGFiLmF3ayx2IDEuMjAgMjAwNy8wOC8xMiAwMDoyNjoxNSB0b20gRXhwICQKK2Z1bmN0aW9uIGFkZF9zdHJpbmcodGV4dCkgeworICAgIGlmICh0ZXh0ICE9ICJJR05PUkUiKSB7CisJb2Zmc2V0c1tudW1fc3RyaW5nc10gPSBvZmZzZXQ7CisJb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoKHRleHQpICsgMTsKKwlwcmludGYgIiVzXFwwIiwgdGV4dDsKKyAgICB9IGVsc2UgeworCW9mZnNldHNbbnVtX3N0cmluZ3NdID0gLTE7CisgICAgfQorICAgIG51bV9zdHJpbmdzID0gbnVtX3N0cmluZ3MgKyAxOworICAgIGlmICgobnVtX3N0cmluZ3MgJSAzKSA9PSAwKSB7CisJcHJpbnRmICJcXFxuIjsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldHNbbnVtX3N0cmluZ3MgLSAxXTsKK30KK0JFR0lOIHsKKwlmaXJzdCA9IDE7CisJbnVtX2FsaWFzZXMgPSAwOworCW51bV9zdHJpbmdzID0gMDsKKwlvZmZzZXQgPSAwOworfQorCisvXlteI10vIHsKKwkgICAgaWYgKGZpcnN0KSB7CisJCXByaW50ZiAiLyogZ2VuZXJhdGVkIGJ5IE1LY2FwdGFiLmF3ayAlcyglZCkgKi9cbiIsIHRhYmxlbmFtZSwgYmlnc3RyaW5nczsKKwkJcHJpbnQgIiIKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJICAgIHByaW50ZiAic3RhdGljIHN0cnVjdCBhbGlhcyAqX25jXyVzX3RhYmxlID0gMDtcbiIsIHRhYmxlbmFtZTsKKwkJICAgIHByaW50ICIiOworCQkgICAgcHJpbnRmICJzdGF0aWMgY29uc3QgY2hhciAlc190ZXh0W10gPSBcIlxcXG4iLCB0YWJsZW5hbWU7CisJCX0gZWxzZSB7CisJCSAgICBwcmludGYgInN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxpYXMgX25jXyVzX3RhYmxlW10gPVxuIiwgdGFibGVuYW1lOworCQkgICAgcHJpbnRmICJ7XG4iOworCQl9CisJCWZpcnN0ID0gMDsKKwkgICAgfQorCSAgICBpZiAoJDEgPT0gdGFibGVuYW1lKSB7CisJCWlmICgkMyA9PSAiSUdOT1JFIikgeworCQkgICAgdG8gPSAiKGNoYXIgKilOVUxMIjsKKwkJfSBlbHNlIHsKKwkJICAgIHRvID0gIlwiIiAkMyAiXCIiOworCQl9CisJCWlmIChiaWdzdHJpbmdzKSB7CisJCSAgICBjMSA9IGFkZF9zdHJpbmcoJDIpOworCQkgICAgYzIgPSBhZGRfc3RyaW5nKCQzKTsKKwkJICAgIGMzID0gYWRkX3N0cmluZygkNCk7CisJCSAgICBhbGlhc2VzW251bV9hbGlhc2VzXSA9IHNwcmludGYoIlx0eyU1ZCwgJTVkLCAlNWR9LFx0IC8qICVzICovIiwgYzEsIGMyLCBjMywgJDUpOworCQkgICAgbnVtX2FsaWFzZXMgPSBudW1fYWxpYXNlcyArIDE7CisJCX0gZWxzZSB7CisJCSAgICBwcmludGYgIlx0e1wiJXNcIiwgJXMsIFwiJXNcIn0sXHQgLyogJXMgKi9cbiIsICQyLCB0bywgJDQsICQ1OworCQl9CisJICAgIH0KKwl9CitFTkQJeworCSAgICBpZiAoYmlnc3RyaW5ncykgeworCQlwcmludGYgIlwiO1xuXG4iOworCQlwcmludGYgInN0YXRpYyBjb25zdCBhbGlhc190YWJsZV9kYXRhICVzX2RhdGFbXSA9IHtcbiIsIHRhYmxlbmFtZTsKKwkJZm9yIChuID0gMDsgbiA8IG51bV9hbGlhc2VzOyArK24pIHsKKwkJICAgIHByaW50ZiAiJXNcbiIsIGFsaWFzZXNbbl07CisJCX0KKwkJcHJpbnRmICJ9O1xuXG4iOworCSAgICB9IGVsc2UgeworCQlwcmludGYgIlx0eyhjaGFyICopTlVMTCwgKGNoYXIgKilOVUxMLCAoY2hhciAqKU5VTEx9XG4iOworCQlwcmludGYgIn07XG5cbiI7CisJICAgIH0KKwl9CisjIHZpbGU6c3c9NDoKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vTUtjYXB0YWIuc2ggYi9uY3Vyc2VzL3RpbmZvL01LY2FwdGFiLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4YzA0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL01LY2FwdGFiLnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBNS2NhcHRhYi5zaCx2IDEuOCAyMDA3LzA4LzEyIDEzOjEzOjUxIHRvbSBFeHAgJAorQVdLPSR7MS1hd2t9CitPUFQxPSR7Mi0wfQorT1BUMj0kezMtdGluZm8vTUtjYXB0YWIuYXdrfQorREFUQT0kezQtLi4vaW5jbHVkZS9DYXBzfQorCitjYXQgPDwnRU9GJworLyoKKyAqCWNvbXBfY2FwdGFiLmMgLS0gVGhlIG5hbWVzIG9mIHRoZSBjYXBhYmlsaXRpZXMgaW5kZXhlZCB2aWEgYSBoYXNoCisgKgkJICAgICAgICAgdGFibGUgZm9yIHRoZSBjb21waWxlci4KKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8aGFzaHNpemUuaD4KKworRU9GCisKKy4vbWFrZV9oYXNoIDEgaW5mbyAkT1BUMSA8JERBVEEKKy4vbWFrZV9oYXNoIDMgY2FwICAkT1BUMSA8JERBVEEKKworJEFXSyAtZiAkT1BUMiBiaWdzdHJpbmdzPSRPUFQxIHRhYmxlbmFtZT1jYXBhbGlhcyA8JERBVEEgCisKKyRBV0sgLWYgJE9QVDIgYmlnc3RyaW5ncz0kT1BUMSB0YWJsZW5hbWU9aW5mb2FsaWFzIDwkREFUQQorCitjYXQgPDxFT0YKKworI2lmICRPUFQxCitzdGF0aWMgdm9pZAorbmV4dF9zdHJpbmcoY29uc3QgY2hhciAqc3RyaW5ncywgdW5zaWduZWQgKm9mZnNldCkKK3sKKwkqb2Zmc2V0ICs9IHN0cmxlbihzdHJpbmdzICsgKm9mZnNldCkgKyAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKgorX25jX2J1aWxkX25hbWVzKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICoqYWN0dWFsLAorCQljb25zdCBuYW1lX3RhYmxlX2RhdGEgKnNvdXJjZSwKKwkJY29uc3QgY2hhciAqc3RyaW5ncykKK3sKKwlpZiAoKmFjdHVhbCA9PSAwKSB7CisJCSphY3R1YWwgPSB0eXBlQ2FsbG9jKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5LCBDQVBUQUJTSVpFKTsKKwkJaWYgKCphY3R1YWwgIT0gMCkgeworCQkJdW5zaWduZWQgbjsKKwkJCXVuc2lnbmVkIGxlbiA9IDA7CisJCQlmb3IgKG4gPSAwOyBuIDwgQ0FQVEFCU0laRTsgKytuKSB7CisJCQkJKCphY3R1YWwpW25dLm50ZV9uYW1lID0gc3RyaW5ncyArIGxlbjsKKwkJCQkoKmFjdHVhbClbbl0ubnRlX3R5cGUgPSBzb3VyY2Vbbl0ubnRlX3R5cGU7CisJCQkJKCphY3R1YWwpW25dLm50ZV9pbmRleCA9IHNvdXJjZVtuXS5udGVfaW5kZXg7CisJCQkJKCphY3R1YWwpW25dLm50ZV9saW5rID0gc291cmNlW25dLm50ZV9saW5rOworCQkJCW5leHRfc3RyaW5nKHN0cmluZ3MsICZsZW4pOworCQkJfQorCQl9CisJfQorCXJldHVybiAqYWN0dWFsOworfQorCisjZGVmaW5lIGFkZF9hbGlhcyhmaWVsZCkgXFwKKwlpZiAoc291cmNlW25dLmZpZWxkID49IDApIHsgXFwKKwkJKCphY3R1YWwpW25dLmZpZWxkID0gc3RyaW5ncyArIHNvdXJjZVtuXS5maWVsZDsgXFwKKwl9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxpYXMgKgorX25jX2J1aWxkX2FsaWFzKHN0cnVjdCBhbGlhcyAqKmFjdHVhbCwKKwkJY29uc3QgYWxpYXNfdGFibGVfZGF0YSAqc291cmNlLAorCQljb25zdCBjaGFyICpzdHJpbmdzLAorCQl1bnNpZ25lZCB0YWJsZXNpemUpCit7CisJaWYgKCphY3R1YWwgPT0gMCkgeworCQkqYWN0dWFsID0gdHlwZUNhbGxvYyhzdHJ1Y3QgYWxpYXMsIHRhYmxlc2l6ZSArIDEpOworCQlpZiAoKmFjdHVhbCAhPSAwKSB7CisJCQl1bnNpZ25lZCBuOworCQkJZm9yIChuID0gMDsgbiA8IHRhYmxlc2l6ZTsgKytuKSB7CisJCQkJYWRkX2FsaWFzKGZyb20pOworCQkJCWFkZF9hbGlhcyh0byk7CisJCQkJYWRkX2FsaWFzKHNvdXJjZSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICphY3R1YWw7Cit9CisKKyNkZWZpbmUgYnVpbGRfbmFtZXMocm9vdCkgX25jX2J1aWxkX25hbWVzKCZfbmNfIyNyb290IyNfdGFibGUsIFxcCisJCQkJCSAgcm9vdCMjX25hbWVzX2RhdGEsIFxcCisJCQkJCSAgcm9vdCMjX25hbWVzX3RleHQpCisjZGVmaW5lIGJ1aWxkX2FsaWFzKHJvb3QpIF9uY19idWlsZF9hbGlhcygmX25jXyMjcm9vdCMjYWxpYXNfdGFibGUsIFxcCisJCQkJCSAgcm9vdCMjYWxpYXNfZGF0YSwgXFwKKwkJCQkJICByb290IyNhbGlhc190ZXh0LCBcXAorCQkJCQkgIFNJWkVPRihyb290IyNhbGlhc19kYXRhKSkKKyNlbHNlCisjZGVmaW5lIGJ1aWxkX25hbWVzKHJvb3QpIF9uY18gIyMgcm9vdCAjIyBfdGFibGUKKyNkZWZpbmUgYnVpbGRfYWxpYXMocm9vdCkgX25jXyAjIyByb290ICMjIGFsaWFzX3RhYmxlCisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQoY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKikgX25jX2dldF90YWJsZSAoYm9vbCB0ZXJtY2FwKQoreworCXJldHVybiB0ZXJtY2FwID8gYnVpbGRfbmFtZXMoY2FwKSA6IGJ1aWxkX25hbWVzKGluZm8pIDsKK30KKworTkNVUlNFU19FWFBPUlQoY29uc3Qgc2hvcnQgKikgX25jX2dldF9oYXNoX3RhYmxlIChib29sIHRlcm1jYXApCit7CisJcmV0dXJuIHRlcm1jYXAgPyBfbmNfY2FwX2hhc2hfdGFibGU6IF9uY19pbmZvX2hhc2hfdGFibGUgOworfQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBzdHJ1Y3QgYWxpYXMgKikgX25jX2dldF9hbGlhc190YWJsZSAoYm9vbCB0ZXJtY2FwKQoreworCXJldHVybiB0ZXJtY2FwID8gYnVpbGRfYWxpYXMoY2FwKSA6IGJ1aWxkX2FsaWFzKGluZm8pIDsKK30KKworI2lmIE5PX0xFQUtTCitOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfY29tcF9jYXB0YWJfbGVha3Modm9pZCkKK3sKKyNpZiAkT1BUMQorCUZyZWVJZk5lZWRlZChfbmNfY2FwX3RhYmxlKTsKKwlGcmVlSWZOZWVkZWQoX25jX2luZm9fdGFibGUpOworCUZyZWVJZk5lZWRlZChfbmNfY2FwYWxpYXNfdGFibGUpOworCUZyZWVJZk5lZWRlZChfbmNfaW5mb2FsaWFzX3RhYmxlKTsKKyNlbmRpZgorfQorI2VuZGlmIC8qIE5PX0xFQUtTICovCitFT0YKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vTUtjb2Rlcy5hd2sgYi9uY3Vyc2VzL3RpbmZvL01LY29kZXMuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmE2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL01LY29kZXMuYXdrCkBAIC0wLDAgKzEsMTY0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogTUtjb2Rlcy5hd2ssdiAxLjUgMjAwOC8wNi8yOCAyMzoxMzoyNSB0b20gRXhwICQKK2Z1bmN0aW9uIGxhcmdlX2l0ZW0odmFsdWUpIHsKKwlyZXN1bHQgPSBzcHJpbnRmKCIlZCwiLCBvZmZzZXQpOworCW9mZnNldCA9IG9mZnNldCArIGxlbmd0aCh2YWx1ZSkgKyAxOworCW9mZmNvbCA9IG9mZmNvbCArIGxlbmd0aChyZXN1bHQpICsgMjsKKwlpZiAob2ZmY29sID4gNzApIHsKKwkJcmVzdWx0ID0gcmVzdWx0ICJcbiI7CisJCW9mZmNvbCA9IDA7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gcmVzdWx0ICIgIjsKKwl9CisJYmlnc3RyID0gYmlnc3RyIHNwcmludGYoIlwiJXNcXDBcIiAiLCB2YWx1ZSk7CisJYmlnY29sID0gYmlnY29sICsgbGVuZ3RoKHZhbHVlKSArIDU7CisJaWYgKGJpZ2NvbCA+IDcwKSB7CisJCWJpZ3N0ciA9IGJpZ3N0ciAiXFxcbiI7CisJCWJpZ2NvbCA9IDA7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIHNtYWxsX2l0ZW0odmFsdWUpIHsKKwlyZXR1cm4gc3ByaW50ZigiXHRcdFwiJXNcIixcbiIsIHZhbHVlKTsKK30KKworZnVuY3Rpb24gcHJpbnRfc3RyaW5ncyhuYW1lLHZhbHVlKSB7CisJcHJpbnRmICAiRENMKCVzKSA9IHtcbiIsIG5hbWUKKwlwcmludCAgdmFsdWUKKwlwcmludCAgIlx0XHQoTkNVUlNFU19DT05TVCBjaGFyICopMCwiCisJcHJpbnQgICJ9OyIKKwlwcmludCAgIiIKK30KKworZnVuY3Rpb24gcHJpbnRfb2Zmc2V0cyhuYW1lLHZhbHVlKSB7CisJcHJpbnRmICAic3RhdGljIGNvbnN0IHNob3J0IF9uY19vZmZzZXRfJXNbXSA9IHtcbiIsIG5hbWUKKwlwcmludGYgIiVzIiwgIHZhbHVlCisJcHJpbnQgICJ9OyIKKwlwcmludCAgIiIKKwlwcmludGYgInN0YXRpYyBOQ1VSU0VTX0NPTlNUIGNoYXIgKiogcHRyXyVzID0gMDtcbiIsIG5hbWUKKwlwcmludCAgIiIKK30KKworQkVHSU4JeworCQlwcmludCAgIi8qIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IE1LY29kZXMuYXdrICovIgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4iCisJCXByaW50ICAiIgorCQlwcmludCAgIiNkZWZpbmUgSVQgTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QiCisJCXByaW50ICAiIgorCQlvZmZzZXQgPSAwOworCQlvZmZjb2wgPSAwOworCQliaWdjb2wgPSAwOworCX0KKworJDEgfiAvXiMvCQl7bmV4dDt9CisKKyQxID09ICJTS0lQV0FSTiIJe25leHQ7fQorCiskMyA9PSAiYm9vbCIJeworCQkJc21hbGxfYm9vbGNvZGVzID0gc21hbGxfYm9vbGNvZGVzIHNtYWxsX2l0ZW0oJDQpOworCQkJbGFyZ2VfYm9vbGNvZGVzID0gbGFyZ2VfYm9vbGNvZGVzIGxhcmdlX2l0ZW0oJDQpOworCQl9CisKKyQzID09ICJudW0iCXsKKwkJCXNtYWxsX251bWNvZGVzID0gc21hbGxfbnVtY29kZXMgc21hbGxfaXRlbSgkNCk7CisJCQlsYXJnZV9udW1jb2RlcyA9IGxhcmdlX251bWNvZGVzIGxhcmdlX2l0ZW0oJDQpOworCQl9CisKKyQzID09ICJzdHIiCXsKKwkJCXNtYWxsX3N0cmNvZGVzID0gc21hbGxfc3RyY29kZXMgc21hbGxfaXRlbSgkNCk7CisJCQlsYXJnZV9zdHJjb2RlcyA9IGxhcmdlX3N0cmNvZGVzIGxhcmdlX2l0ZW0oJDQpOworCQl9CisKK0VORAl7CisJCXByaW50ICAiIgorCQlwcmludCAgIiNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNpbmNsdWRlIDx0ZXJtLmg+IgorCQlwcmludCAgIiIKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJCXByaW50ZiAic3RhdGljIGNvbnN0IGNoYXIgX25jX2NvZGVfYmxvYltdID0gXG4iCisJCQlwcmludGYgIiVzO1xuIiwgYmlnc3RyOworCQkJcHJpbnRfb2Zmc2V0cygiYm9vbGNvZGVzIiwgbGFyZ2VfYm9vbGNvZGVzKTsKKwkJCXByaW50X29mZnNldHMoIm51bWNvZGVzIiwgbGFyZ2VfbnVtY29kZXMpOworCQkJcHJpbnRfb2Zmc2V0cygic3RyY29kZXMiLCBsYXJnZV9zdHJjb2Rlcyk7CisJCQlwcmludCAgIiIKKwkJCXByaW50ICAic3RhdGljIElUICoiCisJCQlwcmludCAgImFsbG9jX2FycmF5KE5DVVJTRVNfQ09OU1QgY2hhciAqKip2YWx1ZSwgY29uc3Qgc2hvcnQgKm9mZnNldHMsIHVuc2lnbmVkIHNpemUpIgorCQkJcHJpbnQgICJ7IgorCQkJcHJpbnQgICIJaWYgKCp2YWx1ZSA9PSAwKSB7IgorCQkJcHJpbnQgICIJCWlmICgoKnZhbHVlID0gdHlwZUNhbGxvYyhOQ1VSU0VTX0NPTlNUIGNoYXIgKiwgc2l6ZSArIDEpKSAhPSAwKSB7IgorCQkJcHJpbnQgICIJCQl1bnNpZ25lZCBuOyIKKwkJCXByaW50ICAiCQkJZm9yIChuID0gMDsgbiA8IHNpemU7ICsrbikgeyIKKwkJCXByaW50ICAiCQkJCSgqdmFsdWUpW25dID0gX25jX2NvZGVfYmxvYiArIG9mZnNldHNbbl07IgorCQkJcHJpbnQgICIJCQl9IgorCQkJcHJpbnQgICIJCX0iCisJCQlwcmludCAgIgl9IgorCQkJcHJpbnQgICIJcmV0dXJuICp2YWx1ZTsiCisJCQlwcmludCAgIn0iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2RlZmluZSBGSVgoaXQpIE5DVVJTRVNfSU1QRVhQIElUICogTkNVUlNFU19BUEkgX25jXyMjaXQodm9pZCkgeyByZXR1cm4gYWxsb2NfYXJyYXkoJnB0cl8jI2l0LCBfbmNfb2Zmc2V0XyMjaXQsIFNJWkVPRihfbmNfb2Zmc2V0XyMjaXQpKTsgfSIKKwkJfSBlbHNlIHsKKwkJCXByaW50ICAiI2RlZmluZSBEQ0woaXQpIHN0YXRpYyBJVCBkYXRhIyNpdFtdIgorCQkJcHJpbnQgICIiCisJCQlwcmludF9zdHJpbmdzKCJib29sY29kZXMiLCBzbWFsbF9ib29sY29kZXMpOworCQkJcHJpbnRfc3RyaW5ncygibnVtY29kZXMiLCBzbWFsbF9udW1jb2Rlcyk7CisJCQlwcmludF9zdHJpbmdzKCJzdHJjb2RlcyIsIHNtYWxsX3N0cmNvZGVzKTsKKwkJCXByaW50ICAiI2RlZmluZSBGSVgoaXQpIE5DVVJTRVNfSU1QRVhQIElUICogTkNVUlNFU19BUEkgX25jXyMjaXQodm9pZCkgeyByZXR1cm4gZGF0YSMjaXQ7IH0iCisJCX0KKwkJcHJpbnQgICIiCisJCXByaW50ICAiRklYKGJvb2xjb2RlcykiCisJCXByaW50ICAiRklYKG51bWNvZGVzKSIKKwkJcHJpbnQgICJGSVgoc3RyY29kZXMpIgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIjZGVmaW5lIEZSRUVfRklYKGl0KSBpZiAocHRyXyMjaXQpIHsgRnJlZUFuZE51bGwocHRyXyMjaXQpOyB9IgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIjaWYgTk9fTEVBS1MiCisJCXByaW50ICAiTkNVUlNFU19FWFBPUlQodm9pZCkiCisJCXByaW50ICAiX25jX2NvZGVzX2xlYWtzKHZvaWQpIgorCQlwcmludCAgInsiCisJCWlmIChiaWdzdHJpbmdzKSB7CisJCXByaW50ICAiRlJFRV9GSVgoYm9vbGNvZGVzKSIKKwkJcHJpbnQgICJGUkVFX0ZJWChudW1jb2RlcykiCisJCXByaW50ICAiRlJFRV9GSVgoc3RyY29kZXMpIgorCQl9CisJCXByaW50ICAifSIKKwkJcHJpbnQgICIjZW5kaWYiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNlbHNlIgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIjZGVmaW5lIERDTChpdCkgTkNVUlNFU19FWFBPUlRfVkFSKElUKSBpdFtdIgorCQlwcmludCAgIiIKKwkJcHJpbnRfc3RyaW5ncygiYm9vbGNvZGVzIiwgc21hbGxfYm9vbGNvZGVzKTsKKwkJcHJpbnRfc3RyaW5ncygibnVtY29kZXMiLCBzbWFsbF9udW1jb2Rlcyk7CisJCXByaW50X3N0cmluZ3MoInN0cmNvZGVzIiwgc21hbGxfc3RyY29kZXMpOworCQlwcmludCAgIiIKKwkJcHJpbnQgICIjZW5kaWYgLyogQlJPS0VOX0xJTktFUiAqLyIKKwl9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL01LZmFsbGJhY2suc2ggYi9uY3Vyc2VzL3RpbmZvL01LZmFsbGJhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWZlYWIzNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vTUtmYWxsYmFjay5zaApAQCAtMCwwICsxLDEyOSBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogTUtmYWxsYmFjay5zaCx2IDEuMTMgMjAwNi8wNy8xNSAxNjo1NDoyMCB0b20gRXhwICQKKyMKKyMgTUtmYWxsYmFjay5zaCAtLSBjcmVhdGUgZmFsbGJhY2sgdGFibGUgZm9yIGVudHJ5IHJlYWRzCisjCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBzb3VyY2UgY29kZSBmb3IgYSBjdXN0b20gdmVyc2lvbiBvZiByZWFkX2VudHJ5LmMKKyMgdGhhdCAoaW5zdGVhZCBvZiByZWFkaW5nIGNhcGFiaWxpdGllcyBmb3IgYW4gYXJndW1lbnQgdGVybWluYWwgdHlwZQorIyBmcm9tIGFuIG9uLWRpc2sgdGVybWluZm8gdHJlZSkgdHJpZXMgdG8gbWF0Y2ggdGhlIHR5cGUgd2l0aCBvbmUgb2YgYQorIyBzcGVjaWZpZWQgbGlzdCBvZiB0eXBlcyBnZW5lcmF0ZWQgaW4uCisjCisKK3Rlcm1pbmZvX2Rpcj0kMQorc2hpZnQKKwordGVybWluZm9fc3JjPSQxCitzaGlmdAorCitpZiB0ZXN0ICQjICE9IDAgOyB0aGVuCisJdG1wX2luZm89dG1wX2luZm8KKwllY2hvIGNyZWF0aW5nIHRlbXBvcmFyeSB0ZXJtaW5mbyBkaXJlY3RvcnkuLi4gPiYyCisKKwlURVJNSU5GTz1gcHdkYC8kdG1wX2luZm8KKwlleHBvcnQgVEVSTUlORk8KKworCVRFUk1JTkZPX0RJUlM9JFRFUk1JTkZPOiR0ZXJtaW5mb19kaXIKKwlleHBvcnQgVEVSTUlORk9fRElSUworCisJdGljIC14ICR0ZXJtaW5mb19zcmMgPiYyCitlbHNlCisJdG1wX2luZm89CitmaQorCitjYXQgPDxFT0YKKy8qCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUgQlkgSEFORCEgIEl0IGlzIGdlbmVyYXRlZCBieSBNS2ZhbGxiYWNrLnNoLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworRU9GCisKK2lmIFsgIiQqIiBdCit0aGVuCisJY2F0IDw8RU9GCisjaW5jbHVkZSA8dGljLmg+CisKKy8qIGZhbGxiYWNrIGVudHJpZXMgZm9yOiAkKiAqLworRU9GCisJZm9yIHggaW4gJCoKKwlkbworCQllY2hvICIvKiAkeCAqLyIKKwkJaW5mb2NtcCAtRSAkeAorCWRvbmUKKworCWNhdCA8PEVPRgorc3RhdGljIGNvbnN0IFRFUk1UWVBFIGZhbGxiYWNrc1skI10gPQoreworRU9GCisJY29tbWE9IiIKKwlmb3IgeCBpbiAkKgorCWRvCisJCWVjaG8gIiRjb21tYSAvKiAkeCAqLyIKKwkJaW5mb2NtcCAtZSAkeAorCQljb21tYT0iLCIKKwlkb25lCisKKwljYXQgPDxFT0YKK307CisKK0VPRgorZmkKKworY2F0IDw8RU9GCitOQ1VSU0VTX0VYUE9SVChjb25zdCBURVJNVFlQRSAqKSBfbmNfZmFsbGJhY2sgKGNvbnN0IGNoYXIgKm5hbWUgR0NDX1VOVVNFRCkKK3sKK0VPRgorCitpZiBbICIkKiIgXQordGhlbgorCWNhdCA8PEVPRgorICAgIGNvbnN0IFRFUk1UWVBFCSp0cDsKKworICAgIGZvciAodHAgPSBmYWxsYmFja3M7CisJIAl0cCA8IGZhbGxiYWNrcyArIHNpemVvZihmYWxsYmFja3MpL3NpemVvZihURVJNVFlQRSk7CisJIAl0cCsrKQorCWlmIChfbmNfbmFtZV9tYXRjaCh0cC0+dGVybV9uYW1lcywgbmFtZSwgInwiKSkKKwkgICAgcmV0dXJuKHRwKTsKK0VPRgorZWxzZQorCWVjaG8gIgkvKiB0aGUgZmFsbGJhY2sgbGlzdCBpcyBlbXB0eSAqLyI7CitmaQorCitjYXQgPDxFT0YKKwlyZXR1cm4oKFRFUk1UWVBFICopMCk7Cit9CitFT0YKKworaWYgdGVzdCAtbiAiJHRtcF9pbmZvIiA7IHRoZW4KKwllY2hvIHJlbW92aW5nIHRlbXBvcmFyeSB0ZXJtaW5mbyBkaXJlY3RvcnkuLi4gPiYyCisJcm0gLXJmICR0bXBfaW5mbworZmkKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vTUtrZXlzX2xpc3Quc2ggYi9uY3Vyc2VzL3RpbmZvL01La2V5c19saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0MDE3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL01La2V5c19saXN0LnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhIC9iaW4vc2gKKyMgJElkOiBNS2tleXNfbGlzdC5zaCx2IDEuNCAyMDAzLzEwLzI1IDE2OjE5OjU0IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMSwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBNS2tleV9kZWZzLnNoIC0tIGdlbmVyYXRlIGxpc3Qgb2YgZnVuY3Rpb24ta2V5cyBmb3IgdGVybWluZm8gZGF0YWJhc2UKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDEKKyMKKyMgRXh0cmFjdCBmdW5jdGlvbi1rZXkgbmFtZXMgZnJvbSB0aGUgQ2FwcyBmaWxlCisjCis6ICR7QVdLLWF3a30KK0RBVEE9JHsxLS4uLy4uL2luY2x1ZGUvQ2Fwc30KKworZGF0YT1kYXRhJCQKK3RyYXAgJ3JtIC1mICRkYXRhJyAwIDEgMiA1IDE1CitzZWQgLWUgJ3MvWwldWwldKi8JL2cnIDwgJERBVEEgPiRkYXRhCisKK2NhdCA8PEVPRgorIyBUaGVzZSBkZWZpbml0aW9ucyB3ZXJlIGdlbmVyYXRlZCBieSAkMCAkREFUQQorS0VZX0JSRUFLCitLRVlfU1JFU0VUCitLRVlfUkVTRVQKK0tFWV9SRVNJWkUKK0VPRgorCiske0FXSy1hd2t9IDwkZGF0YSAnCisvXiMvCQl7bmV4dDt9CisvXmNhcGFsaWFzLwl7bmV4dDt9CisvXmluZm9hbGlhcy8Je25leHQ7fQorCiskNSAhPSAiLSIgeworCQlpZiAoc3Vic3RyKCQ1LCAxLCA0KSA9PSAiS0VZXyIgKSB7CisJCQlwcmludGYgIiVzCSVzXG4iLCAkNSwgJDEKKwl9Cit9CisnCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL01LbmFtZXMuYXdrIGIvbmN1cnNlcy90aW5mby9NS25hbWVzLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTUwNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9NS25hbWVzLmF3awpAQCAtMCwwICsxLDE4NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IE1LbmFtZXMuYXdrLHYgMS4yMCAyMDA4LzEwLzExIDIxOjA3OjU2IHRvbSBFeHAgJAorZnVuY3Rpb24gbGFyZ2VfaXRlbSh2YWx1ZSkgeworCXJlc3VsdCA9IHNwcmludGYoIiVkLCIsIG9mZnNldCk7CisJb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoKHZhbHVlKSArIDE7CisJb2ZmY29sID0gb2ZmY29sICsgbGVuZ3RoKHJlc3VsdCkgKyAyOworCWlmIChvZmZjb2wgPiA3MCkgeworCQlyZXN1bHQgPSByZXN1bHQgIlxuIjsKKwkJb2ZmY29sID0gMDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSByZXN1bHQgIiAiOworCX0KKwliaWdzdHIgPSBiaWdzdHIgc3ByaW50ZigiXCIlc1xcMFwiICIsIHZhbHVlKTsKKwliaWdjb2wgPSBiaWdjb2wgKyBsZW5ndGgodmFsdWUpICsgNTsKKwlpZiAoYmlnY29sID4gNzApIHsKKwkJYmlnc3RyID0gYmlnc3RyICJcXFxuIjsKKwkJYmlnY29sID0gMDsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gc21hbGxfaXRlbSh2YWx1ZSkgeworCXJldHVybiBzcHJpbnRmKCJcdFx0XCIlc1wiLFxuIiwgdmFsdWUpOworfQorCitmdW5jdGlvbiBwcmludF9zdHJpbmdzKG5hbWUsdmFsdWUpIHsKKwlwcmludGYgICJEQ0woJXMpID0ge1xuIiwgbmFtZQorCXByaW50ICB2YWx1ZQorCXByaW50ICAiXHRcdChOQ1VSU0VTX0NPTlNUIGNoYXIgKikwLCIKKwlwcmludCAgIn07IgorCXByaW50ICAiIgorfQorCitmdW5jdGlvbiBwcmludF9vZmZzZXRzKG5hbWUsdmFsdWUpIHsKKwlwcmludGYgICJzdGF0aWMgY29uc3Qgc2hvcnQgX25jX29mZnNldF8lc1tdID0ge1xuIiwgbmFtZQorCXByaW50ZiAiJXMiLCAgdmFsdWUKKwlwcmludCAgIn07IgorCXByaW50ICAiIgorCXByaW50ZiAic3RhdGljIE5DVVJTRVNfQ09OU1QgY2hhciAqKiBwdHJfJXMgPSAwO1xuIiwgbmFtZQorCXByaW50ICAiIgorfQorCitCRUdJTgl7CisJCXByaW50ICAiLyogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgTUtuYW1lcy5hd2sgKi8iCisJCXByaW50ICAiIgorCQlwcmludCAgIiNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPiIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2RlZmluZSBJVCBOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCIKKwkJcHJpbnQgICIiCisJCW9mZnNldCA9IDA7CisJCW9mZmNvbCA9IDA7CisJCWJpZ2NvbCA9IDA7CisJfQorCiskMSB+IC9eIy8JCXtuZXh0O30KKworJDEgPT0gIlNLSVBXQVJOIgl7bmV4dDt9CisKKyQzID09ICJib29sIgl7CisJCQlzbWFsbF9ib29sbmFtZXMgPSBzbWFsbF9ib29sbmFtZXMgc21hbGxfaXRlbSgkMik7CisJCQlsYXJnZV9ib29sbmFtZXMgPSBsYXJnZV9ib29sbmFtZXMgbGFyZ2VfaXRlbSgkMik7CisJCQlzbWFsbF9ib29sZm5hbWVzID0gc21hbGxfYm9vbGZuYW1lcyBzbWFsbF9pdGVtKCQxKTsKKwkJCWxhcmdlX2Jvb2xmbmFtZXMgPSBsYXJnZV9ib29sZm5hbWVzIGxhcmdlX2l0ZW0oJDEpOworCQl9CisKKyQzID09ICJudW0iCXsKKwkJCXNtYWxsX251bW5hbWVzID0gc21hbGxfbnVtbmFtZXMgc21hbGxfaXRlbSgkMik7CisJCQlsYXJnZV9udW1uYW1lcyA9IGxhcmdlX251bW5hbWVzIGxhcmdlX2l0ZW0oJDIpOworCQkJc21hbGxfbnVtZm5hbWVzID0gc21hbGxfbnVtZm5hbWVzIHNtYWxsX2l0ZW0oJDEpOworCQkJbGFyZ2VfbnVtZm5hbWVzID0gbGFyZ2VfbnVtZm5hbWVzIGxhcmdlX2l0ZW0oJDEpOworCQl9CisKKyQzID09ICJzdHIiCXsKKwkJCXNtYWxsX3N0cm5hbWVzID0gc21hbGxfc3RybmFtZXMgc21hbGxfaXRlbSgkMik7CisJCQlsYXJnZV9zdHJuYW1lcyA9IGxhcmdlX3N0cm5hbWVzIGxhcmdlX2l0ZW0oJDIpOworCQkJc21hbGxfc3RyZm5hbWVzID0gc21hbGxfc3RyZm5hbWVzIHNtYWxsX2l0ZW0oJDEpOworCQkJbGFyZ2Vfc3RyZm5hbWVzID0gbGFyZ2Vfc3RyZm5hbWVzIGxhcmdlX2l0ZW0oJDEpOworCQl9CisKK0VORAl7CisJCXByaW50ICAiIgorCQlwcmludCAgIiNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNpbmNsdWRlIDx0ZXJtLmg+IgorCQlwcmludCAgIiIKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJCXByaW50ZiAic3RhdGljIGNvbnN0IGNoYXIgX25jX25hbWVfYmxvYltdID0gXG4iCisJCQlwcmludGYgIiVzO1xuIiwgYmlnc3RyOworCQkJcHJpbnRfb2Zmc2V0cygiYm9vbGZuYW1lcyIsIGxhcmdlX2Jvb2xmbmFtZXMpOworCQkJcHJpbnRfb2Zmc2V0cygiYm9vbG5hbWVzIiwgbGFyZ2VfYm9vbG5hbWVzKTsKKwkJCXByaW50X29mZnNldHMoIm51bWZuYW1lcyIsIGxhcmdlX251bWZuYW1lcyk7CisJCQlwcmludF9vZmZzZXRzKCJudW1uYW1lcyIsIGxhcmdlX251bW5hbWVzKTsKKwkJCXByaW50X29mZnNldHMoInN0cmZuYW1lcyIsIGxhcmdlX3N0cmZuYW1lcyk7CisJCQlwcmludF9vZmZzZXRzKCJzdHJuYW1lcyIsIGxhcmdlX3N0cm5hbWVzKTsKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJzdGF0aWMgSVQgKiIKKwkJCXByaW50ICAiYWxsb2NfYXJyYXkoTkNVUlNFU19DT05TVCBjaGFyICoqKnZhbHVlLCBjb25zdCBzaG9ydCAqb2Zmc2V0cywgdW5zaWduZWQgc2l6ZSkiCisJCQlwcmludCAgInsiCisJCQlwcmludCAgIglpZiAoKnZhbHVlID09IDApIHsiCisJCQlwcmludCAgIgkJaWYgKCgqdmFsdWUgPSB0eXBlQ2FsbG9jKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBzaXplICsgMSkpICE9IDApIHsiCisJCQlwcmludCAgIgkJCXVuc2lnbmVkIG47IgorCQkJcHJpbnQgICIJCQlmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7IgorCQkJcHJpbnQgICIJCQkJKCp2YWx1ZSlbbl0gPSAoTkNVUlNFU19DT05TVCBjaGFyICopIF9uY19uYW1lX2Jsb2IgKyBvZmZzZXRzW25dOyIKKwkJCXByaW50ICAiCQkJfSIKKwkJCXByaW50ICAiCQl9IgorCQkJcHJpbnQgICIJfSIKKwkJCXByaW50ICAiCXJldHVybiAqdmFsdWU7IgorCQkJcHJpbnQgICJ9IgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiNkZWZpbmUgRklYKGl0KSBOQ1VSU0VTX0lNUEVYUCBJVCAqIE5DVVJTRVNfQVBJIF9uY18jI2l0KHZvaWQpIHsgcmV0dXJuIGFsbG9jX2FycmF5KCZwdHJfIyNpdCwgX25jX29mZnNldF8jI2l0LCBTSVpFT0YoX25jX29mZnNldF8jI2l0KSk7IH0iCisJCX0gZWxzZSB7CisJCQlwcmludCAgIiNkZWZpbmUgRENMKGl0KSBzdGF0aWMgSVQgZGF0YSMjaXRbXSIKKwkJCXByaW50ICAiIgorCQkJcHJpbnRfc3RyaW5ncygiYm9vbG5hbWVzIiwgc21hbGxfYm9vbG5hbWVzKTsKKwkJCXByaW50X3N0cmluZ3MoImJvb2xmbmFtZXMiLCBzbWFsbF9ib29sZm5hbWVzKTsKKwkJCXByaW50X3N0cmluZ3MoIm51bW5hbWVzIiwgc21hbGxfbnVtbmFtZXMpOworCQkJcHJpbnRfc3RyaW5ncygibnVtZm5hbWVzIiwgc21hbGxfbnVtZm5hbWVzKTsKKwkJCXByaW50X3N0cmluZ3MoInN0cm5hbWVzIiwgc21hbGxfc3RybmFtZXMpOworCQkJcHJpbnRfc3RyaW5ncygic3RyZm5hbWVzIiwgc21hbGxfc3RyZm5hbWVzKTsKKwkJCXByaW50ICAiI2RlZmluZSBGSVgoaXQpIE5DVVJTRVNfSU1QRVhQIElUICogTkNVUlNFU19BUEkgX25jXyMjaXQodm9pZCkgeyByZXR1cm4gZGF0YSMjaXQ7IH0iCisJCX0KKwkJcHJpbnQgICIiCisJCXByaW50ICAiRklYKGJvb2xuYW1lcykiCisJCXByaW50ICAiRklYKGJvb2xmbmFtZXMpIgorCQlwcmludCAgIkZJWChudW1uYW1lcykiCisJCXByaW50ICAiRklYKG51bWZuYW1lcykiCisJCXByaW50ICAiRklYKHN0cm5hbWVzKSIKKwkJcHJpbnQgICJGSVgoc3RyZm5hbWVzKSIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNkZWZpbmUgRlJFRV9GSVgoaXQpIGlmIChwdHJfIyNpdCkgeyBGcmVlQW5kTnVsbChwdHJfIyNpdCk7IH0iCisJCXByaW50ICAiIgorCQlwcmludCAgIiNpZiBOT19MRUFLUyIKKwkJcHJpbnQgICJOQ1VSU0VTX0VYUE9SVCh2b2lkKSIKKwkJcHJpbnQgICJfbmNfbmFtZXNfbGVha3Modm9pZCkiCisJCXByaW50ICAieyIKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJcHJpbnQgICJGUkVFX0ZJWChib29sbmFtZXMpIgorCQlwcmludCAgIkZSRUVfRklYKGJvb2xmbmFtZXMpIgorCQlwcmludCAgIkZSRUVfRklYKG51bW5hbWVzKSIKKwkJcHJpbnQgICJGUkVFX0ZJWChudW1mbmFtZXMpIgorCQlwcmludCAgIkZSRUVfRklYKHN0cm5hbWVzKSIKKwkJcHJpbnQgICJGUkVFX0ZJWChzdHJmbmFtZXMpIgorCQl9CisJCXByaW50ICAifSIKKwkJcHJpbnQgICIjZW5kaWYiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNlbHNlIgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIjZGVmaW5lIERDTChpdCkgTkNVUlNFU19FWFBPUlRfVkFSKElUKSBpdFtdIgorCQlwcmludCAgIiIKKwkJcHJpbnRfc3RyaW5ncygiYm9vbG5hbWVzIiwgc21hbGxfYm9vbG5hbWVzKTsKKwkJcHJpbnRfc3RyaW5ncygiYm9vbGZuYW1lcyIsIHNtYWxsX2Jvb2xmbmFtZXMpOworCQlwcmludF9zdHJpbmdzKCJudW1uYW1lcyIsIHNtYWxsX251bW5hbWVzKTsKKwkJcHJpbnRfc3RyaW5ncygibnVtZm5hbWVzIiwgc21hbGxfbnVtZm5hbWVzKTsKKwkJcHJpbnRfc3RyaW5ncygic3RybmFtZXMiLCBzbWFsbF9zdHJuYW1lcyk7CisJCXByaW50X3N0cmluZ3MoInN0cmZuYW1lcyIsIHNtYWxsX3N0cmZuYW1lcyk7CisJCXByaW50ICAiIgorCQlwcmludCAgIiNlbmRpZiAvKiBCUk9LRU5fTElOS0VSICovIgorCX0KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vUkVBRE1FIGIvbmN1cnNlcy90aW5mby9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNDIyMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vUkVBRE1FCkBAIC0wLDAgKzEsMzYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRE1FLHYgMS4yIDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSAodGluZm8pIGFyZSB0aG9zZSB0aGF0IHN1cHBvcnQgdGhlIHRlcm1pbmZvCitkYXRhYmFzZSBhbmQgaW50ZXJmYWNlcyBmb3IgbmN1cnNlcy4gIFRoZSB0ZXJtaW5mbyBsaWJyYXJ5IGNhbiBiZSBidWlsdAorc2VwYXJhdGVseSwgYXMgYSBsb3dlci1sZXZlbCBsaWJyYXJ5IGZvciBuY3Vyc2VzLCBidXQgdXN1YWxseSBpcyBidW5kbGVkLgorCitJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgZG9jdW1lbnRlZCBpbnRlcmZhY2VzLCBuY3Vyc2VzIHVzZXMgaW50ZXJuYWwKK2Z1bmN0aW9ucyB3aGljaCByZXNpZGUgaW4gdGluZm8gdG8gc2F0aXNmeSBsaW5rYWdlIHJlcXVpcmVtZW50cy4KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vYWNjZXNzLmMgYi9uY3Vyc2VzL3RpbmZvL2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOGNjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2FjY2Vzcy5jCkBAIC0wLDAgKzEsMTc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPG5jX2FsbG9jLmg+CisKK01PRFVMRV9JRCgiJElkOiBhY2Nlc3MuYyx2IDEuMTQgMjAwNy8xMS8xOCAwMDo1Nzo1MyB0b20gRXhwICQiKQorCisjZGVmaW5lIExPV0VSQ0FTRShjKSAoKGlzYWxwaGEoVUNoYXIoYykpICYmIGlzdXBwZXIoVUNoYXIoYykpKSA/IHRvbG93ZXIoVUNoYXIoYykpIDogKGMpKQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfcm9vdG5hbWUoY2hhciAqcGF0aCkKK3sKKyAgICBjaGFyICpyZXN1bHQgPSBfbmNfYmFzZW5hbWUocGF0aCk7CisjaWYgIU1JWEVEQ0FTRV9GSUxFTkFNRVMgfHwgZGVmaW5lZChQUk9HX0VYVCkKKyAgICBzdGF0aWMgY2hhciAqdGVtcDsKKyAgICBjaGFyICpzOworCisgICAgdGVtcCA9IHN0cmR1cChyZXN1bHQpOworICAgIHJlc3VsdCA9IHRlbXA7CisjaWYgIU1JWEVEQ0FTRV9GSUxFTkFNRVMKKyAgICBmb3IgKHMgPSByZXN1bHQ7ICpzICE9ICdcMCc7ICsrcykgeworCSpzID0gTE9XRVJDQVNFKCpzKTsKKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKFBST0dfRVhUKQorICAgIGlmICgocyA9IHN0cnJjaHIocmVzdWx0LCAnLicpKSAhPSAwKSB7CisJaWYgKCFzdHJjbXAocywgUFJPR19FWFQpKQorCSAgICAqcyA9ICdcMCc7CisgICAgfQorI2VuZGlmCisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2hlY2sgaWYgYSBzdHJpbmcgYXBwZWFycyB0byBiZSBhbiBhYnNvbHV0ZSBwYXRobmFtZS4KKyAqLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19pc19hYnNfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworI2lmIGRlZmluZWQoX19FTVhfXykgfHwgZGVmaW5lZChfX0RKR1BQX18pCisjZGVmaW5lIGlzX3BhdGhuYW1lKHMpICgoKChzKSAhPSAwKSAmJiAoKHMpWzBdID09ICcvJykpIFwKKwkJICB8fCAoKChzKVswXSAhPSAwKSAmJiAoKHMpWzFdID09ICc6JykpKQorI2Vsc2UKKyNkZWZpbmUgaXNfcGF0aG5hbWUocykgKChzKSAhPSAwICYmIChzKVswXSA9PSAnLycpCisjZW5kaWYKKyAgICByZXR1cm4gaXNfcGF0aG5hbWUocGF0aCk7Cit9CisKKy8qCisgKiBSZXR1cm4gaW5kZXggb2YgdGhlIGJhc2VuYW1lCisgKi8KK05DVVJTRVNfRVhQT1JUKHVuc2lnbmVkKQorX25jX3BhdGhsYXN0KGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgY29uc3QgY2hhciAqdGVzdCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKyNpZmRlZiBfX0VNWF9fCisgICAgaWYgKHRlc3QgPT0gMCkKKwl0ZXN0ID0gc3RycmNocihwYXRoLCAnXFwnKTsKKyNlbmRpZgorICAgIGlmICh0ZXN0ID09IDApCisJdGVzdCA9IHBhdGg7CisgICAgZWxzZQorCXRlc3QrKzsKKyAgICByZXR1cm4gKHRlc3QgLSBwYXRoKTsKK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX2Jhc2VuYW1lKGNoYXIgKnBhdGgpCit7CisgICAgcmV0dXJuIHBhdGggKyBfbmNfcGF0aGxhc3QocGF0aCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19hY2Nlc3MoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpCit7CisgICAgaWYgKGFjY2VzcyhwYXRoLCBtb2RlKSA8IDApIHsKKwlpZiAoKG1vZGUgJiBXX09LKSAhPSAwCisJICAgICYmIGVycm5vID09IEVOT0VOVAorCSAgICAmJiBzdHJsZW4ocGF0aCkgPCBQQVRIX01BWCkgeworCSAgICBjaGFyIGhlYWRbUEFUSF9NQVhdOworCSAgICBjaGFyICpsZWFmID0gX25jX2Jhc2VuYW1lKHN0cmNweShoZWFkLCBwYXRoKSk7CisKKwkgICAgaWYgKGxlYWYgPT0gMCkKKwkJbGVhZiA9IGhlYWQ7CisJICAgICpsZWFmID0gJ1wwJzsKKwkgICAgaWYgKGhlYWQgPT0gbGVhZikKKwkJKHZvaWQpIHN0cmNweShoZWFkLCAiLiIpOworCisJICAgIHJldHVybiBhY2Nlc3MoaGVhZCwgUl9PSyB8IFdfT0sgfCBYX09LKTsKKwl9CisJcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19pc19kaXJfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisgICAgc3RydWN0IHN0YXQgc2I7CisKKyAgICBpZiAoc3RhdChwYXRoLCAmc2IpID09IDAKKwkmJiAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikgeworCXJlc3VsdCA9IFRSVUU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGJvb2wpCitfbmNfaXNfZmlsZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKworICAgIGlmIChzdGF0KHBhdGgsICZzYikgPT0gMAorCSYmIChzYi5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSB7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmbmRlZiBVU0VfUk9PVF9FTlZJUk9OCisvKgorICogUmV0dXJucyB0cnVlIGlmIHdlIGFsbG93IGFwcGxpY2F0aW9uIHRvIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUKKyAqIHVzZWQgZm9yIHNlYXJjaGluZyBsaXN0cyBvZiBkaXJlY3RvcmllcywgZXRjLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZW52X2FjY2Vzcyh2b2lkKQoreworI2lmIEhBVkVfSVNTRVRVR0lECisgICAgaWYgKGlzc2V0dWdpZCgpKQorCXJldHVybiBGQUxTRTsKKyNlbGlmIEhBVkVfR0VURVVJRCAmJiBIQVZFX0dFVEVHSUQKKyAgICBpZiAoZ2V0dWlkKCkgIT0gZ2V0ZXVpZCgpCisJfHwgZ2V0Z2lkKCkgIT0gZ2V0ZWdpZCgpKQorCXJldHVybiBGQUxTRTsKKyNlbmRpZgorICAgIHJldHVybiBnZXR1aWQoKSAhPSAwICYmIGdldGV1aWQoKSAhPSAwOwkvKiAuLi5maW5hbGx5LCBkaXNhbGxvdyByb290ICovCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vYWRkX3RyaWVzLmMgYi9uY3Vyc2VzL3RpbmZvL2FkZF90cmllcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWQxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2FkZF90cmllcy5jCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgIDE5OTgtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJYWRkX3RyaWVzLmMKKyoqCisqKglBZGQga2V5Y29kZS9zdHJpbmcgdG8gdHJpZXMtdHJlZS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGFkZF90cmllcy5jLHYgMS44IDIwMDYvMTIvMzAgMjM6MTU6MjYgdG9tIEV4cCAkIikKKworI2RlZmluZSBTRVRfVFJZKGRzdCxzcmMpIGlmICgoZHN0LT5jaCA9ICpzcmMrKykgPT0gMTI4KSBkc3QtPmNoID0gJ1wwJworI2RlZmluZSBDTVBfVFJZKGEsYikgKChhKT8gKGEgPT0gYikgOiAoYiA9PSAxMjgpKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfYWRkX3RvX3RyeShUUklFUyAqKiB0cmVlLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNvZGUpCit7CisgICAgVFJJRVMgKnB0ciwgKnNhdmVkcHRyOworICAgIHVuc2lnbmVkIGNvbnN0IGNoYXIgKnR4dCA9ICh1bnNpZ25lZCBjb25zdCBjaGFyICopIHN0cjsKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfYWRkX3RvX3RyeSglcCwgJXMsICV1KSIpLCAqdHJlZSwgX25jX3Zpc2J1ZihzdHIpLCBjb2RlKSk7CisgICAgaWYgKHR4dCA9PSAwIHx8ICp0eHQgPT0gJ1wwJyB8fCBjb2RlID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKCgqdHJlZSkgIT0gMCkgeworCXB0ciA9IHNhdmVkcHRyID0gKCp0cmVlKTsKKworCWZvciAoOzspIHsKKwkgICAgdW5zaWduZWQgY2hhciBjbXAgPSAqdHh0OworCisJICAgIHdoaWxlICghQ01QX1RSWShwdHItPmNoLCBjbXApCisJCSAgICYmIHB0ci0+c2libGluZyAhPSAwKQorCQlwdHIgPSBwdHItPnNpYmxpbmc7CisKKwkgICAgaWYgKENNUF9UUlkocHRyLT5jaCwgY21wKSkgeworCQlpZiAoKigrK3R4dCkgPT0gJ1wwJykgeworCQkgICAgcHRyLT52YWx1ZSA9IGNvZGU7CisJCSAgICByZXR1cm5Db2RlKE9LKTsKKwkJfQorCQlpZiAocHRyLT5jaGlsZCAhPSAwKQorCQkgICAgcHRyID0gcHRyLT5jaGlsZDsKKwkJZWxzZQorCQkgICAgYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCWlmICgocHRyLT5zaWJsaW5nID0gdHlwZUNhbGxvYyhUUklFUywgMSkpID09IDApIHsKKwkJICAgIHJldHVybkNvZGUoRVJSKTsKKwkJfQorCisJCXNhdmVkcHRyID0gcHRyID0gcHRyLT5zaWJsaW5nOworCQlTRVRfVFJZKHB0ciwgdHh0KTsKKwkJcHRyLT52YWx1ZSA9IDA7CisKKwkJYnJlYWs7CisJICAgIH0KKwl9CQkJLyogZW5kIGZvciAoOzspICovCisgICAgfSBlbHNlIHsJCQkvKiAoKnRyZWUpID09IDAgOjogRmlyc3Qgc2VxdWVuY2UgdG8gYmUgYWRkZWQgKi8KKwlzYXZlZHB0ciA9IHB0ciA9ICgqdHJlZSkgPSB0eXBlQ2FsbG9jKFRSSUVTLCAxKTsKKworCWlmIChwdHIgPT0gMCkgeworCSAgICByZXR1cm5Db2RlKEVSUik7CisJfQorCisJU0VUX1RSWShwdHIsIHR4dCk7CisJcHRyLT52YWx1ZSA9IDA7CisgICAgfQorCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2UgYXJlIGFkZGluZyB0byB0aGUgdHJ5LiAgcHRyLT5jaGlsZCA9PSAwICovCisKKyAgICB3aGlsZSAoKnR4dCkgeworCXB0ci0+Y2hpbGQgPSB0eXBlQ2FsbG9jKFRSSUVTLCAxKTsKKworCXB0ciA9IHB0ci0+Y2hpbGQ7CisKKwlpZiAocHRyID09IDApIHsKKwkgICAgd2hpbGUgKChwdHIgPSBzYXZlZHB0cikgIT0gMCkgeworCQlzYXZlZHB0ciA9IHB0ci0+Y2hpbGQ7CisJCWZyZWUocHRyKTsKKwkgICAgfQorCSAgICByZXR1cm5Db2RlKEVSUik7CisJfQorCisJU0VUX1RSWShwdHIsIHR4dCk7CisJcHRyLT52YWx1ZSA9IDA7CisgICAgfQorCisgICAgcHRyLT52YWx1ZSA9IGNvZGU7CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2FsbG9jX2VudHJ5LmMgYi9uY3Vyc2VzL3RpbmZvL2FsbG9jX2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzOGU5OQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogYWxsb2NfZW50cnkuYyAtLSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBmb3IgdGVybWluZm8gZW50cmllcworICoKKyAqCV9uY19jb3B5X2VudHJ5KCkKKyAqCV9uY19pbml0X2VudHJ5KCkKKyAqCV9uY19tZXJnZV9lbnRyeSgpCisgKglfbmNfc2F2ZV9zdHIoKQorICoJX25jX3dyYXBfZW50cnkoKQorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGFsbG9jX2VudHJ5LmMsdiAxLjQ4IDIwMDgvMDgvMTYgMTY6MjU6MzEgdG9tIEV4cCAkIikKKworI2RlZmluZSBBQlNFTlRfT0ZGU0VUICAgIC0xCisjZGVmaW5lIENBTkNFTExFRF9PRkZTRVQgLTIKKworI2RlZmluZSBNQVhfU1RSVEFCCTQwOTYJLyogZG9jdW1lbnRlZCBtYXhpbXVtIGVudHJ5IHNpemUgKi8KKworc3RhdGljIGNoYXIgKnN0cmluZ2J1ZjsJCS8qIGJ1ZmZlciBmb3Igc3RyaW5nIGNhcGFiaWxpdGllcyAqLworc3RhdGljIHNpemVfdCBuZXh0X2ZyZWU7CS8qIG5leHQgZnJlZSBjaGFyYWN0ZXIgaW4gc3RyaW5nYnVmICovCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaW5pdF9lbnRyeShURVJNVFlQRSAqY29uc3QgdHApCisvKiBpbml0aWFsaXplIGEgdGVybWluYWwgdHlwZSBkYXRhIGJsb2NrICovCit7CisgICAgdW5zaWduZWQgaTsKKworI2lmIE5PX0xFQUtTCisgICAgaWYgKHRwID09IDAgJiYgc3RyaW5nYnVmICE9IDApIHsKKwlGcmVlQW5kTnVsbChzdHJpbmdidWYpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChzdHJpbmdidWYgPT0gMCkKKwlzdHJpbmdidWYgPSAoY2hhciAqKSBtYWxsb2MoTUFYX1NUUlRBQik7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIHRwLT5udW1fQm9vbGVhbnMgPSBCT09MQ09VTlQ7CisgICAgdHAtPm51bV9OdW1iZXJzID0gTlVNQ09VTlQ7CisgICAgdHAtPm51bV9TdHJpbmdzID0gU1RSQ09VTlQ7CisgICAgdHAtPmV4dF9Cb29sZWFucyA9IDA7CisgICAgdHAtPmV4dF9OdW1iZXJzID0gMDsKKyAgICB0cC0+ZXh0X1N0cmluZ3MgPSAwOworI2VuZGlmCisgICAgaWYgKHRwLT5Cb29sZWFucyA9PSAwKQorCXRwLT5Cb29sZWFucyA9IHR5cGVNYWxsb2MoTkNVUlNFU19TQk9PTCwgQk9PTENPVU5UKTsKKyAgICBpZiAodHAtPk51bWJlcnMgPT0gMCkKKwl0cC0+TnVtYmVycyA9IHR5cGVNYWxsb2Moc2hvcnQsIE5VTUNPVU5UKTsKKyAgICBpZiAodHAtPlN0cmluZ3MgPT0gMCkKKwl0cC0+U3RyaW5ncyA9IHR5cGVNYWxsb2MoY2hhciAqLCBTVFJDT1VOVCk7CisKKyAgICBmb3JfZWFjaF9ib29sZWFuKGksIHRwKQorCXRwLT5Cb29sZWFuc1tpXSA9IEZBTFNFOworCisgICAgZm9yX2VhY2hfbnVtYmVyKGksIHRwKQorCXRwLT5OdW1iZXJzW2ldID0gQUJTRU5UX05VTUVSSUM7CisKKyAgICBmb3JfZWFjaF9zdHJpbmcoaSwgdHApCisJdHAtPlN0cmluZ3NbaV0gPSBBQlNFTlRfU1RSSU5HOworCisgICAgbmV4dF9mcmVlID0gMDsKK30KKworTkNVUlNFU19FWFBPUlQoRU5UUlkgKikKK19uY19jb3B5X2VudHJ5KEVOVFJZICogb2xkcCkKK3sKKyAgICBFTlRSWSAqbmV3cCA9IHR5cGVDYWxsb2MoRU5UUlksIDEpOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworCSpuZXdwID0gKm9sZHA7CisJX25jX2NvcHlfdGVybXR5cGUoJihuZXdwLT50dGVybSksICYob2xkcC0+dHRlcm0pKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld3A7Cit9CisKKy8qIHNhdmUgYSBjb3B5IG9mIHN0cmluZyBpbiB0aGUgc3RyaW5nIGJ1ZmZlciAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3NhdmVfc3RyKGNvbnN0IGNoYXIgKmNvbnN0IHN0cmluZykKK3sKKyAgICBjaGFyICpyZXN1bHQgPSAwOworICAgIHNpemVfdCBvbGRfbmV4dF9mcmVlID0gbmV4dF9mcmVlOworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKSArIDE7CisKKyAgICBpZiAobGVuID09IDEgJiYgbmV4dF9mcmVlICE9IDApIHsKKwkvKgorCSAqIENoZWF0IGEgbGl0dGxlIGJ5IG1ha2luZyBhbiBlbXB0eSBzdHJpbmcgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUKKwkgKiBwcmV2aW91cyBzdHJpbmcuCisJICovCisJaWYgKG5leHRfZnJlZSA8IE1BWF9TVFJUQUIpIHsKKwkgICAgcmVzdWx0ID0gKHN0cmluZ2J1ZiArIG5leHRfZnJlZSAtIDEpOworCX0KKyAgICB9IGVsc2UgaWYgKG5leHRfZnJlZSArIGxlbiA8IE1BWF9TVFJUQUIpIHsKKwlzdHJjcHkoJnN0cmluZ2J1ZltuZXh0X2ZyZWVdLCBzdHJpbmcpOworCURFQlVHKDcsICgiU2F2ZWQgc3RyaW5nICVzIiwgX25jX3Zpc2J1ZihzdHJpbmcpKSk7CisJREVCVUcoNywgKCJhdCBsb2NhdGlvbiAlZCIsIChpbnQpIG5leHRfZnJlZSkpOworCW5leHRfZnJlZSArPSBsZW47CisJcmVzdWx0ID0gKHN0cmluZ2J1ZiArIG9sZF9uZXh0X2ZyZWUpOworICAgIH0gZWxzZSB7CisJX25jX3dhcm5pbmcoIlRvbyBtdWNoIGRhdGEsIHNvbWUgaXMgbG9zdCIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3dyYXBfZW50cnkoRU5UUlkgKiBjb25zdCBlcCwgYm9vbCBjb3B5X3N0cmluZ3MpCisvKiBjb3B5IHRoZSBzdHJpbmcgcGFydHMgdG8gYWxsb2NhdGVkIHN0b3JhZ2UsIHByZXNlcnZpbmcgcG9pbnRlcnMgdG8gaXQgKi8KK3sKKyAgICBpbnQgb2Zmc2V0c1tNQVhfRU5UUllfU0laRSAvIHNpemVvZihzaG9ydCldOworICAgIGludCB1c2VvZmZzZXRzW01BWF9VU0VTXTsKKyAgICB1bnNpZ25lZCBpLCBuOworICAgIHVuc2lnbmVkIG51c2VzID0gZXAtPm51c2VzOworICAgIFRFUk1UWVBFICp0cCA9ICYoZXAtPnR0ZXJtKTsKKworICAgIGlmIChjb3B5X3N0cmluZ3MpIHsKKwluZXh0X2ZyZWUgPSAwOwkJLyogY2xlYXIgc3RhdGljIHN0b3JhZ2UgKi8KKworCS8qIGNvcHkgdGVybV9uYW1lcywgU3RyaW5ncywgdXNlcyAqLworCXRwLT50ZXJtX25hbWVzID0gX25jX3NhdmVfc3RyKHRwLT50ZXJtX25hbWVzKTsKKwlmb3JfZWFjaF9zdHJpbmcoaSwgdHApIHsKKwkgICAgaWYgKHRwLT5TdHJpbmdzW2ldICE9IEFCU0VOVF9TVFJJTkcgJiYKKwkJdHAtPlN0cmluZ3NbaV0gIT0gQ0FOQ0VMTEVEX1NUUklORykgeworCQl0cC0+U3RyaW5nc1tpXSA9IF9uY19zYXZlX3N0cih0cC0+U3RyaW5nc1tpXSk7CisJICAgIH0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVzZXM7IGkrKykgeworCSAgICBpZiAoZXAtPnVzZXNbaV0ubmFtZSA9PSAwKSB7CisJCWVwLT51c2VzW2ldLm5hbWUgPSBfbmNfc2F2ZV9zdHIoZXAtPnVzZXNbaV0ubmFtZSk7CisJICAgIH0KKwl9CisKKwlmcmVlKHRwLT5zdHJfdGFibGUpOworICAgIH0KKworICAgIGFzc2VydCh0cC0+dGVybV9uYW1lcyA+PSBzdHJpbmdidWYpOworICAgIG4gPSAodW5zaWduZWQpICh0cC0+dGVybV9uYW1lcyAtIHN0cmluZ2J1Zik7CisgICAgZm9yX2VhY2hfc3RyaW5nKGksICYoZXAtPnR0ZXJtKSkgeworCWlmIChpIDwgU0laRU9GKG9mZnNldHMpKSB7CisJICAgIGlmICh0cC0+U3RyaW5nc1tpXSA9PSBBQlNFTlRfU1RSSU5HKSB7CisJCW9mZnNldHNbaV0gPSBBQlNFTlRfT0ZGU0VUOworCSAgICB9IGVsc2UgaWYgKHRwLT5TdHJpbmdzW2ldID09IENBTkNFTExFRF9TVFJJTkcpIHsKKwkJb2Zmc2V0c1tpXSA9IENBTkNFTExFRF9PRkZTRVQ7CisJICAgIH0gZWxzZSB7CisJCW9mZnNldHNbaV0gPSB0cC0+U3RyaW5nc1tpXSAtIHN0cmluZ2J1ZjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVzZXM7IGkrKykgeworCWlmIChlcC0+dXNlc1tpXS5uYW1lID09IDApCisJICAgIHVzZW9mZnNldHNbaV0gPSBBQlNFTlRfT0ZGU0VUOworCWVsc2UKKwkgICAgdXNlb2Zmc2V0c1tpXSA9IGVwLT51c2VzW2ldLm5hbWUgLSBzdHJpbmdidWY7CisgICAgfQorCisgICAgaWYgKCh0cC0+c3RyX3RhYmxlID0gdHlwZU1hbGxvYyhjaGFyLCBuZXh0X2ZyZWUpKSA9PSAoY2hhciAqKSAwKQorCSAgX25jX2Vycl9hYm9ydChNU0dfTk9fTUVNT1JZKTsKKyAgICAodm9pZCkgbWVtY3B5KHRwLT5zdHJfdGFibGUsIHN0cmluZ2J1ZiwgbmV4dF9mcmVlKTsKKworICAgIHRwLT50ZXJtX25hbWVzID0gdHAtPnN0cl90YWJsZSArIG47CisgICAgZm9yX2VhY2hfc3RyaW5nKGksICYoZXAtPnR0ZXJtKSkgeworCWlmIChpIDwgU0laRU9GKG9mZnNldHMpKSB7CisJICAgIGlmIChvZmZzZXRzW2ldID09IEFCU0VOVF9PRkZTRVQpIHsKKwkJdHAtPlN0cmluZ3NbaV0gPSBBQlNFTlRfU1RSSU5HOworCSAgICB9IGVsc2UgaWYgKG9mZnNldHNbaV0gPT0gQ0FOQ0VMTEVEX09GRlNFVCkgeworCQl0cC0+U3RyaW5nc1tpXSA9IENBTkNFTExFRF9TVFJJTkc7CisJICAgIH0gZWxzZSB7CisJCXRwLT5TdHJpbmdzW2ldID0gdHAtPnN0cl90YWJsZSArIG9mZnNldHNbaV07CisJICAgIH0KKwl9CisgICAgfQorCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICBpZiAoIWNvcHlfc3RyaW5ncykgeworCWlmICgobiA9ICh1bnNpZ25lZCkgTlVNX0VYVF9OQU1FUyh0cCkpICE9IDApIHsKKwkgICAgaWYgKG4gPCBTSVpFT0Yob2Zmc2V0cykpIHsKKwkJdW5zaWduZWQgbGVuZ3RoID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkgICAgbGVuZ3RoICs9IHN0cmxlbih0cC0+ZXh0X05hbWVzW2ldKSArIDE7CisJCSAgICBvZmZzZXRzW2ldID0gdHAtPmV4dF9OYW1lc1tpXSAtIHN0cmluZ2J1ZjsKKwkJfQorCQlpZiAoKHRwLT5leHRfc3RyX3RhYmxlID0gdHlwZU1hbGxvYyhjaGFyLCBsZW5ndGgpKSA9PSAwKQorCQkgICAgICBfbmNfZXJyX2Fib3J0KE1TR19OT19NRU1PUlkpOworCQlmb3IgKGkgPSAwLCBsZW5ndGggPSAwOyBpIDwgbjsgaSsrKSB7CisJCSAgICB0cC0+ZXh0X05hbWVzW2ldID0gdHAtPmV4dF9zdHJfdGFibGUgKyBsZW5ndGg7CisJCSAgICBzdHJjcHkodHAtPmV4dF9OYW1lc1tpXSwgc3RyaW5nYnVmICsgb2Zmc2V0c1tpXSk7CisJCSAgICBsZW5ndGggKz0gc3RybGVuKHRwLT5leHRfTmFtZXNbaV0pICsgMTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsgaSA8IG51c2VzOyBpKyspIHsKKwlpZiAodXNlb2Zmc2V0c1tpXSA9PSBBQlNFTlRfT0ZGU0VUKQorCSAgICBlcC0+dXNlc1tpXS5uYW1lID0gMDsKKwllbHNlCisJICAgIGVwLT51c2VzW2ldLm5hbWUgPSAodHAtPnN0cl90YWJsZSArIHVzZW9mZnNldHNbaV0pOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tZXJnZV9lbnRyeShURVJNVFlQRSAqY29uc3QgdG8sIFRFUk1UWVBFICpjb25zdCBmcm9tKQorLyogbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gYGZyb20nIGVudHJ5IGludG8gYHRvJyBlbnRyeSAqLworeworICAgIHVuc2lnbmVkIGk7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIF9uY19hbGlnbl90ZXJtdHlwZSh0bywgZnJvbSk7CisjZW5kaWYKKyAgICBmb3JfZWFjaF9ib29sZWFuKGksIGZyb20pIHsKKwlpZiAodG8tPkJvb2xlYW5zW2ldICE9IChjaGFyKSBDQU5DRUxMRURfQk9PTEVBTikgeworCSAgICBpbnQgbWVyZ2Vib29sID0gZnJvbS0+Qm9vbGVhbnNbaV07CisKKwkgICAgaWYgKG1lcmdlYm9vbCA9PSBDQU5DRUxMRURfQk9PTEVBTikKKwkJdG8tPkJvb2xlYW5zW2ldID0gRkFMU0U7CisJICAgIGVsc2UgaWYgKG1lcmdlYm9vbCA9PSBUUlVFKQorCQl0by0+Qm9vbGVhbnNbaV0gPSAoY2hhcikgbWVyZ2Vib29sOworCX0KKyAgICB9CisKKyAgICBmb3JfZWFjaF9udW1iZXIoaSwgZnJvbSkgeworCWlmICh0by0+TnVtYmVyc1tpXSAhPSBDQU5DRUxMRURfTlVNRVJJQykgeworCSAgICBzaG9ydCBtZXJnZW51bSA9IGZyb20tPk51bWJlcnNbaV07CisKKwkgICAgaWYgKG1lcmdlbnVtID09IENBTkNFTExFRF9OVU1FUklDKQorCQl0by0+TnVtYmVyc1tpXSA9IEFCU0VOVF9OVU1FUklDOworCSAgICBlbHNlIGlmIChtZXJnZW51bSAhPSBBQlNFTlRfTlVNRVJJQykKKwkJdG8tPk51bWJlcnNbaV0gPSBtZXJnZW51bTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3RlOiB0aGUgY29waWVzIG9mIHN0cmluZ3MgdGhpcyBtYWtlcyBkb24ndCBoYXZlIHRoZWlyIG93bgorICAgICAqIHN0b3JhZ2UuICBUaGlzIGlzIE9LIHJpZ2h0IG5vdywgYnV0IHdpbGwgYmUgYSBwcm9ibGVtIGlmIHdlCisgICAgICogd2UgZXZlciB3YW50IHRvIGRlYWxsb2NhdGUgZW50cmllcy4KKyAgICAgKi8KKyAgICBmb3JfZWFjaF9zdHJpbmcoaSwgZnJvbSkgeworCWlmICh0by0+U3RyaW5nc1tpXSAhPSBDQU5DRUxMRURfU1RSSU5HKSB7CisJICAgIGNoYXIgKm1lcmdlc3RyaW5nID0gZnJvbS0+U3RyaW5nc1tpXTsKKworCSAgICBpZiAobWVyZ2VzdHJpbmcgPT0gQ0FOQ0VMTEVEX1NUUklORykKKwkJdG8tPlN0cmluZ3NbaV0gPSBBQlNFTlRfU1RSSU5HOworCSAgICBlbHNlIGlmIChtZXJnZXN0cmluZyAhPSBBQlNFTlRfU1RSSU5HKQorCQl0by0+U3RyaW5nc1tpXSA9IG1lcmdlc3RyaW5nOworCX0KKyAgICB9Cit9CisKKyNpZiBOT19MRUFLUworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19hbGxvY19lbnRyeV9sZWFrcyh2b2lkKQoreworICAgIGlmIChzdHJpbmdidWYgIT0gMCkgeworCUZyZWVBbmROdWxsKHN0cmluZ2J1Zik7CisgICAgfQorICAgIG5leHRfZnJlZSA9IDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vYWxsb2NfdHR5cGUuYyBiL25jdXJzZXMvdGluZm8vYWxsb2NfdHR5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmIwNmQxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9hbGxvY190dHlwZS5jCkBAIC0wLDAgKzEsNTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OS1vbiAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogYWxpZ25fdHR5cGUuYyAtLSAgZnVuY3Rpb25zIGZvciBURVJNVFlQRQorICoKKyAqCV9uY19hbGlnbl90ZXJtdHlwZSgpCisgKglfbmNfY29weV90ZXJtdHlwZSgpCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogYWxsb2NfdHR5cGUuYyx2IDEuMTcgMjAwOC8xMC8xMiAxNjoxMjowMCB0b20gRXhwICQiKQorCisjaWYgTkNVUlNFU19YTkFNRVMKKy8qCisgKiBNZXJnZSB0aGUgYS9iIGxpc3RzIGludG8gZHN0LiAgQm90aCBhL2IgYXJlIHNvcnRlZCAoc2VlIF9uY19leHRlbmRfbmFtZXMoKSksCisgKiBzbyB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBvcmRlciBkZXBlbmRlbmNpZXMuCisgKi8KK3N0YXRpYyBpbnQKK21lcmdlX25hbWVzKGNoYXIgKipkc3QsIGNoYXIgKiphLCBpbnQgbmEsIGNoYXIgKipiLCBpbnQgbmIpCit7CisgICAgaW50IG4gPSAwOworICAgIHdoaWxlIChuYSA+IDAgJiYgbmIgPiAwKSB7CisJaW50IGNtcCA9IHN0cmNtcCgqYSwgKmIpOworCWlmIChjbXAgPCAwKSB7CisJICAgIGRzdFtuKytdID0gKmErKzsKKwkgICAgbmEtLTsKKwl9IGVsc2UgaWYgKGNtcCA+IDApIHsKKwkgICAgZHN0W24rK10gPSAqYisrOworCSAgICBuYi0tOworCX0gZWxzZSBpZiAoY21wID09IDApIHsKKwkgICAgZHN0W24rK10gPSAqYTsKKwkgICAgYSsrLCBiKys7CisJICAgIG5hLS0sIG5iLS07CisJfQorICAgIH0KKyAgICB3aGlsZSAobmEtLSA+IDApIHsKKwlkc3RbbisrXSA9ICphKys7CisgICAgfQorICAgIHdoaWxlIChuYi0tID4gMCkgeworCWRzdFtuKytdID0gKmIrKzsKKyAgICB9CisgICAgREVCVUcoNCwgKCJtZXJnZV9uYW1lcyAtPiAlZCIsIG4pKTsKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIGJvb2wKK2ZpbmRfbmFtZShjaGFyICoqdGFibGUsIGludCBsZW5ndGgsIGNoYXIgKm5hbWUpCit7CisgICAgd2hpbGUgKGxlbmd0aC0tID4gMCkgeworCWlmICghc3RyY21wKCp0YWJsZSsrLCBuYW1lKSkgeworCSAgICBERUJVRyg0LCAoImZvdW5kIG5hbWUgJyVzJyIsIG5hbWUpKTsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyAgICBERUJVRyg0LCAoImRpZCBub3QgZmluZCBuYW1lICclcyciLCBuYW1lKSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorcmVhbGlnbl9kYXRhKFRFUk1UWVBFICp0bywgY2hhciAqKmV4dF9OYW1lcywKKwkgICAgIGludCBleHRfQm9vbGVhbnMsCisJICAgICBpbnQgZXh0X051bWJlcnMsCisJICAgICBpbnQgZXh0X1N0cmluZ3MpCit7CisgICAgaW50IG4sIG0sIGJhc2U7CisgICAgaW50IGxpbWl0ID0gKHRvLT5leHRfQm9vbGVhbnMgKyB0by0+ZXh0X051bWJlcnMgKyB0by0+ZXh0X1N0cmluZ3MpOworCisgICAgaWYgKHRvLT5leHRfQm9vbGVhbnMgIT0gZXh0X0Jvb2xlYW5zKSB7CisJdG8tPm51bV9Cb29sZWFucyArPSAoZXh0X0Jvb2xlYW5zIC0gdG8tPmV4dF9Cb29sZWFucyk7CisJdG8tPkJvb2xlYW5zID0gdHlwZVJlYWxsb2MoTkNVUlNFU19TQk9PTCwgdG8tPm51bV9Cb29sZWFucywgdG8tPkJvb2xlYW5zKTsKKwlmb3IgKG4gPSB0by0+ZXh0X0Jvb2xlYW5zIC0gMSwKKwkgICAgIG0gPSBleHRfQm9vbGVhbnMgLSAxLAorCSAgICAgYmFzZSA9IHRvLT5udW1fQm9vbGVhbnMgLSAobSArIDEpOyBtID49IDA7IG0tLSkgeworCSAgICBpZiAoZmluZF9uYW1lKHRvLT5leHRfTmFtZXMsIGxpbWl0LCBleHRfTmFtZXNbbV0pKSB7CisJCXRvLT5Cb29sZWFuc1tiYXNlICsgbV0gPSB0by0+Qm9vbGVhbnNbYmFzZSArIG4tLV07CisJICAgIH0gZWxzZSB7CisJCXRvLT5Cb29sZWFuc1tiYXNlICsgbV0gPSBGQUxTRTsKKwkgICAgfQorCX0KKwl0by0+ZXh0X0Jvb2xlYW5zID0gZXh0X0Jvb2xlYW5zOworICAgIH0KKyAgICBpZiAodG8tPmV4dF9OdW1iZXJzICE9IGV4dF9OdW1iZXJzKSB7CisJdG8tPm51bV9OdW1iZXJzICs9IChleHRfTnVtYmVycyAtIHRvLT5leHRfTnVtYmVycyk7CisJdG8tPk51bWJlcnMgPSB0eXBlUmVhbGxvYyhzaG9ydCwgdG8tPm51bV9OdW1iZXJzLCB0by0+TnVtYmVycyk7CisJZm9yIChuID0gdG8tPmV4dF9OdW1iZXJzIC0gMSwKKwkgICAgIG0gPSBleHRfTnVtYmVycyAtIDEsCisJICAgICBiYXNlID0gdG8tPm51bV9OdW1iZXJzIC0gKG0gKyAxKTsgbSA+PSAwOyBtLS0pIHsKKwkgICAgaWYgKGZpbmRfbmFtZSh0by0+ZXh0X05hbWVzLCBsaW1pdCwgZXh0X05hbWVzW20gKyBleHRfQm9vbGVhbnNdKSkgeworCQl0by0+TnVtYmVyc1tiYXNlICsgbV0gPSB0by0+TnVtYmVyc1tiYXNlICsgbi0tXTsKKwkgICAgfSBlbHNlIHsKKwkJdG8tPk51bWJlcnNbYmFzZSArIG1dID0gQUJTRU5UX05VTUVSSUM7CisJICAgIH0KKwl9CisJdG8tPmV4dF9OdW1iZXJzID0gZXh0X051bWJlcnM7CisgICAgfQorICAgIGlmICh0by0+ZXh0X1N0cmluZ3MgIT0gZXh0X1N0cmluZ3MpIHsKKwl0by0+bnVtX1N0cmluZ3MgKz0gKGV4dF9TdHJpbmdzIC0gdG8tPmV4dF9TdHJpbmdzKTsKKwl0by0+U3RyaW5ncyA9IHR5cGVSZWFsbG9jKGNoYXIgKiwgdG8tPm51bV9TdHJpbmdzLCB0by0+U3RyaW5ncyk7CisJZm9yIChuID0gdG8tPmV4dF9TdHJpbmdzIC0gMSwKKwkgICAgIG0gPSBleHRfU3RyaW5ncyAtIDEsCisJICAgICBiYXNlID0gdG8tPm51bV9TdHJpbmdzIC0gKG0gKyAxKTsgbSA+PSAwOyBtLS0pIHsKKwkgICAgaWYgKGZpbmRfbmFtZSh0by0+ZXh0X05hbWVzLCBsaW1pdCwgZXh0X05hbWVzW20gKyBleHRfQm9vbGVhbnMgKyBleHRfTnVtYmVyc10pKSB7CisJCXRvLT5TdHJpbmdzW2Jhc2UgKyBtXSA9IHRvLT5TdHJpbmdzW2Jhc2UgKyBuLS1dOworCSAgICB9IGVsc2UgeworCQl0by0+U3RyaW5nc1tiYXNlICsgbV0gPSBBQlNFTlRfU1RSSU5HOworCSAgICB9CisJfQorCXRvLT5leHRfU3RyaW5ncyA9IGV4dF9TdHJpbmdzOworICAgIH0KK30KKworLyoKKyAqIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IGluIGV4dF9OYW1lc1tdIGZvciB0aGUgZ2l2ZW4gdG9rZW4tdHlwZQorICovCitzdGF0aWMgaW50CitfbmNfZmlyc3RfZXh0X25hbWUoVEVSTVRZUEUgKnRwLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICBpbnQgZmlyc3Q7CisKKyAgICBzd2l0Y2ggKHRva2VuX3R5cGUpIHsKKyAgICBjYXNlIEJPT0xFQU46CisJZmlyc3QgPSAwOworCWJyZWFrOworICAgIGNhc2UgTlVNQkVSOgorCWZpcnN0ID0gdHAtPmV4dF9Cb29sZWFuczsKKwlicmVhazsKKyAgICBjYXNlIFNUUklORzoKKwlmaXJzdCA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnM7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlmaXJzdCA9IDA7CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmaXJzdDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGxhc3QgaW5kZXggaW4gZXh0X05hbWVzW10gZm9yIHRoZSBnaXZlbiB0b2tlbi10eXBlCisgKi8KK3N0YXRpYyBpbnQKK19uY19sYXN0X2V4dF9uYW1lKFRFUk1UWVBFICp0cCwgaW50IHRva2VuX3R5cGUpCit7CisgICAgaW50IGxhc3Q7CisKKyAgICBzd2l0Y2ggKHRva2VuX3R5cGUpIHsKKyAgICBjYXNlIEJPT0xFQU46CisJbGFzdCA9IHRwLT5leHRfQm9vbGVhbnM7CisJYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6CisJbGFzdCA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnM7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFNUUklORzoKKwlsYXN0ID0gTlVNX0VYVF9OQU1FUyh0cCk7CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBsYXN0OworfQorCisvKgorICogTG9va3VwIGFuIGVudHJ5IGZyb20gZXh0ZW5kZWQtbmFtZXMsIHJldHVybmluZyAtMSBpZiBub3QgZm91bmQKKyAqLworc3RhdGljIGludAorX25jX2ZpbmRfZXh0X25hbWUoVEVSTVRZUEUgKnRwLCBjaGFyICpuYW1lLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICB1bnNpZ25lZCBqOworICAgIHVuc2lnbmVkIGZpcnN0ID0gX25jX2ZpcnN0X2V4dF9uYW1lKHRwLCB0b2tlbl90eXBlKTsKKyAgICB1bnNpZ25lZCBsYXN0ID0gX25jX2xhc3RfZXh0X25hbWUodHAsIHRva2VuX3R5cGUpOworCisgICAgZm9yIChqID0gZmlyc3Q7IGogPCBsYXN0OyBqKyspIHsKKwlpZiAoIXN0cmNtcChuYW1lLCB0cC0+ZXh0X05hbWVzW2pdKSkgeworCSAgICByZXR1cm4gajsKKwl9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbiBpbmRleCBpbnRvIGV4dF9OYW1lc1tdIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW50byBkYXRhCisgKiAoZS5nLiwgQm9vbGVhbnNbXSkuCisgKi8KK3N0YXRpYyBpbnQKK19uY19leHRfZGF0YV9pbmRleChURVJNVFlQRSAqdHAsIGludCBuLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHRva2VuX3R5cGUpIHsKKyAgICBjYXNlIEJPT0xFQU46CisJbiArPSAodHAtPm51bV9Cb29sZWFucyAtIHRwLT5leHRfQm9vbGVhbnMpOworCWJyZWFrOworICAgIGNhc2UgTlVNQkVSOgorCW4gKz0gKHRwLT5udW1fTnVtYmVycyAtIHRwLT5leHRfTnVtYmVycykKKwkgICAgLSAodHAtPmV4dF9Cb29sZWFucyk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFNUUklORzoKKwluICs9ICh0cC0+bnVtX1N0cmluZ3MgLSB0cC0+ZXh0X1N0cmluZ3MpCisJICAgIC0gKHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnMpOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKworLyoKKyAqIEFkanVzdCB0YWJsZXMgdG8gcmVtb3ZlIChub3QgZnJlZSkgYW4gZXh0ZW5kZWQgbmFtZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKKyAqIGRhdGEuCisgKi8KK3N0YXRpYyBib29sCitfbmNfZGVsX2V4dF9uYW1lKFRFUk1UWVBFICp0cCwgY2hhciAqbmFtZSwgaW50IHRva2VuX3R5cGUpCit7CisgICAgaW50IGo7CisgICAgaW50IGZpcnN0LCBsYXN0OworCisgICAgaWYgKChmaXJzdCA9IF9uY19maW5kX2V4dF9uYW1lKHRwLCBuYW1lLCB0b2tlbl90eXBlKSkgPj0gMCkgeworCWxhc3QgPSBOVU1fRVhUX05BTUVTKHRwKSAtIDE7CisJZm9yIChqID0gZmlyc3Q7IGogPCBsYXN0OyBqKyspIHsKKwkgICAgdHAtPmV4dF9OYW1lc1tqXSA9IHRwLT5leHRfTmFtZXNbaiArIDFdOworCX0KKwlmaXJzdCA9IF9uY19leHRfZGF0YV9pbmRleCh0cCwgZmlyc3QsIHRva2VuX3R5cGUpOworCXN3aXRjaCAodG9rZW5fdHlwZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgbGFzdCA9IHRwLT5udW1fQm9vbGVhbnMgLSAxOworCSAgICBmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7IGorKykKKwkJdHAtPkJvb2xlYW5zW2pdID0gdHAtPkJvb2xlYW5zW2ogKyAxXTsKKwkgICAgdHAtPmV4dF9Cb29sZWFucyAtPSAxOworCSAgICB0cC0+bnVtX0Jvb2xlYW5zIC09IDE7CisJICAgIGJyZWFrOworCWNhc2UgTlVNQkVSOgorCSAgICBsYXN0ID0gdHAtPm51bV9OdW1iZXJzIC0gMTsKKwkgICAgZm9yIChqID0gZmlyc3Q7IGogPCBsYXN0OyBqKyspCisJCXRwLT5OdW1iZXJzW2pdID0gdHAtPk51bWJlcnNbaiArIDFdOworCSAgICB0cC0+ZXh0X051bWJlcnMgLT0gMTsKKwkgICAgdHAtPm51bV9OdW1iZXJzIC09IDE7CisJICAgIGJyZWFrOworCWNhc2UgU1RSSU5HOgorCSAgICBsYXN0ID0gdHAtPm51bV9TdHJpbmdzIC0gMTsKKwkgICAgZm9yIChqID0gZmlyc3Q7IGogPCBsYXN0OyBqKyspCisJCXRwLT5TdHJpbmdzW2pdID0gdHAtPlN0cmluZ3NbaiArIDFdOworCSAgICB0cC0+ZXh0X1N0cmluZ3MgLT0gMTsKKwkgICAgdHAtPm51bV9TdHJpbmdzIC09IDE7CisJICAgIGJyZWFrOworCX0KKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogQWRqdXN0IHRhYmxlcyB0byBpbnNlcnQgYW4gZXh0ZW5kZWQgbmFtZSwgbWFraW5nIHJvb20gZm9yIG5ldyBkYXRhLiAgVGhlCisgKiBpbmRleCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgYXJyYXkgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQKK19uY19pbnNfZXh0X25hbWUoVEVSTVRZUEUgKnRwLCBjaGFyICpuYW1lLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICB1bnNpZ25lZCBmaXJzdCA9IF9uY19maXJzdF9leHRfbmFtZSh0cCwgdG9rZW5fdHlwZSk7CisgICAgdW5zaWduZWQgbGFzdCA9IF9uY19sYXN0X2V4dF9uYW1lKHRwLCB0b2tlbl90eXBlKTsKKyAgICB1bnNpZ25lZCB0b3RhbCA9IE5VTV9FWFRfTkFNRVModHApICsgMTsKKyAgICB1bnNpZ25lZCBqLCBrOworCisgICAgZm9yIChqID0gZmlyc3Q7IGogPCBsYXN0OyBqKyspIHsKKwlpbnQgY21wID0gc3RyY21wKG5hbWUsIHRwLT5leHRfTmFtZXNbal0pOworCWlmIChjbXAgPT0gMCkKKwkgICAgLyogYWxyZWFkeSBwcmVzZW50ICovCisJICAgIHJldHVybiBfbmNfZXh0X2RhdGFfaW5kZXgodHAsIChpbnQpIGosIHRva2VuX3R5cGUpOworCWlmIChjbXAgPCAwKSB7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICB0cC0+ZXh0X05hbWVzID0gdHlwZVJlYWxsb2MoY2hhciAqLCB0b3RhbCwgdHAtPmV4dF9OYW1lcyk7CisgICAgZm9yIChrID0gdG90YWwgLSAxOyBrID4gajsgay0tKQorCXRwLT5leHRfTmFtZXNba10gPSB0cC0+ZXh0X05hbWVzW2sgLSAxXTsKKyAgICB0cC0+ZXh0X05hbWVzW2pdID0gbmFtZTsKKyAgICBqID0gX25jX2V4dF9kYXRhX2luZGV4KHRwLCAoaW50KSBqLCB0b2tlbl90eXBlKTsKKworICAgIHN3aXRjaCAodG9rZW5fdHlwZSkgeworICAgIGNhc2UgQk9PTEVBTjoKKwl0cC0+ZXh0X0Jvb2xlYW5zICs9IDE7CisJdHAtPm51bV9Cb29sZWFucyArPSAxOworCXRwLT5Cb29sZWFucyA9IHR5cGVSZWFsbG9jKE5DVVJTRVNfU0JPT0wsIHRwLT5udW1fQm9vbGVhbnMsIHRwLT5Cb29sZWFucyk7CisJZm9yIChrID0gdHAtPm51bV9Cb29sZWFucyAtIDE7IGsgPiBqOyBrLS0pCisJICAgIHRwLT5Cb29sZWFuc1trXSA9IHRwLT5Cb29sZWFuc1trIC0gMV07CisJYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6CisJdHAtPmV4dF9OdW1iZXJzICs9IDE7CisJdHAtPm51bV9OdW1iZXJzICs9IDE7CisJdHAtPk51bWJlcnMgPSB0eXBlUmVhbGxvYyhzaG9ydCwgdHAtPm51bV9OdW1iZXJzLCB0cC0+TnVtYmVycyk7CisJZm9yIChrID0gdHAtPm51bV9OdW1iZXJzIC0gMTsgayA+IGo7IGstLSkKKwkgICAgdHAtPk51bWJlcnNba10gPSB0cC0+TnVtYmVyc1trIC0gMV07CisJYnJlYWs7CisgICAgY2FzZSBTVFJJTkc6CisJdHAtPmV4dF9TdHJpbmdzICs9IDE7CisJdHAtPm51bV9TdHJpbmdzICs9IDE7CisJdHAtPlN0cmluZ3MgPSB0eXBlUmVhbGxvYyhjaGFyICosIHRwLT5udW1fU3RyaW5ncywgdHAtPlN0cmluZ3MpOworCWZvciAoayA9IHRwLT5udW1fU3RyaW5ncyAtIDE7IGsgPiBqOyBrLS0pCisJICAgIHRwLT5TdHJpbmdzW2tdID0gdHAtPlN0cmluZ3NbayAtIDFdOworCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gajsKK30KKworLyoKKyAqIExvb2sgZm9yIHN0cmluZ3MgdGhhdCBhcmUgbWFya2VkIGNhbmNlbGxlZCwgd2hpY2ggaGFwcGVuIHRvIGJlIHRoZSBzYW1lIG5hbWUKKyAqIGFzIGEgYm9vbGVhbiBvciBudW1iZXIuICBXZSdsbCBnZXQgdGhpcyBhcyBhIHNwZWNpYWwgY2FzZSB3aGVuIHdlIGdldCBhCisgKiBjYW5jZWxsYXRpb24gb2YgYSBuYW1lIHRoYXQgaXMgaW5oZXJpdGVkIGZyb20gYW5vdGhlciBlbnRyeS4KKyAqLworc3RhdGljIHZvaWQKK2FkanVzdF9jYW5jZWxzKFRFUk1UWVBFICp0bywgVEVSTVRZUEUgKmZyb20pCit7CisgICAgaW50IGZpcnN0ID0gdG8tPmV4dF9Cb29sZWFucyArIHRvLT5leHRfTnVtYmVyczsKKyAgICBpbnQgbGFzdCA9IGZpcnN0ICsgdG8tPmV4dF9TdHJpbmdzOworICAgIGludCBqLCBrOworCisgICAgZm9yIChqID0gZmlyc3Q7IGogPCBsYXN0OykgeworCWNoYXIgKm5hbWUgPSB0by0+ZXh0X05hbWVzW2pdOworCXVuc2lnbmVkIGpfc3RyID0gdG8tPm51bV9TdHJpbmdzIC0gZmlyc3QgLSB0by0+ZXh0X1N0cmluZ3M7CisKKwlpZiAodG8tPlN0cmluZ3NbaiArIGpfc3RyXSA9PSBDQU5DRUxMRURfU1RSSU5HKSB7CisJICAgIGlmICgoayA9IF9uY19maW5kX2V4dF9uYW1lKGZyb20sIHRvLT5leHRfTmFtZXNbal0sIEJPT0xFQU4pKSA+PSAwKSB7CisJCWlmIChfbmNfZGVsX2V4dF9uYW1lKHRvLCBuYW1lLCBTVFJJTkcpCisJCSAgICB8fCBfbmNfZGVsX2V4dF9uYW1lKHRvLCBuYW1lLCBOVU1CRVIpKSB7CisJCSAgICBrID0gX25jX2luc19leHRfbmFtZSh0bywgbmFtZSwgQk9PTEVBTik7CisJCSAgICB0by0+Qm9vbGVhbnNba10gPSBGQUxTRTsKKwkJfSBlbHNlIHsKKwkJICAgIGorKzsKKwkJfQorCSAgICB9IGVsc2UgaWYgKChrID0gX25jX2ZpbmRfZXh0X25hbWUoZnJvbSwgdG8tPmV4dF9OYW1lc1tqXSwKKwkJCQkJICAgICAgTlVNQkVSKSkgPj0gMCkgeworCQlpZiAoX25jX2RlbF9leHRfbmFtZSh0bywgbmFtZSwgU1RSSU5HKQorCQkgICAgfHwgX25jX2RlbF9leHRfbmFtZSh0bywgbmFtZSwgQk9PTEVBTikpIHsKKwkJICAgIGsgPSBfbmNfaW5zX2V4dF9uYW1lKHRvLCBuYW1lLCBOVU1CRVIpOworCQkgICAgdG8tPk51bWJlcnNba10gPSBDQU5DRUxMRURfTlVNRVJJQzsKKwkJfSBlbHNlIHsKKwkJICAgIGorKzsKKwkJfQorCSAgICB9IGVsc2UgaWYgKChrID0gX25jX2ZpbmRfZXh0X25hbWUoZnJvbSwgdG8tPmV4dF9OYW1lc1tqXSwKKwkJCQkJICAgICAgU1RSSU5HKSkgPj0gMCkgeworCQlpZiAoX25jX2RlbF9leHRfbmFtZSh0bywgbmFtZSwgTlVNQkVSKQorCQkgICAgfHwgX25jX2RlbF9leHRfbmFtZSh0bywgbmFtZSwgQk9PTEVBTikpIHsKKwkJICAgIGsgPSBfbmNfaW5zX2V4dF9uYW1lKHRvLCBuYW1lLCBTVFJJTkcpOworCQkgICAgdG8tPlN0cmluZ3Nba10gPSBDQU5DRUxMRURfU1RSSU5HOworCQl9IGVsc2UgeworCQkgICAgaisrOworCQl9CisJICAgIH0gZWxzZSB7CisJCWorKzsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGorKzsKKwl9CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2FsaWduX3Rlcm10eXBlKFRFUk1UWVBFICp0bywgVEVSTVRZUEUgKmZyb20pCit7CisgICAgaW50IG5hID0gTlVNX0VYVF9OQU1FUyh0byk7CisgICAgaW50IG5iID0gTlVNX0VYVF9OQU1FUyhmcm9tKTsKKyAgICBpbnQgbjsKKyAgICBib29sIHNhbWU7CisgICAgY2hhciAqKmV4dF9OYW1lczsKKyAgICBpbnQgZXh0X0Jvb2xlYW5zLCBleHRfTnVtYmVycywgZXh0X1N0cmluZ3M7CisgICAgYm9vbCB1c2VkX2V4dF9OYW1lcyA9IEZBTFNFOworCisgICAgREVCVUcoMiwgKCJhbGlnbl90ZXJtdHlwZSB0byglZDolcyksIGZyb20oJWQ6JXMpIiwgbmEsIHRvLT50ZXJtX25hbWVzLAorCSAgICAgIG5iLCBmcm9tLT50ZXJtX25hbWVzKSk7CisKKyAgICBpZiAobmEgIT0gMCB8fCBuYiAhPSAwKSB7CisJaWYgKChuYSA9PSBuYikJCS8qIGNoZWNrIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQgKi8KKwkgICAgJiYodG8tPmV4dF9Cb29sZWFucyA9PSBmcm9tLT5leHRfQm9vbGVhbnMpCisJICAgICYmICh0by0+ZXh0X051bWJlcnMgPT0gZnJvbS0+ZXh0X051bWJlcnMpCisJICAgICYmICh0by0+ZXh0X1N0cmluZ3MgPT0gZnJvbS0+ZXh0X1N0cmluZ3MpKSB7CisJICAgIGZvciAobiA9IDAsIHNhbWUgPSBUUlVFOyBuIDwgbmE7IG4rKykgeworCQlpZiAoc3RyY21wKHRvLT5leHRfTmFtZXNbbl0sIGZyb20tPmV4dF9OYW1lc1tuXSkpIHsKKwkJICAgIHNhbWUgPSBGQUxTRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKHNhbWUpCisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIHdlIHBheSBmb3IgaGF2aW5nIGEgc2ltcGxlIGV4dGVuc2lvbiByZXByZXNlbnRhdGlvbi4gCisJICogQWxsb2NhdGUgYSBuZXcgZXh0X05hbWVzIGFycmF5IGFuZCBtZXJnZSB0aGUgdHdvIGV4dF9OYW1lcyBhcnJheXMKKwkgKiBpbnRvIGl0LCB1cGRhdGluZyB0bydzIGNvdW50cyBmb3IgYm9vbGVhbnMsIGV0Yy4gIEZvcnR1bmF0ZWx5IHdlIGRvCisJICogdGhpcyBvbmx5IGZvciB0aGUgdGVybWluZm8gY29tcGlsZXIgKHRpYykgYW5kIGNvbXBhcmVyIChpbmZvY21wKS4KKwkgKi8KKwlleHRfTmFtZXMgPSB0eXBlTWFsbG9jKGNoYXIgKiwgbmEgKyBuYik7CisKKwlpZiAodG8tPmV4dF9TdHJpbmdzICYmIChmcm9tLT5leHRfQm9vbGVhbnMgKyBmcm9tLT5leHRfTnVtYmVycykpCisJICAgIGFkanVzdF9jYW5jZWxzKHRvLCBmcm9tKTsKKworCWlmIChmcm9tLT5leHRfU3RyaW5ncyAmJiAodG8tPmV4dF9Cb29sZWFucyArIHRvLT5leHRfTnVtYmVycykpCisJICAgIGFkanVzdF9jYW5jZWxzKGZyb20sIHRvKTsKKworCWV4dF9Cb29sZWFucyA9IG1lcmdlX25hbWVzKGV4dF9OYW1lcywKKwkJCQkgICB0by0+ZXh0X05hbWVzLAorCQkJCSAgIHRvLT5leHRfQm9vbGVhbnMsCisJCQkJICAgZnJvbS0+ZXh0X05hbWVzLAorCQkJCSAgIGZyb20tPmV4dF9Cb29sZWFucyk7CisJZXh0X051bWJlcnMgPSBtZXJnZV9uYW1lcyhleHRfTmFtZXMgKyBleHRfQm9vbGVhbnMsCisJCQkJICB0by0+ZXh0X05hbWVzCisJCQkJICArIHRvLT5leHRfQm9vbGVhbnMsCisJCQkJICB0by0+ZXh0X051bWJlcnMsCisJCQkJICBmcm9tLT5leHRfTmFtZXMKKwkJCQkgICsgZnJvbS0+ZXh0X0Jvb2xlYW5zLAorCQkJCSAgZnJvbS0+ZXh0X051bWJlcnMpOworCWV4dF9TdHJpbmdzID0gbWVyZ2VfbmFtZXMoZXh0X05hbWVzICsgZXh0X051bWJlcnMgKyBleHRfQm9vbGVhbnMsCisJCQkJICB0by0+ZXh0X05hbWVzCisJCQkJICArIHRvLT5leHRfQm9vbGVhbnMKKwkJCQkgICsgdG8tPmV4dF9OdW1iZXJzLAorCQkJCSAgdG8tPmV4dF9TdHJpbmdzLAorCQkJCSAgZnJvbS0+ZXh0X05hbWVzCisJCQkJICArIGZyb20tPmV4dF9Cb29sZWFucworCQkJCSAgKyBmcm9tLT5leHRfTnVtYmVycywKKwkJCQkgIGZyb20tPmV4dF9TdHJpbmdzKTsKKwkvKgorCSAqIE5vdyB3ZSBtdXN0IHJlYWxsb2NhdGUgdGhlIEJvb2xlYW5zLCBldGMuLCB0byBhbGxvdyB0aGUgZGF0YSB0byBiZQorCSAqIG92ZXJsYWlkLgorCSAqLworCWlmIChuYSAhPSAoZXh0X0Jvb2xlYW5zICsgZXh0X051bWJlcnMgKyBleHRfU3RyaW5ncykpIHsKKwkgICAgcmVhbGlnbl9kYXRhKHRvLCBleHRfTmFtZXMsIGV4dF9Cb29sZWFucywgZXh0X051bWJlcnMsIGV4dF9TdHJpbmdzKTsKKwkgICAgRnJlZUlmTmVlZGVkKHRvLT5leHRfTmFtZXMpOworCSAgICB0by0+ZXh0X05hbWVzID0gZXh0X05hbWVzOworCSAgICBERUJVRygyLCAoInJlYWxpZ25lZCAlZCBleHRlbmRlZCBuYW1lcyBmb3IgJyVzJyAodG8pIiwKKwkJICAgICAgTlVNX0VYVF9OQU1FUyh0byksIHRvLT50ZXJtX25hbWVzKSk7CisJICAgIHVzZWRfZXh0X05hbWVzID0gVFJVRTsKKwl9CisJaWYgKG5iICE9IChleHRfQm9vbGVhbnMgKyBleHRfTnVtYmVycyArIGV4dF9TdHJpbmdzKSkgeworCSAgICBuYiA9IChleHRfQm9vbGVhbnMgKyBleHRfTnVtYmVycyArIGV4dF9TdHJpbmdzKTsKKwkgICAgcmVhbGlnbl9kYXRhKGZyb20sIGV4dF9OYW1lcywgZXh0X0Jvb2xlYW5zLCBleHRfTnVtYmVycywgZXh0X1N0cmluZ3MpOworCSAgICBmcm9tLT5leHRfTmFtZXMgPSB0eXBlUmVhbGxvYyhjaGFyICosIG5iLCBmcm9tLT5leHRfTmFtZXMpOworCSAgICBtZW1jcHkoZnJvbS0+ZXh0X05hbWVzLCBleHRfTmFtZXMsIHNpemVvZihjaGFyICopICogbmIpOworCSAgICBERUJVRygyLCAoInJlYWxpZ25lZCAlZCBleHRlbmRlZCBuYW1lcyBmb3IgJyVzJyAoZnJvbSkiLAorCQkgICAgICBOVU1fRVhUX05BTUVTKGZyb20pLCBmcm9tLT50ZXJtX25hbWVzKSk7CisJfQorCWlmICghdXNlZF9leHRfTmFtZXMpCisJICAgIGZyZWUoZXh0X05hbWVzKTsKKyAgICB9Cit9CisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19jb3B5X3Rlcm10eXBlKFRFUk1UWVBFICpkc3QsIFRFUk1UWVBFICpzcmMpCit7CisgICAgdW5zaWduZWQgaTsKKworICAgICpkc3QgPSAqc3JjOwkJLyogLi4udG8gY29weSB0aGUgc2l6ZXMgYW5kIHN0cmluZy10YWJsZXMgKi8KKyAgICBkc3QtPkJvb2xlYW5zID0gdHlwZU1hbGxvYyhOQ1VSU0VTX1NCT09MLCBOVU1fQk9PTEVBTlMoZHN0KSk7CisgICAgZHN0LT5OdW1iZXJzID0gdHlwZU1hbGxvYyhzaG9ydCwgTlVNX05VTUJFUlMoZHN0KSk7CisgICAgZHN0LT5TdHJpbmdzID0gdHlwZU1hbGxvYyhjaGFyICosIE5VTV9TVFJJTkdTKGRzdCkpOworCisgICAgLyogRklYTUU6IHVzZSBtZW1jcHkgZm9yIHRoZXNlIGFuZCBzaW1pbGFyIGxvb3BzICovCisgICAgZm9yX2VhY2hfYm9vbGVhbihpLCBkc3QpCisJZHN0LT5Cb29sZWFuc1tpXSA9IHNyYy0+Qm9vbGVhbnNbaV07CisgICAgZm9yX2VhY2hfbnVtYmVyKGksIGRzdCkKKwlkc3QtPk51bWJlcnNbaV0gPSBzcmMtPk51bWJlcnNbaV07CisgICAgZm9yX2VhY2hfc3RyaW5nKGksIGRzdCkKKwlkc3QtPlN0cmluZ3NbaV0gPSBzcmMtPlN0cmluZ3NbaV07CisKKyAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgc2hvdWxkIGFsc28gY29weSBzdHJfdGFibGUgYW5kIGV4dF9zdHJfdGFibGUsCisgICAgICogYnV0IHRpYyBhbmQgaW5mb2NtcCBhcmUgbm90IHdyaXR0ZW4gdG8gZXhwbG9pdCB0aGF0ICh5ZXQpLgorICAgICAqLworCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICBpZiAoKGkgPSBOVU1fRVhUX05BTUVTKHNyYykpICE9IDApIHsKKwlkc3QtPmV4dF9OYW1lcyA9IHR5cGVNYWxsb2MoY2hhciAqLCBpKTsKKwltZW1jcHkoZHN0LT5leHRfTmFtZXMsIHNyYy0+ZXh0X05hbWVzLCBpICogc2l6ZW9mKGNoYXIgKikpOworICAgIH0gZWxzZSB7CisJZHN0LT5leHRfTmFtZXMgPSAwOworICAgIH0KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2NhcHRvaW5mby5jIGIvbmN1cnNlcy90aW5mby9jYXB0b2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMwMGMxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9jYXB0b2luZm8uYwpAQCAtMCwwICsxLDg1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJY2FwdG9pbmZvLmMgLS0tIGNvbnZlcnNpb24gYmV0d2VlbiB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBmb3JtYXRzCisgKgorICoJVGhlIGNhcHRvaW5mbygpIGNvZGUgd2FzIHN3aXBlZCBmcm9tIFJvc3MgUmlkZ2UncyBteXRpbmZvIHBhY2thZ2UsCisgKglhZGFwdGVkIHRvIGZpdCBuY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPi4KKyAqCisgKglUaGVyZSBpcyBqdXN0IG9uZSBlbnRyeSBwb2ludDoKKyAqCisgKgljaGFyICpfbmNfY2FwdG9pbmZvKG4sIHMsIHBhcmFtZXRlcml6ZWQpCisgKgorICoJQ29udmVydCB2YWx1ZSBzIGZvciB0ZXJtY2FwIHN0cmluZyBjYXBhYmlsaXR5IG5hbWVkIG4gaW50byB0ZXJtaW5mbworICoJZm9ybWF0LgorICoKKyAqCVRoaXMgY29kZSByZWNvZ25pemVzIGFsbCB0aGUgc3RhbmRhcmQgNC40QlNEICUtZXNjYXBlczoKKyAqCisgKgklJSAgICAgICBvdXRwdXQgYCUnCisgKgklZCAgICAgICBvdXRwdXQgdmFsdWUgYXMgaW4gcHJpbnRmICVkCisgKgklMiAgICAgICBvdXRwdXQgdmFsdWUgYXMgaW4gcHJpbnRmICUyZAorICoJJTMgICAgICAgb3V0cHV0IHZhbHVlIGFzIGluIHByaW50ZiAlM2QKKyAqCSUuICAgICAgIG91dHB1dCB2YWx1ZSBhcyBpbiBwcmludGYgJWMKKyAqCSUreCAgICAgIGFkZCB4IHRvIHZhbHVlLCB0aGVuIGRvICUuCisgKgklPnh5ICAgICBpZiB2YWx1ZSA+IHggdGhlbiBhZGQgeSwgbm8gb3V0cHV0CisgKgklciAgICAgICByZXZlcnNlIG9yZGVyIG9mIHR3byBwYXJhbWV0ZXJzLCBubyBvdXRwdXQKKyAqCSVpICAgICAgIGluY3JlbWVudCBieSBvbmUsIG5vIG91dHB1dAorICoJJW4gICAgICAgZXhjbHVzaXZlLW9yIGFsbCBwYXJhbWV0ZXJzIHdpdGggMDE0MCAoRGF0YW1lZGlhIDI1MDApCisgKgklQiAgICAgICBCQ0QgKDE2Kih2YWx1ZS8xMCkpICsgKHZhbHVlJTEwKSwgbm8gb3V0cHV0CisgKgklRCAgICAgICBSZXZlcnNlIGNvZGluZyAodmFsdWUgLSAyKih2YWx1ZSUxNikpLCBubyBvdXRwdXQgKERlbHRhIERhdGEpLgorICoKKyAqCUFsc28sICUwMiBhbmQgJTAzIGFyZSBhY2NlcHRlZCBhcyBzeW5vbnltcyBmb3IgJTIgYW5kICUzLgorICoKKyAqCUJlc2lkZXMgYWxsIHRoZSBzdGFuZGFyZCB0ZXJtY2FwIGVzY2FwZXMsIHRoaXMgdHJhbnNsYXRvciB1bmRlcnN0YW5kcworICoJdGhlIGZvbGxvd2luZyBleHRlbmRlZCBlc2NhcGVzOgorICoKKyAqCXVzZWQgYnkgR05VIEVtYWNzIHRlcm1jYXAgbGlicmFyaWVzCisgKgkJJWFbKyotLz1dW2NwXXgJR05VIGFyaXRobWV0aWMuCisgKgkJJW0JCXhvciB0aGUgZmlyc3QgdHdvIHBhcmFtZXRlcnMgYnkgMDE3NworICoJCSViCQliYWNrdXAgdG8gcHJldmlvdXMgcGFyYW1ldGVyCisgKgkJJWYJCXNraXAgdGhpcyBwYXJhbWV0ZXIKKyAqCisgKgl1c2VkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIChNRkNGKSB0ZXJtY2FwIGxpYnJhcmllcworICoJCSUteAkgc3VidHJhY3QgcGFyYW1ldGVyIEZST00gY2hhciB4IGFuZCBvdXRwdXQgaXQgYXMgYSBjaGFyCisgKgkJJWF4CSBhZGQgdGhlIGNoYXJhY3RlciB4IHRvIHBhcmFtZXRlcgorICoKKyAqCUlmICNkZWZpbmUgV0FURVJMT08gaXMgb24sIGFsc28gZW5hYmxlIHRoZXNlIHRyYW5zbGF0aW9uczoKKyAqCisgKgkJJXN4CSBzdWJ0cmFjdCBwYXJhbWV0ZXIgRlJPTSB0aGUgY2hhcmFjdGVyIHgKKyAqCisgKglCeSBkZWZhdWx0LCB0aGlzIFdhdGVybG9vIHRyYW5zbGF0aW9ucyBhcmUgbm90IGNvbXBpbGVkIGluLCBiZWNhdXNlCisgKgl0aGUgV2F0ZXJsb28gJXMgY29uZmxpY3RzIHdpdGggdGhlIHdheSB0ZXJtaW5mbyB1c2VzICVzIGluIHN0cmluZ3MgZm9yCisgKglmdW5jdGlvbiBwcm9ncmFtbWluZy4KKyAqCisgKglOb3RlIHRoZSB0d28gZGVmaW5pdGlvbnMgb2YgJWE6IHRoZSBHTlUgZGVmaW5pdGlvbiBpcyB0cmFuc2xhdGVkIGlmIHRoZQorICoJY2hhcmFjdGVycyBhZnRlciB0aGUgJ2EnIGFyZSB2YWxpZCBmb3IgaXQsIG90aGVyd2lzZSB0aGUgVVcgZGVmaW5pdGlvbgorICoJaXMgdHJhbnNsYXRlZC4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBjYXB0b2luZm8uYyx2IDEuNTIgMjAwOC8wOC8xNiAxOToyNDo1MSB0b20gRXhwICQiKQorCisjZGVmaW5lIE1BWF9QVVNIRUQJMTYJLyogbWF4ICMgYXJncyB3ZSBjYW4gcHVzaCBvbnRvIHRoZSBzdGFjayAqLworCitzdGF0aWMgaW50IHN0YWNrW01BWF9QVVNIRURdOwkvKiB0aGUgc3RhY2sgKi8KK3N0YXRpYyBpbnQgc3RhY2twdHI7CQkvKiB0aGUgbmV4dCBlbXB0eSBwbGFjZSBvbiB0aGUgc3RhY2sgKi8KK3N0YXRpYyBpbnQgb25zdGFjazsJCS8qIHRoZSB0b3Agb2Ygc3RhY2sgKi8KK3N0YXRpYyBpbnQgc2Vlbm07CQkvKiBzZWVuIGEgJW0gKi8KK3N0YXRpYyBpbnQgc2Vlbm47CQkvKiBzZWVuIGEgJW4gKi8KK3N0YXRpYyBpbnQgc2VlbnI7CQkvKiBzZWVuIGEgJXIgKi8KK3N0YXRpYyBpbnQgcGFyYW07CQkvKiBjdXJyZW50IHBhcmFtZXRlciAqLworc3RhdGljIGNoYXIgKmRwOwkJLyogcG9pbnRlciB0byBlbmQgb2YgdGhlIGNvbnZlcnRlZCBzdHJpbmcgKi8KKworc3RhdGljIGNoYXIgKm15X3N0cmluZzsKK3N0YXRpYyBzaXplX3QgbXlfbGVuZ3RoOworCitzdGF0aWMgY2hhciAqCitpbml0X3N0cmluZyh2b2lkKQorLyogaW5pdGlhbGl6ZSAnbXlfc3RyaW5nJywgJ215X2xlbmd0aCcgKi8KK3sKKyAgICBpZiAobXlfc3RyaW5nID09IDApCisJbXlfc3RyaW5nID0gdHlwZU1hbGxvYyhjaGFyLCBteV9sZW5ndGggPSAyNTYpOworICAgIGlmIChteV9zdHJpbmcgPT0gMCkKKwlfbmNfZXJyX2Fib3J0KE1TR19OT19NRU1PUlkpOworCisgICAgKm15X3N0cmluZyA9ICdcMCc7CisgICAgcmV0dXJuIG15X3N0cmluZzsKK30KKworc3RhdGljIGNoYXIgKgorc2F2ZV9zdHJpbmcoY2hhciAqZCwgY29uc3QgY2hhciAqY29uc3QgcykKK3sKKyAgICBzaXplX3QgaGF2ZSA9IChkIC0gbXlfc3RyaW5nKTsKKyAgICBzaXplX3QgbmVlZCA9IGhhdmUgKyBzdHJsZW4ocykgKyAyOworICAgIGlmIChuZWVkID4gbXlfbGVuZ3RoKSB7CisJbXlfc3RyaW5nID0gKGNoYXIgKikgcmVhbGxvYyhteV9zdHJpbmcsIG15X2xlbmd0aCA9IChuZWVkICsgbmVlZCkpOworCWlmIChteV9zdHJpbmcgPT0gMCkKKwkgICAgX25jX2Vycl9hYm9ydChNU0dfTk9fTUVNT1JZKTsKKwlkID0gbXlfc3RyaW5nICsgaGF2ZTsKKyAgICB9CisgICAgKHZvaWQpIHN0cmNweShkLCBzKTsKKyAgICByZXR1cm4gZCArIHN0cmxlbihkKTsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGNoYXIgKgorc2F2ZV9jaGFyKGNoYXIgKnMsIGludCBjKQoreworICAgIHN0YXRpYyBjaGFyIHRlbXBbMl07CisgICAgdGVtcFswXSA9IChjaGFyKSBjOworICAgIHJldHVybiBzYXZlX3N0cmluZyhzLCB0ZW1wKTsKK30KKworc3RhdGljIHZvaWQKK3B1c2godm9pZCkKKy8qIHB1c2ggb25zdGFjayBvbiB0byB0aGUgc3RhY2sgKi8KK3sKKyAgICBpZiAoc3RhY2twdHIgPj0gTUFYX1BVU0hFRCkKKwlfbmNfd2FybmluZygic3RyaW5nIHRvbyBjb21wbGV4IHRvIGNvbnZlcnQiKTsKKyAgICBlbHNlCisJc3RhY2tbc3RhY2twdHIrK10gPSBvbnN0YWNrOworfQorCitzdGF0aWMgdm9pZAorcG9wKHZvaWQpCisvKiBwb3AgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaW50byBvbnN0YWNrICovCit7CisgICAgaWYgKHN0YWNrcHRyID09IDApIHsKKwlpZiAob25zdGFjayA9PSAwKQorCSAgICBfbmNfd2FybmluZygiSSdtIGNvbmZ1c2VkIik7CisJZWxzZQorCSAgICBvbnN0YWNrID0gMDsKKyAgICB9IGVsc2UKKwlvbnN0YWNrID0gc3RhY2tbLS1zdGFja3B0cl07CisgICAgcGFyYW0rKzsKK30KKworc3RhdGljIGludAorY3Z0Y2hhcihyZWdpc3RlciBjb25zdCBjaGFyICpzcCkKKy8qIGNvbnZlcnQgYSBjaGFyYWN0ZXIgdG8gYSB0ZXJtaW5mbyBwdXNoICovCit7CisgICAgdW5zaWduZWQgY2hhciBjID0gMDsKKyAgICBpbnQgbGVuOworCisgICAgc3dpdGNoICgqc3ApIHsKKyAgICBjYXNlICdcXCc6CisJc3dpdGNoICgqKytzcCkgeworCWNhc2UgJ1wnJzoKKwljYXNlICckJzoKKwljYXNlICdcXCc6CisJY2FzZSAnJSc6CisJICAgIGMgPSAodW5zaWduZWQgY2hhcikgKCpzcCk7CisJICAgIGxlbiA9IDI7CisJICAgIGJyZWFrOworCWNhc2UgJ1wwJzoKKwkgICAgYyA9ICdcXCc7CisJICAgIGxlbiA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJzAnOgorCWNhc2UgJzEnOgorCWNhc2UgJzInOgorCWNhc2UgJzMnOgorCSAgICBsZW4gPSAxOworCSAgICB3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3ApKSkgeworCQljID0gOCAqIGMgKyAoKnNwKysgLSAnMCcpOworCQlsZW4rKzsKKwkgICAgfQorCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBjID0gKHVuc2lnbmVkIGNoYXIpICgqc3ApOworCSAgICBsZW4gPSAyOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisgICAgY2FzZSAnXic6CisJYyA9ICgqKytzcCAmIDB4MWYpOworCWxlbiA9IDI7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwljID0gKHVuc2lnbmVkIGNoYXIpICgqc3ApOworCWxlbiA9IDE7CisgICAgfQorICAgIGlmIChpc2dyYXBoKGMpICYmIGMgIT0gJywnICYmIGMgIT0gJ1wnJyAmJiBjICE9ICdcXCcgJiYgYyAhPSAnOicpIHsKKwlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJVwnIik7CisJZHAgPSBzYXZlX2NoYXIoZHAsIGMpOworCWRwID0gc2F2ZV9jaGFyKGRwLCAnXCcnKTsKKyAgICB9IGVsc2UgeworCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIleyIpOworCWlmIChjID4gOTkpCisJICAgIGRwID0gc2F2ZV9jaGFyKGRwLCBjIC8gMTAwICsgJzAnKTsKKwlpZiAoYyA+IDkpCisJICAgIGRwID0gc2F2ZV9jaGFyKGRwLCAoKGludCkgKGMgLyAxMCkpICUgMTAgKyAnMCcpOworCWRwID0gc2F2ZV9jaGFyKGRwLCBjICUgMTAgKyAnMCcpOworCWRwID0gc2F2ZV9jaGFyKGRwLCAnfScpOworICAgIH0KKyAgICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZAorZ2V0cGFybShpbnQgcGFybSwgaW50IG4pCisvKiBwdXNoIG4gY29waWVzIG9mIHBhcmFtIG9uIHRoZSB0ZXJtaW5mbyBzdGFjayBpZiBub3QgYWxyZWFkeSB0aGVyZSAqLworeworICAgIGlmIChzZWVucikgeworCWlmIChwYXJtID09IDEpCisJICAgIHBhcm0gPSAyOworCWVsc2UgaWYgKHBhcm0gPT0gMikKKwkgICAgcGFybSA9IDE7CisgICAgfQorICAgIGlmIChvbnN0YWNrID09IHBhcm0pIHsKKwlpZiAobiA+IDEpIHsKKwkgICAgX25jX3dhcm5pbmcoInN0cmluZyBtYXkgbm90IGJlIG9wdGltYWwiKTsKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVQYSIpOworCSAgICB3aGlsZSAobi0tKSB7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlZ2EiKTsKKwkgICAgfQorCX0KKwlyZXR1cm47CisgICAgfQorICAgIGlmIChvbnN0YWNrICE9IDApCisJcHVzaCgpOworCisgICAgb25zdGFjayA9IHBhcm07CisKKyAgICB3aGlsZSAobi0tKSB7CisJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVwIik7CisJZHAgPSBzYXZlX2NoYXIoZHAsICcwJyArIHBhcm0pOworICAgIH0KKworICAgIGlmIChzZWVubiAmJiBwYXJtIDwgMykgeworCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlezk2fSVeIik7CisgICAgfQorCisgICAgaWYgKHNlZW5tICYmIHBhcm0gPCAzKSB7CisJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiV7MTI3fSVeIik7CisgICAgfQorfQorCisvKgorICogQ29udmVydCBhIHRlcm1jYXAgc3RyaW5nIHRvIHRlcm1pbmZvIGZvcm1hdC4KKyAqICdjYXAnIGlzIHRoZSByZWxldmFudCB0ZXJtaW5mbyBjYXBhYmlsaXR5IGluZGV4LgorICogJ3MnIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGNhcGFiaWxpdHkuCisgKiAncGFyYW1ldGVyaXplZCcgdGVsbHMgd2hhdCB0eXBlIG9mIHRyYW5zbGF0aW9ucyB0byBkbzoKKyAqCSUgdHJhbnNsYXRpb25zIGlmIDEKKyAqCXBhZCB0cmFuc2xhdGlvbnMgaWYgPj0wCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19jYXB0b2luZm8oY29uc3QgY2hhciAqY2FwLCBjb25zdCBjaGFyICpzLCBpbnQgY29uc3QgcGFyYW1ldGVyaXplZCkKK3sKKyAgICBjb25zdCBjaGFyICpjYXBzdGFydDsKKworICAgIHN0YWNrcHRyID0gMDsKKyAgICBvbnN0YWNrID0gMDsKKyAgICBzZWVubSA9IDA7CisgICAgc2Vlbm4gPSAwOworICAgIHNlZW5yID0gMDsKKyAgICBwYXJhbSA9IDE7CisKKyAgICBkcCA9IGluaXRfc3RyaW5nKCk7CisKKyAgICAvKiBza2lwIHRoZSBpbml0aWFsIHBhZGRpbmcgKGlmIHdlIGhhdmVuJ3QgYmVlbiB0b2xkIG5vdCB0bykgKi8KKyAgICBjYXBzdGFydCA9IDA7CisgICAgaWYgKHMgPT0gMCkKKwlzID0gIiI7CisgICAgaWYgKHBhcmFtZXRlcml6ZWQgPj0gMCAmJiBpc2RpZ2l0KFVDaGFyKCpzKSkpCisJZm9yIChjYXBzdGFydCA9IHM7OyBzKyspCisJICAgIGlmICghKGlzZGlnaXQoVUNoYXIoKnMpKSB8fCAqcyA9PSAnKicgfHwgKnMgPT0gJy4nKSkKKwkJYnJlYWs7CisKKyAgICB3aGlsZSAoKnMgIT0gJ1wwJykgeworCXN3aXRjaCAoKnMpIHsKKwljYXNlICclJzoKKwkgICAgcysrOworCSAgICBpZiAocGFyYW1ldGVyaXplZCA8IDEpIHsKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICclJyk7CisJCWJyZWFrOworCSAgICB9CisJICAgIHN3aXRjaCAoKnMrKykgeworCSAgICBjYXNlICclJzoKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICclJyk7CisJCWJyZWFrOworCSAgICBjYXNlICdyJzoKKwkJaWYgKHNlZW5yKysgPT0gMSkgeworCQkgICAgX25jX3dhcm5pbmcoInNhdyAlJXIgdHdpY2UgaW4gJXMiLCBjYXApOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlICdtJzoKKwkJaWYgKHNlZW5tKysgPT0gMSkgeworCQkgICAgX25jX3dhcm5pbmcoInNhdyAlJW0gdHdpY2UgaW4gJXMiLCBjYXApOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlICduJzoKKwkJaWYgKHNlZW5uKysgPT0gMSkgeworCQkgICAgX25jX3dhcm5pbmcoInNhdyAlJW4gdHdpY2UgaW4gJXMiLCBjYXApOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlICdpJzoKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVpIik7CisJCWJyZWFrOworCSAgICBjYXNlICc2JzoKKwkgICAgY2FzZSAnQic6CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJXsxMH0lLyV7MTZ9JSoiKTsKKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlezEwfSVtJSsiKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJzgnOgorCSAgICBjYXNlICdEJzoKKwkJZ2V0cGFybShwYXJhbSwgMik7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlezJ9JSolLSIpOworCQlicmVhazsKKwkgICAgY2FzZSAnPic6CisJCWdldHBhcm0ocGFyYW0sIDIpOworCQkvKiAlPyV7eH0lPiV0JXt5fSUrJTsgKi8KKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiU/Iik7CisJCXMgKz0gY3Z0Y2hhcihzKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiU+JXQiKTsKKwkJcyArPSBjdnRjaGFyKHMpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJSslOyIpOworCQlicmVhazsKKwkgICAgY2FzZSAnYSc6CisJCWlmICgoKnMgPT0gJz0nIHx8ICpzID09ICcrJyB8fCAqcyA9PSAnLScKKwkJICAgICB8fCAqcyA9PSAnKicgfHwgKnMgPT0gJy8nKQorCQkgICAgJiYgKHNbMV0gPT0gJ3AnIHx8IHNbMV0gPT0gJ2MnKQorCQkgICAgJiYgc1syXSAhPSAnXDAnKSB7CisJCSAgICBpbnQgbDsKKwkJICAgIGwgPSAyOworCQkgICAgaWYgKCpzICE9ICc9JykKKwkJCWdldHBhcm0ocGFyYW0sIDEpOworCQkgICAgaWYgKHNbMV0gPT0gJ3AnKSB7CisJCQlnZXRwYXJtKHBhcmFtICsgc1syXSAtICdAJywgMSk7CisJCQlpZiAocGFyYW0gIT0gb25zdGFjaykgeworCQkJICAgIHBvcCgpOworCQkJICAgIHBhcmFtLS07CisJCQl9CisJCQlsKys7CisJCSAgICB9IGVsc2UKKwkJCWwgKz0gY3Z0Y2hhcihzICsgMik7CisJCSAgICBzd2l0Y2ggKCpzKSB7CisJCSAgICBjYXNlICcrJzoKKwkJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlKyIpOworCQkJYnJlYWs7CisJCSAgICBjYXNlICctJzoKKwkJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlLSIpOworCQkJYnJlYWs7CisJCSAgICBjYXNlICcqJzoKKwkJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlKiIpOworCQkJYnJlYWs7CisJCSAgICBjYXNlICcvJzoKKwkJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlLyIpOworCQkJYnJlYWs7CisJCSAgICBjYXNlICc9JzoKKwkJCWlmIChzZWVucikgeworCQkJICAgIGlmIChwYXJhbSA9PSAxKQorCQkJCW9uc3RhY2sgPSAyOworCQkJICAgIGVsc2UgaWYgKHBhcmFtID09IDIpCisJCQkJb25zdGFjayA9IDE7CisJCQkgICAgZWxzZQorCQkJCW9uc3RhY2sgPSBwYXJhbTsKKwkJCX0gZWxzZQorCQkJICAgIG9uc3RhY2sgPSBwYXJhbTsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgcyArPSBsOworCQkgICAgYnJlYWs7CisJCX0KKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCXMgKz0gY3Z0Y2hhcihzKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUrIik7CisJCWJyZWFrOworCSAgICBjYXNlICcrJzoKKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCXMgKz0gY3Z0Y2hhcihzKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUrJWMiKTsKKwkJcG9wKCk7CisJCWJyZWFrOworCSAgICBjYXNlICdzJzoKKyNpZmRlZiBXQVRFUkxPTworCQlzICs9IGN2dGNoYXIocyk7CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJS0iKTsKKyNlbHNlCisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJXMiKTsKKwkJcG9wKCk7CisjZW5kaWYgLyogV0FURVJMT08gKi8KKwkJYnJlYWs7CisJICAgIGNhc2UgJy0nOgorCQlzICs9IGN2dGNoYXIocyk7CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJS0lYyIpOworCQlwb3AoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJy4nOgorCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVjIik7CisJCXBvcCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnMCc6CQkvKiBub3QgY2xlYXIgYW55IG9mIHRoZSBoaXN0b3JpY2FsIHRlcm1jYXBzIGRpZCB0aGlzICovCisJCWlmICgqcyA9PSAnMycpCisJCSAgICBnb3RvIHNlZTAzOworCQllbHNlIGlmICgqcyAhPSAnMicpCisJCSAgICBnb3RvIGludmFsaWQ7CisJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJzInOgorCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUyZCIpOworCQlwb3AoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJzMnOgorCSAgICAgIHNlZTAzOgorCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUzZCIpOworCQlwb3AoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2QnOgorCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVkIik7CisJCXBvcCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnZic6CisJCXBhcmFtKys7CisJCWJyZWFrOworCSAgICBjYXNlICdiJzoKKwkJcGFyYW0tLTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1xcJzoKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVcXCIpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBpbnZhbGlkOgorCQlkcCA9IHNhdmVfY2hhcihkcCwgJyUnKTsKKwkJcy0tOworCQlfbmNfd2FybmluZygidW5rbm93biAlJSBjb2RlICVzICglI3gpIGluICVzIiwKKwkJCSAgICB1bmN0cmwoKGNodHlwZSkgKnMpLCBVQ2hhcigqcyksIGNhcCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOworI2lmZGVmIFJFVklTSUJJTElaRQorCWNhc2UgJ1xcJzoKKwkgICAgZHAgPSBzYXZlX2NoYXIoZHAsICpzKyspOworCSAgICBkcCA9IHNhdmVfY2hhcihkcCwgKnMrKyk7CisJICAgIGJyZWFrOworCWNhc2UgJ1xuJzoKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxcbiIpOworCSAgICBzKys7CisJICAgIGJyZWFrOworCWNhc2UgJ1x0JzoKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxcdCIpOworCSAgICBzKys7CisJICAgIGJyZWFrOworCWNhc2UgJ1xyJzoKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxcciIpOworCSAgICBzKys7CisJICAgIGJyZWFrOworCWNhc2UgJ1wyMDAnOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFwwIik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXGYnOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFxmIik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXGInOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFxiIik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnICc6CisJICAgIGRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXHMiKTsKKwkgICAgcysrOworCSAgICBicmVhazsKKwljYXNlICdeJzoKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxcXiIpOworCSAgICBzKys7CisJICAgIGJyZWFrOworCWNhc2UgJzonOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFw6Iik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnLCc6CisJICAgIGRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXCwiKTsKKwkgICAgcysrOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBpZiAoKnMgPT0gJ1wwMzMnKSB7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXEUiKTsKKwkJcysrOworCSAgICB9IGVsc2UgaWYgKCpzID4gMCAmJiAqcyA8IDMyKSB7CisJCWRwID0gc2F2ZV9jaGFyKGRwLCAnXicpOworCQlkcCA9IHNhdmVfY2hhcihkcCwgKnMgKyAnQCcpOworCQlzKys7CisJICAgIH0gZWxzZSBpZiAoKnMgPD0gMCB8fCAqcyA+PSAxMjcpIHsKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICdcXCcpOworCQlkcCA9IHNhdmVfY2hhcihkcCwgKCgqcyAmIDAzMDApID4+IDYpICsgJzAnKTsKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICgoKnMgJiAwMDcwKSA+PiAzKSArICcwJyk7CisJCWRwID0gc2F2ZV9jaGFyKGRwLCAoKnMgJiAwMDA3KSArICcwJyk7CisJCXMrKzsKKwkgICAgfSBlbHNlCisJCWRwID0gc2F2ZV9jaGFyKGRwLCAqcysrKTsKKwkgICAgYnJlYWs7CisjZWxzZQorCWRlZmF1bHQ6CisJICAgIGRwID0gc2F2ZV9jaGFyKGRwLCAqcysrKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3csIGlmIHdlIHN0cmlwcGVkIG9mZiBzb21lIGxlYWRpbmcgcGFkZGluZywgYWRkIGl0IGF0IHRoZSBlbmQKKyAgICAgKiBvZiB0aGUgc3RyaW5nIGFzIG1hbmRhdG9yeSBwYWRkaW5nLgorICAgICAqLworICAgIGlmIChjYXBzdGFydCkgeworCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIkPCIpOworCWZvciAocyA9IGNhcHN0YXJ0OzsgcysrKQorCSAgICBpZiAoaXNkaWdpdChVQ2hhcigqcykpIHx8ICpzID09ICcqJyB8fCAqcyA9PSAnLicpCisJCWRwID0gc2F2ZV9jaGFyKGRwLCAqcyk7CisJICAgIGVsc2UKKwkJYnJlYWs7CisJZHAgPSBzYXZlX3N0cmluZyhkcCwgIi8+Iik7CisgICAgfQorCisgICAgKHZvaWQpIHNhdmVfY2hhcihkcCwgJ1wwJyk7CisgICAgcmV0dXJuIChteV9zdHJpbmcpOworfQorCisvKgorICogQ2hlY2sgZm9yIGFuIGV4cHJlc3Npb24gdGhhdCBjb3JyZXNwb25kcyB0byAiJUIiIChCQ0QpOgorICoJKHBhcmFtZXRlciAvIDEwKSAqIDE2ICsgKHBhcmFtZXRlciAlIDEwKQorICovCitzdGF0aWMgaW50CitiY2RfZXhwcmVzc2lvbihjb25zdCBjaGFyICpzdHIpCit7CisgICAgLyogbGVhdmUgdGhpcyBub24tY29uc3QgZm9yIEhQVVggKi8KKyAgICBzdGF0aWMgY2hhciBmbXRbXSA9ICIlJXAlYyUlezEwfSUlLyUlezE2fSUlKiUlcCVjJSV7MTB9JSVtJSUrIjsKKyAgICBpbnQgbGVuID0gMDsKKyAgICBjaGFyIGNoMSwgY2gyOworCisgICAgaWYgKHNzY2FuZihzdHIsIGZtdCwgJmNoMSwgJmNoMikgPT0gMgorCSYmIGlzZGlnaXQoVUNoYXIoY2gxKSkKKwkmJiBpc2RpZ2l0KFVDaGFyKGNoMikpCisJJiYgKGNoMSA9PSBjaDIpKSB7CisJbGVuID0gMjg7CisjaWZuZGVmIE5ERUJVRworCXsKKwkgICAgY2hhciBidWZmZXJbODBdOworCSAgICBpbnQgdHN0OworCSAgICBzcHJpbnRmKGJ1ZmZlciwgZm10LCBjaDEsIGNoMik7CisJICAgIHRzdCA9IHN0cmxlbihidWZmZXIpIC0gMTsKKwkgICAgYXNzZXJ0KGxlbiA9PSB0c3QpOworCX0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgY2hhciAqCitzYXZlX3RjX2NoYXIoY2hhciAqYnVmcHRyLCBpbnQgYzEpCit7CisgICAgY2hhciB0ZW1wWzgwXTsKKworICAgIGlmIChpczdiaXRzKGMxKSAmJiBpc3ByaW50KGMxKSkgeworCWlmIChjMSA9PSAnOicgfHwgYzEgPT0gJ1xcJykKKwkgICAgYnVmcHRyID0gc2F2ZV9jaGFyKGJ1ZnB0ciwgJ1xcJyk7CisJYnVmcHRyID0gc2F2ZV9jaGFyKGJ1ZnB0ciwgYzEpOworICAgIH0gZWxzZSB7CisJaWYgKGMxID09IChjMSAmIDB4MWYpKQkvKiBpc2NudHJsKCkgcmV0dXJucyBUIG9uIDI1NSAqLworCSAgICAodm9pZCkgc3RyY3B5KHRlbXAsIHVuY3RybCgoY2h0eXBlKSBjMSkpOworCWVsc2UKKwkgICAgKHZvaWQpIHNwcmludGYodGVtcCwgIlxcJTAzbyIsIGMxKTsKKwlidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsIHRlbXApOworICAgIH0KKyAgICByZXR1cm4gYnVmcHRyOworfQorCitzdGF0aWMgY2hhciAqCitzYXZlX3RjX2luZXF1YWxpdHkoY2hhciAqYnVmcHRyLCBpbnQgYzEsIGludCBjMikKK3sKKyAgICBidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlPiIpOworICAgIGJ1ZnB0ciA9IHNhdmVfdGNfY2hhcihidWZwdHIsIGMxKTsKKyAgICBidWZwdHIgPSBzYXZlX3RjX2NoYXIoYnVmcHRyLCBjMik7CisgICAgcmV0dXJuIGJ1ZnB0cjsKK30KKworLyoKKyAqIEhlcmUgYXJlIHRoZSBjYXBhYmlsaXRpZXMgaW5mb3RvY2FwIGFzc3VtZXMgaXQgY2FuIHRyYW5zbGF0ZSB0bzoKKyAqCisgKiAgICAgJSUgICAgICAgb3V0cHV0IGAlJworICogICAgICVkICAgICAgIG91dHB1dCB2YWx1ZSBhcyBpbiBwcmludGYgJWQKKyAqICAgICAlMiAgICAgICBvdXRwdXQgdmFsdWUgYXMgaW4gcHJpbnRmICUyZAorICogICAgICUzICAgICAgIG91dHB1dCB2YWx1ZSBhcyBpbiBwcmludGYgJTNkCisgKiAgICAgJS4gICAgICAgb3V0cHV0IHZhbHVlIGFzIGluIHByaW50ZiAlYworICogICAgICUrYyAgICAgIGFkZCBjaGFyYWN0ZXIgYyB0byB2YWx1ZSwgdGhlbiBkbyAlLgorICogICAgICU+eHkgICAgIGlmIHZhbHVlID4geCB0aGVuIGFkZCB5LCBubyBvdXRwdXQKKyAqICAgICAlciAgICAgICByZXZlcnNlIG9yZGVyIG9mIHR3byBwYXJhbWV0ZXJzLCBubyBvdXRwdXQKKyAqICAgICAlaSAgICAgICBpbmNyZW1lbnQgYnkgb25lLCBubyBvdXRwdXQKKyAqICAgICAlbiAgICAgICBleGNsdXNpdmUtb3IgYWxsIHBhcmFtZXRlcnMgd2l0aCAwMTQwIChEYXRhbWVkaWEgMjUwMCkKKyAqICAgICAlQiAgICAgICBCQ0QgKDE2Kih2YWx1ZS8xMCkpICsgKHZhbHVlJTEwKSwgbm8gb3V0cHV0CisgKiAgICAgJUQgICAgICAgUmV2ZXJzZSBjb2RpbmcgKHZhbHVlIC0gMioodmFsdWUlMTYpKSwgbm8gb3V0cHV0IChEZWx0YSBEYXRhKS4KKyAqICAgICAlbSAgICAgICBleGNsdXNpdmUtb3IgYWxsIHBhcmFtZXRlcnMgd2l0aCAwMTc3IChub3QgaW4gNC40QlNEKQorICovCisKKy8qCisgKiBDb252ZXJ0IGEgdGVybWluZm8gc3RyaW5nIHRvIHRlcm1jYXAgZm9ybWF0LiAgUGFyYW1ldGVycyBhcmUgYXMgaW4KKyAqIF9uY19jYXB0b2luZm8oKS4KKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX2luZm90b2NhcChjb25zdCBjaGFyICpjYXAgR0NDX1VOVVNFRCwgY29uc3QgY2hhciAqc3RyLCBpbnQgY29uc3QgcGFyYW1ldGVyaXplZCkKK3sKKyAgICBpbnQgc2Vlbm9uZSA9IDAsIHNlZW50d28gPSAwLCBzYXdfbSA9IDAsIHNhd19uID0gMDsKKyAgICBjb25zdCBjaGFyICpwYWRkaW5nOworICAgIGNvbnN0IGNoYXIgKnRyaW1tZWQgPSAwOworICAgIGNoYXIgY2gxID0gMCwgY2gyID0gMDsKKyAgICBjaGFyICpidWZwdHIgPSBpbml0X3N0cmluZygpOworICAgIGludCBsZW47CisgICAgYm9vbCBzeW50YXhfZXJyb3IgPSBGQUxTRTsKKworICAgIC8qIHdlIG1heSBoYXZlIHRvIG1vdmUgc29tZSB0cmFpbGluZyBtYW5kYXRvcnkgcGFkZGluZyB1cCBmcm9udCAqLworICAgIHBhZGRpbmcgPSBzdHIgKyBzdHJsZW4oc3RyKSAtIDE7CisgICAgaWYgKHBhZGRpbmcgPiBzdHIgJiYgKnBhZGRpbmcgPT0gJz4nICYmICotLXBhZGRpbmcgPT0gJy8nKSB7CisJLS1wYWRkaW5nOworCXdoaWxlIChpc2RpZ2l0KFVDaGFyKCpwYWRkaW5nKSkgfHwgKnBhZGRpbmcgPT0gJy4nIHx8ICpwYWRkaW5nID09ICcqJykKKwkgICAgcGFkZGluZy0tOworCWlmIChwYWRkaW5nID4gc3RyICYmICpwYWRkaW5nID09ICc8JyAmJiAqLS1wYWRkaW5nID09ICckJykKKwkgICAgdHJpbW1lZCA9IHBhZGRpbmc7CisJcGFkZGluZyArPSAyOworCisJd2hpbGUgKGlzZGlnaXQoVUNoYXIoKnBhZGRpbmcpKSB8fCAqcGFkZGluZyA9PSAnLicgfHwgKnBhZGRpbmcgPT0gJyonKQorCSAgICBidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAqcGFkZGluZysrKTsKKyAgICB9CisKKyAgICBmb3IgKDsgKnN0ciAmJiBzdHIgIT0gdHJpbW1lZDsgc3RyKyspIHsKKwlpbnQgYzEsIGMyOworCWNoYXIgKmNwID0gMDsKKworCWlmIChzdHJbMF0gPT0gJ1xcJyAmJiAoc3RyWzFdID09ICdeJyB8fCBzdHJbMV0gPT0gJywnKSkgeworCSAgICBidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAqKytzdHIpOworCX0gZWxzZSBpZiAoc3RyWzBdID09ICckJyAmJiBzdHJbMV0gPT0gJzwnKSB7CS8qIGRpc2NhcmQgcGFkZGluZyAqLworCSAgICBzdHIgKz0gMjsKKwkgICAgd2hpbGUgKGlzZGlnaXQoVUNoYXIoKnN0cikpCisJCSAgIHx8ICpzdHIgPT0gJy4nCisJCSAgIHx8ICpzdHIgPT0gJyonCisJCSAgIHx8ICpzdHIgPT0gJy8nCisJCSAgIHx8ICpzdHIgPT0gJz4nKQorCQlzdHIrKzsKKwkgICAgLS1zdHI7CisJfSBlbHNlIGlmIChzdHJbMF0gPT0gJyUnICYmIHN0clsxXSA9PSAnJScpIHsJLyogZXNjYXBlZCAnJScgKi8KKwkgICAgYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJSUiKTsKKwkgICAgKytzdHI7CisJfSBlbHNlIGlmICgqc3RyICE9ICclJyB8fCAocGFyYW1ldGVyaXplZCA8IDEpKSB7CisJICAgIGJ1ZnB0ciA9IHNhdmVfY2hhcihidWZwdHIsICpzdHIpOworCX0gZWxzZSBpZiAoc3NjYW5mKHN0ciwgIiUlPyUleyVkfSUlPiUldCUleyVkfSUlKyUlOyIsICZjMSwgJmMyKSA9PSAyKSB7CisJICAgIHN0ciA9IHN0cmNocihzdHIsICc7Jyk7CisJICAgIGJ1ZnB0ciA9IHNhdmVfdGNfaW5lcXVhbGl0eShidWZwdHIsIGMxLCBjMik7CisJfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJSU/JSV7JWR9JSU+JSV0JSUnJWMnJSUrJSU7IiwgJmMxLCAmY2gyKSA9PSAyKSB7CisJICAgIHN0ciA9IHN0cmNocihzdHIsICc7Jyk7CisJICAgIGJ1ZnB0ciA9IHNhdmVfdGNfaW5lcXVhbGl0eShidWZwdHIsIGMxLCBjMik7CisJfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJSU/JSUnJWMnJSU+JSV0JSV7JWR9JSUrJSU7IiwgJmNoMSwgJmMyKSA9PSAyKSB7CisJICAgIHN0ciA9IHN0cmNocihzdHIsICc7Jyk7CisJICAgIGJ1ZnB0ciA9IHNhdmVfdGNfaW5lcXVhbGl0eShidWZwdHIsIGMxLCBjMik7CisJfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJSU/JSUnJWMnJSU+JSV0JSUnJWMnJSUrJSU7IiwgJmNoMSwgJmNoMikgPT0gMikgeworCSAgICBzdHIgPSBzdHJjaHIoc3RyLCAnOycpOworCSAgICBidWZwdHIgPSBzYXZlX3RjX2luZXF1YWxpdHkoYnVmcHRyLCBjMSwgYzIpOworCX0gZWxzZSBpZiAoKGxlbiA9IGJjZF9leHByZXNzaW9uKHN0cikpICE9IDApIHsKKwkgICAgc3RyICs9IGxlbjsKKwkgICAgYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJUIiKTsKKwl9IGVsc2UgaWYgKChzc2NhbmYoc3RyLCAiJSV7JWR9JSUrJSVjIiwgJmMxKSA9PSAxCisJCSAgICB8fCBzc2NhbmYoc3RyLCAiJSUnJWMnJSUrJSVjIiwgJmNoMSkgPT0gMSkKKwkJICAgJiYgKGNwID0gc3RyY2hyKHN0ciwgJysnKSkpIHsKKwkgICAgc3RyID0gY3AgKyAyOworCSAgICBidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlKyIpOworCisJICAgIGlmIChjaDEpCisJCWMxID0gY2gxOworCSAgICBidWZwdHIgPSBzYXZlX3RjX2NoYXIoYnVmcHRyLCBjMSk7CisJfQorCS8qIEZJWE1FOiB0aGlzICJ3b3JrcyIgZm9yICdkZWx0YScgKi8KKwllbHNlIGlmIChzdHJuY21wKHN0ciwgIiV7Mn0lKiUtIiwgOCkgPT0gMCkgeworCSAgICBzdHIgKz0gNzsKKwkgICAgYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJUQiKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAiJXs5Nn0lXiIsIDcpID09IDApIHsKKwkgICAgc3RyICs9IDY7CisJICAgIGlmIChzYXdfbSsrID09IDApIHsKKwkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJW4iKTsKKwkgICAgfQorCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICIlezEyN30lXiIsIDgpID09IDApIHsKKwkgICAgc3RyICs9IDc7CisJICAgIGlmIChzYXdfbisrID09IDApIHsKKwkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJW0iKTsKKwkgICAgfQorCX0gZWxzZSB7CQkvKiBjbS1zdHlsZSBmb3JtYXQgZWxlbWVudCAqLworCSAgICBzdHIrKzsKKwkgICAgc3dpdGNoICgqc3RyKSB7CisJICAgIGNhc2UgJyUnOgorCQlidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAnJScpOworCQlicmVhazsKKworCSAgICBjYXNlICcwJzoKKwkgICAgY2FzZSAnMSc6CisJICAgIGNhc2UgJzInOgorCSAgICBjYXNlICczJzoKKwkgICAgY2FzZSAnNCc6CisJICAgIGNhc2UgJzUnOgorCSAgICBjYXNlICc2JzoKKwkgICAgY2FzZSAnNyc6CisJICAgIGNhc2UgJzgnOgorCSAgICBjYXNlICc5JzoKKwkJYnVmcHRyID0gc2F2ZV9jaGFyKGJ1ZnB0ciwgJyUnKTsKKwkJd2hpbGUgKGlzZGlnaXQoVUNoYXIoKnN0cikpKQorCQkgICAgYnVmcHRyID0gc2F2ZV9jaGFyKGJ1ZnB0ciwgKnN0cisrKTsKKwkJaWYgKHN0cmNocigiZG94WC4iLCAqc3RyKSkgeworCQkgICAgaWYgKCpzdHIgIT0gJ2QnKQkvKiB0ZXJtY2FwIGRvZXNuJ3QgaGF2ZSBvY3RhbCwgaGV4ICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlICdkJzoKKwkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJWQiKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnYyc6CisJCWJ1ZnB0ciA9IHNhdmVfc3RyaW5nKGJ1ZnB0ciwgIiUuIik7CisJCWJyZWFrOworCisJCS8qCisJCSAqICVzIGlzbid0IGluIHRlcm1jYXAsIGJ1dCBpdCdzIGNvbnZlbmllbnQgdG8gcGFzcyBpdCB0aHJvdWdoCisJCSAqIHNvIHdlIGNhbiByZXByZXNlbnQgdGhpbmdzIGxpa2UgdGVybWluZm8gcGZrZXkgc3RyaW5ncyBpbgorCQkgKiB0ZXJtY2FwIG5vdGF0aW9uLgorCQkgKi8KKwkgICAgY2FzZSAncyc6CisJCWJ1ZnB0ciA9IHNhdmVfc3RyaW5nKGJ1ZnB0ciwgIiVzIik7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ3AnOgorCQlzdHIrKzsKKwkJaWYgKCpzdHIgPT0gJzEnKQorCQkgICAgc2Vlbm9uZSA9IDE7CisJCWVsc2UgaWYgKCpzdHIgPT0gJzInKSB7CisJCSAgICBpZiAoIXNlZW5vbmUgJiYgIXNlZW50d28pIHsKKwkJCWJ1ZnB0ciA9IHNhdmVfc3RyaW5nKGJ1ZnB0ciwgIiVyIik7CisJCQlzZWVudHdvKys7CisJCSAgICB9CisJCX0gZWxzZSBpZiAoKnN0ciA+PSAnMycpCisJCSAgICByZXR1cm4gKDApOworCQlicmVhazsKKworCSAgICBjYXNlICdpJzoKKwkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJWkiKTsKKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkJYnVmcHRyID0gc2F2ZV9jaGFyKGJ1ZnB0ciwgKnN0cik7CisJCXN5bnRheF9lcnJvciA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CQkJLyogZW5kc3dpdGNoICgqc3RyKSAqLworCX0JCQkvKiBlbmRlbHNlICgqc3RyID09ICclJykgKi8KKworCS8qCisJICogJ3N0cicgYWx3YXlzIHBvaW50cyB0byB0aGUgZW5kIG9mIHdoYXQgd2FzIHNjYW5uZWQgaW4gdGhpcyBzdGVwLAorCSAqIGJ1dCB0aGF0IG1heSBub3QgYmUgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorCSAqLworCWFzc2VydChzdHIgIT0gMCk7CisJaWYgKCpzdHIgPT0gJ1wwJykKKwkgICAgYnJlYWs7CisKKyAgICB9CQkJCS8qIGVuZHdoaWxlICgqc3RyKSAqLworCisgICAgcmV0dXJuIChzeW50YXhfZXJyb3IgPyBOVUxMIDogbXlfc3RyaW5nKTsKK30KKworI2lmZGVmIE1BSU4KKworaW50IGN1cnJfbGluZTsKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGMsIHRjID0gRkFMU0U7CisKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImMiKSkgIT0gRU9GKQorCXN3aXRjaCAoYykgeworCWNhc2UgJ2MnOgorCSAgICB0YyA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKworICAgIGN1cnJfbGluZSA9IDA7CisgICAgZm9yICg7OykgeworCWNoYXIgYnVmW0JVRlNJWl07CisKKwkrK2N1cnJfbGluZTsKKwlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pID09IDApCisJICAgIGJyZWFrOworCWJ1ZltzdHJsZW4oYnVmKSAtIDFdID0gJ1wwJzsKKwlfbmNfc2V0X3NvdXJjZShidWYpOworCisJaWYgKHRjKSB7CisJICAgIGNoYXIgKmNwID0gX25jX2luZm90b2NhcCgidG8gdGVybWNhcCIsIGJ1ZiwgMSk7CisKKwkgICAgaWYgKGNwKQorCQkodm9pZCkgZnB1dHMoY3AsIHN0ZG91dCk7CisJfSBlbHNlCisJICAgICh2b2lkKSBmcHV0cyhfbmNfY2FwdG9pbmZvKCJ0byB0ZXJtaW5mbyIsIGJ1ZiwgMSksIHN0ZG91dCk7CisJKHZvaWQpIHB1dGNoYXIoJ1xuJyk7CisgICAgfQorICAgIHJldHVybiAoMCk7Cit9CisjZW5kaWYgLyogTUFJTiAqLworCisjaWYgTk9fTEVBS1MKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfY2FwdG9pbmZvX2xlYWtzKHZvaWQpCit7CisgICAgaWYgKG15X3N0cmluZyAhPSAwKSB7CisJRnJlZUFuZE51bGwobXlfc3RyaW5nKTsKKyAgICB9CisgICAgbXlfbGVuZ3RoID0gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9jb21wX2Vycm9yLmMgYi9uY3Vyc2VzL3RpbmZvL2NvbXBfZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmMzNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9jb21wX2Vycm9yLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWNvbXBfZXJyb3IuYyAtLSBFcnJvciBtZXNzYWdlIHJvdXRpbmVzCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBjb21wX2Vycm9yLmMsdiAxLjMxIDIwMDcvMDQvMjEgMjM6Mzg6MzIgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlRfVkFSKGJvb2wpIF9uY19zdXBwcmVzc193YXJuaW5ncyA9IEZBTFNFOworTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX2N1cnJfbGluZSA9IDA7IC8qIGN1cnJlbnQgbGluZSAjIGluIGlucHV0ICovCitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBfbmNfY3Vycl9jb2wgPSAwOyAvKiBjdXJyZW50IGNvbHVtbiAjIGluIGlucHV0ICovCisKKyNkZWZpbmUgU291cmNlTmFtZQlfbmNfZ2xvYmFscy5jb21wX3NvdXJjZW5hbWUKKyNkZWZpbmUgVGVybVR5cGUJX25jX2dsb2JhbHMuY29tcF90ZXJtdHlwZQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfZ2V0X3NvdXJjZSh2b2lkKQoreworICAgIHJldHVybiBTb3VyY2VOYW1lOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NldF9zb3VyY2UoY29uc3QgY2hhciAqY29uc3QgbmFtZSkKK3sKKyAgICBTb3VyY2VOYW1lID0gbmFtZTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zZXRfdHlwZShjb25zdCBjaGFyICpjb25zdCBuYW1lKQoreworICAgIGlmIChUZXJtVHlwZSA9PSAwKQorCVRlcm1UeXBlID0gdHlwZU1hbGxvYyhjaGFyLCBNQVhfTkFNRV9TSVpFICsgMSk7CisgICAgaWYgKFRlcm1UeXBlICE9IDApIHsKKwlUZXJtVHlwZVswXSA9ICdcMCc7CisJaWYgKG5hbWUpCisJICAgIHN0cm5jYXQoVGVybVR5cGUsIG5hbWUsIE1BWF9OQU1FX1NJWkUpOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19nZXRfdHlwZShjaGFyICpuYW1lKQoreworI2lmIE5PX0xFQUtTCisgICAgaWYgKG5hbWUgPT0gMCAmJiBUZXJtVHlwZSAhPSAwKSB7CisJRnJlZUFuZE51bGwoVGVybVR5cGUpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAobmFtZSAhPSAwKQorCXN0cmNweShuYW1lLCBUZXJtVHlwZSAhPSAwID8gVGVybVR5cGUgOiAiIik7Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCit3aGVyZV9pc19wcm9ibGVtKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJcIiVzXCIiLCBTb3VyY2VOYW1lID8gU291cmNlTmFtZSA6ICI/Iik7CisgICAgaWYgKF9uY19jdXJyX2xpbmUgPj0gMCkKKwlmcHJpbnRmKHN0ZGVyciwgIiwgbGluZSAlZCIsIF9uY19jdXJyX2xpbmUpOworICAgIGlmIChfbmNfY3Vycl9jb2wgPj0gMCkKKwlmcHJpbnRmKHN0ZGVyciwgIiwgY29sICVkIiwgX25jX2N1cnJfY29sKTsKKyAgICBpZiAoVGVybVR5cGUgIT0gMCAmJiBUZXJtVHlwZVswXSAhPSAnXDAnKQorCWZwcmludGYoc3RkZXJyLCAiLCB0ZXJtaW5hbCAnJXMnIiwgVGVybVR5cGUpOworICAgIGZwdXRjKCc6Jywgc3RkZXJyKTsKKyAgICBmcHV0YygnICcsIHN0ZGVycik7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfd2FybmluZyhjb25zdCBjaGFyICpjb25zdCBmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKworICAgIGlmIChfbmNfc3VwcHJlc3Nfd2FybmluZ3MpCisJcmV0dXJuOworCisgICAgd2hlcmVfaXNfcHJvYmxlbSgpOworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3ApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB2YV9lbmQoYXJncCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfZXJyX2Fib3J0KGNvbnN0IGNoYXIgKmNvbnN0IGZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworCisgICAgd2hlcmVfaXNfcHJvYmxlbSgpOworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3ApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB2YV9lbmQoYXJncCk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3N5c2Vycl9hYm9ydChjb25zdCBjaGFyICpjb25zdCBmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKworICAgIHdoZXJlX2lzX3Byb2JsZW0oKTsKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdwKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgdmFfZW5kKGFyZ3ApOworCisgICAgLyogSWYgd2UncmUgZGVidWdnaW5nLCB0cnkgdG8gc2hvdyB3aGVyZSB0aGUgcHJvYmxlbSBvY2N1cnJlZCAtIHRoaXMKKyAgICAgKiB3aWxsIGR1bXAgY29yZS4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKFRSQUNFKSB8fCAhZGVmaW5lZChOREVCVUcpCisgICAgYWJvcnQoKTsKKyNlbHNlCisgICAgLyogRHVtcGluZyBjb3JlIGluIHByb2R1Y3Rpb24gY29kZSBpcyBub3QgYSBnb29kIGlkZWEuCisgICAgICovCisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2NvbXBfZXhwYW5kLmMgYi9uY3Vyc2VzL3RpbmZvL2NvbXBfZXhwYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3OWE5MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vY29tcF9leHBhbmQuYwpAQCAtMCwwICsxLDE5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTggICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogY29tcF9leHBhbmQuYyx2IDEuMjAgMjAwOC8wOC8xNiAxOToyOTo0MiB0b20gRXhwICQiKQorCitzdGF0aWMgaW50Cit0cmFpbGluZ19zcGFjZXMoY29uc3QgY2hhciAqc3JjKQoreworICAgIHdoaWxlICgqc3JjID09ICcgJykKKwlzcmMrKzsKKyAgICByZXR1cm4gKnNyYyA9PSAwOworfQorCisvKiB0aGlzIGRlYWxzIHdpdGggZGlmZmVyZW5jZXMgb3ZlciB3aGV0aGVyIDB4N2YgYW5kIDB4ODAuLjB4OWYgYXJlIGNvbnRyb2xzICovCisjZGVmaW5lIFJFQUxDVEwocykgKFVDaGFyKCoocykpIDwgMTI3ICYmIGlzY250cmwoVUNoYXIoKihzKSkpKQorI2RlZmluZSBSRUFMUFJJTlQocykgKFVDaGFyKCoocykpIDwgMTI3ICYmIGlzcHJpbnQoVUNoYXIoKihzKSkpKQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdGljX2V4cGFuZChjb25zdCBjaGFyICpzcmNwLCBib29sIHRpY19mb3JtYXQsIGludCBudW1iZXJzKQoreworICAgIHN0YXRpYyBjaGFyICpidWZmZXI7CisgICAgc3RhdGljIHNpemVfdCBsZW5ndGg7CisKKyAgICBpbnQgYnVmcDsKKyAgICBjb25zdCBjaGFyICpzdHIgPSBWQUxJRF9TVFJJTkcoc3JjcCkgPyBzcmNwIDogIlwwXDAiOworICAgIGJvb2wgaXNsb25nID0gKHN0cmxlbihzdHIpID4gMyk7CisgICAgc2l6ZV90IG5lZWQgPSAoMiArIHN0cmxlbihzdHIpKSAqIDQ7CisgICAgaW50IGNoOworCisjaWYgTk9fTEVBS1MKKyAgICBpZiAoc3JjcCA9PSAwKSB7CisJaWYgKGJ1ZmZlciAhPSAwKSB7CisJICAgIEZyZWVBbmROdWxsKGJ1ZmZlcik7CisJICAgIGxlbmd0aCA9IDA7CisJfQorCXJldHVybiAwOworICAgIH0KKyNlbmRpZgorICAgIGlmIChidWZmZXIgPT0gMCB8fCBuZWVkID4gbGVuZ3RoKSB7CisJaWYgKChidWZmZXIgPSB0eXBlUmVhbGxvYyhjaGFyLCBsZW5ndGggPSBuZWVkLCBidWZmZXIpKSA9PSAwKQorCSAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJ1ZnAgPSAwOworICAgIHdoaWxlICgoY2ggPSBVQ2hhcigqc3RyKSkgIT0gMCkgeworCWlmIChjaCA9PSAnJScgJiYgUkVBTFBSSU5UKHN0ciArIDEpKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gKnN0cisrOworCSAgICAvKgorCSAgICAgKiBUaG91Z2ggdGhlIGNoYXJhY3RlciBsaXRlcmFscyBhcmUgbW9yZSBjb21wYWN0LCBtb3N0CisJICAgICAqIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyB1c2UgbnVtYmVycyBhbmQgYXJlIG5vdCBlYXN5CisJICAgICAqIHRvIHJlYWQgaW4gY2hhcmFjdGVyLWxpdGVyYWwgZm9ybS4KKwkgICAgICovCisJICAgIHN3aXRjaCAobnVtYmVycykgeworCSAgICBjYXNlIC0xOgorCQlpZiAoc3RyWzBdID09IFNfUVVPVEUKKwkJICAgICYmIHN0clsxXSAhPSAnXFwnCisJCSAgICAmJiBSRUFMUFJJTlQoc3RyICsgMSkKKwkJICAgICYmIHN0clsyXSA9PSBTX1FVT1RFKSB7CisJCSAgICBzcHJpbnRmKGJ1ZmZlciArIGJ1ZnAsICJ7JWR9Iiwgc3RyWzFdKTsKKwkJICAgIGJ1ZnAgKz0gc3RybGVuKGJ1ZmZlciArIGJ1ZnApOworCQkgICAgc3RyICs9IDI7CisJCX0gZWxzZSB7CisJCSAgICBidWZmZXJbYnVmcCsrXSA9ICpzdHI7CisJCX0KKwkJYnJlYWs7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSAiJXtudW1iZXJ9IiwgdHJ5IHRvIHRyYW5zbGF0ZSBpdCBpbnRvCisJCSAqIGEgIiUnY2hhciciIGZvcm0sIHNpbmNlIHRoYXQgd2lsbCBydW4gYSBsaXR0bGUgZmFzdGVyCisJCSAqIHdoZW4gd2UncmUgaW50ZXJwcmV0aW5nIGl0LiAgQWxzbywgaGF2aW5nIG9uZSBmb3JtCisJCSAqIGZvciB0aGUgY29uc3RhbnQgbWFrZXMgaXQgc2ltcGxlciB0byBjb21wYXJlIHRlcm1pbmFsCisJCSAqIGRlc2NyaXB0aW9ucy4KKwkJICovCisJICAgIGNhc2UgMToKKwkJaWYgKHN0clswXSA9PSBMX0JSQUNFCisJCSAgICAmJiBpc2RpZ2l0KFVDaGFyKHN0clsxXSkpKSB7CisJCSAgICBjaGFyICpkc3QgPSAwOworCQkgICAgbG9uZyB2YWx1ZSA9IHN0cnRvbChzdHIgKyAxLCAmZHN0LCAwKTsKKwkJICAgIGlmIChkc3QgIT0gMAorCQkJJiYgKmRzdCA9PSBSX0JSQUNFCisJCQkmJiB2YWx1ZSA8IDEyNworCQkJJiYgdmFsdWUgIT0gJ1xcJwkvKiBGSVhNRSAqLworCQkJJiYgaXNwcmludCgoaW50KSB2YWx1ZSkpIHsKKwkJCWNoID0gKGludCkgdmFsdWU7CisJCQlidWZmZXJbYnVmcCsrXSA9IFNfUVVPVEU7CisJCQlpZiAoY2ggPT0gJ1xcJworCQkJICAgIHx8IGNoID09IFNfUVVPVEUpCisJCQkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCQkJYnVmZmVyW2J1ZnArK10gPSAoY2hhcikgY2g7CisJCQlidWZmZXJbYnVmcCsrXSA9IFNfUVVPVEU7CisJCQlzdHIgPSBkc3Q7CisJCSAgICB9IGVsc2UgeworCQkJYnVmZmVyW2J1ZnArK10gPSAqc3RyOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgYnVmZmVyW2J1ZnArK10gPSAqc3RyOworCQl9CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlidWZmZXJbYnVmcCsrXSA9ICpzdHI7CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIGlmIChjaCA9PSAxMjgpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCSAgICBidWZmZXJbYnVmcCsrXSA9ICcwJzsKKwl9IGVsc2UgaWYgKGNoID09ICdcMDMzJykgeworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ0UnOworCX0gZWxzZSBpZiAoY2ggPT0gJ1xcJyAmJiB0aWNfZm9ybWF0ICYmIChzdHIgPT0gc3JjcCB8fCBzdHJbLTFdICE9ICdeJykpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJfSBlbHNlIGlmIChjaCA9PSAnICcgJiYgdGljX2Zvcm1hdCAmJiAoc3RyID09IHNyY3AgfHwKKwkJCQkJICAgICAgIHRyYWlsaW5nX3NwYWNlcyhzdHIpKSkgeworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ3MnOworCX0gZWxzZSBpZiAoKGNoID09ICcsJyB8fCBjaCA9PSAnOicgfHwgY2ggPT0gJ14nKSAmJiB0aWNfZm9ybWF0KSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAoY2hhcikgY2g7CisJfSBlbHNlIGlmIChSRUFMUFJJTlQoc3RyKQorCQkgICAmJiAoY2ggIT0gJywnCisJCSAgICAgICAmJiBjaCAhPSAnOicKKwkJICAgICAgICYmICEoY2ggPT0gJyEnICYmICF0aWNfZm9ybWF0KQorCQkgICAgICAgJiYgY2ggIT0gJ14nKSkKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAoY2hhcikgY2g7CisjaWYgMAkJCQkvKiBGSVhNRTogdGhpcyB3b3VsZCBiZSBtb3JlIHJlYWRhYmxlIChpbiBmYWN0IHRoZSB3aG9sZSAnaXNsb25nJyBsb2dpYyBzaG91bGQgYmUgcmVtb3ZlZCkgKi8KKwllbHNlIGlmIChjaCA9PSAnXGInKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnYic7CisJfSBlbHNlIGlmIChjaCA9PSAnXGYnKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnZic7CisJfSBlbHNlIGlmIChjaCA9PSAnXHQnICYmIGlzbG9uZykgeworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ3QnOworCX0KKyNlbmRpZgorCWVsc2UgaWYgKGNoID09ICdccicgJiYgKGlzbG9uZyB8fCAoc3RybGVuKHNyY3ApID4gMiAmJiBzdHJbMV0gPT0gJ1wwJykpKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAncic7CisJfSBlbHNlIGlmIChjaCA9PSAnXG4nICYmIGlzbG9uZykgeworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ24nOworCX0KKyNkZWZpbmUgVW5DdGwoYykgKChjKSArICdAJykKKwllbHNlIGlmIChSRUFMQ1RMKHN0cikgJiYgY2ggIT0gJ1xcJworCQkgJiYgKCFpc2xvbmcgfHwgaXNkaWdpdChVQ2hhcihzdHJbMV0pKSkpIHsKKwkgICAgKHZvaWQpIHNwcmludGYoJmJ1ZmZlcltidWZwXSwgIl4lYyIsIFVuQ3RsKGNoKSk7CisJICAgIGJ1ZnAgKz0gMjsKKwl9IGVsc2UgeworCSAgICAodm9pZCkgc3ByaW50ZigmYnVmZmVyW2J1ZnBdLCAiXFwlMDNvIiwgY2gpOworCSAgICBidWZwICs9IDQ7CisJfQorCisJc3RyKys7CisgICAgfQorCisgICAgYnVmZmVyW2J1ZnBdID0gJ1wwJzsKKyAgICByZXR1cm4gKGJ1ZmZlcik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2NvbXBfaGFzaC5jIGIvbmN1cnNlcy90aW5mby9jb21wX2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZiZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9jb21wX2hhc2guYwpAQCAtMCwwICsxLDM3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJY29tcF9oYXNoLmMgLS0tIFJvdXRpbmVzIHRvIGRlYWwgd2l0aCB0aGUgaGFzaHRhYmxlIG9mIGNhcGFiaWxpdHkKKyAqCQkJbmFtZXMuCisgKgorICovCisKKyNkZWZpbmUgVVNFX1RFUk1MSUIgMQorI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDxoYXNoc2l6ZS5oPgorCisjaWZkZWYgTUFJTl9QUk9HUkFNCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyN1bmRlZiAgREVCVUcKKyNkZWZpbmUgREVCVUcobGV2ZWwsIHBhcmFtcykJLypub3RoaW5nICovCisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IGNvbXBfaGFzaC5jLHYgMS4zNiAyMDA4LzA4LzE2IDE3OjA2OjUzIHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQgaGFzaF9mdW5jdGlvbihjb25zdCBjaGFyICopOworCisvKgorICoJX25jX21ha2VfaGFzaF90YWJsZSgpCisgKgorICoJVGFrZXMgdGhlIGVudHJpZXMgaW4gdGFibGVbXSBhbmQgaGFzaGVzIHRoZW0gaW50byBoYXNoX3RhYmxlW10KKyAqCWJ5IG5hbWUuICBUaGVyZSBhcmUgQ0FQVEFCU0laRSBlbnRyaWVzIGluIHRhYmxlW10gYW5kIEhBU0hUQUJTSVpFCisgKglzbG90cyBpbiBoYXNoX3RhYmxlW10uCisgKgorICovCisKKyNpZmRlZiBNQUlOX1BST0dSQU0KKworI3VuZGVmIE1PRFVMRV9JRAorI2RlZmluZSBNT0RVTEVfSUQoaWQpCQkvKm5vdGhpbmcgKi8KKyNpbmNsdWRlIDx0aW5mby9kb2FsbG9jLmM+CisKK3N0YXRpYyB2b2lkCitfbmNfbWFrZV9oYXNoX3RhYmxlKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICp0YWJsZSwKKwkJICAgIHNob3J0ICpoYXNoX3RhYmxlKQoreworICAgIHNob3J0IGk7CisgICAgaW50IGhhc2h2YWx1ZTsKKyAgICBpbnQgY29sbGlzaW9ucyA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgSEFTSFRBQlNJWkU7IGkrKykgeworCWhhc2hfdGFibGVbaV0gPSAtMTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IENBUFRBQlNJWkU7IGkrKykgeworCWhhc2h2YWx1ZSA9IGhhc2hfZnVuY3Rpb24odGFibGVbaV0ubnRlX25hbWUpOworCisJaWYgKGhhc2hfdGFibGVbaGFzaHZhbHVlXSA+PSAwKQorCSAgICBjb2xsaXNpb25zKys7CisKKwlpZiAoaGFzaF90YWJsZVtoYXNodmFsdWVdICE9IDApCisJICAgIHRhYmxlW2ldLm50ZV9saW5rID0gaGFzaF90YWJsZVtoYXNodmFsdWVdOworCWhhc2hfdGFibGVbaGFzaHZhbHVlXSA9IGk7CisgICAgfQorCisgICAgREVCVUcoNCwgKCJIYXNoIHRhYmxlIGNvbXBsZXRlOiAlZCBjb2xsaXNpb25zIG91dCBvZiAlZCBlbnRyaWVzIiwKKwkgICAgICBjb2xsaXNpb25zLCBDQVBUQUJTSVpFKSk7Cit9CisjZW5kaWYKKworLyoKKyAqCWludCBoYXNoX2Z1bmN0aW9uKHN0cmluZykKKyAqCisgKglDb21wdXRlcyB0aGUgaGFzaGluZyBmdW5jdGlvbiBvbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqCVRoZSBjdXJyZW50IGhhc2ggZnVuY3Rpb24gaXMgdGhlIHN1bSBvZiBlYWNoIGNvbnNlY3R1dGl2ZSBwYWlyCisgKglvZiBjaGFyYWN0ZXJzLCB0YWtlbiBhcyB0d28tYnl0ZSBpbnRlZ2VycywgbW9kIEhBU0hUQUJTSVpFLgorICoKKyAqLworCitzdGF0aWMgaW50CitoYXNoX2Z1bmN0aW9uKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICBsb25nIHN1bSA9IDA7CisKKyAgICBERUJVRyg5LCAoImhhc2hpbmcgJXMiLCBzdHJpbmcpKTsKKyAgICB3aGlsZSAoKnN0cmluZykgeworCXN1bSArPSAobG9uZykgKCpzdHJpbmcgKyAoKihzdHJpbmcgKyAxKSA8PCA4KSk7CisJc3RyaW5nKys7CisgICAgfQorCisgICAgREVCVUcoOSwgKCJzdW0gaXMgJWxkIiwgc3VtKSk7CisgICAgcmV0dXJuIChpbnQpIChzdW0gJSBIQVNIVEFCU0laRSk7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqCisgKglmaW5kX2VudHJ5KHN0cmluZykKKyAqCisgKglGaW5kcyB0aGUgZW50cnkgZm9yIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUgaWYgcHJlc2VudC4KKyAqCVJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbnRyeSBpbiB0aGUgdGFibGUgb3IgMCBpZiBub3QgZm91bmQuCisgKgorICovCisKKyNpZm5kZWYgTUFJTl9QUk9HUkFNCitOQ1VSU0VTX0VYUE9SVChzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKQorX25jX2ZpbmRfZW50cnkoY29uc3QgY2hhciAqc3RyaW5nLAorCSAgICAgICBjb25zdCBzaG9ydCAqaGFzaF90YWJsZSkKK3sKKyAgICBpbnQgaGFzaHZhbHVlOworICAgIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpwdHIgPSAwOworICAgIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpyZWFsX3RhYmxlOworCisgICAgaGFzaHZhbHVlID0gaGFzaF9mdW5jdGlvbihzdHJpbmcpOworCisgICAgaWYgKGhhc2hfdGFibGVbaGFzaHZhbHVlXSA+PSAwKSB7CisJcmVhbF90YWJsZSA9IF9uY19nZXRfdGFibGUoaGFzaF90YWJsZSAhPSBfbmNfZ2V0X2hhc2hfdGFibGUoRkFMU0UpKTsKKwlwdHIgPSByZWFsX3RhYmxlICsgaGFzaF90YWJsZVtoYXNodmFsdWVdOworCXdoaWxlIChzdHJjbXAocHRyLT5udGVfbmFtZSwgc3RyaW5nKSAhPSAwKSB7CisJICAgIGlmIChwdHItPm50ZV9saW5rIDwgMCkKKwkJcmV0dXJuIDA7CisJICAgIHB0ciA9IHJlYWxfdGFibGUgKyAocHRyLT5udGVfbGluayArIGhhc2hfdGFibGVbSEFTSFRBQlNJWkVdKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChwdHIpOworfQorCisvKgorICoJc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKgorICoJZmluZF90eXBlX2VudHJ5KHN0cmluZywgdHlwZSwgdGFibGUpCisgKgorICoJRmluZHMgdGhlIGZpcnN0IGVudHJ5IGZvciB0aGUgZ2l2ZW4gbmFtZSB3aXRoIHRoZSBnaXZlbiB0eXBlIGluIHRoZQorICoJZ2l2ZW4gdGFibGUgaWYgcHJlc2VudCAoYXMgZGlzdGluY3QgZnJvbSBmaW5kX2VudHJ5LCB3aGljaCBmaW5kcyB0aGUKKyAqCXRoZSBsYXN0IGVudHJ5IHJlZ2FyZGxlc3Mgb2YgdHlwZSkuICBZb3UgY2FuIHVzZSB0aGlzIGlmIHlvdSBkZXRlY3QKKyAqCWEgbmFtZSBjbGFzaC4gIEl0J3Mgc2xvd2VyLCB0aG91Z2guICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW50cnkKKyAqCWluIHRoZSB0YWJsZSBvciAwIGlmIG5vdCBmb3VuZC4KKyAqLworCitOQ1VSU0VTX0VYUE9SVChzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKQorX25jX2ZpbmRfdHlwZV9lbnRyeShjb25zdCBjaGFyICpzdHJpbmcsCisJCSAgICBpbnQgdHlwZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICp0YWJsZSkKK3sKKyAgICBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqcHRyOworCisgICAgZm9yIChwdHIgPSB0YWJsZTsgcHRyIDwgdGFibGUgKyBDQVBUQUJTSVpFOyBwdHIrKykgeworCWlmIChwdHItPm50ZV90eXBlID09IHR5cGUgJiYgc3RyY21wKHN0cmluZywgcHRyLT5udGVfbmFtZSkgPT0gMCkKKwkgICAgcmV0dXJuIChwdHIpOworICAgIH0KKworICAgIHJldHVybiAoKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICopIE5VTEwpOworfQorI2VuZGlmCisKKyNpZmRlZiBNQUlOX1BST0dSQU0KKy8qCisgKiBUaGlzIGZpbHRlciByZWFkcyBmcm9tIHN0YW5kYXJkIGlucHV0IGEgbGlzdCBvZiB0YWItZGVsaW1pdGVkIGNvbHVtbnMsCisgKiAoZS5nLiwgZnJvbSBDYXBzLmZpbHRlcmVkKSBjb21wdXRlcyB0aGUgaGFzaC12YWx1ZSBvZiBhIHNwZWNpZmllZCBjb2x1bW4gYW5kCisgKiB3cml0ZXMgdGhlIGhhc2hlZCB0YWJsZXMgdG8gc3RhbmRhcmQgb3V0cHV0LgorICoKKyAqIEJ5IGNvbXBpbGluZyB0aGUgaGFzaCB0YWJsZSBhdCBidWlsZCB0aW1lLCB3ZSdyZSBhYmxlIHRvIG1ha2UgdGhlIGVudGlyZQorICogc2V0IG9mIHRlcm1pbmZvIGFuZCB0ZXJtY2FwIHRhYmxlcyByZWFkb25seSAoYW5kIGFsc28gcHJvdmlkZSBzb21lIHJ1bnRpbWUKKyAqIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50KS4KKyAqLworCisjZGVmaW5lIE1BWF9DT0xVTU5TIEJVRlNJWgkvKiB0aGlzIF9oYXNfIHRvIGJlIHdvcnN0LWNhc2UgKi8KKworc3RhdGljIGNoYXIgKioKK3BhcnNlX2NvbHVtbnMoY2hhciAqYnVmZmVyKQoreworICAgIHN0YXRpYyBjaGFyICoqbGlzdDsKKworICAgIGludCBjb2wgPSAwOworCisgICAgaWYgKGxpc3QgPT0gMCAmJiAobGlzdCA9IHR5cGVDYWxsb2MoY2hhciAqLCBNQVhfQ09MVU1OUykpID09IDApCisJICByZXR1cm4gKDApOworCisgICAgaWYgKCpidWZmZXIgIT0gJyMnKSB7CisJd2hpbGUgKCpidWZmZXIgIT0gJ1wwJykgeworCSAgICBjaGFyICpzOworCSAgICBmb3IgKHMgPSBidWZmZXI7ICgqcyAhPSAnXDAnKSAmJiAhaXNzcGFjZShVQ2hhcigqcykpOyBzKyspCisJCS8qRU1QVFkgKi8gOworCSAgICBpZiAocyAhPSBidWZmZXIpIHsKKwkJY2hhciBtYXJrID0gKnM7CisJCSpzID0gJ1wwJzsKKwkJaWYgKChzIC0gYnVmZmVyKSA+IDEKKwkJICAgICYmICgqYnVmZmVyID09ICciJykKKwkJICAgICYmIChzWy0xXSA9PSAnIicpKSB7CS8qIHN0cmlwIHRoZSBxdW90ZXMgKi8KKwkJICAgIGFzc2VydChzID4gYnVmZmVyICsgMSk7CisJCSAgICBzWy0xXSA9ICdcMCc7CisJCSAgICBidWZmZXIrKzsKKwkJfQorCQlsaXN0W2NvbF0gPSBidWZmZXI7CisJCWNvbCsrOworCQlpZiAobWFyayA9PSAnXDAnKQorCQkgICAgYnJlYWs7CisJCXdoaWxlICgqKytzICYmIGlzc3BhY2UoVUNoYXIoKnMpKSkKKwkJICAgIC8qRU1QVFkgKi8gOworCQlidWZmZXIgPSBzOworCSAgICB9IGVsc2UKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gY29sID8gbGlzdCA6IDA7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKm5hbWVfdGFibGUgPSB0eXBlQ2FsbG9jKHN0cnVjdAorCQkJCQkJICAgICBuYW1lX3RhYmxlX2VudHJ5LCBDQVBUQUJTSVpFKTsKKyAgICBzaG9ydCAqaGFzaF90YWJsZSA9IHR5cGVDYWxsb2Moc2hvcnQsIEhBU0hUQUJTSVpFKTsKKyAgICBjb25zdCBjaGFyICpyb290X25hbWUgPSAiIjsKKyAgICBpbnQgY29sdW1uID0gMDsKKyAgICBpbnQgYmlnc3RyaW5nID0gMDsKKyAgICBpbnQgbjsKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVuYW1lc1tdID0KKyAgICB7IkJPT0xFQU4iLCAiTlVNQkVSIiwgIlNUUklORyJ9OworCisgICAgc2hvcnQgQm9vbENvdW50ID0gMDsKKyAgICBzaG9ydCBOdW1Db3VudCA9IDA7CisgICAgc2hvcnQgU3RyQ291bnQgPSAwOworCisgICAgLyogVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb2x1bW4tbnVtYmVyIChzdGFydGluZyB3aXRoIDApLgorICAgICAqIFRoZSBzZWNvbmQgaXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUgdGFibGVzIHRvIGdlbmVyYXRlLgorICAgICAqLworICAgIGlmIChhcmdjIDw9IDMKKwl8fCAoY29sdW1uID0gYXRvaShhcmd2WzFdKSkgPD0gMAorCXx8IChjb2x1bW4gPj0gTUFYX0NPTFVNTlMpCisJfHwgKihyb290X25hbWUgPSBhcmd2WzJdKSA9PSAwCisJfHwgKGJpZ3N0cmluZyA9IGF0b2koYXJndlszXSkpIDwgMAorCXx8IG5hbWVfdGFibGUgPT0gMAorCXx8IGhhc2hfdGFibGUgPT0gMCkgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IG1ha2VfaGFzaCBjb2x1bW4gcm9vdF9uYW1lIGJpZ3N0cmluZ1xuIik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCB0aGUgdGFibGUgaW50byBvdXIgYXJyYXlzLgorICAgICAqLworICAgIGZvciAobiA9IDA7IChuIDwgQ0FQVEFCU0laRSkgJiYgZmdldHMoYnVmZmVyLCBCVUZTSVosIHN0ZGluKTspIHsKKwljaGFyICoqbGlzdCwgKm5scCA9IHN0cmNocihidWZmZXIsICdcbicpOworCWlmIChubHApCisJICAgICpubHAgPSAnXDAnOworCWxpc3QgPSBwYXJzZV9jb2x1bW5zKGJ1ZmZlcik7CisJaWYgKGxpc3QgPT0gMCkJCS8qIGJsYW5rIG9yIGNvbW1lbnQgKi8KKwkgICAgY29udGludWU7CisJbmFtZV90YWJsZVtuXS5udGVfbGluayA9IC0xOwkvKiBlbmQtb2YtaGFzaCAqLworCW5hbWVfdGFibGVbbl0ubnRlX25hbWUgPSBzdHJkdXAobGlzdFtjb2x1bW5dKTsKKwlpZiAoIXN0cmNtcChsaXN0WzJdLCAiYm9vbCIpKSB7CisJICAgIG5hbWVfdGFibGVbbl0ubnRlX3R5cGUgPSBCT09MRUFOOworCSAgICBuYW1lX3RhYmxlW25dLm50ZV9pbmRleCA9IEJvb2xDb3VudCsrOworCX0gZWxzZSBpZiAoIXN0cmNtcChsaXN0WzJdLCAibnVtIikpIHsKKwkgICAgbmFtZV90YWJsZVtuXS5udGVfdHlwZSA9IE5VTUJFUjsKKwkgICAgbmFtZV90YWJsZVtuXS5udGVfaW5kZXggPSBOdW1Db3VudCsrOworCX0gZWxzZSBpZiAoIXN0cmNtcChsaXN0WzJdLCAic3RyIikpIHsKKwkgICAgbmFtZV90YWJsZVtuXS5udGVfdHlwZSA9IFNUUklORzsKKwkgICAgbmFtZV90YWJsZVtuXS5udGVfaW5kZXggPSBTdHJDb3VudCsrOworCX0gZWxzZSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biB0eXBlOiAlc1xuIiwgbGlzdFsyXSk7CisJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJbisrOworICAgIH0KKyAgICBfbmNfbWFrZV9oYXNoX3RhYmxlKG5hbWVfdGFibGUsIGhhc2hfdGFibGUpOworCisgICAgLyoKKyAgICAgKiBXcml0ZSB0aGUgY29tcGlsZWQgdGFibGVzIHRvIHN0YW5kYXJkIG91dHB1dAorICAgICAqLworICAgIGlmIChiaWdzdHJpbmcpIHsKKwlpbnQgbGVuID0gMDsKKwlpbnQgbnh0OworCisJcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciAlc19uYW1lc190ZXh0W10gPSBcXFxuIiwgcm9vdF9uYW1lKTsKKwlmb3IgKG4gPSAwOyBuIDwgQ0FQVEFCU0laRTsgbisrKSB7CisJICAgIG54dCA9IChpbnQpIHN0cmxlbihuYW1lX3RhYmxlW25dLm50ZV9uYW1lKSArIDU7CisJICAgIGlmIChueHQgKyBsZW4gPiA3MikgeworCQlwcmludGYoIlxcXG4iKTsKKwkJbGVuID0gMDsKKwkgICAgfQorCSAgICBwcmludGYoIlwiJXNcXDBcIiAiLCBuYW1lX3RhYmxlW25dLm50ZV9uYW1lKTsKKwkgICAgbGVuICs9IG54dDsKKwl9CisJcHJpbnRmKCI7XG5cbiIpOworCisJbGVuID0gMDsKKwlwcmludGYoInN0YXRpYyBuYW1lX3RhYmxlX2RhdGEgY29uc3QgJXNfbmFtZXNfZGF0YVtdID1cbiIsCisJICAgICAgIHJvb3RfbmFtZSk7CisJcHJpbnRmKCJ7XG4iKTsKKwlmb3IgKG4gPSAwOyBuIDwgQ0FQVEFCU0laRTsgbisrKSB7CisJICAgIHByaW50ZigiXHR7ICUxNWQsXHQlMTBzLFx0JTNkLCAlM2QgfSVjXG4iLAorCQkgICBsZW4sCisJCSAgIHR5cGVuYW1lc1tuYW1lX3RhYmxlW25dLm50ZV90eXBlXSwKKwkJICAgbmFtZV90YWJsZVtuXS5udGVfaW5kZXgsCisJCSAgIG5hbWVfdGFibGVbbl0ubnRlX2xpbmssCisJCSAgIG4gPCBDQVBUQUJTSVpFIC0gMSA/ICcsJyA6ICcgJyk7CisJICAgIGxlbiArPSAoaW50KSBzdHJsZW4obmFtZV90YWJsZVtuXS5udGVfbmFtZSkgKyAxOworCX0KKwlwcmludGYoIn07XG5cbiIpOworCXByaW50Zigic3RhdGljIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICpfbmNfJXNfdGFibGUgPSAwO1xuXG4iLCByb290X25hbWUpOworICAgIH0gZWxzZSB7CisKKwlwcmludGYoInN0YXRpYyBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAlcyBfbmNfJXNfdGFibGVbXSA9XG4iLAorCSAgICAgICBiaWdzdHJpbmcgPyAiIiA6ICJjb25zdCIsCisJICAgICAgIHJvb3RfbmFtZSk7CisJcHJpbnRmKCJ7XG4iKTsKKwlmb3IgKG4gPSAwOyBuIDwgQ0FQVEFCU0laRTsgbisrKSB7CisJICAgIHNwcmludGYoYnVmZmVyLCAiXCIlc1wiIiwKKwkJICAgIG5hbWVfdGFibGVbbl0ubnRlX25hbWUpOworCSAgICBwcmludGYoIlx0eyAlMTVzLFx0JTEwcyxcdCUzZCwgJTNkIH0lY1xuIiwKKwkJICAgYnVmZmVyLAorCQkgICB0eXBlbmFtZXNbbmFtZV90YWJsZVtuXS5udGVfdHlwZV0sCisJCSAgIG5hbWVfdGFibGVbbl0ubnRlX2luZGV4LAorCQkgICBuYW1lX3RhYmxlW25dLm50ZV9saW5rLAorCQkgICBuIDwgQ0FQVEFCU0laRSAtIDEgPyAnLCcgOiAnICcpOworCX0KKwlwcmludGYoIn07XG5cbiIpOworICAgIH0KKworICAgIHByaW50Zigic3RhdGljIGNvbnN0IHNob3J0IF9uY18lc19oYXNoX3RhYmxlWyVkXSA9XG4iLAorCSAgIHJvb3RfbmFtZSwKKwkgICBIQVNIVEFCU0laRSArIDEpOworICAgIHByaW50Zigie1xuIik7CisgICAgZm9yIChuID0gMDsgbiA8IEhBU0hUQUJTSVpFOyBuKyspIHsKKwlwcmludGYoIlx0JTNkLFxuIiwgaGFzaF90YWJsZVtuXSk7CisgICAgfQorICAgIHByaW50ZigiXHQwXHQvKiBiYXNlLW9mLXRhYmxlICovXG4iKTsKKyAgICBwcmludGYoIn07XG5cbiIpOworCisgICAgcHJpbnRmKCIjaWYgKEJPT0xDT1VOVCE9JWQpfHwoTlVNQ09VTlQhPSVkKXx8KFNUUkNPVU5UIT0lZClcbiIsCisJICAgQm9vbENvdW50LCBOdW1Db3VudCwgU3RyQ291bnQpOworICAgIHByaW50ZigiI2Vycm9yXHQtLT4gdGVybS5oIGFuZCBjb21wX2NhcHRhYi5jIGRpc2FncmVlIGFib3V0IHRoZSA8LS1cbiIpOworICAgIHByaW50ZigiI2Vycm9yXHQtLT4gbnVtYmVycyBvZiBib29sZWFucywgbnVtYmVycyBhbmQvb3Igc3RyaW5ncyA8LS1cbiIpOworICAgIHByaW50ZigiI2VuZGlmXG5cbiIpOworCisgICAgZnJlZShoYXNoX3RhYmxlKTsKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2NvbXBfcGFyc2UuYyBiL25jdXJzZXMvdGluZm8vY29tcF9wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjVhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2NvbXBfcGFyc2UuYwpAQCAtMCwwICsxLDQ5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJY29tcF9wYXJzZS5jIC0tIHBhcnNlciBkcml2ZXIgbG9vcCBhbmQgdXNlIGhhbmRsaW5nLgorICoKKyAqCV9uY19yZWFkX2VudHJ5X3NvdXJjZShGSUxFICosIGxpdGVyYWwsIGJvb2wsIGJvb2wgKCpob29rKSgpKQorICoJX25jX3Jlc29sdmVfdXNlczIodm9pZCkKKyAqCV9uY19mcmVlX2VudHJpZXModm9pZCkKKyAqCisgKglVc2UgdGhpcyBjb2RlIGJ5IGNhbGxpbmcgX25jX3JlYWRfZW50cnlfc291cmNlKCkgb24gYXMgbWFueSBzb3VyY2UKKyAqCWZpbGVzIGFzIHlvdSBsaWtlIChlaXRoZXIgdGVybWluZm8gb3IgdGVybWNhcCBzeW50YXgpLiAgSWYgeW91CisgKgl3YW50IHVzZS1yZXNvbHV0aW9uLCBjYWxsIF9uY19yZXNvbHZlX3VzZXMyKCkuICBUbyBmcmVlIHRoZSBsaXN0CisgKglzdG9yYWdlLCBkbyBfbmNfZnJlZV9lbnRyaWVzKCkuCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGNvbXBfcGFyc2UuYyx2IDEuNjkgMjAwOC8wOC8xNiAyMTo1ODoxNiB0b20gRXhwICQiKQorCitzdGF0aWMgdm9pZCBzYW5pdHlfY2hlY2syKFRFUk1UWVBFICosIGJvb2wpOworTkNVUlNFU19JTVBFWFAgdm9pZCBOQ1VSU0VTX0FQSSgqX25jX2NoZWNrX3Rlcm10eXBlMikgKFRFUk1UWVBFICosIGJvb2wpID0gc2FuaXR5X2NoZWNrMjsKKworLyogb2Jzb2xldGU6IDIwMDQwNzA1ICovCitzdGF0aWMgdm9pZCBzYW5pdHlfY2hlY2soVEVSTVRZUEUgKik7CitOQ1VSU0VTX0lNUEVYUCB2b2lkIE5DVVJTRVNfQVBJKCpfbmNfY2hlY2tfdGVybXR5cGUpIChURVJNVFlQRSAqKSA9IHNhbml0eV9jaGVjazsKKworc3RhdGljIHZvaWQKK2VucXVldWUoRU5UUlkgKiBlcCkKKy8qIGFkZCBhbiBlbnRyeSB0byB0aGUgaW4tY29yZSBsaXN0ICovCit7CisgICAgRU5UUlkgKm5ld3AgPSBfbmNfY29weV9lbnRyeShlcCk7CisKKyAgICBpZiAobmV3cCA9PSAwKQorCV9uY19lcnJfYWJvcnQoTVNHX05PX01FTU9SWSk7CisKKyAgICBuZXdwLT5sYXN0ID0gX25jX3RhaWw7CisgICAgX25jX3RhaWwgPSBuZXdwOworCisgICAgbmV3cC0+bmV4dCA9IDA7CisgICAgaWYgKG5ld3AtPmxhc3QpCisJbmV3cC0+bGFzdC0+bmV4dCA9IG5ld3A7Cit9CisKK3N0YXRpYyBjaGFyICoKK2ZvcmNlX2JhcihjaGFyICpkc3QsIGNoYXIgKnNyYykKK3sKKyAgICBpZiAoc3RyY2hyKHNyYywgJ3wnKSA9PSAwKSB7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzcmMpOworCWlmIChsZW4gPiBNQVhfTkFNRV9TSVpFKQorCSAgICBsZW4gPSBNQVhfTkFNRV9TSVpFOworCSh2b2lkKSBzdHJuY3B5KGRzdCwgc3JjLCBsZW4pOworCSh2b2lkKSBzdHJjcHkoZHN0ICsgbGVuLCAifCIpOworCXNyYyA9IGRzdDsKKyAgICB9CisgICAgcmV0dXJuIHNyYzsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19lbnRyeV9tYXRjaChjaGFyICpuMSwgY2hhciAqbjIpCisvKiBkbyBhbnkgb2YgdGhlIGFsaWFzZXMgaW4gYSBwYWlyIG9mIHRlcm1pbmFsIG5hbWVzIG1hdGNoPyAqLworeworICAgIGNoYXIgKnBzdGFydCwgKnFzdGFydCwgKnBlbmQsICpxZW5kOworICAgIGNoYXIgbmMxW01BWF9OQU1FX1NJWkUgKyAyXSwgbmMyW01BWF9OQU1FX1NJWkUgKyAyXTsKKworICAgIG4xID0gZm9yY2VfYmFyKG5jMSwgbjEpOworICAgIG4yID0gZm9yY2VfYmFyKG5jMiwgbjIpOworCisgICAgZm9yIChwc3RhcnQgPSBuMTsgKHBlbmQgPSBzdHJjaHIocHN0YXJ0LCAnfCcpKTsgcHN0YXJ0ID0gcGVuZCArIDEpCisJZm9yIChxc3RhcnQgPSBuMjsgKHFlbmQgPSBzdHJjaHIocXN0YXJ0LCAnfCcpKTsgcXN0YXJ0ID0gcWVuZCArIDEpCisJICAgIGlmICgocGVuZCAtIHBzdGFydCA9PSBxZW5kIC0gcXN0YXJ0KQorCQkmJiBtZW1jbXAocHN0YXJ0LCBxc3RhcnQsIChzaXplX3QpIChwZW5kIC0gcHN0YXJ0KSkgPT0gMCkKKwkJcmV0dXJuIChUUlVFKTsKKworICAgIHJldHVybiAoRkFMU0UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEVudHJ5IGNvbXBpbGVyIGFuZCByZXNvbHV0aW9uIGxvZ2ljCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfcmVhZF9lbnRyeV9zb3VyY2UoRklMRSAqZnAsIGNoYXIgKmJ1ZiwKKwkJICAgICAgaW50IGxpdGVyYWwsIGJvb2wgc2lsZW50LAorCQkgICAgICBib29sKCpob29rKSAoRU5UUlkgKikpCisvKiBzbHVycCBhbGwgZW50cmllcyBpbiB0aGUgZ2l2ZW4gZmlsZSBpbnRvIGNvcmUgKi8KK3sKKyAgICBFTlRSWSB0aGlzZW50cnk7CisgICAgYm9vbCBvbGRzdXBwcmVzcyA9IF9uY19zdXBwcmVzc193YXJuaW5nczsKKyAgICBpbnQgaW1tZWRpYXRlID0gMDsKKworICAgIGlmIChzaWxlbnQpCisJX25jX3N1cHByZXNzX3dhcm5pbmdzID0gVFJVRTsJLyogc2h1dCB0aGUgbGV4ZXIgdXAsIHRvbyAqLworCisgICAgX25jX3Jlc2V0X2lucHV0KGZwLCBidWYpOworICAgIGZvciAoOzspIHsKKwltZW1zZXQoJnRoaXNlbnRyeSwgMCwgc2l6ZW9mKHRoaXNlbnRyeSkpOworCWlmIChfbmNfcGFyc2VfZW50cnkoJnRoaXNlbnRyeSwgbGl0ZXJhbCwgc2lsZW50KSA9PSBFUlIpCisJICAgIGJyZWFrOworCWlmICghaXNhbG51bShVQ2hhcih0aGlzZW50cnkudHRlcm0udGVybV9uYW1lc1swXSkpKQorCSAgICBfbmNfZXJyX2Fib3J0KCJ0ZXJtaW5hbCBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggbGV0dGVyIG9yIGRpZ2l0Iik7CisKKwkvKgorCSAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGltbWVkaWF0ZSBjb21waWxhdGlvbiBvZiBlbnRyaWVzIHdpdGggbm8gInVzZT0iCisJICogcmVmZXJlbmNlcyB0byBkaXNrLiAgVGhhdCBhdm9pZHMgY29uc3VtaW5nIGEgbG90IG9mIG1lbW9yeSB3aGVuIHRoZQorCSAqIHJlc29sdXRpb24gY29kZSBjb3VsZCBmZXRjaCBlbnRyaWVzIG9mZiBkaXNrLgorCSAqLworCWlmIChob29rICE9IE5VTExIT09LICYmICgqaG9vaykgKCZ0aGlzZW50cnkpKSB7CisJICAgIGltbWVkaWF0ZSsrOworCX0gZWxzZSB7CisJICAgIGVucXVldWUoJnRoaXNlbnRyeSk7CisJICAgIC8qCisJICAgICAqIFRoZSBlbnF1ZXVlZCBlbnRyeSBpcyBjb3BpZWQgd2l0aCBfbmNfY29weV90ZXJtdHlwZSgpLCBzbyB3ZSBjYW4KKwkgICAgICogZnJlZSBzb21lIG9mIHRoZSBkYXRhIGZyb20gdGhpc2VudHJ5LCBpLmUuLCB0aGUgYXJyYXlzLgorCSAgICAgKi8KKwkgICAgRnJlZUlmTmVlZGVkKHRoaXNlbnRyeS50dGVybS5Cb29sZWFucyk7CisJICAgIEZyZWVJZk5lZWRlZCh0aGlzZW50cnkudHRlcm0uTnVtYmVycyk7CisJICAgIEZyZWVJZk5lZWRlZCh0aGlzZW50cnkudHRlcm0uU3RyaW5ncyk7CisjaWYgTkNVUlNFU19YTkFNRVMKKwkgICAgRnJlZUlmTmVlZGVkKHRoaXNlbnRyeS50dGVybS5leHRfTmFtZXMpOworI2VuZGlmCisJfQorICAgIH0KKworICAgIGlmIChfbmNfdGFpbCkgeworCS8qIHNldCB1cCB0aGUgaGVhZCBwb2ludGVyICovCisJZm9yIChfbmNfaGVhZCA9IF9uY190YWlsOyBfbmNfaGVhZC0+bGFzdDsgX25jX2hlYWQgPSBfbmNfaGVhZC0+bGFzdCkKKwkgICAgY29udGludWU7CisKKwlERUJVRygxLCAoImhlYWQgPSAlcyIsIF9uY19oZWFkLT50dGVybS50ZXJtX25hbWVzKSk7CisJREVCVUcoMSwgKCJ0YWlsID0gJXMiLCBfbmNfdGFpbC0+dHRlcm0udGVybV9uYW1lcykpOworICAgIH0KKyNpZmRlZiBUUkFDRQorICAgIGVsc2UgaWYgKCFpbW1lZGlhdGUpCisJREVCVUcoMSwgKCJubyBlbnRyaWVzIHBhcnNlZCIpKTsKKyNlbmRpZgorCisgICAgX25jX3N1cHByZXNzX3dhcm5pbmdzID0gb2xkc3VwcHJlc3M7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZXNvbHZlX3VzZXMyKGJvb2wgZnVsbHJlc29sdmUsIGJvb2wgbGl0ZXJhbCkKKy8qIHRyeSB0byByZXNvbHZlIGFsbCB1c2UgY2FwYWJpbGl0aWVzICovCit7CisgICAgRU5UUlkgKnFwLCAqcnAsICpsYXN0cmVhZCA9IDA7CisgICAgYm9vbCBrZWVwZ29pbmc7CisgICAgdW5zaWduZWQgaTsKKyAgICBpbnQgdW5yZXNvbHZlZCwgdG90YWxfdW5yZXNvbHZlZCwgbXVsdGlwbGVzOworCisgICAgREVCVUcoMiwgKCJSRVNPTFVUSU9OIEJFR0lOTklORyIpKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIG11bHRpcGxlIG9jY3VycmVuY2VzIG9mIHRoZSBzYW1lIG5hbWUuCisgICAgICovCisgICAgbXVsdGlwbGVzID0gMDsKKyAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCWludCBtYXRjaGNvdW50ID0gMDsKKworCWZvcl9lbnRyeV9saXN0KHJwKSB7CisJICAgIGlmIChxcCA+IHJwCisJCSYmIF9uY19lbnRyeV9tYXRjaChxcC0+dHRlcm0udGVybV9uYW1lcywgcnAtPnR0ZXJtLnRlcm1fbmFtZXMpKSB7CisJCW1hdGNoY291bnQrKzsKKwkJaWYgKG1hdGNoY291bnQgPT0gMSkgeworCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiTmFtZSBjb2xsaXNpb24gYmV0d2VlbiAlcyIsCisJCQkJICAgX25jX2ZpcnN0X25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwkJICAgIG11bHRpcGxlcysrOworCQl9CisJCWlmIChtYXRjaGNvdW50ID49IDEpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIgJXMiLCBfbmNfZmlyc3RfbmFtZShycC0+dHRlcm0udGVybV9uYW1lcykpOworCSAgICB9CisJfQorCWlmIChtYXRjaGNvdW50ID49IDEpCisJICAgICh2b2lkKSBwdXRjKCdcbicsIHN0ZGVycik7CisgICAgfQorICAgIGlmIChtdWx0aXBsZXMgPiAwKQorCXJldHVybiAoRkFMU0UpOworCisgICAgREVCVUcoMiwgKCJOTyBNVUxUSVBMRSBOQU1FIE9DQ1VSUkVOQ0VTIikpOworCisgICAgLyoKKyAgICAgKiBGaXJzdCByZXNvbHV0aW9uIHN0YWdlOiBjb21wdXRlIGxpbmsgcG9pbnRlcnMgY29ycmVzcG9uZGluZyB0byBuYW1lcy4KKyAgICAgKi8KKyAgICB0b3RhbF91bnJlc29sdmVkID0gMDsKKyAgICBfbmNfY3Vycl9jb2wgPSAtMTsKKyAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCXVucmVzb2x2ZWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBxcC0+bnVzZXM7IGkrKykgeworCSAgICBib29sIGZvdW5kaXQ7CisJICAgIGNoYXIgKmNoaWxkID0gX25jX2ZpcnN0X25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMpOworCSAgICBjaGFyICpsb29rZm9yID0gcXAtPnVzZXNbaV0ubmFtZTsKKwkgICAgbG9uZyBsb29rbGluZSA9IHFwLT51c2VzW2ldLmxpbmU7CisKKwkgICAgZm91bmRpdCA9IEZBTFNFOworCisJICAgIF9uY19zZXRfdHlwZShjaGlsZCk7CisKKwkgICAgLyogZmlyc3QsIHRyeSB0byByZXNvbHZlIGZyb20gaW4tY29yZSByZWNvcmRzICovCisJICAgIGZvcl9lbnRyeV9saXN0KHJwKSB7CisJCWlmIChycCAhPSBxcAorCQkgICAgJiYgX25jX25hbWVfbWF0Y2gocnAtPnR0ZXJtLnRlcm1fbmFtZXMsIGxvb2tmb3IsICJ8IikpIHsKKwkJICAgIERFQlVHKDIsICgiJXM6IHJlc29sdmluZyB1c2U9JXMgKGluIGNvcmUpIiwKKwkJCSAgICAgIGNoaWxkLCBsb29rZm9yKSk7CisKKwkJICAgIHFwLT51c2VzW2ldLmxpbmsgPSBycDsKKwkJICAgIGZvdW5kaXQgPSBUUlVFOworCQl9CisJICAgIH0KKworCSAgICAvKiBpZiB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgdG8gbWVyZ2UgaW4gYSBjb21waWxlZCBlbnRyeSAqLworCSAgICBpZiAoIWZvdW5kaXQpIHsKKwkJVEVSTVRZUEUgdGhpc3Rlcm07CisJCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCisJCW1lbXNldCgmdGhpc3Rlcm0sIDAsIHNpemVvZih0aGlzdGVybSkpOworCQlpZiAoX25jX3JlYWRfZW50cnkobG9va2ZvciwgZmlsZW5hbWUsICZ0aGlzdGVybSkgPT0gMSkgeworCQkgICAgREVCVUcoMiwgKCIlczogcmVzb2x2aW5nIHVzZT0lcyAoY29tcGlsZWQpIiwKKwkJCSAgICAgIGNoaWxkLCBsb29rZm9yKSk7CisKKwkJICAgIHJwID0gdHlwZU1hbGxvYyhFTlRSWSwgMSk7CisJCSAgICBpZiAocnAgPT0gMCkKKwkJCV9uY19lcnJfYWJvcnQoTVNHX05PX01FTU9SWSk7CisJCSAgICBycC0+dHRlcm0gPSB0aGlzdGVybTsKKwkJICAgIHJwLT5udXNlcyA9IDA7CisJCSAgICBycC0+bmV4dCA9IGxhc3RyZWFkOworCQkgICAgbGFzdHJlYWQgPSBycDsKKworCQkgICAgcXAtPnVzZXNbaV0ubGluayA9IHJwOworCQkgICAgZm91bmRpdCA9IFRSVUU7CisJCX0KKwkgICAgfQorCisJICAgIC8qIG5vIGdvb2QsIG1hcmsgdGhpcyBvbmUgdW5yZXNvbHZhYmxlIGFuZCBjb21wbGFpbiAqLworCSAgICBpZiAoIWZvdW5kaXQpIHsKKwkJdW5yZXNvbHZlZCsrOworCQl0b3RhbF91bnJlc29sdmVkKys7CisKKwkJX25jX2N1cnJfbGluZSA9IGxvb2tsaW5lOworCQlfbmNfd2FybmluZygicmVzb2x1dGlvbiBvZiB1c2U9JXMgZmFpbGVkIiwgbG9va2Zvcik7CisJCXFwLT51c2VzW2ldLmxpbmsgPSAwOworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAodG90YWxfdW5yZXNvbHZlZCkgeworCS8qIGZyZWUgZW50cmllcyByZWFkIGluIG9mZiBkaXNrICovCisJX25jX2ZyZWVfZW50cmllcyhsYXN0cmVhZCk7CisJcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgREVCVUcoMiwgKCJOQU1FIFJFU09MVVRJT04gQ09NUExFVEVEIE9LIikpOworCisgICAgLyoKKyAgICAgKiBPSywgYXQgdGhpcyBwb2ludCBhbGwgKGNoYXIgKikgcmVmZXJlbmNlcyBpbiBgbmFtZScgbWVtYmVycworICAgICAqIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgY29udmVydGVkIHRvIChFTlRSWSAqKSBwb2ludGVycyBpbgorICAgICAqIGBsaW5rJyBtZW1iZXJzLiAgVGltZSB0byBkbyB0aGUgYWN0dWFsIG1lcmdlcy4KKyAgICAgKi8KKyAgICBpZiAoZnVsbHJlc29sdmUpIHsKKwlkbyB7CisJICAgIFRFUk1UWVBFIG1lcmdlZDsKKworCSAgICBrZWVwZ29pbmcgPSBGQUxTRTsKKworCSAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCQlpZiAocXAtPm51c2VzID4gMCkgeworCQkgICAgREVCVUcoMiwgKCIlczogYXR0ZW1wdGluZyBtZXJnZSIsCisJCQkgICAgICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcykpKTsKKwkJICAgIC8qCisJCSAgICAgKiBJZiBhbnkgb2YgdGhlIHVzZSBlbnRyaWVzIHdlJ3JlIGxvb2tpbmcgZm9yIGlzCisJCSAgICAgKiBpbmNvbXBsZXRlLCBwdW50LiAgV2UnbGwgY2F0Y2ggdGhpcyBlbnRyeSBvbiBhCisJCSAgICAgKiBzdWJzZXF1ZW50IHBhc3MuCisJCSAgICAgKi8KKwkJICAgIGZvciAoaSA9IDA7IGkgPCBxcC0+bnVzZXM7IGkrKykKKwkJCWlmIChxcC0+dXNlc1tpXS5saW5rLT5udXNlcykgeworCQkJICAgIERFQlVHKDIsICgiJXM6IHVzZSBlbnRyeSAlZCB1bnJlc29sdmVkIiwKKwkJCQkgICAgICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcyksIGkpKTsKKwkJCSAgICBnb3RvIGluY29tcGxldGU7CisJCQl9CisKKwkJICAgIC8qCisJCSAgICAgKiBGaXJzdCwgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGdhcmJhZ2UgaW4gdGhlCisJCSAgICAgKiBtZXJnZSBibG9jay4gIEFzIGEgc2lkZSBlZmZlY3QsIGNvcHkgaW50bworCQkgICAgICogdGhlIG1lcmdlZCBlbnRyeSB0aGUgbmFtZSBmaWVsZCBhbmQgc3RyaW5nCisJCSAgICAgKiB0YWJsZSBwb2ludGVyLgorCQkgICAgICovCisJCSAgICBfbmNfY29weV90ZXJtdHlwZSgmbWVyZ2VkLCAmKHFwLT50dGVybSkpOworCisJCSAgICAvKgorCQkgICAgICogTm93IG1lcmdlIGluIGVhY2ggdXNlIGVudHJ5IGluIHRoZSBwcm9wZXIKKwkJICAgICAqIChyZXZlcnNlKSBvcmRlci4KKwkJICAgICAqLworCQkgICAgZm9yICg7IHFwLT5udXNlczsgcXAtPm51c2VzLS0pCisJCQlfbmNfbWVyZ2VfZW50cnkoJm1lcmdlZCwKKwkJCQkJJnFwLT51c2VzW3FwLT5udXNlcyAtIDFdLmxpbmstPnR0ZXJtKTsKKworCQkgICAgLyoKKwkJICAgICAqIE5vdyBtZXJnZSBpbiB0aGUgb3JpZ2luYWwgZW50cnkuCisJCSAgICAgKi8KKwkJICAgIF9uY19tZXJnZV9lbnRyeSgmbWVyZ2VkLCAmcXAtPnR0ZXJtKTsKKworCQkgICAgLyoKKwkJICAgICAqIFJlcGxhY2UgdGhlIG9yaWdpbmFsIGVudHJ5IHdpdGggdGhlIG1lcmdlZCBvbmUuCisJCSAgICAgKi8KKwkJICAgIEZyZWVJZk5lZWRlZChxcC0+dHRlcm0uQm9vbGVhbnMpOworCQkgICAgRnJlZUlmTmVlZGVkKHFwLT50dGVybS5OdW1iZXJzKTsKKwkJICAgIEZyZWVJZk5lZWRlZChxcC0+dHRlcm0uU3RyaW5ncyk7CisjaWYgTkNVUlNFU19YTkFNRVMKKwkJICAgIEZyZWVJZk5lZWRlZChxcC0+dHRlcm0uZXh0X05hbWVzKTsKKyNlbmRpZgorCQkgICAgcXAtPnR0ZXJtID0gbWVyZ2VkOworCQkgICAgX25jX3dyYXBfZW50cnkocXAsIFRSVUUpOworCisJCSAgICAvKgorCQkgICAgICogV2Uga25vdyBldmVyeSBlbnRyeSBpcyByZXNvbHZhYmxlIGJlY2F1c2UgbmFtZSByZXNvbHV0aW9uCisJCSAgICAgKiBkaWRuJ3QgYm9tYi4gIFNvIGdvIGJhY2sgZm9yIGFub3RoZXIgcGFzcy4KKwkJICAgICAqLworCQkgICAgLyogRkFMTFRIUlUgKi8KKwkJICBpbmNvbXBsZXRlOgorCQkgICAga2VlcGdvaW5nID0gVFJVRTsKKwkJfQorCSAgICB9CisJfSB3aGlsZQorCSAgICAoa2VlcGdvaW5nKTsKKworCURFQlVHKDIsICgiTUVSR0VTIENPTVBMRVRFRCBPSyIpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlJ2QgbGlrZSB0byBmcmVlIGVudHJpZXMgcmVhZCBpbiBvZmYgZGlzayBhdCB0aGlzIHBvaW50LCBidXQgY2FuJ3QuCisgICAgICogVGhlIG1lcmdlX2VudHJ5KCkgY29kZSBkb2Vzbid0IGNvcHkgdGhlIHN0cmluZ3MgaW4gdGhlIHVzZSBlbnRyaWVzLAorICAgICAqIGl0IGp1c3QgYWxpYXNlcyB0aGVtLiAgSWYgdGhpcyBldmVyIGNoYW5nZXMsIGRvIGEKKyAgICAgKiBmcmVlX2VudHJpZXMobGFzdHJlYWQpIGhlcmUuCisgICAgICovCisKKyAgICBERUJVRygyLCAoIlJFU09MVVRJT04gRklOSVNIRUQiKSk7CisKKyAgICBpZiAoZnVsbHJlc29sdmUpCisJaWYgKF9uY19jaGVja190ZXJtdHlwZSAhPSAwKSB7CisJICAgIF9uY19jdXJyX2NvbCA9IC0xOworCSAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCQlfbmNfY3Vycl9saW5lID0gcXAtPnN0YXJ0bGluZTsKKwkJX25jX3NldF90eXBlKF9uY19maXJzdF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSk7CisJCV9uY19jaGVja190ZXJtdHlwZTIoJnFwLT50dGVybSwgbGl0ZXJhbCk7CisJICAgIH0KKwkgICAgREVCVUcoMiwgKCJTQU5JVFkgQ0hFQ0sgRklOSVNIRUQiKSk7CisJfQorCisgICAgcmV0dXJuIChUUlVFKTsKK30KKworLyogb2Jzb2xldGU6IDIwMDQwNzA1ICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfcmVzb2x2ZV91c2VzKGJvb2wgZnVsbHJlc29sdmUpCit7CisgICAgcmV0dXJuIF9uY19yZXNvbHZlX3VzZXMyKGZ1bGxyZXNvbHZlLCBGQUxTRSk7Cit9CisKKy8qCisgKiBUaGlzIGJpdCBvZiBsZWdlcmRlbWFpbiB0dXJucyBhbGwgdGhlIHRlcm1pbmZvIHZhcmlhYmxlIG5hbWVzIGludG8KKyAqIHJlZmVyZW5jZXMgdG8gbG9jYXRpb25zIGluIHRoZSBhcnJheXMgQm9vbGVhbnMsIE51bWJlcnMsIGFuZCBTdHJpbmdzIC0tLQorICogcHJlY2lzZWx5IHdoYXQncyBuZWVkZWQuCisgKi8KKworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgdHAtPgorCitzdGF0aWMgdm9pZAorc2FuaXR5X2NoZWNrMihURVJNVFlQRSAqdHAsIGJvb2wgbGl0ZXJhbCkKK3sKKyAgICBpZiAoIVBSRVNFTlQoZXhpdF9hdHRyaWJ1dGVfbW9kZSkpIHsKKyNpZmRlZiBfX1VOVVNFRF9fCQkvKiB0aGlzIGNhc3RzIHRvbyB3aWRlIGEgbmV0ICovCisJYm9vbCB0ZXJtaW5hbF9lbnRyeSA9ICFzdHJjaHIodHAtPnRlcm1fbmFtZXMsICcrJyk7CisJaWYgKHRlcm1pbmFsX2VudHJ5ICYmCisJICAgIChQUkVTRU5UKHNldF9hdHRyaWJ1dGVzKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl9zdGFuZG91dF9tb2RlKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl91bmRlcmxpbmVfbW9kZSkKKwkgICAgIHx8IFBSRVNFTlQoZW50ZXJfYmxpbmtfbW9kZSkKKwkgICAgIHx8IFBSRVNFTlQoZW50ZXJfYm9sZF9tb2RlKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl9kaW1fbW9kZSkKKwkgICAgIHx8IFBSRVNFTlQoZW50ZXJfc2VjdXJlX21vZGUpCisJICAgICB8fCBQUkVTRU5UKGVudGVyX3Byb3RlY3RlZF9tb2RlKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl9yZXZlcnNlX21vZGUpKSkKKwkgICAgX25jX3dhcm5pbmcoIm5vIGV4aXRfYXR0cmlidXRlX21vZGUiKTsKKyNlbmRpZiAvKiBfX1VOVVNFRF9fICovCisJUEFJUkVEKGVudGVyX3N0YW5kb3V0X21vZGUsIGV4aXRfc3RhbmRvdXRfbW9kZSk7CisJUEFJUkVEKGVudGVyX3VuZGVybGluZV9tb2RlLCBleGl0X3VuZGVybGluZV9tb2RlKTsKKyAgICB9CisKKyAgICAvKiB3ZSBkbyB0aGlzIGNoZWNrL2ZpeCBpbiBwb3N0cHJvY2Vzc190ZXJtY2FwKCksIGJ1dCBzb21lIHBhY2thZ2VycworICAgICAqIHByZWZlciB0byBieXBhc3MgaXQuLi4KKyAgICAgKi8KKyAgICBpZiAoIWxpdGVyYWwpIHsKKwlpZiAoYWNzX2NoYXJzID09IDAKKwkgICAgJiYgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSAhPSAwCisJICAgICYmIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSAhPSAwKQorCSAgICBhY3NfY2hhcnMgPSBzdHJkdXAoVlRfQUNTQyk7CisJQU5ETUlTU0lORyhlbnRlcl9hbHRfY2hhcnNldF9tb2RlLCBhY3NfY2hhcnMpOworCUFORE1JU1NJTkcoZXhpdF9hbHRfY2hhcnNldF9tb2RlLCBhY3NfY2hhcnMpOworICAgIH0KKworICAgIC8qIGxpc3RlZCBpbiBzdHJ1Y3R1cmUtbWVtYmVyIG9yZGVyIG9mIGZpcnN0IGFyZ3VtZW50ICovCisgICAgUEFJUkVEKGVudGVyX2FsdF9jaGFyc2V0X21vZGUsIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSk7CisgICAgQU5ETUlTU0lORyhlbnRlcl9ibGlua19tb2RlLCBleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKyAgICBBTkRNSVNTSU5HKGVudGVyX2JvbGRfbW9kZSwgZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisgICAgUEFJUkVEKGV4aXRfY2FfbW9kZSwgZW50ZXJfY2FfbW9kZSk7CisgICAgUEFJUkVEKGVudGVyX2RlbGV0ZV9tb2RlLCBleGl0X2RlbGV0ZV9tb2RlKTsKKyAgICBBTkRNSVNTSU5HKGVudGVyX2RpbV9tb2RlLCBleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKyAgICBQQUlSRUQoZW50ZXJfaW5zZXJ0X21vZGUsIGV4aXRfaW5zZXJ0X21vZGUpOworICAgIEFORE1JU1NJTkcoZW50ZXJfc2VjdXJlX21vZGUsIGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIEFORE1JU1NJTkcoZW50ZXJfcHJvdGVjdGVkX21vZGUsIGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIEFORE1JU1NJTkcoZW50ZXJfcmV2ZXJzZV9tb2RlLCBleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKyAgICBQQUlSRUQoZnJvbV9zdGF0dXNfbGluZSwgdG9fc3RhdHVzX2xpbmUpOworICAgIFBBSVJFRChtZXRhX29mZiwgbWV0YV9vbik7CisKKyAgICBQQUlSRUQocHJ0cl9vbiwgcHJ0cl9vZmYpOworICAgIFBBSVJFRChzYXZlX2N1cnNvciwgcmVzdG9yZV9jdXJzb3IpOworICAgIFBBSVJFRChlbnRlcl94b25fbW9kZSwgZXhpdF94b25fbW9kZSk7CisgICAgUEFJUkVEKGVudGVyX2FtX21vZGUsIGV4aXRfYW1fbW9kZSk7CisgICAgQU5ETUlTU0lORyhsYWJlbF9vZmYsIGxhYmVsX29uKTsKKyNpZmRlZiByZW1vdmVfY2xvY2sKKyAgICBQQUlSRUQoZGlzcGxheV9jbG9jaywgcmVtb3ZlX2Nsb2NrKTsKKyNlbmRpZgorICAgIEFORE1JU1NJTkcoc2V0X2NvbG9yX3BhaXIsIGluaXRpYWxpemVfcGFpcik7Cit9CisKKy8qIG9ic29sZXRlOiAyMDA0MDcwNSAqLworc3RhdGljIHZvaWQKK3Nhbml0eV9jaGVjayhURVJNVFlQRSAqdHApCit7CisgICAgc2FuaXR5X2NoZWNrMih0cCwgRkFMU0UpOworfQorCisjaWYgTk9fTEVBS1MKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbGVha3NfdGljKHZvaWQpCit7CisgICAgX25jX2FsbG9jX2VudHJ5X2xlYWtzKCk7CisgICAgX25jX2NhcHRvaW5mb19sZWFrcygpOworICAgIF9uY19jb21wX2NhcHRhYl9sZWFrcygpOworICAgIF9uY19jb21wX3NjYW5fbGVha3MoKTsKKyNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQKKyAgICBfbmNfbmFtZXNfbGVha3MoKTsKKyAgICBfbmNfY29kZXNfbGVha3MoKTsKKyNlbmRpZgorICAgIF9uY190aWNfZXhwYW5kKDAsIEZBTFNFLCAwKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX3RpYyhpbnQgY29kZSkKK3sKKyAgICBfbmNfbGVha3NfdGljKCk7CisgICAgX25jX2ZyZWVfdGluZm8oY29kZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vY29tcF9zY2FuLmMgYi9uY3Vyc2VzL3RpbmZvL2NvbXBfc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDc1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2NvbXBfc2Nhbi5jCkBAIC0wLDAgKzEsOTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5NiBvbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljb21wX3NjYW4uYyAtLS0gTGV4aWNhbCBzY2FubmVyIGZvciB0ZXJtaW5mbyBjb21waWxlci4KKyAqCisgKglfbmNfcmVzZXRfaW5wdXQoKQorICoJX25jX2dldF90b2tlbigpCisgKglfbmNfcGFuaWNfbW9kZSgpCisgKglpbnQgX25jX3N5bnRheDsKKyAqCWludCBfbmNfY3Vycl9saW5lOworICoJbG9uZyBfbmNfY3Vycl9maWxlX3BvczsKKyAqCWxvbmcgX25jX2NvbW1lbnRfc3RhcnQ7CisgKglsb25nIF9uY19jb21tZW50X2VuZDsKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogY29tcF9zY2FuLmMsdiAxLjgzIDIwMDgvMDgvMTYgMTk6MjI6NTUgdG9tIEV4cCAkIikKKworLyoKKyAqIE1heGltdW0gbGVuZ3RoIG9mIHN0cmluZyBjYXBhYmlsaXR5IHdlJ2xsIGFjY2VwdCBiZWZvcmUgcmFpc2luZyBhbiBlcnJvci4KKyAqIFllcywgdGhlcmUgaXMgYSByZWFsIGNhcGFiaWxpdHkgaW4gL2V0Yy90ZXJtY2FwIHRoaXMgbG9uZywgYW4gImlzIi4KKyAqLworI2RlZmluZSBNQVhDQVBMRU4JNjAwCisKKyNkZWZpbmUgaXN3aGl0ZShjaCkJKGNoID09ICcgJyAgfHwgIGNoID09ICdcdCcpCisKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpCitfbmNfc3ludGF4ID0gMDsJCQkvKiB0ZXJtY2FwIG9yIHRlcm1pbmZvPyAqLworTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpCitfbmNfY3Vycl9maWxlX3BvcyA9IDA7CQkvKiBmaWxlIG9mZnNldCBvZiBjdXJyZW50IGxpbmUgKi8KK05DVVJTRVNfRVhQT1JUX1ZBUihsb25nKQorX25jX2NvbW1lbnRfc3RhcnQgPSAwOwkJLyogc3RhcnQgb2YgY29tbWVudCByYW5nZSBiZWZvcmUgbmFtZSAqLworTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpCitfbmNfY29tbWVudF9lbmQgPSAwOwkJLyogZW5kIG9mIGNvbW1lbnQgcmFuZ2UgYmVmb3JlIG5hbWUgKi8KK05DVVJTRVNfRVhQT1JUX1ZBUihsb25nKQorX25jX3N0YXJ0X2xpbmUgPSAwOwkJLyogc3RhcnQgbGluZSBvZiBjdXJyZW50IGVudHJ5ICovCisKK05DVVJTRVNfRVhQT1JUX1ZBUihzdHJ1Y3QgdG9rZW4pCitfbmNfY3Vycl90b2tlbiA9Cit7CisgICAgMCwgMCwgMAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVG9rZW4tZ3JhYmJpbmcgbWFjaGluZXJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYm9vbCBmaXJzdF9jb2x1bW47CS8qIFNlZSAnbmV4dF9jaGFyKCknIGJlbG93ICovCitzdGF0aWMgYm9vbCBoYWRfbmV3bGluZTsKK3N0YXRpYyBjaGFyIHNlcGFyYXRvcjsJCS8qIGNhcGFiaWxpdHkgc2VwYXJhdG9yICovCitzdGF0aWMgaW50IHB1c2h0eXBlOwkJLyogdHlwZSBvZiBwdXNoYmFjayB0b2tlbiAqLworc3RhdGljIGNoYXIgKnB1c2huYW1lOworCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKK05DVVJTRVNfRVhQT1JUX1ZBUihib29sKQorX25jX2Rpc2FibGVfcGVyaW9kID0gRkFMU0U7CS8qIHVzZWQgYnkgdGljIC1hIG9wdGlvbiAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENoYXJhY3Rlci1zdHJlYW0gaGFuZGxpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTEVYQlVGU0laCTEwMjQKKworc3RhdGljIGNoYXIgKmJ1ZnB0cjsJCS8qIG90aGVyd2lzZSwgdGhlIGlucHV0IGJ1ZmZlciBwb2ludGVyICovCitzdGF0aWMgY2hhciAqYnVmc3RhcnQ7CQkvKiBzdGFydCBvZiBidWZmZXIgc28gd2UgY2FuIGNvbXB1dGUgb2Zmc2V0cyAqLworc3RhdGljIEZJTEUgKnl5aW47CQkvKiBzY2FubmVyJ3MgaW5wdXQgZmlsZSBkZXNjcmlwdG9yICovCisKKy8qCisgKglfbmNfcmVzZXRfaW5wdXQoKQorICoKKyAqCVJlc2V0cyB0aGUgaW5wdXQtcmVhZGluZyByb3V0aW5lcy4gIFVzZWQgb24gaW5pdGlhbGl6YXRpb24sCisgKglvciBhZnRlciBhIHNlZWsgaGFzIGJlZW4gZG9uZS4gIEV4YWN0bHkgb25lIGFyZ3VtZW50IG11c3QgYmUKKyAqCW5vbi1udWxsLgorICovCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfcmVzZXRfaW5wdXQoRklMRSAqZnAsIGNoYXIgKmJ1ZikKK3sKKyAgICBwdXNodHlwZSA9IE5PX1BVU0hCQUNLOworICAgIGlmIChwdXNobmFtZSAhPSAwKQorCXB1c2huYW1lWzBdID0gJ1wwJzsKKyAgICB5eWluID0gZnA7CisgICAgYnVmc3RhcnQgPSBidWZwdHIgPSBidWY7CisgICAgX25jX2N1cnJfZmlsZV9wb3MgPSAwTDsKKyAgICBpZiAoZnAgIT0gMCkKKwlfbmNfY3Vycl9saW5lID0gMDsKKyAgICBfbmNfY3Vycl9jb2wgPSAwOworfQorCisvKgorICoJaW50IGxhc3RfY2hhcigpCisgKgorICoJUmV0dXJucyB0aGUgZmluYWwgbm9uYmxhbmsgY2hhcmFjdGVyIG9uIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlcgorICovCitzdGF0aWMgaW50CitsYXN0X2NoYXIodm9pZCkKK3sKKyAgICBzaXplX3QgbGVuID0gc3RybGVuKGJ1ZnB0cik7CisgICAgd2hpbGUgKGxlbi0tKSB7CisJaWYgKCFpc3NwYWNlKFVDaGFyKGJ1ZnB0cltsZW5dKSkpCisJICAgIHJldHVybiBidWZwdHJbbGVuXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKglpbnQgbmV4dF9jaGFyKCkKKyAqCisgKglSZXR1cm5zIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgc3RyZWFtLiAgQ29tbWVudHMgYW5kIGxlYWRpbmcKKyAqCXdoaXRlIHNwYWNlIGFyZSBzdHJpcHBlZC4KKyAqCisgKglUaGUgZ2xvYmFsIHN0YXRlIHZhcmlhYmxlICdmaXJzdGNvbHVtbicgaXMgc2V0IFRSVUUgaWYgdGhlIGNoYXJhY3RlcgorICoJcmV0dXJuZWQgaXMgZnJvbSB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBpbnB1dCBsaW5lLgorICoKKyAqCVRoZSBnbG9iYWwgdmFyaWFibGUgX25jX2N1cnJfbGluZSBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBuZXcgbGluZS4KKyAqCVRoZSBnbG9iYWwgdmFyaWFibGUgX25jX2N1cnJfZmlsZV9wb3MgaXMgc2V0IHRvIHRoZSBmaWxlIG9mZnNldCBvZiB0aGUKKyAqCWJlZ2lubmluZyBvZiBlYWNoIGxpbmUuCisgKi8KKworc3RhdGljIGludAorbmV4dF9jaGFyKHZvaWQpCit7CisgICAgc3RhdGljIGNoYXIgKnJlc3VsdDsKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZDsKKyAgICBpbnQgdGhlX2NoYXI7CisKKyAgICBpZiAoIXl5aW4pIHsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkgICAgRnJlZUFuZE51bGwocmVzdWx0KTsKKwkgICAgRnJlZUFuZE51bGwocHVzaG5hbWUpOworCSAgICBhbGxvY2F0ZWQgPSAwOworCX0KKwkvKgorCSAqIEFuIHN0cmluZyB3aXRoIGFuIGVtYmVkZGVkIG51bGwgd2lsbCB0cnVuY2F0ZSB0aGUgaW5wdXQuICBUaGlzIGlzCisJICogaW50ZW50aW9uYWwgKHdlIGRvbid0IHJlYWQgYmluYXJ5IGZpbGVzIGhlcmUpLgorCSAqLworCWlmIChidWZwdHIgPT0gMCB8fCAqYnVmcHRyID09ICdcMCcpCisJICAgIHJldHVybiAoRU9GKTsKKwlpZiAoKmJ1ZnB0ciA9PSAnXG4nKSB7CisJICAgIF9uY19jdXJyX2xpbmUrKzsKKwkgICAgX25jX2N1cnJfY29sID0gMDsKKwl9IGVsc2UgaWYgKCpidWZwdHIgPT0gJ1x0JykgeworCSAgICBfbmNfY3Vycl9jb2wgPSAoX25jX2N1cnJfY29sIHwgNyk7CisJfQorICAgIH0gZWxzZSBpZiAoIWJ1ZnB0ciB8fCAhKmJ1ZnB0cikgeworCS8qCisJICogSW4gdGhlb3J5IHRoaXMgY291bGQgYmUgcmVjb2RlZCB0byBkbyBpdHMgSS9PIG9uZSBjaGFyYWN0ZXIgYXQgYQorCSAqIHRpbWUsIHNhdmluZyB0aGUgYnVmZmVyIHNwYWNlLiAgSW4gcHJhY3RpY2UsIHRoaXMgdHVybnMgb3V0IHRvIGJlCisJICogcXVpdGUgaGFyZCB0byBnZXQgY29tcGxldGVseSByaWdodC4gIFRyeSBpdCBhbmQgc2VlLiAgSWYgeW91CisJICogc3VjY2VlZCwgZG9uJ3QgZm9yZ2V0IHRvIGhhY2sgcHVzaF9iYWNrKCkgY29ycmVzcG9uZGluZ2x5LgorCSAqLworCXNpemVfdCB1c2VkOworCXNpemVfdCBsZW47CisKKwlkbyB7CisJICAgIGJ1ZnN0YXJ0ID0gMDsKKwkgICAgdXNlZCA9IDA7CisJICAgIGRvIHsKKwkJaWYgKHVzZWQgKyAoTEVYQlVGU0laIC8gNCkgPj0gYWxsb2NhdGVkKSB7CisJCSAgICBhbGxvY2F0ZWQgKz0gKGFsbG9jYXRlZCArIExFWEJVRlNJWik7CisJCSAgICByZXN1bHQgPSB0eXBlUmVhbGxvYyhjaGFyLCBhbGxvY2F0ZWQsIHJlc3VsdCk7CisJCSAgICBpZiAocmVzdWx0ID09IDApCisJCQlyZXR1cm4gKEVPRik7CisJCSAgICBidWZzdGFydCA9IHJlc3VsdDsKKwkJfQorCQlpZiAodXNlZCA9PSAwKQorCQkgICAgX25jX2N1cnJfZmlsZV9wb3MgPSBmdGVsbCh5eWluKTsKKworCQlpZiAoZmdldHMocmVzdWx0ICsgdXNlZCwgKGludCkgKGFsbG9jYXRlZCAtIHVzZWQpLCB5eWluKSAhPSAwKSB7CisJCSAgICBidWZzdGFydCA9IHJlc3VsdDsKKwkJICAgIGlmICh1c2VkID09IDApIHsKKwkJCV9uY19jdXJyX2xpbmUrKzsKKwkJCV9uY19jdXJyX2NvbCA9IDA7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBpZiAodXNlZCAhPSAwKQorCQkJc3RyY2F0KHJlc3VsdCwgIlxuIik7CisJCX0KKwkJaWYgKChidWZwdHIgPSBidWZzdGFydCkgIT0gMCkgeworCQkgICAgdXNlZCA9IHN0cmxlbihidWZwdHIpOworCQkgICAgd2hpbGUgKGlzd2hpdGUoKmJ1ZnB0cikpIHsKKwkJCWlmICgqYnVmcHRyID09ICdcdCcpIHsKKwkJCSAgICBfbmNfY3Vycl9jb2wgPSAoX25jX2N1cnJfY29sIHwgNykgKyAxOworCQkJfSBlbHNlIHsKKwkJCSAgICBfbmNfY3Vycl9jb2wrKzsKKwkJCX0KKwkJCWJ1ZnB0cisrOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogVHJlYXQgYSB0cmFpbGluZyA8Y3I+PGxmPiB0aGUgc2FtZSBhcyBhIDxuZXdsaW5lPiBzbyB3ZQorCQkgICAgICogY2FuIHJlYWQgZmlsZXMgb24gT1MvMiwgZXRjLgorCQkgICAgICovCisJCSAgICBpZiAoKGxlbiA9IHN0cmxlbihidWZwdHIpKSA+IDEpIHsKKwkJCWlmIChidWZwdHJbbGVuIC0gMV0gPT0gJ1xuJworCQkJICAgICYmIGJ1ZnB0cltsZW4gLSAyXSA9PSAnXHInKSB7CisJCQkgICAgbGVuLS07CisJCQkgICAgYnVmcHRyW2xlbiAtIDFdID0gJ1xuJzsKKwkJCSAgICBidWZwdHJbbGVuXSA9ICdcMCc7CisJCQl9CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICByZXR1cm4gKEVPRik7CisJCX0KKwkgICAgfSB3aGlsZSAoYnVmcHRyW2xlbiAtIDFdICE9ICdcbicpOwkvKiBjb21wbGV0ZSBhIGxpbmUgKi8KKwl9IHdoaWxlIChyZXN1bHRbMF0gPT0gJyMnKTsJLyogaWdub3JlIGNvbW1lbnRzICovCisgICAgfSBlbHNlIGlmICgqYnVmcHRyID09ICdcdCcpIHsKKwlfbmNfY3Vycl9jb2wgPSAoX25jX2N1cnJfY29sIHwgNyk7CisgICAgfQorCisgICAgZmlyc3RfY29sdW1uID0gKGJ1ZnB0ciA9PSBidWZzdGFydCk7CisgICAgaWYgKGZpcnN0X2NvbHVtbikKKwloYWRfbmV3bGluZSA9IEZBTFNFOworCisgICAgX25jX2N1cnJfY29sKys7CisgICAgdGhlX2NoYXIgPSAqYnVmcHRyKys7CisgICAgcmV0dXJuIFVDaGFyKHRoZV9jaGFyKTsKK30KKworc3RhdGljIHZvaWQKK3B1c2hfYmFjayhjaGFyIGMpCisvKiBwdXNoIGEgY2hhcmFjdGVyIGJhY2sgb250byB0aGUgaW5wdXQgc3RyZWFtICovCit7CisgICAgaWYgKGJ1ZnB0ciA9PSBidWZzdGFydCkKKwlfbmNfc3lzZXJyX2Fib3J0KCJDYW4ndCBiYWNrc3BhY2Ugb2ZmIGJlZ2lubmluZyBvZiBsaW5lIik7CisgICAgKi0tYnVmcHRyID0gYzsKKyAgICBfbmNfY3Vycl9jb2wtLTsKK30KKworc3RhdGljIGxvbmcKK3N0cmVhbV9wb3Modm9pZCkKKy8qIHJldHVybiBvdXIgY3VycmVudCBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbSAqLworeworICAgIHJldHVybiAoeXlpbiA/IGZ0ZWxsKHl5aW4pIDogKGJ1ZnB0ciA/IGJ1ZnB0ciAtIGJ1ZnN0YXJ0IDogMCkpOworfQorCitzdGF0aWMgYm9vbAorZW5kX29mX3N0cmVhbSh2b2lkKQorLyogYXJlIHdlIGF0IGVuZCBvZiBpbnB1dD8gKi8KK3sKKyAgICByZXR1cm4gKCh5eWluID8gZmVvZih5eWluKSA6IChidWZwdHIgJiYgKmJ1ZnB0ciA9PSAnXDAnKSkKKwkgICAgPyBUUlVFIDogRkFMU0UpOworfQorCisvKiBBc3N1bWUgd2UgbWF5IGJlIGxvb2tpbmcgYXQgYSB0ZXJtY2FwLXN0eWxlIGNvbnRpbnVhdGlvbiAqLworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorZWF0X2VzY2FwZWRfbmV3bGluZShpbnQgY2gpCit7CisgICAgaWYgKGNoID09ICdcXCcpCisJd2hpbGUgKChjaCA9IG5leHRfY2hhcigpKSA9PSAnXG4nIHx8IGlzd2hpdGUoY2gpKQorCSAgICBjb250aW51ZTsKKyAgICByZXR1cm4gY2g7Cit9CisKKyNkZWZpbmUgVE9LX0JVRl9TSVpFIE1BWF9FTlRSWV9TSVpFCisKKyNkZWZpbmUgT2tUb0FkZCgpIFwKKwkoKHRva19wdHIgLSB0b2tfYnVmKSA8IChUT0tfQlVGX1NJWkUgLSAyKSkKKworI2RlZmluZSBBZGRDaChjaCkgXAorCSp0b2tfcHRyKysgPSAoY2hhcikgY2g7IFwKKwkqdG9rX3B0ciA9ICdcMCcKKworLyoKKyAqCWludAorICoJZ2V0X3Rva2VuKCkKKyAqCisgKglTY2FucyB0aGUgaW5wdXQgZm9yIHRoZSBuZXh0IHRva2VuLCBzdG9yaW5nIHRoZSBzcGVjaWZpY3MgaW4gdGhlCisgKglnbG9iYWwgc3RydWN0dXJlICdjdXJyX3Rva2VuJyBhbmQgcmV0dXJuaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoKKyAqCQlOQU1FUwkJQSBsaW5lIGJlZ2lubmluZyBpbiBjb2x1bW4gMS4gICduYW1lJworICoJCQkJd2lsbCBiZSBzZXQgdG8gcG9pbnQgdG8gZXZlcnl0aGluZyB1cCB0byBidXQKKyAqCQkJCW5vdCBpbmNsdWRpbmcgdGhlIGZpcnN0IHNlcGFyYXRvciBvbiB0aGUgbGluZS4KKyAqCQlCT09MRUFOCQlBbiBlbnRyeSBjb25zaXN0aW5nIG9mIGEgbmFtZSBmb2xsb3dlZCBieQorICoJCQkJYSBzZXBhcmF0b3IuICAnbmFtZScgd2lsbCBiZSBzZXQgdG8gcG9pbnQgdG8KKyAqCQkJCXRoZSBuYW1lIG9mIHRoZSBjYXBhYmlsaXR5LgorICoJCU5VTUJFUgkJQW4gZW50cnkgb2YgdGhlIGZvcm0KKyAqCQkJCQluYW1lI2RpZ2l0cywKKyAqCQkJCSduYW1lJyB3aWxsIGJlIHNldCB0byBwb2ludCB0byB0aGUgY2FwYWJpbGl0eQorICoJCQkJbmFtZSBhbmQgJ3ZhbG51bWJlcicgdG8gdGhlIG51bWJlciBnaXZlbi4KKyAqCQlTVFJJTkcJCUFuIGVudHJ5IG9mIHRoZSBmb3JtCisgKgkJCQkJbmFtZT1jaGFyYWN0ZXJzLAorICoJCQkJJ25hbWUnIGlzIHNldCB0byB0aGUgY2FwYWJpbGl0eSBuYW1lIGFuZAorICoJCQkJJ3ZhbHN0cmluZycgdG8gdGhlIHN0cmluZyBvZiBjaGFyYWN0ZXJzLCB3aXRoCisgKgkJCQlpbnB1dCB0cmFuc2xhdGlvbnMgZG9uZS4KKyAqCQlDQU5DRUwJCUFuIGVudHJ5IG9mIHRoZSBmb3JtCisgKgkJCQkJbmFtZUAsCisgKgkJCQknbmFtZScgaXMgc2V0IHRvIHRoZSBjYXBhYmlsaXR5IG5hbWUgYW5kCisgKgkJCQkndmFsbnVtYmVyJyB0byAtMS4KKyAqCQlFT0YJCVRoZSBlbmQgb2YgdGhlIGZpbGUgaGFzIGJlZW4gcmVhY2hlZC4KKyAqCisgKglBIGBzZXBhcmF0b3InIGlzIGVpdGhlciBhIGNvbW1hIG9yIGEgc2VtaWNvbG9uLCBkZXBlbmRpbmcgb24gd2hldGhlcgorICoJd2UgYXJlIGluIHRlcm1jYXAgb3IgdGVybWluZm8gbW9kZS4KKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2dldF90b2tlbihib29sIHNpbGVudCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciB0ZXJtaW5mb19wdW5jdFtdID0gIkAlJiohIyI7CisgICAgc3RhdGljIGNoYXIgKnRva19idWY7CisKKyAgICBjaGFyICphZnRlcl9saXN0OworICAgIGNoYXIgKmFmdGVyX25hbWU7CisgICAgY2hhciAqbnVtY2hrOworICAgIGNoYXIgKnRva19wdHI7CisgICAgY2hhciAqczsKKyAgICBjaGFyIG51bWJ1Zls4MF07CisgICAgaW50IGNoOworICAgIGludCBkb3RfZmxhZyA9IEZBTFNFOworICAgIGludCB0eXBlOworICAgIGxvbmcgbnVtYmVyOworICAgIGxvbmcgdG9rZW5fc3RhcnQ7CisgICAgdW5zaWduZWQgZm91bmQ7CisjaWZkZWYgVFJBQ0UKKyAgICBpbnQgb2xkX2xpbmU7CisgICAgaW50IG9sZF9jb2w7CisjZW5kaWYKKworICAgIGlmIChwdXNodHlwZSAhPSBOT19QVVNIQkFDSykgeworCWludCByZXR2YWwgPSBwdXNodHlwZTsKKworCV9uY19zZXRfdHlwZShwdXNobmFtZSAhPSAwID8gcHVzaG5hbWUgOiAiIik7CisJREVCVUcoMywgKCJwdXNoZWQtYmFjayB0b2tlbjogYCVzJywgY2xhc3MgJWQiLAorCQkgIF9uY19jdXJyX3Rva2VuLnRrX25hbWUsIHB1c2h0eXBlKSk7CisKKwlwdXNodHlwZSA9IE5PX1BVU0hCQUNLOworCWlmIChwdXNobmFtZSAhPSAwKQorCSAgICBwdXNobmFtZVswXSA9ICdcMCc7CisKKwkvKiBjdXJydG9rIHdhc24ndCBhbHRlcmVkIGJ5IF9uY19wdXNoX3Rva2VuKCkgKi8KKwlyZXR1cm4gKHJldHZhbCk7CisgICAgfQorCisgICAgaWYgKGVuZF9vZl9zdHJlYW0oKSkgeworCXl5aW4gPSAwOworCW5leHRfY2hhcigpOwkJLyogZnJlZXMgaXRzIGFsbG9jYXRlZCBtZW1vcnkgKi8KKwlpZiAodG9rX2J1ZiAhPSAwKSB7CisJICAgIGlmIChfbmNfY3Vycl90b2tlbi50a19uYW1lID09IHRva19idWYpCisJCV9uY19jdXJyX3Rva2VuLnRrX25hbWUgPSAwOworCSAgICBGcmVlQW5kTnVsbCh0b2tfYnVmKTsKKwl9CisJcmV0dXJuIChFT0YpOworICAgIH0KKworICBzdGFydF90b2tlbjoKKyAgICB0b2tlbl9zdGFydCA9IHN0cmVhbV9wb3MoKTsKKyAgICB3aGlsZSAoKGNoID0gbmV4dF9jaGFyKCkpID09ICdcbicgfHwgaXN3aGl0ZShjaCkpIHsKKwlpZiAoY2ggPT0gJ1xuJykKKwkgICAgaGFkX25ld2xpbmUgPSBUUlVFOworCWNvbnRpbnVlOworICAgIH0KKworICAgIGNoID0gZWF0X2VzY2FwZWRfbmV3bGluZShjaCk7CisKKyNpZmRlZiBUUkFDRQorICAgIG9sZF9saW5lID0gX25jX2N1cnJfbGluZTsKKyAgICBvbGRfY29sID0gX25jX2N1cnJfY29sOworI2VuZGlmCisgICAgaWYgKGNoID09IEVPRikKKwl0eXBlID0gRU9GOworICAgIGVsc2UgeworCS8qIGlmIHRoaXMgaXMgYSB0ZXJtY2FwIGVudHJ5LCBza2lwIGEgbGVhZGluZyBzZXBhcmF0b3IgKi8KKwlpZiAoc2VwYXJhdG9yID09ICc6JyAmJiBjaCA9PSAnOicpCisJICAgIGNoID0gbmV4dF9jaGFyKCk7CisKKwlpZiAoY2ggPT0gJy4nCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwkgICAgJiYgIV9uY19kaXNhYmxlX3BlcmlvZAorI2VuZGlmCisJICAgICkgeworCSAgICBkb3RfZmxhZyA9IFRSVUU7CisJICAgIERFQlVHKDgsICgiZG90LWZsYWcgc2V0IikpOworCisJICAgIHdoaWxlICgoY2ggPSBuZXh0X2NoYXIoKSkgPT0gJy4nIHx8IGlzd2hpdGUoY2gpKQorCQljb250aW51ZTsKKwl9CisKKwlpZiAoY2ggPT0gRU9GKSB7CisJICAgIHR5cGUgPSBFT0Y7CisJICAgIGdvdG8gZW5kX29mX3Rva2VuOworCX0KKworCS8qIGhhdmUgdG8gbWFrZSBzb21lIHB1bmN0dWF0aW9uIGNoYXJzIGxlZ2FsIGZvciB0ZXJtaW5mbyAqLworCWlmICghaXNhbG51bShVQ2hhcihjaCkpCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwkgICAgJiYgIShjaCA9PSAnLicgJiYgX25jX2Rpc2FibGVfcGVyaW9kKQorI2VuZGlmCisJICAgICYmICFzdHJjaHIodGVybWluZm9fcHVuY3QsIChjaGFyKSBjaCkpIHsKKwkgICAgaWYgKCFzaWxlbnQpCisJCV9uY193YXJuaW5nKCJJbGxlZ2FsIGNoYXJhY3RlciAoZXhwZWN0ZWQgYWxwaGFudW1lcmljIG9yICVzKSAtICclcyciLAorCQkJICAgIHRlcm1pbmZvX3B1bmN0LCB1bmN0cmwoKGNodHlwZSkgY2gpKTsKKwkgICAgX25jX3BhbmljX21vZGUoc2VwYXJhdG9yKTsKKwkgICAgZ290byBzdGFydF90b2tlbjsKKwl9CisKKwlpZiAodG9rX2J1ZiA9PSAwKQorCSAgICB0b2tfYnVmID0gdHlwZU1hbGxvYyhjaGFyLCBUT0tfQlVGX1NJWkUpOworCisjaWZkZWYgVFJBQ0UKKwlvbGRfbGluZSA9IF9uY19jdXJyX2xpbmU7CisJb2xkX2NvbCA9IF9uY19jdXJyX2NvbDsKKyNlbmRpZgorCXRva19wdHIgPSB0b2tfYnVmOworCUFkZENoKGNoKTsKKworCWlmIChmaXJzdF9jb2x1bW4pIHsKKwkgICAgX25jX2NvbW1lbnRfc3RhcnQgPSB0b2tlbl9zdGFydDsKKwkgICAgX25jX2NvbW1lbnRfZW5kID0gX25jX2N1cnJfZmlsZV9wb3M7CisJICAgIF9uY19zdGFydF9saW5lID0gX25jX2N1cnJfbGluZTsKKworCSAgICBfbmNfc3ludGF4ID0gRVJSOworCSAgICBhZnRlcl9uYW1lID0gMDsKKwkgICAgYWZ0ZXJfbGlzdCA9IDA7CisJICAgIHdoaWxlICgoY2ggPSBuZXh0X2NoYXIoKSkgIT0gJ1xuJykgeworCQlpZiAoY2ggPT0gRU9GKSB7CisJCSAgICBfbmNfZXJyX2Fib3J0KE1TR19OT19JTlBVVFMpOworCQl9IGVsc2UgaWYgKGNoID09ICd8JykgeworCQkgICAgYWZ0ZXJfbGlzdCA9IHRva19wdHI7CisJCSAgICBpZiAoYWZ0ZXJfbmFtZSA9PSAwKQorCQkJYWZ0ZXJfbmFtZSA9IHRva19wdHI7CisJCX0gZWxzZSBpZiAoY2ggPT0gJzonICYmIGxhc3RfY2hhcigpICE9ICcsJykgeworCQkgICAgX25jX3N5bnRheCA9IFNZTl9URVJNQ0FQOworCQkgICAgc2VwYXJhdG9yID0gJzonOworCQkgICAgYnJlYWs7CisJCX0gZWxzZSBpZiAoY2ggPT0gJywnKSB7CisJCSAgICBfbmNfc3ludGF4ID0gU1lOX1RFUk1JTkZPOworCQkgICAgc2VwYXJhdG9yID0gJywnOworCQkgICAgLyoKKwkJICAgICAqIElmIHdlIGRpZCBub3Qgc2VlIGEgJ3wnLCB0aGVuIHdlIGZvdW5kIGEgbmFtZSB3aXRoIG5vCisJCSAgICAgKiBhbGlhc2VzIG9yIGRlc2NyaXB0aW9uLgorCQkgICAgICovCisJCSAgICBpZiAoYWZ0ZXJfbmFtZSA9PSAwKQorCQkJYnJlYWs7CisJCSAgICAvKgorCQkgICAgICogSWYgd2Ugc2VlIGEgY29tbWEsIHdlIGFzc3VtZSB0aGlzIGlzIHRlcm1pbmZvIHVubGVzcyB3ZQorCQkgICAgICogc3Vic2VxdWVudGx5IHJ1biBpbnRvIGEgY29sb24uICBCdXQgd2UgZG9uJ3Qgc3RvcAorCQkgICAgICogbG9va2luZyBmb3IgYSBjb2xvbiB1bnRpbCBoaXR0aW5nIGEgbmV3bGluZS4gIFRoaXMKKwkJICAgICAqIGFsbG93cyBjb21tYXMgdG8gYmUgZW1iZWRkZWQgaW4gZGVzY3JpcHRpb24gZmllbGRzIG9mCisJCSAgICAgKiBlaXRoZXIgc3ludGF4LgorCQkgICAgICovCisJCX0gZWxzZQorCQkgICAgY2ggPSBlYXRfZXNjYXBlZF9uZXdsaW5lKGNoKTsKKworCQlpZiAoT2tUb0FkZCgpKSB7CisJCSAgICBBZGRDaChjaCk7CisJCX0gZWxzZSB7CisJCSAgICBjaCA9IEVPRjsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgKnRva19wdHIgPSAnXDAnOworCSAgICBpZiAoX25jX3N5bnRheCA9PSBFUlIpIHsKKwkJLyoKKwkJICogR3Jyci4uLndoYXQgd2Ugb3VnaHQgdG8gZG8gaGVyZSBpcyBiYXJmLCBjb21wbGFpbmluZyB0aGF0CisJCSAqIHRoZSBlbnRyeSBpcyBtYWxmb3JtZWQuICBCdXQgYmVjYXVzZSBhIGNvdXBsZSBvZiBuYW1lIGZpZWxkcworCQkgKiBpbiB0aGUgOC4yIHRlcm1jYXAgZmlsZSBlbmQgd2l0aCB8XCwgd2UganVzdCBoYXZlIHRvIGFzc3VtZQorCQkgKiBpdCdzIHRlcm1jYXAgc3ludGF4LgorCQkgKi8KKwkJX25jX3N5bnRheCA9IFNZTl9URVJNQ0FQOworCQlzZXBhcmF0b3IgPSAnOic7CisJICAgIH0gZWxzZSBpZiAoX25jX3N5bnRheCA9PSBTWU5fVEVSTUlORk8pIHsKKwkJLyogdGhyb3cgYXdheSB0cmFpbGluZyAvLCAqJC8gKi8KKwkJZm9yICgtLXRva19wdHI7CisJCSAgICAgaXN3aGl0ZSgqdG9rX3B0cikgfHwgKnRva19wdHIgPT0gJywnOworCQkgICAgIHRva19wdHItLSkKKwkJICAgIGNvbnRpbnVlOworCQl0b2tfcHRyWzFdID0gJ1wwJzsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFRoaXMgaXMgdGhlIHNvb25lc3Qgd2UgaGF2ZSB0aGUgdGVybWluYWwgbmFtZSBmZXRjaGVkLiAgU2V0IHVwCisJICAgICAqIGZvciBmb2xsb3dpbmcgd2FybmluZyBtZXNzYWdlcy4gIElmIHRoZXJlJ3Mgbm8gJ3wnLCB0aGVuIHRoZXJlCisJICAgICAqIGlzIG5vIGRlc2NyaXB0aW9uLgorCSAgICAgKi8KKwkgICAgaWYgKGFmdGVyX25hbWUgIT0gMCkgeworCQljaCA9ICphZnRlcl9uYW1lOworCQkqYWZ0ZXJfbmFtZSA9ICdcMCc7CisJCV9uY19zZXRfdHlwZSh0b2tfYnVmKTsKKwkJKmFmdGVyX25hbWUgPSAoY2hhcikgY2g7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBDb21wdXRlIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSBhbGlhc2VzIGFuZCB0aGUgZGVzY3JpcHRpb24KKwkgICAgICogZmllbGQgZm9yIHN5bnRheC1jaGVja2luZyBwdXJwb3Nlcy4KKwkgICAgICovCisJICAgIGlmIChhZnRlcl9saXN0ICE9IDApIHsKKwkJaWYgKCFzaWxlbnQpIHsKKwkJICAgIGlmICgqYWZ0ZXJfbGlzdCA9PSAnXDAnKQorCQkJX25jX3dhcm5pbmcoImVtcHR5IGxvbmduYW1lIGZpZWxkIik7CisJCSAgICBlbHNlIGlmIChzdHJjaHIoYWZ0ZXJfbGlzdCwgJyAnKSA9PSAwKQorCQkJX25jX3dhcm5pbmcoIm9sZGVyIHRpYyB2ZXJzaW9ucyBtYXkgdHJlYXQgdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGFzIGFuIGFsaWFzIik7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJYWZ0ZXJfbGlzdCA9IHRva19idWYgKyBzdHJsZW4odG9rX2J1Zik7CisJCURFQlVHKDEsICgibWlzc2luZyBkZXNjcmlwdGlvbiIpKTsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFdoaXRlc3BhY2UgaW4gYSBuYW1lIGZpZWxkIG90aGVyIHRoYW4gdGhlIGxvbmcgbmFtZSBjYW4gY29uZnVzZQorCSAgICAgKiByZGlzdCBhbmQgc29tZSB0ZXJtY2FwIHRvb2xzLiAgU2xhc2hlcyBhcmUgYSBuby1uby4gIE90aGVyCisJICAgICAqIHNwZWNpYWwgY2hhcmFjdGVycyBjYW4gYmUgZGFuZ2Vyb3VzIGR1ZSB0byBzaGVsbCBleHBhbnNpb24uCisJICAgICAqLworCSAgICBmb3IgKHMgPSB0b2tfYnVmOyBzIDwgYWZ0ZXJfbGlzdDsgKytzKSB7CisJCWlmIChpc3NwYWNlKFVDaGFyKCpzKSkpIHsKKwkJICAgIGlmICghc2lsZW50KQorCQkJX25jX3dhcm5pbmcoIndoaXRlc3BhY2UgaW4gbmFtZSBvciBhbGlhcyBmaWVsZCIpOworCQkgICAgYnJlYWs7CisJCX0gZWxzZSBpZiAoKnMgPT0gJy8nKSB7CisJCSAgICBpZiAoIXNpbGVudCkKKwkJCV9uY193YXJuaW5nKCJzbGFzaGVzIGFyZW4ndCBhbGxvd2VkIGluIG5hbWVzIG9yIGFsaWFzZXMiKTsKKwkJICAgIGJyZWFrOworCQl9IGVsc2UgaWYgKHN0cmNocigiJFtdISo/IiwgKnMpKSB7CisJCSAgICBpZiAoIXNpbGVudCkKKwkJCV9uY193YXJuaW5nKCJkdWJpb3VzIGNoYXJhY3RlciBgJWMnIGluIG5hbWUgb3IgYWxpYXMgZmllbGQiLCAqcyk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgICAgX25jX2N1cnJfdG9rZW4udGtfbmFtZSA9IHRva19idWY7CisJICAgIHR5cGUgPSBOQU1FUzsKKwl9IGVsc2UgeworCSAgICBpZiAoaGFkX25ld2xpbmUgJiYgX25jX3N5bnRheCA9PSBTWU5fVEVSTUNBUCkgeworCQlfbmNfd2FybmluZygiTWlzc2luZyBiYWNrc2xhc2ggYmVmb3JlIG5ld2xpbmUiKTsKKwkJaGFkX25ld2xpbmUgPSBGQUxTRTsKKwkgICAgfQorCSAgICB3aGlsZSAoKGNoID0gbmV4dF9jaGFyKCkpICE9IEVPRikgeworCQlpZiAoIWlzYWxudW0oVUNoYXIoY2gpKSkgeworCQkgICAgaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1JTkZPKSB7CisJCQlpZiAoY2ggIT0gJ18nKQorCQkJICAgIGJyZWFrOworCQkgICAgfSBlbHNlIHsJLyogYWxsb3cgJzsnIGZvciAiazsiICovCisJCQlpZiAoY2ggIT0gJzsnKQorCQkJICAgIGJyZWFrOworCQkgICAgfQorCQl9CisJCWlmIChPa1RvQWRkKCkpIHsKKwkJICAgIEFkZENoKGNoKTsKKwkJfSBlbHNlIHsKKwkJICAgIGNoID0gRU9GOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCisJICAgICp0b2tfcHRyKysgPSAnXDAnOwkvKiBzZXBhcmF0ZSBuYW1lL3ZhbHVlIGluIGJ1ZmZlciAqLworCSAgICBzd2l0Y2ggKGNoKSB7CisJICAgIGNhc2UgJywnOgorCSAgICBjYXNlICc6JzoKKwkJaWYgKGNoICE9IHNlcGFyYXRvcikKKwkJICAgIF9uY19lcnJfYWJvcnQoIlNlcGFyYXRvciBpbmNvbnNpc3RlbnQgd2l0aCBzeW50YXgiKTsKKwkJX25jX2N1cnJfdG9rZW4udGtfbmFtZSA9IHRva19idWY7CisJCXR5cGUgPSBCT09MRUFOOworCQlicmVhazsKKwkgICAgY2FzZSAnQCc6CisJCWlmICgoY2ggPSBuZXh0X2NoYXIoKSkgIT0gc2VwYXJhdG9yICYmICFzaWxlbnQpCisJCSAgICBfbmNfd2FybmluZygiTWlzc2luZyBzZXBhcmF0b3IgYWZ0ZXIgYCVzJywgaGF2ZSAlcyIsCisJCQkJdG9rX2J1ZiwgdW5jdHJsKChjaHR5cGUpIGNoKSk7CisJCV9uY19jdXJyX3Rva2VuLnRrX25hbWUgPSB0b2tfYnVmOworCQl0eXBlID0gQ0FOQ0VMOworCQlicmVhazsKKworCSAgICBjYXNlICcjJzoKKwkJZm91bmQgPSAwOworCQl3aGlsZSAoaXNhbG51bShjaCA9IG5leHRfY2hhcigpKSkgeworCQkgICAgbnVtYnVmW2ZvdW5kKytdID0gKGNoYXIpIGNoOworCQkgICAgaWYgKGZvdW5kID49IHNpemVvZihudW1idWYpIC0gMSkKKwkJCWJyZWFrOworCQl9CisJCW51bWJ1Zltmb3VuZF0gPSAnXDAnOworCQludW1iZXIgPSBzdHJ0b2wobnVtYnVmLCAmbnVtY2hrLCAwKTsKKwkJaWYgKCFzaWxlbnQpIHsKKwkJICAgIGlmIChudW1jaGsgPT0gbnVtYnVmKQorCQkJX25jX3dhcm5pbmcoIm5vIHZhbHVlIGdpdmVuIGZvciBgJXMnIiwgdG9rX2J1Zik7CisJCSAgICBpZiAoKCpudW1jaGsgIT0gJ1wwJykgfHwgKGNoICE9IHNlcGFyYXRvcikpCisJCQlfbmNfd2FybmluZygiTWlzc2luZyBzZXBhcmF0b3IiKTsKKwkJfQorCQlfbmNfY3Vycl90b2tlbi50a19uYW1lID0gdG9rX2J1ZjsKKwkJX25jX2N1cnJfdG9rZW4udGtfdmFsbnVtYmVyID0gbnVtYmVyOworCQl0eXBlID0gTlVNQkVSOworCQlicmVhazsKKworCSAgICBjYXNlICc9JzoKKwkJY2ggPSBfbmNfdHJhbnNfc3RyaW5nKHRva19wdHIsIHRva19idWYgKyBUT0tfQlVGX1NJWkUpOworCQlpZiAoIXNpbGVudCAmJiBjaCAhPSBzZXBhcmF0b3IpCisJCSAgICBfbmNfd2FybmluZygiTWlzc2luZyBzZXBhcmF0b3IiKTsKKwkJX25jX2N1cnJfdG9rZW4udGtfbmFtZSA9IHRva19idWY7CisJCV9uY19jdXJyX3Rva2VuLnRrX3ZhbHN0cmluZyA9IHRva19wdHI7CisJCXR5cGUgPSBTVFJJTkc7CisJCWJyZWFrOworCisJICAgIGNhc2UgRU9GOgorCQl0eXBlID0gRU9GOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJLyoganVzdCB0byBnZXQgcmlkIG9mIHRoZSBjb21waWxlciB3YXJuaW5nICovCisJCXR5cGUgPSBVTkRFRjsKKwkJaWYgKCFzaWxlbnQpCisJCSAgICBfbmNfd2FybmluZygiSWxsZWdhbCBjaGFyYWN0ZXIgLSAnJXMnIiwgdW5jdHJsKChjaHR5cGUpIGNoKSk7CisJICAgIH0KKwl9CQkJLyogZW5kIGVsc2UgKGZpcnN0X2NvbHVtbiA9PSBGQUxTRSkgKi8KKyAgICB9CQkJCS8qIGVuZCBlbHNlIChjaCAhPSBFT0YpICovCisKKyAgZW5kX29mX3Rva2VuOgorCisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoZG90X2ZsYWcgPT0gVFJVRSkKKwlERUJVRyg4LCAoIkNvbW1lbnRlZCBvdXQgIikpOworCisgICAgaWYgKF9uY190cmFjaW5nID49IERFQlVHX0xFVkVMKDgpKSB7CisJX3RyYWNlZigicGFyc2VkICVkLiVkIHRvICVkLiVkIiwKKwkJb2xkX2xpbmUsIG9sZF9jb2wsCisJCV9uY19jdXJyX2xpbmUsIF9uY19jdXJyX2NvbCk7CisgICAgfQorICAgIGlmIChfbmNfdHJhY2luZyA+PSBERUJVR19MRVZFTCg3KSkgeworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgX3RyYWNlZigiVG9rZW46IEJvb2xlYW47IG5hbWU9JyVzJyIsCisJCSAgICBfbmNfY3Vycl90b2tlbi50a19uYW1lKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE5VTUJFUjoKKwkgICAgX3RyYWNlZigiVG9rZW46IE51bWJlcjsgIG5hbWU9JyVzJywgdmFsdWU9JWQiLAorCQkgICAgX25jX2N1cnJfdG9rZW4udGtfbmFtZSwKKwkJICAgIF9uY19jdXJyX3Rva2VuLnRrX3ZhbG51bWJlcik7CisJICAgIGJyZWFrOworCisJY2FzZSBTVFJJTkc6CisJICAgIF90cmFjZWYoIlRva2VuOiBTdHJpbmc7ICBuYW1lPSclcycsIHZhbHVlPSVzIiwKKwkJICAgIF9uY19jdXJyX3Rva2VuLnRrX25hbWUsCisJCSAgICBfbmNfdmlzYnVmKF9uY19jdXJyX3Rva2VuLnRrX3ZhbHN0cmluZykpOworCSAgICBicmVhazsKKworCWNhc2UgQ0FOQ0VMOgorCSAgICBfdHJhY2VmKCJUb2tlbjogQ2FuY2VsOyBuYW1lPSclcyciLAorCQkgICAgX25jX2N1cnJfdG9rZW4udGtfbmFtZSk7CisJICAgIGJyZWFrOworCisJY2FzZSBOQU1FUzoKKworCSAgICBfdHJhY2VmKCJUb2tlbjogTmFtZXM7IHZhbHVlPSclcyciLAorCQkgICAgX25jX2N1cnJfdG9rZW4udGtfbmFtZSk7CisJICAgIGJyZWFrOworCisJY2FzZSBFT0Y6CisJICAgIF90cmFjZWYoIlRva2VuOiBFbmQgb2YgZmlsZSIpOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIF9uY193YXJuaW5nKCJCYWQgdG9rZW4gdHlwZSIpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChkb3RfZmxhZyA9PSBUUlVFKQkvKiBpZiBjb21tZW50ZWQgb3V0LCB1c2UgdGhlIG5leHQgb25lICovCisJdHlwZSA9IF9uY19nZXRfdG9rZW4oc2lsZW50KTsKKworICAgIERFQlVHKDMsICgidG9rZW46IGAlcycsIGNsYXNzICVkIiwKKwkgICAgICAoKF9uY19jdXJyX3Rva2VuLnRrX25hbWUgIT0gMCkKKwkgICAgICAgPyBfbmNfY3Vycl90b2tlbi50a19uYW1lCisJICAgICAgIDogIjxudWxsPiIpLAorCSAgICAgIHR5cGUpKTsKKworICAgIHJldHVybiAodHlwZSk7Cit9CisKKy8qCisgKgljaGFyCisgKgl0cmFuc19zdHJpbmcocHRyKQorICoKKyAqCVJlYWRzIGNoYXJhY3RlcnMgdXNpbmcgbmV4dF9jaGFyKCkgdW50aWwgZW5jb3VudGVyaW5nIGEgc2VwYXJhdG9yLCBubCwKKyAqCW9yIGVuZC1vZi1maWxlLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBjaGFyYWN0ZXIgd2hpY2ggY2F1c2VkCisgKglyZWFkaW5nIHRvIHN0b3AuICBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9ucyBhcmUgZG9uZSBvbiB0aGUgaW5wdXQ6CisgKgorICoJCV5YICBnb2VzIHRvICBjdHJsLVggKGkuZS4gWCAmIDAzNykKKyAqCQl7XEUsXG4sXHIsXGIsXHQsXGZ9ICBnbyB0bworICoJCQl7RVNDQVBFLG5ld2xpbmUsY2FycmlhZ2UtcmV0dXJuLGJhY2tzcGFjZSx0YWIsZm9ybWZlZWR9CisgKgkJe1xeLFxcfSAgZ28gdG8gIHtjYXJhdCxiYWNrc2xhc2h9CisgKgkJXGRkZCAoZm9yIGRkZCA9IHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cykgIGdvZXMgdG8gdGhlIGNoYXJhY3RlciBkZGQKKyAqCisgKgkJXGUgPT0gXEUKKyAqCQlcMCA9PSBcMjAwCisgKgorICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY190cmFuc19zdHJpbmcoY2hhciAqcHRyLCBjaGFyICpsYXN0KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IG51bWJlciA9IDA7CisgICAgaW50IGksIGM7CisgICAgY2h0eXBlIGNoLCBsYXN0X2NoID0gJ1wwJzsKKyAgICBib29sIGlnbm9yZWQgPSBGQUxTRTsKKyAgICBib29sIGxvbmdfd2FybmluZyA9IEZBTFNFOworCisgICAgd2hpbGUgKChjaCA9IGMgPSBuZXh0X2NoYXIoKSkgIT0gKGNodHlwZSkgc2VwYXJhdG9yICYmIGMgIT0gRU9GKSB7CisJaWYgKHB0ciA+PSAobGFzdCAtIDEpKSB7CisJICAgIGlmIChjICE9IEVPRikgeworCQl3aGlsZSAoKGMgPSBuZXh0X2NoYXIoKSkgIT0gc2VwYXJhdG9yICYmIGMgIT0gRU9GKSB7CisJCSAgICA7CisJCX0KKwkJY2ggPSBjOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwlpZiAoKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVApICYmIGMgPT0gJ1xuJykKKwkgICAgYnJlYWs7CisJaWYgKGNoID09ICdeJyAmJiBsYXN0X2NoICE9ICclJykgeworCSAgICBjaCA9IGMgPSBuZXh0X2NoYXIoKTsKKwkgICAgaWYgKGMgPT0gRU9GKQorCQlfbmNfZXJyX2Fib3J0KE1TR19OT19JTlBVVFMpOworCisJICAgIGlmICghKGlzN2JpdHMoY2gpICYmIGlzcHJpbnQoY2gpKSkgeworCQlfbmNfd2FybmluZygiSWxsZWdhbCBeIGNoYXJhY3RlciAtICclcyciLCB1bmN0cmwoY2gpKTsKKwkgICAgfQorCSAgICBpZiAoY2ggPT0gJz8nKSB7CisJCSoocHRyKyspID0gJ1wxNzcnOworCQlpZiAoX25jX3RyYWNpbmcpCisJCSAgICBfbmNfd2FybmluZygiQWxsb3cgXj8gYXMgc3lub255bSBmb3IgXFwxNzciKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKChjaCAmPSAwMzcpID09IDApCisJCSAgICBjaCA9IDEyODsKKwkJKihwdHIrKykgPSAoY2hhcikgKGNoKTsKKwkgICAgfQorCX0gZWxzZSBpZiAoY2ggPT0gJ1xcJykgeworCSAgICBjaCA9IGMgPSBuZXh0X2NoYXIoKTsKKwkgICAgaWYgKGMgPT0gRU9GKQorCQlfbmNfZXJyX2Fib3J0KE1TR19OT19JTlBVVFMpOworCisJICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7CisJCW51bWJlciA9IGNoIC0gJzAnOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCSAgICBjaCA9IGMgPSBuZXh0X2NoYXIoKTsKKwkJICAgIGlmIChjID09IEVPRikKKwkJCV9uY19lcnJfYWJvcnQoTVNHX05PX0lOUFVUUyk7CisKKwkJICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnNycpIHsKKwkJCWlmIChpc2RpZ2l0KGMpKSB7CisJCQkgICAgX25jX3dhcm5pbmcoIk5vbi1vY3RhbCBkaWdpdCBgJWMnIGluIFxcIHNlcXVlbmNlIiwgYyk7CisJCQkgICAgLyogYWxsb3cgdGhlIGRpZ2l0OyBpdCdsbCBkbyBsZXNzIGhhcm0gKi8KKwkJCX0gZWxzZSB7CisJCQkgICAgcHVzaF9iYWNrKChjaGFyKSBjKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKworCQkgICAgbnVtYmVyID0gbnVtYmVyICogOCArIGMgLSAnMCc7CisJCX0KKworCQlpZiAobnVtYmVyID09IDApCisJCSAgICBudW1iZXIgPSAwMjAwOworCQkqKHB0cisrKSA9IChjaGFyKSBudW1iZXI7CisJICAgIH0gZWxzZSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdFJzoKKwkJY2FzZSAnZSc6CisJCSAgICAqKHB0cisrKSA9ICdcMDMzJzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJ2EnOgorCQkgICAgKihwdHIrKykgPSAnXDAwNyc7CisJCSAgICBicmVhazsKKworCQljYXNlICdsJzoKKwkJY2FzZSAnbic6CisJCSAgICAqKHB0cisrKSA9ICdcbic7CisJCSAgICBicmVhazsKKworCQljYXNlICdyJzoKKwkJICAgICoocHRyKyspID0gJ1xyJzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJ2InOgorCQkgICAgKihwdHIrKykgPSAnXDAxMCc7CisJCSAgICBicmVhazsKKworCQljYXNlICdzJzoKKwkJICAgICoocHRyKyspID0gJyAnOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnZic6CisJCSAgICAqKHB0cisrKSA9ICdcMDE0JzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJ3QnOgorCQkgICAgKihwdHIrKykgPSAnXHQnOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnXFwnOgorCQkgICAgKihwdHIrKykgPSAnXFwnOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnXic6CisJCSAgICAqKHB0cisrKSA9ICdeJzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJywnOgorCQkgICAgKihwdHIrKykgPSAnLCc7CisJCSAgICBicmVhazsKKworCQljYXNlICc6JzoKKwkJICAgICoocHRyKyspID0gJzonOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnXG4nOgorCQkgICAgY29udGludWU7CisKKwkJZGVmYXVsdDoKKwkJICAgIF9uY193YXJuaW5nKCJJbGxlZ2FsIGNoYXJhY3RlciAnJXMnIGluIFxcIHNlcXVlbmNlIiwKKwkJCQl1bmN0cmwoY2gpKTsKKwkJICAgIC8qIEZBTExUSFJVICovCisJCWNhc2UgJ3wnOgorCQkgICAgKihwdHIrKykgPSAoY2hhcikgY2g7CisJCX0JCS8qIGVuZHN3aXRjaCAoY2gpICovCisJICAgIH0JCQkvKiBlbmRlbHNlIChjaCA8ICcwJyB8fCAgY2ggPiAnNycpICovCisJfQorCS8qIGVuZCBlbHNlIGlmIChjaCA9PSAnXFwnKSAqLworCWVsc2UgaWYgKGNoID09ICdcbicgJiYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1JTkZPKSkgeworCSAgICAvKgorCSAgICAgKiBOZXdsaW5lcyBlbWJlZGRlZCBpbiBhIHRlcm1pbmZvIHN0cmluZyBhcmUgaWdub3JlZCwgcHJvdmlkZWQKKwkgICAgICogdGhhdCB0aGUgbmV4dCBsaW5lIGJlZ2lucyB3aXRoIHdoaXRlc3BhY2UuCisJICAgICAqLworCSAgICBpZ25vcmVkID0gVFJVRTsKKwl9IGVsc2UgeworCSAgICAqKHB0cisrKSA9IChjaGFyKSBjaDsKKwl9CisKKwlpZiAoIWlnbm9yZWQpIHsKKwkgICAgaWYgKF9uY19jdXJyX2NvbCA8PSAxKSB7CisJCXB1c2hfYmFjaygoY2hhcikgY2gpOworCQljaCA9ICdcbic7CisJCWJyZWFrOworCSAgICB9CisJICAgIGxhc3RfY2ggPSBjaDsKKwkgICAgY291bnQrKzsKKwl9CisJaWdub3JlZCA9IEZBTFNFOworCisJaWYgKGNvdW50ID4gTUFYQ0FQTEVOICYmICFsb25nX3dhcm5pbmcpIHsKKwkgICAgX25jX3dhcm5pbmcoIlZlcnkgbG9uZyBzdHJpbmcgZm91bmQuICBNaXNzaW5nIHNlcGFyYXRvcj8iKTsKKwkgICAgbG9uZ193YXJuaW5nID0gVFJVRTsKKwl9CisgICAgfQkJCQkvKiBlbmQgd2hpbGUgKi8KKworICAgICpwdHIgPSAnXDAnOworCisgICAgcmV0dXJuIChjaCk7Cit9CisKKy8qCisgKglfbmNfcHVzaF90b2tlbigpCisgKgorICoJUHVzaCBhIHRva2VuIG9mIGdpdmVuIHR5cGUgc28gdGhhdCBpdCB3aWxsIGJlIHJlcmVhZCBieSB0aGUgbmV4dAorICoJZ2V0X3Rva2VuKCkgY2FsbC4KKyAqLworCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3B1c2hfdG9rZW4oaW50IHRva2NsYXNzKQoreworICAgIC8qCisgICAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBraW5kIG9mIGJvZ3VzLCBpdCB3aWxsIGZhaWwgaWYgd2UgZXZlciBkbyBtb3JlCisgICAgICogdGhhbiBvbmUgcHVzaGJhY2sgYXQgYSB0aW1lIGJldHdlZW4gZ2V0X3Rva2VuKCkgY2FsbHMuICBJdCByZWxpZXMgb24gdGhlCisgICAgICogZmFjdCB0aGF0IF9uY19jdXJyX3Rva2VuIGlzIHN0YXRpYyBzdG9yYWdlIHRoYXQgbm90aGluZyBidXQKKyAgICAgKiBfbmNfZ2V0X3Rva2VuKCkgdG91Y2hlcy4KKyAgICAgKi8KKyAgICBwdXNodHlwZSA9IHRva2NsYXNzOworICAgIGlmIChwdXNobmFtZSA9PSAwKQorCXB1c2huYW1lID0gdHlwZU1hbGxvYyhjaGFyLCBNQVhfTkFNRV9TSVpFICsgMSk7CisgICAgX25jX2dldF90eXBlKHB1c2huYW1lKTsKKworICAgIERFQlVHKDMsICgicHVzaGluZyB0b2tlbjogYCVzJywgY2xhc3MgJWQiLAorCSAgICAgICgoX25jX2N1cnJfdG9rZW4udGtfbmFtZSAhPSAwKQorCSAgICAgICA/IF9uY19jdXJyX3Rva2VuLnRrX25hbWUKKwkgICAgICAgOiAiPG51bGw+IiksCisJICAgICAgcHVzaHR5cGUpKTsKK30KKworLyoKKyAqIFBhbmljIG1vZGUgZXJyb3IgcmVjb3ZlcnkgLSBza2lwIGV2ZXJ5dGhpbmcgdW50aWwgYSAiY2giIGlzIGZvdW5kLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3BhbmljX21vZGUoY2hhciBjaCkKK3sKKyAgICBpbnQgYzsKKworICAgIGZvciAoOzspIHsKKwljID0gbmV4dF9jaGFyKCk7CisJaWYgKGMgPT0gY2gpCisJICAgIHJldHVybjsKKwlpZiAoYyA9PSBFT0YpCisJICAgIHJldHVybjsKKyAgICB9Cit9CisKKyNpZiBOT19MRUFLUworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19jb21wX3NjYW5fbGVha3Modm9pZCkKK3sKKyAgICBpZiAocHVzaG5hbWUgIT0gMCkgeworCUZyZWVBbmROdWxsKHB1c2huYW1lKTsKKyAgICB9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vZGJfaXRlcmF0b3IuYyBiL25jdXJzZXMvdGluZm8vZGJfaXRlcmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGMyYmIwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9kYl9pdGVyYXRvci5jCkBAIC0wLDAgKzEsMjI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSXRlcmF0b3JzIGZvciB0ZXJtaW5hbCBkYXRhYmFzZXMuCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGRiX2l0ZXJhdG9yLmMsdiAxLjYgMjAwNy8wNC8yMiAwMDowMDoyNiB0b20gRXhwICQiKQorCisjZGVmaW5lIEhhdmVUaWNEaXJlY3RvcnkgX25jX2dsb2JhbHMuaGF2ZV90aWNfZGlyZWN0b3J5CisjZGVmaW5lIEtlZXBUaWNEaXJlY3RvcnkgX25jX2dsb2JhbHMua2VlcF90aWNfZGlyZWN0b3J5CisjZGVmaW5lIFRpY0RpcmVjdG9yeSAgICAgX25jX2dsb2JhbHMudGljX2RpcmVjdG9yeQorCisvKgorICogUmVjb3JkIHRoZSAib2ZmaWNpYWwiIGxvY2F0aW9uIG9mIHRoZSB0ZXJtaW5mbyBkaXJlY3RvcnksIGFjY29yZGluZyB0bworICogdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIHdyaXRpbmcgdG8sIG9yIHRoZSBub3JtYWwgZGVmYXVsdCwgaWYgbm90LgorICovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdGljX2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworICAgIGlmICghS2VlcFRpY0RpcmVjdG9yeSkgeworCWlmIChwYXRoICE9IDApIHsKKwkgICAgVGljRGlyZWN0b3J5ID0gcGF0aDsKKwkgICAgSGF2ZVRpY0RpcmVjdG9yeSA9IFRSVUU7CisJfSBlbHNlIGlmICghSGF2ZVRpY0RpcmVjdG9yeSAmJiB1c2VfdGVybWluZm9fdmFycygpKSB7CisJICAgIGNoYXIgKmVudnA7CisJICAgIGlmICgoZW52cCA9IGdldGVudigiVEVSTUlORk8iKSkgIT0gMCkKKwkJcmV0dXJuIF9uY190aWNfZGlyKGVudnApOworCX0KKyAgICB9CisgICAgcmV0dXJuIFRpY0RpcmVjdG9yeTsKK30KKworLyoKKyAqIFNwZWNpYWwgZml4IHRvIHByZXZlbnQgdGhlIHRlcm1pbmZvIGRpcmVjdG9yeSBmcm9tIGJlaW5nIG1vdmVkIGFmdGVyIHRpYworICogaGFzIGNoZGlyJ2QgdG8gaXQuICBJZiB3ZSBsZXQgaXQgYmUgY2hhbmdlZCwgdGhlbiBpZiAkVEVSTUlORk8gaGFzIGEKKyAqIHJlbGF0aXZlIHBhdGgsIHdlJ2xsIGxvc2UgdHJhY2sgb2YgdGhlIGFjdHVhbCBkaXJlY3RvcnkuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfa2VlcF90aWNfZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgX25jX3RpY19kaXIocGF0aCk7CisgICAgS2VlcFRpY0RpcmVjdG9yeSA9IFRSVUU7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBsaXN0IG9mIDotc2VwYXJhdGVkIGRpcmVjdG9yaWVzLCBsb29raW5nIGZvciB0aGUgdGVybWluYWwgdHlwZS4KKyAqIFdlIGRvbid0IHVzZSBzdHJ0b2sgYmVjYXVzZSBpdCBkb2VzIG5vdCBzaG93IHVzIGVtcHR5IHRva2Vucy4KKyAqLworI2RlZmluZSBUaGlzRGJMaXN0CV9uY19nbG9iYWxzLmRiaV9saXN0CisjZGVmaW5lIFRoaXNEYlNpemUJX25jX2dsb2JhbHMuZGJpX3NpemUKKworLyoKKyAqIENsZWFudXAuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbGFzdF9kYih2b2lkKQoreworICAgIGlmIChUaGlzRGJMaXN0ICE9IDApIHsKKwlGcmVlQW5kTnVsbChUaGlzRGJMaXN0KTsKKyAgICB9CisgICAgVGhpc0RiU2l6ZSA9IDA7Cit9CisKKy8qIFRoZSBURVJNSU5GT19ESVJTIHZhbHVlLCBpZiBkZWZpbmVkIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0LCBiZWdpbnMgd2l0aCBhCisgKiAiOiIsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgVEVSTUlORk8uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK25leHRfbGlzdF9pdGVtKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50ICpvZmZzZXQpCit7CisgICAgaWYgKHNvdXJjZSAhPSAwKSB7CisJRnJlZUlmTmVlZGVkKFRoaXNEYkxpc3QpOworCVRoaXNEYkxpc3QgPSBzdHJkdXAoc291cmNlKTsKKwlUaGlzRGJTaXplID0gc3RybGVuKHNvdXJjZSk7CisgICAgfQorCisgICAgaWYgKFRoaXNEYkxpc3QgIT0gMCAmJiBUaGlzRGJTaXplICYmICpvZmZzZXQgPCBUaGlzRGJTaXplKSB7CisJc3RhdGljIGNoYXIgc3lzdGVtX2RiW10gPSBURVJNSU5GTzsKKwljaGFyICpyZXN1bHQgPSBUaGlzRGJMaXN0ICsgKm9mZnNldDsKKwljaGFyICptYXJrZXIgPSBzdHJjaHIocmVzdWx0LCBOQ1VSU0VTX1BBVEhTRVApOworCisJLyoKKwkgKiBQdXQgYSBudWxsIG9uIHRoZSBtYXJrZXIgaWYgYSBzZXBhcmF0b3Igd2FzIGZvdW5kLiAgU2V0IHRoZSBvZmZzZXQKKwkgKiB0byB0aGUgbmV4dCBwb3NpdGlvbiBhZnRlciB0aGUgbWFya2VyIHNvIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KKwkgKiBhZ2FpbiwgdXNpbmcgdGhlIGRhdGEgYXQgdGhlIG9mZnNldC4KKwkgKi8KKwlpZiAobWFya2VyID09IDApIHsKKwkgICAgKm9mZnNldCArPSBzdHJsZW4ocmVzdWx0KSArIDE7CisJICAgIG1hcmtlciA9IHJlc3VsdCArICpvZmZzZXQ7CisJfSBlbHNlIHsKKwkgICAgKm1hcmtlcisrID0gMDsKKwkgICAgKm9mZnNldCA9IG1hcmtlciAtIFRoaXNEYkxpc3Q7CisJfQorCWlmICgqcmVzdWx0ID09IDAgJiYgcmVzdWx0ICE9IChUaGlzRGJMaXN0ICsgVGhpc0RiU2l6ZSkpCisJICAgIHJlc3VsdCA9IHN5c3RlbV9kYjsKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBORVhUX0RCRCh2YXIsIG9mZnNldCkgbmV4dF9saXN0X2l0ZW0oKCpvZmZzZXQgPT0gMCkgPyB2YXIgOiAwLCBvZmZzZXQpCisKKy8qCisgKiBUaGlzIGlzIGEgc2ltcGxlIGl0ZXJhdG9yIHdoaWNoIGFsbG93cyB0aGUgY2FsbGVyIHRvIHN0ZXAgdGhyb3VnaCB0aGUKKyAqIHBvc3NpYmxlIGxvY2F0aW9ucyBmb3IgYSB0ZXJtaW5mbyBkaXJlY3RvcnkuICBuY3Vyc2VzIHVzZXMgdGhpcyB0byBmaW5kCisgKiB0ZXJtaW5mbyBmaWxlcyB0byByZWFkLgorICovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfbmV4dF9kYihEQkRJUlMgKiBzdGF0ZSwgaW50ICpvZmZzZXQpCit7CisgICAgY29uc3QgY2hhciAqcmVzdWx0OworICAgIGNoYXIgKmVudnA7CisKKyAgICB3aGlsZSAoKnN0YXRlIDwgZGJkTEFTVCkgeworCURCRElSUyBuZXh0ID0gKERCRElSUykgKChpbnQpICgqc3RhdGUpICsgMSk7CisKKwlyZXN1bHQgPSAwOworCisJc3dpdGNoICgqc3RhdGUpIHsKKwljYXNlIGRiZFRJQzoKKwkgICAgaWYgKEhhdmVUaWNEaXJlY3RvcnkpCisJCXJlc3VsdCA9IF9uY190aWNfZGlyKDApOworCSAgICBicmVhazsKKyNpZiBVU0VfREFUQUJBU0UKKwljYXNlIGRiZEVudk9uY2U6CisJICAgIGlmICh1c2VfdGVybWluZm9fdmFycygpKSB7CisJCWlmICgoZW52cCA9IGdldGVudigiVEVSTUlORk8iKSkgIT0gMCkKKwkJICAgIHJlc3VsdCA9IF9uY190aWNfZGlyKGVudnApOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgZGJkSG9tZToKKwkgICAgaWYgKHVzZV90ZXJtaW5mb192YXJzKCkpIHsKKwkJcmVzdWx0ID0gX25jX2hvbWVfdGVybWluZm8oKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIGRiZEVudkxpc3Q6CisJICAgIGlmICh1c2VfdGVybWluZm9fdmFycygpKSB7CisJCWlmICgocmVzdWx0ID0gTkVYVF9EQkQoZ2V0ZW52KCJURVJNSU5GT19ESVJTIiksIG9mZnNldCkpICE9IDApCisJCSAgICBuZXh0ID0gKnN0YXRlOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgZGJkQ2ZnTGlzdDoKKyNpZmRlZiBURVJNSU5GT19ESVJTCisJICAgIGlmICgocmVzdWx0ID0gTkVYVF9EQkQoVEVSTUlORk9fRElSUywgb2Zmc2V0KSkgIT0gMCkKKwkJbmV4dCA9ICpzdGF0ZTsKKyNlbmRpZgorCSAgICBicmVhazsKKwljYXNlIGRiZENmZ09uY2U6CisjaWZuZGVmIFRFUk1JTkZPX0RJUlMKKwkgICAgcmVzdWx0ID0gVEVSTUlORk87CisjZW5kaWYKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogVVNFX0RBVEFCQVNFICovCisjaWYgVVNFX1RFUk1DQVAKKwljYXNlIGRiZEVudk9uY2UyOgorCSAgICBpZiAodXNlX3Rlcm1pbmZvX3ZhcnMoKSkgeworCQlpZiAoKGVudnAgPSBnZXRlbnYoIlRFUk1DQVAiKSkgIT0gMCkKKwkJICAgIHJlc3VsdCA9IF9uY190aWNfZGlyKGVudnApOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgZGJkRW52TGlzdDI6CisJICAgIGlmICh1c2VfdGVybWluZm9fdmFycygpKSB7CisJCWlmICgocmVzdWx0ID0gTkVYVF9EQkQoZ2V0ZW52KCJURVJNUEFUSCIpLCBvZmZzZXQpKSAhPSAwKQorCQkgICAgbmV4dCA9ICpzdGF0ZTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIGRiZENmZ0xpc3QyOgorCSAgICBpZiAoKHJlc3VsdCA9IE5FWFRfREJEKFRFUk1QQVRILCBvZmZzZXQpKSAhPSAwKQorCQluZXh0ID0gKnN0YXRlOworCSAgICBicmVhazsKKyNlbmRpZiAvKiBVU0VfVEVSTUNBUCAqLworCWNhc2UgZGJkTEFTVDoKKwkgICAgYnJlYWs7CisJfQorCWlmICgqc3RhdGUgIT0gbmV4dCkgeworCSAgICAqc3RhdGUgPSBuZXh0OworCSAgICAqb2Zmc2V0ID0gMDsKKwkgICAgX25jX2xhc3RfZGIoKTsKKwl9CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJICAgIHJldHVybiByZXN1bHQ7CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19maXJzdF9kYihEQkRJUlMgKiBzdGF0ZSwgaW50ICpvZmZzZXQpCit7CisgICAgKnN0YXRlID0gZGJkVElDOworICAgICpvZmZzZXQgPSAwOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9kb2FsbG9jLmMgYi9uY3Vyc2VzL3RpbmZvL2RvYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJhMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9kb2FsbG9jLmMKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTggICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFdyYXBwZXIgZm9yIG1hbGxvYy9yZWFsbG9jLiAgU3RhbmRhcmQgaW1wbGVtZW50YXRpb25zIGFsbG93IHJlYWxsb2Mgd2l0aAorICogYSBudWxsIHBvaW50ZXIsIGJ1dCBvbGRlciBsaWJyYXJpZXMgbWF5IG5vdCAoZS5nLiwgU3VuT1MpLgorICoKKyAqIEFsc28gaWYgcmVhbGxvYyBmYWlscywgd2UgZGlzY2FyZCB0aGUgb2xkIG1lbW9yeSB0byBhdm9pZCBsZWFrcy4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGRvYWxsb2MuYyx2IDEuOCAyMDAyLzA4LzMxIDIxOjQ4OjExIFBoaWxpcHBlLkJsYWluIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQodm9pZCAqKQorX25jX2RvYWxsb2Modm9pZCAqb2xkcCwgc2l6ZV90IGFtb3VudCkKK3sKKyAgICB2b2lkICpuZXdwOworCisgICAgaWYgKG9sZHAgIT0gMCkgeworCWlmICgobmV3cCA9IHJlYWxsb2Mob2xkcCwgYW1vdW50KSkgPT0gMCkgeworCSAgICBmcmVlKG9sZHApOworCSAgICBlcnJubyA9IEVOT01FTTsJLyoganVzdCBpbiBjYXNlICdmcmVlJyByZXNldCAqLworCX0KKyAgICB9IGVsc2UgeworCW5ld3AgPSBtYWxsb2MoYW1vdW50KTsKKyAgICB9CisgICAgcmV0dXJuIG5ld3A7Cit9CisKKyNpZiAhSEFWRV9TVFJEVVAKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19zdHJkdXAoY29uc3QgY2hhciAqc3JjKQoreworICAgIGNoYXIgKmRzdDsKKyAgICBpZiAoc3JjICE9IDApIHsKKwlkc3QgPSB0eXBlTWFsbG9jKGNoYXIsIHN0cmxlbihzcmMpICsgMSk7CisJaWYgKGRzdCAhPSAwKSB7CisJICAgICh2b2lkKSBzdHJjcHkoZHN0LCBzcmMpOworCX0KKyAgICB9IGVsc2UgeworCWRzdCA9IDA7CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vZW50cmllcy5jIGIvbmN1cnNlcy90aW5mby9lbnRyaWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYTgzMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vZW50cmllcy5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiBlbnRyaWVzLmMsdiAxLjggMjAwOC8wOS8yNyAxMzoxMToxMCB0b20gRXhwICQiKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEVudHJ5IHF1ZXVlIGhhbmRsaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIFRoZSBlbnRyeSBsaXN0IGlzIGEgZG91Ymx5IGxpbmtlZCBsaXN0IHdpdGggTlVMTHMgdGVybWluYXRpbmcgdGhlIGxpc3RzOgorICoKKyAqCSAgLS0tLS0tLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tCisgKgkgIHwgICAgICAgfCAgIHwgICAgICAgfCAgIHwgICAgICAgfCAgIG9mZnNldAorICogICAgICAgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfAorICoJICB8ICAgLS0tLSstLT58ICAgLS0tLSstLT58ICBOVUxMIHwgICBuZXh0CisgKgkgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfAorICoJICB8ICBOVUxMIHw8LS0rLS0tLSAgIHw8LS0rLS0tLSAgIHwgICBsYXN0CisgKgkgIC0tLS0tLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0tLS0tLQorICoJICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgXgorICoJICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICoJICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICoJICAgX25jX2hlYWQgICAgICAgICAgICAgICAgX25jX3RhaWwKKyAqLworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRU5UUlkgKikgX25jX2hlYWQgPSAwOworTkNVUlNFU19FWFBPUlRfVkFSKEVOVFJZICopIF9uY190YWlsID0gMDsKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX2VudHJ5KEVOVFJZICogaGVhZHAsIFRFUk1UWVBFICp0dGVybSkKKy8qIGZyZWUgdGhlIGFsbG9jYXRlZCBzdG9yYWdlIGNvbnN1bWVkIGJ5IHRoZSBnaXZlbiBsaXN0IGVudHJ5ICovCit7CisgICAgRU5UUlkgKmVwOworCisgICAgaWYgKChlcCA9IF9uY19kZWxpbmtfZW50cnkoaGVhZHAsIHR0ZXJtKSkgIT0gMCkgeworCWZyZWUoZXApOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX2VudHJpZXMoRU5UUlkgKiBoZWFkcCkKKy8qIGZyZWUgdGhlIGFsbG9jYXRlZCBzdG9yYWdlIGNvbnN1bWVkIGJ5IGxpc3QgZW50cmllcyAqLworeworICAgICh2b2lkKSBoZWFkcDsJCS8qIHVudXNlZCAtIF9uY19oZWFkIGlzIGFsdGVyZWQgaGVyZSEgKi8KKworICAgIHdoaWxlIChfbmNfaGVhZCAhPSAwKSB7CisJX25jX2ZyZWVfdGVybXR5cGUoJihfbmNfaGVhZC0+dHRlcm0pKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKEVOVFJZICopCitfbmNfZGVsaW5rX2VudHJ5KEVOVFJZICogaGVhZHAsIFRFUk1UWVBFICp0dGVybSkKKy8qIGRlbGluayB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UgZm9yIHRoZSBnaXZlbiBsaXN0IGVudHJ5ICovCit7CisgICAgRU5UUlkgKmVwLCAqbGFzdDsKKworICAgIGZvciAobGFzdCA9IDAsIGVwID0gaGVhZHA7IGVwICE9IDA7IGxhc3QgPSBlcCwgZXAgPSBlcC0+bmV4dCkgeworCWlmICgmKGVwLT50dGVybSkgPT0gdHRlcm0pIHsKKwkgICAgaWYgKGxhc3QgIT0gMCkgeworCQlsYXN0LT5uZXh0ID0gZXAtPm5leHQ7CisJICAgIH0KKwkgICAgaWYgKGVwID09IF9uY19oZWFkKSB7CisJCV9uY19oZWFkID0gZXAtPm5leHQ7CisJICAgIH0KKwkgICAgaWYgKGVwID09IF9uY190YWlsKSB7CisJCV9uY190YWlsID0gbGFzdDsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiBlcDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19sZWFrc190aW5mbyh2b2lkKQoreworI2lmIE5PX0xFQUtTCisgICAgY2hhciAqczsKKyNlbmRpZgorCisgICAgVCgoVF9DQUxMRUQoIl9uY19mcmVlX3RpbmZvKCkiKSkpOworI2lmIE5PX0xFQUtTCisgICAgX25jX2ZyZWVfdHBhcm0oKTsKKyAgICBfbmNfdGdldGVudF9sZWFrcygpOworICAgIF9uY19mcmVlX2VudHJpZXMoX25jX2hlYWQpOworICAgIF9uY19nZXRfdHlwZSgwKTsKKyAgICBfbmNfZmlyc3RfbmFtZSgwKTsKKyAgICBfbmNfa2V5bmFtZV9sZWFrcygpOworI2lmIEJST0tFTl9MSU5LRVIgfHwgVVNFX1JFRU5UUkFOVAorICAgIF9uY19uYW1lc19sZWFrcygpOworICAgIF9uY19jb2Rlc19sZWFrcygpOworICAgIEZyZWVJZk5lZWRlZChfbmNfcHJlc2NyZWVuLnJlYWxfYWNzX21hcCk7CisjZW5kaWYKKworICAgIGlmICgocyA9IF9uY19ob21lX3Rlcm1pbmZvKCkpICE9IDApCisJZnJlZShzKTsKKyNlbmRpZiAvKiBOT19MRUFLUyAqLworICAgIHJldHVyblZvaWQ7Cit9CisKKyNpZiBOT19MRUFLUworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX3RpbmZvKGludCBjb2RlKQoreworICAgIF9uY19sZWFrc190aW5mbygpOworICAgIGV4aXQoY29kZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vZnJlZV90dHlwZS5jIGIvbmN1cnNlcy90aW5mby9mcmVlX3R0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwZmZmMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vZnJlZV90dHlwZS5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAxOTk5LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBmcmVlX3R0eXBlLmMgLS0gYWxsb2NhdGlvbiBmdW5jdGlvbnMgZm9yIFRFUk1UWVBFCisgKgorICoJX25jX2ZyZWVfdGVybXR5cGUoKQorICoJdXNlX2V4dGVuZGVkX25hbWVzKCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiBmcmVlX3R0eXBlLmMsdiAxLjEzIDIwMDYvMDYvMjUgMTA6NDY6MDIgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX3Rlcm10eXBlKFRFUk1UWVBFICpwdHIpCit7CisgICAgVCgoIl9uY19mcmVlX3Rlcm10eXBlKCVzKSIsIHB0ci0+dGVybV9uYW1lcykpOworCisgICAgRnJlZUlmTmVlZGVkKHB0ci0+c3RyX3RhYmxlKTsKKyAgICBGcmVlSWZOZWVkZWQocHRyLT5Cb29sZWFucyk7CisgICAgRnJlZUlmTmVlZGVkKHB0ci0+TnVtYmVycyk7CisgICAgRnJlZUlmTmVlZGVkKHB0ci0+U3RyaW5ncyk7CisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICBGcmVlSWZOZWVkZWQocHRyLT5leHRfc3RyX3RhYmxlKTsKKyAgICBGcmVlSWZOZWVkZWQocHRyLT5leHRfTmFtZXMpOworI2VuZGlmCisgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZW9mKFRFUk1UWVBFKSk7CisgICAgX25jX2ZyZWVfZW50cnkoX25jX2hlYWQsIHB0cik7Cit9CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworTkNVUlNFU19FWFBPUlRfVkFSKGJvb2wpIF9uY191c2VyX2RlZmluYWJsZSA9IFRSVUU7CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3VzZV9leHRlbmRlZF9uYW1lcyhib29sIGZsYWcpCit7CisgICAgaW50IG9sZGZsYWcgPSBfbmNfdXNlcl9kZWZpbmFibGU7CisKKyAgICBUKChUX0NBTExFRCgidXNlX2V4dGVuZGVkX25hbWVzKCVkKSIpLCBmbGFnKSk7CisgICAgX25jX3VzZXJfZGVmaW5hYmxlID0gZmxhZzsKKyAgICByZXR1cm5Cb29sKG9sZGZsYWcpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2dldGVudl9udW0uYyBiL25jdXJzZXMvdGluZm8vZ2V0ZW52X251bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MGNjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2dldGVudl9udW0uYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJZ2V0ZW52X251bS5jIC0tIG9idGFpbiBhIG51bWJlciBmcm9tIHRoZSBlbnZpcm9ubWVudAorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogZ2V0ZW52X251bS5jLHYgMS4zIDIwMDAvMTIvMTAgMDI6NTU6MDcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2dldGVudl9udW0oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBjaGFyICpkc3QgPSAwOworICAgIGNoYXIgKnNyYyA9IGdldGVudihuYW1lKTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKChzcmMgPT0gMCkKKwl8fCAodmFsdWUgPSBzdHJ0b2woc3JjLCAmZHN0LCAwKSkgPCAwCisJfHwgKGRzdCA9PSBzcmMpCisJfHwgKCpkc3QgIT0gJ1wwJykKKwl8fCAoaW50KSB2YWx1ZSA8IHZhbHVlKQorCXZhbHVlID0gLTE7CisKKyAgICByZXR1cm4gKGludCkgdmFsdWU7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2hhc2hlZF9kYi5jIGIvbmN1cnNlcy90aW5mby9oYXNoZWRfZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmMwNGVhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9oYXNoZWRfZGIuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAyMDA2ICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8aGFzaGVkX2RiLmg+CisKKyNpZiBVU0VfSEFTSEVEX0RCCisKK01PRFVMRV9JRCgiJElkOiBoYXNoZWRfZGIuYyx2IDEuMTMgMjAwNi8wOC8xOSAxOTo0ODozOCB0b20gRXhwICQiKQorCisjaWYgSEFTSEVEX0RCX0FQSSA+PSAyCitzdGF0aWMgREJDICpjdXJzb3I7CisjZW5kaWYKKworLyoKKyAqIE9wZW4gdGhlIGRhdGFiYXNlLgorICovCitOQ1VSU0VTX0VYUE9SVChEQiAqKQorX25jX2RiX29wZW4oY29uc3QgY2hhciAqcGF0aCwgYm9vbCBtb2RpZnkpCit7CisgICAgREIgKnJlc3VsdCA9IDA7CisKKyNpZiBIQVNIRURfREJfQVBJID49IDQKKyAgICBkYl9jcmVhdGUoJnJlc3VsdCwgTlVMTCwgMCk7CisgICAgcmVzdWx0LT5vcGVuKHJlc3VsdCwKKwkJIE5VTEwsCisJCSBwYXRoLAorCQkgTlVMTCwKKwkJIERCX0hBU0gsCisJCSBtb2RpZnkgPyBEQl9DUkVBVEUgOiBEQl9SRE9OTFksCisJCSAwNjQ0KTsKKyNlbGlmIEhBU0hFRF9EQl9BUEkgPj0gMworICAgIGRiX2NyZWF0ZSgmcmVzdWx0LCBOVUxMLCAwKTsKKyAgICByZXN1bHQtPm9wZW4ocmVzdWx0LAorCQkgcGF0aCwKKwkJIE5VTEwsCisJCSBEQl9IQVNILAorCQkgbW9kaWZ5ID8gREJfQ1JFQVRFIDogREJfUkRPTkxZLAorCQkgMDY0NCk7CisjZWxpZiBIQVNIRURfREJfQVBJID49IDIKKyAgICBpbnQgY29kZTsKKworICAgIGlmICgoY29kZSA9IGRiX29wZW4ocGF0aCwKKwkJCURCX0hBU0gsCisJCQltb2RpZnkgPyBEQl9DUkVBVEUgOiBEQl9SRE9OTFksCisJCQkwNjQ0LAorCQkJKERCX0VOViAqKSAwLAorCQkJKERCX0lORk8gKikgMCwKKwkJCSZyZXN1bHQpKSAhPSAwKSB7CisJVCgoImNhbm5vdCBvcGVuICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGNvZGUpKSk7CisJcmVzdWx0ID0gMDsKKyAgICB9IGVsc2UgeworCVQoKCJvcGVuZWQgJXMiLCBwYXRoKSk7CisgICAgfQorI2Vsc2UKKyAgICByZXN1bHQgPSBkYm9wZW4ocGF0aCwKKwkJICAgIG1vZGlmeSA/IChPX0NSRUFUIHwgT19SRFdSKSA6IE9fUkRPTkxZLAorCQkgICAgMDY0NCwKKwkJICAgIERCX0hBU0gsCisJCSAgICBOVUxMKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKwlUKCgib3BlbmVkICVzIiwgcGF0aCkpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDbG9zZSB0aGUgZGF0YWJhc2UuICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgdGhlICdkYicgaGFuZGxlIGFmdGVyIHRoaXMgY2FsbC4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2RiX2Nsb3NlKERCICogZGIpCit7CisgICAgaW50IHJlc3VsdDsKKworI2lmIEhBU0hFRF9EQl9BUEkgPj0gMgorICAgIHJlc3VsdCA9IGRiLT5jbG9zZShkYiwgMCk7CisjZWxzZQorICAgIHJlc3VsdCA9IGRiLT5jbG9zZShkYik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV3JpdGUgYSByZWNvcmQgdG8gdGhlIGRhdGFiYXNlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIEZJWE1FOiAgdGhlIEZyZWVCU0QgY2FwX21rZGIgcHJvZ3JhbSBhc3N1bWVzIHRoZSBkYXRhYmFzZSBjb3VsZCBoYXZlCisgKiBkdXBsaWNhdGVzLiAgVGhlcmUgYXBwZWFycyB0byBiZSBubyBnb29kIHJlYXNvbiBmb3IgdGhhdCAocmV2aWV3L2ZpeCkuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19kYl9wdXQoREIgKiBkYiwgREJUICoga2V5LCBEQlQgKiBkYXRhKQoreworICAgIGludCByZXN1bHQ7CisjaWYgSEFTSEVEX0RCX0FQSSA+PSAyCisgICAgLyogcmVtb3ZlIGFueSBwcmUtZXhpc3RpbmcgdmFsdWUsIHNpbmNlIHdlIGRvIG5vdCB3YW50IGR1cGxpY2F0ZXMgKi8KKyAgICAodm9pZCkgZGItPmRlbChkYiwgTlVMTCwga2V5LCAwKTsKKyAgICByZXN1bHQgPSBkYi0+cHV0KGRiLCBOVUxMLCBrZXksIGRhdGEsIERCX05PT1ZFUldSSVRFKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gZGItPnB1dChkYiwga2V5LCBkYXRhLCBSX05PT1ZFUldSSVRFKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZWFkIGEgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZGJfZ2V0KERCICogZGIsIERCVCAqIGtleSwgREJUICogZGF0YSkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZigqZGF0YSkpOworI2lmIEhBU0hFRF9EQl9BUEkgPj0gMgorICAgIHJlc3VsdCA9IGRiLT5nZXQoZGIsIE5VTEwsIGtleSwgZGF0YSwgMCk7CisjZWxzZQorICAgIHJlc3VsdCA9IGRiLT5nZXQoZGIsIGtleSwgZGF0YSwgMCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmVhZCB0aGUgZmlyc3QgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLCBpZ25vcmluZyBvcmRlci4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2RiX2ZpcnN0KERCICogZGIsIERCVCAqIGtleSwgREJUICogZGF0YSkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgbWVtc2V0KGtleSwgMCwgc2l6ZW9mKCprZXkpKTsKKyAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisjaWYgSEFTSEVEX0RCX0FQSSA+PSAyCisgICAgaWYgKChyZXN1bHQgPSBkYi0+Y3Vyc29yKGRiLCBOVUxMLCAmY3Vyc29yLCAwKSkgPT0gMCkgeworCXJlc3VsdCA9IGN1cnNvci0+Y19nZXQoY3Vyc29yLCBrZXksIGRhdGEsIERCX0ZJUlNUKTsKKyAgICB9CisjZWxzZQorICAgIHJlc3VsdCA9IGRiLT5zZXEoZGIsIGtleSwgZGF0YSwgMCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmVhZCB0aGUgbmV4dCByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UsIGlnbm9yaW5nIG9yZGVyLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZGJfbmV4dChEQiAqIGRiLCBEQlQgKiBrZXksIERCVCAqIGRhdGEpCit7CisgICAgaW50IHJlc3VsdDsKKworI2lmIEhBU0hFRF9EQl9BUEkgPj0gMgorICAgICh2b2lkKSBkYjsKKyAgICBpZiAoY3Vyc29yICE9IDApIHsKKwlyZXN1bHQgPSBjdXJzb3ItPmNfZ2V0KGN1cnNvciwga2V5LCBkYXRhLCBEQl9ORVhUKTsKKyAgICB9IGVsc2UgeworCXJlc3VsdCA9IC0xOworICAgIH0KKyNlbHNlCisgICAgcmVzdWx0ID0gZGItPnNlcShkYiwga2V5LCBkYXRhLCAwKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJlY29yZCBpcyBhIHRlcm1pbmZvIGluZGV4IHJlY29yZC4gIEluZGV4IHJlY29yZHMgYXJlIHRob3NlIHRoYXQKKyAqIGNvbnRhaW4gb25seSBhbiBhbGlhcyBwb2ludGluZyB0byBhIGxpc3Qgb2YgYWxpYXNlcy4KKyAqLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19kYl9oYXZlX2luZGV4KERCVCAqIGtleSwgREJUICogZGF0YSwgY2hhciAqKmJ1ZmZlciwgaW50ICpzaXplKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisgICAgaW50IHVzZWQgPSBkYXRhLT5zaXplIC0gMTsKKyAgICBjaGFyICpoYXZlID0gKGNoYXIgKikgZGF0YS0+ZGF0YTsKKworICAgICh2b2lkKSBrZXk7CisgICAgaWYgKCpoYXZlKysgPT0gMikgeworCXJlc3VsdCA9IFRSVUU7CisgICAgfQorICAgIC8qCisgICAgICogVXBkYXRlIHBhcmFtcyBpbiBhbnkgY2FzZSBmb3IgY29uc2lzdGVuY3kgd2l0aCBfbmNfZGJfaGF2ZV9kYXRhKCkuCisgICAgICovCisgICAgKmJ1ZmZlciA9IGhhdmU7CisgICAgKnNpemUgPSB1c2VkOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJlY29yZCBpcyB0aGUgdGVybWluZm8gZGF0YSByZWNvcmQuICBJZ25vcmUgaW5kZXggcmVjb3JkcywgZS5nLiwKKyAqIHRob3NlIHRoYXQgY29udGFpbiBvbmx5IGFuIGFsaWFzIHBvaW50aW5nIHRvIGEgbGlzdCBvZiBhbGlhc2VzLgorICovCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX2RiX2hhdmVfZGF0YShEQlQgKiBrZXksIERCVCAqIGRhdGEsIGNoYXIgKipidWZmZXIsIGludCAqc2l6ZSkKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworICAgIGludCB1c2VkID0gZGF0YS0+c2l6ZSAtIDE7CisgICAgY2hhciAqaGF2ZSA9IChjaGFyICopIGRhdGEtPmRhdGE7CisKKyAgICBpZiAoKmhhdmUrKyA9PSAwKSB7CisJaWYgKGRhdGEtPnNpemUgPiBrZXktPnNpemUKKwkgICAgJiYgSVNfVElDX01BR0lDKGhhdmUpKSB7CisJICAgIHJlc3VsdCA9IFRSVUU7CisJfQorICAgIH0KKyAgICAvKgorICAgICAqIFVwZGF0ZSBwYXJhbXMgaW4gYW55IGNhc2UgdG8gbWFrZSBpdCBzaW1wbGUgdG8gZm9sbG93IGEgaW5kZXggcmVjb3JkCisgICAgICogdG8gdGhlIGRhdGEgcmVjb3JkLgorICAgICAqLworICAgICpidWZmZXIgPSBoYXZlOworICAgICpzaXplID0gdXNlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZWxzZQorCitleHRlcm4KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaGFzaGVkX2RiKHZvaWQpOworCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2hhc2hlZF9kYih2b2lkKQoreworfQorCisjZW5kaWYgLyogVVNFX0hBU0hFRF9EQiAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9ob21lX3Rlcm1pbmZvLmMgYi9uY3Vyc2VzL3RpbmZvL2hvbWVfdGVybWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTIxYzRhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9ob21lX3Rlcm1pbmZvLmMKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWhvbWVfdGVybWluZm8uYyAtLSByZXR1cm4gdGhlICRIT01FLy50ZXJtaW5mbyBzdHJpbmcsIGV4cGFuZGVkCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBob21lX3Rlcm1pbmZvLmMsdiAxLjExIDIwMDgvMDgvMDMgMjM6NDM6MTEgdG9tIEV4cCAkIikKKworLyogbmN1cnNlcyBleHRlbnNpb24uLi5mYWxsIGJhY2sgb24gdXNlcidzIHByaXZhdGUgZGlyZWN0b3J5ICovCisKKyNkZWZpbmUgTXlCdWZmZXIgX25jX2dsb2JhbHMuaG9tZV90ZXJtaW5mbworCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfaG9tZV90ZXJtaW5mbyh2b2lkKQoreworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisjaWYgVVNFX0hPTUVfVEVSTUlORk8KKyAgICBjaGFyICpob21lOworCisgICAgaWYgKHVzZV90ZXJtaW5mb192YXJzKCkpIHsKKwlpZiAoTXlCdWZmZXIgPT0gMCkgeworCSAgICBpZiAoKGhvbWUgPSBnZXRlbnYoIkhPTUUiKSkgIT0gMCkgeworCQl1bnNpZ25lZCB3YW50ID0gKHN0cmxlbihob21lKSArIHNpemVvZihQUklWQVRFX0lORk8pKTsKKwkJTXlCdWZmZXIgPSB0eXBlTWFsbG9jKGNoYXIsIHdhbnQpOworCQlpZiAoTXlCdWZmZXIgPT0gMCkKKwkJICAgIF9uY19lcnJfYWJvcnQoTVNHX05PX01FTU9SWSk7CisJCSh2b2lkKSBzcHJpbnRmKE15QnVmZmVyLCBQUklWQVRFX0lORk8sIGhvbWUpOworCSAgICB9CisJfQorCXJlc3VsdCA9IE15QnVmZmVyOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2luaXRfa2V5dHJ5LmMgYi9uY3Vyc2VzL3RpbmZvL2luaXRfa2V5dHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZmU0ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vaW5pdF9rZXl0cnkuYwpAQCAtMCwwICsxLDExNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0ZXJtLmg+CisvKiBrZXlwYWRfeG1pdCwga2V5cGFkX2xvY2FsLCBtZXRhX29uLCBtZXRhX29mZiAqLworLyogY3Vyc29yX3Zpc2libGUsY3Vyc29yX25vcm1hbCxjdXJzb3JfaW52aXNpYmxlICovCisKKyNpbmNsdWRlIDx0aWMuaD4JCS8qIHN0cnVjdCB0aW5mb19ma2V5cyAqLworCisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogaW5pdF9rZXl0cnkuYyx2IDEuMTIgMjAwOC8wNS8yNCAyMTo0NDo1MSB0b20gRXhwICQiKQorCisvKgorKiogICAgICBfbmNfaW5pdF9rZXl0cnkoKQorKioKKyoqICAgICAgQ29uc3RydWN0IHRoZSB0cnkgZm9yIHRoZSBjdXJyZW50IHRlcm1pbmFsJ3Mga2V5cGFkIGtleXMuCisqKgorKi8KKworLyoKKyAqIEludGVybmFsIGVudHJ5cG9pbnRzIHVzZSBTQ1JFRU4qIHBhcmFtZXRlciB0byBvYnRhaW4gY2FwYWJpbGl0aWVzIHJhdGhlcgorICogdGhhbiBjdXJfdGVybS4KKyAqLworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgKHNwLT5fdGVybSktPnR5cGUuCisKKyNpZglCUk9LRU5fTElOS0VSCisjdW5kZWYJX25jX3RpbmZvX2ZrZXlzCisjZW5kaWYKKworLyogTElOVF9QUkVQUk8KKyNpZiAwKi8KKyNpbmNsdWRlIDxpbml0X2tleXRyeS5oPgorLyogTElOVF9QUkVQUk8KKyNlbmRpZiovCisKKyNpZglCUk9LRU5fTElOS0VSCitjb25zdCBzdHJ1Y3QgdGluZm9fZmtleXMgKgorX25jX3RpbmZvX2ZrZXlzZih2b2lkKQoreworICAgIHJldHVybiBfbmNfdGluZm9fZmtleXM7Cit9CisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19pbml0X2tleXRyeShTQ1JFRU4gKnNwKQoreworICAgIHNpemVfdCBuOworCisgICAgLyogVGhlIHNwLT5fa2V5dHJ5IHZhbHVlIGlzIGluaXRpYWxpemVkIGluIG5ld3Rlcm0oKSwgd2hlcmUgdGhlIHNwCisgICAgICogc3RydWN0dXJlIGlzIGNyZWF0ZWQsIGJlY2F1c2Ugd2UgY2FuIG5vdCB0ZWxsIHdoZXJlIGtleXBhZCgpIG9yCisgICAgICogbW91c2VfYWN0aXZhdGUoKSAod2hpY2ggd2lsbCBjYWxsIGtleW9rKCkpIGFyZSBmaXJzdCBjYWxsZWQuCisgICAgICovCisKKyAgICBpZiAoc3AgIT0gMCkgeworCWZvciAobiA9IDA7IF9uY190aW5mb19ma2V5c1tuXS5jb2RlOyBuKyspIHsKKwkgICAgaWYgKF9uY190aW5mb19ma2V5c1tuXS5vZmZzZXQgPCBTVFJDT1VOVCkgeworCQkodm9pZCkgX25jX2FkZF90b190cnkoJihzcC0+X2tleXRyeSksCisJCQkJICAgICAgQ1VSIFN0cmluZ3NbX25jX3RpbmZvX2ZrZXlzW25dLm9mZnNldF0sCisJCQkJICAgICAgX25jX3RpbmZvX2ZrZXlzW25dLmNvZGUpOworCSAgICB9CisJfQorI2lmIE5DVVJTRVNfWE5BTUVTCisJLyoKKwkgKiBBZGQgYW55IG9mIHRoZSBleHRlbmRlZCBzdHJpbmdzIHRvIHRoZSB0cmllcyBpZiB0aGVpciBuYW1lIGJlZ2lucworCSAqIHdpdGggJ2snLCBpLmUuLCB0aGV5IGZvbGxvdyB0aGUgY29udmVudGlvbiBvZiBvdGhlciB0ZXJtaW5mbyBrZXkKKwkgKiBuYW1lcy4KKwkgKi8KKwl7CisJICAgIFRFUk1UWVBFICp0cCA9ICYoc3AtPl90ZXJtLT50eXBlKTsKKwkgICAgZm9yIChuID0gU1RSQ09VTlQ7IG4gPCBOVU1fU1RSSU5HUyh0cCk7ICsrbikgeworCQljb25zdCBjaGFyICpuYW1lID0gRXh0U3RybmFtZSh0cCwgbiwgc3RybmFtZXMpOworCQljaGFyICp2YWx1ZSA9IHRwLT5TdHJpbmdzW25dOworCQlpZiAobmFtZSAhPSAwCisJCSAgICAmJiAqbmFtZSA9PSAnaycKKwkJICAgICYmIHZhbHVlICE9IDAKKwkJICAgICYmIGtleV9kZWZpbmVkKHZhbHVlKSA9PSAwKSB7CisJCSAgICAodm9pZCkgX25jX2FkZF90b190cnkoJihzcC0+X2tleXRyeSksCisJCQkJCSAgdmFsdWUsCisJCQkJCSAgbiAtIFNUUkNPVU5UICsgS0VZX01BWCk7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorI2lmZGVmIFRSQUNFCisJX25jX3RyYWNlX3RyaWVzKHNwLT5fa2V5dHJ5KTsKKyNlbmRpZgorICAgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX2Fjcy5jIGIvbmN1cnNlcy90aW5mby9saWJfYWNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5ZTQ3MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbGliX2Fjcy5jCkBAIC0wLDAgKzEsMTk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGVuYV9hY3MsIGFjc19jaGFycyAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX2Fjcy5jLHYgMS4zNiAyMDA4LzA4LzE2IDE5OjIyOjU1IHRvbSBFeHAgJCIpCisKKyNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQKKyNkZWZpbmUgTXlCdWZmZXIgX25jX3ByZXNjcmVlbi5yZWFsX2Fjc19tYXAKK05DVVJTRVNfRVhQT1JUX1ZBUihjaHR5cGUgKikKK19uY19hY3NfbWFwKHZvaWQpCit7CisgICAgaWYgKE15QnVmZmVyID09IDApCisJTXlCdWZmZXIgPSB0eXBlQ2FsbG9jKGNodHlwZSwgQUNTX0xFTik7CisgICAgcmV0dXJuIE15QnVmZmVyOworfQorI3VuZGVmIE15QnVmZmVyCisjZWxzZQorTkNVUlNFU19FWFBPUlRfVkFSKGNodHlwZSkgYWNzX21hcFtBQ1NfTEVOXSA9Cit7CisgICAgMAorfTsKKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2luaXRfYWNzKHZvaWQpCit7CisgICAgY2h0eXBlICpmYWtlX21hcCA9IGFjc19tYXA7CisgICAgY2h0eXBlICpyZWFsX21hcCA9IFNQICE9IDAgPyBTUC0+X2Fjc19tYXAgOiBmYWtlX21hcDsKKyAgICBpbnQgajsKKworICAgIFQoKCJpbml0aWFsaXppbmcgQUNTIG1hcCIpKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgdXNpbmcgdGhpcyBmcm9tIGN1cnNlcyAocmF0aGVyIHRoYW4gdGVybWluZm8pLCB3ZSBhcmUgc3RvcmluZworICAgICAqIHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGluIHRoZSBTQ1JFRU4gc3RydWN0IHNvIHdlIGNhbiBkZWNpZGUgaG93IHRvCisgICAgICogcmVuZGVyIGl0LgorICAgICAqLworICAgIGlmIChyZWFsX21hcCAhPSBmYWtlX21hcCkgeworCWZvciAoaiA9IDE7IGogPCBBQ1NfTEVOOyArK2opIHsKKwkgICAgcmVhbF9tYXBbal0gPSAwOworCSAgICBmYWtlX21hcFtqXSA9IEFfQUxUQ0hBUlNFVCB8IGo7CisJICAgIGlmIChTUCkKKwkJU1AtPl9zY3JlZW5fYWNzX21hcFtqXSA9IEZBTFNFOworCX0KKyAgICB9IGVsc2UgeworCWZvciAoaiA9IDE7IGogPCBBQ1NfTEVOOyArK2opIHsKKwkgICAgcmVhbF9tYXBbal0gPSAwOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemF0aW9ucyBmb3IgYSBVTklYLWxpa2UgbXVsdGktdGVybWluYWwgZW52aXJvbm1lbnQuICBVc2UKKyAgICAgKiBBU0NJSSBjaGFycyBhbmQgY291bnQgb24gdGhlIHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIGRvIGJldHRlci4KKyAgICAgKi8KKyAgICByZWFsX21hcFsnbCddID0gJysnOwkvKiBzaG91bGQgYmUgdXBwZXIgbGVmdCBjb3JuZXIgKi8KKyAgICByZWFsX21hcFsnbSddID0gJysnOwkvKiBzaG91bGQgYmUgbG93ZXIgbGVmdCBjb3JuZXIgKi8KKyAgICByZWFsX21hcFsnayddID0gJysnOwkvKiBzaG91bGQgYmUgdXBwZXIgcmlnaHQgY29ybmVyICovCisgICAgcmVhbF9tYXBbJ2onXSA9ICcrJzsJLyogc2hvdWxkIGJlIGxvd2VyIHJpZ2h0IGNvcm5lciAqLworICAgIHJlYWxfbWFwWyd1J10gPSAnKyc7CS8qIHNob3VsZCBiZSB0ZWUgcG9pbnRpbmcgbGVmdCAqLworICAgIHJlYWxfbWFwWyd0J10gPSAnKyc7CS8qIHNob3VsZCBiZSB0ZWUgcG9pbnRpbmcgcmlnaHQgKi8KKyAgICByZWFsX21hcFsndiddID0gJysnOwkvKiBzaG91bGQgYmUgdGVlIHBvaW50aW5nIHVwICovCisgICAgcmVhbF9tYXBbJ3cnXSA9ICcrJzsJLyogc2hvdWxkIGJlIHRlZSBwb2ludGluZyBkb3duICovCisgICAgcmVhbF9tYXBbJ3EnXSA9ICctJzsJLyogc2hvdWxkIGJlIGhvcml6b250YWwgbGluZSAqLworICAgIHJlYWxfbWFwWyd4J10gPSAnfCc7CS8qIHNob3VsZCBiZSB2ZXJ0aWNhbCBsaW5lICovCisgICAgcmVhbF9tYXBbJ24nXSA9ICcrJzsJLyogc2hvdWxkIGJlIGxhcmdlIHBsdXMgb3IgY3Jvc3NvdmVyICovCisgICAgcmVhbF9tYXBbJ28nXSA9ICd+JzsJLyogc2hvdWxkIGJlIHNjYW4gbGluZSAxICovCisgICAgcmVhbF9tYXBbJ3MnXSA9ICdfJzsJLyogc2hvdWxkIGJlIHNjYW4gbGluZSA5ICovCisgICAgcmVhbF9tYXBbJ2AnXSA9ICcrJzsJLyogc2hvdWxkIGJlIGRpYW1vbmQgKi8KKyAgICByZWFsX21hcFsnYSddID0gJzonOwkvKiBzaG91bGQgYmUgY2hlY2tlciBib2FyZCAoc3RpcHBsZSkgKi8KKyAgICByZWFsX21hcFsnZiddID0gJ1wnJzsJLyogc2hvdWxkIGJlIGRlZ3JlZSBzeW1ib2wgKi8KKyAgICByZWFsX21hcFsnZyddID0gJyMnOwkvKiBzaG91bGQgYmUgcGx1cy9taW51cyAqLworICAgIHJlYWxfbWFwWyd+J10gPSAnbyc7CS8qIHNob3VsZCBiZSBidWxsZXQgKi8KKyAgICByZWFsX21hcFsnLCddID0gJzwnOwkvKiBzaG91bGQgYmUgYXJyb3cgcG9pbnRpbmcgbGVmdCAqLworICAgIHJlYWxfbWFwWycrJ10gPSAnPic7CS8qIHNob3VsZCBiZSBhcnJvdyBwb2ludGluZyByaWdodCAqLworICAgIHJlYWxfbWFwWycuJ10gPSAndic7CS8qIHNob3VsZCBiZSBhcnJvdyBwb2ludGluZyBkb3duICovCisgICAgcmVhbF9tYXBbJy0nXSA9ICdeJzsJLyogc2hvdWxkIGJlIGFycm93IHBvaW50aW5nIHVwICovCisgICAgcmVhbF9tYXBbJ2gnXSA9ICcjJzsJLyogc2hvdWxkIGJlIGJvYXJkIG9mIHNxdWFyZXMgKi8KKyAgICByZWFsX21hcFsnaSddID0gJyMnOwkvKiBzaG91bGQgYmUgbGFudGVybiBzeW1ib2wgKi8KKyAgICByZWFsX21hcFsnMCddID0gJyMnOwkvKiBzaG91bGQgYmUgc29saWQgc3F1YXJlIGJsb2NrICovCisgICAgLyogdGhlc2UgZGVmYXVsdHMgd2VyZSBpbnZlbnRlZCBmb3IgbmN1cnNlcyAqLworICAgIHJlYWxfbWFwWydwJ10gPSAnLSc7CS8qIHNob3VsZCBiZSBzY2FuIGxpbmUgMyAqLworICAgIHJlYWxfbWFwWydyJ10gPSAnLSc7CS8qIHNob3VsZCBiZSBzY2FuIGxpbmUgNyAqLworICAgIHJlYWxfbWFwWyd5J10gPSAnPCc7CS8qIHNob3VsZCBiZSBsZXNzLXRoYW4tb3ItZXF1YWwtdG8gKi8KKyAgICByZWFsX21hcFsneiddID0gJz4nOwkvKiBzaG91bGQgYmUgZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvICovCisgICAgcmVhbF9tYXBbJ3snXSA9ICcqJzsJLyogc2hvdWxkIGJlIGdyZWVrIHBpICovCisgICAgcmVhbF9tYXBbJ3wnXSA9ICchJzsJLyogc2hvdWxkIGJlIG5vdC1lcXVhbCAqLworICAgIHJlYWxfbWFwWyd9J10gPSAnZic7CS8qIHNob3VsZCBiZSBwb3VuZC1zdGVybGluZyBzeW1ib2wgKi8KKworICAgIGlmIChlbmFfYWNzICE9IE5VTEwpIHsKKwlUUFVUU19UUkFDRSgiZW5hX2FjcyIpOworCXB1dHAoZW5hX2Fjcyk7CisgICAgfQorI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisgICAgLyoKKyAgICAgKiBMaW51eCBjb25zb2xlICJzdXBwb3J0cyIgdGhlICJQQyBST00iIGNoYXJhY3RlciBzZXQgYnkgdGhlIGNvaW5jaWRlbmNlCisgICAgICogdGhhdCBzbXBjaC9ybXBjaCBhbmQgc21hY3Mvcm1hY3MgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMuICBuY3Vyc2VzIGhhcworICAgICAqIG5vIGNvZGVwYWdlIHN1cHBvcnQgKHNlZSBTQ08gTWVyZ2UgZm9yIGFuIGV4YW1wbGUpLiAgT3V0c2lkZSBvZiB0aGUKKyAgICAgKiB2YWx1ZXMgZGVmaW5lZCBpbiBhY3NjLCB0aGVyZSBhcmUgbm8gZGVmaW5pdGlvbnMgZm9yIHRoZSAiUEMgUk9NIgorICAgICAqIGNoYXJhY3RlciBzZXQgKGFzc3VtZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMgdG8gYmUgY29kZXBhZ2UgNDM3KSwgYnV0IHdlCisgICAgICogYWxsb3cgdGhvc2UgYXBwbGljYXRpb25zIHRvIHVzZSB0aG9zZSBjb2RlcG9pbnRzLgorICAgICAqCisgICAgICogdGVzdC9ibHVlLmMgdXNlcyB0aGlzIGZlYXR1cmUuCisgICAgICovCisjZGVmaW5lIFBDSF9LTFVER0UoYSxiKSAoYSAhPSAwICYmIGIgIT0gMCAmJiAhc3RyY21wKGEsYikpCisgICAgaWYgKFBDSF9LTFVER0UoZW50ZXJfcGNfY2hhcnNldF9tb2RlLCBlbnRlcl9hbHRfY2hhcnNldF9tb2RlKSAmJgorCVBDSF9LTFVER0UoZXhpdF9wY19jaGFyc2V0X21vZGUsIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSkpIHsKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAxOyBpIDwgQUNTX0xFTjsgKytpKSB7CisJICAgIGlmIChyZWFsX21hcFtpXSA9PSAwKSB7CisJCXJlYWxfbWFwW2ldID0gaTsKKwkJaWYgKHJlYWxfbWFwICE9IGZha2VfbWFwKSB7CisJCSAgICBpZiAoU1AgIT0gMCkKKwkJCVNQLT5fc2NyZWVuX2Fjc19tYXBbaV0gPSBUUlVFOworCQl9CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoYWNzX2NoYXJzICE9IE5VTEwpIHsKKwlzaXplX3QgaSA9IDA7CisJc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihhY3NfY2hhcnMpOworCisJd2hpbGUgKGkgKyAxIDwgbGVuZ3RoKSB7CisJICAgIGlmIChhY3NfY2hhcnNbaV0gIT0gMCAmJiBVQ2hhcihhY3NfY2hhcnNbaV0pIDwgQUNTX0xFTikgeworCQlyZWFsX21hcFtVQ2hhcihhY3NfY2hhcnNbaV0pXSA9IFVDaGFyKGFjc19jaGFyc1tpICsgMV0pIHwgQV9BTFRDSEFSU0VUOworCQlpZiAoU1AgIT0gMCkKKwkJICAgIFNQLT5fc2NyZWVuX2Fjc19tYXBbVUNoYXIoYWNzX2NoYXJzW2ldKV0gPSBUUlVFOworCSAgICB9CisJICAgIGkgKz0gMjsKKwl9CisgICAgfQorI2lmZGVmIFRSQUNFCisgICAgLyogU2hvdyB0aGUgZXF1aXZhbGVudCBtYXBwaW5nLCBub3RpbmcgaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlCisgICAgICogZ2l2ZW4gYXR0cmlidXRlLCB3aGV0aGVyIGJ5IHJlLW9yZGVyaW5nIG9yIGR1cGxpY2F0aW9uLgorICAgICAqLworICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX0NBTExTKSkgeworCXNpemVfdCBuLCBtOworCWNoYXIgc2hvd1tBQ1NfTEVOICogMiArIDFdOworCWZvciAobiA9IDEsIG0gPSAwOyBuIDwgQUNTX0xFTjsgbisrKSB7CisJICAgIGlmIChyZWFsX21hcFtuXSAhPSAwKSB7CisJCXNob3dbbSsrXSA9IChjaGFyKSBuOworCQlzaG93W20rK10gPSAoY2hhcikgQ2hDaGFyT2YocmVhbF9tYXBbbl0pOworCSAgICB9CisJfQorCXNob3dbbV0gPSAwOworCWlmIChhY3NfY2hhcnMgPT0gTlVMTCB8fCBzdHJjbXAoYWNzX2NoYXJzLCBzaG93KSkKKwkgICAgX3RyYWNlZigiJXMgYWNzX2NoYXJzICVzIiwKKwkJICAgIChhY3NfY2hhcnMgPT0gTlVMTCkgPyAiTlVMTCIgOiAiUkVBRCIsCisJCSAgICBfbmNfdmlzYnVmKGFjc19jaGFycykpOworCV90cmFjZWYoIiVzIGFjc19jaGFycyAlcyIsCisJCShhY3NfY2hhcnMgPT0gTlVMTCkKKwkJPyAiTlVMTCIKKwkJOiAoc3RyY21wKGFjc19jaGFycywgc2hvdykKKwkJICAgPyAiRElGRiIKKwkJICAgOiAiU0FNRSIpLAorCQlfbmNfdmlzYnVmKHNob3cpKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9saWJfYmF1ZHJhdGUuYyBiL25jdXJzZXMvdGluZm8vbGliX2JhdWRyYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljZGZkYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbGliX2JhdWRyYXRlLmMKQEAgLTAsMCArMSwyMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9iYXVkcmF0ZS5jCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGN1cl90ZXJtLCBwYWRfY2hhciAqLworI2luY2x1ZGUgPHRlcm1jYXAuaD4JCS8qIG9zcGVlZCAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworLyoKKyAqIFRoZXNlIHN5c3RlbXMgdXNlIHNpbWlsYXIgaGVhZGVyIGZpbGVzLCB3aGljaCBkZWZpbmUgQjEyMDAgYXMgMTIwMCwgZXRjLiwKKyAqIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyBVU0VfT0xEX1RUWSBzbyBCMTIwMCBpcyA5LCB3aGljaCBtYWtlcyBhbGwKKyAqIG9mIHRoZSBpbmRpY2VzIHVwIHRvIEIxMTUyMDAgZml0IG5pY2VseSBpbiBhICdzaG9ydCcsIGFsbG93aW5nIHVzIHRvIHJldGFpbgorICogb3NwZWVkJ3MgdHlwZSBmb3IgY29tcGF0aWJpbGl0eS4KKyAqLworI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDApKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pCisjdW5kZWYgQjAKKyN1bmRlZiBCNTAKKyN1bmRlZiBCNzUKKyN1bmRlZiBCMTEwCisjdW5kZWYgQjEzNAorI3VuZGVmIEIxNTAKKyN1bmRlZiBCMjAwCisjdW5kZWYgQjMwMAorI3VuZGVmIEI2MDAKKyN1bmRlZiBCMTIwMAorI3VuZGVmIEIxODAwCisjdW5kZWYgQjI0MDAKKyN1bmRlZiBCNDgwMAorI3VuZGVmIEI5NjAwCisjdW5kZWYgQjE5MjAwCisjdW5kZWYgRVhUQQorI3VuZGVmIEIzODQwMAorI3VuZGVmIEVYVEIKKyN1bmRlZiBCNTc2MDAKKyN1bmRlZiBCMTE1MjAwCisjdW5kZWYgQjIzMDQwMAorI3VuZGVmIEI0NjA4MDAKKyN1bmRlZiBCOTIxNjAwCisjZGVmaW5lIFVTRV9PTERfVFRZCisjaW5jbHVkZSA8c3lzL3R0eWRldi5oPgorI2Vsc2UKKyN1bmRlZiBVU0VfT0xEX1RUWQorI2VuZGlmIC8qIFVTRV9PTERfVFRZICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfYmF1ZHJhdGUuYyx2IDEuMjcgMjAwOC8wNi8yOCAxNToxOToyNCB0b20gRXhwICQiKQorCisvKgorICoJaW50CisgKgliYXVkcmF0ZSgpCisgKgorICoJUmV0dXJucyB0aGUgY3VycmVudCB0ZXJtaW5hbCdzIGJhdWQgcmF0ZS4KKyAqCisgKi8KKworc3RydWN0IHNwZWVkIHsKKyAgICBpbnQgczsJCQkvKiB2YWx1ZSBmb3IgJ29zcGVlZCcgaXMgYW4gaW5kZXggKi8KKyAgICBpbnQgc3A7CQkJLyogdGhlIGFjdHVhbCBzcGVlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzcGVlZCBjb25zdCBzcGVlZHNbXSA9Cit7CisgICAge0IwLCAwfSwKKyAgICB7QjUwLCA1MH0sCisgICAge0I3NSwgNzV9LAorICAgIHtCMTEwLCAxMTB9LAorICAgIHtCMTM0LCAxMzR9LAorICAgIHtCMTUwLCAxNTB9LAorICAgIHtCMjAwLCAyMDB9LAorICAgIHtCMzAwLCAzMDB9LAorICAgIHtCNjAwLCA2MDB9LAorICAgIHtCMTIwMCwgMTIwMH0sCisgICAge0IxODAwLCAxODAwfSwKKyAgICB7QjI0MDAsIDI0MDB9LAorICAgIHtCNDgwMCwgNDgwMH0sCisgICAge0I5NjAwLCA5NjAwfSwKKyNpZmRlZiBCMTkyMDAKKyAgICB7QjE5MjAwLCAxOTIwMH0sCisjZWxzZQorI2lmZGVmIEVYVEEKKyAgICB7RVhUQSwgMTkyMDB9LAorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBCMzg0MDAKKyAgICB7QjM4NDAwLCAzODQwMH0sCisjZWxzZQorI2lmZGVmIEVYVEIKKyAgICB7RVhUQiwgMzg0MDB9LAorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBCNTc2MDAKKyAgICB7QjU3NjAwLCA1NzYwMH0sCisjZW5kaWYKKyNpZmRlZiBCMTE1MjAwCisgICAge0IxMTUyMDAsIDExNTIwMH0sCisjZW5kaWYKKyNpZmRlZiBCMjMwNDAwCisgICAge0IyMzA0MDAsIDIzMDQwMH0sCisjZW5kaWYKKyNpZmRlZiBCNDYwODAwCisgICAge0I0NjA4MDAsIDQ2MDgwMH0sCisjZW5kaWYKKyNpZmRlZiBCOTIxNjAwCisgICAge0I5MjE2MDAsIDkyMTYwMH0sCisjZW5kaWYKK307CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19iYXVkcmF0ZShpbnQgT1NwZWVkKQoreworI2lmICFVU0VfUkVFTlRSQU5UCisgICAgc3RhdGljIGludCBsYXN0X09TcGVlZDsKKyAgICBzdGF0aWMgaW50IGxhc3RfYmF1ZHJhdGU7CisjZW5kaWYKKworICAgIGludCByZXN1bHQgPSBFUlI7CisgICAgdW5zaWduZWQgaTsKKworI2lmICFVU0VfUkVFTlRSQU5UCisgICAgaWYgKE9TcGVlZCA9PSBsYXN0X09TcGVlZCkgeworCXJlc3VsdCA9IGxhc3RfYmF1ZHJhdGU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKHJlc3VsdCA9PSBFUlIpIHsKKwlpZiAoT1NwZWVkID49IDApIHsKKwkgICAgZm9yIChpID0gMDsgaSA8IFNJWkVPRihzcGVlZHMpOyBpKyspIHsKKwkJaWYgKHNwZWVkc1tpXS5zID09IE9TcGVlZCkgeworCQkgICAgcmVzdWx0ID0gc3BlZWRzW2ldLnNwOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyNpZiAhVVNFX1JFRU5UUkFOVAorCWlmIChPU3BlZWQgPT0gbGFzdF9PU3BlZWQpIHsKKwkgICAgbGFzdF9PU3BlZWQgPSBPU3BlZWQ7CisJICAgIGxhc3RfYmF1ZHJhdGUgPSByZXN1bHQ7CisJfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiAocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX29zcGVlZChpbnQgQmF1ZFJhdGUpCit7CisgICAgaW50IHJlc3VsdCA9IDE7CisgICAgdW5zaWduZWQgaTsKKworICAgIGlmIChCYXVkUmF0ZSA+PSAwKSB7CisJZm9yIChpID0gMDsgaSA8IFNJWkVPRihzcGVlZHMpOyBpKyspIHsKKwkgICAgaWYgKHNwZWVkc1tpXS5zcCA9PSBCYXVkUmF0ZSkgeworCQlyZXN1bHQgPSBzcGVlZHNbaV0uczsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorYmF1ZHJhdGUodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgVCgoVF9DQUxMRUQoImJhdWRyYXRlKCkiKSkpOworCisgICAgLyoKKyAgICAgKiBJbiBkZWJ1Z2dpbmcsIGFsbG93IHRoZSBlbnZpcm9ubWVudCBzeW1ib2wgdG8gb3ZlcnJpZGUgd2hlbiB3ZSdyZQorICAgICAqIHJlZGlyZWN0aW5nIHRvIGEgZmlsZSwgc28gd2UgY2FuIGNvbnN0cnVjdCByZXBlYXRhYmxlIHRlc3QtY2FzZXMKKyAgICAgKiB0aGF0IHRha2UgaW50byBhY2NvdW50IGNvc3RzIHRoYXQgZGVwZW5kIG9uIGJhdWRyYXRlLgorICAgICAqLworI2lmZGVmIFRSQUNFCisgICAgaWYgKCFpc2F0dHkoZmlsZW5vKFNQID8gU1AtPl9vZnAgOiBzdGRvdXQpKQorCSYmIGdldGVudigiQkFVRFJBVEUiKSAhPSAwKSB7CisJaW50IHJldDsKKwlpZiAoKHJldCA9IF9uY19nZXRlbnZfbnVtKCJCQVVEUkFURSIpKSA8PSAwKQorCSAgICByZXQgPSA5NjAwOworCW9zcGVlZCA9IF9uY19vc3BlZWQocmV0KTsKKwlyZXR1cm5Db2RlKHJldCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworI2lmZGVmIFVTRV9PTERfVFRZCisJcmVzdWx0ID0gY2ZnZXRvc3BlZWQoJmN1cl90ZXJtLT5OdHR5Yik7CisJb3NwZWVkID0gX25jX29zcGVlZChyZXN1bHQpOworI2Vsc2UgLyogIVVTRV9PTERfVFRZICovCisjaWZkZWYgVEVSTUlPUworCW9zcGVlZCA9IGNmZ2V0b3NwZWVkKCZjdXJfdGVybS0+TnR0eWIpOworI2Vsc2UKKwlvc3BlZWQgPSBjdXJfdGVybS0+TnR0eWIuc2dfb3NwZWVkOworI2VuZGlmCisJcmVzdWx0ID0gX25jX2JhdWRyYXRlKG9zcGVlZCk7CisjZW5kaWYKKwljdXJfdGVybS0+X2JhdWRyYXRlID0gcmVzdWx0OworICAgIH0gZWxzZSB7CisJcmVzdWx0ID0gRVJSOworICAgIH0KKworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX2N1cl90ZXJtLmMgYi9uY3Vyc2VzL3RpbmZvL2xpYl9jdXJfdGVybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjU3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl9jdXJfdGVybS5jCkBAIC0wLDAgKzEsMTA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIE1vZHVsZSB0aGF0ICJvd25zIiB0aGUgJ2N1cl90ZXJtJyB2YXJpYWJsZToKKyAqCisgKglURVJNSU5BTCAqc2V0X2N1cnRlcm0oVEVSTUlOQUwgKikKKyAqCWludCBkZWxfY3VydGVybShURVJNSU5BTCAqKQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4JCS8qIFRUWSwgY3VyX3Rlcm0gKi8KKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CQkvKiBvc3BlZWQgKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jdXJfdGVybS5jLHYgMS4xOCAyMDA4LzA4LzE2IDE5OjIyOjU1IHRvbSBFeHAgJCIpCisKKyN1bmRlZiBDVVIKKyNkZWZpbmUgQ1VSIHRlcm1wLT50eXBlLgorCisjaWYgQlJPS0VOX0xJTktFUiB8fCBVU0VfUkVFTlRSQU5UCitOQ1VSU0VTX0VYUE9SVChURVJNSU5BTCAqKQorTkNVUlNFU19QVUJMSUNfVkFSKGN1cl90ZXJtKSAodm9pZCkKK3sKKyAgICByZXR1cm4gKFNQICE9IDAgJiYgU1AtPl90ZXJtICE9IDApID8gU1AtPl90ZXJtIDogX25jX3ByZXNjcmVlbi5fY3VyX3Rlcm07Cit9CisjZWxzZQorTkNVUlNFU19FWFBPUlRfVkFSKFRFUk1JTkFMICopIGN1cl90ZXJtID0gMDsKKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChURVJNSU5BTCAqKQorc2V0X2N1cnRlcm0oVEVSTUlOQUwgKiB0ZXJtcCkKK3sKKyAgICBURVJNSU5BTCAqb2xkdGVybTsKKworICAgIFQoKFRfQ0FMTEVEKCJzZXRfY3VydGVybSglcCkiKSwgdGVybXApKTsKKworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIG9sZHRlcm0gPSBjdXJfdGVybTsKKyAgICBpZiAoU1ApCisJU1AtPl90ZXJtID0gdGVybXA7CisjaWYgQlJPS0VOX0xJTktFUiB8fCBVU0VfUkVFTlRSQU5UCisgICAgX25jX3ByZXNjcmVlbi5fY3VyX3Rlcm0gPSB0ZXJtcDsKKyNlbHNlCisgICAgY3VyX3Rlcm0gPSB0ZXJtcDsKKyNlbmRpZgorICAgIGlmICh0ZXJtcCAhPSAwKSB7CisJb3NwZWVkID0gX25jX29zcGVlZCh0ZXJtcC0+X2JhdWRyYXRlKTsKKwlpZiAodGVybXAtPnR5cGUuU3RyaW5ncykgeworCSAgICBQQyA9IChjaGFyKSAoKHBhZF9jaGFyICE9IE5VTEwpID8gcGFkX2NoYXJbMF0gOiAwKTsKKwl9CisgICAgfQorICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKyAgICBUKChUX1JFVFVSTigiJXAiKSwgb2xkdGVybSkpOworICAgIHJldHVybiAob2xkdGVybSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2RlbF9jdXJ0ZXJtKFRFUk1JTkFMICogdGVybXApCit7CisgICAgaW50IHJjID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImRlbF9jdXJ0ZXJtKCVwKSIpLCB0ZXJtcCkpOworCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgaWYgKHRlcm1wICE9IDApIHsKKwlfbmNfZnJlZV90ZXJtdHlwZSgmKHRlcm1wLT50eXBlKSk7CisJRnJlZUlmTmVlZGVkKHRlcm1wLT5fdGVybW5hbWUpOworCWZyZWUodGVybXApOworCWlmICh0ZXJtcCA9PSBjdXJfdGVybSkKKwkgICAgc2V0X2N1cnRlcm0oMCk7CisJcmMgPSBPSzsKKyAgICB9CisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIHJldHVybkNvZGUocmMpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9saWJfZGF0YS5jIGIvbmN1cnNlcy90aW5mby9saWJfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NDIwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl9kYXRhLmMKQEAgLTAsMCArMSwzMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9kYXRhLmMKKyoqCisqKglDb21tb24gZGF0YSB0aGF0IG1heS9tYXkgbm90IGJlIGFsbG9jYXRlZCwgYnV0IGlzIHJlZmVyZW5jZWQgZ2xvYmFsbHkKKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9kYXRhLmMsdiAxLjUyIDIwMDgvMDgvMjMgMjI6MTY6MTUgdG9tIEV4cCAkIikKKworLyoKKyAqIE9TLzIncyBuYXRpdmUgbGlua2VyIGNvbXBsYWlucyBpZiB3ZSBkb24ndCBpbml0aWFsaXplIHB1YmxpYyBkYXRhIHdoZW4KKyAqIGNvbnN0cnVjdGluZyBhIGRsbCAocmVwb3J0ZWQgYnkgSi5KLkcuUmlwb2xsKS4KKyAqLworI2lmIFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorTkNVUlNFU19QVUJMSUNfVkFSKHN0ZHNjcikgKHZvaWQpCit7CisgICAgcmV0dXJuIFNQID8gU1AtPl9zdGRzY3IgOiAwOworfQorTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitOQ1VSU0VTX1BVQkxJQ19WQVIoY3Vyc2NyKSAodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgPyBTUC0+X2N1cnNjciA6IDA7Cit9CitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK05DVVJTRVNfUFVCTElDX1ZBUihuZXdzY3IpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IFNQLT5fbmV3c2NyIDogMDsKK30KKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoV0lORE9XICopIHN0ZHNjciA9IDA7CitOQ1VSU0VTX0VYUE9SVF9WQVIoV0lORE9XICopIGN1cnNjciA9IDA7CitOQ1VSU0VTX0VYUE9SVF9WQVIoV0lORE9XICopIG5ld3NjciA9IDA7CisjZW5kaWYKKworTkNVUlNFU19FWFBPUlRfVkFSKFNDUkVFTiAqKSBfbmNfc2NyZWVuX2NoYWluID0gMDsKKworLyoKKyAqIFRoZSB2YXJpYWJsZSAnU1AnIHdpbGwgYmUgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uIG9uIHN5c3RlbXMgdGhhdCBjYW5ub3QgbGluaworICogZGF0YS1vbmx5IG1vZHVsZXMsIHNpbmNlIGl0IGlzIHVzZWQgaW4gYSBsb3Qgb2YgcGxhY2VzIHdpdGhpbiBuY3Vyc2VzIGFuZCB3ZQorICogY2Fubm90IGd1YXJhbnRlZSB0aGF0IGFueSBhcHBsaWNhdGlvbiB3aWxsIHVzZSBhbnkgcGFydGljdWxhciBmdW5jdGlvbi4gIFdlCisgKiBwdXQgdGhlIFdJTkRPVyB2YXJpYWJsZXMgaW4gdGhpcyBtb2R1bGUsIGJlY2F1c2UgaXQgYXBwZWFycyB0aGF0IGFueQorICogYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZW0gd2lsbCBhbHNvIHVzZSAnU1AnLgorICoKKyAqIFRoaXMgbW9kdWxlIGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVmZXJlbmNlIG90aGVyIG5jdXJzZXMgbW9kdWxlcywgdG8gYXZvaWQKKyAqIG1vZHVsZSBjb3VwbGluZyB0aGF0IGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZS4KKyAqLworI2lmIEJST0tFTl9MSU5LRVIKK3N0YXRpYyBTQ1JFRU4gKm15X3NjcmVlbjsKKworTkNVUlNFU19FWFBPUlQoU0NSRUVOICopCitfbmNfc2NyZWVuKHZvaWQpCit7CisgICAgcmV0dXJuIG15X3NjcmVlbjsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2FsbG9jX3NjcmVlbih2b2lkKQoreworICAgIHJldHVybiAoKG15X3NjcmVlbiA9IHR5cGVDYWxsb2MoU0NSRUVOLCAxKSkgIT0gMCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2V0X3NjcmVlbihTQ1JFRU4gKnNwKQoreworICAgIG15X3NjcmVlbiA9IHNwOworfQorCisjZWxzZQorTkNVUlNFU19FWFBPUlRfVkFSKFNDUkVFTiAqKSBTUCA9IE5VTEw7IC8qIFNvbWUgbGlua2VycyByZXF1aXJlIGluaXRpYWxpemVkIGRhdGEuLi4gKi8KKyNlbmRpZgorLyogKklOREVOVC1PRkYqICovCisjZGVmaW5lIENIQVJTXzBzIHsgJ1wwJyB9CisKKyNkZWZpbmUgVEdFVEVOVF8wIHsgMEwsIEZBTFNFLCBOVUxMLCBOVUxMLCBOVUxMIH0KKyNkZWZpbmUgVEdFVEVOVF8wcyB7IFRHRVRFTlRfMCwgVEdFVEVOVF8wLCBUR0VURU5UXzAsIFRHRVRFTlRfMCB9CisKK05DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0dMT0JBTFMpIF9uY19nbG9iYWxzID0geworICAgIDAsCQkJCS8qIGhhdmVfc2lnd2luY2ggKi8KKyAgICAwLAkJCQkvKiBjbGVhbnVwX25lc3RlZCAqLworCisgICAgRkFMU0UsCQkJLyogaW5pdF9zaWduYWxzICovCisgICAgRkFMU0UsCQkJLyogaW5pdF9zY3JlZW4gKi8KKworICAgIE5VTEwsCQkJLyogY29tcF9zb3VyY2VuYW1lICovCisgICAgTlVMTCwJCQkvKiBjb21wX3Rlcm10eXBlICovCisKKyAgICBGQUxTRSwJCQkvKiBoYXZlX3RpY19kaXJlY3RvcnkgKi8KKyAgICBGQUxTRSwJCQkvKiBrZWVwX3RpY19kaXJlY3RvcnkgKi8KKyAgICBURVJNSU5GTywJCQkvKiB0aWNfZGlyZWN0b3J5ICovCisKKyAgICBOVUxMLAkJCS8qIGRiaV9saXN0ICovCisgICAgMCwJCQkJLyogZGJpX3NpemUgKi8KKworICAgIE5VTEwsCQkJLyogZmlyc3RfbmFtZSAqLworICAgIE5VTEwsCQkJLyoga2V5bmFtZV90YWJsZSAqLworCisgICAgMCwJCQkJLyogc2xrX2Zvcm1hdCAqLworCisgICAgTlVMTCwJCQkvKiBzYWZlcHJpbnRfYnVmICovCisgICAgMCwJCQkJLyogc2FmZXByaW50X3VzZWQgKi8KKworICAgIFRHRVRFTlRfMHMsCQkJLyogdGdldGVudF9jYWNoZSAqLworICAgIDAsCQkJCS8qIHRnZXRlbnRfaW5kZXggKi8KKyAgICAwLAkJCQkvKiB0Z2V0ZW50X3NlcXVlbmNlICovCisKKyAgICAwLAkJCQkvKiBfbmNfd2luZG93bGlzdCAqLworCisjaWYgVVNFX0hPTUVfVEVSTUlORk8KKyAgICBOVUxMLAkJCS8qIGhvbWVfdGVybWluZm8gKi8KKyNlbmRpZgorCisjaWYgIVVTRV9TQUZFX1NQUklOVEYKKyAgICAwLAkJCQkvKiBzYWZlcHJpbnRfY29scyAqLworICAgIDAsCQkJCS8qIHNhZmVwcmludF9yb3dzICovCisjZW5kaWYKKworI2lmZGVmIFRSQUNFCisgICAgRkFMU0UsCQkJLyogaW5pdF90cmFjZSAqLworICAgIENIQVJTXzBzLAkJCS8qIHRyYWNlX2ZuYW1lICovCisgICAgMCwJCQkJLyogdHJhY2VfbGV2ZWwgKi8KKyAgICBOVUxMLAkJCS8qIHRyYWNlX2ZwICovCisKKyAgICBOVUxMLAkJCS8qIHRyYWNlYXJnX2J1ZiAqLworICAgIDAsCQkJCS8qIHRyYWNlYXJnX3VzZWQgKi8KKworICAgIE5VTEwsCQkJLyogdHJhY2VidWZfcHRyICovCisgICAgMCwJCQkJLyogdHJhY2VidWZfdXNlZCAqLworCisgICAgQ0hBUlNfMHMsCQkJLyogdHJhY2VjaHJfYnVmICovCisKKyAgICBOVUxMLAkJCS8qIHRyYWNlZG1wX2J1ZiAqLworICAgIDAsCQkJCS8qIHRyYWNlZG1wX3VzZWQgKi8KKworICAgIE5VTEwsCQkJLyogdHJhY2V0cnlfYnVmICovCisgICAgMCwJCQkJLyogdHJhY2V0cnlfdXNlZCAqLworCisgICAgeyBDSEFSU18wcywgQ0hBUlNfMHMgfSwJLyogdHJhY2VhdHJfY29sb3JfYnVmICovCisgICAgMCwJCQkJLyogdHJhY2VhdHJfY29sb3Jfc2VsICovCisgICAgLTEsCQkJCS8qIHRyYWNlYXRyX2NvbG9yX2xhc3QgKi8KKworI2VuZGlmIC8qIFRSQUNFICovCisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwJLyogbXV0ZXhfY3Vyc2VzICovCisgICAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwJLyogbXV0ZXhfdHN0X3RyYWNlZiAqLworICAgIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsCS8qIG11dGV4X3RyYWNlZiAqLworICAgIDAsCQkJCS8qIG5lc3RlZF90cmFjZWYgKi8KKyAgICAwLAkJCQkvKiB1c2VfcHRocmVhZHMgKi8KKyNlbmRpZgorfTsKKworI2RlZmluZSBTVEFDS19GUkFNRV8wCXsgeyAwIH0sIDAgfQorI2RlZmluZSBTVEFDS19GUkFNRV8wcwl7IFNUQUNLX0ZSQU1FXzAgfQorI2RlZmluZSBOVU1fVkFSU18wcwl7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9CisKKyNkZWZpbmUgUklQT0ZGXzAJeyAwLDAsMCB9CisjZGVmaW5lIFJJUE9GRl8wcwl7IFJJUE9GRl8wIH0KKworTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfUFJFU0NSRUVOKSBfbmNfcHJlc2NyZWVuID0geworICAgIFRSVUUsCQkJLyogdXNlX2VudiAqLworICAgIEZBTFNFLAkJCS8qIGZpbHRlcl9tb2RlICovCisgICAgQV9OT1JNQUwsCQkJLyogcHJldmlvdXNfYXR0ciAqLworICAgIFJJUE9GRl8wcywJCQkvKiByaXBvZmYgKi8KKyAgICBOVUxMLAkJCS8qIHJzcCAqLworICAgIHsJCQkJLyogdHBhcm1fc3RhdGUgKi8KKyNpZmRlZiBUUkFDRQorCU5VTEwsCQkJLyogdG5hbWUgKi8KKyNlbmRpZgorCU5VTEwsCQkJLyogdHBhcmFtX2Jhc2UgKi8KKworCVNUQUNLX0ZSQU1FXzBzLAkJLyogc3RhY2sgKi8KKwkwLAkJCS8qIHN0YWNrX3B0ciAqLworCisJTlVMTCwJCQkvKiBvdXRfYnVmZiAqLworCTAsCQkJLyogb3V0X3NpemUgKi8KKwkwLAkJCS8qIG91dF91c2VkICovCisKKwlOVUxMLAkJCS8qIGZtdF9idWZmICovCisJMCwJCQkvKiBmbXRfc2l6ZSAqLworCisJTlVNX1ZBUlNfMHMsCQkvKiBkeW5hbWljX3ZhciAqLworCU5VTV9WQVJTXzBzLAkJLyogc3RhdGljX3ZhcnMgKi8KKyAgICB9LAorICAgIE5VTEwsCQkJLyogc2F2ZWRfdHR5ICovCisjaWYgTkNVUlNFU19OT19QQURESU5HCisgICAgRkFMU0UsCQkJLyogZmxhZyB0byBzZXQgaWYgcGFkZGluZyBkaXNhYmxlZCAgKi8KKyNlbmRpZgorI2lmIEJST0tFTl9MSU5LRVIgfHwgVVNFX1JFRU5UUkFOVAorICAgIE5VTEwsCQkJLyogcmVhbF9hY3NfbWFwICovCisgICAgMCwJCQkJLyogTElORVMgKi8KKyAgICAwLAkJCQkvKiBDT0xTICovCisgICAgMCwJCQkJLyogY3VyX3Rlcm0gKi8KKyNpZmRlZiBUUkFDRQorICAgIDBMLAkJCQkvKiBfb3V0Y2hhcnMgKi8KKyAgICBOVUxMLAkJCS8qIF90cHV0c190cmFjZSAqLworI2VuZGlmCisjZW5kaWYKK307CisvKiAqSU5ERU5ULU9OKiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFVTRV9QVEhSRUFEUworc3RhdGljIHZvaWQKK2luaXRfZ2xvYmFsX211dGV4ZXModm9pZCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IEZBTFNFOworCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworCWluaXRpYWxpemVkID0gVFJVRTsKKwlfbmNfbXV0ZXhfaW5pdCgmX25jX2dsb2JhbHMubXV0ZXhfY3Vyc2VzKTsKKwlfbmNfbXV0ZXhfaW5pdCgmX25jX2dsb2JhbHMubXV0ZXhfdHN0X3RyYWNlZik7CisJX25jX211dGV4X2luaXQoJl9uY19nbG9iYWxzLm11dGV4X3RyYWNlZik7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2luaXRfcHRocmVhZHModm9pZCkKK3sKKyAgICBpZiAoX25jX3VzZV9wdGhyZWFkcykKKwlyZXR1cm47CisjIGlmIFVTRV9XRUFLX1NZTUJPTFMKKyAgICBpZiAoKHB0aHJlYWRfbXV0ZXhfaW5pdCkgPT0gMCkKKwlyZXR1cm47CisgICAgaWYgKChwdGhyZWFkX211dGV4X2xvY2spID09IDApCisJcmV0dXJuOworICAgIGlmICgocHRocmVhZF9tdXRleF91bmxvY2spID09IDApCisJcmV0dXJuOworICAgIGlmICgocHRocmVhZF9tdXRleF90cnlsb2NrKSA9PSAwKQorCXJldHVybjsKKyAgICBpZiAoKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUpID09IDApCisJcmV0dXJuOworIyBlbmRpZgorICAgIF9uY191c2VfcHRocmVhZHMgPSAxOworICAgIGluaXRfZ2xvYmFsX211dGV4ZXMoKTsKK30KKworLyoKKyAqIFVzZSByZWN1cnNpdmUgbXV0ZXhlcyBpZiB3ZSBoYXZlIHRoZW0gLSB0aGV5J3JlIHBhcnQgb2YgVW5peDk4LgorICogRm9yIHRoZSBjYXNlcyB3aGVyZSB3ZSBkbyBub3QsIF9uY19tdXRleF90cnlsb2NrKCkgaXMgdXNlZCB0byBhdm9pZCBhCisgKiBkZWFkbG9jaywgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IGxlYWtzIGFuZCB1bmV4cGVjdGVkIGZhaWx1cmVzIHRoYXQKKyAqIG1heSBub3QgYmUgaGFuZGxlZCBieSB0eXBpY2FsIGNsaWVudHMuCisgKgorICogRklYTUUgLSBuZWVkIGNvbmZpZ3VyZSBjaGVjayBmb3IgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUsIGRlZmluZSBpdCB0bworICogUFRIUkVBRF9NVVRFWF9OT1JNQUwgaWYgbm90IHN1cHBvcnRlZC4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCAqIG9iaikKK3sKKyAgICBwdGhyZWFkX211dGV4YXR0cl90IHJlY2F0dHI7CisKKyAgICBpZiAoX25jX3VzZV9wdGhyZWFkcykgeworCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJnJlY2F0dHIpOworCXB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJnJlY2F0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKwlwdGhyZWFkX211dGV4X2luaXQob2JqLCAmcmVjYXR0cik7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKiBvYmopCit7CisgICAgaWYgKF9uY191c2VfcHRocmVhZHMgPT0gMCkKKwlyZXR1cm4gMDsKKyAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrKG9iaik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqIG9iaikKK3sKKyAgICBpZiAoX25jX3VzZV9wdGhyZWFkcyA9PSAwKQorCXJldHVybiAwOworICAgIHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sob2JqKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKiBvYmopCit7CisgICAgaWYgKF9uY191c2VfcHRocmVhZHMgPT0gMCkKKwlyZXR1cm4gMDsKKyAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sob2JqKTsKK30KKworI2lmIFVTRV9XRUFLX1NZTUJPTFMKKy8qCisgKiBOQjogc2lncHJvY21hc2soMikgaXMgZ2xvYmFsIGJ1dCBwdGhyZWFkX3NpZ21hc2soM3ApCisgKiBvbmx5IGZvciB0aGUgY2FsbGluZyB0aHJlYWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19zaWdwcm9jbWFzayhpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqIG5ld21hc2ssIHNpZ3NldF90ICogb2xkbWFzaykKK3sKKyAgICBpZiAoKHB0aHJlYWRfc2lnbWFzaykpCisJcmV0dXJuIHB0aHJlYWRfc2lnbWFzayhob3csIG5ld21hc2ssIG9sZG1hc2spOworICAgIGVsc2UKKwlyZXR1cm4gc2lncHJvY21hc2soaG93LCBuZXdtYXNrLCBvbGRtYXNrKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIFVTRV9QVEhSRUFEUyAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9saWJfaGFzX2NhcC5jIGIvbmN1cnNlcy90aW5mby9saWJfaGFzX2NhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzY2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl9oYXNfY2FwLmMKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtMjAwMyAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2hhc19jYXAuYworKioKKyoqCVRoZSByb3V0aW5lcyB0byBxdWVyeSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMKKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9oYXNfY2FwLmMsdiAxLjQgMjAwMy8xMC8yNSAxOTo0Mzo1NSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChib29sKQoraGFzX2ljKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoImhhc19pYygpIikpKTsKKyAgICByZXR1cm5Db2RlKGN1cl90ZXJtICYmCisJICAgICAgIChpbnNlcnRfY2hhcmFjdGVyIHx8IHBhcm1faWNoCisJCXx8IChlbnRlcl9pbnNlcnRfbW9kZSAmJiBleGl0X2luc2VydF9tb2RlKSkKKwkgICAgICAgJiYgKGRlbGV0ZV9jaGFyYWN0ZXIgfHwgcGFybV9kY2gpKTsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2hhc19pbCh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJoYXNfaWwoKSIpKSk7CisgICAgcmV0dXJuQ29kZShjdXJfdGVybQorCSAgICAgICAmJiAoaW5zZXJ0X2xpbmUgfHwgcGFybV9pbnNlcnRfbGluZSkKKwkgICAgICAgJiYgKGRlbGV0ZV9saW5lIHx8IHBhcm1fZGVsZXRlX2xpbmUpKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX2tlcm5lbC5jIGIvbmN1cnNlcy90aW5mby9saWJfa2VybmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkYzFlOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbGliX2tlcm5lbC5jCkBAIC0wLDAgKzEsMTU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5IDIwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfa2VybmVsLmMKKyAqCisgKglNaXNjLiBsb3ctbGV2ZWwgcm91dGluZXM6CisgKgkJZXJhc2VjaGFyKCkKKyAqCQlraWxsY2hhcigpCisgKgkJZmx1c2hpbnAoKQorICoKKyAqIFRoZSBiYXVkcmF0ZSgpIGFuZCBkZWxheV9vdXRwdXQoKSBmdW5jdGlvbnMgY291bGQgbG9naWNhbGx5IGxpdmUgaGVyZSwKKyAqIGJ1dCBhcmUgaW4gb3RoZXIgbW9kdWxlcyB0byByZWR1Y2UgdGhlIHN0YXRpYy1saW5rIHNpemUgb2YgcHJvZ3JhbXMKKyAqIHRoYXQgdXNlIG9ubHkgdGhlc2UgZmFjaWxpdGllcy4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBjdXJfdGVybSAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX2tlcm5lbC5jLHYgMS4yNCAyMDA0LzA1LzA4IDE3OjExOjIxIHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQKK19uY192ZGlzYWJsZSh2b2lkKQoreworICAgIGludCB2YWx1ZSA9IC0xOworI2lmIGRlZmluZWQoX1BPU0lYX1ZESVNBQkxFKSAmJiBIQVZFX1VOSVNURF9ICisgICAgdmFsdWUgPSBfUE9TSVhfVkRJU0FCTEU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9QQ19WRElTQUJMRSkKKyAgICBpZiAodmFsdWUgPT0gLTEpIHsKKwl2YWx1ZSA9IGZwYXRoY29uZigwLCBfUENfVkRJU0FCTEUpOworCWlmICh2YWx1ZSA9PSAtMSkgeworCSAgICB2YWx1ZSA9IDAzNzc7CisJfQorICAgIH0KKyNlbGlmIGRlZmluZWQoVkRJU0FCTEUpCisgICAgaWYgKHZhbHVlID09IC0xKQorCXZhbHVlID0gVkRJU0FCTEU7CisjZW5kaWYKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKgllcmFzZWNoYXIoKQorICoKKyAqCVJldHVybiBlcmFzZSBjaGFyYWN0ZXIgYXMgZ2l2ZW4gaW4gY3VyX3Rlcm0tPk90dHliLgorICoKKyAqLworCitOQ1VSU0VTX0VYUE9SVChjaGFyKQorZXJhc2VjaGFyKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKyAgICBUKChUX0NBTExFRCgiZXJhc2VjaGFyKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKyNpZmRlZiBURVJNSU9TCisJcmVzdWx0ID0gY3VyX3Rlcm0tPk90dHliLmNfY2NbVkVSQVNFXTsKKwlpZiAocmVzdWx0ID09IF9uY192ZGlzYWJsZSgpKQorCSAgICByZXN1bHQgPSBFUlI7CisjZWxzZQorCXJlc3VsdCA9IGN1cl90ZXJtLT5PdHR5Yi5zZ19lcmFzZTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qCisgKglraWxsY2hhcigpCisgKgorICoJUmV0dXJuIGtpbGwgY2hhcmFjdGVyIGFzIGdpdmVuIGluIGN1cl90ZXJtLT5PdHR5Yi4KKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoY2hhcikKK2tpbGxjaGFyKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKyAgICBUKChUX0NBTExFRCgia2lsbGNoYXIoKSIpKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworI2lmZGVmIFRFUk1JT1MKKwlyZXN1bHQgPSBjdXJfdGVybS0+T3R0eWIuY19jY1tWS0lMTF07CisJaWYgKHJlc3VsdCA9PSBfbmNfdmRpc2FibGUoKSkKKwkgICAgcmVzdWx0ID0gRVJSOworI2Vsc2UKKwlyZXN1bHQgPSBjdXJfdGVybS0+T3R0eWIuc2dfa2lsbDsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qCisgKglmbHVzaGlucCgpCisgKgorICoJRmx1c2ggYW55IGlucHV0IG9uIGN1cl90ZXJtLT5GaWxlZGVzCisgKgorICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2ZsdXNoaW5wKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoImZsdXNoaW5wKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKyNpZmRlZiBURVJNSU9TCisJdGNmbHVzaChjdXJfdGVybS0+RmlsZWRlcywgVENJRkxVU0gpOworI2Vsc2UKKwllcnJubyA9IDA7CisJZG8geworCSAgICBpb2N0bChjdXJfdGVybS0+RmlsZWRlcywgVElPQ0ZMVVNILCAwKTsKKwl9IHdoaWxlCisJICAgIChlcnJubyA9PSBFSU5UUik7CisjZW5kaWYKKwlpZiAoU1ApIHsKKwkgICAgU1AtPl9maWZvaGVhZCA9IC0xOworCSAgICBTUC0+X2ZpZm90YWlsID0gMDsKKwkgICAgU1AtPl9maWZvcGVlayA9IDA7CisJfQorCXJldHVybkNvZGUoT0spOworICAgIH0KKyAgICByZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl9sb25nbmFtZS5jIGIvbmN1cnNlcy90aW5mby9saWJfbG9uZ25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzAxZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9saWJfbG9uZ25hbWUuYwpAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9sb25nbmFtZS5jCisqKgorKioJVGhlIHJvdXRpbmUgbG9uZ25hbWUoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9sb25nbmFtZS5jLHYgMS45IDIwMDAvMTIvMTAgMDI6NTU6MDcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorbG9uZ25hbWUodm9pZCkKK3sKKyAgICBjaGFyICpwdHI7CisKKyAgICBUKChUX0NBTExFRCgibG9uZ25hbWUoKSIpKSk7CisKKyAgICBmb3IgKHB0ciA9IHR0eXR5cGUgKyBzdHJsZW4odHR5dHlwZSk7IHB0ciA+IHR0eXR5cGU7IHB0ci0tKQorCWlmICgqcHRyID09ICd8JykKKwkgICAgcmV0dXJuUHRyKHB0ciArIDEpOworCisgICAgcmV0dXJuUHRyKHR0eXR5cGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9saWJfbmFwbXMuYyBiL25jdXJzZXMvdGluZm8vbGliX25hcG1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3YjNiNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbGliX25hcG1zLmMKQEAgLTAsMCArMSw3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfbmFwbXMuYworICoKKyAqCVRoZSByb3V0aW5lIG5hcG1zLgorICoKKyAqCShUaGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBFcmljIFJheW1vbmQ7IGhvd2V2ZXIgZXhjZXB0IGZvcgorICoJY29tbWVudHMsIG5vbmUgb2YgdGhlIG9yaWdpbmFsIGNvZGUgcmVtYWlucyAtIFQuRGlja2V5KS4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2lmIEhBVkVfTkFOT1NMRUVQCisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CQkvKiBuZWVkZWQgZm9yIE1hY09TIFggRFAzICovCisjZW5kaWYKKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogbGliX25hcG1zLmMsdiAxLjE3IDIwMDgvMDUvMDMgMjE6MzQ6MTMgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorbmFwbXMoaW50IG1zKQoreworICAgIFQoKFRfQ0FMTEVEKCJuYXBtcyglZCkiKSwgbXMpKTsKKworI2lmIEhBVkVfTkFOT1NMRUVQCisgICAgeworCXN0cnVjdCB0aW1lc3BlYyByZXF1ZXN0LCByZW1haW5pbmc7CisJcmVxdWVzdC50dl9zZWMgPSBtcyAvIDEwMDA7CisJcmVxdWVzdC50dl9uc2VjID0gKG1zICUgMTAwMCkgKiAxMDAwMDAwOworCXdoaWxlIChuYW5vc2xlZXAoJnJlcXVlc3QsICZyZW1haW5pbmcpID09IC0xCisJICAgICAgICYmIGVycm5vID09IEVJTlRSKSB7CisJICAgIHJlcXVlc3QgPSByZW1haW5pbmc7CisJfQorICAgIH0KKyNlbHNlCisgICAgX25jX3RpbWVkX3dhaXQoMCwgMCwgbXMsIChpbnQgKikgMCBFVkVOVExJU1RfMm5kKDApKTsKKyNlbmRpZgorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl9vcHRpb25zLmMgYi9uY3Vyc2VzL3RpbmZvL2xpYl9vcHRpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiMTQ4NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbGliX29wdGlvbnMuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX29wdGlvbnMuYworKioKKyoqCVRoZSByb3V0aW5lcyB0byBoYW5kbGUgb3B0aW9uIHNldHRpbmcuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfb3B0aW9ucy5jLHYgMS41OCAyMDA4LzA4LzE2IDIxOjIwOjQ4IFdlcm5lci5GaW5rIEV4cCAkIikKKworc3RhdGljIGludCBfbmNfY3Vyc19zZXQoU0NSRUVOICosIGludCk7CitzdGF0aWMgaW50IF9uY19tZXRhKFNDUkVFTiAqLCBib29sKTsKKworTkNVUlNFU19FWFBPUlQoaW50KQoraWRsb2soV0lORE9XICp3aW4sIGJvb2wgZmxhZykKK3sKKyAgICBUKChUX0NBTExFRCgiaWRsb2soJXAsJWQpIiksIHdpbiwgZmxhZykpOworCisgICAgaWYgKHdpbikgeworCV9uY19pZGxvayA9IHdpbi0+X2lkbG9rID0gKGZsYWcgJiYgKGhhc19pbCgpIHx8IGNoYW5nZV9zY3JvbGxfcmVnaW9uKSk7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQoraWRjb2soV0lORE9XICp3aW4sIGJvb2wgZmxhZykKK3sKKyAgICBUKChUX0NBTExFRCgiaWRjb2soJXAsJWQpIiksIHdpbiwgZmxhZykpOworCisgICAgaWYgKHdpbikKKwlfbmNfaWRjb2sgPSB3aW4tPl9pZGNvayA9IChmbGFnICYmIGhhc19pYygpKTsKKworICAgIHJldHVyblZvaWQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2hhbGZkZWxheShpbnQgdCkKK3sKKyAgICBUKChUX0NBTExFRCgiaGFsZmRlbGF5KCVkKSIpLCB0KSk7CisKKyAgICBpZiAodCA8IDEgfHwgdCA+IDI1NSB8fCBTUCA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGNicmVhaygpOworICAgIFNQLT5fY2JyZWFrID0gdCArIDE7CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK25vZGVsYXkoV0lORE9XICp3aW4sIGJvb2wgZmxhZykKK3sKKyAgICBUKChUX0NBTExFRCgibm9kZWxheSglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisKKyAgICBpZiAod2luKSB7CisJaWYgKGZsYWcgPT0gVFJVRSkKKwkgICAgd2luLT5fZGVsYXkgPSAwOworCWVsc2UKKwkgICAgd2luLT5fZGVsYXkgPSAtMTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK25vdGltZW91dChXSU5ET1cgKndpbiwgYm9vbCBmKQoreworICAgIFQoKFRfQ0FMTEVEKCJub3RpbWVvdXQoJXAsJWQpIiksIHdpbiwgZikpOworCisgICAgaWYgKHdpbikgeworCXdpbi0+X25vdGltZW91dCA9IGY7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQord3RpbWVvdXQoV0lORE9XICp3aW4sIGludCBkZWxheSkKK3sKKyAgICBUKChUX0NBTExFRCgid3RpbWVvdXQoJXAsJWQpIiksIHdpbiwgZGVsYXkpKTsKKworICAgIGlmICh3aW4pIHsKKwl3aW4tPl9kZWxheSA9IGRlbGF5OworICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitrZXlwYWQoV0lORE9XICp3aW4sIGJvb2wgZmxhZykKK3sKKyAgICBUKChUX0NBTExFRCgia2V5cGFkKCVwLCVkKSIpLCB3aW4sIGZsYWcpKTsKKworICAgIGlmICh3aW4pIHsKKwl3aW4tPl91c2Vfa2V5cGFkID0gZmxhZzsKKwlyZXR1cm5Db2RlKF9uY19rZXlwYWQoU1AsIGZsYWcpKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK21ldGEoV0lORE9XICp3aW4gR0NDX1VOVVNFRCwgYm9vbCBmbGFnKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICAvKiBPaywgd2Ugc3RheSByZWxheGVkIGFuZCBkb24ndCBzaWduYWwgYW4gZXJyb3IgaWYgd2luIGlzIE5VTEwgKi8KKyAgICBUKChUX0NBTExFRCgibWV0YSglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisgICAgcmVzdWx0ID0gX25jX21ldGEoU1AsIGZsYWcpOworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyogY3Vyc19zZXQoKSBtb3ZlZCBoZXJlIHRvIG5hcnJvdyB0aGUga2VybmVsIGludGVyZmFjZSAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitjdXJzX3NldChpbnQgdmlzKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgiY3Vyc19zZXQoJWQpIiksIHZpcykpOworICAgIHJlc3VsdCA9IF9uY19jdXJzX3NldChTUCwgdmlzKTsKKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3R5cGVhaGVhZChpbnQgZmQpCit7CisgICAgVCgoVF9DQUxMRUQoInR5cGVhaGVhZCglZCkiKSwgZmQpKTsKKyAgICBpZiAoU1AgIT0gMCkgeworCVNQLT5fY2hlY2tmZCA9IGZkOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0KK30KKworLyoKKyoqICAgICAgaGFzX2tleSgpCisqKgorKiogICAgICBSZXR1cm4gVFJVRSBpZiB0aGUgY3VycmVudCB0ZXJtaW5hbCBoYXMgdGhlIGdpdmVuIGtleQorKioKKyovCisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworc3RhdGljIGludAoraGFzX2tleV9pbnRlcm5hbChpbnQga2V5Y29kZSwgVFJJRVMgKiB0cCkKK3sKKyAgICBpZiAodHAgPT0gMCkKKwlyZXR1cm4gKEZBTFNFKTsKKyAgICBlbHNlIGlmICh0cC0+dmFsdWUgPT0ga2V5Y29kZSkKKwlyZXR1cm4gKFRSVUUpOworICAgIGVsc2UKKwlyZXR1cm4gKGhhc19rZXlfaW50ZXJuYWwoa2V5Y29kZSwgdHAtPmNoaWxkKQorCQl8fCBoYXNfa2V5X2ludGVybmFsKGtleWNvZGUsIHRwLT5zaWJsaW5nKSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2hhc19rZXkoaW50IGtleWNvZGUpCit7CisgICAgVCgoVF9DQUxMRUQoImhhc19rZXkoJWQpIiksIGtleWNvZGUpKTsKKyAgICByZXR1cm5Db2RlKFNQICE9IDAgPyBoYXNfa2V5X2ludGVybmFsKGtleWNvZGUsIFNQLT5fa2V5dHJ5KSA6IEZBTFNFKTsKK30KKyNlbmRpZiAvKiBOQ1VSU0VTX0VYVF9GVU5DUyAqLworCisvKgorICogSW50ZXJuYWwgZW50cnlwb2ludHMgdXNlIFNDUkVFTiogcGFyYW1ldGVyIHRvIG9idGFpbiBjYXBhYmlsaXRpZXMgcmF0aGVyCisgKiB0aGFuIGN1cl90ZXJtLgorICovCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiAoc3AtPl90ZXJtKS0+dHlwZS4KKworc3RhdGljIGludAorX25jX3B1dHAoY29uc3QgY2hhciAqbmFtZSBHQ0NfVU5VU0VELCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgICBpbnQgcmMgPSBFUlI7CisKKyAgICBpZiAodmFsdWUpIHsKKwlUUFVUU19UUkFDRShuYW1lKTsKKwlyYyA9IHB1dHAodmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK19uY19wdXRwX2ZsdXNoKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICAgIGludCByYyA9IF9uY19wdXRwKG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocmMgIT0gRVJSKSB7CisJX25jX2ZsdXNoKCk7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyogVHVybiB0aGUga2V5cGFkIG9uL29mZgorICoKKyAqIE5vdGU6ICB3ZSBmbHVzaCB0aGUgb3V0cHV0IGJlY2F1c2UgY2hhbmdpbmcgdGhpcyBtb2RlIGNhdXNlcyBzb21lIHRlcm1pbmFscworICogdG8gZW1pdCBkaWZmZXJlbnQgZXNjYXBlIHNlcXVlbmNlcyBmb3IgY3Vyc29yIGFuZCBrZXlwYWQga2V5cy4gIElmIHdlIGRvbid0CisgKiBmbHVzaCwgdGhlbiB0aGUgbmV4dCB3Z2V0Y2ggbWF5IGdldCB0aGUgZXNjYXBlIHNlcXVlbmNlIHRoYXQgY29ycmVzcG9uZHMgdG8KKyAqIHRoZSB0ZXJtaW5hbCBzdGF0ZSBfYmVmb3JlXyBzd2l0Y2hpbmcgbW9kZXMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19rZXlwYWQoU0NSRUVOICpzcCwgYm9vbCBmbGFnKQoreworICAgIGludCByYyA9IEVSUjsKKworICAgIGlmIChzcCAhPSAwKSB7CisjaWZkZWYgVVNFX1BUSFJFQURTCisJLyoKKwkgKiBXZSBtaWdodCBoYXZlIHRoaXMgc2l0dWF0aW9uIGluIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiB0aGF0CisJICogaGFzIHdnZXRjaCgpIHJlYWRpbmcgaW4gbW9yZSB0aGFuIG9uZSB0aHJlYWQuICBwdXRwKCkgYW5kIGJlbG93CisJICogbWF5IHVzZSBTUCBleHBsaWNpdGx5LgorCSAqLworCWlmIChfbmNfdXNlX3B0aHJlYWRzICYmIHNwICE9IFNQKSB7CisJICAgIFNDUkVFTiAqc2F2ZV9zcDsKKworCSAgICAvKiBjYW5ub3QgdXNlIHVzZV9zY3JlZW4oKSwgc2luY2UgdGhhdCBpcyBub3QgaW4gdGluZm8gbGlicmFyeSAqLworCSAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKwkgICAgc2F2ZV9zcCA9IFNQOworCSAgICBfbmNfc2V0X3NjcmVlbihzcCk7CisJICAgIHJjID0gX25jX2tleXBhZChzcCwgZmxhZyk7CisJICAgIF9uY19zZXRfc2NyZWVuKHNhdmVfc3ApOworCSAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCX0gZWxzZQorI2VuZGlmCisJeworCSAgICBpZiAoZmxhZykgeworCQkodm9pZCkgX25jX3B1dHBfZmx1c2goImtleXBhZF94bWl0Iiwga2V5cGFkX3htaXQpOworCSAgICB9IGVsc2UgaWYgKCFmbGFnICYmIGtleXBhZF9sb2NhbCkgeworCQkodm9pZCkgX25jX3B1dHBfZmx1c2goImtleXBhZF9sb2NhbCIsIGtleXBhZF9sb2NhbCk7CisJICAgIH0KKworCSAgICBpZiAoZmxhZyAmJiAhc3AtPl90cmllZCkgeworCQlfbmNfaW5pdF9rZXl0cnkoc3ApOworCQlzcC0+X3RyaWVkID0gVFJVRTsKKwkgICAgfQorCSAgICBzcC0+X2tleXBhZF9vbiA9IGZsYWc7CisJICAgIHJjID0gT0s7CisJfQorICAgIH0KKyAgICByZXR1cm4gKHJjKTsKK30KKworc3RhdGljIGludAorX25jX2N1cnNfc2V0KFNDUkVFTiAqc3AsIGludCB2aXMpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJjdXJzX3NldCglZCkiKSwgdmlzKSk7CisgICAgaWYgKHNwICE9IDAgJiYgdmlzID49IDAgJiYgdmlzIDw9IDIpIHsKKwlpbnQgY3Vyc29yID0gc3AtPl9jdXJzb3I7CisKKwlpZiAodmlzID09IGN1cnNvcikgeworCSAgICByZXN1bHQgPSBjdXJzb3I7CisJfSBlbHNlIHsKKwkgICAgc3dpdGNoICh2aXMpIHsKKwkgICAgY2FzZSAyOgorCQlyZXN1bHQgPSBfbmNfcHV0cF9mbHVzaCgiY3Vyc29yX3Zpc2libGUiLCBjdXJzb3JfdmlzaWJsZSk7CisJCWJyZWFrOworCSAgICBjYXNlIDE6CisJCXJlc3VsdCA9IF9uY19wdXRwX2ZsdXNoKCJjdXJzb3Jfbm9ybWFsIiwgY3Vyc29yX25vcm1hbCk7CisJCWJyZWFrOworCSAgICBjYXNlIDA6CisJCXJlc3VsdCA9IF9uY19wdXRwX2ZsdXNoKCJjdXJzb3JfaW52aXNpYmxlIiwgY3Vyc29yX2ludmlzaWJsZSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChyZXN1bHQgIT0gRVJSKQorCQlyZXN1bHQgPSAoY3Vyc29yID09IC0xID8gMSA6IGN1cnNvcik7CisJICAgIHNwLT5fY3Vyc29yID0gdmlzOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCitzdGF0aWMgaW50CitfbmNfbWV0YShTQ1JFRU4gKnNwLCBib29sIGZsYWcpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIC8qIE9rLCB3ZSBzdGF5IHJlbGF4ZWQgYW5kIGRvbid0IHNpZ25hbCBhbiBlcnJvciBpZiB3aW4gaXMgTlVMTCAqLworCisgICAgaWYgKFNQICE9IDApIHsKKwlTUC0+X3VzZV9tZXRhID0gZmxhZzsKKworCWlmIChmbGFnKSB7CisJICAgIF9uY19wdXRwKCJtZXRhX29uIiwgbWV0YV9vbik7CisJfSBlbHNlIHsKKwkgICAgX25jX3B1dHAoIm1ldGFfb2ZmIiwgbWV0YV9vZmYpOworCX0KKwlyZXN1bHQgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX3ByaW50LmMgYi9uY3Vyc2VzL3RpbmZvL2xpYl9wcmludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl9wcmludC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9wcmludC5jLHYgMS4xNiAyMDA2LzExLzI2IDAwOjI2OjM0IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK21jcHJpbnQoY2hhciAqZGF0YSwgaW50IGxlbikKKy8qIHNoaXAgYmluYXJ5IGNoYXJhY3RlciBkYXRhIHRvIHRoZSBwcmludGVyIHZpYSBtYzQvbWM1L21jNXAgKi8KK3sKKyAgICBjaGFyICpteWJ1ZiwgKnN3aXRjaG9uOworICAgIHNpemVfdCBvbnNpemUsIG9mZnNpemUsIHJlczsKKworICAgIGVycm5vID0gMDsKKyAgICBpZiAoIWN1cl90ZXJtIHx8ICghcHJ0cl9ub24gJiYgKCFwcnRyX29uIHx8ICFwcnRyX29mZikpKSB7CisJZXJybm8gPSBFTk9ERVY7CisJcmV0dXJuIChFUlIpOworICAgIH0KKworICAgIGlmIChwcnRyX25vbikgeworCXN3aXRjaG9uID0gVFBBUk1fMShwcnRyX25vbiwgbGVuKTsKKwlvbnNpemUgPSBzdHJsZW4oc3dpdGNob24pOworCW9mZnNpemUgPSAwOworICAgIH0gZWxzZSB7CisJc3dpdGNob24gPSBwcnRyX29uOworCW9uc2l6ZSA9IHN0cmxlbihwcnRyX29uKTsKKwlvZmZzaXplID0gc3RybGVuKHBydHJfb2ZmKTsKKyAgICB9CisKKyAgICBpZiAoc3dpdGNob24gPT0gMAorCXx8IChteWJ1ZiA9IHR5cGVNYWxsb2MoY2hhciwgb25zaXplICsgbGVuICsgb2Zmc2l6ZSArIDEpKSA9PSAwKSB7CisJZXJybm8gPSBFTk9NRU07CisJcmV0dXJuIChFUlIpOworICAgIH0KKworICAgICh2b2lkKSBzdHJjcHkobXlidWYsIHN3aXRjaG9uKTsKKyAgICBtZW1jcHkobXlidWYgKyBvbnNpemUsIGRhdGEsICh1bnNpZ25lZCkgbGVuKTsKKyAgICBpZiAob2Zmc2l6ZSkKKwkodm9pZCkgc3RyY3B5KG15YnVmICsgb25zaXplICsgbGVuLCBwcnRyX29mZik7CisKKyAgICAvKgorICAgICAqIFdlJ3JlIHJlbHlpbmcgb24gdGhlIGF0b21pY2l0eSBvZiBVTklYIHdyaXRlcyBoZXJlLiAgVGhlCisgICAgICogZGFuZ2VyIGlzIHRoYXQgb3V0cHV0IGZyb20gYSByZWZyZXNoKCkgbWlnaHQgZ2V0IGludGVyc3BlcnNlZAorICAgICAqIHdpdGggdGhlIHByaW50ZXIgZGF0YSBhZnRlciB0aGUgd3JpdGUgY2FsbCByZXR1cm5zIGJ1dCBiZWZvcmUgdGhlCisgICAgICogZGF0YSBoYXMgYWN0dWFsbHkgYmVlbiBzaGlwcGVkIHRvIHRoZSB0ZXJtaW5hbC4gIElmIHRoZSB3cml0ZSgyKQorICAgICAqIG9wZXJhdGlvbiBpcyB0cnVseSBhdG9taWMgd2UncmUgcHJvdGVjdGVkIGZyb20gdGhpcy4KKyAgICAgKi8KKyAgICByZXMgPSB3cml0ZShjdXJfdGVybS0+RmlsZWRlcywgbXlidWYsIG9uc2l6ZSArIGxlbiArIG9mZnNpemUpOworCisgICAgLyoKKyAgICAgKiBCeSBnaXZpbmcgdXAgb3VyIHNjaGVkdWxlciBzbG90IGhlcmUgd2UgaW5jcmVhc2UgdGhlIG9kZHMgdGhhdCB0aGUKKyAgICAgKiBrZXJuZWwgd2lsbCBzaGlwIHRoZSBjb250aWd1b3VzIGNsaXN0IGl0ZW1zIGZyb20gdGhlIGxhc3Qgd3JpdGUKKyAgICAgKiBpbW1lZGlhdGVseS4KKyAgICAgKi8KKyAgICAodm9pZCkgc2xlZXAoMCk7CisKKyAgICBmcmVlKG15YnVmKTsKKyAgICByZXR1cm4gKHJlcyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl9yYXcuYyBiL25jdXJzZXMvdGluZm8vbGliX3Jhdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTcxODgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl9yYXcuYwpAQCAtMCwwICsxLDI5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAxOTk4IG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJcmF3LmMKKyAqCisgKglSb3V0aW5lczoKKyAqCQlyYXcoKQorICoJCWNicmVhaygpCisgKgkJbm9yYXcoKQorICoJCW5vY2JyZWFrKCkKKyAqCQlxaWZsdXNoKCkKKyAqCQlub3FpZmx1c2goKQorICoJCWludHJmbHVzaCgpCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGN1cl90ZXJtICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfcmF3LmMsdiAxLjE0IDIwMDcvMDkvMjkgMjE6NTA6MjIgdG9tIEV4cCAkIikKKworI2lmIFNWUjRfVEVSTUlPICYmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorCisjaWYgSEFWRV9TWVNfVEVSTUlPX0gKKyNpbmNsdWRlIDxzeXMvdGVybWlvLmg+CQkvKiBuZWVkZWQgZm9yIElTQyAqLworI2VuZGlmCisKKyNpZmRlZiBfX0VNWF9fCisjaW5jbHVkZSA8aW8uaD4KKyNkZWZpbmUgX25jX3NldG1vZGUobW9kZSkgc2V0bW9kZShTUC0+X2lmZCwgbW9kZSkKKyNlbHNlCisjZGVmaW5lIF9uY19zZXRtb2RlKG1vZGUpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjZGVmaW5lIENPT0tFRF9JTlBVVAkoSVhPTnxCUktJTlR8UEFSTVJLKQorCisjaWZkZWYgVFJBQ0UKKyNkZWZpbmUgQkVGT1JFKE4pCWlmIChVU0VfVFJBQ0VGKFRSQUNFX0JJVFMpKSBfbmNfbG9ja2VkX3RyYWNlZigiJXMgYmVmb3JlIGJpdHM6ICVzIiwgTiwgX25jX3RyYWNlYml0cygpKQorI2RlZmluZSBBRlRFUihOKQlpZiAoVVNFX1RSQUNFRihUUkFDRV9CSVRTKSkgX25jX2xvY2tlZF90cmFjZWYoIiVzIGFmdGVyIGJpdHM6ICVzIiwgTiwgX25jX3RyYWNlYml0cygpKQorI2Vsc2UKKyNkZWZpbmUgQkVGT1JFKHMpCisjZGVmaW5lIEFGVEVSKHMpCisjZW5kaWYgLyogVFJBQ0UgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorcmF3KHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJyYXcoKSIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgicmF3Iik7CisJX25jX3NldG1vZGUoT19CSU5BUlkpOworCisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyAmPSB+KElDQU5PTiB8IElTSUcgfCBJRVhURU4pOworCWJ1Zi5jX2lmbGFnICY9IH4oQ09PS0VEX0lOUFVUKTsKKwlidWYuY19jY1tWTUlOXSA9IDE7CisJYnVmLmNfY2NbVlRJTUVdID0gMDsKKyNlbHNlCisJYnVmLnNnX2ZsYWdzIHw9IFJBVzsKKyNlbmRpZgorCWlmICgocmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKSkgPT0gT0spIHsKKwkgICAgU1AtPl9yYXcgPSBUUlVFOworCSAgICBTUC0+X2NicmVhayA9IDE7CisJICAgIGN1cl90ZXJtLT5OdHR5YiA9IGJ1ZjsKKwl9CisJQUZURVIoInJhdyIpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2NicmVhayh2b2lkKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiY2JyZWFrKCkiKSkpOworCisgICAgaWYgKFNQICE9IDAgJiYgY3VyX3Rlcm0gIT0gMCkgeworCVRUWSBidWY7CisKKwlCRUZPUkUoImNicmVhayIpOworCV9uY19zZXRtb2RlKE9fQklOQVJZKTsKKworCWJ1ZiA9IGN1cl90ZXJtLT5OdHR5YjsKKyNpZmRlZiBURVJNSU9TCisJYnVmLmNfbGZsYWcgJj0gfklDQU5PTjsKKwlidWYuY19pZmxhZyAmPSB+SUNSTkw7CisJYnVmLmNfbGZsYWcgfD0gSVNJRzsKKwlidWYuY19jY1tWTUlOXSA9IDE7CisJYnVmLmNfY2NbVlRJTUVdID0gMDsKKyNlbHNlCisJYnVmLnNnX2ZsYWdzIHw9IENCUkVBSzsKKyNlbmRpZgorCWlmICgocmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKSkgPT0gT0spIHsKKwkgICAgU1AtPl9jYnJlYWsgPSAxOworCSAgICBjdXJfdGVybS0+TnR0eWIgPSBidWY7CisJfQorCUFGVEVSKCJjYnJlYWsiKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKgorICogTm90ZToKKyAqIHRoaXMgaW1wbGVtZW50YXRpb24gbWF5IGJlIHdyb25nLiAgU2VlIHRoZSBjb21tZW50IHVuZGVyIGludHJmbHVzaCgpLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorcWlmbHVzaCh2b2lkKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgicWlmbHVzaCgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgicWlmbHVzaCIpOworCWJ1ZiA9IGN1cl90ZXJtLT5OdHR5YjsKKyNpZmRlZiBURVJNSU9TCisJYnVmLmNfbGZsYWcgJj0gfihOT0ZMU0gpOworCXJlc3VsdCA9IF9uY19zZXRfdHR5X21vZGUoJmJ1Zik7CisjZWxzZQorCS8qIEZJWE1FICovCisjZW5kaWYKKwlpZiAocmVzdWx0ID09IE9LKQorCSAgICBjdXJfdGVybS0+TnR0eWIgPSBidWY7CisJQUZURVIoInFpZmx1c2giKTsKKyAgICB9CisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbm9yYXcodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIm5vcmF3KCkiKSkpOworCisgICAgaWYgKFNQICE9IDAgJiYgY3VyX3Rlcm0gIT0gMCkgeworCVRUWSBidWY7CisKKwlCRUZPUkUoIm5vcmF3Iik7CisJX25jX3NldG1vZGUoT19URVhUKTsKKworCWJ1ZiA9IGN1cl90ZXJtLT5OdHR5YjsKKyNpZmRlZiBURVJNSU9TCisJYnVmLmNfbGZsYWcgfD0gSVNJRyB8IElDQU5PTiB8CisJICAgIChjdXJfdGVybS0+T3R0eWIuY19sZmxhZyAmIElFWFRFTik7CisJYnVmLmNfaWZsYWcgfD0gQ09PS0VEX0lOUFVUOworI2Vsc2UKKwlidWYuc2dfZmxhZ3MgJj0gfihSQVcgfCBDQlJFQUspOworI2VuZGlmCisJaWYgKChyZXN1bHQgPSBfbmNfc2V0X3R0eV9tb2RlKCZidWYpKSA9PSBPSykgeworCSAgICBTUC0+X3JhdyA9IEZBTFNFOworCSAgICBTUC0+X2NicmVhayA9IDA7CisJICAgIGN1cl90ZXJtLT5OdHR5YiA9IGJ1ZjsKKwl9CisJQUZURVIoIm5vcmF3Iik7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbm9jYnJlYWsodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIm5vY2JyZWFrKCkiKSkpOworCisgICAgaWYgKFNQICE9IDAgJiYgY3VyX3Rlcm0gIT0gMCkgeworCVRUWSBidWY7CisKKwlCRUZPUkUoIm5vY2JyZWFrIik7CisJX25jX3NldG1vZGUoT19URVhUKTsKKworCWJ1ZiA9IGN1cl90ZXJtLT5OdHR5YjsKKyNpZmRlZiBURVJNSU9TCisJYnVmLmNfbGZsYWcgfD0gSUNBTk9OOworCWJ1Zi5jX2lmbGFnIHw9IElDUk5MOworI2Vsc2UKKwlidWYuc2dfZmxhZ3MgJj0gfkNCUkVBSzsKKyNlbmRpZgorCWlmICgocmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKSkgPT0gT0spIHsKKwkgICAgU1AtPl9jYnJlYWsgPSAwOworCSAgICBjdXJfdGVybS0+TnR0eWIgPSBidWY7CisJfQorCUFGVEVSKCJub2NicmVhayIpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qCisgKiBOb3RlOgorICogdGhpcyBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgd3JvbmcuICBTZWUgdGhlIGNvbW1lbnQgdW5kZXIgaW50cmZsdXNoKCkuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitub3FpZmx1c2godm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIm5vcWlmbHVzaCgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgibm9xaWZsdXNoIik7CisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyB8PSBOT0ZMU0g7CisJcmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKTsKKyNlbHNlCisJLyogRklYTUUgKi8KKyNlbmRpZgorCWlmIChyZXN1bHQgPT0gT0spIHsKKwkgICAgY3VyX3Rlcm0tPk50dHliID0gYnVmOworCX0KKwlBRlRFUigibm9xaWZsdXNoIik7CisgICAgfQorICAgIHJldHVyblZvaWQ7Cit9CisKKy8qCisgKiBUaGlzIGNhbGwgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgcWlmbHVzaCgpL25vcWlmbHVzaCgpIHBhaXIuICBXZSBrbm93CisgKiBmb3IgY2VydGFpbiB0aGF0IFNWcjMgaW50cmZsdXNoKCkgdHdlYWtzIHRoZSBOT0ZMU0ggYml0OyBvbiB0aGUgb3RoZXIgaGFuZCwKKyAqIHRoZSBtYXRjaCAoaW4gdGhlIFNWcjQgbWFuIHBhZ2VzKSBiZXR3ZWVuIHRoZSBsYW5ndWFnZSBkZXNjcmliaW5nIE5PRkxTSCBpbgorICogdGVybWlvKDcpIGFuZCB0aGUgbGFuZ3VhZ2UgZGVzY3JpYmluZyBxaWZsdXNoKCkvbm9xaWZsdXNoKCkgaW4KKyAqIGN1cnNfaW5vcHRzKDN4KSBpcyB0b28gZXhhY3QgdG8gYmUgY29pbmNpZGVuY2UuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ludHJmbHVzaChXSU5ET1cgKndpbiBHQ0NfVU5VU0VELCBib29sIGZsYWcpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJpbnRyZmx1c2goJWQpIiksIGZsYWcpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgiaW50cmZsdXNoIik7CisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlpZiAoZmxhZykKKwkgICAgYnVmLmNfbGZsYWcgJj0gfihOT0ZMU0gpOworCWVsc2UKKwkgICAgYnVmLmNfbGZsYWcgfD0gKE5PRkxTSCk7CisJcmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKTsKKyNlbHNlCisJLyogRklYTUUgKi8KKyNlbmRpZgorCWlmIChyZXN1bHQgPT0gT0spIHsKKwkgICAgY3VyX3Rlcm0tPk50dHliID0gYnVmOworCX0KKwlBRlRFUigiaW50cmZsdXNoIik7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX3NldHVwLmMgYi9uY3Vyc2VzL3RpbmZvL2xpYl9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZmFmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl9zZXR1cC5jCkBAIC0wLDAgKzEsNjMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUZXJtaW5hbCBzZXR1cCByb3V0aW5lcyBjb21tb24gdG8gdGVybWNhcCBhbmQgdGVybWluZm86CisgKgorICoJCXVzZV9lbnYoYm9vbCkKKyAqCQlzZXR1cHRlcm0oY2hhciAqLCBpbnQsIGludCAqKQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRpYy5oPgkJLyogZm9yIE1BWF9OQU1FX1NJWkUgKi8KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKKyNpZiBTVlI0X1RFUk1JTyAmJiAhZGVmaW5lZChfUE9TSVhfU09VUkNFKQorI2RlZmluZSBfUE9TSVhfU09VUkNFCisjZW5kaWYKKworI2lmIEhBVkVfTE9DQUxFX0gKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dGVybS5oPgkJLyogbGluZXMsIGNvbHVtbnMsIGN1cl90ZXJtICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2V0dXAuYyx2IDEuMTExIDIwMDgvMDgvMDMgMjI6NDI6MzMgdG9tIEV4cCAkIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUZXJtaW5hbCBzaXplIGNvbXB1dGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBIQVZFX1NJWkVDSEFOR0UKKyMgaWYgIWRlZmluZWQoc3VuKSB8fCAhVEVSTUlPUworIyAgaWYgSEFWRV9TWVNfSU9DVExfSAorIyAgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgTkVFRF9QVEVNX0gKKyAvKiBPbiBTQ08sIHRoZXkgbmVnbGVjdGVkIHRvIGRlZmluZSBzdHJ1Y3Qgd2luc2l6ZSBpbiB0ZXJtaW9zLmggLS0gaXQncyBvbmx5CisgICogaW4gdGVybWlvLmggYW5kIHB0ZW0uaCAodGhlIGZvcm1lciBjb25mbGljdHMgd2l0aCBvdGhlciBkZWZpbml0aW9ucykuCisgICovCisjIGluY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyMgaW5jbHVkZSA8c3lzL3B0ZW0uaD4KKyNlbmRpZgorCisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZgorCisvKgorICogU0NPIGRlZmluZXMgVElPQ0dTSVpFIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdHJ1Y3QuICBPdGhlciBzeXN0ZW1zIChTdW5PUywKKyAqIFNvbGFyaXMsIElSSVgpIGRlZmluZSBUSU9DR1dJTlNaIGFuZCBzdHJ1Y3Qgd2luc2l6ZS4KKyAqLworI2lmZGVmIFRJT0NHU0laRQorIyBkZWZpbmUgSU9DVExfV0lOU0laRSBUSU9DR1NJWkUKKyMgZGVmaW5lIFNUUlVDVF9XSU5TSVpFIHN0cnVjdCB0dHlzaXplCisjIGRlZmluZSBXSU5TSVpFX1JPV1MobikgKGludCluLnRzX2xpbmVzCisjIGRlZmluZSBXSU5TSVpFX0NPTFMobikgKGludCluLnRzX2NvbHMKKyNlbHNlCisjIGlmZGVmIFRJT0NHV0lOU1oKKyMgIGRlZmluZSBJT0NUTF9XSU5TSVpFIFRJT0NHV0lOU1oKKyMgIGRlZmluZSBTVFJVQ1RfV0lOU0laRSBzdHJ1Y3Qgd2luc2l6ZQorIyAgZGVmaW5lIFdJTlNJWkVfUk9XUyhuKSAoaW50KW4ud3Nfcm93CisjICBkZWZpbmUgV0lOU0laRV9DT0xTKG4pIChpbnQpbi53c19jb2wKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogUmVkdWNlIGV4cGxpY2l0IHVzZSBvZiAiY3VyX3Rlcm0iIGdsb2JhbCB2YXJpYWJsZS4KKyAqLworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgdGVybXAtPnR5cGUuCisKKy8qCisgKiBXcmFwIGdsb2JhbCB2YXJpYWJsZXMgaW4gdGhpcyBtb2R1bGUuCisgKi8KKyNpZiBVU0VfUkVFTlRSQU5UCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitOQ1VSU0VTX1BVQkxJQ19WQVIodHR5dHlwZSkgKHZvaWQpCit7CisgICAgc3RhdGljIGNoYXIgZW1wdHlbXSA9ICIiOworICAgIHJldHVybiBjdXJfdGVybSA/IGN1cl90ZXJtLT50eXBlLnRlcm1fbmFtZXMgOiBlbXB0eTsKK30KK05DVVJTRVNfRVhQT1JUKGludCAqKQorX25jX3B0cl9MaW5lcyh2b2lkKQoreworICAgIHJldHVybiBwdHJMaW5lcygpOworfQorTkNVUlNFU19FWFBPUlQoaW50KQorTkNVUlNFU19QVUJMSUNfVkFSKExJTkVTKSAodm9pZCkKK3sKKyAgICByZXR1cm4gKl9uY19wdHJfTGluZXMoKTsKK30KK05DVVJTRVNfRVhQT1JUKGludCAqKQorX25jX3B0cl9Db2xzKHZvaWQpCit7CisgICAgcmV0dXJuIHB0ckNvbHMoKTsKK30KK05DVVJTRVNfRVhQT1JUKGludCkKK05DVVJTRVNfUFVCTElDX1ZBUihDT0xTKSAodm9pZCkKK3sKKyAgICByZXR1cm4gKl9uY19wdHJfQ29scygpOworfQorTkNVUlNFU19FWFBPUlQoaW50KQorTkNVUlNFU19QVUJMSUNfVkFSKFRBQlNJWkUpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IFNQLT5fVEFCU0laRSA6IDg7Cit9CisjZWxzZQorTkNVUlNFU19FWFBPUlRfVkFSKGNoYXIpIHR0eXR5cGVbTkFNRVNJWkVdID0gIiI7CitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBMSU5FUyA9IDA7CitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBDT0xTID0gMDsKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIFRBQlNJWkUgPSAwOworI2VuZGlmCisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X3RhYnNpemUoaW50IHZhbHVlKQoreworICAgIGludCBjb2RlID0gT0s7CisjaWYgVVNFX1JFRU5UUkFOVAorICAgIGlmIChTUCkgeworCVNQLT5fVEFCU0laRSA9IHZhbHVlOworICAgIH0gZWxzZSB7CisJY29kZSA9IEVSUjsKKyAgICB9CisjZWxzZQorICAgIFRBQlNJWkUgPSB2YWx1ZTsKKyNlbmRpZgorICAgIHJldHVybiBjb2RlOworfQorI2VuZGlmCisKKyNpZiBVU0VfU0lHV0lOQ0gKKy8qCisgKiBJZiB3ZSBoYXZlIGEgcGVuZGluZyBTSUdXSU5DSCwgc2V0IHRoZSBmbGFnIGluIGVhY2ggc2NyZWVuLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfaGFuZGxlX3NpZ3dpbmNoKFNDUkVFTiAqc3ApCit7CisgICAgU0NSRUVOICpzY2FuOworCisgICAgaWYgKF9uY19nbG9iYWxzLmhhdmVfc2lnd2luY2gpIHsKKwlfbmNfZ2xvYmFscy5oYXZlX3NpZ3dpbmNoID0gMDsKKworCWZvciAoZWFjaF9zY3JlZW4oc2NhbikpIHsKKwkgICAgc2Nhbi0+X3NpZ193aW5jaCA9IFRSVUU7CisJfQorICAgIH0KKworICAgIHJldHVybiAoc3AgPyBzcC0+X3NpZ193aW5jaCA6IDApOworfQorCisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3VzZV9lbnYoYm9vbCBmKQoreworICAgIFQoKFRfQ0FMTEVEKCJ1c2VfZW52KCkiKSkpOworICAgIF9uY19wcmVzY3JlZW4udXNlX2VudiA9IGY7CisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19nZXRfc2NyZWVuc2l6ZShTQ1JFRU4gKnNwLCBpbnQgKmxpbmVwLCBpbnQgKmNvbHApCisvKiBPYnRhaW4gbGluZXMvY29sdW1ucyB2YWx1ZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kL29yIHRlcm1pbmZvIGVudHJ5ICovCit7CisgICAgVEVSTUlOQUwgKnRlcm1wID0gY3VyX3Rlcm07CisgICAgaW50IG15X3RhYnNpemU7CisKKyAgICAvKiBmaWd1cmUgb3V0IHRoZSBzaXplIG9mIHRoZSBzY3JlZW4gKi8KKyAgICBUKCgic2NyZWVuIHNpemU6IHRlcm1pbmZvIGxpbmVzID0gJWQgY29sdW1ucyA9ICVkIiwgbGluZXMsIGNvbHVtbnMpKTsKKworICAgIGlmICghX25jX3ByZXNjcmVlbi51c2VfZW52KSB7CisJKmxpbmVwID0gKGludCkgbGluZXM7CisJKmNvbHAgPSAoaW50KSBjb2x1bW5zOworICAgIH0gZWxzZSB7CQkJLyogdXN1YWxseSB3YW50IHRvIHF1ZXJ5IExJTkVTIGFuZCBDT0xVTU5TIGZyb20gZW52aXJvbm1lbnQgKi8KKwlpbnQgdmFsdWU7CisKKwkqbGluZXAgPSAqY29scCA9IDA7CisKKwkvKiBmaXJzdCwgbG9vayBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisJaWYgKCh2YWx1ZSA9IF9uY19nZXRlbnZfbnVtKCJMSU5FUyIpKSA+IDApIHsKKwkgICAgKmxpbmVwID0gdmFsdWU7CisJfQorCWlmICgodmFsdWUgPSBfbmNfZ2V0ZW52X251bSgiQ09MVU1OUyIpKSA+IDApIHsKKwkgICAgKmNvbHAgPSB2YWx1ZTsKKwl9CisJVCgoInNjcmVlbiBzaXplOiBlbnZpcm9ubWVudCBMSU5FUyA9ICVkIENPTFVNTlMgPSAlZCIsICpsaW5lcCwgKmNvbHApKTsKKworI2lmZGVmIF9fRU1YX18KKwlpZiAoKmxpbmVwIDw9IDAgfHwgKmNvbHAgPD0gMCkgeworCSAgICBpbnQgc2NyZWVuZGF0YVsyXTsKKwkgICAgX3NjcnNpemUoc2NyZWVuZGF0YSk7CisJICAgICpjb2xwID0gc2NyZWVuZGF0YVswXTsKKwkgICAgKmxpbmVwID0gc2NyZWVuZGF0YVsxXTsKKwkgICAgVCgoIkVNWCBzY3JlZW4gc2l6ZTogZW52aXJvbm1lbnQgTElORVMgPSAlZCBDT0xVTU5TID0gJWQiLAorCSAgICAgICAqbGluZXAsICpjb2xwKSk7CisJfQorI2VuZGlmCisjaWYgSEFWRV9TSVpFQ0hBTkdFCisJLyogaWYgdGhhdCBkaWRuJ3Qgd29yaywgbWF5YmUgd2UgY2FuIHRyeSBhc2tpbmcgdGhlIE9TICovCisJaWYgKCpsaW5lcCA8PSAwIHx8ICpjb2xwIDw9IDApIHsKKwkgICAgaWYgKGlzYXR0eShjdXJfdGVybS0+RmlsZWRlcykpIHsKKwkJU1RSVUNUX1dJTlNJWkUgc2l6ZTsKKworCQllcnJubyA9IDA7CisJCWRvIHsKKwkJICAgIGlmIChpb2N0bChjdXJfdGVybS0+RmlsZWRlcywgSU9DVExfV0lOU0laRSwgJnNpemUpIDwgMAorCQkJJiYgZXJybm8gIT0gRUlOVFIpCisJCQlnb3RvIGZhaWx1cmU7CisJCX0gd2hpbGUKKwkJICAgIChlcnJubyA9PSBFSU5UUik7CisKKwkJLyoKKwkJICogU29sYXJpcyBsZXRzIHVzZXJzIG92ZXJyaWRlIGVpdGhlciBkaW1lbnNpb24gd2l0aCBhbgorCQkgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwkJICovCisJCWlmICgqbGluZXAgPD0gMCkKKwkJICAgICpsaW5lcCA9IChzcCAhPSAwICYmIHNwLT5fZmlsdGVyZWQpID8gMSA6IFdJTlNJWkVfUk9XUyhzaXplKTsKKwkJaWYgKCpjb2xwIDw9IDApCisJCSAgICAqY29scCA9IFdJTlNJWkVfQ09MUyhzaXplKTsKKwkgICAgfQorCSAgICAvKiBGQUxMVEhSVSAqLworCSAgZmFpbHVyZTo7CisJfQorI2VuZGlmIC8qIEhBVkVfU0laRUNIQU5HRSAqLworCisJLyogaWYgd2UgY2FuJ3QgZ2V0IGR5bmFtaWMgaW5mbyBhYm91dCB0aGUgc2l6ZSwgdXNlIHN0YXRpYyAqLworCWlmICgqbGluZXAgPD0gMCkgeworCSAgICAqbGluZXAgPSAoaW50KSBsaW5lczsKKwl9CisJaWYgKCpjb2xwIDw9IDApIHsKKwkgICAgKmNvbHAgPSAoaW50KSBjb2x1bW5zOworCX0KKworCS8qIHRoZSB1bHRpbWF0ZSBmYWxsYmFjaywgYXNzdW1lIGZpeGVkIDI0eDgwIHNpemUgKi8KKwlpZiAoKmxpbmVwIDw9IDApIHsKKwkgICAgKmxpbmVwID0gMjQ7CisJfQorCWlmICgqY29scCA8PSAwKSB7CisJICAgICpjb2xwID0gODA7CisJfQorCisJLyoKKwkgKiBQdXQgdGhlIGRlcml2ZWQgdmFsdWVzIGJhY2sgaW4gdGhlIHNjcmVlbi1zaXplIGNhcHMsIHNvCisJICogdGlnZXRudW0oKSBhbmQgdGdldG51bSgpIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLgorCSAqLworCWxpbmVzID0gKHNob3J0KSAoKmxpbmVwKTsKKwljb2x1bW5zID0gKHNob3J0KSAoKmNvbHApOworICAgIH0KKworICAgIFQoKCJzY3JlZW4gc2l6ZSBpcyAlZHglZCIsICpsaW5lcCwgKmNvbHApKTsKKworICAgIGlmIChWQUxJRF9OVU1FUklDKGluaXRfdGFicykpCisJbXlfdGFic2l6ZSA9IChpbnQpIGluaXRfdGFiczsKKyAgICBlbHNlCisJbXlfdGFic2l6ZSA9IDg7CisKKyNpZiBVU0VfUkVFTlRSQU5UCisgICAgaWYgKHNwICE9IDApCisJc3AtPl9UQUJTSVpFID0gbXlfdGFic2l6ZTsKKyNlbHNlCisgICAgVEFCU0laRSA9IG15X3RhYnNpemU7CisjZW5kaWYKKyAgICBUKCgiVEFCU0laRSA9ICVkIiwgVEFCU0laRSkpOworfQorCisjaWYgVVNFX1NJWkVDSEFOR0UKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfdXBkYXRlX3NjcmVlbnNpemUoU0NSRUVOICpzcCkKK3sKKyAgICBURVJNSU5BTCAqdGVybXAgPSBjdXJfdGVybTsKKyAgICBpbnQgb2xkX2xpbmVzID0gbGluZXM7CisgICAgaW50IG5ld19saW5lczsKKyAgICBpbnQgb2xkX2NvbHMgPSBjb2x1bW5zOworICAgIGludCBuZXdfY29sczsKKworICAgIF9uY19nZXRfc2NyZWVuc2l6ZShzcCwgJm5ld19saW5lcywgJm5ld19jb2xzKTsKKworICAgIC8qCisgICAgICogU2VlIGlzX3Rlcm1fcmVzaXplZCgpIGFuZCByZXNpemV0ZXJtKCkuCisgICAgICogV2UncmUgZG9pbmcgaXQgdGhpcyB3YXkgYmVjYXVzZSB0aG9zZSBmdW5jdGlvbnMgYmVsb25nIHRvIHRoZSB1cHBlcgorICAgICAqIG5jdXJzZXMgbGlicmFyeSwgd2hpbGUgdGhpcyByZXNpZGVzIGluIHRoZSBsb3dlciB0ZXJtaW5mbyBsaWJyYXJ5LgorICAgICAqLworICAgIGlmIChzcCAhPSAwCisJJiYgc3AtPl9yZXNpemUgIT0gMCkgeworCWlmICgobmV3X2xpbmVzICE9IG9sZF9saW5lcykgfHwgKG5ld19jb2xzICE9IG9sZF9jb2xzKSkKKwkgICAgc3AtPl9yZXNpemUobmV3X2xpbmVzLCBuZXdfY29scyk7CisJc3AtPl9zaWdfd2luY2ggPSBGQUxTRTsKKyAgICB9Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUZXJtaW5hbCBzZXR1cAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIHJldF9lcnJvcihjb2RlLCBmbXQsIGFyZykJaWYgKGVycnJldCkge1wKKwkJCQkJICAgICplcnJyZXQgPSBjb2RlO1wKKwkJCQkJICAgIHJldHVybkNvZGUoRVJSKTtcCisJCQkJCX0gZWxzZSB7XAorCQkJCQkgICAgZnByaW50ZihzdGRlcnIsIGZtdCwgYXJnKTtcCisJCQkJCSAgICBleGl0KEVYSVRfRkFJTFVSRSk7XAorCQkJCQl9CisKKyNkZWZpbmUgcmV0X2Vycm9yMChjb2RlLCBtc2cpCQlpZiAoZXJycmV0KSB7XAorCQkJCQkgICAgKmVycnJldCA9IGNvZGU7XAorCQkJCQkgICAgcmV0dXJuQ29kZShFUlIpO1wKKwkJCQkJfSBlbHNlIHtcCisJCQkJCSAgICBmcHJpbnRmKHN0ZGVyciwgbXNnKTtcCisJCQkJCSAgICBleGl0KEVYSVRfRkFJTFVSRSk7XAorCQkJCQl9CisKKyNpZiBVU0VfREFUQUJBU0UgfHwgVVNFX1RFUk1DQVAKKy8qCisgKiBSZXR1cm4gMSBpZiBlbnRyeSBmb3VuZCwgMCBpZiBub3QgZm91bmQsIC0xIGlmIGRhdGFiYXNlIG5vdCBhY2Nlc3NpYmxlLAorICoganVzdCBsaWtlIHRnZXRlbnQoKS4KKyAqLworc3RhdGljIGludAorZ3JhYl9lbnRyeShjb25zdCBjaGFyICpjb25zdCB0biwgVEVSTVRZUEUgKmNvbnN0IHRwKQoreworICAgIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworICAgIGludCBzdGF0dXMgPSBfbmNfcmVhZF9lbnRyeSh0biwgZmlsZW5hbWUsIHRwKTsKKworICAgIC8qCisgICAgICogSWYgd2UgaGF2ZSBhbiBlbnRyeSwgZm9yY2UgYWxsIG9mIHRoZSBjYW5jZWxsZWQgc3RyaW5ncyB0byBudWxsCisgICAgICogcG9pbnRlcnMgc28gd2UgZG9uJ3QgaGF2ZSB0byB0ZXN0IHRoZW0gaW4gdGhlIHJlc3Qgb2YgdGhlIGxpYnJhcnkuCisgICAgICogKFRoZSB0ZXJtaW5mbyBjb21waWxlciBieXBhc3NlcyB0aGlzIGxvZ2ljLCBzaW5jZSBpdCBtdXN0IGtub3cgaWYKKyAgICAgKiBhIHN0cmluZyBpcyBjYW5jZWxsZWQsIGZvciBtZXJnaW5nIGVudHJpZXMpLgorICAgICAqLworICAgIGlmIChzdGF0dXMgPT0gVEdFVEVOVF9ZRVMpIHsKKwl1bnNpZ25lZCBuOworCWZvcl9lYWNoX2Jvb2xlYW4obiwgdHApIHsKKwkgICAgaWYgKCFWQUxJRF9CT09MRUFOKHRwLT5Cb29sZWFuc1tuXSkpCisJCXRwLT5Cb29sZWFuc1tuXSA9IEZBTFNFOworCX0KKwlmb3JfZWFjaF9zdHJpbmcobiwgdHApIHsKKwkgICAgaWYgKHRwLT5TdHJpbmdzW25dID09IENBTkNFTExFRF9TVFJJTkcpCisJCXRwLT5TdHJpbmdzW25dID0gQUJTRU5UX1NUUklORzsKKwl9CisgICAgfQorICAgIHJldHVybiAoc3RhdHVzKTsKK30KKyNlbmRpZgorCisvKgorKioJZG9fcHJvdG90eXBlKCkKKyoqCisqKglUYWtlIHRoZSByZWFsIGNvbW1hbmQgY2hhcmFjdGVyIG91dCBvZiB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUKKyoqCWFuZCBzdWJzdGl0dXRlIGl0IGluIGZvciB0aGUgcHJvdG90eXBlIGdpdmVuIGluICdjb21tYW5kX2NoYXJhY3RlcicuCisqLworc3RhdGljIHZvaWQKK2RvX3Byb3RvdHlwZShURVJNSU5BTCAqIHRlcm1wKQoreworICAgIHVuc2lnbmVkIGk7CisgICAgY2hhciBDQzsKKyAgICBjaGFyIHByb3RvOworICAgIGNoYXIgKnRtcDsKKworICAgIGlmICgodG1wID0gZ2V0ZW52KCJDQyIpKSAhPSAwKSB7CisJaWYgKChDQyA9ICp0bXApICE9IDApIHsKKwkgICAgcHJvdG8gPSAqY29tbWFuZF9jaGFyYWN0ZXI7CisKKwkgICAgZm9yX2VhY2hfc3RyaW5nKGksICYodGVybXAtPnR5cGUpKSB7CisJCWZvciAodG1wID0gdGVybXAtPnR5cGUuU3RyaW5nc1tpXTsgKnRtcDsgdG1wKyspIHsKKwkJICAgIGlmICgqdG1wID09IHByb3RvKQorCQkJKnRtcCA9IENDOworCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKgorICogRmluZCB0aGUgbG9jYWxlIHdoaWNoIGlzIGluIGVmZmVjdC4KKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX2dldF9sb2NhbGUodm9pZCkKK3sKKyAgICBjaGFyICplbnY7CisjaWYgSEFWRV9MT0NBTEVfSAorICAgIC8qCisgICAgICogVGhpcyBpcyBwcmVmZXJhYmxlIHRvIHVzaW5nIGdldGVudigpIHNpbmNlIGl0IGVuc3VyZXMgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgKiB0aGUgbG9jYWxlIHdoaWNoIHdhcyBhY3R1YWxseSBpbml0aWFsaXplZCBieSB0aGUgYXBwbGljYXRpb24uCisgICAgICovCisgICAgZW52ID0gc2V0bG9jYWxlKExDX0NUWVBFLCAwKTsKKyNlbHNlCisgICAgaWYgKCgoZW52ID0gZ2V0ZW52KCJMQ19BTEwiKSkgIT0gMCAmJiAqZW52ICE9ICdcMCcpCisJfHwgKChlbnYgPSBnZXRlbnYoIkxDX0NUWVBFIikpICE9IDAgJiYgKmVudiAhPSAnXDAnKQorCXx8ICgoZW52ID0gZ2V0ZW52KCJMQU5HIikpICE9IDAgJiYgKmVudiAhPSAnXDAnKSkgeworCTsKKyAgICB9CisjZW5kaWYKKyAgICBUKCgiX25jX2dldF9sb2NhbGUgJXMiLCBfbmNfdmlzYnVmKGVudikpKTsKKyAgICByZXR1cm4gZW52OworfQorCisvKgorICogQ2hlY2sgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBVVEYtOCBsb2NhbGUuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY191bmljb2RlX2xvY2FsZSh2b2lkKQoreworICAgIGludCByZXN1bHQgPSAwOworI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgIGNoYXIgKmVudiA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworICAgIHJlc3VsdCA9ICFzdHJjbXAoZW52LCAiVVRGLTgiKTsKKyAgICBUKCgiX25jX3VuaWNvZGVfbG9jYWxlKCVzKSAtPiVkIiwgZW52LCByZXN1bHQpKTsKKyNlbHNlCisgICAgY2hhciAqZW52ID0gX25jX2dldF9sb2NhbGUoKTsKKyAgICBpZiAoZW52ICE9IDApIHsKKwlpZiAoc3Ryc3RyKGVudiwgIi5VVEYtOCIpICE9IDApIHsKKwkgICAgcmVzdWx0ID0gMTsKKwkgICAgVCgoIl9uY191bmljb2RlX2xvY2FsZSglcykgLT4lZCIsIGVudiwgcmVzdWx0KSk7CisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgQ09OVFJPTF9OKHMpICgocykgIT0gMCAmJiBzdHJzdHIocywgIlwwMTYiKSAhPSAwKQorI2RlZmluZSBDT05UUk9MX08ocykgKChzKSAhPSAwICYmIHN0cnN0cihzLCAiXDAxNyIpICE9IDApCisKKy8qCisgKiBDaGVjayBmb3Iga25vd24gYnJva2VuIGNhc2VzIHdoZXJlIGEgVVRGLTggbG9jYWxlIGJyZWFrcyB0aGUgYWx0ZXJuYXRlCisgKiBjaGFyYWN0ZXIgc2V0LgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfbG9jYWxlX2JyZWFrc19hY3MoVEVSTUlOQUwgKiB0ZXJtcCkKK3sKKyAgICBjaGFyICplbnY7CisKKyAgICBpZiAoKGVudiA9IGdldGVudigiTkNVUlNFU19OT19VVEY4X0FDUyIpKSAhPSAwKSB7CisJcmV0dXJuIGF0b2koZW52KTsKKyAgICB9IGVsc2UgaWYgKChlbnYgPSBnZXRlbnYoIlRFUk0iKSkgIT0gMCkgeworCWlmIChzdHJzdHIoZW52LCAibGludXgiKSkKKwkgICAgcmV0dXJuIDE7CQkvKiBhbHdheXMgYnJva2VuICovCisJaWYgKHN0cnN0cihlbnYsICJzY3JlZW4iKSAhPSAwCisJICAgICYmICgoZW52ID0gZ2V0ZW52KCJURVJNQ0FQIikpICE9IDAKKwkJJiYgc3Ryc3RyKGVudiwgInNjcmVlbiIpICE9IDApCisJICAgICYmIHN0cnN0cihlbnYsICJoaElJMDAiKSAhPSAwKSB7CisJICAgIGlmIChDT05UUk9MX04oZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSkgfHwKKwkJQ09OVFJPTF9PKGVudGVyX2FsdF9jaGFyc2V0X21vZGUpIHx8CisJCUNPTlRST0xfTihzZXRfYXR0cmlidXRlcykgfHwKKwkJQ09OVFJPTF9PKHNldF9hdHRyaWJ1dGVzKSkKKwkJcmV0dXJuIDE7CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZW50cnlwb2ludCBpcyBjYWxsZWQgZnJvbSB0Z2V0ZW50KCkgdG8gYWxsb3cgYSBzcGVjaWFsIGNhc2Ugb2YgcmV1c2luZworICogdGhlIHNhbWUgVEVSTUlOQUwgZGF0YSAoc2VlIGNvbW1lbnQpLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfc2V0dXB0ZXJtKE5DVVJTRVNfQ09OU1QgY2hhciAqdG5hbWUsIGludCBGaWxlZGVzLCBpbnQgKmVycnJldCwgYm9vbCByZXVzZSkKK3sKKyAgICBURVJNSU5BTCAqdGVybXA7CisgICAgaW50IHN0YXR1czsKKworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoInNldHVwdGVybSglcywlZCwlcCkiKSwgX25jX3Zpc2J1Zih0bmFtZSksIEZpbGVkZXMsIGVycnJldCkpOworCisgICAgaWYgKHRuYW1lID09IDApIHsKKwl0bmFtZSA9IGdldGVudigiVEVSTSIpOworCWlmICh0bmFtZSA9PSAwIHx8ICp0bmFtZSA9PSAnXDAnKSB7CisJICAgIHJldF9lcnJvcjAoVEdFVEVOVF9FUlIsICJURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXQuXG4iKTsKKwl9CisgICAgfQorCisgICAgaWYgKHN0cmxlbih0bmFtZSkgPiBNQVhfTkFNRV9TSVpFKSB7CisJcmV0X2Vycm9yKFRHRVRFTlRfRVJSLAorCQkgICJURVJNIGVudmlyb25tZW50IG11c3QgYmUgPD0gJWQgY2hhcmFjdGVycy5cbiIsCisJCSAgTUFYX05BTUVfU0laRSk7CisgICAgfQorCisgICAgVCgoInlvdXIgdGVybWluYWwgbmFtZSBpcyAlcyIsIHRuYW1lKSk7CisKKyAgICAvKgorICAgICAqIEFsbG93IG91dHB1dCByZWRpcmVjdGlvbi4gIFRoaXMgaXMgd2hhdCBTVnIzIGRvZXMuICBJZiBzdGRvdXQgaXMKKyAgICAgKiBkaXJlY3RlZCB0byBhIGZpbGUsIHNjcmVlbiB1cGRhdGVzIGdvIHRvIHN0YW5kYXJkIGVycm9yLgorICAgICAqLworICAgIGlmIChGaWxlZGVzID09IFNURE9VVF9GSUxFTk8gJiYgIWlzYXR0eShGaWxlZGVzKSkKKwlGaWxlZGVzID0gU1RERVJSX0ZJTEVOTzsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIHVzZSB0aGlzIHRlcm1pbmFsLiAgSWYgc28sIHdlCisgICAgICogZG8gbm90IG5lZWQgdG8gcmUtcmVhZCB0aGUgdGVybWluZm8gZW50cnksIG9yIG9idGFpbiBUVFkgc2V0dGluZ3MuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIGFuIGltcHJvdmVtZW50IG9uIFNWcjQgY3Vyc2VzLiAgSWYgYW4gYXBwbGljYXRpb24gbWl4ZXMgY3Vyc2VzCisgICAgICogYW5kIHRlcm1jYXAgY2FsbHMsIGl0IG1heSBjYWxsIGJvdGggaW5pdHNjciBhbmQgdGdldGVudC4gIFRoaXMgaXMgbm90CisgICAgICogcmVhbGx5IGEgZ29vZCB0aGluZyB0byBkbywgYnV0IGNhbiBoYXBwZW4gaWYgc29tZW9uZSB0cmllcyB1c2luZyBuY3Vyc2VzCisgICAgICogd2l0aCB0aGUgcmVhZGxpbmUgbGlicmFyeS4gIFRoZSBwcm9ibGVtIHdlIGFyZSBmaXhpbmcgaXMgdGhhdCB3aGVuCisgICAgICogdGdldGVudCBjYWxscyBzZXR1cHRlcm0sIHRoZSByZXN1bHRpbmcgT3R0eWIgc3RydWN0IGluIGN1cl90ZXJtIGlzCisgICAgICogemVyb2VkLiAgQSBzdWJzZXF1ZW50IGNhbGwgdG8gZW5kd2luIHVzZXMgdGhlIHplcm9lZCB0ZXJtaW5hbCBzZXR0aW5ncworICAgICAqIHJhdGhlciB0aGFuIHRoZSBvbmVzIHNhdmVkIGluIGluaXRzY3IuICBTbyB3ZSBjaGVjayBpZiBjdXJfdGVybSBhcHBlYXJzCisgICAgICogdG8gY29udGFpbiB0ZXJtaW5hbCBzZXR0aW5ncyBmb3IgdGhlIHNhbWUgb3V0cHV0IGZpbGUgYXMgb3VyIGN1cnJlbnQKKyAgICAgKiBjYWxsIC0gYW5kIGNvcHkgdGhvc2UgdGVybWluYWwgc2V0dGluZ3MuICAoU1ZyNCBjdXJzZXMgZG9lcyBub3QgZG8gdGhpcywKKyAgICAgKiBob3dldmVyIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSB3b3JraW5nIGFyb3VuZCB0aGUgcHJvYmxlbSB3aWxsIHN0aWxsIHdvcmsKKyAgICAgKiBwcm9wZXJseSB3aXRoIHRoaXMgZmVhdHVyZSkuCisgICAgICovCisgICAgaWYgKHJldXNlCisJJiYgKHRlcm1wID0gY3VyX3Rlcm0pICE9IDAKKwkmJiB0ZXJtcC0+RmlsZWRlcyA9PSBGaWxlZGVzCisJJiYgdGVybXAtPl90ZXJtbmFtZSAhPSAwCisJJiYgIXN0cmNtcCh0ZXJtcC0+X3Rlcm1uYW1lLCB0bmFtZSkKKwkmJiBfbmNfbmFtZV9tYXRjaCh0ZXJtcC0+dHlwZS50ZXJtX25hbWVzLCB0bmFtZSwgInwiKSkgeworCVQoKCJyZXVzaW5nIGV4aXN0aW5nIHRlcm1pbmFsIGluZm9ybWF0aW9uIGFuZCBtb2RlLXNldHRpbmdzIikpOworICAgIH0gZWxzZSB7CisKKwl0ZXJtcCA9IHR5cGVDYWxsb2MoVEVSTUlOQUwsIDEpOworCisJaWYgKHRlcm1wID09IDApIHsKKwkgICAgcmV0X2Vycm9yMChUR0VURU5UX0VSUiwKKwkJICAgICAgICJOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgdGVybWluYWwgc3RydWN0dXJlLlxuIik7CisJfQorI2lmIFVTRV9EQVRBQkFTRSB8fCBVU0VfVEVSTUNBUAorCXN0YXR1cyA9IGdyYWJfZW50cnkodG5hbWUsICZ0ZXJtcC0+dHlwZSk7CisjZWxzZQorCXN0YXR1cyA9IFRHRVRFTlRfTk87CisjZW5kaWYKKworCS8qIHRyeSBmYWxsYmFjayBsaXN0IGlmIGVudHJ5IG9uIGRpc2sgKi8KKwlpZiAoc3RhdHVzICE9IFRHRVRFTlRfWUVTKSB7CisJICAgIGNvbnN0IFRFUk1UWVBFICpmYWxsYmFjayA9IF9uY19mYWxsYmFjayh0bmFtZSk7CisKKwkgICAgaWYgKGZhbGxiYWNrKSB7CisJCXRlcm1wLT50eXBlID0gKmZhbGxiYWNrOworCQlzdGF0dXMgPSBUR0VURU5UX1lFUzsKKwkgICAgfQorCX0KKworCWlmIChzdGF0dXMgIT0gVEdFVEVOVF9ZRVMpIHsKKwkgICAgZGVsX2N1cnRlcm0odGVybXApOworCSAgICBpZiAoc3RhdHVzID09IFRHRVRFTlRfRVJSKSB7CisJCXJldF9lcnJvcjAoc3RhdHVzLCAidGVybWluYWxzIGRhdGFiYXNlIGlzIGluYWNjZXNzaWJsZVxuIik7CisJICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IFRHRVRFTlRfTk8pIHsKKwkJcmV0X2Vycm9yKHN0YXR1cywgIiclcyc6IHVua25vd24gdGVybWluYWwgdHlwZS5cbiIsIHRuYW1lKTsKKwkgICAgfQorCX0KKyNpZiAhVVNFX1JFRU5UUkFOVAorCXN0cm5jcHkodHR5dHlwZSwgdGVybXAtPnR5cGUudGVybV9uYW1lcywgTkFNRVNJWkUgLSAxKTsKKwl0dHl0eXBlW05BTUVTSVpFIC0gMV0gPSAnXDAnOworI2VuZGlmCisKKwl0ZXJtcC0+RmlsZWRlcyA9IEZpbGVkZXM7CisJdGVybXAtPl90ZXJtbmFtZSA9IHN0cmR1cCh0bmFtZSk7CisKKwlzZXRfY3VydGVybSh0ZXJtcCk7CisKKwlpZiAoY29tbWFuZF9jaGFyYWN0ZXIgJiYgZ2V0ZW52KCJDQyIpKQorCSAgICBkb19wcm90b3R5cGUodGVybXApOworCisJLyoKKwkgKiBJZiBhbiBhcHBsaWNhdGlvbiBjYWxscyBzZXR1cHRlcm0oKSByYXRoZXIgdGhhbiBpbml0c2NyKCkgb3IKKwkgKiBuZXd0ZXJtKCksIHdlIHdpbGwgbm90IGhhdmUgdGhlIGRlZl9wcm9nX21vZGUoKSBjYWxsIGluCisJICogX25jX3NldHVwc2NyZWVuKCkuICBEbyBpdCBub3cgYW55d2F5LCBzbyB3ZSBjYW4gaW5pdGlhbGl6ZSB0aGUKKwkgKiBiYXVkcmF0ZS4KKwkgKi8KKwlpZiAoaXNhdHR5KEZpbGVkZXMpKSB7CisJICAgIGRlZl9wcm9nX21vZGUoKTsKKwkgICAgYmF1ZHJhdGUoKTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBzY3JlZW5zaXplLCBqdXN0IGluIGNhc2UuCisgICAgICovCisgICAgX25jX2dldF9zY3JlZW5zaXplKFNQLCBwdHJMaW5lcygpLCBwdHJDb2xzKCkpOworCisgICAgaWYgKGVycnJldCkKKwkqZXJycmV0ID0gVEdFVEVOVF9ZRVM7CisKKyAgICBpZiAoZ2VuZXJpY190eXBlKSB7CisJcmV0X2Vycm9yKFRHRVRFTlRfTk8sICInJXMnOiBJIG5lZWQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuXG4iLCB0bmFtZSk7CisgICAgfQorICAgIGlmIChoYXJkX2NvcHkpIHsKKwlyZXRfZXJyb3IoVEdFVEVOVF9ZRVMsICInJXMnOiBJIGNhbid0IGhhbmRsZSBoYXJkY29weSB0ZXJtaW5hbHMuXG4iLCB0bmFtZSk7CisgICAgfQorICAgIHJldHVybkNvZGUoT0spOworfQorCisvKgorICoJc2V0dXB0ZXJtKHRlcm1uYW1lLCBGaWxlZGVzLCBlcnJyZXQpCisgKgorICoJRmluZCBhbmQgcmVhZCB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0IGZpbGUgZm9yIHRoZSB0ZXJtaW5hbAorICoJTWFrZSBjdXJfdGVybSBwb2ludCB0byB0aGUgc3RydWN0dXJlLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXR1cHRlcm0oTkNVUlNFU19DT05TVCBjaGFyICp0bmFtZSwgaW50IEZpbGVkZXMsIGludCAqZXJycmV0KQoreworICAgIHJldHVybiBfbmNfc2V0dXB0ZXJtKHRuYW1lLCBGaWxlZGVzLCBlcnJyZXQsIEZBTFNFKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX3Rlcm1jYXAuYyBiL25jdXJzZXMvdGluZm8vbGliX3Rlcm1jYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDI0NWZmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9saWJfdGVybWNhcC5jCkBAIC0wLDAgKzEsMjkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIHNvbWUgb2YgdGhlIGNvZGUgaW4gaGVyZSB3YXMgY29udHJpYnV0ZWQgYnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBNYWdudXMgQmVuZ3Rzc29uLCBkNm1iZW5nQGR0ZWsuY2hhbG1lcnMuc2UgKE5vdic5MykgICAgICAgICAgICAgICAgICAgICAgKgorICogKGJ1dCBpdCBoYXMgY2hhbmdlZCBhIGxvdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIF9fSU5URVJOQUxfQ0FQU19WSVNJQkxFCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm1jYXAuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Rlcm1jYXAuYyx2IDEuNjMgMjAwOC8wOC8xNiAxOToyMjo1NSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhciAqKSBVUCA9IDA7CitOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhciAqKSBCQyA9IDA7CisKKyNkZWZpbmUgTXlDYWNoZSAgX25jX2dsb2JhbHMudGdldGVudF9jYWNoZQorI2RlZmluZSBDYWNoZUlueCBfbmNfZ2xvYmFscy50Z2V0ZW50X2luZGV4CisjZGVmaW5lIENhY2hlU2VxIF9uY19nbG9iYWxzLnRnZXRlbnRfc2VxdWVuY2UKKworI2RlZmluZSBGSVhfU0dSMCBNeUNhY2hlW0NhY2hlSW54XS5maXhfc2dyMAorI2RlZmluZSBMQVNUX1RSTSBNeUNhY2hlW0NhY2hlSW54XS5sYXN0X3Rlcm0KKyNkZWZpbmUgTEFTVF9CVUYgTXlDYWNoZVtDYWNoZUlueF0ubGFzdF9idWZwCisjZGVmaW5lIExBU1RfVVNFIE15Q2FjaGVbQ2FjaGVJbnhdLmxhc3RfdXNlZAorI2RlZmluZSBMQVNUX1NFUSBNeUNhY2hlW0NhY2hlSW54XS5zZXF1ZW5jZQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGdldGVudChidWZwLCB0ZXJtKQorICoKKyAqIEluIHRlcm1jYXAsIHRoaXMgZnVuY3Rpb24gcmVhZHMgaW4gdGhlIGVudHJ5IGZvciB0ZXJtaW5hbCBgdGVybScgaW50byB0aGUKKyAqIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGJ1ZnAuIEl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucworICogYmVsb3cgYXJlIGNhbGxlZC4KKyAqIEluIHRoaXMgdGVybWluZm8gZW11bGF0aW9uLCB0Z2V0ZW50KCkgc2ltcGx5IGNhbGxzIHNldHVwdGVybSgpICh3aGljaAorICogZG9lcyBhIGJpdCBtb3JlIHRoYW4gdGdldGVudCgpIGluIHRlcm1jYXAgZG9lcyksIGFuZCByZXR1cm5zIGl0cyByZXR1cm4KKyAqIHZhbHVlICgxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgbm8gdGVybWluYWwgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjb3VsZCBiZQorICogZm91bmQsIG9yIC0xIGlmIG5vIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyBoYXZlIGJlZW4gaW5zdGFsbGVkIG9uIHRoZQorICogc3lzdGVtKS4gIFRoZSBidWZwIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQordGdldGVudChjaGFyICpidWZwLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIGludCBlcnJjb2RlOworICAgIGludCBuOworICAgIGJvb2wgZm91bmRfY2FjaGUgPSBGQUxTRTsKKworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoInRnZXRlbnQoKSIpKSk7CisKKyAgICBfbmNfc2V0dXB0ZXJtKChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgbmFtZSwgU1RET1VUX0ZJTEVOTywgJmVycmNvZGUsIFRSVUUpOworCisgICAgLyoKKyAgICAgKiBJbiBnZW5lcmFsIHdlIGNhbm5vdCB0ZWxsIGlmIHRoZSBmaXhlZCBzZ3IwIGlzIHN0aWxsIHVzZWQgYnkgdGhlCisgICAgICogY2FsbGVyLCBidXQgaWYgdGdldGVudCgpIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGJ1ZmZlciwgdGhhdCBpcworICAgICAqIGdvb2QgZW5vdWdoLCBzaW5jZSB0aGUgcHJldmlvdXMgZGF0YSB3b3VsZCBiZSBpbnZhbGlkYXRlZCBieSB0aGUKKyAgICAgKiBjdXJyZW50IGNhbGwuCisgICAgICoKKyAgICAgKiBidWZwIG1heSBiZSBhIG51bGwgcG9pbnRlciwgZS5nLiwgR05VIHRlcm1jYXAuICBUaGF0IGFsbG9jYXRlcyBkYXRhLAorICAgICAqIHdoaWNoIGlzIGdvb2QgdW50aWwgdGhlIG5leHQgdGdldGVudCgpIGNhbGwuICBUaGUgY29udmVudGlvbmFsIHRlcm1jYXAKKyAgICAgKiBpcyBpbmNvbnZlbmllbnQgYmVjYXVzZSBvZiB0aGUgZml4ZWQgYnVmZmVyIHNpemUsIGJ1dCBiZWNhdXNlIGl0IHVzZXMKKyAgICAgKiBjYWxsZXItc3VwcGxpZWQgYnVmZmVycywgY2FuIGhhdmUgbXVsdGlwbGUgdGVybWluYWwgZGVzY3JpcHRpb25zIGluCisgICAgICogdXNlIGF0IGEgZ2l2ZW4gdGltZS4KKyAgICAgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgVEdFVEVOVF9NQVg7ICsrbikgeworCWJvb2wgc2FtZV9yZXN1bHQgPSAoTXlDYWNoZVtuXS5sYXN0X3VzZWQgJiYgTXlDYWNoZVtuXS5sYXN0X2J1ZnAgPT0gYnVmcCk7CisJaWYgKHNhbWVfcmVzdWx0KSB7CisJICAgIENhY2hlSW54ID0gbjsKKwkgICAgaWYgKEZJWF9TR1IwICE9IDApIHsKKwkJRnJlZUFuZE51bGwoRklYX1NHUjApOworCSAgICB9CisJICAgIC8qCisJICAgICAqIEFsc28gZnJlZSB0aGUgdGVybWluZm8gZGF0YSB0aGF0IHdlIGxvYWRlZCAobXVjaCBiaWdnZXIgbGVhaykuCisJICAgICAqLworCSAgICBpZiAoTEFTVF9UUk0gIT0gMCAmJiBMQVNUX1RSTSAhPSBjdXJfdGVybSkgeworCQlURVJNSU5BTCAqdHJtID0gTEFTVF9UUk07CisJCWRlbF9jdXJ0ZXJtKExBU1RfVFJNKTsKKwkJZm9yIChDYWNoZUlueCA9IDA7IENhY2hlSW54IDwgVEdFVEVOVF9NQVg7ICsrQ2FjaGVJbngpCisJCSAgICBpZiAoTEFTVF9UUk0gPT0gdHJtKQorCQkJTEFTVF9UUk0gPSAwOworCQlDYWNoZUlueCA9IG47CisJICAgIH0KKwkgICAgZm91bmRfY2FjaGUgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmICghZm91bmRfY2FjaGUpIHsKKwlpbnQgYmVzdCA9IDA7CisKKwlmb3IgKENhY2hlSW54ID0gMDsgQ2FjaGVJbnggPCBUR0VURU5UX01BWDsgKytDYWNoZUlueCkgeworCSAgICBpZiAoTEFTVF9TRVEgPCBNeUNhY2hlW2Jlc3RdLnNlcXVlbmNlKSB7CisJCWJlc3QgPSBDYWNoZUlueDsKKwkgICAgfQorCX0KKwlDYWNoZUlueCA9IGJlc3Q7CisgICAgfQorICAgIExBU1RfVFJNID0gY3VyX3Rlcm07CisgICAgTEFTVF9TRVEgPSArK0NhY2hlU2VxOworCisgICAgUEMgPSAwOworICAgIFVQID0gMDsKKyAgICBCQyA9IDA7CisgICAgRklYX1NHUjAgPSAwOwkJLyogZG9uJ3QgZnJlZSBpdCAtIGFwcGxpY2F0aW9uIG1heSBzdGlsbCB1c2UgKi8KKworICAgIGlmIChlcnJjb2RlID09IDEpIHsKKworCWlmIChjdXJzb3JfbGVmdCkKKwkgICAgaWYgKChiYWNrc3BhY2VzX3dpdGhfYnMgPSAoY2hhcikgIXN0cmNtcChjdXJzb3JfbGVmdCwgIlxiIikpID09IDApCisJCWJhY2tzcGFjZV9pZl9ub3RfYnMgPSBjdXJzb3JfbGVmdDsKKworCS8qIHdlJ3JlIHJlcXVpcmVkIHRvIGV4cG9ydCB0aGVzZSAqLworCWlmIChwYWRfY2hhciAhPSBOVUxMKQorCSAgICBQQyA9IHBhZF9jaGFyWzBdOworCWlmIChjdXJzb3JfdXAgIT0gTlVMTCkKKwkgICAgVVAgPSBjdXJzb3JfdXA7CisJaWYgKGJhY2tzcGFjZV9pZl9ub3RfYnMgIT0gTlVMTCkKKwkgICAgQkMgPSBiYWNrc3BhY2VfaWZfbm90X2JzOworCisJaWYgKChGSVhfU0dSMCA9IF9uY190cmltX3NncjAoJihjdXJfdGVybS0+dHlwZSkpKSAhPSAwKSB7CisJICAgIGlmICghc3RyY21wKEZJWF9TR1IwLCBleGl0X2F0dHJpYnV0ZV9tb2RlKSkgeworCQlpZiAoRklYX1NHUjAgIT0gZXhpdF9hdHRyaWJ1dGVfbW9kZSkgeworCQkgICAgZnJlZShGSVhfU0dSMCk7CisJCX0KKwkJRklYX1NHUjAgPSAwOworCSAgICB9CisJfQorCUxBU1RfQlVGID0gYnVmcDsKKwlMQVNUX1VTRSA9IFRSVUU7CisKKwlTZXROb1BhZGRpbmcoU1ApOworCSh2b2lkKSBiYXVkcmF0ZSgpOwkvKiBzZXRzIG9zcGVlZCBhcyBhIHNpZGUtZWZmZWN0ICovCisKKy8qIExJTlRfUFJFUFJPCisjaWYgMCovCisjaW5jbHVkZSA8Y2FwZGVmYXVsdHMuYz4KKy8qIExJTlRfUFJFUFJPCisjZW5kaWYqLworCisgICAgfQorICAgIHJldHVybkNvZGUoZXJyY29kZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0Z2V0ZmxhZyhzdHIpCisgKgorICogTG9vayB1cCBib29sZWFuIHRlcm1jYXAgY2FwYWJpbGl0eSBzdHIgYW5kIHJldHVybiBpdHMgdmFsdWUgKFRSVUU9MSBpZgorICogcHJlc2VudCwgRkFMU0U9MCBpZiBub3QpLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3RnZXRmbGFnKE5DVVJTRVNfQ09OU1QgY2hhciAqaWQpCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJ0Z2V0ZmxhZyglcykiKSwgaWQpKTsKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworCVRFUk1UWVBFICp0cCA9ICYoY3VyX3Rlcm0tPnR5cGUpOworCWZvcl9lYWNoX2Jvb2xlYW4oaSwgdHApIHsKKwkgICAgY29uc3QgY2hhciAqY2FwbmFtZSA9IEV4dEJvb2xuYW1lKHRwLCBpLCBib29sY29kZXMpOworCSAgICBpZiAoIXN0cm5jbXAoaWQsIGNhcG5hbWUsIDIpKSB7CisJCS8qIHNldHVwdGVybSBmb3JjZXMgaW52YWxpZCBib29sZWFucyB0byBmYWxzZSAqLworCQlyZXR1cm5Db2RlKHRwLT5Cb29sZWFuc1tpXSk7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoMCk7CQkvKiBTb2xhcmlzIGRvZXMgdGhpcyAqLworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGdldG51bShzdHIpCisgKgorICogTG9vayB1cCBudW1lcmljIHRlcm1jYXAgY2FwYWJpbGl0eSBzdHIgYW5kIHJldHVybiBpdHMgdmFsdWUsIG9yIC0xIGlmCisgKiBub3QgZ2l2ZW4uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQordGdldG51bShOQ1VSU0VTX0NPTlNUIGNoYXIgKmlkKQoreworICAgIHVuc2lnbmVkIGk7CisKKyAgICBUKChUX0NBTExFRCgidGdldG51bSglcykiKSwgaWQpKTsKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworCVRFUk1UWVBFICp0cCA9ICYoY3VyX3Rlcm0tPnR5cGUpOworCWZvcl9lYWNoX251bWJlcihpLCB0cCkgeworCSAgICBjb25zdCBjaGFyICpjYXBuYW1lID0gRXh0TnVtbmFtZSh0cCwgaSwgbnVtY29kZXMpOworCSAgICBpZiAoIXN0cm5jbXAoaWQsIGNhcG5hbWUsIDIpKSB7CisJCWlmICghVkFMSURfTlVNRVJJQyh0cC0+TnVtYmVyc1tpXSkpCisJCSAgICByZXR1cm5Db2RlKEFCU0VOVF9OVU1FUklDKTsKKwkJcmV0dXJuQ29kZSh0cC0+TnVtYmVyc1tpXSk7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoQUJTRU5UX05VTUVSSUMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGdldHN0cihzdHIsIGFyZWEpCisgKgorICogTG9vayB1cCBzdHJpbmcgdGVybWNhcCBjYXBhYmlsaXR5IHN0ciBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdHMgdmFsdWUsCisgKiBvciBOVUxMIGlmIG5vdCBnaXZlbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCit0Z2V0c3RyKE5DVVJTRVNfQ09OU1QgY2hhciAqaWQsIGNoYXIgKiphcmVhKQoreworICAgIHVuc2lnbmVkIGk7CisgICAgY2hhciAqcmVzdWx0ID0gTlVMTDsKKworICAgIFQoKFRfQ0FMTEVEKCJ0Z2V0c3RyKCVzLCVwKSIpLCBpZCwgYXJlYSkpOworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVEVSTVRZUEUgKnRwID0gJihjdXJfdGVybS0+dHlwZSk7CisJZm9yX2VhY2hfc3RyaW5nKGksIHRwKSB7CisJICAgIGNvbnN0IGNoYXIgKmNhcG5hbWUgPSBFeHRTdHJuYW1lKHRwLCBpLCBzdHJjb2Rlcyk7CisJICAgIGlmICghc3RybmNtcChpZCwgY2FwbmFtZSwgMikpIHsKKwkJcmVzdWx0ID0gdHAtPlN0cmluZ3NbaV07CisJCVRSKFRSQUNFX0RBVEFCQVNFLCAoImZvdW5kIG1hdGNoIDogJXMiLCBfbmNfdmlzYnVmKHJlc3VsdCkpKTsKKwkJLyogc2V0dXB0ZXJtIGZvcmNlcyBjYW5jZWxlZCBzdHJpbmdzIHRvIG51bGwgKi8KKwkJaWYgKFZBTElEX1NUUklORyhyZXN1bHQpKSB7CisJCSAgICBpZiAocmVzdWx0ID09IGV4aXRfYXR0cmlidXRlX21vZGUKKwkJCSYmIEZJWF9TR1IwICE9IDApIHsKKwkJCXJlc3VsdCA9IEZJWF9TR1IwOworCQkJVFIoVFJBQ0VfREFUQUJBU0UsICgiYWx0ZXJlZCB0byA6ICVzIiwgX25jX3Zpc2J1ZihyZXN1bHQpKSk7CisJCSAgICB9CisJCSAgICBpZiAoYXJlYSAhPSAwCisJCQkmJiAqYXJlYSAhPSAwKSB7CisJCQkodm9pZCkgc3RyY3B5KCphcmVhLCByZXN1bHQpOworCQkJcmVzdWx0ID0gKmFyZWE7CisJCQkqYXJlYSArPSBzdHJsZW4oKmFyZWEpICsgMTsKKwkJICAgIH0KKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuUHRyKHJlc3VsdCk7Cit9CisKKyNpZiBOT19MRUFLUworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY190Z2V0ZW50X2xlYWtzKHZvaWQpCit7CisgICAgZm9yIChDYWNoZUlueCA9IDA7IENhY2hlSW54IDwgVEdFVEVOVF9NQVg7ICsrQ2FjaGVJbngpIHsKKwlGcmVlSWZOZWVkZWQoRklYX1NHUjApOworCWlmIChMQVNUX1RSTSAhPSAwKQorCSAgICBkZWxfY3VydGVybShMQVNUX1RSTSk7CisgICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl90ZXJtbmFtZS5jIGIvbmN1cnNlcy90aW5mby9saWJfdGVybW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNkMGJlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9saWJfdGVybW5hbWUuYwpAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90ZXJtbmFtZS5jLHYgMS44IDIwMDMvMTIvMjcgMTg6MjM6MDEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQordGVybW5hbWUodm9pZCkKK3sKKyAgICBjaGFyICpuYW1lID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJ0ZXJtbmFtZSgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKQorCW5hbWUgPSBjdXJfdGVybS0+X3Rlcm1uYW1lOworCisgICAgcmV0dXJuUHRyKG5hbWUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9saWJfdGdvdG8uYyBiL25jdXJzZXMvdGluZm8vbGliX3Rnb3RvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3ZjQ2NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbGliX3Rnb3RvLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdGdvdG8uYyx2IDEuMTMgMjAwOC8wOC8xNiAxOToyOTozMiB0b20gRXhwICQiKQorCisjaWYgIVBVUkVfVEVSTUlORk8KK3N0YXRpYyBib29sCitpc190ZXJtY2FwKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisKKyAgICBpZiAoc3RyaW5nID09IDAgfHwgKnN0cmluZyA9PSAnXDAnKSB7CisJcmVzdWx0ID0gRkFMU0U7CQkvKiB0cGFybSgpIGhhbmRsZXMgZW1wdHkgc3RyaW5ncyAqLworICAgIH0gZWxzZSB7CisJd2hpbGUgKCgqc3RyaW5nICE9ICdcMCcpICYmIHJlc3VsdCkgeworCSAgICBpZiAoKnN0cmluZyA9PSAnJScpIHsKKwkJc3dpdGNoICgqKytzdHJpbmcpIHsKKwkJY2FzZSAncCc6CisJCSAgICByZXN1bHQgPSBGQUxTRTsKKwkJICAgIGJyZWFrOworCQljYXNlICdcMCc6CisJCSAgICBzdHJpbmctLTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0gZWxzZSBpZiAoc3RyaW5nWzBdID09ICckJyAmJiBzdHJpbmdbMV0gPT0gJzwnKSB7CisJCXJlc3VsdCA9IEZBTFNFOworCSAgICB9CisJICAgIHN0cmluZysrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNoYXIgKgordGdvdG9faW50ZXJuYWwoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgeCwgaW50IHkpCit7CisgICAgc3RhdGljIGNoYXIgKnJlc3VsdDsKKyAgICBzdGF0aWMgc2l6ZV90IGxlbmd0aDsKKworICAgIGludCBzd2FwX2FyZzsKKyAgICBpbnQgcGFyYW1bM107CisgICAgc2l6ZV90IHVzZWQgPSAwOworICAgIHNpemVfdCBuZWVkID0gMTA7CisgICAgaW50ICp2YWx1ZSA9IHBhcmFtOworICAgIGJvb2wgbmVlZF9CQyA9IEZBTFNFOworCisgICAgaWYgKEJDKQorCW5lZWQgKz0gc3RybGVuKEJDKTsKKworICAgIHBhcmFtWzBdID0geTsKKyAgICBwYXJhbVsxXSA9IHg7CisgICAgcGFyYW1bMl0gPSAwOworCisgICAgd2hpbGUgKCpzdHJpbmcgIT0gMCkgeworCWlmICgodXNlZCArIG5lZWQpID4gbGVuZ3RoKSB7CisJICAgIGxlbmd0aCArPSAodXNlZCArIG5lZWQpOworCSAgICBpZiAoKHJlc3VsdCA9IHR5cGVSZWFsbG9jKGNoYXIsIGxlbmd0aCwgcmVzdWx0KSkgPT0gMCkgeworCQlsZW5ndGggPSAwOworCQlicmVhazsKKwkgICAgfQorCX0KKwlpZiAoKnN0cmluZyA9PSAnJScpIHsKKwkgICAgY29uc3QgY2hhciAqZm10ID0gMDsKKworCSAgICBzd2l0Y2ggKCorK3N0cmluZykgeworCSAgICBjYXNlICdcMCc6CisJCXN0cmluZy0tOworCQlicmVhazsKKwkgICAgY2FzZSAnZCc6CisJCWZtdCA9ICIlZCI7CisJCWJyZWFrOworCSAgICBjYXNlICcyJzoKKwkJZm10ID0gIiUwMmQiOworCQkqdmFsdWUgJT0gMTAwOworCQlicmVhazsKKwkgICAgY2FzZSAnMyc6CisJCWZtdCA9ICIlMDNkIjsKKwkJKnZhbHVlICU9IDEwMDA7CisJCWJyZWFrOworCSAgICBjYXNlICcrJzoKKwkJKnZhbHVlICs9IFVDaGFyKCorK3N0cmluZyk7CisJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJy4nOgorCQkvKgorCQkgKiBHdWFyZCBhZ2FpbnN0IHRwdXRzKCkgc2VlaW5nIGEgdHJ1bmNhdGVkIHN0cmluZy4gIFRoZQorCQkgKiB0ZXJtY2FwIGRvY3VtZW50YXRpb24gcmVmZXJzIHRvIGEgc2ltaWxhciBmaXh1cCBmb3IgXG4KKwkJICogYW5kIFxyLCBidXQgSSBkb24ndCBzZWUgdGhhdCBpdCBjb3VsZCB3b3JrIC1URAorCQkgKi8KKwkJaWYgKCp2YWx1ZSA9PSAwKSB7CisJCSAgICBpZiAoQkMgIT0gMCkgeworCQkJKnZhbHVlICs9IDE7CisJCQluZWVkX0JDID0gVFJVRTsKKwkJICAgIH0gZWxzZSB7CisJCQkqdmFsdWUgPSAwMjAwOwkvKiB0cHV0cyB3aWxsIHRyZWF0IHRoaXMgYXMgXDAgKi8KKwkJICAgIH0KKwkJfQorCQlyZXN1bHRbdXNlZCsrXSA9IChjaGFyKSAqdmFsdWUrKzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyUnOgorCQlyZXN1bHRbdXNlZCsrXSA9ICpzdHJpbmc7CisJCWJyZWFrOworCSAgICBjYXNlICdyJzoKKwkJc3dhcF9hcmcgPSBwYXJhbVswXTsKKwkJcGFyYW1bMF0gPSBwYXJhbVsxXTsKKwkJcGFyYW1bMV0gPSBzd2FwX2FyZzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2knOgorCQlwYXJhbVswXSArPSAxOworCQlwYXJhbVsxXSArPSAxOworCQlicmVhazsKKwkgICAgY2FzZSAnPic6CisJCWlmICgqdmFsdWUgPiBzdHJpbmdbMV0pCisJCSAgICAqdmFsdWUgKz0gc3RyaW5nWzJdOworCQlzdHJpbmcgKz0gMjsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ24nOgkJLyogRGF0YW1lZGlhIDI1MDAgKi8KKwkJcGFyYW1bMF0gXj0gMDE0MDsKKwkJcGFyYW1bMV0gXj0gMDE0MDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ0InOgkJLyogQkNEICovCisJCSp2YWx1ZSA9IDE2ICogKCp2YWx1ZSAvIDEwKSArICgqdmFsdWUgJSAxMCk7CisJCWJyZWFrOworCSAgICBjYXNlICdEJzoJCS8qIFJldmVyc2UgY29kaW5nIChEZWx0YSBEYXRhKSAqLworCQkqdmFsdWUgLT0gMiAqICgqdmFsdWUgJSAxNik7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChmbXQgIT0gMCkgeworCQlzcHJpbnRmKHJlc3VsdCArIHVzZWQsIGZtdCwgKnZhbHVlKyspOworCQl1c2VkICs9IHN0cmxlbihyZXN1bHQgKyB1c2VkKTsKKwkJZm10ID0gMDsKKwkgICAgfQorCSAgICBpZiAodmFsdWUgLSBwYXJhbSA+IDIpIHsKKwkJdmFsdWUgPSBwYXJhbSArIDI7CisJCSp2YWx1ZSA9IDA7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICByZXN1bHRbdXNlZCsrXSA9ICpzdHJpbmc7CisJfQorCXN0cmluZysrOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKwlpZiAobmVlZF9CQykgeworCSAgICBzdHJjcHkocmVzdWx0ICsgdXNlZCwgQkMpOworCSAgICB1c2VkICs9IHN0cmxlbihCQyk7CisJfQorCXJlc3VsdFt1c2VkXSA9ICdcMCc7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldGFpbmVkIHNvbGVseSBmb3IgdXB3YXJkIGNvbXBhdGliaWxpdHkuICBOb3RlIHRoZSBpbnRlbnRpb25hbCByZXZlcnNpbmcgb2YKKyAqIHRoZSBsYXN0IHR3byBhcmd1bWVudHMgd2hlbiBpbnZva2luZyB0cGFybSgpLgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCit0Z290byhjb25zdCBjaGFyICpzdHJpbmcsIGludCB4LCBpbnQgeSkKK3sKKyAgICBjaGFyICpyZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgidGdvdG8oJXMsICVkLCAlZCkiKSwgX25jX3Zpc2J1ZihzdHJpbmcpLCB4LCB5KSk7CisjaWYgIVBVUkVfVEVSTUlORk8KKyAgICBpZiAoaXNfdGVybWNhcChzdHJpbmcpKQorCXJlc3VsdCA9IHRnb3RvX2ludGVybmFsKHN0cmluZywgeCwgeSk7CisgICAgZWxzZQorI2VuZGlmCisJcmVzdWx0ID0gVFBBUk1fMigoTkNVUlNFU19DT05TVCBjaGFyICopIHN0cmluZywgeSwgeCk7CisgICAgcmV0dXJuUHRyKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl90aS5jIGIvbmN1cnNlcy90aW5mby9saWJfdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ2MGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9saWJfdGkuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3RpLmMsdiAxLjIzIDIwMDMvMDUvMjQgMjE6MTA6MjggdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQordGlnZXRmbGFnKE5DVVJTRVNfQ09OU1QgY2hhciAqc3RyKQoreworICAgIHVuc2lnbmVkIGk7CisKKyAgICBUKChUX0NBTExFRCgidGlnZXRmbGFnKCVzKSIpLCBzdHIpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVEVSTVRZUEUgKnRwID0gJihjdXJfdGVybS0+dHlwZSk7CisJZm9yX2VhY2hfYm9vbGVhbihpLCB0cCkgeworCSAgICBjb25zdCBjaGFyICpjYXBuYW1lID0gRXh0Qm9vbG5hbWUodHAsIGksIGJvb2xuYW1lcyk7CisJICAgIGlmICghc3RyY21wKHN0ciwgY2FwbmFtZSkpIHsKKwkJLyogc2V0dXB0ZXJtIGZvcmNlcyBpbnZhbGlkIGJvb2xlYW5zIHRvIGZhbHNlICovCisJCXJldHVybkNvZGUodHAtPkJvb2xlYW5zW2ldKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm5Db2RlKEFCU0VOVF9CT09MRUFOKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQordGlnZXRudW0oTkNVUlNFU19DT05TVCBjaGFyICpzdHIpCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJ0aWdldG51bSglcykiKSwgc3RyKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworCVRFUk1UWVBFICp0cCA9ICYoY3VyX3Rlcm0tPnR5cGUpOworCWZvcl9lYWNoX251bWJlcihpLCB0cCkgeworCSAgICBjb25zdCBjaGFyICpjYXBuYW1lID0gRXh0TnVtbmFtZSh0cCwgaSwgbnVtbmFtZXMpOworCSAgICBpZiAoIXN0cmNtcChzdHIsIGNhcG5hbWUpKSB7CisJCWlmICghVkFMSURfTlVNRVJJQyh0cC0+TnVtYmVyc1tpXSkpCisJCSAgICByZXR1cm5Db2RlKEFCU0VOVF9OVU1FUklDKTsKKwkJcmV0dXJuQ29kZSh0cC0+TnVtYmVyc1tpXSk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuQ29kZShDQU5DRUxMRURfTlVNRVJJQyk7CS8qIFNvbGFyaXMgcmV0dXJucyBhIC0xIGluc3RlYWQgKi8KK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQordGlnZXRzdHIoTkNVUlNFU19DT05TVCBjaGFyICpzdHIpCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJ0aWdldHN0ciglcykiKSwgc3RyKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworCVRFUk1UWVBFICp0cCA9ICYoY3VyX3Rlcm0tPnR5cGUpOworCWZvcl9lYWNoX3N0cmluZyhpLCB0cCkgeworCSAgICBjb25zdCBjaGFyICpjYXBuYW1lID0gRXh0U3RybmFtZSh0cCwgaSwgc3RybmFtZXMpOworCSAgICBpZiAoIXN0cmNtcChzdHIsIGNhcG5hbWUpKSB7CisJCS8qIHNldHVwdGVybSBmb3JjZXMgY2FuY2VsbGVkIHN0cmluZ3MgdG8gbnVsbCAqLworCQlyZXR1cm5QdHIodHAtPlN0cmluZ3NbaV0pOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVyblB0cihDQU5DRUxMRURfU1RSSU5HKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vbGliX3RwYXJtLmMgYi9uY3Vyc2VzL3RpbmZvL2xpYl90cGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMmE4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL2xpYl90cGFybS5jCkBAIC0wLDAgKzEsNzk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5LCAxOTk2IG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgl0cGFybS5jCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHBhcm0uYyx2IDEuNzYgMjAwOC8wOC8xNiAxOToyMjo1NSB0b20gRXhwICQiKQorCisvKgorICoJY2hhciAqCisgKgl0cGFybShzdHJpbmcsIC4uLikKKyAqCisgKglTdWJzdGl0dXRlIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGludG8gdGhlIGdpdmVuIHN0cmluZyBieSB0aGUgZm9sbG93aW5nCisgKglydWxlcyAodGFrZW4gZnJvbSB0ZXJtaW5mbyg1KSk6CisgKgorICoJICAgICBDdXJzb3IgYWRkcmVzc2luZyBhbmQgb3RoZXIgc3RyaW5ncyAgcmVxdWlyaW5nICBwYXJhbWUtCisgKgl0ZXJzIGluIHRoZSB0ZXJtaW5hbCBhcmUgZGVzY3JpYmVkIGJ5IGEgcGFyYW1ldGVyaXplZCBzdHJpbmcKKyAqCWNhcGFiaWxpdHksIHdpdGggbGlrZSBlc2NhcGVzICV4IGluICBpdC4gICBGb3IgIGV4YW1wbGUsICB0bworICoJYWRkcmVzcyAgdGhlICBjdXJzb3IsIHRoZSBjdXAgY2FwYWJpbGl0eSBpcyBnaXZlbiwgdXNpbmcgdHdvCisgKglwYXJhbWV0ZXJzOiB0aGUgcm93IGFuZCBjb2x1bW4gdG8gIGFkZHJlc3MgIHRvLiAgIChSb3dzICBhbmQKKyAqCWNvbHVtbnMgIGFyZSAgbnVtYmVyZWQgIGZyb20gIHplcm8gYW5kIHJlZmVyIHRvIHRoZSBwaHlzaWNhbAorICoJc2NyZWVuIHZpc2libGUgdG8gdGhlIHVzZXIsIG5vdCB0byBhbnkgIHVuc2VlbiAgbWVtb3J5LikgIElmCisgKgl0aGUgdGVybWluYWwgaGFzIG1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywgdGhhdCBjYW4KKyAqCWJlIGluZGljYXRlZCBieQorICoKKyAqCSAgICAgVGhlIHBhcmFtZXRlciBtZWNoYW5pc20gdXNlcyAgYSAgc3RhY2sgIGFuZCAgc3BlY2lhbCAgJQorICoJY29kZXMgIHRvIG1hbmlwdWxhdGUgaXQuICBUeXBpY2FsbHkgYSBzZXF1ZW5jZSB3aWxsIHB1c2ggb25lCisgKglvZiB0aGUgcGFyYW1ldGVycyBvbnRvIHRoZSBzdGFjayBhbmQgdGhlbiBwcmludCBpdCAgaW4gIHNvbWUKKyAqCWZvcm1hdC4gIE9mdGVuIG1vcmUgY29tcGxleCBvcGVyYXRpb25zIGFyZSBuZWNlc3NhcnkuCisgKgorICoJICAgICBUaGUgJSBlbmNvZGluZ3MgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorICoKKyAqCSAgICAgJSUgICAgICAgIG91dHB1dHMgYCUnCisgKgkgICAgICVjICAgICAgICBwcmludCBwb3AoKSBsaWtlICVjIGluIHByaW50ZigpCisgKgkgICAgICVzICAgICAgICBwcmludCBwb3AoKSBsaWtlICVzIGluIHByaW50ZigpCisgKiAgICAgICAgICAgJVtbOl1mbGFnc11bd2lkdGhbLnByZWNpc2lvbl1dW2RveFhzXQorICogICAgICAgICAgICAgICAgICAgICBhcyBpbiBwcmludGYsIGZsYWdzIGFyZSBbLSsjXSBhbmQgc3BhY2UKKyAqICAgICAgICAgICAgICAgICAgICAgVGhlICc6JyBpcyB1c2VkIHRvIGF2b2lkIG1ha2luZyAlKyBvciAlLQorICogICAgICAgICAgICAgICAgICAgICBwYXR0ZXJucyAoc2VlIGJlbG93KS4KKyAqCisgKgkgICAgICVwWzEtOV0gICBwdXNoIGl0aCBwYXJtCisgKgkgICAgICVQW2Etel0gICBzZXQgZHluYW1pYyB2YXJpYWJsZSBbYS16XSB0byBwb3AoKQorICoJICAgICAlZ1thLXpdICAgZ2V0IGR5bmFtaWMgdmFyaWFibGUgW2Etel0gYW5kIHB1c2ggaXQKKyAqCSAgICAgJVBbQS1aXSAgIHNldCBzdGF0aWMgdmFyaWFibGUgW0EtWl0gdG8gcG9wKCkKKyAqCSAgICAgJWdbQS1aXSAgIGdldCBzdGF0aWMgdmFyaWFibGUgW0EtWl0gYW5kIHB1c2ggaXQKKyAqCSAgICAgJWwgICAgICAgIHB1c2ggc3RybGVuKHBvcCkKKyAqCSAgICAgJSdjJyAgICAgIHB1c2ggY2hhciBjb25zdGFudCBjCisgKgkgICAgICV7bm59ICAgICBwdXNoIGludGVnZXIgY29uc3RhbnQgbm4KKyAqCisgKgkgICAgICUrICUtICUqICUvICVtCisgKgkgICAgICAgICAgICAgICBhcml0aG1ldGljICglbSBpcyBtb2QpOiBwdXNoKHBvcCgpIG9wIHBvcCgpKQorICoJICAgICAlJiAlfCAlXiAgYml0IG9wZXJhdGlvbnM6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisgKgkgICAgICU9ICU+ICU8ICBsb2dpY2FsIG9wZXJhdGlvbnM6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisgKgkgICAgICVBICVPICAgICBsb2dpY2FsIGFuZCAmIG9yIG9wZXJhdGlvbnMgZm9yIGNvbmRpdGlvbmFscworICoJICAgICAlISAlfiAgICAgdW5hcnkgb3BlcmF0aW9ucyBwdXNoKG9wIHBvcCgpKQorICoJICAgICAlaSAgICAgICAgYWRkIDEgdG8gZmlyc3QgdHdvIHBhcm1zIChmb3IgQU5TSSB0ZXJtaW5hbHMpCisgKgorICoJICAgICAlPyBleHByICV0IHRoZW5wYXJ0ICVlIGVsc2VwYXJ0ICU7CisgKgkgICAgICAgICAgICAgICBpZi10aGVuLWVsc2UsICVlIGVsc2VwYXJ0IGlzIG9wdGlvbmFsLgorICoJICAgICAgICAgICAgICAgZWxzZS1pZidzIGFyZSBwb3NzaWJsZSBhbGEgQWxnb2wgNjg6CisgKgkgICAgICAgICAgICAgICAlPyBjMSAldCBiMSAlZSBjMiAldCBiMiAlZSBjMyAldCBiMyAlZSBjNCAldCBiNCAlZSBiNSAlOworICoKKyAqCUZvciB0aG9zZSBvZiB0aGUgYWJvdmUgb3BlcmF0b3JzIHdoaWNoIGFyZSBiaW5hcnkgYW5kIG5vdCBjb21tdXRhdGl2ZSwKKyAqCXRoZSBzdGFjayB3b3JrcyBpbiB0aGUgdXN1YWwgd2F5LCB3aXRoCisgKgkJCSVneCAlZ3kgJW0KKyAqCXJlc3VsdGluZyBpbiB4IG1vZCB5LCBub3QgdGhlIHJldmVyc2UuCisgKi8KKworTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX3RwYXJtX2VyciA9IDA7CisKKyNkZWZpbmUgVFBTKHZhcikgX25jX3ByZXNjcmVlbi50cGFybV9zdGF0ZS52YXIKKworI2lmIE5PX0xFQUtTCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfdHBhcm0odm9pZCkKK3sKKyAgICBpZiAoVFBTKG91dF9idWZmKSAhPSAwKSB7CisJRnJlZUFuZE51bGwoVFBTKG91dF9idWZmKSk7CisJVFBTKG91dF9zaXplKSA9IDA7CisJVFBTKG91dF91c2VkKSA9IDA7CisJRnJlZUFuZE51bGwoVFBTKGZtdF9idWZmKSk7CisJVFBTKGZtdF9zaXplKSA9IDA7CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCitnZXRfc3BhY2Uoc2l6ZV90IG5lZWQpCit7CisgICAgbmVlZCArPSBUUFMob3V0X3VzZWQpOworICAgIGlmIChuZWVkID4gVFBTKG91dF9zaXplKSkgeworCVRQUyhvdXRfc2l6ZSkgPSBuZWVkICogMjsKKwlUUFMob3V0X2J1ZmYpID0gdHlwZVJlYWxsb2MoY2hhciwgVFBTKG91dF9zaXplKSwgVFBTKG91dF9idWZmKSk7CisJaWYgKFRQUyhvdXRfYnVmZikgPT0gMCkKKwkgICAgX25jX2Vycl9hYm9ydChNU0dfTk9fTUVNT1JZKTsKKyAgICB9Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCitzYXZlX3RleHQoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpzLCBpbnQgbGVuKQoreworICAgIHNpemVfdCBzX2xlbiA9IHN0cmxlbihzKTsKKyAgICBpZiAobGVuID4gKGludCkgc19sZW4pCisJc19sZW4gPSBsZW47CisKKyAgICBnZXRfc3BhY2Uoc19sZW4gKyAxKTsKKworICAgICh2b2lkKSBzcHJpbnRmKFRQUyhvdXRfYnVmZikgKyBUUFMob3V0X3VzZWQpLCBmbXQsIHMpOworICAgIFRQUyhvdXRfdXNlZCkgKz0gc3RybGVuKFRQUyhvdXRfYnVmZikgKyBUUFMob3V0X3VzZWQpKTsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK3NhdmVfbnVtYmVyKGNvbnN0IGNoYXIgKmZtdCwgaW50IG51bWJlciwgaW50IGxlbikKK3sKKyAgICBpZiAobGVuIDwgMzApCisJbGVuID0gMzA7CQkvKiBhY3R1YWxseSBsb2cxMChNQVhfSU5UKSsxICovCisKKyAgICBnZXRfc3BhY2UoKHVuc2lnbmVkKSBsZW4gKyAxKTsKKworICAgICh2b2lkKSBzcHJpbnRmKFRQUyhvdXRfYnVmZikgKyBUUFMob3V0X3VzZWQpLCBmbXQsIG51bWJlcik7CisgICAgVFBTKG91dF91c2VkKSArPSBzdHJsZW4oVFBTKG91dF9idWZmKSArIFRQUyhvdXRfdXNlZCkpOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorc2F2ZV9jaGFyKGludCBjKQoreworICAgIGlmIChjID09IDApCisJYyA9IDAyMDA7CisgICAgZ2V0X3NwYWNlKDEpOworICAgIFRQUyhvdXRfYnVmZilbVFBTKG91dF91c2VkKSsrXSA9IChjaGFyKSBjOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorbnB1c2goaW50IHgpCit7CisgICAgaWYgKFRQUyhzdGFja19wdHIpIDwgU1RBQ0tTSVpFKSB7CisJVFBTKHN0YWNrKVtUUFMoc3RhY2tfcHRyKV0ubnVtX3R5cGUgPSBUUlVFOworCVRQUyhzdGFjaylbVFBTKHN0YWNrX3B0cildLmRhdGEubnVtID0geDsKKwlUUFMoc3RhY2tfcHRyKSsrOworICAgIH0gZWxzZSB7CisJREVCVUcoMiwgKCJucHVzaDogc3RhY2sgb3ZlcmZsb3c6ICVzIiwgX25jX3Zpc2J1ZihUUFModHBhcmFtX2Jhc2UpKSkpOworCV9uY190cGFybV9lcnIrKzsKKyAgICB9Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBpbnQKK25wb3Aodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpZiAoVFBTKHN0YWNrX3B0cikgPiAwKSB7CisJVFBTKHN0YWNrX3B0ciktLTsKKwlpZiAoVFBTKHN0YWNrKVtUUFMoc3RhY2tfcHRyKV0ubnVtX3R5cGUpCisJICAgIHJlc3VsdCA9IFRQUyhzdGFjaylbVFBTKHN0YWNrX3B0cildLmRhdGEubnVtOworICAgIH0gZWxzZSB7CisJREVCVUcoMiwgKCJucG9wOiBzdGFjayB1bmRlcmZsb3c6ICVzIiwgX25jX3Zpc2J1ZihUUFModHBhcmFtX2Jhc2UpKSkpOworCV9uY190cGFybV9lcnIrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK3NwdXNoKGNoYXIgKngpCit7CisgICAgaWYgKFRQUyhzdGFja19wdHIpIDwgU1RBQ0tTSVpFKSB7CisJVFBTKHN0YWNrKVtUUFMoc3RhY2tfcHRyKV0ubnVtX3R5cGUgPSBGQUxTRTsKKwlUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5kYXRhLnN0ciA9IHg7CisJVFBTKHN0YWNrX3B0cikrKzsKKyAgICB9IGVsc2UgeworCURFQlVHKDIsICgic3B1c2g6IHN0YWNrIG92ZXJmbG93OiAlcyIsIF9uY192aXNidWYoVFBTKHRwYXJhbV9iYXNlKSkpKTsKKwlfbmNfdHBhcm1fZXJyKys7CisgICAgfQorfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgY2hhciAqCitzcG9wKHZvaWQpCit7CisgICAgc3RhdGljIGNoYXIgZHVtbXlbXSA9ICIiOwkvKiBhdm9pZCBjb25zdC1jYXN0ICovCisgICAgY2hhciAqcmVzdWx0ID0gZHVtbXk7CisgICAgaWYgKFRQUyhzdGFja19wdHIpID4gMCkgeworCVRQUyhzdGFja19wdHIpLS07CisJaWYgKCFUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5udW1fdHlwZQorCSAgICAmJiBUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5kYXRhLnN0ciAhPSAwKQorCSAgICByZXN1bHQgPSBUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5kYXRhLnN0cjsKKyAgICB9IGVsc2UgeworCURFQlVHKDIsICgic3BvcDogc3RhY2sgdW5kZXJmbG93OiAlcyIsIF9uY192aXNidWYoVFBTKHRwYXJhbV9iYXNlKSkpKTsKKwlfbmNfdHBhcm1fZXJyKys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBjb25zdCBjaGFyICoKK3BhcnNlX2Zvcm1hdChjb25zdCBjaGFyICpzLCBjaGFyICpmb3JtYXQsIGludCAqbGVuKQoreworICAgICpsZW4gPSAwOworICAgIGlmIChmb3JtYXQgIT0gMCkgeworCWJvb2wgZG9uZSA9IEZBTFNFOworCWJvb2wgYWxsb3dtaW51cyA9IEZBTFNFOworCWJvb2wgZG90ID0gRkFMU0U7CisJYm9vbCBlcnIgPSBGQUxTRTsKKwljaGFyICpmbXQgPSBmb3JtYXQ7CisJaW50IG15X3dpZHRoID0gMDsKKwlpbnQgbXlfcHJlYyA9IDA7CisJaW50IHZhbHVlID0gMDsKKworCSpsZW4gPSAwOworCSpmb3JtYXQrKyA9ICclJzsKKwl3aGlsZSAoKnMgIT0gJ1wwJyAmJiAhZG9uZSkgeworCSAgICBzd2l0Y2ggKCpzKSB7CisJICAgIGNhc2UgJ2MnOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnZCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdvJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ3gnOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnWCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdzJzoKKwkJKmZvcm1hdCsrID0gKnM7CisJCWRvbmUgPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSAnLic6CisJCSpmb3JtYXQrKyA9ICpzKys7CisJCWlmIChkb3QpIHsKKwkJICAgIGVyciA9IFRSVUU7CisJCX0gZWxzZSB7CS8qIHZhbHVlIGJlZm9yZSAnLicgaXMgdGhlIHdpZHRoICovCisJCSAgICBkb3QgPSBUUlVFOworCQkgICAgbXlfd2lkdGggPSB2YWx1ZTsKKwkJfQorCQl2YWx1ZSA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlICcjJzoKKwkJKmZvcm1hdCsrID0gKnMrKzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyAnOgorCQkqZm9ybWF0KysgPSAqcysrOworCQlicmVhazsKKwkgICAgY2FzZSAnOic6CisJCXMrKzsKKwkJYWxsb3dtaW51cyA9IFRSVUU7CisJCWJyZWFrOworCSAgICBjYXNlICctJzoKKwkJaWYgKGFsbG93bWludXMpIHsKKwkJICAgICpmb3JtYXQrKyA9ICpzKys7CisJCX0gZWxzZSB7CisJCSAgICBkb25lID0gVFJVRTsKKwkJfQorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJaWYgKGlzZGlnaXQoVUNoYXIoKnMpKSkgeworCQkgICAgdmFsdWUgPSAodmFsdWUgKiAxMCkgKyAoKnMgLSAnMCcpOworCQkgICAgaWYgKHZhbHVlID4gMTAwMDApCisJCQllcnIgPSBUUlVFOworCQkgICAgKmZvcm1hdCsrID0gKnMrKzsKKwkJfSBlbHNlIHsKKwkJICAgIGRvbmUgPSBUUlVFOworCQl9CisJICAgIH0KKwl9CisKKwkvKgorCSAqIElmIHdlIGZvdW5kIGFuIGVycm9yLCBpZ25vcmUgKGFuZCByZW1vdmUpIHRoZSBmbGFncy4KKwkgKi8KKwlpZiAoZXJyKSB7CisJICAgIG15X3dpZHRoID0gbXlfcHJlYyA9IHZhbHVlID0gMDsKKwkgICAgZm9ybWF0ID0gZm10OworCSAgICAqZm9ybWF0KysgPSAnJSc7CisJICAgICpmb3JtYXQrKyA9ICpzOworCX0KKworCS8qCisJICogQW55IHZhbHVlIGFmdGVyICcuJyBpcyB0aGUgcHJlY2lzaW9uLiAgSWYgd2UgZGlkIG5vdCBzZWUgJy4nLCB0aGVuCisJICogdGhlIHZhbHVlIGlzIHRoZSB3aWR0aC4KKwkgKi8KKwlpZiAoZG90KQorCSAgICBteV9wcmVjID0gdmFsdWU7CisJZWxzZQorCSAgICBteV93aWR0aCA9IHZhbHVlOworCisJKmZvcm1hdCA9ICdcMCc7CisJLyogcmV0dXJuIG1heGltdW0gc3RyaW5nIGxlbmd0aCBpbiBwcmludCAqLworCSpsZW4gPSAobXlfd2lkdGggPiBteV9wcmVjKSA/IG15X3dpZHRoIDogbXlfcHJlYzsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CisKKyNkZWZpbmUgaXNVUFBFUihjKSAoKGMpID49ICdBJyAmJiAoYykgPD0gJ1onKQorI2RlZmluZSBpc0xPV0VSKGMpICgoYykgPj0gJ2EnICYmIChjKSA8PSAneicpCisKKy8qCisgKiBBbmFseXplIHRoZSBzdHJpbmcgdG8gc2VlIGhvdyBtYW55IHBhcmFtZXRlcnMgd2UgbmVlZCBmcm9tIHRoZSB2YXJhcmdzIGxpc3QsCisgKiBhbmQgd2hhdCB0aGVpciB0eXBlcyBhcmUuICBXZSB3aWxsIG9ubHkgYWNjZXB0IHN0cmluZyBwYXJhbWV0ZXJzIGlmIHRoZXkKKyAqIGFwcGVhciBhcyBhICVsIG9yICVzIGZvcm1hdCBmb2xsb3dpbmcgYW4gZXhwbGljaXQgcGFyYW1ldGVyIHJlZmVyZW5jZSAoZS5nLiwKKyAqICVwMiVzKS4gIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBudW1iZXJzLgorICoKKyAqICdudW1iZXInIGNvdW50cyBjb2Fyc2VseSB0aGUgbnVtYmVyIG9mIHBvcCdzIHdlIHNlZSBpbiB0aGUgc3RyaW5nLCBhbmQKKyAqICdwb3Bjb3VudCcgc2hvd3MgdGhlIGhpZ2hlc3QgcGFyYW1ldGVyIG51bWJlciBpbiB0aGUgc3RyaW5nLiAgV2Ugd291bGQgbGlrZQorICogdG8gc2ltcGx5IHVzZSB0aGUgbGF0dGVyIGNvdW50LCBidXQgaWYgd2UgYXJlIHJlYWRpbmcgdGVybWNhcCBzdHJpbmdzLCB0aGVyZQorICogbWF5IGJlIGNhc2VzIHRoYXQgd2UgY2Fubm90IHNlZSB0aGUgZXhwbGljaXQgcGFyYW1ldGVyIG51bWJlcnMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY190cGFybV9hbmFseXplKGNvbnN0IGNoYXIgKnN0cmluZywgY2hhciAqcF9pc19zW05VTV9QQVJNXSwgaW50ICpwb3Bjb3VudCkKK3sKKyAgICBzaXplX3QgbGVuMjsKKyAgICBpbnQgaTsKKyAgICBpbnQgbGFzdHBvcCA9IC0xOworICAgIGludCBsZW47CisgICAgaW50IG51bWJlciA9IDA7CisgICAgY29uc3QgY2hhciAqY3AgPSBzdHJpbmc7CisgICAgc3RhdGljIGNoYXIgZHVtbXlbXSA9ICIiOworCisgICAgaWYgKGNwID09IDApCisJcmV0dXJuIDA7CisKKyAgICBpZiAoKGxlbjIgPSBzdHJsZW4oY3ApKSA+IFRQUyhmbXRfc2l6ZSkpIHsKKwlUUFMoZm10X3NpemUpID0gbGVuMiArIFRQUyhmbXRfc2l6ZSkgKyAyOworCVRQUyhmbXRfYnVmZikgPSB0eXBlUmVhbGxvYyhjaGFyLCBUUFMoZm10X3NpemUpLCBUUFMoZm10X2J1ZmYpKTsKKwlpZiAoVFBTKGZtdF9idWZmKSA9PSAwKQorCSAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtZW1zZXQocF9pc19zLCAwLCBzaXplb2YocF9pc19zWzBdKSAqIE5VTV9QQVJNKTsKKyAgICAqcG9wY291bnQgPSAwOworCisgICAgd2hpbGUgKChjcCAtIHN0cmluZykgPCAoaW50KSBsZW4yKSB7CisJaWYgKCpjcCA9PSAnJScpIHsKKwkgICAgY3ArKzsKKwkgICAgY3AgPSBwYXJzZV9mb3JtYXQoY3AsIFRQUyhmbXRfYnVmZiksICZsZW4pOworCSAgICBzd2l0Y2ggKCpjcCkgeworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKworCSAgICBjYXNlICdkJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ28nOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAneCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdYJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ2MnOgkJLyogRkFMTFRIUlUgKi8KKwkJaWYgKGxhc3Rwb3AgPD0gMCkKKwkJICAgIG51bWJlcisrOworCQlsYXN0cG9wID0gLTE7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2wnOgorCSAgICBjYXNlICdzJzoKKwkJaWYgKGxhc3Rwb3AgPiAwKQorCQkgICAgcF9pc19zW2xhc3Rwb3AgLSAxXSA9IGR1bW15OworCQkrK251bWJlcjsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAncCc6CisJCWNwKys7CisJCWkgPSAoVUNoYXIoKmNwKSAtICcwJyk7CisJCWlmIChpID49IDAgJiYgaSA8PSBOVU1fUEFSTSkgeworCQkgICAgbGFzdHBvcCA9IGk7CisJCSAgICBpZiAobGFzdHBvcCA+ICpwb3Bjb3VudCkKKwkJCSpwb3Bjb3VudCA9IGxhc3Rwb3A7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnUCc6CisJCSsrbnVtYmVyOworCQkrK2NwOworCQlicmVhazsKKworCSAgICBjYXNlICdnJzoKKwkJY3ArKzsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBTX1FVT1RFOgorCQljcCArPSAyOworCQlsYXN0cG9wID0gLTE7CisJCWJyZWFrOworCisJICAgIGNhc2UgTF9CUkFDRToKKwkJY3ArKzsKKwkJd2hpbGUgKGlzZGlnaXQoVUNoYXIoKmNwKSkpIHsKKwkJICAgIGNwKys7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnKyc6CisJICAgIGNhc2UgJy0nOgorCSAgICBjYXNlICcqJzoKKwkgICAgY2FzZSAnLyc6CisJICAgIGNhc2UgJ20nOgorCSAgICBjYXNlICdBJzoKKwkgICAgY2FzZSAnTyc6CisJICAgIGNhc2UgJyYnOgorCSAgICBjYXNlICd8JzoKKwkgICAgY2FzZSAnXic6CisJICAgIGNhc2UgJz0nOgorCSAgICBjYXNlICc8JzoKKwkgICAgY2FzZSAnPic6CisJCWxhc3Rwb3AgPSAtMTsKKwkJbnVtYmVyICs9IDI7CisJCWJyZWFrOworCisJICAgIGNhc2UgJyEnOgorCSAgICBjYXNlICd+JzoKKwkJbGFzdHBvcCA9IC0xOworCQkrK251bWJlcjsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnaSc6CisJCS8qIHdpbGwgYWRkIDEgdG8gZmlyc3QgKHVzdWFsbHkgdHdvKSBwYXJhbWV0ZXJzICovCisJCWJyZWFrOworCSAgICB9CisJfQorCWlmICgqY3AgIT0gJ1wwJykKKwkgICAgY3ArKzsKKyAgICB9CisKKyAgICBpZiAobnVtYmVyID4gTlVNX1BBUk0pCisJbnVtYmVyID0gTlVNX1BBUk07CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGNoYXIgKgordHBhcmFtX2ludGVybmFsKGNvbnN0IGNoYXIgKnN0cmluZywgdmFfbGlzdCBhcCkKK3sKKyAgICBjaGFyICpwX2lzX3NbTlVNX1BBUk1dOworICAgIFRQQVJNX0FSRyBwYXJhbVtOVU1fUEFSTV07CisgICAgaW50IHBvcGNvdW50OworICAgIGludCBudW1iZXI7CisgICAgaW50IGxlbjsKKyAgICBpbnQgbGV2ZWw7CisgICAgaW50IHgsIHk7CisgICAgaW50IGk7CisgICAgY29uc3QgY2hhciAqY3AgPSBzdHJpbmc7CisgICAgc2l6ZV90IGxlbjI7CisKKyAgICBpZiAoY3AgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIFRQUyhvdXRfdXNlZCkgPSAwOworICAgIGxlbjIgPSBzdHJsZW4oY3ApOworCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBoaWdoZXN0IHBhcmFtZXRlci1udW1iZXIgcmVmZXJyZWQgdG8gaW4gdGhlIGZvcm1hdCBzdHJpbmcuCisgICAgICogVXNlIHRoaXMgdmFsdWUgdG8gbGltaXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgY29waWVkIGZyb20gdGhlCisgICAgICogdmFyaWFibGUtbGVuZ3RoIGFyZ3VtZW50IGxpc3QuCisgICAgICovCisgICAgbnVtYmVyID0gX25jX3RwYXJtX2FuYWx5emUoY3AsIHBfaXNfcywgJnBvcGNvdW50KTsKKyAgICBpZiAoVFBTKGZtdF9idWZmKSA9PSAwKQorCXJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IG1heChwb3Bjb3VudCwgbnVtYmVyKTsgaSsrKSB7CisJLyoKKwkgKiBBIGZldyBjYXBzIChzdWNoIGFzIHBsYWJfbm9ybSkgaGF2ZSBzdHJpbmctdmFsdWVkIHBhcm1zLgorCSAqIFdlJ2xsIGhhdmUgdG8gYXNzdW1lIHRoYXQgdGhlIGNhbGxlciBrbm93cyB0aGUgZGlmZmVyZW5jZSwgc2luY2UKKwkgKiBhIGNoYXIqIGFuZCBhbiBpbnQgbWF5IG5vdCBiZSB0aGUgc2FtZSBzaXplIG9uIHRoZSBzdGFjay4gIFRoZQorCSAqIG5vcm1hbCBwcm90b3R5cGUgZm9yIHRoaXMgdXNlcyA5IGxvbmcncywgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoCisJICogb3VyIHZhX2FyZygpIHVzYWdlLgorCSAqLworCWlmIChwX2lzX3NbaV0gIT0gMCkgeworCSAgICBwX2lzX3NbaV0gPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJfSBlbHNlIHsKKwkgICAgcGFyYW1baV0gPSB2YV9hcmcoYXAsIFRQQVJNX0FSRyk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogVGhpcyBpcyBhIHRlcm1jYXAgY29tcGF0aWJpbGl0eSBoYWNrLiAgSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IHBvcAorICAgICAqIG9wZXJhdGlvbnMgaW4gdGhlIHN0cmluZywgbG9hZCB0aGUgc3RhY2sgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgICogc3VjY2Vzc2l2ZSBwb3BzIHdpbGwgZ3JhYiBzdWNjZXNzaXZlIHBhcmFtZXRlcnMuICBUaGF0IHdpbGwgbWFrZQorICAgICAqIHRoZSBleHBhbnNpb24gb2YgKGZvciBleGFtcGxlKSBcRVslZDslZEggd29yayBjb3JyZWN0bHkgaW4gdGVybWNhcAorICAgICAqIHN0eWxlLCB3aGljaCBtZWFucyB0cGFyYW0oKSB3aWxsIGV4cGFuZCB0ZXJtY2FwIHN0cmluZ3MgT0suCisgICAgICovCisgICAgVFBTKHN0YWNrX3B0cikgPSAwOworICAgIGlmIChwb3Bjb3VudCA9PSAwKSB7CisJcG9wY291bnQgPSBudW1iZXI7CisJZm9yIChpID0gbnVtYmVyIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkgICAgaWYgKHBfaXNfc1tpXSkKKwkJc3B1c2gocF9pc19zW2ldKTsKKwkgICAgZWxzZQorCQlucHVzaChwYXJhbVtpXSk7CisJfQorICAgIH0KKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX0NBTExTKSkgeworCWZvciAoaSA9IDA7IGkgPCBwb3Bjb3VudDsgaSsrKSB7CisJICAgIGlmIChwX2lzX3NbaV0gIT0gMCkKKwkJc2F2ZV90ZXh0KCIsICVzIiwgX25jX3Zpc2J1ZihwX2lzX3NbaV0pLCAwKTsKKwkgICAgZWxzZQorCQlzYXZlX251bWJlcigiLCAlZCIsIHBhcmFtW2ldLCAwKTsKKwl9CisJX3RyYWNlZihUX0NBTExFRCgiJXMoJXMlcykiKSwgVFBTKHRuYW1lKSwgX25jX3Zpc2J1ZihjcCksIFRQUyhvdXRfYnVmZikpOworCVRQUyhvdXRfdXNlZCkgPSAwOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICB3aGlsZSAoKGNwIC0gc3RyaW5nKSA8IChpbnQpIGxlbjIpIHsKKwlpZiAoKmNwICE9ICclJykgeworCSAgICBzYXZlX2NoYXIoVUNoYXIoKmNwKSk7CisJfSBlbHNlIHsKKwkgICAgVFBTKHRwYXJhbV9iYXNlKSA9IGNwKys7CisJICAgIGNwID0gcGFyc2VfZm9ybWF0KGNwLCBUUFMoZm10X2J1ZmYpLCAmbGVuKTsKKwkgICAgc3dpdGNoICgqY3ApIHsKKwkgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAgIGNhc2UgJyUnOgorCQlzYXZlX2NoYXIoJyUnKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnZCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdvJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ3gnOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnWCc6CQkvKiBGQUxMVEhSVSAqLworCQlzYXZlX251bWJlcihUUFMoZm10X2J1ZmYpLCBucG9wKCksIGxlbik7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2MnOgkJLyogRkFMTFRIUlUgKi8KKwkJc2F2ZV9jaGFyKG5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2wnOgorCQlzYXZlX251bWJlcigiJWQiLCAoaW50KSBzdHJsZW4oc3BvcCgpKSwgMCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ3MnOgorCQlzYXZlX3RleHQoVFBTKGZtdF9idWZmKSwgc3BvcCgpLCBsZW4pOworCQlicmVhazsKKworCSAgICBjYXNlICdwJzoKKwkJY3ArKzsKKwkJaSA9IChVQ2hhcigqY3ApIC0gJzEnKTsKKwkJaWYgKGkgPj0gMCAmJiBpIDwgTlVNX1BBUk0pIHsKKwkJICAgIGlmIChwX2lzX3NbaV0pCisJCQlzcHVzaChwX2lzX3NbaV0pOworCQkgICAgZWxzZQorCQkJbnB1c2gocGFyYW1baV0pOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ1AnOgorCQljcCsrOworCQlpZiAoaXNVUFBFUigqY3ApKSB7CisJCSAgICBpID0gKFVDaGFyKCpjcCkgLSAnQScpOworCQkgICAgVFBTKHN0YXRpY192YXJzKVtpXSA9IG5wb3AoKTsKKwkJfSBlbHNlIGlmIChpc0xPV0VSKCpjcCkpIHsKKwkJICAgIGkgPSAoVUNoYXIoKmNwKSAtICdhJyk7CisJCSAgICBUUFMoZHluYW1pY192YXIpW2ldID0gbnBvcCgpOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2cnOgorCQljcCsrOworCQlpZiAoaXNVUFBFUigqY3ApKSB7CisJCSAgICBpID0gKFVDaGFyKCpjcCkgLSAnQScpOworCQkgICAgbnB1c2goVFBTKHN0YXRpY192YXJzKVtpXSk7CisJCX0gZWxzZSBpZiAoaXNMT1dFUigqY3ApKSB7CisJCSAgICBpID0gKFVDaGFyKCpjcCkgLSAnYScpOworCQkgICAgbnB1c2goVFBTKGR5bmFtaWNfdmFyKVtpXSk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSBTX1FVT1RFOgorCQljcCsrOworCQlucHVzaChVQ2hhcigqY3ApKTsKKwkJY3ArKzsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBMX0JSQUNFOgorCQludW1iZXIgPSAwOworCQljcCsrOworCQl3aGlsZSAoaXNkaWdpdChVQ2hhcigqY3ApKSkgeworCQkgICAgbnVtYmVyID0gKG51bWJlciAqIDEwKSArIChVQ2hhcigqY3ApIC0gJzAnKTsKKwkJICAgIGNwKys7CisJCX0KKwkJbnB1c2gobnVtYmVyKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnKyc6CisJCW5wdXNoKG5wb3AoKSArIG5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJy0nOgorCQl5ID0gbnBvcCgpOworCQl4ID0gbnBvcCgpOworCQlucHVzaCh4IC0geSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJyonOgorCQlucHVzaChucG9wKCkgKiBucG9wKCkpOworCQlicmVhazsKKworCSAgICBjYXNlICcvJzoKKwkJeSA9IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeSA/ICh4IC8geSkgOiAwKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnbSc6CisJCXkgPSBucG9wKCk7CisJCXggPSBucG9wKCk7CisJCW5wdXNoKHkgPyAoeCAlIHkpIDogMCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ0EnOgorCQlucHVzaChucG9wKCkgJiYgbnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnTyc6CisJCW5wdXNoKG5wb3AoKSB8fCBucG9wKCkpOworCQlicmVhazsKKworCSAgICBjYXNlICcmJzoKKwkJbnB1c2gobnBvcCgpICYgbnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnfCc6CisJCW5wdXNoKG5wb3AoKSB8IG5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ14nOgorCQlucHVzaChucG9wKCkgXiBucG9wKCkpOworCQlicmVhazsKKworCSAgICBjYXNlICc9JzoKKwkJeSA9IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeCA9PSB5KTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnPCc6CisJCXkgPSBucG9wKCk7CisJCXggPSBucG9wKCk7CisJCW5wdXNoKHggPCB5KTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnPic6CisJCXkgPSBucG9wKCk7CisJCXggPSBucG9wKCk7CisJCW5wdXNoKHggPiB5KTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnISc6CisJCW5wdXNoKCFucG9wKCkpOworCQlicmVhazsKKworCSAgICBjYXNlICd+JzoKKwkJbnB1c2gofm5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2knOgorCQlpZiAocF9pc19zWzBdID09IDApCisJCSAgICBwYXJhbVswXSsrOworCQlpZiAocF9pc19zWzFdID09IDApCisJCSAgICBwYXJhbVsxXSsrOworCQlicmVhazsKKworCSAgICBjYXNlICc/JzoKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAndCc6CisJCXggPSBucG9wKCk7CisJCWlmICgheCkgeworCQkgICAgLyogc2NhbiBmb3J3YXJkIGZvciAlZSBvciAlOyBhdCBsZXZlbCB6ZXJvICovCisJCSAgICBjcCsrOworCQkgICAgbGV2ZWwgPSAwOworCQkgICAgd2hpbGUgKCpjcCkgeworCQkJaWYgKCpjcCA9PSAnJScpIHsKKwkJCSAgICBjcCsrOworCQkJICAgIGlmICgqY3AgPT0gJz8nKQorCQkJCWxldmVsKys7CisJCQkgICAgZWxzZSBpZiAoKmNwID09ICc7JykgeworCQkJCWlmIChsZXZlbCA+IDApCisJCQkJICAgIGxldmVsLS07CisJCQkJZWxzZQorCQkJCSAgICBicmVhazsKKwkJCSAgICB9IGVsc2UgaWYgKCpjcCA9PSAnZScgJiYgbGV2ZWwgPT0gMCkKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCpjcCkKKwkJCSAgICBjcCsrOworCQkgICAgfQorCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2UnOgorCQkvKiBzY2FuIGZvcndhcmQgZm9yIGEgJTsgYXQgbGV2ZWwgemVybyAqLworCQljcCsrOworCQlsZXZlbCA9IDA7CisJCXdoaWxlICgqY3ApIHsKKwkJICAgIGlmICgqY3AgPT0gJyUnKSB7CisJCQljcCsrOworCQkJaWYgKCpjcCA9PSAnPycpCisJCQkgICAgbGV2ZWwrKzsKKwkJCWVsc2UgaWYgKCpjcCA9PSAnOycpIHsKKwkJCSAgICBpZiAobGV2ZWwgPiAwKQorCQkJCWxldmVsLS07CisJCQkgICAgZWxzZQorCQkJCWJyZWFrOworCQkJfQorCQkgICAgfQorCisJCSAgICBpZiAoKmNwKQorCQkJY3ArKzsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlICc7JzoKKwkJYnJlYWs7CisKKwkgICAgfQkJCS8qIGVuZHN3aXRjaCAoKmNwKSAqLworCX0JCQkvKiBlbmRlbHNlICgqY3AgPT0gJyUnKSAqLworCisJaWYgKCpjcCA9PSAnXDAnKQorCSAgICBicmVhazsKKworCWNwKys7CisgICAgfQkJCQkvKiBlbmR3aGlsZSAoKmNwKSAqLworCisgICAgZ2V0X3NwYWNlKDEpOworICAgIFRQUyhvdXRfYnVmZilbVFBTKG91dF91c2VkKV0gPSAnXDAnOworCisgICAgVCgoVF9SRVRVUk4oIiVzIiksIF9uY192aXNidWYoVFBTKG91dF9idWZmKSkpKTsKKyAgICByZXR1cm4gKFRQUyhvdXRfYnVmZikpOworfQorCisjaWYgTkNVUlNFU19UUEFSTV9WQVJBUkdTCisjZGVmaW5lIHRwYXJtX3ZhcmFyZ3MgdHBhcm0KKyNlbHNlCisjZGVmaW5lIHRwYXJtX3Byb3RvIHRwYXJtCisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQordHBhcm1fdmFyYXJncyhOQ1VSU0VTX0NPTlNUIGNoYXIgKnN0cmluZywuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKyAgICBjaGFyICpyZXN1bHQ7CisKKyAgICBfbmNfdHBhcm1fZXJyID0gMDsKKyAgICB2YV9zdGFydChhcCwgc3RyaW5nKTsKKyNpZmRlZiBUUkFDRQorICAgIFRQUyh0bmFtZSkgPSAidHBhcm0iOworI2VuZGlmIC8qIFRSQUNFICovCisgICAgcmVzdWx0ID0gdHBhcmFtX2ludGVybmFsKHN0cmluZywgYXApOworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmICFOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK3RwYXJtX3Byb3RvKE5DVVJTRVNfQ09OU1QgY2hhciAqc3RyaW5nLAorCSAgICBUUEFSTV9BUkcgYTEsCisJICAgIFRQQVJNX0FSRyBhMiwKKwkgICAgVFBBUk1fQVJHIGEzLAorCSAgICBUUEFSTV9BUkcgYTQsCisJICAgIFRQQVJNX0FSRyBhNSwKKwkgICAgVFBBUk1fQVJHIGE2LAorCSAgICBUUEFSTV9BUkcgYTcsCisJICAgIFRQQVJNX0FSRyBhOCwKKwkgICAgVFBBUk1fQVJHIGE5KQoreworICAgIHJldHVybiB0cGFybV92YXJhcmdzKHN0cmluZywgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7Cit9CisjZW5kaWYgLyogTkNVUlNFU19UUEFSTV9WQVJBUkdTICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl90cHV0cy5jIGIvbmN1cnNlcy90aW5mby9saWJfdHB1dHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGI3Mjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9saWJfdHB1dHMuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJdHB1dHMuYworICoJCWRlbGF5X291dHB1dCgpCisgKgkJX25jX291dGNoKCkKKyAqCQl0cHV0cygpCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogcGFkZGluZ19iYXVkX3JhdGUsIHhvbl94b2ZmICovCisjaW5jbHVkZSA8dGVybWNhcC5oPgkJLyogb3NwZWVkICovCisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHB1dHMuYyx2IDEuNjYgMjAwOC8wNi8yOCAxMzoxMjoxNSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhcikgUEMgPSAwOyAgICAgICAgICAgICAgLyogdXNlZCBieSB0ZXJtY2FwIGxpYnJhcnkgKi8KK05DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX09TUEVFRCkgb3NwZWVkID0gMDsgICAgICAgIC8qIHVzZWQgYnkgdGVybWNhcCBsaWJyYXJ5ICovCisKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY19udWxsc19zZW50ID0gMDsgICAvKiB1c2VkIGJ5ICd0YWNrJyBwcm9ncmFtICovCisKKyNpZiBOQ1VSU0VTX05PX1BBRERJTkcKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2V0X25vX3BhZGRpbmcoU0NSRUVOICpzcCkKK3sKKyAgICBib29sIG5vX3BhZGRpbmcgPSAoZ2V0ZW52KCJOQ1VSU0VTX05PX1BBRERJTkciKSAhPSAwKTsKKworICAgIGlmIChzcCkKKwlzcC0+X25vX3BhZGRpbmcgPSBub19wYWRkaW5nOworICAgIGVsc2UKKwlfbmNfcHJlc2NyZWVuLl9ub19wYWRkaW5nID0gbm9fcGFkZGluZzsKKworICAgIFRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLCAoInBhZGRpbmcgd2lsbCVzIGJlIHVzZWQiLAorCQkJCSAgICBHZXROb1BhZGRpbmcoc3ApID8gIiBub3QiIDogIiIpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50ICgqbXlfb3V0Y2gpIChpbnQgYykgPSBfbmNfb3V0Y2g7CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2RlbGF5X291dHB1dChpbnQgbXMpCit7CisgICAgVCgoVF9DQUxMRUQoImRlbGF5X291dHB1dCglZCkiKSwgbXMpKTsKKworICAgIGlmIChub19wYWRfY2hhcikgeworCV9uY19mbHVzaCgpOworCW5hcG1zKG1zKTsKKyAgICB9IGVsc2UgeworCXJlZ2lzdGVyIGludCBudWxsY291bnQ7CisKKwludWxsY291bnQgPSAobXMgKiBfbmNfYmF1ZHJhdGUob3NwZWVkKSkgLyAoQkFVREJZVEUgKiAxMDAwKTsKKwlmb3IgKF9uY19udWxsc19zZW50ICs9IG51bGxjb3VudDsgbnVsbGNvdW50ID4gMDsgbnVsbGNvdW50LS0pCisJICAgIG15X291dGNoKFBDKTsKKwlpZiAobXlfb3V0Y2ggPT0gX25jX291dGNoKQorCSAgICBfbmNfZmx1c2goKTsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mbHVzaCh2b2lkKQoreworICAgICh2b2lkKSBmZmx1c2goTkNfT1VUUFVUKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX291dGNoKGludCBjaCkKK3sKKyAgICBDT1VOVF9PVVRDSEFSUygxKTsKKworICAgIGlmIChTUCAhPSAwCisJJiYgU1AtPl9jbGVhbnVwKSB7CisJY2hhciB0bXAgPSBjaDsKKwkvKgorCSAqIFBPU0lYIHNheXMgd3JpdGUoKSBpcyBzYWZlIGluIGEgc2lnbmFsIGhhbmRsZXIsIGJ1dCB0aGUKKwkgKiBidWZmZXJlZCBJL08gaXMgbm90LgorCSAqLworCXdyaXRlKGZpbGVubyhOQ19PVVRQVVQpLCAmdG1wLCAxKTsKKyAgICB9IGVsc2UgeworCXB1dGMoY2gsIE5DX09VVFBVVCk7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcHV0cChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgcmV0dXJuIHRwdXRzKHN0cmluZywgMSwgX25jX291dGNoKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQordHB1dHMoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYWZmY250LCBpbnQgKCpvdXRjKSAoaW50KSkKK3sKKyAgICBib29sIGFsd2F5c19kZWxheTsKKyAgICBib29sIG5vcm1hbF9kZWxheTsKKyAgICBpbnQgbnVtYmVyOworI2lmIEJTRF9UUFVUUworICAgIGludCB0cmFpbHBhZDsKKyNlbmRpZiAvKiBCU0RfVFBVVFMgKi8KKworI2lmZGVmIFRSQUNFCisgICAgY2hhciBhZGRyYnVmWzMyXTsKKworICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX1RQVVRTKSkgeworCWlmIChvdXRjID09IF9uY19vdXRjaCkKKwkgICAgKHZvaWQpIHN0cmNweShhZGRyYnVmLCAiX25jX291dGNoIik7CisJZWxzZQorCSAgICAodm9pZCkgc3ByaW50ZihhZGRyYnVmLCAiJXAiLCBvdXRjKTsKKwlpZiAoX25jX3RwdXRzX3RyYWNlKSB7CisJICAgIF90cmFjZWYoInRwdXRzKCVzID0gJXMsICVkLCAlcykgY2FsbGVkIiwgX25jX3RwdXRzX3RyYWNlLAorCQkgICAgX25jX3Zpc2J1ZihzdHJpbmcpLCBhZmZjbnQsIGFkZHJidWYpOworCX0gZWxzZSB7CisJICAgIF90cmFjZWYoInRwdXRzKCVzLCAlZCwgJXMpIGNhbGxlZCIsIF9uY192aXNidWYoc3RyaW5nKSwgYWZmY250LCBhZGRyYnVmKTsKKwl9CisJVFBVVFNfVFJBQ0UoTlVMTCk7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIGlmICghVkFMSURfU1RSSU5HKHN0cmluZykpCisJcmV0dXJuIEVSUjsKKworICAgIGlmIChjdXJfdGVybSA9PSAwKSB7CisJYWx3YXlzX2RlbGF5ID0gRkFMU0U7CisJbm9ybWFsX2RlbGF5ID0gVFJVRTsKKyAgICB9IGVsc2UgeworCWFsd2F5c19kZWxheSA9IChzdHJpbmcgPT0gYmVsbCkgfHwgKHN0cmluZyA9PSBmbGFzaF9zY3JlZW4pOworCW5vcm1hbF9kZWxheSA9CisJICAgICF4b25feG9mZgorCSAgICAmJiBwYWRkaW5nX2JhdWRfcmF0ZQorI2lmIE5DVVJTRVNfTk9fUEFERElORworCSAgICAmJiAhR2V0Tm9QYWRkaW5nKFNQKQorI2VuZGlmCisJICAgICYmIChfbmNfYmF1ZHJhdGUob3NwZWVkKSA+PSBwYWRkaW5nX2JhdWRfcmF0ZSk7CisgICAgfQorCisjaWYgQlNEX1RQVVRTCisgICAgLyoKKyAgICAgKiBUaGlzIHVnbHkga2x1Z2UgZGVhbHMgd2l0aCB0aGUgZmFjdCB0aGF0IHNvbWUgYW5jaWVudCBCU0QgcHJvZ3JhbXMKKyAgICAgKiAobGlrZSBuZXRoYWNrKSBhY3R1YWxseSBkbyB0aGUgbGlrZXMgb2YgdHB1dHMoIjUwIikgdG8gZ2V0IGRlbGF5cy4KKyAgICAgKi8KKyAgICB0cmFpbHBhZCA9IDA7CisgICAgaWYgKGlzZGlnaXQoVUNoYXIoKnN0cmluZykpKSB7CisJd2hpbGUgKGlzZGlnaXQoVUNoYXIoKnN0cmluZykpKSB7CisJICAgIHRyYWlscGFkID0gdHJhaWxwYWQgKiAxMCArICgqc3RyaW5nIC0gJzAnKTsKKwkgICAgc3RyaW5nKys7CisJfQorCXRyYWlscGFkICo9IDEwOworCWlmICgqc3RyaW5nID09ICcuJykgeworCSAgICBzdHJpbmcrKzsKKwkgICAgaWYgKGlzZGlnaXQoVUNoYXIoKnN0cmluZykpKSB7CisJCXRyYWlscGFkICs9ICgqc3RyaW5nIC0gJzAnKTsKKwkJc3RyaW5nKys7CisJICAgIH0KKwkgICAgd2hpbGUgKGlzZGlnaXQoVUNoYXIoKnN0cmluZykpKQorCQlzdHJpbmcrKzsKKwl9CisKKwlpZiAoKnN0cmluZyA9PSAnKicpIHsKKwkgICAgdHJhaWxwYWQgKj0gYWZmY250OworCSAgICBzdHJpbmcrKzsKKwl9CisgICAgfQorI2VuZGlmIC8qIEJTRF9UUFVUUyAqLworCisgICAgbXlfb3V0Y2ggPSBvdXRjOwkJLyogcmVkaXJlY3QgZGVsYXlfb3V0cHV0KCkgKi8KKyAgICB3aGlsZSAoKnN0cmluZykgeworCWlmICgqc3RyaW5nICE9ICckJykKKwkgICAgKCpvdXRjKSAoKnN0cmluZyk7CisJZWxzZSB7CisJICAgIHN0cmluZysrOworCSAgICBpZiAoKnN0cmluZyAhPSAnPCcpIHsKKwkJKCpvdXRjKSAoJyQnKTsKKwkJaWYgKCpzdHJpbmcpCisJCSAgICAoKm91dGMpICgqc3RyaW5nKTsKKwkgICAgfSBlbHNlIHsKKwkJYm9vbCBtYW5kYXRvcnk7CisKKwkJc3RyaW5nKys7CisJCWlmICgoIWlzZGlnaXQoVUNoYXIoKnN0cmluZykpICYmICpzdHJpbmcgIT0gJy4nKQorCQkgICAgfHwgIXN0cmNocihzdHJpbmcsICc+JykpIHsKKwkJICAgICgqb3V0YykgKCckJyk7CisJCSAgICAoKm91dGMpICgnPCcpOworCQkgICAgY29udGludWU7CisJCX0KKworCQludW1iZXIgPSAwOworCQl3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpIHsKKwkJICAgIG51bWJlciA9IG51bWJlciAqIDEwICsgKCpzdHJpbmcgLSAnMCcpOworCQkgICAgc3RyaW5nKys7CisJCX0KKwkJbnVtYmVyICo9IDEwOworCQlpZiAoKnN0cmluZyA9PSAnLicpIHsKKwkJICAgIHN0cmluZysrOworCQkgICAgaWYgKGlzZGlnaXQoVUNoYXIoKnN0cmluZykpKSB7CisJCQludW1iZXIgKz0gKCpzdHJpbmcgLSAnMCcpOworCQkJc3RyaW5nKys7CisJCSAgICB9CisJCSAgICB3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpCisJCQlzdHJpbmcrKzsKKwkJfQorCisJCW1hbmRhdG9yeSA9IEZBTFNFOworCQl3aGlsZSAoKnN0cmluZyA9PSAnKicgfHwgKnN0cmluZyA9PSAnLycpIHsKKwkJICAgIGlmICgqc3RyaW5nID09ICcqJykgeworCQkJbnVtYmVyICo9IGFmZmNudDsKKwkJCXN0cmluZysrOworCQkgICAgfSBlbHNlIHsJLyogaWYgKCpzdHJpbmcgPT0gJy8nKSAqLworCQkJbWFuZGF0b3J5ID0gVFJVRTsKKwkJCXN0cmluZysrOworCQkgICAgfQorCQl9CisKKwkJaWYgKG51bWJlciA+IDAKKwkJICAgICYmIChhbHdheXNfZGVsYXkKKwkJCXx8IG5vcm1hbF9kZWxheQorCQkJfHwgbWFuZGF0b3J5KSkKKwkJICAgIGRlbGF5X291dHB1dChudW1iZXIgLyAxMCk7CisKKwkgICAgfQkJCS8qIGVuZGVsc2UgKCpzdHJpbmcgPT0gJzwnKSAqLworCX0JCQkvKiBlbmRlbHNlICgqc3RyaW5nID09ICckJykgKi8KKworCWlmICgqc3RyaW5nID09ICdcMCcpCisJICAgIGJyZWFrOworCisJc3RyaW5nKys7CisgICAgfQorCisjaWYgQlNEX1RQVVRTCisgICAgLyoKKyAgICAgKiBFbWl0IGFueSBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmcgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBub3cuCisgICAgICovCisgICAgaWYgKHRyYWlscGFkID4gMAorCSYmIChhbHdheXNfZGVsYXkgfHwgbm9ybWFsX2RlbGF5KSkKKwlkZWxheV9vdXRwdXQodHJhaWxwYWQgLyAxMCk7CisjZW5kaWYgLyogQlNEX1RQVVRTICovCisKKyAgICBteV9vdXRjaCA9IF9uY19vdXRjaDsKKyAgICByZXR1cm4gT0s7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL2xpYl90dHlmbGFncy5jIGIvbmN1cnNlcy90aW5mby9saWJfdHR5ZmxhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmIzOGEzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9saWJfdHR5ZmxhZ3MuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCQlkZWZfcHJvZ19tb2RlKCkKKyAqCQlkZWZfc2hlbGxfbW9kZSgpCisgKgkJcmVzZXRfcHJvZ19tb2RlKCkKKyAqCQlyZXNldF9zaGVsbF9tb2RlKCkKKyAqCQlzYXZldHR5KCkKKyAqCQlyZXNldHR5KCkKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBjdXJfdGVybSAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX3R0eWZsYWdzLmMsdiAxLjE4IDIwMDgvMDgvMDMgMjI6MTA6NDQgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2dldF90dHlfbW9kZShUVFkgKiBidWYpCit7CisgICAgaW50IHJlc3VsdCA9IE9LOworCisgICAgaWYgKGJ1ZiA9PSAwKSB7CisJcmVzdWx0ID0gRVJSOworICAgIH0gZWxzZSB7CisJaWYgKGN1cl90ZXJtID09IDApIHsKKwkgICAgcmVzdWx0ID0gRVJSOworCX0gZWxzZSB7CisJICAgIGZvciAoOzspIHsKKwkJaWYgKEdFVF9UVFkoY3VyX3Rlcm0tPkZpbGVkZXMsIGJ1ZikgIT0gMCkgeworCQkgICAgaWYgKGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisJCSAgICByZXN1bHQgPSBFUlI7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwlpZiAocmVzdWx0ID09IEVSUikKKwkgICAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKworCVRSKFRSQUNFX0JJVFMsICgiX25jX2dldF90dHlfbW9kZSglZCk6ICVzIiwKKwkJCWN1cl90ZXJtID8gY3VyX3Rlcm0tPkZpbGVkZXMgOiAtMSwKKwkJCV9uY190cmFjZV90dHltb2RlKGJ1ZikpKTsKKyAgICB9CisgICAgcmV0dXJuIChyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfc2V0X3R0eV9tb2RlKFRUWSAqIGJ1ZikKK3sKKyAgICBpbnQgcmVzdWx0ID0gT0s7CisKKyAgICBpZiAoYnVmID09IDApIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfSBlbHNlIHsKKwlpZiAoY3VyX3Rlcm0gPT0gMCkgeworCSAgICByZXN1bHQgPSBFUlI7CisJfSBlbHNlIHsKKwkgICAgZm9yICg7OykgeworCQlpZiAoU0VUX1RUWShjdXJfdGVybS0+RmlsZWRlcywgYnVmKSAhPSAwKSB7CisJCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKwkJICAgIGlmICgoZXJybm8gPT0gRU5PVFRZKSAmJiAoU1AgIT0gMCkpCisJCQlTUC0+X25vdHR5ID0gVFJVRTsKKwkJICAgIHJlc3VsdCA9IEVSUjsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKwlUUihUUkFDRV9CSVRTLCAoIl9uY19zZXRfdHR5X21vZGUoJWQpOiAlcyIsCisJCQljdXJfdGVybSA/IGN1cl90ZXJtLT5GaWxlZGVzIDogLTEsCisJCQlfbmNfdHJhY2VfdHR5bW9kZShidWYpKSk7CisgICAgfQorICAgIHJldHVybiAocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVmX3NoZWxsX21vZGUodm9pZCkKK3sKKyAgICBpbnQgcmMgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiZGVmX3NoZWxsX21vZGUoKSIpKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworCS8qCisJICogSWYgWFRBQlMgd2FzIG9uLCByZW1vdmUgdGhlIHRhYiBhbmQgYmFja3RhYiBjYXBhYmlsaXRpZXMuCisJICovCisJaWYgKF9uY19nZXRfdHR5X21vZGUoJmN1cl90ZXJtLT5PdHR5YikgPT0gT0spIHsKKyNpZmRlZiBURVJNSU9TCisJICAgIGlmIChjdXJfdGVybS0+T3R0eWIuY19vZmxhZyAmIE9GTEFHU19UQUJTKQorCQl0YWIgPSBiYWNrX3RhYiA9IE5VTEw7CisjZWxzZQorCSAgICBpZiAoY3VyX3Rlcm0tPk90dHliLnNnX2ZsYWdzICYgWFRBQlMpCisJCXRhYiA9IGJhY2tfdGFiID0gTlVMTDsKKyNlbmRpZgorCSAgICByYyA9IE9LOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShyYyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2RlZl9wcm9nX21vZGUodm9pZCkKK3sKKyAgICBpbnQgcmMgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiZGVmX3Byb2dfbW9kZSgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJLyoKKwkgKiBUdXJuIG9mZiB0aGUgWFRBQlMgYml0IGluIHRoZSB0dHkgc3RydWN0dXJlIGlmIGl0IHdhcyBvbi4KKwkgKi8KKwlpZiAoX25jX2dldF90dHlfbW9kZSgmY3VyX3Rlcm0tPk50dHliKSA9PSBPSykgeworI2lmZGVmIFRFUk1JT1MKKwkgICAgY3VyX3Rlcm0tPk50dHliLmNfb2ZsYWcgJj0gfk9GTEFHU19UQUJTOworI2Vsc2UKKwkgICAgY3VyX3Rlcm0tPk50dHliLnNnX2ZsYWdzICY9IH5YVEFCUzsKKyNlbmRpZgorCSAgICByYyA9IE9LOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShyYyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Jlc2V0X3Byb2dfbW9kZSh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJyZXNldF9wcm9nX21vZGUoKSIpKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworCWlmIChfbmNfc2V0X3R0eV9tb2RlKCZjdXJfdGVybS0+TnR0eWIpID09IE9LKSB7CisJICAgIGlmIChTUCkgeworCQlpZiAoU1AtPl9rZXlwYWRfb24pCisJCSAgICBfbmNfa2V5cGFkKFNQLCBUUlVFKTsKKwkJTkNfQlVGRkVSRUQoVFJVRSk7CisJICAgIH0KKwkgICAgcmV0dXJuQ29kZShPSyk7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Jlc2V0X3NoZWxsX21vZGUodm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgicmVzZXRfc2hlbGxfbW9kZSgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJaWYgKFNQKSB7CisJICAgIF9uY19rZXlwYWQoU1AsIEZBTFNFKTsKKwkgICAgX25jX2ZsdXNoKCk7CisJICAgIE5DX0JVRkZFUkVEKEZBTFNFKTsKKwl9CisJcmV0dXJuQ29kZShfbmNfc2V0X3R0eV9tb2RlKCZjdXJfdGVybS0+T3R0eWIpKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShFUlIpOworfQorCitzdGF0aWMgVFRZICoKK3NhdmVkX3R0eSh2b2lkKQoreworICAgIFRUWSAqcmVzdWx0ID0gMDsKKworICAgIGlmIChTUCAhPSAwKSB7CisJcmVzdWx0ID0gJihTUC0+X3NhdmVkX3R0eSk7CisgICAgfSBlbHNlIHsKKwlpZiAoX25jX3ByZXNjcmVlbi5zYXZlZF90dHkgPT0gMCkgeworCSAgICBfbmNfcHJlc2NyZWVuLnNhdmVkX3R0eSA9IHR5cGVDYWxsb2MoVFRZLCAxKTsKKwl9CisJcmVzdWx0ID0gX25jX3ByZXNjcmVlbi5zYXZlZF90dHk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisqKglzYXZldHR5KCkgIGFuZCAgcmVzZXR0eSgpCisqKgorKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorc2F2ZXR0eSh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJzYXZldHR5KCkiKSkpOworCisgICAgcmV0dXJuQ29kZShfbmNfZ2V0X3R0eV9tb2RlKHNhdmVkX3R0eSgpKSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Jlc2V0dHkodm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgicmVzZXR0eSgpIikpKTsKKworICAgIHJldHVybkNvZGUoX25jX3NldF90dHlfbW9kZShzYXZlZF90dHkoKSkpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9tYWtlX2tleXMuYyBiL25jdXJzZXMvdGluZm8vbWFrZV9rZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4NGY4NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vbWFrZV9rZXlzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAxOTk3LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIHJlcGxhY2VzIGFuIGF3ayBzY3JpcHQgd2hpY2ggdHJhbnNsYXRlZCBrZXlzLmxpc3QgaW50byBrZXlzLnRyaWVzIGJ5CisgKiBtYWtpbmcgdGhlIG91dHB1dCBzaG93IHRoZSBpbmRpY2VzIGludG8gdGhlIFRFUk1UWVBFIFN0cmluZ3MgYXJyYXkuICBEb2luZworICogaXQgdGhhdCB3YXkgbGV0cyB1cyBjdXQgZG93biBvbiB0aGUgc2l6ZSBvZiB0aGUgaW5pdF9rZXl0cnkoKSBmdW5jdGlvbi4KKyAqLworCisjZGVmaW5lIFVTRV9URVJNTElCIDEKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbWFrZV9rZXlzLmMsdiAxLjE0IDIwMDgvMDgvMDMgMjE6NTc6MjIgdG9tIEV4cCAkIikKKworI2luY2x1ZGUgPG5hbWVzLmM+CisKKyNkZWZpbmUgVU5LTk9XTiAoU0laRU9GKHN0cm5hbWVzKSArIFNJWkVPRihzdHJmbmFtZXMpKQorCitzdGF0aWMgc2l6ZV90Citsb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzaXplX3QgbjsKKyAgICBib29sIGZvdW5kID0gRkFMU0U7CisgICAgZm9yIChuID0gMDsgc3RybmFtZXNbbl0gIT0gMDsgbisrKSB7CisJaWYgKCFzdHJjbXAobmFtZSwgc3RybmFtZXNbbl0pKSB7CisJICAgIGZvdW5kID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAoIWZvdW5kKSB7CisJZm9yIChuID0gMDsgc3RyZm5hbWVzW25dICE9IDA7IG4rKykgeworCSAgICBpZiAoIXN0cmNtcChuYW1lLCBzdHJmbmFtZXNbbl0pKSB7CisJCWZvdW5kID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBmb3VuZCA/IG4gOiBVTktOT1dOOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9rZXlzKEZJTEUgKmlmcCwgRklMRSAqb2ZwKQoreworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisgICAgY2hhciBmcm9tWzI1Nl07CisgICAgY2hhciB0b1syNTZdOworICAgIGludCBtYXhsZW4gPSAxNjsKKyAgICBpbnQgc2Nhbm5lZDsKKworICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBpZnApICE9IDApIHsKKwlpZiAoKmJ1ZmZlciA9PSAnIycpCisJICAgIGNvbnRpbnVlOworCisJdG9bc2l6ZW9mKHRvKSAtIDFdID0gJ1wwJzsKKwlmcm9tW3NpemVvZihmcm9tKSAtIDFdID0gJ1wwJzsKKworCXNjYW5uZWQgPSBzc2NhbmYoYnVmZmVyLCAiJTI1NXMgJTI1NXMiLCB0bywgZnJvbSk7CisJaWYgKHNjYW5uZWQgPT0gMikgeworCSAgICBpbnQgY29kZSA9IGxvb2t1cChmcm9tKTsKKwkgICAgaWYgKGNvZGUgPT0gVU5LTk9XTikKKwkJY29udGludWU7CisJICAgIGlmICgoaW50KSBzdHJsZW4oZnJvbSkgPiBtYXhsZW4pCisJCW1heGxlbiA9IHN0cmxlbihmcm9tKTsKKwkgICAgZnByaW50ZihvZnAsICJcdHsgJTRkLCAlLSouKnMgfSxcdC8qICVzICovXG4iLAorCQkgICAgY29kZSwKKwkJICAgIG1heGxlbiwgbWF4bGVuLAorCQkgICAgdG8sCisJCSAgICBmcm9tKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAord3JpdGVfbGlzdChGSUxFICpvZnAsIGNvbnN0IGNoYXIgKipsaXN0KQoreworICAgIHdoaWxlICgqbGlzdCAhPSAwKQorCWZwcmludGYob2ZwLCAiJXNcbiIsICpsaXN0KyspOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4W10gPQorICAgIHsKKwkiI2lmbmRlZiBOQ1VfS0VZU19IIiwKKwkiI2RlZmluZSBOQ1VfS0VZU19IIDEiLAorCSIiLAorCSIvKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBNQUtFX0tFWVMgKi8iLAorCSIiLAorCSIjaWYgQlJPS0VOX0xJTktFUiIsCisJInN0YXRpYyIsCisJIiNlbmRpZiIsCisJImNvbnN0IHN0cnVjdCB0aW5mb19ma2V5cyBfbmNfdGluZm9fZmtleXNbXSA9IHsiLAorCTAKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBjaGFyICpzdWZmaXhbXSA9CisgICAgeworCSJcdHsgMCwgMH0gfTsiLAorCSIiLAorCSIjZW5kaWYgLyogTkNVX0tFWVNfSCAqLyIsCisJMAorICAgIH07CisKKyAgICB3cml0ZV9saXN0KHN0ZG91dCwgcHJlZml4KTsKKyAgICBpZiAoYXJnYyA+IDEpIHsKKwlpbnQgbjsKKwlmb3IgKG4gPSAxOyBuIDwgYXJnYzsgbisrKSB7CisJICAgIEZJTEUgKmZwID0gZm9wZW4oYXJndltuXSwgInIiKTsKKwkgICAgaWYgKGZwICE9IDApIHsKKwkJbWFrZV9rZXlzKGZwLCBzdGRvdXQpOworCQlmY2xvc2UoZnApOworCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJbWFrZV9rZXlzKHN0ZGluLCBzdGRvdXQpOworICAgIH0KKyAgICB3cml0ZV9saXN0KHN0ZG91dCwgc3VmZml4KTsKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9uYW1lX21hdGNoLmMgYi9uY3Vyc2VzL3RpbmZvL25hbWVfbWF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTc2OTAxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9uYW1lX21hdGNoLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAxOTk5LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IG5hbWVfbWF0Y2guYyx2IDEuMTcgMjAwOC8wOC8wMyAxOTo0OTozMyB0b20gRXhwICQiKQorCisvKgorICoJX25jX2ZpcnN0X25hbWUoY2hhciAqbmFtZXMpCisgKgorICoJRXh0cmFjdCB0aGUgcHJpbWFyeSBuYW1lIGZyb20gYSBjb21waWxlZCBlbnRyeS4KKyAqLworI2RlZmluZSBGaXJzdE5hbWUgX25jX2dsb2JhbHMuZmlyc3RfbmFtZQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfZmlyc3RfbmFtZShjb25zdCBjaGFyICpjb25zdCBzcCkKKy8qIGdldCB0aGUgZmlyc3QgbmFtZSBmcm9tIHRoZSBnaXZlbiBuYW1lIGxpc3QgKi8KK3sKKyAgICB1bnNpZ25lZCBuOworCisjaWYgTk9fTEVBS1MKKyAgICBpZiAoc3AgPT0gMCkgeworCWlmIChGaXJzdE5hbWUgIT0gMCkKKwkgICAgRnJlZUFuZE51bGwoRmlyc3ROYW1lKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKwlpZiAoRmlyc3ROYW1lID09IDApCisJICAgIEZpcnN0TmFtZSA9IHR5cGVNYWxsb2MoY2hhciwgTUFYX05BTUVfU0laRSArIDEpOworCisJaWYgKEZpcnN0TmFtZSAhPSAwKSB7CisJICAgIGZvciAobiA9IDA7IG4gPCBNQVhfTkFNRV9TSVpFOyBuKyspIHsKKwkJaWYgKChGaXJzdE5hbWVbbl0gPSBzcFtuXSkgPT0gJ1wwJworCQkgICAgfHwgKEZpcnN0TmFtZVtuXSA9PSAnfCcpKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgRmlyc3ROYW1lW25dID0gJ1wwJzsKKwl9CisgICAgfQorICAgIHJldHVybiAoRmlyc3ROYW1lKTsKK30KKworLyoKKyAqCWludCBfbmNfbmFtZV9tYXRjaChuYW1lbGlzdCwgbmFtZSwgZGVsaW0pCisgKgorICoJSXMgdGhlIGdpdmVuIG5hbWUgbWF0Y2hlZCBpbiBuYW1lbGlzdD8KKyAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfbmFtZV9tYXRjaChjb25zdCBjaGFyICpjb25zdCBuYW1lbHN0LCBjb25zdCBjaGFyICpjb25zdCBuYW1lLCBjb25zdCBjaGFyICpjb25zdCBkZWxpbSkKK3sKKyAgICBjb25zdCBjaGFyICpzLCAqZCwgKnQ7CisgICAgaW50IGNvZGUsIGZvdW5kOworCisgICAgaWYgKChzID0gbmFtZWxzdCkgIT0gMCkgeworCXdoaWxlICgqcyAhPSAnXDAnKSB7CisJICAgIGZvciAoZCA9IG5hbWU7ICpkICE9ICdcMCc7IGQrKykgeworCQlpZiAoKnMgIT0gKmQpCisJCSAgICBicmVhazsKKwkJcysrOworCSAgICB9CisJICAgIGZvdW5kID0gRkFMU0U7CisJICAgIGZvciAoY29kZSA9IFRSVUU7ICpzICE9ICdcMCc7IGNvZGUgPSBGQUxTRSwgcysrKSB7CisJCWZvciAodCA9IGRlbGltOyAqdCAhPSAnXDAnOyB0KyspIHsKKwkJICAgIGlmICgqcyA9PSAqdCkgeworCQkJZm91bmQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJaWYgKGZvdW5kKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGNvZGUgJiYgKmQgPT0gJ1wwJykKKwkJcmV0dXJuIGNvZGU7CisJICAgIGlmICgqcysrID09IDApCisJCWJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9wYXJzZV9lbnRyeS5jIGIvbmN1cnNlcy90aW5mby9wYXJzZV9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2E1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RpbmZvL3BhcnNlX2VudHJ5LmMKQEAgLTAsMCArMSw5OTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXBhcnNlX2VudHJ5LmMgLS0gY29tcGlsZSBvbmUgdGVybWluZm8gb3IgdGVybWNhcCBlbnRyeQorICoKKyAqCUdldCBhbiBleGFjdCBpbi1jb3JlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVudHJ5LiAgRG9uJ3QKKyAqCXRyeSB0byByZXNvbHZlIHVzZSBvciB0YyBjYXBhYmlsaXRpZXMsIHRoYXQgaXMgc29tZW9uZQorICoJZWxzZSdzIGpvYi4gIERlcGVuZHMgb24gdGhlIGxleGljYWwgYW5hbHl6ZXIgdG8gZ2V0IHRva2VucworICoJZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgorICovCisKKyNkZWZpbmUgX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiBwYXJzZV9lbnRyeS5jLHYgMS42OSAyMDA4LzA4LzE2IDIxOjUyOjAzIHRvbSBFeHAgJCIpCisKKyNpZmRlZiBMSU5UCitzdGF0aWMgc2hvcnQgY29uc3QgcGFyYW1ldHJpemVkW10gPQorezB9OworI2Vsc2UKKyNpbmNsdWRlIDxwYXJhbWV0cml6ZWQuaD4KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwb3N0cHJvY2Vzc190ZXJtY2FwKFRFUk1UWVBFICosIGJvb2wpOworc3RhdGljIHZvaWQgcG9zdHByb2Nlc3NfdGVybWluZm8oVEVSTVRZUEUgKik7CitzdGF0aWMgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKmxvb2t1cF9mdWxsbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworI2lmIE5DVVJTRVNfWE5BTUVTCisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqCitfbmNfZXh0ZW5kX25hbWVzKEVOVFJZICogZW50cnlwLCBjaGFyICpuYW1lLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICBzdGF0aWMgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgdGVtcDsKKyAgICBURVJNVFlQRSAqdHAgPSAmKGVudHJ5cC0+dHRlcm0pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgYWN0dWFsOworICAgIHVuc2lnbmVkIHRpbmRleDsKKyAgICB1bnNpZ25lZCBmaXJzdCwgbGFzdCwgbjsKKyAgICBib29sIGZvdW5kOworCisgICAgc3dpdGNoICh0b2tlbl90eXBlKSB7CisgICAgY2FzZSBCT09MRUFOOgorCWZpcnN0ID0gMDsKKwlsYXN0ID0gdHAtPmV4dF9Cb29sZWFuczsKKwlvZmZzZXQgPSB0cC0+ZXh0X0Jvb2xlYW5zOworCXRpbmRleCA9IHRwLT5udW1fQm9vbGVhbnM7CisJYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6CisJZmlyc3QgPSB0cC0+ZXh0X0Jvb2xlYW5zOworCWxhc3QgPSB0cC0+ZXh0X051bWJlcnMgKyBmaXJzdDsKKwlvZmZzZXQgPSB0cC0+ZXh0X0Jvb2xlYW5zICsgdHAtPmV4dF9OdW1iZXJzOworCXRpbmRleCA9IHRwLT5udW1fTnVtYmVyczsKKwlicmVhazsKKyAgICBjYXNlIFNUUklORzoKKwlmaXJzdCA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnM7CisJbGFzdCA9IHRwLT5leHRfU3RyaW5ncyArIGZpcnN0OworCW9mZnNldCA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnMgKyB0cC0+ZXh0X1N0cmluZ3M7CisJdGluZGV4ID0gdHAtPm51bV9TdHJpbmdzOworCWJyZWFrOworICAgIGNhc2UgQ0FOQ0VMOgorCWFjdHVhbCA9IE5VTV9FWFRfTkFNRVModHApOworCWZvciAobiA9IDA7IG4gPCBhY3R1YWw7IG4rKykgeworCSAgICBpZiAoIXN0cmNtcChuYW1lLCB0cC0+ZXh0X05hbWVzW25dKSkgeworCQlpZiAobiA+ICh1bnNpZ25lZCkgKHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnMpKSB7CisJCSAgICB0b2tlbl90eXBlID0gU1RSSU5HOworCQl9IGVsc2UgaWYgKG4gPiB0cC0+ZXh0X0Jvb2xlYW5zKSB7CisJCSAgICB0b2tlbl90eXBlID0gTlVNQkVSOworCQl9IGVsc2UgeworCQkgICAgdG9rZW5fdHlwZSA9IEJPT0xFQU47CisJCX0KKwkJcmV0dXJuIF9uY19leHRlbmRfbmFtZXMoZW50cnlwLCBuYW1lLCB0b2tlbl90eXBlKTsKKwkgICAgfQorCX0KKwkvKiBXZWxsLCB3ZSBhcmUgZ2l2ZW4gYSBjYW5jZWwgZm9yIGEgbmFtZSB0aGF0IHdlIGRvbid0IHJlY29nbml6ZSAqLworCXJldHVybiBfbmNfZXh0ZW5kX25hbWVzKGVudHJ5cCwgbmFtZSwgU1RSSU5HKTsKKyAgICBkZWZhdWx0OgorCXJldHVybiAwOworICAgIH0KKworICAgIC8qIEFkanVzdCB0aGUgJ29mZnNldCcgKGluc2VydGlvbi1wb2ludCkgdG8ga2VlcCB0aGUgbGlzdHMgb2YgZXh0ZW5kZWQKKyAgICAgKiBuYW1lcyBzb3J0ZWQuCisgICAgICovCisgICAgZm9yIChuID0gZmlyc3QsIGZvdW5kID0gRkFMU0U7IG4gPCBsYXN0OyBuKyspIHsKKwlpbnQgY21wID0gc3RyY21wKHRwLT5leHRfTmFtZXNbbl0sIG5hbWUpOworCWlmIChjbXAgPT0gMCkKKwkgICAgZm91bmQgPSBUUlVFOworCWlmIChjbXAgPj0gMCkgeworCSAgICBvZmZzZXQgPSBuOworCSAgICB0aW5kZXggPSBuIC0gZmlyc3Q7CisJICAgIHN3aXRjaCAodG9rZW5fdHlwZSkgeworCSAgICBjYXNlIEJPT0xFQU46CisJCXRpbmRleCArPSBCT09MQ09VTlQ7CisJCWJyZWFrOworCSAgICBjYXNlIE5VTUJFUjoKKwkJdGluZGV4ICs9IE5VTUNPVU5UOworCQlicmVhazsKKwkgICAgY2FzZSBTVFJJTkc6CisJCXRpbmRleCArPSBTVFJDT1VOVDsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAoIWZvdW5kKSB7CisJc3dpdGNoICh0b2tlbl90eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICB0cC0+ZXh0X0Jvb2xlYW5zICs9IDE7CisJICAgIHRwLT5udW1fQm9vbGVhbnMgKz0gMTsKKwkgICAgdHAtPkJvb2xlYW5zID0gdHlwZVJlYWxsb2MoTkNVUlNFU19TQk9PTCwgdHAtPm51bV9Cb29sZWFucywgdHAtPkJvb2xlYW5zKTsKKwkgICAgZm9yIChsYXN0ID0gdHAtPm51bV9Cb29sZWFucyAtIDE7IGxhc3QgPiB0aW5kZXg7IGxhc3QtLSkKKwkJdHAtPkJvb2xlYW5zW2xhc3RdID0gdHAtPkJvb2xlYW5zW2xhc3QgLSAxXTsKKwkgICAgYnJlYWs7CisJY2FzZSBOVU1CRVI6CisJICAgIHRwLT5leHRfTnVtYmVycyArPSAxOworCSAgICB0cC0+bnVtX051bWJlcnMgKz0gMTsKKwkgICAgdHAtPk51bWJlcnMgPSB0eXBlUmVhbGxvYyhzaG9ydCwgdHAtPm51bV9OdW1iZXJzLCB0cC0+TnVtYmVycyk7CisJICAgIGZvciAobGFzdCA9IHRwLT5udW1fTnVtYmVycyAtIDE7IGxhc3QgPiB0aW5kZXg7IGxhc3QtLSkKKwkJdHAtPk51bWJlcnNbbGFzdF0gPSB0cC0+TnVtYmVyc1tsYXN0IC0gMV07CisJICAgIGJyZWFrOworCWNhc2UgU1RSSU5HOgorCSAgICB0cC0+ZXh0X1N0cmluZ3MgKz0gMTsKKwkgICAgdHAtPm51bV9TdHJpbmdzICs9IDE7CisJICAgIHRwLT5TdHJpbmdzID0gdHlwZVJlYWxsb2MoY2hhciAqLCB0cC0+bnVtX1N0cmluZ3MsIHRwLT5TdHJpbmdzKTsKKwkgICAgZm9yIChsYXN0ID0gdHAtPm51bV9TdHJpbmdzIC0gMTsgbGFzdCA+IHRpbmRleDsgbGFzdC0tKQorCQl0cC0+U3RyaW5nc1tsYXN0XSA9IHRwLT5TdHJpbmdzW2xhc3QgLSAxXTsKKwkgICAgYnJlYWs7CisJfQorCWFjdHVhbCA9IE5VTV9FWFRfTkFNRVModHApOworCXRwLT5leHRfTmFtZXMgPSB0eXBlUmVhbGxvYyhjaGFyICosIGFjdHVhbCwgdHAtPmV4dF9OYW1lcyk7CisJd2hpbGUgKC0tYWN0dWFsID4gb2Zmc2V0KQorCSAgICB0cC0+ZXh0X05hbWVzW2FjdHVhbF0gPSB0cC0+ZXh0X05hbWVzW2FjdHVhbCAtIDFdOworCXRwLT5leHRfTmFtZXNbb2Zmc2V0XSA9IF9uY19zYXZlX3N0cihuYW1lKTsKKyAgICB9CisKKyAgICB0ZW1wLm50ZV9uYW1lID0gdHAtPmV4dF9OYW1lc1tvZmZzZXRdOworICAgIHRlbXAubnRlX3R5cGUgPSB0b2tlbl90eXBlOworICAgIHRlbXAubnRlX2luZGV4ID0gdGluZGV4OworICAgIHRlbXAubnRlX2xpbmsgPSAtMTsKKworICAgIHJldHVybiAmdGVtcDsKK30KKyNlbmRpZiAvKiBOQ1VSU0VTX1hOQU1FUyAqLworCisvKgorICoJaW50CisgKglfbmNfcGFyc2VfZW50cnkoZW50cnksIGxpdGVyYWwsIHNpbGVudCkKKyAqCisgKglDb21waWxlIG9uZSBlbnRyeS4gIERvZXNuJ3QgdHJ5IHRvIHJlc29sdmUgdXNlIG9yIHRjIGNhcGFiaWxpdGllcy4KKyAqCisgKglmb3VuZC1mb3J3YXJkLXVzZSA9IEZBTFNFCisgKglyZS1pbml0aWFsaXNlIGludGVybmFsIGFycmF5cworICoJZ2V0X3Rva2VuKCk7CisgKglpZiB0aGUgdG9rZW4gd2FzIG5vdCBhIG5hbWUgaW4gY29sdW1uIDEsIGNvbXBsYWluIGFuZCBkaWUKKyAqCXNhdmUgbmFtZXMgaW4gZW50cnkncyBzdHJpbmcgdGFibGUKKyAqCXdoaWxlIChnZXRfdG9rZW4oKSBpcyBub3QgRU9GIGFuZCBub3QgTkFNRVMpCisgKgkgICAgICAgIGNoZWNrIGZvciBleGlzdGVuY2UgYW5kIHR5cGUtY29ycmVjdG5lc3MKKyAqCSAgICAgICAgZW50ZXIgY2FwIGludG8gc3RydWN0dXJlCisgKgkgICAgICAgIGlmIFNUUklORworICoJICAgICAgICAgICAgc2F2ZSBzdHJpbmcgaW4gZW50cnkncyBzdHJpbmcgdGFibGUKKyAqCXB1c2ggYmFjayB0b2tlbgorICovCisKKyNkZWZpbmUgQkFEX1RDX1VTQUdFIGlmICghYmFkX3RjX3VzYWdlKSBcCisgCXsgYmFkX3RjX3VzYWdlID0gVFJVRTsgXAorCSBfbmNfd2FybmluZygiTGVnYWN5IHRlcm1jYXAgYWxsb3dzIG9ubHkgYSB0cmFpbGluZyB0Yz0gY2xhdXNlIik7IH0KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3BhcnNlX2VudHJ5KHN0cnVjdCBlbnRyeSAqZW50cnlwLCBpbnQgbGl0ZXJhbCwgYm9vbCBzaWxlbnQpCit7CisgICAgaW50IHRva2VuX3R5cGU7CisgICAgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKmVudHJ5X3B0cjsKKyAgICBjaGFyICpwdHIsICpiYXNlOworICAgIGJvb2wgYmFkX3RjX3VzYWdlID0gRkFMU0U7CisKKyAgICB0b2tlbl90eXBlID0gX25jX2dldF90b2tlbihzaWxlbnQpOworCisgICAgaWYgKHRva2VuX3R5cGUgPT0gRU9GKQorCXJldHVybiAoRU9GKTsKKyAgICBpZiAodG9rZW5fdHlwZSAhPSBOQU1FUykKKwlfbmNfZXJyX2Fib3J0KCJFbnRyeSBkb2VzIG5vdCBzdGFydCB3aXRoIHRlcm1pbmFsIG5hbWVzIGluIGNvbHVtbiBvbmUiKTsKKworICAgIF9uY19pbml0X2VudHJ5KCZlbnRyeXAtPnR0ZXJtKTsKKworICAgIGVudHJ5cC0+Y3N0YXJ0ID0gX25jX2NvbW1lbnRfc3RhcnQ7CisgICAgZW50cnlwLT5jZW5kID0gX25jX2NvbW1lbnRfZW5kOworICAgIGVudHJ5cC0+c3RhcnRsaW5lID0gX25jX3N0YXJ0X2xpbmU7CisgICAgREVCVUcoMiwgKCJDb21tZW50IHJhbmdlIGlzICVsZCB0byAlbGQiLCBlbnRyeXAtPmNzdGFydCwgZW50cnlwLT5jZW5kKSk7CisKKyAgICAvKgorICAgICAqIFN0cmlwIG9mZiB0aGUgMi1jaGFyYWN0ZXIgdGVybWNhcCBuYW1lLCBpZiBwcmVzZW50LiAgT3JpZ2luYWxseSB0ZXJtY2FwCisgICAgICogdXNlZCB0aGF0IGFzIGFuIGluZGV4aW5nIGFpZC4gIFdlIGNhbiByZXRhaW4gMi1jaGFyYWN0ZXIgdGVybWluZm8gbmFtZXMsCisgICAgICogYnV0IG5vdGUgdGhhdCB0aGV5IHdvdWxkIGJlIGxvc3QgaWYgd2UgdHJhbnNsYXRlIHRvL2Zyb20gdGVybWNhcC4gIFRoaXMKKyAgICAgKiBmZWF0dXJlIGlzIHN1cHBvc2VkbHkgb2Jzb2xldGUgc2luY2UgIm5ld2VyIiBCU0QgaW1wbGVtZW50YXRpb25zIGRvIG5vdAorICAgICAqIHVzZSBpdDsgaG93ZXZlciBvdXIgcmVmZXJlbmNlIGZvciB0aGlzIGZlYXR1cmUgaXMgU3VuT1MgNC54LCB3aGljaAorICAgICAqIGltcGxlbWVudGVkIGl0LiAgTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgdGVybWluYWwgdHlwZSB3YXMgbmV2ZXIgdGhlCisgICAgICogMi1jaGFyYWN0ZXIgbmFtZSwgYnV0IHdhcyBpbnN0ZWFkIHRoZSBmaXJzdCBhbGlhcyBhZnRlciB0aGF0LgorICAgICAqLworICAgIHB0ciA9IF9uY19jdXJyX3Rva2VuLnRrX25hbWU7CisgICAgaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVAKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSYmICFfbmNfdXNlcl9kZWZpbmFibGUKKyNlbmRpZgorCSkgeworCWlmIChwdHJbMl0gPT0gJ3wnKSB7CisJICAgIHB0ciArPSAzOworCSAgICBfbmNfY3Vycl90b2tlbi50a19uYW1lWzJdID0gJ1wwJzsKKwl9CisgICAgfQorCisgICAgZW50cnlwLT50dGVybS5zdHJfdGFibGUgPSBlbnRyeXAtPnR0ZXJtLnRlcm1fbmFtZXMgPSBfbmNfc2F2ZV9zdHIocHRyKTsKKworICAgIGlmIChlbnRyeXAtPnR0ZXJtLnN0cl90YWJsZSA9PSAwKQorCXJldHVybiAoRVJSKTsKKworICAgIERFQlVHKDEsICgiU3RhcnRpbmcgJyVzJyIsIHB0cikpOworCisgICAgLyoKKyAgICAgKiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIG9uZS10b2tlbiBsb29rYWhlYWQgaW4gdGhlIHBhcnNlIGxvb3AKKyAgICAgKiByZXN1bHRzIGluIHRoZSB0ZXJtaW5hbCB0eXBlIGdldHRpbmcgcHJlbWF0dXJlbHkgc2V0IHRvIGNvcnJlc3BvbmQKKyAgICAgKiB0byB0aGF0IG9mIHRoZSBuZXh0IGVudHJ5LgorICAgICAqLworICAgIF9uY19zZXRfdHlwZShfbmNfZmlyc3RfbmFtZShlbnRyeXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKworICAgIC8qIGNoZWNrIGZvciBvdmVybHktbG9uZyBuYW1lcyBhbmQgYWxpYXNlcyAqLworICAgIGZvciAoYmFzZSA9IGVudHJ5cC0+dHRlcm0udGVybV9uYW1lczsgKHB0ciA9IHN0cmNocihiYXNlLCAnfCcpKSAhPSAwOworCSBiYXNlID0gcHRyICsgMSkgeworCWlmIChwdHIgLSBiYXNlID4gTUFYX0FMSUFTKSB7CisJICAgIF9uY193YXJuaW5nKCIlcyBgJS4qcycgbWF5IGJlIHRvbyBsb25nIiwKKwkJCShiYXNlID09IGVudHJ5cC0+dHRlcm0udGVybV9uYW1lcykKKwkJCT8gInByaW1hcnkgbmFtZSIKKwkJCTogImFsaWFzIiwKKwkJCShpbnQpIChwdHIgLSBiYXNlKSwgYmFzZSk7CisJfQorICAgIH0KKworICAgIGVudHJ5cC0+bnVzZXMgPSAwOworCisgICAgZm9yICh0b2tlbl90eXBlID0gX25jX2dldF90b2tlbihzaWxlbnQpOworCSB0b2tlbl90eXBlICE9IEVPRiAmJiB0b2tlbl90eXBlICE9IE5BTUVTOworCSB0b2tlbl90eXBlID0gX25jX2dldF90b2tlbihzaWxlbnQpKSB7CisJYm9vbCBpc191c2UgPSAoc3RyY21wKF9uY19jdXJyX3Rva2VuLnRrX25hbWUsICJ1c2UiKSA9PSAwKTsKKwlib29sIGlzX3RjID0gIWlzX3VzZSAmJiAoc3RyY21wKF9uY19jdXJyX3Rva2VuLnRrX25hbWUsICJ0YyIpID09IDApOworCWlmIChpc191c2UgfHwgaXNfdGMpIHsKKwkgICAgZW50cnlwLT51c2VzW2VudHJ5cC0+bnVzZXNdLm5hbWUgPSBfbmNfc2F2ZV9zdHIoX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nKTsKKwkgICAgZW50cnlwLT51c2VzW2VudHJ5cC0+bnVzZXNdLmxpbmUgPSBfbmNfY3Vycl9saW5lOworCSAgICBlbnRyeXAtPm51c2VzKys7CisJICAgIGlmIChlbnRyeXAtPm51c2VzID4gMSAmJiBpc190YykgeworCQlCQURfVENfVVNBR0UKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qIG5vcm1hbCB0b2tlbiBsb29rdXAgKi8KKwkgICAgZW50cnlfcHRyID0gX25jX2ZpbmRfZW50cnkoX25jX2N1cnJfdG9rZW4udGtfbmFtZSwKKwkJCQkgICAgICAgX25jX2dldF9oYXNoX3RhYmxlKF9uY19zeW50YXgpKTsKKworCSAgICAvKgorCSAgICAgKiBPdXIga2x1Z2UgdG8gaGFuZGxlIGFsaWFzaW5nLiAgVGhlIHJlYXNvbiBpdCdzIGRvbmUKKwkgICAgICogdGhpcyB1Z2x5IHdheSwgd2l0aCBhIGxpbmVhciBzZWFyY2gsIGlzIHNvIHRoZSBoYXNoaW5nCisJICAgICAqIG1hY2hpbmVyeSBkb2Vzbid0IGhhdmUgdG8gYmUgbWFkZSByZWFsbHkgY29tcGxpY2F0ZWQKKwkgICAgICogKGFsc28gd2UgZ2V0IGJldHRlciB3YXJuaW5ncyB0aGlzIHdheSkuICBObyBwb2ludCBpbgorCSAgICAgKiBtYWtpbmcgdGhpcyBjYXNlIGZhc3QsIGFsaWFzZWQgY2FwcyBhcmVuJ3QgY29tbW9uIG5vdworCSAgICAgKiBhbmQgd2lsbCBnZXQgcmFyZXIuCisJICAgICAqLworCSAgICBpZiAoZW50cnlfcHRyID09IE5PVEZPVU5EKSB7CisJCWNvbnN0IHN0cnVjdCBhbGlhcyAqYXA7CisKKwkJaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVApIHsKKwkJICAgIGlmIChlbnRyeXAtPm51c2VzICE9IDApIHsKKwkJCUJBRF9UQ19VU0FHRQorCQkgICAgfQorCQkgICAgZm9yIChhcCA9IF9uY19nZXRfYWxpYXNfdGFibGUoVFJVRSk7IGFwLT5mcm9tOyBhcCsrKQorCQkJaWYgKHN0cmNtcChhcC0+ZnJvbSwgX25jX2N1cnJfdG9rZW4udGtfbmFtZSkgPT0gMCkgeworCQkJICAgIGlmIChhcC0+dG8gPT0gKGNoYXIgKikgMCkgeworCQkJCV9uY193YXJuaW5nKCIlcyAoJXMgdGVybWNhcCBleHRlbnNpb24pIGlnbm9yZWQiLAorCQkJCQkgICAgYXAtPmZyb20sIGFwLT5zb3VyY2UpOworCQkJCWdvdG8gbmV4dHRvazsKKwkJCSAgICB9CisKKwkJCSAgICBlbnRyeV9wdHIgPSBfbmNfZmluZF9lbnRyeShhcC0+dG8sCisJCQkJCQkgICAgICAgX25jX2dldF9oYXNoX3RhYmxlKFRSVUUpKTsKKwkJCSAgICBpZiAoZW50cnlfcHRyICYmICFzaWxlbnQpCisJCQkJX25jX3dhcm5pbmcoIiVzICglcyB0ZXJtY2FwIGV4dGVuc2lvbikgYWxpYXNlZCB0byAlcyIsCisJCQkJCSAgICBhcC0+ZnJvbSwgYXAtPnNvdXJjZSwgYXAtPnRvKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsJLyogaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1JTkZPKSAqLworCQkgICAgZm9yIChhcCA9IF9uY19nZXRfYWxpYXNfdGFibGUoRkFMU0UpOyBhcC0+ZnJvbTsgYXArKykKKwkJCWlmIChzdHJjbXAoYXAtPmZyb20sIF9uY19jdXJyX3Rva2VuLnRrX25hbWUpID09IDApIHsKKwkJCSAgICBpZiAoYXAtPnRvID09IChjaGFyICopIDApIHsKKwkJCQlfbmNfd2FybmluZygiJXMgKCVzIHRlcm1pbmZvIGV4dGVuc2lvbikgaWdub3JlZCIsCisJCQkJCSAgICBhcC0+ZnJvbSwgYXAtPnNvdXJjZSk7CisJCQkJZ290byBuZXh0dG9rOworCQkJICAgIH0KKworCQkJICAgIGVudHJ5X3B0ciA9IF9uY19maW5kX2VudHJ5KGFwLT50bywKKwkJCQkJCSAgICAgICBfbmNfZ2V0X2hhc2hfdGFibGUoRkFMU0UpKTsKKwkJCSAgICBpZiAoZW50cnlfcHRyICYmICFzaWxlbnQpCisJCQkJX25jX3dhcm5pbmcoIiVzICglcyB0ZXJtaW5mbyBleHRlbnNpb24pIGFsaWFzZWQgdG8gJXMiLAorCQkJCQkgICAgYXAtPmZyb20sIGFwLT5zb3VyY2UsIGFwLT50byk7CisJCQkgICAgYnJlYWs7CisJCQl9CisKKwkJICAgIGlmIChlbnRyeV9wdHIgPT0gTk9URk9VTkQpIHsKKwkJCWVudHJ5X3B0ciA9IGxvb2t1cF9mdWxsbmFtZShfbmNfY3Vycl90b2tlbi50a19uYW1lKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisjaWYgTkNVUlNFU19YTkFNRVMKKwkgICAgLyoKKwkgICAgICogSWYgd2UgaGF2ZSBleHRlbmRlZC1uYW1lcyBhY3RpdmUsIHdlIHdpbGwgYXV0b21hdGljYWxseQorCSAgICAgKiBkZWZpbmUgYSBuYW1lIGJhc2VkIG9uIGl0cyBjb250ZXh0LgorCSAgICAgKi8KKwkgICAgaWYgKGVudHJ5X3B0ciA9PSBOT1RGT1VORAorCQkmJiBfbmNfdXNlcl9kZWZpbmFibGUKKwkJJiYgKGVudHJ5X3B0ciA9IF9uY19leHRlbmRfbmFtZXMoZW50cnlwLAorCQkJCQkJIF9uY19jdXJyX3Rva2VuLnRrX25hbWUsCisJCQkJCQkgdG9rZW5fdHlwZSkpICE9IDApIHsKKwkJaWYgKF9uY190cmFjaW5nID49IERFQlVHX0xFVkVMKDEpKQorCQkgICAgX25jX3dhcm5pbmcoImV4dGVuZGVkIGNhcGFiaWxpdHkgJyVzJyIsIF9uY19jdXJyX3Rva2VuLnRrX25hbWUpOworCSAgICB9CisjZW5kaWYgLyogTkNVUlNFU19YTkFNRVMgKi8KKworCSAgICAvKiBjYW4ndCBmaW5kIHRoaXMgY2FwIG5hbWUsIG5vdCBldmVuIGFzIGFuIGFsaWFzICovCisJICAgIGlmIChlbnRyeV9wdHIgPT0gTk9URk9VTkQpIHsKKwkJaWYgKCFzaWxlbnQpCisJCSAgICBfbmNfd2FybmluZygidW5rbm93biBjYXBhYmlsaXR5ICclcyciLAorCQkJCV9uY19jdXJyX3Rva2VuLnRrX25hbWUpOworCQljb250aW51ZTsKKwkgICAgfQorCisJICAgIC8qIGRlYWwgd2l0aCBiYWQgdHlwZS92YWx1ZSBjb21iaW5hdGlvbnMuICovCisJICAgIGlmICh0b2tlbl90eXBlICE9IENBTkNFTCAmJiBlbnRyeV9wdHItPm50ZV90eXBlICE9IHRva2VuX3R5cGUpIHsKKwkJLyoKKwkJICogTmFzdHkgc3BlY2lhbCBjYXNlcyBoZXJlIGhhbmRsZSBzaXR1YXRpb25zIGluIHdoaWNoIHR5cGUKKwkJICogaW5mb3JtYXRpb24gY2FuIHJlc29sdmUgbmFtZSBjbGFzaGVzLiAgTm9ybWFsIGxvb2t1cAorCQkgKiBmaW5kcyB0aGUgbGFzdCBpbnN0YW5jZSBpbiB0aGUgY2FwYWJpbGl0eSB0YWJsZSBvZiBhCisJCSAqIGdpdmVuIG5hbWUsIHJlZ2FyZGxlc3Mgb2YgdHlwZS4gIGZpbmRfdHlwZV9lbnRyeSBsb29rcworCQkgKiBmb3IgYSBmaXJzdCBtYXRjaGluZyBpbnN0YW5jZSB3aXRoIGdpdmVuIHR5cGUuICBTbyBhcworCQkgKiBsb25nIGFzIGFsbCBhbWJpZ3VvdXMgbmFtZXMgb2NjdXIgaW4gcGFpcnMgb2YgZGlzdGluY3QKKwkJICogdHlwZSwgdGhpcyB3aWxsIGRvIHRoZSBqb2IuCisJCSAqLworCisJCWlmICh0b2tlbl90eXBlID09IE5VTUJFUgorCQkgICAgJiYgIXN0cmNtcCgibWEiLCBfbmNfY3Vycl90b2tlbi50a19uYW1lKSkgeworCQkgICAgLyogdGVsbCBtYXhfYXR0cmlidXRlcyBmcm9tIGFycm93X2tleV9tYXAgKi8KKwkJICAgIGVudHJ5X3B0ciA9IF9uY19maW5kX3R5cGVfZW50cnkoIm1hIiwgTlVNQkVSLAorCQkJCQkJICAgIF9uY19nZXRfdGFibGUoX25jX3N5bnRheAorCQkJCQkJCQkgICE9IDApKTsKKwkJICAgIGFzc2VydChlbnRyeV9wdHIgIT0gMCk7CisKKwkJfSBlbHNlIGlmICh0b2tlbl90eXBlID09IFNUUklORworCQkJICAgJiYgIXN0cmNtcCgiTVQiLCBfbmNfY3Vycl90b2tlbi50a19uYW1lKSkgeworCQkgICAgLyogbWFwIHRlcm1pbmZvJ3Mgc3RyaW5nIE1UIHRvIE1UICovCisJCSAgICBlbnRyeV9wdHIgPSBfbmNfZmluZF90eXBlX2VudHJ5KCJNVCIsIFNUUklORywKKwkJCQkJCSAgICBfbmNfZ2V0X3RhYmxlKF9uY19zeW50YXgKKwkJCQkJCQkJICAhPSAwKSk7CisJCSAgICBhc3NlcnQoZW50cnlfcHRyICE9IDApOworCisJCX0gZWxzZSBpZiAodG9rZW5fdHlwZSA9PSBCT09MRUFOCisJCQkgICAmJiBlbnRyeV9wdHItPm50ZV90eXBlID09IFNUUklORykgeworCQkgICAgLyogdHJlYXQgc3RyaW5ncyB3aXRob3V0IGZvbGxvd2luZyAiPSIgYXMgZW1wdHkgc3RyaW5ncyAqLworCQkgICAgdG9rZW5fdHlwZSA9IFNUUklORzsKKwkJfSBlbHNlIHsKKwkJICAgIC8qIHdlIGNvdWxkbid0IHJlY292ZXI7IHNraXAgdGhpcyB0b2tlbiAqLworCQkgICAgaWYgKCFzaWxlbnQpIHsKKwkJCWNvbnN0IGNoYXIgKnR5cGVfbmFtZTsKKwkJCXN3aXRjaCAoZW50cnlfcHRyLT5udGVfdHlwZSkgeworCQkJY2FzZSBCT09MRUFOOgorCQkJICAgIHR5cGVfbmFtZSA9ICJib29sZWFuIjsKKwkJCSAgICBicmVhazsKKwkJCWNhc2UgU1RSSU5HOgorCQkJICAgIHR5cGVfbmFtZSA9ICJzdHJpbmciOworCQkJICAgIGJyZWFrOworCQkJY2FzZSBOVU1CRVI6CisJCQkgICAgdHlwZV9uYW1lID0gIm51bWVyaWMiOworCQkJICAgIGJyZWFrOworCQkJZGVmYXVsdDoKKwkJCSAgICB0eXBlX25hbWUgPSAidW5rbm93biI7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlfbmNfd2FybmluZygid3JvbmcgdHlwZSB1c2VkIGZvciAlcyBjYXBhYmlsaXR5ICclcyciLAorCQkJCSAgICB0eXBlX25hbWUsIF9uY19jdXJyX3Rva2VuLnRrX25hbWUpOworCQkgICAgfQorCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCisJICAgIC8qIG5vdyB3ZSBrbm93IHRoYXQgdGhlIHR5cGUvdmFsdWUgY29tYmluYXRpb24gaXMgT0sgKi8KKwkgICAgc3dpdGNoICh0b2tlbl90eXBlKSB7CisJICAgIGNhc2UgQ0FOQ0VMOgorCQlzd2l0Y2ggKGVudHJ5X3B0ci0+bnRlX3R5cGUpIHsKKwkJY2FzZSBCT09MRUFOOgorCQkgICAgZW50cnlwLT50dGVybS5Cb29sZWFuc1tlbnRyeV9wdHItPm50ZV9pbmRleF0gPSBDQU5DRUxMRURfQk9PTEVBTjsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgTlVNQkVSOgorCQkgICAgZW50cnlwLT50dGVybS5OdW1iZXJzW2VudHJ5X3B0ci0+bnRlX2luZGV4XSA9IENBTkNFTExFRF9OVU1FUklDOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSBTVFJJTkc6CisJCSAgICBlbnRyeXAtPnR0ZXJtLlN0cmluZ3NbZW50cnlfcHRyLT5udGVfaW5kZXhdID0gQ0FOQ0VMTEVEX1NUUklORzsKKwkJICAgIGJyZWFrOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgQk9PTEVBTjoKKwkJZW50cnlwLT50dGVybS5Cb29sZWFuc1tlbnRyeV9wdHItPm50ZV9pbmRleF0gPSBUUlVFOworCQlicmVhazsKKworCSAgICBjYXNlIE5VTUJFUjoKKwkJZW50cnlwLT50dGVybS5OdW1iZXJzW2VudHJ5X3B0ci0+bnRlX2luZGV4XSA9CisJCSAgICBfbmNfY3Vycl90b2tlbi50a192YWxudW1iZXI7CisJCWJyZWFrOworCisJICAgIGNhc2UgU1RSSU5HOgorCQlwdHIgPSBfbmNfY3Vycl90b2tlbi50a192YWxzdHJpbmc7CisJCWlmIChfbmNfc3ludGF4ID09IFNZTl9URVJNQ0FQKQorCQkgICAgcHRyID0gX25jX2NhcHRvaW5mbyhfbmNfY3Vycl90b2tlbi50a19uYW1lLAorCQkJCQlwdHIsCisJCQkJCXBhcmFtZXRyaXplZFtlbnRyeV9wdHItPm50ZV9pbmRleF0pOworCQllbnRyeXAtPnR0ZXJtLlN0cmluZ3NbZW50cnlfcHRyLT5udGVfaW5kZXhdID0gX25jX3NhdmVfc3RyKHB0cik7CisJCWJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJCWlmICghc2lsZW50KQorCQkgICAgX25jX3dhcm5pbmcoInVua25vd24gdG9rZW4gdHlwZSIpOworCQlfbmNfcGFuaWNfbW9kZSgoY2hhcikgKChfbmNfc3ludGF4ID09IFNZTl9URVJNQ0FQKSA/ICc6JyA6ICcsJykpOworCQljb250aW51ZTsKKwkgICAgfQorCX0JCQkvKiBlbmQgZWxzZSBjdXJfdG9rZW4ubmFtZSAhPSAidXNlIiAqLworICAgICAgbmV4dHRvazoKKwljb250aW51ZTsJCS8qIGNhbm5vdCBoYXZlIGEgbGFiZWwgdy9vIHN0YXRlbWVudCAqLworICAgIH0JCQkJLyogZW5kd2hpbGUgKG5vdCBFT0YgYW5kIG5vdCBOQU1FUykgKi8KKworICAgIF9uY19wdXNoX3Rva2VuKHRva2VuX3R5cGUpOworICAgIF9uY19zZXRfdHlwZShfbmNfZmlyc3RfbmFtZShlbnRyeXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKworICAgIC8qCisgICAgICogVHJ5IHRvIGRlZHVjZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworICAgICAqICh0aGlzIGluY2x1ZGVzIG9ic29sZXRlIEJTRCBjYXBhYmlsaXRpZXMpLiAgU2lnaC4uLml0IHdvdWxkIGJlIG1vcmUKKyAgICAgKiBzcGFjZS1lZmZpY2llbnQgdG8gY2FsbCB0aGlzIGFmdGVyIHVzZSByZXNvbHV0aW9uLCBidXQgaXQgaGFzCisgICAgICogdG8gYmUgZG9uZSBiZWZvcmUgZW50cnkgYWxsb2NhdGlvbiBpcyB3cmFwcGVkIHVwLgorICAgICAqLworICAgIGlmICghbGl0ZXJhbCkgeworCWlmIChfbmNfc3ludGF4ID09IFNZTl9URVJNQ0FQKSB7CisJICAgIGJvb2wgaGFzX2Jhc2VfZW50cnkgPSBGQUxTRTsKKwkgICAgdW5zaWduZWQgaTsKKworCSAgICAvKgorCSAgICAgKiBEb24ndCBpbnNlcnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIGArJyBlbnRyeSBtZWFudCBvbmx5CisJICAgICAqIGZvciBpbmNsdXNpb24gaW4gb3RoZXIgZW50cmllcyAobm90IHN1cmUgdGVybWNhcCBldmVyCisJICAgICAqIGhhZCB0aGVzZSwgYWN0dWFsbHkpLgorCSAgICAgKi8KKwkgICAgaWYgKHN0cmNocihlbnRyeXAtPnR0ZXJtLnRlcm1fbmFtZXMsICcrJykpCisJCWhhc19iYXNlX2VudHJ5ID0gVFJVRTsKKwkgICAgZWxzZQorCQkvKgorCQkgKiBPdGhlcndpc2UsIGxvb2sgZm9yIGEgYmFzZSBlbnRyeSB0aGF0IHdpbGwgYWxyZWFkeQorCQkgKiBoYXZlIHBpY2tlZCB1cCBkZWZhdWx0cyB2aWEgdHJhbnNsYXRpb24uCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZW50cnlwLT5udXNlczsgaSsrKQorCQkgICAgaWYgKCFzdHJjaHIoKGNoYXIgKikgZW50cnlwLT51c2VzW2ldLm5hbWUsICcrJykpCisJCQloYXNfYmFzZV9lbnRyeSA9IFRSVUU7CisKKwkgICAgcG9zdHByb2Nlc3NfdGVybWNhcCgmZW50cnlwLT50dGVybSwgaGFzX2Jhc2VfZW50cnkpOworCX0gZWxzZQorCSAgICBwb3N0cHJvY2Vzc190ZXJtaW5mbygmZW50cnlwLT50dGVybSk7CisgICAgfQorICAgIF9uY193cmFwX2VudHJ5KGVudHJ5cCwgRkFMU0UpOworCisgICAgcmV0dXJuIChPSyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19jYXBjbXAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKKy8qIGNvbXBhcmUgdHdvIHN0cmluZyBjYXBhYmlsaXRpZXMsIHN0cmlwcGluZyBvdXQgcGFkZGluZyAqLworeworICAgIGlmICghcyAmJiAhdCkKKwlyZXR1cm4gKDApOworICAgIGVsc2UgaWYgKCFzIHx8ICF0KQorCXJldHVybiAoMSk7CisKKyAgICBmb3IgKDs7KSB7CisJaWYgKHNbMF0gPT0gJyQnICYmIHNbMV0gPT0gJzwnKSB7CisJICAgIGZvciAocyArPSAyOzsgcysrKQorCQlpZiAoIShpc2RpZ2l0KFVDaGFyKCpzKSkKKwkJICAgICAgfHwgKnMgPT0gJy4nCisJCSAgICAgIHx8ICpzID09ICcqJworCQkgICAgICB8fCAqcyA9PSAnLycKKwkJICAgICAgfHwgKnMgPT0gJz4nKSkKKwkJICAgIGJyZWFrOworCX0KKworCWlmICh0WzBdID09ICckJyAmJiB0WzFdID09ICc8JykgeworCSAgICBmb3IgKHQgKz0gMjs7IHQrKykKKwkJaWYgKCEoaXNkaWdpdChVQ2hhcigqdCkpCisJCSAgICAgIHx8ICp0ID09ICcuJworCQkgICAgICB8fCAqdCA9PSAnKicKKwkJICAgICAgfHwgKnQgPT0gJy8nCisJCSAgICAgIHx8ICp0ID09ICc+JykpCisJCSAgICBicmVhazsKKwl9CisKKwkvKiB3ZSd2ZSBub3cgcHVzaGVkIHMgYW5kIHQgcGFzdCBhbnkgcGFkZGluZyB0aGV5IHdlcmUgcG9pbnRpbmcgYXQgKi8KKworCWlmICgqcyA9PSAnXDAnICYmICp0ID09ICdcMCcpCisJICAgIHJldHVybiAoMCk7CisKKwlpZiAoKnMgIT0gKnQpCisJICAgIHJldHVybiAoKnQgLSAqcyk7CisKKwkvKiBlbHNlICpzID09ICp0IGJ1dCBvbmUgaXMgbm90IE5VTCwgc28gY29udGludWUgKi8KKwlzKyssIHQrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfYWNzMChzdHJpbmdfZGVzYyAqIGRzdCwgaW50IGNvZGUsIGludCBzcmMpCit7CisgICAgaWYgKHNyYyAhPSAwKSB7CisJY2hhciB0ZW1wWzNdOworCXRlbXBbMF0gPSAoY2hhcikgY29kZTsKKwl0ZW1wWzFdID0gKGNoYXIpIHNyYzsKKwl0ZW1wWzJdID0gMDsKKwlfbmNfc2FmZV9zdHJjYXQoZHN0LCB0ZW1wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfYWNzKHN0cmluZ19kZXNjICogZHN0LCBpbnQgY29kZSwgY2hhciAqc3JjKQoreworICAgIGlmIChzcmMgIT0gMCAmJiBzdHJsZW4oc3JjKSA9PSAxKSB7CisJYXBwZW5kX2FjczAoZHN0LCBjb2RlLCAqc3JjKTsKKyAgICB9Cit9CisKKy8qCisgKiBUaGUga28gY2FwYWJpbGl0eSwgaWYgcHJlc2VudCwgY29uc2lzdHMgb2YgYSBjb21tYS1zZXBhcmF0ZWQgY2FwYWJpbGl0eQorICogbGlzdC4gIEZvciBlYWNoIGNhcGFiaWxpdHksIHdlIG1heSBhc3N1bWUgdGhlcmUgaXMgYSBrZXljYXAgdGhhdCBzZW5kcyB0aGUKKyAqIHN0cmluZyB3aGljaCBpcyB0aGUgdmFsdWUgb2YgdGhhdCBjYXBhYmlsaXR5LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqZnJvbTsKKyAgICBjb25zdCBjaGFyICp0bzsKK30gYXNzb2M7CitzdGF0aWMgYXNzb2MgY29uc3Qga29feGxhdGVbXSA9Cit7CisgICAgeyJhbCIsICJraWwxIn0sCQkvKiBpbnNlcnQgbGluZSBrZXkgIC0+IEtFWV9JTCAgICAqLworICAgIHsiYnQiLCAia2NidCJ9LAkJLyogYmFjayB0YWIgICAgICAgICAtPiBLRVlfQlRBQiAgKi8KKyAgICB7ImNkIiwgImtlZCJ9LAkJLyogY2xlYXItdG8tZW9zIGtleSAtPiBLRVlfRU9MICAgKi8KKyAgICB7ImNlIiwgImtlbCJ9LAkJLyogY2xlYXItdG8tZW9sIGtleSAtPiBLRVlfRU9TICAgKi8KKyAgICB7ImNsIiwgImtjbHIifSwJCS8qIGNsZWFyIGtleSAgICAgICAgLT4gS0VZX0NMRUFSICovCisgICAgeyJjdCIsICJ0YmMifSwJCS8qIGNsZWFyIGFsbCB0YWJzICAgLT4gS0VZX0NBVEFCICovCisgICAgeyJkYyIsICJrZGNoMSJ9LAkJLyogZGVsZXRlIGNoYXIgICAgICAtPiBLRVlfREMgICAgKi8KKyAgICB7ImRsIiwgImtkbDEifSwJCS8qIGRlbGV0ZSBsaW5lICAgICAgLT4gS0VZX0RMICAgICovCisgICAgeyJkbyIsICJrY3VkMSJ9LAkJLyogZG93biBrZXkgICAgICAgICAtPiBLRVlfRE9XTiAgKi8KKyAgICB7ImVpIiwgImtybWlyIn0sCQkvKiBleGl0IGluc2VydCBrZXkgIC0+IEtFWV9FSUMgICAqLworICAgIHsiaG8iLCAia2hvbWUifSwJCS8qIGhvbWUga2V5ICAgICAgICAgLT4gS0VZX0hPTUUgICovCisgICAgeyJpYyIsICJraWNoMSJ9LAkJLyogaW5zZXJ0IGNoYXIga2V5ICAtPiBLRVlfSUMgICAgKi8KKyAgICB7ImltIiwgImtJQyJ9LAkJLyogaW5zZXJ0LW1vZGUga2V5ICAtPiBLRVlfU0lDICAgKi8KKyAgICB7ImxlIiwgImtjdWIxIn0sCQkvKiBsZSBrZXkgICAgICAgICAgIC0+IEtFWV9MRUZUICAqLworICAgIHsibmQiLCAia2N1ZjEifSwJCS8qIG5kIGtleSAgICAgICAgICAgLT4gS0VZX1JJR0hUICovCisgICAgeyJubCIsICJrZW50In0sCQkvKiBuZXcgbGluZSBrZXkgICAgIC0+IEtFWV9FTlRFUiAqLworICAgIHsic3QiLCAia2h0cyJ9LAkJLyogc2V0LXRhYiBrZXkgICAgICAtPiBLRVlfU1RBQiAgKi8KKyAgICB7InRhIiwgQ0FOQ0VMTEVEX1NUUklOR30sCisgICAgeyJ1cCIsICJrY3V1MSJ9LAkJLyogdXAtYXJyb3cga2V5ICAgICAtPiBLRVlfVVAgICAgKi8KKyAgICB7KGNoYXIgKikgMCwgKGNoYXIgKikgMH0sCit9OworCisvKgorICogVGhpcyByb3V0aW5lIGZpbGxzIGluIHN0cmluZyBjYXBzIHRoYXQgZWl0aGVyIGhhZCBkZWZhdWx0cyB1bmRlcgorICogdGVybWNhcCBvciBjYW4gYmUgbWFudWZhY3R1cmVkIGZyb20gb2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMuCisgKiBJdCB3YXMgbGlmdGVkIGZyb20gUm9zcyBSaWRnZSdzIG15dGluZm8gcGFja2FnZS4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciBDX0NSW10gPSAiXHIiOworc3RhdGljIGNvbnN0IGNoYXIgQ19MRltdID0gIlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIENfQlNbXSA9ICJcYiI7CitzdGF0aWMgY29uc3QgY2hhciBDX0hUW10gPSAiXHQiOworCisvKgorICogTm90ZSB0aGF0IFdBTlRFRCBhbmQgUFJFU0VOVCBhcmUgbm90IHNpbXBsZSBpbnZlcnNlcyEgIElmIGEgY2FwYWJpbGl0eQorICogaGFzIGJlZW4gZXhwbGljaXRseSBjYW5jZWxsZWQsIGl0J3Mgbm90IGNvbnNpZGVyZWQgV0FOVEVELgorICovCisjZGVmaW5lIFdBTlRFRChzKQkoKHMpID09IEFCU0VOVF9TVFJJTkcpCisjZGVmaW5lIFBSRVNFTlQocykJKCgocykgIT0gQUJTRU5UX1NUUklORykgJiYgKChzKSAhPSBDQU5DRUxMRURfU1RSSU5HKSkKKworLyoKKyAqIFRoaXMgYml0IG9mIGxlZ2VyZGVtYWluIHR1cm5zIGFsbCB0aGUgdGVybWluZm8gdmFyaWFibGUgbmFtZXMgaW50bworICogcmVmZXJlbmNlcyB0byBsb2NhdGlvbnMgaW4gdGhlIGFycmF5cyBCb29sZWFucywgTnVtYmVycywgYW5kIFN0cmluZ3MgLS0tCisgKiBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZC4KKyAqLworCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiB0cC0+CisKK3N0YXRpYyB2b2lkCitwb3N0cHJvY2Vzc190ZXJtY2FwKFRFUk1UWVBFICp0cCwgYm9vbCBoYXNfYmFzZSkKK3sKKyAgICBjaGFyIGJ1ZltNQVhfTElORSAqIDIgKyAyXTsKKyAgICBzdHJpbmdfZGVzYyByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIFRFUk1DQVAgREVGQVVMVFMgQU5EIE9CU09MRVRFLUNBUEFCSUxJVFkgVFJBTlNMQVRJT05TCisgICAgICoKKyAgICAgKiBUaGlzIGZpcnN0IHBhcnQgb2YgdGhlIGNvZGUgaXMgdGhlIGZ1bmN0aW9uYWwgaW52ZXJzZSBvZiB0aGUKKyAgICAgKiBmcmFnbWVudCBpbiBjYXBkZWZhdWx0cy5jLgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKworICAgIC8qIGlmIHRoZXJlIHdhcyBhIHRjIGVudHJ5LCBhc3N1bWUgd2UgcGlja2VkIHVwIGRlZmF1bHRzIHZpYSB0aGF0ICovCisgICAgaWYgKCFoYXNfYmFzZSkgeworCWlmIChXQU5URUQoaW5pdF8zc3RyaW5nKSAmJiB0ZXJtY2FwX2luaXQyKQorCSAgICBpbml0XzNzdHJpbmcgPSBfbmNfc2F2ZV9zdHIodGVybWNhcF9pbml0Mik7CisKKwlpZiAoV0FOVEVEKHJlc2V0XzJzdHJpbmcpICYmIHRlcm1jYXBfcmVzZXQpCisJICAgIHJlc2V0XzJzdHJpbmcgPSBfbmNfc2F2ZV9zdHIodGVybWNhcF9yZXNldCk7CisKKwlpZiAoV0FOVEVEKGNhcnJpYWdlX3JldHVybikpIHsKKwkgICAgaWYgKGNhcnJpYWdlX3JldHVybl9kZWxheSA+IDApIHsKKwkJc3ByaW50ZihidWYsICIlcyQ8JWQ+IiwgQ19DUiwgY2FycmlhZ2VfcmV0dXJuX2RlbGF5KTsKKwkJY2FycmlhZ2VfcmV0dXJuID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJICAgIH0gZWxzZQorCQljYXJyaWFnZV9yZXR1cm4gPSBfbmNfc2F2ZV9zdHIoQ19DUik7CisJfQorCWlmIChXQU5URUQoY3Vyc29yX2xlZnQpKSB7CisJICAgIGlmIChiYWNrc3BhY2VfZGVsYXkgPiAwKSB7CisJCXNwcmludGYoYnVmLCAiJXMkPCVkPiIsIENfQlMsIGJhY2tzcGFjZV9kZWxheSk7CisJCWN1cnNvcl9sZWZ0ID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJICAgIH0gZWxzZSBpZiAoYmFja3NwYWNlc193aXRoX2JzID09IDEpCisJCWN1cnNvcl9sZWZ0ID0gX25jX3NhdmVfc3RyKENfQlMpOworCSAgICBlbHNlIGlmIChQUkVTRU5UKGJhY2tzcGFjZV9pZl9ub3RfYnMpKQorCQljdXJzb3JfbGVmdCA9IGJhY2tzcGFjZV9pZl9ub3RfYnM7CisJfQorCS8qIHZpIGRvZXNuJ3QgdXNlICJkbyIsIGJ1dCBpdCBkb2VzIHNlZW1zIHRvIHVzZSBubCAob3IgJ1xuJykgaW5zdGVhZCAqLworCWlmIChXQU5URUQoY3Vyc29yX2Rvd24pKSB7CisJICAgIGlmIChQUkVTRU5UKGxpbmVmZWVkX2lmX25vdF9sZikpCisJCWN1cnNvcl9kb3duID0gbGluZWZlZWRfaWZfbm90X2xmOworCSAgICBlbHNlIGlmIChsaW5lZmVlZF9pc19uZXdsaW5lICE9IDEpIHsKKwkJaWYgKG5ld19saW5lX2RlbGF5ID4gMCkgeworCQkgICAgc3ByaW50ZihidWYsICIlcyQ8JWQ+IiwgQ19MRiwgbmV3X2xpbmVfZGVsYXkpOworCQkgICAgY3Vyc29yX2Rvd24gPSBfbmNfc2F2ZV9zdHIoYnVmKTsKKwkJfSBlbHNlCisJCSAgICBjdXJzb3JfZG93biA9IF9uY19zYXZlX3N0cihDX0xGKTsKKwkgICAgfQorCX0KKwlpZiAoV0FOVEVEKHNjcm9sbF9mb3J3YXJkKSAmJiBjcnRfbm9fc2Nyb2xsaW5nICE9IDEpIHsKKwkgICAgaWYgKFBSRVNFTlQobGluZWZlZWRfaWZfbm90X2xmKSkKKwkJY3Vyc29yX2Rvd24gPSBsaW5lZmVlZF9pZl9ub3RfbGY7CisJICAgIGVsc2UgaWYgKGxpbmVmZWVkX2lzX25ld2xpbmUgIT0gMSkgeworCQlpZiAobmV3X2xpbmVfZGVsYXkgPiAwKSB7CisJCSAgICBzcHJpbnRmKGJ1ZiwgIiVzJDwlZD4iLCBDX0xGLCBuZXdfbGluZV9kZWxheSk7CisJCSAgICBzY3JvbGxfZm9yd2FyZCA9IF9uY19zYXZlX3N0cihidWYpOworCQl9IGVsc2UKKwkJICAgIHNjcm9sbF9mb3J3YXJkID0gX25jX3NhdmVfc3RyKENfTEYpOworCSAgICB9CisJfQorCWlmIChXQU5URUQobmV3bGluZSkpIHsKKwkgICAgaWYgKGxpbmVmZWVkX2lzX25ld2xpbmUgPT0gMSkgeworCQlpZiAobmV3X2xpbmVfZGVsYXkgPiAwKSB7CisJCSAgICBzcHJpbnRmKGJ1ZiwgIiVzJDwlZD4iLCBDX0xGLCBuZXdfbGluZV9kZWxheSk7CisJCSAgICBuZXdsaW5lID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJCX0gZWxzZQorCQkgICAgbmV3bGluZSA9IF9uY19zYXZlX3N0cihDX0xGKTsKKwkgICAgfSBlbHNlIGlmIChQUkVTRU5UKGNhcnJpYWdlX3JldHVybikgJiYgUFJFU0VOVChzY3JvbGxfZm9yd2FyZCkpIHsKKwkJX25jX3N0cl9pbml0KCZyZXN1bHQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAoX25jX3NhZmVfc3RyY2F0KCZyZXN1bHQsIGNhcnJpYWdlX3JldHVybikKKwkJICAgICYmIF9uY19zYWZlX3N0cmNhdCgmcmVzdWx0LCBzY3JvbGxfZm9yd2FyZCkpCisJCSAgICBuZXdsaW5lID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJICAgIH0gZWxzZSBpZiAoUFJFU0VOVChjYXJyaWFnZV9yZXR1cm4pICYmIFBSRVNFTlQoY3Vyc29yX2Rvd24pKSB7CisJCV9uY19zdHJfaW5pdCgmcmVzdWx0LCBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKF9uY19zYWZlX3N0cmNhdCgmcmVzdWx0LCBjYXJyaWFnZV9yZXR1cm4pCisJCSAgICAmJiBfbmNfc2FmZV9zdHJjYXQoJnJlc3VsdCwgY3Vyc29yX2Rvd24pKQorCQkgICAgbmV3bGluZSA9IF9uY19zYXZlX3N0cihidWYpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSW52ZXJzZSBvZiBjYXBkZWZhdWx0cy5jIGNvZGUgZW5kcyBoZXJlLgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKgorICAgICAqIFRFUk1DQVAtVE8gVEVSTUlORk8gTUFQUElOR1MgRk9SIFNPVVJDRSBUUkFOU0xBVElPTgorICAgICAqCisgICAgICogVGhlc2UgdHJhbnNsYXRpb25zIHdpbGwgKm5vdCogYmUgaW52ZXJ0ZWQgYnkgdGdldGVudCgpLgorICAgICAqLworCisgICAgaWYgKCFoYXNfYmFzZSkgeworCS8qCisJICogV2Ugd2FpdCB1bnRpbCBub3cgdG8gZGVjaWRlIGlmIHdlJ3ZlIGdvdCBhIHdvcmtpbmcgY3IgYmVjYXVzZSBldmVuCisJICogb25lIHRoYXQgZG9lc24ndCB3b3JrIGNhbiBiZSB1c2VkIGZvciBuZXdsaW5lLiBVbmZvcnR1bmF0ZWx5IHRoZQorCSAqIHNwYWNlIGFsbG9jYXRlZCBmb3IgaXQgaXMgd2FzdGVkLgorCSAqLworCWlmIChyZXR1cm5fZG9lc19jbHJfZW9sID09IDEgfHwgbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IgPT0gMSkKKwkgICAgY2FycmlhZ2VfcmV0dXJuID0gQUJTRU5UX1NUUklORzsKKworCS8qCisJICogU3VwcG9zZWRseSBtb3N0IHRlcm1jYXAgZW50cmllcyBoYXZlIHRhIG5vdyBhbmQgJ1x0JyBpcyBubyBsb25nZXIgYQorCSAqIGRlZmF1bHQsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgdHJ1ZS4uLgorCSAqLworCWlmIChXQU5URUQodGFiKSkgeworCSAgICBpZiAoaG9yaXpvbnRhbF90YWJfZGVsYXkgPiAwKSB7CisJCXNwcmludGYoYnVmLCAiJXMkPCVkPiIsIENfSFQsIGhvcml6b250YWxfdGFiX2RlbGF5KTsKKwkJdGFiID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJICAgIH0gZWxzZQorCQl0YWIgPSBfbmNfc2F2ZV9zdHIoQ19IVCk7CisJfQorCWlmIChpbml0X3RhYnMgPT0gQUJTRU5UX05VTUVSSUMgJiYgaGFzX2hhcmR3YXJlX3RhYnMgPT0gVFJVRSkKKwkgICAgaW5pdF90YWJzID0gODsKKworCS8qCisJICogQXNzdW1lIHdlIGNhbiBiZWVwIHdpdGggXkcgdW5sZXNzIHdlJ3JlIGdpdmVuIGJsQC4KKwkgKi8KKwlpZiAoV0FOVEVEKGJlbGwpKQorCSAgICBiZWxsID0gX25jX3NhdmVfc3RyKCJcMDA3Iik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUcmFuc2xhdGUgdGhlIG9sZCB0ZXJtY2FwIDpwdDogY2FwYWJpbGl0eSB0byBpdCM4ICsgaHQ9XHQKKyAgICAgKi8KKyAgICBpZiAoaGFzX2hhcmR3YXJlX3RhYnMgPT0gVFJVRSkgeworCWlmIChpbml0X3RhYnMgIT0gOCAmJiBpbml0X3RhYnMgIT0gQUJTRU5UX05VTUVSSUMpCisJICAgIF9uY193YXJuaW5nKCJoYXJkd2FyZSB0YWJzIHdpdGggYSB3aWR0aCBvdGhlciB0aGFuIDg6ICVkIiwgaW5pdF90YWJzKTsKKwllbHNlIHsKKwkgICAgaWYgKHRhYiAmJiBfbmNfY2FwY21wKHRhYiwgQ19IVCkpCisJCV9uY193YXJuaW5nKCJoYXJkd2FyZSB0YWJzIHdpdGggYSBub24tXkkgdGFiIHN0cmluZyAlcyIsCisJCQkgICAgX25jX3Zpc2J1Zih0YWIpKTsKKwkgICAgZWxzZSB7CisJCWlmIChXQU5URUQodGFiKSkKKwkJICAgIHRhYiA9IF9uY19zYXZlX3N0cihDX0hUKTsKKwkJaW5pdF90YWJzID0gODsKKwkgICAgfQorCX0KKyAgICB9CisgICAgLyoKKyAgICAgKiBOb3cgdHJhbnNsYXRlIHRoZSBrbyBjYXBhYmlsaXR5LCBpZiB0aGVyZSBpcyBvbmUuICBUaGlzCisgICAgICogaXNuJ3QgZnJvbSBteXRpbmZvLi4uCisgICAgICovCisgICAgaWYgKFBSRVNFTlQob3RoZXJfbm9uX2Z1bmN0aW9uX2tleXMpKSB7CisJY2hhciAqYmFzZSA9IG90aGVyX25vbl9mdW5jdGlvbl9rZXlzOworCWNoYXIgKmJwLCAqY3AsICpkcDsKKwlzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqZnJvbV9wdHI7CisJc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKnRvX3B0cjsKKwlhc3NvYyBjb25zdCAqYXA7CisJY2hhciBidWYyW01BWF9URVJNSU5GT19MRU5HVEhdOworCWJvb2wgZm91bmRpbTsKKworCS8qIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGlzIGZvciBhIHNwZWNpYWwgY2FzZSBsYXRlciAqLworCWRwID0gc3RyY2hyKG90aGVyX25vbl9mdW5jdGlvbl9rZXlzLCAnaScpOworCWZvdW5kaW0gPSAoZHAgIT0gMCkgJiYgKGRwWzFdID09ICdtJyk7CisKKwkvKiBsb29rIGF0IGVhY2ggY29tbWEtc2VwYXJhdGVkIGNhcGFiaWxpdHkgaW4gdGhlIGtvIHN0cmluZy4uLiAqLworCWZvciAoYmFzZSA9IG90aGVyX25vbl9mdW5jdGlvbl9rZXlzOworCSAgICAgKGNwID0gc3RyY2hyKGJhc2UsICcsJykpICE9IDA7CisJICAgICBiYXNlID0gY3AgKyAxKSB7CisJICAgIHNpemVfdCBsZW4gPSBjcCAtIGJhc2U7CisKKwkgICAgZm9yIChhcCA9IGtvX3hsYXRlOyBhcC0+ZnJvbTsgYXArKykgeworCQlpZiAobGVuID09IHN0cmxlbihhcC0+ZnJvbSkKKwkJICAgICYmIHN0cm5jbXAoYXAtPmZyb20sIGJhc2UsIGxlbikgPT0gMCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGlmICghKGFwLT5mcm9tICYmIGFwLT50bykpIHsKKwkJX25jX3dhcm5pbmcoInVua25vd24gY2FwYWJpbGl0eSBgJS4qcycgaW4ga28gc3RyaW5nIiwKKwkJCSAgICAoaW50KSBsZW4sIGJhc2UpOworCQljb250aW51ZTsKKwkgICAgfSBlbHNlIGlmIChhcC0+dG8gPT0gQ0FOQ0VMTEVEX1NUUklORykJLyogaWdub3JlIGl0ICovCisJCWNvbnRpbnVlOworCisJICAgIC8qIG5vdyB3ZSBrbm93IHdlIGZvdW5kIGEgbWF0Y2ggaW4ga29fdGFibGUsIHNvLi4uICovCisKKwkgICAgZnJvbV9wdHIgPSBfbmNfZmluZF9lbnRyeShhcC0+ZnJvbSwgX25jX2dldF9oYXNoX3RhYmxlKFRSVUUpKTsKKwkgICAgdG9fcHRyID0gX25jX2ZpbmRfZW50cnkoYXAtPnRvLCBfbmNfZ2V0X2hhc2hfdGFibGUoRkFMU0UpKTsKKworCSAgICBpZiAoIWZyb21fcHRyIHx8ICF0b19wdHIpCS8qIHNob3VsZCBuZXZlciBoYXBwZW4hICovCisJCV9uY19lcnJfYWJvcnQoImtvIHRyYW5zbGF0aW9uIHRhYmxlIGlzIGludmFsaWQsIEkgZ2l2ZSB1cCIpOworCisJICAgIGlmIChXQU5URUQodHAtPlN0cmluZ3NbZnJvbV9wdHItPm50ZV9pbmRleF0pKSB7CisJCV9uY193YXJuaW5nKCJubyB2YWx1ZSBmb3Iga28gY2FwYWJpbGl0eSAlcyIsIGFwLT5mcm9tKTsKKwkJY29udGludWU7CisJICAgIH0KKworCSAgICBpZiAodHAtPlN0cmluZ3NbdG9fcHRyLT5udGVfaW5kZXhdKSB7CisJCS8qIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gd2FybmluZyBhYm91dCBpdCBpZiBpdCdzIHRoZSBzYW1lCisJCSAqIHN0cmluZzsgdGhhdCdzIGp1c3QgYW4gaW5lZmZpY2llbmN5LgorCQkgKi8KKwkJaWYgKHN0cmNtcCgKKwkJCSAgICAgIHRwLT5TdHJpbmdzW2Zyb21fcHRyLT5udGVfaW5kZXhdLAorCQkJICAgICAgdHAtPlN0cmluZ3NbdG9fcHRyLT5udGVfaW5kZXhdKSAhPSAwKQorCQkgICAgX25jX3dhcm5pbmcoIiVzICglcykgYWxyZWFkeSBoYXMgYW4gZXhwbGljaXQgdmFsdWUgJXMsIGlnbm9yaW5nIGtvIiwKKwkJCQlhcC0+dG8sIGFwLT5mcm9tLAorCQkJCV9uY192aXNidWYodHAtPlN0cmluZ3NbdG9fcHRyLT5udGVfaW5kZXhdKSk7CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogVGhlIG1hZ2ljIG1vbWVudCAtLSBjb3B5IHRoZSBtYXBwZWQga2V5IHN0cmluZyBvdmVyLAorCSAgICAgKiBzdHJpcHBpbmcgb3V0IHBhZGRpbmcuCisJICAgICAqLworCSAgICBmb3IgKGRwID0gYnVmMiwgYnAgPSB0cC0+U3RyaW5nc1tmcm9tX3B0ci0+bnRlX2luZGV4XTsgKmJwOyBicCsrKSB7CisJCWlmIChicFswXSA9PSAnJCcgJiYgYnBbMV0gPT0gJzwnKSB7CisJCSAgICB3aGlsZSAoKmJwICYmICpicCAhPSAnPicpIHsKKwkJCSsrYnA7CisJCSAgICB9CisJCX0gZWxzZQorCQkgICAgKmRwKysgPSAqYnA7CisJICAgIH0KKwkgICAgKmRwKysgPSAnXDAnOworCisJICAgIHRwLT5TdHJpbmdzW3RvX3B0ci0+bnRlX2luZGV4XSA9IF9uY19zYXZlX3N0cihidWYyKTsKKwl9CisKKwkvKgorCSAqIE5vdGU6IGtvPWltIGFuZCBrbz1pYyBib3RoIHdhbnQgdG8gZ3JhYiB0aGUgYEluc2VydCcKKwkgKiBrZXljYXAuICBUaGVyZSdzIGEga2ljaDEgYnV0IG5vIGtzbWlyLCBzbyB0aGUgaWMgY2FwYWJpbGl0eQorCSAqIGdvdCBtYXBwZWQgdG8ga2ljaDEgYW5kIGltIHRvIGtJQyB0byBhdm9pZCBhIGNvbGxpc2lvbi4KKwkgKiBJZiB0aGUgZGVzY3JpcHRpb24gaGFzIGltIGJ1dCBub3QgaWMsIGhhY2sga0lDIGJhY2sgdG8ga2ljaDEuCisJICovCisJaWYgKGZvdW5kaW0gJiYgV0FOVEVEKGtleV9pYykgJiYga2V5X3NpYykgeworCSAgICBrZXlfaWMgPSBrZXlfc2ljOworCSAgICBrZXlfc2ljID0gQUJTRU5UX1NUUklORzsKKwl9CisgICAgfQorCisgICAgaWYgKCFoYXNfYmFzZSkgeworCWlmICghaGFyZF9jb3B5KSB7CisJICAgIGlmIChXQU5URUQoa2V5X2JhY2tzcGFjZSkpCisJCWtleV9iYWNrc3BhY2UgPSBfbmNfc2F2ZV9zdHIoQ19CUyk7CisJICAgIGlmIChXQU5URUQoa2V5X2xlZnQpKQorCQlrZXlfbGVmdCA9IF9uY19zYXZlX3N0cihDX0JTKTsKKwkgICAgaWYgKFdBTlRFRChrZXlfZG93bikpCisJCWtleV9kb3duID0gX25jX3NhdmVfc3RyKENfTEYpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyYW5zbGF0ZSBYRU5JWCBmb3JtcyBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIGlmIChQUkVTRU5UKGFjc191bGNvcm5lcikgfHwKKwlQUkVTRU5UKGFjc19sbGNvcm5lcikgfHwKKwlQUkVTRU5UKGFjc191cmNvcm5lcikgfHwKKwlQUkVTRU5UKGFjc19scmNvcm5lcikgfHwKKwlQUkVTRU5UKGFjc19sdGVlKSB8fAorCVBSRVNFTlQoYWNzX3J0ZWUpIHx8CisJUFJFU0VOVChhY3NfYnRlZSkgfHwKKwlQUkVTRU5UKGFjc190dGVlKSB8fAorCVBSRVNFTlQoYWNzX2hsaW5lKSB8fAorCVBSRVNFTlQoYWNzX3ZsaW5lKSB8fAorCVBSRVNFTlQoYWNzX3BsdXMpKSB7CisJY2hhciBidWYyW01BWF9URVJNQ0FQX0xFTkdUSF07CisKKwlfbmNfc3RyX2luaXQoJnJlc3VsdCwgYnVmMiwgc2l6ZW9mKGJ1ZjIpKTsKKwlfbmNfc2FmZV9zdHJjYXQoJnJlc3VsdCwgYWNzX2NoYXJzKTsKKworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ2onLCBhY3NfbHJjb3JuZXIpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ2snLCBhY3NfdXJjb3JuZXIpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ2wnLCBhY3NfdWxjb3JuZXIpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ20nLCBhY3NfbGxjb3JuZXIpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ24nLCBhY3NfcGx1cyk7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAncScsIGFjc19obGluZSk7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAndCcsIGFjc19sdGVlKTsKKwlhcHBlbmRfYWNzKCZyZXN1bHQsICd1JywgYWNzX3J0ZWUpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ3YnLCBhY3NfYnRlZSk7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAndycsIGFjc190dGVlKTsKKwlhcHBlbmRfYWNzKCZyZXN1bHQsICd4JywgYWNzX3ZsaW5lKTsKKworCWlmIChidWYyWzBdKSB7CisJICAgIGFjc19jaGFycyA9IF9uY19zYXZlX3N0cihidWYyKTsKKwkgICAgX25jX3dhcm5pbmcoImFjc2Mgc3RyaW5nIHN5bnRoZXNpemVkIGZyb20gWEVOSVggY2FwYWJpbGl0aWVzIik7CisJfQorICAgIH0gZWxzZSBpZiAoYWNzX2NoYXJzID09IDAKKwkgICAgICAgJiYgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSAhPSAwCisJICAgICAgICYmIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSAhPSAwKSB7CisJYWNzX2NoYXJzID0gX25jX3NhdmVfc3RyKFZUX0FDU0MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Bvc3Rwcm9jZXNzX3Rlcm1pbmZvKFRFUk1UWVBFICp0cCkKK3sKKyAgICAvKgorICAgICAqIFRFUk1JTkZPLVRPLVRFUk1JTkZPIE1BUFBJTkdTIEZPUiBTT1VSQ0UgVFJBTlNMQVRJT04KKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICovCisKKyAgICAvKgorICAgICAqIFRyYW5zbGF0ZSBBSVggZm9ybXMgY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBpZiAoUFJFU0VOVChib3hfY2hhcnNfMSkpIHsKKwljaGFyIGJ1ZjJbTUFYX1RFUk1DQVBfTEVOR1RIXTsKKwlzdHJpbmdfZGVzYyByZXN1bHQ7CisKKwlfbmNfc3RyX2luaXQoJnJlc3VsdCwgYnVmMiwgc2l6ZW9mKGJ1ZjIpKTsKKwlfbmNfc2FmZV9zdHJjYXQoJnJlc3VsdCwgYWNzX2NoYXJzKTsKKworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICdsJywgYm94X2NoYXJzXzFbMF0pOwkvKiBBQ1NfVUxDT1JORVIgKi8KKwlhcHBlbmRfYWNzMCgmcmVzdWx0LCAncScsIGJveF9jaGFyc18xWzFdKTsJLyogQUNTX0hMSU5FICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ2snLCBib3hfY2hhcnNfMVsyXSk7CS8qIEFDU19VUkNPUk5FUiAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICd4JywgYm94X2NoYXJzXzFbM10pOwkvKiBBQ1NfVkxJTkUgKi8KKwlhcHBlbmRfYWNzMCgmcmVzdWx0LCAnaicsIGJveF9jaGFyc18xWzRdKTsJLyogQUNTX0xSQ09STkVSICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ20nLCBib3hfY2hhcnNfMVs1XSk7CS8qIEFDU19MTENPUk5FUiAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICd3JywgYm94X2NoYXJzXzFbNl0pOwkvKiBBQ1NfVFRFRSAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICd1JywgYm94X2NoYXJzXzFbN10pOwkvKiBBQ1NfUlRFRSAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICd2JywgYm94X2NoYXJzXzFbOF0pOwkvKiBBQ1NfQlRFRSAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICd0JywgYm94X2NoYXJzXzFbOV0pOwkvKiBBQ1NfTFRFRSAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICduJywgYm94X2NoYXJzXzFbMTBdKTsJLyogQUNTX1BMVVMgKi8KKworCWlmIChidWYyWzBdKSB7CisJICAgIGFjc19jaGFycyA9IF9uY19zYXZlX3N0cihidWYyKTsKKwkgICAgX25jX3dhcm5pbmcoImFjc2Mgc3RyaW5nIHN5bnRoZXNpemVkIGZyb20gQUlYIGNhcGFiaWxpdGllcyIpOworCSAgICBib3hfY2hhcnNfMSA9IEFCU0VOVF9TVFJJTkc7CisJfQorICAgIH0KKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KK30KKworLyoKKyAqIERvIGEgbGluZWFyIHNlYXJjaCB0aHJvdWdoIHRoZSB0ZXJtaW5mbyB0YWJsZXMgdG8gZmluZCBhIGdpdmVuIGZ1bGwtbmFtZS4KKyAqIFdlIGRvbid0IGV4cGVjdCB0byBkbyB0aGlzIG9mdGVuLCBzbyB0aGVyZSdzIG5vIGhhc2hpbmcgZnVuY3Rpb24uCisgKgorICogSW4gZWZmZWN0LCB0aGlzIHNjYW5zIHRocm91Z2ggdGhlIDMgbGlzdHMgb2YgZnVsbC1uYW1lcywgYW5kIGxvb2tzIHRoZW0KKyAqIHVwIGluIF9uY19pbmZvX3RhYmxlLCB3aGljaCBpcyBvcmdhbml6ZWQgc28gdGhhdCB0aGUgbnRlX2luZGV4IGZpZWxkcyBhcmUKKyAqIHNvcnRlZCwgYnV0IHRoZSBudGVfdHlwZSBmaWVsZHMgYXJlIG5vdCBuZWNlc3NhcmlseSBncm91cGVkIHRvZ2V0aGVyLgorICovCitzdGF0aWMgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKgorbG9va3VwX2Z1bGxuYW1lKGNvbnN0IGNoYXIgKmZpbmQpCit7CisgICAgaW50IHN0YXRlID0gLTE7CisKKyAgICBmb3IgKDs7KSB7CisJaW50IGNvdW50ID0gMDsKKwlOQ1VSU0VTX0NPTlNUIGNoYXIgKmNvbnN0ICpuYW1lczsKKworCXN3aXRjaCAoKytzdGF0ZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgbmFtZXMgPSBib29sZm5hbWVzOworCSAgICBicmVhazsKKwljYXNlIFNUUklORzoKKwkgICAgbmFtZXMgPSBzdHJmbmFtZXM7CisJICAgIGJyZWFrOworCWNhc2UgTlVNQkVSOgorCSAgICBuYW1lcyA9IG51bWZuYW1lczsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgcmV0dXJuIE5PVEZPVU5EOworCX0KKworCWZvciAoY291bnQgPSAwOyBuYW1lc1tjb3VudF0gIT0gMDsgY291bnQrKykgeworCSAgICBpZiAoIXN0cmNtcChuYW1lc1tjb3VudF0sIGZpbmQpKSB7CisJCXN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICplbnRyeV9wdHIgPSBfbmNfZ2V0X3RhYmxlKEZBTFNFKTsKKwkJd2hpbGUgKGVudHJ5X3B0ci0+bnRlX3R5cGUgIT0gc3RhdGUKKwkJICAgICAgIHx8IGVudHJ5X3B0ci0+bnRlX2luZGV4ICE9IGNvdW50KQorCQkgICAgZW50cnlfcHRyKys7CisJCXJldHVybiBlbnRyeV9wdHI7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKiBwYXJzZV9lbnRyeS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9yZWFkX2VudHJ5LmMgYi9uY3Vyc2VzL3RpbmZvL3JlYWRfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGVhNjFjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9yZWFkX2VudHJ5LmMKQEAgLTAsMCArMSw1NDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXJlYWRfZW50cnkuYyAtLSBSb3V0aW5lIGZvciByZWFkaW5nIGluIGEgY29tcGlsZWQgdGVybWluZm8gZmlsZQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGhhc2hlZF9kYi5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogcmVhZF9lbnRyeS5jLHYgMS4xMDIgMjAwOC8wOC8wMyAxOTozMzowNCB0b20gRXhwICQiKQorCisjZGVmaW5lIFRZUEVfQ0FMTE9DKHR5cGUsZWx0cykgdHlwZUNhbGxvYyh0eXBlLCAodW5zaWduZWQpKGVsdHMpKQorCisjaWYgVVNFX0RBVEFCQVNFCitzdGF0aWMgdm9pZAorY29udmVydF9zaG9ydHMoY2hhciAqYnVmLCBzaG9ydCAqTnVtYmVycywgaW50IGNvdW50KQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJaWYgKElTX05FRzEoYnVmICsgMiAqIGkpKQorCSAgICBOdW1iZXJzW2ldID0gQUJTRU5UX05VTUVSSUM7CisJZWxzZSBpZiAoSVNfTkVHMihidWYgKyAyICogaSkpCisJICAgIE51bWJlcnNbaV0gPSBDQU5DRUxMRURfTlVNRVJJQzsKKwllbHNlCisJICAgIE51bWJlcnNbaV0gPSBMT1dfTVNCKGJ1ZiArIDIgKiBpKTsKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJnZXQgTnVtYmVyc1slZF09JWQiLCBpLCBOdW1iZXJzW2ldKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY29udmVydF9zdHJpbmdzKGNoYXIgKmJ1ZiwgY2hhciAqKlN0cmluZ3MsIGludCBjb3VudCwgaW50IHNpemUsIGNoYXIgKnRhYmxlKQoreworICAgIGludCBpOworICAgIGNoYXIgKnA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCWlmIChJU19ORUcxKGJ1ZiArIDIgKiBpKSkgeworCSAgICBTdHJpbmdzW2ldID0gQUJTRU5UX1NUUklORzsKKwl9IGVsc2UgaWYgKElTX05FRzIoYnVmICsgMiAqIGkpKSB7CisJICAgIFN0cmluZ3NbaV0gPSBDQU5DRUxMRURfU1RSSU5HOworCX0gZWxzZSBpZiAoKGludCkgTE9XX01TQihidWYgKyAyICogaSkgPiBzaXplKSB7CisJICAgIFN0cmluZ3NbaV0gPSBBQlNFTlRfU1RSSU5HOworCX0gZWxzZSB7CisJICAgIFN0cmluZ3NbaV0gPSAoTE9XX01TQihidWYgKyAyICogaSkgKyB0YWJsZSk7CisJICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoIlN0cmluZ3NbJWRdID0gJXMiLCBpLCBfbmNfdmlzYnVmKFN0cmluZ3NbaV0pKSk7CisJfQorCisJLyogbWFrZSBzdXJlIGFsbCBzdHJpbmdzIGFyZSBOVUwgdGVybWluYXRlZCAqLworCWlmIChWQUxJRF9TVFJJTkcoU3RyaW5nc1tpXSkpIHsKKwkgICAgZm9yIChwID0gU3RyaW5nc1tpXTsgcCA8PSB0YWJsZSArIHNpemU7IHArKykKKwkJaWYgKCpwID09ICdcMCcpCisJCSAgICBicmVhazsKKwkgICAgLyogaWYgdGhlcmUgaXMgbm8gTlVMLCBpZ25vcmUgdGhlIHN0cmluZyAqLworCSAgICBpZiAocCA+IHRhYmxlICsgc2l6ZSkKKwkJU3RyaW5nc1tpXSA9IEFCU0VOVF9TVFJJTkc7CisJfQorICAgIH0KK30KKworc3RhdGljIGludAorZmFrZV9yZWFkKGNoYXIgKnNyYywgaW50ICpvZmZzZXQsIGludCBsaW1pdCwgY2hhciAqZHN0LCB1bnNpZ25lZCB3YW50KQoreworICAgIGludCBoYXZlID0gKGxpbWl0IC0gKm9mZnNldCk7CisKKyAgICBpZiAoaGF2ZSA+IDApIHsKKwlpZiAoKGludCkgd2FudCA+IGhhdmUpCisJICAgIHdhbnQgPSBoYXZlOworCW1lbWNweShkc3QsIHNyYyArICpvZmZzZXQsIHdhbnQpOworCSpvZmZzZXQgKz0gd2FudDsKKyAgICB9IGVsc2UgeworCXdhbnQgPSAwOworICAgIH0KKyAgICByZXR1cm4gKGludCkgd2FudDsKK30KKworI2RlZmluZSBSZWFkKGJ1ZiwgY291bnQpIGZha2VfcmVhZChidWZmZXIsICZvZmZzZXQsIGxpbWl0LCBidWYsIGNvdW50KQorCisjZGVmaW5lIHJlYWRfc2hvcnRzKGJ1ZiwgY291bnQpIFwKKwkoUmVhZChidWYsICh1bnNpZ25lZCkgKGNvdW50KSoyKSA9PSAoaW50KSAoY291bnQpKjIpCisKKyNkZWZpbmUgZXZlbl9ib3VuZGFyeSh2YWx1ZSkgXAorICAgIGlmICgodmFsdWUpICUgMiAhPSAwKSBSZWFkKGJ1ZiwgMSkKKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3JlYWRfdGVybXR5cGUoVEVSTVRZUEUgKnB0ciwgY2hhciAqYnVmZmVyLCBpbnQgbGltaXQpCisvKiByZXR1cm4gMSBpZiByZWFkLCAwIGlmIG5vdCBmb3VuZCBvciBnYXJibGVkICovCit7CisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IG5hbWVfc2l6ZSwgYm9vbF9jb3VudCwgbnVtX2NvdW50LCBzdHJfY291bnQsIHN0cl9zaXplOworICAgIGludCBpOworICAgIGNoYXIgYnVmW01BWF9FTlRSWV9TSVpFICsgMV07CisgICAgY2hhciAqc3RyaW5nX3RhYmxlOworICAgIHVuc2lnbmVkIHdhbnQsIGhhdmU7CisKKyAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJSRUFEIHRlcm10eXBlIGhlYWRlciBAJWQiLCBvZmZzZXQpKTsKKworICAgIG1lbXNldChwdHIsIDAsIHNpemVvZigqcHRyKSk7CisKKyAgICAvKiBncmFiIHRoZSBoZWFkZXIgKi8KKyAgICBpZiAoIXJlYWRfc2hvcnRzKGJ1ZiwgNikKKwl8fCAhSVNfVElDX01BR0lDKGJ1ZikpIHsKKwlyZXR1cm4gKFRHRVRFTlRfTk8pOworICAgIH0KKworICAgIG5hbWVfc2l6ZSA9IExPV19NU0IoYnVmICsgMik7CisgICAgYm9vbF9jb3VudCA9IExPV19NU0IoYnVmICsgNCk7CisgICAgbnVtX2NvdW50ID0gTE9XX01TQihidWYgKyA2KTsKKyAgICBzdHJfY291bnQgPSBMT1dfTVNCKGJ1ZiArIDgpOworICAgIHN0cl9zaXplID0gTE9XX01TQihidWYgKyAxMCk7CisKKyAgICBUUihUUkFDRV9EQVRBQkFTRSwKKyAgICAgICAoIlRFUk1UWVBFIG5hbWVfc2l6ZT0lZCwgYm9vbD0lZC8lZCwgbnVtPSVkLyVkIHN0cj0lZC8lZCglZCkiLAorCW5hbWVfc2l6ZSwgYm9vbF9jb3VudCwgQk9PTENPVU5ULCBudW1fY291bnQsIE5VTUNPVU5ULAorCXN0cl9jb3VudCwgU1RSQ09VTlQsIHN0cl9zaXplKSk7CisgICAgaWYgKG5hbWVfc2l6ZSA8IDAKKwl8fCBib29sX2NvdW50IDwgMAorCXx8IG51bV9jb3VudCA8IDAKKwl8fCBzdHJfY291bnQgPCAwCisJfHwgc3RyX3NpemUgPCAwKSB7CisJcmV0dXJuIChUR0VURU5UX05PKTsKKyAgICB9CisKKyAgICB3YW50ID0gc3RyX3NpemUgKyBuYW1lX3NpemUgKyAxOworICAgIGlmIChzdHJfc2l6ZSkgeworCS8qIHRyeSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHN0cmluZyB0YWJsZSAqLworCWlmIChzdHJfY291bnQgKiAyID49IChpbnQpIHNpemVvZihidWYpCisJICAgIHx8IChzdHJpbmdfdGFibGUgPSB0eXBlTWFsbG9jKGNoYXIsIHdhbnQpKSA9PSAwKSB7CisJICAgIHJldHVybiAoVEdFVEVOVF9OTyk7CisJfQorICAgIH0gZWxzZSB7CisJc3RyX2NvdW50ID0gMDsKKwlpZiAoKHN0cmluZ190YWJsZSA9IHR5cGVNYWxsb2MoY2hhciwgd2FudCkpID09IDApIHsKKwkgICAgcmV0dXJuIChUR0VURU5UX05PKTsKKwl9CisgICAgfQorCisgICAgLyogZ3JhYiB0aGUgbmFtZSAoYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nKSAqLworICAgIHdhbnQgPSBtaW4oTUFYX05BTUVfU0laRSwgKHVuc2lnbmVkKSBuYW1lX3NpemUpOworICAgIHB0ci0+c3RyX3RhYmxlID0gc3RyaW5nX3RhYmxlOworICAgIHB0ci0+dGVybV9uYW1lcyA9IHN0cmluZ190YWJsZTsKKyAgICBpZiAoKGhhdmUgPSBSZWFkKHB0ci0+dGVybV9uYW1lcywgd2FudCkpICE9IHdhbnQpIHsKKwltZW1zZXQocHRyLT50ZXJtX25hbWVzICsgaGF2ZSwgMCwgd2FudCAtIGhhdmUpOworICAgIH0KKyAgICBwdHItPnRlcm1fbmFtZXNbd2FudF0gPSAnXDAnOworICAgIHN0cmluZ190YWJsZSArPSAod2FudCArIDEpOworCisgICAgaWYgKGhhdmUgPiBNQVhfTkFNRV9TSVpFKQorCW9mZnNldCA9IChoYXZlIC0gTUFYX05BTUVfU0laRSk7CisKKyAgICAvKiBncmFiIHRoZSBib29sZWFucyAqLworICAgIGlmICgocHRyLT5Cb29sZWFucyA9IFRZUEVfQ0FMTE9DKE5DVVJTRVNfU0JPT0wsCisJCQkJICAgICBtYXgoQk9PTENPVU5ULCBib29sX2NvdW50KSkpID09IDAKKwl8fCBSZWFkKHB0ci0+Qm9vbGVhbnMsICh1bnNpZ25lZCkgYm9vbF9jb3VudCkgPCBib29sX2NvdW50KSB7CisJcmV0dXJuIChUR0VURU5UX05PKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIGJvb2xlYW5zIGVuZCBvbiBhbiBvZGQgYnl0ZSwgc2tpcCBpdC4gIFRoZSBtYWNoaW5lIHRoZXkKKyAgICAgKiBvcmlnaW5hbGx5IHdyb3RlIHRlcm1pbmZvIG9uIG11c3QgaGF2ZSBiZWVuIGEgMTYtYml0CisgICAgICogd29yZC1vcmllbnRlZCBtYWNoaW5lIHRoYXQgd291bGQgdHJhcCBvdXQgaWYgeW91IHRyaWVkIGEKKyAgICAgKiB3b3JkIGFjY2VzcyBvZmYgYSAyLWJ5dGUgYm91bmRhcnkuCisgICAgICovCisgICAgZXZlbl9ib3VuZGFyeShuYW1lX3NpemUgKyBib29sX2NvdW50KTsKKworICAgIC8qIGdyYWIgdGhlIG51bWJlcnMgKi8KKyAgICBpZiAoKHB0ci0+TnVtYmVycyA9IFRZUEVfQ0FMTE9DKHNob3J0LCBtYXgoTlVNQ09VTlQsIG51bV9jb3VudCkpKSA9PSAwCisJfHwgIXJlYWRfc2hvcnRzKGJ1ZiwgbnVtX2NvdW50KSkgeworCXJldHVybiAoVEdFVEVOVF9OTyk7CisgICAgfQorICAgIGNvbnZlcnRfc2hvcnRzKGJ1ZiwgcHRyLT5OdW1iZXJzLCBudW1fY291bnQpOworCisgICAgaWYgKChwdHItPlN0cmluZ3MgPSBUWVBFX0NBTExPQyhjaGFyICosIG1heChTVFJDT1VOVCwgc3RyX2NvdW50KSkpID09IDApCisJICByZXR1cm4gKFRHRVRFTlRfTk8pOworCisgICAgaWYgKHN0cl9jb3VudCkgeworCS8qIGdyYWIgdGhlIHN0cmluZyBvZmZzZXRzICovCisJaWYgKCFyZWFkX3Nob3J0cyhidWYsIHN0cl9jb3VudCkpIHsKKwkgICAgcmV0dXJuIChUR0VURU5UX05PKTsKKwl9CisJLyogZmluYWxseSwgZ3JhYiB0aGUgc3RyaW5nIHRhYmxlIGl0c2VsZiAqLworCWlmIChSZWFkKHN0cmluZ190YWJsZSwgKHVuc2lnbmVkKSBzdHJfc2l6ZSkgIT0gc3RyX3NpemUpCisJICAgIHJldHVybiAoVEdFVEVOVF9OTyk7CisJY29udmVydF9zdHJpbmdzKGJ1ZiwgcHRyLT5TdHJpbmdzLCBzdHJfY291bnQsIHN0cl9zaXplLCBzdHJpbmdfdGFibGUpOworICAgIH0KKyNpZiBOQ1VSU0VTX1hOQU1FUworCisgICAgcHRyLT5udW1fQm9vbGVhbnMgPSBCT09MQ09VTlQ7CisgICAgcHRyLT5udW1fTnVtYmVycyA9IE5VTUNPVU5UOworICAgIHB0ci0+bnVtX1N0cmluZ3MgPSBTVFJDT1VOVDsKKworICAgIC8qCisgICAgICogUmVhZCBleHRlbmRlZCBlbnRyaWVzLCBpZiBhbnksIGFmdGVyIHRoZSBub3JtYWwgZW5kIG9mIHRlcm1pbmZvIGRhdGEuCisgICAgICovCisgICAgZXZlbl9ib3VuZGFyeShzdHJfc2l6ZSk7CisgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgiUkVBRCBleHRlbmRlZF9oZWFkZXIgQCVkIiwgb2Zmc2V0KSk7CisgICAgaWYgKF9uY191c2VyX2RlZmluYWJsZSAmJiByZWFkX3Nob3J0cyhidWYsIDUpKSB7CisJaW50IGV4dF9ib29sX2NvdW50ID0gTE9XX01TQihidWYgKyAwKTsKKwlpbnQgZXh0X251bV9jb3VudCA9IExPV19NU0IoYnVmICsgMik7CisJaW50IGV4dF9zdHJfY291bnQgPSBMT1dfTVNCKGJ1ZiArIDQpOworCWludCBleHRfc3RyX3NpemUgPSBMT1dfTVNCKGJ1ZiArIDYpOworCWludCBleHRfc3RyX2xpbWl0ID0gTE9XX01TQihidWYgKyA4KTsKKwl1bnNpZ25lZCBuZWVkID0gKGV4dF9ib29sX2NvdW50ICsgZXh0X251bV9jb3VudCArIGV4dF9zdHJfY291bnQpOworCWludCBiYXNlID0gMDsKKworCWlmIChuZWVkID49IHNpemVvZihidWYpCisJICAgIHx8IGV4dF9zdHJfc2l6ZSA+PSAoaW50KSBzaXplb2YoYnVmKQorCSAgICB8fCBleHRfc3RyX2xpbWl0ID49IChpbnQpIHNpemVvZihidWYpCisJICAgIHx8IGV4dF9ib29sX2NvdW50IDwgMAorCSAgICB8fCBleHRfbnVtX2NvdW50IDwgMAorCSAgICB8fCBleHRfc3RyX2NvdW50IDwgMAorCSAgICB8fCBleHRfc3RyX3NpemUgPCAwCisJICAgIHx8IGV4dF9zdHJfbGltaXQgPCAwKQorCSAgICByZXR1cm4gKFRHRVRFTlRfTk8pOworCisJcHRyLT5udW1fQm9vbGVhbnMgPSBCT09MQ09VTlQgKyBleHRfYm9vbF9jb3VudDsKKwlwdHItPm51bV9OdW1iZXJzID0gTlVNQ09VTlQgKyBleHRfbnVtX2NvdW50OworCXB0ci0+bnVtX1N0cmluZ3MgPSBTVFJDT1VOVCArIGV4dF9zdHJfY291bnQ7CisKKwlwdHItPkJvb2xlYW5zID0gdHlwZVJlYWxsb2MoTkNVUlNFU19TQk9PTCwgcHRyLT5udW1fQm9vbGVhbnMsIHB0ci0+Qm9vbGVhbnMpOworCXB0ci0+TnVtYmVycyA9IHR5cGVSZWFsbG9jKHNob3J0LCBwdHItPm51bV9OdW1iZXJzLCBwdHItPk51bWJlcnMpOworCXB0ci0+U3RyaW5ncyA9IHR5cGVSZWFsbG9jKGNoYXIgKiwgcHRyLT5udW1fU3RyaW5ncywgcHRyLT5TdHJpbmdzKTsKKworCVRSKFRSQUNFX0RBVEFCQVNFLCAoImV4dGVuZGVkIGhlYWRlciBpcyAlZC8lZC8lZCglZDolZCkiLAorCQkJICAgIGV4dF9ib29sX2NvdW50LCBleHRfbnVtX2NvdW50LCBleHRfc3RyX2NvdW50LAorCQkJICAgIGV4dF9zdHJfc2l6ZSwgZXh0X3N0cl9saW1pdCkpOworCisJVFIoVFJBQ0VfREFUQUJBU0UsICgiUkVBRCAlZCBleHRlbmRlZC1ib29sZWFucyBAJWQiLAorCQkJICAgIGV4dF9ib29sX2NvdW50LCBvZmZzZXQpKTsKKwlpZiAoKHB0ci0+ZXh0X0Jvb2xlYW5zID0gZXh0X2Jvb2xfY291bnQpICE9IDApIHsKKwkgICAgaWYgKFJlYWQocHRyLT5Cb29sZWFucyArIEJPT0xDT1VOVCwgKHVuc2lnbmVkKQorCQkgICAgIGV4dF9ib29sX2NvdW50KSAhPSBleHRfYm9vbF9jb3VudCkKKwkJcmV0dXJuIChUR0VURU5UX05PKTsKKwl9CisJZXZlbl9ib3VuZGFyeShleHRfYm9vbF9jb3VudCk7CisKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJSRUFEICVkIGV4dGVuZGVkLW51bWJlcnMgQCVkIiwKKwkJCSAgICBleHRfbnVtX2NvdW50LCBvZmZzZXQpKTsKKwlpZiAoKHB0ci0+ZXh0X051bWJlcnMgPSBleHRfbnVtX2NvdW50KSAhPSAwKSB7CisJICAgIGlmICghcmVhZF9zaG9ydHMoYnVmLCBleHRfbnVtX2NvdW50KSkKKwkJcmV0dXJuIChUR0VURU5UX05PKTsKKwkgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgiQmVmb3JlIGNvbnZlcnRpbmcgZXh0ZW5kZWQtbnVtYmVycyIpKTsKKwkgICAgY29udmVydF9zaG9ydHMoYnVmLCBwdHItPk51bWJlcnMgKyBOVU1DT1VOVCwgZXh0X251bV9jb3VudCk7CisJfQorCisJVFIoVFJBQ0VfREFUQUJBU0UsICgiUkVBRCBleHRlbmRlZC1vZmZzZXRzIEAlZCIsIG9mZnNldCkpOworCWlmICgoZXh0X3N0cl9jb3VudCB8fCBuZWVkKQorCSAgICAmJiAhcmVhZF9zaG9ydHMoYnVmLCBleHRfc3RyX2NvdW50ICsgbmVlZCkpCisJICAgIHJldHVybiAoVEdFVEVOVF9OTyk7CisKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJSRUFEICVkIGJ5dGVzIG9mIGV4dGVuZGVkLXN0cmluZ3MgQCVkIiwKKwkJCSAgICBleHRfc3RyX2xpbWl0LCBvZmZzZXQpKTsKKworCWlmIChleHRfc3RyX2xpbWl0KSB7CisJICAgIGlmICgocHRyLT5leHRfc3RyX3RhYmxlID0gdHlwZU1hbGxvYyhjaGFyLCBleHRfc3RyX2xpbWl0KSkgPT0gMCkKKwkJICByZXR1cm4gKFRHRVRFTlRfTk8pOworCSAgICBpZiAoUmVhZChwdHItPmV4dF9zdHJfdGFibGUsICh1bnNpZ25lZCkgZXh0X3N0cl9saW1pdCkgIT0gZXh0X3N0cl9saW1pdCkKKwkJcmV0dXJuIChUR0VURU5UX05PKTsKKwkgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgiZmlyc3QgZXh0ZW5kZWQtc3RyaW5nIGlzICVzIiwgX25jX3Zpc2J1ZihwdHItPmV4dF9zdHJfdGFibGUpKSk7CisJfQorCisJaWYgKChwdHItPmV4dF9TdHJpbmdzID0gZXh0X3N0cl9jb3VudCkgIT0gMCkgeworCSAgICBUUihUUkFDRV9EQVRBQkFTRSwKKwkgICAgICAgKCJCZWZvcmUgY29tcHV0aW5nIGV4dGVuZGVkLXN0cmluZyBjYXBhYmlsaXRpZXMgc3RyX2NvdW50PSVkLCBleHRfc3RyX2NvdW50PSVkIiwKKwkJc3RyX2NvdW50LCBleHRfc3RyX2NvdW50KSk7CisJICAgIGNvbnZlcnRfc3RyaW5ncyhidWYsIHB0ci0+U3RyaW5ncyArIHN0cl9jb3VudCwgZXh0X3N0cl9jb3VudCwKKwkJCSAgICBleHRfc3RyX2xpbWl0LCBwdHItPmV4dF9zdHJfdGFibGUpOworCSAgICBmb3IgKGkgPSBleHRfc3RyX2NvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJVFIoVFJBQ0VfREFUQUJBU0UsICgiTU9WRSBmcm9tIFslZDolZF0gJXMiLAorCQkJCSAgICBpLCBpICsgc3RyX2NvdW50LAorCQkJCSAgICBfbmNfdmlzYnVmKHB0ci0+U3RyaW5nc1tpICsgc3RyX2NvdW50XSkpKTsKKwkJcHRyLT5TdHJpbmdzW2kgKyBTVFJDT1VOVF0gPSBwdHItPlN0cmluZ3NbaSArIHN0cl9jb3VudF07CisJCWlmIChWQUxJRF9TVFJJTkcocHRyLT5TdHJpbmdzW2kgKyBTVFJDT1VOVF0pKQorCQkgICAgYmFzZSArPSAoc3RybGVuKHB0ci0+U3RyaW5nc1tpICsgU1RSQ09VTlRdKSArIDEpOworCQlUUihUUkFDRV9EQVRBQkFTRSwgKCIuLi4gdG8gICAgWyVkXSAlcyIsCisJCQkJICAgIGkgKyBTVFJDT1VOVCwKKwkJCQkgICAgX25jX3Zpc2J1ZihwdHItPlN0cmluZ3NbaSArIFNUUkNPVU5UXSkpKTsKKwkgICAgfQorCX0KKworCWlmIChuZWVkKSB7CisJICAgIGlmIChleHRfc3RyX2NvdW50ID49IChNQVhfRU5UUllfU0laRSAqIDIpKQorCQkgIHJldHVybiAoVEdFVEVOVF9OTyk7CisJICAgIGlmICgocHRyLT5leHRfTmFtZXMgPSBUWVBFX0NBTExPQyhjaGFyICosIG5lZWQpKSA9PSAwKQorCQkgIHJldHVybiAoVEdFVEVOVF9OTyk7CisJICAgIFRSKFRSQUNFX0RBVEFCQVNFLAorCSAgICAgICAoImV4dF9OQU1FUyBzdGFydGluZyBAJWQgaW4gZXh0ZW5kZWRfc3RyaW5ncywgZmlyc3QgPSAlcyIsCisJCWJhc2UsIF9uY192aXNidWYocHRyLT5leHRfc3RyX3RhYmxlICsgYmFzZSkpKTsKKwkgICAgY29udmVydF9zdHJpbmdzKGJ1ZiArICgyICogZXh0X3N0cl9jb3VudCksCisJCQkgICAgcHRyLT5leHRfTmFtZXMsCisJCQkgICAgKGludCkgbmVlZCwKKwkJCSAgICBleHRfc3RyX2xpbWl0LCBwdHItPmV4dF9zdHJfdGFibGUgKyBiYXNlKTsKKwl9CisKKwlUKCgiLi4uZG9uZSByZWFkaW5nIHRlcm1pbmZvIGJvb2wgJWQoJWQpIG51bSAlZCglZCkgc3RyICVkKCVkKSIsCisJICAgcHRyLT5udW1fQm9vbGVhbnMsIHB0ci0+ZXh0X0Jvb2xlYW5zLAorCSAgIHB0ci0+bnVtX051bWJlcnMsIHB0ci0+ZXh0X051bWJlcnMsCisJICAgcHRyLT5udW1fU3RyaW5ncywgcHRyLT5leHRfU3RyaW5ncykpOworCisJVFIoVFJBQ0VfREFUQUJBU0UsICgiZXh0ZW5kOiBudW1fQm9vbGVhbnM6JWQiLCBwdHItPm51bV9Cb29sZWFucykpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE5DVVJTRVNfWE5BTUVTICovCisgICAgeworCVQoKCIuLi5kb25lIHJlYWRpbmcgdGVybWluZm8gYm9vbCAlZCBudW0gJWQgc3RyICVkIiwKKwkgICBib29sX2NvdW50LCBudW1fY291bnQsIHN0cl9jb3VudCkpOworI2lmIE5DVVJTRVNfWE5BTUVTCisJVFIoVFJBQ0VfREFUQUJBU0UsICgibm9ybWFsOiBudW1fQm9vbGVhbnM6JWQiLCBwdHItPm51bV9Cb29sZWFucykpOworI2VuZGlmCisgICAgfQorCisgICAgZm9yIChpID0gYm9vbF9jb3VudDsgaSA8IEJPT0xDT1VOVDsgaSsrKQorCXB0ci0+Qm9vbGVhbnNbaV0gPSBGQUxTRTsKKyAgICBmb3IgKGkgPSBudW1fY291bnQ7IGkgPCBOVU1DT1VOVDsgaSsrKQorCXB0ci0+TnVtYmVyc1tpXSA9IEFCU0VOVF9OVU1FUklDOworICAgIGZvciAoaSA9IHN0cl9jb3VudDsgaSA8IFNUUkNPVU5UOyBpKyspCisJcHRyLT5TdHJpbmdzW2ldID0gQUJTRU5UX1NUUklORzsKKworICAgIHJldHVybiAoVEdFVEVOVF9ZRVMpOworfQorCisvKgorICoJaW50CisgKglfbmNfcmVhZF9maWxlX2VudHJ5KGZpbGVuYW1lLCBwdHIpCisgKgorICoJUmVhZCB0aGUgY29tcGlsZWQgdGVybWluZm8gZW50cnkgaW4gdGhlIGdpdmVuIGZpbGUgaW50byB0aGUKKyAqCXN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB0ciwgYWxsb2NhdGluZyBzcGFjZSBmb3IgdGhlIHN0cmluZworICoJdGFibGUuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZWFkX2ZpbGVfZW50cnkoY29uc3QgY2hhciAqY29uc3QgZmlsZW5hbWUsIFRFUk1UWVBFICpwdHIpCisvKiByZXR1cm4gMSBpZiByZWFkLCAwIGlmIG5vdCBmb3VuZCBvciBnYXJibGVkICovCit7CisgICAgaW50IGNvZGUsIGZkID0gLTE7CisgICAgaW50IGxpbWl0OworICAgIGNoYXIgYnVmZmVyW01BWF9FTlRSWV9TSVpFICsgMV07CisKKyAgICBpZiAoX25jX2FjY2VzcyhmaWxlbmFtZSwgUl9PSykgPCAwCisJfHwgKGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSkpIDwgMCkgeworCVQoKCJjYW5ub3Qgb3BlbiB0ZXJtaW5mbyAlcyAoZXJybm89JWQpIiwgZmlsZW5hbWUsIGVycm5vKSk7CisJY29kZSA9IFRHRVRFTlRfTk87CisgICAgfSBlbHNlIHsKKwlpZiAoKGxpbWl0ID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpID4gMCkgeworCisJICAgIFQoKCJyZWFkIHRlcm1pbmZvICVzIiwgZmlsZW5hbWUpKTsKKwkgICAgaWYgKChjb2RlID0gX25jX3JlYWRfdGVybXR5cGUocHRyLCBidWZmZXIsIGxpbWl0KSkgPT0gVEdFVEVOVF9OTykgeworCQlfbmNfZnJlZV90ZXJtdHlwZShwdHIpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgY29kZSA9IFRHRVRFTlRfTk87CisJfQorCWNsb3NlKGZkKTsKKyAgICB9CisKKyAgICByZXR1cm4gKGNvZGUpOworfQorCisvKgorICogQnVpbGQgYSB0ZXJtaW5mbyBwYXRobmFtZSBhbmQgdHJ5IHRvIHJlYWQgdGhlIGRhdGEuICBSZXR1cm5zIFRHRVRFTlRfWUVTIG9uCisgKiBzdWNjZXNzLCBUR0VURU5UX05PIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19uY19yZWFkX3RpY19lbnRyeShjaGFyICpmaWxlbmFtZSwKKwkJICAgdW5zaWduZWQgbGltaXQsCisJCSAgIGNvbnN0IGNoYXIgKmNvbnN0IHBhdGgsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIFRFUk1UWVBFICpjb25zdCB0cCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gVEdFVEVOVF9OTzsKKworICAgIC8qCisgICAgICogSWYgd2UgYXJlIGxvb2tpbmcgaW4gYSBkaXJlY3RvcnksIGFzc3VtZSB0aGUgZW50cnkgaXMgYSBmaWxlIHVuZGVyIHRoYXQsCisgICAgICogYWNjb3JkaW5nIHRvIHRoZSBub3JtYWwgcnVsZXMuCisgICAgICoKKyAgICAgKiBGSVhNRSAtIGFkZCBjYXNlbGVzcy1maWxlbmFtZSBmaXh1cC4KKyAgICAgKi8KKyAgICBpZiAoX25jX2lzX2Rpcl9wYXRoKHBhdGgpKSB7CisJdW5zaWduZWQgbmVlZCA9IDQgKyBzdHJsZW4ocGF0aCkgKyBzdHJsZW4obmFtZSk7CisKKwlpZiAobmVlZCA8PSBsaW1pdCkgeworCSAgICAodm9pZCkgc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIgTEVBRl9GTVQgIi8lcyIsIHBhdGgsICpuYW1lLCBuYW1lKTsKKwkgICAgcmVzdWx0ID0gX25jX3JlYWRfZmlsZV9lbnRyeShmaWxlbmFtZSwgdHApOworCX0KKyAgICB9CisjaWYgVVNFX0hBU0hFRF9EQgorICAgIGVsc2UgeworCXN0YXRpYyBjb25zdCBjaGFyIHN1ZmZpeFtdID0gREJNX1NVRkZJWDsKKwlEQiAqY2FwZGJwOworCXVuc2lnbmVkIGxlbnMgPSBzaXplb2Yoc3VmZml4KSAtIDE7CisJdW5zaWduZWQgc2l6ZSA9IHN0cmxlbihwYXRoKTsKKwl1bnNpZ25lZCBuZWVkID0gbGVucyArIHNpemU7CisKKwlpZiAobmVlZCA8PSBsaW1pdCkgeworCSAgICBpZiAoc2l6ZSA+PSBsZW5zCisJCSYmICFzdHJjbXAocGF0aCArIHNpemUgLSBsZW5zLCBzdWZmaXgpKQorCQkodm9pZCkgc3RyY3B5KGZpbGVuYW1lLCBwYXRoKTsKKwkgICAgZWxzZQorCQkodm9pZCkgc3ByaW50ZihmaWxlbmFtZSwgIiVzJXMiLCBwYXRoLCBzdWZmaXgpOworCisJICAgIC8qCisJICAgICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gb3B0aW1pemUgdGhlIGRib3Blbi9jbG9zZSBhY3Rpdml0eSwgYXMKKwkgICAgICogZG9uZSBpbiB0aGUgY2dldGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgdGM9IGNsYXVzZXMuICBIb3dldmVyLAorCSAgICAgKiBzaW5jZSB3ZSBzdXBwb3J0IG11bHRpcGxlIGRhdGFiYXNlIGxvY2F0aW9ucywgd2UgY2Fubm90IGRvCisJICAgICAqIHRoYXQuCisJICAgICAqLworCSAgICBpZiAoKGNhcGRicCA9IF9uY19kYl9vcGVuKGZpbGVuYW1lLCBGQUxTRSkpICE9IDApIHsKKwkJREJUIGtleSwgZGF0YTsKKwkJaW50IHJlY2NudCA9IDA7CisJCWNoYXIgKnNhdmUgPSBzdHJkdXAobmFtZSk7CisKKwkJbWVtc2V0KCZrZXksIDAsIHNpemVvZihrZXkpKTsKKwkJa2V5LmRhdGEgPSBzYXZlOworCQlrZXkuc2l6ZSA9IHN0cmxlbihzYXZlKTsKKworCQkvKgorCQkgKiBUaGlzIGxvb2t1cCBjb3VsZCByZXR1cm4gdGVybWNhcCBkYXRhLCB3aGljaCB3ZSBkbyBub3Qgd2FudC4gCisJCSAqIFdlIGFyZSBsb29raW5nIGZvciBjb21waWxlZCAoYmluYXJ5KSB0ZXJtaW5mbyBkYXRhLgorCQkgKgorCQkgKiBjZ2V0ZW50IHVzZXMgYSB0d28tbGV2ZWwgbG9va3VwLiAgT24gdGhlIGZpcnN0IGl0IHVzZXMgdGhlCisJCSAqIGdpdmVuIG5hbWUgdG8gcmV0dXJuIGEgcmVjb3JkIGNvbnRhaW5pbmcgb25seSB0aGUgYWxpYXNlcworCQkgKiBmb3IgYW4gZW50cnkuICBPbiB0aGUgc2Vjb25kICh1c2luZyB0aGF0IGxpc3Qgb2YgYWxpYXNlcyBhcworCQkgKiBhIGtleSksIGl0IHJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLiAKKwkJICogV2UgZXhwZWN0IHNlY29uZCBsb29rdXAgdG8gcmV0dXJuIGRhdGEgYmVnaW5uaW5nIHdpdGggdGhlCisJCSAqIHNhbWUgc2V0IG9mIGFsaWFzZXMuCisJCSAqCisJCSAqIEZvciBjb21waWxlZCB0ZXJtaW5mbywgdGhlIGxpc3Qgb2YgYWxpYXNlcyBpbiB0aGUgc2Vjb25kCisJCSAqIGNhc2Ugd2lsbCBiZSBudWxsLXRlcm1pbmF0ZWQuICBBIHRlcm1jYXAgZW50cnkgd2lsbCBub3QgYmUsCisJCSAqIGFuZCB3aWxsIHJ1biBvbiBpbnRvIHRoZSBkZXNjcmlwdGlvbi4gIFNvIHdlIGNhbiBlYXNpbHkKKwkJICogZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIChzb3VyY2UvYmluYXJ5KSBieSBjaGVja2luZyB0aGUKKwkJICogbGVuZ3Rocy4KKwkJICovCisJCXdoaWxlIChfbmNfZGJfZ2V0KGNhcGRicCwgJmtleSwgJmRhdGEpID09IDApIHsKKwkJICAgIGludCB1c2VkID0gZGF0YS5zaXplIC0gMTsKKwkJICAgIGNoYXIgKmhhdmUgPSAoY2hhciAqKSBkYXRhLmRhdGE7CisKKwkJICAgIGlmICgqaGF2ZSsrID09IDApIHsKKwkJCWlmIChkYXRhLnNpemUgPiBrZXkuc2l6ZQorCQkJICAgICYmIElTX1RJQ19NQUdJQyhoYXZlKSkgeworCQkJICAgIHJlc3VsdCA9IF9uY19yZWFkX3Rlcm10eXBlKHRwLCBoYXZlLCB1c2VkKTsKKwkJCSAgICBpZiAocmVzdWx0ID09IFRHRVRFTlRfTk8pIHsKKwkJCQlfbmNfZnJlZV90ZXJtdHlwZSh0cCk7CisJCQkgICAgfQorCQkJfQorCQkJYnJlYWs7CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKiBKdXN0IGluIGNhc2Ugd2UgaGF2ZSBhIGNvcnJ1cHQgZGF0YWJhc2UsIGRvIG5vdCB3YXN0ZQorCQkgICAgICogdGltZSB3aXRoIGl0LgorCQkgICAgICovCisJCSAgICBpZiAoKytyZWNjbnQgPj0gMykKKwkJCWJyZWFrOworCisJCSAgICAvKgorCQkgICAgICogUHJlcGFyZSBmb3IgdGhlIHNlY29uZCBsZXZlbC4KKwkJICAgICAqLworCQkgICAga2V5LmRhdGEgPSBoYXZlOworCQkgICAga2V5LnNpemUgPSB1c2VkOworCQl9CisKKwkJX25jX2RiX2Nsb3NlKGNhcGRicCk7CisJCWZyZWUoc2F2ZSk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKiBVU0VfREFUQUJBU0UgKi8KKworLyoKKyAqCV9uY19yZWFkX2VudHJ5KGNoYXIgKm5hbWUsIGNoYXIgKmZpbGVuYW1lLCBURVJNVFlQRSAqdHApCisgKgorICoJRmluZCBhbmQgcmVhZCB0aGUgY29tcGlsZWQgZW50cnkgZm9yIGEgZ2l2ZW4gdGVybWluYWwgdHlwZSwKKyAqCWlmIGl0IGV4aXN0cy4gIFdlIHRha2UgcGFpbnMgaGVyZSB0byBtYWtlIHN1cmUgbm8gY29tYmluYXRpb24KKyAqCW9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGVybWluYWwgdHlwZSBuYW1lIGNhbiBiZSB1c2VkIHRvCisgKglvdmVycnVuIHRoZSBmaWxlIGJ1ZmZlci4KKyAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfcmVhZF9lbnRyeShjb25zdCBjaGFyICpjb25zdCBuYW1lLCBjaGFyICpjb25zdCBmaWxlbmFtZSwgVEVSTVRZUEUgKmNvbnN0IHRwKQoreworICAgIGludCBjb2RlID0gVEdFVEVOVF9OTzsKKworICAgIGlmIChzdHJsZW4obmFtZSkgPT0gMAorCXx8IHN0cmNtcChuYW1lLCAiLiIpID09IDAKKwl8fCBzdHJjbXAobmFtZSwgIi4uIikgPT0gMAorCXx8IF9uY19wYXRobGFzdChuYW1lKSAhPSAwCisJfHwgc3RyY2hyKG5hbWUsIE5DVVJTRVNfUEFUSFNFUCkgIT0gMCkgeworCVQoKCJpbGxlZ2FsIG9yIG1pc3NpbmcgZW50cnkgbmFtZSAnJXMnIiwgbmFtZSkpOworICAgIH0gZWxzZSB7CisjaWYgVVNFX0RBVEFCQVNFCisJREJESVJTIHN0YXRlID0gZGJkVElDOworCWludCBvZmZzZXQgPSAwOworCWNvbnN0IGNoYXIgKnBhdGg7CisKKwl3aGlsZSAoKHBhdGggPSBfbmNfbmV4dF9kYigmc3RhdGUsICZvZmZzZXQpKSAhPSAwKSB7CisJICAgIGNvZGUgPSBfbmNfcmVhZF90aWNfZW50cnkoZmlsZW5hbWUsIFBBVEhfTUFYLCBwYXRoLCBuYW1lLCB0cCk7CisJICAgIGlmIChjb2RlID09IFRHRVRFTlRfWUVTKSB7CisJCV9uY19sYXN0X2RiKCk7CisJCWJyZWFrOworCSAgICB9CisJfQorI2VuZGlmCisjaWYgVVNFX1RFUk1DQVAKKwlpZiAoY29kZSAhPSBUR0VURU5UX1lFUykgeworCSAgICBjb2RlID0gX25jX3JlYWRfdGVybWNhcF9lbnRyeShuYW1lLCB0cCk7CisJICAgIHNwcmludGYoZmlsZW5hbWUsICIlLipzIiwgUEFUSF9NQVggLSAxLCBfbmNfZ2V0X3NvdXJjZSgpKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIGNvZGU7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL3JlYWRfdGVybWNhcC5jIGIvbmN1cnNlcy90aW5mby9yZWFkX3Rlcm1jYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRkMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9yZWFkX3Rlcm1jYXAuYwpAQCAtMCwwICsxLDExNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRlcm1jYXAgY29tcGF0aWJpbGl0eSBzdXBwb3J0CisgKgorICogSWYgeW91ciBPUyBpbnRlZ3JhdG9yIGRpZG4ndCBpbnN0YWxsIGEgdGVybWluZm8gZGF0YWJhc2UsIHlvdSBjYW4gY2FsbAorICogX25jX3JlYWRfdGVybWNhcF9lbnRyeSgpIHRvIHN1cHBvcnQgcmVhZGluZyBhbmQgdHJhbnNsYXRpbmcgY2FwYWJpbGl0aWVzCisgKiBmcm9tIHRoZSBzeXN0ZW0gdGVybWNhcCBmaWxlLiAgVGhpcyBpcyBhIGtsdWRnZTsgaXQgd2lsbCBidWxrIHVwIGFuZCBzbG93CisgKiBkb3duIGV2ZXJ5IHByb2dyYW0gdGhhdCB1c2VzIG5jdXJzZXMsIGFuZCB0cmFuc2xhdGVkIHRlcm1jYXAgZW50cmllcyBjYW5ub3QKKyAqIHVzZSBmdWxsIHRlcm1pbmZvIGNhcGFiaWxpdGllcy4gIERvbid0IHVzZSBpdCB1bmxlc3MgeW91IGFic29sdXRlbHkgaGF2ZSB0bzsKKyAqIGluc3RlYWQsIGdldCB5b3VyIHN5c3RlbSBwZW9wbGUgdG8gcnVuIHRpYygxKSBmcm9tIHJvb3Qgb24gdGhlIHRlcm1pbmZvCisgKiBtYXN0ZXIgaW5jbHVkZWQgd2l0aCBuY3Vyc2VzIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIGEgdGVybWluZm8gZGF0YWJhc2UuCisgKgorICogSWYgVVNFX0dFVENBUCBpcyBlbmFibGVkLCB3ZSB1c2Ugd2hhdCBpcyBlZmZlY3RpdmVseSBhIGNvcHkgb2YgdGhlIDQuNEJTRAorICogZ2V0Y2FwIGNvZGUgdG8gZmV0Y2ggZW50cmllcy4gIFRoZXJlIGFyZSBkaXNhZHZhbnRhZ2VzIHRvIHRoaXM7IG1haW5seSB0aGF0CisgKiBnZXRjYXAoMykgZG9lcyBpdHMgb3duIHJlc29sdXRpb24sIG1lYW5pbmcgdGhhdCBlbnRyaWVzIHJlYWQgaW4gaW4gdGhpcyB3YXkKKyAqIGNhbid0IHJlZmVyZW5jZSB0aGUgdGVybWluZm8gdHJlZS4gIFRoZSBvbmx5IHRoaW5nIGl0IGJ1eXMgaXMgZmFzdGVyIHN0YXJ0dXAKKyAqIHRpbWUsIGdldGNhcCgzKSBpcyBtdWNoIGZhc3RlciB0aGFuIG91ciB0aWMgcGFyc2VyLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHJlYWRfdGVybWNhcC5jLHYgMS43MSAyMDA2LzA3LzI5IDEyOjA2OjUxIHRvbSBFeHAgJCIpCisKKyNpZiAhUFVSRV9URVJNSU5GTworCisjZGVmaW5lIFRDX1NVQ0NFU1MgICAgIDAKKyNkZWZpbmUgVENfTk9UX0ZPVU5EICAtMQorI2RlZmluZSBUQ19TWVNfRVJSICAgIC0yCisjZGVmaW5lIFRDX1JFRl9MT09QICAgLTMKKyNkZWZpbmUgVENfVU5SRVNPTFZFRCAtNAkvKiB0aGlzIGlzIG5vdCByZXR1cm5lZCBieSBCU0QgY2dldGVudCAqLworCitzdGF0aWMgTkNVUlNFU19DT05TVCBjaGFyICoKK2dldF90ZXJtcGF0aCh2b2lkKQoreworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqcmVzdWx0OworCisgICAgaWYgKCF1c2VfdGVybWluZm9fdmFycygpIHx8IChyZXN1bHQgPSBnZXRlbnYoIlRFUk1QQVRIIikpID09IDApCisJcmVzdWx0ID0gVEVSTVBBVEg7CisgICAgVCgoIlRFUk1QQVRIIGlzICVzIiwgcmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIFVTRV9HRVRDQVAKKworI2lmIEhBVkVfQlNEX0NHRVRFTlQKKyNkZWZpbmUgX25jX2NnZXRjYXAgICBjZ2V0Y2FwCisjZGVmaW5lIF9uY19jZ2V0ZW50KGJ1Ziwgb2xpbmUsIGRiX2FycmF5LCBuYW1lKSBjZ2V0ZW50KGJ1ZiwgZGJfYXJyYXksIG5hbWUpCisjZGVmaW5lIF9uY19jZ2V0bWF0Y2ggY2dldG1hdGNoCisjZGVmaW5lIF9uY19jZ2V0c2V0ICAgY2dldHNldAorI2Vsc2UKK3N0YXRpYyBpbnQgX25jX2NnZXRtYXRjaChjaGFyICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IF9uY19nZXRlbnQoY2hhciAqKiwgdW5zaWduZWQgKiwgaW50ICosIGludCwgY2hhciAqKiwgaW50LCBjb25zdCBjaGFyCisJCSAgICAgICosIGludCwgY2hhciAqKTsKK3N0YXRpYyBpbnQgX25jX25mY21wKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENhc2V5IExlZWRvbSBvZiBMYXdyZW5jZSBMaXZlcm1vcmUgTmF0aW9uYWwgTGFib3JhdG9yeS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyogc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWdldGNhcC5jCTguMyAoQmVya2VsZXkpIDMvMjUvOTQiOyAqLworCisjZGVmaW5lCUJGUkFHCQkxMDI0CisjZGVmaW5lCUJTSVpFCQkxMDI0CisjZGVmaW5lCU1BWF9SRUNVUlNJT04JMzIJLyogbWF4aW11bSBnZXRlbnQgcmVjdXJzaW9uICovCisKK3N0YXRpYyBzaXplX3QgdG9wcmVjbGVuOwkvKiB0b3ByZWMgbGVuZ3RoICovCitzdGF0aWMgY2hhciAqdG9wcmVjOwkJLyogQWRkaXRpb25hbCByZWNvcmQgc3BlY2lmaWVkIGJ5IGNnZXRzZXQoKSAqLworc3RhdGljIGludCBnb3R0b3ByZWM7CQkvKiBGbGFnIGluZGljYXRpbmcgcmV0cmlldmFsIG9mIHRvcHJlY29yZCAqLworCisvKgorICogQ2dldHNldCgpIGFsbG93cyB0aGUgYWRkaXRpb24gb2YgYSB1c2VyIHNwZWNpZmllZCBidWZmZXIgdG8gYmUgYWRkZWQgdG8gdGhlCisgKiBkYXRhYmFzZSBhcnJheSwgaW4gZWZmZWN0ICJwdXNoaW5nIiB0aGUgYnVmZmVyIG9uIHRvcCBvZiB0aGUgdmlydHVhbAorICogZGF0YWJhc2UuICAwIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19uY19jZ2V0c2V0KGNvbnN0IGNoYXIgKmVudCkKK3sKKyAgICBpZiAoZW50ID09IDApIHsKKwlGcmVlSWZOZWVkZWQodG9wcmVjKTsKKwl0b3ByZWMgPSAwOworCXRvcHJlY2xlbiA9IDA7CisJcmV0dXJuICgwKTsKKyAgICB9CisgICAgdG9wcmVjbGVuID0gc3RybGVuKGVudCk7CisgICAgaWYgKCh0b3ByZWMgPSB0eXBlTWFsbG9jKGNoYXIsIHRvcHJlY2xlbiArIDEpKSA9PSAwKSB7CisJZXJybm8gPSBFTk9NRU07CisJcmV0dXJuICgtMSk7CisgICAgfQorICAgIGdvdHRvcHJlYyA9IDA7CisgICAgKHZvaWQpIHN0cmNweSh0b3ByZWMsIGVudCk7CisgICAgcmV0dXJuICgwKTsKK30KKworLyoKKyAqIENnZXRjYXAgc2VhcmNoZXMgdGhlIGNhcGFiaWxpdHkgcmVjb3JkIGJ1ZiBmb3IgdGhlIGNhcGFiaWxpdHkgY2FwIHdpdGggdHlwZQorICogYHR5cGUnLiAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiBjYXAgaXMgcmV0dXJuZWQgb24gc3VjY2VzcywgMCBpZiB0aGUKKyAqIHJlcXVlc3RlZCBjYXBhYmlsaXR5IGNvdWxkbid0IGJlIGZvdW5kLgorICoKKyAqIFNwZWNpZnlpbmcgYSB0eXBlIG9mICc6JyBtZWFucyB0aGF0IG5vdGhpbmcgc2hvdWxkIGZvbGxvdyBjYXAgKDpjYXA6KS4gIEluCisgKiB0aGlzIGNhc2UgYSBwb2ludGVyIHRvIHRoZSB0ZXJtaW5hdGluZyAnOicgb3IgTlVMIHdpbGwgYmUgcmV0dXJuZWQgaWYgY2FwIGlzCisgKiBmb3VuZC4KKyAqCisgKiBJZiAoY2FwLCAnQCcpIG9yIChjYXAsIHRlcm1pbmF0b3IsICdAJykgaXMgZm91bmQgYmVmb3JlIChjYXAsIHRlcm1pbmF0b3IpCisgKiByZXR1cm4gMC4KKyAqLworc3RhdGljIGNoYXIgKgorX25jX2NnZXRjYXAoY2hhciAqYnVmLCBjb25zdCBjaGFyICpjYXAsIGludCB0eXBlKQoreworICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKmNwOworICAgIHJlZ2lzdGVyIGNoYXIgKmJwOworCisgICAgYnAgPSBidWY7CisgICAgZm9yICg7OykgeworCS8qCisJICogU2tpcCBwYXN0IHRoZSBjdXJyZW50IGNhcGFiaWxpdHkgZmllbGQgLSBpdCdzIGVpdGhlciB0aGUKKwkgKiBuYW1lIGZpZWxkIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgb3IKKwkgKiB0aGUgcmVtYWluZGVyIG9mIGEgZmllbGQgd2hvc2UgbmFtZSBmYWlsZWQgdG8gbWF0Y2ggY2FwLgorCSAqLworCWZvciAoOzspIHsKKwkgICAgaWYgKCpicCA9PSAnXDAnKQorCQlyZXR1cm4gKDApOworCSAgICBlbHNlIGlmICgqYnArKyA9PSAnOicpCisJCWJyZWFrOworCX0KKworCS8qCisJICogVHJ5IHRvIG1hdGNoIChjYXAsIHR5cGUpIGluIGJ1Zi4KKwkgKi8KKwlmb3IgKGNwID0gY2FwOyAqY3AgPT0gKmJwICYmICpicCAhPSAnXDAnOyBjcCsrLCBicCsrKQorCSAgICBjb250aW51ZTsKKwlpZiAoKmNwICE9ICdcMCcpCisJICAgIGNvbnRpbnVlOworCWlmICgqYnAgPT0gJ0AnKQorCSAgICByZXR1cm4gKDApOworCWlmICh0eXBlID09ICc6JykgeworCSAgICBpZiAoKmJwICE9ICdcMCcgJiYgKmJwICE9ICc6JykKKwkJY29udGludWU7CisJICAgIHJldHVybiAoYnApOworCX0KKwlpZiAoKmJwICE9IHR5cGUpCisJICAgIGNvbnRpbnVlOworCWJwKys7CisJcmV0dXJuICgqYnAgPT0gJ0AnID8gMCA6IGJwKTsKKyAgICB9CisgICAgLyogTk9UUkVBQ0hFRCAqLworfQorCisvKgorICogQ2dldGVudCBleHRyYWN0cyB0aGUgY2FwYWJpbGl0eSByZWNvcmQgbmFtZSBmcm9tIHRoZSBOVUxMIHRlcm1pbmF0ZWQgZmlsZQorICogYXJyYXkgZGJfYXJyYXkgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgbWFsbG9jJ2QgY29weSBvZiBpdCBpbiBidWYuICBCdWYKKyAqIG11c3QgYmUgcmV0YWluZWQgdGhyb3VnaCBhbGwgc3Vic2VxdWVudCBjYWxscyB0byBjZ2V0Y2FwLCBjZ2V0bnVtLCBjZ2V0ZmxhZywKKyAqIGFuZCBjZ2V0c3RyLCBidXQgbWF5IHRoZW4gYmUgZnJlZWQuCisgKgorICogUmV0dXJuczoKKyAqCisgKiBwb3NpdGl2ZSAjICAgIG9uIHN1Y2Nlc3MgKGkuZS4sIHRoZSBpbmRleCBpbiBkYl9hcnJheSkKKyAqIFRDX05PVF9GT1VORCAgaWYgdGhlIHJlcXVlc3RlZCByZWNvcmQgY291bGRuJ3QgYmUgZm91bmQKKyAqIFRDX1NZU19FUlIgICAgaWYgYSBzeXN0ZW0gZXJyb3Igd2FzIGVuY291bnRlcmVkIChlLmcuLGNvdWxkbid0IG9wZW4gYSBmaWxlKQorICogVENfUkVGX0xPT1AgICBpZiBhIHBvdGVudGlhbCByZWZlcmVuY2UgbG9vcCBpcyBkZXRlY3RlZAorICogVENfVU5SRVNPTFZFRCBpZiB3ZSBoYWQgdG9vIG1hbnkgcmVjdXJyZW5jZXMgdG8gcmVzb2x2ZQorICovCitzdGF0aWMgaW50CitfbmNfY2dldGVudChjaGFyICoqYnVmLCBpbnQgKm9saW5lLCBjaGFyICoqZGJfYXJyYXksIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgdW5zaWduZWQgZHVtbXk7CisKKyAgICByZXR1cm4gKF9uY19nZXRlbnQoYnVmLCAmZHVtbXksIG9saW5lLCAwLCBkYl9hcnJheSwgLTEsIG5hbWUsIDAsIDApKTsKK30KKworLyoKKyAqIEdldGVudCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgb2YgY2dldGVudC4gIElmIGZkIGlzIG5vbi1uZWdhdGl2ZSwKKyAqICpkYl9hcnJheSBoYXMgYWxyZWFkeSBiZWVuIG9wZW5lZCBhbmQgZmQgaXMgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiAgV2UKKyAqIGRvIHRoaXMgdG8gc2F2ZSB0aW1lIGFuZCBhdm9pZCB1c2luZyB1cCBmaWxlIGRlc2NyaXB0b3JzIGZvciB0Yz0KKyAqIHJlY3Vyc2lvbnMuCisgKgorICogR2V0ZW50IHJldHVybnMgdGhlIHNhbWUgc3VjY2Vzcy9mYWlsdXJlIGNvZGVzIGFzIGNnZXRlbnQuICBPbiBzdWNjZXNzLCBhCisgKiBwb2ludGVyIHRvIGEgbWFsbG9jJ2QgY2FwYWJpbGl0eSByZWNvcmQgd2l0aCBhbGwgdGM9IGNhcGFiaWxpdGllcyBmdWxseQorICogZXhwYW5kZWQgYW5kIGl0cyBsZW5ndGggKG5vdCBpbmNsdWRpbmcgdHJhaWxpbmcgQVNDSUkgTlVMKSBhcmUgbGVmdCBpbgorICogKmNhcCBhbmQgKmxlbi4KKyAqCisgKiBCYXNpYyBhbGdvcml0aG06CisgKgkrIEFsbG9jYXRlIG1lbW9yeSBpbmNyZW1lbnRhbGx5IGFzIG5lZWRlZCBpbiBjaHVua3Mgb2Ygc2l6ZSBCRlJBRworICoJICBmb3IgY2FwYWJpbGl0eSBidWZmZXIuCisgKgkrIFJlY3Vyc2UgZm9yIGVhY2ggdGM9bmFtZSBhbmQgaW50ZXJwb2xhdGUgcmVzdWx0LiAgU3RvcCB3aGVuIGFsbAorICoJICBuYW1lcyBpbnRlcnBvbGF0ZWQsIGEgbmFtZSBjYW4ndCBiZSBmb3VuZCwgb3IgZGVwdGggZXhjZWVkcworICoJICBNQVhfUkVDVVJTSU9OLgorICovCisjZGVmaW5lIERPQUxMT0Moc2l6ZSkgdHlwZVJlYWxsb2MoY2hhciwgc2l6ZSwgcmVjb3JkKQorc3RhdGljIGludAorX25jX2dldGVudCgKKwkgICAgICBjaGFyICoqY2FwLAkvKiB0ZXJtY2FwLWNvbnRlbnQgKi8KKwkgICAgICB1bnNpZ25lZCAqbGVuLAkvKiBsZW5ndGgsIG5lZWRlZCBmb3IgcmVjdXJzaW9uICovCisJICAgICAgaW50ICpiZWdpbm5pbmcsCS8qIGxpbmUtbnVtYmVyIGF0IG1hdGNoICovCisJICAgICAgaW50IGluX2FycmF5LAkvKiBpbmRleCBpbiAnZGJfYXJyYXlbXSAqLworCSAgICAgIGNoYXIgKipkYl9hcnJheSwJLyogbGlzdCBvZiBmaWxlcyB0byBzZWFyY2ggKi8KKwkgICAgICBpbnQgZmQsCisJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkgICAgICBpbnQgZGVwdGgsCisJICAgICAgY2hhciAqbmZpZWxkKQoreworICAgIHJlZ2lzdGVyIGNoYXIgKnJfZW5kLCAqcnA7CisgICAgaW50IG15ZmQgPSBGQUxTRTsKKyAgICBjaGFyICpyZWNvcmQgPSAwOworICAgIGludCB0Y19ub3RfcmVzb2x2ZWQ7CisgICAgaW50IGN1cnJlbnQ7CisgICAgaW50IGxpbmVubzsKKworICAgIC8qCisgICAgICogUmV0dXJuIHdpdGggYGBsb29wIGRldGVjdGVkJycgZXJyb3IgaWYgd2UndmUgcmVjdXJyZWQgbW9yZSB0aGFuCisgICAgICogTUFYX1JFQ1VSU0lPTiB0aW1lcy4KKyAgICAgKi8KKyAgICBpZiAoZGVwdGggPiBNQVhfUkVDVVJTSU9OKQorCXJldHVybiAoVENfUkVGX0xPT1ApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB3ZSBoYXZlIGEgdG9wIHJlY29yZCBmcm9tIGNnZXRzZXQoKS4KKyAgICAgKi8KKyAgICBpZiAoZGVwdGggPT0gMCAmJiB0b3ByZWMgIT0gMCAmJiBfbmNfY2dldG1hdGNoKHRvcHJlYywgbmFtZSkgPT0gMCkgeworCWlmICgocmVjb3JkID0gRE9BTExPQyh0b3ByZWNsZW4gKyBCRlJBRykpID09IDApIHsKKwkgICAgZXJybm8gPSBFTk9NRU07CisJICAgIHJldHVybiAoVENfU1lTX0VSUik7CisJfQorCSh2b2lkKSBzdHJjcHkocmVjb3JkLCB0b3ByZWMpOworCXJwID0gcmVjb3JkICsgdG9wcmVjbGVuICsgMTsKKwlyX2VuZCA9IHJwICsgQkZSQUc7CisJY3VycmVudCA9IGluX2FycmF5OworICAgIH0gZWxzZSB7CisJaW50IGZvdW5kaXQ7CisKKwkvKgorCSAqIEFsbG9jYXRlIGZpcnN0IGNodW5rIG9mIG1lbW9yeS4KKwkgKi8KKwlpZiAoKHJlY29yZCA9IERPQUxMT0MoQkZSQUcpKSA9PSAwKSB7CisJICAgIGVycm5vID0gRU5PTUVNOworCSAgICByZXR1cm4gKFRDX1NZU19FUlIpOworCX0KKwlycCA9IHJfZW5kID0gcmVjb3JkICsgQkZSQUc7CisJZm91bmRpdCA9IEZBTFNFOworCisJLyoKKwkgKiBMb29wIHRocm91Z2ggZGF0YWJhc2UgYXJyYXkgdW50aWwgZmluZGluZyB0aGUgcmVjb3JkLgorCSAqLworCWZvciAoY3VycmVudCA9IGluX2FycmF5OyBkYl9hcnJheVtjdXJyZW50XSAhPSAwOyBjdXJyZW50KyspIHsKKwkgICAgaW50IGVvZiA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIE9wZW4gZGF0YWJhc2UgaWYgbm90IGFscmVhZHkgb3Blbi4KKwkgICAgICovCisJICAgIGlmIChmZCA+PSAwKSB7CisJCSh2b2lkKSBsc2VlayhmZCwgKG9mZl90KSAwLCBTRUVLX1NFVCk7CisJICAgIH0gZWxzZSBpZiAoKF9uY19hY2Nlc3MoZGJfYXJyYXlbY3VycmVudF0sIFJfT0spIDwgMCkKKwkJICAgICAgIHx8IChmZCA9IG9wZW4oZGJfYXJyYXlbY3VycmVudF0sIE9fUkRPTkxZLCAwKSkgPCAwKSB7CisJCS8qIE5vIGVycm9yIG9uIHVuZm91bmQgZmlsZS4gKi8KKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJICAgIGNvbnRpbnVlOworCQlmcmVlKHJlY29yZCk7CisJCXJldHVybiAoVENfU1lTX0VSUik7CisJICAgIH0gZWxzZSB7CisJCW15ZmQgPSBUUlVFOworCSAgICB9CisJICAgIGxpbmVubyA9IDA7CisKKwkgICAgLyoKKwkgICAgICogRmluZCB0aGUgcmVxdWVzdGVkIGNhcGFiaWxpdHkgcmVjb3JkIC4uLgorCSAgICAgKi8KKwkgICAgeworCQljaGFyIGJ1ZlsyMDQ4XTsKKwkJcmVnaXN0ZXIgY2hhciAqYl9lbmQgPSBidWY7CisJCXJlZ2lzdGVyIGNoYXIgKmJwID0gYnVmOworCQlyZWdpc3RlciBpbnQgYzsKKworCQkvKgorCQkgKiBMb29wIGludmFyaWFudHM6CisJCSAqICAgICAgVGhlcmUgaXMgYWx3YXlzIHJvb20gZm9yIG9uZSBtb3JlIGNoYXJhY3RlciBpbiByZWNvcmQuCisJCSAqICAgICAgUl9lbmQgYWx3YXlzIHBvaW50cyBqdXN0IHBhc3QgZW5kIG9mIHJlY29yZC4KKwkJICogICAgICBScCBhbHdheXMgcG9pbnRzIGp1c3QgcGFzdCBsYXN0IGNoYXJhY3RlciBpbiByZWNvcmQuCisJCSAqICAgICAgQl9lbmQgYWx3YXlzIHBvaW50cyBqdXN0IHBhc3QgbGFzdCBjaGFyYWN0ZXIgaW4gYnVmLgorCQkgKiAgICAgIEJwIGFsd2F5cyBwb2ludHMgYXQgbmV4dCBjaGFyYWN0ZXIgaW4gYnVmLgorCQkgKi8KKworCQlmb3IgKDs7KSB7CisJCSAgICBpbnQgZmlyc3QgPSBsaW5lbm8gKyAxOworCisJCSAgICAvKgorCQkgICAgICogUmVhZCBpbiBhIGxpbmUgaW1wbGVtZW50aW5nIChcLCBuZXdsaW5lKQorCQkgICAgICogbGluZSBjb250aW51YXRpb24uCisJCSAgICAgKi8KKwkJICAgIHJwID0gcmVjb3JkOworCQkgICAgZm9yICg7OykgeworCQkJaWYgKGJwID49IGJfZW5kKSB7CisJCQkgICAgaW50IG47CisKKwkJCSAgICBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CisJCQkgICAgaWYgKG4gPD0gMCkgeworCQkJCWlmIChteWZkKQorCQkJCSAgICAodm9pZCkgY2xvc2UoZmQpOworCQkJCWlmIChuIDwgMCkgeworCQkJCSAgICBmcmVlKHJlY29yZCk7CisJCQkJICAgIHJldHVybiAoVENfU1lTX0VSUik7CisJCQkJfQorCQkJCWZkID0gLTE7CisJCQkJZW9mID0gVFJVRTsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAgYl9lbmQgPSBidWYgKyBuOworCQkJICAgIGJwID0gYnVmOworCQkJfQorCisJCQljID0gKmJwKys7CisJCQlpZiAoYyA9PSAnXG4nKSB7CisJCQkgICAgbGluZW5vKys7CisJCQkgICAgaWYgKHJwID09IHJlY29yZCB8fCAqKHJwIC0gMSkgIT0gJ1xcJykKKwkJCQlicmVhazsKKwkJCX0KKwkJCSpycCsrID0gYzsKKworCQkJLyoKKwkJCSAqIEVuZm9yY2UgbG9vcCBpbnZhcmlhbnQ6IGlmIG5vIHJvb20KKwkJCSAqIGxlZnQgaW4gcmVjb3JkIGJ1ZmZlciwgdHJ5IHRvIGdldAorCQkJICogc29tZSBtb3JlLgorCQkJICovCisJCQlpZiAocnAgPj0gcl9lbmQpIHsKKwkJCSAgICB1bnNpZ25lZCBwb3M7CisJCQkgICAgc2l6ZV90IG5ld3NpemU7CisKKwkJCSAgICBwb3MgPSBycCAtIHJlY29yZDsKKwkJCSAgICBuZXdzaXplID0gcl9lbmQgLSByZWNvcmQgKyBCRlJBRzsKKwkJCSAgICByZWNvcmQgPSBET0FMTE9DKG5ld3NpemUpOworCQkJICAgIGlmIChyZWNvcmQgPT0gMCkgeworCQkJCWlmIChteWZkKQorCQkJCSAgICAodm9pZCkgY2xvc2UoZmQpOworCQkJCWVycm5vID0gRU5PTUVNOworCQkJCXJldHVybiAoVENfU1lTX0VSUik7CisJCQkgICAgfQorCQkJICAgIHJfZW5kID0gcmVjb3JkICsgbmV3c2l6ZTsKKwkJCSAgICBycCA9IHJlY29yZCArIHBvczsKKwkJCX0KKwkJICAgIH0KKwkJICAgIC8qIGxvb3AgaW52YXJpYW50IGxldHMgdXMgZG8gdGhpcyAqLworCQkgICAgKnJwKysgPSAnXDAnOworCisJCSAgICAvKgorCQkgICAgICogSWYgZW5jb3VudGVyZWQgZW9mIGNoZWNrIG5leHQgZmlsZS4KKwkJICAgICAqLworCQkgICAgaWYgKGVvZikKKwkJCWJyZWFrOworCisJCSAgICAvKgorCQkgICAgICogVG9zcyBibGFuayBsaW5lcyBhbmQgY29tbWVudHMuCisJCSAgICAgKi8KKwkJICAgIGlmICgqcmVjb3JkID09ICdcMCcgfHwgKnJlY29yZCA9PSAnIycpCisJCQljb250aW51ZTsKKworCQkgICAgLyoKKwkJICAgICAqIFNlZSBpZiB0aGlzIGlzIHRoZSByZWNvcmQgd2Ugd2FudCAuLi4KKwkJICAgICAqLworCQkgICAgaWYgKF9uY19jZ2V0bWF0Y2gocmVjb3JkLCBuYW1lKSA9PSAwCisJCQkmJiAobmZpZWxkID09IDAKKwkJCSAgICB8fCAhX25jX25mY21wKG5maWVsZCwgcmVjb3JkKSkpIHsKKwkJCWZvdW5kaXQgPSBUUlVFOworCQkJKmJlZ2lubmluZyA9IGZpcnN0OworCQkJYnJlYWs7CS8qIGZvdW5kIGl0ISAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKGZvdW5kaXQpCisJCWJyZWFrOworCX0KKworCWlmICghZm91bmRpdCkKKwkgICAgcmV0dXJuIChUQ19OT1RfRk9VTkQpOworICAgIH0KKworICAgIC8qCisgICAgICogR290IHRoZSBjYXBhYmlsaXR5IHJlY29yZCwgYnV0IG5vdyB3ZSBoYXZlIHRvIGV4cGFuZCBhbGwgdGM9bmFtZQorICAgICAqIHJlZmVyZW5jZXMgaW4gaXQgLi4uCisgICAgICovCisgICAgeworCXJlZ2lzdGVyIGNoYXIgKm5ld2ljYXAsICpzOworCXJlZ2lzdGVyIGludCBuZXdpbGVuOworCXVuc2lnbmVkIGlsZW47CisJaW50IGRpZmYsIGlyZXQsIHRjbGVuLCBvbGluZTsKKwljaGFyICppY2FwLCAqc2NhbiwgKnRjLCAqdGNzdGFydCwgKnRjZW5kOworCisJLyoKKwkgKiBMb29wIGludmFyaWFudHM6CisJICogICAgICBUaGVyZSBpcyByb29tIGZvciBvbmUgbW9yZSBjaGFyYWN0ZXIgaW4gcmVjb3JkLgorCSAqICAgICAgUl9lbmQgcG9pbnRzIGp1c3QgcGFzdCBlbmQgb2YgcmVjb3JkLgorCSAqICAgICAgUnAgcG9pbnRzIGp1c3QgcGFzdCBsYXN0IGNoYXJhY3RlciBpbiByZWNvcmQuCisJICogICAgICBTY2FuIHBvaW50cyBhdCByZW1haW5kZXIgb2YgcmVjb3JkIHRoYXQgbmVlZHMgdG8gYmUKKwkgKiAgICAgIHNjYW5uZWQgZm9yIHRjPW5hbWUgY29uc3RydWN0cy4KKwkgKi8KKwlzY2FuID0gcmVjb3JkOworCXRjX25vdF9yZXNvbHZlZCA9IEZBTFNFOworCWZvciAoOzspIHsKKwkgICAgaWYgKCh0YyA9IF9uY19jZ2V0Y2FwKHNjYW4sICJ0YyIsICc9JykpID09IDApCisJCWJyZWFrOworCisJICAgIC8qCisJICAgICAqIEZpbmQgZW5kIG9mIHRjPW5hbWUgYW5kIHN0b21wIG9uIHRoZSB0cmFpbGluZyBgOicKKwkgICAgICogKGlmIHByZXNlbnQpIHNvIHdlIGNhbiB1c2UgaXQgdG8gY2FsbCBvdXJzZWx2ZXMuCisJICAgICAqLworCSAgICBzID0gdGM7CisJICAgIHdoaWxlICgqcyAhPSAnXDAnKSB7CisJCWlmICgqcysrID09ICc6JykgeworCQkgICAgKihzIC0gMSkgPSAnXDAnOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICB0Y3N0YXJ0ID0gdGMgLSAzOworCSAgICB0Y2xlbiA9IHMgLSB0Y3N0YXJ0OworCSAgICB0Y2VuZCA9IHM7CisKKwkgICAgaXJldCA9IF9uY19nZXRlbnQoJmljYXAsICZpbGVuLCAmb2xpbmUsIGN1cnJlbnQsIGRiX2FycmF5LCBmZCwKKwkJCSAgICAgIHRjLCBkZXB0aCArIDEsIDApOworCSAgICBuZXdpY2FwID0gaWNhcDsJLyogUHV0IGludG8gYSByZWdpc3Rlci4gKi8KKwkgICAgbmV3aWxlbiA9IGlsZW47CisJICAgIGlmIChpcmV0ICE9IFRDX1NVQ0NFU1MpIHsKKwkJLyogYW4gZXJyb3IgKi8KKwkJaWYgKGlyZXQgPCBUQ19OT1RfRk9VTkQpIHsKKwkJICAgIGlmIChteWZkKQorCQkJKHZvaWQpIGNsb3NlKGZkKTsKKwkJICAgIGZyZWUocmVjb3JkKTsKKwkJICAgIHJldHVybiAoaXJldCk7CisJCX0KKwkJaWYgKGlyZXQgPT0gVENfVU5SRVNPTFZFRCkKKwkJICAgIHRjX25vdF9yZXNvbHZlZCA9IFRSVUU7CisJCS8qIGNvdWxkbid0IHJlc29sdmUgdGMgKi8KKwkJaWYgKGlyZXQgPT0gVENfTk9UX0ZPVU5EKSB7CisJCSAgICAqKHMgLSAxKSA9ICc6JzsKKwkJICAgIHNjYW4gPSBzIC0gMTsKKwkJICAgIHRjX25vdF9yZXNvbHZlZCA9IFRSVUU7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisKKwkgICAgLyogbm90IGludGVyZXN0ZWQgaW4gbmFtZSBmaWVsZCBvZiB0YydlZCByZWNvcmQgKi8KKwkgICAgcyA9IG5ld2ljYXA7CisJICAgIHdoaWxlICgqcyAhPSAnXDAnICYmICpzKysgIT0gJzonKSA7CisJICAgIG5ld2lsZW4gLT0gcyAtIG5ld2ljYXA7CisJICAgIG5ld2ljYXAgPSBzOworCisJICAgIC8qIG1ha2Ugc3VyZSBpbnRlcnBvbGF0ZWQgcmVjb3JkIGlzIGA6Jy10ZXJtaW5hdGVkICovCisJICAgIHMgKz0gbmV3aWxlbjsKKwkgICAgaWYgKCoocyAtIDEpICE9ICc6JykgeworCQkqcyA9ICc6JzsJLyogb3ZlcndyaXRlIE5VTCB3aXRoIDogKi8KKwkJbmV3aWxlbisrOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIHJvb20gdG8gaW5zZXJ0IHRoZQorCSAgICAgKiBuZXcgcmVjb3JkLgorCSAgICAgKi8KKwkgICAgZGlmZiA9IG5ld2lsZW4gLSB0Y2xlbjsKKwkgICAgaWYgKGRpZmYgPj0gcl9lbmQgLSBycCkgeworCQl1bnNpZ25lZCBwb3MsIHRjcG9zLCB0Y3Bvc2VuZDsKKwkJc2l6ZV90IG5ld3NpemU7CisKKwkJcG9zID0gcnAgLSByZWNvcmQ7CisJCW5ld3NpemUgPSByX2VuZCAtIHJlY29yZCArIGRpZmYgKyBCRlJBRzsKKwkJdGNwb3MgPSB0Y3N0YXJ0IC0gcmVjb3JkOworCQl0Y3Bvc2VuZCA9IHRjZW5kIC0gcmVjb3JkOworCQlyZWNvcmQgPSBET0FMTE9DKG5ld3NpemUpOworCQlpZiAocmVjb3JkID09IDApIHsKKwkJICAgIGlmIChteWZkKQorCQkJKHZvaWQpIGNsb3NlKGZkKTsKKwkJICAgIGZyZWUoaWNhcCk7CisJCSAgICBlcnJubyA9IEVOT01FTTsKKwkJICAgIHJldHVybiAoVENfU1lTX0VSUik7CisJCX0KKwkJcl9lbmQgPSByZWNvcmQgKyBuZXdzaXplOworCQlycCA9IHJlY29yZCArIHBvczsKKwkJdGNzdGFydCA9IHJlY29yZCArIHRjcG9zOworCQl0Y2VuZCA9IHJlY29yZCArIHRjcG9zZW5kOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogSW5zZXJ0IHRjJ2VkIHJlY29yZCBpbnRvIG91ciByZWNvcmQuCisJICAgICAqLworCSAgICBzID0gdGNzdGFydCArIG5ld2lsZW47CisJICAgIG1lbW1vdmUocywgdGNlbmQsIChzaXplX3QpIChycCAtIHRjZW5kKSk7CisJICAgIG1lbW1vdmUodGNzdGFydCwgbmV3aWNhcCwgKHNpemVfdCkgbmV3aWxlbik7CisJICAgIHJwICs9IGRpZmY7CisJICAgIGZyZWUoaWNhcCk7CisKKwkgICAgLyoKKwkgICAgICogU3RhcnQgc2NhbiBvbiBgOicgc28gbmV4dCBjZ2V0Y2FwIHdvcmtzIHByb3Blcmx5CisJICAgICAqIChjZ2V0Y2FwIGFsd2F5cyBza2lwcyBmaXJzdCBmaWVsZCkuCisJICAgICAqLworCSAgICBzY2FuID0gcyAtIDE7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogQ2xvc2UgZmlsZSAoaWYgd2Ugb3BlbmVkIGl0KSwgZ2l2ZSBiYWNrIGFueSBleHRyYSBtZW1vcnksIGFuZAorICAgICAqIHJldHVybiBjYXBhYmlsaXR5LCBsZW5ndGggYW5kIHN1Y2Nlc3MuCisgICAgICovCisgICAgaWYgKG15ZmQpCisJKHZvaWQpIGNsb3NlKGZkKTsKKyAgICAqbGVuID0gcnAgLSByZWNvcmQgLSAxOwkvKiBkb24ndCBjb3VudCBOVUwgKi8KKyAgICBpZiAocl9lbmQgPiBycCkgeworCWlmICgocmVjb3JkID0gRE9BTExPQygoc2l6ZV90KSAocnAgLSByZWNvcmQpKSkgPT0gMCkgeworCSAgICBlcnJubyA9IEVOT01FTTsKKwkgICAgcmV0dXJuIChUQ19TWVNfRVJSKTsKKwl9CisgICAgfQorCisgICAgKmNhcCA9IHJlY29yZDsKKyAgICBpZiAodGNfbm90X3Jlc29sdmVkKQorCXJldHVybiAoVENfVU5SRVNPTFZFRCk7CisgICAgcmV0dXJuIChjdXJyZW50KTsKK30KKworLyoKKyAqIENnZXRtYXRjaCB3aWxsIHJldHVybiAwIGlmIG5hbWUgaXMgb25lIG9mIHRoZSBuYW1lcyBvZiB0aGUgY2FwYWJpbGl0eQorICogcmVjb3JkIGJ1ZiwgLTEgaWYgbm90LgorICovCitzdGF0aWMgaW50CitfbmNfY2dldG1hdGNoKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICByZWdpc3RlciBjb25zdCBjaGFyICpucDsKKyAgICByZWdpc3RlciBjaGFyICpicDsKKworICAgIC8qCisgICAgICogU3RhcnQgc2VhcmNoIGF0IGJlZ2lubmluZyBvZiByZWNvcmQuCisgICAgICovCisgICAgYnAgPSBidWY7CisgICAgZm9yICg7OykgeworCS8qCisJICogVHJ5IHRvIG1hdGNoIGEgcmVjb3JkIG5hbWUuCisJICovCisJbnAgPSBuYW1lOworCWZvciAoOzspIHsKKwkgICAgaWYgKCpucCA9PSAnXDAnKSB7CisJCWlmICgqYnAgPT0gJ3wnIHx8ICpicCA9PSAnOicgfHwgKmJwID09ICdcMCcpCisJCSAgICByZXR1cm4gKDApOworCQllbHNlCisJCSAgICBicmVhazsKKwkgICAgfSBlbHNlIGlmICgqYnArKyAhPSAqbnArKykgeworCQlicmVhazsKKwkgICAgfQorCX0KKworCS8qCisJICogTWF0Y2ggZmFpbGVkLCBza2lwIHRvIG5leHQgbmFtZSBpbiByZWNvcmQuCisJICovCisJYnAtLTsJCQkvKiBhICd8JyBvciAnOicgbWF5IGhhdmUgc3RvcHBlZCB0aGUgbWF0Y2ggKi8KKwlmb3IgKDs7KSB7CisJICAgIGlmICgqYnAgPT0gJ1wwJyB8fCAqYnAgPT0gJzonKQorCQlyZXR1cm4gKC0xKTsJLyogbWF0Y2ggZmFpbGVkIHRvdGFsbHkgKi8KKwkgICAgZWxzZSBpZiAoKmJwKysgPT0gJ3wnKQorCQlicmVhazsJCS8qIGZvdW5kIG5leHQgbmFtZSAqLworCX0KKyAgICB9Cit9CisKKy8qCisgKiBDb21wYXJlIG5hbWUgZmllbGQgb2YgcmVjb3JkLgorICovCitzdGF0aWMgaW50CitfbmNfbmZjbXAoY29uc3QgY2hhciAqbmYsIGNoYXIgKnJlYykKK3sKKyAgICBjaGFyICpjcCwgdG1wOworICAgIGludCByZXQ7CisKKyAgICBmb3IgKGNwID0gcmVjOyAqY3AgIT0gJzonOyBjcCsrKSA7CisKKyAgICB0bXAgPSAqKGNwICsgMSk7CisgICAgKihjcCArIDEpID0gJ1wwJzsKKyAgICByZXQgPSBzdHJjbXAobmYsIHJlYyk7CisgICAgKihjcCArIDEpID0gdG1wOworCisgICAgcmV0dXJuIChyZXQpOworfQorI2VuZGlmIC8qIEhBVkVfQlNEX0NHRVRFTlQgKi8KKworLyoKKyAqIFNpbmNlIG5jdXJzZXMgcHJvdmlkZXMgaXRzIG93biAndGdldGVudCgpJywgd2UgY2Fubm90IHVzZSB0aGUgbmF0aXZlIG9uZS4KKyAqIFNvIHdlIHJlcHJvZHVjZSB0aGUgbG9naWMgdG8gZ2V0IGRvd24gdG8gY2dldGVudCgpIC0tIG9yIG91ciBjdXQtZG93bgorICogdmVyc2lvbiBvZiB0aGF0IC0tIHRvIGNpcmN1bXZlbnQgdGhlIHByb2JsZW0gb2YgY29uZmlndXJpbmcgYWdhaW5zdCB0aGUKKyAqIHRlcm1jYXAgbGlicmFyeS4KKyAqLworI2RlZmluZSBVU0VfQlNEX1RHRVRFTlQgMQorCisjaWYgVVNFX0JTRF9UR0VURU5UCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyogc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXRlcm1jYXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiICovCisKKyNkZWZpbmUJUEJVRlNJWgkJNTEyCS8qIG1heCBsZW5ndGggb2YgZmlsZW5hbWUgcGF0aCAqLworI2RlZmluZQlQVkVDU0laCQkzMgkvKiBtYXggbnVtYmVyIG9mIG5hbWVzIGluIHBhdGggKi8KKyNkZWZpbmUgVEJVRlNJWiAoMjA0OCoyKQorCitzdGF0aWMgY2hhciAqdGJ1ZjsKKworLyoKKyAqIE9uIGVudHJ5LCBzcmNwIHBvaW50cyB0byBhIG5vbiAnOicgY2hhcmFjdGVyIHdoaWNoIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgKiB0b2tlbiwgaWYgYW55LiAgV2UnbGwgdHJ5IHRvIHJldHVybiBhIHN0cmluZyB0aGF0IGRvZXNuJ3QgZW5kIHdpdGggYSAnOicuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF90Y190b2tlbihjaGFyICoqc3JjcCwgaW50ICplbmRwKQoreworICAgIGludCBjaDsKKyAgICBib29sIGZvdW5kID0gRkFMU0U7CisgICAgY2hhciAqcywgKmJhc2U7CisgICAgY2hhciAqdG9rID0gMDsKKworICAgICplbmRwID0gVFJVRTsKKyAgICBmb3IgKHMgPSBiYXNlID0gKnNyY3A7ICpzICE9ICdcMCc7KSB7CisJY2ggPSAqcysrOworCWlmIChjaCA9PSAnXFwnKSB7CisJICAgIGlmICgqcyA9PSAnXDAnKSB7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKCpzKysgPT0gJ1xuJykgeworCQl3aGlsZSAoaXNzcGFjZShVQ2hhcigqcykpKQorCQkgICAgcysrOworCSAgICB9IGVsc2UgeworCQlmb3VuZCA9IFRSVUU7CisJICAgIH0KKwl9IGVsc2UgaWYgKGNoID09ICc6JykgeworCSAgICBpZiAoZm91bmQpIHsKKwkJdG9rID0gYmFzZTsKKwkJc1stMV0gPSAnXDAnOworCQkqc3JjcCA9IHM7CisJCSplbmRwID0gRkFMU0U7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJhc2UgPSBzOworCX0gZWxzZSBpZiAoaXNncmFwaChVQ2hhcihjaCkpKSB7CisJICAgIGZvdW5kID0gVFJVRTsKKwl9CisgICAgfQorCisgICAgLyogbWFsZm9ybWVkIGVudHJ5IG1heSBlbmQgd2l0aG91dCBhICc6JyAqLworICAgIGlmICh0b2sgPT0gMCAmJiBmb3VuZCkgeworCXRvayA9IGJhc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRvazsKK30KKworc3RhdGljIGNoYXIgKgorY29weV90Y190b2tlbihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbikKK3sKKyAgICBpbnQgY2g7CisKKyAgICB3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisJaWYgKGNoID09ICdcXCcgJiYgKnNyYyA9PSAnXG4nKSB7CisJICAgIHdoaWxlIChpc3NwYWNlKFVDaGFyKCpzcmMpKSkKKwkJc3JjKys7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoLS1sZW4gPT0gMCkgeworCSAgICBkc3QgPSAwOworCSAgICBicmVhazsKKwl9CisJKmRzdCsrID0gY2g7CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKKy8qCisgKiBHZXQgYW4gZW50cnkgZm9yIHRlcm1pbmFsIG5hbWUgaW4gYnVmZmVyIGJwIGZyb20gdGhlIHRlcm1jYXAgZmlsZS4KKyAqLworc3RhdGljIGludAorX25jX3RnZXRlbnQoY2hhciAqYnAsIGNoYXIgKipzb3VyY2VuYW1lLCBpbnQgKmxpbmVubywgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzdGF0aWMgY2hhciAqdGhlX3NvdXJjZTsKKworICAgIHJlZ2lzdGVyIGNoYXIgKnA7CisgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisgICAgY2hhciAqZHVtbXkgPSBOVUxMOworICAgIGNoYXIgKipmbmFtZTsKKyAgICBjaGFyICpob21lOworICAgIGludCBpOworICAgIGNoYXIgcGF0aGJ1ZltQQlVGU0laXTsJLyogaG9sZHMgcmF3IHBhdGggb2YgZmlsZW5hbWVzICovCisgICAgY2hhciAqcGF0aHZlY1tQVkVDU0laXTsJLyogdG8gcG9pbnQgdG8gbmFtZXMgaW4gcGF0aGJ1ZiAqLworICAgIGNoYXIgKipwdmVjOwkJLyogaG9sZHMgdXNhYmxlIHRhaWwgb2YgcGF0aCB2ZWN0b3IgKi8KKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKnRlcm1wYXRoOworICAgIHN0cmluZ19kZXNjIGRlc2M7CisKKyAgICBmbmFtZSA9IHBhdGh2ZWM7CisgICAgcHZlYyA9IHBhdGh2ZWM7CisgICAgdGJ1ZiA9IGJwOworICAgIHAgPSBwYXRoYnVmOworICAgIGNwID0gdXNlX3Rlcm1pbmZvX3ZhcnMoKT8gZ2V0ZW52KCJURVJNQ0FQIikgOiBOVUxMOworCisgICAgLyoKKyAgICAgKiBURVJNQ0FQIGNhbiBoYXZlIG9uZSBvZiB0d28gdGhpbmdzIGluIGl0LiAgSXQgY2FuIGJlIHRoZSBuYW1lIG9mIGEgZmlsZQorICAgICAqIHRvIHVzZSBpbnN0ZWFkIG9mIC9ldGMvdGVybWNhcC4gIEluIHRoaXMgY2FzZSBpdCBiZXR0ZXIgc3RhcnQgd2l0aCBhCisgICAgICogIi8iLiAgT3IgaXQgY2FuIGJlIGFuIGVudHJ5IHRvIHVzZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlYWQgdGhlIGZpbGUuIAorICAgICAqIEluIHRoaXMgY2FzZSBpdCBoYXMgdG8gYWxyZWFkeSBoYXZlIHRoZSBuZXdsaW5lcyBjcnVuY2hlZCBvdXQuICBJZgorICAgICAqIFRFUk1DQVAgZG9lcyBub3QgaG9sZCBhIGZpbGUgbmFtZSB0aGVuIGEgcGF0aCBvZiBuYW1lcyBpcyBzZWFyY2hlZAorICAgICAqIGluc3RlYWQuICBUaGUgcGF0aCBpcyBmb3VuZCBpbiB0aGUgVEVSTVBBVEggdmFyaWFibGUsIG9yIGJlY29tZXMKKyAgICAgKiAiJEhPTUUvLnRlcm1jYXAgL2V0Yy90ZXJtY2FwIiBpZiBubyBURVJNUEFUSCBleGlzdHMuCisgICAgICovCisgICAgX25jX3N0cl9pbml0KCZkZXNjLCBwYXRoYnVmLCBzaXplb2YocGF0aGJ1ZikpOworICAgIGlmIChjcCA9PSBOVUxMKSB7CisJX25jX3NhZmVfc3RyY3B5KCZkZXNjLCBnZXRfdGVybXBhdGgoKSk7CisgICAgfSBlbHNlIGlmICghX25jX2lzX2Fic19wYXRoKGNwKSkgewkvKiBURVJNQ0FQIGhvbGRzIGFuIGVudHJ5ICovCisJaWYgKCh0ZXJtcGF0aCA9IGdldF90ZXJtcGF0aCgpKSAhPSAwKSB7CisJICAgIF9uY19zYWZlX3N0cmNhdCgmZGVzYywgdGVybXBhdGgpOworCX0gZWxzZSB7CisJICAgIGNoYXIgdGVtcFtQQlVGU0laXTsKKwkgICAgdGVtcFswXSA9IDA7CisJICAgIGlmICgoaG9tZSA9IGdldGVudigiSE9NRSIpKSAhPSAwICYmICpob21lICE9ICdcMCcKKwkJJiYgc3RyY2hyKGhvbWUsICcgJykgPT0gMAorCQkmJiBzdHJsZW4oaG9tZSkgPCBzaXplb2YodGVtcCkgLSAxMCkgewkvKiBzZXR1cCBwYXRoICovCisJCXNwcmludGYodGVtcCwgIiVzLyIsIGhvbWUpOwkvKiAkSE9NRSBmaXJzdCAqLworCSAgICB9CisJICAgIC8qIGlmIG5vICRIT01FIGxvb2sgaW4gY3VycmVudCBkaXJlY3RvcnkgKi8KKwkgICAgc3RyY2F0KHRlbXAsICIudGVybWNhcCIpOworCSAgICBfbmNfc2FmZV9zdHJjYXQoJmRlc2MsIHRlbXApOworCSAgICBfbmNfc2FmZV9zdHJjYXQoJmRlc2MsICIgIik7CisJICAgIF9uY19zYWZlX3N0cmNhdCgmZGVzYywgZ2V0X3Rlcm1wYXRoKCkpOworCX0KKyAgICB9IGVsc2UgewkJCS8qIHVzZXItZGVmaW5lZCBuYW1lIGluIFRFUk1DQVAgKi8KKwlfbmNfc2FmZV9zdHJjYXQoJmRlc2MsIGNwKTsJLyogc3RpbGwgY2FuIGJlIHRva2VuaXplZCAqLworICAgIH0KKworICAgICpmbmFtZSsrID0gcGF0aGJ1ZjsJCS8qIHRva2VuaXplIHBhdGggaW50byB2ZWN0b3Igb2YgbmFtZXMgKi8KKyAgICB3aGlsZSAoKisrcCkgeworCWlmICgqcCA9PSAnICcgfHwgKnAgPT0gTkNVUlNFU19QQVRIU0VQKSB7CisJICAgICpwID0gJ1wwJzsKKwkgICAgd2hpbGUgKCorK3ApCisJCWlmICgqcCAhPSAnICcgJiYgKnAgIT0gTkNVUlNFU19QQVRIU0VQKQorCQkgICAgYnJlYWs7CisJICAgIGlmICgqcCA9PSAnXDAnKQorCQlicmVhazsKKwkgICAgKmZuYW1lKysgPSBwOworCSAgICBpZiAoZm5hbWUgPj0gcGF0aHZlYyArIFBWRUNTSVopIHsKKwkJZm5hbWUtLTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgICpmbmFtZSA9IDA7CQkJLyogbWFyayBlbmQgb2YgdmVjdG9yICovCisgICAgaWYgKF9uY19pc19hYnNfcGF0aChjcCkpIHsKKwlpZiAoX25jX2NnZXRzZXQoY3ApIDwgMCkgeworCSAgICByZXR1cm4gKFRDX1NZU19FUlIpOworCX0KKyAgICB9CisKKyAgICBpID0gX25jX2NnZXRlbnQoJmR1bW15LCBsaW5lbm8sIHBhdGh2ZWMsIG5hbWUpOworCisgICAgLyogbmN1cnNlcycgdGVybWNhcC1wYXJzaW5nIHJvdXRpbmVzIGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgYWRqYWNlbnQKKyAgICAgKiBlbXB0eSBmaWVsZHMsIGFuZCBtaXN0YWtlbmx5IHVzZSB0aGUgbGFzdCB2YWxpZCBjYXAgZW50cnkgaW5zdGVhZCBvZgorICAgICAqIHRoZSBmaXJzdCAoYnJlYWtzIHRjPSBpbmNsdWRlcykKKyAgICAgKi8KKyAgICBpZiAoaSA+PSAwKSB7CisJY2hhciAqcGQsICpwcywgKnRvazsKKwlpbnQgZW5kZmxhZyA9IEZBTFNFOworCWNoYXIgKmxpc3RbMTAyM107CisJc2l6ZV90IG4sIGNvdW50ID0gMDsKKworCXBkID0gYnA7CisJcHMgPSBkdW1teTsKKwl3aGlsZSAoIWVuZGZsYWcgJiYgKHRvayA9IGdldF90Y190b2tlbigmcHMsICZlbmRmbGFnKSkgIT0gMCkgeworCSAgICBib29sIGlnbm9yZSA9IEZBTFNFOworCisJICAgIGZvciAobiA9IDE7IG4gPCBjb3VudDsgbisrKSB7CisJCWNoYXIgKnMgPSBsaXN0W25dOworCQlpZiAoc1swXSA9PSB0b2tbMF0KKwkJICAgICYmIHNbMV0gPT0gdG9rWzFdKSB7CisJCSAgICBpZ25vcmUgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBpZiAoaWdub3JlICE9IFRSVUUpIHsKKwkJbGlzdFtjb3VudCsrXSA9IHRvazsKKwkJcGQgPSBjb3B5X3RjX3Rva2VuKHBkLCB0b2ssIFRCVUZTSVogLSAoMiArIHBkIC0gYnApKTsKKwkJaWYgKHBkID09IDApIHsKKwkJICAgIGkgPSAtMTsKKwkJICAgIGJyZWFrOworCQl9CisJCSpwZCsrID0gJzonOworCQkqcGQgPSAnXDAnOworCSAgICB9CisJfQorICAgIH0KKworICAgIEZyZWVJZk5lZWRlZChkdW1teSk7CisgICAgRnJlZUlmTmVlZGVkKHRoZV9zb3VyY2UpOworICAgIHRoZV9zb3VyY2UgPSAwOworCisgICAgLyogVGhpcyBpcyBub3QgcmVsYXRlZCB0byB0aGUgQlNEIGNnZXRlbnQoKSwgYnV0IHRvIGZha2UgdXAgYSBzdWl0YWJsZQorICAgICAqIGZpbGVuYW1lIGZvciBuY3Vyc2VzJyBlcnJvciByZXBvcnRpbmcuICAoSWYgd2UgYXJlIG5vdCB1c2luZyBCU0QKKyAgICAgKiBjZ2V0ZW50LCB0aGVuIGl0IGlzIHRoZSBhY3R1YWwgZmlsZW5hbWUpLgorICAgICAqLworICAgIGlmIChpID49IDApIHsKKyNpZiBIQVZFX0JTRF9DR0VURU5UCisJY2hhciB0ZW1wW1BBVEhfTUFYXTsKKworCV9uY19zdHJfaW5pdCgmZGVzYywgdGVtcCwgc2l6ZW9mKHRlbXApKTsKKwlfbmNfc2FmZV9zdHJjcHkoJmRlc2MsIHBhdGh2ZWNbaV0pOworCV9uY19zYWZlX3N0cmNhdCgmZGVzYywgIi5kYiIpOworCWlmIChfbmNfYWNjZXNzKHRlbXAsIFJfT0spID09IDApIHsKKwkgICAgX25jX3NhZmVfc3RyY3B5KCZkZXNjLCBwYXRodmVjW2ldKTsKKwl9CisJaWYgKCh0aGVfc291cmNlID0gc3RyZHVwKHRlbXApKSAhPSAwKQorCSAgICAqc291cmNlbmFtZSA9IHRoZV9zb3VyY2U7CisjZWxzZQorCWlmICgodGhlX3NvdXJjZSA9IHN0cmR1cChwYXRodmVjW2ldKSkgIT0gMCkKKwkgICAgKnNvdXJjZW5hbWUgPSB0aGVfc291cmNlOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIChpKTsKK30KKyNlbmRpZiAvKiBVU0VfQlNEX1RHRVRFTlQgKi8KKyNlbmRpZiAvKiBVU0VfR0VUQ0FQICovCisKKyNkZWZpbmUgTUFYUEFUSFMJMzIKKworLyoKKyAqIEFkZCBhIGZpbGVuYW1lIHRvIHRoZSBsaXN0IGluICd0ZXJtcGF0aHNbXScsIGNoZWNraW5nIHRoYXQgd2UgcmVhbGx5IGhhdmUKKyAqIGEgcmlnaHQgdG8gb3BlbiB0aGUgZmlsZS4KKyAqLworI2lmICFVU0VfR0VUQ0FQCitzdGF0aWMgaW50CithZGRfdGMoY2hhciAqdGVybXBhdGhzW10sIGNoYXIgKnBhdGgsIGludCBjb3VudCkKK3sKKyAgICBjaGFyICpzYXZlID0gc3RyY2hyKHBhdGgsIE5DVVJTRVNfUEFUSFNFUCk7CisgICAgaWYgKHNhdmUgIT0gMCkKKwkqc2F2ZSA9ICdcMCc7CisgICAgaWYgKGNvdW50IDwgTUFYUEFUSFMKKwkmJiBfbmNfYWNjZXNzKHBhdGgsIFJfT0spID09IDApIHsKKwl0ZXJtcGF0aHNbY291bnQrK10gPSBwYXRoOworCVQoKCJBZGRpbmcgdGVybXBhdGggJXMiLCBwYXRoKSk7CisgICAgfQorICAgIHRlcm1wYXRoc1tjb3VudF0gPSAwOworICAgIGlmIChzYXZlICE9IDApCisJKnNhdmUgPSBOQ1VSU0VTX1BBVEhTRVA7CisgICAgcmV0dXJuIGNvdW50OworfQorI2RlZmluZSBBRERfVEMocGF0aCwgY291bnQpIGZpbGVjb3VudCA9IGFkZF90Yyh0ZXJtcGF0aHMsIHBhdGgsIGNvdW50KQorI2VuZGlmIC8qICFVU0VfR0VUQ0FQICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZWFkX3Rlcm1jYXBfZW50cnkoY29uc3QgY2hhciAqY29uc3QgdG4sIFRFUk1UWVBFICpjb25zdCB0cCkKK3sKKyAgICBpbnQgZm91bmQgPSBUR0VURU5UX05POworICAgIEVOVFJZICplcDsKKyNpZiBVU0VfR0VUQ0FQX0NBQ0hFCisgICAgY2hhciBjd2RfYnVmW1BBVEhfTUFYXTsKKyNlbmRpZgorI2lmIFVTRV9HRVRDQVAKKyAgICBjaGFyICpwLCB0Y1tUQlVGU0laXTsKKyAgICBpbnQgc3RhdHVzOworICAgIHN0YXRpYyBjaGFyICpzb3VyY2U7CisgICAgc3RhdGljIGludCBsaW5lbm87CisKKyAgICBUKCgicmVhZCB0ZXJtY2FwIGVudHJ5IGZvciAlcyIsIHRuKSk7CisKKyAgICBpZiAoc3RybGVuKHRuKSA9PSAwCisJfHwgc3RyY21wKHRuLCAiLiIpID09IDAKKwl8fCBzdHJjbXAodG4sICIuLiIpID09IDAKKwl8fCBfbmNfcGF0aGxhc3QodG4pICE9IDApIHsKKwlUKCgiaWxsZWdhbCBvciBtaXNzaW5nIGVudHJ5IG5hbWUgJyVzJyIsIHRuKSk7CisJcmV0dXJuIFRHRVRFTlRfTk87CisgICAgfQorCisgICAgaWYgKHVzZV90ZXJtaW5mb192YXJzKCkgJiYgKHAgPSBnZXRlbnYoIlRFUk1DQVAiKSkgIT0gMAorCSYmICFfbmNfaXNfYWJzX3BhdGgocCkgJiYgX25jX25hbWVfbWF0Y2gocCwgdG4sICJ8OiIpKSB7CisJLyogVEVSTUNBUCBob2xkcyBhIHRlcm1jYXAgZW50cnkgKi8KKwlzdHJuY3B5KHRjLCBwLCBzaXplb2YodGMpIC0gMSk7CisJdGNbc2l6ZW9mKHRjKSAtIDFdID0gJ1wwJzsKKwlfbmNfc2V0X3NvdXJjZSgiVEVSTUNBUCIpOworICAgIH0gZWxzZSB7CisJLyogd2UncmUgdXNpbmcgZ2V0Y2FwKDMpICovCisJaWYgKChzdGF0dXMgPSBfbmNfdGdldGVudCh0YywgJnNvdXJjZSwgJmxpbmVubywgdG4pKSA8IDApCisJICAgIHJldHVybiAoc3RhdHVzID09IFRDX05PVF9GT1VORCA/IFRHRVRFTlRfTk8gOiBUR0VURU5UX0VSUik7CisKKwlfbmNfY3Vycl9saW5lID0gbGluZW5vOworCV9uY19zZXRfc291cmNlKHNvdXJjZSk7CisgICAgfQorICAgIF9uY19yZWFkX2VudHJ5X3NvdXJjZSgoRklMRSAqKSAwLCB0YywgRkFMU0UsIEZBTFNFLCBOVUxMSE9PSyk7CisjZWxzZQorICAgIC8qCisgICAgICogSGVyZSBpcyB3aGF0IHRoZSA0LjRCU0QgdGVybWNhcCgzKSBwYWdlIHByZXNjcmliZXM6CisgICAgICoKKyAgICAgKiBJdCB3aWxsIGxvb2sgaW4gdGhlIGVudmlyb25tZW50IGZvciBhIFRFUk1DQVAgdmFyaWFibGUuICBJZiBmb3VuZCwgYW5kCisgICAgICogdGhlIHZhbHVlIGRvZXMgbm90IGJlZ2luIHdpdGggYSBzbGFzaCwgYW5kIHRoZSB0ZXJtaW5hbCB0eXBlIG5hbWUgaXMgdGhlCisgICAgICogc2FtZSBhcyB0aGUgZW52aXJvbm1lbnQgc3RyaW5nIFRFUk0sIHRoZSBURVJNQ0FQIHN0cmluZyBpcyB1c2VkIGluc3RlYWQKKyAgICAgKiBvZiByZWFkaW5nIGEgdGVybWNhcCBmaWxlLiAgSWYgaXQgZG9lcyBiZWdpbiB3aXRoIGEgc2xhc2gsIHRoZSBzdHJpbmcgaXMKKyAgICAgKiB1c2VkIGFzIGEgcGF0aCBuYW1lIG9mIHRoZSB0ZXJtY2FwIGZpbGUgdG8gc2VhcmNoLiAgSWYgVEVSTUNBUCBkb2VzIG5vdAorICAgICAqIGJlZ2luIHdpdGggYSBzbGFzaCBhbmQgbmFtZSBpcyBkaWZmZXJlbnQgZnJvbSBURVJNLCB0Z2V0ZW50KCkgc2VhcmNoZXMKKyAgICAgKiB0aGUgZmlsZXMgJEhPTUUvLnRlcm1jYXAgYW5kIC91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwLCBpbiB0aGF0IG9yZGVyLAorICAgICAqIHVubGVzcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVEVSTVBBVEggZXhpc3RzLCBpbiB3aGljaCBjYXNlIGl0CisgICAgICogc3BlY2lmaWVzIGEgbGlzdCBvZiBmaWxlIHBhdGhuYW1lcyAoc2VwYXJhdGVkIGJ5IHNwYWNlcyBvciBjb2xvbnMpIHRvIGJlCisgICAgICogc2VhcmNoZWQgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEl0IGdvZXMgb24gdG8gc3RhdGU6CisgICAgICoKKyAgICAgKiBXaGVuZXZlciBtdWx0aXBsZSBmaWxlcyBhcmUgc2VhcmNoZWQgYW5kIGEgdGMgZmllbGQgb2NjdXJzIGluIHRoZQorICAgICAqIHJlcXVlc3RlZCBlbnRyeSwgdGhlIGVudHJ5IGl0IG5hbWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIHNhbWUgZmlsZSBvcgorICAgICAqIG9uZSBvZiB0aGUgc3VjY2VlZGluZyBmaWxlcy4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoaXMgcmVzdHJpY3Rpb24gaXMgcmVsYXhlZCBpbiBuY3Vyc2VzOyB0YyByZWZlcmVuY2VzIHRvCisgICAgICogcHJldmlvdXMgZmlsZXMgYXJlIHBlcm1pdHRlZC4KKyAgICAgKgorICAgICAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgYW4gZW50cnkgaXMgZm91bmQsIDAgaWYgbm90IGZvdW5kLCBhbmQgLTEgaWYKKyAgICAgKiB0aGUgZGF0YWJhc2UgaXMgbm90IGFjY2Vzc2libGUuCisgICAgICovCisgICAgRklMRSAqZnA7CisgICAgY2hhciAqdGMsICp0ZXJtcGF0aHNbTUFYUEFUSFNdOworICAgIGludCBmaWxlY291bnQgPSAwOworICAgIGludCBqLCBrOworICAgIGJvb2wgdXNlX2J1ZmZlciA9IEZBTFNFOworICAgIGJvb2wgbm9ybWFsID0gVFJVRTsKKyAgICBjaGFyIHRjX2J1ZlsxMDI0XTsKKyAgICBjaGFyIHBhdGhidWZbUEFUSF9NQVhdOworICAgIGNoYXIgKmNvcGllZCA9IDA7CisgICAgY2hhciAqY3A7CisgICAgc3RydWN0IHN0YXQgdGVzdF9zdGF0W01BWFBBVEhTXTsKKworICAgIHRlcm1wYXRoc1tmaWxlY291bnRdID0gMDsKKyAgICBpZiAodXNlX3Rlcm1pbmZvX3ZhcnMoKSAmJiAodGMgPSBnZXRlbnYoIlRFUk1DQVAiKSkgIT0gMCkgeworCWlmIChfbmNfaXNfYWJzX3BhdGgodGMpKSB7CS8qIGludGVycHJldCBhcyBhIGZpbGVuYW1lICovCisJICAgIEFERF9UQyh0YywgMCk7CisJICAgIG5vcm1hbCA9IEZBTFNFOworCX0gZWxzZSBpZiAoX25jX25hbWVfbWF0Y2godGMsIHRuLCAifDoiKSkgewkvKiB0cmVhdCBhcyBhIGNhcGFiaWxpdHkgZmlsZSAqLworCSAgICB1c2VfYnVmZmVyID0gVFJVRTsKKwkgICAgKHZvaWQpIHNwcmludGYodGNfYnVmLCAiJS4qc1xuIiwgKGludCkgc2l6ZW9mKHRjX2J1ZikgLSAyLCB0Yyk7CisJICAgIG5vcm1hbCA9IEZBTFNFOworCX0KKyAgICB9CisKKyAgICBpZiAobm9ybWFsKSB7CQkvKiBub3JtYWwgY2FzZSAqLworCWNoYXIgZW52aG9tZVtQQVRIX01BWF0sICpoOworCisJY29waWVkID0gc3RyZHVwKGdldF90ZXJtcGF0aCgpKTsKKwlmb3IgKGNwID0gY29waWVkOyAqY3A7IGNwKyspIHsKKwkgICAgaWYgKCpjcCA9PSBOQ1VSU0VTX1BBVEhTRVApCisJCSpjcCA9ICdcMCc7CisJICAgIGVsc2UgaWYgKGNwID09IGNvcGllZCB8fCBjcFstMV0gPT0gJ1wwJykgeworCQlBRERfVEMoY3AsIGZpbGVjb3VudCk7CisJICAgIH0KKwl9CisKKyNkZWZpbmUgUFJJVkFURV9DQVAgIiVzLy50ZXJtY2FwIgorCisJaWYgKHVzZV90ZXJtaW5mb192YXJzKCkgJiYgKGggPSBnZXRlbnYoIkhPTUUiKSkgIT0gTlVMTCAmJiAqaCAhPSAnXDAnCisJICAgICYmIChzdHJsZW4oaCkgKyBzaXplb2YoUFJJVkFURV9DQVApKSA8IFBBVEhfTUFYKSB7CisJICAgIC8qIHVzZXIncyAudGVybWNhcCwgaWYgYW55LCBzaG91bGQgb3ZlcnJpZGUgaXQgKi8KKwkgICAgKHZvaWQpIHN0cmNweShlbnZob21lLCBoKTsKKwkgICAgKHZvaWQpIHNwcmludGYocGF0aGJ1ZiwgUFJJVkFURV9DQVAsIGVudmhvbWUpOworCSAgICBBRERfVEMocGF0aGJ1ZiwgZmlsZWNvdW50KTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcm9iYWJseSAvZXRjL3Rlcm1jYXAgaXMgYSBzeW1saW5rIHRvIC91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwLgorICAgICAqIEF2b2lkIHJlYWRpbmcgdGhlIHNhbWUgZmlsZSB0d2ljZS4KKyAgICAgKi8KKyNpZiBIQVZFX0xJTksKKyAgICBmb3IgKGogPSAwOyBqIDwgZmlsZWNvdW50OyBqKyspIHsKKwlib29sIG9taXQgPSBGQUxTRTsKKwlpZiAoc3RhdCh0ZXJtcGF0aHNbal0sICZ0ZXN0X3N0YXRbal0pICE9IDAKKwkgICAgfHwgKHRlc3Rfc3RhdFtqXS5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSB7CisJICAgIG9taXQgPSBUUlVFOworCX0gZWxzZSB7CisJICAgIGZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKKwkJaWYgKHRlc3Rfc3RhdFtrXS5zdF9kZXYgPT0gdGVzdF9zdGF0W2pdLnN0X2RldgorCQkgICAgJiYgdGVzdF9zdGF0W2tdLnN0X2lubyA9PSB0ZXN0X3N0YXRbal0uc3RfaW5vKSB7CisJCSAgICBvbWl0ID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisJaWYgKG9taXQpIHsKKwkgICAgVCgoIlBhdGggJXMgaXMgYSBkdXBsaWNhdGUiLCB0ZXJtcGF0aHNbal0pKTsKKwkgICAgZm9yIChrID0gaiArIDE7IGsgPCBmaWxlY291bnQ7IGsrKykgeworCQl0ZXJtcGF0aHNbayAtIDFdID0gdGVybXBhdGhzW2tdOworCQl0ZXN0X3N0YXRbayAtIDFdID0gdGVzdF9zdGF0W2tdOworCSAgICB9CisJICAgIC0tZmlsZWNvdW50OworCSAgICAtLWo7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogcGFyc2UgdGhlIHNvdXJjZXMgKi8KKyAgICBpZiAodXNlX2J1ZmZlcikgeworCV9uY19zZXRfc291cmNlKCJURVJNQ0FQIik7CisKKwkvKgorCSAqIFdlIGRvbid0IHN1cHByZXNzIHdhcm5pbmcgbWVzc2FnZXMgaGVyZS4gIFRoZSBwcmVzdW1wdGlvbiBpcworCSAqIHRoYXQgc2luY2UgaXQncyBqdXN0IGEgc2luZ2xlIGVudHJ5LCB0aGV5IHdvbid0IGJlIGEgcGFpbi4KKwkgKi8KKwlfbmNfcmVhZF9lbnRyeV9zb3VyY2UoKEZJTEUgKikgMCwgdGNfYnVmLCBGQUxTRSwgRkFMU0UsIE5VTExIT09LKTsKKyAgICB9IGVsc2UgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGZpbGVjb3VudDsgaSsrKSB7CisKKwkgICAgVCgoIkxvb2tpbmcgZm9yICVzIGluICVzIiwgdG4sIHRlcm1wYXRoc1tpXSkpOworCSAgICBpZiAoX25jX2FjY2Vzcyh0ZXJtcGF0aHNbaV0sIFJfT0spID09IDAKKwkJJiYgKGZwID0gZm9wZW4odGVybXBhdGhzW2ldLCAiciIpKSAhPSAoRklMRSAqKSAwKSB7CisJCV9uY19zZXRfc291cmNlKHRlcm1wYXRoc1tpXSk7CisKKwkJLyoKKwkJICogU3VwcHJlc3Mgd2FybmluZyBtZXNzYWdlcy4gIE90aGVyd2lzZSB5b3UgZ2V0IDQwMCBsaW5lcyBvZgorCQkgKiBjcmFwIGZyb20gYXJjaGFpYyB0ZXJtY2FwIGZpbGVzIGFzIG5jdXJzZXMgY29tcGxhaW5zIGFib3V0CisJCSAqIGFsbCB0aGUgb2Jzb2xldGUgY2FwYWJpbGl0aWVzLgorCQkgKi8KKwkJX25jX3JlYWRfZW50cnlfc291cmNlKGZwLCAoY2hhciAqKSAwLCBGQUxTRSwgVFJVRSwgTlVMTEhPT0spOworCisJCSh2b2lkKSBmY2xvc2UoZnApOworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAoY29waWVkICE9IDApCisJZnJlZShjb3BpZWQpOworI2VuZGlmIC8qIFVTRV9HRVRDQVAgKi8KKworICAgIGlmIChfbmNfaGVhZCA9PSAwKQorCXJldHVybiAoVEdFVEVOVF9FUlIpOworCisgICAgLyogcmVzb2x2ZSBhbGwgdXNlIHJlZmVyZW5jZXMgKi8KKyAgICBfbmNfcmVzb2x2ZV91c2VzMihUUlVFLCBGQUxTRSk7CisKKyAgICAvKiBmaW5kIGEgdGVybWluYWwgbWF0Y2hpbmcgdG4sIGlmIHdlIGNhbiAqLworI2lmIFVTRV9HRVRDQVBfQ0FDSEUKKyAgICBpZiAoZ2V0Y3dkKGN3ZF9idWYsIHNpemVvZihjd2RfYnVmKSkgIT0gMCkgeworCV9uY19zZXRfd3JpdGVkaXIoKGNoYXIgKikgMCk7CS8qIG5vdGU6IHRoaXMgZG9lcyBhIGNoZGlyICovCisjZW5kaWYKKwlmb3JfZW50cnlfbGlzdChlcCkgeworCSAgICBpZiAoX25jX25hbWVfbWF0Y2goZXAtPnR0ZXJtLnRlcm1fbmFtZXMsIHRuLCAifDoiKSkgeworCQkvKgorCQkgKiBNYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgdGVybWluYWwgY2FwYWJpbGl0aWVzLCBkZWxpbmtlZAorCQkgKiBmcm9tIHRoZSBsaXN0LgorCQkgKi8KKwkJKnRwID0gZXAtPnR0ZXJtOworCQlfbmNfZGVsaW5rX2VudHJ5KF9uY19oZWFkLCAmKGVwLT50dGVybSkpOworCQlmcmVlKGVwKTsKKworCQkvKgorCQkgKiBPSywgbm93IHRyeSB0byB3cml0ZSB0aGUgdHlwZSB0byB1c2VyJ3MgdGVybWluZm8gZGlyZWN0b3J5LiAKKwkJICogTmV4dCB0aW1lIGhlIGxvYWRzIHRoaXMsIGl0IHdpbGwgY29tZSB0aHJvdWdoIHRlcm1pbmZvLgorCQkgKgorCQkgKiBBZHZhbnRhZ2U6ICBTZWNvbmQgYW5kIHN1YnNlcXVlbnQgZmV0Y2hlcyBvZiB0aGlzIGVudHJ5IHdpbGwKKwkJICogYmUgdmVyeSBmYXN0LgorCQkgKgorCQkgKiBEaXNhZHZhbnRhZ2U6ICBBZnRlciB0aGUgZmlyc3QgdGltZSBhIHRlcm1jYXAgdHlwZSBpcyBsb2FkZWQKKwkJICogYnkgaXRzIHVzZXIsIGVkaXRpbmcgaXQgaW4gdGhlIC9ldGMvdGVybWNhcCBmaWxlLCBvciBpbgorCQkgKiBURVJNQ0FQLCBvciBpbiBhIGxvY2FsIH4vLnRlcm1jYXAsIHdpbGwgYmUgaW5lZmZlY3RpdmUKKwkJICogdW5sZXNzIHRoZSB0ZXJtaW5mbyBlbnRyeSBpcyBleHBsaWNpdGx5IHJlbW92ZWQuCisJCSAqLworI2lmIFVTRV9HRVRDQVBfQ0FDSEUKKwkJKHZvaWQpIF9uY193cml0ZV9lbnRyeSh0cCk7CisjZW5kaWYKKwkJZm91bmQgPSBUR0VURU5UX1lFUzsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisjaWYgVVNFX0dFVENBUF9DQUNIRQorCWNoZGlyKGN3ZF9idWYpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIChmb3VuZCk7Cit9CisjZWxzZQorZXh0ZXJuCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3JlYWRfdGVybWNhcCh2b2lkKTsKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfcmVhZF90ZXJtY2FwKHZvaWQpCit7Cit9CisjZW5kaWYgLyogUFVSRV9URVJNSU5GTyAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9zZXRidWYuYyBiL25jdXJzZXMvdGluZm8vc2V0YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MTBlOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vc2V0YnVmLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJc2V0YnVmLmMKKyoqCisqKglTdXBwb3J0IGZvciBzZXRfdGVybSgpLCByZXNldF9zaGVsbF9tb2RlKCksIHJlc2V0X3Byb2dfbW9kZSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogc2V0YnVmLmMsdiAxLjEzIDIwMDcvMDUvMTIgMTk6MDQ6MDIgdG9tIEV4cCAkIikKKworLyoKKyAqIElmIHRoZSBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yIGlzIGNvbm5lY3RlZCB0byBhIHR0eSAodGhlIHR5cGljYWwgY2FzZSkgaXQKKyAqIHdpbGwgcHJvYmFibHkgYmUgbGluZS1idWZmZXJlZC4gIEtlaXRoIEJvc3RpYyBwb2ludGVkIG91dCB0aGF0IHdlIGRvbid0IHdhbnQKKyAqIHRoaXM7IGl0IGhvc2VzIHBlb3BsZSBydW5uaW5nIG92ZXIgbmV0d29ya3MgYnkgZm9yY2luZyBvdXQgYSBidW5jaCBvZiBzbWFsbAorICogcGFja2V0cyBpbnN0ZWFkIG9mIG9uZSBiaWcgb25lLCBzbyBzY3JlZW4gdXBkYXRlcyBvbiBwdHlzIGxvb2sgamVya3kuCisgKiBSZXN0b3JlIGJsb2NrIGJ1ZmZlcmluZyB0byBwcmV2ZW50IHRoaXMgbWlub3IgbG9zc2FnZS4KKyAqCisgKiBUaGUgYnVmZmVyIHNpemUgaXMgYSBjb21wcm9taXNlLiAgSWRlYWxseSB3ZSdkIGxpa2UgYSBidWZmZXIgdGhhdCBjYW4gaG9sZAorICogdGhlIG1heGltdW0gcG9zc2libGUgdXBkYXRlIHNpemUgKHRoZSB3aG9sZSBzY3JlZW4gcGx1cyBjdXAgY29tbWFuZHMgdG8KKyAqIGNoYW5nZSBsaW5lcyBhcyBpdCdzIHBhaW50ZWQpLiAgT24gYSA2Ni1saW5lIHh0ZXJtIHRoaXMgY2FuIGJlY29tZQorICogZXhjZXNzaXZlLiAgU28gd2UgbWluIGl0IHdpdGggdGhlIGFtb3VudCBvZiBkYXRhIHdlIHRoaW5rIHdlIGNhbiBnZXQgdGhyb3VnaAorICogdHdvIEV0aGVybmV0IHBhY2tldHMgKG1heGltdW0gcGFja2V0IHNpemUgLSAxMDAgZm9yIFRDUC9JUCBvdmVyaGVhZCkuCisgKgorICogV2h5IHR3byBldGhlcm5ldCBwYWNrZXRzPyAgSXQgdXNlZCB0byBiZSBvbmUsIG9uIHRoZSB0aGVvcnkgdGhhdCBzYWlkCisgKiBwYWNrZXRzIGRlZmluZSB0aGUgbWF4aW11bSBzaXplIG9mIGF0b21pYyB1cGRhdGUuICBCdXQgdGhhdCdzIGxlc3MgdGhhbiB0aGUKKyAqIDIwMDAgY2hhcnMgb24gYSAyNSB4IDgwIHNjcmVlbiwgYW5kIHdlIGRvbid0IHdhbnQgbG9jYWwgdXBkYXRlcyB0byBmbGlja2VyCisgKiBlaXRoZXIuICBUd28gcGFja2V0IGxlbmd0aHMgd2lsbCBoYW5kbGUgdXAgdG8gYSAzNSB4IDgwIHNjcmVlbi4KKyAqCisgKiBUaGUgbWFnaWMgJzYnIGlzIHRoZSBlc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBlbmQtb2YtbGluZSBjdXAgc2VxdWVuY2UgdG8gZ28KKyAqIHRvIHRoZSBuZXh0IGxpbmUuICBJdCdzIGdlbmVyb3VzLiAgV2UgdXNlZCB0byBtZXNzIHdpdGggdGhlIGJ1ZmZlcmluZyBpbgorICogaW5pdF9tdmN1cigpIGFmdGVyIGNvc3QgY29tcHV0YXRpb24sIGJ1dCB0aGF0IGxvc3QgdGhlIHNlcXVlbmNlcyBlbWl0dGVkIGJ5CisgKiBpbml0X2FjcygpIGluIHNldHVwc2NyZWVuKCkuCisgKgorICogIlRoZSBzZXR2YnVmIGZ1bmN0aW9uIG1heSBiZSB1c2VkIG9ubHkgYWZ0ZXIgdGhlIHN0cmVhbSBwb2ludGVkIHRvIGJ5IHN0cmVhbQorICogaGFzIGJlZW4gYXNzb2NpYXRlZCB3aXRoIGFuIG9wZW4gZmlsZSBhbmQgYmVmb3JlIGFueSBvdGhlciBvcGVyYXRpb24gaXMKKyAqIHBlcmZvcm1lZCBvbiB0aGUgc3RyZWFtLiIgKElTTyA3LjkuNS42LikKKyAqCisgKiBHcnJyci4uLgorICoKKyAqIE9uIGEgbGlnaHRlciBub3RlLCBtYW55IGltcGxlbWVudGF0aW9ucyBkbyBpbiBmYWN0IGFsbG93IGFuIGFwcGxpY2F0aW9uIHRvCisgKiByZXNldCB0aGUgYnVmZmVyaW5nIGFmdGVyIGl0IGhhcyBiZWVuIHdyaXR0ZW4gdG8uICBXZSB0cnkgdG8gZG8gdGhpcyBiZWNhdXNlCisgKiBvdGhlcndpc2Ugd2UgbGVhdmUgc3Rkb3V0IGluIGJ1ZmZlcmVkIG1vZGUgYWZ0ZXIgZW5kd2luKCkgaXMgY2FsbGVkLiAgKFRoaXMKKyAqIGFsc28gaGFwcGVucyB3aXRoIFNWcjQgY3Vyc2VzKS4KKyAqCisgKiBUaGVyZSBhcmUgcHJvcy9jb25zOgorICoKKyAqIGNvbjoKKyAqCVRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHdlIGNhbiByZWVzdGFibGlzaCBidWZmZXJpbmcgb25jZSB3ZSd2ZQorICoJZHJvcHBlZCBpdC4KKyAqCisgKglXZSBfbWF5XyBsb3NlIGRhdGEgaWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvb3JkaW5hdGUgdGhpcyB3aXRoCisgKglmZmx1c2guCisgKgorICogcHJvOgorICoJQW4gaW1wbGVtZW50YXRpb24gaXMgbW9yZSBsaWtlbHkgdG8gcmVmdXNlIHRvIGNoYW5nZSB0aGUgYnVmZmVyaW5nIHRoYW4KKyAqCXRvIGRvIGl0IGluIG9uZSBvZiB0aGUgd2F5cyBtZW50aW9uZWQgYWJvdmUuCisgKgorICoJVGhlIGFsdGVybmF0aXZlIGlzIHRvIGhhdmUgdGhlIGFwcGxpY2F0aW9uIHRyeSB0byBjaGFuZ2UgYnVmZmVyaW5nCisgKglpdHNlbGYsIHdoaWNoIGlzIGNlcnRhaW5seSBubyBpbXByb3ZlbWVudC4KKyAqCisgKiBKdXN0IGluIGNhc2UgaXQgZG9lcyBub3Qgd29yayB3ZWxsIG9uIGEgcGFydGljdWxhciBzeXN0ZW0sIHRoZSBjYWxscyB0bworICogY2hhbmdlIGJ1ZmZlcmluZyBhcmUgYWxsIHZpYSB0aGUgbWFjcm8gTkNfQlVGRkVSRUQuICBTb21lIGltcGxlbWVudGF0aW9ucworICogZG8gaW5kZWVkIGdldCBjb25mdXNlZCBieSBjaGFuZ2luZyBzZXRidWYgb24vb2ZmLCBhbmQgd2lsbCBvdmVycnVuIHRoZQorICogYnVmZmVyLiAgU28gd2UgZGlzYWJsZSB0aGlzIGJ5IGRlZmF1bHQgKHRoZXJlIG1heSB5ZXQgYmUgYSB3b3JrYXJvdW5kKS4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zZXRfYnVmZmVyKEZJTEUgKm9mcCwgYm9vbCBidWZmZXJlZCkKK3sKKyAgICAvKiBvcHRpb25hbCBvcHRpbWl6YXRpb24gaGFjayAtLSBkbyBiZWZvcmUgYW55IG91dHB1dCB0byBvZnAgKi8KKyNpZiBIQVZFX1NFVFZCVUYgfHwgSEFWRV9TRVRCVUZGRVIKKyAgICBpZiAoU1AtPl9idWZmZXJlZCAhPSBidWZmZXJlZCkgeworCXVuc2lnbmVkIGJ1Zl9sZW47CisJY2hhciAqYnVmX3B0cjsKKworCWlmIChnZXRlbnYoIk5DVVJTRVNfTk9fU0VUQlVGIikgIT0gMCkKKwkgICAgcmV0dXJuOworCisJZmZsdXNoKG9mcCk7CisjaWZkZWYgX19ESkdQUF9fCisJc2V0bW9kZShvZnAsIE9fQklOQVJZKTsKKyNlbmRpZgorCWlmIChidWZmZXJlZCAhPSAwKSB7CisJICAgIGJ1Zl9sZW4gPSBtaW4oTElORVMgKiAoQ09MUyArIDYpLCAyODAwKTsKKwkgICAgaWYgKChidWZfcHRyID0gU1AtPl9zZXRidWYpID09IDApIHsKKwkJaWYgKChidWZfcHRyID0gdHlwZU1hbGxvYyhjaGFyLCBidWZfbGVuKSkgPT0gTlVMTCkKKwkJICAgICAgcmV0dXJuOworCQlTUC0+X3NldGJ1ZiA9IGJ1Zl9wdHI7CisJCS8qIERvbid0IHRyeSB0byBmcmVlIHRoaXMhICovCisJICAgIH0KKyNpZiAhVVNFX1NFVEJVRl8wCisJICAgIGVsc2UKKwkJcmV0dXJuOworI2VuZGlmCisJfSBlbHNlIHsKKyNpZiAhVVNFX1NFVEJVRl8wCisJICAgIHJldHVybjsKKyNlbHNlCisJICAgIGJ1Zl9sZW4gPSAwOworCSAgICBidWZfcHRyID0gMDsKKyNlbmRpZgorCX0KKworI2lmIEhBVkVfU0VUVkJVRgorI2lmZGVmIFNFVFZCVUZfUkVWRVJTRUQJCS8qIHByZS1zdnIzPyAqLworCSh2b2lkKSBzZXR2YnVmKG9mcCwgYnVmX3B0ciwgYnVmX2xlbiwgYnVmX2xlbiA/IF9JT0ZCRiA6IF9JT0xCRik7CisjZWxzZQorCSh2b2lkKSBzZXR2YnVmKG9mcCwgYnVmX3B0ciwgYnVmX2xlbiA/IF9JT0ZCRiA6IF9JT0xCRiwgYnVmX2xlbik7CisjZW5kaWYKKyNlbGlmIEhBVkVfU0VUQlVGRkVSCisJKHZvaWQpIHNldGJ1ZmZlcihvZnAsIGJ1Zl9wdHIsIChpbnQpIGJ1Zl9sZW4pOworI2VuZGlmCisKKwlTUC0+X2J1ZmZlcmVkID0gYnVmZmVyZWQ7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfU0VUVkJVRiB8fCBIQVZFX1NFVEJVRkZFUiAqLworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9zdHJpbmdzLmMgYi9uY3Vyc2VzL3RpbmZvL3N0cmluZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGNkMmVmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby9zdHJpbmdzLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfbXZjdXIuYworKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogc3RyaW5ncy5jLHYgMS42IDIwMDcvMDgvMTEgMTc6MTI6MTcgdG9tIEV4cCAkIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVzZWZ1bCBzdHJpbmcgZnVuY3Rpb25zIChlc3BlY2lhbGx5IGZvciBtdmN1cikKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIUhBVkVfU1RSU1RSCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfc3Ryc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCit7CisgICAgc2l6ZV90IGxlbjEgPSBzdHJsZW4oaGF5c3RhY2spOworICAgIHNpemVfdCBsZW4yID0gc3RybGVuKG5lZWRsZSk7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIHdoaWxlICgobGVuMSAhPSAwKSAmJiAobGVuMS0tID49IGxlbjIpKSB7CisJaWYgKCFzdHJuY21wKGhheXN0YWNrLCBuZWVkbGUsIGxlbjIpKSB7CisJICAgIHJlc3VsdCA9IChjaGFyICopIGhheXN0YWNrOworCSAgICBicmVhazsKKwl9CisJaGF5c3RhY2srKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBzbyB3ZSBjYW4gYXBwZW5kIHRvIGl0LiAgTm90ZSB0aGF0ICdzcmMnIG1heQorICogYmUgYSBudWxsIHBvaW50ZXIgKHNlZSBfbmNfc3RyX251bGwpLCBzbyB0aGUgY29ycmVzcG9uZGluZyBzdHJjYXQgYW5kCisgKiBzdHJjcHkgY2FsbHMgaGF2ZSB0byBhbGxvdyBmb3IgdGhpcy4KKyAqLworTkNVUlNFU19FWFBPUlQoc3RyaW5nX2Rlc2MgKikKK19uY19zdHJfaW5pdChzdHJpbmdfZGVzYyAqIGRzdCwgY2hhciAqc3JjLCBzaXplX3QgbGVuKQoreworICAgIGlmIChkc3QgIT0gMCkgeworCWRzdC0+c19oZWFkID0gc3JjOworCWRzdC0+c190YWlsID0gc3JjOworCWRzdC0+c19zaXplID0gbGVuIC0gMTsKKwlkc3QtPnNfaW5pdCA9IGRzdC0+c19zaXplOworCWlmIChzcmMgIT0gMCkKKwkgICAgKnNyYyA9IDA7CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIGZvciBvbmx5IHRyYWNraW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKHN0cmluZ19kZXNjICopCitfbmNfc3RyX251bGwoc3RyaW5nX2Rlc2MgKiBkc3QsIHNpemVfdCBsZW4pCit7CisgICAgcmV0dXJuIF9uY19zdHJfaW5pdChkc3QsIDAsIGxlbik7Cit9CisKKy8qCisgKiBDb3B5IGEgZGVzY3JpcHRvcgorICovCitOQ1VSU0VTX0VYUE9SVChzdHJpbmdfZGVzYyAqKQorX25jX3N0cl9jb3B5KHN0cmluZ19kZXNjICogZHN0LCBzdHJpbmdfZGVzYyAqIHNyYykKK3sKKyAgICAqZHN0ID0gKnNyYzsKKyAgICByZXR1cm4gZHN0OworfQorCisvKgorICogUmVwbGFjZXMgc3RyY2F0IGludG8gYSBmaXhlZCBidWZmZXIsIHJldHVybmluZyBmYWxzZSBvbiBmYWlsdXJlLgorICovCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX3NhZmVfc3RyY2F0KHN0cmluZ19kZXNjICogZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisgICAgaWYgKHNyYyAhPSAwKSB7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzcmMpOworCisJaWYgKGxlbiA8IGRzdC0+c19zaXplKSB7CisJICAgIGlmIChkc3QtPnNfdGFpbCAhPSAwKSB7CisJCXN0cmNweShkc3QtPnNfdGFpbCwgc3JjKTsKKwkJZHN0LT5zX3RhaWwgKz0gbGVuOworCSAgICB9CisJICAgIGRzdC0+c19zaXplIC09IGxlbjsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBSZXBsYWNlcyBzdHJjcHkgaW50byBhIGZpeGVkIGJ1ZmZlciwgcmV0dXJuaW5nIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitfbmNfc2FmZV9zdHJjcHkoc3RyaW5nX2Rlc2MgKiBkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgICBpZiAoc3JjICE9IDApIHsKKwlzaXplX3QgbGVuID0gc3RybGVuKHNyYyk7CisKKwlpZiAobGVuIDwgZHN0LT5zX3NpemUpIHsKKwkgICAgaWYgKGRzdC0+c19oZWFkICE9IDApIHsKKwkJc3RyY3B5KGRzdC0+c19oZWFkLCBzcmMpOworCQlkc3QtPnNfdGFpbCA9IGRzdC0+c19oZWFkICsgbGVuOworCSAgICB9CisJICAgIGRzdC0+c19zaXplID0gZHN0LT5zX2luaXQgLSBsZW47CisJICAgIHJldHVybiBUUlVFOworCX0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby90cmltX3NncjAuYyBiL25jdXJzZXMvdGluZm8vdHJpbV9zZ3IwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjOGY3NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vdHJpbV9zZ3IwLmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHRyaW1fc2dyMC5jLHYgMS44IDIwMDcvMDQvMDcgMTc6MTQ6MTEgdG9tIEV4cCAkIikKKworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgdHAtPgorCisjZGVmaW5lIENTSSAgICAgICAyMzMKKyNkZWZpbmUgRVNDICAgICAgIDAzMwkJLyogXlsgKi8KKyNkZWZpbmUgTF9CUkFDSyAgICdbJworCitzdGF0aWMgY2hhciAqCitzZXRfYXR0cmlidXRlXzkoVEVSTVRZUEUgKnRwLCBpbnQgZmxhZykKK3sKKyAgICBjb25zdCBjaGFyICpyZXN1bHQ7CisKKyAgICBpZiAoKHJlc3VsdCA9IHRwYXJtKHNldF9hdHRyaWJ1dGVzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBmbGFnKSkgPT0gMCkKKwlyZXN1bHQgPSAiIjsKKyAgICByZXR1cm4gc3RyZHVwKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQKK2lzX2NzaShjb25zdCBjaGFyICpzKQoreworICAgIGlmIChVQ2hhcihzWzBdKSA9PSBDU0kpCisJcmV0dXJuIDE7CisgICAgZWxzZSBpZiAoc1swXSA9PSBFU0MgJiYgc1sxXSA9PSBMX0JSQUNLKQorCXJldHVybiAyOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqCitza2lwX3plcm8oY2hhciAqcykKK3sKKyAgICBpZiAoc1swXSA9PSAnMCcpIHsKKwlpZiAoc1sxXSA9PSAnOycpCisJICAgIHMgKz0gMjsKKwllbHNlIGlmIChpc2FscGhhKFVDaGFyKHNbMV0pKSkKKwkgICAgcyArPSAxOworICAgIH0KKyAgICByZXR1cm4gczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc2tpcF9kZWxheShjb25zdCBjaGFyICpzKQoreworICAgIGlmIChzWzBdID09ICckJyAmJiBzWzFdID09ICc8JykgeworCXMgKz0gMjsKKwl3aGlsZSAoaXNkaWdpdChVQ2hhcigqcykpIHx8ICpzID09ICcvJykKKwkgICAgKytzOworCWlmICgqcyA9PSAnPicpCisJICAgICsrczsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBJbXByb3ZlIHNpbWlsYXJfc2dyIGEgbGl0dGxlIGJ5IG1vdmluZyB0aGUgYXR0ci1zdHJpbmcgZnJvbSB0aGUgYmVnaW5uaW5nCisgKiB0byB0aGUgZW5kIG9mIHRoZSBzLXN0cmluZy4KKyAqLworc3RhdGljIGJvb2wKK3Jld3JpdGVfc2dyKGNoYXIgKnMsIGNoYXIgKmF0dHIpCit7CisgICAgaWYgKFBSRVNFTlQocykpIHsKKwlpZiAoUFJFU0VOVChhdHRyKSkgeworCSAgICB1bnNpZ25lZCBsZW5fcyA9IHN0cmxlbihzKTsKKwkgICAgdW5zaWduZWQgbGVuX2EgPSBzdHJsZW4oYXR0cik7CisKKwkgICAgaWYgKGxlbl9zID4gbGVuX2EgJiYgIXN0cm5jbXAoYXR0ciwgcywgbGVuX2EpKSB7CisJCXVuc2lnbmVkIG47CisJCVRSKFRSQUNFX0RBVEFCQVNFLCAoInJld3JpdGU6XG5cdCVzIiwgcykpOworCQlmb3IgKG4gPSAwOyBuIDwgbGVuX3MgLSBsZW5fYTsgKytuKSB7CisJCSAgICBzW25dID0gc1tuICsgbGVuX2FdOworCQl9CisJCXN0cmNweShzICsgbiwgYXR0cik7CisJCVRSKFRSQUNFX0RBVEFCQVNFLCAoInRvOlxuXHQlcyIsIHMpKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOwkJLyogb29wcyAqLworfQorCitzdGF0aWMgYm9vbAorc2ltaWxhcl9zZ3IoY2hhciAqYSwgY2hhciAqYikKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworICAgIGludCBjc2lfYSA9IGlzX2NzaShhKTsKKyAgICBpbnQgY3NpX2IgPSBpc19jc2koYik7CisgICAgdW5zaWduZWQgbGVuX2E7CisgICAgdW5zaWduZWQgbGVuX2I7CisKKyAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJzaW1pbGFyX3Nncjpcblx0JXNcblx0JXMiLAorCQkJX25jX3Zpc2J1ZjIoMSwgYSksCisJCQlfbmNfdmlzYnVmMigyLCBiKSkpOworICAgIGlmIChjc2lfYSAhPSAwICYmIGNzaV9iICE9IDAgJiYgY3NpX2EgPT0gY3NpX2IpIHsKKwlhICs9IGNzaV9hOworCWIgKz0gY3NpX2I7CisJaWYgKCphICE9ICpiKSB7CisJICAgIGEgPSBza2lwX3plcm8oYSk7CisJICAgIGIgPSBza2lwX3plcm8oYik7CisJfQorICAgIH0KKyAgICBsZW5fYSA9IHN0cmxlbihhKTsKKyAgICBsZW5fYiA9IHN0cmxlbihiKTsKKyAgICBpZiAobGVuX2EgJiYgbGVuX2IpIHsKKwlpZiAobGVuX2EgPiBsZW5fYikKKwkgICAgcmVzdWx0ID0gKHN0cm5jbXAoYSwgYiwgbGVuX2IpID09IDApOworCWVsc2UKKwkgICAgcmVzdWx0ID0gKHN0cm5jbXAoYSwgYiwgbGVuX2EpID09IDApOworICAgIH0KKyAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCIuLi5zaW1pbGFyX3NncjogJWRcblx0JXNcblx0JXMiLCByZXN1bHQsCisJCQlfbmNfdmlzYnVmMigxLCBhKSwKKwkJCV9uY192aXNidWYyKDIsIGIpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkCitjaG9wX291dChjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGksIHVuc2lnbmVkIGopCit7CisgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgiY2hvcF9vdXQgJWQuLiVkIGZyb20gJXMiLCBpLCBqLCBfbmNfdmlzYnVmKHN0cmluZykpKTsKKyAgICB3aGlsZSAoc3RyaW5nW2pdICE9ICdcMCcpIHsKKwlzdHJpbmdbaSsrXSA9IHN0cmluZ1tqKytdOworICAgIH0KKyAgICBzdHJpbmdbaV0gPSAnXDAnOworICAgIHJldHVybiBpOworfQorCisvKgorICogQ29tcGFyZSwgaWdub3JpbmcgZGVsYXlzLiAgU29tZSBvZiB0aGUgZGVsYXkgdmFsdWVzIGFyZSBpbmNvbnNpc3RlbnQsIGFuZAorICogd2UgZG8gbm90IHdhbnQgdG8gYmUgc3RvcHBlZCBieSB0aGF0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyBmcm9tICdmdWxsJyB0aGF0IHdlIG1hdGNoZWQuICBJZiBhbnkgbWlzbWF0Y2gKKyAqIG9jY3VycywgcmV0dXJuIHplcm8uCisgKi8KK3N0YXRpYyBpbnQKK2NvbXBhcmVfcGFydChjb25zdCBjaGFyICpwYXJ0LCBjb25zdCBjaGFyICpmdWxsKQoreworICAgIGNvbnN0IGNoYXIgKm5leHRfcGFydDsKKyAgICBjb25zdCBjaGFyICpuZXh0X2Z1bGw7CisgICAgaW50IHVzZWRfZnVsbCA9IDA7CisgICAgaW50IHVzZWRfZGVsYXkgPSAwOworCisgICAgd2hpbGUgKCpwYXJ0ICE9IDApIHsKKwlpZiAoKnBhcnQgIT0gKmZ1bGwpIHsKKwkgICAgdXNlZF9mdWxsID0gMDsKKwkgICAgYnJlYWs7CisJfQorCisJLyoKKwkgKiBBZGp1c3QgdGhlIHJldHVybi12YWx1ZSB0byBhbGxvdyB0aGUgcmFyZSBjYXNlIG9mCisJICogICAgICBzdHJpbmc8ZGVsYXk+c3RyaW5nCisJICogdG8gcmVtb3ZlIHRoZSB3aG9sZSBwaWVjZS4gIFRoZSBtb3N0IGNvbW1vbiBjYXNlIGlzIGEgZGVsYXkgYXQgdGhlCisJICogZW5kIG9mIHRoZSBzdHJpbmcuICBUaGUgYWRqdXN0ZWQgc3RyaW5nIHdpbGwgcmV0YWluIHRoZSBkZWxheSwgd2hpY2gKKwkgKiBpcyBjb25zZXJ2YXRpdmUuCisJICovCisJaWYgKHVzZWRfZGVsYXkgIT0gMCkgeworCSAgICB1c2VkX2Z1bGwgKz0gdXNlZF9kZWxheTsKKwkgICAgdXNlZF9kZWxheSA9IDA7CisJfQorCWlmICgqcGFydCA9PSAnJCcgJiYgKmZ1bGwgPT0gJyQnKSB7CisJICAgIG5leHRfcGFydCA9IHNraXBfZGVsYXkocGFydCk7CisJICAgIG5leHRfZnVsbCA9IHNraXBfZGVsYXkoZnVsbCk7CisJICAgIGlmIChuZXh0X3BhcnQgIT0gcGFydCAmJiBuZXh0X2Z1bGwgIT0gZnVsbCkgeworCQl1c2VkX2RlbGF5ICs9IChuZXh0X2Z1bGwgLSBmdWxsKTsKKwkJZnVsbCA9IG5leHRfZnVsbDsKKwkJcGFydCA9IG5leHRfcGFydDsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisJKyt1c2VkX2Z1bGw7CisJKytwYXJ0OworCSsrZnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHVzZWRfZnVsbDsKK30KKworLyoKKyAqIFdoaWxlICdzZ3IwJyBpcyB0aGUgInNhbWUiIGFzIHRlcm1jYXAgJ21lJywgdGhlcmUgaXMgYSBjb21wYXRpYmlsaXR5IGlzc3VlLiAKKyAqIFRoZSBzZ3Ivc2dyMCBjYXBhYmlsaXRpZXMgaW5jbHVkZSBzZXR0aW5nL2NsZWFyaW5nIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisgKiBtb2RlLiAgQSB0ZXJtY2FwIGFwcGxpY2F0aW9uIGNhbm5vdCB1c2Ugc2dyLCBzbyBzZ3IwIHN0cmluZ3MgdGhhdCByZXNldAorICogYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgbW9kZSB3aWxsIGJlIG1pc2ludGVycHJldGVkLiAgSGVyZSwgd2UgcmVtb3ZlIHRob3NlCisgKiBmcm9tIHRoZSBtb3JlIGNvbW1vbiBJU08vQU5TSS9WVDEwMCBlbnRyaWVzLCB3aGljaCBoYXZlIHNncjAgYWdyZWVpbmcgd2l0aAorICogc2dyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbW9kaWZpZWQgc2dyMCBpZiBpdCBjYW4gYmUgbW9kaWZpZWQsIGEgbnVsbCBpZgorICogYW4gZXJyb3Igb2NjdXJzLCBvciB0aGUgb3JpZ2luYWwgc2dyMCBpZiBubyBjaGFuZ2UgaXMgbmVlZGVkLgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdHJpbV9zZ3IwKFRFUk1UWVBFICp0cCkKK3sKKyAgICBjaGFyICpyZXN1bHQgPSBleGl0X2F0dHJpYnV0ZV9tb2RlOworCisgICAgVCgoVF9DQUxMRUQoIl9uY190cmltX3NncjAoKSIpKSk7CisKKyAgICBpZiAoUFJFU0VOVChleGl0X2F0dHJpYnV0ZV9tb2RlKQorCSYmIFBSRVNFTlQoc2V0X2F0dHJpYnV0ZXMpKSB7CisJYm9vbCBmb3VuZCA9IEZBTFNFOworCWNoYXIgKm9uID0gc2V0X2F0dHJpYnV0ZV85KHRwLCAxKTsKKwljaGFyICpvZmYgPSBzZXRfYXR0cmlidXRlXzkodHAsIDApOworCWNoYXIgKmVuZCA9IHN0cmR1cChleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKwljaGFyICp0bXA7CisJc2l6ZV90IGksIGosIGs7CisKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJjaGVja2luZyBpZiB3ZSBjYW4gdHJpbSBzZ3IwIGJhc2VkIG9uIHNnciIpKTsKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJzZ3IwICAgICAgICVzIiwgX25jX3Zpc2J1ZihlbmQpKSk7CisJVFIoVFJBQ0VfREFUQUJBU0UsICgic2dyKDk6b2ZmKSAlcyIsIF9uY192aXNidWYob2ZmKSkpOworCVRSKFRSQUNFX0RBVEFCQVNFLCAoInNncig5Om9uKSAgJXMiLCBfbmNfdmlzYnVmKG9uKSkpOworCisJaWYgKCFyZXdyaXRlX3NncihvbiwgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSkKKwkgICAgfHwgIXJld3JpdGVfc2dyKG9mZiwgZXhpdF9hbHRfY2hhcnNldF9tb2RlKQorCSAgICB8fCAhcmV3cml0ZV9zZ3IoZW5kLCBleGl0X2FsdF9jaGFyc2V0X21vZGUpKSB7CisJICAgIEZyZWVJZk5lZWRlZChvZmYpOworCX0gZWxzZSBpZiAoc2ltaWxhcl9zZ3Iob2ZmLCBlbmQpCisJCSAgICYmICFzaW1pbGFyX3NncihvZmYsIG9uKSkgeworCSAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJhZGp1c3Rpbmcgc2dyKDk6b2ZmKSA6ICVzIiwgX25jX3Zpc2J1ZihvZmYpKSk7CisJICAgIHJlc3VsdCA9IG9mZjsKKwkgICAgLyoKKwkgICAgICogSWYgcm1hY3MgaXMgYSBzdWJzdHJpbmcgb2Ygc2dyKDApLCByZW1vdmUgdGhhdCBjaHVuay4KKwkgICAgICovCisJICAgIGlmIChleGl0X2FsdF9jaGFyc2V0X21vZGUgIT0gMCkgeworCQlUUihUUkFDRV9EQVRBQkFTRSwgKCJzY2FuIGZvciBybWFjcyAlcyIsIF9uY192aXNidWYoZXhpdF9hbHRfY2hhcnNldF9tb2RlKSkpOworCQlqID0gc3RybGVuKG9mZik7CisJCWsgPSBzdHJsZW4oZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKwkJaWYgKGogPiBrKSB7CisJCSAgICBmb3IgKGkgPSAwOyBpIDw9IChqIC0gayk7ICsraSkgeworCQkJaW50IGsyID0gY29tcGFyZV9wYXJ0KGV4aXRfYWx0X2NoYXJzZXRfbW9kZSwgb2ZmICsgaSk7CisJCQlpZiAoazIgIT0gMCkgeworCQkJICAgIGZvdW5kID0gVFJVRTsKKwkJCSAgICBjaG9wX291dChvZmYsIGksIGkgKyBrMik7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICAvKgorCSAgICAgKiBTR1IgMTAgd291bGQgcmVzZXQgdG8gbm9ybWFsIGZvbnQuCisJICAgICAqLworCSAgICBpZiAoIWZvdW5kKSB7CisJCWlmICgoaSA9IGlzX2NzaShvZmYpKSAhPSAwCisJCSAgICAmJiBvZmZbc3RybGVuKG9mZikgLSAxXSA9PSAnbScpIHsKKwkJICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoImxvb2tpbmcgZm9yIFNHUiAxMCBpbiAlcyIsCisJCQkJCV9uY192aXNidWYob2ZmKSkpOworCQkgICAgdG1wID0gc2tpcF96ZXJvKG9mZiArIGkpOworCQkgICAgaWYgKHRtcFswXSA9PSAnMScKKwkJCSYmIHNraXBfemVybyh0bXAgKyAxKSAhPSB0bXAgKyAxKSB7CisJCQlpID0gdG1wIC0gb2ZmOworCQkJaWYgKG9mZltpIC0gMV0gPT0gJzsnKQorCQkJICAgIGktLTsKKwkJCWogPSBza2lwX3plcm8odG1wICsgMSkgLSBvZmY7CisJCQlpID0gY2hvcF9vdXQob2ZmLCBpLCBqKTsKKwkJCWZvdW5kID0gVFJVRTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGlmICghZm91bmQKKwkJJiYgKHRtcCA9IHN0cnN0cihlbmQsIG9mZikpICE9IDAKKwkJJiYgc3RyY21wKGVuZCwgb2ZmKSAhPSAwKSB7CisJCWkgPSB0bXAgLSBlbmQ7CisJCWogPSBzdHJsZW4ob2ZmKTsKKwkJdG1wID0gc3RyZHVwKGVuZCk7CisJCWNob3Bfb3V0KHRtcCwgaSwgaik7CisJCWZyZWUob2ZmKTsKKwkJcmVzdWx0ID0gdG1wOworCSAgICB9CisJICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoIi4uLmFkanVzdGVkIHNncjAgOiAlcyIsIF9uY192aXNidWYocmVzdWx0KSkpOworCSAgICBpZiAoIXN0cmNtcChyZXN1bHQsIGV4aXRfYXR0cmlidXRlX21vZGUpKSB7CisJCVRSKFRSQUNFX0RBVEFCQVNFLCAoIi4uLnNhbWUgcmVzdWx0LCBkaXNjYXJkIikpOworCQlmcmVlKHJlc3VsdCk7CisJCXJlc3VsdCA9IGV4aXRfYXR0cmlidXRlX21vZGU7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICAvKgorCSAgICAgKiBFaXRoZXIgdGhlIHNnciBkb2VzIG5vdCByZWZlcmVuY2UgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQsCisJICAgICAqIG9yIGl0IGlzIGluY29ycmVjdC4gIFRoYXQncyB0b28gaGFyZCB0byBkZWNpZGUgcmlnaHQgbm93LgorCSAgICAgKi8KKwkgICAgZnJlZShvZmYpOworCX0KKwlGcmVlSWZOZWVkZWQoZW5kKTsKKwlGcmVlSWZOZWVkZWQob24pOworICAgIH0gZWxzZSB7CisJLyoKKwkgKiBQb3NzaWJseSBzb21lIGFwcGxpY2F0aW9ucyBhcmUgY29uZnVzZWQgaWYgc2dyMCBjb250YWlucyBybWFjcywKKwkgKiBidXQgdGhhdCB3b3VsZCBiZSBhIGRpZmZlcmVudCBidWcgcmVwb3J0IC1URAorCSAqLworICAgIH0KKworICAgIHJldHVyblB0cihyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby91c2Vfc2NyZWVuLmMgYi9uY3Vyc2VzL3RpbmZvL3VzZV9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzNiMTJmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90aW5mby91c2Vfc2NyZWVuLmMKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAyMDA3ICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiB1c2Vfc2NyZWVuLmMsdiAxLjYgMjAwOC8wNi8wNyAxOToxNjo1NiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit1c2Vfc2NyZWVuKFNDUkVFTiAqc2NyZWVuLCBOQ1VSU0VTX1NDUkVFTl9DQiBmdW5jLCB2b2lkICpkYXRhKQoreworICAgIFNDUkVFTiAqc2F2ZV9TUDsKKyAgICBpbnQgY29kZSA9IE9LOworCisgICAgVCgoVF9DQUxMRUQoInVzZV9zY3JlZW4oJXAsJXAsJXApIiksIHNjcmVlbiwgZnVuYywgZGF0YSkpOworCisgICAgLyoKKyAgICAgKiBGSVhNRSAtIGFkZCBhIGZsYWcgc28gYSBnaXZlbiB0aHJlYWQgY2FuIGNoZWNrIGlmIF9pdF8gaGFzIGFscmVhZHkKKyAgICAgKiByZWN1cnJlZCB0aHJvdWdoIHRoaXMgcG9pbnQsIHJldHVybiBhbiBlcnJvciBpZiBzby4KKyAgICAgKi8KKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICBzYXZlX1NQID0gU1A7CisgICAgc2V0X3Rlcm0oc2NyZWVuKTsKKworICAgIGNvZGUgPSBmdW5jKHNjcmVlbiwgZGF0YSk7CisKKyAgICBzZXRfdGVybShzYXZlX1NQKTsKKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RpbmZvL3dyaXRlX2VudHJ5LmMgYi9uY3Vyc2VzL3RpbmZvL3dyaXRlX2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzYmIyMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdGluZm8vd3JpdGVfZW50cnkuYwpAQCAtMCwwICsxLDc4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJd3JpdGVfZW50cnkuYyAtLSB3cml0ZSBhIHRlcm1pbmZvIHN0cnVjdHVyZSBvbnRvIHRoZSBmaWxlIHN5c3RlbQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGhhc2hlZF9kYi5oPgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworI2lmbmRlZiBTX0lTRElSCisjZGVmaW5lIFNfSVNESVIobW9kZSkgKChtb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKQorI2VuZGlmCisKKyNpZiAxCisjZGVmaW5lIFRSQUNFX09VVChwKSBERUJVRygyLCBwKQorI2Vsc2UKKyNkZWZpbmUgVFJBQ0VfT1VUKHApCQkvKm5vdGhpbmcgKi8KKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogd3JpdGVfZW50cnkuYyx2IDEuNzIgMjAwOC8wOC8wMyAxOToyNDowMCB0b20gRXhwICQiKQorCitzdGF0aWMgaW50IHRvdGFsX3dyaXR0ZW47CisKK3N0YXRpYyBpbnQgbWFrZV9kYl9yb290KGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IHdyaXRlX29iamVjdChURVJNVFlQRSAqLCBjaGFyICosIHVuc2lnbmVkICosIHVuc2lnbmVkKTsKKworI2lmICFVU0VfSEFTSEVEX0RCCitzdGF0aWMgdm9pZAord3JpdGVfZmlsZShjaGFyICpmaWxlbmFtZSwgVEVSTVRZUEUgKnRwKQoreworICAgIGNoYXIgYnVmZmVyW01BWF9FTlRSWV9TSVpFXTsKKyAgICB1bnNpZ25lZCBsaW1pdCA9IHNpemVvZihidWZmZXIpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisKKyAgICBGSUxFICpmcCA9IChfbmNfYWNjZXNzKGZpbGVuYW1lLCBXX09LKSA9PSAwKSA/IGZvcGVuKGZpbGVuYW1lLCAid2IiKSA6IDA7CisgICAgaWYgKGZwID09IDApIHsKKwlwZXJyb3IoZmlsZW5hbWUpOworCV9uY19zeXNlcnJfYWJvcnQoImNhbid0IG9wZW4gJXMvJXMiLCBfbmNfdGljX2RpcigwKSwgZmlsZW5hbWUpOworICAgIH0KKyAgICBERUJVRygxLCAoIkNyZWF0ZWQgJXMiLCBmaWxlbmFtZSkpOworCisgICAgaWYgKHdyaXRlX29iamVjdCh0cCwgYnVmZmVyLCAmb2Zmc2V0LCBsaW1pdCkgPT0gRVJSCisJfHwgZndyaXRlKGJ1ZmZlciwgc2l6ZW9mKGNoYXIpLCBvZmZzZXQsIGZwKSAhPSBvZmZzZXQpIHsKKwlfbmNfc3lzZXJyX2Fib3J0KCJlcnJvciB3cml0aW5nICVzLyVzIiwgX25jX3RpY19kaXIoMCksIGZpbGVuYW1lKTsKKyAgICB9CisKKyAgICBmY2xvc2UoZnApOworfQorCisvKgorICogQ2hlY2sgZm9yIGFjY2VzcyByaWdodHMgdG8gZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKKyAqIENyZWF0ZSBhbnkgZGlyZWN0b3JpZXMgd2hpY2ggZG9uJ3QgZXhpc3QuCisgKgorICogTm90ZTogIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIG1ha2VfZGJfcm9vdCgpLCBzaW5jZQorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBpbiBpbnN0YW5jZXMgd2hlcmUgdGhhdCBoYXMgdG8gc3VjY2VlZC4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3dyaXRlYWJsZShpbnQgY29kZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBkaXJuYW1lc1tdID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjsKKyAgICBzdGF0aWMgYm9vbCB2ZXJpZmllZFtzaXplb2YoZGlybmFtZXMpXTsKKworICAgIGNoYXIgZGlyW3NpemVvZihMRUFGX0ZNVCldOworICAgIGNoYXIgKnMgPSAwOworCisgICAgaWYgKGNvZGUgPT0gMCB8fCAocyA9IHN0cmNocihkaXJuYW1lcywgY29kZSkpID09IDApCisJX25jX2Vycl9hYm9ydCgiSWxsZWdhbCB0ZXJtaW5mbyBzdWJkaXJlY3RvcnkgXCIiIExFQUZfRk1UICJcIiIsIGNvZGUpOworCisgICAgaWYgKHZlcmlmaWVkW3MgLSBkaXJuYW1lc10pCisJcmV0dXJuOworCisgICAgc3ByaW50ZihkaXIsIExFQUZfRk1ULCBjb2RlKTsKKyAgICBpZiAobWFrZV9kYl9yb290KGRpcikgPCAwKSB7CisJX25jX2Vycl9hYm9ydCgiJXMvJXM6IHBlcm1pc3Npb24gZGVuaWVkIiwgX25jX3RpY19kaXIoMCksIGRpcik7CisgICAgfQorCisgICAgdmVyaWZpZWRbcyAtIGRpcm5hbWVzXSA9IFRSVUU7Cit9CisjZW5kaWYgLyogIVVTRV9IQVNIRURfREIgKi8KKworc3RhdGljIGludAorbWFrZV9kYl9wYXRoKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsaW1pdCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBjb25zdCBjaGFyICp0b3AgPSBfbmNfdGljX2RpcigwKTsKKworICAgIGlmIChzcmMgPT0gdG9wIHx8IF9uY19pc19hYnNfcGF0aChzcmMpKSB7CisJaWYgKHN0cmxlbihzcmMpICsgMSA8PSBsaW1pdCkgeworCSAgICAodm9pZCkgc3RyY3B5KGRzdCwgc3JjKTsKKwkgICAgcmMgPSAwOworCX0KKyAgICB9IGVsc2UgeworCWlmIChzdHJsZW4odG9wKSArIHN0cmxlbihzcmMpICsgMiA8PSBsaW1pdCkgeworCSAgICAodm9pZCkgc3ByaW50Zihkc3QsICIlcy8lcyIsIHRvcCwgc3JjKTsKKwkgICAgcmMgPSAwOworCX0KKyAgICB9CisjaWYgVVNFX0hBU0hFRF9EQgorICAgIGlmIChyYyA9PSAwKSB7CisJaWYgKF9uY19pc19kaXJfcGF0aChkc3QpKSB7CisJICAgIHJjID0gLTE7CisJfSBlbHNlIHsKKwkgICAgdW5zaWduZWQgaGF2ZSA9IHN0cmxlbihkc3QpOworCSAgICBpZiAoaGF2ZSA+IDMgJiYgc3RyY21wKGRzdCArIGhhdmUgLSAzLCBEQk1fU1VGRklYKSkgeworCQlpZiAoaGF2ZSArIDMgPD0gbGltaXQpCisJCSAgICBzdHJjYXQoZHN0LCBEQk1fU1VGRklYKTsKKwkJZWxzZQorCQkgICAgcmMgPSAtMTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBNYWtlIGEgZGF0YWJhc2Utcm9vdCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICovCitzdGF0aWMgaW50CittYWtlX2RiX3Jvb3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciBmdWxscGF0aFtQQVRIX01BWF07CisKKyAgICBpZiAoKHJjID0gbWFrZV9kYl9wYXRoKGZ1bGxwYXRoLCBwYXRoLCBzaXplb2YoZnVsbHBhdGgpKSkgPT0gMCkgeworI2lmIFVTRV9IQVNIRURfREIKKwlEQiAqY2FwZGJwOworCisJaWYgKChjYXBkYnAgPSBfbmNfZGJfb3BlbihmdWxscGF0aCwgVFJVRSkpID09IE5VTEwpCisJICAgIHJjID0gLTE7CisJZWxzZSBpZiAoX25jX2RiX2Nsb3NlKGNhcGRicCkgPCAwKQorCSAgICByYyA9IC0xOworI2Vsc2UKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJaWYgKChyYyA9IHN0YXQocGF0aCwgJnN0YXRidWYpKSA8IDApIHsKKwkgICAgcmMgPSBta2RpcihwYXRoLCAwNzc3KTsKKwl9IGVsc2UgaWYgKF9uY19hY2Nlc3MocGF0aCwgUl9PSyB8IFdfT0sgfCBYX09LKSA8IDApIHsKKwkgICAgcmMgPSAtMTsJCS8qIHBlcm1pc3Npb24gZGVuaWVkICovCisJfSBlbHNlIGlmICghKFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkpIHsKKwkgICAgcmMgPSAtMTsJCS8qIG5vdCBhIGRpcmVjdG9yeSAqLworCX0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBTZXQgdGhlIHdyaXRlIGRpcmVjdG9yeSBmb3IgY29tcGlsZWQgZW50cmllcy4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zZXRfd3JpdGVkaXIoY2hhciAqZGlyKQoreworICAgIGNvbnN0IGNoYXIgKmRlc3RpbmF0aW9uOworICAgIGNoYXIgYWN0dWFsW1BBVEhfTUFYXTsKKworICAgIGlmIChkaXIgPT0gMAorCSYmIHVzZV90ZXJtaW5mb192YXJzKCkpCisJZGlyID0gZ2V0ZW52KCJURVJNSU5GTyIpOworCisgICAgaWYgKGRpciAhPSAwKQorCSh2b2lkKSBfbmNfdGljX2RpcihkaXIpOworCisgICAgZGVzdGluYXRpb24gPSBfbmNfdGljX2RpcigwKTsKKyAgICBpZiAobWFrZV9kYl9yb290KGRlc3RpbmF0aW9uKSA8IDApIHsKKwljaGFyICpob21lID0gX25jX2hvbWVfdGVybWluZm8oKTsKKworCWlmIChob21lICE9IDApIHsKKwkgICAgZGVzdGluYXRpb24gPSBob21lOworCSAgICBpZiAobWFrZV9kYl9yb290KGRlc3RpbmF0aW9uKSA8IDApCisJCV9uY19lcnJfYWJvcnQoIiVzOiBwZXJtaXNzaW9uIGRlbmllZCAoZXJybm8gJWQpIiwKKwkJCSAgICAgIGRlc3RpbmF0aW9uLCBlcnJubyk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogTm90ZTogYmVjYXVzZSBvZiB0aGlzIGNvZGUsIHRoaXMgbG9naWMgc2hvdWxkIGJlIGV4ZXJjaXNlZAorICAgICAqICpvbmNlIG9ubHkqIHBlciBydW4uCisgICAgICovCisjaWYgVVNFX0hBU0hFRF9EQgorICAgIG1ha2VfZGJfcGF0aChhY3R1YWwsIGRlc3RpbmF0aW9uLCBzaXplb2YoYWN0dWFsKSk7CisjZWxzZQorICAgIGlmIChjaGRpcihfbmNfdGljX2RpcihkZXN0aW5hdGlvbikpIDwgMAorCXx8IGdldGN3ZChhY3R1YWwsIHNpemVvZihhY3R1YWwpKSA9PSAwKQorCV9uY19lcnJfYWJvcnQoIiVzOiBub3QgYSBkaXJlY3RvcnkiLCBkZXN0aW5hdGlvbik7CisjZW5kaWYKKyAgICBfbmNfa2VlcF90aWNfZGlyKHN0cmR1cChhY3R1YWwpKTsKK30KKworLyoKKyAqCVNhdmUgdGhlIGNvbXBpbGVkIHZlcnNpb24gb2YgYSBkZXNjcmlwdGlvbiBpbiB0aGUgZmlsZXN5c3RlbS4KKyAqCisgKgltYWtlIGEgY29weSBvZiB0aGUgbmFtZS1saXN0CisgKglicmVhayBpdCB1cCBpbnRvIGZpcnN0LW5hbWUgYW5kIGFsbC1idXQtbGFzdC1uYW1lCisgKgljcmVhdChmaXJzdC1uYW1lKQorICoJd3JpdGUgb2JqZWN0IGluZm9ybWF0aW9uIHRvIGZpcnN0LW5hbWUKKyAqCWNsb3NlKGZpcnN0LW5hbWUpCisgKiAgICAgIGZvciBlYWNoIG5hbWUgaW4gYWxsLWJ1dC1sYXN0LW5hbWUKKyAqCSAgICBsaW5rIHRvIGZpcnN0LW5hbWUKKyAqCisgKglVc2luZyAndGltZSgpJyB0byBvYnRhaW4gYSByZWZlcmVuY2UgZm9yIGZpbGUgdGltZXN0YW1wcyBpcyB1bnJlbGlhYmxlLAorICoJZS5nLiwgd2l0aCBORlMsIGJlY2F1c2UgdGhlIGZpbGVzeXN0ZW0gbWF5IGhhdmUgYSBkaWZmZXJlbnQgdGltZQorICoJcmVmZXJlbmNlLiAgV2UgY2hlY2sgZm9yIHByZS1leGlzdGVuY2Ugb2YgbGlua3MgYnkgbGF0Y2hpbmcgdGhlIGZpcnN0CisgKgl0aW1lc3RhbXAgZnJvbSBhIGZpbGUgdGhhdCB3ZSBjcmVhdGUuCisgKgorICoJVGhlIF9uY193YXJuaW5nKCkgY2FsbHMgd2lsbCByZXBvcnQgYSBjb3JyZWN0IGxpbmUgbnVtYmVyIG9ubHkgaWYKKyAqCV9uY19jdXJyX2xpbmUgaXMgcHJvcGVybHkgc2V0IGJlZm9yZSB0aGUgd3JpdGVfZW50cnkoKSBjYWxsLgorICovCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfd3JpdGVfZW50cnkoVEVSTVRZUEUgKmNvbnN0IHRwKQoreworI2lmIFVTRV9IQVNIRURfREIKKworICAgIGNoYXIgYnVmZmVyW01BWF9FTlRSWV9TSVpFICsgMV07CisgICAgdW5zaWduZWQgbGltaXQgPSBzaXplb2YoYnVmZmVyKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworCisjZWxzZSAvKiAhVVNFX0hBU0hFRF9EQiAqLworCisgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgICBjaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKyAgICBjaGFyIGxpbmtuYW1lW1BBVEhfTUFYXTsKKyNpZiBVU0VfU1lNTElOS1MKKyAgICBjaGFyIHN5bWxpbmtuYW1lW1BBVEhfTUFYXTsKKyNpZiAhSEFWRV9MSU5LCisjdW5kZWYgSEFWRV9MSU5LCisjZGVmaW5lIEhBVkVfTElOSyAxCisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfU1lNTElOS1MgKi8KKworICAgIHN0YXRpYyBpbnQgY2FsbF9jb3VudDsKKyAgICBzdGF0aWMgdGltZV90IHN0YXJ0X3RpbWU7CS8qIHRpbWUgYXQgc3RhcnQgb2Ygd3JpdGVzICovCisKKyNlbmRpZiAvKiBVU0VfSEFTSEVEX0RCICovCisKKyAgICBjaGFyIG5hbWVfbGlzdFtNQVhfVEVSTUlORk9fTEVOR1RIXTsKKyAgICBjaGFyICpmaXJzdF9uYW1lLCAqb3RoZXJfbmFtZXM7CisgICAgY2hhciAqcHRyOworCisgICAgYXNzZXJ0KHN0cmxlbih0cC0+dGVybV9uYW1lcykgIT0gMCk7CisgICAgYXNzZXJ0KHN0cmxlbih0cC0+dGVybV9uYW1lcykgPCBzaXplb2YobmFtZV9saXN0KSk7CisKKyAgICAodm9pZCkgc3RyY3B5KG5hbWVfbGlzdCwgdHAtPnRlcm1fbmFtZXMpOworICAgIERFQlVHKDcsICgiTmFtZSBsaXN0ID0gJyVzJyIsIG5hbWVfbGlzdCkpOworCisgICAgZmlyc3RfbmFtZSA9IG5hbWVfbGlzdDsKKworICAgIHB0ciA9ICZuYW1lX2xpc3Rbc3RybGVuKG5hbWVfbGlzdCkgLSAxXTsKKyAgICBvdGhlcl9uYW1lcyA9IHB0ciArIDE7CisKKyAgICB3aGlsZSAocHRyID4gbmFtZV9saXN0ICYmICpwdHIgIT0gJ3wnKQorCXB0ci0tOworCisgICAgaWYgKHB0ciAhPSBuYW1lX2xpc3QpIHsKKwkqcHRyID0gJ1wwJzsKKworCWZvciAocHRyID0gbmFtZV9saXN0OyAqcHRyICE9ICdcMCcgJiYgKnB0ciAhPSAnfCc7IHB0cisrKQorCSAgICBjb250aW51ZTsKKworCWlmICgqcHRyID09ICdcMCcpCisJICAgIG90aGVyX25hbWVzID0gcHRyOworCWVsc2UgeworCSAgICAqcHRyID0gJ1wwJzsKKwkgICAgb3RoZXJfbmFtZXMgPSBwdHIgKyAxOworCX0KKyAgICB9CisKKyAgICBERUJVRyg3LCAoIkZpcnN0IG5hbWUgPSAnJXMnIiwgZmlyc3RfbmFtZSkpOworICAgIERFQlVHKDcsICgiT3RoZXIgbmFtZXMgPSAnJXMnIiwgb3RoZXJfbmFtZXMpKTsKKworICAgIF9uY19zZXRfdHlwZShmaXJzdF9uYW1lKTsKKworI2lmIFVTRV9IQVNIRURfREIKKyAgICBpZiAod3JpdGVfb2JqZWN0KHRwLCBidWZmZXIgKyAxLCAmb2Zmc2V0LCBsaW1pdCAtIDEpICE9IEVSUikgeworCURCICpjYXBkYiA9IF9uY19kYl9vcGVuKF9uY190aWNfZGlyKDApLCBUUlVFKTsKKwlEQlQga2V5LCBkYXRhOworCisJaWYgKGNhcGRiICE9IDApIHsKKwkgICAgYnVmZmVyWzBdID0gMDsKKworCSAgICBtZW1zZXQoJmtleSwgMCwgc2l6ZW9mKGtleSkpOworCSAgICBrZXkuZGF0YSA9IHRwLT50ZXJtX25hbWVzOworCSAgICBrZXkuc2l6ZSA9IHN0cmxlbih0cC0+dGVybV9uYW1lcyk7CisKKwkgICAgbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCSAgICBkYXRhLmRhdGEgPSBidWZmZXI7CisJICAgIGRhdGEuc2l6ZSA9IG9mZnNldCArIDE7CisKKwkgICAgX25jX2RiX3B1dChjYXBkYiwgJmtleSwgJmRhdGEpOworCisJICAgIGJ1ZmZlclswXSA9IDI7CisKKwkgICAga2V5LmRhdGEgPSBuYW1lX2xpc3Q7CisJICAgIGtleS5zaXplID0gc3RybGVuKG5hbWVfbGlzdCk7CisKKwkgICAgc3RyY3B5KGJ1ZmZlciArIDEsIHRwLT50ZXJtX25hbWVzKTsKKwkgICAgZGF0YS5zaXplID0gc3RybGVuKHRwLT50ZXJtX25hbWVzKSArIDE7CisKKwkgICAgX25jX2RiX3B1dChjYXBkYiwgJmtleSwgJmRhdGEpOworCisJICAgIHdoaWxlICgqb3RoZXJfbmFtZXMgIT0gJ1wwJykgeworCQlwdHIgPSBvdGhlcl9uYW1lcysrOworCQl3aGlsZSAoKm90aGVyX25hbWVzICE9ICd8JyAmJiAqb3RoZXJfbmFtZXMgIT0gJ1wwJykKKwkJICAgIG90aGVyX25hbWVzKys7CisKKwkJaWYgKCpvdGhlcl9uYW1lcyAhPSAnXDAnKQorCQkgICAgKihvdGhlcl9uYW1lcysrKSA9ICdcMCc7CisKKwkJa2V5LmRhdGEgPSBwdHI7CisJCWtleS5zaXplID0gc3RybGVuKHB0cik7CisKKwkJX25jX2RiX3B1dChjYXBkYiwgJmtleSwgJmRhdGEpOworCSAgICB9CisJICAgIF9uY19kYl9jbG9zZShjYXBkYik7CisJfQorICAgIH0KKyNlbHNlIC8qICFVU0VfSEFTSEVEX0RCICovCisgICAgaWYgKGNhbGxfY291bnQrKyA9PSAwKSB7CisJc3RhcnRfdGltZSA9IDA7CisgICAgfQorCisgICAgaWYgKHN0cmxlbihmaXJzdF9uYW1lKSA+PSBzaXplb2YoZmlsZW5hbWUpIC0gMykKKwlfbmNfd2FybmluZygidGVybWluYWwgbmFtZSB0b28gbG9uZy4iKTsKKworICAgIHNwcmludGYoZmlsZW5hbWUsIExFQUZfRk1UICIvJXMiLCBmaXJzdF9uYW1lWzBdLCBmaXJzdF9uYW1lKTsKKworICAgIC8qCisgICAgICogSGFzIHRoaXMgcHJpbWFyeSBuYW1lIGJlZW4gd3JpdHRlbiBzaW5jZSB0aGUgZmlyc3QgY2FsbCB0bworICAgICAqIHdyaXRlX2VudHJ5KCk/ICBJZiBzbywgdGhlIG5ld2VyIHdyaXRlIHdpbGwgc3RlcCBvbiB0aGUgb2xkZXIsCisgICAgICogc28gd2FybiB0aGUgdXNlci4KKyAgICAgKi8KKyAgICBpZiAoc3RhcnRfdGltZSA+IDAgJiYKKwlzdGF0KGZpbGVuYW1lLCAmc3RhdGJ1ZikgPj0gMAorCSYmIHN0YXRidWYuc3RfbXRpbWUgPj0gc3RhcnRfdGltZSkgeworCV9uY193YXJuaW5nKCJuYW1lIG11bHRpcGx5IGRlZmluZWQuIik7CisgICAgfQorCisgICAgY2hlY2tfd3JpdGVhYmxlKGZpcnN0X25hbWVbMF0pOworICAgIHdyaXRlX2ZpbGUoZmlsZW5hbWUsIHRwKTsKKworICAgIGlmIChzdGFydF90aW1lID09IDApIHsKKwlpZiAoc3RhdChmaWxlbmFtZSwgJnN0YXRidWYpIDwgMAorCSAgICB8fCAoc3RhcnRfdGltZSA9IHN0YXRidWYuc3RfbXRpbWUpID09IDApIHsKKwkgICAgX25jX3N5c2Vycl9hYm9ydCgiZXJyb3Igb2J0YWluaW5nIHRpbWUgZnJvbSAlcy8lcyIsCisJCQkgICAgIF9uY190aWNfZGlyKDApLCBmaWxlbmFtZSk7CisJfQorICAgIH0KKyAgICB3aGlsZSAoKm90aGVyX25hbWVzICE9ICdcMCcpIHsKKwlwdHIgPSBvdGhlcl9uYW1lcysrOworCWFzc2VydChwdHIgPCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSAtIDEpOworCXdoaWxlICgqb3RoZXJfbmFtZXMgIT0gJ3wnICYmICpvdGhlcl9uYW1lcyAhPSAnXDAnKQorCSAgICBvdGhlcl9uYW1lcysrOworCisJaWYgKCpvdGhlcl9uYW1lcyAhPSAnXDAnKQorCSAgICAqKG90aGVyX25hbWVzKyspID0gJ1wwJzsKKworCWlmIChzdHJsZW4ocHRyKSA+IHNpemVvZihsaW5rbmFtZSkgLSAzKSB7CisJICAgIF9uY193YXJuaW5nKCJ0ZXJtaW5hbCBhbGlhcyAlcyB0b28gbG9uZy4iLCBwdHIpOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKHN0cmNocihwdHIsICcvJykgIT0gMCkgeworCSAgICBfbmNfd2FybmluZygiY2Fubm90IGxpbmsgYWxpYXMgJXMuIiwgcHRyKTsKKwkgICAgY29udGludWU7CisJfQorCisJY2hlY2tfd3JpdGVhYmxlKHB0clswXSk7CisJc3ByaW50ZihsaW5rbmFtZSwgTEVBRl9GTVQgIi8lcyIsIHB0clswXSwgcHRyKTsKKworCWlmIChzdHJjbXAoZmlsZW5hbWUsIGxpbmtuYW1lKSA9PSAwKSB7CisJICAgIF9uY193YXJuaW5nKCJzZWxmLXN5bm9ueW0gaWdub3JlZCIpOworCX0gZWxzZSBpZiAoc3RhdChsaW5rbmFtZSwgJnN0YXRidWYpID49IDAgJiYKKwkJICAgc3RhdGJ1Zi5zdF9tdGltZSA8IHN0YXJ0X3RpbWUpIHsKKwkgICAgX25jX3dhcm5pbmcoImFsaWFzICVzIG11bHRpcGx5IGRlZmluZWQuIiwgcHRyKTsKKwl9IGVsc2UgaWYgKF9uY19hY2Nlc3MobGlua25hbWUsIFdfT0spID09IDApCisjaWYgSEFWRV9MSU5LCisJeworCSAgICBpbnQgY29kZTsKKyNpZiBVU0VfU1lNTElOS1MKKwkgICAgc3RyY3B5KHN5bWxpbmtuYW1lLCAiLi4vIik7CisJICAgIHN0cm5jYXQoc3ltbGlua25hbWUsIGZpbGVuYW1lLCBzaXplb2Yoc3ltbGlua25hbWUpIC0gNCk7CisJICAgIHN5bWxpbmtuYW1lW3NpemVvZihzeW1saW5rbmFtZSkgLSAxXSA9ICdcMCc7CisjZW5kaWYgLyogVVNFX1NZTUxJTktTICovCisjaWYgSEFWRV9SRU1PVkUKKwkgICAgY29kZSA9IHJlbW92ZShsaW5rbmFtZSk7CisjZWxzZQorCSAgICBjb2RlID0gdW5saW5rKGxpbmtuYW1lKTsKKyNlbmRpZgorCSAgICBpZiAoY29kZSAhPSAwICYmIGVycm5vID09IEVOT0VOVCkKKwkJY29kZSA9IDA7CisjaWYgVVNFX1NZTUxJTktTCisJICAgIGlmIChzeW1saW5rKHN5bWxpbmtuYW1lLCBsaW5rbmFtZSkgPCAwKQorI2Vsc2UKKwkgICAgaWYgKGxpbmsoZmlsZW5hbWUsIGxpbmtuYW1lKSA8IDApCisjZW5kaWYgLyogVVNFX1NZTUxJTktTICovCisJICAgIHsKKwkJLyoKKwkJICogSWYgdGhlcmUgd2Fzbid0IGFueXRoaW5nIHRoZXJlLCBhbmQgd2UgY2Fubm90CisJCSAqIGxpbmsgdG8gdGhlIHRhcmdldCBiZWNhdXNlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZQorCQkgKiB0YXJnZXQsIHRoZW4gdGhlIHNvdXJjZSBtdXN0IGJlIG9uIGEgZmlsZXN5c3RlbQorCQkgKiB0aGF0IHVzZXMgY2FzZWxlc3MgZmlsZW5hbWVzLCBzdWNoIGFzIFdpbjMyLCBldGMuCisJCSAqLworCQlpZiAoY29kZSA9PSAwICYmIGVycm5vID09IEVFWElTVCkKKwkJICAgIF9uY193YXJuaW5nKCJjYW4ndCBsaW5rICVzIHRvICVzIiwgZmlsZW5hbWUsIGxpbmtuYW1lKTsKKwkJZWxzZSBpZiAoY29kZSA9PSAwICYmIChlcnJubyA9PSBFUEVSTSB8fCBlcnJubyA9PSBFTk9FTlQpKQorCQkgICAgd3JpdGVfZmlsZShsaW5rbmFtZSwgdHApOworCQllbHNlIHsKKyNpZiBNSVhFRENBU0VfRklMRU5BTUVTCisJCSAgICBfbmNfc3lzZXJyX2Fib3J0KCJjYW4ndCBsaW5rICVzIHRvICVzIiwgZmlsZW5hbWUsIGxpbmtuYW1lKTsKKyNlbHNlCisJCSAgICBfbmNfd2FybmluZygiY2FuJ3QgbGluayAlcyB0byAlcyAoZXJybm89JWQpIiwgZmlsZW5hbWUsCisJCQkJbGlua25hbWUsIGVycm5vKTsKKyNlbmRpZgorCQl9CisJICAgIH0gZWxzZSB7CisJCURFQlVHKDEsICgiTGlua2VkICVzIiwgbGlua25hbWUpKTsKKwkgICAgfQorCX0KKyNlbHNlIC8qIGp1c3QgbWFrZSBjb3BpZXMgKi8KKwkgICAgd3JpdGVfZmlsZShsaW5rbmFtZSwgdHApOworI2VuZGlmIC8qIEhBVkVfTElOSyAqLworICAgIH0KKyNlbmRpZiAvKiBVU0VfSEFTSEVEX0RCICovCit9CisKK3N0YXRpYyB1bnNpZ25lZAorZmFrZV93cml0ZShjaGFyICpkc3QsCisJICAgdW5zaWduZWQgKm9mZnNldCwKKwkgICB1bnNpZ25lZCBsaW1pdCwKKwkgICBjaGFyICpzcmMsCisJICAgdW5zaWduZWQgd2FudCwKKwkgICB1bnNpZ25lZCBzaXplKQoreworICAgIGludCBoYXZlID0gKGxpbWl0IC0gKm9mZnNldCk7CisKKyAgICB3YW50ICo9IHNpemU7CisgICAgaWYgKGhhdmUgPiAwKSB7CisJaWYgKChpbnQpIHdhbnQgPiBoYXZlKQorCSAgICB3YW50ID0gaGF2ZTsKKwltZW1jcHkoZHN0ICsgKm9mZnNldCwgc3JjLCB3YW50KTsKKwkqb2Zmc2V0ICs9IHdhbnQ7CisgICAgfSBlbHNlIHsKKwl3YW50ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIChpbnQpICh3YW50IC8gc2l6ZSk7Cit9CisKKyNkZWZpbmUgV3JpdGUoYnVmLCBzaXplLCBjb3VudCkgZmFrZV93cml0ZShidWZmZXIsIG9mZnNldCwgbGltaXQsIChjaGFyICopIGJ1ZiwgY291bnQsIHNpemUpCisKKyN1bmRlZiBMSVRUTEVfRU5ESUFOCQkvKiBCU0QvT1MgZGVmaW5lcyB0aGlzIGFzIGEgZmVhdHVyZSBtYWNybyAqLworI2RlZmluZSBISSh4KQkJCSgoeCkgLyAyNTYpCisjZGVmaW5lIExPKHgpCQkJKCh4KSAlIDI1NikKKyNkZWZpbmUgTElUVExFX0VORElBTihwLCB4KQkocClbMF0gPSBMTyh4KSwgKHApWzFdID0gSEkoeCkKKworI2RlZmluZSBXUklURV9TVFJJTkcoc3RyKSAoV3JpdGUoc3RyLCBzaXplb2YoY2hhciksIHN0cmxlbihzdHIpICsgMSkgPT0gc3RybGVuKHN0cikgKyAxKQorCitzdGF0aWMgaW50Citjb21wdXRlX29mZnNldHMoY2hhciAqKlN0cmluZ3MsIHVuc2lnbmVkIHN0cm1heCwgc2hvcnQgKm9mZnNldHMpCit7CisgICAgc2l6ZV90IG5leHRmcmVlID0gMDsKKyAgICB1bnNpZ25lZCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHN0cm1heDsgaSsrKSB7CisJaWYgKFN0cmluZ3NbaV0gPT0gQUJTRU5UX1NUUklORykgeworCSAgICBvZmZzZXRzW2ldID0gLTE7CisJfSBlbHNlIGlmIChTdHJpbmdzW2ldID09IENBTkNFTExFRF9TVFJJTkcpIHsKKwkgICAgb2Zmc2V0c1tpXSA9IC0yOworCX0gZWxzZSB7CisJICAgIG9mZnNldHNbaV0gPSBuZXh0ZnJlZTsKKwkgICAgbmV4dGZyZWUgKz0gc3RybGVuKFN0cmluZ3NbaV0pICsgMTsKKwkgICAgVFJBQ0VfT1VUKCgicHV0IFN0cmluZ3NbJWRdPSVzKCVkKSIsIChpbnQpIGksCisJCSAgICAgICBfbmNfdmlzYnVmKFN0cmluZ3NbaV0pLCAoaW50KSBuZXh0ZnJlZSkpOworCX0KKyAgICB9CisgICAgcmV0dXJuIG5leHRmcmVlOworfQorCitzdGF0aWMgdm9pZAorY29udmVydF9zaG9ydHModW5zaWduZWQgY2hhciAqYnVmLCBzaG9ydCAqTnVtYmVycywgdW5zaWduZWQgY291bnQpCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCWlmIChOdW1iZXJzW2ldID09IEFCU0VOVF9OVU1FUklDKSB7CS8qIEhJL0xPIHdvbid0IHdvcmsgKi8KKwkgICAgYnVmWzIgKiBpXSA9IGJ1ZlsyICogaSArIDFdID0gMDM3NzsKKwl9IGVsc2UgaWYgKE51bWJlcnNbaV0gPT0gQ0FOQ0VMTEVEX05VTUVSSUMpIHsJLyogSEkvTE8gd29uJ3Qgd29yayAqLworCSAgICBidWZbMiAqIGldID0gMDM3NjsKKwkgICAgYnVmWzIgKiBpICsgMV0gPSAwMzc3OworCX0gZWxzZSB7CisJICAgIExJVFRMRV9FTkRJQU4oYnVmICsgMiAqIGksIE51bWJlcnNbaV0pOworCSAgICBUUkFDRV9PVVQoKCJwdXQgTnVtYmVyc1slZF09JWQiLCBpLCBOdW1iZXJzW2ldKSk7CisJfQorICAgIH0KK30KKworI2RlZmluZSBldmVuX2JvdW5kYXJ5KHZhbHVlKSBcCisJICAgICgodmFsdWUpICUgMiAhPSAwICYmIFdyaXRlKCZ6ZXJvLCBzaXplb2YoY2hhciksIDEpICE9IDEpCisKKyNpZiBOQ1VSU0VTX1hOQU1FUworc3RhdGljIHVuc2lnbmVkCitleHRlbmRlZF9Cb29sZWFucyhURVJNVFlQRSAqdHApCit7CisgICAgdW5zaWduZWQgc2hvcnQgcmVzdWx0ID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHRwLT5leHRfQm9vbGVhbnM7ICsraSkgeworCWlmICh0cC0+Qm9vbGVhbnNbQk9PTENPVU5UICsgaV0gPT0gVFJVRSkKKwkgICAgcmVzdWx0ID0gKGkgKyAxKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkCitleHRlbmRlZF9OdW1iZXJzKFRFUk1UWVBFICp0cCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdHAtPmV4dF9OdW1iZXJzOyArK2kpIHsKKwlpZiAodHAtPk51bWJlcnNbTlVNQ09VTlQgKyBpXSAhPSBBQlNFTlRfTlVNRVJJQykKKwkgICAgcmVzdWx0ID0gKGkgKyAxKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkCitleHRlbmRlZF9TdHJpbmdzKFRFUk1UWVBFICp0cCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdHAtPmV4dF9TdHJpbmdzOyArK2kpIHsKKwlpZiAodHAtPlN0cmluZ3NbU1RSQ09VTlQgKyBpXSAhPSBBQlNFTlRfU1RSSU5HKQorCSAgICByZXN1bHQgPSAoaSArIDEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogX25jX2FsaWduX3Rlcm10eXBlKCkgd2lsbCBleHRlbmQgZW50cmllcyB0aGF0IGFyZSByZWZlcmVuY2VkIGluIGEgdXNlPQorICogY2xhdXNlIC0gZGlzY2FyZCB0aGUgdW5uZWVkZWQgZGF0YS4KKyAqLworc3RhdGljIGJvb2wKK2V4dGVuZGVkX29iamVjdChURVJNVFlQRSAqdHApCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIGlmIChfbmNfdXNlcl9kZWZpbmFibGUpIHsKKwlyZXN1bHQgPSAoKGV4dGVuZGVkX0Jvb2xlYW5zKHRwKQorCQkgICArIGV4dGVuZGVkX051bWJlcnModHApCisJCSAgICsgZXh0ZW5kZWRfU3RyaW5ncyh0cCkpICE9IDApOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3dyaXRlX29iamVjdChURVJNVFlQRSAqdHAsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgbGltaXQpCit7CisgICAgY2hhciAqbmFtZWxpc3Q7CisgICAgc2l6ZV90IG5hbWVsZW4sIGJvb2xtYXgsIG51bW1heCwgc3RybWF4OworICAgIGNoYXIgemVybyA9ICdcMCc7CisgICAgc2l6ZV90IGk7CisgICAgc2hvcnQgbmV4dGZyZWU7CisgICAgc2hvcnQgb2Zmc2V0c1tNQVhfRU5UUllfU0laRSAvIDJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01BWF9FTlRSWV9TSVpFXTsKKyAgICB1bnNpZ25lZCBsYXN0X2Jvb2wgPSBCT09MV1JJVEU7CisgICAgdW5zaWduZWQgbGFzdF9udW0gPSBOVU1XUklURTsKKyAgICB1bnNpZ25lZCBsYXN0X3N0ciA9IFNUUldSSVRFOworCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICAvKgorICAgICAqIE5vcm1hbGx5IHdlIGxpbWl0IHRoZSBsaXN0IG9mIHZhbHVlcyB0byBleGNsdWRlIHRoZSAib2Jzb2xldGUiCisgICAgICogY2FwYWJpbGl0aWVzLiAgSG93ZXZlciwgaWYgd2UgYXJlIGFjY2VwdGluZyBleHRlbmRlZCBuYW1lcywgYWRkCisgICAgICogdGhlc2UgYXMgd2VsbCwgc2luY2UgdGhleSBhcmUgdXNlZCBmb3Igc3VwcG9ydGluZyB0cmFuc2xhdGlvbgorICAgICAqIHRvL2Zyb20gdGVybWNhcC4KKyAgICAgKi8KKyAgICBpZiAoX25jX3VzZXJfZGVmaW5hYmxlKSB7CisJbGFzdF9ib29sID0gQk9PTENPVU5UOworCWxhc3RfbnVtID0gTlVNQ09VTlQ7CisJbGFzdF9zdHIgPSBTVFJDT1VOVDsKKyAgICB9CisjZW5kaWYKKworICAgIG5hbWVsaXN0ID0gdHAtPnRlcm1fbmFtZXM7CisgICAgbmFtZWxlbiA9IHN0cmxlbihuYW1lbGlzdCkgKyAxOworCisgICAgYm9vbG1heCA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IGxhc3RfYm9vbDsgaSsrKSB7CisJaWYgKHRwLT5Cb29sZWFuc1tpXSA9PSBUUlVFKQorCSAgICBib29sbWF4ID0gaSArIDE7CisgICAgfQorCisgICAgbnVtbWF4ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdF9udW07IGkrKykgeworCWlmICh0cC0+TnVtYmVyc1tpXSAhPSBBQlNFTlRfTlVNRVJJQykKKwkgICAgbnVtbWF4ID0gaSArIDE7CisgICAgfQorCisgICAgc3RybWF4ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdF9zdHI7IGkrKykgeworCWlmICh0cC0+U3RyaW5nc1tpXSAhPSBBQlNFTlRfU1RSSU5HKQorCSAgICBzdHJtYXggPSBpICsgMTsKKyAgICB9CisKKyAgICBuZXh0ZnJlZSA9IGNvbXB1dGVfb2Zmc2V0cyh0cC0+U3RyaW5ncywgc3RybWF4LCBvZmZzZXRzKTsKKworICAgIC8qIGZpbGwgaW4gdGhlIGhlYWRlciAqLworICAgIExJVFRMRV9FTkRJQU4oYnVmLCBNQUdJQyk7CisgICAgTElUVExFX0VORElBTihidWYgKyAyLCBtaW4obmFtZWxlbiwgTUFYX05BTUVfU0laRSArIDEpKTsKKyAgICBMSVRUTEVfRU5ESUFOKGJ1ZiArIDQsIGJvb2xtYXgpOworICAgIExJVFRMRV9FTkRJQU4oYnVmICsgNiwgbnVtbWF4KTsKKyAgICBMSVRUTEVfRU5ESUFOKGJ1ZiArIDgsIHN0cm1heCk7CisgICAgTElUVExFX0VORElBTihidWYgKyAxMCwgbmV4dGZyZWUpOworCisgICAgLyogd3JpdGUgb3V0IHRoZSBoZWFkZXIgKi8KKyAgICBUUkFDRV9PVVQoKCJIZWFkZXIgb2YgJXMgQCVkIiwgbmFtZWxpc3QsICpvZmZzZXQpKTsKKyAgICBpZiAoV3JpdGUoYnVmLCAxMiwgMSkgIT0gMQorCXx8IFdyaXRlKG5hbWVsaXN0LCBzaXplb2YoY2hhciksIG5hbWVsZW4pICE9IG5hbWVsZW4pCisJICByZXR1cm4gKEVSUik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYm9vbG1heDsgaSsrKQorCWlmICh0cC0+Qm9vbGVhbnNbaV0gPT0gVFJVRSkKKwkgICAgYnVmW2ldID0gVFJVRTsKKwllbHNlCisJICAgIGJ1ZltpXSA9IEZBTFNFOworICAgIGlmIChXcml0ZShidWYsIHNpemVvZihjaGFyKSwgYm9vbG1heCkgIT0gYm9vbG1heCkKKwkgIHJldHVybiAoRVJSKTsKKworICAgIGlmIChldmVuX2JvdW5kYXJ5KG5hbWVsZW4gKyBib29sbWF4KSkKKwlyZXR1cm4gKEVSUik7CisKKyAgICBUUkFDRV9PVVQoKCJOdW1lcmljcyBiZWdpbiBhdCAlMDR4IiwgKm9mZnNldCkpOworCisgICAgLyogdGhlIG51bWVyaWNzICovCisgICAgY29udmVydF9zaG9ydHMoYnVmLCB0cC0+TnVtYmVycywgbnVtbWF4KTsKKyAgICBpZiAoV3JpdGUoYnVmLCAyLCBudW1tYXgpICE9IG51bW1heCkKKwlyZXR1cm4gKEVSUik7CisKKyAgICBUUkFDRV9PVVQoKCJTdHJpbmcgb2Zmc2V0cyBiZWdpbiBhdCAlMDR4IiwgKm9mZnNldCkpOworCisgICAgLyogdGhlIHN0cmluZyBvZmZzZXRzICovCisgICAgY29udmVydF9zaG9ydHMoYnVmLCBvZmZzZXRzLCBzdHJtYXgpOworICAgIGlmIChXcml0ZShidWYsIDIsIHN0cm1heCkgIT0gc3RybWF4KQorCXJldHVybiAoRVJSKTsKKworICAgIFRSQUNFX09VVCgoIlN0cmluZyB0YWJsZSBiZWdpbnMgYXQgJTA0eCIsICpvZmZzZXQpKTsKKworICAgIC8qIHRoZSBzdHJpbmdzICovCisgICAgZm9yIChpID0gMDsgaSA8IHN0cm1heDsgaSsrKQorCWlmIChWQUxJRF9TVFJJTkcodHAtPlN0cmluZ3NbaV0pKQorCSAgICBpZiAoIVdSSVRFX1NUUklORyh0cC0+U3RyaW5nc1tpXSkpCisJCXJldHVybiAoRVJSKTsKKworI2lmIE5DVVJTRVNfWE5BTUVTCisgICAgaWYgKGV4dGVuZGVkX29iamVjdCh0cCkpIHsKKwl1bnNpZ25lZCBleHRjbnQgPSBOVU1fRVhUX05BTUVTKHRwKTsKKworCWlmIChldmVuX2JvdW5kYXJ5KG5leHRmcmVlKSkKKwkgICAgcmV0dXJuIChFUlIpOworCisJbmV4dGZyZWUgPSBjb21wdXRlX29mZnNldHModHAtPlN0cmluZ3MgKyBTVFJDT1VOVCwKKwkJCQkgICB0cC0+ZXh0X1N0cmluZ3MsCisJCQkJICAgb2Zmc2V0cyk7CisJVFJBQ0VfT1VUKCgiYWZ0ZXIgZXh0ZW5kZWQgc3RyaW5nIGNhcGFiaWxpdGllcywgbmV4dGZyZWU9JWQiLCBuZXh0ZnJlZSkpOworCisJaWYgKHRwLT5leHRfU3RyaW5ncyA+PSBTSVpFT0Yob2Zmc2V0cykpCisJICAgIHJldHVybiAoRVJSKTsKKworCW5leHRmcmVlICs9IGNvbXB1dGVfb2Zmc2V0cyh0cC0+ZXh0X05hbWVzLAorCQkJCSAgICBleHRjbnQsCisJCQkJICAgIG9mZnNldHMgKyB0cC0+ZXh0X1N0cmluZ3MpOworCVRSQUNFX09VVCgoImFmdGVyIGV4dGVuZGVkIGNhcG5hbWVzLCBuZXh0ZnJlZT0lZCIsIG5leHRmcmVlKSk7CisJc3RybWF4ID0gdHAtPmV4dF9TdHJpbmdzICsgZXh0Y250OworCisJLyoKKwkgKiBXcml0ZSB0aGUgZXh0ZW5kZWQgaGVhZGVyCisJICovCisJTElUVExFX0VORElBTihidWYgKyAwLCB0cC0+ZXh0X0Jvb2xlYW5zKTsKKwlMSVRUTEVfRU5ESUFOKGJ1ZiArIDIsIHRwLT5leHRfTnVtYmVycyk7CisJTElUVExFX0VORElBTihidWYgKyA0LCB0cC0+ZXh0X1N0cmluZ3MpOworCUxJVFRMRV9FTkRJQU4oYnVmICsgNiwgc3RybWF4KTsKKwlMSVRUTEVfRU5ESUFOKGJ1ZiArIDgsIG5leHRmcmVlKTsKKwlUUkFDRV9PVVQoKCJXUklURSBleHRlbmRlZC1oZWFkZXIgQCVkIiwgKm9mZnNldCkpOworCWlmIChXcml0ZShidWYsIDEwLCAxKSAhPSAxKQorCSAgICByZXR1cm4gKEVSUik7CisKKwlUUkFDRV9PVVQoKCJXUklURSAlZCBib29sZWFucyBAJWQiLCB0cC0+ZXh0X0Jvb2xlYW5zLCAqb2Zmc2V0KSk7CisJaWYgKHRwLT5leHRfQm9vbGVhbnMKKwkgICAgJiYgV3JpdGUodHAtPkJvb2xlYW5zICsgQk9PTENPVU5ULCBzaXplb2YoY2hhciksCisJCSAgICAgdHAtPmV4dF9Cb29sZWFucykgIT0gdHAtPmV4dF9Cb29sZWFucykKKwkgICAgICByZXR1cm4gKEVSUik7CisKKwlpZiAoZXZlbl9ib3VuZGFyeSh0cC0+ZXh0X0Jvb2xlYW5zKSkKKwkgICAgcmV0dXJuIChFUlIpOworCisJVFJBQ0VfT1VUKCgiV1JJVEUgJWQgbnVtYmVycyBAJWQiLCB0cC0+ZXh0X051bWJlcnMsICpvZmZzZXQpKTsKKwlpZiAodHAtPmV4dF9OdW1iZXJzKSB7CisJICAgIGNvbnZlcnRfc2hvcnRzKGJ1ZiwgdHAtPk51bWJlcnMgKyBOVU1DT1VOVCwgdHAtPmV4dF9OdW1iZXJzKTsKKwkgICAgaWYgKFdyaXRlKGJ1ZiwgMiwgdHAtPmV4dF9OdW1iZXJzKSAhPSB0cC0+ZXh0X051bWJlcnMpCisJCXJldHVybiAoRVJSKTsKKwl9CisKKwkvKgorCSAqIENvbnZlcnQgdGhlIG9mZnNldHMgZm9yIHRoZSBleHRfU3RyaW5ncyBhbmQgZXh0X05hbWVzIHRhYmxlcywKKwkgKiBpbiB0aGF0IG9yZGVyLgorCSAqLworCWNvbnZlcnRfc2hvcnRzKGJ1Ziwgb2Zmc2V0cywgc3RybWF4KTsKKwlUUkFDRV9PVVQoKCJXUklURSBvZmZzZXRzIEAlZCIsICpvZmZzZXQpKTsKKwlpZiAoV3JpdGUoYnVmLCAyLCBzdHJtYXgpICE9IHN0cm1heCkKKwkgICAgcmV0dXJuIChFUlIpOworCisJLyoKKwkgKiBXcml0ZSB0aGUgc3RyaW5nIHRhYmxlIGFmdGVyIHRoZSBvZmZzZXQgdGFibGVzIHNvIHdlIGRvIG5vdAorCSAqIGhhdmUgdG8gZG8gYW55dGhpbmcgYWJvdXQgYWxpZ25tZW50LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0cC0+ZXh0X1N0cmluZ3M7IGkrKykgeworCSAgICBpZiAoVkFMSURfU1RSSU5HKHRwLT5TdHJpbmdzW2kgKyBTVFJDT1VOVF0pKSB7CisJCVRSQUNFX09VVCgoIldSSVRFIGV4dF9TdHJpbmdzWyVkXT0lcyIsIChpbnQpIGksCisJCQkgICBfbmNfdmlzYnVmKHRwLT5TdHJpbmdzW2kgKyBTVFJDT1VOVF0pKSk7CisJCWlmICghV1JJVEVfU1RSSU5HKHRwLT5TdHJpbmdzW2kgKyBTVFJDT1VOVF0pKQorCQkgICAgcmV0dXJuIChFUlIpOworCSAgICB9CisJfQorCisJLyoKKwkgKiBXcml0ZSB0aGUgZXh0ZW5kZWQgbmFtZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZXh0Y250OyBpKyspIHsKKwkgICAgVFJBQ0VfT1VUKCgiV1JJVEUgZXh0X05hbWVzWyVkXT0lcyIsIChpbnQpIGksIHRwLT5leHRfTmFtZXNbaV0pKTsKKwkgICAgaWYgKCFXUklURV9TVFJJTkcodHAtPmV4dF9OYW1lc1tpXSkpCisJCXJldHVybiAoRVJSKTsKKwl9CisKKyAgICB9CisjZW5kaWYgLyogTkNVUlNFU19YTkFNRVMgKi8KKworICAgIHRvdGFsX3dyaXR0ZW4rKzsKKyAgICByZXR1cm4gKE9LKTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIHdyaXR0ZW4gYnkgdGhpcyBwcm9jZXNzCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY190aWNfd3JpdHRlbih2b2lkKQoreworICAgIHJldHVybiB0b3RhbF93cml0dGVuOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90cmFjZS9SRUFETUUgYi9uY3Vyc2VzL3RyYWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjU4ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS9SRUFETUUKQEAgLTAsMCArMSwzMyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUsdiAxLjIgMjAwNi8wNC8yMiAyMjoxOTozNyB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5ICh0cmFjZSkgc3VwcG9ydCBib3RoIHRoZSB0ZXJtaW5mbyBhbmQgbmN1cnNlcworbGlicmFyaWVzLiAgTW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBsaW5rZWQgaW4gb25seSB3aGVuIHRoZSBsaWJyYXJpZXMKK2FyZSBjb21waWxlZCB3aXRoIFRSQUNFIGRlZmluZWQuCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZS5jIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDNiMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2UuYwpAQCAtMCwwICsxLDMzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3RyYWNlLmMgLSBUcmFjaW5nL0RlYnVnZ2luZyByb3V0aW5lcworICoKKyAqIFRoZSBfdHJhY2VmKCkgZnVuY3Rpb24gaXMgb3JpZ2luYWxseSBmcm9tIHBjdXJzZXMgKGJ5IFBhdmVsIEN1cnRpcykgaW4gMTk4Mi4gCisgKiBwY3Vyc2VzIGFsbG93ZWQgb25lIHRvIGVuYWJsZS9kaXNhYmxlIHRyYWNpbmcgdXNpbmcgdHJhY2VvbigpIGFuZCB0cmFjZW9mZigpCisgKiBmdW5jdGlvbnMuICBuY3Vyc2VzIHByb3ZpZGVzIGEgdHJhY2UoKSBmdW5jdGlvbiB3aGljaCBhbGxvd3Mgb25lIHRvCisgKiBzZWxlY3RpdmVseSBlbmFibGUgb3IgZGlzYWJsZSBzZXZlcmFsIHRyYWNpbmcgZmVhdHVyZXMuCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGljLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3RyYWNlLmMsdiAxLjcxIDIwMDgvMDgvMjMgMTg6MDQ6MjkgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlRfVkFSKHVuc2lnbmVkKSBfbmNfdHJhY2luZyA9IDA7IC8qIGFsd2F5cyBkZWZpbmUgdGhpcyAqLworCisjaWZkZWYgVFJBQ0UKKworI2lmIFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK05DVVJTRVNfUFVCTElDX1ZBUihfbmNfdHB1dHNfdHJhY2UpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IFNQLT5fdHB1dHNfdHJhY2UgOiBfbmNfcHJlc2NyZWVuLl90cHV0c190cmFjZTsKK30KK05DVVJTRVNfRVhQT1JUKGxvbmcpCitOQ1VSU0VTX1BVQkxJQ19WQVIoX25jX291dGNoYXJzKSAodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgPyBTUC0+X291dGNoYXJzIDogX25jX3ByZXNjcmVlbi5fb3V0Y2hhcnM7Cit9CitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NldF90cHV0c190cmFjZShjb25zdCBjaGFyICpzKQoreworICAgIGlmIChTUCkKKwlTUC0+X3RwdXRzX3RyYWNlID0gczsKKyAgICBlbHNlCisJX25jX3ByZXNjcmVlbi5fdHB1dHNfdHJhY2UgPSBzOworfQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19jb3VudF9vdXRjaGFycyhsb25nIGluY3JlbWVudCkKK3sKKyAgICBpZiAoU1ApCisJU1AtPl9vdXRjaGFycyArPSBpbmNyZW1lbnQ7CisgICAgZWxzZQorCV9uY19wcmVzY3JlZW4uX291dGNoYXJzICs9IGluY3JlbWVudDsKK30KKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoY29uc3QgY2hhciAqKSBfbmNfdHB1dHNfdHJhY2UgPSAiIjsKK05DVVJTRVNfRVhQT1JUX1ZBUihsb25nKSBfbmNfb3V0Y2hhcnMgPSAwOworI2VuZGlmCisKKyNkZWZpbmUgVHJhY2VGUAkJX25jX2dsb2JhbHMudHJhY2VfZnAKKyNkZWZpbmUgVHJhY2VQYXRoCV9uY19nbG9iYWxzLnRyYWNlX2ZuYW1lCisjZGVmaW5lIFRyYWNlTGV2ZWwJX25jX2dsb2JhbHMudHJhY2VfbGV2ZWwKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3RyYWNlKGNvbnN0IHVuc2lnbmVkIGludCB0cmFjZWxldmVsKQoreworICAgIGlmICgoVHJhY2VGUCA9PSAwKSAmJiB0cmFjZWxldmVsKSB7CisJY29uc3QgY2hhciAqbW9kZSA9IF9uY19nbG9iYWxzLmluaXRfdHJhY2UgPyAiYWIiIDogIndiIjsKKworCWlmIChUcmFjZVBhdGhbMF0gPT0gJ1wwJykgeworCSAgICBpbnQgc2l6ZSA9IHNpemVvZihUcmFjZVBhdGgpIC0gMTI7CisJICAgIGlmIChnZXRjd2QoVHJhY2VQYXRoLCBzaXplKSA9PSAwKSB7CisJCXBlcnJvcigiY3Vyc2VzOiBDYW4ndCBnZXQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCSAgICB9CisJICAgIFRyYWNlUGF0aFtzaXplXSA9ICdcMCc7CisJICAgIGFzc2VydChzdHJsZW4oVHJhY2VQYXRoKSA8PSBzaXplKTsKKwkgICAgc3RyY2F0KFRyYWNlUGF0aCwgIi90cmFjZSIpOworCSAgICBpZiAoX25jX2lzX2Rpcl9wYXRoKFRyYWNlUGF0aCkpIHsKKwkJc3RyY2F0KFRyYWNlUGF0aCwgIi5sb2ciKTsKKwkgICAgfQorCX0KKworCV9uY19nbG9iYWxzLmluaXRfdHJhY2UgPSBUUlVFOworCV9uY190cmFjaW5nID0gdHJhY2VsZXZlbDsKKwlpZiAoX25jX2FjY2VzcyhUcmFjZVBhdGgsIFdfT0spIDwgMAorCSAgICB8fCAoVHJhY2VGUCA9IGZvcGVuKFRyYWNlUGF0aCwgbW9kZSkpID09IDApIHsKKwkgICAgcGVycm9yKCJjdXJzZXM6IENhbid0IG9wZW4gJ3RyYWNlJyBmaWxlIik7CisJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJLyogVHJ5IHRvIHNldCBsaW5lLWJ1ZmZlcmVkIG1vZGUsIG9yIChmYWlsaW5nIHRoYXQpIHVuYnVmZmVyZWQsCisJICogc28gdGhhdCB0aGUgdHJhY2Utb3V0cHV0IGdldHMgZmx1c2hlZCBhdXRvbWF0aWNhbGx5IGF0IHRoZQorCSAqIGVuZCBvZiBlYWNoIGxpbmUuICBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlIHRoZSBwcm9ncmFtIGRpZXMuIAorCSAqLworI2lmIEhBVkVfU0VUVkJVRgkJLyogQU5TSSAqLworCSh2b2lkKSBzZXR2YnVmKFRyYWNlRlAsIChjaGFyICopIDAsIF9JT0xCRiwgMCk7CisjZWxpZiBIQVZFX1NFVEJVRgkJLyogUE9TSVggKi8KKwkodm9pZCkgc2V0YnVmZmVyKFRyYWNlRlAsIChjaGFyICopIDApOworI2VuZGlmCisJX3RyYWNlZigiVFJBQ0lORyBOQ1VSU0VTIHZlcnNpb24gJXMuJWQgKHRyYWNlbGV2ZWw9JSN4KSIsCisJCU5DVVJTRVNfVkVSU0lPTiwKKwkJTkNVUlNFU19WRVJTSU9OX1BBVENILAorCQl0cmFjZWxldmVsKTsKKyAgICB9IGVsc2UgaWYgKHRyYWNlbGV2ZWwgPT0gMCkgeworCWlmIChUcmFjZUZQICE9IDApIHsKKwkgICAgZmNsb3NlKFRyYWNlRlApOworCSAgICBUcmFjZUZQID0gMDsKKwl9CisJX25jX3RyYWNpbmcgPSB0cmFjZWxldmVsOworICAgIH0gZWxzZSBpZiAoX25jX3RyYWNpbmcgIT0gdHJhY2VsZXZlbCkgeworCV9uY190cmFjaW5nID0gdHJhY2VsZXZlbDsKKwlfdHJhY2VmKCJ0cmFjZWxldmVsPSUjeCIsIHRyYWNlbGV2ZWwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK19uY192YV90cmFjZWYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIENhbGxlZFtdID0gVF9DQUxMRUQoIiIpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIFJldHVybltdID0gVF9SRVRVUk4oIiIpOworCisgICAgYm9vbCBiZWZvcmUgPSBGQUxTRTsKKyAgICBib29sIGFmdGVyID0gRkFMU0U7CisgICAgdW5zaWduZWQgZG9pdCA9IF9uY190cmFjaW5nOworICAgIGludCBzYXZlX2VyciA9IGVycm5vOworCisgICAgaWYgKHN0cmxlbihmbXQpID49IHNpemVvZihDYWxsZWQpIC0gMSkgeworCWlmICghc3RybmNtcChmbXQsIENhbGxlZCwgc2l6ZW9mKENhbGxlZCkgLSAxKSkgeworCSAgICBiZWZvcmUgPSBUUlVFOworCSAgICBUcmFjZUxldmVsKys7CisJfSBlbHNlIGlmICghc3RybmNtcChmbXQsIFJldHVybiwgc2l6ZW9mKFJldHVybikgLSAxKSkgeworCSAgICBhZnRlciA9IFRSVUU7CisJfQorCWlmIChiZWZvcmUgfHwgYWZ0ZXIpIHsKKwkgICAgaWYgKChUcmFjZUxldmVsIDw9IDEpCisJCXx8IChkb2l0ICYgVFJBQ0VfSUNBTExTKSAhPSAwKQorCQlkb2l0ICY9IChUUkFDRV9DQUxMUyB8IFRSQUNFX0NDQUxMUyk7CisJICAgIGVsc2UKKwkJZG9pdCA9IDA7CisJfQorICAgIH0KKworICAgIGlmIChkb2l0ICE9IDApIHsKKwlpZiAoVHJhY2VGUCA9PSAwKQorCSAgICBUcmFjZUZQID0gc3RkZXJyOworI2lmZGVmIFVTRV9QVEhSRUFEUworCS8qCisJICogVFJBQ0VfSUNBTExTIGlzICJyZWFsbHkiIG5lZWRlZCB0byBzaG93IG5vcm1hbCB1c2Ugd2l0aCB0aHJlYWRlZAorCSAqIGFwcGxpY2F0aW9ucywgc2luY2UgYW55dGhpbmcgY2FuIGJlIHJ1bm5pbmcgZHVyaW5nIGEgbmFwbXMoKSwKKwkgKiBtYWtpbmcgaXQgYXBwZWFyIGluIHRoZSBoaWVyYXJjaGljYWwgdHJhY2UgYXMgaXQgb3RoZXIgZnVuY3Rpb25zCisJICogYXJlIGJlaW5nIGNhbGxlZC4KKwkgKgorCSAqIFJhdGhlciB0aGFuIGFkZCB0aGUgY29tcGxpY2F0aW9uIG9mIGEgcGVyLXRocmVhZCBzdGFjaywganVzdAorCSAqIHNob3cgdGhlIHRocmVhZC1pZCBpbiBlYWNoIGxpbmUgb2YgdGhlIHRyYWNlLgorCSAqLworIyBpZiBVU0VfV0VBS19TWU1CT0xTCisJaWYgKChwdGhyZWFkX3NlbGYpKQorIyBlbmRpZgorCSAgICBmcHJpbnRmKFRyYWNlRlAsICIlI2x4OiIsIChsb25nKSAodm9pZCAqKSBwdGhyZWFkX3NlbGYoKSk7CisjZW5kaWYKKwlpZiAoYmVmb3JlIHx8IGFmdGVyKSB7CisJICAgIGludCBuOworCSAgICBmb3IgKG4gPSAxOyBuIDwgVHJhY2VMZXZlbDsgbisrKQorCQlmcHV0cygiKyAiLCBUcmFjZUZQKTsKKwl9CisJdmZwcmludGYoVHJhY2VGUCwgZm10LCBhcCk7CisJZnB1dGMoJ1xuJywgVHJhY2VGUCk7CisJZmZsdXNoKFRyYWNlRlApOworICAgIH0KKworICAgIGlmIChhZnRlciAmJiBUcmFjZUxldmVsKQorCVRyYWNlTGV2ZWwtLTsKKworICAgIGVycm5vID0gc2F2ZV9lcnI7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfdHJhY2VmKGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIF9uY192YV90cmFjZWYoZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKK30KKworLyogVHJhY2UgJ2Jvb2wnIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQk9PTCkKK19uY19yZXRyYWNlX2Jvb2woTkNVUlNFU19CT09MIGNvZGUpCit7CisgICAgVCgoVF9SRVRVUk4oIiVzIiksIGNvZGUgPyAiVFJVRSIgOiAiRkFMU0UiKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICdpbnQnIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZXRyYWNlX2ludChpbnQgY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICAgIHJldHVybiBjb2RlOworfQorCisvKiBUcmFjZSAndW5zaWduZWQnIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKHVuc2lnbmVkKQorX25jX3JldHJhY2VfdW5zaWduZWQodW5zaWduZWQgY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJSN4IiksIGNvZGUpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworLyogVHJhY2UgJ2NoYXIqJyByZXR1cm4tdmFsdWVzICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfcmV0cmFjZV9wdHIoY2hhciAqY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJXMiKSwgX25jX3Zpc2J1Zihjb2RlKSkpOworICAgIHJldHVybiBjb2RlOworfQorCisvKiBUcmFjZSAnY29uc3QgY2hhcionIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY19yZXRyYWNlX2NwdHIoY29uc3QgY2hhciAqY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJXMiKSwgX25jX3Zpc2J1Zihjb2RlKSkpOworICAgIHJldHVybiBjb2RlOworfQorCisvKiBUcmFjZSAnTkNVUlNFU19DT05TVCB2b2lkKicgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCB2b2lkICopCitfbmNfcmV0cmFjZV9jdm9pZF9wdHIoTkNVUlNFU19DT05TVCB2b2lkICpjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICd2b2lkKicgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQodm9pZCAqKQorX25jX3JldHJhY2Vfdm9pZF9wdHIodm9pZCAqY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJXAiKSwgY29kZSkpOworICAgIHJldHVybiBjb2RlOworfQorCisvKiBUcmFjZSAnU0NSRUVOIConIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKFNDUkVFTiAqKQorX25jX3JldHJhY2Vfc3AoU0NSRUVOICpjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICdXSU5ET1cgKicgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitfbmNfcmV0cmFjZV93aW4oV0lORE9XICpjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKyNpZiBVU0VfUkVFTlRSQU5UCisvKgorICogQ2hlY2sgaWYgdGhlIGdpdmVuIHRyYWNlLW1hc2sgaXMgZW5hYmxlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gb25lIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBmaWxscworICogaW4gcGFyYW1ldGVycyBmb3IgX3RyYWNlZigpLCBidXQgaW4gdGhhdCBjYXNlIHdlIGRvIG5vdCB3YW50IHRvIGxvY2sgdGhlCisgKiBtdXRleCwgc2luY2UgaXQgaXMgYWxyZWFkeSBsb2NrZWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY191c2VfdHJhY2VmKHVuc2lnbmVkIG1hc2spCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIF9uY19sb2NrX2dsb2JhbCh0c3RfdHJhY2VmKTsKKyAgICBpZiAoIV9uY19nbG9iYWxzLm5lc3RlZF90cmFjZWYrKykgeworCWlmICgocmVzdWx0ID0gKF9uY190cmFjaW5nICYgKG1hc2spKSkgIT0gMAorCSAgICAmJiBfbmNfdHJ5X2dsb2JhbCh0cmFjZWYpID09IDApIHsKKwkgICAgLyogd2Ugd2lsbCBjYWxsIF9uY19sb2NrZWRfdHJhY2VmKCksIG5vIG5lc3Rpbmcgc28gZmFyICovCisJfSBlbHNlIHsKKwkgICAgLyogd2Ugd2lsbCBub3QgY2FsbCBfbmNfbG9ja2VkX3RyYWNlZigpICovCisJICAgIF9uY19nbG9iYWxzLm5lc3RlZF90cmFjZWYgPSAwOworCX0KKyAgICB9IGVsc2UgeworCS8qIHdlIG1heSBjYWxsIF9uY19sb2NrZWRfdHJhY2VmKCksIGJ1dCB3aXRoIG5lc3RlZF90cmFjZWYgPiAwICovCisJcmVzdWx0ID0gKF9uY190cmFjaW5nICYgKG1hc2spKTsKKyAgICB9CisgICAgX25jX3VubG9ja19nbG9iYWwodHN0X3RyYWNlZik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdlIGNhbGwgdGhpcyBpZiBfbmNfdXNlX3RyYWNlZigpIHJldHVybnMgdHJ1ZSwgd2hpY2ggbWVhbnMgd2UgbXVzdCB1bmxvY2sKKyAqIHRoZSB0cmFjZWYgbXV0ZXguCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbG9ja2VkX3RyYWNlZihjb25zdCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBfbmNfdmFfdHJhY2VmKGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICBpZiAoLS0oX25jX2dsb2JhbHMubmVzdGVkX3RyYWNlZikgPT0gMCkKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworfQorI2VuZGlmIC8qIFVTRV9SRUVOVFJBTlQgKi8KKworI2VuZGlmIC8qIFRSQUNFICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWF0ci5jIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2VhdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWEwM2NlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2VhdHIuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3RyYWNlYXRyLmMgLSBUcmFjaW5nL0RlYnVnZ2luZyByb3V0aW5lcyAoYXR0cmlidXRlcykKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBhY3NfY2hhcnMgKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90cmFjZWF0ci5jLHYgMS42MyAyMDA4LzA4LzAzIDE2OjI0OjUzIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgQ09MT1JfT0YoYykgKChjIDwgMCkgPyAiZGVmYXVsdCIgOiAoYyA+IDcgPyBjb2xvcl9vZihjKSA6IGNvbG9yc1tjXS5uYW1lKSkKKworI2lmZGVmIFRSQUNFCisKK3N0YXRpYyBjb25zdCBjaGFyIGxfYnJhY2VbXSA9IFN0cmluZ09mKExfQlJBQ0UpOworc3RhdGljIGNvbnN0IGNoYXIgcl9icmFjZVtdID0gU3RyaW5nT2YoUl9CUkFDRSk7CisKKyNpZm5kZWYgVVNFX1RFUk1MSUIKKworI2RlZmluZSBteV9idWZmZXIgX25jX2dsb2JhbHMudHJhY2VhdHJfY29sb3JfYnVmCisjZGVmaW5lIG15X3NlbGVjdCBfbmNfZ2xvYmFscy50cmFjZWF0cl9jb2xvcl9zZWwKKyNkZWZpbmUgbXlfY2FjaGVkIF9uY19nbG9iYWxzLnRyYWNlYXRyX2NvbG9yX2xhc3QKKworc3RhdGljIGNoYXIgKgorY29sb3Jfb2YoaW50IGMpCit7CisgICAgaWYgKGMgIT0gbXlfY2FjaGVkKSB7CisJbXlfY2FjaGVkID0gYzsKKwlteV9zZWxlY3QgPSAhbXlfc2VsZWN0OworCWlmIChjID09IENPTE9SX0RFRkFVTFQpCisJICAgIHN0cmNweShteV9idWZmZXJbbXlfc2VsZWN0XSwgImRlZmF1bHQiKTsKKwllbHNlCisJICAgIHNwcmludGYobXlfYnVmZmVyW215X3NlbGVjdF0sICJjb2xvciVkIiwgYyk7CisgICAgfQorICAgIHJldHVybiBteV9idWZmZXJbbXlfc2VsZWN0XTsKK30KKworI3VuZGVmIG15X2J1ZmZlcgorI3VuZGVmIG15X3NlbGVjdAorI2VuZGlmIC8qICFVU0VfVEVSTUxJQiAqLworCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VhdHRyMihpbnQgYnVmbnVtLCBjaHR5cGUgbmV3bW9kZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWNvbnN0IGNoYXIgKm5hbWU7CisgICAgfSBuYW1lc1tdID0KKyAgICB7CisJLyogKklOREVOVC1PRkYqICovCisJeyBBX1NUQU5ET1VULAkJIkFfU1RBTkRPVVQiIH0sCisJeyBBX1VOREVSTElORSwJCSJBX1VOREVSTElORSIgfSwKKwl7IEFfUkVWRVJTRSwJCSJBX1JFVkVSU0UiIH0sCisJeyBBX0JMSU5LLAkJIkFfQkxJTksiIH0sCisJeyBBX0RJTSwJCSJBX0RJTSIgfSwKKwl7IEFfQk9MRCwJCSJBX0JPTEQiIH0sCisJeyBBX0FMVENIQVJTRVQsCQkiQV9BTFRDSEFSU0VUIiB9LAorCXsgQV9JTlZJUywJCSJBX0lOVklTIiB9LAorCXsgQV9QUk9URUNULAkJIkFfUFJPVEVDVCIgfSwKKwl7IEFfQ0hBUlRFWFQsCQkiQV9DSEFSVEVYVCIgfSwKKwl7IEFfTk9STUFMLAkJIkFfTk9STUFMIiB9LAorCXsgQV9DT0xPUiwJCSJBX0NPTE9SIiB9LAorCS8qICpJTkRFTlQtT04qICovCisKKyAgICB9CisjaWZuZGVmIFVTRV9URVJNTElCCisgICAgLAorCWNvbG9yc1tdID0KKyAgICB7CisJLyogKklOREVOVC1PRkYqICovCisJeyBDT0xPUl9CTEFDSywJCSJDT0xPUl9CTEFDSyIgfSwKKwl7IENPTE9SX1JFRCwJCSJDT0xPUl9SRUQiIH0sCisJeyBDT0xPUl9HUkVFTiwJCSJDT0xPUl9HUkVFTiIgfSwKKwl7IENPTE9SX1lFTExPVywJCSJDT0xPUl9ZRUxMT1ciIH0sCisJeyBDT0xPUl9CTFVFLAkJIkNPTE9SX0JMVUUiIH0sCisJeyBDT0xPUl9NQUdFTlRBLAkiQ09MT1JfTUFHRU5UQSIgfSwKKwl7IENPTE9SX0NZQU4sCQkiQ09MT1JfQ1lBTiIgfSwKKwl7IENPTE9SX1dISVRFLAkJIkNPTE9SX1dISVRFIiB9LAorCS8qICpJTkRFTlQtT04qICovCisKKyAgICB9CisjZW5kaWYgLyogIVVTRV9URVJNTElCICovCisgICAgOworICAgIHNpemVfdCBuOworICAgIGNoYXIgdGVtcFs4MF07CisgICAgY2hhciAqcmVzdWx0ID0gX25jX3RyYWNlX2J1ZihidWZudW0sIEJVRlNJWik7CisKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKwl1bnNpZ25lZCBzYXZlX25jX3RyYWNpbmcgPSBfbmNfdHJhY2luZzsKKworCV9uY190cmFjaW5nID0gMDsKKworCXN0cmNweShyZXN1bHQsIGxfYnJhY2UpOworCisJZm9yIChuID0gMDsgbiA8IFNJWkVPRihuYW1lcyk7IG4rKykgeworCSAgICBpZiAoKG5ld21vZGUgJiBuYW1lc1tuXS52YWwpICE9IDApIHsKKwkJaWYgKHJlc3VsdFsxXSAhPSAnXDAnKQorCQkgICAgcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sICJ8Iik7CisJCXJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCBuYW1lc1tuXS5uYW1lKTsKKworCQlpZiAobmFtZXNbbl0udmFsID09IEFfQ09MT1IpIHsKKwkJICAgIHNob3J0IHBhaXJudW0gPSBQQUlSX05VTUJFUihuZXdtb2RlKTsKKyNpZmRlZiBVU0VfVEVSTUxJQgorCQkgICAgLyogcGFpcl9jb250ZW50IGxpdmVzIGluIGxpYm5jdXJzZXMgKi8KKwkJICAgICh2b2lkKSBzcHJpbnRmKHRlbXAsICJ7JWR9IiwgcGFpcm51bSk7CisjZWxzZQorCQkgICAgc2hvcnQgZmcsIGJnOworCisJCSAgICBpZiAocGFpcl9jb250ZW50KHBhaXJudW0sICZmZywgJmJnKSA9PSBPSykgeworCQkJKHZvaWQpIHNwcmludGYodGVtcCwKKwkJCQkgICAgICAgInslZCA9IHslcywgJXN9fSIsCisJCQkJICAgICAgIHBhaXJudW0sCisJCQkJICAgICAgIENPTE9SX09GKGZnKSwKKwkJCQkgICAgICAgQ09MT1JfT0YoYmcpKTsKKwkJICAgIH0gZWxzZSB7CisJCQkodm9pZCkgc3ByaW50Zih0ZW1wLCAieyVkfSIsIHBhaXJudW0pOworCQkgICAgfQorI2VuZGlmCisJCSAgICByZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgdGVtcCk7CisJCX0KKwkgICAgfQorCX0KKwlpZiAoQ2hBdHRyT2YobmV3bW9kZSkgPT0gQV9OT1JNQUwpIHsKKwkgICAgaWYgKHJlc3VsdCAhPSAwICYmIHJlc3VsdFsxXSAhPSAnXDAnKQorCQkodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sICJ8Iik7CisJICAgICh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgIkFfTk9STUFMIik7CisJfQorCisJX25jX3RyYWNpbmcgPSBzYXZlX25jX3RyYWNpbmc7CisJcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIHJfYnJhY2UpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VhdHRyKGF0dHJfdCBuZXdtb2RlKQoreworICAgIHJldHVybiBfdHJhY2VhdHRyMigwLCBuZXdtb2RlKTsKK30KKworLyogVHJhY2UgJ2ludCcgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoYXR0cl90KQorX25jX3JldHJhY2VfYXR0cl90KGF0dHJfdCBjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcyIpLCBfdHJhY2VhdHRyKGNvZGUpKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK2NvbnN0IGNoYXIgKgorX25jX2FsdGNoYXJzZXRfbmFtZShhdHRyX3QgYXR0ciwgY2h0eXBlIGNoKQoreworICAgIHR5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWNvbnN0IGNoYXIgKm5hbWU7CisgICAgfSBBTFRfTkFNRVM7CisgICAgc3RhdGljIGNvbnN0IEFMVF9OQU1FUyBuYW1lc1tdID0KKyAgICB7CisJeydsJywgIkFDU19VTENPUk5FUiJ9LAkvKiB1cHBlciBsZWZ0IGNvcm5lciAqLworCXsnbScsICJBQ1NfTExDT1JORVIifSwJLyogbG93ZXIgbGVmdCBjb3JuZXIgKi8KKwl7J2snLCAiQUNTX1VSQ09STkVSIn0sCS8qIHVwcGVyIHJpZ2h0IGNvcm5lciAqLworCXsnaicsICJBQ1NfTFJDT1JORVIifSwJLyogbG93ZXIgcmlnaHQgY29ybmVyICovCisJeyd0JywgIkFDU19MVEVFIn0sCS8qIHRlZSBwb2ludGluZyByaWdodCAqLworCXsndScsICJBQ1NfUlRFRSJ9LAkvKiB0ZWUgcG9pbnRpbmcgbGVmdCAqLworCXsndicsICJBQ1NfQlRFRSJ9LAkvKiB0ZWUgcG9pbnRpbmcgdXAgKi8KKwl7J3cnLCAiQUNTX1RURUUifSwJLyogdGVlIHBvaW50aW5nIGRvd24gKi8KKwl7J3EnLCAiQUNTX0hMSU5FIn0sCS8qIGhvcml6b250YWwgbGluZSAqLworCXsneCcsICJBQ1NfVkxJTkUifSwJLyogdmVydGljYWwgbGluZSAqLworCXsnbicsICJBQ1NfUExVUyJ9LAkvKiBsYXJnZSBwbHVzIG9yIGNyb3Nzb3ZlciAqLworCXsnbycsICJBQ1NfUzEifSwJLyogc2NhbiBsaW5lIDEgKi8KKwl7J3MnLCAiQUNTX1M5In0sCS8qIHNjYW4gbGluZSA5ICovCisJeydgJywgIkFDU19ESUFNT05EIn0sCS8qIGRpYW1vbmQgKi8KKwl7J2EnLCAiQUNTX0NLQk9BUkQifSwJLyogY2hlY2tlciBib2FyZCAoc3RpcHBsZSkgKi8KKwl7J2YnLCAiQUNTX0RFR1JFRSJ9LAkvKiBkZWdyZWUgc3ltYm9sICovCisJeydnJywgIkFDU19QTE1JTlVTIn0sCS8qIHBsdXMvbWludXMgKi8KKwl7J34nLCAiQUNTX0JVTExFVCJ9LAkvKiBidWxsZXQgKi8KKwl7JywnLCAiQUNTX0xBUlJPVyJ9LAkvKiBhcnJvdyBwb2ludGluZyBsZWZ0ICovCisJeycrJywgIkFDU19SQVJST1cifSwJLyogYXJyb3cgcG9pbnRpbmcgcmlnaHQgKi8KKwl7Jy4nLCAiQUNTX0RBUlJPVyJ9LAkvKiBhcnJvdyBwb2ludGluZyBkb3duICovCisJeyctJywgIkFDU19VQVJST1cifSwJLyogYXJyb3cgcG9pbnRpbmcgdXAgKi8KKwl7J2gnLCAiQUNTX0JPQVJEIn0sCS8qIGJvYXJkIG9mIHNxdWFyZXMgKi8KKwl7J2knLCAiQUNTX0xBTlRFUk4ifSwJLyogbGFudGVybiBzeW1ib2wgKi8KKwl7JzAnLCAiQUNTX0JMT0NLIn0sCS8qIHNvbGlkIHNxdWFyZSBibG9jayAqLworCXsncCcsICJBQ1NfUzMifSwJLyogc2NhbiBsaW5lIDMgKi8KKwl7J3InLCAiQUNTX1M3In0sCS8qIHNjYW4gbGluZSA3ICovCisJeyd5JywgIkFDU19MRVFVQUwifSwJLyogbGVzcy9lcXVhbCAqLworCXsneicsICJBQ1NfR0VRVUFMIn0sCS8qIGdyZWF0ZXIvZXF1YWwgKi8KKwl7J3snLCAiQUNTX1BJIn0sCS8qIFBpICovCisJeyd8JywgIkFDU19ORVFVQUwifSwJLyogbm90IGVxdWFsICovCisJeyd9JywgIkFDU19TVEVSTElORyJ9LAkvKiBVSyBwb3VuZCBzaWduICovCisJeydcMCcsIChjaGFyICopIDB9CisgICAgfTsKKworICAgIGNvbnN0IGNoYXIgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoKGF0dHIgJiBBX0FMVENIQVJTRVQpICYmIChhY3NfY2hhcnMgIT0gMCkpIHsKKwljaGFyICpjcDsKKwljaGFyICpmb3VuZCA9IDA7CisJY29uc3QgQUxUX05BTUVTICpzcDsKKworCWZvciAoY3AgPSBhY3NfY2hhcnM7IGNwWzBdICYmIGNwWzFdOyBjcCArPSAyKSB7CisJICAgIGlmIChDaENoYXJPZihjcFsxXSkgPT0gQ2hDaGFyT2YoY2gpKSB7CisJCWZvdW5kID0gY3A7CisJCS8qIGRvbid0IGV4aXQgZnJvbSBsb29wIC0gdGhlcmUgbWF5IGJlIHJlZGVmaW5pdGlvbnMgKi8KKwkgICAgfQorCX0KKworCWlmIChmb3VuZCAhPSAwKSB7CisJICAgIGNoID0gQ2hDaGFyT2YoKmZvdW5kKTsKKwkgICAgZm9yIChzcCA9IG5hbWVzOyBzcC0+dmFsOyBzcCsrKQorCQlpZiAoc3AtPnZhbCA9PSBjaCkgeworCQkgICAgcmVzdWx0ID0gc3AtPm5hbWU7CisJCSAgICBicmVhazsKKwkJfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX3RyYWNlY2h0eXBlMihpbnQgYnVmbnVtLCBjaHR5cGUgY2gpCit7CisgICAgY29uc3QgY2hhciAqZm91bmQ7CisgICAgY2hhciAqcmVzdWx0ID0gX25jX3RyYWNlX2J1ZihidWZudW0sIEJVRlNJWik7CisKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKwlzdHJjcHkocmVzdWx0LCBsX2JyYWNlKTsKKwlpZiAoKGZvdW5kID0gX25jX2FsdGNoYXJzZXRfbmFtZShDaEF0dHJPZihjaCksIGNoKSkgIT0gMCkgeworCSAgICAodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIGZvdW5kKTsKKwl9IGVsc2UKKwkgICAgKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCBfbmNfdHJhY2VjaGFyKFNQLCAoaW50KSBDaENoYXJPZihjaCkpKTsKKworCWlmIChDaEF0dHJPZihjaCkgIT0gQV9OT1JNQUwpIHsKKwkgICAgKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAiIHwgIik7CisJICAgICh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwKKwkJCQkgICAgX3RyYWNlYXR0cjIoYnVmbnVtICsgMjAsIENoQXR0ck9mKGNoKSkpOworCX0KKworCXJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCByX2JyYWNlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX3RyYWNlY2h0eXBlKGNodHlwZSBjaCkKK3sKKyAgICByZXR1cm4gX3RyYWNlY2h0eXBlMigwLCBjaCk7Cit9CisKKy8qIFRyYWNlICdjaHR5cGUnIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKGNodHlwZSkKK19uY19yZXRyYWNlX2NodHlwZShjaHR5cGUgY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJXMiKSwgX3RyYWNlY2h0eXBlKGNvZGUpKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX3RyYWNlY2NoYXJfdDIoaW50IGJ1Zm51bSwgY29uc3QgY2NoYXJfdCAqY2gpCit7CisgICAgY2hhciAqcmVzdWx0ID0gX25jX3RyYWNlX2J1ZihidWZudW0sIEJVRlNJWik7CisgICAgYXR0cl90IGF0dHI7CisgICAgY29uc3QgY2hhciAqZm91bmQ7CisKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKwlzdHJjcHkocmVzdWx0LCBsX2JyYWNlKTsKKwlpZiAoY2ggIT0gMCkgeworCSAgICBhdHRyID0gQXR0ck9mRChjaCk7CisJICAgIGlmICgoZm91bmQgPSBfbmNfYWx0Y2hhcnNldF9uYW1lKGF0dHIsIChjaHR5cGUpIENoYXJPZkQoY2gpKSkgIT0gMCkgeworCQkodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIGZvdW5kKTsKKwkJYXR0ciAmPSB+QV9BTFRDSEFSU0VUOworCSAgICB9IGVsc2UgaWYgKGlzV2lkZWNFeHQoQ0hERVJFRihjaCkpKSB7CisJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgIntOQUN9Iik7CisJCWF0dHIgJj0gfkFfQ0hBUlRFWFQ7CisJICAgIH0gZWxzZSB7CisJCVBVVENfREFUQTsKKwkJaW50IG47CisKKwkJUFVUQ19JTklUOworCQkodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sICJ7ICIpOworCQlmb3IgKFBVVENfaSA9IDA7IFBVVENfaSA8IENDSEFSV19NQVg7ICsrUFVUQ19pKSB7CisJCSAgICBQVVRDX2NoID0gY2gtPmNoYXJzW1BVVENfaV07CisJCSAgICBpZiAoUFVUQ19jaCA9PSBMJ1wwJykKKwkJCWJyZWFrOworCQkgICAgUFVUQ19uID0gd2NydG9tYihQVVRDX2J1ZiwgY2gtPmNoYXJzW1BVVENfaV0sICZQVVRfc3QpOworCQkgICAgaWYgKFBVVENfbiA8PSAwKSB7CisJCQlpZiAoUFVUQ19jaCAhPSBMJ1wwJykgeworCQkJICAgIC8qIGl0IGNvdWxkIG5vdCBiZSBhIG11bHRpYnl0ZSBzZXF1ZW5jZSAqLworCQkJICAgICh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwKKwkJCQkJCSAgICBfbmNfdHJhY2VjaGFyKFNQLAorCQkJCQkJCQkgIFVDaGFyKGNoLT5jaGFyc1tQVVRDX2ldKSkpOworCQkJfQorCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBmb3IgKG4gPSAwOyBuIDwgUFVUQ19uOyBuKyspIHsKKwkJCWlmIChuKQorCQkJICAgICh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgIiwgIik7CisJCQkodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sCisJCQkJCQlfbmNfdHJhY2VjaGFyKFNQLAorCQkJCQkJCSAgICAgIFVDaGFyKFBVVENfYnVmW25dKSkpOworCQkgICAgfQorCQl9CisJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgIiB9Iik7CisJICAgIH0KKwkgICAgaWYgKGF0dHIgIT0gQV9OT1JNQUwpIHsKKwkJKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAiIHwgIik7CisJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgX3RyYWNlYXR0cjIoYnVmbnVtICsgMjAsIGF0dHIpKTsKKwkgICAgfQorCX0KKworCXJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCByX2JyYWNlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX3RyYWNlY2NoYXJfdChjb25zdCBjY2hhcl90ICpjaCkKK3sKKyAgICByZXR1cm4gX3RyYWNlY2NoYXJfdDIoMCwgY2gpOworfQorI2VuZGlmCisKKyNlbHNlCitFTVBUWV9NT0RVTEUoX25jX2xpYl90cmFjZWF0cikKKyNlbmRpZiAvKiBUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90cmFjZS9saWJfdHJhY2ViaXRzLmMgYi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWJpdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ0MWIzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2ViaXRzLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogY3VyX3Rlcm0gKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90cmFjZWJpdHMuYyx2IDEuMTcgMjAwOC8wOC8wMyAxNjowOToyNiB0b20gRXhwICQiKQorCisjaWYgU1ZSNF9URVJNSU8gJiYgIWRlZmluZWQoX1BPU0lYX1NPVVJDRSkKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19URVJNSU9fSAorI2luY2x1ZGUgPHN5cy90ZXJtaW8uaD4JCS8qIG5lZWRlZCBmb3IgSVNDICovCisjZW5kaWYKKworI2lmZGVmIF9fRU1YX18KKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKy8qIG1heSBiZSB1bmRlZmluZWQgaWYgd2UncmUgdXNpbmcgdGVybWlvLmggKi8KKyNpZm5kZWYgVE9TVE9QCisjZGVmaW5lIFRPU1RPUCAwCisjZW5kaWYKKworI2lmbmRlZiBJRVhURU4KKyNkZWZpbmUgSUVYVEVOIDAKKyNlbmRpZgorCisjaWZuZGVmIE9OTENSCisjZGVmaW5lIE9OTENSIDAKKyNlbmRpZgorCisjaWZuZGVmIE9DUk5MCisjZGVmaW5lIE9DUk5MIDAKKyNlbmRpZgorCisjaWZuZGVmIE9OT0NSCisjZGVmaW5lIE9OT0NSIDAKKyNlbmRpZgorCisjaWZuZGVmIE9OTFJFVAorI2RlZmluZSBPTkxSRVQgMAorI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IHZhbDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfSBCSVROQU1FUzsKKworc3RhdGljIHZvaWQKK2xvb2t1cF9iaXRzKGNoYXIgKmJ1ZiwgY29uc3QgQklUTkFNRVMgKiB0YWJsZSwgY29uc3QgY2hhciAqbGFiZWwsIHVuc2lnbmVkIGludCB2YWwpCit7CisgICAgY29uc3QgQklUTkFNRVMgKnNwOworCisgICAgKHZvaWQpIHN0cmNhdChidWYsIGxhYmVsKTsKKyAgICAodm9pZCkgc3RyY2F0KGJ1ZiwgIjogeyIpOworICAgIGZvciAoc3AgPSB0YWJsZTsgc3AtPm5hbWU7IHNwKyspCisJaWYgKHNwLT52YWwgIT0gMAorCSAgICAmJiAodmFsICYgc3AtPnZhbCkgPT0gc3AtPnZhbCkgeworCSAgICAodm9pZCkgc3RyY2F0KGJ1Ziwgc3AtPm5hbWUpOworCSAgICAodm9pZCkgc3RyY2F0KGJ1ZiwgIiwgIik7CisJfQorICAgIGlmIChidWZbc3RybGVuKGJ1ZikgLSAyXSA9PSAnLCcpCisJYnVmW3N0cmxlbihidWYpIC0gMl0gPSAnXDAnOworICAgICh2b2lkKSBzdHJjYXQoYnVmLCAifSAiKTsKK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3RyYWNlX3R0eW1vZGUoVFRZICogdHR5KQorLyogZGVzY3JpYmUgdGhlIHN0YXRlIG9mIHRoZSB0ZXJtaW5hbCBjb250cm9sIGJpdHMgZXhhY3RseSAqLworeworICAgIGNoYXIgKmJ1ZjsKKworI2lmZGVmIFRFUk1JT1MKKyAgICBzdGF0aWMgY29uc3QgQklUTkFNRVMgaWZsYWdzW10gPQorICAgIHsKKwl7QlJLSU5ULCAiQlJLSU5UIn0sCisJe0lHTkJSSywgIklHTkJSSyJ9LAorCXtJR05QQVIsICJJR05QQVIifSwKKwl7UEFSTVJLLCAiUEFSTVJLIn0sCisJe0lOUENLLCAiSU5QQ0sifSwKKwl7SVNUUklQLCAiSVNUUklQIn0sCisJe0lOTENSLCAiSU5MQ1IifSwKKwl7SUdOQ1IsICJJR05DIn0sCisJe0lDUk5MLCAiSUNSTkwifSwKKwl7SVhPTiwgIklYT04ifSwKKwl7SVhPRkYsICJJWE9GRiJ9LAorCXswLCBOVUxMfQorI2RlZmluZSBBTExJTgkoQlJLSU5UfElHTkJSS3xJR05QQVJ8UEFSTVJLfElOUENLfElTVFJJUHxJTkxDUnxJR05DUnxJQ1JOTHxJWE9OfElYT0ZGKQorICAgIH0sIG9mbGFnc1tdID0KKyAgICB7CisJe09QT1NULCAiT1BPU1QifSwKKwl7T0ZMQUdTX1RBQlMsICJYVEFCUyJ9LAorCXtPTkxDUiwgIk9OTENSIn0sCisJe09DUk5MLCAiT0NSTkwifSwKKwl7T05PQ1IsICJPTk9DUiJ9LAorCXtPTkxSRVQsICJPTkxSRVQifSwKKwl7MCwgTlVMTH0KKyNkZWZpbmUgQUxMT1VUCShPUE9TVHxPRkxBR1NfVEFCU3xPTkxDUnxPQ1JOTHxPTk9DUnxPTkxSRVQpCisgICAgfSwgY2ZsYWdzW10gPQorICAgIHsKKwl7Q0xPQ0FMLCAiQ0xPQ0FMIn0sCisJe0NSRUFELCAiQ1JFQUQifSwKKwl7Q1NUT1BCLCAiQ1NUT1BCIn0sCisjaWYgIWRlZmluZWQoQ1M1KSB8fCAhZGVmaW5lZChDUzgpCisJe0NTSVpFLCAiQ1NJWkUifSwKKyNlbmRpZgorCXtIVVBDTCwgIkhVUENMIn0sCisJe1BBUkVOQiwgIlBBUkVOQiJ9LAorCXtQQVJPREQgfCBQQVJFTkIsICJQQVJPREQifSwJLyogY29uY2Vzc2lvbiB0byByZWFkYWJpbGl0eSAqLworCXswLCBOVUxMfQorI2RlZmluZSBBTExDVFJMCShDTE9DQUx8Q1JFQUR8Q1NJWkV8Q1NUT1BCfEhVUENMfFBBUkVOQnxQQVJPREQpCisgICAgfSwgbGZsYWdzW10gPQorICAgIHsKKwl7RUNITywgIkVDSE8ifSwKKwl7RUNIT0UgfCBFQ0hPLCAiRUNIT0UifSwJLyogY29uY2Vzc2lvbiB0byByZWFkYWJpbGl0eSAqLworCXtFQ0hPSyB8IEVDSE8sICJFQ0hPSyJ9LAkvKiBjb25jZXNzaW9uIHRvIHJlYWRhYmlsaXR5ICovCisJe0VDSE9OTCwgIkVDSE9OTCJ9LAorCXtJQ0FOT04sICJJQ0FOT04ifSwKKwl7SVNJRywgIklTSUcifSwKKwl7Tk9GTFNILCAiTk9GTFNIIn0sCisJe1RPU1RPUCwgIlRPU1RPUCJ9LAorCXtJRVhURU4sICJJRVhURU4ifSwKKwl7MCwgTlVMTH0KKyNkZWZpbmUgQUxMTE9DQUwJKEVDSE98RUNIT05MfElDQU5PTnxJU0lHfE5PRkxTSHxUT1NUT1B8SUVYVEVOKQorICAgIH07CisKKyAgICBidWYgPSBfbmNfdHJhY2VfYnVmKDAsCisJCQk4ICsgc2l6ZW9mKGlmbGFncykgKworCQkJOCArIHNpemVvZihvZmxhZ3MpICsKKwkJCTggKyBzaXplb2YoY2ZsYWdzKSArCisJCQk4ICsgc2l6ZW9mKGxmbGFncykgKworCQkJOCk7CisgICAgaWYgKGJ1ZiAhPSAwKSB7CisKKwlpZiAodHR5LT5jX2lmbGFnICYgQUxMSU4pCisJICAgIGxvb2t1cF9iaXRzKGJ1ZiwgaWZsYWdzLCAiaWZsYWdzIiwgdHR5LT5jX2lmbGFnKTsKKworCWlmICh0dHktPmNfb2ZsYWcgJiBBTExPVVQpCisJICAgIGxvb2t1cF9iaXRzKGJ1Ziwgb2ZsYWdzLCAib2ZsYWdzIiwgdHR5LT5jX29mbGFnKTsKKworCWlmICh0dHktPmNfY2ZsYWcgJiBBTExDVFJMKQorCSAgICBsb29rdXBfYml0cyhidWYsIGNmbGFncywgImNmbGFncyIsIHR0eS0+Y19jZmxhZyk7CisKKyNpZiBkZWZpbmVkKENTNSkgJiYgZGVmaW5lZChDUzgpCisJeworCSAgICBzdGF0aWMgc3RydWN0IHsKKwkJaW50IHZhbHVlOworCQljb25zdCBjaGFyICpuYW1lOworCSAgICB9IGNzaXplc1tdID0geworI2RlZmluZSBDU19EQVRBKG5hbWUpIHsgbmFtZSwgI25hbWUgIiAiIH0KKwkJQ1NfREFUQShDUzUpLAorI2lmZGVmIENTNgorCQkgICAgQ1NfREFUQShDUzYpLAorI2VuZGlmCisjaWZkZWYgQ1M3CisJCSAgICBDU19EQVRBKENTNyksCisjZW5kaWYKKwkJICAgIENTX0RBVEEoQ1M4KSwKKwkgICAgfTsKKwkgICAgY29uc3QgY2hhciAqcmVzdWx0ID0gIkNTSVpFPyAiOworCSAgICBpbnQgdmFsdWUgPSAodHR5LT5jX2NmbGFnICYgQ1NJWkUpOworCSAgICB1bnNpZ25lZCBuOworCisJICAgIGlmICh2YWx1ZSAhPSAwKSB7CisJCWZvciAobiA9IDA7IG4gPCBTSVpFT0YoY3NpemVzKTsgbisrKSB7CisJCSAgICBpZiAoY3NpemVzW25dLnZhbHVlID09IHZhbHVlKSB7CisJCQlyZXN1bHQgPSBjc2l6ZXNbbl0ubmFtZTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgc3RyY2F0KGJ1ZiwgcmVzdWx0KTsKKwl9CisjZW5kaWYKKworCWlmICh0dHktPmNfbGZsYWcgJiBBTExMT0NBTCkKKwkgICAgbG9va3VwX2JpdHMoYnVmLCBsZmxhZ3MsICJsZmxhZ3MiLCB0dHktPmNfbGZsYWcpOworICAgIH0KKyNlbHNlCisgICAgLyogcmVmZXJlbmNlOiB0dGNvbXBhdCg0TSkgb24gU3VuT1MgNC4xICovCisjaWZuZGVmIEVWRU5QCisjZGVmaW5lIEVWRU5QIDAKKyNlbmRpZgorI2lmbmRlZiBMQ0FTRQorI2RlZmluZSBMQ0FTRSAwCisjZW5kaWYKKyNpZm5kZWYgTExJVE9VVAorI2RlZmluZSBMTElUT1VUIDAKKyNlbmRpZgorI2lmbmRlZiBPRERQCisjZGVmaW5lIE9ERFAgMAorI2VuZGlmCisjaWZuZGVmIFRBTkRFTQorI2RlZmluZSBUQU5ERU0gMAorI2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3QgQklUTkFNRVMgY2ZsYWdzW10gPQorICAgIHsKKwl7Q0JSRUFLLCAiQ0JSRUFLIn0sCisJe0NSTU9ELCAiQ1JNT0QifSwKKwl7RUNITywgIkVDSE8ifSwKKwl7RVZFTlAsICJFVkVOUCJ9LAorCXtMQ0FTRSwgIkxDQVNFIn0sCisJe0xMSVRPVVQsICJMTElUT1VUIn0sCisJe09ERFAsICJPRERQIn0sCisJe1JBVywgIlJBVyJ9LAorCXtUQU5ERU0sICJUQU5ERU0ifSwKKwl7WFRBQlMsICJYVEFCUyJ9LAorCXswLCBOVUxMfQorI2RlZmluZSBBTExDVFJMCShDQlJFQUt8Q1JNT0R8RUNIT3xFVkVOUHxMQ0FTRXxMTElUT1VUfE9ERFB8UkFXfFRBTkRFTXxYVEFCUykKKyAgICB9OworCisgICAgYnVmID0gX25jX3RyYWNlX2J1ZigwLAorCQkJOCArIHNpemVvZihjZmxhZ3MpKTsKKyAgICBpZiAoYnVmICE9IDApIHsKKwlpZiAodHR5LT5zZ19mbGFncyAmIEFMTENUUkwpIHsKKwkgICAgbG9va3VwX2JpdHMoYnVmLCBjZmxhZ3MsICJjZmxhZ3MiLCB0dHktPnNnX2ZsYWdzKTsKKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIChidWYpOworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdHJhY2ViaXRzKHZvaWQpCit7CisgICAgcmV0dXJuIF9uY190cmFjZV90dHltb2RlKCYoY3VyX3Rlcm0tPk50dHliKSk7Cit9CisjZWxzZQorRU1QVFlfTU9EVUxFKF9uY190cmFjZWJpdHMpCisjZW5kaWYgLyogVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHJhY2UvbGliX3RyYWNlY2hyLmMgYi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Y2YwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWNoci5jCkBAIC0wLDAgKzEsODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl90cmFjZWNoci5jIC0gVHJhY2luZy9EZWJ1Z2dpbmcgcm91dGluZXMKKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3RyYWNlY2hyLmMsdiAxLjE5IDIwMDgvMDgvMDMgMTU6Mzk6MjkgdG9tIEV4cCAkIikKKworI2lmZGVmIFRSQUNFCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY190cmFjZWNoYXIoU0NSRUVOICpzcCwgaW50IGNoKQoreworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqbmFtZTsKKyAgICBjaGFyICpNeUJ1ZmZlciA9ICgoc3AgIT0gMCkKKwkJICAgICAgPyBzcC0+dHJhY2VjaHJfYnVmCisJCSAgICAgIDogX25jX2dsb2JhbHMudHJhY2VjaHJfYnVmKTsKKworICAgIGlmIChjaCA+IEtFWV9NSU4gfHwgY2ggPCAwKSB7CisJbmFtZSA9IF9uY19rZXluYW1lKHNwLCBjaCk7CisJaWYgKG5hbWUgPT0gMCB8fCAqbmFtZSA9PSAnXDAnKQorCSAgICBuYW1lID0gIk5VTEwiOworCSh2b2lkKSBzcHJpbnRmKE15QnVmZmVyLCAiJyUuMzBzJyA9ICUjMDNvIiwgbmFtZSwgY2gpOworICAgIH0gZWxzZSBpZiAoIWlzOGJpdHMoY2gpIHx8ICFpc3ByaW50KFVDaGFyKGNoKSkpIHsKKwkvKgorCSAqIHdvcmthcm91bmQgZm9yIGdsaWJjIGJ1ZzoKKwkgKiBzcHJpbnRmIGNoYW5nZXMgdGhlIHJlc3VsdCBmcm9tIHVuY3RybCgpIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBpdAorCSAqIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UuCisJICovCisJKHZvaWQpIHNwcmludGYoTXlCdWZmZXIsICIlIzAzbyIsIGNoKTsKKyAgICB9IGVsc2UgeworCW5hbWUgPSBfbmNfdW5jdHJsKHNwLCAoY2h0eXBlKSBjaCk7CisJaWYgKG5hbWUgPT0gMCB8fCAqbmFtZSA9PSAwKQorCSAgICBuYW1lID0gIm51bGwiOwkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJKHZvaWQpIHNwcmludGYoTXlCdWZmZXIsICInJS4zMHMnID0gJSMwM28iLCBuYW1lLCBjaCk7CisgICAgfQorICAgIHJldHVybiAoTXlCdWZmZXIpOworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VjaGFyKGludCBjaCkKK3sKKyAgICByZXR1cm4gX25jX3RyYWNlY2hhcihTUCwgY2gpOworfQorI2Vsc2UKK0VNUFRZX01PRFVMRShfbmNfbGliX3RyYWNlY2hyKQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWRtcC5jIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2VkbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODczMmEwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS9saWJfdHJhY2VkbXAuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3RyYWNlZG1wLmMgLSBUcmFjaW5nL0RlYnVnZ2luZyByb3V0aW5lcworICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHJhY2VkbXAuYyx2IDEuMzEgMjAwOC8wOC8xNiAxOTozMDo1NiB0b20gRXhwICQiKQorCisjaWZkZWYgVFJBQ0UKKworI2RlZmluZSBteV9idWZmZXIgX25jX2dsb2JhbHMudHJhY2VkbXBfYnVmCisjZGVmaW5lIG15X2xlbmd0aCBfbmNfZ2xvYmFscy50cmFjZWRtcF91c2VkCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfdHJhY2VkdW1wKGNvbnN0IGNoYXIgKm5hbWUsIFdJTkRPVyAqd2luKQoreworICAgIGludCBpLCBqLCBuLCB3aWR0aDsKKworICAgIC8qIGNvbXB1dGUgbmFycm93ZXN0IHBvc3NpYmxlIGRpc3BsYXkgd2lkdGggKi8KKyAgICBmb3IgKHdpZHRoID0gaSA9IDA7IGkgPD0gd2luLT5fbWF4eTsgKytpKSB7CisJbiA9IDA7CisJZm9yIChqID0gMDsgaiA8PSB3aW4tPl9tYXh4OyArK2opIHsKKwkgICAgaWYgKENoYXJPZih3aW4tPl9saW5lW2ldLnRleHRbal0pICE9IEwoJyAnKQorCQl8fCBBdHRyT2Yod2luLT5fbGluZVtpXS50ZXh0W2pdKSAhPSBBX05PUk1BTAorCQl8fCBHZXRQYWlyKHdpbi0+X2xpbmVbaV0udGV4dFtqXSkgIT0gMCkgeworCQluID0gajsKKwkgICAgfQorCX0KKworCWlmIChuID4gd2lkdGgpCisJICAgIHdpZHRoID0gbjsKKyAgICB9CisgICAgaWYgKHdpZHRoIDwgd2luLT5fbWF4eCkKKwkrK3dpZHRoOworICAgIGlmICgrK3dpZHRoICsgMSA+IChpbnQpIG15X2xlbmd0aCkgeworCW15X2xlbmd0aCA9IDIgKiAod2lkdGggKyAxKTsKKwlteV9idWZmZXIgPSB0eXBlUmVhbGxvYyhjaGFyLCBteV9sZW5ndGgsIG15X2J1ZmZlcik7CisgICAgfQorCisgICAgZm9yIChuID0gMDsgbiA8PSB3aW4tPl9tYXh5OyArK24pIHsKKwljaGFyICplcCA9IG15X2J1ZmZlcjsKKwlib29sIGhhdmVhdHRycywgaGF2ZWNvbG9yczsKKworCS8qCisJICogRHVtcCBBX0NIQVJURVhUIHBhcnQuICBJdCBpcyBtb3JlIGltcG9ydGFudCB0byBtYWtlIHRoZSBncmlkIGxpbmUgdXAKKwkgKiBpbiB0aGUgdHJhY2UgZmlsZSB0aGFuIHRvIHJlcHJlc2VudCBjb250cm9sLSBhbmQgd2lkZS1jaGFyYWN0ZXJzLCBzbworCSAqIHdlIG1hcCB0aG9zZSB0byAnLicgYW5kICc/JyByZXNwZWN0aXZlbHkuCisJICovCisJZm9yIChqID0gMDsgaiA8IHdpZHRoOyArK2opIHsKKwkgICAgY2h0eXBlIHRlc3QgPSBDaGFyT2Yod2luLT5fbGluZVtuXS50ZXh0W2pdKTsKKwkgICAgZXBbal0gPSAoY2hhcikgKChVQ2hhcih0ZXN0KSA9PSB0ZXN0CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkJCSAgICAgJiYgKHdpbi0+X2xpbmVbbl0udGV4dFtqXS5jaGFyc1sxXSA9PSAwKQorI2VuZGlmCisJCQkgICAgKQorCQkJICAgID8gKGlzY250cmwoVUNoYXIodGVzdCkpCisJCQkgICAgICAgPyAnLicKKwkJCSAgICAgICA6IFVDaGFyKHRlc3QpKQorCQkJICAgIDogJz8nKTsKKwl9CisJZXBbal0gPSAnXDAnOworCV90cmFjZWYoIiVzWyUyZF0gJTNsZCUzbGQgPSclcyciLAorCQluYW1lLCBuLAorCQkobG9uZykgd2luLT5fbGluZVtuXS5maXJzdGNoYXIsCisJCShsb25nKSB3aW4tPl9saW5lW25dLmxhc3RjaGFyLAorCQllcCk7CisKKwkvKiBpZiB0aGVyZSBhcmUgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMgb24gdGhlIGxpbmUsIHByaW50IHRoZW0gbm93ICovCisJaWZfV0lERUMoeworCSAgICBib29sIG11bHRpY29sdW1uID0gRkFMU0U7CisJICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgKytqKQorCQlpZiAoV2lkZWNFeHQod2luLT5fbGluZVtuXS50ZXh0W2pdKSAhPSAwKSB7CisJCSAgICBtdWx0aWNvbHVtbiA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICBpZiAobXVsdGljb2x1bW4pIHsKKwkJZXAgPSBteV9idWZmZXI7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgKytqKSB7CisJCSAgICBpbnQgdGVzdCA9IFdpZGVjRXh0KHdpbi0+X2xpbmVbbl0udGV4dFtqXSk7CisJCSAgICBpZiAodGVzdCkgeworCQkJZXBbal0gPSAoY2hhcikgKHRlc3QgKyAnMCcpOworCQkgICAgfSBlbHNlIHsKKwkJCWVwW2pdID0gJyAnOworCQkgICAgfQorCQl9CisJCWVwW2pdID0gJ1wwJzsKKwkJX3RyYWNlZigiJSpzWyUyZF0lKnM9JyVzJyIsIChpbnQpIHN0cmxlbihuYW1lKSwKKwkJCSJ3aWRlYyIsIG4sIDgsICIgIiwgbXlfYnVmZmVyKTsKKwkgICAgfQorCX0pOworCisJLyogZHVtcCBBX0NPTE9SIHBhcnQsIHdpbGwgc2NyZXcgdXAgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA5NiAqLworCWhhdmVjb2xvcnMgPSBGQUxTRTsKKwlmb3IgKGogPSAwOyBqIDwgd2lkdGg7ICsraikKKwkgICAgaWYgKEdldFBhaXIod2luLT5fbGluZVtuXS50ZXh0W2pdKSAhPSAwKSB7CisJCWhhdmVjb2xvcnMgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCWlmIChoYXZlY29sb3JzKSB7CisJICAgIGVwID0gbXlfYnVmZmVyOworCSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7ICsraikgeworCQlpbnQgcGFpciA9IEdldFBhaXIod2luLT5fbGluZVtuXS50ZXh0W2pdKTsKKwkJaWYgKHBhaXIgPj0gNTIpCisJCSAgICBlcFtqXSA9ICc/JzsKKwkJZWxzZSBpZiAocGFpciA+PSAzNikKKwkJICAgIGVwW2pdID0gKGNoYXIpIChwYWlyICsgJ0EnKTsKKwkJZWxzZSBpZiAocGFpciA+PSAxMCkKKwkJICAgIGVwW2pdID0gKGNoYXIpIChwYWlyICsgJ2EnKTsKKwkJZWxzZSBpZiAocGFpciA+PSAxKQorCQkgICAgZXBbal0gPSAoY2hhcikgKHBhaXIgKyAnMCcpOworCQllbHNlCisJCSAgICBlcFtqXSA9ICcgJzsKKwkgICAgfQorCSAgICBlcFtqXSA9ICdcMCc7CisJICAgIF90cmFjZWYoIiUqc1slMmRdJSpzPSclcyciLCAoaW50KSBzdHJsZW4obmFtZSksCisJCSAgICAiY29sb3JzIiwgbiwgOCwgIiAiLCBteV9idWZmZXIpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkgICAgY29uc3QgY2hhciAqaGV4ID0gIiAxMjM0NTY3ODlBQkNERUYiOworCSAgICBhdHRyX3QgbWFzayA9ICgweGYgPDwgKChpICsgNCkgKiA0KSk7CisKKwkgICAgaGF2ZWF0dHJzID0gRkFMU0U7CisJICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgKytqKQorCQlpZiAoQXR0ck9mKHdpbi0+X2xpbmVbbl0udGV4dFtqXSkgJiBtYXNrKSB7CisJCSAgICBoYXZlYXR0cnMgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgaWYgKGhhdmVhdHRycykgeworCQllcCA9IG15X2J1ZmZlcjsKKwkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyArK2opCisJCSAgICBlcFtqXSA9IGhleFsoQXR0ck9mKHdpbi0+X2xpbmVbbl0udGV4dFtqXSkgJiBtYXNrKSA+PgorCQkJCSgoaSArIDQpICogNCldOworCQllcFtqXSA9ICdcMCc7CisJCV90cmFjZWYoIiUqcyVkWyUyZF0lKnM9JyVzJyIsIChpbnQpIHN0cmxlbihuYW1lKSAtCisJCQkxLCAiYXR0cnMiLCBpLCBuLCA4LCAiICIsIG15X2J1ZmZlcik7CisJICAgIH0KKwl9CisgICAgfQorI2lmIE5PX0xFQUtTCisgICAgZnJlZShteV9idWZmZXIpOworICAgIG15X2J1ZmZlciA9IDA7CisgICAgbXlfbGVuZ3RoID0gMDsKKyNlbmRpZgorfQorCisjZWxzZQorRU1QVFlfTU9EVUxFKF9uY19saWJfdHJhY2VkbXApCisjZW5kaWYgLyogVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHJhY2UvbGliX3RyYWNlbXNlLmMgYi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZW1zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Y2MxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZW1zZS5jCkBAIC0wLDAgKzEsMTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfdHJhY2Vtc2UuYyAtIFRyYWNpbmcvRGVidWdnaW5nIHJvdXRpbmVzIChtb3VzZSBldmVudHMpCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHJhY2Vtc2UuYyx2IDEuMTUgMjAwOC8wOC8wMyAxNTozOToyOSB0b20gRXhwICQiKQorCisjaWZkZWYgVFJBQ0UKKworI2RlZmluZSBteV9idWZmZXIgc3AtPnRyYWNlbXNlX2J1ZgorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdHJhY2Vtb3VzZShTQ1JFRU4gKnNwLCBNRVZFTlQgY29uc3QgKmVwKQoreworICAgICh2b2lkKSBzcHJpbnRmKG15X2J1ZmZlciwgVFJBQ0VNU0VfRk1ULAorCQkgICBlcC0+aWQsCisJCSAgIGVwLT54LAorCQkgICBlcC0+eSwKKwkJICAgZXAtPnosCisJCSAgICh1bnNpZ25lZCBsb25nKSBlcC0+YnN0YXRlKTsKKworI2RlZmluZSBTSE9XKG0sIHMpIGlmICgoZXAtPmJzdGF0ZSAmIG0pID09IG0pIHN0cmNhdChzdHJjYXQobXlfYnVmZmVyLCBzKSwgIiwgIikKKworICAgIFNIT1coQlVUVE9OMV9SRUxFQVNFRCwgInJlbGVhc2UtMSIpOworICAgIFNIT1coQlVUVE9OMV9QUkVTU0VELCAicHJlc3MtMSIpOworICAgIFNIT1coQlVUVE9OMV9DTElDS0VELCAiY2xpY2stMSIpOworICAgIFNIT1coQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTEiKTsKKyAgICBTSE9XKEJVVFRPTjFfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay0xIik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjFfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC0xIik7CisjZW5kaWYKKworICAgIFNIT1coQlVUVE9OMl9SRUxFQVNFRCwgInJlbGVhc2UtMiIpOworICAgIFNIT1coQlVUVE9OMl9QUkVTU0VELCAicHJlc3MtMiIpOworICAgIFNIT1coQlVUVE9OMl9DTElDS0VELCAiY2xpY2stMiIpOworICAgIFNIT1coQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTIiKTsKKyAgICBTSE9XKEJVVFRPTjJfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay0yIik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjJfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC0yIik7CisjZW5kaWYKKworICAgIFNIT1coQlVUVE9OM19SRUxFQVNFRCwgInJlbGVhc2UtMyIpOworICAgIFNIT1coQlVUVE9OM19QUkVTU0VELCAicHJlc3MtMyIpOworICAgIFNIT1coQlVUVE9OM19DTElDS0VELCAiY2xpY2stMyIpOworICAgIFNIT1coQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTMiKTsKKyAgICBTSE9XKEJVVFRPTjNfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay0zIik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjNfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC0zIik7CisjZW5kaWYKKworICAgIFNIT1coQlVUVE9ONF9SRUxFQVNFRCwgInJlbGVhc2UtNCIpOworICAgIFNIT1coQlVUVE9ONF9QUkVTU0VELCAicHJlc3MtNCIpOworICAgIFNIT1coQlVUVE9ONF9DTElDS0VELCAiY2xpY2stNCIpOworICAgIFNIT1coQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTQiKTsKKyAgICBTSE9XKEJVVFRPTjRfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay00Iik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjRfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC00Iik7CisjZW5kaWYKKworI2lmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiA9PSAyCisgICAgU0hPVyhCVVRUT041X1JFTEVBU0VELCAicmVsZWFzZS01Iik7CisgICAgU0hPVyhCVVRUT041X1BSRVNTRUQsICJwcmVzcy01Iik7CisgICAgU0hPVyhCVVRUT041X0NMSUNLRUQsICJjbGljay01Iik7CisgICAgU0hPVyhCVVRUT041X0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stNSIpOworICAgIFNIT1coQlVUVE9ONV9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTUiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT05fQ1RSTCwgImN0cmwiKTsKKyAgICBTSE9XKEJVVFRPTl9TSElGVCwgInNoaWZ0Iik7CisgICAgU0hPVyhCVVRUT05fQUxULCAiYWx0Iik7CisgICAgU0hPVyhBTExfTU9VU0VfRVZFTlRTLCAiYWxsLWV2ZW50cyIpOworICAgIFNIT1coUkVQT1JUX01PVVNFX1BPU0lUSU9OLCAicG9zaXRpb24iKTsKKworI3VuZGVmIFNIT1cKKworICAgIGlmIChteV9idWZmZXJbc3RybGVuKG15X2J1ZmZlcikgLSAxXSA9PSAnICcpCisJbXlfYnVmZmVyW3N0cmxlbihteV9idWZmZXIpIC0gMl0gPSAnXDAnOworICAgICh2b2lkKSBzdHJjYXQobXlfYnVmZmVyLCAifSIpOworICAgIHJldHVybiAobXlfYnVmZmVyKTsKK30KKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX3RyYWNlbW91c2UoTUVWRU5UIGNvbnN0ICplcCkKK3sKKyAgICByZXR1cm4gX25jX3RyYWNlbW91c2UoU1AsIGVwKTsKK30KKworI2Vsc2UgLyogIVRSQUNFICovCitFTVBUWV9NT0RVTEUoX25jX2xpYl90cmFjZW1vdXNlKQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3RyYWNlL3RyYWNlX2J1Zi5jIGIvbmN1cnNlcy90cmFjZS90cmFjZV9idWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQ1YWNjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS90cmFjZV9idWYuYwpAQCAtMCwwICsxLDExNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgIDE5OTctb24gICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgl0cmFjZV9idWYuYyAtIFRyYWNpbmcvRGVidWdnaW5nIGJ1ZmZlcnMgKGF0dHJpYnV0ZXMpCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiB0cmFjZV9idWYuYyx2IDEuMTQgMjAwOC8wOC8wMyAxNToxMzo1NiB0b20gRXhwICQiKQorCisjZGVmaW5lIE15TGlzdCBfbmNfZ2xvYmFscy50cmFjZWJ1Zl9wdHIKKyNkZWZpbmUgTXlTaXplIF9uY19nbG9iYWxzLnRyYWNlYnVmX3VzZWQKKworc3RhdGljIGNoYXIgKgorX25jX3RyYWNlX2FsbG9jKGludCBidWZudW0sIHNpemVfdCB3YW50KQoreworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoYnVmbnVtID49IDApIHsKKwlpZiAoKHNpemVfdCkgKGJ1Zm51bSArIDEpID4gTXlTaXplKSB7CisJICAgIHNpemVfdCBuZWVkID0gKGJ1Zm51bSArIDEpICogMjsKKwkgICAgaWYgKChNeUxpc3QgPSB0eXBlUmVhbGxvYyhUUkFDRUJVRiwgbmVlZCwgTXlMaXN0KSkgIT0gMCkgeworCQl3aGlsZSAobmVlZCA+IE15U2l6ZSkKKwkJICAgIE15TGlzdFtNeVNpemUrK10udGV4dCA9IDA7CisJICAgIH0KKwl9CisKKwlpZiAoTXlMaXN0ICE9IDApIHsKKwkgICAgaWYgKE15TGlzdFtidWZudW1dLnRleHQgPT0gMAorCQl8fCB3YW50ID4gTXlMaXN0W2J1Zm51bV0uc2l6ZSkgeworCQlNeUxpc3RbYnVmbnVtXS50ZXh0ID0gdHlwZVJlYWxsb2MoY2hhciwgd2FudCwgTXlMaXN0W2J1Zm51bV0udGV4dCk7CisJCWlmIChNeUxpc3RbYnVmbnVtXS50ZXh0ICE9IDApCisJCSAgICBNeUxpc3RbYnVmbnVtXS5zaXplID0gd2FudDsKKwkgICAgfQorCSAgICByZXN1bHQgPSBNeUxpc3RbYnVmbnVtXS50ZXh0OworCX0KKyAgICB9CisjaWYgTk9fTEVBS1MKKyAgICBlbHNlIHsKKwlpZiAoTXlTaXplKSB7CisJICAgIGlmIChNeUxpc3QpIHsKKwkJd2hpbGUgKE15U2l6ZS0tKSB7CisJCSAgICBpZiAoTXlMaXN0W015U2l6ZV0udGV4dCAhPSAwKSB7CisJCQlmcmVlKE15TGlzdFtNeVNpemVdLnRleHQpOworCQkgICAgfQorCQl9CisJCWZyZWUoTXlMaXN0KTsKKwkJTXlMaXN0ID0gMDsKKwkgICAgfQorCSAgICBNeVNpemUgPSAwOworCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogKHJlKUFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggZm9yIHRoZSBjYWxsZXIncyB3YW50cy4KKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3RyYWNlX2J1ZihpbnQgYnVmbnVtLCBzaXplX3Qgd2FudCkKK3sKKyAgICBjaGFyICpyZXN1bHQgPSBfbmNfdHJhY2VfYWxsb2MoYnVmbnVtLCB3YW50KTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisJKnJlc3VsdCA9ICdcMCc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEFwcGVuZCBhIG5ldyBzdHJpbmcgdG8gYW4gZXhpc3RpbmcgYnVmZmVyLgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdHJhY2VfYnVmY2F0KGludCBidWZudW0sIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICAgIGNoYXIgKmJ1ZmZlciA9IF9uY190cmFjZV9hbGxvYyhidWZudW0sIDApOworICAgIGlmIChidWZmZXIgIT0gMCkgeworCXNpemVfdCBoYXZlID0gc3RybGVuKGJ1ZmZlcik7CisKKwlidWZmZXIgPSBfbmNfdHJhY2VfYWxsb2MoYnVmbnVtLCAxICsgaGF2ZSArIHN0cmxlbih2YWx1ZSkpOworCWlmIChidWZmZXIgIT0gMCkKKwkgICAgKHZvaWQpIHN0cmNweShidWZmZXIgKyBoYXZlLCB2YWx1ZSk7CisKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHJhY2UvdHJhY2VfdHJpZXMuYyBiL25jdXJzZXMvdHJhY2UvdHJhY2VfdHJpZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODEzYWJhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90cmFjZS90cmFjZV90cmllcy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk5ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoJdHJhY2VfdHJpZXMuYyAtIFRyYWNpbmcvRGVidWdnaW5nIGJ1ZmZlcnMgKGtleWNvZGUgdHJpZXMtdHJlZXMpCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiB0cmFjZV90cmllcy5jLHYgMS4xMyAyMDA4LzA4LzAzIDE1OjQzOjMwIHRvbSBFeHAgJCIpCisKKyNpZmRlZiBUUkFDRQorI2RlZmluZSBteV9idWZmZXIgX25jX2dsb2JhbHMudHJhY2V0cnlfYnVmCisjZGVmaW5lIG15X2xlbmd0aCBfbmNfZ2xvYmFscy50cmFjZXRyeV91c2VkCisKK3N0YXRpYyB2b2lkCityZWN1cl90cmllcyhUUklFUyAqIHRyZWUsIHVuc2lnbmVkIGxldmVsKQoreworICAgIGlmIChsZXZlbCA+IG15X2xlbmd0aCkgeworCW15X2xlbmd0aCA9IChsZXZlbCArIDEpICogNDsKKwlteV9idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSByZWFsbG9jKG15X2J1ZmZlciwgbXlfbGVuZ3RoKTsKKyAgICB9CisKKyAgICB3aGlsZSAodHJlZSAhPSAwKSB7CisJaWYgKChteV9idWZmZXJbbGV2ZWxdID0gdHJlZS0+Y2gpID09IDApCisJICAgIG15X2J1ZmZlcltsZXZlbF0gPSAxMjg7CisJbXlfYnVmZmVyW2xldmVsICsgMV0gPSAwOworCWlmICh0cmVlLT52YWx1ZSAhPSAwKSB7CisJICAgIF90cmFjZWYoIiU1ZDogJXMgKCVzKSIsIHRyZWUtPnZhbHVlLAorCQkgICAgX25jX3Zpc2J1ZigoY2hhciAqKSBteV9idWZmZXIpLCBrZXluYW1lKHRyZWUtPnZhbHVlKSk7CisJfQorCWlmICh0cmVlLT5jaGlsZCkKKwkgICAgcmVjdXJfdHJpZXModHJlZS0+Y2hpbGQsIGxldmVsICsgMSk7CisJdHJlZSA9IHRyZWUtPnNpYmxpbmc7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3RyYWNlX3RyaWVzKFRSSUVTICogdHJlZSkKK3sKKyAgICBteV9idWZmZXIgPSB0eXBlTWFsbG9jKHVuc2lnbmVkIGNoYXIsIG15X2xlbmd0aCA9IDgwKTsKKyAgICBfdHJhY2VmKCJCRUdJTiB0cmllcyAlcCIsIHRyZWUpOworICAgIHJlY3VyX3RyaWVzKHRyZWUsIDApOworICAgIF90cmFjZWYoIi4gLiAuIHRyaWVzICVwIiwgdHJlZSk7CisgICAgZnJlZShteV9idWZmZXIpOworfQorCisjZWxzZQorRU1QVFlfTU9EVUxFKF9uY190cmFjZV90cmllcykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90cmFjZS90cmFjZV94bmFtZXMuYyBiL25jdXJzZXMvdHJhY2UvdHJhY2VfeG5hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwYjU5MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdHJhY2UvdHJhY2VfeG5hbWVzLmMKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OSwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTkgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgl0cmFjZV94bmFtZXMuYyAtIFRyYWNpbmcvRGVidWdnaW5nIGJ1ZmZlcnMgKFRFUk1UWVBFIGV4dGVuZGVkIG5hbWVzKQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHRyYWNlX3huYW1lcy5jLHYgMS41IDIwMDAvMTIvMTAgMDM6MDI6NDUgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY190cmFjZV94bmFtZXMoVEVSTVRZUEUgKiB0cCBHQ0NfVU5VU0VEKQoreworI2lmZGVmIFRSQUNFCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICBpbnQgbGltaXQgPSB0cC0+ZXh0X0Jvb2xlYW5zICsgdHAtPmV4dF9OdW1iZXJzICsgdHAtPmV4dF9TdHJpbmdzOworICAgIGludCBuLCBtOworICAgIGlmIChsaW1pdCkgeworCWludCBiZWdpbl9udW0gPSB0cC0+ZXh0X0Jvb2xlYW5zOworCWludCBiZWdpbl9zdHIgPSB0cC0+ZXh0X0Jvb2xlYW5zICsgdHAtPmV4dF9OdW1iZXJzOworCisJX3RyYWNlZigiZXh0ZW5kZWQgbmFtZXMgKCVzKSAlZCA9ICVkKyVkKyVkIG9mICVkKyVkKyVkIiwKKwkJdHAtPnRlcm1fbmFtZXMsCisJCWxpbWl0LAorCQl0cC0+ZXh0X0Jvb2xlYW5zLCB0cC0+ZXh0X051bWJlcnMsIHRwLT5leHRfU3RyaW5ncywKKwkJdHAtPm51bV9Cb29sZWFucywgdHAtPm51bV9OdW1iZXJzLCB0cC0+bnVtX1N0cmluZ3MpOworCWZvciAobiA9IDA7IG4gPCBsaW1pdDsgbisrKSB7CisJICAgIGlmICgobSA9IG4gLSBiZWdpbl9zdHIpID49IDApIHsKKwkJX3RyYWNlZigiWyVkXSAlcyA9ICVzIiwgbiwKKwkJCXRwLT5leHRfTmFtZXNbbl0sCisJCQlfbmNfdmlzYnVmKHRwLT5TdHJpbmdzW3RwLT5udW1fU3RyaW5ncyArIG0gLSB0cC0+ZXh0X1N0cmluZ3NdKSk7CisJICAgIH0gZWxzZSBpZiAoKG0gPSBuIC0gYmVnaW5fbnVtKSA+PSAwKSB7CisJCV90cmFjZWYoIlslZF0gJXMgPSAlZCAobnVtKSIsIG4sCisJCQl0cC0+ZXh0X05hbWVzW25dLAorCQkJdHAtPk51bWJlcnNbdHAtPm51bV9OdW1iZXJzICsgbSAtIHRwLT5leHRfTnVtYmVyc10pOworCSAgICB9IGVsc2UgeworCQlfdHJhY2VmKCJbJWRdICVzID0gJWQgKGJvb2wpIiwgbiwKKwkJCXRwLT5leHRfTmFtZXNbbl0sCisJCQl0cC0+Qm9vbGVhbnNbdHAtPm51bV9Cb29sZWFucyArIG4gLSB0cC0+ZXh0X0Jvb2xlYW5zXSk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHJhY2UvdmFyYXJncy5jIGIvbmN1cnNlcy90cmFjZS92YXJhcmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlZTQ2NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdHJhY2UvdmFyYXJncy5jCkBAIC0wLDAgKzEsMTg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiB2YXJhcmdzLmMsdiAxLjcgMjAwOC8wOC8wMyAxNTo0Mjo0OSB0b20gRXhwICQiKQorCisjaWZkZWYgVFJBQ0UKKworI2RlZmluZSBNQVhfUEFSTVMgMTAKKwordHlwZWRlZiBlbnVtIHsKKyAgICBhdFVua25vd24gPSAwLCBhdEludGVnZXIsIGF0RmxvYXQsIGF0UG9pbnQsIGF0U3RyaW5nCit9IEFSR1RZUEU7CisKKyNkZWZpbmUgVkFfSU5UKHR5cGUpIGl2YWwgPSB2YV9hcmcoYXAsIHR5cGUpCisjZGVmaW5lIFZBX0ZMVCh0eXBlKSBmdmFsID0gdmFfYXJnKGFwLCB0eXBlKQorI2RlZmluZSBWQV9QVFIodHlwZSkgcHZhbCA9IChjaGFyICopdmFfYXJnKGFwLCB0eXBlKQorI2RlZmluZSBWQV9TVFIodHlwZSkgc3ZhbCA9IHZhX2FyZyhhcCwgdHlwZSkKKworI2RlZmluZSBNeUJ1ZmZlciBfbmNfZ2xvYmFscy50cmFjZWFyZ19idWYKKyNkZWZpbmUgTXlMZW5ndGggX25jX2dsb2JhbHMudHJhY2VhcmdfdXNlZAorCisvKgorICogUmV0dXJucyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIHBhcmFtZXRlciBsaXN0IG9mIGEgcHJpbnRmLXN0eWxlIGNhbGwuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY192YXJhcmdzKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKyAgICBzdGF0aWMgY2hhciBkdW1teVtdID0gIiI7CisKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIGNvbnN0IGNoYXIgKnBhcmFtOworICAgIGludCBuOworCisgICAgaWYgKGZtdCA9PSAwIHx8ICpmbXQgPT0gJ1wwJykKKwlyZXR1cm4gZHVtbXk7CisgICAgaWYgKE15TGVuZ3RoID09IDApCisJTXlCdWZmZXIgPSB0eXBlTWFsbG9jKGNoYXIsIE15TGVuZ3RoID0gQlVGU0laKTsKKyAgICBpZiAoTXlCdWZmZXIgPT0gMCkKKwlyZXR1cm4gZHVtbXk7CisgICAgKk15QnVmZmVyID0gJ1wwJzsKKworICAgIHdoaWxlICgqZm10ICE9ICdcMCcpIHsKKwlpZiAoKmZtdCA9PSAnJScpIHsKKwkgICAgY2hhciAqcHZhbCA9IDA7CS8qIGF2b2lkIGNvbnN0LWNhc3QgKi8KKwkgICAgY29uc3QgY2hhciAqc3ZhbCA9ICIiOworCSAgICBkb3VibGUgZnZhbCA9IDAuMDsKKwkgICAgaW50IGRvbmUgPSBGQUxTRTsKKwkgICAgaW50IGl2YWwgPSAwOworCSAgICBpbnQgdHlwZSA9IDA7CisJICAgIEFSR1RZUEUgcGFybVtNQVhfUEFSTVNdOworCSAgICBpbnQgcGFybXMgPSAwOworCSAgICBBUkdUWVBFIHVzZWQgPSBhdFVua25vd247CisKKwkgICAgd2hpbGUgKCorK2ZtdCAhPSAnXDAnICYmICFkb25lKSB7CisKKwkJaWYgKCpmbXQgPT0gJyonKSB7CisJCSAgICBWQV9JTlQoaW50KTsKKwkJICAgIGlmIChwYXJtcyA8IE1BWF9QQVJNUykKKwkJCXBhcm1bcGFybXMrK10gPSBhdEludGVnZXI7CisJCX0gZWxzZSBpZiAoaXNhbHBoYShVQ2hhcigqZm10KSkpIHsKKwkJICAgIGRvbmUgPSBUUlVFOworCQkgICAgc3dpdGNoICgqZm10KSB7CisJCSAgICBjYXNlICdaJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2gnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnbCc6CS8qIEZBTExUSFJVICovCisJCQlkb25lID0gRkFMU0U7CisJCQl0eXBlID0gKmZtdDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnaSc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdkJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ3UnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAneCc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdYJzoJLyogRkFMTFRIUlUgKi8KKwkJCWlmICh0eXBlID09ICdsJykKKwkJCSAgICBWQV9JTlQobG9uZyk7CisJCQllbHNlIGlmICh0eXBlID09ICdaJykKKwkJCSAgICBWQV9JTlQoc2l6ZV90KTsKKwkJCWVsc2UKKwkJCSAgICBWQV9JTlQoaW50KTsKKwkJCXVzZWQgPSBhdEludGVnZXI7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ2YnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnZSc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdFJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2cnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnRyc6CS8qIEZBTExUSFJVICovCisJCQlWQV9GTFQoZG91YmxlKTsKKwkJCXVzZWQgPSBhdEZsb2F0OworCQkJYnJlYWs7CisJCSAgICBjYXNlICdjJzoKKwkJCVZBX0lOVChpbnQpOworCQkJdXNlZCA9IGF0SW50ZWdlcjsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAncyc6CisJCQlWQV9TVFIoY29uc3QgY2hhciAqKTsKKwkJCXVzZWQgPSBhdFN0cmluZzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAncCc6CisJCQlWQV9QVFIodm9pZCAqKTsKKwkJCXVzZWQgPSBhdFBvaW50OworCQkJYnJlYWs7CisJCSAgICBjYXNlICduJzoKKwkJCVZBX1BUUihpbnQgKik7CisJCQl1c2VkID0gYXRQb2ludDsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJCWJyZWFrOworCQkgICAgfQorCQl9IGVsc2UgaWYgKCpmbXQgPT0gJyUnKSB7CisJCSAgICBkb25lID0gVFJVRTsKKwkJfQorCQlpZiAodXNlZCAhPSBhdFVua25vd24gJiYgcGFybXMgPCBNQVhfUEFSTVMpIHsKKwkJICAgIHBhcm1bcGFybXMrK10gPSB1c2VkOworCQkgICAgZm9yIChuID0gMDsgbiA8IHBhcm1zOyArK24pIHsKKwkJCXVzZWQgPSBwYXJtW25dOworCQkJcGFyYW0gPSBidWZmZXI7CisJCQlzd2l0Y2ggKHVzZWQpIHsKKwkJCWNhc2UgYXRJbnRlZ2VyOgorCQkJICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpdmFsKTsKKwkJCSAgICBicmVhazsKKwkJCWNhc2UgYXRGbG9hdDoKKwkJCSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVmIiwgZnZhbCk7CisJCQkgICAgYnJlYWs7CisJCQljYXNlIGF0UG9pbnQ6CisJCQkgICAgc3ByaW50ZihidWZmZXIsICIlcCIsIHB2YWwpOworCQkJICAgIGJyZWFrOworCQkJY2FzZSBhdFN0cmluZzoKKwkJCSAgICBwYXJhbSA9IF9uY192aXNidWYyKDEsIHN2YWwpOworCQkJICAgIGJyZWFrOworCQkJY2FzZSBhdFVua25vd246CisJCQlkZWZhdWx0OgorCQkJICAgIHN0cmNweShidWZmZXIsICI/Iik7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlNeUxlbmd0aCArPSBzdHJsZW4ocGFyYW0pICsgMjsKKwkJCU15QnVmZmVyID0gdHlwZVJlYWxsb2MoY2hhciwgTXlMZW5ndGgsIE15QnVmZmVyKTsKKwkJCXNwcmludGYoTXlCdWZmZXIgKyBzdHJsZW4oTXlCdWZmZXIpLCAiLCAlcyIsIHBhcmFtKTsKKwkJICAgIH0KKwkJfQorCQl1c2VkID0gYXRVbmtub3duOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZm10Kys7CisJfQorICAgIH0KKworICAgIHJldHVybiAoTXlCdWZmZXIpOworfQorI2Vsc2UKK0VNUFRZX01PRFVMRShfbmNfdmFyYXJncykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90cmFjZS92aXNidWYuYyBiL25jdXJzZXMvdHJhY2UvdmlzYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5ZmIxNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdHJhY2UvdmlzYnVmLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXZpc2J1Zi5jIC0gVHJhY2luZy9EZWJ1Z2dpbmcgc3VwcG9ydCByb3V0aW5lcworICovCisKKyNkZWZpbmUgTkVFRF9OQ1VSU0VTX0NIX1QKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHZpc2J1Zi5jLHYgMS4zMiAyMDA4LzA4LzA0IDIzOjA3OjM5IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgTm9ybWFsTGVuKGxlbikgKHNpemVfdCkgKCgoc2l6ZV90KShsZW4pICsgMSkgKiA0KQorI2RlZmluZSBXaWRlTGVuKGxlbikgICAoc2l6ZV90KSAoKChzaXplX3QpKGxlbikgKyAxKSAqIDQgKiBNQl9DVVJfTUFYKQorCisjaWZkZWYgVFJBQ0UKK3N0YXRpYyBjb25zdCBjaGFyIGRfcXVvdGVbXSA9IFN0cmluZ09mKERfUVVPVEUpOworc3RhdGljIGNvbnN0IGNoYXIgbF9icmFjZVtdID0gU3RyaW5nT2YoTF9CUkFDRSk7CitzdGF0aWMgY29uc3QgY2hhciByX2JyYWNlW10gPSBTdHJpbmdPZihSX0JSQUNFKTsKKyNlbmRpZgorCitzdGF0aWMgY2hhciAqCitfbmNfdmlzY2hhcihjaGFyICp0cCwgdW5zaWduZWQgYykKK3sKKyAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXFwnKSB7CisJKnRwKysgPSAnXFwnOworCSp0cCsrID0gKGNoYXIpIGM7CisgICAgfSBlbHNlIGlmIChpczdiaXRzKGMpICYmIChpc2dyYXBoKGMpIHx8IGMgPT0gJyAnKSkgeworCSp0cCsrID0gKGNoYXIpIGM7CisgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKKwkqdHArKyA9ICdcXCc7CisJKnRwKysgPSAnbic7CisgICAgfSBlbHNlIGlmIChjID09ICdccicpIHsKKwkqdHArKyA9ICdcXCc7CisJKnRwKysgPSAncic7CisgICAgfSBlbHNlIGlmIChjID09ICdcYicpIHsKKwkqdHArKyA9ICdcXCc7CisJKnRwKysgPSAnYic7CisgICAgfSBlbHNlIGlmIChjID09ICdcMDMzJykgeworCSp0cCsrID0gJ1xcJzsKKwkqdHArKyA9ICdlJzsKKyAgICB9IGVsc2UgaWYgKFVDaGFyKGMpID09IDB4N2YpIHsKKwkqdHArKyA9ICdcXCc7CisJKnRwKysgPSAnXic7CisJKnRwKysgPSAnPyc7CisgICAgfSBlbHNlIGlmIChpczdiaXRzKGMpICYmIGlzY250cmwoVUNoYXIoYykpKSB7CisJKnRwKysgPSAnXFwnOworCSp0cCsrID0gJ14nOworCSp0cCsrID0gKGNoYXIpICgnQCcgKyBjKTsKKyAgICB9IGVsc2UgeworCXNwcmludGYodHAsICJcXCUwM2xvIiwgKHVuc2lnbmVkIGxvbmcpIENoQ2hhck9mKGMpKTsKKwl0cCArPSBzdHJsZW4odHApOworICAgIH0KKyAgICAqdHAgPSAwOworICAgIHJldHVybiB0cDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorX25jX3Zpc2J1ZjJuKGludCBidWZudW0sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICBjb25zdCBjaGFyICp2YnVmOworICAgIGNoYXIgKnRwOworICAgIGludCBjOworCisgICAgaWYgKGJ1ZiA9PSAwKQorCXJldHVybiAoIihudWxsKSIpOworICAgIGlmIChidWYgPT0gQ0FOQ0VMTEVEX1NUUklORykKKwlyZXR1cm4gKCIoY2FuY2VsbGVkKSIpOworCisgICAgaWYgKGxlbiA8IDApCisJbGVuID0gKGludCkgc3RybGVuKGJ1Zik7CisKKyNpZmRlZiBUUkFDRQorICAgIHZidWYgPSB0cCA9IF9uY190cmFjZV9idWYoYnVmbnVtLCBOb3JtYWxMZW4obGVuKSk7CisjZWxzZQorICAgIHsKKwlzdGF0aWMgY2hhciAqbXlidWZbNF07CisJbXlidWZbYnVmbnVtXSA9IHR5cGVSZWFsbG9jKGNoYXIsIE5vcm1hbExlbihsZW4pLCBteWJ1ZltidWZudW1dKTsKKwl2YnVmID0gdHAgPSBteWJ1ZltidWZudW1dOworICAgIH0KKyNlbmRpZgorICAgIGlmICh0cCAhPSAwKSB7CisJKnRwKysgPSBEX1FVT1RFOworCXdoaWxlICgoLS1sZW4gPj0gMCkgJiYgKGMgPSAqYnVmKyspICE9ICdcMCcpIHsKKwkgICAgdHAgPSBfbmNfdmlzY2hhcih0cCwgVUNoYXIoYykpOworCX0KKwkqdHArKyA9IERfUVVPVEU7CisJKnRwKysgPSAnXDAnOworICAgIH0gZWxzZSB7CisJdmJ1ZiA9ICgiKF9uY192aXNidWYybiBmYWlsZWQpIik7CisgICAgfQorICAgIHJldHVybiAodmJ1Zik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY192aXNidWYyKGludCBidWZudW0sIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKyAgICByZXR1cm4gX25jX3Zpc2J1ZjJuKGJ1Zm51bSwgYnVmLCAtMSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY192aXNidWYoY29uc3QgY2hhciAqYnVmKQoreworICAgIHJldHVybiBfbmNfdmlzYnVmMigwLCBidWYpOworfQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdmlzYnVmbihjb25zdCBjaGFyICpidWYsIGludCBsZW4pCit7CisgICAgcmV0dXJuIF9uY192aXNidWYybigwLCBidWYsIGxlbik7Cit9CisKKyNpZmRlZiBUUkFDRQorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisKKyNpZiBkZWZpbmVkKFVTRV9URVJNTElCKQorI2RlZmluZSBfbmNfd2Noc3RybGVuIF9teV93Y2hzdHJsZW4KK3N0YXRpYyBpbnQKK19uY193Y2hzdHJsZW4oY29uc3QgY2NoYXJfdCAqcykKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICB3aGlsZSAoQ2hhck9mKHNbcmVzdWx0XSkgIT0gTCdcMCcpIHsKKwlyZXN1bHQrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqCitfbmNfdmlzd2J1ZjJuKGludCBidWZudW0sIGNvbnN0IHdjaGFyX3QgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICBjb25zdCBjaGFyICp2YnVmOworICAgIGNoYXIgKnRwOworICAgIHdjaGFyX3QgYzsKKworICAgIGlmIChidWYgPT0gMCkKKwlyZXR1cm4gKCIobnVsbCkiKTsKKworICAgIGlmIChsZW4gPCAwKQorCWxlbiA9IChpbnQpIHdjc2xlbihidWYpOworCisjaWZkZWYgVFJBQ0UKKyAgICB2YnVmID0gdHAgPSBfbmNfdHJhY2VfYnVmKGJ1Zm51bSwgV2lkZUxlbihsZW4pKTsKKyNlbHNlCisgICAgeworCXN0YXRpYyBjaGFyICpteWJ1ZlsyXTsKKwlteWJ1ZltidWZudW1dID0gdHlwZVJlYWxsb2MoY2hhciwgV2lkZUxlbihsZW4pLCBteWJ1ZltidWZudW1dKTsKKwl2YnVmID0gdHAgPSBteWJ1ZltidWZudW1dOworICAgIH0KKyNlbmRpZgorICAgIGlmICh0cCAhPSAwKSB7CisJKnRwKysgPSBEX1FVT1RFOworCXdoaWxlICgoLS1sZW4gPj0gMCkgJiYgKGMgPSAqYnVmKyspICE9ICdcMCcpIHsKKwkgICAgY2hhciB0ZW1wW0NDSEFSV19NQVggKyA4MF07CisJICAgIGludCBqID0gd2N0b21iKHRlbXAsIGMpLCBrOworCSAgICBpZiAoaiA8PSAwKSB7CisJCXNwcmludGYodGVtcCwgIlxcdSUwOFgiLCAodW5zaWduZWQpIGMpOworCQlqID0gKGludCkgc3RybGVuKHRlbXApOworCSAgICB9CisJICAgIGZvciAoayA9IDA7IGsgPCBqOyArK2spIHsKKwkJdHAgPSBfbmNfdmlzY2hhcih0cCwgVUNoYXIodGVtcFtrXSkpOworCSAgICB9CisJfQorCSp0cCsrID0gRF9RVU9URTsKKwkqdHArKyA9ICdcMCc7CisgICAgfSBlbHNlIHsKKwl2YnVmID0gKCIoX25jX3Zpc3didWYybiBmYWlsZWQpIik7CisgICAgfQorICAgIHJldHVybiAodmJ1Zik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY192aXN3YnVmMihpbnQgYnVmbnVtLCBjb25zdCB3Y2hhcl90ICpidWYpCit7CisgICAgcmV0dXJuIF9uY192aXN3YnVmMm4oYnVmbnVtLCBidWYsIC0xKTsKK30KKworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3Zpc3didWYoY29uc3Qgd2NoYXJfdCAqYnVmKQoreworICAgIHJldHVybiBfbmNfdmlzd2J1ZjIoMCwgYnVmKTsKK30KKworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3Zpc3didWZuKGNvbnN0IHdjaGFyX3QgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gX25jX3Zpc3didWYybigwLCBidWYsIGxlbik7Cit9CisKKy8qIHRoaXMgc3BlY2lhbCBjYXNlIGlzIHVzZWQgZm9yIHdnZXRfd3N0cigpICovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdmlzd2lidWYoY29uc3Qgd2ludF90ICpidWYpCit7CisgICAgc3RhdGljIHdjaGFyX3QgKm15YnVmOworICAgIHN0YXRpYyB1bnNpZ25lZCBteWxlbjsKKyAgICB1bnNpZ25lZCBuOworCisgICAgZm9yIChuID0gMDsgYnVmW25dICE9IDA7ICsrbikgOworICAgIGlmIChteWxlbiA8ICsrbikgeworCW15bGVuID0gbiArIDgwOworCWlmIChteWJ1ZiAhPSAwKQorCSAgICBteWJ1ZiA9IHR5cGVSZWFsbG9jKHdjaGFyX3QsIG15bGVuLCBteWJ1Zik7CisJZWxzZQorCSAgICBteWJ1ZiA9IHR5cGVNYWxsb2Mod2NoYXJfdCwgbXlsZW4pOworICAgIH0KKyAgICBmb3IgKG4gPSAwOyBidWZbbl0gIT0gMDsgKytuKQorCW15YnVmW25dID0gKHdjaGFyX3QpIGJ1ZltuXTsKKworICAgIHJldHVybiBfbmNfdmlzd2J1ZjIoMCwgbXlidWYpOworfQorI2VuZGlmIC8qIFVTRV9XSURFQ19TVVBQT1JUICovCisKKy8qIHVzZSB0aGVzZSBmdW5jdGlvbnMgZm9yIGRpc3BsYXlpbmcgcGFydHMgb2YgYSBsaW5lIHdpdGhpbiBhIHdpbmRvdyAqLworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3Zpc2NidWYyKGludCBidWZudW0sIGNvbnN0IE5DVVJTRVNfQ0hfVCAqIGJ1ZiwgaW50IGxlbikKK3sKKyAgICBjaGFyICpyZXN1bHQgPSBfbmNfdHJhY2VfYnVmKGJ1Zm51bSwgQlVGU0laKTsKKyAgICBpbnQgZmlyc3Q7CisgICAgY29uc3QgY2hhciAqZm91bmQ7CisKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCWlmIChsZW4gPCAwKQorCSAgICBsZW4gPSBfbmNfd2Noc3RybGVuKGJ1Zik7CisjZW5kaWYgLyogVVNFX1dJREVDX1NVUFBPUlQgKi8KKworCS8qCisJICogRGlzcGxheSBvbmUgb3IgbW9yZSBzdHJpbmdzIGZvbGxvd2VkIGJ5IGF0dHJpYnV0ZXMuCisJICovCisJZmlyc3QgPSAwOworCXdoaWxlIChmaXJzdCA8IGxlbikgeworCSAgICBhdHRyX3QgYXR0ciA9IEF0dHJPZihidWZbZmlyc3RdKTsKKwkgICAgaW50IGxhc3QgPSBsZW4gLSAxOworCSAgICBpbnQgajsKKworCSAgICBmb3IgKGogPSBmaXJzdCArIDE7IGogPCBsZW47ICsraikgeworCQlpZiAoIVNhbWVBdHRyT2YoYnVmW2pdLCBidWZbZmlyc3RdKSkgeworCQkgICAgbGFzdCA9IGogLSAxOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCisJICAgIHJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCBsX2JyYWNlKTsKKwkgICAgcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIGRfcXVvdGUpOworCSAgICBmb3IgKGogPSBmaXJzdDsgaiA8PSBsYXN0OyArK2opIHsKKwkJZm91bmQgPSBfbmNfYWx0Y2hhcnNldF9uYW1lKGF0dHIsIChjaHR5cGUpIENoYXJPZihidWZbal0pKTsKKwkJaWYgKGZvdW5kICE9IDApIHsKKwkJICAgIHJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCBmb3VuZCk7CisJCSAgICBhdHRyICY9IH5BX0FMVENIQVJTRVQ7CisJCX0gZWxzZQorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJCWlmICghaXNXaWRlY0V4dChidWZbal0pKSB7CisJCSAgICBQVVRDX0RBVEE7CisKKwkJICAgIFBVVENfSU5JVDsKKwkJICAgIGZvciAoUFVUQ19pID0gMDsgUFVUQ19pIDwgQ0NIQVJXX01BWDsgKytQVVRDX2kpIHsKKwkJCWludCBrOworCisJCQlQVVRDX2NoID0gYnVmW2pdLmNoYXJzW1BVVENfaV07CisJCQlpZiAoUFVUQ19jaCA9PSBMJ1wwJykKKwkJCSAgICBicmVhazsKKwkJCVBVVENfbiA9IChpbnQpIHdjcnRvbWIoUFVUQ19idWYsIGJ1ZltqXS5jaGFyc1tQVVRDX2ldLCAmUFVUX3N0KTsKKwkJCWlmIChQVVRDX24gPD0gMCkKKwkJCSAgICBicmVhazsKKwkJCWZvciAoayA9IDA7IGsgPCBQVVRDX247IGsrKykgeworCQkJICAgIGNoYXIgdGVtcFs4MF07CisJCQkgICAgX25jX3Zpc2NoYXIodGVtcCwgVUNoYXIoUFVUQ19idWZba10pKTsKKwkJCSAgICByZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgdGVtcCk7CisJCQl9CisJCSAgICB9CisJCX0KKyNlbHNlCisJCXsKKwkJICAgIGNoYXIgdGVtcFs4MF07CisJCSAgICBfbmNfdmlzY2hhcih0ZW1wLCBVQ2hhcihidWZbal0pKTsKKwkJICAgIHJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCB0ZW1wKTsKKwkJfQorI2VuZGlmIC8qIFVTRV9XSURFQ19TVVBQT1JUICovCisJICAgIH0KKwkgICAgcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIGRfcXVvdGUpOworCSAgICBpZiAoYXR0ciAhPSBBX05PUk1BTCkgeworCQlyZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgIiB8ICIpOworCQlyZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgX3RyYWNlYXR0cjIoYnVmbnVtICsgMjAsIGF0dHIpKTsKKwkgICAgfQorCSAgICByZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgcl9icmFjZSk7CisJICAgIGZpcnN0ID0gbGFzdCArIDE7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdmlzY2J1Zihjb25zdCBOQ1VSU0VTX0NIX1QgKiBidWYsIGludCBsZW4pCit7CisgICAgcmV0dXJuIF9uY192aXNjYnVmMigwLCBidWYsIGxlbik7Cit9CisjZW5kaWYgLyogVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHR5L01LZXhwYW5kZWQuc2ggYi9uY3Vyc2VzL3R0eS9NS2V4cGFuZGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmOWFjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3R0eS9NS2V4cGFuZGVkLnNoCkBAIC0wLDAgKzEsOTkgQEAKKyMhIC9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk3CisjCisjICRJZDogTUtleHBhbmRlZC5zaCx2IDEuMTEgMjAwNS8wMS8wMiAwMTowNjo0MCB0b20gRXhwICQKKyMKKyMgU2NyaXB0IHRvIGdlbmVyYXRlICdleHBhbmRlZC5jJywgYSBkdW1teSBzb3VyY2UgdGhhdCBjb250YWlucyBmdW5jdGlvbnMKKyMgY29ycmVzcG9uZGluZyB0byBjb21wbGV4IG1hY3JvcyB1c2VkIGluIHRoaXMgbGlicmFyeS4gIEJ5IG1ha2luZyBmdW5jdGlvbnMsCisjIHdlIHNpbXBsaWZ5IGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuCisKK2lmIHRlc3QgJCMgIT0gMDsgdGhlbgorcHJlcHJvY2Vzc29yPSIkMSIKK2Vsc2UKK3ByZXByb2Nlc3Nvcj0iY2MgLUUiCitmaQorc2hpZnQKK2lmIHRlc3QgJCMgIT0gMCA7IHRoZW4KKwlwcmVwcm9jZXNzb3I9IiRwcmVwcm9jZXNzb3IgJCoiCitlbHNlCisJcHJlcHJvY2Vzc29yPSIkcHJlcHJvY2Vzc29yIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLi9pbmNsdWRlIgorZmkKKworVE1QPWdlbiQkLmMKK3RyYXAgInJtIC1mICRUTVAiIDAgMSAyIDUgMTUKKworY2F0IDw8RU9GCisvKiBnZW5lcmF0ZWQgYnkgTUtleHBhbmRlZC5zaCAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorI2lmIE5DVVJTRVNfRVhQQU5ERUQKK0VPRgorCitjYXQgPiRUTVAgPDxFT0YKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorI3VuZGVmIE5DVVJTRVNfRVhQQU5ERUQgLyogdGhpcyBwcm9iYWJseSBpcyBzZXQgaW4gbmN1cnNlc19jZmcuaCAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisvKiB0aGVzZSBhcmUgbmFtZXMgd2UnZCBsaWtlIHRvIHNlZSAqLworI3VuZGVmIEFMTF9CVVRfQ09MT1IKKyN1bmRlZiBQQUlSX05VTUJFUgorI3VuZGVmIFRSVUUKKyN1bmRlZiBGQUxTRQorLyogdGhpcyBpcyBhIG1hcmtlciAqLworSUdOT1JFCitOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdG9nZ2xlX2F0dHJfb24gKGF0dHJfdCAqUywgYXR0cl90IGF0KQoreworCXRvZ2dsZV9hdHRyX29uKCpTLGF0KTsKK30KK05DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190b2dnbGVfYXR0cl9vZmYgKGF0dHJfdCAqUywgYXR0cl90IGF0KSAKK3sKKwl0b2dnbGVfYXR0cl9vZmYoKlMsYXQpOworfQorTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfRGVsQ2hhckNvc3QgKGludCBjb3VudCkKK3sKKwlyZXR1cm4gRGVsQ2hhckNvc3QoY291bnQpOworfQorTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfSW5zQ2hhckNvc3QgKGludCBjb3VudCkKK3sKKwlyZXR1cm4gSW5zQ2hhckNvc3QoY291bnQpOworfQorTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX1VwZGF0ZUF0dHJzIChOQ1VSU0VTX0NIX1QgYykKK3sKKwlVcGRhdGVBdHRycyhjKTsKK30KK0VPRgorCiskcHJlcHJvY2Vzc29yICRUTVAgMj4vZGV2L251bGwgfCBzZWQgLWUgJzEsL15JR05PUkUkL2QnCisKK2NhdCA8PEVPRgorI2Vsc2UgLyogISBOQ1VSU0VTX0VYUEFOREVEICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZXhwYW5kZWQgKHZvaWQpIHsgfQorI2VuZGlmIC8qIE5DVVJTRVNfRVhQQU5ERUQgKi8KK0VPRgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90dHkvaGFyZHNjcm9sbC5jIGIvbmN1cnNlcy90dHkvaGFyZHNjcm9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDA5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3R0eS9oYXJkc2Nyb2xsLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBBbGV4YW5kZXIgViBMdWt5YW5vdiAgICAgICAgICAgICAgICAgICAgMTk5Ny0xOTk4ICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTkFNRQorICAgaGFyZHNjcm9sbC5jIC0tIGhhcmR3YXJlLXNjcm9sbGluZyBvcHRpbWl6YXRpb24gZm9yIG5jdXJzZXMKKworU1lOT1BTSVMKKyAgIHZvaWQgX25jX3Njcm9sbF9vcHRpbWl6ZSh2b2lkKQorCitERVNDUklQVElPTgorCQkJT1ZFUlZJRVcKKworVGhpcyBhbGdvcml0aG0gZm9yIGNvbXB1dGVzIG9wdGltdW0gaGFyZHdhcmUgc2Nyb2xsaW5nIHRvIHRyYW5zZm9ybSBhbgorb2xkIHNjcmVlbiAoY3Vyc2NyKSBpbnRvIGEgbmV3IHNjcmVlbiAobmV3c2NyKSB2aWEgdmVydGljYWwgbGluZSBtb3Zlcy4KKworQmVjYXVzZSB0aGUgc2NyZWVuIGhhcyBhIGBncmFpbicgKHRoZXJlIGFyZSBpbnNlcnQvZGVsZXRlL3Njcm9sbCBsaW5lCitvcGVyYXRpb25zIGJ1dCBubyBpbnNlcnQvZGVsZXRlL3Njcm9sbCBjb2x1bW4gb3BlcmF0aW9ucyksIGl0IGlzIGVmZmljaWVudAorYnJlYWsgdGhlIHVwZGF0ZSBhbGdvcml0aG0gaW50byB0d28gcGllY2VzOiBhIGZpcnN0IHN0YWdlIHRoYXQgZG9lcyBvbmx5IGxpbmUKK21vdmVzLCBvcHRpbWl6aW5nIHRoZSBlbmQgcHJvZHVjdCBvZiB1c2VyLWludm9rZWQgaW5zZXJ0aW9ucywgZGVsZXRpb25zLCBhbmQKK3Njcm9sbHM7IGFuZCBhIHNlY29uZCBwaGFzZSAoY29ycmVzcG9uZGluZyB0byB0aGUgcHJlc2VudCBkb3VwZGF0ZSBjb2RlIGluCituY3Vyc2VzKSB0aGF0IGRvZXMgb25seSBsaW5lIHRyYW5zZm9ybWF0aW9ucy4KKworVGhlIGNvbW1vbiBjYXNlIHdlIHdhbnQgaGFyZHdhcmUgc2Nyb2xsaW5nIGZvciBpcyB0byBoYW5kbGUgbGluZSBpbnNlcnRpb25zCithbmQgZGVsZXRpb25zIGluIHNjcmVlbi1vcmllbnRlZCB0ZXh0LWVkaXRvcnMuICBUaGlzIHR3by1zdGFnZSBhcHByb2FjaCB3aWxsCithY2NvbXBsaXNoIHRoYXQgYXQgYSBsb3cgY29tcHV0YXRpb24gYW5kIGNvZGUtc2l6ZSBjb3N0LgorCisJCQlMSU5FLU1PVkUgQ09NUFVUQVRJT04KKworTm93LCB0byBhIGRpc2N1c3Npb24gb2YgdGhlIGxpbmUtbW92ZSBjb21wdXRhdGlvbi4KKworRm9yIGV4cG9zaXRvcnkgcHVycG9zZXMsIGNvbnNpZGVyIHRoZSBzY3JlZW4gbGluZXMgdG8gYmUgcmVwcmVzZW50ZWQgYnkKK2ludGVnZXJzIDAuLjIzICh3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHZhbHVlIG9mIDIzIG1heSB2YXJ5KS4KK0xldCBhIG5ldyBsaW5lIGludHJvZHVjZWQgYnkgaW5zZXJ0aW9uLCBzY3JvbGxpbmcsIG9yIGF0IHRoZSBib3R0b20gb2YKK3RoZSBzY3JlZW4gZm9sbG93aW5nIGEgbGluZSBkZWxldGUgYmUgZ2l2ZW4gdGhlIGluZGV4IC0xLgorCitBc3N1bWUgdGhhdCB0aGUgcmVhbCBzY3JlZW4gc3RhcnRzIHdpdGggbGluZXMgMC4uMjMuICBOb3csIHdlIGhhdmUKK3RoZSBmb2xsb3dpbmcgcG9zc2libGUgbGluZS1vcmllbnRlZCBvcGVyYXRpb25zIG9uIHRoZSBzY3JlZW46CisKK0luc2VydGlvbjogaW5zZXJ0cyBhIGxpbmUgYXQgYSBnaXZlbiBzY3JlZW4gcm93LCBmb3JjaW5nIGFsbCBsaW5lcyBiZWxvdwordG8gc2Nyb2xsIGZvcndhcmQuICBUaGUgbGFzdCBzY3JlZW4gbGluZSBpcyBsb3N0LiAgRm9yIGV4YW1wbGUsIGFuIGluc2VydGlvbgorYXQgbGluZSA1IHdvdWxkIHByb2R1Y2U6IDAuLjQgLTEgNS4uMjMuCisKK0RlbGV0aW9uOiBkZWxldGVzIGEgbGluZSBhdCBhIGdpdmVuIHNjcmVlbiByb3csIGZvcmNpbmcgYWxsIGxpbmVzIGJlbG93Cit0byBzY3JvbGwgZm9yd2FyZC4gIFRoZSBsYXN0IHNjcmVlbiBsaW5lIGlzIG1hZGUgbmV3LiAgRm9yIGV4YW1wbGUsIGEgZGVsZXRpb24KK2F0IGxpbmUgNyB3b3VsZCBwcm9kdWNlOiAwLi42IDguLjIzIC0xLgorCitTY3JvbGwgdXA6IG1vdmUgYSByYW5nZSBvZiBsaW5lcyB1cCAxLiAgVGhlIGJvdHRvbSBsaW5lIG9mIHRoZSByYW5nZQorYmVjb21lcyBuZXcuICBGb3IgZXhhbXBsZSwgc2Nyb2xsaW5nIHVwIHRoZSByZWdpb24gZnJvbSA5IHRvIDE0IHdpbGwKK3Byb2R1Y2UgMC4uOCAxMC4uMTQgLTEgMTUuLjIzLgorCitTY3JvbGwgZG93bjogbW92ZSBhIHJhbmdlIG9mIGxpbmVzIGRvd24gMS4gIFRoZSB0b3AgbGluZSBvZiB0aGUgcmFuZ2UKK2JlY29tZXMgbmV3LiAgRm9yIGV4YW1wbGUsIHNjcm9sbGluZyBkb3duIHRoZSByZWdpb24gZnJvbSAxMiB0byAxNiB3aWxsIHByb2R1Y2UKKzAuLjExIC0xIDEyLi4xNSAxNy4uMjMuCisKK05vdywgYW4gb2J2aW91cyBwcm9wZXJ0eSBvZiBhbGwgdGhlc2Ugb3BlcmF0aW9ucyBpcyB0aGF0IHRoZXkgcHJlc2VydmUgdGhlCitvcmRlciBvZiBvbGQgbGluZXMsIHRob3VnaCBub3QgdGhlaXIgcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlLgorCitUaGUga2V5IHRyaWNrIG9mIHRoaXMgYWxnb3JpdGhtIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGxpbmUgaW5kaWNlcyBkZXNjcmliZWQKK2Fib3ZlIGFyZSBhY3R1YWxseSBtYWludGFpbmVkIGFzIF9saW5lW10ub2xkaW5kZXggZmllbGRzIGluIHRoZSB3aW5kb3cKK3N0cnVjdHVyZSwgYW5kIHN0aWNrIHRvIGVhY2ggbGluZSB0aHJvdWdoIHNjcm9sbCBhbmQgaW5zZXJ0L2RlbGV0ZSBvcGVyYXRpb25zLgorCitUaHVzLCBpdCBpcyBwb3NzaWJsZSBhdCB1cGRhdGUgdGltZSB0byBsb29rIGF0IHRoZSBvbGRudW0gZmllbGRzIGFuZCBjb21wdXRlCithbiBvcHRpbWFsIHNldCBvZiBpbC9kbC9zY3JvbGwgb3BlcmF0aW9ucyB0aGF0IHdpbGwgdGFrZSB0aGUgcmVhbCBzY3JlZW4KK2xpbmVzIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbiBsaW5lcy4gIE9uY2UgdGhlc2UgdmVydGljYWwgbW92ZXMgaGF2ZSBiZWVuIGRvbmUsCit3ZSBjYW4gaGFuZCBvZmYgdG8gdGhlIHNlY29uZCBzdGFnZSBvZiB0aGUgdXBkYXRlIGFsZ29yaXRobSwgd2hpY2ggZG9lcyBsaW5lCit0cmFuc2Zvcm1hdGlvbnMuCisKK05vdGUgdGhhdCB0aGUgbW92ZSBjb21wdXRhdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGhhdmUgdGhlIGZ1bGwgZ2VuZXJhbGl0eQorb2YgYSBkaWZmIGFsZ29yaXRobSAod2hpY2ggaXQgc3VwZXJmaWNpYWxseSByZXNlbWJsZXMpIGJlY2F1c2UgbGluZXMgY2Fubm90CitiZSBtb3ZlZCBvdXQgb2Ygb3JkZXIuCisKKwkJCVRIRSBBTEdPUklUSE0KKworVGhlIHNjcm9sbGluZyBpcyBkb25lIGluIHR3byBwYXNzZXMuIFRoZSBmaXJzdCBwYXNzIGlzIGZyb20gdG9wIHRvIGJvdHRvbQorc2Nyb2xpbmcgaHVua3MgVVAuIFRoZSBzZWNvbmQgb25lIGlzIGZyb20gYm90dG9tIHRvIHRvcCBzY3JvbGxpbmcgaHVua3MgRE9XTi4KK09idmlvdXNseSBlbm91Z2gsIG5vIGxpbmVzIHRvIGJlIHNjcm9sbGVkIHdpbGwgYmUgZGVzdHJveWVkLiAobGF2KQorCitIT1cgVE8gVEVTVCBUSElTOgorCitVc2UgdGhlIGZvbGxvd2luZyBwcm9kdWN0aW9uOgorCitoYXJkc2Nyb2xsOiBoYXJkc2Nyb2xsLmMKKwkkKENDKSAtZyAtRFNDUk9MTERFQlVHIGhhcmRzY3JvbGwuYyAtbyBoYXJkc2Nyb2xsCisKK1RoZW4ganVzdCB0eXBlIHNjcmFtYmxlIHZlY3RvcnMgYW5kIHdhdGNoLiAgVGhlIGZvbGxvd2luZyB0ZXN0IGxvYWRzIGFyZQorYSByZXByZXNlbnRhdGl2ZSBzYW1wbGUgb2YgY2FzZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDVVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTm8gbGluZXMgbW92ZWQKKyAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzCisjCisjIEEgc2Nyb2xsIHVwCisgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAtMQorIworIyBBIHNjcm9sbCBkb3duCistMSAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMgorIworIyBBbiBpbnNlcnRpb24gKGFmdGVyIGxpbmUgMTIpCisgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAtMSAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMgorIworIyBBIHNpbXBsZSBkZWxldGlvbiAobGluZSAxMCkKKyAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5ICAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAtMQorIworIyBBIG1vcmUgY29tcGxleCBjYXNlCistMSAtMSAtMSAtMSAtMSAgMyAgNCAgNSAgNiAgNyAgLTEgLTEgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgLTEgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDVVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQVVUSE9SCisgICAgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+LCBOb3ZlbWJlciAxOTk0CisgICAgTmV3IGFsZ29yaXRobSBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkB5YXJzLmZyZWUubmV0PiwgQXVnIDE5OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogaGFyZHNjcm9sbC5jLHYgMS40MiAyMDA4LzA4LzAzIDIzOjQ5OjMwIHRvbSBFeHAgJCIpCisKKyNpZiBkZWZpbmVkKFNDUk9MTERFQlVHKSB8fCBkZWZpbmVkKEhBU0hERUJVRykKKworIyB1bmRlZiBzY3JlZW5fbGluZXMKKyMgZGVmaW5lIHNjcmVlbl9saW5lcyBNQVhMSU5FUworTkNVUlNFU19FWFBPUlRfVkFSKGludCkKK29sZG51bXNbTUFYTElORVNdOworIyBkZWZpbmUgT0xETlVNKG4pCW9sZG51bXNbbl0KKyMgZGVmaW5lIF90cmFjZWYJcHJpbnRmCisjIHVuZGVmIFRSCisjIGRlZmluZSBUUihuLCBhKQlpZiAoX25jX3RyYWNpbmcgJiAobikpIHsgX3RyYWNlZiBhIDsgcHV0Y2hhcignXG4nKTsgfQorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKHVuc2lnbmVkKSBfbmNfdHJhY2luZzsKKworI2Vsc2UgLyogbm8gZGVidWcgKi8KKworLyogT0xETlVNKG4pIGluZGljYXRlcyB3aGljaCBsaW5lIHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgcG9zaXRpb24gbi4KKyAgIGlmIE9MRE5VTShuKSA9PSBfTkVXSU5ERVgsIHRoZW4gdGhlIGxpbmUgbiBpbiBuZXcsIG5vdCBzaGlmdGVkIGZyb20KKyAgIHNvbWV3aGVyZS4gKi8KK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQgKikKK19uY19vbGRudW1zID0gMDsJCS8qIG9ic29sZXRlOiBrZWVwIGZvciBBQkkgY29tcGF0ICovCisKKyMgaWYgVVNFX0hBU0hNQVAKKyMgIGRlZmluZSBvbGRudW1zICAgICAgIFNQLT5fb2xkbnVtX2xpc3QKKyMgIGRlZmluZSBPTEROVU0obikJb2xkbnVtc1tuXQorIyBlbHNlCQkJCS8qICFVU0VfSEFTSE1BUCAqLworIyAgZGVmaW5lIE9MRE5VTShuKQluZXdzY3ItPl9saW5lW25dLm9sZGluZGV4CisjIGVuZGlmCQkJCS8qICFVU0VfSEFTSE1BUCAqLworCisjZGVmaW5lIE9MRE5VTV9TSVpFICAgICBTUC0+X29sZG51bV9zaXplCisKKyNlbmRpZiAvKiBkZWZpbmVkKFNDUk9MTERFQlVHKSB8fCBkZWZpbmVkKEhBU0hERUJVRykgKi8KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zY3JvbGxfb3B0aW1pemUodm9pZCkKKy8qIHNjcm9sbCBvcHRpbWl6YXRpb24gdG8gdHJhbnNmb3JtIGN1cnNjciB0byBuZXdzY3IgKi8KK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgc3RhcnQsIGVuZCwgc2hpZnQ7CisKKyAgICBUUihUUkFDRV9JQ0FMTFMsIChUX0NBTExFRCgiX25jX3Njcm9sbF9vcHRpbWl6ZSIpKSk7CisKKyNpZiAhZGVmaW5lZChTQ1JPTExERUJVRykgJiYgIWRlZmluZWQoSEFTSERFQlVHKQorI2lmIFVTRV9IQVNITUFQCisgICAgLyogZ2V0IGVub3VnaCBzdG9yYWdlICovCisgICAgaWYgKE9MRE5VTV9TSVpFIDwgc2NyZWVuX2xpbmVzKSB7CisJaW50ICpuZXdfb2xkbnVtcyA9IHR5cGVSZWFsbG9jKGludCwgc2NyZWVuX2xpbmVzLCBvbGRudW1zKTsKKwlpZiAoIW5ld19vbGRudW1zKQorCSAgICByZXR1cm47CisJb2xkbnVtcyA9IG5ld19vbGRudW1zOworCU9MRE5VTV9TSVpFID0gc2NyZWVuX2xpbmVzOworICAgIH0KKyAgICAvKiBjYWxjdWxhdGUgdGhlIGluZGljZXMgKi8KKyAgICBfbmNfaGFzaF9tYXAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICFkZWZpbmVkKFNDUk9MTERFQlVHKSAmJiAhZGVmaW5lZChIQVNIREVCVUcpICovCisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUpKSB7CisJX25jX2xpbmVkdW1wKCk7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIC8qIHBhc3MgMSAtIGZyb20gdG9wIHRvIGJvdHRvbSBzY3JvbGxpbmcgdXAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgc2NyZWVuX2xpbmVzOykgeworCXdoaWxlIChpIDwgc2NyZWVuX2xpbmVzICYmIChPTEROVU0oaSkgPT0gX05FV0lOREVYIHx8IE9MRE5VTShpKSA8PSBpKSkKKwkgICAgaSsrOworCWlmIChpID49IHNjcmVlbl9saW5lcykKKwkgICAgYnJlYWs7CisKKwlzaGlmdCA9IE9MRE5VTShpKSAtIGk7CS8qIHNoaWZ0ID4gMCAqLworCXN0YXJ0ID0gaTsKKworCWkrKzsKKwl3aGlsZSAoaSA8IHNjcmVlbl9saW5lcyAmJiBPTEROVU0oaSkgIT0gX05FV0lOREVYICYmIE9MRE5VTShpKSAtIGkKKwkgICAgICAgPT0gc2hpZnQpCisJICAgIGkrKzsKKwllbmQgPSBpIC0gMSArIHNoaWZ0OworCisJVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwgKCJzY3JvbGwgWyVkLCAlZF0gYnkgJWQiLCBzdGFydCwgZW5kLCBzaGlmdCkpOworI2lmICFkZWZpbmVkKFNDUk9MTERFQlVHKSAmJiAhZGVmaW5lZChIQVNIREVCVUcpCisJaWYgKF9uY19zY3JvbGxuKHNoaWZ0LCBzdGFydCwgZW5kLCBzY3JlZW5fbGluZXMgLSAxKSA9PSBFUlIpIHsKKwkgICAgVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwgKCJ1bmFibGUgdG8gc2Nyb2xsIikpOworCSAgICBjb250aW51ZTsKKwl9CisjZW5kaWYgLyogIWRlZmluZWQoU0NST0xMREVCVUcpICYmICFkZWZpbmVkKEhBU0hERUJVRykgKi8KKyAgICB9CisKKyAgICAvKiBwYXNzIDIgLSBmcm9tIGJvdHRvbSB0byB0b3Agc2Nyb2xsaW5nIGRvd24gKi8KKyAgICBmb3IgKGkgPSBzY3JlZW5fbGluZXMgLSAxOyBpID49IDA7KSB7CisJd2hpbGUgKGkgPj0gMCAmJiAoT0xETlVNKGkpID09IF9ORVdJTkRFWCB8fCBPTEROVU0oaSkgPj0gaSkpCisJICAgIGktLTsKKwlpZiAoaSA8IDApCisJICAgIGJyZWFrOworCisJc2hpZnQgPSBPTEROVU0oaSkgLSBpOwkvKiBzaGlmdCA8IDAgKi8KKwllbmQgPSBpOworCisJaS0tOworCXdoaWxlIChpID49IDAgJiYgT0xETlVNKGkpICE9IF9ORVdJTkRFWCAmJiBPTEROVU0oaSkgLSBpID09IHNoaWZ0KQorCSAgICBpLS07CisJc3RhcnQgPSBpICsgMSAtICgtc2hpZnQpOworCisJVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwgKCJzY3JvbGwgWyVkLCAlZF0gYnkgJWQiLCBzdGFydCwgZW5kLCBzaGlmdCkpOworI2lmICFkZWZpbmVkKFNDUk9MTERFQlVHKSAmJiAhZGVmaW5lZChIQVNIREVCVUcpCisJaWYgKF9uY19zY3JvbGxuKHNoaWZ0LCBzdGFydCwgZW5kLCBzY3JlZW5fbGluZXMgLSAxKSA9PSBFUlIpIHsKKwkgICAgVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwgKCJ1bmFibGUgdG8gc2Nyb2xsIikpOworCSAgICBjb250aW51ZTsKKwl9CisjZW5kaWYgLyogIWRlZmluZWQoU0NST0xMREVCVUcpICYmICFkZWZpbmVkKEhBU0hERUJVRykgKi8KKyAgICB9CisgICAgVFIoVFJBQ0VfSUNBTExTLCAoVF9SRVRVUk4oIiIpKSk7Cit9CisKKyNpZiBkZWZpbmVkKFRSQUNFKSB8fCBkZWZpbmVkKFNDUk9MTERFQlVHKSB8fCBkZWZpbmVkKEhBU0hERUJVRykKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbGluZWR1bXAodm9pZCkKKy8qIGR1bXAgdGhlIHN0YXRlIG9mIHRoZSByZWFsIGFuZCB2aXJ0dWFsIG9sZG51bSBmaWVsZHMgKi8KK3sKKyAgICBpbnQgbjsKKyAgICBjaGFyICpidWYgPSAwOworICAgIHNpemVfdCB3YW50ID0gKHNjcmVlbl9saW5lcyArIDEpICogNDsKKworICAgIGlmICgoYnVmID0gdHlwZU1hbGxvYyhjaGFyLCB3YW50KSkgIT0gMCkgeworCisJKHZvaWQpIHN0cmNweShidWYsICJ2aXJ0Iik7CisJZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCSAgICAodm9pZCkgc3ByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgIiAlMDJkIiwgT0xETlVNKG4pKTsKKwlUUihUUkFDRV9VUERBVEUgfCBUUkFDRV9NT1ZFLCAoYnVmKSk7CisJZnJlZShidWYpOworICAgIH0KK30KKyNlbmRpZiAvKiBkZWZpbmVkKFRSQUNFKSB8fCBkZWZpbmVkKFNDUk9MTERFQlVHKSAqLworCisjaWZkZWYgU0NST0xMREVCVUcKKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgY2hhciBsaW5lW0JVRlNJWl0sICpzdDsKKworI2lmZGVmIFRSQUNFCisgICAgX25jX3RyYWNpbmcgPSBUUkFDRV9NT1ZFOworI2VuZGlmCisgICAgZm9yICg7OykgeworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCSAgICBvbGRudW1zW25dID0gX05FV0lOREVYOworCisJLyogZ3JhYiB0aGUgdGVzdCB2ZWN0b3IgKi8KKwlpZiAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgPT0gKGNoYXIgKikgTlVMTCkKKwkgICAgZXhpdChFWElUX1NVQ0NFU1MpOworCisJLyogcGFyc2UgaXQgKi8KKwluID0gMDsKKwlpZiAobGluZVswXSA9PSAnIycpIHsKKwkgICAgKHZvaWQpIGZwdXRzKGxpbmUsIHN0ZGVycik7CisJICAgIGNvbnRpbnVlOworCX0KKwlzdCA9IHN0cnRvayhsaW5lLCAiICIpOworCWRvIHsKKwkgICAgb2xkbnVtc1tuKytdID0gYXRvaShzdCk7CisJfSB3aGlsZQorCSAgICAoKHN0ID0gc3RydG9rKChjaGFyICopIE5VTEwsICIgIikpICE9IDApOworCisJLyogZGlzcGxheSBpdCAqLworCSh2b2lkKSBmcHV0cygiSW5pdGlhbCBpbnB1dDpcbiIsIHN0ZGVycik7CisJX25jX2xpbmVkdW1wKCk7CisKKwlfbmNfc2Nyb2xsX29wdGltaXplKCk7CisgICAgfQorfQorCisjZW5kaWYgLyogU0NST0xMREVCVUcgKi8KKworLyogaGFyZHNjcm9sbC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90dHkvaGFzaG1hcC5jIGIvbmN1cnNlcy90dHkvaGFzaG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjBkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3R0eS9oYXNobWFwLmMKQEAgLTAsMCArMSw1NDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTkFNRQorICAgaGFzaG1hcC5jIC0tIGZpbGwgaW4gc2NyYW1ibGUgdmVjdG9yIGJhc2VkIG9uIHRleHQgaGFzaGVzCisKK1NZTk9QU0lTCisgICB2b2lkIF9uY19oYXNoX21hcCh2b2lkKQorCitERVNDUklQVElPTjoKKyAgIFRoaXMgY29kZSBhdHRlbXB0cyB0byByZWNvZ25pemUgcGFpcnMgb2Ygb2xkIGFuZCBuZXcgbGluZXMgaW4gdGhlIHBoeXNpY2FsCithbmQgdmlydHVhbCBzY3JlZW5zLiAgV2hlbiBhIGxpbmUgcGFpciBpcyByZWNvZ25pemVkLCB0aGUgb2xkIGxpbmUgaW5kZXggaXMKK3BsYWNlZCBpbiB0aGUgb2xkaW5kZXggbWVtYmVyIG9mIHRoZSB2aXJ0dWFsIHNjcmVlbiBsaW5lLCB0byBiZSB1c2VkIGJ5IHRoZQordmVydGljYWwtbW90aW9uIG9wdGltaXplciBwb3J0aW9uIG9mIHRoZSB1cGRhdGUgbG9naWMgKHNlZSBoYXJkc2Nyb2xsLmMpLgorCisgICBMaW5lIHBhaXJzIGFyZSByZWNvZ25pemVkIGJ5IGFwcGx5aW5nIGEgbW9kaWZpZWQgSGVja2VsJ3MgYWxnb3JpdGhtLAorc3BlZCB1cCBieSBoYXNoaW5nLiAgSWYgYSBsaW5lIGhhc2ggaXMgdW5pcXVlIGluIGJvdGggc2NyZWVucywgdGhvc2UKK2xpbmVzIG11c3QgYmUgYSBwYWlyLiBUaGVuIGlmIHRoZSBsaW5lcyBqdXN0IGJlZm9yZSBvciBhZnRlciB0aGUgcGFpcgorYXJlIHRoZSBzYW1lIG9yIHNpbWlsYXIsIHRoZXkgYXJlIGEgcGFpciB0b28uCisKKyAgIFdlIGRvbid0IHdvcnJ5IGFib3V0IGZhbHNlIHBhaXJzIHByb2R1Y2VkIGJ5IGhhc2ggY29sbGlzaW9ucywgb24gdGhlCithc3N1bXB0aW9uIHRoYXQgc3VjaCBjYXNlcyBhcmUgcmFyZSBhbmQgd2lsbCBvbmx5IG1ha2UgdGhlIGxhdHRlciBzdGFnZXMKK29mIHVwZGF0ZSBsZXNzIGVmZmljaWVudCwgbm90IGludHJvZHVjZSBlcnJvcnMuCisKK0hPVyBUTyBURVNUIFRISVM6CisKK1VzZSB0aGUgZm9sbG93aW5nIHByb2R1Y3Rpb246CisKK2hhc2htYXA6IGhhc2htYXAuYworCSQoQ0MpIC1nIC1ESEFTSERFQlVHIGhhc2htYXAuYyBoYXJkc2Nyb2xsLmMgLi4vb2JqZWN0cy9saWJfdHJhY2UubyAtbyBoYXNobWFwCisKK0FVVEhPUgorICAgIEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiwgTWF5IDE5OTYKKyAgICBCdWcgZml4ZXMgYW5kIGltcHJvdmVtZW50cyBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkB5YXJzLmZyZWUubmV0PiwgMTk5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogZm9yIGJhY2tfY29sb3JfZXJhc2UgKi8KKworTU9EVUxFX0lEKCIkSWQ6IGhhc2htYXAuYyx2IDEuNTYgMjAwNy8xMC8xMyAxODo0NzoyNSBNaXJvc2xhdi5MaWNodmFyIEV4cCAkIikKKworI2lmZGVmIEhBU0hERUJVRworCisjIGRlZmluZSBfdHJhY2VmCXByaW50ZgorIyB1bmRlZiBUUgorIyBkZWZpbmUgVFIobiwgYSkJaWYgKF9uY190cmFjaW5nICYgKG4pKSB7IF90cmFjZWYgYSA7IHB1dGNoYXIoJ1xuJyk7IH0KKyMgdW5kZWYgc2NyZWVuX2xpbmVzCisjIGRlZmluZSBzY3JlZW5fbGluZXMgTUFYTElORVMKKyMgZGVmaW5lIFRFWFRXSURUSAkxCitpbnQgb2xkbnVtc1tNQVhMSU5FU10sIHJlYWxsaW5lc1tNQVhMSU5FU107CitzdGF0aWMgTkNVUlNFU19DSF9UIG9sZHRleHRbTUFYTElORVNdW1RFWFRXSURUSF07CitzdGF0aWMgTkNVUlNFU19DSF9UIG5ld3RleHRbTUFYTElORVNdW1RFWFRXSURUSF07CisjIGRlZmluZSBPTEROVU0obikJb2xkbnVtc1tuXQorIyBkZWZpbmUgT0xEVEVYVChuKQlvbGR0ZXh0W25dCisjIGRlZmluZSBORVdURVhUKG0pCW5ld3RleHRbbV0KKyMgZGVmaW5lIFBFTkRJTkcobikgICAgIDEKKworI2Vsc2UgLyogIUhBU0hERUJVRyAqLworCisjIGRlZmluZSBPTEROVU0obikJU1AtPl9vbGRudW1fbGlzdFtuXQorIyBkZWZpbmUgT0xEVEVYVChuKQljdXJzY3ItPl9saW5lW25dLnRleHQKKyMgZGVmaW5lIE5FV1RFWFQobSkJbmV3c2NyLT5fbGluZVttXS50ZXh0CisjIGRlZmluZSBURVhUV0lEVEgJKGN1cnNjci0+X21heHgrMSkKKyMgZGVmaW5lIFBFTkRJTkcobikgICAgIChuZXdzY3ItPl9saW5lW25dLmZpcnN0Y2hhciAhPSBfTk9DSEFOR0UpCisKKyNlbmRpZiAvKiAhSEFTSERFQlVHICovCisKKyNkZWZpbmUgb2xkaGFzaAkJKFNQLT5vbGRoYXNoKQorI2RlZmluZSBuZXdoYXNoCQkoU1AtPm5ld2hhc2gpCisjZGVmaW5lIGhhc2h0YWIJCShTUC0+aGFzaHRhYikKKyNkZWZpbmUgbGluZXNfYWxsb2MJKFNQLT5oYXNodGFiX2xlbikKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIEhBU0hfVkFMKGNoKSAoY2guY2hhcnNbMF0pCisjZWxzZQorI2RlZmluZSBIQVNIX1ZBTChjaCkgKGNoKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmtjaGFyID0gTmV3Q2hhcihCTEFOS19URVhUKTsKKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHVuc2lnbmVkIGxvbmcKK2hhc2goTkNVUlNFU19DSF9UICogdGV4dCkKK3sKKyAgICBpbnQgaTsKKyAgICBOQ1VSU0VTX0NIX1QgY2g7CisgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworICAgIGZvciAoaSA9IFRFWFRXSURUSDsgaSA+IDA7IGktLSkgeworCWNoID0gKnRleHQrKzsKKwlyZXN1bHQgKz0gKHJlc3VsdCA8PCA1KSArIEhBU0hfVkFMKGNoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogYXBwcm94aW1hdGUgdXBkYXRlIGNvc3QgKi8KK3N0YXRpYyBpbnQKK3VwZGF0ZV9jb3N0KE5DVVJTRVNfQ0hfVCAqIGZyb20sIE5DVVJTRVNfQ0hfVCAqIHRvKQoreworICAgIGludCBjb3N0ID0gMDsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IFRFWFRXSURUSDsgaSA+IDA7IGktLSwgZnJvbSsrLCB0bysrKQorCWlmICghKENoYXJFcSgqZnJvbSwgKnRvKSkpCisJICAgIGNvc3QrKzsKKworICAgIHJldHVybiBjb3N0OworfQorCitzdGF0aWMgaW50Cit1cGRhdGVfY29zdF9mcm9tX2JsYW5rKE5DVVJTRVNfQ0hfVCAqIHRvKQoreworICAgIGludCBjb3N0ID0gMDsKKyAgICBpbnQgaTsKKyAgICBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBibGFua2NoYXI7CisKKyAgICBpZiAoYmFja19jb2xvcl9lcmFzZSkKKwlTZXRQYWlyKGJsYW5rLCBHZXRQYWlyKHN0ZHNjci0+X25jX2JrZ2QpKTsKKworICAgIGZvciAoaSA9IFRFWFRXSURUSDsgaSA+IDA7IGktLSwgdG8rKykKKwlpZiAoIShDaGFyRXEoYmxhbmssICp0bykpKQorCSAgICBjb3N0Kys7CisKKyAgICByZXR1cm4gY29zdDsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSB3aGVuIG1vdmluZyBsaW5lICdmcm9tJyB0byBsaW5lICd0bycgc2VlbXMgdG8gYmUgY29zdAorICogZWZmZWN0aXZlLiAnYmxhbmsnIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsaW5lICd0bycgd291bGQgYmVjb21lIGJsYW5rLgorICovCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgYm9vbAorY29zdF9lZmZlY3RpdmUoY29uc3QgaW50IGZyb20sIGNvbnN0IGludCB0bywgY29uc3QgYm9vbCBibGFuaykKK3sKKyAgICBpbnQgbmV3X2Zyb207CisKKyAgICBpZiAoZnJvbSA9PSB0bykKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBuZXdfZnJvbSA9IE9MRE5VTShmcm9tKTsKKyAgICBpZiAobmV3X2Zyb20gPT0gX05FV0lOREVYKQorCW5ld19mcm9tID0gZnJvbTsKKworICAgIC8qCisgICAgICogT24gdGhlIGxlZnQgc2lkZSBvZiA+PSBpcyB0aGUgY29zdCBiZWZvcmUgbW92aW5nOworICAgICAqIG9uIHRoZSByaWdodCBzaWRlIC0tIGNvc3QgYWZ0ZXIgbW92aW5nLgorICAgICAqLworICAgIHJldHVybiAoKChibGFuayA/IHVwZGF0ZV9jb3N0X2Zyb21fYmxhbmsoTkVXVEVYVCh0bykpCisJICAgICAgOiB1cGRhdGVfY29zdChPTERURVhUKHRvKSwgTkVXVEVYVCh0bykpKQorCSAgICAgKyB1cGRhdGVfY29zdChPTERURVhUKG5ld19mcm9tKSwgTkVXVEVYVChmcm9tKSkpCisJICAgID49ICgobmV3X2Zyb20gPT0gZnJvbSA/IHVwZGF0ZV9jb3N0X2Zyb21fYmxhbmsoTkVXVEVYVChmcm9tKSkKKwkJIDogdXBkYXRlX2Nvc3QoT0xEVEVYVChuZXdfZnJvbSksIE5FV1RFWFQoZnJvbSkpKQorCQkrIHVwZGF0ZV9jb3N0KE9MRFRFWFQoZnJvbSksIE5FV1RFWFQodG8pKSkpID8gVFJVRSA6IEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorZ3Jvd19odW5rcyh2b2lkKQoreworICAgIGludCBzdGFydCwgZW5kLCBzaGlmdDsKKyAgICBpbnQgYmFja19saW1pdCwgZm9yd2FyZF9saW1pdDsJLyogbGltaXRzIGZvciBjZWxscyB0byBmaWxsICovCisgICAgaW50IGJhY2tfcmVmX2xpbWl0LCBmb3J3YXJkX3JlZl9saW1pdDsJLyogbGltaXRzIGZvciByZWZyZW5jZXMgKi8KKyAgICBpbnQgaTsKKyAgICBpbnQgbmV4dF9odW5rOworCisgICAgLyoKKyAgICAgKiBUaGlzIGlzIHRyaWNreSBwYXJ0LiAgV2UgaGF2ZSB1bmlxdWUgcGFpcnMgdG8gdXNlIGFzIGFuY2hvcnMuCisgICAgICogVXNlIHRoZXNlIHRvIGRlZHVjZSB0aGUgcHJlc2VuY2Ugb2Ygc3BhbnMgb2YgaWRlbnRpY2FsIGxpbmVzLgorICAgICAqLworICAgIGJhY2tfbGltaXQgPSAwOworICAgIGJhY2tfcmVmX2xpbWl0ID0gMDsKKworICAgIGkgPSAwOworICAgIHdoaWxlIChpIDwgc2NyZWVuX2xpbmVzICYmIE9MRE5VTShpKSA9PSBfTkVXSU5ERVgpCisJaSsrOworICAgIGZvciAoOyBpIDwgc2NyZWVuX2xpbmVzOyBpID0gbmV4dF9odW5rKSB7CisJc3RhcnQgPSBpOworCXNoaWZ0ID0gT0xETlVNKGkpIC0gaTsKKworCS8qIGdldCBmb3J3YXJkIGxpbWl0ICovCisJaSA9IHN0YXJ0ICsgMTsKKwl3aGlsZSAoaSA8IHNjcmVlbl9saW5lcyAmJiBPTEROVU0oaSkgIT0gX05FV0lOREVYICYmIE9MRE5VTShpKSAtIGkKKwkgICAgICAgPT0gc2hpZnQpCisJICAgIGkrKzsKKwllbmQgPSBpOworCXdoaWxlIChpIDwgc2NyZWVuX2xpbmVzICYmIE9MRE5VTShpKSA9PSBfTkVXSU5ERVgpCisJICAgIGkrKzsKKwluZXh0X2h1bmsgPSBpOworCWZvcndhcmRfbGltaXQgPSBpOworCWlmIChpID49IHNjcmVlbl9saW5lcyB8fCBPTEROVU0oaSkgPj0gaSkKKwkgICAgZm9yd2FyZF9yZWZfbGltaXQgPSBpOworCWVsc2UKKwkgICAgZm9yd2FyZF9yZWZfbGltaXQgPSBPTEROVU0oaSk7CisKKwlpID0gc3RhcnQgLSAxOworCS8qIGdyb3cgYmFjayAqLworCWlmIChzaGlmdCA8IDApCisJICAgIGJhY2tfbGltaXQgPSBiYWNrX3JlZl9saW1pdCArICgtc2hpZnQpOworCXdoaWxlIChpID49IGJhY2tfbGltaXQpIHsKKwkgICAgaWYgKG5ld2hhc2hbaV0gPT0gb2xkaGFzaFtpICsgc2hpZnRdCisJCXx8IGNvc3RfZWZmZWN0aXZlKGkgKyBzaGlmdCwgaSwgc2hpZnQgPCAwKSkgeworCQlPTEROVU0oaSkgPSBpICsgc2hpZnQ7CisJCVRSKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUsCisJCSAgICgiY29ubmVjdGVkIG5ldyBsaW5lICVkIHRvIG9sZCBsaW5lICVkIChiYWNrd2FyZCBjb250aW51YXRpb24pIiwKKwkJICAgIGksIGkgKyBzaGlmdCkpOworCSAgICB9IGVsc2UgeworCQlUUihUUkFDRV9VUERBVEUgfCBUUkFDRV9NT1ZFLAorCQkgICAoIm5vdCBjb25uZWN0aW5nIG5ldyBsaW5lICVkIHRvIG9sZCBsaW5lICVkIChiYWNrd2FyZCBjb250aW51YXRpb24pIiwKKwkJICAgIGksIGkgKyBzaGlmdCkpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpLS07CisJfQorCisJaSA9IGVuZDsKKwkvKiBncm93IGZvcndhcmQgKi8KKwlpZiAoc2hpZnQgPiAwKQorCSAgICBmb3J3YXJkX2xpbWl0ID0gZm9yd2FyZF9yZWZfbGltaXQgLSBzaGlmdDsKKwl3aGlsZSAoaSA8IGZvcndhcmRfbGltaXQpIHsKKwkgICAgaWYgKG5ld2hhc2hbaV0gPT0gb2xkaGFzaFtpICsgc2hpZnRdCisJCXx8IGNvc3RfZWZmZWN0aXZlKGkgKyBzaGlmdCwgaSwgc2hpZnQgPiAwKSkgeworCQlPTEROVU0oaSkgPSBpICsgc2hpZnQ7CisJCVRSKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUsCisJCSAgICgiY29ubmVjdGVkIG5ldyBsaW5lICVkIHRvIG9sZCBsaW5lICVkIChmb3J3YXJkIGNvbnRpbnVhdGlvbikiLAorCQkgICAgaSwgaSArIHNoaWZ0KSk7CisJICAgIH0gZWxzZSB7CisJCVRSKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUsCisJCSAgICgibm90IGNvbm5lY3RpbmcgbmV3IGxpbmUgJWQgdG8gb2xkIGxpbmUgJWQgKGZvcndhcmQgY29udGludWF0aW9uKSIsCisJCSAgICBpLCBpICsgc2hpZnQpKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaSsrOworCX0KKworCWJhY2tfcmVmX2xpbWl0ID0gYmFja19saW1pdCA9IGk7CisJaWYgKHNoaWZ0ID4gMCkKKwkgICAgYmFja19yZWZfbGltaXQgKz0gc2hpZnQ7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2hhc2hfbWFwKHZvaWQpCit7CisgICAgSEFTSE1BUCAqc3A7CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IHN0YXJ0LCBzaGlmdCwgc2l6ZTsKKworICAgIGlmIChzY3JlZW5fbGluZXMgPiBsaW5lc19hbGxvYykgeworCWlmIChoYXNodGFiKQorCSAgICBmcmVlKGhhc2h0YWIpOworCWhhc2h0YWIgPSB0eXBlTWFsbG9jKEhBU0hNQVAsIChzY3JlZW5fbGluZXMgKyAxKSAqIDIpOworCWlmICghaGFzaHRhYikgeworCSAgICBpZiAob2xkaGFzaCkgeworCQlGcmVlQW5kTnVsbChvbGRoYXNoKTsKKwkgICAgfQorCSAgICBsaW5lc19hbGxvYyA9IDA7CisJICAgIHJldHVybjsKKwl9CisJbGluZXNfYWxsb2MgPSBzY3JlZW5fbGluZXM7CisgICAgfQorCisgICAgaWYgKG9sZGhhc2ggJiYgbmV3aGFzaCkgeworCS8qIHJlLWhhc2ggb25seSBjaGFuZ2VkIGxpbmVzICovCisJZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJICAgIGlmIChQRU5ESU5HKGkpKQorCQluZXdoYXNoW2ldID0gaGFzaChORVdURVhUKGkpKTsKKwl9CisgICAgfSBlbHNlIHsKKwkvKiByZS1oYXNoIGFsbCAqLworCWlmIChvbGRoYXNoID09IDApCisJICAgIG9sZGhhc2ggPSB0eXBlQ2FsbG9jKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCkgc2NyZWVuX2xpbmVzKTsKKwlpZiAobmV3aGFzaCA9PSAwKQorCSAgICBuZXdoYXNoID0gdHlwZUNhbGxvYyh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQpIHNjcmVlbl9saW5lcyk7CisJaWYgKCFvbGRoYXNoIHx8ICFuZXdoYXNoKQorCSAgICByZXR1cm47CQkvKiBtYWxsb2MgZmFpbHVyZSAqLworCWZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCSAgICBuZXdoYXNoW2ldID0gaGFzaChORVdURVhUKGkpKTsKKwkgICAgb2xkaGFzaFtpXSA9IGhhc2goT0xEVEVYVChpKSk7CisJfQorICAgIH0KKworI2lmZGVmIEhBU0hfVkVSSUZZCisgICAgZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJaWYgKG5ld2hhc2hbaV0gIT0gaGFzaChORVdURVhUKGkpKSkKKwkgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBpbiBuZXdoYXNoWyVkXVxuIiwgaSk7CisJaWYgKG9sZGhhc2hbaV0gIT0gaGFzaChPTERURVhUKGkpKSkKKwkgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBpbiBvbGRoYXNoWyVkXVxuIiwgaSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNldCB1cCBhbmQgY291bnQgbGluZS1oYXNoIHZhbHVlcy4KKyAgICAgKi8KKyAgICBtZW1zZXQoaGFzaHRhYiwgJ1wwJywgc2l6ZW9mKCpoYXNodGFiKSAqIChzY3JlZW5fbGluZXMgKyAxKSAqIDIpOworICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCXVuc2lnbmVkIGxvbmcgaGFzaHZhbCA9IG9sZGhhc2hbaV07CisKKwlmb3IgKHNwID0gaGFzaHRhYjsgc3AtPmhhc2h2YWw7IHNwKyspCisJICAgIGlmIChzcC0+aGFzaHZhbCA9PSBoYXNodmFsKQorCQlicmVhazsKKwlzcC0+aGFzaHZhbCA9IGhhc2h2YWw7CS8qIGluIGNhc2UgdGhpcyBpcyBhIG5ldyBlbnRyeSAqLworCXNwLT5vbGRjb3VudCsrOworCXNwLT5vbGRpbmRleCA9IGk7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCXVuc2lnbmVkIGxvbmcgaGFzaHZhbCA9IG5ld2hhc2hbaV07CisKKwlmb3IgKHNwID0gaGFzaHRhYjsgc3AtPmhhc2h2YWw7IHNwKyspCisJICAgIGlmIChzcC0+aGFzaHZhbCA9PSBoYXNodmFsKQorCQlicmVhazsKKwlzcC0+aGFzaHZhbCA9IGhhc2h2YWw7CS8qIGluIGNhc2UgdGhpcyBpcyBhIG5ldyBlbnRyeSAqLworCXNwLT5uZXdjb3VudCsrOworCXNwLT5uZXdpbmRleCA9IGk7CisKKwlPTEROVU0oaSkgPSBfTkVXSU5ERVg7CS8qIGluaXRpYWxpemUgb2xkIGluZGljZXMgYXJyYXkgKi8KKyAgICB9CisKKyAgICAvKgorICAgICAqIE1hcmsgbGluZSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHVuaXF1ZSBoYXNoIHBhaXJzLgorICAgICAqCisgICAgICogV2UgZG9uJ3QgbWFyayBsaW5lcyB3aXRoIG9mZnNldCAwLCBiZWNhdXNlIGl0IGNhbiBtYWtlIGZhaWwKKyAgICAgKiBleHRlbmRpbmcgaHVua3MgYnkgY29zdF9lZmZlY3RpdmUuIE90aGVyd2lzZSwgaXQgZG9lcyBub3QKKyAgICAgKiBoYXZlIGFueSBzaWRlIGVmZmVjdHMuCisgICAgICovCisgICAgZm9yIChzcCA9IGhhc2h0YWI7IHNwLT5oYXNodmFsOyBzcCsrKQorCWlmIChzcC0+b2xkY291bnQgPT0gMSAmJiBzcC0+bmV3Y291bnQgPT0gMQorCSAgICAmJiBzcC0+b2xkaW5kZXggIT0gc3AtPm5ld2luZGV4KSB7CisJICAgIFRSKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUsCisJICAgICAgICgibmV3IGxpbmUgJWQgaXMgaGFzaC1pZGVudGljYWwgdG8gb2xkIGxpbmUgJWQgKHVuaXF1ZSkiLAorCQlzcC0+bmV3aW5kZXgsIHNwLT5vbGRpbmRleCkpOworCSAgICBPTEROVU0oc3AtPm5ld2luZGV4KSA9IHNwLT5vbGRpbmRleDsKKwl9CisKKyAgICBncm93X2h1bmtzKCk7CisKKyAgICAvKgorICAgICAqIEVsaW1pbmF0ZSBiYWQgb3IgaW1wb3NzaWJsZSBzaGlmdHMgLS0gdGhpcyBpbmNsdWRlcyByZW1vdmluZworICAgICAqIHRob3NlIGh1bmtzIHdoaWNoIGNvdWxkIG5vdCBncm93IGJlY2F1c2Ugb2YgY29uZmxpY3RzLCBhcyB3ZWxsCisgICAgICogdGhvc2Ugd2hpY2ggYXJlIHRvIGJlIG1vdmVkIHRvbyBmYXIsIHRoZXkgYXJlIGxpa2VseSB0byBkZXN0cm95CisgICAgICogbW9yZSB0aGFuIGNhcnJ5LgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7KSB7CisJd2hpbGUgKGkgPCBzY3JlZW5fbGluZXMgJiYgT0xETlVNKGkpID09IF9ORVdJTkRFWCkKKwkgICAgaSsrOworCWlmIChpID49IHNjcmVlbl9saW5lcykKKwkgICAgYnJlYWs7CisJc3RhcnQgPSBpOworCXNoaWZ0ID0gT0xETlVNKGkpIC0gaTsKKwlpKys7CisJd2hpbGUgKGkgPCBzY3JlZW5fbGluZXMgJiYgT0xETlVNKGkpICE9IF9ORVdJTkRFWCAmJiBPTEROVU0oaSkgLSBpCisJICAgICAgID09IHNoaWZ0KQorCSAgICBpKys7CisJc2l6ZSA9IGkgLSBzdGFydDsKKwlpZiAoc2l6ZSA8IDMgfHwgc2l6ZSArIG1pbihzaXplIC8gOCwgMikgPCBhYnMoc2hpZnQpKSB7CisJICAgIHdoaWxlIChzdGFydCA8IGkpIHsKKwkJT0xETlVNKHN0YXJ0KSA9IF9ORVdJTkRFWDsKKwkJc3RhcnQrKzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBBZnRlciBjbGVhcmluZyBpbnZhbGlkIGh1bmtzLCB0cnkgZ3JvdyB0aGUgcmVzdC4gKi8KKyAgICBncm93X2h1bmtzKCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbWFrZV9vbGRoYXNoKGludCBpKQoreworICAgIGlmIChvbGRoYXNoKQorCW9sZGhhc2hbaV0gPSBoYXNoKE9MRFRFWFQoaSkpOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3Njcm9sbF9vbGRoYXNoKGludCBuLCBpbnQgdG9wLCBpbnQgYm90KQoreworICAgIHNpemVfdCBzaXplOworICAgIGludCBpOworCisgICAgaWYgKCFvbGRoYXNoKQorCXJldHVybjsKKworICAgIHNpemUgPSBzaXplb2YoKm9sZGhhc2gpICogKGJvdCAtIHRvcCArIDEgLSBhYnMobikpOworICAgIGlmIChuID4gMCkgeworCW1lbW1vdmUob2xkaGFzaCArIHRvcCwgb2xkaGFzaCArIHRvcCArIG4sIHNpemUpOworCWZvciAoaSA9IGJvdDsgaSA+IGJvdCAtIG47IGktLSkKKwkgICAgb2xkaGFzaFtpXSA9IGhhc2goT0xEVEVYVChpKSk7CisgICAgfSBlbHNlIHsKKwltZW1tb3ZlKG9sZGhhc2ggKyB0b3AgLSBuLCBvbGRoYXNoICsgdG9wLCBzaXplKTsKKwlmb3IgKGkgPSB0b3A7IGkgPCB0b3AgLSBuOyBpKyspCisJICAgIG9sZGhhc2hbaV0gPSBoYXNoKE9MRFRFWFQoaSkpOworICAgIH0KK30KKworI2lmZGVmIEhBU0hERUJVRworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlW10gPQorICAgIHsKKwkiaGFzaG1hcCB0ZXN0LWRyaXZlciIsCisJIiIsCisJIiMgIGNvbW1lbnQiLAorCSJsICBnZXQgaW5pdGlhbCBsaW5lIG51bWJlciB2ZWN0b3IiLAorCSJuICB1c2UgZm9sbG93aW5nIGxldHRlcnMgYXMgdGV4dCBvZiBuZXcgbGluZXMiLAorCSJvICB1c2UgZm9sbG93aW5nIGxldHRlcnMgYXMgdGV4dCBvZiBvbGQgbGluZXMiLAorCSJkICBkdW1wIHN0YXRlIG9mIHRlc3QgYXJyYXlzIiwKKwkiaCAgYXBwbHkgaGFzaCBtYXBwZXIgYW5kIHNlZSBzY3JvbGwgb3B0aW1pemF0aW9uIiwKKwkiPyAgdGhpcyBtZXNzYWdlIgorICAgIH07CisgICAgc2l6ZV90IG47CisgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZih0YWJsZSkgLyBzaXplb2YodGFibGVbMF0pOyBuKyspCisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgdGFibGVbbl0pOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBjaGFyIGxpbmVbQlVGU0laXSwgKnN0OworICAgIGludCBuOworCisgICAgaWYgKHNldHVwdGVybShOVUxMLCBmaWxlbm8oc3Rkb3V0KSwgKGludCAqKSAwKSA9PSBFUlIpCisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAodm9pZCkgX25jX2FsbG9jX3NjcmVlbigpOworCisgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKSB7CisJcmVhbGxpbmVzW25dID0gbjsKKwlvbGRudW1zW25dID0gX05FV0lOREVYOworCUNoYXJPZihvbGR0ZXh0W25dWzBdKSA9IENoYXJPZihuZXd0ZXh0W25dWzBdKSA9ICcuJzsKKyAgICB9CisKKyAgICBpZiAoaXNhdHR5KGZpbGVubyhzdGRpbikpKQorCXVzYWdlKCk7CisKKyNpZmRlZiBUUkFDRQorICAgIF9uY190cmFjaW5nID0gVFJBQ0VfTU9WRTsKKyNlbmRpZgorICAgIGZvciAoOzspIHsKKwkvKiBncmFiIGEgdGVzdCBjb21tYW5kICovCisJaWYgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pID09IChjaGFyICopIE5VTEwpCisJICAgIGJyZWFrOworCisJc3dpdGNoIChsaW5lWzBdKSB7CisJY2FzZSAnIyc6CQkvKiBjb21tZW50ICovCisJICAgICh2b2lkKSBmcHV0cyhsaW5lLCBzdGRlcnIpOworCSAgICBicmVhazsKKworCWNhc2UgJ2wnOgkJLyogZ2V0IGluaXRpYWwgbGluZSBudW1iZXIgdmVjdG9yICovCisJICAgIGZvciAobiA9IDA7IG4gPCBzY3JlZW5fbGluZXM7IG4rKykgeworCQlyZWFsbGluZXNbbl0gPSBuOworCQlvbGRudW1zW25dID0gX05FV0lOREVYOworCSAgICB9CisJICAgIG4gPSAwOworCSAgICBzdCA9IHN0cnRvayhsaW5lLCAiICIpOworCSAgICBkbyB7CisJCW9sZG51bXNbbisrXSA9IGF0b2koc3QpOworCSAgICB9IHdoaWxlCisJCSgoc3QgPSBzdHJ0b2soKGNoYXIgKikgTlVMTCwgIiAiKSkgIT0gMCk7CisJICAgIGJyZWFrOworCisJY2FzZSAnbic6CQkvKiB1c2UgZm9sbG93aW5nIGxldHRlcnMgYXMgdGV4dCBvZiBuZXcgbGluZXMgKi8KKwkgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCQlDaGFyT2YobmV3dGV4dFtuXVswXSkgPSAnLic7CisJICAgIGZvciAobiA9IDA7IG4gPCBzY3JlZW5fbGluZXM7IG4rKykKKwkJaWYgKGxpbmVbbiArIDFdID09ICdcbicpCisJCSAgICBicmVhazsKKwkJZWxzZQorCQkgICAgQ2hhck9mKG5ld3RleHRbbl1bMF0pID0gbGluZVtuICsgMV07CisJICAgIGJyZWFrOworCisJY2FzZSAnbyc6CQkvKiB1c2UgZm9sbG93aW5nIGxldHRlcnMgYXMgdGV4dCBvZiBvbGQgbGluZXMgKi8KKwkgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCQlDaGFyT2Yob2xkdGV4dFtuXVswXSkgPSAnLic7CisJICAgIGZvciAobiA9IDA7IG4gPCBzY3JlZW5fbGluZXM7IG4rKykKKwkJaWYgKGxpbmVbbiArIDFdID09ICdcbicpCisJCSAgICBicmVhazsKKwkJZWxzZQorCQkgICAgQ2hhck9mKG9sZHRleHRbbl1bMF0pID0gbGluZVtuICsgMV07CisJICAgIGJyZWFrOworCisJY2FzZSAnZCc6CQkvKiBkdW1wIHN0YXRlIG9mIHRlc3QgYXJyYXlzICovCisjaWZkZWYgVFJBQ0UKKwkgICAgX25jX2xpbmVkdW1wKCk7CisjZW5kaWYKKwkgICAgKHZvaWQpIGZwdXRzKCJPbGQgbGluZXM6IFsiLCBzdGRvdXQpOworCSAgICBmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2xpbmVzOyBuKyspCisJCXB1dGNoYXIoQ2hhck9mKG9sZHRleHRbbl1bMF0pKTsKKwkgICAgcHV0Y2hhcignXScpOworCSAgICBwdXRjaGFyKCdcbicpOworCSAgICAodm9pZCkgZnB1dHMoIk5ldyBsaW5lczogWyIsIHN0ZG91dCk7CisJICAgIGZvciAobiA9IDA7IG4gPCBzY3JlZW5fbGluZXM7IG4rKykKKwkJcHV0Y2hhcihDaGFyT2YobmV3dGV4dFtuXVswXSkpOworCSAgICBwdXRjaGFyKCddJyk7CisJICAgIHB1dGNoYXIoJ1xuJyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnaCc6CQkvKiBhcHBseSBoYXNoIG1hcHBlciBhbmQgc2VlIHNjcm9sbCBvcHRpbWl6YXRpb24gKi8KKwkgICAgX25jX2hhc2hfbWFwKCk7CisJICAgICh2b2lkKSBmcHV0cygiUmVzdWx0OlxuIiwgc3RkZXJyKTsKKyNpZmRlZiBUUkFDRQorCSAgICBfbmNfbGluZWR1bXAoKTsKKyNlbmRpZgorCSAgICBfbmNfc2Nyb2xsX29wdGltaXplKCk7CisJICAgICh2b2lkKSBmcHV0cygiRG9uZS5cbiIsIHN0ZGVycik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSAnPyc6CisJICAgIHVzYWdlKCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisjaWYgTk9fTEVBS1MKKyAgICBfbmNfZnJlZV9hbmRfZXhpdChFWElUX1NVQ0NFU1MpOworI2Vsc2UKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBIQVNIREVCVUcgKi8KKworLyogaGFzaG1hcC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90dHkvbGliX212Y3VyLmMgYi9uY3Vyc2VzL3R0eS9saWJfbXZjdXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY2ZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90dHkvbGliX212Y3VyLmMKQEAgLTAsMCArMSwxMjQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfbXZjdXIuYworKioKKyoqCVRoZSByb3V0aW5lcyBmb3IgbW92aW5nIHRoZSBwaHlzaWNhbCBjdXJzb3IgYW5kIHNjcm9sbGluZzoKKyoqCisqKgkJdm9pZCBfbmNfbXZjdXJfaW5pdCh2b2lkKQorKioKKyoqCQl2b2lkIF9uY19tdmN1cl9yZXN1bWUodm9pZCkKKyoqCisqKgkJaW50IG12Y3VyKGludCBvbGRfeSwgaW50IG9sZF94LCBpbnQgbmV3X3ksIGludCBuZXdfeCkKKyoqCisqKgkJdm9pZCBfbmNfbXZjdXJfd3JhcCh2b2lkKQorKioKKyoqIENvbXBhcmlzb25zIHdpdGggb2xkZXIgbW92ZW1lbnQgb3B0aW1pemVyczoKKyoqICAgIFNWcjMgY3Vyc2VzIG12Y3VyKCkgY2FuJ3QgdXNlIGN1cnNvcl90b19sbCBvciBhdXRvX2xlZnRfbWFyZ2luLgorKiogICAgNC40QlNEIGN1cnNlcyBjYW4ndCB1c2UgY3V1L2N1ZC9jdWYvY3ViL2hwYS92cGEvdGFiL2NidCBmb3IgbG9jYWwKKyoqIG1vdGlvbnMuICBJdCBkb2Vzbid0IHVzZSB0YWN0aWNzIGJhc2VkIG9uIGF1dG9fbGVmdF9tYXJnaW4uICBXZWlyZGx5CisqKiBlbm91Z2gsIGl0IGRvZXNuJ3QgdXNlIGl0cyBvd24gaGFyZHdhcmUtc2Nyb2xsaW5nIHJvdXRpbmUgdG8gc2Nyb2xsIHVwCisqKiBkZXN0aW5hdGlvbiBsaW5lcyBmb3Igb3V0LW9mLWJvdW5kcyBhZGRyZXNzZXMhCisqKiAgICBvbGQgbmN1cnNlcyBvcHRpbWl6ZXI6IGxlc3MgYWNjdXJhdGUgY29zdCBjb21wdXRhdGlvbnMgKGluIGZhY3QsCisqKiBpdCB3YXMgYnJva2VuIGFuZCBoYWQgdG8gYmUgY29tbWVudGVkIG91dCEpLgorKioKKyoqIENvbXBpbGUgd2l0aCAtRE1BSU4gdG8gYnVpbGQgYW4gaW50ZXJhY3RpdmUgdGVzdGVyL3RpbWVyIGZvciB0aGUgbW92ZW1lbnQKKyoqIG9wdGltaXplci4gIFlvdSBjYW4gdXNlIGl0IHRvIGludmVzdGlnYXRlIHRoZSBvcHRpbWl6ZXIncyBiZWhhdmlvci4KKyoqIFlvdSBjYW4gYWxzbyB1c2UgaXQgZm9yIHR1bmluZyB0aGUgZm9ybXVsYXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlcgorKiogb3Igbm90IGZ1bGwgb3B0aW1pemF0aW9uIGlzIGF0dGVtcHRlZC4KKyoqCisqKiBUaGlzIGNvZGUgaGFzIGEgbmFzdHkgdGVuZGVuY3kgdG8gZmluZCBidWdzIGluIHRlcm1pbmZvIGVudHJpZXMsIGJlY2F1c2UgaXQKKyoqIGV4ZXJjaXNlcyB0aGUgbm9uLWN1cCBtb3ZlbWVudCBjYXBhYmlsaXRpZXMgaGVhdmlseS4gIElmIHlvdSB0aGluayB5b3UndmUKKyoqIGZvdW5kIGEgYnVnLCB0cnkgZGVsZXRpbmcgc3Vic2V0cyBvZiB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdGllcyAoYXJyYW5nZWQKKyoqIGluIGRlY3JlYXNpbmcgb3JkZXIgb2Ygc3VzcGljaW91c25lc3MpOiBpdCwgdGFiLCBjYnQsIGhwYSwgdnBhLCBjdXUsIGN1ZCwKKyoqIGN1ZiwgY3ViLCBjdXUxLCBjdWQxLCBjdWYxLCBjdWIxLiAgSXQgbWF5IGJlIHRoYXQgb25lIG9yIG1vcmUgYXJlIHdyb25nLgorKioKKyoqIE5vdGU6IHlvdSBzaG91bGQgZXhwZWN0IHRoaXMgY29kZSB0byBsb29rIGxpa2UgYSByZXNvdXJjZSBob2cgaW4gYSBwcm9maWxlLgorKiogVGhhdCdzIGJlY2F1c2UgaXQgZG9lcyBhIGxvdCBvZiBJL08sIHRocm91Z2ggdGhlIHRwdXRzKCkgY2FsbHMuICBUaGUgSS9PCisqKiBjb3N0IHN3YW1wcyB0aGUgY29tcHV0YXRpb24gb3ZlcmhlYWQgKGFuZCBhcyBtYWNoaW5lcyBnZXQgZmFzdGVyLCB0aGlzCisqKiB3aWxsIGJlY29tZSBldmVuIG1vcmUgdHJ1ZSkuICBDb21tZW50cyBpbiB0aGUgdGVzdCBleGVyY2lzZXIgYXQgdGhlIGVuZAorKiogZ28gaW50byBkZXRhaWwgYWJvdXQgdHVuaW5nIGFuZCBob3cgeW91IGNhbiBnYXVnZSB0aGUgb3B0aW1pemVyJ3MKKyoqIGVmZmVjdGl2ZW5lc3MuCisqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3Igb3B0aW1pemVyIHR1bmluZy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZSBhdmVyYWdlIG92ZXJoZWFkIG9mIGEgZnVsbCBvcHRpbWl6YXRpb24gY29tcHV0YXRpb24gaW4gY2hhcmFjdGVyCisgKiB0cmFuc21pc3Npb24gdGltZXMuICBJZiBpdCdzIHRvbyBoaWdoLCB0aGUgYWxnb3JpdGhtIHdpbGwgYmUgYSBiaXQKKyAqIG92ZXItYmlhc2VkIHRvd2FyZCB1c2luZyBjdXAgcmF0aGVyIHRoYW4gbG9jYWwgbW90aW9uczsgaWYgaXQncyB0b28KKyAqIGxvdywgdGhlIGFsZ29yaXRobSBtYXkgc3BlbmQgbW9yZSB0aW1lIHRoYW4gaXMgc3RyaWN0bHkgb3B0aW1hbAorICogbG9va2luZyBmb3Igbm9uLWN1cCBtb3Rpb25zLiAgUHJvZmlsZSB0aGUgb3B0aW1pemVyIHVzaW5nIHRoZSBgdCcKKyAqIGNvbW1hbmQgb2YgdGhlIGV4ZXJjaXNlciAoc2VlIGJlbG93KSwgYW5kIHJvdW5kIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuCisgKgorICogWWVzLCBJIChlc3IpIHRob3VnaHQgYWJvdXQgY29tcHV0aW5nIGV4cGVjdGVkIG92ZXJoZWFkIGR5bmFtaWNhbGx5LCBzYXkKKyAqIGJ5IGRlcml2YXRpb24gZnJvbSBhIHJ1bm5pbmcgYXZlcmFnZSBvZiBvcHRpbWl6ZXIgdGltZXMuICBCdXQgdGhlCisgKiB3aG9sZSBwb2ludCBvZiB0aGlzIG9wdGltaXphdGlvbiBpcyB0byAqZGVjcmVhc2UqIHRoZSBmcmVxdWVuY3kgb2YKKyAqIHN5c3RlbSBjYWxscy4gOi0pCisgKi8KKyNkZWZpbmUgQ09NUFVURV9PVkVSSEVBRAkxCS8qIEkgdXNlIGEgOTBNSHogUGVudGl1bSBAIDkuNkticHMgKi8KKworLyoKKyAqIExPTkdfRElTVCBpcyB0aGUgZGlzdGFuY2Ugd2UgY29uc2lkZXIgdG8gYmUganVzdCBhcyBjb3N0bHkgdG8gbW92ZSBvdmVyIGFzIGEKKyAqIGN1cCBzZXF1ZW5jZSBpcyB0byBlbWl0LiAgSW4gb3RoZXIgd29yZHMsIGl0J3MgdGhlIGxlbmd0aCBvZiBhIGN1cCBzZXF1ZW5jZQorICogYWRqdXN0ZWQgZm9yIGF2ZXJhZ2UgY29tcHV0YXRpb24gb3ZlcmhlYWQuICBUaGUgbWFnaWMgbnVtYmVyIGlzIHRoZSBsZW5ndGgKKyAqIG9mICJcMDMzW3l5O3h4SCIsIHRoZSB0eXBpY2FsIGN1cCBzZXF1ZW5jZSB0aGVzZSBkYXlzLgorICovCisjZGVmaW5lIExPTkdfRElTVAkJKDggLSBDT01QVVRFX09WRVJIRUFEKQorCisvKgorICogVGVsbCB3aGV0aGVyIGEgbW90aW9uIGlzIG9wdGltaXphYmxlIGJ5IGxvY2FsIG1vdGlvbnMuICBOZWVkcyB0byBiZSBjaGVhcCB0bworICogY29tcHV0ZS4gSW4gZ2VuZXJhbCwgYWxsIHRoZSBmYXN0IG1vdmVzIGdvIHRvIGVpdGhlciB0aGUgcmlnaHQgb3IgbGVmdCBlZGdlCisgKiBvZiB0aGUgc2NyZWVuLiAgU28gYW55IG1vdGlvbiB0byBhIGxvY2F0aW9uIHRoYXQgaXMgKGEpIGZ1cnRoZXIgYXdheSB0aGFuCisgKiBMT05HX0RJU1QgYW5kIChiKSBmdXJ0aGVyIGlud2FyZCBmcm9tIHRoZSByaWdodCBvciBsZWZ0IGVkZ2UgdGhhbiBMT05HX0RJU1QsCisgKiB3ZSdsbCBjb25zaWRlciBub25sb2NhbC4KKyAqLworI2RlZmluZSBOT1RfTE9DQUwoZnksIGZ4LCB0eSwgdHgpCSgodHggPiBMT05HX0RJU1QpIFwKKyAJCSAmJiAodHggPCBzY3JlZW5fY29sdW1ucyAtIDEgLSBMT05HX0RJU1QpIFwKKwkJICYmIChhYnModHktZnkpICsgYWJzKHR4LWZ4KSA+IExPTkdfRElTVCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRXh0ZXJuYWwgaW50ZXJmYWNlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRm9yIHRoaXMgY29kZSB0byB3b3JrIE9LLCB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgbXVzdCBsaXZlIGluIHRoZQorICogc2NyZWVuIHN0cnVjdHVyZToKKyAqCisgKglpbnQJCV9jaGFyX3BhZGRpbmc7CS8vIGNvc3Qgb2YgY2hhcmFjdGVyIHB1dAorICoJaW50CQlfY3JfY29zdDsJLy8gY29zdCBvZiAoY2FycmlhZ2VfcmV0dXJuKQorICoJaW50CQlfY3VwX2Nvc3Q7CS8vIGNvc3Qgb2YgKGN1cnNvcl9hZGRyZXNzKQorICoJaW50CQlfaG9tZV9jb3N0OwkvLyBjb3N0IG9mIChjdXJzb3JfaG9tZSkKKyAqCWludAkJX2xsX2Nvc3Q7CS8vIGNvc3Qgb2YgKGN1cnNvcl90b19sbCkKKyAqI2lmIFVTRV9IQVJEX1RBQlMKKyAqCWludAkJX2h0X2Nvc3Q7CS8vIGNvc3Qgb2YgKHRhYikKKyAqCWludAkJX2NidF9jb3N0OwkvLyBjb3N0IG9mIChiYWNrX3RhYikKKyAqI2VuZGlmIFVTRV9IQVJEX1RBQlMKKyAqCWludAkJX2N1YjFfY29zdDsJLy8gY29zdCBvZiAoY3Vyc29yX2xlZnQpCisgKglpbnQJCV9jdWYxX2Nvc3Q7CS8vIGNvc3Qgb2YgKGN1cnNvcl9yaWdodCkKKyAqCWludAkJX2N1ZDFfY29zdDsJLy8gY29zdCBvZiAoY3Vyc29yX2Rvd24pCisgKglpbnQJCV9jdXUxX2Nvc3Q7CS8vIGNvc3Qgb2YgKGN1cnNvcl91cCkKKyAqCWludAkJX2N1Yl9jb3N0OwkvLyBjb3N0IG9mIChwYXJtX2N1cnNvcl9sZWZ0KQorICoJaW50CQlfY3VmX2Nvc3Q7CS8vIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX3JpZ2h0KQorICoJaW50CQlfY3VkX2Nvc3Q7CS8vIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX2Rvd24pCisgKglpbnQJCV9jdXVfY29zdDsJLy8gY29zdCBvZiAocGFybV9jdXJzb3JfdXApCisgKglpbnQJCV9ocGFfY29zdDsJLy8gY29zdCBvZiAoY29sdW1uX2FkZHJlc3MpCisgKglpbnQJCV92cGFfY29zdDsJLy8gY29zdCBvZiAocm93X2FkZHJlc3MpCisgKglpbnQJCV9lY2hfY29zdDsJLy8gY29zdCBvZiAoZXJhc2VfY2hhcnMpCisgKglpbnQJCV9yZXBfY29zdDsJLy8gY29zdCBvZiAocmVwZWF0X2NoYXIpCisgKgorICogVGhlIFVTRV9IQVJEX1RBQlMgc3dpdGNoIGNvbnRyb2xzIHdoZXRoZXIgaXQgaXMgcmVsaWFibGUgdG8gdXNlIHRhYi9iYWNrdGFicworICogZm9yIGxvY2FsIG1vdGlvbnMuICBPbiBtYW55IHN5c3RlbXMsIGl0J3Mgbm90LCBkdWUgdG8gdW5jZXJ0YWludGllcyBhYm91dAorICogdGFiIGRlbGF5cyBhbmQgd2hldGhlciBvciBub3QgdGFicyB3aWxsIGJlIGV4cGFuZGVkIGluIHJhdyBtb2RlLiAgSWYgeW91CisgKiBoYXZlIHBhcm1fcmlnaHRfY3Vyc29yLCB0YWIgbW90aW9ucyBkb24ndCB3aW4geW91IGEgbG90IGFueWhvdy4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9tdmN1ci5jLHYgMS4xMTMgMjAwOC8wOC8xNiAxOTozMDo1OCB0b20gRXhwICQiKQorCisjZGVmaW5lIFdBTlRfQ0hBUih5LCB4KQlTUC0+X25ld3Njci0+X2xpbmVbeV0udGV4dFt4XQkvKiBkZXNpcmVkIHN0YXRlICovCisjZGVmaW5lIEJBVURSQVRFCWN1cl90ZXJtLT5fYmF1ZHJhdGUJLyogYml0cyBwZXIgc2Vjb25kICovCisKKyNpZiBkZWZpbmVkKE1BSU4pIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKK3N0YXRpYyBib29sIHByb2ZpbGluZyA9IEZBTFNFOworc3RhdGljIGZsb2F0IGRpZmY7CisjZW5kaWYgLyogTUFJTiAqLworCisjZGVmaW5lIE9QVF9TSVpFIDUxMgorCitzdGF0aWMgaW50IG5vcm1hbGl6ZWRfY29zdChjb25zdCBjaGFyICpjb25zdCBjYXAsIGludCBhZmZjbnQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEluaXRpYWxpemF0aW9uL3dyYXB1cCAoaW5jbHVkaW5nIGNvc3QgcHJlLWNvbXB1dGF0aW9uKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgVFJBQ0UKK3N0YXRpYyBpbnQKK3RyYWNlX2Nvc3Rfb2YoY29uc3QgY2hhciAqY2FwbmFtZSwgY29uc3QgY2hhciAqY2FwLCBpbnQgYWZmY250KQoreworICAgIGludCByZXN1bHQgPSBfbmNfbXNlY19jb3N0KGNhcCwgYWZmY250KTsKKyAgICBUUihUUkFDRV9DSEFSUFVUIHwgVFJBQ0VfTU9WRSwKKyAgICAgICAoIkNvc3RPZiAlcyAlZCAlcyIsIGNhcG5hbWUsIHJlc3VsdCwgX25jX3Zpc2J1ZihjYXApKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNkZWZpbmUgQ29zdE9mKGNhcCxhZmZjbnQpIHRyYWNlX2Nvc3Rfb2YoI2NhcCxjYXAsYWZmY250KTsKKworc3RhdGljIGludAordHJhY2Vfbm9ybWFsaXplZF9jb3N0KGNvbnN0IGNoYXIgKmNhcG5hbWUsIGNvbnN0IGNoYXIgKmNhcCwgaW50IGFmZmNudCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gbm9ybWFsaXplZF9jb3N0KGNhcCwgYWZmY250KTsKKyAgICBUUihUUkFDRV9DSEFSUFVUIHwgVFJBQ0VfTU9WRSwKKyAgICAgICAoIk5vcm1hbGl6ZWRDb3N0ICVzICVkICVzIiwgY2FwbmFtZSwgcmVzdWx0LCBfbmNfdmlzYnVmKGNhcCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2RlZmluZSBOb3JtYWxpemVkQ29zdChjYXAsYWZmY250KSB0cmFjZV9ub3JtYWxpemVkX2Nvc3QoI2NhcCxjYXAsYWZmY250KTsKKworI2Vsc2UKKworI2RlZmluZSBDb3N0T2YoY2FwLGFmZmNudCkgX25jX21zZWNfY29zdChjYXAsYWZmY250KTsKKyNkZWZpbmUgTm9ybWFsaXplZENvc3QoY2FwLGFmZmNudCkgbm9ybWFsaXplZF9jb3N0KGNhcCxhZmZjbnQpOworCisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX21zZWNfY29zdChjb25zdCBjaGFyICpjb25zdCBjYXAsIGludCBhZmZjbnQpCisvKiBjb21wdXRlIHRoZSBjb3N0IG9mIGEgZ2l2ZW4gb3BlcmF0aW9uICovCit7CisgICAgaWYgKGNhcCA9PSAwKQorCXJldHVybiAoSU5GSU5JVFkpOworICAgIGVsc2UgeworCWNvbnN0IGNoYXIgKmNwOworCWZsb2F0IGN1bV9jb3N0ID0gMC4wOworCisJZm9yIChjcCA9IGNhcDsgKmNwOyBjcCsrKSB7CisJICAgIC8qIGV4dHJhY3QgcGFkZGluZywgZWl0aGVyIG1hbmRhdG9yeSBvciByZXF1aXJlZCAqLworCSAgICBpZiAoY3BbMF0gPT0gJyQnICYmIGNwWzFdID09ICc8JyAmJiBzdHJjaHIoY3AsICc+JykpIHsKKwkJZmxvYXQgbnVtYmVyID0gMC4wOworCisJCWZvciAoY3AgKz0gMjsgKmNwICE9ICc+JzsgY3ArKykgeworCQkgICAgaWYgKGlzZGlnaXQoVUNoYXIoKmNwKSkpCisJCQludW1iZXIgPSBudW1iZXIgKiAxMCArICgqY3AgLSAnMCcpOworCQkgICAgZWxzZSBpZiAoKmNwID09ICcqJykKKwkJCW51bWJlciAqPSBhZmZjbnQ7CisJCSAgICBlbHNlIGlmICgqY3AgPT0gJy4nICYmICgqKytjcCAhPSAnPicpICYmIGlzZGlnaXQoVUNoYXIoKmNwKSkpCisJCQludW1iZXIgKz0gKCpjcCAtICcwJykgLyAxMC4wOworCQl9CisKKyNpZiBOQ1VSU0VTX05PX1BBRERJTkcKKwkJaWYgKCFHZXROb1BhZGRpbmcoU1ApKQorI2VuZGlmCisJCSAgICBjdW1fY29zdCArPSBudW1iZXIgKiAxMDsKKwkgICAgfSBlbHNlCisJCWN1bV9jb3N0ICs9IFNQLT5fY2hhcl9wYWRkaW5nOworCX0KKworCXJldHVybiAoKGludCkgY3VtX2Nvc3QpOworICAgIH0KK30KKworc3RhdGljIGludAorbm9ybWFsaXplZF9jb3N0KGNvbnN0IGNoYXIgKmNvbnN0IGNhcCwgaW50IGFmZmNudCkKKy8qIGNvbXB1dGUgdGhlIGVmZmVjdGl2ZSBjaGFyYWN0ZXItY291bnQgZm9yIGFuIG9wZXJhdGlvbiAocm91bmQgdXApICovCit7CisgICAgaW50IGNvc3QgPSBfbmNfbXNlY19jb3N0KGNhcCwgYWZmY250KTsKKyAgICBpZiAoY29zdCAhPSBJTkZJTklUWSkKKwljb3N0ID0gKGNvc3QgKyBTUC0+X2NoYXJfcGFkZGluZyAtIDEpIC8gU1AtPl9jaGFyX3BhZGRpbmc7CisgICAgcmV0dXJuIGNvc3Q7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9zY3JvbGxfcmVnaW9uKHZvaWQpCisvKiBTZXQgdGhlIHNjcm9sbC1yZWdpb24gdG8gYSBrbm93biBzdGF0ZSAodGhlIGRlZmF1bHQpICovCit7CisgICAgaWYgKGNoYW5nZV9zY3JvbGxfcmVnaW9uKSB7CisJVFBVVFNfVFJBQ0UoImNoYW5nZV9zY3JvbGxfcmVnaW9uIik7CisJcHV0cChUUEFSTV8yKGNoYW5nZV9zY3JvbGxfcmVnaW9uLCAwLCBzY3JlZW5fbGluZXMgLSAxKSk7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX212Y3VyX3Jlc3VtZSh2b2lkKQorLyogd2hhdCB0byBkbyBhdCBpbml0aWFsaXphdGlvbiB0aW1lIGFuZCBhZnRlciBlYWNoIHNoZWxsb3V0ICovCit7CisgICAgLyogaW5pdGlhbGl6ZSBzY3JlZW4gZm9yIGN1cnNvciBhY2Nlc3MgKi8KKyAgICBpZiAoZW50ZXJfY2FfbW9kZSkgeworCVRQVVRTX1RSQUNFKCJlbnRlcl9jYV9tb2RlIik7CisJcHV0cChlbnRlcl9jYV9tb2RlKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvaW5nIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBpbiBfbmNfbXZjdXJfd3JhcCgpIGVuc3VyZXMgdGhhdAorICAgICAqIG5jdXJzZXMgcHJvZ3JhbXMgd2lsbCBzZWUgYSByZXNldCBzY3JvbGwgcmVnaW9uIGV2ZW4gaWYgYQorICAgICAqIHByb2dyYW0gdGhhdCBtZXNzZWQgd2l0aCBpdCBkaWVkIHVuZ3JhY2VmdWxseS4KKyAgICAgKgorICAgICAqIFRoaXMgYWxzbyB1bmRvZXMgdGhlIGVmZmVjdHMgb2YgdGVybWluYWwgaW5pdCBzdHJpbmdzIHRoYXQgYXNzdW1lCisgICAgICogdGhleSBrbm93IHRoZSBzY3JlZW4gc2l6ZS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91J3JlIHJ1bm5pbmcKKyAgICAgKiBhIHZ0MTAwIGVtdWxhdGlvbiB0aHJvdWdoIHh0ZXJtLgorICAgICAqLworICAgIHJlc2V0X3Njcm9sbF9yZWdpb24oKTsKKyAgICBTUC0+X2N1cnNyb3cgPSBTUC0+X2N1cnNjb2wgPSAtMTsKKworICAgIC8qIHJlc3RvcmUgY3Vyc29yIHNoYXBlICovCisgICAgaWYgKFNQLT5fY3Vyc29yICE9IC0xKSB7CisJaW50IGN1cnNvciA9IFNQLT5fY3Vyc29yOworCVNQLT5fY3Vyc29yID0gLTE7CisJY3Vyc19zZXQoY3Vyc29yKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbXZjdXJfaW5pdCh2b2lkKQorLyogaW5pdGlhbGl6ZSB0aGUgY29zdCBzdHJ1Y3R1cmUgKi8KK3sKKyAgICBpZiAoaXNhdHR5KGZpbGVubyhTUC0+X29mcCkpKQorCVNQLT5fY2hhcl9wYWRkaW5nID0gKChCQVVEQllURSAqIDEwMDAgKiAxMCkKKwkJCSAgICAgLyAoQkFVRFJBVEUgPiAwID8gQkFVRFJBVEUgOiA5NjAwKSk7CisgICAgZWxzZQorCVNQLT5fY2hhcl9wYWRkaW5nID0gMTsJLyogbXVzdCBiZSBub256ZXJvICovCisgICAgaWYgKFNQLT5fY2hhcl9wYWRkaW5nIDw9IDApCisJU1AtPl9jaGFyX3BhZGRpbmcgPSAxOwkvKiBtdXN0IGJlIG5vbnplcm8gKi8KKyAgICBUUihUUkFDRV9DSEFSUFVUIHwgVFJBQ0VfTU9WRSwgKCJjaGFyX3BhZGRpbmcgJWQgbXNlY3MiLCBTUC0+X2NoYXJfcGFkZGluZykpOworCisgICAgLyogbm9uLXBhcmFtZXRlcml6ZWQgbG9jYWwtbW90aW9uIHN0cmluZ3MgKi8KKyAgICBTUC0+X2NyX2Nvc3QgPSBDb3N0T2YoY2FycmlhZ2VfcmV0dXJuLCAwKTsKKyAgICBTUC0+X2hvbWVfY29zdCA9IENvc3RPZihjdXJzb3JfaG9tZSwgMCk7CisgICAgU1AtPl9sbF9jb3N0ID0gQ29zdE9mKGN1cnNvcl90b19sbCwgMCk7CisjaWYgVVNFX0hBUkRfVEFCUworICAgIGlmIChnZXRlbnYoIk5DVVJTRVNfTk9fSEFSRF9UQUJTIikgPT0gMCkgeworCVNQLT5faHRfY29zdCA9IENvc3RPZih0YWIsIDApOworCVNQLT5fY2J0X2Nvc3QgPSBDb3N0T2YoYmFja190YWIsIDApOworICAgIH0gZWxzZSB7CisJU1AtPl9odF9jb3N0ID0gSU5GSU5JVFk7CisJU1AtPl9jYnRfY29zdCA9IElORklOSVRZOworICAgIH0KKyNlbmRpZiAvKiBVU0VfSEFSRF9UQUJTICovCisgICAgU1AtPl9jdWIxX2Nvc3QgPSBDb3N0T2YoY3Vyc29yX2xlZnQsIDApOworICAgIFNQLT5fY3VmMV9jb3N0ID0gQ29zdE9mKGN1cnNvcl9yaWdodCwgMCk7CisgICAgU1AtPl9jdWQxX2Nvc3QgPSBDb3N0T2YoY3Vyc29yX2Rvd24sIDApOworICAgIFNQLT5fY3V1MV9jb3N0ID0gQ29zdE9mKGN1cnNvcl91cCwgMCk7CisKKyAgICBTUC0+X3NtaXJfY29zdCA9IENvc3RPZihlbnRlcl9pbnNlcnRfbW9kZSwgMCk7CisgICAgU1AtPl9ybWlyX2Nvc3QgPSBDb3N0T2YoZXhpdF9pbnNlcnRfbW9kZSwgMCk7CisgICAgU1AtPl9pcF9jb3N0ID0gMDsKKyAgICBpZiAoaW5zZXJ0X3BhZGRpbmcpIHsKKwlTUC0+X2lwX2Nvc3QgPSBDb3N0T2YoaW5zZXJ0X3BhZGRpbmcsIDApOworICAgIH0KKworICAgIC8qCisgICAgICogQXNzdW1wdGlvbjogaWYgdGhlIHRlcm1pbmFsIGhhcyBtZW1vcnlfcmVsYXRpdmUgYWRkcmVzc2luZywgdGhlCisgICAgICogaW5pdGlhbGl6YXRpb24gc3RyaW5ncyBvciBzbWN1cCB3aWxsIHNldCBzaW5nbGUtcGFnZSBtb2RlIHNvIHdlCisgICAgICogY2FuIHRyZWF0IGl0IGxpa2UgYWJzb2x1dGUgc2NyZWVuIGFkZHJlc3NpbmcuICBUaGlzIHNlZW1zIHRvIGJlIHRydWUKKyAgICAgKiBmb3IgYWxsIGN1cnNvcl9tZW1fYWRkcmVzcyB0ZXJtaW5hbCB0eXBlcyBpbiB0aGUgdGVybWluZm8gZGF0YWJhc2UuCisgICAgICovCisgICAgU1AtPl9hZGRyZXNzX2N1cnNvciA9IGN1cnNvcl9hZGRyZXNzID8gY3Vyc29yX2FkZHJlc3MgOiBjdXJzb3JfbWVtX2FkZHJlc3M7CisKKyAgICAvKgorICAgICAqIFBhcmFtZXRyaXplZCBsb2NhbC1tb3Rpb24gc3RyaW5ncy4gIFRoaXMgc3RhdGljIGNvc3QgY29tcHV0YXRpb24KKyAgICAgKiBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcgYXNzdW1wdGlvbnM6CisgICAgICoKKyAgICAgKiAoMSkgVGhleSBuZXZlciBoYXZlICogcGFkZGluZy4gIEluIHRoZSBlbnRpcmUgbWFzdGVyIHRlcm1pbmZvIGRhdGFiYXNlCisgICAgICogICAgIGFzIG9mIE1hcmNoIDE5OTUsIG9ubHkgdGhlIG9ic29sZXRlIFplbml0aCBaLTEwMCBwYyB2aW9sYXRlcyB0aGlzLgorICAgICAqICAgICAoUHJvcG9ydGlvbmFsIHBhZGRpbmcgaXMgZm91bmQgbWFpbmx5IGluIGluc2VydCwgZGVsZXRlIGFuZCBzY3JvbGwKKyAgICAgKiAgICAgY2FwYWJpbGl0aWVzKS4KKyAgICAgKgorICAgICAqICgyKSBUaGUgYXZlcmFnZSBjYXNlIG9mIGN1cCBoYXMgdHdvIHR3by1kaWdpdCBwYXJhbWV0ZXJzLiAgU3RyaWN0bHksCisgICAgICogICAgIHRoZSBhdmVyYWdlIGNhc2UgZm9yIGEgMjQgKiA4MCBzY3JlZW4gaGFzICgoMTAqMTAqKDEgKyAxKSkgKworICAgICAqICAgICAoMTQqMTAqKDEgKyAyKSkgKyAoMTAqNzAqKDIgKyAxKSkgKyAoMTQqNzAqNCkpIC8gKDI0KjgwKSA9IDMuNDU4CisgICAgICogICAgIGRpZ2l0cyBvZiBwYXJhbWV0ZXJzLiAgT24gYSAyNXg4MCBzY3JlZW4gdGhlIGF2ZXJhZ2UgaXMgMy42MTk3LgorICAgICAqICAgICBPbiBsYXJnZXIgc2NyZWVucyB0aGUgdmFsdWUgZ2V0cyBtdWNoIGNsb3NlciB0byA0LgorICAgICAqCisgICAgICogKDMpIFRoZSBhdmVyYWdlIGNhc2Ugb2YgY3ViL2N1Zi9ocGEvZWNoL3JlcCBoYXMgMiBkaWdpdHMgb2YgcGFyYW1ldGVycworICAgICAqICAgICAoc3RyaWN0bHksICgoKDEwICogMSkgKyAoNzAgKiAyKSkgLyA4MCkgPSAxLjg3NTApLgorICAgICAqCisgICAgICogKDQpIFRoZSBhdmVyYWdlIGNhc2Ugb2YgY3VkL2N1dS92cGEgaGFzIDIgZGlnaXRzIG9mIHBhcmFtZXRlcnMKKyAgICAgKiAgICAgKHN0cmljdGx5LCAoKCgxMCAqIDEpICsgKDE0ICogMikpIC8gMjQpID0gMS41ODMzKS4KKyAgICAgKgorICAgICAqIEFsbCB0aGVzZSBhdmVyYWdlcyBkZXBlbmQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBhbGwgcGFyYW1ldGVyIHZhbHVlcworICAgICAqIGFyZSBlcXVhbGx5IHByb2JhYmxlLgorICAgICAqLworICAgIFNQLT5fY3VwX2Nvc3QgPSBDb3N0T2YoVFBBUk1fMihTUC0+X2FkZHJlc3NfY3Vyc29yLCAyMywgMjMpLCAxKTsKKyAgICBTUC0+X2N1Yl9jb3N0ID0gQ29zdE9mKFRQQVJNXzEocGFybV9sZWZ0X2N1cnNvciwgMjMpLCAxKTsKKyAgICBTUC0+X2N1Zl9jb3N0ID0gQ29zdE9mKFRQQVJNXzEocGFybV9yaWdodF9jdXJzb3IsIDIzKSwgMSk7CisgICAgU1AtPl9jdWRfY29zdCA9IENvc3RPZihUUEFSTV8xKHBhcm1fZG93bl9jdXJzb3IsIDIzKSwgMSk7CisgICAgU1AtPl9jdXVfY29zdCA9IENvc3RPZihUUEFSTV8xKHBhcm1fdXBfY3Vyc29yLCAyMyksIDEpOworICAgIFNQLT5faHBhX2Nvc3QgPSBDb3N0T2YoVFBBUk1fMShjb2x1bW5fYWRkcmVzcywgMjMpLCAxKTsKKyAgICBTUC0+X3ZwYV9jb3N0ID0gQ29zdE9mKFRQQVJNXzEocm93X2FkZHJlc3MsIDIzKSwgMSk7CisKKyAgICAvKiBub24tcGFyYW1ldGVyaXplZCBzY3JlZW4tdXBkYXRlIHN0cmluZ3MgKi8KKyAgICBTUC0+X2VkX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChjbHJfZW9zLCAxKTsKKyAgICBTUC0+X2VsX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChjbHJfZW9sLCAxKTsKKyAgICBTUC0+X2VsMV9jb3N0ID0gTm9ybWFsaXplZENvc3QoY2xyX2JvbCwgMSk7CisgICAgU1AtPl9kY2gxX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChkZWxldGVfY2hhcmFjdGVyLCAxKTsKKyAgICBTUC0+X2ljaDFfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KGluc2VydF9jaGFyYWN0ZXIsIDEpOworCisgICAgLyoKKyAgICAgKiBJZiB0aGlzIGlzIGEgYmNlLXRlcm1pbmFsLCB3ZSB3YW50IHRvIGJpYXMgdGhlIGNob2ljZSBzbyB3ZSB1c2UgY2xyX2VvbAorICAgICAqIHJhdGhlciB0aGFuIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGEgbGluZS4KKyAgICAgKi8KKyAgICBpZiAoYmFja19jb2xvcl9lcmFzZSkKKwlTUC0+X2VsX2Nvc3QgPSAwOworCisgICAgLyogcGFyYW1ldGVyaXplZCBzY3JlZW4tdXBkYXRlIHN0cmluZ3MgKi8KKyAgICBTUC0+X2RjaF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMShwYXJtX2RjaCwgMjMpLCAxKTsKKyAgICBTUC0+X2ljaF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMShwYXJtX2ljaCwgMjMpLCAxKTsKKyAgICBTUC0+X2VjaF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMShlcmFzZV9jaGFycywgMjMpLCAxKTsKKyAgICBTUC0+X3JlcF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMihyZXBlYXRfY2hhciwgJyAnLCAyMyksIDEpOworCisgICAgU1AtPl9jdXBfY2hfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KFRQQVJNXzIoU1AtPl9hZGRyZXNzX2N1cnNvciwgMjMsIDIzKSwgMSk7CisgICAgU1AtPl9ocGFfY2hfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KFRQQVJNXzEoY29sdW1uX2FkZHJlc3MsIDIzKSwgMSk7CisgICAgU1AtPl9jdWZfY2hfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KFRQQVJNXzEocGFybV9yaWdodF9jdXJzb3IsIDIzKSwgMSk7CisgICAgU1AtPl9pbmxpbmVfY29zdCA9IG1pbihTUC0+X2N1cF9jaF9jb3N0LAorCQkJICAgbWluKFNQLT5faHBhX2NoX2Nvc3QsCisJCQkgICAgICAgU1AtPl9jdWZfY2hfY29zdCkpOworCisgICAgLyoKKyAgICAgKiBJZiBzYXZlX2N1cnNvciBpcyB1c2VkIHdpdGhpbiBlbnRlcl9jYV9tb2RlLCB3ZSBzaG91bGQgbm90IHVzZSBpdCBmb3IKKyAgICAgKiBzY3JvbGxpbmcgb3B0aW1pemF0aW9uLCBzaW5jZSB0aGUgY29ycmVzcG9uZGluZyByZXN0b3JlX2N1cnNvciBpcyBub3QKKyAgICAgKiBuZXN0ZWQgb24gdGhlIHZhcmlvdXMgdGVybWluYWxzICh2dDEwMCwgeHRlcm0sIGV0Yy4pIHdoaWNoIHVzZSB0aGlzCisgICAgICogZmVhdHVyZS4KKyAgICAgKi8KKyAgICBpZiAoc2F2ZV9jdXJzb3IgIT0gMAorCSYmIGVudGVyX2NhX21vZGUgIT0gMAorCSYmIHN0cnN0cihlbnRlcl9jYV9tb2RlLCBzYXZlX2N1cnNvcikgIT0gMCkgeworCVQoKCIuLi5zdXBwcmVzc2VkIHNjL3JjIGNhcGFiaWxpdHkgZHVlIHRvIGNvbmZsaWN0IHdpdGggc21jdXAvcm1jdXAiKSk7CisJc2F2ZV9jdXJzb3IgPSAwOworCXJlc3RvcmVfY3Vyc29yID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEEgZGlmZmVyZW50LCBwb3NzaWJseSBiZXR0ZXIgd2F5IHRvIGFycmFuZ2UgdGhpcyB3b3VsZCBiZSB0byBzZXQKKyAgICAgKiBTUC0+X2VuZHdpbiA9IFRSVUUgYXQgd2luZG93IGluaXRpYWxpemF0aW9uIHRpbWUgYW5kIGxldCB0aGlzIGJlCisgICAgICogY2FsbGVkIGJ5IGRvdXBkYXRlJ3MgcmV0dXJuLWZyb20tc2hlbGxvdXQgY29kZS4KKyAgICAgKi8KKyAgICBfbmNfbXZjdXJfcmVzdW1lKCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbXZjdXJfd3JhcCh2b2lkKQorLyogd3JhcCB1cCBjdXJzb3ItYWRkcmVzc2luZyBtb2RlICovCit7CisgICAgLyogbGVhdmUgY3Vyc29yIGF0IHNjcmVlbiBib3R0b20gKi8KKyAgICBtdmN1cigtMSwgLTEsIHNjcmVlbl9saW5lcyAtIDEsIDApOworCisgICAgLyogc2V0IGN1cnNvciB0byBub3JtYWwgbW9kZSAqLworICAgIGlmIChTUC0+X2N1cnNvciAhPSAtMSkgeworCWludCBjdXJzb3IgPSBTUC0+X2N1cnNvcjsKKwljdXJzX3NldCgxKTsKKwlTUC0+X2N1cnNvciA9IGN1cnNvcjsKKyAgICB9CisKKyAgICBpZiAoZXhpdF9jYV9tb2RlKSB7CisJVFBVVFNfVFJBQ0UoImV4aXRfY2FfbW9kZSIpOworCXB1dHAoZXhpdF9jYV9tb2RlKTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBSZXNldCB0ZXJtaW5hbCdzIHRhYiBjb3VudGVyLiAgVGhlcmUncyBhIGxvbmctdGltZSBidWcgdGhhdAorICAgICAqIGlmIHlvdSBleGl0IGEgImN1cnNlcyIgcHJvZ3JhbSBzdWNoIGFzIHZpIG9yIG1vcmUsIHRhYgorICAgICAqIGZvcndhcmQsIGFuZCB0aGVuIGJhY2tzcGFjZSwgdGhlIGN1cnNvciBkb2Vzbid0IGdvIHRvIHRoZQorICAgICAqIHJpZ2h0IHBsYWNlLiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUga2VybmVsIGNvdW50cyB0aGUKKyAgICAgKiBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgcmVzZXQgdGhpbmdzIGFzIGNvbHVtbiBwb3NpdGlvbnMuCisgICAgICogVXR0ZXIgYSBcciB0byByZXNldCB0aGlzIGludmlzaWJseS4KKyAgICAgKi8KKyAgICBfbmNfb3V0Y2goJ1xyJyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogT3B0aW1pemVkIGN1cnNvciBtb3ZlbWVudAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogUGVyZm9ybSByZXBlYXRlZC1hcHBlbmQsIHJldHVybmluZyBjb3N0CisgKi8KK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBpbnQKK3JlcGVhdGVkX2FwcGVuZChzdHJpbmdfZGVzYyAqIHRhcmdldCwgaW50IHRvdGFsLCBpbnQgbnVtLCBpbnQgcmVwZWF0LCBjb25zdCBjaGFyICpzcmMpCit7CisgICAgc2l6ZV90IG5lZWQgPSByZXBlYXQgKiBzdHJsZW4oc3JjKTsKKworICAgIGlmIChuZWVkIDwgdGFyZ2V0LT5zX3NpemUpIHsKKwl3aGlsZSAocmVwZWF0LS0gPiAwKSB7CisJICAgIGlmIChfbmNfc2FmZV9zdHJjYXQodGFyZ2V0LCBzcmMpKSB7CisJCXRvdGFsICs9IG51bTsKKwkgICAgfSBlbHNlIHsKKwkJdG90YWwgPSBJTkZJTklUWTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwl0b3RhbCA9IElORklOSVRZOworICAgIH0KKyAgICByZXR1cm4gdG90YWw7Cit9CisKKyNpZm5kZWYgTk9fT1BUSU1JWkUKKyNkZWZpbmUgTkVYVFRBQihmcikJKGZyICsgaW5pdF90YWJzIC0gKGZyICUgaW5pdF90YWJzKSkKKworLyoKKyAqIEFzc3VtZSBiYWNrX3RhYiAoQ0JUKSBkb2VzIG5vdCB3cmFwIGJhY2t3YXJkcyBhdCB0aGUgbGVmdCBtYXJnaW4sIHJldHVybgorICogYSBuZWdhdGl2ZSB2YWx1ZSBhdCB0aGF0IHBvaW50IHRvIHNpbXBsaWZ5IHRoZSBsb29wLgorICovCisjZGVmaW5lIExBU1RUQUIoZnIpCSgoZnIgPiAwKSA/ICgoZnIgLSAxKSAvIGluaXRfdGFicykgKiBpbml0X3RhYnMgOiAtMSkKKworc3RhdGljIGludAorcmVsYXRpdmVfbW92ZShzdHJpbmdfZGVzYyAqIHRhcmdldCwgaW50IGZyb21feSwgaW50IGZyb21feCwgaW50IHRvX3ksIGludAorCSAgICAgIHRvX3gsIGJvb2wgb3Z3KQorLyogbW92ZSB2aWEgbG9jYWwgbW90aW9ucyAoY3V1L2N1dTEvY3VkL2N1ZDEvY3ViMS9jdWIvY3VmMS9jdWYvdnBhL2hwYSkgKi8KK3sKKyAgICBzdHJpbmdfZGVzYyBzYXZlOworICAgIGludCBuLCB2Y29zdCA9IDAsIGhjb3N0ID0gMDsKKworICAgICh2b2lkKSBfbmNfc3RyX2NvcHkoJnNhdmUsIHRhcmdldCk7CisKKyAgICBpZiAodG9feSAhPSBmcm9tX3kpIHsKKwl2Y29zdCA9IElORklOSVRZOworCisJaWYgKHJvd19hZGRyZXNzICE9IDAKKwkgICAgJiYgX25jX3NhZmVfc3RyY2F0KHRhcmdldCwgVFBBUk1fMShyb3dfYWRkcmVzcywgdG9feSkpKSB7CisJICAgIHZjb3N0ID0gU1AtPl92cGFfY29zdDsKKwl9CisKKwlpZiAodG9feSA+IGZyb21feSkgeworCSAgICBuID0gKHRvX3kgLSBmcm9tX3kpOworCisJICAgIGlmIChwYXJtX2Rvd25fY3Vyc29yCisJCSYmIFNQLT5fY3VkX2Nvc3QgPCB2Y29zdAorCQkmJiBfbmNfc2FmZV9zdHJjYXQoX25jX3N0cl9jb3B5KHRhcmdldCwgJnNhdmUpLAorCQkJCSAgIFRQQVJNXzEocGFybV9kb3duX2N1cnNvciwgbikpKSB7CisJCXZjb3N0ID0gU1AtPl9jdWRfY29zdDsKKwkgICAgfQorCisJICAgIGlmIChjdXJzb3JfZG93bgorCQkmJiAoKmN1cnNvcl9kb3duICE9ICdcbicgfHwgU1AtPl9ubCkKKwkJJiYgKG4gKiBTUC0+X2N1ZDFfY29zdCA8IHZjb3N0KSkgeworCQl2Y29zdCA9IHJlcGVhdGVkX2FwcGVuZChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksIDAsCisJCQkJCVNQLT5fY3VkMV9jb3N0LCBuLCBjdXJzb3JfZG93bik7CisJICAgIH0KKwl9IGVsc2UgewkJLyogKHRvX3kgPCBmcm9tX3kpICovCisJICAgIG4gPSAoZnJvbV95IC0gdG9feSk7CisKKwkgICAgaWYgKHBhcm1fdXBfY3Vyc29yCisJCSYmIFNQLT5fY3V1X2Nvc3QgPCB2Y29zdAorCQkmJiBfbmNfc2FmZV9zdHJjYXQoX25jX3N0cl9jb3B5KHRhcmdldCwgJnNhdmUpLAorCQkJCSAgIFRQQVJNXzEocGFybV91cF9jdXJzb3IsIG4pKSkgeworCQl2Y29zdCA9IFNQLT5fY3V1X2Nvc3Q7CisJICAgIH0KKworCSAgICBpZiAoY3Vyc29yX3VwICYmIChuICogU1AtPl9jdXUxX2Nvc3QgPCB2Y29zdCkpIHsKKwkJdmNvc3QgPSByZXBlYXRlZF9hcHBlbmQoX25jX3N0cl9jb3B5KHRhcmdldCwgJnNhdmUpLCAwLAorCQkJCQlTUC0+X2N1dTFfY29zdCwgbiwgY3Vyc29yX3VwKTsKKwkgICAgfQorCX0KKworCWlmICh2Y29zdCA9PSBJTkZJTklUWSkKKwkgICAgcmV0dXJuIChJTkZJTklUWSk7CisgICAgfQorCisgICAgc2F2ZSA9ICp0YXJnZXQ7CisKKyAgICBpZiAodG9feCAhPSBmcm9tX3gpIHsKKwljaGFyIHN0cltPUFRfU0laRV07CisJc3RyaW5nX2Rlc2MgY2hlY2s7CisKKwloY29zdCA9IElORklOSVRZOworCisJaWYgKGNvbHVtbl9hZGRyZXNzCisJICAgICYmIF9uY19zYWZlX3N0cmNhdChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksCisJCQkgICAgICAgVFBBUk1fMShjb2x1bW5fYWRkcmVzcywgdG9feCkpKSB7CisJICAgIGhjb3N0ID0gU1AtPl9ocGFfY29zdDsKKwl9CisKKwlpZiAodG9feCA+IGZyb21feCkgeworCSAgICBuID0gdG9feCAtIGZyb21feDsKKworCSAgICBpZiAocGFybV9yaWdodF9jdXJzb3IKKwkJJiYgU1AtPl9jdWZfY29zdCA8IGhjb3N0CisJCSYmIF9uY19zYWZlX3N0cmNhdChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksCisJCQkJICAgVFBBUk1fMShwYXJtX3JpZ2h0X2N1cnNvciwgbikpKSB7CisJCWhjb3N0ID0gU1AtPl9jdWZfY29zdDsKKwkgICAgfQorCisJICAgIGlmIChjdXJzb3JfcmlnaHQpIHsKKwkJaW50IGxoY29zdCA9IDA7CisKKwkJKHZvaWQpIF9uY19zdHJfaW5pdCgmY2hlY2ssIHN0ciwgc2l6ZW9mKHN0cikpOworCisjaWYgVVNFX0hBUkRfVEFCUworCQkvKiB1c2UgaGFyZCB0YWJzLCBpZiB3ZSBoYXZlIHRoZW0sIHRvIGRvIGFzIG11Y2ggYXMgcG9zc2libGUgKi8KKwkJaWYgKGluaXRfdGFicyA+IDAgJiYgdGFiKSB7CisJCSAgICBpbnQgbnh0LCBmcjsKKworCQkgICAgZm9yIChmciA9IGZyb21feDsgKG54dCA9IE5FWFRUQUIoZnIpKSA8PSB0b194OyBmciA9IG54dCkgeworCQkJbGhjb3N0ID0gcmVwZWF0ZWRfYXBwZW5kKCZjaGVjaywgbGhjb3N0LAorCQkJCQkJIFNQLT5faHRfY29zdCwgMSwgdGFiKTsKKwkJCWlmIChsaGNvc3QgPT0gSU5GSU5JVFkpCisJCQkgICAgYnJlYWs7CisJCSAgICB9CisKKwkJICAgIG4gPSB0b194IC0gZnI7CisJCSAgICBmcm9tX3ggPSBmcjsKKwkJfQorI2VuZGlmIC8qIFVTRV9IQVJEX1RBQlMgKi8KKworCQlpZiAobiA8PSAwIHx8IG4gPj0gKGludCkgY2hlY2suc19zaXplKQorCQkgICAgb3Z3ID0gRkFMU0U7CisjaWYgQlNEX1RQVVRTCisJCS8qCisJCSAqIElmIHdlJ3JlIGFsbG93aW5nIEJTRC1zdHlsZSBwYWRkaW5nIGluIHRwdXRzLCBkb24ndCBnZW5lcmF0ZQorCQkgKiBhIHN0cmluZyB3aXRoIGEgbGVhZGluZyBkaWdpdC4gIE90aGVyd2lzZSwgdGhhdCB3aWxsIGJlCisJCSAqIGludGVycHJldGVkIGFzIGEgcGFkZGluZyB2YWx1ZSByYXRoZXIgdGhhbiBzZW50IHRvIHRoZQorCQkgKiBzY3JlZW4uCisJCSAqLworCQlpZiAob3Z3CisJCSAgICAmJiBuID4gMAorCQkgICAgJiYgbiA8IChpbnQpIGNoZWNrLnNfc2l6ZQorCQkgICAgJiYgdmNvc3QgPT0gMAorCQkgICAgJiYgc3RyWzBdID09ICdcMCcpIHsKKwkJICAgIGludCB3YW50ZWQgPSBDaGFyT2YoV0FOVF9DSEFSKHRvX3ksIGZyb21feCkpOworCQkgICAgaWYgKGlzOGJpdHMod2FudGVkKSAmJiBpc2RpZ2l0KHdhbnRlZCkpCisJCQlvdncgPSBGQUxTRTsKKwkJfQorI2VuZGlmCisJCS8qCisJCSAqIElmIHdlIGhhdmUgbm8gYXR0cmlidXRlIGNoYW5nZXMsIG92ZXJ3cml0ZSBpcyBjaGVhcGVyLgorCQkgKiBOb3RlOiBtdXN0IHN1cHByZXNzIHRoaXMgYnkgcGFzc2luZyBpbiBvdncgPSBGQUxTRSB3aGVuZXZlcgorCQkgKiBXQU5UX0NIQVIgd291bGQgcmV0dXJuIGludmFsaWQgZGF0YS4gIEluIHBhcnRpY3VsYXIsIHRoaXMKKwkJICogaXMgdHJ1ZSBiZXR3ZWVuIHRoZSB0aW1lIGEgaGFyZHdhcmUgc2Nyb2xsIGhhcyBiZWVuIGRvbmUKKwkJICogYW5kIHRoZSB0aW1lIHRoZSBzdHJ1Y3R1cmUgV0FOVF9DSEFSIHdvdWxkIGFjY2VzcyBoYXMgYmVlbgorCQkgKiB1cGRhdGVkLgorCQkgKi8KKwkJaWYgKG92dykgeworCQkgICAgaW50IGk7CisKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCU5DVVJTRVNfQ0hfVCBjaCA9IFdBTlRfQ0hBUih0b195LCBmcm9tX3ggKyBpKTsKKwkJCWlmICghU2FtZUF0dHJPZihjaCwgU0NSRUVOX0FUVFJTKFNQKSkKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCQkJICAgIHx8ICFDaGFyYWJsZShjaCkKKyNlbmRpZgorCQkJICAgICkgeworCQkJICAgIG92dyA9IEZBTFNFOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJCWlmIChvdncpIHsKKwkJICAgIGludCBpOworCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJKmNoZWNrLnNfdGFpbCsrID0gKGNoYXIpIENoYXJPZihXQU5UX0NIQVIodG9feSwKKwkJCQkJCQkJICBmcm9tX3ggKyBpKSk7CisJCSAgICAqY2hlY2suc190YWlsID0gJ1wwJzsKKwkJICAgIGNoZWNrLnNfc2l6ZSAtPSBuOworCQkgICAgbGhjb3N0ICs9IG4gKiBTUC0+X2NoYXJfcGFkZGluZzsKKwkJfSBlbHNlIHsKKwkJICAgIGxoY29zdCA9IHJlcGVhdGVkX2FwcGVuZCgmY2hlY2ssIGxoY29zdCwgU1AtPl9jdWYxX2Nvc3QsCisJCQkJCSAgICAgbiwgY3Vyc29yX3JpZ2h0KTsKKwkJfQorCisJCWlmIChsaGNvc3QgPCBoY29zdAorCQkgICAgJiYgX25jX3NhZmVfc3RyY2F0KF9uY19zdHJfY29weSh0YXJnZXQsICZzYXZlKSwgc3RyKSkgeworCQkgICAgaGNvc3QgPSBsaGNvc3Q7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CQkvKiAodG9feCA8IGZyb21feCkgKi8KKwkgICAgbiA9IGZyb21feCAtIHRvX3g7CisKKwkgICAgaWYgKHBhcm1fbGVmdF9jdXJzb3IKKwkJJiYgU1AtPl9jdWJfY29zdCA8IGhjb3N0CisJCSYmIF9uY19zYWZlX3N0cmNhdChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksCisJCQkJICAgVFBBUk1fMShwYXJtX2xlZnRfY3Vyc29yLCBuKSkpIHsKKwkJaGNvc3QgPSBTUC0+X2N1Yl9jb3N0OworCSAgICB9CisKKwkgICAgaWYgKGN1cnNvcl9sZWZ0KSB7CisJCWludCBsaGNvc3QgPSAwOworCisJCSh2b2lkKSBfbmNfc3RyX2luaXQoJmNoZWNrLCBzdHIsIHNpemVvZihzdHIpKTsKKworI2lmIFVTRV9IQVJEX1RBQlMKKwkJaWYgKGluaXRfdGFicyA+IDAgJiYgYmFja190YWIpIHsKKwkJICAgIGludCBueHQsIGZyOworCisJCSAgICBmb3IgKGZyID0gZnJvbV94OyAobnh0ID0gTEFTVFRBQihmcikpID49IHRvX3g7IGZyID0gbnh0KSB7CisJCQlsaGNvc3QgPSByZXBlYXRlZF9hcHBlbmQoJmNoZWNrLCBsaGNvc3QsCisJCQkJCQkgU1AtPl9jYnRfY29zdCwgMSwgYmFja190YWIpOworCQkJaWYgKGxoY29zdCA9PSBJTkZJTklUWSkKKwkJCSAgICBicmVhazsKKwkJICAgIH0KKworCQkgICAgbiA9IGZyIC0gdG9feDsKKwkJfQorI2VuZGlmIC8qIFVTRV9IQVJEX1RBQlMgKi8KKworCQlsaGNvc3QgPSByZXBlYXRlZF9hcHBlbmQoJmNoZWNrLCBsaGNvc3QsIFNQLT5fY3ViMV9jb3N0LCBuLCBjdXJzb3JfbGVmdCk7CisKKwkJaWYgKGxoY29zdCA8IGhjb3N0CisJCSAgICAmJiBfbmNfc2FmZV9zdHJjYXQoX25jX3N0cl9jb3B5KHRhcmdldCwgJnNhdmUpLCBzdHIpKSB7CisJCSAgICBoY29zdCA9IGxoY29zdDsKKwkJfQorCSAgICB9CisJfQorCisJaWYgKGhjb3N0ID09IElORklOSVRZKQorCSAgICByZXR1cm4gKElORklOSVRZKTsKKyAgICB9CisKKyAgICByZXR1cm4gKHZjb3N0ICsgaGNvc3QpOworfQorI2VuZGlmIC8qICFOT19PUFRJTUlaRSAqLworCisvKgorICogV2l0aCB0aGUgbWFjaGluZXJ5IHNldCB1cCBhYm92ZSwgaXQncyBjb25jZWl2YWJsZSB0aGF0CisgKiBvbnNjcmVlbl9tdmN1ciBjb3VsZCBiZSBtb2RpZmllZCBpbnRvIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIHRoYXQgZG9lcworICogYW4gYWxwaGEtYmV0YSBzZWFyY2ggb2YgbW90aW9uIHNwYWNlLCBhcyB0aG91Z2ggaXQgd2VyZSBhIGNoZXNzCisgKiBtb3ZlIHRyZWUsIHdpdGggdGhlIHdlaWdodCBmdW5jdGlvbiBiZWluZyBib29sZWFuIGFuZCB0aGUgc2VhcmNoCisgKiBkZXB0aCBlcXVhdGVkIHRvIGxlbmd0aCBvZiBzdHJpbmcuICBIb3dldmVyLCB0aGlzIHdvdWxkIGphY2sgdXAgdGhlCisgKiBjb21wdXRhdGlvbiBjb3N0IGEgbG90LCBlc3BlY2lhbGx5IG9uIHRlcm1pbmFscyB3aXRob3V0IGEgY3VwCisgKiBjYXBhYmlsaXR5IGNvbnN0cmFpbmluZyB0aGUgc2VhcmNoIHRyZWUgZGVwdGguICBTbyB3ZSBzZXR0bGUgZm9yCisgKiB0aGUgc2ltcGxlciBtZXRob2QgYmVsb3cuCisgKi8KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorb25zY3JlZW5fbXZjdXIoaW50IHlvbGQsIGludCB4b2xkLCBpbnQgeW5ldywgaW50IHhuZXcsIGJvb2wgb3Z3KQorLyogb25zY3JlZW4gbW92ZSBmcm9tICh5b2xkLCB4b2xkKSB0byAoeW5ldywgeG5ldykgKi8KK3sKKyAgICBzdHJpbmdfZGVzYyByZXN1bHQ7CisgICAgY2hhciBidWZmZXJbT1BUX1NJWkVdOworICAgIGludCB0YWN0aWMgPSAwLCBuZXdjb3N0LCB1c2Vjb3N0ID0gSU5GSU5JVFk7CisgICAgaW50IHQ1X2NyX2Nvc3Q7CisKKyNpZiBkZWZpbmVkKE1BSU4pIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorICAgIHN0cnVjdCB0aW1ldmFsIGJlZm9yZSwgYWZ0ZXI7CisKKyAgICBnZXR0aW1lb2ZkYXkoJmJlZm9yZSwgTlVMTCk7CisjZW5kaWYgLyogTUFJTiAqLworCisjZGVmaW5lIE51bGxSZXN1bHQgX25jX3N0cl9udWxsKCZyZXN1bHQsIHNpemVvZihidWZmZXIpKQorI2RlZmluZSBJbml0UmVzdWx0IF9uY19zdHJfaW5pdCgmcmVzdWx0LCBidWZmZXIsIHNpemVvZihidWZmZXIpKQorCisgICAgLyogdGFjdGljICMwOiB1c2UgZGlyZWN0IGN1cnNvciBhZGRyZXNzaW5nICovCisgICAgaWYgKF9uY19zYWZlX3N0cmNweShJbml0UmVzdWx0LCBUUEFSTV8yKFNQLT5fYWRkcmVzc19jdXJzb3IsIHluZXcsIHhuZXcpKSkgeworCXRhY3RpYyA9IDA7CisJdXNlY29zdCA9IFNQLT5fY3VwX2Nvc3Q7CisKKyNpZiBkZWZpbmVkKFRSQUNFKSB8fCBkZWZpbmVkKE5DVVJTRVNfVEVTVCkKKwlpZiAoIShfbmNfb3B0aW1pemVfZW5hYmxlICYgT1BUSU1JWkVfTVZDVVIpKQorCSAgICBnb3RvIG5vbmxvY2FsOworI2VuZGlmIC8qIFRSQUNFICovCisKKwkvKgorCSAqIFdlIG1heSBiZSBhYmxlIHRvIHRlbGwgaW4gYWR2YW5jZSB0aGF0IHRoZSBmdWxsIG9wdGltaXphdGlvbgorCSAqIHdpbGwgcHJvYmFibHkgbm90IGJlIHdvcnRoIGl0cyBvdmVyaGVhZC4gIEFsc28sIGRvbid0IHRyeSB0bworCSAqIHVzZSBsb2NhbCBtb3ZlbWVudCBpZiB0aGUgY3VycmVudCBhdHRyaWJ1dGUgaXMgYW55dGhpbmcgYnV0CisJICogQV9OT1JNQUwuLi50aGVyZSBhcmUganVzdCB0b28gbWFueSB3YXlzIHRoaXMgY2FuIHNjcmV3IHVwCisJICogKGxpa2UsIHNheSwgbG9jYWwtbW92ZW1lbnQgXG4gZ2V0dGluZyBtYXBwZWQgdG8gc29tZSBvYnNjdXJlCisJICogY2hhcmFjdGVyIGJlY2F1c2UgQV9BTFRDSEFSU0VUIGlzIG9uKS4KKwkgKi8KKwlpZiAoeW9sZCA9PSAtMSB8fCB4b2xkID09IC0xIHx8IE5PVF9MT0NBTCh5b2xkLCB4b2xkLCB5bmV3LCB4bmV3KSkgeworI2lmIGRlZmluZWQoTUFJTikgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCisJICAgIGlmICghcHJvZmlsaW5nKSB7CisJCSh2b2lkKSBmcHV0cygibm9ubG9jYWxcbiIsIHN0ZGVycik7CisJCWdvdG8gbm9ubG9jYWw7CS8qIGFsd2F5cyBydW4gdGhlIG9wdGltaXplciBpZiBwcm9maWxpbmcgKi8KKwkgICAgfQorI2Vsc2UKKwkgICAgZ290byBub25sb2NhbDsKKyNlbmRpZiAvKiBNQUlOICovCisJfQorICAgIH0KKyNpZm5kZWYgTk9fT1BUSU1JWkUKKyAgICAvKiB0YWN0aWMgIzE6IHVzZSBsb2NhbCBtb3ZlbWVudCAqLworICAgIGlmICh5b2xkICE9IC0xICYmIHhvbGQgIT0gLTEKKwkmJiAoKG5ld2Nvc3QgPSByZWxhdGl2ZV9tb3ZlKE51bGxSZXN1bHQsIHlvbGQsIHhvbGQsIHluZXcsIHhuZXcsCisJCQkJICAgICBvdncpKSAhPSBJTkZJTklUWSkKKwkmJiBuZXdjb3N0IDwgdXNlY29zdCkgeworCXRhY3RpYyA9IDE7CisJdXNlY29zdCA9IG5ld2Nvc3Q7CisgICAgfQorCisgICAgLyogdGFjdGljICMyOiB1c2UgY2FycmlhZ2UtcmV0dXJuICsgbG9jYWwgbW92ZW1lbnQgKi8KKyAgICBpZiAoeW9sZCAhPSAtMSAmJiBjYXJyaWFnZV9yZXR1cm4KKwkmJiAoKG5ld2Nvc3QgPSByZWxhdGl2ZV9tb3ZlKE51bGxSZXN1bHQsIHlvbGQsIDAsIHluZXcsIHhuZXcsIG92dykpCisJICAgICE9IElORklOSVRZKQorCSYmIFNQLT5fY3JfY29zdCArIG5ld2Nvc3QgPCB1c2Vjb3N0KSB7CisJdGFjdGljID0gMjsKKwl1c2Vjb3N0ID0gU1AtPl9jcl9jb3N0ICsgbmV3Y29zdDsKKyAgICB9CisKKyAgICAvKiB0YWN0aWMgIzM6IHVzZSBob21lLWN1cnNvciArIGxvY2FsIG1vdmVtZW50ICovCisgICAgaWYgKGN1cnNvcl9ob21lCisJJiYgKChuZXdjb3N0ID0gcmVsYXRpdmVfbW92ZShOdWxsUmVzdWx0LCAwLCAwLCB5bmV3LCB4bmV3LCBvdncpKSAhPSBJTkZJTklUWSkKKwkmJiBTUC0+X2hvbWVfY29zdCArIG5ld2Nvc3QgPCB1c2Vjb3N0KSB7CisJdGFjdGljID0gMzsKKwl1c2Vjb3N0ID0gU1AtPl9ob21lX2Nvc3QgKyBuZXdjb3N0OworICAgIH0KKworICAgIC8qIHRhY3RpYyAjNDogdXNlIGhvbWUtZG93biArIGxvY2FsIG1vdmVtZW50ICovCisgICAgaWYgKGN1cnNvcl90b19sbAorCSYmICgobmV3Y29zdCA9IHJlbGF0aXZlX21vdmUoTnVsbFJlc3VsdCwgc2NyZWVuX2xpbmVzIC0gMSwgMCwgeW5ldywKKwkJCQkgICAgIHhuZXcsIG92dykpICE9IElORklOSVRZKQorCSYmIFNQLT5fbGxfY29zdCArIG5ld2Nvc3QgPCB1c2Vjb3N0KSB7CisJdGFjdGljID0gNDsKKwl1c2Vjb3N0ID0gU1AtPl9sbF9jb3N0ICsgbmV3Y29zdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHRhY3RpYyAjNTogdXNlIGxlZnQgbWFyZ2luIGZvciB3cmFwIHRvIHJpZ2h0LWhhbmQgc2lkZSwKKyAgICAgKiB1bmxlc3Mgc3RyYW5nZSB3cmFwIGJlaGF2aW9yIGluZGljYXRlZCBieSB4ZW5sIG1pZ2h0IGhvc2UgdXMuCisgICAgICovCisgICAgdDVfY3JfY29zdCA9ICh4b2xkID4gMCA/IFNQLT5fY3JfY29zdCA6IDApOworICAgIGlmIChhdXRvX2xlZnRfbWFyZ2luICYmICFlYXRfbmV3bGluZV9nbGl0Y2gKKwkmJiB5b2xkID4gMCAmJiBjdXJzb3JfbGVmdAorCSYmICgobmV3Y29zdCA9IHJlbGF0aXZlX21vdmUoTnVsbFJlc3VsdCwgeW9sZCAtIDEsIHNjcmVlbl9jb2x1bW5zIC0KKwkJCQkgICAgIDEsIHluZXcsIHhuZXcsIG92dykpICE9IElORklOSVRZKQorCSYmIHQ1X2NyX2Nvc3QgKyBTUC0+X2N1YjFfY29zdCArIG5ld2Nvc3QgPCB1c2Vjb3N0KSB7CisJdGFjdGljID0gNTsKKwl1c2Vjb3N0ID0gdDVfY3JfY29zdCArIFNQLT5fY3ViMV9jb3N0ICsgbmV3Y29zdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZXNlIGNhc2VzIGFyZSBvcmRlcmVkIGJ5IGVzdGltYXRlZCByZWxhdGl2ZSBmcmVxdWVuY3kuCisgICAgICovCisgICAgaWYgKHRhY3RpYykKKwlJbml0UmVzdWx0OworICAgIHN3aXRjaCAodGFjdGljKSB7CisgICAgY2FzZSAxOgorCSh2b2lkKSByZWxhdGl2ZV9tb3ZlKCZyZXN1bHQsIHlvbGQsIHhvbGQsIHluZXcsIHhuZXcsIG92dyk7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCSh2b2lkKSBfbmNfc2FmZV9zdHJjcHkoJnJlc3VsdCwgY2FycmlhZ2VfcmV0dXJuKTsKKwkodm9pZCkgcmVsYXRpdmVfbW92ZSgmcmVzdWx0LCB5b2xkLCAwLCB5bmV3LCB4bmV3LCBvdncpOworCWJyZWFrOworICAgIGNhc2UgMzoKKwkodm9pZCkgX25jX3NhZmVfc3RyY3B5KCZyZXN1bHQsIGN1cnNvcl9ob21lKTsKKwkodm9pZCkgcmVsYXRpdmVfbW92ZSgmcmVzdWx0LCAwLCAwLCB5bmV3LCB4bmV3LCBvdncpOworCWJyZWFrOworICAgIGNhc2UgNDoKKwkodm9pZCkgX25jX3NhZmVfc3RyY3B5KCZyZXN1bHQsIGN1cnNvcl90b19sbCk7CisJKHZvaWQpIHJlbGF0aXZlX21vdmUoJnJlc3VsdCwgc2NyZWVuX2xpbmVzIC0gMSwgMCwgeW5ldywgeG5ldywgb3Z3KTsKKwlicmVhazsKKyAgICBjYXNlIDU6CisJaWYgKHhvbGQgPiAwKQorCSAgICAodm9pZCkgX25jX3NhZmVfc3RyY2F0KCZyZXN1bHQsIGNhcnJpYWdlX3JldHVybik7CisJKHZvaWQpIF9uY19zYWZlX3N0cmNhdCgmcmVzdWx0LCBjdXJzb3JfbGVmdCk7CisJKHZvaWQpIHJlbGF0aXZlX21vdmUoJnJlc3VsdCwgeW9sZCAtIDEsIHNjcmVlbl9jb2x1bW5zIC0gMSwgeW5ldywKKwkJCSAgICAgeG5ldywgb3Z3KTsKKwlicmVhazsKKyAgICB9CisjZW5kaWYgLyogIU5PX09QVElNSVpFICovCisKKyAgbm9ubG9jYWw6CisjaWYgZGVmaW5lZChNQUlOKSB8fCBkZWZpbmVkKE5DVVJTRVNfVEVTVCkKKyAgICBnZXR0aW1lb2ZkYXkoJmFmdGVyLCBOVUxMKTsKKyAgICBkaWZmID0gYWZ0ZXIudHZfdXNlYyAtIGJlZm9yZS50dl91c2VjCisJKyAoYWZ0ZXIudHZfc2VjIC0gYmVmb3JlLnR2X3NlYykgKiAxMDAwMDAwOworICAgIGlmICghcHJvZmlsaW5nKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICAgICJvbnNjcmVlbjogJWQgbWljcm9zZWMsICVmIDI4LjhLYnBzIGNoYXItZXF1aXZhbGVudHNcbiIsCisJCSAgICAgICAoaW50KSBkaWZmLCBkaWZmIC8gMjg4KTsKKyNlbmRpZiAvKiBNQUlOICovCisKKyAgICBpZiAodXNlY29zdCAhPSBJTkZJTklUWSkgeworCVRQVVRTX1RSQUNFKCJtdmN1ciIpOworCXRwdXRzKGJ1ZmZlciwgMSwgX25jX291dGNoKTsKKwlTUC0+X2N1cnNyb3cgPSB5bmV3OworCVNQLT5fY3Vyc2NvbCA9IHhuZXc7CisJcmV0dXJuIChPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuIChFUlIpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittdmN1cihpbnQgeW9sZCwgaW50IHhvbGQsIGludCB5bmV3LCBpbnQgeG5ldykKKy8qIG9wdGltaXplZCBjdXJzb3IgbW92ZSBmcm9tICh5b2xkLCB4b2xkKSB0byAoeW5ldywgeG5ldykgKi8KK3sKKyAgICBOQ1VSU0VTX0NIX1Qgb2xkYXR0cjsKKyAgICBpbnQgY29kZTsKKworICAgIFRSKFRSQUNFX0NBTExTIHwgVFJBQ0VfTU9WRSwgKFRfQ0FMTEVEKCJtdmN1ciglZCwlZCwlZCwlZCkiKSwKKwkJCQkgIHlvbGQsIHhvbGQsIHluZXcsIHhuZXcpKTsKKworICAgIGlmIChTUCA9PSAwKSB7CisJY29kZSA9IEVSUjsKKyAgICB9IGVsc2UgaWYgKHlvbGQgPT0geW5ldyAmJiB4b2xkID09IHhuZXcpIHsKKwljb2RlID0gT0s7CisgICAgfSBlbHNlIHsKKworCS8qCisJICogTW9zdCB3b3JrIGhlcmUgaXMgcm91bmRpbmcgZm9yIHRlcm1pbmFsIGJvdW5kYXJpZXMgZ2V0dGluZyB0aGUKKwkgKiBjb2x1bW4gcG9zaXRpb24gaW1wbGllZCBieSB3cmFwYXJvdW5kIG9yIHRoZSBsYWNrIHRoZXJlb2YgYW5kCisJICogcm9sbGluZyB1cCB0aGUgc2NyZWVuIHRvIGdldCB5bmV3IG9uIHRoZSBzY3JlZW4uCisJICovCisJaWYgKHhuZXcgPj0gc2NyZWVuX2NvbHVtbnMpIHsKKwkgICAgeW5ldyArPSB4bmV3IC8gc2NyZWVuX2NvbHVtbnM7CisJICAgIHhuZXcgJT0gc2NyZWVuX2NvbHVtbnM7CisJfQorCisJLyoKKwkgKiBGb3JjZSByZXN0b3JlIGV2ZW4gaWYgbXNnciBpcyBvbiB3aGVuIHdlJ3JlIGluIGFuIGFsdGVybmF0ZQorCSAqIGNoYXJhY3RlciBzZXQgLS0gdGhlc2UgaGF2ZSBhIHN0cm9uZyB0ZW5kZW5jeSB0byBzY3JldyB1cCB0aGUgQ1IgJgorCSAqIExGIHVzZWQgZm9yIGxvY2FsIGNoYXJhY3RlciBtb3Rpb25zIQorCSAqLworCW9sZGF0dHIgPSBTQ1JFRU5fQVRUUlMoU1ApOworCWlmICgoQXR0ck9mKG9sZGF0dHIpICYgQV9BTFRDSEFSU0VUKQorCSAgICB8fCAoQXR0ck9mKG9sZGF0dHIpICYmICFtb3ZlX3N0YW5kb3V0X21vZGUpKSB7CisJICAgIFRSKFRSQUNFX0NIQVJQVVQsICgidHVybmluZyBvZmYgKCUjbHgpICVzIGJlZm9yZSBtb3ZlIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZykgQXR0ck9mKG9sZGF0dHIpLAorCQkJICAgICAgIF90cmFjZWF0dHIoQXR0ck9mKG9sZGF0dHIpKSkpOworCSAgICAodm9pZCkgVklEQVRUUihBX05PUk1BTCwgMCk7CisJfQorCisJaWYgKHhvbGQgPj0gc2NyZWVuX2NvbHVtbnMpIHsKKwkgICAgaW50IGw7CisKKwkgICAgaWYgKFNQLT5fbmwpIHsKKwkJbCA9ICh4b2xkICsgMSkgLyBzY3JlZW5fY29sdW1uczsKKwkJeW9sZCArPSBsOworCQlpZiAoeW9sZCA+PSBzY3JlZW5fbGluZXMpCisJCSAgICBsIC09ICh5b2xkIC0gc2NyZWVuX2xpbmVzIC0gMSk7CisKKwkJaWYgKGwgPiAwKSB7CisJCSAgICBpZiAoY2FycmlhZ2VfcmV0dXJuKSB7CisJCQlUUFVUU19UUkFDRSgiY2FycmlhZ2VfcmV0dXJuIik7CisJCQlwdXRwKGNhcnJpYWdlX3JldHVybik7CisJCSAgICB9IGVsc2UKKwkJCV9uY19vdXRjaCgnXHInKTsKKwkJICAgIHhvbGQgPSAwOworCisJCSAgICB3aGlsZSAobCA+IDApIHsKKwkJCWlmIChuZXdsaW5lKSB7CisJCQkgICAgVFBVVFNfVFJBQ0UoIm5ld2xpbmUiKTsKKwkJCSAgICBwdXRwKG5ld2xpbmUpOworCQkJfSBlbHNlCisJCQkgICAgX25jX291dGNoKCdcbicpOworCQkJbC0tOworCQkgICAgfQorCQl9CisJICAgIH0gZWxzZSB7CisJCS8qCisJCSAqIElmIGNhbGxlciBzZXQgbm9ubCgpLCB3ZSBjYW5ub3QgcmVhbGx5IHVzZSBuZXdsaW5lcyB0bworCQkgKiBwb3NpdGlvbiB0byB0aGUgbmV4dCByb3cuCisJCSAqLworCQl4b2xkID0gLTE7CisJCXlvbGQgPSAtMTsKKwkgICAgfQorCX0KKworCWlmICh5b2xkID4gc2NyZWVuX2xpbmVzIC0gMSkKKwkgICAgeW9sZCA9IHNjcmVlbl9saW5lcyAtIDE7CisJaWYgKHluZXcgPiBzY3JlZW5fbGluZXMgLSAxKQorCSAgICB5bmV3ID0gc2NyZWVuX2xpbmVzIC0gMTsKKworCS8qIGRlc3RpbmF0aW9uIGxvY2F0aW9uIGlzIG9uIHNjcmVlbiBub3cgKi8KKwljb2RlID0gb25zY3JlZW5fbXZjdXIoeW9sZCwgeG9sZCwgeW5ldywgeG5ldywgVFJVRSk7CisKKwkvKgorCSAqIFJlc3RvcmUgYXR0cmlidXRlcyBpZiB3ZSBkaXNhYmxlZCB0aGVtIGJlZm9yZSBtb3ZpbmcuCisJICovCisJaWYgKCFTYW1lQXR0ck9mKG9sZGF0dHIsIFNDUkVFTl9BVFRSUyhTUCkpKSB7CisJICAgIFRSKFRSQUNFX0NIQVJQVVQsICgidHVybmluZyBvbiAoJSNseCkgJXMgYWZ0ZXIgbW92ZSIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIEF0dHJPZihvbGRhdHRyKSwKKwkJCSAgICAgICBfdHJhY2VhdHRyKEF0dHJPZihvbGRhdHRyKSkpKTsKKwkgICAgKHZvaWQpIFZJREFUVFIoQXR0ck9mKG9sZGF0dHIpLCBHZXRQYWlyKG9sZGF0dHIpKTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKKyNpZiBkZWZpbmVkKFRSQUNFKSB8fCBkZWZpbmVkKE5DVVJTRVNfVEVTVCkKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY19vcHRpbWl6ZV9lbmFibGUgPSBPUFRJTUlaRV9BTEw7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUFJTikgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vdmVtZW50IG9wdGltaXplciB0ZXN0IGNvZGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPGR1bXBfZW50cnkuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK05DVVJTRVNfRVhQT1JUX1ZBUihjb25zdCBjaGFyICopIF9uY19wcm9nbmFtZSA9ICJtdmN1ciI7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhtaXRzOworCisvKiB0aGVzZSBvdmVycmlkZSBsaWJfdHB1dHMuYyAqLworTkNVUlNFU19FWFBPUlQoaW50KQordHB1dHMoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYWZmY250IEdDQ19VTlVTRUQsIGludCAoKm91dGMpIChpbnQpIEdDQ19VTlVTRUQpCisvKiBzdHViIHRwdXRzKCkgdGhhdCBkdW1wcyBzZXF1ZW5jZXMgaW4gYSB2aXNpYmxlIGZvcm0gKi8KK3sKKyAgICBpZiAocHJvZmlsaW5nKQorCXhtaXRzICs9IHN0cmxlbihzdHJpbmcpOworICAgIGVsc2UKKwkodm9pZCkgZnB1dHMoX25jX3Zpc2J1ZihzdHJpbmcpLCBzdGRvdXQpOworICAgIHJldHVybiAoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwdXRwKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICByZXR1cm4gKHRwdXRzKHN0cmluZywgMSwgX25jX291dGNoKSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19vdXRjaChpbnQgY2gpCit7CisgICAgcHV0YyhjaCwgc3Rkb3V0KTsKKyAgICByZXR1cm4gT0s7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2RlbGF5X291dHB1dChpbnQgbXMgR0NDX1VOVVNFRCkKK3sKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXRpYyBjaGFyIHRuYW1lW1BBVEhfTUFYXTsKKworc3RhdGljIHZvaWQKK2xvYWRfdGVybSh2b2lkKQoreworICAgICh2b2lkKSBzZXR1cHRlcm0odG5hbWUsIFNURE9VVF9GSUxFTk8sIE5VTEwpOworfQorCitzdGF0aWMgaW50Cityb2xsKGludCBuKQoreworICAgIGludCBpLCBqOworCisgICAgaSA9IChSQU5EX01BWCAvIG4pICogbjsKKyAgICB3aGlsZSAoKGogPSByYW5kKCkpID49IGkpCisJY29udGludWU7CisgICAgcmV0dXJuIChqICUgbik7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHN0cmNweSh0bmFtZSwgZ2V0ZW52KCJURVJNIikpOworICAgIGxvYWRfdGVybSgpOworICAgIF9uY19zZXR1cHNjcmVlbihsaW5lcywgY29sdW1ucywgc3Rkb3V0LCBGQUxTRSwgMCk7CisgICAgYmF1ZHJhdGUoKTsKKworICAgIF9uY19tdmN1cl9pbml0KCk7CisgICAgTkNfQlVGRkVSRUQoRkFMU0UpOworCisgICAgKHZvaWQpIHB1dHMoIlRoZSBtdmN1ciB0ZXN0ZXIuICBUeXBlID8gZm9yIGhlbHAiKTsKKworICAgIGZwdXRzKCJzbWN1cDoiLCBzdGRvdXQpOworICAgIHB1dGNoYXIoJ1xuJyk7CisKKyAgICBmb3IgKDs7KSB7CisJaW50IGZ5LCBmeCwgdHksIHR4LCBuLCBpOworCWNoYXIgYnVmW0JVRlNJWl0sIGNhcG5hbWVbQlVGU0laXTsKKworCSh2b2lkKSBmcHV0cygiPiAiLCBzdGRvdXQpOworCSh2b2lkKSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbik7CisKKwlpZiAoYnVmWzBdID09ICc/JykgeworCSAgICAodm9pZCkgcHV0cygiPyAgICAgICAgICAgICAgICAtLSBkaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlIik7CisJICAgICh2b2lkKQorCQlwdXRzKCJmeSBmeCB0eSB0eCAgICAgIC0tICg0IG51bWJlcnMpIGRpc3BsYXkgKGZ5LGZ4KS0+KHR5LHR4KSBtb3ZlIik7CisJICAgICh2b2lkKSBwdXRzKCJzW2Nyb2xsXSBuIHQgYiBtIC0tIGRpc3BsYXkgc2Nyb2xsaW5nIHNlcXVlbmNlIik7CisJICAgICh2b2lkKQorCQlwcmludGYoInJbZWxvYWRdICAgICAgICAgLS0gcmVsb2FkIHRlcm1pbmFsIGluZm8gZm9yICVzXG4iLAorCQkgICAgICAgdGVybW5hbWUoKSk7CisJICAgICh2b2lkKQorCQlwdXRzKCJsW29hZF0gPHRlcm0+ICAgIC0tIGxvYWQgdGVybWluYWwgaW5mbyBmb3IgdHlwZSA8dGVybT4iKTsKKwkgICAgKHZvaWQpIHB1dHMoImRbZWxldGVdIDxjYXA+ICAgLS0gZGVsZXRlIG5hbWVkIGNhcGFiaWxpdHkiKTsKKwkgICAgKHZvaWQpIHB1dHMoImlbbnNwZWN0XSAgICAgICAgLS0gZGlzcGxheSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMiKTsKKwkgICAgKHZvaWQpCisJCXB1dHMoImNbb3N0XSAgICAgICAgICAgLS0gZHVtcCBjdXJzb3Itb3B0aW1pemF0aW9uIGNvc3QgdGFibGUiKTsKKwkgICAgKHZvaWQpIHB1dHMoIm9bb3B0aW1pemVdICAgICAgLS0gdG9nZ2xlIG1vdmVtZW50IG9wdGltaXphdGlvbiIpOworCSAgICAodm9pZCkKKwkJcHV0cygidFtvcnR1cmVdIDxudW0+ICAtLSB0b3J0dXJlLXRlc3Qgd2l0aCA8bnVtPiByYW5kb20gbW92ZXMiKTsKKwkgICAgKHZvaWQpIHB1dHMoInFbdWl0XSAgICAgICAgICAgLS0gcXVpdCB0aGUgcHJvZ3JhbSIpOworCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgIiVkICVkICVkICVkIiwgJmZ5LCAmZngsICZ0eSwgJnR4KSA9PSA0KSB7CisJICAgIHN0cnVjdCB0aW1ldmFsIGJlZm9yZSwgYWZ0ZXI7CisKKwkgICAgcHV0Y2hhcignIicpOworCisJICAgIGdldHRpbWVvZmRheSgmYmVmb3JlLCBOVUxMKTsKKwkgICAgbXZjdXIoZnksIGZ4LCB0eSwgdHgpOworCSAgICBnZXR0aW1lb2ZkYXkoJmFmdGVyLCBOVUxMKTsKKworCSAgICBwcmludGYoIlwiICglbGQgbXNlYylcbiIsCisJCSAgIChsb25nKSAoYWZ0ZXIudHZfdXNlYyAtIGJlZm9yZS50dl91c2VjCisJCQkgICArIChhZnRlci50dl9zZWMgLSBiZWZvcmUudHZfc2VjKQorCQkJICAgKiAxMDAwMDAwKSk7CisJfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAicyAlZCAlZCAlZCAlZCIsICZmeSwgJmZ4LCAmdHksICZ0eCkgPT0gNCkgeworCSAgICBzdHJ1Y3QgdGltZXZhbCBiZWZvcmUsIGFmdGVyOworCisJICAgIHB1dGNoYXIoJyInKTsKKworCSAgICBnZXR0aW1lb2ZkYXkoJmJlZm9yZSwgTlVMTCk7CisJICAgIF9uY19zY3JvbGxuKGZ5LCBmeCwgdHksIHR4KTsKKwkgICAgZ2V0dGltZW9mZGF5KCZhZnRlciwgTlVMTCk7CisKKwkgICAgcHJpbnRmKCJcIiAoJWxkIG1zZWMpXG4iLAorCQkgICAobG9uZykgKGFmdGVyLnR2X3VzZWMgLSBiZWZvcmUudHZfdXNlYyArIChhZnRlci50dl9zZWMgLQorCQkJCQkJCSAgICAgYmVmb3JlLnR2X3NlYykKKwkJCSAgICogMTAwMDAwMCkpOworCX0gZWxzZSBpZiAoYnVmWzBdID09ICdyJykgeworCSAgICAodm9pZCkgc3RyY3B5KHRuYW1lLCB0ZXJtbmFtZSgpKTsKKwkgICAgbG9hZF90ZXJtKCk7CisJfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAibCAlcyIsIHRuYW1lKSA9PSAxKSB7CisJICAgIGxvYWRfdGVybSgpOworCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgImQgJXMiLCBjYXBuYW1lKSA9PSAxKSB7CisJICAgIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpucCA9IF9uY19maW5kX2VudHJ5KGNhcG5hbWUsCisJCQkJCQkJICAgICAgIF9uY19nZXRfaGFzaF90YWJsZShGQUxTRSkpOworCisJICAgIGlmIChucCA9PSBOVUxMKQorCQkodm9pZCkgcHJpbnRmKCJObyBzdWNoIGNhcGFiaWxpdHkgYXMgXCIlc1wiXG4iLCBjYXBuYW1lKTsKKwkgICAgZWxzZSB7CisJCXN3aXRjaCAobnAtPm50ZV90eXBlKSB7CisJCWNhc2UgQk9PTEVBTjoKKwkJICAgIGN1cl90ZXJtLT50eXBlLkJvb2xlYW5zW25wLT5udGVfaW5kZXhdID0gRkFMU0U7CisJCSAgICAodm9pZCkKKwkJCXByaW50ZigiQm9vbGVhbiBjYXBhYmlsaXR5IGAlcycgKCVkKSB0dXJuZWQgb2ZmLlxuIiwKKwkJCSAgICAgICBucC0+bnRlX25hbWUsIG5wLT5udGVfaW5kZXgpOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSBOVU1CRVI6CisJCSAgICBjdXJfdGVybS0+dHlwZS5OdW1iZXJzW25wLT5udGVfaW5kZXhdID0gQUJTRU5UX05VTUVSSUM7CisJCSAgICAodm9pZCkgcHJpbnRmKCJOdW1iZXIgY2FwYWJpbGl0eSBgJXMnICglZCkgc2V0IHRvIC0xLlxuIiwKKwkJCQkgIG5wLT5udGVfbmFtZSwgbnAtPm50ZV9pbmRleCk7CisJCSAgICBicmVhazsKKworCQljYXNlIFNUUklORzoKKwkJICAgIGN1cl90ZXJtLT50eXBlLlN0cmluZ3NbbnAtPm50ZV9pbmRleF0gPSBBQlNFTlRfU1RSSU5HOworCQkgICAgKHZvaWQpIHByaW50ZigiU3RyaW5nIGNhcGFiaWxpdHkgYCVzJyAoJWQpIGRlbGV0ZWQuXG4iLAorCQkJCSAgbnAtPm50ZV9uYW1lLCBucC0+bnRlX2luZGV4KTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnaScpIHsKKwkgICAgZHVtcF9pbml0KChjaGFyICopIE5VTEwsIEZfVEVSTUlORk8sIFNfVEVSTUlORk8sIDcwLCAwLCBGQUxTRSk7CisJICAgIGR1bXBfZW50cnkoJmN1cl90ZXJtLT50eXBlLCBGQUxTRSwgVFJVRSwgMCwgMCk7CisJICAgIHB1dGNoYXIoJ1xuJyk7CisJfSBlbHNlIGlmIChidWZbMF0gPT0gJ28nKSB7CisJICAgIGlmIChfbmNfb3B0aW1pemVfZW5hYmxlICYgT1BUSU1JWkVfTVZDVVIpIHsKKwkJX25jX29wdGltaXplX2VuYWJsZSAmPSB+T1BUSU1JWkVfTVZDVVI7CisJCSh2b2lkKSBwdXRzKCJPcHRpbWl6YXRpb24gaXMgbm93IG9mZi4iKTsKKwkgICAgfSBlbHNlIHsKKwkJX25jX29wdGltaXplX2VuYWJsZSB8PSBPUFRJTUlaRV9NVkNVUjsKKwkJKHZvaWQpIHB1dHMoIk9wdGltaXphdGlvbiBpcyBub3cgb24uIik7CisJICAgIH0KKwl9CisJLyoKKwkgKiBZb3UgY2FuIHVzZSB0aGUgYHQnIHRlc3QgdG8gcHJvZmlsZSBhbmQgdHVuZSB0aGUgbW92ZW1lbnQKKwkgKiBvcHRpbWl6ZXIuICBVc2UgaXRlcmF0aW9uIHZhbHVlcyBpbiB0aHJlZSBkaWdpdHMgb3IgbW9yZS4KKwkgKiBBdCBhYm92ZSA1MDAwIGl0ZXJhdGlvbnMgdGhlIHByb2ZpbGUgdGltaW5nIGF2ZXJhZ2VzIGFyZSBzdGFibGUKKwkgKiB0byB3aXRoaW4gYSBtaWxsaXNlY29uZCBvciB0aHJlZS4KKwkgKgorCSAqIFRoZSBgb3ZlcmhlYWQnIGZpZWxkIG9mIHRoZSByZXBvcnQgd2lsbCBoZWxwIHlvdSBwaWNrIGEKKwkgKiBDT01QVVRFX09WRVJIRUFEIGZpZ3VyZSBhcHByb3ByaWF0ZSBmb3IgeW91ciBwcm9jZXNzb3IgYW5kCisJICogZXhwZWN0ZWQgbGluZSBzcGVlZC4gIFRoZSBgdG90YWwgZXN0aW1hdGVkIHRpbWUnIGlzCisJICogY29tcHV0YXRpb24gdGltZSBwbHVzIGEgY2hhcmFjdGVyLXRyYW5zbWlzc2lvbiB0aW1lCisJICogZXN0aW1hdGUgY29tcHV0ZWQgZnJvbSB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0cyBhbmQgdGhlIGJhdWQKKwkgKiByYXRlLgorCSAqCisJICogVXNlIHRoaXMgdG9nZXRoZXIgd2l0aCB0aGUgYG8nIGNvbW1hbmQgdG8gZ2V0IGEgcmVhZCBvbiB0aGUKKwkgKiBvcHRpbWl6ZXIncyBlZmZlY3RpdmVuZXNzLiAgQ29tcGFyZSB0aGUgdG90YWwgZXN0aW1hdGVkIHRpbWVzCisJICogZm9yIGB0JyBydW5zIG9mIHRoZSBzYW1lIGxlbmd0aCBpbiBib3RoIG9wdGltaXplZCBhbmQgdW4tb3B0aW1pemVkCisJICogbW9kZXMuICBBcyBsb25nIGFzIHRoZSBvcHRpbWl6ZWQgdGltZXMgYXJlIGxlc3MsIHRoZSBvcHRpbWl6ZXIKKwkgKiBpcyB3aW5uaW5nLgorCSAqLworCWVsc2UgaWYgKHNzY2FuZihidWYsICJ0ICVkIiwgJm4pID09IDEpIHsKKwkgICAgZmxvYXQgY3VtdGltZSA9IDAuMCwgcGVyY2hhcjsKKwkgICAgaW50IHNwZWVkc1tdID0KKwkgICAgezI0MDAsIDk2MDAsIDE0NDAwLCAxOTIwMCwgMjg4MDAsIDM4NDAwLCAwfTsKKworCSAgICBzcmFuZCgodW5zaWduZWQpIChnZXRwaWQoKSArIHRpbWUoKHRpbWVfdCAqKSAwKSkpOworCSAgICBwcm9maWxpbmcgPSBUUlVFOworCSAgICB4bWl0cyA9IDA7CisJICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJLyoKKwkJICogVGhpcyBkb2VzIGEgbW92ZSB0ZXN0IGJldHdlZW4gdHdvIHJhbmRvbSBsb2NhdGlvbnMsCisJCSAqIFJhbmRvbSBtb3ZlcyBwcm9iYWJseSBzaG9ydC1jaGFuZ2UgdGhlIG9wdGltaXplciwKKwkJICogd2hpY2ggd2lsbCB3b3JrIGJldHRlciBvbiB0aGUgc2hvcnQgbW92ZXMgcHJvYmFibHkKKwkJICogdHlwaWNhbCBvZiBkb3VwZGF0ZSgpJ3MgdXNhZ2UgcGF0dGVybi4gIFN0aWxsLAorCQkgKiB1bnRpbCB3ZSBoYXZlIGJldHRlciBkYXRhLi4uCisJCSAqLworI2lmZGVmIEZJTkRfQ09SRURVTVAKKwkJaW50IGZyb21feSA9IHJvbGwobGluZXMpOworCQlpbnQgdG9feSA9IHJvbGwobGluZXMpOworCQlpbnQgZnJvbV94ID0gcm9sbChjb2x1bW5zKTsKKwkJaW50IHRvX3ggPSByb2xsKGNvbHVtbnMpOworCisJCXByaW50ZigiKCVkLCVkKSAtPiAoJWQsJWQpXG4iLCBmcm9tX3ksIGZyb21feCwgdG9feSwgdG9feCk7CisJCW12Y3VyKGZyb21feSwgZnJvbV94LCB0b195LCB0b194KTsKKyNlbHNlCisJCW12Y3VyKHJvbGwobGluZXMpLCByb2xsKGNvbHVtbnMpLCByb2xsKGxpbmVzKSwgcm9sbChjb2x1bW5zKSk7CisjZW5kaWYgLyogRklORF9DT1JFRFVNUCAqLworCQlpZiAoZGlmZikKKwkJICAgIGN1bXRpbWUgKz0gZGlmZjsKKwkgICAgfQorCSAgICBwcm9maWxpbmcgPSBGQUxTRTsKKworCSAgICAvKgorCSAgICAgKiBBdmVyYWdlIG1pbGxpc2Vjb25kcyBwZXIgY2hhcmFjdGVyIG9wdGltaXphdGlvbiB0aW1lLgorCSAgICAgKiBUaGlzIGlzIHRoZSBrZXkgZmlndXJlIHRvIHdhdGNoIHdoZW4gdHVuaW5nIHRoZSBvcHRpbWl6ZXIuCisJICAgICAqLworCSAgICBwZXJjaGFyID0gY3VtdGltZSAvIG47CisKKwkgICAgKHZvaWQpIHByaW50ZigiJWQgbW92ZXMgKCVsZCBjaGFycykgaW4gJWQgbXNlYywgJWYgbXNlYyBlYWNoOlxuIiwKKwkJCSAgbiwgeG1pdHMsIChpbnQpIGN1bXRpbWUsIHBlcmNoYXIpOworCisJICAgIGZvciAoaSA9IDA7IHNwZWVkc1tpXTsgaSsrKSB7CisJCS8qCisJCSAqIFRvdGFsIGVzdGltYXRlZCB0aW1lIGZvciB0aGUgbW92ZXMsIGNvbXB1dGF0aW9uIGFuZAorCQkgKiB0cmFuc21pc3Npb24gYm90aC4gVHJhbnNtaXNzaW9uIHRpbWUgaXMgYW4gZXN0aW1hdGUKKwkJICogYXNzdW1pbmcgOSBiaXRzL2NoYXIsIDggYml0cyArIDEgc3RvcCBiaXQuCisJCSAqLworCQlmbG9hdCB0b3RhbGVzdCA9IGN1bXRpbWUgKyB4bWl0cyAqIDkgKiAxZTYgLyBzcGVlZHNbaV07CisKKwkJLyoKKwkJICogUGVyLWNoYXJhY3RlciBvcHRpbWl6YXRpb24gb3ZlcmhlYWQgaW4gY2hhcmFjdGVyIHRyYW5zbWl0cworCQkgKiBhdCB0aGUgY3VycmVudCBzcGVlZC4gIFJvdW5kIHRoaXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcgorCQkgKiB0byBmaWd1cmUgQ09NUFVURV9PVkVSSEVBRCBmb3IgdGhlIHNwZWVkLgorCQkgKi8KKwkJZmxvYXQgb3ZlcmhlYWQgPSBzcGVlZHNbaV0gKiBwZXJjaGFyIC8gMWU2OworCisJCSh2b2lkKQorCQkgICAgcHJpbnRmKCIlNmQgYnBzOiAlMy4yZiBjaGFyLXhtaXRzIG92ZXJoZWFkOyB0b3RhbCBlc3RpbWF0ZWQgdGltZSAlMTUuMmZcbiIsCisJCQkgICBzcGVlZHNbaV0sIG92ZXJoZWFkLCB0b3RhbGVzdCk7CisJICAgIH0KKwl9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnYycpIHsKKwkgICAgKHZvaWQpIHByaW50ZigiY2hhciBwYWRkaW5nOiAlZFxuIiwgU1AtPl9jaGFyX3BhZGRpbmcpOworCSAgICAodm9pZCkgcHJpbnRmKCJjciBjb3N0OiAlZFxuIiwgU1AtPl9jcl9jb3N0KTsKKwkgICAgKHZvaWQpIHByaW50ZigiY3VwIGNvc3Q6ICVkXG4iLCBTUC0+X2N1cF9jb3N0KTsKKwkgICAgKHZvaWQpIHByaW50ZigiaG9tZSBjb3N0OiAlZFxuIiwgU1AtPl9ob21lX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJsbCBjb3N0OiAlZFxuIiwgU1AtPl9sbF9jb3N0KTsKKyNpZiBVU0VfSEFSRF9UQUJTCisJICAgICh2b2lkKSBwcmludGYoImh0IGNvc3Q6ICVkXG4iLCBTUC0+X2h0X2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjYnQgY29zdDogJWRcbiIsIFNQLT5fY2J0X2Nvc3QpOworI2VuZGlmIC8qIFVTRV9IQVJEX1RBQlMgKi8KKwkgICAgKHZvaWQpIHByaW50ZigiY3ViMSBjb3N0OiAlZFxuIiwgU1AtPl9jdWIxX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdWYxIGNvc3Q6ICVkXG4iLCBTUC0+X2N1ZjFfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImN1ZDEgY29zdDogJWRcbiIsIFNQLT5fY3VkMV9jb3N0KTsKKwkgICAgKHZvaWQpIHByaW50ZigiY3V1MSBjb3N0OiAlZFxuIiwgU1AtPl9jdXUxX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdWIgY29zdDogJWRcbiIsIFNQLT5fY3ViX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdWYgY29zdDogJWRcbiIsIFNQLT5fY3VmX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdWQgY29zdDogJWRcbiIsIFNQLT5fY3VkX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdXUgY29zdDogJWRcbiIsIFNQLT5fY3V1X2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJocGEgY29zdDogJWRcbiIsIFNQLT5faHBhX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJ2cGEgY29zdDogJWRcbiIsIFNQLT5fdnBhX2Nvc3QpOworCX0gZWxzZSBpZiAoYnVmWzBdID09ICd4JyB8fCBidWZbMF0gPT0gJ3EnKQorCSAgICBicmVhazsKKwllbHNlCisJICAgICh2b2lkKSBwdXRzKCJJbnZhbGlkIGNvbW1hbmQuIik7CisgICAgfQorCisgICAgKHZvaWQpIGZwdXRzKCJybWN1cDoiLCBzdGRvdXQpOworICAgIF9uY19tdmN1cl93cmFwKCk7CisgICAgcHV0Y2hhcignXG4nKTsKKworICAgIHJldHVybiAoMCk7Cit9CisKKyNlbmRpZiAvKiBNQUlOICovCisKKy8qIGxpYl9tdmN1ci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90dHkvbGliX3RzdHAuYyBiL25jdXJzZXMvdHR5L2xpYl90c3RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjODQxMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvdHR5L2xpYl90c3RwLmMKQEAgLTAsMCArMSwzODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk1LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl90c3RwLmMKKyoqCisqKglUaGUgcm91dGluZSBfbmNfc2lnbmFsX2hhbmRsZXIoKS4KKyoqCisqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxTaWdBY3Rpb24uaD4KKworI2lmIFNWUjRfQUNUSU9OICYmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogbGliX3RzdHAuYyx2IDEuMzcgMjAwOC8wNS8wMyAxNjoyNDo1NiB0b20gRXhwICQiKQorCisjaWYgZGVmaW5lZChTSUdUU1RQKSAmJiAoSEFWRV9TSUdBQ1RJT04gfHwgSEFWRV9TSUdWRUMpCisjZGVmaW5lIFVTRV9TSUdUU1RQIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9TSUdUU1RQIDAKKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NpZ25hbF9uYW1lKGludCBzaWcpCit7CisgICAgc3dpdGNoIChzaWcpIHsKKyAgICBjYXNlIFNJR0FMUk06CisJcmV0dXJuICJTSUdBTFJNIjsKKyNpZmRlZiBTSUdDT05UCisgICAgY2FzZSBTSUdDT05UOgorCXJldHVybiAiU0lHQ09OVCI7CisjZW5kaWYKKyAgICBjYXNlIFNJR0lOVDoKKwlyZXR1cm4gIlNJR0lOVCI7CisgICAgY2FzZSBTSUdRVUlUOgorCXJldHVybiAiU0lHUVVJVCI7CisgICAgY2FzZSBTSUdURVJNOgorCXJldHVybiAiU0lHVEVSTSI7CisjaWZkZWYgU0lHVFNUUAorICAgIGNhc2UgU0lHVFNUUDoKKwlyZXR1cm4gIlNJR1RTVFAiOworI2VuZGlmCisjaWZkZWYgU0lHVFRPVQorICAgIGNhc2UgU0lHVFRPVToKKwlyZXR1cm4gIlNJR1RUT1UiOworI2VuZGlmCisjaWZkZWYgU0lHV0lOQ0gKKyAgICBjYXNlIFNJR1dJTkNIOgorCXJldHVybiAiU0lHV0lOQ0giOworI2VuZGlmCisgICAgZGVmYXVsdDoKKwlyZXR1cm4gInVua25vd24gc2lnbmFsIjsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBmcmFnaWxlISAgSXRzIHByb2JsZW0gaXMgdGhhdCBkaWZmZXJlbnQgT1NzCisgKiBoYW5kbGUgcmVzdGFydCBvZiBzeXN0ZW0gY2FsbHMgaW50ZXJydXB0ZWQgYnkgc2lnbmFscyBkaWZmZXJlbnRseS4KKyAqIFRoZSBuY3Vyc2VzIGNvZGUgbmVlZHMgc2lnbmFsLWNhbGwgcmVzdGFydCB0byBoYXBwZW4gLS0gb3RoZXJ3aXNlLAorICogaW50ZXJydXB0ZWQgd2dldGNoKCkgY2FsbHMgd2lsbCByZXR1cm4gRkFJTCwgcHJvYmFibHkgbWFraW5nIHRoZQorICogYXBwbGljYXRpb24gdGhpbmsgdGhlIGlucHV0IHN0cmVhbSBoYXMgZW5kZWQgYW5kIGl0IHNob3VsZAorICogdGVybWluYXRlLiAgSW4gcGFydGljdWxhciwgeW91IGtub3cgeW91IGhhdmUgdGhpcyBwcm9ibGVtIGlmLCB3aGVuCisgKiB5b3Ugc3VzcGVuZCBhbiBuY3Vyc2VzLXVzaW5nIGx5bnggd2l0aCBeWiBhbmQgcmVzdW1lLCBpdCBkaWVzCisgKiBpbW1lZGlhdGVseS4KKyAqCisgKiBEZWZhdWx0IGJlaGF2aW9yIG9mIFBPU0lYIHNpZ2FjdGlvbigyKSBpcyBub3QgdG8gcmVzdGFydAorICogaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxzLCBidXQgTGludXgncyBzaWdhY3Rpb24gZG9lcyBpdCBhbnl3YXkgKGF0CisgKiBsZWFzdCwgb24gYW5kIGFmdGVyIHRoZSAxLjEuNDcgSSAoZXNyKSB1c2UpLiAgVGh1cyB0aGlzIGNvZGUgd29ya3MKKyAqIE9LIHVuZGVyIExpbnV4LiAgVGhlIDQuNEJTRCBzaWdhY3Rpb24oMikgc3VwcG9ydHMgYSAobm9uLXBvcnRhYmxlKQorICogU0FfUkVTVEFSVCBmbGFnIHRoYXQgZm9yY2VzIHRoZSByaWdodCBiZWhhdmlvci4gIFRodXMsIHRoaXMgY29kZQorICogc2hvdWxkIHdvcmsgT0sgdW5kZXIgQlNEL09TLCBOZXRCU0QsIGFuZCBGcmVlQlNEIChsZXQgdXMga25vdyBpZiBpdAorICogZG9lcyBub3QpLgorICoKKyAqIFN0b2NrIFN5c3RlbSBWcyAoYW5kIGFueXRoaW5nIGVsc2UgdXNpbmcgYSBzdHJpY3QtUE9TSVgKKyAqIHNpZ2FjdGlvbigyKSB3aXRob3V0IFNBX1JFU1RBUlQpIG1heSBoYXZlIGEgcHJvYmxlbS4gIFBvc3NpYmxlCisgKiBzb2x1dGlvbnM6CisgKgorICogICAgc2lndmVjICAgICAgcmVzdGFydHMgYnkgZGVmYXVsdCAoU1ZfSU5URVJSVVBUIGZsYWcgdG8gbm90IHJlc3RhcnQpCisgKiAgICBzaWduYWwgICAgICByZXN0YXJ0cyBieSBkZWZhdWx0IGluIFNWcjQgKGFzc3VtaW5nIHlvdSBsaW5rIHdpdGggLWx1Y2IpCisgKiAgICAgICAgICAgICAgICBhbmQgQlNELCBidXQgbm90IFNWcjMuCisgKiAgICBzaWdzZXQgICAgICByZXN0YXJ0cywgYnV0IGlzIG9ubHkgYXZhaWxhYmxlIHVuZGVyIFNWcjQvU29sYXJpcy4KKyAqCisgKiBUaGUgc2lnbmFsKDMpIGNhbGwgaXMgbWFuZGF0ZWQgYnkgdGhlIEFOU0kgc3RhbmRhcmQsIGFuZCBpdHMKKyAqIGludGVyYWN0aW9uIHdpdGggc2lnYWN0aW9uKDIpIGlzIGRlc2NyaWJlZCBpbiB0aGUgUE9TSVggc3RhbmRhcmQKKyAqICgzLjMuNC4yLCBwYWdlIDcyLGxpbmUgOTM0KS4gIEFjY29yZGluZyB0byBzZWN0aW9uIDguMSwgcGFnZSAxOTEsCisgKiBob3dldmVyLCBzaWduYWwoMykgaXRzZWxmIGlzIG5vdCByZXF1aXJlZCBieSBQT1NJWC4xLiAgQW5kIFBPU0lYIGlzCisgKiBzaWxlbnQgb24gd2hldGhlciBpdCBpcyByZXF1aXJlZCB0byByZXN0YXJ0IHNpZ25hbHMuCisgKgorICogU28uICBUaGUgcHJlc2VudCBzaXR1YXRpb24gaXMsIHdlIHVzZSBzaWdhY3Rpb24oMikgd2l0aCBubworICogZ3VhcmFudGVlIG9mIHJlc3RhcnQgYW55d2hlcmUgYnV0IG9uIExpbnV4IGFuZCBCU0QuICBXZSBjb3VsZAorICogc3dpdGNoIHRvIHNpZ25hbCgzKSBhbmQgY29sbGFyIExpbnV4LCBCU0QsIGFuZCBTVnI0LiAgQW55IHdheQorICogd2Ugc2xpY2UgaXQsIFN5c3RlbSBWIFVOSVhlcyBvbGRlciB0aGFuIFNWcjQgd2lsbCBwcm9iYWJseSBsb3NlCisgKiAodGhpcyBtYXkgaW5jbHVkZSBYRU5JWCkuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIHByb2JhYmx5IGJlIGNoYW5nZWQgdG8gdXNlIHNpZ25hbCgzKSBpbgorICogdGhlIGZ1dHVyZS4gIElmIG5vdGhpbmcgZWxzZSwgaXQncyBzaW1wbGVyLi4uCisgKi8KKworI2lmIFVTRV9TSUdUU1RQCitzdGF0aWMgdm9pZAordHN0cChpbnQgZHVtbXkgR0NDX1VOVVNFRCkKK3sKKyAgICBzaWdzZXRfdCBtYXNrLCBvbWFzazsKKyAgICBzaWdhY3Rpb25fdCBhY3QsIG9hY3Q7CisKKyNpZmRlZiBTSUdUVE9VCisgICAgaW50IHNpZ3R0b3VfYmxvY2tlZDsKKyNlbmRpZgorCisgICAgVCgoInRzdHAoKSBjYWxsZWQiKSk7CisKKyAgICAvKgorICAgICAqIFRoZSB1c2VyIG1heSBoYXZlIGNoYW5nZWQgdGhlIHByb2dfbW9kZSB0dHkgYml0cywgc28gc2F2ZSB0aGVtLgorICAgICAqCisgICAgICogQnV0IGZpcnN0IHRyeSB0byBkZXRlY3Qgd2hldGhlciB3ZSBzdGlsbCBhcmUgaW4gdGhlIGZvcmVncm91bmQKKyAgICAgKiBwcm9jZXNzIGdyb3VwIC0gaWYgbm90LCBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBtYXkgYWxyZWFkeSBoYXZlCisgICAgICogdGFrZW4gb3duZXJzaGlwIG9mIHRoZSB0dHkgYW5kIG1vZGlmaWVkIHRoZSBzZXR0aW5ncyB3aGVuIG91cgorICAgICAqIHBhcmVudCB3YXMgc3RvcHBlZCBiZWZvcmUgdXMsIGFuZCB3ZSB3b3VsZCBsaWtlbHkgcGljayB1cCB0aGUKKyAgICAgKiBzZXR0aW5ncyBhbHJlYWR5IG1vZGlmaWVkIGJ5IHRoZSBzaGVsbC4KKyAgICAgKi8KKyAgICBpZiAoU1AgIT0gMCAmJiAhU1AtPl9lbmR3aW4pCS8qIGRvbid0IGRvIHRoaXMgaWYgd2UncmUgbm90IGluIGN1cnNlcyAqLworI2lmIEhBVkVfVENHRVRQR1JQCisJaWYgKHRjZ2V0cGdycChTVERJTl9GSUxFTk8pID09IGdldHBncnAoKSkKKyNlbmRpZgorCSAgICBkZWZfcHJvZ19tb2RlKCk7CisKKyAgICAvKgorICAgICAqIEJsb2NrIHdpbmRvdyBjaGFuZ2UgYW5kIHRpbWVyIHNpZ25hbHMuICBUaGUgbGF0dGVyCisgICAgICogaXMgYmVjYXVzZSBhcHBsaWNhdGlvbnMgdXNlIHRpbWVycyB0byBkZWNpZGUgd2hlbgorICAgICAqIHRvIHJlcGFpbnQgdGhlIHNjcmVlbi4KKyAgICAgKi8KKyAgICAodm9pZCkgc2lnZW1wdHlzZXQoJm1hc2spOworICAgICh2b2lkKSBzaWdhZGRzZXQoJm1hc2ssIFNJR0FMUk0pOworI2lmIFVTRV9TSUdXSU5DSAorICAgICh2b2lkKSBzaWdhZGRzZXQoJm1hc2ssIFNJR1dJTkNIKTsKKyNlbmRpZgorICAgICh2b2lkKSBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZtYXNrLCAmb21hc2spOworCisjaWZkZWYgU0lHVFRPVQorICAgIHNpZ3R0b3VfYmxvY2tlZCA9IHNpZ2lzbWVtYmVyKCZvbWFzaywgU0lHVFRPVSk7CisgICAgaWYgKCFzaWd0dG91X2Jsb2NrZWQpIHsKKwkodm9pZCkgc2lnZW1wdHlzZXQoJm1hc2spOworCSh2b2lkKSBzaWdhZGRzZXQoJm1hc2ssIFNJR1RUT1UpOworCSh2b2lkKSBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZtYXNrLCBOVUxMKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogRW5kIHdpbmRvdyBtb2RlLCB3aGljaCBhbHNvIHJlc2V0cyB0aGUgdGVybWluYWwgc3RhdGUgdG8gdGhlCisgICAgICogb3JpZ2luYWwgKHByZS1jdXJzZXMpIG1vZGVzLgorICAgICAqLworICAgIGVuZHdpbigpOworCisgICAgLyogVW5ibG9jayBTSUdUU1RQLiAqLworICAgICh2b2lkKSBzaWdlbXB0eXNldCgmbWFzayk7CisgICAgKHZvaWQpIHNpZ2FkZHNldCgmbWFzaywgU0lHVFNUUCk7CisjaWZkZWYgU0lHVFRPVQorICAgIGlmICghc2lndHRvdV9ibG9ja2VkKSB7CisJLyogVW5ibG9jayB0aGlzIHRvbyBpZiBpdCB3YXNuJ3QgYmxvY2tlZCBvbiBlbnRyeSAqLworCSh2b2lkKSBzaWdhZGRzZXQoJm1hc2ssIFNJR1RUT1UpOworICAgIH0KKyNlbmRpZgorICAgICh2b2lkKSBzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIE5VTEwpOworCisgICAgLyogTm93IHdlIHdhbnQgdG8gcmVzZW5kIFNJR1NUUCB0byB0aGlzIHByb2Nlc3MgYW5kIHN1c3BlbmQgaXQgKi8KKyAgICBhY3Quc2FfaGFuZGxlciA9IFNJR19ERkw7CisgICAgc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKyAgICBhY3Quc2FfZmxhZ3MgPSAwOworI2lmZGVmIFNBX1JFU1RBUlQKKyAgICBhY3Quc2FfZmxhZ3MgfD0gU0FfUkVTVEFSVDsKKyNlbmRpZiAvKiBTQV9SRVNUQVJUICovCisgICAgc2lnYWN0aW9uKFNJR1RTVFAsICZhY3QsICZvYWN0KTsKKyAgICBraWxsKGdldHBpZCgpLCBTSUdUU1RQKTsKKworICAgIC8qIFByb2Nlc3MgZ2V0cyBzdXNwZW5kZWQuLi50aW1lIHBhc3Nlcy4uLnByb2Nlc3MgcmVzdW1lcyAqLworCisgICAgVCgoIlNJR0NPTlQgcmVjZWl2ZWQiKSk7CisgICAgc2lnYWN0aW9uKFNJR1RTVFAsICZvYWN0LCBOVUxMKTsKKyAgICBmbHVzaGlucCgpOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgdXNlciBtb2RpZmllZCB0aGUgdHR5IHN0YXRlIHdoaWxlIHN1c3BlbmRlZCwgaGUgd2FudHMKKyAgICAgKiB0aG9zZSBjaGFuZ2VzIHRvIHN0aWNrLiAgU28gc2F2ZSB0aGUgbmV3ICJkZWZhdWx0IiB0ZXJtaW5hbCBzdGF0ZS4KKyAgICAgKi8KKyAgICBkZWZfc2hlbGxfbW9kZSgpOworCisgICAgLyoKKyAgICAgKiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGRvdXBkYXRlKCkgd2lsbCByZXN0b3JlIHRoZQorICAgICAqIHByb2dyYW0tbW9kZSB0dHkgc3RhdGUsIGFuZCBpc3N1ZSBlbnRlcl9jYV9tb2RlIGlmIG5lZWQgYmUuCisgICAgICovCisgICAgZG91cGRhdGUoKTsKKworICAgIC8qIFJlc2V0IHRoZSBzaWduYWxzLiAqLworICAgICh2b2lkKSBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9tYXNrLCBOVUxMKTsKK30KKyNlbmRpZiAvKiBVU0VfU0lHVFNUUCAqLworCitzdGF0aWMgdm9pZAorY2xlYW51cChpbnQgc2lnKQoreworICAgIC8qCisgICAgICogQWN0dWFsbHksIGRvaW5nIGFueSBzb3J0IG9mIEkvTyBmcm9tIHdpdGhpbiBhbiBzaWduYWwgaGFuZGxlciBpcworICAgICAqICJ1bnNhZmUiLiAgQnV0IHdlJ2xsIF90cnlfIHRvIGNsZWFuIHVwIHRoZSBzY3JlZW4gYW5kIHRlcm1pbmFsCisgICAgICogc2V0dGluZ3Mgb24gdGhlIHdheSBvdXQuCisgICAgICovCisgICAgaWYgKCFfbmNfZ2xvYmFscy5jbGVhbnVwX25lc3RlZCsrCisJJiYgKHNpZyA9PSBTSUdJTlQKKwkgICAgfHwgc2lnID09IFNJR1FVSVQpKSB7CisjaWYgSEFWRV9TSUdBQ1RJT04gfHwgSEFWRV9TSUdWRUMKKwlzaWdhY3Rpb25fdCBhY3Q7CisJc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKwlhY3Quc2FfZmxhZ3MgPSAwOworCWFjdC5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKwlpZiAoc2lnYWN0aW9uKHNpZywgJmFjdCwgTlVMTCkgPT0gMCkKKyNlbHNlCisJaWYgKHNpZ25hbChzaWcsIFNJR19JR04pICE9IFNJR19FUlIpCisjZW5kaWYKKwl7CisJICAgIFNDUkVFTiAqc2NhbjsKKwkgICAgZm9yIChlYWNoX3NjcmVlbihzY2FuKSkgeworCQlpZiAoc2Nhbi0+X29mcCAhPSAwCisJCSAgICAmJiBpc2F0dHkoZmlsZW5vKHNjYW4tPl9vZnApKSkgeworCQkgICAgc2Nhbi0+X2NsZWFudXAgPSBUUlVFOworCQkgICAgc2Nhbi0+X291dGNoID0gX25jX291dGNoOworCQl9CisJCXNldF90ZXJtKHNjYW4pOworCQllbmR3aW4oKTsKKwkJaWYgKFNQKQorCQkgICAgU1AtPl9lbmR3aW4gPSBGQUxTRTsJLyogaW4gY2FzZSB3ZSBoYXZlIGFuIGF0ZXhpdCEgKi8KKwkgICAgfQorCX0KKyAgICB9CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisjaWYgVVNFX1NJR1dJTkNICitzdGF0aWMgdm9pZAorc2lnd2luY2goaW50IHNpZyBHQ0NfVU5VU0VEKQoreworICAgIF9uY19nbG9iYWxzLmhhdmVfc2lnd2luY2ggPSAxOworfQorI2VuZGlmIC8qIFVTRV9TSUdXSU5DSCAqLworCisvKgorICogSWYgdGhlIGdpdmVuIHNpZ25hbCBpcyBzdGlsbCBpbiBpdHMgZGVmYXVsdCBzdGF0ZSwgc2V0IGl0IHRvIHRoZSBnaXZlbgorICogaGFuZGxlci4KKyAqLworc3RhdGljIGludAorQ2F0Y2hJZkRlZmF1bHQoaW50IHNpZywgUkVUU0lHVFlQRSAoKmhhbmRsZXIpIChpbnQpKQoreworICAgIGludCByZXN1bHQ7CisjaWYgSEFWRV9TSUdBQ1RJT04gfHwgSEFWRV9TSUdWRUMKKyAgICBzaWdhY3Rpb25fdCBvbGRfYWN0OworICAgIHNpZ2FjdGlvbl90IG5ld19hY3Q7CisKKyAgICBtZW1zZXQoJm5ld19hY3QsIDAsIHNpemVvZihuZXdfYWN0KSk7CisgICAgc2lnZW1wdHlzZXQoJm5ld19hY3Quc2FfbWFzayk7CisjaWZkZWYgU0FfUkVTVEFSVAorI2lmZGVmIFNJR1dJTkNICisgICAgaWYgKHNpZyAhPSBTSUdXSU5DSCkKKyNlbmRpZgorCW5ld19hY3Quc2FfZmxhZ3MgfD0gU0FfUkVTVEFSVDsKKyNlbmRpZiAvKiBTQV9SRVNUQVJUICovCisgICAgbmV3X2FjdC5zYV9oYW5kbGVyID0gaGFuZGxlcjsKKworICAgIGlmIChzaWdhY3Rpb24oc2lnLCBOVUxMLCAmb2xkX2FjdCkgPT0gMAorCSYmIChvbGRfYWN0LnNhX2hhbmRsZXIgPT0gU0lHX0RGTAorCSAgICB8fCBvbGRfYWN0LnNhX2hhbmRsZXIgPT0gaGFuZGxlcgorI2lmIFVTRV9TSUdXSU5DSAorCSAgICB8fCAoc2lnID09IFNJR1dJTkNIICYmIG9sZF9hY3Quc2FfaGFuZGxlciA9PSBTSUdfSUdOKQorI2VuZGlmCisJKSkgeworCSh2b2lkKSBzaWdhY3Rpb24oc2lnLCAmbmV3X2FjdCwgTlVMTCk7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9IGVsc2UgeworCXJlc3VsdCA9IEZBTFNFOworICAgIH0KKyNlbHNlIC8qICFIQVZFX1NJR0FDVElPTiAqLworICAgIFJFVFNJR1RZUEUgKCpvaGFuZGxlcikgKGludCk7CisKKyAgICBvaGFuZGxlciA9IHNpZ25hbChzaWcsIFNJR19JR04pOworICAgIGlmIChvaGFuZGxlciA9PSBTSUdfREZMCisJfHwgb2hhbmRsZXIgPT0gaGFuZGxlcgorI2lmIFVTRV9TSUdXSU5DSAorCXx8IChzaWcgPT0gU0lHV0lOQ0ggJiYgb2hhbmRsZXIgPT0gU0lHX0lHTikKKyNlbmRpZgorCSkgeworCXNpZ25hbChzaWcsIGhhbmRsZXIpOworCXJlc3VsdCA9IFRSVUU7CisgICAgfSBlbHNlIHsKKwlzaWduYWwoc2lnLCBvaGFuZGxlcik7CisJcmVzdWx0ID0gRkFMU0U7CisgICAgfQorI2VuZGlmCisgICAgVCgoIkNhdGNoSWZEZWZhdWx0IC0gd2lsbCAlc2NhdGNoICVzIiwKKyAgICAgICByZXN1bHQgPyAiIiA6ICJub3QgIiwgc2lnbmFsX25hbWUoc2lnKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGludm9rZWQgb25jZSBhdCB0aGUgYmVnaW5uaW5nIChlLmcuLCBmcm9tICdpbml0c2NyKCknKSwgdG8KKyAqIGluaXRpYWxpemUgdGhlIHNpZ25hbCBjYXRjaGVycywgYW5kIHRoZXJlYWZ0ZXIgd2hlbiBzcGF3bmluZyBhIHNoZWxsIChhbmQKKyAqIHJldHVybmluZykgdG8gZGlzYWJsZS9lbmFibGUgdGhlIFNJR1RTVFAgKGkuZS4sIF5aKSBjYXRjaGVyLgorICoKKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBoYXMgYWxyZWFkeSBzZXQgb25lIG9mIHRoZSBzaWduYWxzLCB3ZSdsbCBub3QgbW9kaWZ5IGl0CisgKiAoZHVyaW5nIGluaXRpYWxpemF0aW9uKS4KKyAqCisgKiBUaGUgWFNJIGRvY3VtZW50IGltcGxpZXMgdGhhdCB3ZSBzaG91bGRuJ3Qga2VlcCB0aGUgU0lHVFNUUCBoYW5kbGVyIGlmCisgKiB0aGUgY2FsbGVyIGxhdGVyIGNoYW5nZXMgaXRzIG1pbmQsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSBjb3JyZWN0LgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NpZ25hbF9oYW5kbGVyKGJvb2wgZW5hYmxlKQoreworICAgIFQoKFRfQ0FMTEVEKCJfbmNfc2lnbmFsX2hhbmRsZXIoJWQpIiksIGVuYWJsZSkpOworI2lmIFVTRV9TSUdUU1RQCQkJLyogWGVuaXggMi54IGRvZXNuJ3QgaGF2ZSBTSUdUU1RQLCBmb3IgZXhhbXBsZSAqLworICAgIHsKKwlzdGF0aWMgYm9vbCBpZ25vcmVfdHN0cCA9IEZBTFNFOworCisJaWYgKCFpZ25vcmVfdHN0cCkgeworCSAgICBzdGF0aWMgc2lnYWN0aW9uX3QgbmV3X3NpZ2FjdGlvbiwgb2xkX3NpZ2FjdGlvbjsKKworCSAgICBpZiAoIWVuYWJsZSkgeworCQluZXdfc2lnYWN0aW9uLnNhX2hhbmRsZXIgPSBTSUdfSUdOOworCQlzaWdhY3Rpb24oU0lHVFNUUCwgJm5ld19zaWdhY3Rpb24sICZvbGRfc2lnYWN0aW9uKTsKKwkgICAgfSBlbHNlIGlmIChuZXdfc2lnYWN0aW9uLnNhX2hhbmRsZXIgIT0gU0lHX0RGTCkgeworCQlzaWdhY3Rpb24oU0lHVFNUUCwgJm9sZF9zaWdhY3Rpb24sIE5VTEwpOworCSAgICB9IGVsc2UgaWYgKHNpZ2FjdGlvbihTSUdUU1RQLCBOVUxMLCAmb2xkX3NpZ2FjdGlvbikgPT0gMAorCQkgICAgICAgJiYgKG9sZF9zaWdhY3Rpb24uc2FfaGFuZGxlciA9PSBTSUdfREZMKSkgeworCQlzaWdlbXB0eXNldCgmbmV3X3NpZ2FjdGlvbi5zYV9tYXNrKTsKKyNpZmRlZiBTQV9SRVNUQVJUCisJCW5ld19zaWdhY3Rpb24uc2FfZmxhZ3MgfD0gU0FfUkVTVEFSVDsKKyNlbmRpZiAvKiBTQV9SRVNUQVJUICovCisJCW5ld19zaWdhY3Rpb24uc2FfaGFuZGxlciA9IHRzdHA7CisJCSh2b2lkKSBzaWdhY3Rpb24oU0lHVFNUUCwgJm5ld19zaWdhY3Rpb24sIE5VTEwpOworCSAgICB9IGVsc2UgeworCQlpZ25vcmVfdHN0cCA9IFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qICFVU0VfU0lHVFNUUCAqLworCisgICAgaWYgKCFfbmNfZ2xvYmFscy5pbml0X3NpZ25hbHMpIHsKKwlpZiAoZW5hYmxlKSB7CisJICAgIENhdGNoSWZEZWZhdWx0KFNJR0lOVCwgY2xlYW51cCk7CisJICAgIENhdGNoSWZEZWZhdWx0KFNJR1RFUk0sIGNsZWFudXApOworI2lmIFVTRV9TSUdXSU5DSAorCSAgICBDYXRjaElmRGVmYXVsdChTSUdXSU5DSCwgc2lnd2luY2gpOworI2VuZGlmCisJICAgIF9uY19nbG9iYWxzLmluaXRfc2lnbmFscyA9IFRSVUU7CisJfQorICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy90dHkvbGliX3R3YWl0LmMgYi9uY3Vyc2VzL3R0eS9saWJfdHdhaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQxMmVkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90dHkvbGliX3R3YWl0LmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl90d2FpdC5jCisqKgorKioJVGhlIHJvdXRpbmUgX25jX3RpbWVkX3dhaXQoKS4KKyoqCisqKgkoVGhpcyBmaWxlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRXJpYyBSYXltb25kOyBob3dldmVyIGV4Y2VwdCBmb3IKKyoqCWNvbW1lbnRzLCBub25lIG9mIHRoZSBvcmlnaW5hbCBjb2RlIHJlbWFpbnMgLSBULkRpY2tleSkuCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2lmIGRlZmluZWQgX19IQUlLVV9fICYmIGRlZmluZWQgX19CRU9TX18KKyN1bmRlZiBfX0JFT1NfXworI2VuZGlmCisKKyNpZmRlZiBfX0JFT1NfXworI3VuZGVmIGZhbHNlCisjdW5kZWYgdHJ1ZQorI2luY2x1ZGUgPE9TLmg+CisjZW5kaWYKKworI2lmIFVTRV9GVU5DX1BPTEwKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbmRpZgorI2VsaWYgSEFWRV9TRUxFQ1QKKyMgaWYgSEFWRV9TWVNfVElNRV9IICYmIEhBVkVfU1lTX1RJTUVfU0VMRUNUCisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19TRUxFQ1RfSAorIyAgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyN1bmRlZiBDVVIKKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90d2FpdC5jLHYgMS41OSAyMDA4LzA4LzMwIDIwOjA4OjE5IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBsb25nCitfbmNfZ2V0dGltZShUaW1lVHlwZSAqIHQwLCBib29sIGZpcnN0KQoreworICAgIGxvbmcgcmVzOworCisjaWYgUFJFQ0lTRV9HRVRUSU1FCisgICAgVGltZVR5cGUgdDE7CisgICAgZ2V0dGltZW9mZGF5KCZ0MSwgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBpZiAoZmlyc3QpIHsKKwkqdDAgPSB0MTsKKwlyZXMgPSAwOworICAgIH0gZWxzZSB7CisJLyogLnR2X3NlYyBhbmQgLnR2X3VzZWMgYXJlIHVuc2lnbmVkLCBiZSBjYXJlZnVsIHdoZW4gc3VidHJhY3RpbmcgKi8KKwlpZiAodDAtPnR2X3VzZWMgPiB0MS50dl91c2VjKSB7CisJICAgIHQxLnR2X3VzZWMgKz0gMTAwMDAwMDsJLyogQ29udmVydCAxcyBpbiAxZTYgbWljcm9zZWNzICovCisJICAgIHQxLnR2X3NlYy0tOworCX0KKwlyZXMgPSAodDEudHZfc2VjIC0gdDAtPnR2X3NlYykgKiAxMDAwCisJICAgICsgKHQxLnR2X3VzZWMgLSB0MC0+dHZfdXNlYykgLyAxMDAwOworICAgIH0KKyNlbHNlCisgICAgdGltZV90IHQxID0gdGltZSgodGltZV90ICopIDApOworICAgIGlmIChmaXJzdCkgeworCSp0MCA9IHQxOworICAgIH0KKyAgICByZXMgPSAodDEgLSAqdDApICogMTAwMDsKKyNlbmRpZgorICAgIFRSKFRSQUNFX0lFVkVOVCwgKCIlcyB0aW1lOiAlbGQgbXNlYyIsIGZpcnN0ID8gImdldCIgOiAiZWxhcHNlZCIsIHJlcykpOworICAgIHJldHVybiByZXM7Cit9CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19ldmVudGxpc3RfdGltZW91dChfbmNfZXZlbnRsaXN0ICogZXZsKQoreworICAgIGludCBldmVudF9kZWxheSA9IC0xOworICAgIGludCBuOworCisgICAgaWYgKGV2bCAhPSAwKSB7CisKKwlmb3IgKG4gPSAwOyBuIDwgZXZsLT5jb3VudDsgKytuKSB7CisJICAgIF9uY19ldmVudCAqZXYgPSBldmwtPmV2ZW50c1tuXTsKKworCSAgICBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX1RJTUVPVVRfTVNFQykgeworCQlldmVudF9kZWxheSA9IGV2LT5kYXRhLnRpbWVvdXRfbXNlYzsKKwkJaWYgKGV2ZW50X2RlbGF5IDwgMCkKKwkJICAgIGV2ZW50X2RlbGF5ID0gSU5UX01BWDsJLyogRklYTUUgSXMgdGhpcyBkZWZpbmVkPyAqLworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gZXZlbnRfZGVsYXk7Cit9CisjZW5kaWYgLyogTkNVUlNFU19XR0VUQ0hfRVZFTlRTICovCisKKy8qCisgKiBXYWl0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHJldHVybmluZyBub256ZXJvIGlmIHRoZSB0aW1lcgorICogZGlkbid0IGV4cGlyZSBiZWZvcmUgdGhlcmUgaXMgYWN0aXZpdHkgb24gdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3JzLgorICogVGhlIGZpbGUtZGVzY3JpcHRvcnMgYXJlIHNwZWNpZmllZCBieSB0aGUgbW9kZToKKyAqCTAgLSBub25lIChhYnNvbHV0ZSB0aW1lKQorICoJMSAtIG5jdXJzZXMnIG5vcm1hbCBpbnB1dC1kZXNjcmlwdG9yCisgKgkyIC0gbW91c2UgZGVzY3JpcHRvciwgaWYgYW55CisgKgkzIC0gZWl0aGVyIGlucHV0IG9yIG1vdXNlLgorICoKKyAqIEV4cGVyaW1lbnRhbDogIGlmIE5DVVJTRVNfV0dFVENIX0VWRU5UUyBpcyBkZWZpbmVkLCAobW9kZSAmIDQpIGRldGVybWluZXMKKyAqIHdoZXRoZXIgdG8gcGF5IGF0dGVudGlvbiB0byBldmwgYXJndW1lbnQuICBJZiBzZXQsIHRoZSBzbWFsbGVzdCBvZgorICogbWlsbGlzZWNvbmQgYW5kIG9mIHRpbWVvdXQgb2YgZXZsIGlzIHRha2VuLgorICoKKyAqIFdlIHJldHVybiBhIG1hc2sgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbW9kZSAoZS5nLiwgMiBmb3IgbW91c2UgYWN0aXZpdHkpLgorICoKKyAqIElmIHRoZSBtaWxsaXNlY29uZHMgZ2l2ZW4gYXJlIC0xLCB0aGUgd2FpdCBibG9ja3MgdW50aWwgYWN0aXZpdHkgb24gdGhlCisgKiBkZXNjcmlwdG9ycy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3RpbWVkX3dhaXQoU0NSRUVOICpzcCwKKwkgICAgICAgaW50IG1vZGUsCisJICAgICAgIGludCBtaWxsaXNlY29uZHMsCisJICAgICAgIGludCAqdGltZWxlZnQKKwkgICAgICAgRVZFTlRMSVNUXzJuZChfbmNfZXZlbnRsaXN0ICogZXZsKSkKK3sKKyAgICBpbnQgZmQ7CisgICAgaW50IGNvdW50OworICAgIGludCByZXN1bHQgPSAwOworICAgIFRpbWVUeXBlIHQwOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaW50IHRpbWVvdXRfaXNfZXZlbnQgPSAwOworICAgIGludCBuOworI2VuZGlmCisKKyNpZiBVU0VfRlVOQ19QT0xMCisjZGVmaW5lIE1JTl9GRFMgMgorICAgIHN0cnVjdCBwb2xsZmQgZmRfbGlzdFtNSU5fRkRTXTsKKyAgICBzdHJ1Y3QgcG9sbGZkICpmZHMgPSBmZF9saXN0OworI2VsaWYgZGVmaW5lZChfX0JFT1NfXykKKyNlbGlmIEhBVkVfU0VMRUNUCisgICAgZmRfc2V0IHNldDsKKyNlbmRpZgorCisgICAgbG9uZyBzdGFydHRpbWUsIHJldHVybnRpbWU7CisKKyAgICBUUihUUkFDRV9JRVZFTlQsICgic3RhcnQgdHdhaXQ6ICVkIG1pbGxpc2Vjb25kcywgbW9kZTogJWQiLAorCQkgICAgICBtaWxsaXNlY29uZHMsIG1vZGUpKTsKKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmIChtb2RlICYgNCkgeworCWludCBldmVudF9kZWxheSA9IF9uY19ldmVudGxpc3RfdGltZW91dChldmwpOworCisJaWYgKGV2ZW50X2RlbGF5ID49IDAKKwkgICAgJiYgKG1pbGxpc2Vjb25kcyA+PSBldmVudF9kZWxheSB8fCBtaWxsaXNlY29uZHMgPCAwKSkgeworCSAgICBtaWxsaXNlY29uZHMgPSBldmVudF9kZWxheTsKKwkgICAgdGltZW91dF9pc19ldmVudCA9IDE7CisJfQorICAgIH0KKyNlbmRpZgorCisjaWYgUFJFQ0lTRV9HRVRUSU1FICYmIEhBVkVfTkFOT1NMRUVQCisgIHJldHJ5OgorI2VuZGlmCisgICAgc3RhcnR0aW1lID0gX25jX2dldHRpbWUoJnQwLCBUUlVFKTsKKworICAgIGNvdW50ID0gMDsKKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmICgobW9kZSAmIDQpICYmIGV2bCkKKwlldmwtPnJlc3VsdF9mbGFncyA9IDA7CisjZW5kaWYKKworI2lmIFVTRV9GVU5DX1BPTEwKKyAgICBtZW1zZXQoZmRfbGlzdCwgMCwgc2l6ZW9mKGZkX2xpc3QpKTsKKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmICgobW9kZSAmIDQpICYmIGV2bCkKKwlmZHMgPSB0eXBlTWFsbG9jKHN0cnVjdCBwb2xsZmQsIE1JTl9GRFMgKyBldmwtPmNvdW50KTsKKyNlbmRpZgorCisgICAgaWYgKG1vZGUgJiAxKSB7CisJZmRzW2NvdW50XS5mZCA9IHNwLT5faWZkOworCWZkc1tjb3VudF0uZXZlbnRzID0gUE9MTElOOworCWNvdW50Kys7CisgICAgfQorICAgIGlmICgobW9kZSAmIDIpCisJJiYgKGZkID0gc3AtPl9tb3VzZV9mZCkgPj0gMCkgeworCWZkc1tjb3VudF0uZmQgPSBmZDsKKwlmZHNbY291bnRdLmV2ZW50cyA9IFBPTExJTjsKKwljb3VudCsrOworICAgIH0KKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpZiAoKG1vZGUgJiA0KSAmJiBldmwpIHsKKwlmb3IgKG4gPSAwOyBuIDwgZXZsLT5jb3VudDsgKytuKSB7CisJICAgIF9uY19ldmVudCAqZXYgPSBldmwtPmV2ZW50c1tuXTsKKworCSAgICBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX0ZJTEUKKwkJJiYgKGV2LT5kYXRhLmZldi5mbGFncyAmIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFKSkgeworCQlmZHNbY291bnRdLmZkID0gZXYtPmRhdGEuZmV2LmZkOworCQlmZHNbY291bnRdLmV2ZW50cyA9IFBPTExJTjsKKwkJY291bnQrKzsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIHJlc3VsdCA9IHBvbGwoZmRzLCAodW5zaWduZWQpIGNvdW50LCBtaWxsaXNlY29uZHMpOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKChtb2RlICYgNCkgJiYgZXZsKSB7CisJaW50IGM7CisKKwlpZiAoIXJlc3VsdCkKKwkgICAgY291bnQgPSAwOworCisJZm9yIChuID0gMDsgbiA8IGV2bC0+Y291bnQ7ICsrbikgeworCSAgICBfbmNfZXZlbnQgKmV2ID0gZXZsLT5ldmVudHNbbl07CisKKwkgICAgaWYgKGV2LT50eXBlID09IF9OQ19FVkVOVF9GSUxFCisJCSYmIChldi0+ZGF0YS5mZXYuZmxhZ3MgJiBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRSkpIHsKKwkJZXYtPmRhdGEuZmV2LnJlc3VsdCA9IDA7CisJCWZvciAoYyA9IDA7IGMgPCBjb3VudDsgYysrKQorCQkgICAgaWYgKGZkc1tjXS5mZCA9PSBldi0+ZGF0YS5mZXYuZmQKKwkJCSYmIGZkc1tjXS5yZXZlbnRzICYgUE9MTElOKSB7CisJCQlldi0+ZGF0YS5mZXYucmVzdWx0IHw9IF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFOworCQkJZXZsLT5yZXN1bHRfZmxhZ3MgfD0gX05DX0VWRU5UX0ZJTEVfUkVBREFCTEU7CisJCSAgICB9CisJICAgIH0gZWxzZSBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX1RJTUVPVVRfTVNFQworCQkgICAgICAgJiYgIXJlc3VsdCAmJiB0aW1lb3V0X2lzX2V2ZW50KSB7CisJCWV2bC0+cmVzdWx0X2ZsYWdzIHw9IF9OQ19FVkVOVF9USU1FT1VUX01TRUM7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGZkcyAhPSBmZF9saXN0KQorCWZyZWUoKGNoYXIgKikgZmRzKTsKKworI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisgICAgLyoKKyAgICAgKiBCZU9TJ3Mgc2VsZWN0KCkgaXMgZGVjbGFyZWQgaW4gc29ja2V0LmgsIHNvIHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMKKyAgICAgKiBub3Qgc2VlIGl0LiAgVGhhdCdzIGp1c3QgYXMgd2VsbCwgc2luY2UgdGhhdCBmdW5jdGlvbiB3b3JrcyBvbmx5IGZvcgorICAgICAqIHNvY2tldHMuICBUaGlzICh1c2luZyBzbm9vemUgYW5kIGlvY3RsKSB3YXMgZGlzdGlsbGVkIGZyb20gQmUncyBwYXRjaAorICAgICAqIGZvciBuY3Vyc2VzIHdoaWNoIHVzZXMgYSBzZXBhcmF0ZSB0aHJlYWQgdG8gc2ltdWxhdGUgc2VsZWN0KCkuCisgICAgICoKKyAgICAgKiBGSVhNRTogdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgaW9jdGwgYXJlbid0IHZlcnkgY2xlYXIgaWYgd2UgZ2V0CisgICAgICogaW50ZXJydXB0ZWQuCisgICAgICoKKyAgICAgKiBGSVhNRTogdGhpcyBhc3N1bWVzIG1vZGUmMSBpZiBtaWxsaXNlY29uZHMgPCAwIChzZWUgbGliX2dldGNoLmMpLgorICAgICAqLworICAgIHJlc3VsdCA9IDA7CisgICAgaWYgKG1vZGUgJiAxKSB7CisJaW50IHN0ZXAgPSAobWlsbGlzZWNvbmRzIDwgMCkgPyAwIDogNTAwMDsKKwliaWd0aW1lX3QgZDsKKwliaWd0aW1lX3QgdXNlY29uZHMgPSBtaWxsaXNlY29uZHMgKiAxMDAwOworCWludCBuLCBob3dtYW55OworCisJaWYgKHVzZWNvbmRzIDw9IDApCS8qIHdlJ3JlIGhlcmUgdG8gZ28gX3Rocm91Z2hfIHRoZSBsb29wICovCisJICAgIHVzZWNvbmRzID0gMTsKKworCWZvciAoZCA9IDA7IGQgPCB1c2Vjb25kczsgZCArPSBzdGVwKSB7CisJICAgIG4gPSAwOworCSAgICBob3dtYW55ID0gaW9jdGwoMCwgJ2ljaHInLCAmbik7CisJICAgIGlmIChob3dtYW55ID49IDAgJiYgbiA+IDApIHsKKwkJcmVzdWx0ID0gMTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHVzZWNvbmRzID4gMSAmJiBzdGVwID4gMCkgeworCQlzbm9vemUoc3RlcCk7CisJCW1pbGxpc2Vjb25kcyAtPSAoc3RlcCAvIDEwMDApOworCQlpZiAobWlsbGlzZWNvbmRzIDw9IDApIHsKKwkJICAgIG1pbGxpc2Vjb25kcyA9IDA7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSBpZiAobWlsbGlzZWNvbmRzID4gMCkgeworCXNub296ZShtaWxsaXNlY29uZHMgKiAxMDAwKTsKKwltaWxsaXNlY29uZHMgPSAwOworICAgIH0KKyNlbGlmIEhBVkVfU0VMRUNUCisgICAgLyoKKyAgICAgKiBzZWxlY3QoKSBtb2RpZmllcyB0aGUgZmRfc2V0IGFyZ3VtZW50czsgZG8gdGhpcyBpbiB0aGUKKyAgICAgKiBsb29wLgorICAgICAqLworICAgIEZEX1pFUk8oJnNldCk7CisKKyAgICBpZiAobW9kZSAmIDEpIHsKKwlGRF9TRVQoc3AtPl9pZmQsICZzZXQpOworCWNvdW50ID0gc3AtPl9pZmQgKyAxOworICAgIH0KKyAgICBpZiAoKG1vZGUgJiAyKQorCSYmIChmZCA9IHNwLT5fbW91c2VfZmQpID49IDApIHsKKwlGRF9TRVQoZmQsICZzZXQpOworCWNvdW50ID0gbWF4KGZkLCBjb3VudCkgKyAxOworICAgIH0KKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpZiAoKG1vZGUgJiA0KSAmJiBldmwpIHsKKwlmb3IgKG4gPSAwOyBuIDwgZXZsLT5jb3VudDsgKytuKSB7CisJICAgIF9uY19ldmVudCAqZXYgPSBldmwtPmV2ZW50c1tuXTsKKworCSAgICBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX0ZJTEUKKwkJJiYgKGV2LT5kYXRhLmZldi5mbGFncyAmIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFKSkgeworCQlGRF9TRVQoZXYtPmRhdGEuZmV2LmZkLCAmc2V0KTsKKwkJY291bnQgPSBtYXgoZXYtPmRhdGEuZmV2LmZkICsgMSwgY291bnQpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG1pbGxpc2Vjb25kcyA+PSAwKSB7CisJc3RydWN0IHRpbWV2YWwgbnRpbWVvdXQ7CisJbnRpbWVvdXQudHZfc2VjID0gbWlsbGlzZWNvbmRzIC8gMTAwMDsKKwludGltZW91dC50dl91c2VjID0gKG1pbGxpc2Vjb25kcyAlIDEwMDApICogMTAwMDsKKwlyZXN1bHQgPSBzZWxlY3QoY291bnQsICZzZXQsIE5VTEwsIE5VTEwsICZudGltZW91dCk7CisgICAgfSBlbHNlIHsKKwlyZXN1bHQgPSBzZWxlY3QoY291bnQsICZzZXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIH0KKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmICgobW9kZSAmIDQpICYmIGV2bCkgeworCWV2bC0+cmVzdWx0X2ZsYWdzID0gMDsKKwlmb3IgKG4gPSAwOyBuIDwgZXZsLT5jb3VudDsgKytuKSB7CisJICAgIF9uY19ldmVudCAqZXYgPSBldmwtPmV2ZW50c1tuXTsKKworCSAgICBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX0ZJTEUKKwkJJiYgKGV2LT5kYXRhLmZldi5mbGFncyAmIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFKSkgeworCQlldi0+ZGF0YS5mZXYucmVzdWx0ID0gMDsKKwkJaWYgKEZEX0lTU0VUKGV2LT5kYXRhLmZldi5mZCwgJnNldCkpIHsKKwkJICAgIGV2LT5kYXRhLmZldi5yZXN1bHQgfD0gX05DX0VWRU5UX0ZJTEVfUkVBREFCTEU7CisJCSAgICBldmwtPnJlc3VsdF9mbGFncyB8PSBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGV2LT50eXBlID09IF9OQ19FVkVOVF9USU1FT1VUX01TRUMKKwkJICAgICAgICYmICFyZXN1bHQgJiYgdGltZW91dF9pc19ldmVudCkKKwkJZXZsLT5yZXN1bHRfZmxhZ3MgfD0gX05DX0VWRU5UX1RJTUVPVVRfTVNFQzsKKwl9CisgICAgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBVU0VfRlVOQ19QT0xMLCBldGMgKi8KKworICAgIHJldHVybnRpbWUgPSBfbmNfZ2V0dGltZSgmdDAsIEZBTFNFKTsKKworICAgIGlmIChtaWxsaXNlY29uZHMgPj0gMCkKKwltaWxsaXNlY29uZHMgLT0gKHJldHVybnRpbWUgLSBzdGFydHRpbWUpOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKGV2bCkgeworCWV2bC0+cmVzdWx0X2ZsYWdzID0gMDsKKwlmb3IgKG4gPSAwOyBuIDwgZXZsLT5jb3VudDsgKytuKSB7CisJICAgIF9uY19ldmVudCAqZXYgPSBldmwtPmV2ZW50c1tuXTsKKworCSAgICBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX1RJTUVPVVRfTVNFQykgeworCQlsb25nIGRpZmYgPSAocmV0dXJudGltZSAtIHN0YXJ0dGltZSk7CisJCWlmIChldi0+ZGF0YS50aW1lb3V0X21zZWMgPD0gZGlmZikKKwkJICAgIGV2LT5kYXRhLnRpbWVvdXRfbXNlYyA9IDA7CisJCWVsc2UKKwkJICAgIGV2LT5kYXRhLnRpbWVvdXRfbXNlYyAtPSBkaWZmOworCSAgICB9CisKKwl9CisgICAgfQorI2VuZGlmCisKKyNpZiBQUkVDSVNFX0dFVFRJTUUgJiYgSEFWRV9OQU5PU0xFRVAKKyAgICAvKgorICAgICAqIElmIHRoZSB0aW1lb3V0IGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgZ290dGVuIG5vIGRhdGEsCisgICAgICogdGhpcyBpcyBwcm9iYWJseSBhIHN5c3RlbSB3aGVyZSAnc2VsZWN0KCknIG5lZWRzIHRvIGJlIGxlZnQKKyAgICAgKiBhbG9uZSBzbyB0aGF0IGl0IGNhbiBjb21wbGV0ZS4gIE1ha2UgdGhpcyBwcm9jZXNzIHNsZWVwLAorICAgICAqIHRoZW4gY29tZSBiYWNrIGZvciBtb3JlLgorICAgICAqLworICAgIGlmIChyZXN1bHQgPT0gMCAmJiBtaWxsaXNlY29uZHMgPiAxMDApIHsKKwluYXBtcygxMDApOwkJLyogRklYTUU6IHRoaXMgd29uJ3QgYmUgcmlnaHQgaWYgSSByZWN1ciEgKi8KKwltaWxsaXNlY29uZHMgLT0gMTAwOworCWdvdG8gcmV0cnk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiByZXR1cm4gYXBwcm94aW1hdGUgdGltZSBsZWZ0IGluIG1pbGxpc2Vjb25kcyAqLworICAgIGlmICh0aW1lbGVmdCkKKwkqdGltZWxlZnQgPSBtaWxsaXNlY29uZHM7CisKKyAgICBUUihUUkFDRV9JRVZFTlQsICgiZW5kIHR3YWl0OiByZXR1cm5lZCAlZCAoJWQpLCByZW1haW5pbmcgdGltZSAlZCBtc2VjIiwKKwkJICAgICAgcmVzdWx0LCBlcnJubywgbWlsbGlzZWNvbmRzKSk7CisKKyAgICAvKgorICAgICAqIEJvdGggJ3BvbGwoKScgYW5kICdzZWxlY3QoKScgcmV0dXJuIHRoZSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycworICAgICAqIHRoYXQgYXJlIGFjdGl2ZS4gIFRyYW5zbGF0ZSB0aGlzIGJhY2sgdG8gdGhlIG1hc2sgdGhhdCBkZW5vdGVzIHdoaWNoCisgICAgICogZmlsZS1kZXNjcmlwdG9ycywgc28gdGhhdCB3ZSBkb24ndCBuZWVkIGFsbCBvZiB0aGlzIHN5c3RlbS1zcGVjaWZpYworICAgICAqIGNvZGUgZXZlcnl3aGVyZS4KKyAgICAgKi8KKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKwlpZiAocmVzdWx0ID4gMCkgeworCSAgICByZXN1bHQgPSAwOworI2lmIFVTRV9GVU5DX1BPTEwKKwkgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTUlOX0ZEUzsgY291bnQrKykgeworCQlpZiAoKG1vZGUgJiAoMSA8PCBjb3VudCkpCisJCSAgICAmJiAoZmRzW2NvdW50XS5yZXZlbnRzICYgUE9MTElOKSkgeworCQkgICAgcmVzdWx0IHw9ICgxIDw8IGNvdW50KTsKKwkJfQorCSAgICB9CisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorCSAgICByZXN1bHQgPSAxOwkJLyogcmVkdW5kYW50LCBidXQgc2ltcGxlICovCisjZWxpZiBIQVZFX1NFTEVDVAorCSAgICBpZiAoKG1vZGUgJiAyKQorCQkmJiAoZmQgPSBzcC0+X21vdXNlX2ZkKSA+PSAwCisJCSYmIEZEX0lTU0VUKGZkLCAmc2V0KSkKKwkJcmVzdWx0IHw9IDI7CisJICAgIGlmICgobW9kZSAmIDEpCisJCSYmIEZEX0lTU0VUKHNwLT5faWZkLCAmc2V0KSkKKwkJcmVzdWx0IHw9IDE7CisjZW5kaWYKKwl9IGVsc2UKKwkgICAgcmVzdWx0ID0gMDsKKyAgICB9CisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKChtb2RlICYgNCkgJiYgZXZsICYmIGV2bC0+cmVzdWx0X2ZsYWdzKQorCXJlc3VsdCB8PSA0OworI2VuZGlmCisKKyAgICByZXR1cm4gKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3R0eS9saWJfdmlkYXR0ci5jIGIvbmN1cnNlcy90dHkvbGliX3ZpZGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzJhNzRmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90dHkvbGliX3ZpZGF0dHIuYwpAQCAtMCwwICsxLDMzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYgb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJdmlkcHV0cyhuZXdtb2RlLCBvdXRjKQorICoKKyAqCW5ld21vZGUgaXMgdGFrZW4gdG8gYmUgdGhlIGxvZ2ljYWwgJ29yJyBvZiB0aGUgc3ltYm9scyBpbiBjdXJzZXMuaAorICoJcmVwcmVzZW50aW5nIGdyYXBoaWMgcmVuZGl0aW9ucy4gIFRoZSB0ZXJtaW5hbCBpcyBzZXQgdG8gYmUgaW4gYWxsIG9mCisgKgl0aGUgZ2l2ZW4gbW9kZXMsIGlmIHBvc3NpYmxlLgorICoKKyAqCWlmIHRoZSBuZXcgYXR0cmlidXRlIGlzIG5vcm1hbAorICoJCWlmIGV4aXQtYWx0LWNoYXItc2V0IGV4aXN0cworICoJCQllbWl0IGl0CisgKgkJZW1pdCBleGl0LWF0dHJpYnV0ZS1tb2RlCisgKgllbHNlIGlmIHNldC1hdHRyaWJ1dGVzIGV4aXN0cworICoJCXVzZSBpdCB0byBzZXQgZXhhY3RseSB3aGF0IHlvdSB3YW50CisgKgllbHNlCisgKgkJaWYgZXhpdC1hdHRyaWJ1dGUtbW9kZSBleGlzdHMKKyAqCQkJdHVybiBvZmYgZXZlcnl0aGluZworICoJCWVsc2UKKyAqCQkJdHVybiBvZmYgdGhvc2Ugd2hpY2ggY2FuIGJlIHR1cm5lZCBvZmYgYW5kIGFyZW4ndCBpbgorICoJCQluZXdtb2RlLgorICoJCXR1cm4gb24gZWFjaCBtb2RlIHdoaWNoIHNob3VsZCBiZSBvbiBhbmQgaXNuJ3QsIG9uZSBieSBvbmUKKyAqCisgKglOT1RFIHRoYXQgdGhpcyBhbGdvcml0aG0gd29uJ3QgYWNoaWV2ZSB0aGUgZGVzaXJlZCBtaXggb2YgYXR0cmlidXRlcworICoJaW4gc29tZSBjYXNlcywgYnV0IHRob3NlIGFyZSBwcm9iYWJseSBqdXN0IHRob3NlIGNhc2VzIGluIHdoaWNoIGl0IGlzCisgKglhY3R1YWxseSBpbXBvc3NpYmxlLCBhbnl3YXksIHNvLi4uCisgKgorICogCU5PVEUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlcmUncyBubyBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvbG9yCisgKglhbmQgb3RoZXIgYXR0cmlidXRlIHJlc2V0cy4gIFNvIGVhY2ggdGltZSB3ZSByZXNldCBjb2xvciAob3Igb3RoZXIKKyAqCWF0dHJpYnV0ZXMpIHdlJ2xsIGhhdmUgdG8gYmUgcHJlcGFyZWQgdG8gcmVzdG9yZSB0aGUgb3RoZXIuCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3ZpZGF0dHIuYyx2IDEuNDkgMjAwNy8wNi8zMCAyMTo1ODowNCB0b20gRXhwICQiKQorCisjZGVmaW5lIGRvUHV0KG1vZGUpIFRQVVRTX1RSQUNFKCNtb2RlKTsgdHB1dHMobW9kZSwgMSwgb3V0YykKKworI2RlZmluZSBUdXJuT24obWFzayxtb2RlKSBcCisJaWYgKCh0dXJuX29uICYgbWFzaykgJiYgbW9kZSkgeyBkb1B1dChtb2RlKTsgfQorCisjZGVmaW5lIFR1cm5PZmYobWFzayxtb2RlKSBcCisJaWYgKCh0dXJuX29mZiAmIG1hc2spICYmIG1vZGUpIHsgZG9QdXQobW9kZSk7IHR1cm5fb2ZmICY9IH5tYXNrOyB9CisKKwkvKiBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHNjcmVlbiwgYXNzdW1lIHdlICpjYW4qIGRvIGNvbG9yICovCisjZGVmaW5lIFNldENvbG9yc0lmKHdoeSxvbGRfYXR0cikgXAorCWlmIChjYW5fY29sb3IgJiYgKHdoeSkpIHsgXAorCQlpbnQgb2xkX3BhaXIgPSBQQUlSX05VTUJFUihvbGRfYXR0cik7IFwKKwkJVFIoVFJBQ0VfQVRUUlMsICgib2xkIHBhaXIgPSAlZCAtLSBuZXcgcGFpciA9ICVkIiwgb2xkX3BhaXIsIHBhaXIpKTsgXAorCQlpZiAoKHBhaXIgIT0gb2xkX3BhaXIpIFwKKwkJIHx8IChmaXhfcGFpcjAgJiYgKHBhaXIgPT0gMCkpIFwKKwkJIHx8IChyZXZlcnNlIF4gKChvbGRfYXR0ciAmIEFfUkVWRVJTRSkgIT0gMCkpKSB7IFwKKwkJCV9uY19kb19jb2xvcihvbGRfcGFpciwgcGFpciwgcmV2ZXJzZSwgb3V0Yyk7IFwKKwkJfSBcCisJfQorCisjZGVmaW5lIFByZXZpb3VzQXR0ciBfbmNfcHJlc2NyZWVuLnByZXZpb3VzX2F0dHIKKworTkNVUlNFU19FWFBPUlQoaW50KQordmlkcHV0cyhjaHR5cGUgbmV3bW9kZSwgaW50ICgqb3V0YykgKGludCkpCit7CisgICAgYXR0cl90IHR1cm5fb24sIHR1cm5fb2ZmOworICAgIGludCBwYWlyOworICAgIGJvb2wgcmV2ZXJzZSA9IEZBTFNFOworICAgIGJvb2wgY2FuX2NvbG9yID0gKFNQID09IDAgfHwgU1AtPl9jb2xvcm9uKTsKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGJvb2wgZml4X3BhaXIwID0gKFNQICE9IDAgJiYgU1AtPl9jb2xvcm9uICYmICFTUC0+X2RlZmF1bHRfY29sb3IpOworI2Vsc2UKKyNkZWZpbmUgZml4X3BhaXIwIEZBTFNFCisjZW5kaWYKKworICAgIG5ld21vZGUgJj0gQV9BVFRSSUJVVEVTOworICAgIFQoKFRfQ0FMTEVEKCJ2aWRwdXRzKCVzKSIpLCBfdHJhY2VhdHRyKG5ld21vZGUpKSk7CisKKyAgICAvKiB0aGlzIGFsbG93cyB1cyB0byBnbyBvbiB3aGV0aGVyIG9yIG5vdCBuZXd0ZXJtKCkgaGFzIGJlZW4gY2FsbGVkICovCisgICAgaWYgKFNQKQorCVByZXZpb3VzQXR0ciA9IEF0dHJPZihTQ1JFRU5fQVRUUlMoU1ApKTsKKworICAgIFRSKFRSQUNFX0FUVFJTLCAoInByZXZpb3VzIGF0dHJpYnV0ZSB3YXMgJXMiLCBfdHJhY2VhdHRyKFByZXZpb3VzQXR0cikpKTsKKworICAgIGlmICgoU1AgIT0gMCkKKwkmJiAobWFnaWNfY29va2llX2dsaXRjaCA+IDApKSB7CisjaWYgVVNFX1hNQ19TVVBQT1JUCisJc3RhdGljIGNvbnN0IGNodHlwZSB0YWJsZVtdID0KKwl7CisJICAgIEFfU1RBTkRPVVQsCisJICAgIEFfVU5ERVJMSU5FLAorCSAgICBBX1JFVkVSU0UsCisJICAgIEFfQkxJTkssCisJICAgIEFfRElNLAorCSAgICBBX0JPTEQsCisJICAgIEFfSU5WSVMsCisJICAgIEFfUFJPVEVDVCwKKwl9OworCXVuc2lnbmVkIG47CisJaW50IHVzZWQgPSAwOworCWludCBsaW1pdCA9IChtYXhfYXR0cmlidXRlcyA8PSAwKSA/IDEgOiBtYXhfYXR0cmlidXRlczsKKwljaHR5cGUgcmV0YWluID0gMDsKKworCS8qCisJICogTGltaXQgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGUgYml0cyBzZXQgaW4gdGhlIG5ld21vZGUgYWNjb3JkaW5nIHRvCisJICogdGhlIHRlcm1pbmZvIG1heF9hdHRyaWJ1dGVzIHZhbHVlLgorCSAqLworCWZvciAobiA9IDA7IG4gPCBTSVpFT0YodGFibGUpOyArK24pIHsKKwkgICAgaWYgKCh0YWJsZVtuXSAmIFNQLT5fb2tfYXR0cmlidXRlcykgPT0gMCkgeworCQluZXdtb2RlICY9IH50YWJsZVtuXTsKKwkgICAgfSBlbHNlIGlmICgodGFibGVbbl0gJiBuZXdtb2RlKSAhPSAwKSB7CisJCWlmICh1c2VkKysgPj0gbGltaXQpIHsKKwkJICAgIG5ld21vZGUgJj0gfnRhYmxlW25dOworCQkgICAgaWYgKG5ld21vZGUgPT0gcmV0YWluKQorCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCSAgICByZXRhaW4gPSBuZXdtb2RlOworCQl9CisJICAgIH0KKwl9CisjZWxzZQorCW5ld21vZGUgJj0gfihTUC0+X3htY19zdXBwcmVzcyk7CisjZW5kaWYKKwlUUihUUkFDRV9BVFRSUywgKCJzdXBwcmVzc2VkIGF0dHJpYnV0ZSBpcyAlcyIsIF90cmFjZWF0dHIobmV3bW9kZSkpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHdlIGhhdmUgYSB0ZXJtaW5hbCB0aGF0IGNhbm5vdCBjb21iaW5lIGNvbG9yIHdpdGggdmlkZW8KKyAgICAgKiBhdHRyaWJ1dGVzLCB1c2UgdGhlIGNvbG9ycyBpbiBwcmVmZXJlbmNlLgorICAgICAqLworICAgIGlmICgoKG5ld21vZGUgJiBBX0NPTE9SKSAhPSAwCisJIHx8IGZpeF9wYWlyMCkKKwkmJiAobm9fY29sb3JfdmlkZW8gPiAwKSkgeworCS8qCisJICogSWYgd2UgaGFkIGNob3NlbiB0aGUgQV94eHggZGVmaW5pdGlvbnMgdG8gY29ycmVzcG9uZCB0byB0aGUKKwkgKiBub19jb2xvcl92aWRlbyBtYXNrLCB3ZSBjb3VsZCBzaW1wbHkgc2hpZnQgaXQgdXAgYW5kIG1hc2sgb2ZmIHRoZQorCSAqIGF0dHJpYnV0ZXMuICBCdXQgd2UgZGlkIG5vdCAoYWN0dWFsbHkgY29waWVkIFNvbGFyaXMnIGRlZmluaXRpb25zKS4KKwkgKiBIb3dldmVyLCB0aGlzIGlzIHN0aWxsIHNpbXBsZXIvZmFzdGVyIHRoYW4gYSBsb29rdXAgdGFibGUuCisJICoKKwkgKiBUaGUgNjMgY29ycmVzcG9uZHMgdG8gQV9TVEFORE9VVCwgQV9VTkRFUkxJTkUsIEFfUkVWRVJTRSwgQV9CTElOSywKKwkgKiBBX0RJTSwgQV9CT0xEIHdoaWNoIGFyZSAxOjEgd2l0aCBub19jb2xvcl92aWRlby4gIFRoZSBiaXRzIHRoYXQKKwkgKiBjb3JyZXNwb25kIHRvIEFfSU5WSVMsIEFfUFJPVEVDVCAoMTkyKSBtdXN0IGJlIHNoaWZ0ZWQgdXAgMSBhbmQKKwkgKiBBX0FMVENIQVJTRVQgKDI1NikgZG93biAyIHRvIGxpbmUgdXAuICBXZSB1c2UgdGhlIE5DVVJTRVNfQklUUworCSAqIG1hY3JvIHNvIHRoaXMgd2lsbCB3b3JrIHByb3Blcmx5IGZvciB0aGUgd2lkZS1jaGFyYWN0ZXIgbGF5b3V0LgorCSAqLworCXVuc2lnbmVkIHZhbHVlID0gbm9fY29sb3JfdmlkZW87CisJYXR0cl90IG1hc2sgPSBOQ1VSU0VTX0JJVFMoKHZhbHVlICYgNjMpCisJCQkJICAgfCAoKHZhbHVlICYgMTkyKSA8PCAxKQorCQkJCSAgIHwgKCh2YWx1ZSAmIDI1NikgPj4gMiksIDgpOworCisJaWYgKChtYXNrICYgQV9SRVZFUlNFKSAhPSAwCisJICAgICYmIChuZXdtb2RlICYgQV9SRVZFUlNFKSAhPSAwKSB7CisJICAgIHJldmVyc2UgPSBUUlVFOworCSAgICBtYXNrICY9IH5BX1JFVkVSU0U7CisJfQorCW5ld21vZGUgJj0gfm1hc2s7CisgICAgfQorCisgICAgaWYgKG5ld21vZGUgPT0gUHJldmlvdXNBdHRyKQorCXJldHVybkNvZGUoT0spOworCisgICAgcGFpciA9IFBBSVJfTlVNQkVSKG5ld21vZGUpOworCisgICAgaWYgKHJldmVyc2UpIHsKKwluZXdtb2RlICY9IH5BX1JFVkVSU0U7CisgICAgfQorCisgICAgdHVybl9vZmYgPSAofm5ld21vZGUgJiBQcmV2aW91c0F0dHIpICYgQUxMX0JVVF9DT0xPUjsKKyAgICB0dXJuX29uID0gKG5ld21vZGUgJiB+UHJldmlvdXNBdHRyKSAmIEFMTF9CVVRfQ09MT1I7CisKKyAgICBTZXRDb2xvcnNJZigoKHBhaXIgPT0gMCkgJiYgIWZpeF9wYWlyMCksIFByZXZpb3VzQXR0cik7CisKKyAgICBpZiAobmV3bW9kZSA9PSBBX05PUk1BTCkgeworCWlmICgoUHJldmlvdXNBdHRyICYgQV9BTFRDSEFSU0VUKSAmJiBleGl0X2FsdF9jaGFyc2V0X21vZGUpIHsKKwkgICAgZG9QdXQoZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKwkgICAgUHJldmlvdXNBdHRyICY9IH5BX0FMVENIQVJTRVQ7CisJfQorCWlmIChQcmV2aW91c0F0dHIpIHsKKwkgICAgaWYgKGV4aXRfYXR0cmlidXRlX21vZGUpIHsKKwkJZG9QdXQoZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisJICAgIH0gZWxzZSB7CisJCWlmICghU1AgfHwgU1AtPl91c2Vfcm11bCkgeworCQkgICAgVHVybk9mZihBX1VOREVSTElORSwgZXhpdF91bmRlcmxpbmVfbW9kZSk7CisJCX0KKwkJaWYgKCFTUCB8fCBTUC0+X3VzZV9ybXNvKSB7CisJCSAgICBUdXJuT2ZmKEFfU1RBTkRPVVQsIGV4aXRfc3RhbmRvdXRfbW9kZSk7CisJCX0KKwkgICAgfQorCSAgICBQcmV2aW91c0F0dHIgJj0gQUxMX0JVVF9DT0xPUjsKKwl9CisKKwlTZXRDb2xvcnNJZigocGFpciAhPSAwKSB8fCBmaXhfcGFpcjAsIFByZXZpb3VzQXR0cik7CisgICAgfSBlbHNlIGlmIChzZXRfYXR0cmlidXRlcykgeworCWlmICh0dXJuX29uIHx8IHR1cm5fb2ZmKSB7CisJICAgIFRQVVRTX1RSQUNFKCJzZXRfYXR0cmlidXRlcyIpOworCSAgICB0cHV0cyh0cGFybShzZXRfYXR0cmlidXRlcywKKwkJCShuZXdtb2RlICYgQV9TVEFORE9VVCkgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9VTkRFUkxJTkUpICE9IDAsCisJCQkobmV3bW9kZSAmIEFfUkVWRVJTRSkgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9CTElOSykgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9ESU0pICE9IDAsCisJCQkobmV3bW9kZSAmIEFfQk9MRCkgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9JTlZJUykgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9QUk9URUNUKSAhPSAwLAorCQkJKG5ld21vZGUgJiBBX0FMVENIQVJTRVQpICE9IDApLCAxLCBvdXRjKTsKKwkgICAgUHJldmlvdXNBdHRyICY9IEFMTF9CVVRfQ09MT1I7CisJfQorCVNldENvbG9yc0lmKChwYWlyICE9IDApIHx8IGZpeF9wYWlyMCwgUHJldmlvdXNBdHRyKTsKKyAgICB9IGVsc2UgeworCisJVFIoVFJBQ0VfQVRUUlMsICgidHVybmluZyAlcyBvZmYiLCBfdHJhY2VhdHRyKHR1cm5fb2ZmKSkpOworCisJVHVybk9mZihBX0FMVENIQVJTRVQsIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSk7CisKKwlpZiAoIVNQIHx8IFNQLT5fdXNlX3JtdWwpIHsKKwkgICAgVHVybk9mZihBX1VOREVSTElORSwgZXhpdF91bmRlcmxpbmVfbW9kZSk7CisJfQorCisJaWYgKCFTUCB8fCBTUC0+X3VzZV9ybXNvKSB7CisJICAgIFR1cm5PZmYoQV9TVEFORE9VVCwgZXhpdF9zdGFuZG91dF9tb2RlKTsKKwl9CisKKwlpZiAodHVybl9vZmYgJiYgZXhpdF9hdHRyaWJ1dGVfbW9kZSkgeworCSAgICBkb1B1dChleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKwkgICAgdHVybl9vbiB8PSAobmV3bW9kZSAmIEFMTF9CVVRfQ09MT1IpOworCSAgICBQcmV2aW91c0F0dHIgJj0gQUxMX0JVVF9DT0xPUjsKKwl9CisJU2V0Q29sb3JzSWYoKHBhaXIgIT0gMCkgfHwgZml4X3BhaXIwLCBQcmV2aW91c0F0dHIpOworCisJVFIoVFJBQ0VfQVRUUlMsICgidHVybmluZyAlcyBvbiIsIF90cmFjZWF0dHIodHVybl9vbikpKTsKKwkvKiAqSU5ERU5ULU9GRiogKi8KKwlUdXJuT24oQV9BTFRDSEFSU0VULAllbnRlcl9hbHRfY2hhcnNldF9tb2RlKTsKKwlUdXJuT24oQV9CTElOSywJCWVudGVyX2JsaW5rX21vZGUpOworCVR1cm5PbihBX0JPTEQsCQllbnRlcl9ib2xkX21vZGUpOworCVR1cm5PbihBX0RJTSwJCWVudGVyX2RpbV9tb2RlKTsKKwlUdXJuT24oQV9SRVZFUlNFLAllbnRlcl9yZXZlcnNlX21vZGUpOworCVR1cm5PbihBX1NUQU5ET1VULAllbnRlcl9zdGFuZG91dF9tb2RlKTsKKwlUdXJuT24oQV9QUk9URUNULAllbnRlcl9wcm90ZWN0ZWRfbW9kZSk7CisJVHVybk9uKEFfSU5WSVMsCQllbnRlcl9zZWN1cmVfbW9kZSk7CisJVHVybk9uKEFfVU5ERVJMSU5FLAllbnRlcl91bmRlcmxpbmVfbW9kZSk7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwlUdXJuT24oQV9IT1JJWk9OVEFMLAllbnRlcl9ob3Jpem9udGFsX2hsX21vZGUpOworCVR1cm5PbihBX0xFRlQsCQllbnRlcl9sZWZ0X2hsX21vZGUpOworCVR1cm5PbihBX0xPVywJCWVudGVyX2xvd19obF9tb2RlKTsKKwlUdXJuT24oQV9SSUdIVCwJCWVudGVyX3JpZ2h0X2hsX21vZGUpOworCVR1cm5PbihBX1RPUCwJCWVudGVyX3RvcF9obF9tb2RlKTsKKwlUdXJuT24oQV9WRVJUSUNBTCwJZW50ZXJfdmVydGljYWxfaGxfbW9kZSk7CisjZW5kaWYKKwkvKiAqSU5ERU5ULU9OKiAqLworCisgICAgfQorCisgICAgaWYgKHJldmVyc2UpCisJbmV3bW9kZSB8PSBBX1JFVkVSU0U7CisKKyAgICBpZiAoU1ApCisJU2V0QXR0cihTQ1JFRU5fQVRUUlMoU1ApLCBuZXdtb2RlKTsKKyAgICBlbHNlCisJUHJldmlvdXNBdHRyID0gbmV3bW9kZTsKKworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit2aWRhdHRyKGNodHlwZSBuZXdtb2RlKQoreworICAgIFQoKFRfQ0FMTEVEKCJ2aWRhdHRyKCVzKSIpLCBfdHJhY2VhdHRyKG5ld21vZGUpKSk7CisKKyAgICByZXR1cm5Db2RlKHZpZHB1dHMobmV3bW9kZSwgX25jX291dGNoKSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNodHlwZSkKK3Rlcm1hdHRycyh2b2lkKQoreworICAgIGNodHlwZSBhdHRycyA9IEFfTk9STUFMOworCisgICAgVCgoVF9DQUxMRUQoInRlcm1hdHRycygpIikpKTsKKyAgICBpZiAoZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSkKKwlhdHRycyB8PSBBX0FMVENIQVJTRVQ7CisKKyAgICBpZiAoZW50ZXJfYmxpbmtfbW9kZSkKKwlhdHRycyB8PSBBX0JMSU5LOworCisgICAgaWYgKGVudGVyX2JvbGRfbW9kZSkKKwlhdHRycyB8PSBBX0JPTEQ7CisKKyAgICBpZiAoZW50ZXJfZGltX21vZGUpCisJYXR0cnMgfD0gQV9ESU07CisKKyAgICBpZiAoZW50ZXJfcmV2ZXJzZV9tb2RlKQorCWF0dHJzIHw9IEFfUkVWRVJTRTsKKworICAgIGlmIChlbnRlcl9zdGFuZG91dF9tb2RlKQorCWF0dHJzIHw9IEFfU1RBTkRPVVQ7CisKKyAgICBpZiAoZW50ZXJfcHJvdGVjdGVkX21vZGUpCisJYXR0cnMgfD0gQV9QUk9URUNUOworCisgICAgaWYgKGVudGVyX3NlY3VyZV9tb2RlKQorCWF0dHJzIHw9IEFfSU5WSVM7CisKKyAgICBpZiAoZW50ZXJfdW5kZXJsaW5lX21vZGUpCisJYXR0cnMgfD0gQV9VTkRFUkxJTkU7CisKKyAgICBpZiAoU1AtPl9jb2xvcm9uKQorCWF0dHJzIHw9IEFfQ09MT1I7CisKKyAgICByZXR1cm5DaGFyKGF0dHJzKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHR5L3R0eV9kaXNwbGF5LmggYi9uY3Vyc2VzL3R0eS90dHlfZGlzcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNDVhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3R0eS90dHlfZGlzcGxheS5oCkBAIC0wLDAgKzEsMTQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjaWZuZGVmIFRUWV9ESVNQTEFZX0gKKyNkZWZpbmUgVFRZX0RJU1BMQVlfSCAxCisKKy8qCisgKiAkSWQ6IHR0eV9kaXNwbGF5LmgsdiAxLjYgMjAwNS8wMS8wMSAyMzo0MToxMiB0b20gRXhwICQKKyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfYmVlcCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9jaGVja19yZXNpemUgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfY3Vyc29yIChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfZmxhc2ggKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfaW5pdF9jb2xvciAoaW50LGludCxpbnQsaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfdHR5X2luaXRfcGFpciAoaW50LGludCxpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfc2xrX2hpZGUgKGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfc2xrX3VwZGF0ZSAoaW50LGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9zdGFydF9jb2xvciAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3R0eV9kaXNwbGF5X3Jlc3VtZSAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3R0eV9kaXNwbGF5X3N1c3BlbmQgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfZGlzcG9zZSAodm9pZCk7CS8qIGZyZWVzIFNQLT5fdGVybSAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfc3dpdGNoX3RvICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHR5X3VwZGF0ZSAodm9pZCk7CisKK3N0cnVjdCB0dHlfZGlzcGxheV9kYXRhIHsKKwlpbnQgICAgICAgICAgICAgX2ZpZm9ob2xkOyAgICAgIC8qIHNldCBpZiBicmVha291dCBtYXJrZWQgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyAgIF9jdXJyZW50X2F0dHI7ICAvKiB0ZXJtaW5hbCBhdHRyaWJ1dGUgY3VycmVudCBzZXQgICAqLworCWludCAgICAgICAgICAgICBfY3Vyc3JvdzsgICAgICAgLyogcGh5c2ljYWwgY3Vyc29yIHJvdyAoLTE9dW5rbm93bikgKi8KKwlpbnQgICAgICAgICAgICAgX2N1cnNjb2w7ICAgICAgIC8qIHBoeXNpY2FsIGN1cnNvciBjb2x1bW4gICAgICAgICAgICovCisKKwkvKiBjdXJzb3IgbW92ZW1lbnQgY29zdHM7IHVuaXRzIGFyZSAxMHRocyBvZiBtaWxsaXNlY29uZHMgKi8KKwlpbnQgICAgICAgICAgICAgX2NoYXJfcGFkZGluZzsgIC8qIGNvc3Qgb2YgY2hhcmFjdGVyIHB1dCAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jcl9jb3N0OyAgICAgICAvKiBjb3N0IG9mIChjYXJyaWFnZV9yZXR1cm4pICAgICAgICAqLworCWludCAgICAgICAgICAgICBfY3VwX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAoY3Vyc29yX2FkZHJlc3MpICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2hvbWVfY29zdDsgICAgIC8qIGNvc3Qgb2YgKGN1cnNvcl9ob21lKSAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9sbF9jb3N0OyAgICAgICAvKiBjb3N0IG9mIChjdXJzb3JfdG9fbGwpICAgICAgICAgICAqLworI2lmIFVTRV9IQVJEX1RBQlMKKwlpbnQgICAgICAgICAgICAgX2h0X2Nvc3Q7ICAgICAgIC8qIGNvc3Qgb2YgKHRhYikgICAgICAgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jYnRfY29zdDsgICAgICAvKiBjb3N0IG9mIChiYWNrdGFiKSAgICAgICAgICAgICAgICAqLworI2VuZGlmIC8qIFVTRV9IQVJEX1RBQlMgKi8KKwlpbnQgICAgICAgICAgICAgX2N1YjFfY29zdDsgICAgIC8qIGNvc3Qgb2YgKGN1cnNvcl9sZWZ0KSAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jdWYxX2Nvc3Q7ICAgICAvKiBjb3N0IG9mIChjdXJzb3JfcmlnaHQpICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfY3VkMV9jb3N0OyAgICAgLyogY29zdCBvZiAoY3Vyc29yX2Rvd24pICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2N1dTFfY29zdDsgICAgIC8qIGNvc3Qgb2YgKGN1cnNvcl91cCkgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jdWJfY29zdDsgICAgICAvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl9sZWZ0KSAgICAgICAqLworCWludCAgICAgICAgICAgICBfY3VmX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAocGFybV9jdXJzb3JfcmlnaHQpICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2N1ZF9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX2Rvd24pICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jdXVfY29zdDsgICAgICAvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl91cCkgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfaHBhX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAoY29sdW1uX2FkZHJlc3MpICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX3ZwYV9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKHJvd19hZGRyZXNzKSAgICAgICAgICAgICovCisJLyogdXNlZCBpbiBsaWJfZG91cGRhdGUuYywgbXVzdCBiZSBjaGFycyAqLworCWludCAgICAgICAgICAgICBfZWRfY29zdDsgICAgICAgLyogY29zdCBvZiAoY2xyX2VvcykgICAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2VsX2Nvc3Q7ICAgICAgIC8qIGNvc3Qgb2YgKGNscl9lb2wpICAgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9lbDFfY29zdDsgICAgICAvKiBjb3N0IG9mIChjbHJfYm9sKSAgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfZGNoMV9jb3N0OyAgICAgLyogY29zdCBvZiAoZGVsZXRlX2NoYXJhY3RlcikgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2ljaDFfY29zdDsgICAgIC8qIGNvc3Qgb2YgKGluc2VydF9jaGFyYWN0ZXIpICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9kY2hfY29zdDsgICAgICAvKiBjb3N0IG9mIChwYXJtX2RjaCkgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfaWNoX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAocGFybV9pY2gpICAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2VjaF9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKGVyYXNlX2NoYXJzKSAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9yZXBfY29zdDsgICAgICAvKiBjb3N0IG9mIChyZXBlYXRfY2hhcikgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfaHBhX2NoX2Nvc3Q7ICAgLyogY29zdCBvZiAoY29sdW1uX2FkZHJlc3MpICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2N1cF9jaF9jb3N0OyAgIC8qIGNvc3Qgb2YgKGN1cnNvcl9hZGRyZXNzKSAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9zbWlyX2Nvc3Q7CS8qIGNvc3Qgb2YgKGVudGVyX2luc2VydF9tb2RlKSAgICAgICovCisJaW50ICAgICAgICAgICAgIF9ybWlyX2Nvc3Q7CS8qIGNvc3Qgb2YgKGV4aXRfaW5zZXJ0X21vZGUpICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9pcF9jb3N0OyAgICAgICAvKiBjb3N0IG9mIChpbnNlcnRfcGFkZGluZykgICAgICAgICAqLworCS8qIHVzZWQgaW4gbGliX212Y3VyLmMgKi8KKwljaGFyICogICAgICAgICAgX2FkZHJlc3NfY3Vyc29yOworCWludCAgICAgICAgICAgICBfY2FycmlhZ2VfcmV0dXJuX2xlbmd0aDsKKwlpbnQgICAgICAgICAgICAgX2N1cnNvcl9ob21lX2xlbmd0aDsKKwlpbnQgICAgICAgICAgICAgX2N1cnNvcl90b19sbF9sZW5ndGg7CisKKwljaHR5cGUgICAgICAgICAgX3htY19zdXBwcmVzczsgIC8qIGF0dHJpYnV0ZXMgdG8gc3VwcHJlc3MgaWYgeG1jICAgICAqLworCWNodHlwZSAgICAgICAgICBfeG1jX3RyaWdnZXJzOyAgLyogYXR0cmlidXRlcyB0byBwcm9jZXNzIGlmIHhtYyAgICAgICovCisKKwlib29sICAgICAgICAgICAgX3NpZ193aW5jaDsKK307CisKKworI2RlZmluZSBEZWxDaGFyQ29zdChjb3VudCkgXAorCQkoKHBhcm1fZGNoICE9IDApIFwKKwkJPyBELT5fZGNoX2Nvc3QgXAorCQk6ICgoZGVsZXRlX2NoYXJhY3RlciAhPSAwKSBcCisJCQk/IChELT5fZGNoMV9jb3N0ICogY291bnQpIFwKKwkJCTogSU5GSU5JVFkpKQorCisjZGVmaW5lIEluc0NoYXJDb3N0KGNvdW50KSBcCisJCSgocGFybV9pY2ggIT0gMCkgXAorCQk/IEQtPl9pY2hfY29zdCBcCisJCTogKChlbnRlcl9pbnNlcnRfbW9kZSAmJiBleGl0X2luc2VydF9tb2RlKSBcCisJCSAgPyBELT5fc21pcl9jb3N0ICsgRC0+X3JtaXJfY29zdCArIChELT5faXBfY29zdCAqIGNvdW50KSBcCisJCSAgOiAoKGluc2VydF9jaGFyYWN0ZXIgIT0gMCkgXAorCQkgICAgPyAoKEQtPl9pY2gxX2Nvc3QgKyBELT5faXBfY29zdCkgKiBjb3VudCkgXAorCQkgICAgOiBJTkZJTklUWSkpKQorCisjaWYgVVNFX1hNQ19TVVBQT1JUCisjZGVmaW5lIFVwZGF0ZUF0dHJzKGMpCWlmICghU2FtZUF0dHJPZihELT5fY3VycmVudF9hdHRyLCBBdHRyT2YoYykpKSB7IFwKKwkJCQlhdHRyX3QgY2hnID0gRC0+X2N1cnJlbnRfYXR0cjsgXAorCQkJCXZpZGF0dHIoQXR0ck9mKGMpKTsgXAorCQkJCWlmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCBcCisJCQkJICYmIFhNQ19DSEFOR0VTKChjaGcgXiBELT5fY3VycmVudF9hdHRyKSkpIHsgXAorCQkJCQlUKCgiJXMgQCVkIGJlZm9yZSBnbGl0Y2ggJWQsJWQiLCBcCisJCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCQkJCUQtPl9jdXJzcm93LCBcCisJCQkJCQlELT5fY3Vyc2NvbCkpOyBcCisJCQkJCV9uY19kb194bWNfZ2xpdGNoKGNoZyk7IFwKKwkJCQl9IFwKKwkJCX0KKyNlbHNlCisjZGVmaW5lIFVwZGF0ZUF0dHJzKGMpCWlmICghU2FtZUF0dHJPZihELT5fY3VycmVudF9hdHRyLCBBdHRyT2YoYykpKSBcCisJCQkJdmlkYXR0cihBdHRyT2YoYykpOworI2VuZGlmCisKKyNkZWZpbmUgWE1DX0NIQU5HRVMoYykgKChjKSAmIEQtPl94bWNfc3VwcHJlc3MpCisKKyNlbmRpZiAvKiBUVFlfRElTUExBWV9IICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3R0eS90dHlfaW5wdXQuaCBiL25jdXJzZXMvdHR5L3R0eV9pbnB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjA3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3R0eS90dHlfaW5wdXQuaApAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogJElkOiB0dHlfaW5wdXQuaCx2IDEuMiAyMDAwLzEyLzEwIDAyOjI2OjUxIHRvbSBFeHAgJAorICovCisKKyNpZm5kZWYgVFRZX0lOUFVUX0gKKyNkZWZpbmUgVFRZX0lOUFVUX0ggMQorCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9tb3VzZV9tYXNrIChtbWFza190KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfdHR5X3BlbmRpbmcgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgIF9uY190dHlfbmV4dF9ldmVudCAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHR5X2ZsYWdzX2NoYW5nZWQgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfZmx1c2ggKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfaW5wdXRfcmVzdW1lICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHR5X2lucHV0X3N1c3BlbmQgKHZvaWQpOworCitzdHJ1Y3QgdHR5X2lucHV0X2RhdGEgeworCWludCAgICAgICAgICAgICBfaWZkOyAgICAgICAgICAgLyogaW5wdXQgZmlsZSBwdHIgZm9yIHNjcmVlbiAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2tleXBhZF94bWl0OyAgIC8qIGN1cnJlbnQgdGVybWluYWwgc3RhdGUgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9tZXRhX29uOyAgICAgICAvKiBjdXJyZW50IHRlcm1pbmFsIHN0YXRlICAgICAgICAgICAqLworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIGRhdGEgdGhhdCBzdXBwb3J0IHRoZSBtb3VzZSBpbnRlcmZhY2UuCisJICovCisJYm9vbCAgICAgICAgICAgICgqX21vdXNlX2V2ZW50KSAoU0NSRUVOICopOworCWJvb2wgICAgICAgICAgICAoKl9tb3VzZV9pbmxpbmUpKFNDUkVFTiAqKTsKKwlib29sICAgICAgICAgICAgKCpfbW91c2VfcGFyc2UpIChpbnQpOworCXZvaWQgICAgICAgICAgICAoKl9tb3VzZV9yZXN1bWUpKFNDUkVFTiAqKTsKKwl2b2lkICAgICAgICAgICAgKCpfbW91c2Vfd3JhcCkgIChTQ1JFRU4gKik7CisJaW50ICAgICAgICAgICAgIF9tb3VzZV9mZDsgICAgICAvKiBmaWxlLWRlc2NyaXB0b3IsIGlmIGFueSAqLworCWludCAgICAgICAgICAgICBtb3VzZXR5cGU7Cit9OworCisjZW5kaWYgLyogVFRZX0lOUFVUX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMvdHR5L3R0eV91cGRhdGUuYyBiL25jdXJzZXMvdHR5L3R0eV91cGRhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTNhMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy90dHkvdHR5X3VwZGF0ZS5jCkBAIC0wLDAgKzEsMTk3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoJbGliX2RvdXBkYXRlLmMKKyAqCisgKiAJVGhlIHJvdXRpbmUgZG91cGRhdGUoKSBhbmQgaXRzIGRlcGVuZGVudHMuCisgKiAJQWxsIHBoeXNpY2FsIG91dHB1dCBpcyBjb25jZW50cmF0ZWQgaGVyZSAoZXhjZXB0IF9uY19vdXRjaCgpCisgICoJaW4gbGliX3RwdXRzLmMpLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2lmIGRlZmluZWQgX19IQUlLVV9fICYmIGRlZmluZWQgX19CRU9TX18KKyN1bmRlZiBfX0JFT1NfXworI2VuZGlmCisKKyNpZmRlZiBfX0JFT1NfXworI3VuZGVmIGZhbHNlCisjdW5kZWYgdHJ1ZQorI2luY2x1ZGUgPE9TLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoVFJBQ0UpICYmIEhBVkVfU1lTX1RJTUVTX0ggJiYgSEFWRV9USU1FUworI2RlZmluZSBVU0VfVFJBQ0VfVElNRVMgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1RSQUNFX1RJTUVTIDAKKyNlbmRpZgorCisjaWYgSEFWRV9TWVNfVElNRV9IICYmIEhBVkVfU1lTX1RJTUVfU0VMRUNUCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjaWYgVVNFX1RSQUNFX1RJTUVTCisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisjZW5kaWYKKworI2lmIFVTRV9GVU5DX1BPTEwKKyNlbGlmIEhBVkVfU0VMRUNUCisjaWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiB0dHlfdXBkYXRlLmMsdiAxLjI0NiAyMDA4LzA4LzMwIDIwOjA4OjE5IHRvbSBFeHAgJCIpCisKKy8qCisgKiBUaGlzIGRlZmluZSBjb250cm9scyB0aGUgbGluZS1icmVha291dCBvcHRpbWl6YXRpb24uICBFdmVyeSBvbmNlIGluIGEKKyAqIHdoaWxlIGR1cmluZyBzY3JlZW4gcmVmcmVzaCwgd2Ugd2FudCB0byBjaGVjayBmb3IgaW5wdXQgYW5kIGFib3J0IHRoZQorICogdXBkYXRlIGlmIHRoZXJlJ3Mgc29tZSB3YWl0aW5nLiAgQ0hFQ0tfSU5URVJWQUwgY29udHJvbHMgdGhlIG51bWJlciBvZgorICogY2hhbmdlZCBsaW5lcyB0byBiZSBlbWl0dGVkIGJldHdlZW4gaW5wdXQgY2hlY2tzLgorICoKKyAqIE5vdGU6IElucHV0LWNoZWNrLWFuZC1hYm9ydCBpcyBubyBsb25nZXIgZG9uZSBpZiB0aGUgc2NyZWVuIGlzIGJlaW5nCisgKiB1cGRhdGVkIGZyb20gc2NyYXRjaC4gIFRoaXMgaXMgYSBmZWF0dXJlLCBub3QgYSBidWcuCisgKi8KKyNkZWZpbmUgQ0hFQ0tfSU5URVJWQUwJNQorCisjZGVmaW5lIEZJTExfQkNFKCkgKFNQLT5fY29sb3JvbiAmJiAhU1AtPl9kZWZhdWx0X2NvbG9yICYmICFiYWNrX2NvbG9yX2VyYXNlKQorCitzdGF0aWMgY29uc3QgTkNVUlNFU19DSF9UIGJsYW5rY2hhciA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CitzdGF0aWMgTkNVUlNFU19DSF9UIG5vcm1hbCA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CisKKy8qCisgKiBFbmFibGUgY2hlY2tpbmcgdG8gc2VlIGlmIGRvdXBkYXRlIGFuZCBmcmllbmRzIGFyZSB0cmFja2luZyB0aGUgdHJ1ZQorICogY3Vyc29yIHBvc2l0aW9uIGNvcnJlY3RseS4gIE5PVEU6IHRoaXMgaXMgYSBkZWJ1Z2dpbmcgaGFjayB3aGljaCB3aWxsCisgKiB3b3JrIE9OTFkgb24gQU5TSS1jb21wYXRpYmxlIHRlcm1pbmFscyEKKyAqLworLyogI2RlZmluZSBQT1NJVElPTl9ERUJVRyAqLworCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgTkNVUlNFU19DSF9UIENsckJsYW5rKFdJTkRPVyAqd2luKTsKK3N0YXRpYyBpbnQgQ2xyQm90dG9tKGludCB0b3RhbCk7CitzdGF0aWMgdm9pZCBDbGVhclNjcmVlbihOQ1VSU0VTX0NIX1QgYmxhbmspOworc3RhdGljIHZvaWQgQ2xyVXBkYXRlKHZvaWQpOworc3RhdGljIHZvaWQgRGVsQ2hhcihpbnQgY291bnQpOworc3RhdGljIHZvaWQgSW5zU3RyKE5DVVJTRVNfQ0hfVCAqIGxpbmUsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBUcmFuc2Zvcm1MaW5lKGludCBjb25zdCBsaW5lbm8pOworCisjaWZkZWYgUE9TSVRJT05fREVCVUcKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVidWdnaW5nIGNvZGUuICBPbmx5IHdvcmtzIG9uIEFOU0ktc3RhbmRhcmQgdGVybWluYWxzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorcG9zaXRpb25fY2hlY2soaW50IGV4cGVjdGVkX3ksIGludCBleHBlY3RlZF94LCBjaGFyICpsZWdlbmQpCisvKiBjaGVjayB0byBzZWUgaWYgdGhlIHJlYWwgY3Vyc29yIHBvc2l0aW9uIG1hdGNoZXMgdGhlIHZpcnR1YWwgKi8KK3sKKyAgICBjaGFyIGJ1ZlsyMF07CisgICAgY2hhciAqczsKKyAgICBpbnQgeSwgeDsKKworICAgIGlmICghX25jX3RyYWNpbmcgfHwgKGV4cGVjdGVkX3kgPCAwICYmIGV4cGVjdGVkX3ggPCAwKSkKKwlyZXR1cm47CisKKyAgICBfbmNfZmx1c2goKTsKKyAgICBtZW1zZXQoYnVmLCAnXDAnLCBzaXplb2YoYnVmKSk7CisgICAgcHV0cCgiXDAzM1s2biIpOwkJLyogb25seSB3b3JrcyBvbiBBTlNJLWNvbXBhdGlibGVzICovCisgICAgX25jX2ZsdXNoKCk7CisgICAgKihzID0gYnVmKSA9IDA7CisgICAgZG8geworCWludCBhc2sgPSBzaXplb2YoYnVmKSAtIDEgLSAocyAtIGJ1Zik7CisJaW50IGdvdCA9IHJlYWQoMCwgcywgYXNrKTsKKwlpZiAoZ290ID09IDApCisJICAgIGJyZWFrOworCXMgKz0gZ290OworICAgIH0gd2hpbGUgKHN0cmNocihidWYsICdSJykgPT0gMCk7CisgICAgX3RyYWNlZigicHJvYmUgcmV0dXJuZWQgJXMiLCBfbmNfdmlzYnVmKGJ1ZikpOworCisgICAgLyogdHJ5IHRvIGludGVycHJldCBhcyBhIHBvc2l0aW9uIHJlcG9ydCAqLworICAgIGlmIChzc2NhbmYoYnVmLCAiXDAzM1slZDslZFIiLCAmeSwgJngpICE9IDIpIHsKKwlfdHJhY2VmKCJwb3NpdGlvbiBwcm9iZSBmYWlsZWQgaW4gJXMiLCBsZWdlbmQpOworICAgIH0gZWxzZSB7CisJaWYgKGV4cGVjdGVkX3ggPCAwKQorCSAgICBleHBlY3RlZF94ID0geCAtIDE7CisJaWYgKGV4cGVjdGVkX3kgPCAwKQorCSAgICBleHBlY3RlZF95ID0geSAtIDE7CisJaWYgKHkgLSAxICE9IGV4cGVjdGVkX3kgfHwgeCAtIDEgIT0gZXhwZWN0ZWRfeCkgeworCSAgICBiZWVwKCk7CisJICAgIHRwdXRzKHRwYXJtKCJcMDMzWyVkOyVkSCIsIGV4cGVjdGVkX3kgKyAxLCBleHBlY3RlZF94ICsgMSksIDEsIF9uY19vdXRjaCk7CisJICAgIF90cmFjZWYoInBvc2l0aW9uIHNlZW4gKCVkLCAlZCkgZG9lc24ndCBtYXRjaCBleHBlY3RlZCBvbmUgKCVkLCAlZCkgaW4gJXMiLAorCQkgICAgeSAtIDEsIHggLSAxLCBleHBlY3RlZF95LCBleHBlY3RlZF94LCBsZWdlbmQpOworCX0gZWxzZSB7CisJICAgIF90cmFjZWYoInBvc2l0aW9uIG1hdGNoZXMgT0sgaW4gJXMiLCBsZWdlbmQpOworCX0KKyAgICB9Cit9CisjZWxzZQorI2RlZmluZSBwb3NpdGlvbl9jaGVjayhleHBlY3RlZF95LCBleHBlY3RlZF94LCBsZWdlbmQpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBQT1NJVElPTl9ERUJVRyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE9wdGltaXplZCB1cGRhdGUgY29kZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorR29UbyhpbnQgY29uc3Qgcm93LCBpbnQgY29uc3QgY29sKQoreworICAgIFRSKFRSQUNFX01PVkUsICgiR29UbyglZCwgJWQpIGZyb20gKCVkLCAlZCkiLAorCQkgICAgcm93LCBjb2wsIFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sKSk7CisKKyAgICBwb3NpdGlvbl9jaGVjayhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCwgIkdvVG8iKTsKKworICAgIG12Y3VyKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sLCByb3csIGNvbCk7CisgICAgcG9zaXRpb25fY2hlY2soU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wsICJHb1RvMiIpOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorUHV0QXR0ckNoYXIoQ0FSR19DSF9UIGNoKQoreworICAgIGludCBjaGxlbiA9IDE7CisgICAgTkNVUlNFU19DSF9UIG15X2NoOworICAgIFBVVENfREFUQTsKKyAgICBOQ1VSU0VTX0NIX1QgdGlsZGU7CisgICAgTkNVUlNFU19DSF9UIGF0dHIgPSBDSERFUkVGKGNoKTsKKworICAgIFRSKFRSQUNFX0NIQVJQVVQsICgiUHV0QXR0ckNoYXIoJXMpIGF0ICglZCwgJWQpIiwKKwkJICAgICAgIF90cmFjZWNoX3QoY2gpLAorCQkgICAgICAgU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wpKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIC8qCisgICAgICogSWYgdGhpcyBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIsIHRoZXJlIGlzIG5vdGhpbmcgbW9yZSB0byBkby4KKyAgICAgKi8KKyAgICBpZiAoaXNXaWRlY0V4dChDSERFUkVGKGNoKSkpIHsKKwlUUihUUkFDRV9DSEFSUFVULCAoIi4uLnNraXAiKSk7CisJcmV0dXJuOworICAgIH0KKyAgICAvKgorICAgICAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlciBjZWxscyB3aGljaCB0aGUgJ2NoJyB2YWx1ZSB3aWxsIHVzZQorICAgICAqIG9uIHRoZSBzY3JlZW4uICBJdCBzaG91bGQgYmUgYXQgbGVhc3Qgb25lLgorICAgICAqLworICAgIGlmICgoY2hsZW4gPSB3Y3dpZHRoKENoYXJPZihDSERFUkVGKGNoKSkpKSA8PSAwKSB7CisJc3RhdGljIGNvbnN0IE5DVVJTRVNfQ0hfVCBibGFuayA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CisKKwkvKgorCSAqIElmIHRoZSBjaGFyYWN0ZXIgZmFsbHMgaW50byBhbnkgb2YgdGhlc2Ugc3BlY2lhbCBjYXNlcywgZG8KKwkgKiBub3QgZm9yY2UgdGhlIHJlc3VsdCB0byBhIGJsYW5rOgorCSAqCisJICogYSkgaXQgaXMgcHJpbnRhYmxlICh0aGlzIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB3Y3dpZHRoKCkpLgorCSAqIGIpIHVzZV9sZWdhY3lfY29kaW5nKCkgaGFzIGJlZW4gY2FsbGVkIHRvIG1vZGlmeSB0aGUgdHJlYXRtZW50CisJICogICAgb2YgY29kZXMgMTI4LTI1NS4KKwkgKiBjKSB0aGUgYWNzX21hcFtdIGhhcyBiZWVuIGluaXRpYWxpemVkIHRvIGFsbG93IGNvZGVzIDAtMzEKKwkgKiAgICB0byBiZSByZW5kZXJlZC4gIFRoaXMgc3VwcG9ydHMgTGludXggY29uc29sZSdzICJQQyIKKwkgKiAgICBjaGFyYWN0ZXJzLiAgQ29kZXMgMTI4LTI1NSBhcmUgYWxsb3dlZCB0aG91Z2ggdGhpcyBpcworCSAqICAgIG5vdCBjaGVja2VkLgorCSAqLworCWlmIChpczhiaXRzKENoYXJPZihDSERFUkVGKGNoKSkpCisJICAgICYmIChpc3ByaW50KENoYXJPZihDSERFUkVGKGNoKSkpCisJCXx8IChTUC0+X2xlZ2FjeV9jb2RpbmcgPiAwICYmIENoYXJPZihDSERFUkVGKGNoKSkgPj0gMTYwKQorCQl8fCAoU1AtPl9sZWdhY3lfY29kaW5nID4gMSAmJiBDaGFyT2YoQ0hERVJFRihjaCkpID49IDEyOCkKKwkJfHwgKEF0dHJPZihhdHRyKSAmIEFfQUxUQ0hBUlNFVAorCQkgICAgJiYgKChDaGFyT2ZEKGNoKSA8IEFDU19MRU4KKwkJCSAmJiBTUC0+X2Fjc19tYXAgIT0gMAorCQkJICYmIFNQLT5fYWNzX21hcFtDaGFyT2ZEKGNoKV0gIT0gMCkKKwkJCXx8IChDaGFyT2ZEKGNoKSA+PSAxMjgpKSkpKSB7CisJICAgIDsKKwl9IGVsc2UgeworCSAgICBjaCA9IENIUkVGKGJsYW5rKTsKKwkgICAgVFIoVFJBQ0VfQ0hBUlBVVCwgKCJmb3JjZWQgdG8gYmxhbmsiKSk7CisJfQorCWNobGVuID0gMTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICgoQXR0ck9mKGF0dHIpICYgQV9BTFRDSEFSU0VUKQorCSYmIFNQLT5fYWNzX21hcCAhPSAwCisJJiYgQ2hhck9mRChjaCkgPCBBQ1NfTEVOKSB7CisJbXlfY2ggPSBDSERFUkVGKGNoKTsJLyogd29yayBhcm91bmQgY29uc3QgcGFyYW0gKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCS8qCisJICogVGhpcyBpcyBjcnVkZSAmIHVnbHksIGJ1dCB3b3JrcyBtb3N0IG9mIHRoZSB0aW1lLiAgSXQgY2hlY2tzIGlmIHRoZQorCSAqIGFjc19jaGFycyBzdHJpbmcgc3BlY2lmaWVkIHRoYXQgd2UgaGF2ZSBhIG1hcHBpbmcgZm9yIHRoaXMKKwkgKiBjaGFyYWN0ZXIsIGFuZCB1c2VzIHRoZSB3aWRlLWNoYXJhY3RlciBtYXBwaW5nIHdoZW4gd2UgZXhwZWN0IHRoZQorCSAqIG5vcm1hbCBvbmUgdG8gYmUgYnJva2VuIChieSBtaXMtZGVzaWduIDstKS4KKwkgKi8KKwlpZiAoU1AtPl9zY3JlZW5fYWNzX2ZpeAorCSAgICAmJiBTUC0+X3NjcmVlbl9hY3NfbWFwW0NoYXJPZihteV9jaCldKSB7CisJICAgIFJlbUF0dHIoYXR0ciwgQV9BTFRDSEFSU0VUKTsKKwkgICAgbXlfY2ggPSBfbmNfd2Fjc1tDaGFyT2YobXlfY2gpXTsKKwl9CisjZW5kaWYKKwkvKgorCSAqIElmIHdlIChzdGlsbCkgaGF2ZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCwgaXQgaXMgdGhlIG5vcm1hbCA4Yml0CisJICogZmxhdm9yLiAgVGhlIF9zY3JlZW5fYWNzX21hcFtdIGFycmF5IHRlbGxzIGlmIHRoZSBjaGFyYWN0ZXIgd2FzCisJICogcmVhbGx5IGluIGFjc19jaGFycywgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIHdheSB3aWRlL25vcm1hbCBsaW5lCisJICogZHJhd2luZyBmbGF2b3JzIGFyZSBpbnRlZ3JhdGVkLgorCSAqLworCWlmIChBdHRyT2YoYXR0cikgJiBBX0FMVENIQVJTRVQpIHsKKwkgICAgaW50IGogPSBDaGFyT2ZEKGNoKTsKKwkgICAgY2h0eXBlIHRlbXAgPSBVQ2hhcihTUC0+X2Fjc19tYXBbal0pOworCisJICAgIGlmICghKFNQLT5fc2NyZWVuX2Fjc19tYXBbal0pKSB7CisJCVJlbUF0dHIoYXR0ciwgQV9BTFRDSEFSU0VUKTsKKwkJaWYgKHRlbXAgPT0gMCkKKwkJICAgIHRlbXAgPSAnICc7CisJICAgIH0KKwkgICAgaWYgKHRlbXAgIT0gMCkKKwkJU2V0Q2hhcihteV9jaCwgdGVtcCwgQXR0ck9mKGF0dHIpKTsKKwl9CisJY2ggPSBDSFJFRihteV9jaCk7CisgICAgfQorICAgIGlmICh0aWxkZV9nbGl0Y2ggJiYgKENoYXJPZkQoY2gpID09IEwoJ34nKSkpIHsKKwlTZXRDaGFyKHRpbGRlLCBMKCdgJyksIEF0dHJPZihhdHRyKSk7CisJY2ggPSBDSFJFRih0aWxkZSk7CisgICAgfQorCisgICAgVXBkYXRlQXR0cnMoYXR0cik7CisjaWYgIVVTRV9XSURFQ19TVVBQT1JUCisgICAgLyogRklYTUUgLSB3ZSBkbyB0aGlzIHNwZWNpYWwgY2FzZSBmb3Igc2lnbmFsIGhhbmRsaW5nLCBzaG91bGQgc2VlIGhvdyB0bworICAgICAqIG1ha2UgaXQgd29yayBmb3Igd2lkZSBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIGlmIChTUC0+X291dGNoICE9IDApIHsKKwlTUC0+X291dGNoKFVDaGFyKGNoKSk7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisJUFVUQyhDSERFUkVGKGNoKSwgU1AtPl9vZnApOwkvKiBtYWNybydzIGZhc3Rlc3QuLi4gKi8KKwlDT1VOVF9PVVRDSEFSUygxKTsKKyAgICB9CisgICAgU1AtPl9jdXJzY29sICs9IGNobGVuOworICAgIGlmIChjaGFyX3BhZGRpbmcpIHsKKwlUUFVUU19UUkFDRSgiY2hhcl9wYWRkaW5nIik7CisJcHV0cChjaGFyX3BhZGRpbmcpOworICAgIH0KK30KKworc3RhdGljIGJvb2wKK2NoZWNrX3BlbmRpbmcodm9pZCkKKy8qIGNoZWNrIGZvciBwZW5kaW5nIGlucHV0ICovCit7CisgICAgYm9vbCBoYXZlX3BlbmRpbmcgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogT25seSBjYXJyeSBvdXQgdGhpcyBjaGVjayB3aGVuIHRoZSBmbGFnIGlzIHplcm8sIG90aGVyd2lzZSB3ZSdsbAorICAgICAqIGhhdmUgdGhlIHJlZnJlc2hpbmcgc2xvdyBkb3duIGRyYXN0aWNhbGx5IChvciBzdG9wKSBpZiB0aGVyZSdzIGFuCisgICAgICogdW5yZWFkIGNoYXJhY3RlciBhdmFpbGFibGUuCisgICAgICovCisgICAgaWYgKFNQLT5fZmlmb2hvbGQgIT0gMCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoU1AtPl9jaGVja2ZkID49IDApIHsKKyNpZiBVU0VfRlVOQ19QT0xMCisJc3RydWN0IHBvbGxmZCBmZHNbMV07CisJZmRzWzBdLmZkID0gU1AtPl9jaGVja2ZkOworCWZkc1swXS5ldmVudHMgPSBQT0xMSU47CisJaWYgKHBvbGwoZmRzLCAxLCAwKSA+IDApIHsKKwkgICAgaGF2ZV9wZW5kaW5nID0gVFJVRTsKKwl9CisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorCS8qCisJICogQmVPUydzIHNlbGVjdCgpIGlzIGRlY2xhcmVkIGluIHNvY2tldC5oLCBzbyB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2VzCisJICogbm90IHNlZSBpdC4gIFRoYXQncyBqdXN0IGFzIHdlbGwsIHNpbmNlIHRoYXQgZnVuY3Rpb24gd29ya3Mgb25seSBmb3IKKwkgKiBzb2NrZXRzLiAgVGhpcyAodXNpbmcgc25vb3plIGFuZCBpb2N0bCkgd2FzIGRpc3RpbGxlZCBmcm9tIEJlJ3MgcGF0Y2gKKwkgKiBmb3IgbmN1cnNlcyB3aGljaCB1c2VzIGEgc2VwYXJhdGUgdGhyZWFkIHRvIHNpbXVsYXRlIHNlbGVjdCgpLgorCSAqCisJICogRklYTUU6IHRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhlIGlvY3RsIGFyZW4ndCB2ZXJ5IGNsZWFyIGlmIHdlIGdldAorCSAqIGludGVycnVwdGVkLgorCSAqLworCWludCBuID0gMDsKKwlpbnQgaG93bWFueSA9IGlvY3RsKDAsICdpY2hyJywgJm4pOworCWlmIChob3dtYW55ID49IDAgJiYgbiA+IDApIHsKKwkgICAgaGF2ZV9wZW5kaW5nID0gVFJVRTsKKwl9CisjZWxpZiBIQVZFX1NFTEVDVAorCWZkX3NldCBmZHNldDsKKwlzdHJ1Y3QgdGltZXZhbCBrdGltZW91dDsKKworCWt0aW1lb3V0LnR2X3NlYyA9CisJICAgIGt0aW1lb3V0LnR2X3VzZWMgPSAwOworCisJRkRfWkVSTygmZmRzZXQpOworCUZEX1NFVChTUC0+X2NoZWNrZmQsICZmZHNldCk7CisJaWYgKHNlbGVjdChTUC0+X2NoZWNrZmQgKyAxLCAmZmRzZXQsIE5VTEwsIE5VTEwsICZrdGltZW91dCkgIT0gMCkgeworCSAgICBoYXZlX3BlbmRpbmcgPSBUUlVFOworCX0KKyNlbmRpZgorICAgIH0KKyAgICBpZiAoaGF2ZV9wZW5kaW5nKSB7CisJU1AtPl9maWZvaG9sZCA9IDU7CisJX25jX2ZsdXNoKCk7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyogcHV0IGNoYXIgYXQgbG93ZXIgcmlnaHQgY29ybmVyICovCitzdGF0aWMgdm9pZAorUHV0Q2hhckxSKGNvbnN0IEFSR19DSF9UIGNoKQoreworICAgIGlmICghYXV0b19yaWdodF9tYXJnaW4pIHsKKwkvKiB3ZSBjYW4gcHV0IHRoZSBjaGFyIGRpcmVjdGx5ICovCisJUHV0QXR0ckNoYXIoY2gpOworICAgIH0gZWxzZSBpZiAoZW50ZXJfYW1fbW9kZSAmJiBleGl0X2FtX21vZGUpIHsKKwkvKiB3ZSBjYW4gc3VwcHJlc3MgYXV0b21hcmdpbiAqLworCVRQVVRTX1RSQUNFKCJleGl0X2FtX21vZGUiKTsKKwlwdXRwKGV4aXRfYW1fbW9kZSk7CisKKwlQdXRBdHRyQ2hhcihjaCk7CisJU1AtPl9jdXJzY29sLS07CisJcG9zaXRpb25fY2hlY2soU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wsICJleGl0X2FtX21vZGUiKTsKKworCVRQVVRTX1RSQUNFKCJlbnRlcl9hbV9tb2RlIik7CisJcHV0cChlbnRlcl9hbV9tb2RlKTsKKyAgICB9IGVsc2UgaWYgKChlbnRlcl9pbnNlcnRfbW9kZSAmJiBleGl0X2luc2VydF9tb2RlKQorCSAgICAgICB8fCBpbnNlcnRfY2hhcmFjdGVyIHx8IHBhcm1faWNoKSB7CisJR29UbyhzY3JlZW5fbGluZXMgLSAxLCBzY3JlZW5fY29sdW1ucyAtIDIpOworCVB1dEF0dHJDaGFyKGNoKTsKKwlHb1RvKHNjcmVlbl9saW5lcyAtIDEsIHNjcmVlbl9jb2x1bW5zIC0gMik7CisJSW5zU3RyKG5ld3Njci0+X2xpbmVbc2NyZWVuX2xpbmVzIC0gMV0udGV4dCArIHNjcmVlbl9jb2x1bW5zIC0gMiwgMSk7CisgICAgfQorfQorCisvKgorICogV3JhcCB0aGUgY3Vyc29yIHBvc2l0aW9uLCBpLmUuLCBhZHZhbmNlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZS4KKyAqLworc3RhdGljIHZvaWQKK3dyYXBfY3Vyc29yKHZvaWQpCit7CisgICAgaWYgKGVhdF9uZXdsaW5lX2dsaXRjaCkgeworCS8qCisJICogeGVubCBjYW4gbWFuaWZlc3QgdHdvIGRpZmZlcmVudCB3YXlzLiAgVGhlIHZ0MTAwIHdheSBpcyB0aGF0LCB3aGVuCisJICogeW91J2QgZXhwZWN0IHRoZSBjdXJzb3IgdG8gd3JhcCwgaXQgc3RheXMgaHVuZyBhdCB0aGUgcmlnaHQgbWFyZ2luCisJICogKG9uIHRvcCBvZiB0aGUgY2hhcmFjdGVyIGp1c3QgZW1pdHRlZCkgYW5kIGRvZXNuJ3Qgd3JhcCB1bnRpbCB0aGUKKwkgKiAqbmV4dCogZ3JhcGhpYyBjaGFyIGlzIGVtaXR0ZWQuICBUaGUgYzEwMCB3YXkgaXMgdG8gaWdub3JlIExGCisJICogcmVjZWl2ZWQganVzdCBhZnRlciBhbiBhbSB3cmFwLgorCSAqCisJICogQW4gYWdncmVzc2l2ZSB3YXkgdG8gaGFuZGxlIHRoaXMgd291bGQgYmUgdG8gZW1pdCBDUi9MRiBhZnRlciB0aGUKKwkgKiBjaGFyIGFuZCB0aGVuIGFzc3VtZSB0aGUgd3JhcCBpcyBkb25lLCB5b3UncmUgb24gdGhlIGZpcnN0IHBvc2l0aW9uCisJICogb2YgdGhlIG5leHQgbGluZSwgYW5kIHRoZSB0ZXJtaW5hbCBvdXQgb2YgaXRzIHdlaXJkIHN0YXRlLiAgSGVyZQorCSAqIGl0J3Mgc2FmZSB0byBqdXN0IHRlbGwgdGhlIGNvZGUgdGhhdCB0aGUgY3Vyc29yIGlzIGluIGh5cGVyc3BhY2UgYW5kCisJICogbGV0IHRoZSBuZXh0IG12Y3VyKCkgY2FsbCBzdHJhaWdodGVuIHRoaW5ncyBvdXQuCisJICovCisJU1AtPl9jdXJzY29sID0gLTE7CisJU1AtPl9jdXJzcm93ID0gLTE7CisgICAgfSBlbHNlIGlmIChhdXRvX3JpZ2h0X21hcmdpbikgeworCVNQLT5fY3Vyc2NvbCA9IDA7CisJU1AtPl9jdXJzcm93Kys7CisJLyoKKwkgKiBXZSd2ZSBhY3R1YWxseSBtb3ZlZCAtIGJ1dCBtYXkgaGF2ZSB0byB3b3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoCisJICogdmlkZW8gYXR0cmlidXRlcyBub3Qgd29ya2luZy4KKwkgKi8KKwlpZiAoIW1vdmVfc3RhbmRvdXRfbW9kZSAmJiBBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSkpIHsKKwkgICAgVFIoVFJBQ0VfQ0hBUlBVVCwgKCJ0dXJuaW5nIG9mZiAoJSNseCkgJXMgYmVmb3JlIHdyYXBwaW5nIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZykgQXR0ck9mKFNDUkVFTl9BVFRSUyhTUCkpLAorCQkJICAgICAgIF90cmFjZWF0dHIoQXR0ck9mKFNDUkVFTl9BVFRSUyhTUCkpKSkpOworCSAgICAodm9pZCkgVklEQVRUUihBX05PUk1BTCwgMCk7CisJfQorICAgIH0gZWxzZSB7CisJU1AtPl9jdXJzY29sLS07CisgICAgfQorICAgIHBvc2l0aW9uX2NoZWNrKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sLCAid3JhcF9jdXJzb3IiKTsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK1B1dENoYXIoY29uc3QgQVJHX0NIX1QgY2gpCisvKiBpbnNlcnQgY2hhcmFjdGVyLCBoYW5kbGluZyBhdXRvbWFyZ2luIHN0dWZmICovCit7CisgICAgaWYgKFNQLT5fY3Vyc3JvdyA9PSBzY3JlZW5fbGluZXMgLSAxICYmIFNQLT5fY3Vyc2NvbCA9PSBzY3JlZW5fY29sdW1ucyAtIDEpCisJUHV0Q2hhckxSKGNoKTsKKyAgICBlbHNlCisJUHV0QXR0ckNoYXIoY2gpOworCisgICAgaWYgKFNQLT5fY3Vyc2NvbCA+PSBzY3JlZW5fY29sdW1ucykKKwl3cmFwX2N1cnNvcigpOworCisgICAgcG9zaXRpb25fY2hlY2soU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wsICJQdXRDaGFyIik7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjaGFyYWN0ZXIgY2FuIGJlIG91dHB1dCBieSBjbGVhcmluZyBjb21tYW5kcy4gIFRoaXMKKyAqIGluY2x1ZGVzIHRlc3QgZm9yIGJlaW5nIGEgc3BhY2UgYW5kIG5vdCBpbmNsdWRpbmcgYW55ICdiYWQnIGF0dHJpYnV0ZXMsIHN1Y2gKKyAqIGFzIEFfUkVWRVJTRS4gIEFsbCBhdHRyaWJ1dGUgZmxhZ3Mgd2hpY2ggZG9uJ3QgYWZmZWN0IGFwcGVhcmFuY2Ugb2YgYSBzcGFjZQorICogb3IgY2FuIGJlIG91dHB1dCBieSBjbGVhcmluZyAoQV9DT0xPUiBpbiBjYXNlIG9mIGJjZS10ZXJtaW5hbCkgYXJlIGV4Y2x1ZGVkLgorICovCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgYm9vbAorY2FuX2NsZWFyX3dpdGgoQVJHX0NIX1QgY2gpCit7CisgICAgaWYgKCFiYWNrX2NvbG9yX2VyYXNlICYmIFNQLT5fY29sb3JvbikgeworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisJaW50IHBhaXI7CisKKwlpZiAoIVNQLT5fZGVmYXVsdF9jb2xvcikKKwkgICAgcmV0dXJuIEZBTFNFOworCWlmIChTUC0+X2RlZmF1bHRfZmcgIT0gQ19NQVNLIHx8IFNQLT5fZGVmYXVsdF9iZyAhPSBDX01BU0spCisJICAgIHJldHVybiBGQUxTRTsKKwlpZiAoKHBhaXIgPSBHZXRQYWlyKENIREVSRUYoY2gpKSkgIT0gMCkgeworCSAgICBzaG9ydCBmZywgYmc7CisJICAgIHBhaXJfY29udGVudChwYWlyLCAmZmcsICZiZyk7CisJICAgIGlmIChmZyAhPSBDX01BU0sgfHwgYmcgIT0gQ19NQVNLKQorCQlyZXR1cm4gRkFMU0U7CisJfQorI2Vsc2UKKwlpZiAoQXR0ck9mRChjaCkgJiBBX0NPTE9SKQorCSAgICByZXR1cm4gRkFMU0U7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIChJU0JMQU5LKENIREVSRUYoY2gpKSAmJgorCSAgICAoQXR0ck9mRChjaCkgJiB+KE5PTkJMQU5LX0FUVFIgfCBBX0NPTE9SKSkgPT0gQkxBTktfQVRUUik7Cit9CisKKy8qCisgKiBJc3N1ZSBhIGdpdmVuIHNwYW4gb2YgY2hhcmFjdGVycyBmcm9tIGFuIGFycmF5LgorICogTXVzdCBiZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0bzoKKyAqCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKyAqCSAgICBQdXRDaGFyKG50ZXh0W2ldKTsKKyAqIGJ1dCBjYW4gbGVhdmUgdGhlIGN1cnNvciBwb3NpdGlvbmVkIGF0IHRoZSBtaWRkbGUgb2YgdGhlIGludGVydmFsLgorICoKKyAqIFJldHVybnM6IDAgLSBjdXJzb3IgaXMgYXQgdGhlIGVuZCBvZiBpbnRlcnZhbAorICoJICAgIDEgLSBjdXJzb3IgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUKKyAqCisgKiBUaGlzIGNvZGUgaXMgb3B0aW1pemVkIHVzaW5nIGVjaCBhbmQgcmVwLgorICovCitzdGF0aWMgaW50CitFbWl0UmFuZ2UoY29uc3QgTkNVUlNFU19DSF9UICogbnRleHQsIGludCBudW0pCit7CisgICAgaW50IGk7CisKKyAgICBUUihUUkFDRV9DSEFSUFVULCAoIkVtaXRSYW5nZSAlZDolcyIsIG51bSwgX25jX3Zpc2NidWYobnRleHQsIG51bSkpKTsKKworICAgIGlmIChlcmFzZV9jaGFycyB8fCByZXBlYXRfY2hhcikgeworCXdoaWxlIChudW0gPiAwKSB7CisJICAgIGludCBydW5jb3VudDsKKwkgICAgTkNVUlNFU19DSF9UIG50ZXh0MDsKKworCSAgICB3aGlsZSAobnVtID4gMSAmJiAhQ2hhckVxKG50ZXh0WzBdLCBudGV4dFsxXSkpIHsKKwkJUHV0Q2hhcihDSFJFRihudGV4dFswXSkpOworCQludGV4dCsrOworCQludW0tLTsKKwkgICAgfQorCSAgICBudGV4dDAgPSBudGV4dFswXTsKKwkgICAgaWYgKG51bSA9PSAxKSB7CisJCVB1dENoYXIoQ0hSRUYobnRleHQwKSk7CisJCXJldHVybiAwOworCSAgICB9CisJICAgIHJ1bmNvdW50ID0gMjsKKworCSAgICB3aGlsZSAocnVuY291bnQgPCBudW0gJiYgQ2hhckVxKG50ZXh0W3J1bmNvdW50XSwgbnRleHQwKSkKKwkJcnVuY291bnQrKzsKKworCSAgICAvKgorCSAgICAgKiBUaGUgY29zdCBleHByZXNzaW9uIGluIHRoZSBtaWRkbGUgaXNuJ3QgZXhhY3RseSByaWdodC4KKwkgICAgICogX2N1cF9jaF9jb3N0IGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb3N0IGZvciBtb3ZpbmcgdG8gdGhlCisJICAgICAqIGVuZCBvZiB0aGUgZXJhc2VkIGFyZWEsIGJ1dCBub3QgdGhlIGNvc3QgaXRzZWxmICh3aGljaCB3ZQorCSAgICAgKiBjYW4ndCBjb21wdXRlIHdpdGhvdXQgZW1pdHRpbmcgdGhlIG1vdmUpLiAgVGhpcyBtYXkgcmVzdWx0CisJICAgICAqIGluIGVyYXNlX2NoYXJzIG5vdCBnZXR0aW5nIHVzZWQgaW4gc29tZSBzaXR1YXRpb25zIGZvcgorCSAgICAgKiB3aGljaCBpdCB3b3VsZCBiZSBtYXJnaW5hbGx5IGFkdmFudGFnZW91cy4KKwkgICAgICovCisJICAgIGlmIChlcmFzZV9jaGFycworCQkmJiBydW5jb3VudCA+IFNQLT5fZWNoX2Nvc3QgKyBTUC0+X2N1cF9jaF9jb3N0CisJCSYmIGNhbl9jbGVhcl93aXRoKENIUkVGKG50ZXh0MCkpKSB7CisJCVVwZGF0ZUF0dHJzKG50ZXh0MCk7CisJCXB1dHAoVFBBUk1fMShlcmFzZV9jaGFycywgcnVuY291bnQpKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGdpdmVuIGludGVydmFsLAorCQkgKiBkb24ndCBib3RoZXIgbW92aW5nIGN1cnNvciwgc2luY2UgaXQgY2FuIGJlIHRoZQorCQkgKiBsYXN0IHVwZGF0ZSBvbiB0aGUgbGluZS4KKwkJICovCisJCWlmIChydW5jb3VudCA8IG51bSkgeworCQkgICAgR29UbyhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCArIHJ1bmNvdW50KTsKKwkJfSBlbHNlIHsKKwkJICAgIHJldHVybiAxOwkvKiBjdXJzb3Igc3RheXMgaW4gdGhlIG1pZGRsZSAqLworCQl9CisJICAgIH0gZWxzZSBpZiAocmVwZWF0X2NoYXIgJiYgcnVuY291bnQgPiBTUC0+X3JlcF9jb3N0KSB7CisJCWJvb2wgd3JhcF9wb3NzaWJsZSA9IChTUC0+X2N1cnNjb2wgKyBydW5jb3VudCA+PSBzY3JlZW5fY29sdW1ucyk7CisJCWludCByZXBfY291bnQgPSBydW5jb3VudDsKKworCQlpZiAod3JhcF9wb3NzaWJsZSkKKwkJICAgIHJlcF9jb3VudC0tOworCisJCVVwZGF0ZUF0dHJzKG50ZXh0MCk7CisJCXRwdXRzKFRQQVJNXzIocmVwZWF0X2NoYXIsIENoYXJPZihudGV4dDApLCByZXBfY291bnQpLAorCQkgICAgICByZXBfY291bnQsIF9uY19vdXRjaCk7CisJCVNQLT5fY3Vyc2NvbCArPSByZXBfY291bnQ7CisKKwkJaWYgKHdyYXBfcG9zc2libGUpCisJCSAgICBQdXRDaGFyKENIUkVGKG50ZXh0MCkpOworCSAgICB9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgcnVuY291bnQ7IGkrKykKKwkJICAgIFB1dENoYXIoQ0hSRUYobnRleHRbaV0pKTsKKwkgICAgfQorCSAgICBudGV4dCArPSBydW5jb3VudDsKKwkgICAgbnVtIC09IHJ1bmNvdW50OworCX0KKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJUHV0Q2hhcihDSFJFRihudGV4dFtpXSkpOworICAgIHJldHVybiAwOworfQorCisvKgorICogT3V0cHV0IHRoZSBsaW5lIGluIHRoZSBnaXZlbiByYW5nZSBbZmlyc3QgLi4gbGFzdF0KKyAqCisgKiBJZiB0aGVyZSdzIGEgcnVuIG9mIGlkZW50aWNhbCBjaGFyYWN0ZXJzIHRoYXQncyBsb25nIGVub3VnaCB0byBqdXN0aWZ5CisgKiBjdXJzb3IgbW92ZW1lbnQsIHVzZSB0aGF0IGFsc28uCisgKgorICogUmV0dXJuczogc2FtZSBhcyBFbWl0UmFuZ2UKKyAqLworc3RhdGljIGludAorUHV0UmFuZ2UoY29uc3QgTkNVUlNFU19DSF9UICogb3RleHQsCisJIGNvbnN0IE5DVVJTRVNfQ0hfVCAqIG50ZXh0LAorCSBpbnQgcm93LAorCSBpbnQgZmlyc3QsIGludCBsYXN0KQoreworICAgIGludCBpLCBqLCBzYW1lOworCisgICAgVFIoVFJBQ0VfQ0hBUlBVVCwgKCJQdXRSYW5nZSglcCwgJXAsICVkLCAlZCwgJWQpIiwKKwkJICAgICAgIG90ZXh0LCBudGV4dCwgcm93LCBmaXJzdCwgbGFzdCkpOworCisgICAgaWYgKG90ZXh0ICE9IG50ZXh0CisJJiYgKGxhc3QgLSBmaXJzdCArIDEpID4gU1AtPl9pbmxpbmVfY29zdCkgeworCWZvciAoaiA9IGZpcnN0LCBzYW1lID0gMDsgaiA8PSBsYXN0OyBqKyspIHsKKwkgICAgaWYgKCFzYW1lICYmIGlzV2lkZWNFeHQob3RleHRbal0pKQorCQljb250aW51ZTsKKwkgICAgaWYgKENoYXJFcShvdGV4dFtqXSwgbnRleHRbal0pKSB7CisJCXNhbWUrKzsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKHNhbWUgPiBTUC0+X2lubGluZV9jb3N0KSB7CisJCSAgICBFbWl0UmFuZ2UobnRleHQgKyBmaXJzdCwgaiAtIHNhbWUgLSBmaXJzdCk7CisJCSAgICBHb1RvKHJvdywgZmlyc3QgPSBqKTsKKwkJfQorCQlzYW1lID0gMDsKKwkgICAgfQorCX0KKwlpID0gRW1pdFJhbmdlKG50ZXh0ICsgZmlyc3QsIGogLSBzYW1lIC0gZmlyc3QpOworCS8qCisJICogQWx3YXlzIHJldHVybiAxIGZvciB0aGUgbmV4dCBHb1RvKCkgYWZ0ZXIgYSBQdXRSYW5nZSgpIGlmIHdlIGZvdW5kCisJICogaWRlbnRpY2FsIGNoYXJhY3RlcnMgYXQgZW5kIG9mIGludGVydmFsCisJICovCisJcmV0dXJuIChzYW1lID09IDAgPyBpIDogMSk7CisgICAgfQorICAgIHJldHVybiBFbWl0UmFuZ2UobnRleHQgKyBmaXJzdCwgbGFzdCAtIGZpcnN0ICsgMSk7Cit9CisKKy8qIGxlYXZlIHVuYnJhY2tldGVkIGhlcmUgc28gJ2luZGVudCcgd29ya3MgKi8KKyNkZWZpbmUgTUFSS19OT0NIQU5HRSh3aW4scm93KSBcCisJCXdpbi0+X2xpbmVbcm93XS5maXJzdGNoYXIgPSBfTk9DSEFOR0U7IFwKKwkJd2luLT5fbGluZVtyb3ddLmxhc3RjaGFyID0gX05PQ0hBTkdFOyBcCisJCWlmX1VTRV9TQ1JPTExfSElOVFMod2luLT5fbGluZVtyb3ddLm9sZGluZGV4ID0gcm93KQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitkb3VwZGF0ZSh2b2lkKQoreworICAgIGludCBpOworICAgIGludCBub25lbXB0eTsKKyNpZiBVU0VfVFJBQ0VfVElNRVMKKyAgICBzdHJ1Y3QgdG1zIGJlZm9yZSwgYWZ0ZXI7CisjZW5kaWYgLyogVVNFX1RSQUNFX1RJTUVTICovCisKKyAgICBUKChUX0NBTExFRCgiZG91cGRhdGUoKSIpKSk7CisKKyAgICBpZiAoY3Vyc2NyID09IDAKKwl8fCBuZXdzY3IgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSkpIHsKKwlpZiAoY3Vyc2NyLT5fY2xlYXIpCisJICAgIF90cmFjZWYoImN1cnNjciBpcyBjbGVhciIpOworCWVsc2UKKwkgICAgX3RyYWNlZHVtcCgiY3Vyc2NyIiwgY3Vyc2NyKTsKKwlfdHJhY2VkdW1wKCJuZXdzY3IiLCBuZXdzY3IpOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICBfbmNfc2lnbmFsX2hhbmRsZXIoRkFMU0UpOworCisgICAgaWYgKFNQLT5fZmlmb2hvbGQpCisJU1AtPl9maWZvaG9sZC0tOworCisjaWYgVVNFX1NJWkVDSEFOR0UKKyAgICBpZiAoU1AtPl9lbmR3aW4gfHwgX25jX2hhbmRsZV9zaWd3aW5jaChTUCkpIHsKKwkvKgorCSAqIFRoaXMgaXMgYSB0cmFuc3BhcmVudCBleHRlbnNpb246ICBYU0kgZG9lcyBub3QgYWRkcmVzcyBpdCwKKwkgKiBhbmQgYXBwbGljYXRpb25zIG5lZWQgbm90IGtub3cgdGhhdCBuY3Vyc2VzIGNhbiBkbyBpdC4KKwkgKgorCSAqIENoZWNrIGlmIHRoZSB0ZXJtaW5hbCBzaXplIGhhcyBjaGFuZ2VkIHdoaWxlIGN1cnNlcyB3YXMgb2ZmCisJICogKHRoaXMgY2FuIGhhcHBlbiBpbiBhbiB4dGVybSwgZm9yIGV4YW1wbGUpLCBhbmQgcmVzaXplIHRoZQorCSAqIG5jdXJzZXMgZGF0YSBzdHJ1Y3R1cmVzIGFjY29yZGluZ2x5LgorCSAqLworCV9uY191cGRhdGVfc2NyZWVuc2l6ZShTUCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoU1AtPl9lbmR3aW4pIHsKKworCVQoKCJjb21pbmcgYmFjayBmcm9tIHNoZWxsIG1vZGUiKSk7CisJcmVzZXRfcHJvZ19tb2RlKCk7CisKKwlfbmNfbXZjdXJfcmVzdW1lKCk7CisJX25jX3NjcmVlbl9yZXN1bWUoKTsKKwlTUC0+X21vdXNlX3Jlc3VtZShTUCk7CisKKwlTUC0+X2VuZHdpbiA9IEZBTFNFOworICAgIH0KKyNpZiBVU0VfVFJBQ0VfVElNRVMKKyAgICAvKiB6ZXJvIHRoZSBtZXRlcmluZyBtYWNoaW5lcnkgKi8KKyAgICBSRVNFVF9PVVRDSEFSUygpOworICAgICh2b2lkKSB0aW1lcygmYmVmb3JlKTsKKyNlbmRpZiAvKiBVU0VfVFJBQ0VfVElNRVMgKi8KKworICAgIC8qCisgICAgICogVGhpcyBpcyB0aGUgc3VwcG9ydCBmb3IgbWFnaWMtY29va2llIHRlcm1pbmFscy4gIFRoZSB0aGVvcnk6ICB3ZSBzY2FuCisgICAgICogdGhlIHZpcnR1YWwgc2NyZWVuIGxvb2tpbmcgZm9yIGF0dHJpYnV0ZSB0dXJub25zLiAgV2hlcmUgd2UgZmluZCBvbmUsCisgICAgICogY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3MgcmVhbGl6YWJsZSBieSBzZWVpbmcgaWYgdGhlIHJlcXVpcmVkIG51bWJlciBvZgorICAgICAqIHVuLWF0dHJpYnV0ZWQgYmxhbmtzIGFyZSBwcmVzZW50IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGF0dHJpYnV0ZWQgcmFuZ2U7CisgICAgICogdHJ5IHRvIHNoaWZ0IHRoZSByYW5nZSBib3VuZGFyaWVzIG92ZXIgYmxhbmtzIChub3QgY2hhbmdpbmcgdGhlIHNjcmVlbgorICAgICAqIGRpc3BsYXkpIHNvIHRoaXMgYmVjb21lcyB0cnVlLiAgSWYgaXQgaXMsIHNoaWZ0IHRoZSBiZWdpbm5pbmcgYXR0cmlidXRlCisgICAgICogY2hhbmdlIGFwcHJvcHJpYXRlbHkgKHRoZSBlbmQgb25lLCBpZiB3ZSd2ZSBnb3R0ZW4gdGhpcyBmYXIsIGlzCisgICAgICogZ3VhcmFudGVlZCByb29tIGZvciBpdHMgY29va2llKS4gIElmIG5vdCwgbnVrZSB0aGUgYWRkZWQgYXR0cmlidXRlcyBvdXQKKyAgICAgKiBvZiB0aGUgc3Bhbi4KKyAgICAgKi8KKyNpZiBVU0VfWE1DX1NVUFBPUlQKKyAgICBpZiAobWFnaWNfY29va2llX2dsaXRjaCA+IDApIHsKKwlpbnQgaiwgazsKKwlhdHRyX3QgcmF0dHIgPSBBX05PUk1BTDsKKworCWZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCSAgICBmb3IgKGogPSAwOyBqIDwgc2NyZWVuX2NvbHVtbnM7IGorKykgeworCQlib29sIGZhaWxlZCA9IEZBTFNFOworCQlOQ1VSU0VTX0NIX1QgKnRoaXNsaW5lID0gbmV3c2NyLT5fbGluZVtpXS50ZXh0OworCQlhdHRyX3QgdGhpc2F0dHIgPSBBdHRyT2YodGhpc2xpbmVbal0pICYgU1AtPl94bWNfdHJpZ2dlcnM7CisJCWF0dHJfdCB0dXJub24gPSB0aGlzYXR0ciAmIH5yYXR0cjsKKworCQkvKiBpcyBhbiBhdHRyaWJ1dGUgdHVybmVkIG9uIGhlcmU/ICovCisJCWlmICh0dXJub24gPT0gMCkgeworCQkgICAgcmF0dHIgPSB0aGlzYXR0cjsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJVFIoVFJBQ0VfQVRUUlMsICgiQXQgKCVkLCAlZCk6IGZyb20gJXMuLi4iLCBpLCBqLCBfdHJhY2VhdHRyKHJhdHRyKSkpOworCQlUUihUUkFDRV9BVFRSUywgKCIuLi50byAlcyIsIF90cmFjZWF0dHIodHVybm9uKSkpOworCisJCS8qCisJCSAqIElmIHRoZSBhdHRyaWJ1dGUgY2hhbmdlIGxvY2F0aW9uIGlzIGEgYmxhbmsgd2l0aCBhICJzYWZlIgorCQkgKiBhdHRyaWJ1dGUsIHVuZG8gdGhlIGF0dHJpYnV0ZSB0dXJub24uICBUaGlzIG1heSBlbnN1cmUKKwkJICogdGhlcmUncyBlbm91Z2ggcm9vbSB0byBzZXQgdGhlIGF0dHJpYnV0ZSBiZWZvcmUgdGhlIGZpcnN0CisJCSAqIG5vbi1ibGFuayBpbiB0aGUgcnVuLgorCQkgKi8KKyNkZWZpbmUgU0FGRShhKQkoISgoYSkgJiBTUC0+X3htY190cmlnZ2VycykpCisJCWlmIChJU0JMQU5LKHRoaXNsaW5lW2pdKSAmJiBTQUZFKHR1cm5vbikpIHsKKwkJICAgIFJlbUF0dHIodGhpc2xpbmVbal0sIHR1cm5vbik7CisJCSAgICBjb250aW51ZTsKKwkJfQorCisJCS8qIGNoZWNrIHRoYXQgdGhlcmUncyBlbm91Z2ggcm9vbSBhdCBzdGFydCBvZiBzcGFuICovCisJCWZvciAoayA9IDE7IGsgPD0gbWFnaWNfY29va2llX2dsaXRjaDsgaysrKSB7CisJCSAgICBpZiAoaiAtIGsgPCAwCisJCQl8fCAhSVNCTEFOSyh0aGlzbGluZVtqIC0ga10pCisJCQl8fCAhU0FGRShBdHRyT2YodGhpc2xpbmVbaiAtIGtdKSkpIHsKKwkJCWZhaWxlZCA9IFRSVUU7CisJCQlUUihUUkFDRV9BVFRSUywgKCJObyByb29tIGF0IHN0YXJ0IGluICVkLCVkJXMlcyIsCisJCQkJCSBpLCBqIC0gaywKKwkJCQkJIChJU0JMQU5LKHRoaXNsaW5lW2ogLSBrXSkKKwkJCQkJICA/ICIiCisJCQkJCSAgOiAiOm5vbmJsYW5rIiksCisJCQkJCSAoU0FGRShBdHRyT2YodGhpc2xpbmVbaiAtIGtdKSkKKwkJCQkJICA/ICIiCisJCQkJCSAgOiAiOnVuc2FmZSIpKSk7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlpZiAoIWZhaWxlZCkgeworCQkgICAgYm9vbCBlbmRfb25zY3JlZW4gPSBGQUxTRTsKKwkJICAgIGludCBtLCBuID0gajsKKworCQkgICAgLyogZmluZCBlbmQgb2Ygc3BhbiwgaWYgaXQncyBvbnNjcmVlbiAqLworCQkgICAgZm9yIChtID0gaTsgbSA8IHNjcmVlbl9saW5lczsgbSsrKSB7CisJCQlmb3IgKDsgbiA8IHNjcmVlbl9jb2x1bW5zOyBuKyspIHsKKwkJCSAgICBhdHRyX3QgdGVzdGF0dHIgPSBBdHRyT2YobmV3c2NyLT5fbGluZVttXS50ZXh0W25dKTsKKwkJCSAgICBpZiAoKHRlc3RhdHRyICYgU1AtPl94bWNfdHJpZ2dlcnMpID09IHJhdHRyKSB7CisJCQkJZW5kX29uc2NyZWVuID0gVFJVRTsKKwkJCQlUUihUUkFDRV9BVFRSUywKKwkJCQkgICAoIlJhbmdlIGF0dHJpYnV0ZWQgd2l0aCAlcyBlbmRzIGF0ICglZCwgJWQpIiwKKwkJCQkgICAgX3RyYWNlYXR0cih0dXJub24pLCBtLCBuKSk7CisJCQkJZ290byBmb3VuZGl0OworCQkJICAgIH0KKwkJCX0KKwkJCW4gPSAwOworCQkgICAgfQorCQkgICAgVFIoVFJBQ0VfQVRUUlMsCisJCSAgICAgICAoIlJhbmdlIGF0dHJpYnV0ZWQgd2l0aCAlcyBlbmRzIG9mZnNjcmVlbiIsCisJCQlfdHJhY2VhdHRyKHR1cm5vbikpKTsKKwkJICBmb3VuZGl0OjsKKworCQkgICAgaWYgKGVuZF9vbnNjcmVlbikgeworCQkJTkNVUlNFU19DSF9UICpsYXN0bGluZSA9IG5ld3Njci0+X2xpbmVbbV0udGV4dDsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGFyZSBzYWZlbHktYXR0cmlidXRlZCBibGFua3MgYXQgdGhlIGVuZCBvZgorCQkJICogdGhlIHJhbmdlLCBzaG9ydGVuIHRoZSByYW5nZS4gIFRoaXMgd2lsbCBoZWxwIGVuc3VyZQorCQkJICogdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBhdCBlbmQgb2Ygc3Bhbi4KKwkJCSAqLworCQkJd2hpbGUgKG4gPj0gMAorCQkJICAgICAgICYmIElTQkxBTksobGFzdGxpbmVbbl0pCisJCQkgICAgICAgJiYgU0FGRShBdHRyT2YobGFzdGxpbmVbbl0pKSkgeworCQkJICAgIFJlbUF0dHIobGFzdGxpbmVbbi0tXSwgdHVybm9uKTsKKwkJCX0KKworCQkJLyogY2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCByb29tIGF0IGVuZCBvZiBzcGFuICovCisJCQlmb3IgKGsgPSAxOyBrIDw9IG1hZ2ljX2Nvb2tpZV9nbGl0Y2g7IGsrKykgeworCQkJICAgIGlmIChuICsgayA+PSBzY3JlZW5fY29sdW1ucworCQkJCXx8ICFJU0JMQU5LKGxhc3RsaW5lW24gKyBrXSkKKwkJCQl8fCAhU0FGRShBdHRyT2YobGFzdGxpbmVbbiArIGtdKSkpIHsKKwkJCQlmYWlsZWQgPSBUUlVFOworCQkJCVRSKFRSQUNFX0FUVFJTLAorCQkJCSAgICgiTm8gcm9vbSBhdCBlbmQgaW4gJWQsJWQlcyVzIiwKKwkJCQkgICAgaSwgaiAtIGssCisJCQkJICAgIChJU0JMQU5LKGxhc3RsaW5lW24gKyBrXSkKKwkJCQkgICAgID8gIiIKKwkJCQkgICAgIDogIjpub25ibGFuayIpLAorCQkJCSAgICAoU0FGRShBdHRyT2YobGFzdGxpbmVbbiArIGtdKSkKKwkJCQkgICAgID8gIiIKKwkJCQkgICAgIDogIjp1bnNhZmUiKSkpOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCisJCWlmIChmYWlsZWQpIHsKKwkJICAgIGludCBwLCBxID0gajsKKworCQkgICAgVFIoVFJBQ0VfQVRUUlMsCisJCSAgICAgICAoIkNsZWFyaW5nICVzIGJlZ2lubmluZyBhdCAoJWQsICVkKSIsCisJCQlfdHJhY2VhdHRyKHR1cm5vbiksIGksIGopKTsKKworCQkgICAgLyogdHVybiBvZmYgbmV3IGF0dHJpYnV0ZXMgb3ZlciBzcGFuICovCisJCSAgICBmb3IgKHAgPSBpOyBwIDwgc2NyZWVuX2xpbmVzOyBwKyspIHsKKwkJCWZvciAoOyBxIDwgc2NyZWVuX2NvbHVtbnM7IHErKykgeworCQkJICAgIGF0dHJfdCB0ZXN0YXR0ciA9IEF0dHJPZihuZXdzY3ItPl9saW5lW3BdLnRleHRbcV0pOworCQkJICAgIGlmICgodGVzdGF0dHIgJiBTUC0+X3htY190cmlnZ2VycykgPT0gcmF0dHIpCisJCQkJZ290byBmb3VuZGVuZDsKKwkJCSAgICBSZW1BdHRyKG5ld3Njci0+X2xpbmVbcF0udGV4dFtxXSwgdHVybm9uKTsKKwkJCX0KKwkJCXEgPSAwOworCQkgICAgfQorCQkgIGZvdW5kZW5kOjsKKwkJfSBlbHNlIHsKKwkJICAgIFRSKFRSQUNFX0FUVFJTLAorCQkgICAgICAgKCJDb29raWUgc3BhY2UgZm9yICVzIGZvdW5kIGJlZm9yZSAoJWQsICVkKSIsCisJCQlfdHJhY2VhdHRyKHR1cm5vbiksIGksIGopKTsKKworCQkgICAgLyoKKwkJICAgICAqIEJhY2sgdXAgdGhlIHN0YXJ0IG9mIHJhbmdlIHNvIHRoZXJlJ3Mgcm9vbSBmb3IgY29va2llcworCQkgICAgICogYmVmb3JlIHRoZSBmaXJzdCBub25ibGFuayBjaGFyYWN0ZXIuCisJCSAgICAgKi8KKwkJICAgIGZvciAoayA9IDE7IGsgPD0gbWFnaWNfY29va2llX2dsaXRjaDsgaysrKQorCQkJQWRkQXR0cih0aGlzbGluZVtqIC0ga10sIHR1cm5vbik7CisJCX0KKworCQlyYXR0ciA9IHRoaXNhdHRyOworCSAgICB9CisJfQorCisjaWZkZWYgVFJBQ0UKKwkvKiBzaG93IGFsdGVyZWQgaGlnaGxpZ2h0cyBhZnRlciBtYWdpYy1jb29raWUgY2hlY2sgKi8KKwlpZiAoVVNFX1RSQUNFRihUUkFDRV9VUERBVEUpKSB7CisJICAgIF90cmFjZWYoIkFmdGVyIG1hZ2ljLWNvb2tpZSBjaGVjay4uLiIpOworCSAgICBfdHJhY2VkdW1wKCJuZXdzY3IiLCBuZXdzY3IpOworCSAgICBfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworCX0KKyNlbmRpZiAvKiBUUkFDRSAqLworICAgIH0KKyNlbmRpZiAvKiBVU0VfWE1DX1NVUFBPUlQgKi8KKworICAgIG5vbmVtcHR5ID0gMDsKKyAgICBpZiAoY3Vyc2NyLT5fY2xlYXIgfHwgbmV3c2NyLT5fY2xlYXIpIHsJLyogZm9yY2UgcmVmcmVzaCA/ICovCisJQ2xyVXBkYXRlKCk7CisJY3Vyc2NyLT5fY2xlYXIgPSBGQUxTRTsJLyogcmVzZXQgZmxhZyAqLworCW5ld3Njci0+X2NsZWFyID0gRkFMU0U7CS8qIHJlc2V0IGZsYWcgKi8KKyAgICB9IGVsc2UgeworCWludCBjaGFuZ2VkbGluZXMgPSBDSEVDS19JTlRFUlZBTDsKKworCWlmIChjaGVja19wZW5kaW5nKCkpCisJICAgIGdvdG8gY2xlYW51cDsKKworCW5vbmVtcHR5ID0gbWluKHNjcmVlbl9saW5lcywgbmV3c2NyLT5fbWF4eSArIDEpOworCisJaWYgKFNQLT5fc2Nyb2xsaW5nKSB7CisJICAgIF9uY19zY3JvbGxfb3B0aW1pemUoKTsKKwl9CisKKwlub25lbXB0eSA9IENsckJvdHRvbShub25lbXB0eSk7CisKKwlUUihUUkFDRV9VUERBVEUsICgiVHJhbnNmb3JtaW5nIGxpbmVzLCBub25lbXB0eSAlZCIsIG5vbmVtcHR5KSk7CisJZm9yIChpID0gMDsgaSA8IG5vbmVtcHR5OyBpKyspIHsKKwkgICAgLyoKKwkgICAgICogSGVyZSBpcyBvdXIgbGluZS1icmVha291dCBvcHRpbWl6YXRpb24uCisJICAgICAqLworCSAgICBpZiAoY2hhbmdlZGxpbmVzID09IENIRUNLX0lOVEVSVkFMKSB7CisJCWlmIChjaGVja19wZW5kaW5nKCkpCisJCSAgICBnb3RvIGNsZWFudXA7CisJCWNoYW5nZWRsaW5lcyA9IDA7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBuZXdzY3ItPmxpbmVbaV0uZmlyc3RjaGFyIGlzIG5vcm1hbGx5IHNldAorCSAgICAgKiBieSB3bm91dHJlZnJlc2guICBjdXJzY3ItPmxpbmVbaV0uZmlyc3RjaGFyCisJICAgICAqIGlzIG5vcm1hbGx5IHNldCBieSBfbmNfc2Nyb2xsX3dpbmRvdyBpbiB0aGUKKwkgICAgICogdmVydGljYWwtbW92ZW1lbnQgb3B0aW1pemF0aW9uIGNvZGUsCisJICAgICAqLworCSAgICBpZiAobmV3c2NyLT5fbGluZVtpXS5maXJzdGNoYXIgIT0gX05PQ0hBTkdFCisJCXx8IGN1cnNjci0+X2xpbmVbaV0uZmlyc3RjaGFyICE9IF9OT0NIQU5HRSkgeworCQlUcmFuc2Zvcm1MaW5lKGkpOworCQljaGFuZ2VkbGluZXMrKzsKKwkgICAgfQorCisJICAgIC8qIG1hcmsgbGluZSBjaGFuZ2VkIHN1Y2Nlc3NmdWxseSAqLworCSAgICBpZiAoaSA8PSBuZXdzY3ItPl9tYXh5KSB7CisJCU1BUktfTk9DSEFOR0UobmV3c2NyLCBpKTsKKwkgICAgfQorCSAgICBpZiAoaSA8PSBjdXJzY3ItPl9tYXh5KSB7CisJCU1BUktfTk9DSEFOR0UoY3Vyc2NyLCBpKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBwdXQgZXZlcnl0aGluZyBiYWNrIGluIHN5bmMgKi8KKyAgICBmb3IgKGkgPSBub25lbXB0eTsgaSA8PSBuZXdzY3ItPl9tYXh5OyBpKyspIHsKKwlNQVJLX05PQ0hBTkdFKG5ld3NjciwgaSk7CisgICAgfQorICAgIGZvciAoaSA9IG5vbmVtcHR5OyBpIDw9IGN1cnNjci0+X21heHk7IGkrKykgeworCU1BUktfTk9DSEFOR0UoY3Vyc2NyLCBpKTsKKyAgICB9CisKKyAgICBpZiAoIW5ld3Njci0+X2xlYXZlb2spIHsKKwljdXJzY3ItPl9jdXJ4ID0gbmV3c2NyLT5fY3VyeDsKKwljdXJzY3ItPl9jdXJ5ID0gbmV3c2NyLT5fY3VyeTsKKworCUdvVG8oY3Vyc2NyLT5fY3VyeSwgY3Vyc2NyLT5fY3VyeCk7CisgICAgfQorCisgIGNsZWFudXA6CisgICAgLyoKKyAgICAgKiBXZSB3b3VsZCBsaWtlIHRvIGtlZXAgdGhlIHBoeXNpY2FsIHNjcmVlbiBpbiBub3JtYWwgbW9kZSBpbiBjYXNlIHdlIGdldAorICAgICAqIG90aGVyIHByb2Nlc3NlcyB3cml0aW5nIHRvIHRoZSBzY3JlZW4uICBUaGlzIGdvYWwgY2Fubm90IGJlIG1ldCBmb3IKKyAgICAgKiBtYWdpYyBjb29raWVzIHNpbmNlIGl0IGludGVyZmVyZXMgd2l0aCBhdHRyaWJ1dGVzIHRoYXQgbWF5IHByb3BhZ2F0ZQorICAgICAqIHBhc3QgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICovCisjaWYgVVNFX1hNQ19TVVBQT1JUCisgICAgaWYgKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggIT0gMCkKKyNlbmRpZgorCVVwZGF0ZUF0dHJzKG5vcm1hbCk7CisKKyAgICBfbmNfZmx1c2goKTsKKyAgICBXSU5ET1dfQVRUUlMoY3Vyc2NyKSA9IFdJTkRPV19BVFRSUyhuZXdzY3IpOworCisjaWYgVVNFX1RSQUNFX1RJTUVTCisgICAgKHZvaWQpIHRpbWVzKCZhZnRlcik7CisgICAgVFIoVFJBQ0VfVElNRVMsCisgICAgICAgKCJVcGRhdGUgY29zdDogJWxkIGNoYXJzLCAlbGQgY2xvY2tzIHN5c3RlbSB0aW1lLCAlbGQgY2xvY2tzIHVzZXIgdGltZSIsCisJX25jX291dGNoYXJzLAorCShsb25nKSAoYWZ0ZXIudG1zX3N0aW1lIC0gYmVmb3JlLnRtc19zdGltZSksCisJKGxvbmcpIChhZnRlci50bXNfdXRpbWUgLSBiZWZvcmUudG1zX3V0aW1lKSkpOworI2VuZGlmIC8qIFVTRV9UUkFDRV9USU1FUyAqLworCisgICAgX25jX3NpZ25hbF9oYW5kbGVyKFRSVUUpOworCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKy8qCisgKglDbHJCbGFuayh3aW4pCisgKgorICoJUmV0dXJucyB0aGUgYXR0cmlidXRlZCBjaGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgImNsZWFyZWQiCisgKglzY3JlZW4uICBJZiB0aGUgdGVybWluYWwgaGFzIHRoZSBiYWNrLWNvbG9yLWVyYXNlIGZlYXR1cmUsIHRoaXMgd2lsbCBiZQorICoJY29sb3JlZCBhY2NvcmRpbmcgdG8gdGhlIHdia2dkKCkgY2FsbC4KKyAqCisgKglXZSB0cmVhdCAnY3Vyc2NyJyBzcGVjaWFsbHkgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3NlZCB0byBiZSBzZXQgZGlyZWN0bHkKKyAqCWluIHRoZSB3YmtnZCgpIGNhbGwuICBBc3N1bWUgJ3N0ZHNjcicgZm9yIHRoaXMgY2FzZS4KKyAqLworI2RlZmluZSBCQ0VfQVRUUlMgKEFfTk9STUFMfEFfQ09MT1IpCisjZGVmaW5lIEJDRV9CS0dEKHdpbikgKCgod2luKSA9PSBjdXJzY3IgPyBzdGRzY3IgOiAod2luKSktPl9uY19ia2dkKQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgTkNVUlNFU19DSF9UCitDbHJCbGFuayhXSU5ET1cgKndpbikKK3sKKyAgICBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBibGFua2NoYXI7CisgICAgaWYgKGJhY2tfY29sb3JfZXJhc2UpCisJQWRkQXR0cihibGFuaywgKEF0dHJPZihCQ0VfQktHRCh3aW4pKSAmIEJDRV9BVFRSUykpOworICAgIHJldHVybiBibGFuazsKK30KKworLyoKKyoqCUNsclVwZGF0ZSgpCisqKgorKioJVXBkYXRlIGJ5IGNsZWFyaW5nIGFuZCByZWRyYXdpbmcgdGhlIGVudGlyZSBzY3JlZW4uCisqKgorKi8KKworc3RhdGljIHZvaWQKK0NsclVwZGF0ZSh2b2lkKQoreworICAgIGludCBpOworICAgIE5DVVJTRVNfQ0hfVCBibGFuayA9IENsckJsYW5rKHN0ZHNjcik7CisgICAgaW50IG5vbmVtcHR5ID0gbWluKHNjcmVlbl9saW5lcywgbmV3c2NyLT5fbWF4eSArIDEpOworCisgICAgVFIoVFJBQ0VfVVBEQVRFLCAoVF9DQUxMRUQoIkNsclVwZGF0ZSIpKSk7CisKKyAgICBDbGVhclNjcmVlbihibGFuayk7CisKKyAgICBUUihUUkFDRV9VUERBVEUsICgidXBkYXRpbmcgc2NyZWVuIGZyb20gc2NyYXRjaCIpKTsKKworICAgIG5vbmVtcHR5ID0gQ2xyQm90dG9tKG5vbmVtcHR5KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBub25lbXB0eTsgaSsrKQorCVRyYW5zZm9ybUxpbmUoaSk7CisKKyAgICBUUihUUkFDRV9VUERBVEUsIChUX1JFVFVSTigiIikpKTsKK30KKworLyoKKyoqCUNsclRvRU9MKGJsYW5rKQorKioKKyoqCUNsZWFyIHRvIGVuZCBvZiBjdXJyZW50IGxpbmUsIHN0YXJ0aW5nIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24KKyovCisKK3N0YXRpYyB2b2lkCitDbHJUb0VPTChOQ1VSU0VTX0NIX1QgYmxhbmssIGJvb2wgbmVlZGNsZWFyKQoreworICAgIGludCBqOworCisgICAgaWYgKGN1cnNjciAhPSAwCisJJiYgU1AtPl9jdXJzcm93ID49IDApIHsKKwlmb3IgKGogPSBTUC0+X2N1cnNjb2w7IGogPCBzY3JlZW5fY29sdW1uczsgaisrKSB7CisJICAgIGlmIChqID49IDApIHsKKwkJTkNVUlNFU19DSF9UICpjcCA9ICYoY3Vyc2NyLT5fbGluZVtTUC0+X2N1cnNyb3ddLnRleHRbal0pOworCisJCWlmICghQ2hhckVxKCpjcCwgYmxhbmspKSB7CisJCSAgICAqY3AgPSBibGFuazsKKwkJICAgIG5lZWRjbGVhciA9IFRSVUU7CisJCX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCW5lZWRjbGVhciA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKG5lZWRjbGVhcikgeworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgiY2xyX2VvbCIpOworCWlmIChjbHJfZW9sICYmIFNQLT5fZWxfY29zdCA8PSAoc2NyZWVuX2NvbHVtbnMgLSBTUC0+X2N1cnNjb2wpKSB7CisJICAgIHB1dHAoY2xyX2VvbCk7CisJfSBlbHNlIHsKKwkgICAgaW50IGNvdW50ID0gKHNjcmVlbl9jb2x1bW5zIC0gU1AtPl9jdXJzY29sKTsKKwkgICAgd2hpbGUgKGNvdW50LS0gPiAwKQorCQlQdXRDaGFyKENIUkVGKGJsYW5rKSk7CisJfQorICAgIH0KK30KKworLyoKKyoqCUNsclRvRU9TKGJsYW5rKQorKioKKyoqCUNsZWFyIHRvIGVuZCBvZiBzY3JlZW4sIHN0YXJ0aW5nIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24KKyovCisKK3N0YXRpYyB2b2lkCitDbHJUb0VPUyhOQ1VSU0VTX0NIX1QgYmxhbmspCit7CisgICAgaW50IHJvdywgY29sOworCisgICAgcm93ID0gU1AtPl9jdXJzcm93OworICAgIGNvbCA9IFNQLT5fY3Vyc2NvbDsKKworICAgIFVwZGF0ZUF0dHJzKGJsYW5rKTsKKyAgICBUUFVUU19UUkFDRSgiY2xyX2VvcyIpOworICAgIHRwdXRzKGNscl9lb3MsIHNjcmVlbl9saW5lcyAtIHJvdywgX25jX291dGNoKTsKKworICAgIHdoaWxlIChjb2wgPCBzY3JlZW5fY29sdW1ucykKKwljdXJzY3ItPl9saW5lW3Jvd10udGV4dFtjb2wrK10gPSBibGFuazsKKworICAgIGZvciAocm93Kys7IHJvdyA8IHNjcmVlbl9saW5lczsgcm93KyspIHsKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IHNjcmVlbl9jb2x1bW5zOyBjb2wrKykKKwkgICAgY3Vyc2NyLT5fbGluZVtyb3ddLnRleHRbY29sXSA9IGJsYW5rOworICAgIH0KK30KKworLyoKKyAqCUNsckJvdHRvbSh0b3RhbCkKKyAqCisgKglUZXN0IGlmIGNsZWFyaW5nIHRoZSBlbmQgb2YgdGhlIHNjcmVlbiB3b3VsZCBzYXRpc2Z5IHBhcnQgb2YgdGhlCisgKglzY3JlZW4tdXBkYXRlLiAgRG8gdGhpcyBieSBzY2FubmluZyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgbGluZXMgaW4gdGhlCisgKglzY3JlZW4sIGNoZWNraW5nIGlmIGVhY2ggaXMgYmxhbmssIGFuZCBvbmUgb3IgbW9yZSBhcmUgY2hhbmdlZC4KKyAqLworc3RhdGljIGludAorQ2xyQm90dG9tKGludCB0b3RhbCkKK3sKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7CisgICAgaW50IHRvcCA9IHRvdGFsOworICAgIGludCBsYXN0ID0gbWluKHNjcmVlbl9jb2x1bW5zLCBuZXdzY3ItPl9tYXh4ICsgMSk7CisgICAgTkNVUlNFU19DSF9UIGJsYW5rID0gbmV3c2NyLT5fbGluZVt0b3RhbCAtIDFdLnRleHRbbGFzdCAtIDFdOworICAgIGJvb2wgb2s7CisKKyAgICBpZiAoY2xyX2VvcyAmJiBjYW5fY2xlYXJfd2l0aChDSFJFRihibGFuaykpKSB7CisKKwlmb3IgKHJvdyA9IHRvdGFsIC0gMTsgcm93ID49IDA7IHJvdy0tKSB7CisJICAgIGZvciAoY29sID0gMCwgb2sgPSBUUlVFOyBvayAmJiBjb2wgPCBsYXN0OyBjb2wrKykgeworCQlvayA9IChDaGFyRXEobmV3c2NyLT5fbGluZVtyb3ddLnRleHRbY29sXSwgYmxhbmspKTsKKwkgICAgfQorCSAgICBpZiAoIW9rKQorCQlicmVhazsKKworCSAgICBmb3IgKGNvbCA9IDA7IG9rICYmIGNvbCA8IGxhc3Q7IGNvbCsrKSB7CisJCW9rID0gKENoYXJFcShjdXJzY3ItPl9saW5lW3Jvd10udGV4dFtjb2xdLCBibGFuaykpOworCSAgICB9CisJICAgIGlmICghb2spCisJCXRvcCA9IHJvdzsKKwl9CisKKwkvKiBkb24ndCB1c2UgY2xyX2VvcyBmb3IganVzdCBvbmUgbGluZSBpZiBjbHJfZW9sIGF2YWlsYWJsZSAqLworCWlmICh0b3AgPCB0b3RhbCkgeworCSAgICBHb1RvKHRvcCwgMCk7CisJICAgIENsclRvRU9TKGJsYW5rKTsKKwkgICAgaWYgKFNQLT5vbGRoYXNoICYmIFNQLT5uZXdoYXNoKSB7CisJCWZvciAocm93ID0gdG9wOyByb3cgPCBzY3JlZW5fbGluZXM7IHJvdysrKQorCQkgICAgU1AtPm9sZGhhc2hbcm93XSA9IFNQLT5uZXdoYXNoW3Jvd107CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiB0b3A7Cit9CisKKyNpZiBVU0VfWE1DX1NVUFBPUlQKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2RlZmluZSBjaGVja194bWNfdHJhbnNpdGlvbihhLCBiKSBcCisgICAgKCgoKGEpLT5hdHRyIF4gKGIpLT5hdHRyKSAmIH4oKGEpLT5hdHRyKSAmIFNQLT5feG1jX3RyaWdnZXJzKSAhPSAwKQorI2RlZmluZSB4bWNfdHVybl9vbihhLGIpIGNoZWNrX3htY190cmFuc2l0aW9uKCYoYSksICYoYikpCisjZWxzZQorI2RlZmluZSB4bWNfdHVybl9vbihhLGIpICgoKChhKV4oYikpICYgfihhKSAmIFNQLT5feG1jX3RyaWdnZXJzKSAhPSAwKQorI2VuZGlmCisKKyNkZWZpbmUgeG1jX25ldyhyLGMpIG5ld3Njci0+X2xpbmVbcl0udGV4dFtjXQorI2RlZmluZSB4bWNfdHVybl9vZmYoYSxiKSB4bWNfdHVybl9vbihiLGEpCisjZW5kaWYgLyogVVNFX1hNQ19TVVBQT1JUICovCisKKy8qCisqKglUcmFuc2Zvcm1MaW5lKGxpbmVubykKKyoqCisqKglUcmFuc2Zvcm0gdGhlIGdpdmVuIGxpbmUgaW4gY3Vyc2NyIHRvIHRoZSBvbmUgaW4gbmV3c2NyLCB1c2luZworKioJSW5zZXJ0L0RlbGV0ZSBDaGFyYWN0ZXIgaWYgX25jX2lkY29rICYmIGhhc19pYygpLgorKioKKyoqCQlmaXJzdENoYXIgPSBwb3NpdGlvbiBvZiBmaXJzdCBkaWZmZXJlbnQgY2hhcmFjdGVyIGluIGxpbmUKKyoqCQlvTGFzdENoYXIgPSBwb3NpdGlvbiBvZiBsYXN0IGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gb2xkIGxpbmUKKyoqCQluTGFzdENoYXIgPSBwb3NpdGlvbiBvZiBsYXN0IGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gbmV3IGxpbmUKKyoqCisqKgkJbW92ZSB0byBmaXJzdENoYXIKKyoqCQlvdmVyd3JpdGUgY2hhcnMgdXAgdG8gbWluKG9MYXN0Q2hhciwgbkxhc3RDaGFyKQorKioJCWlmIG9MYXN0Q2hhciA8IG5MYXN0Q2hhcgorKioJCQlpbnNlcnQgbmV3TGluZVtvTGFzdENoYXIrMS4ubkxhc3RDaGFyXQorKioJCWVsc2UKKyoqCQkJZGVsZXRlIG9MYXN0Q2hhciAtIG5MYXN0Q2hhciBzcGFjZXMKKyovCisKK3N0YXRpYyB2b2lkCitUcmFuc2Zvcm1MaW5lKGludCBjb25zdCBsaW5lbm8pCit7CisgICAgaW50IGZpcnN0Q2hhciwgb0xhc3RDaGFyLCBuTGFzdENoYXI7CisgICAgTkNVUlNFU19DSF9UICpuZXdMaW5lID0gbmV3c2NyLT5fbGluZVtsaW5lbm9dLnRleHQ7CisgICAgTkNVUlNFU19DSF9UICpvbGRMaW5lID0gY3Vyc2NyLT5fbGluZVtsaW5lbm9dLnRleHQ7CisgICAgaW50IG47CisgICAgYm9vbCBhdHRyY2hhbmdlZCA9IEZBTFNFOworCisgICAgVFIoVFJBQ0VfVVBEQVRFLCAoVF9DQUxMRUQoIlRyYW5zZm9ybUxpbmUoJWQpIiksIGxpbmVubykpOworCisgICAgLyogY29weSBuZXcgaGFzaCB2YWx1ZSB0byBvbGQgb25lICovCisgICAgaWYgKFNQLT5vbGRoYXNoICYmIFNQLT5uZXdoYXNoKQorCVNQLT5vbGRoYXNoW2xpbmVub10gPSBTUC0+bmV3aGFzaFtsaW5lbm9dOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBoYXZlIGNvbG9ycywgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGhhdmluZyB0d28gY29sb3IgcGFpcnMKKyAgICAgKiB0aGF0IGRpc3BsYXkgYXMgdGhlIHNhbWUgY29sb3JzLiAgRm9yIGluc3RhbmNlLCBMeW54IGRvZXMgdGhpcy4gIENoZWNrCisgICAgICogZm9yIHRoaXMgY2FzZSwgYW5kIHVwZGF0ZSB0aGUgb2xkIGxpbmUgd2l0aCB0aGUgbmV3IGxpbmUncyBjb2xvcnMgd2hlbgorICAgICAqIHRoZXkgYXJlIGVxdWl2YWxlbnQuCisgICAgICovCisgICAgaWYgKFNQLT5fY29sb3JvbikgeworCWludCBvbGRQYWlyOworCWludCBuZXdQYWlyOworCisJZm9yIChuID0gMDsgbiA8IHNjcmVlbl9jb2x1bW5zOyBuKyspIHsKKwkgICAgaWYgKCFDaGFyRXEobmV3TGluZVtuXSwgb2xkTGluZVtuXSkpIHsKKwkJb2xkUGFpciA9IEdldFBhaXIob2xkTGluZVtuXSk7CisJCW5ld1BhaXIgPSBHZXRQYWlyKG5ld0xpbmVbbl0pOworCQlpZiAob2xkUGFpciAhPSBuZXdQYWlyCisJCSAgICAmJiB1bkNvbG9yKG9sZExpbmVbbl0pID09IHVuQ29sb3IobmV3TGluZVtuXSkpIHsKKwkJICAgIGlmIChvbGRQYWlyIDwgQ09MT1JfUEFJUlMKKwkJCSYmIG5ld1BhaXIgPCBDT0xPUl9QQUlSUworCQkJJiYgU1AtPl9jb2xvcl9wYWlyc1tvbGRQYWlyXSA9PSBTUC0+X2NvbG9yX3BhaXJzW25ld1BhaXJdKSB7CisJCQlTZXRQYWlyKG9sZExpbmVbbl0sIEdldFBhaXIobmV3TGluZVtuXSkpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGNlb2xfc3RhbmRvdXRfZ2xpdGNoICYmIGNscl9lb2wpIHsKKwlmaXJzdENoYXIgPSAwOworCXdoaWxlIChmaXJzdENoYXIgPCBzY3JlZW5fY29sdW1ucykgeworCSAgICBpZiAoIVNhbWVBdHRyT2YobmV3TGluZVtmaXJzdENoYXJdLCBvbGRMaW5lW2ZpcnN0Q2hhcl0pKSB7CisJCWF0dHJjaGFuZ2VkID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZmlyc3RDaGFyKys7CisJfQorICAgIH0KKworICAgIGZpcnN0Q2hhciA9IDA7CisKKyAgICBpZiAoYXR0cmNoYW5nZWQpIHsJCS8qIHdlIG1heSBoYXZlIHRvIGRpc3JlZ2FyZCB0aGUgd2hvbGUgbGluZSAqLworCUdvVG8obGluZW5vLCBmaXJzdENoYXIpOworCUNsclRvRU9MKENsckJsYW5rKGN1cnNjciksIEZBTFNFKTsKKwlQdXRSYW5nZShvbGRMaW5lLCBuZXdMaW5lLCBsaW5lbm8sIDAsIChzY3JlZW5fY29sdW1ucyAtIDEpKTsKKyNpZiBVU0VfWE1DX1NVUFBPUlQKKworCS8qCisJICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGxvb3AgdG8gcGFpbnQgY2hhcmFjdGVycyB3aGljaCBtYXkgaGF2ZSB0aGUKKwkgKiBtYWdpYyBjb29raWUgZ2xpdGNoIGVtYmVkZGVkLiAgSXQgZG9lc24ndCBrbm93IG11Y2ggYWJvdXQgdmlkZW8KKwkgKiBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBjb250aW51ZWQgZnJvbSBvbmUgbGluZSB0byB0aGUgbmV4dC4gIEl0CisJICogYXNzdW1lcyB0aGF0IHdlIGhhdmUgZmlsdGVyZWQgb3V0IHJlcXVlc3RzIGZvciBhdHRyaWJ1dGUgY2hhbmdlcworCSAqIHRoYXQgZG8gbm90IGdldCBtYXBwZWQgdG8gYmxhbmsgcG9zaXRpb25zLgorCSAqCisJICogRklYTUU6IHdlIGFyZSBub3Qga2VlcGluZyB0cmFjayBvZiB3aGVyZSB3ZSBwdXQgdGhlIGNvb2tpZXMsIHNvIHRoaXMKKwkgKiB3aWxsIHdvcmsgcHJvcGVybHkgb25seSBvbmNlLCBzaW5jZSB3ZSBtYXkgb3ZlcndyaXRlIGEgY29va2llIGluIGEKKwkgKiBmb2xsb3dpbmcgb3BlcmF0aW9uLgorCSAqLworICAgIH0gZWxzZSBpZiAobWFnaWNfY29va2llX2dsaXRjaCA+IDApIHsKKwlHb1RvKGxpbmVubywgZmlyc3RDaGFyKTsKKwlmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2NvbHVtbnM7IG4rKykgeworCSAgICBpbnQgbSA9IG4gKyBtYWdpY19jb29raWVfZ2xpdGNoOworCisJICAgIC8qIGNoZWNrIGZvciB0dXJuLW9uOgorCSAgICAgKiBJZiB3ZSBhcmUgd3JpdGluZyBhbiBhdHRyaWJ1dGVkIGJsYW5rLCB3aGVyZSB0aGUKKwkgICAgICogcHJldmlvdXMgY2VsbCBpcyBub3QgYXR0cmlidXRlZC4KKwkgICAgICovCisJICAgIGlmIChJU0JMQU5LKG5ld0xpbmVbbl0pCisJCSYmICgobiA+IDAKKwkJICAgICAmJiB4bWNfdHVybl9vbihuZXdMaW5lW24gLSAxXSwgbmV3TGluZVtuXSkpCisJCSAgICB8fCAobiA9PSAwCisJCQkmJiBsaW5lbm8gPiAwCisJCQkmJiB4bWNfdHVybl9vbih4bWNfbmV3KGxpbmVubyAtIDEsIHNjcmVlbl9jb2x1bW5zIC0gMSksCisJCQkJICAgICAgIG5ld0xpbmVbbl0pKSkpIHsKKwkJbiA9IG07CisJICAgIH0KKworCSAgICBQdXRDaGFyKENIUkVGKG5ld0xpbmVbbl0pKTsKKworCSAgICAvKiBjaGVjayBmb3IgdHVybi1vZmY6CisJICAgICAqIElmIHdlIGFyZSB3cml0aW5nIGFuIGF0dHJpYnV0ZWQgbm9uLWJsYW5rLCB3aGVyZSB0aGUKKwkgICAgICogbmV4dCBjZWxsIGlzIGJsYW5rLCBhbmQgbm90IGF0dHJpYnV0ZWQuCisJICAgICAqLworCSAgICBpZiAoIUlTQkxBTksobmV3TGluZVtuXSkKKwkJJiYgKChuICsgMSA8IHNjcmVlbl9jb2x1bW5zCisJCSAgICAgJiYgeG1jX3R1cm5fb2ZmKG5ld0xpbmVbbl0sIG5ld0xpbmVbbiArIDFdKSkKKwkJICAgIHx8IChuICsgMSA+PSBzY3JlZW5fY29sdW1ucworCQkJJiYgbGluZW5vICsgMSA8IHNjcmVlbl9saW5lcworCQkJJiYgeG1jX3R1cm5fb2ZmKG5ld0xpbmVbbl0sIHhtY19uZXcobGluZW5vICsgMSwgMCkpKSkpIHsKKwkJbiA9IG07CisJICAgIH0KKworCX0KKyNlbmRpZgorICAgIH0gZWxzZSB7CisJTkNVUlNFU19DSF9UIGJsYW5rOworCisJLyogaXQgbWF5IGJlIGNoZWFwIHRvIGNsZWFyIGxlYWRpbmcgd2hpdGVzcGFjZSB3aXRoIGNscl9ib2wgKi8KKwlibGFuayA9IG5ld0xpbmVbMF07CisJaWYgKGNscl9ib2wgJiYgY2FuX2NsZWFyX3dpdGgoQ0hSRUYoYmxhbmspKSkgeworCSAgICBpbnQgb0ZpcnN0Q2hhciwgbkZpcnN0Q2hhcjsKKworCSAgICBmb3IgKG9GaXJzdENoYXIgPSAwOyBvRmlyc3RDaGFyIDwgc2NyZWVuX2NvbHVtbnM7IG9GaXJzdENoYXIrKykKKwkJaWYgKCFDaGFyRXEob2xkTGluZVtvRmlyc3RDaGFyXSwgYmxhbmspKQorCQkgICAgYnJlYWs7CisJICAgIGZvciAobkZpcnN0Q2hhciA9IDA7IG5GaXJzdENoYXIgPCBzY3JlZW5fY29sdW1uczsgbkZpcnN0Q2hhcisrKQorCQlpZiAoIUNoYXJFcShuZXdMaW5lW25GaXJzdENoYXJdLCBibGFuaykpCisJCSAgICBicmVhazsKKworCSAgICBpZiAobkZpcnN0Q2hhciA9PSBvRmlyc3RDaGFyKSB7CisJCWZpcnN0Q2hhciA9IG5GaXJzdENoYXI7CisJCS8qIGZpbmQgdGhlIGZpcnN0IGRpZmZlcmluZyBjaGFyYWN0ZXIgKi8KKwkJd2hpbGUgKGZpcnN0Q2hhciA8IHNjcmVlbl9jb2x1bW5zCisJCSAgICAgICAmJiBDaGFyRXEobmV3TGluZVtmaXJzdENoYXJdLCBvbGRMaW5lW2ZpcnN0Q2hhcl0pKQorCQkgICAgZmlyc3RDaGFyKys7CisJICAgIH0gZWxzZSBpZiAob0ZpcnN0Q2hhciA+IG5GaXJzdENoYXIpIHsKKwkJZmlyc3RDaGFyID0gbkZpcnN0Q2hhcjsKKwkgICAgfSBlbHNlIHsJCS8qIG9GaXJzdENoYXIgPCBuRmlyc3RDaGFyICovCisJCWZpcnN0Q2hhciA9IG9GaXJzdENoYXI7CisJCWlmIChTUC0+X2VsMV9jb3N0IDwgbkZpcnN0Q2hhciAtIG9GaXJzdENoYXIpIHsKKwkJICAgIGlmIChuRmlyc3RDaGFyID49IHNjcmVlbl9jb2x1bW5zCisJCQkmJiBTUC0+X2VsX2Nvc3QgPD0gU1AtPl9lbDFfY29zdCkgeworCQkJR29UbyhsaW5lbm8sIDApOworCQkJVXBkYXRlQXR0cnMoYmxhbmspOworCQkJVFBVVFNfVFJBQ0UoImNscl9lb2wiKTsKKwkJCXB1dHAoY2xyX2VvbCk7CisJCSAgICB9IGVsc2UgeworCQkJR29UbyhsaW5lbm8sIG5GaXJzdENoYXIgLSAxKTsKKwkJCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwkJCVRQVVRTX1RSQUNFKCJjbHJfYm9sIik7CisJCQlwdXRwKGNscl9ib2wpOworCQkgICAgfQorCisJCSAgICB3aGlsZSAoZmlyc3RDaGFyIDwgbkZpcnN0Q2hhcikKKwkJCW9sZExpbmVbZmlyc3RDaGFyKytdID0gYmxhbms7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qIGZpbmQgdGhlIGZpcnN0IGRpZmZlcmluZyBjaGFyYWN0ZXIgKi8KKwkgICAgd2hpbGUgKGZpcnN0Q2hhciA8IHNjcmVlbl9jb2x1bW5zCisJCSAgICYmIENoYXJFcShuZXdMaW5lW2ZpcnN0Q2hhcl0sIG9sZExpbmVbZmlyc3RDaGFyXSkpCisJCWZpcnN0Q2hhcisrOworCX0KKwkvKiBpZiB0aGVyZSB3YXNuJ3Qgb25lLCB3ZSdyZSBkb25lICovCisJaWYgKGZpcnN0Q2hhciA+PSBzY3JlZW5fY29sdW1ucykgeworCSAgICBUUihUUkFDRV9VUERBVEUsIChUX1JFVFVSTigiIikpKTsKKwkgICAgcmV0dXJuOworCX0KKworCWJsYW5rID0gbmV3TGluZVtzY3JlZW5fY29sdW1ucyAtIDFdOworCisJaWYgKCFjYW5fY2xlYXJfd2l0aChDSFJFRihibGFuaykpKSB7CisJICAgIC8qIGZpbmQgdGhlIGxhc3QgZGlmZmVyaW5nIGNoYXJhY3RlciAqLworCSAgICBuTGFzdENoYXIgPSBzY3JlZW5fY29sdW1ucyAtIDE7CisKKwkgICAgd2hpbGUgKG5MYXN0Q2hhciA+IGZpcnN0Q2hhcgorCQkgICAmJiBDaGFyRXEobmV3TGluZVtuTGFzdENoYXJdLCBvbGRMaW5lW25MYXN0Q2hhcl0pKQorCQluTGFzdENoYXItLTsKKworCSAgICBpZiAobkxhc3RDaGFyID49IGZpcnN0Q2hhcikgeworCQlHb1RvKGxpbmVubywgZmlyc3RDaGFyKTsKKwkJUHV0UmFuZ2Uob2xkTGluZSwgbmV3TGluZSwgbGluZW5vLCBmaXJzdENoYXIsIG5MYXN0Q2hhcik7CisJCW1lbWNweShvbGRMaW5lICsgZmlyc3RDaGFyLAorCQkgICAgICAgbmV3TGluZSArIGZpcnN0Q2hhciwKKwkJICAgICAgIChuTGFzdENoYXIgLSBmaXJzdENoYXIgKyAxKSAqIHNpemVvZihOQ1VSU0VTX0NIX1QpKTsKKwkgICAgfQorCSAgICBUUihUUkFDRV9VUERBVEUsIChUX1JFVFVSTigiIikpKTsKKwkgICAgcmV0dXJuOworCX0KKworCS8qIGZpbmQgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIG9sZCBsaW5lICovCisJb0xhc3RDaGFyID0gc2NyZWVuX2NvbHVtbnMgLSAxOworCXdoaWxlIChvTGFzdENoYXIgPiBmaXJzdENoYXIgJiYgQ2hhckVxKG9sZExpbmVbb0xhc3RDaGFyXSwgYmxhbmspKQorCSAgICBvTGFzdENoYXItLTsKKworCS8qIGZpbmQgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIG5ldyBsaW5lICovCisJbkxhc3RDaGFyID0gc2NyZWVuX2NvbHVtbnMgLSAxOworCXdoaWxlIChuTGFzdENoYXIgPiBmaXJzdENoYXIgJiYgQ2hhckVxKG5ld0xpbmVbbkxhc3RDaGFyXSwgYmxhbmspKQorCSAgICBuTGFzdENoYXItLTsKKworCWlmICgobkxhc3RDaGFyID09IGZpcnN0Q2hhcikKKwkgICAgJiYgKFNQLT5fZWxfY29zdCA8IChvTGFzdENoYXIgLSBuTGFzdENoYXIpKSkgeworCSAgICBHb1RvKGxpbmVubywgZmlyc3RDaGFyKTsKKwkgICAgaWYgKCFDaGFyRXEobmV3TGluZVtmaXJzdENoYXJdLCBibGFuaykpCisJCVB1dENoYXIoQ0hSRUYobmV3TGluZVtmaXJzdENoYXJdKSk7CisJICAgIENsclRvRU9MKGJsYW5rLCBGQUxTRSk7CisJfSBlbHNlIGlmICgobkxhc3RDaGFyICE9IG9MYXN0Q2hhcikKKwkJICAgJiYgKCFDaGFyRXEobmV3TGluZVtuTGFzdENoYXJdLCBvbGRMaW5lW29MYXN0Q2hhcl0pCisJCSAgICAgICB8fCAhKF9uY19pZGNvayAmJiBoYXNfaWMoKSkpKSB7CisJICAgIEdvVG8obGluZW5vLCBmaXJzdENoYXIpOworCSAgICBpZiAoKG9MYXN0Q2hhciAtIG5MYXN0Q2hhcikgPiBTUC0+X2VsX2Nvc3QpIHsKKwkJaWYgKFB1dFJhbmdlKG9sZExpbmUsIG5ld0xpbmUsIGxpbmVubywgZmlyc3RDaGFyLCBuTGFzdENoYXIpKQorCQkgICAgR29UbyhsaW5lbm8sIG5MYXN0Q2hhciArIDEpOworCQlDbHJUb0VPTChibGFuaywgRkFMU0UpOworCSAgICB9IGVsc2UgeworCQluID0gbWF4KG5MYXN0Q2hhciwgb0xhc3RDaGFyKTsKKwkJUHV0UmFuZ2Uob2xkTGluZSwgbmV3TGluZSwgbGluZW5vLCBmaXJzdENoYXIsIG4pOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaW50IG5MYXN0Tm9uYmxhbmsgPSBuTGFzdENoYXI7CisJICAgIGludCBvTGFzdE5vbmJsYW5rID0gb0xhc3RDaGFyOworCisJICAgIC8qIGZpbmQgdGhlIGxhc3QgY2hhcmFjdGVycyB0aGF0IHJlYWxseSBkaWZmZXIgKi8KKwkgICAgLyogY2FuIGJlIC0xIGlmIG5vIGNoYXJhY3RlcnMgZGlmZmVyICovCisJICAgIHdoaWxlIChDaGFyRXEobmV3TGluZVtuTGFzdENoYXJdLCBvbGRMaW5lW29MYXN0Q2hhcl0pKSB7CisJCS8qIGRvbid0IHNwbGl0IGEgd2lkZSBjaGFyICovCisJCWlmIChpc1dpZGVjRXh0KG5ld0xpbmVbbkxhc3RDaGFyXSkgJiYKKwkJICAgICFDaGFyRXEobmV3TGluZVtuTGFzdENoYXIgLSAxXSwgb2xkTGluZVtvTGFzdENoYXIgLSAxXSkpCisJCSAgICBicmVhazsKKwkJbkxhc3RDaGFyLS07CisJCW9MYXN0Q2hhci0tOworCQlpZiAobkxhc3RDaGFyID09IC0xIHx8IG9MYXN0Q2hhciA9PSAtMSkKKwkJICAgIGJyZWFrOworCSAgICB9CisKKwkgICAgbiA9IG1pbihvTGFzdENoYXIsIG5MYXN0Q2hhcik7CisJICAgIGlmIChuID49IGZpcnN0Q2hhcikgeworCQlHb1RvKGxpbmVubywgZmlyc3RDaGFyKTsKKwkJUHV0UmFuZ2Uob2xkTGluZSwgbmV3TGluZSwgbGluZW5vLCBmaXJzdENoYXIsIG4pOworCSAgICB9CisKKwkgICAgaWYgKG9MYXN0Q2hhciA8IG5MYXN0Q2hhcikgeworCQlpbnQgbSA9IG1heChuTGFzdE5vbmJsYW5rLCBvTGFzdE5vbmJsYW5rKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCQl3aGlsZSAoaXNXaWRlY0V4dChuZXdMaW5lW24gKyAxXSkgJiYgbikgeworCQkgICAgLS1uOworCQkgICAgLS1vTGFzdENoYXI7CisJCX0KKyNlbmRpZgorCQlHb1RvKGxpbmVubywgbiArIDEpOworCQlpZiAoKG5MYXN0Q2hhciA8IG5MYXN0Tm9uYmxhbmspCisJCSAgICB8fCBJbnNDaGFyQ29zdChuTGFzdENoYXIgLSBvTGFzdENoYXIpID4gKG0gLSBuKSkgeworCQkgICAgUHV0UmFuZ2Uob2xkTGluZSwgbmV3TGluZSwgbGluZW5vLCBuICsgMSwgbSk7CisJCX0gZWxzZSB7CisJCSAgICBJbnNTdHIoJm5ld0xpbmVbbiArIDFdLCBuTGFzdENoYXIgLSBvTGFzdENoYXIpOworCQl9CisJICAgIH0gZWxzZSBpZiAob0xhc3RDaGFyID4gbkxhc3RDaGFyKSB7CisJCUdvVG8obGluZW5vLCBuICsgMSk7CisJCWlmIChEZWxDaGFyQ29zdChvTGFzdENoYXIgLSBuTGFzdENoYXIpCisJCSAgICA+IFNQLT5fZWxfY29zdCArIG5MYXN0Tm9uYmxhbmsgLSAobiArIDEpKSB7CisJCSAgICBpZiAoUHV0UmFuZ2Uob2xkTGluZSwgbmV3TGluZSwgbGluZW5vLAorCQkJCSBuICsgMSwgbkxhc3ROb25ibGFuaykpCisJCQlHb1RvKGxpbmVubywgbkxhc3ROb25ibGFuayArIDEpOworCQkgICAgQ2xyVG9FT0woYmxhbmssIEZBTFNFKTsKKwkJfSBlbHNlIHsKKwkJICAgIC8qCisJCSAgICAgKiBUaGUgZGVsZXRlLWNoYXIgc2VxdWVuY2Ugd2lsbAorCQkgICAgICogZWZmZWN0aXZlbHkgc2hpZnQgaW4gYmxhbmtzIGZyb20gdGhlCisJCSAgICAgKiByaWdodCBtYXJnaW4gb2YgdGhlIHNjcmVlbi4gIEVuc3VyZQorCQkgICAgICogdGhhdCB0aGV5IGFyZSB0aGUgcmlnaHQgY29sb3IgYnkKKwkJICAgICAqIHNldHRpbmcgdGhlIHZpZGVvIGF0dHJpYnV0ZXMgZnJvbQorCQkgICAgICogdGhlIGxhc3QgY2hhcmFjdGVyIG9uIHRoZSByb3cuCisJCSAgICAgKi8KKwkJICAgIFVwZGF0ZUF0dHJzKGJsYW5rKTsKKwkJICAgIERlbENoYXIob0xhc3RDaGFyIC0gbkxhc3RDaGFyKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIHVwZGF0ZSB0aGUgY29kZSdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uICovCisgICAgaWYgKHNjcmVlbl9jb2x1bW5zID4gZmlyc3RDaGFyKQorCW1lbWNweShvbGRMaW5lICsgZmlyc3RDaGFyLAorCSAgICAgICBuZXdMaW5lICsgZmlyc3RDaGFyLAorCSAgICAgICAoc2NyZWVuX2NvbHVtbnMgLSBmaXJzdENoYXIpICogc2l6ZW9mKE5DVVJTRVNfQ0hfVCkpOworICAgIFRSKFRSQUNFX1VQREFURSwgKFRfUkVUVVJOKCIiKSkpOworICAgIHJldHVybjsKK30KKworLyoKKyoqCUNsZWFyU2NyZWVuKGJsYW5rKQorKioKKyoqCUNsZWFyIHRoZSBwaHlzaWNhbCBzY3JlZW4gYW5kIHB1dCBjdXJzb3IgYXQgaG9tZQorKioKKyovCisKK3N0YXRpYyB2b2lkCitDbGVhclNjcmVlbihOQ1VSU0VTX0NIX1QgYmxhbmspCit7CisgICAgaW50IGksIGo7CisgICAgYm9vbCBmYXN0X2NsZWFyID0gKGNsZWFyX3NjcmVlbiB8fCBjbHJfZW9zIHx8IGNscl9lb2wpOworCisgICAgVFIoVFJBQ0VfVVBEQVRFLCAoIkNsZWFyU2NyZWVuKCkgY2FsbGVkIikpOworCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBpZiAoU1AtPl9jb2xvcm9uCisJJiYgIVNQLT5fZGVmYXVsdF9jb2xvcikgeworCV9uY19kb19jb2xvcihHRVRfU0NSRUVOX1BBSVIoU1ApLCAwLCBGQUxTRSwgX25jX291dGNoKTsKKwlpZiAoIWJhY2tfY29sb3JfZXJhc2UpIHsKKwkgICAgZmFzdF9jbGVhciA9IEZBTFNFOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmYXN0X2NsZWFyKSB7CisJaWYgKGNsZWFyX3NjcmVlbikgeworCSAgICBVcGRhdGVBdHRycyhibGFuayk7CisJICAgIFRQVVRTX1RSQUNFKCJjbGVhcl9zY3JlZW4iKTsKKwkgICAgcHV0cChjbGVhcl9zY3JlZW4pOworCSAgICBTUC0+X2N1cnNyb3cgPSBTUC0+X2N1cnNjb2wgPSAwOworCSAgICBwb3NpdGlvbl9jaGVjayhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCwgIkNsZWFyU2NyZWVuIik7CisJfSBlbHNlIGlmIChjbHJfZW9zKSB7CisJICAgIFNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IC0xOworCSAgICBHb1RvKDAsIDApOworCisJICAgIFVwZGF0ZUF0dHJzKGJsYW5rKTsKKwkgICAgVFBVVFNfVFJBQ0UoImNscl9lb3MiKTsKKwkgICAgdHB1dHMoY2xyX2Vvcywgc2NyZWVuX2xpbmVzLCBfbmNfb3V0Y2gpOworCX0gZWxzZSBpZiAoY2xyX2VvbCkgeworCSAgICBTUC0+X2N1cnNyb3cgPSBTUC0+X2N1cnNjb2wgPSAtMTsKKworCSAgICBVcGRhdGVBdHRycyhibGFuayk7CisJICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCQlHb1RvKGksIDApOworCQlUUFVUU19UUkFDRSgiY2xyX2VvbCIpOworCQlwdXRwKGNscl9lb2wpOworCSAgICB9CisJICAgIEdvVG8oMCwgMCk7CisJfQorICAgIH0gZWxzZSB7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCWZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCSAgICBHb1RvKGksIDApOworCSAgICBmb3IgKGogPSAwOyBqIDwgc2NyZWVuX2NvbHVtbnM7IGorKykKKwkJUHV0Q2hhcihDSFJFRihibGFuaykpOworCX0KKwlHb1RvKDAsIDApOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7IGkrKykgeworCWZvciAoaiA9IDA7IGogPCBzY3JlZW5fY29sdW1uczsgaisrKQorCSAgICBjdXJzY3ItPl9saW5lW2ldLnRleHRbal0gPSBibGFuazsKKyAgICB9CisKKyAgICBUUihUUkFDRV9VUERBVEUsICgic2NyZWVuIGNsZWFyZWQiKSk7Cit9CisKKy8qCisqKglJbnNTdHIobGluZSwgY291bnQpCisqKgorKioJSW5zZXJ0IHRoZSBjb3VudCBjaGFyYWN0ZXJzIHBvaW50ZWQgdG8gYnkgbGluZS4KKyoqCisqLworCitzdGF0aWMgdm9pZAorSW5zU3RyKE5DVVJTRVNfQ0hfVCAqIGxpbmUsIGludCBjb3VudCkKK3sKKyAgICBUUihUUkFDRV9VUERBVEUsICgiSW5zU3RyKCVwLCVkKSBjYWxsZWQiLCBsaW5lLCBjb3VudCkpOworCisgICAgLyogUHJlZmVyIHBhcm1faWNoIGFzIGl0IGhhcyB0aGUgc21hbGxlc3QgY29zdCAtIG5vIG5lZWQgdG8gc2hpZnQKKyAgICAgKiB0aGUgd2hvbGUgbGluZSBvbiBlYWNoIGNoYXJhY3Rlci4gKi8KKyAgICAvKiBUaGUgb3JkZXIgbXVzdCBtYXRjaCB0aGF0IG9mIEluc0NoYXJDb3N0LiAqLworICAgIGlmIChwYXJtX2ljaCkgeworCVRQVVRTX1RSQUNFKCJwYXJtX2ljaCIpOworCXRwdXRzKFRQQVJNXzEocGFybV9pY2gsIGNvdW50KSwgY291bnQsIF9uY19vdXRjaCk7CisJd2hpbGUgKGNvdW50KSB7CisJICAgIFB1dEF0dHJDaGFyKENIUkVGKCpsaW5lKSk7CisJICAgIGxpbmUrKzsKKwkgICAgY291bnQtLTsKKwl9CisgICAgfSBlbHNlIGlmIChlbnRlcl9pbnNlcnRfbW9kZSAmJiBleGl0X2luc2VydF9tb2RlKSB7CisJVFBVVFNfVFJBQ0UoImVudGVyX2luc2VydF9tb2RlIik7CisJcHV0cChlbnRlcl9pbnNlcnRfbW9kZSk7CisJd2hpbGUgKGNvdW50KSB7CisJICAgIFB1dEF0dHJDaGFyKENIUkVGKCpsaW5lKSk7CisJICAgIGlmIChpbnNlcnRfcGFkZGluZykgeworCQlUUFVUU19UUkFDRSgiaW5zZXJ0X3BhZGRpbmciKTsKKwkJcHV0cChpbnNlcnRfcGFkZGluZyk7CisJICAgIH0KKwkgICAgbGluZSsrOworCSAgICBjb3VudC0tOworCX0KKwlUUFVUU19UUkFDRSgiZXhpdF9pbnNlcnRfbW9kZSIpOworCXB1dHAoZXhpdF9pbnNlcnRfbW9kZSk7CisgICAgfSBlbHNlIHsKKwl3aGlsZSAoY291bnQpIHsKKwkgICAgVFBVVFNfVFJBQ0UoImluc2VydF9jaGFyYWN0ZXIiKTsKKwkgICAgcHV0cChpbnNlcnRfY2hhcmFjdGVyKTsKKwkgICAgUHV0QXR0ckNoYXIoQ0hSRUYoKmxpbmUpKTsKKwkgICAgaWYgKGluc2VydF9wYWRkaW5nKSB7CisJCVRQVVRTX1RSQUNFKCJpbnNlcnRfcGFkZGluZyIpOworCQlwdXRwKGluc2VydF9wYWRkaW5nKTsKKwkgICAgfQorCSAgICBsaW5lKys7CisJICAgIGNvdW50LS07CisJfQorICAgIH0KKyAgICBwb3NpdGlvbl9jaGVjayhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCwgIkluc1N0ciIpOworfQorCisvKgorKioJRGVsQ2hhcihjb3VudCkKKyoqCisqKglEZWxldGUgY291bnQgY2hhcmFjdGVycyBhdCBjdXJyZW50IHBvc2l0aW9uCisqKgorKi8KKworc3RhdGljIHZvaWQKK0RlbENoYXIoaW50IGNvdW50KQoreworICAgIGludCBuOworCisgICAgVFIoVFJBQ0VfVVBEQVRFLCAoIkRlbENoYXIoJWQpIGNhbGxlZCwgcG9zaXRpb24gPSAoJWxkLCVsZCkiLAorCQkgICAgICBjb3VudCwKKwkJICAgICAgKGxvbmcpIG5ld3Njci0+X2N1cnksCisJCSAgICAgIChsb25nKSBuZXdzY3ItPl9jdXJ4KSk7CisKKyAgICBpZiAocGFybV9kY2gpIHsKKwlUUFVUU19UUkFDRSgicGFybV9kY2giKTsKKwl0cHV0cyhUUEFSTV8xKHBhcm1fZGNoLCBjb3VudCksIGNvdW50LCBfbmNfb3V0Y2gpOworICAgIH0gZWxzZSB7CisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKwkgICAgVFBVVFNfVFJBQ0UoImRlbGV0ZV9jaGFyYWN0ZXIiKTsKKwkgICAgcHV0cChkZWxldGVfY2hhcmFjdGVyKTsKKwl9CisgICAgfQorfQorCisvKgorICogUGh5c2ljYWwtc2Nyb2xsaW5nIHN1cHBvcnQKKyAqCisgKiBUaGlzIGNvZGUgd2FzIGFkYXB0ZWQgZnJvbSBLZWl0aCBCb3N0aWMncyBoYXJkd2FyZSBzY3JvbGxpbmcKKyAqIHN1cHBvcnQgZm9yIDQuNEJTRCBjdXJzZXMuICBJIChlc3IpIHRyYW5zbGF0ZWQgaXQgdG8gdXNlIHRlcm1pbmZvCisgKiBjYXBhYmlsaXRpZXMsIG5hcnJvd2VkIHRoZSBjYWxsIGludGVyZmFjZSBzbGlnaHRseSwgYW5kIGNsZWFuZWQKKyAqIHVwIHNvbWUgY29udm9sdXRlZCB0ZXN0cy4gIEkgYWxzbyBhZGRlZCBzdXBwb3J0IGZvciB0aGUgbWVtb3J5X2Fib3ZlCisgKiBtZW1vcnlfYmVsb3csIGFuZCBub25fZGVzdF9zY3JvbGxfcmVnaW9uIGNhcGFiaWxpdGllcy4KKyAqCisgKiBGb3IgdGhpcyBjb2RlIHRvIHdvcmssIHdlIG11c3QgaGF2ZSBlaXRoZXIKKyAqIGNoYW5nZV9zY3JvbGxfcmVnaW9uIGFuZCBzY3JvbGwgZm9yd2FyZC9yZXZlcnNlIGNvbW1hbmRzLCBvcgorICogaW5zZXJ0IGFuZCBkZWxldGUgbGluZSBjYXBhYmlsaXRpZXMuCisgKiBXaGVuIHRoZSBzY3JvbGxpbmcgcmVnaW9uIGhhcyBiZWVuIHNldCwgdGhlIGN1cnNvciBoYXMgdG8KKyAqIGJlIGF0IHRoZSBsYXN0IGxpbmUgb2YgdGhlIHJlZ2lvbiB0byBtYWtlIHRoZSBzY3JvbGwgdXAKKyAqIGhhcHBlbiwgb3Igb24gdGhlIGZpcnN0IGxpbmUgb2YgcmVnaW9uIHRvIHNjcm9sbCBkb3duLgorICoKKyAqIFRoaXMgY29kZSBtYWtlcyBvbmUgYWVzdGhldGljIGRlY2lzaW9uIGluIHRoZSBvcHBvc2l0ZSB3YXkgZnJvbQorICogQlNEIGN1cnNlcy4gIEJTRCBjdXJzZXMgcHJlZmVycmVkIHBhaXJzIG9mIGlsL2RsIG9wZXJhdGlvbnMKKyAqIG92ZXIgc2Nyb2xscywgYWxsZWdlZGx5IGJlY2F1c2UgaWwvZGwgbG9va2VkIGZhc3Rlci4gIFdlLCBvbgorICogdGhlIG90aGVyIGhhbmQsIHByZWZlciBzY3JvbGxzIGJlY2F1c2UgKGEpIHRoZXkncmUganVzdCBhcyBmYXN0CisgKiBvbiBtYW55IHRlcm1pbmFscyBhbmQgKGIpIHVzaW5nIHRoZW0gYXZvaWRzIGJvdW5jaW5nIGFuCisgKiB1bmNoYW5nZWQgYm90dG9tIHNlY3Rpb24gb2YgdGhlIHNjcmVlbiB1cCBhbmQgZG93biwgd2hpY2ggaXMKKyAqIHZpc3VhbGx5IG5hc3R5LgorICoKKyAqIChsYXYpOiBhZGRlZCBtb3JlIGNhc2VzLCB1c2VkIGRsL2lsIHdoZW4gYm90PT1tYXh5IGFuZCBpbiBjc3IgY2FzZS4KKyAqCisgKiBJIHVzZWQgYXNzdW1wdGlvbiB0aGF0IGNhcGFiaWxpdGllcyBpbC9pbDEvZGwvZGwxIHdvcmsgaW5zaWRlCisgKiBjaGFuZ2VkIHNjcm9sbCByZWdpb24gbm90IHNoaWZ0aW5nIHNjcmVlbiBjb250ZW50cyBvdXRzaWRlIG9mIGl0LgorICogSWYgdGhlcmUgYXJlIGFueSB0ZXJtaW5hbHMgYmVoYXZpbmcgZGlmZmVyZW50IHdheSwgaXQgd291bGQgYmUKKyAqIG5lY2Vzc2FyeSB0byBhZGQgc29tZSBjb25kaXRpb25zIHRvIHNjcm9sbF9jc3JfZm9yd2FyZC9iYWNrd2FyZC4KKyAqLworCisvKiBUcnkgdG8gc2Nyb2xsIHVwIGFzc3VtaW5nIGdpdmVuIGNzciAobWlueSwgbWF4eSkuIFJldHVybnMgRVJSIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBpbnQKK3Njcm9sbF9jc3JfZm9yd2FyZChpbnQgbiwgaW50IHRvcCwgaW50IGJvdCwgaW50IG1pbnksIGludCBtYXh5LCBOQ1VSU0VTX0NIX1QgYmxhbmspCit7CisgICAgaW50IGk7CisKKyAgICBpZiAobiA9PSAxICYmIHNjcm9sbF9mb3J3YXJkICYmIHRvcCA9PSBtaW55ICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyhib3QsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgic2Nyb2xsX2ZvcndhcmQiKTsKKwlwdXRwKHNjcm9sbF9mb3J3YXJkKTsKKyAgICB9IGVsc2UgaWYgKG4gPT0gMSAmJiBkZWxldGVfbGluZSAmJiBib3QgPT0gbWF4eSkgeworCUdvVG8odG9wLCAwKTsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJVFBVVFNfVFJBQ0UoImRlbGV0ZV9saW5lIik7CisJcHV0cChkZWxldGVfbGluZSk7CisgICAgfSBlbHNlIGlmIChwYXJtX2luZGV4ICYmIHRvcCA9PSBtaW55ICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyhib3QsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgicGFybV9pbmRleCIpOworCXRwdXRzKFRQQVJNXzIocGFybV9pbmRleCwgbiwgMCksIG4sIF9uY19vdXRjaCk7CisgICAgfSBlbHNlIGlmIChwYXJtX2RlbGV0ZV9saW5lICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyh0b3AsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgicGFybV9kZWxldGVfbGluZSIpOworCXRwdXRzKFRQQVJNXzIocGFybV9kZWxldGVfbGluZSwgbiwgMCksIG4sIF9uY19vdXRjaCk7CisgICAgfSBlbHNlIGlmIChzY3JvbGxfZm9yd2FyZCAmJiB0b3AgPT0gbWlueSAmJiBib3QgPT0gbWF4eSkgeworCUdvVG8oYm90LCAwKTsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBUUFVUU19UUkFDRSgic2Nyb2xsX2ZvcndhcmQiKTsKKwkgICAgcHV0cChzY3JvbGxfZm9yd2FyZCk7CisJfQorICAgIH0gZWxzZSBpZiAoZGVsZXRlX2xpbmUgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkgICAgVFBVVFNfVFJBQ0UoImRlbGV0ZV9saW5lIik7CisJICAgIHB1dHAoZGVsZXRlX2xpbmUpOworCX0KKyAgICB9IGVsc2UKKwlyZXR1cm4gRVJSOworCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBpZiAoRklMTF9CQ0UoKSkgeworCWludCBqOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkgICAgR29Ubyhib3QgLSBpLCAwKTsKKwkgICAgZm9yIChqID0gMDsgaiA8IHNjcmVlbl9jb2x1bW5zOyBqKyspCisJCVB1dENoYXIoQ0hSRUYoYmxhbmspKTsKKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIE9LOworfQorCisvKiBUcnkgdG8gc2Nyb2xsIGRvd24gYXNzdW1pbmcgZ2l2ZW4gY3NyIChtaW55LCBtYXh5KS4gUmV0dXJucyBFUlIgb24gZmFpbHVyZSAqLworLyogbiA+IDAgKi8KK3N0YXRpYyBpbnQKK3Njcm9sbF9jc3JfYmFja3dhcmQoaW50IG4sIGludCB0b3AsIGludCBib3QsIGludCBtaW55LCBpbnQgbWF4eSwKKwkJICAgIE5DVVJTRVNfQ0hfVCBibGFuaykKK3sKKyAgICBpbnQgaTsKKworICAgIGlmIChuID09IDEgJiYgc2Nyb2xsX3JldmVyc2UgJiYgdG9wID09IG1pbnkgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJzY3JvbGxfcmV2ZXJzZSIpOworCXB1dHAoc2Nyb2xsX3JldmVyc2UpOworICAgIH0gZWxzZSBpZiAobiA9PSAxICYmIGluc2VydF9saW5lICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyh0b3AsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgiaW5zZXJ0X2xpbmUiKTsKKwlwdXRwKGluc2VydF9saW5lKTsKKyAgICB9IGVsc2UgaWYgKHBhcm1fcmluZGV4ICYmIHRvcCA9PSBtaW55ICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyh0b3AsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgicGFybV9yaW5kZXgiKTsKKwl0cHV0cyhUUEFSTV8yKHBhcm1fcmluZGV4LCBuLCAwKSwgbiwgX25jX291dGNoKTsKKyAgICB9IGVsc2UgaWYgKHBhcm1faW5zZXJ0X2xpbmUgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJwYXJtX2luc2VydF9saW5lIik7CisJdHB1dHMoVFBBUk1fMihwYXJtX2luc2VydF9saW5lLCBuLCAwKSwgbiwgX25jX291dGNoKTsKKyAgICB9IGVsc2UgaWYgKHNjcm9sbF9yZXZlcnNlICYmIHRvcCA9PSBtaW55ICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyh0b3AsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIFRQVVRTX1RSQUNFKCJzY3JvbGxfcmV2ZXJzZSIpOworCSAgICBwdXRwKHNjcm9sbF9yZXZlcnNlKTsKKwl9CisgICAgfSBlbHNlIGlmIChpbnNlcnRfbGluZSAmJiBib3QgPT0gbWF4eSkgeworCUdvVG8odG9wLCAwKTsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBUUFVUU19UUkFDRSgiaW5zZXJ0X2xpbmUiKTsKKwkgICAgcHV0cChpbnNlcnRfbGluZSk7CisJfQorICAgIH0gZWxzZQorCXJldHVybiBFUlI7CisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGlmIChGSUxMX0JDRSgpKSB7CisJaW50IGo7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBHb1RvKHRvcCArIGksIDApOworCSAgICBmb3IgKGogPSAwOyBqIDwgc2NyZWVuX2NvbHVtbnM7IGorKykKKwkJUHV0Q2hhcihDSFJFRihibGFuaykpOworCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qIHNjcm9sbCBieSB1c2luZyBkZWxldGVfbGluZSBhdCBkZWwgYW5kIGluc2VydF9saW5lIGF0IGlucyAqLworLyogbiA+IDAgKi8KK3N0YXRpYyBpbnQKK3Njcm9sbF9pZGwoaW50IG4sIGludCBkZWwsIGludCBpbnMsIE5DVVJTRVNfQ0hfVCBibGFuaykKK3sKKyAgICBpbnQgaTsKKworICAgIGlmICghKChwYXJtX2RlbGV0ZV9saW5lIHx8IGRlbGV0ZV9saW5lKSAmJiAocGFybV9pbnNlcnRfbGluZSB8fCBpbnNlcnRfbGluZSkpKQorCXJldHVybiBFUlI7CisKKyAgICBHb1RvKGRlbCwgMCk7CisgICAgVXBkYXRlQXR0cnMoYmxhbmspOworICAgIGlmIChuID09IDEgJiYgZGVsZXRlX2xpbmUpIHsKKwlUUFVUU19UUkFDRSgiZGVsZXRlX2xpbmUiKTsKKwlwdXRwKGRlbGV0ZV9saW5lKTsKKyAgICB9IGVsc2UgaWYgKHBhcm1fZGVsZXRlX2xpbmUpIHsKKwlUUFVUU19UUkFDRSgicGFybV9kZWxldGVfbGluZSIpOworCXRwdXRzKFRQQVJNXzIocGFybV9kZWxldGVfbGluZSwgbiwgMCksIG4sIF9uY19vdXRjaCk7CisgICAgfSBlbHNlIHsJCQkvKiBpZiAoZGVsZXRlX2xpbmUpICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBUUFVUU19UUkFDRSgiZGVsZXRlX2xpbmUiKTsKKwkgICAgcHV0cChkZWxldGVfbGluZSk7CisJfQorICAgIH0KKworICAgIEdvVG8oaW5zLCAwKTsKKyAgICBVcGRhdGVBdHRycyhibGFuayk7CisgICAgaWYgKG4gPT0gMSAmJiBpbnNlcnRfbGluZSkgeworCVRQVVRTX1RSQUNFKCJpbnNlcnRfbGluZSIpOworCXB1dHAoaW5zZXJ0X2xpbmUpOworICAgIH0gZWxzZSBpZiAocGFybV9pbnNlcnRfbGluZSkgeworCVRQVVRTX1RSQUNFKCJwYXJtX2luc2VydF9saW5lIik7CisJdHB1dHMoVFBBUk1fMihwYXJtX2luc2VydF9saW5lLCBuLCAwKSwgbiwgX25jX291dGNoKTsKKyAgICB9IGVsc2UgewkJCS8qIGlmIChpbnNlcnRfbGluZSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIFRQVVRTX1RSQUNFKCJpbnNlcnRfbGluZSIpOworCSAgICBwdXRwKGluc2VydF9saW5lKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogTm90ZTogIHNvbWUgdGVybWluYWxzIHJlcXVpcmUgdGhlIGN1cnNvciB0byBiZSB3aXRoaW4gdGhlIHNjcm9sbGluZyBtYXJnaW5zCisgKiBiZWZvcmUgc2V0dGluZyB0aGVtLiAgR2VuZXJhbGx5LCB0aGUgY3Vyc29yIG11c3QgYmUgYXQgdGhlIGFwcHJvcHJpYXRlIGVuZAorICogb2YgdGhlIHNjcm9sbGluZyBtYXJnaW5zIHdoZW4gaXNzdWluZyBhbiBpbmRleGluZyBvcGVyYXRpb24gKGl0IGlzIG5vdAorICogYXBwYXJlbnQgd2hldGhlciBpdCBtdXN0IGFsc28gYmUgYXQgdGhlIGxlZnQgbWFyZ2luOyB3ZSBkbyB0aGlzIGp1c3QgdG8gYmUKKyAqIHNhZmUpLiAgVG8gbWFrZSB0aGUgcmVsYXRlZCBjdXJzb3IgbW92ZW1lbnQgYSBsaXR0bGUgZmFzdGVyLCB3ZSB1c2UgdGhlCisgKiBzYXZlL3Jlc3RvcmUgY3Vyc29yIGNhcGFiaWxpdGllcyBpZiB0aGUgdGVybWluYWwgaGFzIHRoZW0uCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19zY3JvbGxuKGludCBuLCBpbnQgdG9wLCBpbnQgYm90LCBpbnQgbWF4eSkKKy8qIHNjcm9sbCByZWdpb24gZnJvbSB0b3AgdG8gYm90IGJ5IG4gbGluZXMgKi8KK3sKKyAgICBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBDbHJCbGFuayhzdGRzY3IpOworICAgIGludCBpOworICAgIGJvb2wgY3Vyc29yX3NhdmVkID0gRkFMU0U7CisgICAgaW50IHJlczsKKworICAgIFRSKFRSQUNFX01PVkUsICgibXZjdXJfc2Nyb2xsbiglZCwgJWQsICVkLCAlZCkiLCBuLCB0b3AsIGJvdCwgbWF4eSkpOworCisjaWYgVVNFX1hNQ19TVVBQT1JUCisgICAgLyoKKyAgICAgKiBJZiB3ZSBzY3JvbGwsIHdlIG1pZ2h0IHJlbW92ZSBhIGNvb2tpZS4KKyAgICAgKi8KKyAgICBpZiAobWFnaWNfY29va2llX2dsaXRjaCA+IDApIHsKKwlyZXR1cm4gKEVSUik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobiA+IDApIHsJCS8qIHNjcm9sbCB1cCAoZm9yd2FyZCkgKi8KKwkvKgorCSAqIEV4cGxpY2l0bHkgY2xlYXIgaWYgc3R1ZmYgcHVzaGVkIG9mZiB0b3Agb2YgcmVnaW9uIG1pZ2h0CisJICogYmUgc2F2ZWQgYnkgdGhlIHRlcm1pbmFsLgorCSAqLworCXJlcyA9IHNjcm9sbF9jc3JfZm9yd2FyZChuLCB0b3AsIGJvdCwgMCwgbWF4eSwgYmxhbmspOworCisJaWYgKHJlcyA9PSBFUlIgJiYgY2hhbmdlX3Njcm9sbF9yZWdpb24pIHsKKwkgICAgaWYgKCgoKG4gPT0gMSAmJiBzY3JvbGxfZm9yd2FyZCkgfHwgcGFybV9pbmRleCkKKwkJICYmIChTUC0+X2N1cnNyb3cgPT0gYm90IHx8IFNQLT5fY3Vyc3JvdyA9PSBib3QgLSAxKSkKKwkJJiYgc2F2ZV9jdXJzb3IgJiYgcmVzdG9yZV9jdXJzb3IpIHsKKwkJY3Vyc29yX3NhdmVkID0gVFJVRTsKKwkJVFBVVFNfVFJBQ0UoInNhdmVfY3Vyc29yIik7CisJCXB1dHAoc2F2ZV9jdXJzb3IpOworCSAgICB9CisJICAgIFRQVVRTX1RSQUNFKCJjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiIpOworCSAgICBwdXRwKFRQQVJNXzIoY2hhbmdlX3Njcm9sbF9yZWdpb24sIHRvcCwgYm90KSk7CisJICAgIGlmIChjdXJzb3Jfc2F2ZWQpIHsKKwkJVFBVVFNfVFJBQ0UoInJlc3RvcmVfY3Vyc29yIik7CisJCXB1dHAocmVzdG9yZV9jdXJzb3IpOworCSAgICB9IGVsc2UgeworCQlTUC0+X2N1cnNyb3cgPSBTUC0+X2N1cnNjb2wgPSAtMTsKKwkgICAgfQorCisJICAgIHJlcyA9IHNjcm9sbF9jc3JfZm9yd2FyZChuLCB0b3AsIGJvdCwgdG9wLCBib3QsIGJsYW5rKTsKKworCSAgICBUUFVUU19UUkFDRSgiY2hhbmdlX3Njcm9sbF9yZWdpb24iKTsKKwkgICAgcHV0cChUUEFSTV8yKGNoYW5nZV9zY3JvbGxfcmVnaW9uLCAwLCBtYXh5KSk7CisJICAgIFNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IC0xOworCX0KKworCWlmIChyZXMgPT0gRVJSICYmIF9uY19pZGxvaykKKwkgICAgcmVzID0gc2Nyb2xsX2lkbChuLCB0b3AsIGJvdCAtIG4gKyAxLCBibGFuayk7CisKKwkvKgorCSAqIENsZWFyIHRoZSBuZXdseSBzaGlmdGVkLWluIHRleHQuCisJICovCisJaWYgKHJlcyAhPSBFUlIKKwkgICAgJiYgKG5vbl9kZXN0X3Njcm9sbF9yZWdpb24gfHwgKG1lbW9yeV9iZWxvdyAmJiBib3QgPT0gbWF4eSkpKSB7CisJICAgIHN0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmsyID0gTmV3Q2hhcihCTEFOS19URVhUKTsKKwkgICAgaWYgKGJvdCA9PSBtYXh5ICYmIGNscl9lb3MpIHsKKwkJR29Ubyhib3QgLSBuICsgMSwgMCk7CisJCUNsclRvRU9TKGJsYW5rMik7CisJICAgIH0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJICAgIEdvVG8oYm90IC0gaSwgMCk7CisJCSAgICBDbHJUb0VPTChibGFuazIsIEZBTFNFKTsKKwkJfQorCSAgICB9CisJfQorCisgICAgfSBlbHNlIHsJCQkvKiAobiA8IDApIC0gc2Nyb2xsIGRvd24gKGJhY2t3YXJkKSAqLworCXJlcyA9IHNjcm9sbF9jc3JfYmFja3dhcmQoLW4sIHRvcCwgYm90LCAwLCBtYXh5LCBibGFuayk7CisKKwlpZiAocmVzID09IEVSUiAmJiBjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbikgeworCSAgICBpZiAodG9wICE9IDAgJiYgKFNQLT5fY3Vyc3JvdyA9PSB0b3AgfHwgU1AtPl9jdXJzcm93ID09IHRvcCAtIDEpCisJCSYmIHNhdmVfY3Vyc29yICYmIHJlc3RvcmVfY3Vyc29yKSB7CisJCWN1cnNvcl9zYXZlZCA9IFRSVUU7CisJCVRQVVRTX1RSQUNFKCJzYXZlX2N1cnNvciIpOworCQlwdXRwKHNhdmVfY3Vyc29yKTsKKwkgICAgfQorCSAgICBUUFVUU19UUkFDRSgiY2hhbmdlX3Njcm9sbF9yZWdpb24iKTsKKwkgICAgcHV0cChUUEFSTV8yKGNoYW5nZV9zY3JvbGxfcmVnaW9uLCB0b3AsIGJvdCkpOworCSAgICBpZiAoY3Vyc29yX3NhdmVkKSB7CisJCVRQVVRTX1RSQUNFKCJyZXN0b3JlX2N1cnNvciIpOworCQlwdXRwKHJlc3RvcmVfY3Vyc29yKTsKKwkgICAgfSBlbHNlIHsKKwkJU1AtPl9jdXJzcm93ID0gU1AtPl9jdXJzY29sID0gLTE7CisJICAgIH0KKworCSAgICByZXMgPSBzY3JvbGxfY3NyX2JhY2t3YXJkKC1uLCB0b3AsIGJvdCwgdG9wLCBib3QsIGJsYW5rKTsKKworCSAgICBUUFVUU19UUkFDRSgiY2hhbmdlX3Njcm9sbF9yZWdpb24iKTsKKwkgICAgcHV0cChUUEFSTV8yKGNoYW5nZV9zY3JvbGxfcmVnaW9uLCAwLCBtYXh5KSk7CisJICAgIFNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IC0xOworCX0KKworCWlmIChyZXMgPT0gRVJSICYmIF9uY19pZGxvaykKKwkgICAgcmVzID0gc2Nyb2xsX2lkbCgtbiwgYm90ICsgbiArIDEsIHRvcCwgYmxhbmspOworCisJLyoKKwkgKiBDbGVhciB0aGUgbmV3bHkgc2hpZnRlZC1pbiB0ZXh0LgorCSAqLworCWlmIChyZXMgIT0gRVJSCisJICAgICYmIChub25fZGVzdF9zY3JvbGxfcmVnaW9uIHx8IChtZW1vcnlfYWJvdmUgJiYgdG9wID09IDApKSkgeworCSAgICBzdGF0aWMgY29uc3QgTkNVUlNFU19DSF9UIGJsYW5rMiA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CisJICAgIGZvciAoaSA9IDA7IGkgPCAtbjsgaSsrKSB7CisJCUdvVG8oaSArIHRvcCwgMCk7CisJCUNsclRvRU9MKGJsYW5rMiwgRkFMU0UpOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChyZXMgPT0gRVJSKQorCXJldHVybiAoRVJSKTsKKworICAgIF9uY19zY3JvbGxfd2luZG93KGN1cnNjciwgbiwgdG9wLCBib3QsIGJsYW5rKTsKKworICAgIC8qIHNoaWZ0IGhhc2ggdmFsdWVzIHRvbyAtIHRoZXkgY2FuIGJlIHJldXNlZCAqLworICAgIF9uY19zY3JvbGxfb2xkaGFzaChuLCB0b3AsIGJvdCk7CisKKyAgICByZXR1cm4gKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zY3JlZW5fcmVzdW1lKHZvaWQpCit7CisgICAgLyogbWFrZSBzdXJlIHRlcm1pbmFsIGlzIGluIGEgc2FuZSBrbm93biBzdGF0ZSAqLworICAgIFNldEF0dHIoU0NSRUVOX0FUVFJTKFNQKSwgQV9OT1JNQUwpOworICAgIG5ld3Njci0+X2NsZWFyID0gVFJVRTsKKworICAgIC8qIHJlc2V0IGNvbG9yIHBhaXJzIGFuZCBkZWZpbml0aW9ucyAqLworICAgIGlmIChTUC0+X2NvbG9yb24gfHwgU1AtPl9jb2xvcl9kZWZzKQorCV9uY19yZXNldF9jb2xvcnMoKTsKKworICAgIC8qIHJlc3RvcmUgdXNlci1kZWZpbmVkIGNvbG9ycywgaWYgYW55ICovCisgICAgaWYgKFNQLT5fY29sb3JfZGVmcyA8IDApIHsKKwlpbnQgbjsKKwlTUC0+X2NvbG9yX2RlZnMgPSAtKFNQLT5fY29sb3JfZGVmcyk7CisJZm9yIChuID0gMDsgbiA8IFNQLT5fY29sb3JfZGVmczsgKytuKSB7CisJICAgIGlmIChTUC0+X2NvbG9yX3RhYmxlW25dLmluaXQpIHsKKwkJaW5pdF9jb2xvcihuLAorCQkJICAgU1AtPl9jb2xvcl90YWJsZVtuXS5yLAorCQkJICAgU1AtPl9jb2xvcl90YWJsZVtuXS5nLAorCQkJICAgU1AtPl9jb2xvcl90YWJsZVtuXS5iKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBpZiAoZXhpdF9hdHRyaWJ1dGVfbW9kZSkKKwlwdXRwKGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIGVsc2UgeworCS8qIHR1cm4gb2ZmIGF0dHJpYnV0ZXMgKi8KKwlpZiAoZXhpdF9hbHRfY2hhcnNldF9tb2RlKQorCSAgICBwdXRwKGV4aXRfYWx0X2NoYXJzZXRfbW9kZSk7CisJaWYgKGV4aXRfc3RhbmRvdXRfbW9kZSkKKwkgICAgcHV0cChleGl0X3N0YW5kb3V0X21vZGUpOworCWlmIChleGl0X3VuZGVybGluZV9tb2RlKQorCSAgICBwdXRwKGV4aXRfdW5kZXJsaW5lX21vZGUpOworICAgIH0KKyAgICBpZiAoZXhpdF9pbnNlcnRfbW9kZSkKKwlwdXRwKGV4aXRfaW5zZXJ0X21vZGUpOworICAgIGlmIChlbnRlcl9hbV9tb2RlICYmIGV4aXRfYW1fbW9kZSkKKwlwdXRwKGF1dG9fcmlnaHRfbWFyZ2luID8gZW50ZXJfYW1fbW9kZSA6IGV4aXRfYW1fbW9kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2NyZWVuX2luaXQodm9pZCkKK3sKKyAgICBfbmNfc2NyZWVuX3Jlc3VtZSgpOworfQorCisvKiB3cmFwIHVwIHNjcmVlbiBoYW5kbGluZyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zY3JlZW5fd3JhcCh2b2lkKQoreworICAgIFVwZGF0ZUF0dHJzKG5vcm1hbCk7CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBpZiAoU1AtPl9jb2xvcm9uCisJJiYgIVNQLT5fZGVmYXVsdF9jb2xvcikgeworCXN0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBOZXdDaGFyKEJMQU5LX1RFWFQpOworCVNQLT5fZGVmYXVsdF9jb2xvciA9IFRSVUU7CisJX25jX2RvX2NvbG9yKC0xLCAwLCBGQUxTRSwgX25jX291dGNoKTsKKwlTUC0+X2RlZmF1bHRfY29sb3IgPSBGQUxTRTsKKworCW12Y3VyKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sLCBzY3JlZW5fbGluZXMgLSAxLCAwKTsKKworCUNsclRvRU9MKGJsYW5rLCBUUlVFKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoU1AtPl9jb2xvcl9kZWZzKSB7CisJX25jX3Jlc2V0X2NvbG9ycygpOworICAgIH0KK30KKworI2lmIFVTRV9YTUNfU1VQUE9SVAorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19kb194bWNfZ2xpdGNoKGF0dHJfdCBwcmV2aW91cykKK3sKKyAgICBhdHRyX3QgY2hnID0gWE1DX0NIQU5HRVMocHJldmlvdXMgXiBBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSkpOworCisgICAgd2hpbGUgKGNoZyAhPSAwKSB7CisJaWYgKGNoZyAmIDEpIHsKKwkgICAgU1AtPl9jdXJzY29sICs9IG1hZ2ljX2Nvb2tpZV9nbGl0Y2g7CisJICAgIGlmIChTUC0+X2N1cnNjb2wgPj0gU1AtPl9jb2x1bW5zKQorCQl3cmFwX2N1cnNvcigpOworCSAgICBUUihUUkFDRV9VUERBVEUsICgiYnVtcGVkIHRvICVkLCVkIGFmdGVyIGNvb2tpZSIsIFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sKSk7CisJfQorCWNoZyA+Pj0gMTsKKyAgICB9Cit9CisjZW5kaWYgLyogVVNFX1hNQ19TVVBQT1JUICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2NoYXJhYmxlLmMgYi9uY3Vyc2VzL3dpZGVjaGFyL2NoYXJhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjZWIzMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvY2hhcmFibGUuYwpAQCAtMCwwICsxLDgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHdpZGUvbmFycm93IGNvbnZlcnNpb24uCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGNoYXJhYmxlLmMsdiAxLjUgMjAwOC8wNy8wNSAyMDo1MTo0MSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfaXNfY2hhcmFibGUod2NoYXJfdCBjaCkKK3sKKyAgICBib29sIHJlc3VsdDsKKyNpZiBIQVZFX1dDVE9CCisgICAgcmVzdWx0ID0gKHdjdG9iKCh3aW50X3QpIGNoKSA9PSAoaW50KSBjaCk7CisjZWxzZQorICAgIHJlc3VsdCA9IChfbmNfdG9fY2hhcihjaCkgPj0gMCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY190b19jaGFyKHdpbnRfdCBjaCkKK3sKKyAgICBpbnQgcmVzdWx0OworI2lmIEhBVkVfV0NUT0IKKyAgICByZXN1bHQgPSB3Y3RvYihjaCk7CisjZWxpZiBIQVZFX1dDVE9NQgorICAgIGNoYXIgdGVtcFtNQl9MRU5fTUFYXTsKKyAgICByZXN1bHQgPSB3Y3RvbWIodGVtcCwgY2gpOworICAgIGlmIChzdHJsZW4odGVtcCkgPT0gMSkKKwlyZXN1bHQgPSBVQ2hhcih0ZW1wWzBdKTsKKyAgICBlbHNlCisJcmVzdWx0ID0gLTE7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVCh3aW50X3QpIF9uY190b193aWRlY2hhcihpbnQgY2gpCit7CisgICAgd2ludF90IHJlc3VsdDsKKyNpZiBIQVZFX0JUT1dDCisgICAgcmVzdWx0ID0gYnRvd2MoY2gpOworI2VsaWYgSEFWRV9NQlRPV0MKKyAgICB3Y2hhcl90IGNvbnZlcnQ7CisgICAgY2hhciB0ZW1wWzJdOworICAgIHRlbXBbMF0gPSBjaDsKKyAgICB0ZW1wWzFdID0gJ1wwJzsKKyAgICBpZiAobWJ0b3djKCZjb252ZXJ0LCB0ZW1wLCAxKSA+PSAwKQorCXJlc3VsdCA9IGNvbnZlcnQ7CisgICAgZWxzZQorCXJlc3VsdCA9IFdFT0Y7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy93aWRlY2hhci9saWJfYWRkX3djaC5jIGIvbmN1cnNlcy93aWRlY2hhci9saWJfYWRkX3djaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjQxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9hZGRfd2NoLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfYWRkX3djaC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2FkZF93Y2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9hZGRfd2NoLmMsdiAxLjYgMjAwNi8xMi8wMiAyMToxOToxNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YWRkX3djaChXSU5ET1cgKndpbiwgY29uc3QgY2NoYXJfdCAqd2NoKQoreworICAgIFBVVENfREFUQTsKKyAgICBpbnQgbjsKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX0NBTExFRCgid2FkZF93Y2goJXAsICVzKSIpLCB3aW4sCisJCQkJICAgICAgX3RyYWNlY2hfdCh3Y2gpKSk7CisKKyAgICBpZiAod2luICE9IDApIHsKKwlQVVRDX0lOSVQ7CisJZm9yIChQVVRDX2kgPSAwOyBQVVRDX2kgPCBDQ0hBUldfTUFYOyArK1BVVENfaSkgeworCSAgICBhdHRyX3QgYXR0cnMgPSAod2NoLT5hdHRyICYgQV9BVFRSSUJVVEVTKTsKKworCSAgICBpZiAoKFBVVENfY2ggPSB3Y2gtPmNoYXJzW1BVVENfaV0pID09IEwnXDAnKQorCQlicmVhazsKKwkgICAgaWYgKChQVVRDX24gPSB3Y3J0b21iKFBVVENfYnVmLCBQVVRDX2NoLCAmUFVUX3N0KSkgPD0gMCkgeworCQljb2RlID0gRVJSOworCQlpZiAoaXM4Yml0cyhQVVRDX2NoKSkKKwkJICAgIGNvZGUgPSB3YWRkY2god2luLCBVQ2hhcihQVVRDX2NoKSB8IGF0dHJzKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZm9yIChuID0gMDsgbiA8IFBVVENfbjsgbisrKSB7CisJCWlmICgoY29kZSA9IHdhZGRjaCh3aW4sIFVDaGFyKFBVVENfYnVmW25dKSB8IGF0dHJzKSkgPT0gRVJSKSB7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGlmIChjb2RlID09IEVSUikKKwkJYnJlYWs7CisJfQorICAgIH0KKworICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICAgIHJldHVybiAoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dlY2hvX3djaGFyKFdJTkRPVyAqd2luLCBjb25zdCBjY2hhcl90ICp3Y2gpCit7CisgICAgUFVUQ19EQVRBOworICAgIGludCBuOworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0NDQUxMUywgKFRfQ0FMTEVEKCJ3ZWNob193Y2hhciglcCwgJXMpIiksIHdpbiwKKwkJCQkgICAgICBfdHJhY2VjaF90KHdjaCkpKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCVBVVENfSU5JVDsKKwlmb3IgKFBVVENfaSA9IDA7IFBVVENfaSA8IENDSEFSV19NQVg7ICsrUFVUQ19pKSB7CisJICAgIGF0dHJfdCBhdHRycyA9ICh3Y2gtPmF0dHIgJiBBX0FUVFJJQlVURVMpOworCisJICAgIGlmICgoUFVUQ19jaCA9IHdjaC0+Y2hhcnNbUFVUQ19pXSkgPT0gTCdcMCcpCisJCWJyZWFrOworCSAgICBpZiAoKFBVVENfbiA9IHdjcnRvbWIoUFVUQ19idWYsIFBVVENfY2gsICZQVVRfc3QpKSA8PSAwKSB7CisJCWNvZGUgPSBFUlI7CisJCWlmIChpczhiaXRzKFBVVENfY2gpKQorCQkgICAgY29kZSA9IHdhZGRjaCh3aW4sIFVDaGFyKFBVVENfY2gpIHwgYXR0cnMpOworCQlicmVhazsKKwkgICAgfQorCSAgICBmb3IgKG4gPSAwOyBuIDwgUFVUQ19uOyBuKyspIHsKKwkJaWYgKChjb2RlID0gd2FkZGNoKHdpbiwgVUNoYXIoUFVUQ19idWZbbl0pIHwgYXR0cnMpKSA9PSBFUlIpIHsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKGNvZGUgPT0gRVJSKQorCQlicmVhazsKKwl9CisJd3JlZnJlc2god2luKTsKKyAgICB9CisKKyAgICBUUihUUkFDRV9WSVJUUFVUIHwgVFJBQ0VfQ0NBTExTLCAoVF9SRVRVUk4oIiVkIiksIGNvZGUpKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy93aWRlY2hhci9saWJfYm94X3NldC5jIGIvbmN1cnNlcy93aWRlY2hhci9saWJfYm94X3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmNlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9ib3hfc2V0LmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBdXRob3JzOiBTdmVuIFZlcmRvb2xhZWdlIGFuZCBUaG9tYXMgRGlja2V5IDIwMDEsMjAwMiAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfYm94X3NldC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2JvcmRlcl9zZXQoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9ib3hfc2V0LmMsdiAxLjQgMjAwMy8xMi8wNiAxODowMjoxMyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3Ym9yZGVyX3NldChXSU5ET1cgKndpbiwKKwkgICAgY29uc3QgQVJHX0NIX1QgbHMsIGNvbnN0IEFSR19DSF9UIHJzLAorCSAgICBjb25zdCBBUkdfQ0hfVCB0cywgY29uc3QgQVJHX0NIX1QgYnMsCisJICAgIGNvbnN0IEFSR19DSF9UIHRsLCBjb25zdCBBUkdfQ0hfVCB0ciwKKwkgICAgY29uc3QgQVJHX0NIX1QgYmwsIGNvbnN0IEFSR19DSF9UIGJyKQoreworICAgIE5DVVJTRVNfU0laRV9UIGk7CisgICAgTkNVUlNFU19TSVpFX1QgZW5keCwgZW5keTsKKyAgICBOQ1VSU0VTX0NIX1Qgd2xzLCB3cnMsIHd0cywgd2JzLCB3dGwsIHd0ciwgd2JsLCB3YnI7CisKKyAgICBUKChUX0NBTExFRCgid2JvcmRlciglcCwlcywlcywlcywlcywlcywlcywlcywlcykiKSwKKyAgICAgICB3aW4sCisgICAgICAgX3RyYWNlY2hfdDIoMSwgbHMpLAorICAgICAgIF90cmFjZWNoX3QyKDIsIHJzKSwKKyAgICAgICBfdHJhY2VjaF90MigzLCB0cyksCisgICAgICAgX3RyYWNlY2hfdDIoNCwgYnMpLAorICAgICAgIF90cmFjZWNoX3QyKDUsIHRsKSwKKyAgICAgICBfdHJhY2VjaF90Mig2LCB0ciksCisgICAgICAgX3RyYWNlY2hfdDIoNywgYmwpLAorICAgICAgIF90cmFjZWNoX3QyKDgsIGJyKSkpOworCisgICAgaWYgKCF3aW4pCisJcmV0dXJuQ29kZShFUlIpOworCisjZGVmaW5lIFJFTkRFUl9XSVRIX0RFRkFVTFQoY2gsZGVmKSB3ICMjY2ggPSBfbmNfcmVuZGVyKHdpbiwgKGNoID09IDApID8gKihjb25zdCBBUkdfQ0hfVClkZWYgOiAqY2gpCisKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGxzLCBXQUNTX1ZMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKHJzLCBXQUNTX1ZMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKHRzLCBXQUNTX0hMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGJzLCBXQUNTX0hMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKHRsLCBXQUNTX1VMQ09STkVSKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKHRyLCBXQUNTX1VSQ09STkVSKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGJsLCBXQUNTX0xMQ09STkVSKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGJyLCBXQUNTX0xSQ09STkVSKTsKKworICAgIFQoKCJ1c2luZyAlcywgJXMsICVzLCAlcywgJXMsICVzLCAlcywgJXMiLAorICAgICAgIF90cmFjZWNoX3QyKDEsIENIUkVGKHdscykpLAorICAgICAgIF90cmFjZWNoX3QyKDIsIENIUkVGKHdycykpLAorICAgICAgIF90cmFjZWNoX3QyKDMsIENIUkVGKHd0cykpLAorICAgICAgIF90cmFjZWNoX3QyKDQsIENIUkVGKHdicykpLAorICAgICAgIF90cmFjZWNoX3QyKDUsIENIUkVGKHd0bCkpLAorICAgICAgIF90cmFjZWNoX3QyKDYsIENIUkVGKHd0cikpLAorICAgICAgIF90cmFjZWNoX3QyKDcsIENIUkVGKHdibCkpLAorICAgICAgIF90cmFjZWNoX3QyKDgsIENIUkVGKHdicikpKSk7CisKKyAgICBlbmR4ID0gd2luLT5fbWF4eDsKKyAgICBlbmR5ID0gd2luLT5fbWF4eTsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gZW5keDsgaSsrKSB7CisJd2luLT5fbGluZVswXS50ZXh0W2ldID0gd3RzOworCXdpbi0+X2xpbmVbZW5keV0udGV4dFtpXSA9IHdiczsKKyAgICB9CisgICAgd2luLT5fbGluZVtlbmR5XS5maXJzdGNoYXIgPSB3aW4tPl9saW5lWzBdLmZpcnN0Y2hhciA9IDA7CisgICAgd2luLT5fbGluZVtlbmR5XS5sYXN0Y2hhciA9IHdpbi0+X2xpbmVbMF0ubGFzdGNoYXIgPSBlbmR4OworCisgICAgZm9yIChpID0gMDsgaSA8PSBlbmR5OyBpKyspIHsKKwl3aW4tPl9saW5lW2ldLnRleHRbMF0gPSB3bHM7CisJd2luLT5fbGluZVtpXS50ZXh0W2VuZHhdID0gd3JzOworCXdpbi0+X2xpbmVbaV0uZmlyc3RjaGFyID0gMDsKKwl3aW4tPl9saW5lW2ldLmxhc3RjaGFyID0gZW5keDsKKyAgICB9CisgICAgd2luLT5fbGluZVswXS50ZXh0WzBdID0gd3RsOworICAgIHdpbi0+X2xpbmVbMF0udGV4dFtlbmR4XSA9IHd0cjsKKyAgICB3aW4tPl9saW5lW2VuZHldLnRleHRbMF0gPSB3Ymw7CisgICAgd2luLT5fbGluZVtlbmR5XS50ZXh0W2VuZHhdID0gd2JyOworCisgICAgX25jX3N5bmNob29rKHdpbik7CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9jY2hhci5jIGIvbmN1cnNlcy93aWRlY2hhci9saWJfY2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGEwYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfY2NoYXIuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9jY2hhci5jCisqKgorKioJVGhlIHJvdXRpbmVzIHNldGNjaGFyKCkgYW5kIGdldGNjaGFyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfY2NoYXIuYyx2IDEuMTIgMjAwNy8wNS8xMiAxOTowMzowNiB0b20gRXhwICQiKQorCisvKiAKKyAqIFRoZSBTdVN2MiBkZXNjcmlwdGlvbiBsZWF2ZXMgc29tZSByb29tIGZvciBpbnRlcnByZXRhdGlvbi4gIFdlJ2xsIGFzc3VtZSB3Y2gKKyAqIHBvaW50cyB0byBhIHN0cmluZyB3aGljaCBpcyBMJ1wwJyB0ZXJtaW5hdGVkLCBjb250YWlucyBhdCBsZWFzdCBvbmUKKyAqIGNoYXJhY3RlciB3aXRoIHN0cmljdGx5IHBvc2l0aXZlIHdpZHRoLCB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCwgYW5kCisgKiBjb250YWlucyBubyBjaGFyYWN0ZXJzIG9mIG5lZ2F0aXZlIHdpZHRoLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRjY2hhcihjY2hhcl90ICp3Y3ZhbCwKKwkgY29uc3Qgd2NoYXJfdCAqd2NoLAorCSBjb25zdCBhdHRyX3QgYXR0cnMsCisJIHNob3J0IGNvbG9yX3BhaXIsCisJIGNvbnN0IHZvaWQgKm9wdHMpCit7CisgICAgaW50IGk7CisgICAgaW50IGxlbjsKKyAgICBpbnQgY29kZSA9IE9LOworCisgICAgVFIoVFJBQ0VfQ0NBTExTLCAoVF9DQUxMRUQoInNldGNjaGFyKCVwLCVzLCVsdSwlZCwlcCkiKSwKKwkJICAgICAgd2N2YWwsIF9uY192aXN3YnVmKHdjaCksCisJCSAgICAgICh1bnNpZ25lZCBsb25nKSBhdHRycywgY29sb3JfcGFpciwgb3B0cykpOworCisgICAgbGVuID0gd2NzbGVuKHdjaCk7CisgICAgaWYgKG9wdHMgIT0gTlVMTAorCXx8IChsZW4gPiAxICYmIHdjd2lkdGgod2NoWzBdKSA8IDApKSB7CisJY29kZSA9IEVSUjsKKyAgICB9IGVsc2UgeworCWlmIChsZW4gPiBDQ0hBUldfTUFYKQorCSAgICBsZW4gPSBDQ0hBUldfTUFYOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgZm9sbG93aW5nIHNwYWNpbmctY2hhcmFjdGVyLCBzdG9wIGF0IHRoYXQgcG9pbnQuICBXZQorCSAqIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYWRkaW5nIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMuCisJICovCisJZm9yIChpID0gMTsgaSA8IGxlbjsgKytpKSB7CisJICAgIGlmICh3Y3dpZHRoKHdjaFtpXSkgIT0gMCkgeworCQlsZW4gPSBpOworCQlicmVhazsKKwkgICAgfQorCX0KKworCW1lbXNldCh3Y3ZhbCwgMCwgc2l6ZW9mKCp3Y3ZhbCkpOworCisJaWYgKGxlbiAhPSAwKSB7CisJICAgIFNldEF0dHIoKndjdmFsLCBhdHRycyB8IENPTE9SX1BBSVIoY29sb3JfcGFpcikpOworCSAgICBTZXRQYWlyKENIREVSRUYod2N2YWwpLCBjb2xvcl9wYWlyKTsKKwkgICAgbWVtY3B5KCZ3Y3ZhbC0+Y2hhcnMsIHdjaCwgbGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKwkgICAgVFIoVFJBQ0VfQ0NBTExTLCAoImNvcHkgJWQgd2NoYXJzLCBmaXJzdCBpcyAlcyIsIGxlbiwKKwkJCSAgICAgIF90cmFjZWNjaGFyX3Qod2N2YWwpKSk7CisJfQorICAgIH0KKworICAgIFRSKFRSQUNFX0NDQUxMUywgKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorZ2V0Y2NoYXIoY29uc3QgY2NoYXJfdCAqd2N2YWwsCisJIHdjaGFyX3QgKndjaCwKKwkgYXR0cl90ICphdHRycywKKwkgc2hvcnQgKmNvbG9yX3BhaXIsCisJIHZvaWQgKm9wdHMpCit7CisgICAgd2NoYXJfdCAqd3A7CisgICAgaW50IGxlbjsKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFRSKFRSQUNFX0NDQUxMUywgKFRfQ0FMTEVEKCJnZXRjY2hhciglcCwlcCwlcCwlcCwlcCkiKSwKKwkJICAgICAgd2N2YWwsIHdjaCwgYXR0cnMsIGNvbG9yX3BhaXIsIG9wdHMpKTsKKworICAgIGlmIChvcHRzID09IE5VTEwpIHsKKwlsZW4gPSAod3AgPSB3bWVtY2hyKHdjdmFsLT5jaGFycywgTCdcMCcsIENDSEFSV19NQVgpKQorCSAgICA/IHdwIC0gd2N2YWwtPmNoYXJzCisJICAgIDogQ0NIQVJXX01BWDsKKworCWlmICh3Y2ggPT0gTlVMTCkgeworCSAgICBjb2RlID0gbGVuOworCX0gZWxzZSBpZiAoYXR0cnMgPT0gMCB8fCBjb2xvcl9wYWlyID09IDApIHsKKwkgICAgY29kZSA9IEVSUjsKKwl9IGVsc2UgaWYgKGxlbiA+PSAwKSB7CisJICAgICphdHRycyA9IEF0dHJPZigqd2N2YWwpICYgQV9BVFRSSUJVVEVTOworCSAgICAqY29sb3JfcGFpciA9IEdldFBhaXIoKndjdmFsKTsKKwkgICAgd21lbWNweSh3Y2gsIHdjdmFsLT5jaGFycywgKHVuc2lnbmVkKSBsZW4pOworCSAgICB3Y2hbbGVuXSA9IEwnXDAnOworCSAgICBjb2RlID0gT0s7CisJfQorICAgIH0KKworICAgIFRSKFRSQUNFX0NDQUxMUywgKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX2VyYXNld2NoYXIuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2VyYXNld2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDY0NTUzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfZXJhc2V3Y2hhci5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2VyYXNld2NoYXIuYyx2IDEuMSAyMDAyLzA1LzExIDIwOjM4OjA2IHRvbSBFeHAgJCIpCisKKy8qCisgKgllcmFzZXdjaGFyKCkKKyAqCisgKglSZXR1cm4gZXJhc2UgY2hhcmFjdGVyIGFzIGdpdmVuIGluIGN1cl90ZXJtLT5PdHR5Yi4KKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorZXJhc2V3Y2hhcih3Y2hhcl90ICogd2NoKQoreworICAgIGludCB2YWx1ZTsKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImVyYXNld2NoYXIoKSIpKSk7CisgICAgaWYgKCh2YWx1ZSA9IGVyYXNlY2hhcigpKSAhPSBFUlIpIHsKKwkqd2NoID0gdmFsdWU7CisJcmVzdWx0ID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyoKKyAqCWtpbGx3Y2hhcigpCisgKgorICoJUmV0dXJuIGtpbGwgY2hhcmFjdGVyIGFzIGdpdmVuIGluIGN1cl90ZXJtLT5PdHR5Yi4KKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQora2lsbHdjaGFyKHdjaGFyX3QgKiB3Y2gpCit7CisgICAgaW50IHZhbHVlOworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgia2lsbHdjaGFyKCkiKSkpOworICAgIGlmICgodmFsdWUgPSBraWxsY2hhcigpKSAhPSBFUlIpIHsKKwkqd2NoID0gdmFsdWU7CisJcmVzdWx0ID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX2dldF93Y2guYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2dldF93Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2YzMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfZ2V0X3djaC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDAyLW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2dldF93Y2guYworKioKKyoqCVRoZSByb3V0aW5lIGdldF93Y2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2dldF93Y2guYyx2IDEuMTcgMjAwOC8wOC8xNiAxOToyMjo1NSB0b20gRXhwICQiKQorCisjaWYgSEFWRV9NQlRPV0MgJiYgSEFWRV9NQkxFTgorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIG1ibGVuKE5VTEwsIDApLCBtYnRvd2MoTlVMTCwgTlVMTCwgMCkKKyNkZWZpbmUgY291bnRfbWJ5dGVzKGJ1ZmZlcixsZW5ndGgsc3RhdGUpIG1ibGVuKGJ1ZmZlcixsZW5ndGgpCisjZGVmaW5lIGNoZWNrX21ieXRlcyh3Y2gsYnVmZmVyLGxlbmd0aCxzdGF0ZSkgXAorCShpbnQpIG1idG93Yygmd2NoLCBidWZmZXIsIGxlbmd0aCkKKyNkZWZpbmUgc3RhdGVfdW51c2VkCisjZWxpZiBIQVZFX01CUlRPV0MgJiYgSEFWRV9NQlJMRU4KKyNkZWZpbmUgcmVzZXRfbWJ5dGVzKHN0YXRlKSBpbml0X21iKHN0YXRlKQorI2RlZmluZSBjb3VudF9tYnl0ZXMoYnVmZmVyLGxlbmd0aCxzdGF0ZSkgbWJybGVuKGJ1ZmZlcixsZW5ndGgsJnN0YXRlKQorI2RlZmluZSBjaGVja19tYnl0ZXMod2NoLGJ1ZmZlcixsZW5ndGgsc3RhdGUpIFwKKwkoaW50KSBtYnJ0b3djKCZ3Y2gsIGJ1ZmZlciwgbGVuZ3RoLCAmc3RhdGUpCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dnZXRfd2NoKFdJTkRPVyAqd2luLCB3aW50X3QgKnJlc3VsdCkKK3sKKyAgICBTQ1JFRU4gKnNwOworICAgIGludCBjb2RlOworICAgIGNoYXIgYnVmZmVyWyhNQl9MRU5fTUFYICogOSkgKyAxXTsJLyogYWxsb3cgc29tZSByZWR1bmRhbnQgc2hpZnRzICovCisgICAgaW50IHN0YXR1czsKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisgICAgd2NoYXJfdCB3Y2g7CisjaWZuZGVmIHN0YXRlX3VudXNlZAorICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyNlbmRpZgorCisgICAgVCgoVF9DQUxMRUQoIndnZXRfd2NoKCVwKSIpLCB3aW4pKTsKKworICAgIC8qCisgICAgICogV2UgY2FuIGdldCBhIHN0cmVhbSBvZiBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzIGFuZCBLRVlfeHh4IGNvZGVzIGZyb20KKyAgICAgKiBfbmNfd2dldGNoKCksIHdoaWxlIHdlIHdhbnQgdG8gcmV0dXJuIGEgd2lkZSBjaGFyYWN0ZXIgb3IgS0VZX3h4eCBjb2RlLgorICAgICAqLworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIHNwID0gX25jX3NjcmVlbl9vZih3aW4pOworICAgIGlmIChzcCAhPSAwKSB7CisJZm9yICg7OykgeworCSAgICBUKCgicmVhZGluZyAlZCBvZiAlZCIsIChpbnQpIGNvdW50ICsgMSwgKGludCkgc2l6ZW9mKGJ1ZmZlcikpKTsKKwkgICAgY29kZSA9IF9uY193Z2V0Y2god2luLCAmdmFsdWUsIFRSVUUgRVZFTlRMSVNUXzJuZCgoX25jX2V2ZW50bGlzdAorCQkJCQkJCSAgICAgICAqKSAwKSk7CisJICAgIGlmIChjb2RlID09IEVSUikgeworCQlicmVhazsKKwkgICAgfSBlbHNlIGlmIChjb2RlID09IEtFWV9DT0RFX1lFUykgeworCQkvKgorCQkgKiBJZiB3ZSB3ZXJlIHByb2Nlc3NpbmcgYW4gaW5jb21wbGV0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVyLAorCQkgKiByZXR1cm4gYW4gZXJyb3Igc2luY2Ugd2UgaGF2ZSBhIEtFWV94eHggY29kZSB3aGljaAorCQkgKiBpbnRlcnJ1cHRzIGl0LiAgRm9yIHNvbWUgY2FzZXMsIHdlIGNvdWxkIGltcHJvdmUgdGhpcyBieQorCQkgKiB3cml0aW5nIGEgbmV3IHZlcnNpb24gb2YgbGliX2dldGNoLmMoISksIGJ1dCBpdCBpcyBub3QgY2xlYXIKKwkJICogd2hldGhlciB0aGUgaW1wcm92ZW1lbnQgd291bGQgYmUgd29ydGggdGhlIGVmZm9ydC4KKwkJICovCisJCWlmIChjb3VudCAhPSAwKSB7CisJCSAgICBfbmNfdW5nZXRjaChzcCwgKGludCkgdmFsdWUpOworCQkgICAgY29kZSA9IEVSUjsKKwkJfQorCQlicmVhazsKKwkgICAgfSBlbHNlIGlmIChjb3VudCArIDEgPj0gc2l6ZW9mKGJ1ZmZlcikpIHsKKwkJX25jX3VuZ2V0Y2goc3AsIChpbnQpIHZhbHVlKTsKKwkJY29kZSA9IEVSUjsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCWJ1ZmZlcltjb3VudCsrXSA9IChjaGFyKSBVQ2hhcih2YWx1ZSk7CisJCXJlc2V0X21ieXRlcyhzdGF0ZSk7CisJCXN0YXR1cyA9IGNvdW50X21ieXRlcyhidWZmZXIsIGNvdW50LCBzdGF0ZSk7CisJCWlmIChzdGF0dXMgPj0gMCkgeworCQkgICAgcmVzZXRfbWJ5dGVzKHN0YXRlKTsKKwkJICAgIGlmIChjaGVja19tYnl0ZXMod2NoLCBidWZmZXIsIGNvdW50LCBzdGF0ZSkgIT0gc3RhdHVzKSB7CisJCQljb2RlID0gRVJSOwkvKiB0aGUgdHdvIGNhbGxzIHNob3VsZCBtYXRjaCAqLworCQkJX25jX3VuZ2V0Y2goc3AsIChpbnQpIHZhbHVlKTsKKwkJICAgIH0KKwkJICAgIHZhbHVlID0gd2NoOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWNvZGUgPSBFUlI7CisgICAgfQorICAgICpyZXN1bHQgPSB2YWx1ZTsKKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIFQoKCJyZXN1bHQgJSNsbyIsIHZhbHVlKSk7CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX2dldF93c3RyLmMgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9nZXRfd3N0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYTcwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9nZXRfd3N0ci5jCkBAIC0wLDAgKzEsMjMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2dldF93c3RyLmMKKyoqCisqKglUaGUgcm91dGluZSB3Z2V0bl93c3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2dldF93c3RyLmMsdiAxLjEwIDIwMDgvMDgvMTYgMTk6MjU6MzMgdG9tIEV4cCAkIikKKworc3RhdGljIGludAord2FkZF93aW50KFdJTkRPVyAqd2luLCB3aW50X3QgKnNyYykKK3sKKyAgICBjY2hhcl90IHRtcDsKKyAgICB3Y2hhcl90IHdjaFsyXTsKKworICAgIHdjaFswXSA9ICh3Y2hhcl90KSAoKnNyYyk7CisgICAgd2NoWzFdID0gMDsKKyAgICBzZXRjY2hhcigmdG1wLCB3Y2gsIEFfTk9STUFMLCAwLCBOVUxMKTsKKyAgICByZXR1cm4gd2FkZF93Y2god2luLCAmdG1wKTsKK30KKworLyoKKyAqIFRoaXMgd2lwZXMgb3V0IHRoZSBsYXN0IGNoYXJhY3Rlciwgbm8gbWF0dGVyIHdoZXRoZXIgaXQgd2FzIGEgdGFiLCBjb250cm9sCisgKiBvciBvdGhlciBjaGFyYWN0ZXIsIGFuZCBoYW5kbGVzIHJldmVyc2Ugd3JhcGFyb3VuZC4KKyAqLworc3RhdGljIHdpbnRfdCAqCitXaXBlT3V0KFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIHdpbnRfdCAqZmlyc3QsIHdpbnRfdCAqbGFzdCwgYm9vbCBlY2hvZWQpCit7CisgICAgaWYgKGxhc3QgPiBmaXJzdCkgeworCSotLWxhc3QgPSAnXDAnOworCWlmIChlY2hvZWQpIHsKKwkgICAgaW50IHkxID0gd2luLT5fY3VyeTsKKwkgICAgaW50IHgxID0gd2luLT5fY3VyeDsKKwkgICAgaW50IG47CisKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgZm9yIChuID0gMDsgZmlyc3Rbbl0gIT0gMDsgKytuKSB7CisJCXdhZGRfd2ludCh3aW4sIGZpcnN0ICsgbik7CisJICAgIH0KKwkgICAgZ2V0eXgod2luLCB5LCB4KTsKKwkgICAgd2hpbGUgKHdpbi0+X2N1cnkgPCB5MQorCQkgICB8fCAod2luLT5fY3VyeSA9PSB5MSAmJiB3aW4tPl9jdXJ4IDwgeDEpKQorCQl3YWRkY2god2luLCAoY2h0eXBlKSAnICcpOworCisJICAgIHdtb3ZlKHdpbiwgeSwgeCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gbGFzdDsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2dldG5fd3N0cihXSU5ET1cgKndpbiwgd2ludF90ICpzdHIsIGludCBtYXhsZW4pCit7CisgICAgU0NSRUVOICpzcCA9IF9uY19zY3JlZW5fb2Yod2luKTsKKyAgICBUVFkgYnVmOworICAgIGJvb2wgb2xkbmwsIG9sZGVjaG8sIG9sZHJhdywgb2xkY2JyZWFrOworICAgIHdpbnRfdCBlcmFzZWM7CisgICAgd2ludF90IGtpbGxjOworICAgIHdpbnRfdCAqb2xkc3RyID0gc3RyOworICAgIHdpbnRfdCAqdG1wc3RyID0gc3RyOworICAgIHdpbnRfdCBjaDsKKyAgICBpbnQgeSwgeCwgY29kZTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Z2V0bl93c3RyKCVwLCVwLCAlZCkiKSwgd2luLCBzdHIsIG1heGxlbikpOworCisgICAgaWYgKCF3aW4pCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgX25jX2dldF90dHlfbW9kZSgmYnVmKTsKKworICAgIG9sZG5sID0gc3AtPl9ubDsKKyAgICBvbGRlY2hvID0gc3AtPl9lY2hvOworICAgIG9sZHJhdyA9IHNwLT5fcmF3OworICAgIG9sZGNicmVhayA9IHNwLT5fY2JyZWFrOworICAgIG5sKCk7CisgICAgbm9lY2hvKCk7CisgICAgbm9yYXcoKTsKKyAgICBjYnJlYWsoKTsKKworICAgIGVyYXNlYyA9ICh3aW50X3QpIGVyYXNlY2hhcigpOworICAgIGtpbGxjID0gKHdpbnRfdCkga2lsbGNoYXIoKTsKKworICAgIGdldHl4KHdpbiwgeSwgeCk7CisKKyAgICBpZiAoaXNfd2ludG91Y2hlZCh3aW4pIHx8ICh3aW4tPl9mbGFncyAmIF9IQVNNT1ZFRCkpCisJd3JlZnJlc2god2luKTsKKworICAgIHdoaWxlICgoY29kZSA9IHdnZXRfd2NoKHdpbiwgJmNoKSkgIT0gRVJSKSB7CisJLyoKKwkgKiBNYXAgc3BlY2lhbCBjaGFyYWN0ZXJzIGludG8ga2V5LWNvZGVzLgorCSAqLworCWlmIChjaCA9PSAnXHInKQorCSAgICBjaCA9ICdcbic7CisJaWYgKGNoID09ICdcbicpIHsKKwkgICAgY29kZSA9IEtFWV9DT0RFX1lFUzsKKwkgICAgY2ggPSBLRVlfRU5URVI7CisJfQorCWlmIChjaCA8IEtFWV9NSU4pIHsKKwkgICAgaWYgKGNoID09IGVyYXNlYykgeworCQljaCA9IEtFWV9CQUNLU1BBQ0U7CisJCWNvZGUgPSBLRVlfQ09ERV9ZRVM7CisJICAgIH0KKwkgICAgaWYgKGNoID09IGtpbGxjKSB7CisJCWNoID0gS0VZX0VPTDsKKwkJY29kZSA9IEtFWV9DT0RFX1lFUzsKKwkgICAgfQorCX0KKwlpZiAoY29kZSA9PSBLRVlfQ09ERV9ZRVMpIHsKKwkgICAgLyoKKwkgICAgICogU29tZSB0ZXJtaW5hbHMgKHRoZSBXeXNlLTUwIGlzIHRoZSBtb3N0IGNvbW1vbikgZ2VuZXJhdGUgYSBcbgorCSAgICAgKiBmcm9tIHRoZSBkb3duLWFycm93IGtleS4gIFdpdGggdGhpcyBsb2dpYywgaXQncyB0aGUgdXNlcidzCisJICAgICAqIGNob2ljZSB3aGV0aGVyIHRvIHNldCBrY3VkPVxuIGZvciB3Z2V0X3djaCgpOyB0ZXJtaW5hdGluZworCSAgICAgKiAqZ2V0bl93c3RyKCkgd2l0aCBcbiBzaG91bGQgd29yayBlaXRoZXIgd2F5LgorCSAgICAgKi8KKwkgICAgaWYgKGNoID09IEtFWV9ET1dOIHx8IGNoID09IEtFWV9FTlRFUikgeworCQlpZiAob2xkZWNobyA9PSBUUlVFCisJCSAgICAmJiB3aW4tPl9jdXJ5ID09IHdpbi0+X21heHkKKwkJICAgICYmIHdpbi0+X3Njcm9sbCkKKwkJICAgIHdlY2hvY2hhcih3aW4sIChjaHR5cGUpICdcbicpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoY2ggPT0gS0VZX0xFRlQgfHwgY2ggPT0gS0VZX0JBQ0tTUEFDRSkgeworCQlpZiAodG1wc3RyID4gb2xkc3RyKSB7CisJCSAgICB0bXBzdHIgPSBXaXBlT3V0KHdpbiwgeSwgeCwgb2xkc3RyLCB0bXBzdHIsIG9sZGVjaG8pOworCQl9CisJICAgIH0gZWxzZSBpZiAoY2ggPT0gS0VZX0VPTCkgeworCQl3aGlsZSAodG1wc3RyID4gb2xkc3RyKSB7CisJCSAgICB0bXBzdHIgPSBXaXBlT3V0KHdpbiwgeSwgeCwgb2xkc3RyLCB0bXBzdHIsIG9sZGVjaG8pOworCQl9CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCX0gZWxzZSBpZiAobWF4bGVuID49IDAgJiYgdG1wc3RyIC0gb2xkc3RyID49IG1heGxlbikgeworCSAgICBiZWVwKCk7CisJfSBlbHNlIHsKKwkgICAgKnRtcHN0cisrID0gY2g7CisJICAgICp0bXBzdHIgPSAwOworCSAgICBpZiAob2xkZWNobyA9PSBUUlVFKSB7CisJCWludCBvbGR5ID0gd2luLT5fY3VyeTsKKworCQlpZiAod2FkZF93aW50KHdpbiwgdG1wc3RyIC0gMSkgPT0gRVJSKSB7CisJCSAgICAvKgorCQkgICAgICogV2UgY2FuJ3QgcmVhbGx5IHVzZSB0aGUgbG93ZXItcmlnaHQgY29ybmVyIGZvciBpbnB1dCwKKwkJICAgICAqIHNpbmNlIGl0J2xsIG1lc3MgdXAgYm9va2tlZXBpbmcgZm9yIGVyYXNlcy4KKwkJICAgICAqLworCQkgICAgd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCQkgICAgd2FkZGNoKHdpbiwgKGNodHlwZSkgJyAnKTsKKwkJICAgIHRtcHN0ciA9IFdpcGVPdXQod2luLCB5LCB4LCBvbGRzdHIsIHRtcHN0ciwgb2xkZWNobyk7CisJCSAgICBjb250aW51ZTsKKwkJfSBlbHNlIGlmICh3aW4tPl9mbGFncyAmIF9XUkFQUEVEKSB7CisJCSAgICAvKgorCQkgICAgICogSWYgdGhlIGxhc3Qgd2FkZGNoIGZvcmNlZCBhIHdyYXAgJiBzY3JvbGwsIGFkanVzdCBvdXIKKwkJICAgICAqIHJlZmVyZW5jZSBwb2ludCBmb3IgZXJhc3VyZXMuCisJCSAgICAgKi8KKwkJICAgIGlmICh3aW4tPl9zY3JvbGwKKwkJCSYmIG9sZHkgPT0gd2luLT5fbWF4eQorCQkJJiYgd2luLT5fY3VyeSA9PSB3aW4tPl9tYXh5KSB7CisJCQlpZiAoLS15IDw9IDApIHsKKwkJCSAgICB5ID0gMDsKKwkJCX0KKwkJICAgIH0KKwkJICAgIHdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKwkJfQorCQl3cmVmcmVzaCh3aW4pOworCSAgICB9CisJfQorICAgIH0KKworICAgIHdpbi0+X2N1cnggPSAwOworICAgIHdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKyAgICBpZiAod2luLT5fY3VyeSA8IHdpbi0+X21heHkpCisJd2luLT5fY3VyeSsrOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICAvKiBSZXN0b3JlIHdpdGggYSBzaW5nbGUgSS9PIGNhbGwsIHRvIGZpeCBtaW5vciBhc3ltbWV0cnkgYmV0d2VlbgorICAgICAqIHJhdy9ub3JhdywgZXRjLgorICAgICAqLworICAgIHNwLT5fbmwgPSBvbGRubDsKKyAgICBzcC0+X2VjaG8gPSBvbGRlY2hvOworICAgIHNwLT5fcmF3ID0gb2xkcmF3OworICAgIHNwLT5fY2JyZWFrID0gb2xkY2JyZWFrOworCisgICAgKHZvaWQpIF9uY19zZXRfdHR5X21vZGUoJmJ1Zik7CisKKyAgICAqdG1wc3RyID0gMDsKKyAgICBpZiAoY29kZSA9PSBFUlIpIHsKKwlpZiAodG1wc3RyID09IG9sZHN0cikgeworCSAgICAqdG1wc3RyKysgPSBXRU9GOworCSAgICAqdG1wc3RyID0gMDsKKwl9CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0KKworICAgIFQoKCJ3Z2V0bl93c3RyIHJldHVybnMgJXMiLCBfbmNfdmlzd2lidWYob2xkc3RyKSkpOworCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9obGluZV9zZXQuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2hsaW5lX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTc1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9obGluZV9zZXQuYwpAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIERpY2tleSAyMDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2hsaW5lX3NldC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2hsaW5lX3NldCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2hsaW5lX3NldC5jLHYgMS4yIDIwMDIvMDMvMjMgMjE6MzU6MzQgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2hsaW5lX3NldChXSU5ET1cgKndpbiwgY29uc3QgY2NoYXJfdCAqIGNoLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKyAgICBOQ1VSU0VTX1NJWkVfVCBzdGFydDsKKyAgICBOQ1VSU0VTX1NJWkVfVCBlbmQ7CisKKyAgICBUKChUX0NBTExFRCgid2hsaW5lX3NldCglcCwlcywlZCkiKSwgd2luLCBfdHJhY2VjY2hhcl90KGNoKSwgbikpOworCisgICAgaWYgKHdpbikgeworCXN0cnVjdCBsZGF0ICpsaW5lID0gJih3aW4tPl9saW5lW3dpbi0+X2N1cnldKTsKKwlOQ1VSU0VTX0NIX1Qgd2NoOworCisJc3RhcnQgPSB3aW4tPl9jdXJ4OworCWVuZCA9IHN0YXJ0ICsgbiAtIDE7CisJaWYgKGVuZCA+IHdpbi0+X21heHgpCisJICAgIGVuZCA9IHdpbi0+X21heHg7CisKKwlDSEFOR0VEX1JBTkdFKGxpbmUsIHN0YXJ0LCBlbmQpOworCisJaWYgKGNoID09IDApCisJICAgIHdjaCA9ICpXQUNTX0hMSU5FOworCWVsc2UKKwkgICAgd2NoID0gKmNoOworCXdjaCA9IF9uY19yZW5kZXIod2luLCB3Y2gpOworCisJd2hpbGUgKGVuZCA+PSBzdGFydCkgeworCSAgICBsaW5lLT50ZXh0W2VuZF0gPSB3Y2g7CisJICAgIGVuZC0tOworCX0KKworCV9uY19zeW5jaG9vayh3aW4pOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX2luX3djaC5jIGIvbmN1cnNlcy93aWRlY2hhci9saWJfaW5fd2NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkOTJlMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2luX3djaC5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBdXRob3I6IFRob21hcyBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW5fd2NoLmMKKyoqCisqKglUaGUgcm91dGluZSB3aW5fd2NoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5fd2NoLmMsdiAxLjQgMjAwNi8wOS8wMyAxNTo0MToyMiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW5fd2NoKFdJTkRPVyAqd2luLCBjY2hhcl90ICp3Y3ZhbCkKK3sKKyAgICBpbnQgcm93LCBjb2w7CisgICAgaW50IGNvZGUgPSBPSzsKKworICAgIFRSKFRSQUNFX0NDQUxMUywgKFRfQ0FMTEVEKCJ3aW5fd2NoKCVwLCVwKSIpLCB3aW4sIHdjdmFsKSk7CisgICAgaWYgKHdpbiAhPSAwCisJJiYgd2N2YWwgIT0gMCkgeworCWdldHl4KHdpbiwgcm93LCBjb2wpOworCisJKndjdmFsID0gd2luLT5fbGluZVtyb3ddLnRleHRbY29sXTsKKwlUUihUUkFDRV9DQ0FMTFMsICgiZGF0YSAlcyIsIF90cmFjZWNjaGFyX3Qod2N2YWwpKSk7CisgICAgfSBlbHNlIHsKKwljb2RlID0gRVJSOworICAgIH0KKyAgICBUUihUUkFDRV9DQ0FMTFMsIChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICAgIHJldHVybiAoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbl93Y2huc3RyLmMgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbl93Y2huc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmMDY0NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2luX3djaG5zdHIuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQXV0aG9yOiBUaG9tYXMgRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2luX3djaG5zdHIuYworKioKKyoqCVRoZSByb3V0aW5lIHdpbl93Y2huc3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5fd2NobnN0ci5jLHYgMS43IDIwMDcvMDIvMTEgMDE6MDA6MDAgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2luX3djaG5zdHIoV0lORE9XICp3aW4sIGNjaGFyX3QgKndjaHN0ciwgaW50IG4pCit7CisgICAgaW50IGNvZGUgPSBPSzsKKworICAgIFQoKFRfQ0FMTEVEKCJ3aW5fd2NobnN0ciglcCwlcCwlZCkiKSwgd2luLCB3Y2hzdHIsIG4pKTsKKyAgICBpZiAod2luICE9IDAKKwkmJiB3Y2hzdHIgIT0gMCkgeworCU5DVVJTRVNfQ0hfVCAqc3JjOworCWludCByb3csIGNvbDsKKwlpbnQgaiwgaywgbGltaXQ7CisKKwlnZXR5eCh3aW4sIHJvdywgY29sKTsKKwlsaW1pdCA9IGdldG1heHgod2luKSAtIGNvbDsKKwlzcmMgPSAmKHdpbi0+X2xpbmVbcm93XS50ZXh0W2NvbF0pOworCisJaWYgKG4gPCAwKSB7CisJICAgIG4gPSBsaW1pdDsKKwl9IGVsc2UgaWYgKG4gPiBsaW1pdCkgeworCSAgICBuID0gbGltaXQ7CisJfQorCWZvciAoaiA9IGsgPSAwOyBqIDwgbjsgKytqKSB7CisJICAgIGlmIChqID09IDAgfHwgIVdpZGVjRXh0KHNyY1tqXSkgfHwgaXNXaWRlY0Jhc2Uoc3JjW2pdKSkgeworCQl3Y2hzdHJbaysrXSA9IHNyY1tqXTsKKwkgICAgfQorCX0KKwltZW1zZXQoJih3Y2hzdHJba10pLCAwLCBzaXplb2YoKndjaHN0cikpOworCVQoKCJyZXN1bHQgPSAlcyIsIF9uY192aXNjYnVmKHdjaHN0ciwgbikpKTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSBFUlI7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbnNfd2NoLmMgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbnNfd2NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkMDQyMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2luc193Y2guYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBEaWNrZXkgMjAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbnNfd2NoLmMKKyoqCisqKglUaGUgcm91dGluZSB3aW5zX3djaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2luc193Y2guYyx2IDEuOCAyMDA1LzEyLzAzIDIwOjI0OjE5IHRvbSBFeHAgJCIpCisKKy8qCisgKiBJbnNlcnQgdGhlIGdpdmVuIGNoYXJhY3RlciwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gc2ltcGxpZnkKKyAqIGluc2VydGluZyBhIHN0cmluZy4KKyAqLworc3RhdGljIGludAorX25jX2luc2VydF93Y2goV0lORE9XICp3aW4sIGNvbnN0IGNjaGFyX3QgKndjaCkKK3sKKyAgICBpbnQgY2VsbHMgPSB3Y3dpZHRoKENoYXJPZihDSERFUkVGKHdjaCkpKTsKKyAgICBpbnQgY2VsbDsKKworICAgIGlmIChjZWxscyA8PSAwKQorCWNlbGxzID0gMTsKKworICAgIGlmICh3aW4tPl9jdXJ4IDw9IHdpbi0+X21heHgpIHsKKwlzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVt3aW4tPl9jdXJ5XSk7CisJTkNVUlNFU19DSF9UICplbmQgPSAmKGxpbmUtPnRleHRbd2luLT5fY3VyeF0pOworCU5DVVJTRVNfQ0hfVCAqdGVtcDEgPSAmKGxpbmUtPnRleHRbd2luLT5fbWF4eF0pOworCU5DVVJTRVNfQ0hfVCAqdGVtcDIgPSB0ZW1wMSAtIGNlbGxzOworCisJQ0hBTkdFRF9UT19FT0wobGluZSwgd2luLT5fY3VyeCwgd2luLT5fbWF4eCk7CisJd2hpbGUgKHRlbXAxID4gZW5kKQorCSAgICAqdGVtcDEtLSA9ICp0ZW1wMi0tOworCisJKnRlbXAxID0gX25jX3JlbmRlcih3aW4sICp3Y2gpOworCWZvciAoY2VsbCA9IDE7IGNlbGwgPCBjZWxsczsgKytjZWxsKSB7CisJICAgIFNldFdpZGVjRXh0KHRlbXAxW2NlbGxdLCBjZWxsKTsKKwl9CisKKwl3aW4tPl9jdXJ4Kys7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2luc193Y2goV0lORE9XICp3aW4sIGNvbnN0IGNjaGFyX3QgKndjaCkKK3sKKyAgICBOQ1VSU0VTX1NJWkVfVCBveTsKKyAgICBOQ1VSU0VTX1NJWkVfVCBveDsKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3aW5zX3djaCglcCwgJXMpIiksIHdpbiwgX3RyYWNlY2NoYXJfdCh3Y2gpKSk7CisKKyAgICBpZiAod2luICE9IDApIHsKKwlveSA9IHdpbi0+X2N1cnk7CisJb3ggPSB3aW4tPl9jdXJ4OworCisJY29kZSA9IF9uY19pbnNlcnRfd2NoKHdpbiwgd2NoKTsKKworCXdpbi0+X2N1cnggPSBveDsKKwl3aW4tPl9jdXJ5ID0gb3k7CisJX25jX3N5bmNob29rKHdpbik7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbnNfbndzdHIoV0lORE9XICp3aW4sIGNvbnN0IHdjaGFyX3QgKndzdHIsIGludCBuKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIE5DVVJTRVNfU0laRV9UIG95OworICAgIE5DVVJTRVNfU0laRV9UIG94OworICAgIGNvbnN0IHdjaGFyX3QgKmNwOworCisgICAgVCgoVF9DQUxMRUQoIndpbnNfbndzdHIoJXAsJXMsJWQpIiksIHdpbiwgX25jX3Zpc3didWZuKHdzdHIsIG4pLCBuKSk7CisKKyAgICBpZiAod2luICE9IDAKKwkmJiB3c3RyICE9IDApIHsKKwlpZiAobiA8IDEpCisJICAgIG4gPSB3Y3NsZW4od3N0cik7CisJY29kZSA9IE9LOworCWlmIChuID4gMCkgeworCSAgICBveSA9IHdpbi0+X2N1cnk7CisJICAgIG94ID0gd2luLT5fY3VyeDsKKwkgICAgZm9yIChjcCA9IHdzdHI7ICpjcCAmJiAoKGNwIC0gd3N0cikgPCBuKTsgY3ArKykgeworCQlpbnQgbGVuID0gd2N3aWR0aCgqY3ApOworCisJCWlmIChsZW4gIT0gMSB8fCAhaXM4Yml0cygqY3ApKSB7CisJCSAgICBjY2hhcl90IHRtcF9jY2hhcjsKKwkJICAgIHdjaGFyX3QgdG1wX3djaGFyID0gKmNwOworCQkgICAgbWVtc2V0KCZ0bXBfY2NoYXIsIDAsIHNpemVvZih0bXBfY2NoYXIpKTsKKwkJICAgICh2b2lkKSBzZXRjY2hhcigmdG1wX2NjaGFyLAorCQkJCSAgICAmdG1wX3djaGFyLAorCQkJCSAgICBXQV9OT1JNQUwsCisJCQkJICAgIDAsCisJCQkJICAgICh2b2lkICopIDApOworCQkgICAgY29kZSA9IF9uY19pbnNlcnRfd2NoKHdpbiwgJnRtcF9jY2hhcik7CisJCX0gZWxzZSB7CisJCSAgICAvKiB0YWJzLCBvdGhlciBBU0NJSSBzdHVmZiAqLworCQkgICAgY29kZSA9IF9uY19pbnNlcnRfY2god2luLCAoY2h0eXBlKSAoKmNwKSk7CisJCX0KKwkJaWYgKGNvZGUgIT0gT0spCisJCSAgICBicmVhazsKKwkgICAgfQorCisJICAgIHdpbi0+X2N1cnggPSBveDsKKwkgICAgd2luLT5fY3VyeSA9IG95OworCSAgICBfbmNfc3luY2hvb2sod2luKTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbndzdHIuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX2lud3N0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMDdhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbndzdHIuYwpAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEF1dGhvcjogVGhvbWFzIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbndzdHIuYworKioKKyoqCVRoZSByb3V0aW5lcyB3aW5ud3N0cigpIGFuZCB3aW53c3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW53c3RyLmMsdiAxLjQgMjAwNC8xMC8yMyAyMDo0MToyOCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW5ud3N0cihXSU5ET1cgKndpbiwgd2NoYXJfdCAqd3N0ciwgaW50IG4pCit7CisgICAgaW50IHJvdywgY29sLCBpbng7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgbGFzdCA9IDA7CisgICAgY2NoYXJfdCAqdGV4dDsKKyAgICB3Y2hhcl90IHdjaDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3aW5ud3N0ciglcCwlcCwlZCkiKSwgd2luLCB3c3RyLCBuKSk7CisgICAgaWYgKHdzdHIgIT0gMCkgeworCWlmICh3aW4pIHsKKwkgICAgZ2V0eXgod2luLCByb3csIGNvbCk7CisKKwkgICAgdGV4dCA9IHdpbi0+X2xpbmVbcm93XS50ZXh0OworCSAgICB3aGlsZSAoY291bnQgPCBuICYmIGNvdW50ICE9IEVSUikgeworCQlpZiAoIWlzV2lkZWNFeHQodGV4dFtjb2xdKSkgeworCQkgICAgZm9yIChpbnggPSAwOyAoaW54IDwgQ0NIQVJXX01BWCkKKwkJCSAmJiAoKHdjaCA9IHRleHRbY29sXS5jaGFyc1tpbnhdKSAhPSAwKTsKKwkJCSArK2lueCkgeworCQkJaWYgKGNvdW50ICsgMSA+IG4pIHsKKwkJCSAgICBpZiAoKGNvdW50ID0gbGFzdCkgPT0gMCkgeworCQkJCWNvdW50ID0gRVJSOwkvKiBlcnJvciBpZiB3ZSBzdG9yZSBub3RoaW5nICovCisJCQkgICAgfQorCQkJICAgIGJyZWFrOworCQkJfQorCQkJd3N0cltjb3VudCsrXSA9IHdjaDsKKwkJICAgIH0KKwkJfQorCQlsYXN0ID0gY291bnQ7CisJCWlmICgrK2NvbCA+IHdpbi0+X21heHgpIHsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisJaWYgKGNvdW50ID4gMCkgeworCSAgICB3c3RyW2NvdW50XSA9ICdcMCc7CisJICAgIFQoKCJ3aW5ud3N0ciByZXR1cm5zICVzIiwgX25jX3Zpc3didWYod3N0cikpKTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoY291bnQpOworfQorCisvKgorICogWC9PcGVuIHNheXMgd2lud3N0cigpIHJldHVybnMgT0sgaWYgbm90IEVSUi4gIElmIHRoYXQgaXMgbm90IGEgYmx1bmRlciwgaXQKKyAqIG11c3QgaGF2ZSBhIG51bGwgdGVybWluYXRpb24gb24gdGhlIHN0cmluZyAoc2VlIGFib3ZlKS4gIFVubGlrZSB3aW5uc3RyKCksCisgKiBpdCBkb2VzIG5vdCBkZWZpbmUgd2hhdCBoYXBwZW5zIGZvciBhIG5lZ2F0aXZlIGNvdW50IHdpdGggd2lubndzdHIoKS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQord2lud3N0cihXSU5ET1cgKndpbiwgd2NoYXJfdCAqd3N0cikKK3sKKyAgICBpbnQgcmVzdWx0ID0gT0s7CisgICAgVCgoVF9DQUxMRUQoIndpbndzdHIoJXAsJXApIiksIHdpbiwgd3N0cikpOworICAgIGlmICh3aW5ud3N0cih3aW4sIHdzdHIsIENDSEFSV19NQVggKiAod2luLT5fbWF4eCAtIHdpbi0+X2N1cnggKyAxKSkgPT0gRVJSKQorCXJlc3VsdCA9IEVSUjsKKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9rZXlfbmFtZS5jIGIvbmN1cnNlcy93aWRlY2hhci9saWJfa2V5X25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTY1ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfa2V5X25hbWUuYwpAQCAtMCwwICsxLDYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2tleV9uYW1lLmMKKyoqCisqKglUaGUgcm91dGluZSBrZXlfbmFtZSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2tleV9uYW1lLmMsdiAxLjMgMjAwOC8xMC8xMSAyMDoxNToxNCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIgKikKK2tleV9uYW1lKHdjaGFyX3QgYykKK3sKKyAgICBjY2hhcl90IG15X2NjaGFyOworICAgIHdjaGFyX3QgKm15X3djaGFyczsKKyAgICBzaXplX3QgbGVuOworCisgICAgLyogRklYTUU6IG1vdmUgdG8gX25jX2dsb2JhbHMgKi8KKyAgICBzdGF0aWMgY2hhciByZXN1bHRbTUJfTEVOX01BWCArIDFdOworCisgICAgbWVtc2V0KCZteV9jY2hhciwgMCwgc2l6ZW9mKG15X2NjaGFyKSk7CisgICAgbXlfY2NoYXIuY2hhcnNbMF0gPSBjOworICAgIG15X2NjaGFyLmNoYXJzWzFdID0gTCdcMCc7CisKKyAgICBteV93Y2hhcnMgPSB3dW5jdHJsKCZteV9jY2hhcik7CisgICAgbGVuID0gd2NzdG9tYnMocmVzdWx0LCBteV93Y2hhcnMsIHNpemVvZihyZXN1bHQpIC0gMSk7CisgICAgaWYgKGlzRUlMU0VRKGxlbikgfHwgKGxlbiA9PSAwKSkgeworCXJldHVybiAwOworICAgIH0KKworICAgIHJlc3VsdFtsZW5dID0gJ1wwJzsKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy93aWRlY2hhci9saWJfcGVjaG9fd2NoYXIuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3BlY2hvX3djaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxMjc3NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3BlY2hvX3djaGFyLmMKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfcGVjaG9fd2NoYXIuYyx2IDEuMSAyMDA0LzAxLzAzIDIxOjQyOjAxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3BlY2hvX3djaGFyKFdJTkRPVyAqcGFkLCBjb25zdCBjY2hhcl90ICogd2NoKQoreworICAgIFQoKFRfQ0FMTEVEKCJwZWNob193Y2hhciglcCwgJXMpIiksIHBhZCwgX3RyYWNlY2hfdCh3Y2gpKSk7CisKKyAgICBpZiAocGFkID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKCEocGFkLT5fZmxhZ3MgJiBfSVNQQUQpKQorCXJldHVybkNvZGUod2VjaG9fd2NoYXIocGFkLCB3Y2gpKTsKKworICAgIHdhZGRfd2NoKHBhZCwgd2NoKTsKKyAgICBwcmVmcmVzaChwYWQsIHBhZC0+X3BhZC5fcGFkX3ksCisJICAgICBwYWQtPl9wYWQuX3BhZF94LAorCSAgICAgcGFkLT5fcGFkLl9wYWRfdG9wLAorCSAgICAgcGFkLT5fcGFkLl9wYWRfbGVmdCwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX2JvdHRvbSwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX3JpZ2h0KTsKKworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy93aWRlY2hhci9saWJfc2xrX3dzZXQuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3Nsa193c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2YjVkOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3Nsa193c2V0LmMKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGtfd3NldC5jCisgKiAgICAgIFNldCBzb2Z0IGxhYmVsIHRleHQuCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgSEFWRV9XQ1RZUEVfSAorI2luY2x1ZGUgPHdjdHlwZS5oPgorI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrX3dzZXQuYyx2IDEuMTEgMjAwNS8wMS8xNiAwMTowMzo1MyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzbGtfd3NldChpbnQgaSwgY29uc3Qgd2NoYXJfdCAqYXN0ciwgaW50IGZvcm1hdCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworICAgIHNpemVfdCBhcmdsZW47CisgICAgY29uc3Qgd2NoYXJfdCAqc3RyOworICAgIGNoYXIgKm15c3RyOworICAgIG1ic3RhdGVfdCBzdGF0ZTsKKworICAgIFQoKFRfQ0FMTEVEKCJzbGtfd3NldCglZCwgJXMsICVkKSIpLCBpLCBfbmNfdmlzd2J1Zihhc3RyKSwgZm9ybWF0KSk7CisKKyAgICBpbml0X21iKHN0YXRlKTsKKyAgICBzdHIgPSBhc3RyOworICAgIGlmICgoYXJnbGVuID0gd2NzcnRvbWJzKE5VTEwsICZzdHIsIDAsICZzdGF0ZSkpICE9IChzaXplX3QpIC0xKSB7CisJaWYgKChteXN0ciA9IChjaGFyICopIF9uY19kb2FsbG9jKDAsIGFyZ2xlbiArIDEpKSAhPSAwKSB7CisJICAgIHN0ciA9IGFzdHI7CisJICAgIGlmICh3Y3NydG9tYnMobXlzdHIsICZzdHIsIGFyZ2xlbiwgJnN0YXRlKSAhPSAoc2l6ZV90KSAtMSkgeworCQkvKiBnbGliYyBkb2N1bWVudGF0aW9uIGNsYWltcyB0aGF0IHRoZSB0ZXJtaW5hdGluZyBMJ1wwJworCQkgKiBpcyB3cml0dGVuLCBidXQgaXQgaXMgbm90Li4uCisJCSAqLworCQlteXN0clthcmdsZW5dID0gMDsKKwkJcmVzdWx0ID0gc2xrX3NldChpLCBteXN0ciwgZm9ybWF0KTsKKwkgICAgfQorCSAgICBmcmVlKG15c3RyKTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX3VuZ2V0X3djaC5jIGIvbmN1cnNlcy93aWRlY2hhci9saWJfdW5nZXRfd2NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyYzRhMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3VuZ2V0X3djaC5jCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3VuZ2V0X3djaC5jCisqKgorKioJVGhlIHJvdXRpbmUgdW5nZXRfd2NoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdW5nZXRfd2NoLmMsdiAxLjEwIDIwMDgvMDYvMDcgMTQ6NTA6MzcgdG9tIEV4cCAkIikKKworLyoKKyAqIFdyYXBwZXIgZm9yIHdjcnRvbWIoKSB3aGljaCBvYnRhaW5zIHRoZSBsZW5ndGggbmVlZGVkIGZvciB0aGUgZ2l2ZW4KKyAqIHdpZGUtY2hhcmFjdGVyICdzb3VyY2UnLgorICovCitOQ1VSU0VTX0VYUE9SVChzaXplX3QpCitfbmNfd2NydG9tYihjaGFyICp0YXJnZXQsIHdjaGFyX3Qgc291cmNlLCBtYnN0YXRlX3QgKiBzdGF0ZSkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKHRhcmdldCA9PSAwKSB7CisJd2NoYXJfdCB0ZW1wWzJdOworCWNvbnN0IHdjaGFyX3QgKnRlbXBwID0gdGVtcDsKKwl0ZW1wWzBdID0gc291cmNlOworCXRlbXBbMV0gPSAwOworCXJlc3VsdCA9IHdjc3J0b21icyhOVUxMLCAmdGVtcHAsIDAsIHN0YXRlKTsKKyAgICB9IGVsc2UgeworCXJlc3VsdCA9IHdjcnRvbWIodGFyZ2V0LCBzb3VyY2UsIHN0YXRlKTsKKyAgICB9CisgICAgaWYgKCFpc0VJTFNFUShyZXN1bHQpICYmIChyZXN1bHQgPT0gMCkpCisJcmVzdWx0ID0gMTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit1bmdldF93Y2goY29uc3Qgd2NoYXJfdCB3Y2gpCit7CisgICAgaW50IHJlc3VsdCA9IE9LOworICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGludCBuOworCisgICAgVCgoVF9DQUxMRUQoInVuZ2V0X3djaCglI2x4KSIpLCAodW5zaWduZWQgbG9uZykgd2NoKSk7CisKKyAgICBpbml0X21iKHN0YXRlKTsKKyAgICBsZW5ndGggPSBfbmNfd2NydG9tYigwLCB3Y2gsICZzdGF0ZSk7CisKKyAgICBpZiAobGVuZ3RoICE9IChzaXplX3QpICgtMSkKKwkmJiBsZW5ndGggIT0gMCkgeworCWNoYXIgKnN0cmluZzsKKworCWlmICgoc3RyaW5nID0gKGNoYXIgKikgbWFsbG9jKGxlbmd0aCkpICE9IDApIHsKKwkgICAgaW5pdF9tYihzdGF0ZSk7CisJICAgIHdjcnRvbWIoc3RyaW5nLCB3Y2gsICZzdGF0ZSk7CisKKwkgICAgZm9yIChuID0gKGludCkgKGxlbmd0aCAtIDEpOyBuID49IDA7IC0tbikgeworCQlpZiAoX25jX3VuZ2V0Y2goU1AsIHN0cmluZ1tuXSkgIT0gT0spIHsKKwkJICAgIHJlc3VsdCA9IEVSUjsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgZnJlZShzdHJpbmcpOworCX0gZWxzZSB7CisJICAgIHJlc3VsdCA9IEVSUjsKKwl9CisgICAgfSBlbHNlIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy93aWRlY2hhci9saWJfdmlkX2F0dHIuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3ZpZF9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjNjc5ZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3ZpZF9hdHRyLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl92aWRfYXR0ci5jLHYgMS41IDIwMDcvMDYvMzAgMjI6MDM6MDIgdG9tIEV4cCAkIikKKworI2RlZmluZSBkb1B1dChtb2RlKSBUUFVUU19UUkFDRSgjbW9kZSk7IHRwdXRzKG1vZGUsIDEsIG91dGMpCisKKyNkZWZpbmUgVHVybk9uKG1hc2ssbW9kZSkgXAorCWlmICgodHVybl9vbiAmIG1hc2spICYmIG1vZGUpIHsgZG9QdXQobW9kZSk7IH0KKworI2RlZmluZSBUdXJuT2ZmKG1hc2ssbW9kZSkgXAorCWlmICgodHVybl9vZmYgJiBtYXNrKSAmJiBtb2RlKSB7IGRvUHV0KG1vZGUpOyB0dXJuX29mZiAmPSB+bWFzazsgfQorCisJLyogaWYgdGhlcmUgaXMgbm8gY3VycmVudCBzY3JlZW4sIGFzc3VtZSB3ZSAqY2FuKiBkbyBjb2xvciAqLworI2RlZmluZSBTZXRDb2xvcnNJZih3aHksIG9sZF9hdHRyLCBvbGRfcGFpcikgXAorCWlmIChjYW5fY29sb3IgJiYgKHdoeSkpIHsgXAorCQlUUihUUkFDRV9BVFRSUywgKCJvbGQgcGFpciA9ICVkIC0tIG5ldyBwYWlyID0gJWQiLCBvbGRfcGFpciwgcGFpcikpOyBcCisJCWlmICgocGFpciAhPSBvbGRfcGFpcikgXAorCQkgfHwgKGZpeF9wYWlyMCAmJiAocGFpciA9PSAwKSkgXAorCQkgfHwgKHJldmVyc2UgXiAoKG9sZF9hdHRyICYgQV9SRVZFUlNFKSAhPSAwKSkpIHsgXAorCQkJX25jX2RvX2NvbG9yKG9sZF9wYWlyLCBwYWlyLCByZXZlcnNlLCBvdXRjKTsgXAorCQl9IFwKKwl9CisKKyNkZWZpbmUgc2V0X2NvbG9yKG1vZGUsIHBhaXIpIG1vZGUgJj0gQUxMX0JVVF9DT0xPUjsgbW9kZSB8PSBDT0xPUl9QQUlSKHBhaXIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3ZpZF9wdXRzKGF0dHJfdCBuZXdtb2RlLCBzaG9ydCBwYWlyLCB2b2lkICpvcHRzIEdDQ19VTlVTRUQsIGludCAoKm91dGMpIChpbnQpKQoreworI2lmIE5DVVJTRVNfRVhUX0NPTE9SUworICAgIHN0YXRpYyBhdHRyX3QgcHJldmlvdXNfYXR0ciA9IEFfTk9STUFMOworICAgIHN0YXRpYyBpbnQgcHJldmlvdXNfcGFpciA9IDA7CisKKyAgICBhdHRyX3QgdHVybl9vbiwgdHVybl9vZmY7CisgICAgYm9vbCByZXZlcnNlID0gRkFMU0U7CisgICAgYm9vbCBjYW5fY29sb3IgPSAoU1AgPT0gMCB8fCBTUC0+X2NvbG9yb24pOworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisgICAgYm9vbCBmaXhfcGFpcjAgPSAoU1AgIT0gMCAmJiBTUC0+X2NvbG9yb24gJiYgIVNQLT5fZGVmYXVsdF9jb2xvcik7CisjZWxzZQorI2RlZmluZSBmaXhfcGFpcjAgRkFMU0UKKyNlbmRpZgorCisgICAgbmV3bW9kZSAmPSBBX0FUVFJJQlVURVM7CisgICAgVCgoVF9DQUxMRUQoInZpZF9wdXRzKCVzLCVkKSIpLCBfdHJhY2VhdHRyKG5ld21vZGUpLCBwYWlyKSk7CisKKyAgICAvKiB0aGlzIGFsbG93cyB1cyB0byBnbyBvbiB3aGV0aGVyIG9yIG5vdCBuZXd0ZXJtKCkgaGFzIGJlZW4gY2FsbGVkICovCisgICAgaWYgKFNQKSB7CisJcHJldmlvdXNfYXR0ciA9IEF0dHJPZihTQ1JFRU5fQVRUUlMoU1ApKTsKKwlwcmV2aW91c19wYWlyID0gR2V0UGFpcihTQ1JFRU5fQVRUUlMoU1ApKTsKKyAgICB9CisKKyAgICBUUihUUkFDRV9BVFRSUywgKCJwcmV2aW91cyBhdHRyaWJ1dGUgd2FzICVzLCAlZCIsCisJCSAgICAgX3RyYWNlYXR0cihwcmV2aW91c19hdHRyKSwgcHJldmlvdXNfcGFpcikpOworCisjaWYgIVVTRV9YTUNfU1VQUE9SVAorICAgIGlmICgoU1AgIT0gMCkKKwkmJiAobWFnaWNfY29va2llX2dsaXRjaCA+IDApKQorCW5ld21vZGUgJj0gfihTUC0+X3htY19zdXBwcmVzcyk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgd2UgaGF2ZSBhIHRlcm1pbmFsIHRoYXQgY2Fubm90IGNvbWJpbmUgY29sb3Igd2l0aCB2aWRlbworICAgICAqIGF0dHJpYnV0ZXMsIHVzZSB0aGUgY29sb3JzIGluIHByZWZlcmVuY2UuCisgICAgICovCisgICAgaWYgKChwYWlyICE9IDAKKwkgfHwgZml4X3BhaXIwKQorCSYmIChub19jb2xvcl92aWRlbyA+IDApKSB7CisJLyoKKwkgKiBJZiB3ZSBoYWQgY2hvc2VuIHRoZSBBX3h4eCBkZWZpbml0aW9ucyB0byBjb3JyZXNwb25kIHRvIHRoZQorCSAqIG5vX2NvbG9yX3ZpZGVvIG1hc2ssIHdlIGNvdWxkIHNpbXBseSBzaGlmdCBpdCB1cCBhbmQgbWFzayBvZmYgdGhlCisJICogYXR0cmlidXRlcy4gIEJ1dCB3ZSBkaWQgbm90IChhY3R1YWxseSBjb3BpZWQgU29sYXJpcycgZGVmaW5pdGlvbnMpLgorCSAqIEhvd2V2ZXIsIHRoaXMgaXMgc3RpbGwgc2ltcGxlci9mYXN0ZXIgdGhhbiBhIGxvb2t1cCB0YWJsZS4KKwkgKgorCSAqIFRoZSA2MyBjb3JyZXNwb25kcyB0byBBX1NUQU5ET1VULCBBX1VOREVSTElORSwgQV9SRVZFUlNFLCBBX0JMSU5LLAorCSAqIEFfRElNLCBBX0JPTEQgd2hpY2ggYXJlIDE6MSB3aXRoIG5vX2NvbG9yX3ZpZGVvLiAgVGhlIGJpdHMgdGhhdAorCSAqIGNvcnJlc3BvbmQgdG8gQV9JTlZJUywgQV9QUk9URUNUICgxOTIpIG11c3QgYmUgc2hpZnRlZCB1cCAxIGFuZAorCSAqIEFfQUxUQ0hBUlNFVCAoMjU2KSBkb3duIDIgdG8gbGluZSB1cC4gIFdlIHVzZSB0aGUgTkNVUlNFU19CSVRTCisJICogbWFjcm8gc28gdGhpcyB3aWxsIHdvcmsgcHJvcGVybHkgZm9yIHRoZSB3aWRlLWNoYXJhY3RlciBsYXlvdXQuCisJICovCisJdW5zaWduZWQgdmFsdWUgPSBub19jb2xvcl92aWRlbzsKKwlhdHRyX3QgbWFzayA9IE5DVVJTRVNfQklUUygodmFsdWUgJiA2MykKKwkJCQkgICB8ICgodmFsdWUgJiAxOTIpIDw8IDEpCisJCQkJICAgfCAoKHZhbHVlICYgMjU2KSA+PiAyKSwgOCk7CisKKwlpZiAoKG1hc2sgJiBBX1JFVkVSU0UpICE9IDAKKwkgICAgJiYgKG5ld21vZGUgJiBBX1JFVkVSU0UpICE9IDApIHsKKwkgICAgcmV2ZXJzZSA9IFRSVUU7CisJICAgIG1hc2sgJj0gfkFfUkVWRVJTRTsKKwl9CisJbmV3bW9kZSAmPSB+bWFzazsKKyAgICB9CisKKyAgICBpZiAobmV3bW9kZSA9PSBwcmV2aW91c19hdHRyCisJJiYgcGFpciA9PSBwcmV2aW91c19wYWlyKQorCXJldHVybkNvZGUoT0spOworCisgICAgaWYgKHJldmVyc2UpIHsKKwluZXdtb2RlICY9IH5BX1JFVkVSU0U7CisgICAgfQorCisgICAgdHVybl9vZmYgPSAofm5ld21vZGUgJiBwcmV2aW91c19hdHRyKSAmIEFMTF9CVVRfQ09MT1I7CisgICAgdHVybl9vbiA9IChuZXdtb2RlICYgfnByZXZpb3VzX2F0dHIpICYgQUxMX0JVVF9DT0xPUjsKKworICAgIFNldENvbG9yc0lmKCgocGFpciA9PSAwKSAmJiAhZml4X3BhaXIwKSwgcHJldmlvdXNfYXR0ciwgcHJldmlvdXNfcGFpcik7CisKKyAgICBpZiAobmV3bW9kZSA9PSBBX05PUk1BTCkgeworCWlmICgocHJldmlvdXNfYXR0ciAmIEFfQUxUQ0hBUlNFVCkgJiYgZXhpdF9hbHRfY2hhcnNldF9tb2RlKSB7CisJICAgIGRvUHV0KGV4aXRfYWx0X2NoYXJzZXRfbW9kZSk7CisJICAgIHByZXZpb3VzX2F0dHIgJj0gfkFfQUxUQ0hBUlNFVDsKKwl9CisJaWYgKHByZXZpb3VzX2F0dHIpIHsKKwkgICAgaWYgKGV4aXRfYXR0cmlidXRlX21vZGUpIHsKKwkJZG9QdXQoZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisJICAgIH0gZWxzZSB7CisJCWlmICghU1AgfHwgU1AtPl91c2Vfcm11bCkgeworCQkgICAgVHVybk9mZihBX1VOREVSTElORSwgZXhpdF91bmRlcmxpbmVfbW9kZSk7CisJCX0KKwkJaWYgKCFTUCB8fCBTUC0+X3VzZV9ybXNvKSB7CisJCSAgICBUdXJuT2ZmKEFfU1RBTkRPVVQsIGV4aXRfc3RhbmRvdXRfbW9kZSk7CisJCX0KKwkgICAgfQorCSAgICBwcmV2aW91c19hdHRyICY9IEFMTF9CVVRfQ09MT1I7CisJICAgIHByZXZpb3VzX3BhaXIgPSAwOworCX0KKworCVNldENvbG9yc0lmKChwYWlyICE9IDApIHx8IGZpeF9wYWlyMCwgcHJldmlvdXNfYXR0ciwgcHJldmlvdXNfcGFpcik7CisgICAgfSBlbHNlIGlmIChzZXRfYXR0cmlidXRlcykgeworCWlmICh0dXJuX29uIHx8IHR1cm5fb2ZmKSB7CisJICAgIFRQVVRTX1RSQUNFKCJzZXRfYXR0cmlidXRlcyIpOworCSAgICB0cHV0cyhUUEFSTV85KHNldF9hdHRyaWJ1dGVzLAorCQkJICAobmV3bW9kZSAmIEFfU1RBTkRPVVQpICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9VTkRFUkxJTkUpICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9SRVZFUlNFKSAhPSAwLAorCQkJICAobmV3bW9kZSAmIEFfQkxJTkspICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9ESU0pICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9CT0xEKSAhPSAwLAorCQkJICAobmV3bW9kZSAmIEFfSU5WSVMpICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9QUk9URUNUKSAhPSAwLAorCQkJICAobmV3bW9kZSAmIEFfQUxUQ0hBUlNFVCkgIT0gMCksIDEsIG91dGMpOworCSAgICBwcmV2aW91c19hdHRyICY9IEFMTF9CVVRfQ09MT1I7CisJICAgIHByZXZpb3VzX3BhaXIgPSAwOworCX0KKwlTZXRDb2xvcnNJZigocGFpciAhPSAwKSB8fCBmaXhfcGFpcjAsIHByZXZpb3VzX2F0dHIsIHByZXZpb3VzX3BhaXIpOworICAgIH0gZWxzZSB7CisKKwlUUihUUkFDRV9BVFRSUywgKCJ0dXJuaW5nICVzIG9mZiIsIF90cmFjZWF0dHIodHVybl9vZmYpKSk7CisKKwlUdXJuT2ZmKEFfQUxUQ0hBUlNFVCwgZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKworCWlmICghU1AgfHwgU1AtPl91c2Vfcm11bCkgeworCSAgICBUdXJuT2ZmKEFfVU5ERVJMSU5FLCBleGl0X3VuZGVybGluZV9tb2RlKTsKKwl9CisKKwlpZiAoIVNQIHx8IFNQLT5fdXNlX3Jtc28pIHsKKwkgICAgVHVybk9mZihBX1NUQU5ET1VULCBleGl0X3N0YW5kb3V0X21vZGUpOworCX0KKworCWlmICh0dXJuX29mZiAmJiBleGl0X2F0dHJpYnV0ZV9tb2RlKSB7CisJICAgIGRvUHV0KGV4aXRfYXR0cmlidXRlX21vZGUpOworCSAgICB0dXJuX29uIHw9IChuZXdtb2RlICYgQUxMX0JVVF9DT0xPUik7CisJICAgIHByZXZpb3VzX2F0dHIgJj0gQUxMX0JVVF9DT0xPUjsKKwkgICAgcHJldmlvdXNfcGFpciA9IDA7CisJfQorCVNldENvbG9yc0lmKChwYWlyICE9IDApIHx8IGZpeF9wYWlyMCwgcHJldmlvdXNfYXR0ciwgcHJldmlvdXNfcGFpcik7CisKKwlUUihUUkFDRV9BVFRSUywgKCJ0dXJuaW5nICVzIG9uIiwgX3RyYWNlYXR0cih0dXJuX29uKSkpOworCS8qICpJTkRFTlQtT0ZGKiAqLworCVR1cm5PbihBX0FMVENIQVJTRVQsCWVudGVyX2FsdF9jaGFyc2V0X21vZGUpOworCVR1cm5PbihBX0JMSU5LLAkJZW50ZXJfYmxpbmtfbW9kZSk7CisJVHVybk9uKEFfQk9MRCwJCWVudGVyX2JvbGRfbW9kZSk7CisJVHVybk9uKEFfRElNLAkJZW50ZXJfZGltX21vZGUpOworCVR1cm5PbihBX1JFVkVSU0UsCWVudGVyX3JldmVyc2VfbW9kZSk7CisJVHVybk9uKEFfU1RBTkRPVVQsCWVudGVyX3N0YW5kb3V0X21vZGUpOworCVR1cm5PbihBX1BST1RFQ1QsCWVudGVyX3Byb3RlY3RlZF9tb2RlKTsKKwlUdXJuT24oQV9JTlZJUywJCWVudGVyX3NlY3VyZV9tb2RlKTsKKwlUdXJuT24oQV9VTkRFUkxJTkUsCWVudGVyX3VuZGVybGluZV9tb2RlKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCVR1cm5PbihBX0hPUklaT05UQUwsCWVudGVyX2hvcml6b250YWxfaGxfbW9kZSk7CisJVHVybk9uKEFfTEVGVCwJCWVudGVyX2xlZnRfaGxfbW9kZSk7CisJVHVybk9uKEFfTE9XLAkJZW50ZXJfbG93X2hsX21vZGUpOworCVR1cm5PbihBX1JJR0hULAkJZW50ZXJfcmlnaHRfaGxfbW9kZSk7CisJVHVybk9uKEFfVE9QLAkJZW50ZXJfdG9wX2hsX21vZGUpOworCVR1cm5PbihBX1ZFUlRJQ0FMLAllbnRlcl92ZXJ0aWNhbF9obF9tb2RlKTsKKyNlbmRpZgorCS8qICpJTkRFTlQtT04qICovCisKKyAgICB9CisKKyAgICBpZiAocmV2ZXJzZSkKKwluZXdtb2RlIHw9IEFfUkVWRVJTRTsKKworICAgIGlmIChTUCkgeworCVNldEF0dHIoU0NSRUVOX0FUVFJTKFNQKSwgbmV3bW9kZSk7CisJU2V0UGFpcihTQ1JFRU5fQVRUUlMoU1ApLCBwYWlyKTsKKyAgICB9IGVsc2UgeworCXByZXZpb3VzX2F0dHIgPSBuZXdtb2RlOworCXByZXZpb3VzX3BhaXIgPSBwYWlyOworICAgIH0KKworICAgIHJldHVybkNvZGUoT0spOworI2Vsc2UKKyAgICBUKChUX0NBTExFRCgidmlkX3B1dHMoJXMsJWQpIiksIF90cmFjZWF0dHIobmV3bW9kZSksIHBhaXIpKTsKKyAgICBzZXRfY29sb3IobmV3bW9kZSwgcGFpcik7CisgICAgcmV0dXJuQ29kZSh2aWRwdXRzKG5ld21vZGUsIG91dGMpKTsKKyNlbmRpZgorfQorCisjdW5kZWYgdmlkX2F0dHIKK05DVVJTRVNfRVhQT1JUKGludCkKK3ZpZF9hdHRyKGF0dHJfdCBuZXdtb2RlLCBzaG9ydCBwYWlyLCB2b2lkICpvcHRzKQoreworICAgIFQoKFRfQ0FMTEVEKCJ2aWRfYXR0ciglcywlZCkiKSwgX3RyYWNlYXR0cihuZXdtb2RlKSwgcGFpcikpOworICAgIHJldHVybkNvZGUodmlkX3B1dHMobmV3bW9kZSwgcGFpciwgb3B0cywgX25jX291dGNoKSk7Cit9CisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIHNhbWUgbWFzayB2YWx1ZXMgZm9yIEFfeHh4IGFuZCBXQV94eHgsIHNvCisgKiB3ZSBjYW4gdXNlIHRlcm1hdHRycygpIGZvciBwYXJ0IG9mIHRoZSBsb2dpYy4KKyAqLworTkNVUlNFU19FWFBPUlQoYXR0cl90KQordGVybV9hdHRycyh2b2lkKQoreworICAgIGF0dHJfdCBhdHRyczsKKworICAgIFQoKFRfQ0FMTEVEKCJ0ZXJtX2F0dHJzKCkiKSkpOworICAgIGF0dHJzID0gdGVybWF0dHJzKCk7CisKKyAgICAvKiB0aGVzZSBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIHdpZGUtY2hhcmFjdGVyIG1vZGUgKi8KKyAgICBpZiAoZW50ZXJfaG9yaXpvbnRhbF9obF9tb2RlKQorCWF0dHJzIHw9IFdBX0hPUklaT05UQUw7CisgICAgaWYgKGVudGVyX2xlZnRfaGxfbW9kZSkKKwlhdHRycyB8PSBXQV9MRUZUOworICAgIGlmIChlbnRlcl9sb3dfaGxfbW9kZSkKKwlhdHRycyB8PSBXQV9MT1c7CisgICAgaWYgKGVudGVyX3JpZ2h0X2hsX21vZGUpCisJYXR0cnMgfD0gV0FfUklHSFQ7CisgICAgaWYgKGVudGVyX3RvcF9obF9tb2RlKQorCWF0dHJzIHw9IFdBX1RPUDsKKyAgICBpZiAoZW50ZXJfdmVydGljYWxfaGxfbW9kZSkKKwlhdHRycyB8PSBXQV9WRVJUSUNBTDsKKworICAgIHJldHVybkF0dHIoYXR0cnMpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy93aWRlY2hhci9saWJfdmxpbmVfc2V0LmMgYi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl92bGluZV9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjQyZGYxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfdmxpbmVfc2V0LmMKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBEaWNrZXkgMjAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl92bGluZV9zZXQuYworKioKKyoqCVRoZSByb3V0aW5lIHd2bGluZV9zZXQoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl92bGluZV9zZXQuYyx2IDEuMiAyMDAyLzAzLzIzIDIxOjM2OjAxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3d2bGluZV9zZXQoV0lORE9XICp3aW4sIGNvbnN0IGNjaGFyX3QgKiBjaCwgaW50IG4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgTkNVUlNFU19TSVpFX1Qgcm93LCBjb2w7CisgICAgTkNVUlNFU19TSVpFX1QgZW5kOworCisgICAgVCgoVF9DQUxMRUQoInd2bGluZSglcCwlcywlZCkiKSwgd2luLCBfdHJhY2VjY2hhcl90KGNoKSwgbikpOworCisgICAgaWYgKHdpbikgeworCU5DVVJTRVNfQ0hfVCB3Y2g7CisJcm93ID0gd2luLT5fY3VyeTsKKwljb2wgPSB3aW4tPl9jdXJ4OworCWVuZCA9IHJvdyArIG4gLSAxOworCWlmIChlbmQgPiB3aW4tPl9tYXh5KQorCSAgICBlbmQgPSB3aW4tPl9tYXh5OworCisJaWYgKGNoID09IDApCisJICAgIHdjaCA9ICpXQUNTX1ZMSU5FOworCWVsc2UKKwkgICAgd2NoID0gKmNoOworCXdjaCA9IF9uY19yZW5kZXIod2luLCB3Y2gpOworCisJd2hpbGUgKGVuZCA+PSByb3cpIHsKKwkgICAgc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbZW5kXSk7CisJICAgIGxpbmUtPnRleHRbY29sXSA9IHdjaDsKKwkgICAgQ0hBTkdFRF9DRUxMKGxpbmUsIGNvbCk7CisJICAgIGVuZC0tOworCX0KKworCV9uY19zeW5jaG9vayh3aW4pOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX3dhY3MuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3dhY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTg5M2I0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfd2Fjcy5jCkBAIC0wLDAgKzEsMTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIERpY2tleSAyMDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfd2Fjcy5jLHYgMS43IDIwMDYvMTIvMTcgMTU6MTY6MTcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlRfVkFSKGNjaGFyX3QpICogX25jX3dhY3MgPSAwOworCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2luaXRfd2Fjcyh2b2lkKQoreworICAgIC8qICpJTkRFTlQtT0ZGKiAqLworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludAltYXA7CisJaW50CXZhbHVlWzJdOworICAgIH0gdGFibGVbXSA9IHsKKwkvKiBWVDEwMCBzeW1ib2xzICovCisJeyAnbCcsCXsgJysnLAkweDI1MGMgfX0sCS8qIHVwcGVyIGxlZnQgY29ybmVyICovCisJeyAnbScsCXsgJysnLAkweDI1MTQgfX0sCS8qIGxvd2VyIGxlZnQgY29ybmVyICovCisJeyAnaycsCXsgJysnLAkweDI1MTAgfX0sCS8qIHVwcGVyIHJpZ2h0IGNvcm5lciAqLworCXsgJ2onLAl7ICcrJywJMHgyNTE4IH19LAkvKiBsb3dlciByaWdodCBjb3JuZXIgKi8KKwl7ICd0JywJeyAnKycsCTB4MjUxYyB9fSwJLyogdGVlIHBvaW50aW5nIGxlZnQgKi8KKwl7ICd1JywJeyAnKycsCTB4MjUyNCB9fSwJLyogdGVlIHBvaW50aW5nIHJpZ2h0ICovCisJeyAndicsCXsgJysnLAkweDI1MzQgfX0sCS8qIHRlZSBwb2ludGluZyB1cCAqLworCXsgJ3cnLAl7ICcrJywJMHgyNTJjIH19LAkvKiB0ZWUgcG9pbnRpbmcgZG93biAqLworCXsgJ3EnLAl7ICctJywJMHgyNTAwIH19LAkvKiBob3Jpem9udGFsIGxpbmUgKi8KKwl7ICd4JywJeyAnfCcsCTB4MjUwMiB9fSwJLyogdmVydGljYWwgbGluZSAqLworCXsgJ24nLAl7ICcrJywJMHgyNTNjIH19LAkvKiBsYXJnZSBwbHVzIG9yIGNyb3Nzb3ZlciAqLworCXsgJ28nLAl7ICd+JywJMHgyM2JhIH19LAkvKiBzY2FuIGxpbmUgMSAqLworCXsgJ3MnLAl7ICdfJywJMHgyM2JkIH19LAkvKiBzY2FuIGxpbmUgOSAqLworCXsgJ2AnLAl7ICcrJywJMHgyNWM2IH19LAkvKiBkaWFtb25kICovCisJeyAnYScsCXsgJzonLAkweDI1OTIgfX0sCS8qIGNoZWNrZXIgYm9hcmQgKHN0aXBwbGUpICovCisJeyAnZicsCXsgJ1wnJywJMHgwMGIwIH19LAkvKiBkZWdyZWUgc3ltYm9sICovCisJeyAnZycsCXsgJyMnLAkweDAwYjEgfX0sCS8qIHBsdXMvbWludXMgKi8KKwl7ICd+JywJeyAnbycsCTB4MDBiNyB9fSwJLyogYnVsbGV0ICovCisJLyogVGVsZXR5cGUgNTQxMHYxIHN5bWJvbHMgKi8KKwl7ICcsJywJeyAnPCcsCTB4MjE5MCB9fSwJLyogYXJyb3cgcG9pbnRpbmcgbGVmdCAqLworCXsgJysnLAl7ICc+JywJMHgyMTkyIH19LAkvKiBhcnJvdyBwb2ludGluZyByaWdodCAqLworCXsgJy4nLAl7ICd2JywJMHgyMTkzIH19LAkvKiBhcnJvdyBwb2ludGluZyBkb3duICovCisJeyAnLScsCXsgJ14nLAkweDIxOTEgfX0sCS8qIGFycm93IHBvaW50aW5nIHVwICovCisJeyAnaCcsCXsgJyMnLAkweDI1OTIgfX0sCS8qIGJvYXJkIG9mIHNxdWFyZXMgKi8KKwl7ICdpJywJeyAnIycsCTB4MjYwMyB9fSwJLyogbGFudGVybiBzeW1ib2wgKi8KKwl7ICcwJywJeyAnIycsCTB4MjVhZSB9fSwJLyogc29saWQgc3F1YXJlIGJsb2NrICovCisJLyogdGhlc2UgZGVmYXVsdHMgd2VyZSBpbnZlbnRlZCBmb3IgbmN1cnNlcyAqLworCXsgJ3AnLAl7ICctJywJMHgyM2JiIH19LAkvKiBzY2FuIGxpbmUgMyAqLworCXsgJ3InLAl7ICctJywJMHgyM2JjIH19LAkvKiBzY2FuIGxpbmUgNyAqLworCXsgJ3knLAl7ICc8JywJMHgyMjY0IH19LAkvKiBsZXNzLXRoYW4tb3ItZXF1YWwtdG8gKi8KKwl7ICd6JywJeyAnPicsCTB4MjI2NSB9fSwJLyogZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvICovCisJeyAneycsCXsgJyonLAkweDAzYzAgfX0sCS8qIGdyZWVrIHBpICovCisJeyAnfCcsCXsgJyEnLAkweDIyNjAgfX0sCS8qIG5vdC1lcXVhbCAqLworCXsgJ30nLAl7ICdmJywJMHgwMGEzIH19LAkvKiBwb3VuZC1zdGVybGluZyBzeW1ib2wgKi8KKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICB1bnNpZ25lZCBuLCBtOworICAgIGludCBhY3RpdmUgPSBfbmNfdW5pY29kZV9sb2NhbGUoKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgcnVubmluZyBpbiBhIFVURi04IGxvY2FsZSwgd2lsbCB1c2UgdGhlIFVuaWNvZGUgZXF1aXZhbGVudHMKKyAgICAgKiByYXRoZXIgdGhhbiB0aGUgdGVybWluZm8gaW5mb3JtYXRpb24uICBBY3R1YWxseSB0aGUgdGVybWluZm8gc2hvdWxkCisgICAgICogYmUgdGhlIHJ1bGUsIGJ1dCB0aGVyZSBhcmUgcGVvcGxlIHdobyBhcmUgb2ZmZW5kZWQgYnkgdGhlIG5vdGlvbiB0aGF0CisgICAgICogYSBVbmljb2RlLWNhcGFibGUgdGVybWluYWwgd291bGQgaGF2ZSBzb21ldGhpbmcgcmVzZW1ibGluZyBhIG1vZGUuCisgICAgICogU28gdGhlIHNtYWNzL3JtYWNzIG1heSBiZSBkaXNhYmxlZCAtLSBzb21ldGltZS4KKyAgICAgKi8KKyAgICBUKCgiaW5pdGlhbGl6aW5nIFdJREUtQUNTIG1hcCAoVW5pY29kZSBpcyVzIGFjdGl2ZSkiLAorICAgICAgIGFjdGl2ZSA/ICIiIDogIiBub3QiKSk7CisKKyAgICBfbmNfd2FjcyA9IHR5cGVDYWxsb2MoY2NoYXJfdCwgQUNTX0xFTik7CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YWJsZSk7ICsrbikgeworCWludCB3aWRlID0gd2N3aWR0aCh0YWJsZVtuXS52YWx1ZVthY3RpdmVdKTsKKworCW0gPSB0YWJsZVtuXS5tYXA7CisJaWYgKGFjdGl2ZSAmJiAod2lkZSA9PSAxKSkgeworCSAgICBTZXRDaGFyKF9uY193YWNzW21dLCB0YWJsZVtuXS52YWx1ZVthY3RpdmVdLCBBX05PUk1BTCk7CisJfSBlbHNlIGlmIChhY3NfbWFwW21dICYgQV9BTFRDSEFSU0VUKSB7CisJICAgIFNldENoYXIoX25jX3dhY3NbbV0sIG0sIEFfQUxUQ0hBUlNFVCk7CisJfSBlbHNlIHsKKwkgICAgU2V0Q2hhcihfbmNfd2Fjc1ttXSwgdGFibGVbbl0udmFsdWVbMF0sIEFfTk9STUFMKTsKKwl9CisKKwlUKCgiIyVkLCBTZXRDaGFyKCVjLCAlIzA0eCkgPSAlcyIsCisJICAgbiwgbSwKKwkgICB0YWJsZVtuXS52YWx1ZVthY3RpdmVdLAorCSAgIF90cmFjZWNjaGFyX3QoJl9uY193YWNzW21dKSkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMvd2lkZWNoYXIvbGliX3d1bmN0cmwuYyBiL25jdXJzZXMvd2lkZWNoYXIvbGliX3d1bmN0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTIyNTlhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy93aWRlY2hhci9saWJfd3VuY3RybC5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfd3VuY3RybC5jCisqKgorKioJVGhlIHJvdXRpbmUgd3VuY3RybCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3d1bmN0cmwuYyx2IDEuMTIgMjAwNy8wNi8xMiAyMDoyMjozMiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVCh3Y2hhcl90ICopCit3dW5jdHJsKGNjaGFyX3QgKndjKQoreworICAgIHN0YXRpYyB3Y2hhcl90IHN0cltDQ0hBUldfTUFYICsgMV0sICpzcDsKKworICAgIGlmIChDaGFyYWJsZSgqd2MpKSB7CisJY29uc3QgY2hhciAqcCA9IHVuY3RybCgodW5zaWduZWQpIF9uY190b19jaGFyKCh3aW50X3QpIENoYXJPZigqd2MpKSk7CisKKwlmb3IgKHNwID0gc3RyOyAqcDsgKytwKSB7CisJICAgICpzcCsrID0gX25jX3RvX3dpZGVjaGFyKCpwKTsKKwl9CisJKnNwID0gMDsKKwlyZXR1cm4gc3RyOworICAgIH0gZWxzZQorCXJldHVybiB3Yy0+Y2hhcnM7Cit9CmRpZmYgLS1naXQgYS9wYW5lbC9NYWtlZmlsZS5pbiBiL3BhbmVsL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZGJlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE1OSBAQAorIyAkSWQ6IE1ha2VmaWxlLmluLHYgMS41MiAyMDA3LzA0LzI4IDE0OjU2OjExIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbgorIworIyBNYWtlZmlsZSBmb3IgcGFuZWxzIHNvdXJjZSBjb2RlLgorIworIyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmc6CisjCWxpYnJhcmllcyAobm9ybWFsL2RlYnVnL3Byb2ZpbGUvc2hhcmVkKQorIworIyBUaGUgdmFyaWFibGUgJ3NyY2RpcicgcmVmZXJzIHRvIHRoZSBzb3VyY2UtZGlzdHJpYnV0aW9uLCBhbmQgY2FuIGJlIHNldCB3aXRoCisjIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ5ICItLXNyY2Rpcj1ESVIiLgorIworIyBUaGUgcnVsZXMgYXJlIG9yZ2FuaXplZCB0byBwcm9kdWNlIHRoZSBsaWJyYXJpZXMgZm9yIHRoZSBjb25maWd1cmVkIG1vZGVscywKKworIyB0dXJuIG9mZiBfYWxsXyBzdWZmaXggcnVsZXM7IHdlJ2xsIGdlbmVyYXRlIG91ciBvd24KKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorVEhJUwkJPSBNYWtlZmlsZQorCit4CQk9IEBFWEVFWFRACitvCQk9IC5AT0JKRVhUQAorCitNT0RFTAkJPSBAREZUX0xXUl9NT0RFTEAKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitiaW5kaXIJCT0gQGJpbmRpckAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorZGF0YWRpcgkJPSBAZGF0YWRpckAKKworTElCVE9PTAkJPSBATElCVE9PTEAKK0xJQlRPT0xfQ0xFQU4JPSBATElCX0NMRUFOQAorTElCVE9PTF9DT01QSUxFCT0gQExJQl9DT01QSUxFQAorTElCVE9PTF9MSU5LCT0gQExJQl9MSU5LQAorTElCVE9PTF9JTlNUQUxMCT0gQExJQl9JTlNUQUxMQAorTElCVE9PTF9VTklOU1RBTEwgPSBATElCX1VOSU5TVEFMTEAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfTElCCT0gQElOU1RBTExAIEBJTlNUQUxMX0xJQkAKK0lOU1RBTExfUFJPRwk9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBUgkJPSBAQVJACitBUl9PUFRTCQk9IEBBUl9PUFRTQAorQVdLCQk9IEBBV0tACitMRAkJPSBATERACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitDUFAJCT0gQENQUEAKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorCitDUFBGTEFHUwk9IC1JQHRvcF9zcmNkaXJAL25jdXJzZXMgLURIQVZFX0NPTkZJR19IIEBDUFBGTEFHU0AKKworQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENGTEFHUykKKworQ0ZMQUdTX0xJQlRPT0wJPSAkKENDRkxBR1MpCitDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ0NfR19PUFRAIC1EVFJBQ0UKK0NGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKK0NGTEFHU19TSEFSRUQJPSAkKENDRkxBR1MpIEBDQ19TSEFSRURfT1BUU0AKKworQ0ZMQUdTX0RFRkFVTFQJPSAkKENGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK0xJTksJCT0gJChMSUJUT09MX0xJTkspCitMREZMQUdTCQk9IEBMREZMQUdTQCBATERfTU9ERUxAIEBMSUJTQAorCitTSExJQl9ESVJTCT0gLUwuLi9saWIKK1NITElCX0xJU1QJPSAkKFNITElCX0RJUlMpIC1sbmN1cnNlc0BMSUJfU1VGRklYQCBAU0hMSUJfTElTVEAKKworTUtfU0hBUkVEX0xJQgk9IEBNS19TSEFSRURfTElCQAorCitOQ1VSU0VTX01BSk9SCT0gQE5DVVJTRVNfTUFKT1JACitOQ1VSU0VTX01JTk9SCT0gQE5DVVJTRVNfTUlOT1JACitSRUxfVkVSU0lPTgk9IEBjZl9jdl9yZWxfdmVyc2lvbkAKK0FCSV9WRVJTSU9OCT0gQGNmX2N2X2FiaV92ZXJzaW9uQAorCitSQU5MSUIJCT0gQExJQl9QUkVQQAorCitMSUJSQVJJRVMJPSBATElCU19UT19NQUtFQAorCitMSU5UCQk9IEBMSU5UQAorTElOVF9PUFRTCT0gQExJTlRfT1BUU0AKK0xJTlRfTElCUwk9IC1scGFuZWwgLWxuY3Vyc2VzIEBMSUJTQAorCitBVVRPX1NSQwk9IFwKKwkJLi4vaW5jbHVkZS9wYW5lbC5oCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithbGwgXAorbGlicyBcCitpbnN0YWxsIDo6CSQoQVVUT19TUkMpICQoTElCUkFSSUVTKQorCitzb3VyY2VzOgkkKEFVVE9fU1JDKQorCiskKERFU1RESVIpJChiaW5kaXIpIFwKKyQoREVTVERJUikkKGxpYmRpcikgOgorCXNoICQoc3JjZGlyKS8uLi9ta2RpcnMuc2ggJEAKKworIyBtYWtlIGEgY29weSB0byBzaW1wbGlmeSBpbmNsdWRlLXBhdGhzIHdoaWxlIHN0aWxsIGtlZXBpbmcgcGFuZWwncyBpbmNsdWRlCisjIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuCisuLi9pbmNsdWRlL3BhbmVsLmggOiAkKHNyY2RpcikvcGFuZWwuaAorCS1ybSAtZiAkQAorCWNwICQoc3JjZGlyKS9wYW5lbC5oICRACisKK1BBTkVMX1BSSVZfSCA9IFwKKwkkKHNyY2RpcikvcGFuZWwucHJpdi5oIFwKKwkkKHNyY2RpcikvcGFuZWwuaAorCit0YWdzOgorCWN0YWdzICouW2NoXQorCitATUFLRV9VUFBFUl9UQUdTQFRBR1M6CitATUFLRV9VUFBFUl9UQUdTQAlldGFncyAqLltjaF0KKworbW9zdGx5Y2xlYW4gOjoKKwktcm0gLWYgY29yZSB0YWdzIFRBR1MgKn4gKi5iYWsgKi5pICoubG4gKi5hdGFjIHRyYWNlCisKK2NsZWFuIDo6IG1vc3RseWNsZWFuCisJLXJtIC1mICQoQVVUT19TUkMpCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3BhbmVsL2hlYWRlcnMgYi9wYW5lbC9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MTllYTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9oZWFkZXJzCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk2CisjCiskKHNyY2RpcikvcGFuZWwuaAorIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9wYW5lbC9sbGliLWxwYW5lbCBiL3BhbmVsL2xsaWItbHBhbmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDljMjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9sbGliLWxwYW5lbApAQCAtMCwwICsxLDE4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgIDE5OTcsMjAwMiwyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vcGFuZWwuYyAqLworCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCisjdW5kZWYgX25jX3JldHJhY2VfcGFuZWwKK1BBTkVMCSpfbmNfcmV0cmFjZV9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihQQU5FTCAqKikwKTsgfQorCisjdW5kZWYgX25jX215X3Zpc2J1ZgorY29uc3QgY2hhciAqX25jX215X3Zpc2J1ZigKKwkJY29uc3Qgdm9pZCAqcHRyKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19kUGFuZWwKK3ZvaWQJX25jX2RQYW5lbCgKKwkJY29uc3QgY2hhciAqdGV4dCwgCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZFN0YWNrCit2b2lkCV9uY19kU3RhY2soCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCWludAludW0sIAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1dub3V0cmVmcmVzaAordm9pZAlfbmNfV25vdXRyZWZyZXNoKAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1RvdWNocGFuCit2b2lkCV9uY19Ub3VjaHBhbigKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19Ub3VjaGxpbmUKK3ZvaWQJX25jX1RvdWNobGluZSgKKwkJY29uc3QgUEFORUwgKnBhbiwgCisJCWludAlzdGFydCwgCisJCWludAljb3VudCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9wX2Fib3ZlLmMgKi8KKworI3VuZGVmIHBhbmVsX2Fib3ZlCitQQU5FTAkqcGFuZWxfYWJvdmUoCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooUEFORUwgKiopMCk7IH0KKworLyogLi9wX2JlbG93LmMgKi8KKworI3VuZGVmIHBhbmVsX2JlbG93CitQQU5FTAkqcGFuZWxfYmVsb3coCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooUEFORUwgKiopMCk7IH0KKworLyogLi9wX2JvdHRvbS5jICovCisKKyN1bmRlZiBib3R0b21fcGFuZWwKK2ludAlib3R0b21fcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX2RlbGV0ZS5jICovCisKKyN1bmRlZiBkZWxfcGFuZWwKK2ludAlkZWxfcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX2hpZGUuYyAqLworCisjdW5kZWYgaGlkZV9wYW5lbAoraW50CWhpZGVfcGFuZWwoCisJCSBQQU5FTAkqcGFuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vcF9oaWRkZW4uYyAqLworCisjdW5kZWYgcGFuZWxfaGlkZGVuCitpbnQJcGFuZWxfaGlkZGVuKAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vcF9tb3ZlLmMgKi8KKworI3VuZGVmIG1vdmVfcGFuZWwKK2ludAltb3ZlX3BhbmVsKAorCQlQQU5FTAkqcGFuLCAKKwkJaW50CXN0YXJ0eSwgCisJCWludAlzdGFydHgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX25ldy5jICovCisKKyN1bmRlZiBuZXdfcGFuZWwKK1BBTkVMCSpuZXdfcGFuZWwoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFBBTkVMICoqKTApOyB9CisKKy8qIC4vcF9yZXBsYWNlLmMgKi8KKworI3VuZGVmIHJlcGxhY2VfcGFuZWwKK2ludAlyZXBsYWNlX3BhbmVsKAorCQlQQU5FTAkqcGFuLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX3Nob3cuYyAqLworCisjdW5kZWYgc2hvd19wYW5lbAoraW50CXNob3dfcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX3RvcC5jICovCisKKyN1bmRlZiB0b3BfcGFuZWwKK2ludAl0b3BfcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX3VwZGF0ZS5jICovCisKKyN1bmRlZiB1cGRhdGVfcGFuZWxzCit2b2lkCXVwZGF0ZV9wYW5lbHModm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9wX3VzZXIuYyAqLworCisjdW5kZWYgc2V0X3BhbmVsX3VzZXJwdHIKK2ludAlzZXRfcGFuZWxfdXNlcnB0cigKKwkJUEFORUwJKnBhbiwgCisJCXZvaWQJKnVwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBhbmVsX3VzZXJwdHIKK3ZvaWQJKnBhbmVsX3VzZXJwdHIoCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL3Bfd2luLmMgKi8KKworI3VuZGVmIHBhbmVsX3dpbmRvdworV0lORE9XCSpwYW5lbF93aW5kb3coCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CmRpZmYgLS1naXQgYS9wYW5lbC9sbGliLWxwYW5lbHcgYi9wYW5lbC9sbGliLWxwYW5lbHcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiZDFlMAotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL2xsaWItbHBhbmVsdwpAQCAtMCwwICsxLDE4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDIwMDIsMjAwNSAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vcGFuZWwuYyAqLworCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCisjdW5kZWYgX25jX3JldHJhY2VfcGFuZWwKK1BBTkVMCSpfbmNfcmV0cmFjZV9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihQQU5FTCAqKikwKTsgfQorCisjdW5kZWYgX25jX215X3Zpc2J1ZgorY29uc3QgY2hhciAqX25jX215X3Zpc2J1ZigKKwkJY29uc3Qgdm9pZCAqcHRyKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19kUGFuZWwKK3ZvaWQJX25jX2RQYW5lbCgKKwkJY29uc3QgY2hhciAqdGV4dCwgCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZFN0YWNrCit2b2lkCV9uY19kU3RhY2soCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCWludAludW0sIAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1dub3V0cmVmcmVzaAordm9pZAlfbmNfV25vdXRyZWZyZXNoKAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1RvdWNocGFuCit2b2lkCV9uY19Ub3VjaHBhbigKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19Ub3VjaGxpbmUKK3ZvaWQJX25jX1RvdWNobGluZSgKKwkJY29uc3QgUEFORUwgKnBhbiwgCisJCWludAlzdGFydCwgCisJCWludAljb3VudCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9wX2Fib3ZlLmMgKi8KKworI3VuZGVmIHBhbmVsX2Fib3ZlCitQQU5FTAkqcGFuZWxfYWJvdmUoCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooUEFORUwgKiopMCk7IH0KKworLyogLi9wX2JlbG93LmMgKi8KKworI3VuZGVmIHBhbmVsX2JlbG93CitQQU5FTAkqcGFuZWxfYmVsb3coCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooUEFORUwgKiopMCk7IH0KKworLyogLi9wX2JvdHRvbS5jICovCisKKyN1bmRlZiBib3R0b21fcGFuZWwKK2ludAlib3R0b21fcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX2RlbGV0ZS5jICovCisKKyN1bmRlZiBkZWxfcGFuZWwKK2ludAlkZWxfcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX2hpZGUuYyAqLworCisjdW5kZWYgaGlkZV9wYW5lbAoraW50CWhpZGVfcGFuZWwoCisJCSBQQU5FTAkqcGFuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vcF9oaWRkZW4uYyAqLworCisjdW5kZWYgcGFuZWxfaGlkZGVuCitpbnQJcGFuZWxfaGlkZGVuKAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vcF9tb3ZlLmMgKi8KKworI3VuZGVmIG1vdmVfcGFuZWwKK2ludAltb3ZlX3BhbmVsKAorCQlQQU5FTAkqcGFuLCAKKwkJaW50CXN0YXJ0eSwgCisJCWludAlzdGFydHgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX25ldy5jICovCisKKyN1bmRlZiBuZXdfcGFuZWwKK1BBTkVMCSpuZXdfcGFuZWwoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFBBTkVMICoqKTApOyB9CisKKy8qIC4vcF9yZXBsYWNlLmMgKi8KKworI3VuZGVmIHJlcGxhY2VfcGFuZWwKK2ludAlyZXBsYWNlX3BhbmVsKAorCQlQQU5FTAkqcGFuLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX3Nob3cuYyAqLworCisjdW5kZWYgc2hvd19wYW5lbAoraW50CXNob3dfcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX3RvcC5jICovCisKKyN1bmRlZiB0b3BfcGFuZWwKK2ludAl0b3BfcGFuZWwoCisJCVBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX3VwZGF0ZS5jICovCisKKyN1bmRlZiB1cGRhdGVfcGFuZWxzCit2b2lkCXVwZGF0ZV9wYW5lbHModm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9wX3VzZXIuYyAqLworCisjdW5kZWYgc2V0X3BhbmVsX3VzZXJwdHIKK2ludAlzZXRfcGFuZWxfdXNlcnB0cigKKwkJUEFORUwJKnBhbiwgCisJCXZvaWQJKnVwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBhbmVsX3VzZXJwdHIKK3ZvaWQJKnBhbmVsX3VzZXJwdHIoCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL3Bfd2luLmMgKi8KKworI3VuZGVmIHBhbmVsX3dpbmRvdworV0lORE9XCSpwYW5lbF93aW5kb3coCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CmRpZmYgLS1naXQgYS9wYW5lbC9tb2R1bGVzIGIvcGFuZWwvbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY3YTc5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFuZWwvbW9kdWxlcwpAQCAtMCwwICsxLDUxIEBACisjICRJZDogbW9kdWxlcyx2IDEuOSAyMDA2LzEyLzI0IDAwOjUzOjE3IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5NS1vbgorIworCitAIGJhc2UKKyMgTGlicmFyeSBvYmplY3RzCitwYW5lbAkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX2Fib3ZlCQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfYmVsb3cJCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF9ib3R0b20JbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX2RlbGV0ZQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfaGlkZQkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX2hpZGRlbglsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfbW92ZQkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX25ldwkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX3JlcGxhY2UJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX3Nob3cJCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF90b3AJCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF91cGRhdGUJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX3VzZXIJCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF93aW4JCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorCisjIHZpbGU6bWFrZW1vZGUKZGlmZiAtLWdpdCBhL3BhbmVsL3BfYWJvdmUuYyBiL3BhbmVsL3BfYWJvdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ5NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFuZWwvcF9hYm92ZS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX2Fib3ZlLmMKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfYWJvdmUuYyx2IDEuNiAyMDA1LzAyLzE5IDE2OjQ0OjU3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKFBBTkVMICopCitwYW5lbF9hYm92ZShjb25zdCBQQU5FTCAqIHBhbikKK3sKKyAgVCgoVF9DQUxMRUQoInBhbmVsX2Fib3ZlKCVwKSIpLCBwYW4pKTsKKyAgaWYgKCFwYW4pCisgICAgeworICAgICAgLyogaWYgdG9wIGFuZCBib3R0b20gYXJlIGVxdWFsLCB3ZSBoYXZlIG5vIG9yIG9ubHkgdGhlIHBzZXVkbyBwYW5lbDsKKyAgICAgICAgIGlmIG5vdCwgd2UgcmV0dXJuIHRoZSBwYW5lbCBhYm92ZSB0aGUgcHNldWRvIHBhbmVsICovCisgICAgICByZXR1cm5QYW5lbChFTVBUWV9TVEFDSygpPyAoUEFORUwgKikgMCA6IF9uY19ib3R0b21fcGFuZWwtPmFib3ZlKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm5QYW5lbChwYW4tPmFib3ZlKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3BfYmVsb3cuYyBiL3BhbmVsL3BfYmVsb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGIyNDEwCi0tLSAvZGV2L251bGwKKysrIGIvcGFuZWwvcF9iZWxvdy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX2JlbG93LmMKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfYmVsb3cuYyx2IDEuNiAyMDA1LzAyLzE5IDE2OjQ1OjEwIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKFBBTkVMICopCitwYW5lbF9iZWxvdyhjb25zdCBQQU5FTCAqIHBhbikKK3sKKyAgVCgoVF9DQUxMRUQoInBhbmVsX2JlbG93KCVwKSIpLCBwYW4pKTsKKyAgaWYgKCFwYW4pCisgICAgeworICAgICAgLyogaWYgdG9wIGFuZCBib3R0b20gYXJlIGVxdWFsLCB3ZSBoYXZlIG5vIG9yIG9ubHkgdGhlIHBzZXVkbyBwYW5lbCAqLworICAgICAgcmV0dXJuUGFuZWwoRU1QVFlfU1RBQ0soKT8gKFBBTkVMICopIDAgOiBfbmNfdG9wX3BhbmVsKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiB3ZSBtdXN0IG5vdCByZXR1cm4gdGhlIHBzZXVkbyBwYW5lbCAqLworICAgICAgcmV0dXJuUGFuZWwoSXNfUHNldWRvKHBhbi0+YmVsb3cpID8gKFBBTkVMICopIDAgOiBwYW4tPmJlbG93KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYW5lbC9wX2JvdHRvbS5jIGIvcGFuZWwvcF9ib3R0b20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODYxZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFuZWwvcF9ib3R0b20uYwpAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcF9ib3R0b20uYworICogUGxhY2UgYSBwYW5lbCBvbiBib3R0b20gb2YgdGhlIHN0YWNrOyBtYXkgYWxyZWFkeSBiZSBpbiB0aGUgc3RhY2sgCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX2JvdHRvbS5jLHYgMS4xMSAyMDA1LzAyLzE5IDE2OjM4OjE2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2JvdHRvbV9wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgaW50IGVyciA9IE9LOworCisgIFQoKFRfQ0FMTEVEKCJib3R0b21fcGFuZWwoJXApIiksIHBhbikpOworICBpZiAocGFuKQorICAgIHsKKyAgICAgIGlmICghSXNfQm90dG9tKHBhbikpCisJeworCisJICBkQnVnKCgiLS0+IGJvdHRvbV9wYW5lbCAlcyIsIFVTRVJfUFRSKHBhbi0+dXNlcikpKTsKKworCSAgSElERV9QQU5FTChwYW4sIGVyciwgT0spOworCSAgYXNzZXJ0KF9uY19ib3R0b21fcGFuZWwgPT0gX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWwpOworCisJICBkU3RhY2soIjxsYiVkPiIsIDEsIHBhbik7CisKKwkgIHBhbi0+YmVsb3cgPSBfbmNfYm90dG9tX3BhbmVsOworCSAgcGFuLT5hYm92ZSA9IF9uY19ib3R0b21fcGFuZWwtPmFib3ZlOworCSAgaWYgKHBhbi0+YWJvdmUpCisJICAgIHBhbi0+YWJvdmUtPmJlbG93ID0gcGFuOworCSAgX25jX2JvdHRvbV9wYW5lbC0+YWJvdmUgPSBwYW47CisKKwkgIGRTdGFjaygiPGxiJWQ+IiwgOSwgcGFuKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgZXJyID0gRVJSOworCisgIHJldHVybkNvZGUoZXJyKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3BfZGVsZXRlLmMgYi9wYW5lbC9wX2RlbGV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWUyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wX2RlbGV0ZS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX2RlbGV0ZS5jCisgKiBSZW1vdmUgYSBwYW5lbCBmcm9tIHN0YWNrLCBpZiBpbiBpdCwgYW5kIGZyZWUgc3RydWN0CisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX2RlbGV0ZS5jLHYgMS44IDIwMDUvMDIvMTkgMTY6Mzg6NDUgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVsX3BhbmVsKFBBTkVMICogcGFuKQoreworICBpbnQgZXJyID0gT0s7CisKKyAgVCgoVF9DQUxMRUQoImRlbF9wYW5lbCglcCkiKSwgcGFuKSk7CisgIGlmIChwYW4pCisgICAgeworICAgICAgZEJ1ZygoIi0tPiBkZWxfcGFuZWwgJXMiLCBVU0VSX1BUUihwYW4tPnVzZXIpKSk7CisgICAgICBISURFX1BBTkVMKHBhbiwgZXJyLCBPSyk7CisgICAgICBmcmVlKCh2b2lkICopcGFuKTsKKyAgICB9CisgIGVsc2UKKyAgICBlcnIgPSBFUlI7CisKKyAgcmV0dXJuQ29kZShlcnIpOworfQpkaWZmIC0tZ2l0IGEvcGFuZWwvcF9oaWRkZW4uYyBiL3BhbmVsL3BfaGlkZGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0YzA3ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL3BfaGlkZGVuLmMKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfaGlkZGVuLmMKKyAqIFRlc3Qgd2hldGhlciBvciBub3QgcGFuZWwgaXMgaGlkZGVuCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX2hpZGRlbi5jLHYgMS43IDIwMDUvMDIvMTkgMTY6Mzk6MTcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorcGFuZWxfaGlkZGVuKGNvbnN0IFBBTkVMICogcGFuKQoreworICBUKChUX0NBTExFRCgicGFuZWxfaGlkZGVuKCVwKSIpLCBwYW4pKTsKKyAgaWYgKCFwYW4pCisgICAgcmV0dXJuQ29kZShFUlIpOworICByZXR1cm5Db2RlKElTX0xJTktFRChwYW4pID8gRkFMU0UgOiBUUlVFKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3BfaGlkZS5jIGIvcGFuZWwvcF9oaWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkODg1MwotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL3BfaGlkZS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX2hpZGUuYworICogUmVtb3ZlIGEgcGFuZWwgZnJvbSB0aGUgc3RhY2sKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfaGlkZS5jLHYgMS45IDIwMDUvMDIvMTkgMTY6Mzk6NDEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQoraGlkZV9wYW5lbChyZWdpc3RlciBQQU5FTCAqIHBhbikKK3sKKyAgaW50IGVyciA9IE9LOworCisgIFQoKFRfQ0FMTEVEKCJoaWRlX3BhbmVsKCVwKSIpLCBwYW4pKTsKKyAgaWYgKCFwYW4pCisgICAgcmV0dXJuQ29kZShFUlIpOworCisgIGRCdWcoKCItLT4gaGlkZV9wYW5lbCAlcyIsIFVTRVJfUFRSKHBhbi0+dXNlcikpKTsKKyAgZFN0YWNrKCI8dSVkPiIsIDEsIHBhbik7CisKKyAgSElERV9QQU5FTChwYW4sIGVyciwgRVJSKTsKKworICBkU3RhY2soIjx1JWQ+IiwgOSwgcGFuKTsKKworICByZXR1cm5Db2RlKGVycik7Cit9CmRpZmYgLS1naXQgYS9wYW5lbC9wX21vdmUuYyBiL3BhbmVsL3BfbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MThlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wX21vdmUuYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcF9tb3ZlLmMKKyAqIE1vdmUgYSBwYW5lbCB0byBhIG5ldyBsb2NhdGlvbgorICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF9tb3ZlLmMsdiAxLjkgMjAwNS8wMi8xOSAxNjo0Njo0OSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittb3ZlX3BhbmVsKFBBTkVMICogcGFuLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4KQoreworICBUKChUX0NBTExFRCgibW92ZV9wYW5lbCglcCwlZCwlZCkiKSwgcGFuLCBzdGFydHksIHN0YXJ0eCkpOworCisgIGlmICghcGFuKQorICAgIHJldHVybkNvZGUoRVJSKTsKKworICBpZiAoSVNfTElOS0VEKHBhbikpCisgICAgeworICAgICAgVG91Y2hwYW4ocGFuKTsKKyAgICAgIFBBTkVMX1VQREFURShwYW4sIChQQU5FTCAqKSAwKTsKKyAgICB9CisKKyAgcmV0dXJuQ29kZShtdndpbihwYW4tPndpbiwgc3RhcnR5LCBzdGFydHgpKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3BfbmV3LmMgYi9wYW5lbC9wX25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MTkzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wX25ldy5jCkBAIC0wLDAgKzEsMTEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ny0xOTk5ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX25ldy5jCisgKiBDcmVhdGlvbiBvZiBhIG5ldyBwYW5lbCAKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfbmV3LmMsdiAxLjEwIDIwMDgvMDgvMDQgMTg6MjU6NDggdG9tIEV4cCAkIikKKworI2lmZGVmIFRSQUNFCitzdGF0aWMgY2hhciAqc3Rkc2NyX2lkOworc3RhdGljIGNoYXIgKm5ld19pZDsKKyNlbmRpZgorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEdldCByb290IChpLmUuIHN0ZHNjcidzKSBwYW5lbC4KKyAgRXN0YWJsaXNoIHRoZSBwc2V1ZG8gcGFuZWwgZm9yIHN0ZHNjciBpZiBuZWNlc3NhcnkuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgUEFORUwgKgorcm9vdF9wYW5lbCh2b2lkKQoreworICBpZiAoX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWwgPT0gKFBBTkVMICopIDApCisgICAgeworCisgICAgICBhc3NlcnQoc3Rkc2NyICYmICFfbmNfYm90dG9tX3BhbmVsICYmICFfbmNfdG9wX3BhbmVsKTsKKyNpZiBOT19MRUFLUworICAgICAgX25jX3BhbmVsaG9vaygpLT5kZXN0cm95ID0gZGVsX3BhbmVsOworI2VuZGlmCisgICAgICBfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbCA9IChQQU5FTCAqKSBtYWxsb2Moc2l6ZW9mKFBBTkVMKSk7CisgICAgICBpZiAoX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWwgIT0gMCkKKwl7CisJICBQQU5FTCAqcGFuID0gX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWw7CisJICBXSU5ET1cgKndpbiA9IHN0ZHNjcjsKKworCSAgcGFuLT53aW4gPSB3aW47CisJICBwYW4tPmJlbG93ID0gKFBBTkVMICopIDA7CisJICBwYW4tPmFib3ZlID0gKFBBTkVMICopIDA7CisjaWZkZWYgVFJBQ0UKKwkgIGlmICghc3Rkc2NyX2lkKQorCSAgICBzdGRzY3JfaWQgPSBzdHJkdXAoInN0ZHNjciIpOworCSAgcGFuLT51c2VyID0gc3Rkc2NyX2lkOworI2Vsc2UKKwkgIHBhbi0+dXNlciA9ICh2b2lkICopMDsKKyNlbmRpZgorCSAgX25jX2JvdHRvbV9wYW5lbCA9IF9uY190b3BfcGFuZWwgPSBwYW47CisJfQorICAgIH0KKyAgcmV0dXJuIF9uY19zdGRzY3JfcHNldWRvX3BhbmVsOworfQorCitOQ1VSU0VTX0VYUE9SVChQQU5FTCAqKQorbmV3X3BhbmVsKFdJTkRPVyAqd2luKQoreworICBQQU5FTCAqcGFuID0gKFBBTkVMICopIDA7CisKKyAgVCgoVF9DQUxMRUQoIm5ld19wYW5lbCglcCkiKSwgd2luKSk7CisKKyAgaWYgKCF3aW4pCisgICAgcmV0dXJuUGFuZWwocGFuKTsKKworICBpZiAoIV9uY19zdGRzY3JfcHNldWRvX3BhbmVsKQorICAgICh2b2lkKXJvb3RfcGFuZWwoKTsKKyAgYXNzZXJ0KF9uY19zdGRzY3JfcHNldWRvX3BhbmVsKTsKKworICBpZiAoISh3aW4tPl9mbGFncyAmIF9JU1BBRCkgJiYgKHBhbiA9IChQQU5FTCAqKSBtYWxsb2Moc2l6ZW9mKFBBTkVMKSkpKQorICAgIHsKKyAgICAgIHBhbi0+d2luID0gd2luOworICAgICAgcGFuLT5hYm92ZSA9IChQQU5FTCAqKSAwOworICAgICAgcGFuLT5iZWxvdyA9IChQQU5FTCAqKSAwOworI2lmZGVmIFRSQUNFCisgICAgICBpZiAoIW5ld19pZCkKKwluZXdfaWQgPSBzdHJkdXAoIm5ldyIpOworICAgICAgcGFuLT51c2VyID0gbmV3X2lkOworI2Vsc2UKKyAgICAgIHBhbi0+dXNlciA9IChjaGFyICopMDsKKyNlbmRpZgorICAgICAgKHZvaWQpc2hvd19wYW5lbChwYW4pOworICAgIH0KKyAgcmV0dXJuUGFuZWwocGFuKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3BfcmVwbGFjZS5jIGIvcGFuZWwvcF9yZXBsYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwZDI5NQotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL3BfcmVwbGFjZS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX3JlcGxhY2UuYworICogUmVwbGFjZSBhIHBhbmVscyB3aW5kb3cuCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX3JlcGxhY2UuYyx2IDEuOSAyMDA1LzAyLzE5IDE2OjQxOjMxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3JlcGxhY2VfcGFuZWwoUEFORUwgKiBwYW4sIFdJTkRPVyAqd2luKQoreworICBUKChUX0NBTExFRCgicmVwbGFjZV9wYW5lbCglcCwlcCkiKSwgcGFuLCB3aW4pKTsKKworICBpZiAoIXBhbikKKyAgICByZXR1cm5Db2RlKEVSUik7CisKKyAgaWYgKElTX0xJTktFRChwYW4pKQorICAgIHsKKyAgICAgIFRvdWNocGFuKHBhbik7CisgICAgICBQQU5FTF9VUERBVEUocGFuLCAoUEFORUwgKikgMCk7CisgICAgfQorCisgIHBhbi0+d2luID0gd2luOworCisgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvcGFuZWwvcF9zaG93LmMgYi9wYW5lbC9wX3Nob3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVlZTIzCi0tLSAvZGV2L251bGwKKysrIGIvcGFuZWwvcF9zaG93LmMKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfc2hvdy5jCisgKiBQbGFjZSBhIHBhbmVsIG9uIHRvcCBvZiB0aGUgc3RhY2s7IG1heSBhbHJlYWR5IGJlIGluIHRoZSBzdGFjayAKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfc2hvdy5jLHYgMS4xMSAyMDA1LzAyLzE5IDE2OjQyOjAyIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nob3dfcGFuZWwoUEFORUwgKiBwYW4pCit7CisgIGludCBlcnIgPSBPSzsKKworICBUKChUX0NBTExFRCgic2hvd19wYW5lbCglcCkiKSwgcGFuKSk7CisKKyAgaWYgKCFwYW4pCisgICAgcmV0dXJuQ29kZShFUlIpOworCisgIGlmIChJc19Ub3AocGFuKSkKKyAgICByZXR1cm5Db2RlKE9LKTsKKworICBkQnVnKCgiLS0+IHNob3dfcGFuZWwgJXMiLCBVU0VSX1BUUihwYW4tPnVzZXIpKSk7CisKKyAgSElERV9QQU5FTChwYW4sIGVyciwgT0spOworCisgIGRTdGFjaygiPGx0JWQ+IiwgMSwgcGFuKTsKKyAgYXNzZXJ0KF9uY19ib3R0b21fcGFuZWwgPT0gX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWwpOworCisgIF9uY190b3BfcGFuZWwtPmFib3ZlID0gcGFuOworICBwYW4tPmJlbG93ID0gX25jX3RvcF9wYW5lbDsKKyAgcGFuLT5hYm92ZSA9IChQQU5FTCAqKSAwOworICBfbmNfdG9wX3BhbmVsID0gcGFuOworCisgIGRTdGFjaygiPGx0JWQ+IiwgOSwgcGFuKTsKKworICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3BfdG9wLmMgYi9wYW5lbC9wX3RvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDFkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wX3RvcC5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX3RvcC5jCisgKiBQbGFjZSBhIHBhbmVsIG9uIHRvcCBvZiB0aGUgc3RhY2suCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX3RvcC5jLHYgMS41IDIwMDUvMDIvMTkgMTY6NDI6MjMgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQordG9wX3BhbmVsKFBBTkVMICogcGFuKQoreworICBUKChUX0NBTExFRCgidG9wX3BhbmVsKCVwKSIpLCBwYW4pKTsKKyAgcmV0dXJuQ29kZShzaG93X3BhbmVsKHBhbikpOworfQpkaWZmIC0tZ2l0IGEvcGFuZWwvcF91cGRhdGUuYyBiL3BhbmVsL3BfdXBkYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2NzcxOAotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL3BfdXBkYXRlLmMKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfdXBkYXRlLmMKKyAqIHdub3V0cmVmcmVzaCB3aW5kb3dzIGluIGFuIG9yZGVybHkgZmFzaGlvbgorICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF91cGRhdGUuYyx2IDEuOSAyMDA1LzAyLzE5IDE2OjQ5OjQ3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCit1cGRhdGVfcGFuZWxzKHZvaWQpCit7CisgIFBBTkVMICpwYW47CisKKyAgVCgoVF9DQUxMRUQoInVwZGF0ZV9wYW5lbHMoKSIpKSk7CisgIGRCdWcoKCItLT4gdXBkYXRlX3BhbmVscyIpKTsKKyAgcGFuID0gX25jX2JvdHRvbV9wYW5lbDsKKyAgd2hpbGUgKHBhbiAmJiBwYW4tPmFib3ZlKQorICAgIHsKKyAgICAgIFBBTkVMX1VQREFURShwYW4sIHBhbi0+YWJvdmUpOworICAgICAgcGFuID0gcGFuLT5hYm92ZTsKKyAgICB9CisKKyAgcGFuID0gX25jX2JvdHRvbV9wYW5lbDsKKyAgd2hpbGUgKHBhbikKKyAgICB7CisgICAgICBXbm91dHJlZnJlc2gocGFuKTsKKyAgICAgIHBhbiA9IHBhbi0+YWJvdmU7CisgICAgfQorCisgIHJldHVyblZvaWQ7Cit9CmRpZmYgLS1naXQgYS9wYW5lbC9wX3VzZXIuYyBiL3BhbmVsL3BfdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTI1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wX3VzZXIuYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcF91c2VyLmMKKyAqIFNldC9HZXQgcGFuZWxzIHVzZXIgcG9pbnRlciAKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfdXNlci5jLHYgMS42IDIwMDUvMDIvMTkgMTY6NTI6NDQgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X3BhbmVsX3VzZXJwdHIoUEFORUwgKiBwYW4sIE5DVVJTRVNfQ09OU1Qgdm9pZCAqdXB0cikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9wYW5lbF91c2VycHRyKCVwLCVwKSIpLCBwYW4sIHVwdHIpKTsKKyAgaWYgKCFwYW4pCisgICAgcmV0dXJuQ29kZShFUlIpOworICBwYW4tPnVzZXIgPSB1cHRyOworICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCB2b2lkICopCitwYW5lbF91c2VycHRyKGNvbnN0IFBBTkVMICogcGFuKQoreworICBUKChUX0NBTExFRCgicGFuZWxfdXNlcnB0ciglcCkiKSwgcGFuKSk7CisgIHJldHVybkNWb2lkUHRyKHBhbiA/IHBhbi0+dXNlciA6IChOQ1VSU0VTX0NPTlNUIHZvaWQgKikwKTsKK30KZGlmZiAtLWdpdCBhL3BhbmVsL3Bfd2luLmMgYi9wYW5lbC9wX3dpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDJjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wX3dpbi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX3dpbi5jCisgKiBSZXR1cm4gYSBwYW5lbHMgd2luZG93LgorICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF93aW4uYyx2IDEuNSAyMDA1LzAyLzE5IDE2OjQ0OjE2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorcGFuZWxfd2luZG93KGNvbnN0IFBBTkVMICogcGFuKQoreworICBUKChUX0NBTExFRCgicGFuZWxfd2luZG93KCVwKSIpLCBwYW4pKTsKKyAgcmV0dXJuV2luKHBhbiA/IHBhbi0+d2luIDogKFdJTkRPVyAqKTApOworfQpkaWZmIC0tZ2l0IGEvcGFuZWwvcGFuZWwuYyBiL3BhbmVsL3BhbmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODA4MwotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL3BhbmVsLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwYW5lbC5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHBhbmVscyBsaWJyYXJ5LCBzb21lIGNvcmUgcm91dGluZXMgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwYW5lbC5jLHYgMS4yMyAyMDA1LzAyLzE5IDE4OjA0OjMxIHRvbSBFeHAgJCIpCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlfbmNfcmV0cmFjZV9wYW5lbCAocGFuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFRSQUNFCitOQ1VSU0VTX0VYUE9SVChQQU5FTCAqKQorX25jX3JldHJhY2VfcGFuZWwoUEFORUwgKiBwYW4pCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBwYW4pKTsKKyAgcmV0dXJuIHBhbjsKK30KKyNlbmRpZgorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJX25jX215X3Zpc2J1ZihwdHIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVFJBQ0UKKyNpZm5kZWYgVFJBQ0VfVFhUCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfbXlfdmlzYnVmKGNvbnN0IHZvaWQgKnB0cikKK3sKKyAgY2hhciB0ZW1wWzMyXTsKKworICBpZiAocHRyICE9IDApCisgICAgc3ByaW50Zih0ZW1wLCAicHRyOiVwIiwgcHRyKTsKKyAgZWxzZQorICAgIHN0cmNweSh0ZW1wLCAiPG51bGw+Iik7CisgIHJldHVybiBfbmNfdmlzYnVmKHRlbXApOworfQorI2VuZGlmCisjZW5kaWYKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWRQYW5lbCh0ZXh0LHBhbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBUUkFDRQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19kUGFuZWwoY29uc3QgY2hhciAqdGV4dCwgY29uc3QgUEFORUwgKiBwYW4pCit7CisgIF90cmFjZWYoIiVzIGlkPSVzIGI9JXMgYT0lcyB5PSVkIHg9JWQiLAorCSAgdGV4dCwgVVNFUl9QVFIocGFuLT51c2VyKSwKKwkgIChwYW4tPmJlbG93KSA/IFVTRVJfUFRSKHBhbi0+YmVsb3ctPnVzZXIpIDogIi0tIiwKKwkgIChwYW4tPmFib3ZlKSA/IFVTRVJfUFRSKHBhbi0+YWJvdmUtPnVzZXIpIDogIi0tIiwKKwkgIFBTVEFSVFkocGFuKSwgUFNUQVJUWChwYW4pKTsKK30KKyNlbmRpZgorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZFN0YWNrKGZtdCxudW0scGFuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFRSQUNFCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2RTdGFjayhjb25zdCBjaGFyICpmbXQsIGludCBudW0sIGNvbnN0IFBBTkVMICogcGFuKQoreworICBjaGFyIHM4MFs4MF07CisKKyAgc3ByaW50ZihzODAsIGZtdCwgbnVtLCBwYW4pOworICBfdHJhY2VmKCIlcyBiPSVzIHQ9JXMiLCBzODAsCisJICAoX25jX2JvdHRvbV9wYW5lbCkgPyBVU0VSX1BUUihfbmNfYm90dG9tX3BhbmVsLT51c2VyKSA6ICItLSIsCisJICAoX25jX3RvcF9wYW5lbCkgPyBVU0VSX1BUUihfbmNfdG9wX3BhbmVsLT51c2VyKSA6ICItLSIpOworICBpZiAocGFuKQorICAgIF90cmFjZWYoInBhbiBpZD0lcyIsIFVTRVJfUFRSKHBhbi0+dXNlcikpOworICBwYW4gPSBfbmNfYm90dG9tX3BhbmVsOworICB3aGlsZSAocGFuKQorICAgIHsKKyAgICAgIGRQYW5lbCgic3RrIiwgcGFuKTsKKyAgICAgIHBhbiA9IHBhbi0+YWJvdmU7CisgICAgfQorfQorI2VuZGlmCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlXbm91dHJlZnJlc2gocGFuKSAtIGRlYnVnZ2luZyBob29rIGZvciB3bm91dHJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBUUkFDRQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19Xbm91dHJlZnJlc2goY29uc3QgUEFORUwgKiBwYW4pCit7CisgIGRQYW5lbCgid25vdXRyZWZyZXNoIiwgcGFuKTsKKyAgd25vdXRyZWZyZXNoKHBhbi0+d2luKTsKK30KKyNlbmRpZgorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVG91Y2hwYW4ocGFuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFRSQUNFCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX1RvdWNocGFuKGNvbnN0IFBBTkVMICogcGFuKQoreworICBkUGFuZWwoIlRvdWNocGFuIiwgcGFuKTsKKyAgdG91Y2h3aW4ocGFuLT53aW4pOworfQorI2VuZGlmCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlUb3VjaGxpbmUocGFuLHN0YXJ0LGNvdW50KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFRSQUNFCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX1RvdWNobGluZShjb25zdCBQQU5FTCAqIHBhbiwgaW50IHN0YXJ0LCBpbnQgY291bnQpCit7CisgIGNoYXIgczgwWzgwXTsKKworICBzcHJpbnRmKHM4MCwgIlRvdWNobGluZSBzPSVkIGM9JWQiLCBzdGFydCwgY291bnQpOworICBkUGFuZWwoczgwLCBwYW4pOworICB0b3VjaGxpbmUocGFuLT53aW4sIHN0YXJ0LCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBUUkFDRQorIyAgaWZuZGVmIF9fR05VQ19fCisgICAgIC8qIFNvbWUgQyBjb21waWxlcnMgbmVlZCBzb21ldGhpbmcgZGVmaW5lZCBpbiBhIHNvdXJjZSBmaWxlICovCitleHRlcm4gdm9pZCBfbmNfZHVtbXlfcGFuZWwodm9pZCk7Cit2b2lkCitfbmNfZHVtbXlfcGFuZWwodm9pZCkKK3sKK30KKyMgIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhbmVsL3BhbmVsLmggYi9wYW5lbC9wYW5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDIwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYW5lbC9wYW5lbC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IHBhbmVsLmgsdiAxLjEwIDIwMDYvMDUvMjcgMTk6NDk6NDAgdG9tIEV4cCAkICovCisKKy8qIHBhbmVsLmggLS0gaW50ZXJmYWNlIGZpbGUgZm9yIHBhbmVscyBsaWJyYXJ5ICovCisKKyNpZm5kZWYgTkNVUlNFU19QQU5FTF9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19QQU5FTF9IX2luY2wgMQorCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKK3R5cGVkZWYgc3RydWN0IHBhbmVsCit7CisgIFdJTkRPVyAqd2luOworICBzdHJ1Y3QgcGFuZWwgKmJlbG93OworICBzdHJ1Y3QgcGFuZWwgKmFib3ZlOworICBOQ1VSU0VTX0NPTlNUIHZvaWQgKnVzZXI7Cit9IFBBTkVMOworCisjaWYJZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cqKSBwYW5lbF93aW5kb3cgKGNvbnN0IFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpICAgIHVwZGF0ZV9wYW5lbHMgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgICAgIGhpZGVfcGFuZWwgKFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgICAgIHNob3dfcGFuZWwgKFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgICAgIGRlbF9wYW5lbCAoUEFORUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgdG9wX3BhbmVsIChQQU5FTCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICAgICBib3R0b21fcGFuZWwgKFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFBBTkVMKikgIG5ld19wYW5lbCAoV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFBBTkVMKikgIHBhbmVsX2Fib3ZlIChjb25zdCBQQU5FTCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChQQU5FTCopICBwYW5lbF9iZWxvdyAoY29uc3QgUEFORUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgc2V0X3BhbmVsX3VzZXJwdHIgKFBBTkVMICosIE5DVVJTRVNfQ09OU1Qgdm9pZCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIHZvaWQqKSBwYW5lbF91c2VycHRyIChjb25zdCBQQU5FTCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICAgICBtb3ZlX3BhbmVsIChQQU5FTCAqLCBpbnQsIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgcmVwbGFjZV9wYW5lbCAoUEFORUwgKixXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgcGFuZWxfaGlkZGVuIChjb25zdCBQQU5FTCAqKTsKKworI2lmCWRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5DVVJTRVNfUEFORUxfSF9pbmNsICovCisKKy8qIGVuZCBvZiBwYW5lbC5oICovCmRpZmYgLS1naXQgYS9wYW5lbC9wYW5lbC5wcml2LmggYi9wYW5lbC9wYW5lbC5wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiODE0NAotLS0gL2Rldi9udWxsCisrKyBiL3BhbmVsL3BhbmVsLnByaXYuaApAQCAtMCwwICsxLDE4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiBwYW5lbC5wcml2LmgsdiAxLjIyIDIwMDgvMDkvMjcgMjI6MzY6MTEgdG9tIEV4cCAkICovCisKKyNpZm5kZWYgTkNVUlNFU19QQU5FTF9QUklWX0gKKyNkZWZpbmUgTkNVUlNFU19QQU5FTF9QUklWX0ggMQorCisjaWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJjdXJzZXMucHJpdi5oIgorI2luY2x1ZGUgInBhbmVsLmgiCisjaW5jbHVkZSA8bmNfcGFuZWwuaD4KKworI2lmIFVTRV9SQ1NfSURTCisjICBkZWZpbmUgTU9EVUxFX0lEKGlkKSBzdGF0aWMgY29uc3QgY2hhciBJZGVudFtdID0gaWQ7CisjZWxzZQorIyAgZGVmaW5lIE1PRFVMRV9JRChpZCkgLypub3RoaW5nKi8KKyNlbmRpZgorCisKKyNpZmRlZiBUUkFDRQorICAgZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX215X3Zpc2J1ZiAoY29uc3Qgdm9pZCAqKTsKKyMgIGlmZGVmIFRSQUNFX1RYVAorIyAgICBkZWZpbmUgVVNFUl9QVFIocHRyKSBfbmNfdmlzYnVmKChjb25zdCBjaGFyICopcHRyKQorIyAgZWxzZQorIyAgICBkZWZpbmUgVVNFUl9QVFIocHRyKSBfbmNfbXlfdmlzYnVmKChjb25zdCBjaGFyICopcHRyKQorIyAgZW5kaWYKKworIyAgZGVmaW5lIHJldHVyblBhbmVsKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLHBhbmVsKQorCisgICBleHRlcm4gTkNVUlNFU19FWFBPUlQoUEFORUwgKikgX25jX3JldHJhY2VfcGFuZWwgKFBBTkVMICopOworICAgZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19kUGFuZWwgKGNvbnN0IGNoYXIqLCBjb25zdCBQQU5FTCopOworICAgZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19kU3RhY2sgKGNvbnN0IGNoYXIqLCBpbnQsIGNvbnN0IFBBTkVMKik7CisgICBleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX1dub3V0cmVmcmVzaCAoY29uc3QgUEFORUwqKTsKKyAgIGV4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfVG91Y2hwYW4gKGNvbnN0IFBBTkVMKik7CisgICBleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX1RvdWNobGluZSAoY29uc3QgUEFORUwqLCBpbnQsIGludCk7CisKKyMgIGRlZmluZSBkQnVnKHgpIF90cmFjZWYgeAorIyAgZGVmaW5lIGRQYW5lbCh0ZXh0LHBhbikgX25jX2RQYW5lbCh0ZXh0LHBhbikKKyMgIGRlZmluZSBkU3RhY2soZm10LG51bSxwYW4pIF9uY19kU3RhY2soZm10LG51bSxwYW4pCisjICBkZWZpbmUgV25vdXRyZWZyZXNoKHBhbikgX25jX1dub3V0cmVmcmVzaChwYW4pCisjICBkZWZpbmUgVG91Y2hwYW4ocGFuKSBfbmNfVG91Y2hwYW4ocGFuKQorIyAgZGVmaW5lIFRvdWNobGluZShwYW4sc3RhcnQsY291bnQpIF9uY19Ub3VjaGxpbmUocGFuLHN0YXJ0LGNvdW50KQorI2Vsc2UgLyogIVRSQUNFICovCisjICBkZWZpbmUgcmV0dXJuUGFuZWwoY29kZSkJcmV0dXJuIGNvZGUKKyMgIGRlZmluZSBkQnVnKHgpCisjICBkZWZpbmUgZFBhbmVsKHRleHQscGFuKQorIyAgZGVmaW5lIGRTdGFjayhmbXQsbnVtLHBhbikKKyMgIGRlZmluZSBXbm91dHJlZnJlc2gocGFuKSB3bm91dHJlZnJlc2goKHBhbiktPndpbikKKyMgIGRlZmluZSBUb3VjaHBhbihwYW4pIHRvdWNod2luKChwYW4pLT53aW4pCisjICBkZWZpbmUgVG91Y2hsaW5lKHBhbixzdGFydCxjb3VudCkgdG91Y2hsaW5lKChwYW4pLT53aW4sc3RhcnQsY291bnQpCisjZW5kaWYKKworI2RlZmluZSBfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbCBfbmNfcGFuZWxob29rKCktPnN0ZHNjcl9wc2V1ZG9fcGFuZWwKKyNkZWZpbmUgX25jX3RvcF9wYW5lbCBfbmNfcGFuZWxob29rKCktPnRvcF9wYW5lbAorI2RlZmluZSBfbmNfYm90dG9tX3BhbmVsIF9uY19wYW5lbGhvb2soKS0+Ym90dG9tX3BhbmVsCisKKyNkZWZpbmUgRU1QVFlfU1RBQ0soKSAoX25jX3RvcF9wYW5lbD09X25jX2JvdHRvbV9wYW5lbCkKKyNkZWZpbmUgSXNfQm90dG9tKHApICAoKChwKSE9KFBBTkVMKikwKSAmJiAhRU1QVFlfU1RBQ0soKSAmJiAoX25jX2JvdHRvbV9wYW5lbC0+YWJvdmU9PShwKSkpCisjZGVmaW5lIElzX1RvcChwKSAoKChwKSE9KFBBTkVMKikwKSAmJiAhRU1QVFlfU1RBQ0soKSAmJiAoX25jX3RvcF9wYW5lbD09KHApKSkKKyNkZWZpbmUgSXNfUHNldWRvKHApICgocCkgJiYgKChwKT09X25jX2JvdHRvbV9wYW5lbCkpCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJU19MSU5LRUQocGFuKSAtIGNoZWNrIHRvIHNlZSBpZiBwYW5lbCBpcyBpbiB0aGUgc3RhY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoaXMgd29ya3MhIFRoZSBvbmx5IGNhc2Ugd2hlcmUgaXQgd291bGQgZmFpbCBpcywgd2hlbiB0aGUgbGlzdCBoYXMKKyAgIG9ubHkgb25lIGVsZW1lbnQuIEJ1dCB0aGlzIGNvdWxkIG9ubHkgYmUgdGhlIHBzZXVkbyBwYW5lbCBhdCB0aGUgYm90dG9tICovCisjZGVmaW5lIElTX0xJTktFRChwKSAoKChwKS0+YWJvdmUgfHwgKHApLT5iZWxvdyB8fCgocCk9PV9uY19ib3R0b21fcGFuZWwpKSA/IFRSVUUgOiBGQUxTRSkKKworI2RlZmluZSBQU1RBUlRYKHBhbikgKChwYW4pLT53aW4tPl9iZWd4KQorI2RlZmluZSBQRU5EWChwYW4pICAgKChwYW4pLT53aW4tPl9iZWd4ICsgZ2V0bWF4eCgocGFuKS0+d2luKSAtIDEpCisjZGVmaW5lIFBTVEFSVFkocGFuKSAoKHBhbiktPndpbi0+X2JlZ3kpCisjZGVmaW5lIFBFTkRZKHBhbikgICAoKHBhbiktPndpbi0+X2JlZ3kgKyBnZXRtYXh5KChwYW4pLT53aW4pIC0gMSkKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVBBTkVMU19PVkVSTEFQUEVEKHBhbjEscGFuMikgLSBjaGVjayBwYW5lbCBvdmVybGFwcGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQQU5FTFNfT1ZFUkxBUFBFRChwYW4xLHBhbjIpIFwKKygoICEocGFuMSkgfHwgIShwYW4yKSB8fCBcCisgICAgICAgUFNUQVJUWShwYW4xKSA+IFBFTkRZKHBhbjIpIHx8IFBFTkRZKHBhbjEpIDwgUFNUQVJUWShwYW4yKSB8fFwKKyAgICAgICBQU1RBUlRYKHBhbjEpID4gUEVORFgocGFuMikgfHwgUEVORFgocGFuMSkgPCBQU1RBUlRYKHBhbjIpICkgXAorICAgICA/IEZBTFNFIDogVFJVRSkKKworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQ29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIHJlY3RhbmdsZSBvZiB0d28gb3ZlcmxhcHBpbmcgcmVjdGFuZ2xlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ09NUFVURV9JTlRFUlNFQ1RJT04ocGFuMSxwYW4yLGl4MSxpeDIsaXkxLGl5MilcCisgICBpeDEgPSAoUFNUQVJUWChwYW4xKSA8IFBTVEFSVFgocGFuMikpID8gUFNUQVJUWChwYW4yKSA6IFBTVEFSVFgocGFuMSk7XAorICAgaXgyID0gKFBFTkRYKHBhbjEpICAgPCBQRU5EWChwYW4yKSkgICA/IFBFTkRYKHBhbjEpICAgOiBQRU5EWChwYW4yKTtcCisgICBpeTEgPSAoUFNUQVJUWShwYW4xKSA8IFBTVEFSVFkocGFuMikpID8gUFNUQVJUWShwYW4yKSA6IFBTVEFSVFkocGFuMSk7XAorICAgaXkyID0gKFBFTkRZKHBhbjEpICAgPCBQRU5EWShwYW4yKSkgICA/IFBFTkRZKHBhbjEpICAgOiBQRU5EWShwYW4yKTtcCisgICBhc3NlcnQoKGl4MTw9aXgyKSAmJiAoaXkxPD1peTIpKTtcCisKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVdhbGsgdGhyb3VnaCB0aGUgcGFuZWwgc3RhY2sgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGFuZAorICAgICAgICBjaGVjayBmb3IgaW50ZXJzZWN0aW9uczsgb3ZlcmxhcHBpbmcgcGFuZWxzIGFyZSAidG91Y2hlZCIsIHNvIHRoZXkKKyAgICAgICAgYXJlIGluY3JlbWVudGFsbHkgb3ZlcndyaXRpbmcgY2VsbHMgdGhhdCBzaG91bGQgYmUgaGlkZGVuLgorICAgICAgICBJZiB0aGUgInRvdWNoIiBmbGFnIGlzIHNldCwgdGhlIHBhbmVsIGdldHMgdG91Y2hlZCBiZWZvcmUgaXQgaXMKKyAgICAgICAgdXBkYXRlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBBTkVMX1VQREFURShwYW4scGFuc3RhcnQpXAoreyAgUEFORUwqIHBhbjIgPSAoKHBhbnN0YXJ0KSA/IChwYW5zdGFydCkgOiBfbmNfYm90dG9tX3BhbmVsKTtcCisgICB3aGlsZShwYW4yKSB7XAorICAgICAgaWYgKChwYW4yICE9IHBhbikgJiYgUEFORUxTX09WRVJMQVBQRUQocGFuLHBhbjIpKSB7XAorICAgICAgICBpbnQgeSxpeDEsaXgyLGl5MSxpeTI7XAorICAgICAgICBDT01QVVRFX0lOVEVSU0VDVElPTihwYW4scGFuMixpeDEsaXgyLGl5MSxpeTIpO1wKKwlmb3IoeSA9IGl5MTsgeSA8PSBpeTI7IHkrKykge1wKKwkgIGlmIChpc19saW5ldG91Y2hlZChwYW4tPndpbix5IC0gUFNUQVJUWShwYW4pKSkge1wKKyAgICAgICAgICAgIHN0cnVjdCBsZGF0KiBsaW5lID0gJihwYW4yLT53aW4tPl9saW5lW3kgLSBQU1RBUlRZKHBhbjIpXSk7XAorICAgICAgICAgICAgQ0hBTkdFRF9SQU5HRShsaW5lLGl4MS1QU1RBUlRYKHBhbjIpLGl4Mi1QU1RBUlRYKHBhbjIpKTtcCisgICAgICAgICAgfVwKKwl9XAorICAgICAgfVwKKyAgICAgIHBhbjIgPSBwYW4yLT5hYm92ZTtcCisgICB9XAorfQorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUmVtb3ZlIHBhbmVsIGZyb20gc3RhY2suCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQQU5FTF9VTkxJTksocGFuLGVycikgXAoreyAgZXJyID0gRVJSO1wKKyAgIGlmIChwYW4pIHtcCisgICAgIGlmIChJU19MSU5LRUQocGFuKSkge1wKKyAgICAgICBpZiAoKHBhbiktPmJlbG93KVwKKyAgICAgICAgIChwYW4pLT5iZWxvdy0+YWJvdmUgPSAocGFuKS0+YWJvdmU7XAorICAgICAgIGlmICgocGFuKS0+YWJvdmUpXAorICAgICAgICAgKHBhbiktPmFib3ZlLT5iZWxvdyA9IChwYW4pLT5iZWxvdztcCisgICAgICAgaWYgKChwYW4pID09IF9uY19ib3R0b21fcGFuZWwpIFwKKyAgICAgICAgIF9uY19ib3R0b21fcGFuZWwgPSAocGFuKS0+YWJvdmU7XAorICAgICAgIGlmICgocGFuKSA9PSBfbmNfdG9wX3BhbmVsKSBcCisgICAgICAgICBfbmNfdG9wX3BhbmVsID0gKHBhbiktPmJlbG93O1wKKyAgICAgICBlcnIgPSBPSztcCisgICAgIH1cCisgICAgIChwYW4pLT5hYm92ZSA9IChwYW4pLT5iZWxvdyA9IChQQU5FTCopMDtcCisgICB9XAorfQorCisjZGVmaW5lIEhJREVfUEFORUwocGFuLGVycixlcnJfaWZfdW5saW5rZWQpXAorICBpZiAoSVNfTElOS0VEKHBhbikpIHtcCisgICAgVG91Y2hwYW4ocGFuKTtcCisgICAgUEFORUxfVVBEQVRFKHBhbiwoUEFORUwqKTApO1wKKyAgICBQQU5FTF9VTkxJTksocGFuLGVycik7XAorICB9IFwKKyAgZWxzZSB7XAorICAgICAgZXJyID0gZXJyX2lmX3VubGlua2VkO1wKKyAgfQorCisjZW5kaWYgLyogTkNVUlNFU19QQU5FTF9QUklWX0ggKi8KZGlmZiAtLWdpdCBhL3Byb2dzL01LdGVybXNvcnQuc2ggYi9wcm9ncy9NS3Rlcm1zb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyNDdmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncy9NS3Rlcm1zb3J0LnNoCkBAIC0wLDAgKzEsMTY0IEBACisjIS9iaW4vc2gKKyMgJElkOiBNS3Rlcm1zb3J0LnNoLHYgMS4xMCAyMDA4LzA3LzEyIDIwOjIyOjU0IHRvbSBFeHAgJAorIworIyBNS3Rlcm1zb3J0LnNoIC0tIGdlbmVyYXRlIGluZGlyZWN0aW9uIHZlY3RvcnMgZm9yIHRoZSB2YXJpb3VzIHNvcnQgbWV0aG9kcworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGUgb3V0cHV0IG9mIHRoaXMgc2NyaXB0IGlzIEMgc291cmNlIGZvciBuaW5lIGFycmF5cyB0aGF0IGxpc3QgdGhyZWUgc29ydAorIyBvcmRlcnMgZm9yIGVhY2ggb2YgdGhlIHRocmVlIGRpZmZlcmVudCBjbGFzc2VzIG9mIHRlcm1pbmZvIGNhcGFiaWxpdGllcy4KKyMKKyMga2VlcCB0aGUgb3JkZXIgaW5kZXBlbmRlbnQgb2YgbG9jYWxlOgoraWYgdGVzdCAiJHtMQU5HVUFHRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQU5HVUFHRT1DOyAgICBleHBvcnQgTEFOR1VBR0U7ICAgIGZpCitpZiB0ZXN0ICIke0xBTkcrc2V0fSIgICAgICAgID0gc2V0OyB0aGVuIExBTkc9QzsgICAgICAgIGV4cG9ydCBMQU5HOyAgICAgICAgZmkKK2lmIHRlc3QgIiR7TENfQUxMK3NldH0iICAgICAgPSBzZXQ7IHRoZW4gTENfQUxMPUM7ICAgICAgZXhwb3J0IExDX0FMTDsgICAgICBmaQoraWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCitpZiB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAgZmkKK2lmIHRlc3QgIiR7TENfQ09MTEFURStzZXR9IiAgPSBzZXQ7IHRoZW4gTENfQ09MTEFURT1DOyAgZXhwb3J0IExDX0NPTExBVEU7ICBmaQorIworQVdLPSR7MS1hd2t9CitEQVRBPSR7Mi0uLi9pbmNsdWRlL0NhcHN9CisKK2RhdGE9ZGF0YSQkCit0cmFwICdybSAtZiAkZGF0YScgMSAyIDUgMTUKK3NlZCAtZSAncy9bCV1bCV0qLwkvZycgPCAkREFUQSA+JGRhdGEKK0RBVEE9JGRhdGEKKworZWNobyAiLyoiOworZWNobyAiICogdGVybXNvcnQuYyAtLS0gc29ydCBvcmRlciBhcnJheXMgZm9yIHVzZSBieSBpbmZvY21wLiI7CitlY2hvICIgKiI7CitlY2hvICIgKiBOb3RlOiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nIE1LdGVybXNvcnQuc2gsIGRvIG5vdCBlZGl0IGJ5IGhhbmQuIjsKK2VjaG8gIiAqLyI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBQcmVkSWR4IGJvb2xfdGVybWluZm9fc29ydFtdID0geyI7CiskQVdLIDwkREFUQSAnCitCRUdJTiAgICAgICAgICAge2kgPSAwO30KKy9eIy8gICAgICAgICAgICB7bmV4dDt9CiskMyA9PSAiYm9vbCIgICAge3ByaW50ZigiJXNcdCVkXG4iLCAkMiwgaSsrKTt9CisnIHwgc29ydCB8ICRBV0sgJ3twcmludCAiXHQiLCAkMiwgIixcdC8qICIsICQxLCAiICovIjt9JzsKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBQcmVkSWR4IG51bV90ZXJtaW5mb19zb3J0W10gPSB7IjsKKyRBV0sgPCREQVRBICcKK0JFR0lOICAgICAgICAgICB7aSA9IDA7fQorL14jLyAgICAgICAgICAgIHtuZXh0O30KKyQzID09ICJudW0iICAgICB7cHJpbnRmKCIlc1x0JWRcbiIsICQyLCBpKyspO30KKycgfCBzb3J0IHwgJEFXSyAne3ByaW50ICJcdCIsICQyLCAiLFx0LyogIiwgJDEsICIgKi8iO30nOworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IFByZWRJZHggc3RyX3Rlcm1pbmZvX3NvcnRbXSA9IHsiOworJEFXSyA8JERBVEEgJworQkVHSU4gICAgICAgICAgIHtpID0gMDt9CisvXiMvICAgICAgICAgICAge25leHQ7fQorJDMgPT0gInN0ciIgICAgIHtwcmludGYoIiVzXHQlZFxuIiwgJDIsIGkrKyk7fQorJyB8IHNvcnQgfCAkQVdLICd7cHJpbnQgIlx0IiwgJDIsICIsXHQvKiAiLCAkMSwgIiAqLyI7fSc7CitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgUHJlZElkeCBib29sX3ZhcmlhYmxlX3NvcnRbXSA9IHsiOworJEFXSyA8JERBVEEgJworQkVHSU4gICAgICAgICAgIHtpID0gMDt9CisvXiMvICAgICAgICAgICAge25leHQ7fQorJDMgPT0gImJvb2wiICAgIHtwcmludGYoIiVzXHQlZFxuIiwgJDEsIGkrKyk7fQorJyB8IHNvcnQgfCAkQVdLICd7cHJpbnQgIlx0IiwgJDIsICIsXHQvKiAiLCAkMSwgIiAqLyI7fSc7CitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgUHJlZElkeCBudW1fdmFyaWFibGVfc29ydFtdID0geyI7CiskQVdLIDwkREFUQSAnCitCRUdJTiAgICAgICAgICAge2kgPSAwO30KKy9eIy8gICAgICAgICAgICB7bmV4dDt9CiskMyA9PSAibnVtIiAgICAge3ByaW50ZigiJXNcdCVkXG4iLCAkMSwgaSsrKTt9CisnIHwgc29ydCB8ICRBV0sgJ3twcmludCAiXHQiLCAkMiwgIixcdC8qICIsICQxLCAiICovIjt9JzsKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBQcmVkSWR4IHN0cl92YXJpYWJsZV9zb3J0W10gPSB7IjsKKyRBV0sgPCREQVRBICcKK0JFR0lOICAgICAgICAgICB7aSA9IDA7fQorL14jLyAgICAgICAgICAgIHtuZXh0O30KKyQzID09ICJzdHIiICAgICB7cHJpbnRmKCIlc1x0JWRcbiIsICQxLCBpKyspO30KKycgfCBzb3J0IHwgJEFXSyAne3ByaW50ICJcdCIsICQyLCAiLFx0LyogIiwgJDEsICIgKi8iO30nOworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IFByZWRJZHggYm9vbF90ZXJtY2FwX3NvcnRbXSA9IHsiOworJEFXSyA8JERBVEEgJworQkVHSU4gICAgICAgICAgIHtpID0gMDt9CisvXiMvICAgICAgICAgICAge25leHQ7fQorJDMgPT0gImJvb2wiICAgIHtwcmludGYoIiVzXHQlZFxuIiwgJDQsIGkrKyk7fQorJyB8IHNvcnQgfCAkQVdLICd7cHJpbnQgIlx0IiwgJDIsICIsXHQvKiAiLCAkMSwgIiAqLyI7fSc7CitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgUHJlZElkeCBudW1fdGVybWNhcF9zb3J0W10gPSB7IjsKKyRBV0sgPCREQVRBICcKK0JFR0lOICAgICAgICAgICB7aSA9IDA7fQorL14jLyAgICAgICAgICAgIHtuZXh0O30KKyQzID09ICJudW0iICAgICB7cHJpbnRmKCIlc1x0JWRcbiIsICQ0LCBpKyspO30KKycgfCBzb3J0IHwgJEFXSyAne3ByaW50ICJcdCIsICQyLCAiLFx0LyogIiwgJDEsICIgKi8iO30nOworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IFByZWRJZHggc3RyX3Rlcm1jYXBfc29ydFtdID0geyI7CiskQVdLIDwkREFUQSAnCitCRUdJTiAgICAgICAgICAge2kgPSAwO30KKy9eIy8gICAgICAgICAgICB7bmV4dDt9CiskMyA9PSAic3RyIiAgICAge3ByaW50ZigiJXNcdCVkXG4iLCAkNCwgaSsrKTt9CisnIHwgc29ydCB8ICRBV0sgJ3twcmludCAiXHQiLCAkMiwgIixcdC8qICIsICQxLCAiICovIjt9JzsKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBib29sIGJvb2xfZnJvbV90ZXJtY2FwW10gPSB7IjsKKyRBV0sgPCREQVRBICcKKyQzID09ICJib29sIiAmJiBzdWJzdHIoJDcsIDEsIDEpID09ICItIiAgICAgICB7cHJpbnQgIlx0RkFMU0UsXHQvKiAiLCAkMiwgIiAqLyI7fQorJDMgPT0gImJvb2wiICYmIHN1YnN0cigkNywgMSwgMSkgPT0gIlkiICAgICAgIHtwcmludCAiXHRUUlVFLFx0LyogIiwgJDIsICIgKi8iO30KKycKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBib29sIG51bV9mcm9tX3Rlcm1jYXBbXSA9IHsiOworJEFXSyA8JERBVEEgJworJDMgPT0gIm51bSIgJiYgc3Vic3RyKCQ3LCAxLCAxKSA9PSAiLSIgICAgICAgIHtwcmludCAiXHRGQUxTRSxcdC8qICIsICQyLCAiICovIjt9CiskMyA9PSAibnVtIiAmJiBzdWJzdHIoJDcsIDEsIDEpID09ICJZIiAgICAgICAge3ByaW50ICJcdFRSVUUsXHQvKiAiLCAkMiwgIiAqLyI7fQorJworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IGJvb2wgc3RyX2Zyb21fdGVybWNhcFtdID0geyI7CiskQVdLIDwkREFUQSAnCiskMyA9PSAic3RyIiAmJiBzdWJzdHIoJDcsIDEsIDEpID09ICItIiAgICAgICAge3ByaW50ICJcdEZBTFNFLFx0LyogIiwgJDIsICIgKi8iO30KKyQzID09ICJzdHIiICYmIHN1YnN0cigkNywgMSwgMSkgPT0gIlkiICAgICAgICB7cHJpbnQgIlx0VFJVRSxcdC8qICIsICQyLCAiICovIjt9CisnCitlY2hvICJ9OyI7CitlY2hvICIiOworCitybSAtZiAkZGF0YQpkaWZmIC0tZ2l0IGEvcHJvZ3MvTWFrZWZpbGUuaW4gYi9wcm9ncy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODZmZDViCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOTcgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuNzkgMjAwOC8wOS8wNyAxMzo1ODo1NSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtb24KKyMKKyMgTWFrZWZpbGUgZm9yIG5jdXJzZXMgc291cmNlIGNvZGUuCisjCisjIFRoaXMgbWFrZXMgdGhlIG5jdXJzZXMgdXRpbGl0eSBwcm9ncmFtcy4KKyMKKyMgVGhlIHZhcmlhYmxlICdzcmNkaXInIHJlZmVycyB0byB0aGUgc291cmNlLWRpc3RyaWJ1dGlvbiwgYW5kIGNhbiBiZSBzZXQgd2l0aAorIyB0aGUgY29uZmlndXJlIHNjcmlwdCBieSAiLS1zcmNkaXI9RElSIi4KKyMKKyMgVGhlIHJ1bGVzIGFyZSBvcmdhbml6ZWQgdG8gcHJvZHVjZSB0aGUgbGlicmFyaWVzIGZvciB0aGUgY29uZmlndXJlZCBtb2RlbHMsCisjIGFuZCB0aGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29uZmlndXJlZCBkZWZhdWx0IG1vZGVsLgorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK0NGX01GTEFHUyAJPSBAY2ZfY3ZfbWFrZWZsYWdzQAorQFNFVF9NQUtFQAorCit4CQk9IEBFWEVFWFRACitvCQk9IC5AT0JKRVhUQAorCitNT0RFTAkJPSAuLi9AREZUX09CSl9TVUJESVJACitERVNURElSCQk9IEBERVNURElSQAordG9wX3NyY2Rpcgk9IEB0b3Bfc3JjZGlyQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorYmluZGlyCQk9IEBiaW5kaXJACitsaWJkaXIJCT0gQGxpYmRpckAKK2luY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAKK2RhdGFkaXIJCT0gQGRhdGFkaXJACisKK0xJQlRPT0wJCT0gQExJQlRPT0xACitMSUJUT09MX0NMRUFOCT0gQExJQl9DTEVBTkAKK0xJQlRPT0xfQ09NUElMRQk9IEBMSUJfQ09NUElMRUAKK0xJQlRPT0xfTElOSwk9IEBMSUJfTElOS0AKK0xJQlRPT0xfSU5TVEFMTAk9IEBMSUJfSU5TVEFMTEAKK0xJQlRPT0xfVU5JTlNUQUxMID0gQExJQl9VTklOU1RBTExACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX1BST0cJPSBASU5TVEFMTF9QUk9HUkFNQAordHJhbnNmb3JtCT0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACisKK0FXSwkJPSBAQVdLQAorTE5fUwkJPSBATE5fU0AKKworQ0MJCT0gQENDQAorQ1BQCQk9IEBDUFBACitDRkxBR1MJCT0gQENGTEFHU0AKKworSU5DRElSCQk9ICQodG9wX3NyY2RpcikvaW5jbHVkZQorQ1BQRkxBR1MJPSAtSS4uL3Byb2dzIC1JJChzcmNkaXIpIC1ESEFWRV9DT05GSUdfSCBAQ1BQRkxBR1NACisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0NGTEFHU19MSUJUT09MCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX05PUk1BTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19ERUJVRwk9ICQoQ0NGTEFHUykgQENDX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitSRUxfVkVSU0lPTgk9IEBjZl9jdl9yZWxfdmVyc2lvbkAKK0FCSV9WRVJTSU9OCT0gQGNmX2N2X2FiaV92ZXJzaW9uQAorTE9DQUxfTElCRElSCT0gQHRvcF9idWlsZGRpckAvbGliCisKK0xECQk9IEBMREAKK0xJTksJCT0gQExJTktfUFJPR1NAICQoTElCVE9PTF9MSU5LKQorTERGTEFHUwkJPSBARVhUUkFfTERGTEFHU0AgQExERkxBR1NACisKK0xERkxBR1NfTElCVE9PTAk9ICQoTERGTEFHUykgJChDRkxBR1NfTElCVE9PTCkKK0xERkxBR1NfTk9STUFMCT0gJChMREZMQUdTKSAkKENGTEFHU19OT1JNQUwpCitMREZMQUdTX0RFQlVHCT0gJChMREZMQUdTKSAkKENGTEFHU19ERUJVRykKK0xERkxBR1NfUFJPRklMRQk9ICQoTERGTEFHUykgJChDRkxBR1NfUFJPRklMRSkgCitMREZMQUdTX1NIQVJFRAk9ICQoTERGTEFHUykgJChDRkxBR1NfU0hBUkVEKSBATERfU0hBUkVEX09QVFNACisKK0xERkxBR1NfREVGQVVMVAk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK0xJQlNfVElDCT0gQExERkxBR1NfU1RBVElDQCBAVElDU19BUkdTQCBAVElORk9fQVJHU0AgQExERkxBR1NfU0hBUkVEQCBATERfTU9ERUxAIEBMSUJTQAorTERGTEFHU19USUMJPSAkKExERkxBR1NfQERGVF9VUFJfTU9ERUxAKSAkKExJQlNfVElDKQorCitMSUJTX1RJTkZPCT0gQExERkxBR1NfU1RBVElDQCBAVElORk9fQVJHU0AgQExERkxBR1NfU0hBUkVEQCBATERfTU9ERUxAIEBMSUJTQAorTERGTEFHU19USU5GTwk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApICQoTElCU19USU5GTykKKworTElOVAkJPSBATElOVEAKK0xJTlRfT1BUUwk9IEBMSU5UX09QVFNACitMSU5UX0xJQlMJPSAtbG5jdXJzZXMgQExJQlNACisKK0FVVE9fU1JDID0gXAorCXRlcm1zb3J0LmMgXAorCXRyYW5zZm9ybS5oCisKKyMgdGljIHJlbGllcyBvbiBkaXJlY3QgYWNjZXNzIHRvIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZQorR0VUX1BST0dTID0gaW5mb2NtcCR4IGNsZWFyJHggdHB1dCR4IHRzZXQkeCB0b2UkeAorUFVUX1BST0dTID0gQE1BS0VfVEVSTUlORk9AIHRpYyR4CitQUk9HUyA9ICQoUFVUX1BST0dTKSAkKEdFVF9QUk9HUykKKworIyBEZWZhdWx0IGxpYnJhcnksIGZvciBsaW5raW5nIGFwcGxpY2F0aW9ucworREVQU19DVVJTRVMgPSAuLi9saWIvQExJQl9QUkVGSVhAbmN1cnNlc0BERlRfREVQX1NVRkZJWEAKKworSEVBREVSX0RFUFMJPSBcCisJLi4vaW5jbHVkZS9jdXJzZXMuaCBcCisJJChJTkNESVIpL3Rlcm1fZW50cnkuaCBcCisJJChJTkNESVIpL3RpYy5oIFwKKwkkKElOQ0RJUikvbmNfYWxsb2MuaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWxsOgkJJChBVVRPX1NSQykgJChQUk9HUykKKworc291cmNlczoJJChBVVRPX1NSQykKKworaW5zdGFsbDogCSQoQVVUT19TUkMpIGluc3RhbGwucHJvZ3MKK3VuaW5zdGFsbDogdW5pbnN0YWxsLnByb2dzCisKKyMgdGhpcyBsaW5lIHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3VyZS1zY3JpcHQKK2xpYnMgXAoraW5zdGFsbC5saWJzIFwKK3VuaW5zdGFsbC5saWJzOgorCitUUkFOU0ZPUk0gPSBzZWQgJ3MvJHgkJC8vJ3xzZWQgJyQodHJhbnNmb3JtKSd8c2VkICdzLyQkLyR4LycKKworIyB0cmFuc2Zvcm1lZCBuYW1lcyBmb3IgaW5zdGFsbGluZyBmaWxlcworYWN0dWFsX2NhcHRvaW5mbyA9IGBlY2hvIGNhcHRvaW5mbyR4fCAkKFRSQU5TRk9STSlgCithY3R1YWxfY2xlYXIgICAgID0gYGVjaG8gY2xlYXIkeHwgICAgICQoVFJBTlNGT1JNKWAKK2FjdHVhbF9pbmZvY21wICAgPSBgZWNobyBpbmZvY21wJHh8ICAgJChUUkFOU0ZPUk0pYAorYWN0dWFsX2luZm90b2NhcCA9IGBlY2hvIGluZm90b2NhcCR4fCAkKFRSQU5TRk9STSlgCithY3R1YWxfaW5pdCAgICAgID0gYGVjaG8gaW5pdCR4fCAgICAgICQoVFJBTlNGT1JNKWAKK2FjdHVhbF9yZXNldCAgICAgPSBgZWNobyByZXNldCR4fCAgICAgJChUUkFOU0ZPUk0pYAorYWN0dWFsX3RpYyAgICAgICA9IGBlY2hvIHRpYyR4fCAgICAgICAkKFRSQU5TRk9STSlgCithY3R1YWxfdG9lICAgICAgID0gYGVjaG8gdG9lJHh8ICAgICAgICQoVFJBTlNGT1JNKWAKK2FjdHVhbF90cHV0ICAgICAgPSBgZWNobyB0cHV0JHh8ICAgICAgJChUUkFOU0ZPUk0pYAorYWN0dWFsX3RzZXQgICAgICA9IGBlY2hvIHRzZXQkeHwgICAgICAkKFRSQU5TRk9STSlgCisKKyMgdHJhbnNmb3JtZWQgbmFtZXMgZm9yIGNvbXBhcmluZyBhdCBydW50aW1lCitkZWZpbmVfY2FwdG9pbmZvID0gYGVjaG8gY2FwdG9pbmZvfCAgICQoVFJBTlNGT1JNKWAKK2RlZmluZV9pbmZvdG9jYXAgPSBgZWNobyBpbmZvdG9jYXB8ICAgJChUUkFOU0ZPUk0pYAorZGVmaW5lX2luaXQgICAgICA9IGBlY2hvIGluaXR8ICAgICAgICAkKFRSQU5TRk9STSlgCitkZWZpbmVfcmVzZXQgICAgID0gYGVjaG8gcmVzZXR8ICAgICAgICQoVFJBTlNGT1JNKWAKKwordHJhbnNmb3JtLmggOgorCWVjaG8gIiNkZWZpbmUgUFJPR19DQVBUT0lORk8gXCIkKGRlZmluZV9jYXB0b2luZm8pXCIiID4kQAorCWVjaG8gIiNkZWZpbmUgUFJPR19JTkZPVE9DQVAgXCIkKGRlZmluZV9pbmZvdG9jYXApXCIiID4+JEAKKwllY2hvICIjZGVmaW5lIFBST0dfUkVTRVQgICAgIFwiJChkZWZpbmVfcmVzZXQpXCIiICAgICA+PiRACisJZWNobyAiI2RlZmluZSBQUk9HX0lOSVQgICAgICBcIiQoZGVmaW5lX2luaXQpXCIiICAgICAgPj4kQAorCitpbnN0YWxsLnByb2dzOiAkKEFVVE9fU1JDKSAkKFBST0dTKSAkKERFU1RESVIpJChiaW5kaXIpCitATUFLRV9URVJNSU5GT0AJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTF9QUk9HKSB0aWMkeCAgICAgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF90aWMpCitATUFLRV9URVJNSU5GT0AJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTF9QUk9HKSB0b2UkeCAgICAgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF90b2UpCitATUFLRV9URVJNSU5GT0AJQGVjaG8gImxpbmtpbmcgJChhY3R1YWxfaW5mb3RvY2FwKSB0byAkKGFjdHVhbF90aWMpIgorQE1BS0VfVEVSTUlORk9ACS1Acm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9pbmZvdG9jYXApCitATUFLRV9URVJNSU5GT0AJKGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgJChMTl9TKSAkKGFjdHVhbF90aWMpICQoYWN0dWFsX2luZm90b2NhcCkpCitATUFLRV9URVJNSU5GT0AJQGVjaG8gImxpbmtpbmcgJChhY3R1YWxfY2FwdG9pbmZvKSB0byAkKGFjdHVhbF90aWMpIgorQE1BS0VfVEVSTUlORk9ACS1Acm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9jYXB0b2luZm8pCitATUFLRV9URVJNSU5GT0AJKGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgJChMTl9TKSAkKGFjdHVhbF90aWMpICQoYWN0dWFsX2NhcHRvaW5mbykpCisJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTF9QUk9HKSBpbmZvY21wJHggJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9pbmZvY21wKQorCSQoTElCVE9PTF9JTlNUQUxMKSAkKElOU1RBTExfUFJPRykgY2xlYXIkeCAgICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfY2xlYXIpCisJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTF9QUk9HKSB0cHV0JHggICAgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF90cHV0KQorCSQoTElCVE9PTF9JTlNUQUxMKSAkKElOU1RBTExfUFJPRykgdHNldCR4ICAgICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfdHNldCkKKwlAZWNobyAibGlua2luZyAkKGFjdHVhbF9yZXNldCkgdG8gJChhY3R1YWxfdHNldCkiCisJLUBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3Jlc2V0KQorCShjZCAkKERFU1RESVIpJChiaW5kaXIpICYmICQoTE5fUykgJChhY3R1YWxfdHNldCkgJChhY3R1YWxfcmVzZXQpKQorCit1bmluc3RhbGwucHJvZ3M6CitATUFLRV9URVJNSU5GT0AJLUAkKExJQlRPT0xfQ0xFQU4pIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfdGljKQorQE1BS0VfVEVSTUlORk9ACS1AJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3RvZSkKK0BNQUtFX1RFUk1JTkZPQAktQHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfY2FwdG9pbmZvKQorQE1BS0VfVEVSTUlORk9ACS1Acm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9pbmZvdG9jYXApCisJLUAkKExJQlRPT0xfQ0xFQU4pIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfaW5mb2NtcCkKKwktQCQoTElCVE9PTF9DTEVBTikgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9jbGVhcikKKwktQCQoTElCVE9PTF9DTEVBTikgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF90cHV0KQorCS1AJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3RzZXQpCisJLUBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3Jlc2V0KQorCiskKERFU1RESVIpJChiaW5kaXIpIDoKKwlzaCAkKHNyY2RpcikvLi4vbWtkaXJzLnNoICRACisKKyMKKyMgVXRpbGl0aWVzIG5vcm1hbGx5IGJ1aWx0IGJ5IG1ha2UgYWxsIHN0YXJ0IGhlcmUKKyMKKworREVQU19USUMgPSBcCisJJChNT0RFTCkvdGljJG8gXAorCSQoTU9ERUwpL2R1bXBfZW50cnkkbworCit0aWMkeDogJChERVBTX1RJQykgJChERVBTX0NVUlNFUykgdHJhbnNmb3JtLmgKKwlARUNIT19MSU5LQCAkKExJTkspICQoREVQU19USUMpICQoTERGTEFHU19USUMpIC1vICRACisKK0RFUFNfVE9FID0gXAorCSQoTU9ERUwpL3RvZSRvCisKK3RvZSR4OiAkKERFUFNfVE9FKSAkKERFUFNfQ1VSU0VTKQorCUBFQ0hPX0xJTktAICQoTElOSykgJChERVBTX1RPRSkgJChMREZMQUdTX1RJQykgLW8gJEAKKworREVQU19DTEVBUiA9IFwKKwkkKE1PREVMKS9jbGVhciRvCisKK2NsZWFyJHg6ICQoREVQU19DTEVBUikgJChERVBTX0NVUlNFUykKKwlARUNIT19MSU5LQCAkKExJTkspICQoREVQU19DTEVBUikgJChMREZMQUdTX1RJTkZPKSAtbyAkQAorCitERVBTX1RQVVQgPSBcCisJJChNT0RFTCkvdHB1dCRvCisKK3RwdXQkeDogJChERVBTX1RQVVQpICQoREVQU19DVVJTRVMpIHRyYW5zZm9ybS5oCisJQEVDSE9fTElOS0AgJChMSU5LKSAkKERFUFNfVFBVVCkgJChMREZMQUdTX1RJTkZPKSAtbyAkQAorCitERVBTX0lORk9DTVAgPSBcCisJJChNT0RFTCkvaW5mb2NtcCRvIFwKKwkkKE1PREVMKS9kdW1wX2VudHJ5JG8KKworaW5mb2NtcCR4OiAkKERFUFNfSU5GT0NNUCkgJChERVBTX0NVUlNFUykKKwlARUNIT19MSU5LQCAkKExJTkspICQoREVQU19JTkZPQ01QKSAkKExERkxBR1NfVElDKSAtbyAkQAorCitERVBTX1RTRVQgPSBcCisJJChNT0RFTCkvdHNldCRvCisKK3RzZXQkeDogJChERVBTX1RTRVQpICQoREVQU19DVVJTRVMpIHRyYW5zZm9ybS5oCisJQEVDSE9fTElOS0AgJChMSU5LKSAkKERFUFNfVFNFVCkgJChMREZMQUdTX1RJTkZPKSAtbyAkQAorCit0ZXJtc29ydC5jOiAkKHNyY2RpcikvTUt0ZXJtc29ydC5zaAorCXNoICQoc3JjZGlyKS9NS3Rlcm1zb3J0LnNoICQoQVdLKSAkKHNyY2RpcikvLi4vaW5jbHVkZS9AVEVSTUlORk9fQ0FQU0AgPiRACisKKyMKKyMgVXRpbGl0eSBwcm9kdWN0aW9ucyBzdGFydCBoZXJlCisjCisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktc2ggLWMgImlmIHRlc3QgLW4gJyR4JyA7IHRoZW4gJChNQUtFKSBjbGVhbiB4PScnOyBmaSIKKwktcm0gLWYgJChBVVRPX1NSQykKKwktcm0gLWYgJChQUk9HUykKKwktcm0gLXJmIC5saWJzCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKKyMgVGhlc2UgcnVsZXMgYXJlIHVzZWQgdG8gYWxsb3cgIm1ha2UgLW4iIHRvIHdvcmsgb24gYSBjbGVhbiBkaXJlY3RvcnktdHJlZQorLi4vaW5jbHVkZS9oYXNoc2l6ZS5oIFwKKy4uL2luY2x1ZGUvcGFyYW1ldHJpemVkLmggXAorLi4vaW5jbHVkZS90ZXJtLmggOgorCWNkIC4uL2luY2x1ZGU7ICQoTUFLRSkgJChDRl9NRkxBR1MpCiskKERFUFNfQ1VSU0VTKSA6CisJY2QgLi4vbmN1cnNlczsgJChNQUtFKSAkKENGX01GTEFHUykKKworbGludDoKK0BNQUtFX1RFUk1JTkZPQAkkKExJTlQpICQoTElOVF9PUFRTKSAkKENQUEZMQUdTKSAkKHNyY2RpcikvdGljLmMgICAgICQoc3JjZGlyKS9kdW1wX2VudHJ5LmMgJChMSU5UX0xJQlMpCitATUFLRV9URVJNSU5GT0AJJChMSU5UKSAkKExJTlRfT1BUUykgJChDUFBGTEFHUykgJChzcmNkaXIpL3RvZS5jICAgICAkKHNyY2RpcikvZHVtcF9lbnRyeS5jICQoTElOVF9MSUJTKQorCSQoTElOVCkgJChMSU5UX09QVFMpICQoQ1BQRkxBR1MpICQoc3JjZGlyKS9jbGVhci5jICAgICAgICAgICAgICAgICAgICAgICAgICAkKExJTlRfTElCUykKKwkkKExJTlQpICQoTElOVF9PUFRTKSAkKENQUEZMQUdTKSAkKHNyY2RpcikvaW5mb2NtcC5jICQoc3JjZGlyKS9kdW1wX2VudHJ5LmMgJChMSU5UX0xJQlMpCisJJChMSU5UKSAkKExJTlRfT1BUUykgJChDUFBGTEFHUykgJChzcmNkaXIpL3RwdXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICQoTElOVF9MSUJTKQorCSQoTElOVCkgJChMSU5UX09QVFMpICQoQ1BQRkxBR1MpICQoc3JjZGlyKS90c2V0LmMgICAgJChzcmNkaXIpL2R1bXBfZW50cnkuYyAkKExJTlRfTElCUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvcHJvZ3MvY2FwY29udmVydCBiL3Byb2dzL2NhcGNvbnZlcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODE5OWJiZgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dzL2NhcGNvbnZlcnQKQEAgLTAsMCArMSwyNTYgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IGNhcGNvbnZlcnQsdiAxLjQgMjAwNi8wNC8yMiAyMTo0NjoxNyB0b20gRXhwICQKKyMKKyMgY2FwY29udmVydCAtLSBhdXRvbWF0ZWQgY29udmVyc2lvbiBmcm9tIHRlcm1jYXAgdG8gdGVybWluZm8KKyMKKworZWNobyAiVGhpcyBzY3JpcHQgdHJpZXMgdG8gYXV0b21hdGljYWxseSBzZXQgeW91IHVwIHNvIHRoYXQgeW91ciBhcHBsaWNhdGlvbnMiCitlY2hvICJ0aGF0IG5vdyB1c2UgdGVybWNhcCBjYW4gdXNlIHRlcm1pbmZvIGFuZCB0aGUgbmN1cnNlcyBsaWJyYXJ5LiIKK2VjaG8gIiIKKworIyBOb3RlLCBleGNlcHQgZm9yIHRlbGxpbmcgaWYgd2UncmUgcnVubmluZyB1bmRlciB4dGVybSB3ZSBkb24ndCB1c2UgVEVSTSBhdAorIyBhbGwuICBUaGlzIGlzIGJlY2F1c2UgQlNEIHVzZXJzIG5vdCBpbmZyZXF1ZW50bHkgaGF2ZSBtdWx0aXBsZSB0ZXJtdHlwZXMKKyMgc2VsZWN0ZWQgYnkgY29uZGl0aW9uYWxzIGluIHRzZXQgLS0gdW5sZXNzIHRoZXkncmUgeHRlcm0gdXNlcnMsIGluIHdoaWNoCisjIGNhc2UgdGhleSdyZSBvbiBhIHdvcmtzdGF0aW9uIGFuZCBwcm9iYWJseSBkb24ndC4KKworIyBDaGVjayB0byBtYWtlIHN1cmUgVEVSTUlORk8gaXMgbm90IGFscmVhZHkgZGVmaW5lZAoraWYgdGVzdCAtbiAiJFRFUk1JTkZPIgordGhlbgorCWVjaG8gIlRFUk1JTkZPIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB5b3VyIGVudmlyb25tZW50LiAgVGhpcyBtZWFucyIKKwllY2hvICJ5b3UgYWxyZWFkeSBoYXZlIGEgbG9jYWwgdGVybWluZm8gdHJlZSwgc28geW91IGRvIG5vdCBuZWVkIGFueSIKKwllY2hvICJjb252ZXJzaW9uLiIKKwlpZiB0ZXN0ICEgLWQgJFRFUk1JTkZPIDsgdGhlbgorCQllY2hvICJDYXV0aW9uOiBURVJNSU5GTyBkb2VzIG5vdCBwb2ludCB0byBhIGRpcmVjdG9yeSEiCisJZmkKKwlleGl0OworZmkKKworIyBDaGVjayB0byBzZWUgaWYgdGVybWluZm8gaXMgcHJlc2VudCBpbiBvbmUgb2YgdGhlIHN0YW5kYXJkIGxvY2F0aW9ucy4KK3Rlcm1pbmZvPW5vCitmb3IgcCBpbiAkVEVSTUlORk8gXAorCS91c3IvbGliL3Rlcm1pbmZvIFwKKwkvdXNyL3NoYXJlL2xpYi90ZXJtaW5mbyBcCisJL3Vzci9zaGFyZS90ZXJtaW5mbyBcCisJL3Vzci9sb2NhbC9saWIvdGVybWluZm8gXAorCS91c3IvbG9jYWwvc2hhcmUvdGVybWluZm8KK2RvCisJaWYgdGVzdCAtZCAkcCA7IHRoZW4KKwkJdGVybWluZm89eWVzCisJCWJyZWFrCisJZmkKK2RvbmUKKworaWYgdGVzdCAkdGVybWluZm8gPSB5ZXMKK3RoZW4KKwllY2hvICJZb3VyIHN5c3RlbSBhbHJlYWR5IGhhcyBhIHN5c3RlbS13aWRlIHRlcm1pbmZvIHRyZWUuIgorCWVjaG8gIiIKKwlpZiB0ZXN0IC16ICIkVEVSTUNBUCIKKwl0aGVuCisJCWVjaG8gIllvdSBoYXZlIG5vIFRFUk1DQVAgdmFyaWFibGUgc2V0LCBzbyB3ZSBhcmUgZG9uZS4iCisJCSMgQXNzdW1lcyB0aGUgdGVybWluZm8gbWFzdGVyIGNvdmVycyBhbGwgY2FubmVkIHRlcm1pbmFsIHR5cGVzCisJCWV4aXQ7CisJZmkKKwlpZiB0ZXN0ICIkVEVSTSIgPSAieHRlcm0iCisJdGhlbgorCQllY2hvICJZb3UgYXJlIHJ1bm5pbmcgeHRlcm0sIHdoaWNoIHVzdWFsbHkgc2V0cyBURVJNQ0FQIGl0c2VsZi4iCisJCWVjaG8gIldlIGNhbiBpZ25vcmUgdGhpcywgYmVjYXVzZSB0ZXJtaW5mbyBrbm93cyBhYm91dCB4dGVybS4iCisJCWVjaG8gIlNvIHlvdSB3aWxsIGp1c3QgdXNlIHRoZSBzeXN0ZW0td2lkZSB0ZXJtaW5mbyB0cmVlLiIKKwkJZXhpdDsKKwllbHNlCisJCWVjaG8gIldlIHdpbGwgaGF2ZSB0byBtYWtlIGEgbG9jYWwgb25lIGZvciB5b3UgYW55d2F5LCB0byBjYXB0dXJlIHRoZSBlZmZlY3QiCisJCWVjaG8gIm9mIHlvdXIgVEVSTUNBUCB2YXJpYWJsZS4iCisJZmkKK2Vsc2UKKwllY2hvICJObyBzeXN0ZW0td2lkZSB0ZXJtaW5mbyB0cmVlLiAgV2Ugd2lsbCBtYWtlIHlvdSBhIGxvY2FsIG9uZS4iCitmaQorZWNobyAiIjsKKworIyBDaGVjayBpZiB0ZXN0IC14IHdvcmtzIChpdCdzIG5vdCBwb3J0YWJsZSwgYnV0IHVzZWZ1bCkKK09QVD0iLXgiCitUTVA9dGVzdCQkOyB0b3VjaCAkVE1QICYmIGNobW9kIDc1NSAkVE1QCitpZiB0ZXN0ICRPUFQgJFRNUCA7IHRoZW4KKwljaG1vZCA2NDQgJFRNUAorCXRlc3QgJE9QVCAkVE1QICYmIE9QVD0iLWYiCitlbHNlCisJT1BUPSItZiIKK2ZpCitybSAtZiAkVE1QCisKKyMgRmlyc3Qgc3RlcCAtLSBnbyBmaW5kIHRpYworVElDPQorSUZTPSIke0lGUz0gCX0iOyBzYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKK2ZvciB4IGluICRQQVRIIC4KK2RvCisJaWYgdGVzdCAkT1BUICR4L3RpYworCXRoZW4gCisJCVRJQz0keC90aWMKKwkJYnJlYWsKKwlmaQorZG9uZQorSUZTPSIkYWNfc2F2ZV9pZnMiCisKK2lmIHRlc3QgLW4gIiRUSUMiCit0aGVuCisJZWNobyAiSSBzZWUgdGljIGF0ICRUSUMuIgorCWNhc2UgJFRJQyBpbiAjICh2aQorCS4vdGljKQorCQlpZiB0ZXN0ICRPUFQgLi4vbWlzYy9zaGxpYiA7IHRoZW4KKwkJCVRJQz0iLi4vbWlzYy9zaGxpYiAkVElDIgorCQlmaQorCQk7OworCWVzYWMKK2Vsc2UKKwllY2hvICJZb3UgZG8gbm90IGhhdmUgdGljIGluc3RhbGxlZCBhbnl3aGVyZSBJIGNhbiBzZWUsIHBsZWFzZSBmaXggdGhhdC4iCisJZXhpdDsKK2ZpCitlY2hvICIiOworCisjIFdlIGhhdmUgdGljLiAgRWl0aGVyIHRoZXJlJ3Mgbm8gc3lzdGVtIHRlcm1pbmZvIHRyZWUgb3IgdGhlcmUgaXMgb25lIGJ1dAorIyB0aGUgdXNlciBoYXMgYSBURVJNQ0FQIHZhcmlhYmxlIHRoYXQgbWF5IG1vZGlmeSBhIHN0b2NrIGRlc2NyaXB0aW9uLgorIworCisjIE1ha2UgdGhlIHVzZXIgYSB0ZXJtaW5mbyBkaXJlY3RvcnkKK2lmIHRlc3QgLWQgJEhPTUUvLnRlcm1pbmZvCit0aGVuCisJZWNobyAiSXQgYXBwZWFycyB5b3UgYWxyZWFkeSBoYXZlIGEgcHJpdmF0ZSB0ZXJtaW5mbyBkaXJlY3RvcnkiCisJZWNobyAiYXQgJEhPTUUvLnRlcm1pbmZvOyB0aGlzIHNlZW1zIG9kZCwgYmVjYXVzZSBURVJNSU5GTyIKKwllY2hvICJpcyBub3QgZGVmaW5lZC4gIEkgYW0gbm90IGdvaW5nIHRvIHNlY29uZC1ndWVzcyB0aGlzIC0tIGlmIHlvdSIgCisJZWNobyAicmVhbGx5IHdhbnQgbWUgdG8gdHJ5IGF1dG8tY29uZmlndXJpbmcgZm9yIHlvdSwgcmVtb3ZlIG9yIgorCWVjaG8gInJlbmFtZSAkSE9NRS90ZXJtaW5mbyBhbmQgcnVuIG1lIGFnYWluLiIKKwlleGl0OworZWxzZQorCWVjaG8gIkkgYW0gY3JlYXRpbmcgeW91ciBwcml2YXRlIHRlcm1pbmZvIGRpcmVjdG9yeSBhdCAkSE9NRS8udGVybWluZm8iCisJbWtkaXIgJEhPTUUvLnRlcm1pbmZvCisJIyBFbnN1cmUgdGhhdCB0aGF0J3Mgd2hlcmUgdGljJ3MgY29tcGlsYXRpb24gcmVzdWx0cy4KKwkjIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHdpdGggYSAxLjkuNyBvciBsYXRlciB0aWMuCisJVEVSTUlORk89IiRIT01FLy50ZXJtaW5mbyI7IGV4cG9ydCBURVJNSU5GTworZmkKK2VjaG8gIiI7CisKKyMgRmluZCBhIHRlcm1pbmZvIHNvdXJjZSB0byB3b3JrIGZyb20KK2lmIHRlc3QgLWYgLi4vbWlzYy90ZXJtaW5mby5zcmMKK3RoZW4KKwllY2hvICJJIHNlZSB0aGUgdGVybWluZm8gbWFzdGVyIHNvdXJjZSBpcyBoYW5keTsgSSB3aWxsIHVzZSB0aGF0LiIKKwltYXN0ZXI9Li4vbWlzYy90ZXJtaW5mby5zcmMKK2Vsc2UKKwkjIE9vb3BzLi4ubG9va3MgbGlrZSB3ZSdyZSBydW5uaW5nIGZyb20gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisJIyBwcm9ncyBkaXJlY3Rvcnkgb2YgYW4gbmN1cnNlcyBzb3VyY2UgdHJlZS4KKwltYXN0ZXI9YGZpbmQgJEhPTUUgLW5hbWUgIip0ZXJtaW5mby5zcmMiIC1wcmludGAKKwltY291bnQ9YGVjaG8gJG1hc3RlciB8IHdjIC1sYAorCWNhc2UgJG1jb3VudCBpbgorCTApCisJCWVjaG8gIkkgY2FuIG5vdCBmaW5kIGEgdGVybWluZm8gc291cmNlIGZpbGUgYW55d2hlcmUgdW5kZXIgeW91ciBob21lIGRpcmVjdG9yeS4iCisJCWVjaG8gIlRoZXJlIHNob3VsZCBiZSBhIGZpbGUgY2FsbGVkIHRlcm1pbmZvLnNyYyBzb21ld2hlcmUgaW4geW91ciIKKwkJZWNobyAibmN1cnNlcyBkaXN0cmlidXRpb247IHBsZWFzZSBwdXQgaXQgaW4geW91ciBob21lIGRpcmVjdG90cnkiCisJCWVjaG8gImFuZCBydW4gbWUgYWdhaW4gKGl0IGRvZXMgbm90IGhhdmUgdG8gbGl2ZSB0aGVyZSBwZXJtYW5lbnRseSkuIgorCQlleGl0OworCTs7CisJMSkKKwkJZWNobyAiSSBzZWUgYSBmaWxlIGNhbGxlZCAkbWFzdGVyLiIKKwkJZWNobyAiSSBhbSBnb2luZyB0byBhc3N1bWUgdGhpcyBpcyB0aGUgdGVybWluZm8gc291cmNlIGluY2x1ZGVkIHdpdGgiCisJCWVjaG8gInRoZSBuY3Vyc2VzIGRpc3RyaWJ1dGlvbi4gIElmIHRoaXMgYXNzdW1wdGlvbiBpcyB3cm9uZywgcGxlYXNlIgorCQllY2hvICJpbnRlcnJ1cHQgbWUgbm93ISAgT0sgdG8gY29udGludWU/IgorCQlyZWFkIGFuczsKKwk7OworCTIpCisJCWVjaG8gIkkgc2VlIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgdGVybWluZm8gc291cmNlLiAgSGVyZSB0aGV5IGFyZToiCisJCWVjaG8gJG1hc3RlciB8IHNlZCAiL14vcy8vCS8iOworCQl3aGlsZSA6CisJCWRvCisJCQllY2hvICJQbGVhc2UgdGVsbCBtZSB3aGljaCBvbmUgdG8gdXNlOiIKKwkJCXJlYWQgbWFzdGVyOworCQkJaWYgdGVzdCAtZiAkbWFzdGVyCisJCQl0aGVuCisJCQkJYnJlYWsKKwkJCWVsc2UKKwkJCQllY2hvICJUaGF0IGZpbGUgZG9lcyBub3QgZXhpc3QuIFRyeSBhZ2Fpbj8iOworCQkJZmkKKwkJZG9uZQorCTs7CisJZXNhYworZmkKK2VjaG8gIiI7CisKKyMgTm93IHRoYXQgd2UgaGF2ZSBhIG1hc3RlciwgY29tcGlsZSBpdCBpbnRvIHRoZSBsb2NhbCB0cmVlCitlY2hvICJPSywgbm93IEkgd2lsbCBtYWtlIHlvdXIgcHJpdmF0ZSB0ZXJtaW5mbyB0cmVlLiAgVGhpcyBtYXkgdGFrZSBhIGJpdC4uLiIKKyMKKyMgS2x1Z2UgYWxlcnQ6IHdlIGNvbXBpbGUgdGVybWluZm8uc3JjIGluIHR3byBwaWVjZXMgYmVjYXVzZSBhIGxvdCBvZiBtYWNoaW5lcworIyB3aXRoIDwgMTZNQiBSQU0gY2hva2Ugb24gdGljJ3MgY29yZS1ob2cgaGFiaXRzLgordHJhcCAicm0gLWYgdHNwbGl0JCQuKiIgMCAxIDIgNSAxNQorc2VkIC1uICRtYXN0ZXIgXAorCS1lICcxLC9TUExJVCBIRVJFL3cgJ3RzcGxpdCQkLjAxIFwKKwktZSAnL1NQTElUIEhFUkUvLCR3ICd0c3BsaXQkJC4wMiBcCisJMj4vZGV2L251bGwKK2ZvciB4IGluIHRzcGxpdCQkLio7IGRvIGV2YWwgJFRJQyAkeDsgZG9uZQorcm0gdHNwbGl0JCQuKgordHJhcCAwIDEgMiA1IDE1CisjCitlY2hvICJZb3Ugbm93IGhhdmUgYSBwcml2YXRlIHRyZWUgdW5kZXIgJEhPTUUvLnRlcm1pbmZvOyIKK2VjaG8gInRoZSBuY3Vyc2VzIGxpYnJhcnkgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYWQgZnJvbSBpdCwiCitlY2hvICJhbmQgbmN1cnNlcyB0aWMgd2lsbCBhdXRvbWF0aWNhbGx5IGNvbXBpbGUgZW50cmllcyB0byBpdC4iIAorCisjIFdlJ3JlIGRvbmUgdW5sZXNzIHVzZXIgaGFzIGEgLnRlcm1jYXAgZmlsZSBvciBlcXVpdmFsZW50IG5hbWVkIGJ5IFRFUk1DQVAKK2lmIHRlc3QgLXogIiRURVJNQ0FQIgordGhlbgorCWVjaG8gIllvdSBoYXZlIG5vIFRFUk1DQVAgc2V0LCBzbyB3ZSBhcmUgZG9uZS4iCitmaQorCisjIE9LLCBoZXJlIGNvbWVzIHRoZSBuYXN0eSBjYXNlLi4udXNlciBoYXMgYSBURVJNQ0FQLiAgSW5zdGVhZCBvZgorIyB0cnlpbmcgdG8gZm9sbG93IGFsbCB0aGUgY29udm9sdXRpb25zIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorIyBURVJNIGFuZCBURVJNQ0FQIChwYXJ0bHkgYmVjYXVzZSBpdCdzIHRvbyBwYWluZnVsLCBhbmQgcGFydGx5IGJlY2F1c2UKKyMgd2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGF0IFRFUk0gd2lsbCBiZSBub3IgZXZlbiBpZiBpdCBhbHdheXMgaGFzCisjIHRoZSBzYW1lIHZhbHVlIGZvciB0aGlzIHVzZXIpIHdlIGRvIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RlcHMuLi4KKworaWYgdGVzdCAtZiAkSE9NRS8udGVybWNhcAordGhlbgorCWVjaG8gJ0kgc2VlIHlvdSBoYXZlIGEgJEhPTUUvLnRlcm1jYXAgZmlsZS4gIEkgd2lsbCBjb21waWxlIHRoYXQuJworCWV2YWwgJFRJQyAkSE9NRS8udGVybWNhcAorCWVjaG8gIkRvbmUuIgorCWVjaG8gIk5vdGUgdGhhdCBlZGl0aW5nICRIT01FLy50ZXJtY2FwIHdpbGwgbm8gbG9uZ2VyIGNoYW5nZSB0aGUgZGF0YSBjdXJzZXMgc2Vlcy4iCitlbGlmIHRlc3QgLWYgIiRURVJNQ0FQIgordGhlbiAKKwllY2hvICJZb3VyIFRFUk1DQVAgbmFtZXMgdGhlIGZpbGUgJFRFUk1DQVAuICBJIHdpbGwgY29tcGlsZSB0aGF0LiIKKwlldmFsICRUSUMgJFRFUk1DQVAKKwllY2hvICJEb25lLiIKKwllY2hvICJOb3RlIHRoYXQgZWRpdGluZyAkVEVSTUNBUCB3aWxsIG5vIGxvbmdlciBjaGFuZ2UgdGhlIGRhdGEgY3Vyc2VzIHNlZXMuIgorZWxzZQorCWVjaG8gIllvdXIgVEVSTUNBUCB2YWx1ZSBhcHBlYXJzIHRvIGJlIGFuIGVudHJ5IGluIHRlcm1jYXAgZm9ybWF0LiIKKwllY2hvICJJIHdpbGwgY29tcGlsZSBpdC4iCisJZWNobyAkVEVSTUNBUCA+bXl0ZXJtJCQKKwlldmFsICRUSUMgbXl0ZXJtJCQKKwlybSBteXRlcm0kJAorCWVjaG8gIkRvbmUuIgorCWVjaG8gIk5vdGUgdGhhdCBlZGl0aW5nIFRFUk1DQVAgd2lsbCBubyBsb25nZXIgY2hhbmdlIHRoZSBkYXRhIGN1cnNlcyBzZWVzLiIKK2ZpCitlY2hvICJUbyBkbyB0aGF0LCBkZWNvbXBpbGUgdGhlIHRlcm1pbmFsIGRlY3JpcHRpb24geW91IHdhbnQgd2l0aCBpbmZvY21wKDEpLCIKK2VjaG8gImVkaXQgdG8gdGFzdGUsIGFuZCByZWNvbXBpbGUgdXNpbmcgdGljKDEpLiIKKworIyBjYXBjb252ZXJ0IGVuZHMgaGVyZQorCmRpZmYgLS1naXQgYS9wcm9ncy9jbGVhci5jIGIvcHJvZ3MvY2xlYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjVhNTQzCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3MvY2xlYXIuYwpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBjbGVhci5jIC0tICBjbGVhcnMgdGhlIHRlcm1pbmFsJ3Mgc2NyZWVuCisgKi8KKworI2RlZmluZSBVU0VfTElCVElORk8KKyNpbmNsdWRlIDxwcm9ncy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBjbGVhci5jLHYgMS4xMSAyMDA3LzEwLzEzIDIyOjE2OjAyIHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQKK3B1dGNoKGludCBjKQoreworICAgIHJldHVybiBwdXRjaGFyKGMpOworfQorCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHNldHVwdGVybSgoY2hhciAqKSAwLCBTVERPVVRfRklMRU5PLCAoaW50ICopIDApOworICAgIEV4aXRQcm9ncmFtKCh0cHV0cyhjbGVhcl9zY3JlZW4sIGxpbmVzID4gMCA/IGxpbmVzIDogMSwgcHV0Y2gpID09IEVSUikKKwkJPyBFWElUX0ZBSUxVUkUKKwkJOiBFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvcHJvZ3MvY2xlYXIuc2ggYi9wcm9ncy9jbGVhci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjYxMTJiCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3MvY2xlYXIuc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitleGVjIHRwdXQgY2xlYXIKZGlmZiAtLWdpdCBhL3Byb2dzL2R1bXBfZW50cnkuYyBiL3Byb2dzL2R1bXBfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI0MjIwCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3MvZHVtcF9lbnRyeS5jCkBAIC0wLDAgKzEsMTI3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYgb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIF9fSU5URVJOQUxfQ0FQU19WSVNJQkxFCisjaW5jbHVkZSA8cHJvZ3MucHJpdi5oPgorCisjaW5jbHVkZSAiZHVtcF9lbnRyeS5oIgorI2luY2x1ZGUgInRlcm1zb3J0LmMiCQkvKiB0aGlzIEMgZmlsZSBpcyBnZW5lcmF0ZWQgKi8KKyNpbmNsdWRlIDxwYXJhbWV0cml6ZWQuaD4JLyogc28gaXMgdGhpcyAqLworCitNT0RVTEVfSUQoIiRJZDogZHVtcF9lbnRyeS5jLHYgMS44OCAyMDA4LzA4LzA0IDEyOjM2OjEyIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgSU5ERU5UCQkJOAorI2RlZmluZSBESVNDQVJEKHN0cmluZykgc3RyaW5nID0gQUJTRU5UX1NUUklORworI2RlZmluZSBQUklOVEYgKHZvaWQpIHByaW50ZgorCisjZGVmaW5lIE9rSW5kZXgoaW5kZXgsYXJyYXkpICgoaW50KShpbmRleCkgPj0gMCAmJiAoaW50KShpbmRleCkgPCAoaW50KSBTSVpFT0YoYXJyYXkpKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqdGV4dDsKKyAgICBzaXplX3QgdXNlZDsKKyAgICBzaXplX3Qgc2l6ZTsKK30gRFlOQlVGOworCitzdGF0aWMgaW50IHR2ZXJzaW9uOwkJLyogdGVybWluZm8gdmVyc2lvbiAqLworc3RhdGljIGludCBvdXRmb3JtOwkJLyogb3V0cHV0IGZvcm1hdCB0byB1c2UgKi8KK3N0YXRpYyBpbnQgc29ydG1vZGU7CQkvKiBzb3J0IG1vZGUgdG8gdXNlICovCitzdGF0aWMgaW50IHdpZHRoID0gNjA7CQkvKiBtYXggbGluZSB3aWR0aCBmb3IgbGlzdGluZ3MgKi8KK3N0YXRpYyBpbnQgY29sdW1uOwkJLyogY3VycmVudCBjb2x1bW4sIGxpbWl0ZWQgYnkgJ3dpZHRoJyAqLworc3RhdGljIGludCBvbGRjb2w7CQkvKiBsYXN0IHZhbHVlIG9mIGNvbHVtbiBiZWZvcmUgd3JhcCAqLworc3RhdGljIGJvb2wgcHJldHR5OwkJLyogdHJ1ZSBpZiB3ZSBmb3JtYXQgaWYtdGhlbi1lbHNlIHN0cmluZ3MgKi8KKworc3RhdGljIGNoYXIgKnNhdmVfc2dyOworCitzdGF0aWMgRFlOQlVGIG91dGJ1ZjsKK3N0YXRpYyBEWU5CVUYgdG1wYnVmOworCisvKiBpbmRpcmVjdGlvbiBwb2ludGVycyBmb3IgaW1wbGVtZW50aW5nIHNvcnQgYW5kIGRpc3BsYXkgbW9kZXMgKi8KK3N0YXRpYyBjb25zdCBQcmVkSWR4ICpib29sX2luZGlyZWN0LCAqbnVtX2luZGlyZWN0LCAqc3RyX2luZGlyZWN0Oworc3RhdGljIE5DVVJTRVNfQ09OU1QgY2hhciAqY29uc3QgKmJvb2xfbmFtZXM7CitzdGF0aWMgTkNVUlNFU19DT05TVCBjaGFyICpjb25zdCAqbnVtX25hbWVzOworc3RhdGljIE5DVVJTRVNfQ09OU1QgY2hhciAqY29uc3QgKnN0cl9uYW1lczsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNlcGFyYXRvciwgKnRyYWlsZXI7CisKKy8qIGNvdmVyIHZhcmlvdXMgcG9ydHMgYW5kIHZhcmlhbnRzIG9mIHRlcm1pbmZvICovCisjZGVmaW5lIFZfQUxMQ0FQUwkwCS8qIGFsbCBjYXBhYmlsaXRpZXMgKFNWcjQsIFhTSSwgbmN1cnNlcykgKi8KKyNkZWZpbmUgVl9TVlIxCQkxCS8qIFNWUjEsIFVsdHJpeCAqLworI2RlZmluZSBWX0hQVVgJCTIJLyogSFAvVVggKi8KKyNkZWZpbmUgVl9BSVgJCTMJLyogQUlYICovCisjZGVmaW5lIFZfQlNECQk0CS8qIEJTRCAqLworCisjaWYgTkNVUlNFU19YTkFNRVMKKyNkZWZpbmUgT0JTT0xFVEUobikgKCFfbmNfdXNlcl9kZWZpbmFibGUgJiYgKG5bMF0gPT0gJ08nICYmIG5bMV0gPT0gJ1QnKSkKKyNlbHNlCisjZGVmaW5lIE9CU09MRVRFKG4pIChuWzBdID09ICdPJyAmJiBuWzFdID09ICdUJykKKyNlbmRpZgorCisjZGVmaW5lIGlzT2Jzb2xldGUoZixuKSAoKGYgPT0gRl9URVJNSU5GTyB8fCBmID09IEZfVkFSSUFCTEUpICYmIE9CU09MRVRFKG4pKQorCisjaWYgTkNVUlNFU19YTkFNRVMKKyNkZWZpbmUgQm9vbEluZGlyZWN0KGopICgoaiA+PSBCT09MQ09VTlQpID8gKGopIDogKChzb3J0bW9kZSA9PSBTX05PU09SVCkgPyBqIDogYm9vbF9pbmRpcmVjdFtqXSkpCisjZGVmaW5lIE51bUluZGlyZWN0KGopICAoKGogPj0gTlVNQ09VTlQpICA/IChqKSA6ICgoc29ydG1vZGUgPT0gU19OT1NPUlQpID8gaiA6IG51bV9pbmRpcmVjdFtqXSkpCisjZGVmaW5lIFN0ckluZGlyZWN0KGopICAoKGogPj0gU1RSQ09VTlQpICA/IChqKSA6ICgoc29ydG1vZGUgPT0gU19OT1NPUlQpID8gaiA6IHN0cl9pbmRpcmVjdFtqXSkpCisjZWxzZQorI2RlZmluZSBCb29sSW5kaXJlY3QoaikgKChzb3J0bW9kZSA9PSBTX05PU09SVCkgPyAoaikgOiBib29sX2luZGlyZWN0W2pdKQorI2RlZmluZSBOdW1JbmRpcmVjdChqKSAgKChzb3J0bW9kZSA9PSBTX05PU09SVCkgPyAoaikgOiBudW1faW5kaXJlY3Rbal0pCisjZGVmaW5lIFN0ckluZGlyZWN0KGopICAoKHNvcnRtb2RlID09IFNfTk9TT1JUKSA/IChqKSA6IHN0cl9pbmRpcmVjdFtqXSkKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorc3RybmNweV9EWU4oRFlOQlVGICogZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuZWVkKQoreworICAgIHNpemVfdCB3YW50ID0gbmVlZCArIGRzdC0+dXNlZCArIDE7CisgICAgaWYgKHdhbnQgPiBkc3QtPnNpemUpIHsKKwlkc3QtPnNpemUgKz0gKHdhbnQgKyAxMDI0KTsJLyogYmUgZ2VuZXJvdXMgKi8KKwlkc3QtPnRleHQgPSB0eXBlUmVhbGxvYyhjaGFyLCBkc3QtPnNpemUsIGRzdC0+dGV4dCk7CisgICAgfQorICAgICh2b2lkKSBzdHJuY3B5KGRzdC0+dGV4dCArIGRzdC0+dXNlZCwgc3JjLCBuZWVkKTsKKyAgICBkc3QtPnVzZWQgKz0gbmVlZDsKKyAgICBkc3QtPnRleHRbZHN0LT51c2VkXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitzdHJjcHlfRFlOKERZTkJVRiAqIGRzdCwgY29uc3QgY2hhciAqc3JjKQoreworICAgIGlmIChzcmMgPT0gMCkgeworCWRzdC0+dXNlZCA9IDA7CisJc3RyY3B5X0RZTihkc3QsICIiKTsKKyAgICB9IGVsc2UgeworCXN0cm5jcHlfRFlOKGRzdCwgc3JjLCBzdHJsZW4oc3JjKSk7CisgICAgfQorfQorCisjaWYgTk9fTEVBS1MKK3N0YXRpYyB2b2lkCitmcmVlX0RZTihEWU5CVUYgKiBwKQoreworICAgIGlmIChwLT50ZXh0ICE9IDApCisJZnJlZShwLT50ZXh0KTsKKyAgICBwLT50ZXh0ID0gMDsKKyAgICBwLT5zaXplID0gMDsKKyAgICBwLT51c2VkID0gMDsKK30KKwordm9pZAorX25jX2xlYWtzX2R1bXBfZW50cnkodm9pZCkKK3sKKyAgICBmcmVlX0RZTigmb3V0YnVmKTsKKyAgICBmcmVlX0RZTigmdG1wYnVmKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIE5hbWVUcmFucyhjaGVjayxyZXN1bHQpIFwKKwkgICAgaWYgKE9rSW5kZXgobnAtPm50ZV9pbmRleCwgY2hlY2spIFwKKwkJJiYgY2hlY2tbbnAtPm50ZV9pbmRleF0pIFwKKwkJcmV0dXJuIChyZXN1bHRbbnAtPm50ZV9pbmRleF0pCisKK05DVVJTRVNfQ09OU1QgY2hhciAqCituYW1ldHJhbnMoY29uc3QgY2hhciAqbmFtZSkKKy8qIHRyYW5zbGF0ZSBhIGNhcGFiaWxpdHkgbmFtZSBmcm9tIHRlcm1jYXAgdG8gdGVybWluZm8gKi8KK3sKKyAgICBjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqbnA7CisKKyAgICBpZiAoKG5wID0gX25jX2ZpbmRfZW50cnkobmFtZSwgX25jX2dldF9oYXNoX3RhYmxlKDApKSkgIT0gMCkKKwlzd2l0Y2ggKG5wLT5udGVfdHlwZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgTmFtZVRyYW5zKGJvb2xfZnJvbV90ZXJtY2FwLCBib29sY29kZXMpOworCSAgICBicmVhazsKKworCWNhc2UgTlVNQkVSOgorCSAgICBOYW1lVHJhbnMobnVtX2Zyb21fdGVybWNhcCwgbnVtY29kZXMpOworCSAgICBicmVhazsKKworCWNhc2UgU1RSSU5HOgorCSAgICBOYW1lVHJhbnMoc3RyX2Zyb21fdGVybWNhcCwgc3RyY29kZXMpOworCSAgICBicmVhazsKKwl9CisKKyAgICByZXR1cm4gKDApOworfQorCit2b2lkCitkdW1wX2luaXQoY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IG1vZGUsIGludCBzb3J0LCBpbnQgdHdpZHRoLCBpbnQgdHJhY2V2YWwsCisJICBib29sIGZvcm1hdHRlZCkKKy8qIHNldCB1cCBmb3IgZW50cnkgZGlzcGxheSAqLworeworICAgIHdpZHRoID0gdHdpZHRoOworICAgIHByZXR0eSA9IGZvcm1hdHRlZDsKKworICAgIC8qIHZlcnNpb25zICovCisgICAgaWYgKHZlcnNpb24gPT0gMCkKKwl0dmVyc2lvbiA9IFZfQUxMQ0FQUzsKKyAgICBlbHNlIGlmICghc3RyY21wKHZlcnNpb24sICJTVnIxIikgfHwgIXN0cmNtcCh2ZXJzaW9uLCAiU1ZSMSIpCisJICAgICB8fCAhc3RyY21wKHZlcnNpb24sICJVbHRyaXgiKSkKKwl0dmVyc2lvbiA9IFZfU1ZSMTsKKyAgICBlbHNlIGlmICghc3RyY21wKHZlcnNpb24sICJIUCIpKQorCXR2ZXJzaW9uID0gVl9IUFVYOworICAgIGVsc2UgaWYgKCFzdHJjbXAodmVyc2lvbiwgIkFJWCIpKQorCXR2ZXJzaW9uID0gVl9BSVg7CisgICAgZWxzZSBpZiAoIXN0cmNtcCh2ZXJzaW9uLCAiQlNEIikpCisJdHZlcnNpb24gPSBWX0JTRDsKKyAgICBlbHNlCisJdHZlcnNpb24gPSBWX0FMTENBUFM7CisKKyAgICAvKiBpbXBsZW1lbnQgZGlzcGxheSBtb2RlcyAqLworICAgIHN3aXRjaCAob3V0Zm9ybSA9IG1vZGUpIHsKKyAgICBjYXNlIEZfTElURVJBTDoKKyAgICBjYXNlIEZfVEVSTUlORk86CisJYm9vbF9uYW1lcyA9IGJvb2xuYW1lczsKKwludW1fbmFtZXMgPSBudW1uYW1lczsKKwlzdHJfbmFtZXMgPSBzdHJuYW1lczsKKwlzZXBhcmF0b3IgPSB0d2lkdGggPyAiLCAiIDogIiwiOworCXRyYWlsZXIgPSAiXG5cdCI7CisJYnJlYWs7CisKKyAgICBjYXNlIEZfVkFSSUFCTEU6CisJYm9vbF9uYW1lcyA9IGJvb2xmbmFtZXM7CisJbnVtX25hbWVzID0gbnVtZm5hbWVzOworCXN0cl9uYW1lcyA9IHN0cmZuYW1lczsKKwlzZXBhcmF0b3IgPSB0d2lkdGggPyAiLCAiIDogIiwiOworCXRyYWlsZXIgPSAiXG5cdCI7CisJYnJlYWs7CisKKyAgICBjYXNlIEZfVEVSTUNBUDoKKyAgICBjYXNlIEZfVENPTlZFUlI6CisJYm9vbF9uYW1lcyA9IGJvb2xjb2RlczsKKwludW1fbmFtZXMgPSBudW1jb2RlczsKKwlzdHJfbmFtZXMgPSBzdHJjb2RlczsKKwlzZXBhcmF0b3IgPSAiOiI7CisJdHJhaWxlciA9ICJcXFxuXHQ6IjsKKwlicmVhazsKKyAgICB9CisKKyAgICAvKiBpbXBsZW1lbnQgc29ydCBtb2RlcyAqLworICAgIHN3aXRjaCAoc29ydG1vZGUgPSBzb3J0KSB7CisgICAgY2FzZSBTX05PU09SVDoKKwlpZiAodHJhY2V2YWwpCisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlczogc29ydGluZyBieSB0ZXJtIHN0cnVjdHVyZSBvcmRlclxuIiwgX25jX3Byb2duYW1lKTsKKwlicmVhazsKKworICAgIGNhc2UgU19URVJNSU5GTzoKKwlpZiAodHJhY2V2YWwpCisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlczogc29ydGluZyBieSB0ZXJtaW5mbyBuYW1lIG9yZGVyXG4iLCBfbmNfcHJvZ25hbWUpOworCWJvb2xfaW5kaXJlY3QgPSBib29sX3Rlcm1pbmZvX3NvcnQ7CisJbnVtX2luZGlyZWN0ID0gbnVtX3Rlcm1pbmZvX3NvcnQ7CisJc3RyX2luZGlyZWN0ID0gc3RyX3Rlcm1pbmZvX3NvcnQ7CisJYnJlYWs7CisKKyAgICBjYXNlIFNfVkFSSUFCTEU6CisJaWYgKHRyYWNldmFsKQorCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAiJXM6IHNvcnRpbmcgYnkgQyB2YXJpYWJsZSBvcmRlclxuIiwgX25jX3Byb2duYW1lKTsKKwlib29sX2luZGlyZWN0ID0gYm9vbF92YXJpYWJsZV9zb3J0OworCW51bV9pbmRpcmVjdCA9IG51bV92YXJpYWJsZV9zb3J0OworCXN0cl9pbmRpcmVjdCA9IHN0cl92YXJpYWJsZV9zb3J0OworCWJyZWFrOworCisgICAgY2FzZSBTX1RFUk1DQVA6CisJaWYgKHRyYWNldmFsKQorCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAiJXM6IHNvcnRpbmcgYnkgdGVybWNhcCBuYW1lIG9yZGVyXG4iLCBfbmNfcHJvZ25hbWUpOworCWJvb2xfaW5kaXJlY3QgPSBib29sX3Rlcm1jYXBfc29ydDsKKwludW1faW5kaXJlY3QgPSBudW1fdGVybWNhcF9zb3J0OworCXN0cl9pbmRpcmVjdCA9IHN0cl90ZXJtY2FwX3NvcnQ7CisJYnJlYWs7CisgICAgfQorCisgICAgaWYgKHRyYWNldmFsKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICAgICIlczogd2lkdGggPSAlZCwgdHZlcnNpb24gPSAlZCwgb3V0Zm9ybSA9ICVkXG4iLAorCQkgICAgICAgX25jX3Byb2duYW1lLCB3aWR0aCwgdHZlcnNpb24sIG91dGZvcm0pOworfQorCitzdGF0aWMgVEVSTVRZUEUgKmN1cl90eXBlOworCitzdGF0aWMgaW50CitkdW1wX3ByZWRpY2F0ZShQcmVkVHlwZSB0eXBlLCBQcmVkSWR4IGlkeCkKKy8qIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB1c2UgZm9yIG9yZGluYXJ5IGRlY29tcGlsYXRpb24gKi8KK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEJPT0xFQU46CisJcmV0dXJuIChjdXJfdHlwZS0+Qm9vbGVhbnNbaWR4XSA9PSBGQUxTRSkKKwkgICAgPyBGQUlMIDogY3VyX3R5cGUtPkJvb2xlYW5zW2lkeF07CisKKyAgICBjYXNlIE5VTUJFUjoKKwlyZXR1cm4gKGN1cl90eXBlLT5OdW1iZXJzW2lkeF0gPT0gQUJTRU5UX05VTUVSSUMpCisJICAgID8gRkFJTCA6IGN1cl90eXBlLT5OdW1iZXJzW2lkeF07CisKKyAgICBjYXNlIFNUUklORzoKKwlyZXR1cm4gKGN1cl90eXBlLT5TdHJpbmdzW2lkeF0gIT0gQUJTRU5UX1NUUklORykKKwkgICAgPyAoaW50KSBUUlVFIDogRkFJTDsKKyAgICB9CisKKyAgICByZXR1cm4gKEZBTFNFKTsJCS8qIHBhY2lmeSBjb21waWxlciAqLworfQorCitzdGF0aWMgdm9pZCBzZXRfb2Jzb2xldGVfdGVybWNhcHMoVEVSTVRZUEUgKnRwKTsKKworLyogaXMgdGhpcyB0aGUgaW5kZXggb2YgYSBmdW5jdGlvbiBrZXkgc3RyaW5nPyAqLworI2RlZmluZSBGTktFWShpKQkoKChpKTw9IDY1ICYmIChpKT49IDc1KSB8fCAoKGkpPD0gMjE2ICYmIChpKT49IDI2OCkpCisKKy8qCisgKiBJZiB3ZSBjb25maWd1cmUgd2l0aCBhIGRpZmZlcmVudCBDYXBzIGZpbGUsIHRoZSBvZmZzZXRzIGludG8gdGhlIGFycmF5cworICogd2lsbCBjaGFuZ2UuICBTbyB3ZSB1c2UgYW4gYWRkcmVzcyBleHByZXNzaW9uLgorICovCisjZGVmaW5lIEJPT0xfSURYKG5hbWUpIChQcmVkVHlwZSkgKCYobmFtZSkgLSAmKENVUiBCb29sZWFuc1swXSkpCisjZGVmaW5lIE5VTV9JRFgobmFtZSkgIChQcmVkVHlwZSkgKCYobmFtZSkgLSAmKENVUiBOdW1iZXJzWzBdKSkKKyNkZWZpbmUgU1RSX0lEWChuYW1lKSAgKFByZWRUeXBlKSAoJihuYW1lKSAtICYoQ1VSIFN0cmluZ3NbMF0pKQorCitzdGF0aWMgYm9vbAordmVyc2lvbl9maWx0ZXIoUHJlZFR5cGUgdHlwZSwgUHJlZElkeCBpZHgpCisvKiBmaWx0ZXIgb3V0IGNhcGFiaWxpdGllcyB3ZSBtYXkgd2FudCB0byBzdXBwcmVzcyAqLworeworICAgIHN3aXRjaCAodHZlcnNpb24pIHsKKyAgICBjYXNlIFZfQUxMQ0FQUzoJCS8qIFNWcjQsIFhTSSBDdXJzZXMgKi8KKwlyZXR1cm4gKFRSVUUpOworCisgICAgY2FzZSBWX1NWUjE6CQkvKiBTeXN0ZW0gViBSZWxlYXNlIDEsIFVsdHJpeCAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgcmV0dXJuICgoaWR4IDw9IEJPT0xfSURYKHhvbl94b2ZmKSkgPyBUUlVFIDogRkFMU0UpOworCWNhc2UgTlVNQkVSOgorCSAgICByZXR1cm4gKChpZHggPD0gTlVNX0lEWCh3aWR0aF9zdGF0dXNfbGluZSkpID8gVFJVRSA6IEZBTFNFKTsKKwljYXNlIFNUUklORzoKKwkgICAgcmV0dXJuICgoaWR4IDw9IFNUUl9JRFgocHJ0cl9ub24pKSA/IFRSVUUgOiBGQUxTRSk7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBWX0hQVVg6CQkvKiBIZXdsZXR0LVBhY2thcmQgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEJPT0xFQU46CisJICAgIHJldHVybiAoKGlkeCA8PSBCT09MX0lEWCh4b25feG9mZikpID8gVFJVRSA6IEZBTFNFKTsKKwljYXNlIE5VTUJFUjoKKwkgICAgcmV0dXJuICgoaWR4IDw9IE5VTV9JRFgobGFiZWxfd2lkdGgpKSA/IFRSVUUgOiBGQUxTRSk7CisJY2FzZSBTVFJJTkc6CisJICAgIGlmIChpZHggPD0gU1RSX0lEWChwcnRyX25vbikpCisJCXJldHVybiAoVFJVRSk7CisJICAgIGVsc2UgaWYgKEZOS0VZKGlkeCkpCS8qIGZ1bmN0aW9uIGtleXMgKi8KKwkJcmV0dXJuIChUUlVFKTsKKwkgICAgZWxzZSBpZiAoaWR4ID09IFNUUl9JRFgocGxhYl9ub3JtKQorCQkgICAgIHx8IGlkeCA9PSBTVFJfSURYKGxhYmVsX29uKQorCQkgICAgIHx8IGlkeCA9PSBTVFJfSURYKGxhYmVsX29mZikpCisJCXJldHVybiAoVFJVRSk7CisJICAgIGVsc2UKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBWX0FJWDoJCS8qIEFJWCAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgcmV0dXJuICgoaWR4IDw9IEJPT0xfSURYKHhvbl94b2ZmKSkgPyBUUlVFIDogRkFMU0UpOworCWNhc2UgTlVNQkVSOgorCSAgICByZXR1cm4gKChpZHggPD0gTlVNX0lEWCh3aWR0aF9zdGF0dXNfbGluZSkpID8gVFJVRSA6IEZBTFNFKTsKKwljYXNlIFNUUklORzoKKwkgICAgaWYgKGlkeCA8PSBTVFJfSURYKHBydHJfbm9uKSkKKwkJcmV0dXJuIChUUlVFKTsKKwkgICAgZWxzZSBpZiAoRk5LRVkoaWR4KSkJLyogZnVuY3Rpb24ga2V5cyAqLworCQlyZXR1cm4gKFRSVUUpOworCSAgICBlbHNlCisJCXJldHVybiAoRkFMU0UpOworCX0KKwlicmVhazsKKworI2RlZmluZSBpc190ZXJtY2FwKHR5cGUpIChPa0luZGV4KGlkeCwgdHlwZSMjX2Zyb21fdGVybWNhcCkgJiYgXAorCQkJICB0eXBlIyNfZnJvbV90ZXJtY2FwW2lkeF0pCisKKyAgICBjYXNlIFZfQlNEOgkJLyogQlNEICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICByZXR1cm4gaXNfdGVybWNhcChib29sKTsKKwljYXNlIE5VTUJFUjoKKwkgICAgcmV0dXJuIGlzX3Rlcm1jYXAobnVtKTsKKwljYXNlIFNUUklORzoKKwkgICAgcmV0dXJuIGlzX3Rlcm1jYXAoc3RyKTsKKwl9CisJYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIChGQUxTRSk7CQkvKiBwYWNpZnkgdGhlIGNvbXBpbGVyICovCit9CisKK3N0YXRpYyB2b2lkCit0cmltX3RyYWlsaW5nKHZvaWQpCit7CisgICAgd2hpbGUgKG91dGJ1Zi51c2VkID4gMCAmJiBvdXRidWYudGV4dFtvdXRidWYudXNlZCAtIDFdID09ICcgJykKKwlvdXRidWYudGV4dFstLW91dGJ1Zi51c2VkXSA9ICdcMCc7Cit9CisKK3N0YXRpYyB2b2lkCitmb3JjZV93cmFwKHZvaWQpCit7CisgICAgb2xkY29sID0gY29sdW1uOworICAgIHRyaW1fdHJhaWxpbmcoKTsKKyAgICBzdHJjcHlfRFlOKCZvdXRidWYsIHRyYWlsZXIpOworICAgIGNvbHVtbiA9IElOREVOVDsKK30KKworc3RhdGljIHZvaWQKK3dyYXBfY29uY2F0KGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgICB1bnNpZ25lZCBuZWVkID0gc3RybGVuKHNyYyk7CisgICAgdW5zaWduZWQgd2FudCA9IHN0cmxlbihzZXBhcmF0b3IpICsgbmVlZDsKKworICAgIGlmIChjb2x1bW4gPiBJTkRFTlQKKwkmJiBjb2x1bW4gKyAoaW50KSB3YW50ID4gd2lkdGgpIHsKKwlmb3JjZV93cmFwKCk7CisgICAgfQorICAgIHN0cmNweV9EWU4oJm91dGJ1Ziwgc3JjKTsKKyAgICBzdHJjcHlfRFlOKCZvdXRidWYsIHNlcGFyYXRvcik7CisgICAgY29sdW1uICs9IChpbnQpIG5lZWQ7Cit9CisKKyNkZWZpbmUgSUdOT1JFX1NFUF9UUkFJTChmaXJzdCxsYXN0LHNlcF90cmFpbCkgXAorCWlmICgoc2l6ZV90KShsYXN0IC0gZmlyc3QpID4gc2l6ZW9mKHNlcF90cmFpbCktMSBcCisJICYmICFzdHJuY21wKGZpcnN0LCBzZXBfdHJhaWwsIHNpemVvZihzZXBfdHJhaWwpLTEpKSBcCisJCWZpcnN0ICs9IHNpemVvZihzZXBfdHJhaWwpLTIKKworLyogUmV0dXJucyB0aGUgbm9taW5hbCBsZW5ndGggb2YgdGhlIGJ1ZmZlciBhc3N1bWluZyBpdCBpcyB0ZXJtY2FwIGZvcm1hdCwKKyAqIGkuZS4sIHRoZSBjb250aW51YXRpb24gc2VxdWVuY2UgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIgIjoiLgorICoKKyAqIFRoZXJlIGFyZSBzZXZlcmFsIGltcGxlbWVudGF0aW9ucyBvZiB0ZXJtY2FwIHdoaWNoIHJlYWQgdGhlIHRleHQgaW50byBhCisgKiBmaXhlZC1zaXplIGJ1ZmZlci4gIEdlbmVyYWxseSB0aGV5IHN0cmlwIHRoZSBuZXdsaW5lcyBmcm9tIHRoZSB0ZXh0LCBidXQgbWF5CisgKiBub3QgZG8gaXQgdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlciBpcyByZWFkLiAgQWxzbywgInRjPSIgcmVzb2x1dGlvbiBtYXkgYmUKKyAqIGV4cGFuZGVkIGluIHRoZSBzYW1lIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBtZWFzdXJpbmcgdGhlIHNpemUKKyAqIG9mIHRoZSBiZXN0IGZpeGVkLWJ1ZmZlciBpbXBsZW1lbnRhdGlvbjsgdGhlIHdvcnN0IGNhc2UgbWF5IGJlIG11Y2ggd29yc2UuCisgKi8KKyNpZmRlZiBURVNUX1RFUk1DQVBfTEVOR1RICitzdGF0aWMgaW50Cit0ZXJtY2FwX2xlbmd0aChjb25zdCBjaGFyICpzcmMpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgcGF0dGVybltdID0gIjpcXFxuXHQ6IjsKKworICAgIGludCBsZW4gPSAwOworICAgIGNvbnN0IGNoYXIgKmNvbnN0IHQgPSBzcmMgKyBzdHJsZW4oc3JjKTsKKworICAgIHdoaWxlICgqc3JjICE9ICdcMCcpIHsKKwlJR05PUkVfU0VQX1RSQUlMKHNyYywgdCwgcGF0dGVybik7CisJc3JjKys7CisJbGVuKys7CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisjZWxzZQorI2RlZmluZSB0ZXJtY2FwX2xlbmd0aChzcmMpIHN0cmxlbihzcmMpCisjZW5kaWYKKworc3RhdGljIHZvaWQKK2luZGVudF9EWU4oRFlOQlVGICogYnVmZmVyLCBpbnQgbGV2ZWwpCit7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgbGV2ZWw7IG4rKykKKwlzdHJuY3B5X0RZTihidWZmZXIsICJcdCIsIDEpOworfQorCitzdGF0aWMgYm9vbAoraGFzX3BhcmFtcyhjb25zdCBjaGFyICpzcmMpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBpbnQgbGVuID0gKGludCkgc3RybGVuKHNyYyk7CisgICAgaW50IG47CisgICAgYm9vbCBpZnRoZW4gPSBGQUxTRTsKKyAgICBib29sIHBhcmFtcyA9IEZBTFNFOworCisgICAgZm9yIChuID0gMDsgbiA8IGxlbiAtIDE7ICsrbikgeworCWlmICghc3RybmNtcChzcmMgKyBuLCAiJXAiLCAyKSkgeworCSAgICBwYXJhbXMgPSBUUlVFOworCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3JjICsgbiwgIiU7IiwgMikpIHsKKwkgICAgaWZ0aGVuID0gVFJVRTsKKwkgICAgcmVzdWx0ID0gcGFyYW1zOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmICghaWZ0aGVuKSB7CisJcmVzdWx0ID0gKChsZW4gPiA1MCkgJiYgcGFyYW1zKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNoYXIgKgorZm10X2NvbXBsZXgoY2hhciAqc3JjLCBpbnQgbGV2ZWwpCit7CisgICAgYm9vbCBwZXJjZW50ID0gRkFMU0U7CisgICAgYm9vbCBwYXJhbXMgPSBoYXNfcGFyYW1zKHNyYyk7CisKKyAgICB3aGlsZSAoKnNyYyAhPSAnXDAnKSB7CisJc3dpdGNoICgqc3JjKSB7CisJY2FzZSAnXFwnOgorCSAgICBwZXJjZW50ID0gRkFMU0U7CisJICAgIHN0cm5jcHlfRFlOKCZ0bXBidWYsIHNyYysrLCAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnJSc6CisJICAgIHBlcmNlbnQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICc/JzoJCS8qICJpZiIgKi8KKwljYXNlICd0JzoJCS8qICJ0aGVuIiAqLworCWNhc2UgJ2UnOgkJLyogImVsc2UiICovCisJICAgIGlmIChwZXJjZW50KSB7CisJCXBlcmNlbnQgPSBGQUxTRTsKKwkJdG1wYnVmLnRleHRbdG1wYnVmLnVzZWQgLSAxXSA9ICdcbic7CisJCS8qIHRyZWF0IGEgIiVlIiBhcyBlbHNlLWlmLCBvbiB0aGUgc2FtZSBsZXZlbCAqLworCQlpZiAoKnNyYyA9PSAnZScpIHsKKwkJICAgIGluZGVudF9EWU4oJnRtcGJ1ZiwgbGV2ZWwpOworCQkgICAgc3RybmNweV9EWU4oJnRtcGJ1ZiwgIiUiLCAxKTsKKwkJICAgIHN0cm5jcHlfRFlOKCZ0bXBidWYsIHNyYywgMSk7CisJCSAgICBzcmMrKzsKKwkJICAgIHBhcmFtcyA9IGhhc19wYXJhbXMoc3JjKTsKKwkJICAgIGlmICghcGFyYW1zICYmICpzcmMgIT0gJ1wwJyAmJiAqc3JjICE9ICclJykgeworCQkJc3RybmNweV9EWU4oJnRtcGJ1ZiwgIlxuIiwgMSk7CisJCQlpbmRlbnRfRFlOKCZ0bXBidWYsIGxldmVsICsgMSk7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBpbmRlbnRfRFlOKCZ0bXBidWYsIGxldmVsICsgMSk7CisJCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCAiJSIsIDEpOworCQkgICAgc3RybmNweV9EWU4oJnRtcGJ1Ziwgc3JjLCAxKTsKKwkJICAgIGlmICgqc3JjKysgPT0gJz8nKSB7CisJCQlzcmMgPSBmbXRfY29tcGxleChzcmMsIGxldmVsICsgMSk7CisJCQlpZiAoKnNyYyAhPSAnXDAnICYmICpzcmMgIT0gJyUnKSB7CisJCQkgICAgc3RybmNweV9EWU4oJnRtcGJ1ZiwgIlxuIiwgMSk7CisJCQkgICAgaW5kZW50X0RZTigmdG1wYnVmLCBsZXZlbCArIDEpOworCQkJfQorCQkgICAgfSBlbHNlIGlmIChsZXZlbCA9PSAxKSB7CisJCQlfbmNfd2FybmluZygiJSUlYyB3aXRob3V0ICUlPyIsICpzcmMpOworCQkgICAgfQorCQl9CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJzsnOgkJLyogImVuZGlmIiAqLworCSAgICBpZiAocGVyY2VudCkgeworCQlwZXJjZW50ID0gRkFMU0U7CisJCWlmIChsZXZlbCA+IDEpIHsKKwkJICAgIHRtcGJ1Zi50ZXh0W3RtcGJ1Zi51c2VkIC0gMV0gPSAnXG4nOworCQkgICAgaW5kZW50X0RZTigmdG1wYnVmLCBsZXZlbCk7CisJCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCAiJSIsIDEpOworCQkgICAgc3RybmNweV9EWU4oJnRtcGJ1Ziwgc3JjKyssIDEpOworCQkgICAgcmV0dXJuIHNyYzsKKwkJfQorCQlfbmNfd2FybmluZygiJSU7IHdpdGhvdXQgJSU/Iik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAncCc6CisJICAgIGlmIChwZXJjZW50ICYmIHBhcmFtcykgeworCQl0bXBidWYudGV4dFt0bXBidWYudXNlZCAtIDFdID0gJ1xuJzsKKwkJaW5kZW50X0RZTigmdG1wYnVmLCBsZXZlbCArIDEpOworCQlzdHJuY3B5X0RZTigmdG1wYnVmLCAiJSIsIDEpOworCSAgICB9CisJICAgIHBhcmFtcyA9IEZBTFNFOworCSAgICBwZXJjZW50ID0gRkFMU0U7CisJICAgIGJyZWFrOworCWNhc2UgJyAnOgorCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCAiXFxzIiwgMik7CisJICAgICsrc3JjOworCSAgICBjb250aW51ZTsKKwlkZWZhdWx0OgorCSAgICBwZXJjZW50ID0gRkFMU0U7CisJICAgIGJyZWFrOworCX0KKwlzdHJuY3B5X0RZTigmdG1wYnVmLCBzcmMrKywgMSk7CisgICAgfQorICAgIHJldHVybiBzcmM7Cit9CisKKyNkZWZpbmUgU0FNRV9DQVAobixjYXApICgmdHRlcm0tPlN0cmluZ3Nbbl0gPT0gJmNhcCkKKyNkZWZpbmUgRVhUUkFfQ0FQIDIwCisKK2ludAorZm10X2VudHJ5KFRFUk1UWVBFICp0dGVybSwKKwkgIFByZWRGdW5jIHByZWQsCisJICBib29sIGNvbnRlbnRfb25seSwKKwkgIGJvb2wgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUsCisJICBib29sIGluZm9kdW1wLAorCSAgaW50IG51bWJlcnMpCit7CisgICAgUHJlZElkeCBpLCBqOworICAgIGNoYXIgYnVmZmVyW01BWF9URVJNSU5GT19MRU5HVEggKyBFWFRSQV9DQVBdOworICAgIGNoYXIgKmNhcGFiaWxpdHk7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpuYW1lOworICAgIGludCBwcmVkdmFsLCBsZW47CisgICAgUHJlZElkeCBudW1fYm9vbHMgPSAwOworICAgIFByZWRJZHggbnVtX3ZhbHVlcyA9IDA7CisgICAgUHJlZElkeCBudW1fc3RyaW5ncyA9IDA7CisgICAgYm9vbCBvdXRjb3VudCA9IDA7CisKKyNkZWZpbmUgV1JBUF9DT05DQVQJXAorCXdyYXBfY29uY2F0KGJ1ZmZlcik7IFwKKwlvdXRjb3VudCA9IFRSVUUKKworICAgIGxlbiA9IDEyOwkJCS8qIHRlcm1pbmZvIGZpbGUtaGVhZGVyICovCisKKyAgICBpZiAocHJlZCA9PSAwKSB7CisJY3VyX3R5cGUgPSB0dGVybTsKKwlwcmVkID0gZHVtcF9wcmVkaWNhdGU7CisgICAgfQorCisgICAgc3RyY3B5X0RZTigmb3V0YnVmLCAwKTsKKyAgICBpZiAoY29udGVudF9vbmx5KSB7CisJY29sdW1uID0gSU5ERU5UOwkvKiBGSVhNRTogd29ya2Fyb3VuZCB0byBwcmV2ZW50IGVtcHR5IGxpbmVzICovCisgICAgfSBlbHNlIHsKKwlzdHJjcHlfRFlOKCZvdXRidWYsIHR0ZXJtLT50ZXJtX25hbWVzKTsKKwlzdHJjcHlfRFlOKCZvdXRidWYsIHNlcGFyYXRvcik7CisJY29sdW1uID0gKGludCkgb3V0YnVmLnVzZWQ7CisJZm9yY2Vfd3JhcCgpOworICAgIH0KKworICAgIGZvcl9lYWNoX2Jvb2xlYW4oaiwgdHRlcm0pIHsKKwlpID0gQm9vbEluZGlyZWN0KGopOworCW5hbWUgPSBFeHRCb29sbmFtZSh0dGVybSwgaSwgYm9vbF9uYW1lcyk7CisJYXNzZXJ0KHN0cmxlbihuYW1lKSA8IHNpemVvZihidWZmZXIpIC0gRVhUUkFfQ0FQKTsKKworCWlmICghdmVyc2lvbl9maWx0ZXIoQk9PTEVBTiwgaSkpCisJICAgIGNvbnRpbnVlOworCWVsc2UgaWYgKGlzT2Jzb2xldGUob3V0Zm9ybSwgbmFtZSkpCisJICAgIGNvbnRpbnVlOworCisJcHJlZHZhbCA9IHByZWQoQk9PTEVBTiwgaSk7CisJaWYgKHByZWR2YWwgIT0gRkFJTCkgeworCSAgICAodm9pZCkgc3RyY3B5KGJ1ZmZlciwgbmFtZSk7CisJICAgIGlmIChwcmVkdmFsIDw9IDApCisJCSh2b2lkKSBzdHJjYXQoYnVmZmVyLCAiQCIpOworCSAgICBlbHNlIGlmIChpICsgMSA+IG51bV9ib29scykKKwkJbnVtX2Jvb2xzID0gaSArIDE7CisJICAgIFdSQVBfQ09OQ0FUOworCX0KKyAgICB9CisKKyAgICBpZiAoY29sdW1uICE9IElOREVOVCkKKwlmb3JjZV93cmFwKCk7CisKKyAgICBmb3JfZWFjaF9udW1iZXIoaiwgdHRlcm0pIHsKKwlpID0gTnVtSW5kaXJlY3Qoaik7CisJbmFtZSA9IEV4dE51bW5hbWUodHRlcm0sIGksIG51bV9uYW1lcyk7CisJYXNzZXJ0KHN0cmxlbihuYW1lKSA8IHNpemVvZihidWZmZXIpIC0gRVhUUkFfQ0FQKTsKKworCWlmICghdmVyc2lvbl9maWx0ZXIoTlVNQkVSLCBpKSkKKwkgICAgY29udGludWU7CisJZWxzZSBpZiAoaXNPYnNvbGV0ZShvdXRmb3JtLCBuYW1lKSkKKwkgICAgY29udGludWU7CisKKwlwcmVkdmFsID0gcHJlZChOVU1CRVIsIGkpOworCWlmIChwcmVkdmFsICE9IEZBSUwpIHsKKwkgICAgaWYgKHR0ZXJtLT5OdW1iZXJzW2ldIDwgMCkgeworCQlzcHJpbnRmKGJ1ZmZlciwgIiVzQCIsIG5hbWUpOworCSAgICB9IGVsc2UgeworCQlzcHJpbnRmKGJ1ZmZlciwgIiVzIyVkIiwgbmFtZSwgdHRlcm0tPk51bWJlcnNbaV0pOworCQlpZiAoaSArIDEgPiBudW1fdmFsdWVzKQorCQkgICAgbnVtX3ZhbHVlcyA9IGkgKyAxOworCSAgICB9CisJICAgIFdSQVBfQ09OQ0FUOworCX0KKyAgICB9CisKKyAgICBpZiAoY29sdW1uICE9IElOREVOVCkKKwlmb3JjZV93cmFwKCk7CisKKyAgICBsZW4gKz0gKGludCkgKG51bV9ib29scworCQkgICsgbnVtX3ZhbHVlcyAqIDIKKwkJICArIHN0cmxlbih0dGVybS0+dGVybV9uYW1lcykgKyAxKTsKKyAgICBpZiAobGVuICYgMSkKKwlsZW4rKzsKKworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgdHRlcm0tPgorICAgIGlmIChvdXRmb3JtID09IEZfVEVSTUNBUCkgeworCWlmICh0ZXJtY2FwX3Jlc2V0ICE9IEFCU0VOVF9TVFJJTkcpIHsKKwkgICAgaWYgKGluaXRfM3N0cmluZyAhPSBBQlNFTlRfU1RSSU5HCisJCSYmICFzdHJjbXAoaW5pdF8zc3RyaW5nLCB0ZXJtY2FwX3Jlc2V0KSkKKwkJRElTQ0FSRChpbml0XzNzdHJpbmcpOworCisJICAgIGlmIChyZXNldF8yc3RyaW5nICE9IEFCU0VOVF9TVFJJTkcKKwkJJiYgIXN0cmNtcChyZXNldF8yc3RyaW5nLCB0ZXJtY2FwX3Jlc2V0KSkKKwkJRElTQ0FSRChyZXNldF8yc3RyaW5nKTsKKwl9CisgICAgfQorCisgICAgZm9yX2VhY2hfc3RyaW5nKGosIHR0ZXJtKSB7CisJaSA9IFN0ckluZGlyZWN0KGopOworCW5hbWUgPSBFeHRTdHJuYW1lKHR0ZXJtLCBpLCBzdHJfbmFtZXMpOworCWFzc2VydChzdHJsZW4obmFtZSkgPCBzaXplb2YoYnVmZmVyKSAtIEVYVFJBX0NBUCk7CisKKwljYXBhYmlsaXR5ID0gdHRlcm0tPlN0cmluZ3NbaV07CisKKwlpZiAoIXZlcnNpb25fZmlsdGVyKFNUUklORywgaSkpCisJICAgIGNvbnRpbnVlOworCWVsc2UgaWYgKGlzT2Jzb2xldGUob3V0Zm9ybSwgbmFtZSkpCisJICAgIGNvbnRpbnVlOworCisjaWYgTkNVUlNFU19YTkFNRVMKKwkvKgorCSAqIEV4dGVuZGVkIG5hbWVzIGNhbiBiZSBsb25nZXIgdGhhbiAyIGNoYXJhY3RlcnMsIGJ1dCB0ZXJtY2FwIHByb2dyYW1zCisJICogY2Fubm90IHJlYWQgdGhvc2UgKGZpbHRlciB0aGVtIG91dCkuCisJICovCisJaWYgKG91dGZvcm0gPT0gRl9URVJNQ0FQICYmIChzdHJsZW4obmFtZSkgPiAyKSkKKwkgICAgY29udGludWU7CisjZW5kaWYKKworCWlmIChvdXRmb3JtID09IEZfVEVSTUNBUCkgeworCSAgICAvKgorCSAgICAgKiBTb21lIG9sZGVyIHZlcnNpb25zIG9mIHZpIHdhbnQgcm1pci9zbWlyIHRvIGJlIGRlZmluZWQKKwkgICAgICogZm9yIGljaC9pY2gxIHRvIHdvcmsuICBJZiB0aGV5J3JlIG5vdCBkZWZpbmVkLCBmb3JjZQorCSAgICAgKiB0aGVtIHRvIGJlIG91dHB1dCBhcyBkZWZpbmVkIGFuZCBlbXB0eS4KKwkgICAgICovCisJICAgIGlmIChQUkVTRU5UKGluc2VydF9jaGFyYWN0ZXIpIHx8IFBSRVNFTlQocGFybV9pY2gpKSB7CisJCWlmIChTQU1FX0NBUChpLCBlbnRlcl9pbnNlcnRfbW9kZSkKKwkJICAgICYmIGVudGVyX2luc2VydF9tb2RlID09IEFCU0VOVF9TVFJJTkcpIHsKKwkJICAgICh2b2lkKSBzdHJjcHkoYnVmZmVyLCAiaW09Iik7CisJCSAgICBXUkFQX0NPTkNBVDsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJaWYgKFNBTUVfQ0FQKGksIGV4aXRfaW5zZXJ0X21vZGUpCisJCSAgICAmJiBleGl0X2luc2VydF9tb2RlID09IEFCU0VOVF9TVFJJTkcpIHsKKwkJICAgICh2b2lkKSBzdHJjcHkoYnVmZmVyLCAiZWk9Iik7CisJCSAgICBXUkFQX0NPTkNBVDsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogdGVybWNhcCBhcHBsaWNhdGlvbnMgc3VjaCBhcyBzY3JlZW4gd2lsbCBiZSBjb25mdXNlZCBpZiBzZ3IwCisJICAgICAqIGlzIHRyYW5zbGF0ZWQgdG8gYSBzdHJpbmcgY29udGFpbmluZyBybWFjcy4gIEZpbHRlciB0aGF0IG91dC4KKwkgICAgICovCisJICAgIGlmIChQUkVTRU5UKGV4aXRfYXR0cmlidXRlX21vZGUpKSB7CisJCWlmIChTQU1FX0NBUChpLCBleGl0X2F0dHJpYnV0ZV9tb2RlKSkgeworCQkgICAgY2hhciAqdHJpbW1lZF9zZ3IwOworCQkgICAgY2hhciAqbXlfc2dyID0gc2V0X2F0dHJpYnV0ZXM7CisKKwkJICAgIHNldF9hdHRyaWJ1dGVzID0gc2F2ZV9zZ3I7CisKKwkJICAgIHRyaW1tZWRfc2dyMCA9IF9uY190cmltX3NncjAodHRlcm0pOworCQkgICAgaWYgKHN0cmNtcChjYXBhYmlsaXR5LCB0cmltbWVkX3NncjApKQorCQkJY2FwYWJpbGl0eSA9IHRyaW1tZWRfc2dyMDsKKworCQkgICAgc2V0X2F0dHJpYnV0ZXMgPSBteV9zZ3I7CisJCX0KKwkgICAgfQorCX0KKworCXByZWR2YWwgPSBwcmVkKFNUUklORywgaSk7CisJYnVmZmVyWzBdID0gJ1wwJzsKKworCWlmIChwcmVkdmFsICE9IEZBSUwpIHsKKwkgICAgaWYgKGNhcGFiaWxpdHkgIT0gQUJTRU5UX1NUUklORworCQkmJiBpICsgMSA+IG51bV9zdHJpbmdzKQorCQludW1fc3RyaW5ncyA9IGkgKyAxOworCisJICAgIGlmICghVkFMSURfU1RSSU5HKGNhcGFiaWxpdHkpKSB7CisJCXNwcmludGYoYnVmZmVyLCAiJXNAIiwgbmFtZSk7CisJCVdSQVBfQ09OQ0FUOworCSAgICB9IGVsc2UgaWYgKG91dGZvcm0gPT0gRl9URVJNQ0FQIHx8IG91dGZvcm0gPT0gRl9UQ09OVkVSUikgeworCQlpbnQgcGFyYW1zID0gKChpIDwgKGludCkgU0laRU9GKHBhcmFtZXRyaXplZCkpCisJCQkgICAgICA/IHBhcmFtZXRyaXplZFtpXQorCQkJICAgICAgOiAwKTsKKwkJY2hhciAqc3JjY2FwID0gX25jX3RpY19leHBhbmQoY2FwYWJpbGl0eSwgVFJVRSwgbnVtYmVycyk7CisJCWNoYXIgKmN2ID0gX25jX2luZm90b2NhcChuYW1lLCBzcmNjYXAsIHBhcmFtcyk7CisKKwkJaWYgKGN2ID09IDApIHsKKwkJICAgIGlmIChvdXRmb3JtID09IEZfVENPTlZFUlIpIHsKKwkJCXNwcmludGYoYnVmZmVyLCAiJXM9ISEhICVzIFdJTEwgTk9UIENPTlZFUlQgISEhIiwKKwkJCQluYW1lLCBzcmNjYXApOworCQkgICAgfSBlbHNlIGlmIChzdXBwcmVzc191bnRyYW5zbGF0YWJsZSkgeworCQkJY29udGludWU7CisJCSAgICB9IGVsc2UgeworCQkJY2hhciAqcyA9IHNyY2NhcCwgKmQgPSBidWZmZXI7CisJCQlzcHJpbnRmKGQsICIuLiVzPSIsIG5hbWUpOworCQkJZCArPSBzdHJsZW4oZCk7CisJCQl3aGlsZSAoKCpkID0gKnMrKykgIT0gMCkgeworCQkJICAgIGlmICgqZCA9PSAnOicpIHsKKwkJCQkqZCsrID0gJ1xcJzsKKwkJCQkqZCA9ICc6JzsKKwkJCSAgICB9IGVsc2UgaWYgKCpkID09ICdcXCcpIHsKKwkJCQkqKytkID0gKnMrKzsKKwkJCSAgICB9CisJCQkgICAgZCsrOworCQkJfQorCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgc3ByaW50ZihidWZmZXIsICIlcz0lcyIsIG5hbWUsIGN2KTsKKwkJfQorCQlsZW4gKz0gKGludCkgc3RybGVuKGNhcGFiaWxpdHkpICsgMTsKKwkJV1JBUF9DT05DQVQ7CisJICAgIH0gZWxzZSB7CisJCWNoYXIgKnNyYyA9IF9uY190aWNfZXhwYW5kKGNhcGFiaWxpdHksCisJCQkJCSAgIG91dGZvcm0gPT0gRl9URVJNSU5GTywgbnVtYmVycyk7CisKKwkJc3RyY3B5X0RZTigmdG1wYnVmLCAwKTsKKwkJc3RyY3B5X0RZTigmdG1wYnVmLCBuYW1lKTsKKwkJc3RyY3B5X0RZTigmdG1wYnVmLCAiPSIpOworCQlpZiAocHJldHR5CisJCSAgICAmJiAob3V0Zm9ybSA9PSBGX1RFUk1JTkZPCisJCQl8fCBvdXRmb3JtID09IEZfVkFSSUFCTEUpKSB7CisJCSAgICBmbXRfY29tcGxleChzcmMsIDEpOworCQl9IGVsc2UgeworCQkgICAgc3RyY3B5X0RZTigmdG1wYnVmLCBzcmMpOworCQl9CisJCWxlbiArPSAoaW50KSBzdHJsZW4oY2FwYWJpbGl0eSkgKyAxOworCQl3cmFwX2NvbmNhdCh0bXBidWYudGV4dCk7CisJCW91dGNvdW50ID0gVFJVRTsKKwkgICAgfQorCX0KKwkvKiBlLmcuLCB0cmltbWVkX3NncjAgKi8KKwlpZiAoY2FwYWJpbGl0eSAhPSB0dGVybS0+U3RyaW5nc1tpXSkKKwkgICAgZnJlZShjYXBhYmlsaXR5KTsKKyAgICB9CisgICAgbGVuICs9IChpbnQpIChudW1fc3RyaW5ncyAqIDIpOworCisgICAgLyoKKyAgICAgKiBUaGlzIHBpZWNlIG9mIGNvZGUgc2hvdWxkIGJlIGFuIGVmZmVjdGl2ZSBpbnZlcnNlIG9mIHRoZSBmdW5jdGlvbnMKKyAgICAgKiBwb3N0cHJvY2Vzc190ZXJtaW5mbygpIGFuZCBwb3N0cHJvY2Vzc190ZXJtaW5mbygpIGluIHBhcnNlX2VudHJ5LmMuCisgICAgICogTXVjaCBtb3JlIHdvcmsgc2hvdWxkIGJlIGRvbmUgb24gdGhpcyB0byBzdXBwb3J0IGR1bXBpbmcgdGVybWNhcHMuCisgICAgICovCisgICAgaWYgKHR2ZXJzaW9uID09IFZfSFBVWCkgeworCWlmIChWQUxJRF9TVFJJTkcobWVtb3J5X2xvY2spKSB7CisJICAgICh2b2lkKSBzcHJpbnRmKGJ1ZmZlciwgIm1lbWw9JXMiLCBtZW1vcnlfbG9jayk7CisJICAgIFdSQVBfQ09OQ0FUOworCX0KKwlpZiAoVkFMSURfU1RSSU5HKG1lbW9yeV91bmxvY2spKSB7CisJICAgICh2b2lkKSBzcHJpbnRmKGJ1ZmZlciwgIm1lbXU9JXMiLCBtZW1vcnlfdW5sb2NrKTsKKwkgICAgV1JBUF9DT05DQVQ7CisJfQorICAgIH0gZWxzZSBpZiAodHZlcnNpb24gPT0gVl9BSVgpIHsKKwlpZiAoVkFMSURfU1RSSU5HKGFjc19jaGFycykpIHsKKwkgICAgYm9vbCBib3hfb2sgPSBUUlVFOworCSAgICBjb25zdCBjaGFyICphY3N0cmFucyA9ICJscWt4am13dXZ0biI7CisJICAgIGNvbnN0IGNoYXIgKmNwOworCSAgICBjaGFyICp0cCwgKnNwLCBib3hjaGFyc1sxMV07CisKKwkgICAgdHAgPSBib3hjaGFyczsKKwkgICAgZm9yIChjcCA9IGFjc3RyYW5zOyAqY3A7IGNwKyspIHsKKwkJc3AgPSBzdHJjaHIoYWNzX2NoYXJzLCAqY3ApOworCQlpZiAoc3ApCisJCSAgICAqdHArKyA9IHNwWzFdOworCQllbHNlIHsKKwkJICAgIGJveF9vayA9IEZBTFNFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICB0cFswXSA9ICdcMCc7CisKKwkgICAgaWYgKGJveF9vaykgeworCQkodm9pZCkgc3RyY3B5KGJ1ZmZlciwgImJveDE9Iik7CisJCSh2b2lkKSBzdHJjYXQoYnVmZmVyLCBfbmNfdGljX2V4cGFuZChib3hjaGFycywKKwkJCQkJCSAgICAgb3V0Zm9ybSA9PSBGX1RFUk1JTkZPLCBudW1iZXJzKSk7CisJCVdSQVBfQ09OQ0FUOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICoga2x1ZGdlOiB0cmltIG9mZiB0cmFpbGVyIHRvIGF2b2lkIGFuIGV4dHJhIGJsYW5rIGxpbmUKKyAgICAgKiBpbiBpbmZvY21wIC11IG91dHB1dCB3aGVuIHRoZXJlIGFyZSBubyBzdHJpbmcgZGlmZmVyZW5jZXMKKyAgICAgKi8KKyAgICBpZiAob3V0Y291bnQpIHsKKwlib29sIHRyaW1tZWQgPSBGQUxTRTsKKwlqID0gb3V0YnVmLnVzZWQ7CisJaWYgKGogPj0gMgorCSAgICAmJiBvdXRidWYudGV4dFtqIC0gMV0gPT0gJ1x0JworCSAgICAmJiBvdXRidWYudGV4dFtqIC0gMl0gPT0gJ1xuJykgeworCSAgICBvdXRidWYudXNlZCAtPSAyOworCSAgICB0cmltbWVkID0gVFJVRTsKKwl9IGVsc2UgaWYgKGogPj0gNAorCQkgICAmJiBvdXRidWYudGV4dFtqIC0gMV0gPT0gJzonCisJCSAgICYmIG91dGJ1Zi50ZXh0W2ogLSAyXSA9PSAnXHQnCisJCSAgICYmIG91dGJ1Zi50ZXh0W2ogLSAzXSA9PSAnXG4nCisJCSAgICYmIG91dGJ1Zi50ZXh0W2ogLSA0XSA9PSAnXFwnKSB7CisJICAgIG91dGJ1Zi51c2VkIC09IDQ7CisJICAgIHRyaW1tZWQgPSBUUlVFOworCX0KKwlpZiAodHJpbW1lZCkgeworCSAgICBvdXRidWYudGV4dFtvdXRidWYudXNlZF0gPSAnXDAnOworCSAgICBjb2x1bW4gPSBvbGRjb2w7CisJICAgIHN0cmNweV9EWU4oJm91dGJ1ZiwgIiAiKTsKKwl9CisgICAgfQorI2lmIDAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm51bV9ib29scyA9ICVkXG4iLCBudW1fYm9vbHMpOworICAgIGZwcmludGYoc3RkZXJyLCAibnVtX3ZhbHVlcyA9ICVkXG4iLCBudW1fdmFsdWVzKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm51bV9zdHJpbmdzID0gJWRcbiIsIG51bV9zdHJpbmdzKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInRlcm1fbmFtZXM9JXMsIGxlbj0lZCwgc3RybGVuKG91dGJ1Zik9JWQsIG91dGJ1Zj0lc1xuIiwKKwkgICAgdHRlcm0tPnRlcm1fbmFtZXMsIGxlbiwgb3V0YnVmLnVzZWQsIG91dGJ1Zi50ZXh0KTsKKyNlbmRpZgorICAgIC8qCisgICAgICogSGVyZSdzIHdoZXJlIHdlIHVzZSBpbmZvZHVtcCB0byB0cmlnZ2VyIGEgbW9yZSBzdHJpbmdlbnQgbGVuZ3RoIGNoZWNrCisgICAgICogZm9yIHRlcm1jYXAtdHJhbnNsYXRpb24gcHVycG9zZXMuCisgICAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJhdyBlbnRyeSwgd2l0aG91dCB0Yz0gZXhwYW5zaW9ucywKKyAgICAgKiBJdCBnaXZlcyBhbiBpZGVhIG9mIHdoaWNoIGVudHJpZXMgYXJlIGRlYWRseSB0byBldmVuICpzY2FuIHBhc3QqLAorICAgICAqIGFzIG9wcG9zZWQgdG8gKnVzZSouCisgICAgICovCisgICAgcmV0dXJuIChpbmZvZHVtcCA/IGxlbiA6IChpbnQpIHRlcm1jYXBfbGVuZ3RoKG91dGJ1Zi50ZXh0KSk7Cit9CisKK3N0YXRpYyBib29sCitraWxsX3N0cmluZyhURVJNVFlQRSAqdHRlcm0sIGNoYXIgKmNhcCkKK3sKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBOVU1fU1RSSU5HUyh0dGVybSk7ICsrbikgeworCWlmIChjYXAgPT0gdHRlcm0tPlN0cmluZ3Nbbl0pIHsKKwkgICAgdHRlcm0tPlN0cmluZ3Nbbl0gPSBBQlNFTlRfU1RSSU5HOworCSAgICByZXR1cm4gVFJVRTsKKwl9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmcoVEVSTVRZUEUgKnR0ZXJtLCBjaGFyICpuYW1lKQoreworICAgIFByZWRJZHggbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgTlVNX1NUUklOR1ModHRlcm0pOyArK24pIHsKKwlpZiAodmVyc2lvbl9maWx0ZXIoU1RSSU5HLCBuKQorCSAgICAmJiAhc3RyY21wKG5hbWUsIHN0cm5hbWVzW25dKSkgeworCSAgICBjaGFyICpjYXAgPSB0dGVybS0+U3RyaW5nc1tuXTsKKwkgICAgaWYgKFZBTElEX1NUUklORyhjYXApKSB7CisJCXJldHVybiBjYXA7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gQUJTRU5UX1NUUklORzsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byByZW1vdmUgZnVuY3Rpb24ta2V5IGxhYmVscyBmcm9tIGEgdGVybWNhcCBlbnRyeSB0bworICogbWFrZSBpdCBzbWFsbGVyLgorICovCitzdGF0aWMgaW50CitraWxsX2xhYmVscyhURVJNVFlQRSAqdHRlcm0sIGludCB0YXJnZXQpCit7CisgICAgaW50IG47CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgY2hhciAqY2FwOworICAgIGNoYXIgbmFtZVsxMF07CisKKyAgICBmb3IgKG4gPSAwOyBuIDw9IDEwOyArK24pIHsKKwlzcHJpbnRmKG5hbWUsICJsZiVkIiwgbik7CisJaWYgKChjYXAgPSBmaW5kX3N0cmluZyh0dGVybSwgbmFtZSkpICE9IEFCU0VOVF9TVFJJTkcKKwkgICAgJiYga2lsbF9zdHJpbmcodHRlcm0sIGNhcCkpIHsKKwkgICAgdGFyZ2V0IC09IChpbnQpIChzdHJsZW4oY2FwKSArIDUpOworCSAgICArK3Jlc3VsdDsKKwkgICAgaWYgKHRhcmdldCA8IDApCisJCWJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byByZW1vdmUgZnVuY3Rpb24ta2V5IGRlZmluaXRpb25zIGZyb20gYSB0ZXJtY2FwIGVudHJ5IHRvCisgKiBtYWtlIGl0IHNtYWxsZXIuCisgKi8KK3N0YXRpYyBpbnQKK2tpbGxfZmtleXMoVEVSTVRZUEUgKnR0ZXJtLCBpbnQgdGFyZ2V0KQoreworICAgIGludCBuOworICAgIGludCByZXN1bHQgPSAwOworICAgIGNoYXIgKmNhcDsKKyAgICBjaGFyIG5hbWVbMTBdOworCisgICAgZm9yIChuID0gNjA7IG4gPj0gMDsgLS1uKSB7CisJc3ByaW50ZihuYW1lLCAia2YlZCIsIG4pOworCWlmICgoY2FwID0gZmluZF9zdHJpbmcodHRlcm0sIG5hbWUpKSAhPSBBQlNFTlRfU1RSSU5HCisJICAgICYmIGtpbGxfc3RyaW5nKHR0ZXJtLCBjYXApKSB7CisJICAgIHRhcmdldCAtPSAoaW50KSAoc3RybGVuKGNhcCkgKyA1KTsKKwkgICAgKytyZXN1bHQ7CisJICAgIGlmICh0YXJnZXQgPCAwKQorCQlicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gYWNzYyBzdHJpbmcgaXMgYSAxLTEgbWFwcGluZywgaS5lLiwganVzdC1saWtlLXZ0MTAwLgorICogQWxzbywgc2luY2UgdGhpcyBpcyBmb3IgdGVybWNhcCwgd2Ugb25seSBjYXJlIGFib3V0IHRoZSBsaW5lLWRyYXdpbmcgbWFwLgorICovCisjZGVmaW5lIGlzTGluZShjKSAoc3RyY2hyKCJsbWtqdHV2d3F4biIsIGMpICE9IDApCisKK3N0YXRpYyBib29sCitvbmVfb25lX21hcHBpbmcoY29uc3QgY2hhciAqbWFwcGluZykKK3sKKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisKKyAgICBpZiAobWFwcGluZyAhPSBBQlNFTlRfU1RSSU5HKSB7CisJaW50IG4gPSAwOworCXdoaWxlIChtYXBwaW5nW25dICE9ICdcMCcpIHsKKwkgICAgaWYgKGlzTGluZShtYXBwaW5nW25dKSAmJgorCQltYXBwaW5nW25dICE9IG1hcHBpbmdbbiArIDFdKSB7CisJCXJlc3VsdCA9IEZBTFNFOworCQlicmVhazsKKwkgICAgfQorCSAgICBuICs9IDI7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIEZNVF9FTlRSWSgpIFwKKwkJZm10X2VudHJ5KHR0ZXJtLCBwcmVkLCBcCisJCQkwLCBcCisJCQlzdXBwcmVzc191bnRyYW5zbGF0YWJsZSwgXAorCQkJaW5mb2R1bXAsIG51bWJlcnMpCisKKyNkZWZpbmUgU0hPV19XSFkgUFJJTlRGCisKK3N0YXRpYyBib29sCitwdXJnZWRfYWNzKFRFUk1UWVBFICp0dGVybSkKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKFZBTElEX1NUUklORyhhY3NfY2hhcnMpKSB7CisJaWYgKCFvbmVfb25lX21hcHBpbmcoYWNzX2NoYXJzKSkgeworCSAgICBlbnRlcl9hbHRfY2hhcnNldF9tb2RlID0gQUJTRU5UX1NUUklORzsKKwkgICAgZXhpdF9hbHRfY2hhcnNldF9tb2RlID0gQUJTRU5UX1NUUklORzsKKwkgICAgU0hPV19XSFkoIiMgKHJtYWNzL3NtYWNzIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5KVxuIik7CisJfQorCXJlc3VsdCA9IFRSVUU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBEdW1wIGEgc2luZ2xlIGVudHJ5LgorICovCit2b2lkCitkdW1wX2VudHJ5KFRFUk1UWVBFICp0dGVybSwKKwkgICBib29sIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlLAorCSAgIGJvb2wgbGltaXRlZCwKKwkgICBpbnQgbnVtYmVycywKKwkgICBQcmVkRnVuYyBwcmVkKQoreworICAgIFRFUk1UWVBFIHNhdmVfdHRlcm07CisgICAgaW50IGxlbiwgY3JpdGxlbjsKKyAgICBjb25zdCBjaGFyICpsZWdlbmQ7CisgICAgYm9vbCBpbmZvZHVtcDsKKworICAgIGlmIChvdXRmb3JtID09IEZfVEVSTUNBUCB8fCBvdXRmb3JtID09IEZfVENPTlZFUlIpIHsKKwljcml0bGVuID0gTUFYX1RFUk1DQVBfTEVOR1RIOworCWxlZ2VuZCA9ICJvbGRlciB0ZXJtY2FwIjsKKwlpbmZvZHVtcCA9IEZBTFNFOworCXNldF9vYnNvbGV0ZV90ZXJtY2Fwcyh0dGVybSk7CisgICAgfSBlbHNlIHsKKwljcml0bGVuID0gTUFYX1RFUk1JTkZPX0xFTkdUSDsKKwlsZWdlbmQgPSAidGVybWluZm8iOworCWluZm9kdW1wID0gVFJVRTsKKyAgICB9CisKKyAgICBzYXZlX3NnciA9IHNldF9hdHRyaWJ1dGVzOworCisgICAgaWYgKCgobGVuID0gRk1UX0VOVFJZKCkpID4gY3JpdGxlbikKKwkmJiBsaW1pdGVkKSB7CisKKwlzYXZlX3R0ZXJtID0gKnR0ZXJtOworCWlmICghc3VwcHJlc3NfdW50cmFuc2xhdGFibGUpIHsKKwkgICAgU0hPV19XSFkoIiMgKHVudHJhbnNsYXRhYmxlIGNhcGFiaWxpdGllcyByZW1vdmVkIHRvIGZpdCBlbnRyeSB3aXRoaW4gJWQgYnl0ZXMpXG4iLAorCQkgICAgIGNyaXRsZW4pOworCSAgICBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSA9IFRSVUU7CisJfQorCWlmICgobGVuID0gRk1UX0VOVFJZKCkpID4gY3JpdGxlbikgeworCSAgICAvKgorCSAgICAgKiBXZSBwaWNrIG9uIHNnciBiZWNhdXNlIGl0J3MgYSBuaWNlIGxvbmcgc3RyaW5nIGNhcGFiaWxpdHkgdGhhdAorCSAgICAgKiBpcyByZWFsbHkganVzdCBhbiBvcHRpbWl6YXRpb24gaGFjay4gIEFub3RoZXIgZ29vZCBjYW5kaWRhdGUgaXMKKwkgICAgICogYWNzYyBzaW5jZSBpdCBpcyBib3RoIGxvbmcgYW5kIHVudXNlZCBieSBCU0QgdGVybWNhcC4KKwkgICAgICovCisJICAgIGJvb2wgY2hhbmdlZCA9IEZBTFNFOworCisjaWYgTkNVUlNFU19YTkFNRVMKKwkgICAgLyoKKwkgICAgICogRXh0ZW5kZWQgbmFtZXMgYXJlIG1vc3QgbGlrZWx5IGZ1bmN0aW9uLWtleSBkZWZpbml0aW9ucy4gIERyb3AKKwkgICAgICogdGhvc2UgZmlyc3QuCisJICAgICAqLworCSAgICB1bnNpZ25lZCBuOworCSAgICBmb3IgKG4gPSBTVFJDT1VOVDsgbiA8IE5VTV9TVFJJTkdTKHR0ZXJtKTsgbisrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBFeHRTdHJuYW1lKHR0ZXJtLCBuLCBzdHJuYW1lcyk7CisKKwkJaWYgKFZBTElEX1NUUklORyh0dGVybS0+U3RyaW5nc1tuXSkpIHsKKwkJICAgIHNldF9hdHRyaWJ1dGVzID0gQUJTRU5UX1NUUklORzsKKwkJICAgIC8qIHdlIHJlbW92ZSBsb25nIG5hbWVzIGFueXdheSAtIG9ubHkgcmVwb3J0IHRoZSBzaG9ydCAqLworCQkgICAgaWYgKHN0cmxlbihuYW1lKSA8PSAyKSB7CisJCQlTSE9XX1dIWSgiIyAoJXMgcmVtb3ZlZCB0byBmaXQgZW50cnkgd2l0aGluICVkIGJ5dGVzKVxuIiwKKwkJCQkgbmFtZSwKKwkJCQkgY3JpdGxlbik7CisJCSAgICB9CisJCSAgICBjaGFuZ2VkID0gVFJVRTsKKwkJICAgIGlmICgobGVuID0gRk1UX0VOVFJZKCkpIDw9IGNyaXRsZW4pCisJCQlicmVhazsKKwkJfQorCSAgICB9CisjZW5kaWYKKwkgICAgaWYgKFZBTElEX1NUUklORyhzZXRfYXR0cmlidXRlcykpIHsKKwkJc2V0X2F0dHJpYnV0ZXMgPSBBQlNFTlRfU1RSSU5HOworCQlTSE9XX1dIWSgiIyAoc2dyIHJlbW92ZWQgdG8gZml0IGVudHJ5IHdpdGhpbiAlZCBieXRlcylcbiIsCisJCQkgY3JpdGxlbik7CisJCWNoYW5nZWQgPSBUUlVFOworCSAgICB9CisJICAgIGlmICghY2hhbmdlZCB8fCAoKGxlbiA9IEZNVF9FTlRSWSgpKSA+IGNyaXRsZW4pKSB7CisJCWlmIChwdXJnZWRfYWNzKHR0ZXJtKSkgeworCQkgICAgYWNzX2NoYXJzID0gQUJTRU5UX1NUUklORzsKKwkJICAgIFNIT1dfV0hZKCIjIChhY3NjIHJlbW92ZWQgdG8gZml0IGVudHJ5IHdpdGhpbiAlZCBieXRlcylcbiIsCisJCQkgICAgIGNyaXRsZW4pOworCQkgICAgY2hhbmdlZCA9IFRSVUU7CisJCX0KKwkgICAgfQorCSAgICBpZiAoIWNoYW5nZWQgfHwgKChsZW4gPSBGTVRfRU5UUlkoKSkgPiBjcml0bGVuKSkgeworCQlpbnQgb2xkdmVyc2lvbiA9IHR2ZXJzaW9uOworCisJCXR2ZXJzaW9uID0gVl9CU0Q7CisJCVNIT1dfV0hZKCIjICh0ZXJtaW5mby1vbmx5IGNhcGFiaWxpdGllcyBzdXBwcmVzc2VkIHRvIGZpdCBlbnRyeSB3aXRoaW4gJWQgYnl0ZXMpXG4iLAorCQkJIGNyaXRsZW4pOworCisJCWxlbiA9IEZNVF9FTlRSWSgpOworCQlpZiAobGVuID4gY3JpdGxlbgorCQkgICAgJiYga2lsbF9sYWJlbHModHRlcm0sIGxlbiAtIGNyaXRsZW4pKSB7CisJCSAgICBTSE9XX1dIWSgiIyAoc29tZSBsYWJlbHMgY2FwYWJpbGl0aWVzIHN1cHByZXNzZWQgdG8gZml0IGVudHJ5IHdpdGhpbiAlZCBieXRlcylcbiIsCisJCQkgICAgIGNyaXRsZW4pOworCQkgICAgbGVuID0gRk1UX0VOVFJZKCk7CisJCX0KKwkJaWYgKGxlbiA+IGNyaXRsZW4KKwkJICAgICYmIGtpbGxfZmtleXModHRlcm0sIGxlbiAtIGNyaXRsZW4pKSB7CisJCSAgICBTSE9XX1dIWSgiIyAoc29tZSBmdW5jdGlvbi1rZXkgY2FwYWJpbGl0aWVzIHN1cHByZXNzZWQgdG8gZml0IGVudHJ5IHdpdGhpbiAlZCBieXRlcylcbiIsCisJCQkgICAgIGNyaXRsZW4pOworCQkgICAgbGVuID0gRk1UX0VOVFJZKCk7CisJCX0KKwkJaWYgKGxlbiA+IGNyaXRsZW4pIHsKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAid2FybmluZzogJXMgZW50cnkgaXMgJWQgYnl0ZXMgbG9uZ1xuIiwKKwkJCQkgICBfbmNfZmlyc3RfbmFtZSh0dGVybS0+dGVybV9uYW1lcyksCisJCQkJICAgbGVuKTsKKwkJICAgIFNIT1dfV0hZKCIjIFdBUk5JTkc6IHRoaXMgZW50cnksICVkIGJ5dGVzIGxvbmcsIG1heSBjb3JlLWR1bXAgJXMgbGlicmFyaWVzIVxuIiwKKwkJCSAgICAgbGVuLCBsZWdlbmQpOworCQl9CisJCXR2ZXJzaW9uID0gb2xkdmVyc2lvbjsKKwkgICAgfQorCSAgICBzZXRfYXR0cmlidXRlcyA9IHNhdmVfc2dyOworCSAgICAqdHRlcm0gPSBzYXZlX3R0ZXJtOworCX0KKyAgICB9IGVsc2UgaWYgKCF2ZXJzaW9uX2ZpbHRlcihTVFJJTkcsIFNUUl9JRFgoYWNzX2NoYXJzKSkpIHsKKwlzYXZlX3R0ZXJtID0gKnR0ZXJtOworCWlmIChwdXJnZWRfYWNzKHR0ZXJtKSkgeworCSAgICBsZW4gPSBGTVRfRU5UUlkoKTsKKwl9CisJKnR0ZXJtID0gc2F2ZV90dGVybTsKKyAgICB9Cit9CisKK3ZvaWQKK2R1bXBfdXNlcyhjb25zdCBjaGFyICpuYW1lLCBib29sIGluZm9kdW1wKQorLyogZHVtcCAidXNlPSIgY2xhdXNlcyBpbiB0aGUgYXBwcm9wcmlhdGUgZm9ybWF0ICovCit7CisgICAgY2hhciBidWZmZXJbTUFYX1RFUk1JTkZPX0xFTkdUSF07CisKKyAgICBpZiAob3V0Zm9ybSA9PSBGX1RFUk1DQVAgfHwgb3V0Zm9ybSA9PSBGX1RDT05WRVJSKQorCXRyaW1fdHJhaWxpbmcoKTsKKyAgICAodm9pZCkgc3ByaW50ZihidWZmZXIsICIlcyVzIiwgaW5mb2R1bXAgPyAidXNlPSIgOiAidGM9IiwgbmFtZSk7CisgICAgd3JhcF9jb25jYXQoYnVmZmVyKTsKK30KKworaW50CitzaG93X2VudHJ5KHZvaWQpCit7CisgICAgdHJpbV90cmFpbGluZygpOworICAgICh2b2lkKSBmcHV0cyhvdXRidWYudGV4dCwgc3Rkb3V0KTsKKyAgICBwdXRjaGFyKCdcbicpOworICAgIHJldHVybiAoaW50KSBvdXRidWYudXNlZDsKK30KKwordm9pZAorY29tcGFyZV9lbnRyeSh2b2lkICgqaG9vaykgKFByZWRUeXBlIHQsIFByZWRJZHggaSwgY29uc3QgY2hhciAqbmFtZSksCisJICAgICAgVEVSTVRZUEUgKnRwIEdDQ19VTlVTRUQsCisJICAgICAgYm9vbCBxdWlldCkKKy8qIGNvbXBhcmUgdHdvIGVudHJpZXMgKi8KK3sKKyAgICBQcmVkSWR4IGksIGo7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpuYW1lOworCisgICAgaWYgKCFxdWlldCkKKwlmcHV0cygiICAgIGNvbXBhcmluZyBib29sZWFucy5cbiIsIHN0ZG91dCk7CisgICAgZm9yX2VhY2hfYm9vbGVhbihqLCB0cCkgeworCWkgPSBCb29sSW5kaXJlY3Qoaik7CisJbmFtZSA9IEV4dEJvb2xuYW1lKHRwLCBpLCBib29sX25hbWVzKTsKKworCWlmIChpc09ic29sZXRlKG91dGZvcm0sIG5hbWUpKQorCSAgICBjb250aW51ZTsKKworCSgqaG9vaykgKENNUF9CT09MRUFOLCBpLCBuYW1lKTsKKyAgICB9CisKKyAgICBpZiAoIXF1aWV0KQorCWZwdXRzKCIgICAgY29tcGFyaW5nIG51bWJlcnMuXG4iLCBzdGRvdXQpOworICAgIGZvcl9lYWNoX251bWJlcihqLCB0cCkgeworCWkgPSBOdW1JbmRpcmVjdChqKTsKKwluYW1lID0gRXh0TnVtbmFtZSh0cCwgaSwgbnVtX25hbWVzKTsKKworCWlmIChpc09ic29sZXRlKG91dGZvcm0sIG5hbWUpKQorCSAgICBjb250aW51ZTsKKworCSgqaG9vaykgKENNUF9OVU1CRVIsIGksIG5hbWUpOworICAgIH0KKworICAgIGlmICghcXVpZXQpCisJZnB1dHMoIiAgICBjb21wYXJpbmcgc3RyaW5ncy5cbiIsIHN0ZG91dCk7CisgICAgZm9yX2VhY2hfc3RyaW5nKGosIHRwKSB7CisJaSA9IFN0ckluZGlyZWN0KGopOworCW5hbWUgPSBFeHRTdHJuYW1lKHRwLCBpLCBzdHJfbmFtZXMpOworCisJaWYgKGlzT2Jzb2xldGUob3V0Zm9ybSwgbmFtZSkpCisJICAgIGNvbnRpbnVlOworCisJKCpob29rKSAoQ01QX1NUUklORywgaSwgbmFtZSk7CisgICAgfQorCisgICAgLyogKHZvaWQpIGZwdXRzKCIgICAgY29tcGFyaW5nIHVzZSBlbnRyaWVzLlxuIiwgc3Rkb3V0KTsgKi8KKyAgICAoKmhvb2spIChDTVBfVVNFLCAwLCAidXNlIik7CisKK30KKworI2RlZmluZSBOT1RTRVQocykJKChzKSA9PSAwKQorCisvKgorICogVGhpcyBiaXQgb2YgbGVnZXJkZW1haW4gdHVybnMgYWxsIHRoZSB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lcyBpbnRvCisgKiByZWZlcmVuY2VzIHRvIGxvY2F0aW9ucyBpbiB0aGUgYXJyYXlzIEJvb2xlYW5zLCBOdW1iZXJzLCBhbmQgU3RyaW5ncyAtLS0KKyAqIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkLgorICovCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiB0cC0+CisKK3N0YXRpYyB2b2lkCitzZXRfb2Jzb2xldGVfdGVybWNhcHMoVEVSTVRZUEUgKnRwKQoreworI2luY2x1ZGUgImNhcGRlZmF1bHRzLmMiCit9CisKKy8qCisgKiBDb252ZXJ0IGFuIGFsdGVybmF0ZS1jaGFyYWN0ZXItc2V0IHN0cmluZyB0byBjYW5vbmljYWwgZm9ybTogc29ydGVkIGFuZAorICogdW5pcXVlLgorICovCit2b2lkCityZXBhaXJfYWNzYyhURVJNVFlQRSAqdHApCit7CisgICAgaWYgKFZBTElEX1NUUklORyhhY3NfY2hhcnMpKSB7CisJc2l6ZV90IG4sIG07CisJY2hhciBtYXBwZWRbMjU2XTsKKwljaGFyIGV4dHJhID0gMDsKKwl1bnNpZ25lZCBzb3VyY2U7CisJdW5zaWduZWQgdGFyZ2V0OworCWJvb2wgZml4X25lZWRlZCA9IEZBTFNFOworCisJZm9yIChuID0gMCwgc291cmNlID0gMDsgYWNzX2NoYXJzW25dICE9IDA7IG4rKykgeworCSAgICB0YXJnZXQgPSBVQ2hhcihhY3NfY2hhcnNbbl0pOworCSAgICBpZiAoc291cmNlID49IHRhcmdldCkgeworCQlmaXhfbmVlZGVkID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgc291cmNlID0gdGFyZ2V0OworCSAgICBpZiAoYWNzX2NoYXJzW24gKyAxXSkKKwkJbisrOworCX0KKwlpZiAoZml4X25lZWRlZCkgeworCSAgICBtZW1zZXQobWFwcGVkLCAwLCBzaXplb2YobWFwcGVkKSk7CisJICAgIGZvciAobiA9IDA7IGFjc19jaGFyc1tuXSAhPSAwOyBuKyspIHsKKwkJc291cmNlID0gVUNoYXIoYWNzX2NoYXJzW25dKTsKKwkJaWYgKCh0YXJnZXQgPSAodW5zaWduZWQgY2hhcikgYWNzX2NoYXJzW24gKyAxXSkgIT0gMCkgeworCQkgICAgbWFwcGVkW3NvdXJjZV0gPSAoY2hhcikgdGFyZ2V0OworCQkgICAgbisrOworCQl9IGVsc2UgeworCQkgICAgZXh0cmEgPSAoY2hhcikgc291cmNlOworCQl9CisJICAgIH0KKwkgICAgZm9yIChuID0gbSA9IDA7IG4gPCBzaXplb2YobWFwcGVkKTsgbisrKSB7CisJCWlmIChtYXBwZWRbbl0pIHsKKwkJICAgIGFjc19jaGFyc1ttKytdID0gKGNoYXIpIG47CisJCSAgICBhY3NfY2hhcnNbbSsrXSA9IG1hcHBlZFtuXTsKKwkJfQorCSAgICB9CisJICAgIGlmIChleHRyYSkKKwkJYWNzX2NoYXJzW20rK10gPSBleHRyYTsJCS8qIGdhcmJhZ2UgaW4sIGdhcmJhZ2Ugb3V0ICovCisJICAgIGFjc19jaGFyc1ttXSA9IDA7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Byb2dzL2R1bXBfZW50cnkuaCBiL3Byb2dzL2R1bXBfZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTlhMzdhCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3MvZHVtcF9lbnRyeS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKgorICogJElkOiBkdW1wX2VudHJ5LmgsdiAxLjMwIDIwMDgvMDcvMTIgMjA6MjM6MDMgdG9tIEV4cCAkCisgKgorICogRHVtcCBjb250cm9sIGRlZmluaXRpb25zIGFuZCB2YXJpYWJsZXMKKyAqLworCisjaWZuZGVmIERVTVBfRU5UUllfSAorI2RlZmluZSBEVU1QX0VOVFJZX0ggMQorCisvKiBjYXBhYmlsaXR5IG91dHB1dCBmb3JtYXRzICovCisjZGVmaW5lIEZfVEVSTUlORk8JMAkvKiB1c2UgdGVybWluZm8gbmFtZXMgKi8KKyNkZWZpbmUgRl9WQVJJQUJMRQkxCS8qIHVzZSBDIHZhcmlhYmxlIG5hbWVzICovCisjZGVmaW5lIEZfVEVSTUNBUAkyCS8qIHRlcm1jYXAgbmFtZXMgd2l0aCBjYXBhYmlsaXR5IGNvbnZlcnNpb24gKi8KKyNkZWZpbmUgRl9UQ09OVkVSUgkzCS8qIGFzIFRfVEVSTUNBUCwgbm8gc2tpcCBvZiB1bnRyYW5zbGF0YWJsZXMgKi8KKyNkZWZpbmUgRl9MSVRFUkFMCTQJLyogbGlrZSBGX1RFUk1JTkZPLCBidXQgbm8gc21hcnQgZGVmYXVsdHMgKi8KKworLyogY2FwYWJpbGl0eSBzb3J0IG1vZGVzICovCisjZGVmaW5lIFNfREVGQVVMVAkwCS8qIHNvcnQgYnkgdGVybWluZm8gbmFtZSAoaW1wbGljaXQpICovCisjZGVmaW5lIFNfTk9TT1JUCTEJLyogZG9uJ3Qgc29ydCAqLworI2RlZmluZSBTX1RFUk1JTkZPCTIJLyogc29ydCBieSB0ZXJtaW5mbyBuYW1lcyAoZXhwbGljaXQpICovCisjZGVmaW5lIFNfVkFSSUFCTEUJMwkvKiBzb3J0IGJ5IEMgdmFyaWFibGUgbmFtZXMgKi8KKyNkZWZpbmUgU19URVJNQ0FQCTQJLyogc29ydCBieSB0ZXJtY2FwIG5hbWVzICovCisKKy8qIGNhcGFiaWxpdHkgdHlwZXMgZm9yIHRoZSBjb21wYXJpc29uIGhvb2sgKi8KKyNkZWZpbmUgQ01QX0JPT0xFQU4JMAkvKiBjb21wYXJpc29uIG9uIGJvb2xlYW5zICovCisjZGVmaW5lIENNUF9OVU1CRVIJMQkvKiBjb21wYXJpc29uIG9uIG51bWVyaWNzICovCisjZGVmaW5lIENNUF9TVFJJTkcJMgkvKiBjb21wYXJpc29uIG9uIHN0cmluZ3MgKi8KKyNkZWZpbmUgQ01QX1VTRQkJMwkvKiBjb21wYXJpc29uIG9uIHVzZSBjYXBhYmlsaXRpZXMgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBQcmVkVHlwZTsKK3R5cGVkZWYgdW5zaWduZWQgUHJlZElkeDsKK3R5cGVkZWYgaW50ICgqUHJlZEZ1bmMpKFByZWRUeXBlLCBQcmVkSWR4KTsKKworZXh0ZXJuIE5DVVJTRVNfQ09OU1QgY2hhciAqbmFtZXRyYW5zKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGZtdF9lbnRyeShURVJNVFlQRSAqLCBQcmVkRnVuYywgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKK2V4dGVybiBpbnQgc2hvd19lbnRyeSh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbXBhcmVfZW50cnkodm9pZCAoKikoUHJlZFR5cGUsIFByZWRJZHgsIGNvbnN0IGNoYXIgKiksIFRFUk1UWVBFICosIGJvb2wpOworZXh0ZXJuIHZvaWQgZHVtcF9lbnRyeShURVJNVFlQRSAqLCBib29sLCBib29sLCBpbnQsIFByZWRGdW5jKTsKK2V4dGVybiB2b2lkIGR1bXBfaW5pdChjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCBkdW1wX3VzZXMoY29uc3QgY2hhciAqLCBib29sKTsKK2V4dGVybiB2b2lkIHJlcGFpcl9hY3NjKFRFUk1UWVBFICogdHApOworCisjZGVmaW5lIEZBSUwJLTEKKworI2VuZGlmIC8qIERVTVBfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3MvaW5mb2NtcC5jIGIvcHJvZ3MvaW5mb2NtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTg5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncy9pbmZvY21wLmMKQEAgLTAsMCArMSwxNjUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglpbmZvY21wLmMgLS0gZGVjb21waWxlIGFuIGVudHJ5LCBvciBjb21wYXJlIHR3byBlbnRyaWVzCisgKgkJd3JpdHRlbiBieSBFcmljIFMuIFJheW1vbmQKKyAqCQlhbmQgVGhvbWFzIEUgRGlja2V5CisgKi8KKworI2luY2x1ZGUgPHByb2dzLnByaXYuaD4KKworI2luY2x1ZGUgPGR1bXBfZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGluZm9jbXAuYyx2IDEuMTAzIDIwMDgvMDgvMTYgMjI6MDQ6NTYgdG9tIEV4cCAkIikKKworI2RlZmluZSBMX0NVUkwgInsiCisjZGVmaW5lIFJfQ1VSTCAifSIKKworI2RlZmluZSBNQVhfU1RSSU5HCTEwMjQJLyogbWF4aW11bSBmb3JtYXR0ZWQgc3RyaW5nICovCisKK2NvbnN0IGNoYXIgKl9uY19wcm9nbmFtZSA9ICJpbmZvY21wIjsKKwordHlwZWRlZiBjaGFyIHBhdGhbUEFUSF9NQVhdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIGZvbGxvd2luZyBjb250cm9sIHZhcmlhYmxlcywgdG9nZXRoZXIgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlCisgKiB0ZXJtaW5mbyBlbnRyaWVzLCBjb21wbGV0ZWx5IGRldGVybWluZSB0aGUgYWN0aW9ucyBvZiB0aGUgcHJvZ3JhbS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgRU5UUlkgKmVudHJpZXM7CQkvKiB0ZXJtaW5mbyBlbnRyaWVzICovCitzdGF0aWMgaW50IHRlcm1jb3VudDsJCS8qIGNvdW50IG9mIHRlcm1pbmFsIGVudHJpZXMgKi8KKworc3RhdGljIGJvb2wgbGltaXRlZCA9IFRSVUU7CS8qICItciIgb3B0aW9uIGlzIG5vdCBzZXQgKi8KK3N0YXRpYyBib29sIHF1aWV0ID0gRkFMU0U7CitzdGF0aWMgYm9vbCBsaXRlcmFsID0gRkFMU0U7CitzdGF0aWMgY29uc3QgY2hhciAqYm9vbF9zZXAgPSAiOiI7CitzdGF0aWMgY29uc3QgY2hhciAqc19hYnNlbnQgPSAiTlVMTCI7CitzdGF0aWMgY29uc3QgY2hhciAqc19jYW5jZWwgPSAiTlVMTCI7CitzdGF0aWMgY29uc3QgY2hhciAqdHZlcnNpb247CS8qIHRlcm1pbmZvIHZlcnNpb24gc2VsZWN0ZWQgKi8KK3N0YXRpYyBpbnQgaXRyYWNlOwkJLyogdHJhY2UgZmxhZyBmb3IgZGVidWdnaW5nICovCitzdGF0aWMgaW50IG13aWR0aCA9IDYwOworc3RhdGljIGludCBudW1iZXJzID0gMDsJCS8qIGZvcm1hdCAiJSdjaGFyJyIgdG8vZnJvbSAiJXtudW1iZXJ9IiAqLworc3RhdGljIGludCBvdXRmb3JtID0gRl9URVJNSU5GTzsJLyogb3V0cHV0IGZvcm1hdCAqLworc3RhdGljIGludCBzb3J0bW9kZTsJCS8qIHNvcnRfbW9kZSAqLworCisvKiBtYWluIGNvbXBhcmlzb24gbW9kZSAqLworc3RhdGljIGludCBjb21wYXJlOworI2RlZmluZSBDX0RFRkFVTFQJMAkvKiBkb24ndCBmb3JjZSBjb21wYXJpc29uIG1vZGUgKi8KKyNkZWZpbmUgQ19ESUZGRVJFTkNFCTEJLyogbGlzdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byB0ZXJtaW5hbHMgKi8KKyNkZWZpbmUgQ19DT01NT04JMgkvKiBsaXN0IGNvbW1vbiBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgQ19OQU5ECQkzCS8qIGxpc3QgY2FwYWJpbGl0aWVzIGluIG5laXRoZXIgdGVybWluYWwgKi8KKyNkZWZpbmUgQ19VU0VBTEwJNAkvKiBnZW5lcmF0ZSByZWxhdGl2ZSB1c2UtZm9ybSBlbnRyeSAqLworc3RhdGljIGJvb2wgaWdub3JlcGFkczsJCS8qIGlnbm9yZSBwYWQgcHJlZml4ZXMgd2hlbiBkaWZmaW5nICovCisKKyNpZiBOT19MRUFLUworI3VuZGVmIEV4aXRQcm9ncmFtCitzdGF0aWMgdm9pZCBFeGl0UHJvZ3JhbShpbnQgY29kZSkgR0NDX05PUkVUVVJOOworLyogcHJvdG90eXBlIGlzIHRvIGdldCBnY2MgdG8gYWNjZXB0IHRoZSBub3JldHVybiBhdHRyaWJ1dGUgKi8KK3N0YXRpYyB2b2lkCitFeGl0UHJvZ3JhbShpbnQgY29kZSkKK3sKKyAgICB3aGlsZSAodGVybWNvdW50LS0gPiAwKQorCV9uY19mcmVlX3Rlcm10eXBlKCZlbnRyaWVzW3Rlcm1jb3VudF0udHRlcm0pOworICAgIF9uY19sZWFrc19kdW1wX2VudHJ5KCk7CisgICAgZnJlZShlbnRyaWVzKTsKKyAgICBfbmNfZnJlZV90aWMoY29kZSk7Cit9CisjZW5kaWYKKworc3RhdGljIGNoYXIgKgorY2Fub25pY2FsX25hbWUoY2hhciAqcHRyLCBjaGFyICpidWYpCisvKiBleHRyYWN0IHRoZSB0ZXJtaW5hbCB0eXBlJ3MgcHJpbWFyeSBuYW1lICovCit7CisgICAgY2hhciAqYnA7CisKKyAgICAodm9pZCkgc3RyY3B5KGJ1ZiwgcHRyKTsKKyAgICBpZiAoKGJwID0gc3RyY2hyKGJ1ZiwgJ3wnKSkgIT0gMCkKKwkqYnAgPSAnXDAnOworCisgICAgcmV0dXJuIChidWYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUHJlZGljYXRlcyBmb3IgZHVtcCBmdW5jdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK2NhcGNtcChQcmVkSWR4IGlkeCwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKKy8qIGNhcGFiaWxpdHkgY29tcGFyaXNvbiBmdW5jdGlvbiAqLworeworICAgIGlmICghVkFMSURfU1RSSU5HKHMpICYmICFWQUxJRF9TVFJJTkcodCkpCisJcmV0dXJuIChzICE9IHQpOworICAgIGVsc2UgaWYgKCFWQUxJRF9TVFJJTkcocykgfHwgIVZBTElEX1NUUklORyh0KSkKKwlyZXR1cm4gKDEpOworCisgICAgaWYgKChpZHggPT0gYWNzX2NoYXJzX2luZGV4KSB8fCAhaWdub3JlcGFkcykKKwlyZXR1cm4gKHN0cmNtcChzLCB0KSk7CisgICAgZWxzZQorCXJldHVybiAoX25jX2NhcGNtcChzLCB0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzZV9wcmVkaWNhdGUodW5zaWduZWQgdHlwZSwgUHJlZElkeCBpZHgpCisvKiBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdXNlIGZvciB1c2UgZGVjb21waWxhdGlvbiAqLworeworICAgIEVOVFJZICplcDsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQk9PTEVBTjoKKwl7CisJICAgIGludCBpc19zZXQgPSBGQUxTRTsKKworCSAgICAvKgorCSAgICAgKiBUaGlzIGFzc3VtZXMgdGhhdCBtdWx0aXBsZSB1c2UgZW50cmllcyBhcmUgc3VwcG9zZWQKKwkgICAgICogdG8gY29udHJpYnV0ZSB0aGUgbG9naWNhbCBvciBvZiB0aGVpciBib29sZWFuIGNhcGFiaWxpdGllcy4KKwkgICAgICogVGhpcyBpcyB0cnVlIGlmIHdlIHRha2UgdGhlIHNlbWFudGljcyBvZiBtdWx0aXBsZSB1c2VzIHRvCisJICAgICAqIGJlICdlYWNoIGNhcGFiaWxpdHkgZ2V0cyB0aGUgZmlyc3Qgbm9uLWRlZmF1bHQgdmFsdWUgZm91bmQKKwkgICAgICogaW4gdGhlIHNlcXVlbmNlIG9mIHVzZSBlbnRyaWVzJy4KKwkgICAgICoKKwkgICAgICogTm90ZSB0aGF0IGNhbmNlbGxlZCBvciBhYnNlbnQgYm9vbGVhbnMgYXJlIHN0b3JlZCBhcyBGQUxTRSwKKwkgICAgICogdW5saWtlIG51bWJlcnMgYW5kIHN0cmluZ3MsIHdob3NlIGNhbmNlbGxlZC9hYnNlbnQgc3RhdGUgaXMKKwkgICAgICogcmVjb3JkZWQgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorCSAgICAgKi8KKwkgICAgZm9yIChlcCA9ICZlbnRyaWVzWzFdOyBlcCA8IGVudHJpZXMgKyB0ZXJtY291bnQ7IGVwKyspCisJCWlmIChlcC0+dHRlcm0uQm9vbGVhbnNbaWR4XSA9PSBUUlVFKSB7CisJCSAgICBpc19zZXQgPSBlbnRyaWVzWzBdLnR0ZXJtLkJvb2xlYW5zW2lkeF07CisJCSAgICBicmVhazsKKwkJfQorCSAgICBpZiAoaXNfc2V0ICE9IGVudHJpZXNbMF0udHRlcm0uQm9vbGVhbnNbaWR4XSkKKwkJcmV0dXJuICghaXNfc2V0KTsKKwkgICAgZWxzZQorCQlyZXR1cm4gKEZBSUwpOworCX0KKworICAgIGNhc2UgTlVNQkVSOgorCXsKKwkgICAgaW50IHZhbHVlID0gQUJTRU5UX05VTUVSSUM7CisKKwkgICAgLyoKKwkgICAgICogV2UgdGFrZSB0aGUgc2VtYW50aWNzIG9mIG11bHRpcGxlIHVzZXMgdG8gYmUgJ2VhY2gKKwkgICAgICogY2FwYWJpbGl0eSBnZXRzIHRoZSBmaXJzdCBub24tZGVmYXVsdCB2YWx1ZSBmb3VuZAorCSAgICAgKiBpbiB0aGUgc2VxdWVuY2Ugb2YgdXNlIGVudHJpZXMnLgorCSAgICAgKi8KKwkgICAgZm9yIChlcCA9ICZlbnRyaWVzWzFdOyBlcCA8IGVudHJpZXMgKyB0ZXJtY291bnQ7IGVwKyspCisJCWlmIChWQUxJRF9OVU1FUklDKGVwLT50dGVybS5OdW1iZXJzW2lkeF0pKSB7CisJCSAgICB2YWx1ZSA9IGVwLT50dGVybS5OdW1iZXJzW2lkeF07CisJCSAgICBicmVhazsKKwkJfQorCisJICAgIGlmICh2YWx1ZSAhPSBlbnRyaWVzWzBdLnR0ZXJtLk51bWJlcnNbaWR4XSkKKwkJcmV0dXJuICh2YWx1ZSAhPSBBQlNFTlRfTlVNRVJJQyk7CisJICAgIGVsc2UKKwkJcmV0dXJuIChGQUlMKTsKKwl9CisKKyAgICBjYXNlIFNUUklORzoKKwl7CisJICAgIGNoYXIgKnRlcm1zdHIsICp1c2VzdHIgPSBBQlNFTlRfU1RSSU5HOworCisJICAgIHRlcm1zdHIgPSBlbnRyaWVzWzBdLnR0ZXJtLlN0cmluZ3NbaWR4XTsKKworCSAgICAvKgorCSAgICAgKiBXZSB0YWtlIHRoZSBzZW1hbnRpY3Mgb2YgbXVsdGlwbGUgdXNlcyB0byBiZSAnZWFjaAorCSAgICAgKiBjYXBhYmlsaXR5IGdldHMgdGhlIGZpcnN0IG5vbi1kZWZhdWx0IHZhbHVlIGZvdW5kCisJICAgICAqIGluIHRoZSBzZXF1ZW5jZSBvZiB1c2UgZW50cmllcycuCisJICAgICAqLworCSAgICBmb3IgKGVwID0gJmVudHJpZXNbMV07IGVwIDwgZW50cmllcyArIHRlcm1jb3VudDsgZXArKykKKwkJaWYgKGVwLT50dGVybS5TdHJpbmdzW2lkeF0pIHsKKwkJICAgIHVzZXN0ciA9IGVwLT50dGVybS5TdHJpbmdzW2lkeF07CisJCSAgICBicmVhazsKKwkJfQorCisJICAgIGlmICh1c2VzdHIgPT0gQUJTRU5UX1NUUklORyAmJiB0ZXJtc3RyID09IEFCU0VOVF9TVFJJTkcpCisJCXJldHVybiAoRkFJTCk7CisJICAgIGVsc2UgaWYgKCF1c2VzdHIgfHwgIXRlcm1zdHIgfHwgY2FwY21wKGlkeCwgdXNlc3RyLCB0ZXJtc3RyKSkKKwkJcmV0dXJuIChUUlVFKTsKKwkgICAgZWxzZQorCQlyZXR1cm4gKEZBSUwpOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gKEZBTFNFKTsJCS8qIHBhY2lmeSBjb21waWxlciAqLworfQorCitzdGF0aWMgYm9vbAordXNlZXEoRU5UUlkgKiBlMSwgRU5UUlkgKiBlMikKKy8qIGFyZSB0aGUgdXNlIHJlZmVyZW5jZXMgaW4gdHdvIGVudHJpZXMgZXF1aXZhbGVudD8gKi8KK3sKKyAgICB1bnNpZ25lZCBpLCBqOworCisgICAgaWYgKGUxLT5udXNlcyAhPSBlMi0+bnVzZXMpCisJcmV0dXJuIChGQUxTRSk7CisKKyAgICAvKiBVZ2guLi50aGlzIGlzIHF1YWRyYXRpYyBhZ2FpbiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBlMS0+bnVzZXM7IGkrKykgeworCWJvb2wgZm91bmRtYXRjaCA9IEZBTFNFOworCisJLyogc2VhcmNoIHNlY29uZCBlbnRyeSBmb3IgZ2l2ZW4gdXNlIHJlZmVyZW5jZSAqLworCWZvciAoaiA9IDA7IGogPCBlMi0+bnVzZXM7IGorKykKKwkgICAgaWYgKCFzdHJjbXAoZTEtPnVzZXNbaV0ubmFtZSwgZTItPnVzZXNbal0ubmFtZSkpIHsKKwkJZm91bmRtYXRjaCA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CisKKwlpZiAoIWZvdW5kbWF0Y2gpCisJICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiAoVFJVRSk7Cit9CisKK3N0YXRpYyBib29sCitlbnRyeWVxKFRFUk1UWVBFICp0MSwgVEVSTVRZUEUgKnQyKQorLyogYXJlIHR3byBlbnRyaWVzIGVxdWl2YWxlbnQ/ICovCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQk9PTEVBTlModDEpOyBpKyspCisJaWYgKHQxLT5Cb29sZWFuc1tpXSAhPSB0Mi0+Qm9vbGVhbnNbaV0pCisJICAgIHJldHVybiAoRkFMU0UpOworCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9OVU1CRVJTKHQxKTsgaSsrKQorCWlmICh0MS0+TnVtYmVyc1tpXSAhPSB0Mi0+TnVtYmVyc1tpXSkKKwkgICAgcmV0dXJuIChGQUxTRSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NUUklOR1ModDEpOyBpKyspCisJaWYgKGNhcGNtcCgoUHJlZElkeCkgaSwgdDEtPlN0cmluZ3NbaV0sIHQyLT5TdHJpbmdzW2ldKSkKKwkgICAgcmV0dXJuIChGQUxTRSk7CisKKyAgICByZXR1cm4gKFRSVUUpOworfQorCisjZGVmaW5lIFRJQ19FWFBBTkQocmVzdWx0KSBfbmNfdGljX2V4cGFuZChyZXN1bHQsIG91dGZvcm09PUZfVEVSTUlORk8sIG51bWJlcnMpCisKK3N0YXRpYyB2b2lkCitwcmludF91c2VzKEVOVFJZICogZXAsIEZJTEUgKmZwKQorLyogcHJpbnQgYW4gZW50cnkncyB1c2UgcmVmZXJlbmNlcyAqLworeworICAgIHVuc2lnbmVkIGk7CisKKyAgICBpZiAoIWVwLT5udXNlcykKKwlmcHV0cygiTlVMTCIsIGZwKTsKKyAgICBlbHNlCisJZm9yIChpID0gMDsgaSA8IGVwLT5udXNlczsgaSsrKSB7CisJICAgIGZwdXRzKGVwLT51c2VzW2ldLm5hbWUsIGZwKTsKKwkgICAgaWYgKGkgPCBlcC0+bnVzZXMgLSAxKQorCQlmcHV0cygiICIsIGZwKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2R1bXBfYm9vbGVhbihpbnQgdmFsKQorLyogZGlzcGxheSB0aGUgdmFsdWUgb2YgYSBib29sZWFuIGNhcGFiaWxpdHkgKi8KK3sKKyAgICBzd2l0Y2ggKHZhbCkgeworICAgIGNhc2UgQUJTRU5UX0JPT0xFQU46CisJcmV0dXJuIChzX2Fic2VudCk7CisgICAgY2FzZSBDQU5DRUxMRURfQk9PTEVBTjoKKwlyZXR1cm4gKHNfY2FuY2VsKTsKKyAgICBjYXNlIEZBTFNFOgorCXJldHVybiAoIkYiKTsKKyAgICBjYXNlIFRSVUU6CisJcmV0dXJuICgiVCIpOworICAgIGRlZmF1bHQ6CisJcmV0dXJuICgiPyIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2R1bXBfbnVtZXJpYyhpbnQgdmFsLCBjaGFyICpidWYpCisvKiBkaXNwbGF5IHRoZSB2YWx1ZSBvZiBhIGJvb2xlYW4gY2FwYWJpbGl0eSAqLworeworICAgIHN3aXRjaCAodmFsKSB7CisgICAgY2FzZSBBQlNFTlRfTlVNRVJJQzoKKwlzdHJjcHkoYnVmLCBzX2Fic2VudCk7CisJYnJlYWs7CisgICAgY2FzZSBDQU5DRUxMRURfTlVNRVJJQzoKKwlzdHJjcHkoYnVmLCBzX2NhbmNlbCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgdmFsKTsKKwlicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitkdW1wX3N0cmluZyhjaGFyICp2YWwsIGNoYXIgKmJ1ZikKKy8qIGRpc3BsYXkgdGhlIHZhbHVlIG9mIGEgc3RyaW5nIGNhcGFiaWxpdHkgKi8KK3sKKyAgICBpZiAodmFsID09IEFCU0VOVF9TVFJJTkcpCisJc3RyY3B5KGJ1Ziwgc19hYnNlbnQpOworICAgIGVsc2UgaWYgKHZhbCA9PSBDQU5DRUxMRURfU1RSSU5HKQorCXN0cmNweShidWYsIHNfY2FuY2VsKTsKKyAgICBlbHNlIHsKKwlzcHJpbnRmKGJ1ZiwgIiclLipzJyIsIE1BWF9TVFJJTkcgLSAzLCBUSUNfRVhQQU5EKHZhbCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2NvbXBhcmVfcHJlZGljYXRlKFByZWRUeXBlIHR5cGUsIFByZWRJZHggaWR4LCBjb25zdCBjaGFyICpuYW1lKQorLyogcHJlZGljYXRlIGZ1bmN0aW9uIHRvIHVzZSBmb3IgZW50cnkgZGlmZmVyZW5jZSByZXBvcnRzICovCit7CisgICAgcmVnaXN0ZXIgRU5UUlkgKmUxID0gJmVudHJpZXNbMF07CisgICAgcmVnaXN0ZXIgRU5UUlkgKmUyID0gJmVudHJpZXNbMV07CisgICAgY2hhciBidWYxW01BWF9TVFJJTkddLCBidWYyW01BWF9TVFJJTkddOworICAgIGludCBiMSwgYjI7CisgICAgaW50IG4xLCBuMjsKKyAgICBjaGFyICpzMSwgKnMyOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDTVBfQk9PTEVBTjoKKwliMSA9IGUxLT50dGVybS5Cb29sZWFuc1tpZHhdOworCWIyID0gZTItPnR0ZXJtLkJvb2xlYW5zW2lkeF07CisJc3dpdGNoIChjb21wYXJlKSB7CisJY2FzZSBDX0RJRkZFUkVOQ0U6CisJICAgIGlmICghKGIxID09IEFCU0VOVF9CT09MRUFOICYmIGIyID09IEFCU0VOVF9CT09MRUFOKSAmJiBiMSAhPSBiMikKKwkJKHZvaWQpIHByaW50ZigiXHQlczogJXMlcyVzLlxuIiwKKwkJCSAgICAgIG5hbWUsCisJCQkgICAgICBkdW1wX2Jvb2xlYW4oYjEpLAorCQkJICAgICAgYm9vbF9zZXAsCisJCQkgICAgICBkdW1wX2Jvb2xlYW4oYjIpKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENfQ09NTU9OOgorCSAgICBpZiAoYjEgPT0gYjIgJiYgYjEgIT0gQUJTRU5UX0JPT0xFQU4pCisJCSh2b2lkKSBwcmludGYoIlx0JXM9ICVzLlxuIiwgbmFtZSwgZHVtcF9ib29sZWFuKGIxKSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDX05BTkQ6CisJICAgIGlmIChiMSA9PSBBQlNFTlRfQk9PTEVBTiAmJiBiMiA9PSBBQlNFTlRfQk9PTEVBTikKKwkJKHZvaWQpIHByaW50ZigiXHQhJXMuXG4iLCBuYW1lKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBDTVBfTlVNQkVSOgorCW4xID0gZTEtPnR0ZXJtLk51bWJlcnNbaWR4XTsKKwluMiA9IGUyLT50dGVybS5OdW1iZXJzW2lkeF07CisJZHVtcF9udW1lcmljKG4xLCBidWYxKTsKKwlkdW1wX251bWVyaWMobjIsIGJ1ZjIpOworCXN3aXRjaCAoY29tcGFyZSkgeworCWNhc2UgQ19ESUZGRVJFTkNFOgorCSAgICBpZiAoISgobjEgPT0gQUJTRU5UX05VTUVSSUMgJiYgbjIgPT0gQUJTRU5UX05VTUVSSUMpKSAmJiBuMSAhPSBuMikKKwkJKHZvaWQpIHByaW50ZigiXHQlczogJXMsICVzLlxuIiwgbmFtZSwgYnVmMSwgYnVmMik7CisJICAgIGJyZWFrOworCisJY2FzZSBDX0NPTU1PTjoKKwkgICAgaWYgKG4xICE9IEFCU0VOVF9OVU1FUklDICYmIG4yICE9IEFCU0VOVF9OVU1FUklDICYmIG4xID09IG4yKQorCQkodm9pZCkgcHJpbnRmKCJcdCVzPSAlcy5cbiIsIG5hbWUsIGJ1ZjEpOworCSAgICBicmVhazsKKworCWNhc2UgQ19OQU5EOgorCSAgICBpZiAobjEgPT0gQUJTRU5UX05VTUVSSUMgJiYgbjIgPT0gQUJTRU5UX05VTUVSSUMpCisJCSh2b2lkKSBwcmludGYoIlx0ISVzLlxuIiwgbmFtZSk7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKKworICAgIGNhc2UgQ01QX1NUUklORzoKKwlzMSA9IGUxLT50dGVybS5TdHJpbmdzW2lkeF07CisJczIgPSBlMi0+dHRlcm0uU3RyaW5nc1tpZHhdOworCXN3aXRjaCAoY29tcGFyZSkgeworCWNhc2UgQ19ESUZGRVJFTkNFOgorCSAgICBpZiAoY2FwY21wKGlkeCwgczEsIHMyKSkgeworCQlkdW1wX3N0cmluZyhzMSwgYnVmMSk7CisJCWR1bXBfc3RyaW5nKHMyLCBidWYyKTsKKwkJaWYgKHN0cmNtcChidWYxLCBidWYyKSkKKwkJICAgICh2b2lkKSBwcmludGYoIlx0JXM6ICVzLCAlcy5cbiIsIG5hbWUsIGJ1ZjEsIGJ1ZjIpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBDX0NPTU1PTjoKKwkgICAgaWYgKHMxICYmIHMyICYmICFjYXBjbXAoaWR4LCBzMSwgczIpKQorCQkodm9pZCkgcHJpbnRmKCJcdCVzPSAnJXMnLlxuIiwgbmFtZSwgVElDX0VYUEFORChzMSkpOworCSAgICBicmVhazsKKworCWNhc2UgQ19OQU5EOgorCSAgICBpZiAoIXMxICYmICFzMikKKwkJKHZvaWQpIHByaW50ZigiXHQhJXMuXG4iLCBuYW1lKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBDTVBfVVNFOgorCS8qIHVubGlrZSB0aGUgb3RoZXIgbW9kZXMsIHRoaXMgY29tcGFyZXMgKmFsbCogdXNlIGVudHJpZXMgKi8KKwlzd2l0Y2ggKGNvbXBhcmUpIHsKKwljYXNlIENfRElGRkVSRU5DRToKKwkgICAgaWYgKCF1c2VlcShlMSwgZTIpKSB7CisJCSh2b2lkKSBmcHV0cygiXHR1c2U6ICIsIHN0ZG91dCk7CisJCXByaW50X3VzZXMoZTEsIHN0ZG91dCk7CisJCWZwdXRzKCIsICIsIHN0ZG91dCk7CisJCXByaW50X3VzZXMoZTIsIHN0ZG91dCk7CisJCWZwdXRzKCIuXG4iLCBzdGRvdXQpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBDX0NPTU1PTjoKKwkgICAgaWYgKGUxLT5udXNlcyAmJiBlMi0+bnVzZXMgJiYgdXNlZXEoZTEsIGUyKSkgeworCQkodm9pZCkgZnB1dHMoIlx0dXNlOiAiLCBzdGRvdXQpOworCQlwcmludF91c2VzKGUxLCBzdGRvdXQpOworCQlmcHV0cygiLlxuIiwgc3Rkb3V0KTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgQ19OQU5EOgorCSAgICBpZiAoIWUxLT5udXNlcyAmJiAhZTItPm51c2VzKQorCQkodm9pZCkgcHJpbnRmKCJcdCF1c2UuXG4iKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEluaXQgc3RyaW5nIGFuYWx5c2lzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmZyb207CisgICAgY29uc3QgY2hhciAqdG87Cit9IGFzc29jOworCitzdGF0aWMgY29uc3QgYXNzb2Mgc3RkX2NhcHNbXSA9Cit7CisgICAgLyogdGhlc2UgYXJlIHNwZWNpZmllZCBieSBYLjM2NCBhbmQgaUJDUzIgKi8KKyAgICB7IlwwMzNjIiwgIlJJUyJ9LAkJLyogZnVsbCByZXNldCAqLworICAgIHsiXDAzMzciLCAiU0MifSwJCS8qIHNhdmUgY3Vyc29yICovCisgICAgeyJcMDMzOCIsICJSQyJ9LAkJLyogcmVzdG9yZSBjdXJzb3IgKi8KKyAgICB7IlwwMzNbciIsICJSU1IifSwJCS8qIG5vdCBhbiBYLjM2NCBtbmVtb25pYyAqLworICAgIHsiXDAzM1ttIiwgIlNHUjAifSwJCS8qIG5vdCBhbiBYLjM2NCBtbmVtb25pYyAqLworICAgIHsiXDAzM1sySiIsICJFRDIifSwJCS8qIGNsZWFyIHBhZ2UgKi8KKworICAgIC8qIHRoaXMgZ3JvdXAgaXMgc3BlY2lmaWVkIGJ5IElTTyAyMDIyICovCisgICAgeyJcMDMzKDAiLCAiSVNPIERFQyBHMCJ9LAkvKiBlbmFibGUgREVDIGdyYXBoaWNzIGZvciBHMCAqLworICAgIHsiXDAzMyhBIiwgIklTTyBVSyBHMCJ9LAkvKiBlbmFibGUgVUsgY2hhcnMgZm9yIEcwICovCisgICAgeyJcMDMzKEIiLCAiSVNPIFVTIEcwIn0sCS8qIGVuYWJsZSBVUyBjaGFycyBmb3IgRzAgKi8KKyAgICB7IlwwMzMpMCIsICJJU08gREVDIEcxIn0sCS8qIGVuYWJsZSBERUMgZ3JhcGhpY3MgZm9yIEcxICovCisgICAgeyJcMDMzKUEiLCAiSVNPIFVLIEcxIn0sCS8qIGVuYWJsZSBVSyBjaGFycyBmb3IgRzEgKi8KKyAgICB7IlwwMzMpQiIsICJJU08gVVMgRzEifSwJLyogZW5hYmxlIFVTIGNoYXJzIGZvciBHMSAqLworCisgICAgLyogdGhlc2UgYXJlIERFQyBwcml2YXRlIGNvbnRyb2xzIHdpZGVseSBzdXBwb3J0ZWQgYnkgZW11bGF0b3JzICovCisgICAgeyJcMDMzPSIsICJERUNQQU0ifSwJLyogYXBwbGljYXRpb24ga2V5cGFkIG1vZGUgKi8KKyAgICB7IlwwMzM+IiwgIkRFQ1BOTSJ9LAkvKiBub3JtYWwga2V5cGFkIG1vZGUgKi8KKyAgICB7IlwwMzM8IiwgIkRFQ0FOU0kifSwJLyogZW50ZXIgQU5TSSBtb2RlICovCisgICAgeyJcMDMzWyFwIiwgIkRFQ1NUUiJ9LAkvKiBzb2Z0IHJlc2V0ICovCisgICAgeyJcMDMzIEYiLCAiUzdDMVQifSwJLyogNy1iaXQgY29udHJvbHMgKi8KKworICAgIHsoY2hhciAqKSAwLCAoY2hhciAqKSAwfQorfTsKKworc3RhdGljIGNvbnN0IGFzc29jIHN0ZF9tb2Rlc1tdID0KKy8qIEVDTUEgXEVbIC4uLiBbaGxdIG1vZGVzIHJlY29nbml6ZWQgYnkgbWFueSBlbXVsYXRvcnMgKi8KK3sKKyAgICB7IjIiLCAiQU0ifSwJCS8qIGtleWJvYXJkIGFjdGlvbiBtb2RlICovCisgICAgeyI0IiwgIklSTSJ9LAkJLyogaW5zZXJ0L3JlcGxhY2UgbW9kZSAqLworICAgIHsiMTIiLCAiU1JNIn0sCQkvKiBzZW5kL3JlY2VpdmUgbW9kZSAqLworICAgIHsiMjAiLCAiTE5NIn0sCQkvKiBsaW5lZmVlZCBtb2RlICovCisgICAgeyhjaGFyICopIDAsIChjaGFyICopIDB9Cit9OworCitzdGF0aWMgY29uc3QgYXNzb2MgcHJpdmF0ZV9tb2Rlc1tdID0KKy8qIERFQyBcRVsgLi4uIFtobF0gbW9kZXMgcmVjb2duaXplZCBieSBtYW55IGVtdWxhdG9ycyAqLworeworICAgIHsiMSIsICJDS00ifSwJCS8qIGFwcGxpY2F0aW9uIGN1cnNvciBrZXlzICovCisgICAgeyIyIiwgIkFOTSJ9LAkJLyogc2V0IFZUNTIgbW9kZSAqLworICAgIHsiMyIsICJDT0xNIn0sCQkvKiAxMzItY29sdW1uIG1vZGUgKi8KKyAgICB7IjQiLCAiU0NMTSJ9LAkJLyogc21vb3RoIHNjcm9sbCAqLworICAgIHsiNSIsICJTQ05NIn0sCQkvKiByZXZlcnNlIHZpZGVvIG1vZGUgKi8KKyAgICB7IjYiLCAiT00ifSwJCS8qIG9yaWdpbiBtb2RlICovCisgICAgeyI3IiwgIkFXTSJ9LAkJLyogd3JhcGFyb3VuZCBtb2RlICovCisgICAgeyI4IiwgIkFSTSJ9LAkJLyogYXV0by1yZXBlYXQgbW9kZSAqLworICAgIHsoY2hhciAqKSAwLCAoY2hhciAqKSAwfQorfTsKKworc3RhdGljIGNvbnN0IGFzc29jIGVjbWFfaGlnaGxpZ2h0c1tdID0KKy8qIHJlY29nbml6ZSBFQ01BIGF0dHJpYnV0ZSBzZXF1ZW5jZXMgKi8KK3sKKyAgICB7IjAiLCAiTk9STUFMIn0sCQkvKiBub3JtYWwgKi8KKyAgICB7IjEiLCAiK0JPTEQifSwJCS8qIGJvbGQgb24gKi8KKyAgICB7IjIiLCAiK0RJTSJ9LAkJLyogZGltIG9uICovCisgICAgeyIzIiwgIitJVEFMSUMifSwJCS8qIGl0YWxpYyBvbiAqLworICAgIHsiNCIsICIrVU5ERVJMSU5FIn0sCS8qIHVuZGVybGluZSBvbiAqLworICAgIHsiNSIsICIrQkxJTksifSwJCS8qIGJsaW5rIG9uICovCisgICAgeyI2IiwgIitGQVNUQkxJTksifSwJLyogZmFzdGJsaW5rIG9uICovCisgICAgeyI3IiwgIitSRVZFUlNFIn0sCQkvKiByZXZlcnNlIG9uICovCisgICAgeyI4IiwgIitJTlZJU0lCTEUifSwJLyogaW52aXNpYmxlIG9uICovCisgICAgeyI5IiwgIitERUxFVEVEIn0sCQkvKiBkZWxldGVkIG9uICovCisgICAgeyIxMCIsICJNQUlOLUZPTlQifSwJLyogc2VsZWN0IHByaW1hcnkgZm9udCAqLworICAgIHsiMTEiLCAiQUxULUZPTlQtMSJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgMSAqLworICAgIHsiMTIiLCAiQUxULUZPTlQtMiJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgMiAqLworICAgIHsiMTMiLCAiQUxULUZPTlQtMyJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgMyAqLworICAgIHsiMTQiLCAiQUxULUZPTlQtNCJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgNCAqLworICAgIHsiMTUiLCAiQUxULUZPTlQtNSJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgNSAqLworICAgIHsiMTYiLCAiQUxULUZPTlQtNiJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgNiAqLworICAgIHsiMTciLCAiQUxULUZPTlQtNyJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgNyAqLworICAgIHsiMTgiLCAiQUxULUZPTlQtMSJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgMSAqLworICAgIHsiMTkiLCAiQUxULUZPTlQtMSJ9LAkvKiBzZWxlY3QgYWx0ZXJuYXRlIGZvbnQgMSAqLworICAgIHsiMjAiLCAiRlJBS1RVUiJ9LAkJLyogRnJha3R1ciBmb250ICovCisgICAgeyIyMSIsICJET1VCTEVVTkRFUiJ9LAkvKiBkb3VibGUgdW5kZXJsaW5lICovCisgICAgeyIyMiIsICItRElNIn0sCQkvKiBkaW0gb2ZmICovCisgICAgeyIyMyIsICItSVRBTElDIn0sCQkvKiBpdGFsaWMgb2ZmICovCisgICAgeyIyNCIsICItVU5ERVJMSU5FIn0sCS8qIHVuZGVybGluZSBvZmYgKi8KKyAgICB7IjI1IiwgIi1CTElOSyJ9LAkJLyogYmxpbmsgb2ZmICovCisgICAgeyIyNiIsICItRkFTVEJMSU5LIn0sCS8qIGZhc3RibGluayBvZmYgKi8KKyAgICB7IjI3IiwgIi1SRVZFUlNFIn0sCQkvKiByZXZlcnNlIG9mZiAqLworICAgIHsiMjgiLCAiLUlOVklTSUJMRSJ9LAkvKiBpbnZpc2libGUgb2ZmICovCisgICAgeyIyOSIsICItREVMRVRFRCJ9LAkJLyogZGVsZXRlZCBvZmYgKi8KKyAgICB7KGNoYXIgKikgMCwgKGNoYXIgKikgMH0KK307CisKK3N0YXRpYyBpbnQKK3NraXBfY3NpKGNvbnN0IGNoYXIgKmNhcCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpZiAoY2FwWzBdID09ICdcMDMzJyAmJiBjYXBbMV0gPT0gJ1snKQorCXJlc3VsdCA9IDI7CisgICAgZWxzZSBpZiAoVUNoYXIoY2FwWzBdKSA9PSAwMjMzKQorCXJlc3VsdCA9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wKK3NhbWVfcGFyYW0oY29uc3QgY2hhciAqdGFibGUsIGNvbnN0IGNoYXIgKnBhcmFtLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBpZiAoc3RybmNtcCh0YWJsZSwgcGFyYW0sIGxlbmd0aCkgPT0gMCkgeworCXJlc3VsdCA9ICFpc2RpZ2l0KFVDaGFyKHBhcmFtW2xlbmd0aF0pKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNoYXIgKgorbG9va3VwX3BhcmFtcyhjb25zdCBhc3NvYyAqIHRhYmxlLCBjaGFyICpkc3QsIGNoYXIgKnNyYykKK3sKKyAgICBjaGFyICpyZXN1bHQgPSAwOworICAgIGNvbnN0IGNoYXIgKmVwID0gc3RydG9rKHNyYywgIjsiKTsKKworICAgIGlmIChlcCAhPSAwKSB7CisJY29uc3QgYXNzb2MgKmFwOworCisJZG8geworCSAgICBib29sIGZvdW5kID0gRkFMU0U7CisKKwkgICAgZm9yIChhcCA9IHRhYmxlOyBhcC0+ZnJvbTsgYXArKykgeworCQlzaXplX3QgdGxlbiA9IHN0cmxlbihhcC0+ZnJvbSk7CisKKwkJaWYgKHNhbWVfcGFyYW0oYXAtPmZyb20sIGVwLCB0bGVuKSkgeworCQkgICAgKHZvaWQpIHN0cmNhdChkc3QsIGFwLT50byk7CisJCSAgICBmb3VuZCA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgICAgaWYgKCFmb3VuZCkKKwkJKHZvaWQpIHN0cmNhdChkc3QsIGVwKTsKKwkgICAgKHZvaWQpIHN0cmNhdChkc3QsICI7Iik7CisJfSB3aGlsZQorCSAgICAoKGVwID0gc3RydG9rKChjaGFyICopIDAsICI7IikpKTsKKworCWRzdFtzdHJsZW4oZHN0KSAtIDFdID0gJ1wwJzsKKworCXJlc3VsdCA9IGRzdDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2FuYWx5emVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNhcCwgVEVSTVRZUEUgKnRwKQoreworICAgIGNoYXIgYnVmMltNQVhfVEVSTUlORk9fTEVOR1RIXTsKKyAgICBjb25zdCBjaGFyICpzcDsKKyAgICBjb25zdCBhc3NvYyAqYXA7CisgICAgaW50IHRwX2xpbmVzID0gdHAtPk51bWJlcnNbMl07CisKKyAgICBpZiAoY2FwID09IEFCU0VOVF9TVFJJTkcgfHwgY2FwID09IENBTkNFTExFRF9TVFJJTkcpCisJcmV0dXJuOworICAgICh2b2lkKSBwcmludGYoIiVzOiAiLCBuYW1lKTsKKworICAgIGZvciAoc3AgPSBjYXA7ICpzcDsgc3ArKykgeworCWludCBpOworCWludCBjc2k7CisJc2l6ZV90IGxlbiA9IDA7CisJc2l6ZV90IG5leHQ7CisJY29uc3QgY2hhciAqZXhwYW5zaW9uID0gMDsKKwljaGFyIGJ1ZjNbTUFYX1RFUk1JTkZPX0xFTkdUSF07CisKKwkvKiBmaXJzdCwgY2hlY2sgb3RoZXIgY2FwYWJpbGl0aWVzIGluIHRoaXMgZW50cnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1RSQ09VTlQ7IGkrKykgeworCSAgICBjaGFyICpjcCA9IHRwLT5TdHJpbmdzW2ldOworCisJICAgIC8qIGRvbid0IHVzZSBzb2Z0LWtleSBjYXBhYmlsaXRpZXMgKi8KKwkgICAgaWYgKHN0cm5hbWVzW2ldWzBdID09ICdrJyAmJiBzdHJuYW1lc1tpXVswXSA9PSAnZicpCisJCWNvbnRpbnVlOworCisJICAgIGlmIChjcCAhPSBBQlNFTlRfU1RSSU5HICYmIGNwICE9IENBTkNFTExFRF9TVFJJTkcgJiYgY3BbMF0gJiYgY3AKKwkJIT0gY2FwKSB7CisJCWxlbiA9IHN0cmxlbihjcCk7CisJCSh2b2lkKSBzdHJuY3B5KGJ1ZjIsIHNwLCBsZW4pOworCQlidWYyW2xlbl0gPSAnXDAnOworCisJCWlmIChfbmNfY2FwY21wKGNwLCBidWYyKSkKKwkJICAgIGNvbnRpbnVlOworCisjZGVmaW5lIElTUlMocykJKCFzdHJuY21wKChzKSwgImlzIiwgMikgfHwgIXN0cm5jbXAoKHMpLCAicnMiLCAyKSkKKwkJLyoKKwkJICogVGhlb3JldGljYWxseSB3ZSBqdXN0IHBhc3NlZCB0aGUgdGVzdCBmb3IgdHJhbnNsYXRpb24KKwkJICogKGVxdWFsaXR5IG9uY2UgdGhlIHBhZGRpbmcgaXMgc3RyaXBwZWQpLiAgSG93ZXZlciwgdGhlcmUKKwkJICogYXJlIGEgZmV3IG1vcmUgaG9vcHMgdGhhdCBuZWVkIHRvIGJlIGp1bXBlZCBzbyB0aGF0CisJCSAqIGlkZW50aWNhbCBwYWlycyBvZiBpbml0aWFsaXphdGlvbiBhbmQgcmVzZXQgc3RyaW5ncworCQkgKiBkb24ndCBqdXN0IHJlZmVyIHRvIGVhY2ggb3RoZXIuCisJCSAqLworCQlpZiAoSVNSUyhuYW1lKSB8fCBJU1JTKHN0cm5hbWVzW2ldKSkKKwkJICAgIGlmIChjYXAgPCBjcCkKKwkJCWNvbnRpbnVlOworI3VuZGVmIElTUlMKKworCQlleHBhbnNpb24gPSBzdHJuYW1lc1tpXTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwkvKiBub3cgY2hlY2sgdGhlIHN0YW5kYXJkIGNhcGFiaWxpdGllcyAqLworCWlmICghZXhwYW5zaW9uKSB7CisJICAgIGNzaSA9IHNraXBfY3NpKHNwKTsKKwkgICAgZm9yIChhcCA9IHN0ZF9jYXBzOyBhcC0+ZnJvbTsgYXArKykgeworCQlzaXplX3QgYWRqID0gKHNpemVfdCkgKGNzaSA/IDIgOiAwKTsKKworCQlsZW4gPSBzdHJsZW4oYXAtPmZyb20pOworCQlpZiAoY3NpICYmIHNraXBfY3NpKGFwLT5mcm9tKSAhPSBjc2kpCisJCSAgICBjb250aW51ZTsKKwkJaWYgKGxlbiA+IGFkagorCQkgICAgJiYgc3RybmNtcChhcC0+ZnJvbSArIGFkaiwgc3AgKyBjc2ksIGxlbiAtIGFkaikgPT0gMCkgeworCQkgICAgZXhwYW5zaW9uID0gYXAtPnRvOworCQkgICAgbGVuIC09IGFkajsKKwkJICAgIGxlbiArPSAoc2l6ZV90KSBjc2k7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorCisJLyogbm93IGNoZWNrIGZvciBzdGFuZGFyZC1tb2RlIHNlcXVlbmNlcyAqLworCWlmICghZXhwYW5zaW9uCisJICAgICYmIChjc2kgPSBza2lwX2NzaShzcCkpICE9IDAKKwkgICAgJiYgKGxlbiA9IHN0cnNwbihzcCArIGNzaSwgIjAxMjM0NTY3ODk7IikpCisJICAgICYmIChsZW4gPCBzaXplb2YoYnVmMykpCisJICAgICYmIChuZXh0ID0gKHNpemVfdCkgY3NpICsgbGVuKQorCSAgICAmJiAoKHNwW25leHRdID09ICdoJykgfHwgKHNwW25leHRdID09ICdsJykpKSB7CisKKwkgICAgKHZvaWQpIHN0cmNweShidWYyLCAoc3BbbmV4dF0gPT0gJ2gnKSA/ICJFQ01BKyIgOiAiRUNNQS0iKTsKKwkgICAgKHZvaWQpIHN0cm5jcHkoYnVmMywgc3AgKyBjc2ksIGxlbik7CisJICAgIGJ1ZjNbbGVuXSA9ICdcMCc7CisJICAgIGxlbiArPSAoc2l6ZV90KSBjc2kgKyAxOworCisJICAgIGV4cGFuc2lvbiA9IGxvb2t1cF9wYXJhbXMoc3RkX21vZGVzLCBidWYyLCBidWYzKTsKKwl9CisKKwkvKiBub3cgY2hlY2sgZm9yIHByaXZhdGUtbW9kZSBzZXF1ZW5jZXMgKi8KKwlpZiAoIWV4cGFuc2lvbgorCSAgICAmJiAoY3NpID0gc2tpcF9jc2koc3ApKSAhPSAwCisJICAgICYmIHNwW2NzaV0gPT0gJz8nCisJICAgICYmIChsZW4gPSBzdHJzcG4oc3AgKyBjc2kgKyAxLCAiMDEyMzQ1Njc4OTsiKSkKKwkgICAgJiYgKGxlbiA8IHNpemVvZihidWYzKSkKKwkgICAgJiYgKG5leHQgPSAoc2l6ZV90KSBjc2kgKyAxICsgbGVuKQorCSAgICAmJiAoKHNwW25leHRdID09ICdoJykgfHwgKHNwW25leHRdID09ICdsJykpKSB7CisKKwkgICAgKHZvaWQpIHN0cmNweShidWYyLCAoc3BbbmV4dF0gPT0gJ2gnKSA/ICJERUMrIiA6ICJERUMtIik7CisJICAgICh2b2lkKSBzdHJuY3B5KGJ1ZjMsIHNwICsgY3NpICsgMSwgbGVuKTsKKwkgICAgYnVmM1tsZW5dID0gJ1wwJzsKKwkgICAgbGVuICs9IChzaXplX3QpIGNzaSArIDI7CisKKwkgICAgZXhwYW5zaW9uID0gbG9va3VwX3BhcmFtcyhwcml2YXRlX21vZGVzLCBidWYyLCBidWYzKTsKKwl9CisKKwkvKiBub3cgY2hlY2sgZm9yIEVDTUEgaGlnaGxpZ2h0IHNlcXVlbmNlcyAqLworCWlmICghZXhwYW5zaW9uCisJICAgICYmIChjc2kgPSBza2lwX2NzaShzcCkpICE9IDAKKwkgICAgJiYgKGxlbiA9IHN0cnNwbihzcCArIGNzaSwgIjAxMjM0NTY3ODk7IikpICE9IDAKKwkgICAgJiYgKGxlbiA8IHNpemVvZihidWYzKSkKKwkgICAgJiYgKG5leHQgPSAoc2l6ZV90KSBjc2kgKyBsZW4pCisJICAgICYmIHNwW25leHRdID09ICdtJykgeworCisJICAgICh2b2lkKSBzdHJjcHkoYnVmMiwgIlNHUjoiKTsKKwkgICAgKHZvaWQpIHN0cm5jcHkoYnVmMywgc3AgKyBjc2ksIGxlbik7CisJICAgIGJ1ZjNbbGVuXSA9ICdcMCc7CisJICAgIGxlbiArPSAoc2l6ZV90KSBjc2kgKyAxOworCisJICAgIGV4cGFuc2lvbiA9IGxvb2t1cF9wYXJhbXMoZWNtYV9oaWdobGlnaHRzLCBidWYyLCBidWYzKTsKKwl9CisKKwlpZiAoIWV4cGFuc2lvbgorCSAgICAmJiAoY3NpID0gc2tpcF9jc2koc3ApKSAhPSAwCisJICAgICYmIHNwW2NzaV0gPT0gJ20nKSB7CisJICAgIGxlbiA9IChzaXplX3QpIGNzaSArIDE7CisJICAgICh2b2lkKSBzdHJjcHkoYnVmMiwgIlNHUjoiKTsKKwkgICAgc3RyY2F0KGJ1ZjIsIGVjbWFfaGlnaGxpZ2h0c1swXS50byk7CisJICAgIGV4cGFuc2lvbiA9IGJ1ZjI7CisJfQorCisJLyogbm93IGNoZWNrIGZvciBzY3JvbGwgcmVnaW9uIHJlc2V0ICovCisJaWYgKCFleHBhbnNpb24KKwkgICAgJiYgKGNzaSA9IHNraXBfY3NpKHNwKSkgIT0gMCkgeworCSAgICBpZiAoc3BbY3NpXSA9PSAncicpIHsKKwkJZXhwYW5zaW9uID0gIlJTUiI7CisJCWxlbiA9IDE7CisJICAgIH0gZWxzZSB7CisJCSh2b2lkKSBzcHJpbnRmKGJ1ZjIsICIxOyVkciIsIHRwX2xpbmVzKTsKKwkJbGVuID0gc3RybGVuKGJ1ZjIpOworCQlpZiAoc3RybmNtcChidWYyLCBzcCArIGNzaSwgbGVuKSA9PSAwKQorCQkgICAgZXhwYW5zaW9uID0gIlJTUiI7CisJICAgIH0KKwkgICAgbGVuICs9IChzaXplX3QpIGNzaTsKKwl9CisKKwkvKiBub3cgY2hlY2sgZm9yIGhvbWUtZG93biAqLworCWlmICghZXhwYW5zaW9uCisJICAgICYmIChjc2kgPSBza2lwX2NzaShzcCkpICE9IDApIHsKKwkgICAgKHZvaWQpIHNwcmludGYoYnVmMiwgIiVkOzFIIiwgdHBfbGluZXMpOworCSAgICBsZW4gPSBzdHJsZW4oYnVmMik7CisJICAgIGlmIChzdHJuY21wKGJ1ZjIsIHNwICsgY3NpLCBsZW4pID09IDApIHsKKwkJZXhwYW5zaW9uID0gIkxMIjsKKwkgICAgfSBlbHNlIHsKKwkJKHZvaWQpIHNwcmludGYoYnVmMiwgIiVkSCIsIHRwX2xpbmVzKTsKKwkJbGVuID0gc3RybGVuKGJ1ZjIpOworCQlpZiAoc3RybmNtcChidWYyLCBzcCArIGNzaSwgbGVuKSA9PSAwKSB7CisJCSAgICBleHBhbnNpb24gPSAiTEwiOworCQl9CisJICAgIH0KKwkgICAgbGVuICs9IChzaXplX3QpIGNzaTsKKwl9CisKKwkvKiBub3cgbG9vayBhdCB0aGUgZXhwYW5zaW9uIHdlIGdvdCwgaWYgYW55ICovCisJaWYgKGV4cGFuc2lvbikgeworCSAgICBwcmludGYoInslc30iLCBleHBhbnNpb24pOworCSAgICBzcCArPSBsZW4gLSAxOworCX0gZWxzZSB7CisJICAgIC8qIGNvdWxkbid0IG1hdGNoIGFueXRoaW5nICovCisJICAgIGJ1ZjJbMF0gPSAqc3A7CisJICAgIGJ1ZjJbMV0gPSAnXDAnOworCSAgICBmcHV0cyhUSUNfRVhQQU5EKGJ1ZjIpLCBzdGRvdXQpOworCX0KKyAgICB9CisgICAgcHV0Y2hhcignXG4nKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGUgY29tcGFyaXNvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitmaWxlX2NvbXBhcmlzb24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyNkZWZpbmUgTUFYQ09NUEFSRQkyCisgICAgLyogc29tZWRheSB3ZSBtYXkgYWxsb3cgY29tcGFyaXNvbnMgb24gbW9yZSBmaWxlcyAqLworICAgIGludCBmaWxlY291bnQgPSAwOworICAgIEVOVFJZICpoZWFkc1tNQVhDT01QQVJFXTsKKyAgICBFTlRSWSAqcXAsICpycDsKKyAgICBpbnQgaSwgbjsKKworICAgIG1lbXNldChoZWFkcywgMCwgc2l6ZW9mKGhlYWRzKSk7CisgICAgZHVtcF9pbml0KChjaGFyICopIDAsIEZfTElURVJBTCwgU19URVJNSU5GTywgMCwgaXRyYWNlLCBGQUxTRSk7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgYXJnYyAmJiBuIDwgTUFYQ09NUEFSRTsgbisrKSB7CisJaWYgKGZyZW9wZW4oYXJndltuXSwgInIiLCBzdGRpbikgPT0gMCkKKwkgICAgX25jX2Vycl9hYm9ydCgiQ2FuJ3Qgb3BlbiAlcyIsIGFyZ3Zbbl0pOworCisJX25jX2hlYWQgPSBfbmNfdGFpbCA9IDA7CisKKwkvKiBwYXJzZSBlbnRyaWVzIG91dCBvZiB0aGUgc291cmNlIGZpbGUgKi8KKwlfbmNfc2V0X3NvdXJjZShhcmd2W25dKTsKKwlfbmNfcmVhZF9lbnRyeV9zb3VyY2Uoc3RkaW4sIE5VTEwsIFRSVUUsIGxpdGVyYWwsIE5VTExIT09LKTsKKworCWlmIChpdHJhY2UpCisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlJlc29sdmluZyBmaWxlICVkLi4uXG4iLCBuIC0gMCk7CisKKwkvKiBtYXliZSBkbyB1c2UgcmVzb2x1dGlvbiAqLworCWlmICghX25jX3Jlc29sdmVfdXNlczIoIWxpbWl0ZWQsIGxpdGVyYWwpKSB7CisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICJUaGVyZSBhcmUgdW5yZXNvbHZlZCB1c2UgZW50cmllcyBpbiAlczpcbiIsCisJCQkgICBhcmd2W25dKTsKKwkgICAgZm9yX2VudHJ5X2xpc3QocXApIHsKKwkJaWYgKHFwLT5udXNlcykgeworCQkgICAgKHZvaWQpIGZwdXRzKHFwLT50dGVybS50ZXJtX25hbWVzLCBzdGRlcnIpOworCQkgICAgKHZvaWQpIGZwdXRjKCdcbicsIHN0ZGVycik7CisJCX0KKwkgICAgfQorCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKworCWhlYWRzW2ZpbGVjb3VudF0gPSBfbmNfaGVhZDsKKwlmaWxlY291bnQrKzsKKyAgICB9CisKKyAgICAvKiBPSywgYWxsIGVudHJpZXMgYXJlIGluIGNvcmUuICBSZWFkeSB0byBkbyB0aGUgY29tcGFyaXNvbiAqLworICAgIGlmIChpdHJhY2UpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiRW50cmllcyBhcmUgbm93IGluIGNvcmUuLi5cbiIpOworCisgICAgLyogVGhlIGVudHJ5LW1hdGNoaW5nIGxvb3AuIFNpZ2gsIHRoaXMgaXMgaW50cmluc2ljYWxseSBxdWFkcmF0aWMuICovCisgICAgZm9yIChxcCA9IGhlYWRzWzBdOyBxcDsgcXAgPSBxcC0+bmV4dCkgeworCWZvciAocnAgPSBoZWFkc1sxXTsgcnA7IHJwID0gcnAtPm5leHQpCisJICAgIGlmIChfbmNfZW50cnlfbWF0Y2gocXAtPnR0ZXJtLnRlcm1fbmFtZXMsIHJwLT50dGVybS50ZXJtX25hbWVzKSkgeworCQlpZiAocXAtPm5jcm9zc2xpbmtzIDwgTUFYX0NST1NTTElOS1MpCisJCSAgICBxcC0+Y3Jvc3NsaW5rc1txcC0+bmNyb3NzbGlua3NdID0gcnA7CisJCXFwLT5uY3Jvc3NsaW5rcysrOworCisJCWlmIChycC0+bmNyb3NzbGlua3MgPCBNQVhfQ1JPU1NMSU5LUykKKwkJICAgIHJwLT5jcm9zc2xpbmtzW3JwLT5uY3Jvc3NsaW5rc10gPSBxcDsKKwkJcnAtPm5jcm9zc2xpbmtzKys7CisJICAgIH0KKyAgICB9CisKKyAgICAvKiBub3cgd2UgaGF2ZSB0d28gY2lyY3VsYXIgbGlzdHMgd2l0aCBjcm9zc2xpbmtzICovCisgICAgaWYgKGl0cmFjZSkKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsICJOYW1lIG1hdGNoZXMgYXJlIGRvbmUuLi5cbiIpOworCisgICAgZm9yIChxcCA9IGhlYWRzWzBdOyBxcDsgcXAgPSBxcC0+bmV4dCkgeworCWlmIChxcC0+bmNyb3NzbGlua3MgPiAxKSB7CisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlcyBpbiBmaWxlIDEgKCVzKSBoYXMgJWQgbWF0Y2hlcyBpbiBmaWxlIDIgKCVzKTpcbiIsCisJCQkgICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcyksCisJCQkgICBhcmd2WzBdLAorCQkJICAgcXAtPm5jcm9zc2xpbmtzLAorCQkJICAgYXJndlsxXSk7CisJICAgIGZvciAoaSA9IDA7IGkgPCBxcC0+bmNyb3NzbGlua3M7IGkrKykKKwkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgICAgICJcdCVzXG4iLAorCQkJICAgICAgIF9uY19maXJzdF9uYW1lKChxcC0+Y3Jvc3NsaW5rc1tpXSktPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwl9CisgICAgfQorCisgICAgZm9yIChycCA9IGhlYWRzWzFdOyBycDsgcnAgPSBycC0+bmV4dCkgeworCWlmIChycC0+bmNyb3NzbGlua3MgPiAxKSB7CisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlcyBpbiBmaWxlIDIgKCVzKSBoYXMgJWQgbWF0Y2hlcyBpbiBmaWxlIDEgKCVzKTpcbiIsCisJCQkgICBfbmNfZmlyc3RfbmFtZShycC0+dHRlcm0udGVybV9uYW1lcyksCisJCQkgICBhcmd2WzFdLAorCQkJICAgcnAtPm5jcm9zc2xpbmtzLAorCQkJICAgYXJndlswXSk7CisJICAgIGZvciAoaSA9IDA7IGkgPCBycC0+bmNyb3NzbGlua3M7IGkrKykKKwkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgICAgICJcdCVzXG4iLAorCQkJICAgICAgIF9uY19maXJzdF9uYW1lKChycC0+Y3Jvc3NsaW5rc1tpXSktPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwl9CisgICAgfQorCisgICAgKHZvaWQpIHByaW50ZigiSW4gZmlsZSAxICglcykgb25seTpcbiIsIGFyZ3ZbMF0pOworICAgIGZvciAocXAgPSBoZWFkc1swXTsgcXA7IHFwID0gcXAtPm5leHQpCisJaWYgKHFwLT5uY3Jvc3NsaW5rcyA9PSAwKQorCSAgICAodm9pZCkgcHJpbnRmKCJcdCVzXG4iLAorCQkJICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcykpOworCisgICAgKHZvaWQpIHByaW50ZigiSW4gZmlsZSAyICglcykgb25seTpcbiIsIGFyZ3ZbMV0pOworICAgIGZvciAocnAgPSBoZWFkc1sxXTsgcnA7IHJwID0gcnAtPm5leHQpCisJaWYgKHJwLT5uY3Jvc3NsaW5rcyA9PSAwKQorCSAgICAodm9pZCkgcHJpbnRmKCJcdCVzXG4iLAorCQkJICBfbmNfZmlyc3RfbmFtZShycC0+dHRlcm0udGVybV9uYW1lcykpOworCisgICAgKHZvaWQpIHByaW50ZigiVGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBlcXVpdmFsZW50OlxuIik7CisgICAgZm9yIChxcCA9IGhlYWRzWzBdOyBxcDsgcXAgPSBxcC0+bmV4dCkgeworCXJwID0gcXAtPmNyb3NzbGlua3NbMF07CisKKwlpZiAocXAtPm5jcm9zc2xpbmtzID09IDEpIHsKKwkgICAgcnAgPSBxcC0+Y3Jvc3NsaW5rc1swXTsKKworCSAgICByZXBhaXJfYWNzYygmcXAtPnR0ZXJtKTsKKwkgICAgcmVwYWlyX2Fjc2MoJnJwLT50dGVybSk7CisjaWYgTkNVUlNFU19YTkFNRVMKKwkgICAgX25jX2FsaWduX3Rlcm10eXBlKCZxcC0+dHRlcm0sICZycC0+dHRlcm0pOworI2VuZGlmCisJICAgIGlmIChlbnRyeWVxKCZxcC0+dHRlcm0sICZycC0+dHRlcm0pICYmIHVzZWVxKHFwLCBycCkpIHsKKwkJY2hhciBuYW1lMVtOQU1FU0laRV0sIG5hbWUyW05BTUVTSVpFXTsKKworCQkodm9pZCkgY2Fub25pY2FsX25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMsIG5hbWUxKTsKKwkJKHZvaWQpIGNhbm9uaWNhbF9uYW1lKHJwLT50dGVybS50ZXJtX25hbWVzLCBuYW1lMik7CisKKwkJKHZvaWQpIHByaW50ZigiJXMgPSAlc1xuIiwgbmFtZTEsIG5hbWUyKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAodm9pZCkgcHJpbnRmKCJEaWZmZXJpbmcgZW50cmllczpcbiIpOworICAgIHRlcm1jb3VudCA9IDI7CisgICAgZm9yIChxcCA9IGhlYWRzWzBdOyBxcDsgcXAgPSBxcC0+bmV4dCkgeworCisJaWYgKHFwLT5uY3Jvc3NsaW5rcyA9PSAxKSB7CisJICAgIHJwID0gcXAtPmNyb3NzbGlua3NbMF07CisjaWYgTkNVUlNFU19YTkFNRVMKKwkgICAgLyogc29ycnkgLSB3ZSBoYXZlIHRvIGRvIHRoaXMgb24gZWFjaCBwYXNzICovCisJICAgIF9uY19hbGlnbl90ZXJtdHlwZSgmcXAtPnR0ZXJtLCAmcnAtPnR0ZXJtKTsKKyNlbmRpZgorCSAgICBpZiAoIShlbnRyeWVxKCZxcC0+dHRlcm0sICZycC0+dHRlcm0pICYmIHVzZWVxKHFwLCBycCkpKSB7CisJCWNoYXIgbmFtZTFbTkFNRVNJWkVdLCBuYW1lMltOQU1FU0laRV07CisKKwkJZW50cmllc1swXSA9ICpxcDsKKwkJZW50cmllc1sxXSA9ICpycDsKKworCQkodm9pZCkgY2Fub25pY2FsX25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMsIG5hbWUxKTsKKwkJKHZvaWQpIGNhbm9uaWNhbF9uYW1lKHJwLT50dGVybS50ZXJtX25hbWVzLCBuYW1lMik7CisKKwkJc3dpdGNoIChjb21wYXJlKSB7CisJCWNhc2UgQ19ESUZGRVJFTkNFOgorCQkgICAgaWYgKGl0cmFjZSkKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAgICAgIiVzOiBkdW1waW5nIGRpZmZlcmVuY2VzXG4iLAorCQkJCSAgICAgICBfbmNfcHJvZ25hbWUpOworCQkgICAgKHZvaWQpIHByaW50ZigiY29tcGFyaW5nICVzIHRvICVzLlxuIiwgbmFtZTEsIG5hbWUyKTsKKwkJICAgIGNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZlbnRyaWVzLT50dGVybSwgcXVpZXQpOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSBDX0NPTU1PTjoKKwkJICAgIGlmIChpdHJhY2UpCisJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgICAgICIlczogZHVtcGluZyBjb21tb24gY2FwYWJpbGl0aWVzXG4iLAorCQkJCSAgICAgICBfbmNfcHJvZ25hbWUpOworCQkgICAgKHZvaWQpIHByaW50ZigiY29tcGFyaW5nICVzIHRvICVzLlxuIiwgbmFtZTEsIG5hbWUyKTsKKwkJICAgIGNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZlbnRyaWVzLT50dGVybSwgcXVpZXQpOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSBDX05BTkQ6CisJCSAgICBpZiAoaXRyYWNlKQorCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICAgICAiJXM6IGR1bXBpbmcgZGlmZmVyZW5jZXNcbiIsCisJCQkJICAgICAgIF9uY19wcm9nbmFtZSk7CisJCSAgICAodm9pZCkgcHJpbnRmKCJjb21wYXJpbmcgJXMgdG8gJXMuXG4iLCBuYW1lMSwgbmFtZTIpOworCQkgICAgY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CisJCSAgICBicmVhazsKKworCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IGluZm9jbXAgW29wdGlvbnNdIFstQSBkaXJlY3RvcnldIFstQiBkaXJlY3RvcnldIFt0ZXJtbmFtZS4uLl0iCisJLCIiCisJLCJPcHRpb25zOiIKKwksIiAgLTEgICAgcHJpbnQgc2luZ2xlLWNvbHVtbiIKKwksIiAgLUMgICAgdXNlIHRlcm1jYXAtbmFtZXMiCisJLCIgIC1GICAgIGNvbXBhcmUgdGVybWluZm8tZmlsZXMiCisJLCIgIC1JICAgIHVzZSB0ZXJtaW5mby1uYW1lcyIKKwksIiAgLUwgICAgdXNlIGxvbmcgbmFtZXMiCisJLCIgIC1SIHN1YnNldCAoc2VlIG1hbnBhZ2UpIgorCSwiICAtVCAgICBlbGltaW5hdGUgc2l6ZSBsaW1pdHMgKHRlc3QpIgorCSwiICAtVSAgICBlbGltaW5hdGUgcG9zdC1wcm9jZXNzaW5nIG9mIGVudHJpZXMiCisJLCIgIC1WICAgIHByaW50IHZlcnNpb24iCisjaWYgTkNVUlNFU19YTkFNRVMKKwksIiAgLWEgICAgd2l0aCAtRiwgbGlzdCBjb21tZW50ZWQtb3V0IGNhcHMiCisjZW5kaWYKKwksIiAgLWMgICAgbGlzdCBjb21tb24gY2FwYWJpbGl0aWVzIgorCSwiICAtZCAgICBsaXN0IGRpZmZlcmVudCBjYXBhYmlsaXRpZXMiCisJLCIgIC1lICAgIGZvcm1hdCBvdXRwdXQgZm9yIEMgaW5pdGlhbGl6ZXIiCisJLCIgIC1FICAgIGZvcm1hdCBvdXRwdXQgYXMgQyB0YWJsZXMiCisJLCIgIC1mICAgIHdpdGggLTEsIGZvcm1hdCBjb21wbGV4IHN0cmluZ3MiCisJLCIgIC1HICAgIGZvcm1hdCAle251bWJlcn0gdG8gJSdjaGFyJyIKKwksIiAgLWcgICAgZm9ybWF0ICUnY2hhcicgdG8gJXtudW1iZXJ9IgorCSwiICAtaSAgICBhbmFseXplIGluaXRpYWxpemF0aW9uL3Jlc2V0IgorCSwiICAtbCAgICBvdXRwdXQgdGVybWluZm8gbmFtZXMiCisJLCIgIC1uICAgIGxpc3QgY2FwYWJpbGl0aWVzIGluIG5laXRoZXIiCisJLCIgIC1wICAgIGlnbm9yZSBwYWRkaW5nIHNwZWNpZmllcnMiCisJLCIgIC1xICAgIGJyaWVmIGxpc3RpbmcsIHJlbW92ZXMgaGVhZGVycyIKKwksIiAgLXIgICAgd2l0aCAtQywgb3V0cHV0IGluIHRlcm1jYXAgZm9ybSIKKwksIiAgLXIgICAgd2l0aCAtRiwgcmVzb2x2ZSB1c2UtcmVmZXJlbmNlcyIKKwksIiAgLXMgW2R8aXxsfGNdIHNvcnQgZmllbGRzIgorI2lmIE5DVVJTRVNfWE5BTUVTCisJLCIgIC10ICAgIHN1cHByZXNzIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzIgorI2VuZGlmCisJLCIgIC11ICAgIHByb2R1Y2Ugc291cmNlIHdpdGggJ3VzZT0nIgorCSwiICAtdiBudW1iZXIgICh2ZXJib3NlKSIKKwksIiAgLXcgbnVtYmVyICAod2lkdGgpIgorI2lmIE5DVVJTRVNfWE5BTUVTCisJLCIgIC14ICAgIHRyZWF0IHVua25vd24gY2FwYWJpbGl0aWVzIGFzIHVzZXItZGVmaW5lZCIKKyNlbmRpZgorICAgIH07CisgICAgY29uc3Qgc2l6ZV90IGZpcnN0ID0gMzsKKyAgICBjb25zdCBzaXplX3QgbGFzdCA9IFNJWkVPRih0YmwpOworICAgIGNvbnN0IHNpemVfdCBsZWZ0ID0gKGxhc3QgLSBmaXJzdCArIDEpIC8gMiArIGZpcnN0OworICAgIHNpemVfdCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IGxlZnQ7IG4rKykgeworCXNpemVfdCBtID0gKG4gPCBmaXJzdCkgPyBsYXN0IDogbiArIGxlZnQgLSBmaXJzdDsKKwlpZiAobSA8IGxhc3QpCisJICAgIGZwcmludGYoc3RkZXJyLCAiJS00MC40MHMlc1xuIiwgdGJsW25dLCB0YmxbbV0pOworCWVsc2UKKwkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgdGJsW25dKTsKKyAgICB9CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIGNoYXIgKgorYW55X2luaXRpYWxpemVyKGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqdHlwZSkKK3sKKyAgICBzdGF0aWMgY2hhciAqaW5pdGlhbGl6ZXI7CisgICAgY2hhciAqczsKKworICAgIGlmIChpbml0aWFsaXplciA9PSAwKQorCWluaXRpYWxpemVyID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihlbnRyaWVzLT50dGVybS50ZXJtX25hbWVzKSArCisJCQkJICAgICAgc3RybGVuKHR5cGUpICsgc3RybGVuKGZtdCkpOworCisgICAgKHZvaWQpIHN0cmNweShpbml0aWFsaXplciwgZW50cmllcy0+dHRlcm0udGVybV9uYW1lcyk7CisgICAgZm9yIChzID0gaW5pdGlhbGl6ZXI7ICpzICE9IDAgJiYgKnMgIT0gJ3wnOyBzKyspIHsKKwlpZiAoIWlzYWxudW0oVUNoYXIoKnMpKSkKKwkgICAgKnMgPSAnXyc7CisgICAgfQorICAgICpzID0gMDsKKyAgICAodm9pZCkgc3ByaW50ZihzLCBmbXQsIHR5cGUpOworICAgIHJldHVybiBpbml0aWFsaXplcjsKK30KKworc3RhdGljIGNoYXIgKgorbmFtZV9pbml0aWFsaXplcihjb25zdCBjaGFyICp0eXBlKQoreworICAgIHJldHVybiBhbnlfaW5pdGlhbGl6ZXIoIl8lc19kYXRhIiwgdHlwZSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK3N0cmluZ192YXJpYWJsZShjb25zdCBjaGFyICp0eXBlKQoreworICAgIHJldHVybiBhbnlfaW5pdGlhbGl6ZXIoIl9zXyVzIiwgdHlwZSk7Cit9CisKKy8qIGR1bXAgQyBpbml0aWFsaXplcnMgZm9yIHRoZSB0ZXJtaW5hbCB0eXBlICovCitzdGF0aWMgdm9pZAorZHVtcF9pbml0aWFsaXplcnMoVEVSTVRZUEUgKnRlcm0pCit7CisgICAgdW5zaWduZWQgbjsKKyAgICBjb25zdCBjaGFyICpzdHIgPSAwOworCisgICAgcHJpbnRmKCJcbnN0YXRpYyBjaGFyICVzW10gPSBcIiVzXCI7XG5cbiIsCisJICAgbmFtZV9pbml0aWFsaXplcigiYWxpYXMiKSwgZW50cmllcy0+dHRlcm0udGVybV9uYW1lcyk7CisKKyAgICBmb3JfZWFjaF9zdHJpbmcobiwgdGVybSkgeworCWNoYXIgYnVmW01BWF9TVFJJTkddLCAqc3AsICp0cDsKKworCWlmIChWQUxJRF9TVFJJTkcodGVybS0+U3RyaW5nc1tuXSkpIHsKKwkgICAgdHAgPSBidWY7CisJICAgICp0cCsrID0gJyInOworCSAgICBmb3IgKHNwID0gdGVybS0+U3RyaW5nc1tuXTsKKwkJICpzcCAhPSAwICYmICh0cCAtIGJ1ZikgPCBNQVhfU1RSSU5HIC0gNjsKKwkJIHNwKyspIHsKKwkJaWYgKGlzYXNjaWkoVUNoYXIoKnNwKSkKKwkJICAgICYmIGlzcHJpbnQoVUNoYXIoKnNwKSkKKwkJICAgICYmICpzcCAhPSAnXFwnCisJCSAgICAmJiAqc3AgIT0gJyInKQorCQkgICAgKnRwKysgPSAqc3A7CisJCWVsc2UgeworCQkgICAgKHZvaWQpIHNwcmludGYodHAsICJcXCUwM28iLCBVQ2hhcigqc3ApKTsKKwkJICAgIHRwICs9IDQ7CisJCX0KKwkgICAgfQorCSAgICAqdHArKyA9ICciJzsKKwkgICAgKnRwID0gJ1wwJzsKKwkgICAgKHZvaWQpIHByaW50Zigic3RhdGljIGNoYXIgJS0yMHNbXSA9ICVzO1xuIiwKKwkJCSAgc3RyaW5nX3ZhcmlhYmxlKEV4dFN0cm5hbWUodGVybSwgbiwgc3RybmFtZXMpKSwgYnVmKTsKKwl9CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKworICAgICh2b2lkKSBwcmludGYoInN0YXRpYyBjaGFyICVzW10gPSAlc1xuIiwgbmFtZV9pbml0aWFsaXplcigiYm9vbCIpLCBMX0NVUkwpOworCisgICAgZm9yX2VhY2hfYm9vbGVhbihuLCB0ZXJtKSB7CisJc3dpdGNoICgoaW50KSAodGVybS0+Qm9vbGVhbnNbbl0pKSB7CisJY2FzZSBUUlVFOgorCSAgICBzdHIgPSAiVFJVRSI7CisJICAgIGJyZWFrOworCisJY2FzZSBGQUxTRToKKwkgICAgc3RyID0gIkZBTFNFIjsKKwkgICAgYnJlYWs7CisKKwljYXNlIEFCU0VOVF9CT09MRUFOOgorCSAgICBzdHIgPSAiQUJTRU5UX0JPT0xFQU4iOworCSAgICBicmVhazsKKworCWNhc2UgQ0FOQ0VMTEVEX0JPT0xFQU46CisJICAgIHN0ciA9ICJDQU5DRUxMRURfQk9PTEVBTiI7CisJICAgIGJyZWFrOworCX0KKwkodm9pZCkgcHJpbnRmKCJcdC8qICUzdTogJS04cyAqL1x0JXMsXG4iLAorCQkgICAgICBuLCBFeHRCb29sbmFtZSh0ZXJtLCBuLCBib29sbmFtZXMpLCBzdHIpOworICAgIH0KKyAgICAodm9pZCkgcHJpbnRmKCIlcztcbiIsIFJfQ1VSTCk7CisKKyAgICAodm9pZCkgcHJpbnRmKCJzdGF0aWMgc2hvcnQgJXNbXSA9ICVzXG4iLCBuYW1lX2luaXRpYWxpemVyKCJudW1iZXIiKSwgTF9DVVJMKTsKKworICAgIGZvcl9lYWNoX251bWJlcihuLCB0ZXJtKSB7CisJY2hhciBidWZbQlVGU0laXTsKKwlzd2l0Y2ggKHRlcm0tPk51bWJlcnNbbl0pIHsKKwljYXNlIEFCU0VOVF9OVU1FUklDOgorCSAgICBzdHIgPSAiQUJTRU5UX05VTUVSSUMiOworCSAgICBicmVhazsKKwljYXNlIENBTkNFTExFRF9OVU1FUklDOgorCSAgICBzdHIgPSAiQ0FOQ0VMTEVEX05VTUVSSUMiOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgdGVybS0+TnVtYmVyc1tuXSk7CisJICAgIHN0ciA9IGJ1ZjsKKwkgICAgYnJlYWs7CisJfQorCSh2b2lkKSBwcmludGYoIlx0LyogJTN1OiAlLThzICovXHQlcyxcbiIsIG4sCisJCSAgICAgIEV4dE51bW5hbWUodGVybSwgbiwgbnVtbmFtZXMpLCBzdHIpOworICAgIH0KKyAgICAodm9pZCkgcHJpbnRmKCIlcztcbiIsIFJfQ1VSTCk7CisKKyAgICAodm9pZCkgcHJpbnRmKCJzdGF0aWMgY2hhciAqICVzW10gPSAlc1xuIiwgbmFtZV9pbml0aWFsaXplcigic3RyaW5nIiksIExfQ1VSTCk7CisKKyAgICBmb3JfZWFjaF9zdHJpbmcobiwgdGVybSkgeworCisJaWYgKHRlcm0tPlN0cmluZ3Nbbl0gPT0gQUJTRU5UX1NUUklORykKKwkgICAgc3RyID0gIkFCU0VOVF9TVFJJTkciOworCWVsc2UgaWYgKHRlcm0tPlN0cmluZ3Nbbl0gPT0gQ0FOQ0VMTEVEX1NUUklORykKKwkgICAgc3RyID0gIkNBTkNFTExFRF9TVFJJTkciOworCWVsc2UgeworCSAgICBzdHIgPSBzdHJpbmdfdmFyaWFibGUoRXh0U3RybmFtZSh0ZXJtLCBuLCBzdHJuYW1lcykpOworCX0KKwkodm9pZCkgcHJpbnRmKCJcdC8qICUzdTogJS04cyAqL1x0JXMsXG4iLCBuLAorCQkgICAgICBFeHRTdHJuYW1lKHRlcm0sIG4sIHN0cm5hbWVzKSwgc3RyKTsKKyAgICB9CisgICAgKHZvaWQpIHByaW50ZigiJXM7XG4iLCBSX0NVUkwpOworCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICBpZiAoKE5VTV9CT09MRUFOUyh0ZXJtKSAhPSBCT09MQ09VTlQpCisJfHwgKE5VTV9OVU1CRVJTKHRlcm0pICE9IE5VTUNPVU5UKQorCXx8IChOVU1fU1RSSU5HUyh0ZXJtKSAhPSBTVFJDT1VOVCkpIHsKKwkodm9pZCkgcHJpbnRmKCJzdGF0aWMgY2hhciAqICVzW10gPSAlc1xuIiwKKwkJICAgICAgbmFtZV9pbml0aWFsaXplcigic3RyaW5nX2V4dCIpLCBMX0NVUkwpOworCWZvciAobiA9IEJPT0xDT1VOVDsgbiA8IE5VTV9CT09MRUFOUyh0ZXJtKTsgKytuKSB7CisJICAgICh2b2lkKSBwcmludGYoIlx0LyogJTN1OiBib29sICovXHRcIiVzXCIsXG4iLAorCQkJICBuLCBFeHRCb29sbmFtZSh0ZXJtLCBuLCBib29sbmFtZXMpKTsKKwl9CisJZm9yIChuID0gTlVNQ09VTlQ7IG4gPCBOVU1fTlVNQkVSUyh0ZXJtKTsgKytuKSB7CisJICAgICh2b2lkKSBwcmludGYoIlx0LyogJTN1OiBudW0gKi9cdFwiJXNcIixcbiIsCisJCQkgIG4sIEV4dE51bW5hbWUodGVybSwgbiwgbnVtbmFtZXMpKTsKKwl9CisJZm9yIChuID0gU1RSQ09VTlQ7IG4gPCBOVU1fU1RSSU5HUyh0ZXJtKTsgKytuKSB7CisJICAgICh2b2lkKSBwcmludGYoIlx0LyogJTN1OiBzdHIgKi9cdFwiJXNcIixcbiIsCisJCQkgIG4sIEV4dFN0cm5hbWUodGVybSwgbiwgc3RybmFtZXMpKTsKKwl9CisJKHZvaWQpIHByaW50ZigiJXM7XG4iLCBSX0NVUkwpOworICAgIH0KKyNlbmRpZgorfQorCisvKiBkdW1wIEMgaW5pdGlhbGl6ZXJzIGZvciB0aGUgdGVybWluYWwgdHlwZSAqLworc3RhdGljIHZvaWQKK2R1bXBfdGVybXR5cGUoVEVSTVRZUEUgKnRlcm0pCit7CisgICAgKHZvaWQpIHByaW50ZigiXHQlc1xuXHRcdCVzLFxuIiwgTF9DVVJMLCBuYW1lX2luaXRpYWxpemVyKCJhbGlhcyIpKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0KGNoYXIgKikwLFx0LyogcG9pbnRlciB0byBzdHJpbmcgdGFibGUgKi9cbiIpOworCisgICAgKHZvaWQpIHByaW50ZigiXHRcdCVzLFxuIiwgbmFtZV9pbml0aWFsaXplcigiYm9vbCIpKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JXMsXG4iLCBuYW1lX2luaXRpYWxpemVyKCJudW1iZXIiKSk7CisKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JXMsXG4iLCBuYW1lX2luaXRpYWxpemVyKCJzdHJpbmciKSk7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgICh2b2lkKSBwcmludGYoIiNpZiBOQ1VSU0VTX1hOQU1FU1xuIik7CisgICAgKHZvaWQpIHByaW50ZigiXHRcdChjaGFyICopMCxcdC8qIHBvaW50ZXIgdG8gZXh0ZW5kZWQgc3RyaW5nIHRhYmxlICovXG4iKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JXMsXHQvKiAuLi5jb3JyZXNwb25kaW5nIG5hbWVzICovXG4iLAorCQkgICgoTlVNX0JPT0xFQU5TKHRlcm0pICE9IEJPT0xDT1VOVCkKKwkJICAgfHwgKE5VTV9OVU1CRVJTKHRlcm0pICE9IE5VTUNPVU5UKQorCQkgICB8fCAoTlVNX1NUUklOR1ModGVybSkgIT0gU1RSQ09VTlQpKQorCQkgID8gbmFtZV9pbml0aWFsaXplcigic3RyaW5nX2V4dCIpCisJCSAgOiAiKGNoYXIgKiopMCIpOworCisgICAgKHZvaWQpIHByaW50ZigiXHRcdCVkLFx0XHQvKiBjb3VudCB0b3RhbCBCb29sZWFucyAqL1xuIiwgTlVNX0JPT0xFQU5TKHRlcm0pKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JWQsXHRcdC8qIGNvdW50IHRvdGFsIE51bWJlcnMgKi9cbiIsIE5VTV9OVU1CRVJTKHRlcm0pKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JWQsXHRcdC8qIGNvdW50IHRvdGFsIFN0cmluZ3MgKi9cbiIsIE5VTV9TVFJJTkdTKHRlcm0pKTsKKworICAgICh2b2lkKSBwcmludGYoIlx0XHQlZCxcdFx0LyogY291bnQgZXh0ZW5zaW9ucyB0byBCb29sZWFucyAqL1xuIiwKKwkJICBOVU1fQk9PTEVBTlModGVybSkgLSBCT09MQ09VTlQpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQlZCxcdFx0LyogY291bnQgZXh0ZW5zaW9ucyB0byBOdW1iZXJzICovXG4iLAorCQkgIE5VTV9OVU1CRVJTKHRlcm0pIC0gTlVNQ09VTlQpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQlZCxcdFx0LyogY291bnQgZXh0ZW5zaW9ucyB0byBTdHJpbmdzICovXG4iLAorCQkgIE5VTV9TVFJJTkdTKHRlcm0pIC0gU1RSQ09VTlQpOworCisgICAgKHZvaWQpIHByaW50ZigiI2VuZGlmIC8qIE5DVVJTRVNfWE5BTUVTICovXG4iKTsKKyNlbHNlCisgICAgKHZvaWQpIHRlcm07CisjZW5kaWYgLyogTkNVUlNFU19YTkFNRVMgKi8KKyAgICAodm9pZCkgcHJpbnRmKCJcdCVzXG4iLCBSX0NVUkwpOworfQorCitzdGF0aWMgaW50CitvcHRhcmdfdG9fbnVtYmVyKHZvaWQpCit7CisgICAgY2hhciAqdGVtcCA9IDA7CisgICAgbG9uZyB2YWx1ZSA9IHN0cnRvbChvcHRhcmcsICZ0ZW1wLCAwKTsKKworICAgIGlmICh0ZW1wID09IDAgfHwgdGVtcCA9PSBvcHRhcmcgfHwgKnRlbXAgIT0gMCkgeworCWZwcmludGYoc3RkZXJyLCAiRXhwZWN0ZWQgYSBudW1iZXIsIG5vdCBcIiVzXCJcbiIsIG9wdGFyZyk7CisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgcmV0dXJuIChpbnQpIHZhbHVlOworfQorCitzdGF0aWMgY2hhciAqCit0ZXJtaW5hbF9lbnYodm9pZCkKK3sKKyAgICBjaGFyICp0ZXJtaW5hbDsKKworICAgIGlmICgodGVybWluYWwgPSBnZXRlbnYoIlRFUk0iKSkgPT0gMCkgeworCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICAgICIlczogZW52aXJvbm1lbnQgdmFyaWFibGUgVEVSTSBub3Qgc2V0XG4iLAorCQkgICAgICAgX25jX3Byb2duYW1lKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIHJldHVybiB0ZXJtaW5hbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1haW4gc2VxdWVuY2UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAvKiBBdm9pZCAibG9jYWwgZGF0YSA+MzJrIiBlcnJvciB3aXRoIG13Y2MgKi8KKyAgICAvKiBBbHNvIGF2b2lkIG92ZXJmbG93aW5nIHNtYWxsZXIgc3RhY2tzIG9uIHN5c3RlbXMgbGlrZSBBbWlnYU9TICovCisgICAgcGF0aCAqdGZpbGUgPSAwOworICAgIGNoYXIgKip0bmFtZSA9IDA7CisgICAgaW50IG1heHRlcm1zOworCisgICAgY2hhciAqKm15YXJndjsKKworICAgIGNoYXIgKmZpcnN0ZGlyLCAqcmVzdGRpcjsKKyAgICBpbnQgYywgaSwgbGVuOworICAgIGJvb2wgZm9ybWF0dGVkID0gRkFMU0U7CisgICAgYm9vbCBmaWxlY29tcGFyZSA9IEZBTFNFOworICAgIGludCBpbml0ZHVtcCA9IDA7CisgICAgYm9vbCBpbml0X2FuYWx5emUgPSBGQUxTRTsKKyAgICBib29sIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlID0gRkFMU0U7CisKKyAgICAvKiB3aGVyZSBpcyB0aGUgdGVybWluZm8gZGF0YWJhc2UgbG9jYXRpb24gZ29pbmcgdG8gZGVmYXVsdCB0bz8gKi8KKyAgICByZXN0ZGlyID0gZmlyc3RkaXIgPSAwOworCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICB1c2VfZXh0ZW5kZWRfbmFtZXMoRkFMU0UpOworI2VuZGlmCisKKyAgICBfbmNfcHJvZ25hbWUgPSBfbmNfcm9vdG5hbWUoYXJndlswXSk7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gYWRkIHR3byB0ZXJtaW5hbCBlbnRyaWVzICovCisgICAgbXlhcmd2ID0gdHlwZUNhbGxvYyhjaGFyICosIChzaXplX3QpIChhcmdjICsgMykpOworICAgIG1lbWNweShteWFyZ3YsIGFyZ3YsIChzaXplb2YoY2hhciAqKSAqIChzaXplX3QpIGFyZ2MpKTsKKyAgICBhcmd2ID0gbXlhcmd2OworCisgICAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsCisJCSAgICAgICBhcmd2LAorCQkgICAgICAgIjFBOmFCOkNjZEVlRmZHZ0lpTGxucHFSOnJzOlR0VXVWdjp3OngiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlICcxJzoKKwkgICAgbXdpZHRoID0gMDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdBJzoKKwkgICAgZmlyc3RkaXIgPSBvcHRhcmc7CisJICAgIGJyZWFrOworCisjaWYgTkNVUlNFU19YTkFNRVMKKwljYXNlICdhJzoKKwkgICAgX25jX2Rpc2FibGVfcGVyaW9kID0gVFJVRTsKKwkgICAgdXNlX2V4dGVuZGVkX25hbWVzKFRSVUUpOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgJ0InOgorCSAgICByZXN0ZGlyID0gb3B0YXJnOworCSAgICBicmVhazsKKworCWNhc2UgJ0MnOgorCSAgICBvdXRmb3JtID0gRl9URVJNQ0FQOworCSAgICB0dmVyc2lvbiA9ICJCU0QiOworCSAgICBpZiAoc29ydG1vZGUgPT0gU19ERUZBVUxUKQorCQlzb3J0bW9kZSA9IFNfVEVSTUNBUDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdjJzoKKwkgICAgY29tcGFyZSA9IENfQ09NTU9OOworCSAgICBicmVhazsKKworCWNhc2UgJ2QnOgorCSAgICBjb21wYXJlID0gQ19ESUZGRVJFTkNFOworCSAgICBicmVhazsKKworCWNhc2UgJ0UnOgorCSAgICBpbml0ZHVtcCB8PSAyOworCSAgICBicmVhazsKKworCWNhc2UgJ2UnOgorCSAgICBpbml0ZHVtcCB8PSAxOworCSAgICBicmVhazsKKworCWNhc2UgJ0YnOgorCSAgICBmaWxlY29tcGFyZSA9IFRSVUU7CisJICAgIGJyZWFrOworCisJY2FzZSAnZic6CisJICAgIGZvcm1hdHRlZCA9IFRSVUU7CisJICAgIGJyZWFrOworCisJY2FzZSAnRyc6CisJICAgIG51bWJlcnMgPSAxOworCSAgICBicmVhazsKKworCWNhc2UgJ2cnOgorCSAgICBudW1iZXJzID0gLTE7CisJICAgIGJyZWFrOworCisJY2FzZSAnSSc6CisJICAgIG91dGZvcm0gPSBGX1RFUk1JTkZPOworCSAgICBpZiAoc29ydG1vZGUgPT0gU19ERUZBVUxUKQorCQlzb3J0bW9kZSA9IFNfVkFSSUFCTEU7CisJICAgIHR2ZXJzaW9uID0gMDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdpJzoKKwkgICAgaW5pdF9hbmFseXplID0gVFJVRTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdMJzoKKwkgICAgb3V0Zm9ybSA9IEZfVkFSSUFCTEU7CisJICAgIGlmIChzb3J0bW9kZSA9PSBTX0RFRkFVTFQpCisJCXNvcnRtb2RlID0gU19WQVJJQUJMRTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdsJzoKKwkgICAgb3V0Zm9ybSA9IEZfVEVSTUlORk87CisJICAgIGJyZWFrOworCisJY2FzZSAnbic6CisJICAgIGNvbXBhcmUgPSBDX05BTkQ7CisJICAgIGJyZWFrOworCisJY2FzZSAncCc6CisJICAgIGlnbm9yZXBhZHMgPSBUUlVFOworCSAgICBicmVhazsKKworCWNhc2UgJ3EnOgorCSAgICBxdWlldCA9IFRSVUU7CisJICAgIHNfYWJzZW50ID0gIi0iOworCSAgICBzX2NhbmNlbCA9ICJAIjsKKwkgICAgYm9vbF9zZXAgPSAiLCAiOworCSAgICBicmVhazsKKworCWNhc2UgJ1InOgorCSAgICB0dmVyc2lvbiA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisKKwljYXNlICdyJzoKKwkgICAgdHZlcnNpb24gPSAwOworCSAgICBicmVhazsKKworCWNhc2UgJ3MnOgorCSAgICBpZiAoKm9wdGFyZyA9PSAnZCcpCisJCXNvcnRtb2RlID0gU19OT1NPUlQ7CisJICAgIGVsc2UgaWYgKCpvcHRhcmcgPT0gJ2knKQorCQlzb3J0bW9kZSA9IFNfVEVSTUlORk87CisJICAgIGVsc2UgaWYgKCpvcHRhcmcgPT0gJ2wnKQorCQlzb3J0bW9kZSA9IFNfVkFSSUFCTEU7CisJICAgIGVsc2UgaWYgKCpvcHRhcmcgPT0gJ2MnKQorCQlzb3J0bW9kZSA9IFNfVEVSTUNBUDsKKwkgICAgZWxzZSB7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICAgICAiJXM6IHVua25vd24gc29ydCBtb2RlXG4iLAorCQkJICAgICAgIF9uY19wcm9nbmFtZSk7CisJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICdUJzoKKwkgICAgbGltaXRlZCA9IEZBTFNFOworCSAgICBicmVhazsKKworI2lmIE5DVVJTRVNfWE5BTUVTCisJY2FzZSAndCc6CisJICAgIF9uY19kaXNhYmxlX3BlcmlvZCA9IEZBTFNFOworCSAgICBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSA9IFRSVUU7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwljYXNlICdVJzoKKwkgICAgbGl0ZXJhbCA9IFRSVUU7CisJICAgIGJyZWFrOworCisJY2FzZSAndSc6CisJICAgIGNvbXBhcmUgPSBDX1VTRUFMTDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdWJzoKKwkgICAgcHV0cyhjdXJzZXNfdmVyc2lvbigpKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKKworCWNhc2UgJ3YnOgorCSAgICBpdHJhY2UgPSBvcHRhcmdfdG9fbnVtYmVyKCk7CisJICAgIHNldF90cmFjZV9sZXZlbChpdHJhY2UpOworCSAgICBicmVhazsKKworCWNhc2UgJ3cnOgorCSAgICBtd2lkdGggPSBvcHRhcmdfdG9fbnVtYmVyKCk7CisJICAgIGJyZWFrOworCisjaWYgTkNVUlNFU19YTkFNRVMKKwljYXNlICd4JzoKKwkgICAgdXNlX2V4dGVuZGVkX25hbWVzKFRSVUUpOworCSAgICBicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorCisgICAgbWF4dGVybXMgPSAoYXJnYyArIDIgLSBvcHRpbmQpOworICAgIHRmaWxlID0gdHlwZU1hbGxvYyhwYXRoLCBtYXh0ZXJtcyk7CisgICAgdG5hbWUgPSB0eXBlQ2FsbG9jKGNoYXIgKiwgbWF4dGVybXMpOworICAgIGVudHJpZXMgPSB0eXBlQ2FsbG9jKEVOVFJZLCBtYXh0ZXJtcyk7CisKKyAgICBpZiAodGZpbGUgPT0gMAorCXx8IHRuYW1lID09IDAKKwl8fCBlbnRyaWVzID09IDApIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBub3QgZW5vdWdoIG1lbW9yeVxuIiwgX25jX3Byb2duYW1lKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIC8qIGJ5IGRlZmF1bHQsIHNvcnQgYnkgdGVybWluZm8gbmFtZSAqLworICAgIGlmIChzb3J0bW9kZSA9PSBTX0RFRkFVTFQpCisJc29ydG1vZGUgPSBTX1RFUk1JTkZPOworCisgICAgLyogc2V0IHVwIGZvciBkaXNwbGF5ICovCisgICAgZHVtcF9pbml0KHR2ZXJzaW9uLCBvdXRmb3JtLCBzb3J0bW9kZSwgbXdpZHRoLCBpdHJhY2UsIGZvcm1hdHRlZCk7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgdGVybWluYWwgbmFtZSB0byB3b3JrIHdpdGggKi8KKyAgICBpZiAob3B0aW5kID49IGFyZ2MpCisJYXJndlthcmdjKytdID0gdGVybWluYWxfZW52KCk7CisKKyAgICAvKiBpZiB1c2VyIGlzIGFmdGVyIGEgY29tcGFyaXNvbiwgbWFrZSBzdXJlIHdlIGhhdmUgdHdvIGVudHJpZXMgKi8KKyAgICBpZiAoY29tcGFyZSAhPSBDX0RFRkFVTFQgJiYgb3B0aW5kID49IGFyZ2MgLSAxKQorCWFyZ3ZbYXJnYysrXSA9IHRlcm1pbmFsX2VudigpOworCisgICAgLyogZXhhY3RseSB0d28gdGVybWluYWwgbmFtZXMgd2l0aCBubyBvcHRpb25zIG1lYW5zIGRvIC1kICovCisgICAgaWYgKGFyZ2MgLSBvcHRpbmQgPT0gMiAmJiBjb21wYXJlID09IENfREVGQVVMVCkKKwljb21wYXJlID0gQ19ESUZGRVJFTkNFOworCisgICAgaWYgKCFmaWxlY29tcGFyZSkgeworCS8qIGdyYWIgdGhlIGVudHJpZXMgKi8KKwl0ZXJtY291bnQgPSAwOworCWZvciAoOyBvcHRpbmQgPCBhcmdjOyBvcHRpbmQrKykgeworCSAgICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSB0ZXJtY291bnQgPyByZXN0ZGlyIDogZmlyc3RkaXI7CisJICAgIGludCBzdGF0dXM7CisKKwkgICAgdG5hbWVbdGVybWNvdW50XSA9IGFyZ3Zbb3B0aW5kXTsKKworCSAgICBpZiAoZGlyZWN0b3J5KSB7CisjaWYgVVNFX0RBVEFCQVNFCisjaWYgTUlYRURDQVNFX0ZJTEVOQU1FUworI2RlZmluZSBMRUFGX0ZNVCAiJWMiCisjZWxzZQorI2RlZmluZSBMRUFGX0ZNVCAiJTAyeCIKKyNlbmRpZgorCQkodm9pZCkgc3ByaW50Zih0ZmlsZVt0ZXJtY291bnRdLCAiJXMvIiBMRUFGX0ZNVCAiLyVzIiwKKwkJCSAgICAgICBkaXJlY3RvcnksCisJCQkgICAgICAgVUNoYXIoKmFyZ3Zbb3B0aW5kXSksIGFyZ3Zbb3B0aW5kXSk7CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgIiVzOiByZWFkaW5nIGVudHJ5ICVzIGZyb20gZmlsZSAlc1xuIiwKKwkJCQkgICBfbmNfcHJvZ25hbWUsCisJCQkJICAgYXJndltvcHRpbmRdLCB0ZmlsZVt0ZXJtY291bnRdKTsKKworCQlzdGF0dXMgPSBfbmNfcmVhZF9maWxlX2VudHJ5KHRmaWxlW3Rlcm1jb3VudF0sCisJCQkJCSAgICAgJmVudHJpZXNbdGVybWNvdW50XS50dGVybSk7CisjZWxzZQorCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICIlczogdGVybWluZm8gZmlsZXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCSAgICAgICBfbmNfcHJvZ25hbWUpOworCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworI2VuZGlmCisJICAgIH0gZWxzZSB7CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgIiVzOiByZWFkaW5nIGVudHJ5ICVzIGZyb20gZGF0YWJhc2VcbiIsCisJCQkJICAgX25jX3Byb2duYW1lLAorCQkJCSAgIHRuYW1lW3Rlcm1jb3VudF0pOworCisJCXN0YXR1cyA9IF9uY19yZWFkX2VudHJ5KHRuYW1lW3Rlcm1jb3VudF0sCisJCQkJCXRmaWxlW3Rlcm1jb3VudF0sCisJCQkJCSZlbnRyaWVzW3Rlcm1jb3VudF0udHRlcm0pOworCQlkaXJlY3RvcnkgPSBURVJNSU5GTzsJLyogZm9yIGVycm9yIG1lc3NhZ2UgKi8KKwkgICAgfQorCisJICAgIGlmIChzdGF0dXMgPD0gMCkgeworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAgICAgIiVzOiBjb3VsZG4ndCBvcGVuIHRlcm1pbmZvIGZpbGUgJXMuXG4iLAorCQkJICAgICAgIF9uY19wcm9nbmFtZSwKKwkJCSAgICAgICB0ZmlsZVt0ZXJtY291bnRdKTsKKwkJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwkgICAgfQorCSAgICByZXBhaXJfYWNzYygmZW50cmllc1t0ZXJtY291bnRdLnR0ZXJtKTsKKwkgICAgdGVybWNvdW50Kys7CisJfQorCisjaWYgTkNVUlNFU19YTkFNRVMKKwlpZiAodGVybWNvdW50ID4gMSkKKwkgICAgX25jX2FsaWduX3Rlcm10eXBlKCZlbnRyaWVzWzBdLnR0ZXJtLCAmZW50cmllc1sxXS50dGVybSk7CisjZW5kaWYKKworCS8qIGR1bXAgYXMgQyBpbml0aWFsaXplciBmb3IgdGhlIHRlcm1pbmFsIHR5cGUgKi8KKwlpZiAoaW5pdGR1bXApIHsKKwkgICAgaWYgKGluaXRkdW1wICYgMSkKKwkJZHVtcF90ZXJtdHlwZSgmZW50cmllc1swXS50dGVybSk7CisJICAgIGlmIChpbml0ZHVtcCAmIDIpCisJCWR1bXBfaW5pdGlhbGl6ZXJzKCZlbnRyaWVzWzBdLnR0ZXJtKTsKKwl9CisKKwkvKiBhbmFseXplIHRoZSBpbml0IHN0cmluZ3MgKi8KKwllbHNlIGlmIChpbml0X2FuYWx5emUpIHsKKyN1bmRlZiBDVVIKKyNkZWZpbmUgQ1VSCWVudHJpZXNbMF0udHRlcm0uCisJICAgIGFuYWx5emVfc3RyaW5nKCJpczEiLCBpbml0XzFzdHJpbmcsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgYW5hbHl6ZV9zdHJpbmcoImlzMiIsIGluaXRfMnN0cmluZywgJmVudHJpZXNbMF0udHRlcm0pOworCSAgICBhbmFseXplX3N0cmluZygiaXMzIiwgaW5pdF8zc3RyaW5nLCAmZW50cmllc1swXS50dGVybSk7CisJICAgIGFuYWx5emVfc3RyaW5nKCJyczEiLCByZXNldF8xc3RyaW5nLCAmZW50cmllc1swXS50dGVybSk7CisJICAgIGFuYWx5emVfc3RyaW5nKCJyczIiLCByZXNldF8yc3RyaW5nLCAmZW50cmllc1swXS50dGVybSk7CisJICAgIGFuYWx5emVfc3RyaW5nKCJyczMiLCByZXNldF8zc3RyaW5nLCAmZW50cmllc1swXS50dGVybSk7CisJICAgIGFuYWx5emVfc3RyaW5nKCJzbWN1cCIsIGVudGVyX2NhX21vZGUsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgYW5hbHl6ZV9zdHJpbmcoInJtY3VwIiwgZXhpdF9jYV9tb2RlLCAmZW50cmllc1swXS50dGVybSk7CisjdW5kZWYgQ1VSCisJfSBlbHNlIHsKKworCSAgICAvKgorCSAgICAgKiBIZXJlJ3Mgd2hlcmUgdGhlIHJlYWwgd29yayBnZXRzIGRvbmUKKwkgICAgICovCisJICAgIHN3aXRjaCAoY29tcGFyZSkgeworCSAgICBjYXNlIENfREVGQVVMVDoKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAiJXM6IGFib3V0IHRvIGR1bXAgJXNcbiIsCisJCQkJICAgX25jX3Byb2duYW1lLAorCQkJCSAgIHRuYW1lWzBdKTsKKwkJKHZvaWQpIHByaW50ZigiI1x0UmVjb25zdHJ1Y3RlZCB2aWEgaW5mb2NtcCBmcm9tIGZpbGU6ICVzXG4iLAorCQkJICAgICAgdGZpbGVbMF0pOworCQlkdW1wX2VudHJ5KCZlbnRyaWVzWzBdLnR0ZXJtLAorCQkJICAgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUsCisJCQkgICBsaW1pdGVkLAorCQkJICAgbnVtYmVycywKKwkJCSAgIE5VTEwpOworCQlsZW4gPSBzaG93X2VudHJ5KCk7CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIlczogbGVuZ3RoICVkXG4iLCBfbmNfcHJvZ25hbWUsIGxlbik7CisJCWJyZWFrOworCisJICAgIGNhc2UgQ19ESUZGRVJFTkNFOgorCQlpZiAoaXRyYWNlKQorCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiJXM6IGR1bXBpbmcgZGlmZmVyZW5jZXNcbiIsIF9uY19wcm9nbmFtZSk7CisJCSh2b2lkKSBwcmludGYoImNvbXBhcmluZyAlcyB0byAlcy5cbiIsIHRuYW1lWzBdLCB0bmFtZVsxXSk7CisJCWNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZlbnRyaWVzLT50dGVybSwgcXVpZXQpOworCQlicmVhazsKKworCSAgICBjYXNlIENfQ09NTU9OOgorCQlpZiAoaXRyYWNlKQorCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICIlczogZHVtcGluZyBjb21tb24gY2FwYWJpbGl0aWVzXG4iLAorCQkJCSAgIF9uY19wcm9nbmFtZSk7CisJCSh2b2lkKSBwcmludGYoImNvbXBhcmluZyAlcyB0byAlcy5cbiIsIHRuYW1lWzBdLCB0bmFtZVsxXSk7CisJCWNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZlbnRyaWVzLT50dGVybSwgcXVpZXQpOworCQlicmVhazsKKworCSAgICBjYXNlIENfTkFORDoKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAiJXM6IGR1bXBpbmcgZGlmZmVyZW5jZXNcbiIsCisJCQkJICAgX25jX3Byb2duYW1lKTsKKwkJKHZvaWQpIHByaW50ZigiY29tcGFyaW5nICVzIHRvICVzLlxuIiwgdG5hbWVbMF0sIHRuYW1lWzFdKTsKKwkJY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgQ19VU0VBTEw6CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIlczogZHVtcGluZyB1c2UgZW50cnlcbiIsIF9uY19wcm9nbmFtZSk7CisJCWR1bXBfZW50cnkoJmVudHJpZXNbMF0udHRlcm0sCisJCQkgICBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSwKKwkJCSAgIGxpbWl0ZWQsCisJCQkgICBudW1iZXJzLAorCQkJICAgdXNlX3ByZWRpY2F0ZSk7CisJCWZvciAoaSA9IDE7IGkgPCB0ZXJtY291bnQ7IGkrKykKKwkJICAgIGR1bXBfdXNlcyh0bmFtZVtpXSwgIShvdXRmb3JtID09IEZfVEVSTUNBUAorCQkJCQkgIHx8IG91dGZvcm0gPT0gRl9UQ09OVkVSUikpOworCQlsZW4gPSBzaG93X2VudHJ5KCk7CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIlczogbGVuZ3RoICVkXG4iLCBfbmNfcHJvZ25hbWUsIGxlbik7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0gZWxzZSBpZiAoY29tcGFyZSA9PSBDX1VTRUFMTCkKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsICJTb3JyeSwgLXUgZG9lc24ndCB3b3JrIHdpdGggLUZcbiIpOworICAgIGVsc2UgaWYgKGNvbXBhcmUgPT0gQ19ERUZBVUxUKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlVzZSBgdGljIC1bQ0ldIDxmaWxlPicgZm9yIHRoaXMuXG4iKTsKKyAgICBlbHNlIGlmIChhcmdjIC0gb3B0aW5kICE9IDIpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkgICAgICAgIkZpbGUgY29tcGFyaXNvbiBuZWVkcyBleGFjdGx5IHR3byBmaWxlIGFyZ3VtZW50cy5cbiIpOworICAgIGVsc2UKKwlmaWxlX2NvbXBhcmlzb24oYXJnYyAtIG9wdGluZCwgYXJndiArIG9wdGluZCk7CisKKyNpZiBOT19MRUFLUworICAgIGZyZWUobXlhcmd2KTsKKyAgICBmcmVlKHRmaWxlKTsKKyAgICBmcmVlKHRuYW1lKTsKKyNlbmRpZgorICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKKy8qIGluZm9jbXAuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL3Byb2dzL21vZHVsZXMgYi9wcm9ncy9tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNGYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncy9tb2R1bGVzCkBAIC0wLDAgKzEsNDMgQEAKKyMgJElkOiBtb2R1bGVzLHYgMS4xMyAyMDA2LzEyLzI0IDAwOjUzOjIxIHRvbSBFeHAgJAorIyBQcm9ncmFtIG1vZHVsZXMgKHNvbWUgYXJlIGluIG5jdXJzZXMgbGliISkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CTE5OTUtb24KKyMKKworQCBiYXNlCitjbGVhcgkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGljCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpIHRyYW5zZm9ybS5oICQoc3JjZGlyKS9kdW1wX2VudHJ5LmgKK3RvZQkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKSAgICAgICAgICAgICAkKHNyY2RpcikvZHVtcF9lbnRyeS5oCitkdW1wX2VudHJ5CXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykgICAgICAgICAgICAgJChzcmNkaXIpL2R1bXBfZW50cnkuaCAuLi9pbmNsdWRlL3BhcmFtZXRyaXplZC5oICQoSU5DRElSKS9jYXBkZWZhdWx0cy5jIHRlcm1zb3J0LmMKK2luZm9jbXAJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykgICAgICAgICAgICAgJChzcmNkaXIpL2R1bXBfZW50cnkuaAordHB1dAkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKSB0cmFuc2Zvcm0uaCB0ZXJtc29ydC5jCit0c2V0CQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpIHRyYW5zZm9ybS5oICQoc3JjZGlyKS9kdW1wX2VudHJ5LmggLi4vaW5jbHVkZS90ZXJtY2FwLmgKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9wcm9ncy9wcm9ncy5wcml2LmggYi9wcm9ncy9wcm9ncy5wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlYTQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dzL3Byb2dzLnByaXYuaApAQCAtMCwwICsxLDE5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTctb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHByb2dzLnByaXYuaCx2IDEuMzQgMjAwOC8wOC8wMyAxNzo0MzowNSB0b20gRXhwICQKKyAqCisgKglwcm9ncy5wcml2LmgKKyAqCisgKglIZWFkZXIgZmlsZSBmb3IgY3Vyc2VzIHV0aWxpdHkgcHJvZ3JhbXMKKyAqLworCisjaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKworI2lmIFVTRV9SQ1NfSURTCisjZGVmaW5lIE1PRFVMRV9JRChpZCkgc3RhdGljIGNvbnN0IGNoYXIgSWRlbnRbXSA9IGlkOworI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX0lEKGlkKSAvKm5vdGhpbmcqLworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19CU0RUWVBFU19ICisjaW5jbHVkZSA8c3lzL2JzZHR5cGVzLmg+CS8qIG5lZWRlZCBmb3IgSVNDICovCisjZW5kaWYKKworI2lmIEhBVkVfTElNSVRTX0gKKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxpZiBIQVZFX1NZU19QQVJBTV9ICisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RJUkVOVF9ICisjIGluY2x1ZGUgPGRpcmVudC5oPgorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgc3RybGVuKChkaXJlbnQpLT5kX25hbWUpCisjIGlmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfRElSRU5UNjQpCisjICBpZiAhZGVmaW5lZChfTFA2NCkgJiYgKF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIyAgIGRlZmluZQlESVJFTlQJc3RydWN0IGRpcmVudDY0CisjICBlbHNlCisjICAgZGVmaW5lCURJUkVOVAlzdHJ1Y3QgZGlyZW50CisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUJRElSRU5UCXN0cnVjdCBkaXJlbnQKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBESVJFTlQgc3RydWN0IGRpcmVjdAorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgKGRpcmVudCktPmRfbmFtbGVuCisjIGlmIEhBVkVfU1lTX05ESVJfSAorIyAgaW5jbHVkZSA8c3lzL25kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TWVNfRElSX0gKKyMgIGluY2x1ZGUgPHN5cy9kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9ORElSX0gKKyMgIGluY2x1ZGUgPG5kaXIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIERFQ0xfRVJSTk8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKworI2lmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCisvKiAnZ2V0b3B0KCknIG1heSBiZSBwcm90b3R5cGVkIGluIDxzdGRsaWIuaD4sIGJ1dCBkZWNsYXJpbmcgaXRzCisgKiB2YXJpYWJsZXMgZG9lc24ndCBodXJ0LgorICovCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYgLyogSEFWRV9HRVRPUFRfSCAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPG5jX3RwYXJtLmg+CisKKyNpbmNsdWRlIDxuY19hbGxvYy5oPgorI2lmIEhBVkVfTkNfRlJFRUFMTAorI3VuZGVmIEV4aXRQcm9ncmFtCisjaWZkZWYgVVNFX0xJQlRJTkZPCisjZGVmaW5lIEV4aXRQcm9ncmFtKGNvZGUpIF9uY19mcmVlX3RpbmZvKGNvZGUpCisjZWxzZQorI2RlZmluZSBFeGl0UHJvZ3JhbShjb2RlKSBfbmNfZnJlZV90aWMoY29kZSkKKyNlbmRpZgorI2VuZGlmCisKKy8qIHVzdWFsbHkgaW4gPHVuaXN0ZC5oPiAqLworI2lmbmRlZiBTVERPVVRfRklMRU5PCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworI2RlZmluZSBTVERFUlJfRklMRU5PIDIKKyNlbmRpZgorCisjaWZuZGVmIEVYSVRfU1VDQ0VTUworI2RlZmluZSBFWElUX1NVQ0NFU1MgMAorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisjZW5kaWYKKworI2lmbmRlZiBSX09LCisjZGVmaW5lCVJfT0sJNAkJLyogVGVzdCBmb3IgcmVhZGFibGUuICAqLworI2VuZGlmCisKKyNpZm5kZWYgV19PSworI2RlZmluZQlXX09LCTIJCS8qIFRlc3QgZm9yIHdyaXRhYmxlLiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIFhfT0sKKyNkZWZpbmUJWF9PSwkxCQkvKiBUZXN0IGZvciBleGVjdXRhYmxlLiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIEZfT0sKKyNkZWZpbmUJRl9PSwkwCQkvKiBUZXN0IGZvciBleGlzdGVuY2UuICAqLworI2VuZGlmCisKKy8qIHVzdWFsbHkgaW4gPHVuaXN0ZC5oPiAqLworI2lmbmRlZiBTVERPVVRfRklMRU5PCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworI2RlZmluZSBTVERFUlJfRklMRU5PIDIKKyNlbmRpZgorCisvKiBtYXkgYmUgaW4gbGltaXRzLmgsIGluY2x1ZGVkIGZyb20gdmFyaW91cyBwbGFjZXMgKi8KKyNpZm5kZWYgUEFUSF9NQVgKKyMgaWYgZGVmaW5lZChfUE9TSVhfUEFUSF9NQVgpCisjICBkZWZpbmUgUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCisjIGVsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyAgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyMgZWxzZQorIyAgZGVmaW5lIFBBVEhfTUFYIDI1NQkvKiB0aGUgUG9zaXggbWluaW11bSBwYXRoc2l6ZSAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qIFdlIHVzZSBpc2FzY2lpIG9ubHkgdG8gZ3VhcmQgYWdhaW5zdCB1c2Ugb2YgNy1iaXQgY3R5cGUgdGFibGVzIGluIHRoZQorICogaXNwcmludCB0ZXN0IGluIGluZm9jbXAuCisgKi8KKyNpZiAhSEFWRV9JU0FTQ0lJCisjIHVuZGVmIGlzYXNjaWkKKyMgaWYgKCd6Jy0nYScgPT0gMjUpICYmICgneicgPCAxMjcpICYmICgnWictJ0EnID09IDI1KSAmJiAoJ1onIDwgMTI3KSAmJiAoJzknIDwgMTI3KQorIyAgZGVmaW5lIGlzYXNjaWkoYykgKFVDaGFyKGMpIDw9IDEyNykKKyMgZWxzZQorIyAgZGVmaW5lIGlzYXNjaWkoYykgMQkvKiBub3QgcmVhbGx5IGFzY2lpIGFueXdheSAqLworIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgVUNoYXIoYykgICAgKCh1bnNpZ25lZCBjaGFyKShjKSkKKworI2RlZmluZSBTSVpFT0YodikgKHNpemVvZih2KS9zaXplb2YodlswXSkpCmRpZmYgLS1naXQgYS9wcm9ncy90aWMuYyBiL3Byb2dzL3RpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmMzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncy90aWMuYwpAQCAtMCwwICsxLDE1MjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2IG9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXRpYy5jIC0tLSBNYWluIHByb2dyYW0gZm9yIHRlcm1pbmZvIGNvbXBpbGVyCisgKgkJCWJ5IEVyaWMgUy4gUmF5bW9uZAorICoKKyAqLworCisjaW5jbHVkZSA8cHJvZ3MucHJpdi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDxkdW1wX2VudHJ5Lmg+CisjaW5jbHVkZSA8dHJhbnNmb3JtLmg+CisKK01PRFVMRV9JRCgiJElkOiB0aWMuYyx2IDEuMTM3IDIwMDgvMDkvMTMgMTY6NTk6MjQgdG9tIEV4cCAkIikKKworY29uc3QgY2hhciAqX25jX3Byb2duYW1lID0gInRpYyI7CisKK3N0YXRpYyBGSUxFICpsb2dfZnA7CitzdGF0aWMgRklMRSAqdG1wX2ZwOworc3RhdGljIGJvb2wgY2FwZHVtcCA9IEZBTFNFOwkvKiBydW5uaW5nIGFzIGluZm90b2NhcD8gKi8KK3N0YXRpYyBib29sIGluZm9kdW1wID0gRkFMU0U7CS8qIHJ1bm5pbmcgYXMgY2FwdG9pbmZvPyAqLworc3RhdGljIGJvb2wgc2hvd3N1bW1hcnkgPSBGQUxTRTsKK3N0YXRpYyBjb25zdCBjaGFyICp0b19yZW1vdmU7CisKK3N0YXRpYyB2b2lkICgqc2F2ZV9jaGVja190ZXJtdHlwZSkgKFRFUk1UWVBFICosIGJvb2wpOworc3RhdGljIHZvaWQgY2hlY2tfdGVybXR5cGUoVEVSTVRZUEUgKnR0LCBib29sKTsKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2Vfc3RyaW5nW10gPSAiXAorWy1lIG5hbWVzXSBcCitbLW8gZGlyXSBcCitbLVIgbmFtZV0gXAorWy12W25dXSBcCitbLVZdIFwKK1std1tuXV0gXAorWy1cCisxXAorYVwKK0NcCitjXAorZlwKK0dcCitnXAorSVwKK0xcCitOXAorclwKK3NcCitUXAordFwKK1VcCit4XAorXSBcCitzb3VyY2UtZmlsZVxuIjsKKworI2lmIE5PX0xFQUtTCitzdGF0aWMgdm9pZAorZnJlZV9uYW1lbGlzdChjaGFyICoqc3JjKQoreworICAgIGlmIChzcmMgIT0gMCkgeworCWludCBuOworCWZvciAobiA9IDA7IHNyY1tuXSAhPSAwOyArK24pCisJICAgIGZyZWUoc3JjW25dKTsKKwlmcmVlKHNyYyk7CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitjbGVhbnVwKGNoYXIgKipuYW1lbHN0IEdDQ19VTlVTRUQpCit7CisjaWYgTk9fTEVBS1MKKyAgICBmcmVlX25hbWVsaXN0KG5hbWVsc3QpOworI2VuZGlmCisgICAgaWYgKHRtcF9mcCAhPSAwKQorCWZjbG9zZSh0bXBfZnApOworICAgIGlmICh0b19yZW1vdmUgIT0gMCkgeworI2lmIEhBVkVfUkVNT1ZFCisJcmVtb3ZlKHRvX3JlbW92ZSk7CisjZWxzZQorCXVubGluayh0b19yZW1vdmUpOworI2VuZGlmCisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZmFpbGVkKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBwZXJyb3IobXNnKTsKKyAgICBjbGVhbnVwKChjaGFyICoqKSAwKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGJsW10gPQorICAgIHsKKwkiT3B0aW9uczoiLAorCSIgIC0xICAgICAgICAgZm9ybWF0IHRyYW5zbGF0aW9uIG91dHB1dCBvbmUgY2FwYWJpbGl0eSBwZXIgbGluZSIsCisjaWYgTkNVUlNFU19YTkFNRVMKKwkiICAtYSAgICAgICAgIHJldGFpbiBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcyAoc2V0cyAteCBhbHNvKSIsCisjZW5kaWYKKwkiICAtQyAgICAgICAgIHRyYW5zbGF0ZSBlbnRyaWVzIHRvIHRlcm1jYXAgc291cmNlIGZvcm0iLAorCSIgIC1jICAgICAgICAgY2hlY2sgb25seSwgdmFsaWRhdGUgaW5wdXQgd2l0aG91dCBjb21waWxpbmcgb3IgdHJhbnNsYXRpbmciLAorCSIgIC1lPG5hbWVzPiAgdHJhbnNsYXRlL2NvbXBpbGUgb25seSBlbnRyaWVzIG5hbWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0IiwKKwkiICAtZiAgICAgICAgIGZvcm1hdCBjb21wbGV4IHN0cmluZ3MgZm9yIHJlYWRhYmlsaXR5IiwKKwkiICAtRyAgICAgICAgIGZvcm1hdCAle251bWJlcn0gdG8gJSdjaGFyJyIsCisJIiAgLWcgICAgICAgICBmb3JtYXQgJSdjaGFyJyB0byAle251bWJlcn0iLAorCSIgIC1JICAgICAgICAgdHJhbnNsYXRlIGVudHJpZXMgdG8gdGVybWluZm8gc291cmNlIGZvcm0iLAorCSIgIC1MICAgICAgICAgdHJhbnNsYXRlIGVudHJpZXMgdG8gZnVsbCB0ZXJtaW5mbyBzb3VyY2UgZm9ybSIsCisJIiAgLU4gICAgICAgICBkaXNhYmxlIHNtYXJ0IGRlZmF1bHRzIGZvciBzb3VyY2UgdHJhbnNsYXRpb24iLAorCSIgIC1vPGRpcj4gICAgc2V0IG91dHB1dCBkaXJlY3RvcnkgZm9yIGNvbXBpbGVkIGVudHJ5IHdyaXRlcyIsCisJIiAgLVI8bmFtZT4gICByZXN0cmljdCB0cmFuc2xhdGlvbiB0byBnaXZlbiB0ZXJtaW5mby90ZXJtY2FwIHZlcnNpb24iLAorCSIgIC1yICAgICAgICAgZm9yY2UgcmVzb2x1dGlvbiBvZiBhbGwgdXNlIGVudHJpZXMgaW4gc291cmNlIHRyYW5zbGF0aW9uIiwKKwkiICAtcyAgICAgICAgIHByaW50IHN1bW1hcnkgc3RhdGlzdGljcyIsCisJIiAgLVQgICAgICAgICByZW1vdmUgc2l6ZS1yZXN0cmljdGlvbnMgb24gY29tcGlsZWQgZGVzY3JpcHRpb24iLAorI2lmIE5DVVJTRVNfWE5BTUVTCisJIiAgLXQgICAgICAgICBzdXBwcmVzcyBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcyIsCisjZW5kaWYKKwkiICAtVSAgICAgICAgIHN1cHByZXNzIHBvc3QtcHJvY2Vzc2luZyBvZiBlbnRyaWVzIiwKKwkiICAtViAgICAgICAgIHByaW50IHZlcnNpb24iLAorCSIgIC12W25dICAgICAgc2V0IHZlcmJvc2l0eSBsZXZlbCIsCisJIiAgLXdbbl0gICAgICBzZXQgZm9ybWF0IHdpZHRoIGZvciB0cmFuc2xhdGlvbiBvdXRwdXQiLAorI2lmIE5DVVJTRVNfWE5BTUVTCisJIiAgLXggICAgICAgICB0cmVhdCB1bmtub3duIGNhcGFiaWxpdGllcyBhcyB1c2VyLWRlZmluZWQiLAorI2VuZGlmCisJIiIsCisJIlBhcmFtZXRlcnM6IiwKKwkiICA8ZmlsZT4gICAgIGZpbGUgdG8gdHJhbnNsYXRlIG9yIGNvbXBpbGUiCisgICAgfTsKKyAgICBzaXplX3QgajsKKworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzICVzXG4iLCBfbmNfcHJvZ25hbWUsIHVzYWdlX3N0cmluZyk7CisgICAgZm9yIChqID0gMDsgaiA8IFNJWkVPRih0YmwpOyBqKyspIHsKKwlmcHV0cyh0Ymxbal0sIHN0ZGVycik7CisJcHV0YygnXG4nLCBzdGRlcnIpOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCisjZGVmaW5lIExfQlJBQ0UgJ3snCisjZGVmaW5lIFJfQlJBQ0UgJ30nCisjZGVmaW5lIFNfUVVPVEUgJ1wnJzsKKworc3RhdGljIHZvaWQKK3dyaXRlX2l0KEVOVFJZICogZXApCit7CisgICAgdW5zaWduZWQgbjsKKyAgICBpbnQgY2g7CisgICAgY2hhciAqcywgKmQsICp0OworICAgIGNoYXIgcmVzdWx0W01BWF9FTlRSWV9TSVpFXTsKKworICAgIC8qCisgICAgICogTG9vayBmb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gJXtudW1iZXJ9LCBjb252ZXJ0IHRoZW0gdG8gJSdjaGFyJywKKyAgICAgKiB3aGljaCBpcyBzaG9ydGVyIGFuZCBydW5zIGEgbGl0dGxlIGZhc3Rlci4KKyAgICAgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgU1RSQ09VTlQ7IG4rKykgeworCXMgPSBlcC0+dHRlcm0uU3RyaW5nc1tuXTsKKwlpZiAoVkFMSURfU1RSSU5HKHMpCisJICAgICYmIHN0cmNocihzLCBMX0JSQUNFKSAhPSAwKSB7CisJICAgIGQgPSByZXN1bHQ7CisJICAgIHQgPSBzOworCSAgICB3aGlsZSAoKGNoID0gKnQrKykgIT0gMCkgeworCQkqZCsrID0gKGNoYXIpIGNoOworCQlpZiAoY2ggPT0gJ1xcJykgeworCQkgICAgKmQrKyA9ICp0Kys7CisJCX0gZWxzZSBpZiAoKGNoID09ICclJykKKwkJCSAgICYmICgqdCA9PSBMX0JSQUNFKSkgeworCQkgICAgY2hhciAqdiA9IDA7CisJCSAgICBsb25nIHZhbHVlID0gc3RydG9sKHQgKyAxLCAmdiwgMCk7CisJCSAgICBpZiAodiAhPSAwCisJCQkmJiAqdiA9PSBSX0JSQUNFCisJCQkmJiB2YWx1ZSA+IDAKKwkJCSYmIHZhbHVlICE9ICdcXCcJLyogRklYTUUgKi8KKwkJCSYmIHZhbHVlIDwgMTI3CisJCQkmJiBpc3ByaW50KChpbnQpIHZhbHVlKSkgeworCQkJKmQrKyA9IFNfUVVPVEU7CisJCQkqZCsrID0gKGNoYXIpIHZhbHVlOworCQkJKmQrKyA9IFNfUVVPVEU7CisJCQl0ID0gKHYgKyAxKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgICpkID0gMDsKKwkgICAgaWYgKHN0cmxlbihyZXN1bHQpIDwgc3RybGVuKHMpKQorCQlzdHJjcHkocywgcmVzdWx0KTsKKwl9CisgICAgfQorCisgICAgX25jX3NldF90eXBlKF9uY19maXJzdF9uYW1lKGVwLT50dGVybS50ZXJtX25hbWVzKSk7CisgICAgX25jX2N1cnJfbGluZSA9IGVwLT5zdGFydGxpbmU7CisgICAgX25jX3dyaXRlX2VudHJ5KCZlcC0+dHRlcm0pOworfQorCitzdGF0aWMgYm9vbAoraW1tZWRob29rKEVOVFJZICogZXAgR0NDX1VOVVNFRCkKKy8qIHdyaXRlIG91dCBlbnRyaWVzIHdpdGggbm8gdXNlIGNhcGFiaWxpdGllcyBpbW1lZGlhdGVseSB0byBzYXZlIHN0b3JhZ2UgKi8KK3sKKyNpZiAhSEFWRV9CSUdfQ09SRQorICAgIC8qCisgICAgICogVGhpcyBpcyBzdHJpY3RseSBhIGNvcmUtZWNvbm9teSBrbHVnZS4gIFRoZSByZWFsbHkgY2xlYW4gd2F5IHRvIGhhbmRsZQorICAgICAqIGNvbXBpbGF0aW9uIGlzIHRvIHNsdXJwIHRoZSB3aG9sZSBmaWxlIGludG8gY29yZSBhbmQgdGhlbiBkbyBhbGwgdGhlCisgICAgICogbmFtZS1jb2xsaXNpb24gY2hlY2tzIGFuZCBlbnRyeSB3cml0ZXMgaW4gb25lIHN3ZWxsIGZvb3AuICBCdXQgdGhlCisgICAgICogdGVybWluZm8gbWFzdGVyIGZpbGUgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgc29tZSBjb3JlLXBvb3Igc3lzdGVtcyBzd2FwCisgICAgICogbGlrZSBjcmF6eSB3aGVuIHlvdSBjb21waWxlIGl0IHRoaXMgd2F5Li4udGhlcmUgaGF2ZSBiZWVuIHJlcG9ydHMgb2YKKyAgICAgKiB0aGlzIHByb2Nlc3MgdGFraW5nICp0aHJlZSBob3VycyosIHJhdGhlciB0aGFuIHRoZSB0d2VudHkgc2Vjb25kcyBvcgorICAgICAqIGxlc3MgdHlwaWNhbCBvbiBteSBkZXZlbG9wbWVudCBib3guCisgICAgICoKKyAgICAgKiBTby4gIFRoaXMgaG9vayAqaW1tZWRpYXRlbHkqIHdyaXRlcyBvdXQgdGhlIHJlZmVyZW5jZWQgZW50cnkgaWYgaXQKKyAgICAgKiBoYXMgbm8gdXNlIGNhcGFiaWxpdGllcy4gIFRoZSBjb21waWxlciBtYWluIGxvb3AgcmVmcmFpbnMgZnJvbQorICAgICAqIGFkZGluZyB0aGUgZW50cnkgdG8gdGhlIGluLWNvcmUgbGlzdCB3aGVuIHRoaXMgaG9vayBmaXJlcy4gIElmIHNvbWUKKyAgICAgKiBvdGhlciBlbnRyeSBsYXRlciBuZWVkcyB0byByZWZlcmVuY2UgYW4gZW50cnkgdGhhdCBnb3Qgd3JpdHRlbgorICAgICAqIGltbWVkaWF0ZWx5LCB0aGF0J3MgT0s7IHRoZSByZXNvbHV0aW9uIGNvZGUgd2lsbCBmZXRjaCBpdCBvZmYgZGlzaworICAgICAqIHdoZW4gaXQgY2FuJ3QgZmluZCBpdCBpbiBjb3JlLgorICAgICAqCisgICAgICogTmFtZSBjb2xsaXNpb25zIHdpbGwgc3RpbGwgYmUgZGV0ZWN0ZWQsIGp1c3Qgbm90IGFzIGNsZWFubHkuICBUaGUKKyAgICAgKiB3cml0ZV9lbnRyeSgpIGNvZGUgY29tcGxhaW5zIGJlZm9yZSBvdmVyd3JpdGluZyBhbiBlbnRyeSB0aGF0CisgICAgICogcG9zdGRhdGVzIHRoZSB0aW1lIG9mIHRpYydzIGZpcnN0IGNhbGwgdG8gd3JpdGVfZW50cnkoKS4gIFRodXMKKyAgICAgKiBpdCB3aWxsIGNvbXBsYWluIGFib3V0IG92ZXJ3cml0aW5nIGVudHJpZXMgbmV3bHkgbWFkZSBkdXJpbmcgdGhlCisgICAgICogdGljIHJ1biwgYnV0IG5vdCBhYm91dCBvdmVyd3JpdGluZyBvbmVzIHRoYXQgcHJlZGF0ZSBpdC4KKyAgICAgKgorICAgICAqIFRoZSByZWFzb24gdGhpcyBpcyBhIGhvb2ssIGFuZCBub3QgaW4gbGluZSB3aXRoIHRoZSByZXN0IG9mIHRoZQorICAgICAqIGNvbXBpbGVyIGNvZGUsIGlzIHRoYXQgdGhlIHN1cHBvcnQgZm9yIHRlcm1jYXAgZmFsbGJhY2sgY2Fubm90IGFzc3VtZQorICAgICAqIGl0IGhhcyBhbnl3aGVyZSB0byBzcG9vbCBvdXQgdGhlc2UgZW50cmllcyEKKyAgICAgKgorICAgICAqIFRoZSBfbmNfc2V0X3R5cGUoKSBjYWxsIGhlcmUgcmVxdWlyZXMgYSBjb21wZW5zYXRpbmcgb25lIGluCisgICAgICogX25jX3BhcnNlX2VudHJ5KCkuCisgICAgICoKKyAgICAgKiBJZiB5b3UgZGVmaW5lIEhBVkVfQklHX0NPUkUsIHlvdSdsbCBkaXNhYmxlIHRoaXMga2x1Z2UuICBUaGlzIHdpbGwKKyAgICAgKiBtYWtlIHRpYyBhIGJpdCBmYXN0ZXIgKGJlY2F1c2UgdGhlIHJlc29sdXRpb24gY29kZSB3b24ndCBoYXZlIHRvIGRvCisgICAgICogZGlzayBJL08gbmVhcmx5IGFzIG9mdGVuKS4KKyAgICAgKi8KKyAgICBpZiAoZXAtPm51c2VzID09IDApIHsKKwlpbnQgb2xkbGluZSA9IF9uY19jdXJyX2xpbmU7CisKKwl3cml0ZV9pdChlcCk7CisJX25jX2N1cnJfbGluZSA9IG9sZGxpbmU7CisJZnJlZShlcC0+dHRlcm0uc3RyX3RhYmxlKTsKKwlyZXR1cm4gKFRSVUUpOworICAgIH0KKyNlbmRpZiAvKiBIQVZFX0JJR19DT1JFICovCisgICAgcmV0dXJuIChGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCitwdXRfdHJhbnNsYXRlKGludCBjKQorLyogZW1pdCBhIGNvbW1lbnQgY2hhciwgdHJhbnNsYXRpbmcgdGVybWluZm8gbmFtZXMgdG8gdGVybWNhcCBuYW1lcyAqLworeworICAgIHN0YXRpYyBib29sIGluX25hbWUgPSBGQUxTRTsKKyAgICBzdGF0aWMgc2l6ZV90IGhhdmUsIHVzZWQ7CisgICAgc3RhdGljIGNoYXIgKm5hbWVidWYsICpzdWZmaXg7CisKKyAgICBpZiAoaW5fbmFtZSkgeworCWlmICh1c2VkICsgMSA+PSBoYXZlKSB7CisJICAgIGhhdmUgKz0gMTMyOworCSAgICBuYW1lYnVmID0gdHlwZVJlYWxsb2MoY2hhciwgaGF2ZSwgbmFtZWJ1Zik7CisJICAgIHN1ZmZpeCA9IHR5cGVSZWFsbG9jKGNoYXIsIGhhdmUsIHN1ZmZpeCk7CisJfQorCWlmIChjID09ICdcbicgfHwgYyA9PSAnQCcpIHsKKwkgICAgbmFtZWJ1Zlt1c2VkKytdID0gJ1wwJzsKKwkgICAgKHZvaWQpIHB1dGNoYXIoJzwnKTsKKwkgICAgKHZvaWQpIGZwdXRzKG5hbWVidWYsIHN0ZG91dCk7CisJICAgIHB1dGNoYXIoYyk7CisJICAgIGluX25hbWUgPSBGQUxTRTsKKwl9IGVsc2UgaWYgKGMgIT0gJz4nKSB7CisJICAgIG5hbWVidWZbdXNlZCsrXSA9IChjaGFyKSBjOworCX0gZWxzZSB7CQkvKiBhaCEgY2FuZGlkYXRlIG5hbWUhICovCisJICAgIGNoYXIgKnVwOworCSAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKnRwOworCisJICAgIG5hbWVidWZbdXNlZCsrXSA9ICdcMCc7CisJICAgIGluX25hbWUgPSBGQUxTRTsKKworCSAgICBzdWZmaXhbMF0gPSAnXDAnOworCSAgICBpZiAoKHVwID0gc3RyY2hyKG5hbWVidWYsICcjJykpICE9IDAKKwkJfHwgKHVwID0gc3RyY2hyKG5hbWVidWYsICc9JykpICE9IDAKKwkJfHwgKCh1cCA9IHN0cmNocihuYW1lYnVmLCAnQCcpKSAhPSAwICYmIHVwWzFdID09ICc+JykpIHsKKwkJKHZvaWQpIHN0cmNweShzdWZmaXgsIHVwKTsKKwkJKnVwID0gJ1wwJzsKKwkgICAgfQorCisJICAgIGlmICgodHAgPSBuYW1ldHJhbnMobmFtZWJ1ZikpICE9IDApIHsKKwkJKHZvaWQpIHB1dGNoYXIoJzonKTsKKwkJKHZvaWQpIGZwdXRzKHRwLCBzdGRvdXQpOworCQkodm9pZCkgZnB1dHMoc3VmZml4LCBzdGRvdXQpOworCQkodm9pZCkgcHV0Y2hhcignOicpOworCSAgICB9IGVsc2UgeworCQkvKiBjb3VsZG4ndCBmaW5kIGEgdHJhbnNsYXRpb24sIGp1c3QgZHVtcCB0aGUgbmFtZSAqLworCQkodm9pZCkgcHV0Y2hhcignPCcpOworCQkodm9pZCkgZnB1dHMobmFtZWJ1Ziwgc3Rkb3V0KTsKKwkJKHZvaWQpIGZwdXRzKHN1ZmZpeCwgc3Rkb3V0KTsKKwkJKHZvaWQpIHB1dGNoYXIoJz4nKTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCXVzZWQgPSAwOworCWlmIChjID09ICc8JykgeworCSAgICBpbl9uYW1lID0gVFJVRTsKKwl9IGVsc2UgeworCSAgICBwdXRjaGFyKGMpOworCX0KKyAgICB9Cit9CisKKy8qIFJldHVybnMgYSBzdHJpbmcsIHN0cmlwcGVkIG9mIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworc3RhdGljIGNoYXIgKgorc3RyaXBwZWQoY2hhciAqc3JjKQoreworICAgIHdoaWxlIChpc3NwYWNlKFVDaGFyKCpzcmMpKSkKKwlzcmMrKzsKKyAgICBpZiAoKnNyYyAhPSAnXDAnKSB7CisJY2hhciAqZHN0ID0gc3RyY3B5KChjaGFyICopIG1hbGxvYyhzdHJsZW4oc3JjKSArIDEpLCBzcmMpOworCXNpemVfdCBsZW4gPSBzdHJsZW4oZHN0KTsKKwl3aGlsZSAoLS1sZW4gIT0gMCAmJiBpc3NwYWNlKFVDaGFyKGRzdFtsZW5dKSkpCisJICAgIGRzdFtsZW5dID0gJ1wwJzsKKwlyZXR1cm4gZHN0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIEZJTEUgKgorb3Blbl9pbnB1dChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworICAgIHN0cnVjdCBzdGF0IHNiOworCisgICAgaWYgKGZwID09IDApIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBDYW4ndCBvcGVuICVzXG4iLCBfbmNfcHJvZ25hbWUsIGZpbGVuYW1lKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBpZiAoZnN0YXQoZmlsZW5vKGZwKSwgJnNiKSA8IDAKKwl8fCAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJFRykgeworCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzIGlzIG5vdCBhIGZpbGVcbiIsIF9uY19wcm9nbmFtZSwgZmlsZW5hbWUpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIHJldHVybiBmcDsKK30KKworLyogUGFyc2UgdGhlICItZSIgb3B0aW9uLXZhbHVlIGludG8gYSBsaXN0IG9mIG5hbWVzICovCitzdGF0aWMgY2hhciAqKgorbWFrZV9uYW1lbGlzdChjaGFyICpzcmMpCit7CisgICAgY2hhciAqKmRzdCA9IDA7CisKKyAgICBjaGFyICpzLCAqYmFzZTsKKyAgICB1bnNpZ25lZCBwYXNzLCBuLCBubjsKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworCisgICAgaWYgKHNyYyA9PSAwKSB7CisJLyogRU1QVFkgKi8gOworICAgIH0gZWxzZSBpZiAoc3RyY2hyKHNyYywgJy8nKSAhPSAwKSB7CQkvKiBhIGZpbGVuYW1lICovCisJRklMRSAqZnAgPSBvcGVuX2lucHV0KHNyYyk7CisKKwlmb3IgKHBhc3MgPSAxOyBwYXNzIDw9IDI7IHBhc3MrKykgeworCSAgICBubiA9IDA7CisJICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmcCkgIT0gMCkgeworCQlpZiAoKHMgPSBzdHJpcHBlZChidWZmZXIpKSAhPSAwKSB7CisJCSAgICBpZiAoZHN0ICE9IDApCisJCQlkc3Rbbm5dID0gczsKKwkJICAgIGVsc2UKKwkJCWZyZWUocyk7CisJCSAgICBubisrOworCQl9CisJICAgIH0KKwkgICAgaWYgKHBhc3MgPT0gMSkgeworCQlkc3QgPSB0eXBlQ2FsbG9jKGNoYXIgKiwgbm4gKyAxKTsKKwkJcmV3aW5kKGZwKTsKKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0gZWxzZSB7CQkJLyogbGl0ZXJhbCBsaXN0IG9mIG5hbWVzICovCisJZm9yIChwYXNzID0gMTsgcGFzcyA8PSAyOyBwYXNzKyspIHsKKwkgICAgZm9yIChuID0gbm4gPSAwLCBiYXNlID0gc3JjOzsgbisrKSB7CisJCWludCBtYXJrID0gc3JjW25dOworCQlpZiAobWFyayA9PSAnLCcgfHwgbWFyayA9PSAnXDAnKSB7CisJCSAgICBpZiAocGFzcyA9PSAxKSB7CisJCQlubisrOworCQkgICAgfSBlbHNlIHsKKwkJCXNyY1tuXSA9ICdcMCc7CisJCQlpZiAoKHMgPSBzdHJpcHBlZChiYXNlKSkgIT0gMCkKKwkJCSAgICBkc3Rbbm4rK10gPSBzOworCQkJYmFzZSA9ICZzcmNbbiArIDFdOworCQkgICAgfQorCQl9CisJCWlmIChtYXJrID09ICdcMCcpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBpZiAocGFzcyA9PSAxKQorCQlkc3QgPSB0eXBlQ2FsbG9jKGNoYXIgKiwgbm4gKyAxKTsKKwl9CisgICAgfQorICAgIGlmIChzaG93c3VtbWFyeSAmJiAoZHN0ICE9IDApKSB7CisJZnByaW50Zihsb2dfZnAsICJFbnRyaWVzIHRoYXQgd2lsbCBiZSBjb21waWxlZDpcbiIpOworCWZvciAobiA9IDA7IGRzdFtuXSAhPSAwOyBuKyspCisJICAgIGZwcmludGYobG9nX2ZwLCAiJXU6JXNcbiIsIG4gKyAxLCBkc3Rbbl0pOworICAgIH0KKyAgICByZXR1cm4gZHN0OworfQorCitzdGF0aWMgYm9vbAorbWF0Y2hlcyhjaGFyICoqbmVlZGxlLCBjb25zdCBjaGFyICpoYXlzdGFjaykKKy8qIGRvZXMgZW50cnkgaW4gbmVlZGxlIGxpc3QgbWF0Y2ggfC1zZXBhcmF0ZWQgZmllbGQgaW4gaGF5c3RhY2s/ICovCit7CisgICAgYm9vbCBjb2RlID0gRkFMU0U7CisgICAgc2l6ZV90IG47CisKKyAgICBpZiAobmVlZGxlICE9IDApIHsKKwlmb3IgKG4gPSAwOyBuZWVkbGVbbl0gIT0gMDsgbisrKSB7CisJICAgIGlmIChfbmNfbmFtZV9tYXRjaChoYXlzdGFjaywgbmVlZGxlW25dLCAifCIpKSB7CisJCWNvZGUgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UKKwljb2RlID0gVFJVRTsKKyAgICByZXR1cm4gKGNvZGUpOworfQorCitzdGF0aWMgRklMRSAqCitvcGVuX3RlbXBmaWxlKGNoYXIgKm5hbWUpCit7CisgICAgRklMRSAqcmVzdWx0ID0gMDsKKyNpZiBIQVZFX01LU1RFTVAKKyAgICBpbnQgZmQgPSBta3N0ZW1wKG5hbWUpOworICAgIGlmIChmZCA+PSAwKQorCXJlc3VsdCA9IGZkb3BlbihmZCwgInciKTsKKyNlbHNlCisgICAgaWYgKHRtcG5hbShuYW1lKSAhPSAwKQorCXJlc3VsdCA9IGZvcGVuKG5hbWUsICJ3Iik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBjaGFyIG15X3RtcG5hbWVbUEFUSF9NQVhdOworICAgIGludCB2X29wdCA9IC0xLCBkZWJ1Z19sZXZlbDsKKyAgICBpbnQgc21hcnRfZGVmYXVsdHMgPSBUUlVFOworICAgIGNoYXIgKnRlcm1jYXA7CisgICAgRU5UUlkgKnFwOworCisgICAgaW50IHRoaXNfb3B0LCBsYXN0X29wdCA9ICc/JzsKKworICAgIGludCBvdXRmb3JtID0gRl9URVJNSU5GTzsJLyogb3V0cHV0IGZvcm1hdCAqLworICAgIGludCBzb3J0bW9kZSA9IFNfVEVSTUlORk87CS8qIHNvcnRfbW9kZSAqLworCisgICAgaW50IHdpZHRoID0gNjA7CisgICAgYm9vbCBmb3JtYXR0ZWQgPSBGQUxTRTsJLyogcmVmb3JtYXQgY29tcGxleCBzdHJpbmdzPyAqLworICAgIGJvb2wgbGl0ZXJhbCA9IEZBTFNFOwkvKiBzdXBwcmVzcyBwb3N0LXByb2Nlc3Npbmc/ICovCisgICAgaW50IG51bWJlcnMgPSAwOwkJLyogZm9ybWF0ICIlJ2NoYXInIiB0by9mcm9tICIle251bWJlcn0iICovCisgICAgYm9vbCBmb3JjZXJlc29sdmUgPSBGQUxTRTsJLyogZm9yY2UgcmVzb2x1dGlvbiAqLworICAgIGJvb2wgbGltaXRlZCA9IFRSVUU7CisgICAgY2hhciAqdHZlcnNpb24gPSAoY2hhciAqKSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnNvdXJjZV9maWxlID0gInRlcm1pbmZvIjsKKyAgICBjaGFyICoqbmFtZWxzdCA9IDA7CisgICAgY2hhciAqb3V0ZGlyID0gKGNoYXIgKikgTlVMTDsKKyAgICBib29sIGNoZWNrX29ubHkgPSBGQUxTRTsKKyAgICBib29sIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlID0gRkFMU0U7CisKKyAgICBsb2dfZnAgPSBzdGRlcnI7CisKKyAgICBfbmNfcHJvZ25hbWUgPSBfbmNfcm9vdG5hbWUoYXJndlswXSk7CisKKyAgICBpZiAoKGluZm9kdW1wID0gKHN0cmNtcChfbmNfcHJvZ25hbWUsIFBST0dfQ0FQVE9JTkZPKSA9PSAwKSkgIT0gRkFMU0UpIHsKKwlvdXRmb3JtID0gRl9URVJNSU5GTzsKKwlzb3J0bW9kZSA9IFNfVEVSTUlORk87CisgICAgfQorICAgIGlmICgoY2FwZHVtcCA9IChzdHJjbXAoX25jX3Byb2duYW1lLCBQUk9HX0lORk9UT0NBUCkgPT0gMCkpICE9IEZBTFNFKSB7CisJb3V0Zm9ybSA9IEZfVEVSTUNBUDsKKwlzb3J0bW9kZSA9IFNfVEVSTUNBUDsKKyAgICB9CisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICB1c2VfZXh0ZW5kZWRfbmFtZXMoRkFMU0UpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFByb2Nlc3NpbmcgYXJndW1lbnRzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkLCBzaW5jZSBzb21lb25lIG1hZGUgYQorICAgICAqIGRlc2lnbiBkZWNpc2lvbiB0byBhbGxvdyB0aGUgbnVtZXJpYyB2YWx1ZXMgZm9yIC13LCAtdiBvcHRpb25zIHRvCisgICAgICogYmUgb3B0aW9uYWwuCisgICAgICovCisgICAgd2hpbGUgKCh0aGlzX29wdCA9IGdldG9wdChhcmdjLCBhcmd2LAorCQkJICAgICAgIjAxMjM0NTY3ODlDSUxOUjpUVVZhY2U6Zkdnbzpyc3R2d3giKSkgIT0gLTEpIHsKKwlpZiAoaXNkaWdpdCh0aGlzX29wdCkpIHsKKwkgICAgc3dpdGNoIChsYXN0X29wdCkgeworCSAgICBjYXNlICd2JzoKKwkJdl9vcHQgPSAodl9vcHQgKiAxMCkgKyAodGhpc19vcHQgLSAnMCcpOworCQlicmVhazsKKwkgICAgY2FzZSAndyc6CisJCXdpZHRoID0gKHdpZHRoICogMTApICsgKHRoaXNfb3B0IC0gJzAnKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWlmICh0aGlzX29wdCAhPSAnMScpCisJCSAgICB1c2FnZSgpOworCQlsYXN0X29wdCA9IHRoaXNfb3B0OworCQl3aWR0aCA9IDA7CisJICAgIH0KKwkgICAgY29udGludWU7CisJfQorCXN3aXRjaCAodGhpc19vcHQpIHsKKwljYXNlICdDJzoKKwkgICAgY2FwZHVtcCA9IFRSVUU7CisJICAgIG91dGZvcm0gPSBGX1RFUk1DQVA7CisJICAgIHNvcnRtb2RlID0gU19URVJNQ0FQOworCSAgICBicmVhazsKKwljYXNlICdJJzoKKwkgICAgaW5mb2R1bXAgPSBUUlVFOworCSAgICBvdXRmb3JtID0gRl9URVJNSU5GTzsKKwkgICAgc29ydG1vZGUgPSBTX1RFUk1JTkZPOworCSAgICBicmVhazsKKwljYXNlICdMJzoKKwkgICAgaW5mb2R1bXAgPSBUUlVFOworCSAgICBvdXRmb3JtID0gRl9WQVJJQUJMRTsKKwkgICAgc29ydG1vZGUgPSBTX1ZBUklBQkxFOworCSAgICBicmVhazsKKwljYXNlICdOJzoKKwkgICAgc21hcnRfZGVmYXVsdHMgPSBGQUxTRTsKKwkgICAgbGl0ZXJhbCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ1InOgorCSAgICB0dmVyc2lvbiA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisJY2FzZSAnVCc6CisJICAgIGxpbWl0ZWQgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVSc6CisJICAgIGxpdGVyYWwgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdWJzoKKwkgICAgcHV0cyhjdXJzZXNfdmVyc2lvbigpKTsKKwkgICAgY2xlYW51cChuYW1lbHN0KTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKKwljYXNlICdjJzoKKwkgICAgY2hlY2tfb25seSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2UnOgorCSAgICBuYW1lbHN0ID0gbWFrZV9uYW1lbGlzdChvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICdmJzoKKwkgICAgZm9ybWF0dGVkID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnRyc6CisJICAgIG51bWJlcnMgPSAxOworCSAgICBicmVhazsKKwljYXNlICdnJzoKKwkgICAgbnVtYmVycyA9IC0xOworCSAgICBicmVhazsKKwljYXNlICdvJzoKKwkgICAgb3V0ZGlyID0gb3B0YXJnOworCSAgICBicmVhazsKKwljYXNlICdyJzoKKwkgICAgZm9yY2VyZXNvbHZlID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncyc6CisJICAgIHNob3dzdW1tYXJ5ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAndic6CisJICAgIHZfb3B0ID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIHdpZHRoID0gMDsKKwkgICAgYnJlYWs7CisjaWYgTkNVUlNFU19YTkFNRVMKKwljYXNlICd0JzoKKwkgICAgX25jX2Rpc2FibGVfcGVyaW9kID0gRkFMU0U7CisJICAgIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYSc6CisJICAgIF9uY19kaXNhYmxlX3BlcmlvZCA9IFRSVUU7CisJICAgIC8qIEZBTExUSFJVICovCisJY2FzZSAneCc6CisJICAgIHVzZV9leHRlbmRlZF9uYW1lcyhUUlVFKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKwlsYXN0X29wdCA9IHRoaXNfb3B0OworICAgIH0KKworICAgIGRlYnVnX2xldmVsID0gKHZfb3B0ID4gMCkgPyB2X29wdCA6ICh2X29wdCA9PSAwKTsKKyAgICBzZXRfdHJhY2VfbGV2ZWwoZGVidWdfbGV2ZWwpOworCisgICAgaWYgKF9uY190cmFjaW5nKSB7CisJc2F2ZV9jaGVja190ZXJtdHlwZSA9IF9uY19jaGVja190ZXJtdHlwZTI7CisJX25jX2NoZWNrX3Rlcm10eXBlMiA9IGNoZWNrX3Rlcm10eXBlOworICAgIH0KKyNpZiAhSEFWRV9CSUdfQ09SRQorICAgIC8qCisgICAgICogQWFhcmdoISBpbW1lZGhvb2sgc2VyaW91c2x5IGhvc2VzIHVzIQorICAgICAqCisgICAgICogT25lIHByb2JsZW0gd2l0aCBpbW1lZGhvb2sgaXMgaXQgbWVhbnMgd2UgY2FuJ3QgZG8gLWUuICBQcm9ibGVtCisgICAgICogaXMgdGhhdCB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCBmb3IgZWFjaCB0ZXJtaW5hbCBsaXN0ZWQsIGFsbCB0aGUKKyAgICAgKiB0ZXJtaW5hbHMgaXQgZGVwZW5kcyBvbiB3aWxsIGhhdmUgYmVlbiBrZXB0IGluIGNvcmUgZm9yIHJlZmVyZW5jZQorICAgICAqIHJlc29sdXRpb24gLS0gaW4gZmFjdCBpdCdzIGNlcnRhaW4gdGhlIHByaW1pdGl2ZSB0eXBlcyBhdCB0aGUgZW5kCisgICAgICogb2YgcmVmZXJlbmNlIGNoYWlucyAqd29uJ3QqIGJlIGluIGNvcmUgdW5sZXNzIHRoZXkgd2VyZSBleHBsaWNpdGx5CisgICAgICogaW4gdGhlIHNlbGVjdCBsaXN0IHRoZW1zZWx2ZXMuCisgICAgICovCisgICAgaWYgKG5hbWVsc3QgJiYgKCFpbmZvZHVtcCAmJiAhY2FwZHVtcCkpIHsKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCSAgICAgICAiU29ycnksIC1lIGNhbid0IGJlIHVzZWQgd2l0aG91dCAtSSBvciAtQ1xuIik7CisJY2xlYW51cChuYW1lbHN0KTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKyNlbmRpZiAvKiBIQVZFX0JJR19DT1JFICovCisKKyAgICBpZiAob3B0aW5kIDwgYXJnYykgeworCXNvdXJjZV9maWxlID0gYXJndltvcHRpbmQrK107CisJaWYgKG9wdGluZCA8IGFyZ2MpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsCisJCSAgICAiJXM6IFRvbyBtYW55IGZpbGUgbmFtZXMuICBVc2FnZTpcblx0JXMgJXMiLAorCQkgICAgX25jX3Byb2duYW1lLAorCQkgICAgX25jX3Byb2duYW1lLAorCQkgICAgdXNhZ2Vfc3RyaW5nKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisgICAgfSBlbHNlIHsKKwlpZiAoaW5mb2R1bXAgPT0gVFJVRSkgeworCSAgICAvKiBjYXB0b2luZm8ncyBuby1hcmd1bWVudCBjYXNlICovCisJICAgIHNvdXJjZV9maWxlID0gIi9ldGMvdGVybWNhcCI7CisJICAgIGlmICgodGVybWNhcCA9IGdldGVudigiVEVSTUNBUCIpKSAhPSAwCisJCSYmIChuYW1lbHN0ID0gbWFrZV9uYW1lbGlzdChnZXRlbnYoIlRFUk0iKSkpICE9IDApIHsKKwkJaWYgKGFjY2Vzcyh0ZXJtY2FwLCBGX09LKSA9PSAwKSB7CisJCSAgICAvKiBmaWxlIGV4aXN0cyAqLworCQkgICAgc291cmNlX2ZpbGUgPSB0ZXJtY2FwOworCQl9IGVsc2UgaWYgKCh0bXBfZnAgPSBvcGVuX3RlbXBmaWxlKHN0cmNweShteV90bXBuYW1lLAorCQkJCQkJCSAgIi90bXAvWFhYWFhYIikpKQorCQkJICAgIT0gMCkgeworCQkgICAgc291cmNlX2ZpbGUgPSBteV90bXBuYW1lOworCQkgICAgZnByaW50Zih0bXBfZnAsICIlc1xuIiwgdGVybWNhcCk7CisJCSAgICBmY2xvc2UodG1wX2ZwKTsKKwkJICAgIHRtcF9mcCA9IG9wZW5faW5wdXQoc291cmNlX2ZpbGUpOworCQkgICAgdG9fcmVtb3ZlID0gc291cmNlX2ZpbGU7CisJCX0gZWxzZSB7CisJCSAgICBmYWlsZWQoInRtcG5hbSIpOworCQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICAvKiB0aWMgKi8KKwkgICAgZnByaW50ZihzdGRlcnIsCisJCSAgICAiJXM6IEZpbGUgbmFtZSBuZWVkZWQuICBVc2FnZTpcblx0JXMgJXMiLAorCQkgICAgX25jX3Byb2duYW1lLAorCQkgICAgX25jX3Byb2duYW1lLAorCQkgICAgdXNhZ2Vfc3RyaW5nKTsKKwkgICAgY2xlYW51cChuYW1lbHN0KTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisgICAgfQorCisgICAgaWYgKHRtcF9mcCA9PSAwKQorCXRtcF9mcCA9IG9wZW5faW5wdXQoc291cmNlX2ZpbGUpOworCisgICAgaWYgKGluZm9kdW1wKQorCWR1bXBfaW5pdCh0dmVyc2lvbiwKKwkJICBzbWFydF9kZWZhdWx0cworCQkgID8gb3V0Zm9ybQorCQkgIDogRl9MSVRFUkFMLAorCQkgIHNvcnRtb2RlLCB3aWR0aCwgZGVidWdfbGV2ZWwsIGZvcm1hdHRlZCk7CisgICAgZWxzZSBpZiAoY2FwZHVtcCkKKwlkdW1wX2luaXQodHZlcnNpb24sCisJCSAgb3V0Zm9ybSwKKwkJICBzb3J0bW9kZSwgd2lkdGgsIGRlYnVnX2xldmVsLCBGQUxTRSk7CisKKyAgICAvKiBwYXJzZSBlbnRyaWVzIG91dCBvZiB0aGUgc291cmNlIGZpbGUgKi8KKyAgICBfbmNfc2V0X3NvdXJjZShzb3VyY2VfZmlsZSk7CisjaWYgIUhBVkVfQklHX0NPUkUKKyAgICBpZiAoIShjaGVja19vbmx5IHx8IGluZm9kdW1wIHx8IGNhcGR1bXApKQorCV9uY19zZXRfd3JpdGVkaXIob3V0ZGlyKTsKKyNlbmRpZiAvKiBIQVZFX0JJR19DT1JFICovCisgICAgX25jX3JlYWRfZW50cnlfc291cmNlKHRtcF9mcCwgKGNoYXIgKikgTlVMTCwKKwkJCSAgIXNtYXJ0X2RlZmF1bHRzIHx8IGxpdGVyYWwsIEZBTFNFLAorCQkJICAoKGNoZWNrX29ubHkgfHwgaW5mb2R1bXAgfHwgY2FwZHVtcCkKKwkJCSAgID8gTlVMTEhPT0sKKwkJCSAgIDogaW1tZWRob29rKSk7CisKKyAgICAvKiBkbyB1c2UgcmVzb2x1dGlvbiAqLworICAgIGlmIChjaGVja19vbmx5IHx8ICghaW5mb2R1bXAgJiYgIWNhcGR1bXApIHx8IGZvcmNlcmVzb2x2ZSkgeworCWlmICghX25jX3Jlc29sdmVfdXNlczIoVFJVRSwgbGl0ZXJhbCkgJiYgIWNoZWNrX29ubHkpIHsKKwkgICAgY2xlYW51cChuYW1lbHN0KTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisgICAgfQorCisgICAgLyogbGVuZ3RoIGNoZWNrICovCisgICAgaWYgKGNoZWNrX29ubHkgJiYgKGNhcGR1bXAgfHwgaW5mb2R1bXApKSB7CisJZm9yX2VudHJ5X2xpc3QocXApIHsKKwkgICAgaWYgKG1hdGNoZXMobmFtZWxzdCwgcXAtPnR0ZXJtLnRlcm1fbmFtZXMpKSB7CisJCWludCBsZW4gPSBmbXRfZW50cnkoJnFwLT50dGVybSwgTlVMTCwgRkFMU0UsIFRSVUUsIGluZm9kdW1wLCBudW1iZXJzKTsKKworCQlpZiAobGVuID4gKGluZm9kdW1wID8gTUFYX1RFUk1JTkZPX0xFTkdUSCA6IE1BWF9URVJNQ0FQX0xFTkdUSCkpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgIndhcm5pbmc6IHJlc29sdmVkICVzIGVudHJ5IGlzICVkIGJ5dGVzIGxvbmdcbiIsCisJCQkJICAgX25jX2ZpcnN0X25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMpLAorCQkJCSAgIGxlbik7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogd3JpdGUgb3IgZHVtcCBhbGwgZW50cmllcyAqLworICAgIGlmICghY2hlY2tfb25seSkgeworCWlmICghaW5mb2R1bXAgJiYgIWNhcGR1bXApIHsKKwkgICAgX25jX3NldF93cml0ZWRpcihvdXRkaXIpOworCSAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCQlpZiAobWF0Y2hlcyhuYW1lbHN0LCBxcC0+dHRlcm0udGVybV9uYW1lcykpCisJCSAgICB3cml0ZV9pdChxcCk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICAvKiB0aGlzIGlzIGluIGNhc2UgaW5mb3RvY2FwKCkgZ2VuZXJhdGVzIHdhcm5pbmdzICovCisJICAgIF9uY19jdXJyX2NvbCA9IF9uY19jdXJyX2xpbmUgPSAtMTsKKworCSAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCQlpZiAobWF0Y2hlcyhuYW1lbHN0LCBxcC0+dHRlcm0udGVybV9uYW1lcykpIHsKKwkJICAgIGludCBqID0gcXAtPmNlbmQgLSBxcC0+Y3N0YXJ0OworCQkgICAgaW50IGxlbiA9IDA7CisKKwkJICAgIC8qIHRoaXMgaXMgaW4gY2FzZSBpbmZvdG9jYXAoKSBnZW5lcmF0ZXMgd2FybmluZ3MgKi8KKwkJICAgIF9uY19zZXRfdHlwZShfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcykpOworCisJCSAgICAodm9pZCkgZnNlZWsodG1wX2ZwLCBxcC0+Y3N0YXJ0LCBTRUVLX1NFVCk7CisJCSAgICB3aGlsZSAoai0tID4gMCkgeworCQkJaWYgKGluZm9kdW1wKQorCQkJICAgICh2b2lkKSBwdXRjaGFyKGZnZXRjKHRtcF9mcCkpOworCQkJZWxzZQorCQkJICAgIHB1dF90cmFuc2xhdGUoZmdldGModG1wX2ZwKSk7CisJCSAgICB9CisKKwkJICAgIGR1bXBfZW50cnkoJnFwLT50dGVybSwgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUsCisJCQkgICAgICAgbGltaXRlZCwgbnVtYmVycywgTlVMTCk7CisJCSAgICBmb3IgKGogPSAwOyBqIDwgKGludCkgcXAtPm51c2VzOyBqKyspCisJCQlkdW1wX3VzZXMocXAtPnVzZXNbal0ubmFtZSwgIWNhcGR1bXApOworCQkgICAgbGVuID0gc2hvd19lbnRyeSgpOworCQkgICAgaWYgKGRlYnVnX2xldmVsICE9IDAgJiYgIWxpbWl0ZWQpCisJCQlwcmludGYoIiMgbGVuZ3RoPSVkXG4iLCBsZW4pOworCQl9CisJICAgIH0KKwkgICAgaWYgKCFuYW1lbHN0ICYmIF9uY190YWlsKSB7CisJCWludCBjLCBvbGRjID0gJ1wwJzsKKwkJYm9vbCBpbl9jb21tZW50ID0gRkFMU0U7CisJCWJvb2wgdHJhaWxpbmdfY29tbWVudCA9IEZBTFNFOworCisJCSh2b2lkKSBmc2Vlayh0bXBfZnAsIF9uY190YWlsLT5jZW5kLCBTRUVLX1NFVCk7CisJCXdoaWxlICgoYyA9IGZnZXRjKHRtcF9mcCkpICE9IEVPRikgeworCQkgICAgaWYgKG9sZGMgPT0gJ1xuJykgeworCQkJaWYgKGMgPT0gJyMnKSB7CisJCQkgICAgdHJhaWxpbmdfY29tbWVudCA9IFRSVUU7CisJCQkgICAgaW5fY29tbWVudCA9IFRSVUU7CisJCQl9IGVsc2UgeworCQkJICAgIGluX2NvbW1lbnQgPSBGQUxTRTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmICh0cmFpbGluZ19jb21tZW50CisJCQkmJiAoaW5fY29tbWVudCB8fCAob2xkYyA9PSAnXG4nICYmIGMgPT0gJ1xuJykpKQorCQkJcHV0Y2hhcihjKTsKKwkJICAgIG9sZGMgPSBjOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogU2hvdyB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggZW50cmllcyB3ZXJlIHdyaXR0ZW4sIGFuZCB0aGUgdG90YWwKKyAgICAgKiBudW1iZXIgb2YgZW50cmllcworICAgICAqLworICAgIGlmIChzaG93c3VtbWFyeQorCSYmICghKGNoZWNrX29ubHkgfHwgaW5mb2R1bXAgfHwgY2FwZHVtcCkpKSB7CisJaW50IHRvdGFsID0gX25jX3RpY193cml0dGVuKCk7CisJaWYgKHRvdGFsICE9IDApCisJICAgIGZwcmludGYobG9nX2ZwLCAiJWQgZW50cmllcyB3cml0dGVuIHRvICVzXG4iLAorCQkgICAgdG90YWwsCisJCSAgICBfbmNfdGljX2RpcigoY2hhciAqKSAwKSk7CisJZWxzZQorCSAgICBmcHJpbnRmKGxvZ19mcCwgIk5vIGVudHJpZXMgd3JpdHRlblxuIik7CisgICAgfQorICAgIGNsZWFudXAobmFtZWxzdCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworLyoKKyAqIFRoaXMgYml0IG9mIGxlZ2VyZGVtYWluIHR1cm5zIGFsbCB0aGUgdGVybWluZm8gdmFyaWFibGUgbmFtZXMgaW50bworICogcmVmZXJlbmNlcyB0byBsb2NhdGlvbnMgaW4gdGhlIGFycmF5cyBCb29sZWFucywgTnVtYmVycywgYW5kIFN0cmluZ3MgLS0tCisgKiBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZCAoc2VlIGNvbXBfcGFyc2UuYykuCisgKi8KKyN1bmRlZiBDVVIKKyNkZWZpbmUgQ1VSIHRwLT4KKworLyoKKyAqIENoZWNrIGlmIHRoZSBhbHRlcm5hdGUgY2hhcmFjdGVyLXNldCBjYXBhYmlsaXRpZXMgYXJlIGNvbnNpc3RlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19hY3MoVEVSTVRZUEUgKnRwKQoreworICAgIGlmIChWQUxJRF9TVFJJTkcoYWNzX2NoYXJzKSkgeworCWNvbnN0IGNoYXIgKmJveGVzID0gImxta2p0dXZ3cXhuIjsKKwljaGFyIG1hcHBlZFsyNTZdOworCWNoYXIgbWlzc2luZ1syNTZdOworCWNvbnN0IGNoYXIgKnA7CisJY2hhciAqcTsKKworCW1lbXNldChtYXBwZWQsIDAsIHNpemVvZihtYXBwZWQpKTsKKwlmb3IgKHAgPSBhY3NfY2hhcnM7ICpwICE9ICdcMCc7IHAgKz0gMikgeworCSAgICBpZiAocFsxXSA9PSAnXDAnKSB7CisJCV9uY193YXJuaW5nKCJhY3NjIGhhcyBvZGQgbnVtYmVyIG9mIGNoYXJhY3RlcnMiKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbWFwcGVkW1VDaGFyKHBbMF0pXSA9IHBbMV07CisJfQorCisJaWYgKG1hcHBlZFtVQ2hhcignSScpXSAmJiAhbWFwcGVkW1VDaGFyKCdpJyldKSB7CisJICAgIF9uY193YXJuaW5nKCJhY3NjIHJlZmVycyB0byAnSScsIHdoaWNoIGlzIHByb2JhYmx5IGFuIGVycm9yIik7CisJfQorCisJZm9yIChwID0gYm94ZXMsIHEgPSBtaXNzaW5nOyAqcCAhPSAnXDAnOyArK3ApIHsKKwkgICAgaWYgKCFtYXBwZWRbVUNoYXIocFswXSldKSB7CisJCSpxKysgPSBwWzBdOworCSAgICB9CisJfQorCSpxID0gJ1wwJzsKKworCWFzc2VydChzdHJsZW4obWlzc2luZykgPD0gc3RybGVuKGJveGVzKSk7CisJaWYgKCptaXNzaW5nICE9ICdcMCcgJiYgc3RyY21wKG1pc3NpbmcsIGJveGVzKSkgeworCSAgICBfbmNfd2FybmluZygiYWNzYyBpcyBtaXNzaW5nIHNvbWUgbGluZS1kcmF3aW5nIG1hcHBpbmc6ICVzIiwgbWlzc2luZyk7CisJfQorICAgIH0KK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBjb2xvciBjYXBhYmlsaXRpZXMgYXJlIGNvbnNpc3RlbnQKKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2NvbG9ycyhURVJNVFlQRSAqdHApCit7CisgICAgaWYgKChtYXhfY29sb3JzID4gMCkgIT0gKG1heF9wYWlycyA+IDApCisJfHwgKChtYXhfY29sb3JzID4gbWF4X3BhaXJzKSAmJiAoaW5pdGlhbGl6ZV9wYWlyID09IDApKSkKKwlfbmNfd2FybmluZygiaW5jb25zaXN0ZW50IHZhbHVlcyBmb3IgbWF4X2NvbG9ycyAoJWQpIGFuZCBtYXhfcGFpcnMgKCVkKSIsCisJCSAgICBtYXhfY29sb3JzLCBtYXhfcGFpcnMpOworCisgICAgUEFJUkVEKHNldF9mb3JlZ3JvdW5kLCBzZXRfYmFja2dyb3VuZCk7CisgICAgUEFJUkVEKHNldF9hX2ZvcmVncm91bmQsIHNldF9hX2JhY2tncm91bmQpOworICAgIFBBSVJFRChzZXRfY29sb3JfcGFpciwgaW5pdGlhbGl6ZV9wYWlyKTsKKworICAgIGlmIChWQUxJRF9TVFJJTkcoc2V0X2ZvcmVncm91bmQpCisJJiYgVkFMSURfU1RSSU5HKHNldF9hX2ZvcmVncm91bmQpCisJJiYgIV9uY19jYXBjbXAoc2V0X2ZvcmVncm91bmQsIHNldF9hX2ZvcmVncm91bmQpKQorCV9uY193YXJuaW5nKCJleHBlY3RlZCBzZXRmL3NldGFmIHRvIGJlIGRpZmZlcmVudCIpOworCisgICAgaWYgKFZBTElEX1NUUklORyhzZXRfYmFja2dyb3VuZCkKKwkmJiBWQUxJRF9TVFJJTkcoc2V0X2FfYmFja2dyb3VuZCkKKwkmJiAhX25jX2NhcGNtcChzZXRfYmFja2dyb3VuZCwgc2V0X2FfYmFja2dyb3VuZCkpCisJX25jX3dhcm5pbmcoImV4cGVjdGVkIHNldGIvc2V0YWIgdG8gYmUgZGlmZmVyZW50Iik7CisKKyAgICAvKiBzZWU6IGhhc19jb2xvcnMoKSAqLworICAgIGlmIChWQUxJRF9OVU1FUklDKG1heF9jb2xvcnMpICYmIFZBTElEX05VTUVSSUMobWF4X3BhaXJzKQorCSYmICgoKHNldF9mb3JlZ3JvdW5kICE9IE5VTEwpCisJICAgICAmJiAoc2V0X2JhY2tncm91bmQgIT0gTlVMTCkpCisJICAgIHx8ICgoc2V0X2FfZm9yZWdyb3VuZCAhPSBOVUxMKQorCQkmJiAoc2V0X2FfYmFja2dyb3VuZCAhPSBOVUxMKSkKKwkgICAgfHwgc2V0X2NvbG9yX3BhaXIpKSB7CisJaWYgKCFWQUxJRF9TVFJJTkcob3JpZ19wYWlyKSAmJiAhVkFMSURfU1RSSU5HKG9yaWdfY29sb3JzKSkKKwkgICAgX25jX3dhcm5pbmcoImV4cGVjdGVkIGVpdGhlciBvcC9vYyBzdHJpbmcgZm9yIHJlc2V0dGluZyBjb2xvcnMiKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjaGFyCitrZXlwYWRfZmluYWwoY29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIGNoYXIgcmVzdWx0ID0gJ1wwJzsKKworICAgIGlmIChWQUxJRF9TVFJJTkcoc3RyaW5nKQorCSYmICpzdHJpbmcrKyA9PSAnXDAzMycKKwkmJiAqc3RyaW5nKysgPT0gJ08nCisJJiYgc3RybGVuKHN0cmluZykgPT0gMSkgeworCXJlc3VsdCA9ICpzdHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAora2V5cGFkX2luZGV4KGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICBjaGFyICp0ZXN0OworICAgIGNvbnN0IGNoYXIgKmxpc3QgPSAiUFFSU3d4eW10dXZscXJzUHBuIjsJLyogYXBwLWtleXBhZCBleGNlcHQgIkVudGVyIiAqLworICAgIGludCBjaDsKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisKKyAgICBpZiAoKGNoID0ga2V5cGFkX2ZpbmFsKHN0cmluZykpICE9ICdcMCcpIHsKKwl0ZXN0ID0gc3RyY2hyKGxpc3QsIGNoKTsKKwlpZiAodGVzdCAhPSAwKQorCSAgICByZXN1bHQgPSAodGVzdCAtIGxpc3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIE1BWF9LUCA1CisvKgorICogRG8gYSBxdWljayBzYW5pdHktY2hlY2sgZm9yIHZ0MTAwLXN0eWxlIGtleXBhZHMgdG8gc2VlIGlmIHRoZSA1LWtleSBrZXlwYWQKKyAqIGlzIG1hcHBlZCBpbmNvbnNpc3RlbnRseS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2tleXBhZChURVJNVFlQRSAqdHApCit7CisgICAgY2hhciBzaG93WzgwXTsKKworICAgIGlmIChWQUxJRF9TVFJJTkcoa2V5X2ExKSAmJgorCVZBTElEX1NUUklORyhrZXlfYTMpICYmCisJVkFMSURfU1RSSU5HKGtleV9iMikgJiYKKwlWQUxJRF9TVFJJTkcoa2V5X2MxKSAmJgorCVZBTElEX1NUUklORyhrZXlfYzMpKSB7CisJY2hhciBmaW5hbFtNQVhfS1AgKyAxXTsKKwlpbnQgbGlzdFtNQVhfS1BdOworCWludCBpbmNyZWFzZSA9IDA7CisJaW50IGosIGssIGtrOworCWludCBsYXN0OworCWludCB0ZXN0OworCisJZmluYWxbMF0gPSBrZXlwYWRfZmluYWwoa2V5X2ExKTsKKwlmaW5hbFsxXSA9IGtleXBhZF9maW5hbChrZXlfYTMpOworCWZpbmFsWzJdID0ga2V5cGFkX2ZpbmFsKGtleV9iMik7CisJZmluYWxbM10gPSBrZXlwYWRfZmluYWwoa2V5X2MxKTsKKwlmaW5hbFs0XSA9IGtleXBhZF9maW5hbChrZXlfYzMpOworCWZpbmFsWzVdID0gJ1wwJzsKKworCS8qIHNwZWNpYWwgY2FzZTogbGVnYWN5IGNvZGluZyB1c2luZyAxLDIsMywwLC4gb24gdGhlIGJvdHRvbSAqLworCWFzc2VydChzdHJsZW4oZmluYWwpIDw9IE1BWF9LUCk7CisJaWYgKCFzdHJjbXAoZmluYWwsICJxc3JwbiIpKQorCSAgICByZXR1cm47CisKKwlsaXN0WzBdID0ga2V5cGFkX2luZGV4KGtleV9hMSk7CisJbGlzdFsxXSA9IGtleXBhZF9pbmRleChrZXlfYTMpOworCWxpc3RbMl0gPSBrZXlwYWRfaW5kZXgoa2V5X2IyKTsKKwlsaXN0WzNdID0ga2V5cGFkX2luZGV4KGtleV9jMSk7CisJbGlzdFs0XSA9IGtleXBhZF9pbmRleChrZXlfYzMpOworCisJLyogY2hlY2sgdGhhdCB0aGV5J3JlIGFsbCB2dDEwMCBrZXlzICovCisJZm9yIChqID0gMDsgaiA8IE1BWF9LUDsgKytqKSB7CisJICAgIGlmIChsaXN0W2pdIDwgMCkgeworCQlyZXR1cm47CisJICAgIH0KKwl9CisKKwkvKiBjaGVjayBpZiB0aGV5J3JlIGFsbCBpbiBpbmNyZWFzaW5nIG9yZGVyICovCisJZm9yIChqID0gMTsgaiA8IE1BWF9LUDsgKytqKSB7CisJICAgIGlmIChsaXN0W2pdID4gbGlzdFtqIC0gMV0pIHsKKwkJKytpbmNyZWFzZTsKKwkgICAgfQorCX0KKwlpZiAoaW5jcmVhc2UgIT0gKE1BWF9LUCAtIDEpKSB7CisJICAgIHNob3dbMF0gPSAnXDAnOworCisJICAgIGZvciAoaiA9IDAsIGxhc3QgPSAtMTsgaiA8IE1BWF9LUDsgKytqKSB7CisJCWZvciAoayA9IDAsIGtrID0gLTEsIHRlc3QgPSAxMDA7IGsgPCA1OyArK2spIHsKKwkJICAgIGlmIChsaXN0W2tdID4gbGFzdCAmJgorCQkJbGlzdFtrXSA8IHRlc3QpIHsKKwkJCXRlc3QgPSBsaXN0W2tdOworCQkJa2sgPSBrOworCQkgICAgfQorCQl9CisJCWxhc3QgPSB0ZXN0OworCQlhc3NlcnQoc3RybGVuKHNob3cpIDwgKE1BWF9LUCAqIDQpKTsKKwkJc3dpdGNoIChraykgeworCQljYXNlIDA6CisJCSAgICBzdHJjYXQoc2hvdywgIiBrYTEiKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDE6CisJCSAgICBzdHJjYXQoc2hvdywgIiBrYTMiKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDI6CisJCSAgICBzdHJjYXQoc2hvdywgIiBrYjIiKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDM6CisJCSAgICBzdHJjYXQoc2hvdywgIiBrYzEiKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDQ6CisJCSAgICBzdHJjYXQoc2hvdywgIiBrYzMiKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgICBfbmNfd2FybmluZygidnQxMDAga2V5cGFkIG9yZGVyIGluY29uc2lzdGVudDogJXMiLCBzaG93KTsKKwl9CisKKyAgICB9IGVsc2UgaWYgKFZBTElEX1NUUklORyhrZXlfYTEpIHx8CisJICAgICAgIFZBTElEX1NUUklORyhrZXlfYTMpIHx8CisJICAgICAgIFZBTElEX1NUUklORyhrZXlfYjIpIHx8CisJICAgICAgIFZBTElEX1NUUklORyhrZXlfYzEpIHx8CisJICAgICAgIFZBTElEX1NUUklORyhrZXlfYzMpKSB7CisJc2hvd1swXSA9ICdcMCc7CisJaWYgKGtleXBhZF9pbmRleChrZXlfYTEpID49IDApCisJICAgIHN0cmNhdChzaG93LCAiIGthMSIpOworCWlmIChrZXlwYWRfaW5kZXgoa2V5X2EzKSA+PSAwKQorCSAgICBzdHJjYXQoc2hvdywgIiBrYTMiKTsKKwlpZiAoa2V5cGFkX2luZGV4KGtleV9iMikgPj0gMCkKKwkgICAgc3RyY2F0KHNob3csICIga2IyIik7CisJaWYgKGtleXBhZF9pbmRleChrZXlfYzEpID49IDApCisJICAgIHN0cmNhdChzaG93LCAiIGtjMSIpOworCWlmIChrZXlwYWRfaW5kZXgoa2V5X2MzKSA+PSAwKQorCSAgICBzdHJjYXQoc2hvdywgIiBrYzMiKTsKKwlpZiAoKnNob3cgIT0gJ1wwJykKKwkgICAgX25jX3dhcm5pbmcoInZ0MTAwIGtleXBhZCBtYXAgaW5jb21wbGV0ZTolcyIsIHNob3cpOworICAgIH0KK30KKworLyoKKyAqIFJldHVybnMgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gY2FwYWJpbGl0eS4KKyAqLworc3RhdGljIGludAorZXhwZWN0ZWRfcGFyYW1zKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgY291bnQ7CisgICAgfSB0YWJsZVtdID0geworCXsgIlMwIiwJCQkxIH0sCS8qICdzY3JlZW4nIGV4dGVuc2lvbiAqLworCXsgImJpcmVwIiwJCTIgfSwKKwl7ICJjaHIiLAkJMSB9LAorCXsgImNvbG9ybm0iLAkJMSB9LAorCXsgImNwaSIsCQkxIH0sCisJeyAiY3NubSIsCQkxIH0sCisJeyAiY3NyIiwJCTIgfSwKKwl7ICJjdWIiLAkJMSB9LAorCXsgImN1ZCIsCQkxIH0sCisJeyAiY3VmIiwJCTEgfSwKKwl7ICJjdXAiLAkJMiB9LAorCXsgImN1dSIsCQkxIH0sCisJeyAiY3ZyIiwJCTEgfSwKKwl7ICJjd2luIiwJCTUgfSwKKwl7ICJkY2giLAkJMSB9LAorCXsgImRlZmMiLAkJMyB9LAorCXsgImRpYWwiLAkJMSB9LAorCXsgImRpc3BjIiwJCTEgfSwKKwl7ICJkbCIsCQkJMSB9LAorCXsgImVjaCIsCQkxIH0sCisJeyAiZ2V0bSIsCQkxIH0sCisJeyAiaHBhIiwJCTEgfSwKKwl7ICJpY2giLAkJMSB9LAorCXsgImlsIiwJCQkxIH0sCisJeyAiaW5kbiIsCQkxIH0sCisJeyAiaW5pdGMiLAkJNCB9LAorCXsgImluaXRwIiwJCTcgfSwKKwl7ICJscGkiLAkJMSB9LAorCXsgIm1jNXAiLAkJMSB9LAorCXsgIm1yY3VwIiwJCTIgfSwKKwl7ICJtdnBhIiwJCTEgfSwKKwl7ICJwZmtleSIsCQkyIH0sCisJeyAicGZsb2MiLAkJMiB9LAorCXsgInBmeCIsCQkyIH0sCisJeyAicGZ4bCIsCQkzIH0sCisJeyAicGxuIiwJCTIgfSwKKwl7ICJxZGlhbCIsCQkxIH0sCisJeyAicmNzZCIsCQkxIH0sCisJeyAicmVwIiwJCTIgfSwKKwl7ICJyaW4iLAkJMSB9LAorCXsgInNjbGsiLAkJMyB9LAorCXsgInNjcCIsCQkxIH0sCisJeyAic2NzIiwJCTEgfSwKKwl7ICJzY3NkIiwJCTIgfSwKKwl7ICJzZXRhYiIsCQkxIH0sCisJeyAic2V0YWYiLAkJMSB9LAorCXsgInNldGIiLAkJMSB9LAorCXsgInNldGNvbG9yIiwJCTEgfSwKKwl7ICJzZXRmIiwJCTEgfSwKKwl7ICJzZ3IiLAkJOSB9LAorCXsgInNncjEiLAkJNiB9LAorCXsgInNsZW5ndGgiLAkJMSB9LAorCXsgInNsaW5lcyIsCQkxIH0sCisJeyAic21nYnAiLAkJMSB9LAkvKiAyIGlmIHNtZ3RwIGlzIG5vdCBnaXZlbiAqLworCXsgInNtZ2xwIiwJCTEgfSwKKwl7ICJzbWdsciIsCQkyIH0sCisJeyAic21ncnAiLAkJMSB9LAorCXsgInNtZ3RiIiwJCTIgfSwKKwl7ICJzbWd0cCIsCQkxIH0sCisJeyAidHNsIiwJCTEgfSwKKwl7ICJ1NiIsCQkJLTEgfSwKKwl7ICJ2cGEiLAkJMSB9LAorCXsgIndpbmQiLAkJNCB9LAorCXsgIndpbmdvIiwJCTEgfSwKKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICB1bnNpZ25lZCBuOworICAgIGludCByZXN1bHQgPSAwOwkJLyogZnVuY3Rpb24ta2V5cywgZXRjLiwgdXNlIG5vbmUgKi8KKworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGFibGUpOyBuKyspIHsKKwlpZiAoIXN0cmNtcChuYW1lLCB0YWJsZVtuXS5uYW1lKSkgeworCSAgICByZXN1bHQgPSB0YWJsZVtuXS5jb3VudDsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBNYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGZvciB0aGUgcGFyYW1ldGVycyB3aGljaCBhcmUgdXNlZCBpbiB0aGUgZ2l2ZW4KKyAqIHN0cmluZ3MuICBJZiB0aGVyZSBhcmUgbm8gIiVwIiB0b2tlbnMsIHRoZW4gdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVyICIlIgorICogbWFya2Vycy4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3BhcmFtcyhURVJNVFlQRSAqdHAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworICAgIGludCBleHBlY3RlZCA9IGV4cGVjdGVkX3BhcmFtcyhuYW1lKTsKKyAgICBpbnQgYWN0dWFsID0gMDsKKyAgICBpbnQgbjsKKyAgICBib29sIHBhcmFtc1sxMF07CisgICAgY2hhciAqcyA9IHZhbHVlOworCisjaWZkZWYgc2V0X3RvcF9tYXJnaW5fcGFybQorICAgIGlmICghc3RyY21wKG5hbWUsICJzbWdicCIpCisJJiYgc2V0X3RvcF9tYXJnaW5fcGFybSA9PSAwKQorCWV4cGVjdGVkID0gMjsKKyNlbmRpZgorCisgICAgZm9yIChuID0gMDsgbiA8IDEwOyBuKyspCisJcGFyYW1zW25dID0gRkFMU0U7CisKKyAgICB3aGlsZSAoKnMgIT0gMCkgeworCWlmICgqcyA9PSAnJScpIHsKKwkgICAgaWYgKCorK3MgPT0gJ1wwJykgeworCQlfbmNfd2FybmluZygiZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyICUlIGluICVzIiwgbmFtZSk7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKCpzID09ICdwJykgeworCQlpZiAoKisrcyA9PSAnXDAnIHx8ICFpc2RpZ2l0KChpbnQpICpzKSkgeworCQkgICAgX25jX3dhcm5pbmcoImV4cGVjdGVkIGRpZ2l0IGFmdGVyICUlcCBpbiAlcyIsIG5hbWUpOworCQkgICAgcmV0dXJuOworCQl9IGVsc2UgeworCQkgICAgbiA9ICgqcyAtICcwJyk7CisJCSAgICBpZiAobiA+IGFjdHVhbCkKKwkJCWFjdHVhbCA9IG47CisJCSAgICBwYXJhbXNbbl0gPSBUUlVFOworCQl9CisJICAgIH0KKwl9CisJcysrOworICAgIH0KKworICAgIGlmIChwYXJhbXNbMF0pIHsKKwlfbmNfd2FybmluZygiJXMgcmVmZXJzIHRvIHBhcmFtZXRlciAwICglJXAwKSwgd2hpY2ggaXMgbm90IGFsbG93ZWQiLCBuYW1lKTsKKyAgICB9CisgICAgaWYgKHZhbHVlID09IHNldF9hdHRyaWJ1dGVzIHx8IGV4cGVjdGVkIDwgMCkgeworCTsKKyAgICB9IGVsc2UgaWYgKGV4cGVjdGVkICE9IGFjdHVhbCkgeworCV9uY193YXJuaW5nKCIlcyB1c2VzICVkIHBhcmFtZXRlcnMsIGV4cGVjdGVkICVkIiwgbmFtZSwKKwkJICAgIGFjdHVhbCwgZXhwZWN0ZWQpOworCWZvciAobiA9IDE7IG4gPCBhY3R1YWw7IG4rKykgeworCSAgICBpZiAoIXBhcmFtc1tuXSkKKwkJX25jX3dhcm5pbmcoIiVzIG9taXRzIHBhcmFtZXRlciAlZCIsIG5hbWUsIG4pOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyBjaGFyICoKK3NraXBfZGVsYXkoY2hhciAqcykKK3sKKyAgICB3aGlsZSAoKnMgPT0gJy8nIHx8IGlzZGlnaXQoVUNoYXIoKnMpKSkKKwkrK3M7CisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBTa2lwIGEgZGVsYXkgYWx0b2dldGhlciwgZS5nLiwgd2hlbiBjb21wYXJpbmcgYSBzaW1wbGUgc3RyaW5nIHRvIHNnciwKKyAqIHRoZSBsYXR0ZXIgbWF5IGhhdmUgYSB3b3JzdC1jYXNlIGRlbGF5IG9uIHRoZSBlbmQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2lnbm9yZV9kZWxheXMoY2hhciAqcykKK3sKKyAgICBpbnQgZGVsYXlpbmcgPSAwOworCisgICAgZG8geworCXN3aXRjaCAoKnMpIHsKKwljYXNlICckJzoKKwkgICAgaWYgKGRlbGF5aW5nID09IDApCisJCWRlbGF5aW5nID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnPCc6CisJICAgIGlmIChkZWxheWluZyA9PSAxKQorCQlkZWxheWluZyA9IDI7CisJICAgIGJyZWFrOworCWNhc2UgJ1wwJzoKKwkgICAgZGVsYXlpbmcgPSAwOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBpZiAoZGVsYXlpbmcpIHsKKwkJcyA9IHNraXBfZGVsYXkocyk7CisJCWlmICgqcyA9PSAnPicpCisJCSAgICArK3M7CisJCWRlbGF5aW5nID0gMDsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJaWYgKGRlbGF5aW5nKQorCSAgICArK3M7CisgICAgfSB3aGlsZSAoZGVsYXlpbmcpOworICAgIHJldHVybiBzOworfQorCisvKgorICogQW4gc2dyIHN0cmluZyBtYXkgY29udGFpbiBzZXZlcmFsIHNldHRpbmdzIG90aGVyIHRoYW4gdGhlIG9uZSB3ZSdyZQorICogaW50ZXJlc3RlZCBpbiwgZXNzZW50aWFsbHkgc2dyMCArIHJtYWNzICsgd2hhdGV2ZXIuICBBcyBsb25nIGFzIHRoZQorICogIndoYXRldmVyIiBpcyBjb250YWluZWQgaW4gdGhlIHNnciBzdHJpbmcsIHRoYXQgaXMgY2xvc2UgZW5vdWdoIGZvciBvdXIKKyAqIHNhbml0eSBjaGVjay4KKyAqLworc3RhdGljIGJvb2wKK3NpbWlsYXJfc2dyKGludCBudW0sIGNoYXIgKmEsIGNoYXIgKmIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzW10gPQorICAgIHsKKwkibm9uZSIKKwksInN0YW5kb3V0IgorCSwidW5kZXJsaW5lIgorCSwicmV2ZXJzZSIKKwksImJsaW5rIgorCSwiZGltIgorCSwiYm9sZCIKKwksImludmlzIgorCSwicHJvdGVjdCIKKwksImFsdGNoYXJzZXQiCisgICAgfTsKKyAgICBjaGFyICpiYXNlX2EgPSBhOworICAgIGNoYXIgKmJhc2VfYiA9IGI7CisgICAgaW50IGRlbGF5aW5nID0gMDsKKworICAgIHdoaWxlICgqYiAhPSAwKSB7CisJd2hpbGUgKCphICE9ICpiKSB7CisJICAgIGlmICgqYSA9PSAwKSB7CisJCWlmIChiWzBdID09ICckJworCQkgICAgJiYgYlsxXSA9PSAnPCcpIHsKKwkJICAgIF9uY193YXJuaW5nKCJEaWQgbm90IGZpbmQgZGVsYXkgJXMiLCBfbmNfdmlzYnVmKGIpKTsKKwkJfSBlbHNlIHsKKwkJICAgIF9uY193YXJuaW5nKCJjaGVja2luZyBzZ3IoJXMpICVzXG5cdGNvbXBhcmUgdG8gJXNcblx0dW5tYXRjaGVkICVzIiwKKwkJCQluYW1lc1tudW1dLCBfbmNfdmlzYnVmMigxLCBiYXNlX2EpLAorCQkJCV9uY192aXNidWYyKDIsIGJhc2VfYiksCisJCQkJX25jX3Zpc2J1ZjIoMywgYikpOworCQl9CisJCXJldHVybiBGQUxTRTsKKwkgICAgfSBlbHNlIGlmIChkZWxheWluZykgeworCQlhID0gc2tpcF9kZWxheShhKTsKKwkJYiA9IHNraXBfZGVsYXkoYik7CisJICAgIH0gZWxzZSB7CisJCWErKzsKKwkgICAgfQorCX0KKwlzd2l0Y2ggKCphKSB7CisJY2FzZSAnJCc6CisJICAgIGlmIChkZWxheWluZyA9PSAwKQorCQlkZWxheWluZyA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJzwnOgorCSAgICBpZiAoZGVsYXlpbmcgPT0gMSkKKwkJZGVsYXlpbmcgPSAyOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBkZWxheWluZyA9IDA7CisJICAgIGJyZWFrOworCX0KKwlhKys7CisJYisrOworICAgIH0KKyAgICAvKiBpZ25vcmUgZGVsYXlzIG9uIHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLworICAgIGEgPSBpZ25vcmVfZGVsYXlzKGEpOworICAgIHJldHVybiAoKG51bSAhPSAwKSB8fCAoKmEgPT0gMCkpOworfQorCitzdGF0aWMgY2hhciAqCitjaGVja19zZ3IoVEVSTVRZUEUgKnRwLCBjaGFyICp6ZXJvLCBpbnQgbnVtLCBjaGFyICpjYXAsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgY2hhciAqdGVzdDsKKworICAgIF9uY190cGFybV9lcnIgPSAwOworICAgIHRlc3QgPSBUUEFSTV85KHNldF9hdHRyaWJ1dGVzLAorCQkgICBudW0gPT0gMSwKKwkJICAgbnVtID09IDIsCisJCSAgIG51bSA9PSAzLAorCQkgICBudW0gPT0gNCwKKwkJICAgbnVtID09IDUsCisJCSAgIG51bSA9PSA2LAorCQkgICBudW0gPT0gNywKKwkJICAgbnVtID09IDgsCisJCSAgIG51bSA9PSA5KTsKKyAgICBpZiAodGVzdCAhPSAwKSB7CisJaWYgKFBSRVNFTlQoY2FwKSkgeworCSAgICBpZiAoIXNpbWlsYXJfc2dyKG51bSwgdGVzdCwgY2FwKSkgeworCQlfbmNfd2FybmluZygiJXMgZGlmZmVycyBmcm9tIHNnciglZClcblx0JXM9JXNcblx0c2dyKCVkKT0lcyIsCisJCQkgICAgbmFtZSwgbnVtLAorCQkJICAgIG5hbWUsIF9uY192aXNidWYyKDEsIGNhcCksCisJCQkgICAgbnVtLCBfbmNfdmlzYnVmMigyLCB0ZXN0KSk7CisJICAgIH0KKwl9IGVsc2UgaWYgKF9uY19jYXBjbXAodGVzdCwgemVybykpIHsKKwkgICAgX25jX3dhcm5pbmcoInNnciglZCkgcHJlc2VudCwgYnV0IG5vdCAlcyIsIG51bSwgbmFtZSk7CisJfQorICAgIH0gZWxzZSBpZiAoUFJFU0VOVChjYXApKSB7CisJX25jX3dhcm5pbmcoInNnciglZCkgbWlzc2luZywgYnV0ICVzIHByZXNlbnQiLCBudW0sIG5hbWUpOworICAgIH0KKyAgICBpZiAoX25jX3RwYXJtX2VycikKKwlfbmNfd2FybmluZygic3RhY2sgZXJyb3IgaW4gc2dyKCVkKSBzdHJpbmciLCBudW0pOworICAgIHJldHVybiB0ZXN0OworfQorCisjZGVmaW5lIENIRUNLX1NHUihudW0sbmFtZSkgY2hlY2tfc2dyKHRwLCB6ZXJvLCBudW0sIG5hbWUsICNuYW1lKQorCisjaWZkZWYgVFJBQ0UKKy8qCisgKiBJZiB0aWMgaXMgY29tcGlsZWQgd2l0aCBUUkFDRSwgd2UnbGwgYmUgYWJsZSB0byBzZWUgdGhlIG91dHB1dCBmcm9tIHRoZQorICogREVCVUcoKSBtYWNyby4gIEJ1dCBzaW5jZSBpdCBkb2Vzbid0IHVzZSB0cmFjZW9uKCksIGl0IGFsd2F5cyBnb2VzIHRvCisgKiB0aGUgc3RhbmRhcmQgZXJyb3IuICBVc2UgdGhpcyBmdW5jdGlvbiB0byBtYWtlIGl0IHNpbXBsZXIgdG8gZm9sbG93IHRoZQorICogcmVzdWx0aW5nIGRlYnVnIHRyYWNlcy4KKyAqLworc3RhdGljIHZvaWQKK3Nob3dfd2hlcmUodW5zaWduZWQgbGV2ZWwpCit7CisgICAgaWYgKF9uY190cmFjaW5nID49IERFQlVHX0xFVkVMKGxldmVsKSkgeworCWNoYXIgbXlfbmFtZVsyNTZdOworCV9uY19nZXRfdHlwZShteV9uYW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlwiJXNcIiwgbGluZSAlZCwgJyVzJyAiLAorCQlfbmNfZ2V0X3NvdXJjZSgpLAorCQlfbmNfY3Vycl9saW5lLCBteV9uYW1lKTsKKyAgICB9Cit9CisKKyNlbHNlCisjZGVmaW5lIHNob3dfd2hlcmUobGV2ZWwpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisvKiBvdGhlciBzYW5pdHktY2hlY2tzICh0aGluZ3MgdGhhdCB3ZSBkb24ndCB3YW50IGluIHRoZSBub3JtYWwKKyAqIGxvZ2ljIHRoYXQgcmVhZHMgYSB0ZXJtaW5mbyBlbnRyeSkKKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3Rlcm10eXBlKFRFUk1UWVBFICp0cCwgYm9vbCBsaXRlcmFsKQoreworICAgIGJvb2wgY29uZmxpY3QgPSBGQUxTRTsKKyAgICB1bnNpZ25lZCBqLCBrOworICAgIGNoYXIgZmtleXNbU1RSQ09VTlRdOworCisgICAgLyoKKyAgICAgKiBBIHRlcm1pbmFsIGVudHJ5IG1heSBjb250YWluIG1vcmUgdGhhbiBvbmUga2V5Y29kZSBhc3NpZ25lZCB0bworICAgICAqIGEgZ2l2ZW4gc3RyaW5nIChlLmcuLCBLRVlfRU5EIGFuZCBLRVlfTEwpLiAgQnV0IGN1cnNlcyB3aWxsIG9ubHkKKyAgICAgKiByZXR1cm4gb25lICh0aGUgbGFzdCBvbmUgYXNzaWduZWQpLgorICAgICAqLworICAgIGlmICghKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVAgJiYgY2FwZHVtcCkpIHsKKwltZW1zZXQoZmtleXMsIDAsIHNpemVvZihma2V5cykpOworCWZvciAoaiA9IDA7IF9uY190aW5mb19ma2V5c1tqXS5jb2RlOyBqKyspIHsKKwkgICAgY2hhciAqYSA9IHRwLT5TdHJpbmdzW19uY190aW5mb19ma2V5c1tqXS5vZmZzZXRdOworCSAgICBib29sIGZpcnN0ID0gVFJVRTsKKwkgICAgaWYgKCFWQUxJRF9TVFJJTkcoYSkpCisJCWNvbnRpbnVlOworCSAgICBmb3IgKGsgPSBqICsgMTsgX25jX3RpbmZvX2ZrZXlzW2tdLmNvZGU7IGsrKykgeworCQljaGFyICpiID0gdHAtPlN0cmluZ3NbX25jX3RpbmZvX2ZrZXlzW2tdLm9mZnNldF07CisJCWlmICghVkFMSURfU1RSSU5HKGIpCisJCSAgICB8fCBma2V5c1trXSkKKwkJICAgIGNvbnRpbnVlOworCQlpZiAoIV9uY19jYXBjbXAoYSwgYikpIHsKKwkJICAgIGZrZXlzW2pdID0gMTsKKwkJICAgIGZrZXlzW2tdID0gMTsKKwkJICAgIGlmIChmaXJzdCkgeworCQkJaWYgKCFjb25mbGljdCkgeworCQkJICAgIF9uY193YXJuaW5nKCJDb25mbGljdGluZyBrZXkgZGVmaW5pdGlvbnMgKHVzaW5nIHRoZSBsYXN0KSIpOworCQkJICAgIGNvbmZsaWN0ID0gVFJVRTsKKwkJCX0KKwkJCWZwcmludGYoc3RkZXJyLCAiLi4uICVzIGlzIHRoZSBzYW1lIGFzICVzIiwKKwkJCQlrZXluYW1lKChpbnQpIF9uY190aW5mb19ma2V5c1tqXS5jb2RlKSwKKwkJCQlrZXluYW1lKChpbnQpIF9uY190aW5mb19ma2V5c1trXS5jb2RlKSk7CisJCQlmaXJzdCA9IEZBTFNFOworCQkgICAgfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiLCAlcyIsCisJCQkJa2V5bmFtZSgoaW50KSBfbmNfdGluZm9fZmtleXNba10uY29kZSkpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKCFmaXJzdCkKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCX0KKyAgICB9CisKKyAgICBmb3IgKGogPSAwOyBqIDwgTlVNX1NUUklOR1ModHApOyBqKyspIHsKKwljaGFyICphID0gdHAtPlN0cmluZ3Nbal07CisJaWYgKFZBTElEX1NUUklORyhhKSkKKwkgICAgY2hlY2tfcGFyYW1zKHRwLCBFeHRTdHJuYW1lKHRwLCBqLCBzdHJuYW1lcyksIGEpOworICAgIH0KKworICAgIGNoZWNrX2Fjcyh0cCk7CisgICAgY2hlY2tfY29sb3JzKHRwKTsKKyAgICBjaGVja19rZXlwYWQodHApOworCisgICAgLyoKKyAgICAgKiBUaGVzZSBtYXkgYmUgbWlzbWF0Y2hlZCBiZWNhdXNlIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbiByZWxpZXMgb24KKyAgICAgKiByZXN0b3JpbmcgdGhlIGN1cnNvciB2aXNpYmlsaXR5IGJ5IHJlc2V0dGluZyBpdC4KKyAgICAgKi8KKyAgICBBTkRNSVNTSU5HKGN1cnNvcl9pbnZpc2libGUsIGN1cnNvcl9ub3JtYWwpOworICAgIEFORE1JU1NJTkcoY3Vyc29yX3Zpc2libGUsIGN1cnNvcl9ub3JtYWwpOworCisgICAgaWYgKFBSRVNFTlQoY3Vyc29yX3Zpc2libGUpICYmIFBSRVNFTlQoY3Vyc29yX25vcm1hbCkKKwkmJiAhX25jX2NhcGNtcChjdXJzb3JfdmlzaWJsZSwgY3Vyc29yX25vcm1hbCkpCisJX25jX3dhcm5pbmcoImN1cnNvcl92aXNpYmxlIGlzIHNhbWUgYXMgY3Vyc29yX25vcm1hbCIpOworCisgICAgLyoKKyAgICAgKiBGcm9tIFhTSSAmIE8nUmVpbGx5LCB3ZSBnYXRoZXIgdGhhdCBzYy9yYyBhcmUgcmVxdWlyZWQgaWYgY3NyIGlzCisgICAgICogZ2l2ZW4sIGJlY2F1c2UgdGhlIGN1cnNvciBwb3NpdGlvbiBhZnRlciB0aGUgc2Nyb2xsaW5nIG9wZXJhdGlvbiBpcworICAgICAqIHBlcmZvcm1lZCBpcyB1bmRlZmluZWQuCisgICAgICovCisgICAgQU5ETUlTU0lORyhjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiwgc2F2ZV9jdXJzb3IpOworICAgIEFORE1JU1NJTkcoY2hhbmdlX3Njcm9sbF9yZWdpb24sIHJlc3RvcmVfY3Vyc29yKTsKKworICAgIGlmIChQUkVTRU5UKHNldF9hdHRyaWJ1dGVzKSkgeworCWNoYXIgKnplcm8gPSAwOworCisJX25jX3RwYXJtX2VyciA9IDA7CisJaWYgKFBSRVNFTlQoZXhpdF9hdHRyaWJ1dGVfbW9kZSkpIHsKKwkgICAgemVybyA9IHN0cmR1cChDSEVDS19TR1IoMCwgZXhpdF9hdHRyaWJ1dGVfbW9kZSkpOworCX0gZWxzZSB7CisJICAgIHplcm8gPSBzdHJkdXAoVFBBUk1fOShzZXRfYXR0cmlidXRlcywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpOworCX0KKwlpZiAoX25jX3RwYXJtX2VycikKKwkgICAgX25jX3dhcm5pbmcoInN0YWNrIGVycm9yIGluIHNncigwKSBzdHJpbmciKTsKKworCWlmICh6ZXJvICE9IDApIHsKKwkgICAgQ0hFQ0tfU0dSKDEsIGVudGVyX3N0YW5kb3V0X21vZGUpOworCSAgICBDSEVDS19TR1IoMiwgZW50ZXJfdW5kZXJsaW5lX21vZGUpOworCSAgICBDSEVDS19TR1IoMywgZW50ZXJfcmV2ZXJzZV9tb2RlKTsKKwkgICAgQ0hFQ0tfU0dSKDQsIGVudGVyX2JsaW5rX21vZGUpOworCSAgICBDSEVDS19TR1IoNSwgZW50ZXJfZGltX21vZGUpOworCSAgICBDSEVDS19TR1IoNiwgZW50ZXJfYm9sZF9tb2RlKTsKKwkgICAgQ0hFQ0tfU0dSKDcsIGVudGVyX3NlY3VyZV9tb2RlKTsKKwkgICAgQ0hFQ0tfU0dSKDgsIGVudGVyX3Byb3RlY3RlZF9tb2RlKTsKKwkgICAgQ0hFQ0tfU0dSKDksIGVudGVyX2FsdF9jaGFyc2V0X21vZGUpOworCSAgICBmcmVlKHplcm8pOworCX0gZWxzZSB7CisJICAgIF9uY193YXJuaW5nKCJzZ3IoMCkgZGlkIG5vdCByZXR1cm4gYSB2YWx1ZSIpOworCX0KKyAgICB9IGVsc2UgaWYgKFBSRVNFTlQoZXhpdF9hdHRyaWJ1dGVfbW9kZSkgJiYKKwkgICAgICAgc2V0X2F0dHJpYnV0ZXMgIT0gQ0FOQ0VMTEVEX1NUUklORykgeworCWlmIChfbmNfc3ludGF4ID09IFNZTl9URVJNSU5GTykKKwkgICAgX25jX3dhcm5pbmcoIm1pc3Npbmcgc2dyIHN0cmluZyIpOworICAgIH0KKworICAgIGlmIChQUkVTRU5UKGV4aXRfYXR0cmlidXRlX21vZGUpKSB7CisJY2hhciAqY2hlY2tfc2dyMCA9IF9uY190cmltX3NncjAodHApOworCisJaWYgKGNoZWNrX3NncjAgPT0gMCB8fCAqY2hlY2tfc2dyMCA9PSAnXDAnKSB7CisJICAgIF9uY193YXJuaW5nKCJ0cmltbWVkIHNncjAgaXMgZW1wdHkiKTsKKwl9IGVsc2UgeworCSAgICBzaG93X3doZXJlKDIpOworCSAgICBpZiAoY2hlY2tfc2dyMCAhPSBleGl0X2F0dHJpYnV0ZV9tb2RlKSB7CisJCURFQlVHKDIsCisJCSAgICAgICgid2lsbCB0cmltIHNncjBcblx0b3JpZ2luYWwgc2dyMD0lc1xuXHR0cmltbWVkICBzZ3IwPSVzIiwKKwkJICAgICAgIF9uY192aXNidWYyKDEsIGV4aXRfYXR0cmlidXRlX21vZGUpLAorCQkgICAgICAgX25jX3Zpc2J1ZjIoMiwgY2hlY2tfc2dyMCkpKTsKKwkJZnJlZShjaGVja19zZ3IwKTsKKwkgICAgfSBlbHNlIHsKKwkJREVCVUcoMiwKKwkJICAgICAgKCJ3aWxsIG5vdCB0cmltIHNncjBcblx0b3JpZ2luYWwgc2dyMD0lcyIsCisJCSAgICAgICBfbmNfdmlzYnVmKGV4aXRfYXR0cmlidXRlX21vZGUpKSk7CisJICAgIH0KKwl9CisgICAgfQorI2lmZGVmIFRSQUNFCisgICAgc2hvd193aGVyZSgyKTsKKyAgICBpZiAoIWF1dG9fcmlnaHRfbWFyZ2luKSB7CisJREVCVUcoMiwKKwkgICAgICAoImNhbiB3cml0ZSB0byBsb3dlci1yaWdodCBkaXJlY3RseSIpKTsKKyAgICB9IGVsc2UgaWYgKFBSRVNFTlQoZW50ZXJfYW1fbW9kZSkgJiYgUFJFU0VOVChleGl0X2FtX21vZGUpKSB7CisJREVCVUcoMiwKKwkgICAgICAoImNhbiB3cml0ZSB0byBsb3dlci1yaWdodCBieSBzdXBwcmVzc2luZyBhdXRvbWFyZ2luIikpOworICAgIH0gZWxzZSBpZiAoKFBSRVNFTlQoZW50ZXJfaW5zZXJ0X21vZGUpICYmIFBSRVNFTlQoZXhpdF9pbnNlcnRfbW9kZSkpCisJICAgICAgIHx8IFBSRVNFTlQoaW5zZXJ0X2NoYXJhY3RlcikgfHwgUFJFU0VOVChwYXJtX2ljaCkpIHsKKwlERUJVRygyLAorCSAgICAgICgiY2FuIHdyaXRlIHRvIGxvd2VyLXJpZ2h0IGJ5IHVzaW5nIGluc2VydHMiKSk7CisgICAgfSBlbHNlIHsKKwlERUJVRygyLAorCSAgICAgICgiY2Fubm90IHdyaXRlIHRvIGxvd2VyLXJpZ2h0IikpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBTb21lIHN0YW5kYXJkIGFwcGxpY2F0aW9ucyAoZS5nLiwgdmkpIGFuZCBzb21lIG5vbi1jdXJzZXMKKyAgICAgKiBhcHBsaWNhdGlvbnMgKGUuZy4sIGpvdmUpIGdldCBjb25mdXNlZCBpZiB3ZSBoYXZlIGJvdGggaWNoMSBhbmQKKyAgICAgKiBzbWlyL3JtaXIuICBMZXQncyBiZSBuaWNlIGFuZCB3YXJuIGFib3V0IHRoYXQsIHRvbywgZXZlbiB0aG91Z2gKKyAgICAgKiBuY3Vyc2VzIGhhbmRsZXMgaXQuCisgICAgICovCisgICAgaWYgKChQUkVTRU5UKGVudGVyX2luc2VydF9tb2RlKSB8fCBQUkVTRU5UKGV4aXRfaW5zZXJ0X21vZGUpKQorCSYmIFBSRVNFTlQocGFybV9pY2gpKSB7CisJX25jX3dhcm5pbmcoIm5vbi1jdXJzZXMgYXBwbGljYXRpb25zIG1heSBiZSBjb25mdXNlZCBieSBpY2gxIHdpdGggc21pci9ybWlyIik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGaW5hbGx5LCBkbyB0aGUgbm9uLXZlcmJvc2UgY2hlY2tzCisgICAgICovCisgICAgaWYgKHNhdmVfY2hlY2tfdGVybXR5cGUgIT0gMCkKKwlzYXZlX2NoZWNrX3Rlcm10eXBlKHRwLCBsaXRlcmFsKTsKK30KZGlmZiAtLWdpdCBhL3Byb2dzL3RvZS5jIGIvcHJvZ3MvdG9lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNmYzNwotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dzL3RvZS5jCkBAIC0wLDAgKzEsNTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgl0b2UuYyAtLS0gdGFibGUgb2YgZW50cmllcyByZXBvcnQgZ2VuZXJhdG9yCisgKi8KKworI2luY2x1ZGUgPHByb2dzLnByaXYuaD4KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZiBVU0VfSEFTSEVEX0RCCisjaW5jbHVkZSA8aGFzaGVkX2RiLmg+CisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IHRvZS5jLHYgMS41MSAyMDA4LzA4LzE2IDIxOjUzOjI1IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgaXNEb3RuYW1lKG5hbWUpICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKKworY29uc3QgY2hhciAqX25jX3Byb2duYW1lOworCisjaWYgTk9fTEVBS1MKKyN1bmRlZiBFeGl0UHJvZ3JhbQorc3RhdGljIHZvaWQgRXhpdFByb2dyYW0oaW50IGNvZGUpIEdDQ19OT1JFVFVSTjsKK3N0YXRpYyB2b2lkCitFeGl0UHJvZ3JhbShpbnQgY29kZSkKK3sKKyAgICBfbmNfZnJlZV9lbnRyaWVzKF9uY19oZWFkKTsKKyAgICBfbmNfZnJlZV90aWMoY29kZSk7Cit9CisjZW5kaWYKKworI2lmIFVTRV9IQVNIRURfREIKK3N0YXRpYyBib29sCittYWtlX2RiX25hbWUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxpbWl0KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIHN1ZmZpeFtdID0gREJNX1NVRkZJWDsKKworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisgICAgdW5zaWduZWQgbGVucyA9IHNpemVvZihzdWZmaXgpIC0gMTsKKyAgICB1bnNpZ25lZCBzaXplID0gc3RybGVuKHNyYyk7CisgICAgdW5zaWduZWQgbmVlZCA9IGxlbnMgKyBzaXplOworCisgICAgaWYgKG5lZWQgPD0gbGltaXQpIHsKKwlpZiAoc2l6ZSA+PSBsZW5zCisJICAgICYmICFzdHJjbXAoc3JjICsgc2l6ZSAtIGxlbnMsIHN1ZmZpeCkpCisJICAgICh2b2lkKSBzdHJjcHkoZHN0LCBzcmMpOworCWVsc2UKKwkgICAgKHZvaWQpIHNwcmludGYoZHN0LCAiJXMlcyIsIHNyYywgc3VmZml4KTsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBib29sCitpc19kYXRhYmFzZShjb25zdCBjaGFyICpwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisjaWYgVVNFX0RBVEFCQVNFCisgICAgaWYgKF9uY19pc19kaXJfcGF0aChwYXRoKSAmJiBhY2Nlc3MocGF0aCwgUl9PSyB8IFhfT0spID09IDApIHsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0KKyNlbmRpZgorI2lmIFVTRV9URVJNQ0FQCisgICAgaWYgKF9uY19pc19maWxlX3BhdGgocGF0aCkgJiYgYWNjZXNzKHBhdGgsIFJfT0spID09IDApIHsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0KKyNlbmRpZgorI2lmIFVTRV9IQVNIRURfREIKKyAgICBpZiAoIXJlc3VsdCkgeworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWlmIChfbmNfaXNfZmlsZV9wYXRoKHBhdGgpICYmIGFjY2VzcyhwYXRoLCBSX09LKSA9PSAwKSB7CisJICAgIHJlc3VsdCA9IFRSVUU7CisJfSBlbHNlIGlmIChtYWtlX2RiX25hbWUoZmlsZW5hbWUsIHBhdGgsIHNpemVvZihmaWxlbmFtZSkpKSB7CisJICAgIGlmIChfbmNfaXNfZmlsZV9wYXRoKGZpbGVuYW1lKSAmJiBhY2Nlc3MoZmlsZW5hbWUsIFJfT0spID09IDApIHsKKwkJcmVzdWx0ID0gVFJVRTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorZGVzY2hvb2soY29uc3QgY2hhciAqY24sIFRFUk1UWVBFICp0cCkKKy8qIGRpc3BsYXkgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIHR5cGUgKi8KK3sKKyAgICBjb25zdCBjaGFyICpkZXNjOworCisgICAgaWYgKChkZXNjID0gc3RycmNocih0cC0+dGVybV9uYW1lcywgJ3wnKSkgPT0gMCB8fCAqKytkZXNjID09ICdcMCcpCisJZGVzYyA9ICIoTm8gZGVzY3JpcHRpb24pIjsKKworICAgICh2b2lkKSBwcmludGYoIiUtMTBzXHQlc1xuIiwgY24sIGRlc2MpOworfQorCisjaWYgVVNFX1RFUk1DQVAKK3N0YXRpYyB2b2lkCitzaG93X3Rlcm1jYXAoY2hhciAqYnVmZmVyLAorCSAgICAgdm9pZCAoKmhvb2spIChjb25zdCBjaGFyICosIFRFUk1UWVBFICp0cCkpCit7CisgICAgVEVSTVRZUEUgZGF0YTsKKyAgICBjaGFyICpuZXh0ID0gc3RyY2hyKGJ1ZmZlciwgJzonKTsKKyAgICBjaGFyICpsYXN0OworICAgIGNoYXIgKmxpc3QgPSBidWZmZXI7CisKKyAgICBpZiAobmV4dCkKKwkqbmV4dCA9ICdcMCc7CisKKyAgICBsYXN0ID0gc3RycmNocihidWZmZXIsICd8Jyk7CisgICAgaWYgKGxhc3QpCisJKytsYXN0OworCisgICAgZGF0YS50ZXJtX25hbWVzID0gc3RyZHVwKGJ1ZmZlcik7CisgICAgd2hpbGUgKChuZXh0ID0gc3RydG9rKGxpc3QsICJ8IikpICE9IDApIHsKKwlpZiAobmV4dCAhPSBsYXN0KQorCSAgICBob29rKG5leHQsICZkYXRhKTsKKwlsaXN0ID0gMDsKKyAgICB9CisgICAgZnJlZShkYXRhLnRlcm1fbmFtZXMpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3R5cGVsaXN0KGludCBlYXJnYywgY2hhciAqZWFyZ3ZbXSwKKwkgYm9vbCB2ZXJib3NpdHksCisJIHZvaWQgKCpob29rKSAoY29uc3QgY2hhciAqLCBURVJNVFlQRSAqdHApKQorLyogYXBwbHkgYSBmdW5jdGlvbiB0byBlYWNoIGVudHJ5IGluIGdpdmVuIHRlcm1pbmZvIGRpcmVjdG9yaWVzICovCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZWFyZ2M7IGkrKykgeworI2lmIFVTRV9EQVRBQkFTRQorCWlmIChfbmNfaXNfZGlyX3BhdGgoZWFyZ3ZbaV0pKSB7CisJICAgIGNoYXIgKmN3ZF9idWYgPSAwOworCSAgICBESVIgKnRlcm1kaXI7CisJICAgIERJUkVOVCAqc3ViZGlyOworCisJICAgIGlmICgodGVybWRpciA9IG9wZW5kaXIoZWFyZ3ZbaV0pKSA9PSAwKSB7CisJCSh2b2lkKSBmZmx1c2goc3Rkb3V0KTsKKwkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgICAgICIlczogY2FuJ3Qgb3BlbiB0ZXJtaW5mbyBkaXJlY3RvcnkgJXNcbiIsCisJCQkgICAgICAgX25jX3Byb2duYW1lLCBlYXJndltpXSk7CisJCXJldHVybiAoRVhJVF9GQUlMVVJFKTsKKwkgICAgfSBlbHNlIGlmICh2ZXJib3NpdHkpCisJCSh2b2lkKSBwcmludGYoIiNcbiMlczpcbiNcbiIsIGVhcmd2W2ldKTsKKworCSAgICB3aGlsZSAoKHN1YmRpciA9IHJlYWRkaXIodGVybWRpcikpICE9IDApIHsKKwkJc2l6ZV90IGxlbiA9IE5BTUxFTihzdWJkaXIpOworCQlzaXplX3QgY3dkX2xlbiA9IGxlbiArIHN0cmxlbihlYXJndltpXSkgKyAzOworCQljaGFyIG5hbWVfMVtQQVRIX01BWF07CisJCURJUiAqZW50cnlkaXI7CisJCURJUkVOVCAqZW50cnk7CisKKwkJY3dkX2J1ZiA9IHR5cGVSZWFsbG9jKGNoYXIsIGN3ZF9sZW4sIGN3ZF9idWYpOworCQlpZiAoY3dkX2J1ZiA9PSAwKSB7CisJCSAgICBwZXJyb3IoInJlYWxsb2MgY3dkX2J1ZiIpOworCQkgICAgY29udGludWU7CisJCX0KKworCQlzdHJuY3B5KG5hbWVfMSwgc3ViZGlyLT5kX25hbWUsIGxlbilbbGVuXSA9ICdcMCc7CisJCWlmIChpc0RvdG5hbWUobmFtZV8xKSkKKwkJICAgIGNvbnRpbnVlOworCisJCSh2b2lkKSBzcHJpbnRmKGN3ZF9idWYsICIlcy8lLipzLyIsIGVhcmd2W2ldLCAoaW50KSBsZW4sIG5hbWVfMSk7CisJCWlmIChjaGRpcihjd2RfYnVmKSAhPSAwKQorCQkgICAgY29udGludWU7CisKKwkJZW50cnlkaXIgPSBvcGVuZGlyKCIuIik7CisJCWlmIChlbnRyeWRpciA9PSAwKSB7CisJCSAgICBwZXJyb3IoY3dkX2J1Zik7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQl3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihlbnRyeWRpcikpICE9IDApIHsKKwkJICAgIGNoYXIgbmFtZV8yW1BBVEhfTUFYXTsKKwkJICAgIFRFUk1UWVBFIGx0ZXJtOworCQkgICAgY2hhciAqY247CisJCSAgICBpbnQgc3RhdHVzOworCisJCSAgICBsZW4gPSBOQU1MRU4oZW50cnkpOworCQkgICAgc3RybmNweShuYW1lXzIsIGVudHJ5LT5kX25hbWUsIGxlbilbbGVuXSA9ICdcMCc7CisJCSAgICBpZiAoaXNEb3RuYW1lKG5hbWVfMikgfHwgIV9uY19pc19maWxlX3BhdGgobmFtZV8yKSkKKwkJCWNvbnRpbnVlOworCisJCSAgICBzdGF0dXMgPSBfbmNfcmVhZF9maWxlX2VudHJ5KG5hbWVfMiwgJmx0ZXJtKTsKKwkJICAgIGlmIChzdGF0dXMgPD0gMCkgeworCQkJKHZvaWQpIGZmbHVzaChzdGRvdXQpOworCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICAgICAiJXM6IGNvdWxkbid0IG9wZW4gdGVybWluZm8gZmlsZSAlcy5cbiIsCisJCQkJICAgICAgIF9uY19wcm9nbmFtZSwgbmFtZV8yKTsKKwkJCXJldHVybiAoRVhJVF9GQUlMVVJFKTsKKwkJICAgIH0KKworCQkgICAgLyogb25seSB2aXNpdCB0aGluZ3Mgb25jZSwgYnkgcHJpbWFyeSBuYW1lICovCisJCSAgICBjbiA9IF9uY19maXJzdF9uYW1lKGx0ZXJtLnRlcm1fbmFtZXMpOworCQkgICAgaWYgKCFzdHJjbXAoY24sIG5hbWVfMikpIHsKKwkJCS8qIGFwcGx5IHRoZSBzZWxlY3RlZCBob29rIGZ1bmN0aW9uICovCisJCQkoKmhvb2spIChjbiwgJmx0ZXJtKTsKKwkJICAgIH0KKwkJICAgIF9uY19mcmVlX3Rlcm10eXBlKCZsdGVybSk7CisJCX0KKwkJY2xvc2VkaXIoZW50cnlkaXIpOworCSAgICB9CisJICAgIGNsb3NlZGlyKHRlcm1kaXIpOworCSAgICBpZiAoY3dkX2J1ZiAhPSAwKQorCQlmcmVlKGN3ZF9idWYpOworCX0KKyNpZiBVU0VfSEFTSEVEX0RCCisJZWxzZSB7CisJICAgIERCICpjYXBkYnA7CisJICAgIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCisJICAgIGlmIChtYWtlX2RiX25hbWUoZmlsZW5hbWUsIGVhcmd2W2ldLCBzaXplb2YoZmlsZW5hbWUpKSkgeworCQlpZiAoKGNhcGRicCA9IF9uY19kYl9vcGVuKGZpbGVuYW1lLCBGQUxTRSkpICE9IDApIHsKKwkJICAgIERCVCBrZXksIGRhdGE7CisJCSAgICBpbnQgY29kZTsKKworCQkgICAgY29kZSA9IF9uY19kYl9maXJzdChjYXBkYnAsICZrZXksICZkYXRhKTsKKwkJICAgIHdoaWxlIChjb2RlID09IDApIHsKKwkJCVRFUk1UWVBFIGx0ZXJtOworCQkJaW50IHVzZWQ7CisJCQljaGFyICpoYXZlOworCQkJY2hhciAqY247CisKKwkJCWlmIChfbmNfZGJfaGF2ZV9kYXRhKCZrZXksICZkYXRhLCAmaGF2ZSwgJnVzZWQpKSB7CisJCQkgICAgaWYgKF9uY19yZWFkX3Rlcm10eXBlKCZsdGVybSwgaGF2ZSwgdXNlZCkgPiAwKSB7CisJCQkJLyogb25seSB2aXNpdCB0aGluZ3Mgb25jZSwgYnkgcHJpbWFyeSBuYW1lICovCisJCQkJY24gPSBfbmNfZmlyc3RfbmFtZShsdGVybS50ZXJtX25hbWVzKTsKKwkJCQkvKiBhcHBseSB0aGUgc2VsZWN0ZWQgaG9vayBmdW5jdGlvbiAqLworCQkJCSgqaG9vaykgKGNuLCAmbHRlcm0pOworCQkJCV9uY19mcmVlX3Rlcm10eXBlKCZsdGVybSk7CisJCQkgICAgfQorCQkJfQorCQkJY29kZSA9IF9uY19kYl9uZXh0KGNhcGRicCwgJmtleSwgJmRhdGEpOworCQkgICAgfQorCisJCSAgICBfbmNfZGJfY2xvc2UoY2FwZGJwKTsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisjZW5kaWYKKyNpZiBVU0VfVEVSTUNBUAorI2lmIEhBVkVfQlNEX0NHRVRFTlQKKwljaGFyICpkYl9hcnJheVsyXTsKKwljaGFyICpidWZmZXIgPSAwOworCisJaWYgKHZlcmJvc2l0eSkKKwkgICAgKHZvaWQpIHByaW50ZigiI1xuIyVzOlxuI1xuIiwgZWFyZ3ZbaV0pOworCisJZGJfYXJyYXlbMF0gPSBlYXJndltpXTsKKwlkYl9hcnJheVsxXSA9IDA7CisKKwlpZiAoY2dldGZpcnN0KCZidWZmZXIsIGRiX2FycmF5KSkgeworCSAgICBzaG93X3Rlcm1jYXAoYnVmZmVyLCBob29rKTsKKwkgICAgZnJlZShidWZmZXIpOworCSAgICB3aGlsZSAoY2dldG5leHQoJmJ1ZmZlciwgZGJfYXJyYXkpKSB7CisJCXNob3dfdGVybWNhcChidWZmZXIsIGhvb2spOworCQlmcmVlKGJ1ZmZlcik7CisJICAgIH0KKwl9CisJY2dldGNsb3NlKCk7CisjZWxzZQorCS8qIHNjYW4gdGVybWNhcCB0ZXh0LWZpbGUgb25seSAqLworCWlmIChfbmNfaXNfZmlsZV9wYXRoKGVhcmd2W2ldKSkgeworCSAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKKwkgICAgRklMRSAqZnA7CisKKwkgICAgaWYgKChmcCA9IGZvcGVuKGVhcmd2W2ldLCAiciIpKSAhPSAwKSB7CisJCXdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmcCkgIT0gMCkgeworCQkgICAgaWYgKCpidWZmZXIgPT0gJyMnKQorCQkJY29udGludWU7CisJCSAgICBpZiAoaXNzcGFjZSgqYnVmZmVyKSkKKwkJCWNvbnRpbnVlOworCQkgICAgc2hvd190ZXJtY2FwKGJ1ZmZlciwgaG9vayk7CisJCX0KKwkJZmNsb3NlKGZwKTsKKwkgICAgfQorCX0KKyNlbmRpZgorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIChFWElUX1NVQ0NFU1MpOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgWy1haHVVVl0gWy12IG5dIFtmaWxlLi4uXVxuIiwgX25jX3Byb2duYW1lKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBib29sIGFsbF9kaXJzID0gRkFMU0U7CisgICAgYm9vbCBkaXJlY3RfZGVwZW5kZW5jaWVzID0gRkFMU0U7CisgICAgYm9vbCBpbnZlcnRfZGVwZW5kZW5jaWVzID0gRkFMU0U7CisgICAgYm9vbCBoZWFkZXIgPSBGQUxTRTsKKyAgICBjaGFyICpyZXBvcnRfZmlsZSA9IDA7CisgICAgdW5zaWduZWQgaTsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgdGhpc19vcHQsIGxhc3Rfb3B0ID0gJz8nOworICAgIGludCB2X29wdCA9IDA7CisKKyAgICBfbmNfcHJvZ25hbWUgPSBfbmNfcm9vdG5hbWUoYXJndlswXSk7CisKKyAgICB3aGlsZSAoKHRoaXNfb3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIwMTIzNDU2Nzg5YWh1OnZVOlYiKSkgIT0gLTEpIHsKKwkvKiBoYW5kbGUgb3B0aW9uYWwgcGFyYW1ldGVyICovCisJaWYgKGlzZGlnaXQodGhpc19vcHQpKSB7CisJICAgIHN3aXRjaCAobGFzdF9vcHQpIHsKKwkgICAgY2FzZSAndic6CisJCXZfb3B0ID0gKHRoaXNfb3B0IC0gJzAnKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWlmIChpc2RpZ2l0KGxhc3Rfb3B0KSkKKwkJICAgIHZfb3B0ICo9IDEwOworCQllbHNlCisJCSAgICB2X29wdCA9IDA7CisJCXZfb3B0ICs9ICh0aGlzX29wdCAtICcwJyk7CisJCWxhc3Rfb3B0ID0gdGhpc19vcHQ7CisJICAgIH0KKwkgICAgY29udGludWU7CisJfQorCXN3aXRjaCAodGhpc19vcHQpIHsKKwljYXNlICdhJzoKKwkgICAgYWxsX2RpcnMgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdoJzoKKwkgICAgaGVhZGVyID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAndSc6CisJICAgIGRpcmVjdF9kZXBlbmRlbmNpZXMgPSBUUlVFOworCSAgICByZXBvcnRfZmlsZSA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisJY2FzZSAndic6CisJICAgIHZfb3B0ID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVSc6CisJICAgIGludmVydF9kZXBlbmRlbmNpZXMgPSBUUlVFOworCSAgICByZXBvcnRfZmlsZSA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisJY2FzZSAnVic6CisJICAgIHB1dHMoY3Vyc2VzX3ZlcnNpb24oKSk7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorICAgIHNldF90cmFjZV9sZXZlbCh2X29wdCk7CisKKyAgICBpZiAocmVwb3J0X2ZpbGUgIT0gMCkgeworCWlmIChmcmVvcGVuKHJlcG9ydF9maWxlLCAiciIsIHN0ZGluKSA9PSAwKSB7CisJICAgICh2b2lkKSBmZmx1c2goc3Rkb3V0KTsKKwkgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgX25jX3Byb2duYW1lLCByZXBvcnRfZmlsZSk7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJfQorCisJLyogcGFyc2UgZW50cmllcyBvdXQgb2YgdGhlIHNvdXJjZSBmaWxlICovCisJX25jX3NldF9zb3VyY2UocmVwb3J0X2ZpbGUpOworCV9uY19yZWFkX2VudHJ5X3NvdXJjZShzdGRpbiwgMCwgRkFMU0UsIEZBTFNFLCBOVUxMSE9PSyk7CisgICAgfQorCisgICAgLyogbWF5YmUgd2Ugd2FudCBhIGRpcmVjdC1kZXBlbmRlbmN5IGxpc3Rpbmc/ICovCisgICAgaWYgKGRpcmVjdF9kZXBlbmRlbmNpZXMpIHsKKwlFTlRSWSAqcXA7CisKKwlmb3JfZW50cnlfbGlzdChxcCkgeworCSAgICBpZiAocXAtPm51c2VzKSB7CisJCXVuc2lnbmVkIGo7CisKKwkJKHZvaWQpIHByaW50ZigiJXM6IiwgX25jX2ZpcnN0X25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwkJZm9yIChqID0gMDsgaiA8IHFwLT5udXNlczsgaisrKQorCQkgICAgKHZvaWQpIHByaW50ZigiICVzIiwgcXAtPnVzZXNbal0ubmFtZSk7CisJCXB1dGNoYXIoJ1xuJyk7CisJICAgIH0KKwl9CisKKwlFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworICAgIH0KKworICAgIC8qIG1heWJlIHdlIHdhbnQgYSByZXZlcnNlLWRlcGVuZGVuY3kgbGlzdGluZz8gKi8KKyAgICBpZiAoaW52ZXJ0X2RlcGVuZGVuY2llcykgeworCUVOVFJZICpxcCwgKnJwOworCWludCBtYXRjaGNvdW50OworCisJZm9yX2VudHJ5X2xpc3QocXApIHsKKwkgICAgbWF0Y2hjb3VudCA9IDA7CisJICAgIGZvcl9lbnRyeV9saXN0KHJwKSB7CisJCWlmIChycC0+bnVzZXMgPT0gMCkKKwkJICAgIGNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBycC0+bnVzZXM7IGkrKykKKwkJICAgIGlmIChfbmNfbmFtZV9tYXRjaChxcC0+dHRlcm0udGVybV9uYW1lcywKKwkJCQkgICAgICAgcnAtPnVzZXNbaV0ubmFtZSwgInwiKSkgeworCQkJaWYgKG1hdGNoY291bnQrKyA9PSAwKQorCQkJICAgICh2b2lkKSBwcmludGYoIiVzOiIsCisJCQkJCSAgX25jX2ZpcnN0X25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwkJCSh2b2lkKSBwcmludGYoIiAlcyIsCisJCQkJICAgICAgX25jX2ZpcnN0X25hbWUocnAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwkJICAgIH0KKwkgICAgfQorCSAgICBpZiAobWF0Y2hjb3VudCkKKwkJcHV0Y2hhcignXG4nKTsKKwl9CisKKwlFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgd2UgZ2V0IHRoaXMgZmFyLCB1c2VyIHdhbnRzIGEgc2ltcGxlIHRlcm1pbmFsIHR5cGUgbGlzdGluZy4KKyAgICAgKi8KKyAgICBpZiAob3B0aW5kIDwgYXJnYykgeworCWNvZGUgPSB0eXBlbGlzdChhcmdjIC0gb3B0aW5kLCBhcmd2ICsgb3B0aW5kLCBoZWFkZXIsIGRlc2Nob29rKTsKKyAgICB9IGVsc2UgaWYgKGFsbF9kaXJzKSB7CisJREJESVJTIHN0YXRlOworCWludCBvZmZzZXQ7CisJaW50IHBhc3M7CisJY29uc3QgY2hhciAqcGF0aDsKKwljaGFyICoqZWFyZ3YgPSAwOworCisJY29kZSA9IEVYSVRfRkFJTFVSRTsKKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgKytwYXNzKSB7CisJICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKworCSAgICBfbmNfZmlyc3RfZGIoJnN0YXRlLCAmb2Zmc2V0KTsKKwkgICAgd2hpbGUgKChwYXRoID0gX25jX25leHRfZGIoJnN0YXRlLCAmb2Zmc2V0KSkgIT0gMCkgeworCQlpZiAoIWlzX2RhdGFiYXNlKHBhdGgpKSB7CisJCSAgICA7CisJCX0gZWxzZSBpZiAoZWFyZ3YgIT0gMCkgeworCQkgICAgdW5zaWduZWQgbjsKKwkJICAgIGludCBmb3VuZCA9IEZBTFNFOworCisJCSAgICAvKiBlbGltaW5hdGUgZHVwbGljYXRlcyAqLworCQkgICAgZm9yIChuID0gMDsgbiA8IGNvdW50OyArK24pIHsKKwkJCWlmICghc3RyY21wKHBhdGgsIGVhcmd2W25dKSkgeworCQkJICAgIGZvdW5kID0gVFJVRTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmICghZm91bmQpIHsKKwkJCWVhcmd2W2NvdW50XSA9IHN0cmR1cChwYXRoKTsKKwkJCSsrY291bnQ7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICArK2NvdW50OworCQl9CisJICAgIH0KKwkgICAgaWYgKCFwYXNzKSB7CisJCWVhcmd2ID0gdHlwZUNhbGxvYyhjaGFyICosIGNvdW50ICsgMSk7CisJICAgIH0gZWxzZSB7CisJCWNvZGUgPSB0eXBlbGlzdCgoaW50KSBjb3VudCwgZWFyZ3YsIGhlYWRlciwgZGVzY2hvb2spOworCQl3aGlsZSAoY291bnQtLSA+IDApCisJCSAgICBmcmVlKGVhcmd2W2NvdW50XSk7CisJCWZyZWUoZWFyZ3YpOworCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJREJESVJTIHN0YXRlOworCWludCBvZmZzZXQ7CisJY29uc3QgY2hhciAqcGF0aDsKKwljaGFyICplYXJndlszXTsKKwlpbnQgY291bnQgPSAwOworCisJX25jX2ZpcnN0X2RiKCZzdGF0ZSwgJm9mZnNldCk7CisJd2hpbGUgKChwYXRoID0gX25jX25leHRfZGIoJnN0YXRlLCAmb2Zmc2V0KSkgIT0gMCkgeworCSAgICBpZiAoaXNfZGF0YWJhc2UocGF0aCkpIHsKKwkJZWFyZ3ZbY291bnQrK10gPSBzdHJkdXAocGF0aCk7CisJCWJyZWFrOworCSAgICB9CisJfQorCWVhcmd2W2NvdW50XSA9IDA7CisKKwljb2RlID0gdHlwZWxpc3QoY291bnQsIGVhcmd2LCBoZWFkZXIsIGRlc2Nob29rKTsKKworCXdoaWxlIChjb3VudC0tID4gMCkKKwkgICAgZnJlZShlYXJndltjb3VudF0pOworICAgIH0KKyAgICBfbmNfbGFzdF9kYigpOworCisgICAgRXhpdFByb2dyYW0oY29kZSk7Cit9CmRpZmYgLS1naXQgYS9wcm9ncy90cHV0LmMgYi9wcm9ncy90cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyZDQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dzL3RwdXQuYwpAQCAtMCwwICsxLDQzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiB0cHV0LmMgLS0gc2hlbGxzY3JpcHQgYWNjZXNzIHRvIHRlcm1pbmFsIGNhcGFiaWxpdGllcworICoKKyAqIGJ5IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiwgcG9ydGlvbnMgYmFzZWQgb24gY29kZSBmcm9tCisgKiBSb3NzIFJpZGdlJ3MgbXl0aW5mbyBwYWNrYWdlLgorICovCisKKyNkZWZpbmUgVVNFX0xJQlRJTkZPCisjaW5jbHVkZSA8cHJvZ3MucHJpdi5oPgorCisjaWYgIVBVUkVfVEVSTUlORk8KKyNpbmNsdWRlIDxkdW1wX2VudHJ5Lmg+CisjaW5jbHVkZSA8dGVybXNvcnQuYz4KKyNlbmRpZgorI2luY2x1ZGUgPHRyYW5zZm9ybS5oPgorCitNT0RVTEVfSUQoIiRJZDogdHB1dC5jLHYgMS40MiAyMDA4LzA3LzEzIDExOjA1OjEyIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgUFVUUyhzKQkJZnB1dHMocywgc3Rkb3V0KQorI2RlZmluZSBQVVRDSEFSKGMpCXB1dGNoYXIoYykKKyNkZWZpbmUgRkxVU0gJCWZmbHVzaChzdGRvdXQpCisKK3R5cGVkZWYgZW51bSB7CisgICAgTnVtYmVycyA9IDAKKyAgICAsTnVtX1N0cgorICAgICxOdW1fU3RyX1N0cgorfSBUUGFyYW1zOworCitzdGF0aWMgY2hhciAqcHJnX25hbWU7CitzdGF0aWMgYm9vbCBpc19pbml0ID0gRkFMU0U7CitzdGF0aWMgYm9vbCBpc19yZXNldCA9IEZBTFNFOworCitzdGF0aWMgdm9pZAorcXVpdChpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogIiwgcHJnX25hbWUpOworICAgIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdwKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgdmFfZW5kKGFyZ3ApOworICAgIEV4aXRQcm9ncmFtKHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIFstVl0gWy1TXSBbLVQgdGVybV0gY2FwbmFtZVxuIiwgcHJnX25hbWUpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19hbGlhc2VzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaXNfaW5pdCA9IChzdHJjbXAobmFtZSwgUFJPR19JTklUKSA9PSAwKTsKKyAgICBpc19yZXNldCA9IChzdHJjbXAobmFtZSwgUFJPR19SRVNFVCkgPT0gMCk7Cit9CisKKy8qCisgKiBMb29rdXAgdGhlIHR5cGUgb2YgY2FsbCB3ZSBzaG91bGQgbWFrZSB0byB0cGFybSgpLiAgVGhpcyBpZ25vcmVzIHRoZSBhY3R1YWwKKyAqIHRlcm1pbmZvIGNhcGFiaWxpdHkgKGJhZCwgYmVjYXVzZSBpdCBpcyBub3QgZXh0ZW5zaWJsZSksIGJ1dCBtYWtlcyB0aGlzCisgKiBjb2RlIHBvcnRhYmxlIHRvIHBsYXRmb3JtcyB3aGVyZSBzaXplb2YoaW50KSAhPSBzaXplb2YoY2hhciAqKS4KKyAqCisgKiBGSVhNRTogSWYgd2Ugd2FudCBleHRlbnNpYmlsaXR5LCBhbmFseXplIHRoZSBjYXBhYmlsaXR5IHN0cmluZyBhcyB3ZSBkbworICogaW4gdHBhcm0oKSB0byBkZWNpZGUgaG93IHRvIHBhcnNlIHRoZSB2YXJhcmdzIGxpc3QuCisgKi8KK3N0YXRpYyBUUGFyYW1zCit0cGFybV90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisjZGVmaW5lIFREKGNvZGUsIGxvbmduYW1lLCB0aSwgdGMpIHtjb2RlLGxvbmduYW1lfSx7Y29kZSx0aX0se2NvZGUsdGN9CisgICAgVFBhcmFtcyByZXN1bHQgPSBOdW1iZXJzOworICAgIC8qICpJTkRFTlQtT0ZGKiAqLworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCVRQYXJhbXMgY29kZTsKKwljb25zdCBjaGFyICpuYW1lOworICAgIH0gdGFibGVbXSA9IHsKKwlURChOdW1fU3RyLAkicGtleV9rZXkiLAkicGZrZXkiLAkicGsiKSwKKwlURChOdW1fU3RyLAkicGtleV9sb2NhbCIsCSJwZmxvYyIsCSJwbCIpLAorCVREKE51bV9TdHIsCSJwa2V5X3htaXQiLAkicGZ4IiwJCSJweCIpLAorCVREKE51bV9TdHIsCSJwbGFiX25vcm0iLAkicGxuIiwJCSJwbiIpLAorCVREKE51bV9TdHJfU3RyLCAicGtleV9wbGFiIiwJInBmeGwiLAkJInhsIiksCisgICAgfTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCisgICAgdW5zaWduZWQgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRhYmxlKTsgbisrKSB7CisJaWYgKCFzdHJjbXAobmFtZSwgdGFibGVbbl0ubmFtZSkpIHsKKwkgICAgcmVzdWx0ID0gdGFibGVbbl0uY29kZTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitleGl0X2NvZGUoaW50IHRva2VuLCBpbnQgdmFsdWUpCit7CisgICAgaW50IHJlc3VsdCA9IDk5OworCisgICAgc3dpdGNoICh0b2tlbikgeworICAgIGNhc2UgQk9PTEVBTjoKKwlyZXN1bHQgPSAhdmFsdWU7CS8qIFRSVUU9MCwgRkFMU0U9MSAqLworCWJyZWFrOworICAgIGNhc2UgTlVNQkVSOgorCXJlc3VsdCA9IDA7CQkvKiBhbHdheXMgemVybyAqLworCWJyZWFrOworICAgIGNhc2UgU1RSSU5HOgorCXJlc3VsdCA9IHZhbHVlOwkJLyogMD1ub3JtYWwsIDE9bWlzc2luZyAqLworCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50Cit0cHV0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpuYW1lOworICAgIGNoYXIgKnM7CisgICAgaW50IGksIGosIGM7CisgICAgaW50IHN0YXR1czsKKyAgICBGSUxFICpmOworCisgICAgaWYgKChuYW1lID0gYXJndlswXSkgPT0gMCkKKwluYW1lID0gIiI7CisgICAgY2hlY2tfYWxpYXNlcyhuYW1lKTsKKyAgICBpZiAoaXNfcmVzZXQgfHwgaXNfaW5pdCkgeworCWlmIChpbml0X3Byb2cgIT0gMCkgeworCSAgICBzeXN0ZW0oaW5pdF9wcm9nKTsKKwl9CisJRkxVU0g7CisKKwlpZiAoaXNfcmVzZXQgJiYgcmVzZXRfMXN0cmluZyAhPSAwKSB7CisJICAgIFBVVFMocmVzZXRfMXN0cmluZyk7CisJfSBlbHNlIGlmIChpbml0XzFzdHJpbmcgIT0gMCkgeworCSAgICBQVVRTKGluaXRfMXN0cmluZyk7CisJfQorCUZMVVNIOworCisJaWYgKGlzX3Jlc2V0ICYmIHJlc2V0XzJzdHJpbmcgIT0gMCkgeworCSAgICBQVVRTKHJlc2V0XzJzdHJpbmcpOworCX0gZWxzZSBpZiAoaW5pdF8yc3RyaW5nICE9IDApIHsKKwkgICAgUFVUUyhpbml0XzJzdHJpbmcpOworCX0KKwlGTFVTSDsKKworI2lmZGVmIHNldF9scl9tYXJnaW4KKwlpZiAoc2V0X2xyX21hcmdpbiAhPSAwKSB7CisJICAgIFBVVFMoVFBBUk1fMihzZXRfbHJfbWFyZ2luLCAwLCBjb2x1bW5zIC0gMSkpOworCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgc2V0X2xlZnRfbWFyZ2luX3Bhcm0KKwkgICAgaWYgKHNldF9sZWZ0X21hcmdpbl9wYXJtICE9IDAKKwkJJiYgc2V0X3JpZ2h0X21hcmdpbl9wYXJtICE9IDApIHsKKwkgICAgUFVUUyhUUEFSTV8xKHNldF9sZWZ0X21hcmdpbl9wYXJtLCAwKSk7CisJICAgIFBVVFMoVFBBUk1fMShzZXRfcmlnaHRfbWFyZ2luX3Bhcm0sIGNvbHVtbnMgLSAxKSk7CisJfSBlbHNlCisjZW5kaWYKKwkgICAgaWYgKGNsZWFyX21hcmdpbnMgIT0gMAorCQkmJiBzZXRfbGVmdF9tYXJnaW4gIT0gMAorCQkmJiBzZXRfcmlnaHRfbWFyZ2luICE9IDApIHsKKwkgICAgUFVUUyhjbGVhcl9tYXJnaW5zKTsKKwkgICAgaWYgKGNhcnJpYWdlX3JldHVybiAhPSAwKSB7CisJCVBVVFMoY2FycmlhZ2VfcmV0dXJuKTsKKwkgICAgfSBlbHNlIHsKKwkJUFVUQ0hBUignXHInKTsKKwkgICAgfQorCSAgICBQVVRTKHNldF9sZWZ0X21hcmdpbik7CisJICAgIGlmIChwYXJtX3JpZ2h0X2N1cnNvcikgeworCQlQVVRTKFRQQVJNXzEocGFybV9yaWdodF9jdXJzb3IsIGNvbHVtbnMgLSAxKSk7CisJICAgIH0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBjb2x1bW5zIC0gMTsgaSsrKSB7CisJCSAgICBQVVRDSEFSKCcgJyk7CisJCX0KKwkgICAgfQorCSAgICBQVVRTKHNldF9yaWdodF9tYXJnaW4pOworCSAgICBpZiAoY2FycmlhZ2VfcmV0dXJuICE9IDApIHsKKwkJUFVUUyhjYXJyaWFnZV9yZXR1cm4pOworCSAgICB9IGVsc2UgeworCQlQVVRDSEFSKCdccicpOworCSAgICB9CisJfQorCUZMVVNIOworCisJaWYgKGluaXRfdGFicyAhPSA4KSB7CisJICAgIGlmIChjbGVhcl9hbGxfdGFicyAhPSAwICYmIHNldF90YWIgIT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY29sdW1ucyAtIDE7IGkgKz0gOCkgeworCQkgICAgaWYgKHBhcm1fcmlnaHRfY3Vyc29yKSB7CisJCQlQVVRTKFRQQVJNXzEocGFybV9yaWdodF9jdXJzb3IsIDgpKTsKKwkJICAgIH0gZWxzZSB7CisJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQkJICAgIFBVVENIQVIoJyAnKTsKKwkJICAgIH0KKwkJICAgIFBVVFMoc2V0X3RhYik7CisJCX0KKwkJRkxVU0g7CisJICAgIH0KKwl9CisKKwlpZiAoaXNfcmVzZXQgJiYgcmVzZXRfZmlsZSAhPSAwKSB7CisJICAgIGYgPSBmb3BlbihyZXNldF9maWxlLCAiciIpOworCSAgICBpZiAoZiA9PSAwKSB7CisJCXF1aXQoNCArIGVycm5vLCAiQ2FuJ3Qgb3BlbiByZXNldF9maWxlOiAnJXMnIiwgcmVzZXRfZmlsZSk7CisJICAgIH0KKwkgICAgd2hpbGUgKChjID0gZmdldGMoZikpICE9IEVPRikgeworCQlQVVRDSEFSKGMpOworCSAgICB9CisJICAgIGZjbG9zZShmKTsKKwl9IGVsc2UgaWYgKGluaXRfZmlsZSAhPSAwKSB7CisJICAgIGYgPSBmb3Blbihpbml0X2ZpbGUsICJyIik7CisJICAgIGlmIChmID09IDApIHsKKwkJcXVpdCg0ICsgZXJybm8sICJDYW4ndCBvcGVuIGluaXRfZmlsZTogJyVzJyIsIGluaXRfZmlsZSk7CisJICAgIH0KKwkgICAgd2hpbGUgKChjID0gZmdldGMoZikpICE9IEVPRikgeworCQlQVVRDSEFSKGMpOworCSAgICB9CisJICAgIGZjbG9zZShmKTsKKwl9CisJRkxVU0g7CisKKwlpZiAoaXNfcmVzZXQgJiYgcmVzZXRfM3N0cmluZyAhPSAwKSB7CisJICAgIFBVVFMocmVzZXRfM3N0cmluZyk7CisJfSBlbHNlIGlmIChpbml0XzNzdHJpbmcgIT0gMCkgeworCSAgICBQVVRTKGluaXRfM3N0cmluZyk7CisJfQorCUZMVVNIOworCXJldHVybiAwOworICAgIH0KKworICAgIGlmIChzdHJjbXAobmFtZSwgImxvbmduYW1lIikgPT0gMCkgeworCVBVVFMobG9uZ25hbWUoKSk7CisJcmV0dXJuIDA7CisgICAgfQorI2lmICFQVVJFX1RFUk1JTkZPCisgICAgeworCWNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICpucDsKKworCWlmICgobnAgPSBfbmNfZmluZF9lbnRyeShuYW1lLCBfbmNfZ2V0X2hhc2hfdGFibGUoMSkpKSAhPSAwKQorCSAgICBzd2l0Y2ggKG5wLT5udGVfdHlwZSkgeworCSAgICBjYXNlIEJPT0xFQU46CisJCWlmIChib29sX2Zyb21fdGVybWNhcFtucC0+bnRlX2luZGV4XSkKKwkJICAgIG5hbWUgPSBib29sbmFtZXNbbnAtPm50ZV9pbmRleF07CisJCWJyZWFrOworCisJICAgIGNhc2UgTlVNQkVSOgorCQlpZiAobnVtX2Zyb21fdGVybWNhcFtucC0+bnRlX2luZGV4XSkKKwkJICAgIG5hbWUgPSBudW1uYW1lc1tucC0+bnRlX2luZGV4XTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBTVFJJTkc6CisJCWlmIChzdHJfZnJvbV90ZXJtY2FwW25wLT5udGVfaW5kZXhdKQorCQkgICAgbmFtZSA9IHN0cm5hbWVzW25wLT5udGVfaW5kZXhdOworCQlicmVhazsKKwkgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKChzdGF0dXMgPSB0aWdldGZsYWcobmFtZSkpICE9IC0xKSB7CisJcmV0dXJuIGV4aXRfY29kZShCT09MRUFOLCBzdGF0dXMpOworICAgIH0gZWxzZSBpZiAoKHN0YXR1cyA9IHRpZ2V0bnVtKG5hbWUpKSAhPSBDQU5DRUxMRURfTlVNRVJJQykgeworCSh2b2lkKSBwcmludGYoIiVkXG4iLCBzdGF0dXMpOworCXJldHVybiBleGl0X2NvZGUoTlVNQkVSLCAwKTsKKyAgICB9IGVsc2UgaWYgKChzID0gdGlnZXRzdHIobmFtZSkpID09IENBTkNFTExFRF9TVFJJTkcpIHsKKwlxdWl0KDQsICJ1bmtub3duIHRlcm1pbmZvIGNhcGFiaWxpdHkgJyVzJyIsIG5hbWUpOworICAgIH0gZWxzZSBpZiAocyAhPSBBQlNFTlRfU1RSSU5HKSB7CisJaWYgKGFyZ2MgPiAxKSB7CisJICAgIGludCBrOworCSAgICBpbnQgcG9wY291bnQ7CisJICAgIGxvbmcgbnVtYmVyc1sxICsgTlVNX1BBUk1dOworCSAgICBjaGFyICpzdHJpbmdzWzEgKyBOVU1fUEFSTV07CisJICAgIGNoYXIgKnBfaXNfc1tOVU1fUEFSTV07CisKKwkgICAgLyogTmFzdHkgaGFjayB0aW1lLiBUaGUgdHBhcm0gZnVuY3Rpb24gbmVlZHMgdG8gc2VlIG51bWVyaWMKKwkgICAgICogcGFyYW1ldGVycyBhcyBudW1iZXJzLCBub3QgYXMgcG9pbnRlcnMgdG8gdGhlaXIgc3RyaW5nCisJICAgICAqIHJlcHJlc2VudGF0aW9ucworCSAgICAgKi8KKworCSAgICBmb3IgKGsgPSAxOyBrIDwgYXJnYzsgaysrKSB7CisJCWNoYXIgKnRtcCA9IDA7CisJCXN0cmluZ3Nba10gPSBhcmd2W2tdOworCQludW1iZXJzW2tdID0gc3RydG9sKGFyZ3Zba10sICZ0bXAsIDApOworCQlpZiAodG1wID09IDAgfHwgKnRtcCAhPSAwKQorCQkgICAgbnVtYmVyc1trXSA9IDA7CisJICAgIH0KKwkgICAgZm9yIChrID0gYXJnYzsgayA8PSBOVU1fUEFSTTsgaysrKSB7CisJCW51bWJlcnNba10gPSAwOworCQlzdHJpbmdzW2tdID0gMDsKKwkgICAgfQorCisJICAgIHN3aXRjaCAodHBhcm1fdHlwZShuYW1lKSkgeworCSAgICBjYXNlIE51bV9TdHI6CisJCXMgPSBUUEFSTV8yKHMsIG51bWJlcnNbMV0sIHN0cmluZ3NbMl0pOworCQlicmVhazsKKwkgICAgY2FzZSBOdW1fU3RyX1N0cjoKKwkJcyA9IFRQQVJNXzMocywgbnVtYmVyc1sxXSwgc3RyaW5nc1syXSwgc3RyaW5nc1szXSk7CisJCWJyZWFrOworCSAgICBjYXNlIE51bWJlcnM6CisJICAgIGRlZmF1bHQ6CisJCSh2b2lkKSBfbmNfdHBhcm1fYW5hbHl6ZShzLCBwX2lzX3MsICZwb3Bjb3VudCk7CisjZGVmaW5lIG15UGFyYW0obikgKHBfaXNfc1tuIC0gMV0gIT0gMCA/ICgobG9uZykgc3RyaW5nc1tuXSkgOiBudW1iZXJzW25dKQorCQlzID0gVFBBUk1fOShzLAorCQkJICAgIG15UGFyYW0oMSksCisJCQkgICAgbXlQYXJhbSgyKSwKKwkJCSAgICBteVBhcmFtKDMpLAorCQkJICAgIG15UGFyYW0oNCksCisJCQkgICAgbXlQYXJhbSg1KSwKKwkJCSAgICBteVBhcmFtKDYpLAorCQkJICAgIG15UGFyYW0oNyksCisJCQkgICAgbXlQYXJhbSg4KSwKKwkJCSAgICBteVBhcmFtKDkpKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwkvKiB1c2UgcHV0cCgpIGluIG9yZGVyIHRvIHBlcmZvcm0gcGFkZGluZyAqLworCXB1dHAocyk7CisJcmV0dXJuIGV4aXRfY29kZShTVFJJTkcsIDApOworICAgIH0KKyAgICByZXR1cm4gZXhpdF9jb2RlKFNUUklORywgMSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgY2hhciAqdGVybTsKKyAgICBpbnQgZXJycmV0OworICAgIGJvb2wgY21kbGluZSA9IFRSVUU7CisgICAgaW50IGM7CisgICAgY2hhciBidWZbQlVGU0laXTsKKyAgICBpbnQgcmVzdWx0ID0gMDsKKworICAgIGNoZWNrX2FsaWFzZXMocHJnX25hbWUgPSBfbmNfcm9vdG5hbWUoYXJndlswXSkpOworCisgICAgdGVybSA9IGdldGVudigiVEVSTSIpOworCisgICAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJTVDpWIikpICE9IC0xKSB7CisJc3dpdGNoIChjKSB7CisJY2FzZSAnUyc6CisJICAgIGNtZGxpbmUgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVCc6CisJICAgIHVzZV9lbnYoRkFMU0UpOworCSAgICB0ZXJtID0gb3B0YXJnOworCSAgICBicmVhazsKKwljYXNlICdWJzoKKwkgICAgcHV0cyhjdXJzZXNfdmVyc2lvbigpKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCSAgICAvKiBOT1RSRUFDSEVEICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogTW9kaWZ5IHRoZSBhcmd1bWVudCBsaXN0IHRvIG9taXQgdGhlIG9wdGlvbnMgd2UgcHJvY2Vzc2VkLgorICAgICAqLworICAgIGlmIChpc19yZXNldCB8fCBpc19pbml0KSB7CisJaWYgKG9wdGluZC0tIDwgYXJnYykgeworCSAgICBhcmdjIC09IG9wdGluZDsKKwkgICAgYXJndiArPSBvcHRpbmQ7CisJfQorCWFyZ3ZbMF0gPSBwcmdfbmFtZTsKKyAgICB9IGVsc2UgeworCWFyZ2MgLT0gb3B0aW5kOworCWFyZ3YgKz0gb3B0aW5kOworICAgIH0KKworICAgIGlmICh0ZXJtID09IDAgfHwgKnRlcm0gPT0gJ1wwJykKKwlxdWl0KDIsICJObyB2YWx1ZSBmb3IgJFRFUk0gYW5kIG5vIC1UIHNwZWNpZmllZCIpOworCisgICAgaWYgKHNldHVwdGVybSh0ZXJtLCBTVERPVVRfRklMRU5PLCAmZXJycmV0KSAhPSBPSyAmJiBlcnJyZXQgPD0gMCkKKwlxdWl0KDMsICJ1bmtub3duIHRlcm1pbmFsIFwiJXNcIiIsIHRlcm0pOworCisgICAgaWYgKGNtZGxpbmUpIHsKKwlpZiAoKGFyZ2MgPD0gMCkgJiYgIWlzX3Jlc2V0ICYmICFpc19pbml0KQorCSAgICB1c2FnZSgpOworCUV4aXRQcm9ncmFtKHRwdXQoYXJnYywgYXJndikpOworICAgIH0KKworICAgIHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikgIT0gMCkgeworCWNoYXIgKmFyZ3ZlY1sxNl07CS8qIGNvbW1hbmQsIDkgcGFybXMsIG51bGwsICYgc2xvcCAqLworCWludCBhcmdudW0gPSAwOworCWNoYXIgKmNwOworCisJLyogY3JhY2sgdGhlIGFyZ3VtZW50IGxpc3QgaW50byBhIGRvcGUgdmVjdG9yICovCisJZm9yIChjcCA9IGJ1ZjsgKmNwOyBjcCsrKSB7CisJICAgIGlmIChpc3NwYWNlKFVDaGFyKCpjcCkpKSB7CisJCSpjcCA9ICdcMCc7CisJICAgIH0gZWxzZSBpZiAoY3AgPT0gYnVmIHx8IGNwWy0xXSA9PSAwKSB7CisJCWFyZ3ZlY1thcmdudW0rK10gPSBjcDsKKwkJaWYgKGFyZ251bSA+PSAoaW50KSBTSVpFT0YoYXJndmVjKSAtIDEpCisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKwlhcmd2ZWNbYXJnbnVtXSA9IDA7CisKKwlpZiAoYXJnbnVtICE9IDAKKwkgICAgJiYgdHB1dChhcmdudW0sIGFyZ3ZlYykgIT0gMCkgeworCSAgICBpZiAocmVzdWx0ID09IDApCisJCXJlc3VsdCA9IDQ7CS8qIHdpbGwgcmV0dXJuIHZhbHVlID40ICovCisJICAgICsrcmVzdWx0OworCX0KKyAgICB9CisKKyAgICBFeGl0UHJvZ3JhbShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvcHJvZ3MvdHNldC5jIGIvcHJvZ3MvdHNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNGQyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncy90c2V0LmMKQEAgLTAsMCArMSwxMzMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiB0c2V0LmMgLSB0ZXJtaW5hbCBpbml0aWFsaXphdGlvbiB1dGlsaXR5CisgKgorICogVGhpcyBjb2RlIHdhcyBtb3N0bHkgc3dpcGVkIGZyb20gNC40QlNEIHRzZXQsIHdpdGggc29tZSBvYnNvbGVzY2VudAorICogY3J1ZnQgcmVtb3ZlZCBhbmQgc3Vic3RhbnRpYWwgcG9ydGlvbnMgcmV3cml0dGVuLiAgQSBSZWdlbnRzIG9mIHRoZQorICogVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGNvcHlyaWdodCBhcHBsaWVzIHRvIHNvbWUgcG9ydGlvbnMgb2YgdGhlCisgKiBjb2RlLCBhbmQgaXMgcmVwcm9kdWNlZCBiZWxvdzoKKyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBVU0VfTElCVElORk8KKyNkZWZpbmUgX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUJLyogd2UgbmVlZCB0byBzZWUgaGFzX2hhcmR3YXJlX3RhYnMgKi8KKyNpbmNsdWRlIDxwcm9ncy5wcml2Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGVybWNhcC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpZiBIQVZFX0dFVFRUWU5BTSAmJiBIQVZFX1RUWUVOVF9ICisjaW5jbHVkZSA8dHR5ZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBOZVhUCitjaGFyICp0dHluYW1lKGludCBmZCk7CisjZW5kaWYKKworI2lmIEhBVkVfU0laRUNIQU5HRQorIyBpZiAhZGVmaW5lZChzdW4pIHx8ICFURVJNSU9TCisjICBpZiBIQVZFX1NZU19JT0NUTF9ICisjICAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBORUVEX1BURU1fSAorLyogdGhleSBuZWdsZWN0ZWQgdG8gZGVmaW5lIHN0cnVjdCB3aW5zaXplIGluIHRlcm1pb3MuaCAtLSBpdCdzIG9ubHkKKyAgIGluIHRlcm1pby5oCSovCisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2luY2x1ZGUgPHN5cy9wdGVtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGR1bXBfZW50cnkuaD4KKyNpbmNsdWRlIDx0cmFuc2Zvcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IHRzZXQuYyx2IDEuNzYgMjAwOC8xMC8xMSAxOToyNjoxOSB0b20gRXhwICQiKQorCisvKgorICogU0NPIGRlZmluZXMgVElPQ0dTSVpFIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdHJ1Y3QuICBPdGhlciBzeXN0ZW1zIChTdW5PUywKKyAqIFNvbGFyaXMsIElSSVgpIGRlZmluZSBUSU9DR1dJTlNaIGFuZCBzdHJ1Y3Qgd2luc2l6ZS4KKyAqLworI2lmZGVmIFRJT0NHU0laRQorIyBkZWZpbmUgSU9DVExfR0VUX1dJTlNJWkUgVElPQ0dTSVpFCisjIGRlZmluZSBJT0NUTF9TRVRfV0lOU0laRSBUSU9DU1NJWkUKKyMgZGVmaW5lIFNUUlVDVF9XSU5TSVpFIHN0cnVjdCB0dHlzaXplCisjIGRlZmluZSBXSU5TSVpFX1JPV1Mobikgbi50c19saW5lcworIyBkZWZpbmUgV0lOU0laRV9DT0xTKG4pIG4udHNfY29scworI2Vsc2UKKyMgaWZkZWYgVElPQ0dXSU5TWgorIyAgZGVmaW5lIElPQ1RMX0dFVF9XSU5TSVpFIFRJT0NHV0lOU1oKKyMgIGRlZmluZSBJT0NUTF9TRVRfV0lOU0laRSBUSU9DU1dJTlNaCisjICBkZWZpbmUgU1RSVUNUX1dJTlNJWkUgc3RydWN0IHdpbnNpemUKKyMgIGRlZmluZSBXSU5TSVpFX1JPV1Mobikgbi53c19yb3cKKyMgIGRlZmluZSBXSU5TSVpFX0NPTFMobikgbi53c19jb2wKKyMgZW5kaWYKKyNlbmRpZgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKKyN1bmRlZiBDVFJMCisjZGVmaW5lIENUUkwoeCkJKCh4KSAmIDB4MWYpCisKK2NvbnN0IGNoYXIgKl9uY19wcm9nbmFtZSA9ICJ0c2V0IjsKKworc3RhdGljIFRUWSBtb2RlLCBvbGRtb2RlLCBvcmlnaW5hbDsKKworc3RhdGljIGJvb2wgb3B0X2M7CQkvKiBzZXQgY29udHJvbC1jaGFycyAqLworc3RhdGljIGJvb2wgb3B0X3c7CQkvKiBzZXQgd2luZG93LXNpemUgKi8KKworc3RhdGljIGJvb2wgY2FuX3Jlc3RvcmUgPSBGQUxTRTsKK3N0YXRpYyBib29sIGlzcmVzZXQgPSBGQUxTRTsJLyogaW52b2tlZCBhcyByZXNldCAqLworc3RhdGljIGludCB0ZXJhc2VjaGFyID0gLTE7CS8qIG5ldyBlcmFzZSBjaGFyYWN0ZXIgKi8KK3N0YXRpYyBpbnQgaW50cmNoYXIgPSAtMTsJLyogbmV3IGludGVycnVwdCBjaGFyYWN0ZXIgKi8KK3N0YXRpYyBpbnQgdGtpbGxjaGFyID0gLTE7CS8qIG5ldyBraWxsIGNoYXJhY3RlciAqLworc3RhdGljIGludCB0bGluZXMsIHRjb2x1bW5zOwkvKiB3aW5kb3cgc2l6ZSAqLworCisjZGVmaW5lIExPV0VSQ0FTRShjKSAoKGlzYWxwaGEoVUNoYXIoYykpICYmIGlzdXBwZXIoVUNoYXIoYykpKSA/IHRvbG93ZXIoVUNoYXIoYykpIDogKGMpKQorCitzdGF0aWMgaW50CitDYXNlbGVzc0NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQorewkJCQkvKiBzdHJjYXNlY21wIGlzbid0IHBvcnRhYmxlICovCisgICAgd2hpbGUgKCphICYmICpiKSB7CisJaW50IGNtcCA9IExPV0VSQ0FTRSgqYSkgLSBMT1dFUkNBU0UoKmIpOworCWlmIChjbXAgIT0gMCkKKwkgICAgYnJlYWs7CisJYSsrLCBiKys7CisgICAgfQorICAgIHJldHVybiBMT1dFUkNBU0UoKmEpIC0gTE9XRVJDQVNFKCpiKTsKK30KKworc3RhdGljIHZvaWQKK2V4aXRfZXJyb3Iodm9pZCkKK3sKKyAgICBpZiAoY2FuX3Jlc3RvcmUpCisJU0VUX1RUWShTVERFUlJfRklMRU5PLCAmb3JpZ2luYWwpOworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgZmZsdXNoKHN0ZGVycik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICAvKiBOT1RSRUFDSEVEICovCit9CisKK3N0YXRpYyB2b2lkCitlcnIoY29uc3QgY2hhciAqZm10LC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBfbmNfcHJvZ25hbWUpOworICAgICh2b2lkKSB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisgICAgZXhpdF9lcnJvcigpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworc3RhdGljIHZvaWQKK2ZhaWxlZChjb25zdCBjaGFyICptc2cpCit7CisgICAgY2hhciB0ZW1wW0JVRlNJWl07CisgICAgdW5zaWduZWQgbGVuID0gc3RybGVuKF9uY19wcm9nbmFtZSkgKyAyOworCisgICAgaWYgKChpbnQpIGxlbiA8IChpbnQpIHNpemVvZih0ZW1wKSAtIDEyKSB7CisJc3RyY3B5KHRlbXAsIF9uY19wcm9nbmFtZSk7CisJc3RyY2F0KHRlbXAsICI6ICIpOworICAgIH0gZWxzZSB7CisJc3RyY3B5KHRlbXAsICJ0c2V0OiAiKTsKKyAgICB9CisgICAgcGVycm9yKHN0cm5jYXQodGVtcCwgbXNnLCBzaXplb2YodGVtcCkgLSBzdHJsZW4odGVtcCkgLSAyKSk7CisgICAgZXhpdF9lcnJvcigpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworc3RhdGljIHZvaWQKK2NhdChjaGFyICpmaWxlKQoreworICAgIEZJTEUgKmZwOworICAgIHNpemVfdCBucjsKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworCisgICAgaWYgKChmcCA9IGZvcGVuKGZpbGUsICJyIikpID09IDApCisJZmFpbGVkKGZpbGUpOworCisgICAgd2hpbGUgKChuciA9IGZyZWFkKGJ1Ziwgc2l6ZW9mKGNoYXIpLCBzaXplb2YoYnVmKSwgZnApKSAhPSAwKQorCWlmIChmd3JpdGUoYnVmLCBzaXplb2YoY2hhciksIG5yLCBzdGRlcnIpICE9IG5yKQorCSAgICAgIGZhaWxlZCgid3JpdGUgdG8gc3RkZXJyIik7CisgICAgZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGludAorb3V0YyhpbnQgYykKK3sKKyAgICByZXR1cm4gcHV0YyhjLCBzdGRlcnIpOworfQorCisvKiBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgdGVybWluYWwgdHlwZS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2Fza3VzZXIoY29uc3QgY2hhciAqZGZsdCkKK3sKKyAgICBzdGF0aWMgY2hhciBhbnN3ZXJbMjU2XTsKKyAgICBjaGFyICpwOworCisgICAgLyogV2UgY2FuIGdldCByZWNhbGxlZDsgaWYgc28sIGRvbid0IGNvbnRpbnVlIHVzZWxlc3NseS4gKi8KKyAgICBjbGVhcmVycihzdGRpbik7CisgICAgaWYgKGZlb2Yoc3RkaW4pIHx8IGZlcnJvcihzdGRpbikpIHsKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsICJcbiIpOworCWV4aXRfZXJyb3IoKTsKKwkvKiBOT1RSRUFDSEVEICovCisgICAgfQorICAgIGZvciAoOzspIHsKKwlpZiAoZGZsdCkKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiVGVybWluYWwgdHlwZT8gWyVzXSAiLCBkZmx0KTsKKwllbHNlCisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlRlcm1pbmFsIHR5cGU/ICIpOworCSh2b2lkKSBmZmx1c2goc3RkZXJyKTsKKworCWlmIChmZ2V0cyhhbnN3ZXIsIHNpemVvZihhbnN3ZXIpLCBzdGRpbikgPT0gMCkgeworCSAgICBpZiAoZGZsdCA9PSAwKSB7CisJCWV4aXRfZXJyb3IoKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCSAgICB9CisJICAgIHJldHVybiAoZGZsdCk7CisJfQorCisJaWYgKChwID0gc3RyY2hyKGFuc3dlciwgJ1xuJykpICE9IDApCisJICAgICpwID0gJ1wwJzsKKwlpZiAoYW5zd2VyWzBdKQorCSAgICByZXR1cm4gKGFuc3dlcik7CisJaWYgKGRmbHQgIT0gMCkKKwkgICAgcmV0dXJuIChkZmx0KTsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1hcHBpbmcgbG9naWMgYmVnaW5zIGhlcmUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJhdWQgcmF0ZSBjb25kaXRpb25hbHMgZm9yIG1hcHBpbmcuICovCisjZGVmaW5lCUdUCQkweDAxCisjZGVmaW5lCUVRCQkweDAyCisjZGVmaW5lCUxUCQkweDA0CisjZGVmaW5lCU5PVAkJMHgwOAorI2RlZmluZQlHRQkJKEdUIHwgRVEpCisjZGVmaW5lCUxFCQkoTFQgfCBFUSkKKwordHlwZWRlZiBzdHJ1Y3QgbWFwIHsKKyAgICBzdHJ1Y3QgbWFwICpuZXh0OwkJLyogTGlua2VkIGxpc3Qgb2YgbWFwcy4gKi8KKyAgICBjb25zdCBjaGFyICpwb3J0dHlwZTsJLyogUG9ydCB0eXBlLCBvciAiIiBmb3IgYW55LiAqLworICAgIGNvbnN0IGNoYXIgKnR5cGU7CQkvKiBUZXJtaW5hbCB0eXBlIHRvIHNlbGVjdC4gKi8KKyAgICBpbnQgY29uZGl0aW9uYWw7CQkvKiBCYXVkIHJhdGUgY29uZGl0aW9uYWxzIGJpdG1hc2suICovCisgICAgaW50IHNwZWVkOwkJCS8qIEJhdWQgcmF0ZSB0byBjb21wYXJlIGFnYWluc3QuICovCit9IE1BUDsKKworc3RhdGljIE1BUCAqY3VyLCAqbWFwbGlzdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc3BlZWRzIHsKKyAgICBjb25zdCBjaGFyICpzdHJpbmc7CisgICAgaW50IHNwZWVkOworfSBTUEVFRFM7CisKK3N0YXRpYyBjb25zdCBTUEVFRFMgc3BlZWRzW10gPQoreworICAgIHsiMCIsIEIwfSwKKyAgICB7IjUwIiwgQjUwfSwKKyAgICB7Ijc1IiwgQjc1fSwKKyAgICB7IjExMCIsIEIxMTB9LAorICAgIHsiMTM0IiwgQjEzNH0sCisgICAgeyIxMzQuNSIsIEIxMzR9LAorICAgIHsiMTUwIiwgQjE1MH0sCisgICAgeyIyMDAiLCBCMjAwfSwKKyAgICB7IjMwMCIsIEIzMDB9LAorICAgIHsiNjAwIiwgQjYwMH0sCisgICAgeyIxMjAwIiwgQjEyMDB9LAorICAgIHsiMTgwMCIsIEIxODAwfSwKKyAgICB7IjI0MDAiLCBCMjQwMH0sCisgICAgeyI0ODAwIiwgQjQ4MDB9LAorICAgIHsiOTYwMCIsIEI5NjAwfSwKKyAgICAvKiBzZ3R0eWIgbWF5IGRlZmluZSB1cCB0byB0aGlzIHBvaW50ICovCisjaWZkZWYgQjE5MjAwCisgICAgeyIxOTIwMCIsIEIxOTIwMH0sCisjZW5kaWYKKyNpZmRlZiBCMzg0MDAKKyAgICB7IjM4NDAwIiwgQjM4NDAwfSwKKyNlbmRpZgorI2lmZGVmIEIxOTIwMAorICAgIHsiMTkyMDAiLCBCMTkyMDB9LAorI2VuZGlmCisjaWZkZWYgQjM4NDAwCisgICAgeyIzODQwMCIsIEIzODQwMH0sCisjZW5kaWYKKyNpZmRlZiBCMTkyMDAKKyAgICB7IjE5MjAwIiwgQjE5MjAwfSwKKyNlbHNlCisjaWZkZWYgRVhUQQorICAgIHsiMTkyMDAiLCBFWFRBfSwKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgQjM4NDAwCisgICAgeyIzODQwMCIsIEIzODQwMH0sCisjZWxzZQorI2lmZGVmIEVYVEIKKyAgICB7IjM4NDAwIiwgRVhUQn0sCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEI1NzYwMAorICAgIHsiNTc2MDAiLCBCNTc2MDB9LAorI2VuZGlmCisjaWZkZWYgQjExNTIwMAorICAgIHsiMTE1MjAwIiwgQjExNTIwMH0sCisjZW5kaWYKKyNpZmRlZiBCMjMwNDAwCisgICAgeyIyMzA0MDAiLCBCMjMwNDAwfSwKKyNlbmRpZgorI2lmZGVmIEI0NjA4MDAKKyAgICB7IjQ2MDgwMCIsIEI0NjA4MDB9LAorI2VuZGlmCisgICAgeyhjaGFyICopIDAsIDB9Cit9OworCitzdGF0aWMgaW50Cit0YmF1ZHJhdGUoY2hhciAqcmF0ZSkKK3sKKyAgICBjb25zdCBTUEVFRFMgKnNwOworICAgIGludCBmb3VuZCA9IEZBTFNFOworCisgICAgLyogVGhlIGJhdWRyYXRlIG51bWJlciBjYW4gYmUgcHJlY2VkZWQgYnkgYSAnQicsIHdoaWNoIGlzIGlnbm9yZWQuICovCisgICAgaWYgKCpyYXRlID09ICdCJykKKwkrK3JhdGU7CisKKyAgICBmb3IgKHNwID0gc3BlZWRzOyBzcC0+c3RyaW5nOyArK3NwKSB7CisJaWYgKCFDYXNlbGVzc0NtcChyYXRlLCBzcC0+c3RyaW5nKSkgeworCSAgICBmb3VuZCA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKCFmb3VuZCkKKwllcnIoInVua25vd24gYmF1ZCByYXRlICVzIiwgcmF0ZSk7CisgICAgcmV0dXJuIChzcC0+c3BlZWQpOworfQorCisvKgorICogU3ludGF4IGZvciAtbToKKyAqIFtwb3J0LXR5cGVdW3Rlc3QgYmF1ZHJhdGVdOnRlcm1pbmFsLXR5cGUKKyAqIFRoZSBiYXVkIHJhdGUgdGVzdHMgYXJlOiA+LCA8LCBALCA9LCAhCisgKi8KK3N0YXRpYyB2b2lkCithZGRfbWFwcGluZyhjb25zdCBjaGFyICpwb3J0LCBjaGFyICphcmcpCit7CisgICAgTUFQICptYXBwOworICAgIGNoYXIgKmNvcHksICpwOworICAgIGNvbnN0IGNoYXIgKnRlcm1wOworICAgIGNoYXIgKmJhc2UgPSAwOworCisgICAgY29weSA9IHN0cmR1cChhcmcpOworICAgIG1hcHAgPSAoTUFQICopIG1hbGxvYyhzaXplb2YoTUFQKSk7CisgICAgaWYgKGNvcHkgPT0gMCB8fCBtYXBwID09IDApCisJZmFpbGVkKCJtYWxsb2MiKTsKKyAgICBtYXBwLT5uZXh0ID0gMDsKKyAgICBpZiAobWFwbGlzdCA9PSAwKQorCWN1ciA9IG1hcGxpc3QgPSBtYXBwOworICAgIGVsc2UgeworCWN1ci0+bmV4dCA9IG1hcHA7CisJY3VyID0gbWFwcDsKKyAgICB9CisKKyAgICBtYXBwLT5wb3J0dHlwZSA9IGFyZzsKKyAgICBtYXBwLT5jb25kaXRpb25hbCA9IDA7CisKKyAgICBhcmcgPSBzdHJwYnJrKGFyZywgIj48QD0hOiIpOworCisgICAgaWYgKGFyZyA9PSAwKSB7CQkvKiBbP110ZXJtICovCisJbWFwcC0+dHlwZSA9IG1hcHAtPnBvcnR0eXBlOworCW1hcHAtPnBvcnR0eXBlID0gMDsKKwlnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKGFyZyA9PSBtYXBwLT5wb3J0dHlwZSkJLyogWz48QD0hIGJhdWRdOnRlcm0gKi8KKwl0ZXJtcCA9IG1hcHAtPnBvcnR0eXBlID0gMDsKKyAgICBlbHNlCisJdGVybXAgPSBiYXNlID0gYXJnOworCisgICAgZm9yICg7OyArK2FyZykgewkJLyogT3B0aW9uYWwgY29uZGl0aW9uYWxzLiAqLworCXN3aXRjaCAoKmFyZykgeworCWNhc2UgJzwnOgorCSAgICBpZiAobWFwcC0+Y29uZGl0aW9uYWwgJiBHVCkKKwkJZ290byBiYWRtb3B0OworCSAgICBtYXBwLT5jb25kaXRpb25hbCB8PSBMVDsKKwkgICAgYnJlYWs7CisJY2FzZSAnPic6CisJICAgIGlmIChtYXBwLT5jb25kaXRpb25hbCAmIExUKQorCQlnb3RvIGJhZG1vcHQ7CisJICAgIG1hcHAtPmNvbmRpdGlvbmFsIHw9IEdUOworCSAgICBicmVhazsKKwljYXNlICdAJzoKKwljYXNlICc9JzoJCS8qIE5vdCBkb2N1bWVudGVkLiAqLworCSAgICBtYXBwLT5jb25kaXRpb25hbCB8PSBFUTsKKwkgICAgYnJlYWs7CisJY2FzZSAnISc6CisJICAgIG1hcHAtPmNvbmRpdGlvbmFsIHw9IE5PVDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgZ290byBuZXh0OworCX0KKyAgICB9CisKKyAgbmV4dDoKKyAgICBpZiAoKmFyZyA9PSAnOicpIHsKKwlpZiAobWFwcC0+Y29uZGl0aW9uYWwpCisJICAgIGdvdG8gYmFkbW9wdDsKKwkrK2FyZzsKKyAgICB9IGVsc2UgewkJCS8qIE9wdGlvbmFsIGJhdWRyYXRlLiAqLworCWFyZyA9IHN0cmNocihwID0gYXJnLCAnOicpOworCWlmIChhcmcgPT0gMCkKKwkgICAgZ290byBiYWRtb3B0OworCSphcmcrKyA9ICdcMCc7CisJbWFwcC0+c3BlZWQgPSB0YmF1ZHJhdGUocCk7CisgICAgfQorCisgICAgaWYgKGFyZyA9PSAoY2hhciAqKSAwKQkvKiBOb24tb3B0aW9uYWwgdHlwZS4gKi8KKwlnb3RvIGJhZG1vcHQ7CisKKyAgICBtYXBwLT50eXBlID0gYXJnOworCisgICAgLyogVGVybWluYXRlIHBvcnR0eXBlLCBpZiBzcGVjaWZpZWQuICovCisgICAgaWYgKHRlcm1wICE9IDApCisJKmJhc2UgPSAnXDAnOworCisgICAgLyogSWYgYSBOT1QgY29uZGl0aW9uYWwsIHJldmVyc2UgdGhlIHRlc3QuICovCisgICAgaWYgKG1hcHAtPmNvbmRpdGlvbmFsICYgTk9UKQorCW1hcHAtPmNvbmRpdGlvbmFsID0gfm1hcHAtPmNvbmRpdGlvbmFsICYgKEVRIHwgR1QgfCBMVCk7CisKKyAgICAvKiBJZiB1c2VyIHNwZWNpZmllZCBhIHBvcnQgd2l0aCBhbiBvcHRpb24gZmxhZywgc2V0IGl0LiAqLworICBkb25lOgorICAgIGlmIChwb3J0KSB7CisJaWYgKG1hcHAtPnBvcnR0eXBlKSB7CisJICBiYWRtb3B0OgorCSAgICBlcnIoImlsbGVnYWwgLW0gb3B0aW9uIGZvcm1hdDogJXMiLCBjb3B5KTsKKwl9CisJbWFwcC0+cG9ydHR5cGUgPSBwb3J0OworICAgIH0KKyAgICBmcmVlKGNvcHkpOworI2lmZGVmIE1BUERFQlVHCisgICAgKHZvaWQpIHByaW50ZigicG9ydDogJXNcbiIsIG1hcHAtPnBvcnR0eXBlID8gbWFwcC0+cG9ydHR5cGUgOiAiQU5ZIik7CisgICAgKHZvaWQpIHByaW50ZigidHlwZTogJXNcbiIsIG1hcHAtPnR5cGUpOworICAgICh2b2lkKSBwcmludGYoImNvbmRpdGlvbmFsOiAiKTsKKyAgICBwID0gIiI7CisgICAgaWYgKG1hcHAtPmNvbmRpdGlvbmFsICYgR1QpIHsKKwkodm9pZCkgcHJpbnRmKCJHVCIpOworCXAgPSAiLyI7CisgICAgfQorICAgIGlmIChtYXBwLT5jb25kaXRpb25hbCAmIEVRKSB7CisJKHZvaWQpIHByaW50ZigiJXNFUSIsIHApOworCXAgPSAiLyI7CisgICAgfQorICAgIGlmIChtYXBwLT5jb25kaXRpb25hbCAmIExUKQorCSh2b2lkKSBwcmludGYoIiVzTFQiLCBwKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcbnNwZWVkOiAlZFxuIiwgbWFwcC0+c3BlZWQpOworI2VuZGlmCit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGVybWluYWwgdG8gdXNlIGZvciBhIHBvcnQgb2YgdHlwZSAndHlwZScsIGFzIHNwZWNpZmllZAorICogYnkgdGhlIGZpcnN0IGFwcGxpY2FibGUgbWFwcGluZyBpbiAnbWFwJy4gIElmIG5vIG1hcHBpbmdzIGFwcGx5LCByZXR1cm4KKyAqICd0eXBlJy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorbWFwcGVkKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgICAgTUFQICptYXBwOworICAgIGludCBtYXRjaDsKKworICAgIGZvciAobWFwcCA9IG1hcGxpc3Q7IG1hcHA7IG1hcHAgPSBtYXBwLT5uZXh0KQorCWlmIChtYXBwLT5wb3J0dHlwZSA9PSAwIHx8ICFzdHJjbXAobWFwcC0+cG9ydHR5cGUsIHR5cGUpKSB7CisJICAgIHN3aXRjaCAobWFwcC0+Y29uZGl0aW9uYWwpIHsKKwkgICAgY2FzZSAwOgkJLyogTm8gdGVzdCBzcGVjaWZpZWQuICovCisJCW1hdGNoID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgRVE6CisJCW1hdGNoID0gKG9zcGVlZCA9PSBtYXBwLT5zcGVlZCk7CisJCWJyZWFrOworCSAgICBjYXNlIEdFOgorCQltYXRjaCA9IChvc3BlZWQgPj0gbWFwcC0+c3BlZWQpOworCQlicmVhazsKKwkgICAgY2FzZSBHVDoKKwkJbWF0Y2ggPSAob3NwZWVkID4gbWFwcC0+c3BlZWQpOworCQlicmVhazsKKwkgICAgY2FzZSBMRToKKwkJbWF0Y2ggPSAob3NwZWVkIDw9IG1hcHAtPnNwZWVkKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTFQ6CisJCW1hdGNoID0gKG9zcGVlZCA8IG1hcHAtPnNwZWVkKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCW1hdGNoID0gRkFMU0U7CisJICAgIH0KKwkgICAgaWYgKG1hdGNoKQorCQlyZXR1cm4gKG1hcHAtPnR5cGUpOworCX0KKyAgICAvKiBObyBtYXRjaCBmb3VuZDsgcmV0dXJuIGdpdmVuIHR5cGUuICovCisgICAgcmV0dXJuICh0eXBlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRW50cnkgZmV0Y2hpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGaWd1cmUgb3V0IHdoYXQga2luZCBvZiB0ZXJtaW5hbCB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCB0aGVuIHJlYWQgaW4KKyAqIGl0cyB0ZXJtY2FwIGVudHJ5LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfdGVybWNhcF9lbnRyeShjaGFyICp1c2VyYXJnKQoreworICAgIGludCBlcnJyZXQ7CisgICAgY2hhciAqcDsKKyAgICBjb25zdCBjaGFyICp0dHlwZTsKKyNpZiBIQVZFX0dFVFRUWU5BTQorICAgIHN0cnVjdCB0dHllbnQgKnQ7CisjZWxzZQorICAgIEZJTEUgKmZwOworI2VuZGlmCisgICAgY2hhciAqdHR5cGF0aDsKKworICAgIGlmICh1c2VyYXJnKSB7CisJdHR5cGUgPSB1c2VyYXJnOworCWdvdG8gZm91bmQ7CisgICAgfQorCisgICAgLyogVHJ5IHRoZSBlbnZpcm9ubWVudC4gKi8KKyAgICBpZiAoKHR0eXBlID0gZ2V0ZW52KCJURVJNIikpICE9IDApCisJZ290byBtYXA7CisKKyAgICBpZiAoKHR0eXBhdGggPSB0dHluYW1lKFNUREVSUl9GSUxFTk8pKSAhPSAwKSB7CisJcCA9IF9uY19iYXNlbmFtZSh0dHlwYXRoKTsKKyNpZiBIQVZFX0dFVFRUWU5BTQorCS8qCisJICogV2UgaGF2ZSB0aGUgNC4zQlNEIGxpYnJhcnkgY2FsbCBnZXR0dHluYW0oMyk7IHRoYXQgbWVhbnMKKwkgKiB0aGVyZSdzIGFuIC9ldGMvdHR5cyB0byBsb29rIHVwIGRldmljZS10by10eXBlIG1hcHBpbmdzIGluLgorCSAqIFRyeSB0dHluYW1lKDMpOyBjaGVjayBmb3IgZGlhbHVwIG9yIG90aGVyIG1hcHBpbmcuCisJICovCisJaWYgKCh0ID0gZ2V0dHR5bmFtKHApKSkgeworCSAgICB0dHlwZSA9IHQtPnR5X3R5cGU7CisJICAgIGdvdG8gbWFwOworCX0KKyNlbHNlCisJaWYgKChmcCA9IGZvcGVuKCIvZXRjL3R0eXR5cGUiLCAiciIpKSAhPSAwCisJICAgIHx8IChmcCA9IGZvcGVuKCIvZXRjL3R0eXMiLCAiciIpKSAhPSAwKSB7CisJICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisJICAgIGNoYXIgKnMsICp0LCAqZDsKKworCSAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIGZwKSAhPSAwKSB7CisJCWZvciAocyA9IGJ1ZmZlciwgdCA9IGQgPSAwOyAqczsgcysrKSB7CisJCSAgICBpZiAoaXNzcGFjZShVQ2hhcigqcykpKQorCQkJKnMgPSAnXDAnOworCQkgICAgZWxzZSBpZiAodCA9PSAwKQorCQkJdCA9IHM7CisJCSAgICBlbHNlIGlmIChkID09IDAgJiYgcyAhPSBidWZmZXIgJiYgc1stMV0gPT0gJ1wwJykKKwkJCWQgPSBzOworCQl9CisJCWlmICh0ICE9IDAgJiYgZCAhPSAwICYmICFzdHJjbXAoZCwgcCkpIHsKKwkJICAgIHR0eXBlID0gc3RyZHVwKHQpOworCQkgICAgZmNsb3NlKGZwKTsKKwkJICAgIGdvdG8gbWFwOworCQl9CisJICAgIH0KKwkgICAgZmNsb3NlKGZwKTsKKwl9CisjZW5kaWYgLyogSEFWRV9HRVRUVFlOQU0gKi8KKyAgICB9CisKKyAgICAvKiBJZiBzdGlsbCB1bmRlZmluZWQsIHVzZSAidW5rbm93biIuICovCisgICAgdHR5cGUgPSAidW5rbm93biI7CisKKyAgbWFwOnR0eXBlID0gbWFwcGVkKHR0eXBlKTsKKworICAgIC8qCisgICAgICogSWYgbm90IGEgcGF0aCwgcmVtb3ZlIFRFUk1DQVAgZnJvbSB0aGUgZW52aXJvbm1lbnQgc28gd2UgZ2V0IGEKKyAgICAgKiByZWFsIGVudHJ5IGZyb20gL2V0Yy90ZXJtY2FwLiAgVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGJlaW5nIGZvb2xlZAorICAgICAqIGJ5IG91dCBvZiBkYXRlIHN0dWZmIGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgKi8KKyAgZm91bmQ6aWYgKChwID0gZ2V0ZW52KCJURVJNQ0FQIikpICE9IDAgJiYgIV9uY19pc19hYnNfcGF0aChwKSkgeworCS8qICd1bnNldGVudigiVEVSTUNBUCIpJyBpcyBub3QgcG9ydGFibGUuCisJICogVGhlICdlbnZpcm9uJyBhcnJheSBpcyBiZXR0ZXIuCisJICovCisJaW50IG47CisJZm9yIChuID0gMDsgZW52aXJvbltuXSAhPSAwOyBuKyspIHsKKwkgICAgaWYgKCFzdHJuY21wKCJURVJNQ0FQPSIsIGVudmlyb25bbl0sIDgpKSB7CisJCXdoaWxlICgoZW52aXJvbltuXSA9IGVudmlyb25bbiArIDFdKSAhPSAwKSB7CisJCSAgICBuKys7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB0dHlwZSBub3cgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSB0eXBlIG9mIHRoZSB0ZXJtaW5hbC4KKyAgICAgKiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICc/JywgYXNrIHRoZSB1c2VyLgorICAgICAqLworICAgIGlmICh0dHlwZVswXSA9PSAnPycpIHsKKwlpZiAodHR5cGVbMV0gIT0gJ1wwJykKKwkgICAgdHR5cGUgPSBhc2t1c2VyKHR0eXBlICsgMSk7CisJZWxzZQorCSAgICB0dHlwZSA9IGFza3VzZXIoMCk7CisgICAgfQorICAgIC8qIEZpbmQgdGhlIHRlcm1pbmZvIGVudHJ5LiAgSWYgaXQgZG9lc24ndCBleGlzdCwgYXNrIHRoZSB1c2VyLiAqLworICAgIHdoaWxlIChzZXR1cHRlcm0oKE5DVVJTRVNfQ09OU1QgY2hhciAqKSB0dHlwZSwgU1RET1VUX0ZJTEVOTywgJmVycnJldCkKKwkgICAhPSBPSykgeworCWlmIChlcnJyZXQgPT0gMCkgeworCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biB0ZXJtaW5hbCB0eXBlICVzXG4iLAorCQkJICAgX25jX3Byb2duYW1lLCB0dHlwZSk7CisJICAgIHR0eXBlID0gMDsKKwl9IGVsc2UgeworCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAiJXM6IGNhbid0IGluaXRpYWxpemUgdGVybWluYWwgdHlwZSAlcyAoZXJyb3IgJWQpXG4iLAorCQkJICAgX25jX3Byb2duYW1lLCB0dHlwZSwgZXJycmV0KTsKKwkgICAgdHR5cGUgPSAwOworCX0KKwl0dHlwZSA9IGFza3VzZXIodHR5cGUpOworICAgIH0KKyNpZiBCUk9LRU5fTElOS0VSCisgICAgdGdldGZsYWcoImFtIik7CQkvKiBmb3JjZSBsaWJfdGVybWNhcC5vIHRvIGJlIGxpbmtlZCBmb3IgJ29zcGVlZCcgKi8KKyNlbmRpZgorICAgIHJldHVybiAodHR5cGUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNb2RlLXNldHRpbmcgbG9naWMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNvbWUgQlNEIHN5c3RlbXMgaGF2ZSB0aGVzZSBidWlsdCBpbiwgc29tZSBzeXN0ZW1zIGFyZSBtaXNzaW5nCisgKiBvbmUgb3IgbW9yZSBkZWZpbml0aW9ucy4gVGhlIHNhZmVzdCBzb2x1dGlvbiBpcyB0byBvdmVycmlkZSB1bmxlc3MgdGhlCisgKiBjb21tb25seS1hbHRlcmVkIG9uZXMgYXJlIGRlZmluZWQuCisgKi8KKyNpZiAhKGRlZmluZWQoQ0VSQVNFKSAmJiBkZWZpbmVkKENJTlRSKSAmJiBkZWZpbmVkKENLSUxMKSAmJiBkZWZpbmVkKENRVUlUKSkKKyN1bmRlZiBDRU9GCisjdW5kZWYgQ0VSQVNFCisjdW5kZWYgQ0lOVFIKKyN1bmRlZiBDS0lMTAorI3VuZGVmIENMTkVYVAorI3VuZGVmIENSUFJOVAorI3VuZGVmIENRVUlUCisjdW5kZWYgQ1NUQVJUCisjdW5kZWYgQ1NUT1AKKyN1bmRlZiBDU1VTUAorI2VuZGlmCisKKy8qIGNvbnRyb2wtY2hhcmFjdGVyIGRlZmF1bHRzICovCisjaWZuZGVmIENFT0YKKyNkZWZpbmUgQ0VPRglDVFJMKCdEJykKKyNlbmRpZgorI2lmbmRlZiBDRVJBU0UKKyNkZWZpbmUgQ0VSQVNFCUNUUkwoJ0gnKQorI2VuZGlmCisjaWZuZGVmIENJTlRSCisjZGVmaW5lIENJTlRSCTEyNwkJLyogXj8gKi8KKyNlbmRpZgorI2lmbmRlZiBDS0lMTAorI2RlZmluZSBDS0lMTAlDVFJMKCdVJykKKyNlbmRpZgorI2lmbmRlZiBDTE5FWFQKKyNkZWZpbmUgQ0xORVhUICBDVFJMKCd2JykKKyNlbmRpZgorI2lmbmRlZiBDUlBSTlQKKyNkZWZpbmUgQ1JQUk5UICBDVFJMKCdyJykKKyNlbmRpZgorI2lmbmRlZiBDUVVJVAorI2RlZmluZSBDUVVJVAlDVFJMKCdcXCcpCisjZW5kaWYKKyNpZm5kZWYgQ1NUQVJUCisjZGVmaW5lIENTVEFSVAlDVFJMKCdRJykKKyNlbmRpZgorI2lmbmRlZiBDU1RPUAorI2RlZmluZSBDU1RPUAlDVFJMKCdTJykKKyNlbmRpZgorI2lmbmRlZiBDU1VTUAorI2RlZmluZSBDU1VTUAlDVFJMKCdaJykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfUE9TSVhfVkRJU0FCTEUpCisjZGVmaW5lIERJU0FCTEVEKHZhbCkgICAoKChfUE9TSVhfVkRJU0FCTEUgIT0gLTEpIFwKKwkJICAgICAgICYmICgodmFsKSA9PSBfUE9TSVhfVkRJU0FCTEUpKSBcCisJCSAgICAgIHx8ICgodmFsKSA8PSAwKSkKKyNlbHNlCisjZGVmaW5lIERJU0FCTEVEKHZhbCkgICAoKGludCkodmFsKSA8PSAwKQorI2VuZGlmCisKKyNkZWZpbmUgQ0hLKHZhbCwgZGZ0KSAgIChESVNBQkxFRCh2YWwpID8gZGZ0IDogdmFsKQorCitzdGF0aWMgYm9vbCBzZXRfdGFicyh2b2lkKTsKKworLyoKKyAqIFJlc2V0IHRoZSB0ZXJtaW5hbCBtb2RlIGJpdHMgdG8gYSBzZW5zaWJsZSBzdGF0ZS4gIFZlcnkgdXNlZnVsIGFmdGVyCisgKiBhIGNoaWxkIHByb2dyYW0gZGllcyBpbiByYXcgbW9kZS4KKyAqLworc3RhdGljIHZvaWQKK3Jlc2V0X21vZGUodm9pZCkKK3sKKyNpZmRlZiBURVJNSU9TCisgICAgdGNnZXRhdHRyKFNUREVSUl9GSUxFTk8sICZtb2RlKTsKKyNlbHNlCisgICAgc3R0eShTVERFUlJfRklMRU5PLCAmbW9kZSk7CisjZW5kaWYKKworI2lmZGVmIFRFUk1JT1MKKyNpZiBkZWZpbmVkKFZESVNDQVJEKSAmJiBkZWZpbmVkKENESVNDQVJEKQorICAgIG1vZGUuY19jY1tWRElTQ0FSRF0gPSBDSEsobW9kZS5jX2NjW1ZESVNDQVJEXSwgQ0RJU0NBUkQpOworI2VuZGlmCisgICAgbW9kZS5jX2NjW1ZFT0ZdID0gQ0hLKG1vZGUuY19jY1tWRU9GXSwgQ0VPRik7CisgICAgbW9kZS5jX2NjW1ZFUkFTRV0gPSBDSEsobW9kZS5jX2NjW1ZFUkFTRV0sIENFUkFTRSk7CisjaWYgZGVmaW5lZChWRkxVU0gpICYmIGRlZmluZWQoQ0ZMVVNIKQorICAgIG1vZGUuY19jY1tWRkxVU0hdID0gQ0hLKG1vZGUuY19jY1tWRkxVU0hdLCBDRkxVU0gpOworI2VuZGlmCisgICAgbW9kZS5jX2NjW1ZJTlRSXSA9IENISyhtb2RlLmNfY2NbVklOVFJdLCBDSU5UUik7CisgICAgbW9kZS5jX2NjW1ZLSUxMXSA9IENISyhtb2RlLmNfY2NbVktJTExdLCBDS0lMTCk7CisjaWYgZGVmaW5lZChWTE5FWFQpICYmIGRlZmluZWQoQ0xORVhUKQorICAgIG1vZGUuY19jY1tWTE5FWFRdID0gQ0hLKG1vZGUuY19jY1tWTE5FWFRdLCBDTE5FWFQpOworI2VuZGlmCisgICAgbW9kZS5jX2NjW1ZRVUlUXSA9IENISyhtb2RlLmNfY2NbVlFVSVRdLCBDUVVJVCk7CisjaWYgZGVmaW5lZChWUkVQUklOVCkgJiYgZGVmaW5lZChDUlBSTlQpCisgICAgbW9kZS5jX2NjW1ZSRVBSSU5UXSA9IENISyhtb2RlLmNfY2NbVlJFUFJJTlRdLCBDUlBSTlQpOworI2VuZGlmCisjaWYgZGVmaW5lZChWU1RBUlQpICYmIGRlZmluZWQoQ1NUQVJUKQorICAgIG1vZGUuY19jY1tWU1RBUlRdID0gQ0hLKG1vZGUuY19jY1tWU1RBUlRdLCBDU1RBUlQpOworI2VuZGlmCisjaWYgZGVmaW5lZChWU1RPUCkgJiYgZGVmaW5lZChDU1RPUCkKKyAgICBtb2RlLmNfY2NbVlNUT1BdID0gQ0hLKG1vZGUuY19jY1tWU1RPUF0sIENTVE9QKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoVlNVU1ApICYmIGRlZmluZWQoQ1NVU1ApCisgICAgbW9kZS5jX2NjW1ZTVVNQXSA9IENISyhtb2RlLmNfY2NbVlNVU1BdLCBDU1VTUCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFZXRVJBU0UpICYmIGRlZmluZWQoQ1dFUkFTRSkKKyAgICBtb2RlLmNfY2NbVldFUkFTRV0gPSBDSEsobW9kZS5jX2NjW1ZXRVJBU0VdLCBDV0VSQVNFKTsKKyNlbmRpZgorCisgICAgbW9kZS5jX2lmbGFnICY9IH4oSUdOQlJLIHwgUEFSTVJLIHwgSU5QQ0sgfCBJU1RSSVAgfCBJTkxDUiB8IElHTkNSCisjaWZkZWYgSVVDTEMKKwkJICAgICAgfCBJVUNMQworI2VuZGlmCisjaWZkZWYgSVhBTlkKKwkJICAgICAgfCBJWEFOWQorI2VuZGlmCisJCSAgICAgIHwgSVhPRkYpOworCisgICAgbW9kZS5jX2lmbGFnIHw9IChCUktJTlQgfCBJR05QQVIgfCBJQ1JOTCB8IElYT04KKyNpZmRlZiBJTUFYQkVMCisJCSAgICAgfCBJTUFYQkVMCisjZW5kaWYKKwkpOworCisgICAgbW9kZS5jX29mbGFnICY9IH4oMAorI2lmZGVmIE9MQ1VDCisJCSAgICAgIHwgT0xDVUMKKyNlbmRpZgorI2lmZGVmIE9DUk5MCisJCSAgICAgIHwgT0NSTkwKKyNlbmRpZgorI2lmZGVmIE9OT0NSCisJCSAgICAgIHwgT05PQ1IKKyNlbmRpZgorI2lmZGVmIE9OTFJFVAorCQkgICAgICB8IE9OTFJFVAorI2VuZGlmCisjaWZkZWYgT0ZJTEwKKwkJICAgICAgfCBPRklMTAorI2VuZGlmCisjaWZkZWYgT0ZERUwKKwkJICAgICAgfCBPRkRFTAorI2VuZGlmCisjaWZkZWYgTkxETFkKKwkJICAgICAgfCBOTERMWQorI2VuZGlmCisjaWZkZWYgQ1JETFkKKwkJICAgICAgfCBDUkRMWQorI2VuZGlmCisjaWZkZWYgVEFCRExZCisJCSAgICAgIHwgVEFCRExZCisjZW5kaWYKKyNpZmRlZiBCU0RMWQorCQkgICAgICB8IEJTRExZCisjZW5kaWYKKyNpZmRlZiBWVERMWQorCQkgICAgICB8IFZURExZCisjZW5kaWYKKyNpZmRlZiBGRkRMWQorCQkgICAgICB8IEZGRExZCisjZW5kaWYKKwkpOworCisgICAgbW9kZS5jX29mbGFnIHw9IChPUE9TVAorI2lmZGVmIE9OTENSCisJCSAgICAgfCBPTkxDUgorI2VuZGlmCisJKTsKKworICAgIG1vZGUuY19jZmxhZyAmPSB+KENTSVpFIHwgQ1NUT1BCIHwgUEFSRU5CIHwgUEFST0REIHwgQ0xPQ0FMKTsKKyAgICBtb2RlLmNfY2ZsYWcgfD0gKENTOCB8IENSRUFEKTsKKyAgICBtb2RlLmNfbGZsYWcgJj0gfihFQ0hPTkwgfCBOT0ZMU0gKKyNpZmRlZiBUT1NUT1AKKwkJICAgICAgfCBUT1NUT1AKKyNlbmRpZgorI2lmZGVmIEVDSE9QVFIKKwkJICAgICAgfCBFQ0hPUFJUCisjZW5kaWYKKyNpZmRlZiBYQ0FTRQorCQkgICAgICB8IFhDQVNFCisjZW5kaWYKKwkpOworCisgICAgbW9kZS5jX2xmbGFnIHw9IChJU0lHIHwgSUNBTk9OIHwgRUNITyB8IEVDSE9FIHwgRUNIT0sKKyNpZmRlZiBFQ0hPQ1RMCisJCSAgICAgfCBFQ0hPQ1RMCisjZW5kaWYKKyNpZmRlZiBFQ0hPS0UKKwkJICAgICB8IEVDSE9LRQorI2VuZGlmCisJKTsKKyNlbmRpZgorCisgICAgU0VUX1RUWShTVERFUlJfRklMRU5PLCAmbW9kZSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgImdvb2QiIHZhbHVlIGZvciB0aGUgZXJhc2UgY2hhcmFjdGVyLiAgVGhpcyBpcyBsb29zZWx5IGJhc2VkIG9uCisgKiB0aGUgQlNENC40IGxvZ2ljLgorICovCisjaWZkZWYgVEVSTUlPUworc3RhdGljIGludAorZGVmYXVsdF9lcmFzZSh2b2lkKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAob3Zlcl9zdHJpa2UKKwkmJiBrZXlfYmFja3NwYWNlICE9IDAKKwkmJiBzdHJsZW4oa2V5X2JhY2tzcGFjZSkgPT0gMSkKKwlyZXN1bHQgPSBrZXlfYmFja3NwYWNlWzBdOworICAgIGVsc2UKKwlyZXN1bHQgPSBDRVJBU0U7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qCisgKiBVcGRhdGUgdGhlIHZhbHVlcyBvZiB0aGUgZXJhc2UsIGludGVycnVwdCwgYW5kIGtpbGwgY2hhcmFjdGVycyBpbiAnbW9kZScuCisgKgorICogU1ZyNCB0c2V0IChlLmcuLCBTb2xhcmlzIDIuNSkgb25seSBtb2RpZmllcyB0aGUgaW50ciwgcXVpdCBvciBlcmFzZQorICogY2hhcmFjdGVycyBpZiB0aGV5J3JlIHVuc2V0LCBvciBpZiB3ZSBzcGVjaWZ5IHRoZW0gYXMgb3B0aW9ucy4gIFRoaXMgZGlmZmVycworICogZnJvbSBCU0QgNC40IHRzZXQsIHdoaWNoIGFsd2F5cyBzZXRzIGVyYXNlLgorICovCitzdGF0aWMgdm9pZAorc2V0X2NvbnRyb2xfY2hhcnModm9pZCkKK3sKKyNpZmRlZiBURVJNSU9TCisgICAgaWYgKERJU0FCTEVEKG1vZGUuY19jY1tWRVJBU0VdKSB8fCB0ZXJhc2VjaGFyID49IDApCisJbW9kZS5jX2NjW1ZFUkFTRV0gPSAodGVyYXNlY2hhciA+PSAwKSA/IHRlcmFzZWNoYXIgOiBkZWZhdWx0X2VyYXNlKCk7CisKKyAgICBpZiAoRElTQUJMRUQobW9kZS5jX2NjW1ZJTlRSXSkgfHwgaW50cmNoYXIgPj0gMCkKKwltb2RlLmNfY2NbVklOVFJdID0gKGludHJjaGFyID49IDApID8gaW50cmNoYXIgOiBDSU5UUjsKKworICAgIGlmIChESVNBQkxFRChtb2RlLmNfY2NbVktJTExdKSB8fCB0a2lsbGNoYXIgPj0gMCkKKwltb2RlLmNfY2NbVktJTExdID0gKHRraWxsY2hhciA+PSAwKSA/IHRraWxsY2hhciA6IENLSUxMOworI2VuZGlmCit9CisKKy8qCisgKiBTZXQgdXAgdmFyaW91cyBjb252ZXJzaW9ucyBpbiAnbW9kZScsIGluY2x1ZGluZyBwYXJpdHksIHRhYnMsIHJldHVybnMsCisgKiBlY2hvLCBhbmQgY2FzZSwgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtY2FwIGVudHJ5LiAgSWYgdGhlIHByb2dyYW0gd2UncmUKKyAqIHJ1bm5pbmcgd2FzIG5hbWVkIHdpdGggYSBsZWFkaW5nIHVwcGVyLWNhc2UgY2hhcmFjdGVyLCBtYXAgZXh0ZXJuYWwKKyAqIHVwcGVyY2FzZSB0byBpbnRlcm5hbCBsb3dlcmNhc2UuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfY29udmVyc2lvbnModm9pZCkKK3sKKyNpZmRlZiBfX09CU09MRVRFX18KKyAgICAvKgorICAgICAqIENvbnZlcnNpb24gbG9naWMgZm9yIHNvbWUgKnJlYWxseSogYW5jaWVudCB0ZXJtaW5hbCBnbGl0Y2hlcywKKyAgICAgKiBub3Qgc3VwcG9ydGVkIGluIHRlcm1pbmZvLiAgTGVmdCBoZXJlIGZvciBzdWNjZWVkaW5nIGdlbmVyYXRpb25zCisgICAgICogdG8gbWFydmVsIGF0LgorICAgICAqLworICAgIGlmICh0Z2V0ZmxhZygiVUMiKSkgeworI2lmZGVmIElVQ0xDCisJbW9kZS5jX2lmbGFnIHw9IElVQ0xDOworCW1vZGUuY19vZmxhZyB8PSBPTENVQzsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAodGdldGZsYWcoIkxDIikpIHsKKyNpZmRlZiBJVUNMQworCW1vZGUuY19pZmxhZyAmPSB+SVVDTEM7CisJbW9kZS5jX29mbGFnICY9IH5PTENVQzsKKyNlbmRpZgorICAgIH0KKyAgICBtb2RlLmNfaWZsYWcgJj0gfihQQVJNUksgfCBJTlBDSyk7CisgICAgbW9kZS5jX2xmbGFnIHw9IElDQU5PTjsKKyAgICBpZiAodGdldGZsYWcoIkVQIikpIHsKKwltb2RlLmNfY2ZsYWcgfD0gUEFSRU5COworCW1vZGUuY19jZmxhZyAmPSB+UEFST0REOworICAgIH0KKyAgICBpZiAodGdldGZsYWcoIk9QIikpIHsKKwltb2RlLmNfY2ZsYWcgfD0gUEFSRU5COworCW1vZGUuY19jZmxhZyB8PSBQQVJPREQ7CisgICAgfQorI2VuZGlmIC8qIF9fT0JTT0xFVEVfXyAqLworCisjaWZkZWYgVEVSTUlPUworI2lmZGVmIE9OTENSCisgICAgbW9kZS5jX29mbGFnIHw9IE9OTENSOworI2VuZGlmCisgICAgbW9kZS5jX2lmbGFnIHw9IElDUk5MOworICAgIG1vZGUuY19sZmxhZyB8PSBFQ0hPOworI2lmZGVmIE9YVEFCUworICAgIG1vZGUuY19vZmxhZyB8PSBPWFRBQlM7CisjZW5kaWYgLyogT1hUQUJTICovCisKKyAgICAvKiB0ZXN0IHVzZWQgdG8gYmUgdGdldGZsYWcoIk5MIikgKi8KKyAgICBpZiAobmV3bGluZSAhPSAoY2hhciAqKSAwICYmIG5ld2xpbmVbMF0gPT0gJ1xuJyAmJiAhbmV3bGluZVsxXSkgeworCS8qIE5ld2xpbmUsIG5vdCBsaW5lZmVlZC4gKi8KKyNpZmRlZiBPTkxDUgorCW1vZGUuY19vZmxhZyAmPSB+T05MQ1I7CisjZW5kaWYKKwltb2RlLmNfaWZsYWcgJj0gfklDUk5MOworICAgIH0KKyNpZmRlZiBfX09CU09MRVRFX18KKyAgICBpZiAodGdldGZsYWcoIkhEIikpCQkvKiBIYWxmIGR1cGxleC4gKi8KKwltb2RlLmNfbGZsYWcgJj0gfkVDSE87CisjZW5kaWYgLyogX19PQlNPTEVURV9fICovCisjaWZkZWYgT1hUQUJTCisgICAgLyogdGVzdCB1c2VkIHRvIGJlIHRnZXRmbGFnKCJwdCIpICovCisgICAgaWYgKGhhc19oYXJkd2FyZV90YWJzKQkvKiBQcmludCB0YWJzLiAqLworCW1vZGUuY19vZmxhZyAmPSB+T1hUQUJTOworI2VuZGlmIC8qIE9YVEFCUyAqLworICAgIG1vZGUuY19sZmxhZyB8PSAoRUNIT0UgfCBFQ0hPSyk7CisjZW5kaWYKK30KKworLyogT3V0cHV0IHN0YXJ0dXAgc3RyaW5nLiAqLworc3RhdGljIHZvaWQKK3NldF9pbml0KHZvaWQpCit7CisgICAgY2hhciAqcDsKKyAgICBib29sIHNldHRsZTsKKworI2lmZGVmIF9fT0JTT0xFVEVfXworICAgIGlmIChwYWRfY2hhciAhPSAoY2hhciAqKSAwKQkvKiBHZXQvc2V0IHBhZCBjaGFyYWN0ZXIuICovCisJUEMgPSBwYWRfY2hhclswXTsKKyNlbmRpZiAvKiBPQlNPTEVURSAqLworCisjaWZkZWYgVEFCMworICAgIGlmIChvbGRtb2RlLmNfb2ZsYWcgJiAoVEFCMyB8IE9OTENSIHwgT0NSTkwgfCBPTkxSRVQpKSB7CisJb2xkbW9kZS5jX29mbGFnICY9IChUQUIzIHwgT05MQ1IgfCBPQ1JOTCB8IE9OTFJFVCk7CisJU0VUX1RUWShTVERFUlJfRklMRU5PLCAmb2xkbW9kZSk7CisgICAgfQorI2VuZGlmCisgICAgc2V0dGxlID0gc2V0X3RhYnMoKTsKKworICAgIGlmIChpc3Jlc2V0KSB7CisJaWYgKChwID0gcmVzZXRfMXN0cmluZykgIT0gMCkgeworCSAgICB0cHV0cyhwLCAwLCBvdXRjKTsKKwkgICAgc2V0dGxlID0gVFJVRTsKKwl9CisJaWYgKChwID0gcmVzZXRfMnN0cmluZykgIT0gMCkgeworCSAgICB0cHV0cyhwLCAwLCBvdXRjKTsKKwkgICAgc2V0dGxlID0gVFJVRTsKKwl9CisJLyogV2hhdCBhYm91dCByZiwgcnMzLCBhcyBwZXIgdGVybWluZm8gbWFuIHBhZ2U/ICovCisJLyogYWxzbyBtaWdodCBiZSBuaWNlIHRvIHNlbmQgcm1hY3MsIHJtdWwsIHJtbSAqLworCWlmICgocCA9IHJlc2V0X2ZpbGUpICE9IDAKKwkgICAgfHwgKHAgPSBpbml0X2ZpbGUpICE9IDApIHsKKwkgICAgY2F0KHApOworCSAgICBzZXR0bGUgPSBUUlVFOworCX0KKyAgICB9CisKKyAgICBpZiAoc2V0dGxlKSB7CisJKHZvaWQpIHB1dGMoJ1xyJywgc3RkZXJyKTsKKwkodm9pZCkgZmZsdXNoKHN0ZGVycik7CisJKHZvaWQpIG5hcG1zKDEwMDApOwkvKiBTZXR0bGUgdGhlIHRlcm1pbmFsLiAqLworICAgIH0KK30KKworLyoKKyAqIFNldCB0aGUgaGFyZHdhcmUgdGFicyBvbiB0aGUgdGVybWluYWwsIHVzaW5nIHRoZSBjdCAoY2xlYXIgYWxsIHRhYnMpLAorICogc3QgKHNldCBvbmUgdGFiKSBhbmQgY2ggKGhvcml6b250YWwgY3Vyc29yIGFkZHJlc3NpbmcpIGNhcGFiaWxpdGllcy4KKyAqIFRoaXMgaXMgZG9uZSBiZWZvcmUgaWYgYW5kIGlzLCBzbyB0aGV5IGNhbiBwYXRjaCBpbiBjYXNlIHdlIGJsb3cgdGhpcy4KKyAqIFJldHVybiBUUlVFIGlmIHdlIHNldCBhbnkgdGFiIHN0b3BzLCBGQUxTRSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29sCitzZXRfdGFicyh2b2lkKQoreworICAgIGlmIChzZXRfdGFiICYmIGNsZWFyX2FsbF90YWJzKSB7CisJaW50IGM7CisKKwkodm9pZCkgcHV0YygnXHInLCBzdGRlcnIpOwkvKiBGb3JjZSB0byBsZWZ0IG1hcmdpbi4gKi8KKwl0cHV0cyhjbGVhcl9hbGxfdGFicywgMCwgb3V0Yyk7CisKKwlmb3IgKGMgPSA4OyBjIDwgdGNvbHVtbnM7IGMgKz0gOCkgeworCSAgICAvKiBHZXQgdG8gdGhlIHJpZ2h0IGNvbHVtbi4gIEluIEJTRCB0c2V0LCB0aGlzCisJICAgICAqIHVzZWQgdG8gdHJ5IGEgYnVuY2ggb2YgaGFsZi1jbGV2ZXIgdGhpbmdzCisJICAgICAqIHdpdGggY3VwIGFuZCBocGEsIGZvciBhbiBhdmVyYWdlIHNhdmluZyBvZgorCSAgICAgKiBzb21ld2hhdCBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlciB0aW1lcyBwZXIKKwkgICAgICogdGFiIHN0b3AsIGxlc3MgdGhhbiAuMDEgc2VjIGF0IDI0MDBjcHMuIFdlCisJICAgICAqIGxvc3QgYWxsIHRoaXMgY3J1ZnQgYmVjYXVzZSBpdCBzZWVtZWQgdG8gYmUKKwkgICAgICogaW50cm9kdWNpbmcgc29tZSBvZGQgYnVncy4KKwkgICAgICogLS0tLS0tLS0tLS0xMjM0NTY3OC0tLS0tLS0tLS0tICovCisJICAgICh2b2lkKSBmcHV0cygiICAgICAgICAiLCBzdGRlcnIpOworCSAgICB0cHV0cyhzZXRfdGFiLCAwLCBvdXRjKTsKKwl9CisJcHV0YygnXHInLCBzdGRlcnIpOworCXJldHVybiAoVFJVRSk7CisgICAgfQorICAgIHJldHVybiAoRkFMU0UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNYWluIHNlcXVlbmNlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGVsbCB0aGUgdXNlciBpZiBhIGNvbnRyb2wga2V5IGhhcyBiZWVuIGNoYW5nZWQgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqLworI2lmZGVmIFRFUk1JT1MKK3N0YXRpYyB2b2lkCityZXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHdoaWNoLCB1bnNpZ25lZCBkZWYpCit7CisgICAgdW5zaWduZWQgb2xkZXIsIG5ld2VyOworICAgIGNoYXIgKnA7CisKKyAgICBuZXdlciA9IG1vZGUuY19jY1t3aGljaF07CisgICAgb2xkZXIgPSBvbGRtb2RlLmNfY2Nbd2hpY2hdOworCisgICAgaWYgKG9sZGVyID09IG5ld2VyICYmIG9sZGVyID09IGRlZikKKwlyZXR1cm47CisKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIlcyAlcyAiLCBuYW1lLCBvbGRlciA9PSBuZXdlciA/ICJpcyIgOiAic2V0IHRvIik7CisKKyAgICBpZiAoRElTQUJMRUQobmV3ZXIpKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInVuZGVmLlxuIik7CisgICAgLyoKKyAgICAgKiBDaGVjayAnZGVsZXRlJyBiZWZvcmUgJ2JhY2tzcGFjZScsIHNpbmNlIHRoZSBrZXlfYmFja3NwYWNlIHZhbHVlCisgICAgICogaXMgYW1iaWd1b3VzLgorICAgICAqLworICAgIGVsc2UgaWYgKG5ld2VyID09IDAxNzcpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZGVsZXRlLlxuIik7CisgICAgZWxzZSBpZiAoKHAgPSBrZXlfYmFja3NwYWNlKSAhPSAwCisJICAgICAmJiBuZXdlciA9PSAodW5zaWduZWQgY2hhcikgcFswXQorCSAgICAgJiYgcFsxXSA9PSAnXDAnKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImJhY2tzcGFjZS5cbiIpOworICAgIGVsc2UgaWYgKG5ld2VyIDwgMDQwKSB7CisJbmV3ZXIgXj0gMDEwMDsKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsICJjb250cm9sLSVjICheJWMpLlxuIiwgVUNoYXIobmV3ZXIpLCBVQ2hhcihuZXdlcikpOworICAgIH0gZWxzZQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVjLlxuIiwgVUNoYXIobmV3ZXIpKTsKK30KKyNlbmRpZgorCisvKgorICogQ29udmVydCB0aGUgb2Jzb2xldGUgYXJndW1lbnQgZm9ybXMgaW50byBzb21ldGhpbmcgdGhhdCBnZXRvcHQgY2FuIGhhbmRsZS4KKyAqIFRoaXMgbWVhbnMgdGhhdCAtZSwgLWkgYW5kIC1rIGdldCBkZWZhdWx0IGFyZ3VtZW50cyBzdXBwbGllZCBmb3IgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK29ic29sZXRlKGNoYXIgKiphcmd2KQoreworICAgIGZvciAoOyAqYXJndjsgKythcmd2KSB7CisJY2hhciAqcGFybSA9IGFyZ3ZbMF07CisKKwlpZiAocGFybVswXSA9PSAnLScgJiYgcGFybVsxXSA9PSAnXDAnKSB7CisJICAgIGFyZ3ZbMF0gPSBzdHJkdXAoIi1xIik7CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmICgocGFybVswXSAhPSAnLScpCisJICAgIHx8IChhcmd2WzFdICYmIGFyZ3ZbMV1bMF0gIT0gJy0nKQorCSAgICB8fCAocGFybVsxXSAhPSAnZScgJiYgcGFybVsxXSAhPSAnaScgJiYgcGFybVsxXSAhPSAnaycpCisJICAgIHx8IChwYXJtWzJdICE9ICdcMCcpKQorCSAgICBjb250aW51ZTsKKwlzd2l0Y2ggKGFyZ3ZbMF1bMV0pIHsKKwljYXNlICdlJzoKKwkgICAgYXJndlswXSA9IHN0cmR1cCgiLWVeSCIpOworCSAgICBicmVhazsKKwljYXNlICdpJzoKKwkgICAgYXJndlswXSA9IHN0cmR1cCgiLWleQyIpOworCSAgICBicmVhazsKKwljYXNlICdrJzoKKwkgICAgYXJndlswXSA9IHN0cmR1cCgiLWteVSIpOworCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGJsW10gPQorICAgIHsKKwkiIgorCSwiT3B0aW9uczoiCisJLCIgIC1jICAgICAgICAgIHNldCBjb250cm9sIGNoYXJhY3RlcnMiCisJLCIgIC1lIGNoICAgICAgIGVyYXNlIGNoYXJhY3RlciIKKwksIiAgLUkgICAgICAgICAgbm8gaW5pdGlhbGl6YXRpb24gc3RyaW5ncyIKKwksIiAgLWkgY2ggICAgICAgaW50ZXJydXB0IGNoYXJhY3RlciIKKwksIiAgLWsgY2ggICAgICAga2lsbCBjaGFyYWN0ZXIiCisJLCIgIC1tIG1hcHBpbmcgIG1hcCBpZGVudGlmaWVyIHRvIHR5cGUiCisJLCIgIC1RICAgICAgICAgIGRvIG5vdCBvdXRwdXQgY29udHJvbCBrZXkgc2V0dGluZ3MiCisJLCIgIC1yICAgICAgICAgIGRpc3BsYXkgdGVybSBvbiBzdGRlcnIiCisJLCIgIC1zICAgICAgICAgIG91dHB1dCBURVJNIHNldCBjb21tYW5kIgorCSwiICAtViAgICAgICAgICBwcmludCBjdXJzZXMtdmVyc2lvbiIKKwksIiAgLXcgICAgICAgICAgc2V0IHdpbmRvdy1zaXplIgorICAgIH07CisgICAgdW5zaWduZWQgbjsKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgW29wdGlvbnNdIFt0ZXJtaW5hbF1cbiIsIF9uY19wcm9nbmFtZSk7CisgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZih0YmwpIC8gc2l6ZW9mKHRibFswXSk7ICsrbikKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbbl0pOworICAgIGV4aXRfZXJyb3IoKTsKKyAgICAvKiBOT1RSRUFDSEVEICovCit9CisKK3N0YXRpYyBjaGFyCithcmdfdG9fY2hhcih2b2lkKQoreworICAgIHJldHVybiAoY2hhcikgKChvcHRhcmdbMF0gPT0gJ14nICYmIG9wdGFyZ1sxXSAhPSAnXDAnKQorCQkgICA/ICgob3B0YXJnWzFdID09ICc/JykgPyAnXDE3NycgOiBDVFJMKG9wdGFyZ1sxXSkpCisJCSAgIDogb3B0YXJnWzBdKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgY2gsIG5vaW5pdCwgbm9zZXQsIHF1aWV0LCBTZmxhZywgc2ZsYWcsIHNob3d0ZXJtOworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgY29uc3QgY2hhciAqdHR5cGU7CisKKyAgICBvYnNvbGV0ZShhcmd2KTsKKyAgICBub2luaXQgPSBub3NldCA9IHF1aWV0ID0gU2ZsYWcgPSBzZmxhZyA9IHNob3d0ZXJtID0gMDsKKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhOmNkOmU6SWk6azptOm5wOnFRU3JzVnciKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnYyc6CQkvKiBzZXQgY29udHJvbC1jaGFycyAqLworCSAgICBvcHRfYyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2EnOgkJLyogT0JTT0xFVEU6IG1hcCBpZGVudGlmaWVyIHRvIHR5cGUgKi8KKwkgICAgYWRkX21hcHBpbmcoImFycGFuZXQiLCBvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICdkJzoJCS8qIE9CU09MRVRFOiBtYXAgaWRlbnRpZmllciB0byB0eXBlICovCisJICAgIGFkZF9tYXBwaW5nKCJkaWFsdXAiLCBvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICdlJzoJCS8qIGVyYXNlIGNoYXJhY3RlciAqLworCSAgICB0ZXJhc2VjaGFyID0gYXJnX3RvX2NoYXIoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnSSc6CQkvKiBubyBpbml0aWFsaXphdGlvbiBzdHJpbmdzICovCisJICAgIG5vaW5pdCA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ2knOgkJLyogaW50ZXJydXB0IGNoYXJhY3RlciAqLworCSAgICBpbnRyY2hhciA9IGFyZ190b19jaGFyKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ2snOgkJLyoga2lsbCBjaGFyYWN0ZXIgKi8KKwkgICAgdGtpbGxjaGFyID0gYXJnX3RvX2NoYXIoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbSc6CQkvKiBtYXAgaWRlbnRpZmllciB0byB0eXBlICovCisJICAgIGFkZF9tYXBwaW5nKDAsIG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ24nOgkJLyogT0JTT0xFVEU6IHNldCBuZXcgdHR5IGRyaXZlciAqLworCSAgICBicmVhazsKKwljYXNlICdwJzoJCS8qIE9CU09MRVRFOiBtYXAgaWRlbnRpZmllciB0byB0eXBlICovCisJICAgIGFkZF9tYXBwaW5nKCJwbHVnYm9hcmQiLCBvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICdRJzoJCS8qIGRvbid0IG91dHB1dCBjb250cm9sIGtleSBzZXR0aW5ncyAqLworCSAgICBxdWlldCA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ3EnOgkJLyogZGlzcGxheSB0ZXJtIG9ubHkgKi8KKwkgICAgbm9zZXQgPSAxOworCSAgICBicmVhazsKKwljYXNlICdyJzoJCS8qIGRpc3BsYXkgdGVybSBvbiBzdGRlcnIgKi8KKwkgICAgc2hvd3Rlcm0gPSAxOworCSAgICBicmVhazsKKwljYXNlICdTJzoJCS8qIE9CU09MRVRFOiBvdXRwdXQgVEVSTSAmIFRFUk1DQVAgKi8KKwkgICAgU2ZsYWcgPSAxOworCSAgICBicmVhazsKKwljYXNlICdzJzoJCS8qIG91dHB1dCBURVJNIHNldCBjb21tYW5kICovCisJICAgIHNmbGFnID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVic6CQkvKiBwcmludCBjdXJzZXMtdmVyc2lvbiAqLworCSAgICBwdXRzKGN1cnNlc192ZXJzaW9uKCkpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworCWNhc2UgJ3cnOgkJLyogc2V0IHdpbmRvdy1zaXplICovCisJICAgIG9wdF93ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnPyc6CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorCisgICAgX25jX3Byb2duYW1lID0gX25jX3Jvb3RuYW1lKCphcmd2KTsKKyAgICBhcmdjIC09IG9wdGluZDsKKyAgICBhcmd2ICs9IG9wdGluZDsKKworICAgIGlmIChhcmdjID4gMSkKKwl1c2FnZSgpOworCisgICAgaWYgKCFvcHRfYyAmJiAhb3B0X3cpCisJb3B0X2MgPSBvcHRfdyA9IFRSVUU7CisKKyAgICBpZiAoR0VUX1RUWShTVERFUlJfRklMRU5PLCAmbW9kZSkgPCAwKQorCWZhaWxlZCgic3RhbmRhcmQgZXJyb3IiKTsKKyAgICBjYW5fcmVzdG9yZSA9IFRSVUU7CisgICAgb3JpZ2luYWwgPSBvbGRtb2RlID0gbW9kZTsKKyNpZmRlZiBURVJNSU9TCisgICAgb3NwZWVkID0gKE5DVVJTRVNfT1NQRUVEKSBjZmdldG9zcGVlZCgmbW9kZSk7CisjZWxzZQorICAgIG9zcGVlZCA9IChOQ1VSU0VTX09TUEVFRCkgbW9kZS5zZ19vc3BlZWQ7CisjZW5kaWYKKworICAgIGlmICghc3RyY21wKF9uY19wcm9nbmFtZSwgUFJPR19SRVNFVCkpIHsKKwlpc3Jlc2V0ID0gVFJVRTsKKwlyZXNldF9tb2RlKCk7CisgICAgfQorCisgICAgdHR5cGUgPSBnZXRfdGVybWNhcF9lbnRyeSgqYXJndik7CisKKyAgICBpZiAoIW5vc2V0KSB7CisJdGNvbHVtbnMgPSBjb2x1bW5zOworCXRsaW5lcyA9IGxpbmVzOworCisjaWYgSEFWRV9TSVpFQ0hBTkdFCisJaWYgKG9wdF93KSB7CisJICAgIFNUUlVDVF9XSU5TSVpFIHdpbjsKKwkgICAgLyogU2V0IHdpbmRvdyBzaXplIGlmIG5vdCBzZXQgYWxyZWFkeSAqLworCSAgICAodm9pZCkgaW9jdGwoU1RERVJSX0ZJTEVOTywgSU9DVExfR0VUX1dJTlNJWkUsICZ3aW4pOworCSAgICBpZiAoV0lOU0laRV9ST1dTKHdpbikgPT0gMCAmJgorCQlXSU5TSVpFX0NPTFMod2luKSA9PSAwICYmCisJCXRsaW5lcyA+IDAgJiYgdGNvbHVtbnMgPiAwKSB7CisJCVdJTlNJWkVfUk9XUyh3aW4pID0gdGxpbmVzOworCQlXSU5TSVpFX0NPTFMod2luKSA9IHRjb2x1bW5zOworCQkodm9pZCkgaW9jdGwoU1RERVJSX0ZJTEVOTywgSU9DVExfU0VUX1dJTlNJWkUsICZ3aW4pOworCSAgICB9CisJfQorI2VuZGlmCisJaWYgKG9wdF9jKSB7CisJICAgIHNldF9jb250cm9sX2NoYXJzKCk7CisJICAgIHNldF9jb252ZXJzaW9ucygpOworCisJICAgIGlmICghbm9pbml0KQorCQlzZXRfaW5pdCgpOworCisJICAgIC8qIFNldCB0aGUgbW9kZXMgaWYgdGhleSd2ZSBjaGFuZ2VkLiAqLworCSAgICBpZiAobWVtY21wKCZtb2RlLCAmb2xkbW9kZSwgc2l6ZW9mKG1vZGUpKSkgeworCQlTRVRfVFRZKFNUREVSUl9GSUxFTk8sICZtb2RlKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIHRlcm1pbmFsIG5hbWUgZnJvbSB0aGUgZW50cnkuICovCisgICAgdHR5cGUgPSBfbmNfZmlyc3RfbmFtZShjdXJfdGVybS0+dHlwZS50ZXJtX25hbWVzKTsKKworICAgIGlmIChub3NldCkKKwkodm9pZCkgcHJpbnRmKCIlc1xuIiwgdHR5cGUpOworICAgIGVsc2UgeworCWlmIChzaG93dGVybSkKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiVGVybWluYWwgdHlwZSBpcyAlcy5cbiIsIHR0eXBlKTsKKwkvKgorCSAqIElmIGVyYXNlLCBraWxsIGFuZCBpbnRlcnJ1cHQgY2hhcmFjdGVycyBjb3VsZCBoYXZlIGJlZW4KKwkgKiBtb2RpZmllZCBhbmQgbm90IC1RLCBkaXNwbGF5IHRoZSBjaGFuZ2VzLgorCSAqLworI2lmZGVmIFRFUk1JT1MKKwlpZiAoIXF1aWV0KSB7CisJICAgIHJlcG9ydCgiRXJhc2UiLCBWRVJBU0UsIENFUkFTRSk7CisJICAgIHJlcG9ydCgiS2lsbCIsIFZLSUxMLCBDS0lMTCk7CisJICAgIHJlcG9ydCgiSW50ZXJydXB0IiwgVklOVFIsIENJTlRSKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoU2ZsYWcpCisJZXJyKCJUaGUgLVMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgdGVybWluZm8uIik7CisKKyAgICBpZiAoc2ZsYWcpIHsKKwlpbnQgbGVuOworCWNoYXIgKnZhcjsKKwljaGFyICpsZWFmOworCS8qCisJICogRmlndXJlIG91dCB3aGF0IHNoZWxsIHdlJ3JlIHVzaW5nLiAgQSBoYWNrLCB3ZSBsb29rIGZvciBhbgorCSAqIGVudmlyb25tZW50YWwgdmFyaWFibGUgU0hFTEwgZW5kaW5nIGluICJjc2giLgorCSAqLworCWlmICgodmFyID0gZ2V0ZW52KCJTSEVMTCIpKSAhPSAwCisJICAgICYmICgobGVuID0gKGludCkgc3RybGVuKGxlYWYgPSBfbmNfYmFzZW5hbWUodmFyKSkpID49IDMpCisJICAgICYmICFzdHJjbXAobGVhZiArIGxlbiAtIDMsICJjc2giKSkKKwkgICAgcCA9ICJzZXQgbm9nbG9iO1xuc2V0ZW52IFRFUk0gJXM7XG51bnNldCBub2dsb2I7XG4iOworCWVsc2UKKwkgICAgcCA9ICJURVJNPSVzO1xuIjsKKwkodm9pZCkgcHJpbnRmKHAsIHR0eXBlKTsKKyAgICB9CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvdGFyLWNvcHkuc2ggYi90YXItY29weS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZGYxYmMxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyLWNvcHkuc2gKQEAgLTAsMCArMSw3NyBAQAorIyEvYmluL3NoCisjICRJZDogdGFyLWNvcHkuc2gsdiAxLjUgMjAwMy8xMC8yNSAxNDo0MDowNyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisjCisjIENvcHkgYSBjb2xsZWN0aW9uIG9mIGZpbGVzIHVzaW5nICd0YXInLCBzbyB0aGF0IHRoZWlyIGRhdGVzIGFuZCBsaW5rcyBhcmUKKyMgcHJlc2VydmVkCisjCisjIFBhcmFtZXRlcnM6CisjCSQxID0gZmlsZXMgdG8gY29weQorIwkkMiA9IHNvdXJjZSBkaXJlY3RvcnkKKyMJJDMgPSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKyMKKyNET0lUPWVjaG8KK0RPSVQ9ZXZhbAorCitpZiB0ZXN0ICQjICE9IDMgOyB0aGVuCisJZWNobyAiVXNhZ2U6ICQwIGZpbGVzIHNvdXJjZSB0YXJnZXQiCisJZXhpdCAxCitlbGlmIHRlc3QgISAtZCAiJDIiIDsgdGhlbgorCWVjaG8gIlNvdXJjZSBkaXJlY3Rvcnkgbm90IGZvdW5kOiAkMiIKKwlleGl0IDEKK2VsaWYgdGVzdCAhIC1kICIkMyIgOyB0aGVuCisJZWNobyAiVGFyZ2V0IGRpcmVjdG9yeSBub3QgZm91bmQ6ICQzIgorCWV4aXQgMQorZmkKKworV0Q9YHB3ZGAKKworVE1QPSRXRC9jb3B5JCQKKworY2QgJDIKK1RFU1Q9YGxzIC1kICQxIDI+L2Rldi9udWxsYAoraWYgdGVzdCAteiAiJFRFU1QiCit0aGVuCisJZWNobyAiLi4uIG5vIG1hdGNoIGZvciBcIiQxXCIgaW4gJDIiCitlbHNlCisJZWNobyAiLi4uIGluc3RhbGxpbmcgZmlsZXMgbWF0Y2hpbmcgXCIkMVwiIGluICQyIgorCXRyYXAgInJtIC1mICRUTVAiIDAgMSAyIDUgMTUKKwlpZiAoIHRhciBjZiAkVE1QICQxICkKKwl0aGVuCisJCWNkICQzCisJCUxJU1Q9YHRhciB0ZiAkVE1QIDI+JjFgCisJCSRET0lUIHJtIC1yZiAkTElTVCAyPi9kZXYvbnVsbAorCQkkRE9JVCB0YXIgeHZmICRUTVAKKwllbHNlCisJCWVjaG8gIkNhbm5vdCBjcmVhdGUgdGFyIG9mICQxIGZpbGVzIgorCQlleGl0IDEKKwlmaQorZmkKZGlmZiAtLWdpdCBhL3Rlc3QvTWFrZWZpbGUuaW4gYi90ZXN0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTVlZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTE3IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjEwMiAyMDA4LzA5LzA3IDEzOjU4OjI5IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbgorIworIyBNYWtlZmlsZSBmb3IgbmN1cnNlcyB0ZXN0cy4KKworIyB0dXJuIG9mZiBfYWxsXyBzdWZmaXggcnVsZXM7IHdlJ2xsIGdlbmVyYXRlIG91ciBvd24KKy5TVUZGSVhFUzoKKworU0hFTEwJCT0gL2Jpbi9zaAorCitAU0VUX01BS0VACisKK2Rlc3RkaXIJCT0KK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IC4uL0BERlRfT0JKX1NVQkRJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorCitMSUJUT09MCQk9IEBMSUJUT09MQAorTElCVE9PTF9DTEVBTgk9IEBMSUJfQ0xFQU5ACitMSUJUT09MX0NPTVBJTEUJPSBATElCX0NPTVBJTEVACitMSUJUT09MX0xJTksJPSBATElCX0xJTktACisKK0NDCQk9IEBDQ0AKK0NQUAkJPSBAQ1BQQAorCitDRkxBR1MJCT0gQENGTEFHU0AgQEVYVFJBX0NGTEFHU0AKK0NQUEZMQUdTCT0gIC1JLi4vdGVzdCAtSSQoc3JjZGlyKSAtREhBVkVfQ09ORklHX0ggQENQUEZMQUdTQAorCitDQ0ZMQUdTCQk9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorCitDRkxBR1NfTElCVE9PTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworUkVMX1ZFUlNJT04JPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKK0xPQ0FMX0xJQkRJUgk9IEB0b3BfYnVpbGRkaXJAL2xpYgorTE9DQUxfTElCUwk9IEBURVNUX0RFUFNACitNQVRIX0xJQgk9IEBNQVRIX0xJQkAKK1RFU1RfTElCUwk9IEBURVNUX0xJQlNACisKK0xECQk9IEBMREAKK0xJTksJCT0gQExJTktfVEVTVFNAICQoTElCVE9PTF9MSU5LKSAkKENGTEFHUykKKworTERGTEFHUwkJPSBATERfTU9ERUxAIEBMT0NBTF9MREZMQUdTQCBATERGTEFHU0AKKworTERGTEFHU19MSUJUT09MCT0gJChMREZMQUdTKSAkKENGTEFHU19MSUJUT09MKQorTERGTEFHU19OT1JNQUwJPSAkKExERkxBR1MpICQoQ0ZMQUdTX05PUk1BTCkKK0xERkxBR1NfREVCVUcJPSAkKExERkxBR1MpICQoQ0ZMQUdTX0RFQlVHKQorTERGTEFHU19QUk9GSUxFCT0gJChMREZMQUdTKSAkKENGTEFHU19QUk9GSUxFKQorTERGTEFHU19TSEFSRUQJPSAkKExERkxBR1MpICQoQ0ZMQUdTX1NIQVJFRCkgQExEX1NIQVJFRF9PUFRTQAorCitURVNUX0FSR1MJPSBATERGTEFHU19TVEFUSUNAIEBURVNUX0FSR1NAIEBMREZMQUdTX1NIQVJFREAgCisKKyMgdXNlIHRoZXNlIGZvciBsaW5raW5nIHdpdGggYWxsIG9mIHRoZSBsaWJyYXJpZXMKK0xJQlNfREVGQVVMVAk9ICQoVEVTVF9BUkdTKSBATElCU0AgJChURVNUX0xJQlMpICQoTUFUSF9MSUIpCitMREZMQUdTX0RFRkFVTFQJPSAkKExERkxBR1NfQERGVF9VUFJfTU9ERUxAKSAkKExJQlNfREVGQVVMVCkKKworIyB1c2UgdGhlc2UgZm9yIGxpbmtpbmcgd2l0aCB0aGUgKG4pY3Vyc2VzIGxpYnJhcnkgYW5kIHBvc3NpYmx5IHB0aHJlYWRzCitMSUJTX1RIUkVBRFMJPSBgZWNobyAiJChURVNUX0FSR1MpIEBMSUJTQCIgfCBzZWQgLWUgJ3MvLWxmb3JtLiotbHBhbmVsW14gXSovLydgICQoVEVTVF9MSUJTKSAkKE1BVEhfTElCKSBAUFRIUkVBREAKK0xERkxBR1NfVEhSRUFEUwk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApICQoTElCU19USFJFQURTKQorCisjIHVzZSB0aGVzZSBmb3IgbGlua2luZyB3aXRoIHRoZSAobiljdXJzZXMgbGlicmFyeQorTElCU19DVVJTRVMJPSBgZWNobyAiJChURVNUX0FSR1MpIEBMSUJTQCIgfCBzZWQgLWUgJ3MvLWxmb3JtLiotbHBhbmVsW14gXSovLydgICQoVEVTVF9MSUJTKSAkKE1BVEhfTElCKQorTERGTEFHU19DVVJTRVMJPSAkKExERkxBR1NfQERGVF9VUFJfTU9ERUxAKSAkKExJQlNfQ1VSU0VTKQorCisjIHVzZSB0aGVzZSBmb3IgbGlua2luZyB3aXRoIHRoZSB0aW5mbyBsaWJyYXJ5IGlmIHdlIGhhdmUgaXQsIG9yIGN1cnNlcyBsaWJyYXJ5IGlmIG5vdAorTElCU19USU5GTwk9IEBMREZMQUdTX1NUQVRJQ0AgQFRJTkZPX0FSR1NAIEBMREZMQUdTX1NIQVJFREAgQExJQlNAICQoVEVTVF9MSUJTKSAkKE1BVEhfTElCKQorTERGTEFHU19USU5GTwk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApICQoTElCU19USU5GTykKKworTElOVAkJPSBATElOVEAKK0xJTlRfT1BUUwk9IEBMSU5UX09QVFNACitMSU5UX0xJQlMJPSAtbGZvcm0gLWxtZW51IC1scGFuZWwgLWxuY3Vyc2VzIEBMSUJTQAorCitIRUFERVJfREVQUwk9IFwKKwkuLi9pbmNsdWRlL2N1cnNlcy5oIFwKKwkuLi9pbmNsdWRlL3Rlcm0uaAorCisjIFRoZSByZXN0IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSAicHJvZ3JhbXMiIGFuZCAibW9kdWxlcyIgZmlsZXMuLi4KZGlmZiAtLWdpdCBhL3Rlc3QvUkVBRE1FIGIvdGVzdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxYzhiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvUkVBRE1FCkBAIC0wLDAgKzEsNjc5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQURNRSx2IDEuMzggMjAwOC8xMC8xOCAyMTowMjo0NSB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHByb2dyYW1zIGluIHRoaXMgZGlyZWN0b3J5IGFyZSBkZXNpZ25lZCB0byB0ZXN0IHlvdXIgbmV3ZXN0IHRveSA6LSkKK0NoZWNrIHRoZSBzb3VyY2VzIGZvciBhbnkgZnVydGhlciBkZXRhaWxzLgorCitibHVlICAgICAgIC0gQmx1ZSBNb29uLCBhIG5pZnR5IHNvbGl0YWlyZSAodXNlcyBjb2xvcikKK2JzLmMgICAgICAgLSB0aGUgZ2FtZSBvZiBCYXR0bGVzaGlwcyAodXNlcyBjb2xvcikKK2ZpcmV3b3JrLmMgLSBtdWx0aS1jb2xvcmVkIGZpcmV3b3JrcyAodXNlcyBjb2xvcikKK2dkYy5jICAgICAgLSBHcmVhdCBEaWdpdGFsIENsb2NrICh1c2VzIGNvbG9yKQoraGFub2kuYyAgICAtIHRoZSBnYW1lIG9mIGhhbm9pICh1c2VzIGNvbG9yIGVzc2VudGlhbGx5KQora25pZ2h0LmMgICAtIHRoZSBnYW1lIG9mIEtuaWdodCdzIFRvdXIgKHVzZXMgY29sb3IpCitscnRlc3QuYyAgIC0gdGVzdCBvZiBhY2Nlc3MgdG8gdGhlIGxvd2VyLXJpZ2h0IGNvcm5lcgorbmN1cnNlcy5jICAtIG11bHRpLXRlc3QgcHJvZ3JhbSAodXNlcyBjb2xvcikKK25ld2RlbW8uYyAgLSBhbm90aGVyIHRlc3QgZnJvbSBQREN1cnNlcyAodXNlcyBjb2xvcikKK3JhaW4uYyAgICAgLSByYWluIGRyb3BzIGtlZXAgZmFsbGluZyBvbiBteSBoZWFkLi4uCit0Y2xvY2suYyAgIC0gYW5hbG9nL2RpZ2l0YWwgY2xvY2sKK3Rlc3RjdXJzLmMgLSBhIHRlc3QgZnJvbSB0aGUgUERDdXJzZXMgcGVvcGxlICh1c2VzIGNvbG9yKQord29ybS5jICAgICAtIHdvcm1zIHJ1biBhbGwgb3ZlciB5b3VyIHNjcmVlbiAodXNlcyBjb2xvcikKK3htYXMuYyAgICAgLSBYbWFzIGdyZWV0aW5nIGNhcmQKKworVGhlIGJzIGFuZCBrbmlnaHQgZ2FtZXMgZGVtb25zdHJhdGUgcHJvY2Vzc2luZyBvZiBtb3VzZSBldmVudHMgdW5kZXIgeHRlcm0uCitUaGlzIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zOgorCit0cmFjZW11bmNoIC0gUGVybCBzY3JpcHQgdG8gY3J1bmNoIHRyYWNlIHNjcmlwdHMgdG8gbWFrZSB0aGVtIGVhc2llciB0byByZWFkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgcHJvZ3JhbXMgcHJvdmlkZSBleGFtcGxlcyBvZiB1c2UsIGJ1dCBkbyBub3QgY29tcHJpc2UgYSBjb21wbGV0ZSBzZXQgb2YKK3Rlc3RzLiAgSGVyZSBpcyBhIGxpc3Qgb2YgbGlicmFyeSBleHRlcm5hbHMsIG5vdGluZyB0aG9zZSB0aGF0IGFyZSB1c2VkOgorCitsaWJmb3JtOgorLS0tLS0tLQorVFlQRV9BTE5VTQkJCXRlc3Q6IGRlbW9fZm9ybXMKK1RZUEVfQUxQSEEJCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMKK1RZUEVfRU5VTQkJCXRlc3Q6IGRlbW9fZm9ybXMKK1RZUEVfSU5URUdFUgkJCXRlc3Q6IGRlbW9fZm9ybXMKK1RZUEVfSVBWNAkJCXRlc3Q6IGRlbW9fZm9ybXMKK1RZUEVfTlVNRVJJQwkJCXRlc3Q6IGRlbW9fZm9ybXMKK1RZUEVfUkVHRVhQCQkJdGVzdDogZGVtb19mb3JtcworY3VycmVudF9maWVsZAkJCXRlc3Q6IGRlbW9fZm9ybXMgZWRpdF9maWVsZCBuY3Vyc2VzCitkYXRhX2FoZWFkCQkJdGVzdDogZGVtb19mb3JtcworZGF0YV9iZWhpbmQJCQl0ZXN0OiBkZW1vX2Zvcm1zCitkdXBfZmllbGQJCQktCitkeW5hbWljX2ZpZWxkX2luZm8JCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX2FyZwkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX2JhY2sJCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF9idWZmZXIJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIGVkaXRfZmllbGQgbmN1cnNlcworZmllbGRfY291bnQJCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF9mb3JlCQkJdGVzdDogZGVtb19mb3JtcworZmllbGRfaW5kZXgJCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF9pbmZvCQkJdGVzdDogbmN1cnNlcworZmllbGRfaW5pdAkJCS0KK2ZpZWxkX2p1c3QJCQktCitmaWVsZF9vcHRzCQkJdGVzdDogZGVtb19mb3JtcyBuY3Vyc2VzCitmaWVsZF9vcHRzX29mZgkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMKK2ZpZWxkX29wdHNfb24JCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF9wYWQJCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF9zdGF0dXMJCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF90ZXJtCQkJLQorZmllbGRfdHlwZQkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX3VzZXJwdHIJCQl0ZXN0OiBlZGl0X2ZpZWxkIG5jdXJzZXMKK2Zvcm1fZHJpdmVyCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBlZGl0X2ZpZWxkIG5jdXJzZXMKK2Zvcm1fZmllbGRzCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcworZm9ybV9pbml0CQkJLQorZm9ybV9vcHRzCQkJLQorZm9ybV9vcHRzX29mZgkJCS0KK2Zvcm1fb3B0c19vbgkJCS0KK2Zvcm1fcGFnZQkJCXRlc3Q6IGRlbW9fZm9ybXMKK2Zvcm1fcmVxdWVzdF9ieV9uYW1lCQktCitmb3JtX3JlcXVlc3RfbmFtZQkJdGVzdDogZWRpdF9maWVsZAorZm9ybV9zdWIJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK2Zvcm1fdGVybQkJCS0KK2Zvcm1fdXNlcnB0cgkJCS0KK2Zvcm1fd2luCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBlZGl0X2ZpZWxkIG5jdXJzZXMKK2ZyZWVfZmllbGQJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK2ZyZWVfZmllbGR0eXBlCQkJdGVzdDogbmN1cnNlcworZnJlZV9mb3JtCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBuY3Vyc2VzCitsaW5rX2ZpZWxkCQkJLQorbGlua19maWVsZHR5cGUJCQktCittb3ZlX2ZpZWxkCQkJLQorbmV3X2ZpZWxkCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBuY3Vyc2VzCituZXdfZmllbGR0eXBlCQkJdGVzdDogbmN1cnNlcworbmV3X2Zvcm0JCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK25ld19wYWdlCQkJdGVzdDogZGVtb19mb3JtcworcG9zX2Zvcm1fY3Vyc29yCQkJLQorcG9zdF9mb3JtCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBuY3Vyc2VzCitzY2FsZV9mb3JtCQkJdGVzdDogZGVtb19mb3JtcyBuY3Vyc2VzCitzZXRfY3VycmVudF9maWVsZAkJdGVzdDogZGVtb19mb3Jtcworc2V0X2ZpZWxkX2JhY2sJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIGVkaXRfZmllbGQgbmN1cnNlcworc2V0X2ZpZWxkX2J1ZmZlcgkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBlZGl0X2ZpZWxkIG5jdXJzZXMKK3NldF9maWVsZF9mb3JlCQkJdGVzdDogZGVtb19mb3Jtcworc2V0X2ZpZWxkX2luaXQJCQktCitzZXRfZmllbGRfanVzdAkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMKK3NldF9maWVsZF9vcHRzCQkJdGVzdDogZGVtb19mb3JtcyBuY3Vyc2VzCitzZXRfZmllbGRfcGFkCQkJdGVzdDogZGVtb19mb3Jtcworc2V0X2ZpZWxkX3N0YXR1cwkJdGVzdDogZGVtb19mb3Jtcworc2V0X2ZpZWxkX3Rlcm0JCQktCitzZXRfZmllbGRfdHlwZQkJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcworc2V0X2ZpZWxkX3VzZXJwdHIJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcworc2V0X2ZpZWxkdHlwZV9hcmcJCS0KK3NldF9maWVsZHR5cGVfY2hvaWNlCQktCitzZXRfZm9ybV9maWVsZHMJCQktCitzZXRfZm9ybV9pbml0CQkJLQorc2V0X2Zvcm1fb3B0cwkJCS0KK3NldF9mb3JtX3BhZ2UJCQktCitzZXRfZm9ybV9zdWIJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK3NldF9mb3JtX3Rlcm0JCQktCitzZXRfZm9ybV91c2VycHRyCQktCitzZXRfZm9ybV93aW4JCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK3NldF9tYXhfZmllbGQJCQl0ZXN0OiBkZW1vX2Zvcm1zCitzZXRfbmV3X3BhZ2UJCQl0ZXN0OiBkZW1vX2Zvcm1zCit1bnBvc3RfZm9ybQkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcworCitsaWJtZW51OgorLS0tLS0tLQorY3VycmVudF9pdGVtCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitmcmVlX2l0ZW0JCQl0ZXN0OiBuY3Vyc2VzCitmcmVlX21lbnUJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK2l0ZW1fY291bnQJCQl0ZXN0OiBkZW1vX21lbnVzCitpdGVtX2Rlc2NyaXB0aW9uCQktCitpdGVtX2luZGV4CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitpdGVtX2luaXQJCQktCitpdGVtX25hbWUJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK2l0ZW1fb3B0cwkJCS0KK2l0ZW1fb3B0c19vZmYJCQktCitpdGVtX29wdHNfb24JCQktCitpdGVtX3Rlcm0JCQktCitpdGVtX3VzZXJwdHIJCQktCitpdGVtX3ZhbHVlCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitpdGVtX3Zpc2libGUJCQktCittZW51X2JhY2sJCQktCittZW51X2RyaXZlcgkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworbWVudV9mb3JlCQkJLQorbWVudV9mb3JtYXQJCQktCittZW51X2dyZXkJCQktCittZW51X2luaXQJCQktCittZW51X2l0ZW1zCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCittZW51X21hcmsJCQl0ZXN0OiBkZW1vX21lbnVzCittZW51X29wdHMJCQktCittZW51X29wdHNfb2ZmCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCittZW51X29wdHNfb24JCQl0ZXN0OiBkZW1vX21lbnVzCittZW51X3BhZAkJCS0KK21lbnVfcGF0dGVybgkJCXRlc3Q6IGRlbW9fbWVudXMKK21lbnVfcmVxdWVzdF9ieV9uYW1lCQktCittZW51X3JlcXVlc3RfbmFtZQkJLQorbWVudV9zcGFjaW5nCQkJdGVzdDogZGVtb19tZW51cworbWVudV9zdWIJCQl0ZXN0OiBkZW1vX21lbnVzCittZW51X3Rlcm0JCQktCittZW51X3VzZXJwdHIJCQktCittZW51X3dpbgkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworbmV3X2l0ZW0JCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK25ld19tZW51CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitwb3NfbWVudV9jdXJzb3IJCQlsaWI6IG1lbnUKK3Bvc3RfbWVudQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworc2NhbGVfbWVudQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworc2V0X2N1cnJlbnRfaXRlbQkJLQorc2V0X2l0ZW1faW5pdAkJCS0KK3NldF9pdGVtX29wdHMJCQktCitzZXRfaXRlbV90ZXJtCQkJLQorc2V0X2l0ZW1fdXNlcnB0cgkJLQorc2V0X2l0ZW1fdmFsdWUJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK3NldF9tZW51X2JhY2sJCQl0ZXN0OiBkZW1vX21lbnVzCitzZXRfbWVudV9mb3JlCQkJdGVzdDogZGVtb19tZW51cworc2V0X21lbnVfZm9ybWF0CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitzZXRfbWVudV9ncmV5CQkJLQorc2V0X21lbnVfaW5pdAkJCS0KK3NldF9tZW51X2l0ZW1zCQkJLQorc2V0X21lbnVfbWFyawkJCXRlc3Q6IGRlbW9fbWVudXMKK3NldF9tZW51X29wdHMJCQktCitzZXRfbWVudV9wYWQJCQktCitzZXRfbWVudV9wYXR0ZXJuCQktCitzZXRfbWVudV9zcGFjaW5nCQktCitzZXRfbWVudV9zdWIJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK3NldF9tZW51X3Rlcm0JCQktCitzZXRfbWVudV91c2VycHRyCQktCitzZXRfbWVudV93aW4JCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK3NldF90b3Bfcm93CQkJLQordG9wX3JvdwkJCQktCit1bnBvc3RfbWVudQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworCitsaWJuY3Vyc2VzOgorLS0tLS0tLS0tLQorQkMJCQkJLQorQ09MT1JTCQkJCXRlc3Q6IGVjaG9jaGFyIG5jdXJzZXMgc2F2ZXNjcmVlbiB4bWFzCitDT0xPUl9QQUlSCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNhcmRmaWxlIGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlY2hvY2hhciBmaWx0ZXIgZmlyZXdvcmsgZ2RjIGhhbm9pIGluc193aWRlIGluc2VydHMga25pZ2h0IG5jdXJzZXMgbmV3ZGVtbyByYWluIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RhZGRjaCB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcworQ09MT1JfUEFJUlMJCQl0ZXN0OiBlY2hvY2hhciBuY3Vyc2VzIG5ld2RlbW8gc2F2ZXNjcmVlbgorQ09MUwkJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19mb3JtcyBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZGl0dG8gZWNob2NoYXIgZWRpdF9maWVsZCBmaXJld29yayBmb2xka2V5cyBoYXNodGVzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmFpbiBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdmlldyB3b3JtCitFU0NERUxBWQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitMSU5FUwkJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZGl0dG8gZWNob2NoYXIgZWRpdF9maWVsZCBmaXJld29yayBoYW5vaSBoYXNodGVzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmFpbiBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdmlldyB3b3JtIHhtYXMKK1BBSVJfTlVNQkVSCQkJdGVzdDogbmN1cnNlcworUEMJCQkJbGliOiBuY3Vyc2VzCitTUAkJCQlsaWI6IG5jdXJzZXMKK1RBQlNJWkUJCQkJdGVzdDogdGVzdF9vcGFxdWUKK1VQCQkJCS0KK2Fjc19tYXAJCQkJdGVzdDogZ2RjIGluc193aWRlIGluc2VydHMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHRlc3RjdXJzCithZGRfd2NoCQkJCXRlc3Q6IGRlbW9fcGFuZWxzIG5jdXJzZXMKK2FkZF93Y2huc3RyCQkJLQorYWRkX3djaHN0cgkJCXRlc3Q6IHZpZXcKK2FkZGNoCQkJCXRlc3Q6IGJsdWUgYnMgZWNob2NoYXIgaGFzaHRlc3QgbmN1cnNlcyBzYXZlc2NyZWVuIHRlc3Rfb3BhcXVlIHRlc3RhZGRjaCB2aWV3IHdvcm0KK2FkZGNobnN0cgkJCS0KK2FkZGNoc3RyCQkJLQorYWRkbnN0cgkJCQktCithZGRud3N0cgkJCXRlc3Q6IG5jdXJzZXMKK2FkZHN0cgkJCQl0ZXN0OiBibHVlIGJzIGNhcmRmaWxlIGdkYyBoYW5vaSBscnRlc3QgbmN1cnNlcyBzYXZlc2NyZWVuCithZGR3c3RyCQkJCXRlc3Q6IG5jdXJzZXMKK2Fzc3VtZV9kZWZhdWx0X2NvbG9ycwkJdGVzdDogbmN1cnNlcworYXR0cl9nZXQJCQl0ZXN0OiBuY3Vyc2VzCithdHRyX29mZgkJCXRlc3Q6IG5jdXJzZXMKK2F0dHJfb24JCQkJdGVzdDogbmN1cnNlcworYXR0cl9zZXQJCQl0ZXN0OiBuY3Vyc2VzCithdHRyb2ZmCQkJCXRlc3Q6IGVjaG9jaGFyIGZpbHRlciBnZGMgbmN1cnNlcyB0Y2xvY2sKK2F0dHJvbgkJCQl0ZXN0OiBicyBlY2hvY2hhciBmaWx0ZXIgZ2RjIG5jdXJzZXMKK2F0dHJzZXQJCQkJdGVzdDogYnMgZmlyZXdvcmsgZ2RjIGhhbm9pIG5jdXJzZXMgcmFpbiB0Y2xvY2sgdGVzdGFkZGNoIHRlc3RjdXJzCitiYXVkcmF0ZQkJCWxpYjogbmN1cnNlcworYmVlcAkJCQl0ZXN0OiBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlZGl0X2ZpZWxkIGhhbm9pIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBtb3Zld2luZG93IG5jdXJzZXMgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzIHZpZXcgeG1hcworYmtnZAkJCQl0ZXN0OiBiYWNrZ3JvdW5kIGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcyBzYXZlc2NyZWVuIHRjbG9jayB2aWV3Citia2dkc2V0CQkJCXRlc3Q6IGJhY2tncm91bmQgbmN1cnNlcyB0ZXN0YWRkY2gKK2JrZ3JuZAkJCQl0ZXN0OiBuY3Vyc2VzCitia2dybmRzZXQJCQl0ZXN0OiBuY3Vyc2VzCitib29sY29kZXMJCQl0ZXN0OiB0ZXN0X2FycmF5cyBwcm9nczogZHVtcF9lbnRyeQorYm9vbGZuYW1lcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5Citib29sbmFtZXMJCQl0ZXN0OiB0ZXN0X2FycmF5cyBwcm9nczogZHVtcF9lbnRyeSBpbmZvY21wCitib3JkZXIJCQkJLQorYm9yZGVyX3NldAkJCS0KK2JveAkJCQl0ZXN0OiBjYXJkZmlsZSBjaGdhdCBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZGl0dG8gZWRpdF9maWVsZCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBscnRlc3QgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMKK2JveF9zZXQJCQkJdGVzdDogbmN1cnNlcworY2FuX2NoYW5nZV9jb2xvcgkJdGVzdDogbmN1cnNlcworY2JyZWFrCQkJCXRlc3Q6IGJhY2tncm91bmQgYmx1ZSBicyBjYXJkZmlsZSBjaGdhdCBjb2xvcl9zZXQgZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGZpbHRlciBmaXJld29yayBmb2xka2V5cyBnZGMgaGFub2kgaGFzaHRlc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdmlldyB3b3JtIHhtYXMKK2NoZ2F0CQkJCXRlc3Q6IGNoZ2F0CitjbGVhcgkJCQl0ZXN0OiBibHVlIGJzIGdkYyBuY3Vyc2VzIHRlc3RjdXJzIHhtYXMKK2NsZWFyb2sJCQkJdGVzdDogYnMga25pZ2h0CitjbHJ0b2JvdAkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworY2xydG9lb2wJCQl0ZXN0OiBibHVlIGJzIGRlbW9fYWx0a2V5cyBkZW1vX21lbnVzIGZvbGRrZXlzIGhhbm9pIGhhc2h0ZXN0IG1vdmV3aW5kb3cgbmN1cnNlcyB2aWV3Citjb2xvcl9jb250ZW50CQkJdGVzdDogbmN1cnNlcworY29sb3Jfc2V0CQkJdGVzdDogY29sb3Jfc2V0IG5jdXJzZXMKK2NvcHl3aW4JCQkJdGVzdDogbmN1cnNlcyB0ZXN0Y3VycworY3VyX3Rlcm0JCQl0ZXN0OiBkb3RzIGRvdHNfbXZjdXIgbHJ0ZXN0IHByb2dzOiBjbGVhciB0cHV0IHRzZXQKK2N1cnNfc2V0CQkJdGVzdDogZWNob2NoYXIgZmlyZXdvcmsgZ2RjIGhhbm9pIGxydGVzdCBuY3Vyc2VzIG5ld2RlbW8gcmFpbiBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0Y3VycyB3b3JtIHhtYXMKK2N1cnNjcgkJCQl0ZXN0OiBkZW1vX3BhbmVscyBlZGl0X2ZpZWxkIGtuaWdodCBscnRlc3QgbmN1cnNlcyBzYXZlc2NyZWVuIHRjbG9jayB2aWV3CitjdXJzZXNfdmVyc2lvbgkJCXRlc3Q6IG5jdXJzZXMgcHJvZ3M6IGluZm9jbXAgdGljIHRvZSB0cHV0IHRzZXQKK2RlZl9wcm9nX21vZGUJCQl0ZXN0OiBicyBuY3Vyc2VzCitkZWZfc2hlbGxfbW9kZQkJCWxpYjogbmN1cnNlcworZGVmaW5lX2tleQkJCXRlc3Q6IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBmb2xka2V5cworZGVsX2N1cnRlcm0JCQlsaWI6IG5jdXJzZXMKK2RlbGF5X291dHB1dAkJCXRlc3Q6IG5ld2RlbW8KK2RlbGNoCQkJCS0KK2RlbGV0ZWxuCQkJLQorZGVsc2NyZWVuCQkJdGVzdDogZGl0dG8gZG90c19tdmN1cgorZGVsd2luCQkJCXRlc3Q6IGNhcmRmaWxlIGNoZ2F0IGRlbW9fZm9ybXMgZGVtb19wYW5lbHMgZWRpdF9maWVsZCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByZWRyYXcgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzCitkZXJ3aW4JCQkJdGVzdDogY2FyZGZpbGUgY2hnYXQgZGVtb19mb3JtcyBkZW1vX21lbnVzIGRpdHRvIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIG1vdmV3aW5kb3cgbmN1cnNlcyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUKK2RvdXBkYXRlCQkJdGVzdDogY2FyZGZpbGUgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBlZGl0X2ZpZWxkIGluc193aWRlIGluc2VydHMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcyByZWRyYXcgc2F2ZXNjcmVlbiB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyCitkdXB3aW4JCQkJdGVzdDogZWRpdF9maWVsZAorZWNobwkJCQl0ZXN0OiBicyBoYW5vaSBuY3Vyc2VzIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdGN1cnMgdGVzdHNjYW53CitlY2hvX3djaGFyCQkJdGVzdDogbmN1cnNlcworZWNob2NoYXIJCQl0ZXN0OiBlY2hvY2hhciBuY3Vyc2VzCitlbmR3aW4JCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19mb3JtcyBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZGl0dG8gZG90c19tdmN1ciBlY2hvY2hhciBmaWx0ZXIgZmlyZXdvcmsgZmlyc3RsYXN0IGZvbGRrZXlzIGdkYyBoYW5vaSBoYXNodGVzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrZXlfbmFtZXMga2V5bmFtZXMga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByYWluIHJlZHJhdyBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGFkZGNoIHRlc3RjdXJzIHRlc3RzY2FudyB2aWV3IHdvcm0geG1hcworZXJhc2UJCQkJdGVzdDogY2FyZGZpbGUgZGVtb19tZW51cyBmaWx0ZXIgZmlyZXdvcmsgZmlyc3RsYXN0IGhhbm9pIGxydGVzdCBuY3Vyc2VzIHRjbG9jayB0ZXN0X29wYXF1ZSB0ZXN0Y3VycworZXJhc2VjaGFyCQkJbGliOiBuY3Vyc2VzCitlcmFzZXdjaGFyCQkJLQorZmlsdGVyCQkJCXRlc3Q6IGZpbHRlcgorZmxhc2gJCQkJdGVzdDogY2FyZGZpbGUgbHJ0ZXN0IG5jdXJzZXMgdGNsb2NrIHRlc3RjdXJzCitmbHVzaGlucAkJCXRlc3Q6IG5jdXJzZXMgbmV3ZGVtbyB0ZXN0Y3VycworZ2V0X3djaAkJCQktCitnZXRfd3N0cgkJCXRlc3Q6IHRlc3RfZ2V0X3dzdHIKK2dldGF0dHJzCQkJLQorZ2V0YmVneAkJCQl0ZXN0OiBjaGdhdCBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0Y3VycworZ2V0YmVneQkJCQl0ZXN0OiBjaGdhdCBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0Y3VycworZ2V0YmtnZAkJCQl0ZXN0OiBuY3Vyc2VzCitnZXRia2dybmQJCQl0ZXN0OiBuY3Vyc2VzCitnZXRjY2hhcgkJCXRlc3Q6IG5jdXJzZXMgdmlldworZ2V0Y2gJCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2FsdGtleXMgZmlsdGVyIGZpcmV3b3JrIGZpcnN0bGFzdCBmb2xka2V5cyBoYW5vaSBoYXNodGVzdCBscnRlc3Qgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdF9vcGFxdWUgdGVzdGFkZGNoIHRlc3RjdXJzIHZpZXcgeG1hcworZ2V0Y3VyeAkJCQl0ZXN0OiBicyBjaGdhdCBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19wYW5lbHMgZm9sZGtleXMgbW92ZXdpbmRvdyBuY3Vyc2VzIHJlZHJhdyBzYXZlc2NyZWVuIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMKK2dldGN1cnkJCQkJdGVzdDogYnMgY2hnYXQgZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGRlbW9fcGFuZWxzIGVkaXRfZmllbGQgZm9sZGtleXMgbW92ZXdpbmRvdyBuY3Vyc2VzIHJlZHJhdyBzYXZlc2NyZWVuIHRlc3Rfb3BhcXVlIHRlc3RjdXJzCitnZXRtYXh4CQkJCXRlc3Q6IGNoZ2F0IGRlbW9fcGFuZWxzIGluY2hfd2lkZSBpbmNocyBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByZWRyYXcgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzCitnZXRtYXh5CQkJCXRlc3Q6IGNoZ2F0IGRlbW9fZm9ybXMgZGVtb19wYW5lbHMgaW5jaF93aWRlIGluY2hzIG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMKK2dldG1vdXNlCQkJdGVzdDogYnMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcworZ2V0bl93c3RyCQkJdGVzdDogdGVzdF9nZXRfd3N0cgorZ2V0bnN0cgkJCQl0ZXN0OiBmaWx0ZXIgbmN1cnNlcyB0ZXN0X2dldHN0cgorZ2V0cGFyeAkJCQl0ZXN0OiBtb3Zld2luZG93CitnZXRwYXJ5CQkJCXRlc3Q6IG1vdmV3aW5kb3cKK2dldHN0cgkJCQl0ZXN0OiB0ZXN0X2dldHN0cgorZ2V0d2luCQkJCXRlc3Q6IG5jdXJzZXMKK2hhbGZkZWxheQkJCXRlc3Q6IHZpZXcKK2hhc19jb2xvcnMJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJzIGNhcmRmaWxlIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZWNob2NoYXIgZmlsdGVyIGZpcmV3b3JrIGdkYyBoYW5vaSBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBuY3Vyc2VzIG5ld2RlbW8gcmFpbiBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcworaGFzX2ljCQkJCXRlc3Q6IGxydGVzdAoraGFzX2lsCQkJCWxpYjogbmN1cnNlcworaGFzX2tleQkJCQlsaWI6IG5jdXJzZXMKK2hsaW5lCQkJCXRlc3Q6IGdkYyBuY3Vyc2VzCitobGluZV9zZXQJCQktCitpZGNvawkJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraWRsb2sJCQkJdGVzdDogbmN1cnNlcyB0ZXN0X29wYXF1ZSB0ZXN0c2NhbncgdmlldworaW1tZWRvawkJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraW5fd2NoCQkJCXRlc3Q6IGluY2hfd2lkZQoraW5fd2NobnN0cgkJCXRlc3Q6IGluY2hfd2lkZQoraW5fd2Noc3RyCQkJdGVzdDogaW5jaF93aWRlCitpbmNoCQkJCXRlc3Q6IGluY2hzCitpbmNobnN0cgkJCXRlc3Q6IGluY2hzCitpbmNoc3RyCQkJCXRlc3Q6IGluY2hzCitpbml0X2NvbG9yCQkJdGVzdDogbmN1cnNlcworaW5pdF9wYWlyCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZWNob2NoYXIgZmlsdGVyIGZpcmV3b3JrIGdkYyBoYW5vaSBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBuY3Vyc2VzIG5ld2RlbW8gcmFpbiBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0YWRkY2ggdGVzdGN1cnMgdmlldyB3b3JtIHhtYXMKK2luaXRzY3IJCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlY2hvY2hhciBmaXJld29yayBmaXJzdGxhc3QgZ2RjIGhhbm9pIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmFpbiByZWRyYXcgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RhZGRjaCB0ZXN0Y3VycyB0ZXN0c2NhbncgdmlldyB3b3JtIHhtYXMKK2lubnN0cgkJCQl0ZXN0OiB0ZXN0X2luc3RyCitpbm53c3RyCQkJCXRlc3Q6IHRlc3RfaW53c3RyCitpbnNfbndzdHIJCQl0ZXN0OiBpbnNfd2lkZQoraW5zX3djaAkJCQl0ZXN0OiBpbnNfd2lkZQoraW5zX3dzdHIJCQl0ZXN0OiBpbnNfd2lkZQoraW5zY2gJCQkJdGVzdDogaW5zX3dpZGUgaW5zZXJ0cworaW5zZGVsbG4JCQktCitpbnNlcnRsbgkJCS0KK2luc25zdHIJCQkJdGVzdDogaW5zZXJ0cworaW5zc3RyCQkJCXRlc3Q6IGluc2VydHMKK2luc3RyCQkJCXRlc3Q6IHRlc3RfaW5zdHIKK2ludHJmbHVzaAkJCXRlc3Q6IGRlbW9fZm9ybXMgbW92ZXdpbmRvdworaW53c3RyCQkJCXRlc3Q6IHRlc3RfaW53c3RyCitpc19jbGVhcmVkCQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX2lkY29rCQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX2lkbG9rCQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX2ltbWVkb2sJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfa2V5cGFkCQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX2xlYXZlb2sJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfbGluZXRvdWNoZWQJCQlsaWI6IGZvcm0KK2lzX25vZGVsYXkJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfbm90aW1lb3V0CQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX3Njcm9sbG9rCQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX3N5bmNvawkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitpc190ZXJtX3Jlc2l6ZWQJCQktCitpc193aW50b3VjaGVkCQkJbGliOiBuY3Vyc2VzCitpc2VuZHdpbgkJCS0KK2tleV9kZWZpbmVkCQkJdGVzdDogZGVtb19kZWZrZXkgZm9sZGtleXMKK2tleV9uYW1lCQkJdGVzdDoga2V5X25hbWVzIG5jdXJzZXMKK2tleWJvdW5kCQkJdGVzdDogZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5CitrZXluYW1lCQkJCXRlc3Q6IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fbWVudXMgZWRpdF9maWVsZCBmb2xka2V5cyBrZXluYW1lcyBtb3Zld2luZG93IG5jdXJzZXMgcmVkcmF3IHRlc3RjdXJzIHZpZXcgcHJvZ3M6IHRpYwora2V5b2sJCQkJdGVzdDogZGVtb19rZXlvayBmb2xka2V5cwora2V5cGFkCQkJCXRlc3Q6IGJzIGNhcmRmaWxlIGNoZ2F0IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBlZGl0X2ZpZWxkIGZpbHRlciBmaXJld29yayBmb2xka2V5cyBoYXNodGVzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrZXlfbmFtZXMga2V5bmFtZXMga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgcmVkcmF3IHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB0ZXN0c2Nhbncgdmlldwora2lsbGNoYXIJCQlsaWI6IG5jdXJzZXMKK2tpbGx3Y2hhcgkJCS0KK2xlYXZlb2sJCQkJdGVzdDogaGFub2kgdGVzdF9vcGFxdWUKK2xvbmduYW1lCQkJdGVzdDogdGVzdGN1cnMgcHJvZ3M6IHRwdXQKK21jcHJpbnQJCQkJLQorbWV0YQkJCQl0ZXN0OiBrZXlfbmFtZXMga2V5bmFtZXMgbmN1cnNlcworbW91c2VfdHJhZm8JCQktCittb3VzZWludGVydmFsCQkJLQorbW91c2VtYXNrCQkJdGVzdDogYnMgZGVtb19mb3JtcyBkZW1vX21lbnVzIGtuaWdodCBtb3Zld2luZG93IG5jdXJzZXMKK21vdmUJCQkJdGVzdDogYmx1ZSBicyBjYXJkZmlsZSBjaGdhdCBkZW1vX2FsdGtleXMgZGVtb19tZW51cyBlY2hvY2hhciBmb2xka2V5cyBnZGMgaGFub2kgaGFzaHRlc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgc2F2ZXNjcmVlbiB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdHNjYW53IHZpZXcgeG1hcworbXZhZGRfd2NoCQkJdGVzdDogbmN1cnNlcworbXZhZGRfd2NobnN0cgkJCS0KK212YWRkX3djaHN0cgkJCS0KK212YWRkY2gJCQkJdGVzdDogYnMgZ2RjIGhhbm9pIGxydGVzdCBuY3Vyc2VzIHJhaW4gdGNsb2NrIHhtYXMKK212YWRkY2huc3RyCQkJdGVzdDogZ2RjCittdmFkZGNoc3RyCQkJLQorbXZhZGRuc3RyCQkJLQorbXZhZGRud3N0cgkJCS0KK212YWRkc3RyCQkJdGVzdDogYnMgZGVtb19mb3JtcyBnZGMgaGFub2kga25pZ2h0IG5jdXJzZXMgcmFpbiB0Y2xvY2sgdGVzdGN1cnMgeG1hcworbXZhZGR3c3RyCQkJLQorbXZjaGdhdAkJCQl0ZXN0OiBjaGdhdAorbXZjdXIJCQkJdGVzdDogZG90c19tdmN1ciByZWRyYXcKK212ZGVsY2gJCQkJLQorbXZkZXJ3aW4JCQl0ZXN0OiBtb3Zld2luZG93CittdmdldF93Y2gJCQktCittdmdldF93c3RyCQkJdGVzdDogdGVzdF9nZXRfd3N0cgorbXZnZXRjaAkJCQktCittdmdldG5fd3N0cgkJCXRlc3Q6IHRlc3RfZ2V0X3dzdHIKK212Z2V0bnN0cgkJCXRlc3Q6IHRlc3RfZ2V0c3RyCittdmdldHN0cgkJCXRlc3Q6IHRlc3RfZ2V0c3RyCittdmhsaW5lCQkJCXRlc3Q6IG5jdXJzZXMKK212aGxpbmVfc2V0CQkJdGVzdDogbmN1cnNlcworbXZpbl93Y2gJCQl0ZXN0OiBpbmNoX3dpZGUKK212aW5fd2NobnN0cgkJCXRlc3Q6IGluY2hfd2lkZQorbXZpbl93Y2hzdHIJCQl0ZXN0OiBpbmNoX3dpZGUKK212aW5jaAkJCQl0ZXN0OiBpbmNocworbXZpbmNobnN0cgkJCXRlc3Q6IGdkYyBpbmNocworbXZpbmNoc3RyCQkJdGVzdDogaW5jaHMKK212aW5uc3RyCQkJdGVzdDogdGVzdF9pbnN0cgorbXZpbm53c3RyCQkJdGVzdDogdGVzdF9pbndzdHIKK212aW5zX253c3RyCQkJdGVzdDogaW5zX3dpZGUKK212aW5zX3djaAkJCXRlc3Q6IGluc193aWRlCittdmluc193c3RyCQkJdGVzdDogaW5zX3dpZGUKK212aW5zY2gJCQkJdGVzdDogaW5zX3dpZGUgaW5zZXJ0cworbXZpbnNuc3RyCQkJdGVzdDogaW5zZXJ0cworbXZpbnNzdHIJCQl0ZXN0OiBpbnNlcnRzCittdmluc3RyCQkJCXRlc3Q6IHRlc3RfaW5zdHIKK212aW53c3RyCQkJdGVzdDogdGVzdF9pbndzdHIKK212cHJpbnR3CQkJdGVzdDogYnMgZGVtb19tZW51cyBmaXJld29yayBoYW5vaSBuY3Vyc2VzIHRjbG9jayB2aWV3CittdnNjYW53CQkJCS0KK212dmxpbmUJCQkJdGVzdDogbmN1cnNlcworbXZ2bGluZV9zZXQJCQl0ZXN0OiBuY3Vyc2VzCittdndhZGRfd2NoCQkJLQorbXZ3YWRkX3djaG5zdHIJCQlsaWI6IGZvcm0KK212d2FkZF93Y2hzdHIJCQl0ZXN0OiBpbmNoX3dpZGUKK212d2FkZGNoCQkJdGVzdDogbW92ZXdpbmRvdyBuZXdkZW1vIHRlc3RjdXJzIHhtYXMKK212d2FkZGNobnN0cgkJCS0KK212d2FkZGNoc3RyCQkJdGVzdDogaW5jaHMKK212d2FkZG5zdHIJCQl0ZXN0OiBuZXdkZW1vIHRlc3RjdXJzCittdndhZGRud3N0cgkJCS0KK212d2FkZHN0cgkJCXRlc3Q6IGRpdHRvIGZpcnN0bGFzdCBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBuY3Vyc2VzIG5ld2RlbW8gdGVzdF9pbnN0ciB0ZXN0Y3VycyB4bWFzCittdndhZGR3c3RyCQkJdGVzdDogdGVzdF9pbndzdHIKK212d2NoZ2F0CQkJdGVzdDogY2hnYXQKK212d2RlbGNoCQkJdGVzdDogbmN1cnNlcworbXZ3Z2V0X3djaAkJCS0KK212d2dldF93c3RyCQkJdGVzdDogdGVzdF9nZXRfd3N0cgorbXZ3Z2V0Y2gJCQl0ZXN0OiBpbmNoX3dpZGUgaW5jaHMgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlCittdndnZXRuX3dzdHIJCQl0ZXN0OiB0ZXN0X2dldF93c3RyCittdndnZXRuc3RyCQkJdGVzdDogdGVzdF9nZXRzdHIKK212d2dldHN0cgkJCXRlc3Q6IHRlc3RfZ2V0c3RyCittdndobGluZQkJCXRlc3Q6IG1vdmV3aW5kb3cKK212d2hsaW5lX3NldAkJCS0KK212d2luCQkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fbWVudXMgbW92ZXdpbmRvdyB0ZXN0Y3VycyB4bWFzCittdndpbl93Y2gJCQl0ZXN0OiBpbmNoX3dpZGUKK212d2luX3djaG5zdHIJCQl0ZXN0OiBpbmNoX3dpZGUKK212d2luX3djaHN0cgkJCXRlc3Q6IGluY2hfd2lkZQorbXZ3aW5jaAkJCQl0ZXN0OiBpbmNocyBuZXdkZW1vIHRlc3RjdXJzCittdndpbmNobnN0cgkJCXRlc3Q6IGluY2hzCittdndpbmNoc3RyCQkJdGVzdDogaW5jaHMKK212d2lubnN0cgkJCXRlc3Q6IHRlc3RfaW5zdHIgdGVzdGN1cnMKK212d2lubndzdHIJCQl0ZXN0OiB0ZXN0X2lud3N0cgorbXZ3aW5zX253c3RyCQkJdGVzdDogaW5zX3dpZGUKK212d2luc193Y2gJCQl0ZXN0OiBpbnNfd2lkZQorbXZ3aW5zX3dzdHIJCQl0ZXN0OiBpbnNfd2lkZQorbXZ3aW5zY2gJCQl0ZXN0OiBpbnNfd2lkZSBpbnNlcnRzCittdndpbnNuc3RyCQkJdGVzdDogaW5zZXJ0cworbXZ3aW5zc3RyCQkJdGVzdDogaW5zZXJ0cyB0ZXN0Y3VycworbXZ3aW5zdHIJCQl0ZXN0OiB0ZXN0X2luc3RyCittdndpbndzdHIJCQl0ZXN0OiB0ZXN0X2lud3N0cgorbXZ3cHJpbnR3CQkJdGVzdDogY2hnYXQgZGVtb19wYW5lbHMgaW5jaF93aWRlIGluY2hzIG5jdXJzZXMgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0Y3VycworbXZ3c2NhbncJCQl0ZXN0OiB0ZXN0Y3VycworbXZ3dmxpbmUJCQl0ZXN0OiBpbnNfd2lkZSBpbnNlcnRzIG1vdmV3aW5kb3cKK212d3ZsaW5lX3NldAkJCS0KK25hcG1zCQkJCXRlc3Q6IGRlbW9fcGFuZWxzIGRpdHRvIGRvdHMgZG90c19tdmN1ciBlY2hvY2hhciBmaXJld29yayBnZGMgaGFub2kgbHJ0ZXN0IG5jdXJzZXMgcmFpbHJvYWQgcmFpbiB0Y2xvY2sgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdmlldyB3b3JtIHhtYXMgcHJvZ3M6IHRzZXQKK25ld3BhZAkJCQl0ZXN0OiBlZGl0X2ZpZWxkIG5jdXJzZXMgdGVzdGN1cnMKK25ld3NjcgkJCQlsaWI6IG5jdXJzZXMKK25ld3Rlcm0JCQkJdGVzdDogZGVtb19hbHRrZXlzIGRpdHRvIGRvdHNfbXZjdXIgZmlsdGVyIGZvbGRrZXlzIGdkYyBrZXlfbmFtZXMga2V5bmFtZXMKK25ld3dpbgkJCQl0ZXN0OiBjYXJkZmlsZSBjaGdhdCBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBlZGl0X2ZpZWxkIGZpcnN0bGFzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmVkcmF3IHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB4bWFzCitubAkJCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMgcmFpbiB0ZXN0Y3Vycworbm9jYnJlYWsJCQl0ZXN0OiB0ZXN0Y3Vycworbm9kZWxheQkJCQl0ZXN0OiBkaXR0byBmaXJld29yayBnZGMgbHJ0ZXN0IG5jdXJzZXMgbmV3ZGVtbyByYWluIHRjbG9jayB0ZXN0X29wYXF1ZSB2aWV3IHdvcm0geG1hcworbm9lY2hvCQkJCXRlc3Q6IGJhY2tncm91bmQgYnMgY2FyZGZpbGUgY2hnYXQgY29sb3Jfc2V0IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBmaXJld29yayBmaXJzdGxhc3QgZm9sZGtleXMgZ2RjIGhhbm9pIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIHJhaW4gcmVkcmF3IHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcworbm9maWx0ZXIJCQktCitub25sCQkJCXRlc3Q6IGJzIGRlbW9fZm9ybXMgaGFzaHRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIHZpZXcgd29ybSB4bWFzCitub3FpZmx1c2gJCQktCitub3JhdwkJCQl0ZXN0OiBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgbmN1cnNlcyB0ZXN0Y3Vycworbm90aW1lb3V0CQkJdGVzdDogdGVzdF9vcGFxdWUKK251bWNvZGVzCQkJdGVzdDogdGVzdF9hcnJheXMgcHJvZ3M6IGR1bXBfZW50cnkKK251bWZuYW1lcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5CitudW1uYW1lcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5IGluZm9jbXAKK29zcGVlZAkJCQlwcm9nczogdHNldAorb3ZlcmxheQkJCQl0ZXN0OiBuY3Vyc2VzIHRlc3RjdXJzIHhtYXMKK292ZXJ3cml0ZQkJCXRlc3Q6IG5jdXJzZXMgc2F2ZXNjcmVlbgorcGFpcl9jb250ZW50CQkJdGVzdDogYmFja2dyb3VuZCBjb2xvcl9zZXQKK3BlY2hvX3djaGFyCQkJLQorcGVjaG9jaGFyCQkJLQorcG5vdXRyZWZyZXNoCQkJdGVzdDogZWRpdF9maWVsZCBuY3Vyc2VzCitwcmVmcmVzaAkJCXRlc3Q6IHRlc3RjdXJzCitwcmludHcJCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNvbG9yX3NldCBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19rZXlvayBkZW1vX21lbnVzIGZpbHRlciBmb2xka2V5cyBuY3Vyc2VzIHNhdmVzY3JlZW4gdGVzdGN1cnMgdGVzdHNjYW53IHZpZXcKK3B1dHAJCQkJcHJvZ3M6IHRwdXQKK3B1dHdpbgkJCQl0ZXN0OiBuY3Vyc2VzCitxaWZsdXNoCQkJCS0KK3JhdwkJCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMgcmVkcmF3IHRlc3RjdXJzCityZWRyYXd3aW4JCQl0ZXN0OiByZWRyYXcKK3JlZnJlc2gJCQkJdGVzdDogYmx1ZSBicyBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlY2hvY2hhciBmaWx0ZXIgZmlyc3RsYXN0IGdkYyBoYW5vaSBoYXNodGVzdCBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RjdXJzIHZpZXcgeG1hcworcmVzZXRfcHJvZ19tb2RlCQkJdGVzdDogZmlsdGVyIG5jdXJzZXMKK3Jlc2V0X3NoZWxsX21vZGUJCXRlc3Q6IGJzIGZpbHRlciBzYXZlc2NyZWVuCityZXNldHR5CQkJCS0KK3Jlc2l6ZV90ZXJtCQkJdGVzdDogdmlldworcmVzaXpldGVybQkJCWxpYjogbmN1cnNlcworcmVzdGFydHRlcm0JCQktCityaXBvZmZsaW5lCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitzYXZldHR5CQkJCS0KK3NjYW53CQkJCXRlc3Q6IHRlc3RjdXJzIHRlc3RzY2Fudworc2NyX2R1bXAJCQl0ZXN0OiBzYXZlc2NyZWVuCitzY3JfaW5pdAkJCXRlc3Q6IHNhdmVzY3JlZW4KK3Njcl9yZXN0b3JlCQkJdGVzdDogc2F2ZXNjcmVlbgorc2NyX3NldAkJCQl0ZXN0OiBzYXZlc2NyZWVuCitzY3JsCQkJCXRlc3Q6IHZpZXcKK3Njcm9sbAkJCQl0ZXN0OiB0ZXN0Y3Vycworc2Nyb2xsb2sJCQl0ZXN0OiBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19rZXlvayBkZW1vX3BhbmVscyBkaXR0byBmb2xka2V5cyBoYXNodGVzdCBrbmlnaHQgbmN1cnNlcyByZWRyYXcgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdGVzdHNjYW53IHZpZXcKK3NldF9jdXJ0ZXJtCQkJbGliOiBuY3Vyc2VzCitzZXRfZXNjZGVsYXkJCQl0ZXN0OiB0ZXN0X29wYXF1ZQorc2V0X3RhYnNpemUJCQl0ZXN0OiB0ZXN0X29wYXF1ZQorc2V0X3Rlcm0JCQlsaWI6IG5jdXJzZXMKK3NldGNjaGFyCQkJdGVzdDogZGVtb19wYW5lbHMgaW5zX3dpZGUgbmN1cnNlcyB2aWV3CitzZXRzY3JyZWcJCQl0ZXN0OiB2aWV3CitzZXR1cHRlcm0JCQl0ZXN0OiBkb3RzIHByb2dzOiBjbGVhciB0cHV0IHRzZXQKK3Nsa19hdHRyCQkJLQorc2xrX2F0dHJfb2ZmCQkJLQorc2xrX2F0dHJfb24JCQktCitzbGtfYXR0cl9zZXQJCQktCitzbGtfYXR0cm9mZgkJCWxpYjogbmN1cnNlcworc2xrX2F0dHJvbgkJCWxpYjogbmN1cnNlcworc2xrX2F0dHJzZXQJCQktCitzbGtfY2xlYXIJCQl0ZXN0OiBuY3Vyc2VzCitzbGtfY29sb3IJCQl0ZXN0OiBuY3Vyc2VzCitzbGtfaW5pdAkJCXRlc3Q6IG5jdXJzZXMKK3Nsa19sYWJlbAkJCXRlc3Q6IG5jdXJzZXMKK3Nsa19ub3V0cmVmcmVzaAkJCS0KK3Nsa19yZWZyZXNoCQkJdGVzdDogbmN1cnNlcworc2xrX3Jlc3RvcmUJCQl0ZXN0OiBuY3Vyc2VzCitzbGtfc2V0CQkJCXRlc3Q6IG5jdXJzZXMKK3Nsa190b3VjaAkJCWxpYjogbmN1cnNlcworc2xrX3dzZXQJCQl0ZXN0OiBuY3Vyc2VzCitzdGFuZGVuZAkJCXRlc3Q6IGJsdWUgZ2RjIG5jdXJzZXMKK3N0YW5kb3V0CQkJdGVzdDogYmx1ZSBuY3Vyc2VzCitzdGFydF9jb2xvcgkJCXRlc3Q6IGJhY2tncm91bmQgYmx1ZSBicyBjYXJkZmlsZSBjaGdhdCBjb2xvcl9zZXQgZGVtb19mb3JtcyBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVjaG9jaGFyIGZpbHRlciBmaXJld29yayBnZGMgaGFub2kgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbmN1cnNlcyBuZXdkZW1vIHJhaW4gc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdGFkZGNoIHRlc3RjdXJzIHZpZXcgd29ybSB4bWFzCitzdGRzY3IJCQkJdGVzdDogYnMgY2hnYXQgZGVtb19hbHRrZXlzIGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBmaWx0ZXIgZmlyZXdvcmsgZm9sZGtleXMgZ2RjIGhhbm9pIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtleV9uYW1lcyBrZXluYW1lcyBrbmlnaHQgbHJ0ZXN0IG1vdmV3aW5kb3cgbmN1cnNlcyByYWluIHJlZHJhdyBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdGVzdHNjYW53IHZpZXcgd29ybSB4bWFzCitzdHJjb2RlcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5CitzdHJmbmFtZXMJCQl0ZXN0OiB0ZXN0X2FycmF5cyBwcm9nczogZHVtcF9lbnRyeQorc3RybmFtZXMJCQl0ZXN0OiBmb2xka2V5cyB0ZXN0X2FycmF5cyBwcm9nczogZHVtcF9lbnRyeSBpbmZvY21wIHRpYworc3VicGFkCQkJCXRlc3Q6IHRlc3RjdXJzCitzdWJ3aW4JCQkJdGVzdDogbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gdGVzdGN1cnMKK3N5bmNvawkJCQl0ZXN0OiB0ZXN0X29wYXF1ZQordGVybV9hdHRycwkJCXRlc3Q6IG5jdXJzZXMKK3Rlcm1hdHRycwkJCXRlc3Q6IG5jdXJzZXMgdGVzdGN1cnMKK3Rlcm1uYW1lCQkJdGVzdDogdGVzdGN1cnMKK3RnZXRlbnQJCQkJdGVzdDogZGVtb190ZXJtY2FwIHJhaWxyb2FkCit0Z2V0ZmxhZwkJCXRlc3Q6IGRlbW9fdGVybWNhcAordGdldG51bQkJCQl0ZXN0OiBkZW1vX3Rlcm1jYXAgcmFpbHJvYWQKK3RnZXRzdHIJCQkJdGVzdDogZGVtb190ZXJtY2FwIHJhaWxyb2FkCit0Z290bwkJCQl0ZXN0OiByYWlscm9hZAordGlnZXRmbGFnCQkJcHJvZ3M6IHRwdXQKK3RpZ2V0bnVtCQkJdGVzdDogbmN1cnNlcyBwcm9nczogdHB1dAordGlnZXRzdHIJCQl0ZXN0OiBibHVlIGRlbW9fZGVma2V5IGZvbGRrZXlzIHRlc3RjdXJzIHByb2dzOiB0cHV0Cit0aW1lb3V0CQkJCXRlc3Q6IHJhaW4gc2F2ZXNjcmVlbgordG91Y2hsaW5lCQkJdGVzdDogY2hnYXQKK3RvdWNod2luCQkJdGVzdDogY2hnYXQgZGVtb19tZW51cyBlZGl0X2ZpZWxkIGZpbHRlciBmaXJzdGxhc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMgbW92ZXdpbmRvdyBuY3Vyc2VzIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgeG1hcwordHBhcm0JCQkJdGVzdDogZG90cyBkb3RzX212Y3VyIHByb2dzOiB0aWMgdHB1dAordHB1dHMJCQkJdGVzdDogZG90cyBkb3RzX212Y3VyIHJhaWxyb2FkIHByb2dzOiBjbGVhciB0c2V0Cit0cmFjZQkJCQl0ZXN0OiBkZW1vX21lbnVzIGhhbm9pIGhhc2h0ZXN0IGxydGVzdCBuY3Vyc2VzIHRlc3RjdXJzIHZpZXcgd29ybQordHR5dHlwZQkJCQlsaWI6IG5jdXJzZXMKK3R5cGVhaGVhZAkJCXRlc3Q6IHRlc3RjdXJzCit1bmN0cmwJCQkJdGVzdDogbmN1cnNlcyByZWRyYXcgdGVzdGN1cnMKK3VuZ2V0X3djaAkJCS0KK3VuZ2V0Y2gJCQkJdGVzdDogYnMga25pZ2h0Cit1bmdldG1vdXNlCQkJLQordW50b3VjaHdpbgkJCWxpYjogZm9ybQordXNlX2RlZmF1bHRfY29sb3JzCQl0ZXN0OiBmaWx0ZXIgZmlyZXdvcmsgZ2RjIGhhbm9pIGtuaWdodCBuY3Vyc2VzIHJhaW4gdGNsb2NrIHdvcm0geG1hcwordXNlX2VudgkJCQlwcm9nczogdHB1dAordXNlX2V4dGVuZGVkX25hbWVzCQlwcm9nczogaW5mb2NtcCB0aWMKK3VzZV9sZWdhY3lfY29kaW5nCQktCit1c2Vfc2NyZWVuCQkJdGVzdDogZGl0dG8KK3VzZV93aW5kb3cJCQl0ZXN0OiByYWluIHdvcm0KK3ZpZF9hdHRyCQkJLQordmlkX3B1dHMJCQktCit2aWRhdHRyCQkJCWxpYjogbmN1cnNlcwordmlkcHV0cwkJCQlsaWI6IG5jdXJzZXMKK3ZsaW5lCQkJCXRlc3Q6IGdkYyBuY3Vyc2VzCit2bGluZV9zZXQJCQktCit2d19wcmludHcJCQktCit2d19zY2FudwkJCS0KK3Z3cHJpbnR3CQkJdGVzdDogbW92ZXdpbmRvdwordndzY2FudwkJCQlsaWI6IG5jdXJzZXMKK3dhZGRfd2NoCQkJdGVzdDogaW5jaF93aWRlCit3YWRkX3djaG5zdHIJCQlsaWI6IGZvcm0KK3dhZGRfd2Noc3RyCQkJLQord2FkZGNoCQkJCXRlc3Q6IGRlbW9fZm9ybXMgZGVtb19wYW5lbHMgZGl0dG8gZmlyc3RsYXN0IGluY2hfd2lkZSBpbmNocyBrbmlnaHQgbmN1cnNlcyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgd29ybQord2FkZGNobnN0cgkJCWxpYjogbmN1cnNlcword2FkZGNoc3RyCQkJLQord2FkZG5zdHIJCQlsaWI6IG1lbnUKK3dhZGRud3N0cgkJCXRlc3Q6IG5jdXJzZXMKK3dhZGRzdHIJCQkJdGVzdDogY2hnYXQgZGVtb19mb3JtcyBkZW1vX3BhbmVscyBlZGl0X2ZpZWxkIGZpcnN0bGFzdCBpbnNfd2lkZSBrbmlnaHQgbmN1cnNlcyByZWRyYXcgdGVzdGN1cnMKK3dhZGR3c3RyCQkJdGVzdDogaW5zX3dpZGUgdGVzdF9nZXRfd3N0cgord2F0dHJfZ2V0CQkJLQord2F0dHJfb2ZmCQkJbGliOiBuY3Vyc2VzCit3YXR0cl9vbgkJCWxpYjogbmN1cnNlcword2F0dHJfc2V0CQkJLQord2F0dHJvZmYJCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMgdGVzdGN1cnMgeG1hcword2F0dHJvbgkJCQl0ZXN0OiB0ZXN0Y3VycyB4bWFzCit3YXR0cnNldAkJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcyBuZXdkZW1vIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdGN1cnMgeG1hcword2JrZ2QJCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBkZW1vX21lbnVzIG5jdXJzZXMgbmV3ZGVtbyB0ZXN0Y3Vycword2JrZ2RzZXQJCQl0ZXN0OiBkZW1vX3BhbmVscyBpbnNfd2lkZSBpbnNlcnRzIG5jdXJzZXMKK3dia2dybmQJCQkJbGliOiBuY3Vyc2VzCit3Ymtncm5kc2V0CQkJbGliOiBuY3Vyc2VzCit3Ym9yZGVyCQkJCWxpYjogbmN1cnNlcword2JvcmRlcl9zZXQJCQlsaWI6IG5jdXJzZXMKK3djaGdhdAkJCQl0ZXN0OiBjaGdhdCB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHZpZXcKK3djbGVhcgkJCQl0ZXN0OiBuY3Vyc2VzIHRlc3Rfb3BhcXVlIHRlc3RjdXJzCit3Y2xydG9ib3QJCQl0ZXN0OiBmaXJzdGxhc3QgaW5jaF93aWRlIGluY2hzIG5jdXJzZXMgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0Y3Vycword2NscnRvZW9sCQkJdGVzdDogY2hnYXQgZGVtb19kZWZrZXkgZGVtb19rZXlvayBkZW1vX3BhbmVscyBmaXJzdGxhc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IG5jdXJzZXMgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0Y3Vycword2NvbG9yX3NldAkJCWxpYjogbmN1cnNlcword2N1cnN5bmN1cAkJCWxpYjogZm9ybQord2RlbGNoCQkJCXRlc3Q6IG5jdXJzZXMgdGVzdGN1cnMKK3dkZWxldGVsbgkJCXRlc3Q6IHRlc3RjdXJzCit3ZWNob193Y2hhcgkJCWxpYjogbmN1cnNlcword2VjaG9jaGFyCQkJbGliOiBuY3Vyc2VzCit3ZW5jbG9zZQkJCWxpYjogZm9ybQord2VyYXNlCQkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlZGl0X2ZpZWxkIGZpcnN0bGFzdCBrbmlnaHQgbmN1cnNlcyBuZXdkZW1vIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgeG1hcword2dldF93Y2gJCQl0ZXN0OiBpbnNfd2lkZSBuY3Vyc2VzCit3Z2V0X3dzdHIJCQl0ZXN0OiB0ZXN0X2dldF93c3RyCit3Z2V0Ymtncm5kCQkJbGliOiBuY3Vyc2VzCit3Z2V0Y2gJCQkJdGVzdDogY2FyZGZpbGUgY2hnYXQgZGVtb19kZWZrZXkgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGVkaXRfZmllbGQgZ2RjIGluc2VydHMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJhaW4gcmVkcmF3IHRlc3Rfb3BhcXVlIHRlc3RjdXJzIHdvcm0KK3dnZXRuX3dzdHIJCQl0ZXN0OiBuY3Vyc2VzIHRlc3RfZ2V0X3dzdHIKK3dnZXRuc3RyCQkJdGVzdDogbmN1cnNlcyB0ZXN0X2dldHN0cgord2dldHBhcmVudAkJCXRlc3Q6IHRlc3Rfb3BhcXVlCit3Z2V0c2NycmVnCQkJdGVzdDogdGVzdF9vcGFxdWUKK3dnZXRzdHIJCQkJdGVzdDogdGVzdF9nZXRzdHIKK3dobGluZQkJCQl0ZXN0OiB0ZXN0Y3Vycword2hsaW5lX3NldAkJCWxpYjogbmN1cnNlcword2luX3djaAkJCQl0ZXN0OiBpbmNoX3dpZGUKK3dpbl93Y2huc3RyCQkJdGVzdDogaW5jaF93aWRlCit3aW5fd2Noc3RyCQkJdGVzdDogaW5jaF93aWRlCit3aW5jaAkJCQl0ZXN0OiBpbmNocyBrbmlnaHQgdGVzdGN1cnMKK3dpbmNobnN0cgkJCXRlc3Q6IGluY2hzCit3aW5jaHN0cgkJCXRlc3Q6IGluY2hzCit3aW5uc3RyCQkJCXRlc3Q6IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBmb2xka2V5cyB0ZXN0X2luc3RyCit3aW5ud3N0cgkJCXRlc3Q6IHRlc3RfaW53c3RyCit3aW5zX253c3RyCQkJdGVzdDogaW5zX3dpZGUKK3dpbnNfd2NoCQkJdGVzdDogaW5zX3dpZGUKK3dpbnNfd3N0cgkJCXRlc3Q6IGluc193aWRlCit3aW5zY2gJCQkJdGVzdDogaW5zX3dpZGUgaW5zZXJ0cyB0ZXN0Y3Vycword2luc2RlbGxuCQkJbGliOiBuY3Vyc2VzCit3aW5zZXJ0bG4JCQl0ZXN0OiB0ZXN0Y3Vycword2luc25zdHIJCQl0ZXN0OiBpbnNlcnRzCit3aW5zc3RyCQkJCXRlc3Q6IGluc2VydHMKK3dpbnN0cgkJCQl0ZXN0OiB0ZXN0X2luc3RyCit3aW53c3RyCQkJCXRlc3Q6IHRlc3RfaW53c3RyCit3bW91c2VfdHJhZm8JCQlsaWI6IGZvcm0KK3dtb3ZlCQkJCXRlc3Q6IGNoZ2F0IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZmlyc3RsYXN0IGZvbGRrZXlzIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByZWRyYXcgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzIHdvcm0KK3dub3V0cmVmcmVzaAkJCXRlc3Q6IGRlbW9fbWVudXMgZGl0dG8gZWRpdF9maWVsZCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUKK3dwcmludHcJCQkJdGVzdDogY2hnYXQgZGVtb19kZWZrZXkgZGVtb19mb3JtcyBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZWRpdF9maWVsZCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3Vycword3JlZHJhd2xuCQkJdGVzdDogcmVkcmF3Cit3cmVmcmVzaAkJCXRlc3Q6IGNoZ2F0IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVkaXRfZmllbGQgZmlyc3RsYXN0IGtuaWdodCBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmVkcmF3IHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RjdXJzIHZpZXcgd29ybSB4bWFzCit3cmVzaXplCQkJCXRlc3Q6IGNhcmRmaWxlIG5jdXJzZXMKK3dzY2FudwkJCQl0ZXN0OiB0ZXN0Y3Vycword3NjcmwJCQkJdGVzdDogbmN1cnNlcyB0ZXN0Y3Vycword3NldHNjcnJlZwkJCXRlc3Q6IG5jdXJzZXMgdGVzdGN1cnMKK3dzdGFuZGVuZAkJCXRlc3Q6IHRlc3Rfb3BhcXVlIHhtYXMKK3dzdGFuZG91dAkJCXRlc3Q6IHRlc3Rfb3BhcXVlIHhtYXMKK3dzeW5jZG93bgkJCXRlc3Q6IG1vdmV3aW5kb3cKK3dzeW5jdXAJCQkJbGliOiBmb3JtCit3dGltZW91dAkJCXRlc3Q6IG5jdXJzZXMKK3d0b3VjaGxuCQkJbGliOiBuY3Vyc2VzCit3dW5jdHJsCQkJCWxpYjogbmN1cnNlcword3ZsaW5lCQkJCXRlc3Q6IHRlc3RjdXJzCit3dmxpbmVfc2V0CQkJbGliOiBuY3Vyc2VzCisKK2xpYnBhbmVsOgorLS0tLS0tLS0KK2JvdHRvbV9wYW5lbAkJCXRlc3Q6IGRlbW9fcGFuZWxzIG5jdXJzZXMKK2RlbF9wYW5lbAkJCXRlc3Q6IGRlbW9fcGFuZWxzIG5jdXJzZXMKK2hpZGVfcGFuZWwJCQl0ZXN0OiBkZW1vX3BhbmVscyBuY3Vyc2VzCittb3ZlX3BhbmVsCQkJdGVzdDogZGVtb19wYW5lbHMgbmN1cnNlcworbmV3X3BhbmVsCQkJdGVzdDogY2FyZGZpbGUgZGVtb19wYW5lbHMgbmN1cnNlcworcGFuZWxfYWJvdmUJCQl0ZXN0OiBkZW1vX3BhbmVscworcGFuZWxfYmVsb3cJCQl0ZXN0OiBkZW1vX3BhbmVscworcGFuZWxfaGlkZGVuCQkJdGVzdDogZGVtb19wYW5lbHMKK3BhbmVsX3VzZXJwdHIJCQl0ZXN0OiBkZW1vX3BhbmVscyBuY3Vyc2VzCitwYW5lbF93aW5kb3cJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX3BhbmVscyBuY3Vyc2VzCityZXBsYWNlX3BhbmVsCQkJdGVzdDogZGVtb19wYW5lbHMKK3NldF9wYW5lbF91c2VycHRyCQl0ZXN0OiBkZW1vX3BhbmVscyBuY3Vyc2VzCitzaG93X3BhbmVsCQkJdGVzdDogZGVtb19wYW5lbHMgbmN1cnNlcwordG9wX3BhbmVsCQkJdGVzdDogY2FyZGZpbGUgZGVtb19wYW5lbHMgbmN1cnNlcwordXBkYXRlX3BhbmVscwkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fcGFuZWxzIG5jdXJzZXMKZGlmZiAtLWdpdCBhL3Rlc3QvYWNsb2NhbC5tNCBiL3Rlc3QvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM1MGZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMjE0MSBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgJElkOiBhY2xvY2FsLm00LHYgMS4yMiAyMDA4LzAyLzA5IDE4OjIyOjE3IHRvbSBFeHAgJAorZG5sCitkbmwgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CitkbmwKK2RubCBNYWNyb3MgdXNlZCBpbiBOQ1VSU0VTIHRlc3QgcHJvZ3JhbXMgYXV0by1jb25maWd1cmF0aW9uIHNjcmlwdC4KK2RubAorZG5sIFRoZXNlIG1hY3JvcyBhcmUgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IGZyb20gTkNVUlNFUy4gIFRoZSBjb3B5cmlnaHQgb24KK2RubCB0aGlzIGZpbGUgYXBwbGllcyB0byB0aGUgYWdncmVnYXRpb24gb2YgbWFjcm9zIGFuZCBkb2VzIG5vdCBhZmZlY3QgdXNlIG9mCitkbmwgdGhlc2UgbWFjcm9zIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KK2RubAorZG5sIFNlZSBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0NGTEFHUyB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMDQvMDQvMjUgMTc6NDg6MzAKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ29weSBub24tcHJlcHJvY2Vzc29yIGZsYWdzIHRvICRDRkxBR1MsIHByZXByb2Nlc3NvciBmbGFncyB0byAkQ1BQRkxBR1MKK2RubCBUaGUgc2Vjb25kIHBhcmFtZXRlciBpZiBnaXZlbiBtYWtlcyB0aGlzIG1hY3JvIHZlcmJvc2UuCitkbmwKK2RubCBQdXQgYW55IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0aGF0IHVzZSBxdW90ZWQgc3RyaW5ncyBpbiAkRVhUUkFfQ1BQRkxBR1MsCitkbmwgdG8gc2ltcGxpZnkgdXNlIG9mICRDUFBGTEFHUyBpbiBjb21waWxlciBjaGVja3MsIGV0Yy4sIHRoYXQgYXJlIGVhc2lseQorZG5sIGNvbmZ1c2VkIGJ5IHRoZSBxdW90ZXMgKHdoaWNoIHJlcXVpcmUgYmFja3NsYXNoZXMgdG8ga2VlcCB0aGVtIHVzYWJsZSkuCitBQ19ERUZVTihbQ0ZfQUREX0NGTEFHU10sCitbCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICQxCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtbXj1dXSo9J1wnJ1wiW1teIl1dKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW1teIl1dKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCWlmZWxzZSgkMiwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyldKQorCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCWlmZWxzZSgkMiwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MpXSkKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwlpZmVsc2UoJDIsLCxbQ0ZfVkVSQk9TRShhZGQgdG8gXCRFWFRSQV9DUFBGTEFHUyAkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzKV0pCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworQUNfU1VCU1QoRVhUUkFfQ1BQRkxBR1MpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0lOQ0RJUiB2ZXJzaW9uOiA5IHVwZGF0ZWQ6IDIwMDgvMDIvMDkgMTM6MTU6MzQKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQWRkIGFuIGluY2x1ZGUtZGlyZWN0b3J5IHRvICRDUFBGTEFHUy4gIERvbid0IGFkZCAvdXNyL2luY2x1ZGUsIHNpbmNlIGl0J3MKK2RubCByZWR1bmRhbnQuICBXZSBkb24ndCBub3JtYWxseSBuZWVkIHRvIGFkZCAtSS91c3IvbG9jYWwvaW5jbHVkZSBmb3IgZ2NjLAorZG5sIGJ1dCBvbGQgdmVyc2lvbnMgKGFuZCBzb21lIG1pc2luc3RhbGxlZCBvbmVzKSBuZWVkIHRoYXQuICBUbyBtYWtlIHRoaW5ncworZG5sIHdvcnNlLCBnY2MgMy54IG1heSBnaXZlIGVycm9yIG1lc3NhZ2VzIGlmIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGlzIGFkZGVkIHRvCitkbmwgdGhlIGluY2x1ZGUtcGF0aCkuCitBQ19ERUZVTihbQ0ZfQUREX0lOQ0RJUl0sCitbCitpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICQxCisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPl0sCisJCQkJICBbcHJpbnRmKCJIZWxsbyIpXSwKKwkJCQkgIFtdLAorCQkJCSAgW2NmX2hhdmVfaW5jZGlyPXllc10pCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIENGX1ZFUkJPU0UoYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCkKKwkJICBpZmVsc2UoJDIsLENQUEZMQUdTLCQyKT0iLUkkY2ZfYWRkX2luY2RpciAkaWZlbHNlKCQyLCxDUFBGTEFHUyxbJF0kMikiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0xJQkRJUiB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDgvMDIvMDkgMTM6MTU6MzQKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwJQWRkcyB0byB0aGUgbGlicmFyeS1wYXRoCitkbmwKK2RubAlTb21lIG1hY2hpbmVzIGhhdmUgdHJvdWJsZSB3aXRoIG11bHRpcGxlIC1MIG9wdGlvbnMuCitkbmwKK2RubCAkMSBpcyB0aGUgKGxpc3Qgb2YpIGRpcmVjdG9yeShzKSB0byBhZGQKK2RubCAkMiBpcyB0aGUgb3B0aW9uYWwgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gdXBkYXRlIChkZWZhdWx0IExERkxBR1MpCitkbmwKK0FDX0RFRlVOKFtDRl9BRERfTElCRElSXSwKK1sKK2lmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9saWJkaXIgaW4gJDEKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIENGX1ZFUkJPU0UoYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCkKKyAgICAgICAgaWZlbHNlKCQyLCxMREZMQUdTLCQyKT0iLUwkY2ZfYWRkX2xpYmRpciAkaWZlbHNlKCQyLCxMREZMQUdTLFskXSQyKSIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX1NVQkRJUl9QQVRIIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNy8wNy8yOSAxMDoxMjo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEFwcGVuZCB0byBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGhlYWRlci9saWItZmlsZQorZG5sCSQxID0gdGhlIHZhcmlhYmxlIHRvIHJldHVybiBhcyByZXN1bHQKK2RubAkkMiA9IHRoZSBwYWNrYWdlIG5hbWUKK2RubAkkMyA9IHRoZSBzdWJkaXJlY3RvcnksIGUuZy4sIGJpbiwgaW5jbHVkZSBvciBsaWIKK2RubCAkNCA9IHRoZSBkaXJlY3RvcnkgdW5kZXIgd2hpY2ggd2Ugd2lsbCB0ZXN0IGZvciBzdWJkaXJlY3RvcmllcworZG5sICQ1ID0gYSBkaXJlY3RvcnkgdGhhdCB3ZSBkbyBub3Qgd2FudCAkNCB0byBtYXRjaAorQUNfREVGVU4oW0NGX0FERF9TVUJESVJfUEFUSF0sCitbCit0ZXN0ICIkNCIgIT0gIiQ1IiAmJiBcCit0ZXN0IC1kICIkNCIgJiYgXAoraWZlbHNlKFskNV0sTk9ORSwsWyh0ZXN0ICQ1ID0gTk9ORSB8fCB0ZXN0IC1kICQ1KSAmJl0pIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciAkMy1kaXJlY3RvcmllcyB1bmRlciAkNCIKKwl0ZXN0IC1kICQ0LyQzICYmICAgICAgICAgICQxPSJbJF0kMSAkNC8kMyIKKwl0ZXN0IC1kICQ0LyQzLyQyICYmICAgICAgICQxPSJbJF0kMSAkNC8kMy8kMiIKKwl0ZXN0IC1kICQ0LyQzLyQyLyQzICYmICAgICQxPSJbJF0kMSAkNC8kMy8kMi8kMyIKKwl0ZXN0IC1kICQ0LyQyLyQzICYmICAgICAgICQxPSJbJF0kMSAkNC8kMi8kMyIKKwl0ZXN0IC1kICQ0LyQyLyQzLyQyICYmICAgICQxPSJbJF0kMSAkNC8kMi8kMy8kMiIKK30KK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQU5TSV9DQ19DSEVDSyB2ZXJzaW9uOiA5IHVwZGF0ZWQ6IDIwMDEvMTIvMzAgMTc6NTM6MzQKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBpcyBhZGFwdGVkIGZyb20gdGhlIG1hY3JvcyAnZnBfUFJPR19DQ19TVERDJyBhbmQgJ2ZwX0NfUFJPVE9UWVBFUycKK2RubCBpbiB0aGUgc2hhcnV0aWxzIDQuMiBkaXN0cmlidXRpb24uCitBQ19ERUZVTihbQ0ZfQU5TSV9DQ19DSEVDS10sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgJHtDQy1jY30gb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMsIGNmX2N2X2Fuc2lfY2MsWworY2ZfY3ZfYW5zaV9jYz1ubworY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisjIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAorIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCisjIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCisjIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKKyMgSFAtVVgJCQktQWEgLURfSFBVWF9TT1VSQ0UKKyMgU1ZSNAkJCS1YYworIyBVbml4V2FyZSAxLjIJCShjYW5ub3QgdXNlIC1YYywgc2luY2UgQU5TSS9QT1NJWCBjbGFzaGVzKQorZm9yIGNmX2FyZyBpbiAiLURDQ19IQVNfUFJPVE9TIiBcCisJIiIgXAorCS1xbGFuZ2x2bD1hbnNpIFwKKwktc3RkMSBcCisJLUFlIFwKKwkiLUFhIC1EX0hQVVhfU09VUkNFIiBcCisJLVhjCitkbworCUNGX0FERF9DRkxBR1MoJGNmX2FyZykKKwlBQ19UUllfQ09NUElMRSgKK1sKKyNpZm5kZWYgQ0NfSEFTX1BST1RPUworI2lmICFkZWZpbmVkKF9fU1REQ19fKSB8fCAoX19TVERDX18gIT0gMSkKK2Nob2tlIG1lCisjZW5kaWYKKyNlbmRpZgorXSxbCisJaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CisJc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CisJc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307XSwKKwlbY2ZfY3ZfYW5zaV9jYz0iJGNmX2FyZyI7IGJyZWFrXSkKK2RvbmUKK0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorXSkKKworaWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiICE9ICJubyI7IHRoZW4KK2lmIHRlc3QgIi4kY2ZfY3ZfYW5zaV9jYyIgIT0gIi4tRENDX0hBU19QUk9UT1MiOyB0aGVuCisJQ0ZfQUREX0NGTEFHUygkY2ZfY3ZfYW5zaV9jYykKK2Vsc2UKKwlBQ19ERUZJTkUoQ0NfSEFTX1BST1RPUykKK2ZpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BTlNJX0NDX1JFUUQgdmVyc2lvbjogMyB1cGRhdGVkOiAxOTk3LzA5LzA2IDEzOjQwOjQ0CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgRm9yIHByb2dyYW1zIHRoYXQgbXVzdCB1c2UgYW4gQU5TSSBjb21waWxlciwgb2J0YWluIGNvbXBpbGVyIG9wdGlvbnMgdGhhdAorZG5sIHdpbGwgbWFrZSBpdCByZWNvZ25pemUgcHJvdG90eXBlcy4gIFdlJ2xsIGRvIHByZXByb2Nlc3NvciBjaGVja3MgaW4gb3RoZXIKK2RubCBtYWNyb3MsIHNpbmNlIHRvb2xzIHN1Y2ggYXMgdW5wcm90byBjYW4gZmFrZSBwcm90b3R5cGVzLCBidXQgb25seSBwYXJ0IG9mCitkbmwgdGhlIHByZXByb2Nlc3Nvci4KK0FDX0RFRlVOKFtDRl9BTlNJX0NDX1JFUURdLAorW0FDX1JFUVVJUkUoW0NGX0FOU0lfQ0NfQ0hFQ0tdKQoraWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiID0gIm5vIjsgdGhlbgorCUFDX0VSUk9SKAorW1lvdXIgY29tcGlsZXIgZG9lcyBub3QgYXBwZWFyIHRvIHJlY29nbml6ZSBwcm90b3R5cGVzLgorWW91IGhhdmUgdGhlIGZvbGxvd2luZyBjaG9pY2VzOgorCWEuIGFkanVzdCB5b3VyIGNvbXBpbGVyIG9wdGlvbnMKKwliLiBnZXQgYW4gdXAtdG8tZGF0ZSBjb21waWxlcgorCWMuIHVzZSBhIHdyYXBwZXIgc3VjaCBhcyB1bnByb3RvXSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FSR19ESVNBQkxFIHZlcnNpb246IDMgdXBkYXRlZDogMTk5OS8wMy8zMCAxNzoyNDozMQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQWxsb3cgdXNlciB0byBkaXNhYmxlIGEgbm9ybWFsbHktb24gb3B0aW9uLgorQUNfREVGVU4oW0NGX0FSR19ESVNBQkxFXSwKK1tDRl9BUkdfT1BUSU9OKCQxLFskMl0sWyQzXSxbJDRdLHllcyldKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FSR19FTkFCTEUgdmVyc2lvbjogMyB1cGRhdGVkOiAxOTk5LzAzLzMwIDE3OjI0OjMxCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIEFsbG93IHVzZXIgdG8gZW5hYmxlIGEgbm9ybWFsbHktb2ZmIG9wdGlvbi4KK0FDX0RFRlVOKFtDRl9BUkdfRU5BQkxFXSwKK1tDRl9BUkdfT1BUSU9OKCQxLFskMl0sWyQzXSxbJDRdLG5vKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQVJHX09QVElPTiB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDE5OTcvMTAvMTggMTQ6NDI6NDEKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgUmVzdHJpY3RlZCBmb3JtIG9mIEFDX0FSR19FTkFCTEUgdGhhdCBlbnN1cmVzIHVzZXIgZG9lc24ndCBnaXZlIGJvZ3VzCitkbmwgdmFsdWVzLgorZG5sCitkbmwgUGFyYW1ldGVyczoKK2RubCAkMSA9IG9wdGlvbiBuYW1lCitkbmwgJDIgPSBoZWxwLXN0cmluZworZG5sICQzID0gYWN0aW9uIHRvIHBlcmZvcm0gaWYgb3B0aW9uIGlzIG5vdCBkZWZhdWx0CitkbmwgJDQgPSBhY3Rpb24gaWYgcGVyZm9ybSBpZiBvcHRpb24gaXMgZGVmYXVsdAorZG5sICQ1ID0gZGVmYXVsdCBvcHRpb24gdmFsdWUgKGVpdGhlciAneWVzJyBvciAnbm8nKQorQUNfREVGVU4oW0NGX0FSR19PUFRJT05dLAorW0FDX0FSR19FTkFCTEUoJDEsWyQyXSxbdGVzdCAiJGVuYWJsZXZhbCIgIT0gaWZlbHNlKCQ1LG5vLHllcyxubykgJiYgZW5hYmxldmFsPWlmZWxzZSgkNSxubyxubyx5ZXMpCisgIGlmIHRlc3QgIiRlbmFibGV2YWwiICE9ICIkNSIgOyB0aGVuCitpZmVsc2UoJDMsLFsgICAgOl1kbmwKKyxbICAgICQzXSkgaWZlbHNlKCQ0LCwsWworICBlbHNlCisgICAgJDRdKQorICBmaV0sW2VuYWJsZXZhbD0kNSBpZmVsc2UoJDQsLCxbCisgICQ0CitdKWRubAorICBdKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0hFQ0tfQ0FDSEUgdmVyc2lvbjogMTAgdXBkYXRlZDogMjAwNC8wNS8yMyAxMzowMzozMQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UncmUgYWNjaWRlbnRhbGx5IHVzaW5nIGEgY2FjaGUgZnJvbSBhIGRpZmZlcmVudCBtYWNoaW5lLgorZG5sIERlcml2ZSB0aGUgc3lzdGVtIG5hbWUsIGFzIGEgY2hlY2sgZm9yIHJldXNpbmcgdGhlIGF1dG9jb25mIGNhY2hlLgorZG5sCitkbmwgSWYgd2UndmUgcGFja2FnZWQgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViLCBydW4gdGhhdCAoc2luY2UgaXQgZG9lcyBhCitkbmwgYmV0dGVyIGpvYiB0aGFuIHVuYW1lKS4gIE5vcm1hbGx5IHdlJ2xsIHVzZSBBQ19DQU5PTklDQUxfSE9TVCwgYnV0IGFsbG93CitkbmwgYW4gZXh0cmEgcGFyYW1ldGVyIHRoYXQgd2UgbWF5IG92ZXJyaWRlLCBlLmcuLCBmb3IgQUNfQ0FOT05JQ0FMX1NZU1RFTQorZG5sIHdoaWNoIGlzIHVzZWZ1bCBpbiBjcm9zcy1jb21waWxlcy4KK2RubAorZG5sIE5vdGU6IHdlIHdvdWxkIHVzZSAkYWNfY29uZmlnX3N1YiwgYnV0IHRoYXQgaXMgb25lIG9mIHRoZSBwbGFjZXMgd2hlcmUKK2RubCBhdXRvY29uZiAyLjV4IGJyb2tlIGNvbXBhdGliaWxpdHkgd2l0aCBhdXRvY29uZiAyLjEzCitBQ19ERUZVTihbQ0ZfQ0hFQ0tfQ0FDSEVdLAorWworaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5ndWVzcyB8fCB0ZXN0IC1mICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyA7IHRoZW4KKwlpZmVsc2UoWyQxXSwsW0FDX0NBTk9OSUNBTF9IT1NUXSxbJDFdKQorCXN5c3RlbV9uYW1lPSIkaG9zdF9vcyIKK2Vsc2UKKwlzeXN0ZW1fbmFtZT0iYCh1bmFtZSAtcyAtcikgMj4vZGV2L251bGxgIgorCWlmIHRlc3QgLXogIiRzeXN0ZW1fbmFtZSIgOyB0aGVuCisJCXN5c3RlbV9uYW1lPSJgKGhvc3RuYW1lKSAyPi9kZXYvbnVsbGAiCisJZmkKK2ZpCit0ZXN0IC1uICIkc3lzdGVtX25hbWUiICYmIEFDX0RFRklORV9VTlFVT1RFRChTWVNURU1fTkFNRSwiJHN5c3RlbV9uYW1lIikKK0FDX0NBQ0hFX1ZBTChjZl9jdl9zeXN0ZW1fbmFtZSxbY2ZfY3Zfc3lzdGVtX25hbWU9IiRzeXN0ZW1fbmFtZSJdKQorCit0ZXN0IC16ICIkc3lzdGVtX25hbWUiICYmIHN5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCit0ZXN0IC1uICIkY2ZfY3Zfc3lzdGVtX25hbWUiICYmIEFDX01TR19SRVNVTFQoQ29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSkKKworaWYgdGVzdCAiLiRzeXN0ZW1fbmFtZSIgIT0gIi4kY2ZfY3Zfc3lzdGVtX25hbWUiIDsgdGhlbgorCUFDX01TR19SRVNVTFQoQ2FjaGVkIHN5c3RlbSBuYW1lICgkc3lzdGVtX25hbWUpIGRvZXMgbm90IGFncmVlIHdpdGggYWN0dWFsICgkY2ZfY3Zfc3lzdGVtX25hbWUpKQorCUFDX0VSUk9SKCJQbGVhc2UgcmVtb3ZlIGNvbmZpZy5jYWNoZSBhbmQgdHJ5IGFnYWluLiIpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DSEVDS19DRkxBR1MgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDAxLzEyLzMwIDE5OjA5OjU4CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uZGl0aW9uYWxseSBhZGQgdG8gJENGTEFHUyBhbmQgJENQUEZMQUdTIHZhbHVlcyB3aGljaCBhcmUgZGVyaXZlZCBmcm9tCitkbmwgYSBidWlsZC1jb25maWd1cmF0aW9uIHN1Y2ggYXMgaW1ha2UuICBUaGVzZSBoYXZlIHRoZSBwaXRmYWxsIHRoYXQgdGhleQorZG5sIG9mdGVuIGNvbnRhaW4gY29tcGlsZXItc3BlY2lmaWMgb3B0aW9ucyB3aGljaCB3ZSBjYW5ub3QgdXNlLCBtaXhlZCB3aXRoCitkbmwgcHJlcHJvY2Vzc29yIG9wdGlvbnMgdGhhdCB3ZSB1c3VhbGx5IGNhbi4KK0FDX0RFRlVOKFtDRl9DSEVDS19DRkxBR1NdLAorWworQ0ZfVkVSQk9TRShjaGVja2luZyBhZGRpdGlvbnMgdG8gQ0ZMQUdTKQorY2ZfY2hlY2tfY2ZsYWdzPSIkQ0ZMQUdTIgorY2ZfY2hlY2tfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKK0NGX0FERF9DRkxBR1MoJDEseWVzKQoraWYgdGVzdCAiJGNmX2NoZWNrX2NmbGFncyIgIT0gIiRDRkxBR1MiIDsgdGhlbgorQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sW3ByaW50ZigiSGVsbG8gd29ybGQiKTtdLCwKKwlbQ0ZfVkVSQk9TRSh0ZXN0LWNvbXBpbGUgZmFpbGVkLiAgVW5kb2luZyBjaGFuZ2UgdG8gXCRDRkxBR1MpCisJIGlmIHRlc3QgIiRjZl9jaGVja19jcHBmbGFncyIgIT0gIiRDUFBGTEFHUyIgOyB0aGVuCisJCSBDRl9WRVJCT1NFKGJ1dCBrZWVwaW5nIGNoYW5nZSB0byBcJENQUEZMQUdTKQorCSBmaQorCSBDRkxBR1M9IiRjZl9jaGVja19mbGFncyJdKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1VSU0VTX0FDU19NQVAgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAzLzA1LzE3IDIyOjE5OjAyCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgbGlrZWx5IHZhbHVlcyBvZiBhY3NfbWFwW106CitBQ19ERUZVTihbQ0ZfQ1VSU0VTX0FDU19NQVBdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGFycmF5LCBjZl9jdl9jdXJzZXNfYWNzX21hcCxbCitjZl9jdl9jdXJzZXNfYWNzX21hcD11bmtub3duCitmb3IgbmFtZSBpbiBhY3NfbWFwIF9hY3NfbWFwIF9fYWNzX21hcCBfbmNfYWNzX21hcAorZG8KK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK10sWworJG5hbWVbJ2snXSA9IEFDU19QTFVTCitdLFtjZl9jdl9jdXJzZXNfYWNzX21hcD0kbmFtZTsgYnJlYWtdKQorZG9uZQorXSkKKwordGVzdCAiJGNmX2N2X2N1cnNlc19hY3NfbWFwIiAhPSB1bmtub3duICYmIEFDX0RFRklORV9VTlFVT1RFRChDVVJTRVNfQUNTX0FSUkFZLCRjZl9jdl9jdXJzZXNfYWNzX21hcCkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1VSU0VTX0NIRUNLX1RZUEUgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDAzLzAzLzAxIDIzOjQwOjMzCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiBjdXJzZXMuaCBkZWZpbmVzIHRoZSBnaXZlbiB0eXBlCitBQ19ERUZVTihbQ0ZfQ1VSU0VTX0NIRUNLX1RZUEVdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciB0eXBlICQxIGluICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9KQorQUNfVFJZX0NPTVBJTEUoWworI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNlbmRpZgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sWworJDEgZm9vCitdLGNmX3Jlc3VsdD15ZXMsY2ZfcmVzdWx0PW5vKQorQUNfTVNHX1JFU1VMVCgkY2ZfcmVzdWx0KQoraWYgdGVzdCAkY2ZfcmVzdWx0ID0geWVzIDsgdGhlbgorCUNGX1VQUEVSKGNmX3Jlc3VsdCxoYXZlX3R5cGVfJDEpCisJQUNfREVGSU5FX1VOUVVPVEVEKCRjZl9yZXN1bHQpCitlbHNlCisJQUNfREVGSU5FX1VOUVVPVEVEKCQxLCQyKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1VSU0VTX0NQUEZMQUdTIHZlcnNpb246IDkgdXBkYXRlZDogMjAwNi8wMi8wNCAxOTo0NDo0MworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIExvb2sgZm9yIHRoZSBjdXJzZXMgaGVhZGVycy4KK0FDX0RFRlVOKFtDRl9DVVJTRVNfQ1BQRkxBR1NdLFsKKworQUNfQ0FDSEVfQ0hFQ0soZm9yIGV4dHJhIGluY2x1ZGUgZGlyZWN0b3JpZXMsY2ZfY3ZfY3Vyc2VzX2luY2RpcixbCitjZl9jdl9jdXJzZXNfaW5jZGlyPW5vCitjYXNlICRob3N0X29zIGluICModmkKK2hwdXgxMC4qKSAjKHZpCisJdGVzdCAtZCAvdXNyL2luY2x1ZGUvY3Vyc2VzX2NvbHIgJiYgXAorCWNmX2N2X2N1cnNlc19pbmNkaXI9Ii1JL3Vzci9pbmNsdWRlL2N1cnNlc19jb2xyIgorCTs7CitzdW5vczMqfHN1bm9zNCopCisJdGVzdCAtZCAvdXNyLzVsaWIgJiYgXAorCXRlc3QgLWQgL3Vzci81aW5jbHVkZSAmJiBcCisJY2ZfY3ZfY3Vyc2VzX2luY2Rpcj0iLUkvdXNyLzVpbmNsdWRlIgorCTs7Citlc2FjCitdKQordGVzdCAiJGNmX2N2X2N1cnNlc19pbmNkaXIiICE9IG5vICYmIENQUEZMQUdTPSIkY2ZfY3ZfY3Vyc2VzX2luY2RpciAkQ1BQRkxBR1MiCisKK0NGX0NVUlNFU19IRUFERVIKK0NGX1RFUk1fSEVBREVSCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NVUlNFU19GVU5DUyB2ZXJzaW9uOiAxMyB1cGRhdGVkOiAyMDA3LzA0LzI4IDA5OjE1OjU1CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ3Vyc2VzLWZ1bmN0aW9ucyBhcmUgYSBsaXR0bGUgY29tcGxpY2F0ZWQsIHNpbmNlIGEgbG90IG9mIHRoZW0gYXJlIG1hY3Jvcy4KK0FDX0RFRlVOKFtDRl9DVVJTRVNfRlVOQ1NdLAorWworQUNfUkVRVUlSRShbQ0ZfQ1VSU0VTX0NQUEZMQUdTXSlkbmwKK0FDX1JFUVVJUkUoW0NGX1hPUEVOX0NVUlNFU10pCitBQ19SRVFVSVJFKFtDRl9DVVJTRVNfVEVSTV9IXSkKK2ZvciBjZl9mdW5jIGluICQxCitkbworCUNGX1VQUEVSKGNmX3RyX2Z1bmMsJGNmX2Z1bmMpCisJQUNfTVNHX0NIRUNLSU5HKGZvciAke2NmX2Z1bmN9KQorCUNGX01TR19MT0coJHtjZl9mdW5jfSkKKwlBQ19DQUNIRV9WQUwoY2ZfY3ZfZnVuY18kY2ZfZnVuYyxbCisJCWV2YWwgY2ZfcmVzdWx0PSckYWNfY3ZfZnVuY18nJGNmX2Z1bmMKKwkJaWYgdGVzdCAiLiRjZl9yZXN1bHQiICE9ICIubm8iOyB0aGVuCisJCQlBQ19UUllfTElOSyhbCisjaWZkZWYgSEFWRV9YQ1VSU0VTCisjaW5jbHVkZSA8eGN1cnNlcy5oPgorY2hhciAqIFhDdXJzZXNQcm9ncmFtTmFtZSA9ICJ0ZXN0IjsKKyNlbHNlCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoSEFWRV9OQ1VSU0VTV19URVJNX0gpCisjaW5jbHVkZSA8bmN1cnNlc3cvdGVybS5oPgorI2Vsc2UKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgZGVmaW5lZChIQVZFX05DVVJTRVNfVEVSTV9IKQorI2luY2x1ZGUgPG5jdXJzZXMvdGVybS5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RFUk1fSAorI2luY2x1ZGUgPHRlcm0uaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZl0sCisJCQlbCisjaWZuZGVmICR7Y2ZfZnVuY30KK2xvbmcgZm9vID0gKGxvbmcpKCYke2NmX2Z1bmN9KTsKKyR7Y2ZfY3ZfbWFpbl9yZXR1cm4tcmV0dXJufShmb28gPT0gMCk7CisjZW5kaWYKKwkJCV0sCisJCQlbY2ZfcmVzdWx0PXllc10sCisJCQlbY2ZfcmVzdWx0PW5vXSkKKwkJZmkKKwkJZXZhbCAnY2ZfY3ZfZnVuY18nJGNmX2Z1bmMnPSRjZl9yZXN1bHQnCisJXSkKKwkjIHVzZSB0aGUgY29tcHV0ZWQvcmV0cmlldmVkIGNhY2hlLXZhbHVlOgorCWV2YWwgJ2NmX3Jlc3VsdD0kY2ZfY3ZfZnVuY18nJGNmX2Z1bmMKKwlBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCisJaWYgdGVzdCAkY2ZfcmVzdWx0ICE9IG5vOyB0aGVuCisJCUFDX0RFRklORV9VTlFVT1RFRChIQVZFXyR7Y2ZfdHJfZnVuY30pCisJZmkKK2RvbmUKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1VSU0VTX0hFQURFUiB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDUvMTIvMzEgMTM6Mjg6MjUKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCBhICJjdXJzZXMiIGhlYWRlciBmaWxlLCBlLmcsLiAiY3Vyc2VzLmgiLCBvciBvbmUgb2YgdGhlIG1vcmUgY29tbW9uCitkbmwgdmFyaWF0aW9ucyBvZiBuY3Vyc2VzJyBpbnN0YWxscy4KK2RubAorZG5sIFNlZSBhbHNvIENGX05DVVJTRVNfSEVBREVSLCB3aGljaCBzZXRzIHRoZSBzYW1lIGNhY2hlIHZhcmlhYmxlLgorQUNfREVGVU4oW0NGX0NVUlNFU19IRUFERVJdLFsKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycyxjZl9jdl9uY3Vyc2VzX2hlYWRlcixbCitjZl9jdl9uY3Vyc2VzX2hlYWRlcj1ub25lCitmb3IgY2ZfaGVhZGVyIGluIFwKKwljdXJzZXMuaCBcCisJbmN1cnNlcy5oIFwKKwluY3Vyc2VzL2N1cnNlcy5oIFwKKwluY3Vyc2VzL25jdXJzZXMuaAorZG8KK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8JHtjZl9oZWFkZXJ9Pl0sCisJW2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApXSwKKwlbY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX2hlYWRlcjsgYnJlYWtdLFtdKQorZG9uZQorXSkKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiA9IG5vbmUgOyB0aGVuCisJQUNfTVNHX0VSUk9SKE5vIGN1cnNlcyBoZWFkZXItZmlsZXMgZm91bmQpCitmaQorCisjIGNoZWF0LCB0byBnZXQgdGhlIHJpZ2h0ICNkZWZpbmUncyBmb3IgSEFWRV9OQ1VSU0VTX0gsIGV0Yy4KK0FDX0NIRUNLX0hFQURFUlMoJGNmX2N2X25jdXJzZXNfaGVhZGVyKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DVVJTRVNfTElCUyB2ZXJzaW9uOiAyNiB1cGRhdGVkOiAyMDA3LzA3LzI5IDEwOjMyOjQwCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBMb29rIGZvciB0aGUgY3Vyc2VzIGxpYnJhcmllcy4gIE9sZGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgbWF5IHJlcXVpcmUKK2RubCB0ZXJtY2FwL3Rlcm1saWIgdG8gYmUgbGlua2VkIGFzIHdlbGwuICBDYWxsIENGX0NVUlNFU19DUFBGTEFHUyBmaXJzdC4KK0FDX0RFRlVOKFtDRl9DVVJTRVNfTElCU10sWworCitBQ19SRVFVSVJFKFtDRl9DVVJTRVNfQ1BQRkxBR1NdKWRubAorQUNfTVNHX0NIRUNLSU5HKGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgbGlicmFyaWVzKQorQUNfVFJZX0xJTksoWyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLAorICAgIFtpbml0c2NyKCk7IHRnb3RvKCI/IiwgMCwwKV0sCisgICAgY2ZfcmVzdWx0PXllcywKKyAgICBjZl9yZXN1bHQ9bm8pCitBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCisKK2lmIHRlc3QgIiRjZl9yZXN1bHQiID0gbm8gOyB0aGVuCitjYXNlICRob3N0X29zIGluICModmkKK2ZyZWVic2QqKSAjKHZpCisgICAgQUNfQ0hFQ0tfTElCKG15dGluZm8sdGdvdG8sW0xJQlM9Ii1sbXl0aW5mbyAkTElCUyJdKQorICAgIDs7CitocHV4MTAuKikgIyh2aQorICAgIEFDX0NIRUNLX0xJQihjdXJfY29scixpbml0c2NyLFsKKyAgICAgICAgTElCUz0iLWxjdXJfY29sciAkTElCUyIKKyAgICAgICAgYWNfY3ZfZnVuY19pbml0c2NyPXllcworICAgICAgICBdLFsKKyAgICBBQ19DSEVDS19MSUIoSGN1cnNlcyxpbml0c2NyLFsKKyAgICAgICAgIyBIUCdzIGhlYWRlciB1c2VzIF9fSFBfQ1VSU0VTLCBidXQgdXNlciBjbGFpbXMgX0hQX0NVUlNFUy4KKyAgICAgICAgTElCUz0iLWxIY3Vyc2VzICRMSUJTIgorICAgICAgICBDUFBGTEFHUz0iLURfX0hQX0NVUlNFUyAtRF9IUF9DVVJTRVMgJENQUEZMQUdTIgorICAgICAgICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCisgICAgICAgIF0pXSkKKyAgICA7OworbGludXgqKSAjIFN1c2UgTGludXggZG9lcyBub3QgZm9sbG93IC91c3IvbGliIGNvbnZlbnRpb24KKyAgICBDRl9BRERfTElCRElSKC9saWIpCisgICAgOzsKK3N1bm9zMyp8c3Vub3M0KikKKyAgICBpZiB0ZXN0IC1kIC91c3IvNWxpYiA7IHRoZW4KKyAgICAgIENGX0FERF9MSUJESVIoL3Vzci81bGliKQorICAgICAgTElCUz0iJExJQlMgLWxjdXJzZXMgLWx0ZXJtY2FwIgorICAgIGZpCisgICAgYWNfY3ZfZnVuY19pbml0c2NyPXllcworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgIi4kYWNfY3ZfZnVuY19pbml0c2NyIiAhPSAueWVzIDsgdGhlbgorICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgY2ZfdGVybV9saWI9IiIKKyAgICBjZl9jdXJzX2xpYj0iIgorCisgICAgaWYgdGVzdCAiLiR7Y2ZfY3ZfbmN1cnNlc192ZXJzaW9uLW5vfSIgIT0gLm5vCisgICAgdGhlbgorICAgICAgICBjZl9jaGVja19saXN0PSJuY3Vyc2VzIGN1cnNlcyBjdXJzZXNYIgorICAgIGVsc2UKKyAgICAgICAgY2ZfY2hlY2tfbGlzdD0iY3Vyc2VzWCBjdXJzZXMgbmN1cnNlcyIKKyAgICBmaQorCisgICAgIyBDaGVjayBmb3IgbGlicmFyeSBjb250YWluaW5nIHRnb3RvLiAgRG8gdGhpcyBiZWZvcmUgY3Vyc2VzIGxpYnJhcnkKKyAgICAjIGJlY2F1c2UgaXQgbWF5IGJlIG5lZWRlZCB0byBsaW5rIHRoZSB0ZXN0LWNhc2UgZm9yIGluaXRzY3IuCisgICAgQUNfQ0hFQ0tfRlVOQyh0Z290byxbY2ZfdGVybV9saWI9cHJlZGVmaW5lZF0sWworICAgICAgICBmb3IgY2ZfdGVybV9saWIgaW4gJGNmX2NoZWNrX2xpc3QgdGVybWNhcCB0ZXJtbGliIHVua25vd24KKyAgICAgICAgZG8KKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQigkY2ZfdGVybV9saWIsdGdvdG8sW2JyZWFrXSkKKyAgICAgICAgZG9uZQorICAgIF0pCisKKyAgICAjIENoZWNrIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgaW5pdHNjcgorICAgIHRlc3QgIiRjZl90ZXJtX2xpYiIgIT0gcHJlZGVmaW5lZCAmJiB0ZXN0ICIkY2ZfdGVybV9saWIiICE9IHVua25vd24gJiYgTElCUz0iLWwkY2ZfdGVybV9saWIgJGNmX3NhdmVfTElCUyIKKyAgICBmb3IgY2ZfY3Vyc19saWIgaW4gJGNmX2NoZWNrX2xpc3QgeGN1cnNlcyBqY3Vyc2VzIHVua25vd24KKyAgICBkbworICAgICAgICBBQ19DSEVDS19MSUIoJGNmX2N1cnNfbGliLGluaXRzY3IsW2JyZWFrXSkKKyAgICBkb25lCisgICAgdGVzdCAkY2ZfY3Vyc19saWIgPSB1bmtub3duICYmIEFDX0VSUk9SKG5vIGN1cnNlcyBsaWJyYXJ5IGZvdW5kKQorCisgICAgTElCUz0iLWwkY2ZfY3Vyc19saWIgJGNmX3NhdmVfTElCUyIKKyAgICBpZiB0ZXN0ICIkY2ZfdGVybV9saWIiID0gdW5rbm93biA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKGlmIHdlIGNhbiBsaW5rIHdpdGggJGNmX2N1cnNfbGliIGxpYnJhcnkpCisgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKKyAgICAgICAgICAgIFtpbml0c2NyKCldLAorICAgICAgICAgICAgW2NmX3Jlc3VsdD15ZXNdLAorICAgICAgICAgICAgW2NmX3Jlc3VsdD1ub10pCisgICAgICAgIEFDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKKyAgICAgICAgdGVzdCAkY2ZfcmVzdWx0ID0gbm8gJiYgQUNfRVJST1IoQ2Fubm90IGxpbmsgY3Vyc2VzIGxpYnJhcnkpCisgICAgZWxpZiB0ZXN0ICIkY2ZfY3Vyc19saWIiID0gIiRjZl90ZXJtX2xpYiIgOyB0aGVuCisgICAgICAgIDoKKyAgICBlbGlmIHRlc3QgIiRjZl90ZXJtX2xpYiIgIT0gcHJlZGVmaW5lZCA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKGlmIHdlIG5lZWQgYm90aCAkY2ZfY3Vyc19saWIgYW5kICRjZl90ZXJtX2xpYiBsaWJyYXJpZXMpCisgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKKyAgICAgICAgICAgIFtpbml0c2NyKCk7IHRnb3RvKChjaGFyICopMCwgMCwgMCk7XSwKKyAgICAgICAgICAgIFtjZl9yZXN1bHQ9bm9dLAorICAgICAgICAgICAgWworICAgICAgICAgICAgTElCUz0iLWwkY2ZfY3Vyc19saWIgLWwkY2ZfdGVybV9saWIgJGNmX3NhdmVfTElCUyIKKyAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKKyAgICAgICAgICAgICAgICBbaW5pdHNjcigpXSwKKyAgICAgICAgICAgICAgICBbY2ZfcmVzdWx0PXllc10sCisgICAgICAgICAgICAgICAgW2NmX3Jlc3VsdD1lcnJvcl0pCisgICAgICAgICAgICBdKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCisgICAgZmkKK2ZpCitmaQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NVUlNFU19URVJNX0ggdmVyc2lvbjogNiB1cGRhdGVkOiAyMDAzLzExLzA2IDE5OjU5OjU3CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNWcjQgY3Vyc2VzIHNob3VsZCBoYXZlIHRlcm0uaCBhcyB3ZWxsICh3aGVyZSBpdCBwdXRzIHRoZSBkZWZpbml0aW9ucyBvZgorZG5sIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlKS4gIFRoaXMgbWF5IG5vdCBiZSB0cnVlIGluIG9sZC9icm9rZW4gaW1wbGVtZW50YXRpb25zLAorZG5sIGFzIHdlbGwgYXMgaW4gbWlzY29uZmlndXJlZCBzeXN0ZW1zIChlLmcuLCBnY2MgY29uZmlndXJlZCBmb3IgU29sYXJpcyAyLjQKK2RubCBydW5uaW5nIHdpdGggU29sYXJpcyAyLjUuMSkuCitBQ19ERUZVTihbQ0ZfQ1VSU0VTX1RFUk1fSF0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgdGVybS5oLCBjZl9jdl90ZXJtX2hlYWRlcixbCisKK0FDX1JFUVVJUkUoW0NGX0NVUlNFU19DUFBGTEFHU10pZG5sCisjIElmIHdlIGZvdW5kIDxuY3Vyc2VzL2N1cnNlcy5oPiwgbG9vayBmb3IgPG5jdXJzZXMvdGVybS5oPiwgYnV0IGFsd2F5cyBsb29rCisjIGZvciA8dGVybS5oPiBpZiB3ZSBkbyBub3QgZmluZCB0aGUgdmFyaWFudC4KK2ZvciBjZl9oZWFkZXIgaW4gXAorCWBlY2hvICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9IHwgc2VkIC1lICdzJS8uKiUvJSdgdGVybS5oIFwKKwl0ZXJtLmgKK2RvCisJQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI2luY2x1ZGUgPCR7Y2ZfaGVhZGVyfT5dLAorCVtXSU5ET1cgKnhdLAorCVtjZl9jdl90ZXJtX2hlYWRlcj0kY2ZfaGVhZGVyCisJIGJyZWFrXSwKKwlbY2ZfY3ZfdGVybV9oZWFkZXI9bm9dKQorZG9uZQorXSkKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyh2aQordGVybS5oKSAjKHZpCisJQUNfREVGSU5FKEhBVkVfVEVSTV9IKQorCTs7CituY3Vyc2VzL3Rlcm0uaCkKKwlBQ19ERUZJTkUoSEFWRV9OQ1VSU0VTX1RFUk1fSCkKKwk7OworbmN1cnNlc3cvdGVybS5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNXX1RFUk1fSCkKKwk7OworZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DVVJTRVNfV0FDU19NQVAgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAzLzA1LzE3IDIyOjE5OjAyCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGxpa2VseSB2YWx1ZXMgb2Ygd2Fjc19tYXBbXToKK0FDX0RFRlVOKFtDRl9DVVJTRVNfV0FDU19NQVBdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIHdpZGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgYXJyYXksIGNmX2N2X2N1cnNlc193YWNzX21hcCxbCisJY2ZfY3ZfY3Vyc2VzX3dhY3NfbWFwPXVua25vd24KKwlmb3IgbmFtZSBpbiB3YWNzX21hcCBfd2Fjc19tYXAgX193YWNzX21hcCBfbmNfd2FjcworCWRvCisJQUNfVFJZX0xJTksoWworI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNlbmRpZgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sCisJWyRuYW1lWydrJ10gPSAqV0FDU19QTFVTXSwKKwlbY2ZfY3ZfY3Vyc2VzX3dhY3NfbWFwPSRuYW1lCisJIGJyZWFrXSkKKwlkb25lXSkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRElSTkFNRSB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDIvMTIvMjEgMTk6MjU6NTIKK2RubCAtLS0tLS0tLS0tCitkbmwgImRpcm5hbWUiIGlzIG5vdCBwb3J0YWJsZSwgc28gd2UgZmFrZSBpdCB3aXRoIGEgc2hlbGwgc2NyaXB0LgorQUNfREVGVU4oW0NGX0RJUk5BTUVdLFskMT1gZWNobyAkMiB8IHNlZCAtZSAncyUvW1teL11dKiQlJSdgXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9ESVNBQkxFX0VDSE8gdmVyc2lvbjogMTAgdXBkYXRlZDogMjAwMy8wNC8xNyAyMjoyNzoxMQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIFlvdSBjYW4gYWx3YXlzIHVzZSAibWFrZSAtbiIgdG8gc2VlIHRoZSBhY3R1YWwgb3B0aW9ucywgYnV0IGl0J3MgaGFyZCB0bworZG5sIHBpY2sgb3V0L2FuYWx5emUgd2FybmluZyBtZXNzYWdlcyB3aGVuIHRoZSBjb21waWxlLWxpbmUgaXMgbG9uZy4KK2RubAorZG5sIFNldHM6CitkbmwJRUNIT19MVCAtIHN5bWJvbCB0byBjb250cm9sIGlmIGxpYnRvb2wgaXMgdmVyYm9zZQorZG5sCUVDSE9fTEQgLSBzeW1ib2wgdG8gcHJlZml4ICJjYyAtbyIgbGluZXMKK2RubAlSVUxFX0NDIC0gc3ltYm9sIHRvIHB1dCBiZWZvcmUgaW1wbGljaXQgImNjIC1jIiBsaW5lcyAoZS5nLiwgLmMubykKK2RubAlTSE9XX0NDIC0gc3ltYm9sIHRvIHB1dCBiZWZvcmUgZXhwbGljaXQgImNjIC1jIiBsaW5lcworZG5sCUVDSE9fQ0MgLSBzeW1ib2wgdG8gcHV0IGJlZm9yZSBhbnkgImNjIiBsaW5lCitkbmwKK0FDX0RFRlVOKFtDRl9ESVNBQkxFX0VDSE9dLFsKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBzZWUgbG9uZyBjb21waWxpbmcgbWVzc2FnZXMpCitDRl9BUkdfRElTQUJMRShlY2hvLAorCVsgIC0tZGlzYWJsZS1lY2hvICAgICAgICAgIGRpc3BsYXkgImNvbXBpbGluZyIgY29tbWFuZHNdLAorCVsKKyAgICBFQ0hPX0xUPSctLXNpbGVudCcKKyAgICBFQ0hPX0xEPSdAZWNobyBsaW5raW5nIFskXUA7JworICAgIFJVTEVfQ0M9JwlAZWNobyBjb21waWxpbmcgWyRdPCcKKyAgICBTSE9XX0NDPScJQGVjaG8gY29tcGlsaW5nIFskXUAnCisgICAgRUNIT19DQz0nQCcKK10sWworICAgIEVDSE9fTFQ9JycKKyAgICBFQ0hPX0xEPScnCisgICAgUlVMRV9DQz0nIyBjb21waWxpbmcnCisgICAgU0hPV19DQz0nIyBjb21waWxpbmcnCisgICAgRUNIT19DQz0nJworXSkKK0FDX01TR19SRVNVTFQoJGVuYWJsZXZhbCkKK0FDX1NVQlNUKEVDSE9fTFQpCitBQ19TVUJTVChFQ0hPX0xEKQorQUNfU1VCU1QoUlVMRV9DQykKK0FDX1NVQlNUKFNIT1dfQ0MpCitBQ19TVUJTVChFQ0hPX0NDKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9FTkFCTEVfV0FSTklOR1MgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAzLzA1LzI0IDE0OjI0OjI5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uZmlndXJlLW9wdGlvbiB0byBlbmFibGUgZ2NjIHdhcm5pbmdzCitBQ19ERUZVTihbQ0ZfRU5BQkxFX1dBUk5JTkdTXSxbCitpZiAoIHRlc3QgIiRHQ0MiID0geWVzIHx8IHRlc3QgIiRHWFgiID0geWVzICkKK3RoZW4KK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB0dXJuIG9uIGdjYyB3YXJuaW5ncykKK0NGX0FSR19FTkFCTEUod2FybmluZ3MsCisJWyAgLS1lbmFibGUtd2FybmluZ3MgICAgICAgdGVzdDogdHVybiBvbiBnY2MgY29tcGlsZXIgd2FybmluZ3NdLAorCVt3aXRoX3dhcm5pbmdzPXllc10sCisJW3dpdGhfd2FybmluZ3M9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF93YXJuaW5ncykKK2lmIHRlc3QgIiR3aXRoX3dhcm5pbmdzIiA9ICJ5ZXMiCit0aGVuCisJQ0ZfR0NDX1dBUk5JTkdTCitmaQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRklORF9MSUJSQVJZIHZlcnNpb246IDggdXBkYXRlZDogMjAwNC8xMS8yMyAyMDoxNDo1OAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIExvb2sgZm9yIGEgbm9uLXN0YW5kYXJkIGxpYnJhcnksIGdpdmVuIHBhcmFtZXRlcnMgZm9yIEFDX1RSWV9MSU5LLiAgV2UKK2RubCBwcmVmZXIgYSBzdGFuZGFyZCBsb2NhdGlvbiwgYW5kIHVzZSAtTCBvcHRpb25zIG9ubHkgaWYgd2UgZG8gbm90IGZpbmQgdGhlCitkbmwgbGlicmFyeSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBsb2NhdGlvbihzKS4KK2RubAkkMSA9IGxpYnJhcnkgbmFtZQorZG5sCSQyID0gbGlicmFyeSBjbGFzcywgdXN1YWxseSB0aGUgc2FtZSBhcyBsaWJyYXJ5IG5hbWUKK2RubAkkMyA9IGluY2x1ZGVzCitkbmwJJDQgPSBjb2RlIGZyYWdtZW50IHRvIGNvbXBpbGUvbGluaworZG5sCSQ1ID0gY29ycmVzcG9uZGluZyBmdW5jdGlvbi1uYW1lCitkbmwJJDYgPSBmbGFnLCBub25udWxsIGlmIGZhaWx1cmUgc2hvdWxkIG5vdCBjYXVzZSBhbiBlcnJvci1leGl0CitkbmwKK2RubCBTZXRzIHRoZSB2YXJpYWJsZSAiJGNmX2xpYmRpciIgYXMgYSBzaWRlLWVmZmVjdCwgc28gd2UgY2FuIHNlZSBpZiB3ZSBoYWQKK2RubCB0byB1c2UgYSAtTCBvcHRpb24uCitBQ19ERUZVTihbQ0ZfRklORF9MSUJSQVJZXSwKK1sKKwlldmFsICdjZl9jdl9oYXZlX2xpYl8nJDEnPW5vJworCWNmX2xpYmRpcj0iIgorCUFDX0NIRUNLX0ZVTkMoJDUsCisJCWV2YWwgJ2NmX2N2X2hhdmVfbGliXyckMSc9eWVzJyxbCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCUFDX01TR19DSEVDS0lORyhmb3IgJDUgaW4gLWwkMSkKKwkJTElCUz0iLWwkMSAkTElCUyIKKwkJQUNfVFJZX0xJTksoWyQzXSxbJDRdLAorCQkJW0FDX01TR19SRVNVTFQoeWVzKQorCQkJIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckMSc9eWVzJworCQkJXSwKKwkJCVtBQ19NU0dfUkVTVUxUKG5vKQorCQkJQ0ZfTElCUkFSWV9QQVRIKGNmX3NlYXJjaCwkMikKKwkJCWZvciBjZl9saWJkaXIgaW4gJGNmX3NlYXJjaAorCQkJZG8KKwkJCQlBQ19NU0dfQ0hFQ0tJTkcoZm9yIC1sJDEgaW4gJGNmX2xpYmRpcikKKwkJCQlMSUJTPSItTCRjZl9saWJkaXIgLWwkMSAkY2Zfc2F2ZV9MSUJTIgorCQkJCUFDX1RSWV9MSU5LKFskM10sWyQ0XSwKKwkJCQkJW0FDX01TR19SRVNVTFQoeWVzKQorCQkJIAkJIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckMSc9eWVzJworCQkJCQkgYnJlYWtdLAorCQkJCQlbQUNfTVNHX1JFU1VMVChubykKKwkJCQkJIExJQlM9IiRjZl9zYXZlX0xJQlMiXSkKKwkJCWRvbmUKKwkJCV0pCisJCV0pCitldmFsICdjZl9mb3VuZF9saWJyYXJ5PVskXWNmX2N2X2hhdmVfbGliXyckMQoraWZlbHNlKCQ2LCxbCitpZiB0ZXN0ICRjZl9mb3VuZF9saWJyYXJ5ID0gbm8gOyB0aGVuCisJQUNfRVJST1IoQ2Fubm90IGxpbmsgJDEgbGlicmFyeSkKK2ZpCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX0NVUlNFU19WRVJTSU9OIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNy8wNC8yOCAwOToxNTo1NQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTb2xhcmlzIGhhcyBhIGRhdGEgaXRlbSAnY3Vyc2VzX3ZlcnNpb24nLCB3aGljaCBjb25mdXNlcyBBQ19DSEVDS19GVU5DUy4KK2RubCBJdCdzIGEgY2hhcmFjdGVyIHN0cmluZyAiU1ZSNCIsIG5vdCBkb2N1bWVudGVkLgorQUNfREVGVU4oW0NGX0ZVTkNfQ1VSU0VTX1ZFUlNJT05dLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIGZ1bmN0aW9uIGN1cnNlc192ZXJzaW9uLCBjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uLFsKK0FDX1RSWV9SVU4oWworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKQoreworCWNoYXIgdGVtcFsxMDI0XTsKKwlzcHJpbnRmKHRlbXAsICIlc1xuIiwgY3Vyc2VzX3ZlcnNpb24oKSk7CisJJHtjZl9jdl9tYWluX3JldHVybi1yZXR1cm59KDApOworfV0KKyxbY2ZfY3ZfZnVuY19jdXJzZXNfdmVyc2lvbj15ZXNdCissW2NmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb249bm9dCissW2NmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb249dW5rbm93bl0pCitybSAtZiBjb3JlXSkKK3Rlc3QgIiRjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uIiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9DVVJTRVNfVkVSU0lPTikKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR0NDX0FUVFJJQlVURVMgdmVyc2lvbjogMTEgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBmb3IgYXZhaWxhYmlsaXR5IG9mIHVzZWZ1bCBnY2MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzIHRvIHF1aWV0CitkbmwgY29tcGlsZXIgd2FybmluZ3MuICBUaG91Z2ggdXNlZnVsLCBub3QgYWxsIGFyZSBzdXBwb3J0ZWQgLS0gYW5kIGNvbnRyYXJ5CitkbmwgdG8gZG9jdW1lbnRhdGlvbiwgdW5yZWNvZ25pemVkIGRpcmVjdGl2ZXMgY2F1c2Ugb2xkZXIgY29tcGlsZXJzIHRvIGJhcmYuCitBQ19ERUZVTihbQ0ZfR0NDX0FUVFJJQlVURVNdLAorWworaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KK2NhdCA+IGNvbmZ0ZXN0LmkgPDxFT0YKKyNpZm5kZWYgR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfTk9SRVRVUk4KKyNkZWZpbmUgR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfVU5VU0VECisjZGVmaW5lIEdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCitFT0YKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzXSkKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiJHthc19tZS1jb25maWd1cmV9IgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaCIKKyNpbmNsdWRlICJjb25mdGVzdC5pIgorI2lmCUdDQ19QUklOVEYKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSAvKm5vdGhpbmcqLworI2VuZGlmCisjaWYJR0NDX1NDQU5GCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICAvKm5vdGhpbmcqLworI2VuZGlmCitleHRlcm4gdm9pZCB3b3coY2hhciAqLC4uLikgR0NDX1NDQU5GTElLRSgxLDIpOworZXh0ZXJuIHZvaWQgb29wcyhjaGFyICosLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpIEdDQ19OT1JFVFVSTjsKK2V4dGVybiB2b2lkIGZvbyh2b2lkKSBHQ0NfTk9SRVRVUk47CitpbnQgbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W1tdXSBHQ0NfVU5VU0VEKSB7IHJldHVybiAwOyB9CitFT0YKKwlmb3IgY2ZfYXR0cmlidXRlIGluIHNjYW5mIHByaW50ZiB1bnVzZWQgbm9yZXR1cm4KKwlkbworCQlDRl9VUFBFUihjZl9BVFRSSUJVVEUsJGNmX2F0dHJpYnV0ZSkKKwkJY2ZfZGlyZWN0aXZlPSJfX2F0dHJpYnV0ZV9fKCgkY2ZfYXR0cmlidXRlKSkiCisJCWVjaG8gImNoZWNraW5nIGZvciAkQ0MgJGNmX2RpcmVjdGl2ZSIgMT4mQUNfRkRfQ0MKKwkJY2FzZSAkY2ZfYXR0cmlidXRlIGluCisJCXNjYW5mfHByaW50ZikKKwkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFIDEKK0VPRgorCQkJOzsKKwkJKikKKwkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFICRjZl9kaXJlY3RpdmUKK0VPRgorCQkJOzsKKwkJZXNhYworCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uICRjZl9hdHRyaWJ1dGUpCisJCQljYXQgY29uZnRlc3QuaCA+PmNvbmZkZWZzLmgKKwkJZmkKKwlkb25lCitlbHNlCisJZmdyZXAgZGVmaW5lIGNvbmZ0ZXN0LmkgPj5jb25mZGVmcy5oCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR0NDX1ZFUlNJT04gdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA1LzA4LzI3IDA5OjUzOjQyCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIHZlcnNpb24gb2YgZ2NjCitBQ19ERUZVTihbQ0ZfR0NDX1ZFUlNJT05dLFsKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorR0NDX1ZFUlNJT049bm9uZQoraWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKHZlcnNpb24gb2YgJENDKQorCUdDQ19WRVJTSU9OPSJgJHtDQ30gLS12ZXJzaW9ufCBzZWQgLWUgJzIsJGQnIC1lICdzL14uKihHQ0MpIC8vJyAtZSAncy9eW1teMC05Ll1dKi8vJyAtZSAncy9bW14wLTkuXV0uKi8vJ2AiCisJdGVzdCAteiAiJEdDQ19WRVJTSU9OIiAmJiBHQ0NfVkVSU0lPTj11bmtub3duCisJQUNfTVNHX1JFU1VMVCgkR0NDX1ZFUlNJT04pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HQ0NfV0FSTklOR1MgdmVyc2lvbjogMjIgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB1c2VmdWwgd2FybmluZyBvcHRpb25zLiAgVGhlcmUncyBhIGZldyB0aGF0Citkbmwgd2UgZG9uJ3QgdXNlLCBzaW1wbHkgYmVjYXVzZSB0aGV5J3JlIHRvbyBub2lzeToKK2RubAorZG5sCS1XY29udmVyc2lvbiAodXNlZnVsIGluIG9sZGVyIHZlcnNpb25zIG9mIGdjYywgYnV0IG5vdCBpbiBnY2MgMi43LngpCitkbmwJLVdyZWR1bmRhbnQtZGVjbHMgKHN5c3RlbSBoZWFkZXJzIG1ha2UgdGhpcyB0b28gbm9pc3kpCitkbmwJLVd0cmFkaXRpb25hbCAoY29tYmluZXMgdG9vIG1hbnkgdW5yZWxhdGVkIG1lc3NhZ2VzLCBvbmx5IGEgZmV3IHVzZWZ1bCkKK2RubAktV3dyaXRlLXN0cmluZ3MgKHRvbyBub2lzeSwgYnV0IHNob3VsZCByZXZpZXcgb2NjYXNpb25hbGx5KS4gIFRoaXMKK2RubAkJaXMgZW5hYmxlZCBmb3IgbmN1cnNlcyB1c2luZyAiLS1lbmFibGUtY29uc3QiLgorZG5sCS1wZWRhbnRpYworZG5sCitkbmwgUGFyYW1ldGVyOgorZG5sCSQxIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgZ2NjIHdhcm5pbmcgZmxhZ3MgdGhhdCBhIHBhcnRpY3VsYXIKK2RubAkJYXBwbGljYXRpb24gbWlnaHQgd2FudCB0byB1c2UsIGUuZy4sICJuby11bnVzZWQiIGZvcgorZG5sCQktV25vLXVudXNlZAorZG5sIFNwZWNpYWw6CitkbmwJSWYgJHdpdGhfZXh0X2NvbnN0IGlzICJ5ZXMiLCBhZGQgYSBjaGVjayBmb3IgLVd3cml0ZS1zdHJpbmdzCitkbmwKK0FDX0RFRlVOKFtDRl9HQ0NfV0FSTklOR1NdLAorWworQUNfUkVRVUlSRShbQ0ZfR0NDX1ZFUlNJT05dKQorQ0ZfSU5URUxfQ09NUElMRVIoR0NDLElOVEVMX0NPTVBJTEVSLENGTEFHUykKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICIke2FzX21lLWNvbmZpZ3VyZX0iCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltbXV0pIHsgcmV0dXJuIChhcmd2W1thcmdjLTFdXSA9PSAwKSA7IH0KK0VPRgorCitpZiB0ZXN0ICIkSU5URUxfQ09NUElMRVIiID0geWVzCit0aGVuCisjIFRoZSAiLXdkWFhYIiBvcHRpb25zIHN1cHByZXNzIHdhcm5pbmdzOgorIyByZW1hcmsgIzE0MTk6IGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKKyMgcmVtYXJrICMxNjgyOiBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODM6IGV4cGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4NDogY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxOTM6IHplcm8gdXNlZCBmb3IgdW5kZWZpbmVkIHByZXByb2Nlc3NpbmcgaWRlbnRpZmllcgorIyByZW1hcmsgIzU5MzogdmFyaWFibGUgImN1cnNfc2JfbGVmdF9hcnJvdyIgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorIyByZW1hcmsgIzgxMDogY29udmVyc2lvbiBmcm9tICJpbnQiIHRvICJEaW1lbnNpb249e3Vuc2lnbmVkIHNob3J0fSIgbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworIyByZW1hcmsgIzg2OTogcGFyYW1ldGVyICJ0dyIgd2FzIG5ldmVyIHJlZmVyZW5jZWQKKyMgcmVtYXJrICM5ODE6IG9wZXJhbmRzIGFyZSBldmFsdWF0ZWQgaW4gdW5zcGVjaWZpZWQgb3JkZXIKKyMgd2FybmluZyAjMjY5OiBpbnZhbGlkIGZvcm1hdCBzdHJpbmcgY29udmVyc2lvbgorCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0Mgd2FybmluZyBvcHRpb25zXSkKKwljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlFWFRSQV9DRkxBR1M9Ii1XYWxsIgorCWZvciBjZl9vcHQgaW4gXAorCQl3ZDE0MTkgXAorCQl3ZDE2ODIgXAorCQl3ZDE2ODMgXAorCQl3ZDE2ODQgXAorCQl3ZDE5MyBcCisJCXdkMjc5IFwKKwkJd2Q1OTMgXAorCQl3ZDgxMCBcCisJCXdkODY5IFwKKwkJd2Q5ODEKKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIC0kY2Zfb3B0KQorCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKworZWxpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorCUFDX0NIRUNLSU5HKFtmb3IgJENDIHdhcm5pbmcgb3B0aW9uc10pCisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItVyAtV2FsbCIKKwljZl93YXJuX0NPTlNUPSIiCisJdGVzdCAiJHdpdGhfZXh0X2NvbnN0IiA9IHllcyAmJiBjZl93YXJuX0NPTlNUPSJXd3JpdGUtc3RyaW5ncyIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJV2JhZC1mdW5jdGlvbi1jYXN0IFwKKwkJV2Nhc3QtYWxpZ24gXAorCQlXY2FzdC1xdWFsIFwKKwkJV2lubGluZSBcCisJCVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBcCisJCVdtaXNzaW5nLXByb3RvdHlwZXMgXAorCQlXbmVzdGVkLWV4dGVybnMgXAorCQlXcG9pbnRlci1hcml0aCBcCisJCVdzaGFkb3cgXAorCQlXc3RyaWN0LXByb3RvdHlwZXMgXAorCQlXdW5kZWYgJGNmX3dhcm5fQ09OU1QgJDEKKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIC0kY2Zfb3B0KQorCQkJY2FzZSAkY2Zfb3B0IGluICModmkKKwkJCVdjYXN0LXF1YWwpICModmkKKwkJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EWFRTVFJJTkdERUZJTkVTIgorCQkJCTs7CisJCQlXaW5saW5lKSAjKHZpCisJCQkJY2FzZSAkR0NDX1ZFUlNJT04gaW4KKwkJCQkzLjMqKQorCQkJCQlDRl9WRVJCT1NFKGZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04pCisJCQkJCWNvbnRpbnVlOzsKKwkJCQllc2FjCisJCQkJOzsKKwkJCWVzYWMKKwkJCUVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCitmaQorcm0gLWYgY29uZnRlc3QqCisKK0FDX1NVQlNUKEVYVFJBX0NGTEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR05VX1NPVVJDRSB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDUvMDcvMDkgMTM6MjM6MDcKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UgbXVzdCBkZWZpbmUgX0dOVV9TT1VSQ0UgdG8gZ2V0IGEgcmVhc29uYWJsZSB2YWx1ZSBmb3IKK2RubCBfWE9QRU5fU09VUkNFLCB1cG9uIHdoaWNoIG1hbnkgUE9TSVggZGVmaW5pdGlvbnMgZGVwZW5kLiAgVGhpcyBpcyBhIGRlZmVjdAorZG5sIChvciBtaXNmZWF0dXJlKSBvZiBnbGliYzIsIHdoaWNoIGJyZWFrcyBwb3J0YWJpbGl0eSBvZiBtYW55IGFwcGxpY2F0aW9ucywKK2RubCBzaW5jZSBpdCBpcyBpbnRlcndvdmVuIHdpdGggR05VIGV4dGVuc2lvbnMuCitkbmwKK2RubCBXZWxsLCB5ZXMgd2UgY291bGQgd29yayBhcm91bmQgaXQuLi4KK0FDX0RFRlVOKFtDRl9HTlVfU09VUkNFXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFLGNmX2N2X2dudV9zb3VyY2UsWworQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfZ251X3NvdXJjZT1ub10sCisJW2NmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9HTlVfU09VUkNFIgorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X2dudV9zb3VyY2U9bm9dLAorCVtjZl9jdl9nbnVfc291cmNlPXllc10pCisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCV0pCitdKQordGVzdCAiJGNmX2N2X2dudV9zb3VyY2UiID0geWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSEVBREVSX1BBVEggdmVyc2lvbjogOCB1cGRhdGVkOiAyMDAyLzExLzEwIDE0OjQ2OjU5CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgYSBzZWFyY2gtbGlzdCBmb3IgYSBub25zdGFuZGFyZCBoZWFkZXItZmlsZQorQUNfREVGVU4oW0NGX0hFQURFUl9QQVRIXSwKK1tDRl9TVUJESVJfUEFUSCgkMSwkMixpbmNsdWRlKQordGVzdCAiJGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkaW5jbHVkZWRpciAmJiAgICAkMT0iWyRdJDEgJGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkaW5jbHVkZWRpci8kMiAmJiAkMT0iWyRdJDEgJGluY2x1ZGVkaXIvJDIiCit9CisKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkb2xkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIgICAgJiYgJDE9IlskXSQxICRvbGRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIvJDIgJiYgJDE9IlskXSQxICRvbGRpbmNsdWRlZGlyLyQyIgorfQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0lOSEVSSVRfU0NSSVBUIHZlcnNpb246IDIgdXBkYXRlZDogMjAwMy8wMy8wMSAyMzo1MDo0MgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgSWYgd2UgZG8gbm90IGhhdmUgYSBnaXZlbiBzY3JpcHQsIGxvb2sgZm9yIGl0IGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorQUNfREVGVU4oW0NGX0lOSEVSSVRfU0NSSVBUXSwKK1sKK3Rlc3QgLWYgJDEgfHwgKCB0ZXN0IC1mIC4uLyQxICYmIGNwIC4uLyQxIC4vICkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSU5URUxfQ09NUElMRVIgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA1LzA4LzA2IDE4OjM3OjI5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgZ2l2ZW4gY29tcGlsZXIgaXMgcmVhbGx5IHRoZSBJbnRlbCBjb21waWxlciBmb3IgTGludXguICBJdAorZG5sIHRyaWVzIHRvIGltaXRhdGUgZ2NjLCBidXQgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yIHdoZW4gaXQgZmluZHMgYSBtaXNtYXRjaAorZG5sIGJldHdlZW4gcHJvdG90eXBlcywgZS5nLiwgYXMgZXhlcmNpc2VkIGJ5IENGX01JU1NJTkdfQ0hFQ0suCitkbmwKK2RubCBUaGlzIG1hY3JvIHNob3VsZCBiZSBydW4gInNvb24iIGFmdGVyIEFDX1BST0dfQ0Mgb3IgQUNfUFJPR19DUExVU1BMVVMsIHRvCitkbmwgZW5zdXJlIHRoYXQgaXQgaXMgbm90IG1pc3Rha2VuIGZvciBnY2MvZysrLiAgSXQgaXMgbm9ybWFsbHkgaW52b2tlZCBmcm9tCitkbmwgdGhlIHdyYXBwZXJzIGZvciBnY2MgYW5kIGcrKyB3YXJuaW5ncy4KK2RubAorZG5sICQxID0gR0NDIChkZWZhdWx0KSBvciBHWFgKK2RubCAkMiA9IElOVEVMX0NPTVBJTEVSIChkZWZhdWx0KSBvciBJTlRFTF9DUExVU1BMVVMKK2RubCAkMyA9IENGTEFHUyAoZGVmYXVsdCkgb3IgQ1hYRkxBR1MKK0FDX0RFRlVOKFtDRl9JTlRFTF9DT01QSUxFUl0sWworaWZlbHNlKCQyLCxJTlRFTF9DT01QSUxFUixbJDJdKT1ubworCitpZiB0ZXN0ICIkaWZlbHNlKCQxLCxbJDFdLEdDQykiID0geWVzIDsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4KKwlsaW51eCp8Z251KikKKwkJQUNfTVNHX0NIRUNLSU5HKGlmIHRoaXMgaXMgcmVhbGx5IEludGVsIGlmZWxzZSgkMSxHWFgsQysrLEMpIGNvbXBpbGVyKQorCQljZl9zYXZlX0NGTEFHUz0iJGlmZWxzZSgkMywsQ0ZMQUdTLFskM10pIgorCQlpZmVsc2UoJDMsLENGTEFHUyxbJDNdKT0iJGlmZWxzZSgkMywsQ0ZMQUdTLFskM10pIC1uby1nY2MiCisJCUFDX1RSWV9DT01QSUxFKFtdLFsKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCitdLFtpZmVsc2UoJDIsLElOVEVMX0NPTVBJTEVSLFskMl0pPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtd2UxNDcgLW5vLWdjYyIKK10sW10pCisJCWlmZWxzZSgkMywsQ0ZMQUdTLFskM10pPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCUFDX01TR19SRVNVTFQoJGlmZWxzZSgkMiwsSU5URUxfQ09NUElMRVIsWyQyXSkpCisJCTs7CisJZXNhYworZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElCUkFSWV9QQVRIIHZlcnNpb246IDcgdXBkYXRlZDogMjAwMi8xMS8xMCAxNDo0Njo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGxpYnJhcnktZmlsZQorQUNfREVGVU4oW0NGX0xJQlJBUllfUEFUSF0sCitbQ0ZfU1VCRElSX1BBVEgoJDEsJDIsbGliKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTVNHX0xPRyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tCitkbmwgV3JpdGUgYSBkZWJ1ZyBtZXNzYWdlIHRvIGNvbmZpZy5sb2csIGFsb25nIHdpdGggdGhlIGxpbmUgbnVtYmVyIGluIHRoZQorZG5sIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQ0ZfTVNHX0xPR10sWworZWNobyAiJHthc19tZS1jb25maWd1cmV9Ol9fb2xpbmVfXzogdGVzdGluZyAkKiAuLi4iIDE+JkFDX0ZEX0NDCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05DVVJTRVNfQ0NfQ0hFQ0sgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA3LzA3LzI5IDEwOjM5OjA1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHdlIGNhbiBjb21waWxlIHdpdGggbmN1cnNlcycgaGVhZGVyIGZpbGUKK2RubCAkMSBpcyB0aGUgY2FjaGUgdmFyaWFibGUgdG8gc2V0CitkbmwgJDIgaXMgdGhlIGhlYWRlci1maWxlIHRvIGluY2x1ZGUKK2RubCAkMyBpcyB0aGUgcm9vdCBuYW1lIChuY3Vyc2VzIG9yIG5jdXJzZXN3KQorQUNfREVGVU4oW0NGX05DVVJTRVNfQ0NfQ0hFQ0tdLFsKKwlBQ19UUllfQ09NUElMRShbCitdaWZlbHNlKCQzLG5jdXJzZXN3LFsKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI3VuZGVmICBIQVZFX0xJQlVURjhfSAkvKiBpbiBjYXNlIHdlIHVzZWQgQ0ZfVVRGOF9MSUIgKi8KKyNkZWZpbmUgSEFWRV9MSUJVVEY4X0gJLyogdG8gZm9yY2UgbmN1cnNlcycgaGVhZGVyIGZpbGUgdG8gdXNlIGNjaGFyX3QgKi8KK10pWworI2luY2x1ZGUgPCQyPl0sWworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorXWlmZWxzZSgkMyxuY3Vyc2VzdyxbCisjaWZuZGVmIFdBQ1NfQlNTQgorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorXSlbCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCV0KKwksWyQxPSQyXQorCSxbJDE9bm9dKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX0NQUEZMQUdTIHZlcnNpb246IDE5IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMTM6MzU6MjAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgdGhlIFNWcjQgY3Vyc2VzIGNsb25lICduY3Vyc2VzJyBpbiB0aGUgc3RhbmRhcmQgcGxhY2VzLCBhZGp1c3RpbmcKK2RubCB0aGUgQ1BQRkxBR1MgdmFyaWFibGUgc28gd2UgY2FuIGluY2x1ZGUgaXRzIGhlYWRlci4KK2RubAorZG5sIFRoZSBoZWFkZXIgZmlsZXMgbWF5IGJlIGluc3RhbGxlZCBhcyBlaXRoZXIgY3Vyc2VzLmgsIG9yIG5jdXJzZXMuaCAod291bGQKK2RubCBiZSBvYnNvbGV0ZSwgZXhjZXB0IHRoYXQgc29tZSBwYWNrYWdlcnMgcHJlZmVyIHRoaXMgbmFtZSB0byBkaXN0aW5ndWlzaCBpdAorZG5sIGZyb20gYSAibmF0aXZlIiBjdXJzZXMgaW1wbGVtZW50YXRpb24pLiAgSWYgbm90IGluc3RhbGxlZCBmb3Igb3ZlcndyaXRlLAorZG5sIHRoZSBjdXJzZXMuaCBmaWxlIHdvdWxkIGJlIGluIGFuIG5jdXJzZXMgc3ViZGlyZWN0b3J5IChlLmcuLAorZG5sIC91c3IvaW5jbHVkZS9uY3Vyc2VzKSwgYnV0IHNvbWVvbmUgbWF5IGhhdmUgaW5zdGFsbGVkIG92ZXJ3cml0aW5nIHRoZQorZG5sIHZlbmRvcidzIGN1cnNlcy4gIE9ubHkgdmVyeSBvbGQgdmVyc2lvbnMgKHByZS0xLjkuMmQsIHRoZSBmaXJzdCBhdXRvY29uZidkCitkbmwgdmVyc2lvbikgb2YgbmN1cnNlcyBkb24ndCBkZWZpbmUgZWl0aGVyIF9fTkNVUlNFU19IIG9yIE5DVVJTRVNfVkVSU0lPTiBpbgorZG5sIHRoZSBoZWFkZXIuCitkbmwKK2RubCBJZiB0aGUgaW5zdGFsbGVyIGhhcyBzZXQgJENGTEFHUyBvciAkQ1BQRkxBR1Mgc28gdGhhdCB0aGUgbmN1cnNlcyBoZWFkZXIKK2RubCBpcyBhbHJlYWR5IGluIHRoZSBpbmNsdWRlLXBhdGgsIGRvbid0IGV2ZW4gYm90aGVyIHdpdGggdGhpcywgc2luY2Ugd2UgY2Fubm90CitkbmwgZWFzaWx5IGRldGVybWluZSB3aGljaCBmaWxlIGl0IGlzLiAgSW4gdGhpcyBjYXNlLCBpdCBoYXMgdG8gYmUgPGN1cnNlcy5oPi4KK2RubAorZG5sIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUgbGlicmFyeSwgaW4gY2FzZSBpdCBpcworZG5sIG5vdCBpbnN0YWxsZWQgYXMgdGhlIGRlZmF1bHQgY3Vyc2VzIGxpYnJhcnkuICBUaGF0IGlzIGhvdyB0aGUKK2RubCB3aWRlLWNoYXJhY3RlciB2ZXJzaW9uIG9mIG5jdXJzZXMgaXMgaW5zdGFsbGVkLgorQUNfREVGVU4oW0NGX05DVVJTRVNfQ1BQRkxBR1NdLAorW0FDX1JFUVVJUkUoW0NGX1dJVEhfQ1VSU0VTX0RJUl0pCisKK0FDX1BST1ZJREUoW0NGX0NVUlNFU19DUFBGTEFHU10pZG5sCitjZl9uY3VoZHJfcm9vdD1pZmVsc2UoJDEsLG5jdXJzZXMsJDEpCisKK3Rlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiBcCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiAmJiB7IFwKKyAgQ0ZfQUREX0lOQ0RJUigkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290KQorfQorCitBQ19DQUNIRV9DSEVDSyhmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGgsIGNmX2N2X25jdXJzZXNfaCxbCisJY2ZfaGVhZGVyX2xpc3Q9IiRjZl9uY3VoZHJfcm9vdC9jdXJzZXMuaCAkY2ZfbmN1aGRyX3Jvb3QvbmN1cnNlcy5oIgorCSggdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXMgfHwgdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXN3ICkgJiYgY2ZfaGVhZGVyX2xpc3Q9IiRjZl9oZWFkZXJfbGlzdCBjdXJzZXMuaCBuY3Vyc2VzLmgiCisJZm9yIGNmX2hlYWRlciBpbiAkY2ZfaGVhZGVyX2xpc3QKKwlkbworCQlDRl9OQ1VSU0VTX0NDX0NIRUNLKGNmX2N2X25jdXJzZXNfaCwkY2ZfaGVhZGVyLCQxKQorCQl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyAmJiBicmVhaworCWRvbmUKK10pCisKK0NGX05DVVJTRVNfSEVBREVSCitDRl9URVJNX0hFQURFUgorCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCitBQ19ERUZJTkUoTkNVUlNFUykKKworQ0ZfTkNVUlNFU19WRVJTSU9OCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05DVVJTRVNfSEVBREVSIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8xMi8zMSAxMzoyODozNworZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCBhICJjdXJzZXMiIGhlYWRlciBmaWxlLCBlLmcsLiAiY3Vyc2VzLmgiLCBvciBvbmUgb2YgdGhlIG1vcmUgY29tbW9uCitkbmwgdmFyaWF0aW9ucyBvZiBuY3Vyc2VzJyBpbnN0YWxscy4KK2RubAorZG5sIFNlZSBhbHNvIENGX0NVUlNFU19IRUFERVIsIHdoaWNoIHNldHMgdGhlIHNhbWUgY2FjaGUgdmFyaWFibGUuCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19IRUFERVJdLFsKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaCIgIT0gbm8gOyB0aGVuCisJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX2N2X25jdXJzZXNfaAorZWxzZQorCitBQ19DQUNIRV9DSEVDSyhmb3IgJGNmX25jdWhkcl9yb290IGluY2x1ZGUtcGF0aCwgY2ZfY3ZfbmN1cnNlc19oMixbCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8KKwlDRl9IRUFERVJfUEFUSChjZl9zZWFyY2gsJGNmX25jdWhkcl9yb290KQorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvIHNlYXJjaCBwYXRoICRjZl9zZWFyY2gKKwljZl9zYXZlMl9DUFBGTEFHUz0iJENQUEZMQUdTIgorCWZvciBjZl9pbmNkaXIgaW4gJGNmX3NlYXJjaAorCWRvCisJCUNGX0FERF9JTkNESVIoJGNmX2luY2RpcikKKwkJZm9yIGNmX2hlYWRlciBpbiBcCisJCQluY3Vyc2VzLmggXAorCQkJY3Vyc2VzLmgKKwkJZG8KKwkJCUNGX05DVVJTRVNfQ0NfQ0hFQ0soY2ZfY3ZfbmN1cnNlc19oMiwkY2ZfaGVhZGVyLCQxKQorCQkJaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vIDsgdGhlbgorCQkJCWNmX2N2X25jdXJzZXNfaDI9JGNmX2luY2Rpci8kY2ZfaGVhZGVyCisJCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gJGFjX24gIgkuLi4gZm91bmQgJGFjX2MiIDE+JkFDX0ZEX01TRworCQkJCWJyZWFrCisJCQlmaQorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGVkICRjZl9pbmNkaXIvJGNmX2hlYWRlciIgMT4mQUNfRkRfTVNHCisJCWRvbmUKKwkJQ1BQRkxBR1M9IiRjZl9zYXZlMl9DUFBGTEFHUyIKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiA9IG5vICYmIEFDX0VSUk9SKG5vdCBmb3VuZCkKKwldKQorCisJQ0ZfRElSTkFNRShjZl8xc3RfaW5jZGlyLCRjZl9jdl9uY3Vyc2VzX2gyKQorCWNmX2N2X25jdXJzZXNfaGVhZGVyPWBiYXNlbmFtZSAkY2ZfY3ZfbmN1cnNlc19oMmAKKwlpZiB0ZXN0IGBiYXNlbmFtZSAkY2ZfMXN0X2luY2RpcmAgPSAkY2ZfbmN1aGRyX3Jvb3QgOyB0aGVuCisJCWNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9uY3VoZHJfcm9vdC8kY2ZfY3ZfbmN1cnNlc19oZWFkZXIKKwlmaQorCUNGX0FERF9JTkNESVIoJGNmXzFzdF9pbmNkaXIpCisKK2ZpCisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyBmb3IgbmN1cnNlcy5oCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluICMgKHZpCisqbmN1cnNlcy5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNfSCkKKwk7OworZXNhYworCitjYXNlICRjZl9jdl9uY3Vyc2VzX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy9jdXJzZXMuaHxuY3Vyc2VzL25jdXJzZXMuaCkKKwlBQ19ERUZJTkUoSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCkKKwk7OworbmN1cnNlc3cvY3Vyc2VzLmh8bmN1cnNlc3cvbmN1cnNlcy5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNXX05DVVJTRVNfSCkKKwk7OworZXNhYworCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05DVVJTRVNfTElCUyB2ZXJzaW9uOiAxMyB1cGRhdGVkOiAyMDA3LzA3LzI5IDEwOjI5OjIwCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgdGhlIG5jdXJzZXMgbGlicmFyeS4gIFRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgb24gTGludXgsCitkbmwgYmVjYXVzZSBpdCBtYXkgYmUgbGlua2VkIHdpdGggdGhlIGdwbSAoZ2VuZXJhbCBwdXJwb3NlIG1vdXNlKSBsaWJyYXJ5LgorZG5sIFNvbWUgZGlzdHJpYnV0aW9ucyBoYXZlIGdwbSBsaW5rZWQgd2l0aCAoYnNkKSBjdXJzZXMsIHdoaWNoIG1ha2VzIGl0CitkbmwgdW51c2FibGUgd2l0aCBuY3Vyc2VzLiAgSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBsaW5rIHdpdGggZ3BtIHVubGVzcworZG5sIG5jdXJzZXMgaGFzIGEgZGVwZW5kZW5jeSwgc2luY2UgZ3BtIGlzIG5vcm1hbGx5IHNldCB1cCBhcyBhIHNoYXJlZCBsaWJyYXJ5LAorZG5sIGFuZCB0aGUgbGlua2VyIHdpbGwgcmVjb3JkIGEgZGVwZW5kZW5jeS4KK2RubAorZG5sIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUgbGlicmFyeSwgaW4gY2FzZSBpdCBpcworZG5sIG5vdCBpbnN0YWxsZWQgYXMgdGhlIGRlZmF1bHQgY3Vyc2VzIGxpYnJhcnkuICBUaGF0IGlzIGhvdyB0aGUKK2RubCB3aWRlLWNoYXJhY3RlciB2ZXJzaW9uIG9mIG5jdXJzZXMgaXMgaW5zdGFsbGVkLgorQUNfREVGVU4oW0NGX05DVVJTRVNfTElCU10sCitbQUNfUkVRVUlSRShbQ0ZfTkNVUlNFU19DUFBGTEFHU10pCisKK2NmX25jdWxpYl9yb290PWlmZWxzZSgkMSwsbmN1cnNlcywkMSkKKwkjIFRoaXMgd29ya3MsIGV4Y2VwdCBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBmaW5kIGdwbSwgYnV0CisJIyBuY3Vyc2VzIGlzIGluIGEgbm9uc3RhbmRhcmQgbG9jYXRpb24gdmlhICRMSUJTLCBhbmQgd2UgcmVhbGx5IHdhbnQKKwkjIHRvIGxpbmsgZ3BtLgorY2ZfbmN1cnNlc19MSUJTPSIiCitjZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorQUNfQ0hFQ0tfTElCKGdwbSxHcG1fT3BlbiwKKwlbQUNfQ0hFQ0tfTElCKGdwbSxpbml0c2NyLAorCQlbTElCUz0iJGNmX25jdXJzZXNfU0FWRSJdLAorCQlbY2ZfbmN1cnNlc19MSUJTPSItbGdwbSJdKV0pCisKK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorZnJlZWJzZCopCisJIyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgbGlua2luZyBhZ2FpbnN0IGFuIG9ic29sZXRlCisJIyB2ZXJzaW9uIG9mIG5jdXJzZXMgKGJ1dCBpdCBzaG91bGQgZG8gbm8gaGFybSwgc2luY2UgaXQncyBzdGF0aWMpLgorCWlmIHRlc3QgIiRjZl9uY3VsaWJfcm9vdCIgPSBuY3Vyc2VzIDsgdGhlbgorCQlBQ19DSEVDS19MSUIobXl0aW5mbyx0Z290byxbY2ZfbmN1cnNlc19MSUJTPSItbG15dGluZm8gJGNmX25jdXJzZXNfTElCUyJdKQorCWZpCisJOzsKK2VzYWMKKworTElCUz0iJGNmX25jdXJzZXNfTElCUyAkTElCUyIKKworaWYgKCB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgdGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgKQordGhlbgorCUNGX0FERF9MSUJESVIoJGNmX2N2X2N1cnNlc19kaXIvbGliKQorCUxJQlM9Ii1sJGNmX25jdWxpYl9yb290ICRMSUJTIgorZWxzZQorCUNGX0ZJTkRfTElCUkFSWSgkY2ZfbmN1bGliX3Jvb3QsJGNmX25jdWxpYl9yb290LAorCQlbI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sCisJCVtpbml0c2NyKCldLAorCQlpbml0c2NyKQorZmkKKworaWYgdGVzdCAtbiAiJGNmX25jdXJzZXNfTElCUyIgOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKGlmIHdlIGNhbiBsaW5rICRjZl9uY3VsaWJfcm9vdCB3aXRob3V0ICRjZl9uY3Vyc2VzX0xJQlMpCisJY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKKwlmb3IgcCBpbiAkY2ZfbmN1cnNlc19MSUJTIDsgZG8KKwkJcT1gZWNobyAkTElCUyB8IHNlZCAtZSAicyUkcCAlJSIgLWUgInMlJHAkJSUiYAorCQlpZiB0ZXN0ICIkcSIgIT0gIiRMSUJTIiA7IHRoZW4KKwkJCUxJQlM9IiRxIgorCQlmaQorCWRvbmUKKwlBQ19UUllfTElOSyhbI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sCisJCVtpbml0c2NyKCk7IG1vdXNlbWFzaygwLDApOyB0Z290bygoY2hhciAqKTAsIDAsIDApO10sCisJCVtBQ19NU0dfUkVTVUxUKHllcyldLAorCQlbQUNfTVNHX1JFU1VMVChubykKKwkJIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiXSkKK2ZpCisKK0NGX1VQUEVSKGNmX25jdWxpYl9ST09ULEhBVkVfTElCJGNmX25jdWxpYl9yb290KQorQUNfREVGSU5FX1VOUVVPVEVEKCRjZl9uY3VsaWJfUk9PVCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTkNVUlNFU19WRVJTSU9OIHZlcnNpb246IDEyIHVwZGF0ZWQ6IDIwMDcvMDQvMjggMDk6MTU6NTUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgdGhlIHZlcnNpb24gb2YgbmN1cnNlcywgdG8gYWlkIGluIHJlcG9ydGluZyBidWdzLCBldGMuCitkbmwgQ2FsbCBDRl9DVVJTRVNfQ1BQRkxBR1MgZmlyc3QsIG9yIENGX05DVVJTRVNfQ1BQRkxBR1MuICBXZSBkb24ndCB1c2UKK2RubCBBQ19SRVFVSVJFIHNpbmNlIHRoYXQgZG9lcyBub3Qgd29yayB3aXRoIHRoZSBzaGVsbCdzIGlmL3RoZW4vZWxzZS9maS4KK0FDX0RFRlVOKFtDRl9OQ1VSU0VTX1ZFUlNJT05dLAorWworQUNfUkVRVUlSRShbQ0ZfQ1VSU0VTX0NQUEZMQUdTXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKGZvciBuY3Vyc2VzIHZlcnNpb24sIGNmX2N2X25jdXJzZXNfdmVyc2lvbixbCisJY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPW5vCisJY2ZfdGVtcGZpbGU9b3V0JCQKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKwlBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oIiRjZl90ZW1wZmlsZSIsICJ3Iik7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjIGlmZGVmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSAorCWZwcmludGYoZnAsICIlcy4lZFxuIiwgTkNVUlNFU19WRVJTSU9OLCBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpOworIyBlbHNlCisJZnByaW50ZihmcCwgIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgX19OQ1VSU0VTX0gKKwlmcHJpbnRmKGZwLCAib2xkXG4iKTsKKyMgZWxzZQorCW1ha2UgYW4gZXJyb3IKKyMgZW5kaWYKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm4tcmV0dXJufSgwKTsKK31dLFsKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YGNhdCAkY2ZfdGVtcGZpbGVgXSwsWworCisJIyBUaGlzIHdpbGwgbm90IHdvcmsgaWYgdGhlIHByZXByb2Nlc3NvciBzcGxpdHMgdGhlIGxpbmUgYWZ0ZXIgdGhlCisJIyBBdXRvY29uZiB0b2tlbi4gIFRoZSAndW5wcm90bycgcHJvZ3JhbSBkb2VzIHRoYXQuCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mQUNfRkRfQ0MgfCBncmVwICdeQXV0b2NvbmYgJyA+Y29uZnRlc3Qub3V0IgorCUFDX1RSWV9FVkFMKGNmX3RyeSkKKwlpZiB0ZXN0IC1mIGNvbmZ0ZXN0Lm91dCA7IHRoZW4KKwkJY2Zfb3V0PWBjYXQgY29uZnRlc3Qub3V0IHwgc2VkIC1lICdzJV5BdXRvY29uZiAlJScgLWUgJ3MlXltbXiJdXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorXSkKKwlybSAtZiAkY2ZfdGVtcGZpbGUKK10pCit0ZXN0ICIkY2ZfY3ZfbmN1cnNlc192ZXJzaW9uIiA9IG5vIHx8IEFDX0RFRklORShOQ1VSU0VTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QQVRIX1NZTlRBWCB2ZXJzaW9uOiAxMSB1cGRhdGVkOiAyMDA2LzA5LzAyIDA4OjU1OjQ2CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayB0aGUgYXJndW1lbnQgdG8gc2VlIHRoYXQgaXQgbG9va3MgbGlrZSBhIHBhdGhuYW1lLiAgUmV3cml0ZSBpdCBpZiBpdAorZG5sIGJlZ2lucyB3aXRoIG9uZSBvZiB0aGUgcHJlZml4L2V4ZWNfcHJlZml4IHZhcmlhYmxlcywgYW5kIHRoZW4gYWdhaW4gaWYgdGhlCitkbmwgcmVzdWx0IGJlZ2lucyB3aXRoICdOT05FJy4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHdvcmsgYXJvdW5kIGF1dG9jb25mJ3MKK2RubCBkZWxheWVkIGV2YWx1YXRpb24gb2YgdGhvc2Ugc3ltYm9scy4KK0FDX0RFRlVOKFtDRl9QQVRIX1NZTlRBWF0sWworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLlskXSQxIiBpbiAjKHZpCisuXFskXVwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLltbYS16QS1aXV06W1tcXC9dXSopICModmkgT1MvMiBFTVgKKyAgOzsKKy5cWyRdeypwcmVmaXh9KikgIyh2aQorICBldmFsICQxPSJbJF0kMSIKKyAgY2FzZSAiLlskXSQxIiBpbiAjKHZpCisgIC5OT05FLyopCisgICAgJDE9YGVjaG8gWyRdJDEgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgJDE9YGVjaG8gWyRdJDEgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgIDs7CisqKQorICBpZmVsc2UoJDIsLFtBQ19FUlJPUihbZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiWyRdJDFcIl0pXSwkMikKKyAgOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUERDVVJTRVNfWDExIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNi8xMS8xMiAxNzozMTo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENvbmZpZ3VyZSBmb3IgUERDdXJzZXMnIFgxMSBsaWJyYXJ5CitBQ19ERUZVTihbQ0ZfUERDVVJTRVNfWDExXSxbCitBQ19SRVFVSVJFKFtDRl9YX0FUSEVOQV0pCisKK0FDX1BBVEhfUFJPR1MoWENVUlNFU19DT05GSUcseGN1cnNlcy1jb25maWcsbm9uZSkKKworaWYgdGVzdCAiJFhDVVJTRVNfQ09ORklHIiAhPSBub25lIDsgdGhlbgorCitDUFBGTEFHUz0iYCRYQ1VSU0VTX0NPTkZJRyAtLWNmbGFnc2AgJENQUEZMQUdTIgorTElCUz0iYCRYQ1VSU0VTX0NPTkZJRyAtLWxpYnNgICRMSUJTIgorCitjZl9jdl9saWJfWEN1cnNlcz15ZXMKKworZWxzZQorCitMREZMQUdTPSIkTERGTEFHUyAkWF9MSUJTIgorQ0ZfQ0hFQ0tfQ0ZMQUdTKCRYX0NGTEFHUykKK0FDX0NIRUNLX0xJQihYMTEsWE9wZW5EaXNwbGF5LAorCVtMSUJTPSItbFgxMSAkTElCUyJdLCwKKwlbJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCU10pCitBQ19DQUNIRV9DSEVDSyhmb3IgWEN1cnNlcyBsaWJyYXJ5LGNmX2N2X2xpYl9YQ3Vyc2VzLFsKK0xJQlM9Ii1sWEN1cnNlcyAkTElCUyIKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDx4Y3Vyc2VzLmg+CitjaGFyICpYQ3Vyc2VzUHJvZ3JhbU5hbWUgPSAidGVzdCI7CitdLFtYQ3Vyc2VzRXhpdCgpO10sCitbY2ZfY3ZfbGliX1hDdXJzZXM9eWVzXSwKK1tjZl9jdl9saWJfWEN1cnNlcz1ub10pCitdKQorCitmaQorCitpZiB0ZXN0ICRjZl9jdl9saWJfWEN1cnNlcyA9IHllcyA7IHRoZW4KKwlBQ19ERUZJTkUoVU5JWCkKKwlBQ19ERUZJTkUoWENVUlNFUykKKwlBQ19ERUZJTkUoSEFWRV9YQ1VSU0VTKQorZWxzZQorCUFDX0VSUk9SKENhbm5vdCBsaW5rIHdpdGggWEN1cnNlcykKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BPU0lYX0NfU09VUkNFIHZlcnNpb246IDYgdXBkYXRlZDogMjAwNS8wNy8xNCAyMDoyNToxMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRGVmaW5lIF9QT1NJWF9DX1NPVVJDRSB0byB0aGUgZ2l2ZW4gbGV2ZWwsIGFuZCBfUE9TSVhfU09VUkNFIGlmIG5lZWRlZC4KK2RubAorZG5sCVBPU0lYLjEtMTk5MAkJCQlfUE9TSVhfU09VUkNFCitkbmwJUE9TSVguMS0xOTkwIGFuZAkJCV9QT1NJWF9TT1VSQ0UgYW5kCitkbmwJCVBPU0lYLjItMTk5MiBDLUxhbmd1YWdlCQkJX1BPU0lYX0NfU09VUkNFPTIKK2RubAkJQmluZGluZ3MgT3B0aW9uCitkbmwJUE9TSVguMWItMTk5MwkJCQlfUE9TSVhfQ19TT1VSQ0U9MTk5MzA5TAorZG5sCVBPU0lYLjFjLTE5OTYJCQkJX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwKK2RubAlYL09wZW4gMjAwMAkJCQlfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorZG5sCitkbmwgUGFyYW1ldGVyczoKK2RubAkkMSBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1BPU0lYX0NfU09VUkNFCitBQ19ERUZVTihbQ0ZfUE9TSVhfQ19TT1VSQ0VdLAorWworY2ZfUE9TSVhfQ19TT1VSQ0U9aWZlbHNlKCQxLCwxOTk1MDZMLCQxKQorCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworQ0ZfUkVNT1ZFX0RFRklORShjZl90cmltX0NGTEFHUywkY2Zfc2F2ZV9DRkxBR1MsX1BPU0lYX0NfU09VUkNFKQorQ0ZfUkVNT1ZFX0RFRklORShjZl90cmltX0NQUEZMQUdTLCRjZl9zYXZlX0NQUEZMQUdTLF9QT1NJWF9DX1NPVVJDRSkKKworQUNfQ0FDSEVfQ0hFQ0soaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UsY2ZfY3ZfcG9zaXhfY19zb3VyY2UsWworCUNGX01TR19MT0coaWYgdGhlIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgZ28gbm8gZnVydGhlcikKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X3Bvc2l4X2Nfc291cmNlPW5vXSwKKwlbY2Zfd2FudF9wb3NpeF9zb3VyY2U9bm8KKwkgY2FzZSAuJGNmX1BPU0lYX0NfU09VUkNFIGluICModmkKKwkgLltbMTJdXT8/KikgIyh2aQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQk7OworCSAuMikgIyh2aQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQljZl93YW50X3Bvc2l4X3NvdXJjZT15ZXMKKwkJOzsKKwkgLiopCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSBlc2FjCisJIGlmIHRlc3QgIiRjZl93YW50X3Bvc2l4X3NvdXJjZSIgPSB5ZXMgOyB0aGVuCisJCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZkZWYgX1BPU0lYX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSxbXSwKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9IiRjZl9jdl9wb3NpeF9jX3NvdXJjZSAtRF9QT1NJWF9TT1VSQ0UiKQorCSBmaQorCSBDRl9NU0dfTE9HKGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFKQorCSBDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKKwkgQ0ZfTVNHX0xPRyhpZiB0aGUgc2Vjb25kIGNvbXBpbGUgZG9lcyBub3QgbGVhdmUgb3VyIGRlZmluaXRpb24gaW50YWN0IGVycm9yKQorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sLAorCSBbY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm9dKQorCSBDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCV0pCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiICE9IG5vIDsgdGhlbgorCUNGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCUNQUEZMQUdTPSIkY2ZfdHJpbV9DUFBGTEFHUyIKKwlpZiB0ZXN0ICIkY2ZfY3ZfY2NfdV9kX29wdGlvbnMiID0geWVzIDsgdGhlbgorCQljZl90ZW1wX3Bvc2l4X2Nfc291cmNlPWBlY2hvICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiIHwgXAorCQkJCXNlZCAtZSAncy8tRC8tVS9nJyAtZSAncy89W1teIAldXSovL2cnYAorCQlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl90ZW1wX3Bvc2l4X2Nfc291cmNlIgorCWZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiCitmaQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BSR19SVUxFUyB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMDYvMDMgMTE6NDU6MDgKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBBcHBlbmQgZGVmaW5pdGlvbnMgYW5kIHJ1bGVzIGZvciB0aGUgZ2l2ZW4gcHJvZ3JhbXMgdG8gdGhlIHN1YmRpcmVjdG9yeQorZG5sIE1ha2VmaWxlcywgYW5kIHRoZSByZWN1cnNpb24gcnVsZSBmb3IgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS4KK2RubAorZG5sIHBhcmFtZXRlcnMKK2RubAkkMSA9IHNjcmlwdCB0byBydW4KK2RubAkkMiA9IGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMKK2RubAorZG5sIHZhcmlhYmxlcworZG5sCSRBV0sKK0FDX0RFRlVOKFtDRl9QUkdfUlVMRVNdLAorWworZm9yIGNmX2RpciBpbiAkMgorZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyOyB0aGVuCisJCWNvbnRpbnVlCisJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9wcm9ncmFtczsgdGhlbgorCQkkQVdLIC1mICQxICRzcmNkaXIvJGNmX2Rpci9wcm9ncmFtcyA+PiRjZl9kaXIvTWFrZWZpbGUKKwlmaQorZG9uZQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfQ0NfVV9EIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8wNy8xNCAxNjo1OTozMAorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgQyAocHJlcHJvY2Vzc29yKSAtVSBhbmQgLUQgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlcgorZG5sIGdpdmVuIHJhdGhlciB0aGFuIGJ5IHR5cGUgb2Ygb3B0aW9uLiAgU29tZSBjb21waWxlcnMgaW5zaXN0IG9uIGFwcGx5IGFsbAorZG5sIG9mIHRoZSAtVSBvcHRpb25zIGFmdGVyIGFsbCBvZiB0aGUgLUQgb3B0aW9ucy4gIE90aGVycyBhbGxvdyBtaXhpbmcgdGhlbSwKK2RubCBhbmQgbWF5IHByZWRlZmluZSBzeW1ib2xzIHRoYXQgY29uZmxpY3Qgd2l0aCB0aG9zZSB3ZSBkZWZpbmUuCitBQ19ERUZVTihbQ0ZfUFJPR19DQ19VX0RdLAorWworQUNfQ0FDSEVfQ0hFQ0soaWYgJENDIC1VIGFuZCAtRCBvcHRpb25zIHdvcmsgdG9nZXRoZXIsY2ZfY3ZfY2NfdV9kX29wdGlvbnMsWworCWNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlDUFBGTEFHUz0iLVVVX0RfT1BUSU9OUyAtRFVfRF9PUFRJT05TIC1ERF9VX09QVElPTlMgLVVEX1VfT1BUSU9OUyIKKwlBQ19UUllfQ09NUElMRShbXSxbCisjaWZuZGVmIFVfRF9PUFRJT05TCittYWtlIGFuIHVuZGVmaW5lZC1lcnJvcgorI2VuZGlmCisjaWZkZWYgIERfVV9PUFRJT05TCittYWtlIGEgZGVmaW5lZC1lcnJvcgorI2VuZGlmCisJXSxbCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9eWVzXSxbCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9bm9dKQorCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1JFTU9WRV9ERUZJTkUgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA1LzA3LzA5IDE2OjEyOjE4CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlbW92ZSBhbGwgLVUgYW5kIC1EIG9wdGlvbnMgdGhhdCByZWZlciB0byB0aGUgZ2l2ZW4gc3ltYm9sIGZyb20gYSBsaXN0Citkbmwgb2YgQyBjb21waWxlciBvcHRpb25zLiAgVGhpcyB3b3JrcyBhcm91bmQgdGhlIHByb2JsZW0gdGhhdCBub3QgYWxsCitkbmwgY29tcGlsZXJzIHByb2Nlc3MgLVUgYW5kIC1EIG9wdGlvbnMgZnJvbSBsZWZ0LXRvLXJpZ2h0LCBzbyBhIC1VIG9wdGlvbgorZG5sIGNhbm5vdCBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgZWZmZWN0IG9mIGEgcHJlY2VkaW5nIC1EIG9wdGlvbi4KK2RubAorZG5sICQxID0gdGFyZ2V0ICh3aGljaCBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgc291cmNlIHZhcmlhYmxlKQorZG5sICQyID0gc291cmNlIChpbmNsdWRpbmcgJyQnKQorZG5sICQzID0gc3ltYm9sIHRvIHJlbW92ZQorZGVmaW5lKFtDRl9SRU1PVkVfREVGSU5FXSwKK1sKKyMgcmVtb3ZlICQzIHN5bWJvbCBmcm9tICQyCiskMT1gZWNobyAiJDIiIHwgXAorCXNlZAktZSAncy8tW1tVRF1dJDNcKD1bW14gCV1dKlwpXD9bWyAJXV0vIC9nJyBcCisJCS1lICdzLy1bW1VEXV0kM1woPVtbXiAJXV0qXClcP1skXS8vZydgCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NJR19BVE9NSUNfVCB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDUvMDkvMTggMTc6Mjc6MTIKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBzaWduYWwgaGFuZGxlciwgYnV0IHRoZXJlIGFyZSBzb21lIGdjYyBkZXBlZGVuY2llcyBpbiB0aGF0IHJlY29tbWVuZGF0aW9uLgorZG5sIFRyeSBhbnl3YXkuCitBQ19ERUZVTihbQ0ZfU0lHX0FUT01JQ19UXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3Igc2lnbmFsIGdsb2JhbCBkYXRhdHlwZSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9zaWdfYXRvbWljX3QsWworCWZvciBjZl90eXBlIGluIFwKKwkJInZvbGF0aWxlIHNpZ19hdG9taWNfdCIgXAorCQkic2lnX2F0b21pY190IiBcCisJCSJpbnQiCisJZG8KKwlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJuICRjZl90eXBlIHg7CiskY2ZfdHlwZSB4Oworc3RhdGljIHZvaWQgaGFuZGxlcihpbnQgc2lnKQoreworCXggPSA1OworfV0sCisJCVtzaWduYWwoU0lHSU5ULCBoYW5kbGVyKTsKKwkJIHggPSAxXSwKKwkJW2NmX2N2X3NpZ19hdG9taWNfdD0kY2ZfdHlwZV0sCisJCVtjZl9jdl9zaWdfYXRvbWljX3Q9bm9dKQorCQl0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBicmVhaworCWRvbmUKKwldKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3Zfc2lnX2F0b21pY190KQordGVzdCAiJGNmX2N2X3NpZ19hdG9taWNfdCIgIT0gbm8gJiYgQUNfREVGSU5FX1VOUVVPVEVEKFNJR19BVE9NSUNfVCwgJGNmX2N2X3NpZ19hdG9taWNfdCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1VCRElSX1BBVEggdmVyc2lvbjogNSB1cGRhdGVkOiAyMDA3LzA3LzI5IDA5OjU1OjEyCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgYSBzZWFyY2gtbGlzdCBmb3IgYSBub25zdGFuZGFyZCBoZWFkZXIvbGliLWZpbGUKK2RubAkkMSA9IHRoZSB2YXJpYWJsZSB0byByZXR1cm4gYXMgcmVzdWx0CitkbmwJJDIgPSB0aGUgcGFja2FnZSBuYW1lCitkbmwJJDMgPSB0aGUgc3ViZGlyZWN0b3J5LCBlLmcuLCBiaW4sIGluY2x1ZGUgb3IgbGliCitBQ19ERUZVTihbQ0ZfU1VCRElSX1BBVEhdLAorWyQxPSIiCisKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMywvdXNyLCRwcmVmaXgpCitDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsJHByZWZpeCxOT05FKQorQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLC91c3IvbG9jYWwsJHByZWZpeCkKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMywvb3B0LCRwcmVmaXgpCitDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsWyRdSE9NRSwkcHJlZml4KQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TWVNfVElNRV9TRUxFQ1QgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDAwLzEwLzA0IDA5OjE4OjQwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UgY2FuIGluY2x1ZGUgPHN5cy90aW1lLmg+IHdpdGggPHN5cy9zZWxlY3QuaD47IHRoaXMgYnJlYWtzIG9uCitkbmwgb2xkZXIgU0NPIGNvbmZpZ3VyYXRpb25zLgorQUNfREVGVU4oW0NGX1NZU19USU1FX1NFTEVDVF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoaWYgc3lzL3RpbWUuaCB3b3JrcyB3aXRoIHN5cy9zZWxlY3QuaCkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9zeXNfdGltZV9zZWxlY3QsWworQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorXSxbXSxbY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0PXllc10sCisgICAgIFtjZl9jdl9zeXNfdGltZV9zZWxlY3Q9bm9dKQorICAgICBdKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0KQordGVzdCAiJGNmX2N2X3N5c190aW1lX3NlbGVjdCIgPSB5ZXMgJiYgQUNfREVGSU5FKEhBVkVfU1lTX1RJTUVfU0VMRUNUKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9URVJNX0hFQURFUiB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDUvMTIvMzEgMTM6MjY6MzkKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIExvb2sgZm9yIHRlcm0uaCwgd2hpY2ggaXMgcGFydCBvZiBYL09wZW4gY3Vyc2VzLiAgSXQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlCitkbmwgdG8gdGVybWluZm8gZGF0YWJhc2UuICBVc3VhbGx5IGl0IGlzIGluIHRoZSBzYW1lIGluY2x1ZGUtcGF0aCBhcyBjdXJzZXMuaCwKK2RubCBidXQgc29tZSBwYWNrYWdlcnMgY2hhbmdlIHRoaXMsIGJyZWFraW5nIHZhcmlvdXMgYXBwbGljYXRpb25zLgorQUNfREVGVU4oW0NGX1RFUk1fSEVBREVSXSxbCitBQ19DQUNIRV9DSEVDSyhmb3IgdGVybWluZm8gaGVhZGVyLCBjZl9jdl90ZXJtX2hlYWRlcixbCitjYXNlICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXJ9IGluICModmkKKyovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkgIyh2aQorCWNmX3Rlcm1faGVhZGVyPWBlY2hvICIkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiIHwgc2VkIC1lICdzJW5jdXJzZXNbW14uXV0qXC5oJCV0ZXJtLmglJ2AKKwk7OworKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDwkY2ZfdGVzdD4KK10sW2ludCB4ID0gYXV0b19sZWZ0X21hcmdpbl0sWworCWNmX2N2X3Rlcm1faGVhZGVyPSIkY2ZfdGVzdCJdLFsKKwljZl9jdl90ZXJtX2hlYWRlcj11bmtub3duCisJXSkKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKK10pCisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyB0byBhY2NvbW1vZGF0ZSBzdWJkaXJlY3RvcmllcworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorKnRlcm0uaCkKKwlBQ19ERUZJTkUoSEFWRV9URVJNX0gpCisJOzsKK2VzYWMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyAodmkKK25jdXJzZXMvdGVybS5oKSAjKHZpCisJQUNfREVGSU5FKEhBVkVfTkNVUlNFU19URVJNX0gpCisJOzsKK25jdXJzZXN3L3Rlcm0uaCkKKwlBQ19ERUZJTkUoSEFWRV9OQ1VSU0VTV19URVJNX0gpCisJOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVVBQRVIgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDAxLzAxLzI5IDIzOjQwOjU5CitkbmwgLS0tLS0tLS0KK2RubCBNYWtlIGFuIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIGEgdmFyaWFibGUKK2RubCAkMT11cHBlcmNhc2UoJDIpCitBQ19ERUZVTihbQ0ZfVVBQRVJdLAorWworJDE9YGVjaG8gIiQyIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVVRGOF9MSUIgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDAzLzAzLzAxIDE4OjM2OjQyCitkbmwgLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgbXVsdGlieXRlIHN1cHBvcnQsIGFuZCBpZiBub3QgZm91bmQsIHV0ZjggY29tcGF0aWJpbGl0eSBsaWJyYXJ5CitBQ19ERUZVTihbQ0ZfVVRGOF9MSUJdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3VwcG9ydCxjZl9jdl91dGY4X2xpYixbCisJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwlBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkbGliLmg+XSxbcHV0d2MoMCwwKTtdLAorCVtjZl9jdl91dGY4X2xpYj15ZXNdLAorCVtMSUJTPSItbHV0ZjggJExJQlMiCisJIEFDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+XSxbcHV0d2MoMCwwKTtdLAorCQlbY2ZfY3ZfdXRmOF9saWI9YWRkLW9uXSwKKwkJW2NmX2N2X3V0ZjhfbGliPW5vXSkKKwlMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorXSldKQorCisjIEhBVkVfTElCVVRGOF9IIGlzIHVzZWQgYnkgbmN1cnNlcyBpZiBjdXJzZXMuaCBpcyBzaGFyZWQgYmV0d2VlbgorIyBuY3Vyc2VzL25jdXJzZXN3OgoraWYgdGVzdCAiJGNmX2N2X3V0ZjhfbGliIiA9ICJhZGQtb24iIDsgdGhlbgorCUFDX0RFRklORShIQVZFX0xJQlVURjhfSCkKKwlMSUJTPSItbHV0ZjggJExJQlMiCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9WRVJCT1NFIHZlcnNpb246IDMgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0KK2RubCBVc2UgQUNfVkVSQk9TRSB3L28gdGhlIHdhcm5pbmdzCitBQ19ERUZVTihbQ0ZfVkVSQk9TRV0sCitbdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkkMSIgMT4mQUNfRkRfTVNHCitDRl9NU0dfTE9HKFskMV0pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfQ1VSU0VTX0RJUiB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDIvMTEvMTAgMTQ6NDY6NTkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBXcmFwcGVyIGZvciBBQ19BUkdfV0lUSCB0byBzcGVjaWZ5IGRpcmVjdG9yeSB1bmRlciB3aGljaCB0byBsb29rIGZvciBjdXJzZXMKK2RubCBsaWJyYXJpZXMuCitBQ19ERUZVTihbQ0ZfV0lUSF9DVVJTRVNfRElSXSxbCitBQ19BUkdfV0lUSChjdXJzZXMtZGlyLAorCVsgIC0td2l0aC1jdXJzZXMtZGlyPURJUiAgIGRpcmVjdG9yeSBpbiB3aGljaCAobiljdXJzZXMgaXMgaW5zdGFsbGVkXSwKKwlbQ0ZfUEFUSF9TWU5UQVgod2l0aHZhbCkKKwkgY2ZfY3ZfY3Vyc2VzX2Rpcj0kd2l0aHZhbF0sCisJW2NmX2N2X2N1cnNlc19kaXI9bm9dKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9YT1BFTl9DVVJTRVMgdmVyc2lvbjogOCB1cGRhdGVkOiAyMDAzLzExLzA3IDE5OjQ3OjQ2CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBpZiB3ZSBzaG91bGQgZGVmaW5lIFgvT3BlbiBzb3VyY2UgZm9yIGN1cnNlcywgbmVlZGVkIG9uIERpZ2l0YWwgVW5peAorZG5sIDQueCwgdG8gc2VlIHRoZSBleHRlbmRlZCBmdW5jdGlvbnMsIGJ1dCBicmVha3Mgb24gSVJJWCA2LnguCitkbmwKK2RubCBUaGUgZ2V0YmVneXgoKSBjaGVjayBpcyBuZWVkZWQgZm9yIEhQVVgsIHdoaWNoIG9taXRzIGxlZ2FjeSBtYWNyb3Mgc3VjaAorZG5sIGFzIGdldGJlZ3koKS4gIFRoZSBsYXR0ZXIgaXMgYmV0dGVyIGRlc2lnbiwgYnV0IHRoZSBmb3JtZXIgaXMgc3RhbmRhcmQuCitBQ19ERUZVTihbQ0ZfWE9QRU5fQ1VSU0VTXSwKK1sKK0FDX1JFUVVJUkUoW0NGX0NVUlNFU19DUFBGTEFHU10pZG5sCitBQ19DQUNIRV9DSEVDSyhpZiB3ZSBtdXN0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELGNmX2N2X25lZWRfeG9wZW5fZXh0ZW5zaW9uLFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLFsKKwlsb25nIHggPSB3aW5uc3RyKHN0ZHNjciwgIiIsIDApOworCWludCB4MSwgeTE7CisJZ2V0YmVneXgoc3Rkc2NyLCB5MSwgeDEpXSwKKwlbY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb249bm9dLAorCVtBQ19UUllfTElOSyhbCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLFsKKwlsb25nIHggPSB3aW5uc3RyKHN0ZHNjciwgIiIsIDApOworCWludCB4MSwgeTE7CisJZ2V0YmVneXgoc3Rkc2NyLCB5MSwgeDEpXSwKKwlbY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb249eWVzXSwKKwlbY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb249dW5rbm93bl0pXSldKQordGVzdCAkY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb24gPSB5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQiCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1hPUEVOX1NPVVJDRSB2ZXJzaW9uOiAyNSB1cGRhdGVkOiAyMDA3LzAxLzI5IDE4OjM2OjM4CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVHJ5IHRvIGdldCBfWE9QRU5fU09VUkNFIGRlZmluZWQgcHJvcGVybHkgdGhhdCB3ZSBjYW4gdXNlIFBPU0lYIGZ1bmN0aW9ucywKK2RubCBvciBhZGFwdCB0byB0aGUgdmVuZG9yJ3MgZGVmaW5pdGlvbnMgdG8gZ2V0IGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSwKK2RubCB3aXRob3V0IGxvc2luZyB0aGUgY29tbW9uIG5vbi1QT1NJWCBmZWF0dXJlcy4KK2RubAorZG5sIFBhcmFtZXRlcnM6CitkbmwJJDEgaXMgdGhlIG5vbWluYWwgdmFsdWUgZm9yIF9YT1BFTl9TT1VSQ0UKK2RubAkkMiBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1BPU0lYX0NfU09VUkNFCitBQ19ERUZVTihbQ0ZfWE9QRU5fU09VUkNFXSxbCisKK0FDX1JFUVVJUkUoW0NGX1BST0dfQ0NfVV9EXSkKKworY2ZfWE9QRU5fU09VUkNFPWlmZWxzZSgkMSwsNTAwLCQxKQorY2ZfUE9TSVhfQ19TT1VSQ0U9aWZlbHNlKCQyLCwxOTk1MDZMLCQyKQorCitjYXNlICRob3N0X29zIGluICModmkKK2FpeFtbNDVdXSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0FMTF9TT1VSQ0UiCisJOzsKK2ZyZWVic2QqKSAjKHZpCisJIyA1LnggaGVhZGVycyBhc3NvY2lhdGUKKwkjCV9YT1BFTl9TT1VSQ0U9NjAwIHdpdGggX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwkjCV9YT1BFTl9TT1VSQ0U9NTAwIHdpdGggX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwKKwljZl9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCisJY2ZfWE9QRU5fU09VUkNFPTYwMAorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfQlNEX1RZUEVTIC1EX19CU0RfVklTSUJMRSAtRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UgLURfWE9QRU5fU09VUkNFPSRjZl9YT1BFTl9TT1VSQ0UiCisJOzsKK2hwdXgqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9IUFVYX1NPVVJDRSIKKwk7OworaXJpeFtbNTZdXS4qKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9TR0lfU09VUkNFIgorCTs7CitsaW51eCp8Z251KnxrKmJzZCotZ251KSAjKHZpCisJQ0ZfR05VX1NPVVJDRQorCTs7CittaXJic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0Ugb3IgX1BPU0lYX1NPVVJDRSBicmVha3MgPGFycGEvaW5ldC5oPgorCTs7CituZXRic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIElQdjYgZm9yIGx5bnggb24gTmV0QlNEIDEuNiwgYnJlYWtzIHh0ZXJtLCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7CitvcGVuYnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyB4dGVybSBvbiBPcGVuQlNEIDIuOCwgaXMgbm90IG5lZWRlZCBmb3IgbmN1cnNlc3cKKwk7Oworb3NmW1s0NV1dKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfT1NGX1NPVVJDRSIKKwk7OworbnRvLXFueCopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1FOWF9TT1VSQ0UiCisJOzsKK3NjbyopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgTHlueCBvbiBTQ08gVW5peCAvIE9wZW5TZXJ2ZXIKKwk7Oworc29sYXJpcyopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX19FWFRFTlNJT05TX18iCisJOzsKKyopCisJQUNfQ0FDSEVfQ0hFQ0soaWYgd2Ugc2hvdWxkIGRlZmluZSBfWE9QRU5fU09VUkNFLGNmX2N2X3hvcGVuX3NvdXJjZSxbCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfeG9wZW5fc291cmNlPW5vXSwKKwlbY2Zfc2F2ZT0iJENQUEZMQUdTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRT0kY2ZfWE9QRU5fU09VUkNFIgorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X3hvcGVuX3NvdXJjZT1ub10sCisJW2NmX2N2X3hvcGVuX3NvdXJjZT0kY2ZfWE9QRU5fU09VUkNFXSkKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisJXSkKK10pCisJaWYgdGVzdCAiJGNmX2N2X3hvcGVuX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisJCUNGX1JFTU9WRV9ERUZJTkUoQ0ZMQUdTLCRDRkxBR1MsX1hPUEVOX1NPVVJDRSkKKwkJQ0ZfUkVNT1ZFX0RFRklORShDUFBGTEFHUywkQ1BQRkxBR1MsX1hPUEVOX1NPVVJDRSkKKwkJdGVzdCAiJGNmX2N2X2NjX3VfZF9vcHRpb25zIiA9IHllcyAmJiBcCisJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1VX1hPUEVOX1NPVVJDRSIKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX2N2X3hvcGVuX3NvdXJjZSIKKwlmaQorCUNGX1BPU0lYX0NfU09VUkNFKCRjZl9QT1NJWF9DX1NPVVJDRSkKKwk7OworZXNhYworXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9YX0FUSEVOQSB2ZXJzaW9uOiAxMiB1cGRhdGVkOiAyMDA0LzA2LzE1IDIxOjE0OjQxCitkbmwgLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgWGF3IChBdGhlbmEpIGxpYnJhcmllcworZG5sCitkbmwgU2V0cyAkY2ZfeF9hdGhlbmEgYWNjb3JkaW5nIHRvIHRoZSBmbGF2b3Igb2YgWGF3IHdoaWNoIGlzIHVzZWQuCitBQ19ERUZVTihbQ0ZfWF9BVEhFTkFdLAorW0FDX1JFUVVJUkUoW0NGX1hfVE9PTEtJVF0pCitjZl94X2F0aGVuYT0ke2NmX3hfYXRoZW5hLVhhd30KKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBYYXcgM2QgbGlicmFyeSkKK3dpdGh2YWw9CitBQ19BUkdfV0lUSChYYXczZCwKKwlbICAtLXdpdGgtWGF3M2QgICAgICAgICAgICBsaW5rIHdpdGggWGF3IDNkIGxpYnJhcnldKQoraWYgdGVzdCAiJHdpdGh2YWwiID0geWVzIDsgdGhlbgorCWNmX3hfYXRoZW5hPVhhdzNkCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggbmVYVCBBdGhlbmEgbGlicmFyeSkKK3dpdGh2YWw9CitBQ19BUkdfV0lUSChuZVh0YXcsCisJWyAgLS13aXRoLW5lWHRhdyAgICAgICAgICAgbGluayB3aXRoIG5lWFQgQXRoZW5hIGxpYnJhcnldKQoraWYgdGVzdCAiJHdpdGh2YWwiID0geWVzIDsgdGhlbgorCWNmX3hfYXRoZW5hPW5lWHRhdworCUFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIEF0aGVuYS1QbHVzIGxpYnJhcnkpCit3aXRodmFsPQorQUNfQVJHX1dJVEgoWGF3UGx1cywKKwlbICAtLXdpdGgtWGF3UGx1cyAgICAgICAgICBsaW5rIHdpdGggQXRoZW5hLVBsdXMgbGlicmFyeV0pCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgOyB0aGVuCisJY2ZfeF9hdGhlbmE9WGF3UGx1cworCUFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQorCitBQ19DSEVDS19MSUIoWGV4dCxYZXh0Q3JlYXRlRXh0ZW5zaW9uLAorCVtMSUJTPSItbFhleHQgJExJQlMiXSkKKworY2ZfeF9hdGhlbmFfbGliPSIiCisKK0NGX1hfQVRIRU5BX0NQUEZMQUdTKCRjZl94X2F0aGVuYSkKK0NGX1hfQVRIRU5BX0xJQlMoJGNmX3hfYXRoZW5hKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9YX0FUSEVOQV9DUFBGTEFHUyB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDIvMTAvMDkgMjA6MDA6MzcKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIE5vcm1hbGx5IGludm9rZWQgYnkgQ0ZfWF9BVEhFTkEsIHdpdGggJDEgc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBmbGF2b3Igb2YKK2RubCB0aGUgQXRoZW5hIHdpZGdldHMsIGUuZy4sIFhhdywgWGF3M2QsIG5lWHRhdy4KK0FDX0RFRlVOKFtDRl9YX0FUSEVOQV9DUFBGTEFHU10sCitbCitjZl94X2F0aGVuYV9yb290PWlmZWxzZSgkMSwsWGF3LCQxKQorY2ZfeF9hdGhlbmFfaW5jbHVkZT0iIgorCitmb3IgY2ZfcGF0aCBpbiBkZWZhdWx0IFwKKwkvdXNyL2NvbnRyaWIvWDExUjYgXAorCS91c3IvY29udHJpYi9YMTFSNSBcCisJL3Vzci9saWIvWDExUjUgXAorCS91c3IvbG9jYWwKK2RvCisJaWYgdGVzdCAteiAiJGNmX3hfYXRoZW5hX2luY2x1ZGUiIDsgdGhlbgorCQljZl9zYXZlPSIkQ1BQRkxBR1MiCisJCWNmX3Rlc3Q9WDExLyRjZl94X2F0aGVuYV9yb290L1NpbXBsZU1lbnUuaAorCQlpZiB0ZXN0ICRjZl9wYXRoICE9IGRlZmF1bHQgOyB0aGVuCisJCQlDUFBGTEFHUz0iLUkkY2ZfcGF0aC9pbmNsdWRlICRjZl9zYXZlIgorCQkJQUNfTVNHX0NIRUNLSU5HKGZvciAkY2ZfdGVzdCBpbiAkY2ZfcGF0aCkKKwkJZWxzZQorCQkJQUNfTVNHX0NIRUNLSU5HKGZvciAkY2ZfdGVzdCkKKwkJZmkKKwkJQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDwkY2ZfdGVzdD5dLFtdLAorCQkJW2NmX3Jlc3VsdD15ZXNdLAorCQkJW2NmX3Jlc3VsdD1ub10pCisJCUFDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKKwkJaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSB5ZXMgOyB0aGVuCisJCQljZl94X2F0aGVuYV9pbmNsdWRlPSRjZl9wYXRoCisJCQlicmVhaworCQllbHNlCisJCQlDUFBGTEFHUz0iJGNmX3NhdmUiCisJCWZpCisJZmkKK2RvbmUKKworaWYgdGVzdCAteiAiJGNmX3hfYXRoZW5hX2luY2x1ZGUiIDsgdGhlbgorCUFDX01TR19XQVJOKAorW1VuYWJsZSB0byBzdWNjZXNzZnVsbHkgZmluZCBBdGhlbmEgaGVhZGVyIGZpbGVzIHdpdGggdGVzdCBwcm9ncmFtXSkKK2VsaWYgdGVzdCAiJGNmX3hfYXRoZW5hX2luY2x1ZGUiICE9IGRlZmF1bHQgOyB0aGVuCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl94X2F0aGVuYV9pbmNsdWRlIgorZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfWF9BVEhFTkFfTElCUyB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDYvMTEvMzAgMTc6NTc6MTEKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgTm9ybWFsbHkgaW52b2tlZCBieSBDRl9YX0FUSEVOQSwgd2l0aCAkMSBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGZsYXZvciBvZgorZG5sIHRoZSBBdGhlbmEgd2lkZ2V0cywgZS5nLiwgWGF3LCBYYXczZCwgbmVYdGF3LgorQUNfREVGVU4oW0NGX1hfQVRIRU5BX0xJQlNdLAorW0FDX1JFUVVJUkUoW0NGX1hfVE9PTEtJVF0pCitjZl94X2F0aGVuYV9yb290PWlmZWxzZSgkMSwsWGF3LCQxKQorY2ZfeF9hdGhlbmFfbGliPSIiCisKK2ZvciBjZl9wYXRoIGluIGRlZmF1bHQgXAorCS91c3IvY29udHJpYi9YMTFSNiBcCisJL3Vzci9jb250cmliL1gxMVI1IFwKKwkvdXNyL2xpYi9YMTFSNSBcCisJL3Vzci9sb2NhbAorZG8KKwlmb3IgY2ZfbGliIGluIFwKKwkJIi1sJGNmX3hfYXRoZW5hX3Jvb3QgLWxYbXUiIFwKKwkJIi1sJGNmX3hfYXRoZW5hX3Jvb3QgLWxYcG0gLWxYbXUiIFwKKwkJIi1sJHtjZl94X2F0aGVuYV9yb290fV9zIC1sWG11X3MiCisJZG8KKwkJaWYgdGVzdCAteiAiJGNmX3hfYXRoZW5hX2xpYiIgOyB0aGVuCisJCQljZl9zYXZlPSIkTElCUyIKKwkJCWNmX3Rlc3Q9WGF3U2ltcGxlTWVudUFkZEdsb2JhbEFjdGlvbnMKKwkJCWlmIHRlc3QgJGNmX3BhdGggIT0gZGVmYXVsdCA7IHRoZW4KKwkJCQlMSUJTPSItTCRjZl9wYXRoL2xpYiAkY2ZfbGliICRMSUJTIgorCQkJCUFDX01TR19DSEVDS0lORyhmb3IgJGNmX2xpYiBpbiAkY2ZfcGF0aCkKKwkJCWVsc2UKKwkJCQlMSUJTPSIkY2ZfbGliICRMSUJTIgorCQkJCUFDX01TR19DSEVDS0lORyhmb3IgJGNmX3Rlc3QgaW4gJGNmX2xpYikKKwkJCWZpCisJCQlBQ19UUllfTElOSyhbXSxbJGNmX3Rlc3QoKV0sCisJCQkJW2NmX3Jlc3VsdD15ZXNdLAorCQkJCVtjZl9yZXN1bHQ9bm9dKQorCQkJQUNfTVNHX1JFU1VMVCgkY2ZfcmVzdWx0KQorCQkJaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfeF9hdGhlbmFfbGliPSIkY2ZfbGliIgorCQkJCWJyZWFrCisJCQlmaQorCQkJTElCUz0iJGNmX3NhdmUiCisJCWZpCisJZG9uZQorZG9uZQorCitpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfbGliIiA7IHRoZW4KKwlBQ19FUlJPUigKK1tVbmFibGUgdG8gc3VjY2Vzc2Z1bGx5IGxpbmsgQXRoZW5hIGxpYnJhcnkgKC1sJGNmX3hfYXRoZW5hX3Jvb3QpIHdpdGggdGVzdCBwcm9ncmFtXSkKK2ZpCisKK0NGX1VQUEVSKGNmX3hfYXRoZW5hX0xJQlMsSEFWRV9MSUJfJGNmX3hfYXRoZW5hKQorQUNfREVGSU5FX1VOUVVPVEVEKCRjZl94X2F0aGVuYV9MSUJTKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9YX1RPT0xLSVQgdmVyc2lvbjogMTEgdXBkYXRlZDogMjAwNi8xMS8yOSAxOTowNToxNAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBYIFRvb2xraXQgbGlicmFyaWVzCitkbmwKK0FDX0RFRlVOKFtDRl9YX1RPT0xLSVRdLAorWworQUNfUkVRVUlSRShbQUNfUEFUSF9YVFJBXSkKK0FDX1JFUVVJUkUoW0NGX0NIRUNLX0NBQ0hFXSkKKworIyBTWVNURU1fTkFNRT1gZWNobyAiJGNmX2N2X3N5c3RlbV9uYW1lInx0ciAnICcgLWAKKworY2ZfaGF2ZV9YX0xJQlM9bm8KKworTERGTEFHUz0iJFhfTElCUyAkTERGTEFHUyIKK0NGX0NIRUNLX0NGTEFHUygkWF9DRkxBR1MpCisKK0FDX0NIRUNLX0ZVTkMoWE9wZW5EaXNwbGF5LCxbCitBQ19DSEVDS19MSUIoWDExLFhPcGVuRGlzcGxheSwKKwlbTElCUz0iLWxYMTEgJExJQlMiXSwsCisJWyRYX1BSRV9MSUJTICRMSUJTICRYX0VYVFJBX0xJQlNdKV0pCisKK0FDX0NIRUNLX0ZVTkMoWHRBcHBJbml0aWFsaXplLCxbCitBQ19DSEVDS19MSUIoWHQsIFh0QXBwSW5pdGlhbGl6ZSwKKwlbQUNfREVGSU5FKEhBVkVfTElCWFQpCisJIGNmX2hhdmVfWF9MSUJTPVh0CisJIExJQlM9Ii1sWHQgJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCUyJdLCwKKwlbJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCU10pXSkKKworaWYgdGVzdCAkY2ZfaGF2ZV9YX0xJQlMgPSBubyA7IHRoZW4KKwlBQ19XQVJOKAorW1VuYWJsZSB0byBzdWNjZXNzZnVsbHkgbGluayBYIFRvb2xraXQgbGlicmFyeSAoLWxYdCkgd2l0aAordGVzdCBwcm9ncmFtLiAgWW91IHdpbGwgaGF2ZSB0byBjaGVjayBhbmQgYWRkIHRoZSBwcm9wZXIgbGlicmFyaWVzIGJ5IGhhbmQKK3RvIG1ha2VmaWxlLl0pCitmaQorXSlkbmwKZGlmZiAtLWdpdCBhL3Rlc3QvYmFja2dyb3VuZC5jIGIvdGVzdC9iYWNrZ3JvdW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiZTVmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvYmFja2dyb3VuZC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBiYWNrZ3JvdW5kLmMsdiAxLjMgMjAwNi8wNi8wMyAxNjo0MzowOCB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHNob3J0IGYsIGI7CisKKyAgICBpbml0c2NyKCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKworCXBhaXJfY29udGVudCgwLCAmZiwgJmIpOworCXByaW50dygicGFpciAwIGNvbnRhaW5zICglZCwlZClcbiIsIGYsIGIpOworCWdldGNoKCk7CisKKwlwcmludHcoIkluaXRpYWxpemluZyBwYWlyIDEgdG8gcmVkL2JsYWNrXG4iKTsKKwlpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisJYmtnZHNldCgnICcgfCBDT0xPUl9QQUlSKDEpKTsKKwlwcmludHcoIlJFRC9CTEFDS1xuIik7CisJZ2V0Y2goKTsKKworCXByaW50dygiSW5pdGlhbGl6aW5nIHBhaXIgMiB0byB3aGl0ZS9ibHVlXG4iKTsKKwlpbml0X3BhaXIoMiwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCWJrZ2RzZXQoJyAnIHwgQ09MT1JfUEFJUigyKSk7CisJcHJpbnR3KCJXSElURS9CTFVFXG4iKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJSZXNldHRpbmcgY29sb3JzIHRvIHBhaXIgMFxuIik7CisJYmtnZHNldCgnICcgfCBDT0xPUl9QQUlSKDApKTsKKwlwcmludHcoIkRlZmF1bHQgQ29sb3JzXG4iKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJSZXNldHRpbmcgY29sb3JzIHRvIHBhaXIgMVxuIik7CisJYmtnZHNldCgnICcgfCBDT0xPUl9QQUlSKDEpKTsKKwlwcmludHcoIlJFRC9CTEFDS1xuIik7CisJZ2V0Y2goKTsKKworCXByaW50dygiU2V0dGluZyBzY3JlZW4gdG8gcGFpciAwXG4iKTsKKwlia2dkKCcgJyB8IENPTE9SX1BBSVIoMCkpOworCWdldGNoKCk7CisKKwlwcmludHcoIlNldHRpbmcgc2NyZWVuIHRvIHBhaXIgMVxuIik7CisJYmtnZCgnICcgfCBDT0xPUl9QQUlSKDEpKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJTZXR0aW5nIHNjcmVlbiB0byBwYWlyIDJcbiIpOworCWJrZ2QoJyAnIHwgQ09MT1JfUEFJUigyKSk7CisJZ2V0Y2goKTsKKworCXByaW50dygiU2V0dGluZyBzY3JlZW4gdG8gcGFpciAwXG4iKTsKKwlia2dkKCcgJyB8IENPTE9SX1BBSVIoMCkpOworCWdldGNoKCk7CisKKyAgICB9IGVsc2UgeworCXByaW50dygiVGhpcyBkZW1vIHJlcXVpcmVzIGEgY29sb3IgdGVybWluYWwiKTsKKwlnZXRjaCgpOworICAgIH0KKyAgICBlbmR3aW4oKTsKKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L2JsdWUuYyBiL3Rlc3QvYmx1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzBjNzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2JsdWUuYwpAQCAtMCwwICsxLDQ2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBCIGwgdSBlICAgTSBvIG8gbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjIuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICBBIHBhdGllbmNlIGdhbWUgYnkgVC5BLkxpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgSW50ZWdyYWwgc2NyZWVuIHN1cHBvcnQgYnkgRXJpYyBTLiBSYXltb25kICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21waWxlIHRoaXMgd2l0aCB0aGUgY29tbWFuZCBgY2MgLU8gYmx1ZS5jIC1sY3Vyc2VzIC1vIGJsdWUnLiAgRm9yIGJlc3QKKyAqIHJlc3VsdHMsIHVzZSB0aGUgbmN1cnNlcygzKSBsaWJyYXJ5LiAgT24gbm9uLUludGVsIG1hY2hpbmVzLCBTVnI0IGN1cnNlcyBpcworICoganVzdCBhcyBnb29kLgorICoKKyAqICRJZDogYmx1ZS5jLHYgMS4zMCAyMDA4LzA4LzAzIDE4OjIwOjI3IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2RlZmluZSBOT0NBUkQJCSgtMSkKKworI2RlZmluZSBBQ0UJCTAKKyNkZWZpbmUgS0lORwkJMTIKKyNkZWZpbmUgU1VJVF9MRU5HVEgJMTMKKworI2RlZmluZSBIRUFSVFMJCTAKKyNkZWZpbmUgU1BBREVTCQkxCisjZGVmaW5lIERJQU1PTkRTCTIKKyNkZWZpbmUgQ0xVQlMJCTMKKyNkZWZpbmUgTlNVSVRTCQk0CisKKyNkZWZpbmUgR1JJRF9XSURUSAkxNAkvKiAgICAxMysxICAqLworI2RlZmluZSBHUklEX0xFTkdUSAk1NgkvKiA0KigxMysxKSAqLworI2RlZmluZSBQQUNLX1NJWkUJNTIKKworI2RlZmluZSBCQVNFUk9XCQkxCisjZGVmaW5lIFBST01QVFJPVwkxMQorCisjZGVmaW5lIFJFRF9PTl9XSElURSAgICAxCisjZGVmaW5lIEJMQUNLX09OX1dISVRFICAyCisjZGVmaW5lIEJMVUVfT05fV0hJVEUgICAzCisKK3N0YXRpYyBSRVRTSUdUWVBFIGRpZShpbnQgb25zaWcpIEdDQ19OT1JFVFVSTjsKKworc3RhdGljIGludCBkZWNrX3NpemUgPSBQQUNLX1NJWkU7CS8qIGluaXRpYWwgZGVjayAqLworc3RhdGljIGludCBkZWNrW1BBQ0tfU0laRV07CisKK3N0YXRpYyBpbnQgZ3JpZFtHUklEX0xFTkdUSF07CS8qIGNhcmQgbGF5b3V0IGdyaWQgKi8KK3N0YXRpYyBpbnQgZnJlZXB0cls0XTsJCS8qIGZyZWUgY2FyZCBzcGFjZSBwb2ludGVycyAqLworCitzdGF0aWMgaW50IGRlYWxfbnVtYmVyID0gMDsKKworc3RhdGljIGNodHlwZSByYW5rc1tTVUlUX0xFTkdUSF1bMl0gPQoreworICAgIHsnICcsICdBJ30sCisgICAgeycgJywgJzInfSwKKyAgICB7JyAnLCAnMyd9LAorICAgIHsnICcsICc0J30sCisgICAgeycgJywgJzUnfSwKKyAgICB7JyAnLCAnNid9LAorICAgIHsnICcsICc3J30sCisgICAgeycgJywgJzgnfSwKKyAgICB7JyAnLCAnOSd9LAorICAgIHsnMScsICcwJ30sCisgICAgeycgJywgJ0onfSwKKyAgICB7JyAnLCAnUSd9LAorICAgIHsnICcsICdLJ30KK307CisKKy8qIFBsZWFzZSBub3RlLCB0aGF0IHRoaXMgaXMgYSBiYWQgZXhhbXBsZS4KKyAgIENvbG9yIHZhbHVlcyBzaG91bGQgbm90IGJlIG9yJ2VkIGluLiBUaGlzCisgICBvbmx5IHdvcmtzLCBiZWNhdXNlIHRoZSBjaGFyYWN0ZXJzIHVzZWQgaGVyZQorICAgYXJlIHBsYWluIGFuZCBoYXZlIG5vIGNvbG9yIGF0dHJpYnV0ZSB0aGVtc2VsdmVzLiAqLworI2lmZGVmIENPTE9SX1BBSVIKKyNkZWZpbmUgT1JfQ09MT1JTKHZhbHVlLHBhaXIpICgodmFsdWUpIHwgQ09MT1JfUEFJUihwYWlyKSkKKyNlbHNlCisjZGVmaW5lIE9SX0NPTE9SUyh2YWx1ZSxwYWlyKSAodmFsdWUpCisjZW5kaWYKKworI2RlZmluZSBQQ19DT0xPUlModmFsdWUscGFpcikgKE9SX0NPTE9SUyh2YWx1ZSxwYWlyKSB8IEFfQUxUQ0hBUlNFVCkKKworc3RhdGljIGNodHlwZSBsZXR0ZXJzWzRdID0KK3sKKyAgICBPUl9DT0xPUlMoJ2gnLCBSRURfT05fV0hJVEUpLAkvKiBoZWFydHMgKi8KKyAgICBPUl9DT0xPUlMoJ3MnLCBCTEFDS19PTl9XSElURSksCS8qIHNwYWRlcyAqLworICAgIE9SX0NPTE9SUygnZCcsIFJFRF9PTl9XSElURSksCS8qIGRpYW1vbmRzICovCisgICAgT1JfQ09MT1JTKCdjJywgQkxBQ0tfT05fV0hJVEUpLAkvKiBjbHVicyAqLworfTsKKworI2lmIGRlZmluZWQoX19pMzg2X18pICYmIGRlZmluZWQoQV9BTFRDSEFSU0VUKSAmJiBIQVZFX1RJR0VUU1RSCitzdGF0aWMgY2h0eXBlIGdseXBoc1tdID0KK3sKKyAgICBQQ19DT0xPUlMoJ1wwMDMnLCBSRURfT05fV0hJVEUpLAkvKiBoZWFydHMgKi8KKyAgICBQQ19DT0xPUlMoJ1wwMDYnLCBCTEFDS19PTl9XSElURSksCS8qIHNwYWRlcyAqLworICAgIFBDX0NPTE9SUygnXDAwNCcsIFJFRF9PTl9XSElURSksCS8qIGRpYW1vbmRzICovCisgICAgUENfQ09MT1JTKCdcMDA1JywgQkxBQ0tfT05fV0hJVEUpLAkvKiBjbHVicyAqLworfTsKKyNkZWZpbmUgVVNFX0NQNDM3IDEKKyNlbHNlCisjZGVmaW5lIFVTRV9DUDQzNyAwCisjZW5kaWYgLyogX19pMzg2X18gKi8KKworc3RhdGljIGNodHlwZSAqc3VpdHMgPSBsZXR0ZXJzOwkvKiB0aGlzIG1heSBjaGFuZ2UgdG8gZ2x5cGhzIGJlbG93ICovCisKK3N0YXRpYyBSRVRTSUdUWVBFCitkaWUoaW50IG9uc2lnKQoreworICAgICh2b2lkKSBzaWduYWwob25zaWcsIFNJR19JR04pOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3ZhcnModm9pZCkKK3sKKyAgICBpbnQgaTsKKworICAgIGRlY2tfc2l6ZSA9IFBBQ0tfU0laRTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUEFDS19TSVpFOyBpKyspCisJZGVja1tpXSA9IGk7CisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwlmcmVlcHRyW2ldID0gaSAqIEdSSURfV0lEVEg7Cit9CisKK3N0YXRpYyB2b2lkCitzaHVmZmxlKGludCBzaXplKQoreworICAgIGludCBpLCBqLCBudW1zd2Fwcywgc3dhcG51bSwgdGVtcDsKKworICAgIG51bXN3YXBzID0gc2l6ZSAqIDEwOwkvKiBhbiBhcmJpdHJhcnkgZmlndXJlICovCisKKyAgICBmb3IgKHN3YXBudW0gPSAwOyBzd2FwbnVtIDwgbnVtc3dhcHM7IHN3YXBudW0rKykgeworCWkgPSByYW5kKCkgJSBzaXplOworCWogPSByYW5kKCkgJSBzaXplOworCXRlbXAgPSBkZWNrW2ldOworCWRlY2tbaV0gPSBkZWNrW2pdOworCWRlY2tbal0gPSB0ZW1wOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2RlYWxfY2FyZHModm9pZCkKK3sKKyAgICBpbnQgcHRyLCBjYXJkID0gMCwgdmFsdWUsIGNzdWl0LCBjcmFuaywgc3VpdCwgYWNlc1s0XTsKKworICAgIG1lbXNldChhY2VzLCAwLCBzaXplb2YoYWNlcykpOworICAgIGZvciAoc3VpdCA9IEhFQVJUUzsgc3VpdCA8PSBDTFVCUzsgc3VpdCsrKSB7CisJcHRyID0gZnJlZXB0cltzdWl0XTsKKwlncmlkW3B0cisrXSA9IE5PQ0FSRDsJLyogMXN0IGNhcmQgc3BhY2UgaXMgYmxhbmsgKi8KKwl3aGlsZSAoKHB0ciAlIEdSSURfV0lEVEgpICE9IDApIHsKKwkgICAgdmFsdWUgPSBkZWNrW2NhcmQrK107CisJICAgIGNyYW5rID0gdmFsdWUgJSBTVUlUX0xFTkdUSDsKKwkgICAgY3N1aXQgPSB2YWx1ZSAvIFNVSVRfTEVOR1RIOworCSAgICBpZiAoY3JhbmsgPT0gQUNFKQorCQlhY2VzW2NzdWl0XSA9IHB0cjsKKwkgICAgZ3JpZFtwdHIrK10gPSB2YWx1ZTsKKwl9CisgICAgfQorCisgICAgaWYgKGRlYWxfbnVtYmVyID09IDEpCS8qIHNoaWZ0IHRoZSBhY2VzIGRvd24gdG8gdGhlIDFzdCBjb2x1bW4gKi8KKwlmb3IgKHN1aXQgPSBIRUFSVFM7IHN1aXQgPD0gQ0xVQlM7IHN1aXQrKykgeworCSAgICBncmlkW3N1aXQgKiBHUklEX1dJRFRIXSA9IHN1aXQgKiBTVUlUX0xFTkdUSDsKKwkgICAgZ3JpZFthY2VzW3N1aXRdXSA9IE5PQ0FSRDsKKwkgICAgZnJlZXB0cltzdWl0XSA9IGFjZXNbc3VpdF07CisJfQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRjYXJkKGludCB2YWx1ZSkKK3sKKyAgICAodm9pZCkgYWRkY2goJyAnKTsKKyAgICBpZiAodmFsdWUgPT0gTk9DQVJEKQorCSh2b2lkKSBhZGRzdHIoIiAgICIpOworICAgIGVsc2UgeworCWFkZGNoKHJhbmtzW3ZhbHVlICUgU1VJVF9MRU5HVEhdWzBdIHwgQ09MT1JfUEFJUihCTFVFX09OX1dISVRFKSk7CisJYWRkY2gocmFua3NbdmFsdWUgJSBTVUlUX0xFTkdUSF1bMV0gfCBDT0xPUl9QQUlSKEJMVUVfT05fV0hJVEUpKTsKKwlhZGRjaChzdWl0c1t2YWx1ZSAvIFNVSVRfTEVOR1RIXSk7CisgICAgfQorICAgICh2b2lkKSBhZGRjaCgnICcpOworfQorCitzdGF0aWMgdm9pZAorZGlzcGxheV9jYXJkcyhpbnQgZGVhbCkKK3sKKyAgICBpbnQgcm93LCBjYXJkOworCisgICAgY2xlYXIoKTsKKyAgICAodm9pZCkgcHJpbnR3KAorCQkgICAgICJCbHVlIE1vb24gMi4xIC0gYnkgVGltIExpc3RlciAmIEVyaWMgUmF5bW9uZCAtIERlYWwgJWQuXG4iLAorCQkgICAgIGRlYWwpOworICAgIGZvciAocm93ID0gSEVBUlRTOyByb3cgPD0gQ0xVQlM7IHJvdysrKSB7CisJbW92ZShCQVNFUk9XICsgcm93ICsgcm93ICsgMiwgMSk7CisJZm9yIChjYXJkID0gMDsgY2FyZCA8IEdSSURfV0lEVEg7IGNhcmQrKykKKwkgICAgcHJpbnRjYXJkKGdyaWRbcm93ICogR1JJRF9XSURUSCArIGNhcmRdKTsKKyAgICB9CisKKyAgICBtb3ZlKFBST01QVFJPVyArIDIsIDApOworICAgIHJlZnJlc2goKTsKKyNkZWZpbmUgUCh4KQkodm9pZClwcmludHcoIiVzXG4iLCB4KQorICAgIFAoIiAgIFRoaXMgNTItY2FyZCBzb2xpdGFpcmUgc3RhcnRzIHdpdGggIHRoZSBlbnRpcmUgZGVjayBzaHVmZmxlZCBhbmQgZGVhbHQiKTsKKyAgICBQKCJvdXQgaW4gZm91ciByb3dzLiAgVGhlIGFjZXMgYXJlIHRoZW4gbW92ZWQgdG8gdGhlIGxlZnQgZW5kIG9mIHRoZSBsYXlvdXQsIik7CisgICAgUCgibWFraW5nIDQgaW5pdGlhbCBmcmVlIHNwYWNlcy4gIFlvdSBtYXkgbW92ZSB0byBhIHNwYWNlIG9ubHkgdGhlIGNhcmQgdGhhdCIpOworICAgIFAoIm1hdGNoZXMgdGhlIGxlZnQgbmVpZ2hib3IgaW4gc3VpdCwgYW5kIGlzIG9uZSBncmVhdGVyIGluIHJhbmsuICBLaW5ncyBhcmUiKTsKKyAgICBQKCJoaWdoLCBzbyBubyBjYXJkcyBtYXkgYmUgcGxhY2VkIHRvIHRoZWlyIHJpZ2h0ICh0aGV5IGNyZWF0ZSBkZWFkIHNwYWNlcykuIik7CisgICAgUCgiICBXaGVuIG5vIG1vdmVzIGNhbiBiZSBtYWRlLCAgY2FyZHMgc3RpbGwgb3V0IG9mIHNlcXVlbmNlIGFyZSAgcmVzaHVmZmxlZCIpOworICAgIFAoImFuZCBkZWFsdCBmYWNlIHVwIGFmdGVyIHRoZSBlbmRzIG9mIHRoZSBwYXJ0aWFsIHNlcXVlbmNlcywgbGVhdmluZyBhIGNhcmQiKTsKKyAgICBQKCJzcGFjZSBhZnRlciBlYWNoIHNlcXVlbmNlLCBzbyB0aGF0IGVhY2ggcm93IGxvb2tzIGxpa2UgYSBwYXJ0aWFsIHNlcXVlbmNlIik7CisgICAgUCgiZm9sbG93ZWQgYnkgYSBzcGFjZSwgZm9sbG93ZWQgYnkgZW5vdWdoIGNhcmRzIHRvIG1ha2UgYSByb3cgb2YgMTQuICAgICAgICIpOworICAgIFAoIiAgQSBtb21lbnQncyByZWZsZWN0aW9uIHdpbGwgc2hvdyB0aGF0IHRoaXMgZ2FtZSBjYW5ub3QgdGFrZSBtb3JlIHRoYW4gMTMiKTsKKyAgICBQKCJkZWFscy4gQSBnb29kIHNjb3JlIGlzIDEtMyBkZWFscywgNC03IGlzIGF2ZXJhZ2UsIDggb3IgbW9yZSBpcyBwb29yLiAgICAgIik7CisjdW5kZWYgUAorICAgIHJlZnJlc2goKTsKK30KKworc3RhdGljIGludAorZmluZChpbnQgY2FyZCkKK3sKKyAgICBpbnQgaTsKKworICAgIGlmICgoY2FyZCA8IDApIHx8IChjYXJkID49IFBBQ0tfU0laRSkpCisJcmV0dXJuIChOT0NBUkQpOworICAgIGZvciAoaSA9IDA7IGkgPCBHUklEX0xFTkdUSDsgaSsrKQorCWlmIChncmlkW2ldID09IGNhcmQpCisJICAgIHJldHVybiBpOworICAgIHJldHVybiAoTk9DQVJEKTsKK30KKworc3RhdGljIHZvaWQKK21vdmVjYXJkKGludCBzcmMsIGludCBkc3QpCit7CisgICAgZ3JpZFtkc3RdID0gZ3JpZFtzcmNdOworICAgIGdyaWRbc3JjXSA9IE5PQ0FSRDsKKworICAgIG1vdmUoQkFTRVJPVyArIChkc3QgLyBHUklEX1dJRFRIKSAqIDIgKyAyLCAoZHN0ICUgR1JJRF9XSURUSCkgKiA1ICsgMSk7CisgICAgcHJpbnRjYXJkKGdyaWRbZHN0XSk7CisKKyAgICBtb3ZlKEJBU0VST1cgKyAoc3JjIC8gR1JJRF9XSURUSCkgKiAyICsgMiwgKHNyYyAlIEdSSURfV0lEVEgpICogNSArIDEpOworICAgIHByaW50Y2FyZChncmlkW3NyY10pOworCisgICAgcmVmcmVzaCgpOworfQorCitzdGF0aWMgdm9pZAorcGxheV9nYW1lKHZvaWQpCit7CisgICAgaW50IGRlYWQgPSAwLCBpLCBqOworICAgIGNoYXIgYzsKKyAgICBpbnQgc2VsZWN0aW9uWzRdLCBjYXJkOworCisgICAgd2hpbGUgKGRlYWQgPCA0KSB7CisJZGVhZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCSAgICBjYXJkID0gZ3JpZFtmcmVlcHRyW2ldIC0gMV07CisKKwkgICAgaWYgKCgoY2FyZCAlIFNVSVRfTEVOR1RIKSA9PSBLSU5HKQorCQl8fAorCQkoY2FyZCA9PSBOT0NBUkQpKQorCQlzZWxlY3Rpb25baV0gPSBOT0NBUkQ7CisJICAgIGVsc2UKKwkJc2VsZWN0aW9uW2ldID0gZmluZChjYXJkICsgMSk7CisKKwkgICAgaWYgKHNlbGVjdGlvbltpXSA9PSBOT0NBUkQpCisJCWRlYWQrKzsKKwl9OworCisJaWYgKGRlYWQgPCA0KSB7CisJICAgIGNoYXIgbGl2ZVtOU1VJVFMgKyAxXSwgKmxwID0gbGl2ZTsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChzZWxlY3Rpb25baV0gIT0gTk9DQVJEKSB7CisJCSAgICBtb3ZlKEJBU0VST1cgKyAoc2VsZWN0aW9uW2ldIC8gR1JJRF9XSURUSCkgKiAyICsgMywKKwkJCSAoc2VsZWN0aW9uW2ldICUgR1JJRF9XSURUSCkgKiA1KTsKKwkJICAgICh2b2lkKSBwcmludHcoIiAgICVjICIsICpscCsrID0gJ2EnICsgaSk7CisJCX0KKwkgICAgfTsKKwkgICAgKmxwID0gJ1wwJzsKKworCSAgICBpZiAoc3RybGVuKGxpdmUpID09IDEpIHsKKwkJbW92ZShQUk9NUFRST1csIDApOworCQkodm9pZCkgcHJpbnR3KAorCQkJCSAiTWFraW5nIGZvcmNlZCBtb3Zlcy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCQlyZWZyZXNoKCk7CisJCSh2b2lkKSBzbGVlcCgxKTsKKwkJYyA9IGxpdmVbMF07CisJICAgIH0gZWxzZSB7CisJCWNoYXIgYnVmW0JVRlNJWl07CisKKwkJKHZvaWQpIHNwcmludGYoYnVmLAorCQkJICAgICAgICJUeXBlIFslc10gdG8gbW92ZSwgciB0byByZWRyYXcsIHEgb3IgSU5UUiB0byBxdWl0OiAiLAorCQkJICAgICAgIGxpdmUpOworCisJCWRvIHsKKwkJICAgIG1vdmUoUFJPTVBUUk9XLCAwKTsKKwkJICAgICh2b2lkKSBhZGRzdHIoYnVmKTsKKwkJICAgIG1vdmUoUFJPTVBUUk9XLCAoaW50KSBzdHJsZW4oYnVmKSk7CisJCSAgICBjbHJ0b2VvbCgpOworCQkgICAgKHZvaWQpIGFkZGNoKCcgJyk7CisJCX0gd2hpbGUKKwkJICAgICgoKGMgPSBnZXRjaCgpKSA8ICdhJyB8fCBjID4gJ2QnKSAmJiAoYyAhPSAncicpICYmIChjICE9ICdxJykpOworCSAgICB9CisKKwkgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykKKwkJaWYgKHNlbGVjdGlvbltqXSAhPSBOT0NBUkQpIHsKKwkJICAgIG1vdmUoQkFTRVJPVyArIChzZWxlY3Rpb25bal0gLyBHUklEX1dJRFRIKSAqIDIgKyAzLAorCQkJIChzZWxlY3Rpb25bal0gJSBHUklEX1dJRFRIKSAqIDUpOworCQkgICAgKHZvaWQpIHByaW50dygiICAgICAiKTsKKwkJfQorCisJICAgIGlmIChjID09ICdyJykKKwkJZGlzcGxheV9jYXJkcyhkZWFsX251bWJlcik7CisJICAgIGVsc2UgaWYgKGMgPT0gJ3EnKQorCQlkaWUoU0lHSU5UKTsKKwkgICAgZWxzZSB7CisJCWkgPSBjIC0gJ2EnOworCQlpZiAoc2VsZWN0aW9uW2ldID09IE5PQ0FSRCkKKwkJICAgIGJlZXAoKTsKKwkJZWxzZSB7CisJCSAgICBtb3ZlY2FyZChzZWxlY3Rpb25baV0sIGZyZWVwdHJbaV0pOworCQkgICAgZnJlZXB0cltpXSA9IHNlbGVjdGlvbltpXTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIG1vdmUoUFJPTVBUUk9XLCAwKTsKKyAgICBzdGFuZG91dCgpOworICAgICh2b2lkKSBwcmludHcoIkZpbmlzaGVkIGRlYWwgJWQgLSB0eXBlIGFueSBjaGFyYWN0ZXIgdG8gY29udGludWUuLi4iLCBkZWFsX251bWJlcik7CisgICAgc3RhbmRlbmQoKTsKKyAgICAodm9pZCkgZ2V0Y2goKTsKK30KKworc3RhdGljIGludAorY29sbGVjdF9kaXNjYXJkcyh2b2lkKQoreworICAgIGludCByb3csIGNvbCwgY2FyZG5vID0gMCwgZmluaXNoLCBncmlkbm87CisKKyAgICBmb3IgKHJvdyA9IEhFQVJUUzsgcm93IDw9IENMVUJTOyByb3crKykgeworCWZpbmlzaCA9IDA7CisJZm9yIChjb2wgPSAxOyBjb2wgPCBHUklEX1dJRFRIOyBjb2wrKykgeworCSAgICBncmlkbm8gPSByb3cgKiBHUklEX1dJRFRIICsgY29sOworCisJICAgIGlmICgoZ3JpZFtncmlkbm9dICE9IChncmlkW2dyaWRubyAtIDFdICsgMSkpICYmIChmaW5pc2ggPT0gMCkpIHsKKwkJZmluaXNoID0gMTsKKwkJZnJlZXB0cltyb3ddID0gZ3JpZG5vOworCSAgICB9OworCisJICAgIGlmICgoZmluaXNoICE9IDApICYmIChncmlkW2dyaWRub10gIT0gTk9DQVJEKSkKKwkJZGVja1tjYXJkbm8rK10gPSBncmlkW2dyaWRub107CisJfQorICAgIH0KKyAgICByZXR1cm4gY2FyZG5vOworfQorCitzdGF0aWMgdm9pZAorZ2FtZV9maW5pc2hlZChpbnQgZGVhbCkKK3sKKyAgICBjbGVhcigpOworICAgICh2b2lkKSBwcmludHcoIllvdSBmaW5pc2hlZCB0aGUgZ2FtZSBpbiAlZCBkZWFscy4gVGhpcyBpcyAiLCBkZWFsKTsKKyAgICBzdGFuZG91dCgpOworICAgIGlmIChkZWFsIDwgMikKKwkodm9pZCkgYWRkc3RyKCJleGNlbGxlbnQiKTsKKyAgICBlbHNlIGlmIChkZWFsIDwgNCkKKwkodm9pZCkgYWRkc3RyKCJnb29kIik7CisgICAgZWxzZSBpZiAoZGVhbCA8IDgpCisJKHZvaWQpIGFkZHN0cigiYXZlcmFnZSIpOworICAgIGVsc2UKKwkodm9pZCkgYWRkc3RyKCJwb29yIik7CisgICAgc3RhbmRlbmQoKTsKKyAgICAodm9pZCkgYWRkc3RyKCIuICAgICAgICAgIik7CisgICAgcmVmcmVzaCgpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBDQVRDSEFMTChkaWUpOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaW5pdHNjcigpOworCisgICAgLyoKKyAgICAgKiBXZSB1c2UgQ09MT1JfR1JFRU4gYmVjYXVzZSBDT0xPUl9CTEFDSyBpcyB3aXJlZCB0byB0aGUgd3JvbmcgdGhpbmcuCisgICAgICovCisgICAgc3RhcnRfY29sb3IoKTsKKyAgICBpbml0X3BhaXIoUkVEX09OX1dISVRFLCBDT0xPUl9SRUQsIENPTE9SX1dISVRFKTsKKyAgICBpbml0X3BhaXIoQkxVRV9PTl9XSElURSwgQ09MT1JfQkxVRSwgQ09MT1JfV0hJVEUpOworICAgIGluaXRfcGFpcihCTEFDS19PTl9XSElURSwgQ09MT1JfQkxBQ0ssIENPTE9SX1dISVRFKTsKKworI2lmbmRlZiBDT0xPUl9QQUlSCisgICAgbGV0dGVyc1swXSA9IE9SX0NPTE9SUygnaCcsIFJFRF9PTl9XSElURSk7CS8qIGhlYXJ0cyAqLworICAgIGxldHRlcnNbMV0gPSBPUl9DT0xPUlMoJ3MnLCBCTEFDS19PTl9XSElURSk7CS8qIHNwYWRlcyAqLworICAgIGxldHRlcnNbMl0gPSBPUl9DT0xPUlMoJ2QnLCBSRURfT05fV0hJVEUpOwkvKiBkaWFtb25kcyAqLworICAgIGxldHRlcnNbM10gPSBPUl9DT0xPUlMoJ2MnLCBCTEFDS19PTl9XSElURSk7CS8qIGNsdWJzICovCisjaWYgVVNFX0NQNDM3CisgICAgZ2x5cGhzWzBdID0gUENfQ09MT1JTKCdcMDAzJywgUkVEX09OX1dISVRFKTsJLyogaGVhcnRzICovCisgICAgZ2x5cGhzWzFdID0gUENfQ09MT1JTKCdcMDA2JywgQkxBQ0tfT05fV0hJVEUpOwkvKiBzcGFkZXMgKi8KKyAgICBnbHlwaHNbMl0gPSBQQ19DT0xPUlMoJ1wwMDQnLCBSRURfT05fV0hJVEUpOwkvKiBkaWFtb25kcyAqLworICAgIGdseXBoc1szXSA9IFBDX0NPTE9SUygnXDAwNScsIEJMQUNLX09OX1dISVRFKTsJLyogY2x1YnMgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBVU0VfQ1A0MzcKKyAgICBpZiAodGlnZXRzdHIoInNtcGNoIikpCisJc3VpdHMgPSBnbHlwaHM7CisjZW5kaWYgLyogVVNFX0NQNDM3ICovCisKKyAgICBjYnJlYWsoKTsKKworICAgIGlmIChhcmdjID09IDIpCisJc3JhbmQoKHVuc2lnbmVkKSBhdG9pKGFyZ3ZbMV0pKTsKKyAgICBlbHNlCisJc3JhbmQoKHVuc2lnbmVkKSB0aW1lKCh0aW1lX3QgKikgMCkpOworCisgICAgaW5pdF92YXJzKCk7CisKKyAgICBkbyB7CisJZGVhbF9udW1iZXIrKzsKKwlzaHVmZmxlKGRlY2tfc2l6ZSk7CisJZGVhbF9jYXJkcygpOworCWRpc3BsYXlfY2FyZHMoZGVhbF9udW1iZXIpOworCXBsYXlfZ2FtZSgpOworICAgIH0KKyAgICB3aGlsZQorCSgoZGVja19zaXplID0gY29sbGVjdF9kaXNjYXJkcygpKSAhPSAwKTsKKworICAgIGdhbWVfZmluaXNoZWQoZGVhbF9udW1iZXIpOworCisgICAgZGllKFNJR0lOVCk7CisgICAgLypOT1RSRUFDSEVEICovCit9CisKKy8qIGJsdWUuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL3Rlc3QvYnMuNiBiL3Rlc3QvYnMuNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTdmNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9icy42CkBAIC0wLDAgKzEsNzEgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogYnMuNix2IDEuMiAyMDA2LzA0LzIyIDIyOjQyOjQ0IHRvbSBFeHAgJAorLlRIIEJBVFRMRVNISVBTIDYgIkF1ZyAyMywgMTk4OSIKKy5TSCBOQU1FCiticyBcLSBiYXR0bGVzaGlwcyBnYW1lCisuU0ggU1lOT1BTSVMKK2JhdHRsZSBbIC1iIHwgLXMgXSBbIC1jIF0KKy5TSCBERVNDUklQVElPTgorVGhpcyBwcm9ncmFtIGFsbG93cyB5b3UgdG8gcGxheSB0aGUgZmFtaWxpYXIgQmF0dGxlc2hpcHMgZ2FtZSBhZ2FpbnN0IHRoZQorY29tcHV0ZXIgb24gYSAxMHgxMCBib2FyZC4gVGhlIGludGVyZmFjZSBpcyB2aXN1YWwgYW5kIGxhcmdlbHkKK3NlbGYtZXhwbGFuYXRvcnk7IHlvdSBwbGFjZSB5b3VyIHNoaXBzIGFuZCBwaWNrIHlvdXIgc2hvdHMgYnkgbW92aW5nIHRoZQorY3Vyc29yIGFyb3VuZCB0aGUgYHNlYScgd2l0aCB0aGUgcm9ndWUvaGFjayBtb3Rpb24ga2V5cyBoamtseXVibi4KKy5QUAorTm90ZSB0aGF0IHdoZW4gc2VsZWN0aW5nIGEgc2hpcCB0byBwbGFjZSwgeW91IG11c3QgdHlwZSB0aGUgY2FwaXRhbCBsZXR0ZXIKKyh0aGVzZSBhcmUsIGFmdGVyIGFsbCwgY2FwaXRhbCBzaGlwcykuIER1cmluZyBzaGlwIHBsYWNlbWVudCwgdGhlIGByJyBjb21tYW5kCittYXkgYmUgdXNlZCB0byBpZ25vcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIHJhbmRvbWx5IHBsYWNlIHlvdXIgY3VycmVudGx5CitzZWxlY3RlZCBzaGlwLiBUaGUgYFInIGNvbW1hbmQgd2lsbCBwbGFjZSBhbGwgcmVtYWluaW5nIHNoaXBzIHJhbmRvbWx5LiBUaGUgXkwKK2NvbW1hbmQgKGZvcm0gZmVlZCwgQVNDSUkgMTIpIHdpbGwgZm9yY2UgYSBzY3JlZW4gcmVkcmF3KS4KKy5QUAorVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgY29udHJvbCBnYW1lIG1vZGVzLiAKKworLm5mCisJLWIgc2VsZWN0cyBhIGBibGl0eicgdmFyaWFudAorCS1zIHNlbGVjdHMgYSBgc2Fsdm8nIHZhcmlhbnQKKwktYyBwZXJtaXRzIHNoaXBzIHRvIGJlIHBsYWNlZCBhZGphY2VudGx5CisuZmkKKworVGhlIGBibGl0eicgdmFyaWFudCBhbGxvd3MgYSBzaWRlIHRvIHNob290IGZvciBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0bworc2NvcmUgaGl0cy4KKy5QUAorVGhlIGBzYWx2bycgZ2FtZSBhbGxvd3MgYSBwbGF5ZXIgb25lIHNob3QgcGVyIHR1cm4gZm9yIGVhY2ggb2YgaGlzL2hlciBzaGlwcworc3RpbGwgYWZsb2F0LiAgVGhpcyBwdXRzIGEgcHJlbWl1bSBzY29yaW5nIGhpdHMgZWFybHkgYW5kIGtub2NraW5nIG91dCBzb21lCitzaGlwcyBhbmQgYWxzbyBtYWtlcyBtdWNoIGhhcmRlciB0aGUgc2l0dWF0aW9uIHdoZXJlIHlvdSBmYWNlIGEgc3VwZXJpb3IgZm9yY2UKK3dpdGggb25seSB5b3VyIFBULWJvYXQuCisuUFAKK05vcm1hbGx5LCBzaGlwcyBtdXN0IGJlIHNlcGFyYXRlZCBieSBhdCBsZWFzdCBvbmUgc3F1YXJlIG9mIG9wZW4gd2F0ZXIuIFRoZQorLWMgb3B0aW9uIGRpc2FibGVzIHRoaXMgY2hlY2sgYW5kIGFsbG93cyB0aGVtIHRvIGNsb3NlLXBhY2suCisuUFAKK1RoZSBhbGdvcml0aG0gdGhlIGNvbXB1dGVyIHVzZXMgb25jZSBpdCBoYXMgZm91bmQgYSBzaGlwIHRvIHNpbmsgaXMgcHJvdmFibHkKK29wdGltYWwuIFRoZSBkaXNwZXJzaW9uIGNyaXRlcmlvbiBmb3IgdGhlIHJhbmRvbS1maXJlIGFsZ29yaXRobSBtYXkgbm90IGJlLgorLlNIIEFVVEhPUlMKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBvbmUgQnJ1Y2UgSG9sbG93YXkgaW4gMTk4Ni4gU2Fsdm8gbW9kZSBhZGRlZCBieSBDaHVjayBBLgorRGVHYXVsIChjYm9zZ2QhY2FkKS4gVmlzdWFsIHVzZXIgaW50ZXJmYWNlLCBgY2xvc2VwYWNrJyBvcHRpb24sIGNvZGUgcmV3cml0ZQorYW5kIG1hbnVhbCBwYWdlIGJ5IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBBdWd1c3QgMTk4OS4KZGlmZiAtLWdpdCBhL3Rlc3QvYnMuYyBiL3Rlc3QvYnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU3MmJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9icy5jCkBAIC0wLDAgKzEsMTI1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIAorICogYnMuYyAtIG9yaWdpbmFsIGF1dGhvcjogQnJ1Y2UgSG9sbG93YXkKKyAqCQlzYWx2byBvcHRpb24gYnk6IENodWNrIEEgRGVHYXVsCisgKiB3aXRoIGltcHJvdmVkIHVzZXIgaW50ZXJmYWNlLCBhdXRvY29uZmlndXJhdGlvbiBhbmQgY29kZSBjbGVhbnVwCisgKgkJYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CisgKiB2MS4yIHdpdGggY29sb3Igc3VwcG9ydCBhbmQgbWlub3IgcG9ydGFiaWxpdHkgZml4ZXMsIE5vdmVtYmVyIDE5OTAKKyAqIHYyLjAgZmVhdHVyaW5nIHN0cmljdCBBTlNJL1BPU0lYIGNvbmZvcm1hbmNlLCBOb3ZlbWJlciAxOTkzLgorICogdjIuMSB3aXRoIG5jdXJzZXMgbW91c2Ugc3VwcG9ydCwgU2VwdGVtYmVyIDE5OTUKKyAqCisgKiAkSWQ6IGJzLmMsdiAxLjQ3IDIwMDgvMDgvMDMgMTg6MzA6MjggdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZuZGVmIFNJR0lPVAorI2RlZmluZSBTSUdJT1QgU0lHQUJSVAorI2VuZGlmCisKK3N0YXRpYyBpbnQgZ2V0Y29vcmQoaW50KTsKKworLyoKKyAqIENvbnN0YW50cyBmb3IgdHVuaW5nIHRoZSByYW5kb20tZmlyZSBhbGdvcml0aG0uIEl0IHByZWZlcnMgbW92ZXMgdGhhdAorICogZGlhZ29uYWwtc3RyaXBlIHRoZSBib2FyZCB3aXRoIGEgc3RyaXBlIHNlcGFyYXRpb24gb2Ygc3JjaHN0ZXAuIElmCisgKiBubyBzdWNoIHByZWZlcnJlZCBtb3ZlcyBhcmUgZm91bmQsIHNyY2hzdGVwIGlzIGRlY3JlbWVudGVkLgorICovCisjZGVmaW5lIEJFR0lOU1RFUAkzCS8qIGluaXRpYWwgdmFsdWUgb2Ygc3JjaHN0ZXAgKi8KKworLyogbWlzY2VsbGFuZW91cyBjb25zdGFudHMgKi8KKyNkZWZpbmUgU0hJUFRZUEVTCTUKKyNkZWZpbmUJT1RIRVIJCSgxLXR1cm4pCisjZGVmaW5lIFBMQVlFUgkJMAorI2RlZmluZSBDT01QVVRFUgkxCisjZGVmaW5lIE1BUktfSElUCSdIJworI2RlZmluZSBNQVJLX01JU1MJJ28nCisjZGVmaW5lIENUUkxDCQknXDAwMycJLyogdXNlZCBhcyB0ZXJtaW5hdGUgY29tbWFuZCAqLworI2RlZmluZSBGRgkJJ1wwMTQnCS8qIHVzZWQgYXMgcmVkcmF3IGNvbW1hbmQgKi8KKworLyogY29vcmRpbmF0ZSBoYW5kbGluZyAqLworI2RlZmluZSBCV0lEVEgJCTEwCisjZGVmaW5lIEJERVBUSAkJMTAKKworLyogZGlzcGxheSBzeW1ib2xzICovCisjZGVmaW5lIFNIT1dISVQJCScqJworI2RlZmluZSBTSE9XU1BMQVNICScgJworI2RlZmluZSBJU19TSElQKGMpCShpc3VwcGVyKFVDaGFyKGMpKSA/IFRSVUUgOiBGQUxTRSkKKworLyogaG93IHRvIHBvc2l0aW9uIHVzIG9uIHBsYXllciBib2FyZCAqLworI2RlZmluZSBQWUJBU0UJMworI2RlZmluZSBQWEJBU0UJMworI2RlZmluZSBQWSh5KQkoUFlCQVNFICsgKHkpKQorI2RlZmluZSBQWCh4KQkoUFhCQVNFICsgKHgpKjMpCisjZGVmaW5lIHBnb3RvKHksIHgpCSh2b2lkKW1vdmUoUFkoeSksIFBYKHgpKQorCisvKiBob3cgdG8gcG9zaXRpb24gdXMgb24gY3B1IGJvYXJkICovCisjZGVmaW5lIENZQkFTRQkzCisjZGVmaW5lIENYQkFTRQk0OAorI2RlZmluZSBDWSh5KQkoQ1lCQVNFICsgKHkpKQorI2RlZmluZSBDWCh4KQkoQ1hCQVNFICsgKHgpKjMpCisjZGVmaW5lIENZSU5WKHkpCSgoeSkgLSBDWUJBU0UpCisjZGVmaW5lIENYSU5WKHgpCSgoKHgpIC0gQ1hCQVNFKSAvIDMpCisjZGVmaW5lIGNnb3RvKHksIHgpCSh2b2lkKW1vdmUoQ1koeSksIENYKHgpKQorCisjZGVmaW5lIE9OQk9BUkQoeCwgeSkJKHggPj0gMCAmJiB4IDwgQldJRFRIICYmIHkgPj0gMCAmJiB5IDwgQkRFUFRIKQorCisvKiBvdGhlciBib2FyZCBsb2NhdGlvbnMgKi8KKyNkZWZpbmUgQ09MV0lEVEgJODAKKyNkZWZpbmUgUFJPTVBUTElORQkyMQkvKiBwcm9tcHQgbGluZSAqLworI2RlZmluZSBTWUJBU0UJCUNZQkFTRSArIEJERVBUSCArIDMJLyogbW92ZSBrZXkgZGlhZ3JhbSAqLworI2RlZmluZSBTWEJBU0UJCTYzCisjZGVmaW5lIE1ZQkFTRQkJU1lCQVNFIC0gMQkvKiBkaWFncmFtIGNhcHRpb24gKi8KKyNkZWZpbmUgTVhCQVNFCQk2NAorI2RlZmluZSBIWUJBU0UJCVNZQkFTRSAtIDEJLyogaGVscCBhcmVhICovCisjZGVmaW5lIEhYQkFTRQkJMAorCisvKiB0aGlzIHdpbGwgbmVlZCB0byBiZSBjaGFuZ2VkIGlmIEJXSURUSCBjaGFuZ2VzICovCitzdGF0aWMgY2hhciBudW1iZXJzW10gPSAiICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSI7CisKK3N0YXRpYyBjaGFyIGNhcnJpZXJbXSA9ICJBaXJjcmFmdCBDYXJyaWVyIjsKK3N0YXRpYyBjaGFyIGJhdHRsZVtdID0gIkJhdHRsZXNoaXAiOworc3RhdGljIGNoYXIgc3ViW10gPSAiU3VibWFyaW5lIjsKK3N0YXRpYyBjaGFyIGRlc3Ryb3lbXSA9ICJEZXN0cm95ZXIiOworc3RhdGljIGNoYXIgcHRib2F0W10gPSAiUFQgQm9hdCI7CisKK3N0YXRpYyBjaGFyIG5hbWVbNDBdOworc3RhdGljIGNoYXIgZGZ0bmFtZVtdID0gInN0cmFuZ2VyIjsKKworLyogZGlyZWN0aW9uIGNvbnN0YW50cyAqLworI2RlZmluZSBFCTAKKyNkZWZpbmUgU0UJMQorI2RlZmluZSBTCTIKKyNkZWZpbmUgU1cJMworI2RlZmluZSBXCTQKKyNkZWZpbmUgTlcJNQorI2RlZmluZSBOCTYKKyNkZWZpbmUgTkUJNworc3RhdGljIGludCB4aW5jcls4XSA9Cit7MSwgMSwgMCwgLTEsIC0xLCAtMSwgMCwgMX07CitzdGF0aWMgaW50IHlpbmNyWzhdID0KK3swLCAxLCAxLCAxLCAwLCAtMSwgLTEsIC0xfTsKKworLyogY3VycmVudCBzaGlwIHBvc2l0aW9uIGFuZCBkaXJlY3Rpb24gKi8KK3N0YXRpYyBpbnQgY3VyeCA9IChCV0lEVEggLyAyKTsKK3N0YXRpYyBpbnQgY3VyeSA9IChCREVQVEggLyAyKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKm5hbWU7CQkJLyogbmFtZSBvZiB0aGUgc2hpcCB0eXBlICovCisgICAgaW50IGhpdHM7CQkJLyogaG93IG1hbnkgdGltZXMgaGFzIHRoaXMgc2hpcCBiZWVuIGhpdD8gKi8KKyAgICBjaGFyIHN5bWJvbDsJCS8qIHN5bWJvbCBmb3IgZ2FtZSBwdXJwb3NlcyAqLworICAgIGludCBsZW5ndGg7CQkJLyogbGVuZ3RoIG9mIHNoaXAgKi8KKyAgICBpbnQgeCwgeTsJCQkvKiBjb29yZGluYXRlcyBvZiBzaGlwIHN0YXJ0IHBvaW50ICovCisgICAgaW50IGRpcjsJCQkvKiBkaXJlY3Rpb24gb2YgYGJvdycgKi8KKyAgICBib29sIHBsYWNlZDsJCS8qIGhhcyBpdCBiZWVuIHBsYWNlZCBvbiB0aGUgYm9hcmQ/ICovCit9IHNoaXBfdDsKKworc3RhdGljIGJvb2wgY2hlY2twbGFjZShpbnQgYiwgc2hpcF90ICogc3MsIGludCB2aXMpOworCisjZGVmaW5lIFNISVBJVChuYW1lLCBzeW1ib2wsIGxlbmd0aCkgeyBuYW1lLCAwLCBzeW1ib2wsIGxlbmd0aCwgMCwwLCAwLCBGQUxTRSB9CisKK3N0YXRpYyBzaGlwX3QgcGx5c2hpcFtTSElQVFlQRVNdID0KK3sKKyAgICBTSElQSVQoY2FycmllciwgJ0EnLCA1KSwKKyAgICBTSElQSVQoYmF0dGxlLCAnQicsIDQpLAorICAgIFNISVBJVChkZXN0cm95LCAnRCcsIDMpLAorICAgIFNISVBJVChzdWIsICdTJywgMyksCisgICAgU0hJUElUKHB0Ym9hdCwgJ1AnLCAyKSwKK307CisKK3N0YXRpYyBzaGlwX3QgY3B1c2hpcFtTSElQVFlQRVNdID0KK3sKKyAgICBTSElQSVQoY2FycmllciwgJ0EnLCA1KSwKKyAgICBTSElQSVQoYmF0dGxlLCAnQicsIDQpLAorICAgIFNISVBJVChkZXN0cm95LCAnRCcsIDMpLAorICAgIFNISVBJVChzdWIsICdTJywgMyksCisgICAgU0hJUElUKHB0Ym9hdCwgJ1AnLCAyKSwKK307CisKKy8qICJIaXRzIiBib2FyZCwgYW5kIG1haW4gYm9hcmQuICovCitzdGF0aWMgY2hhciBoaXRzWzJdW0JXSURUSF1bQkRFUFRIXTsKK3N0YXRpYyBjaGFyIGJvYXJkWzJdW0JXSURUSF1bQkRFUFRIXTsKKworc3RhdGljIGludCB0dXJuOwkJLyogMD1wbGF5ZXIsIDE9Y29tcHV0ZXIgKi8KK3N0YXRpYyBpbnQgcGx5d29uID0gMCwgY3B1d29uID0gMDsJLyogSG93IG1hbnkgZ2FtZXMgaGFzIGVhY2ggd29uPyAqLworCitzdGF0aWMgaW50IHNhbHZvLCBibGl0eiwgY2xvc2VwYWNrOworCisjZGVmaW5lCVBSCSh2b2lkKWFkZHN0cgorCitzdGF0aWMgUkVUU0lHVFlQRSB1bmluaXRnYW1lKGludCBzaWcpIEdDQ19OT1JFVFVSTjsKKworc3RhdGljIFJFVFNJR1RZUEUKK3VuaW5pdGdhbWUoaW50IHNpZyBHQ0NfVU5VU0VEKQorLyogZW5kIHRoZSBnYW1lLCBlaXRoZXIgbm9ybWFsbHkgb3IgZHVlIHRvIHNpZ25hbCAqLworeworICAgIGNsZWFyKCk7CisgICAgKHZvaWQpIHJlZnJlc2goKTsKKyAgICAodm9pZCkgcmVzZXRfc2hlbGxfbW9kZSgpOworICAgICh2b2lkKSBlY2hvKCk7CisgICAgKHZvaWQpIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKHNpZyA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyB2b2lkCithbm5vdW5jZW9wdHModm9pZCkKKy8qIGFubm91bmNlIHdoaWNoIGdhbWUgb3B0aW9ucyBhcmUgZW5hYmxlZCAqLworeworICAgIGlmIChzYWx2byB8fCBibGl0eiB8fCBjbG9zZXBhY2spIHsKKwkodm9pZCkgcHJpbnR3KCJQbGF5aW5nIG9wdGlvbmFsIGdhbWUgKCIpOworCWlmIChzYWx2bykKKwkgICAgKHZvaWQpIHByaW50dygic2Fsdm8sICIpOworCWVsc2UKKwkgICAgKHZvaWQpIHByaW50dygibm9zYWx2bywgIik7CisJaWYgKGJsaXR6KQorCSAgICAodm9pZCkgcHJpbnR3KCJibGl0eiAiKTsKKwllbHNlCisJICAgICh2b2lkKSBwcmludHcoIm5vYmxpdHosICIpOworCWlmIChjbG9zZXBhY2spCisJICAgICh2b2lkKSBwcmludHcoImNsb3NlcGFjaykiKTsKKwllbHNlCisJICAgICh2b2lkKSBwcmludHcoIm5vY2xvc2VwYWNrKSIpOworICAgIH0gZWxzZQorCSh2b2lkKSBwcmludHcoCisJCQkgIlBsYXlpbmcgc3RhbmRhcmQgZ2FtZSAobm9ibGl0eiwgbm9zYWx2bywgbm9jbG9zZXBhY2spIik7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRybyh2b2lkKQoreworICAgIGNoYXIgKnRtcG5hbWU7CisKKyAgICBzcmFuZCgodW5zaWduZWQpICh0aW1lKDBMKSArIGdldHBpZCgpKSk7CS8qIEtpY2sgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisKKyAgICBDQVRDSEFMTCh1bmluaXRnYW1lKTsKKworICAgIGlmICgodG1wbmFtZSA9IGdldGxvZ2luKCkpICE9IDApIHsKKwkodm9pZCkgc3RyY3B5KG5hbWUsIHRtcG5hbWUpOworCW5hbWVbMF0gPSB0b3VwcGVyKFVDaGFyKG5hbWVbMF0pKTsKKyAgICB9IGVsc2UKKwkodm9pZCkgc3RyY3B5KG5hbWUsIGRmdG5hbWUpOworCisgICAgKHZvaWQpIGluaXRzY3IoKTsKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgICAodm9pZCkgZGVmX3Byb2dfbW9kZSgpOworICAgICh2b2lkKSBub25sKCk7CisgICAgKHZvaWQpIGNicmVhaygpOworICAgICh2b2lkKSBub2VjaG8oKTsKKworI2lmZGVmIFBFTkdVSU4KKyAgICAodm9pZCkgY2xlYXIoKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoNCwgMjksICJXZWxjb21lIHRvIEJhdHRsZXNoaXAhIik7CisgICAgKHZvaWQpIG1vdmUoOCwgMCk7CisgICAgUFIoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiIpOworICAgIFBSKCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcXCAgICAgICAgICAgICAgICAgICAgIFxcIFxcXG4iKTsKKyAgICBQUigiICAgICAgICAgICAgICAgICAgICAgICAgICBcXCBcXCAgICAgICAgICAgICAgICAgICBcXCBcXCBcXF9fX19fX19fX19fX19cbiIpOworICAgIFBSKCIgICAgICAgICAgICAgICAgICAgICAgICAgXFwgXFwgXFxfX19fX19fX19fX19fICAgICAgXFwgXFwvICAgICAgICAgICAgfFxuIik7CisgICAgUFIoIiAgICAgICAgICAgICAgICAgICAgICAgICAgXFwgXFwvICAgICAgICAgICAgIFxcICAgICAgXFwvICAgICAgICAgICAgIHxcbiIpOworICAgIFBSKCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcXC8gICAgICAgICAgICAgICBcXF9fX19fLyAgICAgICAgICAgICAgfF9fXG4iKTsKKyAgICBQUigiICAgICAgICAgICBfX19fX19fX19fX19fX19fLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiIpOworICAgIFBSKCIgICAgICAgICAgIFxcICBTLlMuIFBlbmd1aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiIpOworICAgIFBSKCIgICAgICAgICAgICBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuIik7CisgICAgUFIoIiAgICAgICAgICAgICBcXF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy9cbiIpOworCisgICAgKHZvaWQpIG12YWRkc3RyKDIyLCAyNywgIkhpdCBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIik7CisgICAgKHZvaWQpIHJlZnJlc2goKTsKKyAgICAodm9pZCkgZ2V0Y2goKTsKKyNlbmRpZiAvKiBQRU5HVUlOICovCisKKyNpZmRlZiBBX0NPTE9SCisgICAgc3RhcnRfY29sb3IoKTsKKworICAgIGluaXRfcGFpcihDT0xPUl9CTEFDSywgQ09MT1JfQkxBQ0ssIENPTE9SX0JMQUNLKTsKKyAgICBpbml0X3BhaXIoQ09MT1JfR1JFRU4sIENPTE9SX0dSRUVOLCBDT0xPUl9CTEFDSyk7CisgICAgaW5pdF9wYWlyKENPTE9SX1JFRCwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisgICAgaW5pdF9wYWlyKENPTE9SX0NZQU4sIENPTE9SX0NZQU4sIENPTE9SX0JMQUNLKTsKKyAgICBpbml0X3BhaXIoQ09MT1JfV0hJVEUsIENPTE9SX1dISVRFLCBDT0xPUl9CTEFDSyk7CisgICAgaW5pdF9wYWlyKENPTE9SX01BR0VOVEEsIENPTE9SX01BR0VOVEEsIENPTE9SX0JMQUNLKTsKKyAgICBpbml0X3BhaXIoQ09MT1JfQkxVRSwgQ09MT1JfQkxVRSwgQ09MT1JfQkxBQ0spOworICAgIGluaXRfcGFpcihDT0xPUl9ZRUxMT1csIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0spOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgICh2b2lkKSBtb3VzZW1hc2soQlVUVE9OMV9DTElDS0VELCAobW1hc2tfdCAqKSBOVUxMKTsKKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KK30KKworLyogVkFSQVJHUzEgKi8KK3N0YXRpYyB2b2lkCitwcm9tcHQoaW50IG4sIE5DVVJTRVNfQ09OU1QgY2hhciAqZiwgY29uc3QgY2hhciAqcykKKy8qIHByaW50IGEgbWVzc2FnZSBhdCB0aGUgcHJvbXB0IGxpbmUgKi8KK3sKKyAgICAodm9pZCkgbW92ZShQUk9NUFRMSU5FICsgbiwgMCk7CisgICAgKHZvaWQpIGNscnRvZW9sKCk7CisgICAgKHZvaWQpIHByaW50dyhmLCBzKTsKKyAgICAodm9pZCkgcmVmcmVzaCgpOworfQorCitzdGF0aWMgdm9pZAorZXJyb3IoTkNVUlNFU19DT05TVCBjaGFyICpzKQoreworICAgICh2b2lkKSBtb3ZlKFBST01QVExJTkUgKyAyLCAwKTsKKyAgICAodm9pZCkgY2xydG9lb2woKTsKKyAgICBpZiAocykgeworCSh2b2lkKSBhZGRzdHIocyk7CisJKHZvaWQpIGJlZXAoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitwbGFjZXNoaXAoaW50IGIsIHNoaXBfdCAqIHNzLCBpbnQgdmlzKQoreworICAgIGludCBsOworCisgICAgZm9yIChsID0gMDsgbCA8IHNzLT5sZW5ndGg7ICsrbCkgeworCWludCBuZXd4ID0gc3MtPnggKyBsICogeGluY3Jbc3MtPmRpcl07CisJaW50IG5ld3kgPSBzcy0+eSArIGwgKiB5aW5jcltzcy0+ZGlyXTsKKworCWJvYXJkW2JdW25ld3hdW25ld3ldID0gc3MtPnN5bWJvbDsKKwlpZiAodmlzKSB7CisJICAgIHBnb3RvKG5ld3ksIG5ld3gpOworCSAgICAodm9pZCkgYWRkY2goKGNodHlwZSkgc3MtPnN5bWJvbCk7CisJfQorICAgIH0KKyAgICBzcy0+aGl0cyA9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3JuZChpbnQgbikKK3sKKyAgICByZXR1cm4gKCgocmFuZCgpICYgMHg3RkZGKSAlIG4pKTsKK30KKworc3RhdGljIHZvaWQKK3JhbmRvbXBsYWNlKGludCBiLCBzaGlwX3QgKiBzcykKKy8qIGdlbmVyYXRlIGEgdmFsaWQgcmFuZG9tIHNoaXAgcGxhY2VtZW50IGludG8gcHgscHkgKi8KK3sKKworICAgIGRvIHsKKwlzcy0+ZGlyID0gcm5kKDIpID8gRSA6IFM7CisJc3MtPnggPSBybmQoQldJRFRIIC0gKHNzLT5kaXIgPT0gRSA/IHNzLT5sZW5ndGggOiAwKSk7CisJc3MtPnkgPSBybmQoQkRFUFRIIC0gKHNzLT5kaXIgPT0gUyA/IHNzLT5sZW5ndGggOiAwKSk7CisgICAgfSB3aGlsZQorCSghY2hlY2twbGFjZShiLCBzcywgRkFMU0UpKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRnYW1lKHZvaWQpCit7CisgICAgaW50IGksIGosIHVucGxhY2VkOworICAgIHNoaXBfdCAqc3M7CisKKyAgICAodm9pZCkgY2xlYXIoKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoMCwgMzUsICJCQVRUTEVTSElQUyIpOworICAgICh2b2lkKSBtb3ZlKFBST01QVExJTkUgKyAyLCAwKTsKKyAgICBhbm5vdW5jZW9wdHMoKTsKKworICAgIG1lbXNldChib2FyZCwgMCwgc2l6ZW9mKGNoYXIpICogQldJRFRIICogQkRFUFRIICogMik7CisgICAgbWVtc2V0KGhpdHMsIDAsIHNpemVvZihjaGFyKSAqIEJXSURUSCAqIEJERVBUSCAqIDIpOworICAgIGZvciAoaSA9IDA7IGkgPCBTSElQVFlQRVM7IGkrKykgeworCXNzID0gY3B1c2hpcCArIGk7CisKKwlzcy0+eCA9CisJICAgIHNzLT55ID0KKwkgICAgc3MtPmRpciA9CisJICAgIHNzLT5oaXRzID0gMDsKKwlzcy0+cGxhY2VkID0gRkFMU0U7CisKKwlzcyA9IHBseXNoaXAgKyBpOworCisJc3MtPnggPQorCSAgICBzcy0+eSA9CisJICAgIHNzLT5kaXIgPQorCSAgICBzcy0+aGl0cyA9IDA7CisJc3MtPnBsYWNlZCA9IEZBTFNFOworICAgIH0KKworICAgIC8qIGRyYXcgZW1wdHkgYm9hcmRzICovCisgICAgKHZvaWQpIG12YWRkc3RyKFBZQkFTRSAtIDIsIFBYQkFTRSArIDUsICJNYWluIEJvYXJkIik7CisgICAgKHZvaWQpIG12YWRkc3RyKFBZQkFTRSAtIDEsIFBYQkFTRSAtIDMsIG51bWJlcnMpOworICAgIGZvciAoaSA9IDA7IGkgPCBCREVQVEg7ICsraSkgeworCSh2b2lkKSBtdmFkZGNoKFBZQkFTRSArIGksIFBYQkFTRSAtIDMsIChjaHR5cGUpIChpICsgJ0EnKSk7CisjaWZkZWYgQV9DT0xPUgorCWlmIChoYXNfY29sb3JzKCkpCisJICAgIGF0dHJvbihDT0xPUl9QQUlSKENPTE9SX0JMVUUpKTsKKyNlbmRpZiAvKiBBX0NPTE9SICovCisJKHZvaWQpIGFkZGNoKCcgJyk7CisJZm9yIChqID0gMDsgaiA8IEJXSURUSDsgaisrKQorCSAgICAodm9pZCkgYWRkc3RyKCIgLiAiKTsKKyNpZmRlZiBBX0NPTE9SCisJYXR0cnNldCgwKTsKKyNlbmRpZiAvKiBBX0NPTE9SICovCisJKHZvaWQpIGFkZGNoKCcgJyk7CisJKHZvaWQpIGFkZGNoKChjaHR5cGUpIChpICsgJ0EnKSk7CisgICAgfQorICAgICh2b2lkKSBtdmFkZHN0cihQWUJBU0UgKyBCREVQVEgsIFBYQkFTRSAtIDMsIG51bWJlcnMpOworICAgICh2b2lkKSBtdmFkZHN0cihDWUJBU0UgLSAyLCBDWEJBU0UgKyA3LCAiSGl0L01pc3MgQm9hcmQiKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoQ1lCQVNFIC0gMSwgQ1hCQVNFIC0gMywgbnVtYmVycyk7CisgICAgZm9yIChpID0gMDsgaSA8IEJERVBUSDsgKytpKSB7CisJKHZvaWQpIG12YWRkY2goQ1lCQVNFICsgaSwgQ1hCQVNFIC0gMywgKGNodHlwZSkgKGkgKyAnQScpKTsKKyNpZmRlZiBBX0NPTE9SCisJaWYgKGhhc19jb2xvcnMoKSkKKwkgICAgYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfQkxVRSkpOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKwkodm9pZCkgYWRkY2goJyAnKTsKKwlmb3IgKGogPSAwOyBqIDwgQldJRFRIOyBqKyspCisJICAgICh2b2lkKSBhZGRzdHIoIiAuICIpOworI2lmZGVmIEFfQ09MT1IKKwlhdHRyc2V0KDApOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKwkodm9pZCkgYWRkY2goJyAnKTsKKwkodm9pZCkgYWRkY2goKGNodHlwZSkgKGkgKyAnQScpKTsKKyAgICB9CisKKyAgICAodm9pZCkgbXZhZGRzdHIoQ1lCQVNFICsgQkRFUFRILCBDWEJBU0UgLSAzLCBudW1iZXJzKTsKKworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UsIEhYQkFTRSwKKwkJICAgICJUbyBwb3NpdGlvbiB5b3VyIHNoaXBzOiBtb3ZlIHRoZSBjdXJzb3IgdG8gYSBzcG90LCB0aGVuIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDEsIEhYQkFTRSwKKwkJICAgICJ0eXBlIHRoZSBmaXJzdCBsZXR0ZXIgb2YgYSBzaGlwIHR5cGUgdG8gc2VsZWN0IGl0LCB0aGVuIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDIsIEhYQkFTRSwKKwkJICAgICJ0eXBlIGEgZGlyZWN0aW9uIChbaGprbF0gb3IgWzQ4NjJdKSwgaW5kaWNhdGluZyBob3cgdGhlIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDMsIEhYQkFTRSwKKwkJICAgICJzaGlwIHNob3VsZCBiZSBwb2ludGVkLiBZb3UgbWF5IGFsc28gdHlwZSBhIHNoaXAgbGV0dGVyIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDQsIEhYQkFTRSwKKwkJICAgICJmb2xsb3dlZCBieSBgcicgdG8gcG9zaXRpb24gaXQgcmFuZG9tbHksIG9yIHR5cGUgYFInIHRvIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDUsIEhYQkFTRSwKKwkJICAgICJwbGFjZSBhbGwgcmVtYWluaW5nIHNoaXBzIHJhbmRvbWx5LiIpOworCisgICAgKHZvaWQpIG12YWRkc3RyKE1ZQkFTRSwgTVhCQVNFLCAiQWltaW5nIGtleXM6Iik7CisgICAgKHZvaWQpIG12YWRkc3RyKFNZQkFTRSwgU1hCQVNFLCAieSBrIHUgICAgNyA4IDkiKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoU1lCQVNFICsgMSwgU1hCQVNFLCAiIFxcfC8gICAgICBcXHwvICIpOworICAgICh2b2lkKSBtdmFkZHN0cihTWUJBU0UgKyAyLCBTWEJBU0UsICJoLSstbCAgICA0LSstNiIpOworICAgICh2b2lkKSBtdmFkZHN0cihTWUJBU0UgKyAzLCBTWEJBU0UsICIgL3xcXCAgICAgIC98XFwgIik7CisgICAgKHZvaWQpIG12YWRkc3RyKFNZQkFTRSArIDQsIFNYQkFTRSwgImIgaiBuICAgIDEgMiAzIik7CisKKyAgICAvKiBoYXZlIHRoZSBjb21wdXRlciBwbGFjZSBzaGlwcyAqLworICAgIGZvciAoc3MgPSBjcHVzaGlwOyBzcyA8IGNwdXNoaXAgKyBTSElQVFlQRVM7IHNzKyspIHsKKwlyYW5kb21wbGFjZShDT01QVVRFUiwgc3MpOworCXBsYWNlc2hpcChDT01QVVRFUiwgc3MsIEZBTFNFKTsKKyAgICB9CisKKyAgICBzcyA9IChzaGlwX3QgKikgTlVMTDsKKyAgICBkbyB7CisJY2hhciBjLCBkb2NrZWRbU0hJUFRZUEVTICsgMl0sICpjcCA9IGRvY2tlZDsKKworCS8qIGZpZ3VyZSB3aGljaCBzaGlwcyBzdGlsbCB3YWl0IHRvIGJlIHBsYWNlZCAqLworCSpjcCsrID0gJ1InOworCWZvciAoaSA9IDA7IGkgPCBTSElQVFlQRVM7IGkrKykKKwkgICAgaWYgKCFwbHlzaGlwW2ldLnBsYWNlZCkKKwkJKmNwKysgPSBwbHlzaGlwW2ldLnN5bWJvbDsKKwkqY3AgPSAnXDAnOworCisJLyogZ2V0IGEgY29tbWFuZCBsZXR0ZXIgKi8KKwlwcm9tcHQoMSwgIlR5cGUgb25lIG9mIFslc10gdG8gcGljayBhIHNoaXAuIiwgZG9ja2VkICsgMSk7CisJZG8geworCSAgICBjID0gZ2V0Y29vcmQoUExBWUVSKTsKKwl9IHdoaWxlCisJICAgICghc3RyY2hyKGRvY2tlZCwgYykpOworCisJaWYgKGMgPT0gJ1InKQorCSAgICAodm9pZCkgdW5nZXRjaCgnUicpOworCWVsc2UgeworCSAgICAvKiBtYXAgdGhhdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbCAqLworCSAgICBmb3IgKHNzID0gcGx5c2hpcDsgc3MgPCBwbHlzaGlwICsgU0hJUFRZUEVTOyBzcysrKQorCQlpZiAoc3MtPnN5bWJvbCA9PSBjKQorCQkgICAgYnJlYWs7CisKKwkgICAgcHJvbXB0KDEsICJUeXBlIG9uZSBvZiBbaGprbHJSXSB0byBwbGFjZSB5b3VyICVzLiIsIHNzLT5uYW1lKTsKKwkgICAgcGdvdG8oY3VyeSwgY3VyeCk7CisJfQorCisJZG8geworCSAgICBjID0gZ2V0Y2goKTsKKwl9IHdoaWxlCisJICAgICghKHN0cmNocigiaGprbHJSIiwgYykgfHwgYyA9PSBGRikpOworCisJaWYgKGMgPT0gRkYpIHsKKwkgICAgKHZvaWQpIGNsZWFyb2soc3Rkc2NyLCBUUlVFKTsKKwkgICAgKHZvaWQpIHJlZnJlc2goKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ3InKSB7CisJICAgIGFzc2VydChzcyAhPSAwKTsKKwkgICAgcHJvbXB0KDEsICJSYW5kb20tcGxhY2luZyB5b3VyICVzIiwgc3MtPm5hbWUpOworCSAgICByYW5kb21wbGFjZShQTEFZRVIsIHNzKTsKKwkgICAgcGxhY2VzaGlwKFBMQVlFUiwgc3MsIFRSVUUpOworCSAgICBlcnJvcigoY2hhciAqKSBOVUxMKTsKKwkgICAgc3MtPnBsYWNlZCA9IFRSVUU7CisJfSBlbHNlIGlmIChjID09ICdSJykgeworCSAgICBwcm9tcHQoMSwgIlBsYWNpbmcgdGhlIHJlc3Qgb2YgeW91ciBmbGVldCBhdCByYW5kb20uLi4iLCAiIik7CisJICAgIGZvciAoc3MgPSBwbHlzaGlwOyBzcyA8IHBseXNoaXAgKyBTSElQVFlQRVM7IHNzKyspCisJCWlmICghc3MtPnBsYWNlZCkgeworCQkgICAgcmFuZG9tcGxhY2UoUExBWUVSLCBzcyk7CisJCSAgICBwbGFjZXNoaXAoUExBWUVSLCBzcywgVFJVRSk7CisJCSAgICBzcy0+cGxhY2VkID0gVFJVRTsKKwkJfQorCSAgICBlcnJvcigoY2hhciAqKSBOVUxMKTsKKwl9IGVsc2UgaWYgKHN0cmNocigiaGprbDg0NjIiLCBjKSkgeworCSAgICBhc3NlcnQoc3MgIT0gMCk7CisJICAgIHNzLT54ID0gY3VyeDsKKwkgICAgc3MtPnkgPSBjdXJ5OworCisJICAgIHN3aXRjaCAoYykgeworCSAgICBjYXNlICdrJzoKKwkgICAgY2FzZSAnOCc6CisJCXNzLT5kaXIgPSBOOworCQlicmVhazsKKwkgICAgY2FzZSAnaic6CisJICAgIGNhc2UgJzInOgorCQlzcy0+ZGlyID0gUzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2gnOgorCSAgICBjYXNlICc0JzoKKwkJc3MtPmRpciA9IFc7CisJCWJyZWFrOworCSAgICBjYXNlICdsJzoKKwkgICAgY2FzZSAnNic6CisJCXNzLT5kaXIgPSBFOworCQlicmVhazsKKwkgICAgfQorCisJICAgIGlmIChjaGVja3BsYWNlKFBMQVlFUiwgc3MsIFRSVUUpKSB7CisJCXBsYWNlc2hpcChQTEFZRVIsIHNzLCBUUlVFKTsKKwkJZXJyb3IoKGNoYXIgKikgTlVMTCk7CisJCXNzLT5wbGFjZWQgPSBUUlVFOworCSAgICB9CisJfQorCisJZm9yICh1bnBsYWNlZCA9IGkgPSAwOyBpIDwgU0hJUFRZUEVTOyBpKyspCisJICAgIHVucGxhY2VkICs9ICFwbHlzaGlwW2ldLnBsYWNlZDsKKyAgICB9IHdoaWxlCisJKHVucGxhY2VkKTsKKworICAgIHR1cm4gPSBybmQoMik7CisKKyAgICAodm9pZCkgbXZwcmludHcoSFlCQVNFLCBIWEJBU0UsCisJCSAgICAiVG8gZmlyZSwgbW92ZSB0aGUgY3Vyc29yIHRvIHlvdXIgY2hvc2VuIGFpbWluZyBwb2ludCAgICIpOworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UgKyAxLCBIWEJBU0UsCisJCSAgICAiYW5kIHN0cmlrZSBhbnkga2V5IG90aGVyIHRoYW4gYSBtb3Rpb24ga2V5LiAgICAgICAgICAgICIpOworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UgKyAyLCBIWEJBU0UsCisJCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UgKyAzLCBIWEJBU0UsCisJCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UgKyA0LCBIWEJBU0UsCisJCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UgKyA1LCBIWEJBU0UsCisJCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCisgICAgKHZvaWQpIHByb21wdCgwLCAiUHJlc3MgYW55IGtleSB0byBzdGFydC4uLiIsICIiKTsKKyAgICAodm9pZCkgZ2V0Y2goKTsKK30KKworc3RhdGljIGludAorZ2V0Y29vcmQoaW50IGF0Y3B1KQoreworICAgIGludCBueSwgbngsIGM7CisKKyAgICBpZiAoYXRjcHUpCisJY2dvdG8oY3VyeSwgY3VyeCk7CisgICAgZWxzZQorCXBnb3RvKGN1cnksIGN1cngpOworICAgICh2b2lkKSByZWZyZXNoKCk7CisgICAgZm9yICg7OykgeworCWlmIChhdGNwdSkgeworCSAgICAodm9pZCkgbXZwcmludHcoQ1lCQVNFICsgQkRFUFRIICsgMSwgQ1hCQVNFICsgMTEsICIoJWQsICVjKSIsCisJCQkgICAgY3VyeCwgJ0EnICsgY3VyeSk7CisJICAgIGNnb3RvKGN1cnksIGN1cngpOworCX0gZWxzZSB7CisJICAgICh2b2lkKSBtdnByaW50dyhQWUJBU0UgKyBCREVQVEggKyAxLCBQWEJBU0UgKyAxMSwgIiglZCwgJWMpIiwKKwkJCSAgICBjdXJ4LCAnQScgKyBjdXJ5KTsKKwkgICAgcGdvdG8oY3VyeSwgY3VyeCk7CisJfQorCisJc3dpdGNoIChjID0gZ2V0Y2goKSkgeworCWNhc2UgJ2snOgorCWNhc2UgJzgnOgorCWNhc2UgS0VZX1VQOgorCSAgICBueSA9IGN1cnkgKyBCREVQVEggLSAxOworCSAgICBueCA9IGN1cng7CisJICAgIGJyZWFrOworCWNhc2UgJ2onOgorCWNhc2UgJzInOgorCWNhc2UgS0VZX0RPV046CisJICAgIG55ID0gY3VyeSArIDE7CisJICAgIG54ID0gY3VyeDsKKwkgICAgYnJlYWs7CisJY2FzZSAnaCc6CisJY2FzZSAnNCc6CisJY2FzZSBLRVlfTEVGVDoKKwkgICAgbnkgPSBjdXJ5OworCSAgICBueCA9IGN1cnggKyBCV0lEVEggLSAxOworCSAgICBicmVhazsKKwljYXNlICdsJzoKKwljYXNlICc2JzoKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgbnkgPSBjdXJ5OworCSAgICBueCA9IGN1cnggKyAxOworCSAgICBicmVhazsKKwljYXNlICd5JzoKKwljYXNlICc3JzoKKwljYXNlIEtFWV9BMToKKwkgICAgbnkgPSBjdXJ5ICsgQkRFUFRIIC0gMTsKKwkgICAgbnggPSBjdXJ4ICsgQldJRFRIIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYic6CisJY2FzZSAnMSc6CisJY2FzZSBLRVlfQzE6CisJICAgIG55ID0gY3VyeSArIDE7CisJICAgIG54ID0gY3VyeCArIEJXSURUSCAtIDE7CisJICAgIGJyZWFrOworCWNhc2UgJ3UnOgorCWNhc2UgJzknOgorCWNhc2UgS0VZX0EzOgorCSAgICBueSA9IGN1cnkgKyBCREVQVEggLSAxOworCSAgICBueCA9IGN1cnggKyAxOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwljYXNlICczJzoKKwljYXNlIEtFWV9DMzoKKwkgICAgbnkgPSBjdXJ5ICsgMTsKKwkgICAgbnggPSBjdXJ4ICsgMTsKKwkgICAgYnJlYWs7CisJY2FzZSBGRjoKKwkgICAgbnggPSBjdXJ4OworCSAgICBueSA9IGN1cnk7CisJICAgICh2b2lkKSBjbGVhcm9rKHN0ZHNjciwgVFJVRSk7CisJICAgICh2b2lkKSByZWZyZXNoKCk7CisJICAgIGJyZWFrOworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorCWNhc2UgS0VZX01PVVNFOgorCSAgICB7CisJCU1FVkVOVCBteWV2ZW50OworCisJCWdldG1vdXNlKCZteWV2ZW50KTsKKwkJaWYgKGF0Y3B1CisJCSAgICAmJiBteWV2ZW50LnkgPj0gQ1koMCkgJiYgbXlldmVudC55IDw9IENZKEJERVBUSCkKKwkJICAgICYmIG15ZXZlbnQueCA+PSBDWCgwKSAmJiBteWV2ZW50LnggPD0gQ1goQkRFUFRIKSkgeworCQkgICAgY3VyeCA9IENYSU5WKG15ZXZlbnQueCk7CisJCSAgICBjdXJ5ID0gQ1lJTlYobXlldmVudC55KTsKKwkJICAgIHJldHVybiAoJyAnKTsKKwkJfSBlbHNlIHsKKwkJICAgIGJlZXAoKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgICAgLyogbm8gZmFsbCB0aHJvdWdoICovCisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisKKwlkZWZhdWx0OgorCSAgICBpZiAoYXRjcHUpCisJCSh2b2lkKSBtdmFkZHN0cihDWUJBU0UgKyBCREVQVEggKyAxLCBDWEJBU0UgKyAxMSwgIiAgICAgICIpOworCSAgICBlbHNlCisJCSh2b2lkKSBtdmFkZHN0cihQWUJBU0UgKyBCREVQVEggKyAxLCBQWEJBU0UgKyAxMSwgIiAgICAgICIpOworCSAgICByZXR1cm4gKGMpOworCX0KKworCWN1cnggPSBueCAlIEJXSURUSDsKKwljdXJ5ID0gbnkgJSBCREVQVEg7CisgICAgfQorfQorCitzdGF0aWMgYm9vbAorY29sbGlkZWNoZWNrKGludCBiLCBpbnQgeSwgaW50IHgpCisvKiBpcyB0aGlzIGxvY2F0aW9uIG9uIHRoZSBzZWxlY3RlZCB6Ym9hcmQgYWRqYWNlbnQgdG8gYSBzaGlwPyAqLworeworICAgIGJvb2wgY29sbGlkZTsKKworICAgIC8qIGFueXRoaW5nIG9uIHRoZSBzcXVhcmUgKi8KKyAgICBpZiAoKGNvbGxpZGUgPSBJU19TSElQKGJvYXJkW2JdW3hdW3ldKSkgIT0gRkFMU0UpCisJcmV0dXJuIChjb2xsaWRlKTsKKworICAgIC8qIGFueXRoaW5nIG9uIHRoZSBuZWlnaGJvcnMgKi8KKyAgICBpZiAoIWNsb3NlcGFjaykgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCSAgICBpbnQgeGVuZCwgeWVuZDsKKworCSAgICB5ZW5kID0geSArIHlpbmNyW2ldOworCSAgICB4ZW5kID0geCArIHhpbmNyW2ldOworCSAgICBpZiAoT05CT0FSRCh4ZW5kLCB5ZW5kKQorCQkmJiBJU19TSElQKGJvYXJkW2JdW3hlbmRdW3llbmRdKSkgeworCQljb2xsaWRlID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAoY29sbGlkZSk7Cit9CisKK3N0YXRpYyBib29sCitjaGVja3BsYWNlKGludCBiLCBzaGlwX3QgKiBzcywgaW50IHZpcykKK3sKKyAgICBpbnQgbCwgeGVuZCwgeWVuZDsKKworICAgIC8qIGZpcnN0LCBjaGVjayBmb3IgYm9hcmQgZWRnZXMgKi8KKyAgICB4ZW5kID0gc3MtPnggKyAoc3MtPmxlbmd0aCAtIDEpICogeGluY3Jbc3MtPmRpcl07CisgICAgeWVuZCA9IHNzLT55ICsgKHNzLT5sZW5ndGggLSAxKSAqIHlpbmNyW3NzLT5kaXJdOworICAgIGlmICghT05CT0FSRCh4ZW5kLCB5ZW5kKSkgeworCWlmICh2aXMpCisJICAgIHN3aXRjaCAocm5kKDMpKSB7CisJICAgIGNhc2UgMDoKKwkJZXJyb3IoIlNoaXAgaXMgaGFuZ2luZyBmcm9tIHRoZSBlZGdlIG9mIHRoZSB3b3JsZCIpOworCQlicmVhazsKKwkgICAgY2FzZSAxOgorCQllcnJvcigiVHJ5IGZpdHRpbmcgaXQgb24gdGhlIGJvYXJkIik7CisJCWJyZWFrOworCSAgICBjYXNlIDI6CisJCWVycm9yKCJGaWd1cmUgSSB3b24ndCBmaW5kIGl0IGlmIHlvdSBwdXQgaXQgdGhlcmU/Iik7CisJCWJyZWFrOworCSAgICB9CisJcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgZm9yIChsID0gMDsgbCA8IHNzLT5sZW5ndGg7ICsrbCkgeworCWlmIChjb2xsaWRlY2hlY2soYiwgc3MtPnkgKyBsICogeWluY3Jbc3MtPmRpcl0sIHNzLT54ICsgbCAqIHhpbmNyW3NzLT5kaXJdKSkgeworCSAgICBpZiAodmlzKQorCQlzd2l0Y2ggKHJuZCgzKSkgeworCQljYXNlIDA6CisJCSAgICBlcnJvcigiVGhlcmUncyBhbHJlYWR5IGEgc2hpcCB0aGVyZSIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgMToKKwkJICAgIGVycm9yKCJDb2xsaXNpb24gYWxlcnQhICBBYWFhYWFnaCEiKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDI6CisJCSAgICBlcnJvcigiRXIsIEFkbWlyYWwsIHdoYXQgYWJvdXQgdGhlIG90aGVyIHNoaXA/Iik7CisJCSAgICBicmVhazsKKwkJfQorCSAgICByZXR1cm4gKEZBTFNFKTsKKwl9CisgICAgfQorICAgIHJldHVybiAoVFJVRSk7Cit9CisKK3N0YXRpYyBpbnQKK2F3aW5uYSh2b2lkKQoreworICAgIGludCBpLCBqOworICAgIHNoaXBfdCAqc3M7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisJc3MgPSAoaSkgPyBjcHVzaGlwIDogcGx5c2hpcDsKKwlmb3IgKGogPSAwOyBqIDwgU0hJUFRZUEVTOyArK2osICsrc3MpCisJICAgIGlmIChzcy0+bGVuZ3RoID4gc3MtPmhpdHMpCisJCWJyZWFrOworCWlmIChqID09IFNISVBUWVBFUykKKwkgICAgcmV0dXJuIChPVEhFUik7CisgICAgfQorICAgIHJldHVybiAoLTEpOworfQorCitzdGF0aWMgc2hpcF90ICoKK2hpdHNoaXAoaW50IHgsIGludCB5KQorLyogcmVnaXN0ZXIgYSBoaXQgb24gdGhlIHRhcmdldGVkIHNoaXAgKi8KK3sKKyAgICBzaGlwX3QgKnNiLCAqc3M7CisgICAgY2hhciBzeW07CisgICAgaW50IG9sZHgsIG9sZHk7CisKKyAgICBnZXR5eChzdGRzY3IsIG9sZHksIG9sZHgpOworICAgIHNiID0gKHR1cm4pID8gcGx5c2hpcCA6IGNwdXNoaXA7CisgICAgaWYgKChzeW0gPSBib2FyZFtPVEhFUl1beF1beV0pID09IDApCisJcmV0dXJuICgoc2hpcF90ICopIE5VTEwpOworICAgIGZvciAoc3MgPSBzYjsgc3MgPCBzYiArIFNISVBUWVBFUzsgKytzcykKKwlpZiAoc3MtPnN5bWJvbCA9PSBzeW0pIHsKKwkgICAgaWYgKCsrc3MtPmhpdHMgPCBzcy0+bGVuZ3RoKQkvKiBzdGlsbCBhZmxvYXQ/ICovCisJCXJldHVybiAoKHNoaXBfdCAqKSBOVUxMKTsKKwkgICAgZWxzZSB7CQkvKiBzdW5rISAqLworCQlpbnQgaSwgajsKKworCQlpZiAoIWNsb3NlcGFjaykKKwkJICAgIGZvciAoaiA9IC0xOyBqIDw9IDE7IGorKykgeworCQkJaW50IGJ4ID0gc3MtPnggKyBqICogeGluY3JbKHNzLT5kaXIgKyAyKSAlIDhdOworCQkJaW50IGJ5ID0gc3MtPnkgKyBqICogeWluY3JbKHNzLT5kaXIgKyAyKSAlIDhdOworCisJCQlmb3IgKGkgPSAtMTsgaSA8PSBzcy0+bGVuZ3RoOyArK2kpIHsKKwkJCSAgICBpbnQgeDEsIHkxOworCisJCQkgICAgeDEgPSBieCArIGkgKiB4aW5jcltzcy0+ZGlyXTsKKwkJCSAgICB5MSA9IGJ5ICsgaSAqIHlpbmNyW3NzLT5kaXJdOworCQkJICAgIGlmIChPTkJPQVJEKHgxLCB5MSkpIHsKKwkJCQloaXRzW3R1cm5dW3gxXVt5MV0gPSBNQVJLX01JU1M7CisJCQkJaWYgKHR1cm4gJSAyID09IFBMQVlFUikgeworCQkJCSAgICBjZ290byh5MSwgeDEpOworI2lmZGVmIEFfQ09MT1IKKwkJCQkgICAgaWYgKGhhc19jb2xvcnMoKSkKKwkJCQkJYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfR1JFRU4pKTsKKyNlbmRpZiAvKiBBX0NPTE9SICovCisJCQkJICAgICh2b2lkKSBhZGRjaChNQVJLX01JU1MpOworI2lmZGVmIEFfQ09MT1IKKwkJCQkgICAgYXR0cnNldCgwKTsKKyNlbmRpZiAvKiBBX0NPTE9SICovCisJCQkJfSBlbHNlIHsKKwkJCQkgICAgcGdvdG8oeTEsIHgxKTsKKwkJCQkgICAgKHZvaWQpIGFkZGNoKFNIT1dTUExBU0gpOworCQkJCX0KKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisKKwkJZm9yIChpID0gMDsgaSA8IHNzLT5sZW5ndGg7ICsraSkgeworCQkgICAgaW50IHgxID0gc3MtPnggKyBpICogeGluY3Jbc3MtPmRpcl07CisJCSAgICBpbnQgeTEgPSBzcy0+eSArIGkgKiB5aW5jcltzcy0+ZGlyXTsKKworCQkgICAgaGl0c1t0dXJuXVt4MV1beTFdID0gc3MtPnN5bWJvbDsKKwkJICAgIGlmICh0dXJuICUgMiA9PSBQTEFZRVIpIHsKKwkJCWNnb3RvKHkxLCB4MSk7CisJCQkodm9pZCkgYWRkY2goKGNodHlwZSkgKHNzLT5zeW1ib2wpKTsKKwkJICAgIH0gZWxzZSB7CisJCQlwZ290byh5MSwgeDEpOworI2lmZGVmIEFfQ09MT1IKKwkJCWlmIChoYXNfY29sb3JzKCkpCisJCQkgICAgYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfUkVEKSk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCQkJKHZvaWQpIGFkZGNoKFNIT1dISVQpOworI2lmZGVmIEFfQ09MT1IKKwkJCWF0dHJzZXQoMCk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCQkgICAgfQorCQl9CisKKwkJKHZvaWQpIG1vdmUob2xkeSwgb2xkeCk7CisJCXJldHVybiAoc3MpOworCSAgICB9CisJfQorICAgICh2b2lkKSBtb3ZlKG9sZHksIG9sZHgpOworICAgIHJldHVybiAoKHNoaXBfdCAqKSBOVUxMKTsKK30KKworc3RhdGljIGJvb2wKK3BseXR1cm4odm9pZCkKK3sKKyAgICBzaGlwX3QgKnNzOworICAgIGJvb2wgaGl0OworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqbSA9IE5VTEw7CisKKyAgICBwcm9tcHQoMSwgIldoZXJlIGRvIHlvdSB3YW50IHRvIHNob290PyAiLCAiIik7CisgICAgZm9yICg7OykgeworCSh2b2lkKSBnZXRjb29yZChDT01QVVRFUik7CisJaWYgKGhpdHNbUExBWUVSXVtjdXJ4XVtjdXJ5XSkgeworCSAgICBwcm9tcHQoMSwgIllvdSBzaGVsbGVkIHRoaXMgc3BvdCBhbHJlYWR5ISBUcnkgYWdhaW4uIiwgIiIpOworCSAgICBiZWVwKCk7CisJfSBlbHNlCisJICAgIGJyZWFrOworICAgIH0KKyAgICBoaXQgPSBJU19TSElQKGJvYXJkW0NPTVBVVEVSXVtjdXJ4XVtjdXJ5XSk7CisgICAgaGl0c1tQTEFZRVJdW2N1cnhdW2N1cnldID0gKGhpdCA/IE1BUktfSElUIDogTUFSS19NSVNTKTsKKyAgICBjZ290byhjdXJ5LCBjdXJ4KTsKKyNpZmRlZiBBX0NPTE9SCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCWlmIChoaXQpCisJICAgIGF0dHJvbihDT0xPUl9QQUlSKENPTE9SX1JFRCkpOworCWVsc2UKKwkgICAgYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfR1JFRU4pKTsKKyAgICB9CisjZW5kaWYgLyogQV9DT0xPUiAqLworICAgICh2b2lkKSBhZGRjaCgoY2h0eXBlKSBoaXRzW1BMQVlFUl1bY3VyeF1bY3VyeV0pOworI2lmZGVmIEFfQ09MT1IKKyAgICBhdHRyc2V0KDApOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKworICAgIHByb21wdCgxLCAiWW91ICVzLiIsIGhpdCA/ICJzY29yZWQgYSBoaXQiIDogIm1pc3NlZCIpOworICAgIGlmIChoaXQgJiYgKHNzID0gaGl0c2hpcChjdXJ4LCBjdXJ5KSkpIHsKKwlzd2l0Y2ggKHJuZCg1KSkgeworCWNhc2UgMDoKKwkgICAgbSA9ICIgWW91IHNhbmsgbXkgJXMhIjsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBtID0gIiBJIGhhdmUgdGhpcyBzaW5raW5nIGZlZWxpbmcgYWJvdXQgbXkgJXMuLi4uIjsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBtID0gIiBNeSAlcyBoYXMgZ29uZSB0byBEYXZ5IEpvbmVzJ3MgbG9ja2VyISI7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgbSA9ICIgR2x1YiwgZ2x1YiAtLSBteSAlcyBpcyBoZWFkZWQgZm9yIHRoZSBib3R0b20hIjsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBtID0gIiBZb3UnbGwgcGljayB1cCBzdXJ2aXZvcnMgZnJvbSBteSAlcywgSSBob3BlLi4uISI7CisJICAgIGJyZWFrOworCX0KKwkodm9pZCkgcHJpbnR3KG0sIHNzLT5uYW1lKTsKKwkodm9pZCkgYmVlcCgpOworICAgIH0KKyAgICByZXR1cm4gKGhpdCk7Cit9CisKK3N0YXRpYyBpbnQKK3NnZXRjKGNvbnN0IGNoYXIgKnMpCit7CisgICAgY29uc3QgY2hhciAqczE7CisgICAgaW50IGNoOworCisgICAgKHZvaWQpIHJlZnJlc2goKTsKKyAgICBmb3IgKDs7KSB7CisJY2ggPSBnZXRjaCgpOworCWlmIChpc2xvd2VyKGNoKSkKKwkgICAgY2ggPSB0b3VwcGVyKGNoKTsKKwlpZiAoY2ggPT0gQ1RSTEMpCisJICAgIHVuaW5pdGdhbWUoMCk7CisJZm9yIChzMSA9IHM7ICpzMSAmJiBjaCAhPSAqczE7ICsrczEpCisJICAgIGNvbnRpbnVlOworCWlmICgqczEpIHsKKwkgICAgKHZvaWQpIGFkZGNoKChjaHR5cGUpIGNoKTsKKwkgICAgKHZvaWQpIHJlZnJlc2goKTsKKwkgICAgcmV0dXJuIChjaCk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK3JhbmRvbWZpcmUoaW50ICpweCwgaW50ICpweSkKKy8qIHJhbmRvbS1maXJlIHJvdXRpbmUgLS0gaW1wbGVtZW50cyBzaW1wbGUgZGlhZ29uYWwtc3RyaXBpbmcgc3RyYXRlZ3kgKi8KK3sKKyAgICBzdGF0aWMgaW50IHR1cm5jb3VudCA9IDA7CisgICAgc3RhdGljIGludCBzcmNoc3RlcCA9IEJFR0lOU1RFUDsKKyAgICBzdGF0aWMgaW50IGh1bnRvZmZzOwkvKiBPZmZzZXQgb24gc2VhcmNoIHN0cmF0ZWd5ICovCisgICAgaW50IHlwb3NzaWJsZVtCV0lEVEggKiBCREVQVEhdLCB4cG9zc2libGVbQldJRFRIICogQkRFUFRIXSwgbnBvc3M7CisgICAgaW50IHlwcmVmZXJyZWRbQldJRFRIICogQkRFUFRIXSwgeHByZWZlcnJlZFtCV0lEVEggKiBCREVQVEhdLCBucHJlZjsKKyAgICBpbnQgeCwgeSwgaTsKKworICAgIGlmICh0dXJuY291bnQrKyA9PSAwKQorCWh1bnRvZmZzID0gcm5kKHNyY2hzdGVwKTsKKworICAgIC8qIGZpcnN0LCBsaXN0IGFsbCBwb3NzaWJsZSBtb3ZlcyAqLworICAgIG5wb3NzID0gbnByZWYgPSAwOworICAgIGZvciAoeCA9IDA7IHggPCBCV0lEVEg7IHgrKykKKwlmb3IgKHkgPSAwOyB5IDwgQkRFUFRIOyB5KyspCisJICAgIGlmICghaGl0c1tDT01QVVRFUl1beF1beV0pIHsKKwkJeHBvc3NpYmxlW25wb3NzXSA9IHg7CisJCXlwb3NzaWJsZVtucG9zc10gPSB5OworCQlucG9zcysrOworCQlpZiAoKCh4ICsgaHVudG9mZnMpICUgc3JjaHN0ZXApICE9ICh5ICUgc3JjaHN0ZXApKSB7CisJCSAgICB4cHJlZmVycmVkW25wcmVmXSA9IHg7CisJCSAgICB5cHJlZmVycmVkW25wcmVmXSA9IHk7CisJCSAgICBucHJlZisrOworCQl9CisJICAgIH0KKworICAgIGlmIChucHJlZikgeworCWkgPSBybmQobnByZWYpOworCisJKnB4ID0geHByZWZlcnJlZFtpXTsKKwkqcHkgPSB5cHJlZmVycmVkW2ldOworICAgIH0gZWxzZSBpZiAobnBvc3MpIHsKKwlpID0gcm5kKG5wb3NzKTsKKworCSpweCA9IHhwb3NzaWJsZVtpXTsKKwkqcHkgPSB5cG9zc2libGVbaV07CisKKwlpZiAoc3JjaHN0ZXAgPiAxKQorCSAgICAtLXNyY2hzdGVwOworICAgIH0gZWxzZSB7CisJZXJyb3IoIk5vIG1vdmVzIHBvc3NpYmxlPz8gSGVscCEiKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCS8qTk9UUkVBQ0hFRCAqLworICAgIH0KK30KKworI2RlZmluZSBTX01JU1MJMAorI2RlZmluZSBTX0hJVAkxCisjZGVmaW5lIFNfU1VOSwktMQorCitzdGF0aWMgaW50CitjcHVmaXJlKGludCB4LCBpbnQgeSkKKy8qIGZpcmUgYXdheSBhdCBnaXZlbiBsb2NhdGlvbiAqLworeworICAgIGJvb2wgaGl0LCBzdW5rOworICAgIHNoaXBfdCAqc3MgPSBOVUxMOworCisgICAgaGl0c1tDT01QVVRFUl1beF1beV0gPSAoaGl0ID0gKGJvYXJkW1BMQVlFUl1beF1beV0pKSA/IE1BUktfSElUIDogTUFSS19NSVNTOworICAgICh2b2lkKSBtdnByaW50dyhQUk9NUFRMSU5FLCAwLAorCQkgICAgIkkgc2hvb3QgYXQgJWMlZC4gSSAlcyEiLCB5ICsgJ0EnLCB4LCBoaXQgPyAiaGl0IiA6CisJCSAgICAibWlzcyIpOworICAgIGlmICgoc3VuayA9IChoaXQgJiYgKHNzID0gaGl0c2hpcCh4LCB5KSkpKSAhPSAwKQorCSh2b2lkKSBwcmludHcoIiBJJ3ZlIHN1bmsgeW91ciAlcyIsIHNzLT5uYW1lKTsKKyAgICAodm9pZCkgY2xydG9lb2woKTsKKworICAgIHBnb3RvKHksIHgpOworI2lmZGVmIEFfQ09MT1IKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaWYgKGhpdCkKKwkgICAgYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfUkVEKSk7CisJZWxzZQorCSAgICBhdHRyb24oQ09MT1JfUEFJUihDT0xPUl9HUkVFTikpOworICAgIH0KKyNlbmRpZiAvKiBBX0NPTE9SICovCisgICAgKHZvaWQpIGFkZGNoKChjaHR5cGUpIChoaXQgPyBTSE9XSElUIDogU0hPV1NQTEFTSCkpOworI2lmZGVmIEFfQ09MT1IKKyAgICBhdHRyc2V0KDApOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKworICAgIHJldHVybiBoaXQgPyAoc3VuayA/IFNfU1VOSyA6IFNfSElUKSA6IFNfTUlTUzsKK30KKworLyoKKyAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgZmFpcmx5IGlycmVndWxhciBGU00sIHNvIHBsZWFzZSBmb3JnaXZlIHRoZSByYW1wYW50CisgKiB1bnN0cnVjdHVyZWRuZXNzIGJlbG93LiBUaGUgZml2ZSBsYWJlbHMgYXJlIHN0YXRlcyB3aGljaCBuZWVkIHRvIGJlIGhlbGQKKyAqIGJldHdlZW4gY29tcHV0ZXIgdHVybnMuCisgKgorICogVGhlIEZTTSBpcyBub3QgZXh0ZXJuYWxseSByZXNldCB0byBSQU5ET01fRklSRSBpZiB0aGUgcGxheWVyIHdpbnMuIEluc3RlYWQsCisgKiB0aGUgb3RoZXIgc3RhdGVzIGNoZWNrIGZvciAiaW1wb3NzaWJsZSIgY29uZGl0aW9ucyB3aGljaCBzaWduaWZ5IGEgbmV3CisgKiBnYW1lLCB0aGVuIGlmIGZvdW5kIHRyYW5zaXRpb24gdG8gUkFORE9NX0ZJUkUuCisgKi8KK3N0YXRpYyBib29sCitjcHV0dXJuKHZvaWQpCit7CisjZGVmaW5lIFBPU1NJQkxFKHgsIHkpCShPTkJPQVJEKHgsIHkpICYmICFoaXRzW0NPTVBVVEVSXVt4XVt5XSkKKyNkZWZpbmUgUkFORE9NX0ZJUkUJMAorI2RlZmluZSBSQU5ET01fSElUCTEKKyNkZWZpbmUgSFVOVF9ESVJFQ1QJMgorI2RlZmluZSBGSVJTVF9QQVNTCTMKKyNkZWZpbmUgUkVWRVJTRV9KVU1QCTQKKyNkZWZpbmUgU0VDT05EX1BBU1MJNQorICAgIHN0YXRpYyBpbnQgbmV4dCA9IFJBTkRPTV9GSVJFOworICAgIHN0YXRpYyBib29sIHVzZWRbNF07CisgICAgc3RhdGljIHNoaXBfdCB0czsKKyAgICBpbnQgbmF2YWlsLCB4LCB5LCBkLCBuOworICAgIGludCBoaXQgPSBTX01JU1M7CisKKyAgICBzd2l0Y2ggKG5leHQpIHsKKyAgICBjYXNlIFJBTkRPTV9GSVJFOgkJLyogbGFzdCBzaG90IHdhcyByYW5kb20gYW5kIG1pc3NlZCAqLworICAgICAgcmVmaXJlOgorCXJhbmRvbWZpcmUoJngsICZ5KTsKKwlpZiAoIShoaXQgPSBjcHVmaXJlKHgsIHkpKSkKKwkgICAgbmV4dCA9IFJBTkRPTV9GSVJFOworCWVsc2UgeworCSAgICB0cy54ID0geDsKKwkgICAgdHMueSA9IHk7CisJICAgIHRzLmhpdHMgPSAxOworCSAgICBuZXh0ID0gKGhpdCA9PSBTX1NVTkspID8gUkFORE9NX0ZJUkUgOiBSQU5ET01fSElUOworCX0KKwlicmVhazsKKworICAgIGNhc2UgUkFORE9NX0hJVDoJCS8qIGxhc3Qgc2hvdCB3YXMgcmFuZG9tIGFuZCBoaXQgKi8KKwl1c2VkW0UgLyAyXSA9IHVzZWRbUyAvIDJdID0gdXNlZFtXIC8gMl0gPSB1c2VkW04gLyAyXSA9IEZBTFNFOworCS8qIEZBTExUSFJPVUdIICovCisKKyAgICBjYXNlIEhVTlRfRElSRUNUOgkJLyogbGFzdCBzaG90IGhpdCwgd2UncmUgbG9va2luZyBmb3Igc2hpcCdzIGxvbmcgYXhpcyAqLworCWZvciAoZCA9IG5hdmFpbCA9IDA7IGQgPCA0OyBkKyspIHsKKwkgICAgeCA9IHRzLnggKyB4aW5jcltkICogMl07CisJICAgIHkgPSB0cy55ICsgeWluY3JbZCAqIDJdOworCSAgICBpZiAoIXVzZWRbZF0gJiYgUE9TU0lCTEUoeCwgeSkpCisJCW5hdmFpbCsrOworCSAgICBlbHNlCisJCXVzZWRbZF0gPSBUUlVFOworCX0KKwlpZiAobmF2YWlsID09IDApCS8qIG5vIHZhbGlkIHBsYWNlcyBmb3Igc2hvdHMgYWRqYWNlbnQuLi4gKi8KKwkgICAgZ290byByZWZpcmU7CS8qIC4uLnNvIHdlIG11c3QgcmFuZG9tLWZpcmUgKi8KKwllbHNlIHsKKwkgICAgbiA9IHJuZChuYXZhaWwpICsgMTsKKwkgICAgZm9yIChkID0gMDsgdXNlZFtkXTsgZCsrKSA7CisJICAgIC8qIHVzZWRbZF0gaXMgZmlyc3QgdGhhdCA9PSAwICovCisJICAgIGZvciAoOyBuID4gMTsgbi0tKQorCQl3aGlsZSAodXNlZFsrK2RdKSA7CisJICAgIC8qIHVzZWRbZF0gaXMgbmV4dCB0aGF0ID09IDAgKi8KKworCSAgICBhc3NlcnQoZCA8IDQpOworCSAgICBhc3NlcnQodXNlZFtkXSA9PSBGQUxTRSk7CisKKwkgICAgdXNlZFtkXSA9IFRSVUU7CisJICAgIHggPSB0cy54ICsgeGluY3JbZCAqIDJdOworCSAgICB5ID0gdHMueSArIHlpbmNyW2QgKiAyXTsKKworCSAgICBhc3NlcnQoUE9TU0lCTEUoeCwgeSkpOworCisJICAgIGlmICghKGhpdCA9IGNwdWZpcmUoeCwgeSkpKQorCQluZXh0ID0gSFVOVF9ESVJFQ1Q7CisJICAgIGVsc2UgeworCQl0cy54ID0geDsKKwkJdHMueSA9IHk7CisJCXRzLmRpciA9IGQgKiAyOworCQl0cy5oaXRzKys7CisJCW5leHQgPSAoaGl0ID09IFNfU1VOSykgPyBSQU5ET01fRklSRSA6IEZJUlNUX1BBU1M7CisJICAgIH0KKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIEZJUlNUX1BBU1M6CQkvKiB3ZSBoYXZlIGEgc3RhcnQgYW5kIGEgZGlyZWN0aW9uIG5vdyAqLworCXggPSB0cy54ICsgeGluY3JbdHMuZGlyXTsKKwl5ID0gdHMueSArIHlpbmNyW3RzLmRpcl07CisJaWYgKFBPU1NJQkxFKHgsIHkpICYmIChoaXQgPSBjcHVmaXJlKHgsIHkpKSkgeworCSAgICB0cy54ID0geDsKKwkgICAgdHMueSA9IHk7CisJICAgIHRzLmhpdHMrKzsKKwkgICAgbmV4dCA9IChoaXQgPT0gU19TVU5LKSA/IFJBTkRPTV9GSVJFIDogRklSU1RfUEFTUzsKKwl9IGVsc2UKKwkgICAgbmV4dCA9IFJFVkVSU0VfSlVNUDsKKwlicmVhazsKKworICAgIGNhc2UgUkVWRVJTRV9KVU1QOgkJLyogbmFpbCBkb3duIHRoZSBzaGlwJ3Mgb3RoZXIgZW5kICovCisJZCA9ICh0cy5kaXIgKyA0KSAlIDg7CisJeCA9IHRzLnggKyB0cy5oaXRzICogeGluY3JbZF07CisJeSA9IHRzLnkgKyB0cy5oaXRzICogeWluY3JbZF07CisJaWYgKFBPU1NJQkxFKHgsIHkpICYmIChoaXQgPSBjcHVmaXJlKHgsIHkpKSkgeworCSAgICB0cy54ID0geDsKKwkgICAgdHMueSA9IHk7CisJICAgIHRzLmRpciA9IGQ7CisJICAgIHRzLmhpdHMrKzsKKwkgICAgbmV4dCA9IChoaXQgPT0gU19TVU5LKSA/IFJBTkRPTV9GSVJFIDogU0VDT05EX1BBU1M7CisJfSBlbHNlCisJICAgIG5leHQgPSBSQU5ET01fRklSRTsKKwlicmVhazsKKworICAgIGNhc2UgU0VDT05EX1BBU1M6CQkvKiBjb250aW51ZSBzaG9vdGluZyBhZnRlciByZXZlcnNpbmcgKi8KKwl4ID0gdHMueCArIHhpbmNyW3RzLmRpcl07CisJeSA9IHRzLnkgKyB5aW5jclt0cy5kaXJdOworCWlmIChQT1NTSUJMRSh4LCB5KSAmJiAoaGl0ID0gY3B1ZmlyZSh4LCB5KSkpIHsKKwkgICAgdHMueCA9IHg7CisJICAgIHRzLnkgPSB5OworCSAgICB0cy5oaXRzKys7CisJICAgIG5leHQgPSAoaGl0ID09IFNfU1VOSykgPyBSQU5ET01fRklSRSA6IFNFQ09ORF9QQVNTOworCSAgICBicmVhazsKKwl9IGVsc2UKKwkgICAgbmV4dCA9IFJBTkRPTV9GSVJFOworCWJyZWFrOworICAgIH0KKworICAgIC8qIHBhdXNlIGJldHdlZW4gc2hvdHMgaW4gc2Fsdm8gKi8KKyAgICBpZiAoc2Fsdm8pIHsKKwkodm9pZCkgcmVmcmVzaCgpOworCSh2b2lkKSBzbGVlcCgxKTsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkgbXZwcmludHcoUFJPTVBUTElORSArIDIsIDAsCisJCSAgICAiTmV3IHN0YXRlICVkLCB4PSVkLCB5PSVkLCBkPSVkIiwKKwkJICAgIG5leHQsIHgsIHksIGQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmV0dXJuICgoaGl0KSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyBpbnQKK3BsYXlhZ2Fpbih2b2lkKQoreworICAgIGludCBqOworICAgIHNoaXBfdCAqc3M7CisKKyAgICBmb3IgKHNzID0gY3B1c2hpcDsgc3MgPCBjcHVzaGlwICsgU0hJUFRZUEVTOyBzcysrKQorCWZvciAoaiA9IDA7IGogPCBzcy0+bGVuZ3RoOyBqKyspIHsKKwkgICAgY2dvdG8oc3MtPnkgKyBqICogeWluY3Jbc3MtPmRpcl0sIHNzLT54ICsgaiAqIHhpbmNyW3NzLT5kaXJdKTsKKwkgICAgKHZvaWQpIGFkZGNoKChjaHR5cGUpIHNzLT5zeW1ib2wpOworCX0KKworICAgIGlmIChhd2lubmEoKSkKKwkrK2NwdXdvbjsKKyAgICBlbHNlCisJKytwbHl3b247CisgICAgaiA9IDE4ICsgc3RybGVuKG5hbWUpOworICAgIGlmIChwbHl3b24gPj0gMTApCisJKytqOworICAgIGlmIChjcHV3b24gPj0gMTApCisJKytqOworICAgICh2b2lkKSBtdnByaW50dygxLCAoQ09MV0lEVEggLSBqKSAvIDIsCisJCSAgICAiJXM6ICVkICAgICBDb21wdXRlcjogJWQiLCBuYW1lLCBwbHl3b24sIGNwdXdvbik7CisKKyAgICBwcm9tcHQoMiwgKGF3aW5uYSgpKT8gIldhbnQgdG8gYmUgaHVtaWxpYXRlZCBhZ2FpbiwgJXMgW3luXT8gIgorCSAgIDogIkdvaW5nIHRvIGdpdmUgbWUgYSBjaGFuY2UgZm9yIHJldmVuZ2UsICVzIFt5bl0/ICIsIG5hbWUpOworICAgIHJldHVybiAoc2dldGMoIllOIikgPT0gJ1knKTsKK30KKworc3RhdGljIHZvaWQKK2RvX29wdGlvbnMoaW50IGMsIGNoYXIgKm9wW10pCit7CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyAgICBpZiAoYyA+IDEpIHsKKwlmb3IgKGkgPSAxOyBpIDwgYzsgaSsrKSB7CisJICAgIHN3aXRjaCAob3BbaV1bMF0pIHsKKwkgICAgZGVmYXVsdDoKKwkgICAgY2FzZSAnPyc6CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBiYXR0bGUgWy1zIHwgLWJdIFstY11cbiIpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJcdFdoZXJlIHRoZSBvcHRpb25zIGFyZTpcbiIpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJcdC1zIDogcGxheSBhIHNhbHZvIGdhbWVcbiIpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJcdC1iIDogcGxheSBhIGJsaXR6IGdhbWVcbiIpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJcdC1jIDogc2hpcHMgbWF5IGJlIGFkamFjZW50XG4iKTsKKwkJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJy0nOgorCQlzd2l0Y2ggKG9wW2ldWzFdKSB7CisJCWNhc2UgJ2InOgorCQkgICAgYmxpdHogPSAxOworCQkgICAgaWYgKHNhbHZvID09IDEpIHsKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAgICAgIkJhZCBBcmc6IC1iIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXG4iKTsKKwkJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJY2FzZSAncyc6CisJCSAgICBzYWx2byA9IDE7CisJCSAgICBpZiAoYmxpdHogPT0gMSkgeworCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICAgICAiQmFkIEFyZzogLXMgYW5kIC1iIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcbiIpOworCQkJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlICdjJzoKKwkJICAgIGNsb3NlcGFjayA9IDE7CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAiQmFkIGFyZzogdHlwZSBcIiVzID9cIiBmb3IgdXNhZ2UgbWVzc2FnZVxuIiwKKwkJCQkgICBvcFswXSk7CisJCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50CitzY291bnQoaW50IHdobykKK3sKKyAgICByZWdpc3RlciBpbnQgaSwgc2hvdHM7CisgICAgcmVnaXN0ZXIgc2hpcF90ICpzcDsKKworICAgIGlmICh3aG8pCisJc3AgPSBjcHVzaGlwOwkJLyogY291bnQgY3B1IHNob3RzICovCisgICAgZWxzZQorCXNwID0gcGx5c2hpcDsJCS8qIGNvdW50IHBsYXllciBzaG90cyAqLworCisgICAgZm9yIChpID0gMCwgc2hvdHMgPSAwOyBpIDwgU0hJUFRZUEVTOyBpKyssIHNwKyspIHsKKwlpZiAoc3AtPmhpdHMgPj0gc3AtPmxlbmd0aCkKKwkgICAgY29udGludWU7CQkvKiBkZWFkIHNoaXAgKi8KKwllbHNlCisJICAgIHNob3RzKys7CisgICAgfQorICAgIHJldHVybiAoc2hvdHMpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBkb19vcHRpb25zKGFyZ2MsIGFyZ3YpOworCisgICAgaW50cm8oKTsKKyAgICBkbyB7CisJaW5pdGdhbWUoKTsKKwl3aGlsZSAoYXdpbm5hKCkgPT0gLTEpIHsKKwkgICAgaWYgKCFibGl0eikgeworCQlpZiAoIXNhbHZvKSB7CisJCSAgICBpZiAodHVybikKKwkJCSh2b2lkKSBjcHV0dXJuKCk7CisJCSAgICBlbHNlCisJCQkodm9pZCkgcGx5dHVybigpOworCQl9IGVsc2UgeworCQkgICAgcmVnaXN0ZXIgaW50IGk7CisKKwkJICAgIGkgPSBzY291bnQodHVybik7CisJCSAgICB3aGlsZSAoaS0tKSB7CisJCQlpZiAodHVybikgeworCQkJICAgIGlmIChjcHV0dXJuKCkgJiYgYXdpbm5hKCkgIT0gLTEpCisJCQkJaSA9IDA7CisJCQl9IGVsc2UgeworCQkJICAgIGlmIChwbHl0dXJuKCkgJiYgYXdpbm5hKCkgIT0gLTEpCisJCQkJaSA9IDA7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlCisJCXdoaWxlICgodHVybiA/IGNwdXR1cm4oKSA6IHBseXR1cm4oKSkgJiYgYXdpbm5hKCkgPT0gLTEpCisJCSAgICBjb250aW51ZTsKKwkgICAgdHVybiA9IE9USEVSOworCX0KKyAgICB9IHdoaWxlCisJKHBsYXlhZ2FpbigpKTsKKyAgICB1bmluaXRnYW1lKDApOworICAgIC8qTk9UUkVBQ0hFRCAqLworfQorCisvKiBicy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvdGVzdC9idWxnYXJpYW4tdXRmOC50eHQgYi90ZXN0L2J1bGdhcmlhbi11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDZjMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9idWxnYXJpYW4tdXRmOC50eHQKQEAgLTAsMCArMSw2IEBACivQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9C+0LzQvtGJ0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyAtLSAxCivQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQtNGP0LvQvtCy0LUgICAgICAgICAgICAgLS0gMgor0JjQt9Cx0L7RgCDQvdCwINC00Y/QuyDQuCDRhNC+0YDQvNCw0YLQuNGA0LDQvdC1ICAgICAgLS0gMwor0JfQsNC/0LjRgdCy0LDQvdC1INCyINC40LfQsdGA0LDQvdC40Y8g0LTRj9C7ICAgICAgICAtLSA0CivQmNC90YHRgtCw0LvQuNGA0LDQvdC1INC90LAgTElMTyAgICAgICAgICAgICAtLSA1CivQmNC30YXQvtC0INC+0YIg0L/RgNC+0LPRgNCw0LzQsNGC0LAgICAgICAgICAgICAgLS0gNgpkaWZmIC0tZ2l0IGEvdGVzdC9jYXJkZmlsZS5jIGIvdGVzdC9jYXJkZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWU0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NhcmRmaWxlLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyAqCisgKiAkSWQ6IGNhcmRmaWxlLmMsdiAxLjM1IDIwMDgvMDgvMDUgMDA6NDI6MjQgdG9tIEV4cCAkCisgKgorICogRmlsZSBmb3JtYXQ6IHRleHQgYmVnaW5uaW5nIGluIGNvbHVtbiAxIGlzIGEgdGl0bGU7IG90aGVyIHRleHQgaXMgY29udGVudC4KKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfTElCRk9STSAmJiBVU0VfTElCUEFORUwKKworI2luY2x1ZGUgPGZvcm0uaD4KKyNpbmNsdWRlIDxwYW5lbC5oPgorCisjZGVmaW5lIFZJU0lCTEVfQ0FSRFMgMTAKKyNkZWZpbmUgT0ZGU0VUX0NBUkQgMgorI2RlZmluZSBwYWlyXzEgMQorI2RlZmluZSBwYWlyXzIgMgorCisjZGVmaW5lIGlzVmlzaWJsZShjYXJkcCkgKChjYXJkcCktPnBhbmVsICE9IDApCisKK2VudW0geworICAgIE1ZX0NUUkxfeCA9IE1BWF9GT1JNX0NPTU1BTkQKKyAgICAsTVlfQ1RSTF9OCisgICAgLE1ZX0NUUkxfUAorICAgICxNWV9DVFJMX1EKKyAgICAsTVlfQ1RSTF9XCit9OworCit0eXBlZGVmIHN0cnVjdCBfY2FyZCB7CisgICAgc3RydWN0IF9jYXJkICpsaW5rOworICAgIFBBTkVMICpwYW5lbDsKKyAgICBGT1JNICpmb3JtOworICAgIGNoYXIgKnRpdGxlOworICAgIGNoYXIgKmNvbnRlbnQ7Cit9IENBUkQ7CisKK3N0YXRpYyBDQVJEICphbGxfY2FyZHM7CitzdGF0aWMgYm9vbCB0cnlfY29sb3IgPSBGQUxTRTsKK3N0YXRpYyBjaGFyIGRlZmF1bHRfbmFtZVtdID0gImNhcmRmaWxlLmRhdCI7CisKKyNpZiAhSEFWRV9TVFJEVVAKKyNkZWZpbmUgc3RyZHVwIG15X3N0cmR1cAorc3RhdGljIGNoYXIgKgorc3RyZHVwKGNvbnN0IGNoYXIgKnMpCit7CisgICAgY2hhciAqcCA9IHR5cGVNYWxsb2MoY2hhciwgc3RybGVuKHMpICsgMSk7CisgICAgaWYgKHApCisJc3RyY3B5KHAsIHMpOworICAgIHJldHVybiAocCk7Cit9CisjZW5kaWYgLyogbm90IEhBVkVfU1RSRFVQICovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NraXAoY29uc3QgY2hhciAqYnVmZmVyKQoreworICAgIHdoaWxlIChpc3NwYWNlKFVDaGFyKCpidWZmZXIpKSkKKwlidWZmZXIrKzsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZAordHJpbShjaGFyICpidWZmZXIpCit7CisgICAgdW5zaWduZWQgbiA9IHN0cmxlbihidWZmZXIpOworICAgIHdoaWxlIChuLS0gJiYgaXNzcGFjZShVQ2hhcihidWZmZXJbbl0pKSkKKwlidWZmZXJbbl0gPSAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIENBUkQgKgorYWRkX3RpdGxlKGNvbnN0IGNoYXIgKnRpdGxlKQoreworICAgIENBUkQgKmNhcmQsICpwLCAqcTsKKworICAgIGZvciAocCA9IGFsbF9jYXJkcywgcSA9IDA7IHAgIT0gMDsgcSA9IHAsIHAgPSBwLT5saW5rKSB7CisJaW50IGNtcCA9IHN0cmNtcChwLT50aXRsZSwgdGl0bGUpOworCWlmIChjbXAgPT0gMCkKKwkgICAgcmV0dXJuIHA7CisJaWYgKGNtcCA+IDApCisJICAgIGJyZWFrOworICAgIH0KKworICAgIGNhcmQgPSB0eXBlQ2FsbG9jKENBUkQsIDEpOworICAgIGNhcmQtPnRpdGxlID0gc3RyZHVwKHRpdGxlKTsKKyAgICBjYXJkLT5jb250ZW50ID0gc3RyZHVwKCIiKTsKKworICAgIGlmIChxID09IDApIHsKKwljYXJkLT5saW5rID0gYWxsX2NhcmRzOworCWFsbF9jYXJkcyA9IGNhcmQ7CisgICAgfSBlbHNlIHsKKwljYXJkLT5saW5rID0gcS0+bGluazsKKwlxLT5saW5rID0gY2FyZDsKKyAgICB9CisKKyAgICByZXR1cm4gY2FyZDsKK30KKworc3RhdGljIHZvaWQKK2FkZF9jb250ZW50KENBUkQgKiBjYXJkLCBjb25zdCBjaGFyICpjb250ZW50KQoreworICAgIHVuc2lnbmVkIHRvdGFsLCBvZmZzZXQ7CisKKyAgICBjb250ZW50ID0gc2tpcChjb250ZW50KTsKKyAgICBpZiAoKHRvdGFsID0gc3RybGVuKGNvbnRlbnQpKSAhPSAwKSB7CisJaWYgKGNhcmQtPmNvbnRlbnQgIT0gMCAmJiAob2Zmc2V0ID0gc3RybGVuKGNhcmQtPmNvbnRlbnQpKSAhPSAwKSB7CisJICAgIHRvdGFsICs9IDEgKyBvZmZzZXQ7CisJICAgIGNhcmQtPmNvbnRlbnQgPSB0eXBlUmVhbGxvYyhjaGFyLCB0b3RhbCArIDEsIGNhcmQtPmNvbnRlbnQpOworCSAgICBpZiAoY2FyZC0+Y29udGVudCkKKwkJc3RyY3B5KGNhcmQtPmNvbnRlbnQgKyBvZmZzZXQrKywgIiAiKTsKKwl9IGVsc2UgeworCSAgICBvZmZzZXQgPSAwOworCSAgICBpZiAoY2FyZC0+Y29udGVudCAhPSAwKQorCQlmcmVlKGNhcmQtPmNvbnRlbnQpOworCSAgICBjYXJkLT5jb250ZW50ID0gdHlwZU1hbGxvYyhjaGFyLCB0b3RhbCArIDEpOworCX0KKwlpZiAoY2FyZC0+Y29udGVudCkKKwkgICAgc3RyY3B5KGNhcmQtPmNvbnRlbnQgKyBvZmZzZXQsIGNvbnRlbnQpOworICAgIH0KK30KKworc3RhdGljIENBUkQgKgorbmV3X2NhcmQodm9pZCkKK3sKKyAgICBDQVJEICpjYXJkID0gYWRkX3RpdGxlKCIiKTsKKyAgICBhZGRfY29udGVudChjYXJkLCAiIik7CisgICAgcmV0dXJuIGNhcmQ7Cit9CisKK3N0YXRpYyBDQVJEICoKK2ZpbmRfY2FyZChjaGFyICp0aXRsZSkKK3sKKyAgICBDQVJEICpjYXJkOworCisgICAgZm9yIChjYXJkID0gYWxsX2NhcmRzOyBjYXJkICE9IDA7IGNhcmQgPSBjYXJkLT5saW5rKQorCWlmICghc3RyY21wKGNhcmQtPnRpdGxlLCB0aXRsZSkpCisJICAgIGJyZWFrOworCisgICAgcmV0dXJuIGNhcmQ7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkX2RhdGEoY2hhciAqZm5hbWUpCit7CisgICAgRklMRSAqZnA7CisgICAgQ0FSRCAqY2FyZCA9IDA7CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKworICAgIGlmICgoZnAgPSBmb3BlbihmbmFtZSwgInIiKSkgIT0gMCkgeworCXdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmcCkpIHsKKwkgICAgdHJpbShidWZmZXIpOworCSAgICBpZiAoaXNzcGFjZShVQ2hhcigqYnVmZmVyKSkpIHsKKwkJaWYgKGNhcmQgPT0gMCkKKwkJICAgIGNhcmQgPSBhZGRfdGl0bGUoIiIpOworCQlhZGRfY29udGVudChjYXJkLCBidWZmZXIpOworCSAgICB9IGVsc2UgaWYgKChjYXJkID0gZmluZF9jYXJkKGJ1ZmZlcikpID09IDApIHsKKwkJY2FyZCA9IGFkZF90aXRsZShidWZmZXIpOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK3dyaXRlX2RhdGEoY29uc3QgY2hhciAqZm5hbWUpCit7CisgICAgRklMRSAqZnA7CisgICAgQ0FSRCAqcCA9IDA7CisgICAgaW50IG47CisKKyAgICBpZiAoIXN0cmNtcChmbmFtZSwgZGVmYXVsdF9uYW1lKSkKKwlmbmFtZSA9ICJjYXJkZmlsZS5vdXQiOworCisgICAgaWYgKChmcCA9IGZvcGVuKGZuYW1lLCAidyIpKSAhPSAwKSB7CisJZm9yIChwID0gYWxsX2NhcmRzOyBwICE9IDA7IHAgPSBwLT5saW5rKSB7CisJICAgIEZJRUxEICoqZiA9IGZvcm1fZmllbGRzKHAtPmZvcm0pOworCSAgICBmb3IgKG4gPSAwOyBmW25dICE9IDA7IG4rKykgeworCQljaGFyICpzID0gZmllbGRfYnVmZmVyKGZbbl0sIDApOworCQlpZiAocyAhPSAwCisJCSAgICAmJiAocyA9IHN0cmR1cChzKSkgIT0gMCkgeworCQkgICAgdHJpbShzKTsKKwkJICAgIGZwcmludGYoZnAsICIlcyVzXG4iLCBuID8gIlx0IiA6ICIiLCBzKTsKKwkJICAgIGZyZWUocyk7CisJCX0KKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3VudCB0aGUgY2FyZHMKKyAqLworc3RhdGljIGludAorY291bnRfY2FyZHModm9pZCkKK3sKKyAgICBDQVJEICpwOworICAgIGludCBjb3VudCA9IDA7CisKKyAgICBmb3IgKHAgPSBhbGxfY2FyZHM7IHAgIT0gMDsgcCA9IHAtPmxpbmspCisJY291bnQrKzsKKworICAgIHJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFNodWZmbGUgdGhlIHBhbmVscyB0byBrZWVwIHRoZW0gaW4gYSBuYXR1cmFsIGhpZXJhcmNoeS4KKyAqLworc3RhdGljIHZvaWQKK29yZGVyX2NhcmRzKENBUkQgKiBmaXJzdCwgaW50IGRlcHRoKQoreworICAgIGlmIChmaXJzdCkgeworCWlmIChkZXB0aCAmJiBmaXJzdC0+bGluaykKKwkgICAgb3JkZXJfY2FyZHMoZmlyc3QtPmxpbmssIGRlcHRoIC0gMSk7CisJaWYgKGlzVmlzaWJsZShmaXJzdCkpCisJICAgIHRvcF9wYW5lbChmaXJzdC0+cGFuZWwpOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiB0aGUgbmV4dCBjYXJkIGluIHRoZSBsaXN0CisgKi8KK3N0YXRpYyBDQVJEICoKK25leHRfY2FyZChDQVJEICogbm93KQoreworICAgIGlmIChub3ctPmxpbmsgIT0gMCkgeworCUNBUkQgKnRzdCA9IG5vdy0+bGluazsKKwlpZiAoaXNWaXNpYmxlKHRzdCkpCisJICAgIG5vdyA9IHRzdDsKKwllbHNlCisJICAgIHRzdCA9IG5leHRfY2FyZCh0c3QpOworICAgIH0KKyAgICByZXR1cm4gbm93OworfQorCisvKgorICogUmV0dXJuIHRoZSBwcmV2aW91cyBjYXJkIGluIHRoZSBsaXN0CisgKi8KK3N0YXRpYyBDQVJEICoKK3ByZXZfY2FyZChDQVJEICogbm93KQoreworICAgIENBUkQgKnA7CisgICAgZm9yIChwID0gYWxsX2NhcmRzOyBwICE9IDA7IHAgPSBwLT5saW5rKSB7CisJaWYgKHAtPmxpbmsgPT0gbm93KSB7CisJICAgIGlmICghaXNWaXNpYmxlKHApKQorCQlwID0gcHJldl9jYXJkKHApOworCSAgICByZXR1cm4gcDsKKwl9CisgICAgfQorICAgIHJldHVybiBub3c7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBmaXJzdCBjYXJkIGluIHRoZSBsaXN0IHRoYXQgd2Ugd2lsbCBkaXNwbGF5LgorICovCitzdGF0aWMgQ0FSRCAqCitmaXJzdF9jYXJkKENBUkQgKiBub3cpCit7CisgICAgaWYgKCFpc1Zpc2libGUobm93KSkKKwlub3cgPSBuZXh0X2NhcmQobm93KTsKKyAgICByZXR1cm4gbm93OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorZm9ybV92aXJ0dWFsaXplKFdJTkRPVyAqdykKK3sKKyAgICBpbnQgYyA9IHdnZXRjaCh3KTsKKworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgQ1RSTCgnVycpOgorCXJldHVybiAoTVlfQ1RSTF9XKTsKKyAgICBjYXNlIENUUkwoJ04nKToKKwlyZXR1cm4gKE1ZX0NUUkxfTik7CisgICAgY2FzZSBDVFJMKCdQJyk6CisJcmV0dXJuIChNWV9DVFJMX1ApOworICAgIGNhc2UgUVVJVDoKKyAgICBjYXNlIEVTQ0FQRToKKwlyZXR1cm4gKE1ZX0NUUkxfUSk7CisKKyAgICBjYXNlIEtFWV9CQUNLU1BBQ0U6CisJcmV0dXJuIChSRVFfREVMX1BSRVYpOworICAgIGNhc2UgS0VZX0RDOgorCXJldHVybiAoUkVRX0RFTF9DSEFSKTsKKyAgICBjYXNlIEtFWV9MRUZUOgorCXJldHVybiAoUkVRX0xFRlRfQ0hBUik7CisgICAgY2FzZSBLRVlfUklHSFQ6CisJcmV0dXJuIChSRVFfUklHSFRfQ0hBUik7CisKKyAgICBjYXNlIEtFWV9ET1dOOgorICAgIGNhc2UgS0VZX05FWFQ6CisJcmV0dXJuIChSRVFfTkVYVF9GSUVMRCk7CisgICAgY2FzZSBLRVlfVVA6CisgICAgY2FzZSBLRVlfUFJFVklPVVM6CisJcmV0dXJuIChSRVFfUFJFVl9GSUVMRCk7CisKKyAgICBkZWZhdWx0OgorCXJldHVybiAoYyk7CisgICAgfQorfQorCitzdGF0aWMgRklFTEQgKioKK21ha2VfZmllbGRzKENBUkQgKiBwLCBpbnQgZm9ybV9oaWdoLCBpbnQgZm9ybV93aWRlKQoreworICAgIEZJRUxEICoqZiA9IHR5cGVDYWxsb2MoRklFTEQgKiwgMyk7CisKKyAgICBmWzBdID0gbmV3X2ZpZWxkKDEsIGZvcm1fd2lkZSwgMCwgMCwgMCwgMCk7CisgICAgc2V0X2ZpZWxkX2JhY2soZlswXSwgQV9SRVZFUlNFKTsKKyAgICBzZXRfZmllbGRfYnVmZmVyKGZbMF0sIDAsIHAtPnRpdGxlKTsKKyAgICBmaWVsZF9vcHRzX29mZihmWzBdLCBPX0JMQU5LKTsKKworICAgIGZbMV0gPSBuZXdfZmllbGQoZm9ybV9oaWdoIC0gMSwgZm9ybV93aWRlLCAxLCAwLCAwLCAwKTsKKyAgICBzZXRfZmllbGRfYnVmZmVyKGZbMV0sIDAsIHAtPmNvbnRlbnQpOworICAgIHNldF9maWVsZF9qdXN0KGZbMV0sIEpVU1RJRllfTEVGVCk7CisgICAgZmllbGRfb3B0c19vZmYoZlsxXSwgT19CTEFOSyk7CisKKyAgICBmWzJdID0gMDsKKyAgICByZXR1cm4gZjsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfbGVnZW5kKHZvaWQpCit7CisgICAgZXJhc2UoKTsKKyAgICBtb3ZlKExJTkVTIC0gMywgMCk7CisgICAgYWRkc3RyKCJeUS9FU0MgLS0gZXhpdCBmb3JtICAgICAgICAgICAgXlcgICAtLSB3cml0ZXMgZGF0YSB0byBmaWxlXG4iKTsKKyAgICBhZGRzdHIoIl5OICAgLS0gZ28gdG8gbmV4dCBjYXJkICAgICAgICBeUCAgIC0tIGdvIHRvIHByZXZpb3VzIGNhcmRcbiIpOworICAgIGFkZHN0cigiQXJyb3cga2V5cyBtb3ZlIGxlZnQvcmlnaHQgd2l0aGluIGEgZmllbGQsIHVwL2Rvd24gYmV0d2VlbiBmaWVsZHMiKTsKK30KKworI2lmIChkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRSkgfHwgTk9fTEVBS1MKK3N0YXRpYyB2b2lkCitmcmVlX2Zvcm1fZmllbGRzKEZJRUxEICoqIGYpCit7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBmW25dICE9IDA7ICsrbikgeworCWZyZWVfZmllbGQoZltuXSk7CisgICAgfQorICAgIGZyZWUoZik7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitjYXJkZmlsZShjaGFyICpmbmFtZSkKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBDQVJEICpwOworICAgIENBUkQgKnRvcF9jYXJkOworICAgIGludCB2aXNpYmxlX2NhcmRzOworICAgIGludCBwYW5lbF93aWRlOworICAgIGludCBwYW5lbF9oaWdoOworICAgIGludCBmb3JtX3dpZGU7CisgICAgaW50IGZvcm1faGlnaDsKKyAgICBpbnQgeTsKKyAgICBpbnQgeDsKKyAgICBpbnQgY2ggPSBFUlI7CisgICAgaW50IGZpbmlzaGVkID0gRkFMU0U7CisKKyAgICBzaG93X2xlZ2VuZCgpOworCisgICAgLyogZGVjaWRlIGhvdyBtYW55IGNhcmRzIHdlIGNhbiBkaXNwbGF5ICovCisgICAgdmlzaWJsZV9jYXJkcyA9IGNvdW50X2NhcmRzKCk7CisgICAgd2hpbGUgKAorCSAgICAgIChwYW5lbF93aWRlID0gQ09MUyAtICh2aXNpYmxlX2NhcmRzICogT0ZGU0VUX0NBUkQpKSA8IDEwIHx8CisJICAgICAgKHBhbmVsX2hpZ2ggPSBMSU5FUyAtICh2aXNpYmxlX2NhcmRzICogT0ZGU0VUX0NBUkQpIC0gNSkgPCA1KSB7CisJLS12aXNpYmxlX2NhcmRzOworICAgIH0KKyAgICBmb3JtX3dpZGUgPSBwYW5lbF93aWRlIC0gMjsKKyAgICBmb3JtX2hpZ2ggPSBwYW5lbF9oaWdoIC0gMjsKKyAgICB5ID0gKHZpc2libGVfY2FyZHMgLSAxKSAqIE9GRlNFVF9DQVJEOworICAgIHggPSAwOworCisgICAgLyogbWFrZSBhIHBhbmVsIGZvciBlYWNoIENBUkQgKi8KKyAgICBmb3IgKHAgPSBhbGxfY2FyZHM7IHAgIT0gMDsgcCA9IHAtPmxpbmspIHsKKworCWlmICgod2luID0gbmV3d2luKHBhbmVsX2hpZ2gsIHBhbmVsX3dpZGUsIHksIHgpKSA9PSAwKQorCSAgICBicmVhazsKKworCXdia2dkKHdpbiwgQ09MT1JfUEFJUihwYWlyXzIpKTsKKwlrZXlwYWQod2luLCBUUlVFKTsKKwlwLT5wYW5lbCA9IG5ld19wYW5lbCh3aW4pOworCWJveCh3aW4sIDAsIDApOworCisJcC0+Zm9ybSA9IG5ld19mb3JtKG1ha2VfZmllbGRzKHAsIGZvcm1faGlnaCwgZm9ybV93aWRlKSk7CisJc2V0X2Zvcm1fd2luKHAtPmZvcm0sIHdpbik7CisJc2V0X2Zvcm1fc3ViKHAtPmZvcm0sIGRlcndpbih3aW4sIGZvcm1faGlnaCwgZm9ybV93aWRlLCAxLCAxKSk7CisJcG9zdF9mb3JtKHAtPmZvcm0pOworCisJeSAtPSBPRkZTRVRfQ0FSRDsKKwl4ICs9IE9GRlNFVF9DQVJEOworICAgIH0KKworICAgIHRvcF9jYXJkID0gZmlyc3RfY2FyZChhbGxfY2FyZHMpOworICAgIG9yZGVyX2NhcmRzKHRvcF9jYXJkLCB2aXNpYmxlX2NhcmRzKTsKKworICAgIHdoaWxlICghZmluaXNoZWQpIHsKKwl1cGRhdGVfcGFuZWxzKCk7CisJZG91cGRhdGUoKTsKKworCWNoID0gZm9ybV92aXJ0dWFsaXplKHBhbmVsX3dpbmRvdyh0b3BfY2FyZC0+cGFuZWwpKTsKKwlzd2l0Y2ggKGZvcm1fZHJpdmVyKHRvcF9jYXJkLT5mb3JtLCBjaCkpIHsKKwljYXNlIEVfT0s6CisJICAgIGJyZWFrOworCWNhc2UgRV9VTktOT1dOX0NPTU1BTkQ6CisJICAgIHN3aXRjaCAoY2gpIHsKKwkgICAgY2FzZSBNWV9DVFJMX1E6CisJCWZpbmlzaGVkID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTVlfQ1RSTF9QOgorCQl0b3BfY2FyZCA9IHByZXZfY2FyZCh0b3BfY2FyZCk7CisJCW9yZGVyX2NhcmRzKHRvcF9jYXJkLCB2aXNpYmxlX2NhcmRzKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTVlfQ1RSTF9OOgorCQl0b3BfY2FyZCA9IG5leHRfY2FyZCh0b3BfY2FyZCk7CisJCW9yZGVyX2NhcmRzKHRvcF9jYXJkLCB2aXNpYmxlX2NhcmRzKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTVlfQ1RSTF9XOgorCQlmb3JtX2RyaXZlcih0b3BfY2FyZC0+Zm9ybSwgUkVRX1ZBTElEQVRJT04pOworCQl3cml0ZV9kYXRhKGZuYW1lKTsKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChLRVlfUkVTSVpFKSAmJiBIQVZFX1dSRVNJWkUKKwkgICAgY2FzZSBLRVlfUkVTSVpFOgorCQkvKiByZXNpemV0ZXJtIGFscmVhZHkgZGlkICJzb21ldGhpbmciIHJlYXNvbmFibGUsIGJ1dCBpdCBjYW5ub3QKKwkJICoga25vdyBtdWNoIGFib3V0IGxheW91dC4gIFNvIGxldCdzIG1ha2UgaXQgbmljZXIuCisJCSAqLworCQlwYW5lbF93aWRlID0gQ09MUyAtICh2aXNpYmxlX2NhcmRzICogT0ZGU0VUX0NBUkQpOworCQlwYW5lbF9oaWdoID0gTElORVMgLSAodmlzaWJsZV9jYXJkcyAqIE9GRlNFVF9DQVJEKSAtIDU7CisKKwkJZm9ybV93aWRlID0gcGFuZWxfd2lkZSAtIDI7CisJCWZvcm1faGlnaCA9IHBhbmVsX2hpZ2ggLSAyOworCisJCXkgPSAodmlzaWJsZV9jYXJkcyAtIDEpICogT0ZGU0VUX0NBUkQ7CisJCXggPSAwOworCisJCXNob3dfbGVnZW5kKCk7CisJCWZvciAocCA9IGFsbF9jYXJkczsgcCAhPSAwOyBwID0gcC0+bGluaykgeworCQkgICAgRklFTEQgKipvbGRmID0gZm9ybV9maWVsZHMocC0+Zm9ybSk7CisJCSAgICBXSU5ET1cgKm9sZHMgPSBmb3JtX3N1YihwLT5mb3JtKTsKKworCQkgICAgaWYgKCFpc1Zpc2libGUocCkpCisJCQljb250aW51ZTsKKwkJICAgIHdpbiA9IGZvcm1fd2luKHAtPmZvcm0pOworCisJCSAgICAvKiBtb3ZlIGFuZCByZXNpemUgdGhlIGNhcmQgYXMgbmVlZGVkCisJCSAgICAgKiBGSVhNRTogaWYgdGhlIHdpbmRvd3MgYXJlIHNocnVuayB0b28gbXVjaCwgdGhpcyB3b24ndCBkbworCQkgICAgICovCisJCSAgICBtdndpbih3aW4sIHksIHgpOworCQkgICAgd3Jlc2l6ZSh3aW4sIHBhbmVsX2hpZ2gsIHBhbmVsX3dpZGUpOworCisJCSAgICAvKiByZWNvbnN0cnVjdCBlYWNoIGZvcm0uICBGb3JtcyBhcmUgbm90IHJlc2l6YWJsZSwgYW5kCisJCSAgICAgKiB0aGVyZSBhcHBlYXJzIHRvIGJlIG5vIGdvb2Qgd2F5IHRvIHJlbG9hZCB0aGUgdGV4dCBpbgorCQkgICAgICogYSByZXNpemVkIHdpbmRvdy4KKwkJICAgICAqLworCQkgICAgd2VyYXNlKHdpbik7CisKKwkJICAgIHVucG9zdF9mb3JtKHAtPmZvcm0pOworCQkgICAgZnJlZV9mb3JtKHAtPmZvcm0pOworCisJCSAgICBwLT5mb3JtID0gbmV3X2Zvcm0obWFrZV9maWVsZHMocCwgZm9ybV9oaWdoLCBmb3JtX3dpZGUpKTsKKwkJICAgIHNldF9mb3JtX3dpbihwLT5mb3JtLCB3aW4pOworCQkgICAgc2V0X2Zvcm1fc3ViKHAtPmZvcm0sIGRlcndpbih3aW4sIGZvcm1faGlnaCwgZm9ybV93aWRlLAorCQkJCQkJIDEsIDEpKTsKKwkJICAgIHBvc3RfZm9ybShwLT5mb3JtKTsKKworCQkgICAgZnJlZV9mb3JtX2ZpZWxkcyhvbGRmKTsKKwkJICAgIGRlbHdpbihvbGRzKTsKKworCQkgICAgYm94KHdpbiwgMCwgMCk7CisKKwkJICAgIHkgLT0gT0ZGU0VUX0NBUkQ7CisJCSAgICB4ICs9IE9GRlNFVF9DQVJEOworCQl9CisJCWJyZWFrOworI2VuZGlmCisJICAgIGRlZmF1bHQ6CisJCWJlZXAoKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgZmxhc2goKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyNpZiBOT19MRUFLUworICAgIHdoaWxlIChhbGxfY2FyZHMgIT0gMCkgeworCUZJRUxEICoqZjsKKwlpbnQgY291bnQ7CisKKwlwID0gYWxsX2NhcmRzOworCWFsbF9jYXJkcyA9IGFsbF9jYXJkcy0+bGluazsKKworCWlmIChpc1Zpc2libGUocCkpIHsKKwkgICAgZiA9IGZvcm1fZmllbGRzKHAtPmZvcm0pOworCSAgICBjb3VudCA9IGZpZWxkX2NvdW50KHAtPmZvcm0pOworCisJICAgIHVucG9zdF9mb3JtKHAtPmZvcm0pOwkvKiAuLi5zbyB3ZSBjYW4gZnJlZSBpdCAqLworCSAgICBmcmVlX2Zvcm0ocC0+Zm9ybSk7CS8qIHRoaXMgYWxzbyBkaXNjb25uZWN0cyB0aGUgZmllbGRzICovCisKKwkgICAgZnJlZV9mb3JtX2ZpZWxkcyhmKTsKKworCSAgICBkZWxfcGFuZWwocC0+cGFuZWwpOworCX0KKwlmcmVlKHAtPnRpdGxlKTsKKwlmcmVlKHAtPmNvbnRlbnQpOworCWZyZWUocCk7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICptc2dbXSA9CisgICAgeworCSJVc2FnZTogdmlldyBbb3B0aW9uc10gZmlsZSIKKwksIiIKKwksIk9wdGlvbnM6IgorCSwiIC1jICAgICAgIHVzZSBjb2xvciBpZiB0ZXJtaW5hbCBzdXBwb3J0cyBpdCIKKyAgICB9OworICAgIHNpemVfdCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YobXNnKTsgbisrKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ1tuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBuOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChuID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJjIikpICE9IC0xKSB7CisJc3dpdGNoIChuKSB7CisJY2FzZSAnYyc6CisJICAgIHRyeV9jb2xvciA9IFRSVUU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJfQorICAgIH0KKworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKworICAgIGlmICh0cnlfY29sb3IpIHsKKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJICAgIHN0YXJ0X2NvbG9yKCk7CisJICAgIGluaXRfcGFpcihwYWlyXzEsIENPTE9SX1dISVRFLCBDT0xPUl9CTFVFKTsKKwkgICAgaW5pdF9wYWlyKHBhaXJfMiwgQ09MT1JfV0hJVEUsIENPTE9SX0NZQU4pOworCSAgICBia2dkKENPTE9SX1BBSVIocGFpcl8xKSk7CisJfSBlbHNlIHsKKwkgICAgdHJ5X2NvbG9yID0gRkFMU0U7CisJfQorICAgIH0KKworICAgIGlmIChvcHRpbmQgKyAxID09IGFyZ2MpIHsKKwlmb3IgKG4gPSAxOyBuIDwgYXJnYzsgbisrKQorCSAgICByZWFkX2RhdGEoYXJndltuXSk7CisJaWYgKGNvdW50X2NhcmRzKCkgPT0gMCkKKwkgICAgbmV3X2NhcmQoKTsKKwljYXJkZmlsZShhcmd2WzFdKTsKKyAgICB9IGVsc2UgeworCXJlYWRfZGF0YShkZWZhdWx0X25hbWUpOworCWlmIChjb3VudF9jYXJkcygpID09IDApCisJICAgIG5ld19jYXJkKCk7CisJY2FyZGZpbGUoZGVmYXVsdF9uYW1lKTsKKyAgICB9CisKKyAgICBlbmR3aW4oKTsKKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGN1cnNlcyBmb3JtIGFuZCBwYW5lbCBsaWJyYXJpZXNcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvY2FyZGZpbGUuZGF0IGIvdGVzdC9jYXJkZmlsZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViNGI3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY2FyZGZpbGUuZGF0CkBAIC0wLDAgKzEsMTMgQEAKK3RpdGxlIDEKKwlTb21lIHRleHQgZm9yIHRpdGxlMQorCWFuZCBzb21lIG1vcmUgdGV4dAordGl0bGUgMgorCVRoZSBxdWlja2VyIGJyb3duIGZveCByYW4gYWxsIG92ZXIgdGhlIGxhenkgZG9nLgorcHV0IGEgY2FyZCBiZWZvcmUgdGhlIGZpcnN0IHR3bworCVRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjYXJkZmlsZS4KK3Nob3cgYSBmb3VydGggY2FyZAorCVRoZSBmb3VydGggY2FyZAorCWhhcyBhIGxhcmdlIGFtb3VudCBvZiBkYXRhLAorCW1vcmUgdGhhbiB0aGUgb3RoZXIgY2FyZHMuCisJQXQgbGVhc3QsIHRoYXQgaXMgd2hhdCBJIHRob3VnaHQgaXQgc2hvdWxkIGRvLCBzaW5jZSBJIHdhbnQgdG8gc2VlIGhvdyB3ZWxsCisJdGhlIGZvcm1zIHBhY2thZ2UgaGFuZGxlcyBqdXN0aWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvdGVzdC9jaGdhdC5jIGIvdGVzdC9jaGdhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTEyOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NoZ2F0LmMKQEAgLTAsMCArMSwzNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBjaGdhdC5jLHYgMS44IDIwMDgvMDIvMDkgMjM6MTk6MTMgdG9tIEV4cCAkCisgKgorICogdGVzdC1kcml2ZXIgZm9yIGNoZ2F0L3djaGdhdC9tdmNoZ2F0L212d2NoZ2F0CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9DSEdBVAorCisjZGVmaW5lIFNIT1cobikgKChuKSA9PSBFUlIgPyAiRVJSIiA6ICJPSyIpCisjZGVmaW5lIENPTE9SX0RFRkFVTFQgKC0xKQorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpICYmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCA8IDIwMDYwNzE1CisjZGVmaW5lIHRvdWNoX2lmX25lZWRlZCh3aW4sIHJvdykgdG91Y2hsaW5lKHdpbiwgcm93LCAxKQorI2Vsc2UKKyNkZWZpbmUgdG91Y2hfaWZfbmVlZGVkKHdpbiwgcm93KQkvKiBub3RoaW5nICovCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGM7CisgICAgdW5zaWduZWQgdjsKKyAgICBpbnQgcGFpcjsKKyAgICB1bnNpZ25lZCBhdHRyOworICAgIGludCBjb3VudDsKKyAgICBpbnQgY2g7CisgICAgY29uc3QgY2hhciAqY19tc2c7CisgICAgY29uc3QgY2hhciAqdl9tc2c7CisgICAgaW50IHlfdmFsOworICAgIGludCB4X3ZhbDsKKyAgICBpbnQgeV9iZWcsIHhfYmVnOworICAgIGludCB5X21heCwgeF9tYXg7Cit9IFNUQVRVUzsKKworc3RhdGljIGNvbnN0IGNoYXIgKgorY29sb3JfcGFyYW1zKHVuc2lnbmVkIHN0YXRlLCBpbnQgKnBhaXIpCit7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIHN0cnVjdCB7CisJaW50IHBhaXI7CisJaW50IGZnLCBiZzsKKwljb25zdCBjaGFyICptc2c7CisgICAgfSB0YWJsZVtdID0geworCXsgMCwgQ09MT1JfREVGQVVMVCwgQ09MT1JfREVGQVVMVCwgImRlZmF1bHQiIH0sCisJeyAxLCBDT0xPUl9SRUQsICAgICBDT0xPUl9CTEFDSywgICAicmVkL2JsYWNrIiB9LAorCXsgMiwgQ09MT1JfV0hJVEUsICAgQ09MT1JfQkxVRSwgICAgIndoaXRlL2JsdWUiIH0sCisgICAgfTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCisgICAgc3RhdGljIGJvb2wgZmlyc3QgPSBUUlVFOworICAgIGNvbnN0IGNoYXIgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaWYgKGZpcnN0KSB7CisJICAgIHVuc2lnbmVkIG47CisKKwkgICAgc3RhcnRfY29sb3IoKTsKKwkgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YWJsZSk7ICsrbikgeworCQlpbml0X3BhaXIodGFibGVbbl0ucGFpciwgdGFibGVbbl0uZmcsIHRhYmxlW25dLmJnKTsKKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPCBTSVpFT0YodGFibGUpKSB7CisJICAgICpwYWlyID0gdGFibGVbc3RhdGVdLnBhaXI7CisJICAgIHJlc3VsdCA9IHRhYmxlW3N0YXRlXS5tc2c7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCit2aWRlb19wYXJhbXModW5zaWduZWQgc3RhdGUsIHVuc2lnbmVkICphdHRyKQoreworICAgIC8qICpJTkRFTlQtT0ZGKiAqLworICAgIHN0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIGF0dHI7CisJY29uc3QgY2hhciAqbXNnOworICAgIH0gdGFibGVbXSA9IHsKKwl7IEFfTk9STUFMLAkibm9ybWFsIiB9LAorCXsgQV9CT0xELAkiYm9sZCIgfSwKKwl7IEFfUkVWRVJTRSwJInJldmVyc2UiIH0sCisJeyBBX1VOREVSTElORSwJInVuZGVybGluZSIgfSwKKwl7IEFfQkxJTkssIAkiYmxpbmsiIH0sCisgICAgfTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCisgICAgY29uc3QgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIGlmIChzdGF0ZSA8IFNJWkVPRih0YWJsZSkpIHsKKwkqYXR0ciA9IHRhYmxlW3N0YXRlXS5hdHRyOworCXJlc3VsdCA9IHRhYmxlW3N0YXRlXS5tc2c7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZpbGwgdGhlIHdpbmRvdyB3aXRoIGEgdGVzdC1wYXR0ZXJuICovCitzdGF0aWMgdm9pZAorZmlsbF93aW5kb3coV0lORE9XICp3aW4pCit7CisgICAgaW50IHksIHg7CisKKyAgICBnZXR5eCh3aW4sIHksIHgpOworICAgIHdtb3ZlKHdpbiwgMCwgMCk7CisgICAgd2hpbGUgKHdhZGRzdHIod2luLCAiMDEyMzQ1Njc4OSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAiKSAhPSBFUlIpIHsKKyAgICB9CisgICAgd21vdmUod2luLCB5LCB4KTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfc3RhdHVzKFdJTkRPVyAqd2luLCBTVEFUVVMgKiBzcCkKK3sKKyAgICBpbnQgeSwgeDsKKworICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3cHJpbnR3KHdpbiwgIkNvdW50ICVkIiwgc3AtPmNvdW50KTsKKyAgICBpZiAoc3AtPnZfbXNnICE9IDApCisJd3ByaW50dyh3aW4sICIgVmlkZW8gJXMiLCBzcC0+dl9tc2cpOworICAgIGlmIChzcC0+Y19tc2cgIT0gMCkKKwl3cHJpbnR3KHdpbiwgIiBDb2xvciAlcyIsIHNwLT5jX21zZyk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgd21vdmUod2luLCB5LCB4KTsKK30KKworc3RhdGljIHZvaWQKK2RvX3N1YndpbmRvdyhXSU5ET1cgKndpbiwgU1RBVFVTICogc3AsIHZvaWQgZnVuYyhXSU5ET1cgKikpCit7CisgICAgV0lORE9XICp3aW4xID0gbmV3d2luKHNwLT55X21heCAtIDIsIHNwLT54X21heCAtIDIsCisJCQkgIHNwLT55X2JlZyArIDEsIHNwLT54X2JlZyArIDEpOworCisgICAgaWYgKHdpbjEgIT0gMCAmJiBzcC0+eV9tYXggPiA0ICYmIHNwLT54X21heCA+IDQpIHsKKwlXSU5ET1cgKndpbjIgPSBkZXJ3aW4od2luMSwgc3AtPnlfbWF4IC0gNCwgc3AtPnhfbWF4IC0gNCwgMSwgMSk7CisKKwlpZiAod2luMiAhPSAwKSB7CisJICAgIGJveCh3aW4xLCAwLCAwKTsKKwkgICAgd3JlZnJlc2god2luMSk7CisJICAgIGZ1bmMod2luMik7CisKKwkgICAgZGVsd2luKHdpbjIpOworCX0gZWxzZSB7CisJICAgIGJlZXAoKTsKKwl9CisJZGVsd2luKHdpbjEpOworCXRvdWNod2luKHdpbik7CisgICAgfSBlbHNlIHsKKwliZWVwKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAoraW5pdF9zdGF0dXMoV0lORE9XICp3aW4sIFNUQVRVUyAqIHNwKQoreworICAgIG1lbXNldChzcCwgMCwgc2l6ZW9mKCpzcCkpOworICAgIHNwLT5jID0gOTk7CisgICAgc3AtPnYgPSA5OTsKKyAgICBzcC0+Y2ggPSAnICc7CisKKyAgICBrZXlwYWQod2luLCBUUlVFKTsKKyAgICBmaWxsX3dpbmRvdyh3aW4pOworCisgICAgZ2V0YmVneXgod2luLCBzcC0+eV9iZWcsIHNwLT54X2JlZyk7CisgICAgZ2V0bWF4eXgod2luLCBzcC0+eV9tYXgsIHNwLT54X21heCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2hlbHAoV0lORE9XICp3aW4pCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlW10gPQorICAgIHsKKwkiQmFzaWMgY29tbWFuZHM6IgorCSwiVXNlIGgvai9rL2wgb3IgYXJyb3cga2V5cyB0byBtb3ZlIHRoZSBjdXJzb3IuIgorCSwiU2V0IHRoZSBjb3VudCBwYXJhbWV0ZXIgZm9yIGNoZ2F0IGJ5IGVudGVyaW5nIGRpZ2l0cyAwLTkuIgorCSwiIgorCSwiT3RoZXIgY29tbWFuZHM6IgorCSwic3BhY2UgdG9nZ2xlcyB0aHJvdWdoIHRoZSBzZXQgb2YgdmlkZW8gYXR0cmlidXRlcyBhbmQgY29sb3JzLiIKKwksInQgICAgIHRvdWNoZXMgKGZvcmNlcyByZXBhaW50KSBvZiB0aGUgY3VycmVudCBsaW5lLiIKKwksIi4gICAgIGNhbGxzICpjaGdhdCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRoIHRoZSBnaXZlbiBjb3VudC4iCisJLCIsICAgICBjYWxscyAqY2hnYXQgYXQgdGhlIHdpbmRvdyBiZWdpbm5pbmcgd2l0aCB0aGUgZ2l2ZW4gY291bnQuIgorCSwiPSAgICAgcmVzZXRzIGNvdW50IHRvIHplcm8uIgorCSwiLSAgICAgbmVnYXRlcyBjb3VudC4iCisJLCI/ICAgICBzaG93cyB0aGlzIGhlbHAtd2luZG93IgorCSwiIgorCSwiIgorICAgIH07CisKKyAgICBpbnQgeV9tYXgsIHhfbWF4OworICAgIGludCByb3c7CisKKyAgICBnZXRtYXh5eCh3aW4sIHlfbWF4LCB4X21heCk7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCAoaW50KSBTSVpFT0YodGFibGUpICYmIHJvdyA8IHlfbWF4OyArK3JvdykgeworCW12d3ByaW50dyh3aW4sIHJvdywgMCwgIiUuKnMiLCB4X21heCwgdGFibGVbcm93XSk7CisgICAgfQorICAgIHdoaWxlICh3Z2V0Y2god2luKSAhPSAncScpCisJYmVlcCgpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX3N0YXR1cyhXSU5ET1cgKndpbiwgU1RBVFVTICogc3ApCit7CisgICAgc3dpdGNoIChzcC0+Y2gpIHsKKyAgICBjYXNlICcgJzoJCQkvKiBuZXh0IHRlc3QtaXRlcmF0aW9uICovCisJaWYgKGhhc19jb2xvcnMoKSkgeworCSAgICBpZiAoKHNwLT5jX21zZyA9IGNvbG9yX3BhcmFtcygrKyhzcC0+YyksICYoc3AtPnBhaXIpKSkgPT0gMCkgeworCQlzcC0+Y19tc2cgPSBjb2xvcl9wYXJhbXMoc3AtPmMgPSAwLCAmKHNwLT5wYWlyKSk7CisJCWlmICgoc3AtPnZfbXNnID0gdmlkZW9fcGFyYW1zKCsrKHNwLT52KSwgJihzcC0+YXR0cikpKSA9PSAwKSB7CisJCSAgICBzcC0+dl9tc2cgPSB2aWRlb19wYXJhbXMoc3AtPnYgPSAwLCAmKHNwLT5hdHRyKSk7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGlmICgoc3AtPnZfbXNnID0gdmlkZW9fcGFyYW1zKCsrKHNwLT52KSwgJihzcC0+YXR0cikpKSA9PSAwKSB7CisJCXNwLT52X21zZyA9IHZpZGVvX3BhcmFtcyhzcC0+diA9IDAsICYoc3AtPmF0dHIpKTsKKwkgICAgfQorCX0KKwlzcC0+Y291bnQgPSAwOworCXNob3dfc3RhdHVzKHdpbiwgc3ApOworCWJyZWFrOworICAgIGNhc2UgS0VZX0xFRlQ6CisgICAgY2FzZSAnaCc6CisJaWYgKHNwLT54X3ZhbCA+IDApCisJICAgIHdtb3ZlKHdpbiwgc3AtPnlfdmFsLCAtLShzcC0+eF92YWwpKTsKKwlicmVhazsKKyAgICBjYXNlIEtFWV9ET1dOOgorICAgIGNhc2UgJ2onOgorCWlmIChzcC0+eV92YWwgPCBzcC0+eV9tYXgpCisJICAgIHdtb3ZlKHdpbiwgKysoc3AtPnlfdmFsKSwgc3AtPnhfdmFsKTsKKwlicmVhazsKKyAgICBjYXNlIEtFWV9VUDoKKyAgICBjYXNlICdrJzoKKwlpZiAoc3AtPnlfdmFsID4gMCkKKwkgICAgd21vdmUod2luLCAtLShzcC0+eV92YWwpLCBzcC0+eF92YWwpOworCWJyZWFrOworICAgIGNhc2UgS0VZX1JJR0hUOgorICAgIGNhc2UgJ2wnOgorCWlmIChzcC0+eF92YWwgPCBzcC0+eF9tYXgpCisJICAgIHdtb3ZlKHdpbiwgc3AtPnlfdmFsLCArKyhzcC0+eF92YWwpKTsKKwlicmVhazsKKyAgICBjYXNlICd0JzoKKwl0b3VjaGxpbmUod2luLCBzcC0+eV92YWwsIDEpOworCWJyZWFrOworICAgIGNhc2UgJz0nOgorCXNwLT5jb3VudCA9IDA7CisJc2hvd19zdGF0dXMod2luLCBzcCk7CisJYnJlYWs7CisgICAgY2FzZSAnLSc6CisJc3AtPmNvdW50ID0gLShzcC0+Y291bnQpOworCXNob3dfc3RhdHVzKHdpbiwgc3ApOworCWJyZWFrOworICAgIGNhc2UgJz8nOgorCWRvX3N1YndpbmRvdyh3aW4sIHNwLCBzaG93X2hlbHApOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJaWYgKGlzZGlnaXQoc3AtPmNoKSkgeworCSAgICBzcC0+Y291bnQgPSAoc3AtPmNvdW50ICogMTApICsgKHNwLT5jaCAtICcwJyk7CisJICAgIHNob3dfc3RhdHVzKHdpbiwgc3ApOworCX0gZWxzZSB7CisJICAgIGJlZXAoKTsKKwl9CisJYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordGVzdF93Y2hnYXQoV0lORE9XICp3aW4pCit7CisgICAgU1RBVFVTIHN0OworCisgICAgaW5pdF9zdGF0dXMod2luLCAmc3QpOworCisgICAgZG8geworCXN3aXRjaCAoc3QuY2gpIHsKKwljYXNlICcuJzoJCS8qIGNoYW5nZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gKi8KKwkgICAgd2NoZ2F0KHdpbiwgc3QuY291bnQsIHN0LmF0dHIsIHN0LnBhaXIsICh2b2lkICopIDApOworCSAgICB0b3VjaF9pZl9uZWVkZWQod2luLCBzdC55X3ZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgJywnOgkJLyogY2hhbmdlIGZyb20gYmVnaW5uaW5nIG9mIHdpbmRvdyAqLworCSAgICBtdndjaGdhdCh3aW4sIDAsIDAsIHN0LmNvdW50LCBzdC5hdHRyLCBzdC5wYWlyLCAodm9pZCAqKSAwKTsKKwkgICAgdG91Y2hfaWZfbmVlZGVkKHdpbiwgMCk7CisJICAgIHdtb3ZlKHdpbiwgc3QueV92YWwsIHN0LnhfdmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIGRvX3N1YndpbmRvdyh3aW4sICZzdCwgdGVzdF93Y2hnYXQpOworCSAgICBicmVhazsKKwljYXNlICdxJzoKKwkgICAgcmV0dXJuOworCWRlZmF1bHQ6CisJICAgIHVwZGF0ZV9zdGF0dXMod2luLCAmc3QpOworCSAgICBicmVhazsKKwl9CisgICAgfSB3aGlsZSAoKHN0LmNoID0gd2dldGNoKHdpbikpICE9IEVSUik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2NoZ2F0KHZvaWQpCit7CisgICAgU1RBVFVTIHN0OworCisgICAgaW5pdF9zdGF0dXMoc3Rkc2NyLCAmc3QpOworCisgICAgZG8geworCXN3aXRjaCAoc3QuY2gpIHsKKwljYXNlICcuJzoJCS8qIGNoYW5nZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gKi8KKwkgICAgY2hnYXQoc3QuY291bnQsIHN0LmF0dHIsIHN0LnBhaXIsICh2b2lkICopIDApOworCSAgICB0b3VjaF9pZl9uZWVkZWQoc3Rkc2NyLCBzdC55X3ZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgJywnOgkJLyogY2hhbmdlIGZyb20gYmVnaW5uaW5nIG9mIHdpbmRvdyAqLworCSAgICBtdmNoZ2F0KDAsIDAsIHN0LmNvdW50LCBzdC5hdHRyLCBzdC5wYWlyLCAodm9pZCAqKSAwKTsKKwkgICAgdG91Y2hfaWZfbmVlZGVkKHN0ZHNjciwgMCk7CisJICAgIG1vdmUoc3QueV92YWwsIHN0LnhfdmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIGRvX3N1YndpbmRvdyhzdGRzY3IsICZzdCwgdGVzdF93Y2hnYXQpOworCSAgICBicmVhazsKKwljYXNlICdxJzoKKwkgICAgcmV0dXJuOworCWRlZmF1bHQ6CisJICAgIHVwZGF0ZV9zdGF0dXMoc3Rkc2NyLCAmc3QpOworCSAgICBicmVhazsKKwl9CisgICAgfSB3aGlsZSAoKHN0LmNoID0gZ2V0Y2goKSkgIT0gRVJSKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOworICAgIG5vZWNobygpOworCisgICAgdGVzdF9jaGdhdCgpOworICAgIGVuZHdpbigpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSBjdXJzZXMgY2hnYXQgZnVuY3Rpb25cbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvY29sb3Jfc2V0LmMgYi90ZXN0L2NvbG9yX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTgxY2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvbG9yX3NldC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBjb2xvcl9zZXQuYyx2IDEuNiAyMDA4LzAyLzEwIDAwOjE4OjAxIHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIEhBVkVfQ09MT1JfU0VUCisKKyNkZWZpbmUgU0hPVyhuKSAoKG4pID09IEVSUiA/ICJFUlIiIDogIk9LIikKKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgc2hvcnQgZiwgYjsKKyAgICBpbnQgaTsKKworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCisJcGFpcl9jb250ZW50KDAsICZmLCAmYik7CisJcHJpbnR3KCJwYWlyIDAgY29udGFpbnMgKCVkLCVkKVxuIiwgZiwgYik7CisJZ2V0Y2goKTsKKworCXByaW50dygiSW5pdGlhbGl6aW5nIHBhaXIgMSB0byByZWQvYmxhY2tcbiIpOworCWluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKwlpID0gY29sb3Jfc2V0KDEsIE5VTEwpOworCXByaW50dygiUkVEL0JMQUNLICglcylcbiIsIFNIT1coaSkpOworCWdldGNoKCk7CisKKwlwcmludHcoIkluaXRpYWxpemluZyBwYWlyIDIgdG8gd2hpdGUvYmx1ZVxuIik7CisJaW5pdF9wYWlyKDIsIENPTE9SX1dISVRFLCBDT0xPUl9CTFVFKTsKKwlpID0gY29sb3Jfc2V0KDIsIE5VTEwpOworCXByaW50dygiV0hJVEUvQkxVRSAoJXMpXG4iLCBTSE9XKGkpKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJSZXNldHRpbmcgY29sb3JzIHRvIHBhaXIgMFxuIik7CisJaSA9IGNvbG9yX3NldCgwLCBOVUxMKTsKKwlwcmludHcoIkRlZmF1bHQgQ29sb3JzICglcylcbiIsIFNIT1coaSkpOworCWdldGNoKCk7CisKKwlwcmludHcoIlJlc2V0dGluZyBjb2xvcnMgdG8gcGFpciAxXG4iKTsKKwlpID0gY29sb3Jfc2V0KDEsIE5VTEwpOworCXByaW50dygiUkVEL0JMQUNLICglcylcbiIsIFNIT1coaSkpOworCWdldGNoKCk7CisKKyAgICB9IGVsc2UgeworCXByaW50dygiVGhpcyBkZW1vIHJlcXVpcmVzIGEgY29sb3IgdGVybWluYWwiKTsKKwlnZXRjaCgpOworICAgIH0KKyAgICBlbmR3aW4oKTsKKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGN1cnNlcyBjb2xvcl9zZXQgZnVuY3Rpb25cbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvY29uZmlndXJlIGIvdGVzdC9jb25maWd1cmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY0ZmM1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29uZmlndXJlCkBAIC0wLDAgKzEsODE0MCBAQAorIyEgL2Jpbi9zaAorCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IHVzaW5nIGF1dG9jb25mIHZlcnNpb24gMi4xMy4yMDAzMDkyNyAKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCA5MywgOTQsIDk1LCA5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCisjIERlZmF1bHRzOgorYWNfaGVscD0KK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKKyMgQW55IGFkZGl0aW9ucyBmcm9tIGNvbmZpZ3VyZS5pbjoKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2J1aWxkPU5PTkUKK2NhY2hlX2ZpbGU9Li9jb25maWcuY2FjaGUKK2V4ZWNfcHJlZml4PU5PTkUKK2hvc3Q9Tk9ORQorbm9fY3JlYXRlPQorbm9ub3B0PU5PTkUKK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3RhcmdldD1OT05FCit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitpbmZvZGlyPScke3ByZWZpeH0vaW5mbycKK21hbmRpcj0nJHtwcmVmaXh9L21hbicKKworIyBJbml0aWFsaXplIHNvbWUgb3RoZXIgdmFyaWFibGVzLgorc3ViZGlycz0KK01GTEFHUz0gTUFLRUZMQUdTPQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KK2FjX21heF9oZXJlX2xpbmVzPTEyCisKK2FjX3ByZXY9Citmb3IgYWNfb3B0aW9uCitkbworCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKyAgLSo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0aW9uIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7CisgICopIGFjX29wdGFyZz0gOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisgICAgYWNfcHJldj1idWlsZCA7OworICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKyAgICBidWlsZD0iJGFjX29wdGFyZyIgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorICAgIGFjX3ByZXY9ZGF0YWRpciA7OworICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qIHwgLS1kYXRhPSogfCAtLWRhdD0qIFwKKyAgfCAtLWRhPSopCisgICAgZGF0YWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmRpc2FibGUtLy8nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX2ZlYXR1cmU6IGludmFsaWQgZmVhdHVyZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCisgICAgZXZhbCAiZW5hYmxlXyR7YWNfZmVhdHVyZX09bm8iIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZW5hYmxlLS8vJyAtZSAncy89LiovLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorICAgICAgKj0qKSA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT0nJGFjX29wdGFyZyciIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgd2l0aF9nYXM9eWVzIDs7CisKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUpCisgICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICAgIGNhdCA8PCBFT0YKK1VzYWdlOiBjb25maWd1cmUgW29wdGlvbnNdIFtob3N0XQorT3B0aW9uczogW2RlZmF1bHRzIGluIGJyYWNrZXRzIGFmdGVyIGRlc2NyaXB0aW9uc10KK0NvbmZpZ3VyYXRpb246CisgIC0tY2FjaGUtZmlsZT1GSUxFICAgICAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFCisgIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQorICAtLW5vLWNyZWF0ZSAgICAgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAtLXF1aWV0LCAtLXNpbGVudCAgICAgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgLS12ZXJzaW9uICAgICAgICAgICAgICAgcHJpbnQgdGhlIHZlcnNpb24gb2YgYXV0b2NvbmYgdGhhdCBjcmVhdGVkIGNvbmZpZ3VyZQorRGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3NhbWUgYXMgcHJlZml4XQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYL3NoYXJlXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBpbiBESVIgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgaW4gRElSIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgaW4gRElSIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgaW4gRElSIFsvdXNyL2luY2x1ZGVdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9pbmZvXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9tYW5dCisgIC0tc3JjZGlyPURJUiAgICAgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIC4uXQorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworRU9GCisgICAgY2F0IDw8IEVPRgorSG9zdCB0eXBlOgorICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtCVUlMRD1IT1NUXQorICAtLWhvc3Q9SE9TVCAgICAgICAgICAgICBjb25maWd1cmUgZm9yIEhPU1QgW2d1ZXNzZWRdCisgIC0tdGFyZ2V0PVRBUkdFVCAgICAgICAgIGNvbmZpZ3VyZSBmb3IgVEFSR0VUIFtUQVJHRVQ9SE9TVF0KK0ZlYXR1cmVzIGFuZCBwYWNrYWdlczoKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0teC1pbmNsdWRlcz1ESVIgICAgICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCisgIC0teC1saWJyYXJpZXM9RElSICAgICAgIFggbGlicmFyeSBmaWxlcyBhcmUgaW4gRElSCitFT0YKK2NhdCA8PFxFT0YKKy0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucyByZWNvZ25pemVkOgorICAtLWRpc2FibGUtZWNobyAgICAgICAgICBkaXNwbGF5ICJjb21waWxpbmciIGNvbW1hbmRzCisgIC0tZW5hYmxlLXdhcm5pbmdzICAgICAgIHRlc3Q6IHR1cm4gb24gZ2NjIGNvbXBpbGVyIHdhcm5pbmdzCisgIC0td2l0aC1jdXJzZXMtZGlyPURJUiAgIGRpcmVjdG9yeSBpbiB3aGljaCAobiljdXJzZXMgaXMgaW5zdGFsbGVkCisgIC0td2l0aC01bGliICAgICAgICAgICAgIHVzZSBTdW5PUyBzeXN2LWxpYnJhcmllcworICAtLXdpdGgtbmN1cnNlc3cgICAgICAgICB1c2Ugd2lkZSBuY3Vyc2VzLWxpYnJhcmllcyAoaW5zdGFsbGVkKQorICAtLXdpdGgtbmN1cnNlcyAgICAgICAgICB1c2UgbmN1cnNlcy1saWJyYXJpZXMgKGluc3RhbGxlZCkKKyAgLS13aXRoLXBkY3Vyc2VzICAgICAgICAgY29tcGlsZS9saW5rIHdpdGggcGRjdXJzZXMgWDExIGxpYnJhcnkKKyAgLS13aXRoLXggICAgICAgICAgICAgICAgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0KKyAgLS13aXRoLVhhdzNkICAgICAgICAgICAgbGluayB3aXRoIFhhdyAzZCBsaWJyYXJ5CisgIC0td2l0aC1uZVh0YXcgICAgICAgICAgIGxpbmsgd2l0aCBuZVhUIEF0aGVuYSBsaWJyYXJ5CisgIC0td2l0aC1YYXdQbHVzICAgICAgICAgIGxpbmsgd2l0aCBBdGhlbmEtUGx1cyBsaWJyYXJ5CitFT0YKKyAgICBleGl0IDAgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3QgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0PSIkYWNfb3B0YXJnIiA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQorICAgIGxpYmRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgXAorICB8IC0tbG9jYWxzIHwgLS1sb2NhbCB8IC0tbG9jYSB8IC0tbG9jIHwgLS1sbykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogXAorICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCisgICAgbG9jYWxzdGF0ZWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKKyAgICBtYW5kaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMpCisgICAgbm9fY3JlYXRlPXllcyA7OworCisgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikKKyAgICBub19yZWN1cnNpb249eWVzIDs7CisKKyAgLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaSB8IC0tb2xkaW5jbHVkZWQgXAorICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKKyAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQorICAgIGFjX3ByZXY9b2xkaW5jbHVkZWRpciA7OworICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAorICB8IC0tb2xkaW49KiB8IC0tb2xkaT0qIHwgLS1vbGQ9KiB8IC0tb2w9KiB8IC0tbz0qKQorICAgIG9sZGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0iJGFjX29wdGFyZyIgOzsKKworICAtcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpIHwgLS1wcm9ncmFtLXN1ZmYgXAorICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7CisgIC1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpPSogXAorICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCisgICAgcHJvZ3JhbV9zdWZmaXg9IiRhY19vcHRhcmciIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9IiRhY19vcHRhcmciIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKyAgICBhY19wcmV2PXNpdGUgOzsKKyAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKKyAgICBzaXRlPSIkYWNfb3B0YXJnIiA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKyAgICBhY19wcmV2PXRhcmdldCA7OworICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisgICAgdGFyZ2V0PSIkYWNfb3B0YXJnIiA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycykKKyAgICBlY2hvICJjb25maWd1cmUgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMy4yMDAzMDkyNyIKKyAgICBleGl0IDAgOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKndpdGgtLy8nIC1lICdzLz0uKi8vJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCisgICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19wYWNrYWdlOiBpbnZhbGlkIHBhY2thZ2UgbmFtZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgZmkKKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorICAgIGNhc2UgIiRhY19vcHRpb24iIGluCisgICAgICAqPSopIDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgIndpdGhfJHthY19wYWNrYWdlfT0nJGFjX29wdGFyZyciIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRob3V0LS8vJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy9bLWEtekEtWjAtOV9dLy9nJ2AiOyB0aGVuCisgICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19wYWNrYWdlOiBpbnZhbGlkIHBhY2thZ2UgbmFtZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgZmkKKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgIndpdGhfJHthY19wYWNrYWdlfT1ubyIgOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSIkYWNfb3B0YXJnIiA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0iJGFjX29wdGFyZyIgOzsKKworICAtKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfb3B0aW9uOiBpbnZhbGlkIG9wdGlvbjsgdXNlIC0taGVscCB0byBzaG93IHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKyAgICA7OworCisgICopCisgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX29wdGlvbnwgc2VkICdzL1stYS16MC05Ll0vL2cnYCI7IHRoZW4KKyAgICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogJGFjX29wdGlvbjogaW52YWxpZCBob3N0IHR5cGUiIDE+JjIKKyAgICBmaQorICAgIGlmIHRlc3QgIngkbm9ub3B0IiAhPSB4Tk9ORTsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gb25seSBjb25maWd1cmUgZm9yIG9uZSBob3N0IGFuZCBvbmUgdGFyZ2V0IGF0IGEgdGltZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgZmkKKyAgICBub25vcHQ9IiRhY19vcHRpb24iCisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gLS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKK3RyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1CisKKyMgRmlsZSBkZXNjcmlwdG9yIHVzYWdlOgorIyAwIHN0YW5kYXJkIGlucHV0CisjIDEgZmlsZSBjcmVhdGlvbgorIyAyIGVycm9ycyBhbmQgd2FybmluZ3MKKyMgMyBzb21lIHN5c3RlbXMgbWF5IG9wZW4gaXQgdG8gL2Rldi90dHkKKyMgNCB1c2VkIG9uIHRoZSBLdWJvdGEgVGl0YW4KKyMgNiBjaGVja2luZyBmb3IuLi4gbWVzc2FnZXMgYW5kIHJlc3VsdHMKKyMgNSBjb21waWxlciBtZXNzYWdlcyBzYXZlZCBpbiBjb25maWcubG9nCitpZiB0ZXN0ICIkc2lsZW50IiA9IHllczsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCitlbHNlCisgIGV4ZWMgNj4mMQorZmkKK2V4ZWMgNT4uL2NvbmZpZy5sb2cKKworZWNobyAiXAorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisiIDE+JjUKKworIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycy4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorZm9yIGFjX2FyZworZG8KKyAgY2FzZSAiJGFjX2FyZyIgaW4KKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKSA7OworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7CisgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XSopCisgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIiA7OworICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICRhY19hcmciIDs7CisgIGVzYWMKK2RvbmUKKworIyBOTFMgbnVpc2FuY2VzLgorIyBPbmx5IHNldCB0aGVzZSB0byBDIGlmIGFscmVhZHkgc2V0LiAgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseQorIyBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCisjIEZpeGluZyBMQ19NRVNTQUdFUyBwcmV2ZW50cyBTb2xhcmlzIHNoIGZyb20gdHJhbnNsYXRpbmcgdmFyIHZhbHVlcyBpbiBgc2V0JyEKKyMgTm9uLUMgTENfQ1RZUEUgdmFsdWVzIGJyZWFrIHRoZSBjdHlwZSBjaGVjay4KK2lmIHRlc3QgIiR7TEFORytzZXR9IiAgID0gc2V0OyB0aGVuIExBTkc9QzsgICBleHBvcnQgTEFORzsgICBmaQoraWYgdGVzdCAiJHtMQ19BTEwrc2V0fSIgPSBzZXQ7IHRoZW4gTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IGZpCitpZiB0ZXN0ICIke0xDX01FU1NBR0VTK3NldH0iID0gc2V0OyB0aGVuIExDX01FU1NBR0VTPUM7IGV4cG9ydCBMQ19NRVNTQUdFUzsgZmkKK2lmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisjIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KK2VjaG8gPiBjb25mZGVmcy5oCisKKyMgQSBmaWxlbmFtZSB1bmlxdWUgdG8gdGhpcyBwYWNrYWdlLCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHRoYXQKKyMgY29uZmlndXJlIGlzIGluLCB3aGljaCB3ZSBjYW4gbG9vayBmb3IgdG8gZmluZCBvdXQgaWYgc3JjZGlyIGlzIGNvcnJlY3QuCithY191bmlxdWVfZmlsZT1uY3Vyc2VzLmMKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCisgIGFjX3Byb2c9JDAKKyAgYWNfY29uZmRpcj1gZWNobyAkYWNfcHJvZ3xzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgIHRlc3QgIngkYWNfY29uZmRpciIgPSAieCRhY19wcm9nIiAmJiBhY19jb25mZGlyPS4KKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJGFjX2NvbmZkaXIgb3IgLi4iIDE+JjI7IGV4aXQgMTsgfQorICBlbHNlCisgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgc291cmNlcyBpbiAkc3JjZGlyIiAxPiYyOyBleGl0IDE7IH0KKyAgZmkKK2ZpCitzcmNkaXI9YGVjaG8gIiR7c3JjZGlyfSIgfCBzZWQgJ3MlXChbXi9dXCkvKiQlXDElJ2AKKworIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2lmIHRlc3QgLXogIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGVsc2UKKyAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGZpCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCisgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgZWNobyAibG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIgorICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICBlY2hvICJsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAuICRjYWNoZV9maWxlCitlbHNlCisgIGVjaG8gImNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICA+ICRjYWNoZV9maWxlCitmaQorCithY19leHQ9YworIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKK2FjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKK2Nyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworCithY19leGVleHQ9CithY19vYmpleHQ9bworaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KKyAgIyBTdGFyZGVudCBWaXN0cmEgU1ZSNCBncmVwIGxhY2tzIC1lLCBzYXlzIGdoYXppQGNhaXAucnV0Z2Vycy5lZHUuCisgIGlmIChlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDMpIHwgc2VkIHMvLW4veG4vIHwgZ3JlcCB4biA+L2Rldi9udWxsOyB0aGVuCisgICAgYWNfbj0gYWNfYz0nCisnIGFjX3Q9JwknCisgIGVsc2UKKyAgICBhY19uPS1uIGFjX2M9IGFjX3Q9CisgIGZpCitlbHNlCisgIGFjX249IGFjX2M9J1xjJyBhY190PQorZmkKKworIyBJZiB3ZSBmaW5kIFgsIHNldCBzaGVsbCB2YXJzIHhfaW5jbHVkZXMgYW5kIHhfbGlicmFyaWVzIHRvIHRoZQorIyBwYXRocywgb3RoZXJ3aXNlIHNldCBub194PXllcy4KKyMgVXNlcyBhY18gdmFycyBhcyB0ZW1wcyB0byBhbGxvdyBjb21tYW5kIGxpbmUgdG8gb3ZlcnJpZGUgY2FjaGUgYW5kIGNoZWNrcy4KKyMgLS13aXRob3V0LXggb3ZlcnJpZGVzIGV2ZXJ5dGhpbmcgZWxzZSwgYnV0IGRvZXMgbm90IHRvdWNoIHRoZSBjYWNoZS4KK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBYIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1NDA6IGNoZWNraW5nIGZvciBYIiA+JjUKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXggb3IgLS13aXRob3V0LXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfeCIKKyAgOgorZmkKKworIyAkaGF2ZV94IGlzIGB5ZXMnLCBgbm8nLCBgZGlzYWJsZWQnLCBvciBlbXB0eSB3aGVuIHdlIGRvIG5vdCB5ZXQga25vdy4KK2lmIHRlc3QgIngkd2l0aF94IiA9IHhubzsgdGhlbgorICAjIFRoZSB1c2VyIGV4cGxpY2l0bHkgZGlzYWJsZWQgWC4KKyAgaGF2ZV94PWRpc2FibGVkCitlbHNlCisgIGlmIHRlc3QgIngkeF9pbmNsdWRlcyIgIT0geE5PTkUgJiYgdGVzdCAieCR4X2xpYnJhcmllcyIgIT0geE5PTkU7IHRoZW4KKyAgICAjIEJvdGggdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldC4KKyAgICBoYXZlX3g9eWVzCisgIGVsc2UKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oYXZlX3gnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgorYWNfeF9pbmNsdWRlcz1OTyBhY194X2xpYnJhcmllcz1OTworcm0gLWZyIGNvbmZ0ZXN0ZGlyCitpZiBta2RpciBjb25mdGVzdGRpcjsgdGhlbgorICBjZCBjb25mdGVzdGRpcgorICAjIE1ha2Ugc3VyZSB0byBub3QgcHV0ICJtYWtlIiBpbiB0aGUgSW1ha2VmaWxlIHJ1bGVzLCBzaW5jZSB3ZSBncmVwIGl0IG91dC4KKyAgY2F0ID4gSW1ha2VmaWxlIDw8J0VPRicKK2FjZmluZHg6CisJQGVjaG8gJ2FjX2ltX2luY3Jvb3Q9IiR7SU5DUk9PVH0iOyBhY19pbV91c3JsaWJkaXI9IiR7VVNSTElCRElSfSI7IGFjX2ltX2xpYmRpcj0iJHtMSUJESVJ9IicKK0VPRgorICBpZiAoeG1rbWYpID4vZGV2L251bGwgMj4vZGV2L251bGwgJiYgdGVzdCAtZiBNYWtlZmlsZTsgdGhlbgorICAgICMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorICAgIGV2YWwgYCR7TUFLRS1tYWtlfSBhY2ZpbmR4IDI+L2Rldi9udWxsIHwgZ3JlcCAtdiBtYWtlYAorICAgICMgT3BlbiBXaW5kb3dzIHhta21mIHJlcG9ydGVkbHkgc2V0cyBMSUJESVIgaW5zdGVhZCBvZiBVU1JMSUJESVIuCisgICAgZm9yIGFjX2V4dGVuc2lvbiBpbiBhIHNvIHNsOyBkbworICAgICAgaWYgdGVzdCAhIC1mICRhY19pbV91c3JsaWJkaXIvbGliWDExLiRhY19leHRlbnNpb24gJiYKKyAgICAgICAgdGVzdCAtZiAkYWNfaW1fbGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uOyB0aGVuCisgICAgICAgIGFjX2ltX3VzcmxpYmRpcj0kYWNfaW1fbGliZGlyOyBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgIyBTY3JlZW4gb3V0IGJvZ3VzIHZhbHVlcyBmcm9tIHRoZSBpbWFrZSBjb25maWd1cmF0aW9uLiAgVGhleSBhcmUKKyAgICAjIGJvZ3VzIGJvdGggYmVjYXVzZSB0aGV5IGFyZSB0aGUgZGVmYXVsdCBhbnl3YXksIGFuZCBiZWNhdXNlCisgICAgIyB1c2luZyB0aGVtIHdvdWxkIGJyZWFrIGdjYyBvbiBzeXN0ZW1zIHdoZXJlIGl0IG5lZWRzIGZpeGVkIGluY2x1ZGVzLgorICAgIGNhc2UgIiRhY19pbV9pbmNyb290IiBpbgorCS91c3IvaW5jbHVkZSkgOzsKKwkqKSB0ZXN0IC1mICIkYWNfaW1faW5jcm9vdC9YMTEvWG9zLmgiICYmIGFjX3hfaW5jbHVkZXM9IiRhY19pbV9pbmNyb290IiA7OworICAgIGVzYWMKKyAgICBjYXNlICIkYWNfaW1fdXNybGliZGlyIiBpbgorCS91c3IvbGliIHwgL2xpYikgOzsKKwkqKSB0ZXN0IC1kICIkYWNfaW1fdXNybGliZGlyIiAmJiBhY194X2xpYnJhcmllcz0iJGFjX2ltX3VzcmxpYmRpciIgOzsKKyAgICBlc2FjCisgIGZpCisgIGNkIC4uCisgIHJtIC1mciBjb25mdGVzdGRpcgorZmkKKworaWYgdGVzdCAiJGFjX3hfaW5jbHVkZXMiID0gTk87IHRoZW4KKyAgIyBHdWVzcyB3aGVyZSB0byBmaW5kIGluY2x1ZGUgZmlsZXMsIGJ5IGxvb2tpbmcgZm9yIHRoaXMgb25lIFgxMSAuaCBmaWxlLgorICB0ZXN0IC16ICIkeF9kaXJlY3RfdGVzdF9pbmNsdWRlIiAmJiB4X2RpcmVjdF90ZXN0X2luY2x1ZGU9WDExL0ludHJpbnNpYy5oCisKKyAgIyBGaXJzdCwgdHJ5IHVzaW5nIHRoYXQgZmlsZSB3aXRoIG5vIHNwZWNpYWwgZGlyZWN0b3J5IHNwZWNpZmllZC4KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYwMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHhfZGlyZWN0X3Rlc3RfaW5jbHVkZT4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6NjA4OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAjIFdlIGNhbiBjb21waWxlIHVzaW5nIFggaGVhZGVycyB3aXRoIG5vIHNwZWNpYWwgaW5jbHVkZSBkaXJlY3RvcnkuCithY194X2luY2x1ZGVzPQorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgIyBMb29rIGZvciB0aGUgaGVhZGVyIGZpbGUgaW4gYSBzdGFuZGFyZCBzZXQgb2YgY29tbW9uIGRpcmVjdG9yaWVzLgorIyBDaGVjayBYMTEgYmVmb3JlIFgxMVJuIGJlY2F1c2UgaXQgaXMgb2Z0ZW4gYSBzeW1saW5rIHRvIHRoZSBjdXJyZW50IHJlbGVhc2UuCisgIGZvciBhY19kaXIgaW4gICAgICAgICAgICAgICBcCisgICAgL3Vzci9YMTEvaW5jbHVkZSAgICAgICAgICBcCisgICAgL3Vzci9YMTFSNi9pbmNsdWRlICAgICAgICBcCisgICAgL3Vzci9YMTFSNS9pbmNsdWRlICAgICAgICBcCisgICAgL3Vzci9YMTFSNC9pbmNsdWRlICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMSAgICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMVI2ICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMVI1ICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMVI0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9YMTEvaW5jbHVkZSAgICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNS9pbmNsdWRlICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNC9pbmNsdWRlICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMSAgICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI2ICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1ICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI0ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9YMzg2L2luY2x1ZGUgICAgICAgICBcCisgICAgL3Vzci94Mzg2L2luY2x1ZGUgICAgICAgICBcCisgICAgL3Vzci9YRnJlZTg2L2luY2x1ZGUvWDExICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlICAgICAgICBcCisgICAgL3Vzci91bnN1cHBvcnRlZC9pbmNsdWRlICBcCisgICAgL3Vzci9hdGhlbmEvaW5jbHVkZSAgICAgICBcCisgICAgL3Vzci9sb2NhbC94MTFyNS9pbmNsdWRlICBcCisgICAgL3Vzci9scHAvWGFtcGxlcy9pbmNsdWRlICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9vcGVud2luL2luY2x1ZGUgICAgICBcCisgICAgL3Vzci9vcGVud2luL3NoYXJlL2luY2x1ZGUgXAorICAgIDsgXAorICBkbworICAgIGlmIHRlc3QgLXIgIiRhY19kaXIvJHhfZGlyZWN0X3Rlc3RfaW5jbHVkZSI7IHRoZW4KKyAgICAgIGFjX3hfaW5jbHVkZXM9JGFjX2RpcgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCitmaQorcm0gLWYgY29uZnRlc3QqCitmaSAjICRhY194X2luY2x1ZGVzID0gTk8KKworaWYgdGVzdCAiJGFjX3hfbGlicmFyaWVzIiA9IE5POyB0aGVuCisgICMgQ2hlY2sgZm9yIHRoZSBsaWJyYXJpZXMuCisKKyAgdGVzdCAteiAiJHhfZGlyZWN0X3Rlc3RfbGlicmFyeSIgJiYgeF9kaXJlY3RfdGVzdF9saWJyYXJ5PVh0CisgIHRlc3QgLXogIiR4X2RpcmVjdF90ZXN0X2Z1bmN0aW9uIiAmJiB4X2RpcmVjdF90ZXN0X2Z1bmN0aW9uPVh0TWFsbG9jCisKKyAgIyBTZWUgaWYgd2UgZmluZCB0aGVtIHdpdGhvdXQgYW55IHNwZWNpYWwgb3B0aW9ucy4KKyAgIyBEb24ndCBhZGQgdG8gJExJQlMgcGVybWFuZW50bHkuCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCisgIExJQlM9Ii1sJHhfZGlyZWN0X3Rlc3RfbGlicmFyeSAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY3NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworJHt4X2RpcmVjdF90ZXN0X2Z1bmN0aW9ufSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njg0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorIyBXZSBjYW4gbGluayBYIHByb2dyYW1zIHdpdGggbm8gc3BlY2lhbCBsaWJyYXJ5IHBhdGguCithY194X2xpYnJhcmllcz0KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyMgRmlyc3Qgc2VlIGlmIHJlcGxhY2luZyB0aGUgaW5jbHVkZSBieSBsaWIgd29ya3MuCisjIENoZWNrIFgxMSBiZWZvcmUgWDExUm4gYmVjYXVzZSBpdCBpcyBvZnRlbiBhIHN5bWxpbmsgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZS4KK2ZvciBhY19kaXIgaW4gYGVjaG8gIiRhY194X2luY2x1ZGVzIiB8IHNlZCBzL2luY2x1ZGUvbGliL2AgXAorICAgIC91c3IvWDExL2xpYiAgICAgICAgICBcCisgICAgL3Vzci9YMTFSNi9saWIgICAgICAgIFwKKyAgICAvdXNyL1gxMVI1L2xpYiAgICAgICAgXAorICAgIC91c3IvWDExUjQvbGliICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xpYi9YMTEgICAgICAgICAgXAorICAgIC91c3IvbGliL1gxMVI2ICAgICAgICBcCisgICAgL3Vzci9saWIvWDExUjUgICAgICAgIFwKKyAgICAvdXNyL2xpYi9YMTFSNCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9YMTEvbGliICAgIFwKKyAgICAvdXNyL2xvY2FsL1gxMVI2L2xpYiAgXAorICAgIC91c3IvbG9jYWwvWDExUjUvbGliICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNC9saWIgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3IvbG9jYWwvbGliL1gxMSAgICBcCisgICAgL3Vzci9sb2NhbC9saWIvWDExUjYgIFwKKyAgICAvdXNyL2xvY2FsL2xpYi9YMTFSNSAgXAorICAgIC91c3IvbG9jYWwvbGliL1gxMVI0ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL1gzODYvbGliICAgICAgICAgXAorICAgIC91c3IveDM4Ni9saWIgICAgICAgICBcCisgICAgL3Vzci9YRnJlZTg2L2xpYi9YMTEgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3IvbGliICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9saWIgICAgICAgIFwKKyAgICAvdXNyL3Vuc3VwcG9ydGVkL2xpYiAgXAorICAgIC91c3IvYXRoZW5hL2xpYiAgICAgICBcCisgICAgL3Vzci9sb2NhbC94MTFyNS9saWIgIFwKKyAgICAvdXNyL2xwcC9YYW1wbGVzL2xpYiAgXAorICAgIC9saWIvdXNyL2xpYi9YMTEJICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL29wZW53aW4vbGliICAgICAgXAorICAgIC91c3Ivb3Blbndpbi9zaGFyZS9saWIgXAorICAgIDsgXAorZG8KKyAgZm9yIGFjX2V4dGVuc2lvbiBpbiBhIHNvIHNsOyBkbworICAgIGlmIHRlc3QgLXIgJGFjX2Rpci9saWIke3hfZGlyZWN0X3Rlc3RfbGlicmFyeX0uJGFjX2V4dGVuc2lvbjsgdGhlbgorICAgICAgYWNfeF9saWJyYXJpZXM9JGFjX2RpcgorICAgICAgYnJlYWsgMgorICAgIGZpCisgIGRvbmUKK2RvbmUKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpICMgJGFjX3hfbGlicmFyaWVzID0gTk8KKworaWYgdGVzdCAiJGFjX3hfaW5jbHVkZXMiID0gTk8gfHwgdGVzdCAiJGFjX3hfbGlicmFyaWVzIiA9IE5POyB0aGVuCisgICMgRGlkbid0IGZpbmQgWCBhbnl3aGVyZS4gIENhY2hlIHRoZSBrbm93biBhYnNlbmNlIG9mIFguCisgIGFjX2N2X2hhdmVfeD0iaGF2ZV94PW5vIgorZWxzZQorICAjIFJlY29yZCB3aGVyZSB3ZSBmb3VuZCBYIGZvciB0aGUgY2FjaGUuCisgIGFjX2N2X2hhdmVfeD0iaGF2ZV94PXllcyBcCisJICAgICAgICBhY194X2luY2x1ZGVzPSRhY194X2luY2x1ZGVzIGFjX3hfbGlicmFyaWVzPSRhY194X2xpYnJhcmllcyIKK2ZpCitmaQorICBmaQorICBldmFsICIkYWNfY3ZfaGF2ZV94IgorZmkgIyAkd2l0aF94ICE9IG5vCisKK2lmIHRlc3QgIiRoYXZlX3giICE9IHllczsgdGhlbgorICBlY2hvICIkYWNfdCIiJGhhdmVfeCIgMT4mNgorICBub194PXllcworZWxzZQorICAjIElmIGVhY2ggb2YgdGhlIHZhbHVlcyB3YXMgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgb3ZlcnJpZGVzIGVhY2ggZ3Vlc3MuCisgIHRlc3QgIngkeF9pbmNsdWRlcyIgPSB4Tk9ORSAmJiB4X2luY2x1ZGVzPSRhY194X2luY2x1ZGVzCisgIHRlc3QgIngkeF9saWJyYXJpZXMiID0geE5PTkUgJiYgeF9saWJyYXJpZXM9JGFjX3hfbGlicmFyaWVzCisgICMgVXBkYXRlIHRoZSBjYWNoZSB2YWx1ZSB0byByZWZsZWN0IHRoZSBjb21tYW5kIGxpbmUgdmFsdWVzLgorICBhY19jdl9oYXZlX3g9ImhhdmVfeD15ZXMgXAorCQlhY194X2luY2x1ZGVzPSR4X2luY2x1ZGVzIGFjX3hfbGlicmFyaWVzPSR4X2xpYnJhcmllcyIKKyAgZWNobyAiJGFjX3QiImxpYnJhcmllcyAkeF9saWJyYXJpZXMsIGhlYWRlcnMgJHhfaW5jbHVkZXMiIDE+JjYKK2ZpCisKKworCisKKwordGVzdCAtZiBjb25maWcuZ3Vlc3MgfHwgKCB0ZXN0IC1mIC4uL2NvbmZpZy5ndWVzcyAmJiBjcCAuLi9jb25maWcuZ3Vlc3MgLi8gKQorCisKK3Rlc3QgLWYgY29uZmlnLnN1YiB8fCAoIHRlc3QgLWYgLi4vY29uZmlnLnN1YiAmJiBjcCAuLi9jb25maWcuc3ViIC4vICkKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCisgIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgMT4mMjsgZXhpdCAxOyB9CitmaQorYWNfY29uZmlnX2d1ZXNzPSRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcworYWNfY29uZmlnX3N1Yj0kYWNfYXV4X2Rpci9jb25maWcuc3ViCithY19jb25maWd1cmU9JGFjX2F1eF9kaXIvY29uZmlndXJlICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKworCitpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLmd1ZXNzIHx8IHRlc3QgLWYgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIDsgdGhlbgorCQorIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgoraWYgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuICRhY19jb25maWdfc3ViIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgwNzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CisKK2hvc3RfYWxpYXM9JGhvc3QKK2Nhc2UgIiRob3N0X2FsaWFzIiBpbgorTk9ORSkKKyAgY2FzZSAkbm9ub3B0IGluCisgIE5PTkUpCisgICAgaWYgaG9zdF9hbGlhcz1gJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19ndWVzc2A7IHRoZW4gOgorICAgIGVsc2UgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGd1ZXNzIGhvc3QgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpIDs7CisgICopIGhvc3RfYWxpYXM9JG5vbm9wdCA7OworICBlc2FjIDs7Citlc2FjCisKK2hvc3Q9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfc3ViICRob3N0X2FsaWFzYAoraG9zdF9jcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAoraG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCitlY2hvICIkYWNfdCIiJGhvc3QiIDE+JjYKKworCXN5c3RlbV9uYW1lPSIkaG9zdF9vcyIKK2Vsc2UKKwlzeXN0ZW1fbmFtZT0iYCh1bmFtZSAtcyAtcikgMj4vZGV2L251bGxgIgorCWlmIHRlc3QgLXogIiRzeXN0ZW1fbmFtZSIgOyB0aGVuCisJCXN5c3RlbV9uYW1lPSJgKGhvc3RuYW1lKSAyPi9kZXYvbnVsbGAiCisJZmkKK2ZpCit0ZXN0IC1uICIkc3lzdGVtX25hbWUiICYmIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFNZU1RFTV9OQU1FICIkc3lzdGVtX25hbWUiCitFT0YKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3N5c3RlbV9uYW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2ZfY3Zfc3lzdGVtX25hbWU9IiRzeXN0ZW1fbmFtZSIKK2ZpCisKKwordGVzdCAteiAiJHN5c3RlbV9uYW1lIiAmJiBzeXN0ZW1fbmFtZT0iJGNmX2N2X3N5c3RlbV9uYW1lIgordGVzdCAtbiAiJGNmX2N2X3N5c3RlbV9uYW1lIiAmJiBlY2hvICIkYWNfdCIiQ29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSIgMT4mNgorCitpZiB0ZXN0ICIuJHN5c3RlbV9uYW1lIiAhPSAiLiRjZl9jdl9zeXN0ZW1fbmFtZSIgOyB0aGVuCisJZWNobyAiJGFjX3QiIkNhY2hlZCBzeXN0ZW0gbmFtZSAoJHN5c3RlbV9uYW1lKSBkb2VzIG5vdCBhZ3JlZSB3aXRoIGFjdHVhbCAoJGNmX2N2X3N5c3RlbV9uYW1lKSIgMT4mNgorCXsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogIlBsZWFzZSByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCB0cnkgYWdhaW4uIiIgMT4mMjsgZXhpdCAxOyB9CitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjg1NTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1CitzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3RtYWtlIDw8XEVPRgorYWxsOgorCUBlY2hvICdhY19tYWtldGVtcD0iJHtNQUtFfSInCitFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorZXZhbCBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0bWFrZSAyPi9kZXYvbnVsbCB8IGdyZXAgdGVtcD1gCitpZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcworZWxzZQorICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0bWFrZQorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfbWFrZV8nJHthY19tYWtlfV9zZXRgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgU0VUX01BS0U9CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjg4NDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX0NDPSJnY2MiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTE0OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgaWYgdGVzdCAiJGFjX2Rpci8kYWNfd29yZCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisJY29udGludWUKKyAgICAgIGZpCisgICAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAtZ3QgMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIHNldCBkdW1teSAiJGFjX2Rpci8kYWNfd29yZCIgIiRAIgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0iJGFjX2N2X3Byb2dfQ0MiCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICBjYXNlICJgdW5hbWUgLXNgIiBpbgorICAgICp3aW4zMiogfCAqV0lOMzIqKQorICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2w7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTY1OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfQ0M9ImNsIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZmkKK2ZpCitDQz0iJGFjX2N2X3Byb2dfQ0MiCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorIDs7CisgICAgZXNhYworICBmaQorICB0ZXN0IC16ICIkQ0MiICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo5OTc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CisKK2FjX2V4dD1jCisjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDwgRU9GCisKKyNsaW5lIDEwMDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCittYWluKCl7cmV0dXJuKDApO30KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMDEzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY193b3Jrcz15ZXMKKyAgIyBJZiB3ZSBjYW4ndCBydW4gYSB0cml2aWFsIHByb2dyYW0sIHdlIGFyZSBwcm9iYWJseSB1c2luZyBhIGNyb3NzIGNvbXBpbGVyLgorICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhY19jdl9wcm9nX2NjX2Nyb3NzPW5vCisgIGVsc2UKKyAgICBhY19jdl9wcm9nX2NjX2Nyb3NzPXllcworICBmaQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfcHJvZ19jY193b3Jrcz1ubworZmkKK3JtIC1mciBjb25mdGVzdCoKK2FjX2V4dD1jCisjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY193b3JrcyIgMT4mNgoraWYgdGVzdCAkYWNfY3ZfcHJvZ19jY193b3JrcyA9IG5vOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CitmaQorZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEwMzk6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKK2VjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19jcm9zcyIgMT4mNgorY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMDQ0OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19nY2MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisjaWZkZWYgX19HTlVDX18KKyAgeWVzOworI2VuZGlmCitFT0YKK2lmIHsgYWNfdHJ5PScke0NDLWNjfSAtRSBjb25mdGVzdC5jJzsgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMDUzOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfY3ZfcHJvZ19nY2M9eWVzCitlbHNlCisgIGFjX2N2X3Byb2dfZ2NjPW5vCitmaQorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2djYyIgMT4mNgorCitpZiB0ZXN0ICRhY19jdl9wcm9nX2djYyA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCisKK2FjX3Rlc3RfQ0ZMQUdTPSIke0NGTEFHUytzZXR9IgorYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitDRkxBR1M9CitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7Q0MtY2N9IGFjY2VwdHMgLWciIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEwNzI6IGNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0cyAtZyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19jY19nJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgZWNobyAndm9pZCBmKCl7fScgPiBjb25mdGVzdC5jCitpZiB0ZXN0IC16ICJgJHtDQy1jY30gLWcgLWMgY29uZnRlc3QuYyAyPiYxYCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBhY19jdl9wcm9nX2NjX2c9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2NjX2ciIDE+JjYKK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTA0OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DUFAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAgICMgVGhpcyBtdXN0IGJlIGluIGRvdWJsZSBxdW90ZXMsIG5vdCBzaW5nbGUgcXVvdGVzLCBiZWNhdXNlIENQUCBtYXkgZ2V0CisgICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgTWFrZWZpbGUgYW5kICIke0NDLWNjfSIgd2lsbCBjb25mdXNlIG1ha2UuCisgIENQUD0iJHtDQy1jY30gLUUiCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDExMTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorU3ludGF4IEVycm9yCitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjExMjU6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBDUFA9IiR7Q0MtY2N9IC1FIC10cmFkaXRpb25hbC1jcHAiCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDExMzYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorU3ludGF4IEVycm9yCitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjExNDI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBDUFA9IiR7Q0MtY2N9IC1ub2xvZ28gLUUiCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDExNTMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorU3ludGF4IEVycm9yCitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjExNTk6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBDUFA9L2xpYi9jcHAKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCitmaQorICBDUFA9IiRhY19jdl9wcm9nX0NQUCIKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCitmaQorZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKworZm9yIGFjX3Byb2cgaW4gbWF3ayBnYXdrIG5hd2sgYXdrCitkbworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTE4ODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0FXSycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZmkKK2ZpCitBV0s9IiRhY19jdl9wcm9nX0FXSyIKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGVjaG8gIiRhY190IiIkQVdLIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKwordGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworCitDQ19HX09QVD0iLWciCQkJCQkKK0NDX1NIQVJFRF9PUFRTPXVua25vd24JCQkKK0NQUEZMQUdTPSIkQ1BQRkxBR1MiCQkJCitERlRfREVQX1NVRkZJWD0iIgkJCQkKK0RGVF9PQkpfU1VCRElSPWBwd2R8c2VkIC1lJ3M6LiovOjonYAkKK0RGVF9VUFJfTU9ERUw9Ik5PUk1BTCIJCQkKK0xEPSJsZCIJCQkJCQkJCitMREZMQUdTX1NIQVJFRD0iIgkJCQkKK0xERkxBR1NfU1RBVElDPSIiCQkJCQorTERfTU9ERUw9IiIJCQkJCQkKK0xEX1NIQVJFRF9PUFRTPSIiCQkJCQorTElCVE9PTD0iIgkJCQkJCQorTElCX0NMRUFOPSIiCQkJCQkKK0xJQl9DT01QSUxFPSIiCQkJCQkKK0xJQl9MSU5LPScke0NDfScJCQkJCitMSU5LX1RFU1RTPSIiCQkJCQkKK0xJTlQ9bGludAkJCQkJCQorTElOVF9PUFRTPSIiCQkJCQkKK0xPQ0FMX0xERkxBR1M9IiIJCQkJCitNQVRIX0xJQj0iLWxtIgkJCQkJCitQVEhSRUFEPSItbG0iCQkJCQkKK1RFU1RfQVJHUz0iIgkJCQkJCitURVNUX0RFUFM9IiIJCQkJCQorVEVTVF9MSUJTPSIiCQkJCQkKK1RJTkZPX0FSR1M9JyQoTElCU19DVVJTRVMpJwkJCitjZl9jdl9hYmlfdmVyc2lvbj0iIgkJCQorY2ZfY3ZfcmVsX3ZlcnNpb249IiIJCQkKKworY2ZfY3Zfc2NyZWVuPWN1cnNlcworY2ZfY3ZfbGlidHlwZT0KKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEN5Z3dpbiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTI1MDogY2hlY2tpbmcgZm9yIEN5Z3dpbiBlbnZpcm9ubWVudCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY3lnd2luJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI1NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCisjaWZuZGVmIF9fQ1lHV0lOX18KKyNkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KKyNlbmRpZgorcmV0dXJuIF9fQ1lHV0lOX187Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI2NjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2N5Z3dpbj15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfY3lnd2luPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfY3lnd2luIiAxPiY2CitDWUdXSU49Cit0ZXN0ICIkYWNfY3ZfY3lnd2luIiA9IHllcyAmJiBDWUdXSU49eWVzCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTI4MzogY2hlY2tpbmcgZm9yIG1pbmd3MzIgZW52aXJvbm1lbnQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X21pbmd3MzInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMjg4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CityZXR1cm4gX19NSU5HVzMyX187Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI5NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X21pbmd3MzI9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X21pbmd3MzI9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9taW5ndzMyIiAxPiY2CitNSU5HVzMyPQordGVzdCAiJGFjX2N2X21pbmd3MzIiID0geWVzICYmIE1JTkdXMzI9eWVzCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMzE0OiBjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2V4ZWV4dCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgIiRDWUdXSU4iID0geWVzIHx8IHRlc3QgIiRNSU5HVzMyIiA9IHllczsgdGhlbgorICBhY19jdl9leGVleHQ9LmV4ZQorZWxzZQorICBybSAtZiBjb25mdGVzdCoKKyAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X2V4ZWV4dD0KKyAgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMzI0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9OyB0aGVuCisgICAgZm9yIGZpbGUgaW4gY29uZnRlc3QuKjsgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouYyB8ICoubyB8ICoub2JqKSA7OworICAgICAgKikgYWNfY3ZfZXhlZXh0PWBlY2hvICRmaWxlIHwgc2VkIC1lIHMvY29uZnRlc3QvL2AgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgIGVsc2UKKyAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYyOyBleGl0IDE7IH0KKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCisgIHRlc3QgeCIke2FjX2N2X2V4ZWV4dH0iID0geCAmJiBhY19jdl9leGVleHQ9bm8KK2ZpCitmaQorCitFWEVFWFQ9IiIKK3Rlc3QgeCIke2FjX2N2X2V4ZWV4dH0iICE9IHhubyAmJiBFWEVFWFQ9JHthY19jdl9leGVleHR9CitlY2hvICIkYWNfdCIiJHthY19jdl9leGVleHR9IiAxPiY2CithY19leGVleHQ9JEVYRUVYVAorCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igb2JqZWN0IHN1ZmZpeCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTM0NTogY2hlY2tpbmcgZm9yIG9iamVjdCBzdWZmaXgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X29iamV4dCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIHJtIC1mIGNvbmZ0ZXN0KgorZWNobyAnaW50IGkgPSAxOycgPiBjb25mdGVzdC4kYWNfZXh0CitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzNTE6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuKjsgZG8KKyAgICBjYXNlICRhY19maWxlIGluCisgICAgKi5jKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZWNobyAkYWNfZmlsZSB8IHNlZCAtZSBzL2NvbmZ0ZXN0Li8vYCA7OworICAgIGVzYWMKKyAgZG9uZQorZWxzZQorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW07IGNvbXBpbGVyIGRvZXMgbm90IHdvcmsiIDE+JjI7IGV4aXQgMTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9vYmpleHQiIDE+JjYKK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JGFjX2N2X29iamV4dAorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICR7Q0MtY2N9IG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMzcxOiBjaGVja2luZyBmb3IgJHtDQy1jY30gb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X2Fuc2lfY2MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2NmX2N2X2Fuc2lfY2M9bm8KK2NmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKKyMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgorIyBBSVgJCQktcWxhbmdsdmw9YW5zaQorIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCisjIEhQLVVYCQkJLUFhIC1EX0hQVVhfU09VUkNFCisjIFNWUjQJCQktWGMKKyMgVW5peFdhcmUgMS4yCQkoY2Fubm90IHVzZSAtWGMsIHNpbmNlIEFOU0kvUE9TSVggY2xhc2hlcykKK2ZvciBjZl9hcmcgaW4gIi1EQ0NfSEFTX1BST1RPUyIgXAorCSIiIFwKKwktcWxhbmdsdmw9YW5zaSBcCisJLXN0ZDEgXAorCS1BZSBcCisJIi1BYSAtRF9IUFVYX1NPVVJDRSIgXAorCS1YYworZG8KKwkKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gJGNmX2FyZworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKwkKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKwkKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwkKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisKKworCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTQ2NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZm5kZWYgQ0NfSEFTX1BST1RPUworI2lmICFkZWZpbmVkKF9fU1REQ19fKSB8fCAoX19TVERDX18gIT0gMSkKK2Nob2tlIG1lCisjZW5kaWYKKyNlbmRpZgorCitpbnQgbWFpbigpIHsKKworCWludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworCXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9OworCXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE0ODM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9hbnNpX2NjPSIkY2ZfYXJnIjsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QqCitkb25lCitDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKK0NQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9hbnNpX2NjIiAxPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9hbnNpX2NjIiAhPSAibm8iOyB0aGVuCitpZiB0ZXN0ICIuJGNmX2N2X2Fuc2lfY2MiICE9ICIuLURDQ19IQVNfUFJPVE9TIjsgdGhlbgorCQorY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkY2ZfY3ZfYW5zaV9jYworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKwkKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKwkKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwkKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisKKworCitlbHNlCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIENDX0hBU19QUk9UT1MgMQorRU9GCisKK2ZpCitmaQorCisKK2lmIHRlc3QgIiRjZl9jdl9hbnNpX2NjIiA9ICJubyI7IHRoZW4KKwl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IFlvdXIgY29tcGlsZXIgZG9lcyBub3QgYXBwZWFyIHRvIHJlY29nbml6ZSBwcm90b3R5cGVzLgorWW91IGhhdmUgdGhlIGZvbGxvd2luZyBjaG9pY2VzOgorCWEuIGFkanVzdCB5b3VyIGNvbXBpbGVyIG9wdGlvbnMKKwliLiBnZXQgYW4gdXAtdG8tZGF0ZSBjb21waWxlcgorCWMuIHVzZSBhIHdyYXBwZXIgc3VjaCBhcyB1bnByb3RvIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKKworaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KK2NhdCA+IGNvbmZ0ZXN0LmkgPDxFT0YKKyNpZm5kZWYgR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfTk9SRVRVUk4KKyNkZWZpbmUgR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfVU5VU0VECisjZGVmaW5lIEdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCitFT0YKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJZWNobyAiY2hlY2tpbmcgZm9yICRDQyBfX2F0dHJpYnV0ZV9fIGRpcmVjdGl2ZXMiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNjEwOiBjaGVja2luZyBmb3IgJENDIF9fYXR0cmlidXRlX18gZGlyZWN0aXZlcyIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxNjEyICIke2FzX21lLWNvbmZpZ3VyZX0iCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlICJjb25mdGVzdC5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmkiCisjaWYJR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIC8qbm90aGluZyovCisjZW5kaWYKKyNpZglHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHNjYW5mLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIC8qbm90aGluZyovCisjZW5kaWYKK2V4dGVybiB2b2lkIHdvdyhjaGFyICosLi4uKSBHQ0NfU0NBTkZMSUtFKDEsMik7CitleHRlcm4gdm9pZCBvb3BzKGNoYXIgKiwuLi4pIEdDQ19QUklOVEZMSUtFKDEsMikgR0NDX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgZm9vKHZvaWQpIEdDQ19OT1JFVFVSTjsKK2ludCBtYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXSBHQ0NfVU5VU0VEKSB7IHJldHVybiAwOyB9CitFT0YKKwlmb3IgY2ZfYXR0cmlidXRlIGluIHNjYW5mIHByaW50ZiB1bnVzZWQgbm9yZXR1cm4KKwlkbworCQkKK2NmX0FUVFJJQlVURT1gZWNobyAiJGNmX2F0dHJpYnV0ZSIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwkJY2ZfZGlyZWN0aXZlPSJfX2F0dHJpYnV0ZV9fKCgkY2ZfYXR0cmlidXRlKSkiCisJCWVjaG8gImNoZWNraW5nIGZvciAkQ0MgJGNmX2RpcmVjdGl2ZSIgMT4mNQorCQljYXNlICRjZl9hdHRyaWJ1dGUgaW4KKwkJc2NhbmZ8cHJpbnRmKQorCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgMQorRU9GCisJCQk7OworCQkqKQorCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgJGNmX2RpcmVjdGl2ZQorRU9GCisJCQk7OworCQllc2FjCisJCWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTY1MDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhY190IiIuLi4gJGNmX2F0dHJpYnV0ZSIgMT4mNgorCQkJY2F0IGNvbmZ0ZXN0LmggPj5jb25mZGVmcy5oCisJCWZpCisJZG9uZQorZWxzZQorCWZncmVwIGRlZmluZSBjb25mdGVzdC5pID4+Y29uZmRlZnMuaAorZmkKK3JtIC1yZiBjb25mdGVzdCoKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgJENDIC1VIGFuZCAtRCBvcHRpb25zIHdvcmsgdG9nZXRoZXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE2NjM6IGNoZWNraW5nIGlmICRDQyAtVSBhbmQgLUQgb3B0aW9ucyB3b3JrIHRvZ2V0aGVyIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9jY191X2Rfb3B0aW9ucycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlDUFBGTEFHUz0iLVVVX0RfT1BUSU9OUyAtRFVfRF9PUFRJT05TIC1ERF9VX09QVElPTlMgLVVEX1VfT1BUSU9OUyIKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxNjcxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKyNpZm5kZWYgVV9EX09QVElPTlMKK21ha2UgYW4gdW5kZWZpbmVkLWVycm9yCisjZW5kaWYKKyNpZmRlZiAgRF9VX09QVElPTlMKK21ha2UgYSBkZWZpbmVkLWVycm9yCisjZW5kaWYKKwkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNjg1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIAorCWNmX2N2X2NjX3VfZF9vcHRpb25zPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2NjX3VfZF9vcHRpb25zIiAxPiY2CisKKworCisKKworY2ZfWE9QRU5fU09VUkNFPTUwMAorY2ZfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorCitjYXNlICRob3N0X29zIGluICModmkKK2FpeFs0NV0qKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9BTExfU09VUkNFIgorCTs7CitmcmVlYnNkKikgIyh2aQorCSMgNS54IGhlYWRlcnMgYXNzb2NpYXRlCisJIwlfWE9QRU5fU09VUkNFPTYwMCB3aXRoIF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCisJIwlfWE9QRU5fU09VUkNFPTUwMCB3aXRoIF9QT1NJWF9DX1NPVVJDRT0xOTk1MDZMCisJY2ZfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCWNmX1hPUEVOX1NPVVJDRT02MDAKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0JTRF9UWVBFUyAtRF9fQlNEX1ZJU0lCTEUgLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIC1EX1hPUEVOX1NPVVJDRT0kY2ZfWE9QRU5fU09VUkNFIgorCTs7CitocHV4KikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfSFBVWF9TT1VSQ0UiCisJOzsKK2lyaXhbNTZdLiopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1NHSV9TT1VSQ0UiCisJOzsKK2xpbnV4KnxnbnUqfGsqYnNkKi1nbnUpICModmkKKwkKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNzMxOiBjaGVja2luZyBpZiB3ZSBtdXN0IGRlZmluZSBfR05VX1NPVVJDRSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfZ251X3NvdXJjZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTczNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQgbWFpbigpIHsKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNzQ3OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfZ251X3NvdXJjZT1ubworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKKwkgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTc1NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE3Njc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9nbnVfc291cmNlPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2dudV9zb3VyY2U9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2dudV9zb3VyY2UiIDE+JjYKK3Rlc3QgIiRjZl9jdl9nbnVfc291cmNlIiA9IHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0dOVV9TT1VSQ0UiCisKKwk7OworbWlyYnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIG9yIF9QT1NJWF9TT1VSQ0UgYnJlYWtzIDxhcnBhL2luZXQuaD4KKwk7OworbmV0YnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBJUHY2IGZvciBseW54IG9uIE5ldEJTRCAxLjYsIGJyZWFrcyB4dGVybSwgaXMgbm90IG5lZWRlZCBmb3IgbmN1cnNlc3cKKwk7Oworb3BlbmJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgeHRlcm0gb24gT3BlbkJTRCAyLjgsIGlzIG5vdCBuZWVkZWQgZm9yIG5jdXJzZXN3CisJOzsKK29zZls0NV0qKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9PU0ZfU09VUkNFIgorCTs7CitudG8tcW54KikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUU5YX1NPVVJDRSIKKwk7Oworc2NvKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBMeW54IG9uIFNDTyBVbml4IC8gT3BlblNlcnZlcgorCTs7Citzb2xhcmlzKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfX0VYVEVOU0lPTlNfXyIKKwk7OworKikKKwllY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE4MTE6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1hPUEVOX1NPVVJDRSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfeG9wZW5fc291cmNlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTgxNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQgbWFpbigpIHsKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxODI3OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfeG9wZW5fc291cmNlPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwkgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTgzNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE4NDc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl94b3Blbl9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfeG9wZW5fc291cmNlPSRjZl9YT1BFTl9TT1VSQ0UKK2ZpCitybSAtZiBjb25mdGVzdCoKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisJCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfeG9wZW5fc291cmNlIiAxPiY2CisJaWYgdGVzdCAiJGNmX2N2X3hvcGVuX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisJCQorIyByZW1vdmUgX1hPUEVOX1NPVVJDRSBzeW1ib2wgZnJvbSAkQ0ZMQUdTCitDRkxBR1M9YGVjaG8gIiRDRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fWE9QRU5fU09VUkNFXCg9W14gCV0qXClcPyQvL2cnYAorCisJCQorIyByZW1vdmUgX1hPUEVOX1NPVVJDRSBzeW1ib2wgZnJvbSAkQ1BQRkxBR1MKK0NQUEZMQUdTPWBlY2hvICIkQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fWE9QRU5fU09VUkNFXCg9W14gCV0qXClcPyQvL2cnYAorCisJCXRlc3QgIiRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPSB5ZXMgJiYgXAorCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtVV9YT1BFTl9TT1VSQ0UiCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9jdl94b3Blbl9zb3VyY2UiCisJZmkKKwkKK2NmX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRQorCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworCisjIHJlbW92ZSBfUE9TSVhfQ19TT1VSQ0Ugc3ltYm9sIGZyb20gJGNmX3NhdmVfQ0ZMQUdTCitjZl90cmltX0NGTEFHUz1gZWNobyAiJGNmX3NhdmVfQ0ZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF1fUE9TSVhfQ19TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fUE9TSVhfQ19TT1VSQ0VcKD1bXiAJXSpcKVw/JC8vZydgCisKKworIyByZW1vdmUgX1BPU0lYX0NfU09VUkNFIHN5bWJvbCBmcm9tICRjZl9zYXZlX0NQUEZMQUdTCitjZl90cmltX0NQUEZMQUdTPWBlY2hvICIkY2Zfc2F2ZV9DUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdX1BPU0lYX0NfU09VUkNFXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdX1BPU0lYX0NfU09VUkNFXCg9W14gCV0qXClcPyQvL2cnYAorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxOTAyOiBjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfcG9zaXhfY19zb3VyY2UnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwkKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxOTA4OiB0ZXN0aW5nIGlmIHRoZSBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkIGdvIG5vIGZ1cnRoZXIgLi4uIiAxPiY1CisKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxOTExICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBtYWluKCkgeworCisjaWZuZGVmIF9QT1NJWF9DX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTkyMTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3Bvc2l4X2Nfc291cmNlPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3dhbnRfcG9zaXhfc291cmNlPW5vCisJIGNhc2UgLiRjZl9QT1NJWF9DX1NPVVJDRSBpbiAjKHZpCisJIC5bMTJdPz8qKSAjKHZpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCTs7CisJIC4yKSAjKHZpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSAuKikKKwkJY2Zfd2FudF9wb3NpeF9zb3VyY2U9eWVzCisJCTs7CisJIGVzYWMKKwkgaWYgdGVzdCAiJGNmX3dhbnRfcG9zaXhfc291cmNlIiA9IHllcyA7IHRoZW4KKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTk0MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIF9QT1NJWF9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE5NTM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9wb3NpeF9jX3NvdXJjZT0iJGNmX2N2X3Bvc2l4X2Nfc291cmNlIC1EX1BPU0lYX1NPVVJDRSIKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkgZmkKKwkgCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTk2NDogdGVzdGluZyBpZmRlZiBmcm9tIHZhbHVlICRjZl9QT1NJWF9DX1NPVVJDRSAuLi4iIDE+JjUKKworCSBDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKKwkgCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTk2OTogdGVzdGluZyBpZiB0aGUgc2Vjb25kIGNvbXBpbGUgZG9lcyBub3QgbGVhdmUgb3VyIGRlZmluaXRpb24gaW50YWN0IGVycm9yIC4uLiIgMT4mNQorCisJIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE5NzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50IG1haW4oKSB7CisKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxOTgyOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwkgQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKwkKK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgMT4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiICE9IG5vIDsgdGhlbgorCUNGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCUNQUEZMQUdTPSIkY2ZfdHJpbV9DUFBGTEFHUyIKKwlpZiB0ZXN0ICIkY2ZfY3ZfY2NfdV9kX29wdGlvbnMiID0geWVzIDsgdGhlbgorCQljZl90ZW1wX3Bvc2l4X2Nfc291cmNlPWBlY2hvICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiIHwgXAorCQkJCXNlZCAtZSAncy8tRC8tVS9nJyAtZSAncy89W14gCV0qLy9nJ2AKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfdGVtcF9wb3NpeF9jX3NvdXJjZSIKKwlmaQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorZmkKKworCisJOzsKK2VzYWMKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29uc3QiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIwMTc6IGNoZWNraW5nIGZvciB3b3JraW5nIGNvbnN0IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2NvbnN0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjAyMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCisvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLwordHlwZWRlZiBpbnQgY2hhcnNldFsyXTsgY29uc3QgY2hhcnNldCB4OworLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KK2NoYXIgY29uc3QgKmNvbnN0ICpjY3A7CitjaGFyICoqcDsKKy8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCitzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CitzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKy8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKyAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluIGFuIGFybQorICAgb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24gKi8KK2NvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKK2NjcCA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKy8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisrK2NjcDsKK3AgPSAoY2hhcioqKSBjY3A7CitjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKK3sgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgKnQ7CisgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgKnQrKyA9IDA7Cit9Cit7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICBpbnQgeFtdID0gezI1LCAxN307CisgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICsrZm9vOworfQoreyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICBpcHRyIHAgPSAwOworICArK3A7Cit9Cit7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKKyAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7Cit9Cit7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICBjb25zdCBpbnQgZm9vID0gMTA7Cit9CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDcxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfY19jb25zdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfY19jb25zdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9jX2NvbnN0IiAxPiY2CitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIGNvbnN0IAorRU9GCisKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNpZ25hbCBnbG9iYWwgZGF0YXR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIwOTM6IGNoZWNraW5nIGZvciBzaWduYWwgZ2xvYmFsIGRhdGF0eXBlIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9zaWdfYXRvbWljX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwlmb3IgY2ZfdHlwZSBpbiBcCisJCSJ2b2xhdGlsZSBzaWdfYXRvbWljX3QiIFwKKwkJInNpZ19hdG9taWNfdCIgXAorCQkiaW50IgorCWRvCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjEwNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRlcm4gJGNmX3R5cGUgeDsKKyRjZl90eXBlIHg7CitzdGF0aWMgdm9pZCBoYW5kbGVyKGludCBzaWcpCit7CisJeCA9IDU7Cit9CitpbnQgbWFpbigpIHsKK3NpZ25hbChTSUdJTlQsIGhhbmRsZXIpOworCQkgeCA9IDEKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTIyOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3Zfc2lnX2F0b21pY190PSRjZl90eXBlCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3NpZ19hdG9taWNfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQl0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBicmVhaworCWRvbmUKKwkKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3Zfc2lnX2F0b21pY190IiAxPiY2Cit0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBTSUdfQVRPTUlDX1QgJGNmX2N2X3NpZ19hdG9taWNfdAorRU9GCisKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHNlZSBsb25nIGNvbXBpbGluZyBtZXNzYWdlcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjE0NjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gc2VlIGxvbmcgY29tcGlsaW5nIG1lc3NhZ2VzIiA+JjUKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVjaG8gb3IgLS1kaXNhYmxlLWVjaG8gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWNobytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZWNobyIKKyAgdGVzdCAiJGVuYWJsZXZhbCIgIT0gbm8gJiYgZW5hYmxldmFsPXllcworICBpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSAieWVzIiA7IHRoZW4KKyAgICAKKyAgICBFQ0hPX0xUPSctLXNpbGVudCcKKyAgICBFQ0hPX0xEPSdAZWNobyBsaW5raW5nICRAOycKKyAgICBSVUxFX0NDPScJQGVjaG8gY29tcGlsaW5nICQ8JworICAgIFNIT1dfQ0M9JwlAZWNobyBjb21waWxpbmcgJEAnCisgICAgRUNIT19DQz0nQCcKKyAKKyAgZWxzZQorICAgIAorICAgIEVDSE9fTFQ9JycKKyAgICBFQ0hPX0xEPScnCisgICAgUlVMRV9DQz0nIyBjb21waWxpbmcnCisgICAgU0hPV19DQz0nIyBjb21waWxpbmcnCisgICAgRUNIT19DQz0nJworCisgIGZpCitlbHNlCisgIGVuYWJsZXZhbD15ZXMgCisgIAorICAgIEVDSE9fTFQ9JycKKyAgICBFQ0hPX0xEPScnCisgICAgUlVMRV9DQz0nIyBjb21waWxpbmcnCisgICAgU0hPV19DQz0nIyBjb21waWxpbmcnCisgICAgRUNIT19DQz0nJworCisgIAorZmkKKworZWNobyAiJGFjX3QiIiRlbmFibGV2YWwiIDE+JjYKKworCisKKworCisKKworCitHQ0NfVkVSU0lPTj1ub25lCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwllY2hvICRhY19uICJjaGVja2luZyB2ZXJzaW9uIG9mICRDQyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjE5MzogY2hlY2tpbmcgdmVyc2lvbiBvZiAkQ0MiID4mNQorCUdDQ19WRVJTSU9OPSJgJHtDQ30gLS12ZXJzaW9ufCBzZWQgLWUgJzIsJGQnIC1lICdzL14uKihHQ0MpIC8vJyAtZSAncy9eW14wLTkuXSovLycgLWUgJ3MvW14wLTkuXS4qLy8nYCIKKwl0ZXN0IC16ICIkR0NDX1ZFUlNJT04iICYmIEdDQ19WRVJTSU9OPXVua25vd24KKwllY2hvICIkYWNfdCIiJEdDQ19WRVJTSU9OIiAxPiY2CitmaQorCisKK2lmICggdGVzdCAiJEdDQyIgPSB5ZXMgfHwgdGVzdCAiJEdYWCIgPSB5ZXMgKQordGhlbgorZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdHVybiBvbiBnY2Mgd2FybmluZ3MiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIyMDM6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHR1cm4gb24gZ2NjIHdhcm5pbmdzIiA+JjUKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdhcm5pbmdzIG9yIC0tZGlzYWJsZS13YXJuaW5ncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93YXJuaW5ncytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd2FybmluZ3MiCisgIHRlc3QgIiRlbmFibGV2YWwiICE9IHllcyAmJiBlbmFibGV2YWw9bm8KKyAgaWYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gIm5vIiA7IHRoZW4KKyAgICB3aXRoX3dhcm5pbmdzPXllcyAKKyAgZWxzZQorICAgIHdpdGhfd2FybmluZ3M9bm8KKyAgZmkKK2Vsc2UKKyAgZW5hYmxldmFsPW5vIAorICB3aXRoX3dhcm5pbmdzPW5vCisgIAorZmkKKworZWNobyAiJGFjX3QiIiR3aXRoX3dhcm5pbmdzIiAxPiY2CitpZiB0ZXN0ICIkd2l0aF93YXJuaW5ncyIgPSAieWVzIgordGhlbgorCQorCisKK0lOVEVMX0NPTVBJTEVSPW5vCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4KKwlsaW51eCp8Z251KikKKwkJZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgQyBjb21waWxlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjIzMjogY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgQyBjb21waWxlciIgPiY1CisJCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCQlDRkxBR1M9IiRDRkxBR1MgLW5vLWdjYyIKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjIzNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorI2Vsc2UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjI0ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIElOVEVMX0NPTVBJTEVSPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtd2UxNDcgLW5vLWdjYyIKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCWVjaG8gIiRhY190IiIkSU5URUxfQ09NUElMRVIiIDE+JjYKKwkJOzsKKwllc2FjCitmaQorCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDIyNjYgIiR7YXNfbWUtY29uZmlndXJlfSIKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsgcmV0dXJuIChhcmd2W2FyZ2MtMV0gPT0gMCkgOyB9CitFT0YKKworaWYgdGVzdCAiJElOVEVMX0NPTVBJTEVSIiA9IHllcwordGhlbgorIyBUaGUgIi13ZFhYWCIgb3B0aW9ucyBzdXBwcmVzcyB3YXJuaW5nczoKKyMgcmVtYXJrICMxNDE5OiBleHRlcm5hbCBkZWNsYXJhdGlvbiBpbiBwcmltYXJ5IHNvdXJjZSBmaWxlCisjIHJlbWFyayAjMTY4MjogaW1wbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjgzOiBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODQ6IGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIHNhbWUtc2l6ZWQgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTkzOiB6ZXJvIHVzZWQgZm9yIHVuZGVmaW5lZCBwcmVwcm9jZXNzaW5nIGlkZW50aWZpZXIKKyMgcmVtYXJrICM1OTM6IHZhcmlhYmxlICJjdXJzX3NiX2xlZnRfYXJyb3ciIHdhcyBzZXQgYnV0IG5ldmVyIHVzZWQKKyMgcmVtYXJrICM4MTA6IGNvbnZlcnNpb24gZnJvbSAiaW50IiB0byAiRGltZW5zaW9uPXt1bnNpZ25lZCBzaG9ydH0iIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKyMgcmVtYXJrICM4Njk6IHBhcmFtZXRlciAidHciIHdhcyBuZXZlciByZWZlcmVuY2VkCisjIHJlbWFyayAjOTgxOiBvcGVyYW5kcyBhcmUgZXZhbHVhdGVkIGluIHVuc3BlY2lmaWVkIG9yZGVyCisjIHdhcm5pbmcgIzI2OTogaW52YWxpZCBmb3JtYXQgc3RyaW5nIGNvbnZlcnNpb24KKworCWVjaG8gImNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjI4NTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMiID4mNQorCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUVYVFJBX0NGTEFHUz0iLVdhbGwiCisJZm9yIGNmX29wdCBpbiBcCisJCXdkMTQxOSBcCisJCXdkMTY4MiBcCisJCXdkMTY4MyBcCisJCXdkMTY4NCBcCisJCXdkMTkzIFwKKwkJd2QyNzkgXAorCQl3ZDU5MyBcCisJCXdkODEwIFwKKwkJd2Q4NjkgXAorCQl3ZDk4MQorCWRvCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTICRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjMwMTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhY190IiIuLi4gLSRjZl9vcHQiIDE+JjYKKwkJCUVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisKK2VsaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKwllY2hvICJjaGVja2luZyBmb3IgJENDIHdhcm5pbmcgb3B0aW9ucyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIzMTE6IGNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zIiA+JjUKKwljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlFWFRSQV9DRkxBR1M9Ii1XIC1XYWxsIgorCWNmX3dhcm5fQ09OU1Q9IiIKKwl0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzICYmIGNmX3dhcm5fQ09OU1Q9Ild3cml0ZS1zdHJpbmdzIgorCWZvciBjZl9vcHQgaW4gXAorCQlXYmFkLWZ1bmN0aW9uLWNhc3QgXAorCQlXY2FzdC1hbGlnbiBcCisJCVdjYXN0LXF1YWwgXAorCQlXaW5saW5lIFwKKwkJV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKwkJV21pc3NpbmctcHJvdG90eXBlcyBcCisJCVduZXN0ZWQtZXh0ZXJucyBcCisJCVdwb2ludGVyLWFyaXRoIFwKKwkJV3NoYWRvdyBcCisJCVdzdHJpY3QtcHJvdG90eXBlcyBcCisJCVd1bmRlZiAkY2Zfd2Fybl9DT05TVCAKKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIzMzA6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYWNfdCIiLi4uIC0kY2Zfb3B0IiAxPiY2CisJCQljYXNlICRjZl9vcHQgaW4gIyh2aQorCQkJV2Nhc3QtcXVhbCkgIyh2aQorCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURYVFNUUklOR0RFRklORVMiCisJCQkJOzsKKwkJCVdpbmxpbmUpICModmkKKwkJCQljYXNlICRHQ0NfVkVSU0lPTiBpbgorCQkJCTMuMyopCisJCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTiIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MjM0MTogdGVzdGluZyBmZWF0dXJlIGlzIGJyb2tlbiBpbiBnY2MgJEdDQ19WRVJTSU9OIC4uLiIgMT4mNQorCisKKwkJCQkJY29udGludWU7OworCQkJCWVzYWMKKwkJCQk7OworCQkJZXNhYworCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCisKK2ZpCitmaQorCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWN1cnNlcy1kaXIgb3IgLS13aXRob3V0LWN1cnNlcy1kaXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2N1cnNlc19kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfY3Vyc2VzX2RpciIKKyAgCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgY2ZfcGF0aF9zeW50YXg9IiRwcmVmaXgiCitlbHNlCisgIGNmX3BhdGhfc3ludGF4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitmaQorCitjYXNlICIuJHdpdGh2YWwiIGluICModmkKKy5cJFwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLlthLXpBLVpdOltcXC9dKikgIyh2aSBPUy8yIEVNWAorICA7OworLlwkeypwcmVmaXh9KikgIyh2aQorICBldmFsIHdpdGh2YWw9IiR3aXRodmFsIgorICBjYXNlICIuJHdpdGh2YWwiIGluICModmkKKyAgLk5PTkUvKikKKyAgICB3aXRodmFsPWBlY2hvICR3aXRodmFsIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICAgIDs7CisgIGVzYWMKKyAgOzsgIyh2aQorLm5vfC5OT05FLyopCisgIHdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgIDs7CisqKQorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiIDE+JjI7IGV4aXQgMTsgfQorICA7OworZXNhYworCisJIGNmX2N2X2N1cnNlc19kaXI9JHdpdGh2YWwKK2Vsc2UKKyAgY2ZfY3ZfY3Vyc2VzX2Rpcj1ubworZmkKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC01bGliIG9yIC0td2l0aG91dC01bGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF81bGliK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoXzVsaWIiCisgIExJQlM9Ii1ML3Vzci81bGliICRMSUJTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci81aW5jbHVkZSIKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5jdXJzZXN3IG9yIC0td2l0aG91dC1uY3Vyc2VzdyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbmN1cnNlc3crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbmN1cnNlc3ciCisgIGNmX2N2X3NjcmVlbj1uY3Vyc2VzdworZWxzZQorICAKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5jdXJzZXMgb3IgLS13aXRob3V0LW5jdXJzZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25jdXJzZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbmN1cnNlcyIKKyAgY2ZfY3Zfc2NyZWVuPW5jdXJzZXMKK2Vsc2UKKyAgCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZGN1cnNlcyBvciAtLXdpdGhvdXQtcGRjdXJzZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BkY3Vyc2VzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3BkY3Vyc2VzIgorICBjZl9jdl9zY3JlZW49cGRjdXJzZXMKK2ZpCisKK2ZpCisKK2ZpCisKKworY2FzZSAkY2ZfY3Zfc2NyZWVuIGluCitjdXJzZXMpCisJCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBleHRyYSBpbmNsdWRlIGRpcmVjdG9yaWVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNDQ1OiBjaGVja2luZyBmb3IgZXh0cmEgaW5jbHVkZSBkaXJlY3RvcmllcyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfY3Vyc2VzX2luY2Rpcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2ZfY3ZfY3Vyc2VzX2luY2Rpcj1ubworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCitocHV4MTAuKikgIyh2aQorCXRlc3QgLWQgL3Vzci9pbmNsdWRlL2N1cnNlc19jb2xyICYmIFwKKwljZl9jdl9jdXJzZXNfaW5jZGlyPSItSS91c3IvaW5jbHVkZS9jdXJzZXNfY29sciIKKwk7Oworc3Vub3MzKnxzdW5vczQqKQorCXRlc3QgLWQgL3Vzci81bGliICYmIFwKKwl0ZXN0IC1kIC91c3IvNWluY2x1ZGUgJiYgXAorCWNmX2N2X2N1cnNlc19pbmNkaXI9Ii1JL3Vzci81aW5jbHVkZSIKKwk7OworZXNhYworCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2N1cnNlc19pbmNkaXIiIDE+JjYKK3Rlc3QgIiRjZl9jdl9jdXJzZXNfaW5jZGlyIiAhPSBubyAmJiBDUFBGTEFHUz0iJGNmX2N2X2N1cnNlc19pbmNkaXIgJENQUEZMQUdTIgorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjQ3MDogY2hlY2tpbmcgaWYgd2UgaGF2ZSBpZGVudGlmaWVkIGN1cnNlcyBoZWFkZXJzIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX2hlYWRlcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2ZfY3ZfbmN1cnNlc19oZWFkZXI9bm9uZQorZm9yIGNmX2hlYWRlciBpbiBcCisJY3Vyc2VzLmggXAorCW5jdXJzZXMuaCBcCisJbmN1cnNlcy9jdXJzZXMuaCBcCisJbmN1cnNlcy9uY3Vyc2VzLmgKK2RvCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyNDgzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2hlYWRlcn0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjQ5MDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9oZWFkZXI7IGJyZWFrCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZG9uZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiAxPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2hlYWRlciIgPSBub25lIDsgdGhlbgorCXsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogTm8gY3Vyc2VzIGhlYWRlci1maWxlcyBmb3VuZCIgMT4mMjsgZXhpdCAxOyB9CitmaQorCisjIGNoZWF0LCB0byBnZXQgdGhlIHJpZ2h0ICNkZWZpbmUncyBmb3IgSEFWRV9OQ1VSU0VTX0gsIGV0Yy4KK2ZvciBhY19oZHIgaW4gJGNmX2N2X25jdXJzZXNfaGVhZGVyCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjUxMzogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI1MTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjI1MjM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2hkciAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjU1MjogY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfdGVybV9oZWFkZXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2Nhc2UgJHtjZl9jdl9uY3Vyc2VzX2hlYWRlcn0gaW4gIyh2aQorKi9uY3Vyc2VzLmh8Ki9uY3Vyc2Vzdy5oKSAjKHZpCisJY2ZfdGVybV9oZWFkZXI9YGVjaG8gIiRjZl9jdl9uY3Vyc2VzX2hlYWRlciIgfCBzZWQgLWUgJ3MlbmN1cnNlc1teLl0qXC5oJCV0ZXJtLmglJ2AKKwk7OworKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI1NjkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CisKK2ludCBtYWluKCkgeworaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjU3OTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIAorCWNmX2N2X3Rlcm1faGVhZGVyPSIkY2ZfdGVzdCIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisJY2ZfY3ZfdGVybV9oZWFkZXI9dW5rbm93bgorCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCXRlc3QgIiRjZl9jdl90ZXJtX2hlYWRlciIgIT0gdW5rbm93biAmJiBicmVhaworZG9uZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3Rlcm1faGVhZGVyIiAxPiY2CisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyB0byBhY2NvbW1vZGF0ZSBzdWJkaXJlY3RvcmllcworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorKnRlcm0uaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy90ZXJtLmgpICModmkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX1RFUk1fSCAxCitFT0YKKworCTs7CituY3Vyc2Vzdy90ZXJtLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU1dfVEVSTV9IIDEKK0VPRgorCisJOzsKK2VzYWMKKworCisJCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNjI4OiBjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX3ZlcnNpb24nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIAorCisJIyBUaGlzIHdpbGwgbm90IHdvcmsgaWYgdGhlIHByZXByb2Nlc3NvciBzcGxpdHMgdGhlIGxpbmUgYWZ0ZXIgdGhlCisJIyBBdXRvY29uZiB0b2tlbi4gIFRoZSAndW5wcm90bycgcHJvZ3JhbSBkb2VzIHRoYXQuCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mNSB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjU0OiBcIiRjZl90cnlcIikgMT4mNTsgKGV2YWwgJGNmX3RyeSkgMj4mNTsgfQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW14iXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorCitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI2NjMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCIkY2ZfdGVtcGZpbGUiLCAidyIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorIyBpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwlmcHJpbnRmKGZwLCAiJXMuJWRcbiIsIE5DVVJTRVNfVkVSU0lPTiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyMgZWxzZQorCWZwcmludGYoZnAsICIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fTkNVUlNFU19ICisJZnByaW50ZihmcCwgIm9sZFxuIik7CisjIGVsc2UKKwltYWtlIGFuIGVycm9yCisjIGVuZGlmCisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuLXJldHVybn0oMCk7Cit9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjY4NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICAKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YGNhdCAkY2ZfdGVtcGZpbGVgCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iIDE+JjYKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID0gbm8gfHwgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKKworCQorCitlY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBoYXZlIGlkZW50aWZpZWQgY3Vyc2VzIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjcxMTogY2hlY2tpbmcgaWYgd2UgaGF2ZSBpZGVudGlmaWVkIGN1cnNlcyBsaWJyYXJpZXMiID4mNQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjcxMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjcyMDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK2VjaG8gIiRhY190IiIkY2ZfcmVzdWx0IiAxPiY2CisKK2lmIHRlc3QgIiRjZl9yZXN1bHQiID0gbm8gOyB0aGVuCitjYXNlICRob3N0X29zIGluICModmkKK2ZyZWVic2QqKSAjKHZpCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sbXl0aW5mbyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjczNjogY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sbXl0aW5mbyIgPiY1CithY19saWJfdmFyPWBlY2hvIG15dGluZm8nXyd0Z290byB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxteXRpbmZvICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI3NDQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB0Z290bygpOworCitpbnQgbWFpbigpIHsKK3Rnb3RvKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNzU1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBMSUJTPSItbG15dGluZm8gJExJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIDs7CitocHV4MTAuKikgIyh2aQorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sY3VyX2NvbHIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI3Nzg6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sY3VyX2NvbHIiID4mNQorYWNfbGliX3Zhcj1gZWNobyBjdXJfY29scidfJ2luaXRzY3IgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sY3VyX2NvbHIgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjc4NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IoKTsKKworaW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNzk3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAKKyAgICAgICAgTElCUz0iLWxjdXJfY29sciAkTElCUyIKKyAgICAgICAgYWNfY3ZfZnVuY19pbml0c2NyPXllcworICAgICAgICAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisKKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbEhjdXJzZXMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI4MjA6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sSGN1cnNlcyIgPiY1CithY19saWJfdmFyPWBlY2hvIEhjdXJzZXMnXydpbml0c2NyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbEhjdXJzZXMgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjgyOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IoKTsKKworaW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODM5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAKKyAgICAgICAgIyBIUCdzIGhlYWRlciB1c2VzIF9fSFBfQ1VSU0VTLCBidXQgdXNlciBjbGFpbXMgX0hQX0NVUlNFUy4KKyAgICAgICAgTElCUz0iLWxIY3Vyc2VzICRMSUJTIgorICAgICAgICBDUFBGTEFHUz0iLURfX0hQX0NVUlNFUyAtRF9IUF9DVVJTRVMgJENQUEZMQUdTIgorICAgICAgICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCisgICAgICAgIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2ZpCisKKyAgICA7OworbGludXgqKSAjIFN1c2UgTGludXggZG9lcyBub3QgZm9sbG93IC91c3IvbGliIGNvbnZlbnRpb24KKyAgICAKK2lmIHRlc3QgLW4gIi9saWIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAvbGliCisgIGRvCisgICAgaWYgdGVzdCAkY2ZfYWRkX2xpYmRpciA9IC91c3IvbGliIDsgdGhlbgorICAgICAgOgorICAgIGVsaWYgdGVzdCAtZCAkY2ZfYWRkX2xpYmRpcgorICAgIHRoZW4KKyAgICAgIGNmX2hhdmVfbGliZGlyPW5vCisgICAgICBpZiB0ZXN0IC1uICIkTERGTEFHUyRMSUJTIiA7IHRoZW4KKyAgICAgICAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworICAgICAgICBmb3IgY2ZfdGVzdF9saWJkaXIgaW4gJExERkxBR1MgJExJQlMgOyBkbworICAgICAgICAgIGlmIHRlc3QgIi4kY2ZfdGVzdF9saWJkaXIiID0gIi4tTCRjZl9hZGRfbGliZGlyIiA7IHRoZW4KKyAgICAgICAgICAgIGNmX2hhdmVfbGliZGlyPXllczsgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNmX2hhdmVfbGliZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjI4ODg6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCAuLi4iIDE+JjUKKworCisgICAgICAgIExERkxBR1M9Ii1MJGNmX2FkZF9saWJkaXIgJExERkxBR1MiCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKK2ZpCisKKyAgICA7Oworc3Vub3MzKnxzdW5vczQqKQorICAgIGlmIHRlc3QgLWQgL3Vzci81bGliIDsgdGhlbgorICAgICAgCitpZiB0ZXN0IC1uICIvdXNyLzVsaWIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAvdXNyLzVsaWIKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MjkyMDogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIC4uLiIgMT4mNQorCisKKyAgICAgICAgTERGTEFHUz0iLUwkY2ZfYWRkX2xpYmRpciAkTERGTEFHUyIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworICAgICAgTElCUz0iJExJQlMgLWxjdXJzZXMgLWx0ZXJtY2FwIgorICAgIGZpCisgICAgYWNfY3ZfZnVuY19pbml0c2NyPXllcworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgIi4kYWNfY3ZfZnVuY19pbml0c2NyIiAhPSAueWVzIDsgdGhlbgorICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgY2ZfdGVybV9saWI9IiIKKyAgICBjZl9jdXJzX2xpYj0iIgorCisgICAgaWYgdGVzdCAiLiR7Y2ZfY3ZfbmN1cnNlc192ZXJzaW9uLW5vfSIgIT0gLm5vCisgICAgdGhlbgorICAgICAgICBjZl9jaGVja19saXN0PSJuY3Vyc2VzIGN1cnNlcyBjdXJzZXNYIgorICAgIGVsc2UKKyAgICAgICAgY2ZfY2hlY2tfbGlzdD0iY3Vyc2VzWCBjdXJzZXMgbmN1cnNlcyIKKyAgICBmaQorCisgICAgIyBDaGVjayBmb3IgbGlicmFyeSBjb250YWluaW5nIHRnb3RvLiAgRG8gdGhpcyBiZWZvcmUgY3Vyc2VzIGxpYnJhcnkKKyAgICAjIGJlY2F1c2UgaXQgbWF5IGJlIG5lZWRlZCB0byBsaW5rIHRoZSB0ZXN0LWNhc2UgZm9yIGluaXRzY3IuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRnb3RvIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyOTUwOiBjaGVja2luZyBmb3IgdGdvdG8iID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfdGdvdG8nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyOTU1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHRnb3RvKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgdGdvdG8oKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl90Z290bykgfHwgZGVmaW5lZCAoX19zdHViX19fdGdvdG8pCitjaG9rZSBtZQorI2Vsc2UKK3Rnb3RvKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5Nzg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfdGdvdG89eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX3Rnb3RvPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ndGdvdG9gXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgY2ZfdGVybV9saWI9cHJlZGVmaW5lZAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKworICAgICAgICBmb3IgY2ZfdGVybV9saWIgaW4gJGNmX2NoZWNrX2xpc3QgdGVybWNhcCB0ZXJtbGliIHVua25vd24KKyAgICAgICAgZG8KKyAgICAgICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0Z290byBpbiAtbCRjZl90ZXJtX2xpYiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mjk5OTogY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sJGNmX3Rlcm1fbGliIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gJGNmX3Rlcm1fbGliJ18ndGdvdG8gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sJGNmX3Rlcm1fbGliICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMwMDcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB0Z290bygpOworCitpbnQgbWFpbigpIHsKK3Rnb3RvKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDE4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBicmVhaworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICAgICAgZG9uZQorICAgIAorZmkKKworCisgICAgIyBDaGVjayBmb3IgbGlicmFyeSBjb250YWluaW5nIGluaXRzY3IKKyAgICB0ZXN0ICIkY2ZfdGVybV9saWIiICE9IHByZWRlZmluZWQgJiYgdGVzdCAiJGNmX3Rlcm1fbGliIiAhPSB1bmtub3duICYmIExJQlM9Ii1sJGNmX3Rlcm1fbGliICRjZl9zYXZlX0xJQlMiCisgICAgZm9yIGNmX2N1cnNfbGliIGluICRjZl9jaGVja19saXN0IHhjdXJzZXMgamN1cnNlcyB1bmtub3duCisgICAgZG8KKyAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWwkY2ZfY3Vyc19saWIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMwNDg6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sJGNmX2N1cnNfbGliIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gJGNmX2N1cnNfbGliJ18naW5pdHNjciB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWwkY2ZfY3Vyc19saWIgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzA1NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IoKTsKKworaW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDY3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBicmVhaworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBkb25lCisgICAgdGVzdCAkY2ZfY3Vyc19saWIgPSB1bmtub3duICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm8gY3Vyc2VzIGxpYnJhcnkgZm91bmQiIDE+JjI7IGV4aXQgMTsgfQorCisgICAgTElCUz0iLWwkY2ZfY3Vyc19saWIgJGNmX3NhdmVfTElCUyIKKyAgICBpZiB0ZXN0ICIkY2ZfdGVybV9saWIiID0gdW5rbm93biA7IHRoZW4KKyAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgd2l0aCAkY2ZfY3Vyc19saWIgbGlicmFyeSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzA5MzogY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgd2l0aCAkY2ZfY3Vyc19saWIgbGlicmFyeSIgPiY1CisgICAgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMwOTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTAyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICAgICAgICBlY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgorICAgICAgICB0ZXN0ICRjZl9yZXN1bHQgPSBubyAmJiB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IENhbm5vdCBsaW5rIGN1cnNlcyBsaWJyYXJ5IiAxPiYyOyBleGl0IDE7IH0KKyAgICBlbGlmIHRlc3QgIiRjZl9jdXJzX2xpYiIgPSAiJGNmX3Rlcm1fbGliIiA7IHRoZW4KKyAgICAgICAgOgorICAgIGVsaWYgdGVzdCAiJGNmX3Rlcm1fbGliIiAhPSBwcmVkZWZpbmVkIDsgdGhlbgorICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBuZWVkIGJvdGggJGNmX2N1cnNfbGliIGFuZCAkY2ZfdGVybV9saWIgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMTE4OiBjaGVja2luZyBpZiB3ZSBuZWVkIGJvdGggJGNmX2N1cnNfbGliIGFuZCAkY2ZfdGVybV9saWIgbGlicmFyaWVzIiA+JjUKKyAgICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzEyMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTI3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisgICAgICAgICAgICBMSUJTPSItbCRjZl9jdXJzX2xpYiAtbCRjZl90ZXJtX2xpYiAkY2Zfc2F2ZV9MSUJTIgorICAgICAgICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzEzNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxNDQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PWVycm9yCitmaQorcm0gLWYgY29uZnRlc3QqCisgICAgICAgICAgICAKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgICAgZWNobyAiJGFjX3QiIiRjZl9yZXN1bHQiIDE+JjYKKyAgICBmaQorZmkKK2ZpCisKKworCTs7CituY3Vyc2VzKQorCQorCitjZl9uY3VoZHJfcm9vdD1uY3Vyc2VzCisKK3Rlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiBcCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiAmJiB7IFwKKyAgCitpZiB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZSAkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdAorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMxOTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8iKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMDM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTozMjIwOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCit9CisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaGVhZGVyIGluIGluY2x1ZGUtcGF0aCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzIzOTogY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBoZWFkZXIgaW4gaW5jbHVkZS1wYXRoIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX2gnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljZl9oZWFkZXJfbGlzdD0iJGNmX25jdWhkcl9yb290L2N1cnNlcy5oICRjZl9uY3VoZHJfcm9vdC9uY3Vyc2VzLmgiCisJKCB0ZXN0ICIkY2ZfbmN1aGRyX3Jvb3QiID0gbmN1cnNlcyB8fCB0ZXN0ICIkY2ZfbmN1aGRyX3Jvb3QiID0gbmN1cnNlc3cgKSAmJiBjZl9oZWFkZXJfbGlzdD0iJGNmX2hlYWRlcl9saXN0IGN1cnNlcy5oIG5jdXJzZXMuaCIKKwlmb3IgY2ZfaGVhZGVyIGluICRjZl9oZWFkZXJfbGlzdAorCWRvCisJCQorCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMyNTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisKKyNpbmNsdWRlIDwkY2ZfaGVhZGVyPgoraW50IG1haW4oKSB7CisKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKworcHJpbnRmKCIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK3ByaW50Zigib2xkXG4iKTsKKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZW5kaWYKKwkKKwkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMjcxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oPSRjZl9oZWFkZXIKKwkKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaCIgIT0gbm8gJiYgYnJlYWsKKwlkb25lCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbmN1cnNlc19oIiAxPiY2CisKKworCitpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyA7IHRoZW4KKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfY3ZfbmN1cnNlc19oCitlbHNlCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaW5jbHVkZS1wYXRoIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMjk3OiBjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGluY2x1ZGUtcGF0aCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfbmN1cnNlc19oMicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvCisJY2Zfc2VhcmNoPSIiCisKKwordGVzdCAiL3VzciIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgL3VzciIKKwl0ZXN0IC1kIC91c3IvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCit0ZXN0ICIkcHJlZml4IiAhPSAiTk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKwordGVzdCAiL3Vzci9sb2NhbCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IvbG9jYWwiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgL3Vzci9sb2NhbCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCit0ZXN0ICIvb3B0IiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL29wdCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvb3B0IgorCXRlc3QgLWQgL29wdC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgL29wdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL29wdC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIiRIT01FIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiJEhPTUUiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgJEhPTUUiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIiRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJGluY2x1ZGVkaXIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290ICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkb2xkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIgICAgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRvbGRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290ICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkb2xkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvIHNlYXJjaCBwYXRoICRjZl9zZWFyY2gKKwljZl9zYXZlMl9DUFBGTEFHUz0iJENQUEZMQUdTIgorCWZvciBjZl9pbmNkaXIgaW4gJGNmX3NlYXJjaAorCWRvCisJCQoraWYgdGVzdCAtbiAiJGNmX2luY2RpciIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9pbmNkaXIKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNDEwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CitwcmludGYoIkhlbGxvIikKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNDE3OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MzQzNDogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisKKwkJICBDUFBGTEFHUz0iLUkkY2ZfYWRkX2luY2RpciAkQ1BQRkxBR1MiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCQlmb3IgY2ZfaGVhZGVyIGluIFwKKwkJCW5jdXJzZXMuaCBcCisJCQljdXJzZXMuaAorCQlkbworCQkJCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzQ1NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCQorCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM0Nzc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2gyPSRjZl9oZWFkZXIKKwkKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oMj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisJCQlpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgIT0gbm8gOyB0aGVuCisJCQkJY2ZfY3ZfbmN1cnNlc19oMj0kY2ZfaW5jZGlyLyRjZl9oZWFkZXIKKwkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAkYWNfbiAiCS4uLiBmb3VuZCAkYWNfYyIgMT4mNgorCQkJCWJyZWFrCisJCQlmaQorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGVkICRjZl9pbmNkaXIvJGNmX2hlYWRlciIgMT4mNgorCQlkb25lCisJCUNQUEZMQUdTPSIkY2Zfc2F2ZTJfQ1BQRkxBR1MiCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyAmJiBicmVhaworCWRvbmUKKwl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgPSBubyAmJiB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG5vdCBmb3VuZCIgMT4mMjsgZXhpdCAxOyB9CisJCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25jdXJzZXNfaDIiIDE+JjYKKworCWNmXzFzdF9pbmNkaXI9YGVjaG8gJGNmX2N2X25jdXJzZXNfaDIgfCBzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj1gYmFzZW5hbWUgJGNmX2N2X25jdXJzZXNfaDJgCisJaWYgdGVzdCBgYmFzZW5hbWUgJGNmXzFzdF9pbmNkaXJgID0gJGNmX25jdWhkcl9yb290IDsgdGhlbgorCQljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfbmN1aGRyX3Jvb3QvJGNmX2N2X25jdXJzZXNfaGVhZGVyCisJZmkKKwkKK2lmIHRlc3QgLW4gIiRjZl8xc3RfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmXzFzdF9pbmNkaXIKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNTM1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CitwcmludGYoIkhlbGxvIikKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNTQyOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MzU1OTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisKKwkJICBDUFBGTEFHUz0iLUkkY2ZfYWRkX2luY2RpciAkQ1BQRkxBR1MiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCitmaQorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgZm9yIG5jdXJzZXMuaAorCitjYXNlICRjZl9jdl9uY3Vyc2VzX2hlYWRlciBpbiAjICh2aQorKm5jdXJzZXMuaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX0ggMQorRU9GCisKKwk7OworZXNhYworCitjYXNlICRjZl9jdl9uY3Vyc2VzX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy9jdXJzZXMuaHxuY3Vyc2VzL25jdXJzZXMuaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCAxCitFT0YKKworCTs7CituY3Vyc2Vzdy9jdXJzZXMuaHxuY3Vyc2Vzdy9uY3Vyc2VzLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU1dfTkNVUlNFU19IIDEKK0VPRgorCisJOzsKK2VzYWMKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB0ZXJtaW5mbyBoZWFkZXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM2MDc6IGNoZWNraW5nIGZvciB0ZXJtaW5mbyBoZWFkZXIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3Rlcm1faGVhZGVyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjYXNlICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXJ9IGluICModmkKKyovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkgIyh2aQorCWNmX3Rlcm1faGVhZGVyPWBlY2hvICIkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiIHwgc2VkIC1lICdzJW5jdXJzZXNbXi5dKlwuaCQldGVybS5oJSdgCisJOzsKKyopCisJY2ZfdGVybV9oZWFkZXI9dGVybS5oCisJOzsKK2VzYWMKKworZm9yIGNmX3Rlc3QgaW4gJGNmX3Rlcm1faGVhZGVyICJuY3Vyc2VzL3Rlcm0uaCIgIm5jdXJzZXN3L3Rlcm0uaCIKK2RvCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNjI0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI2luY2x1ZGUgPCRjZl90ZXN0PgorCitpbnQgbWFpbigpIHsKK2ludCB4ID0gYXV0b19sZWZ0X21hcmdpbgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM2MzQ6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAKKwljZl9jdl90ZXJtX2hlYWRlcj0iJGNmX3Rlc3QiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIAorCWNmX2N2X3Rlcm1faGVhZGVyPXVua25vd24KKwkKK2ZpCitybSAtZiBjb25mdGVzdCoKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl90ZXJtX2hlYWRlciIgMT4mNgorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgdG8gYWNjb21tb2RhdGUgc3ViZGlyZWN0b3JpZXMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyAodmkKKyp0ZXJtLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVEVSTV9IIDEKK0VPRgorCisJOzsKK2VzYWMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyAodmkKK25jdXJzZXMvdGVybS5oKSAjKHZpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU19URVJNX0ggMQorRU9GCisKKwk7OworbmN1cnNlc3cvdGVybS5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNXX1RFUk1fSCAxCitFT0YKKworCTs7Citlc2FjCisKKworIyBzb21lIGFwcGxpY2F0aW9ucyBuZWVkIHRoaXMsIGJ1dCBzaG91bGQgY2hlY2sgZm9yIE5DVVJTRVNfVkVSU0lPTgorY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNjg5OiBjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX3ZlcnNpb24nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIAorCisJIyBUaGlzIHdpbGwgbm90IHdvcmsgaWYgdGhlIHByZXByb2Nlc3NvciBzcGxpdHMgdGhlIGxpbmUgYWZ0ZXIgdGhlCisJIyBBdXRvY29uZiB0b2tlbi4gIFRoZSAndW5wcm90bycgcHJvZ3JhbSBkb2VzIHRoYXQuCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mNSB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzE1OiBcIiRjZl90cnlcIikgMT4mNTsgKGV2YWwgJGNmX3RyeSkgMj4mNTsgfQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW14iXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorCitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM3MjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCIkY2ZfdGVtcGZpbGUiLCAidyIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorIyBpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwlmcHJpbnRmKGZwLCAiJXMuJWRcbiIsIE5DVVJTRVNfVkVSU0lPTiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyMgZWxzZQorCWZwcmludGYoZnAsICIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fTkNVUlNFU19ICisJZnByaW50ZihmcCwgIm9sZFxuIik7CisjIGVsc2UKKwltYWtlIGFuIGVycm9yCisjIGVuZGlmCisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuLXJldHVybn0oMCk7Cit9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mzc0ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICAKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YGNhdCAkY2ZfdGVtcGZpbGVgCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iIDE+JjYKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID0gbm8gfHwgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKKworCisJCisKK2NmX25jdWxpYl9yb290PW5jdXJzZXMKKwkjIFRoaXMgd29ya3MsIGV4Y2VwdCBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBmaW5kIGdwbSwgYnV0CisJIyBuY3Vyc2VzIGlzIGluIGEgbm9uc3RhbmRhcmQgbG9jYXRpb24gdmlhICRMSUJTLCBhbmQgd2UgcmVhbGx5IHdhbnQKKwkjIHRvIGxpbmsgZ3BtLgorY2ZfbmN1cnNlc19MSUJTPSIiCitjZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEdwbV9PcGVuIGluIC1sZ3BtIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNzc5OiBjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0iID4mNQorYWNfbGliX3Zhcj1gZWNobyBncG0nXydHcG1fT3BlbiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzc4NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIEdwbV9PcGVuKCk7CisKK2ludCBtYWluKCkgeworR3BtX09wZW4oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM3OTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sZ3BtIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozODE0OiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbGdwbSIgPiY1CithY19saWJfdmFyPWBlY2hvIGdwbSdfJ2luaXRzY3IgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZ3BtICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM4MjIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBpbml0c2NyKCk7CisKK2ludCBtYWluKCkgeworaW5pdHNjcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzgzMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTElCUz0iJGNmX25jdXJzZXNfU0FWRSIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitjZl9uY3Vyc2VzX0xJQlM9Ii1sZ3BtIgorZmkKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCitmcmVlYnNkKikKKwkjIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgeW91IGFyZSBsaW5raW5nIGFnYWluc3QgYW4gb2Jzb2xldGUKKwkjIHZlcnNpb24gb2YgbmN1cnNlcyAoYnV0IGl0IHNob3VsZCBkbyBubyBoYXJtLCBzaW5jZSBpdCdzIHN0YXRpYykuCisJaWYgdGVzdCAiJGNmX25jdWxpYl9yb290IiA9IG5jdXJzZXMgOyB0aGVuCisJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM4NjU6IGNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8iID4mNQorYWNfbGliX3Zhcj1gZWNobyBteXRpbmZvJ18ndGdvdG8gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sbXl0aW5mbyAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzODczICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgdGdvdG8oKTsKKworaW50IG1haW4oKSB7Cit0Z290bygpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mzg4NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgY2ZfbmN1cnNlc19MSUJTPSItbG15dGluZm8gJGNmX25jdXJzZXNfTElCUyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisJZmkKKwk7OworZXNhYworCitMSUJTPSIkY2ZfbmN1cnNlc19MSUJTICRMSUJTIgorCitpZiAoIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiB0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiApCit0aGVuCisJCitpZiB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2Rpci9saWIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAkY2ZfY3ZfY3Vyc2VzX2Rpci9saWIKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MzkzMjogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIC4uLiIgMT4mNQorCisKKyAgICAgICAgTERGTEFHUz0iLUwkY2ZfYWRkX2xpYmRpciAkTERGTEFHUyIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworCUxJQlM9Ii1sJGNmX25jdWxpYl9yb290ICRMSUJTIgorZWxzZQorCQorCWV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPW5vJworCWNmX2xpYmRpcj0iIgorCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozOTQ3OiBjaGVja2luZyBmb3IgaW5pdHNjciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19pbml0c2NyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzk1MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBpbml0c2NyKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgaW5pdHNjcigpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2luaXRzY3IpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2luaXRzY3IpCitjaG9rZSBtZQorI2Vsc2UKK2luaXRzY3IoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mzk3NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19pbml0c2NyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19pbml0c2NyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18naW5pdHNjcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sJGNmX25jdWxpYl9yb290IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozOTk1OiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9uY3VsaWJfcm9vdCIgPiY1CisJCUxJQlM9Ii1sJGNmX25jdWxpYl9yb290ICRMSUJTIgorCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzOTk4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDAwNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCQkJIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPXllcycKKwkJCQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKwkJCWNmX3NlYXJjaD0iIgorCisKK3Rlc3QgIi91c3IiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvdXNyIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL3VzciIKKwl0ZXN0IC1kIC91c3IvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xpYiIKKwl0ZXN0IC1kIC91c3IvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgL3Vzci9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC91c3IvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCit0ZXN0ICIkcHJlZml4IiAhPSAiTk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgJHByZWZpeCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCit0ZXN0ICIvdXNyL2xvY2FsIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3Vzci9sb2NhbCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyIC91c3IvbG9jYWwiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwordGVzdCAiL29wdCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi9vcHQiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAvb3B0IgorCXRlc3QgLWQgL29wdC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvbGliIgorCXRlc3QgLWQgL29wdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL29wdC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisKK3Rlc3QgIiRIT01FIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiJEhPTUUiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkSE9NRSIKKwl0ZXN0IC1kICRIT01FL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliIgorCXRlc3QgLWQgJEhPTUUvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRIT01FL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkSE9NRS8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKworCQkJZm9yIGNmX2xpYmRpciBpbiAkY2Zfc2VhcmNoCisJCQlkbworCQkJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAtbCRjZl9uY3VsaWJfcm9vdCBpbiAkY2ZfbGliZGlyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0MDgxOiBjaGVja2luZyBmb3IgLWwkY2ZfbmN1bGliX3Jvb3QgaW4gJGNmX2xpYmRpciIgPiY1CisJCQkJTElCUz0iLUwkY2ZfbGliZGlyIC1sJGNmX25jdWxpYl9yb290ICRjZl9zYXZlX0xJQlMiCisJCQkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDA4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQwOTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKwkJCSAJCSBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCisJCQkJCSBicmVhaworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKwkJCQkJIExJQlM9IiRjZl9zYXZlX0xJQlMiCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQlkb25lCisJCQkKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCitmaQorCitldmFsICdjZl9mb3VuZF9saWJyYXJ5PSRjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290CisKK2lmIHRlc3QgJGNmX2ZvdW5kX2xpYnJhcnkgPSBubyA7IHRoZW4KKwl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IENhbm5vdCBsaW5rICRjZl9uY3VsaWJfcm9vdCBsaWJyYXJ5IiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKKworZmkKKworaWYgdGVzdCAtbiAiJGNmX25jdXJzZXNfTElCUyIgOyB0aGVuCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDEyMjogY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUyIgPiY1CisJY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKKwlmb3IgcCBpbiAkY2ZfbmN1cnNlc19MSUJTIDsgZG8KKwkJcT1gZWNobyAkTElCUyB8IHNlZCAtZSAicyUkcCAlJSIgLWUgInMlJHAkJSUiYAorCQlpZiB0ZXN0ICIkcSIgIT0gIiRMSUJTIiA7IHRoZW4KKwkJCUxJQlM9IiRxIgorCQlmaQorCWRvbmUKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0MTMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpOyBtb3VzZW1hc2soMCwwKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0MTM4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCQkgTElCUz0iJGNmX25jdXJzZXNfU0FWRSIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKKworY2ZfbmN1bGliX1JPT1Q9YGVjaG8gIkhBVkVfTElCJGNmX25jdWxpYl9yb290IiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGNmX25jdWxpYl9ST09UIDEKK0VPRgorCisKKwk7OworbmN1cnNlc3cpCisJY2ZfY3ZfbGlidHlwZT13CisJCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0MTY0OiBjaGVja2luZyBmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl91dGY4X2xpYicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWNmX3NhdmVfTElCUz0iJExJQlMiCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDE3MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludCBtYWluKCkgeworcHV0d2MoMCwwKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0MTc5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl91dGY4X2xpYj15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgTElCUz0iLWx1dGY4ICRMSUJTIgorCSBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0MTg4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPGxpYnV0ZjguaD4KK2ludCBtYWluKCkgeworcHV0d2MoMCwwKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0MTk2OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl91dGY4X2xpYj1hZGQtb24KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfdXRmOF9saWI9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwlMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3V0ZjhfbGliIiAxPiY2CisKKyMgSEFWRV9MSUJVVEY4X0ggaXMgdXNlZCBieSBuY3Vyc2VzIGlmIGN1cnNlcy5oIGlzIHNoYXJlZCBiZXR3ZWVuCisjIG5jdXJzZXMvbmN1cnNlc3c6CitpZiB0ZXN0ICIkY2ZfY3ZfdXRmOF9saWIiID0gImFkZC1vbiIgOyB0aGVuCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTElCVVRGOF9IIDEKK0VPRgorCisJTElCUz0iLWx1dGY4ICRMSUJTIgorZmkKKworCQorCitjZl9uY3VoZHJfcm9vdD1uY3Vyc2VzdworCit0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgXAordGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgJiYgeyBcCisgIAoraWYgdGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZSAkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUgJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0MjU1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CitwcmludGYoIkhlbGxvIikKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0MjYyOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NDI3OTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisKKwkJICBDUFBGTEFHUz0iLUkkY2ZfYWRkX2luY2RpciAkQ1BQRkxBR1MiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworfQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQyOTg6IGNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaGVhZGVyIGluIGluY2x1ZGUtcGF0aCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfbmN1cnNlc19oJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJY2ZfaGVhZGVyX2xpc3Q9IiRjZl9uY3VoZHJfcm9vdC9jdXJzZXMuaCAkY2ZfbmN1aGRyX3Jvb3QvbmN1cnNlcy5oIgorCSggdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXMgfHwgdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXN3ICkgJiYgY2ZfaGVhZGVyX2xpc3Q9IiRjZl9oZWFkZXJfbGlzdCBjdXJzZXMuaCBuY3Vyc2VzLmgiCisJZm9yIGNmX2hlYWRlciBpbiAkY2ZfaGVhZGVyX2xpc3QKKwlkbworCQkKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0MzA5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyN1bmRlZiAgSEFWRV9MSUJVVEY4X0gJLyogaW4gY2FzZSB3ZSB1c2VkIENGX1VURjhfTElCICovCisjZGVmaW5lIEhBVkVfTElCVVRGOF9ICS8qIHRvIGZvcmNlIG5jdXJzZXMnIGhlYWRlciBmaWxlIHRvIHVzZSBjY2hhcl90ICovCisKKyNpbmNsdWRlIDwkY2ZfaGVhZGVyPgoraW50IG1haW4oKSB7CisKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKworI2lmbmRlZiBXQUNTX0JTU0IKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKworcHJpbnRmKCIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK3ByaW50Zigib2xkXG4iKTsKKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZW5kaWYKKwkKKwkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0MzM4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oPSRjZl9oZWFkZXIKKwkKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaCIgIT0gbm8gJiYgYnJlYWsKKwlkb25lCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbmN1cnNlc19oIiAxPiY2CisKKworCitpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyA7IHRoZW4KKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfY3ZfbmN1cnNlc19oCitlbHNlCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaW5jbHVkZS1wYXRoIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0MzY0OiBjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGluY2x1ZGUtcGF0aCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfbmN1cnNlc19oMicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvCisJY2Zfc2VhcmNoPSIiCisKKwordGVzdCAiL3VzciIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgL3VzciIKKwl0ZXN0IC1kIC91c3IvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCit0ZXN0ICIkcHJlZml4IiAhPSAiTk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKwordGVzdCAiL3Vzci9sb2NhbCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IvbG9jYWwiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgL3Vzci9sb2NhbCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCit0ZXN0ICIvb3B0IiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL29wdCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvb3B0IgorCXRlc3QgLWQgL29wdC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgL29wdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL29wdC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIiRIT01FIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiJEhPTUUiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgJEhPTUUiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIiRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJGluY2x1ZGVkaXIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290ICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkb2xkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIgICAgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRvbGRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290ICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkb2xkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvIHNlYXJjaCBwYXRoICRjZl9zZWFyY2gKKwljZl9zYXZlMl9DUFBGTEFHUz0iJENQUEZMQUdTIgorCWZvciBjZl9pbmNkaXIgaW4gJGNmX3NlYXJjaAorCWRvCisJCQoraWYgdGVzdCAtbiAiJGNmX2luY2RpciIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9pbmNkaXIKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0NDc3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CitwcmludGYoIkhlbGxvIikKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0NDg0OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NDUwMTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisKKwkJICBDUFBGTEFHUz0iLUkkY2ZfYWRkX2luY2RpciAkQ1BQRkxBR1MiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCQlmb3IgY2ZfaGVhZGVyIGluIFwKKwkJCW5jdXJzZXMuaCBcCisJCQljdXJzZXMuaAorCQlkbworCQkJCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDUyMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCQorCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ1NDQ6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2gyPSRjZl9oZWFkZXIKKwkKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oMj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisJCQlpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgIT0gbm8gOyB0aGVuCisJCQkJY2ZfY3ZfbmN1cnNlc19oMj0kY2ZfaW5jZGlyLyRjZl9oZWFkZXIKKwkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAkYWNfbiAiCS4uLiBmb3VuZCAkYWNfYyIgMT4mNgorCQkJCWJyZWFrCisJCQlmaQorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGVkICRjZl9pbmNkaXIvJGNmX2hlYWRlciIgMT4mNgorCQlkb25lCisJCUNQUEZMQUdTPSIkY2Zfc2F2ZTJfQ1BQRkxBR1MiCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyAmJiBicmVhaworCWRvbmUKKwl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgPSBubyAmJiB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG5vdCBmb3VuZCIgMT4mMjsgZXhpdCAxOyB9CisJCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25jdXJzZXNfaDIiIDE+JjYKKworCWNmXzFzdF9pbmNkaXI9YGVjaG8gJGNmX2N2X25jdXJzZXNfaDIgfCBzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj1gYmFzZW5hbWUgJGNmX2N2X25jdXJzZXNfaDJgCisJaWYgdGVzdCBgYmFzZW5hbWUgJGNmXzFzdF9pbmNkaXJgID0gJGNmX25jdWhkcl9yb290IDsgdGhlbgorCQljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfbmN1aGRyX3Jvb3QvJGNmX2N2X25jdXJzZXNfaGVhZGVyCisJZmkKKwkKK2lmIHRlc3QgLW4gIiRjZl8xc3RfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmXzFzdF9pbmNkaXIKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0NjAyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CitwcmludGYoIkhlbGxvIikKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0NjA5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NDYyNjogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisKKwkJICBDUFBGTEFHUz0iLUkkY2ZfYWRkX2luY2RpciAkQ1BQRkxBR1MiCisKKyAgICAgICAgICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorICAgICAgICAgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKyAgICAgICAgICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCitmaQorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgZm9yIG5jdXJzZXMuaAorCitjYXNlICRjZl9jdl9uY3Vyc2VzX2hlYWRlciBpbiAjICh2aQorKm5jdXJzZXMuaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX0ggMQorRU9GCisKKwk7OworZXNhYworCitjYXNlICRjZl9jdl9uY3Vyc2VzX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy9jdXJzZXMuaHxuY3Vyc2VzL25jdXJzZXMuaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCAxCitFT0YKKworCTs7CituY3Vyc2Vzdy9jdXJzZXMuaHxuY3Vyc2Vzdy9uY3Vyc2VzLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU1dfTkNVUlNFU19IIDEKK0VPRgorCisJOzsKK2VzYWMKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB0ZXJtaW5mbyBoZWFkZXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ2NzQ6IGNoZWNraW5nIGZvciB0ZXJtaW5mbyBoZWFkZXIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3Rlcm1faGVhZGVyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjYXNlICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXJ9IGluICModmkKKyovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkgIyh2aQorCWNmX3Rlcm1faGVhZGVyPWBlY2hvICIkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiIHwgc2VkIC1lICdzJW5jdXJzZXNbXi5dKlwuaCQldGVybS5oJSdgCisJOzsKKyopCisJY2ZfdGVybV9oZWFkZXI9dGVybS5oCisJOzsKK2VzYWMKKworZm9yIGNmX3Rlc3QgaW4gJGNmX3Rlcm1faGVhZGVyICJuY3Vyc2VzL3Rlcm0uaCIgIm5jdXJzZXN3L3Rlcm0uaCIKK2RvCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0NjkxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI2luY2x1ZGUgPCRjZl90ZXN0PgorCitpbnQgbWFpbigpIHsKK2ludCB4ID0gYXV0b19sZWZ0X21hcmdpbgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ3MDE6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAKKwljZl9jdl90ZXJtX2hlYWRlcj0iJGNmX3Rlc3QiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIAorCWNmX2N2X3Rlcm1faGVhZGVyPXVua25vd24KKwkKK2ZpCitybSAtZiBjb25mdGVzdCoKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl90ZXJtX2hlYWRlciIgMT4mNgorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgdG8gYWNjb21tb2RhdGUgc3ViZGlyZWN0b3JpZXMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyAodmkKKyp0ZXJtLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVEVSTV9IIDEKK0VPRgorCisJOzsKK2VzYWMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyAodmkKK25jdXJzZXMvdGVybS5oKSAjKHZpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU19URVJNX0ggMQorRU9GCisKKwk7OworbmN1cnNlc3cvdGVybS5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNXX1RFUk1fSCAxCitFT0YKKworCTs7Citlc2FjCisKKworIyBzb21lIGFwcGxpY2F0aW9ucyBuZWVkIHRoaXMsIGJ1dCBzaG91bGQgY2hlY2sgZm9yIE5DVVJTRVNfVkVSU0lPTgorY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NzU2OiBjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX3ZlcnNpb24nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIAorCisJIyBUaGlzIHdpbGwgbm90IHdvcmsgaWYgdGhlIHByZXByb2Nlc3NvciBzcGxpdHMgdGhlIGxpbmUgYWZ0ZXIgdGhlCisJIyBBdXRvY29uZiB0b2tlbi4gIFRoZSAndW5wcm90bycgcHJvZ3JhbSBkb2VzIHRoYXQuCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mNSB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0NzgyOiBcIiRjZl90cnlcIikgMT4mNTsgKGV2YWwgJGNmX3RyeSkgMj4mNTsgfQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW14iXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorCitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ3OTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCIkY2ZfdGVtcGZpbGUiLCAidyIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorIyBpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwlmcHJpbnRmKGZwLCAiJXMuJWRcbiIsIE5DVVJTRVNfVkVSU0lPTiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyMgZWxzZQorCWZwcmludGYoZnAsICIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fTkNVUlNFU19ICisJZnByaW50ZihmcCwgIm9sZFxuIik7CisjIGVsc2UKKwltYWtlIGFuIGVycm9yCisjIGVuZGlmCisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuLXJldHVybn0oMCk7Cit9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDgxNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICAKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YGNhdCAkY2ZfdGVtcGZpbGVgCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iIDE+JjYKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID0gbm8gfHwgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKKworCisJCisKK2NmX25jdWxpYl9yb290PW5jdXJzZXN3CisJIyBUaGlzIHdvcmtzLCBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgZmluZCBncG0sIGJ1dAorCSMgbmN1cnNlcyBpcyBpbiBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uIHZpYSAkTElCUywgYW5kIHdlIHJlYWxseSB3YW50CisJIyB0byBsaW5rIGdwbS4KK2NmX25jdXJzZXNfTElCUz0iIgorY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBHcG1fT3BlbiBpbiAtbGdwbSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDg0NjogY2hlY2tpbmcgZm9yIEdwbV9PcGVuIGluIC1sZ3BtIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gZ3BtJ18nR3BtX09wZW4gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZ3BtICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ4NTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBHcG1fT3BlbigpOworCitpbnQgbWFpbigpIHsKK0dwbV9PcGVuKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0ODY1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbGdwbSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDg4MTogY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxncG0iID4mNQorYWNfbGliX3Zhcj1gZWNobyBncG0nXydpbml0c2NyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGdwbSAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0ODg5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgaW5pdHNjcigpOworCitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ5MDA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorY2ZfbmN1cnNlc19MSUJTPSItbGdwbSIKK2ZpCisKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorZnJlZWJzZCopCisJIyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgbGlua2luZyBhZ2FpbnN0IGFuIG9ic29sZXRlCisJIyB2ZXJzaW9uIG9mIG5jdXJzZXMgKGJ1dCBpdCBzaG91bGQgZG8gbm8gaGFybSwgc2luY2UgaXQncyBzdGF0aWMpLgorCWlmIHRlc3QgIiRjZl9uY3VsaWJfcm9vdCIgPSBuY3Vyc2VzIDsgdGhlbgorCQllY2hvICRhY19uICJjaGVja2luZyBmb3IgdGdvdG8gaW4gLWxteXRpbmZvIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0OTMyOiBjaGVja2luZyBmb3IgdGdvdG8gaW4gLWxteXRpbmZvIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gbXl0aW5mbydfJ3Rnb3RvIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbG15dGluZm8gICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDk0MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHRnb3RvKCk7CisKK2ludCBtYWluKCkgewordGdvdG8oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ5NTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGNmX25jdXJzZXNfTElCUz0iLWxteXRpbmZvICRjZl9uY3Vyc2VzX0xJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCWZpCisJOzsKK2VzYWMKKworTElCUz0iJGNmX25jdXJzZXNfTElCUyAkTElCUyIKKworaWYgKCB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgdGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgKQordGhlbgorCQoraWYgdGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIvbGliIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9saWJkaXIgaW4gJGNmX2N2X2N1cnNlc19kaXIvbGliCisgIGRvCisgICAgaWYgdGVzdCAkY2ZfYWRkX2xpYmRpciA9IC91c3IvbGliIDsgdGhlbgorICAgICAgOgorICAgIGVsaWYgdGVzdCAtZCAkY2ZfYWRkX2xpYmRpcgorICAgIHRoZW4KKyAgICAgIGNmX2hhdmVfbGliZGlyPW5vCisgICAgICBpZiB0ZXN0IC1uICIkTERGTEFHUyRMSUJTIiA7IHRoZW4KKyAgICAgICAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworICAgICAgICBmb3IgY2ZfdGVzdF9saWJkaXIgaW4gJExERkxBR1MgJExJQlMgOyBkbworICAgICAgICAgIGlmIHRlc3QgIi4kY2ZfdGVzdF9saWJkaXIiID0gIi4tTCRjZl9hZGRfbGliZGlyIiA7IHRoZW4KKyAgICAgICAgICAgIGNmX2hhdmVfbGliZGlyPXllczsgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNmX2hhdmVfbGliZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjQ5OTk6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCAuLi4iIDE+JjUKKworCisgICAgICAgIExERkxBR1M9Ii1MJGNmX2FkZF9saWJkaXIgJExERkxBR1MiCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKK2ZpCisKKwlMSUJTPSItbCRjZl9uY3VsaWJfcm9vdCAkTElCUyIKK2Vsc2UKKwkKKwlldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz1ubycKKwljZl9saWJkaXI9IiIKKwllY2hvICRhY19uICJjaGVja2luZyBmb3IgaW5pdHNjciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTAxNDogY2hlY2tpbmcgZm9yIGluaXRzY3IiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfaW5pdHNjcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUwMTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgaW5pdHNjcigpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9pbml0c2NyKSB8fCBkZWZpbmVkIChfX3N0dWJfX19pbml0c2NyKQorY2hva2UgbWUKKyNlbHNlCitpbml0c2NyKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUwNDI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfaW5pdHNjcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfaW5pdHNjcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ2luaXRzY3JgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKworCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCQllY2hvICRhY19uICJjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9uY3VsaWJfcm9vdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTA2MjogY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWwkY2ZfbmN1bGliX3Jvb3QiID4mNQorCQlMSUJTPSItbCRjZl9uY3VsaWJfcm9vdCAkTElCUyIKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTA2NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUwNzI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKwkJCSBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCisJCQkKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisJCQljZl9zZWFyY2g9IiIKKworCit0ZXN0ICIvdXNyIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3VzciIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyIC91c3IiCisJdGVzdCAtZCAvdXNyL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIiCisJdGVzdCAtZCAvdXNyL2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvdXNyLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC91c3IvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwordGVzdCAiJHByZWZpeCIgIT0gIk5PTkUiICYmIFwKK3Rlc3QgLWQgIiRwcmVmaXgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIiCisJdGVzdCAtZCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwordGVzdCAiL3Vzci9sb2NhbCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IvbG9jYWwiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAvdXNyL2xvY2FsIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL3Vzci9sb2NhbC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisKK3Rlc3QgIi9vcHQiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvb3B0IiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL29wdCIKKwl0ZXN0IC1kIC9vcHQvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYiIKKwl0ZXN0IC1kIC9vcHQvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgL29wdC9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC9vcHQvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL29wdC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCit0ZXN0ICIkSE9NRSIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIiRIT01FIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgJEhPTUUiCisJdGVzdCAtZCAkSE9NRS9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2xpYiIKKwl0ZXN0IC1kICRIT01FL2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAkSE9NRS9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkSE9NRS8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJEhPTUUvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisKKwkJCWZvciBjZl9saWJkaXIgaW4gJGNmX3NlYXJjaAorCQkJZG8KKwkJCQllY2hvICRhY19uICJjaGVja2luZyBmb3IgLWwkY2ZfbmN1bGliX3Jvb3QgaW4gJGNmX2xpYmRpciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTE0ODogY2hlY2tpbmcgZm9yIC1sJGNmX25jdWxpYl9yb290IGluICRjZl9saWJkaXIiID4mNQorCQkJCUxJQlM9Ii1MJGNmX2xpYmRpciAtbCRjZl9uY3VsaWJfcm9vdCAkY2Zfc2F2ZV9MSUJTIgorCQkJCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUxNTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MTU4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisJCQkgCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworCQkJCQkgYnJlYWsKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisJCQkJCSBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQkJZG9uZQorCQkJCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQorZmkKKworZXZhbCAnY2ZfZm91bmRfbGlicmFyeT0kY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdAorCitpZiB0ZXN0ICRjZl9mb3VuZF9saWJyYXJ5ID0gbm8gOyB0aGVuCisJeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBDYW5ub3QgbGluayAkY2ZfbmN1bGliX3Jvb3QgbGlicmFyeSIgMT4mMjsgZXhpdCAxOyB9CitmaQorCisKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uY3Vyc2VzX0xJQlMiIDsgdGhlbgorCWVjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIGNhbiBsaW5rICRjZl9uY3VsaWJfcm9vdCB3aXRob3V0ICRjZl9uY3Vyc2VzX0xJQlMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUxODk6IGNoZWNraW5nIGlmIHdlIGNhbiBsaW5rICRjZl9uY3VsaWJfcm9vdCB3aXRob3V0ICRjZl9uY3Vyc2VzX0xJQlMiID4mNQorCWNmX25jdXJzZXNfU0FWRT0iJExJQlMiCisJZm9yIHAgaW4gJGNmX25jdXJzZXNfTElCUyA7IGRvCisJCXE9YGVjaG8gJExJQlMgfCBzZWQgLWUgInMlJHAgJSUiIC1lICJzJSRwJCUlImAKKwkJaWYgdGVzdCAiJHEiICE9ICIkTElCUyIgOyB0aGVuCisJCQlMSUJTPSIkcSIKKwkJZmkKKwlkb25lCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTE5OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKTsgbW91c2VtYXNrKDAsMCk7IHRnb3RvKChjaGFyICopMCwgMCwgMCk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTIwNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKwkJIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCisKK2NmX25jdWxpYl9ST09UPWBlY2hvICJIQVZFX0xJQiRjZl9uY3VsaWJfcm9vdCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKK2NhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRjZl9uY3VsaWJfUk9PVCAxCitFT0YKKworCisJOzsKK3BkY3Vyc2VzKSAjKHZpCisJaWYgdGVzdCAiJG5vX3giID0geWVzOyB0aGVuCisgICMgTm90IGFsbCBwcm9ncmFtcyBtYXkgdXNlIHRoaXMgc3ltYm9sLCBidXQgaXQgZG9lcyBub3QgaHVydCB0byBkZWZpbmUgaXQuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBYX0RJU1BMQVlfTUlTU0lORyAxCitFT0YKKworICBYX0NGTEFHUz0gWF9QUkVfTElCUz0gWF9MSUJTPSBYX0VYVFJBX0xJQlM9CitlbHNlCisgIGlmIHRlc3QgLW4gIiR4X2luY2x1ZGVzIjsgdGhlbgorICAgIFhfQ0ZMQUdTPSIkWF9DRkxBR1MgLUkkeF9pbmNsdWRlcyIKKyAgZmkKKworICAjIEl0IHdvdWxkIGFsc28gYmUgbmljZSB0byBkbyB0aGlzIGZvciBhbGwgLUwgb3B0aW9ucywgbm90IGp1c3QgdGhpcyBvbmUuCisgIGlmIHRlc3QgLW4gIiR4X2xpYnJhcmllcyI7IHRoZW4KKyAgICBYX0xJQlM9IiRYX0xJQlMgLUwkeF9saWJyYXJpZXMiCisgICAgIyBGb3IgU29sYXJpczsgc29tZSB2ZXJzaW9ucyBvZiBTdW4gQ0MgcmVxdWlyZSBhIHNwYWNlIGFmdGVyIC1SIGFuZAorICAgICMgb3RoZXJzIHJlcXVpcmUgbm8gc3BhY2UuICBXb3JkcyBhcmUgbm90IHN1ZmZpY2llbnQgLiAuIC4gLgorICAgIGNhc2UgImAodW5hbWUgLXNyKSAyPi9kZXYvbnVsbGAiIGluCisgICAgIlN1bk9TIDUiKikKKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgLVIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MjQ4OiBjaGVja2luZyB3aGV0aGVyIC1SIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZSIgPiY1CisgICAgICBhY194c2F2ZV9MSUJTPSIkTElCUyI7IExJQlM9IiRMSUJTIC1SJHhfbGlicmFyaWVzIgorICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTI1MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTI1ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfUl9ub3NwYWNlPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19SX25vc3BhY2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgIGlmIHRlc3QgJGFjX1Jfbm9zcGFjZSA9IHllczsgdGhlbgorCWVjaG8gIiRhY190IiJubyIgMT4mNgorCVhfTElCUz0iJFhfTElCUyAtUiR4X2xpYnJhcmllcyIKKyAgICAgIGVsc2UKKwlMSUJTPSIkYWNfeHNhdmVfTElCUyAtUiAkeF9saWJyYXJpZXMiCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTI3NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTI4MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfUl9zcGFjZT15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfUl9zcGFjZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCWlmIHRlc3QgJGFjX1Jfc3BhY2UgPSB5ZXM7IHRoZW4KKwkgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKwkgIFhfTElCUz0iJFhfTElCUyAtUiAkeF9saWJyYXJpZXMiCisJZWxzZQorCSAgZWNobyAiJGFjX3QiIm5laXRoZXIgd29ya3MiIDE+JjYKKwlmaQorICAgICAgZmkKKyAgICAgIExJQlM9IiRhY194c2F2ZV9MSUJTIgorICAgIGVzYWMKKyAgZmkKKworICAjIENoZWNrIGZvciBzeXN0ZW0tZGVwZW5kZW50IGxpYnJhcmllcyBYIHByb2dyYW1zIG11c3QgbGluayB3aXRoLgorICAjIERvIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciB0aGUgc3lzdGVtLWluZGVwZW5kZW50IFI2IGxpYnJhcmllcworICAjICgtbElDRSksIHNpbmNlIHdlIG1heSBuZWVkIC1sc29ja2V0IG9yIHdoYXRldmVyIGZvciBYIGxpbmtpbmcuCisKKyAgaWYgdGVzdCAiJElTQyIgPSB5ZXM7IHRoZW4KKyAgICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2xfcyAtbGluZXQiCisgIGVsc2UKKyAgICAjIE1hcnR5bi5Kb2huc29uQGNsLmNhbS5hYy51ayBzYXlzIHRoaXMgaXMgbmVlZGVkIGZvciBVbHRyaXgsIGlmIHRoZSBYCisgICAgIyBsaWJyYXJpZXMgd2VyZSBidWlsdCB3aXRoIERFQ25ldCBzdXBwb3J0LiAgQW5kIGthcmxAY3MudW1iLmVkdSBzYXlzCisgICAgIyB0aGUgQWxwaGEgbmVlZHMgZG5ldF9zdHViIChkbmV0IGRvZXMgbm90IGV4aXN0KS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTMxMzogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXQiID4mNQorYWNfbGliX3Zhcj1gZWNobyBkbmV0J18nZG5ldF9udG9hIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRuZXQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTMyMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRuZXRfbnRvYSgpOworCitpbnQgbWFpbigpIHsKK2RuZXRfbnRvYSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTMzMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hID0gbm87IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0X3N0dWIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUzNTQ6IGNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0X3N0dWIiID4mNQorYWNfbGliX3Zhcj1gZWNobyBkbmV0X3N0dWInXydkbmV0X250b2EgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZG5ldF9zdHViICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUzNjIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkbmV0X250b2EoKTsKKworaW50IG1haW4oKSB7CitkbmV0X250b2EoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUzNzM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbGRuZXRfc3R1YiIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgZmkKKworICAgICMgbXNoQGNpcy51ZmwuZWR1IHNheXMgLWxuc2wgKGFuZCAtbHNvY2tldCkgYXJlIG5lZWRlZCBmb3IgaGlzIDM4Ni9BVCwKKyAgICAjIHRvIGdldCB0aGUgU3lzViB0cmFuc3BvcnQgZnVuY3Rpb25zLgorICAgICMgY2hhZEBhbmFzYXppLmNvbSBzYXlzIHRoZSBQeXJhbWlzIE1JUy1FUyBydW5uaW5nIERDL09TeCAoU1ZSNCkKKyAgICAjIG5lZWRzIC1sbnNsLgorICAgICMgVGhlIG5zbCBsaWJyYXJ5IHByZXZlbnRzIHByb2dyYW1zIGZyb20gb3BlbmluZyB0aGUgWCBkaXNwbGF5CisgICAgIyBvbiBJcml4IDUuMiwgYWNjb3JkaW5nIHRvIGRpY2tleUBjbGFyay5uZXQuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU0MDI6IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX2dldGhvc3RieW5hbWUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NDA3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGhvc3RieW5hbWUoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBnZXRob3N0YnluYW1lKCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0aG9zdGJ5bmFtZSkgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0aG9zdGJ5bmFtZSkKK2Nob2tlIG1lCisjZWxzZQorZ2V0aG9zdGJ5bmFtZSgpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NDMwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydnZXRob3N0YnluYW1lYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lID0gbm87IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1NDUxOiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1CithY19saWJfdmFyPWBlY2hvIG5zbCdfJ2dldGhvc3RieW5hbWUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sbnNsICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU0NTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBnZXRob3N0YnluYW1lKCk7CisKK2ludCBtYWluKCkgeworZ2V0aG9zdGJ5bmFtZSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTQ3MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sbnNsIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBsaWVkZXJAc2t5bGVyLm1hdmQuaG9uZXl3ZWxsLmNvbSBzYXlzIHdpdGhvdXQgLWxzb2NrZXQsCisgICAgIyBzb2NrZXQvc2V0c29ja29wdCBhbmQgb3RoZXIgcm91dGluZXMgYXJlIHVuZGVmaW5lZCB1bmRlciBTQ08gT0RUCisgICAgIyAyLjAuICBCdXQgLWxzb2NrZXQgaXMgYnJva2VuIG9uIElSSVggNS4yIChhbmQgaXMgbm90IG5lY2Vzc2FyeQorICAgICMgb24gbGF0ZXIgdmVyc2lvbnMpLCBzYXlzIHNpbW9uQGxpYS5kaS5lcGZsLmNoOiBpdCBjb250YWlucworICAgICMgZ2V0aG9zdGJ5KiB2YXJpYW50cyB0aGF0IGRvbid0IHVzZSB0aGUgbmFtZXNlcnZlciAob3Igc29tZXRoaW5nKS4KKyAgICAjIC1sc29ja2V0IG11c3QgYmUgZ2l2ZW4gYmVmb3JlIC1sbnNsIGlmIGJvdGggYXJlIG5lZWRlZC4KKyAgICAjIFdlIGFzc3VtZSB0aGF0IGlmIGNvbm5lY3QgbmVlZHMgLWxuc2wsIHNvIGRvZXMgZ2V0aG9zdGJ5bmFtZS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgY29ubmVjdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTUwMDogY2hlY2tpbmcgZm9yIGNvbm5lY3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfY29ubmVjdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU1MDUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgY29ubmVjdCgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGNvbm5lY3QoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9jb25uZWN0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19jb25uZWN0KQorY2hva2UgbWUKKyNlbHNlCitjb25uZWN0KCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU1Mjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfY29ubmVjdD15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfY29ubmVjdD1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ2Nvbm5lY3RgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nvbm5lY3QgPSBubzsgdGhlbgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU1NDk6IGNoZWNraW5nIGZvciBjb25uZWN0IGluIC1sc29ja2V0IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gc29ja2V0J18nY29ubmVjdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxzb2NrZXQgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU1NTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBjb25uZWN0KCk7CisKK2ludCBtYWluKCkgeworY29ubmVjdCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTU2ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSItbHNvY2tldCAkWF9FWFRSQV9MSUJTIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBnb21lekBtaS51bmktZXJsYW5nZW4uZGUgc2F5cyAtbHBvc2l4IGlzIG5lY2Vzc2FyeSBvbiBBL1VYLgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciByZW1vdmUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU1OTI6IGNoZWNraW5nIGZvciByZW1vdmUiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfcmVtb3ZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTU5NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciByZW1vdmUoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciByZW1vdmUoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9yZW1vdmUpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3JlbW92ZSkKK2Nob2tlIG1lCisjZWxzZQorcmVtb3ZlKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU2MjA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfcmVtb3ZlPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19yZW1vdmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydyZW1vdmVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlbW92ZSA9IG5vOyB0aGVuCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcmVtb3ZlIGluIC1scG9zaXgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU2NDE6IGNoZWNraW5nIGZvciByZW1vdmUgaW4gLWxwb3NpeCIgPiY1CithY19saWJfdmFyPWBlY2hvIHBvc2l4J18ncmVtb3ZlIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbHBvc2l4ICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU2NDkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciByZW1vdmUoKTsKKworaW50IG1haW4oKSB7CityZW1vdmUoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU2NjA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbHBvc2l4IgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBCU0RJIEJTRC9PUyAyLjEgbmVlZHMgLWxpcGMgZm9yIFhPcGVuRGlzcGxheS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2htYXQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU2ODQ6IGNoZWNraW5nIGZvciBzaG1hdCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19zaG1hdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU2ODkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc2htYXQoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBzaG1hdCgpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX3NobWF0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19zaG1hdCkKK2Nob2tlIG1lCisjZWxzZQorc2htYXQoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTcxMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19zaG1hdD15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfc2htYXQ9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydzaG1hdGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICA6CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2htYXQgPSBubzsgdGhlbgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNobWF0IGluIC1saXBjIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1NzMzOiBjaGVja2luZyBmb3Igc2htYXQgaW4gLWxpcGMiID4mNQorYWNfbGliX3Zhcj1gZWNobyBpcGMnXydzaG1hdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxpcGMgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTc0MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHNobWF0KCk7CisKK2ludCBtYWluKCkgeworc2htYXQoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU3NTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbGlwYyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgZmkKKyAgZmkKKworICAjIENoZWNrIGZvciBsaWJyYXJpZXMgdGhhdCBYMTFSNiBYdC9YYXcgcHJvZ3JhbXMgbmVlZC4KKyAgYWNfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgdGVzdCAtbiAiJHhfbGlicmFyaWVzIiAmJiBMREZMQUdTPSIkTERGTEFHUyAtTCR4X2xpYnJhcmllcyIKKyAgIyBTTSBuZWVkcyBJQ0UgdG8gKGR5bmFtaWNhbGx5KSBsaW5rIHVuZGVyIFN1bk9TIDQueCAoc28gd2UgaGF2ZSB0bworICAjIGNoZWNrIGZvciBJQ0UgZmlyc3QpLCBidXQgd2UgbXVzdCBsaW5rIGluIHRoZSBvcmRlciAtbFNNIC1sSUNFIG9yCisgICMgd2UgZ2V0IHVuZGVmaW5lZCBzeW1ib2xzLiAgU28gYXNzdW1lIHdlIGhhdmUgU00gaWYgd2UgaGF2ZSBJQ0UuCisgICMgVGhlc2UgaGF2ZSB0byBiZSBsaW5rZWQgd2l0aCBiZWZvcmUgLWxYMTEsIHVubGlrZSB0aGUgb3RoZXIKKyAgIyBsaWJyYXJpZXMgd2UgY2hlY2sgZm9yIGJlbG93LCBzbyB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUuCisgICMgIC0taW50ZXJyYW5AdWx1cnUuU3RhbmZvcmQuRURVLCBrYkBjcy51bWIuZWR1LgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgSWNlQ29ubmVjdGlvbk51bWJlciBpbiAtbElDRSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTc4NTogY2hlY2tpbmcgZm9yIEljZUNvbm5lY3Rpb25OdW1iZXIgaW4gLWxJQ0UiID4mNQorYWNfbGliX3Zhcj1gZWNobyBJQ0UnXydJY2VDb25uZWN0aW9uTnVtYmVyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbElDRSAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTc5MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIEljZUNvbm5lY3Rpb25OdW1iZXIoKTsKKworaW50IG1haW4oKSB7CitJY2VDb25uZWN0aW9uTnVtYmVyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1ODA0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX1BSRV9MSUJTPSIkWF9QUkVfTElCUyAtbFNNIC1sSUNFIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgTERGTEFHUz0iJGFjX3NhdmVfTERGTEFHUyIKKworZmkKKworCisKKworCisjIFNZU1RFTV9OQU1FPWBlY2hvICIkY2ZfY3Zfc3lzdGVtX25hbWUifHRyICcgJyAtYAorCitjZl9oYXZlX1hfTElCUz1ubworCitMREZMQUdTPSIkWF9MSUJTICRMREZMQUdTIgorCit0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWNoZWNraW5nIGFkZGl0aW9ucyB0byBDRkxBR1MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjU4NDA6IHRlc3RpbmcgY2hlY2tpbmcgYWRkaXRpb25zIHRvIENGTEFHUyAuLi4iIDE+JjUKKworCitjZl9jaGVja19jZmxhZ3M9IiRDRkxBR1MiCitjZl9jaGVja19jcHBmbGFncz0iJENQUEZMQUdTIgorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRYX0NGTEFHUworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NTkwMjogdGVzdGluZyBhZGQgdG8gXCRDRkxBR1MgJGNmX25ld19jZmxhZ3MgLi4uIiAxPiY1CisKKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkIHRvIFwkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NTkxMTogdGVzdGluZyBhZGQgdG8gXCRDUFBGTEFHUyAkY2ZfbmV3X2NwcGZsYWdzIC4uLiIgMT4mNQorCisKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjU5MjA6IHRlc3RpbmcgYWRkIHRvIFwkRVhUUkFfQ1BQRkxBR1MgJGNmX25ld19leHRyYV9jcHBmbGFncyAuLi4iIDE+JjUKKworCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCisKKworaWYgdGVzdCAiJGNmX2NoZWNrX2NmbGFncyIgIT0gIiRDRkxBR1MiIDsgdGhlbgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTkzMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkgeworcHJpbnRmKCJIZWxsbyB3b3JsZCIpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU5Mzg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJdGVzdC1jb21waWxlIGZhaWxlZC4gIFVuZG9pbmcgY2hhbmdlIHRvIFwkQ0ZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo1OTQ2OiB0ZXN0aW5nIHRlc3QtY29tcGlsZSBmYWlsZWQuICBVbmRvaW5nIGNoYW5nZSB0byBcJENGTEFHUyAuLi4iIDE+JjUKKworCisJIGlmIHRlc3QgIiRjZl9jaGVja19jcHBmbGFncyIgIT0gIiRDUFBGTEFHUyIgOyB0aGVuCisJCSB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWJ1dCBrZWVwaW5nIGNoYW5nZSB0byBcJENQUEZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo1OTUyOiB0ZXN0aW5nIGJ1dCBrZWVwaW5nIGNoYW5nZSB0byBcJENQUEZMQUdTIC4uLiIgMT4mNQorCisKKwkgZmkKKwkgQ0ZMQUdTPSIkY2ZfY2hlY2tfZmxhZ3MiCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBYT3BlbkRpc3BsYXkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU5NjM6IGNoZWNraW5nIGZvciBYT3BlbkRpc3BsYXkiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfWE9wZW5EaXNwbGF5JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTk2OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBYT3BlbkRpc3BsYXkoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBYT3BlbkRpc3BsYXkoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9YT3BlbkRpc3BsYXkpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX1hPcGVuRGlzcGxheSkKK2Nob2tlIG1lCisjZWxzZQorWE9wZW5EaXNwbGF5KCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU5OTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfWE9wZW5EaXNwbGF5PXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19YT3BlbkRpc3BsYXk9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydYT3BlbkRpc3BsYXlgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFhPcGVuRGlzcGxheSBpbiAtbFgxMSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjAxMDogY2hlY2tpbmcgZm9yIFhPcGVuRGlzcGxheSBpbiAtbFgxMSIgPiY1CithY19saWJfdmFyPWBlY2hvIFgxMSdfJ1hPcGVuRGlzcGxheSB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxYMTEgJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYwMTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBYT3BlbkRpc3BsYXkoKTsKKworaW50IG1haW4oKSB7CitYT3BlbkRpc3BsYXkoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYwMjk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9Ii1sWDExICRMSUJTIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFh0QXBwSW5pdGlhbGl6ZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjA1MzogY2hlY2tpbmcgZm9yIFh0QXBwSW5pdGlhbGl6ZSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19YdEFwcEluaXRpYWxpemUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MDU4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIFh0QXBwSW5pdGlhbGl6ZSgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIFh0QXBwSW5pdGlhbGl6ZSgpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX1h0QXBwSW5pdGlhbGl6ZSkgfHwgZGVmaW5lZCAoX19zdHViX19fWHRBcHBJbml0aWFsaXplKQorY2hva2UgbWUKKyNlbHNlCitYdEFwcEluaXRpYWxpemUoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjA4MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19YdEFwcEluaXRpYWxpemU9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX1h0QXBwSW5pdGlhbGl6ZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ1h0QXBwSW5pdGlhbGl6ZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICA6CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgWHRBcHBJbml0aWFsaXplIGluIC1sWHQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYxMDA6IGNoZWNraW5nIGZvciBYdEFwcEluaXRpYWxpemUgaW4gLWxYdCIgPiY1CithY19saWJfdmFyPWBlY2hvIFh0J18nWHRBcHBJbml0aWFsaXplIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbFh0ICRYX1BSRV9MSUJTICRMSUJTICRYX0VYVFJBX0xJQlMgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MTA4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgWHRBcHBJbml0aWFsaXplKCk7CisKK2ludCBtYWluKCkgeworWHRBcHBJbml0aWFsaXplKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2MTE5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJYVCAxCitFT0YKKworCSBjZl9oYXZlX1hfTElCUz1YdAorCSBMSUJTPSItbFh0ICRYX1BSRV9MSUJTICRMSUJTICRYX0VYVFJBX0xJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZmkKKworCitpZiB0ZXN0ICRjZl9oYXZlX1hfTElCUyA9IG5vIDsgdGhlbgorCWVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSBsaW5rIFggVG9vbGtpdCBsaWJyYXJ5ICgtbFh0KSB3aXRoCit0ZXN0IHByb2dyYW0uICBZb3Ugd2lsbCBoYXZlIHRvIGNoZWNrIGFuZCBhZGQgdGhlIHByb3BlciBsaWJyYXJpZXMgYnkgaGFuZAordG8gbWFrZWZpbGUuIiAxPiYyCitmaQorCisKK2NmX3hfYXRoZW5hPSR7Y2ZfeF9hdGhlbmEtWGF3fQorCitlY2hvICRhY19uICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggWGF3IDNkIGxpYnJhcnkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYxNTc6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBYYXcgM2QgbGlicmFyeSIgPiY1Cit3aXRodmFsPQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLVhhdzNkIG9yIC0td2l0aG91dC1YYXczZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfWGF3M2Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfWGF3M2QiCisgIDoKK2ZpCisKK2lmIHRlc3QgIiR3aXRodmFsIiA9IHllcyA7IHRoZW4KKwljZl94X2F0aGVuYT1YYXczZAorCWVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKwllY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBuZVhUIEF0aGVuYSBsaWJyYXJ5IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MTc0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggbmVYVCBBdGhlbmEgbGlicmFyeSIgPiY1Cit3aXRodmFsPQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5lWHRhdyBvciAtLXdpdGhvdXQtbmVYdGF3IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9uZVh0YXcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbmVYdGF3IgorICA6CitmaQorCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgOyB0aGVuCisJY2ZfeF9hdGhlbmE9bmVYdGF3CisJZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorCWVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIEF0aGVuYS1QbHVzIGxpYnJhcnkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYxOTE6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBBdGhlbmEtUGx1cyBsaWJyYXJ5IiA+JjUKK3dpdGh2YWw9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtWGF3UGx1cyBvciAtLXdpdGhvdXQtWGF3UGx1cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfWGF3UGx1cytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9YYXdQbHVzIgorICA6CitmaQorCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgOyB0aGVuCisJY2ZfeF9hdGhlbmE9WGF3UGx1cworCWVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKwllY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBYZXh0Q3JlYXRlRXh0ZW5zaW9uIGluIC1sWGV4dCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjIwODogY2hlY2tpbmcgZm9yIFhleHRDcmVhdGVFeHRlbnNpb24gaW4gLWxYZXh0IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWGV4dCdfJ1hleHRDcmVhdGVFeHRlbnNpb24gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sWGV4dCAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MjE2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgWGV4dENyZWF0ZUV4dGVuc2lvbigpOworCitpbnQgbWFpbigpIHsKK1hleHRDcmVhdGVFeHRlbnNpb24oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYyMjc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9Ii1sWGV4dCAkTElCUyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKK2NmX3hfYXRoZW5hX2xpYj0iIgorCisKK2NmX3hfYXRoZW5hX3Jvb3Q9JGNmX3hfYXRoZW5hCitjZl94X2F0aGVuYV9pbmNsdWRlPSIiCisKK2ZvciBjZl9wYXRoIGluIGRlZmF1bHQgXAorCS91c3IvY29udHJpYi9YMTFSNiBcCisJL3Vzci9jb250cmliL1gxMVI1IFwKKwkvdXNyL2xpYi9YMTFSNSBcCisJL3Vzci9sb2NhbAorZG8KKwlpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfaW5jbHVkZSIgOyB0aGVuCisJCWNmX3NhdmU9IiRDUFBGTEFHUyIKKwkJY2ZfdGVzdD1YMTEvJGNmX3hfYXRoZW5hX3Jvb3QvU2ltcGxlTWVudS5oCisJCWlmIHRlc3QgJGNmX3BhdGggIT0gZGVmYXVsdCA7IHRoZW4KKwkJCUNQUEZMQUdTPSItSSRjZl9wYXRoL2luY2x1ZGUgJGNmX3NhdmUiCisJCQllY2hvICRhY19uICJjaGVja2luZyBmb3IgJGNmX3Rlc3QgaW4gJGNmX3BhdGgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYyNjY6IGNoZWNraW5nIGZvciAkY2ZfdGVzdCBpbiAkY2ZfcGF0aCIgPiY1CisJCWVsc2UKKwkJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfdGVzdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjI2OTogY2hlY2tpbmcgZm9yICRjZl90ZXN0IiA+JjUKKwkJZmkKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjI3MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CitpbnQgbWFpbigpIHsKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYyODE6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQllY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgorCQlpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IHllcyA7IHRoZW4KKwkJCWNmX3hfYXRoZW5hX2luY2x1ZGU9JGNmX3BhdGgKKwkJCWJyZWFrCisJCWVsc2UKKwkJCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKwkJZmkKKwlmaQorZG9uZQorCitpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfaW5jbHVkZSIgOyB0aGVuCisJZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiBVbmFibGUgdG8gc3VjY2Vzc2Z1bGx5IGZpbmQgQXRoZW5hIGhlYWRlciBmaWxlcyB3aXRoIHRlc3QgcHJvZ3JhbSIgMT4mMgorZWxpZiB0ZXN0ICIkY2ZfeF9hdGhlbmFfaW5jbHVkZSIgIT0gZGVmYXVsdCA7IHRoZW4KKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX3hfYXRoZW5hX2luY2x1ZGUiCitmaQorCisKK2NmX3hfYXRoZW5hX3Jvb3Q9JGNmX3hfYXRoZW5hCitjZl94X2F0aGVuYV9saWI9IiIKKworZm9yIGNmX3BhdGggaW4gZGVmYXVsdCBcCisJL3Vzci9jb250cmliL1gxMVI2IFwKKwkvdXNyL2NvbnRyaWIvWDExUjUgXAorCS91c3IvbGliL1gxMVI1IFwKKwkvdXNyL2xvY2FsCitkbworCWZvciBjZl9saWIgaW4gXAorCQkiLWwkY2ZfeF9hdGhlbmFfcm9vdCAtbFhtdSIgXAorCQkiLWwkY2ZfeF9hdGhlbmFfcm9vdCAtbFhwbSAtbFhtdSIgXAorCQkiLWwke2NmX3hfYXRoZW5hX3Jvb3R9X3MgLWxYbXVfcyIKKwlkbworCQlpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfbGliIiA7IHRoZW4KKwkJCWNmX3NhdmU9IiRMSUJTIgorCQkJY2ZfdGVzdD1YYXdTaW1wbGVNZW51QWRkR2xvYmFsQWN0aW9ucworCQkJaWYgdGVzdCAkY2ZfcGF0aCAhPSBkZWZhdWx0IDsgdGhlbgorCQkJCUxJQlM9Ii1MJGNmX3BhdGgvbGliICRjZl9saWIgJExJQlMiCisJCQkJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRjZl9saWIgaW4gJGNmX3BhdGgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYzMjg6IGNoZWNraW5nIGZvciAkY2ZfbGliIGluICRjZl9wYXRoIiA+JjUKKwkJCWVsc2UKKwkJCQlMSUJTPSIkY2ZfbGliICRMSUJTIgorCQkJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfdGVzdCBpbiAkY2ZfbGliIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MzMyOiBjaGVja2luZyBmb3IgJGNmX3Rlc3QgaW4gJGNmX2xpYiIgPiY1CisJCQlmaQorCQkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjMzNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworJGNmX3Rlc3QoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYzNDI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQllY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgorCQkJaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfeF9hdGhlbmFfbGliPSIkY2ZfbGliIgorCQkJCWJyZWFrCisJCQlmaQorCQkJTElCUz0iJGNmX3NhdmUiCisJCWZpCisJZG9uZQorZG9uZQorCitpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfbGliIiA7IHRoZW4KKwl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IFVuYWJsZSB0byBzdWNjZXNzZnVsbHkgbGluayBBdGhlbmEgbGlicmFyeSAoLWwkY2ZfeF9hdGhlbmFfcm9vdCkgd2l0aCB0ZXN0IHByb2dyYW0iIDE+JjI7IGV4aXQgMTsgfQorZmkKKworCitjZl94X2F0aGVuYV9MSUJTPWBlY2hvICJIQVZFX0xJQl8kY2ZfeF9hdGhlbmEiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCitjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfeF9hdGhlbmFfTElCUyAxCitFT0YKKworCisKKworCisKK2ZvciBhY19wcm9nIGluIHhjdXJzZXMtY29uZmlnCitkbworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjM4MzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX1hDVVJTRVNfQ09ORklHJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2FzZSAiJFhDVVJTRVNfQ09ORklHIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF9YQ1VSU0VTX0NPTkZJRz0iJFhDVVJTRVNfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgPzovKikJCQkgCisgIGFjX2N2X3BhdGhfWENVUlNFU19DT05GSUc9IiRYQ1VSU0VTX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcGF0aF9YQ1VSU0VTX0NPTkZJRz0iJGFjX2Rpci8kYWNfd29yZCIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKK2VzYWMKK2ZpCitYQ1VSU0VTX0NPTkZJRz0iJGFjX2N2X3BhdGhfWENVUlNFU19DT05GSUciCitpZiB0ZXN0IC1uICIkWENVUlNFU19DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhY190IiIkWENVUlNFU19DT05GSUciIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCit0ZXN0IC1uICIkWENVUlNFU19DT05GSUciICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkWENVUlNFU19DT05GSUciIHx8IFhDVVJTRVNfQ09ORklHPSJub25lIgorCisKK2lmIHRlc3QgIiRYQ1VSU0VTX0NPTkZJRyIgIT0gbm9uZSA7IHRoZW4KKworQ1BQRkxBR1M9ImAkWENVUlNFU19DT05GSUcgLS1jZmxhZ3NgICRDUFBGTEFHUyIKK0xJQlM9ImAkWENVUlNFU19DT05GSUcgLS1saWJzYCAkTElCUyIKKworY2ZfY3ZfbGliX1hDdXJzZXM9eWVzCisKK2Vsc2UKKworTERGTEFHUz0iJExERkxBR1MgJFhfTElCUyIKKwordGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgljaGVja2luZyBhZGRpdGlvbnMgdG8gQ0ZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2NDMzOiB0ZXN0aW5nIGNoZWNraW5nIGFkZGl0aW9ucyB0byBDRkxBR1MgLi4uIiAxPiY1CisKKworY2ZfY2hlY2tfY2ZsYWdzPSIkQ0ZMQUdTIgorY2ZfY2hlY2tfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkWF9DRkxBR1MKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGQgdG8gXCRDRkxBR1MgJGNmX25ld19jZmxhZ3MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjY0OTU6IHRlc3RpbmcgYWRkIHRvIFwkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIC4uLiIgMT4mNQorCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjY1MDQ6IHRlc3RpbmcgYWRkIHRvIFwkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyAuLi4iIDE+JjUKKworCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGQgdG8gXCRFWFRSQV9DUFBGTEFHUyAkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2NTEzOiB0ZXN0aW5nIGFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgLi4uIiAxPiY1CisKKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKKworCisKK2lmIHRlc3QgIiRjZl9jaGVja19jZmxhZ3MiICE9ICIkQ0ZMQUdTIiA7IHRoZW4KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY1MjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8gd29ybGQiKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NTMxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCXRlc3QtY29tcGlsZSBmYWlsZWQuICBVbmRvaW5nIGNoYW5nZSB0byBcJENGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjUzOTogdGVzdGluZyB0ZXN0LWNvbXBpbGUgZmFpbGVkLiAgVW5kb2luZyBjaGFuZ2UgdG8gXCRDRkxBR1MgLi4uIiAxPiY1CisKKworCSBpZiB0ZXN0ICIkY2ZfY2hlY2tfY3BwZmxhZ3MiICE9ICIkQ1BQRkxBR1MiIDsgdGhlbgorCQkgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglidXQga2VlcGluZyBjaGFuZ2UgdG8gXCRDUFBGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjU0NTogdGVzdGluZyBidXQga2VlcGluZyBjaGFuZ2UgdG8gXCRDUFBGTEFHUyAuLi4iIDE+JjUKKworCisJIGZpCisJIENGTEFHUz0iJGNmX2NoZWNrX2ZsYWdzIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFhPcGVuRGlzcGxheSBpbiAtbFgxMSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjU1NTogY2hlY2tpbmcgZm9yIFhPcGVuRGlzcGxheSBpbiAtbFgxMSIgPiY1CithY19saWJfdmFyPWBlY2hvIFgxMSdfJ1hPcGVuRGlzcGxheSB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxYMTEgJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY1NjMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBYT3BlbkRpc3BsYXkoKTsKKworaW50IG1haW4oKSB7CitYT3BlbkRpc3BsYXkoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY1NzQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9Ii1sWDExICRMSUJTIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBYQ3Vyc2VzIGxpYnJhcnkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY1OTU6IGNoZWNraW5nIGZvciBYQ3Vyc2VzIGxpYnJhcnkiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X2xpYl9YQ3Vyc2VzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitMSUJTPSItbFhDdXJzZXMgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NjAyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHhjdXJzZXMuaD4KK2NoYXIgKlhDdXJzZXNQcm9ncmFtTmFtZSA9ICJ0ZXN0IjsKKworaW50IG1haW4oKSB7CitYQ3Vyc2VzRXhpdCgpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY2MTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2xpYl9YQ3Vyc2VzPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9saWJfWEN1cnNlcz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2xpYl9YQ3Vyc2VzIiAxPiY2CisKK2ZpCisKK2lmIHRlc3QgJGNmX2N2X2xpYl9YQ3Vyc2VzID0geWVzIDsgdGhlbgorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVTklYIDEKK0VPRgorCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFhDVVJTRVMgMQorRU9GCisKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9YQ1VSU0VTIDEKK0VPRgorCitlbHNlCisJeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBDYW5ub3QgbGluayB3aXRoIFhDdXJzZXMiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworCTs7Citlc2FjCisKKworCitjYXNlICRjZl9jdl9zY3JlZW4gaW4gIyh2aQorcGRjdXJzZXMpICModmkKKwk7OworKikKKwkjIGxvb2sgZm9yIGN1cnNlcy1yZWxhdGVkIGxpYnJhcmllcworCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBuZXdfcGFuZWwgaW4gLWxwYW5lbCRjZl9jdl9saWJ0eXBlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NjU3OiBjaGVja2luZyBmb3IgbmV3X3BhbmVsIGluIC1scGFuZWwkY2ZfY3ZfbGlidHlwZSIgPiY1CithY19saWJfdmFyPWBlY2hvIHBhbmVsJGNmX2N2X2xpYnR5cGUnXyduZXdfcGFuZWwgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1scGFuZWwkY2ZfY3ZfbGlidHlwZSAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NjY1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgbmV3X3BhbmVsKCk7CisKK2ludCBtYWluKCkgeworbmV3X3BhbmVsKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2Njc2OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHBhbmVsJGNmX2N2X2xpYnR5cGUgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKyAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfbGliIDEKK0VPRgorCisgIExJQlM9Ii1scGFuZWwkY2ZfY3ZfbGlidHlwZSAkTElCUyIKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKwllY2hvICRhY19uICJjaGVja2luZyBmb3IgbWVudV9kcml2ZXIgaW4gLWxtZW51JGNmX2N2X2xpYnR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY3MDQ6IGNoZWNraW5nIGZvciBtZW51X2RyaXZlciBpbiAtbG1lbnUkY2ZfY3ZfbGlidHlwZSIgPiY1CithY19saWJfdmFyPWBlY2hvIG1lbnUkY2ZfY3ZfbGlidHlwZSdfJ21lbnVfZHJpdmVyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbG1lbnUkY2ZfY3ZfbGlidHlwZSAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NzEyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgbWVudV9kcml2ZXIoKTsKKworaW50IG1haW4oKSB7CittZW51X2RyaXZlcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjcyMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBtZW51JGNmX2N2X2xpYnR5cGUgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKyAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfbGliIDEKK0VPRgorCisgIExJQlM9Ii1sbWVudSRjZl9jdl9saWJ0eXBlICRMSUJTIgorCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmb3JtX2RyaXZlciBpbiAtbGZvcm0kY2ZfY3ZfbGlidHlwZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Njc1MTogY2hlY2tpbmcgZm9yIGZvcm1fZHJpdmVyIGluIC1sZm9ybSRjZl9jdl9saWJ0eXBlIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gZm9ybSRjZl9jdl9saWJ0eXBlJ18nZm9ybV9kcml2ZXIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZm9ybSRjZl9jdl9saWJ0eXBlICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY3NTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBmb3JtX2RyaXZlcigpOworCitpbnQgbWFpbigpIHsKK2Zvcm1fZHJpdmVyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NzcwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIGZvcm0kY2ZfY3ZfbGlidHlwZSB8IHNlZCAtZSAncy9bXmEtekEtWjAtOV9dL18vZycgXAorICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9saWIgMQorRU9GCisKKyAgTElCUz0iLWxmb3JtJGNmX2N2X2xpYnR5cGUgJExJQlMiCisKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKKwkjIGxvb2sgZm9yIGN1cnNlcy1yZWxhdGVkIGhlYWRlcnMKKwlmb3IgYWNfaGRyIGluIFwKKwkJbmNfYWxsb2MuaCBcCisJCW5vbWFjcm9zLmggXAorCQlmb3JtLmggXAorCQltZW51LmggXAorCQlwYW5lbC5oIFwKKwkJCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjgwOTogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY4MTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjY4MTk6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2hkciAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisJOzsKK2VzYWMKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2ODQ5OiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfc2lnbmFsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjg1NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgc2lnbmFsCisjdW5kZWYgc2lnbmFsCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkICgqc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOworI2Vsc2UKK3ZvaWQgKCpzaWduYWwgKCkpICgpOworI2VuZGlmCisKK2ludCBtYWluKCkgeworaW50IGk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njg3MTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9zaWduYWw9aW50CitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfc2lnbmFsIiAxPiY2CitjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAorRU9GCisKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Njg5MTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl9zdGRjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjg5NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6NjkwNDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2OTIxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY5MzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjk2MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorI2RlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50IG1haW4gKCkgeyBpbnQgaTsgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQoraWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKSB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkgZXhpdCgyKTsKK2V4aXQgKDApOyB9CisKK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2OTcxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1mciBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCitmaQorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfc3RkYyIgMT4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFNURENfSEVBREVSUyAxCitFT0YKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY5OTU6IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfdGltZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcwMDAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgoraW50IG1haW4oKSB7CitzdHJ1Y3QgdG0gKnRwOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcwMDk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfaGVhZGVyX3RpbWUiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorRU9GCisKK2ZpCisKK2ZvciBhY19oZHIgaW4gXAorZ2V0b3B0LmggXAorbG9jYWxlLmggXAorc3RkYXJnLmggXAorc3lzL2lvY3RsLmggXAorc3lzL3NlbGVjdC5oIFwKK3N5cy90aW1lLmggXAordGVybWlvcy5oIFwKK3VuaXN0ZC5oIFwKKworZG8KK2FjX3NhZmU9YGVjaG8gIiRhY19oZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjcwNDI6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MDQ3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkYWNfaGRyPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MDUyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9oZHI9SEFWRV9gZWNobyAkYWNfaGRyIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9oZHIgMQorRU9GCisgCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK2RvbmUKKworCitmb3IgYWNfZnVuYyBpbiBcCitnZXR0aW1lb2ZkYXkgXAorbWJsZW4gXAorbWJybGVuIFwKK21icnRvd2MgXAorbWJzcnRvd2NzIFwKK21ic3Rvd2NzIFwKK21idG93YyBcCitzdHJkdXAgXAord2NzcnRvbWJzIFwKK3djc3RvbWJzIFwKKworZG8KK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfZnVuYyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzA5MzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jXyRhY19mdW5jJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzA5OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYygpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5jKCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorY2hva2UgbWUKKyNlbHNlCiskYWNfZnVuYygpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTIxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5jPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY18kYWNfZnVuYz1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJyRhY19mdW5jYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfZnVuYz1IQVZFX2BlY2hvICRhY19mdW5jIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfZnVuYyAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2UgbXVzdCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzE0ODogY2hlY2tpbmcgaWYgd2UgbXVzdCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb24nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcxNTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKKworCWxvbmcgeCA9IHdpbm5zdHIoc3Rkc2NyLCAiIiwgMCk7CisJaW50IHgxLCB5MTsKKwlnZXRiZWd5eChzdGRzY3IsIHkxLCB4MSkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTY2OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbj1ubworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MTc0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKKworCWxvbmcgeCA9IHdpbm5zdHIoc3Rkc2NyLCAiIiwgMCk7CisJaW50IHgxLCB5MTsKKwlnZXRiZWd5eChzdGRzY3IsIHkxLCB4MSkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTg3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbj15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb249dW5rbm93bgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbiIgMT4mNgordGVzdCAkY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb24gPSB5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQiCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRlcm0uaCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzIwNjogY2hlY2tpbmcgZm9yIHRlcm0uaCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfdGVybV9oZWFkZXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKworIyBJZiB3ZSBmb3VuZCA8bmN1cnNlcy9jdXJzZXMuaD4sIGxvb2sgZm9yIDxuY3Vyc2VzL3Rlcm0uaD4sIGJ1dCBhbHdheXMgbG9vaworIyBmb3IgPHRlcm0uaD4gaWYgd2UgZG8gbm90IGZpbmQgdGhlIHZhcmlhbnQuCitmb3IgY2ZfaGVhZGVyIGluIFwKKwlgZWNobyAke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofSB8IHNlZCAtZSAncyUvLiolLyUnYHRlcm0uaCBcCisJdGVybS5oCitkbworCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcyMTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JHtjZl9oZWFkZXJ9PgoraW50IG1haW4oKSB7CitXSU5ET1cgKngKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MjI4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfdGVybV9oZWFkZXI9JGNmX2hlYWRlcgorCSBicmVhaworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl90ZXJtX2hlYWRlcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZG9uZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3Rlcm1faGVhZGVyIiAxPiY2CisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluICModmkKK3Rlcm0uaCkgIyh2aQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1RFUk1fSCAxCitFT0YKKworCTs7CituY3Vyc2VzL3Rlcm0uaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX1RFUk1fSCAxCitFT0YKKworCTs7CituY3Vyc2Vzdy90ZXJtLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU1dfVEVSTV9IIDEKK0VPRgorCisJOzsKK2VzYWMKKworCisKKworZm9yIGNmX2Z1bmMgaW4gXAorY2hnYXQgXAorY29sb3Jfc2V0IFwKK2ZpbHRlciBcCitnZXRiZWd4IFwKK2dldGN1cnggXAorZ2V0bWF4eCBcCitnZXRuc3RyIFwKK2dldHBhcnggXAorZ2V0d2luIFwKK212dmxpbmUgXAorbXZ3dmxpbmUgXAorbmFwbXMgXAorcHV0d2luIFwKK3Jlc2l6ZV90ZXJtIFwKK3Jlc2l6ZXRlcm0gXAorcmlwb2ZmbGluZSBcCitzZXR1cHRlcm0gXAorc2xrX2NvbG9yIFwKK3Nsa19pbml0IFwKK3Rlcm1hdHRycyBcCit0Z2V0ZW50IFwKK3RpZ2V0bnVtIFwKK3RpZ2V0c3RyIFwKK3R5cGVhaGVhZCBcCit1c2VfZGVmYXVsdF9jb2xvcnMgXAordnNzY2FuZiBcCit3Y2hnYXQgXAord2luc3N0ciBcCit3cmVzaXplIFwKKworZG8KKwkKK2NmX3RyX2Z1bmM9YGVjaG8gIiRjZl9mdW5jIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAke2NmX2Z1bmN9IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MzA1OiBjaGVja2luZyBmb3IgJHtjZl9mdW5jfSIgPiY1CisJCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzMwNzogdGVzdGluZyAke2NmX2Z1bmN9IC4uLiIgMT4mNQorCisJaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X2Z1bmNfJGNmX2Z1bmMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwkJZXZhbCBjZl9yZXN1bHQ9JyRhY19jdl9mdW5jXyckY2ZfZnVuYworCQlpZiB0ZXN0ICIuJGNmX3Jlc3VsdCIgIT0gIi5ubyI7IHRoZW4KKwkJCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDczMTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZkZWYgSEFWRV9YQ1VSU0VTCisjaW5jbHVkZSA8eGN1cnNlcy5oPgorY2hhciAqIFhDdXJzZXNQcm9ncmFtTmFtZSA9ICJ0ZXN0IjsKKyNlbHNlCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoSEFWRV9OQ1VSU0VTV19URVJNX0gpCisjaW5jbHVkZSA8bmN1cnNlc3cvdGVybS5oPgorI2Vsc2UKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgZGVmaW5lZChIQVZFX05DVVJTRVNfVEVSTV9IKQorI2luY2x1ZGUgPG5jdXJzZXMvdGVybS5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RFUk1fSAorI2luY2x1ZGUgPHRlcm0uaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgoraW50IG1haW4oKSB7CisKKyNpZm5kZWYgJHtjZl9mdW5jfQorbG9uZyBmb28gPSAobG9uZykoJiR7Y2ZfZnVuY30pOworJHtjZl9jdl9tYWluX3JldHVybi1yZXR1cm59KGZvbyA9PSAwKTsKKyNlbmRpZgorCQkJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzM0NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJZmkKKwkJZXZhbCAnY2ZfY3ZfZnVuY18nJGNmX2Z1bmMnPSRjZl9yZXN1bHQnCisJCitmaQorCisJIyB1c2UgdGhlIGNvbXB1dGVkL3JldHJpZXZlZCBjYWNoZS12YWx1ZToKKwlldmFsICdjZl9yZXN1bHQ9JGNmX2N2X2Z1bmNfJyRjZl9mdW5jCisJZWNobyAiJGFjX3QiIiRjZl9yZXN1bHQiIDE+JjYKKwlpZiB0ZXN0ICRjZl9yZXN1bHQgIT0gbm87IHRoZW4KKwkJY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgSEFWRV8ke2NmX3RyX2Z1bmN9IDEKK0VPRgorCisJZmkKK2RvbmUKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbmN1cnNlcyBleHRlbmRlZCBmdW5jdGlvbnMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjczNzM6IGNoZWNraW5nIGZvciBuY3Vyc2VzIGV4dGVuZGVkIGZ1bmN0aW9ucyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDczNzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKKworCSh2b2lkKSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMgKDAsIDApOworCSh2b2lkKSBjdXJzZXNfdmVyc2lvbiAoKTsKKwkodm9pZCkgZGVmaW5lX2tleSAoMCwgMCk7CisJKHZvaWQpIGlzX3Rlcm1fcmVzaXplZCAoMCwgMCk7CisJKHZvaWQpIGtleV9kZWZpbmVkICgwKTsKKwkodm9pZCkga2V5Ym91bmQgKDAsIDApOworCSh2b2lkKSBrZXlvayAoMCwgMCk7CisJKHZvaWQpIHJlc2l6ZV90ZXJtICgwLCAwKTsKKwkodm9pZCkgcmVzaXpldGVybSAoMCwgMCk7CisJKHZvaWQpIHVzZV9kZWZhdWx0X2NvbG9ycyAoKTsKKwkodm9pZCkgdXNlX2V4dGVuZGVkX25hbWVzICgwKTsKKwkodm9pZCkgd3Jlc2l6ZSAoMCwgMCwgMCk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzM5OTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3M9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X25jdXJzZXNfZXh0X2Z1bmNzPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3MiIDE+JjYKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX2V4dF9mdW5jcyIgIT0gbm8gJiYgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfRVhUX0ZVTkNTIDEKK0VPRgorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB3aWRlLWNoYXJhY3RlciBmdW5jdGlvbnMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc0MTk6IGNoZWNraW5nIGZvciB3aWRlLWNoYXJhY3RlciBmdW5jdGlvbnMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3dpZGVjaGFyX2Z1bmNzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NDI1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7CisKKwlzdGF0aWMgd2NoYXJfdCBzcmNfd2NoYXJbMl07CisJc3RhdGljIGNjaGFyX3QgZHN0X2NjaGFyOworCXNldGNjaGFyKCZkc3RfY2NoYXIsIHNyY193Y2hhciwgQV9OT1JNQUwsIDAsICh2b2lkICopIDApOworCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc0Mzc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3dpZGVjaGFyX2Z1bmNzPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl93aWRlY2hhcl9mdW5jcz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3dpZGVjaGFyX2Z1bmNzIiAxPiY2CitpZiB0ZXN0ICIkY2ZfY3Zfd2lkZWNoYXJfZnVuY3MiICE9IG5vIDsgdGhlbgorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfV0lERUNfU1VQUE9SVCAxCitFT0YKKworZWxzZQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfV0lERUNfU1VQUE9SVCAwCitFT0YKKworZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBpZiBzeXMvdGltZS5oIHdvcmtzIHdpdGggc3lzL3NlbGVjdC5oIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NDY1OiBjaGVja2luZyBpZiBzeXMvdGltZS5oIHdvcmtzIHdpdGggc3lzL3NlbGVjdC5oIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9zeXNfdGltZV9zZWxlY3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc0NzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisKK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzQ4NjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3N5c190aW1lX3NlbGVjdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisgICAgIAorZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9zeXNfdGltZV9zZWxlY3QiIDE+JjYKK3Rlc3QgIiRjZl9jdl9zeXNfdGltZV9zZWxlY3QiID0geWVzICYmIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NZU19USU1FX1NFTEVDVCAxCitFT0YKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBmdW5jdGlvbiBjdXJzZXNfdmVyc2lvbiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzUwNzogY2hlY2tpbmcgZm9yIGZ1bmN0aW9uIGN1cnNlc192ZXJzaW9uIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uPXVua25vd24KK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzUxNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkKK3sKKwljaGFyIHRlbXBbMTAyNF07CisJc3ByaW50Zih0ZW1wLCAiJXNcbiIsIGN1cnNlc192ZXJzaW9uKCkpOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm4tcmV0dXJufSgwKTsKK30KKworRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc1Mjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK3RoZW4KKyAgY2ZfY3ZfZnVuY19jdXJzZXNfdmVyc2lvbj15ZXMKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLWZyIGNvbmZ0ZXN0KgorICBjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uPW5vCisKK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCitybSAtZiBjb3JlCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb24iIDE+JjYKK3Rlc3QgIiRjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uIiA9IHllcyAmJiBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9DVVJTRVNfVkVSU0lPTiAxCitFT0YKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBhcnJheSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzU1MzogY2hlY2tpbmcgZm9yIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGFycmF5IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9jdXJzZXNfYWNzX21hcCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2ZfY3ZfY3Vyc2VzX2Fjc19tYXA9dW5rbm93bgorZm9yIG5hbWUgaW4gYWNzX21hcCBfYWNzX21hcCBfX2Fjc19tYXAgX25jX2Fjc19tYXAKK2RvCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NTYyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorCitpbnQgbWFpbigpIHsKKworJG5hbWVbJ2snXSA9IEFDU19QTFVTCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NTczOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9jdXJzZXNfYWNzX21hcD0kbmFtZTsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QqCitkb25lCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfY3Vyc2VzX2Fjc19tYXAiIDE+JjYKKwordGVzdCAiJGNmX2N2X2N1cnNlc19hY3NfbWFwIiAhPSB1bmtub3duICYmIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIENVUlNFU19BQ1NfQVJSQVkgJGNmX2N2X2N1cnNlc19hY3NfbWFwCitFT0YKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB3aWRlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGFycmF5IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NTk0OiBjaGVja2luZyBmb3Igd2lkZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBhcnJheSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfY3Vyc2VzX3dhY3NfbWFwJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJY2ZfY3ZfY3Vyc2VzX3dhY3NfbWFwPXVua25vd24KKwlmb3IgbmFtZSBpbiB3YWNzX21hcCBfd2Fjc19tYXAgX193YWNzX21hcCBfbmNfd2FjcworCWRvCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzYwMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZW5kaWYKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworJG5hbWVbJ2snXSA9ICpXQUNTX1BMVVMKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NjE0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9jdXJzZXNfd2Fjc19tYXA9JG5hbWUKKwkgYnJlYWsKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QqCisJZG9uZQorZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9jdXJzZXNfd2Fjc19tYXAiIDE+JjYKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgdHlwZSBhdHRyX3QgaW4gJHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc2MzA6IGNoZWNraW5nIGZvciB0eXBlIGF0dHJfdCBpbiAke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofSIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NjMyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNlbmRpZgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7CisKK2F0dHJfdCBmb28KKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2NDU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZWNobyAiJGFjX3QiIiRjZl9yZXN1bHQiIDE+JjYKK2lmIHRlc3QgJGNmX3Jlc3VsdCA9IHllcyA7IHRoZW4KKwkKK2NmX3Jlc3VsdD1gZWNobyAiaGF2ZV90eXBlX2F0dHJfdCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwljYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfcmVzdWx0IDEKK0VPRgorCitlbHNlCisJY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYXR0cl90IGxvbmcKK0VPRgorCitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB0eXBlIG1ic3RhdGVfdCBpbiAke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzY3MzogY2hlY2tpbmcgZm9yIHR5cGUgbWJzdGF0ZV90IGluICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9IiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc2NzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2VuZGlmCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKKworbWJzdGF0ZV90IGZvbworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzY4ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitlY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgoraWYgdGVzdCAkY2ZfcmVzdWx0ID0geWVzIDsgdGhlbgorCQorY2ZfcmVzdWx0PWBlY2hvICJoYXZlX3R5cGVfbWJzdGF0ZV90IiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCWNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRjZl9yZXN1bHQgMQorRU9GCisKK2Vsc2UKKwljYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBtYnN0YXRlX3QgbG9uZworRU9GCisKK2ZpCisKKworVEVTVF9BUkdTPSIkTElCUyIKK0xJQlM9CisKKwordHJhcCAnJyAxIDIgMTUKK2NhdCA+IGNvbmZjYWNoZSA8PFxFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLiAgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLgorIyBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIEJ5IGRlZmF1bHQsIGNvbmZpZ3VyZSB1c2VzIC4vY29uZmlnLmNhY2hlIGFzIHRoZSBjYWNoZSBmaWxlLAorIyBjcmVhdGluZyBpdCBpZiBpdCBkb2VzIG5vdCBleGlzdCBhbHJlYWR5LiAgWW91IGNhbiBnaXZlIGNvbmZpZ3VyZQorIyB0aGUgLS1jYWNoZS1maWxlPUZJTEUgb3B0aW9uIHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZSBmaWxlOyB0aGF0IGlzCisjIHdoYXQgY29uZmlndXJlIGRvZXMgd2hlbiBpdCBjYWxscyBjb25maWd1cmUgc2NyaXB0cyBpbgorIyBzdWJkaXJlY3Rvcmllcywgc28gdGhleSBzaGFyZSB0aGUgY2FjaGUuCisjIEdpdmluZyAtLWNhY2hlLWZpbGU9L2Rldi9udWxsIGRpc2FibGVzIGNhY2hpbmcsIGZvciBkZWJ1Z2dpbmcgY29uZmlndXJlLgorIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQgdGhlCisjIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworRU9GCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKyhzZXQpIDI+JjEgfAorICBjYXNlIGAoYWNfc3BhY2U9JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorICAqYWNfc3BhY2U9XCAqKQorICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUgc3Vic3RpdHV0aW9uCisgICAgIyB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICBzZWQgLW4gXAorICAgICAgLWUgInMvJy8nXFxcXCcnL2ciIFwKKyAgICAgIC1lICJzL15cXChbYS16QS1aMC05X10qX2N2X1thLXpBLVowLTlfXSpcXCk9XFwoLipcXCkvXFwxPVwke1xcMT0nXFwyJ30vcCIKKyAgICA7OworICAqKQorICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgc2VkIC1uIC1lICdzL15cKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlwpPVwoLipcKS9cMT0ke1wxPVwyfS9wJworICAgIDs7CisgIGVzYWMgPj4gY29uZmNhY2hlCitpZiBjbXAgLXMgJGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuCisgIDoKK2Vsc2UKKyAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorICAgIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAgIGNhdCBjb25mY2FjaGUgPiAkY2FjaGVfZmlsZQorICBlbHNlCisgICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3RyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1CisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCisjIEFueSBhc3NpZ25tZW50IHRvIFZQQVRIIGNhdXNlcyBTdW4gbWFrZSB0byBvbmx5IGV4ZWN1dGUKKyMgdGhlIGZpcnN0IHNldCBvZiBkb3VibGUtY29sb24gcnVsZXMsIHNvIHJlbW92ZSBpdCBpZiBub3QgbmVlZGVkLgorIyBJZiB0aGVyZSBpcyBhIGNvbG9uIGluIHRoZSBwYXRoLCB3ZSBuZWVkIHRvIGtlZXAgaXQuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9W146XSokL2QnCitmaQorCit0cmFwICdybSAtZiAkQ09ORklHX1NUQVRVUyBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1CisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKKyMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorCitlY2hvIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTCitybSAtZiAkQ09ORklHX1NUQVRVUworY2F0ID4gJENPTkZJR19TVEFUVVMgPDxFT0YKKyMhIC9iaW4vc2gKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIFRoaXMgZGlyZWN0b3J5IHdhcyBjb25maWd1cmVkIGFzIGZvbGxvd3MsCisjIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIworIyAkMCAkYWNfY29uZmlndXJlX2FyZ3MKKyMKKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiAuL2NvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCithY19jc191c2FnZT0iVXNhZ2U6ICRDT05GSUdfU1RBVFVTIFstLXJlY2hlY2tdIFstLXZlcnNpb25dIFstLWhlbHBdIgorZm9yIGFjX29wdGlvbgorZG8KKyAgY2FzZSAiXCRhY19vcHRpb24iIGluCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGVjaG8gInJ1bm5pbmcgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIKKyAgICBleGVjIFwke0NPTkZJR19TSEVMTC0vYmluL3NofSAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24gOzsKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYpCisgICAgZWNobyAiJENPTkZJR19TVEFUVVMgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMy4yMDAzMDkyNyIKKyAgICBleGl0IDAgOzsKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtLWgpCisgICAgZWNobyAiXCRhY19jc191c2FnZSI7IGV4aXQgMCA7OworICAqKSBlY2hvICJcJGFjX2NzX3VzYWdlIjsgZXhpdCAxIDs7CisgIGVzYWMKK2RvbmUKKworYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKKwordHJhcCAncm0gLWZyIGBlY2hvICJNYWtlZmlsZSBuY3Vyc2VzX2NmZy5oOm5jdXJzZXNfdHN0LmhpbiIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKworIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KK3NlZCAncy8lQC9AQC87IHMvQCUvQEAvOyBzLyVnXCQvQGcvOyAvQGdcJC9zL1tcXFxcJiVdL1xcXFwmL2c7Cisgcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKKyRhY192cHN1YgorJGV4dHJhc3ViCitzJUBTSEVMTEAlJFNIRUxMJWcKK3MlQENGTEFHU0AlJENGTEFHUyVnCitzJUBDUFBGTEFHU0AlJENQUEZMQUdTJWcKK3MlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworcyVARkZMQUdTQCUkRkZMQUdTJWcKK3MlQERFRlNAJSRERUZTJWcKK3MlQExERkxBR1NAJSRMREZMQUdTJWcKK3MlQExJQlNAJSRMSUJTJWcKK3MlQGV4ZWNfcHJlZml4QCUkZXhlY19wcmVmaXglZworcyVAcHJlZml4QCUkcHJlZml4JWcKK3MlQHByb2dyYW1fdHJhbnNmb3JtX25hbWVAJSRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lJWcKK3MlQGJpbmRpckAlJGJpbmRpciVnCitzJUBzYmluZGlyQCUkc2JpbmRpciVnCitzJUBsaWJleGVjZGlyQCUkbGliZXhlY2RpciVnCitzJUBkYXRhZGlyQCUkZGF0YWRpciVnCitzJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnCitzJUBzaGFyZWRzdGF0ZWRpckAlJHNoYXJlZHN0YXRlZGlyJWcKK3MlQGxvY2Fsc3RhdGVkaXJAJSRsb2NhbHN0YXRlZGlyJWcKK3MlQGxpYmRpckAlJGxpYmRpciVnCitzJUBpbmNsdWRlZGlyQCUkaW5jbHVkZWRpciVnCitzJUBvbGRpbmNsdWRlZGlyQCUkb2xkaW5jbHVkZWRpciVnCitzJUBpbmZvZGlyQCUkaW5mb2RpciVnCitzJUBtYW5kaXJAJSRtYW5kaXIlZworcyVAaG9zdEAlJGhvc3QlZworcyVAaG9zdF9hbGlhc0AlJGhvc3RfYWxpYXMlZworcyVAaG9zdF9jcHVAJSRob3N0X2NwdSVnCitzJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKK3MlQGhvc3Rfb3NAJSRob3N0X29zJWcKK3MlQFNFVF9NQUtFQCUkU0VUX01BS0UlZworcyVAQ0NAJSRDQyVnCitzJUBDUFBAJSRDUFAlZworcyVAQVdLQCUkQVdLJWcKK3MlQENDX0dfT1BUQCUkQ0NfR19PUFQlZworcyVAQ0NfU0hBUkVEX09QVFNAJSRDQ19TSEFSRURfT1BUUyVnCitzJUBERlRfREVQX1NVRkZJWEAlJERGVF9ERVBfU1VGRklYJWcKK3MlQERGVF9PQkpfU1VCRElSQCUkREZUX09CSl9TVUJESVIlZworcyVAREZUX1VQUl9NT0RFTEAlJERGVF9VUFJfTU9ERUwlZworcyVATERAJSRMRCVnCitzJUBMREZMQUdTX1NIQVJFREAlJExERkxBR1NfU0hBUkVEJWcKK3MlQExERkxBR1NfU1RBVElDQCUkTERGTEFHU19TVEFUSUMlZworcyVATERfTU9ERUxAJSRMRF9NT0RFTCVnCitzJUBMRF9TSEFSRURfT1BUU0AlJExEX1NIQVJFRF9PUFRTJWcKK3MlQExJQlRPT0xAJSRMSUJUT09MJWcKK3MlQExJQl9DTEVBTkAlJExJQl9DTEVBTiVnCitzJUBMSUJfQ09NUElMRUAlJExJQl9DT01QSUxFJWcKK3MlQExJQl9MSU5LQCUkTElCX0xJTkslZworcyVATElOS19URVNUU0AlJExJTktfVEVTVFMlZworcyVATElOVEAlJExJTlQlZworcyVATElOVF9PUFRTQCUkTElOVF9PUFRTJWcKK3MlQExPQ0FMX0xERkxBR1NAJSRMT0NBTF9MREZMQUdTJWcKK3MlQE1BVEhfTElCQCUkTUFUSF9MSUIlZworcyVAUFRIUkVBREAlJFBUSFJFQUQlZworcyVAVEVTVF9BUkdTQCUkVEVTVF9BUkdTJWcKK3MlQFRFU1RfREVQU0AlJFRFU1RfREVQUyVnCitzJUBURVNUX0xJQlNAJSRURVNUX0xJQlMlZworcyVAVElORk9fQVJHU0AlJFRJTkZPX0FSR1MlZworcyVAY2ZfY3ZfYWJpX3ZlcnNpb25AJSRjZl9jdl9hYmlfdmVyc2lvbiVnCitzJUBjZl9jdl9yZWxfdmVyc2lvbkAlJGNmX2N2X3JlbF92ZXJzaW9uJWcKK3MlQEVYRUVYVEAlJEVYRUVYVCVnCitzJUBPQkpFWFRAJSRPQkpFWFQlZworcyVARVhUUkFfQ1BQRkxBR1NAJSRFWFRSQV9DUFBGTEFHUyVnCitzJUBFQ0hPX0xUQCUkRUNIT19MVCVnCitzJUBFQ0hPX0xEQCUkRUNIT19MRCVnCitzJUBSVUxFX0NDQCUkUlVMRV9DQyVnCitzJUBTSE9XX0NDQCUkU0hPV19DQyVnCitzJUBFQ0hPX0NDQCUkRUNIT19DQyVnCitzJUBFWFRSQV9DRkxBR1NAJSRFWFRSQV9DRkxBR1MlZworcyVAWF9DRkxBR1NAJSRYX0NGTEFHUyVnCitzJUBYX1BSRV9MSUJTQCUkWF9QUkVfTElCUyVnCitzJUBYX0xJQlNAJSRYX0xJQlMlZworcyVAWF9FWFRSQV9MSUJTQCUkWF9FWFRSQV9MSUJTJWcKK3MlQFhDVVJTRVNfQ09ORklHQCUkWENVUlNFU19DT05GSUclZworCitDRU9GCitFT0YKKworY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgorCisjIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGludG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aAorIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCithY19tYXhfc2VkX2NtZHM9OTAgIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzZWQgc2NyaXB0LgorYWNfZmlsZT0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4KK2FjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorYWNfZW5kPSRhY19tYXhfc2VkX2NtZHMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorYWNfbW9yZV9saW5lcz06CithY19zZWRfY21kcz0iIgord2hpbGUgJGFjX21vcmVfbGluZXM7IGRvCisgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgorICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4gY29uZnRlc3QucyRhY19maWxlCisgIGVsc2UKKyAgICBzZWQgIiR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKyAgZmkKKyAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LnMkYWNfZmlsZTsgdGhlbgorICAgIGFjX21vcmVfbGluZXM9ZmFsc2UKKyAgICBybSAtZiBjb25mdGVzdC5zJGFjX2ZpbGUKKyAgZWxzZQorICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKyAgICAgIGFjX3NlZF9jbWRzPSJzZWQgLWYgY29uZnRlc3QucyRhY19maWxlIgorICAgIGVsc2UKKyAgICAgIGFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgY29uZnRlc3QucyRhY19maWxlIgorICAgIGZpCisgICAgYWNfZmlsZT1gZXhwciAkYWNfZmlsZSArIDFgCisgICAgYWNfYmVnPSRhY19lbmQKKyAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2NtZHNgCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisgIGFjX3NlZF9jbWRzPWNhdAorZmkKK0VPRgorCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKworQ09ORklHX0ZJTEVTPVwke0NPTkZJR19GSUxFUy0iTWFrZWZpbGUifQorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCitmb3IgYWNfZmlsZSBpbiAuLiAkQ09ORklHX0ZJTEVTOyBkbyBpZiB0ZXN0ICJ4JGFjX2ZpbGUiICE9IHguLjsgdGhlbgorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqOiopIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlW146XSo6JSUnYAorICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworICBlc2FjCisKKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIsIHRvcF9zcmNkaXIsIGFuZCBJTlNUQUxMIGZvciBzdWJkaXJlY3Rvcmllcy4KKworICAjIFJlbW92ZSBsYXN0IHNsYXNoIGFuZCBhbGwgdGhhdCBmb2xsb3dzIGl0LiAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgZGlybmFtZS4KKyAgYWNfZGlyPWBlY2hvICRhY19maWxlfHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgIyBUaGUgZmlsZSBpcyBpbiBhIHN1YmRpcmVjdG9yeS4KKyAgICB0ZXN0ICEgLWQgIiRhY19kaXIiICYmIG1rZGlyICIkYWNfZGlyIgorICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyVeXC4vJSUnYCIKKyAgICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICAgIGFjX2RvdHM9YGVjaG8gJGFjX2Rpcl9zdWZmaXh8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgIGVsc2UKKyAgICBhY19kaXJfc3VmZml4PSBhY19kb3RzPQorICBmaQorCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgIC4pICBzcmNkaXI9LgorICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuIHRvcF9zcmNkaXI9LgorICAgICAgZWxzZSB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2A7IGZpIDs7CisgIC8qKSBzcmNkaXI9IiRhY19naXZlbl9zcmNkaXIkYWNfZGlyX3N1ZmZpeCI7IHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICopICMgUmVsYXRpdmUgcGF0aC4KKyAgICBzcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3VmZml4IgorICAgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgZXNhYworCisKKyAgZWNobyBjcmVhdGluZyAiJGFjX2ZpbGUiCisgIHJtIC1mICIkYWNfZmlsZSIKKyAgY29uZmlndXJlX2lucHV0PSJHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIGBlY2hvICRhY19maWxlX2lufHNlZCAncyUuKi8lJSdgIGJ5IGNvbmZpZ3VyZS4iCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqTWFrZWZpbGUqKSBhY19jb21zdWI9IjFpXFwKKyMgJGNvbmZpZ3VyZV9pbnB1dCIgOzsKKyAgKikgYWNfY29tc3ViPSA7OworICBlc2FjCisKKyAgYWNfZmlsZV9pbnB1dHM9YGVjaG8gJGFjX2ZpbGVfaW58c2VkIC1lICJzJV4lJGFjX2dpdmVuX3NyY2Rpci8lIiAtZSAicyU6JSAkYWNfZ2l2ZW5fc3JjZGlyLyVnImAKKyAgc2VkIC1lICIkYWNfY29tc3ViCitzJUBjb25maWd1cmVfaW5wdXRAJSRjb25maWd1cmVfaW5wdXQlZworcyVAc3JjZGlyQCUkc3JjZGlyJWcKK3MlQHRvcF9zcmNkaXJAJSR0b3Bfc3JjZGlyJWcKKyIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4gJGFjX2ZpbGUKK2ZpOyBkb25lCitybSAtZiBjb25mdGVzdC5zKgorCisjIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgTkFNRSBDIFZBTFVFIEQiLCB3aGVyZQorIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorIworIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorYWNfZEE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qZGVmaW5lWyAJXVsgCV0qXCknCithY19kQj0nXChbIAldWyAJXSpcKVteIAldKiVcMSNcMicKK2FjX2RDPSdcMycKK2FjX2REPSclZycKKyMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGggdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY191QT0ncyVeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKK2FjX3VCPSdcKFsgCV1cKSVcMSNcMmRlZmluZVwzJworYWNfdUM9JyAnCithY191RD0nXDQlZycKKyMgYWNfZSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY19lQT0ncyVeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKK2FjX2VCPSckJVwxI1wyZGVmaW5lXDMnCithY19lQz0nICcKK2FjX2VEPSclZycKKworaWYgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiAhPSBzZXQ7IHRoZW4KK0VPRgorY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCisgIENPTkZJR19IRUFERVJTPSJuY3Vyc2VzX2NmZy5oOm5jdXJzZXNfdHN0LmhpbiIKK0VPRgorY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgorZmkKK2ZvciBhY19maWxlIGluIC4uICRDT05GSUdfSEVBREVSUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KKyAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICBjYXNlICIkYWNfZmlsZSIgaW4KKyAgKjoqKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJVteOl0qOiUlJ2AKKyAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKyAgKikgYWNfZmlsZV9pbj0iJHthY19maWxlfS5pbiIgOzsKKyAgZXNhYworCisgIGVjaG8gY3JlYXRpbmcgJGFjX2ZpbGUKKworICBybSAtZiBjb25mdGVzdC5mcmFnIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm91dAorICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorICBjYXQgJGFjX2ZpbGVfaW5wdXRzID4gY29uZnRlc3QuaW4KKworRU9GCisKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgbGlzdCBvZiAjZGVmaW5lJ3MuICBXZSB3b24ndCB1c2UgaXQgYXMgYSBzZWQKKyMgc2NyaXB0LCBidXQgYXMgZGF0YSB0byBpbnNlcnQgd2hlcmUgd2Ugc2VlIEBERUZTQC4gIFdlIGV4cGVjdCBBQ19TQVZFX0RFRlMgdG8KKyMgYmUgZWl0aGVyICdjYXQnIG9yICdzb3J0Jy4KK2NhdCBjb25mZGVmcy5oID5jb25mdGVzdC52YWxzCisKKyMgQnJlYWsgdXAgY29uZnRlc3QudmFscyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbgorIyB0aGUgc2l6ZSBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvby4KKworcm0gLWYgY29uZnRlc3QudGFpbAorZWNobyAnICBybSAtZiBjb25mdGVzdC5mcmFnJyA+PiAkQ09ORklHX1NUQVRVUword2hpbGUgOgorZG8KKyAgYWNfbGluZXM9YGdyZXAgLWMgLiBjb25mdGVzdC52YWxzYAorICAjIGdyZXAgLWMgZ2l2ZXMgZW1wdHkgb3V0cHV0IGZvciBhbiBlbXB0eSBmaWxlIG9uIHNvbWUgQUlYIHN5c3RlbXMuCisgIGlmIHRlc3QgLXogIiRhY19saW5lcyIgfHwgdGVzdCAiJGFjX2xpbmVzIiAtZXEgMDsgdGhlbiBicmVhazsgZmkKKyAgIyBXcml0ZSBjaHVua3Mgb2YgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byBjb25mdGVzdC5mcmFnLgorICBlY2hvICcgIGNhdCA+PiBjb25mdGVzdC5mcmFnIDw8Q0VPRicgPj4gJENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC52YWxzID4+ICRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YnID4+ICRDT05GSUdfU1RBVFVTCisgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC52YWxzID4gY29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC52YWxzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudmFscworZG9uZQorcm0gLWYgY29uZnRlc3QudmFscworCisjIFJ1biBzZWQgdG8gc3Vic3RpdHV0ZSB0aGUgY29udGVudHMgb2YgY29uZnRlc3QuZnJhZyBpbnRvIGNvbmZ0ZXN0LmluIGF0IHRoZQorIyBtYXJrZXIgQERFRlNALgorZWNobyAnICBjYXQgPj4gY29uZnRlc3QuZWRpdCA8PENFT0YKKy9AREVGU0AvciBjb25mdGVzdC5mcmFnCisvQERFRlNAL2QKK0NFT0YKK3NlZCAtZiBjb25mdGVzdC5lZGl0IGNvbmZ0ZXN0LmluID4gY29uZnRlc3Qub3V0CitybSAtZiBjb25mdGVzdC5pbgorbXYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0LmluCitybSAtZiBjb25mdGVzdC5lZGl0IGNvbmZ0ZXN0LmZyYWcKKycgPj4gJENPTkZJR19TVEFUVVMKKworCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaAorICBlY2hvICIvKiAkYWNfZmlsZS4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4gICovIiA+IGNvbmZ0ZXN0LmgKKyAgY2F0IGNvbmZ0ZXN0LmluID4+IGNvbmZ0ZXN0LmgKKyAgcm0gLWYgY29uZnRlc3QuaW4KKyAgaWYgY21wIC1zICRhY19maWxlIGNvbmZ0ZXN0LmggMj4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICIkYWNfZmlsZSBpcyB1bmNoYW5nZWQiCisgICAgcm0gLWYgY29uZnRlc3QuaAorICBlbHNlCisgICAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCisgICAgICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICAgICAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorICAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKyAgICBmaQorICAgIHJtIC1mICRhY19maWxlCisgICAgbXYgY29uZnRlc3QuaCAkYWNfZmlsZQorICBmaQorZmk7IGRvbmUKKworRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKyMgRXh0cmEgaW5pdGlhbGl6YXRpb24gY29tbWFuZHMsIGlmIGFueQorCitBV0s9IiRBV0siCitFQ0hPX0xEPSIkRUNIT19MRCIKKworRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisjIEV4dHJhIGNvbW1hbmRzLCBpZiBhbnkKKworCitmb3IgY2ZfZGlyIGluIC4KK2RvCisJaWYgdGVzdCAhIC1kICRzcmNkaXIvJGNmX2RpcjsgdGhlbgorCQljb250aW51ZQorCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvcHJvZ3JhbXM7IHRoZW4KKwkJJEFXSyAtZiAkc3JjZGlyL21rLXRlc3QuYXdrIEVDSE9fTElOSz0iJEVDSE9fTEQiICRzcmNkaXIvJGNmX2Rpci9wcm9ncmFtcyA+PiRjZl9kaXIvTWFrZWZpbGUKKwlmaQorZG9uZQorCisKKwljYXQgPj5NYWtlZmlsZSA8PFRFU1RfRU9GCisKKyMgVGhlc2UgcnVsZXMgYXJlIGdlbmVyYXRlZCBzbyB3ZSBkbyBub3QgcmVseSBvbiBzdWZmaXggcnVsZXMsIHdoaWNoIGRvIG5vdAorIyB3b3JrIGNvbnNpc3RlbnRseSBmb3IgZGlmZmVyZW50IG1ha2UtcHJvZ3JhbXMgKHRoZSAnXCQoTU9ERUwpLycgY29uZnVzZXMKKyMgc29tZSwgYW5kIHRoZSAnXCR4JyBjb25mdXNlcyBvdGhlcnMpLgorVEVTVF9FT0YKK0xJU1Q9YHNlZCAtZSAncy9bIAldLiovLycgLWUgJy9eWyNAXS9kJyAkc3JjZGlyL21vZHVsZXNgCitmb3IgTiBpbiAkTElTVAorZG8KKwljYXQgPj5NYWtlZmlsZSA8PFRFU1RfRU9GCisKK1wkKE1PREVMKS8kTi5vIDogJE4uYyBcXAorCXRlc3QucHJpdi5oIFxcCisJbmN1cnNlc19jZmcuaAorCUBlY2hvIGNvbXBpbGluZyAkTjsgXCQoQ0MpIC1jIFwkKENGTEFHU19ERUZBVUxUKSAkTi5jCitURVNUX0VPRgorZG9uZQorCitleGl0IDAKK0VPRgorY2htb2QgK3ggJENPTkZJR19TVEFUVVMKK3JtIC1mciBjb25mZGVmcyogJGFjX2NsZWFuX2ZpbGVzCit0ZXN0ICIkbm9fY3JlYXRlIiA9IHllcyB8fCAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkQ09ORklHX1NUQVRVUyB8fCBleGl0IDEKKwpkaWZmIC0tZ2l0IGEvdGVzdC9jb25maWd1cmUuaW4gYi90ZXN0L2NvbmZpZ3VyZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njk4NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb25maWd1cmUuaW4KQEAgLTAsMCArMSwyOTkgQEAKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorZG5sIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCitkbmwgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKK2RubCB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorZG5sIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCitkbmwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKK2RubCBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKK2RubCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKK2RubCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorZG5sIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCitkbmwgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorZG5sIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCitkbmwgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCitkbmwgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKK2RubCBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorZG5sIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubAorZG5sIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LCBldGMuCitkbmwKK2RubCAkSWQ6IGNvbmZpZ3VyZS5pbix2IDEuNjcgMjAwOC8wOS8wNiAyMjoxMDoyMyB0b20gRXhwICQKK2RubCBUaGlzIGlzIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24tc2NyaXB0IGZvciB0aGUgbmN1cnNlcyB0ZXN0IHByb2dyYW1zIHRoYXQKK2RubCBhbGxvd3MgdGhlIHRlc3QtZGlyZWN0b3J5IHRvIGJlIHNlcGFyYXRlbHkgY29uZmlndXJlZCBhZ2FpbnN0IGEgcmVmZXJlbmNlCitkbmwgc3lzdGVtIChpLmUuLCBzeXN2cjQgY3Vyc2VzKQorZG5sCitkbmwgSWYgeW91J3JlIGNvbmZpZ3VyaW5nIG5jdXJzZXMsIHlvdSBzaG91bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzY3JpcHQuCitkbmwgSXQncyBvbmx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorZG5sCitkbmwgU2VlIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19QUkVSRVEoMi4xMy4yMDAyMDIxMCkKK0FDX0lOSVQobmN1cnNlcy5jKQorQUNfQ09ORklHX0hFQURFUihuY3Vyc2VzX2NmZy5oOm5jdXJzZXNfdHN0LmhpbikKKworQ0ZfSU5IRVJJVF9TQ1JJUFQoY29uZmlnLmd1ZXNzKQorQ0ZfSU5IRVJJVF9TQ1JJUFQoY29uZmlnLnN1YikKK0NGX0NIRUNLX0NBQ0hFCisKK0FDX1BST0dfTUFLRV9TRVQKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ1BQCitBQ19QUk9HX0FXSworCitkbmwgVGhpbmdzIHRoYXQgd2UgZG9uJ3QgbmVlZCAob3IgbXVzdCBvdmVycmlkZSkgaWYgd2UncmUgbm90IGJ1aWxkaW5nIG5jdXJzZXMKK0NDX0dfT1BUPSItZyIJCQkJCUFDX1NVQlNUKENDX0dfT1BUKQorQ0NfU0hBUkVEX09QVFM9dW5rbm93bgkJCUFDX1NVQlNUKENDX1NIQVJFRF9PUFRTKQorQ1BQRkxBR1M9IiRDUFBGTEFHUyIJCQlBQ19TVUJTVChDUFBGTEFHUykKK0RGVF9ERVBfU1VGRklYPSIiCQkJCUFDX1NVQlNUKERGVF9ERVBfU1VGRklYKQorREZUX09CSl9TVUJESVI9YHB3ZHxzZWQgLWUnczouKi86OidgCUFDX1NVQlNUKERGVF9PQkpfU1VCRElSKQorREZUX1VQUl9NT0RFTD0iTk9STUFMIgkJCUFDX1NVQlNUKERGVF9VUFJfTU9ERUwpCitMRD0ibGQiCQkJCQkJCUFDX1NVQlNUKExEKQorTERGTEFHU19TSEFSRUQ9IiIJCQkJQUNfU1VCU1QoTERGTEFHU19TSEFSRUQpCitMREZMQUdTX1NUQVRJQz0iIgkJCQlBQ19TVUJTVChMREZMQUdTX1NUQVRJQykKK0xEX01PREVMPSIiCQkJCQkJQUNfU1VCU1QoTERfTU9ERUwpCitMRF9TSEFSRURfT1BUUz0iIgkJCQlBQ19TVUJTVChMRF9TSEFSRURfT1BUUykKK0xJQlRPT0w9IiIJCQkJCQlBQ19TVUJTVChMSUJUT09MKQorTElCX0NMRUFOPSIiCQkJCQlBQ19TVUJTVChMSUJfQ0xFQU4pCitMSUJfQ09NUElMRT0iIgkJCQkJQUNfU1VCU1QoTElCX0NPTVBJTEUpCitMSUJfTElOSz0nJHtDQ30nCQkJCUFDX1NVQlNUKExJQl9MSU5LKQorTElOS19URVNUUz0iIgkJCQkJQUNfU1VCU1QoTElOS19URVNUUykKK0xJTlQ9bGludAkJCQkJCUFDX1NVQlNUKExJTlQpCitMSU5UX09QVFM9IiIJCQkJCUFDX1NVQlNUKExJTlRfT1BUUykKK0xPQ0FMX0xERkxBR1M9IiIJCQkJQUNfU1VCU1QoTE9DQUxfTERGTEFHUykKK01BVEhfTElCPSItbG0iCQkJCQlBQ19TVUJTVChNQVRIX0xJQikKK1BUSFJFQUQ9Ii1sbSIJCQkJCUFDX1NVQlNUKFBUSFJFQUQpCitURVNUX0FSR1M9IiIJCQkJCUFDX1NVQlNUKFRFU1RfQVJHUykKK1RFU1RfREVQUz0iIgkJCQkJQUNfU1VCU1QoVEVTVF9ERVBTKQorVEVTVF9MSUJTPSIiCQkJCQlBQ19TVUJTVChURVNUX0xJQlMpCitUSU5GT19BUkdTPSckKExJQlNfQ1VSU0VTKScJCUFDX1NVQlNUKFRJTkZPX0FSR1MpCitjZl9jdl9hYmlfdmVyc2lvbj0iIgkJCUFDX1NVQlNUKGNmX2N2X2FiaV92ZXJzaW9uKQorY2ZfY3ZfcmVsX3ZlcnNpb249IiIJCQlBQ19TVUJTVChjZl9jdl9yZWxfdmVyc2lvbikKKworY2ZfY3Zfc2NyZWVuPWN1cnNlcworY2ZfY3ZfbGlidHlwZT0KKworQUNfRVhFRVhUCitBQ19PQkpFWFQKKworQ0ZfQU5TSV9DQ19SRVFECitDRl9HQ0NfQVRUUklCVVRFUworQ0ZfWE9QRU5fU09VUkNFCitBQ19DX0NPTlNUCitDRl9TSUdfQVRPTUlDX1QKKworQ0ZfRElTQUJMRV9FQ0hPCitDRl9FTkFCTEVfV0FSTklOR1MKKworQ0ZfV0lUSF9DVVJTRVNfRElSCisKK2RubCBTdW5PUyA0LngKK0FDX0FSR19XSVRIKDVsaWIsCisJWyAgLS13aXRoLTVsaWIgICAgICAgICAgICAgdXNlIFN1bk9TIHN5c3YtbGlicmFyaWVzXSwKKwlbTElCUz0iLUwvdXNyLzVsaWIgJExJQlMiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyLzVpbmNsdWRlIl0pCisKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBOY3Vyc2VzVywgaW5zdGFsbGVkIGluIGNvbnZlbnRpb25hbCBsb2NhdGlvbgorQUNfQVJHX1dJVEgobmN1cnNlc3csCisJWyAgLS13aXRoLW5jdXJzZXN3ICAgICAgICAgdXNlIHdpZGUgbmN1cnNlcy1saWJyYXJpZXMgKGluc3RhbGxlZCldLAorCVtjZl9jdl9zY3JlZW49bmN1cnNlc3ddLFsKKworZG5sIE5jdXJzZXMsIGluc3RhbGxlZCBpbiBjb252ZW50aW9uYWwgbG9jYXRpb24KK0FDX0FSR19XSVRIKG5jdXJzZXMsCisJWyAgLS13aXRoLW5jdXJzZXMgICAgICAgICAgdXNlIG5jdXJzZXMtbGlicmFyaWVzIChpbnN0YWxsZWQpXSwKKwlbY2ZfY3Zfc2NyZWVuPW5jdXJzZXNdLFsKKworQUNfQVJHX1dJVEgocGRjdXJzZXMsCisJWyAgLS13aXRoLXBkY3Vyc2VzICAgICAgICAgY29tcGlsZS9saW5rIHdpdGggcGRjdXJzZXMgWDExIGxpYnJhcnldLAorCVtjZl9jdl9zY3JlZW49cGRjdXJzZXNdKV0pXSkKKworY2FzZSAkY2ZfY3Zfc2NyZWVuIGluCitjdXJzZXMpCisJQ0ZfQ1VSU0VTX0NQUEZMQUdTCisJQ0ZfTkNVUlNFU19WRVJTSU9OCisJQ0ZfQ1VSU0VTX0xJQlMKKwk7OworbmN1cnNlcykKKwlDRl9OQ1VSU0VTX0NQUEZMQUdTCisJQ0ZfTkNVUlNFU19MSUJTCisJOzsKK25jdXJzZXN3KQorCWNmX2N2X2xpYnR5cGU9dworCUNGX1VURjhfTElCCisJQ0ZfTkNVUlNFU19DUFBGTEFHUyhuY3Vyc2VzdykKKwlDRl9OQ1VSU0VTX0xJQlMobmN1cnNlc3cpCisJOzsKK3BkY3Vyc2VzKSAjKHZpCisJQ0ZfUERDVVJTRVNfWDExCisJOzsKK2VzYWMKKworZG5sIElmIHdlJ3ZlIG5vdCBzcGVjaWZpZWQgYSBsaWJyYXJ5LCBhc3N1bWUgd2UncmUgdXNpbmcgc3lzdnI0IGxpYnJhcmllcworZG5sIGluc3RhbGxlZCBjb252ZW50aW9uYWxseSAoZS5nLiwgU3VuT1MgNS54IC0gc29sYXJpcykuCisKK2RubCBBdXRvY29uZiBidWlsZHMgdXAgdGhlICRMSUJTIGluIHJldmVyc2Ugb3JkZXIKKworY2FzZSAkY2ZfY3Zfc2NyZWVuIGluICModmkKK3BkY3Vyc2VzKSAjKHZpCisJOzsKKyopCisJIyBsb29rIGZvciBjdXJzZXMtcmVsYXRlZCBsaWJyYXJpZXMKKwlBQ19DSEVDS19MSUIocGFuZWwkY2ZfY3ZfbGlidHlwZSxuZXdfcGFuZWwpCisJQUNfQ0hFQ0tfTElCKG1lbnUkY2ZfY3ZfbGlidHlwZSxtZW51X2RyaXZlcikKKwlBQ19DSEVDS19MSUIoZm9ybSRjZl9jdl9saWJ0eXBlLGZvcm1fZHJpdmVyKQorCisJIyBsb29rIGZvciBjdXJzZXMtcmVsYXRlZCBoZWFkZXJzCisJQUNfQ0hFQ0tfSEVBREVSUyggXAorCQluY19hbGxvYy5oIFwKKwkJbm9tYWNyb3MuaCBcCisJCWZvcm0uaCBcCisJCW1lbnUuaCBcCisJCXBhbmVsLmggXAorCQkpCisJOzsKK2VzYWMKKworQUNfVFlQRV9TSUdOQUwKKworQUNfU1REQ19IRUFERVJTCitBQ19IRUFERVJfVElNRQorQUNfQ0hFQ0tfSEVBREVSUyggXAorZ2V0b3B0LmggXAorbG9jYWxlLmggXAorc3RkYXJnLmggXAorc3lzL2lvY3RsLmggXAorc3lzL3NlbGVjdC5oIFwKK3N5cy90aW1lLmggXAordGVybWlvcy5oIFwKK3VuaXN0ZC5oIFwKKykKKworQUNfQ0hFQ0tfRlVOQ1MoIFwKK2dldHRpbWVvZmRheSBcCittYmxlbiBcCittYnJsZW4gXAorbWJydG93YyBcCittYnNydG93Y3MgXAorbWJzdG93Y3MgXAorbWJ0b3djIFwKK3N0cmR1cCBcCit3Y3NydG9tYnMgXAord2NzdG9tYnMgXAorKQorCitDRl9DVVJTRVNfRlVOQ1MoIFwKK2NoZ2F0IFwKK2NvbG9yX3NldCBcCitmaWx0ZXIgXAorZ2V0YmVneCBcCitnZXRjdXJ4IFwKK2dldG1heHggXAorZ2V0bnN0ciBcCitnZXRwYXJ4IFwKK2dldHdpbiBcCittdnZsaW5lIFwKK212d3ZsaW5lIFwKK25hcG1zIFwKK3B1dHdpbiBcCityZXNpemVfdGVybSBcCityZXNpemV0ZXJtIFwKK3JpcG9mZmxpbmUgXAorc2V0dXB0ZXJtIFwKK3Nsa19jb2xvciBcCitzbGtfaW5pdCBcCit0ZXJtYXR0cnMgXAordGdldGVudCBcCit0aWdldG51bSBcCit0aWdldHN0ciBcCit0eXBlYWhlYWQgXAordXNlX2RlZmF1bHRfY29sb3JzIFwKK3Zzc2NhbmYgXAord2NoZ2F0IFwKK3dpbnNzdHIgXAord3Jlc2l6ZSBcCispCisKK0FDX0NBQ0hFX0NIRUNLKGZvciBuY3Vyc2VzIGV4dGVuZGVkIGZ1bmN0aW9ucyxjZl9jdl9uY3Vyc2VzX2V4dF9mdW5jcyxbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKK1sKKwkodm9pZCkgYXNzdW1lX2RlZmF1bHRfY29sb3JzICgwLCAwKTsKKwkodm9pZCkgY3Vyc2VzX3ZlcnNpb24gKCk7CisJKHZvaWQpIGRlZmluZV9rZXkgKDAsIDApOworCSh2b2lkKSBpc190ZXJtX3Jlc2l6ZWQgKDAsIDApOworCSh2b2lkKSBrZXlfZGVmaW5lZCAoMCk7CisJKHZvaWQpIGtleWJvdW5kICgwLCAwKTsKKwkodm9pZCkga2V5b2sgKDAsIDApOworCSh2b2lkKSByZXNpemVfdGVybSAoMCwgMCk7CisJKHZvaWQpIHJlc2l6ZXRlcm0gKDAsIDApOworCSh2b2lkKSB1c2VfZGVmYXVsdF9jb2xvcnMgKCk7CisJKHZvaWQpIHVzZV9leHRlbmRlZF9uYW1lcyAoMCk7CisJKHZvaWQpIHdyZXNpemUgKDAsIDAsIDApO10sCisJW2NmX2N2X25jdXJzZXNfZXh0X2Z1bmNzPXllc10sCisJW2NmX2N2X25jdXJzZXNfZXh0X2Z1bmNzPW5vXSkKK10pCit0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3MiICE9IG5vICYmIEFDX0RFRklORShOQ1VSU0VTX0VYVF9GVU5DUykKKworQUNfQ0FDSEVfQ0hFQ0soZm9yIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyxjZl9jdl93aWRlY2hhcl9mdW5jcyxbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKK1sKKwlzdGF0aWMgd2NoYXJfdCBzcmNfd2NoYXJbMl07CisJc3RhdGljIGNjaGFyX3QgZHN0X2NjaGFyOworCXNldGNjaGFyKCZkc3RfY2NoYXIsIHNyY193Y2hhciwgQV9OT1JNQUwsIDAsICh2b2lkICopIDApOworCV0sCisJW2NmX2N2X3dpZGVjaGFyX2Z1bmNzPXllc10sCisJW2NmX2N2X3dpZGVjaGFyX2Z1bmNzPW5vXSkKK10pCitpZiB0ZXN0ICIkY2ZfY3Zfd2lkZWNoYXJfZnVuY3MiICE9IG5vIDsgdGhlbgorCUFDX0RFRklORShVU0VfV0lERUNfU1VQUE9SVCwxKQorZWxzZQorCUFDX0RFRklORShVU0VfV0lERUNfU1VQUE9SVCwwKQorZmkKKworQ0ZfU1lTX1RJTUVfU0VMRUNUCitDRl9GVU5DX0NVUlNFU19WRVJTSU9OCitDRl9DVVJTRVNfQUNTX01BUAorQ0ZfQ1VSU0VTX1dBQ1NfTUFQCitDRl9DVVJTRVNfQ0hFQ0tfVFlQRShhdHRyX3QsbG9uZykKK0NGX0NVUlNFU19DSEVDS19UWVBFKG1ic3RhdGVfdCxsb25nKQorCitURVNUX0FSR1M9IiRMSUJTIgorTElCUz0KKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBQ19PVVRQVVQoTWFrZWZpbGUsWworQ0ZfUFJHX1JVTEVTKFskc3JjZGlyL21rLXRlc3QuYXdrIEVDSE9fTElOSz0iJEVDSE9fTEQiXSwgLikKKwljYXQgPj5NYWtlZmlsZSA8PFRFU1RfRU9GCisKKyMgVGhlc2UgcnVsZXMgYXJlIGdlbmVyYXRlZCBzbyB3ZSBkbyBub3QgcmVseSBvbiBzdWZmaXggcnVsZXMsIHdoaWNoIGRvIG5vdAorIyB3b3JrIGNvbnNpc3RlbnRseSBmb3IgZGlmZmVyZW50IG1ha2UtcHJvZ3JhbXMgKHRoZSAnXCQoTU9ERUwpLycgY29uZnVzZXMKKyMgc29tZSwgYW5kIHRoZSAnXCR4JyBjb25mdXNlcyBvdGhlcnMpLgorVEVTVF9FT0YKK0xJU1Q9YHNlZCAtZSAncy9bWyAJXV0uKi8vJyAtZSAnL15bWyNAXV0vZCcgJHNyY2Rpci9tb2R1bGVzYAorZm9yIE4gaW4gJExJU1QKK2RvCisJY2F0ID4+TWFrZWZpbGUgPDxURVNUX0VPRgorCitcJChNT0RFTCkvJE4ubyA6ICROLmMgXFwKKwl0ZXN0LnByaXYuaCBcXAorCW5jdXJzZXNfY2ZnLmgKKwlAZWNobyBjb21waWxpbmcgJE47IFwkKENDKSAtYyBcJChDRkxBR1NfREVGQVVMVCkgJE4uYworVEVTVF9FT0YKK2RvbmUKK10sWworQVdLPSIkQVdLIgorRUNIT19MRD0iJEVDSE9fTEQiCitdLGNhdCkKZGlmZiAtLWdpdCBhL3Rlc3QvZGVtb19hbHRrZXlzLmMgYi90ZXN0L2RlbW9fYWx0a2V5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDZhYzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2RlbW9fYWx0a2V5cy5jCkBAIC0wLDAgKzEsMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZGVtb19hbHRrZXlzLmMsdiAxLjggMjAwOC8wNC8xMiAyMjowNjoyMiB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgZGVmaW5lX2tleSgpIGZ1bmN0aW9uLgorICogVGhvbWFzIERpY2tleSAtIDIwMDUvMTAvMjIKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgTkNVUlNFU19FWFRfRlVOQ1MKKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIE1ZX0xPR0ZJTEUgImRlbW9fYWx0a2V5cy5sb2ciCisjZGVmaW5lIE1ZX0tFWVMgKEtFWV9NQVggKyAxKQorCisvKgorICogTG9nIHRoZSBtb3N0IHJlY2VudGx5LXdyaXR0ZW4gbGluZSB0byBvdXIgbG9nZmlsZQorICovCitzdGF0aWMgdm9pZAorbG9nX2xhc3RfbGluZShXSU5ET1cgKndpbikKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgeSwgeCwgbjsKKyAgICBjaGFyIHRlbXBbMjU2XTsKKworICAgIGlmICgoZnAgPSBmb3BlbihNWV9MT0dGSUxFLCAiYSIpKSAhPSAwKSB7CisJaW50IG5lZWQgPSBzaXplb2YodGVtcCkgLSAxOworCWlmIChuZWVkID4gQ09MUykKKwkgICAgbmVlZCA9IENPTFM7CisJZ2V0eXgod2luLCB5LCB4KTsKKwl3bW92ZSh3aW4sIHkgLSAxLCAwKTsKKwluID0gd2lubnN0cih3aW4sIHRlbXAsIG5lZWQpOworCXdoaWxlIChuLS0gPiAwKSB7CisJICAgIGlmIChpc3NwYWNlKFVDaGFyKHRlbXBbbl0pKSkKKwkJdGVtcFtuXSA9ICdcMCc7CisJICAgIGVsc2UKKwkJYnJlYWs7CisJfQorCXdtb3ZlKHdpbiwgeSwgeCk7CisJZnByaW50ZihmcCwgIiVzXG4iLCB0ZW1wKTsKKwlmY2xvc2UoZnApOworICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IG47CisgICAgaW50IGNoOworI2lmIEhBVkVfR0VUVElNRU9GREFZCisgICAgaW50IHNlY3MsIG1zZWNzOworICAgIHN0cnVjdCB0aW1ldmFsIGN1cnJlbnQsIHByZXZpb3VzOworI2VuZGlmCisKKyAgICB1bmxpbmsoTVlfTE9HRklMRSk7CisKKyAgICBuZXd0ZXJtKDAsIHN0ZG91dCwgc3RkaW4pOworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgIG1vdmUoMCwgMCk7CisKKyAgICAvKiB3ZSBkbyB0aGUgZGVmaW5lX2tleSgpIGNhbGxzIGFmdGVyIGtleXBhZCgpLCBzaW5jZSB0aGUgZmlyc3QgY2FsbCB0bworICAgICAqIGtleXBhZCgpIGluaXRpYWxpemVzIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEuCisgICAgICovCisgICAgZm9yIChuID0gMDsgbiA8IDI1NTsgKytuKSB7CisJY2hhciB0ZW1wWzEwXTsKKwlzcHJpbnRmKHRlbXAsICJcMDMzJWMiLCBuKTsKKwlkZWZpbmVfa2V5KHRlbXAsIG4gKyBNWV9LRVlTKTsKKyAgICB9CisgICAgZm9yIChuID0gS0VZX01JTjsgbiA8IEtFWV9NQVg7ICsrbikgeworCWNoYXIgKnZhbHVlOworCWlmICgodmFsdWUgPSBrZXlib3VuZChuLCAwKSkgIT0gMCkgeworCSAgICBjaGFyICp0ZW1wID0gdHlwZU1hbGxvYyhjaGFyLCBzdHJsZW4odmFsdWUpICsgMik7CisJICAgIHNwcmludGYodGVtcCwgIlwwMzMlcyIsIHZhbHVlKTsKKwkgICAgZGVmaW5lX2tleSh0ZW1wLCBuICsgTVlfS0VZUyk7CisJICAgIGZyZWUodGVtcCk7CisJICAgIGZyZWUodmFsdWUpOworCX0KKyAgICB9CisKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorICAgIGdldHRpbWVvZmRheSgmcHJldmlvdXMsIDApOworI2VuZGlmCisKKyAgICB3aGlsZSAoKGNoID0gZ2V0Y2goKSkgIT0gRVJSKSB7CisJYm9vbCBlc2NhcGVkID0gKGNoID49IE1ZX0tFWVMpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBrZXluYW1lKGVzY2FwZWQgPyAoY2ggLSBNWV9LRVlTKSA6IGNoKTsKKworI2lmIEhBVkVfR0VUVElNRU9GREFZCisJZ2V0dGltZW9mZGF5KCZjdXJyZW50LCAwKTsKKwlzZWNzID0gY3VycmVudC50dl9zZWMgLSBwcmV2aW91cy50dl9zZWM7CisJbXNlY3MgPSAoY3VycmVudC50dl91c2VjIC0gcHJldmlvdXMudHZfdXNlYykgLyAxMDAwOworCWlmIChtc2VjcyA8IDApIHsKKwkgICAgbXNlY3MgKz0gMTAwMDsKKwkgICAgLS1zZWNzOworCX0KKwlpZiAobXNlY3MgPj0gMTAwMCkgeworCSAgICBzZWNzICs9IG1zZWNzIC8gMTAwMDsKKwkgICAgbXNlY3MgJT0gMTAwMDsKKwl9CisJcHJpbnR3KCIlNmQuJTAzZCAiLCBzZWNzLCBtc2Vjcyk7CisJcHJldmlvdXMgPSBjdXJyZW50OworI2VuZGlmCisJcHJpbnR3KCJLZXljb2RlICVkLCBuYW1lICVzJXNcbiIsCisJICAgICAgIGNoLAorCSAgICAgICBlc2NhcGVkID8gIkVTQy0iIDogIiIsCisJICAgICAgIG5hbWUgIT0gMCA/IG5hbWUgOiAiPG51bGw+Iik7CisJbG9nX2xhc3RfbGluZShzdGRzY3IpOworCWNscnRvZW9sKCk7CisJaWYgKGNoID09ICdxJykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC9kZW1vX2RlZmtleS5jIGIvdGVzdC9kZW1vX2RlZmtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NWVmNTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2RlbW9fZGVma2V5LmMKQEAgLTAsMCArMSwyODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBkZW1vX2RlZmtleS5jLHYgMS4xOSAyMDA4LzA4LzA0IDE2OjI0OjQ3IHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBkZWZpbmVfa2V5KCkgZnVuY3Rpb24uCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwMi8xMS8yMworICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBOQ1VSU0VTX0VYVF9GVU5DUworCisjZGVmaW5lIE1ZX0xPR0ZJTEUgImRlbW9fZGVma2V5LmxvZyIKKworLyoKKyAqIExvZyB0aGUgbW9zdCByZWNlbnRseS13cml0dGVuIGxpbmUgdG8gb3VyIGxvZ2ZpbGUKKyAqLworc3RhdGljIHZvaWQKK2xvZ19sYXN0X2xpbmUoV0lORE9XICp3aW4pCit7CisgICAgRklMRSAqZnA7CisgICAgaW50IHksIHgsIG47CisgICAgY2hhciB0ZW1wWzI1Nl07CisKKyAgICBpZiAoKGZwID0gZm9wZW4oTVlfTE9HRklMRSwgImEiKSkgIT0gMCkgeworCWludCBuZWVkID0gc2l6ZW9mKHRlbXApIC0gMTsKKwlpZiAobmVlZCA+IENPTFMpCisJICAgIG5lZWQgPSBDT0xTOworCWdldHl4KHdpbiwgeSwgeCk7CisJd21vdmUod2luLCB5IC0gMSwgMCk7CisJbiA9IHdpbm5zdHIod2luLCB0ZW1wLCBuZWVkKTsKKwl3aGlsZSAobi0tID4gMCkgeworCSAgICBpZiAoaXNzcGFjZShVQ2hhcih0ZW1wW25dKSkpCisJCXRlbXBbbl0gPSAnXDAnOworCSAgICBlbHNlCisJCWJyZWFrOworCX0KKwl3bW92ZSh3aW4sIHksIHgpOworCWZwcmludGYoZnAsICIlc1xuIiwgdGVtcCk7CisJZmNsb3NlKGZwKTsKKyAgICB9Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgY2hhcmFjdGVyIHRvIHZpc2libGUgZm9ybS4KKyAqLworc3RhdGljIGNoYXIgKgordmlzaWNoYXIoaW50IGNoKQoreworICAgIHN0YXRpYyBjaGFyIHRlbXBbMTBdOworCisgICAgY2ggPSBVQ2hhcihjaCk7CisgICAgYXNzZXJ0KGNoID49IDAgJiYgY2ggPCAyNTYpOworICAgIGlmIChjaCA9PSAnXFwnKSB7CisJc3RyY3B5KHRlbXAsICJcXFxcIik7CisgICAgfSBlbHNlIGlmIChjaCA9PSAnXDAzMycpIHsKKwlzdHJjcHkodGVtcCwgIlxcRSIpOworICAgIH0gZWxzZSBpZiAoY2ggPCAnICcpIHsKKwlzcHJpbnRmKHRlbXAsICJcXCUwM28iLCBjaCk7CisgICAgfSBlbHNlIGlmIChjaCA+PSAxMjcpIHsKKwlzcHJpbnRmKHRlbXAsICJcXCUwM28iLCBjaCk7CisgICAgfSBlbHNlIHsKKwlzcHJpbnRmKHRlbXAsICIlYyIsIGNoKTsKKyAgICB9CisgICAgcmV0dXJuIHRlbXA7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIHZpc2libGUgZm9ybS4KKyAqLworc3RhdGljIGNoYXIgKgordmlzaWJsZShjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKyAgICB1bnNpZ25lZCBuZWVkID0gMTsKKyAgICBpbnQgcGFzczsKKyAgICBpbnQgbjsKKworICAgIGlmIChzdHJpbmcgIT0gMCAmJiAqc3RyaW5nICE9ICdcMCcpIHsKKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgKytwYXNzKSB7CisJICAgIGZvciAobiA9IDA7IHN0cmluZ1tuXSAhPSAnXDAnOyArK24pIHsKKwkJY2hhciB0ZW1wWzgwXTsKKwkJc3RyY3B5KHRlbXAsIHZpc2ljaGFyKHN0cmluZ1tuXSkpOworCQlpZiAocGFzcykKKwkJICAgIHN0cmNhdChyZXN1bHQsIHRlbXApOworCQllbHNlCisJCSAgICBuZWVkICs9IHN0cmxlbih0ZW1wKTsKKwkgICAgfQorCSAgICBpZiAoIXBhc3MpCisJCXJlc3VsdCA9IHR5cGVDYWxsb2MoY2hhciwgbmVlZCk7CisJfQorICAgIH0gZWxzZSB7CisJcmVzdWx0ID0gdHlwZUNhbGxvYyhjaGFyLCAxKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3JlYWxseV9kZWZpbmVfa2V5KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpuZXdfc3RyaW5nLCBpbnQgY29kZSkKK3sKKyAgICBpbnQgcmM7CisgICAgY29uc3QgY2hhciAqY29kZV9uYW1lID0ga2V5bmFtZShjb2RlKTsKKyAgICBjaGFyICpvbGRfc3RyaW5nOworICAgIGNoYXIgKnZpc19zdHJpbmcgPSAwOworICAgIGNoYXIgdGVtcFs4MF07CisKKyAgICBpZiAoY29kZV9uYW1lID09IDApIHsKKwlzcHJpbnRmKHRlbXAsICJLZXljb2RlICVkIiwgY29kZSk7CisJY29kZV9uYW1lID0gdGVtcDsKKyAgICB9CisKKyAgICBpZiAoKG9sZF9zdHJpbmcgPSBrZXlib3VuZChjb2RlLCAwKSkgIT0gMCkgeworCXdwcmludHcod2luLCAiJXMgaXMgJXNcbiIsCisJCWNvZGVfbmFtZSwKKwkJdmlzX3N0cmluZyA9IHZpc2libGUob2xkX3N0cmluZykpOworICAgIH0gZWxzZSB7CisJd3ByaW50dyh3aW4sICIlcyBpcyBub3QgYm91bmRcbiIsCisJCWNvZGVfbmFtZSk7CisgICAgfQorICAgIGxvZ19sYXN0X2xpbmUod2luKTsKKworICAgIGlmICh2aXNfc3RyaW5nICE9IDApIHsKKwlmcmVlKHZpc19zdHJpbmcpOworCXZpc19zdHJpbmcgPSAwOworICAgIH0KKworICAgIHZpc19zdHJpbmcgPSB2aXNpYmxlKG5ld19zdHJpbmcpOworICAgIGlmICgocmMgPSBrZXlfZGVmaW5lZChuZXdfc3RyaW5nKSkgPiAwKSB7CisJd3ByaW50dyh3aW4sICIlcyB3YXMgYm91bmQgdG8gJXNcbiIsIHZpc19zdHJpbmcsIGtleW5hbWUocmMpKTsKKwlsb2dfbGFzdF9saW5lKHdpbik7CisgICAgfSBlbHNlIGlmIChuZXdfc3RyaW5nICE9IDAgJiYgcmMgPCAwKSB7CisJd3ByaW50dyh3aW4sICIlcyBjb25mbGljdHMgd2l0aCBsb25nZXIgc3RyaW5nc1xuIiwgdmlzX3N0cmluZyk7CisJbG9nX2xhc3RfbGluZSh3aW4pOworICAgIH0KKyAgICByYyA9IGRlZmluZV9rZXkobmV3X3N0cmluZywgY29kZSk7CisgICAgaWYgKHJjID09IEVSUikgeworCXdwcmludHcod2luLCAiJXMgdW5jaGFuZ2VkXG4iLCBjb2RlX25hbWUpOworCWxvZ19sYXN0X2xpbmUod2luKTsKKyAgICB9IGVsc2UgaWYgKG5ld19zdHJpbmcgIT0gMCkgeworCXdwcmludHcod2luLCAiJXMgaXMgbm93IGJvdW5kIHRvICVzXG4iLAorCQl2aXNfc3RyaW5nLAorCQljb2RlX25hbWUpOworCWxvZ19sYXN0X2xpbmUod2luKTsKKyAgICB9IGVsc2UgaWYgKG9sZF9zdHJpbmcgIT0gMCkgeworCXdwcmludHcod2luLCAiJXMgZGVsZXRlZFxuIiwgY29kZV9uYW1lKTsKKwlsb2dfbGFzdF9saW5lKHdpbik7CisgICAgfQorICAgIGlmICh2aXNfc3RyaW5nICE9IDApCisJZnJlZSh2aXNfc3RyaW5nKTsKKyAgICBpZiAob2xkX3N0cmluZyAhPSAwKQorCWZyZWUob2xkX3N0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitkdXBsaWNhdGUoV0lORE9XICp3aW4sIE5DVVJTRVNfQ09OU1QgY2hhciAqbmFtZSwgaW50IGNvZGUpCit7CisgICAgY2hhciAqdmFsdWUgPSB0aWdldHN0cihuYW1lKTsKKworICAgIGlmICh2YWx1ZSAhPSAwKSB7CisJY29uc3QgY2hhciAqcHJlZml4ID0gMDsKKwljaGFyIHRlbXBbQlVGU0laXTsKKworCWlmICghc3RybmNtcCh2YWx1ZSwgIlwwMzNbIiwgMikpIHsKKwkgICAgcHJlZml4ID0gIlwwMzNPIjsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZhbHVlLCAiXDAzM08iLCAyKSkgeworCSAgICBwcmVmaXggPSAiXDAzM1siOworCX0KKwlpZiAocHJlZml4ICE9IDApIHsKKwkgICAgc3ByaW50Zih0ZW1wLCAiJXMlcyIsIHByZWZpeCwgdmFsdWUgKyAyKTsKKwkgICAgcmVhbGx5X2RlZmluZV9rZXkod2luLCB0ZW1wLCBjb2RlKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcmVkZWZpbmUoV0lORE9XICp3aW4sIGNoYXIgKnN0cmluZywgaW50IGNvZGUpCit7CisgICAgcmVhbGx5X2RlZmluZV9rZXkod2luLCBzdHJpbmcsIGNvZGUpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2RlZmluaXRpb24oV0lORE9XICp3aW4sIGludCBjb2RlKQoreworICAgIHJlYWxseV9kZWZpbmVfa2V5KHdpbiwgMCwgY29kZSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGNoYXIgKmZrZXlzWzEyXTsKKyAgICBpbnQgbjsKKyAgICBpbnQgY2g7CisgICAgV0lORE9XICp3aW47CisKKyAgICB1bmxpbmsoTVlfTE9HRklMRSk7CisKKyAgICBpbml0c2NyKCk7CisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHByaW50dygiVGhpcyBkZW1vIGlzIGJlc3Qgb24geHRlcm06IGl0IHJldmVyc2VzIHRoZSBkZWZpbml0aW9ucyBmb3IgZjEtZjEyLFxuIik7CisgICAgcHJpbnR3KCJhZGRzIGR1cGxpY2F0ZSBkZWZpbml0aW9ucyBmb3IgY3Vyc29yIGFwcGxpY2F0aW9uIGFuZCBub3JtYWwgbW9kZXMsXG4iKTsKKyAgICBwcmludHcoImFuZCByZW1vdmVzIGFueSBkZWZpbml0aW9ucyBmb3IgdGhlIG1pbmkga2V5cGFkLiAgVHlwZSBhbnkgb2YgdGhvc2U6XG4iKTsKKyAgICByZWZyZXNoKCk7CisKKyAgICB3aW4gPSBuZXd3aW4oTElORVMgLSAzLCBDT0xTLCAzLCAwKTsKKyAgICBzY3JvbGxvayh3aW4sIFRSVUUpOworICAgIGtleXBhZCh3aW4sIFRSVUUpOworICAgIHdtb3ZlKHdpbiwgMCwgMCk7CisKKyAgICAvKiB3ZSBkbyB0aGUgZGVmaW5lX2tleSgpIGNhbGxzIGFmdGVyIGtleXBhZCgpLCBzaW5jZSB0aGUgZmlyc3QgY2FsbCB0bworICAgICAqIGtleXBhZCgpIGluaXRpYWxpemVzIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEuCisgICAgICovCisgICAgZm9yIChuID0gMDsgbiA8IDEyOyArK24pIHsKKwljaGFyIG5hbWVbMTBdOworCXNwcmludGYobmFtZSwgImtmJWQiLCBuICsgMSk7CisJZmtleXNbbl0gPSB0aWdldHN0cihuYW1lKTsKKyAgICB9CisgICAgZm9yIChuID0gMDsgbiA8IDEyOyArK24pIHsKKwlyZWRlZmluZSh3aW4sIGZrZXlzWzExIC0gbl0sIEtFWV9GKG4gKyAxKSk7CisgICAgfQorCisgICAgZHVwbGljYXRlKHdpbiwgImtjdWIxIiwgS0VZX0xFRlQpOworICAgIGR1cGxpY2F0ZSh3aW4sICJrY3V1MSIsIEtFWV9VUCk7CisgICAgZHVwbGljYXRlKHdpbiwgImtjdWQxIiwgS0VZX0RPV04pOworICAgIGR1cGxpY2F0ZSh3aW4sICJrY3VmMSIsIEtFWV9SSUdIVCk7CisKKyAgICByZW1vdmVfZGVmaW5pdGlvbih3aW4sIEtFWV9BMSk7CisgICAgcmVtb3ZlX2RlZmluaXRpb24od2luLCBLRVlfQTMpOworICAgIHJlbW92ZV9kZWZpbml0aW9uKHdpbiwgS0VZX0IyKTsKKyAgICByZW1vdmVfZGVmaW5pdGlvbih3aW4sIEtFWV9DMSk7CisgICAgcmVtb3ZlX2RlZmluaXRpb24od2luLCBLRVlfQzMpOworCisgICAgcmVhbGx5X2RlZmluZV9rZXkod2luLCAiXDAzM08iLCAxMDIzKTsKKworICAgIHdoaWxlICgoY2ggPSB3Z2V0Y2god2luKSkgIT0gRVJSKSB7CisJY29uc3QgY2hhciAqbmFtZSA9IGtleW5hbWUoY2gpOworCXdwcmludHcod2luLCAiS2V5Y29kZSAlZCwgbmFtZSAlc1xuIiwKKwkJY2gsCisJCW5hbWUgIT0gMCA/IG5hbWUgOiAiPG51bGw+Iik7CisJbG9nX2xhc3RfbGluZSh3aW4pOworCXdjbHJ0b2VvbCh3aW4pOworCWlmIChjaCA9PSAncScpCisJICAgIGJyZWFrOworICAgIH0KKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSBuY3Vyc2VzIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvZGVtb19mb3Jtcy5jIGIvdGVzdC9kZW1vX2Zvcm1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2YTU3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZGVtb19mb3Jtcy5jCkBAIC0wLDAgKzEsNTM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZGVtb19mb3Jtcy5jLHYgMS4zMCAyMDA4LzEwLzE4IDIwOjM4OjIwIHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMgZnJvbSB0aGUgZm9ybSBsaWJyYXJ5LgorICogVGhvbWFzIERpY2tleSAtIDIwMDMvNC8yNgorICovCisvKgorVFlQRV9FTlVNCQkJLQorVFlQRV9SRUdFWFAJCQktCitkdXBfZmllbGQJCQktCitmaWVsZF9pbml0CQkJLQorZmllbGRfanVzdAkJCS0KK2ZpZWxkX3Rlcm0JCQktCitmb3JtX2luaXQJCQktCitmb3JtX29wdHMJCQktCitmb3JtX29wdHNfb2ZmCQkJLQorZm9ybV9vcHRzX29uCQkJLQorZm9ybV9yZXF1ZXN0X2J5X25hbWUJCS0KK2Zvcm1fdGVybQkJCS0KK2Zvcm1fdXNlcnB0cgkJCS0KK2ZyZWVfZmllbGR0eXBlCQkJLQorbGlua19maWVsZAkJCS0KK2xpbmtfZmllbGR0eXBlCQkJLQorbW92ZV9maWVsZAkJCS0KK25ld19wYWdlCQkJLQorcG9zX2Zvcm1fY3Vyc29yCQkJLQorc2V0X2ZpZWxkX2luaXQJCQktCitzZXRfZmllbGRfdGVybQkJCS0KK3NldF9maWVsZHR5cGVfYXJnCQktCitzZXRfZmllbGR0eXBlX2Nob2ljZQkJLQorc2V0X2Zvcm1fZmllbGRzCQkJLQorc2V0X2Zvcm1faW5pdAkJCS0KK3NldF9mb3JtX29wdHMJCQktCitzZXRfZm9ybV9wYWdlCQkJLQorc2V0X2Zvcm1fdGVybQkJCS0KK3NldF9mb3JtX3VzZXJwdHIJCS0KK3NldF9tYXhfZmllbGQJCQktCisqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfTElCRk9STQorCisjaW5jbHVkZSA8ZWRpdF9maWVsZC5oPgorCitzdGF0aWMgaW50IGRfb3B0aW9uID0gMDsKK3N0YXRpYyBpbnQgal92YWx1ZSA9IDA7CitzdGF0aWMgaW50IG1fdmFsdWUgPSAwOworc3RhdGljIGludCBvX3ZhbHVlID0gMDsKK3N0YXRpYyBjaGFyICp0X3ZhbHVlID0gMDsKKworc3RhdGljIEZJRUxEICoKK21ha2VfbGFiZWwoaW50IGZyb3csIGludCBmY29sLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmxhYmVsKQoreworICAgIEZJRUxEICpmID0gbmV3X2ZpZWxkKDEsIChpbnQpIHN0cmxlbihsYWJlbCksIGZyb3csIGZjb2wsIDAsIDApOworCisgICAgaWYgKGYpIHsKKwlzZXRfZmllbGRfYnVmZmVyKGYsIDAsIGxhYmVsKTsKKwlzZXRfZmllbGRfb3B0cyhmLCAoaW50KSAoZmllbGRfb3B0cyhmKSAmIH5PX0FDVElWRSkpOworICAgIH0KKyAgICByZXR1cm4gKGYpOworfQorCisvKgorICogRGVmaW5lIGVhY2ggZmllbGQgd2l0aCBhbiBleHRyYSBvbmUsIGZvciByZWZsZWN0aW5nICJhY3R1YWwiIHRleHQuCisgKi8KK3N0YXRpYyBGSUVMRCAqCittYWtlX2ZpZWxkKGludCBmcm93LCBpbnQgZmNvbCwgaW50IHJvd3MsIGludCBjb2xzKQoreworICAgIEZJRUxEICpmID0gbmV3X2ZpZWxkKHJvd3MsIGNvbHMsIGZyb3csIGZjb2wsIG9fdmFsdWUsIDEpOworCisgICAgaWYgKGYpIHsKKwlzZXRfZmllbGRfYmFjayhmLCBBX1VOREVSTElORSk7CisJLyoKKwkgKiBJZiAtaiBhbmQgLWQgb3B0aW9ucyBhcmUgY29tYmluZWQsIC1qIGxvc2VzLiAgSXQgaXMgZG9jdW1lbnRlZCBpbgorCSAqICJDaGFyYWN0ZXIgVXNlciBJbnRlcmZhY2UgUHJvZ3JhbW1pbmciLCBwYWdlIDEyLTE1IHRoYXQgc2V0dGluZworCSAqIE9fU1RBVElDIG9mZiBtYWtlcyB0aGUgZm9ybSBsaWJyYXJ5IGlnbm9yZSBqdXN0aWZpY2F0aW9uLgorCSAqLworCXNldF9maWVsZF9qdXN0KGYsIGpfdmFsdWUpOworCWlmIChkX29wdGlvbikgeworCSAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJCXNldF9maWVsZF9mb3JlKGYsIENPTE9SX1BBSVIoMikpOworCQlzZXRfZmllbGRfYmFjayhmLCBBX1VOREVSTElORSB8IENPTE9SX1BBSVIoMykpOworCSAgICB9IGVsc2UgeworCQlzZXRfZmllbGRfZm9yZShmLCBBX0JPTEQpOworCSAgICB9CisJICAgIC8qCisJICAgICAqIFRoZSBmaWVsZF9vcHRzX29mZigpIGNhbGwgZHVtcHMgY29yZSB3aXRoIFNvbGFyaXMgY3Vyc2VzLAorCSAgICAgKiBidXQgdGhhdCBpcyBhIGtub3duIGJ1ZyBpbiBTb2xhcmlzJyBmb3JtIGxpYnJhcnkgLVRECisJICAgICAqLworCSAgICBmaWVsZF9vcHRzX29mZihmLCBPX1NUQVRJQyk7CisJICAgIHNldF9tYXhfZmllbGQoZiwgbV92YWx1ZSk7CisJfQorCisJLyoKKwkgKiBUaGUgdXNlcnB0ciBpcyB1c2VkIGluIGVkaXRfZmllbGQuYydzIGluYWN0aXZlX2ZpZWxkKCkuCisJICovCisJc2V0X2ZpZWxkX3VzZXJwdHIoZiwgKHZvaWQgKikgKGxvbmcpIGZpZWxkX2JhY2soZikpOworCWlmICh0X3ZhbHVlKQorCSAgICBzZXRfZmllbGRfYnVmZmVyKGYsIDAsIHRfdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gKGYpOworfQorCitzdGF0aWMgdm9pZAorZGlzcGxheV9mb3JtKEZPUk0gKiBmKQoreworICAgIFdJTkRPVyAqdzsKKyAgICBpbnQgcm93cywgY29sczsKKworICAgIHNjYWxlX2Zvcm0oZiwgJnJvd3MsICZjb2xzKTsKKworICAgIC8qCisgICAgICogUHV0IHRoZSBmb3JtIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgZGlzcGxheSwgd2l0aCBqdXN0IGEgYm94CisgICAgICogYXJvdW5kIGl0LgorICAgICAqLworICAgIGlmICgodyA9IG5ld3dpbihyb3dzICsgMiwgY29scyArIDQsIDAsIDApKSAhPSAoV0lORE9XICopIDApIHsKKwlzZXRfZm9ybV93aW4oZiwgdyk7CisJc2V0X2Zvcm1fc3ViKGYsIGRlcndpbih3LCByb3dzLCBjb2xzLCAxLCAyKSk7CisJYm94KHcsIDAsIDApOworCWtleXBhZCh3LCBUUlVFKTsKKyAgICB9CisKKyAgICBpZiAocG9zdF9mb3JtKGYpICE9IEVfT0spCisJd3JlZnJlc2godyk7Cit9CisKK3N0YXRpYyB2b2lkCitlcmFzZV9mb3JtKEZPUk0gKiBmKQoreworICAgIFdJTkRPVyAqdyA9IGZvcm1fd2luKGYpOworICAgIFdJTkRPVyAqcyA9IGZvcm1fc3ViKGYpOworCisgICAgdW5wb3N0X2Zvcm0oZik7CisgICAgd2VyYXNlKHcpOworICAgIHdyZWZyZXNoKHcpOworICAgIGRlbHdpbihzKTsKKyAgICBkZWx3aW4odyk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2luc2VydF9tb2RlKGJvb2wgaW5zZXJ0X21vZGUpCit7CisgICAgbXZhZGRzdHIoNSwgNTcsIChpbnNlcnRfbW9kZQorCQkgICAgID8gImZvcm1fc3RhdHVzOiBpbnNlcnQgIgorCQkgICAgIDogImZvcm1fc3RhdHVzOiBvdmVybGF5IikpOworfQorCisjZGVmaW5lIE9fU0VMRUNUQUJMRSAoT19BQ1RJVkUgfCBPX1ZJU0lCTEUpCisKK3N0YXRpYyBGSUVMRCAqCithbm90aGVyX2ZpZWxkKEZPUk0gKiBmb3JtLCBGSUVMRCAqIGZpZWxkKQoreworICAgIEZJRUxEICoqZiA9IGZvcm1fZmllbGRzKGZvcm0pOworICAgIEZJRUxEICpyZXN1bHQgPSAwOworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgZltuXSAhPSAwOyArK24pIHsKKwlpZiAoZltuXSAhPSBmaWVsZCkgeworCSAgICByZXN1bHQgPSBmW25dOworCSAgICBmaWVsZF9vcHRzX29uKHJlc3VsdCwgT19TRUxFQ1RBQkxFKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitteV9mb3JtX2RyaXZlcihGT1JNICogZm9ybSwgaW50IGMpCit7CisgICAgc3RhdGljIGJvb2wgaW5zZXJ0X21vZGUgPSBUUlVFOworICAgIEZJRUxEICpmaWVsZDsKKworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgTVlfUVVJVDoKKwlpZiAoZm9ybV9kcml2ZXIoZm9ybSwgUkVRX1ZBTElEQVRJT04pID09IEVfT0spCisJICAgIHJldHVybiAoVFJVRSk7CisJYnJlYWs7CisgICAgY2FzZSBNWV9IRUxQOgorCWhlbHBfZWRpdF9maWVsZCgpOworCWJyZWFrOworICAgIGNhc2UgTVlfRURUX01PREU6CisJaWYgKChmaWVsZCA9IGN1cnJlbnRfZmllbGQoZm9ybSkpICE9IDApIHsKKwkgICAgc2V0X2N1cnJlbnRfZmllbGQoZm9ybSwgYW5vdGhlcl9maWVsZChmb3JtLCBmaWVsZCkpOworCSAgICBpZiAoZmllbGRfb3B0cyhmaWVsZCkgJiBPX0VESVQpIHsKKwkJZmllbGRfb3B0c19vZmYoZmllbGQsIE9fRURJVCk7CisJCXNldF9maWVsZF9zdGF0dXMoZmllbGQsIDApOworCSAgICB9IGVsc2UgeworCQlmaWVsZF9vcHRzX29uKGZpZWxkLCBPX0VESVQpOworCSAgICB9CisJICAgIHNldF9jdXJyZW50X2ZpZWxkKGZvcm0sIGZpZWxkKTsKKwl9CisJYnJlYWs7CisgICAgY2FzZSBNWV9JTlNfTU9ERToKKwkvKiB0aGVyZSBzaG91bGQgYmUgYSBmb3JtX3N0YXR1cygpIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXMgbm9uZSAqLworCWlmICghaW5zZXJ0X21vZGUpIHsKKwkgICAgaWYgKGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9JTlNfTU9ERSkgPT0gRV9PSykgeworCQlpbnNlcnRfbW9kZSA9IFRSVUU7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiAoZm9ybV9kcml2ZXIoZm9ybSwgUkVRX09WTF9NT0RFKSA9PSBFX09LKSB7CisJCWluc2VydF9tb2RlID0gRkFMU0U7CisJICAgIH0KKwl9CisJc2hvd19pbnNlcnRfbW9kZShpbnNlcnRfbW9kZSk7CisJcmVmcmVzaCgpOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJYmVlcCgpOworCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfY3VycmVudF9maWVsZChXSU5ET1cgKndpbiwgRk9STSAqIGZvcm0pCit7CisgICAgRklFTEQgKmZpZWxkOworICAgIEZJRUxEVFlQRSAqdHlwZTsKKyAgICBjaGFyICpidWZmZXI7CisgICAgaW50IG5idWY7CisgICAgaW50IGZpZWxkX3Jvd3MsIGZpZWxkX2NvbHMsIGZpZWxkX21heDsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwl3YmtnZCh3aW4sIENPTE9SX1BBSVIoMSkpOworICAgIH0KKyAgICB3ZXJhc2Uod2luKTsKKyAgICB3cHJpbnR3KHdpbiwgIkN1cnNvcjogJWQsJWQiLCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisgICAgaWYgKGRhdGFfYWhlYWQoZm9ybSkpCisJd2FkZHN0cih3aW4sICIgYWhlYWQiKTsKKyAgICBpZiAoZGF0YV9iZWhpbmQoZm9ybSkpCisJd2FkZHN0cih3aW4sICIgYmVoaW5kIik7CisgICAgd2FkZGNoKHdpbiwgJ1xuJyk7CisgICAgaWYgKChmaWVsZCA9IGN1cnJlbnRfZmllbGQoZm9ybSkpICE9IDApIHsKKwl3cHJpbnR3KHdpbiwgIlBhZ2UgJWQlcywgRmllbGQgJWQvJWQlczoiLAorCQlmb3JtX3BhZ2UoZm9ybSksCisJCW5ld19wYWdlKGZpZWxkKSA/ICIqIiA6ICIiLAorCQlmaWVsZF9pbmRleChmaWVsZCksIGZpZWxkX2NvdW50KGZvcm0pLAorCQlmaWVsZF9hcmcoZmllbGQpID8gIihhcmcpIiA6ICIiKTsKKwlpZiAoKHR5cGUgPSBmaWVsZF90eXBlKGZpZWxkKSkgIT0gMCkgeworCSAgICBpZiAodHlwZSA9PSBUWVBFX0FMTlVNKQorCQl3YWRkc3RyKHdpbiwgIkFMTlVNIik7CisJICAgIGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9BTFBIQSkKKwkJd2FkZHN0cih3aW4sICJBTFBIQSIpOworCSAgICBlbHNlIGlmICh0eXBlID09IFRZUEVfRU5VTSkKKwkJd2FkZHN0cih3aW4sICJFTlVNIik7CisJICAgIGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9JTlRFR0VSKQorCQl3YWRkc3RyKHdpbiwgIklOVEVHRVIiKTsKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKwkgICAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX0lQVjQpCisJCXdhZGRzdHIod2luLCAiSVBWNCIpOworI2VuZGlmCisJICAgIGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9OVU1FUklDKQorCQl3YWRkc3RyKHdpbiwgIk5VTUVSSUMiKTsKKwkgICAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX1JFR0VYUCkKKwkJd2FkZHN0cih3aW4sICJSRUdFWFAiKTsKKwkgICAgZWxzZQorCQl3YWRkc3RyKHdpbiwgIm90aGVyIik7CisJfQorCisJaWYgKGZpZWxkX29wdHMoZmllbGQpICYgT19FRElUKQorCSAgICB3YWRkc3RyKHdpbiwgIiBlZGl0YWJsZSIpOworCWVsc2UKKwkgICAgd2FkZHN0cih3aW4sICIgcmVhZG9ubHkiKTsKKworCWlmIChmaWVsZF9zdGF0dXMoZmllbGQpKQorCSAgICB3YWRkc3RyKHdpbiwgIiBtb2RpZmllZCIpOworCisJaWYgKGR5bmFtaWNfZmllbGRfaW5mbyhmaWVsZCwgJmZpZWxkX3Jvd3MsICZmaWVsZF9jb2xzLCAmZmllbGRfbWF4KQorCSAgICAhPSBFUlIpIHsKKwkgICAgd3ByaW50dyh3aW4sICIgc2l6ZSAlZHglZCAobWF4ICVkKSIsCisJCSAgICBmaWVsZF9yb3dzLCBmaWVsZF9jb2xzLCBmaWVsZF9tYXgpOworCX0KKworCXdhZGRjaCh3aW4sICcgJyk7CisJd2F0dHJzZXQod2luLCBmaWVsZF9mb3JlKGZpZWxkKSk7CisJd2FkZHN0cih3aW4sICJmb3JlIik7CisJd2F0dHJvZmYod2luLCBmaWVsZF9mb3JlKGZpZWxkKSk7CisKKwl3YWRkY2god2luLCAnLycpOworCisJd2F0dHJzZXQod2luLCBmaWVsZF9iYWNrKGZpZWxkKSk7CisJd2FkZHN0cih3aW4sICJiYWNrIik7CisJd2F0dHJvZmYod2luLCBmaWVsZF9iYWNrKGZpZWxkKSk7CisKKwl3cHJpbnR3KHdpbiwgIiwgcGFkICclYyciLAorCQlmaWVsZF9wYWQoZmllbGQpKTsKKworCXdhZGRzdHIod2luLCAiXG4iKTsKKwlmb3IgKG5idWYgPSAwOyBuYnVmIDw9IDI7ICsrbmJ1ZikgeworCSAgICBpZiAoKGJ1ZmZlciA9IGZpZWxkX2J1ZmZlcihmaWVsZCwgbmJ1ZikpICE9IDApIHsKKwkJd3ByaW50dyh3aW4sICJidWZmZXIgJWQ6IiwgbmJ1Zik7CisJCXdhdHRyc2V0KHdpbiwgQV9SRVZFUlNFKTsKKwkJd2FkZHN0cih3aW4sIGJ1ZmZlcik7CisJCXdhdHRyb2ZmKHdpbiwgQV9SRVZFUlNFKTsKKwkJd2FkZHN0cih3aW4sICJcbiIpOworCSAgICB9CisJfQorICAgIH0KKyAgICB3cmVmcmVzaCh3aW4pOworfQorCitzdGF0aWMgdm9pZAorZGVtb19mb3Jtcyh2b2lkKQoreworICAgIFdJTkRPVyAqdzsKKyAgICBGT1JNICpmb3JtOworICAgIEZJRUxEICpmWzEwMF07CQkvKiBGSVhNRSBtZW1zZXQgdG8gemVybyAqLworICAgIGludCBmaW5pc2hlZCA9IDAsIGM7CisgICAgdW5zaWduZWQgbiA9IDA7CisgICAgaW50IHBnOworICAgIFdJTkRPVyAqYWxzbzsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzayhBTExfTU9VU0VfRVZFTlRTLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorCisgICAgaGVscF9lZGl0X2ZpZWxkKCk7CisKKyAgICBtdmFkZHN0cig0LCA1NywgIkZvcm1zIEVudHJ5IFRlc3QiKTsKKyAgICBzaG93X2luc2VydF9tb2RlKFRSVUUpOworCisgICAgcmVmcmVzaCgpOworCisgICAgLyogZGVzY3JpYmUgdGhlIGZvcm0gKi8KKyAgICBtZW1zZXQoZiwgMCwgc2l6ZW9mKGYpKTsKKyAgICBmb3IgKHBnID0gMDsgcGcgPCA0OyArK3BnKSB7CisJY2hhciBsYWJlbFs4MF07CisJc3ByaW50ZihsYWJlbCwgIlNhbXBsZSBGb3JtIFBhZ2UgJWQiLCBwZyArIDEpOworCWZbbisrXSA9IG1ha2VfbGFiZWwoMCwgMTUsIGxhYmVsKTsKKwlzZXRfbmV3X3BhZ2UoZltuIC0gMV0sIFRSVUUpOworCisJc3dpdGNoIChwZykgeworCWRlZmF1bHQ6CisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMCwgIkxhc3QgTmFtZSIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDAsIDEsIDE4KTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMjAsICJGaXJzdCBOYW1lIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMjAsIDEsIDEyKTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMzQsICJNaWRkbGUgTmFtZSIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDM0LCAxLCAxMik7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMUEhBLCAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDAsICJMYXN0IE5hbWUiKTsKKwkgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAwLCAxLCAxOCk7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMUEhBLCAxKTsKKworCSAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDIwLCAiRmlyc3QgTmFtZSIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDIwLCAxLCAxMik7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMUEhBLCAxKTsKKworCSAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDM0LCAiTUkiKTsKKwkgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAzNCwgMSwgMSk7CisJICAgIHNldF9maWVsZF9wYWQoZltuIC0gMV0sICc/Jyk7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMUEhBLCAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDAsICJIb3N0IE5hbWUiKTsKKwkgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAwLCAxLCAxOCk7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMTlVNLCAxKTsKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCSAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDIwLCAiSVAgQWRkcmVzcyIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDIwLCAxLCAxMik7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0lQVjQsIDEpOworI2VuZGlmCisKKwkgICAgYnJlYWs7CisKKwljYXNlIDM6CisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMCwgIkZvdXIgZGlnaXRzIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMCwgMSwgMTgpOworCSAgICBzZXRfZmllbGRfdHlwZShmW24gLSAxXSwgVFlQRV9JTlRFR0VSLCA0LCAwLCAwKTsKKworCSAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDIwLCAiTnVtZXJpYyIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDIwLCAxLCAxMik7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX05VTUVSSUMsIDMsIC0xMDAwMC4wLCAxMDAwMDAwMDAuMCk7CisKKwkgICAgYnJlYWs7CisJfQorCisJZltuKytdID0gbWFrZV9sYWJlbCg1LCAwLCAiQ29tbWVudHMiKTsKKwlmW24rK10gPSBtYWtlX2ZpZWxkKDYsIDAsIDQsIDQ2KTsKKwlzZXRfZmllbGRfYnVmZmVyKGZbbiAtIDFdLCAwLCAiSEVMTE9cbldPUkxEISIpOworCXNldF9maWVsZF9idWZmZXIoZltuIC0gMV0sIDEsICJIZWxsb1xuV29ybGQhIik7CisgICAgfQorCisgICAgZltuKytdID0gKEZJRUxEICopIDA7CisKKyAgICBpZiAoKGZvcm0gPSBuZXdfZm9ybShmKSkgIT0gMCkgeworCisJZGlzcGxheV9mb3JtKGZvcm0pOworCisJdyA9IGZvcm1fd2luKGZvcm0pOworCWFsc28gPSBuZXd3aW4oZ2V0bWF4eShzdGRzY3IpIC0gZ2V0bWF4eSh3KSwgQ09MUywgZ2V0bWF4eSh3KSwgMCk7CisJc2hvd19jdXJyZW50X2ZpZWxkKGFsc28sIGZvcm0pOworCisJd2hpbGUgKCFmaW5pc2hlZCkgeworCSAgICBzd2l0Y2ggKGVkaXRfZmllbGQoZm9ybSwgJmMpKSB7CisJICAgIGNhc2UgRV9PSzoKKwkJYnJlYWs7CisJICAgIGNhc2UgRV9VTktOT1dOX0NPTU1BTkQ6CisJCWZpbmlzaGVkID0gbXlfZm9ybV9kcml2ZXIoZm9ybSwgYyk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQliZWVwKCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIHNob3dfY3VycmVudF9maWVsZChhbHNvLCBmb3JtKTsKKwl9CisKKwllcmFzZV9mb3JtKGZvcm0pOworCisJZnJlZV9mb3JtKGZvcm0pOworICAgIH0KKyAgICBmb3IgKGMgPSAwOyBmW2NdICE9IDA7IGMrKykKKwlmcmVlX2ZpZWxkKGZbY10pOworICAgIG5vcmF3KCk7CisgICAgbmwoKTsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzaygwLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IGRlbW9fZm9ybXMgW29wdGlvbnNdIgorCSwiIgorCSwiIC1kICAgICAgICBtYWtlIGZpZWxkcyBkeW5hbWljIgorCSwiIC1qIHZhbHVlICBqdXN0aWZ5ICgxPWxlZnQsIDI9Y2VudGVyLCAzPXJpZ2h0KSIKKwksIiAtbSB2YWx1ZSAgc2V0IG1heGltdW0gc2l6ZSBvZiBkeW5hbWljIGZpZWxkcyIKKwksIiAtbyB2YWx1ZSAgc3BlY2lmeSBudW1iZXIgb2Ygb2Zmc2NyZWVuIHJvd3MgaW4gbmV3X2ZpZWxkKCkiCisJLCIgLXQgdmFsdWUgIHNwZWNpZnkgdGV4dCB0byBmaWxsIGZpZWxkcyBpbml0aWFsbHkiCisgICAgfTsKKyAgICB1bnNpZ25lZCBpbnQgajsKKyAgICBmb3IgKGogPSAwOyBqIDwgU0laRU9GKHRibCk7ICsraikKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbal0pOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGNoOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiZGo6bTpvOnQ6IikpICE9IC0xKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgJ2QnOgorCSAgICBkX29wdGlvbiA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2onOgorCSAgICBqX3ZhbHVlID0gYXRvaShvcHRhcmcpOworCSAgICBpZiAoal92YWx1ZSA8IE5PX0pVU1RJRklDQVRJT04KKwkJfHwgal92YWx1ZSA+IEpVU1RJRllfUklHSFQpCisJCXVzYWdlKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ20nOgorCSAgICBtX3ZhbHVlID0gYXRvaShvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICdvJzoKKwkgICAgb192YWx1ZSA9IGF0b2kob3B0YXJnKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndCc6CisJICAgIHRfdmFsdWUgPSBvcHRhcmc7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisKKwl9CisgICAgfQorCisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOworICAgIG5vZWNobygpOworICAgIHJhdygpOworICAgIG5vbmwoKTsJCQkvKiBsZXRzIHVzIHJlYWQgXk0ncyAqLworICAgIGludHJmbHVzaChzdGRzY3IsIEZBTFNFKTsKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCWluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJaW5pdF9wYWlyKDIsIENPTE9SX0dSRUVOLCBDT0xPUl9CTEFDSyk7CisJaW5pdF9wYWlyKDMsIENPTE9SX0NZQU4sIENPTE9SX0JMQUNLKTsKKwlia2dkKENPTE9SX1BBSVIoMSkpOworCXJlZnJlc2goKTsKKyAgICB9CisKKyAgICBkZW1vX2Zvcm1zKCk7CisKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSBjdXJzZXMgZm9ybSBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0L2RlbW9fa2V5b2suYyBiL3Rlc3QvZGVtb19rZXlvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjRkOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2RlbW9fa2V5b2suYwpAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZGVtb19rZXlvay5jLHYgMS41IDIwMDYvMTEvMDQgMjA6MDk6NTEgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgdGhlIGtleW9rKCkgZnVuY3Rpb24uCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwMi8xMS8yMworICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBOQ1VSU0VTX0VYVF9GVU5DUworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IGxhc3RjaCA9IEVSUjsKKyAgICBpbnQgY2g7CisgICAgV0lORE9XICp3aW47CisKKyAgICBpbml0c2NyKCk7CisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHByaW50dygiVHlwaW5nIGFueSBmdW5jdGlvbiBrZXkgd2lsbCBkaXNhYmxlIGl0LCBidXQgdHlwaW5nIGl0IHR3aWNlIGluXG4iKTsKKyAgICBwcmludHcoImEgcm93IHdpbGwgdHVybiBpdCBiYWNrIG9uIChqdXN0IGZvciBhIGRlbW8pLiIpOworICAgIHJlZnJlc2goKTsKKworICAgIHdpbiA9IG5ld3dpbihMSU5FUyAtIDIsIENPTFMsIDIsIDApOworICAgIHNjcm9sbG9rKHdpbiwgVFJVRSk7CisgICAga2V5cGFkKHdpbiwgVFJVRSk7CisgICAgd21vdmUod2luLCAwLCAwKTsKKworICAgIHdoaWxlICgoY2ggPSB3Z2V0Y2god2luKSkgIT0gRVJSKSB7CisJY29uc3QgY2hhciAqbmFtZSA9IGtleW5hbWUoY2gpOworCXdwcmludHcod2luLCAiS2V5Y29kZSAlZCwgbmFtZSAlc1xuIiwKKwkJY2gsCisJCW5hbWUgIT0gMCA/IG5hbWUgOiAiPG51bGw+Iik7CisJd2NscnRvZW9sKHdpbik7CisJd3JlZnJlc2god2luKTsKKwlpZiAoY2ggPj0gS0VZX01JTikgeworCSAgICBrZXlvayhjaCwgRkFMU0UpOworCSAgICBsYXN0Y2ggPSBjaDsKKwl9IGVsc2UgaWYgKGxhc3RjaCA+PSBLRVlfTUlOKSB7CisJICAgIGtleW9rKGxhc3RjaCwgVFJVRSk7CisJfQorICAgIH0KKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSBuY3Vyc2VzIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvZGVtb19tZW51cy5jIGIvdGVzdC9kZW1vX21lbnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1NTNlMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZGVtb19tZW51cy5jCkBAIC0wLDAgKzEsOTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZGVtb19tZW51cy5jLHYgMS4yOCAyMDA4LzA4LzIzIDIwOjMxOjU0IHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMgZnJvbSB0aGUgbWVudSBsaWJyYXJ5LgorICogVGhvbWFzIERpY2tleSAtIDIwMDUvNC85CisgKi8KKy8qCitpdGVtX2Rlc2NyaXB0aW9uCQktCitpdGVtX2luaXQJCQktCitpdGVtX29wdHMJCQktCitpdGVtX29wdHNfb2ZmCQkJLQoraXRlbV9vcHRzX29uCQkJLQoraXRlbV90ZXJtCQkJLQoraXRlbV91c2VycHRyCQkJLQoraXRlbV92aXNpYmxlCQkJLQorbWVudV9iYWNrCQkJLQorbWVudV9mb3JlCQkJLQorbWVudV9mb3JtYXQJCQktCittZW51X2dyZXkJCQktCittZW51X2luaXQJCQktCittZW51X29wdHMJCQktCittZW51X3BhZAkJCS0KK21lbnVfcmVxdWVzdF9ieV9uYW1lCQktCittZW51X3JlcXVlc3RfbmFtZQkJLQorbWVudV9zdWIJCQktCittZW51X3Rlcm0JCQktCittZW51X3VzZXJwdHIJCQktCitzZXRfY3VycmVudF9pdGVtCQktCitzZXRfaXRlbV9pbml0CQkJLQorc2V0X2l0ZW1fb3B0cwkJCS0KK3NldF9pdGVtX3Rlcm0JCQktCitzZXRfaXRlbV91c2VycHRyCQktCitzZXRfbWVudV9ncmV5CQkJLQorc2V0X21lbnVfaW5pdAkJCS0KK3NldF9tZW51X2l0ZW1zCQkJLQorc2V0X21lbnVfb3B0cwkJCS0KK3NldF9tZW51X3BhZAkJCS0KK3NldF9tZW51X3BhdHRlcm4JCS0KK3NldF9tZW51X3NwYWNpbmcJCS0KK3NldF9tZW51X3Rlcm0JCQktCitzZXRfbWVudV91c2VycHRyCQktCitzZXRfdG9wX3JvdwkJCS0KK3RvcF9yb3cJCQkJLQorKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgVVNFX0xJQk1FTlUKKworI2luY2x1ZGUgPG1lbnUuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKyNpZmRlZiBUUkFDRQorc3RhdGljIHVuc2lnbmVkIHNhdmVfdHJhY2UgPSBUUkFDRV9PUkRJTkFSWSB8IFRSQUNFX0NBTExTOworZXh0ZXJuIHVuc2lnbmVkIF9uY190cmFjaW5nOworc3RhdGljIE1FTlUgKm1wVHJhY2U7CisjZW5kaWYKKyNlbHNlCisjdW5kZWYgVFJBQ0UKKyNlbmRpZgorCit0eXBlZGVmIGVudW0geworICAgIGVCYW5uZXIgPSAtMQorICAgICxlRmlsZQorICAgICxlU2VsZWN0CisjaWZkZWYgVFJBQ0UKKyAgICAsZVRyYWNlCisjZW5kaWYKKyAgICAsZU1BWAorfSBNZW51Tm87CisKKyNkZWZpbmUgb2tNZW51Tm8obikgKCgobikgPiBlQmFubmVyKSAmJiAoKG4pIDwgZU1BWCkpCisKKyNkZWZpbmUgTUVOVV9ZCTEKKworc3RhdGljIE1FTlUgKm1wQmFubmVyOworc3RhdGljIE1FTlUgKm1wRmlsZTsKK3N0YXRpYyBNRU5VICptcFNlbGVjdDsKKworc3RhdGljIGJvb2wgbG9hZGVkX2ZpbGUgPSBGQUxTRTsKKworI2lmICFIQVZFX1NUUkRVUAorI2RlZmluZSBzdHJkdXAgbXlfc3RyZHVwCitzdGF0aWMgY2hhciAqCitzdHJkdXAoY2hhciAqcykKK3sKKyAgICBjaGFyICpwID0gdHlwZU1hbGxvYyhjaGFyLCBzdHJsZW4ocykgKyAxKTsKKyAgICBpZiAocCkKKwlzdHJjcHkocCwgcyk7CisgICAgcmV0dXJuIChwKTsKK30KKyNlbmRpZiAvKiBub3QgSEFWRV9TVFJEVVAgKi8KKworLyogQ29tbW9uIGZ1bmN0aW9uIHRvIGFsbG93IF5UIHRvIHRvZ2dsZSB0cmFjZS1tb2RlIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXN0CisgKiBzbyB0aGF0IHRyYWNlLWZpbGVzIGNhbiBiZSBtYWRlIHNtYWxsZXIuCisgKi8KK3N0YXRpYyBpbnQKK3dHZXRjaGFyKFdJTkRPVyAqd2luKQoreworICAgIGludCBjOworI2lmZGVmIFRSQUNFCisgICAgd2hpbGUgKChjID0gd2dldGNoKHdpbikpID09IENUUkwoJ1QnKSkgeworCWlmIChfbmNfdHJhY2luZykgeworCSAgICBzYXZlX3RyYWNlID0gX25jX3RyYWNpbmc7CisJICAgIFRyYWNlKCgiVE9HR0xFLVRSQUNJTkcgT0ZGIikpOworCSAgICBfbmNfdHJhY2luZyA9IDA7CisJfSBlbHNlIHsKKwkgICAgX25jX3RyYWNpbmcgPSBzYXZlX3RyYWNlOworCX0KKwl0cmFjZShfbmNfdHJhY2luZyk7CisJaWYgKF9uY190cmFjaW5nKQorCSAgICBUcmFjZSgoIlRPR0dMRS1UUkFDSU5HIE9OIikpOworICAgIH0KKyNlbHNlCisgICAgYyA9IHdnZXRjaCh3aW4pOworI2VuZGlmCisgICAgcmV0dXJuIGM7Cit9CisjZGVmaW5lIEdldGNoYXIoKSB3R2V0Y2hhcihzdGRzY3IpCisKK3N0YXRpYyBpbnQKK21lbnVfdmlydHVhbGl6ZShpbnQgYykKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09IEtFWV9FWElUKQorCXJlc3VsdCA9IChNQVhfQ09NTUFORCArIDEpOworICAgIGVsc2UgaWYgKGMgPT0gJ3UnKQorCXJlc3VsdCA9IChSRVFfU0NSX1VMSU5FKTsKKyAgICBlbHNlIGlmIChjID09ICdkJykKKwlyZXN1bHQgPSAoUkVRX1NDUl9ETElORSk7CisgICAgZWxzZSBpZiAoYyA9PSAnYicgfHwgYyA9PSBLRVlfTlBBR0UpCisJcmVzdWx0ID0gKFJFUV9TQ1JfVVBBR0UpOworICAgIGVsc2UgaWYgKGMgPT0gJ2YnIHx8IGMgPT0gS0VZX1BQQUdFKQorCXJlc3VsdCA9IChSRVFfU0NSX0RQQUdFKTsKKyAgICBlbHNlIGlmIChjID09ICdsJyB8fCBjID09IEtFWV9MRUZUIHx8IGMgPT0gS0VZX0JUQUIpCisJcmVzdWx0ID0gKFJFUV9MRUZUX0lURU0pOworICAgIGVsc2UgaWYgKGMgPT0gJ24nIHx8IGMgPT0gS0VZX0RPV04pCisJcmVzdWx0ID0gKFJFUV9ORVhUX0lURU0pOworICAgIGVsc2UgaWYgKGMgPT0gJ3AnIHx8IGMgPT0gS0VZX1VQKQorCXJlc3VsdCA9IChSRVFfUFJFVl9JVEVNKTsKKyAgICBlbHNlIGlmIChjID09ICdyJyB8fCBjID09IEtFWV9SSUdIVCB8fCBjID09ICdcdCcpCisJcmVzdWx0ID0gKFJFUV9SSUdIVF9JVEVNKTsKKyAgICBlbHNlIGlmIChjID09ICcgJykKKwlyZXN1bHQgPSAoUkVRX1RPR0dMRV9JVEVNKTsKKyAgICBlbHNlIHsKKwlpZiAoYyAhPSBLRVlfTU9VU0UpCisJICAgIGJlZXAoKTsKKwlyZXN1bHQgPSAoYyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK21lbnVfZ2V0YyhNRU5VICogbSkKK3sKKyAgICByZXR1cm4gd0dldGNoYXIobWVudV93aW4obSkpOworfQorCitzdGF0aWMgaW50CittZW51X29mZnNldChNZW51Tm8gbnVtYmVyKQoreworICAgIGludCByZXN1bHQgPSAwOworCisgICAgaWYgKG9rTWVudU5vKG51bWJlcikpIHsKKwlpbnQgc3BjX2Rlc2MsIHNwY19yb3dzLCBzcGNfY29sczsKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCW1lbnVfc3BhY2luZyhtcEJhbm5lciwgJnNwY19kZXNjLCAmc3BjX3Jvd3MsICZzcGNfY29scyk7CisjZWxzZQorCXNwY19yb3dzID0gMDsKKyNlbmRpZgorCisJLyogRklYTUU6IE1FTlUuaXRlbWxlbiBzZWVtcyB0aGUgb25seSB3YXkgdG8gZ2V0IGFjdHVhbCB3aWR0aCBvZiBpdGVtcyAqLworCXJlc3VsdCA9IChudW1iZXIgLSAoZUJhbm5lciArIDEpKSAqIChtcEJhbm5lci0+aXRlbWxlbiArIHNwY19yb3dzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE1FTlUgKgorbWVudV9jcmVhdGUoSVRFTSAqKiBpdGVtcywgaW50IGNvdW50LCBpbnQgbmNvbHMsIE1lbnVObyBudW1iZXIpCit7CisgICAgTUVOVSAqcmVzdWx0OworICAgIFdJTkRPVyAqbWVudXdpbjsKKyAgICBpbnQgbXJvd3MsIG1jb2xzOworICAgIGludCB5ID0gb2tNZW51Tm8obnVtYmVyKSA/IE1FTlVfWSA6IDA7CisgICAgaW50IHggPSBtZW51X29mZnNldChudW1iZXIpOworICAgIGludCBtYXJnaW4gPSAoeSA9PSBNRU5VX1kpID8gMSA6IDA7CisgICAgaW50IG1heGNvbCA9IChuY29scyArIHgpIDwgQ09MUyA/IG5jb2xzIDogKENPTFMgLSB4IC0gMSk7CisgICAgaW50IG1heHJvdyA9IChjb3VudCArIDEpIC8gbmNvbHM7CisKKyAgICBpZiAoKG1heHJvdyArIHkpID49IChMSU5FUyAtIDQpKQorCW1heHJvdyA9IExJTkVTIC0gNCAtIHk7CisKKyAgICByZXN1bHQgPSBuZXdfbWVudShpdGVtcyk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc2V0X21lbnVfZm9yZShyZXN1bHQsIENPTE9SX1BBSVIoMSkpOworCXNldF9tZW51X2JhY2socmVzdWx0LCBDT0xPUl9QQUlSKDIpKTsKKyAgICB9CisKKyAgICBzZXRfbWVudV9mb3JtYXQocmVzdWx0LCBtYXhyb3csIG1heGNvbCk7CisgICAgc2NhbGVfbWVudShyZXN1bHQsICZtcm93cywgJm1jb2xzKTsKKworICAgIGlmIChtY29scyArICgyICogbWFyZ2luICsgeCkgPj0gQ09MUykKKwltY29scyA9IENPTFMgLSAoMiAqIG1hcmdpbiArIHgpOworCisjaWZkZWYgVFJBQ0UKKyAgICBpZiAobnVtYmVyID09IGVUcmFjZSkKKwltZW51X29wdHNfb2ZmKHJlc3VsdCwgT19PTkVWQUxVRSk7CisgICAgZWxzZQorCW1lbnVfb3B0c19vbihyZXN1bHQsIE9fT05FVkFMVUUpOworI2VuZGlmCisKKyAgICBtZW51d2luID0gbmV3d2luKG1yb3dzICsgKDIgKiBtYXJnaW4pLCBtY29scyArICgyICogbWFyZ2luKSwgeSwgeCk7CisgICAgc2V0X21lbnVfd2luKHJlc3VsdCwgbWVudXdpbik7CisgICAga2V5cGFkKG1lbnV3aW4sIFRSVUUpOworICAgIGlmIChtYXJnaW4pCisJYm94KG1lbnV3aW4sIDAsIDApOworCisgICAgc2V0X21lbnVfc3ViKHJlc3VsdCwgZGVyd2luKG1lbnV3aW4sIG1yb3dzLCBtY29scywgbWFyZ2luLCBtYXJnaW4pKTsKKworICAgIHBvc3RfbWVudShyZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK21lbnVfZGVzdHJveShNRU5VICogbSkKK3sKKyAgICBpbnQgY291bnQ7CisKKyAgICBUcmFjZSgoIm1lbnVfZGVzdHJveSAlcCIsIG0pKTsKKyAgICBpZiAobSAhPSAwKSB7CisJSVRFTSAqKml0ZW1zID0gbWVudV9pdGVtcyhtKTsKKwljb25zdCBjaGFyICpibG9iID0gMDsKKworCWNvdW50ID0gaXRlbV9jb3VudChtKTsKKwlUcmFjZSgoIm1lbnVfZGVzdHJveSAlcCBjb3VudCAlZCIsIG0sIGNvdW50KSk7CisJaWYgKChjb3VudCA+IDApICYmIChtID09IG1wU2VsZWN0KSkgeworCSAgICBibG9iID0gaXRlbV9uYW1lKCppdGVtcyk7CisJfQorCisJdW5wb3N0X21lbnUobSk7CisJZnJlZV9tZW51KG0pOworCisJLyogZnJlZSB0aGUgZXh0cmEgZGF0YSBhbGxvY2F0ZWQgaW4gYnVpbGRfc2VsZWN0X21lbnUoKSAqLworCWlmICgoY291bnQgPiAwKSAmJiAobSA9PSBtcFNlbGVjdCkpIHsKKwkgICAgaWYgKGJsb2IgJiYgbG9hZGVkX2ZpbGUpIHsKKwkJVHJhY2UoKCJmcmVlaW5nIGJsb2IgJXAiLCBibG9iKSk7CisJCWZyZWUoKGNoYXIgKikgYmxvYik7CisJICAgIH0KKwkgICAgZnJlZShpdGVtcyk7CisJfQorI2lmZGVmIFRSQUNFCisJaWYgKChjb3VudCA+IDApICYmIChtID09IG1wVHJhY2UpKSB7CisJICAgIElURU0gKippcCA9IGl0ZW1zOworCSAgICB3aGlsZSAoKmlwKQorCQlmcmVlKCppcCsrKTsKKwl9CisjZW5kaWYKKyAgICB9Cit9CisKKy8qIGZvcmNlIHRoZSBnaXZlbiBtZW51IHRvIGFwcGVhciAqLworc3RhdGljIHZvaWQKK21lbnVfZGlzcGxheShNRU5VICogbSkKK3sKKyAgICB0b3VjaHdpbihtZW51X3dpbihtKSk7CisgICAgd3JlZnJlc2gobWVudV93aW4obSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitidWlsZF9maWxlX21lbnUoTWVudU5vIG51bWJlcikKK3sKKyAgICBzdGF0aWMgQ09OU1RfTUVOVVMgY2hhciAqbGFiZWxzW10gPQorICAgIHsKKwkiRXhpdCIsCisJKGNoYXIgKikgMAorICAgIH07CisgICAgc3RhdGljIElURU0gKml0ZW1zW1NJWkVPRihsYWJlbHMpXTsKKworICAgIElURU0gKippcCA9IGl0ZW1zOworICAgIENPTlNUX01FTlVTIGNoYXIgKiphcDsKKworICAgIGZvciAoYXAgPSBsYWJlbHM7ICphcDsgYXArKykKKwkqaXArKyA9IG5ld19pdGVtKCphcCwgIiIpOworICAgICppcCA9IChJVEVNICopIDA7CisKKyAgICBtcEZpbGUgPSBtZW51X2NyZWF0ZShpdGVtcywgU0laRU9GKGxhYmVscykgLSAxLCAxLCBudW1iZXIpOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtX2ZpbGVfbWVudShpbnQgY21kKQoreworICAgIHJldHVybiBtZW51X2RyaXZlcihtcEZpbGUsIGNtZCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2J1aWxkX3NlbGVjdF9tZW51KE1lbnVObyBudW1iZXIsIGNoYXIgKmZpbGVuYW1lKQoreworICAgIHN0YXRpYyBDT05TVF9NRU5VUyBjaGFyICpsYWJlbHNbXSA9CisgICAgeworCSJMaW9ucyIsCisJIlRpZ2VycyIsCisJIkJlYXJzIiwKKwkiKE9oIG15ISkiLAorCSJOZXd0cyIsCisJIlBsYXR5cGkiLAorCSJMZW11cnMiLAorCSIoT2ggcmVhbGx5PyEpIiwKKwkiTGVvcGFyZHMiLAorCSJQYW50aGVycyIsCisJIlB1bWFzIiwKKwkiTGlvbnMsIFRpZ2VycywgQmVhcnMsIChPaCBteSEpLCBOZXd0cywgUGxhdHlwaSwgTGVtdXJzIiwKKwkiTGlvbnMsIFRpZ2VycywgQmVhcnMsIChPaCBteSEpLCBOZXd0cywgUGxhdHlwaSwgTGVtdXJzLCBMaW9ucywgVGlnZXJzLCBCZWFycywgKE9oIG15ISksIE5ld3RzLCBQbGF0eXBpLCBMZW11cnMiLAorCShjaGFyICopIDAKKyAgICB9OworICAgIHN0YXRpYyBJVEVNICoqaXRlbXM7CisKKyAgICBJVEVNICoqaXA7CisgICAgQ09OU1RfTUVOVVMgY2hhciAqKmFwID0gMDsKKyAgICBDT05TVF9NRU5VUyBjaGFyICoqbXlMaXN0ID0gMDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisKKyAgICBpZiAoZmlsZW5hbWUgIT0gMCkgeworCXN0cnVjdCBzdGF0IHNiOworCWlmIChzdGF0KGZpbGVuYW1lLCAmc2IpID09IDAKKwkgICAgJiYgKHNiLnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcKKwkgICAgJiYgc2Iuc3Rfc2l6ZSAhPSAwKSB7CisJICAgIHNpemVfdCBzaXplID0gKHNpemVfdCkgc2Iuc3Rfc2l6ZTsKKwkgICAgdW5zaWduZWQgaiwgazsKKwkgICAgY2hhciAqYmxvYiA9IHR5cGVNYWxsb2MoY2hhciwgc2l6ZSArIDEpOworCSAgICBDT05TVF9NRU5VUyBjaGFyICoqbGlzdCA9IHR5cGVDYWxsb2MoQ09OU1RfTUVOVVMgY2hhciAqLCBzaXplICsgMSk7CisKKwkgICAgaXRlbXMgPSB0eXBlQ2FsbG9jKElURU0gKiwgc2l6ZSArIDEpOworCSAgICBUcmFjZSgoImJ1aWxkX3NlbGVjdF9tZW51IGJsb2I9JXAsIGl0ZW1zPSVwIiwgYmxvYiwgaXRlbXMpKTsKKwkgICAgaWYgKGJsb2IgIT0gMCAmJiBsaXN0ICE9IDApIHsKKwkJRklMRSAqZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwkJaWYgKGZwICE9IDApIHsKKwkJICAgIGlmIChmcmVhZChibG9iLCBzaXplb2YoY2hhciksIHNpemUsIGZwKSA9PSBzaXplKSB7CisJCQlib29sIG1hcmsgPSBUUlVFOworCQkJZm9yIChqID0gayA9IDA7IGogPCBzaXplOyArK2opIHsKKwkJCSAgICBpZiAobWFyaykgeworCQkJCWxpc3RbaysrXSA9IGJsb2IgKyBqOworCQkJCW1hcmsgPSBGQUxTRTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGJsb2Jbal0gPT0gJ1xuJykgeworCQkJCWJsb2Jbal0gPSAnXDAnOworCQkJCWlmIChrID4gMCAmJiAqbGlzdFtrIC0gMV0gPT0gJ1wwJykKKwkJCQkgICAgLS1rOworCQkJCW1hcmsgPSBUUlVFOworCQkJICAgIH0gZWxzZSBpZiAoYmxvYltqXSA9PSAnXHQnKSB7CisJCQkJYmxvYltqXSA9ICcgJzsJLyogbWVudSBpdGVtcyBhcmUgcHJpbnRhYmxlICovCisJCQkgICAgfQorCQkJfQorCQkJbGlzdFtrXSA9IDA7CisJCQljb3VudCA9IGs7CisJCQlhcCA9IG15TGlzdCA9IGxpc3Q7CisJCSAgICB9CisJCSAgICBmY2xvc2UoZnApOworCQl9CisJCWxvYWRlZF9maWxlID0gVFJVRTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKGFwID09IDApIHsKKwljb3VudCA9IFNJWkVPRihsYWJlbHMpIC0gMTsKKwlpdGVtcyA9IHR5cGVDYWxsb2MoSVRFTSAqLCBjb3VudCArIDEpOworCWFwID0gbGFiZWxzOworICAgIH0KKworICAgIGlwID0gaXRlbXM7CisgICAgd2hpbGUgKCphcCAhPSAwKQorCSppcCsrID0gbmV3X2l0ZW0oKmFwKyssICIiKTsKKyAgICAqaXAgPSAwOworCisgICAgbXBTZWxlY3QgPSBtZW51X2NyZWF0ZShpdGVtcywgKGludCkgY291bnQsIDEsIG51bWJlcik7CisgICAgaWYgKG15TGlzdCAhPSAwKQorCWZyZWUobXlMaXN0KTsKK30KKworc3RhdGljIGludAorcGVyZm9ybV9zZWxlY3RfbWVudShpbnQgY21kKQoreworICAgIHJldHVybiBtZW51X2RyaXZlcihtcFNlbGVjdCwgY21kKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgVFJBQ0UKKyNkZWZpbmUgVF9UQkwobmFtZSkgeyAjbmFtZSwgbmFtZSB9CitzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHVuc2lnbmVkIG1hc2s7Cit9IHRfdGJsW10gPSB7CisKKyAgICBUX1RCTChUUkFDRV9ESVNBQkxFKSwKKwlUX1RCTChUUkFDRV9USU1FUyksCisJVF9UQkwoVFJBQ0VfVFBVVFMpLAorCVRfVEJMKFRSQUNFX1VQREFURSksCisJVF9UQkwoVFJBQ0VfTU9WRSksCisJVF9UQkwoVFJBQ0VfQ0hBUlBVVCksCisJVF9UQkwoVFJBQ0VfT1JESU5BUlkpLAorCVRfVEJMKFRSQUNFX0NBTExTKSwKKwlUX1RCTChUUkFDRV9WSVJUUFVUKSwKKwlUX1RCTChUUkFDRV9JRVZFTlQpLAorCVRfVEJMKFRSQUNFX0JJVFMpLAorCVRfVEJMKFRSQUNFX0lDQUxMUyksCisJVF9UQkwoVFJBQ0VfQ0NBTExTKSwKKwlUX1RCTChUUkFDRV9EQVRBQkFTRSksCisJVF9UQkwoVFJBQ0VfQVRUUlMpLAorCVRfVEJMKFRSQUNFX01BWElNVU0pLAorICAgIHsKKwkoY2hhciAqKSAwLCAwCisgICAgfQorfTsKKworc3RhdGljIHZvaWQKK2J1aWxkX3RyYWNlX21lbnUoTWVudU5vIG51bWJlcikKK3sKKyAgICBzdGF0aWMgSVRFTSAqaXRlbXNbU0laRU9GKHRfdGJsKV07CisKKyAgICBJVEVNICoqaXAgPSBpdGVtczsKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IHRfdGJsW25dLm5hbWUgIT0gMDsgbisrKQorCSppcCsrID0gbmV3X2l0ZW0odF90Ymxbbl0ubmFtZSwgIiIpOworICAgICppcCA9IChJVEVNICopIDA7CisKKyAgICBtcFRyYWNlID0gbWVudV9jcmVhdGUoaXRlbXMsIFNJWkVPRih0X3RibCkgLSAxLCAyLCBudW1iZXIpOworfQorCitzdGF0aWMgY2hhciAqCit0cmFjZXRyYWNlKHVuc2lnbmVkIHRsZXZlbCkKK3sKKyAgICBzdGF0aWMgY2hhciAqYnVmOworICAgIGludCBuOworCisgICAgaWYgKGJ1ZiA9PSAwKSB7CisJc2l6ZV90IG5lZWQgPSAxMjsKKwlmb3IgKG4gPSAwOyB0X3RibFtuXS5uYW1lICE9IDA7IG4rKykKKwkgICAgbmVlZCArPSBzdHJsZW4odF90Ymxbbl0ubmFtZSkgKyAyOworCWJ1ZiA9IHR5cGVNYWxsb2MoY2hhciwgbmVlZCk7CisgICAgfQorICAgIHNwcmludGYoYnVmLCAiMHglMDJ4ID0geyIsIHRsZXZlbCk7CisgICAgaWYgKHRsZXZlbCA9PSAwKSB7CisJc3ByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgIiVzLCAiLCB0X3RibFswXS5uYW1lKTsKKyAgICB9IGVsc2UgeworCWZvciAobiA9IDE7IHRfdGJsW25dLm5hbWUgIT0gMDsgbisrKQorCSAgICBpZiAoKHRsZXZlbCAmIHRfdGJsW25dLm1hc2spID09IHRfdGJsW25dLm1hc2spIHsKKwkJc3RyY2F0KGJ1ZiwgdF90Ymxbbl0ubmFtZSk7CisJCXN0cmNhdChidWYsICIsICIpOworCSAgICB9CisgICAgfQorICAgIGlmIChidWZbc3RybGVuKGJ1ZikgLSAyXSA9PSAnLCcpCisJYnVmW3N0cmxlbihidWYpIC0gMl0gPSAnXDAnOworICAgIHJldHVybiAoc3RyY2F0KGJ1ZiwgIn0iKSk7Cit9CisKKy8qIGZha2UgYSBkeW5hbWljYWxseSByZWNvbmZpZ3VyYWJsZSBtZW51IHVzaW5nIHRoZSAwdGggZW50cnkgdG8gZGVzZWxlY3QKKyAqIHRoZSBvdGhlcnMKKyAqLworc3RhdGljIGJvb2wKK3VwZGF0ZV90cmFjZV9tZW51KE1FTlUgKiBtKQoreworICAgIElURU0gKippdGVtczsKKyAgICBJVEVNICppLCAqKnA7CisgICAgYm9vbCBjaGFuZ2VkID0gRkFMU0U7CisKKyAgICBpdGVtcyA9IG1lbnVfaXRlbXMobSk7CisgICAgaSA9IGN1cnJlbnRfaXRlbShtKTsKKyAgICBpZiAoaSA9PSBpdGVtc1swXSkgeworCWlmIChpdGVtX3ZhbHVlKGkpKSB7CisJICAgIGZvciAocCA9IGl0ZW1zICsgMTsgKnAgIT0gMDsgcCsrKQorCQlpZiAoaXRlbV92YWx1ZSgqcCkpIHsKKwkJICAgIHNldF9pdGVtX3ZhbHVlKCpwLCBGQUxTRSk7CisJCSAgICBjaGFuZ2VkID0gVFJVRTsKKwkJfQorCX0KKyAgICB9CisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQKK3BlcmZvcm1fdHJhY2VfbWVudShpbnQgY21kKQorLyogaW50ZXJhY3RpdmVseSBzZXQgdGhlIHRyYWNlIGxldmVsICovCit7CisgICAgSVRFTSAqKmlwOworICAgIHVuc2lnbmVkIG5ld3RyYWNlOworICAgIGludCByZXN1bHQ7CisKKyAgICBmb3IgKGlwID0gbWVudV9pdGVtcyhtcFRyYWNlKTsgKmlwOyBpcCsrKSB7CisJdW5zaWduZWQgbWFzayA9IHRfdGJsW2l0ZW1faW5kZXgoKmlwKV0ubWFzazsKKwlpZiAobWFzayA9PSAwKQorCSAgICBzZXRfaXRlbV92YWx1ZSgqaXAsIF9uY190cmFjaW5nID09IDApOworCWVsc2UgaWYgKChtYXNrICYgX25jX3RyYWNpbmcpID09IG1hc2spCisJICAgIHNldF9pdGVtX3ZhbHVlKCppcCwgVFJVRSk7CisgICAgfQorCisgICAgcmVzdWx0ID0gbWVudV9kcml2ZXIobXBUcmFjZSwgY21kKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PSykgeworCWlmICh1cGRhdGVfdHJhY2VfbWVudShtcFRyYWNlKSB8fCBjbWQgPT0gUkVRX1RPR0dMRV9JVEVNKSB7CisJICAgIG5ld3RyYWNlID0gMDsKKwkgICAgZm9yIChpcCA9IG1lbnVfaXRlbXMobXBUcmFjZSk7ICppcDsgaXArKykgeworCQlpZiAoaXRlbV92YWx1ZSgqaXApKQorCQkgICAgbmV3dHJhY2UgfD0gdF90YmxbaXRlbV9pbmRleCgqaXApXS5tYXNrOworCSAgICB9CisJICAgIHRyYWNlKG5ld3RyYWNlKTsKKwkgICAgVHJhY2UoKCJ0cmFjZSBsZXZlbCBpbnRlcmFjdGl2ZWx5IHNldCB0byAlcyIsIHRyYWNldHJhY2UoX25jX3RyYWNpbmcpKSk7CisKKwkgICAgKHZvaWQpIG12cHJpbnR3KExJTkVTIC0gMiwgMCwKKwkJCSAgICAiVHJhY2UgbGV2ZWwgaXMgJXNcbiIsIHRyYWNldHJhY2UoX25jX3RyYWNpbmcpKTsKKwkgICAgcmVmcmVzaCgpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKiBUUkFDRSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK21lbnVfbnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKG1wQmFubmVyKSkgLSAoZUJhbm5lciArIDEpOworfQorCitzdGF0aWMgTUVOVSAqCitjdXJyZW50X21lbnUodm9pZCkKK3sKKyAgICBNRU5VICpyZXN1bHQ7CisKKyAgICBzd2l0Y2ggKG1lbnVfbnVtYmVyKCkpIHsKKyAgICBjYXNlIGVGaWxlOgorCXJlc3VsdCA9IG1wRmlsZTsKKwlicmVhazsKKyAgICBjYXNlIGVTZWxlY3Q6CisJcmVzdWx0ID0gbXBTZWxlY3Q7CisJYnJlYWs7CisjaWZkZWYgVFJBQ0UKKyAgICBjYXNlIGVUcmFjZToKKwlyZXN1bHQgPSBtcFRyYWNlOworCWJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKwlyZXN1bHQgPSAwOworCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorYnVpbGRfbWVudXMoY2hhciAqZmlsZW5hbWUpCit7CisgICAgc3RhdGljIENPTlNUX01FTlVTIGNoYXIgKmxhYmVsc1tdID0KKyAgICB7CisJIkZpbGUiLAorCSJTZWxlY3QiLAorI2lmZGVmIFRSQUNFCisJIlRyYWNlIiwKKyNlbmRpZgorCShjaGFyICopIDAKKyAgICB9OworICAgIHN0YXRpYyBJVEVNICppdGVtc1tTSVpFT0YobGFiZWxzKV07CisKKyAgICBJVEVNICoqaXAgPSBpdGVtczsKKyAgICBDT05TVF9NRU5VUyBjaGFyICoqYXA7CisKKyAgICBmb3IgKGFwID0gbGFiZWxzOyAqYXA7IGFwKyspCisJKmlwKysgPSBuZXdfaXRlbSgqYXAsICIiKTsKKyAgICAqaXAgPSAoSVRFTSAqKSAwOworCisgICAgbXBCYW5uZXIgPSBtZW51X2NyZWF0ZShpdGVtcywgU0laRU9GKGxhYmVscykgLSAxLCBTSVpFT0YobGFiZWxzKSAtIDEsIGVCYW5uZXIpOworICAgIHNldF9tZW51X21hcmsobXBCYW5uZXIsICI+Iik7CisKKyAgICBidWlsZF9maWxlX21lbnUoZUZpbGUpOworICAgIGJ1aWxkX3NlbGVjdF9tZW51KGVTZWxlY3QsIGZpbGVuYW1lKTsKKyNpZmRlZiBUUkFDRQorICAgIGJ1aWxkX3RyYWNlX21lbnUoZVRyYWNlKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Cittb3ZlX21lbnUoTUVOVSAqIG1lbnUsIE1FTlUgKiBjdXJyZW50LCBpbnQgYnlfeSwgaW50IGJ5X3gpCit7CisgICAgV0lORE9XICp0b3Bfd2luID0gbWVudV93aW4obWVudSk7CisgICAgV0lORE9XICpzdWJfd2luID0gbWVudV9zdWIobWVudSk7CisgICAgaW50IHkwLCB4MDsKKyAgICBpbnQgeTEsIHgxOworICAgIGludCByZXN1bHQ7CisKKyAgICBnZXRiZWd5eCh0b3Bfd2luLCB5MCwgeDApOworICAgIHkwICs9IGJ5X3k7CisgICAgeDAgKz0gYnlfeDsKKworICAgIGdldGJlZ3l4KHN1Yl93aW4sIHkxLCB4MSk7CisgICAgeTEgKz0gYnlfeTsKKyAgICB4MSArPSBieV94OworCisgICAgaWYgKChyZXN1bHQgPSBtdndpbih0b3Bfd2luLCB5MCwgeDApKSAhPSBFUlIpIHsKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCkgJiYgKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCA8IDIwMDYwMjE4KQorCXN1Yl93aW4tPl9iZWd5ID0geTE7CisJc3ViX3dpbi0+X2JlZ3ggPSB4MTsKKyNlbHNlCisJbXZ3aW4oc3ViX3dpbiwgeTEsIHgxKTsKKyNlbmRpZgorCWlmIChtZW51ID09IGN1cnJlbnQpIHsKKwkgICAgdG91Y2h3aW4odG9wX3dpbik7CisJICAgIHdub3V0cmVmcmVzaCh0b3Bfd2luKTsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBNb3ZlIHRoZSBtZW51cyBhcm91bmQgb24gdGhlIHNjcmVlbiwgdG8gdGVzdCBtdndpbigpLgorICovCitzdGF0aWMgdm9pZAorbW92ZV9tZW51cyhNRU5VICogY3VycmVudCwgaW50IGJ5X3ksIGludCBieV94KQoreworICAgIGlmIChtb3ZlX21lbnUobXBCYW5uZXIsIGN1cnJlbnQsIGJ5X3ksIGJ5X3gpICE9IEVSUikgeworCWVyYXNlKCk7CisJd25vdXRyZWZyZXNoKHN0ZHNjcik7CisJbW92ZV9tZW51KG1wRmlsZSwgY3VycmVudCwgYnlfeSwgYnlfeCk7CisJbW92ZV9tZW51KG1wU2VsZWN0LCBjdXJyZW50LCBieV95LCBieV94KTsKKyNpZmRlZiBUUkFDRQorCW1vdmVfbWVudShtcFRyYWNlLCBjdXJyZW50LCBieV95LCBieV94KTsKKyNlbmRpZgorCWRvdXBkYXRlKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorc2hvd19zdGF0dXMoaW50IGNoLCBNRU5VICogbWVudSkKK3sKKyAgICBtb3ZlKExJTkVTIC0gMSwgMCk7CisgICAgcHJpbnR3KCJrZXkgJXMsIG1lbnUgJWQsIG1hcmsgJXMsIG1hdGNoICVzIiwKKwkgICBrZXluYW1lKGNoKSwKKwkgICBtZW51X251bWJlcigpLAorCSAgIG1lbnVfbWFyayhtZW51KSwKKwkgICBtZW51X3BhdHRlcm4obWVudSkpOworICAgIGNscnRvZW9sKCk7CisgICAgcmVmcmVzaCgpOworfQorCitzdGF0aWMgdm9pZAorcGVyZm9ybV9tZW51cyh2b2lkKQoreworICAgIE1FTlUgKnRoaXNfbWVudTsKKyAgICBNRU5VICpsYXN0X21lbnUgPSBtcEZpbGU7CisgICAgaW50IGNvZGUgPSBFX1VOS05PV05fQ09NTUFORDsKKyAgICBpbnQgY21kOworICAgIGludCBjaCA9IEVSUjsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzayhBTExfTU9VU0VfRVZFTlRTLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorCisgICAgbWVudV9kaXNwbGF5KGxhc3RfbWVudSk7CisKKyAgICBmb3IgKDs7KSB7CisKKwlpZiAoY2ggIT0gRVJSKQorCSAgICBzaG93X3N0YXR1cyhjaCwgbGFzdF9tZW51KTsKKworCWNoID0gbWVudV9nZXRjKG1wQmFubmVyKTsKKworCS8qCisJICogUHJvdmlkZSBmb3IgbW92aW5nIHRoZSBtZW51IGFyb3VuZCBpbiB0aGUgc2NyZWVuIHVzaW5nIHNoaWZ0ZWQKKwkgKiBjdXJzb3Iga2V5cy4KKwkgKi8KKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSBLRVlfU0Y6CisJICAgIG1vdmVfbWVudXMobGFzdF9tZW51LCAxLCAwKTsKKwkgICAgY29udGludWU7CisJY2FzZSBLRVlfU1I6CisJICAgIG1vdmVfbWVudXMobGFzdF9tZW51LCAtMSwgMCk7CisJICAgIGNvbnRpbnVlOworCWNhc2UgS0VZX1NMRUZUOgorCSAgICBtb3ZlX21lbnVzKGxhc3RfbWVudSwgMCwgLTEpOworCSAgICBjb250aW51ZTsKKwljYXNlIEtFWV9TUklHSFQ6CisJICAgIG1vdmVfbWVudXMobGFzdF9tZW51LCAwLCAxKTsKKwkgICAgY29udGludWU7CisJfQorCWNtZCA9IG1lbnVfdmlydHVhbGl6ZShjaCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCSAgICAvKgorCSAgICAgKiBUaGUgYmFubmVyIG1lbnUgYWN0cyBzb2xlbHkgdG8gc2VsZWN0IG9uZSBvZiB0aGUgb3RoZXIgbWVudXMuCisJICAgICAqIE1vdmUgYmV0d2VlbiBpdHMgaXRlbXMsIHdyYXBwaW5nIGF0IHRoZSBsZWZ0L3JpZ2h0IGxpbWl0cy4KKwkgICAgICovCisJY2FzZSBSRVFfTEVGVF9JVEVNOgorCWNhc2UgUkVRX1JJR0hUX0lURU06CisJICAgIGNvZGUgPSBtZW51X2RyaXZlcihtcEJhbm5lciwgY21kKTsKKwkgICAgaWYgKGNvZGUgPT0gRV9SRVFVRVNUX0RFTklFRCkgeworCQlpZiAobWVudV9udW1iZXIoKSA+IDApCisJCSAgICBjb2RlID0gbWVudV9kcml2ZXIobXBCYW5uZXIsIFJFUV9GSVJTVF9JVEVNKTsKKwkJZWxzZQorCQkgICAgY29kZSA9IG1lbnVfZHJpdmVyKG1wQmFubmVyLCBSRVFfTEFTVF9JVEVNKTsKKwkgICAgfQorCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBzd2l0Y2ggKG1lbnVfbnVtYmVyKCkpIHsKKwkgICAgY2FzZSBlRmlsZToKKwkJY29kZSA9IHBlcmZvcm1fZmlsZV9tZW51KGNtZCk7CisJCWJyZWFrOworCSAgICBjYXNlIGVTZWxlY3Q6CisJCWNvZGUgPSBwZXJmb3JtX3NlbGVjdF9tZW51KGNtZCk7CisJCWJyZWFrOworI2lmZGVmIFRSQUNFCisJICAgIGNhc2UgZVRyYWNlOgorCQljb2RlID0gcGVyZm9ybV90cmFjZV9tZW51KGNtZCk7CisJCWJyZWFrOworI2VuZGlmCisJICAgIH0KKworCSAgICBpZiAoKGNvZGUgPT0gRV9SRVFVRVNUX0RFTklFRCkgJiYgKGNtZCA9PSBLRVlfTU9VU0UpKSB7CisJCWNvZGUgPSBtZW51X2RyaXZlcihtcEJhbm5lciwgY21kKTsKKwkgICAgfQorCisJICAgIGJyZWFrOworCX0KKworCWlmIChjb2RlID09IEVfT0spIHsKKwkgICAgdGhpc19tZW51ID0gY3VycmVudF9tZW51KCk7CisJICAgIGlmICh0aGlzX21lbnUgIT0gbGFzdF9tZW51KSB7CisJCW1vdmUoMSwgMCk7CisJCWNscnRvYm90KCk7CisJCWJveChtZW51X3dpbih0aGlzX21lbnUpLCAwLCAwKTsKKwkJcmVmcmVzaCgpOworCisJCS8qIGZvcmNlIHRoZSBjdXJyZW50IG1lbnUgdG8gYXBwZWFyICovCisJCW1lbnVfZGlzcGxheSh0aGlzX21lbnUpOworCisJCWxhc3RfbWVudSA9IHRoaXNfbWVudTsKKwkgICAgfQorCX0KKwl3cmVmcmVzaChtZW51X3dpbihsYXN0X21lbnUpKTsKKwlpZiAoY29kZSA9PSBFX1VOS05PV05fQ09NTUFORAorCSAgICB8fCBjb2RlID09IEVfTk9UX1BPU1RFRCkgeworCSAgICBpZiAobWVudV9udW1iZXIoKSA9PSBlRmlsZSkKKwkJYnJlYWs7CisJICAgIGJlZXAoKTsKKwl9CisJaWYgKGNvZGUgPT0gRV9SRVFVRVNUX0RFTklFRCkKKwkgICAgYmVlcCgpOworCWNvbnRpbnVlOworICAgIH0KKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzaygwLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorZGVzdHJveV9tZW51cyh2b2lkKQoreworICAgIG1lbnVfZGVzdHJveShtcEZpbGUpOworICAgIG1lbnVfZGVzdHJveShtcFNlbGVjdCk7CisjaWZkZWYgVFJBQ0UKKyAgICBtZW51X2Rlc3Ryb3kobXBUcmFjZSk7CisjZW5kaWYKKyAgICBtZW51X2Rlc3Ryb3kobXBCYW5uZXIpOworfQorCisjaWYgSEFWRV9SSVBPRkZMSU5FCitzdGF0aWMgaW50CityaXBfZm9vdGVyKFdJTkRPVyAqd2luLCBpbnQgY29scykKK3sKKyAgICB3YmtnZCh3aW4sIEFfUkVWRVJTRSk7CisgICAgd2VyYXNlKHdpbik7CisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3cHJpbnR3KHdpbiwgImZvb3RlcjogJWQgY29sdW1ucyIsIGNvbHMpOworICAgIHdub3V0cmVmcmVzaCh3aW4pOworICAgIHJldHVybiBPSzsKK30KKworc3RhdGljIGludAorcmlwX2hlYWRlcihXSU5ET1cgKndpbiwgaW50IGNvbHMpCit7CisgICAgd2JrZ2Qod2luLCBBX1JFVkVSU0UpOworICAgIHdlcmFzZSh3aW4pOworICAgIHdtb3ZlKHdpbiwgMCwgMCk7CisgICAgd3ByaW50dyh3aW4sICJoZWFkZXI6ICVkIGNvbHVtbnMiLCBjb2xzKTsKKyAgICB3bm91dHJlZnJlc2god2luKTsKKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYgLyogSEFWRV9SSVBPRkZMSU5FICovCisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YmxbXSA9CisgICAgeworCSJVc2FnZTogZGVtb19tZW51cyBbb3B0aW9uc10iCisJLCIiCisJLCJPcHRpb25zOiIKKyNpZiBIQVZFX1JJUE9GRkxJTkUKKwksIiAgLWYgICAgICAgcmlwLW9mZiBmb290ZXIgbGluZSAoY2FuIHJlcGVhdCkiCisJLCIgIC1oICAgICAgIHJpcC1vZmYgaGVhZGVyIGxpbmUgKGNhbiByZXBlYXQpIgorI2VuZGlmCisjaWZkZWYgVFJBQ0UKKwksIiAgLXQgbWFzayAgc3BlY2lmeSBkZWZhdWx0IHRyYWNlLWxldmVsIChtYXkgdG9nZ2xlIHdpdGggXlQpIgorI2VuZGlmCisgICAgfTsKKyAgICBzaXplX3QgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRibCk7IG4rKykKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbbl0pOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBjOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhOmRlOmZobXA6czp0OiIpKSAhPSAtMSkgeworCXN3aXRjaCAoYykgeworI2lmIEhBVkVfUklQT0ZGTElORQorCWNhc2UgJ2YnOgorCSAgICByaXBvZmZsaW5lKC0xLCByaXBfZm9vdGVyKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnaCc6CisJICAgIHJpcG9mZmxpbmUoMSwgcmlwX2hlYWRlcik7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIEhBVkVfUklQT0ZGTElORSAqLworI2lmZGVmIFRSQUNFCisJY2FzZSAndCc6CisJICAgIHRyYWNlKHN0cnRvdWwob3B0YXJnLCAwLCAwKSk7CisJICAgIGJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorCisgICAgaW5pdHNjcigpOworICAgIG5vcmF3KCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKwlpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisJaW5pdF9wYWlyKDIsIENPTE9SX0JMVUUsIENPTE9SX1dISVRFKTsKKyAgICB9CisgICAgYnVpbGRfbWVudXMoYXJnYyA+IDEgPyBhcmd2WzFdIDogMCk7CisgICAgcGVyZm9ybV9tZW51cygpOworICAgIGRlc3Ryb3lfbWVudXMoKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGN1cnNlcyBtZW51IGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvZGVtb19wYW5lbHMuYyBiL3Rlc3QvZGVtb19wYW5lbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTU5M2MwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9kZW1vX3BhbmVscy5jCkBAIC0wLDAgKzEsODE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZGVtb19wYW5lbHMuYyx2IDEuMzMgMjAwOC8wOC8wNCAxMzozMzo0OCB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zIGZyb20gdGhlIHBhbmVsIGxpYnJhcnkuCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgVVNFX0xJQlBBTkVMCisKKyNpbmNsdWRlIDxwYW5lbC5oPgorCisjZGVmaW5lIExBU1RfUE9TICdAJworI2RlZmluZSBURU1QX1BPUyAnPicKKwordHlwZWRlZiB2b2lkICgqSW5pdFBhbmVsKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpGaWxsUGFuZWwpIChQQU5FTCAqKTsKKworc3RhdGljIGJvb2wgdXNlX2NvbG9ycyA9IEZBTFNFOworc3RhdGljIGJvb2wgdW5ib3hlZCA9IEZBTFNFOworc3RhdGljIEZJTEUgKmxvZ19pbjsKK3N0YXRpYyBGSUxFICpsb2dfb3V0OworCitzdGF0aWMgdm9pZAorY2xvc2VfaW5wdXQodm9pZCkKK3sKKyAgICBpZiAobG9nX2luICE9IDApIHsKKwlmY2xvc2UobG9nX2luKTsKKwlsb2dfaW4gPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX291dHB1dCh2b2lkKQoreworICAgIGlmIChsb2dfb3V0ICE9IDApIHsKKwlmY2xvc2UobG9nX291dCk7CisJbG9nX291dCA9IDA7CisgICAgfQorfQorCitzdGF0aWMgV0lORE9XICoKK3N0YXR1c2xpbmUodm9pZCkKK3sKKyAgICBXSU5ET1cgKnJlc3VsdCA9IHN0ZHNjcjsKKworICAgIHdtb3ZlKHJlc3VsdCwgTElORVMgLSAxLCAwKTsKKyAgICB3Y2xydG9lb2wocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorcGZsdXNoKHZvaWQpCit7CisgICAgdXBkYXRlX3BhbmVscygpOworICAgIGRvdXBkYXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzYXl3aGF0KE5DVVJTRVNfQ09OU1QgY2hhciAqdGV4dCkKK3sKKyAgICBXSU5ET1cgKndpbiA9IHN0YXR1c2xpbmUoKTsKKyAgICBpZiAodGV4dCAhPSAwICYmICp0ZXh0ICE9ICdcMCcpIHsKKwl3YWRkc3RyKHdpbiwgdGV4dCk7CisJd2FkZHN0cih3aW4sICI7ICIpOworICAgIH0KKyAgICB3YWRkc3RyKHdpbiwgInByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcG9zaXRpb24oTkNVUlNFU19DT05TVCBjaGFyICp0ZXh0LAorCSAgICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqYWxzbywKKwkgICAgICBpbnQgd2hpY2gsCisJICAgICAgaW50IHlwb3MsCisJICAgICAgaW50IHhwb3MpCit7CisgICAgV0lORE9XICp3aW4gPSBzdGF0dXNsaW5lKCk7CisKKyAgICB3cHJpbnR3KHdpbiwgIiVzIGZvciBwYW5lbCAlZCBub3cgJWQsJWQlcyIsIHRleHQsIHdoaWNoLCB5cG9zLCB4cG9zLCBhbHNvKTsKKyAgICB3bW92ZShzdGRzY3IsIHlwb3MsIHhwb3MpOworfQorCitzdGF0aWMgaW50CitnZXRfcG9zaXRpb24oTkNVUlNFU19DT05TVCBjaGFyICp0ZXh0LAorCSAgICAgTkNVUlNFU19DT05TVCBjaGFyICphbHNvLAorCSAgICAgaW50IHdoaWNoLAorCSAgICAgaW50ICp4cG9zLAorCSAgICAgaW50ICp5cG9zKQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIGludCB4MSwgeTE7CisgICAgY2hhciBjbWQ7CisgICAgV0lORE9XICp3aW47CisKKyAgICBnZXR5eChzdGRzY3IsIHkxLCB4MSk7CisgICAgd2luID0gc3RhdHVzbGluZSgpOworCisgICAgc2hvd19wb3NpdGlvbih0ZXh0LCBhbHNvLCB3aGljaCwgeTEsIHgxKTsKKworICAgIGlmIChsb2dfaW4gIT0gMCkgeworCWlmIChmc2NhbmYobG9nX2luLCAiJWMlZCwlZFxuIiwgJmNtZCwgJnkxLCAmeDEpID09IDMpIHsKKwkgICAgc3dpdGNoIChjbWQpIHsKKwkgICAgY2FzZSBMQVNUX1BPUzoKKwkJcmVzdWx0ID0gMTsKKwkJKHZvaWQpIHdnZXRjaChzdGRzY3IpOworCQlicmVhazsKKwkgICAgY2FzZSBURU1QX1BPUzoKKwkJcmVzdWx0ID0gMDsKKwkJd3JlZnJlc2goc3Rkc2NyKTsKKwkJbmFwbXMoMTAwKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCXJlc3VsdCA9IC0xOworCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHJlc3VsdCA9IC0xOworCX0KKyAgICB9IGVsc2UgeworCisJc3dpdGNoICh3Z2V0Y2goc3Rkc2NyKSkgeworCWNhc2UgUVVJVDoKKwljYXNlIEVTQ0FQRToKKwljYXNlIEVSUjoKKwkgICAgcmVzdWx0ID0gLTE7CisJICAgIGJyZWFrOworCWNhc2UgJyAnOgorCSAgICByZXN1bHQgPSAxOworCSAgICBicmVhazsKKwljYXNlIEtFWV9VUDoKKwkgICAgaWYgKHkxID4gMCkgeworCQktLXkxOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaWYgKHkxIDwgZ2V0bWF4eShzdGRzY3IpKSB7CisJCSsreTE7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCSAgICBpZiAoeDEgPiAwKSB7CisJCS0teDE7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgaWYgKHgxIDwgZ2V0bWF4eChzdGRzY3IpKSB7CisJCSsreDE7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgd21vdmUoc3Rkc2NyLCB5MSwgeDEpOworICAgICp5cG9zID0geTE7CisgICAgKnhwb3MgPSB4MTsKKworICAgIGlmIChyZXN1bHQgPj0gMCkgeworCWlmIChsb2dfb3V0KQorCSAgICBmcHJpbnRmKGxvZ19vdXQsICIlYyVkLCVkXG4iLAorCQkgICAgKChyZXN1bHQgPiAwKQorCQkgICAgID8gTEFTVF9QT1MKKwkJICAgICA6IFRFTVBfUE9TKSwKKwkJICAgIHkxLCB4MSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQQU5FTCAqCitta3BhbmVsKHNob3J0IGNvbG9yLCBpbnQgcm93cywgaW50IGNvbHMsIGludCB0bHksIGludCB0bHgpCit7CisgICAgV0lORE9XICp3aW47CisgICAgUEFORUwgKnBhbiA9IDA7CisgICAgY2hhciAqdXNlcmRhdGEgPSB0eXBlTWFsbG9jKGNoYXIsIDMpOworCisgICAgaWYgKCh3aW4gPSBuZXd3aW4ocm93cywgY29scywgdGx5LCB0bHgpKSAhPSAwKSB7CisJa2V5cGFkKHdpbiwgVFJVRSk7CisJaWYgKChwYW4gPSBuZXdfcGFuZWwod2luKSkgPT0gMCkgeworCSAgICBkZWx3aW4od2luKTsKKwl9IGVsc2UgaWYgKHVzZV9jb2xvcnMpIHsKKwkgICAgc2hvcnQgZmcgPSAoc2hvcnQpICgoY29sb3IgPT0gQ09MT1JfQkxVRSkKKwkJCQk/IENPTE9SX1dISVRFCisJCQkJOiBDT0xPUl9CTEFDSyk7CisJICAgIHNob3J0IGJnID0gY29sb3I7CisKKwkgICAgaW5pdF9wYWlyKGNvbG9yLCBmZywgYmcpOworCSAgICB3YmtnZHNldCh3aW4sIChjaHR5cGUpIChDT0xPUl9QQUlSKGNvbG9yKSB8ICcgJykpOworCX0gZWxzZSBpZiAoIXVuYm94ZWQpIHsKKwkgICAgd2JrZ2RzZXQod2luLCBBX0JPTEQgfCAnICcpOworCX0KKyAgICB9CisgICAgc3ByaW50Zih1c2VyZGF0YSwgInAlZCIsIGNvbG9yICUgOCk7CisgICAgc2V0X3BhbmVsX3VzZXJwdHIocGFuLCAoTkNVUlNFU19DT05TVCB2b2lkICopIHVzZXJkYXRhKTsKKyAgICByZXR1cm4gcGFuOworfQorCitzdGF0aWMgdm9pZAorbXlfcmVtb3ZlX3BhbmVsKFBBTkVMICoqIHBhbnMsIGludCB3aGljaCkKK3sKKyAgICBpZiAocGFuc1t3aGljaF0gIT0gMCkgeworCVBBTkVMICpwYW4gPSBwYW5zW3doaWNoXTsKKwlXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW4pOworCWNoYXIgKnVzZXIgPSAoY2hhciAqKSBwYW5lbF91c2VycHRyKHBhbik7CisKKwlmcmVlKHVzZXIpOworCWRlbF9wYW5lbChwYW4pOworCWRlbHdpbih3aW4pOworCisJcGFuc1t3aGljaF0gPSAwOworICAgIH0KK30KKworI3VuZGVmIE1JTgorI2RlZmluZSBNSU4oYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2RlZmluZSBBQlMoYSkgICAoKGEpIDwgMCA/IC0oYSkgOiAoYSkpCisKK3N0YXRpYyB2b2lkCitteV9jcmVhdGVfcGFuZWwoUEFORUwgKiogcGFucywgaW50IHdoaWNoLCBGaWxsUGFuZWwgbXlGaWxsKQoreworICAgIFBBTkVMICpwYW4gPSAwOworICAgIGludCBjb2RlOworICAgIHNob3J0IHBhaXIgPSAoc2hvcnQpIHdoaWNoOworICAgIHNob3J0IGZnID0gKHNob3J0KSAoKHBhaXIgPT0gQ09MT1JfQkxVRSkgPyBDT0xPUl9XSElURSA6IENPTE9SX0JMQUNLKTsKKyAgICBzaG9ydCBiZyA9IHBhaXI7CisgICAgaW50IHgwLCB5MCwgeDEsIHkxOworCisgICAgaW5pdF9wYWlyKHBhaXIsIGZnLCBiZyk7CisKKyAgICAvKiByZW1vdmUgdGhlIG9sZCBwYW5lbCwgaWYgYW55ICovCisgICAgbXlfcmVtb3ZlX3BhbmVsKHBhbnMsIHdoaWNoKTsKKworICAgIC8qIGdldCB0aGUgcG9zaXRpb24gb2Ygb25lIGNvcm5lciAqLworICAgIHdtb3ZlKHN0ZHNjciwgZ2V0bWF4eShzdGRzY3IpIC8gMiwgZ2V0bWF4eChzdGRzY3IpIC8gMik7CisgICAgZ2V0eXgoc3Rkc2NyLCB5MCwgeDApOworICAgIHdoaWxlICgoY29kZSA9IGdldF9wb3NpdGlvbigiRmlyc3QgY29ybmVyIiwgIiIsIHdoaWNoLCAmeDAsICZ5MCkpID09IDApIHsKKwk7CisgICAgfQorCisgICAgaWYgKGNvZGUgPiAwKSB7CisJY2hhciBhbHNvWzgwXTsKKwlzcHJpbnRmKGFsc28sICIgKGZpcnN0ICVkLCVkKSIsIHkwLCB4MCk7CisJLyogZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgb3Bwb3NpdGUgY29ybmVyICovCisJd2hpbGUgKChjb2RlID0gZ2V0X3Bvc2l0aW9uKCJPcHBvc2l0ZSBjb3JuZXIiLAorCQkJCSAgICBhbHNvLCB3aGljaCwgJngxLCAmeTEpKSA9PSAwKSB7CisJICAgIDsKKwl9CisKKwlpZiAoY29kZSA+IDApIHsKKwkgICAgaW50IHRseSA9IE1JTih5MCwgeTEpOworCSAgICBpbnQgdGx4ID0gTUlOKHgwLCB4MSk7CisJICAgIHBhbiA9IG1rcGFuZWwocGFpciwgQUJTKHkxIC0geTApICsgMSwgQUJTKHgxIC0geDApICsgMSwgdGx5LCB0bHgpOworCSAgICAvKiBmaW5pc2ggKi8KKwkgICAgbXlGaWxsKHBhbik7CisJICAgIHBhbnNbd2hpY2hdID0gcGFuOworCSAgICBwZmx1c2goKTsKKwkgICAgd21vdmUoc3Rkc2NyLCB5MSwgeDEpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitteV9tb3ZlX3BhbmVsKFBBTkVMICoqIHBhbnMsIGludCB3aGljaCwgYm9vbCBjb250aW51b3VzKQoreworICAgIGlmIChwYW5zW3doaWNoXSAhPSAwKSB7CisJaW50IGNvZGU7CisJaW50IHkwLCB4MDsKKwlpbnQgeTEsIHgxOworCVdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbnNbd2hpY2hdKTsKKwljaGFyIGFsc29bODBdOworCisJZ2V0YmVneXgod2luLCB5MCwgeDApOworCXNwcmludGYoYWxzbywgIiAoc3RhcnQgJWQsJWQpIiwgeTAsIHgwKTsKKwl3bW92ZShzdGRzY3IsIHkwLCB4MCk7CisJd2hpbGUgKChjb2RlID0gZ2V0X3Bvc2l0aW9uKCJNb3ZlIHBhbmVsIiwgYWxzbywgd2hpY2gsICZ4MSwgJnkxKSkgPT0gMCkgeworCSAgICBpZiAoY29udGludW91cykgeworCQltb3ZlX3BhbmVsKHBhbnNbd2hpY2hdLCB5MSwgeDEpOworCQlwZmx1c2goKTsKKwkgICAgfQorCX0KKwlpZiAoY29kZSA+IDApIHsKKwkgICAgbW92ZV9wYW5lbChwYW5zW3doaWNoXSwgeTEsIHgxKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbXlfcmVzaXplX3BhbmVsKFBBTkVMICoqIHBhbnMsIGludCB3aGljaCwgRmlsbFBhbmVsIG15RmlsbCkKK3sKKyAgICBpZiAocGFuc1t3aGljaF0gIT0gMCkgeworCWludCBjb2RlOworCWludCB5MCwgeDA7CisJaW50IHkxLCB4MTsKKwlXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW5zW3doaWNoXSk7CisJY2hhciBhbHNvWzgwXTsKKworCWdldGJlZ3l4KHdpbiwgeTAsIHgwKTsKKwlzcHJpbnRmKGFsc28sICIgKHN0YXJ0ICVkLCVkKSIsIHkwLCB4MCk7CisJd21vdmUoc3Rkc2NyLCB5MCwgeDApOworCXdoaWxlICgoY29kZSA9IGdldF9wb3NpdGlvbigiUmVzaXplIHBhbmVsIiwKKwkJCQkgICAgYWxzbywgd2hpY2gsICZ4MSwgJnkxKSkgPT0gMCkgeworCSAgICA7CisJfQorCWlmIChjb2RlID4gMCkgeworCSAgICBXSU5ET1cgKm5leHQgPSBuZXd3aW4oQUJTKHkxIC0geTApICsgMSwKKwkJCQkgIEFCUyh4MSAtIHgwKSArIDEsCisJCQkJICBNSU4oeTAsIHkxKSwKKwkJCQkgIE1JTih4MCwgeDEpKTsKKwkgICAgaWYgKG5leHQgIT0gMCkgeworCQlrZXlwYWQobmV4dCwgVFJVRSk7CisJCWlmICh1c2VfY29sb3JzKSB7CisJCSAgICB3YmtnZHNldChuZXh0LCAoY2h0eXBlKSAoQ09MT1JfUEFJUih3aGljaCkgfCAnICcpKTsKKwkJfSBlbHNlIGlmICghdW5ib3hlZCkgeworCQkgICAgd2JrZ2RzZXQobmV4dCwgQV9CT0xEIHwgJyAnKTsKKwkJfQorCQlyZXBsYWNlX3BhbmVsKHBhbnNbd2hpY2hdLCBuZXh0KTsKKwkJbXlGaWxsKHBhbnNbd2hpY2hdKTsKKwkJZGVsd2luKHdpbik7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAoraW5pdF9wYW5lbCh2b2lkKQoreworICAgIHJlZ2lzdGVyIGludCB5LCB4OworCisgICAgZm9yICh5ID0gMDsgeSA8IExJTkVTIC0gMTsgeSsrKSB7CisJZm9yICh4ID0gMDsgeCA8IENPTFM7IHgrKykKKwkgICAgd3ByaW50dyhzdGRzY3IsICIlZCIsICh5ICsgeCkgJSAxMCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZmlsbF9wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgICBXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW4pOworICAgIGNvbnN0IGNoYXIgKnVzZXJwdHIgPSAoY29uc3QgY2hhciAqKSBwYW5lbF91c2VycHRyKHBhbik7CisgICAgaW50IG51bSA9ICh1c2VycHRyICYmICp1c2VycHRyKSA/IHVzZXJwdHJbMV0gOiAnPyc7CisgICAgaW50IHksIHg7CisKKyAgICB3bW92ZSh3aW4sIDEsIDEpOworICAgIHdwcmludHcod2luLCAiLXBhbiVjLSIsIG51bSk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgYm94KHdpbiwgMCwgMCk7CisgICAgZm9yICh5ID0gMjsgeSA8IGdldG1heHkod2luKSAtIDE7IHkrKykgeworCWZvciAoeCA9IDE7IHggPCBnZXRtYXh4KHdpbikgLSAxOyB4KyspIHsKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgd2FkZGNoKHdpbiwgVUNoYXIobnVtKSk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK2ZpbGxfdW5ib3hlZChQQU5FTCAqIHBhbikKK3sKKyAgICBXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW4pOworICAgIGNvbnN0IGNoYXIgKnVzZXJwdHIgPSAoY29uc3QgY2hhciAqKSBwYW5lbF91c2VycHRyKHBhbik7CisgICAgaW50IG51bSA9ICh1c2VycHRyICYmICp1c2VycHRyKSA/IHVzZXJwdHJbMV0gOiAnPyc7CisgICAgaW50IHksIHg7CisKKyAgICBmb3IgKHkgPSAwOyB5IDwgZ2V0bWF4eSh3aW4pOyB5KyspIHsKKwlmb3IgKHggPSAwOyB4IDwgZ2V0bWF4eCh3aW4pOyB4KyspIHsKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgd2FkZGNoKHdpbiwgVUNoYXIobnVtKSk7CisJfQorICAgIH0KK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitzdGF0aWMgdm9pZAorbWFrZV9mdWxsd2lkdGhfZGlnaXQoY2NoYXJfdCAqdGFyZ2V0LCBpbnQgZGlnaXQpCit7CisgICAgd2NoYXJfdCBzb3VyY2VbMl07CisKKyAgICBzb3VyY2VbMF0gPSBkaWdpdCArIDB4ZmYxMDsKKyAgICBzb3VyY2VbMV0gPSAwOworICAgIHNldGNjaGFyKHRhcmdldCwgc291cmNlLCBBX05PUk1BTCwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3dpZGVfcGFuZWwodm9pZCkKK3sKKyAgICBpbnQgZGlnaXQ7CisgICAgY2NoYXJfdCB0ZW1wWzEwXTsKKworICAgIGZvciAoZGlnaXQgPSAwOyBkaWdpdCA8IDEwOyArK2RpZ2l0KQorCW1ha2VfZnVsbHdpZHRoX2RpZ2l0KCZ0ZW1wW2RpZ2l0XSwgZGlnaXQpOworCisgICAgZG8geworCWludCB5LCB4OworCWdldHl4KHN0ZHNjciwgeSwgeCk7CisJZGlnaXQgPSAoeSArIHggLyAyKSAlIDEwOworICAgIH0gd2hpbGUgKGFkZF93Y2goJnRlbXBbZGlnaXRdKSAhPSBFUlIpOworfQorCitzdGF0aWMgdm9pZAorZmlsbF93aWRlX3BhbmVsKFBBTkVMICogcGFuKQoreworICAgIFdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisgICAgaW50IG51bSA9ICgoY29uc3QgY2hhciAqKSBwYW5lbF91c2VycHRyKHBhbikpWzFdOworICAgIGludCB5LCB4OworCisgICAgd21vdmUod2luLCAxLCAxKTsKKyAgICB3cHJpbnR3KHdpbiwgIi1wYW4lYy0iLCBudW0pOworICAgIHdjbHJ0b2VvbCh3aW4pOworICAgIGJveCh3aW4sIDAsIDApOworICAgIGZvciAoeSA9IDI7IHkgPCBnZXRtYXh5KHdpbikgLSAxOyB5KyspIHsKKwlmb3IgKHggPSAxOyB4IDwgZ2V0bWF4eCh3aW4pIC0gMTsgeCsrKSB7CisJICAgIHdtb3ZlKHdpbiwgeSwgeCk7CisJICAgIHdhZGRjaCh3aW4sIFVDaGFyKG51bSkpOworCX0KKyAgICB9Cit9CisjZW5kaWYKKworI2RlZmluZSBNQVhfUEFORUxTIDUKKworc3RhdGljIGludAord2hpY2hfcGFuZWwoUEFORUwgKiBweFtNQVhfUEFORUxTICsgMV0sIFBBTkVMICogcGFuKQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIGludCBqOworCisgICAgZm9yIChqID0gMTsgaiA8PSBNQVhfUEFORUxTOyArK2opIHsKKwlpZiAocHhbal0gPT0gcGFuKSB7CisJICAgIHJlc3VsdCA9IGo7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcGFuZWxzKFBBTkVMICogcHhbTUFYX1BBTkVMUyArIDFdKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpoZWxwW10gPQorICAgIHsKKwkiIiwKKwkiQ29tbWFuZHMgYXJlIGxldHRlci9kaWdpdCBwYWlycy4gIERpZ2l0cyBhcmUgdGhlIHBhbmVsIG51bWJlci4iLAorCSIiLAorCSIgIGIgLSBwdXQgdGhlIHBhbmVsIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIiwKKwkiICBjIC0gY3JlYXRlIHRoZSBwYW5lbCIsCisJIiAgZCAtIGRlbGV0ZSB0aGUgcGFuZWwiLAorCSIgIGggLSBoaWRlIHRoZSBwYW5lbCIsCisJIiAgbSAtIG1vdmUgdGhlIHBhbmVsIChNIGZvciBjb250aW51b3VzIG1vdmUpIiwKKwkiICByIC0gcmVzaXplIHRoZSBwYW5lbCIsCisJIiAgcyAtIHNob3cgdGhlIHBhbmVsIiwKKwkiICBiIC0gcHV0IHRoZSBwYW5lbCBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayIKKyAgICB9OworCisgICAgc3RydWN0IHsKKwlib29sIHZhbGlkOworCWJvb2wgaGlkZGVuOworCVBBTkVMICphYm92ZTsKKwlQQU5FTCAqYmVsb3c7CisgICAgfSB0YWJsZVtNQVhfUEFORUxTICsgMV07CisKKyAgICBXSU5ET1cgKndpbjsKKyAgICBQQU5FTCAqcGFuOworICAgIGludCBqOworCisgICAgZm9yIChqID0gMTsgaiA8PSBNQVhfUEFORUxTOyArK2opIHsKKwl0YWJsZVtqXS52YWxpZCA9IChweFtqXSAhPSAwKTsKKwlpZiAodGFibGVbal0udmFsaWQpIHsKKwkgICAgdGFibGVbal0uaGlkZGVuID0gcGFuZWxfaGlkZGVuKHB4W2pdKTsKKwkgICAgdGFibGVbal0uYWJvdmUgPSBwYW5lbF9hYm92ZShweFtqXSk7CisJICAgIHRhYmxlW2pdLmJlbG93ID0gcGFuZWxfYmVsb3cocHhbal0pOworCX0KKyAgICB9CisKKyAgICBpZiAoKHdpbiA9IG5ld3dpbihMSU5FUyAtIDEsIENPTFMsIDAsIDApKSAhPSAwKSB7CisJa2V5cGFkKHdpbiwgVFJVRSk7CisJaWYgKChwYW4gPSBuZXdfcGFuZWwod2luKSkgIT0gMCkgeworCSAgICB3ZXJhc2Uod2luKTsKKwkgICAgbXZ3cHJpbnR3KHdpbiwgMCwgMCwgIlBhbmVsczpcbiIpOworCSAgICBmb3IgKGogPSAxOyBqIDw9IE1BWF9QQU5FTFM7ICsraikgeworCQlpZiAodGFibGVbal0udmFsaWQpIHsKKwkJICAgIHdwcmludHcod2luLCAiICVkOiIsIGopOworCQkgICAgaWYgKHRhYmxlW2pdLmhpZGRlbikgeworCQkJd2FkZHN0cih3aW4sICIgaGlkZGVuIik7CisJCSAgICB9IGVsc2UgeworCQkJaWYgKHRhYmxlW2pdLmFib3ZlKSB7CisJCQkgICAgd3ByaW50dyh3aW4sICIgYWJvdmUgJWQiLAorCQkJCSAgICB3aGljaF9wYW5lbChweCwgdGFibGVbal0uYWJvdmUpKTsKKwkJCX0KKwkJCWlmICh0YWJsZVtqXS5iZWxvdykgeworCQkJICAgIHdwcmludHcod2luLCAiJXMgYmVsb3cgJWQiLAorCQkJCSAgICB0YWJsZVtqXS5hYm92ZSA/ICIsIiA6ICIiLAorCQkJCSAgICB3aGljaF9wYW5lbChweCwgdGFibGVbal0uYmVsb3cpKTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIHdhZGRjaCh3aW4sICdcbicpOworCQl9CisJICAgIH0KKwkgICAgZm9yIChqID0gMDsgaiA8IChpbnQpIFNJWkVPRihoZWxwKTsgKytqKSB7CisJCWlmICh3cHJpbnR3KHdpbiwgIiVzXG4iLCBoZWxwW2pdKSA9PSBFUlIpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICB3Z2V0Y2god2luKTsKKwkgICAgZGVsX3BhbmVsKHBhbik7CisJICAgIHBmbHVzaCgpOworCX0KKwlkZWx3aW4od2luKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgd3JhcHBlcihmdW5jKSBcCitzdGF0aWMgaW50IG15XyMjZnVuYyhQQU5FTCAqcGFuKSBcCit7IFwKKyAgICBpbnQgY29kZSA9IEVSUjsgXAorICAgIGlmIChwYW4gIT0gMCkgeyBcCisJY29kZSA9IGZ1bmMocGFuKTsgXAorICAgIH0gXAorICAgIHJldHVybiBjb2RlOyBcCit9CisvKiAqSU5ERU5ULU9GRiogKi8KK3dyYXBwZXIoYm90dG9tX3BhbmVsKQord3JhcHBlcihoaWRlX3BhbmVsKQord3JhcHBlcihzaG93X3BhbmVsKQord3JhcHBlcih0b3BfcGFuZWwpCisvKiAqSU5ERU5ULU9OKiAqLworCitzdGF0aWMgdm9pZAorZG9fcGFuZWwoUEFORUwgKiBweFtNQVhfUEFORUxTICsgMV0sCisJIE5DVVJTRVNfQ09OU1QgY2hhciAqY21kLAorCSBGaWxsUGFuZWwgbXlGaWxsKQoreworICAgIGludCB3aGljaCA9IGNtZFsxXSAtICcwJzsKKworICAgIGlmICh3aGljaCA8IDEgfHwgd2hpY2ggPiBNQVhfUEFORUxTKSB7CisJYmVlcCgpOworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAobG9nX2luICE9IDApIHsKKwlwZmx1c2goKTsKKyAgICB9CisKKyAgICBzYXl3aGF0KGNtZCk7CisgICAgc3dpdGNoICgqY21kKSB7CisgICAgY2FzZSAnYic6CisJbXlfYm90dG9tX3BhbmVsKHB4W3doaWNoXSk7CisJYnJlYWs7CisgICAgY2FzZSAnYyc6CisJbXlfY3JlYXRlX3BhbmVsKHB4LCB3aGljaCwgbXlGaWxsKTsKKwlicmVhazsKKyAgICBjYXNlICdkJzoKKwlteV9yZW1vdmVfcGFuZWwocHgsIHdoaWNoKTsKKwlicmVhazsKKyAgICBjYXNlICdoJzoKKwlteV9oaWRlX3BhbmVsKHB4W3doaWNoXSk7CisJYnJlYWs7CisgICAgY2FzZSAnbSc6CisJbXlfbW92ZV9wYW5lbChweCwgd2hpY2gsIEZBTFNFKTsKKwlicmVhazsKKyAgICBjYXNlICdNJzoKKwlteV9tb3ZlX3BhbmVsKHB4LCB3aGljaCwgVFJVRSk7CisJYnJlYWs7CisgICAgY2FzZSAncic6CisJbXlfcmVzaXplX3BhbmVsKHB4LCB3aGljaCwgbXlGaWxsKTsKKwlicmVhazsKKyAgICBjYXNlICdzJzoKKwlteV9zaG93X3BhbmVsKHB4W3doaWNoXSk7CisJYnJlYWs7CisgICAgY2FzZSAndCc6CisJbXlfdG9wX3BhbmVsKHB4W3doaWNoXSk7CisJYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgYm9vbAorb2tfbGV0dGVyKGludCBjaCkKK3sKKyAgICByZXR1cm4gaXNhbHBoYShVQ2hhcihjaCkpICYmIHN0cmNocigiYmNkaG1NcnN0IiwgY2gpICE9IDA7Cit9CisKK3N0YXRpYyBib29sCitva19kaWdpdChpbnQgY2gpCit7CisgICAgcmV0dXJuIGlzZGlnaXQoVUNoYXIoY2gpKSAmJiAoY2ggPj0gJzEnKSAmJiAoY2ggLSAnMCcgPD0gTUFYX1BBTkVMUyk7Cit9CisKKy8qCisgKiBBIGNvbW1hbmQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgbGV0dGVyL2RpZ2l0IHBhaXJzIHNlcGFyYXRlZCBieSBhIHNwYWNlLgorICogRGlnaXRzIGFyZSBsaW1pdGVkIHRvIDEuLk1BWF9QQU5FTFMuCisgKgorICogRW5kIHRoZSBjb21tYW5kIHdpdGggYSBuZXdsaW5lLiAgUmVqZWN0IG90aGVyIGNoYXJhY3RlcnMuCisgKi8KK3N0YXRpYyBib29sCitnZXRfY29tbWFuZChQQU5FTCAqIHB4W01BWF9QQU5FTFMgKyAxXSwgY2hhciAqYnVmZmVyLCBpbnQgbGltaXQpCit7CisgICAgaW50IGxlbmd0aCA9IDA7CisgICAgaW50IHkwLCB4MDsKKyAgICBpbnQgYzAsIGNoOworICAgIFdJTkRPVyAqd2luOworCisgICAgZ2V0eXgoc3Rkc2NyLCB5MCwgeDApOworICAgIHdpbiA9IHN0YXR1c2xpbmUoKTsKKyAgICB3YWRkc3RyKHdpbiwgIkNvbW1hbmQ6Iik7CisgICAgYnVmZmVyW2xlbmd0aCA9IDBdID0gJ1wwJzsKKworICAgIGlmIChsb2dfaW4gIT0gMCkgeworCWlmIChmZ2V0cyhidWZmZXIsIGxpbWl0IC0gMywgbG9nX2luKSAhPSAwKSB7CisJICAgIGxlbmd0aCA9IChpbnQpIHN0cmxlbihidWZmZXIpOworCSAgICB3aGlsZSAobGVuZ3RoID4gMCAmJiBpc3NwYWNlKFVDaGFyKGJ1ZmZlcltsZW5ndGggLSAxXSkpKQorCQlidWZmZXJbLS1sZW5ndGhdID0gJ1wwJzsKKwkgICAgd2FkZHN0cih3aW4sIGJ1ZmZlcik7CisJfSBlbHNlIHsKKwkgICAgY2xvc2VfaW5wdXQoKTsKKwl9CisJKHZvaWQpIHdnZXRjaCh3aW4pOworICAgIH0gZWxzZSB7CisJYzAgPSAwOworCWZvciAoOzspIHsKKwkgICAgY2ggPSB3Z2V0Y2god2luKTsKKwkgICAgaWYgKGNoID09IEVSUiB8fCBjaCA9PSBRVUlUIHx8IGNoID09IEVTQ0FQRSkgeworCQlidWZmZXJbMF0gPSAnXDAnOworCQlicmVhazsKKwkgICAgfSBlbHNlIGlmIChjaCA9PSBDVFJMKCdMJykpIHsKKwkJd3JlZnJlc2goY3Vyc2NyKTsKKwkgICAgfSBlbHNlIGlmIChjaCA9PSAnXG4nIHx8IGNoID09IEtFWV9FTlRFUikgeworCQlicmVhazsKKwkgICAgfSBlbHNlIGlmIChjaCA9PSAnPycpIHsKKwkJc2hvd19wYW5lbHMocHgpOworCSAgICB9IGVsc2UgaWYgKGxlbmd0aCArIDMgPCBsaW1pdCkgeworCQlpZiAoY2ggPj0gS0VZX01JTikgeworCQkgICAgYmVlcCgpOworCQl9IGVsc2UgaWYgKG9rX2xldHRlcihVQ2hhcihjaCkpKSB7CisJCSAgICBpZiAoaXNhbHBoYShVQ2hhcihjMCkpKSB7CisJCQliZWVwKCk7CisJCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoVUNoYXIoYzApKSkgeworCQkJd3ByaW50dyh3aW4sICIgJWMiLCBjaCk7CisJCQlidWZmZXJbbGVuZ3RoKytdID0gJyAnOworCQkJYnVmZmVyW2xlbmd0aCsrXSA9IChjaGFyKSAoYzAgPSBjaCk7CisJCSAgICB9IGVsc2UgeworCQkJd3ByaW50dyh3aW4sICIlYyIsIGNoKTsKKwkJCWJ1ZmZlcltsZW5ndGgrK10gPSAoY2hhcikgKGMwID0gY2gpOworCQkgICAgfQorCQl9IGVsc2UgaWYgKG9rX2RpZ2l0KGNoKSkgeworCQkgICAgaWYgKGlzYWxwaGEoVUNoYXIoYzApKSkgeworCQkJd3ByaW50dyh3aW4sICIlYyIsIGNoKTsKKwkJCWJ1ZmZlcltsZW5ndGgrK10gPSAoY2hhcikgKGMwID0gY2gpOworCQkgICAgfSBlbHNlIHsKKwkJCWJlZXAoKTsKKwkJICAgIH0KKwkJfSBlbHNlIGlmIChjaCA9PSAnICcpIHsKKwkJICAgIGlmIChpc2RpZ2l0KFVDaGFyKGMwKSkpIHsKKwkJCXdwcmludHcod2luLCAiJWMiLCBjaCk7CisJCQlidWZmZXJbbGVuZ3RoKytdID0gKGNoYXIpIChjMCA9IGNoKTsKKwkJICAgIH0gZWxzZSB7CisJCQliZWVwKCk7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBiZWVwKCk7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHdtb3ZlKHN0ZHNjciwgeTAsIHgwKTsKKworICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKyAgICBpZiAobG9nX291dCAmJiBsZW5ndGgpIHsKKwlmcHJpbnRmKGxvZ19vdXQsICIlc1xuIiwgYnVmZmVyKTsKKyAgICB9CisgICAgcmV0dXJuIChsZW5ndGggIT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZW1vX3BhbmVscyhJbml0UGFuZWwgbXlJbml0LCBGaWxsUGFuZWwgbXlGaWxsKQoreworICAgIGludCBpdG1wOworICAgIFBBTkVMICpweFtNQVhfUEFORUxTICsgMV07CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKworICAgIHNjcm9sbG9rKHN0ZHNjciwgRkFMU0UpOwkvKiB3ZSBkb24ndCB3YW50IHN0ZHNjciB0byBzY3JvbGwhICovCisgICAgcmVmcmVzaCgpOworCisgICAgbXlJbml0KCk7CisgICAgbWVtc2V0KHB4LCAwLCBzaXplb2YocHgpKTsKKworICAgIHdoaWxlIChnZXRfY29tbWFuZChweCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpIHsKKwlpbnQgbGltaXQgPSAoaW50KSBzdHJsZW4oYnVmZmVyKTsKKwlmb3IgKGl0bXAgPSAwOyBpdG1wIDwgbGltaXQ7IGl0bXAgKz0gMykgeworCSAgICBkb19wYW5lbChweCwgYnVmZmVyICsgaXRtcCwgbXlGaWxsKTsKKwl9CisJcGZsdXNoKCk7CisgICAgfQorI2lmIE5PX0xFQUtTCisgICAgZm9yIChpdG1wID0gMTsgaXRtcCA8PSBNQVhfUEFORUxTOyArK2l0bXApIHsKKwlteV9yZW1vdmVfcGFuZWwocHgsIGl0bXApOworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IGRlbW9fcGFuZWxzIFtvcHRpb25zXSIKKwksIiIKKwksIk9wdGlvbnM6IgorCSwiICAtaSBmaWxlICByZWFkIGNvbW1hbmRzIGZyb20gZmlsZSIKKwksIiAgLW8gZmlsZSAgcmVjb3JkIGNvbW1hbmRzIGluIGZpbGUiCisJLCIgIC1tICAgICAgIGRvIG5vdCB1c2UgY29sb3JzIgorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJLCIgIC13ICAgICAgIHVzZSB3aWRlLWNoYXJhY3RlcnMgaW4gcGFuZWxzIGFuZCBiYWNrZ3JvdW5kIgorI2VuZGlmCisJLCIgIC14ICAgICAgIGRvIG5vdCBlbmNsb3NlIHBhbmVscyBpbiBib3hlcyIKKyAgICB9OworICAgIHNpemVfdCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGJsKTsgbisrKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGM7CisgICAgYm9vbCBtb25vY2hyb21lID0gRkFMU0U7CisgICAgSW5pdFBhbmVsIG15SW5pdCA9IGluaXRfcGFuZWw7CisgICAgRmlsbFBhbmVsIG15RmlsbCA9IGZpbGxfcGFuZWw7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImk6bzptd3giKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlICdpJzoKKwkgICAgbG9nX2luID0gZm9wZW4ob3B0YXJnLCAiciIpOworCSAgICBicmVhazsKKwljYXNlICdvJzoKKwkgICAgbG9nX291dCA9IGZvcGVuKG9wdGFyZywgInciKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbSc6CisJICAgIG1vbm9jaHJvbWUgPSBUUlVFOworCSAgICBicmVhazsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCWNhc2UgJ3cnOgorCSAgICBteUluaXQgPSBpbml0X3dpZGVfcGFuZWw7CisJICAgIG15RmlsbCA9IGZpbGxfd2lkZV9wYW5lbDsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwljYXNlICd4JzoKKwkgICAgdW5ib3hlZCA9IFRSVUU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJfQorICAgIH0KKyAgICBpZiAodW5ib3hlZCkKKwlteUZpbGwgPSBmaWxsX3VuYm94ZWQ7CisKKyAgICBpbml0c2NyKCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisKKyAgICB1c2VfY29sb3JzID0gbW9ub2Nocm9tZSA/IEZBTFNFIDogaGFzX2NvbG9ycygpOworICAgIGlmICh1c2VfY29sb3JzKQorCXN0YXJ0X2NvbG9yKCk7CisKKyAgICBkZW1vX3BhbmVscyhteUluaXQsIG15RmlsbCk7CisgICAgZW5kd2luKCk7CisKKyAgICBjbG9zZV9pbnB1dCgpOworICAgIGNsb3NlX291dHB1dCgpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgY3Vyc2VzIHBhbmVsIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvZGVtb190ZXJtY2FwLmMgYi90ZXN0L2RlbW9fdGVybWNhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlODU2NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2RlbW9fdGVybWNhcC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisgKgorICogJElkOiBkZW1vX3Rlcm1jYXAuYyx2IDEuNyAyMDA4LzAyLzA5IDE4OjA4OjM2IHRvbSBFeHAgJAorICoKKyAqIEEgc2ltcGxlIGRlbW8gb2YgdGhlIHRlcm1jYXAgaW50ZXJmYWNlLgorICovCisjZGVmaW5lIFVTRV9USU5GTworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9UR0VURU5UCisKKyNkZWZpbmUgaXNDYXBOYW1lKGMpIChpc2dyYXBoKGMpICYmIHN0cmNocigiXiM9OlxcIiwgYykgPT0gMCkKKworc3RhdGljIHZvaWQKK2R1bXBpdChjaGFyICpjYXApCit7CisgICAgLyoKKyAgICAgKiBPbmUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSB0ZXJtY2FwIGludGVyZmFjZSBpcyB0aGF0IHRoZSBsaWJyYXJ5CisgICAgICogY2Fubm90IGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZCB2aWEgdGdldHN0cigpLCBub3IgdGhlCisgICAgICogYW1vdW50IG9mIHNwYWNlIHJlbWFpbmluZy4gIFRoaXMgZGVtbyBzaW1wbHkgcmV1c2VzIHRoZSB3aG9sZSBidWZmZXIKKyAgICAgKiBmb3IgZWFjaCBjYWxsOyBhIG5vcm1hbCB0ZXJtY2FwIGFwcGxpY2F0aW9uIHdvdWxkIHRyeSB0byB1c2UgdGhlIGJ1ZmZlcgorICAgICAqIHRvIGhvbGQgYWxsIG9mIHRoZSBzdHJpbmdzIGV4dHJhY3RlZCBmcm9tIHRoZSB0ZXJtaW5hbCBlbnRyeS4KKyAgICAgKi8KKyAgICBjaGFyIGFyZWFbMTAyNF0sICphcCA9IGFyZWE7CisgICAgY2hhciAqc3RyOworICAgIGludCBudW07CisKKyAgICBpZiAoKHN0ciA9IHRnZXRzdHIoY2FwLCAmYXApKSAhPSAwKSB7CisJLyoKKwkgKiBOb3RlIHRoYXQgdGhlIHN0cmluZ3MgcmV0dXJuZWQgYXJlIG1vc3RseSB0ZXJtaW5mbyBmb3JtYXQsIHNpbmNlCisJICogbmN1cnNlcyBkb2VzIG5vdCBjb252ZXJ0IGV4Y2VwdCBmb3IgYSBoYW5kZnVsIG9mIHNwZWNpYWwgY2FzZXMuCisJICovCisJcHJpbnRmKCJzdHIgJXMgPSAiLCBjYXApOworCXdoaWxlICgqc3RyICE9IDApIHsKKwkgICAgaW50IGNoID0gVUNoYXIoKnN0cisrKTsKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlICdcMTc3JzoKKwkJZnB1dHMoIl4/Iiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1wwMzMnOgorCQlmcHV0cygiXFxFIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1xiJzoKKwkJZnB1dHMoIlxcYiIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICdcZic6CisJCWZwdXRzKCJcXGYiLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgY2FzZSAnXG4nOgorCQlmcHV0cygiXFxuIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1xyJzoKKwkJZnB1dHMoIlxcciIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICcgJzoKKwkJZnB1dHMoIlxccyIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICdcdCc6CisJCWZwdXRzKCJcXHQiLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgY2FzZSAnXic6CisJCWZwdXRzKCJcXF4iLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgY2FzZSAnOic6CisJCWZwdXRzKCJcXDA3MiIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICdcXCc6CisJCWZwdXRzKCJcXFxcIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWlmIChpc2dyYXBoKGNoKSkKKwkJICAgIGZwdXRjKGNoLCBzdGRvdXQpOworCQllbHNlIGlmIChjaCA8IDMyKQorCQkgICAgcHJpbnRmKCJeJWMiLCBjaCArICdAJyk7CisJCWVsc2UKKwkJICAgIHByaW50ZigiXFwlMDNvIiwgY2gpOworCQlicmVhazsKKwkgICAgfQorCX0KKwlwcmludGYoIlxuIik7CisgICAgfSBlbHNlIGlmICgobnVtID0gdGdldG51bShjYXApKSA+PSAwKSB7CisJcHJpbnRmKCJudW0gJXMgPSAlZFxuIiwgY2FwLCBudW0pOworICAgIH0gZWxzZSBpZiAoKG51bSA9IHRnZXRmbGFnKGNhcCkpID4gMCkgeworCXByaW50ZigiZmxnICVzXG4iLCBjYXApOworICAgIH0KKyAgICBmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIHZvaWQKK2RlbW9fdGVybWNhcChjaGFyICpuYW1lKQoreworICAgIGNoYXIgYnVmZmVyWzEwMjRdOworCisgICAgcHJpbnRmKCJUZXJtaW5hbCB0eXBlICVzXG4iLCBuYW1lKTsKKyAgICBpZiAodGdldGVudChidWZmZXIsIG5hbWUpID49IDApIHsKKwljaGFyIGNhcFszXTsKKwlpbnQgYzEsIGMyOworCisJY2FwWzJdID0gMDsKKwlmb3IgKGMxID0gMDsgYzEgPCAyNTY7ICsrYzEpIHsKKwkgICAgY2FwWzBdID0gYzE7CisJICAgIGlmIChpc0NhcE5hbWUoYzEpKSB7CisJCWZvciAoYzIgPSAwOyBjMiA8IDI1NjsgKytjMikgeworCQkgICAgY2FwWzFdID0gYzI7CisJCSAgICBpZiAoaXNDYXBOYW1lKGMyKSkgeworCQkJZHVtcGl0KGNhcCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBuOworICAgIGNoYXIgKm5hbWU7CisKKyAgICBpZiAoYXJnYyA+IDEpIHsKKwlmb3IgKG4gPSAxOyBuIDwgYXJnYzsgKytuKSB7CisJICAgIGRlbW9fdGVybWNhcChhcmd2W25dKTsKKwl9CisgICAgfSBlbHNlIGlmICgobmFtZSA9IGdldGVudigiVEVSTSIpKSAhPSAwKSB7CisJZGVtb190ZXJtY2FwKG5hbWUpOworICAgIH0gZWxzZSB7CisJc3RhdGljIGNoYXIgZHVtYltdID0gImR1bWIiOworCWRlbW9fdGVybWNhcChkdW1iKTsKKyAgICB9CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisjZWxzZQoraW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsCisgICAgIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGVybWNhcFxuIik7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0L2RpdHRvLmMgYi90ZXN0L2RpdHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhZWJhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZGl0dG8uYwpAQCAtMCwwICsxLDQyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAoMTk5OC1vbikKKyAqCisgKiAkSWQ6IGRpdHRvLmMsdiAxLjMyIDIwMDgvMDgvMDQgMTM6MjE6NDEgdG9tIEV4cCAkCisgKgorICogVGhlIHByb2dyYW0gaWxsdXN0cmF0ZXMgaG93IHRvIHNldCB1cCBtdWx0aXBsZSBzY3JlZW5zIGZyb20gYSBzaW5nbGUKKyAqIHByb2dyYW0uCisgKgorICogSWYgb3BlbnB0eSgpIGlzIHN1cHBvcnRlZCwgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFyZSB0aXRsZXMgZm9yCisgKiB0aGUgd2luZG93cyBzaG93aW5nIGVhY2ggc2NyZWVuJ3MgZGF0YS4KKyAqCisgKiBJZiBvcGVucHR5KCkgaXMgbm90IHN1cHBvcnRlZCwgeW91IG11c3QgaW52b2tlIHRoZSBwcm9ncmFtIGJ5IHNwZWNpZnlpbmcKKyAqIGFub3RoZXIgdGVybWluYWwgb24gdGhlIHNhbWUgbWFjaGluZSBieSBzcGVjaWZ5aW5nIGl0cyBkZXZpY2UsIGUuZy4sCisgKglkaXR0byAvZGV2L3R0eXAxCisgKi8KKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9YVEVSTV9QVFkKKyNpbmNsdWRlIFVTRV9PUEVOUFRZX0hFQURFUgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0ZJRk8gMjU2CisKKyNkZWZpbmUgVEhJU19GSUZPKG4pICgobikgJSBNQVhfRklGTykKKyNkZWZpbmUgTkVYVF9GSUZPKG4pIFRISVNfRklGTygobikgKyAxKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZTsKKyAgICBpbnQgaGVhZDsKKyAgICBpbnQgdGFpbDsKKyAgICBpbnQgZGF0YVtNQVhfRklGT107Cit9IEZJRk87CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBsb25nIHNlcXVlbmNlOworfSBQRUVLOworCisvKgorICogRGF0YSAib3duZWQiIGZvciBhIHNpbmdsZSBzY3JlZW4uICBFYWNoIHNjcmVlbiBpcyBkaXZpZGVkIGludG8gd2luZG93cyB0aGF0CisgKiBzaG93IHRoZSB0ZXh0IHJlYWQgZnJvbSBlYWNoIHRlcm1pbmFsLiAgSW5wdXQgZnJvbSBhIGdpdmVuIHNjcmVlbiB3aWxsIGFsc28KKyAqIGJlIHJlYWQgaW50byBvbmUgd2luZG93IHBlciBzY3JlZW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGSUxFICppbnB1dDsKKyAgICBGSUxFICpvdXRwdXQ7CisgICAgU0NSRUVOICpzY3JlZW47CQkvKiB0aGlzIHNjcmVlbiAtIGN1cnNlcyBpbnRlcm5hbCBkYXRhICovCisgICAgaW50IHdoaWNoMTsJCQkvKiB0aGlzIHNjcmVlbidzIGluZGV4IGluIERJVFRPW10gYXJyYXkgKi8KKyAgICBpbnQgbGVuZ3RoOwkJCS8qIGxlbmd0aCBvZiB3aW5kb3dzW10gYW5kIHBlZWtzW10gKi8KKyAgICBjaGFyICoqdGl0bGVzOwkJLyogcGVyLXdpbmRvdyB0aXRsZXMgKi8KKyAgICBXSU5ET1cgKip3aW5kb3dzOwkJLyogZGlzcGxheSBkYXRhIGZyb20gZWFjaCBzY3JlZW4gKi8KKyAgICBQRUVLICpwZWVrczsJCS8qIGluZGljZXMgZm9yIGVhY2ggc2NyZWVuJ3MgZmlmbyAqLworICAgIEZJRk8gZmlmbzsJCQkvKiBmaWZvIGZvciB0aGlzIHNjcmVlbiAqLworI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisjZW5kaWYKK30gRElUVE87CisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIG11bHRpcGxlIHBhcmFtZXRlcnMgdmlhIHRoZSB1c2Vfc2NyZWVuKCkKKyAqIHNpbmdsZS1wYXJhbWV0ZXIgaW50ZXJmYWNlLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IHNvdXJjZTsJCQkvKiB3aGljaCBzY3JlZW4gZGlkIGNoYXJhY3RlciBjb21lIGZyb20gKi8KKyAgICBpbnQgdGFyZ2V0OwkJCS8qIHdoaWNoIHNjcmVlbiBpcyBjaGFyYWN0ZXIgZ29pbmcgdG8gKi8KKyAgICBESVRUTyAqZGl0dG87CQkvKiBkYXRhIGZvciBhbGwgc2NyZWVucyAqLworfSBEREFUQTsKKworc3RhdGljIHZvaWQKK2ZhaWxlZChjb25zdCBjaGFyICpzKQoreworICAgIHBlcnJvcihzKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBkaXR0byBbdGVybWluYWwxIC4uLl1cbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKKy8qIEFkZCB0byB0aGUgaGVhZCBvZiB0aGUgZmlmbywgY2hlY2tpbmcgZm9yIG92ZXJmbG93LiAqLworc3RhdGljIHZvaWQKK3B1dF9maWZvKEZJRk8gKiBmaWZvLCBpbnQgdmFsdWUpCit7CisgICAgaW50IG5leHQgPSBORVhUX0ZJRk8oZmlmby0+aGVhZCk7CisgICAgaWYgKG5leHQgPT0gZmlmby0+dGFpbCkKKwlmaWZvLT50YWlsID0gTkVYVF9GSUZPKGZpZm8tPnRhaWwpOworICAgIGZpZm8tPmRhdGFbbmV4dF0gPSB2YWx1ZTsKKyAgICBmaWZvLT5oZWFkID0gbmV4dDsKKyAgICBmaWZvLT5zZXF1ZW5jZSArPSAxOworfQorCisvKiBHZXQgZGF0YSBmcm9tIHRoZSB0YWlsIChvbGRlc3QgcGFydCkgb2YgdGhlIGZpZm8sIHJldHVybmluZyAtMSBpZiBubyBkYXRhLgorICogU2luY2UgZWFjaCBzY3JlZW4gY2FuIHBlZWsgaW50byB0aGUgZmlmbywgd2UgZG8gbm90IHVwZGF0ZSB0aGUgdGFpbCBpbmRleCwKKyAqIGJ1dCBtb2RpZnkgdGhlIHBlZWstaW5kZXguCisgKgorICogRklYTUUgLSB0ZXN0L3dvcmthcm91bmQgZm9yIGNhc2Ugd2hlcmUgZmlmbyBnZXRzIG1vcmUgdGhhbiBhIGJ1ZmZlcgorICogYWhlYWQgb2YgcGVlay4KKyAqLworc3RhdGljIGludAorcGVla19maWZvKEZJRk8gKiBmaWZvLCBQRUVLICogcGVlaykKK3sKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgaWYgKHBlZWstPnNlcXVlbmNlIDwgZmlmby0+c2VxdWVuY2UpIHsKKwlwZWVrLT5zZXF1ZW5jZSArPSAxOworCXJlc3VsdCA9IGZpZm8tPmRhdGFbVEhJU19GSUZPKHBlZWstPnNlcXVlbmNlKV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBGSUxFICoKK29wZW5fdHR5KGNoYXIgKnBhdGgpCit7CisgICAgRklMRSAqZnA7CisjaWZkZWYgVVNFX1hURVJNX1BUWQorICAgIGludCBhbWFzdGVyOworICAgIGludCBhc2xhdmU7CisgICAgY2hhciBzbGF2ZV9uYW1lWzEwMjRdOworICAgIGNoYXIgc19vcHRpb25bc2l6ZW9mKHNsYXZlX25hbWUpICsgODBdOworICAgIGNoYXIgKmxlYWY7CisKKyAgICBpZiAob3BlbnB0eSgmYW1hc3RlciwgJmFzbGF2ZSwgc2xhdmVfbmFtZSwgMCwgMCkgIT0gMAorCXx8IHN0cmxlbihzbGF2ZV9uYW1lKSA+IHNpemVvZihzbGF2ZV9uYW1lKSAtIDEpCisJZmFpbGVkKCJvcGVucHR5Iik7CisgICAgaWYgKChsZWFmID0gc3RycmNocihzbGF2ZV9uYW1lLCAnLycpKSA9PSAwKSB7CisJZXJybm8gPSBFSVNESVI7CisJZmFpbGVkKHNsYXZlX25hbWUpOworICAgIH0KKyAgICBzcHJpbnRmKHNfb3B0aW9uLCAiLVMlcy8lZCIsIHNsYXZlX25hbWUsIGFzbGF2ZSk7CisgICAgaWYgKGZvcmsoKSkgeworCWV4ZWNscCgieHRlcm0iLCAieHRlcm0iLCBzX29wdGlvbiwgIi10aXRsZSIsIHBhdGgsIChjaGFyICopIDApOworCV9leGl0KDApOworICAgIH0KKyAgICBmcCA9IGZkb3BlbihhbWFzdGVyLCAicisiKTsKKyAgICBpZiAoZnAgPT0gMCkKKwlmYWlsZWQocGF0aCk7CisjZWxzZQorICAgIHN0cnVjdCBzdGF0IHNiOworCisgICAgaWYgKHN0YXQocGF0aCwgJnNiKSA8IDApCisJZmFpbGVkKHBhdGgpOworICAgIGlmICgoc2Iuc3RfbW9kZSAmIFNfSUZNVCkgIT0gU19JRkNIUikgeworCWVycm5vID0gRU5PVFRZOworCWZhaWxlZChwYXRoKTsKKyAgICB9CisgICAgZnAgPSBmb3BlbihwYXRoLCAicisiKTsKKyAgICBpZiAoZnAgPT0gMCkKKwlmYWlsZWQocGF0aCk7CisgICAgcHJpbnRmKCJvcGVuZWQgJXNcbiIsIHBhdGgpOworI2VuZGlmCisgICAgYXNzZXJ0KGZwICE9IDApOworICAgIHJldHVybiBmcDsKK30KKworc3RhdGljIHZvaWQKK2luaXRfc2NyZWVuKFNDUkVFTiAqc3AgR0NDX1VOVVNFRCwgdm9pZCAqYXJnKQoreworICAgIERJVFRPICp0YXJnZXQgPSAoRElUVE8gKikgYXJnOworICAgIGludCBoaWdoLCB3aWRlOworICAgIGludCBrOworCisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsKKyAgICBib3goc3Rkc2NyLCAwLCAwKTsKKworICAgIHRhcmdldC0+d2luZG93cyA9IHR5cGVDYWxsb2MoV0lORE9XICosIChzaXplX3QpIHRhcmdldC0+bGVuZ3RoKTsKKyAgICB0YXJnZXQtPnBlZWtzID0gdHlwZUNhbGxvYyhQRUVLLCAoc2l6ZV90KSB0YXJnZXQtPmxlbmd0aCk7CisKKyAgICBoaWdoID0gKExJTkVTIC0gMikgLyB0YXJnZXQtPmxlbmd0aDsKKyAgICB3aWRlID0gKENPTFMgLSAyKTsKKyAgICBmb3IgKGsgPSAwOyBrIDwgdGFyZ2V0LT5sZW5ndGg7ICsraykgeworCVdJTkRPVyAqb3V0ZXIgPSBuZXd3aW4oaGlnaCwgd2lkZSwgMSArIChoaWdoICogayksIDEpOworCVdJTkRPVyAqaW5uZXIgPSBkZXJ3aW4ob3V0ZXIsIGhpZ2ggLSAyLCB3aWRlIC0gMiwgMSwgMSk7CisKKwlib3gob3V0ZXIsIDAsIDApOworCW12d2FkZHN0cihvdXRlciwgMCwgMiwgdGFyZ2V0LT50aXRsZXNba10pOworCXdub3V0cmVmcmVzaChvdXRlcik7CisKKwlzY3JvbGxvayhpbm5lciwgVFJVRSk7CisJa2V5cGFkKGlubmVyLCBUUlVFKTsKKyNpZm5kZWYgVVNFX1BUSFJFQURTCisJbm9kZWxheShpbm5lciwgVFJVRSk7CisjZW5kaWYKKworCXRhcmdldC0+d2luZG93c1trXSA9IGlubmVyOworICAgIH0KKyAgICBkb3VwZGF0ZSgpOworfQorCitzdGF0aWMgdm9pZAorb3Blbl9zY3JlZW4oRElUVE8gKiB0YXJnZXQsIGNoYXIgKipzb3VyY2UsIGludCBsZW5ndGgsIGludCB3aGljaDEpCit7CisgICAgaWYgKHdoaWNoMSAhPSAwKSB7CisJdGFyZ2V0LT5pbnB1dCA9CisJICAgIHRhcmdldC0+b3V0cHV0ID0gb3Blbl90dHkoc291cmNlW3doaWNoMV0pOworICAgIH0gZWxzZSB7CisJdGFyZ2V0LT5pbnB1dCA9IHN0ZGluOworCXRhcmdldC0+b3V0cHV0ID0gc3Rkb3V0OworICAgIH0KKworICAgIHRhcmdldC0+d2hpY2gxID0gd2hpY2gxOworICAgIHRhcmdldC0+dGl0bGVzID0gc291cmNlOworICAgIHRhcmdldC0+bGVuZ3RoID0gbGVuZ3RoOworICAgIHRhcmdldC0+c2NyZWVuID0gbmV3dGVybSgoY2hhciAqKSAwLAkvKiBhc3N1bWUgJFRFUk0gaXMgdGhlIHNhbWUgKi8KKwkJCSAgICAgdGFyZ2V0LT5vdXRwdXQsCisJCQkgICAgIHRhcmdldC0+aW5wdXQpOworCisgICAgaWYgKHRhcmdldC0+c2NyZWVuID09IDApCisJZmFpbGVkKCJuZXd0ZXJtIik7CisKKyAgICAodm9pZCkgVVNJTkdfU0NSRUVOKHRhcmdldC0+c2NyZWVuLCBpbml0X3NjcmVlbiwgdGFyZ2V0KTsKK30KKworc3RhdGljIGludAorY2xvc2Vfc2NyZWVuKFNDUkVFTiAqc3AgR0NDX1VOVVNFRCwgdm9pZCAqYXJnIEdDQ19VTlVTRUQpCit7CisgICAgKHZvaWQpIHNwOworICAgICh2b2lkKSBhcmc7CisgICAgcmV0dXJuIGVuZHdpbigpOworfQorCisvKgorICogUmVhZCBkYXRhIGZyb20gdGhlICdzb3VyY2UnIHNjcmVlbi4KKyAqLworc3RhdGljIGludAorcmVhZF9zY3JlZW4oU0NSRUVOICpzcCBHQ0NfVU5VU0VELCB2b2lkICphcmcpCit7CisgICAgRERBVEEgKmRhdGEgPSAoRERBVEEgKikgYXJnOworICAgIERJVFRPICpkaXR0byA9ICYoZGF0YS0+ZGl0dG9bZGF0YS0+c291cmNlXSk7CisgICAgV0lORE9XICp3aW4gPSBkaXR0by0+d2luZG93c1tkYXRhLT5zb3VyY2VdOworICAgIGludCBjaCA9IHdnZXRjaCh3aW4pOworCisgICAgaWYgKGNoID4gMCAmJiBjaCA8IDI1NikKKwlwdXRfZmlmbygmKGRpdHRvLT5maWZvKSwgY2gpOworICAgIGVsc2UKKwljaCA9IEVSUjsKKworICAgIHJldHVybiBjaDsKK30KKworLyoKKyAqIFdyaXRlIGFsbCBvZiB0aGUgZGF0YSB0aGF0J3MgaW4gZmlmb3MgZm9yIHRoZSAndGFyZ2V0JyBzY3JlZW4uCisgKi8KK3N0YXRpYyBpbnQKK3dyaXRlX3NjcmVlbihTQ1JFRU4gKnNwIEdDQ19VTlVTRUQsIHZvaWQgKmFyZyBHQ0NfVU5VU0VEKQoreworICAgIEREQVRBICpkYXRhID0gKEREQVRBICopIGFyZzsKKyAgICBESVRUTyAqZGl0dG8gPSAmKGRhdGEtPmRpdHRvW2RhdGEtPnRhcmdldF0pOworICAgIGJvb2wgY2hhbmdlZCA9IEZBTFNFOworICAgIGludCB3aGljaDsKKworICAgIGZvciAod2hpY2ggPSAwOyB3aGljaCA8IGRpdHRvLT5sZW5ndGg7ICsrd2hpY2gpIHsKKwlXSU5ET1cgKndpbiA9IGRpdHRvLT53aW5kb3dzW3doaWNoXTsKKwlGSUZPICpmaWZvID0gJihkYXRhLT5kaXR0b1t3aGljaF0uZmlmbyk7CisJUEVFSyAqcGVlayA9ICYoZGl0dG8tPnBlZWtzW3doaWNoXSk7CisJaW50IGNoOworCisJd2hpbGUgKChjaCA9IHBlZWtfZmlmbyhmaWZvLCBwZWVrKSkgPiAwKSB7CisJICAgIGNoYW5nZWQgPSBUUlVFOworCisJICAgIHdhZGRjaCh3aW4sIChjaHR5cGUpIGNoKTsKKwkgICAgd25vdXRyZWZyZXNoKHdpbik7CisJfQorICAgIH0KKworICAgIGlmIChjaGFuZ2VkKQorCWRvdXBkYXRlKCk7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0aWMgdm9pZAorc2hvd19kaXR0byhESVRUTyAqIGRhdGEsIGludCBjb3VudCwgRERBVEEgKiBkZGF0YSkKK3sKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7CisJZGRhdGEtPnRhcmdldCA9IG47CisJVVNJTkdfU0NSRUVOKGRhdGFbbl0uc2NyZWVuLCB3cml0ZV9zY3JlZW4sICh2b2lkICopIGRkYXRhKTsKKyAgICB9Cit9CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKK3N0YXRpYyB2b2lkICoKK2hhbmRsZV9zY3JlZW4odm9pZCAqYXJnKQoreworICAgIEREQVRBIGRkYXRhOworICAgIGludCBjaDsKKworICAgIG1lbXNldCgmZGRhdGEsIDAsIHNpemVvZihkZGF0YSkpOworICAgIGRkYXRhLmRpdHRvID0gKERJVFRPICopIGFyZzsKKyAgICBkZGF0YS5zb3VyY2UgPSBkZGF0YS5kaXR0by0+d2hpY2gxOworICAgIGRkYXRhLmRpdHRvIC09IGRkYXRhLnNvdXJjZTsJLyogLT4gYmFzZSBvZiBhcnJheSAqLworCisgICAgZm9yICg7OykgeworCWNoID0gcmVhZF9zY3JlZW4oZGRhdGEuZGl0dG8tPnNjcmVlbiwgJmRkYXRhKTsKKwlpZiAoY2ggPT0gQ1RSTCgnRCcpKSB7CisJICAgIGludCBsYXRlciA9IChkZGF0YS5zb3VyY2UgPyBkZGF0YS5zb3VyY2UgOiAtMSk7CisJICAgIGludCBqOworCisJICAgIGZvciAoaiA9IGRkYXRhLmRpdHRvLT5sZW5ndGggLSAxOyBqID4gMDsgLS1qKSB7CisJCWlmIChqICE9IGxhdGVyKSB7CisJCSAgICBwdGhyZWFkX2NhbmNlbChkZGF0YS5kaXR0b1tqXS50aHJlYWQpOworCQl9CisJICAgIH0KKwkgICAgaWYgKGxhdGVyID4gMCkgeworCQlwdGhyZWFkX2NhbmNlbChkZGF0YS5kaXR0b1tsYXRlcl0udGhyZWFkKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJc2hvd19kaXR0byhkZGF0YS5kaXR0bywgZGRhdGEuZGl0dG8tPmxlbmd0aCwgJmRkYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGo7CisgICAgRElUVE8gKmRhdGE7CisjaWZuZGVmIFVTRV9QVEhSRUFEUworICAgIGludCBjb3VudDsKKyNlbmRpZgorCisgICAgaWYgKGFyZ2MgPD0gMSkKKwl1c2FnZSgpOworCisgICAgaWYgKChkYXRhID0gdHlwZUNhbGxvYyhESVRUTywgKHNpemVfdCkgYXJnYykpID09IDApCisJZmFpbGVkKCJjYWxsb2MgZGF0YSIpOworCisgICAgZm9yIChqID0gMDsgaiA8IGFyZ2M7IGorKykgeworCW9wZW5fc2NyZWVuKCZkYXRhW2pdLCBhcmd2LCBhcmdjLCBqKTsKKyAgICB9CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyAgICAvKgorICAgICAqIEZvciBtdWx0aS10aHJlYWRlZCBvcGVyYXRpb24sIHNldCB1cCBhIHJlYWRlciBmb3IgZWFjaCBvZiB0aGUgc2NyZWVucy4KKyAgICAgKiBUaGF0IHVzZXMgYmxvY2tpbmcgSS9PIHJhdGhlciB0aGFuIHBvbGxpbmcgZm9yIGlucHV0LCBzbyBubyBjYWxscyB0bworICAgICAqIG5hcG1zKCkgYXJlIG5lZWRlZC4KKyAgICAgKi8KKyAgICBmb3IgKGogPSAwOyBqIDwgYXJnYzsgaisrKSB7CisJKHZvaWQpIHB0aHJlYWRfY3JlYXRlKCYoZGF0YVtqXS50aHJlYWQpLCBOVUxMLCBoYW5kbGVfc2NyZWVuLCAmZGF0YVtqXSk7CisgICAgfQorICAgIHB0aHJlYWRfam9pbihkYXRhWzFdLnRocmVhZCwgTlVMTCk7CisjZWxzZQorICAgIC8qCisgICAgICogTG9vcCwgcmVhZGluZyBjaGFyYWN0ZXJzIGZyb20gYW55IG9mIHRoZSBpbnB1dHMgYW5kIHdyaXRpbmcgdG8gYWxsCisgICAgICogb2YgdGhlIHNjcmVlbnMuCisgICAgICovCisgICAgZm9yIChjb3VudCA9IDA7OyArK2NvdW50KSB7CisJRERBVEEgZGRhdGE7CisJaW50IGNoOworCWludCB3aGljaCA9IChjb3VudCAlIGFyZ2MpOworCisJbmFwbXMoMjApOworCisJZGRhdGEuc291cmNlID0gd2hpY2g7CisJZGRhdGEuZGl0dG8gPSBkYXRhOworCisJY2ggPSBVU0lOR19TQ1JFRU4oZGF0YVt3aGljaF0uc2NyZWVuLCByZWFkX3NjcmVlbiwgJmRkYXRhKTsKKwlpZiAoY2ggPT0gQ1RSTCgnRCcpKSB7CisJICAgIGJyZWFrOworCX0gZWxzZSBpZiAoY2ggIT0gRVJSKSB7CisJICAgIHNob3dfZGl0dG8oZGF0YSwgYXJnYywgJmRkYXRhKTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIENsZWFudXAgYW5kIGV4aXQKKyAgICAgKi8KKyAgICBmb3IgKGogPSBhcmdjIC0gMTsgaiA+PSAwOyBqLS0pIHsKKwlVU0lOR19TQ1JFRU4oZGF0YVtqXS5zY3JlZW4sIGNsb3NlX3NjcmVlbiwgMCk7CisJZnByaW50ZihkYXRhW2pdLm91dHB1dCwgIioqQ2xvc2VkXHJcbiIpOworCisJLyoKKwkgKiBDbG9zaW5nIGJlZm9yZSBhIGRlbHNjcmVlbigpIGhlbHBzIG5jdXJzZXMgZGV0ZXJtaW5lIHRoYXQgdGhlcmUKKwkgKiBpcyBubyB2YWxpZCBvdXRwdXQgYnVmZmVyLCBhbmQgY2FuIHJlbW92ZSB0aGUgc2V0YnVmKCkgZGF0YS4KKwkgKi8KKwlmZmx1c2goZGF0YVtqXS5vdXRwdXQpOworCWZjbG9zZShkYXRhW2pdLm91dHB1dCk7CisJZGVsc2NyZWVuKGRhdGFbal0uc2NyZWVuKTsKKyAgICB9CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvZG90cy5jIGIvdGVzdC9kb3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2NDcxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZG90cy5jCkBAIC0wLDAgKzEsMTYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk5CisgKgorICogJElkOiBkb3RzLmMsdiAxLjE3IDIwMDgvMDIvMDkgMTg6MDg6NTAgdG9tIEV4cCAkCisgKgorICogQSBzaW1wbGUgZGVtbyBvZiB0aGUgdGVybWluZm8gaW50ZXJmYWNlLgorICovCisjZGVmaW5lIFVTRV9USU5GTworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9TRVRVUFRFUk0KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2RlZmluZSB2YWxpZChzKSAoKHMgIT0gMCkgJiYgcyAhPSAoY2hhciAqKS0xKQorCitzdGF0aWMgYm9vbCBpbnRlcnJ1cHRlZCA9IEZBTFNFOworc3RhdGljIGxvbmcgdG90YWxfY2hhcnMgPSAwOworc3RhdGljIHRpbWVfdCBzdGFydGVkOworCitzdGF0aWMgaW50CitvdXRjKFRQVVRTX0FSRyBjKQoreworICAgIGlmIChpbnRlcnJ1cHRlZCkgeworCWNoYXIgdG1wID0gYzsKKwl3cml0ZShTVERPVVRfRklMRU5PLCAmdG1wLCAxKTsKKyAgICB9IGVsc2UgeworCXB1dGMoYywgc3Rkb3V0KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sCitvdXRzKGNoYXIgKnMpCit7CisgICAgaWYgKHZhbGlkKHMpKSB7CisJdHB1dHMocywgMSwgb3V0Yyk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXAodm9pZCkKK3sKKyAgICBvdXRzKGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIGlmICghb3V0cyhvcmlnX2NvbG9ycykpCisJb3V0cyhvcmlnX3BhaXIpOworICAgIG91dHMoY2xlYXJfc2NyZWVuKTsKKyAgICBvdXRzKGN1cnNvcl9ub3JtYWwpOworCisgICAgcHJpbnRmKCJcblxuJWxkIHRvdGFsIGNoYXJzLCByYXRlICUuMmYvc2VjXG4iLAorCSAgIHRvdGFsX2NoYXJzLAorCSAgICgoZG91YmxlKSAodG90YWxfY2hhcnMpIC8gKHRpbWUoKHRpbWVfdCAqKSAwKSAtIHN0YXJ0ZWQpKSk7Cit9CisKK3N0YXRpYyB2b2lkCitvbnNpZyhpbnQgbiBHQ0NfVU5VU0VEKQoreworICAgIGludGVycnVwdGVkID0gVFJVRTsKK30KKworc3RhdGljIGZsb2F0CityYW5mKHZvaWQpCit7CisgICAgbG9uZyByID0gKHJhbmQoKSAmIDA3Nzc3Nyk7CisgICAgcmV0dXJuICgoZmxvYXQpIHIgLyAzMjc2OC4pOworfQorCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGludCB4LCB5LCB6LCBwOworICAgIGZsb2F0IHI7CisgICAgZmxvYXQgYzsKKworICAgIENBVENIQUxMKG9uc2lnKTsKKworICAgIHNyYW5kKCh1bnNpZ25lZCkgdGltZSgwKSk7CisgICAgc2V0dXB0ZXJtKChjaGFyICopIDAsIDEsIChpbnQgKikgMCk7CisgICAgb3V0cyhjbGVhcl9zY3JlZW4pOworICAgIG91dHMoY3Vyc29yX2ludmlzaWJsZSk7CisgICAgaWYgKG1heF9jb2xvcnMgPiAxKSB7CisJaWYgKCF2YWxpZChzZXRfYV9mb3JlZ3JvdW5kKQorCSAgICB8fCAhdmFsaWQoc2V0X2FfYmFja2dyb3VuZCkKKwkgICAgfHwgKCF2YWxpZChvcmlnX2NvbG9ycykgJiYgIXZhbGlkKG9yaWdfcGFpcikpKQorCSAgICBtYXhfY29sb3JzID0gLTE7CisgICAgfQorCisgICAgciA9IChmbG9hdCkgKGxpbmVzIC0gNCk7CisgICAgYyA9IChmbG9hdCkgKGNvbHVtbnMgLSA0KTsKKyAgICBzdGFydGVkID0gdGltZSgodGltZV90ICopIDApOworCisgICAgd2hpbGUgKCFpbnRlcnJ1cHRlZCkgeworCXggPSAoaW50KSAoYyAqIHJhbmYoKSkgKyAyOworCXkgPSAoaW50KSAociAqIHJhbmYoKSkgKyAyOworCXAgPSAocmFuZigpID4gMC45KSA/ICcqJyA6ICcgJzsKKworCXRwdXRzKHRwYXJtMyhjdXJzb3JfYWRkcmVzcywgeSwgeCksIDEsIG91dGMpOworCWlmIChtYXhfY29sb3JzID4gMCkgeworCSAgICB6ID0gKGludCkgKHJhbmYoKSAqIG1heF9jb2xvcnMpOworCSAgICBpZiAocmFuZigpID4gMC4wMSkgeworCQl0cHV0cyh0cGFybTIoc2V0X2FfZm9yZWdyb3VuZCwgeiksIDEsIG91dGMpOworCSAgICB9IGVsc2UgeworCQl0cHV0cyh0cGFybTIoc2V0X2FfYmFja2dyb3VuZCwgeiksIDEsIG91dGMpOworCQluYXBtcygxKTsKKwkgICAgfQorCX0gZWxzZSBpZiAodmFsaWQoZXhpdF9hdHRyaWJ1dGVfbW9kZSkKKwkJICAgJiYgdmFsaWQoZW50ZXJfcmV2ZXJzZV9tb2RlKSkgeworCSAgICBpZiAocmFuZigpIDw9IDAuMDEpIHsKKwkJb3V0cygocmFuZigpID4gMC42KQorCQkgICAgID8gZW50ZXJfcmV2ZXJzZV9tb2RlCisJCSAgICAgOiBleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKwkJbmFwbXMoMSk7CisJICAgIH0KKwl9CisJb3V0YyhwKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwkrK3RvdGFsX2NoYXJzOworICAgIH0KKyAgICBjbGVhbnVwKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwKKyAgICAgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0ZXJtaW5mb1xuIik7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0L2RvdHNfbXZjdXIuYyBiL3Rlc3QvZG90c19tdmN1ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjMwMjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2RvdHNfbXZjdXIuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAtIDIwMDcKKyAqCisgKiAkSWQ6IGRvdHNfbXZjdXIuYyx2IDEuMiAyMDA4LzAyLzA5IDE4OjA4OjU3IHRvbSBFeHAgJAorICoKKyAqIEEgc2ltcGxlIGRlbW8gb2YgdGhlIHRlcm1pbmZvIGludGVyZmFjZSwgYW5kIG12Y3VyLgorICovCisjZGVmaW5lIFVTRV9USU5GTworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9TRVRVUFRFUk0KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2RlZmluZSB2YWxpZChzKSAoKHMgIT0gMCkgJiYgcyAhPSAoY2hhciAqKS0xKQorCitzdGF0aWMgYm9vbCBpbnRlcnJ1cHRlZCA9IEZBTFNFOworc3RhdGljIGxvbmcgdG90YWxfY2hhcnMgPSAwOworc3RhdGljIHRpbWVfdCBzdGFydGVkOworCitzdGF0aWMgaW50CitvdXRjKFRQVVRTX0FSRyBjKQoreworICAgIGlmIChpbnRlcnJ1cHRlZCkgeworCWNoYXIgdG1wID0gYzsKKwl3cml0ZShTVERPVVRfRklMRU5PLCAmdG1wLCAxKTsKKyAgICB9IGVsc2UgeworCXB1dGMoYywgc3Rkb3V0KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sCitvdXRzKGNoYXIgKnMpCit7CisgICAgaWYgKHZhbGlkKHMpKSB7CisJdHB1dHMocywgMSwgb3V0Yyk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXAodm9pZCkKK3sKKyAgICBvdXRzKGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIGlmICghb3V0cyhvcmlnX2NvbG9ycykpCisJb3V0cyhvcmlnX3BhaXIpOworICAgIG91dHMoY2xlYXJfc2NyZWVuKTsKKyAgICBvdXRzKGN1cnNvcl9ub3JtYWwpOworCisgICAgcHJpbnRmKCJcblxuJWxkIHRvdGFsIGNoYXJzLCByYXRlICUuMmYvc2VjXG4iLAorCSAgIHRvdGFsX2NoYXJzLAorCSAgICgoZG91YmxlKSAodG90YWxfY2hhcnMpIC8gKHRpbWUoKHRpbWVfdCAqKSAwKSAtIHN0YXJ0ZWQpKSk7Cit9CisKK3N0YXRpYyB2b2lkCitvbnNpZyhpbnQgbiBHQ0NfVU5VU0VEKQoreworICAgIGludGVycnVwdGVkID0gVFJVRTsKK30KKworc3RhdGljIGZsb2F0CityYW5mKHZvaWQpCit7CisgICAgbG9uZyByID0gKHJhbmQoKSAmIDA3Nzc3Nyk7CisgICAgcmV0dXJuICgoZmxvYXQpIHIgLyAzMjc2OC4pOworfQorCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGludCB4MCA9IDEsIHkwID0gMTsKKyAgICBpbnQgeCwgeSwgeiwgcDsKKyAgICBmbG9hdCByOworICAgIGZsb2F0IGM7CisgICAgU0NSRUVOICpzcDsKKworICAgIENBVENIQUxMKG9uc2lnKTsKKworICAgIHNyYW5kKCh1bnNpZ25lZCkgdGltZSgwKSk7CisgICAgc3AgPSBuZXd0ZXJtKChjaGFyICopIDAsIHN0ZG91dCwgc3RkaW4pOworICAgIG91dHMoY2xlYXJfc2NyZWVuKTsKKyAgICBvdXRzKGN1cnNvcl9ob21lKTsKKyAgICBvdXRzKGN1cnNvcl9pbnZpc2libGUpOworICAgIGlmIChtYXhfY29sb3JzID4gMSkgeworCWlmICghdmFsaWQoc2V0X2FfZm9yZWdyb3VuZCkKKwkgICAgfHwgIXZhbGlkKHNldF9hX2JhY2tncm91bmQpCisJICAgIHx8ICghdmFsaWQob3JpZ19jb2xvcnMpICYmICF2YWxpZChvcmlnX3BhaXIpKSkKKwkgICAgbWF4X2NvbG9ycyA9IC0xOworICAgIH0KKworICAgIHIgPSAoZmxvYXQpIChsaW5lcyAtIDQpOworICAgIGMgPSAoZmxvYXQpIChjb2x1bW5zIC0gNCk7CisgICAgc3RhcnRlZCA9IHRpbWUoKHRpbWVfdCAqKSAwKTsKKworICAgIHdoaWxlICghaW50ZXJydXB0ZWQpIHsKKwl4ID0gKGludCkgKGMgKiByYW5mKCkpICsgMjsKKwl5ID0gKGludCkgKHIgKiByYW5mKCkpICsgMjsKKwlwID0gKHJhbmYoKSA+IDAuOSkgPyAnKicgOiAnICc7CisKKwlpZiAobXZjdXIoeTAsIHgwLCB5LCB4KSAhPSBFUlIpIHsKKwkgICAgeDAgPSB4OworCSAgICB5MCA9IHk7CisJfQorCisJaWYgKG1heF9jb2xvcnMgPiAwKSB7CisJICAgIHogPSAoaW50KSAocmFuZigpICogbWF4X2NvbG9ycyk7CisJICAgIGlmIChyYW5mKCkgPiAwLjAxKSB7CisJCXRwdXRzKHRwYXJtMihzZXRfYV9mb3JlZ3JvdW5kLCB6KSwgMSwgb3V0Yyk7CisJICAgIH0gZWxzZSB7CisJCXRwdXRzKHRwYXJtMihzZXRfYV9iYWNrZ3JvdW5kLCB6KSwgMSwgb3V0Yyk7CisJCW5hcG1zKDEpOworCSAgICB9CisJfSBlbHNlIGlmICh2YWxpZChleGl0X2F0dHJpYnV0ZV9tb2RlKQorCQkgICAmJiB2YWxpZChlbnRlcl9yZXZlcnNlX21vZGUpKSB7CisJICAgIGlmIChyYW5mKCkgPD0gMC4wMSkgeworCQlvdXRzKChyYW5mKCkgPiAwLjYpCisJCSAgICAgPyBlbnRlcl9yZXZlcnNlX21vZGUKKwkJICAgICA6IGV4aXRfYXR0cmlidXRlX21vZGUpOworCQluYXBtcygxKTsKKwkgICAgfQorCX0KKwlvdXRjKHApOworCWZmbHVzaChzdGRvdXQpOworCSsrdG90YWxfY2hhcnM7CisgICAgfQorICAgIGNsZWFudXAoKTsKKyAgICBlbmR3aW4oKTsKKyAgICBkZWxzY3JlZW4oc3ApOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsCisgICAgIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGVybWluZm9cbiIpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC9lY2hvY2hhci5jIGIvdGVzdC9lY2hvY2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZGU3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2VjaG9jaGFyLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBlY2hvY2hhci5jLHYgMS42IDIwMDgvMDQvMTIgMjI6MDY6MDQgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgdGhlIGVjaG9jaGFyIGZ1bmN0aW9uIChjb21wYXJlIHRvIGRvdHMuYykuCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwNi8xMS80CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIHZhbGlkKHMpICgocyAhPSAwKSAmJiBzICE9IChjaGFyICopLTEpCisKK3N0YXRpYyBib29sIGludGVycnVwdGVkID0gRkFMU0U7CitzdGF0aWMgbG9uZyB0b3RhbF9jaGFycyA9IDA7CitzdGF0aWMgdGltZV90IHN0YXJ0ZWQ7CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwKHZvaWQpCit7CisgICAgZW5kd2luKCk7CisKKyAgICBwcmludGYoIlxuXG4lbGQgdG90YWwgY2hhcnMsIHJhdGUgJS4yZi9zZWNcbiIsCisJICAgdG90YWxfY2hhcnMsCisJICAgKChkb3VibGUpICh0b3RhbF9jaGFycykgLyAodGltZSgodGltZV90ICopIDApIC0gc3RhcnRlZCkpKTsKK30KKworc3RhdGljIHZvaWQKK29uc2lnKGludCBuIEdDQ19VTlVTRUQpCit7CisgICAgaW50ZXJydXB0ZWQgPSBUUlVFOworfQorCitzdGF0aWMgZmxvYXQKK3JhbmYodm9pZCkKK3sKKyAgICBsb25nIHIgPSAocmFuZCgpICYgMDc3Nzc3KTsKKyAgICByZXR1cm4gKChmbG9hdCkgciAvIDMyNzY4Lik7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfY29sb3IoY2hhciAqbXlfcGFpcnMsIGludCBmZywgaW50IGJnKQoreworICAgIGludCBwYWlyID0gKGZnICogQ09MT1JTKSArIGJnOworICAgIGlmICghbXlfcGFpcnNbcGFpcl0pIHsKKwlpbml0X3BhaXIocGFpciwgZmcsIGJnKTsKKyAgICB9CisgICAgYXR0cm9uKENPTE9SX1BBSVIocGFpcikpOworfQorCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGludCBjaCwgeCwgeSwgeiwgcDsKKyAgICBmbG9hdCByOworICAgIGZsb2F0IGM7CisgICAgYm9vbCB1c2VfY29sb3JzOworICAgIGJvb2wgb3B0X3IgPSBGQUxTRTsKKyAgICBjaGFyICpteV9wYWlycyA9IDA7CisgICAgaW50IGxhc3RfZmcgPSAwOworICAgIGludCBsYXN0X2JnID0gMDsKKworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgInIiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAncic6CisJICAgIG9wdF9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogZWNob2NoYXIgWy1yXVxuIik7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJfQorICAgIH0KKworICAgIENBVENIQUxMKG9uc2lnKTsKKyAgICBpbml0c2NyKCk7CisKKyAgICB1c2VfY29sb3JzID0gaGFzX2NvbG9ycygpOworICAgIGlmICh1c2VfY29sb3JzKSB7CisJc3RhcnRfY29sb3IoKTsKKwlpZiAoQ09MT1JfUEFJUlMgPiAwKSB7CisJICAgIG15X3BhaXJzID0gdHlwZUNhbGxvYyhjaGFyLCBDT0xPUl9QQUlSUyk7CisJfQorCXVzZV9jb2xvcnMgPSAobXlfcGFpcnMgIT0gMCk7CisgICAgfQorCisgICAgc3JhbmQoKHVuc2lnbmVkKSB0aW1lKDApKTsKKworICAgIGN1cnNfc2V0KDApOworCisgICAgciA9IChmbG9hdCkgKExJTkVTIC0gNCk7CisgICAgYyA9IChmbG9hdCkgKENPTFMgLSA0KTsKKyAgICBzdGFydGVkID0gdGltZSgodGltZV90ICopIDApOworCisgICAgd2hpbGUgKCFpbnRlcnJ1cHRlZCkgeworCXggPSAoaW50KSAoYyAqIHJhbmYoKSkgKyAyOworCXkgPSAoaW50KSAociAqIHJhbmYoKSkgKyAyOworCXAgPSAocmFuZigpID4gMC45KSA/ICcqJyA6ICcgJzsKKworCW1vdmUoeSwgeCk7CisJaWYgKHVzZV9jb2xvcnMgPiAwKSB7CisJICAgIHogPSAoaW50KSAocmFuZigpICogQ09MT1JTKTsKKwkgICAgaWYgKHJhbmYoKSA+IDAuMDEpIHsKKwkJc2V0X2NvbG9yKG15X3BhaXJzLCB6LCBsYXN0X2JnKTsKKwkJbGFzdF9mZyA9IHo7CisJICAgIH0gZWxzZSB7CisJCXNldF9jb2xvcihteV9wYWlycywgbGFzdF9mZywgeik7CisJCWxhc3RfYmcgPSB6OworCQluYXBtcygxKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGlmIChyYW5mKCkgPD0gMC4wMSkgeworCQlpZiAocmFuZigpID4gMC42KQorCQkgICAgYXR0cm9uKEFfUkVWRVJTRSk7CisJCWVsc2UKKwkJICAgIGF0dHJvZmYoQV9SRVZFUlNFKTsKKwkJbmFwbXMoMSk7CisJICAgIH0KKwl9CisJaWYgKG9wdF9yKSB7CisJICAgIGFkZGNoKFVDaGFyKHApKTsKKwkgICAgcmVmcmVzaCgpOworCX0gZWxzZSB7CisJICAgIGVjaG9jaGFyKFVDaGFyKHApKTsKKwl9CisJKyt0b3RhbF9jaGFyczsKKyAgICB9CisgICAgY2xlYW51cCgpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L2VkaXRfZmllbGQuYyBiL3Rlc3QvZWRpdF9maWVsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDAwMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2VkaXRfZmllbGQuYwpAQCAtMCwwICsxLDQ2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGVkaXRfZmllbGQuYyx2IDEuMTQgMjAwOC8xMC8xOCAyMDo0MDoyMCB0b20gRXhwICQKKyAqCisgKiBBIHdyYXBwZXIgZm9yIGZvcm1fZHJpdmVyKCkgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIHVzZXIncyBlZGl0aW5nIGNoYW5nZXMKKyAqIGZvciBlYWNoIGZpZWxkLCBhbmQgbWFrZXMgdGhlIHJlc3VsdCBhdmFpbGFibGUgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCisgKiBpbiBmaWVsZF9idWZmZXIoZmllbGQsMSkuCisgKgorICogVGhvbWFzIERpY2tleSAtIDIwMDMvNC8yNi4KKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfTElCRk9STQorCisjaW5jbHVkZSA8ZWRpdF9maWVsZC5oPgorCitzdGF0aWMgc3RydWN0IHsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgcmVzdWx0OworICAgIGNvbnN0IGNoYXIgKmhlbHA7Cit9IGNvbW1hbmRzW10gPSB7CisKKyAgICB7CisJQ1RSTCgnQScpLCBSRVFfTkVYVF9DSE9JQ0UsICIiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnQicpLCBSRVFfUFJFVl9XT1JELCAiZ28gdG8gcHJldmlvdXMgd29yZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdDJyksIFJFUV9DTFJfRU9MLCAiY2xlYXIgdG8gZW5kIG9mIGxpbmUiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnRCcpLCBSRVFfRE9XTl9GSUVMRCwgIm1vdmUgZG93bndhcmQgdG8gZmllbGQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnRScpLCBSRVFfRU5EX0ZJRUxELCAiZ28gdG8gZW5kIG9mIGZpZWxkIgorICAgIH0sCisgICAgeworCUNUUkwoJ0YnKSwgUkVRX05FWFRfUEFHRSwgImdvIHRvIG5leHQgcGFnZSIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdHJyksIFJFUV9ERUxfV09SRCwgImRlbGV0ZSBjdXJyZW50IHdvcmQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnSCcpLCBSRVFfREVMX1BSRVYsICJkZWxldGUgcHJldmlvdXMgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUNUUkwoJ0knKSwgUkVRX0lOU19DSEFSLCAiaW5zZXJ0IGNoYXJhY3RlciIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdLJyksIFJFUV9DTFJfRU9GLCAiY2xlYXIgdG8gZW5kIG9mIGZpZWxkIgorICAgIH0sCisgICAgeworCUNUUkwoJ0wnKSwgUkVRX0xFRlRfRklFTEQsICJnbyB0byBmaWVsZCB0byBsZWZ0IgorICAgIH0sCisgICAgeworCUNUUkwoJ00nKSwgUkVRX05FV19MSU5FLCAiaW5zZXJ0L292ZXJsYXkgbmV3IGxpbmUiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnTicpLCBSRVFfTkVYVF9GSUVMRCwgImdvIHRvIG5leHQgZmllbGQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnTycpLCBSRVFfSU5TX0xJTkUsICJpbnNlcnQgYmxhbmsgbGluZSBhdCBjdXJzb3IiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnUCcpLCBSRVFfUFJFVl9GSUVMRCwgImdvIHRvIHByZXZpb3VzIGZpZWxkIgorICAgIH0sCisgICAgeworCUNUUkwoJ1EnKSwgTVlfUVVJVCwgImV4aXQgZm9ybSIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdSJyksIFJFUV9SSUdIVF9GSUVMRCwgImdvIHRvIGZpZWxkIHRvIHJpZ2h0IgorICAgIH0sCisgICAgeworCUNUUkwoJ1MnKSwgUkVRX0JFR19GSUVMRCwgImdvIHRvIGJlZ2lubmluZyBvZiBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdUJyksIE1ZX0VEVF9NT0RFLCAidG9nZ2xlIE9fRURJVCBtb2RlLCBjbGVhciBmaWVsZCBzdGF0dXMiLAorICAgIH0sCisgICAgeworCUNUUkwoJ1UnKSwgUkVRX1VQX0ZJRUxELCAibW92ZSB1cHdhcmQgdG8gZmllbGQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnVicpLCBSRVFfREVMX0NIQVIsICJkZWxldGUgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUNUUkwoJ1cnKSwgUkVRX05FWFRfV09SRCwgImdvIHRvIG5leHQgd29yZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdYJyksIFJFUV9DTFJfRklFTEQsICJjbGVhciBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdZJyksIFJFUV9ERUxfTElORSwgImRlbGV0ZSBsaW5lIgorICAgIH0sCisgICAgeworCUNUUkwoJ1onKSwgUkVRX1BSRVZfQ0hPSUNFLCAiIgorICAgIH0sCisgICAgeworCUNUUkwoJ1snKSwgTVlfUVVJVCwgImV4aXQgZm9ybSIKKyAgICB9LAorICAgIHsKKwlDVFJMKCddJyksIE1ZX0lOU19NT0RFLCAidG9nZ2xlIFJFUV9JTlNfTU9ERS9SRVFfT1ZMX01PREUiLAorICAgIH0sCisgICAgeworCUtFWV9GKDEpLCBNWV9IRUxQLCAic2hvdyB0aGlzIHNjcmVlbiIsCisgICAgfSwKKyAgICB7CisJS0VZX0JBQ0tTUEFDRSwgUkVRX0RFTF9QUkVWLCAiZGVsZXRlIHByZXZpb3VzIGNoYXJhY3RlciIKKyAgICB9LAorICAgIHsKKwlLRVlfRE9XTiwgUkVRX0RPV05fQ0hBUiwgIm1vdmUgZG93biAxIGNoYXJhY3RlciIKKyAgICB9LAorICAgIHsKKwlLRVlfRU5ELCBSRVFfTEFTVF9GSUVMRCwgImdvIHRvIGxhc3QgZmllbGQiCisgICAgfSwKKyAgICB7CisJS0VZX0hPTUUsIFJFUV9GSVJTVF9GSUVMRCwgImdvIHRvIGZpcnN0IGZpZWxkIgorICAgIH0sCisgICAgeworCUtFWV9MRUZULCBSRVFfTEVGVF9DSEFSLCAibW92ZSBsZWZ0IDEgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUtFWV9MTCwgUkVRX0xBU1RfRklFTEQsICJnbyB0byBsYXN0IGZpZWxkIgorICAgIH0sCisgICAgeworCUtFWV9ORVhULCBSRVFfTkVYVF9GSUVMRCwgImdvIHRvIG5leHQgZmllbGQiCisgICAgfSwKKyAgICB7CisJS0VZX05QQUdFLCBSRVFfTkVYVF9QQUdFLCAiZ28gdG8gbmV4dCBwYWdlIgorICAgIH0sCisgICAgeworCUtFWV9QUEFHRSwgUkVRX1BSRVZfUEFHRSwgImdvIHRvIHByZXZpb3VzIHBhZ2UiCisgICAgfSwKKyAgICB7CisJS0VZX1BSRVZJT1VTLCBSRVFfUFJFVl9GSUVMRCwgImdvIHRvIHByZXZpb3VzIGZpZWxkIgorICAgIH0sCisgICAgeworCUtFWV9SSUdIVCwgUkVRX1JJR0hUX0NIQVIsICJtb3ZlIHJpZ2h0IDEgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUtFWV9VUCwgUkVRX1VQX0NIQVIsICJtb3ZlIHVwIDEgY2hhcmFjdGVyIgorICAgIH0KK307CisKK3N0YXRpYyBXSU5ET1cgKm9sZF93aW5kb3c7CisKK3N0YXRpYyB2b2lkCitiZWdpbl9wb3B1cCh2b2lkKQoreworICAgIGRvdXBkYXRlKCk7CisgICAgb2xkX3dpbmRvdyA9IGR1cHdpbihjdXJzY3IpOworfQorCitzdGF0aWMgdm9pZAorZW5kX3BvcHVwKHZvaWQpCit7CisgICAgdG91Y2h3aW4ob2xkX3dpbmRvdyk7CisgICAgd25vdXRyZWZyZXNoKG9sZF93aW5kb3cpOworICAgIGRvdXBkYXRlKCk7CisgICAgZGVsd2luKG9sZF93aW5kb3cpOworfQorCisvKgorICogRGlzcGxheSBhIHRlbXBvcmFyeSB3aW5kb3cgbGlzdGluZyB0aGUga2V5c3Ryb2tlLWNvbW1hbmRzIHdlIHJlY29nbml6ZS4KKyAqLwordm9pZAoraGVscF9lZGl0X2ZpZWxkKHZvaWQpCit7CisgICAgaW50IHgwID0gNDsKKyAgICBpbnQgeTAgPSAyOworICAgIGludCB5MSA9IDA7CisgICAgaW50IHkyID0gMDsKKyAgICBpbnQgd2lkZSA9IENPTFMgLSAoKHgwICsgMSkgKiAyKTsKKyAgICBpbnQgaGlnaCA9IExJTkVTIC0gKCh5MCArIDEpICogMik7CisgICAgV0lORE9XICpoZWxwID0gbmV3d2luKGhpZ2gsIHdpZGUsIHkwLCB4MCk7CisgICAgV0lORE9XICpkYXRhID0gbmV3cGFkKDIgKyBTSVpFT0YoY29tbWFuZHMpLCB3aWRlIC0gNCk7CisgICAgdW5zaWduZWQgbjsKKyAgICBpbnQgY2ggPSBFUlI7CisKKyAgICBiZWdpbl9wb3B1cCgpOworCisgICAga2V5cGFkKGhlbHAsIFRSVUUpOworICAgIGtleXBhZChkYXRhLCBUUlVFKTsKKyAgICB3YWRkc3RyKGRhdGEsICJEZWZpbmVkIGZvcm0gZWRpdC90cmF2ZXJzYWwga2V5czpcbiIpOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YoY29tbWFuZHMpOyArK24pIHsKKwljb25zdCBjaGFyICpuYW1lOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCWlmICgobmFtZSA9IGZvcm1fcmVxdWVzdF9uYW1lKGNvbW1hbmRzW25dLnJlc3VsdCkpID09IDApCisjZW5kaWYKKwkgICAgbmFtZSA9IGNvbW1hbmRzW25dLmhlbHA7CisJd3ByaW50dyhkYXRhLCAiJXMgLS0gJXNcbiIsCisJCWtleW5hbWUoY29tbWFuZHNbbl0uY29kZSksCisJCW5hbWUgIT0gMCA/IG5hbWUgOiBjb21tYW5kc1tuXS5oZWxwKTsKKyAgICB9CisgICAgd2FkZHN0cihkYXRhLCAiQXJyb3cga2V5cyBtb3ZlIHdpdGhpbiBhIGZpZWxkIGFzIHlvdSB3b3VsZCBleHBlY3QuIik7CisgICAgeTIgPSBnZXRjdXJ5KGRhdGEpOworCisgICAgZG8geworCXN3aXRjaCAoY2gpIHsKKwljYXNlIEtFWV9IT01FOgorCSAgICB5MSA9IDA7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0VORDoKKwkgICAgeTEgPSB5MjsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUFJFVklPVVM6CisJY2FzZSBLRVlfUFBBR0U6CisJICAgIGlmICh5MSA+IDApIHsKKwkJeTEgLT0gaGlnaCAvIDI7CisJCWlmICh5MSA8IDApCisJCSAgICB5MSA9IDA7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9ORVhUOgorCWNhc2UgS0VZX05QQUdFOgorCSAgICBpZiAoeTEgPCB5MikgeworCQl5MSArPSBoaWdoIC8gMjsKKwkJaWYgKHkxID49IHkyKQorCQkgICAgeTEgPSB5MjsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnUCcpOgorCWNhc2UgS0VZX1VQOgorCSAgICBpZiAoeTEgPiAwKQorCQktLXkxOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdOJyk6CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaWYgKHkxIDwgeTIpCisJCSsreTE7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgRVJSOgorCSAgICBicmVhazsKKwl9CisJd2VyYXNlKGhlbHApOworCWJveChoZWxwLCAwLCAwKTsKKwl3bm91dHJlZnJlc2goaGVscCk7CisJcG5vdXRyZWZyZXNoKGRhdGEsIHkxLCAwLCB5MCArIDEsIHgwICsgMSwgaGlnaCwgd2lkZSk7CisJZG91cGRhdGUoKTsKKyAgICB9IHdoaWxlICgoY2ggPSB3Z2V0Y2goZGF0YSkpICE9IEVSUiAmJiBjaCAhPSBRVUlUICYmIGNoICE9IEVTQ0FQRSk7CisgICAgd2VyYXNlKGhlbHApOworICAgIHdyZWZyZXNoKGhlbHApOworICAgIGRlbHdpbihoZWxwKTsKKyAgICBkZWx3aW4oZGF0YSk7CisKKyAgICBlbmRfcG9wdXAoKTsKK30KKworc3RhdGljIGludAorb2Zmc2V0X2luX2ZpZWxkKEZPUk0gKiBmb3JtKQoreworICAgIEZJRUxEICpmaWVsZCA9IGN1cnJlbnRfZmllbGQoZm9ybSk7CisgICAgcmV0dXJuIGZvcm0tPmN1cmNvbCArIGZvcm0tPmN1cnJvdyAqIGZpZWxkLT5kY29sczsKK30KKworc3RhdGljIHZvaWQKK2luYWN0aXZlX2ZpZWxkKEZJRUxEICogZikKK3sKKyAgICB2b2lkICpwdHIgPSBmaWVsZF91c2VycHRyKGYpOworICAgIHNldF9maWVsZF9iYWNrKGYsIChjaHR5cGUpIHB0cik7Cit9CisKK2ludAorZWRpdF9maWVsZChGT1JNICogZm9ybSwgaW50ICpyZXN1bHQpCit7CisgICAgaW50IGNoID0gd2dldGNoKGZvcm1fd2luKGZvcm0pKTsKKyAgICBpbnQgc3RhdHVzOworICAgIEZJRUxEICpiZWZvcmU7CisgICAgdW5zaWduZWQgbjsKKyAgICBjaGFyIGxlbmd0aHNbODBdOworICAgIGludCBsZW5ndGg7CisgICAgY2hhciAqYnVmZmVyOworICAgIGludCBiZWZvcmVfcm93ID0gZm9ybS0+Y3Vycm93OworICAgIGludCBiZWZvcmVfY29sID0gZm9ybS0+Y3VyY29sOworICAgIGludCBiZWZvcmVfb2ZmID0gb2Zmc2V0X2luX2ZpZWxkKGZvcm0pOworCisgICAgYmVmb3JlID0gY3VycmVudF9maWVsZChmb3JtKTsKKyAgICBzZXRfZmllbGRfYmFjayhiZWZvcmUsIEFfTk9STUFMKTsKKyAgICBpZiAoY2ggPD0gS0VZX01BWCkgeworCXNldF9maWVsZF9iYWNrKGJlZm9yZSwgQV9SRVZFUlNFKTsKKyAgICB9IGVsc2UgaWYgKGNoIDw9IE1BWF9GT1JNX0NPTU1BTkQpIHsKKwlpbmFjdGl2ZV9maWVsZChiZWZvcmUpOworICAgIH0KKworICAgICpyZXN1bHQgPSBjaDsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKGNvbW1hbmRzKTsgKytuKSB7CisJaWYgKGNvbW1hbmRzW25dLmNvZGUgPT0gY2gpIHsKKwkgICAgKnJlc3VsdCA9IGNvbW1hbmRzW25dLnJlc3VsdDsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIHN0YXR1cyA9IGZvcm1fZHJpdmVyKGZvcm0sICpyZXN1bHQpOworCisgICAgaWYgKHN0YXR1cyA9PSBFX09LKSB7CisJYm9vbCBtb2RpZmllZCA9IFRSVUU7CisKKwlsZW5ndGggPSAwOworCWlmICgoYnVmZmVyID0gZmllbGRfYnVmZmVyKGJlZm9yZSwgMSkpICE9IDApCisJICAgIGxlbmd0aCA9IGF0b2koYnVmZmVyKTsKKwlpZiAobGVuZ3RoIDwgYmVmb3JlX29mZikKKwkgICAgbGVuZ3RoID0gYmVmb3JlX29mZjsKKwlzd2l0Y2ggKCpyZXN1bHQpIHsKKwljYXNlIFJFUV9DTFJfRU9GOgorCSAgICBsZW5ndGggPSBiZWZvcmVfb2ZmOworCSAgICBicmVhazsKKwljYXNlIFJFUV9DTFJfRU9MOgorCSAgICBpZiAoYmVmb3JlX3JvdyArIDEgPT0gYmVmb3JlLT5yb3dzKQorCQlsZW5ndGggPSBiZWZvcmVfb2ZmOworCSAgICBicmVhazsKKwljYXNlIFJFUV9DTFJfRklFTEQ6CisJICAgIGxlbmd0aCA9IDA7CisJICAgIGJyZWFrOworCWNhc2UgUkVRX0RFTF9DSEFSOgorCSAgICBpZiAobGVuZ3RoID4gYmVmb3JlX29mZikKKwkJLS1sZW5ndGg7CisJICAgIGJyZWFrOworCWNhc2UgUkVRX0RFTF9QUkVWOgorCSAgICBpZiAobGVuZ3RoID4gMCkgeworCQlpZiAoYmVmb3JlX2NvbCA+IDApIHsKKwkJICAgIC0tbGVuZ3RoOworCQl9IGVsc2UgaWYgKGJlZm9yZV9yb3cgPiAwKSB7CisJCSAgICBsZW5ndGggLT0gYmVmb3JlLT5jb2xzICsgYmVmb3JlX2NvbDsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgUkVRX05FV19MSU5FOgorCSAgICBsZW5ndGggKz0gYmVmb3JlLT5jb2xzOworCSAgICBicmVhazsKKyNpZiAwCisJICAgIC8qIEZJWE1FOiBmaW5pc2ggdGhlc2UgKi8KKwljYXNlIFJFUV9ERUxfTElORToJLyogZGVsZXRlIGxpbmUgKi8KKwljYXNlIFJFUV9ERUxfV09SRDoJLyogZGVsZXRlIHdvcmQgYXQgY3Vyc29yICovCisJY2FzZSBSRVFfSU5TX0NIQVI6CS8qIGluc2VydCBibGFuayBjaGFyIGF0IGN1cnNvciAqLworCWNhc2UgUkVRX0lOU19MSU5FOgkvKiBpbnNlcnQgYmxhbmsgbGluZSBhdCBjdXJzb3IgKi8KKwljYXNlIFJFUV9JTlNfTU9ERToJLyogYmVnaW4gaW5zZXJ0IG1vZGUgKi8KKwljYXNlIFJFUV9PVkxfTU9ERToJLyogYmVnaW4gb3ZlcmxheSBtb2RlICovCisjZW5kaWYKKwkgICAgLyogaWdub3JlIGFsbCBvZiB0aGUgbW90aW9uIGNvbW1hbmRzICovCisJY2FzZSBSRVFfU0NSX0JDSEFSOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9CSFBBR0U6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0JMSU5FOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9CUEFHRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfRkNIQVI6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0ZIUEFHRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfRkxJTkU6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0ZQQUdFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9IQkhBTEY6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0hCTElORToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfSEZIQUxGOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9IRkxJTkU6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfQkVHX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0JFR19MSU5FOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0RPV05fQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9ET1dOX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0VORF9GSUVMRDoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9FTkRfTElORToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9GSVJTVF9GSUVMRDoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9GSVJTVF9QQUdFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0xBU1RfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfTEFTVF9QQUdFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0xFRlRfQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9MRUZUX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX05FWFRfQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9ORVhUX0NIT0lDRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9ORVhUX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX05FWFRfTElORToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9ORVhUX1BBR0U6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfTkVYVF9XT1JEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1BSRVZfQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9QUkVWX0NIT0lDRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9QUkVWX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1BSRVZfTElORToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9QUkVWX1BBR0U6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfUFJFVl9XT1JEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1JJR0hUX0NIQVI6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfUklHSFRfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0ZJUlNUX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NMQVNUX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NORVhUX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NQUkVWX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1VQX0NIQVI6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfVVBfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfVkFMSURBVElPTjoJLyogRkFMTFRIUlUgKi8KKwkgICAgbW9kaWZpZWQgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBtb2RpZmllZCA9IEZBTFNFOworCSAgICBpZiAoY2ggPj0gTUlOX0ZPUk1fQ09NTUFORCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSBpZiAoaXNwcmludChjaCkpIHsKKwkJbW9kaWZpZWQgPSBUUlVFOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKworCS8qCisJICogSWYgd2UgZG8gbm90IGZvcmNlIGEgcmUtdmFsaWRhdGlvbiwgdGhlbiBmaWVsZF9idWZmZXIgMCB3aWxsCisJICogYmUgbGFnZ2luZyBieSBvbmUgY2hhcmFjdGVyLgorCSAqLworCWlmIChtb2RpZmllZCAmJiBmb3JtX2RyaXZlcihmb3JtLCBSRVFfVkFMSURBVElPTikgPT0gRV9PSyAmJiAqcmVzdWx0CisJICAgIDwgTUlOX0ZPUk1fQ09NTUFORCkKKwkgICAgKytsZW5ndGg7CisKKwlzcHJpbnRmKGxlbmd0aHMsICIlZCIsIGxlbmd0aCk7CisJc2V0X2ZpZWxkX2J1ZmZlcihiZWZvcmUsIDEsIGxlbmd0aHMpOworICAgIH0KKworICAgIGlmIChjdXJyZW50X2ZpZWxkKGZvcm0pICE9IGJlZm9yZSkKKwlpbmFjdGl2ZV9maWVsZChiZWZvcmUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisjZWxzZQorCitleHRlcm4gdm9pZCBub19lZGl0X2ZpZWxkKHZvaWQpOworCit2b2lkCitub19lZGl0X2ZpZWxkKHZvaWQpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC9lZGl0X2ZpZWxkLmggYi90ZXN0L2VkaXRfZmllbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTkxN2MyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lZGl0X2ZpZWxkLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGVkaXRfZmllbGQuaCx2IDEuNSAyMDA2LzA2LzAzIDE2OjM4OjU3IHRvbSBFeHAgJAorICoKKyAqIEludGVyZmFjZSBvZiBlZGl0X2ZpZWxkLmMKKyAqLworCisjaWZuZGVmIEVESVRfRk9STV9IX2luY2wKKyNkZWZpbmUgRURJVF9GT1JNX0hfaW5jbCAxCisKKyNpbmNsdWRlIDxmb3JtLmg+CisKKyNkZWZpbmUgRURJVF9GSUVMRChjKSAoTUFYX0ZPUk1fQ09NTUFORCArIGMpCisKKyNkZWZpbmUgTVlfSEVMUAkJRURJVF9GSUVMRCgnaCcpCisjZGVmaW5lIE1ZX1FVSVQJCUVESVRfRklFTEQoJ3EnKQorI2RlZmluZSBNWV9FRFRfTU9ERQlFRElUX0ZJRUxEKCdlJykKKyNkZWZpbmUgTVlfSU5TX01PREUJRURJVF9GSUVMRCgndCcpCisKK2V4dGVybiB2b2lkIGhlbHBfZWRpdF9maWVsZCh2b2lkKTsKK2V4dGVybiBpbnQgZWRpdF9maWVsZChGT1JNICogZm9ybSwgaW50ICpyZXN1bHQpOworCisjZW5kaWYgLyogRURJVF9GT1JNX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvdGVzdC9maWx0ZXIuYyBiL3Rlc3QvZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjZWEzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZmlsdGVyLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3I6ICBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk4CisgKgorICogJElkOiBmaWx0ZXIuYyx2IDEuMTEgMjAwNi8xMi8wOSAxNjo1Mzo0NyB0b20gRXhwICQKKyAqLworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9GSUxURVIKKworLyoKKyAqIEFuIGV4YW1wbGUgb2YgdGhlICdmaWx0ZXIoKScgZnVuY3Rpb24gaW4gbmN1cnNlcywgdGhpcyBwcm9ncmFtIHByb21wdHMKKyAqIGZvciBjb21tYW5kcyBhbmQgZXhlY3V0ZXMgdGhlbSAobGlrZSBhIGNvbW1hbmQgc2hlbGwpLiAgSXQgaWxsdXN0cmF0ZXMKKyAqIGhvdyBuY3Vyc2VzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBwcm9ncmFtcyB0aGF0IGFyZSBub3QgZnVsbC1zY3JlZW4uCisgKgorICogTmN1cnNlcyBkaWZmZXJzIHNsaWdodGx5IGZyb20gU1ZyNCBjdXJzZXMuICBUaGUgbGF0dGVyIGRvZXMgbm90IGZsdXNoIGl0cworICogc3RhdGUgd2hlbiBleGl0aW5nIHByb2dyYW0gbW9kZSwgc28gdGhlIGF0dHJpYnV0ZXMgb24gdGhlIGNvbW1hbmQgbGluZXMgb2YKKyAqIHRoaXMgcHJvZ3JhbSAnYmxlZWQnIG9udG8gdGhlIGV4ZWN1dGVkIGNvbW1hbmRzLiAgUmF0aGVyIHRoYW4gdXNlIHRoZQorICogcmVzZXRfc2hlbGxfbW9kZSgpIGFuZCByZXNldF9wcm9nX21vZGUoKSBmdW5jdGlvbnMsIHdlIGNvdWxkIGludm9rZSBlbmR3aW4oKQorICogYW5kIHJlZnJlc2goKSwgYnV0IHRoYXQgZG9lcyBub3Qgd29yayBhbnkgYmV0dGVyLgorICovCisKK3N0YXRpYyBpbnQKK25ld19jb21tYW5kKGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCwgYXR0cl90IHVuZGVybGluZSkKK3sKKyAgICBpbnQgY29kZTsKKworICAgIGF0dHJvbihBX0JPTEQpOworICAgIHByaW50dygiQ29tbWFuZDogIik7CisgICAgYXR0cm9uKHVuZGVybGluZSk7CisgICAgY29kZSA9IGdldG5zdHIoYnVmZmVyLCBsZW5ndGgpOworICAgIC8qCisgICAgICogSWYgdGhpcyByZXR1cm5zIGFueXRoaW5nIGV4Y2VwdCBFUlIvT0ssIGl0IHdvdWxkIGJlIG9uZSBvZiBuY3Vyc2VzJ3MKKyAgICAgKiBleHRlbnNpb25zLiAgRmlsbCB0aGUgYnVmZmVyIHdpdGggc29tZXRoaW5nIGhhcm1sZXNzIHRoYXQgdGhlIHNoZWxsCisgICAgICogd2lsbCBleGVjdXRlIGFzIGEgY29tbWVudC4KKyAgICAgKi8KKyNpZmRlZiBLRVlfRVZFTlQKKyAgICBpZiAoY29kZSA9PSBLRVlfRVZFTlQpCisJc3RyY3B5KGJ1ZmZlciwgIiMgZXZlbnQhIik7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVTSVpFCisgICAgaWYgKGNvZGUgPT0gS0VZX1JFU0laRSkgeworCXN0cmNweShidWZmZXIsICIjIHJlc2l6ZSEiKTsKKwlnZXRjaCgpOworICAgIH0KKyNlbmRpZgorICAgIGF0dHJvZmYodW5kZXJsaW5lKTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgcHJpbnR3KCJcbiIpOworCisgICAgcmV0dXJuIGNvZGU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGNoYXIgYnVmZmVyWzgwXTsKKyAgICBhdHRyX3QgdW5kZXJsaW5lOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgZmlsdGVyKCk7CisgICAgKHZvaWQpIG5ld3Rlcm0oKGNoYXIgKikgMCwgc3Rkb3V0LCBzdGRpbik7CisgICAgY2JyZWFrKCk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaW50IGJhY2tncm91bmQgPSBDT0xPUl9CTEFDSzsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpICE9IEVSUikKKwkgICAgYmFja2dyb3VuZCA9IC0xOworI2VuZGlmCisJaW5pdF9wYWlyKDEsIENPTE9SX0NZQU4sIGJhY2tncm91bmQpOworCXVuZGVybGluZSA9IENPTE9SX1BBSVIoMSk7CisgICAgfSBlbHNlIHsKKwl1bmRlcmxpbmUgPSBBX1VOREVSTElORTsKKyAgICB9CisKKyAgICB3aGlsZSAobmV3X2NvbW1hbmQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIHVuZGVybGluZSkgIT0gRVJSCisJICAgJiYgc3RybGVuKGJ1ZmZlcikgIT0gMCkgeworCXJlc2V0X3NoZWxsX21vZGUoKTsKKwlwcmludGYoIlxuIik7CisJZmZsdXNoKHN0ZG91dCk7CisJc3lzdGVtKGJ1ZmZlcik7CisJcmVzZXRfcHJvZ19tb2RlKCk7CisJdG91Y2h3aW4oc3Rkc2NyKTsKKwllcmFzZSgpOworCXJlZnJlc2goKTsKKyAgICB9CisgICAgcHJpbnR3KCJkb25lIik7CisgICAgcmVmcmVzaCgpOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGZpbHRlciBmdW5jdGlvblxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZiAvKiBIQVZFX0ZJTFRFUiAqLwpkaWZmIC0tZ2l0IGEvdGVzdC9maXJld29yay5jIGIvdGVzdC9maXJld29yay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzdlOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2ZpcmV3b3JrLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBmaXJld29yay5jLHYgMS4yNCAyMDA2LzA1LzIwIDE1OjM2OjA4IHRvbSBFeHAgJAorICovCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKK3N0YXRpYyBpbnQgbXlfYmcgPSBDT0xPUl9CTEFDSzsKKworc3RhdGljIHZvaWQKK2NsZWFudXAodm9pZCkKK3sKKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKK30KKworc3RhdGljIFJFVFNJR1RZUEUKK29uc2lnKGludCBuIEdDQ19VTlVTRUQpCit7CisgICAgY2xlYW51cCgpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93aXQodm9pZCkKK3sKKyAgICBpbnQgY2g7CisgICAgbmFwbXMoMTIwKTsKKyAgICBpZiAoKGNoID0gZ2V0Y2goKSkgIT0gRVJSKSB7CisjaWZkZWYgS0VZX1JFU0laRQorCWlmIChjaCA9PSBLRVlfUkVTSVpFKSB7CisJICAgIGVyYXNlKCk7CisJfSBlbHNlCisjZW5kaWYKKwlpZiAoY2ggPT0gJ3EnKSB7CisJICAgIGNsZWFudXAoKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKKwl9IGVsc2UgaWYgKGNoID09ICdzJykgeworCSAgICBub2RlbGF5KHN0ZHNjciwgRkFMU0UpOworCX0gZWxzZSBpZiAoY2ggPT0gJyAnKSB7CisJICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50CitnZXRfY29sb3VyKGNodHlwZSAqYm9sZCkKK3sKKyAgICBpbnQgYXR0cjsKKyAgICBhdHRyID0gKHJhbmQoKSAlIDE2KSArIDE7CisKKyAgICAqYm9sZCA9IEFfTk9STUFMOworICAgIGlmIChhdHRyID4gOCkgeworCSpib2xkID0gQV9CT0xEOworCWF0dHIgJj0gNzsKKyAgICB9CisgICAgcmV0dXJuIChhdHRyKTsKK30KKworc3RhdGljCit2b2lkCitleHBsb2RlKGludCByb3csIGludCBjb2wpCit7CisgICAgY2h0eXBlIGJvbGQ7CisgICAgZXJhc2UoKTsKKyAgICBtdnByaW50dyhyb3csIGNvbCwgIi0iKTsKKyAgICBzaG93aXQoKTsKKworICAgIGluaXRfcGFpcigxLCBnZXRfY29sb3VyKCZib2xkKSwgbXlfYmcpOworICAgIGF0dHJzZXQoQ09MT1JfUEFJUigxKSB8IGJvbGQpOworICAgIG12cHJpbnR3KHJvdyAtIDEsIGNvbCAtIDEsICIgLSAiKTsKKyAgICBtdnByaW50dyhyb3cgKyAwLCBjb2wgLSAxLCAiLSstIik7CisgICAgbXZwcmludHcocm93ICsgMSwgY29sIC0gMSwgIiAtICIpOworICAgIHNob3dpdCgpOworCisgICAgaW5pdF9wYWlyKDEsIGdldF9jb2xvdXIoJmJvbGQpLCBteV9iZyk7CisgICAgYXR0cnNldChDT0xPUl9QQUlSKDEpIHwgYm9sZCk7CisgICAgbXZwcmludHcocm93IC0gMiwgY29sIC0gMiwgIiAtLS0gIik7CisgICAgbXZwcmludHcocm93IC0gMSwgY29sIC0gMiwgIi0rKystIik7CisgICAgbXZwcmludHcocm93ICsgMCwgY29sIC0gMiwgIi0rIystIik7CisgICAgbXZwcmludHcocm93ICsgMSwgY29sIC0gMiwgIi0rKystIik7CisgICAgbXZwcmludHcocm93ICsgMiwgY29sIC0gMiwgIiAtLS0gIik7CisgICAgc2hvd2l0KCk7CisKKyAgICBpbml0X3BhaXIoMSwgZ2V0X2NvbG91cigmYm9sZCksIG15X2JnKTsKKyAgICBhdHRyc2V0KENPTE9SX1BBSVIoMSkgfCBib2xkKTsKKyAgICBtdnByaW50dyhyb3cgLSAyLCBjb2wgLSAyLCAiICsrKyAiKTsKKyAgICBtdnByaW50dyhyb3cgLSAxLCBjb2wgLSAyLCAiKysjKysiKTsKKyAgICBtdnByaW50dyhyb3cgKyAwLCBjb2wgLSAyLCAiKyMgIysiKTsKKyAgICBtdnByaW50dyhyb3cgKyAxLCBjb2wgLSAyLCAiKysjKysiKTsKKyAgICBtdnByaW50dyhyb3cgKyAyLCBjb2wgLSAyLCAiICsrKyAiKTsKKyAgICBzaG93aXQoKTsKKworICAgIGluaXRfcGFpcigxLCBnZXRfY29sb3VyKCZib2xkKSwgbXlfYmcpOworICAgIGF0dHJzZXQoQ09MT1JfUEFJUigxKSB8IGJvbGQpOworICAgIG12cHJpbnR3KHJvdyAtIDIsIGNvbCAtIDIsICIgICMgICIpOworICAgIG12cHJpbnR3KHJvdyAtIDEsIGNvbCAtIDIsICIjIyAjIyIpOworICAgIG12cHJpbnR3KHJvdyArIDAsIGNvbCAtIDIsICIjICAgIyIpOworICAgIG12cHJpbnR3KHJvdyArIDEsIGNvbCAtIDIsICIjIyAjIyIpOworICAgIG12cHJpbnR3KHJvdyArIDIsIGNvbCAtIDIsICIgICMgICIpOworICAgIHNob3dpdCgpOworCisgICAgaW5pdF9wYWlyKDEsIGdldF9jb2xvdXIoJmJvbGQpLCBteV9iZyk7CisgICAgYXR0cnNldChDT0xPUl9QQUlSKDEpIHwgYm9sZCk7CisgICAgbXZwcmludHcocm93IC0gMiwgY29sIC0gMiwgIiAjICMgIik7CisgICAgbXZwcmludHcocm93IC0gMSwgY29sIC0gMiwgIiMgICAjIik7CisgICAgbXZwcmludHcocm93ICsgMCwgY29sIC0gMiwgIiAgICAgIik7CisgICAgbXZwcmludHcocm93ICsgMSwgY29sIC0gMiwgIiMgICAjIik7CisgICAgbXZwcmludHcocm93ICsgMiwgY29sIC0gMiwgIiAjICMgIik7CisgICAgc2hvd2l0KCk7Cit9CisKK2ludAorbWFpbigKKwlpbnQgYXJnYyBHQ0NfVU5VU0VELAorCWNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IHN0YXJ0LCBlbmQsIHJvdywgZGlmZiwgZmxhZyA9IDAsIGRpcmVjdGlvbjsKKyAgICB1bnNpZ25lZCBzZWVkOworCisgICAgQ0FUQ0hBTEwob25zaWcpOworCisgICAgaW5pdHNjcigpOworICAgIG5vZWNobygpOworICAgIGNicmVhaygpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBteV9iZyA9IC0xOworI2VuZGlmCisgICAgfQorICAgIGN1cnNfc2V0KDApOworCisgICAgc2VlZCA9IHRpbWUoKHRpbWVfdCAqKSAwKTsKKyAgICBzcmFuZChzZWVkKTsKKyAgICBmb3IgKDs7KSB7CisJZG8geworCSAgICBzdGFydCA9IHJhbmQoKSAlIChDT0xTIC0gMyk7CisJICAgIGVuZCA9IHJhbmQoKSAlIChDT0xTIC0gMyk7CisJICAgIHN0YXJ0ID0gKHN0YXJ0IDwgMikgPyAyIDogc3RhcnQ7CisJICAgIGVuZCA9IChlbmQgPCAyKSA/IDIgOiBlbmQ7CisJICAgIGRpcmVjdGlvbiA9IChzdGFydCA+IGVuZCkgPyAtMSA6IDE7CisJICAgIGRpZmYgPSBhYnMoc3RhcnQgLSBlbmQpOworCX0gd2hpbGUgKGRpZmYgPCAyIHx8IGRpZmYgPj0gTElORVMgLSAyKTsKKwlhdHRyc2V0KEFfTk9STUFMKTsKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IGRpZmY7IHJvdysrKSB7CisJICAgIG12cHJpbnR3KExJTkVTIC0gcm93LCBzdGFydCArIChyb3cgKiBkaXJlY3Rpb24pLAorCQkgICAgIChkaXJlY3Rpb24gPCAwKSA/ICJcXCIgOiAiLyIpOworCSAgICBpZiAoZmxhZysrKSB7CisJCXNob3dpdCgpOworCQllcmFzZSgpOworCQlmbGFnID0gMDsKKwkgICAgfQorCX0KKwlpZiAoZmxhZysrKSB7CisJICAgIHNob3dpdCgpOworCSAgICBmbGFnID0gMDsKKwl9CisJc2VlZCA9IHRpbWUoKHRpbWVfdCAqKSAwKTsKKwlzcmFuZChzZWVkKTsKKwlleHBsb2RlKExJTkVTIC0gcm93LCBzdGFydCArIChkaWZmICogZGlyZWN0aW9uKSk7CisJZXJhc2UoKTsKKwlzaG93aXQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0L2ZpcnN0bGFzdC5jIGIvdGVzdC9maXJzdGxhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY3NjQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9maXJzdGxhc3QuYwpAQCAtMCwwICsxLDExNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIHRlc3Qgd2FzIHdyaXR0ZW4gYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92IHRvIGRlbW9uc3RyYXRlIGRpZmZlcmVuY2UKKyAqIGJldHdlZW4gbmN1cnNlcyA0LjEgYW5kIFNWUjQgY3Vyc2VzCisgKgorICogJElkOiBmaXJzdGxhc3QuYyx2IDEuNSAyMDA2LzA0LzAxIDE5OjAzOjE4IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworc3RhdGljIHZvaWQKK2ZpbGwoV0lORE9XICp3LCBjb25zdCBjaGFyICpzdHIpCit7CisgICAgY29uc3QgY2hhciAqczsKKyAgICBmb3IgKDs7KSB7CisJZm9yIChzID0gc3RyOyAqczsgcysrKSB7CisJICAgIGlmICh3YWRkY2godywgVUNoYXIoKnMpKSA9PSBFUlIpIHsKKwkJd21vdmUodywgMCwgMCk7CisJCXJldHVybjsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELAorICAgICBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIFdJTkRPVyAqbGFyZ2UsICpzbWFsbDsKKyAgICBpbml0c2NyKCk7CisgICAgbm9lY2hvKCk7CisKKyAgICBsYXJnZSA9IG5ld3dpbigyMCwgNjAsIDIsIDEwKTsKKyAgICBzbWFsbCA9IG5ld3dpbigxMCwgMzAsIDcsIDI1KTsKKworICAgIC8qIHRlc3QgMSAtIGFkZGNoICovCisgICAgZmlsbChsYXJnZSwgIkxhcmdlV2luZG93Iik7CisKKyAgICByZWZyZXNoKCk7CisgICAgd3JlZnJlc2gobGFyZ2UpOworICAgIHdyZWZyZXNoKHNtYWxsKTsKKworICAgIG12d2FkZHN0cihzbWFsbCwgNSwgNSwgIiAgIFRlc3QgPHBsYWNlIHRvIGNoYW5nZT4gU3RyaW5nICAgIik7CisgICAgd3JlZnJlc2goc21hbGwpOworICAgIGdldGNoKCk7CisKKyAgICB0b3VjaHdpbihsYXJnZSk7CisgICAgd3JlZnJlc2gobGFyZ2UpOworCisgICAgbXZ3YWRkc3RyKHNtYWxsLCA1LCA1LCAiICAgVGVzdCA8KioqKioqKioqKioqKioqPiBTdHJpbmcgICAiKTsKKyAgICB3cmVmcmVzaChzbWFsbCk7CisKKyAgICAvKiBESUZGRVJFTkNFISAqLworICAgIGdldGNoKCk7CisKKyAgICAvKiB0ZXN0IDI6IGVyYXNlICovCisgICAgZXJhc2UoKTsKKyAgICByZWZyZXNoKCk7CisgICAgZ2V0Y2goKTsKKworICAgIC8qIHRlc3QgMzogY2xydG9lb2wgKi8KKyAgICB3ZXJhc2Uoc21hbGwpOworICAgIHdyZWZyZXNoKHNtYWxsKTsKKyAgICB0b3VjaHdpbihsYXJnZSk7CisgICAgd3JlZnJlc2gobGFyZ2UpOworICAgIHdtb3ZlKHNtYWxsLCA1LCAwKTsKKyAgICB3YWRkc3RyKHNtYWxsLCAiIGNscnRvZW9sPiIpOworICAgIHdjbHJ0b2VvbChzbWFsbCk7CisgICAgd3JlZnJlc2goc21hbGwpOworCisgICAgLyogRElGRkVSRU5DRSEgKi8gOworICAgIGdldGNoKCk7CisKKyAgICAvKiB0ZXN0IDQ6IGNscnRvYm90ICovCisgICAgd2VyYXNlKHNtYWxsKTsKKyAgICB3cmVmcmVzaChzbWFsbCk7CisgICAgdG91Y2h3aW4obGFyZ2UpOworICAgIHdyZWZyZXNoKGxhcmdlKTsKKyAgICB3bW92ZShzbWFsbCwgNSwgMyk7CisgICAgd2FkZHN0cihzbWFsbCwgIiBjbHJ0b2JvdD4iKTsKKyAgICB3Y2xydG9ib3Qoc21hbGwpOworICAgIHdyZWZyZXNoKHNtYWxsKTsKKworICAgIC8qIERJRkZFUkVOQ0UhICovCisgICAgZ2V0Y2goKTsKKworICAgIGVuZHdpbigpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvZm9sZGtleXMuYyBiL3Rlc3QvZm9sZGtleXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBmMTUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9mb2xka2V5cy5jCkBAIC0wLDAgKzEsMjY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5LCAyMDA2CisgKgorICogJElkOiBmb2xka2V5cy5jLHYgMS4zIDIwMDYvMTIvMDkgMTY6NTQ6MDcgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgYSBtZXRob2QgZm9yIGFsdGVyaW5nIGtleSBkZWZpbml0aW9ucyBhdCBydW50aW1lLgorICoKKyAqIFRoaXMgcHJvZ3JhbSByZWFkcyB0aGUga2V5IGRlZmluaXRpb25zLCBtZXJnaW5nIHRob3NlIHdoaWNoIGhhdmUgeHRlcm0tc3R5bGUKKyAqIG1vZGlmaWVycyBpbnRvIHRoZWlyIGVxdWl2YWxlbnRzIHdoaWNoIGhhdmUgbm8gbW9kaWZpZXJzLiAgSXQgZG9lcyB0aGlzCisgKiBtZXJnaW5nIG9ubHkgZm9yIHRoZSBrZXlzIHdoaWNoIGFyZSBkZWZpbmVkIGluIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgTkNVUlNFU19FWFRfRlVOQ1MKKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIE1ZX0xPR0ZJTEUgImRlbW9fZm9sZGtleXMubG9nIgorI2RlZmluZSBNWV9LRVlTIChLRVlfTUFYICsgMSkKKworLyoKKyAqIExvZyB0aGUgbW9zdCByZWNlbnRseS13cml0dGVuIGxpbmUgdG8gb3VyIGxvZ2ZpbGUKKyAqLworc3RhdGljIHZvaWQKK2xvZ19sYXN0X2xpbmUoV0lORE9XICp3aW4pCit7CisgICAgRklMRSAqZnA7CisgICAgaW50IHksIHgsIG47CisgICAgY2hhciB0ZW1wWzI1Nl07CisKKyAgICBpZiAoKGZwID0gZm9wZW4oTVlfTE9HRklMRSwgImEiKSkgIT0gMCkgeworCWludCBuZWVkID0gc2l6ZW9mKHRlbXApIC0gMTsKKwlpZiAobmVlZCA+IENPTFMpCisJICAgIG5lZWQgPSBDT0xTOworCWdldHl4KHdpbiwgeSwgeCk7CisJd21vdmUod2luLCB5IC0gMSwgMCk7CisJbiA9IHdpbm5zdHIod2luLCB0ZW1wLCBuZWVkKTsKKwl3aGlsZSAobi0tID4gMCkgeworCSAgICBpZiAoaXNzcGFjZShVQ2hhcih0ZW1wW25dKSkpCisJCXRlbXBbbl0gPSAnXDAnOworCSAgICBlbHNlCisJCWJyZWFrOworCX0KKwl3bW92ZSh3aW4sIHksIHgpOworCWZwcmludGYoZnAsICIlc1xuIiwgdGVtcCk7CisJZmNsb3NlKGZwKTsKKyAgICB9Cit9CisKKy8qCisgKiBuY3Vyc2VzIGhhcyBubyBBUEkgZm9yIHRlbGxpbmcgd2hhdCB0aGUgYWN0dWFsIGxhc3Qga2V5LWNvZGUgaXMuICBUaGF0IGlzCisgKiBhIHNlY3JldCBiZWNhdXNlIHRoZSBjb2RlcyBwYXN0IEtFWV9NQVggYXJlIGNvbXB1dGVkIGF0IHJ1bi10aW1lIGFuZCBtYXkKKyAqIGRpZmZlciBkZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzIGNhbGxzIHRvIG5ld3Rlcm0oKSwgZXRjLiAgSXQgaXMgdW5saWtlbHkKKyAqIHRoYXQgb25lIGNvdWxkIGhhdmUgbW9yZSB0aGFuIGEgdGhvdXNhbmQga2V5IGRlZmluaXRpb25zLi4uCisgKi8KKyNkZWZpbmUgTUFYX0tFWVMgMjAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICp2YWx1ZTsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgc3RhdGU7Cit9IEtleUluZm87CisKK3N0YXRpYyB2b2lkCitkZW1vX2ZvbGRrZXlzKHZvaWQpCit7CisgICAgS2V5SW5mbyBpbmZvW01BWF9LRVlTXTsKKyAgICBpbnQgaW5mb19sZW4gPSAwOworICAgIGludCBtZXJnZWQgPSAwOworICAgIGludCBjb2RlOworICAgIGludCBqLCBrOworCisgICAgLyoKKyAgICAgKiBUZWxsIG5jdXJzZXMgdGhhdCB3ZSB3YW50IHRvIHVzZSBmdW5jdGlvbiBrZXlzLiAgVGhhdCB3aWxsIG1ha2UgaXQgYWRkCisgICAgICogYW55IHVzZXItZGVmaW5lZCBrZXlzIHRoYXQgYXBwZWFyIGluIHRoZSB0ZXJtaW5mby4KKyAgICAgKi8KKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgIC8qCisgICAgICogTGlzdCB0aGUgcHJlZGVmaW5lZCBrZXlzIHVzaW5nIHRoZSBzdHJuYW1lc1tdIGFycmF5LgorICAgICAqLworICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCBTVFJDT1VOVDsgKytjb2RlKSB7CisJTkNVUlNFU19DT05TVCBjaGFyICpuYW1lID0gc3RybmFtZXNbY29kZV07CisJTkNVUlNFU19DT05TVCBjaGFyICp2YWx1ZSA9IHRpZ2V0c3RyKG5hbWUpOworCWlmICh2YWx1ZSAhPSAwICYmIHZhbHVlICE9IChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgLTEpIHsKKwkgICAgaW5mb1tpbmZvX2xlbl0ubmFtZSA9IHN0cm5hbWVzW2NvZGVdOworCSAgICBpbmZvW2luZm9fbGVuXS5jb2RlID0ga2V5X2RlZmluZWQodmFsdWUpOworCSAgICBpbmZvW2luZm9fbGVuXS52YWx1ZSA9IHZhbHVlOworCSAgICBpbmZvW2luZm9fbGVuXS5zdGF0ZSA9IDA7CisJICAgIGlmIChpbmZvW2luZm9fbGVuXS5jb2RlID4gMCkKKwkJKytpbmZvX2xlbjsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBjYW4gZ2V0IHRoZSBuYW1lcyBmb3IgdXNlci1kZWZpbmVkIGtleXMgZnJvbSBrZXluYW1lKCkuICBJdCByZXR1cm5zCisgICAgICogYSBuYW1lIGxpa2UgS0VZX2ZvbyBmb3IgdGhlIHByZWRlZmluZWQga2V5cywgd2hpY2ggdGlnZXRzdHIoKSBkb2VzIG5vdAorICAgICAqIHVuZGVyc3RhbmQuCisgICAgICovCisgICAgZm9yIChjb2RlID0gS0VZX01BWDsgY29kZSA8IE1BWF9LRVlTOyArK2NvZGUpIHsKKwlOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWUgPSBrZXluYW1lKGNvZGUpOworCWlmIChuYW1lICE9IDApIHsKKwkgICAgaW5mb1tpbmZvX2xlbl0ubmFtZSA9IG5hbWU7CisJICAgIGluZm9baW5mb19sZW5dLmNvZGUgPSBjb2RlOworCSAgICBpbmZvW2luZm9fbGVuXS52YWx1ZSA9IHRpZ2V0c3RyKG5hbWUpOworCSAgICBpbmZvW2luZm9fbGVuXS5zdGF0ZSA9IDA7CisJICAgICsraW5mb19sZW47CisJfQorICAgIH0KKyAgICBwcmludHcoIkluaXRpYWxseSAlZCBrZXkgZGVmaW5pdGlvbnNcbiIsIGluZm9fbGVuKTsKKworICAgIC8qCisgICAgICogTG9vayBmb3Iga2V5cyB0aGF0IGhhdmUgeHRlcm0tc3R5bGUgbW9kaWZpZXJzLgorICAgICAqLworICAgIGZvciAoaiA9IDA7IGogPCBpbmZvX2xlbjsgKytqKSB7CisJaW50IGZpcnN0LCBzZWNvbmQ7CisJY2hhciBmaW5hbFsyXTsKKwljaGFyICp2YWx1ZTsKKwlpZiAoaW5mb1tqXS5zdGF0ZSA9PSAwCisJICAgICYmIHNzY2FuZihpbmZvW2pdLnZhbHVlLAorCQkgICAgICAiXDAzM1slZDslZCVjIiwKKwkJICAgICAgJmZpcnN0LAorCQkgICAgICAmc2Vjb25kLAorCQkgICAgICBmaW5hbCkgPT0gMworCSAgICAmJiAqZmluYWwgIT0gJzsnCisJICAgICYmICh2YWx1ZSA9IHN0cmR1cChpbmZvW2pdLnZhbHVlKSkgIT0gMCkgeworCSAgICBzcHJpbnRmKHZhbHVlLCAiXDAzM1slZCVjIiwgZmlyc3QsICpmaW5hbCk7CisJICAgIGZvciAoayA9IDA7IGsgPCBpbmZvX2xlbjsgKytrKSB7CisJCWlmIChpbmZvW2tdLnN0YXRlID09IDAKKwkJICAgICYmICFzdHJjbXAoaW5mb1trXS52YWx1ZSwgdmFsdWUpKSB7CisJCSAgICBpbmZvW2pdLnN0YXRlID0gMTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKGluZm9bal0uc3RhdGUgPT0gMCkgeworCQlzcHJpbnRmKHZhbHVlLCAiXDAzM08lYyIsICpmaW5hbCk7CisJCWZvciAoayA9IDA7IGsgPCBpbmZvX2xlbjsgKytrKSB7CisJCSAgICBpZiAoaW5mb1trXS5zdGF0ZSA9PSAwCisJCQkmJiAhc3RyY21wKGluZm9ba10udmFsdWUsIHZhbHVlKSkgeworCQkJaW5mb1tqXS5zdGF0ZSA9IDE7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGlmIChpbmZvW2pdLnN0YXRlID09IDEpIHsKKwkJaWYgKChkZWZpbmVfa2V5KGluZm9bal0udmFsdWUsIGluZm9ba10uY29kZSkpICE9IEVSUikgeworCQkgICAgcHJpbnR3KCJtYXAgJXMgdG8gJXNcbiIsIGluZm9bal0udmFsdWUsIGluZm9ba10udmFsdWUpOworCQkgICAga2V5b2soaW5mb1tqXS5jb2RlLCBGQUxTRSk7CisJCSAgICArK21lcmdlZDsKKwkJfSBlbHNlIHsKKwkJICAgIHByaW50dygiPyBjYW5ub3QgZGVmaW5lX2tleSAlZDolc1xuIiwgaiwgaW5mb1tqXS52YWx1ZSk7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJcHJpbnR3KCI/IGNhbm5vdCBtZXJnZSAlZDolc1xuIiwgaiwgaW5mb1tqXS52YWx1ZSk7CisJICAgIH0KKwkgICAgZnJlZSh2YWx1ZSk7CisJfQorICAgIH0KKyAgICBwcmludHcoIk1lcmdlZCB0byAlZCBrZXkgZGVmaW5pdGlvbnNcbiIsIGluZm9fbGVuIC0gbWVyZ2VkKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IGNoOworI2lmIEhBVkVfR0VUVElNRU9GREFZCisgICAgaW50IHNlY3MsIG1zZWNzOworICAgIHN0cnVjdCB0aW1ldmFsIGN1cnJlbnQsIHByZXZpb3VzOworI2VuZGlmCisKKyAgICB1bmxpbmsoTVlfTE9HRklMRSk7CisKKyAgICBuZXd0ZXJtKDAsIHN0ZG91dCwgc3RkaW4pOworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgIG1vdmUoMCwgMCk7CisKKyAgICBkZW1vX2ZvbGRrZXlzKCk7CisKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorICAgIGdldHRpbWVvZmRheSgmcHJldmlvdXMsIDApOworI2VuZGlmCisKKyAgICB3aGlsZSAoKGNoID0gZ2V0Y2goKSkgIT0gRVJSKSB7CisJYm9vbCBlc2NhcGVkID0gKGNoID49IE1ZX0tFWVMpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBrZXluYW1lKGVzY2FwZWQgPyAoY2ggLSBNWV9LRVlTKSA6IGNoKTsKKworI2lmIEhBVkVfR0VUVElNRU9GREFZCisJZ2V0dGltZW9mZGF5KCZjdXJyZW50LCAwKTsKKwlzZWNzID0gY3VycmVudC50dl9zZWMgLSBwcmV2aW91cy50dl9zZWM7CisJbXNlY3MgPSAoY3VycmVudC50dl91c2VjIC0gcHJldmlvdXMudHZfdXNlYykgLyAxMDAwOworCWlmIChtc2VjcyA8IDApIHsKKwkgICAgbXNlY3MgKz0gMTAwMDsKKwkgICAgLS1zZWNzOworCX0KKwlpZiAobXNlY3MgPj0gMTAwMCkgeworCSAgICBzZWNzICs9IG1zZWNzIC8gMTAwMDsKKwkgICAgbXNlY3MgJT0gMTAwMDsKKwl9CisJcHJpbnR3KCIlNmQuJTAzZCAiLCBzZWNzLCBtc2Vjcyk7CisJcHJldmlvdXMgPSBjdXJyZW50OworI2VuZGlmCisJcHJpbnR3KCJLZXljb2RlICVkLCBuYW1lICVzJXNcbiIsCisJICAgICAgIGNoLAorCSAgICAgICBlc2NhcGVkID8gIkVTQy0iIDogIiIsCisJICAgICAgIG5hbWUgIT0gMCA/IG5hbWUgOiAiPG51bGw+Iik7CisJbG9nX2xhc3RfbGluZShzdGRzY3IpOworCWNscnRvZW9sKCk7CisJaWYgKGNoID09ICdxJykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC9nZGMuNiBiL3Rlc3QvZ2RjLjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzYTRmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZ2RjLjYKQEAgLTAsMCArMSw2NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBnZGMuNix2IDEuMyAyMDA2LzA0LzIyIDIzOjAyOjE1IHRvbSBFeHAgJAorLlRIIEdEQyA2CisuU0ggTkFNRQorZ2RjIFwtIGdyYW5kIGRpZ2l0YWwgY2xvY2sgKGN1cnNlcykKKy5TSCBTWU5PUFNJUworLkIgZ2RjCitbLW5dIFsKK1stc10gWworLkkgbgorXQorLlNIIERFU0NSSVBUSU9OCisuSSBHZGMKK3J1bnMgYSBkaWdpdGFsIGNsb2NrIG1hZGUgb2YgcmV2ZXJzZS12aWRlbyBibGFua3Mgb24gYSB0ZXJtaW5hbCBzY3JlZW4uCitJZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgY29sb3IsIHRoZSBjbG9jayBpcyBkcmF3biBpbiByZWQuCitZb3UgY2FuIG1ha2UgdGhlIGNsb2NrIHN0b3AsIHBhdXNlIG9yIHJlc3VtZSBieSBwcmVzc2luZyBhIGBgcScnLAorYGBzJycgb3Igc3BhY2UsIHJlc3BlY3RpdmVseS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIC1uCityZWRpcmVjdHMgaW5wdXQgdG8gL2Rldi9udWxsLCBtYWtpbmcgaXQgaWdub3JlIHRoZSBzdG9wL3BhdXNlIGNvbW1hbmRzLgorWW91IGNhbiBzdGlsbCBzdG9wIGl0IGJ5IHByZXNzaW5nIHRoZSBpbnRlcnJ1cHQga2V5LgorLlRQCisuQiAtcworbWFrZXMgZGlnaXRzIHNjcm9sbCBhcyB0aGV5IGNoYW5nZS4KK1doZW4gcnVubmluZyBvbiBhIGZhc3QgZGlzcGxheSwgdGhlIHByb2dyYW0gYnJlYWtzIHVwIHRoZSBzY3JvbGxpbmcgaW50bworc3Vic2Vjb25kIHJlcGFpbnRzLCBtYWtpbmcgdGhlIG9wZXJhdGlvbiBhcHBlYXIgc21vb3RoLgorLlBQCitXaXRoIGFuIG9wdGlvbmFsIG51bWVyaWMgYXJndW1lbnQKKy5JIG51bQoraXQgc3RvcHMgYWZ0ZXIKKy5JIG51bQorc2Vjb25kcy4KK05vcm1hbGx5IGl0IHJ1bnMgImZvcmV2ZXIiIChjb3VudGluZyBkb3duIGZyb20gMiBiaWxsaW9uIHNlY29uZHMpLgorLlNIIEFVVEhPUgorQW1vcyBTaGFwaXIsIG1vZGlmaWVkIGZvciBjdXJzZXMgYnkgSm9obiBMdXBpZW4uCitJbXByb3ZlbWVudHMgZm9yIG5jdXJzZXMgYnkgVGhvbWFzIERpY2tleS4KZGlmZiAtLWdpdCBhL3Rlc3QvZ2RjLmMgYi90ZXN0L2dkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2dkYy5jCkBAIC0wLDAgKzEsMzUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEdyYW5kIGRpZ2l0YWwgY2xvY2sgZm9yIGN1cnNlcyBjb21wYXRpYmxlIHRlcm1pbmFscworICogVXNhZ2U6IGdkYyBbLXNdIFtuXSAgIC0tIHJ1biBmb3IgbiBzZWNvbmRzIChkZWZhdWx0IGluZmluaXR5KQorICogRmxhZ3M6IC1zOiBzY3JvbGwKKyAqCisgKiBtb2RpZmllZCAxMC0xOC04OSBmb3IgY3Vyc2VzIChqcmwpCisgKiAxMC0xOC04OSBhZGRlZCBzaWduYWwgaGFuZGxpbmcKKyAqCisgKiAkSWQ6IGdkYy5jLHYgMS4zMSAyMDA4LzA4LzAzIDIzOjU4OjQyIHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2RlZmluZSBZQkFTRQkxMAorI2RlZmluZSBYQkFTRQkxMAorI2RlZmluZSBYTEVOR1RICTU0CisjZGVmaW5lIFlERVBUSAk1CisKKyNkZWZpbmUgUEFJUl9ESUdJVFMgMQorI2RlZmluZSBQQUlSX09USEVSUyAyCisjZGVmaW5lIFBBSVJfRlJBTUVTIDMKKworc3RhdGljIHNob3J0IGRpc3BbMTFdID0KK3sKKyAgICAwNzU1NTcsIDAxMTExMSwgMDcxNzQ3LCAwNzE3MTcsIDA1NTcxMSwKKyAgICAwNzQ3MTcsIDA3NDc1NywgMDcxMTExLCAwNzU3NTcsIDA3NTcxNywgMDAyMDIwCit9Oworc3RhdGljIGxvbmcgb2xkZXJbNl0sIG5leHRbNl0sIG5ld2VyWzZdLCBtYXNrOworCitzdGF0aWMgaW50IHNpZ3Rlcm1lZCA9IDA7CitzdGF0aWMgYm9vbCByZWRpcmVjdGVkID0gRkFMU0U7CitzdGF0aWMgYm9vbCBoYXNjb2xvciA9IEZBTFNFOworCitzdGF0aWMgUkVUU0lHVFlQRQorc2lnaG5kbChpbnQgc2lnbm8pCit7CisgICAgc2lnbmFsKHNpZ25vLCBzaWdobmRsKTsKKyAgICBzaWd0ZXJtZWQgPSBzaWdubzsKKyAgICBpZiAocmVkaXJlY3RlZCkgeworCWVuZHdpbigpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZHJhd2JveChib29sIHNjcm9sbGluZykKK3sKKyAgICBjaHR5cGUgYm90dG9tW1hMRU5HVEggKyAxXTsKKyAgICBpbnQgbjsKKworICAgIGlmIChoYXNjb2xvcikKKwlhdHRyc2V0KENPTE9SX1BBSVIoUEFJUl9GUkFNRVMpKTsKKworICAgIG12YWRkY2goWUJBU0UgLSAxLCBYQkFTRSAtIDEsIEFDU19VTENPUk5FUik7CisgICAgaGxpbmUoQUNTX0hMSU5FLCBYTEVOR1RIKTsKKyAgICBtdmFkZGNoKFlCQVNFIC0gMSwgWEJBU0UgKyBYTEVOR1RILCBBQ1NfVVJDT1JORVIpOworCisgICAgbXZhZGRjaChZQkFTRSArIFlERVBUSCwgWEJBU0UgLSAxLCBBQ1NfTExDT1JORVIpOworICAgIGlmICgobXZpbmNobnN0cihZQkFTRSArIFlERVBUSCwgWEJBU0UsIGJvdHRvbSwgWExFTkdUSCkpICE9IEVSUikgeworCWZvciAobiA9IDA7IG4gPCBYTEVOR1RIOyBuKyspIHsKKwkgICAgaWYgKCFzY3JvbGxpbmcpCisJCWJvdHRvbVtuXSAmPSB+QV9DT0xPUjsKKwkgICAgYm90dG9tW25dID0gQUNTX0hMSU5FIHwgKGJvdHRvbVtuXSAmIChBX0FUVFJJQlVURVMgfCBBX0NPTE9SKSk7CisJfQorCW12YWRkY2huc3RyKFlCQVNFICsgWURFUFRILCBYQkFTRSwgYm90dG9tLCBYTEVOR1RIKTsKKyAgICB9CisgICAgbXZhZGRjaChZQkFTRSArIFlERVBUSCwgWEJBU0UgKyBYTEVOR1RILCBBQ1NfTFJDT1JORVIpOworCisgICAgbW92ZShZQkFTRSwgWEJBU0UgLSAxKTsKKyAgICB2bGluZShBQ1NfVkxJTkUsIFlERVBUSCk7CisKKyAgICBtb3ZlKFlCQVNFLCBYQkFTRSArIFhMRU5HVEgpOworICAgIHZsaW5lKEFDU19WTElORSwgWURFUFRIKTsKKworICAgIGlmIChoYXNjb2xvcikKKwlhdHRyc2V0KENPTE9SX1BBSVIoUEFJUl9PVEhFUlMpKTsKK30KKworc3RhdGljIHZvaWQKK3N0YW5kdChpbnQgb24pCit7CisgICAgaWYgKG9uKSB7CisJaWYgKGhhc2NvbG9yKSB7CisJICAgIGF0dHJvbihDT0xPUl9QQUlSKFBBSVJfRElHSVRTKSk7CisJfSBlbHNlIHsKKwkgICAgYXR0cm9uKEFfU1RBTkRPVVQpOworCX0KKyAgICB9IGVsc2UgeworCWlmIChoYXNjb2xvcikgeworCSAgICBhdHRyb24oQ09MT1JfUEFJUihQQUlSX09USEVSUykpOworCX0gZWxzZSB7CisJICAgIGF0dHJvZmYoQV9TVEFORE9VVCk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK3NldChpbnQgdCwgaW50IG4pCit7CisgICAgaW50IGksIG07CisKKyAgICBtID0gNyA8PCBuOworICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwluZXh0W2ldIHw9ICgoZGlzcFt0XSA+PiAoKDQgLSBpKSAqIDMpKSAmIDA3KSA8PCBuOworCW1hc2sgfD0gKG5leHRbaV0gXiBvbGRlcltpXSkgJiBtOworICAgIH0KKyAgICBpZiAobWFzayAmIG0pCisJbWFzayB8PSBtOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqbXNnW10gPQorICAgIHsKKwkiVXNhZ2U6IGdkYyBbb3B0aW9uc10gW2NvdW50XSIKKwksIiIKKwksIk9wdGlvbnM6IgorCSwiICAtbiAgcmVkaXJlY3QgaW5wdXQgdG8gL2Rldi9udWxsIgorCSwiICAtcyAgc2Nyb2xsIGVhY2ggbnVtYmVyIGludG8gcGxhY2UsIHJhdGhlciB0aGFuIGZsaXBwaW5nIgorCSwiIgorCSwiSWYgeW91IHNwZWNpZnkgYSBjb3VudCwgZ2RjIHJ1bnMgZm9yIHRoYXQgbnVtYmVyIG9mIHNlY29uZHMiCisgICAgfTsKKyAgICB1bnNpZ25lZCBqOworICAgIGZvciAoaiA9IDA7IGogPCBTSVpFT0YobXNnKTsgaisrKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ1tqXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgdGltZV90IG5vdzsKKyAgICBzdHJ1Y3QgdG0gKnRtOworICAgIGxvbmcgdCwgYTsKKyAgICBpbnQgaSwgaiwgcywgazsKKyAgICBpbnQgY291bnQgPSAwOworICAgIEZJTEUgKm9mcCA9IHN0ZG91dDsKKyAgICBGSUxFICppZnAgPSBzdGRpbjsKKyAgICBib29sIHNjcm9sID0gRkFMU0U7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBDQVRDSEFMTChzaWdobmRsKTsKKworICAgIHdoaWxlICgoayA9IGdldG9wdChhcmdjLCBhcmd2LCAic24iKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGspIHsKKwljYXNlICdzJzoKKwkgICAgc2Nyb2wgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgaWZwID0gZm9wZW4oIi9kZXYvbnVsbCIsICJyIik7CisJICAgIHJlZGlyZWN0ZWQgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisgICAgaWYgKG9wdGluZCA8IGFyZ2MpIHsKKwljb3VudCA9IGF0b2koYXJndltvcHRpbmQrK10pOworCWFzc2VydChjb3VudCA+PSAwKTsKKyAgICB9CisgICAgaWYgKG9wdGluZCA8IGFyZ2MpCisJdXNhZ2UoKTsKKworICAgIGlmIChyZWRpcmVjdGVkKSB7CisJY2hhciAqbmFtZSA9IGdldGVudigiVEVSTSIpOworCWlmIChuYW1lID09IDAKKwkgICAgfHwgbmV3dGVybShuYW1lLCBvZnAsIGlmcCkgPT0gMCkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBvcGVuIHRlcm1pbmFsXG4iKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisKKyAgICB9IGVsc2UgeworCWluaXRzY3IoKTsKKyAgICB9CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisgICAgbm9kZWxheShzdGRzY3IsIDEpOworICAgIGN1cnNfc2V0KDApOworCisgICAgaGFzY29sb3IgPSBoYXNfY29sb3JzKCk7CisKKyAgICBpZiAoaGFzY29sb3IpIHsKKwlpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBiZyA9IC0xOworI2VuZGlmCisJaW5pdF9wYWlyKFBBSVJfRElHSVRTLCBDT0xPUl9CTEFDSywgQ09MT1JfUkVEKTsKKwlpbml0X3BhaXIoUEFJUl9PVEhFUlMsIENPTE9SX1JFRCwgYmcpOworCWluaXRfcGFpcihQQUlSX0ZSQU1FUywgQ09MT1JfV0hJVEUsIGJnKTsKKwlhdHRyc2V0KENPTE9SX1BBSVIoUEFJUl9PVEhFUlMpKTsKKyAgICB9CisKKyAgcmVzdGFydDoKKyAgICBmb3IgKGogPSAwOyBqIDwgNTsgaisrKQorCW9sZGVyW2pdID0gbmV3ZXJbal0gPSBuZXh0W2pdID0gMDsKKworICAgIGNsZWFyKCk7CisgICAgZHJhd2JveChGQUxTRSk7CisKKyAgICBkbyB7CisJY2hhciBidWZbMzBdOworCisJdGltZSgmbm93KTsKKwl0bSA9IGxvY2FsdGltZSgmbm93KTsKKworCW1hc2sgPSAwOworCXNldCh0bS0+dG1fc2VjICUgMTAsIDApOworCXNldCh0bS0+dG1fc2VjIC8gMTAsIDQpOworCXNldCh0bS0+dG1fbWluICUgMTAsIDEwKTsKKwlzZXQodG0tPnRtX21pbiAvIDEwLCAxNCk7CisJc2V0KHRtLT50bV9ob3VyICUgMTAsIDIwKTsKKwlzZXQodG0tPnRtX2hvdXIgLyAxMCwgMjQpOworCXNldCgxMCwgNyk7CisJc2V0KDEwLCAxNyk7CisKKwlmb3IgKGsgPSAwOyBrIDwgNjsgaysrKSB7CisJICAgIGlmIChzY3JvbCkgeworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkgICAgbmV3ZXJbaV0gPSAobmV3ZXJbaV0gJiB+bWFzaykgfCAobmV3ZXJbaSArIDFdICYgbWFzayk7CisJCW5ld2VyWzVdID0gKG5ld2VyWzVdICYgfm1hc2spIHwgKG5leHRba10gJiBtYXNrKTsKKwkgICAgfSBlbHNlCisJCW5ld2VyW2tdID0gKG5ld2VyW2tdICYgfm1hc2spIHwgKG5leHRba10gJiBtYXNrKTsKKwkgICAgbmV4dFtrXSA9IDA7CisJICAgIGZvciAocyA9IDE7IHMgPj0gMDsgcy0tKSB7CisJCXN0YW5kdChzKTsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkgICAgaWYgKChhID0gKG5ld2VyW2ldIF4gb2xkZXJbaV0pICYgKHMgPyBuZXdlciA6IG9sZGVyKVtpXSkKKwkJCSE9IDApIHsKKwkJCWZvciAoaiA9IDAsIHQgPSAxIDw8IDI2OyB0OyB0ID4+PSAxLCBqKyspIHsKKwkJCSAgICBpZiAoYSAmIHQpIHsKKwkJCQlpZiAoIShhICYgKHQgPDwgMSkpKSB7CisJCQkJICAgIG1vdmUoWUJBU0UgKyBpLCBYQkFTRSArIDIgKiBqKTsKKwkJCQl9CisJCQkJYWRkc3RyKCIgICIpOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmICghcykgeworCQkJb2xkZXJbaV0gPSBuZXdlcltpXTsKKwkJICAgIH0KKwkJfQorCQlpZiAoIXMpIHsKKwkJICAgIGlmIChzY3JvbCkKKwkJCWRyYXdib3goVFJVRSk7CisJCSAgICByZWZyZXNoKCk7CisJCSAgICAvKgorCQkgICAgICogSWYgd2UncmUgc2Nyb2xsaW5nLCBzcGFjZSBvdXQgdGhlIHJlZnJlc2hlcyB0byBmYWtlCisJCSAgICAgKiBtb3ZlbWVudC4gIFRoYXQncyA3IGZyYW1lcywgb3IgNiBpbnRlcnZhbHMsIHdoaWNoIHdvdWxkCisJCSAgICAgKiBiZSAxNjYgbXNlYyBpZiB3ZSBzcHJlYWQgaXQgb3V0IG92ZXIgYSBzZWNvbmQuICBJdCBsb29rcworCQkgICAgICogYmV0dGVyIChidXQgd2lsbCB3b3JrIG9uIGEgc2xvdyB0ZXJtaW5hbCwgZS5nLiwgbGVzcworCQkgICAgICogdGhhbiA5NjAwYmQpIHRvIHNxdWVlemUgdGhhdCBpbnRvIGEgaGFsZi1zZWNvbmQsIGFuZCB1c2UKKwkJICAgICAqIGhhbGYgb2YgMTcwIG1zZWMgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2dyYW0gZG9lc24ndCBlYXQKKwkJICAgICAqIGEgbG90IG9mIHRpbWUgd2hlbiBhc2tpbmcgd2hhdCB0aW1lIGl0IGlzLCBhdCB0aGUgdG9wIG9mCisJCSAgICAgKiB0aGlzIGxvb3AgLVQuRGlja2V5CisJCSAgICAgKi8KKwkJICAgIGlmIChzY3JvbCkKKwkJCW5hcG1zKDg1KTsKKwkJfQorCSAgICB9CisJfQorCisJLyogdGhpcyBkZXBlbmRzIG9uIHRoZSBkZXRhaWxlZCBmb3JtYXQgb2YgY3RpbWUoMykgKi8KKwkodm9pZCkgc3RyY3B5KGJ1ZiwgY3RpbWUoJm5vdykpOworCSh2b2lkKSBzdHJjcHkoYnVmICsgMTAsIGJ1ZiArIDE5KTsKKwltdmFkZHN0cigxNiwgMzAsIGJ1Zik7CisKKwltb3ZlKDYsIDApOworCWRyYXdib3goRkFMU0UpOworCXJlZnJlc2goKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IHNjcm9sbGluZywgd2FpdCAxMDAwIG1zZWMgKDEgc2VjKS4gIFVzZSBuYXBtcygpIHJhdGhlcgorCSAqIHRoYW4gc2xlZXAoKSBiZWNhdXNlIHRoZSBsYXR0ZXIgZG9lcyBvZGQgdGhpbmdzIG9uIHNvbWUgc3lzdGVtcywKKwkgKiBlLmcuLCBzdXNwZW5kaW5nIG91dHB1dCBhcyB3ZWxsLgorCSAqLworCWlmIChzY3JvbCkKKwkgICAgbmFwbXMoNTAwKTsKKwllbHNlCisJICAgIG5hcG1zKDEwMDApOworCisJLyoKKwkgKiBUaGlzIGlzIGEgc2FmZSB3YXkgdG8gY2hlY2sgaWYgd2UncmUgaW50ZXJydXB0ZWQgLSBtYWtpbmcgdGhlIHNpZ25hbAorCSAqIGhhbmRsZXIgc2V0IGEgZmxhZyB0aGF0IHdlIGNhbiBjaGVjay4gIFNpbmNlIHdlJ3JlIHJ1bm5pbmcKKwkgKiBub2RlbGF5KCksIHRoZSB3Z2V0Y2goKSBjYWxsIHJldHVybnMgaW1tZWRpYXRlbHksIGFuZCBpbiBwYXJ0aWN1bGFyCisJICogd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgaW50ZXJydXB0ZWQuICBUaGlzIHdvcmtzIG9ubHkgaWYgd2UgY2FuCisJICogcmVhZCBmcm9tIHRoZSBpbnB1dCwgb2YgY291cnNlLgorCSAqLworCXN3aXRjaCAod2dldGNoKHN0ZHNjcikpIHsKKwljYXNlICdxJzoKKwkgICAgY291bnQgPSAxOworCSAgICBicmVhazsKKwljYXNlICdzJzoKKwkgICAgbm9kZWxheShzdGRzY3IsIEZBTFNFKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnICc6CisJICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKwkgICAgYnJlYWs7CisjaWZkZWYgS0VZX1JFU0laRQorCWNhc2UgS0VZX1JFU0laRToKKyNlbmRpZgorCWNhc2UgJz8nOgorCSAgICBnb3RvIHJlc3RhcnQ7CisJY2FzZSBFUlI6CisJICAgIGlmIChzaWd0ZXJtZWQpIHsKKwkJc3RhbmRlbmQoKTsKKwkJZW5kd2luKCk7CisJCWZwcmludGYoc3RkZXJyLCAiZ2RjIHRlcm1pbmF0ZWQgYnkgc2lnbmFsICVkXG4iLCBzaWd0ZXJtZWQpOworCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCSAgICB9CisJICAgIC8qIEZBTExUSFJVICovCisJZGVmYXVsdDoKKwkgICAgY29udGludWU7CisJfQorICAgIH0gd2hpbGUgKC0tY291bnQpOworICAgIHN0YW5kZW5kKCk7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvaGFub2kuYyBiL3Rlc3QvaGFub2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBmYjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9oYW5vaS5jCkBAIC0wLDAgKzEsMzM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCU5hbWU6IFRvd2VycyBvZiBIYW5vaS4KKyAqCisgKglEZXNjOgorICoJCVRoaXMgaXMgYSBwbGF5YWJsZSBjb3B5IG9mIHRvd2VycyBvZiBoYW5vaS4KKyAqCQlJdHMgc29sZSBwdXJwb3NlIGlzIHRvIGRlbW9uc3RyYXRlIG15IEFtaWdhIEN1cnNlcyBwYWNrYWdlLgorICoJCVRoaXMgcHJvZ3JhbSBzaG91bGQgY29tcGlsZSBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIEN1cnNlcy4KKyAqCQknaGFub2knCQl3aWxsIGdpdmUgYSBtYW51YWwgZ2FtZSB3aXRoIDcgcGxheWluZyBwaWVjZXMuCisgKgkJJ2hhbm9pIG4nCXdpbGwgZ2l2ZSBhIG1hbnVhbCBnYW1lIHdpdGggbiBwbGF5aW5nIHBpZWNlcy4KKyAqCQknaGFub2kgbiBhJyB3aWxsIGdpdmUgYW4gYXV0byBzb2x2ZWQgZ2FtZSB3aXRoIG4gcGxheWluZyBwaWVjZXMuCisgKgorICoJQXV0aG9yOiBTaW1vbiBKIFJheWJvdWxkCShzaWVAZnVsY3J1bS5idC5jby51aykuCisgKiAJKFRoaXMgdmVyc2lvbiBoYXMgYmVlbiBzbGlnaHRseSBtb2RpZmllZCBieSB0aGUgbmN1cnNlcyBtYWludGFpbmVycy4pCisgKgorICoJRGF0ZTogMDUuTm92LjkwCisgKgorICogJElkOiBoYW5vaS5jLHYgMS4yNyAyMDA4LzA4LzA0IDEwOjU3OjU5IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2RlZmluZSBOUEVHUwkJCTMJLyogVGhpcyBpcyBub3QgY29uZmlndXJhYmxlICEhICovCisjZGVmaW5lIE1JTlRJTEVTCQkzCisjZGVmaW5lIE1BWFRJTEVTCQk5CisjZGVmaW5lIERFRkFVTFRUSUxFUwkJNworI2RlZmluZSBUT1BMSU5FCQkJNgorI2RlZmluZSBCQVNFTElORQkJMTYKKyNkZWZpbmUgU1RBVFVTTElORQkJKExJTkVTLTMpCisjZGVmaW5lIExFRlRQRUcJCQkxOQorI2RlZmluZSBNSURQRUcJCQkzOQorI2RlZmluZSBSSUdIVFBFRwkJNTkKKworI2RlZmluZSBMRU5UT0lORCh4KQkJKCgoeCktMSkvMikKKyNkZWZpbmUgT1RIRVIoYSxiKQkJKDMtKChhKSsoYikpKQorCitzdHJ1Y3QgUGVnIHsKKyAgICBzaXplX3QgTGVuZ3RoW01BWFRJTEVTXTsKKyAgICBpbnQgQ291bnQ7Cit9OworCitzdGF0aWMgc3RydWN0IFBlZyBQZWdzW05QRUdTXTsKK3N0YXRpYyBpbnQgUGVnUG9zW10gPQore0xFRlRQRUcsIE1JRFBFRywgUklHSFRQRUd9Oworc3RhdGljIGludCBUaWxlQ29sb3VyW10gPQoreworICAgIENPTE9SX0dSRUVOLAkJLyogTGVuZ3RoIDMgKi8KKyAgICBDT0xPUl9NQUdFTlRBLAkJLyogTGVuZ3RoIDUgKi8KKyAgICBDT0xPUl9SRUQsCQkJLyogTGVuZ3RoIDcgKi8KKyAgICBDT0xPUl9CTFVFLAkJCS8qIExlbmd0aCA5ICovCisgICAgQ09MT1JfQ1lBTiwJCQkvKiBMZW5ndGggMTEgKi8KKyAgICBDT0xPUl9ZRUxMT1csCQkvKiBMZW5ndGggMTMgKi8KKyAgICBDT0xPUl9HUkVFTiwJCS8qIExlbmd0aCAxNSAqLworICAgIENPTE9SX01BR0VOVEEsCQkvKiBMZW5ndGggMTcgKi8KKyAgICBDT0xPUl9SRUQsCQkJLyogTGVuZ3RoIDE5ICovCit9Oworc3RhdGljIGludCBOTW92ZXMgPSAwOworc3RhdGljIGJvb2wgQXV0b0ZsYWcgPSBGQUxTRTsKKworc3RhdGljIHZvaWQgSW5pdFRpbGVzKGludCBOVGlsZXMpOworc3RhdGljIHZvaWQgRGlzcGxheVRpbGVzKHZvaWQpOworc3RhdGljIHZvaWQgTWFrZU1vdmUoaW50IEZyb20sIGludCBUbyk7CitzdGF0aWMgdm9pZCBBdXRvTW92ZShpbnQgRnJvbSwgaW50IFRvLCBpbnQgTnVtKTsKK3N0YXRpYyB2b2lkIFVzYWdlKHZvaWQpOworc3RhdGljIGludCBTb2x2ZWQoaW50IE51bVRpbGVzKTsKK3N0YXRpYyBpbnQgR2V0TW92ZShpbnQgKkZyb20sIGludCAqVG8pOworc3RhdGljIGludCBJbnZhbGlkTW92ZShpbnQgRnJvbSwgaW50IFRvKTsKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgTlRpbGVzLCBGcm9tQ29sLCBUb0NvbDsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHN3aXRjaCAoYXJnYykgeworICAgIGNhc2UgMToKKwlOVGlsZXMgPSBERUZBVUxUVElMRVM7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCU5UaWxlcyA9IGF0b2koYXJndlsxXSk7CisJaWYgKE5UaWxlcyA+IE1BWFRJTEVTIHx8IE5UaWxlcyA8IE1JTlRJTEVTKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiUmFuZ2UgJWQgdG8gJWRcbiIsIE1JTlRJTEVTLCBNQVhUSUxFUyk7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJfQorCWJyZWFrOworICAgIGNhc2UgMzoKKwlpZiAoc3RyY21wKGFyZ3ZbMl0sICJhIikpIHsKKwkgICAgVXNhZ2UoKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisJTlRpbGVzID0gYXRvaShhcmd2WzFdKTsKKwlpZiAoTlRpbGVzID4gTUFYVElMRVMgfHwgTlRpbGVzIDwgTUlOVElMRVMpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJSYW5nZSAlZCB0byAlZFxuIiwgTUlOVElMRVMsIE1BWFRJTEVTKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisJQXV0b0ZsYWcgPSBUUlVFOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJVXNhZ2UoKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKyNpZmRlZiBUUkFDRQorICAgIHRyYWNlKFRSQUNFX01BWElNVU0pOworI2VuZGlmCisgICAgaW5pdHNjcigpOworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgaTsKKwlpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBiZyA9IC0xOworI2VuZGlmCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkgICAgaW5pdF9wYWlyKGkgKyAxLCBiZywgVGlsZUNvbG91cltpXSk7CisgICAgfQorICAgIGNicmVhaygpOworICAgIGlmIChMSU5FUyA8IDI0KSB7CisJZW5kd2luKCk7CisJZnByaW50ZihzdGRlcnIsICJNaW4gc2NyZWVuIGxlbmd0aCAyNCBsaW5lc1xuIik7CisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgaWYgKEF1dG9GbGFnKSB7CisJY3Vyc19zZXQoMCk7CisJbGVhdmVvayhzdGRzY3IsIFRSVUUpOwkvKiBBdHRlbXB0IHRvIHJlbW92ZSBjdXJzb3IgKi8KKyAgICB9CisgICAgSW5pdFRpbGVzKE5UaWxlcyk7CisgICAgRGlzcGxheVRpbGVzKCk7CisgICAgaWYgKEF1dG9GbGFnKSB7CisJZG8geworCSAgICBub2VjaG8oKTsKKwkgICAgQXV0b01vdmUoMCwgMiwgTlRpbGVzKTsKKwl9IHdoaWxlICghU29sdmVkKE5UaWxlcykpOworCXNsZWVwKDIpOworICAgIH0gZWxzZSB7CisJZWNobygpOworCWZvciAoOzspIHsKKwkgICAgaWYgKEdldE1vdmUoJkZyb21Db2wsICZUb0NvbCkpCisJCWJyZWFrOworCSAgICBpZiAoSW52YWxpZE1vdmUoRnJvbUNvbCwgVG9Db2wpKSB7CisJCW12YWRkc3RyKFNUQVRVU0xJTkUsIDAsICJJbnZhbGlkIE1vdmUgISEiKTsKKwkJcmVmcmVzaCgpOworCQliZWVwKCk7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIE1ha2VNb3ZlKEZyb21Db2wsIFRvQ29sKTsKKwkgICAgaWYgKFNvbHZlZChOVGlsZXMpKSB7CisJCW12cHJpbnR3KFNUQVRVU0xJTkUsIDAsCisJCQkgIldlbGwgRG9uZSAhISBZb3UgZGlkIGl0IGluICVkIG1vdmVzIiwgTk1vdmVzKTsKKwkJcmVmcmVzaCgpOworCQlzbGVlcCg1KTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBpbnQKK0ludmFsaWRNb3ZlKGludCBGcm9tLCBpbnQgVG8pCit7CisgICAgaWYgKEZyb20gPj0gTlBFR1MpCisJcmV0dXJuIFRSVUU7CisgICAgaWYgKEZyb20gPCAwKQorCXJldHVybiBUUlVFOworICAgIGlmIChUbyA+PSBOUEVHUykKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoVG8gPCAwKQorCXJldHVybiBUUlVFOworICAgIGlmIChGcm9tID09IFRvKQorCXJldHVybiBUUlVFOworICAgIGlmICghUGVnc1tGcm9tXS5Db3VudCkKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoUGVnc1tUb10uQ291bnQgJiYKKwlQZWdzW0Zyb21dLkxlbmd0aFtQZWdzW0Zyb21dLkNvdW50IC0gMV0gPgorCVBlZ3NbVG9dLkxlbmd0aFtQZWdzW1RvXS5Db3VudCAtIDFdKQorCXJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK0luaXRUaWxlcyhpbnQgTlRpbGVzKQoreworICAgIGludCBTaXplLCBTbG90Tm87CisKKyAgICBmb3IgKFNpemUgPSBOVGlsZXMgKiAyICsgMSwgU2xvdE5vID0gMDsgU2l6ZSA+PSAzOyBTaXplIC09IDIpCisJUGVnc1swXS5MZW5ndGhbU2xvdE5vKytdID0gU2l6ZTsKKworICAgIFBlZ3NbMF0uQ291bnQgPSBOVGlsZXM7CisgICAgUGVnc1sxXS5Db3VudCA9IDA7CisgICAgUGVnc1syXS5Db3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitEaXNwbGF5VGlsZXModm9pZCkKK3sKKyAgICBpbnQgTGluZSwgcGVnLCBTbG90Tm87CisgICAgY2hhciBUaWxlQnVmW0JVRlNJWl07CisKKyAgICBlcmFzZSgpOworICAgIG12YWRkc3RyKDEsIDI0LCAiVCBPIFcgRSBSIFMgICBPIEYgICBIIEEgTiBPIEkiKTsKKyAgICBtdmFkZHN0cigzLCAzNCwgIlNKUiAxOTkwIik7CisgICAgbXZwcmludHcoMTksIDUsICJNb3ZlcyA6ICVkIiwgTk1vdmVzKTsKKyAgICBhdHRyc2V0KEFfUkVWRVJTRSk7CisgICAgbXZhZGRzdHIoQkFTRUxJTkUsIDgsCisJICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisKKyAgICBmb3IgKExpbmUgPSBUT1BMSU5FOyBMaW5lIDwgQkFTRUxJTkU7IExpbmUrKykgeworCW12YWRkY2goTGluZSwgTEVGVFBFRywgJyAnKTsKKwltdmFkZGNoKExpbmUsIE1JRFBFRywgJyAnKTsKKwltdmFkZGNoKExpbmUsIFJJR0hUUEVHLCAnICcpOworICAgIH0KKyAgICBtdmFkZGNoKEJBU0VMSU5FLCBMRUZUUEVHLCAnMScpOworICAgIG12YWRkY2goQkFTRUxJTkUsIE1JRFBFRywgJzInKTsKKyAgICBtdmFkZGNoKEJBU0VMSU5FLCBSSUdIVFBFRywgJzMnKTsKKyAgICBhdHRyc2V0KEFfTk9STUFMKTsKKworICAgIC8qIERyYXcgdGlsZXMgKi8KKyAgICBmb3IgKHBlZyA9IDA7IHBlZyA8IE5QRUdTOyBwZWcrKykgeworCWZvciAoU2xvdE5vID0gMDsgU2xvdE5vIDwgUGVnc1twZWddLkNvdW50OyBTbG90Tm8rKykgeworCSAgICB1bnNpZ25lZCBsZW4gPSBQZWdzW3BlZ10uTGVuZ3RoW1Nsb3ROb107CisJICAgIGlmIChsZW4gPCBzaXplb2YoVGlsZUJ1ZikgLSAxICYmIGxlbiA8ICh1bnNpZ25lZCkgUGVnUG9zW3BlZ10pIHsKKwkJbWVtc2V0KFRpbGVCdWYsICcgJywgbGVuKTsKKwkJVGlsZUJ1ZltsZW5dID0gJ1wwJzsKKwkJaWYgKGhhc19jb2xvcnMoKSkKKwkJICAgIGF0dHJzZXQoQ09MT1JfUEFJUihMRU5UT0lORChsZW4pKSk7CisJCWVsc2UKKwkJICAgIGF0dHJzZXQoQV9SRVZFUlNFKTsKKwkJbXZhZGRzdHIoQkFTRUxJTkUgLSAoU2xvdE5vICsgMSksCisJCQkgKGludCkgKFBlZ1Bvc1twZWddIC0gbGVuIC8gMiksCisJCQkgVGlsZUJ1Zik7CisJICAgIH0KKwl9CisgICAgfQorICAgIGF0dHJzZXQoQV9OT1JNQUwpOworICAgIHJlZnJlc2goKTsKK30KKworc3RhdGljIGludAorR2V0TW92ZShpbnQgKkZyb20sIGludCAqVG8pCit7CisgICAgbXZhZGRzdHIoU1RBVFVTTElORSwgMCwgIk5leHQgbW92ZSAoJ3EnIHRvIHF1aXQpIGZyb20gIik7CisgICAgY2xydG9lb2woKTsKKyAgICByZWZyZXNoKCk7CisgICAgaWYgKCgqRnJvbSA9IGdldGNoKCkpID09ICdxJykKKwlyZXR1cm4gVFJVRTsKKyAgICAqRnJvbSAtPSAoJzAnICsgMSk7CisgICAgYWRkc3RyKCIgdG8gIik7CisgICAgY2xydG9lb2woKTsKKyAgICByZWZyZXNoKCk7CisKKyAgICBpZiAoKCpUbyA9IGdldGNoKCkpID09ICdxJykKKwlyZXR1cm4gVFJVRTsKKyAgICAqVG8gLT0gKCcwJyArIDEpOworICAgIHJlZnJlc2goKTsKKyAgICBpZiAoIUF1dG9GbGFnKQorCW5hcG1zKDUwMCk7CisKKyAgICBtb3ZlKFNUQVRVU0xJTkUsIDApOworICAgIGNscnRvZW9sKCk7CisgICAgcmVmcmVzaCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK01ha2VNb3ZlKGludCBGcm9tLCBpbnQgVG8pCit7CisgICAgUGVnc1tGcm9tXS5Db3VudC0tOworICAgIFBlZ3NbVG9dLkxlbmd0aFtQZWdzW1RvXS5Db3VudF0gPSBQZWdzW0Zyb21dLkxlbmd0aFtQZWdzW0Zyb21dLkNvdW50XTsKKyAgICBQZWdzW1RvXS5Db3VudCsrOworICAgIE5Nb3ZlcysrOworICAgIERpc3BsYXlUaWxlcygpOworfQorCitzdGF0aWMgdm9pZAorQXV0b01vdmUoaW50IEZyb20sIGludCBUbywgaW50IE51bSkKK3sKKyAgICBpZiAoTnVtID09IDEpIHsKKwlNYWtlTW92ZShGcm9tLCBUbyk7CisJbmFwbXMoNTAwKTsKKwlyZXR1cm47CisgICAgfQorICAgIEF1dG9Nb3ZlKEZyb20sIE9USEVSKEZyb20sIFRvKSwgTnVtIC0gMSk7CisgICAgTWFrZU1vdmUoRnJvbSwgVG8pOworICAgIG5hcG1zKDUwMCk7CisgICAgQXV0b01vdmUoT1RIRVIoRnJvbSwgVG8pLCBUbywgTnVtIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQKK1NvbHZlZChpbnQgTnVtVGlsZXMpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgTlBFR1M7IGkrKykKKwlpZiAoUGVnc1tpXS5Db3VudCA9PSBOdW1UaWxlcykKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorVXNhZ2Uodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBoYW5vaSBbPE5vIE9mIFRpbGVzPl0gW2FdXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKwkgICAgIlRoZSAnYScgb3B0aW9uIGNhdXNlcyB0aGUgdG93ZXIgdG8gYmUgc29sdmVkIGF1dG9tYXRpY2FsbHlcbiIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC9oYXNodGVzdC5jIGIvdGVzdC9oYXNodGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWIwMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2hhc2h0ZXN0LmMKQEAgLTAsMCArMSwyNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogaGFzaHRlc3QuYyAtLSB0ZXN0IGhhc2ggbWFwcGluZworICoKKyAqIEdlbmVyYXRlIHRpbWluZyBzdGF0aXN0aWNzIGZvciB2ZXJ0aWNhbC1tb3Rpb24gb3B0aW1pemF0aW9uLgorICoKKyAqICRJZDogaGFzaHRlc3QuYyx2IDEuMjkgMjAwOC8wOC8xNiAxNzoyNjo0NCB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNkZWZpbmUgTE9fQ0hBUiAnICcKKyNkZWZpbmUgSElfQ0hBUiAnficKKworc3RhdGljIGJvb2wgY29udGludW91cyA9IEZBTFNFOworc3RhdGljIGJvb2wgcmV2ZXJzZV9sb29wcyA9IEZBTFNFOworc3RhdGljIGJvb2wgc2luZ2xlX3N0ZXAgPSBGQUxTRTsKK3N0YXRpYyBib29sIGV4dGVuZF9jb3JuZXIgPSBGQUxTRTsKK3N0YXRpYyBpbnQgZm9vdF9saW5lcyA9IDA7CitzdGF0aWMgaW50IGhlYWRfbGluZXMgPSAwOworCitzdGF0aWMgdm9pZAorY2xlYW51cCh2b2lkKQoreworICAgIG1vdmUoTElORVMgLSAxLCAwKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIHJlZnJlc2goKTsKKyAgICBlbmR3aW4oKTsKK30KKworc3RhdGljIFJFVFNJR1RZUEUKK2ZpbmlzaChpbnQgc2lnIEdDQ19VTlVTRUQpCit7CisgICAgY2xlYW51cCgpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW5saW5lcyhpbnQgYmFzZSkKK3sKKyAgICBpbnQgaSwgajsKKworI2lmIFVTRV9UUkFDRQorICAgIGlmIChiYXNlID09ICdhJykKKwlUcmFjZSgoIlJlc2V0dGluZyBzY3JlZW4iKSk7CisgICAgZWxzZQorCVRyYWNlKCgiUGFpbnRpbmcgYCVjJyBzY3JlZW4iLCBiYXNlKSk7CisjZW5kaWYKKworICAgIC8qIERvIHRoaXMgc28gd3JpdGVzIHRvIGxvd2VyLXJpZ2h0IGNvcm5lciBkb24ndCBjYXVzZSBhIHNwdXJpb3VzCisgICAgICogc2Nyb2xsaW5nIG9wZXJhdGlvbi4gIFRoaXMgX3Nob3VsZG4ndF8gYnJlYWsgdGhlIHNjcm9sbGluZworICAgICAqIG9wdGltaXphdGlvbiwgc2luY2UgdGhhdCdzIGNvbXB1dGVkIGluIHRoZSByZWZyZXNoKCkgY2FsbC4KKyAgICAgKi8KKyAgICBzY3JvbGxvayhzdGRzY3IsIEZBTFNFKTsKKworICAgIG1vdmUoMCwgMCk7CisgICAgZm9yIChpID0gMDsgaSA8IGhlYWRfbGluZXM7IGkrKykKKwlmb3IgKGogPSAwOyBqIDwgQ09MUzsgaisrKQorCSAgICBhZGRjaChVQ2hhcigoaiAlIDggPT0gMCkgPyAoJ0EnICsgaiAvIDgpIDogJy0nKSk7CisKKyAgICBtb3ZlKGhlYWRfbGluZXMsIDApOworICAgIGZvciAoaSA9IGhlYWRfbGluZXM7IGkgPCBMSU5FUyAtIGZvb3RfbGluZXM7IGkrKykgeworCWNodHlwZSBjID0gKGJhc2UgLSBMT19DSEFSICsgaSkgJSAoSElfQ0hBUiAtIExPX0NIQVIgKyAxKSArIExPX0NIQVI7CisJaW50IGhpID0gKGV4dGVuZF9jb3JuZXIgfHwgKGkgPCBMSU5FUyAtIDEpKSA/IENPTFMgOiBDT0xTIC0gMTsKKwlmb3IgKGogPSAwOyBqIDwgaGk7IGorKykKKwkgICAgYWRkY2goYyk7CisgICAgfQorCisgICAgZm9yIChpID0gTElORVMgLSBmb290X2xpbmVzOyBpIDwgTElORVM7IGkrKykgeworCW1vdmUoaSwgMCk7CisJZm9yIChqID0gMDsgaiA8IChleHRlbmRfY29ybmVyID8gQ09MUyA6IENPTFMgLSAxKTsgaisrKQorCSAgICBhZGRjaChVQ2hhcigoaiAlIDggPT0gMCkgPyAoJ0EnICsgaiAvIDgpIDogJy0nKSk7CisgICAgfQorCisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsKKyAgICBpZiAoc2luZ2xlX3N0ZXApIHsKKwltb3ZlKExJTkVTIC0gMSwgMCk7CisJZ2V0Y2goKTsKKyAgICB9IGVsc2UKKwlyZWZyZXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkCitvbmVfY3ljbGUoaW50IGNoKQoreworICAgIGlmIChjb250aW51b3VzKSB7CisJZ2VubGluZXMoY2gpOworICAgIH0gZWxzZSBpZiAoY2ggIT0gJ2EnKSB7CisJZ2VubGluZXMoJ2EnKTsKKwlnZW5saW5lcyhjaCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcnVuX3Rlc3QoYm9vbCBvcHRpbWl6ZWQgR0NDX1VOVVNFRCkKK3sKKyAgICBjaGFyIGNoOworICAgIGludCBsbyA9IGNvbnRpbnVvdXMgPyBMT19DSEFSIDogJ2EnIC0gTElORVM7CisgICAgaW50IGhpID0gY29udGludW91cyA/IEhJX0NIQVIgOiAnYScgKyBMSU5FUzsKKworICAgIGlmIChsbyA8IExPX0NIQVIpCisJbG8gPSBMT19DSEFSOworICAgIGlmIChoaSA+IEhJX0NIQVIpCisJaGkgPSBISV9DSEFSOworCisjaWYgZGVmaW5lZChUUkFDRSkgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCisgICAgaWYgKG9wdGltaXplZCkgeworCVRyYWNlKCgiV2l0aCBoYXNoIG1hcHBpbmciKSk7CisJX25jX29wdGltaXplX2VuYWJsZSB8PSBPUFRJTUlaRV9IQVNITUFQOworICAgIH0gZWxzZSB7CisJVHJhY2UoKCJXaXRob3V0IGhhc2ggbWFwcGluZyIpKTsKKwlfbmNfb3B0aW1pemVfZW5hYmxlICY9IH5PUFRJTUlaRV9IQVNITUFQOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHJldmVyc2VfbG9vcHMpCisJZm9yIChjaCA9IGhpOyBjaCA+PSBsbzsgY2gtLSkKKwkgICAgb25lX2N5Y2xlKGNoKTsKKyAgICBlbHNlCisJZm9yIChjaCA9IGxvOyBjaCA8PSBoaTsgY2grKykKKwkgICAgb25lX2N5Y2xlKGNoKTsKK30KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRibFtdID0KKyAgICB7CisJIlVzYWdlOiBoYXNodGVzdCBbb3B0aW9uc10iCisJLCIiCisJLCJPcHRpb25zOiIKKwksIiAgLWMgICAgICBjb250aW51b3VzIChkb24ndCByZXNldCBiZXR3ZWVuIHJlZnJlc2gncykiCisJLCIgIC1mIG51bSAgbGVhdmUgJ251bScgbGluZXMgY29uc3RhbnQgZm9yIGZvb3RlciIKKwksIiAgLWggbnVtICBsZWF2ZSAnbnVtJyBsaW5lcyBjb25zdGFudCBmb3IgaGVhZGVyIgorCSwiICAtbCBudW0gIHJlcGVhdCB0ZXN0ICdudW0nIHRpbWVzIgorCSwiICAtbiAgICAgIHRlc3QgdGhlIG5vcm1hbCBvcHRpbWl6ZXIiCisJLCIgIC1vICAgICAgdGVzdCB0aGUgaGFzaGVkIG9wdGltaXplciIKKwksIiAgLXIgICAgICByZXZlcnNlIHRoZSBsb29wcyIKKwksIiAgLXMgICAgICBzaW5nbGUtc3RlcCIKKwksIiAgLXggICAgICBhc3N1bWUgbG93ZXItcmlnaHQgY29ybmVyIGV4dGVuc2lvbiIKKyAgICB9OworICAgIHNpemVfdCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YmwpOyBuKyspCisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgdGJsW25dKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgYzsKKyAgICBpbnQgdGVzdF9sb29wcyA9IDE7CisgICAgaW50IHRlc3Rfbm9ybWFsID0gRkFMU0U7CisgICAgaW50IHRlc3Rfb3B0aW1pemUgPSBGQUxTRTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiY2Y6aDpsOm5vcnN4IikpICE9IC0xKSB7CisJc3dpdGNoIChjKSB7CisJY2FzZSAnYyc6CisJICAgIGNvbnRpbnVvdXMgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdmJzoKKwkgICAgZm9vdF9saW5lcyA9IGF0b2kob3B0YXJnKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnaCc6CisJICAgIGhlYWRfbGluZXMgPSBhdG9pKG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ2wnOgorCSAgICB0ZXN0X2xvb3BzID0gYXRvaShvcHRhcmcpOworCSAgICBhc3NlcnQodGVzdF9sb29wcyA+PSAwKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CisJICAgIHRlc3Rfbm9ybWFsID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbyc6CisJICAgIHRlc3Rfb3B0aW1pemUgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdyJzoKKwkgICAgcmV2ZXJzZV9sb29wcyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3MnOgorCSAgICBzaW5nbGVfc3RlcCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3gnOgorCSAgICBleHRlbmRfY29ybmVyID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorICAgIGlmICghdGVzdF9ub3JtYWwgJiYgIXRlc3Rfb3B0aW1pemUpIHsKKwl0ZXN0X25vcm1hbCA9IFRSVUU7CisJdGVzdF9vcHRpbWl6ZSA9IFRSVUU7CisgICAgfQorI2lmIFVTRV9UUkFDRQorICAgIHRyYWNlKFRSQUNFX1RJTUVTKTsKKyNlbmRpZgorCisgICAgQ0FUQ0hBTEwoZmluaXNoKTsJCS8qIGFycmFuZ2UgaW50ZXJydXB0cyB0byB0ZXJtaW5hdGUgKi8KKworICAgICh2b2lkKSBpbml0c2NyKCk7CQkvKiBpbml0aWFsaXplIHRoZSBjdXJzZXMgbGlicmFyeSAqLworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBub25sKCk7CQkvKiB0ZWxsIGN1cnNlcyBub3QgdG8gZG8gTkwtPkNSL05MIG9uIG91dHB1dCAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsKKworICAgIHdoaWxlICh0ZXN0X2xvb3BzLS0gPiAwKSB7CisJaWYgKHRlc3Rfbm9ybWFsKQorCSAgICBydW5fdGVzdChGQUxTRSk7CisJaWYgKHRlc3Rfb3B0aW1pemUpCisJICAgIHJ1bl90ZXN0KFRSVUUpOworICAgIH0KKworICAgIGNsZWFudXAoKTsJCQkvKiB3ZSdyZSBkb25lICovCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKy8qIGhhc2h0ZXN0LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS90ZXN0L2luY2hfd2lkZS5jIGIvdGVzdC9pbmNoX3dpZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWFmNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9pbmNoX3dpZGUuYwpAQCAtMCwwICsxLDI3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGluY2hfd2lkZS5jLHYgMS42IDIwMDcvMDcvMjEgMTg6Mzc6MzggdG9tIEV4cCAkCisgKi8KKy8qCisgICAgICAgaW50IGluX3djaChjY2hhcl90ICp3Y3ZhbCk7CisgICAgICAgaW50IG12aW5fd2NoKGludCB5LCBpbnQgeCwgY2NoYXJfdCAqd2N2YWwpOworICAgICAgIGludCBtdndpbl93Y2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2NoYXJfdCAqd2N2YWwpOworICAgICAgIGludCB3aW5fd2NoKFdJTkRPVyAqd2luLCBjY2hhcl90ICp3Y3ZhbCk7CisgICAgICAgaW50IGluX3djaHN0cihjY2hhcl90ICp3Y2hzdHIpOworICAgICAgIGludCBpbl93Y2huc3RyKGNjaGFyX3QgKndjaHN0ciwgaW50IG4pOworICAgICAgIGludCB3aW5fd2Noc3RyKFdJTkRPVyAqd2luLCBjY2hhcl90ICp3Y2hzdHIpOworICAgICAgIGludCB3aW5fd2NobnN0cihXSU5ET1cgKndpbiwgY2NoYXJfdCAqd2Noc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12aW5fd2Noc3RyKGludCB5LCBpbnQgeCwgY2NoYXJfdCAqd2Noc3RyKTsKKyAgICAgICBpbnQgbXZpbl93Y2huc3RyKGludCB5LCBpbnQgeCwgY2NoYXJfdCAqd2Noc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12d2luX3djaHN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjY2hhcl90ICp3Y2hzdHIpOworICAgICAgIGludCBtdndpbl93Y2huc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNjaGFyX3QgKndjaHN0ciwgaW50IG4pOworKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKworI2RlZmluZSBCQVNFX1kgNworI2RlZmluZSBNQVhfQ09MUyAxMDI0CisKK3N0YXRpYyBib29sCitRdWl0KGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID09IEVSUiB8fCBjaCA9PSAncScgfHwgY2ggPT0gUVVJVCB8fCBjaCA9PSBFU0NBUEUpOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2luY2hzKGludCBsZXZlbCwgY2hhciAqKmFyZ3YsIFdJTkRPVyAqY2hyd2luLCBXSU5ET1cgKnN0cndpbikKK3sKKyAgICBXSU5ET1cgKnR4dGJveCA9IDA7CisgICAgV0lORE9XICp0eHR3aW4gPSAwOworICAgIEZJTEUgKmZwOworICAgIGludCBqOworICAgIGludCB0eHRfeCA9IDAsIHR4dF95ID0gMDsKKyAgICBpbnQgYmFzZV95OworICAgIGludCBsaW1pdDsKKyAgICBjY2hhcl90IGNoOworICAgIGNjaGFyX3QgdGV4dFtNQVhfQ09MU107CisKKyAgICBpZiAoYXJndltsZXZlbF0gPT0gMCkgeworCWJlZXAoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGxldmVsID4gMSkgeworCXR4dGJveCA9IG5ld3dpbihMSU5FUyAtIEJBU0VfWSwgQ09MUyAtIGxldmVsLCBCQVNFX1ksIGxldmVsKTsKKwlib3godHh0Ym94LCAwLCAwKTsKKwl3bm91dHJlZnJlc2godHh0Ym94KTsKKworCXR4dHdpbiA9IGRlcndpbih0eHRib3gsCisJCQlnZXRtYXh5KHR4dGJveCkgLSAyLAorCQkJZ2V0bWF4eCh0eHRib3gpIC0gMiwKKwkJCTEsIDEpOworCWJhc2VfeSA9IDA7CisgICAgfSBlbHNlIHsKKwl0eHR3aW4gPSBzdGRzY3I7CisJYmFzZV95ID0gQkFTRV9ZOworICAgIH0KKworICAgIGtleXBhZCh0eHR3aW4sIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICB0eHRfeSA9IGJhc2VfeTsKKyAgICB0eHRfeCA9IDA7CisgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisgICAgaWYgKChmcCA9IGZvcGVuKGFyZ3ZbbGV2ZWxdLCAiciIpKSAhPSAwKSB7CisJd2hpbGUgKChqID0gZmdldGMoZnApKSAhPSBFT0YpIHsKKwkgICAgaWYgKHdhZGRjaCh0eHR3aW4sIFVDaGFyKGopKSAhPSBPSykgeworCQlicmVhazsKKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0gZWxzZSB7CisJd3ByaW50dyh0eHR3aW4sICJDYW5ub3Qgb3BlbjpcbiVzIiwgYXJndlsxXSk7CisgICAgfQorCisgICAgd2hpbGUgKCFRdWl0KGogPSBtdndnZXRjaCh0eHR3aW4sIHR4dF95LCB0eHRfeCkpKSB7CisJc3dpdGNoIChqKSB7CisJY2FzZSBLRVlfRE9XTjoKKwljYXNlICdqJzoKKwkgICAgaWYgKHR4dF95IDwgZ2V0bWF4eSh0eHR3aW4pIC0gMSkKKwkJdHh0X3krKzsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1VQOgorCWNhc2UgJ2snOgorCSAgICBpZiAodHh0X3kgPiBiYXNlX3kpCisJCXR4dF95LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCWNhc2UgJ2gnOgorCSAgICBpZiAodHh0X3ggPiAwKQorCQl0eHRfeC0tOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUklHSFQ6CisJY2FzZSAnbCc6CisJICAgIGlmICh0eHRfeCA8IGdldG1heHgodHh0d2luKSAtIDEpCisJCXR4dF94Kys7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgdGVzdF9pbmNocyhsZXZlbCArIDEsIGFyZ3YsIGNocndpbiwgc3Ryd2luKTsKKwkgICAgaWYgKHR4dGJveCAhPSAwKSB7CisJCXRvdWNod2luKHR4dGJveCk7CisJCXdub3V0cmVmcmVzaCh0eHRib3gpOworCSAgICB9IGVsc2UgeworCQl0b3VjaHdpbih0eHR3aW4pOworCQl3bm91dHJlZnJlc2godHh0d2luKTsKKwkgICAgfQorCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKworCW12d3ByaW50dyhjaHJ3aW4sIDAsIDAsICJjaGFyOiIpOworCXdjbHJ0b2VvbChjaHJ3aW4pOworCisJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCSAgICBpZiAod2luX3djaCh0eHR3aW4sICZjaCkgIT0gRVJSKSB7CisJCWlmICh3YWRkX3djaChjaHJ3aW4sICZjaCkgIT0gRVJSKSB7CisJCSAgICBmb3IgKGogPSB0eHRfeCArIDE7IGogPCBnZXRtYXh4KHR4dHdpbik7ICsraikgeworCQkJaWYgKG12d2luX3djaCh0eHR3aW4sIHR4dF95LCBqLCAmY2gpICE9IEVSUikgeworCQkJICAgIGlmICh3YWRkX3djaChjaHJ3aW4sICZjaCkgPT0gRVJSKSB7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfSBlbHNlIHsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCSAgICBpZiAoaW5fd2NoKCZjaCkgIT0gRVJSKSB7CisJCWlmICh3YWRkX3djaChjaHJ3aW4sICZjaCkgIT0gRVJSKSB7CisJCSAgICBmb3IgKGogPSB0eHRfeCArIDE7IGogPCBnZXRtYXh4KHR4dHdpbik7ICsraikgeworCQkJaWYgKG12aW5fd2NoKHR4dF95LCBqLCAmY2gpICE9IEVSUikgeworCQkJICAgIGlmICh3YWRkX3djaChjaHJ3aW4sICZjaCkgPT0gRVJSKSB7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfSBlbHNlIHsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCXdub3V0cmVmcmVzaChjaHJ3aW4pOworCisJbXZ3cHJpbnR3KHN0cndpbiwgMCwgMCwgInRleHQ6Iik7CisJd2NscnRvYm90KHN0cndpbik7CisKKwlsaW1pdCA9IGdldG1heHgoc3Ryd2luKSAtIDU7CisKKwlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJICAgIGlmICh3aW5fd2Noc3RyKHR4dHdpbiwgdGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZF93Y2hzdHIoc3Ryd2luLCAwLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKHdpbl93Y2huc3RyKHR4dHdpbiwgdGV4dCwgbGltaXQpICE9IEVSUikgeworCQltdndhZGRfd2Noc3RyKHN0cndpbiwgMSwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZ3aW5fd2Noc3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCB0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkX3djaHN0cihzdHJ3aW4sIDIsIDUsIHRleHQpOworCSAgICB9CisKKwkgICAgaWYgKG12d2luX3djaG5zdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkX3djaHN0cihzdHJ3aW4sIDMsIDUsIHRleHQpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCSAgICBpZiAoaW5fd2Noc3RyKHRleHQpICE9IEVSUikgeworCQltdndhZGRfd2Noc3RyKHN0cndpbiwgMCwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJICAgIGlmIChpbl93Y2huc3RyKHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkX3djaHN0cihzdHJ3aW4sIDEsIDUsIHRleHQpOworCSAgICB9CisKKwkgICAgaWYgKG12aW5fd2Noc3RyKHR4dF95LCB0eHRfeCwgdGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZF93Y2hzdHIoc3Ryd2luLCAyLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIGlmIChtdmluX3djaG5zdHIodHh0X3ksIHR4dF94LCB0ZXh0LCBsaW1pdCkgIT0gRVJSKSB7CisJCW12d2FkZF93Y2hzdHIoc3Ryd2luLCAzLCA1LCB0ZXh0KTsKKwkgICAgfQorCX0KKworCXdub3V0cmVmcmVzaChzdHJ3aW4pOworICAgIH0KKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJZGVsd2luKHR4dHdpbik7CisJZGVsd2luKHR4dGJveCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXSU5ET1cgKmNocmJveDsKKyAgICBXSU5ET1cgKmNocndpbjsKKyAgICBXSU5ET1cgKnN0cndpbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmIChhcmdjIDwgMikgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGZpbGVcbiIsIGFyZ3ZbMF0pOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaW5pdHNjcigpOworCisgICAgY2hyYm94ID0gZGVyd2luKHN0ZHNjciwgQkFTRV9ZLCBDT0xTLCAwLCAwKTsKKyAgICBib3goY2hyYm94LCAwLCAwKTsKKyAgICB3bm91dHJlZnJlc2goY2hyYm94KTsKKworICAgIGNocndpbiA9IGRlcndpbihjaHJib3gsIDEsIENPTFMgLSAyLCAxLCAxKTsKKyAgICBzdHJ3aW4gPSBkZXJ3aW4oY2hyYm94LCA0LCBDT0xTIC0gMiwgMiwgMSk7CisKKyAgICB0ZXN0X2luY2hzKDEsIGFyZ3YsIGNocndpbiwgc3Ryd2luKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIHdpZGUtbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0L2luY2hzLmMgYi90ZXN0L2luY2hzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwZDMyNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvaW5jaHMuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGluY2hzLmMsdiAxLjkgMjAwNy8wNy8yMSAxOTowMTo0MyB0b20gRXhwICQKKyAqCisgKiBBdXRob3I6IFRob21hcyBFIERpY2tleQorICovCisvKgorICAgICAgIGNodHlwZSBpbmNoKHZvaWQpOworICAgICAgIGNodHlwZSB3aW5jaChXSU5ET1cgKndpbik7CisgICAgICAgY2h0eXBlIG12aW5jaChpbnQgeSwgaW50IHgpOworICAgICAgIGNodHlwZSBtdndpbmNoKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpOworICAgICAgIGludCBpbmNoc3RyKGNodHlwZSAqY2hzdHIpOworICAgICAgIGludCBpbmNobnN0cihjaHR5cGUgKmNoc3RyLCBpbnQgbik7CisgICAgICAgaW50IHdpbmNoc3RyKFdJTkRPVyAqd2luLCBjaHR5cGUgKmNoc3RyKTsKKyAgICAgICBpbnQgd2luY2huc3RyKFdJTkRPVyAqd2luLCBjaHR5cGUgKmNoc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12aW5jaHN0cihpbnQgeSwgaW50IHgsIGNodHlwZSAqY2hzdHIpOworICAgICAgIGludCBtdmluY2huc3RyKGludCB5LCBpbnQgeCwgY2h0eXBlICpjaHN0ciwgaW50IG4pOworICAgICAgIGludCBtdndpbmNoc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSAqY2hzdHIpOworICAgICAgIGludCBtdndpbmNobnN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgKmNoc3RyLCBpbnQgbik7CisqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNkZWZpbmUgQkFTRV9ZIDcKKyNkZWZpbmUgTUFYX0NPTFMgMTAyNAorCitzdGF0aWMgYm9vbAorUXVpdChpbnQgY2gpCit7CisgICAgcmV0dXJuIChjaCA9PSBFUlIgfHwgY2ggPT0gJ3EnIHx8IGNoID09IFFVSVQgfHwgY2ggPT0gRVNDQVBFKTsKK30KKworc3RhdGljIGludAordGVzdF9pbmNocyhpbnQgbGV2ZWwsIGNoYXIgKiphcmd2LCBXSU5ET1cgKmNocndpbiwgV0lORE9XICpzdHJ3aW4pCit7CisgICAgV0lORE9XICp0eHRib3ggPSAwOworICAgIFdJTkRPVyAqdHh0d2luID0gMDsKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgY2gsIGo7CisgICAgaW50IHR4dF94ID0gMCwgdHh0X3kgPSAwOworICAgIGludCBiYXNlX3k7CisgICAgaW50IGxpbWl0OworICAgIGNodHlwZSB0ZXh0W01BWF9DT0xTXTsKKworICAgIGlmIChhcmd2W2xldmVsXSA9PSAwKSB7CisJYmVlcCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJdHh0Ym94ID0gbmV3d2luKExJTkVTIC0gQkFTRV9ZLCBDT0xTIC0gbGV2ZWwsIEJBU0VfWSwgbGV2ZWwpOworCWJveCh0eHRib3gsIDAsIDApOworCXdub3V0cmVmcmVzaCh0eHRib3gpOworCisJdHh0d2luID0gZGVyd2luKHR4dGJveCwKKwkJCWdldG1heHkodHh0Ym94KSAtIDIsCisJCQlnZXRtYXh4KHR4dGJveCkgLSAyLAorCQkJMSwgMSk7CisJYmFzZV95ID0gMDsKKyAgICB9IGVsc2UgeworCXR4dHdpbiA9IHN0ZHNjcjsKKwliYXNlX3kgPSBCQVNFX1k7CisgICAgfQorCisgICAga2V5cGFkKHR4dHdpbiwgVFJVRSk7CS8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHR4dF95ID0gYmFzZV95OworICAgIHR4dF94ID0gMDsKKyAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisKKyAgICBpZiAoKGZwID0gZm9wZW4oYXJndltsZXZlbF0sICJyIikpICE9IDApIHsKKwl3aGlsZSAoKGogPSBmZ2V0YyhmcCkpICE9IEVPRikgeworCSAgICBpZiAod2FkZGNoKHR4dHdpbiwgVUNoYXIoaikpICE9IE9LKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHR4dHdpbiwgIkNhbm5vdCBvcGVuOlxuJXMiLCBhcmd2WzFdKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIVF1aXQoaiA9IG12d2dldGNoKHR4dHdpbiwgdHh0X3ksIHR4dF94KSkpIHsKKwlzd2l0Y2ggKGopIHsKKwljYXNlIEtFWV9ET1dOOgorCWNhc2UgJ2onOgorCSAgICBpZiAodHh0X3kgPCBnZXRtYXh5KHR4dHdpbikgLSAxKQorCQl0eHRfeSsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJY2FzZSAnayc6CisJICAgIGlmICh0eHRfeSA+IGJhc2VfeSkKKwkJdHh0X3ktLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJY2FzZSAnaCc6CisJICAgIGlmICh0eHRfeCA+IDApCisJCXR4dF94LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwljYXNlICdsJzoKKwkgICAgaWYgKHR4dF94IDwgZ2V0bWF4eCh0eHR3aW4pIC0gMSkKKwkJdHh0X3grKzsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3cnOgorCSAgICB0ZXN0X2luY2hzKGxldmVsICsgMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCSAgICBpZiAodHh0Ym94ICE9IDApIHsKKwkJdG91Y2h3aW4odHh0Ym94KTsKKwkJd25vdXRyZWZyZXNoKHR4dGJveCk7CisJICAgIH0gZWxzZSB7CisJCXRvdWNod2luKHR4dHdpbik7CisJCXdub3V0cmVmcmVzaCh0eHR3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCisJbXZ3cHJpbnR3KGNocndpbiwgMCwgMCwgImNoYXI6Iik7CisJd2NscnRvZW9sKGNocndpbik7CisKKwlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisKKwkgICAgaWYgKChjaCA9IHdpbmNoKHR4dHdpbikpICE9IEVSUikgeworCQlpZiAod2FkZGNoKGNocndpbiwgKGNodHlwZSkgY2gpICE9IEVSUikgeworCQkgICAgZm9yIChqID0gdHh0X3ggKyAxOyBqIDwgZ2V0bWF4eCh0eHR3aW4pOyArK2opIHsKKwkJCWlmICgoY2ggPSBtdndpbmNoKHR4dHdpbiwgdHh0X3ksIGopKSAhPSBFUlIpIHsKKwkJCSAgICBpZiAod2FkZGNoKGNocndpbiwgKGNodHlwZSkgY2gpID09IEVSUikgeworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCX0gZWxzZSB7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKworCSAgICBpZiAoKGNoID0gaW5jaCgpKSAhPSBFUlIpIHsKKwkJaWYgKHdhZGRjaChjaHJ3aW4sIChjaHR5cGUpIGNoKSAhPSBFUlIpIHsKKwkJICAgIGZvciAoaiA9IHR4dF94ICsgMTsgaiA8IGdldG1heHgodHh0d2luKTsgKytqKSB7CisJCQlpZiAoKGNoID0gbXZpbmNoKHR4dF95LCBqKSkgIT0gRVJSKSB7CisJCQkgICAgaWYgKHdhZGRjaChjaHJ3aW4sIChjaHR5cGUpIGNoKSA9PSBFUlIpIHsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9IGVsc2UgeworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJd25vdXRyZWZyZXNoKGNocndpbik7CisKKwltdndwcmludHcoc3Ryd2luLCAwLCAwLCAidGV4dDoiKTsKKwl3Y2xydG9ib3Qoc3Ryd2luKTsKKworCWxpbWl0ID0gZ2V0bWF4eChzdHJ3aW4pIC0gNTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKHdpbmNoc3RyKHR4dHdpbiwgdGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZGNoc3RyKHN0cndpbiwgMCwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJICAgIGlmICh3aW5jaG5zdHIodHh0d2luLCB0ZXh0LCBsaW1pdCkgIT0gRVJSKSB7CisJCW12d2FkZGNoc3RyKHN0cndpbiwgMSwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZ3aW5jaHN0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgdGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZGNoc3RyKHN0cndpbiwgMiwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZ3aW5jaG5zdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAzLCA1LCB0ZXh0KTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKGluY2hzdHIodGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZGNoc3RyKHN0cndpbiwgMCwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJICAgIGlmIChpbmNobnN0cih0ZXh0LCBsaW1pdCkgIT0gRVJSKSB7CisJCW12d2FkZGNoc3RyKHN0cndpbiwgMSwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZpbmNoc3RyKHR4dF95LCB0eHRfeCwgdGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZGNoc3RyKHN0cndpbiwgMiwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZpbmNobnN0cih0eHRfeSwgdHh0X3gsIHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAzLCA1LCB0ZXh0KTsKKwkgICAgfQorCX0KKworCXdub3V0cmVmcmVzaChzdHJ3aW4pOworICAgIH0KKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJZGVsd2luKHR4dHdpbik7CisJZGVsd2luKHR4dGJveCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXSU5ET1cgKmNocmJveDsKKyAgICBXSU5ET1cgKmNocndpbjsKKyAgICBXSU5ET1cgKnN0cndpbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmIChhcmdjIDwgMikgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGZpbGVcbiIsIGFyZ3ZbMF0pOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaW5pdHNjcigpOworCisgICAgY2hyYm94ID0gZGVyd2luKHN0ZHNjciwgQkFTRV9ZLCBDT0xTLCAwLCAwKTsKKyAgICBib3goY2hyYm94LCAwLCAwKTsKKyAgICB3bm91dHJlZnJlc2goY2hyYm94KTsKKworICAgIGNocndpbiA9IGRlcndpbihjaHJib3gsIDEsIENPTFMgLSAyLCAxLCAxKTsKKyAgICBzdHJ3aW4gPSBkZXJ3aW4oY2hyYm94LCA0LCBDT0xTIC0gMiwgMiwgMSk7CisKKyAgICB0ZXN0X2luY2hzKDEsIGFyZ3YsIGNocndpbiwgc3Ryd2luKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L2luc193aWRlLmMgYi90ZXN0L2luc193aWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkYWZlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvaW5zX3dpZGUuYwpAQCAtMCwwICsxLDUyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGluc193aWRlLmMsdiAxLjkgMjAwNy8wNy8yMSAxNzo0MTo1NSB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgd2luc193c3RyKCkgYW5kIHdpbnNfd2NoIGZ1bmN0aW9ucy4KKyAqIFRob21hcyBEaWNrZXkgLSAyMDAyLzExLzIzCisgKgorICogTm90ZTogdG8gcHJvdmlkZSBpbnB1dHMgZm9yICppbnNfd2NoKCksIHdlIHVzZSBzZXRjY2hhcigpLiAgQSBxdWlyayBvZiB0aGUKKyAqIFgvT3BlbiBkZWZpbml0aW9uIGZvciB0aGF0IGZ1bmN0aW9uIGlzIHRoYXQgdGhlIHN0cmluZyBjb250YWlucyBubworICogY2hhcmFjdGVycyB3aXRoIG5lZ2F0aXZlIHdpZHRoLiAgQW55IGNvbnRyb2wgY2hhcmFjdGVyIChzdWNoIGFzIHRhYikgZmFsbHMKKyAqIGludG8gdGhhdCBjYXRlZ29yeS4gIFNvIGl0IGZvbGxvd3MgdGhhdCAqaW5zX3djaCgpIGNhbm5vdCByZW5kZXIgYSB0YWIKKyAqIGNoYXJhY3RlciBiZWNhdXNlIHRoZXJlIGlzIG5vIGxlZ2FsIHdheSB0byBjb25zdHJ1Y3QgYSBjY2hhcl90IGNvbnRhaW5pbmcKKyAqIG9uZS4gIFgvT3BlbiBkb2VzIG5vdCBkb2N1bWVudCB0aGlzLCBhbmQgaXQgd291bGQgYmUgbG9naWNhbCB0byBhc3N1bWUgdGhhdAorICogKmluc193c3RyKCkgaGFzIHRoZSBzYW1lIGxpbWl0YXRpb24sIGJ1dCBpdCB1c2VzIGEgd2NoYXJfdCBzdHJpbmcgZGlyZWN0bHksCisgKiBhbmQgZG9lcyBub3QgZG9jdW1lbnQgaG93IHRhYnMgYXJlIGhhbmRsZWQuCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKworLyogZGVmaW5pdGlvbnMgdG8gbWFrZSBpdCBzaW1wbGVyIHRvIGNvbXBhcmUgd2l0aCBpbnNlcnRzLmMgKi8KKyNkZWZpbmUgSW5zTlN0ciAgICBpbnNfbndzdHIKKyNkZWZpbmUgSW5zU3RyICAgICBpbnNfd3N0cgorI2RlZmluZSBNdkluc05TdHIgIG12aW5zX253c3RyCisjZGVmaW5lIE12SW5zU3RyICAgbXZpbnNfd3N0cgorI2RlZmluZSBNdldJbnNOU3RyIG12d2luc19ud3N0cgorI2RlZmluZSBNdldJbnNTdHIgIG12d2luc193c3RyCisjZGVmaW5lIFdJbnNOU3RyICAgd2luc19ud3N0cgorI2RlZmluZSBXSW5zU3RyICAgIHdpbnNfd3N0cgorCisjZGVmaW5lIE1ZX1RBQlNJWkUgOAorCit0eXBlZGVmIGVudW0geworICAgIG9EZWZhdWx0ID0gMCwKKyAgICBvTW92ZSA9IDEsCisgICAgb1dpbmRvdyA9IDIsCisgICAgb01vdmVXaW5kb3cgPSAzCit9IE9wdGlvbnM7CisKK3N0YXRpYyBib29sIG1fb3B0ID0gRkFMU0U7CitzdGF0aWMgYm9vbCB3X29wdCA9IEZBTFNFOworc3RhdGljIGludCBuX29wdCA9IC0xOworCitzdGF0aWMgdm9pZAorbGVnZW5kKFdJTkRPVyAqd2luLCBpbnQgbGV2ZWwsIE9wdGlvbnMgc3RhdGUsIHdjaGFyX3QgKmJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKnNob3dzdGF0ZTsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2Ugb0RlZmF1bHQ6CisJc2hvd3N0YXRlID0gIiI7CisJYnJlYWs7CisgICAgY2FzZSBvTW92ZToKKwlzaG93c3RhdGUgPSAiIChtdlhYWCkiOworCWJyZWFrOworICAgIGNhc2Ugb1dpbmRvdzoKKwlzaG93c3RhdGUgPSAiICh3aW5YWFgpIjsKKwlicmVhazsKKyAgICBjYXNlIG9Nb3ZlV2luZG93OgorCXNob3dzdGF0ZSA9ICIgKG12d2luWFhYKSI7CisJYnJlYWs7CisgICAgfQorCisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3cHJpbnR3KHdpbiwKKwkgICAgIlRoZSBTdHJpbmdzL0NoYXJzIGRpc3BsYXlzIHNob3VsZCBtYXRjaC4gIEVudGVyIGFueSBjaGFyYWN0ZXJzLCBleGNlcHQ6XG4iKTsKKyAgICB3cHJpbnR3KHdpbiwKKwkgICAgImRvd24tYXJyb3cgb3IgXk4gdG8gcmVwZWF0IG9uIG5leHQgbGluZSwgJ3cnIGZvciBpbm5lciB3aW5kb3csICdxJyB0byBleGl0LlxuIik7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgd3ByaW50dyh3aW4sICJMZXZlbCAlZCwlcyBpbnNlcnRlZCAlZCBjaGFyYWN0ZXJzIDwiLCBsZXZlbCwKKwkgICAgc2hvd3N0YXRlLCBsZW5ndGgpOworICAgIHdhZGR3c3RyKHdpbiwgYnVmZmVyKTsKKyAgICB3YWRkc3RyKHdpbiwgIj4iKTsKK30KKworc3RhdGljIGludAorQ29sT2Yod2NoYXJfdCAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgbWFyZ2luKQoreworICAgIGludCBuOworICAgIGludCByZXN1bHQ7CisKKyAgICBmb3IgKG4gPSAwLCByZXN1bHQgPSBtYXJnaW4gKyAxOyBuIDwgbGVuZ3RoOyArK24pIHsKKwlpbnQgY2ggPSBidWZmZXJbbl07CisJc3dpdGNoIChjaCkgeworCWNhc2UgJ1xuJzoKKwkgICAgLyogYWN0dWFsbHkgbmV3bGluZSBzaG91bGQgY2xlYXIgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZQorCSAgICAgKiBhbmQgbW92ZSB0byB0aGUgbmV4dCBsaW5lIC0gYnV0IHRoYXQgc2VlbXMgYSBsaXR0bGUgYXdrd2FyZAorCSAgICAgKiBpbiB0aGlzIGV4YW1wbGUuCisJICAgICAqLworCWNhc2UgJ1xyJzoKKwkgICAgcmVzdWx0ID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSAnXGInOgorCSAgICBpZiAocmVzdWx0ID4gMCkKKwkJLS1yZXN1bHQ7CisJICAgIGJyZWFrOworCWNhc2UgJ1x0JzoKKwkgICAgcmVzdWx0ICs9IChNWV9UQUJTSVpFIC0gKHJlc3VsdCAlIE1ZX1RBQlNJWkUpKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnXDE3Nyc6CisJICAgIHJlc3VsdCArPSAyOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICByZXN1bHQgKz0gd2N3aWR0aChjaCk7CisJICAgIGlmIChjaCA8IDMyKQorCQkrK3Jlc3VsdDsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitDb252ZXJ0Q2goY2h0eXBlIHNvdXJjZSwgY2NoYXJfdCAqdGFyZ2V0KQoreworICAgIHdjaGFyX3QgdG1wX3djaGFyWzJdOworCisgICAgdG1wX3djaGFyWzBdID0gc291cmNlOworICAgIHRtcF93Y2hhclsxXSA9IDA7CisgICAgaWYgKHNldGNjaGFyKHRhcmdldCwgdG1wX3djaGFyLCBBX05PUk1BTCwgMCwgKHZvaWQgKikgMCkgPT0gRVJSKSB7CisJYmVlcCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBpbnQKK012V0luc0NoKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSBjaCkKK3sKKyAgICBpbnQgY29kZTsKKyAgICBjY2hhcl90IHRtcF9jY2hhcjsKKworICAgIGlmIChDb252ZXJ0Q2goY2gsICZ0bXBfY2NoYXIpKSB7CisJY29kZSA9IG12d2luc193Y2god2luLCB5LCB4LCAmdG1wX2NjaGFyKTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSBtdndpbnNjaCh3aW4sIHksIHgsIGNoKTsKKyAgICB9CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK3N0YXRpYyBpbnQKK012SW5zQ2goaW50IHksIGludCB4LCBjaHR5cGUgY2gpCit7CisgICAgaW50IGNvZGU7CisgICAgY2NoYXJfdCB0bXBfY2NoYXI7CisKKyAgICBpZiAoQ29udmVydENoKGNoLCAmdG1wX2NjaGFyKSkgeworCWNvZGUgPSBtdmluc193Y2goeSwgeCwgJnRtcF9jY2hhcik7CisgICAgfSBlbHNlIHsKKwljb2RlID0gbXZpbnNjaCh5LCB4LCBjaCk7CisgICAgfQorICAgIHJldHVybiBjb2RlOworfQorCitzdGF0aWMgaW50CitXSW5zQ2goV0lORE9XICp3aW4sIGNodHlwZSBjaCkKK3sKKyAgICBpbnQgY29kZTsKKyAgICBjY2hhcl90IHRtcF9jY2hhcjsKKworICAgIGlmIChDb252ZXJ0Q2goY2gsICZ0bXBfY2NoYXIpKSB7CisJY29kZSA9IHdpbnNfd2NoKHdpbiwgJnRtcF9jY2hhcik7CisgICAgfSBlbHNlIHsKKwljb2RlID0gd2luc2NoKHdpbiwgY2gpOworICAgIH0KKyAgICByZXR1cm4gY29kZTsKK30KKworc3RhdGljIGludAorSW5zQ2goY2h0eXBlIGNoKQoreworICAgIGludCBjb2RlOworICAgIGNjaGFyX3QgdG1wX2NjaGFyOworCisgICAgaWYgKENvbnZlcnRDaChjaCwgJnRtcF9jY2hhcikpIHsKKwljb2RlID0gaW5zX3djaCgmdG1wX2NjaGFyKTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSBpbnNjaChjaCk7CisgICAgfQorICAgIHJldHVybiBjb2RlOworfQorCisjZGVmaW5lIExFTihuKSAoKGxlbmd0aCAtIChuKSA+IG5fb3B0KSA/IG5fb3B0IDogKGxlbmd0aCAtIChuKSkpCitzdGF0aWMgdm9pZAordGVzdF9pbnNlcnRzKGludCBsZXZlbCkKK3sKKyAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IFRSVUU7CisKKyAgICB3aW50X3QgY2g7CisgICAgaW50IGNvZGU7CisgICAgaW50IGxpbWl0OworICAgIGludCByb3cgPSAxOworICAgIGludCBjb2w7CisgICAgaW50IHJvdzIsIGNvbDI7CisgICAgaW50IGxlbmd0aDsKKyAgICB3Y2hhcl90IGJ1ZmZlcltCVUZTSVpdOworICAgIFdJTkRPVyAqbG9vayA9IDA7CisgICAgV0lORE9XICp3b3JrID0gMDsKKyAgICBXSU5ET1cgKnNob3cgPSAwOworICAgIGludCBtYXJnaW4gPSAoMiAqIE1ZX1RBQlNJWkUpIC0gMTsKKyAgICBPcHRpb25zIG9wdGlvbiA9ICgobV9vcHQgPyBvTW92ZSA6IG9EZWZhdWx0KQorCQkgICAgICB8ICgod19vcHQgfHwgKGxldmVsID4gMCkpID8gb1dpbmRvdyA6IG9EZWZhdWx0KSk7CisKKyAgICBpZiAoZmlyc3QpIHsKKwlzdGF0aWMgY2hhciBjbWRbODBdOworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKworCXB1dGVudihzdHJjcHkoY21kLCAiVEFCU0laRT04IikpOworCisJaW5pdHNjcigpOworCSh2b2lkKSBjYnJlYWsoKTsJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworCSh2b2lkKSBub2VjaG8oKTsJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCWtleXBhZChzdGRzY3IsIFRSVUUpOworICAgIH0KKworICAgIGxpbWl0ID0gTElORVMgLSA1OworICAgIGlmIChsZXZlbCA+IDApIHsKKwlsb29rID0gbmV3d2luKGxpbWl0LCBDT0xTIC0gKDIgKiAobGV2ZWwgLSAxKSksIDAsIGxldmVsIC0gMSk7CisJd29yayA9IG5ld3dpbihsaW1pdCAtIDIsIENPTFMgLSAoMiAqIGxldmVsKSwgMSwgbGV2ZWwpOworCXNob3cgPSBuZXd3aW4oNCwgQ09MUywgbGltaXQgKyAxLCAwKTsKKwlib3gobG9vaywgMCwgMCk7CisJd25vdXRyZWZyZXNoKGxvb2spOworCWxpbWl0IC09IDI7CisgICAgfSBlbHNlIHsKKwl3b3JrID0gc3Rkc2NyOworCXNob3cgPSBkZXJ3aW4oc3Rkc2NyLCA0LCBDT0xTLCBsaW1pdCArIDEsIDApOworICAgIH0KKyAgICBrZXlwYWQod29yaywgVFJVRSk7CisKKyAgICBmb3IgKGNvbCA9IG1hcmdpbiArIDE7IGNvbCA8IENPTFM7IGNvbCArPSBNWV9UQUJTSVpFKQorCW12d3ZsaW5lKHdvcmssIHJvdywgY29sLCAnLicsIGxpbWl0IC0gMik7CisKKyAgICBtdnd2bGluZSh3b3JrLCByb3csIG1hcmdpbiwgQUNTX1ZMSU5FLCBsaW1pdCAtIDIpOworICAgIG12d3ZsaW5lKHdvcmssIHJvdywgbWFyZ2luICsgMSwgQUNTX1ZMSU5FLCBsaW1pdCAtIDIpOworICAgIGxpbWl0IC89IDI7CisKKyAgICBtdndhZGRzdHIod29yaywgMSwgMiwgIlN0cmluZyIpOworICAgIG12d2FkZHN0cih3b3JrLCBsaW1pdCArIDEsIDIsICJDaGFycyIpOworICAgIHdub3V0cmVmcmVzaCh3b3JrKTsKKworICAgIGJ1ZmZlcltsZW5ndGggPSAwXSA9ICdcMCc7CisgICAgbGVnZW5kKHNob3csIGxldmVsLCBvcHRpb24sIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB3bm91dHJlZnJlc2goc2hvdyk7CisKKyAgICBkb3VwZGF0ZSgpOworCisgICAgLyoKKyAgICAgKiBTaG93IHRoZSBjaGFyYWN0ZXJzIGluc2VydGVkIGluIGNvbG9yLCB0byBkaXN0aW5ndWlzaCBmcm9tIHRob3NlIHRoYXQKKyAgICAgKiBhcmUgc2hpZnRlZC4KKyAgICAgKi8KKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKwlpbml0X3BhaXIoMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCXdia2dkc2V0KHdvcmssIENPTE9SX1BBSVIoMSkgfCAnICcpOworICAgIH0KKworICAgIHdoaWxlICgoY29kZSA9IHdnZXRfd2NoKHdvcmssICZjaCkpICE9IEVSUikgeworCisJaWYgKGNvZGUgPT0gS0VZX0NPREVfWUVTKSB7CisJICAgIHN3aXRjaCAoY2gpIHsKKwkgICAgY2FzZSBLRVlfRE9XTjoKKwkJY2ggPSBDVFJMKCdOJyk7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9CQUNLU1BBQ0U6CisJCWNoID0gJ1xiJzsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJlZXAoKTsKKwkJY29udGludWU7CisJICAgIH0KKwl9IGVsc2UgaWYgKGNvZGUgPT0gRVJSKSB7CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChjaCA9PSAncScpCisJICAgIGJyZWFrOworCisJd21vdmUod29yaywgcm93LCBtYXJnaW4gKyAxKTsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAndyc6CisJICAgIHRlc3RfaW5zZXJ0cyhsZXZlbCArIDEpOworCisJICAgIHRvdWNod2luKGxvb2spOworCSAgICB0b3VjaHdpbih3b3JrKTsKKwkgICAgdG91Y2h3aW4oc2hvdyk7CisKKwkgICAgd25vdXRyZWZyZXNoKGxvb2spOworCSAgICB3bm91dHJlZnJlc2god29yayk7CisJICAgIHdub3V0cmVmcmVzaChzaG93KTsKKworCSAgICBkb3VwZGF0ZSgpOworCSAgICBicmVhazsKKwljYXNlIENUUkwoJ04nKToKKwkgICAgaWYgKHJvdyA8IGxpbWl0KSB7CisJCSsrcm93OworCQkvKiBwdXQgdGhlIHdob2xlIHN0cmluZyBpbiwgYWxsIGF0IG9uY2UgKi8KKwkJY29sMiA9IG1hcmdpbiArIDE7CisJCXN3aXRjaCAob3B0aW9uKSB7CisJCWNhc2Ugb0RlZmF1bHQ6CisJCSAgICBpZiAobl9vcHQgPiAxKSB7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgY29sICs9IG5fb3B0KSB7CisJCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkJICAgIGlmIChtb3ZlKHJvdywgY29sMikgIT0gRVJSKSB7CisJCQkJSW5zTlN0cihidWZmZXIgKyBjb2wsIExFTihjb2wpKTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJaWYgKG1vdmUocm93LCBjb2wyKSAhPSBFUlIpIHsKKwkJCSAgICBJbnNTdHIoYnVmZmVyKTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlIG9Nb3ZlOgorCQkgICAgaWYgKG5fb3B0ID4gMSkgeworCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBsZW5ndGg7IGNvbCArPSBuX29wdCkgeworCQkJICAgIGNvbDIgPSBDb2xPZihidWZmZXIsIGNvbCwgbWFyZ2luKTsKKwkJCSAgICBNdkluc05TdHIocm93LCBjb2wyLCBidWZmZXIgKyBjb2wsIExFTihjb2wpKTsKKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlNdkluc1N0cihyb3csIGNvbDIsIGJ1ZmZlcik7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJY2FzZSBvV2luZG93OgorCQkgICAgaWYgKG5fb3B0ID4gMSkgeworCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBsZW5ndGg7IGNvbCArPSBuX29wdCkgeworCQkJICAgIGNvbDIgPSBDb2xPZihidWZmZXIsIGNvbCwgbWFyZ2luKTsKKwkJCSAgICBpZiAod21vdmUod29yaywgcm93LCBjb2wyKSAhPSBFUlIpIHsKKwkJCQlXSW5zTlN0cih3b3JrLCBidWZmZXIgKyBjb2wsIExFTihjb2wpKTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJaWYgKHdtb3ZlKHdvcmssIHJvdywgY29sMikgIT0gRVJSKSB7CisJCQkgICAgV0luc1N0cih3b3JrLCBidWZmZXIpOworCQkJfQorCQkgICAgfQorCQkgICAgYnJlYWs7CisJCWNhc2Ugb01vdmVXaW5kb3c6CisJCSAgICBpZiAobl9vcHQgPiAxKSB7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgY29sICs9IG5fb3B0KSB7CisJCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkJICAgIE12V0luc05TdHIod29yaywgcm93LCBjb2wyLCBidWZmZXIgKyBjb2wsIExFTihjb2wpKTsKKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlNdldJbnNTdHIod29yaywgcm93LCBjb2wyLCBidWZmZXIpOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKworCQkvKiBkbyB0aGUgY29ycmVzcG9uZGluZyBzaW5nbGUtY2hhcmFjdGVyIGluc2VydGlvbiAqLworCQlyb3cyID0gbGltaXQgKyByb3c7CisJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyArK2NvbCkgeworCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkgICAgc3dpdGNoIChvcHRpb24pIHsKKwkJICAgIGNhc2Ugb0RlZmF1bHQ6CisJCQlpZiAobW92ZShyb3cyLCBjb2wyKSAhPSBFUlIpIHsKKwkJCSAgICBJbnNDaCgoY2h0eXBlKSBidWZmZXJbY29sXSk7CisJCQl9CisJCQlicmVhazsKKwkJICAgIGNhc2Ugb01vdmU6CisJCQlNdkluc0NoKHJvdzIsIGNvbDIsIChjaHR5cGUpIGJ1ZmZlcltjb2xdKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBvV2luZG93OgorCQkJaWYgKHdtb3ZlKHdvcmssIHJvdzIsIGNvbDIpICE9IEVSUikgeworCQkJICAgIFdJbnNDaCh3b3JrLCAoY2h0eXBlKSBidWZmZXJbY29sXSk7CisJCQl9CisJCQlicmVhazsKKwkJICAgIGNhc2Ugb01vdmVXaW5kb3c6CisJCQlNdldJbnNDaCh3b3JrLCByb3cyLCBjb2wyLCAoY2h0eXBlKSBidWZmZXJbY29sXSk7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfQkFDS1NQQUNFOgorCSAgICBjaCA9ICdcYic7CisJICAgIC8qIEZBTExUSFJVICovCisJZGVmYXVsdDoKKwkgICAgYnVmZmVyW2xlbmd0aCsrXSA9IGNoOworCSAgICBidWZmZXJbbGVuZ3RoXSA9ICdcMCc7CisKKwkgICAgLyogcHV0IHRoZSBzdHJpbmcgaW4sIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lICovCisJICAgIGNvbCA9IENvbE9mKGJ1ZmZlciwgbGVuZ3RoIC0gMSwgbWFyZ2luKTsKKwkgICAgc3dpdGNoIChvcHRpb24pIHsKKwkgICAgY2FzZSBvRGVmYXVsdDoKKwkJaWYgKG1vdmUocm93LCBjb2wpICE9IEVSUikgeworCQkgICAgSW5zU3RyKGJ1ZmZlciArIGxlbmd0aCAtIDEpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIG9Nb3ZlOgorCQlNdkluc1N0cihyb3csIGNvbCwgYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCWJyZWFrOworCSAgICBjYXNlIG9XaW5kb3c6CisJCWlmICh3bW92ZSh3b3JrLCByb3csIGNvbCkgIT0gRVJSKSB7CisJCSAgICBXSW5zU3RyKHdvcmssIGJ1ZmZlciArIGxlbmd0aCAtIDEpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIG9Nb3ZlV2luZG93OgorCQlNdldJbnNTdHIod29yaywgcm93LCBjb2wsIGJ1ZmZlciArIGxlbmd0aCAtIDEpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIC8qIGRvIHRoZSBjb3JyZXNwb25kaW5nIHNpbmdsZS1jaGFyYWN0ZXIgaW5zZXJ0aW9uICovCisJICAgIHN3aXRjaCAob3B0aW9uKSB7CisJICAgIGNhc2Ugb0RlZmF1bHQ6CisJCWlmIChtb3ZlKGxpbWl0ICsgcm93LCBjb2wpICE9IEVSUikgeworCQkgICAgSW5zQ2goY2gpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIG9Nb3ZlOgorCQlNdkluc0NoKGxpbWl0ICsgcm93LCBjb2wsIGNoKTsKKwkJYnJlYWs7CisJICAgIGNhc2Ugb1dpbmRvdzoKKwkJaWYgKHdtb3ZlKHdvcmssIGxpbWl0ICsgcm93LCBjb2wpICE9IEVSUikgeworCQkgICAgV0luc0NoKHdvcmssIGNoKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBvTW92ZVdpbmRvdzoKKwkJTXZXSW5zQ2god29yaywgbGltaXQgKyByb3csIGNvbCwgY2gpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIHdub3V0cmVmcmVzaCh3b3JrKTsKKworCSAgICBsZWdlbmQoc2hvdywgbGV2ZWwsIG9wdGlvbiwgYnVmZmVyLCBsZW5ndGgpOworCSAgICB3bm91dHJlZnJlc2goc2hvdyk7CisKKwkgICAgZG91cGRhdGUoKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAobGV2ZWwgPiAwKSB7CisJZGVsd2luKHNob3cpOworCWRlbHdpbih3b3JrKTsKKwlkZWx3aW4obG9vayk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IGluc2VydHMgW29wdGlvbnNdIgorCSwiIgorCSwiT3B0aW9uczoiCisJLCIgIC1uIE5VTSAgbGltaXQgc3RyaW5nLWluc2VydHMgdG8gTlVNIGJ5dGVzIG9uIF5OIHJlcGxheSIKKwksIiAgLW0gICAgICBwZXJmb3JtIHdtb3ZlL21vdmUgc2VwYXJhdGVseSBmcm9tIGluc2VydC1mdW5jdGlvbnMiCisJLCIgIC13ICAgICAgdXNlIHdpbmRvdy1wYXJhbWV0ZXIgZXZlbiB3aGVuIHN0ZHNjciB3b3VsZCBiZSBpbXBsaWVkIgorICAgIH07CisgICAgdW5zaWduZWQgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRibCk7ICsrbikKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbbl0pOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGludCBjaDsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgIm1uOnciKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnbSc6CisJICAgIG1fb3B0ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CisJICAgIG5fb3B0ID0gYXRvaShvcHRhcmcpOworCSAgICBpZiAobl9vcHQgPT0gMCkKKwkJbl9vcHQgPSAtMTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIHdfb3B0ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAob3B0aW5kIDwgYXJnYykKKwl1c2FnZSgpOworCisgICAgdGVzdF9pbnNlcnRzKDApOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIHdpZGUtbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0L2luc2VydHMuYyBiL3Rlc3QvaW5zZXJ0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODc4OGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2luc2VydHMuYwpAQCAtMCwwICsxLDQ0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGluc2VydHMuYyx2IDEuMTggMjAwNy8wNy8yMSAxNzo0MTo1NSB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgd2luc3N0cigpIGFuZCB3aW5zY2ggZnVuY3Rpb25zLgorICogVGhvbWFzIERpY2tleSAtIDIwMDIvMTAvMTkKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX1dJTlNTVFIKKworI2RlZmluZSBJbnNOU3RyICAgIGluc25zdHIKKyNkZWZpbmUgSW5zU3RyICAgICBpbnNzdHIKKyNkZWZpbmUgTXZJbnNOU3RyICBtdmluc25zdHIKKyNkZWZpbmUgTXZJbnNTdHIgICBtdmluc3N0cgorI2RlZmluZSBNdldJbnNOU3RyIG12d2luc25zdHIKKyNkZWZpbmUgTXZXSW5zU3RyICBtdndpbnNzdHIKKyNkZWZpbmUgV0luc05TdHIgICB3aW5zbnN0cgorI2RlZmluZSBXSW5zU3RyICAgIHdpbnNzdHIKKworI2RlZmluZSBJbnNDaCAgICAgIGluc2NoCisjZGVmaW5lIE12SW5zQ2ggICAgbXZpbnNjaAorI2RlZmluZSBNdldJbnNDaCAgIG12d2luc2NoCisjZGVmaW5lIFdJbnNDaCAgICAgd2luc2NoCisKKyNkZWZpbmUgTVlfVEFCU0laRSA4CisKK3R5cGVkZWYgZW51bSB7CisgICAgb0RlZmF1bHQgPSAwLAorICAgIG9Nb3ZlID0gMSwKKyAgICBvV2luZG93ID0gMiwKKyAgICBvTW92ZVdpbmRvdyA9IDMKK30gT3B0aW9uczsKKworc3RhdGljIGJvb2wgbV9vcHQgPSBGQUxTRTsKK3N0YXRpYyBib29sIHdfb3B0ID0gRkFMU0U7CitzdGF0aWMgaW50IG5fb3B0ID0gLTE7CisKK3N0YXRpYyB2b2lkCitsZWdlbmQoV0lORE9XICp3aW4sIGludCBsZXZlbCwgT3B0aW9ucyBzdGF0ZSwgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqc2hvd3N0YXRlOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBvRGVmYXVsdDoKKwlzaG93c3RhdGUgPSAiIjsKKwlicmVhazsKKyAgICBjYXNlIG9Nb3ZlOgorCXNob3dzdGF0ZSA9ICIgKG12WFhYKSI7CisJYnJlYWs7CisgICAgY2FzZSBvV2luZG93OgorCXNob3dzdGF0ZSA9ICIgKHdpblhYWCkiOworCWJyZWFrOworICAgIGNhc2Ugb01vdmVXaW5kb3c6CisJc2hvd3N0YXRlID0gIiAobXZ3aW5YWFgpIjsKKwlicmVhazsKKyAgICB9CisKKyAgICB3bW92ZSh3aW4sIDAsIDApOworICAgIHdwcmludHcod2luLAorCSAgICAiVGhlIFN0cmluZ3MvQ2hhcnMgZGlzcGxheXMgc2hvdWxkIG1hdGNoLiAgRW50ZXIgYW55IGNoYXJhY3RlcnMsIGV4Y2VwdDpcbiIpOworICAgIHdwcmludHcod2luLAorCSAgICAiZG93bi1hcnJvdyBvciBeTiB0byByZXBlYXQgb24gbmV4dCBsaW5lLCAndycgZm9yIGlubmVyIHdpbmRvdywgJ3EnIHRvIGV4aXQuXG4iKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICB3cHJpbnR3KHdpbiwgIkxldmVsICVkLCVzIGluc2VydGVkICVkIGNoYXJhY3RlcnMgPCVzPiIsIGxldmVsLAorCSAgICBzaG93c3RhdGUsIGxlbmd0aCwgYnVmZmVyKTsKK30KKworc3RhdGljIGludAorQ29sT2YoY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgbWFyZ2luKQoreworICAgIGludCBuOworICAgIGludCByZXN1bHQ7CisKKyAgICBmb3IgKG4gPSAwLCByZXN1bHQgPSBtYXJnaW4gKyAxOyBuIDwgbGVuZ3RoOyArK24pIHsKKwlpbnQgY2ggPSBVQ2hhcihidWZmZXJbbl0pOworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdcbic6CisJICAgIC8qIGFjdHVhbGx5IG5ld2xpbmUgc2hvdWxkIGNsZWFyIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUKKwkgICAgICogYW5kIG1vdmUgdG8gdGhlIG5leHQgbGluZSAtIGJ1dCB0aGF0IHNlZW1zIGEgbGl0dGxlIGF3a3dhcmQKKwkgICAgICogaW4gdGhpcyBleGFtcGxlLgorCSAgICAgKi8KKwljYXNlICdccic6CisJICAgIHJlc3VsdCA9IDA7CisJICAgIGJyZWFrOworCWNhc2UgJ1xiJzoKKwkgICAgaWYgKHJlc3VsdCA+IDApCisJCS0tcmVzdWx0OworCSAgICBicmVhazsKKwljYXNlICdcdCc6CisJICAgIHJlc3VsdCArPSAoTVlfVEFCU0laRSAtIChyZXN1bHQgJSBNWV9UQUJTSVpFKSk7CisJICAgIGJyZWFrOworCWNhc2UgJ1wxNzcnOgorCSAgICByZXN1bHQgKz0gMjsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgKytyZXN1bHQ7CisJICAgIGlmIChjaCA8IDMyKQorCQkrK3Jlc3VsdDsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIExFTihuKSAoKGxlbmd0aCAtIChuKSA+IG5fb3B0KSA/IG5fb3B0IDogKGxlbmd0aCAtIChuKSkpCitzdGF0aWMgdm9pZAordGVzdF9pbnNlcnRzKGludCBsZXZlbCkKK3sKKyAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IFRSVUU7CisKKyAgICBpbnQgY2g7CisgICAgaW50IGxpbWl0OworICAgIGludCByb3cgPSAxOworICAgIGludCBjb2w7CisgICAgaW50IHJvdzIsIGNvbDI7CisgICAgaW50IGxlbmd0aDsKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIFdJTkRPVyAqbG9vayA9IDA7CisgICAgV0lORE9XICp3b3JrID0gMDsKKyAgICBXSU5ET1cgKnNob3cgPSAwOworICAgIGludCBtYXJnaW4gPSAoMiAqIE1ZX1RBQlNJWkUpIC0gMTsKKyAgICBPcHRpb25zIG9wdGlvbiA9IChPcHRpb25zKSAoKHVuc2lnbmVkKSAobV9vcHQKKwkJCQkJICAgID8gb01vdmUKKwkJCQkJICAgIDogb0RlZmF1bHQpCisJCQkJfCAodW5zaWduZWQpICgod19vcHQgfHwgKGxldmVsID4gMCkpCisJCQkJCSAgICAgID8gb1dpbmRvdworCQkJCQkgICAgICA6IG9EZWZhdWx0KSk7CisKKyAgICBpZiAoZmlyc3QpIHsKKwlzdGF0aWMgY2hhciBjbWRbODBdOworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKworCXB1dGVudihzdHJjcHkoY21kLCAiVEFCU0laRT04IikpOworCisJaW5pdHNjcigpOworCSh2b2lkKSBjYnJlYWsoKTsJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworCSh2b2lkKSBub2VjaG8oKTsJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCWtleXBhZChzdGRzY3IsIFRSVUUpOworICAgIH0KKworICAgIGxpbWl0ID0gTElORVMgLSA1OworICAgIGlmIChsZXZlbCA+IDApIHsKKwlsb29rID0gbmV3d2luKGxpbWl0LCBDT0xTIC0gKDIgKiAobGV2ZWwgLSAxKSksIDAsIGxldmVsIC0gMSk7CisJd29yayA9IG5ld3dpbihsaW1pdCAtIDIsIENPTFMgLSAoMiAqIGxldmVsKSwgMSwgbGV2ZWwpOworCXNob3cgPSBuZXd3aW4oNCwgQ09MUywgbGltaXQgKyAxLCAwKTsKKwlib3gobG9vaywgMCwgMCk7CisJd25vdXRyZWZyZXNoKGxvb2spOworCWxpbWl0IC09IDI7CisgICAgfSBlbHNlIHsKKwl3b3JrID0gc3Rkc2NyOworCXNob3cgPSBkZXJ3aW4oc3Rkc2NyLCA0LCBDT0xTLCBsaW1pdCArIDEsIDApOworICAgIH0KKyAgICBrZXlwYWQod29yaywgVFJVRSk7CisKKyAgICBmb3IgKGNvbCA9IG1hcmdpbiArIDE7IGNvbCA8IENPTFM7IGNvbCArPSBNWV9UQUJTSVpFKQorCW12d3ZsaW5lKHdvcmssIHJvdywgY29sLCAnLicsIGxpbWl0IC0gMik7CisKKyAgICBtdnd2bGluZSh3b3JrLCByb3csIG1hcmdpbiwgQUNTX1ZMSU5FLCBsaW1pdCAtIDIpOworICAgIG12d3ZsaW5lKHdvcmssIHJvdywgbWFyZ2luICsgMSwgQUNTX1ZMSU5FLCBsaW1pdCAtIDIpOworICAgIGxpbWl0IC89IDI7CisKKyAgICBtdndhZGRzdHIod29yaywgMSwgMiwgIlN0cmluZyIpOworICAgIG12d2FkZHN0cih3b3JrLCBsaW1pdCArIDEsIDIsICJDaGFycyIpOworICAgIHdub3V0cmVmcmVzaCh3b3JrKTsKKworICAgIGJ1ZmZlcltsZW5ndGggPSAwXSA9ICdcMCc7CisgICAgbGVnZW5kKHNob3csIGxldmVsLCBvcHRpb24sIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB3bm91dHJlZnJlc2goc2hvdyk7CisKKyAgICBkb3VwZGF0ZSgpOworCisgICAgLyoKKyAgICAgKiBTaG93IHRoZSBjaGFyYWN0ZXJzIGluc2VydGVkIGluIGNvbG9yLCB0byBkaXN0aW5ndWlzaCBmcm9tIHRob3NlIHRoYXQKKyAgICAgKiBhcmUgc2hpZnRlZC4KKyAgICAgKi8KKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKwlpbml0X3BhaXIoMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCXdia2dkc2V0KHdvcmssIENPTE9SX1BBSVIoMSkgfCAnICcpOworICAgIH0KKworICAgIHdoaWxlICgoY2ggPSB3Z2V0Y2god29yaykpICE9ICdxJykgeworCWlmIChjaCA9PSBFUlIpIHsKKwkgICAgYmVlcCgpOworCSAgICBicmVhazsKKwl9CisJd21vdmUod29yaywgcm93LCBtYXJnaW4gKyAxKTsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAndyc6CisJICAgIHRlc3RfaW5zZXJ0cyhsZXZlbCArIDEpOworCisJICAgIHRvdWNod2luKGxvb2spOworCSAgICB0b3VjaHdpbih3b3JrKTsKKwkgICAgdG91Y2h3aW4oc2hvdyk7CisKKwkgICAgd25vdXRyZWZyZXNoKGxvb2spOworCSAgICB3bm91dHJlZnJlc2god29yayk7CisJICAgIHdub3V0cmVmcmVzaChzaG93KTsKKworCSAgICBkb3VwZGF0ZSgpOworCSAgICBicmVhazsKKwljYXNlIENUUkwoJ04nKToKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpZiAocm93IDwgbGltaXQpIHsKKwkJKytyb3c7CisJCS8qIHB1dCB0aGUgd2hvbGUgc3RyaW5nIGluLCBhbGwgYXQgb25jZSAqLworCQljb2wyID0gbWFyZ2luICsgMTsKKwkJc3dpdGNoIChvcHRpb24pIHsKKwkJY2FzZSBvRGVmYXVsdDoKKwkJICAgIGlmIChuX29wdCA+IDEpIHsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyBjb2wgKz0gbl9vcHQpIHsKKwkJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCQkgICAgaWYgKG1vdmUocm93LCBjb2wyKSAhPSBFUlIpIHsKKwkJCQlJbnNOU3RyKGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlpZiAobW92ZShyb3csIGNvbDIpICE9IEVSUikgeworCQkJICAgIEluc1N0cihidWZmZXIpOworCQkJfQorCQkgICAgfQorCQkgICAgYnJlYWs7CisJCWNhc2Ugb01vdmU6CisJCSAgICBpZiAobl9vcHQgPiAxKSB7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgY29sICs9IG5fb3B0KSB7CisJCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkJICAgIE12SW5zTlN0cihyb3csIGNvbDIsIGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCU12SW5zU3RyKHJvdywgY29sMiwgYnVmZmVyKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlIG9XaW5kb3c6CisJCSAgICBpZiAobl9vcHQgPiAxKSB7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgY29sICs9IG5fb3B0KSB7CisJCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkJICAgIGlmICh3bW92ZSh3b3JrLCByb3csIGNvbDIpICE9IEVSUikgeworCQkJCVdJbnNOU3RyKHdvcmssIGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlpZiAod21vdmUod29yaywgcm93LCBjb2wyKSAhPSBFUlIpIHsKKwkJCSAgICBXSW5zU3RyKHdvcmssIGJ1ZmZlcik7CisJCQl9CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJY2FzZSBvTW92ZVdpbmRvdzoKKwkJICAgIGlmIChuX29wdCA+IDEpIHsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyBjb2wgKz0gbl9vcHQpIHsKKwkJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCQkgICAgTXZXSW5zTlN0cih3b3JrLCByb3csIGNvbDIsIGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCU12V0luc1N0cih3b3JrLCByb3csIGNvbDIsIGJ1ZmZlcik7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCisJCS8qIGRvIHRoZSBjb3JyZXNwb25kaW5nIHNpbmdsZS1jaGFyYWN0ZXIgaW5zZXJ0aW9uICovCisJCXJvdzIgPSBsaW1pdCArIHJvdzsKKwkJZm9yIChjb2wgPSAwOyBjb2wgPCBsZW5ndGg7ICsrY29sKSB7CisJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCSAgICBzd2l0Y2ggKG9wdGlvbikgeworCQkgICAgY2FzZSBvRGVmYXVsdDoKKwkJCWlmIChtb3ZlKHJvdzIsIGNvbDIpICE9IEVSUikgeworCQkJICAgIEluc0NoKFVDaGFyKGJ1ZmZlcltjb2xdKSk7CisJCQl9CisJCQlicmVhazsKKwkJICAgIGNhc2Ugb01vdmU6CisJCQlNdkluc0NoKHJvdzIsIGNvbDIsIFVDaGFyKGJ1ZmZlcltjb2xdKSk7CisJCQlicmVhazsKKwkJICAgIGNhc2Ugb1dpbmRvdzoKKwkJCWlmICh3bW92ZSh3b3JrLCByb3cyLCBjb2wyKSAhPSBFUlIpIHsKKwkJCSAgICBXSW5zQ2god29yaywgVUNoYXIoYnVmZmVyW2NvbF0pKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSBvTW92ZVdpbmRvdzoKKwkJCU12V0luc0NoKHdvcmssIHJvdzIsIGNvbDIsIFVDaGFyKGJ1ZmZlcltjb2xdKSk7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfQkFDS1NQQUNFOgorCSAgICBjaCA9ICdcYic7CisJICAgIC8qIEZBTExUSFJVICovCisJZGVmYXVsdDoKKwkgICAgaWYgKGNoIDw9IDAgfHwgY2ggPiAyNTUpIHsKKwkJYmVlcCgpOworCQlicmVhazsKKwkgICAgfQorCSAgICBidWZmZXJbbGVuZ3RoKytdID0gY2g7CisJICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKworCSAgICAvKiBwdXQgdGhlIHN0cmluZyBpbiwgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgKi8KKwkgICAgY29sID0gQ29sT2YoYnVmZmVyLCBsZW5ndGggLSAxLCBtYXJnaW4pOworCSAgICBzd2l0Y2ggKG9wdGlvbikgeworCSAgICBjYXNlIG9EZWZhdWx0OgorCQlpZiAobW92ZShyb3csIGNvbCkgIT0gRVJSKSB7CisJCSAgICBJbnNTdHIoYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmU6CisJCU12SW5zU3RyKHJvdywgY29sLCBidWZmZXIgKyBsZW5ndGggLSAxKTsKKwkJYnJlYWs7CisJICAgIGNhc2Ugb1dpbmRvdzoKKwkJaWYgKHdtb3ZlKHdvcmssIHJvdywgY29sKSAhPSBFUlIpIHsKKwkJICAgIFdJbnNTdHIod29yaywgYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmVXaW5kb3c6CisJCU12V0luc1N0cih3b3JrLCByb3csIGNvbCwgYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgLyogZG8gdGhlIGNvcnJlc3BvbmRpbmcgc2luZ2xlLWNoYXJhY3RlciBpbnNlcnRpb24gKi8KKwkgICAgc3dpdGNoIChvcHRpb24pIHsKKwkgICAgY2FzZSBvRGVmYXVsdDoKKwkJaWYgKG1vdmUobGltaXQgKyByb3csIGNvbCkgIT0gRVJSKSB7CisJCSAgICBJbnNDaChVQ2hhcihjaCkpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIG9Nb3ZlOgorCQlNdkluc0NoKGxpbWl0ICsgcm93LCBjb2wsIFVDaGFyKGNoKSk7CisJCWJyZWFrOworCSAgICBjYXNlIG9XaW5kb3c6CisJCWlmICh3bW92ZSh3b3JrLCBsaW1pdCArIHJvdywgY29sKSAhPSBFUlIpIHsKKwkJICAgIFdJbnNDaCh3b3JrLCBVQ2hhcihjaCkpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIG9Nb3ZlV2luZG93OgorCQlNdldJbnNDaCh3b3JrLCBsaW1pdCArIHJvdywgY29sLCBVQ2hhcihjaCkpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIHdub3V0cmVmcmVzaCh3b3JrKTsKKworCSAgICBsZWdlbmQoc2hvdywgbGV2ZWwsIG9wdGlvbiwgYnVmZmVyLCBsZW5ndGgpOworCSAgICB3bm91dHJlZnJlc2goc2hvdyk7CisKKwkgICAgZG91cGRhdGUoKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAobGV2ZWwgPiAwKSB7CisJZGVsd2luKHNob3cpOworCWRlbHdpbih3b3JrKTsKKwlkZWx3aW4obG9vayk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IGluc2VydHMgW29wdGlvbnNdIgorCSwiIgorCSwiT3B0aW9uczoiCisJLCIgIC1uIE5VTSAgbGltaXQgc3RyaW5nLWluc2VydHMgdG8gTlVNIGJ5dGVzIG9uIF5OIHJlcGxheSIKKwksIiAgLW0gICAgICBwZXJmb3JtIHdtb3ZlL21vdmUgc2VwYXJhdGVseSBmcm9tIGluc2VydC1mdW5jdGlvbnMiCisJLCIgIC13ICAgICAgdXNlIHdpbmRvdy1wYXJhbWV0ZXIgZXZlbiB3aGVuIHN0ZHNjciB3b3VsZCBiZSBpbXBsaWVkIgorICAgIH07CisgICAgdW5zaWduZWQgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRibCk7ICsrbikKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbbl0pOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGludCBjaDsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgIm1uOnciKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnbSc6CisJICAgIG1fb3B0ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CisJICAgIG5fb3B0ID0gYXRvaShvcHRhcmcpOworCSAgICBpZiAobl9vcHQgPT0gMCkKKwkJbl9vcHQgPSAtMTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIHdfb3B0ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAob3B0aW5kIDwgYXJnYykKKwl1c2FnZSgpOworCisgICAgdGVzdF9pbnNlcnRzKDApOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIHdpbnNzdHIgZnVuY3Rpb25cbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYgLyogSEFWRV9XSU5TU1RSICovCmRpZmYgLS1naXQgYS90ZXN0L2tleV9uYW1lcy5jIGIvdGVzdC9rZXlfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQ1NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9rZXlfbmFtZXMuYwpAQCAtMCwwICsxLDkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDoga2V5X25hbWVzLmMsdiAxLjQgMjAwOC8xMC8xMSAyMDoyMjozNyB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBrZXlfbmFtZXMgWy1tXSBbLXNdXG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgbjsKKworICAgIGJvb2wgZG9fc2V0dXAgPSBGQUxTRTsKKyAgICBib29sIGRvX21ldGEgPSBGQUxTRTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHdoaWxlICgobiA9IGdldG9wdChhcmdjLCBhcmd2LCAibXMiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKG4pIHsKKwljYXNlICdtJzoKKwkgICAgZG9fbWV0YSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3MnOgorCSAgICBkb19zZXR1cCA9IFRSVUU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJICAgIC8qIE5PVFJFQUNIRUQgKi8KKwl9CisgICAgfQorCisgICAgaWYgKGRvX3NldHVwKSB7CisJLyoKKwkgKiBHZXQgdGhlIHRlcm1pbmZvIGVudHJ5IGludG8gbWVtb3J5LCBhbmQgdGVsbCBuY3Vyc2VzIHRoYXQgd2Ugd2FudCB0bworCSAqIHVzZSBmdW5jdGlvbiBrZXlzLiAgVGhhdCB3aWxsIG1ha2UgaXQgYWRkIGFueSB1c2VyLWRlZmluZWQga2V5cyB0aGF0CisJICogYXBwZWFyIGluIHRoZSB0ZXJtaW5mby4KKwkgKi8KKwluZXd0ZXJtKGdldGVudigiVEVSTSIpLCBzdGRlcnIsIHN0ZGluKTsKKwlrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKwlpZiAoZG9fbWV0YSkKKwkgICAgbWV0YShzdGRzY3IsIFRSVUUpOworCWVuZHdpbigpOworICAgIH0KKyAgICBmb3IgKG4gPSAtMTsgbiA8IEtFWV9NQVggKyA1MTI7IG4rKykgeworCWNvbnN0IGNoYXIgKnJlc3VsdCA9IGtleV9uYW1lKG4pOworCWlmIChyZXN1bHQgIT0gMCkKKwkgICAgcHJpbnRmKCIlZCglNW8pOiVzXG4iLCBuLCBuLCByZXN1bHQpOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSB3aWRlLW5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC9rZXluYW1lcy5jIGIvdGVzdC9rZXluYW1lcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Y2ZhODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2tleW5hbWVzLmMKQEAgLTAsMCArMSw4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGtleW5hbWVzLmMsdiAxLjkgMjAwOC8xMC8xMSAyMDoyMjozNyB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGtleW5hbWVzIFstbV0gWy1zXVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IG47CisgICAgYm9vbCBkb19zZXR1cCA9IEZBTFNFOworICAgIGJvb2wgZG9fbWV0YSA9IEZBTFNFOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChuID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJtcyIpKSAhPSAtMSkgeworCXN3aXRjaCAobikgeworCWNhc2UgJ20nOgorCSAgICBkb19tZXRhID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncyc6CisJICAgIGRvX3NldHVwID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwkgICAgLyogTk9UUkVBQ0hFRCAqLworCX0KKyAgICB9CisKKyAgICBpZiAoZG9fc2V0dXApIHsKKwkvKgorCSAqIEdldCB0aGUgdGVybWluZm8gZW50cnkgaW50byBtZW1vcnksIGFuZCB0ZWxsIG5jdXJzZXMgdGhhdCB3ZSB3YW50IHRvCisJICogdXNlIGZ1bmN0aW9uIGtleXMuICBUaGF0IHdpbGwgbWFrZSBpdCBhZGQgYW55IHVzZXItZGVmaW5lZCBrZXlzIHRoYXQKKwkgKiBhcHBlYXIgaW4gdGhlIHRlcm1pbmZvLgorCSAqLworCW5ld3Rlcm0oZ2V0ZW52KCJURVJNIiksIHN0ZGVyciwgc3RkaW4pOworCWtleXBhZChzdGRzY3IsIFRSVUUpOworCWlmIChkb19tZXRhKQorCSAgICBtZXRhKHN0ZHNjciwgVFJVRSk7CisJZW5kd2luKCk7CisgICAgfQorCisgICAgZm9yIChuID0gLTE7IG4gPCBLRVlfTUFYICsgNTEyOyBuKyspIHsKKwljb25zdCBjaGFyICpyZXN1bHQgPSBrZXluYW1lKG4pOworCWlmIChyZXN1bHQgIT0gMCkKKwkgICAgcHJpbnRmKCIlZCglNW8pOiVzXG4iLCBuLCBuLCByZXN1bHQpOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC9rbmlnaHQuYyBiL3Rlc3Qva25pZ2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliYTFkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qva25pZ2h0LmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogS25pZ2h0J3MgVG91ciAtIGEgYnJhaW4gZ2FtZQorICoKKyAqIFRoZSBvcmlnaW5hbCBvZiB0aGlzIGdhbWUgd2FzIGFub255bW91cy4gIEl0IGhhZCBhbiB1bmJlbGlldmFibHkgYm9ndXMKKyAqIGludGVyZmFjZSwgeW91IGFjdHVhbGx5IGhhZCB0byBlbnRlciBzcXVhcmUgY29vcmRpbmF0ZXMhICBSZWRlc2lnbiBieQorICogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IEp1bHkgMjIgMTk5NS4gIE1vdXNlIHN1cHBvcnQKKyAqIGFkZGVkIFNlcHRlbWJlciAyMHRoIDE5OTUuCisgKgorICogJElkOiBrbmlnaHQuYyx2IDEuMjggMjAwOC8wOC8wMyAyMzowNDoyNiB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKy8qIGJvYXJkIHNpemUgKi8KKyNkZWZpbmUgQkRFUFRICTgKKyNkZWZpbmUgQldJRFRICTgKKworLyogd2hlcmUgdG8gc3RhcnQgdGhlIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBJTlNUUlkJMgorI2RlZmluZSBJTlNUUlgJMzUKKworLyogY29ybmVyIG9mIGJvYXJkICovCisjZGVmaW5lIEJPQVJEWQkyCisjZGVmaW5lIEJPQVJEWAkwCisKKy8qIG5vdGlmaWNhdGlvbiBsaW5lICovCisjZGVmaW5lIE5PVElGWVkJMjEKKworLyogdmlydHVhbCBjb2xvciB2YWx1ZXMgKi8KKyNkZWZpbmUgVFJBSUxfQ09MT1IJMQorI2RlZmluZSBQTFVTX0NPTE9SCTIKKyNkZWZpbmUgTUlOVVNfQ09MT1IJMworCisjZGVmaW5lIENYKHgpCQkoMiArIDQgKiAoeCkpCisjZGVmaW5lIENZKHkpCQkoMSArIDIgKiAoeSkpCisjZGVmaW5lIGNlbGxtb3ZlKHksIHgpCXdtb3ZlKGJvYXJkd2luLCBDWSh5KSwgQ1goeCkpCisjZGVmaW5lIENYSU5WKHgpCSgoKHgpIC0gMSkgLyA0KQorI2RlZmluZSBDWUlOVih5KQkoKCh5KSAtIDIpIC8gMikKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHNob3J0IHgsIHk7Cit9IGNlbGw7CisKK3N0YXRpYyBXSU5ET1cgKmJvYXJkd2luOwkvKiB0aGUgYm9hcmQgd2luZG93ICovCitzdGF0aWMgV0lORE9XICpoZWxwd2luOwkJLyogdGhlIGhlbHAgd2luZG93ICovCitzdGF0aWMgV0lORE9XICptc2d3aW47CQkvKiB0aGUgbWVzc2FnZSB3aW5kb3cgKi8KK3N0YXRpYyBjZWxsIGhpc3RvcnlbQkRFUFRIICogQldJRFRIICsgMV07CS8qIGNob2ljZSBoaXN0b3J5ICovCitzdGF0aWMgY2h0eXBlIG1pbnVzID0gJy0nOwkvKiBwb3NzaWJsZS1tb3ZlIGNoYXJhY3RlciAqLworc3RhdGljIGNodHlwZSBvbGRjaDsKK3N0YXRpYyBjaHR5cGUgcGx1cyA9ICcrJzsJLyogY3Vyc29yIGhvdC1zcG90IGNoYXJhY3RlciAqLworc3RhdGljIGNodHlwZSB0cmFpbCA9ICcjJzsJLyogdHJhaWwgY2hhcmFjdGVyICovCitzdGF0aWMgaW50IG1vdmVjb3VudDsJCS8qIGNvdW50IG9mIG1vdmVzIHNvIGZhciAqLworc3RhdGljIGludCB0cmlhbGNvdW50OwkJLyogY291bnQgb2YgdHJpYWxzIHNvIGZhciAqLworc3RhdGljIHNob3J0IGJvYXJkW0JERVBUSF1bQldJRFRIXTsJLyogdGhlIHNxdWFyZXMgKi8KKy8qICpJTkRFTlQtT0ZGKiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgaW50IHk7CisgICAgaW50IHg7Cit9IG9mZnNldHNbXSA9IHsKKyAgICB7ICAyLCAgMSB9LAorICAgIHsgIDEsICAyIH0sCisgICAgeyAtMSwgIDIgfSwKKyAgICB7IC0yLCAgMSB9LAorICAgIHsgLTIsIC0xIH0sCisgICAgeyAtMSwgLTIgfSwKKyAgICB7ICAxLCAtMiB9LAorICAgIHsgIDIsIC0xIH0sCit9OworLyogKklOREVOVC1PTiogKi8KKworc3RhdGljIHZvaWQKK2luaXRfcHJvZ3JhbSh2b2lkKQoreworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHNyYW5kKCh1bnNpZ25lZCkgZ2V0cGlkKCkpOworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsJCQkvKiBpbW1lZGlhdGUgY2hhciByZXR1cm4gKi8KKyAgICBub2VjaG8oKTsJCQkvKiBubyBpbW1lZGlhdGUgZWNobyAqLworICAgIGJvYXJkd2luID0gbmV3d2luKEJERVBUSCAqIDIgKyAxLCBCV0lEVEggKiA0ICsgMSwgQk9BUkRZLCBCT0FSRFgpOworICAgIGhlbHB3aW4gPSBuZXd3aW4oMCwgMCwgSU5TVFJZLCBJTlNUUlgpOworICAgIG1zZ3dpbiA9IG5ld3dpbigxLCBJTlNUUlggLSAxLCBOT1RJRllZLCAwKTsKKyAgICBzY3JvbGxvayhtc2d3aW4sIFRSVUUpOworICAgIGtleXBhZChib2FyZHdpbiwgVFJVRSk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaW50IGJnID0gQ09MT1JfQkxBQ0s7CisKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBiZyA9IC0xOworI2VuZGlmCisKKwkodm9pZCkgaW5pdF9wYWlyKFRSQUlMX0NPTE9SLCBDT0xPUl9DWUFOLCBiZyk7CisJKHZvaWQpIGluaXRfcGFpcihQTFVTX0NPTE9SLCBDT0xPUl9SRUQsIGJnKTsKKwkodm9pZCkgaW5pdF9wYWlyKE1JTlVTX0NPTE9SLCBDT0xPUl9HUkVFTiwgYmcpOworCisJdHJhaWwgfD0gQ09MT1JfUEFJUihUUkFJTF9DT0xPUik7CisJcGx1cyB8PSBDT0xPUl9QQUlSKFBMVVNfQ09MT1IpOworCW1pbnVzIHw9IENPTE9SX1BBSVIoTUlOVVNfQ09MT1IpOworICAgIH0KKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICAodm9pZCkgbW91c2VtYXNrKEJVVFRPTjFfQ0xJQ0tFRCwgKG1tYXNrX3QgKikgTlVMTCk7CisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisKKyAgICBvbGRjaCA9IG1pbnVzOworfQorCitzdGF0aWMgdm9pZAoraGVscDEodm9pZCkKKy8qIGdhbWUgZXhwbGFuYXRpb24gLS0gaW5pdGlhbCBoZWxwIHNjcmVlbiAqLworeworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJLbmlnaHQncyBtb3ZlIGlzIGEgc29saXRhaXJlIHB1enpsZS4gIFlvdXJcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJvYmplY3RpdmUgaXMgdG8gdmlzaXQgZWFjaCBzcXVhcmUgb2YgdGhlICBcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJjaGVzc2JvYXJkIGV4YWN0bHkgb25jZSBieSBtYWtpbmcga25pZ2h0J3NcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJtb3ZlcyAob25lIHNxdWFyZSByaWdodCBvciBsZWZ0IGZvbGxvd2VkICBcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJieSB0d28gc3F1YXJlcyB1cCBvciBkb3duLCBvciB0d28gc3F1YXJlcyBcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJyaWdodCBvciBsZWZ0IGZvbGxvd2VkIGJ5IG9uZSBzcXVhcmUgdXAgb3JcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJkb3duKS4gIFlvdSBtYXkgc3RhcnQgYW55d2hlcmUuXG5cbiIpOworCisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIlVzZSBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIGN1cnNvciBhcm91bmQuXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiV2hlbiB5b3Ugd2FudCB0byBtb3ZlIHlvdXIga25pZ2h0IHRvIHRoZSBcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJjdXJzb3IgbG9jYXRpb24sIHByZXNzIDxzcGFjZT4gb3IgRW50ZXIuXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiSWxsZWdhbCBtb3ZlcyB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImF1ZGlibGUgYmVlcC5cblxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIlRoZSBwcm9ncmFtIHdpbGwgZGV0ZWN0IGlmIHlvdSBzb2x2ZSB0aGVcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJwdXp6bGU7IGFsc28gaW5mb3JtIHlvdSB3aGVuIHlvdSBydW4gb3V0XG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAib2YgbGVnYWwgbW92ZXMuXG5cbiIpOworCisgICAgKHZvaWQpIG12d2FkZHN0cihoZWxwd2luLCBOT1RJRllZIC0gSU5TVFJZLCAwLAorCQkgICAgICJQcmVzcyBgPycgdG8gZ28gdG8ga2V5c3Ryb2tlIGhlbHAuIik7Cit9CisKK3N0YXRpYyB2b2lkCitoZWxwMih2b2lkKQorLyoga2V5c3Ryb2tlIGhlbHAgc2NyZWVuICovCit7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIlBvc3NpYmxlIG1vdmVzIGFyZSBzaG93biB3aXRoIGAtJy5cblxuIik7CisKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiWW91IGNhbiBtb3ZlIGFyb3VuZCB3aXRoIHRoZSBhcnJvdyBrZXlzIG9yXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAid2l0aCB0aGUgcm9ndWUvaGFjayBtb3ZlbWVudCBrZXlzLiAgT3RoZXJcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJjb21tYW5kcyBhbGxvdyB5b3UgdG8gdW5kbyBtb3ZlcyBvciByZWRyYXcuXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiWW91ciBtb3VzZSBtYXkgd29yazsgdHJ5IGxlZnQtYnV0dG9uIHRvXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAibW92ZSB0byB0aGUgc3F1YXJlIHVuZGVyIHRoZSBwb2ludGVyLlxuXG4iKTsKKworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJ4LHEgLS0gZXhpdCAgICAgICAgICAgICB5IGsgdSAgICA3IDggOVxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgInIgLS0gcmVkcmF3IHNjcmVlbiAgICAgICBcXHwvICAgICAgXFx8LyBcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJia3NwIC0tIHVuZG8gbW92ZSAgICAgICBoLSstbCAgICA0LSstNlxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImEgLS0gYXV0b2p1bXAgICAgICAgICAgICAvfFxcICAgICAgL3xcXCBcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICIgICAgICAgICAgICAgICAgICAgICAgICBiIGogbiAgICAxIDIgM1xuIik7CisKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiXG5Zb3UgY2FuIHBsYWNlIHlvdXIga25pZ2h0IG9uIHRoZSBzZWxlY3RlZFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgInNxdWFyZSB3aXRoIHNwYWNlYmFyLCBFbnRlciwgb3IgdGhlIGtleXBhZFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImNlbnRlciBrZXkuICBVc2UgRi9CIHRvIHJldmlldyB0aGUgcGF0aC5cbiIpOworCisgICAgKHZvaWQpIG12d2FkZHN0cihoZWxwd2luLCBOT1RJRllZIC0gSU5TVFJZLCAwLAorCQkgICAgICJQcmVzcyBgPycgdG8gZ28gdG8gZ2FtZSBleHBsYW5hdGlvbiIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19oZWxwKGJvb2wgKiBrZXloZWxwKQoreworICAgIHdlcmFzZShoZWxwd2luKTsKKyAgICBpZiAoKmtleWhlbHApIHsKKwloZWxwMSgpOworCSprZXloZWxwID0gRkFMU0U7CisgICAgfSBlbHNlIHsKKwloZWxwMigpOworCSprZXloZWxwID0gVFJVRTsKKyAgICB9CisgICAgd3JlZnJlc2goaGVscHdpbik7Cit9CisKK3N0YXRpYyBib29sCitjaGtzcXIoaW50IHIxLCBpbnQgYzEpCit7CisgICAgaWYgKChyMSA8IDApIHx8IChyMSA+IEJERVBUSCAtIDEpKQorCXJldHVybiAoRkFMU0UpOworICAgIGlmICgoYzEgPCAwKSB8fCAoYzEgPiBCV0lEVEggLSAxKSkKKwlyZXR1cm4gKEZBTFNFKTsKKyAgICByZXR1cm4gKCghYm9hcmRbcjFdW2MxXSkgPyBUUlVFIDogRkFMU0UpOworfQorCitzdGF0aWMgYm9vbAorY2hrbW92ZXMoaW50IHJ3LCBpbnQgY29sKQorLyogY2hlY2sgdG8gc2VlIGlmIHZhbGlkIG1vdmVzIGFyZSBhdmFpbGFibGUgKi8KK3sKKyAgICB1bnNpZ25lZCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRihvZmZzZXRzKTsgbisrKQorCWlmIChjaGtzcXIocncgKyBvZmZzZXRzW25dLnksIGNvbCArIG9mZnNldHNbbl0ueCkpCisJICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuIChGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCitkb3NxdWFyZXModm9pZCkKK3sKKyAgICBpbnQgaSwgajsKKworICAgIG12YWRkc3RyKDAsIDIwLCAiS05JR0hUJ1MgTU9WRSAtLSBhIGxvZ2ljYWwgc29saXRhaXJlIik7CisKKyAgICBtb3ZlKEJPQVJEWSwgQk9BUkRYKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19VTENPUk5FUik7CisgICAgZm9yIChqID0gMDsgaiA8IDc7IGorKykgeworCXdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX1RURUUpOworICAgIH0KKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19VUkNPUk5FUik7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgQkRFUFRIOyBpKyspIHsKKwltb3ZlKEJPQVJEWSArIGkgKiAyIC0gMSwgQk9BUkRYKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19WTElORSk7CisJZm9yIChqID0gMDsgaiA8IEJXSURUSDsgaisrKSB7CisJICAgIHdhZGRjaChib2FyZHdpbiwgJyAnKTsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCAnICcpOworCSAgICB3YWRkY2goYm9hcmR3aW4sICcgJyk7CisJICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX1ZMSU5FKTsKKwl9CisJbW92ZShCT0FSRFkgKyBpICogMiwgQk9BUkRYKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19MVEVFKTsKKwlmb3IgKGogPSAwOyBqIDwgQldJRFRIIC0gMTsgaisrKSB7CisJICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCSAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX1BMVVMpOworCX0KKwl3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19SVEVFKTsKKyAgICB9CisKKyAgICBtb3ZlKEJPQVJEWSArIGkgKiAyIC0gMSwgQk9BUkRYKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19WTElORSk7CisgICAgZm9yIChqID0gMDsgaiA8IEJXSURUSDsgaisrKSB7CisJd2FkZGNoKGJvYXJkd2luLCAnICcpOworCXdhZGRjaChib2FyZHdpbiwgJyAnKTsKKwl3YWRkY2goYm9hcmR3aW4sICcgJyk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfVkxJTkUpOworICAgIH0KKworICAgIG1vdmUoQk9BUkRZICsgaSAqIDIsIEJPQVJEWCk7CisgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfTExDT1JORVIpOworICAgIGZvciAoaiA9IDA7IGogPCBCV0lEVEggLSAxOyBqKyspIHsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19CVEVFKTsKKyAgICB9CisgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfTFJDT1JORVIpOworfQorCitzdGF0aWMgdm9pZAorbWFya19wb3NzaWJsZXMoaW50IHByb3csIGludCBwY29sLCBjaHR5cGUgbWFyaykKK3sKKyAgICB1bnNpZ25lZCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRihvZmZzZXRzKTsgbisrKSB7CisJaWYgKGNoa3Nxcihwcm93ICsgb2Zmc2V0c1tuXS55LCBwY29sICsgb2Zmc2V0c1tuXS54KSkgeworCSAgICBjZWxsbW92ZShwcm93ICsgb2Zmc2V0c1tuXS55LCBwY29sICsgb2Zmc2V0c1tuXS54KTsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCBtYXJrKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZmluZF9uZXh0X21vdmUoaW50ICp5LCBpbnQgKngpCit7CisgICAgdW5zaWduZWQgaiwgazsKKyAgICBpbnQgZm91bmQgPSAtMTsKKyAgICBpbnQgZmlyc3QgPSAtMTsKKyAgICBpbnQgbmV4dCA9IDA7CisgICAgaW50IG9sZHksIG9sZHg7CisgICAgaW50IG5ld3ksIG5ld3g7CisKKyAgICBpZiAobW92ZWNvdW50ID4gMSkgeworCW9sZHkgPSBoaXN0b3J5W21vdmVjb3VudCAtIDFdLnk7CisJb2xkeCA9IGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueDsKKwlmb3IgKGogPSAwOyBqIDwgU0laRU9GKG9mZnNldHMpICogMjsgaisrKSB7CisJICAgIGsgPSBqICUgU0laRU9GKG9mZnNldHMpOworCSAgICBuZXd5ID0gb2xkeSArIG9mZnNldHNba10ueTsKKwkgICAgbmV3eCA9IG9sZHggKyBvZmZzZXRzW2tdLng7CisJICAgIGlmIChjaGtzcXIobmV3eSwgbmV3eCkpIHsKKwkJaWYgKGZpcnN0IDwgMCkKKwkJICAgIGZpcnN0ID0gazsKKwkJaWYgKG5ld3kgPT0gKnkKKwkJICAgICYmIG5ld3ggPT0gKngpIHsKKwkJICAgIGZvdW5kID0gazsKKwkJfSBlbHNlIGlmIChmb3VuZCA+PSAwKSB7CisJCSAgICBuZXh0ID0gazsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisJaWYgKGZvdW5kIDwgMCkKKwkgICAgbmV4dCA9IGZpcnN0OworCWlmIChuZXh0ID49IDApIHsKKwkgICAgKnkgPSBvbGR5ICsgb2Zmc2V0c1tuZXh0XS55OworCSAgICAqeCA9IG9sZHggKyBvZmZzZXRzW25leHRdLng7CisJfQorICAgIH0gZWxzZSB7CisJYmVlcCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3VubWFya2NlbGwoaW50IHJvdywgaW50IGNvbHVtbikKK3sKKyAgICBjZWxsbW92ZShyb3csIGNvbHVtbik7CisgICAgd2FkZGNoKGJvYXJkd2luLCAnXGInKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sICcgJyk7CisgICAgd2FkZGNoKGJvYXJkd2luLCBtaW51cyk7CisgICAgd2FkZGNoKGJvYXJkd2luLCAnICcpOworfQorCitzdGF0aWMgdm9pZAorbWFya2NlbGwoY2h0eXBlIHRjaGFyLCBpbnQgcm93LCBpbnQgY29sdW1uKQoreworICAgIGNlbGxtb3ZlKHJvdywgY29sdW1uKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sICdcYicpOworICAgIHdhZGRjaChib2FyZHdpbiwgdGNoYXIpOworICAgIHdhZGRjaChib2FyZHdpbiwgdGNoYXIpOworICAgIHdhZGRjaChib2FyZHdpbiwgdGNoYXIpOworfQorCitzdGF0aWMgdm9pZAorZHJhd21vdmUoY2h0eXBlIHRjaGFyLCBpbnQgb2xkeSwgaW50IG9sZHgsIGludCByb3csIGludCBjb2x1bW4pCisvKiBwbGFjZSB0aGUgc3RhcnMsIHVwZGF0ZSBib2FyZCAmIGN1cnJlbnRzICovCit7CisgICAgaWYgKG1vdmVjb3VudCA8PSAxKSB7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkRFUFRIOyBpKyspIHsKKwkgICAgZm9yIChqID0gMDsgaiA8IEJXSURUSDsgaisrKSB7CisJCWlmIChtb3ZlY291bnQgPT0gMCkgeworCQkgICAgdW5tYXJrY2VsbChpLCBqKTsKKwkJfSBlbHNlIHsKKwkJICAgIGNlbGxtb3ZlKGksIGopOworCQkgICAgaWYgKHdpbmNoKGJvYXJkd2luKSA9PSBtaW51cykKKwkJCXdhZGRjaChib2FyZHdpbiwgbW92ZWNvdW50ID8gJyAnIDogbWludXMpOworCQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwltYXJrY2VsbCh0Y2hhciwgb2xkeSwgb2xkeCk7CisJbWFya19wb3NzaWJsZXMob2xkeSwgb2xkeCwgJyAnKTsKKyAgICB9CisKKyAgICBpZiAocm93ID49IDAgJiYgY29sdW1uID49IDApIHsKKwltYXJrY2VsbCh0cmFpbCwgcm93LCBjb2x1bW4pOworCW1hcmtfcG9zc2libGVzKHJvdywgY29sdW1uLCBtaW51cyk7CisJYm9hcmRbcm93XVtjb2x1bW5dID0gVFJVRTsKKyAgICB9CisKKyAgICB3cHJpbnR3KG1zZ3dpbiwgIlxuTW92ZSAlZCIsIG1vdmVjb3VudCk7CisgICAgaWYgKHRyaWFsY291bnQgIT0gbW92ZWNvdW50KQorCXdwcmludHcobXNnd2luLCAiICglZCB0cmllcykiLCB0cmlhbGNvdW50KTsKKyAgICB3Y2xydG9lb2wobXNnd2luKTsKK30KKworc3RhdGljIGludAoraWFicyhpbnQgbnVtKQoreworICAgIGlmIChudW0gPCAwKQorCXJldHVybiAoLW51bSk7CisgICAgZWxzZQorCXJldHVybiAobnVtKTsKK30KKworc3RhdGljIGJvb2wKK2V2YWxtb3ZlKGludCByb3csIGludCBjb2x1bW4pCisvKiBldmFsdWF0ZSBtb3ZlICovCit7CisgICAgaWYgKG1vdmVjb3VudCA9PSAxKQorCXJldHVybiAoVFJVRSk7CisgICAgZWxzZSBpZiAoYm9hcmRbcm93XVtjb2x1bW5dID09IFRSVUUpIHsKKwl3YWRkc3RyKG1zZ3dpbiwgIlxuWW91J3ZlIGFscmVhZHkgYmVlbiB0aGVyZS4iKTsKKwlyZXR1cm4gKEZBTFNFKTsKKyAgICB9IGVsc2UgeworCWludCByZGlmID0gaWFicyhyb3cgLSBoaXN0b3J5W21vdmVjb3VudCAtIDFdLnkpOworCWludCBjZGlmID0gaWFicyhjb2x1bW4gLSBoaXN0b3J5W21vdmVjb3VudCAtIDFdLngpOworCisJaWYgKCEoKHJkaWYgPT0gMSkgJiYgKGNkaWYgPT0gMikpICYmICEoKHJkaWYgPT0gMikgJiYgKGNkaWYgPT0gMSkpKSB7CisJICAgIHdhZGRzdHIobXNnd2luLCAiXG5UaGF0J3Mgbm90IGEgbGVnYWwga25pZ2h0J3MgbW92ZS4iKTsKKwkgICAgcmV0dXJuIChGQUxTRSk7CisJfQorICAgIH0KKworICAgIHJldHVybiAoVFJVRSk7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBsZXRlZCh2b2lkKQoreworICAgIGludCBpLCBqLCBjb3VudCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQkRFUFRIOyBpKyspCisJZm9yIChqID0gMDsgaiA8IEJXSURUSDsgaisrKQorCSAgICBpZiAoYm9hcmRbaV1bal0gIT0gMCkKKwkJY291bnQgKz0gMTsKKyAgICByZXR1cm4gKGNvdW50ID09IChCV0lEVEggKiBCREVQVEgpID8gLTEgOiBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkCitub19wcmV2aW91c19tb3ZlKHZvaWQpCit7CisgICAgd2FkZHN0cihtc2d3aW4sICJcbk5vIHByZXZpb3VzIG1vdmUuIik7CisgICAgYmVlcCgpOworfQorCitzdGF0aWMgdm9pZAorcGxheSh2b2lkKQorLyogcGxheSB0aGUgZ2FtZSAqLworeworICAgIGJvb2wga2V5aGVscDsJCS8qIFRSVUUgaWYga2V5c3Ryb2tlIGhlbHAgaXMgdXAgKi8KKyAgICBpbnQgaSwgaiwgY291bnQ7CisgICAgaW50IGxhc3Rjb2wgPSAwOwkJLyogbGFzdCBsb2NhdGlvbiB2aXNpdGVkICovCisgICAgaW50IGxhc3Ryb3cgPSAwOworICAgIGludCBueSA9IDAsIG54ID0gMDsKKyAgICBpbnQgcmV2aWV3ID0gMDsJCS8qIHJldmlldyBoaXN0b3J5ICovCisgICAgaW50IHJ3ID0gMCwgY29sID0gMDsJLyogY3VycmVudCByb3cgYW5kIGNvbHVtbiAqLworCisgICAgZG8geworCS8qIGNsZWFyIHNjcmVlbiBhbmQgZHJhdyBib2FyZCAqLworCXdlcmFzZShib2FyZHdpbik7CisJd2VyYXNlKGhlbHB3aW4pOworCXdlcmFzZShtc2d3aW4pOworCWRvc3F1YXJlcygpOworCWhlbHAxKCk7CisJd25vdXRyZWZyZXNoKHN0ZHNjcik7CisJd25vdXRyZWZyZXNoKGhlbHB3aW4pOworCXdub3V0cmVmcmVzaChtc2d3aW4pOworCXdub3V0cmVmcmVzaChib2FyZHdpbik7CisJZG91cGRhdGUoKTsKKworCW1vdmVjb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEJERVBUSDsgaSsrKSB7CisJICAgIGZvciAoaiA9IDA7IGogPCBCV0lEVEg7IGorKykgeworCQlib2FyZFtpXVtqXSA9IEZBTFNFOworCQl1bm1hcmtjZWxsKGksIGopOworCSAgICB9CisJfQorCW1lbXNldChoaXN0b3J5LCAwLCBzaXplb2YoaGlzdG9yeSkpOworCWhpc3RvcnlbMF0ueSA9IGhpc3RvcnlbMF0ueCA9IC0xOworCWhpc3RvcnlbMV0ueSA9IGhpc3RvcnlbMV0ueCA9IC0xOworCWxhc3Ryb3cgPSBsYXN0Y29sID0gLTI7CisJbW92ZWNvdW50ID0gMTsKKwl0cmlhbGNvdW50ID0gMTsKKwlrZXloZWxwID0gRkFMU0U7CisJc2hvd19oZWxwKCZrZXloZWxwKTsKKworCWZvciAoOzspIHsKKwkgICAgaWYgKHJ3ICE9IGxhc3Ryb3cgfHwgY29sICE9IGxhc3Rjb2wpIHsKKwkJaWYgKGxhc3Ryb3cgPj0gMCAmJiBsYXN0Y29sID49IDApIHsKKwkJICAgIGNlbGxtb3ZlKGxhc3Ryb3csIGxhc3Rjb2wpOworCQkgICAgaWYgKGJvYXJkW2xhc3Ryb3ddW2xhc3Rjb2xdKQorCQkJd2FkZGNoKGJvYXJkd2luLCB0cmFpbCk7CisJCSAgICBlbHNlCisJCQl3YWRkY2goYm9hcmR3aW4sIG9sZGNoKTsKKwkJfQorCisJCWNlbGxtb3ZlKHJ3LCBjb2wpOworCQlvbGRjaCA9IHdpbmNoKGJvYXJkd2luKTsKKworCQlsYXN0cm93ID0gcnc7CisJCWxhc3Rjb2wgPSBjb2w7CisJICAgIH0KKwkgICAgY2VsbG1vdmUocncsIGNvbCk7CisJICAgIHdhZGRjaChib2FyZHdpbiwgcGx1cyk7CisJICAgIGNlbGxtb3ZlKHJ3LCBjb2wpOworCisJICAgIHdyZWZyZXNoKG1zZ3dpbik7CisKKwkgICAgc3dpdGNoICh3Z2V0Y2goYm9hcmR3aW4pKSB7CisJICAgIGNhc2UgJ2snOgorCSAgICBjYXNlICc4JzoKKwkgICAgY2FzZSBLRVlfVVA6CisJCW55ID0gcncgKyBCREVQVEggLSAxOworCQlueCA9IGNvbDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2onOgorCSAgICBjYXNlICcyJzoKKwkgICAgY2FzZSBLRVlfRE9XTjoKKwkJbnkgPSBydyArIDE7CisJCW54ID0gY29sOworCQlicmVhazsKKwkgICAgY2FzZSAnaCc6CisJICAgIGNhc2UgJzQnOgorCSAgICBjYXNlIEtFWV9MRUZUOgorCQlueSA9IHJ3OworCQlueCA9IGNvbCArIEJXSURUSCAtIDE7CisJCWJyZWFrOworCSAgICBjYXNlICdsJzoKKwkgICAgY2FzZSAnNic6CisJICAgIGNhc2UgS0VZX1JJR0hUOgorCQlueSA9IHJ3OworCQlueCA9IGNvbCArIDE7CisJCWJyZWFrOworCSAgICBjYXNlICd5JzoKKwkgICAgY2FzZSAnNyc6CisJICAgIGNhc2UgS0VZX0ExOgorCQlueSA9IHJ3ICsgQkRFUFRIIC0gMTsKKwkJbnggPSBjb2wgKyBCV0lEVEggLSAxOworCQlicmVhazsKKwkgICAgY2FzZSAnYic6CisJICAgIGNhc2UgJzEnOgorCSAgICBjYXNlIEtFWV9DMToKKwkJbnkgPSBydyArIDE7CisJCW54ID0gY29sICsgQldJRFRIIC0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3UnOgorCSAgICBjYXNlICc5JzoKKwkgICAgY2FzZSBLRVlfQTM6CisJCW55ID0gcncgKyBCREVQVEggLSAxOworCQlueCA9IGNvbCArIDE7CisJCWJyZWFrOworCSAgICBjYXNlICduJzoKKwkgICAgY2FzZSAnMyc6CisJICAgIGNhc2UgS0VZX0MzOgorCQlueSA9IHJ3ICsgMTsKKwkJbnggPSBjb2wgKyAxOworCQlicmVhazsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorCSAgICBjYXNlIEtFWV9NT1VTRToKKwkJeworCQkgICAgTUVWRU5UIG15ZXZlbnQ7CisKKwkJICAgIGdldG1vdXNlKCZteWV2ZW50KTsKKwkJICAgIGlmIChteWV2ZW50LnkgPj0gQ1koMCkgJiYgbXlldmVudC55IDw9IENZKEJERVBUSCkKKwkJCSYmIG15ZXZlbnQueCA+PSBDWCgwKSAmJiBteWV2ZW50LnggPD0gQ1goQldJRFRIKSkgeworCQkJbnggPSBDWElOVihteWV2ZW50LngpOworCQkJbnkgPSBDWUlOVihteWV2ZW50LnkpOworCQkJdW5nZXRjaCgnXG4nKTsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNlIHsKKwkJCWJlZXAoKTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisKKwkgICAgY2FzZSBLRVlfQjI6CisJICAgIGNhc2UgJ1xuJzoKKwkgICAgY2FzZSAnICc6CisJCXJldmlldyA9IDA7CisJCWlmIChldmFsbW92ZShydywgY29sKSkgeworCQkgICAgZHJhd21vdmUodHJhaWwsCisJCQkgICAgIGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueSwKKwkJCSAgICAgaGlzdG9yeVttb3ZlY291bnQgLSAxXS54LAorCQkJICAgICBydywgY29sKTsKKwkJICAgIGhpc3RvcnlbbW92ZWNvdW50XS55ID0gcnc7CisJCSAgICBoaXN0b3J5W21vdmVjb3VudF0ueCA9IGNvbDsKKwkJICAgIG1vdmVjb3VudCsrOworCQkgICAgdHJpYWxjb3VudCsrOworCisJCSAgICBpZiAoIWNoa21vdmVzKHJ3LCBjb2wpKSB7CisJCQlpZiAoY29tcGxldGVkKCkgPCAwKSB7CisJCQkgICAgd2FkZHN0cihtc2d3aW4sICJcbllvdSB3b24uIik7CisJCQl9IGVsc2UgeworCQkJICAgIHdhZGRzdHIobXNnd2luLAorCQkJCSAgICAiXG5ObyBmdXJ0aGVyIG1vdmVzIGFyZSBwb3NzaWJsZS4iKTsKKwkJCX0KKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGJlZXAoKTsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlIEtFWV9VTkRPOgorCSAgICBjYXNlIEtFWV9CQUNLU1BBQ0U6CisJICAgIGNhc2UgJ1xiJzoKKwkJcmV2aWV3ID0gMDsKKwkJaWYgKG1vdmVjb3VudCA8PSAwKSB7CisJCSAgICBub19wcmV2aW91c19tb3ZlKCk7CisJCX0gZWxzZSBpZiAobW92ZWNvdW50IDw9IDEpIHsKKwkJICAgIG55ID0gaGlzdG9yeVttb3ZlY291bnRdLnk7CisJCSAgICBueCA9IGhpc3RvcnlbbW92ZWNvdW50XS54OworCQkgICAgaWYgKG54IDwgMCB8fCBueSA8IDApIHsKKwkJCW55ID0gbGFzdHJvdzsKKwkJCW54ID0gbGFzdGNvbDsKKwkJICAgIH0KKwkJICAgIG1vdmVjb3VudCA9IDA7CisJCSAgICBib2FyZFtueV1bbnhdID0gRkFMU0U7CisJCSAgICBvbGRjaCA9IG1pbnVzOworCQkgICAgZHJhd21vdmUoJyAnLCBueSwgbngsIC0xLCAtMSk7CisJCSAgICBtb3ZlY291bnQgPSAxOworCQkgICAgdHJpYWxjb3VudCA9IDE7CisJCSAgICBub19wcmV2aW91c19tb3ZlKCk7CisJCX0gZWxzZSB7CisJCSAgICBpbnQgb2xkeSA9IGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueTsKKwkJICAgIGludCBvbGR4ID0gaGlzdG9yeVttb3ZlY291bnQgLSAxXS54OworCisJCSAgICBpZiAoIWJvYXJkW3J3XVtjb2xdKSB7CisJCQljZWxsbW92ZShydywgY29sKTsKKwkJCXdhZGRjaChib2FyZHdpbiwgJyAnKTsKKwkJICAgIH0KKworCQkgICAgYm9hcmRbb2xkeV1bb2xkeF0gPSBGQUxTRTsKKwkJICAgIC0tbW92ZWNvdW50OworCQkgICAgbnkgPSBoaXN0b3J5W21vdmVjb3VudCAtIDFdLnk7CisJCSAgICBueCA9IGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueDsKKwkJICAgIGlmIChueCA8IDAgfHwgbnkgPCAwKSB7CisJCQlueSA9IG9sZHk7CisJCQlueCA9IG9sZHg7CisJCSAgICB9CisJCSAgICBkcmF3bW92ZSgnICcsIG9sZHksIG9sZHgsIG55LCBueCk7CisKKwkJICAgIC8qIGF2b2lkIHByb2JsZW1zIGlmIHdlIGp1c3QgY2hhbmdlZCB0aGUgY3VycmVudCBjZWxsICovCisJCSAgICBjZWxsbW92ZShsYXN0cm93LCBsYXN0Y29sKTsKKwkJICAgIG9sZGNoID0gd2luY2goYm9hcmR3aW4pOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2EnOgorCQlueCA9IGNvbDsKKwkJbnkgPSBydzsKKwkJZmluZF9uZXh0X21vdmUoJm55LCAmbngpOworCQlicmVhazsKKworCSAgICBjYXNlICdGJzoKKwkJaWYgKHJldmlldyA+IDApIHsKKwkJICAgIHJldmlldy0tOworCQkgICAgbnkgPSBoaXN0b3J5W21vdmVjb3VudCAtIHJldmlldyAtIDFdLnk7CisJCSAgICBueCA9IGhpc3RvcnlbbW92ZWNvdW50IC0gcmV2aWV3IC0gMV0ueDsKKwkJfSBlbHNlIHsKKwkJICAgIGJlZXAoKTsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlICdCJzoKKwkJaWYgKHJldmlldyA8IG1vdmVjb3VudCAtIDIpIHsKKwkJICAgIHJldmlldysrOworCQkgICAgbnkgPSBoaXN0b3J5W21vdmVjb3VudCAtIHJldmlldyAtIDFdLnk7CisJCSAgICBueCA9IGhpc3RvcnlbbW92ZWNvdW50IC0gcmV2aWV3IC0gMV0ueDsKKwkJfSBlbHNlIHsKKwkJICAgIGJlZXAoKTsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlIEtFWV9SRURPOgorCSAgICBjYXNlICdcZic6CisJICAgIGNhc2UgJ3InOgorCQljbGVhcm9rKGN1cnNjciwgVFJVRSk7CisJCXdub3V0cmVmcmVzaChzdGRzY3IpOworCQl3bm91dHJlZnJlc2goYm9hcmR3aW4pOworCQl3bm91dHJlZnJlc2gobXNnd2luKTsKKwkJd25vdXRyZWZyZXNoKGhlbHB3aW4pOworCQlkb3VwZGF0ZSgpOworCQlicmVhazsKKworCSAgICBjYXNlICdxJzoKKwkgICAgY2FzZSAneCc6CisJCWdvdG8gZHJvcG91dDsKKworCSAgICBjYXNlICc/JzoKKwkJc2hvd19oZWxwKCZrZXloZWxwKTsKKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIGNvbCA9IG54ICUgQldJRFRIOworCSAgICBydyA9IG55ICUgQkRFUFRIOworCX0KKworICAgICAgZHJvcG91dDoKKwlpZiAoKGNvdW50ID0gY29tcGxldGVkKCkpIDwgMCkKKwkgICAgd3ByaW50dyhtc2d3aW4sICJcbllvdSB3b24uICBDYXJlIHRvIHRyeSBhZ2Fpbj8gIik7CisJZWxzZQorCSAgICB3cHJpbnR3KG1zZ3dpbiwgIlxuJWQgc3F1YXJlcyBmaWxsZWQuICBUcnkgYWdhaW4/ICIsIGNvdW50KTsKKwl3Y2xydG9lb2wobXNnd2luKTsKKyAgICB9IHdoaWxlCisJKHRvbG93ZXIod2dldGNoKG1zZ3dpbikpID09ICd5Jyk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGluaXRfcHJvZ3JhbSgpOworCisgICAgcGxheSgpOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworLyoga25pZ2h0LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS90ZXN0L2xpbnV4LWNvbG9yLmRhdCBiL3Rlc3QvbGludXgtY29sb3IuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOGIzZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2xpbnV4LWNvbG9yLmRhdApAQCAtMCwwICsxLDQ4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogbGludXgtY29sb3IuZGF0LHYgMS4yIDIwMDYvMDQvMjIgMjE6NDA6MDAgdG9tIEV4cCAkCisjIFRoZXNlIHZhbHVlcyBhcmUgZGVyaXZlZCBmcm9tIGxpbnV4L2RyaXZlcnMvY2hhci92dC5jIChkZWZhdWx0X3JlZFtdLAorIyBkZWZhdWx0X2dybltdIGFuZCBkZWZhdWx0X2JsdVtdKSwgY29tbWVudGVkCisvKiB0aGUgZGVmYXVsdCBjb2xvdXIgdGFibGUsIGZvciBWR0ErIGNvbG91ciBzeXN0ZW1zICovCitzY2FsZToyNTUKKzA6CSAgMAkgIDAJICAwCisxOgkxNzAJICAwCSAgMAorMjoJICAwCTE3MAkgIDAKKzM6CTE3MAkgODUJICAwCis0OgkgIDAJICAwCTE3MAorNToJMTcwCSAgMAkxNzAKKzY6CSAgMAkxNzAJMTcwCis3OgkxNzAJMTcwCTE3MAorODoJIDg1CSA4NQkgODUKKzk6CTI1NQkgODUJIDg1CisxMDoJIDg1CTI1NQkgODUKKzExOgkyNTUJMjU1CSA4NQorMTI6CSA4NQkgODUJMjU1CisxMzoJMjU1CSA4NQkyNTUKKzE0OgkgODUJMjU1CTI1NQorMTU6CTI1NQkyNTUJMjU1CmRpZmYgLS1naXQgYS90ZXN0L2xpc3R1c2VkLnNoIGIvdGVzdC9saXN0dXNlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MjVmNzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9saXN0dXNlZC5zaApAQCAtMCwwICsxLDE4MiBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogbGlzdHVzZWQuc2gsdiAxLjcgMjAwNi8wNi8wMyAxNjozOTozNyB0b20gRXhwICQKKyMgQSB2ZXJ5IHNpbXBsZSBzY3JpcHQgdG8gbGlzdCBlbnRyeXBvaW50cyB0aGF0IGFyZSB1c2VkIGJ5IGVpdGhlciBhIHRlc3QKKyMgcHJvZ3JhbSwgb3Igd2l0aGluIHRoZSBsaWJyYXJpZXMuICBUaGlzIHJlbGllcyBvbiB0aGUgb3V0cHV0IGZvcm1hdCBvZiAnbm0nLAorIyBhbmQgYXNzdW1lcyB0aGF0IHRoZSBsaWJyYXJpZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCBUUkFDRSBkZWZpbmVkLCBhbmQgdXNpbmcKKyMgdGhlc2Ugb3B0aW9uczoKKyMJLS1kaXNhYmxlLW1hY3JvcworIwktLWVuYWJsZS13aWRlYworIyBTdGF0aWMgbGlicmFyaWVzIGFyZSB1c2VkLCB0byBwcm92aWRlIHNvbWUgZmlsdGVyaW5nIGJhc2VkIG9uIGludGVybmFsIHVzYWdlCisjIG9mIHRoZSBkaWZmZXJlbnQgc3ltYm9scy4KKworIyBrZWVwIHRoZSBzb3J0aW5nIGluZGVwZW5kZW50IG9mIGxvY2FsZToKK2lmIHRlc3QgIiR7TEFOR1VBR0Urc2V0fSIgICAgPSBzZXQ7IHRoZW4gTEFOR1VBR0U9QzsgICAgZXhwb3J0IExBTkdVQUdFOyAgICBmaQoraWYgdGVzdCAiJHtMQU5HK3NldH0iICAgICAgICA9IHNldDsgdGhlbiBMQU5HPUM7ICAgICAgICBleHBvcnQgTEFORzsgICAgICAgIGZpCitpZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiAgICAgID0gc2V0OyB0aGVuIExDX0FMTD1DOyAgICAgIGV4cG9ydCBMQ19BTEw7ICAgICAgZmkKK2lmIHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgPSBzZXQ7IHRoZW4gTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyBmaQoraWYgdGVzdCAiJHtMQ19DVFlQRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQ19DVFlQRT1DOyAgICBleHBvcnQgTENfQ1RZUEU7ICAgIGZpCitpZiB0ZXN0ICIke0xDX0NPTExBVEUrc2V0fSIgID0gc2V0OyB0aGVuIExDX0NPTExBVEU9QzsgIGV4cG9ydCBMQ19DT0xMQVRFOyAgZmkKKworTk1fT1BUUz0KKworaWYgdGVzdCAhIC1kIC4uL29iamVjdHMgOyB0aGVuCisJZWNobyAiPyBuZWVkIG9iamVjdHMgdG8gcnVuIHRoaXMgc2NyaXB0IgorCWV4aXQgMQorZWxpZiB0ZXN0ICEgLWQgLi4vbGliIDsgdGhlbgorCWVjaG8gIj8gbmVlZCBsaWJyYXJpZXMgdG8gcnVuIHRoaXMgc2NyaXB0IgorCWV4aXQgMQorZmkKKworUFJPR1M9Citmb3IgbmFtZSBpbiBgKGVjaG8gInRlc3Q6Ijtzb3J0IG1vZHVsZXM7IGVjaG8gInByb2dzOiI7c29ydCAuLi9wcm9ncy9tb2R1bGVzKSB8c2VkIC1lICdzL1sgCV0uKi8vJyAtZSAnL15bI0BdL2QnYAorZG8KKwljYXNlICRuYW1lIGluCisJKjopCisJCVBST0dTPSIkUFJPR1MgJG5hbWUiCisJCTs7CisJKikKKwkJTkFNRT0uLi9vYmplY3RzLyR7bmFtZX0ubworCQlpZiB0ZXN0IC1mICROQU1FCisJCXRoZW4KKwkJCVBST0dTPSIkUFJPR1MgJE5BTUUiCisJCWZpCisJCTs7CisJZXNhYworZG9uZQorCisjIEZvciBlYWNoIGxpYnJhcnkgLQorZm9yIGxpYiBpbiAuLi9saWIvKi5hCitkbworCUxJQj1gYmFzZW5hbWUgJGxpYiAuYWAKKwljYXNlICRMSUIgaW4KKwkqXyp8KisqKQorCQljb250aW51ZQorCQk7OworCWVzYWMKKworCXRtcD1gZWNobyAkTElCfHNlZCAtZSAncy93JC8vJ2AKKwllY2hvCisJZWNobyAiJHt0bXB9OiIKKwllY2hvICR0bXAgfHNlZCAtZSAncy8uLy0vZycKKwkjIENvbnN0cnVjdCBhIGxpc3Qgb2YgcHVibGljIGV4dGVybmFscyBwcm92aWRlZCBieSB0aGUgbGlicmFyeS4KKwlXQU5UPWBubSAkTk1fT1BUUyAkbGliIHxcCisJCXNlZAktZSAncy9eW14gXSovLycgXAorCQkJLWUgJ3MvXiAqLy8nIFwKKwkJCS1lICcvXlsgYS16XSAvZCcgXAorCQkJLWUgJy86JC9kJyBcCisJCQktZSAnL14kL2QnIFwKKwkJCS1lICcvXlUgL2QnIFwKKwkJCS1lICdzL15bQS1aXSAvLycgXAorCQkJLWUgJy9eXy9kJyB8XAorCQlzb3J0IC11YAorCSMgTGlzdCBwcm9ncmFtcyB3aGljaCB1c2UgdGhhdCBleHRlcm5hbC4KKwlmb3IgbmFtZSBpbiAkV0FOVAorCWRvCisJCUhBVkU9CisJCXRhZ3M9CisJCWxhc3Q9CisJCWZvciBwcm9nIGluICRQUk9HUworCQlkbworCQkJY2FzZSAkcHJvZyBpbgorCQkJKjopCisJCQkJdGFncz0kcHJvZworCQkJCTs7CisJCQkqKQorCQkJCVRFU1Q9YG5tICROTV9PUFRTICRwcm9nIHxcCisJCQkJCXNlZAktZSAncy9eW14gXSovLycgXAorCQkJCQkJLWUgJ3MvXiAqLy8nIFwKKwkJCQkJCS1lICcvXlsgYS16XSAvZCcgXAorCQkJCQkJLWUgJy86JC9kJyBcCisJCQkJCQktZSAnL14kL2QnIFwKKwkJCQkJCS1lICdzL15bQS1aXSAvLycgXAorCQkJCQkJLWUgJy9eXy9kJyBcCisJCQkJCQktZSAncy9eJyR7bmFtZX0nJC9fLycgXAorCQkJCQkJLWUgJy9eW15fXS9kJ2AKKwkJCQlpZiB0ZXN0IC1uICIkVEVTVCIKKwkJCQl0aGVuCisJCQkJCWhhdmU9YGJhc2VuYW1lICRwcm9nIC5vYAorCQkJCQlpZiB0ZXN0IC1uICIkSEFWRSIKKwkJCQkJdGhlbgorCQkJCQkJaWYgdGVzdCAiJGxhc3QiID0gIiR0YWdzIgorCQkJCQkJdGhlbgorCQkJCQkJCUhBVkU9IiRIQVZFICRoYXZlIgorCQkJCQkJZWxzZQorCQkJCQkJCUhBVkU9IiRIQVZFICR0YWdzICRoYXZlIgorCQkJCQkJZmkKKwkJCQkJZWxzZQorCQkJCQkJSEFWRT0iJHRhZ3MgJGhhdmUiCisJCQkJCWZpCisJCQkJCWxhc3Q9IiR0YWdzIgorCQkJCWZpCisJCQkJOzsKKwkJCWVzYWMKKwkJZG9uZQorCQkjIGlmIHdlIGRpZCBub3QgZmluZCBhIHByb2dyYW0gdXNpbmcgaXQgZGlyZWN0bHksIHNlZSBpZiBpdAorCQkjIGlzIHVzZWQgd2l0aGluIGEgbGlicmFyeS4KKwkJaWYgdGVzdCAteiAiJEhBVkUiCisJCXRoZW4KKwkJCWZvciB0bXAgaW4gLi4vbGliLyouYQorCQkJZG8gCisJCQkJY2FzZSAkdG1wIGluCisJCQkJKl8qfCorKikKKwkJCQkJY29udGludWUKKwkJCQkJOzsKKwkJCQllc2FjCisJCQkJVEVTVD1gbm0gJE5NX09QVFMgJHRtcCB8XAorCQkJCQlzZWQJLWUgJ3MvXlteIF0qLy8nIFwKKwkJCQkJCS1lICdzL14gKi8vJyBcCisJCQkJCQktZSAnL15bIGEtel0gL2QnIFwKKwkJCQkJCS1lICcvOiQvZCcgXAorCQkJCQkJLWUgJy9eJC9kJyBcCisJCQkJCQktZSAnL15bQS1UVi1aXSAvZCcgXAorCQkJCQkJLWUgJ3MvXltBLVpdIC8vJyBcCisJCQkJCQktZSAnL15fL2QnIFwKKwkJCQkJCS1lICdzL14nJHtuYW1lfSckL18vJyBcCisJCQkJCQktZSAnL15bXl9dL2QnYAorCQkJCWlmIHRlc3QgLW4gIiRURVNUIgorCQkJCXRoZW4KKwkJCQkJdG1wPWBiYXNlbmFtZSAkdG1wIC5hIHxzZWQgLWUgJ3MvdyQvLydgCisJCQkJCUhBVkU9YGVjaG8gJHRtcCB8IHNlZCAtZSAncy9saWIvbGliOiAvJ2AKKwkJCQkJYnJlYWsKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCQl0ZXN0IC16ICIkSEFWRSIgJiYgSEFWRT0iLSIKKwkJbGVubj1gZXhwciAzOSAtIGxlbmd0aCAkbmFtZWAKKwkJbGVubj1gZXhwciAkbGVubiAvIDhgCisJCXRhYnM9CisJCXdoaWxlIHRlc3QgJGxlbm4gIT0gMAorCQlkbworCQkJdGFicz0iJHt0YWJzfQkiCisJCQlsZW5uPWBleHByICRsZW5uIC0gMWAKKwkJZG9uZQorCQllY2hvICIke25hbWV9JHt0YWJzfSR7SEFWRX0iCisJZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEvdGVzdC9scnRlc3QuYyBiL3Rlc3QvbHJ0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwYjBjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbHJ0ZXN0LmMKQEAgLTAsMCArMSwxODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGVzdCBsb3dlci1yaWdodC1oYW5kIGNvcm5lciBhY2Nlc3MKKyAqCisgKiBvcmlnaW5hbGx5IGJ5IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHRoeXJzdXMuY29tPiwgd3JpdHRlbiBmb3IgYW5pbWF0aW9uCisgKiBhbmQgcmVzaXppbmcgLVQuRGlja2V5CisgKgorICogVGhpcyBjYW4ndCBiZSBwYXJ0IG9mIHRoZSBuY3Vyc2VzIHRlc3QtcHJvZ3JhbSwgYmVjYXVzZSBuY3Vyc2VzIHJpcHMgb2ZmIHRoZQorICogYm90dG9tIGxpbmUgdG8gZG8gbGFiZWxzLgorICoKKyAqICRJZDogbHJ0ZXN0LmMsdiAxLjIxIDIwMDUvMTIvMzEgMTY6NTE6NTMgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IHksIHgsIG1vZGUsIGRpciwgaW5jOworICAgIGNodHlwZSB2YWx1ZTsKK30gTUFSSzsKKworLyoKKyAqIE1ha2UgYSBjb3VwbGUgb2YgbWFya2VycyBnbyAncm91bmQgdGhlIGJvcmRlciB0byBkZW1vbnN0cmF0ZSB0aGF0IHdlIGNhbgorICogcmVhbGx5IHdyaXRlIHRvIGFsbCBwb3NpdGlvbnMgcHJvcGVybHkuCisgKi8KK3N0YXRpYyB2b2lkCitzaG93KE1BUksgKm0pCit7CisgICAgbXZhZGRjaChtLT55LCBtLT54LCBtLT52YWx1ZSk7CisgICAgaWYgKG0tPm1vZGUgPT0gMCkgewkJLyogYWxvbmcgdGhlIHgtZGlyZWN0aW9uICovCisJbS0+eCArPSBtLT5pbmM7CisJaWYgKG0tPnggPj0gQ09MUykgeworCSAgICBtLT54ID0gQ09MUyAtIDE7CisJICAgIG0tPmluYyA9IC1tLT5kaXIgKiBtLT5pbmM7CisJICAgIG0tPnkgKz0gbS0+aW5jOworCSAgICBtLT5tb2RlID0gMTsKKwl9IGVsc2UgaWYgKG0tPnggPCAwKSB7CisJICAgIG0tPnggPSAwOworCSAgICBtLT5pbmMgPSAtbS0+ZGlyICogbS0+aW5jOworCSAgICBtLT55ICs9IG0tPmluYzsKKwkgICAgbS0+bW9kZSA9IDE7CisJfQorICAgIH0gZWxzZSB7CQkJLyogYWxvbmcgdGhlIHktZGlyZWN0aW9uICovCisJbS0+eSArPSBtLT5pbmM7CisJaWYgKG0tPnkgPj0gTElORVMpIHsKKwkgICAgbS0+eSA9IExJTkVTIC0gMTsKKwkgICAgbS0+aW5jID0gbS0+ZGlyICogbS0+aW5jOworCSAgICBtLT54ICs9IG0tPmluYzsKKwkgICAgbS0+bW9kZSA9IDA7CisJfSBlbHNlIGlmIChtLT55IDwgMCkgeworCSAgICBtLT55ID0gMDsKKwkgICAgbS0+aW5jID0gbS0+ZGlyICogbS0+aW5jOworCSAgICBtLT54ICs9IG0tPmluYzsKKwkgICAgbS0+bW9kZSA9IDA7CisJfQorICAgIH0KK30KKworaW50CittYWluKAorCWludCBhcmdjIEdDQ19VTlVTRUQsCisJY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBzdGF0aWMgTUFSSyBtYXJrc1tdID0KKyAgICB7CisJezAsIDAsIDAsIC0xLCAxLCAnKycgfCBBX0JPTER9LAorCXswLCAwLCAxLCAxLCAyLCAnWCd9LAorCXswLCAwLCAxLCAtMSwgMywgJ1knfSwKKwl7MCwgOCwgMCwgLTEsIDEsICcrJyB8IEFfQk9MRH0sCisJezAsIDksIDAsIC0xLCAxLCAnKycgfCBBX0JPTER9LAorCXsxLCAwLCAxLCAxLCAxLCAnKicgfCBBX1JFVkVSU0V9LAorCXsyLCAwLCAxLCAxLCAxLCAnKicgfCBBX1JFVkVSU0V9CisgICAgfTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGluaXRzY3IoKTsKKyAgICBub2VjaG8oKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisgICAgY3Vyc19zZXQoMCk7CisKKyNpZmRlZiBLRVlfUkVTSVpFCisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgIHJlc3RhcnQ6CisjZW5kaWYKKyAgICBtb3ZlKExJTkVTIC8gMiAtIDEsIDQpOworICAgIGlmICghKGhhc19pYygpCisjaWYgSEFWRV9TRVRVUFRFUk0KKyAgICAvKiBzZWUgUHV0Q2hhckxSKCkgKi8KKwkgIHx8IGF1dG9fcmlnaHRfbWFyZ2luCisJICB8fCAoZW50ZXJfYW1fbW9kZSAmJiBleGl0X2FtX21vZGUpCisjZW5kaWYKKwkpKSB7CisJYWRkc3RyKCJZb3VyIHRlcm1pbmFsIGxhY2tzIHRoZSBjYXBhYmlsaXRpZXMgbmVlZGVkIHRvIGFkZHJlc3MgdGhlXG4iKTsKKwltb3ZlKExJTkVTIC8gMiwgNCk7CisJYWRkc3RyKCJsb3dlci1yaWdodC1oYW5kIGNvcm5lciBvZiB0aGUgc2NyZWVuLlxuIik7CisgICAgfSBlbHNlIHsKKwlhZGRzdHIoIlRoaXMgaXMgYSB0ZXN0IG9mIGFjY2VzcyB0byB0aGUgbG93ZXIgcmlnaHQgY29ybmVyLlxuIik7CisJbW92ZShMSU5FUyAvIDIsIDQpOworCWFkZHN0cigiSWYgdGhlIHRvcCBvZiB0aGUgYm94IGlzIG1pc3NpbmcsIHRoZSB0ZXN0IGZhaWxlZC5cbiIpOworCW1vdmUoTElORVMgLyAyICsgMSwgNCk7CisJYWRkc3RyKCJQbGVhc2UgcmVwb3J0IHRoaXMgKHdpdGggYSBjb3B5IG9mIHlvdXIgdGVybWluZm8gZW50cnkpLlxuIik7CisJbW92ZShMSU5FUyAvIDIgKyAyLCA0KTsKKwlhZGRzdHIoInRvIHRoZSBuY3Vyc2VzIG1haW50YWluZXJzLCBhdCBidWctbmN1cnNlc0BnbnUub3JnLlxuIik7CisgICAgfQorCisgICAgZm9yICg7OykgeworCWludCBjaDsKKwl1bnNpZ25lZCBuOworCisJYm94KHN0ZHNjciwgMCwgMCk7CisJZm9yIChuID0gMDsgbiA8IFNJWkVPRihtYXJrcyk7IG4rKykgeworCSAgICBzaG93KCZtYXJrc1tuXSk7CisJfQorCisJaWYgKChjaCA9IGdldGNoKCkpID4gMCkgeworCSAgICBpZiAoY2ggPT0gJ3EnKQorCQlicmVhazsKKwkgICAgZWxzZSBpZiAoY2ggPT0gJ3MnKQorCQlub2RlbGF5KHN0ZHNjciwgRkFMU0UpOworCSAgICBlbHNlIGlmIChjaCA9PSAnICcpCisJCW5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKyNpZmRlZiBUUkFDRQorCSAgICBlbHNlIGlmIChjaCA9PSAnVCcpCisJCXRyYWNlKDApOworCSAgICBlbHNlIGlmIChjaCA9PSAndCcpCisJCXRyYWNlKFRSQUNFX0NBTExTIHwgVFJBQ0VfSUNBTExTIHwgVFJBQ0VfVVBEQVRFKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNJWkUKKwkgICAgZWxzZSBpZiAoY2ggPT0gS0VZX1JFU0laRSkgeworCQlmb3IgKG4gPSAwOyBuIDwgU0laRU9GKG1hcmtzKTsgbisrKSB7CisJCSAgICBpZiAobWFya3Nbbl0ubW9kZSA9PSAwKSB7CS8qIG1vdmluZyBhbG9uZyB4LWRpcmVjdGlvbiAqLworCQkJaWYgKG1hcmtzW25dLnkpCisJCQkgICAgbWFya3Nbbl0ueSA9IExJTkVTIC0gMTsKKwkJICAgIH0gZWxzZSB7CisJCQlpZiAobWFya3Nbbl0ueCkKKwkJCSAgICBtYXJrc1tuXS54ID0gQ09MUyAtIDE7CisJCSAgICB9CisJCX0KKwkJZmxhc2goKTsKKwkJZXJhc2UoKTsKKwkJd3JlZnJlc2goY3Vyc2NyKTsKKwkJZ290byByZXN0YXJ0OworCSAgICB9CisjZW5kaWYKKwl9CisJbmFwbXMoNTApOworCXJlZnJlc2goKTsKKyAgICB9CisKKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisvKiBscnRlc3QuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL3Rlc3QvbWstdGVzdC5hd2sgYi90ZXN0L21rLXRlc3QuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTAzNjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L21rLXRlc3QuYXdrCkBAIC0wLDAgKzEsMTExIEBACisjICRJZDogbWstdGVzdC5hd2ssdiAxLjUgMjAwNy8wMS8yMCAyMToyODo0NyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisjCisjIGdlbmVyYXRlIE1ha2VmaWxlIGZvciBuY3Vyc2VzIHRlc3RzLgorQkVHSU4JeworCQlmaXJzdCA9IDE7CisJCWNvdW50ID0gMDsKKwl9CisvXiMvCXsKKwkJbmV4dDsKKwl9CisvXiQvCXsKKwkJbmV4dDsKKwl9CisJeworCQlpZiAoZmlyc3QpIHsKKwkJCXByaW50ICIjIGdlbmVyYXRlZCBieSBtay10ZXN0LmF3a1xuIjsKKwkJCWZpcnN0ID0gMDsKKwkJfQorCQlwcm9nc1tjb3VudF0gPSAkMTsKKwkJZmxhZ3NbY291bnRdID0gJDI7CisJCXVzaW5nW2NvdW50XSA9ICQzOworCQlmaWxlc1tjb3VudF0gPSAiIjsKKwkJZm9yIChuID0gNDsgbiA8PSBORjsgKytuKSB7CisJCQlmaWxlc1tjb3VudF0gPSBzcHJpbnRmKCIlcyAkKE1PREVMKS8lcyRvIiwgZmlsZXNbY291bnRdLCAkbik7CisJCX0KKwkJY291bnQgPSBjb3VudCArIDE7CisJfQorRU5ECXsKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7ICsrbikgeworCQlpZiAobiA9PSAwKSB7CisJCQlwcmludGYgIlRFU1RTXHQ9ICI7CisJCX0gZWxzZSB7CisJCQlwcmludGYgIlx0ICAiOworCQl9CisJCXByaW50ZiAiJChkZXN0ZGlyKSVzJHgiLCBwcm9nc1tuXTsKKwkJaWYgKG4gPCBjb3VudCAtIDEpIHsKKwkJCXByaW50ZiAiIFxcIjsKKwkJfQorCQlwcmludCAiIjsKKwl9CisJcHJpbnQJIiIKKwlwcmludAkiYWxsOiAkKFRFU1RTKSIKKwlwcmludAkiIgorCXByaW50CSJzb3VyY2VzOiIKKwlwcmludAkiIgorCXByaW50CSJ0YWdzOiIKKwlwcmludAkiCWN0YWdzICouW2NoXSIKKwlwcmludAkiIgorCXByaW50CSJsaWJzIFxcIgorCXByaW50CSJpbnN0YWxsIFxcIgorCXByaW50CSJpbnN0YWxsLmxpYnMgXFwiCisJcHJpbnQJImluc3RhbGwudGVzdDoiCisJcHJpbnQJIiIKKwlwcmludAkidW5pbnN0YWxsOiIKKwlwcmludAkidW5pbnN0YWxsLmxpYnM6IgorCXByaW50CSJ1bmluc3RhbGwudGVzdDoiCisJcHJpbnQJIiIKKwlwcmludAkibW9zdGx5Y2xlYW4gOjoiCisJcHJpbnQJIgktcm0gLWYgY29yZSB0YWdzIFRBR1MgKn4gKi5iYWsgKi5pICoubG4gKi5hdGFjIHRyYWNlIgorCXByaW50CSIiCisJcHJpbnQJImNsZWFuIDo6IG1vc3RseWNsZWFuIgorCXByaW50CSIJLXNoIC1jIFwiaWYgdGVzdCAtbiAnJHgnIDsgdGhlbiAkKE1BS0UpIGNsZWFuIHg9Jyc7IGZpXCIiCisJcHJpbnQJIgktcm0gLXJmICokbyBzY3JlZW5kdW1wICoubGlzICQoVEVTVFMpIC5saWJzIgorCXByaW50CSIiCisJcHJpbnQJImRpc3RjbGVhbiA6OiBjbGVhbiIKKwlwcmludAkiCS1ybSAtZiBNYWtlZmlsZSBuY3Vyc2VzX2NmZy5oIGNvbmZpZy4qIgorCXByaW50CSIiCisJcHJpbnQJInJlYWxjbGVhbiA6OiBkaXN0Y2xlYW4iCisJcHJpbnQJIiIKKwlwcmludAkibGludDoiCisJcHJpbnQJIglzaCAtYyAnZm9yIE4gaW4gJChURVNUUyk7IGRvIGVjaG8gTElOVDokJE47ICQoTElOVCkgJChMSU5UX09QVFMpICQoQ1BQRkxBR1MpICQoc3JjZGlyKS8kJE4uYyAkKExJTlRfTElCUyk7IGRvbmUnIgorCisJaWYgKEVDSE9fTElOSyAhPSAiIikgeworCQlFQ0hPX0xJTks9IkAgZWNobyBsaW5raW5nICRAIC4uLiA7IgorCX0KKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7ICsrbikgeworCQlwcmludCAiIjsKKwkJcHJpbnRmICIkKGRlc3RkaXIpJXMkeDolcyAlc1xuIiwgcHJvZ3Nbbl0sIGZpbGVzW25dLCB1c2luZ1tuXTsKKwkJcHJpbnRmICJcdCVzJChMSU5LKSAtbyAkQCVzICVzXG4iLCBFQ0hPX0xJTkssIGZpbGVzW25dLCBmbGFnc1tuXTsKKwl9CisKKwl9CmRpZmYgLS1naXQgYS90ZXN0L21vZHVsZXMgYi90ZXN0L21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1NTU2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbW9kdWxlcwpAQCAtMCwwICsxLDg5IEBACisjICRJZDogbW9kdWxlcyx2IDEuMzYgMjAwNy8wOC8xOCAxNzo1NzowOCB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CTE5OTctb24KKyMKKyMgVGVzdC1Qcm9ncmFtIG1vZHVsZXMKKworQCBiYXNlCitiYWNrZ3JvdW5kCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2JsdWUJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2JzCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitjYXJkZmlsZQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCS4uL2luY2x1ZGUvcGFuZWwuaCAuLi9pbmNsdWRlL2Zvcm0uaAorY2hnYXQJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2NvbG9yX3NldAlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitkZW1vX2FsdGtleXMJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZGVtb19kZWZrZXkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZGVtb19mb3Jtcwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCS4uL2luY2x1ZGUvZm9ybS5oICQoc3JjZGlyKS9lZGl0X2ZpZWxkLmgKK2RlbW9fa2V5b2sJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZGVtb19tZW51cwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCS4uL2luY2x1ZGUvbWVudS5oCitkZW1vX3BhbmVscwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCS4uL2luY2x1ZGUvcGFuZWwuaAorZGVtb190ZXJtY2FwCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2RpdHRvCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitkb3RzCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitkb3RzX212Y3VyCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2VjaG9jaGFyCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2VkaXRfZmllbGQJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQkkKHNyY2RpcikvZWRpdF9maWVsZC5oCitmaWx0ZXIJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykJLi4vaW5jbHVkZS9mb3JtLmgKK2ZpcmV3b3JrCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2ZpcnN0bGFzdAlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitmb2xka2V5cwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitnZGMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2hhbm9pCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitoYXNodGVzdAlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitpbmNoX3dpZGUJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQoraW5jaHMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2luc193aWRlCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2luc2VydHMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2tleV9uYW1lcwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitrZXluYW1lcwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitrbmlnaHQJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2xydGVzdAkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorbW92ZXdpbmRvdwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCituY3Vyc2VzCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCS4uL2luY2x1ZGUvcGFuZWwuaCAuLi9pbmNsdWRlL21lbnUuaCAuLi9pbmNsdWRlL2Zvcm0uaAorbmV3ZGVtbwkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorcmFpbHJvYWQJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorcmFpbgkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorcmVkcmF3CQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitzYXZlc2NyZWVuCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3RjbG9jawkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGVzdF9hcnJheXMJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGVzdF9nZXRfd3N0cglwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0ZXN0X2dldHN0cglwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0ZXN0X2luc3RyCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3RfaW53c3RyCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3Rfb3BhcXVlCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3RhZGRjaAlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0ZXN0Y3Vycwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0ZXN0c2NhbncJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordmlldwkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQord29ybQkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQoreG1hcwkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorCisjIHZpbGU6bWFrZW1vZGUKZGlmZiAtLWdpdCBhL3Rlc3QvbW92ZXdpbmRvdy5jIGIvdGVzdC9tb3Zld2luZG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyNmU1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbW92ZXdpbmRvdy5jCkBAIC0wLDAgKzEsNjM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogbW92ZXdpbmRvdy5jLHYgMS4yMiAyMDA4LzA0LzEyIDIyOjAxOjQxIHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIG1vdmUgZnVuY3Rpb25zIGZvciB3aW5kb3dzIGFuZCBkZXJpdmVkIHdpbmRvd3MgZnJvbSB0aGUgY3Vyc2VzCisgKiBsaWJyYXJ5LgorICoKKyAqIFRob21hcyBEaWNrZXkgLSAyMDA2LzIvMTEKKyAqLworLyoKK2RlcndpbgorbXZkZXJ3aW4KK3N1YndpbgorbXZ3aW4KKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZmRlZiBIQVZFX1hDVVJTRVMKKyN1bmRlZiBkZXJ3aW4KKyNlbmRpZgorCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjZGVmaW5lIENPTlNUX0ZNVCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgQ09OU1RfRk1UCQkvKiBub3RoaW5nICovCisjZW5kaWYKKworI3VuZGVmIExJTkVfTUFYCisKKyNkZWZpbmUgTElORV9NSU4JMgorI2RlZmluZSBMSU5FX01BWAkoTElORVMgLSAyKQorI2RlZmluZSBDT0xfTUlOCQkyCisjZGVmaW5lIENPTF9NQVgJCShDT0xTIC0gMikKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCB5LCB4OworfSBQQUlSOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV0lORE9XICpwYXJlbnQ7CQkvKiBuZWVkIHRoaXMgc2luY2UgV0lORE9XLT5fcGFyZW50IGlzIG5vdCBwb3J0YWJsZSAqLworICAgIFdJTkRPVyAqY2hpbGQ7CQkvKiB0aGUgYWN0dWFsIHZhbHVlICovCit9IEZSQU1FOworCitzdGF0aWMgdm9pZCBoZWFkX2xpbmUoQ09OU1RfRk1UIGNoYXIgKmZtdCwuLi4pIEdDQ19QUklOVEZMSUtFKDEsIDIpOworc3RhdGljIHZvaWQgdGFpbF9saW5lKENPTlNUX0ZNVCBjaGFyICpmbXQsLi4uKSBHQ0NfUFJJTlRGTElLRSgxLCAyKTsKKworc3RhdGljIHVuc2lnbmVkIG51bV93aW5kb3dzOworc3RhdGljIEZSQU1FICphbGxfd2luZG93czsKKworc3RhdGljIHZvaWQKK21lc3NhZ2UoaW50IGxpbmVubywgQ09OU1RfRk1UIGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdwKQoreworICAgIGludCB5LCB4OworCisgICAgZ2V0eXgoc3Rkc2NyLCB5LCB4KTsKKyAgICBtb3ZlKGxpbmVubywgMCk7CisgICAgY2xydG9lb2woKTsKKworI2lmZGVmIEhBVkVfWENVUlNFUworICAgIHsKKwljaGFyIGJ1ZmZlclsxMDI0XTsKKwl2c3ByaW50ZihidWZmZXIsIGZtdCwgYXJncCk7CisJYWRkc3RyKGJ1ZmZlcik7CisgICAgfQorI2Vsc2UKKyAgICB2d3ByaW50dyhzdGRzY3IsIGZtdCwgYXJncCk7CisjZW5kaWYKKworICAgIG1vdmUoeSwgeCk7CisgICAgcmVmcmVzaCgpOworfQorCitzdGF0aWMgdm9pZAoraGVhZF9saW5lKENPTlNUX0ZNVCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgbWVzc2FnZSgwLCBmbXQsIGFyZ3ApOworICAgIHZhX2VuZChhcmdwKTsKK30KKworc3RhdGljIHZvaWQKK3RhaWxfbGluZShDT05TVF9GTVQgY2hhciAqZm10LC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3A7CisKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIG1lc3NhZ2UoTElORVMgLSAxLCBmbXQsIGFyZ3ApOworICAgIHZhX2VuZChhcmdwKTsKK30KKworLyoKKyAqIEFycm93IGtleXMgbW92ZSBjdXJzb3IsIHJldHVybiBsb2NhdGlvbiBhdCBjdXJyZW50IG9uIG5vbi1hcnJvdyBrZXkuCisgKi8KK3N0YXRpYyBQQUlSICoKK3NlbGVjdGNlbGwoV0lORE9XICpwYXJlbnQsIGludCB1bGksIGludCB1bGosIGludCBscmksIGludCBscmopCit7CisgICAgc3RhdGljIFBBSVIgcmVzOwkJLyogcmVzdWx0IGNlbGwgKi8KKyAgICBpbnQgc2kgPSBscmkgLSB1bGkgKyAxOwkvKiBkZXB0aCBvZiB0aGUgc2VsZWN0IGFyZWEgKi8KKyAgICBpbnQgc2ogPSBscmogLSB1bGogKyAxOwkvKiB3aWR0aCBvZiB0aGUgc2VsZWN0IGFyZWEgKi8KKyAgICBpbnQgaSA9IDAsIGogPSAwOwkJLyogb2Zmc2V0cyBpbnRvIHRoZSBzZWxlY3QgYXJlYSAqLworCisgICAgcmVzLnkgPSB1bGk7CisgICAgcmVzLnggPSB1bGo7CisgICAgZm9yICg7OykgeworCXRhaWxfbGluZSgiVXBwZXIgbGVmdCBbJTJkLCUyZF0gTG93ZXIgcmlnaHQgWyUyZCwlMmRdIC0+ICVkLCVkIiwKKwkJICB1bGksIHVsaiwKKwkJICBscmksIGxyaiwKKwkJICB1bGkgKyBpLCB1bGogKyBqKTsKKwl3bW92ZShwYXJlbnQsIHVsaSArIGksIHVsaiArIGopOworCisJc3dpdGNoICh3Z2V0Y2gocGFyZW50KSkgeworCWNhc2UgS0VZX1VQOgorCSAgICBpICs9IHNpIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaSsrOworCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCSAgICBqICs9IHNqIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUklHSFQ6CisJICAgIGorKzsKKwkgICAgYnJlYWs7CisJY2FzZSBRVUlUOgorCWNhc2UgRVNDQVBFOgorCSAgICByZXR1cm4gKChQQUlSICopIDApOworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorCWNhc2UgS0VZX01PVVNFOgorCSAgICB7CisJCU1FVkVOVCBldmVudDsKKworCQlnZXRtb3VzZSgmZXZlbnQpOworCQlpZiAoZXZlbnQueSA+IHVsaSAmJiBldmVudC54ID4gdWxqKSB7CisJCSAgICBpID0gZXZlbnQueSAtIHVsaTsKKwkJICAgIGogPSBldmVudC54IC0gdWxqOworCQl9IGVsc2UgeworCQkgICAgYmVlcCgpOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICAvKiBGQUxMVEhSVSAqLworI2VuZGlmCisJZGVmYXVsdDoKKwkgICAgcmVzLnkgPSB1bGkgKyBpOworCSAgICByZXMueCA9IHVsaiArIGo7CisJICAgIHJldHVybiAoJnJlcyk7CisJfQorCWkgJT0gc2k7CisJaiAlPSBzajsKKyAgICB9Cit9CisKKy8qCisgKiBBc2sgdXNlciBmb3IgYSB3aW5kb3cgZGVmaW5pdGlvbi4KKyAqLworc3RhdGljIGJvb2wKK2dldHdpbmRvdyhXSU5ET1cgKnBhcmVudCwgUEFJUiAqIHVsLCBQQUlSICogbHIpCit7CisgICAgaW50IG1pbl9jb2wgPSAocGFyZW50ID09IHN0ZHNjcikgPyBDT0xfTUlOIDogMDsKKyAgICBpbnQgbWF4X2NvbCA9IChwYXJlbnQgPT0gc3Rkc2NyKSA/IENPTF9NQVggOiBnZXRtYXh4KHBhcmVudCk7CisgICAgaW50IG1pbl9saW5lID0gKHBhcmVudCA9PSBzdGRzY3IpID8gTElORV9NSU4gOiAwOworICAgIGludCBtYXhfbGluZSA9IChwYXJlbnQgPT0gc3Rkc2NyKSA/IExJTkVfTUFYIDogZ2V0bWF4eShwYXJlbnQpOworICAgIFBBSVIgKnRtcDsKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaGVhZF9saW5lKCJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgY29ybmVyIDEiKTsKKyAgICBpZiAoKHRtcCA9IHNlbGVjdGNlbGwocGFyZW50LCBtaW5fbGluZSwgbWluX2NvbCwgbWF4X2xpbmUsIG1heF9jb2wpKSAhPSAwKSB7CisJKnVsID0gKnRtcDsKKwltdndhZGRjaChwYXJlbnQsIHVsLT55LCB1bC0+eCwgJyonKTsKKworCWhlYWRfbGluZSgiVXNlIGFycm93cyB0byBtb3ZlIGN1cnNvciwgYW55dGhpbmcgZWxzZSB0byBtYXJrIGNvcm5lciAyIik7CisJaWYgKCh0bXAgPSBzZWxlY3RjZWxsKHBhcmVudCwgdWwtPnksIHVsLT54LCBtYXhfbGluZSwgbWF4X2NvbCkpICE9IDApIHsKKwkgICAgKmxyID0gKnRtcDsKKwkgICAgbXZ3YWRkY2gocGFyZW50LCBsci0+eSwgbHItPngsICcqJyk7CisJICAgIHdtb3ZlKHBhcmVudCwgbHItPnksIGxyLT54KTsKKwkgICAgd3N5bmNkb3duKHBhcmVudCk7CisJICAgIHdyZWZyZXNoKHBhcmVudCk7CisJICAgIHJlc3VsdCA9IChsci0+eSAhPSB1bC0+eSAmJiBsci0+eCAhPSB1bC0+eCk7CisJfQorICAgIH0KKyAgICBoZWFkX2xpbmUoImRvbmUiKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRHJhdyBhIGJveCBpbnNpZGUgdGhlIGdpdmVuIHdpbmRvdy4KKyAqLworc3RhdGljIHZvaWQKK2JveF9pbnNpZGUoV0lORE9XICp3aW4pCit7CisgICAgaW50IHkwLCB4MDsKKyAgICBpbnQgeTEsIHgxOworCisgICAgZ2V0eXgod2luLCB5MCwgeDApOworICAgIGdldG1heHl4KHdpbiwgeTEsIHgxKTsKKworICAgIG12d2hsaW5lKHdpbiwgMCwgMCwgQUNTX0hMSU5FLCB4MSk7CisgICAgbXZ3aGxpbmUod2luLCB5MSAtIDEsIDAsIEFDU19ITElORSwgeDEpOworCisgICAgbXZ3dmxpbmUod2luLCAwLCAwLCBBQ1NfVkxJTkUsIHkxKTsKKyAgICBtdnd2bGluZSh3aW4sIDAsIHgxIC0gMSwgQUNTX1ZMSU5FLCB5MSk7CisKKyAgICBtdndhZGRjaCh3aW4sIDAsIDAsIEFDU19VTENPUk5FUik7CisgICAgbXZ3YWRkY2god2luLCB5MSAtIDEsIDAsIEFDU19MTENPUk5FUik7CisgICAgbXZ3YWRkY2god2luLCAwLCB4MSAtIDEsIEFDU19VUkNPUk5FUik7CisgICAgbXZ3YWRkY2god2luLCB5MSAtIDEsIHgxIC0gMSwgQUNTX0xSQ09STkVSKTsKKworICAgIHdzeW5jZG93bih3aW4pOworICAgIHdtb3ZlKHdpbiwgeTAsIHgwKTsKKyAgICB3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogQWRkIGEgd2luZG93IHRvIG91ciBsaXN0LgorICovCitzdGF0aWMgdm9pZAorYWRkX3dpbmRvdyhXSU5ET1cgKnBhcmVudCwgV0lORE9XICpjaGlsZCkKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgaGF2ZSA9IDA7CisgICAgdW5zaWduZWQgbmVlZCA9ICgobnVtX3dpbmRvd3MgKyAxKSB8IDMxKSArIDE7CisKKyAgICBrZXlwYWQoY2hpbGQsIFRSVUUpOworICAgIGlmIChuZWVkID4gaGF2ZSkgeworCWFsbF93aW5kb3dzID0gdHlwZVJlYWxsb2MoRlJBTUUsIG5lZWQsIGFsbF93aW5kb3dzKTsKKyAgICB9CisgICAgYWxsX3dpbmRvd3NbbnVtX3dpbmRvd3NdLnBhcmVudCA9IHBhcmVudDsKKyAgICBhbGxfd2luZG93c1tudW1fd2luZG93c10uY2hpbGQgPSBjaGlsZDsKKyAgICBudW1fd2luZG93cysrOworfQorCitzdGF0aWMgaW50Cit3aW5kb3cybnVtKFdJTkRPVyAqd2luKQoreworICAgIGludCBuOworICAgIGludCByZXN1bHQgPSAtMTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgKGludCkgbnVtX3dpbmRvd3M7ICsrbikgeworCWlmICh3aW4gPT0gYWxsX3dpbmRvd3Nbbl0uY2hpbGQpIHsKKwkgICAgcmVzdWx0ID0gbjsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV0lORE9XICoKK3BhcmVudF9vZihXSU5ET1cgKndpbikKK3sKKyAgICBXSU5ET1cgKnJlc3VsdCA9IDA7CisgICAgaW50IG4gPSB3aW5kb3cybnVtKHdpbik7CisgICAgaWYgKG4gPj0gMCkKKwlyZXN1bHQgPSBhbGxfd2luZG93c1tuXS5wYXJlbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3JlcGFpbnRfb25lKFdJTkRPVyAqd2luKQoreworICAgIHRvdWNod2luKHdpbik7CisgICAgd25vdXRyZWZyZXNoKHdpbik7Cit9CisKK3N0YXRpYyB2b2lkCityZWZyZXNoX2FsbChXSU5ET1cgKndpbikKK3sKKyAgICB1bnNpZ25lZCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IG51bV93aW5kb3dzOyArK24pIHsKKwlpZiAoYWxsX3dpbmRvd3Nbbl0uY2hpbGQgIT0gd2luKSB7CisJICAgIHJlcGFpbnRfb25lKGFsbF93aW5kb3dzW25dLmNoaWxkKTsKKwl9CisgICAgfQorCisgICAgcmVwYWludF9vbmUod2luKTsKKyAgICBkb3VwZGF0ZSgpOworfQorCitzdGF0aWMgV0lORE9XICoKK25leHRfd2luZG93KFdJTkRPVyAqd2luKQoreworICAgIFdJTkRPVyAqcmVzdWx0ID0gd2luOworICAgIGludCBuID0gd2luZG93Mm51bSh3aW4pOworCisgICAgaWYgKG4rKyA+PSAwKSB7CisJcmVzdWx0ID0gYWxsX3dpbmRvd3NbbiAlIG51bV93aW5kb3dzXS5jaGlsZDsKKwl3bW92ZShyZXN1bHQsIDAsIDApOworCXdyZWZyZXNoKHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXSU5ET1cgKgorcHJldl93aW5kb3coV0lORE9XICp3aW4pCit7CisgICAgV0lORE9XICpyZXN1bHQgPSB3aW47CisgICAgaW50IG4gPSB3aW5kb3cybnVtKHdpbik7CisKKyAgICBpZiAobi0tID49IDApIHsKKwlpZiAobiA8IDApCisJICAgIG4gPSBudW1fd2luZG93cyAtIDE7CisJcmVzdWx0ID0gYWxsX3dpbmRvd3NbbiAlIG51bV93aW5kb3dzXS5jaGlsZDsKKwl3bW92ZShyZXN1bHQsIDAsIDApOworCXdyZWZyZXNoKHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCityZWN1cl9tb3ZlX3dpbmRvdyhXSU5ET1cgKnBhcmVudCwgaW50IGR5LCBpbnQgZHgpCit7CisgICAgdW5zaWduZWQgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBudW1fd2luZG93czsgKytuKSB7CisJaWYgKGFsbF93aW5kb3dzW25dLnBhcmVudCA9PSBwYXJlbnQpIHsKKwkgICAgaW50IHkwLCB4MDsKKworCSAgICBnZXRiZWd5eChhbGxfd2luZG93c1tuXS5jaGlsZCwgeTAsIHgwKTsKKwkgICAgbXZ3aW4oYWxsX3dpbmRvd3Nbbl0uY2hpbGQsIHkwICsgZHksIHgwICsgZHgpOworCSAgICByZWN1cl9tb3ZlX3dpbmRvdyhhbGxfd2luZG93c1tuXS5jaGlsZCwgZHksIGR4KTsKKwl9CisgICAgfQorfQorCisvKgorICogdGVzdCBtdndpbigpLgorICovCitzdGF0aWMgYm9vbAorbW92ZV93aW5kb3coV0lORE9XICp3aW4sIGJvb2wgcmVjdXIpCit7CisgICAgV0lORE9XICpwYXJlbnQgPSBwYXJlbnRfb2Yod2luKTsKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKHBhcmVudCAhPSAwKSB7CisJYm9vbCB0b3AgPSAocGFyZW50ID09IHN0ZHNjcik7CisJaW50IG1pbl9jb2wgPSB0b3AgPyBDT0xfTUlOIDogMDsKKwlpbnQgbWF4X2NvbCA9IHRvcCA/IENPTF9NQVggOiBnZXRtYXh4KHBhcmVudCk7CisJaW50IG1pbl9saW5lID0gdG9wID8gTElORV9NSU4gOiAwOworCWludCBtYXhfbGluZSA9IHRvcCA/IExJTkVfTUFYIDogZ2V0bWF4eShwYXJlbnQpOworCVBBSVIgKnRtcDsKKworCWhlYWRfbGluZSgiU2VsZWN0IG5ldyBwb3NpdGlvbiBmb3IgJXN3aW5kb3ciLCB0b3AgPyAiIiA6ICJzdWIiKTsKKworCWlmICgodG1wID0gc2VsZWN0Y2VsbChwYXJlbnQsCisJCQkgICAgICBtaW5fbGluZSwgbWluX2NvbCwKKwkJCSAgICAgIG1heF9saW5lLCBtYXhfY29sKSkgIT0gMCkgeworCSAgICBpbnQgeTAsIHgwOworCSAgICBnZXRiZWd5eChwYXJlbnQsIHkwLCB4MCk7CisJICAgIC8qCisJICAgICAqIE5vdGU6ICBNb3ZpbmcgYSBzdWJ3aW5kb3cgaGFzIHRoZSBlZmZlY3Qgb2YgbW92aW5nIGEgdmlld3BvcnQKKwkgICAgICogYXJvdW5kIHRoZSBzY3JlZW4uICBUaGUgcGFyZW50IHdpbmRvdyByZXRhaW5zIHRoZSBjb250ZW50cyBvZgorCSAgICAgKiB0aGUgc3Vid2luZG93IGluIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiwgYnV0IHRoZSB2aWV3cG9ydCB3aWxsCisJICAgICAqIHNob3cgdGhlIGNvbnRlbnRzIChhZ2FpbikgYXQgdGhlIG5ldyBsb2NhdGlvbi4gIFNvIGl0IHdpbGwgbG9vaworCSAgICAgKiBvZGQgd2hlbiB0ZXN0aW5nLgorCSAgICAgKi8KKwkgICAgaWYgKG12d2luKHdpbiwgeTAgKyB0bXAtPnksIHgwICsgdG1wLT54KSAhPSBFUlIpIHsKKwkJaWYgKHJlY3VyKSB7CisJCSAgICByZWN1cl9tb3ZlX3dpbmRvdyh3aW4sIHRtcC0+eSwgdG1wLT54KTsKKwkJfQorCQlyZWZyZXNoX2FsbCh3aW4pOworCQlkb3VwZGF0ZSgpOworCQlyZXN1bHQgPSBUUlVFOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogdGVzdCBtdmRlcndpbigpLgorICovCitzdGF0aWMgYm9vbAorbW92ZV9zdWJ3aW4oV0lORE9XICp3aW4pCit7CisgICAgV0lORE9XICpwYXJlbnQgPSBwYXJlbnRfb2Yod2luKTsKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKHBhcmVudCAhPSAwKSB7CisJYm9vbCB0b3AgPSAocGFyZW50ID09IHN0ZHNjcik7CisJaWYgKCF0b3ApIHsKKwkgICAgaW50IG1pbl9jb2wgPSB0b3AgPyBDT0xfTUlOIDogMDsKKwkgICAgaW50IG1heF9jb2wgPSB0b3AgPyBDT0xfTUFYIDogZ2V0bWF4eChwYXJlbnQpOworCSAgICBpbnQgbWluX2xpbmUgPSB0b3AgPyBMSU5FX01JTiA6IDA7CisJICAgIGludCBtYXhfbGluZSA9IHRvcCA/IExJTkVfTUFYIDogZ2V0bWF4eShwYXJlbnQpOworCSAgICBQQUlSICp0bXA7CisKKwkgICAgaGVhZF9saW5lKCJTZWxlY3QgbmV3IHBvc2l0aW9uIGZvciBzdWJ3aW5kb3ciKTsKKworCSAgICBpZiAoKHRtcCA9IHNlbGVjdGNlbGwocGFyZW50LAorCQkJCSAgbWluX2xpbmUsIG1pbl9jb2wsCisJCQkJICBtYXhfbGluZSwgbWF4X2NvbCkpICE9IDApIHsKKwkJaW50IHkwLCB4MDsKKwkJZ2V0YmVneXgocGFyZW50LCB5MCwgeDApOworCQlpZiAobXZkZXJ3aW4od2luLCB5MCArIHRtcC0+eSwgeDAgKyB0bXAtPngpICE9IEVSUikgeworCQkgICAgcmVmcmVzaF9hbGwod2luKTsKKwkJICAgIGRvdXBkYXRlKCk7CisJCSAgICByZXN1bHQgPSBUUlVFOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwgY2h0eXBlIGNoKQoreworICAgIGludCB5LCB4OworICAgIGludCB5MCwgeDA7CisgICAgaW50IHkxLCB4MTsKKworICAgIGdldHl4KHdpbiwgeTAsIHgwKTsKKyAgICBnZXRtYXh5eCh3aW4sIHkxLCB4MSk7CisgICAgZm9yICh5ID0gMDsgeSA8IHkxOyArK3kpIHsKKwlmb3IgKHggPSAwOyB4IDwgeDE7ICsreCkgeworCSAgICBtdndhZGRjaCh3aW4sIHksIHgsIGNoKTsKKwl9CisgICAgfQorICAgIHdzeW5jZG93bih3aW4pOworICAgIHdtb3ZlKHdpbiwgeTAsIHgwKTsKKyAgICB3cmVmcmVzaCh3aW4pOworfQorCisjZGVmaW5lIGxpbmVzX29mKHVsLGxyKQkobHIueSAtIHVsLnkgKyAxKQorI2RlZmluZSBjb2xzX29mKHVsLGxyKQkobHIueCAtIHVsLnggKyAxKQorI2RlZmluZSBwYWlyX29mKHVsKQl1bC55LCB1bC54CisKK3N0YXRpYyBXSU5ET1cgKgorY3JlYXRlX215X3dpbmRvdyhXSU5ET1cgKmN1cnJlbnQpCit7CisgICAgUEFJUiB1bCwgbHI7CisgICAgV0lORE9XICpyZXN1bHQgPSAwOworCisgICAgaWYgKGdldHdpbmRvdyhzdGRzY3IsICZ1bCwgJmxyKSkgeworCXJlc3VsdCA9IG5ld3dpbihsaW5lc19vZih1bCwgbHIpLCBjb2xzX29mKHVsLCBsciksIHBhaXJfb2YodWwpKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkgICAgZmlsbF93aW5kb3cocmVzdWx0LCAnYycpOworCSAgICBhZGRfd2luZG93KHN0ZHNjciwgcmVzdWx0KTsKKwl9CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gMCkKKwlyZXN1bHQgPSBjdXJyZW50OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXSU5ET1cgKgorY3JlYXRlX215X2RlcndpbihXSU5ET1cgKnBhcmVudCkKK3sKKyAgICBQQUlSIHVsLCBscjsKKyAgICBXSU5ET1cgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoZ2V0d2luZG93KHBhcmVudCwgJnVsLCAmbHIpKSB7CisJcmVzdWx0ID0gZGVyd2luKHBhcmVudCwgbGluZXNfb2YodWwsIGxyKSwgY29sc19vZih1bCwgbHIpLCBwYWlyX29mKHVsKSk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJICAgIGZpbGxfd2luZG93KHJlc3VsdCwgJ2QnKTsKKwkgICAgYWRkX3dpbmRvdyhwYXJlbnQsIHJlc3VsdCk7CisJfQorICAgIH0KKyAgICBpZiAocmVzdWx0ID09IDApCisJcmVzdWx0ID0gcGFyZW50OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXSU5ET1cgKgorY3JlYXRlX215X3N1YndpbihXSU5ET1cgKnBhcmVudCkKK3sKKyAgICBQQUlSIHVsLCBscjsKKyAgICBXSU5ET1cgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoZ2V0d2luZG93KHBhcmVudCwgJnVsLCAmbHIpKSB7CisJcmVzdWx0ID0gc3Vid2luKHBhcmVudCwKKwkJCWxpbmVzX29mKHVsLCBsciksCisJCQljb2xzX29mKHVsLCBsciksCisJCQl1bC55ICsgZ2V0YmVneShwYXJlbnQpLAorCQkJdWwueCArIGdldGJlZ3gocGFyZW50KSk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJICAgIGZpbGxfd2luZG93KHJlc3VsdCwgJ3MnKTsKKwkgICAgYWRkX3dpbmRvdyhwYXJlbnQsIHJlc3VsdCk7CisJfQorICAgIH0KKyAgICBpZiAocmVzdWx0ID09IDApCisJcmVzdWx0ID0gcGFyZW50OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2hlbHAoV0lORE9XICpjdXJyZW50KQoreworICAgIC8qICpJTkRFTlQtT0ZGKiAqLworICAgIHN0YXRpYyBzdHJ1Y3QgeworCWludAlrZXk7CisJQ09OU1RfRk1UIGNoYXIgKiBtc2c7CisgICAgfSBoZWxwW10gPSB7CisJeyAnPycsCQkiU2hvdyB0aGlzIHNjcmVlbiIgfSwKKwl7ICdiJywJCSJEcmF3IGEgYm94IGluc2lkZSB0aGUgY3VycmVudCB3aW5kb3ciIH0sCisJeyAnYycsCQkiQ3JlYXRlIGEgbmV3IHdpbmRvdyIgfSwKKwl7ICdkJywJCSJDcmVhdGUgYSBuZXcgZGVyaXZlZCB3aW5kb3ciIH0sCisJeyAnZicsCQkiRmlsbCB0aGUgY3VycmVudCB3aW5kb3cgd2l0aCB0aGUgbmV4dCBjaGFyYWN0ZXIiIH0sCisJeyAnbScsCQkiTW92ZSB0aGUgY3VycmVudCB3aW5kb3ciIH0sCisJeyAnTScsCQkiTW92ZSB0aGUgY3VycmVudCB3aW5kb3cgKGFuZCBpdHMgY2hpbGRyZW4pIiB9LAorCXsgJ3EnLAkJIlF1aXQiIH0sCisJeyAncycsCQkiQ3JlYXRlIGEgbmV3IHN1YndpbmRvdyIgfSwKKwl7ICd0JywJCSJNb3ZlIHRoZSBjdXJyZW50IHN1YndpbmRvdyAobW92ZXMgY29udGVudCkiIH0sCisJeyBDVFJMKCdMJyksCSJSZXBhaW50IGFsbCB3aW5kb3dzLCBkb2luZyBjdXJyZW50IG9uZSBsYXN0IiB9LAorCXsgQ1RSTCgnTicpLAkiQ3Vyc29yIHRvIG5leHQgd2luZG93IiB9LAorCXsgQ1RSTCgnUCcpLAkiQ3Vyc29yIHRvIHByZXZpb3VzIHdpbmRvdyIgfSwKKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICBXSU5ET1cgKm15d2luID0gbmV3d2luKExJTkVTLCBDT0xTLCAwLCAwKTsKKyAgICBpbnQgcm93OworCisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBMSU5FUyAtIDIgJiYgcm93IDwgKGludCkgU0laRU9GKGhlbHApOyArK3JvdykgeworCXdtb3ZlKG15d2luLCByb3cgKyAxLCAxKTsKKwl3cHJpbnR3KG15d2luLCAiJXMiLCBrZXluYW1lKGhlbHBbcm93XS5rZXkpKTsKKwl3bW92ZShteXdpbiwgcm93ICsgMSwgMjApOworCXdwcmludHcobXl3aW4sICIlcyIsIGhlbHBbcm93XS5tc2cpOworICAgIH0KKyAgICBib3hfaW5zaWRlKG15d2luKTsKKyAgICB3bW92ZShteXdpbiwgMSwgMSk7CisgICAgd2dldGNoKG15d2luKTsKKyAgICBkZWx3aW4obXl3aW4pOworICAgIHJlZnJlc2hfYWxsKGN1cnJlbnQpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBXSU5ET1cgKmN1cnJlbnRfd2luOworICAgIGludCBjaDsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKyAgICBub25sKCk7CisgICAgaW50cmZsdXNoKHN0ZHNjciwgRkFMU0UpOworCisgICAgYWRkX3dpbmRvdygwLCBjdXJyZW50X3dpbiA9IHN0ZHNjcik7CisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICAodm9pZCkgbW91c2VtYXNrKEJVVFRPTjFfQ0xJQ0tFRCwgKG1tYXNrX3QgKikgTlVMTCk7CisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisKKyAgICB3aGlsZSAoIWRvbmUgJiYgKGNoID0gd2dldGNoKGN1cnJlbnRfd2luKSkgIT0gRVJSKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgJz8nOgorCSAgICBzaG93X2hlbHAoY3VycmVudF93aW4pOworCSAgICBicmVhazsKKwljYXNlICdiJzoKKwkgICAgYm94X2luc2lkZShjdXJyZW50X3dpbik7CisJICAgIGJyZWFrOworCWNhc2UgJ2MnOgorCSAgICBjdXJyZW50X3dpbiA9IGNyZWF0ZV9teV93aW5kb3coY3VycmVudF93aW4pOworCSAgICBicmVhazsKKwljYXNlICdkJzoKKwkgICAgY3VycmVudF93aW4gPSBjcmVhdGVfbXlfZGVyd2luKGN1cnJlbnRfd2luKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnZic6CisJICAgIGZpbGxfd2luZG93KGN1cnJlbnRfd2luLCAoY2h0eXBlKSB3Z2V0Y2goY3VycmVudF93aW4pKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbSc6CisJY2FzZSAnTSc6CisJICAgIGlmICghbW92ZV93aW5kb3coY3VycmVudF93aW4sIChjaCA9PSAnTScpKSkgeworCQl0YWlsX2xpbmUoImVycm9yIik7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJ3EnOgorCSAgICBkb25lID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncyc6CisJICAgIGN1cnJlbnRfd2luID0gY3JlYXRlX215X3N1YndpbihjdXJyZW50X3dpbik7CisJICAgIGJyZWFrOworCWNhc2UgJ3QnOgorCSAgICBpZiAoIW1vdmVfc3Vid2luKGN1cnJlbnRfd2luKSkgeworCQl0YWlsX2xpbmUoImVycm9yIik7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnTCcpOgorCSAgICByZWZyZXNoX2FsbChjdXJyZW50X3dpbik7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnTicpOgorCSAgICBjdXJyZW50X3dpbiA9IG5leHRfd2luZG93KGN1cnJlbnRfd2luKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdQJyk6CisJICAgIGN1cnJlbnRfd2luID0gcHJldl93aW5kb3coY3VycmVudF93aW4pOworCSAgICBicmVhazsKKyNpZiAwCisJICAgIC8qIHdhbnQgdG8gYWxsb3cgY3Vyc29yIHRvIG1vdmUgYXJvdW5kIHRoZSBjdXJyZW50IHdpbmRvdyB0b28gKi8KKwkgICAgLyogd2FudCB0byB0ZXN0IHRoZSByZXNpemluZyBvZiB3aW5kb3dzIGFuZCBzdWJ3aW5kb3dzIHRvbyAqLworCSAgICAvKiB3YW50IHRvIGFsbG93IGRlbGV0aW5nIGEgd2luZG93IGFsc28gKi8KKyNlbmRpZgorCWRlZmF1bHQ6CisJICAgIHRhaWxfbGluZSgidW5yZWNvZ25pemVkIGtleSAodXNlICc/JyBmb3IgaGVscCkiKTsKKwkgICAgYmVlcCgpOworCSAgICBjb250aW51ZTsKKwl9CisJdGFpbF9saW5lKCJzaXplIFslZCwlZF0gYmVnaW4gWyVkLCVkXSBwYXJlbnQgWyVkLCVkXSIsCisJCSAgZ2V0bWF4eShjdXJyZW50X3dpbiksCisJCSAgZ2V0bWF4eChjdXJyZW50X3dpbiksCisJCSAgZ2V0YmVneShjdXJyZW50X3dpbiksCisJCSAgZ2V0YmVneChjdXJyZW50X3dpbiksCisJCSAgZ2V0cGFyeShjdXJyZW50X3dpbiksCisJCSAgZ2V0cGFyeChjdXJyZW50X3dpbikpOworCXdtb3ZlKGN1cnJlbnRfd2luLCAwLCAwKTsKKyAgICB9CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvbmN1cnNlcy5jIGIvdGVzdC9uY3Vyc2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkN2RmYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbmN1cnNlcy5jCkBAIC0wLDAgKzEsNjU3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK05BTUUKKyAgIG5jdXJzZXMuYyAtLS0gbmN1cnNlcyBsaWJyYXJ5IGV4ZXJjaXNlcgorCitTWU5PUFNJUworICAgbmN1cnNlcworCitERVNDUklQVElPTgorICAgQW4gaW50ZXJhY3RpdmUgdGVzdCBtb2R1bGUgZm9yIHRoZSBuY3Vyc2VzIGxpYnJhcnkuCisKK0FVVEhPUgorICAgQXV0aG9yOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gMTk5MworICAgICAgICAgICBUaG9tYXMgRS4gRGlja2V5IChiZWdpbm5pbmcgcmV2aXNpb24gMS4yNyBpbiAxOTk2KS4KKworJElkOiBuY3Vyc2VzLmMsdiAxLjMyOSAyMDA4LzA5LzI3IDE0OjM0OjU4IHRvbSBFeHAgJAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmZGVmIF9faHB1eAorI3VuZGVmIG12d2RlbGNoCQkJLyogSFBVWCAxMS4yMyBtYWNybyB3aWxsIG5vdCBjb21waWxlICovCisjZW5kaWYKKworI2lmIEhBVkVfR0VUVElNRU9GREFZCisjaWYgSEFWRV9TWVNfVElNRV9IICYmIEhBVkVfU1lTX1RJTUVfU0VMRUNUCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisjZW5kaWYKKworI2lmIFVTRV9MSUJQQU5FTAorI2luY2x1ZGUgPHBhbmVsLmg+CisjZW5kaWYKKworI2lmIFVTRV9MSUJNRU5VCisjaW5jbHVkZSA8bWVudS5oPgorI2VuZGlmCisKKyNpZiBVU0VfTElCRk9STQorI2luY2x1ZGUgPGZvcm0uaD4KKyNlbmRpZgorCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisKKyNkZWZpbmUgTkNVUlNFU19DT05TVF9QQVJBTSBjb25zdCB2b2lkCisKKyNpZmRlZiBUUkFDRQorc3RhdGljIHVuc2lnbmVkIHNhdmVfdHJhY2UgPSBUUkFDRV9PUkRJTkFSWSB8IFRSQUNFX0lDQUxMUyB8IFRSQUNFX0NBTExTOworZXh0ZXJuIHVuc2lnbmVkIF9uY190cmFjaW5nOworI2VuZGlmCisKKyNlbHNlCisKKyNkZWZpbmUgTkNVUlNFU19DT05TVF9QQVJBTSBjaGFyCisKKyNkZWZpbmUgbW1hc2tfdCBjaHR5cGUJCS8qIG5vdCBzcGVjaWZpZWQgaW4gWFNJICovCisKKyNpZm5kZWYgQUNTX1MzCisjaWZkZWYgQ1VSU0VTX0FDU19BUlJBWQorI2RlZmluZSBBQ1NfUzMgICAgICAgICAgKENVUlNFU19BQ1NfQVJSQVlbJ3AnXSkJCS8qIHNjYW4gbGluZSAzICovCisjZGVmaW5lIEFDU19TNyAgICAgICAgICAoQ1VSU0VTX0FDU19BUlJBWVsnciddKQkJLyogc2NhbiBsaW5lIDcgKi8KKyNkZWZpbmUgQUNTX0xFUVVBTCAgICAgIChDVVJTRVNfQUNTX0FSUkFZWyd5J10pCQkvKiBsZXNzL2VxdWFsICovCisjZGVmaW5lIEFDU19HRVFVQUwgICAgICAoQ1VSU0VTX0FDU19BUlJBWVsneiddKQkJLyogZ3JlYXRlci9lcXVhbCAqLworI2RlZmluZSBBQ1NfUEkgICAgICAgICAgKENVUlNFU19BQ1NfQVJSQVlbJ3snXSkJCS8qIFBpICovCisjZGVmaW5lIEFDU19ORVFVQUwgICAgICAoQ1VSU0VTX0FDU19BUlJBWVsnfCddKQkJLyogbm90IGVxdWFsICovCisjZGVmaW5lIEFDU19TVEVSTElORyAgICAoQ1VSU0VTX0FDU19BUlJBWVsnfSddKQkJLyogVUsgcG91bmQgc2lnbiAqLworI2Vsc2UKKyNkZWZpbmUgQUNTX1MzICAgICAgICAgIChBX0FMVENIQVJTRVQgKyAncCcpCS8qIHNjYW4gbGluZSAzICovCisjZGVmaW5lIEFDU19TNyAgICAgICAgICAoQV9BTFRDSEFSU0VUICsgJ3InKQkvKiBzY2FuIGxpbmUgNyAqLworI2RlZmluZSBBQ1NfTEVRVUFMICAgICAgKEFfQUxUQ0hBUlNFVCArICd5JykJLyogbGVzcy9lcXVhbCAqLworI2RlZmluZSBBQ1NfR0VRVUFMICAgICAgKEFfQUxUQ0hBUlNFVCArICd6JykJLyogZ3JlYXRlci9lcXVhbCAqLworI2RlZmluZSBBQ1NfUEkgICAgICAgICAgKEFfQUxUQ0hBUlNFVCArICd7JykJLyogUGkgKi8KKyNkZWZpbmUgQUNTX05FUVVBTCAgICAgIChBX0FMVENIQVJTRVQgKyAnfCcpCS8qIG5vdCBlcXVhbCAqLworI2RlZmluZSBBQ1NfU1RFUkxJTkcgICAgKEFfQUxUQ0hBUlNFVCArICd9JykJLyogVUsgcG91bmQgc2lnbiAqLworI2VuZGlmCisjZW5kaWYgLyogQUNTX1MzICovCisKKyNpZmRlZiBDVVJTRVNfV0FDU19BUlJBWQorI2RlZmluZSBXQUNTX1MzICAgICAgICAgKCYoQ1VSU0VTX1dBQ1NfQVJSQVlbJ3AnXSkpCS8qIHNjYW4gbGluZSAzICovCisjZGVmaW5lIFdBQ1NfUzcgICAgICAgICAoJihDVVJTRVNfV0FDU19BUlJBWVsnciddKSkJLyogc2NhbiBsaW5lIDcgKi8KKyNkZWZpbmUgV0FDU19MRVFVQUwgICAgICgmKENVUlNFU19XQUNTX0FSUkFZWyd5J10pKQkvKiBsZXNzL2VxdWFsICovCisjZGVmaW5lIFdBQ1NfR0VRVUFMICAgICAoJihDVVJTRVNfV0FDU19BUlJBWVsneiddKSkJLyogZ3JlYXRlci9lcXVhbCAqLworI2RlZmluZSBXQUNTX1BJICAgICAgICAgKCYoQ1VSU0VTX1dBQ1NfQVJSQVlbJ3snXSkpCS8qIFBpICovCisjZGVmaW5lIFdBQ1NfTkVRVUFMICAgICAoJihDVVJTRVNfV0FDU19BUlJBWVsnfCddKSkJLyogbm90IGVxdWFsICovCisjZGVmaW5lIFdBQ1NfU1RFUkxJTkcgICAoJihDVVJTRVNfV0FDU19BUlJBWVsnfSddKSkJLyogVUsgcG91bmQgc2lnbiAqLworI2VuZGlmCisKKyNlbmRpZgorCisjaWYgSEFWRV9XQ1NSVE9NQlMKKyNkZWZpbmUgY291bnRfd2NoYXJzKHNyYywgbGVuLCBzdGF0ZSkgICAgICB3Y3NydG9tYnMoMCwgICAmc3JjLCBsZW4sIHN0YXRlKQorI2RlZmluZSB0cmFuc193Y2hhcnMoZHN0LCBzcmMsIGxlbiwgc3RhdGUpIHdjc3J0b21icyhkc3QsICZzcmMsIGxlbiwgc3RhdGUpCisjZGVmaW5lIHJlc2V0X3djaGFycyhzdGF0ZSkgbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSkKKyNlbGlmIEhBVkVfV0NTVE9NQlMgJiYgSEFWRV9NQlRPV0MgJiYgSEFWRV9NQkxFTgorI2RlZmluZSBjb3VudF93Y2hhcnMoc3JjLCBsZW4sIHN0YXRlKSAgICAgIHdjc3RvbWJzKDAsICAgc3JjLCBsZW4pCisjZGVmaW5lIHRyYW5zX3djaGFycyhkc3QsIHNyYywgbGVuLCBzdGF0ZSkgd2NzdG9tYnMoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgcmVzZXRfd2NoYXJzKHN0YXRlKSBtYmxlbihOVUxMLCAwKSwgbWJ0b3djKE5VTEwsIE5VTEwsIDApCisjZGVmaW5lIHN0YXRlX3VudXNlZAorI2VuZGlmCisKKyNpZiBIQVZFX01CU1JUT1dDUworI2RlZmluZSBjb3VudF9tYnl0ZXMoc3JjLCBsZW4sIHN0YXRlKSAgICAgIG1ic3J0b3djcygwLCAgICZzcmMsIGxlbiwgc3RhdGUpCisjZGVmaW5lIHRyYW5zX21ieXRlcyhkc3QsIHNyYywgbGVuLCBzdGF0ZSkgbWJzcnRvd2NzKGRzdCwgJnNyYywgbGVuLCBzdGF0ZSkKKyNkZWZpbmUgcmVzZXRfbWJ5dGVzKHN0YXRlKSBtZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKQorI2VsaWYgSEFWRV9NQlNUT1dDUyAmJiBIQVZFX01CVE9XQyAmJiBIQVZFX01CTEVOCisjZGVmaW5lIGNvdW50X21ieXRlcyhzcmMsIGxlbiwgc3RhdGUpICAgICAgbWJzdG93Y3MoMCwgICBzcmMsIGxlbikKKyNkZWZpbmUgdHJhbnNfbWJ5dGVzKGRzdCwgc3JjLCBsZW4sIHN0YXRlKSBtYnN0b3djcyhkc3QsIHNyYywgbGVuKQorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIG1ibGVuKE5VTEwsIDApLCBtYnRvd2MoTlVMTCwgTlVMTCwgMCkKKyNkZWZpbmUgc3RhdGVfdW51c2VkCisjZW5kaWYKKworI2RlZmluZSBUb2dnbGVBY3ModGVtcCxyZWFsKSB0ZW1wID0gKCh0ZW1wID09IHJlYWwpID8gMCA6IHJlYWwpCisKKyNkZWZpbmUgUChzdHJpbmcpCXByaW50dygiJXNcbiIsIHN0cmluZykKKworI2RlZmluZSBCTEFOSwkJJyAnCS8qIHRoaXMgaXMgdGhlIGJhY2tncm91bmQgY2hhcmFjdGVyICovCisKKyN1bmRlZiBtYXhfY29sb3JzCitzdGF0aWMgaW50IG1heF9jb2xvcnM7CQkvKiB0aGUgYWN0dWFsIG51bWJlciBvZiBjb2xvcnMgd2UnbGwgdXNlICovCitzdGF0aWMgaW50IG1pbl9jb2xvcnM7CQkvKiB0aGUgbWluaW11bSBjb2xvciBjb2RlICovCitzdGF0aWMgYm9vbCB1c2VfY29sb3JzOwkJLyogdHJ1ZSBpZiB3ZSB1c2UgY29sb3JzICovCisKKyN1bmRlZiBtYXhfcGFpcnMKK3N0YXRpYyBpbnQgbWF4X3BhaXJzOwkJLyogLi4uYW5kIHRoZSBudW1iZXIgb2YgY29sb3IgcGFpcnMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHNob3J0IHJlZDsKKyAgICBzaG9ydCBncmVlbjsKKyAgICBzaG9ydCBibHVlOworfSBSR0JfREFUQTsKKworc3RhdGljIFJHQl9EQVRBICphbGxfY29sb3JzOworCitzdGF0aWMgdm9pZCBtYWluX21lbnUoYm9vbCk7CisKKy8qIFRoZSBiZWhhdmlvciBvZiBtdmhsaW5lLCBtdnZsaW5lIGZvciBuZWdhdGl2ZS96ZXJvIGxlbmd0aCBpcyB1bnNwZWNpZmllZCwKKyAqIHRob3VnaCB3ZSBjYW4gcmVseSBvbiBuZWdhdGl2ZSB4L3kgdmFsdWVzIHRvIHN0b3AgdGhlIG1hY3JvLgorICovCitzdGF0aWMgdm9pZAorZG9faF9saW5lKGludCB5LCBpbnQgeCwgY2h0eXBlIGMsIGludCB0bykKK3sKKyAgICBpZiAoKHRvKSA+ICh4KSkKKwltdmhsaW5lKHksIHgsIGMsICh0bykgLSAoeCkpOworfQorCitzdGF0aWMgdm9pZAorZG9fdl9saW5lKGludCB5LCBpbnQgeCwgY2h0eXBlIGMsIGludCB0bykKK3sKKyAgICBpZiAoKHRvKSA+ICh5KSkKKwltdnZsaW5lKHksIHgsIGMsICh0bykgLSAoeSkpOworfQorCitzdGF0aWMgdm9pZAorUmVwYWludCh2b2lkKQoreworICAgIHRvdWNod2luKHN0ZHNjcik7CisgICAgdG91Y2h3aW4oY3Vyc2NyKTsKKyAgICB3cmVmcmVzaChjdXJzY3IpOworfQorCitzdGF0aWMgYm9vbAoraXNRdWl0KGludCBjKQoreworICAgIHJldHVybiAoKGMpID09IFFVSVQgfHwgKGMpID09IEVTQ0FQRSk7Cit9CisjZGVmaW5lIGNhc2VfUVVJVAlRVUlUOiBjYXNlIEVTQ0FQRQorCisvKiBDb21tb24gZnVuY3Rpb24gdG8gYWxsb3cgXlQgdG8gdG9nZ2xlIHRyYWNlLW1vZGUgaW4gdGhlIG1pZGRsZSBvZiBhIHRlc3QKKyAqIHNvIHRoYXQgdHJhY2UtZmlsZXMgY2FuIGJlIG1hZGUgc21hbGxlci4KKyAqLworc3RhdGljIGludAord0dldGNoYXIoV0lORE9XICp3aW4pCit7CisgICAgaW50IGM7CisjaWZkZWYgVFJBQ0UKKyAgICB3aGlsZSAoKGMgPSB3Z2V0Y2god2luKSkgPT0gQ1RSTCgnVCcpKSB7CisJaWYgKF9uY190cmFjaW5nKSB7CisJICAgIHNhdmVfdHJhY2UgPSBfbmNfdHJhY2luZzsKKwkgICAgVHJhY2UoKCJUT0dHTEUtVFJBQ0lORyBPRkYiKSk7CisJICAgIF9uY190cmFjaW5nID0gMDsKKwl9IGVsc2UgeworCSAgICBfbmNfdHJhY2luZyA9IHNhdmVfdHJhY2U7CisJfQorCXRyYWNlKF9uY190cmFjaW5nKTsKKwlpZiAoX25jX3RyYWNpbmcpCisJICAgIFRyYWNlKCgiVE9HR0xFLVRSQUNJTkcgT04iKSk7CisgICAgfQorI2Vsc2UKKyAgICBjID0gd2dldGNoKHdpbik7CisjZW5kaWYKKyAgICByZXR1cm4gYzsKK30KKyNkZWZpbmUgR2V0Y2hhcigpIHdHZXRjaGFyKHN0ZHNjcikKKworLyogcmVwbGFjZXMgd2dldG5zdHIoKSwgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGVkaXQgdmFsdWVzICovCitzdGF0aWMgdm9pZAord0dldHN0cmluZyhXSU5ET1cgKndpbiwgY2hhciAqYnVmZmVyLCBpbnQgbGltaXQpCit7CisgICAgaW50IHkwLCB4MCwgeCwgY2g7CisgICAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgICBlY2hvKCk7CisgICAgZ2V0eXgod2luLCB5MCwgeDApOworICAgIHdhdHRyc2V0KHdpbiwgQV9SRVZFUlNFKTsKKworICAgIHggPSAoaW50KSBzdHJsZW4oYnVmZmVyKTsKKyAgICB3aGlsZSAoIWRvbmUpIHsKKwlpZiAoeCA+IChpbnQpIHN0cmxlbihidWZmZXIpKQorCSAgICB4ID0gKGludCkgc3RybGVuKGJ1ZmZlcik7CisJd21vdmUod2luLCB5MCwgeDApOworCXdwcmludHcod2luLCAiJS0qcyIsIGxpbWl0LCBidWZmZXIpOworCXdtb3ZlKHdpbiwgeTAsIHgwICsgeCk7CisJc3dpdGNoIChjaCA9IHdHZXRjaGFyKHdpbikpIHsKKwljYXNlICdcbic6CisJY2FzZSBLRVlfRU5URVI6CisJICAgIGRvbmUgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlIENUUkwoJ1UnKToKKwkgICAgKmJ1ZmZlciA9ICdcMCc7CisJICAgIGJyZWFrOworCWNhc2UgJ1xiJzoKKwljYXNlIEtFWV9CQUNLU1BBQ0U6CisJY2FzZSBLRVlfREM6CisJICAgIGlmICh4ID4gMCkgeworCQlpbnQgajsKKwkJZm9yIChqID0gLS14OyAoYnVmZmVyW2pdID0gYnVmZmVyW2ogKyAxXSkgIT0gJ1wwJzsgKytqKSB7CisJCSAgICA7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGlmICh4ID4gMCkgeworCQktLXg7CisJICAgIH0gZWxzZSB7CisJCWZsYXNoKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUklHSFQ6CisJICAgICsreDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgaWYgKCFpc3ByaW50KGNoKSB8fCBjaCA+PSBLRVlfTUlOKSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIGlmICgoaW50KSBzdHJsZW4oYnVmZmVyKSA8IGxpbWl0KSB7CisJCWludCBqOworCQlmb3IgKGogPSAoaW50KSBzdHJsZW4oYnVmZmVyKSArIDE7IGogPiB4OyAtLWopIHsKKwkJICAgIGJ1ZmZlcltqXSA9IGJ1ZmZlcltqIC0gMV07CisJCX0KKwkJYnVmZmVyW3grK10gPSAoY2hhcikgY2g7CisJICAgIH0gZWxzZSB7CisJCWZsYXNoKCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgd2F0dHJvZmYod2luLCBBX1JFVkVSU0UpOworICAgIHdtb3ZlKHdpbiwgeTAsIHgwKTsKKyAgICBub2VjaG8oKTsKK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitzdGF0aWMgd2NoYXJfdAorZnVsbHdpZHRoX29mKGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoICsgMHhmZjEwIC0gJzAnKTsKK30KKworc3RhdGljIHZvaWQKK21ha2VfZnVsbHdpZHRoX3RleHQod2NoYXJfdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisgICAgaW50IGNoOworICAgIHdoaWxlICgoY2ggPSAqc291cmNlKyspICE9IDApIHsKKwkqdGFyZ2V0KysgPSBmdWxsd2lkdGhfb2YoY2gpOworICAgIH0KKyAgICAqdGFyZ2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQKK21ha2VfbmFycm93X3RleHQod2NoYXJfdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisgICAgaW50IGNoOworICAgIHdoaWxlICgoY2ggPSAqc291cmNlKyspICE9IDApIHsKKwkqdGFyZ2V0KysgPSBjaDsKKyAgICB9CisgICAgKnRhcmdldCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX2Z1bGx3aWR0aF9kaWdpdChjY2hhcl90ICp0YXJnZXQsIGludCBkaWdpdCkKK3sKKyAgICB3Y2hhcl90IHNvdXJjZVsyXTsKKworICAgIHNvdXJjZVswXSA9IGZ1bGx3aWR0aF9vZihkaWdpdCArICcwJyk7CisgICAgc291cmNlWzFdID0gMDsKKyAgICBzZXRjY2hhcih0YXJnZXQsIHNvdXJjZSwgQV9OT1JNQUwsIDAsIDApOworfQorCitzdGF0aWMgaW50Cit3R2V0X3djaGFyKFdJTkRPVyAqd2luLCB3aW50X3QgKnJlc3VsdCkKK3sKKyAgICBpbnQgYzsKKyNpZmRlZiBUUkFDRQorICAgIHdoaWxlICgoYyA9IHdnZXRfd2NoKHdpbiwgcmVzdWx0KSkgPT0gQ1RSTCgnVCcpKSB7CisJaWYgKF9uY190cmFjaW5nKSB7CisJICAgIHNhdmVfdHJhY2UgPSBfbmNfdHJhY2luZzsKKwkgICAgVHJhY2UoKCJUT0dHTEUtVFJBQ0lORyBPRkYiKSk7CisJICAgIF9uY190cmFjaW5nID0gMDsKKwl9IGVsc2UgeworCSAgICBfbmNfdHJhY2luZyA9IHNhdmVfdHJhY2U7CisJfQorCXRyYWNlKF9uY190cmFjaW5nKTsKKwlpZiAoX25jX3RyYWNpbmcpCisJICAgIFRyYWNlKCgiVE9HR0xFLVRSQUNJTkcgT04iKSk7CisgICAgfQorI2Vsc2UKKyAgICBjID0gd2dldF93Y2god2luLCByZXN1bHQpOworI2VuZGlmCisgICAgcmV0dXJuIGM7Cit9CisjZGVmaW5lIEdldF93Y2hhcihyZXN1bHQpIHdHZXRfd2NoYXIoc3Rkc2NyLCByZXN1bHQpCisKKy8qIHJlcGxhY2VzIHdnZXRuX3dzdHIoKSwgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGVkaXQgdmFsdWVzICovCitzdGF0aWMgdm9pZAord0dldF93c3RyaW5nKFdJTkRPVyAqd2luLCB3Y2hhcl90ICpidWZmZXIsIGludCBsaW1pdCkKK3sKKyAgICBpbnQgeTAsIHgwLCB4OworICAgIHdpbnRfdCBjaDsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICBib29sIGZrZXkgPSBGQUxTRTsKKworICAgIGVjaG8oKTsKKyAgICBnZXR5eCh3aW4sIHkwLCB4MCk7CisgICAgd2F0dHJzZXQod2luLCBBX1JFVkVSU0UpOworCisgICAgeCA9IChpbnQpIHdjc2xlbihidWZmZXIpOworICAgIHdoaWxlICghZG9uZSkgeworCWlmICh4ID4gKGludCkgd2NzbGVuKGJ1ZmZlcikpCisJICAgIHggPSAoaW50KSB3Y3NsZW4oYnVmZmVyKTsKKworCS8qIGNsZWFyIHRoZSAid2luZG93JyAqLworCXdtb3ZlKHdpbiwgeTAsIHgwKTsKKwl3cHJpbnR3KHdpbiwgIiUqcyIsIGxpbWl0LCAiICIpOworCisJLyogd3JpdGUgdGhlIGV4aXN0aW5nIGJ1ZmZlciBjb250ZW50cyAqLworCXdtb3ZlKHdpbiwgeTAsIHgwKTsKKwl3YWRkbndzdHIod2luLCBidWZmZXIsIGxpbWl0KTsKKworCS8qIHBvc2l0aW9ucyB0aGUgY3Vyc29yIHBhc3QgY2hhcmFjdGVyICd4JyAqLworCXdtb3ZlKHdpbiwgeTAsIHgwKTsKKwl3YWRkbndzdHIod2luLCBidWZmZXIsIHgpOworCisJc3dpdGNoICh3R2V0X3djaGFyKHdpbiwgJmNoKSkgeworCWNhc2UgS0VZX0NPREVfWUVTOgorCSAgICBma2V5ID0gVFJVRTsKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlIEtFWV9FTlRFUjoKKwkJY2ggPSAnXG4nOworCQlma2V5ID0gRkFMU0U7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9CQUNLU1BBQ0U6CisJICAgIGNhc2UgS0VZX0RDOgorCQljaCA9ICdcYic7CisJCWZrZXkgPSBGQUxTRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0xFRlQ6CisJICAgIGNhc2UgS0VZX1JJR0hUOgorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJY2ggPSAod2ludF90KSAtMTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBPSzoKKwkgICAgZmtleSA9IEZBTFNFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBjaCA9ICh3aW50X3QpIC0xOworCSAgICBma2V5ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCisJc3dpdGNoIChjaCkgeworCWNhc2UgJ1xuJzoKKwkgICAgZG9uZSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnVScpOgorCSAgICAqYnVmZmVyID0gJ1wwJzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXGInOgorCSAgICBpZiAoeCA+IDApIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IC0teDsgKGJ1ZmZlcltqXSA9IGJ1ZmZlcltqICsgMV0pICE9ICdcMCc7ICsraikgeworCQkgICAgOworCQl9CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCSAgICBpZiAoeCA+IDApIHsKKwkJLS14OworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUklHSFQ6CisJICAgICsreDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgaWYgKGZrZXkpIHsKKwkJYmVlcCgpOworCSAgICB9IGVsc2UgaWYgKChpbnQpIHdjc2xlbihidWZmZXIpIDwgbGltaXQpIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IChpbnQpIHdjc2xlbihidWZmZXIpICsgMTsgaiA+IHg7IC0taikgeworCQkgICAgYnVmZmVyW2pdID0gYnVmZmVyW2ogLSAxXTsKKwkJfQorCQlidWZmZXJbeCsrXSA9ICh3Y2hhcl90KSBjaDsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHdhdHRyb2ZmKHdpbiwgQV9SRVZFUlNFKTsKKyAgICB3bW92ZSh3aW4sIHkwLCB4MCk7CisgICAgbm9lY2hvKCk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorUGF1c2Uodm9pZCkKK3sKKyAgICBtb3ZlKExJTkVTIC0gMSwgMCk7CisgICAgYWRkc3RyKCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uICIpOworICAgICh2b2lkKSBHZXRjaGFyKCk7Cit9CisKK3N0YXRpYyB2b2lkCitDYW5ub3QoY29uc3QgY2hhciAqd2hhdCkKK3sKKyAgICBwcmludHcoIlxuVGhpcyAlcyB0ZXJtaW5hbCAlc1xuXG4iLCBnZXRlbnYoIlRFUk0iKSwgd2hhdCk7CisgICAgUGF1c2UoKTsKK30KKworc3RhdGljIHZvaWQKK1NoZWxsT3V0KGJvb2wgbWVzc2FnZSkKK3sKKyAgICBpZiAobWVzc2FnZSkKKwlhZGRzdHIoIlNoZWxsaW5nIG91dC4uLiIpOworICAgIGRlZl9wcm9nX21vZGUoKTsKKyAgICBlbmR3aW4oKTsKKyAgICBzeXN0ZW0oInNoIik7CisgICAgaWYgKG1lc3NhZ2UpCisJYWRkc3RyKCJyZXR1cm5lZCBmcm9tIHNoZWxsb3V0LlxuIik7CisgICAgcmVmcmVzaCgpOworfQorCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBfdHJhY2Vtb3VzZSgpLCBidXQgd2UgY2Fubm90IGNvdW50IG9uIHRoYXQKKyAqIGJlaW5nIGF2YWlsYWJsZSBpbiB0aGUgbm9uLWRlYnVnIGxpYnJhcnkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK21vdXNlX2RlY29kZShNRVZFTlQgY29uc3QgKmVwKQoreworICAgIHN0YXRpYyBjaGFyIGJ1Zls4MCArICg1ICogMTApICsgKDMyICogMTUpXTsKKworICAgICh2b2lkKSBzcHJpbnRmKGJ1ZiwgImlkICUyZCAgYXQgKCUyZCwgJTJkLCAlMmQpIHN0YXRlICU0bHggPSB7IiwKKwkJICAgZXAtPmlkLCBlcC0+eCwgZXAtPnksIGVwLT56LCAodW5zaWduZWQgbG9uZykgZXAtPmJzdGF0ZSk7CisKKyNkZWZpbmUgU0hPVyhtLCBzKSBpZiAoKGVwLT5ic3RhdGUgJiBtKT09bSkge3N0cmNhdChidWYscyk7IHN0cmNhdChidWYsICIsICIpO30KKworICAgIFNIT1coQlVUVE9OMV9SRUxFQVNFRCwgInJlbGVhc2UtMSIpOworICAgIFNIT1coQlVUVE9OMV9QUkVTU0VELCAicHJlc3MtMSIpOworICAgIFNIT1coQlVUVE9OMV9DTElDS0VELCAiY2xpY2stMSIpOworICAgIFNIT1coQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTEiKTsKKyAgICBTSE9XKEJVVFRPTjFfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay0xIik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjFfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC0xIik7CisjZW5kaWYKKworICAgIFNIT1coQlVUVE9OMl9SRUxFQVNFRCwgInJlbGVhc2UtMiIpOworICAgIFNIT1coQlVUVE9OMl9QUkVTU0VELCAicHJlc3MtMiIpOworICAgIFNIT1coQlVUVE9OMl9DTElDS0VELCAiY2xpY2stMiIpOworICAgIFNIT1coQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTIiKTsKKyAgICBTSE9XKEJVVFRPTjJfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay0yIik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjJfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC0yIik7CisjZW5kaWYKKworICAgIFNIT1coQlVUVE9OM19SRUxFQVNFRCwgInJlbGVhc2UtMyIpOworICAgIFNIT1coQlVUVE9OM19QUkVTU0VELCAicHJlc3MtMyIpOworICAgIFNIT1coQlVUVE9OM19DTElDS0VELCAiY2xpY2stMyIpOworICAgIFNIT1coQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTMiKTsKKyAgICBTSE9XKEJVVFRPTjNfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay0zIik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjNfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC0zIik7CisjZW5kaWYKKworICAgIFNIT1coQlVUVE9ONF9SRUxFQVNFRCwgInJlbGVhc2UtNCIpOworICAgIFNIT1coQlVUVE9ONF9QUkVTU0VELCAicHJlc3MtNCIpOworICAgIFNIT1coQlVUVE9ONF9DTElDS0VELCAiY2xpY2stNCIpOworICAgIFNIT1coQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCwgImRvdWJsZWNsaWNrLTQiKTsKKyAgICBTSE9XKEJVVFRPTjRfVFJJUExFX0NMSUNLRUQsICJ0cmlwbGVjbGljay00Iik7CisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDEKKyAgICBTSE9XKEJVVFRPTjRfUkVTRVJWRURfRVZFTlQsICJyZXNlcnZlZC00Iik7CisjZW5kaWYKKworI2lmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiA9PSAyCisgICAgU0hPVyhCVVRUT041X1JFTEVBU0VELCAicmVsZWFzZS01Iik7CisgICAgU0hPVyhCVVRUT041X1BSRVNTRUQsICJwcmVzcy01Iik7CisgICAgU0hPVyhCVVRUT041X0NMSUNLRUQsICJjbGljay01Iik7CisgICAgU0hPVyhCVVRUT041X0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stNSIpOworICAgIFNIT1coQlVUVE9ONV9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTUiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT05fQ1RSTCwgImN0cmwiKTsKKyAgICBTSE9XKEJVVFRPTl9TSElGVCwgInNoaWZ0Iik7CisgICAgU0hPVyhCVVRUT05fQUxULCAiYWx0Iik7CisgICAgU0hPVyhBTExfTU9VU0VfRVZFTlRTLCAiYWxsLWV2ZW50cyIpOworICAgIFNIT1coUkVQT1JUX01PVVNFX1BPU0lUSU9OLCAicG9zaXRpb24iKTsKKworI3VuZGVmIFNIT1cKKworICAgIGlmIChidWZbc3RybGVuKGJ1ZikgLSAxXSA9PSAnICcpCisJYnVmW3N0cmxlbihidWYpIC0gMl0gPSAnXDAnOworICAgICh2b2lkKSBzdHJjYXQoYnVmLCAifSIpOworICAgIHJldHVybiAoYnVmKTsKK30KKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDaGFyYWN0ZXIgaW5wdXQgdGVzdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorc2V0dXBfZ2V0Y2goV0lORE9XICp3aW4sIGJvb2wgZmxhZ3NbXSkKK3sKKyAgICBrZXlwYWQod2luLCBmbGFnc1snayddKTsJLyogc2hvdWxkIGJlIHJlZHVuZGFudCwgYnV0IGZvciB0ZXN0aW5nICovCisgICAgbWV0YSh3aW4sIGZsYWdzWydtJ10pOwkvKiBmb3JjZSB0aGlzIHRvIGEga25vd24gc3RhdGUgKi8KKyAgICBpZiAoZmxhZ3NbJ2UnXSkKKwllY2hvKCk7CisgICAgZWxzZQorCW5vZWNobygpOworfQorCitzdGF0aWMgdm9pZAord2dldGNoX2hlbHAoV0lORE9XICp3aW4sIGJvb2wgZmxhZ3NbXSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqaGVscFtdID0KKyAgICB7CisJImUgIC0tIHRvZ2dsZSBlY2hvIG1vZGUiCisJLCJnICAtLSB0cmlnZ2VycyBhIGdldHN0ciB0ZXN0IgorCSwiayAgLS0gdG9nZ2xlIGtleXBhZC9saXRlcmFsIG1vZGUiCisJLCJtICAtLSB0b2dnbGUgbWV0YSAoNy1iaXQvOC1iaXQpIG1vZGUiCisJLCJecSAtLSBxdWl0IgorCSwicyAgLS0gc2hlbGwgb3V0XG4iCisJLCJ3ICAtLSBjcmVhdGUgYSBuZXcgd2luZG93IgorI2lmZGVmIFNJR1RTVFAKKwksInogIC0tIHN1c3BlbmQgdGhpcyBwcm9jZXNzIgorI2VuZGlmCisgICAgfTsKKyAgICBpbnQgeSwgeDsKKyAgICB1bnNpZ25lZCBjaGsgPSAoKFNJWkVPRihoZWxwKSArIDEpIC8gMik7CisgICAgdW5zaWduZWQgbjsKKworICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgbW92ZSgwLCAwKTsKKyAgICBwcmludHcoIlR5cGUgYW55IGtleSB0byBzZWUgaXRzICVzIHZhbHVlLiAgQWxzbzpcbiIsCisJICAgZmxhZ3NbJ2snXSA/ICJrZXlwYWQiIDogImxpdGVyYWwiKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKGhlbHApOyArK24pIHsKKwlpbnQgcm93ID0gMSArIChpbnQpIChuICUgY2hrKTsKKwlpbnQgY29sID0gKG4gPj0gY2hrKSA/IENPTFMgLyAyIDogMDsKKwlpbnQgZmxnID0gKChzdHJzdHIoaGVscFtuXSwgInRvZ2dsZSIpICE9IDApCisJCSAgICYmIChmbGFnc1tVQ2hhcigqaGVscFtuXSldICE9IEZBTFNFKSk7CisJaWYgKGZsZykKKwkgICAgc3RhbmRvdXQoKTsKKwltdnByaW50dyhyb3csIGNvbCwgIiVzIiwgaGVscFtuXSk7CisJaWYgKGNvbCA9PSAwKQorCSAgICBjbHJ0b2VvbCgpOworCWlmIChmbGcpCisJICAgIHN0YW5kZW5kKCk7CisgICAgfQorICAgIHdyZWZyZXNoKHN0ZHNjcik7CisgICAgd21vdmUod2luLCB5LCB4KTsKK30KKworc3RhdGljIHZvaWQKK3dnZXRjaF93cmFwKFdJTkRPVyAqd2luLCBpbnQgZmlyc3RfeSkKK3sKKyAgICBpbnQgbGFzdF95ID0gZ2V0bWF4eSh3aW4pIC0gMTsKKyAgICBpbnQgeSA9IGdldGN1cnkod2luKSArIDE7CisKKyAgICBpZiAoeSA+PSBsYXN0X3kpCisJeSA9IGZpcnN0X3k7CisgICAgd21vdmUod2luLCB5LCAwKTsKKyAgICB3Y2xydG9lb2wod2luKTsKK30KKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRQordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdJTkRPVyAqdGV4dDsKKyAgICBXSU5ET1cgKmZyYW1lOworfSBXSU5TVEFDSzsKKworc3RhdGljIFdJTlNUQUNLICp3aW5zdGFjayA9IDA7CitzdGF0aWMgdW5zaWduZWQgbGVuX3dpbnN0YWNrID0gMDsKKworc3RhdGljIHZvaWQKK2ZvcmdldF9ib3hlcyh2b2lkKQoreworICAgIGlmICh3aW5zdGFjayAhPSAwKSB7CisJZnJlZSh3aW5zdGFjayk7CisgICAgfQorICAgIHdpbnN0YWNrID0gMDsKKyAgICBsZW5fd2luc3RhY2sgPSAwOworfQorCitzdGF0aWMgdm9pZAorcmVtZW1iZXJfYm94ZXModW5zaWduZWQgbGV2ZWwsIFdJTkRPVyAqdHh0X3dpbiwgV0lORE9XICpib3hfd2luKQoreworICAgIHVuc2lnbmVkIG5lZWQgPSAobGV2ZWwgKyAxKSAqIDI7CisKKyAgICBhc3NlcnQobGV2ZWwgPCBDT0xTKTsKKworICAgIGlmICh3aW5zdGFjayA9PSAwKSB7CisJbGVuX3dpbnN0YWNrID0gMjA7CisJd2luc3RhY2sgPSB0eXBlTWFsbG9jKFdJTlNUQUNLLCBsZW5fd2luc3RhY2spOworICAgIH0gZWxzZSBpZiAobmVlZCA+PSBsZW5fd2luc3RhY2spIHsKKwlsZW5fd2luc3RhY2sgPSBuZWVkOworCXdpbnN0YWNrID0gdHlwZVJlYWxsb2MoV0lOU1RBQ0ssIGxlbl93aW5zdGFjaywgd2luc3RhY2spOworICAgIH0KKyAgICB3aW5zdGFja1tsZXZlbF0udGV4dCA9IHR4dF93aW47CisgICAgd2luc3RhY2tbbGV2ZWxdLmZyYW1lID0gYm94X3dpbjsKK30KKworI2lmIFVTRV9TT0ZUS0VZUyAmJiAoTkNVUlNFU19WRVJTSU9OX1BBVENIIDwgMjAwNzEyMjkpICYmIE5DVVJTRVNfRVhUX0ZVTkNTCitzdGF0aWMgdm9pZAorc2xrX3JlcGFpbnQodm9pZCkKK3sKKyAgICAvKiB0aGlzIGNodW5rIGlzIG5vdyBkb25lIGluIHJlc2l6ZV90ZXJtKCkgKi8KKyAgICBzbGtfdG91Y2goKTsKKyAgICBzbGtfY2xlYXIoKTsKKyAgICBzbGtfbm91dHJlZnJlc2goKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgc2xrX3JlcGFpbnQoKQkJLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qCisgKiBGb3Igd2dldGNoX3Rlc3QoKSwgd2UgY3JlYXRlIHBhaXJzIG9mIHdpbmRvd3MgLSBvbmUgZm9yIGEgYm94LCBvbmUgZm9yIHRleHQuCisgKiBSZXNpemUgYm90aCBhbmQgcGFpbnQgdGhlIGJveCBpbiB0aGUgcGFyZW50LgorICovCitzdGF0aWMgdm9pZAorcmVzaXplX2JveGVzKHVuc2lnbmVkIGxldmVsLCBXSU5ET1cgKndpbikKK3sKKyAgICB1bnNpZ25lZCBuOworICAgIGludCBiYXNlID0gNTsKKyAgICBpbnQgaGlnaCA9IExJTkVTIC0gYmFzZTsKKyAgICBpbnQgd2lkZSA9IENPTFM7CisKKyAgICB0b3VjaHdpbihzdGRzY3IpOworICAgIHdub3V0cmVmcmVzaChzdGRzY3IpOworCisgICAgc2xrX3JlcGFpbnQoKTsKKworICAgIGZvciAobiA9IDA7IG4gPCBsZXZlbDsgKytuKSB7CisJd3Jlc2l6ZSh3aW5zdGFja1tuXS5mcmFtZSwgaGlnaCwgd2lkZSk7CisJd3Jlc2l6ZSh3aW5zdGFja1tuXS50ZXh0LCBoaWdoIC0gMiwgd2lkZSAtIDIpOworCWhpZ2ggLT0gMjsKKwl3aWRlIC09IDI7CisJd2VyYXNlKHdpbnN0YWNrW25dLnRleHQpOworCWJveCh3aW5zdGFja1tuXS5mcmFtZSwgMCwgMCk7CisJd25vdXRyZWZyZXNoKHdpbnN0YWNrW25dLmZyYW1lKTsKKwl3cHJpbnR3KHdpbnN0YWNrW25dLnRleHQsCisJCSJzaXplICVkeCVkXG4iLAorCQlnZXRtYXh5KHdpbnN0YWNrW25dLnRleHQpLAorCQlnZXRtYXh4KHdpbnN0YWNrW25dLnRleHQpKTsKKwl3bm91dHJlZnJlc2god2luc3RhY2tbbl0udGV4dCk7CisJaWYgKHdpbnN0YWNrW25dLnRleHQgPT0gd2luKQorCSAgICBicmVhazsKKyAgICB9CisgICAgZG91cGRhdGUoKTsKK30KKyNlbHNlCisjZGVmaW5lIGZvcmdldF9ib3hlcygpCQkvKiBub3RoaW5nICovCisjZGVmaW5lIHJlbWVtYmVyX2JveGVzKGxldmVsLHRleHQsZnJhbWUpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCitzdGF0aWMgdm9pZAord2dldGNoX3Rlc3QodW5zaWduZWQgbGV2ZWwsIFdJTkRPVyAqd2luLCBpbnQgZGVsYXkpCit7CisgICAgY2hhciBidWZbQlVGU0laXTsKKyAgICBpbnQgZmlyc3RfeSwgZmlyc3RfeDsKKyAgICBpbnQgYzsKKyAgICBpbnQgaW5jb3VudCA9IDA7CisgICAgYm9vbCBmbGFnc1syNTZdOworICAgIGJvb2wgYmxvY2tpbmcgPSAoZGVsYXkgPCAwKTsKKworICAgIG1lbXNldChmbGFncywgRkFMU0UsIHNpemVvZihmbGFncykpOworICAgIGZsYWdzW1VDaGFyKCdrJyldID0gKHdpbiA9PSBzdGRzY3IpOworCisgICAgc2V0dXBfZ2V0Y2god2luLCBmbGFncyk7CisgICAgd3RpbWVvdXQod2luLCBkZWxheSk7CisgICAgZ2V0eXgod2luLCBmaXJzdF95LCBmaXJzdF94KTsKKworICAgIHdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworICAgIHdzZXRzY3JyZWcod2luLCBmaXJzdF95LCBnZXRtYXh5KHdpbikgLSAxKTsKKyAgICBzY3JvbGxvayh3aW4sIFRSVUUpOworCisgICAgZm9yICg7OykgeworCXdoaWxlICgoYyA9IHdHZXRjaGFyKHdpbikpID09IEVSUikgeworCSAgICBpbmNvdW50Kys7CisJICAgIGlmIChibG9ja2luZykgeworCQkodm9pZCkgd3ByaW50dyh3aW4sICIlMDVkOiBpbnB1dCBlcnJvciIsIGluY291bnQpOworCQlicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJKHZvaWQpIHdwcmludHcod2luLCAiJTA1ZDogaW5wdXQgdGltZWQgb3V0IiwgaW5jb3VudCk7CisJICAgIH0KKwkgICAgd2dldGNoX3dyYXAod2luLCBmaXJzdF95KTsKKwl9CisJaWYgKGMgPT0gRVJSICYmIGJsb2NraW5nKSB7CisJICAgIHdwcmludHcod2luLCAiRVJSIik7CisJICAgIHdnZXRjaF93cmFwKHdpbiwgZmlyc3RfeSk7CisJfSBlbHNlIGlmIChpc1F1aXQoYykpIHsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmIChjID09ICdlJykgeworCSAgICBmbGFnc1tVQ2hhcignZScpXSA9ICFmbGFnc1tVQ2hhcignZScpXTsKKwkgICAgc2V0dXBfZ2V0Y2god2luLCBmbGFncyk7CisJICAgIHdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworCX0gZWxzZSBpZiAoYyA9PSAnZycpIHsKKwkgICAgd2FkZHN0cih3aW4sICJnZXRzdHIgdGVzdDogIik7CisJICAgIGVjaG8oKTsKKwkgICAgd2dldG5zdHIod2luLCBidWYsIHNpemVvZihidWYpIC0gMSk7CisJICAgIG5vZWNobygpOworCSAgICB3cHJpbnR3KHdpbiwgIkkgc2F3ICVkIGNoYXJhY3RlcnM6XG5cdGAlcycuIiwgKGludCkgc3RybGVuKGJ1ZiksIGJ1Zik7CisJICAgIHdjbHJ0b2VvbCh3aW4pOworCSAgICB3Z2V0Y2hfd3JhcCh3aW4sIGZpcnN0X3kpOworCX0gZWxzZSBpZiAoYyA9PSAnaycpIHsKKwkgICAgZmxhZ3NbVUNoYXIoJ2snKV0gPSAhZmxhZ3NbVUNoYXIoJ2snKV07CisJICAgIHNldHVwX2dldGNoKHdpbiwgZmxhZ3MpOworCSAgICB3Z2V0Y2hfaGVscCh3aW4sIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ20nKSB7CisJICAgIGZsYWdzW1VDaGFyKCdtJyldID0gIWZsYWdzW1VDaGFyKCdtJyldOworCSAgICBzZXR1cF9nZXRjaCh3aW4sIGZsYWdzKTsKKwkgICAgd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisJfSBlbHNlIGlmIChjID09ICdzJykgeworCSAgICBTaGVsbE91dChUUlVFKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ3cnKSB7CisJICAgIGludCBoaWdoID0gZ2V0bWF4eSh3aW4pIC0gMSAtIGZpcnN0X3kgKyAxOworCSAgICBpbnQgd2lkZSA9IGdldG1heHgod2luKSAtIGZpcnN0X3g7CisJICAgIGludCBvbGRfeSwgb2xkX3g7CisJICAgIGludCBuZXdfeSA9IGZpcnN0X3kgKyBnZXRiZWd5KHdpbik7CisJICAgIGludCBuZXdfeCA9IGZpcnN0X3ggKyBnZXRiZWd4KHdpbik7CisKKwkgICAgZ2V0eXgod2luLCBvbGRfeSwgb2xkX3gpOworCSAgICBpZiAoaGlnaCA+IDIgJiYgd2lkZSA+IDIpIHsKKwkJV0lORE9XICp3YiA9IG5ld3dpbihoaWdoLCB3aWRlLCBuZXdfeSwgbmV3X3gpOworCQlXSU5ET1cgKndpID0gbmV3d2luKGhpZ2ggLSAyLCB3aWRlIC0gMiwgbmV3X3kgKyAxLCBuZXdfeCArIDEpOworCisJCWJveCh3YiwgMCwgMCk7CisJCXdyZWZyZXNoKHdiKTsKKwkJd21vdmUod2ksIDAsIDApOworCQlyZW1lbWJlcl9ib3hlcyhsZXZlbCwgd2ksIHdiKTsKKwkJd2dldGNoX3Rlc3QobGV2ZWwgKyAxLCB3aSwgZGVsYXkpOworCQlkZWx3aW4od2kpOworCQlkZWx3aW4od2IpOworCisJCXdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworCQl3bW92ZSh3aW4sIG9sZF95LCBvbGRfeCk7CisJCXRvdWNod2luKHdpbik7CisJCXdyZWZyZXNoKHdpbik7CisJCWRvdXBkYXRlKCk7CisJICAgIH0KKyNpZmRlZiBTSUdUU1RQCisJfSBlbHNlIGlmIChjID09ICd6JykgeworCSAgICBraWxsKGdldHBpZCgpLCBTSUdUU1RQKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJICAgIHdwcmludHcod2luLCAiS2V5IHByZXNzZWQ6ICUwNG8gIiwgYyk7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisJICAgIGlmIChjID09IEtFWV9NT1VTRSkgeworCQlpbnQgeSwgeDsKKwkJTUVWRU5UIGV2ZW50OworCisJCWdldG1vdXNlKCZldmVudCk7CisJCXdwcmludHcod2luLCAiS0VZX01PVVNFLCAlcyIsIG1vdXNlX2RlY29kZSgmZXZlbnQpKTsKKwkJZ2V0eXgod2luLCB5LCB4KTsKKwkJbW92ZShldmVudC55LCBldmVudC54KTsKKwkJYWRkY2goJyonKTsKKwkJd21vdmUod2luLCB5LCB4KTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogTkNVUlNFU19NT1VTRV9WRVJTSU9OICovCisJICAgIGlmIChjID49IEtFWV9NSU4pIHsKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgZGVmaW5lZChLRVlfUkVTSVpFKSAmJiBIQVZFX1dSRVNJWkUKKwkJaWYgKGMgPT0gS0VZX1JFU0laRSkgeworCQkgICAgcmVzaXplX2JveGVzKGxldmVsLCB3aW4pOworCQl9CisjZW5kaWYKKwkJKHZvaWQpIHdhZGRzdHIod2luLCBrZXluYW1lKGMpKTsKKwkgICAgfSBlbHNlIGlmIChjID4gMHg4MCkgeworCQl1bnNpZ25lZCBjMiA9ICh1bnNpZ25lZCkgKGMgJiAweDdmKTsKKwkJaWYgKGlzcHJpbnQoYzIpKQorCQkgICAgKHZvaWQpIHdwcmludHcod2luLCAiTS0lYyIsIFVDaGFyKGMyKSk7CisJCWVsc2UKKwkJICAgICh2b2lkKSB3cHJpbnR3KHdpbiwgIk0tJXMiLCB1bmN0cmwoYzIpKTsKKwkJd2FkZHN0cih3aW4sICIgKGhpZ2gtaGFsZiBjaGFyYWN0ZXIpIik7CisJICAgIH0gZWxzZSB7CisJCWlmIChpc3ByaW50KGMpKQorCQkgICAgKHZvaWQpIHdwcmludHcod2luLCAiJWMgKEFTQ0lJIHByaW50YWJsZSBjaGFyYWN0ZXIpIiwgYyk7CisJCWVsc2UKKwkJICAgICh2b2lkKSB3cHJpbnR3KHdpbiwgIiVzIChBU0NJSSBjb250cm9sIGNoYXJhY3RlcikiLAorCQkJCSAgIHVuY3RybChVQ2hhcihjKSkpOworCSAgICB9CisJICAgIHdnZXRjaF93cmFwKHdpbiwgZmlyc3RfeSk7CisJfQorICAgIH0KKworICAgIHd0aW1lb3V0KHdpbiwgLTEpOworfQorCitzdGF0aWMgaW50CitiZWdpbl9nZXRjaF90ZXN0KHZvaWQpCit7CisgICAgY2hhciBidWZbQlVGU0laXTsKKyAgICBpbnQgZGVsYXk7CisKKyAgICByZWZyZXNoKCk7CisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICBtb3VzZW1hc2soQUxMX01PVVNFX0VWRU5UUywgKG1tYXNrX3QgKikgMCk7CisjZW5kaWYKKworICAgICh2b2lkKSBwcmludHcoIkRlbGF5IGluIDEwdGhzIG9mIGEgc2Vjb25kICg8Q1I+IGZvciBibG9ja2luZyBpbnB1dCk/ICIpOworICAgIGVjaG8oKTsKKyAgICBnZXRuc3RyKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKyAgICBub2VjaG8oKTsKKyAgICBub25sKCk7CisKKyAgICBpZiAoaXNkaWdpdChVQ2hhcihidWZbMF0pKSkgeworCWRlbGF5ID0gYXRvaShidWYpICogMTAwOworICAgIH0gZWxzZSB7CisJZGVsYXkgPSAtMTsKKyAgICB9CisgICAgcmF3KCk7CisgICAgbW92ZSg1LCAwKTsKKyAgICByZXR1cm4gZGVsYXk7Cit9CisKK3N0YXRpYyB2b2lkCitmaW5pc2hfZ2V0Y2hfdGVzdCh2b2lkKQoreworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzaygwLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorICAgIGVyYXNlKCk7CisgICAgbm9yYXcoKTsKKyAgICBubCgpOworICAgIGVuZHdpbigpOworfQorCitzdGF0aWMgdm9pZAorZ2V0Y2hfdGVzdCh2b2lkKQoreworICAgIGludCBkZWxheSA9IGJlZ2luX2dldGNoX3Rlc3QoKTsKKworICAgIHNsa19yZXN0b3JlKCk7CisgICAgd2dldGNoX3Rlc3QoMCwgc3Rkc2NyLCBkZWxheSk7CisgICAgZm9yZ2V0X2JveGVzKCk7CisgICAgZmluaXNoX2dldGNoX3Rlc3QoKTsKK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisvKgorICogRm9yIHdnZXRfd2NoX3Rlc3QoKSwgd2UgY3JlYXRlIHBhaXJzIG9mIHdpbmRvd3MgLSBvbmUgZm9yIGEgYm94LCBvbmUgZm9yIHRleHQuCisgKiBSZXNpemUgYm90aCBhbmQgcGFpbnQgdGhlIGJveCBpbiB0aGUgcGFyZW50LgorICovCisjaWYgZGVmaW5lZChLRVlfUkVTSVpFKSAmJiBIQVZFX1dSRVNJWkUKK3N0YXRpYyB2b2lkCityZXNpemVfd2lkZV9ib3hlcyh1bnNpZ25lZCBsZXZlbCwgV0lORE9XICp3aW4pCit7CisgICAgdW5zaWduZWQgbjsKKyAgICBpbnQgYmFzZSA9IDU7CisgICAgaW50IGhpZ2ggPSBMSU5FUyAtIGJhc2U7CisgICAgaW50IHdpZGUgPSBDT0xTOworCisgICAgdG91Y2h3aW4oc3Rkc2NyKTsKKyAgICB3bm91dHJlZnJlc2goc3Rkc2NyKTsKKworICAgIHNsa19yZXBhaW50KCk7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgbGV2ZWw7ICsrbikgeworCXdyZXNpemUod2luc3RhY2tbbl0uZnJhbWUsIGhpZ2gsIHdpZGUpOworCXdyZXNpemUod2luc3RhY2tbbl0udGV4dCwgaGlnaCAtIDIsIHdpZGUgLSAyKTsKKwloaWdoIC09IDI7CisJd2lkZSAtPSAyOworCXdlcmFzZSh3aW5zdGFja1tuXS50ZXh0KTsKKwlib3hfc2V0KHdpbnN0YWNrW25dLmZyYW1lLCAwLCAwKTsKKwl3bm91dHJlZnJlc2god2luc3RhY2tbbl0uZnJhbWUpOworCXdwcmludHcod2luc3RhY2tbbl0udGV4dCwKKwkJInNpemUgJWR4JWRcbiIsCisJCWdldG1heHkod2luc3RhY2tbbl0udGV4dCksCisJCWdldG1heHgod2luc3RhY2tbbl0udGV4dCkpOworCXdub3V0cmVmcmVzaCh3aW5zdGFja1tuXS50ZXh0KTsKKwlpZiAod2luc3RhY2tbbl0udGV4dCA9PSB3aW4pCisJICAgIGJyZWFrOworICAgIH0KKyAgICBkb3VwZGF0ZSgpOworfQorI2VuZGlmIC8qIEtFWV9SRVNJWkUgKi8KKworc3RhdGljIGNoYXIgKgord2NzdG9zKGNvbnN0IHdjaGFyX3QgKnNyYykKK3sKKyAgICBpbnQgbmVlZDsKKyAgICBjaGFyICpyZXN1bHQgPSAwOworICAgIGNvbnN0IHdjaGFyX3QgKnRtcCA9IHNyYzsKKyNpZm5kZWYgc3RhdGVfdW51c2VkCisgICAgbWJzdGF0ZV90IHN0YXRlOworI2VuZGlmCisKKyAgICByZXNldF93Y2hhcnMoc3RhdGUpOworICAgIGlmICgobmVlZCA9IChpbnQpIGNvdW50X3djaGFycyh0bXAsIDAsICZzdGF0ZSkpID4gMCkgeworCXVuc2lnbmVkIGhhdmUgPSAodW5zaWduZWQpIG5lZWQ7CisJaWYgKChyZXN1bHQgPSB0eXBlQ2FsbG9jKGNoYXIsIGhhdmUgKyAxKSkgIT0gMCkgeworCSAgICB0bXAgPSBzcmM7CisJICAgIGlmICh0cmFuc193Y2hhcnMocmVzdWx0LCB0bXAsIGhhdmUsICZzdGF0ZSkgIT0gaGF2ZSkgeworCQlmcmVlKHJlc3VsdCk7CisJCXJlc3VsdCA9IDA7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCit3Z2V0X3djaF90ZXN0KHVuc2lnbmVkIGxldmVsLCBXSU5ET1cgKndpbiwgaW50IGRlbGF5KQoreworICAgIHdjaGFyX3Qgd2NoYXJfYnVmW0JVRlNJWl07CisgICAgd2ludF90IHdpbnRfYnVmW0JVRlNJWl07CisgICAgaW50IGZpcnN0X3ksIGZpcnN0X3g7CisgICAgd2ludF90IGM7CisgICAgaW50IGluY291bnQgPSAwOworICAgIGJvb2wgZmxhZ3NbMjU2XTsKKyAgICBib29sIGJsb2NraW5nID0gKGRlbGF5IDwgMCk7CisgICAgaW50IHksIHgsIGNvZGU7CisgICAgY2hhciAqdGVtcDsKKworICAgIG1lbXNldChmbGFncywgRkFMU0UsIHNpemVvZihmbGFncykpOworICAgIGZsYWdzW1VDaGFyKCdrJyldID0gKHdpbiA9PSBzdGRzY3IpOworCisgICAgc2V0dXBfZ2V0Y2god2luLCBmbGFncyk7CisgICAgd3RpbWVvdXQod2luLCBkZWxheSk7CisgICAgZ2V0eXgod2luLCBmaXJzdF95LCBmaXJzdF94KTsKKworICAgIHdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworICAgIHdzZXRzY3JyZWcod2luLCBmaXJzdF95LCBnZXRtYXh5KHdpbikgLSAxKTsKKyAgICBzY3JvbGxvayh3aW4sIFRSVUUpOworCisgICAgZm9yICg7OykgeworCXdoaWxlICgoY29kZSA9IHdHZXRfd2NoYXIod2luLCAmYykpID09IEVSUikgeworCSAgICBpbmNvdW50Kys7CisJICAgIGlmIChibG9ja2luZykgeworCQkodm9pZCkgd3ByaW50dyh3aW4sICIlMDVkOiBpbnB1dCBlcnJvciIsIGluY291bnQpOworCQlicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJKHZvaWQpIHdwcmludHcod2luLCAiJTA1ZDogaW5wdXQgdGltZWQgb3V0IiwgaW5jb3VudCk7CisJICAgIH0KKwkgICAgd2dldGNoX3dyYXAod2luLCBmaXJzdF95KTsKKwl9CisJaWYgKGNvZGUgPT0gRVJSICYmIGJsb2NraW5nKSB7CisJICAgIHdwcmludHcod2luLCAiRVJSIik7CisJICAgIHdnZXRjaF93cmFwKHdpbiwgZmlyc3RfeSk7CisJfSBlbHNlIGlmIChpc1F1aXQoKGludCkgYykpIHsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmIChjID09ICdlJykgeworCSAgICBmbGFnc1tVQ2hhcignZScpXSA9ICFmbGFnc1tVQ2hhcignZScpXTsKKwkgICAgc2V0dXBfZ2V0Y2god2luLCBmbGFncyk7CisJICAgIHdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworCX0gZWxzZSBpZiAoYyA9PSAnZycpIHsKKwkgICAgd2FkZHN0cih3aW4sICJnZXRzdHIgdGVzdDogIik7CisJICAgIGVjaG8oKTsKKwkgICAgY29kZSA9IHdnZXRuX3dzdHIod2luLCB3aW50X2J1Ziwgc2l6ZW9mKHdpbnRfYnVmKSAtIDEpOworCSAgICBub2VjaG8oKTsKKwkgICAgaWYgKGNvZGUgPT0gRVJSKSB7CisJCXdwcmludHcod2luLCAid2dldG5fd3N0ciByZXR1cm5zIGFuIGVycm9yLiIpOworCSAgICB9IGVsc2UgeworCQlpbnQgbjsKKwkJZm9yIChuID0gMDsgKHdjaGFyX2J1ZltuXSA9ICh3Y2hhcl90KSB3aW50X2J1ZltuXSkgIT0gMDsgKytuKSB7CisJCSAgICA7CisJCX0KKwkJaWYgKCh0ZW1wID0gd2NzdG9zKHdjaGFyX2J1ZikpICE9IDApIHsKKwkJICAgIHdwcmludHcod2luLCAiSSBzYXcgJWQgY2hhcmFjdGVyczpcblx0YCVzJy4iLAorCQkJICAgIChpbnQpIHdjc2xlbih3Y2hhcl9idWYpLCB0ZW1wKTsKKwkJICAgIGZyZWUodGVtcCk7CisJCX0gZWxzZSB7CisJCSAgICB3cHJpbnR3KHdpbiwgIkkgc2F3ICVkIGNoYXJhY3RlcnMgKGNhbm5vdCBjb252ZXJ0KS4iLAorCQkJICAgIChpbnQpIHdjc2xlbih3Y2hhcl9idWYpKTsKKwkJfQorCSAgICB9CisJICAgIHdjbHJ0b2VvbCh3aW4pOworCSAgICB3Z2V0Y2hfd3JhcCh3aW4sIGZpcnN0X3kpOworCX0gZWxzZSBpZiAoYyA9PSAnaycpIHsKKwkgICAgZmxhZ3NbVUNoYXIoJ2snKV0gPSAhZmxhZ3NbVUNoYXIoJ2snKV07CisJICAgIHNldHVwX2dldGNoKHdpbiwgZmxhZ3MpOworCSAgICB3Z2V0Y2hfaGVscCh3aW4sIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ20nKSB7CisJICAgIGZsYWdzW1VDaGFyKCdtJyldID0gIWZsYWdzW1VDaGFyKCdtJyldOworCSAgICBzZXR1cF9nZXRjaCh3aW4sIGZsYWdzKTsKKwkgICAgd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisJfSBlbHNlIGlmIChjID09ICdzJykgeworCSAgICBTaGVsbE91dChUUlVFKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ3cnKSB7CisJICAgIGludCBoaWdoID0gZ2V0bWF4eSh3aW4pIC0gMSAtIGZpcnN0X3kgKyAxOworCSAgICBpbnQgd2lkZSA9IGdldG1heHgod2luKSAtIGZpcnN0X3g7CisJICAgIGludCBvbGRfeSwgb2xkX3g7CisJICAgIGludCBuZXdfeSA9IGZpcnN0X3kgKyBnZXRiZWd5KHdpbik7CisJICAgIGludCBuZXdfeCA9IGZpcnN0X3ggKyBnZXRiZWd4KHdpbik7CisKKwkgICAgZ2V0eXgod2luLCBvbGRfeSwgb2xkX3gpOworCSAgICBpZiAoaGlnaCA+IDIgJiYgd2lkZSA+IDIpIHsKKwkJV0lORE9XICp3YiA9IG5ld3dpbihoaWdoLCB3aWRlLCBuZXdfeSwgbmV3X3gpOworCQlXSU5ET1cgKndpID0gbmV3d2luKGhpZ2ggLSAyLCB3aWRlIC0gMiwgbmV3X3kgKyAxLCBuZXdfeCArIDEpOworCisJCWJveF9zZXQod2IsIDAsIDApOworCQl3cmVmcmVzaCh3Yik7CisJCXdtb3ZlKHdpLCAwLCAwKTsKKwkJcmVtZW1iZXJfYm94ZXMobGV2ZWwsIHdpLCB3Yik7CisJCXdnZXRfd2NoX3Rlc3QobGV2ZWwgKyAxLCB3aSwgZGVsYXkpOworCQlkZWx3aW4od2kpOworCQlkZWx3aW4od2IpOworCisJCXdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworCQl3bW92ZSh3aW4sIG9sZF95LCBvbGRfeCk7CisJCXRvdWNod2luKHdpbik7CisJCXdyZWZyZXNoKHdpbik7CisJICAgIH0KKyNpZmRlZiBTSUdUU1RQCisJfSBlbHNlIGlmIChjID09ICd6JykgeworCSAgICBraWxsKGdldHBpZCgpLCBTSUdUU1RQKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJICAgIHdwcmludHcod2luLCAiS2V5IHByZXNzZWQ6ICUwNG8gIiwgKGludCkgYyk7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisJICAgIGlmIChjID09IEtFWV9NT1VTRSkgeworCQlNRVZFTlQgZXZlbnQ7CisKKwkJZ2V0bW91c2UoJmV2ZW50KTsKKwkJd3ByaW50dyh3aW4sICJLRVlfTU9VU0UsICVzIiwgbW91c2VfZGVjb2RlKCZldmVudCkpOworCQlnZXR5eCh3aW4sIHksIHgpOworCQltb3ZlKGV2ZW50LnksIGV2ZW50LngpOworCQlhZGRjaCgnKicpOworCQl3bW92ZSh3aW4sIHksIHgpOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKwkgICAgaWYgKGNvZGUgPT0gS0VZX0NPREVfWUVTKSB7CisjaWYgZGVmaW5lZChLRVlfUkVTSVpFKSAmJiBIQVZFX1dSRVNJWkUKKwkJaWYgKGMgPT0gS0VZX1JFU0laRSkgeworCQkgICAgcmVzaXplX3dpZGVfYm94ZXMobGV2ZWwsIHdpbik7CisJCX0KKyNlbmRpZgorCQkodm9pZCkgd2FkZHN0cih3aW4sIGtleV9uYW1lKCh3Y2hhcl90KSBjKSk7CisJICAgIH0gZWxzZSB7CisJCWlmIChjIDwgMjU2ICYmIGlzY250cmwoYykpIHsKKwkJICAgICh2b2lkKSB3cHJpbnR3KHdpbiwgIiVzIChjb250cm9sIGNoYXJhY3RlcikiLCB1bmN0cmwoYykpOworCQl9IGVsc2UgeworCQkgICAgd2NoYXJfdCBjMiA9ICh3Y2hhcl90KSBjOworCQkgICAgd2FkZG53c3RyKHdpbiwgJmMyLCAxKTsKKwkJICAgICh2b2lkKSB3cHJpbnR3KHdpbiwgIiA9ICUjeCAocHJpbnRhYmxlIGNoYXJhY3RlcikiLCAodW5zaWduZWQpIGMpOworCQl9CisJICAgIH0KKwkgICAgd2dldGNoX3dyYXAod2luLCBmaXJzdF95KTsKKwl9CisgICAgfQorCisgICAgd3RpbWVvdXQod2luLCAtMSk7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfd2NoX3Rlc3Qodm9pZCkKK3sKKyAgICBpbnQgZGVsYXkgPSBiZWdpbl9nZXRjaF90ZXN0KCk7CisKKyAgICBzbGtfcmVzdG9yZSgpOworICAgIHdnZXRfd2NoX3Rlc3QoMCwgc3Rkc2NyLCBkZWxheSk7CisgICAgZm9yZ2V0X2JveGVzKCk7CisgICAgZmluaXNoX2dldGNoX3Rlc3QoKTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENoYXJhY3RlciBhdHRyaWJ1dGVzIHRlc3QKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIEhBVkVfU0VUVVBURVJNIHx8IEhBVkVfVEdFVEVOVAorI2RlZmluZSBnZXRfbmN2KCkgVElHRVROVU0oIm5jdiIsIk5DIikKKyNkZWZpbmUgZ2V0X3htYygpIFRJR0VUTlVNKCJ4bWMiLCJzZyIpCisjZWxzZQorI2RlZmluZSBnZXRfbmN2KCkgLTEKKyNkZWZpbmUgZ2V0X3htYygpIC0xCisjZW5kaWYKKworI2lmICFIQVZFX1RFUk1BVFRSUworc3RhdGljIGNodHlwZQorbXlfdGVybWF0dHJzKHZvaWQpCit7CisgICAgc3RhdGljIGludCBmaXJzdCA9IFRSVUU7CisgICAgc3RhdGljIGNodHlwZSByZXN1bHQgPSAwOworCisgICAgaWYgKGZpcnN0KSB7CisjaWYgIUhBVkVfVElHRVRTVFIKKwljaGFyIGJ1ZmZlcls0MDk2XTsKKwljaGFyIHBhcnNlZFs0MDk2XTsKKwljaGFyICphcmVhX3BvaW50ZXIgPSBwYXJzZWQ7CisKKwl0Z2V0ZW50KGJ1ZmZlciwgZ2V0ZW52KCJURVJNIikpOworI2VuZGlmCisKKwlpZiAoVElHRVRTVFIoInNtc28iLCAic28iKSkKKwkgICAgcmVzdWx0IHw9IEFfU1RBTkRPVVQ7CisJaWYgKFRJR0VUU1RSKCJzbXVsIiwgInVzIikpCisJICAgIHJlc3VsdCB8PSBBX1VOREVSTElORTsKKwlpZiAoVElHRVRTVFIoInJldiIsICJtciIpKQorCSAgICByZXN1bHQgfD0gQV9SRVZFUlNFOworCWlmIChUSUdFVFNUUigiYmxpbmsiLCAibWIiKSkKKwkgICAgcmVzdWx0IHw9IEFfQkxJTks7CisJaWYgKFRJR0VUU1RSKCJkaW0iLCAibWgiKSkKKwkgICAgcmVzdWx0IHw9IEFfRElNOworCWlmIChUSUdFVFNUUigiYm9sZCIsICJtZCIpKQorCSAgICByZXN1bHQgfD0gQV9CT0xEOworCWlmIChUSUdFVFNUUigic21hY3MiLCAiYWMiKSkKKwkgICAgcmVzdWx0IHw9IEFfQUxUQ0hBUlNFVDsKKworCWZpcnN0ID0gRkFMU0U7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisjZGVmaW5lIHRlcm1hdHRycygpIG15X3Rlcm1hdHRycygpCisjZW5kaWYKKworI2RlZmluZSBNQVhfQVRUUlNUUklORyAzMQorI2RlZmluZSBMRU5fQVRUUlNUUklORyAyNgorCitzdGF0aWMgY2hhciBhdHRyX3Rlc3Rfc3RyaW5nW01BWF9BVFRSU1RSSU5HICsgMV07CisKK3N0YXRpYyB2b2lkCithdHRyX2xlZ2VuZChXSU5ET1cgKmhlbHB3aW4pCit7CisgICAgaW50IHJvdyA9IDE7CisgICAgaW50IGNvbCA9IDE7CisKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiRVNDIHRvIGV4aXQuIik7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIl5MIHJlcGFpbnRzLiIpOworICAgICsrcm93OworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICJNb2RpZnkgdGhlIHRlc3Qgc3RyaW5nczoiKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiICBBIGRpZ2l0IHNldHMgZ2FwcyBvbiBlYWNoIHNpZGUgb2YgZGlzcGxheWVkIGF0dHJpYnV0ZXMiKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiICA8Lz4gc2hpZnRzIHRoZSB0ZXh0IGxlZnQvcmlnaHQuICIpOworICAgICsrcm93OworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICJUb2dnbGVzOiIpOworICAgIGlmICh1c2VfY29sb3JzKSB7CisJbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJCSAgIiAgZi9GL2IvRiB0b2dnbGUgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGJhY2tncm91bmQgY29sb3IiKTsKKwltdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkJICAiICB0L1QgICAgIHRvZ2dsZSB0ZXh0L2JhY2tncm91bmQgY29sb3IgYXR0cmlidXRlIik7CisgICAgfQorICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIGEvQSAgICAgdG9nZ2xlIEFDUyAoYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQpIG1hcHBpbmciKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiICB2L1YgICAgIHRvZ2dsZSB2aWRlbyBhdHRyaWJ1dGUgdG8gY29tYmluZSB3aXRoIGVhY2ggbGluZSIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19jb2xvcl9hdHRyKGludCBmZywgaW50IGJnLCBpbnQgdHgpCit7CisgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwlwcmludHcoIiAgQ29sb3JzIChmZyAlZCwgYmcgJWQiLCBmZywgYmcpOworCWlmICh0eCA+PSAwKQorCSAgICBwcmludHcoIiwgdGV4dCAlZCIsIHR4KTsKKwlwcmludHcoIiksIik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbAorY3ljbGVfY29sb3JfYXR0cihpbnQgY2gsIHNob3J0ICpmZywgc2hvcnQgKmJnLCBzaG9ydCAqdHgpCit7CisgICAgYm9vbCBlcnJvciA9IEZBTFNFOworCisgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnZic6CisJICAgICpmZyA9IChzaG9ydCkgKCpmZyArIDEpOworCSAgICBicmVhazsKKwljYXNlICdGJzoKKwkgICAgKmZnID0gKHNob3J0KSAoKmZnIC0gMSk7CisJICAgIGJyZWFrOworCWNhc2UgJ2InOgorCSAgICAqYmcgPSAoc2hvcnQpICgqYmcgKyAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnQic6CisJICAgICpiZyA9IChzaG9ydCkgKCpiZyAtIDEpOworCSAgICBicmVhazsKKwljYXNlICd0JzoKKwkgICAgKnR4ID0gKHNob3J0KSAoKnR4ICsgMSk7CisJICAgIGJyZWFrOworCWNhc2UgJ1QnOgorCSAgICAqdHggPSAoc2hvcnQpICgqdHggLSAxKTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYmVlcCgpOworCSAgICBlcnJvciA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKwlpZiAoKmZnID49IENPTE9SUykKKwkgICAgKmZnID0gKHNob3J0KSBtaW5fY29sb3JzOworCWlmICgqZmcgPCBtaW5fY29sb3JzKQorCSAgICAqZmcgPSAoc2hvcnQpIChDT0xPUlMgLSAxKTsKKwlpZiAoKmJnID49IENPTE9SUykKKwkgICAgKmJnID0gKHNob3J0KSBtaW5fY29sb3JzOworCWlmICgqYmcgPCBtaW5fY29sb3JzKQorCSAgICAqYmcgPSAoc2hvcnQpIChDT0xPUlMgLSAxKTsKKwlpZiAoKnR4ID49IENPTE9SUykKKwkgICAgKnR4ID0gLTE7CisJaWYgKCp0eCA8IC0xKQorCSAgICAqdHggPSAoc2hvcnQpIChDT0xPUlMgLSAxKTsKKyAgICB9IGVsc2UgeworCWJlZXAoKTsKKwllcnJvciA9IFRSVUU7CisgICAgfQorICAgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK2FkanVzdF9hdHRyX3N0cmluZyhpbnQgYWRqdXN0KQoreworICAgIGludCBmaXJzdCA9ICgoaW50KSBVQ2hhcihhdHRyX3Rlc3Rfc3RyaW5nWzBdKSkgKyBhZGp1c3Q7CisgICAgaW50IGxhc3QgPSBmaXJzdCArIExFTl9BVFRSU1RSSU5HOworCisgICAgaWYgKGZpcnN0ID49ICcgJyAmJiBsYXN0IDw9ICd+JykgewkvKiAzMi4uMTI2ICovCisJaW50IGosIGs7CisJZm9yIChqID0gMCwgayA9IGZpcnN0OyBqIDwgTUFYX0FUVFJTVFJJTkcgJiYgayA8PSBsYXN0OyArK2osICsraykgeworCSAgICBhdHRyX3Rlc3Rfc3RyaW5nW2pdID0gKGNoYXIpIGs7CisJICAgIGlmICgoKGsgKyAxIC0gZmlyc3QpICUgNSkgPT0gMCkgeworCQlpZiAoKytqID49IE1BWF9BVFRSU1RSSU5HKQorCQkgICAgYnJlYWs7CisJCWF0dHJfdGVzdF9zdHJpbmdbal0gPSAnICc7CisJICAgIH0KKwl9CisJd2hpbGUgKGogPCBNQVhfQVRUUlNUUklORykKKwkgICAgYXR0cl90ZXN0X3N0cmluZ1tqKytdID0gJyAnOworCWF0dHJfdGVzdF9zdHJpbmdbal0gPSAnXDAnOworICAgIH0gZWxzZSB7CisJYmVlcCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2luaXRfYXR0cl9zdHJpbmcodm9pZCkKK3sKKyAgICBhdHRyX3Rlc3Rfc3RyaW5nWzBdID0gJ2EnOworICAgIGFkanVzdF9hdHRyX3N0cmluZygwKTsKK30KKworc3RhdGljIGludAorc2hvd19hdHRyKGludCByb3csIGludCBza2lwLCBib29sIGFycm93LCBjaHR5cGUgYXR0ciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpbnQgbmN2ID0gZ2V0X25jdigpOworICAgIGNodHlwZSB0ZXN0ID0gYXR0ciAmIChjaHR5cGUpICh+QV9BTFRDSEFSU0VUKTsKKworICAgIGlmIChhcnJvdykKKwltdnByaW50dyhyb3csIDUsICItLT4iKTsKKyAgICBtdnByaW50dyhyb3csIDgsICIlcyBtb2RlOiIsIG5hbWUpOworICAgIG12cHJpbnR3KHJvdywgMjQsICJ8Iik7CisgICAgaWYgKHNraXApCisJcHJpbnR3KCIlKnMiLCBza2lwLCAiICIpOworICAgIC8qCisgICAgICogSnVzdCBmb3IgdGVzdGluZywgd3JpdGUgdGV4dCB1c2luZyB0aGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgb25lCisgICAgICogY2hhcmFjdGVyIGF0IGEgdGltZSAodG8gcGFzcyBpdHMgcmVuZGl0aW9uIGRpcmVjdGx5KSwgYW5kIHVzZSB0aGUKKyAgICAgKiBzdHJpbmcgb3BlcmF0aW9uIGZvciB0aGUgb3RoZXIgYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICBpZiAoYXR0ciAmIEFfQUxUQ0hBUlNFVCkgeworCWNvbnN0IGNoYXIgKnM7CisJY2h0eXBlIGNoOworCisJZm9yIChzID0gYXR0cl90ZXN0X3N0cmluZzsgKnMgIT0gJ1wwJzsgKytzKSB7CisJICAgIGNoID0gVUNoYXIoKnMpOworCSAgICBhZGRjaChjaCB8IGF0dHIpOworCX0KKyAgICB9IGVsc2UgeworCWF0dHJzZXQoYXR0cik7CisJYWRkc3RyKGF0dHJfdGVzdF9zdHJpbmcpOworCWF0dHJvZmYoYXR0cik7CisgICAgfQorICAgIGlmIChza2lwKQorCXByaW50dygiJSpzIiwgc2tpcCwgIiAiKTsKKyAgICBwcmludHcoInwiKTsKKyAgICBpZiAodGVzdCAhPSBBX05PUk1BTCkgeworCWlmICghKHRlcm1hdHRycygpICYgdGVzdCkpIHsKKwkgICAgcHJpbnR3KCIgKE4vQSkiKTsKKwl9IGVsc2UgeworCSAgICBpZiAobmN2ID4gMCAmJiAoZ2V0YmtnZChzdGRzY3IpICYgQV9DT0xPUikpIHsKKwkJc3RhdGljIGNvbnN0IGNodHlwZSB0YWJsZVtdID0KKwkJeworCQkgICAgQV9TVEFORE9VVCwKKwkJICAgIEFfVU5ERVJMSU5FLAorCQkgICAgQV9SRVZFUlNFLAorCQkgICAgQV9CTElOSywKKwkJICAgIEFfRElNLAorCQkgICAgQV9CT0xELAorI2lmZGVmIEFfSU5WSVMKKwkJICAgIEFfSU5WSVMsCisjZW5kaWYKKwkJICAgIEFfUFJPVEVDVCwKKwkJICAgIEFfQUxUQ0hBUlNFVAorCQl9OworCQl1bnNpZ25lZCBuOworCQlib29sIGZvdW5kID0gRkFMU0U7CisJCWZvciAobiA9IDA7IG4gPCBTSVpFT0YodGFibGUpOyBuKyspIHsKKwkJICAgIGlmICgodGFibGVbbl0gJiBhdHRyKSAhPSAwCisJCQkmJiAoKDEgPDwgbikgJiBuY3YpICE9IDApIHsKKwkJCWZvdW5kID0gVFJVRTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWlmIChmb3VuZCkKKwkJICAgIHByaW50dygiIChOQ1YpIik7CisJICAgIH0KKwkgICAgaWYgKCh0ZXJtYXR0cnMoKSAmIHRlc3QpICE9IHRlc3QpCisJCXByaW50dygiIChQYXJ0KSIpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJvdyArIDI7Cit9CisvKiAqSU5ERU5ULU9GRiogKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGNodHlwZQkJCWF0dHI7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICoJbmFtZTsKK30gYXR0cnNfdG9fdGVzdFtdID0geworICAgIHsgQV9TVEFORE9VVCwJIlNUQU5ET1VUIiB9LAorICAgIHsgQV9SRVZFUlNFLAkiUkVWRVJTRSIgfSwKKyAgICB7IEFfQk9MRCwJCSJCT0xEIiB9LAorICAgIHsgQV9VTkRFUkxJTkUsCSJVTkRFUkxJTkUiIH0sCisgICAgeyBBX0RJTSwJCSJESU0iIH0sCisgICAgeyBBX0JMSU5LLAkJIkJMSU5LIiB9LAorICAgIHsgQV9QUk9URUNULAkiUFJPVEVDVCIgfSwKKyNpZmRlZiBBX0lOVklTCisgICAgeyBBX0lOVklTLAkJIklOVklTSUJMRSIgfSwKKyNlbmRpZgorICAgIHsgQV9OT1JNQUwsCQkiTk9STUFMIiB9LAorfTsKKy8qICpJTkRFTlQtT04qICovCisKK3N0YXRpYyBib29sCithdHRyX2dldGMoaW50ICpza2lwLCBzaG9ydCAqZmcsIHNob3J0ICpiZywgc2hvcnQgKnR4LCBpbnQgKmFjLCB1bnNpZ25lZCAqa2MpCit7CisgICAgYm9vbCByZXN1bHQgPSBUUlVFOworICAgIGJvb2wgZXJyb3IgPSBGQUxTRTsKKyAgICBXSU5ET1cgKmhlbHB3aW47CisKKyAgICBkbyB7CisJaW50IGNoID0gR2V0Y2hhcigpOworCisJZXJyb3IgPSBGQUxTRTsKKwlpZiAoY2ggPCAyNTYgJiYgaXNkaWdpdChjaCkpIHsKKwkgICAgKnNraXAgPSAoY2ggLSAnMCcpOworCX0gZWxzZSB7CisJICAgIHN3aXRjaCAoY2gpIHsKKwkgICAgY2FzZSBDVFJMKCdMJyk6CisJCVJlcGFpbnQoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJz8nOgorCQlpZiAoKGhlbHB3aW4gPSBuZXd3aW4oTElORVMgLSAxLCBDT0xTIC0gMiwgMCwgMCkpICE9IDApIHsKKwkJICAgIGJveChoZWxwd2luLCAwLCAwKTsKKwkJICAgIGF0dHJfbGVnZW5kKGhlbHB3aW4pOworCQkgICAgd0dldGNoYXIoaGVscHdpbik7CisJCSAgICBkZWx3aW4oaGVscHdpbik7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgJ2EnOgorCQkqYWMgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSAnQSc6CisJCSphYyA9IEFfQUxUQ0hBUlNFVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3YnOgorCQlpZiAoKmtjID09IDApCisJCSAgICAqa2MgPSBTSVpFT0YoYXR0cnNfdG9fdGVzdCkgLSAxOworCQllbHNlCisJCSAgICAqa2MgLT0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1YnOgorCQkqa2MgKz0gMTsKKwkJaWYgKCprYyA+PSBTSVpFT0YoYXR0cnNfdG9fdGVzdCkpCisJCSAgICAqa2MgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSAnPCc6CisJCWFkanVzdF9hdHRyX3N0cmluZygtMSk7CisJCWJyZWFrOworCSAgICBjYXNlICc+JzoKKwkJYWRqdXN0X2F0dHJfc3RyaW5nKDEpOworCQlicmVhazsKKwkgICAgY2FzZSBjYXNlX1FVSVQ6CisJCXJlc3VsdCA9IEZBTFNFOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJZXJyb3IgPSBjeWNsZV9jb2xvcl9hdHRyKGNoLCBmZywgYmcsIHR4KTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfSB3aGlsZSAoZXJyb3IpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCithdHRyX3Rlc3Qodm9pZCkKKy8qIHRlc3QgdGV4dCBhdHRyaWJ1dGVzICovCit7CisgICAgaW50IG47CisgICAgaW50IHNraXAgPSBnZXRfeG1jKCk7CisgICAgc2hvcnQgZmcgPSBDT0xPUl9CTEFDSzsJLyogY29sb3IgcGFpciAwIGlzIHNwZWNpYWwgKi8KKyAgICBzaG9ydCBiZyA9IENPTE9SX0JMQUNLOworICAgIHNob3J0IHR4ID0gLTE7CisgICAgaW50IGFjID0gMDsKKyAgICB1bnNpZ25lZCBqLCBrOworCisgICAgaWYgKHNraXAgPCAwKQorCXNraXAgPSAwOworCisgICAgbiA9IHNraXA7CQkJLyogbWFrZSBpdCBlYXN5ICovCisgICAgayA9IFNJWkVPRihhdHRyc190b190ZXN0KSAtIDE7CisgICAgaW5pdF9hdHRyX3N0cmluZygpOworCisgICAgZG8geworCWludCByb3cgPSAyOworCWNodHlwZSBub3JtYWwgPSBBX05PUk1BTCB8IEJMQU5LOworCWNodHlwZSBleHRyYXMgPSAoY2h0eXBlKSBhYzsKKworCWlmICh1c2VfY29sb3JzKSB7CisJICAgIHNob3J0IHBhaXIgPSAoc2hvcnQpIChmZyAhPSBDT0xPUl9CTEFDSyB8fCBiZyAhPSBDT0xPUl9CTEFDSyk7CisJICAgIGlmIChwYWlyICE9IDApIHsKKwkJcGFpciA9IDE7CisJCWlmIChpbml0X3BhaXIocGFpciwgZmcsIGJnKSA9PSBFUlIpIHsKKwkJICAgIGJlZXAoKTsKKwkJfSBlbHNlIHsKKwkJICAgIG5vcm1hbCB8PSBDT0xPUl9QQUlSKHBhaXIpOworCQl9CisJICAgIH0KKwkgICAgaWYgKHR4ID49IDApIHsKKwkJcGFpciA9IDI7CisJCWlmIChpbml0X3BhaXIocGFpciwgdHgsIGJnKSA9PSBFUlIpIHsKKwkJICAgIGJlZXAoKTsKKwkJfSBlbHNlIHsKKwkJICAgIGV4dHJhcyB8PSBDT0xPUl9QQUlSKHBhaXIpOworCQl9CisJICAgIH0KKwl9CisJYmtnZChub3JtYWwpOworCWJrZ2RzZXQobm9ybWFsKTsKKwllcmFzZSgpOworCisJYm94KHN0ZHNjciwgMCwgMCk7CisJbXZhZGRzdHIoMCwgMjAsICJDaGFyYWN0ZXIgYXR0cmlidXRlIHRlc3QgZGlzcGxheSIpOworCisJZm9yIChqID0gMDsgaiA8IFNJWkVPRihhdHRyc190b190ZXN0KTsgKytqKSB7CisJICAgIGJvb2wgYXJyb3cgPSAoaiA9PSBrKTsKKwkgICAgcm93ID0gc2hvd19hdHRyKHJvdywgbiwgYXJyb3csCisJCQkgICAgZXh0cmFzIHwKKwkJCSAgICBhdHRyc190b190ZXN0W2pdLmF0dHIgfAorCQkJICAgIGF0dHJzX3RvX3Rlc3Rba10uYXR0ciwKKwkJCSAgICBhdHRyc190b190ZXN0W2pdLm5hbWUpOworCX0KKworCW12cHJpbnR3KHJvdywgOCwKKwkJICJUaGlzIHRlcm1pbmFsIGRvZXMgJXNoYXZlIHRoZSBtYWdpYy1jb29raWUgZ2xpdGNoIiwKKwkJIGdldF94bWMoKSA+IC0xID8gIiIgOiAibm90ICIpOworCW12cHJpbnR3KHJvdyArIDEsIDgsICJFbnRlciAnPycgZm9yIGhlbHAuIik7CisJc2hvd19jb2xvcl9hdHRyKGZnLCBiZywgdHgpOworCXByaW50dygiICBBQ1MgKCVkKSIsIGFjICE9IDApOworCisJcmVmcmVzaCgpOworICAgIH0gd2hpbGUgKGF0dHJfZ2V0YygmbiwgJmZnLCAmYmcsICZ0eCwgJmFjLCAmaykpOworCisgICAgYmtnZHNldChBX05PUk1BTCB8IEJMQU5LKTsKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK3N0YXRpYyB3Y2hhcl90IHdpZGVfYXR0cl90ZXN0X3N0cmluZ1tNQVhfQVRUUlNUUklORyArIDFdOworCitzdGF0aWMgdm9pZAord2lkZV9hZGp1c3RfYXR0cl9zdHJpbmcoaW50IGFkanVzdCkKK3sKKyAgICBpbnQgZmlyc3QgPSAoKGludCkgVUNoYXIod2lkZV9hdHRyX3Rlc3Rfc3RyaW5nWzBdKSkgKyBhZGp1c3Q7CisgICAgaW50IGxhc3QgPSBmaXJzdCArIExFTl9BVFRSU1RSSU5HOworCisgICAgaWYgKGZpcnN0ID49ICcgJyAmJiBsYXN0IDw9ICd+JykgewkvKiAzMi4uMTI2ICovCisJaW50IGosIGs7CisJZm9yIChqID0gMCwgayA9IGZpcnN0OyBqIDwgTUFYX0FUVFJTVFJJTkcgJiYgayA8PSBsYXN0OyArK2osICsraykgeworCSAgICB3aWRlX2F0dHJfdGVzdF9zdHJpbmdbal0gPSBrOworCSAgICBpZiAoKChrICsgMSAtIGZpcnN0KSAlIDUpID09IDApIHsKKwkJaWYgKCsraiA+PSBNQVhfQVRUUlNUUklORykKKwkJICAgIGJyZWFrOworCQl3aWRlX2F0dHJfdGVzdF9zdHJpbmdbal0gPSAnICc7CisJICAgIH0KKwl9CisJd2hpbGUgKGogPCBNQVhfQVRUUlNUUklORykKKwkgICAgd2lkZV9hdHRyX3Rlc3Rfc3RyaW5nW2orK10gPSAnICc7CisJd2lkZV9hdHRyX3Rlc3Rfc3RyaW5nW2pdID0gJ1wwJzsKKyAgICB9IGVsc2UgeworCWJlZXAoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit3aWRlX2luaXRfYXR0cl9zdHJpbmcodm9pZCkKK3sKKyAgICB3aWRlX2F0dHJfdGVzdF9zdHJpbmdbMF0gPSAnYSc7CisgICAgd2lkZV9hZGp1c3RfYXR0cl9zdHJpbmcoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfd2lkZV9iYWNrZ3JvdW5kKHNob3J0IHBhaXIpCit7CisgICAgY2NoYXJfdCBub3JtYWw7CisgICAgd2NoYXJfdCBibGFua1syXTsKKworICAgIGJsYW5rWzBdID0gJyAnOworICAgIGJsYW5rWzFdID0gMDsKKyAgICBzZXRjY2hhcigmbm9ybWFsLCBibGFuaywgQV9OT1JNQUwsIHBhaXIsIDApOworICAgIGJrZ3JuZCgmbm9ybWFsKTsKKyAgICBia2dybmRzZXQoJm5vcm1hbCk7Cit9CisKK3N0YXRpYyBhdHRyX3QKK2dldF93aWRlX2JhY2tncm91bmQodm9pZCkKK3sKKyAgICBhdHRyX3QgcmVzdWx0ID0gQV9OT1JNQUw7CisgICAgYXR0cl90IGF0dHI7CisgICAgY2NoYXJfdCBjaDsKKyAgICBzaG9ydCBwYWlyOworICAgIHdjaGFyX3Qgd2NoWzEwXTsKKworICAgIGlmIChnZXRia2dybmQoJmNoKSAhPSBFUlIpIHsKKwlpZiAoZ2V0Y2NoYXIoJmNoLCB3Y2gsICZhdHRyLCAmcGFpciwgMCkgIT0gRVJSKSB7CisJICAgIHJlc3VsdCA9IGF0dHI7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50Cit3aWRlX3Nob3dfYXR0cihpbnQgcm93LCBpbnQgc2tpcCwgYm9vbCBhcnJvdywgY2h0eXBlIGF0dHIsIHNob3J0IHBhaXIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaW50IG5jdiA9IGdldF9uY3YoKTsKKyAgICBjaHR5cGUgdGVzdCA9IGF0dHIgJiB+V0FfQUxUQ0hBUlNFVDsKKworICAgIGlmIChhcnJvdykKKwltdnByaW50dyhyb3csIDUsICItLT4iKTsKKyAgICBtdnByaW50dyhyb3csIDgsICIlcyBtb2RlOiIsIG5hbWUpOworICAgIG12cHJpbnR3KHJvdywgMjQsICJ8Iik7CisgICAgaWYgKHNraXApCisJcHJpbnR3KCIlKnMiLCBza2lwLCAiICIpOworCisgICAgLyoKKyAgICAgKiBKdXN0IGZvciB0ZXN0aW5nLCB3cml0ZSB0ZXh0IHVzaW5nIHRoZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBvbmUKKyAgICAgKiBjaGFyYWN0ZXIgYXQgYSB0aW1lICh0byBwYXNzIGl0cyByZW5kaXRpb24gZGlyZWN0bHkpLCBhbmQgdXNlIHRoZQorICAgICAqIHN0cmluZyBvcGVyYXRpb24gZm9yIHRoZSBvdGhlciBhdHRyaWJ1dGVzLgorICAgICAqLworICAgIGlmIChhdHRyICYgV0FfQUxUQ0hBUlNFVCkgeworCWNvbnN0IHdjaGFyX3QgKnM7CisJY2NoYXJfdCBjaDsKKworCWZvciAocyA9IHdpZGVfYXR0cl90ZXN0X3N0cmluZzsgKnMgIT0gTCdcMCc7ICsrcykgeworCSAgICB3Y2hhcl90IGZpbGxbMl07CisJICAgIGZpbGxbMF0gPSAqczsKKwkgICAgZmlsbFsxXSA9IEwnXDAnOworCSAgICBzZXRjY2hhcigmY2gsIGZpbGwsIGF0dHIsIHBhaXIsIDApOworCSAgICBhZGRfd2NoKCZjaCk7CisJfQorICAgIH0gZWxzZSB7CisJYXR0cl90IG9sZF9hdHRyOworCXNob3J0IG9sZF9wYWlyOworCisJYXR0cl9nZXQoJm9sZF9hdHRyLCAmb2xkX3BhaXIsIDApOworCWF0dHJfc2V0KGF0dHIsIHBhaXIsIDApOworCWFkZHdzdHIod2lkZV9hdHRyX3Rlc3Rfc3RyaW5nKTsKKwlhdHRyX3NldChvbGRfYXR0ciwgb2xkX3BhaXIsIDApOworICAgIH0KKyAgICBpZiAoc2tpcCkKKwlwcmludHcoIiUqcyIsIHNraXAsICIgIik7CisgICAgcHJpbnR3KCJ8Iik7CisgICAgaWYgKHRlc3QgIT0gQV9OT1JNQUwpIHsKKwlpZiAoISh0ZXJtX2F0dHJzKCkgJiB0ZXN0KSkgeworCSAgICBwcmludHcoIiAoTi9BKSIpOworCX0gZWxzZSB7CisJICAgIGlmIChuY3YgPiAwICYmIChnZXRfd2lkZV9iYWNrZ3JvdW5kKCkgJiBBX0NPTE9SKSkgeworCQlzdGF0aWMgY29uc3QgYXR0cl90IHRhYmxlW10gPQorCQl7CisJCSAgICBXQV9TVEFORE9VVCwKKwkJICAgIFdBX1VOREVSTElORSwKKwkJICAgIFdBX1JFVkVSU0UsCisJCSAgICBXQV9CTElOSywKKwkJICAgIFdBX0RJTSwKKwkJICAgIFdBX0JPTEQsCisJCSAgICBXQV9JTlZJUywKKwkJICAgIFdBX1BST1RFQ1QsCisJCSAgICBXQV9BTFRDSEFSU0VUCisJCX07CisJCXVuc2lnbmVkIG47CisJCWJvb2wgZm91bmQgPSBGQUxTRTsKKwkJZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YWJsZSk7IG4rKykgeworCQkgICAgaWYgKCh0YWJsZVtuXSAmIGF0dHIpICE9IDAKKwkJCSYmICgoMSA8PCBuKSAmIG5jdikgIT0gMCkgeworCQkJZm91bmQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJaWYgKGZvdW5kKQorCQkgICAgcHJpbnR3KCIgKE5DVikiKTsKKwkgICAgfQorCSAgICBpZiAoKHRlcm1fYXR0cnMoKSAmIHRlc3QpICE9IHRlc3QpCisJCXByaW50dygiIChQYXJ0KSIpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJvdyArIDI7Cit9CisKK3N0YXRpYyBib29sCit3aWRlX2F0dHJfZ2V0YyhpbnQgKnNraXAsIHNob3J0ICpmZywgc2hvcnQgKmJnLCBzaG9ydCAqdHgsIGludCAqYWMsIHVuc2lnbmVkICprYykKK3sKKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisgICAgYm9vbCBlcnJvciA9IEZBTFNFOworICAgIFdJTkRPVyAqaGVscHdpbjsKKworICAgIGRvIHsKKwlpbnQgY2ggPSBHZXRjaGFyKCk7CisKKwllcnJvciA9IEZBTFNFOworCWlmIChjaCA8IDI1NiAmJiBpc2RpZ2l0KGNoKSkgeworCSAgICAqc2tpcCA9IChjaCAtICcwJyk7CisJfSBlbHNlIHsKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlIENUUkwoJ0wnKToKKwkJUmVwYWludCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnPyc6CisJCWlmICgoaGVscHdpbiA9IG5ld3dpbihMSU5FUyAtIDEsIENPTFMgLSAyLCAwLCAwKSkgIT0gMCkgeworCQkgICAgYm94X3NldChoZWxwd2luLCAwLCAwKTsKKwkJICAgIGF0dHJfbGVnZW5kKGhlbHB3aW4pOworCQkgICAgd0dldGNoYXIoaGVscHdpbik7CisJCSAgICBkZWx3aW4oaGVscHdpbik7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgJ2EnOgorCQkqYWMgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSAnQSc6CisJCSphYyA9IEFfQUxUQ0hBUlNFVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3YnOgorCQlpZiAoKmtjID09IDApCisJCSAgICAqa2MgPSBTSVpFT0YoYXR0cnNfdG9fdGVzdCkgLSAxOworCQllbHNlCisJCSAgICAqa2MgLT0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1YnOgorCQkqa2MgKz0gMTsKKwkJaWYgKCprYyA+PSBTSVpFT0YoYXR0cnNfdG9fdGVzdCkpCisJCSAgICAqa2MgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSAnPCc6CisJCXdpZGVfYWRqdXN0X2F0dHJfc3RyaW5nKC0xKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJz4nOgorCQl3aWRlX2FkanVzdF9hdHRyX3N0cmluZygxKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgY2FzZV9RVUlUOgorCQlyZXN1bHQgPSBGQUxTRTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWVycm9yID0gY3ljbGVfY29sb3JfYXR0cihjaCwgZmcsIGJnLCB0eCk7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0gd2hpbGUgKGVycm9yKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAord2lkZV9hdHRyX3Rlc3Qodm9pZCkKKy8qIHRlc3QgdGV4dCBhdHRyaWJ1dGVzIHVzaW5nIHdpZGUtY2hhcmFjdGVyIGNhbGxzICovCit7CisgICAgaW50IG47CisgICAgaW50IHNraXAgPSBnZXRfeG1jKCk7CisgICAgc2hvcnQgZmcgPSBDT0xPUl9CTEFDSzsJLyogY29sb3IgcGFpciAwIGlzIHNwZWNpYWwgKi8KKyAgICBzaG9ydCBiZyA9IENPTE9SX0JMQUNLOworICAgIHNob3J0IHR4ID0gLTE7CisgICAgaW50IGFjID0gMDsKKyAgICB1bnNpZ25lZCBqLCBrOworCisgICAgaWYgKHNraXAgPCAwKQorCXNraXAgPSAwOworCisgICAgbiA9IHNraXA7CQkJLyogbWFrZSBpdCBlYXN5ICovCisgICAgayA9IFNJWkVPRihhdHRyc190b190ZXN0KSAtIDE7CisgICAgd2lkZV9pbml0X2F0dHJfc3RyaW5nKCk7CisKKyAgICBkbyB7CisJaW50IHJvdyA9IDI7CisJc2hvcnQgcGFpciA9IDA7CisJc2hvcnQgZXh0cmFzID0gMDsKKworCWlmICh1c2VfY29sb3JzKSB7CisJICAgIHBhaXIgPSAoc2hvcnQpIChmZyAhPSBDT0xPUl9CTEFDSyB8fCBiZyAhPSBDT0xPUl9CTEFDSyk7CisJICAgIGlmIChwYWlyICE9IDApIHsKKwkJcGFpciA9IDE7CisJCWlmIChpbml0X3BhaXIocGFpciwgZmcsIGJnKSA9PSBFUlIpIHsKKwkJICAgIGJlZXAoKTsKKwkJfQorCSAgICB9CisJICAgIGV4dHJhcyA9IHBhaXI7CisJICAgIGlmICh0eCA+PSAwKSB7CisJCWV4dHJhcyA9IDI7CisJCWlmIChpbml0X3BhaXIoZXh0cmFzLCB0eCwgYmcpID09IEVSUikgeworCQkgICAgYmVlcCgpOworCQl9CisJICAgIH0KKwl9CisJc2V0X3dpZGVfYmFja2dyb3VuZChwYWlyKTsKKwllcmFzZSgpOworCisJYm94X3NldChzdGRzY3IsIDAsIDApOworCW12YWRkc3RyKDAsIDIwLCAiQ2hhcmFjdGVyIGF0dHJpYnV0ZSB0ZXN0IGRpc3BsYXkiKTsKKworCWZvciAoaiA9IDA7IGogPCBTSVpFT0YoYXR0cnNfdG9fdGVzdCk7ICsraikgeworCSAgICByb3cgPSB3aWRlX3Nob3dfYXR0cihyb3csIG4sIGogPT0gaywKKwkJCQkgYWMgfAorCQkJCSBhdHRyc190b190ZXN0W2pdLmF0dHIgfAorCQkJCSBhdHRyc190b190ZXN0W2tdLmF0dHIsCisJCQkJIGV4dHJhcywKKwkJCQkgYXR0cnNfdG9fdGVzdFtqXS5uYW1lKTsKKwl9CisKKwltdnByaW50dyhyb3csIDgsCisJCSAiVGhpcyB0ZXJtaW5hbCBkb2VzICVzaGF2ZSB0aGUgbWFnaWMtY29va2llIGdsaXRjaCIsCisJCSBnZXRfeG1jKCkgPiAtMSA/ICIiIDogIm5vdCAiKTsKKwltdnByaW50dyhyb3cgKyAxLCA4LCAiRW50ZXIgJz8nIGZvciBoZWxwLiIpOworCXNob3dfY29sb3JfYXR0cihmZywgYmcsIHR4KTsKKwlwcmludHcoIiAgQUNTICglZCkiLCBhYyAhPSAwKTsKKworCXJlZnJlc2goKTsKKyAgICB9IHdoaWxlICh3aWRlX2F0dHJfZ2V0YygmbiwgJmZnLCAmYmcsICZ0eCwgJmFjLCAmaykpOworCisgICAgc2V0X3dpZGVfYmFja2dyb3VuZCgwKTsKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29sb3Igc3VwcG9ydCB0ZXN0cworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgTkNVUlNFU19DT05TVCBjaGFyICp0aGVfY29sb3JfbmFtZXNbXSA9Cit7CisgICAgImJsYWNrIiwKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJ5ZWxsb3ciLAorICAgICJibHVlIiwKKyAgICAibWFnZW50YSIsCisgICAgImN5YW4iLAorICAgICJ3aGl0ZSIsCisgICAgIkJMQUNLIiwKKyAgICAiUkVEIiwKKyAgICAiR1JFRU4iLAorICAgICJZRUxMT1ciLAorICAgICJCTFVFIiwKKyAgICAiTUFHRU5UQSIsCisgICAgIkNZQU4iLAorICAgICJXSElURSIKK307CisKK3N0YXRpYyB2b2lkCitzaG93X2NvbG9yX25hbWUoaW50IHksIGludCB4LCBpbnQgY29sb3IsIGJvb2wgd2lkZSkKK3sKKyAgICBpZiAobW92ZSh5LCB4KSAhPSBFUlIpIHsKKwljaGFyIHRlbXBbODBdOworCWludCB3aWR0aCA9IDg7CisKKwlpZiAod2lkZSkgeworCSAgICBzcHJpbnRmKHRlbXAsICIlMDJkIiwgY29sb3IpOworCSAgICB3aWR0aCA9IDQ7CisJfSBlbHNlIGlmIChjb2xvciA+PSA4KSB7CisJICAgIHNwcmludGYodGVtcCwgIlslMDJkXSIsIGNvbG9yKTsKKwl9IGVsc2UgeworCSAgICBzdHJjcHkodGVtcCwgdGhlX2NvbG9yX25hbWVzW2NvbG9yXSk7CisJfQorCXByaW50dygiJS0qLipzIiwgd2lkdGgsIHdpZHRoLCB0ZW1wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjb2xvcl9sZWdlbmQoV0lORE9XICpoZWxwd2luLCBib29sIHdpZGUpCit7CisgICAgaW50IHJvdyA9IDE7CisgICAgaW50IGNvbCA9IDE7CisKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiRVNDIHRvIGV4aXQuIik7CisgICAgKytyb3c7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIlVzZSB1cC9kb3duIGFycm93IHRvIHNjcm9sbCB0aHJvdWdoIHRoZSBkaXNwbGF5IGlmIGl0IGlzIik7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgImxvbmdlciB0aGFuIG9uZSBzY3JlZW4uIENvbnRyb2wvTiBhbmQgQ29udHJvbC9QIGNhbiBiZSB1c2VkIik7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgImluIHBsYWNlIG9mIHVwL2Rvd24gYXJyb3cuICBVc2UgcGFnZXVwL3BhZ2Vkb3duIHRvIHNjcm9sbCBhIik7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgImZ1bGwgc2NyZWVuOyBjb250cm9sL0IgYW5kIGNvbnRyb2wvRiBjYW4gYmUgdXNlZCBoZXJlLiIpOworICAgICsrcm93OworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICJUb2dnbGVzOiIpOworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIGEvQSAgICAgdG9nZ2xlIGFsdGNoYXJzZXQgb2ZmL29uIik7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIiAgYi9CICAgICB0b2dnbGUgYm9sZCBvZmYvb24iKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiICBuL04gICAgIHRvZ2dsZSB0ZXh0L251bWJlciBvbi9vZmYiKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiICB3L1cgICAgIHRvZ2dsZSB3aWR0aCBiZXR3ZWVuIDgvMTYgY29sb3JzIik7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICBpZiAod2lkZSkgeworCW12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCQkgICJXaWRlIGNoYXJhY3RlcnM6Iik7CisJbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJCSAgIiAgeC9YICAgICB0b2dnbGUgdGV4dCBiZXR3ZWVuIEFTQ0lJIGFuZCB3aWRlLWNoYXJhY3RlciIpOworICAgIH0KKyNlbHNlCisgICAgKHZvaWQpIHdpZGU7CisjZW5kaWYKK30KKworI2RlZmluZSBzZXRfY29sb3JfdGVzdChuYW1lLCB2YWx1ZSkgaWYgKG5hbWUgIT0gdmFsdWUpIHsgbmFtZSA9IHZhbHVlOyBiYXNlX3JvdyA9IDA7IH0KKworLyogZ2VuZXJhdGUgYSBjb2xvciB0ZXN0IHBhdHRlcm4gKi8KK3N0YXRpYyB2b2lkCitjb2xvcl90ZXN0KHZvaWQpCit7CisgICAgc2hvcnQgaTsKKyAgICBpbnQgdG9wID0gMCwgd2lkdGg7CisgICAgaW50IGJhc2Vfcm93ID0gMDsKKyAgICBpbnQgZ3JpZF90b3AgPSB0b3AgKyAzOworICAgIGludCBwYWdlX3NpemUgPSAoTElORVMgLSBncmlkX3RvcCk7CisgICAgaW50IHBhaXJzX21heCA9IFBBSVJfTlVNQkVSKEFfQ09MT1IpICsgMTsKKyAgICBpbnQgcm93X2xpbWl0OworICAgIGludCBwZXJfcm93OworICAgIGNoYXIgbnVtYmVyZWRbODBdOworICAgIGNvbnN0IGNoYXIgKmhlbGxvOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworICAgIGJvb2wgb3B0X2Fjc2MgPSBGQUxTRTsKKyAgICBib29sIG9wdF9ib2xkID0gRkFMU0U7CisgICAgYm9vbCBvcHRfd2lkZSA9IEZBTFNFOworICAgIGJvb2wgb3B0X251bXMgPSBGQUxTRTsKKyAgICBXSU5ET1cgKmhlbHB3aW47CisKKyAgICBpZiAocGFpcnNfbWF4ID4gQ09MT1JfUEFJUlMpCisJcGFpcnNfbWF4ID0gQ09MT1JfUEFJUlM7CisKKyAgICB3aGlsZSAoIWRvbmUpIHsKKwlpbnQgc2hvd24gPSAwOworCisJLyogdGhpcyBhc3N1bWVzIGFuIDgwLWNvbHVtbiBsaW5lICovCisJaWYgKG9wdF93aWRlKSB7CisJICAgIHdpZHRoID0gNDsKKwkgICAgaGVsbG8gPSAiVGVzdCI7CisJICAgIHBlcl9yb3cgPSAoQ09MT1JTID4gOCkgPyAxNiA6IDg7CisJfSBlbHNlIHsKKwkgICAgd2lkdGggPSA4OworCSAgICBoZWxsbyA9ICJIZWxsbyI7CisJICAgIHBlcl9yb3cgPSA4OworCX0KKworCXJvd19saW1pdCA9IChwYWlyc19tYXggKyBwZXJfcm93IC0gMSkgLyBwZXJfcm93OworCisJbW92ZSgwLCAwKTsKKwkodm9pZCkgcHJpbnR3KCJUaGVyZSBhcmUgJWQgY29sb3IgcGFpcnMgYW5kICVkIGNvbG9yc1xuIiwKKwkJICAgICAgcGFpcnNfbWF4LCBDT0xPUlMpOworCisJY2xydG9ib3QoKTsKKwkodm9pZCkgbXZwcmludHcodG9wICsgMSwgMCwKKwkJCSIlZHglZCBtYXRyaXggb2YgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbG9ycywgYm9sZCAqJXMqXG4iLAorCQkJcm93X2xpbWl0LAorCQkJcGVyX3JvdywKKwkJCW9wdF9ib2xkID8gIm9uIiA6ICJvZmYiKTsKKworCS8qIHNob3cgY29sb3IgbmFtZXMvbnVtYmVycyBhY3Jvc3MgdGhlIHRvcCAqLworCWZvciAoaSA9IDA7IGkgPCBwZXJfcm93OyBpKyspCisJICAgIHNob3dfY29sb3JfbmFtZSh0b3AgKyAyLCAoaSArIDEpICogd2lkdGgsIGksIG9wdF93aWRlKTsKKworCS8qIHNob3cgYSBncmlkIG9mIGNvbG9ycywgd2l0aCBjb2xvciBuYW1lcy8gbnVtYmVycyBvbiB0aGUgbGVmdCAqLworCWZvciAoaSA9IChzaG9ydCkgKGJhc2Vfcm93ICogcGVyX3Jvdyk7IGkgPCBwYWlyc19tYXg7IGkrKykgeworCSAgICBpbnQgcm93ID0gZ3JpZF90b3AgKyAoaSAvIHBlcl9yb3cpIC0gYmFzZV9yb3c7CisJICAgIGludCBjb2wgPSAoaSAlIHBlcl9yb3cgKyAxKSAqIHdpZHRoOworCSAgICBzaG9ydCBwYWlyID0gaTsKKworCSAgICBpZiAocm93ID49IDAgJiYgbW92ZShyb3csIGNvbCkgIT0gRVJSKSB7CisJCXNob3J0IGZnID0gKHNob3J0KSAoaSAlIENPTE9SUyk7CisJCXNob3J0IGJnID0gKHNob3J0KSAoaSAvIENPTE9SUyk7CisKKwkJaW5pdF9wYWlyKHBhaXIsIGZnLCBiZyk7CisJCWF0dHJvbigoYXR0cl90KSBDT0xPUl9QQUlSKHBhaXIpKTsKKwkJaWYgKG9wdF9hY3NjKQorCQkgICAgYXR0cm9uKChhdHRyX3QpIEFfQUxUQ0hBUlNFVCk7CisJCWlmIChvcHRfYm9sZCkKKwkJICAgIGF0dHJvbigoYXR0cl90KSBBX0JPTEQpOworCisJCWlmIChvcHRfbnVtcykgeworCQkgICAgc3ByaW50ZihudW1iZXJlZCwgInslMDJYfSIsIGkpOworCQkgICAgaGVsbG8gPSBudW1iZXJlZDsKKwkJfQorCQlwcmludHcoIiUtKi4qcyIsIHdpZHRoLCB3aWR0aCwgaGVsbG8pOworCQlhdHRyc2V0KEFfTk9STUFMKTsKKworCQlpZiAoKGkgJSBwZXJfcm93KSA9PSAwICYmIChpICUgQ09MT1JTKSA9PSAwKSB7CisJCSAgICBzaG93X2NvbG9yX25hbWUocm93LCAwLCBpIC8gQ09MT1JTLCBvcHRfd2lkZSk7CisJCX0KKwkJKytzaG93bjsKKwkgICAgfSBlbHNlIGlmIChzaG93bikgeworCQlicmVhazsKKwkgICAgfQorCX0KKworCXN3aXRjaCAod0dldGNoYXIoc3Rkc2NyKSkgeworCWNhc2UgJ2EnOgorCSAgICBvcHRfYWNzYyA9IEZBTFNFOworCSAgICBicmVhazsKKwljYXNlICdBJzoKKwkgICAgb3B0X2Fjc2MgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdiJzoKKwkgICAgb3B0X2JvbGQgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnQic6CisJICAgIG9wdF9ib2xkID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CisJICAgIG9wdF9udW1zID0gRkFMU0U7CisJICAgIGJyZWFrOworCWNhc2UgJ04nOgorCSAgICBvcHRfbnVtcyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgY2FzZV9RVUlUOgorCSAgICBkb25lID0gVFJVRTsKKwkgICAgY29udGludWU7CisJY2FzZSAndyc6CisJICAgIHNldF9jb2xvcl90ZXN0KG9wdF93aWRlLCBGQUxTRSk7CisJICAgIGJyZWFrOworCWNhc2UgJ1cnOgorCSAgICBzZXRfY29sb3JfdGVzdChvcHRfd2lkZSwgVFJVRSk7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgncCcpOgorCWNhc2UgS0VZX1VQOgorCSAgICBpZiAoYmFzZV9yb3cgPD0gMCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSB7CisJCWJhc2Vfcm93IC09IDE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCduJyk6CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaWYgKGJhc2Vfcm93ICsgcGFnZV9zaXplID49IHJvd19saW1pdCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSB7CisJCWJhc2Vfcm93ICs9IDE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdiJyk6CisJY2FzZSBLRVlfUFJFVklPVVM6CisJY2FzZSBLRVlfUFBBR0U6CisJICAgIGlmIChiYXNlX3JvdyA8PSAwKSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIHsKKwkJYmFzZV9yb3cgLT0gKHBhZ2Vfc2l6ZSAtIDEpOworCQlpZiAoYmFzZV9yb3cgPCAwKQorCQkgICAgYmFzZV9yb3cgPSAwOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnZicpOgorCWNhc2UgS0VZX05FWFQ6CisJY2FzZSBLRVlfTlBBR0U6CisJICAgIGlmIChiYXNlX3JvdyArIHBhZ2Vfc2l6ZSA+PSByb3dfbGltaXQpIHsKKwkJYmVlcCgpOworCSAgICB9IGVsc2UgeworCQliYXNlX3JvdyArPSBwYWdlX3NpemUgLSAxOworCQlpZiAoYmFzZV9yb3cgKyBwYWdlX3NpemUgPj0gcm93X2xpbWl0KSB7CisJCSAgICBiYXNlX3JvdyA9IHJvd19saW1pdCAtIHBhZ2Vfc2l6ZSAtIDE7CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICc/JzoKKwkgICAgaWYgKChoZWxwd2luID0gbmV3d2luKExJTkVTIC0gMSwgQ09MUyAtIDIsIDAsIDApKSAhPSAwKSB7CisJCWJveChoZWxwd2luLCAwLCAwKTsKKwkJY29sb3JfbGVnZW5kKGhlbHB3aW4sIEZBTFNFKTsKKwkJd0dldGNoYXIoaGVscHdpbik7CisJCWRlbHdpbihoZWxwd2luKTsKKwkgICAgfQorCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGNvbnRpbnVlOworCX0KKyAgICB9CisKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKy8qIGdlbmVyYXRlIGEgY29sb3IgdGVzdCBwYXR0ZXJuICovCitzdGF0aWMgdm9pZAord2lkZV9jb2xvcl90ZXN0KHZvaWQpCit7CisgICAgaW50IGM7CisgICAgaW50IGk7CisgICAgaW50IHRvcCA9IDAsIHdpZHRoOworICAgIGludCBiYXNlX3JvdyA9IDA7CisgICAgaW50IGdyaWRfdG9wID0gdG9wICsgMzsKKyAgICBpbnQgcGFnZV9zaXplID0gKExJTkVTIC0gZ3JpZF90b3ApOworICAgIGludCBwYWlyc19tYXggPSBDT0xPUl9QQUlSUzsKKyAgICBpbnQgcm93X2xpbWl0OworICAgIGludCBwZXJfcm93OworICAgIGNoYXIgbnVtYmVyZWRbODBdOworICAgIGNvbnN0IGNoYXIgKmhlbGxvOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworICAgIGJvb2wgb3B0X2Fjc2MgPSBGQUxTRTsKKyAgICBib29sIG9wdF9ib2xkID0gRkFMU0U7CisgICAgYm9vbCBvcHRfd2lkZSA9IEZBTFNFOworICAgIGJvb2wgb3B0X251bXMgPSBGQUxTRTsKKyAgICBib29sIG9wdF94Y2hyID0gRkFMU0U7CisgICAgd2NoYXJfdCBidWZmZXJbMTBdOworICAgIFdJTkRPVyAqaGVscHdpbjsKKworICAgIHdoaWxlICghZG9uZSkgeworCWludCBzaG93biA9IDA7CisKKwkvKiB0aGlzIGFzc3VtZXMgYW4gODAtY29sdW1uIGxpbmUgKi8KKwlpZiAob3B0X3dpZGUpIHsKKwkgICAgd2lkdGggPSA0OworCSAgICBoZWxsbyA9ICJUZXN0IjsKKwkgICAgcGVyX3JvdyA9IChDT0xPUlMgPiA4KSA/IDE2IDogODsKKwl9IGVsc2UgeworCSAgICB3aWR0aCA9IDg7CisJICAgIGhlbGxvID0gIkhlbGxvIjsKKwkgICAgcGVyX3JvdyA9IDg7CisJfQorCWlmIChvcHRfeGNocikgeworCSAgICBtYWtlX2Z1bGx3aWR0aF90ZXh0KGJ1ZmZlciwgaGVsbG8pOworCSAgICB3aWR0aCAqPSAyOworCSAgICBwZXJfcm93IC89IDI7CisJfSBlbHNlIHsKKwkgICAgbWFrZV9uYXJyb3dfdGV4dChidWZmZXIsIGhlbGxvKTsKKwl9CisKKwlyb3dfbGltaXQgPSAocGFpcnNfbWF4ICsgcGVyX3JvdyAtIDEpIC8gcGVyX3JvdzsKKworCW1vdmUoMCwgMCk7CisJKHZvaWQpIHByaW50dygiVGhlcmUgYXJlICVkIGNvbG9yIHBhaXJzIGFuZCAlZCBjb2xvcnNcbiIsCisJCSAgICAgIHBhaXJzX21heCwgQ09MT1JTKTsKKworCWNscnRvYm90KCk7CisJKHZvaWQpIG12cHJpbnR3KHRvcCArIDEsIDAsCisJCQkiJWR4JWQgbWF0cml4IG9mIGZvcmVncm91bmQvYmFja2dyb3VuZCBjb2xvcnMsIGJvbGQgKiVzKlxuIiwKKwkJCXJvd19saW1pdCwKKwkJCXBlcl9yb3csCisJCQlvcHRfYm9sZCA/ICJvbiIgOiAib2ZmIik7CisKKwkvKiBzaG93IGNvbG9yIG5hbWVzL251bWJlcnMgYWNyb3NzIHRoZSB0b3AgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGVyX3JvdzsgaSsrKQorCSAgICBzaG93X2NvbG9yX25hbWUodG9wICsgMiwgKGkgKyAxKSAqIHdpZHRoLCBpLCBvcHRfd2lkZSk7CisKKwkvKiBzaG93IGEgZ3JpZCBvZiBjb2xvcnMsIHdpdGggY29sb3IgbmFtZXMvIG51bWJlcnMgb24gdGhlIGxlZnQgKi8KKwlmb3IgKGkgPSAoYmFzZV9yb3cgKiBwZXJfcm93KTsgaSA8IHBhaXJzX21heDsgaSsrKSB7CisJICAgIGludCByb3cgPSBncmlkX3RvcCArIChpIC8gcGVyX3JvdykgLSBiYXNlX3JvdzsKKwkgICAgaW50IGNvbCA9IChpICUgcGVyX3JvdyArIDEpICogd2lkdGg7CisJICAgIHNob3J0IHBhaXIgPSAoc2hvcnQpIGk7CisKKwkgICAgaWYgKHJvdyA+PSAwICYmIG1vdmUocm93LCBjb2wpICE9IEVSUikgeworCQlpbml0X3BhaXIocGFpciwgKHNob3J0KSAoaSAlIENPTE9SUyksIChzaG9ydCkgKGkgLyBDT0xPUlMpKTsKKwkJY29sb3Jfc2V0KHBhaXIsIE5VTEwpOworCQlpZiAob3B0X2Fjc2MpCisJCSAgICBhdHRyX29uKChhdHRyX3QpIEFfQUxUQ0hBUlNFVCwgTlVMTCk7CisJCWlmIChvcHRfYm9sZCkKKwkJICAgIGF0dHJfb24oKGF0dHJfdCkgQV9CT0xELCBOVUxMKTsKKworCQlpZiAob3B0X251bXMpIHsKKwkJICAgIHNwcmludGYobnVtYmVyZWQsICJ7JTAyWH0iLCBpKTsKKwkJICAgIGlmIChvcHRfeGNocikgeworCQkJbWFrZV9mdWxsd2lkdGhfdGV4dChidWZmZXIsIG51bWJlcmVkKTsKKwkJICAgIH0gZWxzZSB7CisJCQltYWtlX25hcnJvd190ZXh0KGJ1ZmZlciwgbnVtYmVyZWQpOworCQkgICAgfQorCQl9CisJCWFkZG53c3RyKGJ1ZmZlciwgd2lkdGgpOworCQlhdHRyX3NldChBX05PUk1BTCwgMCwgTlVMTCk7CisKKwkJaWYgKChpICUgcGVyX3JvdykgPT0gMCAmJiAoaSAlIENPTE9SUykgPT0gMCkgeworCQkgICAgc2hvd19jb2xvcl9uYW1lKHJvdywgMCwgaSAvIENPTE9SUywgb3B0X3dpZGUpOworCQl9CisJCSsrc2hvd247CisJICAgIH0gZWxzZSBpZiAoc2hvd24pIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwlzd2l0Y2ggKGMgPSB3R2V0Y2hhcihzdGRzY3IpKSB7CisJY2FzZSAnYSc6CisJICAgIG9wdF9hY3NjID0gRkFMU0U7CisJICAgIGJyZWFrOworCWNhc2UgJ0EnOgorCSAgICBvcHRfYWNzYyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2InOgorCSAgICBvcHRfYm9sZCA9IEZBTFNFOworCSAgICBicmVhazsKKwljYXNlICdCJzoKKwkgICAgb3B0X2JvbGQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgb3B0X251bXMgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnTic6CisJICAgIG9wdF9udW1zID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSBjYXNlX1FVSVQ6CisJICAgIGRvbmUgPSBUUlVFOworCSAgICBjb250aW51ZTsKKwljYXNlICd3JzoKKwkgICAgc2V0X2NvbG9yX3Rlc3Qob3B0X3dpZGUsIEZBTFNFKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVyc6CisJICAgIHNldF9jb2xvcl90ZXN0KG9wdF93aWRlLCBUUlVFKTsKKwkgICAgYnJlYWs7CisJY2FzZSAneCc6CisJICAgIG9wdF94Y2hyID0gRkFMU0U7CisJICAgIGJyZWFrOworCWNhc2UgJ1gnOgorCSAgICBvcHRfeGNociA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgncCcpOgorCWNhc2UgS0VZX1VQOgorCSAgICBpZiAoYmFzZV9yb3cgPD0gMCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSB7CisJCWJhc2Vfcm93IC09IDE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCduJyk6CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaWYgKGJhc2Vfcm93ICsgcGFnZV9zaXplID49IHJvd19saW1pdCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSB7CisJCWJhc2Vfcm93ICs9IDE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdiJyk6CisJY2FzZSBLRVlfUFJFVklPVVM6CisJY2FzZSBLRVlfUFBBR0U6CisJICAgIGlmIChiYXNlX3JvdyA8PSAwKSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIHsKKwkJYmFzZV9yb3cgLT0gKHBhZ2Vfc2l6ZSAtIDEpOworCQlpZiAoYmFzZV9yb3cgPCAwKQorCQkgICAgYmFzZV9yb3cgPSAwOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnZicpOgorCWNhc2UgS0VZX05FWFQ6CisJY2FzZSBLRVlfTlBBR0U6CisJICAgIGlmIChiYXNlX3JvdyArIHBhZ2Vfc2l6ZSA+PSByb3dfbGltaXQpIHsKKwkJYmVlcCgpOworCSAgICB9IGVsc2UgeworCQliYXNlX3JvdyArPSBwYWdlX3NpemUgLSAxOworCQlpZiAoYmFzZV9yb3cgKyBwYWdlX3NpemUgPj0gcm93X2xpbWl0KSB7CisJCSAgICBiYXNlX3JvdyA9IHJvd19saW1pdCAtIHBhZ2Vfc2l6ZSAtIDE7CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICc/JzoKKwkgICAgaWYgKChoZWxwd2luID0gbmV3d2luKExJTkVTIC0gMSwgQ09MUyAtIDIsIDAsIDApKSAhPSAwKSB7CisJCWJveChoZWxwd2luLCAwLCAwKTsKKwkJY29sb3JfbGVnZW5kKGhlbHB3aW4sIFRSVUUpOworCQl3R2V0Y2hhcihoZWxwd2luKTsKKwkJZGVsd2luKGhlbHB3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgY29udGludWU7CisJfQorICAgIH0KKworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisjZW5kaWYgLyogVVNFX1dJREVDX1NVUFBPUlQgKi8KKworc3RhdGljIHZvaWQKK2NoYW5nZV9jb2xvcihzaG9ydCBjdXJyZW50LCBpbnQgZmllbGQsIGludCB2YWx1ZSwgaW50IHVzZWJhc2UpCit7CisgICAgc2hvcnQgcmVkLCBncmVlbiwgYmx1ZTsKKworICAgIGNvbG9yX2NvbnRlbnQoY3VycmVudCwgJnJlZCwgJmdyZWVuLCAmYmx1ZSk7CisKKyAgICBzd2l0Y2ggKGZpZWxkKSB7CisgICAgY2FzZSAwOgorCXJlZCA9IChzaG9ydCkgKHVzZWJhc2UgPyAocmVkICsgdmFsdWUpIDogdmFsdWUpOworCWJyZWFrOworICAgIGNhc2UgMToKKwlncmVlbiA9IChzaG9ydCkgKHVzZWJhc2UgPyAoZ3JlZW4gKyB2YWx1ZSkgOiB2YWx1ZSk7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCWJsdWUgPSAoc2hvcnQpICh1c2ViYXNlID8gKGJsdWUgKyB2YWx1ZSkgOiB2YWx1ZSk7CisJYnJlYWs7CisgICAgfQorCisgICAgaWYgKGluaXRfY29sb3IoY3VycmVudCwgcmVkLCBncmVlbiwgYmx1ZSkgPT0gRVJSKQorCWJlZXAoKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRfYWxsX2NvbG9ycyh2b2lkKQoreworICAgIHNob3J0IGM7CisKKyAgICBmb3IgKGMgPSAwOyBjIDwgQ09MT1JTOyArK2MpCisJaW5pdF9jb2xvcihjLAorCQkgICBhbGxfY29sb3JzW2NdLnJlZCwKKwkJICAgYWxsX2NvbG9yc1tjXS5ncmVlbiwKKwkJICAgYWxsX2NvbG9yc1tjXS5ibHVlKTsKK30KKworI2RlZmluZSBzY2FsZWRfcmdiKG4pICgoMjU1ICogKG4pKSAvIDEwMDApCisKK3N0YXRpYyB2b2lkCitjb2xvcl9lZGl0KHZvaWQpCisvKiBkaXNwbGF5IHRoZSBjb2xvciB0ZXN0IHBhdHRlcm4sIHdpdGhvdXQgdHJ5aW5nIHRvIGVkaXQgY29sb3JzICovCit7CisgICAgaW50IGk7CisgICAgaW50IGN1cnJlbnQgPSAwOworICAgIGludCB0aGlzX2MgPSAwLCB2YWx1ZSA9IDAsIGZpZWxkID0gMDsKKyAgICBpbnQgbGFzdF9jOworICAgIGludCB0b3BfY29sb3IgPSAwOworICAgIGludCBwYWdlX3NpemUgPSAoTElORVMgLSA2KTsKKworICAgIGluaXRfYWxsX2NvbG9ycygpOworICAgIHJlZnJlc2goKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfY29sb3JzOyBpKyspCisJaW5pdF9wYWlyKChzaG9ydCkgaSwgKHNob3J0KSBDT0xPUl9XSElURSwgKHNob3J0KSBpKTsKKworICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIk51bWJlcjogJWQiLCB2YWx1ZSk7CisKKyAgICBkbyB7CisJc2hvcnQgcmVkLCBncmVlbiwgYmx1ZTsKKworCWF0dHJvbihBX0JPTEQpOworCW12YWRkc3RyKDAsIDIwLCAiQ29sb3IgUkdCIFZhbHVlIEVkaXRpbmciKTsKKwlhdHRyb2ZmKEFfQk9MRCk7CisKKwlmb3IgKGkgPSAoc2hvcnQpIHRvcF9jb2xvcjsKKwkgICAgIChpIC0gdG9wX2NvbG9yIDwgcGFnZV9zaXplKQorCSAgICAgJiYgKGkgPCBtYXhfY29sb3JzKTsgaSsrKSB7CisJICAgIGNoYXIgbnVtZXJpY1s4MF07CisKKwkgICAgc3ByaW50ZihudW1lcmljLCAiWyVkXSIsIGkpOworCSAgICBtdnByaW50dygyICsgaSAtIHRvcF9jb2xvciwgMCwgIiVjICUtOHM6IiwKKwkJICAgICAoaSA9PSBjdXJyZW50ID8gJz4nIDogJyAnKSwKKwkJICAgICAoaSA8IChpbnQpIFNJWkVPRih0aGVfY29sb3JfbmFtZXMpCisJCSAgICAgID8gdGhlX2NvbG9yX25hbWVzW2ldIDogbnVtZXJpYykpOworCSAgICBhdHRyc2V0KENPTE9SX1BBSVIoaSkpOworCSAgICBhZGRzdHIoIiAgICAgICAgIik7CisJICAgIGF0dHJzZXQoQV9OT1JNQUwpOworCisJICAgIGNvbG9yX2NvbnRlbnQoKHNob3J0KSBpLCAmcmVkLCAmZ3JlZW4sICZibHVlKTsKKwkgICAgYWRkc3RyKCIgICBSID0gIik7CisJICAgIGlmIChjdXJyZW50ID09IGkgJiYgZmllbGQgPT0gMCkKKwkJYXR0cm9uKEFfU1RBTkRPVVQpOworCSAgICBwcmludHcoIiUwNGQiLCByZWQpOworCSAgICBpZiAoY3VycmVudCA9PSBpICYmIGZpZWxkID09IDApCisJCWF0dHJzZXQoQV9OT1JNQUwpOworCSAgICBhZGRzdHIoIiwgRyA9ICIpOworCSAgICBpZiAoY3VycmVudCA9PSBpICYmIGZpZWxkID09IDEpCisJCWF0dHJvbihBX1NUQU5ET1VUKTsKKwkgICAgcHJpbnR3KCIlMDRkIiwgZ3JlZW4pOworCSAgICBpZiAoY3VycmVudCA9PSBpICYmIGZpZWxkID09IDEpCisJCWF0dHJzZXQoQV9OT1JNQUwpOworCSAgICBhZGRzdHIoIiwgQiA9ICIpOworCSAgICBpZiAoY3VycmVudCA9PSBpICYmIGZpZWxkID09IDIpCisJCWF0dHJvbihBX1NUQU5ET1VUKTsKKwkgICAgcHJpbnR3KCIlMDRkIiwgYmx1ZSk7CisJICAgIGlmIChjdXJyZW50ID09IGkgJiYgZmllbGQgPT0gMikKKwkJYXR0cnNldChBX05PUk1BTCk7CisJICAgIGF0dHJzZXQoQV9OT1JNQUwpOworCSAgICBwcmludHcoIiAoICUzZCAlM2QgJTNkICkiLAorCQkgICBzY2FsZWRfcmdiKHJlZCksCisJCSAgIHNjYWxlZF9yZ2IoZ3JlZW4pLAorCQkgICBzY2FsZWRfcmdiKGJsdWUpKTsKKwl9CisKKwltdmFkZHN0cihMSU5FUyAtIDMsIDAsCisJCSAiVXNlIHVwL2Rvd24gdG8gc2VsZWN0IGEgY29sb3IsIGxlZnQvcmlnaHQgdG8gY2hhbmdlIGZpZWxkcy4iKTsKKwltdmFkZHN0cihMSU5FUyAtIDIsIDAsCisJCSAiTW9kaWZ5IGZpZWxkIGJ5IHR5cGluZyBubm49LCBubm4tLCBvciBubm4rLiAgPyBmb3IgaGVscC4iKTsKKworCW1vdmUoMiArIGN1cnJlbnQgLSB0b3BfY29sb3IsIDApOworCisJbGFzdF9jID0gdGhpc19jOworCXRoaXNfYyA9IEdldGNoYXIoKTsKKwlpZiAodGhpc19jIDwgMjU2ICYmIGlzZGlnaXQodGhpc19jKSAmJiAhaXNkaWdpdChsYXN0X2MpKQorCSAgICB2YWx1ZSA9IDA7CisKKwlzd2l0Y2ggKHRoaXNfYykgeworCWNhc2UgQ1RSTCgnYicpOgorCWNhc2UgS0VZX1BQQUdFOgorCSAgICBpZiAoY3VycmVudCA+IDApCisJCWN1cnJlbnQgLT0gKHBhZ2Vfc2l6ZSAtIDEpOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ2YnKToKKwljYXNlIEtFWV9OUEFHRToKKwkgICAgaWYgKGN1cnJlbnQgPCAobWF4X2NvbG9ycyAtIDEpKQorCQljdXJyZW50ICs9IChwYWdlX3NpemUgLSAxKTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdwJyk6CisJY2FzZSBLRVlfVVA6CisJICAgIGN1cnJlbnQgPSAoY3VycmVudCA9PSAwID8gKG1heF9jb2xvcnMgLSAxKSA6IGN1cnJlbnQgLSAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ24nKToKKwljYXNlIEtFWV9ET1dOOgorCSAgICBjdXJyZW50ID0gKGN1cnJlbnQgPT0gKG1heF9jb2xvcnMgLSAxKSA/IDAgOiBjdXJyZW50ICsgMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfUklHSFQ6CisJICAgIGZpZWxkID0gKGZpZWxkID09IDIgPyAwIDogZmllbGQgKyAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9MRUZUOgorCSAgICBmaWVsZCA9IChmaWVsZCA9PSAwID8gMiA6IGZpZWxkIC0gMSk7CisJICAgIGJyZWFrOworCisJY2FzZSAnMCc6CisJY2FzZSAnMSc6CisJY2FzZSAnMic6CisJY2FzZSAnMyc6CisJY2FzZSAnNCc6CisJY2FzZSAnNSc6CisJY2FzZSAnNic6CisJY2FzZSAnNyc6CisJY2FzZSAnOCc6CisJY2FzZSAnOSc6CisJICAgIHZhbHVlID0gdmFsdWUgKiAxMCArICh0aGlzX2MgLSAnMCcpOworCSAgICBicmVhazsKKworCWNhc2UgJysnOgorCSAgICBjaGFuZ2VfY29sb3IoKHNob3J0KSBjdXJyZW50LCBmaWVsZCwgdmFsdWUsIDEpOworCSAgICBicmVhazsKKworCWNhc2UgJy0nOgorCSAgICBjaGFuZ2VfY29sb3IoKHNob3J0KSBjdXJyZW50LCBmaWVsZCwgLXZhbHVlLCAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICc9JzoKKwkgICAgY2hhbmdlX2NvbG9yKChzaG9ydCkgY3VycmVudCwgZmllbGQsIHZhbHVlLCAwKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICc/JzoKKwkgICAgZXJhc2UoKTsKKwkgICAgUCgiICAgICAgICAgICAgICAgICAgICAgIFJHQiBWYWx1ZSBFZGl0aW5nIEhlbHAiKTsKKwkgICAgUCgiIik7CisJICAgIFAoIllvdSBhcmUgaW4gdGhlIFJHQiB2YWx1ZSBlZGl0b3IuICBVc2UgdGhlIGFycm93IGtleXMgdG8gc2VsZWN0IG9uZSBvZiIpOworCSAgICBQKCJ0aGUgZmllbGRzIGluIG9uZSBvZiB0aGUgUkdCIHRyaXBsZXMgb2YgdGhlIGN1cnJlbnQgY29sb3JzOyB0aGUgb25lIik7CisJICAgIFAoImN1cnJlbnRseSBzZWxlY3RlZCB3aWxsIGJlIHJldmVyc2UtdmlkZW8gaGlnaGxpZ2h0ZWQuIik7CisJICAgIFAoIiIpOworCSAgICBQKCJUbyBjaGFuZ2UgYSBmaWVsZCwgZW50ZXIgdGhlIGRpZ2l0cyBvZiB0aGUgbmV3IHZhbHVlOyB0aGV5IGFyZSBlY2hvZWQiKTsKKwkgICAgUCgiYXMgZW50ZXJlZC4gIEZpbmlzaCBieSB0eXBpbmcgYD0nLiAgVGhlIGNoYW5nZSB3aWxsIHRha2UgZWZmZWN0IGluc3RhbnRseS4iKTsKKwkgICAgUCgiVG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBhIHZhbHVlLCB1c2UgdGhlIHNhbWUgcHJvY2VkdXJlLCBidXQgZmluaXNoIik7CisJICAgIFAoIndpdGggYSBgKycgb3IgYC0nLiIpOworCSAgICBQKCIiKTsKKwkgICAgUCgiUHJlc3MgJ20nIHRvIGludm9rZSB0aGUgdG9wLWxldmVsIG1lbnUgd2l0aCB0aGUgY3VycmVudCBjb2xvciBzZXR0aW5ncy4iKTsKKwkgICAgUCgiVG8gcXVpdCwgZG8gRVNDIik7CisKKwkgICAgUGF1c2UoKTsKKwkgICAgZXJhc2UoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdtJzoKKwkgICAgZW5kd2luKCk7CisJICAgIG1haW5fbWVudShGQUxTRSk7CisJICAgIHJlZnJlc2goKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIGNhc2VfUVVJVDoKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKworCWlmIChjdXJyZW50IDwgMCkKKwkgICAgY3VycmVudCA9IDA7CisJaWYgKGN1cnJlbnQgPj0gbWF4X2NvbG9ycykKKwkgICAgY3VycmVudCA9IG1heF9jb2xvcnMgLSAxOworCWlmIChjdXJyZW50IDwgdG9wX2NvbG9yKQorCSAgICB0b3BfY29sb3IgPSBjdXJyZW50OworCWlmIChjdXJyZW50IC0gdG9wX2NvbG9yID49IHBhZ2Vfc2l6ZSkKKwkgICAgdG9wX2NvbG9yID0gY3VycmVudCAtIChwYWdlX3NpemUgLSAxKTsKKworCW12cHJpbnR3KExJTkVTIC0gMSwgMCwgIk51bWJlcjogJWQiLCB2YWx1ZSk7CisJY2xydG9lb2woKTsKKyAgICB9IHdoaWxlCisJKCFpc1F1aXQodGhpc19jKSk7CisKKyAgICBlcmFzZSgpOworCisgICAgLyoKKyAgICAgKiBuY3Vyc2VzIGRvZXMgbm90IHJlc2V0IGVhY2ggY29sb3IgaW5kaXZpZHVhbGx5IHdoZW4gY2FsbGluZyBlbmR3aW4oKS4KKyAgICAgKi8KKyAgICBpbml0X2FsbF9jb2xvcnMoKTsKKworICAgIGVuZHdpbigpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNvZnQta2V5IGxhYmVsIHRlc3QKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIFVTRV9TT0ZUS0VZUworCisjZGVmaW5lIFNMS19IRUxQIDE3CisjZGVmaW5lIFNMS19XT1JLIChTTEtfSEVMUCArIDMpCisKK3N0YXRpYyB2b2lkCitzbGtfaGVscCh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICp0YWJsZVtdID0KKyAgICB7CisJIkF2YWlsYWJsZSBjb21tYW5kcyBhcmU6IgorCSwiIgorCSwiXkwgICAgICAgICAtLSByZXBhaW50IHRoaXMgbWVzc2FnZSBhbmQgYWN0aXZhdGUgc29mdCBrZXlzIgorCSwiYS9kICAgICAgICAtLSBhY3RpdmF0ZS9kaXNhYmxlIHNvZnQga2V5cyIKKwksImMgICAgICAgICAgLS0gc2V0IGNlbnRlcmVkIGZvcm1hdCBmb3IgbGFiZWxzIgorCSwibCAgICAgICAgICAtLSBzZXQgbGVmdC1qdXN0aWZpZWQgZm9ybWF0IGZvciBsYWJlbHMiCisJLCJyICAgICAgICAgIC0tIHNldCByaWdodC1qdXN0aWZpZWQgZm9ybWF0IGZvciBsYWJlbHMiCisJLCJbMTIzNDU2NzhdIC0tIHNldCBsYWJlbDsgbGFiZWxzIGFyZSBudW1iZXJlZCAxIHRocm91Z2ggOCIKKwksImUgICAgICAgICAgLS0gZXJhc2Ugc3Rkc2NyIChzaG91bGQgbm90IGVyYXNlIGxhYmVscykiCisJLCJzICAgICAgICAgIC0tIHRlc3Qgc2Nyb2xsaW5nIG9mIHNob3J0ZW5lZCBzY3JlZW4iCisjaWYgSEFWRV9TTEtfQ09MT1IKKwksIkYvQiAgICAgICAgLS0gY3ljbGUgdGhyb3VnaCBmb3JlZ3JvdW5kL2JhY2tncm91bmQgY29sb3JzIgorI2VuZGlmCisJLCJFU0MgICAgICAgIC0tIHJldHVybiB0byBtYWluIG1lbnUiCisJLCIiCisJLCJOb3RlOiBpZiBhY3RpdmF0aW5nIHRoZSBzb2Z0IGtleXMgY2F1c2VzIHlvdXIgdGVybWluYWwgdG8gc2Nyb2xsIHVwIgorCSwib25lIGxpbmUsIHlvdXIgdGVybWluYWwgYXV0by1zY3JvbGxzIHdoZW4gYW55dGhpbmcgaXMgd3JpdHRlbiB0byB0aGUiCisJLCJsYXN0IHNjcmVlbiBwb3NpdGlvbi4gIFRoZSBuY3Vyc2VzIGNvZGUgZG9lcyBub3QgeWV0IGhhbmRsZSB0aGlzIgorCSwiZ3JhY2VmdWxseS4iCisgICAgfTsKKyAgICB1bnNpZ25lZCBqOworCisgICAgbW92ZSgyLCAwKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgU0laRU9GKHRhYmxlKTsgKytqKSB7CisJUCh0YWJsZVtqXSk7CisgICAgfQorICAgIHJlZnJlc2goKTsKK30KKworI2lmIEhBVkVfU0xLX0NPTE9SCitzdGF0aWMgdm9pZAorY2FsbF9zbGtfY29sb3Ioc2hvcnQgZmcsIHNob3J0IGJnKQoreworICAgIGluaXRfcGFpcigxLCBiZywgZmcpOworICAgIHNsa19jb2xvcigxKTsKKyAgICBtdnByaW50dyhTTEtfV09SSywgMCwgIkNvbG9ycyAlZC8lZFxuIiwgZmcsIGJnKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIHJlZnJlc2goKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorc2xrX3Rlc3Qodm9pZCkKKy8qIGV4ZXJjaXNlIHRoZSBzb2Z0IGtleXMgKi8KK3sKKyAgICBpbnQgYywgZm10ID0gMTsKKyAgICBjaGFyIGJ1Zls5XTsKKyAgICBjaGFyICpzOworI2lmIEhBVkVfU0xLX0NPTE9SCisgICAgc2hvcnQgZmcgPSBDT0xPUl9CTEFDSzsKKyAgICBzaG9ydCBiZyA9IENPTE9SX1dISVRFOworI2VuZGlmCisKKyAgICBjID0gQ1RSTCgnbCcpOworI2lmIEhBVkVfU0xLX0NPTE9SCisgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwljYWxsX3Nsa19jb2xvcihmZywgYmcpOworICAgIH0KKyNlbmRpZgorCisgICAgZG8geworCW1vdmUoMCwgMCk7CisJc3dpdGNoIChjKSB7CisJY2FzZSBDVFJMKCdsJyk6CisJICAgIGVyYXNlKCk7CisJICAgIGF0dHJvbihBX0JPTEQpOworCSAgICBtdmFkZHN0cigwLCAyMCwgIlNvZnQgS2V5IEV4ZXJjaXNlciIpOworCSAgICBhdHRyb2ZmKEFfQk9MRCk7CisKKwkgICAgc2xrX2hlbHAoKTsKKwkgICAgLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlICdhJzoKKwkgICAgc2xrX3Jlc3RvcmUoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdlJzoKKwkgICAgd2NsZWFyKHN0ZHNjcik7CisJICAgIGJyZWFrOworCisJY2FzZSAncyc6CisJICAgIG12cHJpbnR3KFNMS19XT1JLLCAwLCAiUHJlc3MgUSB0byBzdG9wIHRoZSBzY3JvbGxpbmctdGVzdDogIik7CisJICAgIHdoaWxlICgoYyA9IEdldGNoYXIoKSkgIT0gJ1EnICYmIChjICE9IEVSUikpCisJCWFkZGNoKChjaHR5cGUpIGMpOworCSAgICBicmVhazsKKworCWNhc2UgJ2QnOgorCSAgICBzbGtfY2xlYXIoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdsJzoKKwkgICAgZm10ID0gMDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdjJzoKKwkgICAgZm10ID0gMTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdyJzoKKwkgICAgZm10ID0gMjsKKwkgICAgYnJlYWs7CisKKwljYXNlICcxJzoKKwljYXNlICcyJzoKKwljYXNlICczJzoKKwljYXNlICc0JzoKKwljYXNlICc1JzoKKwljYXNlICc2JzoKKwljYXNlICc3JzoKKwljYXNlICc4JzoKKwkgICAgKHZvaWQpIG12YWRkc3RyKFNMS19XT1JLLCAwLCAiUGxlYXNlIGVudGVyIHRoZSBsYWJlbCB2YWx1ZTogIik7CisJICAgIHN0cmNweShidWYsICIiKTsKKwkgICAgaWYgKChzID0gc2xrX2xhYmVsKGMgLSAnMCcpKSAhPSAwKSB7CisJCXN0cm5jcHkoYnVmLCBzLCA4KTsKKwkgICAgfQorCSAgICB3R2V0c3RyaW5nKHN0ZHNjciwgYnVmLCA4KTsKKwkgICAgc2xrX3NldCgoYyAtICcwJyksIGJ1ZiwgZm10KTsKKwkgICAgc2xrX3JlZnJlc2goKTsKKwkgICAgbW92ZShTTEtfV09SSywgMCk7CisJICAgIGNscnRvYm90KCk7CisJICAgIGJyZWFrOworCisJY2FzZSBjYXNlX1FVSVQ6CisJICAgIGdvdG8gZG9uZTsKKworI2lmIEhBVkVfU0xLX0NPTE9SCisJY2FzZSAnRic6CisJICAgIGlmICh1c2VfY29sb3JzKSB7CisJCWZnID0gKHNob3J0KSAoKGZnICsgMSkgJSBDT0xPUlMpOworCQljYWxsX3Nsa19jb2xvcihmZywgYmcpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJ0InOgorCSAgICBpZiAodXNlX2NvbG9ycykgeworCQliZyA9IChzaG9ydCkgKChiZyArIDEpICUgQ09MT1JTKTsKKwkJY2FsbF9zbGtfY29sb3IoZmcsIGJnKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRQorCWNhc2UgS0VZX1JFU0laRToKKwkgICAgd25vdXRyZWZyZXNoKHN0ZHNjcik7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJfQorICAgIH0gd2hpbGUgKCFpc1F1aXQoYyA9IEdldGNoYXIoKSkpOworCisgIGRvbmU6CisgICAgc2xrX2NsZWFyKCk7CisgICAgZXJhc2UoKTsKKyAgICBlbmR3aW4oKTsKK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIFNMS0xFTiA4CitzdGF0aWMgdm9pZAord2lkZV9zbGtfdGVzdCh2b2lkKQorLyogZXhlcmNpc2UgdGhlIHNvZnQga2V5cyAqLworeworICAgIGludCBjLCBmbXQgPSAxOworICAgIHdjaGFyX3QgYnVmW1NMS0xFTiArIDFdOworICAgIGNoYXIgKnM7CisgICAgc2hvcnQgZmcgPSBDT0xPUl9CTEFDSzsKKyAgICBzaG9ydCBiZyA9IENPTE9SX1dISVRFOworCisgICAgYyA9IENUUkwoJ2wnKTsKKyAgICBpZiAodXNlX2NvbG9ycykgeworCWNhbGxfc2xrX2NvbG9yKGZnLCBiZyk7CisgICAgfQorICAgIGRvIHsKKwltb3ZlKDAsIDApOworCXN3aXRjaCAoYykgeworCWNhc2UgQ1RSTCgnbCcpOgorCSAgICBlcmFzZSgpOworCSAgICBhdHRyX29uKFdBX0JPTEQsIE5VTEwpOworCSAgICBtdmFkZHN0cigwLCAyMCwgIlNvZnQgS2V5IEV4ZXJjaXNlciIpOworCSAgICBhdHRyX29mZihXQV9CT0xELCBOVUxMKTsKKworCSAgICBzbGtfaGVscCgpOworCSAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgJ2EnOgorCSAgICBzbGtfcmVzdG9yZSgpOworCSAgICBicmVhazsKKworCWNhc2UgJ2UnOgorCSAgICB3Y2xlYXIoc3Rkc2NyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdzJzoKKwkgICAgbXZwcmludHcoU0xLX1dPUkssIDAsICJQcmVzcyBRIHRvIHN0b3AgdGhlIHNjcm9sbGluZy10ZXN0OiAiKTsKKwkgICAgd2hpbGUgKChjID0gR2V0Y2hhcigpKSAhPSAnUScgJiYgKGMgIT0gRVJSKSkKKwkJYWRkY2goKGNodHlwZSkgYyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnZCc6CisJICAgIHNsa19jbGVhcigpOworCSAgICBicmVhazsKKworCWNhc2UgJ2wnOgorCSAgICBmbXQgPSAwOworCSAgICBicmVhazsKKworCWNhc2UgJ2MnOgorCSAgICBmbXQgPSAxOworCSAgICBicmVhazsKKworCWNhc2UgJ3InOgorCSAgICBmbXQgPSAyOworCSAgICBicmVhazsKKworCWNhc2UgJzEnOgorCWNhc2UgJzInOgorCWNhc2UgJzMnOgorCWNhc2UgJzQnOgorCWNhc2UgJzUnOgorCWNhc2UgJzYnOgorCWNhc2UgJzcnOgorCWNhc2UgJzgnOgorCSAgICAodm9pZCkgbXZhZGRzdHIoU0xLX1dPUkssIDAsICJQbGVhc2UgZW50ZXIgdGhlIGxhYmVsIHZhbHVlOiAiKTsKKwkgICAgKmJ1ZiA9IDA7CisJICAgIGlmICgocyA9IHNsa19sYWJlbChjIC0gJzAnKSkgIT0gMCkgeworCQljaGFyICp0ZW1wID0gc3RyZHVwKHMpOworCQlzaXplX3QgdXNlZCA9IHN0cmxlbih0ZW1wKTsKKwkJc2l6ZV90IHdhbnQgPSBTTEtMRU47CisJCXNpemVfdCB0ZXN0OworI2lmbmRlZiBzdGF0ZV91bnVzZWQKKwkJbWJzdGF0ZV90IHN0YXRlOworI2VuZGlmCisKKwkJYnVmWzBdID0gTCdcMCc7CisJCXdoaWxlICh3YW50ID4gMCAmJiB1c2VkICE9IDApIHsKKwkJICAgIGNvbnN0IGNoYXIgKmJhc2UgPSBzOworCQkgICAgcmVzZXRfbWJ5dGVzKHN0YXRlKTsKKwkJICAgIHRlc3QgPSBjb3VudF9tYnl0ZXMoYmFzZSwgMCwgJnN0YXRlKTsKKwkJICAgIGlmICh0ZXN0ID09IChzaXplX3QpIC0xKSB7CisJCQl0ZW1wWy0tdXNlZF0gPSAwOworCQkgICAgfSBlbHNlIGlmICh0ZXN0ID4gd2FudCkgeworCQkJdGVtcFstLXVzZWRdID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlyZXNldF9tYnl0ZXMoc3RhdGUpOworCQkJdHJhbnNfbWJ5dGVzKGJ1ZiwgYmFzZSwgd2FudCwgJnN0YXRlKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWZyZWUodGVtcCk7CisJICAgIH0KKwkgICAgd0dldF93c3RyaW5nKHN0ZHNjciwgYnVmLCBTTEtMRU4pOworCSAgICBzbGtfd3NldCgoYyAtICcwJyksIGJ1ZiwgZm10KTsKKwkgICAgc2xrX3JlZnJlc2goKTsKKwkgICAgbW92ZShTTEtfV09SSywgMCk7CisJICAgIGNscnRvYm90KCk7CisJICAgIGJyZWFrOworCisJY2FzZSBjYXNlX1FVSVQ6CisJICAgIGdvdG8gZG9uZTsKKworCWNhc2UgJ0YnOgorCSAgICBpZiAodXNlX2NvbG9ycykgeworCQlmZyA9IChzaG9ydCkgKChmZyArIDEpICUgQ09MT1JTKTsKKwkJY2FsbF9zbGtfY29sb3IoZmcsIGJnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICdCJzoKKwkgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwkJYmcgPSAoc2hvcnQpICgoYmcgKyAxKSAlIENPTE9SUyk7CisJCWNhbGxfc2xrX2NvbG9yKGZnLCBiZyk7CisJICAgIH0KKwkgICAgYnJlYWs7CisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoS0VZX1JFU0laRSkgJiYgSEFWRV9XUkVTSVpFCisJY2FzZSBLRVlfUkVTSVpFOgorCSAgICB3bm91dHJlZnJlc2goc3Rkc2NyKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJfQorICAgIH0gd2hpbGUgKCFpc1F1aXQoYyA9IEdldGNoYXIoKSkpOworCisgIGRvbmU6CisgICAgc2xrX2NsZWFyKCk7CisgICAgZXJhc2UoKTsKKyAgICBlbmR3aW4oKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIFNMS19JTklUICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQWx0ZXJuYXRlIGNoYXJhY3Rlci1zZXQgc3R1ZmYKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICpJTkRFTlQtT0ZGKiAqLworc3RhdGljIHN0cnVjdCB7CisgICAgY2h0eXBlIGF0dHI7CisgICAgY29uc3QgY2hhciAqbmFtZTsKK30gYXR0cnNfdG9fY3ljbGVbXSA9IHsKKyAgICB7IEFfTk9STUFMLAkJIm5vcm1hbCIgfSwKKyAgICB7IEFfQk9MRCwJCSJib2xkIiB9LAorICAgIHsgQV9SRVZFUlNFLAkicmV2ZXJzZSIgfSwKKyAgICB7IEFfVU5ERVJMSU5FLAkidW5kZXJsaW5lIiB9LAorfTsKKy8qICpJTkRFTlQtT04qICovCisKK3N0YXRpYyBib29sCitjeWNsZV9hdHRyKGludCBjaCwgdW5zaWduZWQgKmF0X2NvZGUsIGNodHlwZSAqYXR0cikKK3sKKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAndic6CisJaWYgKCgqYXRfY29kZSArPSAxKSA+PSBTSVpFT0YoYXR0cnNfdG9fY3ljbGUpKQorCSAgICAqYXRfY29kZSA9IDA7CisJYnJlYWs7CisgICAgY2FzZSAnVic6CisJaWYgKCphdF9jb2RlID09IDEpCisJICAgICphdF9jb2RlID0gU0laRU9GKGF0dHJzX3RvX2N5Y2xlKSAtIDE7CisJZWxzZQorCSAgICAqYXRfY29kZSAtPSAxOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJcmVzdWx0ID0gRkFMU0U7CisJYnJlYWs7CisgICAgfQorICAgIGlmIChyZXN1bHQpCisJKmF0dHIgPSBhdHRyc190b19jeWNsZVsqYXRfY29kZV0uYXR0cjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbAorY3ljbGVfY29sb3JzKGludCBjaCwgaW50ICpmZywgaW50ICpiZywgc2hvcnQgKnBhaXIpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIGlmICh1c2VfY29sb3JzKSB7CisJcmVzdWx0ID0gVFJVRTsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnRic6CisJICAgIGlmICgoKmZnIC09IDEpIDwgMCkKKwkJKmZnID0gQ09MT1JTIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnZic6CisJICAgIGlmICgoKmZnICs9IDEpID49IENPTE9SUykKKwkJKmZnID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSAnQic6CisJICAgIGlmICgoKmJnIC09IDEpIDwgMCkKKwkJKmJnID0gQ09MT1JTIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYic6CisJICAgIGlmICgoKmJnICs9IDEpID49IENPTE9SUykKKwkJKmJnID0gMDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgcmVzdWx0ID0gRkFMU0U7CisJICAgIGJyZWFrOworCX0KKwlpZiAocmVzdWx0KSB7CisJICAgICpwYWlyID0gKHNob3J0KSAoKmZnICE9IENPTE9SX0JMQUNLIHx8ICpiZyAhPSBDT0xPUl9CTEFDSyk7CisJICAgIGlmICgqcGFpciAhPSAwKSB7CisJCSpwYWlyID0gMTsKKwkJaWYgKGluaXRfcGFpcigqcGFpciwgKHNob3J0KSAqZmcsIChzaG9ydCkgKmJnKSA9PSBFUlIpIHsKKwkJICAgIHJlc3VsdCA9IEZBTFNFOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIElTTyA2NDI5OiAgY29kZXMgMHg4MCB0byAweDlmIG1heSBiZSBjb250cm9sIGNoYXJhY3RlcnMgdGhhdCBjYXVzZSB0aGUKKyAqIHRlcm1pbmFsIHRvIHBlcmZvcm0gZnVuY3Rpb25zLiAgVGhlIHJlbWFpbmluZyBjb2RlcyBjYW4gYmUgZ3JhcGhpYy4KKyAqLworc3RhdGljIHZvaWQKK3Nob3dfdXBwZXJfY2hhcnModW5zaWduZWQgZmlyc3QsIGludCByZXBlYXQsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQoreworICAgIGJvb2wgQzEgPSAoZmlyc3QgPT0gMTI4KTsKKyAgICB1bnNpZ25lZCBjb2RlOworICAgIHVuc2lnbmVkIGxhc3QgPSBmaXJzdCArIDMxOworICAgIGludCByZXBseTsKKworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZwcmludHcoMCwgMjAsICJEaXNwbGF5IG9mICVzIENoYXJhY3RlciBDb2RlcyAlZCB0byAlZCIsCisJICAgICBDMSA/ICJDMSIgOiAiR1IiLCBmaXJzdCwgbGFzdCk7CisgICAgYXR0cm9mZihBX0JPTEQpOworICAgIHJlZnJlc2goKTsKKworICAgIGZvciAoY29kZSA9IGZpcnN0OyBjb2RlIDw9IGxhc3Q7IGNvZGUrKykgeworCWludCBjb3VudCA9IHJlcGVhdDsKKwlpbnQgcm93ID0gMiArICgoaW50KSAoY29kZSAtIGZpcnN0KSAlIDE2KTsKKwlpbnQgY29sID0gKChpbnQpIChjb2RlIC0gZmlyc3QpIC8gMTYpICogQ09MUyAvIDI7CisJY2hhciB0bXBbODBdOworCXNwcmludGYodG1wLCAiJTN1ICgweCV4KSIsIGNvZGUsIGNvZGUpOworCW12cHJpbnR3KHJvdywgY29sLCAiJSpzOiAiLCBDT0xTIC8gNCwgdG1wKTsKKworCWRvIHsKKwkgICAgaWYgKEMxKQorCQlub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisJICAgIGVjaG9jaGFyKGNvZGUgfCBhdHRyIHwgQ09MT1JfUEFJUihwYWlyKSk7CisJICAgIGlmIChDMSkgeworCQkvKiAoeWVzLCB0aGlzIF9pc18gY3J1ZGUpICovCisJCXdoaWxlICgocmVwbHkgPSBHZXRjaGFyKCkpICE9IEVSUikgeworCQkgICAgYWRkY2goVUNoYXIocmVwbHkpKTsKKwkJICAgIG5hcG1zKDEwKTsKKwkJfQorCQlub2RlbGF5KHN0ZHNjciwgRkFMU0UpOworCSAgICB9CisJfSB3aGlsZSAoLS1jb3VudCA+IDApOworICAgIH0KK30KKworI2RlZmluZSBQQ19DT0xTIDQKKworc3RhdGljIHZvaWQKK3Nob3dfcGNfY2hhcnMoaW50IHJlcGVhdCwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCit7CisgICAgdW5zaWduZWQgY29kZTsKKworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZwcmludHcoMCwgMjAsICJEaXNwbGF5IG9mIFBDIENoYXJhY3RlciBDb2RlcyIpOworICAgIGF0dHJvZmYoQV9CT0xEKTsKKyAgICByZWZyZXNoKCk7CisKKyAgICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgMTY7ICsrY29kZSkgeworCW12cHJpbnR3KDIsIChpbnQpIGNvZGUgKiBQQ19DT0xTICsgOCwgIiVYIiwgY29kZSk7CisgICAgfQorICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCAyNTY7IGNvZGUrKykgeworCWludCBjb3VudCA9IHJlcGVhdDsKKwlpbnQgcm93ID0gMyArIChpbnQpIChjb2RlIC8gMTYpICsgKGNvZGUgPj0gMTI4KTsKKwlpbnQgY29sID0gOCArIChpbnQpIChjb2RlICUgMTYpICogUENfQ09MUzsKKwlpZiAoKGNvZGUgJSAxNikgPT0gMCkKKwkgICAgbXZwcmludHcocm93LCAwLCAiMHglMDJ4OiIsIGNvZGUpOworCW1vdmUocm93LCBjb2wpOworCWRvIHsKKwkgICAgc3dpdGNoIChjb2RlKSB7CisJICAgIGNhc2UgJ1xuJzoKKwkgICAgY2FzZSAnXHInOgorCSAgICBjYXNlICdcYic6CisJICAgIGNhc2UgJ1xmJzoKKwkgICAgY2FzZSAnXDAzMyc6CisJICAgIGNhc2UgMHg5YjoKKwkJLyoKKwkJICogU2tpcCB0aGUgb25lcyB0aGF0IGRvIG5vdCB3b3JrLgorCQkgKi8KKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWFkZGNoKGNvZGUgfCBBX0FMVENIQVJTRVQgfCBhdHRyIHwgQ09MT1JfUEFJUihwYWlyKSk7CisJCWJyZWFrOworCSAgICB9CisJfSB3aGlsZSAoLS1jb3VudCA+IDApOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Nob3dfYm94X2NoYXJzKGludCByZXBlYXQsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQoreworICAgICh2b2lkKSByZXBlYXQ7CisgICAgYXR0ciB8PSBDT0xPUl9QQUlSKHBhaXIpOworCisgICAgZXJhc2UoKTsKKyAgICBhdHRyb24oQV9CT0xEKTsKKyAgICBtdmFkZHN0cigwLCAyMCwgIkRpc3BsYXkgb2YgdGhlIEFDUyBMaW5lLURyYXdpbmcgU2V0Iik7CisgICAgYXR0cm9mZihBX0JPTEQpOworICAgIHJlZnJlc2goKTsKKyAgICBib3goc3Rkc2NyLCAwLCAwKTsKKyAgICAvKiAqSU5ERU5ULU9GRiogKi8KKyAgICBtdmhsaW5lKExJTkVTIC8gMiwgMCwgICAgICAgIEFDU19ITElORSB8IGF0dHIsIENPTFMpOworICAgIG12dmxpbmUoMCwgICAgICAgICBDT0xTIC8gMiwgQUNTX1ZMSU5FIHwgYXR0ciwgTElORVMpOworICAgIG12YWRkY2goMCwgICAgICAgICBDT0xTIC8gMiwgQUNTX1RURUUgfCBhdHRyKTsKKyAgICBtdmFkZGNoKExJTkVTIC8gMiwgQ09MUyAvIDIsIEFDU19QTFVTIHwgYXR0cik7CisgICAgbXZhZGRjaChMSU5FUyAtIDEsIENPTFMgLyAyLCBBQ1NfQlRFRSB8IGF0dHIpOworICAgIG12YWRkY2goTElORVMgLyAyLCAwLCAgICAgICAgQUNTX0xURUUgfCBhdHRyKTsKKyAgICBtdmFkZGNoKExJTkVTIC8gMiwgQ09MUyAtIDEsIEFDU19SVEVFIHwgYXR0cik7CisgICAgLyogKklOREVOVC1PTiogKi8KKworfQorCitzdGF0aWMgaW50CitzaG93XzFfYWNzKGludCBuLCBpbnQgcmVwZWF0LCBjb25zdCBjaGFyICpuYW1lLCBjaHR5cGUgY29kZSkKK3sKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gMTY7CisgICAgaW50IHJvdyA9IDIgKyAobiAlIGhlaWdodCk7CisgICAgaW50IGNvbCA9IChuIC8gaGVpZ2h0KSAqIENPTFMgLyAyOworCisgICAgbXZwcmludHcocm93LCBjb2wsICIlKnMgOiAiLCBDT0xTIC8gNCwgbmFtZSk7CisgICAgZG8geworCWFkZGNoKGNvZGUpOworICAgIH0gd2hpbGUgKC0tcmVwZWF0ID4gMCk7CisgICAgcmV0dXJuIG4gKyAxOworfQorCitzdGF0aWMgdm9pZAorc2hvd19hY3NfY2hhcnMoaW50IHJlcGVhdCwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCisvKiBkaXNwbGF5IHRoZSBBQ1MgY2hhcmFjdGVyIHNldCAqLworeworICAgIGludCBuOworCisjZGVmaW5lIEJPVEgobmFtZSkgI25hbWUsIChuYW1lIHwgYXR0ciB8IENPTE9SX1BBSVIocGFpcikpCisKKyAgICBlcmFzZSgpOworICAgIGF0dHJvbihBX0JPTEQpOworICAgIG12YWRkc3RyKDAsIDIwLCAiRGlzcGxheSBvZiB0aGUgQUNTIENoYXJhY3RlciBTZXQiKTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgcmVmcmVzaCgpOworCisgICAgbiA9IHNob3dfMV9hY3MoMCwgcmVwZWF0LCBCT1RIKEFDU19VTENPUk5FUikpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfVVJDT1JORVIpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0xMQ09STkVSKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19MUkNPUk5FUikpOworCisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19MVEVFKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19SVEVFKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19UVEVFKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19CVEVFKSk7CisKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0hMSU5FKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19WTElORSkpOworCisgICAgLyoKKyAgICAgKiBIUFVYJ3MgQUNTIGRlZmluaXRpb25zIGFyZSBicm9rZW4gaGVyZS4gIEp1c3QgZ2l2ZSB1cC4KKyAgICAgKi8KKyNpZiAhKGRlZmluZWQoX19ocHV4KSAmJiAhZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pKQorICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfTEFSUk9XKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19SQVJST1cpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1VBUlJPVykpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfREFSUk9XKSk7CisKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0JMT0NLKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19CT0FSRCkpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfTEFOVEVSTikpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfQlVMTEVUKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19DS0JPQVJEKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19ERUdSRUUpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0RJQU1PTkQpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1BMTUlOVVMpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1BMVVMpKTsKKworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfR0VRVUFMKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19ORVFVQUwpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0xFUVVBTCkpOworCisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19TVEVSTElORykpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfUEkpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1MxKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19TMykpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfUzcpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1M5KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2Fjc19kaXNwbGF5KHZvaWQpCit7CisgICAgaW50IGMgPSAnYSc7CisgICAgY2hhciAqdGVybSA9IGdldGVudigiVEVSTSIpOworICAgIGNvbnN0IGNoYXIgKnBjaF9rbHVkZ2UgPSAoKHRlcm0gIT0gMCAmJiBzdHJzdHIodGVybSwgImxpbnV4IikpCisJCQkgICAgICA/ICJwPVBDLCAiCisJCQkgICAgICA6ICIiKTsKKyAgICBjaHR5cGUgYXR0ciA9IEFfTk9STUFMOworICAgIGludCBkaWdpdCA9IDA7CisgICAgaW50IHJlcGVhdCA9IDE7CisgICAgaW50IGZnID0gQ09MT1JfQkxBQ0s7CisgICAgaW50IGJnID0gQ09MT1JfQkxBQ0s7CisgICAgdW5zaWduZWQgYXRfY29kZSA9IDA7CisgICAgc2hvcnQgcGFpciA9IDA7CisgICAgdm9pZCAoKmxhc3Rfc2hvd19hY3MpIChpbnQsIGF0dHJfdCwgc2hvcnQpID0gMDsKKworICAgIGRvIHsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlIENUUkwoJ0wnKToKKwkgICAgUmVwYWludCgpOworCSAgICBicmVhazsKKwljYXNlICdhJzoKKwkgICAgVG9nZ2xlQWNzKGxhc3Rfc2hvd19hY3MsIHNob3dfYWNzX2NoYXJzKTsKKwkgICAgYnJlYWs7CisJY2FzZSAncCc6CisJICAgIGlmICgqcGNoX2tsdWRnZSkKKwkJVG9nZ2xlQWNzKGxhc3Rfc2hvd19hY3MsIHNob3dfcGNfY2hhcnMpOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAneCc6CisJICAgIFRvZ2dsZUFjcyhsYXN0X3Nob3dfYWNzLCBzaG93X2JveF9jaGFycyk7CisJICAgIGJyZWFrOworCWNhc2UgJzAnOgorCWNhc2UgJzEnOgorCWNhc2UgJzInOgorCWNhc2UgJzMnOgorCSAgICBkaWdpdCA9IChjIC0gJzAnKTsKKwkgICAgbGFzdF9zaG93X2FjcyA9IDA7CisJICAgIGJyZWFrOworCWNhc2UgJy0nOgorCSAgICBpZiAoZGlnaXQgPiAwKSB7CisJCS0tZGlnaXQ7CisJCWxhc3Rfc2hvd19hY3MgPSAwOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnKyc6CisJICAgIGlmIChkaWdpdCA8IDMpIHsKKwkJKytkaWdpdDsKKwkJbGFzdF9zaG93X2FjcyA9IDA7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICc+JzoKKwkgICAgaWYgKHJlcGVhdCA8IChDT0xTIC8gNCkpCisJCSsrcmVwZWF0OworCSAgICBicmVhazsKKwljYXNlICc8JzoKKwkgICAgaWYgKHJlcGVhdCA+IDEpCisJCS0tcmVwZWF0OworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBpZiAoY3ljbGVfYXR0cihjLCAmYXRfY29kZSwgJmF0dHIpCisJCXx8IGN5Y2xlX2NvbG9ycyhjLCAmZmcsICZiZywgJnBhaXIpKSB7CisJCWJyZWFrOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWlmIChsYXN0X3Nob3dfYWNzICE9IDApCisJICAgIGxhc3Rfc2hvd19hY3MocmVwZWF0LCBhdHRyLCBwYWlyKTsKKwllbHNlCisJICAgIHNob3dfdXBwZXJfY2hhcnMoKHVuc2lnbmVkKSAoZGlnaXQgKiAzMiArIDEyOCksIHJlcGVhdCwgYXR0ciwgcGFpcik7CisKKwltdnByaW50dyhMSU5FUyAtIDMsIDAsCisJCSAiTm90ZTogQU5TSSB0ZXJtaW5hbHMgbWF5IG5vdCBkaXNwbGF5IEMxIGNoYXJhY3RlcnMuIik7CisJbXZwcmludHcoTElORVMgLSAyLCAwLAorCQkgIlNlbGVjdDogYT1BQ1MsIHg9Ym94LCAlczA9QzEsIDEtMywrLy0gbm9uLUFTQ0lJLCA8Lz4gcmVwZWF0LCBFU0M9cXVpdCIsCisJCSBwY2hfa2x1ZGdlKTsKKwlpZiAodXNlX2NvbG9ycykgeworCSAgICBtdnByaW50dyhMSU5FUyAtIDEsIDAsCisJCSAgICAgInYvViwgZi9GLCBiL0IgY3ljbGUgdGhyb3VnaCB2aWRlbyBhdHRyaWJ1dGVzICglcykgYW5kIGNvbG9yICVkLyVkLiIsCisJCSAgICAgYXR0cnNfdG9fY3ljbGVbYXRfY29kZV0ubmFtZSwKKwkJICAgICBmZywgYmcpOworCX0gZWxzZSB7CisJICAgIG12cHJpbnR3KExJTkVTIC0gMSwgMCwKKwkJICAgICAidi9WIGN5Y2xlcyB0aHJvdWdoIHZpZGVvIGF0dHJpYnV0ZXMgKCVzKS4iLAorCQkgICAgIGF0dHJzX3RvX2N5Y2xlW2F0X2NvZGVdLm5hbWUpOworCX0KKwlyZWZyZXNoKCk7CisgICAgfSB3aGlsZSAoIWlzUXVpdChjID0gR2V0Y2hhcigpKSk7CisKKyAgICBQYXVzZSgpOworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorc3RhdGljIGNjaGFyX3QgKgorbWVyZ2Vfd2lkZV9hdHRyKGNjaGFyX3QgKmRzdCwgY29uc3QgY2NoYXJfdCAqc3JjLCBhdHRyX3QgYXR0ciwgc2hvcnQgcGFpcikKK3sKKyAgICBpbnQgY291bnQgPSBnZXRjY2hhcihzcmMsIE5VTEwsIE5VTEwsIE5VTEwsIDApOworICAgIHdjaGFyX3QgKndjaCA9IDA7CisgICAgYXR0cl90IGlnbm9yZV9hdHRyOworICAgIHNob3J0IGlnbm9yZV9wYWlyOworCisgICAgKmRzdCA9ICpzcmM7CisgICAgaWYgKGNvdW50ID4gMCkgeworCWlmICgod2NoID0gdHlwZU1hbGxvYyh3Y2hhcl90LCAodW5zaWduZWQpIGNvdW50ICsgMSkpICE9IDApIHsKKwkgICAgaWYgKGdldGNjaGFyKHNyYywgd2NoLCAmaWdub3JlX2F0dHIsICZpZ25vcmVfcGFpciwgMCkgIT0gRVJSKSB7CisJCWF0dHIgfD0gKGlnbm9yZV9hdHRyICYgQV9BTFRDSEFSU0VUKTsKKwkJc2V0Y2NoYXIoZHN0LCB3Y2gsIGF0dHIsIHBhaXIsIDApOworCSAgICB9CisJICAgIGZyZWUod2NoKTsKKwl9CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3VwcGVyX3dpZGVjaGFycyhpbnQgZmlyc3QsIGludCByZXBlYXQsIGludCBzcGFjZSwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCit7CisgICAgY2NoYXJfdCB0ZW1wOworICAgIHdjaGFyX3QgY29kZTsKKyAgICBpbnQgbGFzdCA9IGZpcnN0ICsgMzE7CisKKyAgICBlcmFzZSgpOworICAgIGF0dHJvbihBX0JPTEQpOworICAgIG12cHJpbnR3KDAsIDIwLCAiRGlzcGxheSBvZiBDaGFyYWN0ZXIgQ29kZXMgJWQgdG8gJWQiLCBmaXJzdCwgbGFzdCk7CisgICAgYXR0cm9mZihBX0JPTEQpOworCisgICAgZm9yIChjb2RlID0gZmlyc3Q7IChpbnQpIGNvZGUgPD0gbGFzdDsgY29kZSsrKSB7CisJaW50IHJvdyA9IDIgKyAoKGNvZGUgLSBmaXJzdCkgJSAxNik7CisJaW50IGNvbCA9ICgoY29kZSAtIGZpcnN0KSAvIDE2KSAqIENPTFMgLyAyOworCXdjaGFyX3QgY29kZXNbMTBdOworCWNoYXIgdG1wWzgwXTsKKwlpbnQgY291bnQgPSByZXBlYXQ7CisJaW50IHksIHg7CisKKwltZW1zZXQoJmNvZGVzLCAwLCBzaXplb2YoY29kZXMpKTsKKwljb2Rlc1swXSA9IGNvZGU7CisJc3ByaW50Zih0bXAsICIlM2xkICgweCVseCkiLCAobG9uZykgY29kZSwgKGxvbmcpIGNvZGUpOworCW12cHJpbnR3KHJvdywgY29sLCAiJSpzOiAiLCBDT0xTIC8gNCwgdG1wKTsKKwlzZXRjY2hhcigmdGVtcCwgY29kZXMsIGF0dHIsIHBhaXIsIDApOworCWRvIHsKKwkgICAgLyoKKwkgICAgICogR2l2ZSBub24tc3BhY2luZyBjaGFyYWN0ZXJzIHNvbWV0aGluZyB0byBjb21iaW5lIHdpdGguICBJZiB3ZQorCSAgICAgKiBkb24ndCwgdGhleSdsbCBidW5jaCB1cCBpbiBhIGhlYXAgb24gdGhlIHNwYWNlIGFmdGVyIHRoZSAiOiIuCisJICAgICAqIE1hcmsgdGhlbSB3aXRoIHJldmVyc2UtdmlkZW8gdG8gbWFrZSB0aGVtIHNpbXBsZXIgdG8gZmluZCBvbgorCSAgICAgKiB0aGUgZGlzcGxheS4KKwkgICAgICovCisJICAgIGlmICh3Y3dpZHRoKGNvZGUpID09IDApCisJCWFkZGNoKHNwYWNlIHwgQV9SRVZFUlNFKTsKKwkgICAgLyoKKwkgICAgICogVGhpcyBjb3VsZCB1c2UgYWRkX3djaCgpLCBidXQgaXMgZG9uZSBmb3IgY29tcGFyaXNvbiB3aXRoIHRoZQorCSAgICAgKiBub3JtYWwgJ2YnIHRlc3QgKGFuZCB0byBtYWtlIGEgdGVzdC1jYXNlIGZvciBlY2hvX3djaGFyKCkpLgorCSAgICAgKiBUaGUgc2NyZWVuIHdpbGwgZmxpY2tlciBiZWNhdXNlIHRoZSBlcmFzZSgpIGF0IHRoZSB0b3Agb2YgdGhlCisJICAgICAqIGZ1bmN0aW9uIGlzIG1ldCBieSB0aGUgYnVpbHRpbiByZWZyZXNoKCkgaW4gZWNob193Y2hhcigpLgorCSAgICAgKi8KKwkgICAgZWNob193Y2hhcigmdGVtcCk7CisJICAgIC8qCisJICAgICAqIFRoZSByZXBlYXQtY291bnQgbWF5IG1ha2UgdGV4dCB3cmFwIC0gYXZvaWQgdGhhdC4KKwkgICAgICovCisJICAgIGdldHl4KHN0ZHNjciwgeSwgeCk7CisJICAgIGlmICh4ID49IGNvbCArIChDT0xTIC8gMikgLSAyKQorCQlicmVhazsKKwl9IHdoaWxlICgtLWNvdW50ID4gMCk7CisgICAgfQorfQorCitzdGF0aWMgaW50CitzaG93XzFfd2FjcyhpbnQgbiwgaW50IHJlcGVhdCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2NoYXJfdCAqY29kZSkKK3sKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gMTY7CisgICAgaW50IHJvdyA9IDIgKyAobiAlIGhlaWdodCk7CisgICAgaW50IGNvbCA9IChuIC8gaGVpZ2h0KSAqIENPTFMgLyAyOworCisgICAgbXZwcmludHcocm93LCBjb2wsICIlKnMgOiAiLCBDT0xTIC8gNCwgbmFtZSk7CisgICAgd2hpbGUgKHJlcGVhdC0tID49IDApIHsKKwlhZGRfd2NoKGNvZGUpOworICAgIH0KKyAgICByZXR1cm4gbiArIDE7Cit9CisKKyNkZWZpbmUgTUVSR0VfQVRUUih3Y2gpIG1lcmdlX3dpZGVfYXR0cigmdGVtcCwgd2NoLCBhdHRyLCBwYWlyKQorCitzdGF0aWMgdm9pZAorc2hvd193YWNzX2NoYXJzKGludCByZXBlYXQsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQorLyogZGlzcGxheSB0aGUgd2lkZS1BQ1MgY2hhcmFjdGVyIHNldCAqLworeworICAgIGNjaGFyX3QgdGVtcDsKKworICAgIGludCBuOworCisvKiNkZWZpbmUgQk9USDIobmFtZSkgI25hbWUsICYobmFtZSkgKi8KKyNkZWZpbmUgQk9USDIobmFtZSkgI25hbWUsIE1FUkdFX0FUVFIobmFtZSkKKworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZhZGRzdHIoMCwgMjAsICJEaXNwbGF5IG9mIHRoZSBXaWRlLUFDUyBDaGFyYWN0ZXIgU2V0Iik7CisgICAgYXR0cm9mZihBX0JPTEQpOworICAgIHJlZnJlc2goKTsKKworICAgIG4gPSBzaG93XzFfd2FjcygwLCByZXBlYXQsIEJPVEgyKFdBQ1NfVUxDT1JORVIpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1VSQ09STkVSKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19MTENPUk5FUikpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfTFJDT1JORVIpKTsKKworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfTFRFRSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfUlRFRSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfVFRFRSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfQlRFRSkpOworCisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19ITElORSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfVkxJTkUpKTsKKworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfTEFSUk9XKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19SQVJST1cpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1VBUlJPVykpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfREFSUk9XKSk7CisKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0JMT0NLKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19CT0FSRCkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfTEFOVEVSTikpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfQlVMTEVUKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19DS0JPQVJEKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19ERUdSRUUpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0RJQU1PTkQpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1BMTUlOVVMpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1BMVVMpKTsKKworI2lmZGVmIENVUlNFU19XQUNTX0FSUkFZCisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19HRVFVQUwpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX05FUVVBTCkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfTEVRVUFMKSk7CisKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1NURVJMSU5HKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19QSSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfUzEpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1MzKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19TNykpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfUzkpKTsKKyNlbmRpZgorfQorCisjdW5kZWYgTUVSR0VfQVRUUgorCisjZGVmaW5lIE1FUkdFX0FUVFIod2NoKSBtZXJnZV93aWRlX2F0dHIoJnRlbXAsIHdjaCwgYXR0ciwgcGFpcikKKworc3RhdGljIHZvaWQKK3Nob3dfd2JveF9jaGFycyhpbnQgcmVwZWF0LCBhdHRyX3QgYXR0ciwgc2hvcnQgcGFpcikKK3sKKyAgICBjY2hhcl90IHRlbXA7CisKKyAgICAodm9pZCkgcmVwZWF0OworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZhZGRzdHIoMCwgMjAsICJEaXNwbGF5IG9mIHRoZSBXaWRlLUFDUyBMaW5lLURyYXdpbmcgU2V0Iik7CisgICAgYXR0cm9mZihBX0JPTEQpOworICAgIHJlZnJlc2goKTsKKworICAgIGF0dHJfc2V0KGF0dHIsIHBhaXIsIDApOworICAgIGJveF9zZXQoc3Rkc2NyLCAwLCAwKTsKKyAgICBhdHRyX3NldChBX05PUk1BTCwgMCwgMCk7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgbXZobGluZV9zZXQoTElORVMgLyAyLCAwLCAgICAgICAgTUVSR0VfQVRUUihXQUNTX0hMSU5FKSwgQ09MUyk7CisgICAgbXZ2bGluZV9zZXQoMCwgICAgICAgICBDT0xTIC8gMiwgTUVSR0VfQVRUUihXQUNTX1ZMSU5FKSwgTElORVMpOworICAgIG12YWRkX3djaCgwLCAgICAgICAgICAgQ09MUyAvIDIsIE1FUkdFX0FUVFIoV0FDU19UVEVFKSk7CisgICAgbXZhZGRfd2NoKExJTkVTIC8gMiwgICBDT0xTIC8gMiwgTUVSR0VfQVRUUihXQUNTX1BMVVMpKTsKKyAgICBtdmFkZF93Y2goTElORVMgLSAxLCAgIENPTFMgLyAyLCBNRVJHRV9BVFRSKFdBQ1NfQlRFRSkpOworICAgIG12YWRkX3djaChMSU5FUyAvIDIsICAgMCwgICAgICAgIE1FUkdFX0FUVFIoV0FDU19MVEVFKSk7CisgICAgbXZhZGRfd2NoKExJTkVTIC8gMiwgICBDT0xTIC0gMSwgTUVSR0VfQVRUUihXQUNTX1JURUUpKTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCit9CisKKyN1bmRlZiBNRVJHRV9BVFRSCisKK3N0YXRpYyBpbnQKK3Nob3dfMl93YWNzKGludCBuLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpjb2RlLCBhdHRyX3QgYXR0ciwgc2hvcnQgcGFpcikKK3sKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gMTY7CisgICAgaW50IHJvdyA9IDIgKyAobiAlIGhlaWdodCk7CisgICAgaW50IGNvbCA9IChuIC8gaGVpZ2h0KSAqIENPTFMgLyAyOworICAgIGNoYXIgdGVtcFs4MF07CisKKyAgICBtdnByaW50dyhyb3csIGNvbCwgIiUqcyA6ICIsIENPTFMgLyA0LCBuYW1lKTsKKyAgICBhdHRyX3NldChhdHRyLCBwYWlyLCAwKTsKKyAgICBhZGRzdHIoc3RyY3B5KHRlbXAsIGNvZGUpKTsKKyAgICBhdHRyX3NldChBX05PUk1BTCwgMCwgMCk7CisgICAgcmV0dXJuIG4gKyAxOworfQorCisjZGVmaW5lIFNIT1dfVVRGOChuLCBuYW1lLCBjb2RlKSBzaG93XzJfd2FjcyhuLCBuYW1lLCBjb2RlLCBhdHRyLCBwYWlyKQorCitzdGF0aWMgdm9pZAorc2hvd191dGY4X2NoYXJzKGludCByZXBlYXQsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQoreworICAgIGludCBuOworCisgICAgKHZvaWQpIHJlcGVhdDsKKyAgICBlcmFzZSgpOworICAgIGF0dHJvbihBX0JPTEQpOworICAgIG12YWRkc3RyKDAsIDIwLCAiRGlzcGxheSBvZiB0aGUgV2lkZS1BQ1MgQ2hhcmFjdGVyIFNldCIpOworICAgIGF0dHJvZmYoQV9CT0xEKTsKKyAgICByZWZyZXNoKCk7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgbiA9IFNIT1dfVVRGOCgwLCAiV0FDU19VTENPUk5FUiIsCSJcMzQyXDIyNFwyMTQiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1VSQ09STkVSIiwJIlwzNDJcMjI0XDIyMCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfTExDT1JORVIiLAkiXDM0MlwyMjRcMjI0Iik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19MUkNPUk5FUiIsCSJcMzQyXDIyNFwyMzAiKTsKKworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfTFRFRSIsCSJcMzQyXDIyNFwyMzQiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1JURUUiLAkiXDM0MlwyMjRcMjQ0Iik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19UVEVFIiwJIlwzNDJcMjI0XDI1NCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfQlRFRSIsCSJcMzQyXDIyNFwyNjQiKTsKKworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfSExJTkUiLAkiXDM0MlwyMjRcMjAwIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19WTElORSIsCSJcMzQyXDIyNFwyMDIiKTsKKworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfTEFSUk9XIiwJIlwzNDJcMjA2XDIyMCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUkFSUk9XIiwJIlwzNDJcMjA2XDIyMiIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfVUFSUk9XIiwJIlwzNDJcMjA2XDIyMSIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfREFSUk9XIiwJIlwzNDJcMjA2XDIyMyIpOworCisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19CTE9DSyIsCSJcMzQyXDIyNlwyNTYiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0JPQVJEIiwJIlwzNDJcMjI2XDIyMiIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfTEFOVEVSTiIsCSJcMzQyXDIzMFwyMDMiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0JVTExFVCIsCSJcMzAyXDI2NyIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfQ0tCT0FSRCIsCSJcMzQyXDIyNlwyMjIiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0RFR1JFRSIsCSJcMzAyXDI2MCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfRElBTU9ORCIsCSJcMzQyXDIyN1wyMDYiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1BMTUlOVVMiLAkiXDMwMlwyNjEiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1BMVVMiLAkiXDM0MlwyMjRcMjc0Iik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19HRVFVQUwiLAkiXDM0MlwyMTFcMjQ1Iik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19ORVFVQUwiLAkiXDM0MlwyMTFcMjQwIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19MRVFVQUwiLAkiXDM0MlwyMTFcMjQ0Iik7CisKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1NURVJMSU5HIiwJIlwzMDJcMjQzIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19QSSIsCQkiXDMxN1wyMDAiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1MxIiwJCSJcMzQyXDIxNlwyNzIiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1MzIiwJCSJcMzQyXDIxNlwyNzMiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1M3IiwJCSJcMzQyXDIxNlwyNzQiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1M5IiwJCSJcMzQyXDIxNlwyNzUiKTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCit9CisKKy8qIGRpc3BsYXkgdGhlIHdpZGUtQUNTIGNoYXJhY3RlciBzZXQgKi8KK3N0YXRpYyB2b2lkCit3aWRlX2Fjc19kaXNwbGF5KHZvaWQpCit7CisgICAgaW50IGMgPSAnYSc7CisgICAgaW50IGRpZ2l0ID0gMDsKKyAgICBpbnQgcmVwZWF0ID0gMTsKKyAgICBpbnQgc3BhY2UgPSAnICc7CisgICAgY2h0eXBlIGF0dHIgPSBBX05PUk1BTDsKKyAgICBpbnQgZmcgPSBDT0xPUl9CTEFDSzsKKyAgICBpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKyAgICB1bnNpZ25lZCBhdF9jb2RlID0gMDsKKyAgICBzaG9ydCBwYWlyID0gMDsKKyAgICB2b2lkICgqbGFzdF9zaG93X3dhY3MpIChpbnQsIGF0dHJfdCwgc2hvcnQpID0gMDsKKworICAgIGRvIHsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlIENUUkwoJ0wnKToKKwkgICAgUmVwYWludCgpOworCSAgICBicmVhazsKKwljYXNlICdhJzoKKwkgICAgVG9nZ2xlQWNzKGxhc3Rfc2hvd193YWNzLCBzaG93X3dhY3NfY2hhcnMpOworCSAgICBicmVhazsKKwljYXNlICd4JzoKKwkgICAgVG9nZ2xlQWNzKGxhc3Rfc2hvd193YWNzLCBzaG93X3dib3hfY2hhcnMpOworCSAgICBicmVhazsKKwljYXNlICd1JzoKKwkgICAgVG9nZ2xlQWNzKGxhc3Rfc2hvd193YWNzLCBzaG93X3V0ZjhfY2hhcnMpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBpZiAoYyA8IDI1NiAmJiBpc2RpZ2l0KGMpKSB7CisJCWRpZ2l0ID0gKGMgLSAnMCcpOworCQlsYXN0X3Nob3dfd2FjcyA9IDA7CisJICAgIH0gZWxzZSBpZiAoYyA9PSAnKycpIHsKKwkJKytkaWdpdDsKKwkJbGFzdF9zaG93X3dhY3MgPSAwOworCSAgICB9IGVsc2UgaWYgKGMgPT0gJy0nICYmIGRpZ2l0ID4gMCkgeworCQktLWRpZ2l0OworCQlsYXN0X3Nob3dfd2FjcyA9IDA7CisJICAgIH0gZWxzZSBpZiAoYyA9PSAnPicgJiYgcmVwZWF0IDwgKENPTFMgLyA0KSkgeworCQkrK3JlcGVhdDsKKwkgICAgfSBlbHNlIGlmIChjID09ICc8JyAmJiByZXBlYXQgPiAxKSB7CisJCS0tcmVwZWF0OworCSAgICB9IGVsc2UgaWYgKGMgPT0gJ18nKSB7CisJCXNwYWNlID0gKHNwYWNlID09ICcgJykgPyAnXycgOiAnICc7CisJCWxhc3Rfc2hvd193YWNzID0gMDsKKwkgICAgfSBlbHNlIGlmIChjeWNsZV9hdHRyKGMsICZhdF9jb2RlLCAmYXR0cikKKwkJICAgICAgIHx8IGN5Y2xlX2NvbG9ycyhjLCAmZmcsICZiZywgJnBhaXIpKSB7CisJCWlmIChsYXN0X3Nob3dfd2FjcyAhPSAwKQorCQkgICAgYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWlmIChsYXN0X3Nob3dfd2FjcyAhPSAwKQorCSAgICBsYXN0X3Nob3dfd2FjcyhyZXBlYXQsIGF0dHIsIHBhaXIpOworCWVsc2UKKwkgICAgc2hvd191cHBlcl93aWRlY2hhcnMoZGlnaXQgKiAzMiArIDEyOCwgcmVwZWF0LCBzcGFjZSwgYXR0ciwgcGFpcik7CisKKwltdnByaW50dyhMSU5FUyAtIDMsIDAsCisJCSAiU2VsZWN0OiBhIFdBQ1MsIHggYm94LCB1IFVURi04LCAwLTksKy8tIG5vbi1BU0NJSSwgPC8+IHJlcGVhdCwgRVNDPXF1aXQiKTsKKwlpZiAodXNlX2NvbG9ycykgeworCSAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsCisJCSAgICAgInYvViwgZi9GLCBiL0IgY3ljbGUgdGhyb3VnaCB2aWRlbyBhdHRyaWJ1dGVzICglcykgYW5kIGNvbG9yICVkLyVkLiIsCisJCSAgICAgYXR0cnNfdG9fY3ljbGVbYXRfY29kZV0ubmFtZSwKKwkJICAgICBmZywgYmcpOworCX0gZWxzZSB7CisJICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwKKwkJICAgICAidi9WIGN5Y2xlcyB0aHJvdWdoIHZpZGVvIGF0dHJpYnV0ZXMgKCVzKS4iLAorCQkgICAgIGF0dHJzX3RvX2N5Y2xlW2F0X2NvZGVdLm5hbWUpOworCX0KKwlyZWZyZXNoKCk7CisgICAgfSB3aGlsZSAoIWlzUXVpdChjID0gR2V0Y2hhcigpKSk7CisKKyAgICBQYXVzZSgpOworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisKKyNlbmRpZgorCisvKgorICogR3JhcGhpYy1yZW5kaXRpb24gdGVzdCAoYWRhcHRlZCBmcm9tIHZ0dGVzdCkKKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rfc2dyX2F0dHJpYnV0ZXModm9pZCkKK3sKKyAgICBpbnQgcGFzczsKKworICAgIGZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKwljaHR5cGUgbm9ybWFsID0gKChwYXNzID09IDAgPyBBX05PUk1BTCA6IEFfUkVWRVJTRSkpIHwgQkxBTks7CisKKwkvKiBVc2Ugbm9uLWRlZmF1bHQgY29sb3JzIGlmIHBvc3NpYmxlIHRvIGV4ZXJjaXNlIGJjZSBhIGxpdHRsZSAqLworCWlmICh1c2VfY29sb3JzKSB7CisJICAgIGluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJICAgIG5vcm1hbCB8PSBDT0xPUl9QQUlSKDEpOworCX0KKwlia2dkc2V0KG5vcm1hbCk7CisJZXJhc2UoKTsKKwltdnByaW50dygxLCAyMCwgIkdyYXBoaWMgcmVuZGl0aW9uIHRlc3QgcGF0dGVybjoiKTsKKworCW12cHJpbnR3KDQsIDEsICJ2YW5pbGxhIik7CisKKyNkZWZpbmUgc2V0X3NncihtYXNrKSBia2dkc2V0KChub3JtYWxeKG1hc2spKSk7CisJc2V0X3NncihBX0JPTEQpOworCW12cHJpbnR3KDQsIDQwLCAiYm9sZCIpOworCisJc2V0X3NncihBX1VOREVSTElORSk7CisJbXZwcmludHcoNiwgNiwgInVuZGVybGluZSIpOworCisJc2V0X3NncihBX0JPTEQgfCBBX1VOREVSTElORSk7CisJbXZwcmludHcoNiwgNDUsICJib2xkIHVuZGVybGluZSIpOworCisJc2V0X3NncihBX0JMSU5LKTsKKwltdnByaW50dyg4LCAxLCAiYmxpbmsiKTsKKworCXNldF9zZ3IoQV9CTElOSyB8IEFfQk9MRCk7CisJbXZwcmludHcoOCwgNDAsICJib2xkIGJsaW5rIik7CisKKwlzZXRfc2dyKEFfVU5ERVJMSU5FIHwgQV9CTElOSyk7CisJbXZwcmludHcoMTAsIDYsICJ1bmRlcmxpbmUgYmxpbmsiKTsKKworCXNldF9zZ3IoQV9CT0xEIHwgQV9VTkRFUkxJTkUgfCBBX0JMSU5LKTsKKwltdnByaW50dygxMCwgNDUsICJib2xkIHVuZGVybGluZSBibGluayIpOworCisJc2V0X3NncihBX1JFVkVSU0UpOworCW12cHJpbnR3KDEyLCAxLCAibmVnYXRpdmUiKTsKKworCXNldF9zZ3IoQV9CT0xEIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxMiwgNDAsICJib2xkIG5lZ2F0aXZlIik7CisKKwlzZXRfc2dyKEFfVU5ERVJMSU5FIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxNCwgNiwgInVuZGVybGluZSBuZWdhdGl2ZSIpOworCisJc2V0X3NncihBX0JPTEQgfCBBX1VOREVSTElORSB8IEFfUkVWRVJTRSk7CisJbXZwcmludHcoMTQsIDQ1LCAiYm9sZCB1bmRlcmxpbmUgbmVnYXRpdmUiKTsKKworCXNldF9zZ3IoQV9CTElOSyB8IEFfUkVWRVJTRSk7CisJbXZwcmludHcoMTYsIDEsICJibGluayBuZWdhdGl2ZSIpOworCisJc2V0X3NncihBX0JPTEQgfCBBX0JMSU5LIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxNiwgNDAsICJib2xkIGJsaW5rIG5lZ2F0aXZlIik7CisKKwlzZXRfc2dyKEFfVU5ERVJMSU5FIHwgQV9CTElOSyB8IEFfUkVWRVJTRSk7CisJbXZwcmludHcoMTgsIDYsICJ1bmRlcmxpbmUgYmxpbmsgbmVnYXRpdmUiKTsKKworCXNldF9zZ3IoQV9CT0xEIHwgQV9VTkRFUkxJTkUgfCBBX0JMSU5LIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxOCwgNDUsICJib2xkIHVuZGVybGluZSBibGluayBuZWdhdGl2ZSIpOworCisJYmtnZHNldChub3JtYWwpOworCW12cHJpbnR3KExJTkVTIC0gMiwgMSwgIiVzIGJhY2tncm91bmQuICIsIHBhc3MgPT0gMCA/ICJEYXJrIiA6CisJCSAiTGlnaHQiKTsKKwljbHJ0b2VvbCgpOworCVBhdXNlKCk7CisgICAgfQorCisgICAgYmtnZHNldChBX05PUk1BTCB8IEJMQU5LKTsKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdpbmRvd3MgYW5kIHNjcm9sbGluZyB0ZXN0ZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQk9UTElORVMJNAkvKiBudW1iZXIgb2YgbGluZSBzdG9sZW4gZnJvbSBzY3JlZW4gYm90dG9tICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgeSwgeDsKK30gcGFpcjsKKworI2RlZmluZSBGUkFNRSBzdHJ1Y3QgZnJhbWUKK0ZSQU1FCit7CisgICAgRlJBTUUgKm5leHQsICpsYXN0OworICAgIGJvb2wgZG9fc2Nyb2xsOworICAgIGJvb2wgZG9fa2V5cGFkOworICAgIFdJTkRPVyAqd2luZDsKK307CisKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikKKyNpZiAoTkNVUlNFU19WRVJTSU9OX1BBVENIIDwgMjAwNzAzMzEpICYmIE5DVVJTRVNfRVhUX0ZVTkNTCisjZGVmaW5lIGlzX2tleXBhZCh3aW4pICAgKHdpbiktPl91c2Vfa2V5cGFkCisjZGVmaW5lIGlzX3Njcm9sbG9rKHdpbikgKHdpbiktPl9zY3JvbGwKKyNlbGlmICFkZWZpbmVkKGlzX2tleXBhZCkKKyNkZWZpbmUgaXNfa2V5cGFkKHdpbikgICBGQUxTRQorI2RlZmluZSBpc19zY3JvbGxvayh3aW4pIEZBTFNFCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGlzX2tleXBhZCh3aW4pICAgRkFMU0UKKyNkZWZpbmUgaXNfc2Nyb2xsb2sod2luKSBGQUxTRQorI2VuZGlmCisKK3N0YXRpYyBXSU5ET1cgKgorZnJhbWVfd2luKEZSQU1FICogY3VycCkKK3sKKyAgICByZXR1cm4gKGN1cnAgIT0gMCkgPyBjdXJwLT53aW5kIDogc3Rkc2NyOworfQorCisvKiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlc2UgZmxhZ3MgYXJlIGFjdHVhbGx5IHNldCwgc28gZG9uJ3QgbG9vayBpbiBGUkFNRS4KKyAqIFRoZXNlIG5hbWVzIGFyZSBrbm93biB0byB3b3JrIHdpdGggU1ZyNCBjdXJzZXMgYXMgd2VsbCBhcyBuY3Vyc2VzLiAgVGhlCisgKiBfdXNlX2tleXBhZCBuYW1lIGRvZXMgbm90IHdvcmsgd2l0aCBTb2xhcmlzIDguCisgKi8KK3N0YXRpYyBib29sCitIYXZlS2V5cGFkKEZSQU1FICogY3VycCkKK3sKKyAgICBXSU5ET1cgKndpbiA9IGZyYW1lX3dpbihjdXJwKTsKKyAgICAodm9pZCkgd2luOworICAgIHJldHVybiBpc19rZXlwYWQod2luKTsKK30KKworc3RhdGljIGJvb2wKK0hhdmVTY3JvbGwoRlJBTUUgKiBjdXJwKQoreworICAgIFdJTkRPVyAqd2luID0gZnJhbWVfd2luKGN1cnApOworICAgICh2b2lkKSB3aW47CisgICAgcmV0dXJuIGlzX3Njcm9sbG9rKHdpbik7Cit9CisKK3N0YXRpYyB2b2lkCituZXd3aW5fbGVnZW5kKEZSQU1FICogY3VycCkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICptc2c7CisJaW50IGNvZGU7CisgICAgfSBsZWdlbmRbXSA9IHsKKwl7CisJICAgICJeQyA9IGNyZWF0ZSB3aW5kb3ciLCAwCisJfSwKKwl7CisJICAgICJeTiA9IG5leHQgd2luZG93IiwgMAorCX0sCisJeworCSAgICAiXlAgPSBwcmV2aW91cyB3aW5kb3ciLCAwCisJfSwKKwl7CisJICAgICJeRiA9IHNjcm9sbCBmb3J3YXJkIiwgMAorCX0sCisJeworCSAgICAiXkIgPSBzY3JvbGwgYmFja3dhcmQiLCAwCisJfSwKKwl7CisJICAgICJeSyA9IGtleXBhZCglcykiLCAxCisJfSwKKwl7CisJICAgICJeUyA9IHNjcm9sbG9rKCVzKSIsIDIKKwl9LAorCXsKKwkgICAgIl5XID0gc2F2ZSB3aW5kb3cgdG8gZmlsZSIsIDAKKwl9LAorCXsKKwkgICAgIl5SID0gcmVzdG9yZSB3aW5kb3ciLCAwCisJfSwKKyNpZiBIQVZFX1dSRVNJWkUKKwl7CisJICAgICJeWCA9IHJlc2l6ZSIsIDAKKwl9LAorI2VuZGlmCisJeworCSAgICAiXlElcyA9IGV4aXQiLCAzCisJfQorICAgIH07CisgICAgc2l6ZV90IG47CisgICAgaW50IHg7CisgICAgYm9vbCBkb19rZXlwYWQgPSBIYXZlS2V5cGFkKGN1cnApOworICAgIGJvb2wgZG9fc2Nyb2xsID0gSGF2ZVNjcm9sbChjdXJwKTsKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworCisgICAgbW92ZShMSU5FUyAtIDQsIDApOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YobGVnZW5kKTsgbisrKSB7CisJc3dpdGNoIChsZWdlbmRbbl0uY29kZSkgeworCWRlZmF1bHQ6CisJICAgIHN0cmNweShidWYsIGxlZ2VuZFtuXS5tc2cpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIHNwcmludGYoYnVmLCBsZWdlbmRbbl0ubXNnLCBkb19rZXlwYWQgPyAieWVzIiA6ICJubyIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIHNwcmludGYoYnVmLCBsZWdlbmRbbl0ubXNnLCBkb19zY3JvbGwgPyAieWVzIiA6ICJubyIpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIHNwcmludGYoYnVmLCBsZWdlbmRbbl0ubXNnLCBkb19rZXlwYWQgPyAiL0VTQyIgOiAiIik7CisJICAgIGJyZWFrOworCX0KKwl4ID0gZ2V0Y3VyeChzdGRzY3IpOworCWFkZHN0cigoQ09MUyA8ICh4ICsgMyArIChpbnQpIHN0cmxlbihidWYpKSkgPyAiXG4iIDogKG4gPyAiLCAiIDogIiIpKTsKKwlhZGRzdHIoYnVmKTsKKyAgICB9CisgICAgY2xydG9lb2woKTsKK30KKworc3RhdGljIHZvaWQKK3RyYW5zaWVudChGUkFNRSAqIGN1cnAsIE5DVVJTRVNfQ09OU1QgY2hhciAqbXNnKQoreworICAgIG5ld3dpbl9sZWdlbmQoY3VycCk7CisgICAgaWYgKG1zZykgeworCW12YWRkc3RyKExJTkVTIC0gMSwgMCwgbXNnKTsKKwlyZWZyZXNoKCk7CisJbmFwbXMoMTAwMCk7CisgICAgfQorCisgICAgbW92ZShMSU5FUyAtIDEsIDApOworICAgIHByaW50dygiJXMgY2hhcmFjdGVycyBhcmUgZWNob2VkLCB3aW5kb3cgc2hvdWxkICVzc2Nyb2xsLiIsCisJICAgSGF2ZUtleXBhZChjdXJwKSA/ICJOb24tYXJyb3ciIDogIkFsbCBvdGhlciIsCisJICAgSGF2ZVNjcm9sbChjdXJwKSA/ICIiIDogIm5vdCAiKTsKKyAgICBjbHJ0b2VvbCgpOworfQorCitzdGF0aWMgdm9pZAorbmV3d2luX3JlcG9ydChGUkFNRSAqIGN1cnApCisvKiByZXBvcnQgb24gdGhlIGN1cnNvcidzIGN1cnJlbnQgcG9zaXRpb24sIHRoZW4gcmVzdG9yZSBpdCAqLworeworICAgIFdJTkRPVyAqd2luID0gZnJhbWVfd2luKGN1cnApOworICAgIGludCB5LCB4OworCisgICAgaWYgKHdpbiAhPSBzdGRzY3IpCisJdHJhbnNpZW50KGN1cnAsIChjaGFyICopIDApOworICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgbW92ZShMSU5FUyAtIDEsIENPTFMgLSAxNyk7CisgICAgcHJpbnR3KCJZID0gJTJkIFggPSAlMmQiLCB5LCB4KTsKKyAgICBpZiAod2luICE9IHN0ZHNjcikKKwlyZWZyZXNoKCk7CisgICAgZWxzZQorCXdtb3ZlKHdpbiwgeSwgeCk7Cit9CisKK3N0YXRpYyBwYWlyICoKK3NlbGVjdGNlbGwoaW50IHVsaSwgaW50IHVsaiwgaW50IGxyaSwgaW50IGxyaikKKy8qIGFycm93cyBrZXlzIG1vdmUgY3Vyc29yLCByZXR1cm4gbG9jYXRpb24gYXQgY3VycmVudCBvbiBub24tYXJyb3cga2V5ICovCit7CisgICAgc3RhdGljIHBhaXIgcmVzOwkJLyogcmVzdWx0IGNlbGwgKi8KKyAgICBpbnQgc2kgPSBscmkgLSB1bGkgKyAxOwkvKiBkZXB0aCBvZiB0aGUgc2VsZWN0IGFyZWEgKi8KKyAgICBpbnQgc2ogPSBscmogLSB1bGogKyAxOwkvKiB3aWR0aCBvZiB0aGUgc2VsZWN0IGFyZWEgKi8KKyAgICBpbnQgaSA9IDAsIGogPSAwOwkJLyogb2Zmc2V0cyBpbnRvIHRoZSBzZWxlY3QgYXJlYSAqLworCisgICAgcmVzLnkgPSB1bGk7CisgICAgcmVzLnggPSB1bGo7CisgICAgZm9yICg7OykgeworCW1vdmUodWxpICsgaSwgdWxqICsgaik7CisJbmV3d2luX3JlcG9ydCgoRlJBTUUgKikgMCk7CisKKwlzd2l0Y2ggKEdldGNoYXIoKSkgeworCWNhc2UgS0VZX1VQOgorCSAgICBpICs9IHNpIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaSsrOworCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCSAgICBqICs9IHNqIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUklHSFQ6CisJICAgIGorKzsKKwkgICAgYnJlYWs7CisJY2FzZSBjYXNlX1FVSVQ6CisJICAgIHJldHVybiAoKHBhaXIgKikgMCk7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisJY2FzZSBLRVlfTU9VU0U6CisJICAgIHsKKwkJTUVWRU5UIGV2ZW50OworCisJCWdldG1vdXNlKCZldmVudCk7CisJCWlmIChldmVudC55ID4gdWxpICYmIGV2ZW50LnggPiB1bGopIHsKKwkJICAgIGkgPSBldmVudC55IC0gdWxpOworCQkgICAgaiA9IGV2ZW50LnggLSB1bGo7CisJCX0gZWxzZSB7CisJCSAgICBiZWVwKCk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIC8qIEZBTExUSFJVICovCisjZW5kaWYKKwlkZWZhdWx0OgorCSAgICByZXMueSA9IHVsaSArIGk7CisJICAgIHJlcy54ID0gdWxqICsgajsKKwkgICAgcmV0dXJuICgmcmVzKTsKKwl9CisJaSAlPSBzaTsKKwlqICU9IHNqOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK291dGVyYm94KHBhaXIgdWwsIHBhaXIgbHIsIGJvb2wgb25vZmYpCisvKiBkcmF3IG9yIGVyYXNlIGEgYm94ICpvdXRzaWRlKiB0aGUgZ2l2ZW4gcGFpciBvZiBjb3JuZXJzICovCit7CisgICAgbXZhZGRjaCh1bC55IC0gMSwgbHIueCAtIDEsIG9ub2ZmID8gQUNTX1VMQ09STkVSIDogJyAnKTsKKyAgICBtdmFkZGNoKHVsLnkgLSAxLCBsci54ICsgMSwgb25vZmYgPyBBQ1NfVVJDT1JORVIgOiAnICcpOworICAgIG12YWRkY2gobHIueSArIDEsIGxyLnggKyAxLCBvbm9mZiA/IEFDU19MUkNPUk5FUiA6ICcgJyk7CisgICAgbXZhZGRjaChsci55ICsgMSwgdWwueCAtIDEsIG9ub2ZmID8gQUNTX0xMQ09STkVSIDogJyAnKTsKKyAgICBtb3ZlKHVsLnkgLSAxLCB1bC54KTsKKyAgICBobGluZShvbm9mZiA/IEFDU19ITElORSA6ICcgJywgbHIueCAtIHVsLnggKyAxKTsKKyAgICBtb3ZlKHVsLnksIHVsLnggLSAxKTsKKyAgICB2bGluZShvbm9mZiA/IEFDU19WTElORSA6ICcgJywgbHIueSAtIHVsLnkgKyAxKTsKKyAgICBtb3ZlKGxyLnkgKyAxLCB1bC54KTsKKyAgICBobGluZShvbm9mZiA/IEFDU19ITElORSA6ICcgJywgbHIueCAtIHVsLnggKyAxKTsKKyAgICBtb3ZlKHVsLnksIGxyLnggKyAxKTsKKyAgICB2bGluZShvbm9mZiA/IEFDU19WTElORSA6ICcgJywgbHIueSAtIHVsLnkgKyAxKTsKK30KKworc3RhdGljIFdJTkRPVyAqCitnZXR3aW5kb3codm9pZCkKKy8qIEFzayB1c2VyIGZvciBhIHdpbmRvdyBkZWZpbml0aW9uICovCit7CisgICAgV0lORE9XICpyd2luZG93OworICAgIHBhaXIgdWwsIGxyLCAqdG1wOworCisgICAgbW92ZSgwLCAwKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIGFkZHN0cigiVXNlIGFycm93cyB0byBtb3ZlIGN1cnNvciwgYW55dGhpbmcgZWxzZSB0byBtYXJrIGNvcm5lciAxIik7CisgICAgcmVmcmVzaCgpOworICAgIGlmICgodG1wID0gc2VsZWN0Y2VsbCgyLCAxLCBMSU5FUyAtIEJPVExJTkVTIC0gMiwgQ09MUyAtIDIpKSA9PSAocGFpciAqKSAwKQorCXJldHVybiAoKFdJTkRPVyAqKSAwKTsKKyAgICBtZW1jcHkoJnVsLCB0bXAsIHNpemVvZihwYWlyKSk7CisgICAgbXZhZGRjaCh1bC55IC0gMSwgdWwueCAtIDEsIEFDU19VTENPUk5FUik7CisgICAgbW92ZSgwLCAwKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIGFkZHN0cigiVXNlIGFycm93cyB0byBtb3ZlIGN1cnNvciwgYW55dGhpbmcgZWxzZSB0byBtYXJrIGNvcm5lciAyIik7CisgICAgcmVmcmVzaCgpOworICAgIGlmICgodG1wID0gc2VsZWN0Y2VsbCh1bC55LCB1bC54LCBMSU5FUyAtIEJPVExJTkVTIC0gMiwgQ09MUyAtIDIpKSA9PQorCShwYWlyICopIDApCisJcmV0dXJuICgoV0lORE9XICopIDApOworICAgIG1lbWNweSgmbHIsIHRtcCwgc2l6ZW9mKHBhaXIpKTsKKworICAgIHJ3aW5kb3cgPSBzdWJ3aW4oc3Rkc2NyLCBsci55IC0gdWwueSArIDEsIGxyLnggLSB1bC54ICsgMSwgdWwueSwgdWwueCk7CisKKyAgICBvdXRlcmJveCh1bCwgbHIsIFRSVUUpOworICAgIHJlZnJlc2goKTsKKworICAgIHdyZWZyZXNoKHJ3aW5kb3cpOworCisgICAgbW92ZSgwLCAwKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIHJldHVybiAocndpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkCituZXd3aW5fbW92ZShGUkFNRSAqIGN1cnAsIGludCBkeSwgaW50IGR4KQoreworICAgIFdJTkRPVyAqd2luID0gZnJhbWVfd2luKGN1cnApOworICAgIGludCBjdXJfeSwgY3VyX3g7CisgICAgaW50IG1heF95LCBtYXhfeDsKKworICAgIGdldHl4KHdpbiwgY3VyX3ksIGN1cl94KTsKKyAgICBnZXRtYXh5eCh3aW4sIG1heF95LCBtYXhfeCk7CisgICAgaWYgKChjdXJfeCArPSBkeCkgPCAwKQorCWN1cl94ID0gMDsKKyAgICBlbHNlIGlmIChjdXJfeCA+PSBtYXhfeCkKKwljdXJfeCA9IG1heF94IC0gMTsKKyAgICBpZiAoKGN1cl95ICs9IGR5KSA8IDApCisJY3VyX3kgPSAwOworICAgIGVsc2UgaWYgKGN1cl95ID49IG1heF95KQorCWN1cl95ID0gbWF4X3kgLSAxOworICAgIHdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsKK30KKworc3RhdGljIEZSQU1FICoKK2RlbGV0ZV9mcmFtZWQoRlJBTUUgKiBmcCwgYm9vbCBzaG93aXQpCit7CisgICAgRlJBTUUgKm5wID0gMDsKKworICAgIGlmIChmcCAhPSAwKSB7CisJZnAtPmxhc3QtPm5leHQgPSBmcC0+bmV4dDsKKwlmcC0+bmV4dC0+bGFzdCA9IGZwLT5sYXN0OworCisJaWYgKHNob3dpdCkgeworCSAgICB3ZXJhc2UoZnAtPndpbmQpOworCSAgICB3cmVmcmVzaChmcC0+d2luZCk7CisJfQorCWRlbHdpbihmcC0+d2luZCk7CisKKwlucCA9IChmcCA9PSBmcC0+bmV4dCkgPyAwIDogZnAtPm5leHQ7CisJZnJlZShmcCk7CisgICAgfQorICAgIHJldHVybiBucDsKK30KKworc3RhdGljIHZvaWQKK2Fjc19hbmRfc2Nyb2xsKHZvaWQpCisvKiBEZW1vbnN0cmF0ZSB3aW5kb3dzICovCit7CisgICAgaW50IGM7CisgICAgRlJBTUUgKmN1cnJlbnQgPSAoRlJBTUUgKikgMCwgKm5ld3c7CisgICAgV0lORE9XICp1c2VzY3IgPSBzdGRzY3I7CisjaWYgSEFWRV9QVVRXSU4gJiYgSEFWRV9HRVRXSU4KKyAgICBGSUxFICpmcDsKKyNlbmRpZgorCisjZGVmaW5lIERVTVBGSUxFCSJzY3JlZW5kdW1wIgorCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKEJVVFRPTjFfQ0xJQ0tFRCwgKG1tYXNrX3QgKikgMCk7CisjZW5kaWYKKyAgICBjID0gQ1RSTCgnQycpOworICAgIHJhdygpOworICAgIGRvIHsKKwl0cmFuc2llbnQoKEZSQU1FICopIDAsIChjaGFyICopIDApOworCXN3aXRjaCAoYykgeworCWNhc2UgQ1RSTCgnQycpOgorCSAgICBpZiAoKG5ld3cgPSB0eXBlQ2FsbG9jKEZSQU1FLCAxKSkgPT0gMCkgeworCQlnb3RvIGJyZWFrb3V0OworCSAgICB9CisJICAgIGlmICgobmV3dy0+d2luZCA9IGdldHdpbmRvdygpKSA9PSAoV0lORE9XICopIDApIHsKKwkJZnJlZShuZXd3KTsKKwkJZ290byBicmVha291dDsKKwkgICAgfQorCisJICAgIGlmIChjdXJyZW50ID09IDApIHsJLyogRmlyc3QgZWxlbWVudCwgICovCisJCW5ld3ctPm5leHQgPSBuZXd3OwkvKiAgIHNvIHBvaW50IGl0IGF0IGl0c2VsZiAqLworCQluZXd3LT5sYXN0ID0gbmV3dzsKKwkgICAgfSBlbHNlIHsKKwkJbmV3dy0+bmV4dCA9IGN1cnJlbnQtPm5leHQ7CisJCW5ld3ctPmxhc3QgPSBjdXJyZW50OworCQluZXd3LT5sYXN0LT5uZXh0ID0gbmV3dzsKKwkJbmV3dy0+bmV4dC0+bGFzdCA9IG5ld3c7CisJICAgIH0KKwkgICAgY3VycmVudCA9IG5ld3c7CisJICAgIC8qIFNWcjQgY3Vyc2VzIHNldHMgdGhlIGtleXBhZCBvbiBhbGwgbmV3bHktY3JlYXRlZCB3aW5kb3dzIHRvCisJICAgICAqIGZhbHNlLiAgU29tZW9uZSByZXBvcnRlZCB0aGF0IFBEQ3Vyc2VzIG1ha2VzIG5ldyB3aW5kb3dzIGluaGVyaXQKKwkgICAgICogdGhpcyBmbGFnLiAgUmVtb3ZlIHRoZSBmb2xsb3dpbmcgJ2tleXBhZCgpJyBjYWxsIHRvIHRlc3QgdGhpcworCSAgICAgKi8KKwkgICAga2V5cGFkKGN1cnJlbnQtPndpbmQsIFRSVUUpOworCSAgICBjdXJyZW50LT5kb19rZXlwYWQgPSBIYXZlS2V5cGFkKGN1cnJlbnQpOworCSAgICBjdXJyZW50LT5kb19zY3JvbGwgPSBIYXZlU2Nyb2xsKGN1cnJlbnQpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgnTicpOgkvKiBnbyB0byBuZXh0IHdpbmRvdyAqLworCSAgICBpZiAoY3VycmVudCkKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdQJyk6CS8qIGdvIHRvIHByZXZpb3VzIHdpbmRvdyAqLworCSAgICBpZiAoY3VycmVudCkKKwkJY3VycmVudCA9IGN1cnJlbnQtPmxhc3Q7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdGJyk6CS8qIHNjcm9sbCBjdXJyZW50IHdpbmRvdyBmb3J3YXJkICovCisJICAgIGlmIChjdXJyZW50KQorCQl3c2NybChmcmFtZV93aW4oY3VycmVudCksIDEpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgnQicpOgkvKiBzY3JvbGwgY3VycmVudCB3aW5kb3cgYmFja3dhcmRzICovCisJICAgIGlmIChjdXJyZW50KQorCQl3c2NybChmcmFtZV93aW4oY3VycmVudCksIC0xKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ0snKToJLyogdG9nZ2xlIGtleXBhZCBtb2RlIGZvciBjdXJyZW50ICovCisJICAgIGlmIChjdXJyZW50KSB7CisJCWN1cnJlbnQtPmRvX2tleXBhZCA9ICFjdXJyZW50LT5kb19rZXlwYWQ7CisJCWtleXBhZChjdXJyZW50LT53aW5kLCBjdXJyZW50LT5kb19rZXlwYWQpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdTJyk6CisJICAgIGlmIChjdXJyZW50KSB7CisJCWN1cnJlbnQtPmRvX3Njcm9sbCA9ICFjdXJyZW50LT5kb19zY3JvbGw7CisJCXNjcm9sbG9rKGN1cnJlbnQtPndpbmQsIGN1cnJlbnQtPmRvX3Njcm9sbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKyNpZiBIQVZFX1BVVFdJTiAmJiBIQVZFX0dFVFdJTgorCWNhc2UgQ1RSTCgnVycpOgkvKiBzYXZlIGFuZCBkZWxldGUgd2luZG93ICovCisJICAgIGlmICgoY3VycmVudCAhPSAwKSAmJiAoY3VycmVudCA9PSBjdXJyZW50LT5uZXh0KSkgeworCQl0cmFuc2llbnQoY3VycmVudCwgIldpbGwgbm90IHNhdmUvZGVsZXRlIE9OTFkgd2luZG93Iik7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKChmcCA9IGZvcGVuKERVTVBGSUxFLCAidyIpKSA9PSAoRklMRSAqKSAwKSB7CisJCXRyYW5zaWVudChjdXJyZW50LCAiQ2FuJ3Qgb3BlbiBzY3JlZW4gZHVtcCBmaWxlIik7CisJICAgIH0gZWxzZSB7CisJCSh2b2lkKSBwdXR3aW4oZnJhbWVfd2luKGN1cnJlbnQpLCBmcCk7CisJCSh2b2lkKSBmY2xvc2UoZnApOworCisJCWN1cnJlbnQgPSBkZWxldGVfZnJhbWVkKGN1cnJlbnQsIFRSVUUpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdSJyk6CS8qIHJlc3RvcmUgd2luZG93ICovCisJICAgIGlmICgoZnAgPSBmb3BlbihEVU1QRklMRSwgInIiKSkgPT0gKEZJTEUgKikgMCkgeworCQl0cmFuc2llbnQoY3VycmVudCwgIkNhbid0IG9wZW4gc2NyZWVuIGR1bXAgZmlsZSIpOworCSAgICB9IGVsc2UgeworCQlpZiAoKG5ld3cgPSB0eXBlQ2FsbG9jKEZSQU1FLCAxKSkgIT0gMCkgeworCisJCSAgICBuZXd3LT5uZXh0ID0gY3VycmVudCA/IGN1cnJlbnQtPm5leHQgOiAwOworCQkgICAgbmV3dy0+bGFzdCA9IGN1cnJlbnQ7CisJCSAgICBuZXd3LT5sYXN0LT5uZXh0ID0gbmV3dzsKKwkJICAgIG5ld3ctPm5leHQtPmxhc3QgPSBuZXd3OworCisJCSAgICBuZXd3LT53aW5kID0gZ2V0d2luKGZwKTsKKworCQkgICAgd3JlZnJlc2gobmV3dy0+d2luZCk7CisJCX0KKwkJKHZvaWQpIGZjbG9zZShmcCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYKKworI2lmIEhBVkVfV1JFU0laRQorCWNhc2UgQ1RSTCgnWCcpOgkvKiByZXNpemUgd2luZG93ICovCisJICAgIGlmIChjdXJyZW50KSB7CisJCXBhaXIgKnRtcCwgdWwsIGxyOworCQlpbnQgaSwgbXgsIG15OworCisJCW1vdmUoMCwgMCk7CisJCWNscnRvZW9sKCk7CisJCWFkZHN0cigiVXNlIGFycm93cyB0byBtb3ZlIGN1cnNvciwgYW55dGhpbmcgZWxzZSB0byBtYXJrIG5ldyBjb3JuZXIiKTsKKwkJcmVmcmVzaCgpOworCisJCWdldGJlZ3l4KGN1cnJlbnQtPndpbmQsIHVsLnksIHVsLngpOworCisJCXRtcCA9IHNlbGVjdGNlbGwodWwueSwgdWwueCwgTElORVMgLSBCT1RMSU5FUyAtIDIsIENPTFMgLSAyKTsKKwkJaWYgKHRtcCA9PSAocGFpciAqKSAwKSB7CisJCSAgICBiZWVwKCk7CisJCSAgICBicmVhazsKKwkJfQorCisJCWdldG1heHl4KGN1cnJlbnQtPndpbmQsIGxyLnksIGxyLngpOworCQlsci55ICs9ICh1bC55IC0gMSk7CisJCWxyLnggKz0gKHVsLnggLSAxKTsKKwkJb3V0ZXJib3godWwsIGxyLCBGQUxTRSk7CisJCXdub3V0cmVmcmVzaChzdGRzY3IpOworCisJCS8qIHN0cmljdGx5IGNvc21ldGljIGhhY2sgZm9yIHRoZSB0ZXN0ICovCisJCWdldG1heHl4KGN1cnJlbnQtPndpbmQsIG15LCBteCk7CisJCWlmIChteSA+IHRtcC0+eSAtIHVsLnkpIHsKKwkJICAgIGdldHl4KGN1cnJlbnQtPndpbmQsIGxyLnksIGxyLngpOworCQkgICAgd21vdmUoY3VycmVudC0+d2luZCwgdG1wLT55IC0gdWwueSArIDEsIDApOworCQkgICAgd2NscnRvYm90KGN1cnJlbnQtPndpbmQpOworCQkgICAgd21vdmUoY3VycmVudC0+d2luZCwgbHIueSwgbHIueCk7CisJCX0KKwkJaWYgKG14ID4gdG1wLT54IC0gdWwueCkKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBteTsgaSsrKSB7CisJCQl3bW92ZShjdXJyZW50LT53aW5kLCBpLCB0bXAtPnggLSB1bC54ICsgMSk7CisJCQl3Y2xydG9lb2woY3VycmVudC0+d2luZCk7CisJCSAgICB9CisJCXdub3V0cmVmcmVzaChjdXJyZW50LT53aW5kKTsKKworCQltZW1jcHkoJmxyLCB0bXAsIHNpemVvZihwYWlyKSk7CisJCSh2b2lkKSB3cmVzaXplKGN1cnJlbnQtPndpbmQsIGxyLnkgLSB1bC55ICsgMCwgbHIueCAtIHVsLnggKyAwKTsKKworCQlnZXRiZWd5eChjdXJyZW50LT53aW5kLCB1bC55LCB1bC54KTsKKwkJZ2V0bWF4eXgoY3VycmVudC0+d2luZCwgbHIueSwgbHIueCk7CisJCWxyLnkgKz0gKHVsLnkgLSAxKTsKKwkJbHIueCArPSAodWwueCAtIDEpOworCQlvdXRlcmJveCh1bCwgbHIsIFRSVUUpOworCQl3bm91dHJlZnJlc2goc3Rkc2NyKTsKKworCQl3bm91dHJlZnJlc2goY3VycmVudC0+d2luZCk7CisJCW1vdmUoMCwgMCk7CisJCWNscnRvZW9sKCk7CisJCWRvdXBkYXRlKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogSEFWRV9XUkVTSVpFICovCisKKwljYXNlIEtFWV9GKDEwKToJLyogdW5kb2N1bWVudGVkIC0tLSB1c2UgdGhpcyB0byB0ZXN0IGFyZWEgY2xlYXJzICovCisJICAgIHNlbGVjdGNlbGwoMCwgMCwgTElORVMgLSAxLCBDT0xTIC0gMSk7CisJICAgIGNscnRvYm90KCk7CisJICAgIHJlZnJlc2goKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9VUDoKKwkgICAgbmV3d2luX21vdmUoY3VycmVudCwgLTEsIDApOworCSAgICBicmVhazsKKwljYXNlIEtFWV9ET1dOOgorCSAgICBuZXd3aW5fbW92ZShjdXJyZW50LCAxLCAwKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfTEVGVDoKKwkgICAgbmV3d2luX21vdmUoY3VycmVudCwgMCwgLTEpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgbmV3d2luX21vdmUoY3VycmVudCwgMCwgMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfQkFDS1NQQUNFOgorCSAgICAvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgS0VZX0RDOgorCSAgICB7CisJCWludCB5LCB4OworCQlnZXR5eChmcmFtZV93aW4oY3VycmVudCksIHksIHgpOworCQlpZiAoLS14IDwgMCkgeworCQkgICAgaWYgKC0teSA8IDApCisJCQlicmVhazsKKwkJICAgIHggPSBnZXRtYXh4KGZyYW1lX3dpbihjdXJyZW50KSkgLSAxOworCQl9CisJCW12d2RlbGNoKGZyYW1lX3dpbihjdXJyZW50KSwgeSwgeCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICdccic6CisJICAgIGMgPSAnXG4nOworCSAgICAvKiBGQUxMVEhST1VHSCAqLworCisJZGVmYXVsdDoKKwkgICAgaWYgKGN1cnJlbnQpCisJCXdhZGRjaChjdXJyZW50LT53aW5kLCAoY2h0eXBlKSBjKTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCX0KKwluZXd3aW5fcmVwb3J0KGN1cnJlbnQpOworCXVzZXNjciA9IGZyYW1lX3dpbihjdXJyZW50KTsKKwl3cmVmcmVzaCh1c2VzY3IpOworICAgIH0gd2hpbGUKKwkoIWlzUXVpdChjID0gd0dldGNoYXIodXNlc2NyKSkKKwkgJiYgKGMgIT0gRVJSKSk7CisKKyAgYnJlYWtvdXQ6CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gMCkKKwljdXJyZW50ID0gZGVsZXRlX2ZyYW1lZChjdXJyZW50LCBGQUxTRSk7CisKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOwkvKiByZXNldCB0byBkcml2ZXIncyBkZWZhdWx0ICovCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKDAsIChtbWFza190ICopIDApOworI2VuZGlmCisgICAgbm9yYXcoKTsKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBhbmVscyB0ZXN0ZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIFVTRV9MSUJQQU5FTAorc3RhdGljIGludCBuYXBfbXNlYyA9IDE7CisKK3N0YXRpYyBOQ1VSU0VTX0NPTlNUIGNoYXIgKm1vZFtdID0KK3sKKyAgICAidGVzdCAiLAorICAgICJURVNUICIsCisgICAgIigqKikgIiwKKyAgICAiKigpKiAiLAorICAgICI8LS0+ICIsCisgICAgIkxBU1QgIgorfTsKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXdhaXRfYV93aGlsZShtc2VjKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK3dhaXRfYV93aGlsZShpbnQgbXNlYyBHQ0NfVU5VU0VEKQoreworI2lmIEhBVkVfTkFQTVMKKyAgICBpZiAobmFwX21zZWMgPT0gMSkKKwl3R2V0Y2hhcihzdGRzY3IpOworICAgIGVsc2UKKwluYXBtcyhuYXBfbXNlYyk7CisjZWxzZQorICAgIGlmIChuYXBfbXNlYyA9PSAxKQorCXdHZXRjaGFyKHN0ZHNjcik7CisgICAgZWxzZSBpZiAobXNlYyA+IDEwMDApCisJc2xlZXAoKHVuc2lnbmVkKSBtc2VjIC8gMTAwMCk7CisgICAgZWxzZQorCXNsZWVwKDEpOworI2VuZGlmCit9CQkJCS8qIGVuZCBvZiB3YWl0X2Ffd2hpbGUgKi8KKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXNheXdoYXQodGV4dCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitzYXl3aGF0KE5DVVJTRVNfQ09OU1QgY2hhciAqdGV4dCkKK3sKKyAgICB3bW92ZShzdGRzY3IsIExJTkVTIC0gMSwgMCk7CisgICAgd2NscnRvZW9sKHN0ZHNjcik7CisgICAgaWYgKHRleHQgIT0gMCAmJiAqdGV4dCAhPSAnXDAnKSB7CisJd2FkZHN0cihzdGRzY3IsIHRleHQpOworCXdhZGRzdHIoc3Rkc2NyLCAiOyAiKTsKKyAgICB9CisgICAgd2FkZHN0cihzdGRzY3IsICJwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7Cit9CQkJCS8qIGVuZCBvZiBzYXl3aGF0ICovCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlta3BhbmVsKHJvd3MsY29scyx0bHksdGx4KSAtIGFsbG9jIGEgd2luIGFuZCBwYW5lbCBhbmQgYXNzb2NpYXRlIHRoZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBQQU5FTCAqCitta3BhbmVsKHNob3J0IGNvbG9yLCBpbnQgcm93cywgaW50IGNvbHMsIGludCB0bHksIGludCB0bHgpCit7CisgICAgV0lORE9XICp3aW47CisgICAgUEFORUwgKnBhbiA9IDA7CisKKyAgICBpZiAoKHdpbiA9IG5ld3dpbihyb3dzLCBjb2xzLCB0bHksIHRseCkpICE9IDApIHsKKwlpZiAoKHBhbiA9IG5ld19wYW5lbCh3aW4pKSA9PSAwKSB7CisJICAgIGRlbHdpbih3aW4pOworCX0gZWxzZSBpZiAodXNlX2NvbG9ycykgeworCSAgICBzaG9ydCBmZyA9IChzaG9ydCkgKChjb2xvciA9PSBDT0xPUl9CTFVFKSA/IENPTE9SX1dISVRFIDogQ09MT1JfQkxBQ0spOworCSAgICBzaG9ydCBiZyA9IGNvbG9yOworCisJICAgIGluaXRfcGFpcihjb2xvciwgZmcsIGJnKTsKKwkgICAgd2JrZ2RzZXQod2luLCAoY2h0eXBlKSAoQ09MT1JfUEFJUihjb2xvcikgfCAnICcpKTsKKwl9IGVsc2UgeworCSAgICB3YmtnZHNldCh3aW4sIEFfQk9MRCB8ICcgJyk7CisJfQorICAgIH0KKyAgICByZXR1cm4gcGFuOworfQkJCQkvKiBlbmQgb2YgbWtwYW5lbCAqLworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcm1wYW5lbChwYW4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorcm1wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgICBXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW4pOworICAgIGRlbF9wYW5lbChwYW4pOworICAgIGRlbHdpbih3aW4pOworfQkJCQkvKiBlbmQgb2Ygcm1wYW5lbCAqLworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcGZsdXNoKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitwZmx1c2godm9pZCkKK3sKKyAgICB1cGRhdGVfcGFuZWxzKCk7CisgICAgZG91cGRhdGUoKTsKK30JCQkJLyogZW5kIG9mIHBmbHVzaCAqLworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZmlsbF9wYW5lbCh3aW4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraW5pdF9wYW5lbCh2b2lkKQoreworICAgIHJlZ2lzdGVyIGludCB5LCB4OworCisgICAgZm9yICh5ID0gMDsgeSA8IExJTkVTIC0gMTsgeSsrKSB7CisJZm9yICh4ID0gMDsgeCA8IENPTFM7IHgrKykKKwkgICAgd3ByaW50dyhzdGRzY3IsICIlZCIsICh5ICsgeCkgJSAxMCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZmlsbF9wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgICBXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW4pOworICAgIGNvbnN0IGNoYXIgKnVzZXJwdHIgPSAoY29uc3QgY2hhciAqKSBwYW5lbF91c2VycHRyKHBhbik7CisgICAgaW50IG51bSA9ICh1c2VycHRyICYmICp1c2VycHRyKSA/IHVzZXJwdHJbMV0gOiAnPyc7CisgICAgaW50IHksIHg7CisKKyAgICB3bW92ZSh3aW4sIDEsIDEpOworICAgIHdwcmludHcod2luLCAiLXBhbiVjLSIsIG51bSk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgYm94KHdpbiwgMCwgMCk7CisgICAgZm9yICh5ID0gMjsgeSA8IGdldG1heHkod2luKSAtIDE7IHkrKykgeworCWZvciAoeCA9IDE7IHggPCBnZXRtYXh4KHdpbikgLSAxOyB4KyspIHsKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgd2FkZGNoKHdpbiwgVUNoYXIobnVtKSk7CisJfQorICAgIH0KK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitzdGF0aWMgdm9pZAoraW5pdF93aWRlX3BhbmVsKHZvaWQpCit7CisgICAgaW50IGRpZ2l0OworICAgIGNjaGFyX3QgdGVtcFsxMF07CisKKyAgICBmb3IgKGRpZ2l0ID0gMDsgZGlnaXQgPCAxMDsgKytkaWdpdCkKKwltYWtlX2Z1bGx3aWR0aF9kaWdpdCgmdGVtcFtkaWdpdF0sIGRpZ2l0KTsKKworICAgIGRvIHsKKwlpbnQgeSwgeDsKKwlnZXR5eChzdGRzY3IsIHksIHgpOworCWRpZ2l0ID0gKHkgKyB4IC8gMikgJSAxMDsKKyAgICB9IHdoaWxlIChhZGRfd2NoKCZ0ZW1wW2RpZ2l0XSkgIT0gRVJSKTsKK30KKworc3RhdGljIHZvaWQKK2ZpbGxfd2lkZV9wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgICBXSU5ET1cgKndpbiA9IHBhbmVsX3dpbmRvdyhwYW4pOworICAgIGNvbnN0IGNoYXIgKnVzZXJwdHIgPSAoY29uc3QgY2hhciAqKSBwYW5lbF91c2VycHRyKHBhbik7CisgICAgaW50IG51bSA9ICh1c2VycHRyICYmICp1c2VycHRyKSA/IHVzZXJwdHJbMV0gOiAnPyc7CisgICAgaW50IHksIHg7CisKKyAgICB3bW92ZSh3aW4sIDEsIDEpOworICAgIHdwcmludHcod2luLCAiLXBhbiVjLSIsIG51bSk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgYm94KHdpbiwgMCwgMCk7CisgICAgZm9yICh5ID0gMjsgeSA8IGdldG1heHkod2luKSAtIDE7IHkrKykgeworCWZvciAoeCA9IDE7IHggPCBnZXRtYXh4KHdpbikgLSAxOyB4KyspIHsKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgd2FkZGNoKHdpbiwgVUNoYXIobnVtKSk7CisJfQorICAgIH0KK30KKyNlbmRpZgorCisjZGVmaW5lIE1BWF9QQU5FTFMgNQorCitzdGF0aWMgdm9pZAorY2FubmVkX3BhbmVsKFBBTkVMICogcHhbTUFYX1BBTkVMUyArIDFdLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmNtZCkKK3sKKyAgICBpbnQgd2hpY2ggPSBjbWRbMV0gLSAnMCc7CisKKyAgICBzYXl3aGF0KGNtZCk7CisgICAgc3dpdGNoICgqY21kKSB7CisgICAgY2FzZSAnaCc6CisJaGlkZV9wYW5lbChweFt3aGljaF0pOworCWJyZWFrOworICAgIGNhc2UgJ3MnOgorCXNob3dfcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICBjYXNlICd0JzoKKwl0b3BfcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICBjYXNlICdiJzoKKwlib3R0b21fcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICBjYXNlICdkJzoKKwlybXBhbmVsKHB4W3doaWNoXSk7CisJYnJlYWs7CisgICAgfQorICAgIHBmbHVzaCgpOworICAgIHdhaXRfYV93aGlsZShuYXBfbXNlYyk7Cit9CisKK3N0YXRpYyB2b2lkCitkZW1vX3BhbmVscyh2b2lkICgqSW5pdFBhbmVsKSAodm9pZCksIHZvaWQgKCpGaWxsUGFuZWwpIChQQU5FTCAqKSkKK3sKKyAgICBpbnQgY291bnQ7CisgICAgaW50IGl0bXA7CisgICAgUEFORUwgKnB4W01BWF9QQU5FTFMgKyAxXTsKKworICAgIHNjcm9sbG9rKHN0ZHNjciwgRkFMU0UpOwkvKiB3ZSBkb24ndCB3YW50IHN0ZHNjciB0byBzY3JvbGwhICovCisgICAgcmVmcmVzaCgpOworCisgICAgSW5pdFBhbmVsKCk7CisgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNTsgY291bnQrKykgeworCXB4WzFdID0gbWtwYW5lbChDT0xPUl9SRUQsCisJCQlMSU5FUyAvIDIgLSAyLAorCQkJQ09MUyAvIDggKyAxLAorCQkJMCwKKwkJCTApOworCXNldF9wYW5lbF91c2VycHRyKHB4WzFdLCAoTkNVUlNFU19DT05TVCB2b2lkICopICJwMSIpOworCisJcHhbMl0gPSBta3BhbmVsKENPTE9SX0dSRUVOLAorCQkJTElORVMgLyAyICsgMSwKKwkJCUNPTFMgLyA3LAorCQkJTElORVMgLyA0LAorCQkJQ09MUyAvIDEwKTsKKwlzZXRfcGFuZWxfdXNlcnB0cihweFsyXSwgKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKSAicDIiKTsKKworCXB4WzNdID0gbWtwYW5lbChDT0xPUl9ZRUxMT1csCisJCQlMSU5FUyAvIDQsCisJCQlDT0xTIC8gMTAsCisJCQlMSU5FUyAvIDIsCisJCQlDT0xTIC8gOSk7CisJc2V0X3BhbmVsX3VzZXJwdHIocHhbM10sIChOQ1VSU0VTX0NPTlNUIHZvaWQgKikgInAzIik7CisKKwlweFs0XSA9IG1rcGFuZWwoQ09MT1JfQkxVRSwKKwkJCUxJTkVTIC8gMiAtIDIsCisJCQlDT0xTIC8gOCwKKwkJCUxJTkVTIC8gMiAtIDIsCisJCQlDT0xTIC8gMyk7CisJc2V0X3BhbmVsX3VzZXJwdHIocHhbNF0sIChOQ1VSU0VTX0NPTlNUIHZvaWQgKikgInA0Iik7CisKKwlweFs1XSA9IG1rcGFuZWwoQ09MT1JfTUFHRU5UQSwKKwkJCUxJTkVTIC8gMiAtIDIsCisJCQlDT0xTIC8gOCwKKwkJCUxJTkVTIC8gMiwKKwkJCUNPTFMgLyAyIC0gMik7CisJc2V0X3BhbmVsX3VzZXJwdHIocHhbNV0sIChOQ1VSU0VTX0NPTlNUIHZvaWQgKikgInA1Iik7CisKKwlGaWxsUGFuZWwocHhbMV0pOworCUZpbGxQYW5lbChweFsyXSk7CisJRmlsbFBhbmVsKHB4WzNdKTsKKwlGaWxsUGFuZWwocHhbNF0pOworCUZpbGxQYW5lbChweFs1XSk7CisKKwloaWRlX3BhbmVsKHB4WzRdKTsKKwloaWRlX3BhbmVsKHB4WzVdKTsKKwlwZmx1c2goKTsKKwlzYXl3aGF0KCIiKTsKKwl3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCisJc2F5d2hhdCgiaDMgczEgczIgczQgczUiKTsKKwltb3ZlX3BhbmVsKHB4WzFdLCAwLCAwKTsKKwloaWRlX3BhbmVsKHB4WzNdKTsKKwlzaG93X3BhbmVsKHB4WzFdKTsKKwlzaG93X3BhbmVsKHB4WzJdKTsKKwlzaG93X3BhbmVsKHB4WzRdKTsKKwlzaG93X3BhbmVsKHB4WzVdKTsKKwlwZmx1c2goKTsKKwl3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCisJY2FubmVkX3BhbmVsKHB4LCAiczEiKTsKKwljYW5uZWRfcGFuZWwocHgsICJzMiIpOworCisJc2F5d2hhdCgibTIiKTsKKwltb3ZlX3BhbmVsKHB4WzJdLCBMSU5FUyAvIDMgKyAxLCBDT0xTIC8gOCk7CisJcGZsdXNoKCk7CisJd2FpdF9hX3doaWxlKG5hcF9tc2VjKTsKKworCWNhbm5lZF9wYW5lbChweCwgInMzIik7CisKKwlzYXl3aGF0KCJtMyIpOworCW1vdmVfcGFuZWwocHhbM10sIExJTkVTIC8gNCArIDEsIENPTFMgLyAxNSk7CisJcGZsdXNoKCk7CisJd2FpdF9hX3doaWxlKG5hcF9tc2VjKTsKKworCWNhbm5lZF9wYW5lbChweCwgImIzIik7CisJY2FubmVkX3BhbmVsKHB4LCAiczQiKTsKKwljYW5uZWRfcGFuZWwocHgsICJzNSIpOworCWNhbm5lZF9wYW5lbChweCwgInQzIik7CisJY2FubmVkX3BhbmVsKHB4LCAidDEiKTsKKwljYW5uZWRfcGFuZWwocHgsICJ0MiIpOworCWNhbm5lZF9wYW5lbChweCwgInQzIik7CisJY2FubmVkX3BhbmVsKHB4LCAidDQiKTsKKworCWZvciAoaXRtcCA9IDA7IGl0bXAgPCA2OyBpdG1wKyspIHsKKwkgICAgV0lORE9XICp3NCA9IHBhbmVsX3dpbmRvdyhweFs0XSk7CisJICAgIFdJTkRPVyAqdzUgPSBwYW5lbF93aW5kb3cocHhbNV0pOworCisJICAgIHNheXdoYXQoIm00Iik7CisJICAgIHdtb3ZlKHc0LCBMSU5FUyAvIDgsIDEpOworCSAgICB3YWRkc3RyKHc0LCBtb2RbaXRtcF0pOworCSAgICBtb3ZlX3BhbmVsKHB4WzRdLCBMSU5FUyAvIDYsIGl0bXAgKiAoQ09MUyAvIDgpKTsKKwkgICAgd21vdmUodzUsIExJTkVTIC8gNiwgMSk7CisJICAgIHdhZGRzdHIodzUsIG1vZFtpdG1wXSk7CisJICAgIHBmbHVzaCgpOworCSAgICB3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCisJICAgIHNheXdoYXQoIm01Iik7CisJICAgIHdtb3ZlKHc0LCBMSU5FUyAvIDYsIDEpOworCSAgICB3YWRkc3RyKHc0LCBtb2RbaXRtcF0pOworCSAgICBtb3ZlX3BhbmVsKHB4WzVdLCBMSU5FUyAvIDMgLSAxLCAoaXRtcCAqIDEwKSArIDYpOworCSAgICB3bW92ZSh3NSwgTElORVMgLyA4LCAxKTsKKwkgICAgd2FkZHN0cih3NSwgbW9kW2l0bXBdKTsKKwkgICAgcGZsdXNoKCk7CisJICAgIHdhaXRfYV93aGlsZShuYXBfbXNlYyk7CisJfQorCisJc2F5d2hhdCgibTQiKTsKKwltb3ZlX3BhbmVsKHB4WzRdLCBMSU5FUyAvIDYsIGl0bXAgKiAoQ09MUyAvIDgpKTsKKwlwZmx1c2goKTsKKwl3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCisJY2FubmVkX3BhbmVsKHB4LCAidDUiKTsKKwljYW5uZWRfcGFuZWwocHgsICJ0MiIpOworCWNhbm5lZF9wYW5lbChweCwgInQxIik7CisJY2FubmVkX3BhbmVsKHB4LCAiZDIiKTsKKwljYW5uZWRfcGFuZWwocHgsICJoMyIpOworCWNhbm5lZF9wYW5lbChweCwgImQxIik7CisJY2FubmVkX3BhbmVsKHB4LCAiZDQiKTsKKwljYW5uZWRfcGFuZWwocHgsICJkNSIpOworCWNhbm5lZF9wYW5lbChweCwgImQzIik7CisKKwl3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCWlmIChuYXBfbXNlYyA9PSAxKQorCSAgICBicmVhazsKKwluYXBfbXNlYyA9IDEwMEw7CisgICAgfQorCisgICAgZXJhc2UoKTsKKyAgICBlbmR3aW4oKTsKK30KKyNlbmRpZiAvKiBVU0VfTElCUEFORUwgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQYWQgdGVzdGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgR1JJRFNJWkUJMworCitzdGF0aWMgYm9vbCBwZW5kaW5nX3BhbiA9IEZBTFNFOworc3RhdGljIGJvb2wgc2hvd19wYW5uZXJfbGVnZW5kID0gVFJVRTsKKworc3RhdGljIGludAorcGFubmVyX2xlZ2VuZChpbnQgbGluZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbGVnZW5kW10gPQorICAgIHsKKwkiVXNlIGFycm93IGtleXMgKG9yIFUsRCxMLFIpIHRvIHBhbiwgRVNDIHRvIHF1aXQsICEgdG8gc2hlbGwtb3V0LiIsCisJIlVzZSArLC0gKG9yIGosaykgdG8gZ3Jvdy9zaHJpbmsgdGhlIHBhbm5lciB2ZXJ0aWNhbGx5LiIsCisJIlVzZSA8LD4gKG9yIGgsbCkgdG8gZ3Jvdy9zaHJpbmsgdGhlIHBhbm5lciBob3Jpem9udGFsbHkuIiwKKwkiTnVtYmVyIHJlcGVhdHMuICBUb2dnbGUgbGVnZW5kOj8gZmlsbGVyOmEgdGltZXI6dCBzY3JvbGxtYXJrOnMuIgorICAgIH07CisgICAgaW50IG4gPSAoKGludCkgU0laRU9GKGxlZ2VuZCkgLSAoTElORVMgLSBsaW5lKSk7CisgICAgaWYgKGxpbmUgPCBMSU5FUyAmJiAobiA+PSAwKSkgeworCW1vdmUobGluZSwgMCk7CisJaWYgKHNob3dfcGFubmVyX2xlZ2VuZCkKKwkgICAgcHJpbnR3KCIlcyIsIGxlZ2VuZFtuXSk7CisJY2xydG9lb2woKTsKKwlyZXR1cm4gc2hvd19wYW5uZXJfbGVnZW5kOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitwYW5uZXJfaF9jbGVhbnVwKGludCBmcm9tX3ksIGludCBmcm9tX3gsIGludCB0b194KQoreworICAgIGlmICghcGFubmVyX2xlZ2VuZChmcm9tX3kpKQorCWRvX2hfbGluZShmcm9tX3ksIGZyb21feCwgJyAnLCB0b194KTsKK30KKworc3RhdGljIHZvaWQKK3Bhbm5lcl92X2NsZWFudXAoaW50IGZyb21feSwgaW50IGZyb21feCwgaW50IHRvX3kpCit7CisgICAgaWYgKCFwYW5uZXJfbGVnZW5kKGZyb21feSkpCisJZG9fdl9saW5lKGZyb21feSwgZnJvbV94LCAnICcsIHRvX3kpOworfQorCitzdGF0aWMgdm9pZAorZmlsbF9wYWQoV0lORE9XICpwYW5wYWQsIGJvb2wgcGFuX2xpbmVzKQoreworICAgIGludCB5LCB4OworICAgIHVuc2lnbmVkIGdyaWRjb3VudCA9IDA7CisKKyAgICB3bW92ZShwYW5wYWQsIDAsIDApOworICAgIGZvciAoeSA9IDA7IHkgPCBnZXRtYXh5KHBhbnBhZCk7IHkrKykgeworCWZvciAoeCA9IDA7IHggPCBnZXRtYXh4KHBhbnBhZCk7IHgrKykgeworCSAgICBpZiAoeSAlIEdSSURTSVpFID09IDAgJiYgeCAlIEdSSURTSVpFID09IDApIHsKKwkJaWYgKHkgPT0gMCAmJiB4ID09IDApCisJCSAgICB3YWRkY2gocGFucGFkLCBwYW5fbGluZXMgPyBBQ1NfVUxDT1JORVIgOiAnKycpOworCQllbHNlIGlmICh5ID09IDApCisJCSAgICB3YWRkY2gocGFucGFkLCBwYW5fbGluZXMgPyBBQ1NfVFRFRSA6ICcrJyk7CisJCWVsc2UgaWYgKHkgPT0gMCB8fCB4ID09IDApCisJCSAgICB3YWRkY2gocGFucGFkLCBwYW5fbGluZXMgPyBBQ1NfTFRFRSA6ICcrJyk7CisJCWVsc2UKKwkJICAgIHdhZGRjaChwYW5wYWQsIChjaHR5cGUpICgocGFuX2xpbmVzID8gJ2EnIDogJ0EnKSArCisJCQkJCSAgICAgKGludCkgKGdyaWRjb3VudCsrICUgMjYpKSk7CisJICAgIH0gZWxzZSBpZiAoeSAlIEdSSURTSVpFID09IDApCisJCXdhZGRjaChwYW5wYWQsIHBhbl9saW5lcyA/IEFDU19ITElORSA6ICctJyk7CisJICAgIGVsc2UgaWYgKHggJSBHUklEU0laRSA9PSAwKQorCQl3YWRkY2gocGFucGFkLCBwYW5fbGluZXMgPyBBQ1NfVkxJTkUgOiAnfCcpOworCSAgICBlbHNlCisJCXdhZGRjaChwYW5wYWQsICcgJyk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Bhbm5lcihXSU5ET1cgKnBhZCwKKyAgICAgICBpbnQgdG9wX3gsIGludCB0b3BfeSwgaW50IHBvcnR5LCBpbnQgcG9ydHgsCisgICAgICAgaW50ICgqcGdldGMpIChXSU5ET1cgKikpCit7CisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgICBzdHJ1Y3QgdGltZXZhbCBiZWZvcmUsIGFmdGVyOworICAgIGJvb2wgdGltaW5nID0gVFJVRTsKKyNlbmRpZgorICAgIGJvb2wgcGFuX2xpbmVzID0gRkFMU0U7CisgICAgYm9vbCBzY3JvbGxlcnMgPSBUUlVFOworICAgIGludCBiYXNleCA9IDA7CisgICAgaW50IGJhc2V5ID0gMDsKKyAgICBpbnQgcHhtYXgsIHB5bWF4LCBsb3dlbmQsIGhpZ2hlbmQsIGM7CisKKyAgICBnZXRtYXh5eChwYWQsIHB5bWF4LCBweG1heCk7CisgICAgc2Nyb2xsb2soc3Rkc2NyLCBGQUxTRSk7CS8qIHdlIGRvbid0IHdhbnQgc3Rkc2NyIHRvIHNjcm9sbCEgKi8KKworICAgIGMgPSBLRVlfUkVGUkVTSDsKKyAgICBkbyB7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJLyoKKwkgKiBEdXJpbmcgc2hlbGwtb3V0LCB0aGUgdXNlciBtYXkgaGF2ZSByZXNpemVkIHRoZSB3aW5kb3cuICBBZGp1c3QKKwkgKiB0aGUgcG9ydCBzaXplIG9mIHRoZSBwYWQgdG8gYWNjb21tb2RhdGUgdGhpcy4gIE5jdXJzZXMgYXV0b21hdGljYWxseQorCSAqIHJlc2l6ZXMgYWxsIG9mIHRoZSBub3JtYWwgd2luZG93cyB0byBmaXQgb24gdGhlIG5ldyBzY3JlZW4uCisJICovCisJaWYgKHRvcF94ID4gQ09MUykKKwkgICAgdG9wX3ggPSBDT0xTOworCWlmIChwb3J0eCA+IENPTFMpCisJICAgIHBvcnR4ID0gQ09MUzsKKwlpZiAodG9wX3kgPiBMSU5FUykKKwkgICAgdG9wX3kgPSBMSU5FUzsKKwlpZiAocG9ydHkgPiBMSU5FUykKKwkgICAgcG9ydHkgPSBMSU5FUzsKKyNlbmRpZgorCXN3aXRjaCAoYykgeworCWNhc2UgS0VZX1JFRlJFU0g6CisJICAgIGVyYXNlKCk7CisKKwkgICAgLyogRkFMTFRIUlUgKi8KKwljYXNlICc/JzoKKwkgICAgaWYgKGMgPT0gJz8nKQorCQlzaG93X3Bhbm5lcl9sZWdlbmQgPSAhc2hvd19wYW5uZXJfbGVnZW5kOworCSAgICBwYW5uZXJfbGVnZW5kKExJTkVTIC0gNCk7CisJICAgIHBhbm5lcl9sZWdlbmQoTElORVMgLSAzKTsKKwkgICAgcGFubmVyX2xlZ2VuZChMSU5FUyAtIDIpOworCSAgICBwYW5uZXJfbGVnZW5kKExJTkVTIC0gMSk7CisJICAgIGJyZWFrOworCWNhc2UgJ2EnOgorCSAgICBwYW5fbGluZXMgPSAhcGFuX2xpbmVzOworCSAgICBmaWxsX3BhZChwYWQsIHBhbl9saW5lcyk7CisJICAgIHBlbmRpbmdfcGFuID0gRkFMU0U7CisJICAgIGJyZWFrOworCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKwljYXNlICd0JzoKKwkgICAgdGltaW5nID0gIXRpbWluZzsKKwkgICAgaWYgKCF0aW1pbmcpCisJCXBhbm5lcl9sZWdlbmQoTElORVMgLSAxKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwljYXNlICdzJzoKKwkgICAgc2Nyb2xsZXJzID0gIXNjcm9sbGVyczsKKwkgICAgYnJlYWs7CisKKwkgICAgLyogTW92ZSB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBwYWQsIGtlZXBpbmcgdGhlIGJvdHRvbS1yaWdodAorCSAgICAgKiBjb3JuZXIgZml4ZWQuCisJICAgICAqLworCWNhc2UgJ2gnOgkJLyogaW5jcmVhc2UtY29sdW1uczogbW92ZSBsZWZ0IGVkZ2UgdG8gbGVmdCAqLworCSAgICBpZiAodG9wX3ggPD0gMCkKKwkJYmVlcCgpOworCSAgICBlbHNlIHsKKwkJcGFubmVyX3ZfY2xlYW51cCh0b3BfeSwgdG9wX3gsIHBvcnR5KTsKKwkJdG9wX3gtLTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ2onOgkJLyogZGVjcmVhc2UtbGluZXM6IG1vdmUgdG9wLWVkZ2UgZG93biAqLworCSAgICBpZiAodG9wX3kgPj0gcG9ydHkpCisJCWJlZXAoKTsKKwkgICAgZWxzZSB7CisJCXBhbm5lcl9oX2NsZWFudXAodG9wX3kgLSAxLCB0b3BfeCAtICh0b3BfeCA+IDApLCBwb3J0eCk7CisJCXRvcF95Kys7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICdrJzoJCS8qIGluY3JlYXNlLWxpbmVzOiBtb3ZlIHRvcC1lZGdlIHVwICovCisJICAgIGlmICh0b3BfeSA8PSAwKQorCQliZWVwKCk7CisJICAgIGVsc2UgeworCQl0b3BfeS0tOworCQlwYW5uZXJfaF9jbGVhbnVwKHRvcF95LCB0b3BfeCwgcG9ydHgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnbCc6CQkvKiBkZWNyZWFzZS1jb2x1bW5zOiBtb3ZlIGxlZnQtZWRnZSB0byByaWdodCAqLworCSAgICBpZiAodG9wX3ggPj0gcG9ydHgpCisJCWJlZXAoKTsKKwkgICAgZWxzZSB7CisJCXBhbm5lcl92X2NsZWFudXAodG9wX3kgLSAodG9wX3kgPiAwKSwgdG9wX3ggLSAxLCBwb3J0eSk7CisJCXRvcF94Kys7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgICAgLyogTW92ZSB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciBvZiB0aGUgcGFkLCBrZWVwaW5nIHRoZSB0b3AtbGVmdAorCSAgICAgKiBjb3JuZXIgZml4ZWQuCisJICAgICAqLworCWNhc2UgS0VZX0lDOgkJLyogaW5jcmVhc2UtY29sdW1uczogbW92ZSByaWdodC1lZGdlIHRvIHJpZ2h0ICovCisJICAgIGlmIChwb3J0eCA+PSBweG1heCB8fCBwb3J0eCA+PSBDT0xTKQorCQliZWVwKCk7CisJICAgIGVsc2UgeworCQlwYW5uZXJfdl9jbGVhbnVwKHRvcF95IC0gKHRvcF95ID4gMCksIHBvcnR4IC0gMSwgcG9ydHkpOworCQkrK3BvcnR4OworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfSUw6CQkvKiBpbmNyZWFzZS1saW5lczogbW92ZSBib3R0b20tZWRnZSBkb3duICovCisJICAgIGlmIChwb3J0eSA+PSBweW1heCB8fCBwb3J0eSA+PSBMSU5FUykKKwkJYmVlcCgpOworCSAgICBlbHNlIHsKKwkJcGFubmVyX2hfY2xlYW51cChwb3J0eSAtIDEsIHRvcF94IC0gKHRvcF94ID4gMCksIHBvcnR4KTsKKwkJKytwb3J0eTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgS0VZX0RDOgkJLyogZGVjcmVhc2UtY29sdW1uczogbW92ZSBib3R0b20gZWRnZSB1cCAqLworCSAgICBpZiAocG9ydHggPD0gdG9wX3gpCisJCWJlZXAoKTsKKwkgICAgZWxzZSB7CisJCXBvcnR4LS07CisJCXBhbm5lcl92X2NsZWFudXAodG9wX3kgLSAodG9wX3kgPiAwKSwgcG9ydHgsIHBvcnR5KTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgS0VZX0RMOgkJLyogZGVjcmVhc2UtbGluZXMgKi8KKwkgICAgaWYgKHBvcnR5IDw9IHRvcF95KQorCQliZWVwKCk7CisJICAgIGVsc2UgeworCQlwb3J0eS0tOworCQlwYW5uZXJfaF9jbGVhbnVwKHBvcnR5LCB0b3BfeCAtICh0b3BfeCA+IDApLCBwb3J0eCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9MRUZUOgkJLyogcGFuIGxlZnR3YXJkcyAqLworCSAgICBpZiAoYmFzZXggPiAwKQorCQliYXNleC0tOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9SSUdIVDoJLyogcGFuIHJpZ2h0d2FyZHMgKi8KKwkgICAgaWYgKGJhc2V4ICsgcG9ydHggLSAocHltYXggPiBwb3J0eSkgPCBweG1heCkKKwkJYmFzZXgrKzsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfVVA6CQkvKiBwYW4gdXB3YXJkcyAqLworCSAgICBpZiAoYmFzZXkgPiAwKQorCQliYXNleS0tOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9ET1dOOgkJLyogcGFuIGRvd253YXJkcyAqLworCSAgICBpZiAoYmFzZXkgKyBwb3J0eSAtIChweG1heCA+IHBvcnR4KSA8IHB5bWF4KQorCQliYXNleSsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdIJzoKKwljYXNlIEtFWV9IT01FOgorCWNhc2UgS0VZX0ZJTkQ6CisJICAgIGJhc2V5ID0gMDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdFJzoKKwljYXNlIEtFWV9FTkQ6CisJY2FzZSBLRVlfU0VMRUNUOgorCSAgICBiYXNleSA9IHB5bWF4IC0gcG9ydHk7CisJICAgIGlmIChiYXNleSA8IDApCisJCWJhc2V5ID0gMDsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKworCW12YWRkY2godG9wX3kgLSAxLCB0b3BfeCAtIDEsIEFDU19VTENPUk5FUik7CisJZG9fdl9saW5lKHRvcF95LCB0b3BfeCAtIDEsIEFDU19WTElORSwgcG9ydHkpOworCWRvX2hfbGluZSh0b3BfeSAtIDEsIHRvcF94LCBBQ1NfSExJTkUsIHBvcnR4KTsKKworCWlmIChzY3JvbGxlcnMgJiYgKHB4bWF4ID4gcG9ydHggLSAxKSkgeworCSAgICBpbnQgbGVuZ3RoID0gKHBvcnR4IC0gdG9wX3ggLSAxKTsKKwkgICAgZmxvYXQgcmF0aW8gPSAoKGZsb2F0KSBsZW5ndGgpIC8gKChmbG9hdCkgcHhtYXgpOworCisJICAgIGxvd2VuZCA9IChpbnQpICgoZmxvYXQpIHRvcF94ICsgKChmbG9hdCkgYmFzZXggKiByYXRpbykpOworCSAgICBoaWdoZW5kID0gKGludCkgKChmbG9hdCkgdG9wX3ggKyAoKGZsb2F0KSAoYmFzZXggKyBsZW5ndGgpICogcmF0aW8pKTsKKworCSAgICBkb19oX2xpbmUocG9ydHkgLSAxLCB0b3BfeCwgQUNTX0hMSU5FLCBsb3dlbmQpOworCSAgICBpZiAoaGlnaGVuZCA8IHBvcnR4KSB7CisJCWF0dHJvbihBX1JFVkVSU0UpOworCQlkb19oX2xpbmUocG9ydHkgLSAxLCBsb3dlbmQsICcgJywgaGlnaGVuZCArIDEpOworCQlhdHRyb2ZmKEFfUkVWRVJTRSk7CisJCWRvX2hfbGluZShwb3J0eSAtIDEsIGhpZ2hlbmQgKyAxLCBBQ1NfSExJTkUsIHBvcnR4KTsKKwkgICAgfQorCX0gZWxzZQorCSAgICBkb19oX2xpbmUocG9ydHkgLSAxLCB0b3BfeCwgQUNTX0hMSU5FLCBwb3J0eCk7CisKKwlpZiAoc2Nyb2xsZXJzICYmIChweW1heCA+IHBvcnR5IC0gMSkpIHsKKwkgICAgaW50IGxlbmd0aCA9IChwb3J0eSAtIHRvcF95IC0gMSk7CisJICAgIGZsb2F0IHJhdGlvID0gKChmbG9hdCkgbGVuZ3RoKSAvICgoZmxvYXQpIHB5bWF4KTsKKworCSAgICBsb3dlbmQgPSAoaW50KSAoKGZsb2F0KSB0b3BfeSArICgoZmxvYXQpIGJhc2V5ICogcmF0aW8pKTsKKwkgICAgaGlnaGVuZCA9IChpbnQpICgoZmxvYXQpIHRvcF95ICsgKChmbG9hdCkgKGJhc2V5ICsgbGVuZ3RoKSAqIHJhdGlvKSk7CisKKwkgICAgZG9fdl9saW5lKHRvcF95LCBwb3J0eCAtIDEsIEFDU19WTElORSwgbG93ZW5kKTsKKwkgICAgaWYgKGhpZ2hlbmQgPCBwb3J0eSkgeworCQlhdHRyb24oQV9SRVZFUlNFKTsKKwkJZG9fdl9saW5lKGxvd2VuZCwgcG9ydHggLSAxLCAnICcsIGhpZ2hlbmQgKyAxKTsKKwkJYXR0cm9mZihBX1JFVkVSU0UpOworCQlkb192X2xpbmUoaGlnaGVuZCArIDEsIHBvcnR4IC0gMSwgQUNTX1ZMSU5FLCBwb3J0eSk7CisJICAgIH0KKwl9IGVsc2UKKwkgICAgZG9fdl9saW5lKHRvcF95LCBwb3J0eCAtIDEsIEFDU19WTElORSwgcG9ydHkpOworCisJbXZhZGRjaCh0b3BfeSAtIDEsIHBvcnR4IC0gMSwgQUNTX1VSQ09STkVSKTsKKwltdmFkZGNoKHBvcnR5IC0gMSwgdG9wX3ggLSAxLCBBQ1NfTExDT1JORVIpOworCW12YWRkY2gocG9ydHkgLSAxLCBwb3J0eCAtIDEsIEFDU19MUkNPUk5FUik7CisKKwlpZiAoIXBlbmRpbmdfcGFuKSB7CisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKwkgICAgZ2V0dGltZW9mZGF5KCZiZWZvcmUsIDApOworI2VuZGlmCisJICAgIHdub3V0cmVmcmVzaChzdGRzY3IpOworCisJICAgIHBub3V0cmVmcmVzaChwYWQsCisJCQkgYmFzZXksIGJhc2V4LAorCQkJIHRvcF95LCB0b3BfeCwKKwkJCSBwb3J0eSAtIChweG1heCA+IHBvcnR4KSAtIDEsCisJCQkgcG9ydHggLSAocHltYXggPiBwb3J0eSkgLSAxKTsKKworCSAgICBkb3VwZGF0ZSgpOworI2lmIEhBVkVfR0VUVElNRU9GREFZCisJICAgIGlmICh0aW1pbmcpIHsKKwkJZG91YmxlIGVsYXBzZWQ7CisJCWdldHRpbWVvZmRheSgmYWZ0ZXIsIDApOworCQllbGFwc2VkID0gKGFmdGVyLnR2X3NlYyArIGFmdGVyLnR2X3VzZWMgLyAxLjBlNikKKwkJICAgIC0gKGJlZm9yZS50dl9zZWMgKyBiZWZvcmUudHZfdXNlYyAvIDEuMGU2KTsKKwkJbW92ZShMSU5FUyAtIDEsIENPTFMgLSAxMik7CisJCXByaW50dygiU2VjczogJTIuMDNmIiwgZWxhcHNlZCk7CisJCXJlZnJlc2goKTsKKwkgICAgfQorI2VuZGlmCisJfQorCisgICAgfSB3aGlsZQorCSgoYyA9IHBnZXRjKHBhZCkpICE9IEtFWV9FWElUKTsKKworICAgIHNjcm9sbG9rKHN0ZHNjciwgVFJVRSk7CS8qIHJlc2V0IHRvIGRyaXZlcidzIGRlZmF1bHQgKi8KK30KKworc3RhdGljIGludAorcGFkZ2V0Y2goV0lORE9XICp3aW4pCit7CisgICAgc3RhdGljIGludCBjb3VudDsKKyAgICBzdGF0aWMgaW50IGxhc3Q7CisgICAgaW50IGM7CisKKyAgICBpZiAoKHBlbmRpbmdfcGFuID0gKGNvdW50ID4gMCkpICE9IEZBTFNFKSB7CisJY291bnQtLTsKKwlwZW5kaW5nX3BhbiA9IChjb3VudCAhPSAwKTsKKyAgICB9IGVsc2UgeworCWZvciAoOzspIHsKKwkgICAgc3dpdGNoIChjID0gd0dldGNoYXIod2luKSkgeworCSAgICBjYXNlICchJzoKKwkJU2hlbGxPdXQoRkFMU0UpOworCQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIENUUkwoJ3InKToKKwkJZW5kd2luKCk7CisJCXJlZnJlc2goKTsKKwkJYyA9IEtFWV9SRUZSRVNIOworCQlicmVhazsKKwkgICAgY2FzZSBDVFJMKCdsJyk6CisJCWMgPSBLRVlfUkVGUkVTSDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1UnOgorCQljID0gS0VZX1VQOworCQlicmVhazsKKwkgICAgY2FzZSAnRCc6CisJCWMgPSBLRVlfRE9XTjsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1InOgorCQljID0gS0VZX1JJR0hUOworCQlicmVhazsKKwkgICAgY2FzZSAnTCc6CisJCWMgPSBLRVlfTEVGVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJysnOgorCQljID0gS0VZX0lMOworCQlicmVhazsKKwkgICAgY2FzZSAnLSc6CisJCWMgPSBLRVlfREw7CisJCWJyZWFrOworCSAgICBjYXNlICc+JzoKKwkJYyA9IEtFWV9JQzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJzwnOgorCQljID0gS0VZX0RDOworCQlicmVhazsKKwkgICAgY2FzZSBFUlI6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIGNhc2VfUVVJVDoKKwkJY291bnQgPSAwOworCQljID0gS0VZX0VYSVQ7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKwkJICAgIGNvdW50ID0gY291bnQgKiAxMCArIChjIC0gJzAnKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIGxhc3QgPSBjOworCSAgICBicmVhazsKKwl9CisJaWYgKGNvdW50ID4gMCkKKwkgICAgY291bnQtLTsKKyAgICB9CisgICAgcmV0dXJuIChsYXN0KTsKK30KKworI2RlZmluZSBQQURfSElHSCAyMDAKKyNkZWZpbmUgUEFEX1dJREUgMjAwCisKK3N0YXRpYyB2b2lkCitkZW1vX3BhZCh2b2lkKQorLyogRGVtb25zdHJhdGUgcGFkcy4gKi8KK3sKKyAgICBXSU5ET1cgKnBhbnBhZCA9IG5ld3BhZChQQURfSElHSCwgUEFEX1dJREUpOworCisgICAgaWYgKHBhbnBhZCA9PSAwKSB7CisJQ2Fubm90KCJjYW5ub3QgY3JlYXRlIHJlcXVlc3RlZCBwYWQiKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgZmlsbF9wYWQocGFucGFkLCBGQUxTRSk7CisKKyAgICBwYW5uZXJfbGVnZW5kKExJTkVTIC0gNCk7CisgICAgcGFubmVyX2xlZ2VuZChMSU5FUyAtIDMpOworICAgIHBhbm5lcl9sZWdlbmQoTElORVMgLSAyKTsKKyAgICBwYW5uZXJfbGVnZW5kKExJTkVTIC0gMSk7CisKKyAgICBrZXlwYWQocGFucGFkLCBUUlVFKTsKKworICAgIC8qIE1ha2UgdGhlIHBhZCAoaW5pdGlhbGx5KSBuYXJyb3cgZW5vdWdoIHRoYXQgYSB0cmFjZSBmaWxlIHdvbid0IHdyYXAuCisgICAgICogV2UnbGwgc3RpbGwgYmUgYWJsZSB0byB3aWRlbiBpdCBkdXJpbmcgYSB0ZXN0LCBzaW5jZSB0aGF0J3MgcmVxdWlyZWQKKyAgICAgKiBmb3IgdGVzdGluZyBib3VuZGFyaWVzLgorICAgICAqLworICAgIHBhbm5lcihwYW5wYWQsIDIsIDIsIExJTkVTIC0gNSwgQ09MUyAtIDE1LCBwYWRnZXRjaCk7CisKKyAgICBkZWx3aW4ocGFucGFkKTsKKyAgICBlbmR3aW4oKTsKKyAgICBlcmFzZSgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRlc3RzIGZyb20gSm9obiBCdXJuZWxsJ3MgUERDdXJzZXMgdGVzdGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitDb250aW51ZShXSU5ET1cgKndpbikKK3sKKyAgICBub2VjaG8oKTsKKyAgICB3bW92ZSh3aW4sIDEwLCAxKTsKKyAgICBtdndhZGRzdHIod2luLCAxMCwgMSwgIiBQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgd3JlZnJlc2god2luKTsKKyAgICB3R2V0Y2hhcih3aW4pOworfQorCitzdGF0aWMgdm9pZAorZmx1c2hpbnBfdGVzdChXSU5ET1cgKndpbikKKy8qIElucHV0IHRlc3QsIGFkYXB0ZWQgZnJvbSBKb2huIEJ1cm5lbGwncyBQREN1cnNlcyB0ZXN0ZXIgKi8KK3sKKyAgICBpbnQgdywgaCwgYngsIGJ5LCBzdywgc2gsIGk7CisKKyAgICBXSU5ET1cgKnN1YldpbjsKKyAgICB3Y2xlYXIod2luKTsKKworICAgIGdldG1heHl4KHdpbiwgaCwgdyk7CisgICAgZ2V0YmVneXgod2luLCBieSwgYngpOworICAgIHN3ID0gdyAvIDM7CisgICAgc2ggPSBoIC8gMzsKKyAgICBpZiAoKHN1YldpbiA9IHN1Yndpbih3aW4sIHNoLCBzdywgYnkgKyBoIC0gc2ggLSAyLCBieCArIHcgLSBzdyAtIDIpKSA9PSAwKQorCXJldHVybjsKKworI2lmZGVmIEFfQ09MT1IKKyAgICBpZiAodXNlX2NvbG9ycykgeworCWluaXRfcGFpcigyLCBDT0xPUl9DWUFOLCBDT0xPUl9CTFVFKTsKKwl3YmtnZChzdWJXaW4sIENPTE9SX1BBSVIoMikgfCAnICcpOworICAgIH0KKyNlbmRpZgorICAgIHdhdHRyc2V0KHN1YldpbiwgQV9CT0xEKTsKKyAgICBib3goc3ViV2luLCBBQ1NfVkxJTkUsIEFDU19ITElORSk7CisgICAgbXZ3YWRkc3RyKHN1YldpbiwgMiwgMSwgIlRoaXMgaXMgYSBzdWJ3aW5kb3ciKTsKKyAgICB3cmVmcmVzaCh3aW4pOworCisgICAgLyoKKyAgICAgKiBUaGlzIHVzZWQgdG8gc2V0ICdub2NicmVhaygpJy4gIEhvd2V2ZXIsIEFsZXhhbmRlciBMdWt5YW5vdiBzYXlzIHRoYXQKKyAgICAgKiBpdCBvbmx5IGhhcHBlbmVkIHRvICJ3b3JrIiBvbiBTVnI0IGJlY2F1c2UgdGhhdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAorICAgICAqIGVtdWxhdGUgbm9jYnJlYWsrbm9lY2hvIG1vZGUsIHdoZXJlYXMgbmN1cnNlcyBkb2VzLiAgVG8gZ2V0IHRoZSBkZXNpcmVkCisgICAgICogdGVzdCBiZWhhdmlvciwgd2UncmUgdXNpbmcgJ2NicmVhaygpJywgd2hpY2ggd2lsbCBhbGxvdyBhIHNpbmdsZQorICAgICAqIGNoYXJhY3RlciB0byByZXR1cm4gd2l0aG91dCBuZWVkaW5nIGEgbmV3bGluZS4gLSBULkRpY2tleSAxOTk3LzEwLzExLgorICAgICAqLworICAgIGNicmVhaygpOworICAgIG12d2FkZHN0cih3aW4sIDAsIDEsICJUaGlzIGlzIGEgdGVzdCBvZiB0aGUgZmx1c2hpbnAoKSBjYWxsLiIpOworCisgICAgbXZ3YWRkc3RyKHdpbiwgMiwgMSwgIlR5cGUgcmFuZG9tIGtleXMgZm9yIDUgc2Vjb25kcy4iKTsKKyAgICBtdndhZGRzdHIod2luLCAzLCAxLAorCSAgICAgICJUaGVzZSBzaG91bGQgYmUgZGlzY2FyZGVkIChub3QgZWNob2VkKSBhZnRlciB0aGUgc3Vid2luZG93IGdvZXMgYXdheS4iKTsKKyAgICB3cmVmcmVzaCh3aW4pOworCisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCW12d3ByaW50dyhzdWJXaW4sIDEsIDEsICJUaW1lID0gJWQiLCBpKTsKKwl3cmVmcmVzaChzdWJXaW4pOworCW5hcG1zKDEwMDApOworCWZsdXNoaW5wKCk7CisgICAgfQorCisgICAgZGVsd2luKHN1Yldpbik7CisgICAgd2VyYXNlKHdpbik7CisgICAgZmxhc2goKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIG5hcG1zKDEwMDApOworCisgICAgbXZ3YWRkc3RyKHdpbiwgMiwgMSwKKwkgICAgICAiSWYgeW91IHdlcmUgc3RpbGwgdHlwaW5nIHdoZW4gdGhlIHdpbmRvdyB0aW1lciBleHBpcmVkLCIpOworICAgIG12d2FkZHN0cih3aW4sIDMsIDEsCisJICAgICAgIm9yIGVsc2UgeW91IHR5cGVkIG5vdGhpbmcgYXQgYWxsIHdoaWxlIGl0IHdhcyBydW5uaW5nLCIpOworICAgIG12d2FkZHN0cih3aW4sIDQsIDEsCisJICAgICAgInRlc3Qgd2FzIGludmFsaWQuICBZb3UnbGwgc2VlIGdhcmJhZ2Ugb3Igbm90aGluZyBhdCBhbGwuICIpOworICAgIG12d2FkZHN0cih3aW4sIDYsIDEsICJQcmVzcyBhIGtleSIpOworICAgIHdtb3ZlKHdpbiwgOSwgMTApOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgZWNobygpOworICAgIHdHZXRjaGFyKHdpbik7CisgICAgZmx1c2hpbnAoKTsKKyAgICBtdndhZGRzdHIod2luLCAxMiwgMCwKKwkgICAgICAiSWYgeW91IHNlZSBhbnkga2V5IG90aGVyIHRoYW4gd2hhdCB5b3UgdHlwZWQsIGZsdXNoaW5wKCkgaXMgYnJva2VuLiIpOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICB3bW92ZSh3aW4sIDksIDEwKTsKKyAgICB3ZGVsY2god2luKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIHdtb3ZlKHdpbiwgMTIsIDApOworICAgIGNscnRvZW9sKCk7CisgICAgd2FkZHN0cih3aW4sCisJICAgICJXaGF0IHlvdSB0eXBlZCBzaG91bGQgbm93IGhhdmUgYmVlbiBkZWxldGVkOyBpZiBub3QsIHdkZWxjaCgpIGZhaWxlZC4iKTsKKyAgICBDb250aW51ZSh3aW4pOworCisgICAgY2JyZWFrKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWVudSB0ZXN0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBVU0VfTElCTUVOVQorCisjZGVmaW5lIE1FTlVfWQk4CisjZGVmaW5lIE1FTlVfWAk4CisKK3N0YXRpYyBpbnQKK21lbnVfdmlydHVhbGl6ZShpbnQgYykKK3sKKyAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gS0VZX0VYSVQpCisJcmV0dXJuIChNQVhfQ09NTUFORCArIDEpOworICAgIGVsc2UgaWYgKGMgPT0gJ3UnKQorCXJldHVybiAoUkVRX1NDUl9VTElORSk7CisgICAgZWxzZSBpZiAoYyA9PSAnZCcpCisJcmV0dXJuIChSRVFfU0NSX0RMSU5FKTsKKyAgICBlbHNlIGlmIChjID09ICdiJyB8fCBjID09IEtFWV9OUEFHRSkKKwlyZXR1cm4gKFJFUV9TQ1JfVVBBR0UpOworICAgIGVsc2UgaWYgKGMgPT0gJ2YnIHx8IGMgPT0gS0VZX1BQQUdFKQorCXJldHVybiAoUkVRX1NDUl9EUEFHRSk7CisgICAgZWxzZSBpZiAoYyA9PSAnbicgfHwgYyA9PSBLRVlfRE9XTikKKwlyZXR1cm4gKFJFUV9ORVhUX0lURU0pOworICAgIGVsc2UgaWYgKGMgPT0gJ3AnIHx8IGMgPT0gS0VZX1VQKQorCXJldHVybiAoUkVRX1BSRVZfSVRFTSk7CisgICAgZWxzZSBpZiAoYyA9PSAnICcpCisJcmV0dXJuIChSRVFfVE9HR0xFX0lURU0pOworICAgIGVsc2UgeworCWlmIChjICE9IEtFWV9NT1VTRSkKKwkgICAgYmVlcCgpOworCXJldHVybiAoYyk7CisgICAgfQorfQorCitzdGF0aWMgQ09OU1RfTUVOVVMgY2hhciAqYW5pbWFsc1tdID0KK3sKKyAgICAiTGlvbnMiLAorICAgICJUaWdlcnMiLAorICAgICJCZWFycyIsCisgICAgIihPaCBteSEpIiwKKyAgICAiTmV3dHMiLAorICAgICJQbGF0eXBpIiwKKyAgICAiTGVtdXJzIiwKKyAgICAiKE9oIHJlYWxseT8hKSIsCisgICAgIkxlb3BhcmRzIiwKKyAgICAiUGFudGhlcnMiLAorICAgICJQdW1hcyIsCisgICAgIkxpb25zLCBUaWdlcnMsIEJlYXJzLCAoT2ggbXkhKSwgTmV3dHMsIFBsYXR5cGksIExlbXVycyIsCisgICAgIkxpb25zLCBUaWdlcnMsIEJlYXJzLCAoT2ggbXkhKSwgTmV3dHMsIFBsYXR5cGksIExlbXVycywgTGlvbnMsIFRpZ2VycywgQmVhcnMsIChPaCBteSEpLCBOZXd0cywgUGxhdHlwaSwgTGVtdXJzIiwKKyAgICAoY2hhciAqKSAwCit9OworCitzdGF0aWMgdm9pZAorbWVudV90ZXN0KHZvaWQpCit7CisgICAgTUVOVSAqbTsKKyAgICBJVEVNICppdGVtc1tTSVpFT0YoYW5pbWFscyldOworICAgIElURU0gKippcCA9IGl0ZW1zOworICAgIENPTlNUX01FTlVTIGNoYXIgKiphcDsKKyAgICBpbnQgbXJvd3MsIG1jb2xzLCBjOworICAgIFdJTkRPVyAqbWVudXdpbjsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzayhBTExfTU9VU0VfRVZFTlRTLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorICAgIG12YWRkc3RyKDAsIDAsICJUaGlzIGlzIHRoZSBtZW51IHRlc3Q6Iik7CisgICAgbXZhZGRzdHIoMiwgMCwgIiAgVXNlIHVwIGFuZCBkb3duIGFycm93IHRvIG1vdmUgdGhlIHNlbGVjdCBiYXIuIik7CisgICAgbXZhZGRzdHIoMywgMCwgIiAgJ24nIGFuZCAncCcgYWN0IGxpa2UgYXJyb3dzLiIpOworICAgIG12YWRkc3RyKDQsIDAsCisJICAgICAiICAnYicgYW5kICdmJyBzY3JvbGwgdXAvZG93biAocGFnZSksICd1JyBhbmQgJ2QnIChsaW5lKS4iKTsKKyAgICBtdmFkZHN0cig1LCAwLCAiICBQcmVzcyByZXR1cm4gdG8gZXhpdC4iKTsKKyAgICByZWZyZXNoKCk7CisKKyAgICBmb3IgKGFwID0gYW5pbWFsczsgKmFwOyBhcCsrKSB7CisJaWYgKCgqaXAgPSBuZXdfaXRlbSgqYXAsICIiKSkgIT0gMCkKKwkgICAgKytpcDsKKyAgICB9CisgICAgKmlwID0gKElURU0gKikgMDsKKworICAgIG0gPSBuZXdfbWVudShpdGVtcyk7CisKKyAgICBzZXRfbWVudV9mb3JtYXQobSwgKFNJWkVPRihhbmltYWxzKSArIDEpIC8gMiwgMSk7CisgICAgc2NhbGVfbWVudShtLCAmbXJvd3MsICZtY29scyk7CisKKyAgICBtZW51d2luID0gbmV3d2luKG1yb3dzICsgMiwgbWNvbHMgKyAyLCBNRU5VX1ksIE1FTlVfWCk7CisgICAgc2V0X21lbnVfd2luKG0sIG1lbnV3aW4pOworICAgIGtleXBhZChtZW51d2luLCBUUlVFKTsKKyAgICBib3gobWVudXdpbiwgMCwgMCk7CisKKyAgICBzZXRfbWVudV9zdWIobSwgZGVyd2luKG1lbnV3aW4sIG1yb3dzLCBtY29scywgMSwgMSkpOworCisgICAgcG9zdF9tZW51KG0pOworCisgICAgd2hpbGUgKChjID0gbWVudV9kcml2ZXIobSwgbWVudV92aXJ0dWFsaXplKHdHZXRjaGFyKG1lbnV3aW4pKSkpICE9IEVfVU5LTk9XTl9DT01NQU5EKSB7CisJaWYgKGMgPT0gRV9OT1RfUE9TVEVEKQorCSAgICBicmVhazsKKwlpZiAoYyA9PSBFX1JFUVVFU1RfREVOSUVEKQorCSAgICBiZWVwKCk7CisJY29udGludWU7CisgICAgfQorCisgICAgKHZvaWQpIG12cHJpbnR3KExJTkVTIC0gMiwgMCwKKwkJICAgICJZb3UgY2hvc2U6ICVzXG4iLCBpdGVtX25hbWUoY3VycmVudF9pdGVtKG0pKSk7CisgICAgKHZvaWQpIGFkZHN0cigiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpOworICAgIHdHZXRjaGFyKHN0ZHNjcik7CisKKyAgICB1bnBvc3RfbWVudShtKTsKKyAgICBkZWx3aW4obWVudXdpbik7CisKKyAgICBmcmVlX21lbnUobSk7CisgICAgZm9yIChpcCA9IGl0ZW1zOyAqaXA7IGlwKyspCisJZnJlZV9pdGVtKCppcCk7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKDAsIChtbWFza190ICopIDApOworI2VuZGlmCit9CisKKyNpZmRlZiBUUkFDRQorI2RlZmluZSBUX1RCTChuYW1lKSB7ICNuYW1lLCBuYW1lIH0KK3N0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgdW5zaWduZWQgbWFzazsKK30gdF90YmxbXSA9IHsKKworICAgIFRfVEJMKFRSQUNFX0RJU0FCTEUpLAorCVRfVEJMKFRSQUNFX1RJTUVTKSwKKwlUX1RCTChUUkFDRV9UUFVUUyksCisJVF9UQkwoVFJBQ0VfVVBEQVRFKSwKKwlUX1RCTChUUkFDRV9NT1ZFKSwKKwlUX1RCTChUUkFDRV9DSEFSUFVUKSwKKwlUX1RCTChUUkFDRV9PUkRJTkFSWSksCisJVF9UQkwoVFJBQ0VfQ0FMTFMpLAorCVRfVEJMKFRSQUNFX1ZJUlRQVVQpLAorCVRfVEJMKFRSQUNFX0lFVkVOVCksCisJVF9UQkwoVFJBQ0VfQklUUyksCisJVF9UQkwoVFJBQ0VfSUNBTExTKSwKKwlUX1RCTChUUkFDRV9DQ0FMTFMpLAorCVRfVEJMKFRSQUNFX0RBVEFCQVNFKSwKKwlUX1RCTChUUkFDRV9BVFRSUyksCisJVF9UQkwoVFJBQ0VfTUFYSU1VTSksCisgICAgeworCShjaGFyICopIDAsIDAKKyAgICB9Cit9OworCitzdGF0aWMgY2hhciAqCit0cmFjZXRyYWNlKHVuc2lnbmVkIHRsZXZlbCkKK3sKKyAgICBzdGF0aWMgY2hhciAqYnVmOworICAgIGludCBuOworCisgICAgaWYgKGJ1ZiA9PSAwKSB7CisJc2l6ZV90IG5lZWQgPSAxMjsKKwlmb3IgKG4gPSAwOyB0X3RibFtuXS5uYW1lICE9IDA7IG4rKykKKwkgICAgbmVlZCArPSBzdHJsZW4odF90Ymxbbl0ubmFtZSkgKyAyOworCWJ1ZiA9IHR5cGVNYWxsb2MoY2hhciwgbmVlZCk7CisgICAgfQorICAgIHNwcmludGYoYnVmLCAiMHglMDJ4ID0geyIsIHRsZXZlbCk7CisgICAgaWYgKHRsZXZlbCA9PSAwKSB7CisJc3ByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgIiVzLCAiLCB0X3RibFswXS5uYW1lKTsKKyAgICB9IGVsc2UgeworCWZvciAobiA9IDE7IHRfdGJsW25dLm5hbWUgIT0gMDsgbisrKQorCSAgICBpZiAoKHRsZXZlbCAmIHRfdGJsW25dLm1hc2spID09IHRfdGJsW25dLm1hc2spIHsKKwkJc3RyY2F0KGJ1ZiwgdF90Ymxbbl0ubmFtZSk7CisJCXN0cmNhdChidWYsICIsICIpOworCSAgICB9CisgICAgfQorICAgIGlmIChidWZbc3RybGVuKGJ1ZikgLSAyXSA9PSAnLCcpCisJYnVmW3N0cmxlbihidWYpIC0gMl0gPSAnXDAnOworICAgIHJldHVybiAoc3RyY2F0KGJ1ZiwgIn0iKSk7Cit9CisKKy8qIGZha2UgYSBkeW5hbWljYWxseSByZWNvbmZpZ3VyYWJsZSBtZW51IHVzaW5nIHRoZSAwdGggZW50cnkgdG8gZGVzZWxlY3QKKyAqIHRoZSBvdGhlcnMKKyAqLworc3RhdGljIGludAorcnVuX3RyYWNlX21lbnUoTUVOVSAqIG0pCit7CisgICAgSVRFTSAqKml0ZW1zOworICAgIElURU0gKmksICoqcDsKKworICAgIGZvciAoOzspIHsKKwlib29sIGNoYW5nZWQgPSBGQUxTRTsKKwlzd2l0Y2ggKG1lbnVfZHJpdmVyKG0sIG1lbnVfdmlydHVhbGl6ZSh3R2V0Y2hhcihtZW51X3dpbihtKSkpKSkgeworCWNhc2UgRV9VTktOT1dOX0NPTU1BTkQ6CisJICAgIHJldHVybiBGQUxTRTsKKwlkZWZhdWx0OgorCSAgICBpdGVtcyA9IG1lbnVfaXRlbXMobSk7CisJICAgIGkgPSBjdXJyZW50X2l0ZW0obSk7CisJICAgIGlmIChpID09IGl0ZW1zWzBdKSB7CisJCWlmIChpdGVtX3ZhbHVlKGkpKSB7CisJCSAgICBmb3IgKHAgPSBpdGVtcyArIDE7ICpwICE9IDA7IHArKykKKwkJCWlmIChpdGVtX3ZhbHVlKCpwKSkgeworCQkJICAgIHNldF9pdGVtX3ZhbHVlKCpwLCBGQUxTRSk7CisJCQkgICAgY2hhbmdlZCA9IFRSVUU7CisJCQl9CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJZm9yIChwID0gaXRlbXMgKyAxOyAqcCAhPSAwOyBwKyspCisJCSAgICBpZiAoaXRlbV92YWx1ZSgqcCkpIHsKKwkJCXNldF9pdGVtX3ZhbHVlKGl0ZW1zWzBdLCBGQUxTRSk7CisJCQljaGFuZ2VkID0gVFJVRTsKKwkJCWJyZWFrOworCQkgICAgfQorCSAgICB9CisJICAgIGlmICghY2hhbmdlZCkKKwkJcmV0dXJuIFRSVUU7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK3RyYWNlX3NldCh2b2lkKQorLyogaW50ZXJhY3RpdmVseSBzZXQgdGhlIHRyYWNlIGxldmVsICovCit7CisgICAgTUVOVSAqbTsKKyAgICBJVEVNICppdGVtc1tTSVpFT0YodF90YmwpXTsKKyAgICBJVEVNICoqaXAgPSBpdGVtczsKKyAgICBpbnQgbXJvd3MsIG1jb2xzOworICAgIHVuc2lnbmVkIG5ld3RyYWNlOworICAgIGludCBuOworICAgIFdJTkRPVyAqbWVudXdpbjsKKworICAgIG12YWRkc3RyKDAsIDAsICJJbnRlcmFjdGl2ZWx5IHNldCB0cmFjZSBsZXZlbDoiKTsKKyAgICBtdmFkZHN0cigyLCAwLCAiICBQcmVzcyBzcGFjZSBiYXIgdG8gdG9nZ2xlIGEgc2VsZWN0aW9uLiIpOworICAgIG12YWRkc3RyKDMsIDAsICIgIFVzZSB1cCBhbmQgZG93biBhcnJvdyB0byBtb3ZlIHRoZSBzZWxlY3QgYmFyLiIpOworICAgIG12YWRkc3RyKDQsIDAsICIgIFByZXNzIHJldHVybiB0byBzZXQgdGhlIHRyYWNlIGxldmVsLiIpOworICAgIG12cHJpbnR3KDYsIDAsICIoQ3VycmVudCB0cmFjZSBsZXZlbCBpcyAlcykiLCB0cmFjZXRyYWNlKF9uY190cmFjaW5nKSk7CisKKyAgICByZWZyZXNoKCk7CisKKyAgICBmb3IgKG4gPSAwOyB0X3RibFtuXS5uYW1lICE9IDA7IG4rKykgeworCWlmICgoKmlwID0gbmV3X2l0ZW0odF90Ymxbbl0ubmFtZSwgIiIpKSAhPSAwKSB7CisJICAgICsraXA7CisJfQorICAgIH0KKyAgICAqaXAgPSAoSVRFTSAqKSAwOworCisgICAgbSA9IG5ld19tZW51KGl0ZW1zKTsKKworICAgIHNldF9tZW51X2Zvcm1hdChtLCAwLCAyKTsKKyAgICBzY2FsZV9tZW51KG0sICZtcm93cywgJm1jb2xzKTsKKworICAgIG1lbnVfb3B0c19vZmYobSwgT19PTkVWQUxVRSk7CisgICAgbWVudXdpbiA9IG5ld3dpbihtcm93cyArIDIsIG1jb2xzICsgMiwgTUVOVV9ZLCBNRU5VX1gpOworICAgIHNldF9tZW51X3dpbihtLCBtZW51d2luKTsKKyAgICBrZXlwYWQobWVudXdpbiwgVFJVRSk7CisgICAgYm94KG1lbnV3aW4sIDAsIDApOworCisgICAgc2V0X21lbnVfc3ViKG0sIGRlcndpbihtZW51d2luLCBtcm93cywgbWNvbHMsIDEsIDEpKTsKKworICAgIHBvc3RfbWVudShtKTsKKworICAgIGZvciAoaXAgPSBtZW51X2l0ZW1zKG0pOyAqaXA7IGlwKyspIHsKKwl1bnNpZ25lZCBtYXNrID0gdF90YmxbaXRlbV9pbmRleCgqaXApXS5tYXNrOworCWlmIChtYXNrID09IDApCisJICAgIHNldF9pdGVtX3ZhbHVlKCppcCwgX25jX3RyYWNpbmcgPT0gMCk7CisJZWxzZSBpZiAoKG1hc2sgJiBfbmNfdHJhY2luZykgPT0gbWFzaykKKwkgICAgc2V0X2l0ZW1fdmFsdWUoKmlwLCBUUlVFKTsKKyAgICB9CisKKyAgICB3aGlsZSAocnVuX3RyYWNlX21lbnUobSkpCisJY29udGludWU7CisKKyAgICBuZXd0cmFjZSA9IDA7CisgICAgZm9yIChpcCA9IG1lbnVfaXRlbXMobSk7ICppcDsgaXArKykKKwlpZiAoaXRlbV92YWx1ZSgqaXApKQorCSAgICBuZXd0cmFjZSB8PSB0X3RibFtpdGVtX2luZGV4KCppcCldLm1hc2s7CisgICAgdHJhY2UobmV3dHJhY2UpOworICAgIFRyYWNlKCgidHJhY2UgbGV2ZWwgaW50ZXJhY3RpdmVseSBzZXQgdG8gJXMiLCB0cmFjZXRyYWNlKF9uY190cmFjaW5nKSkpOworCisgICAgKHZvaWQpIG12cHJpbnR3KExJTkVTIC0gMiwgMCwKKwkJICAgICJUcmFjZSBsZXZlbCBpcyAlc1xuIiwgdHJhY2V0cmFjZShfbmNfdHJhY2luZykpOworICAgICh2b2lkKSBhZGRzdHIoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKTsKKyAgICB3R2V0Y2hhcihzdGRzY3IpOworCisgICAgdW5wb3N0X21lbnUobSk7CisgICAgZGVsd2luKG1lbnV3aW4pOworCisgICAgZnJlZV9tZW51KG0pOworICAgIGZvciAoaXAgPSBpdGVtczsgKmlwOyBpcCsrKQorCWZyZWVfaXRlbSgqaXApOworfQorI2VuZGlmIC8qIFRSQUNFICovCisjZW5kaWYgLyogVVNFX0xJQk1FTlUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGb3JtcyB0ZXN0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgVVNFX0xJQkZPUk0KK3N0YXRpYyBGSUVMRCAqCittYWtlX2xhYmVsKGludCBmcm93LCBpbnQgZmNvbCwgTkNVUlNFU19DT05TVCBjaGFyICpsYWJlbCkKK3sKKyAgICBGSUVMRCAqZiA9IG5ld19maWVsZCgxLCAoaW50KSBzdHJsZW4obGFiZWwpLCBmcm93LCBmY29sLCAwLCAwKTsKKworICAgIGlmIChmKSB7CisJc2V0X2ZpZWxkX2J1ZmZlcihmLCAwLCBsYWJlbCk7CisJc2V0X2ZpZWxkX29wdHMoZiwgKGludCkgKGZpZWxkX29wdHMoZikgJiB+T19BQ1RJVkUpKTsKKyAgICB9CisgICAgcmV0dXJuIChmKTsKK30KKworc3RhdGljIEZJRUxEICoKK21ha2VfZmllbGQoaW50IGZyb3csIGludCBmY29sLCBpbnQgcm93cywgaW50IGNvbHMsIGJvb2wgc2VjdXJlKQoreworICAgIEZJRUxEICpmID0gbmV3X2ZpZWxkKHJvd3MsIGNvbHMsIGZyb3csIGZjb2wsIDAsIHNlY3VyZSA/IDEgOiAwKTsKKworICAgIGlmIChmKSB7CisJc2V0X2ZpZWxkX2JhY2soZiwgQV9VTkRFUkxJTkUpOworCXNldF9maWVsZF91c2VycHRyKGYsICh2b2lkICopIDApOworICAgIH0KKyAgICByZXR1cm4gKGYpOworfQorCitzdGF0aWMgdm9pZAorZGlzcGxheV9mb3JtKEZPUk0gKiBmKQoreworICAgIFdJTkRPVyAqdzsKKyAgICBpbnQgcm93cywgY29sczsKKworICAgIHNjYWxlX2Zvcm0oZiwgJnJvd3MsICZjb2xzKTsKKworICAgIGlmICgodyA9IG5ld3dpbihyb3dzICsgMiwgY29scyArIDQsIDAsIDApKSAhPSAoV0lORE9XICopIDApIHsKKwlzZXRfZm9ybV93aW4oZiwgdyk7CisJc2V0X2Zvcm1fc3ViKGYsIGRlcndpbih3LCByb3dzLCBjb2xzLCAxLCAyKSk7CisJYm94KHcsIDAsIDApOworCWtleXBhZCh3LCBUUlVFKTsKKyAgICB9CisKKyAgICBpZiAocG9zdF9mb3JtKGYpICE9IEVfT0spCisJd3JlZnJlc2godyk7Cit9CisKK3N0YXRpYyB2b2lkCitlcmFzZV9mb3JtKEZPUk0gKiBmKQoreworICAgIFdJTkRPVyAqdyA9IGZvcm1fd2luKGYpOworICAgIFdJTkRPVyAqcyA9IGZvcm1fc3ViKGYpOworCisgICAgdW5wb3N0X2Zvcm0oZik7CisgICAgd2VyYXNlKHcpOworICAgIHdyZWZyZXNoKHcpOworICAgIGRlbHdpbihzKTsKKyAgICBkZWx3aW4odyk7Cit9CisKK3N0YXRpYyBpbnQKK2VkaXRfc2VjdXJlKEZJRUxEICogbWUsIGludCBjKQoreworICAgIGludCByb3dzLCBjb2xzLCBmcm93LCBmY29sLCBucm93LCBuYnVmOworCisgICAgaWYgKGZpZWxkX2luZm8obWUsICZyb3dzLCAmY29scywgJmZyb3csICZmY29sLCAmbnJvdywgJm5idWYpID09IEVfT0sKKwkmJiBuYnVmID4gMCkgeworCWNoYXIgKnNvdXJjZSA9IGZpZWxkX2J1ZmZlcihtZSwgMSk7CisJY2hhciB0ZW1wWzgwXTsKKwlsb25nIGxlbjsKKworCXN0cmNweSh0ZW1wLCBzb3VyY2UgPyBzb3VyY2UgOiAiIik7CisJbGVuID0gKGxvbmcpIChjaGFyICopIGZpZWxkX3VzZXJwdHIobWUpOworCWlmIChjIDw9IEtFWV9NQVgpIHsKKwkgICAgaWYgKGlzZ3JhcGgoYykgJiYgKGxlbiArIDEpIDwgKGludCkgc2l6ZW9mKHRlbXApKSB7CisJCXRlbXBbbGVuKytdID0gKGNoYXIpIGM7CisJCXRlbXBbbGVuXSA9IDA7CisJCXNldF9maWVsZF9idWZmZXIobWUsIDEsIHRlbXApOworCQljID0gJyonOworCSAgICB9IGVsc2UgeworCQljID0gMDsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHN3aXRjaCAoYykgeworCSAgICBjYXNlIFJFUV9CRUdfRklFTEQ6CisJICAgIGNhc2UgUkVRX0NMUl9FT0Y6CisJICAgIGNhc2UgUkVRX0NMUl9FT0w6CisJICAgIGNhc2UgUkVRX0RFTF9MSU5FOgorCSAgICBjYXNlIFJFUV9ERUxfV09SRDoKKwkgICAgY2FzZSBSRVFfRE9XTl9DSEFSOgorCSAgICBjYXNlIFJFUV9FTkRfRklFTEQ6CisJICAgIGNhc2UgUkVRX0lOU19DSEFSOgorCSAgICBjYXNlIFJFUV9JTlNfTElORToKKwkgICAgY2FzZSBSRVFfTEVGVF9DSEFSOgorCSAgICBjYXNlIFJFUV9ORVdfTElORToKKwkgICAgY2FzZSBSRVFfTkVYVF9XT1JEOgorCSAgICBjYXNlIFJFUV9QUkVWX1dPUkQ6CisJICAgIGNhc2UgUkVRX1JJR0hUX0NIQVI6CisJICAgIGNhc2UgUkVRX1VQX0NIQVI6CisJCWMgPSAwOwkJLyogd2UgZG9uJ3Qgd2FudCB0byBkbyBpbmxpbmUgZWRpdGluZyAqLworCQlicmVhazsKKwkgICAgY2FzZSBSRVFfQ0xSX0ZJRUxEOgorCQlpZiAobGVuKSB7CisJCSAgICB0ZW1wWzBdID0gMDsKKwkJICAgIHNldF9maWVsZF9idWZmZXIobWUsIDEsIHRlbXApOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIFJFUV9ERUxfQ0hBUjoKKwkgICAgY2FzZSBSRVFfREVMX1BSRVY6CisJCWlmIChsZW4pIHsKKwkJICAgIHRlbXBbLS1sZW5dID0gMDsKKwkJICAgIHNldF9maWVsZF9idWZmZXIobWUsIDEsIHRlbXApOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorCXNldF9maWVsZF91c2VycHRyKG1lLCAodm9pZCAqKSBsZW4pOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworc3RhdGljIGludAorZm9ybV92aXJ0dWFsaXplKEZPUk0gKiBmLCBXSU5ET1cgKncpCit7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IGNvZGU7CisJaW50IHJlc3VsdDsKKyAgICB9IGxvb2t1cFtdID0geworCXsgQ1RSTCgnQScpLAlSRVFfTkVYVF9DSE9JQ0UgfSwKKwl7IENUUkwoJ0InKSwJUkVRX1BSRVZfV09SRCB9LAorCXsgQ1RSTCgnQycpLAlSRVFfQ0xSX0VPTCB9LAorCXsgQ1RSTCgnRCcpLAlSRVFfRE9XTl9GSUVMRCB9LAorCXsgQ1RSTCgnRScpLAlSRVFfRU5EX0ZJRUxEIH0sCisJeyBDVFJMKCdGJyksCVJFUV9ORVhUX1BBR0UgfSwKKwl7IENUUkwoJ0cnKSwJUkVRX0RFTF9XT1JEIH0sCisJeyBDVFJMKCdIJyksCVJFUV9ERUxfUFJFViB9LAorCXsgQ1RSTCgnSScpLAlSRVFfSU5TX0NIQVIgfSwKKwl7IENUUkwoJ0snKSwJUkVRX0NMUl9FT0YgfSwKKwl7IENUUkwoJ0wnKSwJUkVRX0xFRlRfRklFTEQgfSwKKwl7IENUUkwoJ00nKSwJUkVRX05FV19MSU5FIH0sCisJeyBDVFJMKCdOJyksCVJFUV9ORVhUX0ZJRUxEIH0sCisJeyBDVFJMKCdPJyksCVJFUV9JTlNfTElORSB9LAorCXsgQ1RSTCgnUCcpLAlSRVFfUFJFVl9GSUVMRCB9LAorCXsgQ1RSTCgnUicpLAlSRVFfUklHSFRfRklFTEQgfSwKKwl7IENUUkwoJ1MnKSwJUkVRX0JFR19GSUVMRCB9LAorCXsgQ1RSTCgnVScpLAlSRVFfVVBfRklFTEQgfSwKKwl7IENUUkwoJ1YnKSwJUkVRX0RFTF9DSEFSIH0sCisJeyBDVFJMKCdXJyksCVJFUV9ORVhUX1dPUkQgfSwKKwl7IENUUkwoJ1gnKSwJUkVRX0NMUl9GSUVMRCB9LAorCXsgQ1RSTCgnWScpLAlSRVFfREVMX0xJTkUgfSwKKwl7IENUUkwoJ1onKSwJUkVRX1BSRVZfQ0hPSUNFIH0sCisJeyBFU0NBUEUsCU1BWF9GT1JNX0NPTU1BTkQgKyAxIH0sCisJeyBLRVlfQkFDS1NQQUNFLCBSRVFfREVMX1BSRVYgfSwKKwl7IEtFWV9ET1dOLAlSRVFfRE9XTl9DSEFSIH0sCisJeyBLRVlfRU5ELAlSRVFfTEFTVF9GSUVMRCB9LAorCXsgS0VZX0hPTUUsCVJFUV9GSVJTVF9GSUVMRCB9LAorCXsgS0VZX0xFRlQsCVJFUV9MRUZUX0NIQVIgfSwKKwl7IEtFWV9MTCwJUkVRX0xBU1RfRklFTEQgfSwKKwl7IEtFWV9ORVhULAlSRVFfTkVYVF9GSUVMRCB9LAorCXsgS0VZX05QQUdFLAlSRVFfTkVYVF9QQUdFIH0sCisJeyBLRVlfUFBBR0UsCVJFUV9QUkVWX1BBR0UgfSwKKwl7IEtFWV9QUkVWSU9VUywgUkVRX1BSRVZfRklFTEQgfSwKKwl7IEtFWV9SSUdIVCwJUkVRX1JJR0hUX0NIQVIgfSwKKwl7IEtFWV9VUCwJUkVRX1VQX0NIQVIgfSwKKwl7IFFVSVQsCQlNQVhfRk9STV9DT01NQU5EICsgMSB9CisgICAgfTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCisgICAgc3RhdGljIGludCBtb2RlID0gUkVRX0lOU19NT0RFOworICAgIGludCBjID0gd0dldGNoYXIodyk7CisgICAgdW5zaWduZWQgbjsKKyAgICBGSUVMRCAqbWUgPSBjdXJyZW50X2ZpZWxkKGYpOworICAgIGJvb2wgY3VycmVudCA9IFRSVUU7CisKKyAgICBpZiAoYyA9PSBDVFJMKCddJykpIHsKKwlpZiAobW9kZSA9PSBSRVFfSU5TX01PREUpIHsKKwkgICAgbW9kZSA9IFJFUV9PVkxfTU9ERTsKKwl9IGVsc2UgeworCSAgICBtb2RlID0gUkVRX0lOU19NT0RFOworCX0KKwljID0gbW9kZTsKKyAgICB9IGVsc2UgeworCWZvciAobiA9IDA7IG4gPCBTSVpFT0YobG9va3VwKTsgbisrKSB7CisJICAgIGlmIChsb29rdXBbbl0uY29kZSA9PSBjKSB7CisJCWMgPSBsb29rdXBbbl0ucmVzdWx0OworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgbXZwcmludHcoMCwgQ09MUyAtIDYsICIoJXMpIiwgbW9kZSA9PSBSRVFfSU5TX01PREUgPyAiSU5TIiA6ICJPVkwiKTsKKworICAgIC8qCisgICAgICogRm9yY2UgdGhlIGZpZWxkIHRoYXQgdGhlIHVzZXIgaXMgdHlwaW5nIGludG8gdG8gYmUgaW4gcmV2ZXJzZSB2aWRlbywKKyAgICAgKiB3aGlsZSB0aGUgb3RoZXIgZmllbGRzIGFyZSBzaG93biB1bmRlcmxpbmVkLgorICAgICAqLworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgUkVRX0JFR19GSUVMRDoKKyAgICBjYXNlIFJFUV9DTFJfRU9GOgorICAgIGNhc2UgUkVRX0NMUl9FT0w6CisgICAgY2FzZSBSRVFfQ0xSX0ZJRUxEOgorICAgIGNhc2UgUkVRX0RFTF9DSEFSOgorICAgIGNhc2UgUkVRX0RFTF9MSU5FOgorICAgIGNhc2UgUkVRX0RFTF9QUkVWOgorICAgIGNhc2UgUkVRX0RFTF9XT1JEOgorICAgIGNhc2UgUkVRX0VORF9GSUVMRDoKKyAgICBjYXNlIFJFUV9JTlNfQ0hBUjoKKyAgICBjYXNlIFJFUV9JTlNfTElORToKKyAgICBjYXNlIFJFUV9MRUZUX0NIQVI6CisgICAgY2FzZSBSRVFfTEVGVF9GSUVMRDoKKyAgICBjYXNlIFJFUV9ORVhUX1dPUkQ6CisgICAgY2FzZSBSRVFfUklHSFRfQ0hBUjoKKwljdXJyZW50ID0gVFJVRTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCWN1cnJlbnQgPSAoYyA8IEtFWV9NQVgpOworCWJyZWFrOworICAgIH0KKyAgICBpZiAoY3VycmVudCkgeworCWMgPSBlZGl0X3NlY3VyZShtZSwgYyk7CisJc2V0X2ZpZWxkX2JhY2sobWUsIEFfUkVWRVJTRSk7CisgICAgfSBlbHNlIHsKKwljID0gZWRpdF9zZWN1cmUobWUsIGMpOworCXNldF9maWVsZF9iYWNrKG1lLCBBX1VOREVSTElORSk7CisgICAgfQorICAgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50CitteV9mb3JtX2RyaXZlcihGT1JNICogZm9ybSwgaW50IGMpCit7CisgICAgaWYgKGMgPT0gKE1BWF9GT1JNX0NPTU1BTkQgKyAxKQorCSYmIGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9WQUxJREFUSU9OKSA9PSBFX09LKQorCXJldHVybiAoVFJVRSk7CisgICAgZWxzZSB7CisJYmVlcCgpOworCXJldHVybiAoRkFMU0UpOworICAgIH0KK30KKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorI2RlZmluZSBGSUVMRENIRUNLX0NCKGZ1bmMpIGJvb2wgZnVuYyhGSUVMRCAqIGZsZCwgY29uc3Qgdm9pZCAqIGRhdGEgR0NDX1VOVVNFRCkKKyNkZWZpbmUgQ0hBUl9DSEVDS19DQihmdW5jKSBib29sIGZ1bmMoaW50IGNoLCBjb25zdCB2b2lkICpkYXRhIEdDQ19VTlVTRUQpCisjZWxzZQorI2RlZmluZSBGSUVMRENIRUNLX0NCKGZ1bmMpIGludCBmdW5jKEZJRUxEICogZmxkLCBjaGFyICogZGF0YSBHQ0NfVU5VU0VEKQorI2RlZmluZSBDSEFSX0NIRUNLX0NCKGZ1bmMpIGludCBmdW5jKGludCBjaCwgY2hhciAqZGF0YSBHQ0NfVU5VU0VEKQorI2VuZGlmCisKKy8qCisgKiBBbGxvdyBhIG1pZGRsZSBpbml0aWFsLCBvcHRpb25hbGx5IHdpdGggYSAnLicgdG8gZW5kIGl0LgorICovCitzdGF0aWMKK0ZJRUxEQ0hFQ0tfQ0IobWlfZmllbGRfY2hlY2spCit7CisgICAgY2hhciAqcyA9IGZpZWxkX2J1ZmZlcihmbGQsIDApOworICAgIGludCBzdGF0ZSA9IDA7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBzW25dICE9ICdcMCc7ICsrbikgeworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJICAgIGlmIChzW25dID09ICcuJykgeworCQlpZiAobiAhPSAxKQorCQkgICAgcmV0dXJuIEZBTFNFOworCQlzdGF0ZSA9IDI7CisJICAgIH0gZWxzZSBpZiAoaXNzcGFjZShVQ2hhcihzW25dKSkpIHsKKwkJc3RhdGUgPSAyOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgaWYgKCFpc3NwYWNlKFVDaGFyKHNbbl0pKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgLyogZm9yY2UgdGhlIGZvcm0gdG8gZGlzcGxheSBhIGxlYWRpbmcgY2FwaXRhbCAqLworICAgIGlmIChpc2xvd2VyKFVDaGFyKHNbMF0pKSkgeworCXNbMF0gPSAoY2hhcikgdG91cHBlcihVQ2hhcihzWzBdKSk7CisJc2V0X2ZpZWxkX2J1ZmZlcihmbGQsIDAsIHMpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljCitDSEFSX0NIRUNLX0NCKG1pX2NoYXJfY2hlY2spCit7CisgICAgcmV0dXJuICgoaXNhbHBoYShjaCkgfHwgY2ggPT0gJy4nKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qCisgKiBQYXNzd29yZHMgc2hvdWxkIGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVycy4KKyAqLworc3RhdGljCitGSUVMRENIRUNLX0NCKHB3X2ZpZWxkX2NoZWNrKQoreworICAgIGNoYXIgKnMgPSBmaWVsZF9idWZmZXIoZmxkLCAwKTsKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IHNbbl0gIT0gJ1wwJzsgKytuKSB7CisJaWYgKGlzc3BhY2UoVUNoYXIoc1tuXSkpKSB7CisJICAgIGlmIChuIDwgNikKKwkJcmV0dXJuIEZBTFNFOworCX0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYworQ0hBUl9DSEVDS19DQihwd19jaGFyX2NoZWNrKQoreworICAgIHJldHVybiAoaXNncmFwaChjaCkgPyBUUlVFIDogRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAorZGVtb19mb3Jtcyh2b2lkKQoreworICAgIFdJTkRPVyAqdzsKKyAgICBGT1JNICpmb3JtOworICAgIEZJRUxEICpmWzEyXSwgKnNlY3VyZTsKKyAgICBGSUVMRFRZUEUgKmZ0eV9taWRkbGUgPSBuZXdfZmllbGR0eXBlKG1pX2ZpZWxkX2NoZWNrLCBtaV9jaGFyX2NoZWNrKTsKKyAgICBGSUVMRFRZUEUgKmZ0eV9wYXNzd2QgPSBuZXdfZmllbGR0eXBlKHB3X2ZpZWxkX2NoZWNrLCBwd19jaGFyX2NoZWNrKTsKKyAgICBpbnQgZmluaXNoZWQgPSAwLCBjOworICAgIHVuc2lnbmVkIG4gPSAwOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKEFMTF9NT1VTRV9FVkVOVFMsIChtbWFza190ICopIDApOworI2VuZGlmCisKKyAgICBtb3ZlKDE4LCAwKTsKKyAgICBhZGRzdHIoIkRlZmluZWQgZWRpdC90cmF2ZXJzYWwga2V5czogICBeUS9FU0MtIGV4aXQgZm9ybVxuIik7CisgICAgYWRkc3RyKCJeTiAgIC0tIGdvIHRvIG5leHQgZmllbGQgICAgICAgXlAgIC0tIGdvIHRvIHByZXZpb3VzIGZpZWxkXG4iKTsKKyAgICBhZGRzdHIoIkhvbWUgLS0gZ28gdG8gZmlyc3QgZmllbGQgICAgICBFbmQgLS0gZ28gdG8gbGFzdCBmaWVsZFxuIik7CisgICAgYWRkc3RyKCJeTCAgIC0tIGdvIHRvIGZpZWxkIHRvIGxlZnQgICAgXlIgIC0tIGdvIHRvIGZpZWxkIHRvIHJpZ2h0XG4iKTsKKyAgICBhZGRzdHIoIl5VICAgLS0gbW92ZSB1cHdhcmQgdG8gZmllbGQgICBeRCAgLS0gbW92ZSBkb3dud2FyZCB0byBmaWVsZFxuIik7CisgICAgYWRkc3RyKCJeVyAgIC0tIGdvIHRvIG5leHQgd29yZCAgICAgICAgXkIgIC0tIGdvIHRvIHByZXZpb3VzIHdvcmRcbiIpOworICAgIGFkZHN0cigiXlMgICAtLSBnbyB0byBzdGFydCBvZiBmaWVsZCAgIF5FICAtLSBnbyB0byBlbmQgb2YgZmllbGRcbiIpOworICAgIGFkZHN0cigiXkggICAtLSBkZWxldGUgcHJldmlvdXMgY2hhciAgIF5ZICAtLSBkZWxldGUgbGluZVxuIik7CisgICAgYWRkc3RyKCJeRyAgIC0tIGRlbGV0ZSBjdXJyZW50IHdvcmQgICAgXkMgIC0tIGNsZWFyIHRvIGVuZCBvZiBsaW5lXG4iKTsKKyAgICBhZGRzdHIoIl5LICAgLS0gY2xlYXIgdG8gZW5kIG9mIGZpZWxkICBeWCAgLS0gY2xlYXIgZmllbGRcbiIpOworICAgIGFkZHN0cigiQXJyb3cga2V5cyBtb3ZlIHdpdGhpbiBhIGZpZWxkIGFzIHlvdSB3b3VsZCBleHBlY3QuIF5dIHRvZ2dsZXMgb3ZlcmxheSBtb2RlLiIpOworCisgICAgbXZhZGRzdHIoNCwgNTcsICJGb3JtcyBFbnRyeSBUZXN0Iik7CisKKyAgICByZWZyZXNoKCk7CisKKyAgICAvKiBkZXNjcmliZSB0aGUgZm9ybSAqLworICAgIG1lbXNldChmLCAwLCBzaXplb2YoZikpOworICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMCwgMTUsICJTYW1wbGUgRm9ybSIpOworCisgICAgZltuKytdID0gbWFrZV9sYWJlbCgyLCAwLCAiTGFzdCBOYW1lIik7CisgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAwLCAxLCAxOCwgRkFMU0UpOworICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMUEhBLCAxKTsKKworICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMjAsICJGaXJzdCBOYW1lIik7CisgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAyMCwgMSwgMTIsIEZBTFNFKTsKKyAgICBzZXRfZmllbGRfdHlwZShmW24gLSAxXSwgVFlQRV9BTFBIQSwgMSk7CisKKyAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDM0LCAiTWlkZGxlIE5hbWUiKTsKKyAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDM0LCAxLCAxMiwgRkFMU0UpOworICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBmdHlfbWlkZGxlKTsKKworICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoNSwgMCwgIkNvbW1lbnRzIik7CisgICAgZltuKytdID0gbWFrZV9maWVsZCg2LCAwLCA0LCA0NiwgRkFMU0UpOworCisgICAgZltuKytdID0gbWFrZV9sYWJlbCg1LCAyMCwgIlBhc3N3b3JkOiIpOworICAgIHNlY3VyZSA9CisJZltuKytdID0gbWFrZV9maWVsZCg1LCAzMCwgMSwgOSwgVFJVRSk7CisgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIGZ0eV9wYXNzd2QpOworICAgIGZbbisrXSA9IChGSUVMRCAqKSAwOworCisgICAgaWYgKChmb3JtID0gbmV3X2Zvcm0oZikpICE9IDApIHsKKworCWRpc3BsYXlfZm9ybShmb3JtKTsKKworCXcgPSBmb3JtX3dpbihmb3JtKTsKKwlyYXcoKTsKKwlub25sKCk7CQkJLyogbGV0cyB1cyByZWFkIF5NJ3MgKi8KKwl3aGlsZSAoIWZpbmlzaGVkKSB7CisJICAgIHN3aXRjaCAoZm9ybV9kcml2ZXIoZm9ybSwgYyA9IGZvcm1fdmlydHVhbGl6ZShmb3JtLCB3KSkpIHsKKwkgICAgY2FzZSBFX09LOgorCQltdmFkZHN0cig1LCA1NywgZmllbGRfYnVmZmVyKHNlY3VyZSwgMSkpOworCQljbHJ0b2VvbCgpOworCQlyZWZyZXNoKCk7CisJCWJyZWFrOworCSAgICBjYXNlIEVfVU5LTk9XTl9DT01NQU5EOgorCQlmaW5pc2hlZCA9IG15X2Zvcm1fZHJpdmVyKGZvcm0sIGMpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQlicmVhazsKKwkgICAgfQorCX0KKworCWVyYXNlX2Zvcm0oZm9ybSk7CisKKwlmcmVlX2Zvcm0oZm9ybSk7CisgICAgfQorICAgIGZvciAoYyA9IDA7IGZbY10gIT0gMDsgYysrKQorCWZyZWVfZmllbGQoZltjXSk7CisgICAgZnJlZV9maWVsZHR5cGUoZnR5X21pZGRsZSk7CisgICAgZnJlZV9maWVsZHR5cGUoZnR5X3Bhc3N3ZCk7CisgICAgbm9yYXcoKTsKKyAgICBubCgpOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKEFMTF9NT1VTRV9FVkVOVFMsIChtbWFza190ICopIDApOworI2VuZGlmCit9CisjZW5kaWYgLyogVVNFX0xJQkZPUk0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBPdmVybGFwIHRlc3QKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2ZpbGx3aW4oV0lORE9XICp3aW4sIGNoYXIgY2gpCit7CisgICAgaW50IHksIHg7CisgICAgaW50IHkxLCB4MTsKKworICAgIGdldG1heHl4KHdpbiwgeTEsIHgxKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgeTE7IHkrKykgeworCXdtb3ZlKHdpbiwgeSwgMCk7CisJZm9yICh4ID0gMDsgeCA8IHgxOyB4KyspCisJICAgIHdhZGRjaCh3aW4sIFVDaGFyKGNoKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY3Jvc3N3aW4oV0lORE9XICp3aW4sIGNoYXIgY2gpCit7CisgICAgaW50IHksIHg7CisgICAgaW50IHkxLCB4MTsKKworICAgIGdldG1heHl4KHdpbiwgeTEsIHgxKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgeTE7IHkrKykgeworCWZvciAoeCA9IDA7IHggPCB4MTsgeCsrKQorCSAgICBpZiAoKCh4ID4gKHgxIC0gMSkgLyAzKSAmJiAoeCA8PSAoMiAqICh4MSAtIDEpKSAvIDMpKQorCQl8fCAoKCh5ID4gKHkxIC0gMSkgLyAzKSAmJiAoeSA8PSAoMiAqICh5MSAtIDEpKSAvIDMpKSkpIHsKKwkJd21vdmUod2luLCB5LCB4KTsKKwkJd2FkZGNoKHdpbiwgVUNoYXIoY2gpKTsKKwkgICAgfQorICAgIH0KK30KKworI2RlZmluZSBPVkVSTEFQX0ZMQVZPUlMgNQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF9oZWxwaXRlbShpbnQgc3RhdGUsIGludCBpdGVtLCBjaGFyICptZXNzYWdlKQoreworICAgIGludCByb3cgPSAoaXRlbSAvIDIpOworICAgIGludCBjb2wgPSAoKGl0ZW0gJSAyKSA/IENPTFMgLyAyIDogMCk7CisKKyAgICBtb3ZlKExJTkVTIC0gNiArIHJvdywgY29sKTsKKyAgICBwcmludHcoIiVjJWMgPSAlcyIsIHN0YXRlID09IHJvdyA/ICc+JyA6ICcgJywgJ2EnICsgaXRlbSwgbWVzc2FnZSk7CisgICAgY2xydG9lb2woKTsKK30KKworc3RhdGljIHZvaWQKK292ZXJsYXBfdGVzdF8xX2F0dHIoV0lORE9XICp3aW4sIGludCBmbGF2b3IsIGludCBjb2wpCit7CisgICAgc2hvcnQgY3BhaXIgPSAoc2hvcnQpICgxICsgKGZsYXZvciAqIDIpICsgY29sKTsKKworICAgIHN3aXRjaCAoZmxhdm9yKSB7CisgICAgY2FzZSAwOgorCXdhdHRyc2V0KHdpbiwgQV9OT1JNQUwpOworCWJyZWFrOworICAgIGNhc2UgMToKKwl3YXR0cnNldCh3aW4sIEFfQk9MRCk7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCWluaXRfcGFpcihjcGFpciwgQ09MT1JfQkxVRSwgQ09MT1JfV0hJVEUpOworCXdhdHRyc2V0KHdpbiwgQ09MT1JfUEFJUihjcGFpcikgfCBBX05PUk1BTCk7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCWluaXRfcGFpcihjcGFpciwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCXdhdHRyc2V0KHdpbiwgQ09MT1JfUEFJUihjcGFpcikgfCBBX0JPTEQpOworCWJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK292ZXJsYXBfdGVzdF8yX2F0dHIoV0lORE9XICp3aW4sIGludCBmbGF2b3IsIGludCBjb2wpCit7CisgICAgc2hvcnQgY3BhaXIgPSAoc2hvcnQpICg5ICsgKGZsYXZvciAqIDIpICsgY29sKTsKKworICAgIHN3aXRjaCAoZmxhdm9yKSB7CisgICAgY2FzZSAwOgorCS8qIG5vIGVmZmVjdCAqLworCWJyZWFrOworICAgIGNhc2UgMToKKwkvKiBubyBlZmZlY3QgKi8KKwlicmVhazsKKyAgICBjYXNlIDI6CisJaW5pdF9wYWlyKGNwYWlyLCBDT0xPUl9SRUQsIENPTE9SX0dSRUVOKTsKKwl3YmtnZHNldCh3aW4sICcgJyB8IEFfQkxJTksgfCBDT0xPUl9QQUlSKGNwYWlyKSk7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCXdia2dkc2V0KHdpbiwgJyAnIHwgQV9OT1JNQUwpOworCWJyZWFrOworICAgIH0KK30KKworc3RhdGljIGludAorb3ZlcmxhcF9oZWxwKGludCBzdGF0ZSwgaW50IGZsYXZvcnNbT1ZFUkxBUF9GTEFWT1JTXSkKK3sKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7CisgICAgaW50IGl0ZW07CisgICAgY29uc3QgY2hhciAqdGhzLCAqdGh0OworICAgIGNoYXIgbXNnWzgwXTsKKworICAgIGlmIChzdGF0ZSA8IDApCisJc3RhdGUgKz0gT1ZFUkxBUF9GTEFWT1JTOworICAgIHN0YXRlID0gc3RhdGUgJSBPVkVSTEFQX0ZMQVZPUlM7CisgICAgYXNzZXJ0KHN0YXRlID49IDAgJiYgc3RhdGUgPCBPVkVSTEFQX0ZMQVZPUlMpOworCisgICAgZm9yIChpdGVtID0gMDsgaXRlbSA8ICgyICogT1ZFUkxBUF9GTEFWT1JTKTsgKytpdGVtKSB7CisJcm93ID0gaXRlbSAvIDI7CisJY29sID0gaXRlbSAlIDI7CisJdGhzID0gY29sID8gIkIiIDogIkEiOworCXRodCA9IGNvbCA/ICJBIiA6ICJCIjsKKworCXN3aXRjaCAocm93KSB7CisJY2FzZSAwOgorCSAgICBmbGF2b3JzW3Jvd10gPSAwOworCSAgICBzcHJpbnRmKG1zZywgInJlZnJlc2ggJXMsIHRoZW4gJXMsIHRoZW4gZG91cGRhdGUuIiwgdGhzLCB0aHQpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIGlmICh1c2VfY29sb3JzKSB7CisJCWZsYXZvcnNbcm93XSAlPSA0OworCSAgICB9IGVsc2UgeworCQlmbGF2b3JzW3Jvd10gJT0gMjsKKwkgICAgfQorCSAgICBvdmVybGFwX3Rlc3RfMV9hdHRyKHN0ZHNjciwgZmxhdm9yc1tyb3ddLCBjb2wpOworCSAgICBzcHJpbnRmKG1zZywgImZpbGwgd2luZG93ICVzIHdpdGggbGV0dGVyICVzLiIsIHRocywgdGhzKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBpZiAodXNlX2NvbG9ycykgeworCQlmbGF2b3JzW3Jvd10gJT0gNDsKKwkgICAgfSBlbHNlIHsKKwkJZmxhdm9yc1tyb3ddICU9IDI7CisJICAgIH0KKwkgICAgc3dpdGNoIChmbGF2b3JzW3Jvd10pIHsKKwkgICAgY2FzZSAwOgorCQlzcHJpbnRmKG1zZywgImNyb3NzIHBhdHRlcm4gaW4gd2luZG93ICVzLiIsIHRocyk7CisJCWJyZWFrOworCSAgICBjYXNlIDE6CisJCXNwcmludGYobXNnLCAiZHJhdyBib3ggaW4gd2luZG93ICVzLiIsIHRocyk7CisJCWJyZWFrOworCSAgICBjYXNlIDI6CisJCXNwcmludGYobXNnLCAic2V0IGJhY2tncm91bmQgb2Ygd2luZG93ICVzLiIsIHRocyk7CisJCWJyZWFrOworCSAgICBjYXNlIDM6CisJCXNwcmludGYobXNnLCAicmVzZXQgYmFja2dyb3VuZCBvZiB3aW5kb3cgJXMuIiwgdGhzKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBmbGF2b3JzW3Jvd10gPSAwOworCSAgICBzcHJpbnRmKG1zZywgImNsZWFyIHdpbmRvdyAlcy4iLCB0aHMpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIGZsYXZvcnNbcm93XSAlPSA0OworCSAgICBzd2l0Y2ggKGZsYXZvcnNbcm93XSkgeworCSAgICBjYXNlIDA6CisJCXNwcmludGYobXNnLCAib3ZlcndyaXRlICVzIG9udG8gJXMuIiwgdGhzLCB0aHQpOworCQlicmVhazsKKwkgICAgY2FzZSAxOgorCQlzcHJpbnRmKG1zZywgImNvcHl3aW4oRkFMU0UpICVzIG9udG8gJXMuIiwgdGhzLCB0aHQpOworCQlicmVhazsKKwkgICAgY2FzZSAyOgorCQlzcHJpbnRmKG1zZywgImNvcHl3aW4oVFJVRSkgJXMgb250byAlcy4iLCB0aHMsIHRodCk7CisJCWJyZWFrOworCSAgICBjYXNlIDM6CisJCXNwcmludGYobXNnLCAib3ZlcmxheSAlcyBvbnRvICVzLiIsIHRocywgdGh0KTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCW92ZXJsYXBfaGVscGl0ZW0oc3RhdGUsIGl0ZW0sIG1zZyk7CisJd2F0dHJzZXQoc3Rkc2NyLCBBX05PUk1BTCk7CisJd2JrZ2RzZXQoc3Rkc2NyLCAnICcgfCBBX05PUk1BTCk7CisgICAgfQorICAgIG1vdmUoTElORVMgLSAxLCAwKTsKKyAgICBwcmludHcoIl5RL0VTQyA9IHRlcm1pbmF0ZSB0ZXN0LiAgVXAvZG93bi9zcGFjZSBzZWxlY3QgdGVzdCB2YXJpYXRpb25zICglZCAlZCkuIiwKKwkgICBzdGF0ZSwgZmxhdm9yc1tzdGF0ZV0pOworCisgICAgcmV0dXJuIHN0YXRlOworfQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0XzAoV0lORE9XICphLCBXSU5ET1cgKmIpCit7CisgICAgdG91Y2h3aW4oYSk7CisgICAgdG91Y2h3aW4oYik7CisgICAgd25vdXRyZWZyZXNoKGEpOworICAgIHdub3V0cmVmcmVzaChiKTsKKyAgICBkb3VwZGF0ZSgpOworfQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0XzEoaW50IGZsYXZvciwgaW50IGNvbCwgV0lORE9XICphLCBjaGFyIGZpbGwpCit7CisgICAgb3ZlcmxhcF90ZXN0XzFfYXR0cihhLCBmbGF2b3IsIGNvbCk7CisgICAgZmlsbHdpbihhLCBmaWxsKTsKKyAgICB3YXR0cnNldChhLCBBX05PUk1BTCk7Cit9CisKK3N0YXRpYyB2b2lkCitvdmVybGFwX3Rlc3RfMihpbnQgZmxhdm9yLCBpbnQgY29sLCBXSU5ET1cgKmEsIGNoYXIgZmlsbCkKK3sKKyAgICBvdmVybGFwX3Rlc3RfMl9hdHRyKGEsIGZsYXZvciwgY29sKTsKKyAgICBzd2l0Y2ggKGZsYXZvcikgeworICAgIGNhc2UgMDoKKwljcm9zc3dpbihhLCBmaWxsKTsKKwlicmVhazsKKyAgICBjYXNlIDE6CisJYm94KGEsIDAsIDApOworCWJyZWFrOworICAgIGNhc2UgMjoKKwkvKiBkb25lIGluIG92ZXJsYXBfdGVzdF8yX2F0dHIgKi8KKwlicmVhazsKKyAgICBjYXNlIDM6CisJLyogZG9uZSBpbiBvdmVybGFwX3Rlc3RfMl9hdHRyICovCisJYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0XzMoV0lORE9XICphKQoreworICAgIHdjbGVhcihhKTsKKyAgICB3bW92ZShhLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQKK292ZXJsYXBfdGVzdF80KGludCBmbGF2b3IsIFdJTkRPVyAqYSwgV0lORE9XICpiKQoreworICAgIHN3aXRjaCAoZmxhdm9yKSB7CisgICAgY2FzZSAwOgorCW92ZXJ3cml0ZShhLCBiKTsKKwlicmVhazsKKyAgICBjYXNlIDE6CisJY29weXdpbihhLCBiLCAwLCAwLCAwLCAwLCBnZXRtYXh5KGIpLCBnZXRtYXh4KGIpLCBGQUxTRSk7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCWNvcHl3aW4oYSwgYiwgMCwgMCwgMCwgMCwgZ2V0bWF4eShiKSwgZ2V0bWF4eChiKSwgVFJVRSk7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCW92ZXJsYXkoYSwgYik7CisJYnJlYWs7CisgICAgfQorfQorCisvKiB0ZXN0IGVmZmVjdHMgb2Ygb3ZlcmxhcHBpbmcgd2luZG93cyAqLworc3RhdGljIHZvaWQKK292ZXJsYXBfdGVzdCh2b2lkKQoreworICAgIGludCBjaDsKKyAgICBpbnQgc3RhdGUsIGZsYXZvcltPVkVSTEFQX0ZMQVZPUlNdOworCisgICAgV0lORE9XICp3aW4xID0gbmV3d2luKDksIDIwLCAzLCAzKTsKKyAgICBXSU5ET1cgKndpbjIgPSBuZXd3aW4oOSwgMjAsIDksIDE2KTsKKworICAgIGN1cnNfc2V0KDApOworICAgIHJhdygpOworICAgIHJlZnJlc2goKTsKKyAgICBtb3ZlKDAsIDApOworICAgIHByaW50dygiVGhpcyB0ZXN0IHNob3dzIHRoZSBiZWhhdmlvciBvZiB3bm91dHJlZnJlc2goKSB3aXRoIHJlc3BlY3QgdG9cbiIpOworICAgIHByaW50dygidGhlIHNoYXJlZCByZWdpb24gb2YgdHdvIG92ZXJsYXBwaW5nIHdpbmRvd3MgQSBhbmQgQi4gIFRoZSBjcm9zc1xuIik7CisgICAgcHJpbnR3KCJwYXR0ZXJuIGluIGVhY2ggd2luZG93IGRvZXMgbm90IG92ZXJsYXAgdGhlIG90aGVyLlxuIik7CisKKyAgICBtZW1zZXQoZmxhdm9yLCAwLCBzaXplb2YoZmxhdm9yKSk7CisgICAgc3RhdGUgPSBvdmVybGFwX2hlbHAoMCwgZmxhdm9yKTsKKworICAgIHdoaWxlICghaXNRdWl0KGNoID0gR2V0Y2hhcigpKSkKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnYSc6CQkvKiByZWZyZXNoIHdpbmRvdyBBIGZpcnN0LCB0aGVuIEIgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzAod2luMSwgd2luMik7CisJICAgIGJyZWFrOworCisJY2FzZSAnYic6CQkvKiByZWZyZXNoIHdpbmRvdyBCIGZpcnN0LCB0aGVuIEEgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzAod2luMiwgd2luMSk7CisJICAgIGJyZWFrOworCisJY2FzZSAnYyc6CQkvKiBmaWxsIHdpbmRvdyBBIHNvIGl0J3MgdmlzaWJsZSAqLworCSAgICBvdmVybGFwX3Rlc3RfMShmbGF2b3JbMV0sIDAsIHdpbjEsICdBJyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnZCc6CQkvKiBmaWxsIHdpbmRvdyBCIHNvIGl0J3MgdmlzaWJsZSAqLworCSAgICBvdmVybGFwX3Rlc3RfMShmbGF2b3JbMV0sIDEsIHdpbjIsICdCJyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnZSc6CQkvKiBjcm9zcyB0ZXN0IHBhdHRlcm4gaW4gd2luZG93IEEgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzIoZmxhdm9yWzJdLCAwLCB3aW4xLCAnQScpOworCSAgICBicmVhazsKKworCWNhc2UgJ2YnOgkJLyogY3Jvc3MgdGVzdCBwYXR0ZXJuIGluIHdpbmRvdyBBICovCisJICAgIG92ZXJsYXBfdGVzdF8yKGZsYXZvclsyXSwgMSwgd2luMiwgJ0InKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdnJzoJCS8qIGNsZWFyIHdpbmRvdyBBICovCisJICAgIG92ZXJsYXBfdGVzdF8zKHdpbjEpOworCSAgICBicmVhazsKKworCWNhc2UgJ2gnOgkJLyogY2xlYXIgd2luZG93IEIgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzMod2luMik7CisJICAgIGJyZWFrOworCisJY2FzZSAnaSc6CQkvKiBvdmVyd3JpdGUgQSBvbnRvIEIgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzQoZmxhdm9yWzRdLCB3aW4xLCB3aW4yKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdqJzoJCS8qIG92ZXJ3cml0ZSBCIG9udG8gQSAqLworCSAgICBvdmVybGFwX3Rlc3RfNChmbGF2b3JbNF0sIHdpbjIsIHdpbjEpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgnbicpOgorCWNhc2UgS0VZX0RPV046CisJICAgIHN0YXRlID0gb3ZlcmxhcF9oZWxwKHN0YXRlICsgMSwgZmxhdm9yKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ3AnKToKKwljYXNlIEtFWV9VUDoKKwkgICAgc3RhdGUgPSBvdmVybGFwX2hlbHAoc3RhdGUgLSAxLCBmbGF2b3IpOworCSAgICBicmVhazsKKworCWNhc2UgJyAnOgorCSAgICBmbGF2b3Jbc3RhdGVdICs9IDE7CisJICAgIHN0YXRlID0gb3ZlcmxhcF9oZWxwKHN0YXRlLCBmbGF2b3IpOworCSAgICBicmVhazsKKworCWNhc2UgJz8nOgorCSAgICBzdGF0ZSA9IG92ZXJsYXBfaGVscChzdGF0ZSwgZmxhdm9yKTsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKworICAgIGRlbHdpbih3aW4yKTsKKyAgICBkZWx3aW4od2luMSk7CisgICAgZXJhc2UoKTsKKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNYWluIHNlcXVlbmNlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBib29sCitkb19zaW5nbGVfdGVzdChjb25zdCBjaGFyIGMpCisvKiBwZXJmb3JtIGEgc2luZ2xlIHNwZWNpZmllZCB0ZXN0ICovCit7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnYSc6CisJZ2V0Y2hfdGVzdCgpOworCWJyZWFrOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICBjYXNlICdBJzoKKwlnZXRfd2NoX3Rlc3QoKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnYic6CisJYXR0cl90ZXN0KCk7CisJYnJlYWs7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGNhc2UgJ0InOgorCXdpZGVfYXR0cl90ZXN0KCk7CisJYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgJ2MnOgorCWlmICghdXNlX2NvbG9ycykKKwkgICAgQ2Fubm90KCJkb2VzIG5vdCBzdXBwb3J0IGNvbG9yLiIpOworCWVsc2UKKwkgICAgY29sb3JfdGVzdCgpOworCWJyZWFrOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICBjYXNlICdDJzoKKwlpZiAoIXVzZV9jb2xvcnMpCisJICAgIENhbm5vdCgiZG9lcyBub3Qgc3VwcG9ydCBjb2xvci4iKTsKKwllbHNlCisJICAgIHdpZGVfY29sb3JfdGVzdCgpOworCWJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlICdkJzoKKwlpZiAoIXVzZV9jb2xvcnMpCisJICAgIENhbm5vdCgiZG9lcyBub3Qgc3VwcG9ydCBjb2xvci4iKTsKKwllbHNlIGlmICghY2FuX2NoYW5nZV9jb2xvcigpKQorCSAgICBDYW5ub3QoImhhcyBoYXJkd2lyZWQgY29sb3IgdmFsdWVzLiIpOworCWVsc2UKKwkgICAgY29sb3JfZWRpdCgpOworCWJyZWFrOworCisjaWYgVVNFX1NPRlRLRVlTCisgICAgY2FzZSAnZSc6CisJc2xrX3Rlc3QoKTsKKwlicmVhazsKKyNlbmRpZgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICBjYXNlICdFJzoKKwl3aWRlX3Nsa190ZXN0KCk7CisJYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlICdmJzoKKwlhY3NfZGlzcGxheSgpOworCWJyZWFrOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICBjYXNlICdGJzoKKwl3aWRlX2Fjc19kaXNwbGF5KCk7CisJYnJlYWs7CisjZW5kaWYKKworI2lmIFVTRV9MSUJQQU5FTAorICAgIGNhc2UgJ28nOgorCWRlbW9fcGFuZWxzKGluaXRfcGFuZWwsIGZpbGxfcGFuZWwpOworCWJyZWFrOworI2VuZGlmCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVCAmJiBVU0VfTElCUEFORUwKKyAgICBjYXNlICdPJzoKKwlkZW1vX3BhbmVscyhpbml0X3dpZGVfcGFuZWwsIGZpbGxfd2lkZV9wYW5lbCk7CisJYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgJ2cnOgorCWFjc19hbmRfc2Nyb2xsKCk7CisJYnJlYWs7CisKKyAgICBjYXNlICdpJzoKKwlmbHVzaGlucF90ZXN0KHN0ZHNjcik7CisJYnJlYWs7CisKKyAgICBjYXNlICdrJzoKKwl0ZXN0X3Nncl9hdHRyaWJ1dGVzKCk7CisJYnJlYWs7CisKKyNpZiBVU0VfTElCTUVOVQorICAgIGNhc2UgJ20nOgorCW1lbnVfdGVzdCgpOworCWJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlICdwJzoKKwlkZW1vX3BhZCgpOworCWJyZWFrOworCisjaWYgVVNFX0xJQkZPUk0KKyAgICBjYXNlICdyJzoKKwlkZW1vX2Zvcm1zKCk7CisJYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgJ3MnOgorCW92ZXJsYXBfdGVzdCgpOworCWJyZWFrOworCisjaWYgVVNFX0xJQk1FTlUgJiYgZGVmaW5lZChUUkFDRSkKKyAgICBjYXNlICd0JzoKKwl0cmFjZV9zZXQoKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnPyc6CisJYnJlYWs7CisKKyAgICBkZWZhdWx0OgorCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRibFtdID0KKyAgICB7CisJIlVzYWdlOiBuY3Vyc2VzIFtvcHRpb25zXSIKKwksIiIKKwksIk9wdGlvbnM6IgorI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCSwiICAtYSBmLGIgICBzZXQgZGVmYXVsdC1jb2xvcnMgKGFzc3VtZWQgd2hpdGUtb24tYmxhY2spIgorCSwiICAtZCAgICAgICB1c2UgZGVmYXVsdC1jb2xvcnMgaWYgdGVybWluYWwgc3VwcG9ydHMgdGhlbSIKKyNlbmRpZgorI2lmIFVTRV9TT0ZUS0VZUworCSwiICAtZSBmbXQgICBzcGVjaWZ5IGZvcm1hdCBmb3Igc29mdC1rZXlzIHRlc3QgKGUpIgorI2VuZGlmCisjaWYgSEFWRV9SSVBPRkZMSU5FCisJLCIgIC1mICAgICAgIHJpcC1vZmYgZm9vdGVyIGxpbmUgKGNhbiByZXBlYXQpIgorCSwiICAtaCAgICAgICByaXAtb2ZmIGhlYWRlciBsaW5lIChjYW4gcmVwZWF0KSIKKyNlbmRpZgorCSwiICAtbSAgICAgICBkbyBub3QgdXNlIGNvbG9ycyIKKwksIiAgLXAgZmlsZSAgcmdiIHZhbHVlcyB0byB1c2UgaW4gJ2QnIHJhdGhlciB0aGFuIG5jdXJzZXMncyBidWlsdGluIgorI2lmIFVTRV9MSUJQQU5FTAorCSwiICAtcyBtc2VjICBzcGVjaWZ5IG5vbWluYWwgdGltZSBmb3IgcGFuZWwtZGVtbyAoZGVmYXVsdDogMSwgdG8gaG9sZCkiCisjZW5kaWYKKyNpZmRlZiBUUkFDRQorCSwiICAtdCBtYXNrICBzcGVjaWZ5IGRlZmF1bHQgdHJhY2UtbGV2ZWwgKG1heSB0b2dnbGUgd2l0aCBeVCkiCisjZW5kaWYKKyAgICB9OworICAgIHNpemVfdCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGJsKTsgbisrKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQKK3NldF90ZXJtaW5hbF9tb2Rlcyh2b2lkKQoreworICAgIG5vcmF3KCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsKKyAgICBpZGxvayhzdGRzY3IsIFRSVUUpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworfQorCisjaWZkZWYgU0lHVVNSMQorc3RhdGljIFJFVFNJR1RZUEUKK2Fubm91bmNlX3NpZyhpbnQgc2lnKQoreworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIkhhbmRsZWQgc2lnbmFsICVkXHJcbiIsIHNpZyk7Cit9CisjZW5kaWYKKworI2lmIEhBVkVfUklQT0ZGTElORQorc3RhdGljIGludAorcmlwX2Zvb3RlcihXSU5ET1cgKndpbiwgaW50IGNvbHMpCit7CisgICAgd2JrZ2Qod2luLCBBX1JFVkVSU0UpOworICAgIHdlcmFzZSh3aW4pOworICAgIHdtb3ZlKHdpbiwgMCwgMCk7CisgICAgd3ByaW50dyh3aW4sICJmb290ZXI6IHdpbmRvdyAlcCwgJWQgY29sdW1ucyIsIHdpbiwgY29scyk7CisgICAgd25vdXRyZWZyZXNoKHdpbik7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0aWMgaW50CityaXBfaGVhZGVyKFdJTkRPVyAqd2luLCBpbnQgY29scykKK3sKKyAgICB3YmtnZCh3aW4sIEFfUkVWRVJTRSk7CisgICAgd2VyYXNlKHdpbik7CisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3cHJpbnR3KHdpbiwgImhlYWRlcjogd2luZG93ICVwLCAlZCBjb2x1bW5zIiwgd2luLCBjb2xzKTsKKyAgICB3bm91dHJlZnJlc2god2luKTsKKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYgLyogSEFWRV9SSVBPRkZMSU5FICovCisKK3N0YXRpYyB2b2lkCittYWluX21lbnUoYm9vbCB0b3ApCit7CisgICAgY2hhciBjb21tYW5kOworCisgICAgZG8geworCSh2b2lkKSBwdXRzKCJUaGlzIGlzIHRoZSBuY3Vyc2VzIG1haW4gbWVudSIpOworCSh2b2lkKSBwdXRzKCJhID0ga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IHRlc3QiKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSh2b2lkKSBwdXRzKCJBID0gd2lkZS1jaGFyYWN0ZXIga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IHRlc3QiKTsKKyNlbmRpZgorCSh2b2lkKSBwdXRzKCJiID0gY2hhcmFjdGVyIGF0dHJpYnV0ZSB0ZXN0Iik7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkodm9pZCkgcHV0cygiQiA9IHdpZGUtY2hhcmFjdGVyIGF0dHJpYnV0ZSB0ZXN0Iik7CisjZW5kaWYKKwkodm9pZCkgcHV0cygiYyA9IGNvbG9yIHRlc3QgcGF0dGVybiIpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJKHZvaWQpIHB1dHMoIkMgPSBjb2xvciB0ZXN0IHBhdHRlcm4gdXNpbmcgd2lkZS1jaGFyYWN0ZXIgY2FsbHMiKTsKKyNlbmRpZgorCWlmICh0b3ApCisJICAgICh2b2lkKSBwdXRzKCJkID0gZWRpdCBSR0IgY29sb3IgdmFsdWVzIik7CisjaWYgVVNFX1NPRlRLRVlTCisJKHZvaWQpIHB1dHMoImUgPSBleGVyY2lzZSBzb2Z0IGtleXMiKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSh2b2lkKSBwdXRzKCJFID0gZXhlcmNpc2Ugc29mdCBrZXlzIHVzaW5nIHdpZGUtY2hhcmFjdGVycyIpOworI2VuZGlmCisjZW5kaWYKKwkodm9pZCkgcHV0cygiZiA9IGRpc3BsYXkgQUNTIGNoYXJhY3RlcnMiKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSh2b2lkKSBwdXRzKCJGID0gZGlzcGxheSBXaWRlLUFDUyBjaGFyYWN0ZXJzIik7CisjZW5kaWYKKwkodm9pZCkgcHV0cygiZyA9IGRpc3BsYXkgd2luZG93cyBhbmQgc2Nyb2xsaW5nIik7CisJKHZvaWQpIHB1dHMoImkgPSB0ZXN0IG9mIGZsdXNoaW5wKCkiKTsKKwkodm9pZCkgcHV0cygiayA9IGRpc3BsYXkgY2hhcmFjdGVyIGF0dHJpYnV0ZXMiKTsKKyNpZiBVU0VfTElCTUVOVQorCSh2b2lkKSBwdXRzKCJtID0gbWVudSBjb2RlIHRlc3QiKTsKKyNlbmRpZgorI2lmIFVTRV9MSUJQQU5FTAorCSh2b2lkKSBwdXRzKCJvID0gZXhlcmNpc2UgcGFuZWxzIGxpYnJhcnkiKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSh2b2lkKSBwdXRzKCJPID0gZXhlcmNpc2UgcGFuZWxzIHdpdGggd2lkZS1jaGFyYWN0ZXJzIik7CisjZW5kaWYKKyNlbmRpZgorCSh2b2lkKSBwdXRzKCJwID0gZXhlcmNpc2UgcGFkIGZlYXR1cmVzIik7CisJKHZvaWQpIHB1dHMoInEgPSBxdWl0Iik7CisjaWYgVVNFX0xJQkZPUk0KKwkodm9pZCkgcHV0cygiciA9IGV4ZXJjaXNlIGZvcm1zIGNvZGUiKTsKKyNlbmRpZgorCSh2b2lkKSBwdXRzKCJzID0gb3ZlcmxhcHBpbmctcmVmcmVzaCB0ZXN0Iik7CisjaWYgVVNFX0xJQk1FTlUgJiYgZGVmaW5lZChUUkFDRSkKKwkodm9pZCkgcHV0cygidCA9IHNldCB0cmFjZSBsZXZlbCIpOworI2VuZGlmCisJKHZvaWQpIHB1dHMoIj8gPSByZXBlYXQgdGhpcyBjb21tYW5kIHN1bW1hcnkiKTsKKworCSh2b2lkKSBmcHV0cygiPiAiLCBzdGRvdXQpOworCSh2b2lkKSBmZmx1c2goc3Rkb3V0KTsJLyogbmVjZXNzYXJ5IHVuZGVyIFNWcjQgY3Vyc2VzICovCisKKwkvKgorCSAqIFRoaXMgdXNlZCB0byBiZSBhbiAnZmdldHMoKScgY2FsbC4gIEhvd2V2ZXIgKG9uIExpbnV4LCBhdCBsZWFzdCkKKwkgKiBtaXhpbmcgc3RyZWFtIEkvTyBhbmQgJ3JlYWQoKScgKHVzZWQgaW4gdGhlIGxpYnJhcnkpIGNhdXNlcyB0aGUKKwkgKiBpbnB1dCBzdHJlYW0gdG8gYmUgZmx1c2hlZCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSB0d28uCisJICovCisJY29tbWFuZCA9IDA7CisJZm9yICg7OykgeworCSAgICBjaGFyIGNoID0gJ1wwJzsKKwkgICAgaWYgKHJlYWQoZmlsZW5vKHN0ZGluKSwgJmNoLCAxKSA8PSAwKSB7CisJCWlmIChjb21tYW5kID09IDApCisJCSAgICBjb21tYW5kID0gJ3EnOworCQlicmVhazsKKwkgICAgfSBlbHNlIGlmIChjb21tYW5kID09IDAgJiYgIWlzc3BhY2UoVUNoYXIoY2gpKSkgeworCQljb21tYW5kID0gY2g7CisJICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInKSB7CisJCWlmICgoY29tbWFuZCA9PSAnZCcpICYmICF0b3ApIHsKKwkJICAgICh2b2lkKSBmcHV0cygiRG8gbm90IG5lc3QgdGVzdC1kXG4iLCBzdGRvdXQpOworCQkgICAgY29tbWFuZCA9IDA7CisJCX0KKwkJaWYgKGNvbW1hbmQgIT0gMCkKKwkJICAgIGJyZWFrOworCQkodm9pZCkgZnB1dHMoIj4gIiwgc3Rkb3V0KTsKKwkJKHZvaWQpIGZmbHVzaChzdGRvdXQpOworCSAgICB9CisJfQorCisJaWYgKGRvX3NpbmdsZV90ZXN0KGNvbW1hbmQpKSB7CisJICAgIC8qCisJICAgICAqIFRoaXMgbWF5IGJlIG92ZXJraWxsOyBpdCdzIGludGVuZGVkIHRvIHJlc2V0IGV2ZXJ5dGhpbmcgYmFjaworCSAgICAgKiB0byB0aGUgaW5pdGlhbCB0ZXJtaW5hbCBtb2RlcyBzbyB0aGF0IHRlc3RzIGRvbid0IGdldCBpbgorCSAgICAgKiBlYWNoIG90aGVyJ3Mgd2F5LgorCSAgICAgKi8KKwkgICAgZmx1c2hpbnAoKTsKKwkgICAgc2V0X3Rlcm1pbmFsX21vZGVzKCk7CisJICAgIHJlc2V0X3Byb2dfbW9kZSgpOworCSAgICBjbGVhcigpOworCSAgICByZWZyZXNoKCk7CisJICAgIGVuZHdpbigpOworCSAgICBpZiAoY29tbWFuZCA9PSAnPycpIHsKKwkJKHZvaWQpIHB1dHMoIlRoaXMgaXMgdGhlIG5jdXJzZXMgY2FwYWJpbGl0eSB0ZXN0ZXIuIik7CisJCSh2b2lkKQorCQkgICAgcHV0cygiWW91IG1heSBzZWxlY3QgYSB0ZXN0IGZyb20gdGhlIG1haW4gbWVudSBieSB0eXBpbmcgdGhlIik7CisJCSh2b2lkKQorCQkgICAgcHV0cygia2V5IGxldHRlciBvZiB0aGUgY2hvaWNlICh0aGUgbGV0dGVyIHRvIGxlZnQgb2YgdGhlID0pIik7CisJCSh2b2lkKQorCQkgICAgcHV0cygiYXQgdGhlID4gcHJvbXB0LiAgVHlwZSBgcScgdG8gZXhpdC4iKTsKKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9CisgICAgfSB3aGlsZQorCShjb21tYW5kICE9ICdxJyk7Cit9CisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwltYWluKGFyZ2MsYXJndikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBva0NPTE9SKG4pICgobikgPj0gMCAmJiAobikgPCBtYXhfY29sb3JzKQorI2RlZmluZSBva1JHQihuKSAgICgobikgPj0gMCAmJiAobikgPD0gMTAwMCkKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGM7CisgICAgaW50IG15X2VfcGFyYW0gPSAxOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorICAgIGludCBkZWZhdWx0X2ZnID0gQ09MT1JfV0hJVEU7CisgICAgaW50IGRlZmF1bHRfYmcgPSBDT0xPUl9CTEFDSzsKKyAgICBib29sIGFzc3VtZWRfY29sb3JzID0gRkFMU0U7CisgICAgYm9vbCBkZWZhdWx0X2NvbG9ycyA9IEZBTFNFOworI2VuZGlmCisgICAgY2hhciAqcGFsZXR0ZV9maWxlID0gMDsKKyAgICBib29sIG1vbm9jaHJvbWUgPSBGQUxTRTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYTpkZTpmaG1wOnM6dDoiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGMpIHsKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKwljYXNlICdhJzoKKwkgICAgYXNzdW1lZF9jb2xvcnMgPSBUUlVFOworCSAgICBzc2NhbmYob3B0YXJnLCAiJWQsJWQiLCAmZGVmYXVsdF9mZywgJmRlZmF1bHRfYmcpOworCSAgICBicmVhazsKKwljYXNlICdkJzoKKwkgICAgZGVmYXVsdF9jb2xvcnMgPSBUUlVFOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgJ2UnOgorCSAgICBteV9lX3BhcmFtID0gYXRvaShvcHRhcmcpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCSAgICBpZiAobXlfZV9wYXJhbSA+IDMpCS8qIGFsbG93IGV4dGVuZGVkIGxheW91dHMgKi8KKwkJdXNhZ2UoKTsKKyNlbHNlCisJICAgIGlmIChteV9lX3BhcmFtID4gMSkKKwkJdXNhZ2UoKTsKKyNlbmRpZgorCSAgICBicmVhazsKKyNpZiBIQVZFX1JJUE9GRkxJTkUKKwljYXNlICdmJzoKKwkgICAgcmlwb2ZmbGluZSgtMSwgcmlwX2Zvb3Rlcik7CisJICAgIGJyZWFrOworCWNhc2UgJ2gnOgorCSAgICByaXBvZmZsaW5lKDEsIHJpcF9oZWFkZXIpOworCSAgICBicmVhazsKKyNlbmRpZiAvKiBIQVZFX1JJUE9GRkxJTkUgKi8KKwljYXNlICdtJzoKKwkgICAgbW9ub2Nocm9tZSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3AnOgorCSAgICBwYWxldHRlX2ZpbGUgPSBvcHRhcmc7CisJICAgIGJyZWFrOworI2lmIFVTRV9MSUJQQU5FTAorCWNhc2UgJ3MnOgorCSAgICBuYXBfbXNlYyA9IGF0b2wob3B0YXJnKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBUUkFDRQorCWNhc2UgJ3QnOgorCSAgICBzYXZlX3RyYWNlID0gKHVuc2lnbmVkKSBzdHJ0b2wob3B0YXJnLCAwLCAwKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlJ3Mgbm8gbWVudXMgKHVubGlrZWx5IGZvciBuY3Vyc2VzISksIHRoZW4gd2UnbGwgaGF2ZSB0byBzZXQKKyAgICAgKiB0cmFjaW5nIG9uIGluaXRpYWxseSwganVzdCBpbiBjYXNlIHRoZSB1c2VyIHdhbnRzIHRvIHRlc3Qgc29tZXRoaW5nIHRoYXQKKyAgICAgKiBkb2Vzbid0IGludm9sdmUgd0dldGNoYXIuCisgICAgICovCisjaWZkZWYgVFJBQ0UKKyAgICAvKiBlbmFibGUgZGVidWdnaW5nICovCisjaWYgIVVTRV9MSUJNRU5VCisgICAgdHJhY2Uoc2F2ZV90cmFjZSk7CisjZWxzZQorICAgIGlmICghaXNhdHR5KGZpbGVubyhzdGRpbikpKQorCXRyYWNlKHNhdmVfdHJhY2UpOworI2VuZGlmIC8qIFVTRV9MSUJNRU5VICovCisjZW5kaWYgLyogVFJBQ0UgKi8KKworI2lmIFVTRV9TT0ZUS0VZUworICAgIC8qIHRlbGwgaXQgd2UncmUgZ29pbmcgdG8gcGxheSB3aXRoIHNvZnQga2V5cyAqLworICAgIHNsa19pbml0KG15X2VfcGFyYW0pOworI2VuZGlmCisKKyNpZmRlZiBTSUdVU1IxCisgICAgLyogc2V0IHVwIG51bGwgc2lnbmFsIGNhdGNoZXIgc28gd2UgY2FuIHNlZSB3aGF0IGludGVycnVwdHMgdG8gZ2V0Y2ggZG8gKi8KKyAgICBzaWduYWwoU0lHVVNSMSwgYW5ub3VuY2Vfc2lnKTsKKyNlbmRpZgorCisgICAgLyogd2UgbXVzdCBpbml0aWFsaXplIHRoZSBjdXJzZXMgZGF0YSBzdHJ1Y3R1cmUgb25seSBvbmNlICovCisgICAgaW5pdHNjcigpOworICAgIGJrZ2RzZXQoQkxBTkspOworCisgICAgLyogdGVzdHMsIGluIGdlbmVyYWwsIHdpbGwgd2FudCB0aGVzZSBtb2RlcyAqLworICAgIHVzZV9jb2xvcnMgPSBtb25vY2hyb21lID8gRkFMU0UgOiBoYXNfY29sb3JzKCk7CisKKyAgICBpZiAodXNlX2NvbG9ycykgeworCXN0YXJ0X2NvbG9yKCk7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OX1BBVENICisJbWF4X2NvbG9ycyA9IENPTE9SUzsJLyogd2FzID4gMTYgPyAxNiA6IENPTE9SUyAqLworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKGRlZmF1bHRfY29sb3JzKSB7CisJICAgIHVzZV9kZWZhdWx0X2NvbG9ycygpOworCSAgICBtaW5fY29sb3JzID0gLTE7CisJfQorI2lmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCA+PSAyMDAwMDcwOAorCWVsc2UgaWYgKGFzc3VtZWRfY29sb3JzKQorCSAgICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoZGVmYXVsdF9mZywgZGVmYXVsdF9iZyk7CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UgLyogbm9ybWFsIFNWcjQgY3Vyc2VzICovCisJbWF4X2NvbG9ycyA9IENPTE9SUzsJLyogd2FzID4gOCA/IDggOiBDT0xPUlMgKi8KKyNlbmRpZgorCW1heF9wYWlycyA9IENPTE9SX1BBSVJTOwkvKiB3YXMgPiAyNTYgPyAyNTYgOiBDT0xPUl9QQUlSUyAqLworCisJaWYgKGNhbl9jaGFuZ2VfY29sb3IoKSkgeworCSAgICBzaG9ydCBjcDsKKwkgICAgYWxsX2NvbG9ycyA9IHR5cGVNYWxsb2MoUkdCX0RBVEEsICh1bnNpZ25lZCkgbWF4X2NvbG9ycyk7CisJICAgIGZvciAoY3AgPSAwOyBjcCA8IG1heF9jb2xvcnM7ICsrY3ApIHsKKwkJY29sb3JfY29udGVudChjcCwKKwkJCSAgICAgICZhbGxfY29sb3JzW2NwXS5yZWQsCisJCQkgICAgICAmYWxsX2NvbG9yc1tjcF0uZ3JlZW4sCisJCQkgICAgICAmYWxsX2NvbG9yc1tjcF0uYmx1ZSk7CisJICAgIH0KKwkgICAgaWYgKHBhbGV0dGVfZmlsZSAhPSAwKSB7CisJCUZJTEUgKmZwID0gZm9wZW4ocGFsZXR0ZV9maWxlLCAiciIpOworCQlpZiAoZnAgIT0gMCkgeworCQkgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKwkJICAgIGludCByZWQsIGdyZWVuLCBibHVlOworCQkgICAgaW50IHNjYWxlID0gMTAwMDsKKwkJICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmcCkgIT0gMCkgeworCQkJaWYgKHNzY2FuZihidWZmZXIsICJzY2FsZTolZCIsICZjKSA9PSAxKSB7CisJCQkgICAgc2NhbGUgPSBjOworCQkJfSBlbHNlIGlmIChzc2NhbmYoYnVmZmVyLCAiJWQ6JWQgJWQgJWQiLAorCQkJCQkgICZjLAorCQkJCQkgICZyZWQsCisJCQkJCSAgJmdyZWVuLAorCQkJCQkgICZibHVlKSA9PSA0CisJCQkJICAgJiYgb2tDT0xPUihjKQorCQkJCSAgICYmIG9rUkdCKHJlZCkKKwkJCQkgICAmJiBva1JHQihncmVlbikKKwkJCQkgICAmJiBva1JHQihibHVlKSkgeworCQkJICAgIGFsbF9jb2xvcnNbY10ucmVkID0gKHNob3J0KSAoKHJlZCAqIDEwMDApIC8gc2NhbGUpOworCQkJICAgIGFsbF9jb2xvcnNbY10uZ3JlZW4gPSAoc2hvcnQpICgoZ3JlZW4gKiAxMDAwKSAvIHNjYWxlKTsKKwkJCSAgICBhbGxfY29sb3JzW2NdLmJsdWUgPSAoc2hvcnQpICgoYmx1ZSAqIDEwMDApIC8gc2NhbGUpOworCQkJfQorCQkgICAgfQorCQkgICAgZmNsb3NlKGZwKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXRfdGVybWluYWxfbW9kZXMoKTsKKyAgICBkZWZfcHJvZ19tb2RlKCk7CisKKyAgICAvKgorICAgICAqIFJldHVybiB0byB0ZXJtaW5hbCBtb2RlLCBzbyB3ZSdyZSBndWFyYW50ZWVkIG9mIGJlaW5nIGFibGUgdG8KKyAgICAgKiBzZWxlY3QgdGVybWluYWwgY29tbWFuZHMgZXZlbiBpZiB0aGUgY2FwYWJpbGl0aWVzIGFyZSB3cm9uZy4KKyAgICAgKi8KKyAgICBlbmR3aW4oKTsKKworI2lmIEhBVkVfQ1VSU0VTX1ZFUlNJT04KKyAgICAodm9pZCkgcHJpbnRmKCJXZWxjb21lIHRvICVzLiAgUHJlc3MgPyBmb3IgaGVscC5cbiIsIGN1cnNlc192ZXJzaW9uKCkpOworI2VsaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fTUFKT1IpICYmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OX01JTk9SKSAmJiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCkKKyAgICAodm9pZCkgcHJpbnRmKCJXZWxjb21lIHRvIG5jdXJzZXMgJWQuJWQuJWQuICBQcmVzcyA/IGZvciBoZWxwLlxuIiwKKwkJICBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IsCisJCSAgTkNVUlNFU19WRVJTSU9OX01JTk9SLAorCQkgIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCk7CisjZWxzZQorICAgICh2b2lkKSBwdXRzKCJXZWxjb21lIHRvIG5jdXJzZXMuICBQcmVzcyA/IGZvciBoZWxwLiIpOworI2VuZGlmCisKKyAgICBtYWluX21lbnUoVFJVRSk7CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisvKiBuY3Vyc2VzLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS90ZXN0L25jdXJzZXNfdHN0LmhpbiBiL3Rlc3QvbmN1cnNlc190c3QuaGluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzdjYmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L25jdXJzZXNfdHN0LmhpbgpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogbmN1cnNlc190c3QuaGluLHYgMS4yIDE5OTgvMDIvMTEgMTI6MTQ6MDUgdG9tIEV4cCAkCisgKgorICogVGhpcyBpcyBhIHRlbXBsYXRlLWZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgIm5jdXJzZXNfY2ZnLmgiIGZpbGUuCisgKgorICogUmF0aGVyIHRoYW4gbGlzdCBldmVyeSBkZWZpbml0aW9uLCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQgc3Vic3RpdHV0ZXMKKyAqIHRoZSBkZWZpbml0aW9ucyB0aGF0IGl0IGZpbmRzIHVzaW5nICdzZWQnLiAgWW91IG5lZWQgYSBwYXRjaCAoOTcxMjIyKQorICogdG8gYXV0b2NvbmYgMi4xMiB0byBkbyB0aGlzLgorICovCisjaWZuZGVmIE5DX0NPTkZJR19ICisjZGVmaW5lIE5DX0NPTkZJR19ICitAREVGU0AKKworCS8qIFRoZSBDIGNvbXBpbGVyIG1heSBub3QgdHJlYXQgdGhlc2UgcHJvcGVybHkgYnV0IEMrKyBoYXMgdG8gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGNvbnN0CisjdW5kZWYgaW5saW5lCisjZWxzZQorI2lmIGRlZmluZWQobGludCkgfHwgZGVmaW5lZChUUkFDRSkKKyN1bmRlZiBpbmxpbmUKKyNkZWZpbmUgaW5saW5lIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBOQ19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdC9uZXdkZW1vLmMgYi90ZXN0L25ld2RlbW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDM5OTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9uZXdkZW1vLmMKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiAgbmV3ZGVtby5jCS0JQSBkZW1vIHByb2dyYW0gdXNpbmcgUERDdXJzZXMuIFRoZSBwcm9ncmFtIGlsbHVzdHJhdGUKKyAqICAJIAkJdGhlIHVzZSBvZiBjb2xvdXJzIGZvciB0ZXh0IG91dHB1dC4KKyAqCisgKiAkSWQ6IG5ld2RlbW8uYyx2IDEuMzEgMjAwOC8wOC8wMyAyMDoxOTozOCB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKy8qCisgKiAgVGhlIEF1c3RyYWxpYW4gbWFwCisgKi8KK3N0YXRpYyBDT05TVF9NRU5VUyBjaGFyICpBdXNNYXBbMTZdID0KK3sKKyAgICAiICAgICAgICAgICBBICAgICAgICAgICBBICIsCisgICAgIiAgICBOLlQuIEFBQUFBICAgICAgIEFBQUEgIiwKKyAgICAiICAgICBBQUFBQUFBQUFBQSAgQUFBQUFBQUEgIiwKKyAgICAiICAgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBRbGQuIiwKKyAgICAiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgIiwKKyAgICAiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBICIsCisgICAgIiBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBICIsCisgICAgIiAgIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgTi5TLlcuIiwKKyAgICAiVy5BLiBBQUFBQUFBQUEgICAgICBBQUFBQUEgVmljLiIsCisgICAgIiAgICAgICBBQUEgICBTLkEuICAgICBBQSIsCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgQSAgVGFzLiIsCisgICAgIiIKK307CisKKy8qCisgKiAgRnVubnkgbWVzc2FnZXMKKyAqLworI2RlZmluZSBOTUVTU0FHRVMgICA2CisKK3N0YXRpYyBOQ1VSU0VTX0NPTlNUIGNoYXIgKm1lc3NhZ2VzW10gPQoreworICAgICJIZWxsbyBmcm9tIHRoZSBMYW5kIERvd24gVW5kZXIiLAorICAgICJUaGUgTGFuZCBvZiBjcm9jcy4gYW5kIGEgYmlnIFJlZCBSb2NrIiwKKyAgICAiV2hlcmUgdGhlIHN1bmZsb3dlciBydW5zIGFsb25nIHRoZSBoaWdod2F5cyIsCisgICAgInRoZSBkdXN0eSByZWQgcm9hZHMgbGVhZCBvbmUgdG8gbG9uZWxpbmVzcyIsCisgICAgIkJsdWUgc2t5IGluIHRoZSBtb3JuaW5nIGFuZCIsCisgICAgImZyZWV6aW5nIG5pZ2h0cyBhbmQgdHdpbmtsaW5nIHN0YXJzIiwKKyAgICAiIgorfTsKKworLyoKKyAqICBUcmFwIGludGVycnVwdAorICovCitzdGF0aWMgUkVUU0lHVFlQRQordHJhcChpbnQgc2lnIEdDQ19VTlVTRUQpCit7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworLyoKKyAqICBXYWl0IGZvciB1c2VyCisgKi8KK3N0YXRpYyBpbnQKK1dhaXRGb3JVc2VyKFdJTkRPVyAqd2luKQoreworICAgIHRpbWVfdCB0OworICAgIGNodHlwZSBrZXk7CisKKyAgICBub2RlbGF5KHdpbiwgVFJVRSk7CisgICAgdCA9IHRpbWUoKHRpbWVfdCAqKSAwKTsKKyAgICB3aGlsZSAoMSkgeworCWlmICgoaW50KSAoa2V5ID0gd2dldGNoKHdpbikpICE9IEVSUikgeworCSAgICBpZiAoa2V5ID09ICdxJyB8fCBrZXkgPT0gJ1EnKQorCQlyZXR1cm4gMTsKKwkgICAgZWxzZQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKHRpbWUoKHRpbWVfdCAqKSAwKSAtIHQgPiA1KQorCSAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfY29sb3JzKFdJTkRPVyAqd2luLCBpbnQgcGFpciwgaW50IGZvcmVncm91bmQsIGludCBiYWNrZ3JvdW5kKQoreworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpZiAocGFpciA+IENPTE9SX1BBSVJTKQorCSAgICBwYWlyID0gQ09MT1JfUEFJUlM7CisJaW5pdF9wYWlyKHBhaXIsIGZvcmVncm91bmQsIGJhY2tncm91bmQpOworCXdhdHRyc2V0KHdpbiwgQ09MT1JfUEFJUihwYWlyKSk7CisgICAgfQorfQorCitzdGF0aWMgY2h0eXBlCit1c2VfY29sb3JzKFdJTkRPVyAqd2luLCBpbnQgcGFpciwgY2h0eXBlIGF0dHJzKQoreworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpZiAocGFpciA+IENPTE9SX1BBSVJTKQorCSAgICBwYWlyID0gQ09MT1JfUEFJUlM7CisJYXR0cnMgfD0gQ09MT1JfUEFJUihwYWlyKTsKKyAgICB9CisgICAgd2F0dHJzZXQod2luLCBhdHRycyk7CisgICAgcmV0dXJuIGF0dHJzOworfQorCisvKgorICogVGVzdCBzdWIgd2luZG93cworICovCitzdGF0aWMgaW50CitTdWJXaW5UZXN0KFdJTkRPVyAqd2luKQoreworICAgIGludCB3LCBoLCBzdywgc2gsIGJ4LCBieTsKKyAgICBXSU5ET1cgKnN3aW4xLCAqc3dpbjIsICpzd2luMzsKKworICAgIGdldG1heHl4KHdpbiwgaCwgdyk7CisgICAgZ2V0YmVneXgod2luLCBieSwgYngpOworICAgIHN3ID0gdyAvIDM7CisgICAgc2ggPSBoIC8gMzsKKyAgICBpZiAoKHN3aW4xID0gc3Vid2luKHdpbiwgc2gsIHN3LCBieSArIDMsIGJ4ICsgNSkpID09IE5VTEwpCisJcmV0dXJuIDE7CisgICAgaWYgKChzd2luMiA9IHN1Yndpbih3aW4sIHNoLCBzdywgYnkgKyA0LCBieCArIDgpKSA9PSBOVUxMKQorCXJldHVybiAxOworICAgIGlmICgoc3dpbjMgPSBzdWJ3aW4od2luLCBzaCwgc3csIGJ5ICsgNSwgYnggKyAxMSkpID09IE5VTEwpCisJcmV0dXJuIDE7CisKKyAgICBzZXRfY29sb3JzKHN3aW4xLCA4LCBDT0xPUl9SRUQsIENPTE9SX0JMVUUpOworICAgIHdlcmFzZShzd2luMSk7CisgICAgbXZ3YWRkc3RyKHN3aW4xLCAwLCAzLCAiU3ViLXdpbmRvdyAxIik7CisgICAgd3JlZnJlc2goc3dpbjEpOworCisgICAgc2V0X2NvbG9ycyhzd2luMiwgOSwgQ09MT1JfQ1lBTiwgQ09MT1JfTUFHRU5UQSk7CisgICAgd2VyYXNlKHN3aW4yKTsKKyAgICBtdndhZGRzdHIoc3dpbjIsIDAsIDMsICJTdWItd2luZG93IDIiKTsKKyAgICB3cmVmcmVzaChzd2luMik7CisKKyAgICBzZXRfY29sb3JzKHN3aW4zLCAxMCwgQ09MT1JfWUVMTE9XLCBDT0xPUl9HUkVFTik7CisgICAgd2VyYXNlKHN3aW4zKTsKKyAgICBtdndhZGRzdHIoc3dpbjMsIDAsIDMsICJTdWItd2luZG93IDMiKTsKKyAgICB3cmVmcmVzaChzd2luMyk7CisKKyAgICBkZWx3aW4oc3dpbjEpOworICAgIGRlbHdpbihzd2luMik7CisgICAgZGVsd2luKHN3aW4zKTsKKyAgICBXYWl0Rm9yVXNlcih3aW4pOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citib3VuY2UoaW50IG4sIGludCAqZGlyLCBpbnQgbGVuKQoreworICAgIGlmICgqZGlyID4gMCkKKwkrK247CisgICAgZWxzZQorCS0tbjsKKyAgICBpZiAobiA8PSAxIHx8IG4gPj0gbGVuIC0gMikKKwkqZGlyID0gKmRpciA/IDAgOiAxOworICAgIHJldHVybiBuOworfQorCisvKgorICogIEJvdW5jaW5nIGJhbGxzCisgKi8KK3N0YXRpYyBpbnQKK0JvdW5jaW5nQmFsbHMoV0lORE9XICp3aW4pCit7CisgICAgaW50IHcsIGg7CisgICAgaW50IHgxLCB5MSwgeGQxLCB5ZDE7CisgICAgaW50IHgyLCB5MiwgeGQyLCB5ZDI7CisgICAgaW50IHgzLCB5MywgeGQzLCB5ZDM7CisKKyAgICBnZXRtYXh5eCh3aW4sIGgsIHcpOworCisgICAgeDEgPSAyICsgcmFuZCgpICUgKHcgLSA0KTsKKyAgICB5MSA9IDIgKyByYW5kKCkgJSAoaCAtIDQpOworICAgIHgyID0gMiArIHJhbmQoKSAlICh3IC0gNCk7CisgICAgeTIgPSAyICsgcmFuZCgpICUgKGggLSA0KTsKKyAgICB4MyA9IDIgKyByYW5kKCkgJSAodyAtIDQpOworICAgIHkzID0gMiArIHJhbmQoKSAlIChoIC0gNCk7CisKKyAgICB4ZDEgPSAxOworICAgIHlkMSA9IDE7CisgICAgeGQyID0gMTsKKyAgICB5ZDIgPSAwOworICAgIHhkMyA9IDA7CisgICAgeWQzID0gMTsKKworICAgIG5vZGVsYXkod2luLCBUUlVFKTsKKworICAgIHdoaWxlICh3Z2V0Y2god2luKSA9PSBFUlIpIHsKKwl4MSA9IGJvdW5jZSh4MSwgJnhkMSwgdyk7CisJeTEgPSBib3VuY2UoeTEsICZ5ZDEsIGgpOworCXgyID0gYm91bmNlKHgyLCAmeGQyLCB3KTsKKwl5MiA9IGJvdW5jZSh5MiwgJnlkMiwgaCk7CisJeDMgPSBib3VuY2UoeDMsICZ4ZDMsIHcpOworCXkzID0gYm91bmNlKHkzLCAmeWQzLCBoKTsKKworCXNldF9jb2xvcnMod2luLCAxMSwgQ09MT1JfUkVELCBDT0xPUl9CTFVFKTsKKwltdndhZGRjaCh3aW4sIHkxLCB4MSwgJ08nKTsKKworCXNldF9jb2xvcnMod2luLCAxMiwgQ09MT1JfQkxVRSwgQ09MT1JfUkVEKTsKKwltdndhZGRjaCh3aW4sIHkyLCB4MiwgJyonKTsKKworCXNldF9jb2xvcnMod2luLCAxMywgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSk7CisJbXZ3YWRkY2god2luLCB5MywgeDMsICdAJyk7CisKKwl3bW92ZSh3aW4sIDAsIDApOworCXdyZWZyZXNoKHdpbik7CisJZGVsYXlfb3V0cHV0KDEwMCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogIE1haW4gZHJpdmVyCisgKi8KK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIFdJTkRPVyAqd2luOworICAgIGludCB3LCB4LCB5LCBpLCBqLCBrOworICAgIGNoYXIgYnVmZmVyWzIwMF07CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBjaHR5cGUgc2F2ZVs4MF07CisgICAgY2h0eXBlIGM7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBDQVRDSEFMTCh0cmFwKTsKKworICAgIGluaXRzY3IoKTsKKyAgICBpZiAoaGFzX2NvbG9ycygpKQorCXN0YXJ0X2NvbG9yKCk7CisgICAgY2JyZWFrKCk7CisgICAgY3Vyc19zZXQoMCk7CisgICAgd2lkdGggPSA0ODsKKyAgICBoZWlnaHQgPSAxNDsJCS8qIENyZWF0ZSBhIGRyYXdpbmcgd2luZG93ICovCisgICAgd2luID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIChMSU5FUyAtIGhlaWdodCkgLyAyLCAoQ09MUyAtIHdpZHRoKSAvIDIpOworICAgIGlmICh3aW4gPT0gTlVMTCkgeworCWVuZHdpbigpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgd2hpbGUgKDEpIHsKKwlzZXRfY29sb3JzKHdpbiwgMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCXdlcmFzZSh3aW4pOworCisJc2V0X2NvbG9ycyh3aW4sIDIsIENPTE9SX1JFRCwgQ09MT1JfUkVEKTsKKwlib3god2luLCBBQ1NfVkxJTkUsIEFDU19ITElORSk7CisJd3JlZnJlc2god2luKTsKKwkvKiBEbyByYW1kb20gb3V0cHV0IG9mIGEgY2hhcmFjdGVyICovCisJdXNlX2NvbG9ycyh3aW4sIDEsIEFfTk9STUFMKTsKKwljID0gJ2EnOworCWZvciAoaSA9IDA7IGkgPCA1MDAwOyArK2kpIHsKKwkgICAgeCA9IHJhbmQoKSAlICh3aWR0aCAtIDIpICsgMTsKKwkgICAgeSA9IHJhbmQoKSAlIChoZWlnaHQgLSAyKSArIDE7CisJICAgIG12d2FkZGNoKHdpbiwgeSwgeCwgYyk7CisJICAgIHdyZWZyZXNoKHdpbik7CisJICAgIG5vZGVsYXkod2luLCBUUlVFKTsKKwkgICAgaWYgKHdnZXRjaCh3aW4pICE9IEVSUikKKwkJYnJlYWs7CisJICAgIGlmIChpID09IDIwMDApIHsKKwkJYyA9ICdiJzsKKwkJc2V0X2NvbG9ycyh3aW4sIDMsIENPTE9SX0NZQU4sIENPTE9SX1lFTExPVyk7CisJICAgIH0KKwl9CisKKwlTdWJXaW5UZXN0KHdpbik7CisJLyogRXJhc2UgYW5kIGRyYXcgZ3JlZW4gd2luZG93ICovCisJc2V0X2NvbG9ycyh3aW4sIDQsIENPTE9SX1lFTExPVywgQ09MT1JfR1JFRU4pOworCXdia2dkKHdpbiwgdXNlX2NvbG9ycyh3aW4sIDQsIEFfQk9MRCkpOworCXdlcmFzZSh3aW4pOworCXdyZWZyZXNoKHdpbik7CisJLyogRHJhdyBSRUQgYm91bmRpbmcgYm94ICovCisJdXNlX2NvbG9ycyh3aW4sIDIsIEFfTk9STUFMKTsKKwlib3god2luLCAnICcsICcgJyk7CisJd3JlZnJlc2god2luKTsKKwkvKiBEaXNwbGF5IEF1c3RyYWxpYSBtYXAgKi8KKwl1c2VfY29sb3JzKHdpbiwgNCwgQV9CT0xEKTsKKwlpID0gMDsKKwl3aGlsZSAoKkF1c01hcFtpXSkgeworCSAgICBtdndhZGRzdHIod2luLCBpICsgMSwgOCwgQXVzTWFwW2ldKTsKKwkgICAgd3JlZnJlc2god2luKTsKKwkgICAgZGVsYXlfb3V0cHV0KDUwKTsKKwkgICAgKytpOworCX0KKworCXNldF9jb2xvcnMod2luLCA1LCBDT0xPUl9CTFVFLCBDT0xPUl9XSElURSk7CisJdXNlX2NvbG9ycyh3aW4sIDUsIEFfQkxJTkspOworCW12d2FkZHN0cih3aW4sIGhlaWdodCAtIDIsIDYsICIgUERDdXJzZXMgMi4xIGZvciBET1MsIE9TLzIgYW5kIFVuaXgiKTsKKwl3cmVmcmVzaCh3aW4pOworCisJLyogRHJhdyBydW5uaW5nIG1lc3NhZ2VzICovCisJc2V0X2NvbG9ycyh3aW4sIDYsIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUpOworCW1lc3NhZ2UgPSBtZXNzYWdlc1tqID0gMF07CisJaSA9IDE7CisJdyA9IHdpZHRoIC0gMjsKKwlzdHJjcHkoYnVmZmVyLCBtZXNzYWdlKTsKKwl3aGlsZSAoaiA8IE5NRVNTQUdFUykgeworCSAgICB3aGlsZSAoKGludCkgc3RybGVuKGJ1ZmZlcikgPCB3KSB7CisJCXN0cmNhdChidWZmZXIsICIgLi4uICIpOworCQlzdHJjYXQoYnVmZmVyLCBtZXNzYWdlc1srK2ogJSBOTUVTU0FHRVNdKTsKKwkgICAgfQorCisJICAgIGlmIChpIDwgdykKKwkJbXZ3YWRkbnN0cih3aW4sIGhlaWdodCAvIDIsIHcgLSBpLCBidWZmZXIsIGkpOworCSAgICBlbHNlCisJCW12d2FkZG5zdHIod2luLCBoZWlnaHQgLyAyLCAxLCBidWZmZXIsIHcpOworCisJICAgIHdyZWZyZXNoKHdpbik7CisJICAgIG5vZGVsYXkod2luLCBUUlVFKTsKKwkgICAgaWYgKHdnZXRjaCh3aW4pICE9IEVSUikgeworCQlmbHVzaGlucCgpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoaSsrID49IHcpIHsKKwkJZm9yIChrID0gMDsgKGJ1ZmZlcltrXSA9IGJ1ZmZlcltrICsgMV0pICE9ICdcMCc7IGsrKykgOworCSAgICB9CisJICAgIGRlbGF5X291dHB1dCgxMDApOworCX0KKworCWogPSAwOworCS8qICBEcmF3IHJ1bm5pbmcgQXMgYWNyb3NzIGluIFJFRCAqLworCXNldF9jb2xvcnMod2luLCA3LCBDT0xPUl9SRUQsIENPTE9SX0dSRUVOKTsKKwltZW1zZXQoc2F2ZSwgJyAnLCBzaXplb2Yoc2F2ZSkpOworCWZvciAoaSA9IDI7IGkgPCB3aWR0aCAtIDQ7ICsraSkgeworCSAgICBrID0gbXZ3aW5jaCh3aW4sIDQsIGkpOworCSAgICBpZiAoayA9PSBFUlIpCisJCWJyZWFrOworCSAgICBzYXZlW2orK10gPSBjID0gazsKKwkgICAgYyAmPSBBX0NIQVJURVhUOworCSAgICBtdndhZGRjaCh3aW4sIDQsIGksIGMpOworCX0KKwl3cmVmcmVzaCh3aW4pOworCisJLyogUHV0IGEgbWVzc2FnZSB1cCB3YWl0IGZvciBhIGtleSAqLworCWkgPSBoZWlnaHQgLSAyOworCXVzZV9jb2xvcnMod2luLCA1LCBBX05PUk1BTCk7CisJbXZ3YWRkc3RyKHdpbiwgaSwgNSwgIiBUeXBlIGEga2V5IHRvIGNvbnRpbnVlIG9yICdRJyB0byBxdWl0ICIpOworCXdyZWZyZXNoKHdpbik7CisKKwlpZiAoV2FpdEZvclVzZXIod2luKSA9PSAxKQorCSAgICBicmVhazsKKworCWogPSAwOwkJCS8qIFJlc3RvcmUgdGhlIG9sZCBsaW5lICovCisJZm9yIChpID0gMjsgaSA8IHdpZHRoIC0gNDsgKytpKQorCSAgICBtdndhZGRjaCh3aW4sIDQsIGksIHNhdmVbaisrXSk7CisJd3JlZnJlc2god2luKTsKKworCUJvdW5jaW5nQmFsbHMod2luKTsKKwkvKiBQdXQgYSBtZXNzYWdlIHVwIHdhaXQgZm9yIGEga2V5ICovCisJaSA9IGhlaWdodCAtIDI7CisJdXNlX2NvbG9ycyh3aW4sIDUsIEFfTk9STUFMKTsKKwltdndhZGRzdHIod2luLCBpLCA1LCAiIFR5cGUgYSBrZXkgdG8gY29udGludWUgb3IgJ1EnIHRvIHF1aXQgIik7CisJd3JlZnJlc2god2luKTsKKwlpZiAoV2FpdEZvclVzZXIod2luKSA9PSAxKQorCSAgICBicmVhazsKKyAgICB9CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvcHJvZ3JhbXMgYi90ZXN0L3Byb2dyYW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NDlhNGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3Byb2dyYW1zCkBAIC0wLDAgKzEsODYgQEAKKyMgJElkOiBwcm9ncmFtcyx2IDEuMTQgMjAwOC8wOC8xNiAyMTo0NzozOSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisjCisjIHByb2dyYW1zIHVzZWQgZm9yIG5jdXJzZXMgdGVzdHMKK2JhY2tncm91bmQJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQliYWNrZ3JvdW5kCitibHVlCQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWJsdWUKK2JzCQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWJzCitjYXJkZmlsZQkkKExERkxBR1NfREVGQVVMVCkJJChMT0NBTF9MSUJTKQljYXJkZmlsZQorY2hnYXQJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJY2hnYXQKK2NvbG9yX3NldAkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWNvbG9yX3NldAorZGVtb19hbHRrZXlzCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJZGVtb19hbHRrZXlzCitkZW1vX2RlZmtleQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWRlbW9fZGVma2V5CitkZW1vX2Zvcm1zCSQoTERGTEFHU19ERUZBVUxUKQkkKExPQ0FMX0xJQlMpCWRlbW9fZm9ybXMgZWRpdF9maWVsZAorZGVtb19rZXlvawkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWRlbW9fa2V5b2sKK2RlbW9fbWVudXMJJChMREZMQUdTX0RFRkFVTFQpCSQoTE9DQUxfTElCUykJZGVtb19tZW51cworZGVtb19wYW5lbHMJJChMREZMQUdTX0RFRkFVTFQpCSQoTE9DQUxfTElCUykJZGVtb19wYW5lbHMKK2RlbW9fdGVybWNhcAkkKExERkxBR1NfVElORk8pCSQoTE9DQUxfTElCUykJZGVtb190ZXJtY2FwCitkaXR0bwkJJChMREZMQUdTX1RIUkVBRFMpCSQoTE9DQUxfTElCUykJZGl0dG8KK2RvdHMJCSQoTERGTEFHU19USU5GTykJJChMT0NBTF9MSUJTKQlkb3RzCitkb3RzX212Y3VyCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJZG90c19tdmN1cgorZWNob2NoYXIJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQllY2hvY2hhcgorZmlsdGVyCQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWZpbHRlcgorZmlyZXdvcmsJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlmaXJld29yaworZmlyc3RsYXN0CSQoTERGTEFHU19ERUZBVUxUKQkkKExPQ0FMX0xJQlMpCWZpcnN0bGFzdAorZm9sZGtleXMJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlmb2xka2V5cworZ2RjCQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWdkYworaGFub2kJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJaGFub2kKK2hhc2h0ZXN0CSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJaGFzaHRlc3QKK2luY2hfd2lkZQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWluY2hfd2lkZQoraW5jaHMJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJaW5jaHMKK2luc193aWRlCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJaW5zX3dpZGUKK2luc2VydHMJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJaW5zZXJ0cwora2V5X25hbWVzCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJa2V5X25hbWVzCitrZXluYW1lcwkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWtleW5hbWVzCitrbmlnaHQJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJa25pZ2h0CitscnRlc3QJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJbHJ0ZXN0Cittb3Zld2luZG93CSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJbW92ZXdpbmRvdworbmN1cnNlcwkJJChMREZMQUdTX0RFRkFVTFQpCSQoTE9DQUxfTElCUykJbmN1cnNlcworbmV3ZGVtbwkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQluZXdkZW1vCityYWlscm9hZAkkKExERkxBR1NfVElORk8pCSQoTE9DQUxfTElCUykJcmFpbHJvYWQKK3JhaW4JCSQoTERGTEFHU19USFJFQURTKQkkKExPQ0FMX0xJQlMpCXJhaW4KK3JlZHJhdwkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlyZWRyYXcKK3NhdmVzY3JlZW4JJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlzYXZlc2NyZWVuCit0Y2xvY2sJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJdGNsb2NrCit0ZXN0X2FycmF5cwkkKExERkxBR1NfVElORk8pCSQoTE9DQUxfTElCUykJdGVzdF9hcnJheXMKK3Rlc3RfZ2V0X3dzdHIJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0ZXN0X2dldF93c3RyCit0ZXN0X2dldHN0cgkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXRlc3RfZ2V0c3RyCit0ZXN0X2luc3RyCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJdGVzdF9pbnN0cgordGVzdF9pbndzdHIJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0ZXN0X2lud3N0cgordGVzdF9vcGFxdWUJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0ZXN0X29wYXF1ZQordGVzdGFkZGNoCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJdGVzdGFkZGNoCit0ZXN0Y3VycwkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXRlc3RjdXJzCit0ZXN0c2NhbncJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0ZXN0c2NhbncKK3ZpZXcJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJdmlldword29ybQkJJChMREZMQUdTX1RIUkVBRFMpCSQoTE9DQUxfTElCUykJd29ybQoreG1hcwkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl4bWFzCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvdGVzdC9yYWlscm9hZC5jIGIvdGVzdC9yYWlscm9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDgyM2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JhaWxyb2FkLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgLSAyMDAwCisgKgorICogJElkOiByYWlscm9hZC5jLHYgMS4xNiAyMDA4LzAyLzA5IDE4OjA4OjQzIHRvbSBFeHAgJAorICoKKyAqIEEgc2ltcGxlIGRlbW8gb2YgdGhlIHRlcm1jYXAgaW50ZXJmYWNlLgorICovCisjZGVmaW5lIFVTRV9USU5GTworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9UR0VURU5UCisKK3N0YXRpYyBjaGFyICp3aXBlaXQ7CitzdGF0aWMgY2hhciAqbW92ZWl0Oworc3RhdGljIGludCBsZW5ndGg7CitzdGF0aWMgaW50IGhlaWdodDsKKworc3RhdGljIGNoYXIgKmZpbmlzQzsKK3N0YXRpYyBjaGFyICpmaW5pc1M7CitzdGF0aWMgY2hhciAqZmluaXNVOworCitzdGF0aWMgY2hhciAqc3RhcnRDOworc3RhdGljIGNoYXIgKnN0YXJ0UzsKK3N0YXRpYyBjaGFyICpzdGFydFU7CisKK3N0YXRpYyBjaGFyICpiYWNrdXA7CisKK3N0YXRpYyBib29sIGludGVycnVwdGVkID0gRkFMU0U7CisKK3N0YXRpYyBpbnQKK291dGMoVFBVVFNfQVJHIGMpCit7CisgICAgaWYgKGludGVycnVwdGVkKSB7CisJY2hhciB0bXAgPSBjOworCXdyaXRlKFNURE9VVF9GSUxFTk8sICZ0bXAsIDEpOworICAgIH0gZWxzZSB7CisJcHV0YyhjLCBzdGRvdXQpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK1B1dENoYXIoaW50IGNoKQoreworICAgIHB1dGNoYXIoY2gpOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIG5hcG1zKG1vdmVpdCA/IDEwIDogNTApOwkvKiBub3QgcmVhbGx5IHRlcm1jYXAuLi4gKi8KK30KKworc3RhdGljIHZvaWQKK0JhY2t1cCh2b2lkKQoreworICAgIHRwdXRzKGJhY2t1cCAhPSAwID8gYmFja3VwIDogIlxiIiwgMSwgb3V0Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitTaG93Q3Vyc29yKGludCBmbGFnKQoreworICAgIGlmIChzdGFydEMgIT0gMCAmJiBmaW5pc0MgIT0gMCkgeworCXRwdXRzKGZsYWcgPyBzdGFydEMgOiBmaW5pc0MsIDEsIG91dGMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK1N0YW5kT3V0KGludCBmbGFnKQoreworICAgIGlmIChzdGFydFMgIT0gMCAmJiBmaW5pc1MgIT0gMCkgeworCXRwdXRzKGZsYWcgPyBzdGFydFMgOiBmaW5pc1MsIDEsIG91dGMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK1VuZGVybGluZShpbnQgZmxhZykKK3sKKyAgICBpZiAoc3RhcnRVICE9IDAgJiYgZmluaXNVICE9IDApIHsKKwl0cHV0cyhmbGFnID8gc3RhcnRVIDogZmluaXNVLCAxLCBvdXRjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitTaG93U2lnbihjaGFyICpzdHJpbmcpCit7CisgICAgY2hhciAqYmFzZSA9IHN0cmluZzsKKyAgICBpbnQgY2gsIGZpcnN0LCBsYXN0OworCisgICAgaWYgKG1vdmVpdCAhPSAwKSB7CisJdHB1dHModGdvdG8obW92ZWl0LCAwLCBoZWlnaHQgLSAxKSwgMSwgb3V0Yyk7CisJdHB1dHMod2lwZWl0LCAxLCBvdXRjKTsKKyAgICB9CisKKyAgICB3aGlsZSAoKnN0cmluZyAhPSAwKSB7CisJY2ggPSAqc3RyaW5nOworCWlmIChjaCAhPSAnICcpIHsKKwkgICAgaWYgKG1vdmVpdCAhPSAwKSB7CisJCWZvciAoZmlyc3QgPSBsZW5ndGggLSAyOyBmaXJzdCA+PSAoc3RyaW5nIC0gYmFzZSk7IGZpcnN0LS0pIHsKKwkJICAgIGlmIChmaXJzdCA8IGxlbmd0aCAtIDEpIHsKKwkJCXRwdXRzKHRnb3RvKG1vdmVpdCwgZmlyc3QgKyAxLCBoZWlnaHQgLSAxKSwgMSwgb3V0Yyk7CisJCQlQdXRDaGFyKCcgJyk7CisJCSAgICB9CisJCSAgICB0cHV0cyh0Z290byhtb3ZlaXQsIGZpcnN0LCBoZWlnaHQgLSAxKSwgMSwgb3V0Yyk7CisJCSAgICBQdXRDaGFyKGNoKTsKKwkJfQorCSAgICB9IGVsc2UgeworCQlsYXN0ID0gY2g7CisJCWlmIChpc2FscGhhKGNoKSkgeworCQkgICAgZmlyc3QgPSBpc3VwcGVyKGNoKSA/ICdBJyA6ICdhJzsKKwkJfSBlbHNlIGlmIChpc2RpZ2l0KGNoKSkgeworCQkgICAgZmlyc3QgPSAnMCc7CisJCX0gZWxzZSB7CisJCSAgICBmaXJzdCA9IGNoOworCQl9CisJCWlmIChmaXJzdCA8IGxhc3QpIHsKKwkJICAgIFVuZGVybGluZSgxKTsKKwkJICAgIHdoaWxlIChmaXJzdCA8IGxhc3QpIHsKKwkJCVB1dENoYXIoZmlyc3QpOworCQkJQmFja3VwKCk7CisJCQlmaXJzdCsrOworCQkgICAgfQorCQkgICAgVW5kZXJsaW5lKDApOworCQl9CisJICAgIH0KKwkgICAgaWYgKG1vdmVpdCAhPSAwKQorCQlCYWNrdXAoKTsKKwl9CisJU3RhbmRPdXQoMSk7CisJUHV0Q2hhcihjaCk7CisJU3RhbmRPdXQoMCk7CisJZmZsdXNoKHN0ZG91dCk7CisJc3RyaW5nKys7CisgICAgfQorICAgIGlmIChtb3ZlaXQgIT0gMCkKKwl0cHV0cyh3aXBlaXQsIDEsIG91dGMpOworICAgIHB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwKHZvaWQpCit7CisgICAgVW5kZXJsaW5lKDApOworICAgIFN0YW5kT3V0KDApOworICAgIFNob3dDdXJzb3IoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitvbnNpZyhpbnQgbiBHQ0NfVU5VU0VEKQoreworICAgIGludGVycnVwdGVkID0gVFJVRTsKKyAgICBjbGVhbnVwKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQKK3JhaWxyb2FkKGNoYXIgKiphcmdzKQoreworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqbmFtZSA9IGdldGVudigiVEVSTSIpOworICAgIGNoYXIgYnVmZmVyWzEwMjRdOworICAgIGNoYXIgYXJlYVsxMDI0XSwgKmFwID0gYXJlYTsKKworICAgIGlmIChuYW1lID09IDApCisJbmFtZSA9ICJkdW1iIjsKKyAgICBpZiAodGdldGVudChidWZmZXIsIG5hbWUpID49IDApIHsKKworCXdpcGVpdCA9IHRnZXRzdHIoImNlIiwgJmFwKTsKKwloZWlnaHQgPSB0Z2V0bnVtKCJsaSIpOworCWxlbmd0aCA9IHRnZXRudW0oImNvIik7CisJbW92ZWl0ID0gdGdldHN0cigiY20iLCAmYXApOworCisJaWYgKHdpcGVpdCA9PSAwCisJICAgIHx8IG1vdmVpdCA9PSAwCisJICAgIHx8IGhlaWdodCA8PSAwCisJICAgIHx8IGxlbmd0aCA8PSAwKSB7CisJICAgIHdpcGVpdCA9IDA7CisJICAgIG1vdmVpdCA9IDA7CisJICAgIGhlaWdodCA9IDA7CisJICAgIGxlbmd0aCA9IDA7CisJfQorCisJc3RhcnRTID0gdGdldHN0cigic28iLCAmYXApOworCWZpbmlzUyA9IHRnZXRzdHIoInNlIiwgJmFwKTsKKworCXN0YXJ0VSA9IHRnZXRzdHIoInVzIiwgJmFwKTsKKwlmaW5pc1UgPSB0Z2V0c3RyKCJ1ZSIsICZhcCk7CisKKwliYWNrdXAgPSB0Z2V0c3RyKCJsZSIsICZhcCk7CisKKwlzdGFydEMgPSB0Z2V0c3RyKCJ2ZSIsICZhcCk7CisJZmluaXNDID0gdGdldHN0cigidmkiLCAmYXApOworCisJU2hvd0N1cnNvcigwKTsKKworCUNBVENIQUxMKG9uc2lnKTsKKworCXdoaWxlICgqYXJncykgeworCSAgICBTaG93U2lnbigqYXJncysrKTsKKwl9CisJU2hvd0N1cnNvcigxKTsKKyAgICB9Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGlmIChhcmdjID4gMSkgeworCXJhaWxyb2FkKGFyZ3YgKyAxKTsKKyAgICB9IGVsc2UgeworCXN0YXRpYyBjaGFyIHdvcmxkW10gPSAiSGVsbG8gV29ybGQiOworCXN0YXRpYyBjaGFyICpoZWxsb1tdID0KKwl7d29ybGQsIDB9OworCXJhaWxyb2FkKGhlbGxvKTsKKyAgICB9CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworI2Vsc2UKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELAorICAgICBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRlcm1jYXBcbiIpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC9yYWluLmMgYi90ZXN0L3JhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE1ZTdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yYWluLmMKQEAgLTAsMCArMSwzODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiByYWluLmMsdiAxLjM0IDIwMDgvMDUvMjQgMjM6MzQ6MzQgdG9tIEV4cCAkCisgKi8KKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworLyogcmFpbiAxMS8zLzE5ODAgRVBTL0NJVEhFUCAqLworCisjaWZkZWYgVVNFX1BUSFJFQURTCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKK1dBTlRfVVNFX1dJTkRPVygpOworCisjZGVmaW5lIE1BWF9USFJFQURTCTEwCisjZGVmaW5lIE1BWF9EUk9QCTUKKworc3RydWN0IERBVEE7CisKK3R5cGVkZWYgdm9pZCAoKkRyYXdQYXJ0KSAoc3RydWN0IERBVEEgKik7CisKK3R5cGVkZWYgc3RydWN0IERBVEEgeworICAgIGludCB5LCB4OworI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIERyYXdQYXJ0IGZ1bmM7CisgICAgaW50IHN0YXRlOworI2VuZGlmCit9IERBVEE7CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKK3B0aHJlYWRfY29uZF90IGNvbmRfbmV4dF9kcm9wOworcHRocmVhZF9tdXRleF90IG11dGV4X25leHRfZHJvcDsKK3N0YXRpYyBpbnQgdXNlZF90aHJlYWRzOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgcHRocmVhZF90IG15c2VsZjsKKyAgICBsb25nIGNvdW50ZXI7Cit9IFNUQVRTOworCitzdGF0aWMgU1RBVFMgZHJvcF90aHJlYWRzW01BWF9USFJFQURTXTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorb25zaWcoaW50IG4gR0NDX1VOVVNFRCkKK3sKKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgZmxvYXQKK3JhbmYodm9pZCkKK3sKKyAgICBsb25nIHIgPSAocmFuZCgpICYgMDc3Nzc3KTsKKyAgICByZXR1cm4gKChmbG9hdCkgciAvIDMyNzY4Lik7Cit9CisKK3N0YXRpYyBpbnQKK3JhbmRvbV94KHZvaWQpCit7CisgICAgcmV0dXJuICgoKGZsb2F0KSAoQ09MUyAtIDQpICogcmFuZigpKSArIDIpOworfQorCitzdGF0aWMgaW50CityYW5kb21feSh2b2lkKQoreworICAgIHJldHVybiAoKChmbG9hdCkgKExJTkVTIC0gNCkgKiByYW5mKCkpICsgMik7Cit9CisKK3N0YXRpYyBpbnQKK25leHRfaihpbnQgaikKK3sKKyAgICBpZiAoaiA9PSAwKQorCWogPSBNQVhfRFJPUCAtIDE7CisgICAgZWxzZQorCS0tajsKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaW50IHogPSAoaW50KSAoMyAqIHJhbmYoKSk7CisJY2h0eXBlIGNvbG9yID0gQ09MT1JfUEFJUih6KTsKKwlpZiAoeikKKwkgICAgY29sb3IgfD0gQV9CT0xEOworCWF0dHJzZXQoY29sb3IpOworICAgIH0KKyAgICByZXR1cm4gajsKK30KKworc3RhdGljIHZvaWQKK3BhcnQxKERBVEEgKiBkcm9wKQoreworICAgIG12YWRkY2goZHJvcC0+eSwgZHJvcC0+eCwgJy4nKTsKK30KKworc3RhdGljIHZvaWQKK3BhcnQyKERBVEEgKiBkcm9wKQoreworICAgIG12YWRkY2goZHJvcC0+eSwgZHJvcC0+eCwgJ28nKTsKK30KKworc3RhdGljIHZvaWQKK3BhcnQzKERBVEEgKiBkcm9wKQoreworICAgIG12YWRkY2goZHJvcC0+eSwgZHJvcC0+eCwgJ08nKTsKK30KKworc3RhdGljIHZvaWQKK3BhcnQ0KERBVEEgKiBkcm9wKQoreworICAgIG12YWRkY2goZHJvcC0+eSAtIDEsIGRyb3AtPngsICctJyk7CisgICAgbXZhZGRzdHIoZHJvcC0+eSwgZHJvcC0+eCAtIDEsICJ8LnwiKTsKKyAgICBtdmFkZGNoKGRyb3AtPnkgKyAxLCBkcm9wLT54LCAnLScpOworfQorCitzdGF0aWMgdm9pZAorcGFydDUoREFUQSAqIGRyb3ApCit7CisgICAgbXZhZGRjaChkcm9wLT55IC0gMiwgZHJvcC0+eCwgJy0nKTsKKyAgICBtdmFkZHN0cihkcm9wLT55IC0gMSwgZHJvcC0+eCAtIDEsICIvIFxcIik7CisgICAgbXZhZGRzdHIoZHJvcC0+eSwgZHJvcC0+eCAtIDIsICJ8IE8gfCIpOworICAgIG12YWRkc3RyKGRyb3AtPnkgKyAxLCBkcm9wLT54IC0gMSwgIlxcIC8iKTsKKyAgICBtdmFkZGNoKGRyb3AtPnkgKyAyLCBkcm9wLT54LCAnLScpOworfQorCitzdGF0aWMgdm9pZAorcGFydDYoREFUQSAqIGRyb3ApCit7CisgICAgbXZhZGRjaChkcm9wLT55IC0gMiwgZHJvcC0+eCwgJyAnKTsKKyAgICBtdmFkZHN0cihkcm9wLT55IC0gMSwgZHJvcC0+eCAtIDEsICIgICAiKTsKKyAgICBtdmFkZHN0cihkcm9wLT55LCBkcm9wLT54IC0gMiwgIiAgICAgIik7CisgICAgbXZhZGRzdHIoZHJvcC0+eSArIDEsIGRyb3AtPnggLSAxLCAiICAgIik7CisgICAgbXZhZGRjaChkcm9wLT55ICsgMiwgZHJvcC0+eCwgJyAnKTsKK30KKworI2lmZGVmIFVTRV9QVEhSRUFEUworc3RhdGljIHZvaWQKK25hcHNvbWUodm9pZCkKK3sKKyAgICBuYXBtcyg2MCk7Cit9CisKKy8qCisgKiBUaGlzIHJ1bnMgaW5zaWRlIHRoZSB1c2Vfd2luZG93KCkgbXV0ZXguCisgKi8KK3N0YXRpYyBpbnQKK3JlYWxseV9kcmF3KFdJTkRPVyAqd2luLCB2b2lkICphcmcpCit7CisgICAgREFUQSAqZGF0YSA9IChEQVRBICopIGFyZzsKKworICAgICh2b2lkKSB3aW47CisgICAgbmV4dF9qKGRhdGEtPnN0YXRlKTsKKyAgICBkYXRhLT5mdW5jKGRhdGEpOworICAgIHJlZnJlc2goKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXRpYyB2b2lkCitkcmF3X3BhcnQodm9pZCAoKmZ1bmMpIChEQVRBICopLCBpbnQgc3RhdGUsIERBVEEgKiBkYXRhKQoreworICAgIGRhdGEtPmZ1bmMgPSBmdW5jOworICAgIGRhdGEtPnN0YXRlID0gc3RhdGU7CisgICAgdXNlX3dpbmRvdyhzdGRzY3IsIHJlYWxseV9kcmF3LCAodm9pZCAqKSBkYXRhKTsKKyAgICBuYXBzb21lKCk7Cit9CisKKy8qCisgKiBUZWxsIHRoZSB0aHJlYWRzIHRoYXQgb25lIG9mIHRoZW0gY2FuIHN0YXJ0IHdvcmsgb24gYSBuZXcgcmFpbmRyb3AuCisgKiBUaGV5IG1heSBhbGwgYmUgYnVzeSBpZiB3ZSdyZSBzZW5kaW5nIHJlcXVlc3RzIHRvbyByYXBpZGx5LgorICovCitzdGF0aWMgaW50CitwdXRfbmV4dF9kcm9wKHZvaWQpCit7CisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF9uZXh0X2Ryb3ApOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleF9uZXh0X2Ryb3ApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHdlJ3JlIGFzc2lnbmVkIHRoZSB0YXNrIG9mIGRyYXdpbmcgYSBuZXcgcmFpbmRyb3AuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9uZXh0X2Ryb3Aodm9pZCkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4X25leHRfZHJvcCk7CisgICAgcHRocmVhZF9jb25kX3dhaXQoJmNvbmRfbmV4dF9kcm9wLCAmbXV0ZXhfbmV4dF9kcm9wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCAqCitkcmF3X2Ryb3Aodm9pZCAqYXJnKQoreworICAgIERBVEEgbXlkYXRhOworICAgIGludCBteXN0YXRzOworCisgICAgLyoKKyAgICAgKiBGaW5kIG15c2VsZiBpbiB0aGUgbGlzdCBvZiB0aHJlYWRzIHNvIHdlIGNhbiBjb3VudCB0aGUgbnVtYmVyIG9mIGxvb3BzLgorICAgICAqLworICAgIGZvciAobXlzdGF0cyA9IDA7IG15c3RhdHMgPCBNQVhfVEhSRUFEUzsgKytteXN0YXRzKSB7CisJaWYgKGRyb3BfdGhyZWFkc1tteXN0YXRzXS5teXNlbGYgPT0gcHRocmVhZF9zZWxmKCkpCisJICAgIGJyZWFrOworICAgIH0KKworICAgIGRvIHsKKwlpZiAobXlzdGF0cyA8IE1BWF9USFJFQURTKQorCSAgICBkcm9wX3RocmVhZHNbbXlzdGF0c10uY291bnRlcisrOworCisJLyoKKwkgKiBNYWtlIGEgY29weSBvZiBjYWxsZXIncyBkYXRhLiAgV2UncmUgY2hlYXRpbmcgZm9yIHRoZSBjYXNlcyBhZnRlcgorCSAqIHRoZSBmaXJzdCBsb29wIHNpbmNlIHdlIHN0aWxsIGhhdmUgYSBwb2ludGVyIGludG8gdGhlIG1haW4gdGhyZWFkCisJICogdG8gdGhlIGRhdGEgd2hpY2ggaXQgdXNlcyBmb3Igc2V0dGluZyB1cCB0aGlzIHRocmVhZCAoYnV0IGl0IGhhcworCSAqIGJlZW4gbW9kaWZpZWQgdG8gdXNlIGRpZmZlcmVudCBjb29yZGluYXRlcykuCisJICovCisJbXlkYXRhID0gKihEQVRBICopIGFyZzsKKworCWRyYXdfcGFydChwYXJ0MSwgMCwgJm15ZGF0YSk7CisJZHJhd19wYXJ0KHBhcnQyLCAxLCAmbXlkYXRhKTsKKwlkcmF3X3BhcnQocGFydDMsIDIsICZteWRhdGEpOworCWRyYXdfcGFydChwYXJ0NCwgMywgJm15ZGF0YSk7CisJZHJhd19wYXJ0KHBhcnQ1LCA0LCAmbXlkYXRhKTsKKwlkcmF3X3BhcnQocGFydDYsIDAsICZteWRhdGEpOworICAgIH0gd2hpbGUgKGdldF9uZXh0X2Ryb3AoKSk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoZSBkZXNjcmlwdGlvbiBvZiBwdGhyZWFkX2NyZWF0ZSgpIGlzIG1pc2xlYWRpbmcsIHNpbmNlIGl0IGltcGxpZXMgdGhhdAorICogdGhyZWFkcyB3aWxsIGV4aXQgY2xlYW5seSBhZnRlciB0aGVpciBmdW5jdGlvbiByZXR1cm5zLgorICogCisgKiBTaW5jZSB0aGV5IGRvIG5vdCAoYW5kIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBpcyBsaW1pdGVkIGJ5IHN5c3RlbQorICogcmVzb3VyY2VzKSwgbWFrZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHRocmVhZHMsIGFuZCBzaWduYWwgYW55IHRoYXQgYXJlCisgKiB3YWl0aW5nIHdoZW4gd2Ugd2FudCBhIHRocmVhZCBwYXN0IHRoYXQgbGltaXQuCisgKi8KK3N0YXRpYyBpbnQKK3N0YXJ0X2Ryb3AoREFUQSAqIGRhdGEpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKCF1c2VkX3RocmVhZHMpIHsKKwkvKiBtdXRleCBhbmQgY29uZGl0aW9uIGZvciBzaWduYWxsaW5nIHRocmVhZCAqLworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmbXV0ZXhfbmV4dF9kcm9wLCBOVUxMKTsKKwlwdGhyZWFkX2NvbmRfaW5pdCgmY29uZF9uZXh0X2Ryb3AsIE5VTEwpOworICAgIH0KKworICAgIGlmICh1c2VkX3RocmVhZHMgPCBNQVhfVEhSRUFEUykgeworCXJjID0gcHRocmVhZF9jcmVhdGUoJihkcm9wX3RocmVhZHNbdXNlZF90aHJlYWRzXS5teXNlbGYpLAorCQkJICAgIE5VTEwsCisJCQkgICAgZHJhd19kcm9wLAorCQkJICAgIGRhdGEpOworCSsrdXNlZF90aHJlYWRzOworICAgIH0gZWxzZSB7CisJcmMgPSBwdXRfbmV4dF9kcm9wKCk7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitnZXRfaW5wdXQodm9pZCkKK3sKKyAgICByZXR1cm4gVVNJTkdfV0lORE9XKHN0ZHNjciwgd2dldGNoKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsCisgICAgIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgYm9vbCBkb25lID0gRkFMU0U7CisgICAgREFUQSBkcm9wOworI2lmbmRlZiBVU0VfUFRIUkVBRFMKKyAgICBEQVRBIGxhc3RbTUFYX0RST1BdOworI2VuZGlmCisgICAgaW50IGogPSAwOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgQ0FUQ0hBTEwob25zaWcpOworCisgICAgaW5pdHNjcigpOworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBiZyA9IC0xOworI2VuZGlmCisJaW5pdF9wYWlyKDEsIENPTE9SX0JMVUUsIGJnKTsKKwlpbml0X3BhaXIoMiwgQ09MT1JfQ1lBTiwgYmcpOworICAgIH0KKyAgICBubCgpOworICAgIG5vZWNobygpOworICAgIGN1cnNfc2V0KDApOworICAgIHRpbWVvdXQoMCk7CisKKyNpZm5kZWYgVVNFX1BUSFJFQURTCisgICAgZm9yIChqID0gTUFYX0RST1A7IC0taiA+PSAwOykgeworCWxhc3Rbal0ueCA9IHJhbmRvbV94KCk7CisJbGFzdFtqXS55ID0gcmFuZG9tX3koKTsKKyAgICB9CisgICAgaiA9IDA7CisjZW5kaWYKKworICAgIHdoaWxlICghZG9uZSkgeworCWRyb3AueCA9IHJhbmRvbV94KCk7CisJZHJvcC55ID0gcmFuZG9tX3koKTsKKworI2lmZGVmIFVTRV9QVEhSRUFEUworCWlmIChzdGFydF9kcm9wKCZkcm9wKSAhPSAwKSB7CisJICAgIGJlZXAoKTsKKwl9CisjZWxzZQorCS8qCisJICogVGhlIG5vbi10aHJlYWRlZCBjb2RlIGRyYXdzIHBhcnRzIG9mIGVhY2ggZHJvcCBvbiBlYWNoIGxvb3AuCisJICovCisJcGFydDEoJmRyb3ApOworCisJcGFydDIoJmxhc3Rbal0pOworCisJaiA9IG5leHRfaihqKTsKKwlwYXJ0MygmbGFzdFtqXSk7CisKKwlqID0gbmV4dF9qKGopOworCXBhcnQ0KCZsYXN0W2pdKTsKKworCWogPSBuZXh0X2ooaik7CisJcGFydDUoJmxhc3Rbal0pOworCisJaiA9IG5leHRfaihqKTsKKwlwYXJ0NigmbGFzdFtqXSk7CisKKwlsYXN0W2pdID0gZHJvcDsKKyNlbmRpZgorCisJc3dpdGNoIChnZXRfaW5wdXQoKSkgeworCWNhc2UgKCdxJyk6CisJY2FzZSAoJ1EnKToKKwkgICAgZG9uZSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3MnOgorCSAgICBub2RlbGF5KHN0ZHNjciwgRkFMU0UpOworCSAgICBicmVhazsKKwljYXNlICcgJzoKKwkgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworCSAgICBicmVhazsKKyNpZmRlZiBLRVlfUkVTSVpFCisJY2FzZSAoS0VZX1JFU0laRSk6CisJICAgIGJyZWFrOworI2VuZGlmCisJfQorCW5hcG1zKDUwKTsKKyAgICB9CisgICAgY3Vyc19zZXQoMSk7CisgICAgZW5kd2luKCk7CisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgcHJpbnRmKCJDb3VudHMgcGVyIHRocmVhZDpcbiIpOworICAgIGZvciAoaiA9IDA7IGogPCBNQVhfVEhSRUFEUzsgKytqKQorCXByaW50ZigiICAlZDolbGRcbiIsIGosIGRyb3BfdGhyZWFkc1tqXS5jb3VudGVyKTsKKyNlbmRpZgorICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3JlZHJhdy5jIGIvdGVzdC9yZWRyYXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmU2Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWRyYXcuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHJlZHJhdy5jLHYgMS40IDIwMDcvMDYvMzAgMTc6NTU6MDYgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgdGhlIHJlZHJhd3dpbigpIGFuZCB3cmVkcmF3bG4oKSBmdW5jdGlvbnMuCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwNi8xMS80CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCitzdGF0aWMgdm9pZAordHJhc2goaW50IGJlZ194LCBpbnQgbWF4X3gsIGludCBjdXJfeCkKK3sKKyAgICBpbnQgeDsKKworICAgIGZvciAoeCA9IGN1cl94OyB4ID4gYmVnX3g7IC0teCkgeworCXB1dGNoYXIoJ1xiJyk7CisgICAgfQorICAgIGZvciAoeCA9IGJlZ194OyB4IDwgbWF4X3g7ICsreCkgeworCWlmICh4IDwgY3VyX3gpCisJICAgIHB1dGNoYXIoJzwnKTsKKwllbHNlIGlmICh4ID09IGN1cl94KQorCSAgICBwdXRjaGFyKCc9Jyk7CisJZWxzZSBpZiAoeCA+IGN1cl94KQorCSAgICBwdXRjaGFyKCc+Jyk7CisgICAgfQorICAgIGZvciAoeCA9IG1heF94OyB4ID4gY3VyX3g7IC0teCkgeworCXB1dGNoYXIoJ1xiJyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordGVzdF9yZWRyYXcoV0lORE9XICp3aW4pCit7CisgICAgV0lORE9XICp3aW4xOworICAgIFdJTkRPVyAqd2luMjsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICBpbnQgY2gsIHksIHg7CisgICAgaW50IG1heF95LCBtYXhfeDsKKyAgICBpbnQgYmVnX3ksIGJlZ194OworCisgICAgc2Nyb2xsb2sod2luLCBUUlVFKTsKKyAgICBrZXlwYWQod2luLCBUUlVFKTsKKyAgICBnZXRtYXh5eCh3aW4sIG1heF95LCBtYXhfeCk7CisgICAgZ2V0YmVneXgod2luLCBiZWdfeSwgYmVnX3gpOworICAgIHdoaWxlICghZG9uZSkgeworCWNoID0gd2dldGNoKHdpbik7CisJZ2V0eXgod2luLCB5LCB4KTsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAncSc6CisJICAgIC8qIEZBTExUSFJVICovCisJY2FzZSBFU0NBUEU6CisJICAgIGRvbmUgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgd2luMSA9IG5ld3dpbihtYXhfeSwgbWF4X3gsCisJCQkgIGJlZ195LCBiZWdfeCk7CisJICAgIHdpbjIgPSBuZXd3aW4obWF4X3kgLSAyLCBtYXhfeCAtIDIsCisJCQkgIGJlZ195ICsgMSwgYmVnX3ggKyAxKTsKKwkgICAgYm94KHdpbjEsIDAsIDApOworCSAgICB3cmVmcmVzaCh3aW4xKTsKKworCSAgICB0ZXN0X3JlZHJhdyh3aW4yKTsKKworCSAgICBkZWx3aW4od2luMik7CisJICAgIGRlbHdpbih3aW4xKTsKKworCSAgICB0b3VjaHdpbih3aW4pOworCSAgICBicmVhazsKKworCWNhc2UgJyEnOgorCSAgICAvKgorCSAgICAgKiByZWRyYXd3aW4oKSBhbmQgd3JlZHJhd2xuKCkgZG8gbm90IHRha2UgaW50byBhY2NvdW50IHRoZQorCSAgICAgKiBwb3NzaWJpbGl0eSB0aGF0IHRoZSBjdXJzb3IgbWF5IGhhdmUgbW92ZWQuICBUaGF0IG1ha2VzIHRoZW0KKwkgICAgICogY3VtYmVyc29tZSBmb3IgdXNpbmcgd2l0aCBhIHNoZWxsIGNvbW1hbmQuICBTbyB3ZSBzaW1wbHkKKwkgICAgICogdHJhc2ggdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgd2luZG93IHVzaW5nIGJhY2tzcGFjZS9vdmVyd3JpdGUuCisJICAgICAqLworCSAgICB0cmFzaChiZWdfeCwgbWF4X3gsIHggKyBiZWdfeCk7CisJICAgIGJyZWFrOworCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJY2FzZSAnQCc6CisJICAgIC8qCisJICAgICAqIEZvciBhIHNoZWxsIGNvbW1hbmQsIHdlIGNhbiB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBub3RlZCBhYm92ZQorCSAgICAgKiB1c2luZyBtdmN1cigpLiAgSXQgaXMgaWZkZWYnZCBmb3IgTkNVUlNFUywgc2luY2UgWC9PcGVuIGRvZXMKKwkgICAgICogbm90IGRlZmluZSB0aGUgY2FzZSB3aGVyZSB0aGUgb2xkIGxvY2F0aW9uIGlzIHVua25vd24uIAorCSAgICAgKi8KKwkgICAgc3lzdGVtKCJkYXRlIik7CisJICAgIG12Y3VyKC0xLCAtMSwgeSwgeCk7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIENUUkwoJ1cnKToKKwkgICAgcmVkcmF3d2luKHdpbik7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdMJyk6CisJICAgIHdyZWRyYXdsbih3aW4sIHksIDEpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX1VQOgorCSAgICBpZiAoeSA+IDApCisJCXdtb3ZlKHdpbiwgeSAtIDEsIHgpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX0RPV046CisJICAgIGlmICh5IDwgbWF4X3kpCisJCXdtb3ZlKHdpbiwgeSArIDEsIHgpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGlmICh4ID4gMCkKKwkJd21vdmUod2luLCB5LCB4IC0gMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfUklHSFQ6CisJICAgIGlmICh4IDwgbWF4X3gpCisJCXdtb3ZlKHdpbiwgeSwgeCArIDEpOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGlmIChjaCA+IEtFWV9NSU4pIHsKKwkJd2FkZHN0cih3aW4sIGtleW5hbWUoY2gpKTsKKwkgICAgfSBlbHNlIHsKKwkJd2FkZHN0cih3aW4sIHVuY3RybChVQ2hhcihjaCkpKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJd25vdXRyZWZyZXNoKHdpbik7CisJZG91cGRhdGUoKTsKKyAgICB9Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGluaXRzY3IoKTsKKyAgICByYXcoKTsKKyAgICBub2VjaG8oKTsKKyAgICB0ZXN0X3JlZHJhdyhzdGRzY3IpOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3NhdmVzY3JlZW4uYyBiL3Rlc3Qvc2F2ZXNjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3NhdmVzY3JlZW4uYwpAQCAtMCwwICsxLDMxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHNhdmVzY3JlZW4uYyx2IDEuMTAgMjAwNy8wNy8yMSAxNzo1NzozNyB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSBzYXZlL3Jlc3RvcmUgZnVuY3Rpb25zIGZyb20gdGhlIGN1cnNlcyBsaWJyYXJ5LgorICogVGhvbWFzIERpY2tleSAtIDIwMDcvNy8xNAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgYm9vbCB1c2VfaW5pdCA9IEZBTFNFOworCitzdGF0aWMgdm9pZAorc2V0dXBfbmV4dCh2b2lkKQoreworICAgIGN1cnNfc2V0KDEpOworICAgIHJlc2V0X3NoZWxsX21vZGUoKTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXAoY2hhciAqZmlsZXNbXSkKK3sKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IGZpbGVzW25dICE9IDA7ICsrbikgeworCXVubGluayhmaWxlc1tuXSk7CisgICAgfQorfQorCitzdGF0aWMgaW50Citsb2FkX3NjcmVlbihjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKHVzZV9pbml0KSB7CisJaWYgKChyZXN1bHQgPSBzY3JfaW5pdChmaWxlbmFtZSkpICE9IEVSUikKKwkgICAgcmVzdWx0ID0gc2NyX3Jlc3RvcmUoZmlsZW5hbWUpOworICAgIH0gZWxzZSB7CisJcmVzdWx0ID0gc2NyX3NldChmaWxlbmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBzY3JfcmVzdG9yZSgpIG9yIHNjcl9zZXQoKSBvcGVyYXRlcyBvbiBjdXJzY3IuICBJZiB3ZSByZWFkIGEgY2hhcmFjdGVyIHVzaW5nCisgKiBnZXRjaCgpIHRoYXQgd2lsbCByZWZyZXNoIHN0ZHNjciwgd2lwaW5nIG91dCB0aGUgcmVzdWx0LiAgVG8gYXZvaWQgdGhhdCwKKyAqIGNvcHkgdGhlIGRhdGEgYmFjayBmcm9tIGN1cnNjciB0byBzdGRzY3IuCisgKi8KK3N0YXRpYyB2b2lkCithZnRlcl9sb2FkKHZvaWQpCit7CisgICAgb3ZlcndyaXRlKGN1cnNjciwgc3Rkc2NyKTsKKyAgICBkb3VwZGF0ZSgpOworfQorCitzdGF0aWMgdm9pZAorc2hvd193aGF0KGludCB3aGljaCwgaW50IGxhc3QpCit7CisgICAgaW50IHksIHg7CisgICAgdGltZV90IG5vdyA9IHRpbWUoKHRpbWVfdCAqKSAwKTsKKworICAgIGdldHl4KHN0ZHNjciwgeSwgeCk7CisKKyAgICBtb3ZlKDAsIDApOworICAgIHByaW50dygiU2F2ZWQgJWQgb2YgJWQgLSAlcyIsIHdoaWNoLCBsYXN0ICsgMSwgY3RpbWUoJm5vdykpOworCisgICAgbW92ZSh5LCB4KTsKKworICAgIHJlZnJlc2goKTsKK30KKworc3RhdGljIGludAorZ2V0X2NvbW1hbmQoaW50IHdoaWNoLCBpbnQgbGFzdCkKK3sKKyAgICBpbnQgY2g7CisKKyAgICB0aW1lb3V0KDEwMCk7CisKKyAgICBkbyB7CisJc2hvd193aGF0KHdoaWNoLCBsYXN0KTsKKwljaCA9IGdldGNoKCk7CisgICAgfSB3aGlsZSAoY2ggPT0gRVJSKTsKKworICAgIHJldHVybiBjaDsKK30KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm1zZ1tdID0KKyAgICB7CisJIlVzYWdlOiBzYXZlc2NyZWVuIFstcl0gZmlsZXMiLAorCSIiLAorCSJPcHRpb25zOiIsCisJIiAtaSAgdXNlIHNjcl9pbml0L3Njcl9yZXN0b3JlIHJhdGhlciB0aGFuIHNjcl9zZXQiLAorCSIgLXIgIHJlcGxheSB0aGUgc2NyZWVuLWR1bXAgZmlsZXMiCisgICAgfTsKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YobXNnKTsgKytuKSB7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnW25dKTsKKyAgICB9CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGNoOworICAgIGludCB3aGljaCA9IDA7CisgICAgaW50IGxhc3Q7CisgICAgYm9vbCByZXBsYXlpbmcgPSBGQUxTRTsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICBjaGFyICoqZmlsZXM7CisKKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJpciIpKSAhPSAtMSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdpJzoKKwkgICAgdXNlX2luaXQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdyJzoKKwkgICAgcmVwbGF5aW5nID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgICBjdXJzX3NldCgwKTsKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKwlmb3IgKGNoID0gMDsgY2ggPCBDT0xPUl9QQUlSUzsgKytjaCkgeworCSAgICBzaG9ydCBwYWlyID0gY2ggJSBDT0xPUl9QQUlSUzsKKwkgICAgaW5pdF9wYWlyKHBhaXIsIENPTE9SX1dISVRFLCBjaCAlIENPTE9SUyk7CisJfQorICAgIH0KKworICAgIGZpbGVzID0gYXJndiArIG9wdGluZDsKKyAgICBsYXN0ID0gYXJnYyAtIG9wdGluZCAtIDE7CisgICAgaWYgKHJlcGxheWluZykgeworCisJLyoKKwkgKiBVc2UgdGhlIGxhc3QgZmlsZSBhcyB0aGUgaW5pdGlhbC9jdXJyZW50IHNjcmVlbi4KKwkgKi8KKwlpZiAobGFzdCA8IDApIHsKKwkgICAgZW5kd2luKCk7CisJICAgIHByaW50ZigiTm8gc2NyZWVuLWR1bXBzIGdpdmVuXG4iKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisKKwl3aGljaCA9IGxhc3Q7CisJaWYgKGxvYWRfc2NyZWVuKGZpbGVzW3doaWNoXSkgPT0gRVJSKSB7CisJICAgIGVuZHdpbigpOworCSAgICBwcmludGYoIkNhbm5vdCBsb2FkIHNjcmVlbi1kdW1wICVzXG4iLCBmaWxlc1t3aGljaF0pOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKwlhZnRlcl9sb2FkKCk7CisKKwl3aGlsZSAoIWRvbmUgJiYgKGNoID0gZ2V0Y2goKSkgIT0gRVJSKSB7CisJICAgIHN3aXRjaCAoY2gpIHsKKwkgICAgY2FzZSAnbic6CisJCS8qCisJCSAqIElmIHdlIGdvdCBhICJuZXh0IiBoZXJlLCBza2lwIHRvIHRoZSBmaW5hbCBzY3JlZW4gYmVmb3JlCisJCSAqIG1vdmluZyB0byB0aGUgbmV4dCBwcm9jZXNzLgorCQkgKi8KKwkJc2V0dXBfbmV4dCgpOworCQl3aGljaCA9IGxhc3Q7CisJCWRvbmUgPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSAncSc6CisJCWVuZHdpbigpOworCQljbGVhbnVwKGZpbGVzKTsKKwkJZG9uZSA9IFRSVUU7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9CQUNLU1BBQ0U6CisJICAgIGNhc2UgJ1xiJzoKKwkJaWYgKC0td2hpY2ggPCAwKQorCQkgICAgd2hpY2ggPSBsYXN0OworCQlicmVhazsKKwkgICAgY2FzZSAnICc6CisJCWlmICgrK3doaWNoID4gbGFzdCkKKwkJICAgIHdoaWNoID0gMDsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJlZXAoKTsKKwkJY29udGludWU7CisJICAgIH0KKworCSAgICBpZiAoY2ggPT0gJ3EnKSB7CisJCTsKKwkgICAgfSBlbHNlIGlmIChzY3JfcmVzdG9yZShmaWxlc1t3aGljaF0pID09IEVSUikgeworCQllbmR3aW4oKTsKKwkJcHJpbnRmKCJDYW5ub3QgbG9hZCBzY3JlZW4tZHVtcCAlc1xuIiwgZmlsZXNbd2hpY2hdKTsKKwkJY2xlYW51cChmaWxlcyk7CisJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJICAgIH0gZWxzZSB7CisJCXdyZWZyZXNoKGN1cnNjcik7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwlpbnQgeTsKKwlpbnQgeDsKKworCW1vdmUoMiwgMCk7CisJcHJpbnR3KCJVc2UgaCxqLGssbCBvciBhcnJvd3MgdG8gbW92ZSBhcm91bmQgdGhlIHNjcmVlblxuIik7CisJcHJpbnR3KCJQcmVzcyAncScgdG8gcXVpdCwgJyAnIHRvIGR1bXAgYSBzY3JlZW5cbiIpOworCXByaW50dygiV2hlbiB0aGUgbGFzdCBzY3JlZW4gaGFzIGJlZW4gZHVtcGVkLCBwcmVzcyAnbicgdG8gcnVuIHRoZVxuIik7CisJcHJpbnR3KCJzY3JlZW4tbG9hZGVyLiAgVGhhdCBhbGxvd3Mgb25seSAncScsIGJhY2tzcGFjZSBhbmQgJyAnIGZvclxuIik7CisJcHJpbnR3KCJzdGVwcGluZyB0aHJvdWdoIHRoZSBkdW1wZWQvcmVzdG9yZWQgc2NyZWVucy5cbiIpOworCWdldHl4KHN0ZHNjciwgeSwgeCk7CisKKwl3aGlsZSAoIWRvbmUpIHsKKwkgICAgc3dpdGNoIChjaCA9IGdldF9jb21tYW5kKHdoaWNoLCBsYXN0KSkgeworCSAgICBjYXNlICduJzoKKwkJc2V0dXBfbmV4dCgpOworCQlkb25lID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3EnOgorCQllbmR3aW4oKTsKKwkJY2xlYW51cChmaWxlcyk7CisJCWRvbmUgPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSAnICc6CisJCWlmIChmaWxlc1t3aGljaF0gIT0gMCkgeworCQkgICAgc2hvd193aGF0KHdoaWNoICsgMSwgbGFzdCk7CisJCSAgICBpZiAoc2NyX2R1bXAoZmlsZXNbd2hpY2hdKSA9PSBFUlIpIHsKKwkJCWVuZHdpbigpOworCQkJcHJpbnRmKCJDYW5ub3Qgd3JpdGUgc2NyZWVuLWR1bXAgJXNcbiIsIGZpbGVzW3doaWNoXSk7CisJCQljbGVhbnVwKGZpbGVzKTsKKwkJCWRvbmUgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICArK3doaWNoOworCQkgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCQkJc2hvcnQgcGFpciA9IHdoaWNoICUgQ09MT1JfUEFJUlM7CisJCQlia2dkKENPTE9SX1BBSVIocGFpcikpOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgYmVlcCgpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9MRUZUOgorCSAgICBjYXNlICdoJzoKKwkJaWYgKC0teCA8IDApCisJCSAgICB4ID0gQ09MUyAtIDE7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9ET1dOOgorCSAgICBjYXNlICdqJzoKKwkJaWYgKCsreSA+PSBMSU5FUykKKwkJICAgIHkgPSAxOworCQlicmVhazsKKwkgICAgY2FzZSBLRVlfVVA6CisJICAgIGNhc2UgJ2snOgorCQlpZiAoLS15IDwgMSkKKwkJICAgIHkgPSBMSU5FUyAtIDE7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9SSUdIVDoKKwkgICAgY2FzZSAnbCc6CisJCWlmICgrK3ggPj0gQ09MUykKKwkJICAgIHggPSAwOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoIWRvbmUpIHsKKwkJdGltZV90IG5vdyA9IHRpbWUoKHRpbWVfdCAqKSAwKTsKKworCQltb3ZlKDAsIDApOworCQlhZGRzdHIoY3RpbWUoJm5vdykpOworCQltb3ZlKHksIHgpOworCQlhZGRjaCgnIycgfCBBX1JFVkVSU0UpOworCQltb3ZlKHksIHgpOworCSAgICB9CisJfQorICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC9zYXZlc2NyZWVuLnNoIGIvdGVzdC9zYXZlc2NyZWVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4MWQzZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3NhdmVzY3JlZW4uc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogc2F2ZXNjcmVlbi5zaCx2IDEuMyAyMDA3LzA3LzE0IDIxOjUwOjI2IHRvbSBFeHAgJAorIworIyBVc2UgdGhpcyBzY3JpcHQgdG8gZXhlcmNpc2UgInNhdmVzY3JlZW4iLgorIyBJdCBzdGFydHMgYnkgZ2VuZXJhdGluZyBhIHNlcmllcyBvZiB0ZW1wb3JhcnktZmlsZW5hbWVzLCB3aGljaCBhcmUgcGFzc2VkCisjIHRvIHRoZSB0ZXN0LXByb2dyYW0uICBMb29wIGFzIGxvbmcgYXMgdGhlIGZpcnN0IGZpbGUgbmFtZWQgZXhpc3RzLgorUEFSQU1TPQorTkZJTEVTPTQKK1BSRUZJWD1zYXZlc2NyZWVuLSQkCituPTAKK0JFR0lOUz0kUFJFRklYLSRuLnRtcAord2hpbGUgdGVzdCAkbiAhPSAkTkZJTEVTCitkbworCUxBVEVTVD0kUFJFRklYLSRuLnRtcAorCVBBUkFNUz0iJFBBUkFNUyAkTEFURVNUIgorCW49YGV4cHIgJG4gKyAxYAorZG9uZQorCisuL3NhdmVzY3JlZW4gJFBBUkFNUworaWYgdGVzdCAtZiAkQkVHSU5TCit0aGVuCisJd2hpbGUgdGVzdCAtZiAkQkVHSU5TCisJZG8KKwkJLi9zYXZlc2NyZWVuIC1yICRQQVJBTVMKKwlkb25lCitlbHNlCisJZWNobyAiTm8gc2NyZWVucyB3ZXJlIHNhdmVkIgorZmkKZGlmZiAtLWdpdCBhL3Rlc3QvdGNsb2NrLmMgYi90ZXN0L3RjbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGVlODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3RjbG9jay5jCkBAIC0wLDAgKzEsMjU4IEBACisvKiAkSWQ6IHRjbG9jay5jLHYgMS4yNSAyMDA1LzA0LzE2IDE2OjM5OjI3IHRvbSBFeHAgJCAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAgdGNsb2NrIC0gYW5hbG9nL2RpZ2l0YWwgY2xvY2sgZm9yIGN1cnNlcy4KKyAgSWYgaXQgZ2l2ZXMgeW91IGpveSwgdGhlbgorICAoYSkgSSdtIGdsYWQKKyAgKGIpIHlvdSBuZWVkIHRvIGdldCBvdXQgbW9yZSA6LSkKKworICBUaGlzIHByb2dyYW0gaXMgY29weXJpZ2h0IEhvd2FyZCBKb25lcywgU2VwdGVtYmVyIDE5OTQKKyAgKGhhLmpvbmVzQGljLmFjLnVrKS4gSXQgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCBhcworICBsb25nIGFzIHRoaXMgY29weXJpZ2h0IG1lc3NhZ2UgcmVtYWlucyBpbnRhY3QsIGFuZCBhbnkKKyAgbW9kaWZpY2F0aW9ucyBhcmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaC4gW0luIGZhY3QsIGlmCisgIHlvdSBtb2RpZnkgaXQsIEkgd291bGRuJ3QgbWluZCB0aGUgbW9kaWZpY2F0aW9ucyBiYWNrLAorICBlc3BlY2lhbGx5IGlmIHRoZXkgYWRkIGFueSBuaWNlIGZlYXR1cmVzLiBBIGdvb2Qgb25lCisgIHdvdWxkIGJlIGEgcHJlY2FsYyB0YWJsZSBmb3IgdGhlIDYwIGhhbmQgcG9zaXRpb25zLCBzbworICB0aGF0IHRoZSBmbG9hdGluZyBwb2ludCBzdHVmZiBjYW4gYmUgZGl0Y2hlZC4gQXMgSSBzYWlkLAorICBpdCB3YXMgYSAyMCBoYWNrdXAgbWludXRlIGpvYi5dCisKKyAgQ09NSU5HIFNPT046IHRmaXNodGFuay4gQmUgdGhlIGVudnkgb2YgeW91ciBtYWMtb3duaW5nCisgIGNvbGxlYWd1ZXMuCisqLworCisvKiBUbyBjb21waWxlOiBjYyAtbyB0Y2xvY2sgdGNsb2NrLmMgLWxjdXJzZXMgLWxtICovCisKKyNpZm5kZWYgUEkKKyNkZWZpbmUgUEkgMy4xNDE1OTI2NTQKKyNlbmRpZgorCisjZGVmaW5lIHNpZ24oX3gpIChfeDwwPy0xOjEpCisKKyNkZWZpbmUgQVNQRUNUIDIuMgorI2RlZmluZSBST1VORCh2YWx1ZSkgKChpbnQpKCh2YWx1ZSkgKyAwLjUpKQorCisjZGVmaW5lIEEyWChhbmdsZSxyYWRpdXMpIFJPVU5EKEFTUEVDVCAqIHJhZGl1cyAqIHNpbihhbmdsZSkpCisjZGVmaW5lIEEyWShhbmdsZSxyYWRpdXMpIFJPVU5EKHJhZGl1cyAqIGNvcyhhbmdsZSkpCisKKy8qIFBsb3QgYSBwb2ludCAqLworc3RhdGljIHZvaWQKK3Bsb3QoaW50IHgsIGludCB5LCBjaGFyIGNvbCkKK3sKKyAgICBtdmFkZGNoKHksIHgsIChjaHR5cGUpIGNvbCk7Cit9CisKKy8qIERyYXcgYSBkaWFnb25hbChhcmJpdHJhcnkpIGxpbmUgdXNpbmcgQnJlc2VuaGFtJ3MgYWxvZ3JpdGhtLiAqLworc3RhdGljIHZvaWQKK2RsaW5lKGludCBwYWlyLCBpbnQgZnJvbV94LCBpbnQgZnJvbV95LCBpbnQgeDIsIGludCB5MiwgY2hhciBjaCkKK3sKKyAgICBpbnQgZHgsIGR5OworICAgIGludCBheCwgYXk7CisgICAgaW50IHN4LCBzeTsKKyAgICBpbnQgeCwgeTsKKyAgICBpbnQgZDsKKworICAgIGlmIChoYXNfY29sb3JzKCkpCisJYXR0cnNldChDT0xPUl9QQUlSKHBhaXIpKTsKKworICAgIGR4ID0geDIgLSBmcm9tX3g7CisgICAgZHkgPSB5MiAtIGZyb21feTsKKworICAgIGF4ID0gYWJzKGR4ICogMik7CisgICAgYXkgPSBhYnMoZHkgKiAyKTsKKworICAgIHN4ID0gc2lnbihkeCk7CisgICAgc3kgPSBzaWduKGR5KTsKKworICAgIHggPSBmcm9tX3g7CisgICAgeSA9IGZyb21feTsKKworICAgIGlmIChheCA+IGF5KSB7CisJZCA9IGF5IC0gKGF4IC8gMik7CisKKwl3aGlsZSAoMSkgeworCSAgICBwbG90KHgsIHksIGNoKTsKKwkgICAgaWYgKHggPT0geDIpCisJCXJldHVybjsKKworCSAgICBpZiAoZCA+PSAwKSB7CisJCXkgKz0gc3k7CisJCWQgLT0gYXg7CisJICAgIH0KKwkgICAgeCArPSBzeDsKKwkgICAgZCArPSBheTsKKwl9CisgICAgfSBlbHNlIHsKKwlkID0gYXggLSAoYXkgLyAyKTsKKworCXdoaWxlICgxKSB7CisJICAgIHBsb3QoeCwgeSwgY2gpOworCSAgICBpZiAoeSA9PSB5MikKKwkJcmV0dXJuOworCisJICAgIGlmIChkID49IDApIHsKKwkJeCArPSBzeDsKKwkJZCAtPSBheTsKKwkgICAgfQorCSAgICB5ICs9IHN5OworCSAgICBkICs9IGF4OworCX0KKyAgICB9Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGludCBpLCBjeCwgY3k7CisgICAgZG91YmxlIGNyLCBtcmFkaXVzLCBocmFkaXVzLCBtYW5nbGUsIGhhbmdsZTsKKyAgICBkb3VibGUgc2FuZ2xlLCBzcmFkaXVzLCBob3VyczsKKyAgICBpbnQgaGR4LCBoZHk7CisgICAgaW50IG1keCwgbWR5OworICAgIGludCBzZHgsIHNkeTsKKyAgICBpbnQgY2g7CisgICAgaW50IGxhc3RiZWVwID0gLTE7CisgICAgYm9vbCBvZGQgPSBGQUxTRTsKKyAgICB0aW1lX3QgdGltOworICAgIHN0cnVjdCB0bSAqdDsKKyAgICBjaGFyIHN6Q2hhclsxMF07CisgICAgY2hhciAqdGV4dDsKKyAgICBpbnQgbXlfYmcgPSBDT0xPUl9CTEFDSzsKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorICAgIHN0cnVjdCB0aW1ldmFsIGN1cnJlbnQ7CisgICAgZG91YmxlIGZyYWN0aW9uID0gMC4wOworI2VuZGlmCisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpbml0c2NyKCk7CisgICAgbm9lY2hvKCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworICAgIGN1cnNfc2V0KDApOworCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgPT0gT0spCisJICAgIG15X2JnID0gLTE7CisjZW5kaWYKKwlpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBteV9iZyk7CisJaW5pdF9wYWlyKDIsIENPTE9SX01BR0VOVEEsIG15X2JnKTsKKwlpbml0X3BhaXIoMywgQ09MT1JfR1JFRU4sIG15X2JnKTsKKwlpbml0X3BhaXIoNCwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworICAgIH0KKyNpZmRlZiBLRVlfUkVTSVpFCisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgIHJlc3RhcnQ6CisjZW5kaWYKKyAgICBjeCA9IChDT0xTIC0gMSkgLyAyOwkvKiAzOSAqLworICAgIGN5ID0gTElORVMgLyAyOwkJLyogMTIgKi8KKyAgICBpZiAoY3ggLyBBU1BFQ1QgPCBjeSkKKwljciA9IGN4IC8gQVNQRUNUOworICAgIGVsc2UKKwljciA9IGN5OworICAgIHNyYWRpdXMgPSAoNSAqIGNyKSAvIDY7CS8qIDEwICovCisgICAgbXJhZGl1cyA9ICgzICogY3IpIC8gNDsJLyogOSAqLworICAgIGhyYWRpdXMgPSBjciAvIDI7CQkvKiA2ICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCXNhbmdsZSA9IChpICsgMSkgKiAoMi4wICogUEkpIC8gMTIuMDsKKwlzZHggPSBBMlgoc2FuZ2xlLCBzcmFkaXVzKTsKKwlzZHkgPSBBMlkoc2FuZ2xlLCBzcmFkaXVzKTsKKwlzcHJpbnRmKHN6Q2hhciwgIiVkIiwgaSArIDEpOworCisJbXZhZGRzdHIoY3kgLSBzZHksIGN4ICsgc2R4LCBzekNoYXIpOworICAgIH0KKworICAgIG12YWRkc3RyKDAsIDAsICJBU0NJSSBDbG9jayBieSBIb3dhcmQgSm9uZXMgKGhhLmpvbmVzQGljLmFjLnVrKSwxOTk0Iik7CisKKyAgICBzcmFkaXVzID0gKDQgKiBzcmFkaXVzKSAvIDU7CisgICAgZm9yICg7OykgeworCW5hcG1zKDEwMCk7CisKKwl0aW0gPSB0aW1lKDApOworCXQgPSBsb2NhbHRpbWUoJnRpbSk7CisKKwlob3VycyA9ICh0LT50bV9ob3VyICsgKHQtPnRtX21pbiAvIDYwLjApKTsKKwlpZiAoaG91cnMgPiAxMi4wKQorCSAgICBob3VycyAtPSAxMi4wOworCisJbWFuZ2xlID0gKCh0LT50bV9taW4gKyAodC0+dG1fc2VjIC8gNjAuMCkpICogKDIgKiBQSSkgLyA2MC4wKTsKKwltZHggPSBBMlgobWFuZ2xlLCBtcmFkaXVzKTsKKwltZHkgPSBBMlkobWFuZ2xlLCBtcmFkaXVzKTsKKworCWhhbmdsZSA9ICgoaG91cnMpICogKDIuMCAqIFBJKSAvIDEyLjApOworCWhkeCA9IEEyWChoYW5nbGUsIGhyYWRpdXMpOworCWhkeSA9IEEyWShoYW5nbGUsIGhyYWRpdXMpOworCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKwlnZXR0aW1lb2ZkYXkoJmN1cnJlbnQsIDApOworCWZyYWN0aW9uID0gKGN1cnJlbnQudHZfdXNlYyAvIDEuMGU2KTsKKyNlbmRpZgorCXNhbmdsZSA9ICgodC0+dG1fc2VjICsgZnJhY3Rpb24pICogKDIuMCAqIFBJKSAvIDYwLjApOworCXNkeCA9IEEyWChzYW5nbGUsIHNyYWRpdXMpOworCXNkeSA9IEEyWShzYW5nbGUsIHNyYWRpdXMpOworCisJZGxpbmUoMywgY3gsIGN5LCBjeCArIG1keCwgY3kgLSBtZHksICcjJyk7CisKKwlhdHRyc2V0KEFfUkVWRVJTRSk7CisJZGxpbmUoMiwgY3gsIGN5LCBjeCArIGhkeCwgY3kgLSBoZHksICcuJyk7CisJYXR0cm9mZihBX1JFVkVSU0UpOworCisJaWYgKGhhc19jb2xvcnMoKSkKKwkgICAgYXR0cnNldChDT0xPUl9QQUlSKDEpKTsKKworCWRsaW5lKDEsIGN4LCBjeSwgY3ggKyBzZHgsIGN5IC0gc2R5LCAnTycpOworCisJaWYgKGhhc19jb2xvcnMoKSkKKwkgICAgYXR0cnNldChDT0xPUl9QQUlSKDApKTsKKworCXRleHQgPSBjdGltZSgmdGltKTsKKwltdnByaW50dygyLCAwLCAiJS4qcyIsIChpbnQpIChzdHJsZW4odGV4dCkgLSAxKSwgdGV4dCk7CisJcmVmcmVzaCgpOworCWlmICgodC0+dG1fc2VjICUgNSkgPT0gMAorCSAgICAmJiB0LT50bV9zZWMgIT0gbGFzdGJlZXApIHsKKwkgICAgbGFzdGJlZXAgPSB0LT50bV9zZWM7CisJICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwkJb2RkID0gIW9kZDsKKwkJYmtnZCgoY2h0eXBlKSAob2RkID8gQ09MT1JfUEFJUig0KSA6IENPTE9SX1BBSVIoMCkpKTsKKwkgICAgfQorCSAgICBiZWVwKCk7CisJfQorCisJaWYgKChjaCA9IGdldGNoKCkpICE9IEVSUikgeworI2lmZGVmIEtFWV9SRVNJWkUKKwkgICAgaWYgKGNoID09IEtFWV9SRVNJWkUpIHsKKwkJZmxhc2goKTsKKwkJZXJhc2UoKTsKKwkJd3JlZnJlc2goY3Vyc2NyKTsKKwkJZ290byByZXN0YXJ0OworCSAgICB9CisjZW5kaWYKKwkgICAgYnJlYWs7CisJfQorCisJZGxpbmUoMCwgY3gsIGN5LCBjeCArIGhkeCwgY3kgLSBoZHksICcgJyk7CisJZGxpbmUoMCwgY3gsIGN5LCBjeCArIG1keCwgY3kgLSBtZHksICcgJyk7CisJZGxpbmUoMCwgY3gsIGN5LCBjeCArIHNkeCwgY3kgLSBzZHksICcgJyk7CisKKyAgICB9CisKKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LnByaXYuaCBiL3Rlc3QvdGVzdC5wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxZjM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdGVzdC5wcml2LmgKQEAgLTAsMCArMSw1NzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAkSWQ6IHRlc3QucHJpdi5oLHYgMS43OSAyMDA4LzEwLzA0IDIxOjUzOjQxIHRvbSBFeHAgJCAqLworCisjaWZuZGVmIF9fVEVTVF9QUklWX0gKKyNkZWZpbmUgX19URVNUX1BSSVZfSCAxCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorCisvKgorICogRml4IGlmZGVmJ3MgdGhhdCBsb29rIGZvciB0aGUgZm9ybS9tZW51L3BhbmVsIGxpYnJhcmllcywgaWYgd2UgYXJlIGJ1aWxkaW5nCisgKiB3aXRoIHdpZGUtY2hhcmFjdGVyIG5jdXJzZXMuCisgKi8KKyNpZmRlZiAgSEFWRV9MSUJGT1JNVworI2RlZmluZSBIQVZFX0xJQkZPUk1XIDEKKyNlbmRpZgorCisjaWZkZWYgIEhBVkVfTElCTUVOVVcKKyNkZWZpbmUgSEFWRV9MSUJNRU5VVyAxCisjZW5kaWYKKworI2lmZGVmICBIQVZFX0xJQlBBTkVMVworI2RlZmluZSBIQVZFX0xJQlBBTkVMVyAxCisjZW5kaWYKKworLyoKKyAqIEZhbGxiYWNrIGRlZmluaXRpb25zIHRvIGFjY29tbW9kYXRlIGJyb2tlbiBjb21waWxlcnMuCisgKi8KKyNpZm5kZWYgSEFWRV9DVVJTRVNfVkVSU0lPTgorI2RlZmluZSBIQVZFX0NVUlNFU19WRVJTSU9OIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfQ0hHQVQKKyNkZWZpbmUgSEFWRV9DSEdBVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0NPTE9SX1NFVAorI2RlZmluZSBIQVZFX0NPTE9SX1NFVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0ZJTFRFUgorI2RlZmluZSBIQVZFX0ZJTFRFUiAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0ZPUk1fSAorI2RlZmluZSBIQVZFX0ZPUk1fSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVEJFR1gKKyNkZWZpbmUgSEFWRV9HRVRCRUdYIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfR0VUQ1VSWAorI2RlZmluZSBIQVZFX0dFVENVUlggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HRVRNQVhYCisjZGVmaW5lIEhBVkVfR0VUTUFYWCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVE9QVF9ICisjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HRVRQQVJYCisjZGVmaW5lIEhBVkVfR0VUUEFSWCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVFdJTgorI2RlZmluZSBIQVZFX0dFVFdJTiAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0xJQkZPUk0KKyNkZWZpbmUgSEFWRV9MSUJGT1JNIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTElCTUVOVQorI2RlZmluZSBIQVZFX0xJQk1FTlUgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9MSUJQQU5FTAorI2RlZmluZSBIQVZFX0xJQlBBTkVMIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTE9DQUxFX0gKKyNkZWZpbmUgSEFWRV9MT0NBTEVfSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX01FTlVfSAorI2RlZmluZSBIQVZFX01FTlVfSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX01WVkxJTkUKKyNkZWZpbmUgSEFWRV9NVlZMSU5FIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTVZXVkxJTkUKKyNkZWZpbmUgSEFWRV9NVldWTElORSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX05BUE1TCisjZGVmaW5lIEhBVkVfTkFQTVMgMQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9OQ19BTExPQ19ICisjZGVmaW5lIEhBVkVfTkNfQUxMT0NfSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1BBTkVMX0gKKyNkZWZpbmUgSEFWRV9QQU5FTF9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFVUV0lOCisjZGVmaW5lIEhBVkVfUFVUV0lOIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUkVTSVpFX1RFUk0KKyNkZWZpbmUgSEFWRV9SRVNJWkVfVEVSTSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1JJUE9GRkxJTkUKKyNkZWZpbmUgSEFWRV9SSVBPRkZMSU5FIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU0VUVVBURVJNCisjZGVmaW5lIEhBVkVfU0VUVVBURVJNIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU0xLX0NPTE9SCisjZGVmaW5lIEhBVkVfU0xLX0NPTE9SIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU0xLX0lOSVQKKyNkZWZpbmUgSEFWRV9TTEtfSU5JVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RFUk1BVFRSUworI2RlZmluZSBIQVZFX1RFUk1BVFRSUyAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RFUk1OQU1FCisjZGVmaW5lIEhBVkVfVEVSTU5BTUUgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9UR0VURU5UCisjZGVmaW5lIEhBVkVfVEdFVEVOVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RJR0VUTlVNCisjZGVmaW5lIEhBVkVfVElHRVROVU0gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9UWVBFQUhFQUQKKyNkZWZpbmUgSEFWRV9UWVBFQUhFQUQgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9USUdFVFNUUgorI2RlZmluZSBIQVZFX1RJR0VUU1RSIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfV0lOU1NUUgorI2RlZmluZSBIQVZFX1dJTlNTVFIgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKyNkZWZpbmUgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9XUkVTSVpFCisjZGVmaW5lIEhBVkVfV1JFU0laRSAwCisjZW5kaWYKKworI2lmbmRlZiBOQ1VSU0VTX0VYVF9GVU5DUworI2RlZmluZSBOQ1VSU0VTX0VYVF9GVU5DUyAwCisjZW5kaWYKKworI2lmbmRlZiBORUVEX1BURU1fSAorI2RlZmluZSBORUVEX1BURU1fSCAwCisjZW5kaWYKKworI2lmbmRlZiBOT19MRUFLUworI2RlZmluZSBOT19MRUFLUyAwCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzaWduYWwuaD4JLyogaW5jbHVkZSBiZWZvcmUgY3Vyc2VzLmggdG8gd29yayBhcm91bmQgZ2xpYmMgYnVnICovCisKKyNpZiBkZWZpbmVkKEhBVkVfWENVUlNFUykKKyNpbmNsdWRlIDx4Y3Vyc2VzLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTkNVUlNFU1dfTkNVUlNFU19IKQorI2luY2x1ZGUgPG5jdXJzZXN3L2N1cnNlcy5oPgorI2VsaWYgZGVmaW5lZChIQVZFX05DVVJTRVNfTkNVUlNFU19IKQorI2luY2x1ZGUgPG5jdXJzZXMvY3Vyc2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPGN1cnNlcy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfWENVUlNFUykKKy8qIG5vIG90aGVyIGhlYWRlcnMgKi8KKyN1bmRlZiAgSEFWRV9TRVRVUFRFUk0JCS8qIG5vbmZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgSEFWRV9TRVRVUFRFUk0gMAorI3VuZGVmICBIQVZFX1RHRVRFTlQJCS8qIG5vbmZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgSEFWRV9UR0VURU5UIDAKKyN1bmRlZiAgSEFWRV9USUdFVFNUUgkJLyogbm9uZnVuY3Rpb25hbCAqLworI2RlZmluZSBIQVZFX1RJR0VUU1RSIDAKKyNlbGlmIGRlZmluZWQoSEFWRV9OQ1VSU0VTV19URVJNX0gpCisjaW5jbHVkZSA8bmN1cnNlc3cvdGVybS5oPgorI2VsaWYgZGVmaW5lZChIQVZFX05DVVJTRVNfVEVSTV9IKQorI2luY2x1ZGUgPG5jdXJzZXMvdGVybS5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1RFUk1fSCkKKyNpbmNsdWRlIDx0ZXJtLmg+CisjZW5kaWYKKworLyoKKyAqIE5vdCBhbGwgY3Vyc2VzLmggaW1wbGVtZW50YXRpb25zIGluY2x1ZGUgdW5jdHJsLmgsCisgKiBTb2xhcmlzIDEwIHhwZzQgZm9yIGV4YW1wbGUuCisgKi8KKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgfHwgZGVmaW5lZChfWE9QRU5fQ1VSU0VTKQorI2lmIGRlZmluZWQoSEFWRV9OQ1VSU0VTV19OQ1VSU0VTX0gpCisjaW5jbHVkZSA8bmN1cnNlc3cvdW5jdHJsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTkNVUlNFU19OQ1VSU0VTX0gpCisjaW5jbHVkZSA8bmN1cnNlcy91bmN0cmwuaD4KKyNlbHNlCisjaW5jbHVkZSA8dW5jdHJsLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKKy8qICdnZXRvcHQoKScgbWF5IGJlIHByb3RvdHlwZWQgaW4gPHN0ZGxpYi5oPiwgYnV0IGRlY2xhcmluZyBpdHMgdmFyaWFibGVzCisgKiBkb2Vzbid0IGh1cnQuCisgKi8KK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZiAvKiBIQVZFX0dFVE9QVF9IICovCisKKyNpZiBIQVZFX0xPQ0FMRV9ICisjaW5jbHVkZSA8bG9jYWxlLmg+CisjZWxzZQorI2RlZmluZSBzZXRsb2NhbGUobmFtZSxzdHJpbmcpIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmbmRlZiBHQ0NfTk9SRVRVUk4KKyNkZWZpbmUgR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfUFJJTlRGTElLRQorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShhLGIpIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfVU5VU0VECisjZGVmaW5lIEdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HRVROU1RSCisjZGVmaW5lIGdldG5zdHIocyxuKSBnZXRzdHIocykKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9TT0ZUS0VZUworI2lmIEhBVkVfU0xLX0lOSVQKKyNkZWZpbmUgVVNFX1NPRlRLRVlTIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9TT0ZUS0VZUyAwCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9XSURFQ19TVVBQT1JUCisjaWYgZGVmaW5lZChfWE9QRU5fU09VUkNFX0VYVEVOREVEKSAmJiBkZWZpbmVkKFdBQ1NfVUxDT1JORVIpCisjZGVmaW5lIFVTRV9XSURFQ19TVVBQT1JUIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9XSURFQ19TVVBQT1JUIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX1BBTkVMX0ggJiYgSEFWRV9MSUJQQU5FTAorI2RlZmluZSBVU0VfTElCUEFORUwgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX0xJQlBBTkVMIDAKKyNlbmRpZgorCisjaWYgSEFWRV9NRU5VX0ggJiYgSEFWRV9MSUJNRU5VCisjZGVmaW5lIFVTRV9MSUJNRU5VIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9MSUJNRU5VIDAKKyNlbmRpZgorCisjaWYgSEFWRV9GT1JNX0ggJiYgSEFWRV9MSUJGT1JNCisjZGVmaW5lIFVTRV9MSUJGT1JNIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9MSUJGT1JNIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVFlQRV9BVFRSX1QKKyNpZiAhVVNFX1dJREVDX1NVUFBPUlQgJiYgIWRlZmluZWQoYXR0cl90KQorI2RlZmluZSBhdHRyX3QgY2h0eXBlCisjZW5kaWYKKyNlbmRpZgorCisjdW5kZWYgTkNVUlNFU19DSF9UCisjaWYgIVVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIE5DVVJTRVNfQ0hfVCBjaHR5cGUKKyNlbHNlCisjZGVmaW5lIE5DVVJTRVNfQ0hfVCBjY2hhcl90CisjZW5kaWYKKworI2lmbmRlZiBOQ1VSU0VTX09QQVFVRQorI2RlZmluZSBOQ1VSU0VTX09QQVFVRSAwCisjZW5kaWYKKworI2lmbmRlZiBDQ0hBUldfTUFYCisjZGVmaW5lIENDSEFSV19NQVggNQorI2VuZGlmCisKKyN1bmRlZiBDVFJMCisjZGVmaW5lIENUUkwoeCkJKCh4KSAmIDB4MWYpCisKKyNkZWZpbmUgUVVJVAkJQ1RSTCgnUScpCisjZGVmaW5lIEVTQ0FQRQkJQ1RSTCgnWycpCisKKyNpZm5kZWYgS0VZX01JTgorI2RlZmluZSBLRVlfTUlOIDI1NgkvKiBub3QgZGVmaW5lZCBpbiBTb2xhcmlzIDggKi8KKyNlbmRpZgorCisvKgorICogV29ya2Fyb3VuZCBmb3IgSFBVWAorICovCisjaWYgZGVmaW5lZChfX2hwdXgpICYmICFkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikKKyNkZWZpbmUgZ2V0YmVneCh3KSBfX2dldGJlZ3godykKKyNkZWZpbmUgZ2V0YmVneSh3KSBfX2dldGJlZ3kodykKKyNkZWZpbmUgZ2V0Y3VyeCh3KSBfX2dldGN1cngodykKKyNkZWZpbmUgZ2V0Y3VyeSh3KSBfX2dldGN1cnkodykKKyNkZWZpbmUgZ2V0bWF4eCh3KSBfX2dldG1heHgodykKKyNkZWZpbmUgZ2V0bWF4eSh3KSBfX2dldG1heHkodykKKyNkZWZpbmUgZ2V0cGFyeCh3KSBfX2dldHBhcngodykKKyNkZWZpbmUgZ2V0cGFyeSh3KSBfX2dldHBhcnkodykKKyNlbmRpZgorCisvKgorICogVGhlc2UgdXN1YWxseSBhcmUgaW1wbGVtZW50ZWQgYXMgbWFjcm9zLCBidXQgbWF5IGJlIGZ1bmN0aW9ucy4KKyAqLworI2lmICFkZWZpbmVkKGdldGN1cngpICYmICFIQVZFX0dFVENVUlgKKyNkZWZpbmUgZ2V0Y3VyeCh3aW4pICAgICAgICAgICAgKCh3aW4pPyh3aW4pLT5fY3VyeDpFUlIpCisjZGVmaW5lIGdldGN1cnkod2luKSAgICAgICAgICAgICgod2luKT8od2luKS0+X2N1cnk6RVJSKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChnZXRiZWd4KSAmJiAhSEFWRV9HRVRCRUdYCisjZGVmaW5lIGdldGJlZ3god2luKSAgICAgICAgICAgICgod2luKT8od2luKS0+X2JlZ3g6RVJSKQorI2RlZmluZSBnZXRiZWd5KHdpbikgICAgICAgICAgICAoKHdpbik/KHdpbiktPl9iZWd5OkVSUikKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoZ2V0bWF4eCkgJiYgIUhBVkVfR0VUTUFYWAorI2RlZmluZSBnZXRtYXh4KHdpbikgICAgICAgICAgICAoKHdpbik/KCh3aW4pLT5fbWF4eCArIDEpOkVSUikKKyNkZWZpbmUgZ2V0bWF4eSh3aW4pICAgICAgICAgICAgKCh3aW4pPygod2luKS0+X21heHkgKyAxKTpFUlIpCisjZW5kaWYKKworLyoKKyAqIFNvbGFyaXMgMTAgeHBnNDoKKyNkZWZpbmUJX19tX2dldHBhcngodykJCSgodyktPl9wYXJlbnQgPT0gKFdJTkRPVyAqKSAwID8gLTEgXAorCQkJCTogKHcpLT5fYmVneCAtICh3KS0+X3BhcmVudC0+X2JlZ3gpCisgKi8KKyNpZiAhZGVmaW5lZChnZXRwYXJ4KSAmJiAhSEFWRV9HRVRQQVJYCisjaWZkZWYgX19tX2dldHBhcngKKyNkZWZpbmUgZ2V0cGFyeCh3aW4pICAgICAgICAgICAgX19tX2dldHBhcngod2luKQorI2RlZmluZSBnZXRwYXJ5KHdpbikgICAgICAgICAgICBfX21fZ2V0cGFyeSh3aW4pCisjZWxzZQorI2RlZmluZSBnZXRwYXJ4KHdpbikgICAgICAgICAgICAoKHdpbik/KCh3aW4pLT5fcGFyeCArIDEpOkVSUikKKyNkZWZpbmUgZ2V0cGFyeSh3aW4pICAgICAgICAgICAgKCh3aW4pPygod2luKS0+X3BhcnkgKyAxKTpFUlIpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQobXZ3dmxpbmUpICYmICFIQVZFX01WV1ZMSU5FCisjZGVmaW5lIG12d3ZsaW5lKHcseSx4LGNoLG4pICAgIChtb3ZlKHkseCkgPT0gRVJSID8gRVJSIDogd3ZsaW5lKHcsY2gsbikpCisjZGVmaW5lIG12d2hsaW5lKHcseSx4LGNoLG4pICAgIChtb3ZlKHkseCkgPT0gRVJSID8gRVJSIDogd2hsaW5lKHcsY2gsbikpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKG12dmxpbmUpICYmICFIQVZFX01WVkxJTkUKKyNkZWZpbmUgbXZ2bGluZSh5LHgsY2gsbikgICAgICAgKG1vdmUoeSx4KSA9PSBFUlIgPyBFUlIgOiB2bGluZShjaCxuKSkKKyNkZWZpbmUgbXZobGluZSh5LHgsY2gsbikgICAgICAgKG1vdmUoeSx4KSA9PSBFUlIgPyBFUlIgOiBobGluZShjaCxuKSkKKyNlbmRpZgorCisvKgorICogVHJ5IHRvIGFjY29tbW9kYXRlIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG5vIHRlcm1pbmZvIHN1cHBvcnQuCisgKi8KKyNpZiBIQVZFX1RJR0VUTlVNCisjZGVmaW5lIFRJR0VUTlVNKHRpLHRjKSB0aWdldG51bSh0aSkKKyNlbHNlCisjZGVmaW5lIFRJR0VUTlVNKHRpLHRjKSB0Z2V0bnVtKHRjKQorI2VuZGlmCisKKyNpZiBIQVZFX1RJR0VUU1RSCisjZGVmaW5lIFRJR0VUU1RSKHRpLHRjKSB0aWdldHN0cih0aSkKKyNlbHNlCisjZGVmaW5lIFRJR0VUU1RSKHRpLHRjKSB0Z2V0c3RyKHRjLCZhcmVhX3BvaW50ZXIpCisjZW5kaWYKKworLyogbmN1cnNlcyBpbXBsZW1lbnRzIHRwYXJtKCkgd2l0aCB2YXJhcmdzLCBYL09wZW4gd2l0aCBhIGZpeGVkLXBhcmFtZXRlciBsaXN0CisgKiAod2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggbGVnYWN5IHVzYWdlLCBkb2Vzbid0IHNvbHZlIGFueSBwcm9ibGVtcykuCisgKi8KKyNkZWZpbmUgdHBhcm0zKGEsYixjKSB0cGFybShhLGIsYywwLDAsMCwwLDAsMCwwKQorI2RlZmluZSB0cGFybTIoYSxiKSAgIHRwYXJtKGEsYiwwLDAsMCwwLDAsMCwwLDApCisKKyNkZWZpbmUgVUNoYXIoYykgICAgKCh1bnNpZ25lZCBjaGFyKShjKSkKKworI2RlZmluZSBTSVpFT0YodGFibGUpCShzaXplb2YodGFibGUpL3NpemVvZih0YWJsZVswXSkpCisKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgSEFWRV9OQ19BTExPQ19ICisjaW5jbHVkZSA8bmNfYWxsb2MuaD4KKyNpZiBIQVZFX05DX0ZSRUVBTEwgJiYgZGVmaW5lZChVU0VfVElORk8pCisjdW5kZWYgRXhpdFByb2dyYW0KKyNkZWZpbmUgRXhpdFByb2dyYW0oY29kZSkgX25jX2ZyZWVfdGluZm8oY29kZSkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgdHlwZU1hbGxvYyh0eXBlLG4pICh0eXBlICopIG1hbGxvYygobikgKiBzaXplb2YodHlwZSkpCisjZGVmaW5lIHR5cGVDYWxsb2ModHlwZSxlbHRzKSAodHlwZSAqKSBjYWxsb2MoKGVsdHMpLCBzaXplb2YodHlwZSkpCisjZGVmaW5lIHR5cGVSZWFsbG9jKHR5cGUsbixwKSAodHlwZSAqKSByZWFsbG9jKHAsIChuKSAqIHNpemVvZih0eXBlKSkKKyNlbmRpZgorCisjaWZuZGVmIEV4aXRQcm9ncmFtCisjZGVmaW5lIEV4aXRQcm9ncmFtKGNvZGUpIGV4aXQoY29kZSkKKyNlbmRpZgorCisjaWZuZGVmIEVYSVRfU1VDQ0VTUworI2RlZmluZSBFWElUX1NVQ0NFU1MgMAorI2VuZGlmCisjaWZuZGVmIEVYSVRfRkFJTFVSRQorI2RlZmluZSBFWElUX0ZBSUxVUkUgMQorI2VuZGlmCisKKy8qIFVzZSB0aGlzIHRvIHF1aWV0IGdjYydzIC1Xd3JpdGUtc3RyaW5ncyB3YXJuaW5ncywgYnV0IGFjY29tbW9kYXRlIFNWcjQKKyAqIGN1cnNlcyB3aGljaCBkb2Vzbid0IGhhdmUgY29uc3QgcGFyYW1ldGVycyBkZWNsYXJlZCAoc28gZmFyKSBpbiB0aGUgcGxhY2VzCisgKiB0aGF0IFhTSSBzaG93cy4KKyAqLworI2lmbmRlZiBOQ1VSU0VTX0NPTlNUCisjZGVmaW5lIE5DVVJTRVNfQ09OU1QgLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qIG91dC1vZi1iYW5kIHZhbHVlcyBmb3IgcmVwcmVzZW50aW5nIGFic2VudCBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgQUJTRU5UX0JPT0xFQU4JCSgoc2lnbmVkIGNoYXIpLTEpCS8qIDI1NSAqLworI2RlZmluZSBBQlNFTlRfTlVNRVJJQwkJKC0xKQorI2RlZmluZSBBQlNFTlRfU1RSSU5HCQkoY2hhciAqKTAKKworLyogb3V0LW9mLWJhbmQgdmFsdWVzIGZvciByZXByZXNlbnRpbmcgY2FuY2VscyAqLworI2RlZmluZSBDQU5DRUxMRURfQk9PTEVBTgkoKHNpZ25lZCBjaGFyKS0yKQkvKiAyNTQgKi8KKyNkZWZpbmUgQ0FOQ0VMTEVEX05VTUVSSUMJKC0yKQorI2RlZmluZSBDQU5DRUxMRURfU1RSSU5HCShjaGFyICopKC0xKQorCisjZGVmaW5lIFZBTElEX0JPT0xFQU4ocykgKCh1bnNpZ25lZCBjaGFyKShzKSA8PSAxKSAvKiByZWplY3QgIi0xIiAqLworI2RlZmluZSBWQUxJRF9OVU1FUklDKHMpICgocykgPj0gMCkKKyNkZWZpbmUgVkFMSURfU1RSSU5HKHMpICAoKHMpICE9IENBTkNFTExFRF9TVFJJTkcgJiYgKHMpICE9IEFCU0VOVF9TVFJJTkcpCisKKyNkZWZpbmUgVlRfQUNTQyAiYGBhYWZmZ2dpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiIKKworI2RlZmluZSBDQVRDSEFMTChoYW5kbGVyKSB7IFwKKwkJaW50IG5zaWc7IFwKKwkJZm9yIChuc2lnID0gU0lHSFVQOyBuc2lnIDwgU0lHVEVSTTsgKytuc2lnKSBcCisJCSAgICBpZiAobnNpZyAhPSBTSUdLSUxMKSBcCisJCQlzaWduYWwobnNpZywgaGFuZGxlcik7IFwKKwkgICAgfQorCisvKgorICogV29ya2Fyb3VuZCBmb3IgY2xlYW4oZXIpIGNvbXBpbGUgd2l0aCBTb2xhcmlzJ3MgbGVnYWN5IGN1cnNlcy4KKyAqIFRoZSBzYW1lIHdvdWxkIGJlIG5lZWRlZCBmb3IgSFBVWCAxMC4yMAorICovCisjaWZuZGVmIFRQVVRTX0FSRworI2lmIGRlZmluZWQoc3VuKSAmJiAhZGVmaW5lZChfWE9QRU5fQ1VSU0VTKSAmJiAhZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpCisjZGVmaW5lIFRQVVRTX0FSRyBjaGFyCitleHRlcm4gY2hhciAqdGdvdG8oY2hhciAqLCBpbnQsIGludCk7CS8qIGF2YWlsYWJsZSwgYnV0IG5vdCBwcm90b3R5cGVkICovCisjZWxzZQorI2RlZmluZSBUUFVUU19BUkcgaW50CisjZW5kaWYKKyNlbmRpZgorCisvKgorICogV29ya2Fyb3VuZHMgZm9yIFNvbGFyaXMncyBYL09wZW4gY3Vyc2VzCisgKi8KKyNpZiBkZWZpbmVkKHN1bikgJiYgZGVmaW5lZChfWE9QRU5fQ1VSU0VTKSAmJiAhZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpCisjaWYgIWRlZmluZWQoS0VZX01JTikgJiYgZGVmaW5lZChfX0tFWV9NSU4pCisjZGVmaW5lIEtFWV9NSU4gX19LRVlfTUlOCisjZW5kaWYKKyNpZiAhZGVmaW5lZChLRVlfTUFYKSAmJiBkZWZpbmVkKF9fS0VZX01JTikKKyNkZWZpbmUgS0VZX01BWCBfX0tFWV9NQVgKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBuY3Vyc2VzIHVzZXMgY29uc3QgaW4gc29tZSBwbGFjZXMgd2hlcmUgWC9PcGVuIGRvZXMgKG9yIGRpZCkgbm90IGFsbG93LgorICovCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjZGVmaW5lIENPTlNUX01FTlVTIGNvbnN0CisjZWxzZQorI2RlZmluZSBDT05TVF9NRU5VUyAvKiBub3RoaW5nICovCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1VTRV9XSU5ET1cKKyNpZiAhZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpIHx8IChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggPCAyMDA3MDkxNSkgfHwgIU5DVVJTRVNfRVhUX0ZVTkNTCisjZGVmaW5lIEhBVkVfVVNFX1dJTkRPVyAwCisjZWxzZQorI2RlZmluZSBIQVZFX1VTRV9XSU5ET1cgMQorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFNpbXBsaWZ5IHNldHRpbmcgdXAgZGVtbyBvZiB0aHJlYWRpbmcgd2l0aCB0aGVzZSBtYWNyb3MuCisgKi8KKworI2lmICFIQVZFX1VTRV9XSU5ET1cKK3R5cGVkZWYgaW50ICgqTkNVUlNFU19XSU5ET1dfQ0IpKFdJTkRPVyAqLCB2b2lkICopOwordHlwZWRlZiBpbnQgKCpOQ1VSU0VTX1NDUkVFTl9DQikoU0NSRUVOICosIHZvaWQgKik7CisjZW5kaWYKKworI2lmIEhBVkVfVVNFX1dJTkRPVworI2RlZmluZSBVU0lOR19XSU5ET1codyxmdW5jKSB1c2Vfd2luZG93KHcsIChOQ1VSU0VTX1dJTkRPV19DQikgZnVuYywgdykKKyNkZWZpbmUgVVNJTkdfV0lORE9XMih3LGZ1bmMsZGF0YSkgdXNlX3dpbmRvdyh3LCAoTkNVUlNFU19XSU5ET1dfQ0IpIGZ1bmMsIGRhdGEpCisjZGVmaW5lIFdBTlRfVVNFX1dJTkRPVygpIGV4dGVybiB2b2lkIF9uY193YW50X3VzZV93aW5kb3codm9pZCkKKyNlbHNlCisjZGVmaW5lIFVTSU5HX1dJTkRPVyh3LGZ1bmMpIGZ1bmModykKKyNkZWZpbmUgVVNJTkdfV0lORE9XMih3LGZ1bmMsZGF0YSkgZnVuYyh3LGRhdGEpCisjZGVmaW5lIFdBTlRfVVNFX1dJTkRPVygpIGV4dGVybiB2b2lkIF9uY193YW50X3VzZV93aW5kb3codm9pZCkKKyNlbmRpZgorCisjaWYgSEFWRV9VU0VfV0lORE9XCisjZGVmaW5lIFVTSU5HX1NDUkVFTihzLGZ1bmMsZGF0YSkgdXNlX3NjcmVlbihzLCAoTkNVUlNFU19TQ1JFRU5fQ0IpIGZ1bmMsIGRhdGEpCisjZGVmaW5lIFdBTlRfVVNFX1NDUkVFTigpIGV4dGVybiB2b2lkIF9uY193YW50X3VzZV9zY3JlZW4odm9pZCkKKyNlbHNlCisjZGVmaW5lIFVTSU5HX1NDUkVFTihzLGZ1bmMsZGF0YSkgZnVuYyhzLGRhdGEpCisjZGVmaW5lIFdBTlRfVVNFX1NDUkVFTigpIGV4dGVybiB2b2lkIF9uY193YW50X3VzZV9zY3JlZW4odm9pZCkKKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKKyNkZWZpbmUgVHJhY2UocCkgX3RyYWNlZiBwCisjZGVmaW5lIFVTRV9UUkFDRSAxCisjZWxzZQorI2RlZmluZSBUcmFjZShwKQkJLyogbm90aGluZyAqLworI2RlZmluZSBVU0VfVFJBQ0UgMAorI2VuZGlmCisKKyNkZWZpbmUgaW5pdF9tYihzdGF0ZSkJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSkKKworI2VuZGlmIC8qIF9fVEVTVF9QUklWX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdF9hcnJheXMuYyBiL3Rlc3QvdGVzdF9hcnJheXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjZhMTBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC90ZXN0X2FycmF5cy5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiB0ZXN0X2FycmF5cy5jLHYgMS4zIDIwMDgvMDIvMDkgMTg6MDk6NDMgdG9tIEV4cCAkCisgKgorICogQXV0aG9yOiBUaG9tYXMgRSBEaWNrZXkKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgcHVibGljIGFycmF5cyBmcm9tIHRoZSB0ZXJtaW5mbyBsaWJyYXJ5LgorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgYm9vbG5hbWVzW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgYm9vbGNvZGVzW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgYm9vbGZuYW1lc1tdOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIG51bW5hbWVzW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgbnVtY29kZXNbXTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBudW1mbmFtZXNbXTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBzdHJuYW1lc1tdOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIHN0cmNvZGVzW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgc3RyZm5hbWVzW107CisKKyAqLworCisjZGVmaW5lIFVTRV9USU5GTworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pIHx8ICFkZWZpbmVkKF9YT1BFTl9DVVJTRVMpCisKKyNkZWZpbmUgRFVNUChuYW1lKSBkdW1wX2FycmF5KCNuYW1lLCBuYW1lKQorCitzdGF0aWMgdm9pZAorZHVtcF9hcnJheShjb25zdCBjaGFyICpuYW1lLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmNvbnN0ICpsaXN0KQoreworICAgIGludCBuOworCisgICAgcHJpbnRmKCIlczpcbiIsIG5hbWUpOworICAgIGZvciAobiA9IDA7IGxpc3Rbbl0gIT0gMDsgKytuKSB7CisJcHJpbnRmKCIlNWQ6JXNcbiIsIG4sIGxpc3Rbbl0pOworICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgRFVNUChib29sbmFtZXMpOworICAgIERVTVAoYm9vbGNvZGVzKTsKKyAgICBEVU1QKGJvb2xmbmFtZXMpOworCisgICAgRFVNUChudW1uYW1lcyk7CisgICAgRFVNUChudW1jb2Rlcyk7CisgICAgRFVNUChudW1mbmFtZXMpOworCisgICAgRFVNUChzdHJuYW1lcyk7CisgICAgRFVNUChzdHJjb2Rlcyk7CisgICAgRFVNUChzdHJmbmFtZXMpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworI2Vsc2UKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSB0ZXJtaW5mbyBhcnJheXNcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdF9nZXRfd3N0ci5jIGIvdGVzdC90ZXN0X2dldF93c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlMzczMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdGVzdF9nZXRfd3N0ci5jCkBAIC0wLDAgKzEsMzYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogdGVzdF9nZXRfd3N0ci5jLHYgMS41IDIwMDcvMDgvMTEgMTc6MDE6NDMgdG9tIEV4cCAkCisgKgorICogQXV0aG9yOiBUaG9tYXMgRSBEaWNrZXkKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgZ2V0X3dzdHIgZnVuY3Rpb25zIGZyb20gdGhlIGN1cnNlcyBsaWJyYXJ5LgorCisgICAgICAgaW50IGdldF93c3RyKHdpbnRfdCAqd3N0cik7CisgICAgICAgaW50IGdldG5fd3N0cih3aW50X3QgKndzdHIsIGludCBuKTsKKyAgICAgICBpbnQgd2dldF93c3RyKFdJTkRPVyAqd2luLCB3aW50X3QgKndzdHIpOworICAgICAgIGludCB3Z2V0bl93c3RyKFdJTkRPVyAqd2luLCB3aW50X3QgKndzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZnZXRfd3N0cihpbnQgeSwgaW50IHgsIHdpbnRfdCAqd3N0cik7CisgICAgICAgaW50IG12Z2V0bl93c3RyKGludCB5LCBpbnQgeCwgd2ludF90ICp3c3RyLCBpbnQgbik7CisgICAgICAgaW50IG12d2dldF93c3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIHdpbnRfdCAqd3N0cik7CisgICAgICAgaW50IG12d2dldG5fd3N0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCB3aW50X3QgKndzdHIsIGludCBuKTsKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCisjZGVmaW5lIEJBU0VfWSA2CisjZGVmaW5lIE1BWF9DT0xTIDEwMjQKKwordHlwZWRlZiBlbnVtIHsKKyAgICBlR2V0U3RyID0gMCwKKyAgICBlR2V0TlN0ciwKKyAgICBlTXZHZXRTdHIsCisgICAgZU12R2V0TlN0ciwKKyAgICBlTWF4Rmxhdm9yCit9IEZsYXZvcnM7CisKK3N0YXRpYyBib29sCitRdWl0KGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID09IEVSUiB8fCBjaCA9PSAncScgfHwgY2ggPT0gUVVJVCB8fCBjaCA9PSBFU0NBUEUpOworfQorCitzdGF0aWMgaW50CitSZW1haW5kZXIoV0lORE9XICp0eHR3aW4pCit7CisgICAgaW50IHJlc3VsdCA9IGdldG1heHgodHh0d2luKSAtIGdldGN1cngodHh0d2luKTsKKyAgICByZXR1cm4gKHJlc3VsdCA+IDApID8gcmVzdWx0IDogMDsKK30KKworLyoKKyAqIFNob3cgYSBoaWdobGlnaHRlZCBsaW5lIGluIHRoZSBwbGFjZSB3aGVyZSBpbnB1dCB3aWxsIGhhcHBlbi4KKyAqLworc3RhdGljIHZvaWQKK1Nob3dQcm9tcHQoV0lORE9XICp0eHR3aW4sIGludCBsaW1pdCkKK3sKKyAgICB3Y2hnYXQodHh0d2luLCBsaW1pdCwgQV9SRVZFUlNFLCAwLCBOVUxMKTsKKyAgICB3bm91dHJlZnJlc2godHh0d2luKTsKK30KKworc3RhdGljIHZvaWQKK01vdmVQcm9tcHQoV0lORE9XICp0eHR3aW4sIGludCBsaW1pdCwgaW50IHksIGludCB4KQoreworICAgIHdjaGdhdCh0eHR3aW4sIFJlbWFpbmRlcih0eHR3aW4pLCBBX05PUk1BTCwgMCwgTlVMTCk7CisgICAgd21vdmUodHh0d2luLCB5LCB4KTsKKyAgICBTaG93UHJvbXB0KHR4dHdpbiwgbGltaXQpOworfQorCitzdGF0aWMgaW50CitTaG93Rmxhdm9yKFdJTkRPVyAqc3Ryd2luLCBXSU5ET1cgKnR4dHdpbiwgaW50IGZsYXZvciwgaW50IGxpbWl0KQoreworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSAiPyI7CisgICAgYm9vbCBsaW1pdGVkID0gRkFMU0U7CisgICAgYm9vbCB3aW5zID0gKHR4dHdpbiAhPSBzdGRzY3IpOworICAgIGludCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGZsYXZvcikgeworICAgIGNhc2UgZUdldFN0cjoKKwluYW1lID0gd2lucyA/ICJ3Z2V0X3dzdHIiIDogImdldF93c3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVHZXROU3RyOgorCWxpbWl0ZWQgPSBUUlVFOworCW5hbWUgPSB3aW5zID8gIndnZXRuX3dzdHIiIDogImdldG5fd3N0ciI7CisJYnJlYWs7CisgICAgY2FzZSBlTXZHZXRTdHI6CisJbmFtZSA9IHdpbnMgPyAibXZ3Z2V0X3dzdHIiIDogIm12Z2V0X3dzdHIiOworCWJyZWFrOworICAgIGNhc2UgZU12R2V0TlN0cjoKKwlsaW1pdGVkID0gVFJVRTsKKwluYW1lID0gd2lucyA/ICJtdndnZXRuX3dzdHIiIDogIm12Z2V0bl93c3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVNYXhGbGF2b3I6CisJYnJlYWs7CisgICAgfQorCisgICAgd21vdmUoc3Ryd2luLCAwLCAwKTsKKyAgICB3ZXJhc2Uoc3Ryd2luKTsKKworICAgIGlmIChsaW1pdGVkKSB7CisJd3ByaW50dyhzdHJ3aW4sICIlcyglZCk6IiwgbmFtZSwgbGltaXQpOworICAgIH0gZWxzZSB7CisJd3ByaW50dyhzdHJ3aW4sICIlczoiLCBuYW1lKTsKKyAgICB9CisgICAgcmVzdWx0ID0gbGltaXRlZCA/IGxpbWl0IDogUmVtYWluZGVyKHR4dHdpbik7CisgICAgU2hvd1Byb21wdCh0eHR3aW4sIHJlc3VsdCk7CisKKyAgICB3bm91dHJlZnJlc2goc3Ryd2luKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50Cit0ZXN0X2dldF93c3RyKGludCBsZXZlbCwgY2hhciAqKmFyZ3YsIFdJTkRPVyAqc3Ryd2luKQoreworICAgIFdJTkRPVyAqdHh0Ym94ID0gMDsKKyAgICBXSU5ET1cgKnR4dHdpbiA9IDA7CisgICAgRklMRSAqZnA7CisgICAgaW50IGNoOworICAgIGludCByYzsKKyAgICBpbnQgdHh0X3ggPSAwLCB0eHRfeSA9IDA7CisgICAgaW50IGJhc2VfeTsKKyAgICBpbnQgZmxhdm9yID0gMDsKKyAgICBpbnQgbGltaXQgPSBnZXRtYXh4KHN0cndpbikgLSA1OworICAgIGludCBhY3R1YWw7CisgICAgd2ludF90IGJ1ZmZlcltNQVhfQ09MU107CisKKyAgICBpZiAoYXJndltsZXZlbF0gPT0gMCkgeworCWJlZXAoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGxldmVsID4gMSkgeworCXR4dGJveCA9IG5ld3dpbihMSU5FUyAtIEJBU0VfWSwgQ09MUyAtIGxldmVsLCBCQVNFX1ksIGxldmVsKTsKKwlib3godHh0Ym94LCAwLCAwKTsKKwl3bm91dHJlZnJlc2godHh0Ym94KTsKKworCXR4dHdpbiA9IGRlcndpbih0eHRib3gsCisJCQlnZXRtYXh5KHR4dGJveCkgLSAyLAorCQkJZ2V0bWF4eCh0eHRib3gpIC0gMiwKKwkJCTEsIDEpOworCWJhc2VfeSA9IDA7CisgICAgfSBlbHNlIHsKKwl0eHR3aW4gPSBzdGRzY3I7CisJYmFzZV95ID0gQkFTRV9ZOworICAgIH0KKworICAgIGtleXBhZCh0eHR3aW4sIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICB0eHRfeSA9IGJhc2VfeTsKKyAgICB0eHRfeCA9IDA7CisgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisgICAgaWYgKChmcCA9IGZvcGVuKGFyZ3ZbbGV2ZWxdLCAiciIpKSAhPSAwKSB7CisJd2hpbGUgKChjaCA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7CisJICAgIGlmICh3YWRkY2godHh0d2luLCBVQ2hhcihjaCkpICE9IE9LKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHR4dHdpbiwgIkNhbm5vdCBvcGVuOlxuJXMiLCBhcmd2WzFdKTsKKyAgICB9CisKKyAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisgICAgYWN0dWFsID0gU2hvd0ZsYXZvcihzdHJ3aW4sIHR4dHdpbiwgZmxhdm9yLCBsaW1pdCk7CisgICAgd2hpbGUgKCFRdWl0KGNoID0gbXZ3Z2V0Y2godHh0d2luLCB0eHRfeSwgdHh0X3gpKSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlIEtFWV9ET1dOOgorCWNhc2UgJ2onOgorCSAgICBpZiAodHh0X3kgPCBnZXRtYXh5KHR4dHdpbikgLSAxKSB7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsICsrdHh0X3ksIHR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1VQOgorCWNhc2UgJ2snOgorCSAgICBpZiAodHh0X3kgPiBiYXNlX3kpIHsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgLS10eHRfeSwgdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfTEVGVDoKKwljYXNlICdoJzoKKwkgICAgaWYgKHR4dF94ID4gMCkgeworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCB0eHRfeSwgLS10eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwljYXNlICdsJzoKKwkgICAgaWYgKHR4dF94IDwgZ2V0bWF4eCh0eHR3aW4pIC0gMSkgeworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCB0eHRfeSwgKyt0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ3cnOgorCSAgICB0ZXN0X2dldF93c3RyKGxldmVsICsgMSwgYXJndiwgc3Ryd2luKTsKKwkgICAgaWYgKHR4dGJveCAhPSAwKSB7CisJCXRvdWNod2luKHR4dGJveCk7CisJCXdub3V0cmVmcmVzaCh0eHRib3gpOworCSAgICB9IGVsc2UgeworCQl0b3VjaHdpbih0eHR3aW4pOworCQl3bm91dHJlZnJlc2godHh0d2luKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJy0nOgorCSAgICBpZiAobGltaXQgPiAwKSB7CisJCWFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgLS1saW1pdCk7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJysnOgorCSAgICBhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCBmbGF2b3IsICsrbGltaXQpOworCSAgICBNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCB0eHRfeSwgdHh0X3gpOworCSAgICBicmVhazsKKworCWNhc2UgJzwnOgorCSAgICBpZiAoZmxhdm9yID4gMCkgeworCQlhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCAtLWZsYXZvciwgbGltaXQpOworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCB0eHRfeSwgdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICc+JzoKKwkgICAgaWYgKGZsYXZvciArIDEgPCBlTWF4Rmxhdm9yKSB7CisJCWFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sICsrZmxhdm9yLCBsaW1pdCk7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJzonOgorCSAgICBhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCBmbGF2b3IsIGxpbWl0KTsKKwkgICAgKmJ1ZmZlciA9ICdcMCc7CisJICAgIHJjID0gRVJSOworCSAgICBlY2hvKCk7CisJICAgIHdhdHRyc2V0KHR4dHdpbiwgQV9SRVZFUlNFKTsKKwkgICAgc3dpdGNoIChmbGF2b3IpIHsKKwkgICAgY2FzZSBlR2V0U3RyOgorCQlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCQkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCQkgICAgcmMgPSB3Z2V0X3dzdHIodHh0d2luLCBidWZmZXIpOworCQl9IGVsc2UgeworCQkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCQkgICAgcmMgPSBnZXRfd3N0cihidWZmZXIpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIGVHZXROU3RyOgorCQlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCQkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCQkgICAgcmMgPSB3Z2V0bl93c3RyKHR4dHdpbiwgYnVmZmVyLCBsaW1pdCk7CisJCX0gZWxzZSB7CisJCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IGdldG5fd3N0cihidWZmZXIsIGxpbWl0KTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBlTXZHZXRTdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICByYyA9IG12d2dldF93c3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCBidWZmZXIpOworCQl9IGVsc2UgeworCQkgICAgcmMgPSBtdmdldF93c3RyKHR4dF95LCB0eHRfeCwgYnVmZmVyKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBlTXZHZXROU3RyOgorCQlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCQkgICAgcmMgPSBtdndnZXRuX3dzdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIGJ1ZmZlciwgbGltaXQpOworCQl9IGVsc2UgeworCQkgICAgcmMgPSBtdmdldG5fd3N0cih0eHRfeSwgdHh0X3gsIGJ1ZmZlciwgbGltaXQpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIGVNYXhGbGF2b3I6CisJCWJyZWFrOworCSAgICB9CisJICAgIG5vZWNobygpOworCSAgICB3YXR0cnNldCh0eHR3aW4sIEFfTk9STUFMKTsKKwkgICAgd3ByaW50dyhzdHJ3aW4sICIlZCIsIHJjKTsKKwkgICAgd2FkZHdzdHIoc3Ryd2luLCAod2NoYXJfdCAqKSBidWZmZXIpOworCSAgICB3bm91dHJlZnJlc2goc3Ryd2luKTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYmVlcCgpOworCSAgICBicmVhazsKKwl9CisJZG91cGRhdGUoKTsKKyAgICB9CisgICAgaWYgKGxldmVsID4gMSkgeworCWRlbHdpbih0eHR3aW4pOworCWRlbHdpbih0eHRib3gpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgV0lORE9XICpjaHJib3g7CisgICAgV0lORE9XICpzdHJ3aW47CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpZiAoYXJnYyA8IDIpIHsKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBmaWxlXG4iLCBhcmd2WzBdKTsKKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIGluaXRzY3IoKTsKKworICAgIGNocmJveCA9IGRlcndpbihzdGRzY3IsIEJBU0VfWSwgQ09MUywgMCwgMCk7CisgICAgYm94KGNocmJveCwgMCwgMCk7CisgICAgd25vdXRyZWZyZXNoKGNocmJveCk7CisKKyAgICBzdHJ3aW4gPSBkZXJ3aW4oY2hyYm94LCA0LCBDT0xTIC0gMiwgMSwgMSk7CisKKyAgICB0ZXN0X2dldF93c3RyKDEsIGFyZ3YsIHN0cndpbik7CisKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSB3aWRlLW5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0X2dldHN0ci5jIGIvdGVzdC90ZXN0X2dldHN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZGJlY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3Rlc3RfZ2V0c3RyLmMKQEAgLTAsMCArMSwzNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiB0ZXN0X2dldHN0ci5jLHYgMS44IDIwMDgvMDIvMDkgMTg6MDk6MzUgdG9tIEV4cCAkCisgKgorICogQXV0aG9yOiBUaG9tYXMgRSBEaWNrZXkKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgZ2V0c3RyIGZ1bmN0aW9ucyBmcm9tIHRoZSBjdXJzZXMgbGlicmFyeS4KKworICAgICAgIGludCBnZXRzdHIoY2hhciAqc3RyKTsKKyAgICAgICBpbnQgZ2V0bnN0cihjaGFyICpzdHIsIGludCBuKTsKKyAgICAgICBpbnQgd2dldHN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyKTsKKyAgICAgICBpbnQgd2dldG5zdHIoV0lORE9XICp3aW4sIGNoYXIgKnN0ciwgaW50IG4pOworICAgICAgIGludCBtdmdldHN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0cik7CisgICAgICAgaW50IG12d2dldHN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpzdHIpOworICAgICAgIGludCBtdmdldG5zdHIoaW50IHksIGludCB4LCBjaGFyICpzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZ3Z2V0bnN0cihXSU5ET1cgKiwgaW50IHksIGludCB4LCBjaGFyICpzdHIsIGludCBuKTsKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX0NIR0FUCisvKiBTb2xhcmlzIFNWcjQgY3Vyc2VzIGxhY2tzIHdjaGdhdCwgbXZnZXRuc3RyLCBtdndnZXRuc3RyICovCisKKyNkZWZpbmUgQkFTRV9ZIDYKKyNkZWZpbmUgTUFYX0NPTFMgMTAyNAorCit0eXBlZGVmIGVudW0geworICAgIGVHZXRTdHIgPSAwLAorICAgIGVHZXROU3RyLAorICAgIGVNdkdldFN0ciwKKyAgICBlTXZHZXROU3RyLAorICAgIGVNYXhGbGF2b3IKK30gRmxhdm9yczsKKworc3RhdGljIGJvb2wKK1F1aXQoaW50IGNoKQoreworICAgIHJldHVybiAoY2ggPT0gRVJSIHx8IGNoID09ICdxJyB8fCBjaCA9PSBRVUlUIHx8IGNoID09IEVTQ0FQRSk7Cit9CisKK3N0YXRpYyBpbnQKK1JlbWFpbmRlcihXSU5ET1cgKnR4dHdpbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gZ2V0bWF4eCh0eHR3aW4pIC0gZ2V0Y3VyeCh0eHR3aW4pOworICAgIHJldHVybiAocmVzdWx0ID4gMCkgPyByZXN1bHQgOiAwOworfQorCisvKgorICogU2hvdyBhIGhpZ2hsaWdodGVkIGxpbmUgaW4gdGhlIHBsYWNlIHdoZXJlIGlucHV0IHdpbGwgaGFwcGVuLgorICovCitzdGF0aWMgdm9pZAorU2hvd1Byb21wdChXSU5ET1cgKnR4dHdpbiwgaW50IGxpbWl0KQoreworICAgIHdjaGdhdCh0eHR3aW4sIGxpbWl0LCBBX1JFVkVSU0UsIDAsIE5VTEwpOworICAgIHdub3V0cmVmcmVzaCh0eHR3aW4pOworfQorCitzdGF0aWMgdm9pZAorTW92ZVByb21wdChXSU5ET1cgKnR4dHdpbiwgaW50IGxpbWl0LCBpbnQgeSwgaW50IHgpCit7CisgICAgd2NoZ2F0KHR4dHdpbiwgUmVtYWluZGVyKHR4dHdpbiksIEFfTk9STUFMLCAwLCBOVUxMKTsKKyAgICB3bW92ZSh0eHR3aW4sIHksIHgpOworICAgIFNob3dQcm9tcHQodHh0d2luLCBsaW1pdCk7Cit9CisKK3N0YXRpYyBpbnQKK1Nob3dGbGF2b3IoV0lORE9XICpzdHJ3aW4sIFdJTkRPVyAqdHh0d2luLCBpbnQgZmxhdm9yLCBpbnQgbGltaXQpCit7CisgICAgY29uc3QgY2hhciAqbmFtZSA9ICI/IjsKKyAgICBib29sIGxpbWl0ZWQgPSBGQUxTRTsKKyAgICBib29sIHdpbnMgPSAodHh0d2luICE9IHN0ZHNjcik7CisgICAgaW50IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZmxhdm9yKSB7CisgICAgY2FzZSBlR2V0U3RyOgorCW5hbWUgPSB3aW5zID8gIndnZXRzdHIiIDogImdldHN0ciI7CisJYnJlYWs7CisgICAgY2FzZSBlR2V0TlN0cjoKKwlsaW1pdGVkID0gVFJVRTsKKwluYW1lID0gd2lucyA/ICJ3Z2V0bnN0ciIgOiAiZ2V0bnN0ciI7CisJYnJlYWs7CisgICAgY2FzZSBlTXZHZXRTdHI6CisJbmFtZSA9IHdpbnMgPyAibXZ3Z2V0c3RyIiA6ICJtdmdldHN0ciI7CisJYnJlYWs7CisgICAgY2FzZSBlTXZHZXROU3RyOgorCWxpbWl0ZWQgPSBUUlVFOworCW5hbWUgPSB3aW5zID8gIm12d2dldG5zdHIiIDogIm12Z2V0bnN0ciI7CisJYnJlYWs7CisgICAgY2FzZSBlTWF4Rmxhdm9yOgorCWJyZWFrOworICAgIH0KKworICAgIHdtb3ZlKHN0cndpbiwgMCwgMCk7CisgICAgd2VyYXNlKHN0cndpbik7CisKKyAgICBpZiAobGltaXRlZCkgeworCXdwcmludHcoc3Ryd2luLCAiJXMoJWQpOiIsIG5hbWUsIGxpbWl0KTsKKyAgICB9IGVsc2UgeworCXdwcmludHcoc3Ryd2luLCAiJXM6IiwgbmFtZSk7CisgICAgfQorICAgIHJlc3VsdCA9IGxpbWl0ZWQgPyBsaW1pdCA6IFJlbWFpbmRlcih0eHR3aW4pOworICAgIFNob3dQcm9tcHQodHh0d2luLCByZXN1bHQpOworCisgICAgd25vdXRyZWZyZXNoKHN0cndpbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAordGVzdF9nZXRzdHIoaW50IGxldmVsLCBjaGFyICoqYXJndiwgV0lORE9XICpzdHJ3aW4pCit7CisgICAgV0lORE9XICp0eHRib3ggPSAwOworICAgIFdJTkRPVyAqdHh0d2luID0gMDsKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgY2g7CisgICAgaW50IHJjOworICAgIGludCB0eHRfeCA9IDAsIHR4dF95ID0gMDsKKyAgICBpbnQgYmFzZV95OworICAgIGludCBmbGF2b3IgPSAwOworICAgIGludCBsaW1pdCA9IGdldG1heHgoc3Ryd2luKSAtIDU7CisgICAgaW50IGFjdHVhbDsKKworICAgIGNoYXIgYnVmZmVyW01BWF9DT0xTXTsKKworICAgIGlmIChhcmd2W2xldmVsXSA9PSAwKSB7CisJYmVlcCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJdHh0Ym94ID0gbmV3d2luKExJTkVTIC0gQkFTRV9ZLCBDT0xTIC0gbGV2ZWwsIEJBU0VfWSwgbGV2ZWwpOworCWJveCh0eHRib3gsIDAsIDApOworCXdub3V0cmVmcmVzaCh0eHRib3gpOworCisJdHh0d2luID0gZGVyd2luKHR4dGJveCwKKwkJCWdldG1heHkodHh0Ym94KSAtIDIsCisJCQlnZXRtYXh4KHR4dGJveCkgLSAyLAorCQkJMSwgMSk7CisJYmFzZV95ID0gMDsKKyAgICB9IGVsc2UgeworCXR4dHdpbiA9IHN0ZHNjcjsKKwliYXNlX3kgPSBCQVNFX1k7CisgICAgfQorCisgICAga2V5cGFkKHR4dHdpbiwgVFJVRSk7CS8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHR4dF95ID0gYmFzZV95OworICAgIHR4dF94ID0gMDsKKyAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisKKyAgICBpZiAoKGZwID0gZm9wZW4oYXJndltsZXZlbF0sICJyIikpICE9IDApIHsKKwl3aGlsZSAoKGNoID0gZmdldGMoZnApKSAhPSBFT0YpIHsKKwkgICAgaWYgKHdhZGRjaCh0eHR3aW4sIFVDaGFyKGNoKSkgIT0gT0spIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZmNsb3NlKGZwKTsKKyAgICB9IGVsc2UgeworCXdwcmludHcodHh0d2luLCAiQ2Fubm90IG9wZW46XG4lcyIsIGFyZ3ZbMV0pOworICAgIH0KKworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKyAgICBhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCBmbGF2b3IsIGxpbWl0KTsKKyAgICB3aGlsZSAoIVF1aXQoY2ggPSBtdndnZXRjaCh0eHR3aW4sIHR4dF95LCB0eHRfeCkpKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgS0VZX0RPV046CisJY2FzZSAnaic6CisJICAgIGlmICh0eHRfeSA8IGdldG1heHkodHh0d2luKSAtIDEpIHsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgKyt0eHRfeSwgdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJY2FzZSAnayc6CisJICAgIGlmICh0eHRfeSA+IGJhc2VfeSkgeworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCAtLXR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCWNhc2UgJ2gnOgorCSAgICBpZiAodHh0X3ggPiAwKSB7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCAtLXR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCWNhc2UgJ2wnOgorCSAgICBpZiAodHh0X3ggPCBnZXRtYXh4KHR4dHdpbikgLSAxKSB7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCArK3R4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAndyc6CisJICAgIHRlc3RfZ2V0c3RyKGxldmVsICsgMSwgYXJndiwgc3Ryd2luKTsKKwkgICAgaWYgKHR4dGJveCAhPSAwKSB7CisJCXRvdWNod2luKHR4dGJveCk7CisJCXdub3V0cmVmcmVzaCh0eHRib3gpOworCSAgICB9IGVsc2UgeworCQl0b3VjaHdpbih0eHR3aW4pOworCQl3bm91dHJlZnJlc2godHh0d2luKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJy0nOgorCSAgICBpZiAobGltaXQgPiAwKSB7CisJCWFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgLS1saW1pdCk7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJysnOgorCSAgICBhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCBmbGF2b3IsICsrbGltaXQpOworCSAgICBNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCB0eHRfeSwgdHh0X3gpOworCSAgICBicmVhazsKKworCWNhc2UgJzwnOgorCSAgICBpZiAoZmxhdm9yID4gMCkgeworCQlhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCAtLWZsYXZvciwgbGltaXQpOworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCB0eHRfeSwgdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICc+JzoKKwkgICAgaWYgKGZsYXZvciArIDEgPCBlTWF4Rmxhdm9yKSB7CisJCWFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sICsrZmxhdm9yLCBsaW1pdCk7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJzonOgorCSAgICBhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCBmbGF2b3IsIGxpbWl0KTsKKwkgICAgKmJ1ZmZlciA9ICdcMCc7CisJICAgIHJjID0gRVJSOworCSAgICBlY2hvKCk7CisJICAgIHdhdHRyc2V0KHR4dHdpbiwgQV9SRVZFUlNFKTsKKwkgICAgc3dpdGNoIChmbGF2b3IpIHsKKwkgICAgY2FzZSBlR2V0U3RyOgorCQlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCQkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCQkgICAgcmMgPSB3Z2V0c3RyKHR4dHdpbiwgYnVmZmVyKTsKKwkJfSBlbHNlIHsKKwkJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkJICAgIHJjID0gZ2V0c3RyKGJ1ZmZlcik7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgZUdldE5TdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IHdnZXRuc3RyKHR4dHdpbiwgYnVmZmVyLCBsaW1pdCk7CisJCX0gZWxzZSB7CisJCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IGdldG5zdHIoYnVmZmVyLCBsaW1pdCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgZU12R2V0U3RyOgorCQlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCQkgICAgcmMgPSBtdndnZXRzdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCSAgICByYyA9IG12Z2V0c3RyKHR4dF95LCB0eHRfeCwgYnVmZmVyKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBlTXZHZXROU3RyOgorCQlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCQkgICAgcmMgPSBtdndnZXRuc3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCBidWZmZXIsIGxpbWl0KTsKKwkJfSBlbHNlIHsKKwkJICAgIHJjID0gbXZnZXRuc3RyKHR4dF95LCB0eHRfeCwgYnVmZmVyLCBsaW1pdCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgZU1heEZsYXZvcjoKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbm9lY2hvKCk7CisJICAgIHdhdHRyc2V0KHR4dHdpbiwgQV9OT1JNQUwpOworCSAgICB3cHJpbnR3KHN0cndpbiwgIiVkOiVzIiwgcmMsIGJ1ZmZlcik7CisJICAgIHdub3V0cmVmcmVzaChzdHJ3aW4pOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKwlkb3VwZGF0ZSgpOworICAgIH0KKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJZGVsd2luKHR4dHdpbik7CisJZGVsd2luKHR4dGJveCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXSU5ET1cgKmNocmJveDsKKyAgICBXSU5ET1cgKnN0cndpbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmIChhcmdjIDwgMikgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGZpbGVcbiIsIGFyZ3ZbMF0pOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaW5pdHNjcigpOworCisgICAgY2hyYm94ID0gZGVyd2luKHN0ZHNjciwgQkFTRV9ZLCBDT0xTLCAwLCAwKTsKKyAgICBib3goY2hyYm94LCAwLCAwKTsKKyAgICB3bm91dHJlZnJlc2goY2hyYm94KTsKKworICAgIHN0cndpbiA9IGRlcndpbihjaHJib3gsIDQsIENPTFMgLSAyLCAxLCAxKTsKKworICAgIHRlc3RfZ2V0c3RyKDEsIGFyZ3YsIHN0cndpbik7CisKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGN1cnNlcyBjaGdhdCBmdW5jdGlvblxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0X2luc3RyLmMgYi90ZXN0L3Rlc3RfaW5zdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjRmNzcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC90ZXN0X2luc3RyLmMKQEAgLTAsMCArMSwyNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiB0ZXN0X2luc3RyLmMsdiAxLjQgMjAwNy8wNy8yMSAxOTozODowNCB0b20gRXhwICQKKyAqCisgKiBBdXRob3I6IFRob21hcyBFIERpY2tleQorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBpbnN0ciBmdW5jdGlvbnMgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnkuCisKKyAgICAgICBpbnQgaW5zdHIoY2hhciAqc3RyKTsKKyAgICAgICBpbnQgaW5uc3RyKGNoYXIgKnN0ciwgaW50IG4pOworICAgICAgIGludCB3aW5zdHIoV0lORE9XICp3aW4sIGNoYXIgKnN0cik7CisgICAgICAgaW50IHdpbm5zdHIoV0lORE9XICp3aW4sIGNoYXIgKnN0ciwgaW50IG4pOworICAgICAgIGludCBtdmluc3RyKGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTsKKyAgICAgICBpbnQgbXZpbm5zdHIoaW50IHksIGludCB4LCBjaGFyICpzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZ3aW5zdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTsKKyAgICAgICBpbnQgbXZ3aW5uc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pOworICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2RlZmluZSBCQVNFX1kgNgorI2RlZmluZSBNQVhfQ09MUyAxMDI0CisKK3N0YXRpYyBib29sCitRdWl0KGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID09IEVSUiB8fCBjaCA9PSAncScgfHwgY2ggPT0gUVVJVCB8fCBjaCA9PSBFU0NBUEUpOworfQorCitzdGF0aWMgdm9pZAorc2hvd18xc3QoV0lORE9XICp3aW4sIGludCBsaW5lLCBjaGFyICpidWZmZXIpCit7CisgICAgbXZ3YWRkc3RyKHdpbiwgbGluZSwgNSwgYnVmZmVyKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dtb3JlKFdJTkRPVyAqd2luLCBpbnQgbGluZSwgY2hhciAqYnVmZmVyKQoreworICAgIHdtb3ZlKHdpbiwgbGluZSwgMCk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgc2hvd18xc3Qod2luLCBsaW5lLCBidWZmZXIpOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2luY2hzKGludCBsZXZlbCwgY2hhciAqKmFyZ3YsIFdJTkRPVyAqY2hyd2luLCBXSU5ET1cgKnN0cndpbikKK3sKKyAgICBXSU5ET1cgKnR4dGJveCA9IDA7CisgICAgV0lORE9XICp0eHR3aW4gPSAwOworICAgIEZJTEUgKmZwOworICAgIGludCBjaDsKKyAgICBpbnQgdHh0X3ggPSAwLCB0eHRfeSA9IDA7CisgICAgaW50IGJhc2VfeTsKKyAgICBpbnQgbGltaXQgPSBnZXRtYXh4KHN0cndpbikgLSA1OworCisgICAgY2hhciBidWZmZXJbTUFYX0NPTFNdOworCisgICAgaWYgKGFyZ3ZbbGV2ZWxdID09IDApIHsKKwliZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChsZXZlbCA+IDEpIHsKKwl0eHRib3ggPSBuZXd3aW4oTElORVMgLSBCQVNFX1ksIENPTFMgLSBsZXZlbCwgQkFTRV9ZLCBsZXZlbCk7CisJYm94KHR4dGJveCwgMCwgMCk7CisJd25vdXRyZWZyZXNoKHR4dGJveCk7CisKKwl0eHR3aW4gPSBkZXJ3aW4odHh0Ym94LAorCQkJZ2V0bWF4eSh0eHRib3gpIC0gMiwKKwkJCWdldG1heHgodHh0Ym94KSAtIDIsCisJCQkxLCAxKTsKKwliYXNlX3kgPSAwOworICAgIH0gZWxzZSB7CisJdHh0d2luID0gc3Rkc2NyOworCWJhc2VfeSA9IEJBU0VfWTsKKyAgICB9CisKKyAgICBrZXlwYWQodHh0d2luLCBUUlVFKTsJLyogZW5hYmxlIGtleWJvYXJkIG1hcHBpbmcgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgdHh0X3kgPSBiYXNlX3k7CisgICAgdHh0X3ggPSAwOworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworICAgIGlmICgoZnAgPSBmb3Blbihhcmd2W2xldmVsXSwgInIiKSkgIT0gMCkgeworCXdoaWxlICgoY2ggPSBmZ2V0YyhmcCkpICE9IEVPRikgeworCSAgICBpZiAod2FkZGNoKHR4dHdpbiwgVUNoYXIoY2gpKSAhPSBPSykgeworCQlicmVhazsKKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0gZWxzZSB7CisJd3ByaW50dyh0eHR3aW4sICJDYW5ub3Qgb3BlbjpcbiVzIiwgYXJndlsxXSk7CisgICAgfQorCisgICAgd2hpbGUgKCFRdWl0KGNoID0gbXZ3Z2V0Y2godHh0d2luLCB0eHRfeSwgdHh0X3gpKSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlIEtFWV9ET1dOOgorCWNhc2UgJ2onOgorCSAgICBpZiAodHh0X3kgPCBnZXRtYXh5KHR4dHdpbikgLSAxKQorCQl0eHRfeSsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJY2FzZSAnayc6CisJICAgIGlmICh0eHRfeSA+IGJhc2VfeSkKKwkJdHh0X3ktLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJY2FzZSAnaCc6CisJICAgIGlmICh0eHRfeCA+IDApCisJCXR4dF94LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwljYXNlICdsJzoKKwkgICAgaWYgKHR4dF94IDwgZ2V0bWF4eCh0eHR3aW4pIC0gMSkKKwkJdHh0X3grKzsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3cnOgorCSAgICB0ZXN0X2luY2hzKGxldmVsICsgMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCSAgICBpZiAodHh0Ym94ICE9IDApIHsKKwkJdG91Y2h3aW4odHh0Ym94KTsKKwkJd25vdXRyZWZyZXNoKHR4dGJveCk7CisJICAgIH0gZWxzZSB7CisJCXRvdWNod2luKHR4dHdpbik7CisJCXdub3V0cmVmcmVzaCh0eHR3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJy0nOgorCSAgICBpZiAobGltaXQgPiAwKSB7CisJCS0tbGltaXQ7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICcrJzoKKwkgICAgKytsaW1pdDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYmVlcCgpOworCSAgICBicmVhazsKKwl9CisKKwltdndwcmludHcoY2hyd2luLCAwLCAwLCAibGluZToiKTsKKwl3Y2xydG9lb2woY2hyd2luKTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworCSAgICBpZiAod2luc3RyKHR4dHdpbiwgYnVmZmVyKSAhPSBFUlIpIHsKKwkJc2hvd18xc3QoY2hyd2luLCAwLCBidWZmZXIpOworCSAgICB9CisJICAgIGlmIChtdndpbnN0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgYnVmZmVyKSAhPSBFUlIpIHsKKwkJc2hvd21vcmUoY2hyd2luLCAxLCBidWZmZXIpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCisJICAgIGlmIChpbnN0cihidWZmZXIpICE9IEVSUikgeworCQlzaG93XzFzdChjaHJ3aW4sIDAsIGJ1ZmZlcik7CisJICAgIH0KKwkgICAgaWYgKG12aW5zdHIodHh0X3ksIHR4dF94LCBidWZmZXIpICE9IEVSUikgeworCQlzaG93bW9yZShjaHJ3aW4sIDEsIGJ1ZmZlcik7CisJICAgIH0KKwl9CisJd25vdXRyZWZyZXNoKGNocndpbik7CisKKwltdndwcmludHcoc3Ryd2luLCAwLCAwLCAiJTRkOiIsIGxpbWl0KTsKKwl3Y2xydG9ib3Qoc3Ryd2luKTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKHdpbm5zdHIodHh0d2luLCBidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd18xc3Qoc3Ryd2luLCAwLCBidWZmZXIpOworCSAgICB9CisKKwkgICAgaWYgKG12d2lubnN0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgYnVmZmVyLCBsaW1pdCkgIT0gRVJSKSB7CisJCXNob3dtb3JlKHN0cndpbiwgMSwgYnVmZmVyKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKGlubnN0cihidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd18xc3Qoc3Ryd2luLCAwLCBidWZmZXIpOworCSAgICB9CisKKwkgICAgaWYgKG12aW5uc3RyKHR4dF95LCB0eHRfeCwgYnVmZmVyLCBsaW1pdCkgIT0gRVJSKSB7CisJCXNob3dtb3JlKHN0cndpbiwgMSwgYnVmZmVyKTsKKwkgICAgfQorCX0KKworCXdub3V0cmVmcmVzaChzdHJ3aW4pOworICAgIH0KKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJZGVsd2luKHR4dHdpbik7CisJZGVsd2luKHR4dGJveCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXSU5ET1cgKmNocmJveDsKKyAgICBXSU5ET1cgKmNocndpbjsKKyAgICBXSU5ET1cgKnN0cndpbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmIChhcmdjIDwgMikgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGZpbGVcbiIsIGFyZ3ZbMF0pOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaW5pdHNjcigpOworCisgICAgY2hyYm94ID0gZGVyd2luKHN0ZHNjciwgQkFTRV9ZLCBDT0xTLCAwLCAwKTsKKyAgICBib3goY2hyYm94LCAwLCAwKTsKKyAgICB3bm91dHJlZnJlc2goY2hyYm94KTsKKworICAgIGNocndpbiA9IGRlcndpbihjaHJib3gsIDIsIENPTFMgLSAyLCAxLCAxKTsKKyAgICBzdHJ3aW4gPSBkZXJ3aW4oY2hyYm94LCAyLCBDT0xTIC0gMiwgMywgMSk7CisKKyAgICB0ZXN0X2luY2hzKDEsIGFyZ3YsIGNocndpbiwgc3Ryd2luKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3Rlc3RfaW53c3RyLmMgYi90ZXN0L3Rlc3RfaW53c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYjY0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdGVzdF9pbndzdHIuYwpAQCAtMCwwICsxLDI2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHRlc3RfaW53c3RyLmMsdiAxLjMgMjAwNy8wNy8yMSAyMjo0Nzo0MiB0b20gRXhwICQKKyAqCisgKiBBdXRob3I6IFRob21hcyBFIERpY2tleQorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBpbndzdHIgZnVuY3Rpb25zIGZyb20gdGhlIGN1cnNlcyBsaWJyYXJ5LgorCisgICAgICAgaW50IGlud3N0cih3Y2hhcl90ICpzdHIpOworICAgICAgIGludCBpbm53c3RyKHdjaGFyX3QgKnN0ciwgaW50IG4pOworICAgICAgIGludCB3aW53c3RyKFdJTkRPVyAqd2luLCB3Y2hhcl90ICpzdHIpOworICAgICAgIGludCB3aW5ud3N0cihXSU5ET1cgKndpbiwgd2NoYXJfdCAqc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12aW53c3RyKGludCB5LCBpbnQgeCwgd2NoYXJfdCAqc3RyKTsKKyAgICAgICBpbnQgbXZpbm53c3RyKGludCB5LCBpbnQgeCwgd2NoYXJfdCAqc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12d2lud3N0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCB3Y2hhcl90ICpzdHIpOworICAgICAgIGludCBtdndpbm53c3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIHdjaGFyX3QgKnN0ciwgaW50IG4pOworICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisKKyNkZWZpbmUgQkFTRV9ZIDYKKyNkZWZpbmUgTUFYX0NPTFMgMTAyNAorCitzdGF0aWMgYm9vbAorUXVpdChpbnQgY2gpCit7CisgICAgcmV0dXJuIChjaCA9PSBFUlIgfHwgY2ggPT0gJ3EnIHx8IGNoID09IFFVSVQgfHwgY2ggPT0gRVNDQVBFKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfMXN0KFdJTkRPVyAqd2luLCBpbnQgbGluZSwgd2NoYXJfdCAqYnVmZmVyKQoreworICAgIG12d2FkZHdzdHIod2luLCBsaW5lLCA1LCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd21vcmUoV0lORE9XICp3aW4sIGludCBsaW5lLCB3Y2hhcl90ICpidWZmZXIpCit7CisgICAgd21vdmUod2luLCBsaW5lLCAwKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICBzaG93XzFzdCh3aW4sIGxpbmUsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaW5jaHMoaW50IGxldmVsLCBjaGFyICoqYXJndiwgV0lORE9XICpjaHJ3aW4sIFdJTkRPVyAqc3Ryd2luKQoreworICAgIFdJTkRPVyAqdHh0Ym94ID0gMDsKKyAgICBXSU5ET1cgKnR4dHdpbiA9IDA7CisgICAgRklMRSAqZnA7CisgICAgaW50IGNoOworICAgIGludCB0eHRfeCA9IDAsIHR4dF95ID0gMDsKKyAgICBpbnQgYmFzZV95OworICAgIGludCBsaW1pdCA9IGdldG1heHgoc3Ryd2luKSAtIDU7CisgICAgd2NoYXJfdCBidWZmZXJbTUFYX0NPTFNdOworCisgICAgaWYgKGFyZ3ZbbGV2ZWxdID09IDApIHsKKwliZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChsZXZlbCA+IDEpIHsKKwl0eHRib3ggPSBuZXd3aW4oTElORVMgLSBCQVNFX1ksIENPTFMgLSBsZXZlbCwgQkFTRV9ZLCBsZXZlbCk7CisJYm94KHR4dGJveCwgMCwgMCk7CisJd25vdXRyZWZyZXNoKHR4dGJveCk7CisKKwl0eHR3aW4gPSBkZXJ3aW4odHh0Ym94LAorCQkJZ2V0bWF4eSh0eHRib3gpIC0gMiwKKwkJCWdldG1heHgodHh0Ym94KSAtIDIsCisJCQkxLCAxKTsKKwliYXNlX3kgPSAwOworICAgIH0gZWxzZSB7CisJdHh0d2luID0gc3Rkc2NyOworCWJhc2VfeSA9IEJBU0VfWTsKKyAgICB9CisKKyAgICBrZXlwYWQodHh0d2luLCBUUlVFKTsJLyogZW5hYmxlIGtleWJvYXJkIG1hcHBpbmcgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgdHh0X3kgPSBiYXNlX3k7CisgICAgdHh0X3ggPSAwOworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworICAgIGlmICgoZnAgPSBmb3Blbihhcmd2W2xldmVsXSwgInIiKSkgIT0gMCkgeworCXdoaWxlICgoY2ggPSBmZ2V0YyhmcCkpICE9IEVPRikgeworCSAgICBpZiAod2FkZGNoKHR4dHdpbiwgVUNoYXIoY2gpKSAhPSBPSykgeworCQlicmVhazsKKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0gZWxzZSB7CisJd3ByaW50dyh0eHR3aW4sICJDYW5ub3Qgb3BlbjpcbiVzIiwgYXJndlsxXSk7CisgICAgfQorCisgICAgd2hpbGUgKCFRdWl0KGNoID0gbXZ3Z2V0Y2godHh0d2luLCB0eHRfeSwgdHh0X3gpKSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlIEtFWV9ET1dOOgorCWNhc2UgJ2onOgorCSAgICBpZiAodHh0X3kgPCBnZXRtYXh5KHR4dHdpbikgLSAxKQorCQl0eHRfeSsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJY2FzZSAnayc6CisJICAgIGlmICh0eHRfeSA+IGJhc2VfeSkKKwkJdHh0X3ktLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJY2FzZSAnaCc6CisJICAgIGlmICh0eHRfeCA+IDApCisJCXR4dF94LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwljYXNlICdsJzoKKwkgICAgaWYgKHR4dF94IDwgZ2V0bWF4eCh0eHR3aW4pIC0gMSkKKwkJdHh0X3grKzsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3cnOgorCSAgICB0ZXN0X2luY2hzKGxldmVsICsgMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCSAgICBpZiAodHh0Ym94ICE9IDApIHsKKwkJdG91Y2h3aW4odHh0Ym94KTsKKwkJd25vdXRyZWZyZXNoKHR4dGJveCk7CisJICAgIH0gZWxzZSB7CisJCXRvdWNod2luKHR4dHdpbik7CisJCXdub3V0cmVmcmVzaCh0eHR3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJy0nOgorCSAgICBpZiAobGltaXQgPiAwKSB7CisJCS0tbGltaXQ7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICcrJzoKKwkgICAgKytsaW1pdDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYmVlcCgpOworCSAgICBicmVhazsKKwl9CisKKwltdndwcmludHcoY2hyd2luLCAwLCAwLCAibGluZToiKTsKKwl3Y2xydG9lb2woY2hyd2luKTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworCSAgICBpZiAod2lud3N0cih0eHR3aW4sIGJ1ZmZlcikgIT0gRVJSKSB7CisJCXNob3dfMXN0KGNocndpbiwgMCwgYnVmZmVyKTsKKwkgICAgfQorCSAgICBpZiAobXZ3aW53c3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCBidWZmZXIpICE9IEVSUikgeworCQlzaG93bW9yZShjaHJ3aW4sIDEsIGJ1ZmZlcik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisKKwkgICAgaWYgKGlud3N0cihidWZmZXIpICE9IEVSUikgeworCQlzaG93XzFzdChjaHJ3aW4sIDAsIGJ1ZmZlcik7CisJICAgIH0KKwkgICAgaWYgKG12aW53c3RyKHR4dF95LCB0eHRfeCwgYnVmZmVyKSAhPSBFUlIpIHsKKwkJc2hvd21vcmUoY2hyd2luLCAxLCBidWZmZXIpOworCSAgICB9CisJfQorCXdub3V0cmVmcmVzaChjaHJ3aW4pOworCisJbXZ3cHJpbnR3KHN0cndpbiwgMCwgMCwgIiU0ZDoiLCBsaW1pdCk7CisJd2NscnRvYm90KHN0cndpbik7CisKKwlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJICAgIGlmICh3aW5ud3N0cih0eHR3aW4sIGJ1ZmZlciwgbGltaXQpICE9IEVSUikgeworCQlzaG93XzFzdChzdHJ3aW4sIDAsIGJ1ZmZlcik7CisJICAgIH0KKworCSAgICBpZiAobXZ3aW5ud3N0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgYnVmZmVyLCBsaW1pdCkgIT0gRVJSKSB7CisJCXNob3dtb3JlKHN0cndpbiwgMSwgYnVmZmVyKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKGlubndzdHIoYnVmZmVyLCBsaW1pdCkgIT0gRVJSKSB7CisJCXNob3dfMXN0KHN0cndpbiwgMCwgYnVmZmVyKTsKKwkgICAgfQorCisJICAgIGlmIChtdmlubndzdHIodHh0X3ksIHR4dF94LCBidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd21vcmUoc3Ryd2luLCAxLCBidWZmZXIpOworCSAgICB9CisJfQorCisJd25vdXRyZWZyZXNoKHN0cndpbik7CisgICAgfQorICAgIGlmIChsZXZlbCA+IDEpIHsKKwlkZWx3aW4odHh0d2luKTsKKwlkZWx3aW4odHh0Ym94KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdJTkRPVyAqY2hyYm94OworICAgIFdJTkRPVyAqY2hyd2luOworICAgIFdJTkRPVyAqc3Ryd2luOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgZmlsZVxuIiwgYXJndlswXSk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisKKyAgICBjaHJib3ggPSBkZXJ3aW4oc3Rkc2NyLCBCQVNFX1ksIENPTFMsIDAsIDApOworICAgIGJveChjaHJib3gsIDAsIDApOworICAgIHdub3V0cmVmcmVzaChjaHJib3gpOworCisgICAgY2hyd2luID0gZGVyd2luKGNocmJveCwgMiwgQ09MUyAtIDIsIDEsIDEpOworICAgIHN0cndpbiA9IGRlcndpbihjaHJib3gsIDIsIENPTFMgLSAyLCAzLCAxKTsKKworICAgIHRlc3RfaW5jaHMoMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgd2lkZS1uY3Vyc2VzIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdF9vcGFxdWUuYyBiL3Rlc3QvdGVzdF9vcGFxdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWFiNzhjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC90ZXN0X29wYXF1ZS5jCkBAIC0wLDAgKzEsNDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogdGVzdF9vcGFxdWUuYyx2IDEuNyAyMDA4LzA3LzA1IDIzOjE4OjQwIHRvbSBFeHAgJAorICoKKyAqIEF1dGhvcjogVGhvbWFzIEUgRGlja2V5CisgKgorICogRGVtb25zdHJhdGUgdGhlIG9wYXF1ZSBmdW5jdGlvbnMgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnkuCisKKyAgICAgICBXSU5ET1cgKiB3Z2V0cGFyZW50IChjb25zdCBXSU5ET1cgKik7CisgICAgICAgYm9vbCBpc19jbGVhcmVkKGNvbnN0IFdJTkRPVyAqd2luKTsKKyAgICAgICBib29sIGlzX2lkY29rKGNvbnN0IFdJTkRPVyAqd2luKTsKKyAgICAgICBib29sIGlzX2lkbG9rKGNvbnN0IFdJTkRPVyAqd2luKTsKKyAgICAgICBib29sIGlzX2ltbWVkb2soY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfa2V5cGFkKGNvbnN0IFdJTkRPVyAqd2luKTsKKyAgICAgICBib29sIGlzX2xlYXZlb2soY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfbm9kZWxheShjb25zdCBXSU5ET1cgKndpbik7CisgICAgICAgYm9vbCBpc19ub3RpbWVvdXQoY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfc2Nyb2xsb2soY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfc3luY29rKGNvbnN0IFdJTkRPVyAqd2luKTsKKyAgICAgICBpbnQgd2dldHNjcnJlZyAoY29uc3QgV0lORE9XICosIGludCAqLCBpbnQgKik7CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjZGVmaW5lIEJBU0VfWSA2CisjZGVmaW5lIE1BWF9DT0xTIDEwMjQKKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OX1BBVENIKSAmJiAoTkNVUlNFU19WRVJTSU9OX1BBVENIID49IDIwMDgwMTE5KSAmJiBOQ1VSU0VTX0VYVF9GVU5DUworCitzdGF0aWMgYm9vbAorUXVpdChpbnQgY2gpCit7CisgICAgcmV0dXJuIChjaCA9PSAncScgfHwgY2ggPT0gUVVJVCB8fCBjaCA9PSBFU0NBUEUpOworfQorCit0eXBlZGVmIGJvb2woKkJvb2xPcGFxdWUpIChXSU5ET1cgKiwgaW50KTsKKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX2NsZWFyZWQoV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlpZiAobW9kZSkKKwkgICAgd2NsZWFyKHdpbik7CisgICAgfQorICAgIHJldHVybiBpc19jbGVhcmVkKHdpbik7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0X29wYXF1ZV9pZGNvayhXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCWlkY29rKHdpbiwgbW9kZSk7CisgICAgfQorICAgIHJldHVybiBpc19pZGNvayh3aW4pOworfQorCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfaWRsb2soV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlpZGxvayh3aW4sIG1vZGUpOworICAgIH0KKyAgICByZXR1cm4gaXNfaWRsb2sod2luKTsKK30KKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX2ltbWVkb2soV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlpbW1lZG9rKHdpbiwgbW9kZSk7CisgICAgfQorICAgIHJldHVybiBpc19pbW1lZG9rKHdpbik7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0X29wYXF1ZV9rZXlwYWQoV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlrZXlwYWQod2luLCBtb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX2tleXBhZCh3aW4pOworfQorCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfbGVhdmVvayhXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCWxlYXZlb2sod2luLCBtb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX2xlYXZlb2sod2luKTsKK30KKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX25vZGVsYXkoV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlub2RlbGF5KHdpbiwgbW9kZSk7CisgICAgfQorICAgIHJldHVybiBpc19ub2RlbGF5KHdpbik7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0X29wYXF1ZV9ub3RpbWVvdXQoV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlub3RpbWVvdXQod2luLCBtb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX25vdGltZW91dCh3aW4pOworfQorCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfc2Nyb2xsb2soV0lORE9XICp3aW4sIGludCBtb2RlKQoreworICAgIGlmIChtb2RlID49IDApIHsKKwlzY3JvbGxvayh3aW4sIG1vZGUpOworICAgIH0KKyAgICByZXR1cm4gaXNfc2Nyb2xsb2sod2luKTsKK30KKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX3N5bmNvayhXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCXN5bmNvayh3aW4sIG1vZGUpOworICAgIH0KKyAgICByZXR1cm4gaXNfc3luY29rKHdpbik7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXR1c195KFdJTkRPVyAqc3Rzd2luLCBpbnQgY2VsbCkKK3sKKyAgICByZXR1cm4gKGNlbGwgJSBnZXRtYXh5KHN0c3dpbikpOworfQorCitzdGF0aWMgaW50CitzdGF0dXNfeChXSU5ET1cgKnN0c3dpbiwgaW50IGNlbGwpCit7CisgICAgcmV0dXJuICgxNSAqIChjZWxsIC8gZ2V0bWF4eShzdHN3aW4pKSk7Cit9CisKK3N0YXRpYyB2b2lkCit0b19rZXl3b3JkKFdJTkRPVyAqc3Rzd2luLCBpbnQgY2VsbCkKK3sKKyAgICB3bW92ZShzdHN3aW4sIHN0YXR1c195KHN0c3dpbiwgY2VsbCksIHN0YXR1c194KHN0c3dpbiwgY2VsbCkpOworfQorCitzdGF0aWMgdm9pZAordG9fcmVzdWx0KFdJTkRPVyAqc3Rzd2luLCBpbnQgY2VsbCwgYm9vbCBiZWZvcmUpCit7CisgICAgaW50IHkgPSBzdGF0dXNfeShzdHN3aW4sIGNlbGwpOworICAgIGludCB4ID0gc3RhdHVzX3goc3Rzd2luLCBjZWxsKSArIDExOworICAgIGlmICghYmVmb3JlKQorCSsreDsKKyAgICB3bW92ZShzdHN3aW4sIHksIHgpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19rZXl3b3JkKFdJTkRPVyAqc3Rzd2luLCBpbnQgY2VsbCwgaW50IGFjdGl2ZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICB0b19rZXl3b3JkKHN0c3dpbiwgY2VsbCk7CisgICAgaWYgKGFjdGl2ZSA9PSBjZWxsKQorCXdzdGFuZG91dChzdHN3aW4pOworICAgIHdwcmludHcoc3Rzd2luLCAiJXM6IiwgbmFtZSk7CisgICAgaWYgKGFjdGl2ZSA9PSBjZWxsKQorCXdzdGFuZGVuZChzdHN3aW4pOworfQorLyogKklOREVOVC1PRkYqICovCitzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIEJvb2xPcGFxdWUgZnVuYzsKK30gYm9vbF9mdW5jc1tdID0geworICAgIHsgImNsZWFyZWQiLCAgIHRlc3Rfb3BhcXVlX2NsZWFyZWQgfSwKKyAgICB7ICJpZGNvayIsICAgICB0ZXN0X29wYXF1ZV9pZGNvayB9LAorICAgIHsgImlkbG9rIiwgICAgIHRlc3Rfb3BhcXVlX2lkbG9rIH0sCisgICAgeyAiaW1tZWRvayIsICAgdGVzdF9vcGFxdWVfaW1tZWRvayB9LAorICAgIHsgImtleXBhZCIsICAgIHRlc3Rfb3BhcXVlX2tleXBhZCB9LAorICAgIHsgImxlYXZlb2siLCAgIHRlc3Rfb3BhcXVlX2xlYXZlb2sgfSwKKyAgICB7ICJub2RlbGF5IiwgICB0ZXN0X29wYXF1ZV9ub2RlbGF5IH0sCisgICAgeyAibm90aW1lb3V0IiwgdGVzdF9vcGFxdWVfbm90aW1lb3V0IH0sCisgICAgeyAic2Nyb2xsb2siLCAgdGVzdF9vcGFxdWVfc2Nyb2xsb2sgfSwKKyAgICB7ICJzeW5jb2siLCAgICB0ZXN0X29wYXF1ZV9zeW5jb2sgfQorfTsKKy8qICpJTkRFTlQtT04qICovCisKKy8qCisgKiBEaXNwbGF5IGFuZC9vciBhbGxvdyB1cGRhdGUgZm9yIHRoZSBwcm9wZXJ0aWVzIGFjY2Vzc2VkIGluIHRoZSBvcGFxdWUKKyAqIHdpbmRvdy4gIFNvbWUgbWF5IGNoYW5nZSBzdGF0ZSBhZnRlciByZWZyZXNoaW5nIHRoZSB3aW5kb3csIHNvIHdlCisgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gdXNpbmcgdGhlICdiZWZvcmUnIHBhcmFtZXRlci4KKyAqLworc3RhdGljIGludAorc2hvd19vcGFxdWUoV0lORE9XICpzdHN3aW4sIFdJTkRPVyAqdHh0d2luLCBib29sIGJlZm9yZSwgaW50IGFjdGl2ZSkKK3sKKyAgICBpbnQgbjsKKyAgICBpbnQgdG9wLCBib3R0b207CisKKyAgICBpZiAoYmVmb3JlKSB7CisJd2VyYXNlKHN0c3dpbik7CisgICAgfQorICAgIGZvciAobiA9IDA7IG4gPCAoaW50KSBTSVpFT0YoYm9vbF9mdW5jcyk7ICsrbikgeworCXNob3dfa2V5d29yZChzdHN3aW4sIG4sIGFjdGl2ZSwgYm9vbF9mdW5jc1tuXS5uYW1lKTsKKworCXRvX3Jlc3VsdChzdHN3aW4sIG4sIGJlZm9yZSk7CisJd3ByaW50dyhzdHN3aW4sICIlYyIsIGJvb2xfZnVuY3Nbbl0uZnVuYyh0eHR3aW4sIC0xKSA/ICdUJyA6ICdGJyk7CisgICAgfQorCisgICAgc2hvd19rZXl3b3JkKHN0c3dpbiwgbiwgYWN0aXZlLCAid2dldHBhcmVudCIpOworICAgIHRvX3Jlc3VsdChzdHN3aW4sIG4sIFRSVUUpOworICAgIHdwcmludHcoc3Rzd2luLCAiJXAiLCB3Z2V0cGFyZW50KHR4dHdpbikpOworCisgICAgKytuOworICAgIHNob3dfa2V5d29yZChzdHN3aW4sIG4sIGFjdGl2ZSwgIndnZXRzY3JyZWciKTsKKyAgICB0b19yZXN1bHQoc3Rzd2luLCBuLCBUUlVFKTsKKyAgICBpZiAod2dldHNjcnJlZyh0eHR3aW4sICZ0b3AsICZib3R0b20pID09IE9LKQorCXdwcmludHcoc3Rzd2luLCAiJWQsJWQiLCB0b3AsIGJvdHRvbSk7CisKKyAgICB3bm91dHJlZnJlc2goc3Rzd2luKTsKKyAgICByZXR1cm4gYWN0aXZlOworfQorCitzdGF0aWMgaW50Cit0ZXN0X29wYXF1ZShpbnQgbGV2ZWwsIGNoYXIgKiphcmd2LCBXSU5ET1cgKnN0c3dpbikKK3sKKyAgICBXSU5ET1cgKnR4dGJveCA9IDA7CisgICAgV0lORE9XICp0eHR3aW4gPSAwOworICAgIEZJTEUgKmZwOworICAgIGludCBjaDsKKyAgICBpbnQgdHh0X3ggPSAwLCB0eHRfeSA9IDA7CisgICAgaW50IGJhc2VfeTsKKyAgICBib29sIGluX3N0YXR1cyA9IEZBTFNFOworICAgIGludCBhY3RpdmUgPSAwOworCisgICAgaWYgKGFyZ3ZbbGV2ZWxdID09IDApIHsKKwliZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChsZXZlbCA+IDEpIHsKKwl0eHRib3ggPSBuZXd3aW4oTElORVMgLSBCQVNFX1ksIENPTFMgLSBsZXZlbCwgQkFTRV9ZLCBsZXZlbCk7CisJYm94KHR4dGJveCwgMCwgMCk7CisJd25vdXRyZWZyZXNoKHR4dGJveCk7CisKKwl0eHR3aW4gPSBkZXJ3aW4odHh0Ym94LAorCQkJZ2V0bWF4eSh0eHRib3gpIC0gMiwKKwkJCWdldG1heHgodHh0Ym94KSAtIDIsCisJCQkxLCAxKTsKKwliYXNlX3kgPSAwOworICAgIH0gZWxzZSB7CisJdHh0d2luID0gc3Rkc2NyOworCWJhc2VfeSA9IEJBU0VfWTsKKyAgICB9CisKKyAgICBrZXlwYWQodHh0d2luLCBUUlVFKTsJLyogZW5hYmxlIGtleWJvYXJkIG1hcHBpbmcgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgdHh0X3kgPSBiYXNlX3k7CisgICAgdHh0X3ggPSAwOworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworICAgIGlmICgoZnAgPSBmb3Blbihhcmd2W2xldmVsXSwgInIiKSkgIT0gMCkgeworCXdoaWxlICgoY2ggPSBmZ2V0YyhmcCkpICE9IEVPRikgeworCSAgICBpZiAod2FkZGNoKHR4dHdpbiwgVUNoYXIoY2gpKSAhPSBPSykgeworCQlicmVhazsKKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0gZWxzZSB7CisJd3ByaW50dyh0eHR3aW4sICJDYW5ub3Qgb3BlbjpcbiVzIiwgYXJndlsxXSk7CisgICAgfQorCisgICAgZm9yICg7OykgeworCWlmIChpbl9zdGF0dXMpIHsKKwkgICAgdG9fa2V5d29yZChzdHN3aW4sIGFjdGl2ZSk7CisKKwkgICAgY2ggPSB3Z2V0Y2goc3Rzd2luKTsKKwkgICAgc2hvd19vcGFxdWUoc3Rzd2luLCB0eHR3aW4sIFRSVUUsIGFjdGl2ZSk7CisJICAgIGlmIChRdWl0KGNoKSkKKwkJYnJlYWs7CisKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlICdcdCc6CisJCWluX3N0YXR1cyA9IEZBTFNFOworCQlicmVhazsKKwkgICAgY2FzZSBLRVlfRE9XTjoKKwkgICAgY2FzZSAnaic6CisJCWlmIChhY3RpdmUgPCAoaW50KSBTSVpFT0YoYm9vbF9mdW5jcykgLSAxKQorCQkgICAgYWN0aXZlKys7CisJCWVsc2UKKwkJICAgIGJlZXAoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX1VQOgorCSAgICBjYXNlICdrJzoKKwkJaWYgKGFjdGl2ZSA+IDApCisJCSAgICBhY3RpdmUtLTsKKwkJZWxzZQorCQkgICAgYmVlcCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnICc6CisJCWJvb2xfZnVuY3NbYWN0aXZlXS5mdW5jKHR4dHdpbiwKKwkJCQkJIWJvb2xfZnVuY3NbYWN0aXZlXS5mdW5jKHR4dHdpbiwgLTEpKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJlZXAoKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgc2hvd19vcGFxdWUoc3Rzd2luLCB0eHR3aW4sIEZBTFNFLCBpbl9zdGF0dXMgPyBhY3RpdmUgOiAtMSk7CisJfSBlbHNlIHsKKwkgICAgY2ggPSBtdndnZXRjaCh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJICAgIHNob3dfb3BhcXVlKHN0c3dpbiwgdHh0d2luLCBUUlVFLCAtMSk7CisJICAgIGlmIChRdWl0KGNoKSkKKwkJYnJlYWs7CisKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlICdcdCc6CisJCWluX3N0YXR1cyA9IFRSVUU7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9ET1dOOgorCSAgICBjYXNlICdqJzoKKwkJaWYgKHR4dF95IDwgZ2V0bWF4eSh0eHR3aW4pIC0gMSkKKwkJICAgIHR4dF95Kys7CisJCWVsc2UKKwkJICAgIGJlZXAoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX1VQOgorCSAgICBjYXNlICdrJzoKKwkJaWYgKHR4dF95ID4gYmFzZV95KQorCQkgICAgdHh0X3ktLTsKKwkJZWxzZQorCQkgICAgYmVlcCgpOworCQlicmVhazsKKwkgICAgY2FzZSBLRVlfTEVGVDoKKwkgICAgY2FzZSAnaCc6CisJCWlmICh0eHRfeCA+IDApCisJCSAgICB0eHRfeC0tOworCQllbHNlCisJCSAgICBiZWVwKCk7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9SSUdIVDoKKwkgICAgY2FzZSAnbCc6CisJCWlmICh0eHRfeCA8IGdldG1heHgodHh0d2luKSAtIDEpCisJCSAgICB0eHRfeCsrOworCQllbHNlCisJCSAgICBiZWVwKCk7CisJCWJyZWFrOworCSAgICBjYXNlICd3JzoKKwkJdGVzdF9vcGFxdWUobGV2ZWwgKyAxLCBhcmd2LCBzdHN3aW4pOworCQlpZiAodHh0Ym94ICE9IDApIHsKKwkJICAgIHRvdWNod2luKHR4dGJveCk7CisJCSAgICB3bm91dHJlZnJlc2godHh0Ym94KTsKKwkJfSBlbHNlIHsKKwkJICAgIHRvdWNod2luKHR4dHdpbik7CisJCSAgICB3bm91dHJlZnJlc2godHh0d2luKTsKKwkJfQorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQluYXBtcygxMDApOworCQlicmVhazsKKwkgICAgfQorCisJICAgIHNob3dfb3BhcXVlKHN0c3dpbiwgdHh0d2luLCBGQUxTRSwgLTEpOworCX0KKyAgICB9CisgICAgaWYgKGxldmVsID4gMSkgeworCWRlbHdpbih0eHR3aW4pOworCWRlbHdpbih0eHRib3gpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2V0X2VzY2RlbGF5KHZvaWQpCit7CisgICAgc2V0X2VzY2RlbGF5KCgxMDAgKyBFU0NERUxBWSkgLyAyKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2V0X3RhYnNpemUodm9pZCkKK3sKKyAgICBpbnQgeTAsIHgwOworICAgIGludCB5LCB4OworICAgIGludCBzYXZlX3RhYnNpemUgPSBUQUJTSVpFOworCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIGZvciAoeSA9IDA7IHkgPCBMSU5FUzsgKyt5KSB7CisJc2V0X3RhYnNpemUoeSArIDEpOworCWlmIChtb3ZlKHksIDApID09IEVSUikKKwkgICAgYnJlYWs7CisJZm9yICh4ID0gMDsgeCA8IENPTFM7KSB7CisJICAgIGFkZGNoKCdcdCcpOworCSAgICBpZiAoYWRkY2goJyonKSA9PSBFUlIpIHsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZ2V0eXgoc3Rkc2NyLCB5MCwgeDApOworCSAgICBpZiAoeTAgIT0geSB8fCB4MCA9PSB4KSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICBnZXRjaCgpOworICAgIGVyYXNlKCk7CisKKyAgICBzZXRfdGFic2l6ZShzYXZlX3RhYnNpemUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXSU5ET1cgKnN0c2JveDsKKyAgICBXSU5ET1cgKnN0c3dpbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmIChhcmdjIDwgMikgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGZpbGVcbiIsIGFyZ3ZbMF0pOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaW5pdHNjcigpOworCisgICAgdGVzdF9zZXRfZXNjZGVsYXkoKTsKKyAgICB0ZXN0X3NldF90YWJzaXplKCk7CisKKyAgICBzdHNib3ggPSBkZXJ3aW4oc3Rkc2NyLCBCQVNFX1ksIENPTFMsIDAsIDApOworICAgIGJveChzdHNib3gsIDAsIDApOworICAgIHdub3V0cmVmcmVzaChzdHNib3gpOworCisgICAgc3Rzd2luID0gZGVyd2luKHN0c2JveCwgQkFTRV9ZIC0gMiwgQ09MUyAtIDIsIDEsIDEpOworICAgIGtleXBhZChzdHN3aW4sIFRSVUUpOworCisgICAgdGVzdF9vcGFxdWUoMSwgYXJndiwgc3Rzd2luKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0YWRkY2guYyBiL3Rlc3QvdGVzdGFkZGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2NTFjNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdGVzdGFkZGNoLmMKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgd3JpdHRlbiBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkB5YXJzLmZyZWUubmV0PiwKKyAqIHRvIGRlbW9uc3RyYXRlIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiBuY3Vyc2VzIGFuZCBTVnI0IGN1cnNlcy4KKyAqCisgKiAkSWQ6IHRlc3RhZGRjaC5jLHYgMS42IDIwMDYvMDQvMDEgMTk6MDg6MDMgdG9tIEV4cCAkCisgKi8KKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworc3RhdGljIHZvaWQKK2F0dHJfYWRkc3RyKGNvbnN0IGNoYXIgKnMsIGNodHlwZSBhKQoreworICAgIHdoaWxlICgqcykKKwlhZGRjaCgoKHVuc2lnbmVkIGNoYXIpICgqcysrKSkgfCBhKTsKK30KKworaW50CittYWluKAorCWludCBhcmdjIEdDQ19VTlVTRUQsCisJY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICB1bnNpZ25lZCBpOworICAgIGNodHlwZSBiYWNrLCBzZXQsIGF0dHI7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpbml0c2NyKCk7CisgICAgc3RhcnRfY29sb3IoKTsKKyAgICBpbml0X3BhaXIoMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworICAgIGluaXRfcGFpcigyLCBDT0xPUl9XSElURSwgQ09MT1JfUkVEKTsKKyAgICBpbml0X3BhaXIoMywgQ09MT1JfQkxBQ0ssIENPTE9SX01BR0VOVEEpOworICAgIGluaXRfcGFpcig0LCBDT0xPUl9CTEFDSywgQ09MT1JfR1JFRU4pOworICAgIGluaXRfcGFpcig1LCBDT0xPUl9CTEFDSywgQ09MT1JfQ1lBTik7CisgICAgaW5pdF9wYWlyKDYsIENPTE9SX0JMQUNLLCBDT0xPUl9ZRUxMT1cpOworICAgIGluaXRfcGFpcig3LCBDT0xPUl9CTEFDSywgQ09MT1JfV0hJVEUpOworCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWJhY2sgPSAoaSAmIDEpID8gQV9CT0xEIHwgJ0InIDogJyAnOworCXNldCA9IChpICYgMikgPyBBX1JFVkVSU0UgOiAwOworCWF0dHIgPSAoaSAmIDQpID8gQ09MT1JfUEFJUig0KSA6IDA7CisKKwlia2dkc2V0KGJhY2spOworCWF0dHJzZXQoc2V0KTsKKworCWF0dHJfYWRkc3RyKCJUZXN0IHN0cmluZyB3aXRoIHNwYWNlcyAtPiAgIDwtXG4iLCBhdHRyKTsKKyAgICB9CisgICAgYWRkY2goJ1xuJyk7CisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWJhY2sgPSAoaSAmIDEpID8gQV9CT0xEIHwgJ0InIHwgQ09MT1JfUEFJUigxKSA6ICcgJzsKKwlzZXQgPSAoaSAmIDIpID8gQV9SRVZFUlNFIHwgQ09MT1JfUEFJUigyKSA6IDA7CisJYXR0ciA9IChpICYgNCkgPyBDT0xPUl9QQUlSKDQpIDogMDsKKworCWJrZ2RzZXQoYmFjayk7CisJYXR0cnNldChzZXQpOworCisJYXR0cl9hZGRzdHIoIlRlc3Qgc3RyaW5nIHdpdGggc3BhY2VzIC0+ICAgPC1cbiIsIGF0dHIpOworICAgIH0KKworICAgIGdldGNoKCk7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdGN1cnMuYyBiL3Rlc3QvdGVzdGN1cnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTJlNTNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC90ZXN0Y3Vycy5jCkBAIC0wLDAgKzEsNzM4IEBACisvKgorICoKKyAqIFRoaXMgaXMgYSB0ZXN0IHByb2dyYW0gZm9yIHRoZSBQREN1cnNlcyBzY3JlZW4gcGFja2FnZSBmb3IgSUJNIFBDIHR5cGUKKyAqIG1hY2hpbmVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSB3YXMgd3JpdHRlbiBieSBKb2huIEJ1cm5lbGwgKGpvaG5iQGtlYS5hbS5kc2lyLmdvdnQubnopCisgKiAgd3JzKDUvMjgvOTMpIC0tIG1vZGlmaWVkIHRvIGJlIGNvbnNpc3RlbnQgKHBlcmZvcm0gaWRlbnRpY2FsbHkpIHdpdGggZWl0aGVyCisgKiAgICAgICAgICAgICAgICAgIFBEQ3Vyc2VzIG9yIHVuZGVyIFVuaXggU3lzdGVtIFYsIFI0CisgKgorICogJElkOiB0ZXN0Y3Vycy5jLHYgMS4zOSAyMDA4LzA4LzAzIDE3OjU4OjA5IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIGRlZmluZWQoWENVUlNFUykKK2NoYXIgKlhDdXJzZXNQcm9ncmFtTmFtZSA9ICJ0ZXN0Y3VycyI7CisjZW5kaWYKKworc3RhdGljIGludCBpbml0VGVzdChXSU5ET1cgKiopOworc3RhdGljIHZvaWQgZGlzcGxheV9tZW51KGludCwgaW50KTsKK3N0YXRpYyB2b2lkIGlucHV0VGVzdChXSU5ET1cgKik7CitzdGF0aWMgdm9pZCBpbnRyb1Rlc3QoV0lORE9XICopOworc3RhdGljIHZvaWQgb3V0cHV0VGVzdChXSU5ET1cgKik7CitzdGF0aWMgdm9pZCBwYWRUZXN0KFdJTkRPVyAqKTsKK3N0YXRpYyB2b2lkIHNjcm9sbFRlc3QoV0lORE9XICopOworI2lmIGRlZmluZWQoUERDVVJTRVMpICYmICFkZWZpbmVkKFhDVVJTRVMpCitzdGF0aWMgdm9pZCByZXNpemVUZXN0KFdJTkRPVyAqKTsKKyNlbmRpZgorCitzdHJ1Y3QgY29tbWFuZHMgeworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqdGV4dDsKKyAgICB2b2lkICgqZnVuY3Rpb24pIChXSU5ET1cgKik7Cit9OwordHlwZWRlZiBzdHJ1Y3QgY29tbWFuZHMgQ09NTUFORDsKKworc3RhdGljIGNvbnN0IENPTU1BTkQgY29tbWFuZFtdID0KK3sKKyAgICB7IkdlbmVyYWwgVGVzdCIsIGludHJvVGVzdH0sCisgICAgeyJQYWQgVGVzdCIsIHBhZFRlc3R9LAorI2lmIGRlZmluZWQoUERDVVJTRVMpICYmICFkZWZpbmVkKFhDVVJTRVMpCisgICAgeyJSZXNpemUgVGVzdCIsIHJlc2l6ZVRlc3R9LAorI2VuZGlmCisgICAgeyJTY3JvbGwgVGVzdCIsIHNjcm9sbFRlc3R9LAorICAgIHsiSW5wdXQgVGVzdCIsIGlucHV0VGVzdH0sCisgICAgeyJPdXRwdXQgVGVzdCIsIG91dHB1dFRlc3R9Cit9OworI2RlZmluZSBNQVhfT1BUSU9OUyAoaW50KSBTSVpFT0YoY29tbWFuZCkKKworI2lmICFIQVZFX1NUUkRVUAorI2RlZmluZSBzdHJkdXAgbXlfc3RyZHVwCitzdGF0aWMgY2hhciAqCitzdHJkdXAoY2hhciAqcykKK3sKKyAgICBjaGFyICpwID0gdHlwZU1hbGxvYyhjaGFyLCBzdHJsZW4ocykgKyAxKTsKKyAgICBpZiAocCkKKwlzdHJjcHkocCwgcyk7CisgICAgcmV0dXJuIChwKTsKK30KKyNlbmRpZiAvKiBub3QgSEFWRV9TVFJEVVAgKi8KKworc3RhdGljIGludCB3aWR0aCwgaGVpZ2h0OworCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIFdJTkRPVyAqd2luOworICAgIGludCBrZXk7CisgICAgaW50IG9sZF9vcHRpb24gPSAoLTEpOworICAgIGludCBuZXdfb3B0aW9uID0gMDsKKyAgICBib29sIHF1aXQgPSBGQUxTRTsKKyAgICBpbnQgbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworI2lmZGVmIFBEQ0RFQlVHCisgICAgUERDX2RlYnVnKCJ0ZXN0Y3VycyBzdGFydGVkXG4iKTsKKyNlbmRpZgorICAgIGlmICghaW5pdFRlc3QoJndpbikpCisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKworICAgIGVyYXNlKCk7CisgICAgZGlzcGxheV9tZW51KG9sZF9vcHRpb24sIG5ld19vcHRpb24pOworICAgIGZvciAoOzspIHsKKyNpZmRlZiBBX0NPTE9SCisJaWYgKGhhc19jb2xvcnMoKSkgeworCSAgICBpbml0X3BhaXIoMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCSAgICB3YmtnZCh3aW4sIENPTE9SX1BBSVIoMSkpOworCX0gZWxzZQorCSAgICB3YmtnZCh3aW4sIEFfUkVWRVJTRSk7CisjZWxzZQorCXdia2dkKHdpbiwgQV9SRVZFUlNFKTsKKyNlbmRpZgorCXdlcmFzZSh3aW4pOworCisJbm9lY2hvKCk7CisJa2V5cGFkKHN0ZHNjciwgVFJVRSk7CisJcmF3KCk7CisJa2V5ID0gZ2V0Y2goKTsKKwlpZiAoa2V5IDwgS0VZX01JTiAmJiBrZXkgPiAwICYmIGlzYWxwaGEoa2V5KSkgeworCSAgICBpZiAoaXNsb3dlcihrZXkpKQorCQlrZXkgPSB0b3VwcGVyKGtleSk7CisJICAgIGZvciAobiA9IDA7IG4gPCBNQVhfT1BUSU9OUzsgKytuKSB7CisJCWlmIChrZXkgPT0gY29tbWFuZFtuXS50ZXh0WzBdKSB7CisJCSAgICBkaXNwbGF5X21lbnUob2xkX29wdGlvbiwgbmV3X29wdGlvbiA9IG4pOworCQkgICAga2V5ID0gJyAnOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKwlzd2l0Y2ggKGtleSkgeworCWNhc2UgMTA6CisJY2FzZSAxMzoKKwljYXNlIEtFWV9FTlRFUjoKKwkgICAgZXJhc2UoKTsKKwkgICAgcmVmcmVzaCgpOworCSAgICAoKmNvbW1hbmRbbmV3X29wdGlvbl0uZnVuY3Rpb24pICh3aW4pOworCSAgICBlcmFzZSgpOworCSAgICBkaXNwbGF5X21lbnUob2xkX29wdGlvbiwgbmV3X29wdGlvbik7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1VQOgorCSAgICBuZXdfb3B0aW9uID0gKChuZXdfb3B0aW9uID09IDApCisJCQkgID8gbmV3X29wdGlvbgorCQkJICA6IG5ld19vcHRpb24gLSAxKTsKKwkgICAgZGlzcGxheV9tZW51KG9sZF9vcHRpb24sIG5ld19vcHRpb24pOworCSAgICBicmVhazsKKwljYXNlIEtFWV9ET1dOOgorCSAgICBuZXdfb3B0aW9uID0gKChuZXdfb3B0aW9uID09IChNQVhfT1BUSU9OUyAtIDEpKQorCQkJICA/IG5ld19vcHRpb24KKwkJCSAgOiBuZXdfb3B0aW9uICsgMSk7CisJICAgIGRpc3BsYXlfbWVudShvbGRfb3B0aW9uLCBuZXdfb3B0aW9uKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnUSc6CisJY2FzZSAncSc6CisJICAgIHF1aXQgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgJyAnOgorCSAgICBicmVhazsKKwl9CisJaWYgKHF1aXQgPT0gVFJVRSkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVsd2luKHdpbik7CisKKyAgICBlbmR3aW4oKTsKKyNpZmRlZiBYQ1VSU0VTCisgICAgWEN1cnNlc0V4aXQoKTsKKyNlbmRpZgorICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyB2b2lkCitDb250aW51ZShXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgeTEgPSBnZXRtYXh5KHdpbik7CisgICAgaW50IHgxID0gZ2V0bWF4eCh3aW4pOworICAgIGludCB5MCA9IHkxIDwgMTAgPyB5MSA6IDEwOworICAgIGludCB4MCA9IDE7CisgICAgY2h0eXBlIHNhdmU7CisKKyAgICBzYXZlID0gbXZ3aW5jaCh3aW4sIHkwLCB4MSAtIDEpOworCisgICAgbXZ3YWRkc3RyKHdpbiwgeTAsIHgwLCAiIFByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICBnZXR5eCh3aW4sIHkwLCB4MCk7CisKKyAgICBtdndhZGRjaCh3aW4sIHkwLCB4MSAtIDEsIHNhdmUpOworCisgICAgd21vdmUod2luLCB5MCwgeDApOworICAgIHJhdygpOworICAgIHdnZXRjaCh3aW4pOworfQorCitzdGF0aWMgaW50Citpbml0VGVzdChXSU5ET1cgKip3aW4pCit7CisjaWZkZWYgUERDREVCVUcKKyAgICBQRENfZGVidWcoImluaXRUZXN0IGNhbGxlZFxuIik7CisjZW5kaWYKKyNpZmRlZiBUUkFDRQorICAgIHRyYWNlKFRSQUNFX01BWElNVU0pOworI2VuZGlmCisgICAgaW5pdHNjcigpOworI2lmZGVmIFBEQ0RFQlVHCisgICAgUERDX2RlYnVnKCJhZnRlciBpbml0c2NyKClcbiIpOworI2VuZGlmCisjaWZkZWYgQV9DT0xPUgorICAgIGlmIChoYXNfY29sb3JzKCkpCisJc3RhcnRfY29sb3IoKTsKKyNlbmRpZgorICAgIHdpZHRoID0gNjA7CisgICAgaGVpZ2h0ID0gMTM7CQkvKiBDcmVhdGUgYSBkcmF3aW5nIHdpbmRvdyAqLworICAgICp3aW4gPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgKExJTkVTIC0gaGVpZ2h0KSAvIDIsIChDT0xTIC0gd2lkdGgpIC8gMik7CisgICAgaWYgKCp3aW4gPT0gTlVMTCkgeworCWVuZHdpbigpOworCXJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2ludHJvVGVzdChXSU5ET1cgKndpbikKK3sKKyAgICB3bW92ZSh3aW4sIGhlaWdodCAvIDIgLSA1LCB3aWR0aCAvIDIpOworICAgIHd2bGluZSh3aW4sIEFDU19WTElORSwgMTApOworICAgIHdtb3ZlKHdpbiwgaGVpZ2h0IC8gMiwgd2lkdGggLyAyIC0gMTApOworICAgIHdobGluZSh3aW4sIEFDU19ITElORSwgMjApOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICBiZWVwKCk7CisgICAgd2VyYXNlKHdpbik7CisKKyAgICBib3god2luLCBBQ1NfVkxJTkUsIEFDU19ITElORSk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBjYnJlYWsoKTsKKyAgICBtdndhZGRzdHIod2luLCAxLCAxLAorCSAgICAgICJZb3Ugc2hvdWxkIGhhdmUgcmVjdGFuZ2xlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiIpOworICAgIG12d2FkZHN0cih3aW4sIDIsIDEsICJZb3Ugc2hvdWxkIGhhdmUgaGVhcmQgYSBiZWVwIik7CisgICAgQ29udGludWUod2luKTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3JvbGxUZXN0KFdJTkRPVyAqd2luKQoreworICAgIGludCBpOworICAgIGludCBoYWxmOworICAgIGludCBPbGRZOworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqTWVzc2FnZSA9ICJUaGUgd2luZG93IHdpbGwgbm93IHNjcm9sbCBzbG93bHkiOworCisgICAgd2NsZWFyKHdpbik7CisgICAgT2xkWSA9IGdldG1heHkod2luKTsKKyAgICBoYWxmID0gT2xkWSAvIDI7CisgICAgbXZ3cHJpbnR3KHdpbiwgT2xkWSAtIDIsIDEsIE1lc3NhZ2UpOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgc2Nyb2xsb2sod2luLCBUUlVFKTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IE9sZFk7IGkrKykgeworCW5hcG1zKDYwMCk7CisJc2Nyb2xsKHdpbik7CisJd3JlZnJlc2god2luKTsKKyAgICB9CisKKyAgICB3ZXJhc2Uod2luKTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgT2xkWTsgaSsrKSB7CisJbXZ3cHJpbnR3KHdpbiwgaSwgMSwgIkxpbmUgJWQiLCBpKTsKKyAgICB9CisgICAgbXZ3cHJpbnR3KHdpbiwgT2xkWSAtIDIsIDEsICJUaGUgdG9wIG9mIHRoZSB3aW5kb3cgd2lsbCBzY3JvbGwiKTsKKyAgICB3bW92ZSh3aW4sIDEsIDEpOworICAgIHdzZXRzY3JyZWcod2luLCAwLCBoYWxmIC0gMSk7CisgICAgYm94KHdpbiwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgZm9yIChpID0gMTsgaSA8PSBoYWxmOyBpKyspIHsKKwluYXBtcyg2MDApOworCXNjcm9sbCh3aW4pOworCWJveCh3aW4sIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKwl3cmVmcmVzaCh3aW4pOworICAgIH0KKworICAgIHdlcmFzZSh3aW4pOworICAgIGZvciAoaSA9IDE7IGkgPCBPbGRZOyBpKyspIHsKKwltdndwcmludHcod2luLCBpLCAxLCAiTGluZSAlZCIsIGkpOworICAgIH0KKyAgICBtdndwcmludHcod2luLCAxLCAxLCAiVGhlIGJvdHRvbSBvZiB0aGUgd2luZG93IHdpbGwgc2Nyb2xsIik7CisgICAgd21vdmUod2luLCBPbGRZIC0gMiwgMSk7CisgICAgd3NldHNjcnJlZyh3aW4sIGhhbGYsIC0tT2xkWSk7CisgICAgYm94KHdpbiwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgZm9yIChpID0gaGFsZjsgaSA8PSBPbGRZOyBpKyspIHsKKwluYXBtcyg2MDApOworCXdzY3JsKHdpbiwgLTEpOworCWJveCh3aW4sIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKwl3cmVmcmVzaCh3aW4pOworICAgIH0KKyAgICB3c2V0c2NycmVnKHdpbiwgMCwgT2xkWSk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnB1dFRlc3QoV0lORE9XICp3aW4pCit7CisgICAgaW50IGFuc3dlcmVkOworICAgIGludCByZXBlYXQ7CisgICAgaW50IHcsIGgsIGJ4LCBieSwgc3csIHNoLCBpLCBjLCBudW07CisgICAgY2hhciBidWZmZXJbODBdOworICAgIFdJTkRPVyAqc3ViV2luOworICAgIHdjbGVhcih3aW4pOworCisgICAgZ2V0bWF4eXgod2luLCBoLCB3KTsKKyAgICBnZXRiZWd5eCh3aW4sIGJ5LCBieCk7CisgICAgc3cgPSB3IC8gMzsKKyAgICBzaCA9IGggLyAzOworICAgIGlmICgoc3ViV2luID0gc3Vid2luKHdpbiwgc2gsIHN3LCBieSArIGggLSBzaCAtIDIsIGJ4ICsgdyAtIHN3IC0gMikpID09IE5VTEwpCisJcmV0dXJuOworCisjaWZkZWYgQV9DT0xPUgorICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbml0X3BhaXIoMiwgQ09MT1JfV0hJVEUsIENPTE9SX1JFRCk7CisJd2JrZ2Qoc3ViV2luLCBDT0xPUl9QQUlSKDIpIHwgQV9CT0xEKTsKKyAgICB9IGVsc2UKKwl3YmtnZChzdWJXaW4sIEFfQk9MRCk7CisjZWxzZQorICAgIHdia2dkKHN1YldpbiwgQV9CT0xEKTsKKyNlbmRpZgorICAgIGJveChzdWJXaW4sIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKyAgICB3cmVmcmVzaCh3aW4pOworCisgICAgbm9jYnJlYWsoKTsKKyAgICBtdndhZGRzdHIod2luLCAyLCAxLCAiUHJlc3Mgc29tZSBrZXlzIGZvciA1IHNlY29uZHMiKTsKKyAgICBtdndhZGRzdHIod2luLCAxLCAxLCAiUHJlc3NpbmcgXkMgc2hvdWxkIGRvIG5vdGhpbmciKTsKKyAgICB3cmVmcmVzaCh3aW4pOworCisgICAgd2VyYXNlKHN1Yldpbik7CisgICAgYm94KHN1YldpbiwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwltdndwcmludHcoc3ViV2luLCAxLCAxLCAiVGltZSA9ICVkIiwgaSk7CisJd3JlZnJlc2goc3ViV2luKTsKKwluYXBtcygxMDAwKTsKKwlmbHVzaGlucCgpOworICAgIH0KKworICAgIGRlbHdpbihzdWJXaW4pOworICAgIHdlcmFzZSh3aW4pOworICAgIGZsYXNoKCk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBuYXBtcyg1MDApOworCisgICAgbXZ3YWRkc3RyKHdpbiwgMiwgMSwgIlByZXNzIGEga2V5LCBmb2xsb3dlZCBieSBFTlRFUiIpOworICAgIHdtb3ZlKHdpbiwgOSwgMTApOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgZWNobygpOworICAgIG5vcmF3KCk7CisgICAgd2dldGNoKHdpbik7CisgICAgZmx1c2hpbnAoKTsKKworICAgIHdtb3ZlKHdpbiwgOSwgMTApOworICAgIHdkZWxjaCh3aW4pOworICAgIG12d2FkZHN0cih3aW4sIDQsIDEsICJUaGUgY2hhcmFjdGVyIHNob3VsZCBub3cgaGF2ZSBiZWVuIGRlbGV0ZWQiKTsKKyAgICBDb250aW51ZSh3aW4pOworCisgICAgd2NsZWFyKHdpbik7CisgICAgbXZ3YWRkc3RyKHdpbiwgMSwgMSwgIlByZXNzIGtleXMgKG9yIG1vdXNlIGJ1dHRvbnMpIHRvIHNob3cgdGhlaXIgbmFtZXMiKTsKKyAgICBtdndhZGRzdHIod2luLCAyLCAxLCAiUHJlc3Mgc3BhY2ViYXIgdG8gZmluaXNoIik7CisgICAgd3JlZnJlc2god2luKTsKKworICAgIGtleXBhZCh3aW4sIFRSVUUpOworICAgIHJhdygpOworICAgIG5vZWNobygpOworCisjaWYgSEFWRV9UWVBFQUhFQUQKKyAgICB0eXBlYWhlYWQoLTEpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBEQ1VSU0VTKQorICAgIG1vdXNlX3NldChBTExfTU9VU0VfRVZFTlRTKTsKKyNlbmRpZgorCisgICAgZm9yICg7OykgeworCXdtb3ZlKHdpbiwgMywgNSk7CisJYyA9IHdnZXRjaCh3aW4pOworCXdjbHJ0b2JvdCh3aW4pOworCWlmIChjID49IEtFWV9NSU4pCisJICAgIHdwcmludHcod2luLCAiS2V5IFByZXNzZWQ6ICVzIiwga2V5bmFtZShjKSk7CisJZWxzZSBpZiAoaXNwcmludChjKSkKKwkgICAgd3ByaW50dyh3aW4sICJLZXkgUHJlc3NlZDogJWMiLCBjKTsKKwllbHNlCisJICAgIHdwcmludHcod2luLCAiS2V5IFByZXNzZWQ6ICVzIiwgdW5jdHJsKFVDaGFyKGMpKSk7CisjaWYgZGVmaW5lZChQRENVUlNFUykKKwlpZiAoYyA9PSBLRVlfTU9VU0UpIHsKKwkgICAgaW50IGJ1dHRvbiA9IDA7CisJICAgIHJlcXVlc3RfbW91c2VfcG9zKCk7CisJICAgIGlmIChCVVRUT05fQ0hBTkdFRCgxKSkKKwkJYnV0dG9uID0gMTsKKwkgICAgZWxzZSBpZiAoQlVUVE9OX0NIQU5HRUQoMikpCisJCWJ1dHRvbiA9IDI7CisJICAgIGVsc2UgaWYgKEJVVFRPTl9DSEFOR0VEKDMpKQorCQlidXR0b24gPSAzOworCSAgICBlbHNlCisJCWJ1dHRvbiA9IDA7CisJICAgIHdtb3ZlKHdpbiwgNCwgMTgpOworCSAgICB3cHJpbnR3KHdpbiwgIkJ1dHRvbiAlZDogIiwgYnV0dG9uKTsKKwkgICAgaWYgKE1PVVNFX01PVkVEKQorCQl3cHJpbnR3KHdpbiwgIm1vdmVkOiAiKTsKKwkgICAgZWxzZSBpZiAoKEJVVFRPTl9TVEFUVVMoYnV0dG9uKSAmIEJVVFRPTl9BQ1RJT05fTUFTSykgPT0gQlVUVE9OX1BSRVNTRUQpCisJCXdwcmludHcod2luLCAicHJlc3NlZDogIik7CisJICAgIGVsc2UgaWYgKChCVVRUT05fU1RBVFVTKGJ1dHRvbikgJiBCVVRUT05fQUNUSU9OX01BU0spID09IEJVVFRPTl9ET1VCTEVfQ0xJQ0tFRCkKKwkJd3ByaW50dyh3aW4sICJkb3VibGU6ICIpOworCSAgICBlbHNlCisJCXdwcmludHcod2luLCAicmVsZWFzZWQ6ICIpOworCSAgICB3cHJpbnR3KHdpbiwgIiBQb3NpdGlvbjogWTogJWQgWDogJWQiLCBNT1VTRV9ZX1BPUywgTU9VU0VfWF9QT1MpOworCX0KKyNlbmRpZgorCXdyZWZyZXNoKHdpbik7CisJaWYgKGMgPT0gJyAnKQorCSAgICBicmVhazsKKyAgICB9CisjaWYgMAorICAgIG5vZGVsYXkod2luLCBUUlVFKTsKKyAgICB3Z2V0Y2god2luKTsKKyAgICBub2RlbGF5KHdpbiwgRkFMU0UpOworI2VuZGlmCisjaWYgZGVmaW5lZChQRENVUlNFUykKKyAgICBtb3VzZV9zZXQoMEwpOworI2VuZGlmCisgICAgcmVmcmVzaCgpOworCisgICAgcmVwZWF0ID0gMDsKKyAgICBkbyB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmZtdFtdID0KKwl7CisJICAgICIlZCAlMTBzIiwKKwkgICAgIiVkICVbYS16QS1aXXMiLAorCSAgICAiJWQgJVtdW2EtekEtWl1zIiwKKwkgICAgIiVkICVbXjAtOV0iCisJfTsKKwljb25zdCBjaGFyICpmb3JtYXQgPSBmbXRbcmVwZWF0ICUgU0laRU9GKGZtdCldOworCisJd2NsZWFyKHdpbik7CisJbXZ3YWRkc3RyKHdpbiwgMywgMiwgIlRoZSB3aW5kb3cgc2hvdWxkIGhhdmUgbW92ZWQiKTsKKwltdndhZGRzdHIod2luLCA0LCAyLAorCQkgICJUaGlzIHRleHQgc2hvdWxkIGhhdmUgYXBwZWFyZWQgd2l0aG91dCB5b3UgcHJlc3NpbmcgYSBrZXkiKTsKKwltdndwcmludHcod2luLCA2LCAyLAorCQkgICJTY2FubmluZyB3aXRoIGZvcm1hdCBcIiVzXCIiLCBmb3JtYXQpOworCW12d2luKHdpbiwgMiArIDIgKiAocmVwZWF0ICUgNCksIDEgKyAyICogKHJlcGVhdCAlIDQpKTsKKwllcmFzZSgpOworCXJlZnJlc2goKTsKKwl3cmVmcmVzaCh3aW4pOworCWVjaG8oKTsKKwlub3JhdygpOworCW51bSA9IDA7CisJKmJ1ZmZlciA9IDA7CisJYW5zd2VyZWQgPSBtdndzY2Fudyh3aW4sIDcsIDYsIHN0cmR1cChmb3JtYXQpLCAmbnVtLCBidWZmZXIpOworCW12d3ByaW50dyh3aW4sIDgsIDYsCisJCSAgIlN0cmluZzogJXMgTnVtYmVyOiAlZCAoJWQgdmFsdWVzIHJlYWQpIiwKKwkJICBidWZmZXIsIG51bSwgYW5zd2VyZWQpOworCUNvbnRpbnVlKHdpbik7CisJKytyZXBlYXQ7CisgICAgfSB3aGlsZSAoYW5zd2VyZWQgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK291dHB1dFRlc3QoV0lORE9XICp3aW4pCit7CisgICAgV0lORE9XICp3aW4xOworICAgIGNoYXIgQnVmZmVyWzgwXTsKKyAgICBjaHR5cGUgY2g7CisgICAgaW50IGJ5LCBieDsKKworI2lmICFIQVZFX1RJR0VUU1RSCisjaWYgSEFWRV9UR0VURU5UCisgICAgY2hhciB0Y19idWZmZXJbNDA5Nl07CisgICAgY2hhciB0Y19wYXJzZWRbNDA5Nl07CisgICAgY2hhciAqYXJlYV9wb2ludGVyID0gdGNfcGFyc2VkOworICAgIHRnZXRlbnQodGNfYnVmZmVyLCBnZXRlbnYoIlRFUk0iKSk7CisjZWxzZQorI2RlZmluZSB0Z2V0c3RyKGEsYikgMAorI2VuZGlmCisjZW5kaWYgLyogIUhBVkVfVElHRVRTVFIgKi8KKworICAgIG5sKCk7CisgICAgd2NsZWFyKHdpbik7CisgICAgbXZ3YWRkc3RyKHdpbiwgMSwgMSwKKwkgICAgICAiWW91IHNob3VsZCBub3cgaGF2ZSBhIHNjcmVlbiBpbiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIsIGFuZCB0aGlzIHRleHQgc2hvdWxkIGhhdmUgd3JhcHBlZCIpOworICAgIG12d2luKHdpbiwgMiwgMSk7CisgICAgd2FkZHN0cih3aW4sICJcblRoaXMgdGV4dCBzaG91bGQgYmUgZG93blxuIik7CisgICAgd2FkZHN0cih3aW4sICJhbmQgYnJva2VuIGludG8gdHdvIGhlcmUgXiIpOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICB3Y2xlYXIod2luKTsKKyAgICB3YXR0cm9uKHdpbiwgQV9CT0xEKTsKKyAgICBtdndhZGRzdHIod2luLCAxLCAxLCAiQSBuZXcgd2luZG93IHdpbGwgYXBwZWFyIHdpdGggdGhpcyB0ZXh0IGluIGl0Iik7CisgICAgbXZ3YWRkc3RyKHdpbiwgOCwgMSwgIlByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIHdnZXRjaCh3aW4pOworCisgICAgZ2V0YmVneXgod2luLCBieSwgYngpOworCisgICAgaWYgKExJTkVTIDwgMjQgfHwgQ09MUyA8IDc1KSB7CisJbXZ3YWRkc3RyKHdpbiwgNSwgMSwKKwkJICAiU29tZSB0ZXN0cyBoYXZlIGJlZW4gc2tpcHBlZCBhcyB0aGV5IHJlcXVpcmUgYSIpOworCW12d2FkZHN0cih3aW4sIDYsIDEsICJkaXNwbGF5IG9mIGF0IGxlYXN0IDI0IExJTkVTIGJ5IDc1IENPTFVNTlMiKTsKKwlDb250aW51ZSh3aW4pOworICAgIH0gZWxzZSB7CisJd2luMSA9IG5ld3dpbigxMCwgNTAsIDE0LCAyNSk7CisJaWYgKHdpbjEgPT0gTlVMTCkgeworCSAgICBlbmR3aW4oKTsKKwkgICAgcmV0dXJuOworCX0KKyNpZmRlZiBBX0NPTE9SCisJaWYgKGhhc19jb2xvcnMoKSkgeworCSAgICBpbml0X3BhaXIoMywgQ09MT1JfQkxVRSwgQ09MT1JfV0hJVEUpOworCSAgICB3YmtnZCh3aW4xLCBDT0xPUl9QQUlSKDMpKTsKKwl9IGVsc2UKKwkgICAgd2JrZ2Qod2luMSwgQV9OT1JNQUwpOworI2Vsc2UKKwl3YmtnZCh3aW4xLCBBX05PUk1BTCk7CisjZW5kaWYKKwl3Y2xlYXIod2luMSk7CisJbXZ3YWRkc3RyKHdpbjEsIDUsIDEsCisJCSAgIlRoaXMgdGV4dCBzaG91bGQgYXBwZWFyOyB1c2luZyBvdmVybGF5IG9wdGlvbiIpOworCWNvcHl3aW4od2luLCB3aW4xLCAwLCAwLCAwLCAwLCA5LCA0OSwgVFJVRSk7CisKKyNpZiBkZWZpbmVkKFBEQ1VSU0VTKSAmJiAhZGVmaW5lZChYQ1VSU0VTKQorCWJveCh3aW4xLCAweGIzLCAweGM0KTsKKyNlbHNlCisJYm94KHdpbjEsIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKyNlbmRpZgorCXdtb3ZlKHdpbjEsIDgsIDI2KTsKKwl3cmVmcmVzaCh3aW4xKTsKKwl3Z2V0Y2god2luMSk7CisKKwl3Y2xlYXIod2luMSk7CisJd2F0dHJvbih3aW4xLCBBX0JMSU5LKTsKKwltdndhZGRzdHIod2luMSwgNCwgMSwKKwkJICAiVGhpcyBibGlua2luZyB0ZXh0IHNob3VsZCBhcHBlYXIgaW4gb25seSB0aGUgc2Vjb25kIHdpbmRvdyIpOworCXdhdHRyb2ZmKHdpbjEsIEFfQkxJTkspOworCW12d2luKHdpbjEsIGJ5LCBieCk7CisJb3ZlcmxheSh3aW4sIHdpbjEpOworCW12d2luKHdpbjEsIDE0LCAyNSk7CisJd21vdmUod2luMSwgOCwgMjYpOworCXdyZWZyZXNoKHdpbjEpOworCXdnZXRjaCh3aW4xKTsKKwlkZWx3aW4od2luMSk7CisgICAgfQorCisgICAgY2xlYXIoKTsKKyAgICB3Y2xlYXIod2luKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIG12d2FkZHN0cih3aW4sIDYsIDIsICJUaGlzIGxpbmUgc2hvdWxkbid0IGFwcGVhciIpOworICAgIG12d2FkZHN0cih3aW4sIDQsIDIsICJPbmx5IGhhbGYgb2YgdGhlIG5leHQgbGluZSBpcyB2aXNpYmxlIik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNSwgMiwgIk9ubHkgaGFsZiBvZiB0aGUgbmV4dCBsaW5lIGlzIHZpc2libGUiKTsKKyAgICB3bW92ZSh3aW4sIDYsIDEpOworICAgIHdjbHJ0b2JvdCh3aW4pOworICAgIHdtb3ZlKHdpbiwgNSwgMjApOworICAgIHdjbHJ0b2VvbCh3aW4pOworICAgIG12d2FkZHN0cih3aW4sIDgsIDIsICJUaGlzIGxpbmUgYWxzbyBzaG91bGRuJ3QgYXBwZWFyIik7CisgICAgd21vdmUod2luLCA4LCAxKTsKKyAgICB3ZGVsZXRlbG4od2luKTsKKyAgICBDb250aW51ZSh3aW4pOworCisgICAgd21vdmUod2luLCA1LCA5KTsKKyAgICBjaCA9IHdpbmNoKHdpbik7CisKKyAgICB3Y2xlYXIod2luKTsKKyAgICB3bW92ZSh3aW4sIDYsIDIpOworICAgIHdhZGRzdHIod2luLCAiVGhlIG5leHQgY2hhciBzaG91bGQgYmUgbDogICIpOworICAgIHdpbnNjaCh3aW4sIGNoKTsKKyAgICBDb250aW51ZSh3aW4pOworCisjaWYgSEFWRV9XSU5TU1RSCisgICAgbXZ3aW5zc3RyKHdpbiwgNiwgMiwgIkExQjJDM0Q0RTUiKTsKKyAgICBDb250aW51ZSh3aW4pOworI2VuZGlmCisKKyAgICB3bW92ZSh3aW4sIDUsIDEpOworICAgIHdpbnNlcnRsbih3aW4pOworICAgIG12d2FkZHN0cih3aW4sIDUsIDIsICJUaGUgbGluZXMgYmVsb3cgc2hvdWxkIGhhdmUgbW92ZWQgZG93biIpOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICB3Y2xlYXIod2luKTsKKyAgICB3bW92ZSh3aW4sIDIsIDIpOworICAgIHdwcmludHcod2luLCAiVGhpcyBpcyBhIGZvcm1hdHRlZCBzdHJpbmcgaW4gYSB3aW5kb3c6ICVkICVzXG4iLCA0MiwKKwkgICAgImlzIGl0Iik7CisgICAgbXZ3YWRkc3RyKHdpbiwgMTAsIDEsICJFbnRlciBhIHN0cmluZzogIik7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBub3JhdygpOworICAgIGVjaG8oKTsKKyAgICAqQnVmZmVyID0gMDsKKyAgICB3c2Nhbncod2luLCAiJXMiLCBCdWZmZXIpOworCisgICAgcHJpbnR3KCJUaGlzIGlzIGEgZm9ybWF0dGVkIHN0cmluZyBpbiBzdGRzY3I6ICVkICVzXG4iLCA0MiwgImlzIGl0Iik7CisgICAgbXZhZGRzdHIoMTAsIDEsICJFbnRlciBhIHN0cmluZzogIik7CisgICAgKkJ1ZmZlciA9IDA7CisgICAgc2NhbncoIiVzIiwgQnVmZmVyKTsKKworICAgIGlmIChUSUdFVFNUUigiY3Z2aXMiLCAidnMiKSAhPSAwKSB7CisJd2NsZWFyKHdpbik7CisJY3Vyc19zZXQoMik7CisJbXZ3YWRkc3RyKHdpbiwgMSwgMSwgIlRoZSBjdXJzb3Igc2hvdWxkIGFwcGVhciBhcyBhIGJsb2NrICh2aXNpYmxlKSIpOworCUNvbnRpbnVlKHdpbik7CisgICAgfQorCisgICAgaWYgKFRJR0VUU1RSKCJjaXZpcyIsICJ2aSIpICE9IDApIHsKKwl3Y2xlYXIod2luKTsKKwljdXJzX3NldCgwKTsKKwltdndhZGRzdHIod2luLCAxLCAxLAorCQkgICJUaGUgY3Vyc29yIHNob3VsZCBoYXZlIGRpc2FwcGVhcmVkIChpbnZpc2libGUpIik7CisJQ29udGludWUod2luKTsKKyAgICB9CisKKyAgICBpZiAoVElHRVRTVFIoImNub3JtIiwgInZlIikgIT0gMCkgeworCXdjbGVhcih3aW4pOworCWN1cnNfc2V0KDEpOworCW12d2FkZHN0cih3aW4sIDEsIDEsICJUaGUgY3Vyc29yIHNob3VsZCBiZSBhbiB1bmRlcmxpbmUgKG5vcm1hbCkiKTsKKwlDb250aW51ZSh3aW4pOworICAgIH0KKyNpZmRlZiBBX0NPTE9SCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCXdjbGVhcih3aW4pOworCW12d2FkZHN0cih3aW4sIDEsIDEsICJDb2xvcnMgc2hvdWxkIGNoYW5nZSBhZnRlciB5b3UgcHJlc3MgYSBrZXkiKTsKKwlDb250aW51ZSh3aW4pOworCWluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX1dISVRFKTsKKwl3cmVmcmVzaCh3aW4pOworICAgIH0KKyNlbmRpZgorCisgICAgd2VyYXNlKHdpbik7CisKKyNpZiBIQVZFX1RFUk1OQU1FCisgICAgbXZ3YWRkc3RyKHdpbiwgMSwgMSwgIkluZm9ybWF0aW9uIEFib3V0IFlvdXIgVGVybWluYWwiKTsKKyAgICBtdndhZGRzdHIod2luLCAzLCAxLCB0ZXJtbmFtZSgpKTsKKyAgICBtdndhZGRzdHIod2luLCA0LCAxLCBsb25nbmFtZSgpKTsKKyAgICBpZiAodGVybWF0dHJzKCkgJiBBX0JMSU5LKQorCW12d2FkZHN0cih3aW4sIDUsIDEsICJUaGlzIHRlcm1pbmFsIHN1cHBvcnRzIGJsaW5raW5nLiIpOworICAgIGVsc2UKKwltdndhZGRzdHIod2luLCA1LCAxLCAiVGhpcyB0ZXJtaW5hbCBkb2VzIE5PVCBzdXBwb3J0IGJsaW5raW5nLiIpOworI2VuZGlmCisKKyAgICBtdndhZGRuc3RyKHdpbiwgNywgNSwgIkhhdmUgYSBuaWNlIGRheSFvayIsIDE2KTsKKyAgICB3cmVmcmVzaCh3aW4pOworCisgICAgbXZ3aW5uc3RyKHdpbiwgNywgNSwgQnVmZmVyLCAxOCk7CisgICAgbXZhZGRzdHIoTElORVMgLSAyLCAxMCwgQnVmZmVyKTsKKyAgICByZWZyZXNoKCk7CisgICAgQ29udGludWUod2luKTsKK30KKworI2lmIGRlZmluZWQoUERDVVJTRVMpICYmICFkZWZpbmVkKFhDVVJTRVMpCitzdGF0aWMgdm9pZAorcmVzaXplVGVzdChXSU5ET1cgKmR1bW15IEdDQ19VTlVTRUQpCit7CisgICAgV0lORE9XICp3aW4xOworCisgICAgc2F2ZXR0eSgpOworCisgICAgY2xlYXIoKTsKKyAgICByZWZyZXNoKCk7CisjICBpZiBkZWZpbmVkKE9TMikKKyAgICByZXNpemVfdGVybSg1MCwgMTIwKTsKKyMgIGVsc2UKKyAgICByZXNpemVfdGVybSg1MCwgODApOworIyAgZW5kaWYKKworICAgIHdpbjEgPSBuZXd3aW4oMTAsIDUwLCAxNCwgMjUpOworICAgIGlmICh3aW4xID09IE5VTEwpIHsKKwllbmR3aW4oKTsKKwlyZXR1cm47CisgICAgfQorI2lmZGVmIEFfQ09MT1IKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaW5pdF9wYWlyKDMsIENPTE9SX0JMVUUsIENPTE9SX1dISVRFKTsKKwl3YXR0cnNldCh3aW4xLCBDT0xPUl9QQUlSKDMpKTsKKyAgICB9CisjZW5kaWYKKyAgICB3Y2xlYXIod2luMSk7CisKKyAgICBtdndhZGRzdHIod2luMSwgMSwgMSwgIlRoZSBzY3JlZW4gbWF5IG5vdyBoYXZlIDUwIGxpbmVzIik7CisgICAgQ29udGludWUod2luMSk7CisKKyAgICB3Y2xlYXIod2luMSk7CisgICAgcmVzZXR0eSgpOworCisgICAgbXZ3YWRkc3RyKHdpbjEsIDEsIDEsICJUaGUgc2NyZWVuIHNob3VsZCBub3cgYmUgcmVzZXQiKTsKKyAgICBDb250aW51ZSh3aW4xKTsKKworICAgIGRlbHdpbih3aW4xKTsKKworICAgIGNsZWFyKCk7CisgICAgcmVmcmVzaCgpOworCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK3BhZFRlc3QoV0lORE9XICpkdW1teSBHQ0NfVU5VU0VEKQoreworICAgIFdJTkRPVyAqcGFkLCAqc3BhZDsKKworICAgIGlmICgocGFkID0gbmV3cGFkKDUwLCAxMDApKSAhPSAwKSB7CisJd2F0dHJvbihwYWQsIEFfUkVWRVJTRSk7CisJbXZ3YWRkc3RyKHBhZCwgNSwgMiwgIlRoaXMgaXMgYSBuZXcgcGFkIik7CisJd2F0dHJzZXQocGFkLCBBX05PUk1BTCk7CisJbXZ3YWRkc3RyKHBhZCwgOCwgMCwKKwkJICAiVGhlIGVuZCBvZiB0aGlzIGxpbmUgc2hvdWxkIGJlIHRydW5jYXRlZCBoZXJlOmV4Y2VwdCAgbm93Iik7CisJbXZ3YWRkc3RyKHBhZCwgMTEsIDEsICJUaGlzIGxpbmUgc2hvdWxkIG5vdCBhcHBlYXIuSXQgd2lsbCBub3ciKTsKKwl3bW92ZShwYWQsIDEwLCAxKTsKKwl3Y2xydG9lb2wocGFkKTsKKwltdndhZGRzdHIocGFkLCAxMCwgMSwgIiBQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisJcHJlZnJlc2gocGFkLCAwLCAwLCAwLCAwLCAxMCwgNDUpOworCWtleXBhZChwYWQsIFRSVUUpOworCXJhdygpOworCXdnZXRjaChwYWQpOworCisJc3BhZCA9IHN1YnBhZChwYWQsIDEyLCAyNSwgNiwgNTIpOworCW12d2FkZHN0cihzcGFkLCAyLCAyLCAiVGhpcyBpcyBhIG5ldyBzdWJwYWQiKTsKKwlib3goc3BhZCwgMCwgMCk7CisJcHJlZnJlc2gocGFkLCAwLCAwLCAwLCAwLCAxNSwgNzUpOworCWtleXBhZChwYWQsIFRSVUUpOworCXJhdygpOworCXdnZXRjaChwYWQpOworCisJbXZ3YWRkc3RyKHBhZCwgMzUsIDIsICJUaGlzIGlzIGRpc3BsYXllZCBhdCBsaW5lIDM1IGluIHRoZSBwYWQiKTsKKwltdndhZGRzdHIocGFkLCA0MCwgMSwgIiBQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisJcHJlZnJlc2gocGFkLCAzMCwgMCwgMCwgMCwgMTAsIDQ1KTsKKwlrZXlwYWQocGFkLCBUUlVFKTsKKwlyYXcoKTsKKwl3Z2V0Y2gocGFkKTsKKworCWRlbHdpbihwYWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2Rpc3BsYXlfbWVudShpbnQgb2xkX29wdGlvbiwgaW50IG5ld19vcHRpb24pCit7CisgICAgaW50IGk7CisKKyAgICBhc3NlcnQoKG5ld19vcHRpb24gPj0gMCkgJiYgKG5ld19vcHRpb24gPCBNQVhfT1BUSU9OUykpOworCisgICAgYXR0cnNldChBX05PUk1BTCk7CisgICAgbXZhZGRzdHIoMywgMjAsICJQREN1cnNlcyBUZXN0IFByb2dyYW0iKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBNQVhfT1BUSU9OUzsgaSsrKQorCW12YWRkc3RyKDUgKyBpLCAyNSwgY29tbWFuZFtpXS50ZXh0KTsKKworICAgIGlmICgob2xkX29wdGlvbiA+PSAwKSAmJiAob2xkX29wdGlvbiA8IE1BWF9PUFRJT05TKSkKKwltdmFkZHN0cig1ICsgb2xkX29wdGlvbiwgMjUsIGNvbW1hbmRbb2xkX29wdGlvbl0udGV4dCk7CisKKyAgICBhdHRyc2V0KEFfUkVWRVJTRSk7CisgICAgbXZhZGRzdHIoNSArIG5ld19vcHRpb24sIDI1LCBjb21tYW5kW25ld19vcHRpb25dLnRleHQpOworICAgIGF0dHJzZXQoQV9OT1JNQUwpOworICAgIG12YWRkc3RyKDEzLCAzLAorCSAgICAgIlVzZSBVcCBhbmQgRG93biBBcnJvd3MgdG8gc2VsZWN0IC0gRW50ZXIgdG8gcnVuIC0gUSB0byBxdWl0Iik7CisgICAgcmVmcmVzaCgpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0c2NhbncuYyBiL3Rlc3QvdGVzdHNjYW53LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1ODljMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdGVzdHNjYW53LmMKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGdsZWFuZWQgZnJvbSBhIHdlYi1zZWFyY2gsIHNob3dzIGEgYnVnIGNvbWJpbmluZyBzY2FudyBhbmQgaW1wbGljaXQgc2Nyb2xsLgorICogRGF0ZTogIDE5OTcvMDMvMTcKKyAqIEZyb206ICBiYXllcm5AbW9ycGhldXMuY2lzLnlhbGUuZWR1CisgKgorICogJElkOiB0ZXN0c2NhbncuYyx2IDEuMTEgMjAwNi8wNC8wMSAxOTowODowMyB0b20gRXhwICQKKyAqLworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBsb25nIGJhZGFuc3dlciA9IDE7CisgICAgbG9uZyAqcmVzcG9uc2UgPSAmYmFkYW5zd2VyOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaW5pdHNjcigpOworICAgIHNjcm9sbG9rKHN0ZHNjciwgVFJVRSk7CisgICAgaWRsb2soc3Rkc2NyLCBUUlVFKTsKKyAgICBlY2hvKCk7CisKKyNpZiAwCisgICAgdHJhY2UoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfQ0FMTFMpOworI2VuZGlmCisgICAgd2hpbGUgKGFyZ2MgPiAxKSB7CisJaWYgKGlzZGlnaXQoVUNoYXIoKmFyZ3ZbMV0pKSkKKwkgICAgbW92ZShhdG9pKGFyZ3ZbMV0pLCAwKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItayIpKQorCSAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKwlhcmdjLS0sIGFyZ3YrKzsKKyAgICB9CisKKyAgICB3aGlsZSAoYmFkYW5zd2VyKSB7CisJcHJpbnR3KCJFbnRlciBhIG51bWJlciAoMCB0byBxdWl0KTpcbiIpOworCXByaW50dygiLS0+ICIpOworCXNjYW53KCIlMjBsZCIsIHJlc3BvbnNlKTsJLyogeWVzLCBpdCdzIGEgcG9pbnRlciAqLworICAgIH0KKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC90cmFjZW11bmNoIGIvdGVzdC90cmFjZW11bmNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlYTZmNGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3RyYWNlbXVuY2gKQEAgLTAsMCArMSwxNjEgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAkSWQ6IHRyYWNlbXVuY2gsdiAxLjYgMjAwNS8wMy8xMiAyMTo0ODoyMyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdHJhY2VtdW5jaCAtLSBjb21wYWN0aWZ5IG5jdXJzZXMgdHJhY2UgbG9ncworIworIyBUaGUgZXJyb3IgbG9ncyBwcm9kdWNlZCBieSBuY3Vyc2VzIHdpdGggdHJhY2luZyBlbmFibGVkIGNhbiBiZSB2ZXJ5IHRlZGlvdXMKKyMgdG8gd2FkZSB0aHJvdWdoLiAgVGhpcyBzY3JpcHQgaGVscHMgYnkgY29tcGFjdGluZyBydW5zIG9mIGxvZyBsaW5lcyB0aGF0CisjIGNhbiBiZSBjb252ZW5pZW50bHkgZXhwcmVzc2VkIGFzIGhpZ2hlci1sZXZlbCBvcGVyYXRpb25zLgordXNlIHN0cmljdDsKKworb3VyICRwdXRhdHRyPSJQdXRBdHRyQ2hhclxcKHt7ICcoLiknID0gMFswLTddKyB9fVxcKSBhdCBcXCgoWzAtOV0rKSwgKFswLTldKylcXCkiOworb3VyICR3YWRkbnN0cj0id2FkZG5zdHJcXCgweChbMC05YS1mXSspLFwiKFteXCJdKylcIixbMC05XStcXCkgY2FsbGVkIHtBX05PUk1BTH0iOworCitvdXIgJHdpbl9udW1zPTA7CitvdXIgJGN1cnNjcj0iIjsKK291ciAkbmV3c2NyPSIiOworb3VyICRzdGRzY3I9IiI7CitvdXIgQHdpbl9hZGRyOworCitzdWIgdHJhbnNhZGRyCit7CisgICAgbXkgJG47CisgICAgbXkgJGFyZyA9ICRfWzBdOworCisgICAgJGFyZyA9fiBzLyRjdXJzY3IvY3Vyc2NyL2cgaWYgKCRjdXJzY3IpOworICAgICRhcmcgPX4gcy8kbmV3c2NyL25ld3Njci9nIGlmICgkbmV3c2NyKTsKKyAgICAkYXJnID1+IHMvJHN0ZHNjci9zdGRzY3IvZyBpZiAoJHN0ZHNjcik7CisgICAgZm9yICRuICgwLi4kI3dpbl9hZGRyKSB7CisJJGFyZyA9fiBzLyR3aW5fYWRkclskbl0vd2luZG93JG4vZyBpZiAkd2luX2FkZHJbJG5dOworICAgIH0KKworICAgIHJldHVybiAkYXJnOworfQorCit3aGlsZSAoPFNURElOPikKK3sKKwlteSAkYWRkcjsKKwlteSAkbjsKKwlteSAkYXdhaXRpbmc7CisKK0NMQVNTSUZZOiB7CisJIyBUcmFuc2Zvcm0gd2luZG93IHBvaW50ZXIgYWRkcmVzc2VzIHNvIGl0J3MgZWFzaWVyIHRvIGNvbXBhcmUgbG9ncworCSRhd2FpdGluZyA9ICJjdXJzY3IiIGlmICgkXyA9fiAvY3JlYXRpbmcgY3Vyc2NyLyk7CisJJGF3YWl0aW5nID0gIm5ld3NjciIgaWYgKCRfID1+IC9jcmVhdGluZyBuZXdzY3IvKTsKKwkkYXdhaXRpbmcgPSAic3Rkc2NyIiBpZiAoJF8gPX4gL2NyZWF0aW5nIHN0ZHNjci8pOworCWlmICgkXyA9fiAvXmNyZWF0ZSA6d2luZG93IDB4KFswLTlhLWZdKykvKSB7CisJICAgICRhZGRyID0gIjB4JDEiOworCSAgICBpZiAoJGF3YWl0aW5nIGVxICJjdXJzY3IiKSB7CisJCSRjdXJzY3IgPSAkYWRkcjsKKwkgICAgfSBlbHNpZiAoJGF3YWl0aW5nIGVxICJuZXdzY3IiKSB7CisJCSRuZXdzY3IgPSAkYWRkcjsKKwkgICAgfSBlbHNpZiAoJGF3YWl0aW5nIGVxICJzdGRzY3IiKSB7CisJCSRzdGRzY3IgPSAkYWRkcjsKKwkgICAgfSBlbHNlIHsKKwkJJHdpbl9hZGRyWyR3aW5fbnVtc10gPSAkYWRkcjsKKwkJJHdpbl9udW1zID0gJHdpbl9udW1zICsgMTsKKwkgICAgfQorCSAgICAkYXdhaXRpbmcgPSAiIjsKKwl9IGVsc2lmICgkXyA9fiAvXlwuXC5cLmRlbGV0ZWQgd2luPTB4KFswLTlhLWZdKykvKSB7CisJICAgICRhZGRyID0gIjB4JDEiOworCSAgICAkXyA9ICZ0cmFuc2FkZHIoJF8pOworCSAgICBpZiAoJGFkZHIgZXEgJGN1cnNjcikgeworCQkkY3Vyc2NyID0gIiI7CisJICAgIH0gZWxzaWYgKCRhZGRyIGVxICRuZXdzY3IpIHsKKwkJJG5ld3NjciA9ICIiOworCSAgICB9IGVsc2lmICgkYWRkciBlcSAkc3Rkc2NyKSB7CisJCSRzdGRzY3IgPSAiIjsKKwkgICAgfSBlbHNlIHsKKwkJZm9yICRuICgwLi4kI3dpbl9hZGRyKSB7CisJCSAgICBpZiAoJHdpbl9hZGRyWyRuXSBlcSAkYWRkcikgeworCQkJJHdpbl9hZGRyWyRuXSA9ICIiOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKwkjIENvbXBhY3RpZnkgcnVucyBvZiBQdXRBdHRyQ2hhciBjYWxscyAoVFJfQ0hBUlBVVCkKKwlpZiAoJF8gPX4gLyRwdXRhdHRyLykKKwl7CisJCW15ICRwdXRhdHRyX2NoYXJzID0gJDE7CisJCW15ICRzdGFydHkgPSAkMjsKKwkJbXkgJHN0YXJ0eCA9ICQzOworCQl3aGlsZSAoPFNURElOPikKKwkJeworCQkJaWYgKCRfID1+IC8kcHV0YXR0ci8pIHsKKwkJCQkkcHV0YXR0cl9jaGFycyAuPSAkMTsKKwkJCX0gZWxzZSB7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQlwcmludCAiUlVOIG9mIFB1dEF0dHJDaGFyKClzOiBcIiRwdXRhdHRyX2NoYXJzXCIgZnJvbSAke3N0YXJ0eX0sICR7c3RhcnR4fVxuIjsKKwkJcmVkbyBDTEFTU0lGWTsKKwl9CisKKwkjIENvbXBhY3RpZnkgcnVucyBvZiB3YWRkbnN0ciBjYWxscyAoVFJfQ0FMTFMpCisJaWYgKCRfID1+IC8kd2FkZG5zdHIvKQorCXsKKwkJbXkgJHdhZGRuc3RyX2NoYXJzID0gJDI7CisJCW15ICR3aW5hZGRyID0gJDE7CisJCXdoaWxlICg8U1RESU4+KQorCQl7CisJCQlpZiAoJF8gPX4gLyR3YWRkbnN0ci8gJiYgJDEgZXEgJHdpbmFkZHIpIHsKKwkJCQkkd2FkZG5zdHJfY2hhcnMgLj0gJDI7CisJCQl9IGVsc2UgeworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJbXkgJHdpbmFkZHN0ciA9ICZ0cmFuc2FkZHIoJHdpbmFkZHIpOworCQlwcmludCAiUlVOIG9mIHdhZGRuc3RyKClzOiAkd2luYWRkciwgXCIkd2FkZG5zdHJfY2hhcnNcIlxuIjsKKwkJcmVkbyBDTEFTU0lGWTsKKwl9CisKKwkjIE1vcmUgdHJhbnNmb3JtYXRpb25zIGNhbiBnbyBoZXJlCisKKwkjIFJlcGVhdGVkIHJ1bnMgb2YgYW55dGhpbmcKKwlteSAkYW55bGluZSA9ICZ0cmFuc2FkZHIoJF8pOworCW15ICRyZXBlYXRjb3VudCA9IDE7CisJd2hpbGUgKDxTVERJTj4pIHsKKwkgICAgaWYgKCZ0cmFuc2FkZHIoJF8pIGVxICRhbnlsaW5lKSB7CisJCSRyZXBlYXRjb3VudCsrOworCSAgICB9IGVsc2UgeworCQlsYXN0OworCSAgICB9CisJfQorCWlmICgkcmVwZWF0Y291bnQgPiAxKSB7CisJCXByaW50ICIke3JlcGVhdGNvdW50fSBSRVBFQVRTIE9GICRhbnlsaW5lIjsKKwl9IGVsc2UgeworCQlwcmludCAkYW55bGluZQorCX0KKwlyZWRvIENMQVNTSUZZIGlmICRfOworCisJfSAjIDpDTEFTU0lGWQorfQorCisjIHRyYWNlbXVuY2ggZW5kcyBoZXJlCmRpZmYgLS1naXQgYS90ZXN0L3ZpZXcuYyBiL3Rlc3Qvdmlldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMmQ3MmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3ZpZXcuYwpAQCAtMCwwICsxLDU3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiB2aWV3LmMgLS0gYSBzaWxseSBsaXR0bGUgdmlld2VyIHByb2dyYW0KKyAqCisgKiB3cml0dGVuIGJ5IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBEZWNlbWJlciAxOTk0CisgKiB0byB0ZXN0IHRoZSBzY3JvbGxpbmcgY29kZSBpbiBuY3Vyc2VzLgorICoKKyAqIG1vZGlmaWVkIGJ5IFRob21hcyBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IEp1bHkgMTk5NSB0byBkZW1vbnN0cmF0ZQorICogdGhlIHVzZSBvZiAncmVzaXpldGVybSgpJywgYW5kIE1heSAyMDAwIHRvIGlsbHVzdHJhdGUgd2lkZS1jaGFyYWN0ZXIKKyAqIGhhbmRsaW5nLgorICoKKyAqIFRha2VzIGEgZmlsZW5hbWUgYXJndW1lbnQuICBJdCdzIGEgc2ltcGxlIGZpbGUtdmlld2VyIHdpdGggdmFyaW91cworICogc2Nyb2xsLXVwIGFuZCBzY3JvbGwtZG93biBjb21tYW5kcy4KKyAqCisgKiBuCS0tIHNjcm9sbCBvbmUgbGluZSBmb3J3YXJkCisgKiBwCS0tIHNjcm9sbCBvbmUgbGluZSBiYWNrCisgKgorICogRWl0aGVyIGNvbW1hbmQgYWNjZXB0cyBhIG51bWVyaWMgcHJlZml4IGludGVycHJldGVkIGFzIGEgcmVwZWF0IGNvdW50LgorICogVGh1cywgdHlwaW5nIGA1bicgc2hvdWxkIHNjcm9sbCBmb3J3YXJkIDUgbGluZXMgaW4gdGhlIGZpbGUuCisgKgorICogVGhlIHdheSB5b3UgY2FuIHRlbGwgdGhpcyBpcyB3b3JraW5nIE9LIGlzIHRoYXQsIGluIHRoZSB0cmFjZSBmaWxlLAorICogdGhlcmUgc2hvdWxkIGJlIG9uZSBzY3JvbGwgb3BlcmF0aW9uIHBsdXMgYSBzbWFsbCBudW1iZXIgb2YgbGluZQorICogdXBkYXRlcywgYXMgb3Bwb3NlZCB0byBhIHdob2xlLXBhZ2UgdXBkYXRlLiAgVGhpcyBtZWFucyB0aGUgcGh5c2ljYWwKKyAqIHNjcm9sbCBvcGVyYXRpb24gd29ya2VkLCBhbmQgdGhlIHJlZnJlc2goKSBjb2RlIG9ubHkgaGFkIHRvIGRvIGEKKyAqIHBhcnRpYWwgcmVwYWludC4KKyAqCisgKiAkSWQ6IHZpZXcuYyx2IDEuNjkgMjAwOC8wOS8wNiAyMjoxMDo1MCB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyN1bmRlZiBDVFJMCQkJLyogY29uZmxpY3Qgb24gQUlYIDUuMiB3aXRoIDxzeXMvaW9jdGwuaD4gKi8KKworI2lmIEhBVkVfVEVSTUlPU19ICisjIGluY2x1ZGUgPHRlcm1pb3MuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHNndHR5Lmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKHN1bikgfHwgIUhBVkVfVEVSTUlPU19ICisjIGlmIEhBVkVfU1lTX0lPQ1RMX0gKKyMgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgbXlfcGFpciAxCisKKy8qIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgJ3N0cnVjdCB3aW5zaXplJyAqLworI2lmIE5FRURfUFRFTV9ICisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2luY2x1ZGUgPHN5cy9wdGVtLmg+CisjZW5kaWYKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjaWYgSEFWRV9NQlRPV0MgJiYgSEFWRV9NQkxFTgorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIG1ibGVuKE5VTEwsIDApLCBtYnRvd2MoTlVMTCwgTlVMTCwgMCkKKyNkZWZpbmUgY291bnRfbWJ5dGVzKGJ1ZmZlcixsZW5ndGgsc3RhdGUpIG1ibGVuKGJ1ZmZlcixsZW5ndGgpCisjZGVmaW5lIGNoZWNrX21ieXRlcyh3Y2gsYnVmZmVyLGxlbmd0aCxzdGF0ZSkgXAorCShpbnQpIG1idG93Yygmd2NoLCBidWZmZXIsIGxlbmd0aCkKKyNkZWZpbmUgc3RhdGVfdW51c2VkCisjZWxpZiBIQVZFX01CUlRPV0MgJiYgSEFWRV9NQlJMRU4KKyNkZWZpbmUgcmVzZXRfbWJ5dGVzKHN0YXRlKSBpbml0X21iKHN0YXRlKQorI2RlZmluZSBjb3VudF9tYnl0ZXMoYnVmZmVyLGxlbmd0aCxzdGF0ZSkgbWJybGVuKGJ1ZmZlcixsZW5ndGgsJnN0YXRlKQorI2RlZmluZSBjaGVja19tYnl0ZXMod2NoLGJ1ZmZlcixsZW5ndGgsc3RhdGUpIFwKKwkoaW50KSBtYnJ0b3djKCZ3Y2gsIGJ1ZmZlciwgbGVuZ3RoLCAmc3RhdGUpCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZW5kaWYJCQkJLyogVVNFX1dJREVDX1NVUFBPUlQgKi8KKworc3RhdGljIFJFVFNJR1RZUEUgZmluaXNoKGludCBzaWcpIEdDQ19OT1JFVFVSTjsKK3N0YXRpYyB2b2lkIHNob3dfYWxsKGNvbnN0IGNoYXIgKnRhZyk7CisKKyNpZiBkZWZpbmVkKFNJR1dJTkNIKSAmJiBkZWZpbmVkKFRJT0NHV0lOU1opICYmIEhBVkVfUkVTSVpFX1RFUk0KKyNkZWZpbmUgQ0FOX1JFU0laRSAxCisjZWxzZQorI2RlZmluZSBDQU5fUkVTSVpFIDAKKyNlbmRpZgorCisjaWYgQ0FOX1JFU0laRQorc3RhdGljIFJFVFNJR1RZUEUgYWRqdXN0KGludCBzaWcpOworc3RhdGljIGludCBpbnRlcnJ1cHRlZDsKKyNlbmRpZgorCitzdGF0aWMgYm9vbCB3YWl0aW5nID0gRkFMU0U7CitzdGF0aWMgaW50IHNoaWZ0ID0gMDsKK3N0YXRpYyBib29sIHRyeV9jb2xvciA9IEZBTFNFOworCitzdGF0aWMgY2hhciAqZm5hbWU7CitzdGF0aWMgTkNVUlNFU19DSF9UICoqdmVjX2xpbmVzOworc3RhdGljIE5DVVJTRVNfQ0hfVCAqKmxwdHI7CitzdGF0aWMgaW50IG51bV9saW5lczsKKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm1zZ1tdID0KKyAgICB7CisJIlVzYWdlOiB2aWV3IFtvcHRpb25zXSBmaWxlIgorCSwiIgorCSwiT3B0aW9uczoiCisJLCIgLWMgICAgICAgdXNlIGNvbG9yIGlmIHRlcm1pbmFsIHN1cHBvcnRzIGl0IgorCSwiIC1pICAgICAgIGlnbm9yZSBJTlQsIFFVSVQsIFRFUk0gc2lnbmFscyIKKwksIiAtbiBOVU0gICBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIChkZWZhdWx0IDEwMDApIgorI2lmIGRlZmluZWQoS0VZX1JFU0laRSkKKwksIiAtciAgICAgICB1c2Ugb2xkLXN0eWxlIHNpZ3dpbmNoIGhhbmRsZXIgcmF0aGVyIHRoYW4gS0VZX1JFU0laRSIKKyNlbmRpZgorI2lmZGVmIFRSQUNFCisJLCIgLXQgICAgICAgdHJhY2Ugc2NyZWVuIHVwZGF0ZXMiCisJLCIgLVQgTlVNICAgc3BlY2lmeSB0cmFjZSBtYXNrIgorI2VuZGlmCisgICAgfTsKKyAgICBzaXplX3QgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKG1zZyk7IG4rKykKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2dbbl0pOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBpbnQKK2NoX2xlbihOQ1VSU0VTX0NIX1QgKiBzcmMpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNlbmRpZgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICB3aGlsZSAoZ2V0Y2NoYXIoc3JjKyssIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpID4gMCkKKwlyZXN1bHQrKzsKKyNlbHNlCisgICAgd2hpbGUgKCpzcmMrKykKKwlyZXN1bHQrKzsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIGNodHlwZSdzLiAgSWYgVVRGLTggbW9kZSBpcworICogYWN0aXZlLCB0cmFuc2xhdGUgdGhlIHN0cmluZyBhY2NvcmRpbmdseS4KKyAqLworc3RhdGljIE5DVVJTRVNfQ0hfVCAqCitjaF9kdXAoY2hhciAqc3JjKQoreworICAgIHVuc2lnbmVkIGxlbiA9IHN0cmxlbihzcmMpOworICAgIE5DVVJTRVNfQ0hfVCAqZHN0ID0gdHlwZU1hbGxvYyhOQ1VSU0VTX0NIX1QsIGxlbiArIDEpOworICAgIHVuc2lnbmVkIGosIGs7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICB3Y2hhcl90IHdzdHJbQ0NIQVJXX01BWCArIDFdOworICAgIHdjaGFyX3Qgd2NoOworICAgIGludCBsID0gMDsKKyAgICBzaXplX3QgcmM7CisgICAgaW50IHdpZHRoOworI2lmbmRlZiBzdGF0ZV91bnVzZWQKKyAgICBtYnN0YXRlX3Qgc3RhdGU7CisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfV0lERUNfU1VQUE9SVCAqLworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICByZXNldF9tYnl0ZXMoc3RhdGUpOworI2VuZGlmCisgICAgZm9yIChqID0gayA9IDA7IGogPCBsZW47IGorKykgeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJcmMgPSBjaGVja19tYnl0ZXMod2NoLCBzcmMgKyBqLCBsZW4gLSBqLCBzdGF0ZSk7CisJaWYgKHJjID09IChzaXplX3QpIC0xIHx8IHJjID09IChzaXplX3QpIC0yKQorCSAgICBicmVhazsKKwlqICs9IHJjIC0gMTsKKwlpZiAoKHdpZHRoID0gd2N3aWR0aCh3Y2gpKSA8IDApCisJICAgIGJyZWFrOworCWlmICgod2lkdGggPiAwICYmIGwgPiAwKSB8fCBsID09IENDSEFSV19NQVgpIHsKKwkgICAgd3N0cltsXSA9IEwnXDAnOworCSAgICBsID0gMDsKKwkgICAgaWYgKHNldGNjaGFyKGRzdCArIGssIHdzdHIsIDAsIDAsIE5VTEwpICE9IE9LKQorCQlicmVhazsKKwkgICAgKytrOworCX0KKwlpZiAod2lkdGggPT0gMCAmJiBsID09IDApCisJICAgIHdzdHJbbCsrXSA9IEwnICc7CisJd3N0cltsKytdID0gd2NoOworI2Vsc2UKKwlkc3RbaysrXSA9IHNyY1tqXTsKKyNlbmRpZgorICAgIH0KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGlmIChsID4gMCkgeworCXdzdHJbbF0gPSBMJ1wwJzsKKwlpZiAoc2V0Y2NoYXIoZHN0ICsgaywgd3N0ciwgMCwgMCwgTlVMTCkgPT0gT0spCisJICAgICsrazsKKyAgICB9CisgICAgd3N0clswXSA9IEwnXDAnOworICAgIHNldGNjaGFyKGRzdCArIGssIHdzdHIsIDAsIDAsIE5VTEwpOworI2Vsc2UKKyAgICBkc3Rba10gPSAwOworI2VuZGlmCisgICAgcmV0dXJuIGRzdDsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IE1BWExJTkVTID0gMTAwMDsKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworICAgIGludCBpOworICAgIGludCBteV9kZWxheSA9IDA7CisgICAgTkNVUlNFU19DSF9UICoqb2xwdHI7CisgICAgaW50IHZhbHVlID0gMDsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICBib29sIGdvdF9udW1iZXIgPSBGQUxTRTsKKyNpZiBDQU5fUkVTSVpFCisgICAgYm9vbCBub25wb3NpeF9yZXNpemUgPSBGQUxTRTsKKyNlbmRpZgorICAgIGNvbnN0IGNoYXIgKm15X2xhYmVsID0gIklucHV0IjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworI2lmbmRlZiBOQ1VSU0VTX1ZFUlNJT04KKyAgICAvKgorICAgICAqIFdlIGtub3cgbmN1cnNlcyB3aWxsIGNhdGNoIFNJR0lOVCBpZiB3ZSBkb24ndCBlc3RhYmxpc2ggb3VyIG93biBoYW5kbGVyLgorICAgICAqIE90aGVyIHZlcnNpb25zIG9mIGN1cnNlcyBtYXkvbWF5IG5vdCBjYXRjaCBpdC4KKyAgICAgKi8KKyAgICAodm9pZCkgc2lnbmFsKFNJR0lOVCwgZmluaXNoKTsJLyogYXJyYW5nZSBpbnRlcnJ1cHRzIHRvIHRlcm1pbmF0ZSAqLworI2VuZGlmCisKKyAgICB3aGlsZSAoKGkgPSBnZXRvcHQoYXJnYywgYXJndiwgImNpbjpydFQ6IikpICE9IC0xKSB7CisJc3dpdGNoIChpKSB7CisJY2FzZSAnYyc6CisJICAgIHRyeV9jb2xvciA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2knOgorCSAgICBDQVRDSEFMTChTSUdfSUdOKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CisJICAgIGlmICgoTUFYTElORVMgPSBhdG9pKG9wdGFyZykpIDwgMSB8fAorCQkoTUFYTElORVMgKyAyKSA8PSAxKQorCQl1c2FnZSgpOworCSAgICBicmVhazsKKyNpZiBDQU5fUkVTSVpFCisJY2FzZSAncic6CisJICAgIG5vbnBvc2l4X3Jlc2l6ZSA9IFRSVUU7CisJICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgVFJBQ0UKKwljYXNlICdUJzoKKwkgICAgdHJhY2UoKHVuc2lnbmVkKSBhdG9pKG9wdGFyZykpOworCSAgICBicmVhazsKKwljYXNlICd0JzoKKwkgICAgdHJhY2UoVFJBQ0VfQ0FMTFMpOworCSAgICBicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJfQorICAgIH0KKyAgICBpZiAob3B0aW5kICsgMSAhPSBhcmdjKQorCXVzYWdlKCk7CisKKyAgICBpZiAoKHZlY19saW5lcyA9IHR5cGVNYWxsb2MoTkNVUlNFU19DSF9UICosIE1BWExJTkVTICsgMikpID09IDApCisJdXNhZ2UoKTsKKworICAgIGZuYW1lID0gYXJndltvcHRpbmRdOworICAgIGlmICgoZnAgPSBmb3BlbihmbmFtZSwgInIiKSkgPT0gMCkgeworCXBlcnJvcihmbmFtZSk7CisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICB9CisjaWYgQ0FOX1JFU0laRQorICAgIGlmIChub25wb3NpeF9yZXNpemUpCisJKHZvaWQpIHNpZ25hbChTSUdXSU5DSCwgYWRqdXN0KTsJLyogYXJyYW5nZSBpbnRlcnJ1cHRzIHRvIHJlc2l6ZSAqLworI2VuZGlmCisKKyAgICAvKiBzbHVycCB0aGUgZmlsZSAqLworICAgIGZvciAobHB0ciA9ICZ2ZWNfbGluZXNbMF07IChscHRyIC0gdmVjX2xpbmVzKSA8IE1BWExJTkVTOyBscHRyKyspIHsKKwljaGFyIHRlbXBbQlVGU0laXSwgKnMsICpkOworCWludCBjb2w7CisKKwlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApID09IDApCisJICAgIGJyZWFrOworCisJLyogY29udmVydCB0YWJzIHNvIHRoYXQgc2hpZnQgd2lsbCB3b3JrIHByb3Blcmx5ICovCisJZm9yIChzID0gYnVmLCBkID0gdGVtcCwgY29sID0gMDsgKCpkID0gKnMpICE9ICdcMCc7IHMrKykgeworCSAgICBpZiAoKmQgPT0gJ1xuJykgeworCQkqZCA9ICdcMCc7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKCpkID09ICdcdCcpIHsKKwkJY29sID0gKGNvbCB8IDcpICsgMTsKKwkJd2hpbGUgKChkIC0gdGVtcCkgIT0gY29sKQorCQkgICAgKmQrKyA9ICcgJzsKKwkgICAgfSBlbHNlCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkJY29sKyssIGQrKzsKKyNlbHNlCisJICAgIGlmIChpc3ByaW50KFVDaGFyKCpkKSkpIHsKKwkJY29sKys7CisJCWQrKzsKKwkgICAgfSBlbHNlIHsKKwkJc3ByaW50ZihkLCAiXFwlMDNvIiwgVUNoYXIoKnMpKTsKKwkJZCArPSBzdHJsZW4oZCk7CisJCWNvbCA9IChkIC0gdGVtcCk7CisJICAgIH0KKyNlbmRpZgorCX0KKwkqbHB0ciA9IGNoX2R1cCh0ZW1wKTsKKyAgICB9CisgICAgKHZvaWQpIGZjbG9zZShmcCk7CisgICAgbnVtX2xpbmVzID0gbHB0ciAtIHZlY19saW5lczsKKworICAgICh2b2lkKSBpbml0c2NyKCk7CQkvKiBpbml0aWFsaXplIHRoZSBjdXJzZXMgbGlicmFyeSAqLworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBub25sKCk7CQkvKiB0ZWxsIGN1cnNlcyBub3QgdG8gZG8gTkwtPkNSL05MIG9uIG91dHB1dCAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworICAgIGlkbG9rKHN0ZHNjciwgVFJVRSk7CS8qIGFsbG93IHVzZSBvZiBpbnNlcnQvZGVsZXRlIGxpbmUgKi8KKworICAgIGlmICh0cnlfY29sb3IpIHsKKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJICAgIHN0YXJ0X2NvbG9yKCk7CisJICAgIGluaXRfcGFpcihteV9wYWlyLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJICAgIGJrZ2QoQ09MT1JfUEFJUihteV9wYWlyKSk7CisJfSBlbHNlIHsKKwkgICAgdHJ5X2NvbG9yID0gRkFMU0U7CisJfQorICAgIH0KKworICAgIGxwdHIgPSB2ZWNfbGluZXM7CisgICAgd2hpbGUgKCFkb25lKSB7CisJaW50IG4sIGM7CisKKwlpZiAoIWdvdF9udW1iZXIpCisJICAgIHNob3dfYWxsKG15X2xhYmVsKTsKKworCW4gPSAwOworCWZvciAoOzspIHsKKyNpZiBDQU5fUkVTSVpFCisJICAgIGlmIChpbnRlcnJ1cHRlZCkgeworCQlhZGp1c3QoMCk7CisJCW15X2xhYmVsID0gImludGVycnVwdCI7CisJICAgIH0KKyNlbmRpZgorCSAgICB3YWl0aW5nID0gVFJVRTsKKwkgICAgYyA9IGdldGNoKCk7CisJICAgIHdhaXRpbmcgPSBGQUxTRTsKKwkgICAgaWYgKChjIDwgMTI3KSAmJiBpc2RpZ2l0KGMpKSB7CisJCWlmICghZ290X251bWJlcikgeworCQkgICAgbXZwcmludHcoMCwgMCwgIkNvdW50OiAiKTsKKwkJICAgIGNscnRvZW9sKCk7CisJCX0KKwkJYWRkY2goVUNoYXIoYykpOworCQl2YWx1ZSA9IDEwICogdmFsdWUgKyAoYyAtICcwJyk7CisJCWdvdF9udW1iZXIgPSBUUlVFOworCSAgICB9IGVsc2UKKwkJYnJlYWs7CisJfQorCWlmIChnb3RfbnVtYmVyICYmIHZhbHVlKSB7CisJICAgIG4gPSB2YWx1ZTsKKwl9IGVsc2UgeworCSAgICBuID0gMTsKKwl9CisKKwlpZiAoYyAhPSBFUlIpCisJICAgIG15X2xhYmVsID0ga2V5bmFtZShjKTsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlIEtFWV9ET1dOOgorCWNhc2UgJ24nOgorCSAgICBvbHB0ciA9IGxwdHI7CisJICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmICgobHB0ciAtIHZlY19saW5lcykgPCAobnVtX2xpbmVzIC0gTElORVMgKyAxKSkKKwkJICAgIGxwdHIrKzsKKwkJZWxzZQorCQkgICAgYnJlYWs7CisJICAgIHNjcmwobHB0ciAtIG9scHRyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9VUDoKKwljYXNlICdwJzoKKwkgICAgb2xwdHIgPSBscHRyOworCSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlpZiAobHB0ciA+IHZlY19saW5lcykKKwkJICAgIGxwdHItLTsKKwkJZWxzZQorCQkgICAgYnJlYWs7CisJICAgIHNjcmwobHB0ciAtIG9scHRyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdoJzoKKwljYXNlIEtFWV9IT01FOgorCSAgICBscHRyID0gdmVjX2xpbmVzOworCSAgICBicmVhazsKKworCWNhc2UgJ2UnOgorCWNhc2UgS0VZX0VORDoKKwkgICAgaWYgKG51bV9saW5lcyA+IExJTkVTKQorCQlscHRyID0gdmVjX2xpbmVzICsgbnVtX2xpbmVzIC0gTElORVMgKyAxOworCSAgICBlbHNlCisJCWxwdHIgPSB2ZWNfbGluZXM7CisJICAgIGJyZWFrOworCisJY2FzZSAncic6CisJY2FzZSBLRVlfUklHSFQ6CisJICAgIHNoaWZ0ICs9IG47CisJICAgIGJyZWFrOworCisJY2FzZSAnbCc6CisJY2FzZSBLRVlfTEVGVDoKKwkgICAgc2hpZnQgLT0gbjsKKwkgICAgaWYgKHNoaWZ0IDwgMCkgeworCQlzaGlmdCA9IDA7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ3EnOgorCSAgICBkb25lID0gVFJVRTsKKwkgICAgYnJlYWs7CisKKyNpZmRlZiBLRVlfUkVTSVpFCisJY2FzZSBLRVlfUkVTSVpFOgkvKiBpZ25vcmUgdGhpczsgbmN1cnNlcyB3aWxsIHJlcGFpbnQgKi8KKwkgICAgYnJlYWs7CisjZW5kaWYKKwljYXNlICdzJzoKKwkgICAgaWYgKGdvdF9udW1iZXIpIHsKKwkJaGFsZmRlbGF5KG15X2RlbGF5ID0gbik7CisJICAgIH0gZWxzZSB7CisJCW5vZGVsYXkoc3Rkc2NyLCBGQUxTRSk7CisJCW15X2RlbGF5ID0gLTE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnICc6CisJICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKwkgICAgbXlfZGVsYXkgPSAwOworCSAgICBicmVhazsKKwljYXNlIEVSUjoKKwkgICAgaWYgKCFteV9kZWxheSkKKwkJbmFwbXMoNTApOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKwlpZiAoYyA+PSBLRVlfTUlOIHx8IChjID4gMCAmJiAhaXNkaWdpdChjKSkpIHsKKwkgICAgZ290X251bWJlciA9IEZBTFNFOworCSAgICB2YWx1ZSA9IDA7CisJfQorICAgIH0KKworICAgIGZpbmlzaCgwKTsJCQkvKiB3ZSdyZSBkb25lICovCit9CisKK3N0YXRpYyBSRVRTSUdUWVBFCitmaW5pc2goaW50IHNpZykKK3sKKyAgICBlbmR3aW4oKTsKKyNpZiBOT19MRUFLUworICAgIGlmICh2ZWNfbGluZXMgIT0gMCkgeworCWludCBuOworCWZvciAobiA9IDA7IG4gPCBudW1fbGluZXM7ICsrbikgeworCSAgICBmcmVlKHZlY19saW5lc1tuXSk7CisJfQorCWZyZWUodmVjX2xpbmVzKTsKKyAgICB9CisjZW5kaWYKKyAgICBFeGl0UHJvZ3JhbShzaWcgIT0gMCA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUyk7Cit9CisKKyNpZiBDQU5fUkVTSVpFCisvKgorICogVGhpcyB1c2VzIGZ1bmN0aW9ucyB0aGF0IGFyZSAidW5zYWZlIiwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgb24gU3VuT1MgYW5kCisgKiBMaW51eC4gIFVzdWFsbHk6ICB0aGUgInVuc2FmZSIgcmVmZXJzIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBQT1NJWCBsaXN0cworICogd2hpY2ggbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuICBUaG9zZSBkbyBub3QgaW5jbHVkZSBidWZmZXJlZAorICogSS9PLCB3aGljaCBpcyB1c2VkIGZvciBpbnN0YW5jZSBpbiB3cmVmcmVzaCgpLiAgVG8gYmUgcmVhbGx5IHBvcnRhYmxlLCB5b3UKKyAqIHNob3VsZCB1c2UgdGhlIEtFWV9SRVNJWkUgcmV0dXJuICh3aGljaCByZWxpZXMgb24gbmN1cnNlcycgc2lnd2luY2gKKyAqIGhhbmRsZXIpLgorICoKKyAqIFRoZSAnd3JlZnJlc2goY3Vyc2NyKScgaXMgbmVlZGVkIHRvIGZvcmNlIHRoZSByZWZyZXNoIHRvIHN0YXJ0IGZyb20gdGhlIHRvcAorICogb2YgdGhlIHNjcmVlbiAtLSBzb21lIHh0ZXJtcyBtYW5nbGUgdGhlIGJpdG1hcCB3aGlsZSByZXNpemluZy4KKyAqLworc3RhdGljIFJFVFNJR1RZUEUKK2FkanVzdChpbnQgc2lnKQoreworICAgIGlmICh3YWl0aW5nIHx8IHNpZyA9PSAwKSB7CisJc3RydWN0IHdpbnNpemUgc2l6ZTsKKworCWlmIChpb2N0bChmaWxlbm8oc3Rkb3V0KSwgVElPQ0dXSU5TWiwgJnNpemUpID09IDApIHsKKwkgICAgcmVzaXplX3Rlcm0oc2l6ZS53c19yb3csIHNpemUud3NfY29sKTsKKwkgICAgd3JlZnJlc2goY3Vyc2NyKTsJLyogTGludXggbmVlZHMgdGhpcyAqLworCSAgICBzaG93X2FsbChzaWcgPyAiU0lHV0lOQ0giIDogImludGVycnVwdCIpOworCX0KKwlpbnRlcnJ1cHRlZCA9IEZBTFNFOworICAgIH0gZWxzZSB7CisJaW50ZXJydXB0ZWQgPSBUUlVFOworICAgIH0KKyAgICAodm9pZCkgc2lnbmFsKFNJR1dJTkNILCBhZGp1c3QpOwkvKiBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCit9CisjZW5kaWYgLyogQ0FOX1JFU0laRSAqLworCitzdGF0aWMgdm9pZAorc2hvd19hbGwoY29uc3QgY2hhciAqdGFnKQoreworICAgIGludCBpOworICAgIGNoYXIgdGVtcFtCVUZTSVpdOworICAgIE5DVVJTRVNfQ0hfVCAqczsKKyAgICB0aW1lX3QgdGhpc190aW1lOworCisjaWYgQ0FOX1JFU0laRQorICAgIHNwcmludGYodGVtcCwgIiUuMjBzICglM2R4JTNkKSBjb2wgJWQgIiwgdGFnLCBMSU5FUywgQ09MUywgc2hpZnQpOworICAgIGkgPSBzdHJsZW4odGVtcCk7CisgICAgaWYgKChpICsgNykgPCAoaW50KSBzaXplb2YodGVtcCkpCisJc3ByaW50Zih0ZW1wICsgaSwgInZpZXcgJS4qcyIsIChpbnQpIChzaXplb2YodGVtcCkgLSA3IC0gaSksIGZuYW1lKTsKKyNlbHNlCisgICAgKHZvaWQpIHRhZzsKKyAgICBzcHJpbnRmKHRlbXAsICJ2aWV3ICUuKnMiLCAoaW50KSBzaXplb2YodGVtcCkgLSA3LCBmbmFtZSk7CisjZW5kaWYKKyAgICBtb3ZlKDAsIDApOworICAgIHByaW50dygiJS4qcyIsIENPTFMsIHRlbXApOworICAgIGNscnRvZW9sKCk7CisgICAgdGhpc190aW1lID0gdGltZSgodGltZV90ICopIDApOworICAgIHN0cmNweSh0ZW1wLCBjdGltZSgmdGhpc190aW1lKSk7CisgICAgaWYgKChpID0gc3RybGVuKHRlbXApKSAhPSAwKSB7CisJdGVtcFstLWldID0gMDsKKwlpZiAobW92ZSgwLCBDT0xTIC0gaSAtIDIpICE9IEVSUikKKwkgICAgcHJpbnR3KCIgICVzIiwgdGVtcCk7CisgICAgfQorCisgICAgc2Nyb2xsb2soc3Rkc2NyLCBGQUxTRSk7CS8qIHByZXZlbnQgc2NyZWVuIGZyb20gbW92aW5nICovCisgICAgZm9yIChpID0gMTsgaSA8IExJTkVTOyBpKyspIHsKKwltb3ZlKGksIDApOworCXByaW50dygiJTNsZDoiLCAobG9uZykgKGxwdHIgKyBpIC0gdmVjX2xpbmVzKSk7CisJY2xydG9lb2woKTsKKwlpZiAoKHMgPSBscHRyW2kgLSAxXSkgIT0gMCkgeworCSAgICBpbnQgbGVuID0gY2hfbGVuKHMpOworCSAgICBpZiAobGVuID4gc2hpZnQpIHsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCQlhZGRfd2Noc3RyKHMgKyBzaGlmdCk7CisjZWxzZQorCQlhZGRjaHN0cihzICsgc2hpZnQpOworI2VuZGlmCisJICAgIH0KKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgfHwgZGVmaW5lZChIQVZFX1dDSEdBVCkKKwkgICAgaWYgKHRyeV9jb2xvcikKKwkJd2NoZ2F0KHN0ZHNjciwgLTEsIEFfTk9STUFMLCBteV9wYWlyLCBOVUxMKTsKKyNlbmRpZgorCX0KKyAgICB9CisgICAgc2V0c2NycmVnKDEsIExJTkVTIC0gMSk7CisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsKKyAgICByZWZyZXNoKCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3dpZGVjaGFycy11dGY4LnR4dCBiL3Rlc3Qvd2lkZWNoYXJzLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWNkMGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3dpZGVjaGFycy11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK++8oe+8sO+8sO+8rO+8pSAgICAgLS0gSXQncyBhbiDvvKHvvLDvvLDvvKzvvKUuCivvvKTvvK/vvKcgICAgICAgICAtLSBObywgdGhhdCdzIG5vdCBteSDvvKTvvK/vvKcuCivvvK/vvLLvvKHvvK7vvKfvvKUgICAtLSBZZWFoLCB0aGF0J3Mg77yq77y177yp77yj77y5Lgor77yj77yo77yp77yj77yr77yl77yuIC0tIE5vcm1hbGx5IG5vdCBhIO+8sO+8pe+8tC4KK++8o++8oe+8tCAgICAgICAgIC0tIE5vLCBuZXZlciBwdXQgYSDvvKTvvK/vvKcgYW5kIGEg77yj77yh77y0IHRvZ2V0aGVyIQor77ym77yp77yz77yoICAgICAgIC0tIENhdHMgbGlrZSDvvKbvvKnvvLPvvKguCivvvKzvvKXvvK3vvK/vvK4gICAgIC0tIFlvdSDvvKvvvK7vvK/vvLcgaG93IGl0IO+8tO+8oe+8s++8tO+8pe+8sy4KZGlmZiAtLWdpdCBhL3Rlc3Qvd29ybS5jIGIvdGVzdC93b3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qvd29ybS5jCkBAIC0wLDAgKzEsNjA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKworCSBAQEAgICAgICAgIEBAQCAgICBAQEBAQEBAQEBAICAgICBAQEBAQEBAQEBAQCAgICBAQEBAQEBAQEBAQEAKKwkgQEBAICAgICAgICBAQEAgICBAQEBAQEBAQEBAQEAgICAgQEBAQEBAQEBAQEBAICAgQEBAQEBAQEBAQEBAQAorCSBAQEAgICAgICAgIEBAQCAgQEBAQCAgICAgIEBAQEAgICBAQEBAICAgICAgICAgICBAQEBAIEBAQCAgQEBAQAorCSBAQEAgICBAQCAgIEBAQCAgQEBAICAgICAgICBAQEAgICBAQEAgICAgICAgICAgICBAQEAgIEBAQCAgIEBAQAorCSBAQEAgIEBAQEAgIEBAQCAgQEBAICAgICAgICBAQEAgICBAQEAgICAgICAgICAgICBAQEAgIEBAQCAgIEBAQAorCSBAQEBAIEBAQEAgQEBAQCAgQEBAICAgICAgICBAQEAgICBAQEAgICAgICAgICAgICBAQEAgIEBAQCAgIEBAQAorCSAgQEBAQEBAQEBAQEBAICAgQEBAQCAgICAgIEBAQEAgICBAQEAgICAgICAgICAgICBAQEAgIEBAQCAgIEBAQAorCSAgIEBAQEAgIEBAQEAgICAgIEBAQEBAQEBAQEBAQCAgICBAQEAgICAgICAgICAgICBAQEAgIEBAQCAgIEBAQAorCSAgICBAQCAgICBAQCAgICAgICBAQEBAQEBAQEBAICAgICBAQEAgICAgICAgICAgICBAQEAgIEBAQCAgIEBAQAorCisJCQkJIEVyaWMgUC4gU2NvdHQKKwkJCSAgQ2FsdGVjaCBIaWdoIEVuZXJneSBQaHlzaWNzCisJCQkJIE9jdG9iZXIsIDE5ODAKKworCQlIYWNrcyB0byB0dXJuIHRoaXMgaW50byBhIHRlc3QgZnJhbWUgZm9yIGN1cnNvciBtb3ZlbWVudDoKKwkJCUVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgorCQkJCUphbnVhcnksIDE5OTUKKworCQlKdWx5IDE5OTUgKGVzcik6IHdvcm1zIGlzIG5vdyBpbiBsaXZpbmcgY29sb3IhIDotKQorCitPcHRpb25zOgorCS1mCQkJZmlsbCBzY3JlZW4gd2l0aCBjb3BpZXMgb2YgJ1dPUk0nIGF0IHN0YXJ0LgorCS1sIDxuPgkJCXNldCB3b3JtIGxlbmd0aAorCS1uIDxuPgkJCXNldCBudW1iZXIgb2Ygd29ybXMKKwktdAkJCW1ha2Ugd29ybXMgbGVhdmUgZHJvcHBpbmdzCisJLVQgPHN0YXJ0PiA8ZW5kPglzZXQgdHJhY2UgaW50ZXJ2YWwKKwktUwkJCXNldCBzaW5nbGUtc3RlcHBpbmcgZHVyaW5nIHRyYWNlIGludGVydmFsCisJLU4JCQlzdXBwcmVzcyBjdXJzb3ItbW92ZW1lbnQgb3B0aW1pemF0aW9uCisKKyAgVGhpcyBwcm9ncmFtIG1ha2VzIGEgZ29vZCB0b3J0dXJlLXRlc3QgZm9yIHRoZSBuY3Vyc2VzIGN1cnNvci1vcHRpbWl6YXRpb24KKyAgY29kZS4gIFlvdSBjYW4gdXNlIC1UIHRvIHNldCB0aGUgd29ybSBtb3ZlIGludGVydmFsIG92ZXIgd2hpY2ggbW92ZW1lbnQKKyAgdHJhY2VzIHdpbGwgYmUgZHVtcGVkLiAgVGhlIHByb2dyYW0gc3RvcHMgYW5kIHdhaXRzIGZvciBvbmUgY2hhcmFjdGVyIG9mCisgIGlucHV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50ZXJ2YWwuCisKKyAgJElkOiB3b3JtLmMsdiAxLjU4IDIwMDgvMTAvMDQgMjE6NTQ6MDkgdG9tIEV4cCAkCisqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworV0FOVF9VU0VfV0lORE9XKCk7CisKKyNkZWZpbmUgTUFYX1dPUk1TCTQwCisjZGVmaW5lIE1BWF9MRU5HVEgJMTAyNAorCitzdGF0aWMgY2h0eXBlIGZsYXZvcltdID0KK3sKKyAgICAnTycsICcqJywgJyMnLCAnJCcsICclJywgJzAnLCAnQCcsCit9Oworc3RhdGljIGNvbnN0IHNob3J0IHhpbmNbXSA9Cit7CisgICAgMSwgMSwgMSwgMCwgLTEsIC0xLCAtMSwgMAorfSwgeWluY1tdID0KK3sKKyAgICAtMSwgMCwgMSwgMSwgMSwgMCwgLTEsIC0xCit9OworCit0eXBlZGVmIHN0cnVjdCB3b3JtIHsKKyAgICBpbnQgb3JpZW50YXRpb247CisgICAgaW50IGhlYWQ7CisgICAgc2hvcnQgKnhwb3M7CisgICAgc2hvcnQgKnlwb3M7CisgICAgY2h0eXBlIGF0dHJzOworI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisjZW5kaWYKK30gV09STTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UgPSAwOworc3RhdGljIGJvb2wgcXVpdHRpbmcgPSBGQUxTRTsKKworc3RhdGljIFdPUk0gd29ybVtNQVhfV09STVNdOworc3RhdGljIHNob3J0ICoqcmVmczsKK3N0YXRpYyBpbnQgbGFzdF94LCBsYXN0X3k7CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaWVsZDsKK3N0YXRpYyBpbnQgbGVuZ3RoID0gMTYsIG51bWJlciA9IDM7CitzdGF0aWMgY2h0eXBlIHRyYWlsID0gJyAnOworCitzdGF0aWMgdW5zaWduZWQgcGVuZGluZzsKKyNpZmRlZiBUUkFDRQorc3RhdGljIGludCBnZW5lcmF0aW9uLCB0cmFjZV9zdGFydCwgdHJhY2VfZW5kOworI2VuZGlmIC8qIFRSQUNFICovCisvKiAqSU5ERU5ULU9GRiogKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9ucyB7CisgICAgaW50IG5vcHRzOworICAgIGludCBvcHRzWzNdOworfSBub3JtYWxbOF09eworICAgIHsgMywgeyA3LCAwLCAxIH0gfSwKKyAgICB7IDMsIHsgMCwgMSwgMiB9IH0sCisgICAgeyAzLCB7IDEsIDIsIDMgfSB9LAorICAgIHsgMywgeyAyLCAzLCA0IH0gfSwKKyAgICB7IDMsIHsgMywgNCwgNSB9IH0sCisgICAgeyAzLCB7IDQsIDUsIDYgfSB9LAorICAgIHsgMywgeyA1LCA2LCA3IH0gfSwKKyAgICB7IDMsIHsgNiwgNywgMCB9IH0KK30sIHVwcGVyWzhdPXsKKyAgICB7IDEsIHsgMSwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDEsIDIsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMiwgeyA0LCA1LCAwIH0gfSwKKyAgICB7IDEsIHsgNSwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDEsIDUsIDAgfSB9Cit9LCBsZWZ0WzhdPXsKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgMiwgMywgMCB9IH0sCisgICAgeyAxLCB7IDMsIDAsIDAgfSB9LAorICAgIHsgMiwgeyAzLCA3LCAwIH0gfSwKKyAgICB7IDEsIHsgNywgMCwgMCB9IH0sCisgICAgeyAyLCB7IDcsIDAsIDAgfSB9Cit9LCByaWdodFs4XT17CisgICAgeyAxLCB7IDcsIDAsIDAgfSB9LAorICAgIHsgMiwgeyAzLCA3LCAwIH0gfSwKKyAgICB7IDEsIHsgMywgMCwgMCB9IH0sCisgICAgeyAyLCB7IDMsIDQsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMiwgeyA2LCA3LCAwIH0gfQorfSwgbG93ZXJbOF09eworICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgMCwgMSwgMCB9IH0sCisgICAgeyAxLCB7IDEsIDAsIDAgfSB9LAorICAgIHsgMiwgeyAxLCA1LCAwIH0gfSwKKyAgICB7IDEsIHsgNSwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDUsIDYsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0KK30sIHVwbGVmdFs4XT17CisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDEsIHsgMywgMCwgMCB9IH0sCisgICAgeyAyLCB7IDEsIDMsIDAgfSB9LAorICAgIHsgMSwgeyAxLCAwLCAwIH0gfQorfSwgdXByaWdodFs4XT17CisgICAgeyAyLCB7IDMsIDUsIDAgfSB9LAorICAgIHsgMSwgeyAzLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMSwgeyA1LCAwLCAwIH0gfQorfSwgbG93bGVmdFs4XT17CisgICAgeyAzLCB7IDcsIDAsIDEgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAxLCB7IDEsIDAsIDAgfSB9LAorICAgIHsgMiwgeyAxLCA3LCAwIH0gfSwKKyAgICB7IDEsIHsgNywgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfQorfSwgbG93cmlnaHRbOF09eworICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDEsIHsgNywgMCwgMCB9IH0sCisgICAgeyAyLCB7IDUsIDcsIDAgfSB9LAorICAgIHsgMSwgeyA1LCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0KK307CisvKiAqSU5ERU5ULU9OKiAqLworCitzdGF0aWMgdm9pZAorY2xlYW51cCh2b2lkKQoreworICAgIFVTSU5HX1dJTkRPVyhzdGRzY3IsIHdyZWZyZXNoKTsKKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKK30KKworc3RhdGljIFJFVFNJR1RZUEUKK29uc2lnKGludCBzaWcgR0NDX1VOVVNFRCkKK3sKKyAgICBjbGVhbnVwKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIGZsb2F0CityYW5mKHZvaWQpCit7CisgICAgbG9uZyByID0gKHJhbmQoKSAmIDA3Nzc3Nyk7CisgICAgcmV0dXJuICgoZmxvYXQpIHIgLyAzMjc2OC4pOworfQorCitzdGF0aWMgaW50CitkcmF3X3dvcm0oV0lORE9XICp3aW4sIHZvaWQgKmRhdGEpCit7CisgICAgV09STSAqdyA9IChXT1JNICopIGRhdGE7CisgICAgY29uc3Qgc3RydWN0IG9wdGlvbnMgKm9wOworICAgIHVuc2lnbmVkIG1hc2sgPSB+KDEgPDwgKHcgLSB3b3JtKSk7CisgICAgY2h0eXBlIGF0dHJzID0gdy0+YXR0cnMgfCAoKG1hc2sgJiBwZW5kaW5nKSA/IEFfUkVWRVJTRSA6IDApOworCisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50IGg7CisKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKworICAgIGlmICgoeCA9IHctPnhwb3NbaCA9IHctPmhlYWRdKSA8IDApIHsKKwl3bW92ZSh3aW4sIHkgPSB3LT55cG9zW2hdID0gbGFzdF95LCB4ID0gdy0+eHBvc1toXSA9IDApOworCXdhZGRjaCh3aW4sIGF0dHJzKTsKKwlyZWZzW3ldW3hdKys7CisgICAgfSBlbHNlIHsKKwl5ID0gdy0+eXBvc1toXTsKKyAgICB9CisKKyAgICBpZiAoeCA+IGxhc3RfeCkKKwl4ID0gbGFzdF94OworICAgIGlmICh5ID4gbGFzdF95KQorCXkgPSBsYXN0X3k7CisKKyAgICBpZiAoKytoID09IGxlbmd0aCkKKwloID0gMDsKKworICAgIGlmICh3LT54cG9zW3ctPmhlYWQgPSBoXSA+PSAwKSB7CisJaW50IHgxLCB5MTsKKwl4MSA9IHctPnhwb3NbaF07CisJeTEgPSB3LT55cG9zW2hdOworCWlmICh5MSA8IExJTkVTCisJICAgICYmIHgxIDwgQ09MUworCSAgICAmJiAtLXJlZnNbeTFdW3gxXSA9PSAwKSB7CisJICAgIHdtb3ZlKHdpbiwgeTEsIHgxKTsKKwkgICAgd2FkZGNoKHdpbiwgdHJhaWwpOworCX0KKyAgICB9CisKKyAgICBvcCA9ICYoeCA9PSAwCisJICAgPyAoeSA9PSAwCisJICAgICAgPyB1cGxlZnQKKwkgICAgICA6ICh5ID09IGxhc3RfeQorCQkgPyBsb3dsZWZ0CisJCSA6IGxlZnQpKQorCSAgIDogKHggPT0gbGFzdF94CisJICAgICAgPyAoeSA9PSAwCisJCSA/IHVwcmlnaHQKKwkJIDogKHkgPT0gbGFzdF95CisJCSAgICA/IGxvd3JpZ2h0CisJCSAgICA6IHJpZ2h0KSkKKwkgICAgICA6ICh5ID09IDAKKwkJID8gdXBwZXIKKwkJIDogKHkgPT0gbGFzdF95CisJCSAgICA/IGxvd2VyCisJCSAgICA6IG5vcm1hbCkpKSlbdy0+b3JpZW50YXRpb25dOworCisgICAgc3dpdGNoIChvcC0+bm9wdHMpIHsKKyAgICBjYXNlIDA6CisJZG9uZSA9IFRSVUU7CisJYnJlYWs7CisgICAgY2FzZSAxOgorCXctPm9yaWVudGF0aW9uID0gb3AtPm9wdHNbMF07CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwl3LT5vcmllbnRhdGlvbiA9IG9wLT5vcHRzWyhpbnQpIChyYW5mKCkgKiAoZmxvYXQpIG9wLT5ub3B0cyldOworCWJyZWFrOworICAgIH0KKworICAgIGlmICghZG9uZSkgeworCXggKz0geGluY1t3LT5vcmllbnRhdGlvbl07CisJeSArPSB5aW5jW3ctPm9yaWVudGF0aW9uXTsKKwl3bW92ZSh3aW4sIHksIHgpOworCisJaWYgKHkgPCAwKQorCSAgICB5ID0gMDsKKwl3YWRkY2god2luLCBhdHRycyk7CisKKwl3LT55cG9zW2hdID0geTsKKwl3LT54cG9zW2hdID0geDsKKwlyZWZzW3ldW3hdKys7CisgICAgfQorCisgICAgcmV0dXJuIGRvbmU7Cit9CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKK3N0YXRpYyBib29sCitxdWl0X3dvcm0oaW50IGJpdG51bSkKK3sKKyAgICBwZW5kaW5nIHw9ICgxIDw8IGJpdG51bSk7CisgICAgbmFwbXMoMTApOwkJCS8qIGxldCB0aGUgb3RoZXIgdGhyZWFkKHMpIGhhdmUgYSBjaGFuY2UgKi8KKyAgICBwZW5kaW5nICY9IH4oMSA8PCBiaXRudW0pOworICAgIHJldHVybiBxdWl0dGluZzsKK30KKworc3RhdGljIHZvaWQgKgorc3RhcnRfd29ybSh2b2lkICphcmcpCit7CisgICAgdW5zaWduZWQgbG9uZyBjb21wYXJlID0gMDsKKyAgICBUcmFjZSgoInN0YXJ0X3dvcm0iKSk7CisgICAgd2hpbGUgKCFxdWl0X3dvcm0oKChzdHJ1Y3Qgd29ybSAqKSBhcmcpIC0gd29ybSkpIHsKKwl3aGlsZSAoY29tcGFyZSA8IHNlcXVlbmNlKSB7CisJICAgICsrY29tcGFyZTsKKwkgICAgdXNlX3dpbmRvdyhzdGRzY3IsIGRyYXdfd29ybSwgYXJnKTsKKwl9CisgICAgfQorICAgIFRyYWNlKCgiLi4uc3RhcnRfd29ybSAoZG9uZSkiKSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wKK2RyYXdfYWxsX3dvcm1zKHZvaWQpCit7CisgICAgYm9vbCBkb25lID0gRkFMU0U7CisgICAgaW50IG47CisgICAgc3RydWN0IHdvcm0gKnc7CisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IFRSVUU7CisgICAgaWYgKGZpcnN0KSB7CisJZmlyc3QgPSBGQUxTRTsKKwlmb3IgKG4gPSAwLCB3ID0gJndvcm1bMF07IG4gPCBudW1iZXI7IG4rKywgdysrKSB7CisJICAgIGludCByYzsKKwkgICAgcmMgPSBwdGhyZWFkX2NyZWF0ZSgmKHctPnRocmVhZCksIE5VTEwsIHN0YXJ0X3dvcm0sIHcpOworCX0KKyAgICB9CisjZWxzZQorICAgIGZvciAobiA9IDAsIHcgPSAmd29ybVswXTsgbiA8IG51bWJlcjsgbisrLCB3KyspIHsKKwlpZiAoVVNJTkdfV0lORE9XMihzdGRzY3IsIGRyYXdfd29ybSwgdykpCisJICAgIGRvbmUgPSBUUlVFOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBkb25lOworfQorCitzdGF0aWMgaW50CitnZXRfaW5wdXQodm9pZCkKK3sKKyAgICBpbnQgY2g7CisgICAgY2ggPSBVU0lOR19XSU5ET1coc3Rkc2NyLCB3Z2V0Y2gpOworICAgIHJldHVybiBjaDsKK30KKworI2lmZGVmIEtFWV9SRVNJWkUKK3N0YXRpYyBpbnQKK3VwZGF0ZV9yZWZzKFdJTkRPVyAqd2luKQoreworICAgIGludCB4LCB5OworCisgICAgKHZvaWQpIHdpbjsKKyAgICBpZiAobGFzdF94ICE9IENPTFMgLSAxKSB7CisJZm9yICh5ID0gMDsgeSA8PSBsYXN0X3k7IHkrKykgeworCSAgICByZWZzW3ldID0gdHlwZVJlYWxsb2Moc2hvcnQsIENPTFMsIHJlZnNbeV0pOworCSAgICBmb3IgKHggPSBsYXN0X3ggKyAxOyB4IDwgQ09MUzsgeCsrKQorCQlyZWZzW3ldW3hdID0gMDsKKwl9CisJbGFzdF94ID0gQ09MUyAtIDE7CisgICAgfQorICAgIGlmIChsYXN0X3kgIT0gTElORVMgLSAxKSB7CisJZm9yICh5ID0gTElORVM7IHkgPD0gbGFzdF95OyB5KyspCisJICAgIGZyZWUocmVmc1t5XSk7CisJcmVmcyA9IHR5cGVSZWFsbG9jKHNob3J0ICosIExJTkVTLCByZWZzKTsKKwlmb3IgKHkgPSBsYXN0X3kgKyAxOyB5IDwgTElORVM7IHkrKykgeworCSAgICByZWZzW3ldID0gdHlwZU1hbGxvYyhzaG9ydCwgQ09MUyk7CisJICAgIGZvciAoeCA9IDA7IHggPCBDT0xTOyB4KyspCisJCXJlZnNbeV1beF0gPSAwOworCX0KKwlsYXN0X3kgPSBMSU5FUyAtIDE7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgeCwgeTsKKyAgICBpbnQgbjsKKyAgICBzdHJ1Y3Qgd29ybSAqdzsKKyAgICBzaG9ydCAqaXA7CisgICAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBmb3IgKHggPSAxOyB4IDwgYXJnYzsgeCsrKSB7CisJY2hhciAqcDsKKwlwID0gYXJndlt4XTsKKwlpZiAoKnAgPT0gJy0nKQorCSAgICBwKys7CisJc3dpdGNoICgqcCkgeworCWNhc2UgJ2YnOgorCSAgICBmaWVsZCA9ICJXT1JNIjsKKwkgICAgYnJlYWs7CisJY2FzZSAnbCc6CisJICAgIGlmICgrK3ggPT0gYXJnYykKKwkJZ290byB1c2FnZTsKKwkgICAgaWYgKChsZW5ndGggPSBhdG9pKGFyZ3ZbeF0pKSA8IDIgfHwgbGVuZ3RoID4gTUFYX0xFTkdUSCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJbnZhbGlkIGxlbmd0aFxuIiwgKmFyZ3YpOworCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJ24nOgorCSAgICBpZiAoKyt4ID09IGFyZ2MpCisJCWdvdG8gdXNhZ2U7CisJICAgIGlmICgobnVtYmVyID0gYXRvaShhcmd2W3hdKSkgPCAxIHx8IG51bWJlciA+IE1BWF9XT1JNUykgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJbnZhbGlkIG51bWJlciBvZiB3b3Jtc1xuIiwgKmFyZ3YpOworCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJ3QnOgorCSAgICB0cmFpbCA9ICcuJzsKKwkgICAgYnJlYWs7CisjaWZkZWYgVFJBQ0UKKwljYXNlICdUJzoKKwkgICAgdHJhY2Vfc3RhcnQgPSBhdG9pKGFyZ3ZbKyt4XSk7CisJICAgIHRyYWNlX2VuZCA9IGF0b2koYXJndlsrK3hdKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnTic6CisJICAgIF9uY19vcHRpbWl6ZV9lbmFibGUgXj0gT1BUSU1JWkVfQUxMOwkvKiBkZWNsYXJlZCBieSBuY3Vyc2VzICovCisJICAgIGJyZWFrOworI2VuZGlmIC8qIFRSQUNFICovCisJZGVmYXVsdDoKKwkgIHVzYWdlOgorCSAgICBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICJ1c2FnZTogJXMgWy1maWVsZF0gWy1sZW5ndGggI10gWy1udW1iZXIgI10gWy10cmFpbF1cbiIsICphcmd2KTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisgICAgfQorCisgICAgc2lnbmFsKFNJR0lOVCwgb25zaWcpOworICAgIGluaXRzY3IoKTsKKyAgICBub2VjaG8oKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub25sKCk7CisKKyAgICBjdXJzX3NldCgwKTsKKworICAgIGxhc3RfeSA9IExJTkVTIC0gMTsKKyAgICBsYXN0X3ggPSBDT0xTIC0gMTsKKworI2lmZGVmIEFfQ09MT1IKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaW50IGJnID0gQ09MT1JfQkxBQ0s7CisJc3RhcnRfY29sb3IoKTsKKyNpZiBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUworCWlmICh1c2VfZGVmYXVsdF9jb2xvcnMoKSA9PSBPSykKKwkgICAgYmcgPSAtMTsKKyNlbmRpZgorCisjZGVmaW5lIFNFVF9DT0xPUihudW0sIGZnKSBcCisJICAgIGluaXRfcGFpcihudW0rMSwgZmcsIGJnKTsgXAorCSAgICBmbGF2b3JbbnVtXSB8PSBDT0xPUl9QQUlSKG51bSsxKSB8IEFfQk9MRAorCisJU0VUX0NPTE9SKDAsIENPTE9SX0dSRUVOKTsKKwlTRVRfQ09MT1IoMSwgQ09MT1JfUkVEKTsKKwlTRVRfQ09MT1IoMiwgQ09MT1JfQ1lBTik7CisJU0VUX0NPTE9SKDMsIENPTE9SX1dISVRFKTsKKwlTRVRfQ09MT1IoNCwgQ09MT1JfTUFHRU5UQSk7CisJU0VUX0NPTE9SKDUsIENPTE9SX0JMVUUpOworCVNFVF9DT0xPUig2LCBDT0xPUl9ZRUxMT1cpOworICAgIH0KKyNlbmRpZiAvKiBBX0NPTE9SICovCisKKyAgICByZWZzID0gdHlwZU1hbGxvYyhzaG9ydCAqLCBMSU5FUyk7CisgICAgZm9yICh5ID0gMDsgeSA8IExJTkVTOyB5KyspIHsKKwlyZWZzW3ldID0gdHlwZU1hbGxvYyhzaG9ydCwgQ09MUyk7CisJZm9yICh4ID0gMDsgeCA8IENPTFM7IHgrKykgeworCSAgICByZWZzW3ldW3hdID0gMDsKKwl9CisgICAgfQorCisjaWZkZWYgQkFEQ09STkVSCisgICAgLyogaWYgYWRkcmVzc2luZyB0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGRvZXNuJ3Qgd29yayBpbiB5b3VyIGN1cnNlcyAqLworICAgIHJlZnNbbGFzdF95XVtsYXN0X3hdID0gMTsKKyNlbmRpZiAvKiBCQURDT1JORVIgKi8KKworICAgIGZvciAobiA9IG51bWJlciwgdyA9ICZ3b3JtWzBdOyAtLW4gPj0gMDsgdysrKSB7CisJdy0+YXR0cnMgPSBmbGF2b3JbbiAlIFNJWkVPRihmbGF2b3IpXTsKKwl3LT5vcmllbnRhdGlvbiA9IDA7CisJdy0+aGVhZCA9IDA7CisKKwlpZiAoIShpcCA9IHR5cGVNYWxsb2Moc2hvcnQsIChsZW5ndGggKyAxKSkpKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsICphcmd2KTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisJdy0+eHBvcyA9IGlwOworCWZvciAoeCA9IGxlbmd0aDsgLS14ID49IDA7KQorCSAgICAqaXArKyA9IC0xOworCWlmICghKGlwID0gdHlwZU1hbGxvYyhzaG9ydCwgKGxlbmd0aCArIDEpKSkpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgKmFyZ3YpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKwl3LT55cG9zID0gaXA7CisJZm9yICh5ID0gbGVuZ3RoOyAtLXkgPj0gMDspCisJICAgICppcCsrID0gLTE7CisgICAgfQorICAgIGlmIChmaWVsZCkgeworCWNvbnN0IGNoYXIgKnA7CisJcCA9IGZpZWxkOworCWZvciAoeSA9IGxhc3RfeTsgLS15ID49IDA7KSB7CisJICAgIGZvciAoeCA9IENPTFM7IC0teCA+PSAwOykgeworCQlhZGRjaCgoY2h0eXBlKSAoKnArKykpOworCQlpZiAoISpwKQorCQkgICAgcCA9IGZpZWxkOworCSAgICB9CisJfQorICAgIH0KKyAgICBVU0lOR19XSU5ET1coc3Rkc2NyLCB3cmVmcmVzaCk7CisgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworCisgICAgd2hpbGUgKCFkb25lKSB7CisJaW50IGNoOworCisJKytzZXF1ZW5jZTsKKwlpZiAoKGNoID0gZ2V0X2lucHV0KCkpID4gMCkgeworI2lmZGVmIFRSQUNFCisJICAgIGlmICh0cmFjZV9zdGFydCB8fCB0cmFjZV9lbmQpIHsKKwkJaWYgKGdlbmVyYXRpb24gPT0gdHJhY2Vfc3RhcnQpIHsKKwkJICAgIHRyYWNlKFRSQUNFX0NBTExTKTsKKwkJICAgIGdldF9pbnB1dCgpOworCQl9IGVsc2UgaWYgKGdlbmVyYXRpb24gPT0gdHJhY2VfZW5kKSB7CisJCSAgICB0cmFjZSgwKTsKKwkJICAgIGdldF9pbnB1dCgpOworCQl9CisKKwkJZ2VuZXJhdGlvbisrOworCSAgICB9CisjZW5kaWYKKworI2lmZGVmIEtFWV9SRVNJWkUKKwkgICAgaWYgKGNoID09IEtFWV9SRVNJWkUpIHsKKwkJVVNJTkdfV0lORE9XKHN0ZHNjciwgdXBkYXRlX3JlZnMpOworCSAgICB9CisjZW5kaWYKKworCSAgICAvKgorCSAgICAgKiBNYWtlIGl0IHNpbXBsZSB0byBwdXQgdGhpcyBpbnRvIHNpbmdsZS1zdGVwIG1vZGUsIG9yIHJlc3VtZQorCSAgICAgKiBub3JtYWwgb3BlcmF0aW9uIC1ULkRpY2tleQorCSAgICAgKi8KKwkgICAgaWYgKGNoID09ICdxJykgeworCQlxdWl0dGluZyA9IFRSVUU7CisJCWRvbmUgPSBUUlVFOworCQljb250aW51ZTsKKwkgICAgfSBlbHNlIGlmIChjaCA9PSAncycpIHsKKwkJbm9kZWxheShzdGRzY3IsIEZBTFNFKTsKKwkgICAgfSBlbHNlIGlmIChjaCA9PSAnICcpIHsKKwkJbm9kZWxheShzdGRzY3IsIFRSVUUpOworCSAgICB9CisJfQorCisJZG9uZSA9IGRyYXdfYWxsX3dvcm1zKCk7CisJbmFwbXMoMTApOworCVVTSU5HX1dJTkRPVyhzdGRzY3IsIHdyZWZyZXNoKTsKKyAgICB9CisKKyAgICBUcmFjZSgoIkNsZWFudXAiKSk7CisgICAgY2xlYW51cCgpOworI2lmZGVmIE5PX0xFQUtTCisgICAgZm9yICh5ID0gMDsgeSA8IExJTkVTOyB5KyspIHsKKwlmcmVlKHJlZnNbeV0pOworICAgIH0KKyAgICBmcmVlKHJlZnMpOworICAgIGZvciAobiA9IG51bWJlciwgdyA9ICZ3b3JtWzBdOyAtLW4gPj0gMDsgdysrKSB7CisJZnJlZSh3LT54cG9zKTsKKwlmcmVlKHctPnlwb3MpOworICAgIH0KKyNlbmRpZgorI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIC8qCisgICAgICogRG8gdGhpcyBqdXN0IGluIGNhc2Ugb25lIG9mIHRoZSB0aHJlYWRzIGRpZCBub3QgcmVhbGx5IGV4aXQuCisgICAgICovCisgICAgVHJhY2UoKCJqb2luIGFsbCB0aHJlYWRzIikpOworICAgIGZvciAobiA9IDA7IG4gPCBudW1iZXI7IG4rKykgeworCXB0aHJlYWRfam9pbih3b3JtW25dLnRocmVhZCwgTlVMTCk7CisgICAgfQorI2VuZGlmCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QveG1hcy5jIGIvdGVzdC94bWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzOGJhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QveG1hcy5jCkBAIC0wLDAgKzEsMTE2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFzY2lpeG1hcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBEZWNlbWJlciAxOTg5ICAgICAgICAgICAgIExhcnJ5IEJhcnR6ICAgICAgICAgICBJbmRpYW5hcG9saXMsIElOICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJJ20gZHJlYW1pbmcgb2YgYW4gYXNjaWkgY2hhcmFjdGVyLWJhc2VkIG1vbm9jaHJvbWUgQ2hyaXN0bWFzLCAgICAgICAgICAgICAqLworLyogSnVzdCBsaWtlIHRoZSBvbmUncyBJIHVzZWQgdG8ga25vdyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFZpYSBhIGZ1bGwgZHVwbGV4IGNvbW11bmljYXRpb25zIGNoYW5uZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBBdCA5NjAwIGJpdHMgcGVyIHNlY29uZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRXZlbiB0aG91Z2ggaXQncyBraW5kYSBzbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJJ20gZHJlYW1pbmcgb2YgYW4gYXNjaWkgY2hhcmFjdGVyLWJhc2VkIG1vbm9jaHJvbWUgQ2hyaXN0bWFzLCAgICAgICAgICAgICAqLworLyogV2l0aCBldidyeSBDIHByb2dyYW0gSSB3cml0ZSEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIE1heSB5b3VyIHNjcmVlbiBiZSBtZXJyeSBhbmQgYnJpZ2h0ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBBbmQgbWF5IGFsbCB5b3VyIENocmlzdG1hc2VzIGJlIGFtYmVyIG9yIGdyZWVuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogKGZvciByZWR1Y2VkIGV5ZXN0cmFpbiBhbmQgaW1wcm92ZWQgdmlzaWJpbGl0eSkhICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSU1QTEVNRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBGZWVsIGZyZWUgdG8gbW9kaWZ5IHRoZSBkZWZpbmVkIHN0cmluZyBGUk9NV0hPIHRvIHJlZmxlY3QgeW91LCB5b3VyICAgICAgICAqLworLyogb3JnYW5pemF0aW9uLCB5b3VyIHNpdGUsIHdoYXRldmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGlzIHJlYWxseSBsb29rcyBhIGxvdCBiZXR0ZXIgaWYgeW91IGNhbiB0dXJuIG9mZiB5b3VyIGN1cnNvciBiZWZvcmUgICAgICAqLworLyogZXhlY3V0aW9uLiBJIHdhbnRlZCB0byBkbyB0aGF0IGhlcmUgYnV0IHZlcnkgZmV3IHRlcm1jYXAgZW50cmllcyBvciAgICAgICAgKi8KKy8qIHRlcm1pbmZvIGRlZmluaXRpb25zIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHN0cmluZyBkZWZpbmVkLiBJZiB5b3Uga25vdyAgICAgICovCisvKiB0aGUgc3RyaW5nKHMpIGZvciB0aGUgdGVybWluYWwocykgeW91IHVzZSBvciB3aGljaCB5b3VyIHNpdGUgc3VwcG9ydHMsICAgICAqLworLyogeW91IGNvdWxkIGNhbGwgYXNjaWl4bWFzIGZyb20gd2l0aGluIGEgc2hlbGwgaW4gd2hpY2ggeW91IGlzc3VlIHRoZSAgICAgICAgKi8KKy8qIHN0cmluZyB0byB0aGUgdGVybWluYWwuIFRoZSBjdXJzb3IgaXMgZGlzdHJhY3RpbmcgYnV0IGl0IGRvZXNuJ3QgcmVhbGx5ICAgICovCisvKiBydWluIHRoZSBzaG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEF0IG91ciBzaXRlLCB3ZSBpbnZva2UgdGhpcyBmb3Igb3VyIHVzZXJzIGp1c3QgYWZ0ZXIgbG9naW4gYW5kIHRoZSAgICAgICAgICovCisvKiBkZXRlcm1pbmF0aW9uIG9mIHRlcm1pbmFsIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBQT1JUQUJJTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEkgd3JvdGUgdGhpcyB1c2luZyBvbmx5IHRoZSB2ZXJ5IHNpbXBsZXN0IGN1cnNlcyBmdW5jdGlvbnMgc28gdGhhdCBpdCAgICAgICovCisvKiBtaWdodCBiZSB0aGUgbW9zdCBwb3J0YWJsZS4gSSB3YXMgcGVyc29uYWxseSBhYmxlIHRvIHRlc3Qgb24gZml2ZSAgICAgICAgICAqLworLyogZGlmZmVyZW50IGNwdS9VTklYIGNvbWJpbmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQ09NUElMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiB1c3VhbGx5IHRoaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGNjIC1PIGFzY2lpeG1hcy5jIC1sY3Vyc2VzIC1vIGFzY2lpeG1hcyAtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFppbG9nIFM4MDAwIG1vZGVscyAxMSwgMjEsIDMxLCBldGMgd2l0aCBaRVVTIHZhcmlhbnQgb2YgU1lTVEVNIElJSSAgICAgICAgICovCisvKiBtYXliZSBvdGhlciBTWVNURU0gSUlJIGFsc286ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGNjIGFzY2lpeG1hcy5jIC1sY3Vyc2VzIC1sdGVybWxpYiAtbyBhc2NpaXhtYXMgLXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogYXMgYWJvdmUgd2l0aCBvcHRpb25hbCAicGVlcGhvbGUgb3B0aW1pemVyIiBpbnN0YWxsZWQ6ICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBjYyAtTyBhc2NpaXhtYXMuYyAtbGN1cnNlcyAtbHRlcm1saWIgLW8gYXNjaWl4bWFzIC1zICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBaaWxvZyBTODAwMCBtb2RlbHMgMzIsIDEzMCB3aXRoIFdFMzIxMDAgY2hpcCBhbmQgU1lTIFYsIFJFTDIgICAgICAgICAgICAgICAqLworLyogbWF5YmUgM0IyIGFsc28/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBjYyAtZiAtTyAtSyBzZCBhc2NpaXhtYXMuYyAtbGN1cnNlcyAtbyBhc2NpaXhtYXMgLXMgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBQeXJhbWlkLCBTZXF1ZW50LCBhbnkgb3RoZXIgImR1YWwgdW5pdmVyc2UiIHR5cGVzIGNvbXBpbGUgYW5kIGV4ZWN1dGUgICAgICAqLworLyogdW5kZXIgZWl0aGVyIHVuaXZlcnNlLiBUaGUgY29tcGlsZSBsaW5lIGZvciB0aGUgdWNiIHVuaXZlcnNlIChhcyB5b3UgICAgICAgKi8KKy8qIG1pZ2h0IGV4cGVjdCkgaXMgdGhlIHNhbWUgYXMgZm9yIFNZUyBJSUkgVU5JWDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogY2MgLU8gYXNjaWl4bWFzLmMgLWxjdXJzZXMgLWx0ZXJtbGliIC1vIGFzY2lpeG1hcyAtcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGUgYWJvdmUgY29tcGlsZSB3aWxsIGFsc28gaG9sZCB0cnVlIGZvciBvdGhlciBCU0Qgc3lzdGVtcy4gKEkgaG9wZSkgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEZvciB0aGUgU2Nyb29nZXMgb3V0IHRoZXJlIGFtb25nIHlvdSB3aG8gZG9uJ3Qgd2FudCB0aGlzIHRoaW5nIHRvIGxvb3AgICAgICovCisvKiBmb3JldmVyIChvciB1bnRpbCB0aGUgdXNlciBoaXRzIGEga2V5KSwgaW5zZXJ0IHRoaXMgaW50byB5b3VyIGNvbXBpbGUgICAgICAqLworLyogbGluZSBqdXN0IGFmdGVyICJjYyIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtRE5PTE9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGxpa2Ugc286ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogY2MgLUROT0xPT1AgLU8gYXNjaWl4bWFzLmMgLWxjdXJzZXMgLW8gYXNjaWl4bWFzIC1zICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAkSWQ6IHhtYXMuYyx2IDEuMjQgMjAwOC8wOC8wMyAxMTowODo1OSB0b20gRXhwICQKKyAqLworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjZGVmaW5lIEZST01XSE8gIk1hcmsgSGVzc2xpbmcgLSAoTS5IZXNzbGluZ0BndS5lZHUuYXUpIgorCitzdGF0aWMgaW50IG15X2JnID0gQ09MT1JfQkxBQ0s7CitzdGF0aWMgaW50IHlfcG9zLCB4X3BvczsKKworc3RhdGljIFdJTkRPVyAqdHJlZXNjcm47CitzdGF0aWMgV0lORE9XICp0cmVlc2NybjI7CitzdGF0aWMgV0lORE9XICp0cmVlc2NybjM7CitzdGF0aWMgV0lORE9XICp0cmVlc2NybjQ7CitzdGF0aWMgV0lORE9XICp0cmVlc2NybjU7CitzdGF0aWMgV0lORE9XICp0cmVlc2NybjY7CitzdGF0aWMgV0lORE9XICp0cmVlc2Nybjc7CitzdGF0aWMgV0lORE9XICp0cmVlc2Nybjg7CitzdGF0aWMgV0lORE9XICpkb3RkZWVyMDsKK3N0YXRpYyBXSU5ET1cgKnN0YXJkZWVyMDsKK3N0YXRpYyBXSU5ET1cgKmxpbGRlZXIwOworc3RhdGljIFdJTkRPVyAqbGlsZGVlcjE7CitzdGF0aWMgV0lORE9XICpsaWxkZWVyMjsKK3N0YXRpYyBXSU5ET1cgKmxpbGRlZXIzOworc3RhdGljIFdJTkRPVyAqbWlkZGVlcjA7CitzdGF0aWMgV0lORE9XICptaWRkZWVyMTsKK3N0YXRpYyBXSU5ET1cgKm1pZGRlZXIyOworc3RhdGljIFdJTkRPVyAqbWlkZGVlcjM7CitzdGF0aWMgV0lORE9XICpiaWdkZWVyMDsKK3N0YXRpYyBXSU5ET1cgKmJpZ2RlZXIxOworc3RhdGljIFdJTkRPVyAqYmlnZGVlcjI7CitzdGF0aWMgV0lORE9XICpiaWdkZWVyMzsKK3N0YXRpYyBXSU5ET1cgKmJpZ2RlZXI0Oworc3RhdGljIFdJTkRPVyAqbG9va2RlZXIwOworc3RhdGljIFdJTkRPVyAqbG9va2RlZXIxOworc3RhdGljIFdJTkRPVyAqbG9va2RlZXIyOworc3RhdGljIFdJTkRPVyAqbG9va2RlZXIzOworc3RhdGljIFdJTkRPVyAqbG9va2RlZXI0Oworc3RhdGljIFdJTkRPVyAqd19ob2xpZGF5Oworc3RhdGljIFdJTkRPVyAqd19kZWxfbXNnOworc3RhdGljIGJvb2wgKm15X3BhaXJzOworCitzdGF0aWMgaW50IGJveGl0KHZvaWQpOworc3RhdGljIGludCBzZWFzKHZvaWQpOworc3RhdGljIGludCBncmVldCh2b2lkKTsKK3N0YXRpYyBpbnQgZnJvbXdobyh2b2lkKTsKK3N0YXRpYyBpbnQgdHJlZSh2b2lkKTsKK3N0YXRpYyBpbnQgYmFsbHModm9pZCk7CitzdGF0aWMgaW50IHN0YXIodm9pZCk7CitzdGF0aWMgaW50IHN0cm5nMSh2b2lkKTsKK3N0YXRpYyBpbnQgc3RybmcyKHZvaWQpOworc3RhdGljIGludCBzdHJuZzModm9pZCk7CitzdGF0aWMgaW50IHN0cm5nNCh2b2lkKTsKK3N0YXRpYyBpbnQgc3Rybmc1KHZvaWQpOworc3RhdGljIGludCByZWluZGVlcih2b2lkKTsKK3N0YXRpYyBpbnQgYmxpbmtpdCh2b2lkKTsKKworc3RhdGljIFJFVFNJR1RZUEUgZG9uZShpbnQgc2lnKSBHQ0NfTk9SRVRVUk47CisKK3N0YXRpYyB2b2lkCitzZXRfY29sb3IoV0lORE9XICp3aW4sIGNodHlwZSBjb2xvcikKK3sKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaW50IG4gPSAoY29sb3IgKyAxKTsKKwlpZiAobXlfcGFpcnMgPT0gMCkKKwkgICAgbXlfcGFpcnMgPSB0eXBlQ2FsbG9jKGJvb2wsIENPTE9SUyArIDEpOworCWlmICghbXlfcGFpcnNbbl0pIHsKKwkgICAgaW5pdF9wYWlyKG4sIGNvbG9yLCBteV9iZyk7CisJICAgIG15X3BhaXJzW25dID0gVFJVRTsKKwl9CisJd2F0dHJvZmYod2luLCBBX0NPTE9SKTsKKwl3YXR0cm9uKHdpbiwgQ09MT1JfUEFJUihuKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordW5zZXRfY29sb3IoV0lORE9XICp3aW4pCit7CisgICAgaWYgKGhhc19jb2xvcnMoKSkKKwl3YXR0cnNldCh3aW4sIENPTE9SX1BBSVIoMCkpOworfQorCitzdGF0aWMgdm9pZAorbG9va19vdXQoaW50IG1zZWNzKQoreworICAgIG5hcG1zKG1zZWNzKTsKKyAgICBpZiAoZ2V0Y2goKSAhPSBFUlIpIHsKKwliZWVwKCk7CisJZG9uZSgwKTsKKyAgICB9Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICoqYXJndiBHQ0NfVU5VU0VEKQoreworICAgIGludCBsb29weTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGluaXRzY3IoKTsKKyAgICBub2VjaG8oKTsKKyAgICBub25sKCk7CisgICAgcmVmcmVzaCgpOworCisgICAgQ0FUQ0hBTEwoZG9uZSk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKyNpZiBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUworCWlmICh1c2VfZGVmYXVsdF9jb2xvcnMoKSA9PSBPSykKKwkgICAgbXlfYmcgPSAtMTsKKyNlbmRpZgorICAgIH0KKyAgICBjdXJzX3NldCgwKTsKKworICAgIGlmICgodHJlZXNjcm4gPSBuZXd3aW4oMTYsIDI3LCAzLCA1MykpID09IDAgfHwKKwkodHJlZXNjcm4yID0gbmV3d2luKDE2LCAyNywgMywgNTMpKSA9PSAwIHx8CisJKHRyZWVzY3JuMyA9IG5ld3dpbigxNiwgMjcsIDMsIDUzKSkgPT0gMCB8fAorCSh0cmVlc2NybjQgPSBuZXd3aW4oMTYsIDI3LCAzLCA1MykpID09IDAgfHwKKwkodHJlZXNjcm41ID0gbmV3d2luKDE2LCAyNywgMywgNTMpKSA9PSAwIHx8CisJKHRyZWVzY3JuNiA9IG5ld3dpbigxNiwgMjcsIDMsIDUzKSkgPT0gMCB8fAorCSh0cmVlc2NybjcgPSBuZXd3aW4oMTYsIDI3LCAzLCA1MykpID09IDAgfHwKKwkodHJlZXNjcm44ID0gbmV3d2luKDE2LCAyNywgMywgNTMpKSA9PSAwIHx8CisKKwkoZG90ZGVlcjAgPSBuZXd3aW4oMywgNzEsIDAsIDgpKSA9PSAwIHx8CisKKwkoc3RhcmRlZXIwID0gbmV3d2luKDQsIDU2LCAwLCA4KSkgPT0gMCB8fAorCisJKGxpbGRlZXIwID0gbmV3d2luKDcsIDUzLCAwLCA4KSkgPT0gMCB8fAorCShsaWxkZWVyMSA9IG5ld3dpbigyLCA0LCAwLCAwKSkgPT0gMCB8fAorCShsaWxkZWVyMiA9IG5ld3dpbigyLCA0LCAwLCAwKSkgPT0gMCB8fAorCShsaWxkZWVyMyA9IG5ld3dpbigyLCA0LCAwLCAwKSkgPT0gMCB8fAorCisJKG1pZGRlZXIwID0gbmV3d2luKDE1LCA0MiwgMCwgOCkpID09IDAgfHwKKwkobWlkZGVlcjEgPSBuZXd3aW4oMywgNywgMCwgMCkpID09IDAgfHwKKwkobWlkZGVlcjIgPSBuZXd3aW4oMywgNywgMCwgMCkpID09IDAgfHwKKwkobWlkZGVlcjMgPSBuZXd3aW4oMywgNywgMCwgMCkpID09IDAgfHwKKworCShiaWdkZWVyMCA9IG5ld3dpbigxMCwgMjMsIDAsIDApKSA9PSAwIHx8CisJKGJpZ2RlZXIxID0gbmV3d2luKDEwLCAyMywgMCwgMCkpID09IDAgfHwKKwkoYmlnZGVlcjIgPSBuZXd3aW4oMTAsIDIzLCAwLCAwKSkgPT0gMCB8fAorCShiaWdkZWVyMyA9IG5ld3dpbigxMCwgMjMsIDAsIDApKSA9PSAwIHx8CisJKGJpZ2RlZXI0ID0gbmV3d2luKDEwLCAyMywgMCwgMCkpID09IDAgfHwKKworCShsb29rZGVlcjAgPSBuZXd3aW4oMTAsIDI1LCAwLCAwKSkgPT0gMCB8fAorCShsb29rZGVlcjEgPSBuZXd3aW4oMTAsIDI1LCAwLCAwKSkgPT0gMCB8fAorCShsb29rZGVlcjIgPSBuZXd3aW4oMTAsIDI1LCAwLCAwKSkgPT0gMCB8fAorCShsb29rZGVlcjMgPSBuZXd3aW4oMTAsIDI1LCAwLCAwKSkgPT0gMCB8fAorCShsb29rZGVlcjQgPSBuZXd3aW4oMTAsIDI1LCAwLCAwKSkgPT0gMCB8fAorCisJKHdfaG9saWRheSA9IG5ld3dpbigxLCAyNiwgMywgMjcpKSA9PSAwIHx8CisKKwkod19kZWxfbXNnID0gbmV3d2luKDEsIDE5LCAyMywgNjApKSA9PSAwKSB7CisJZW5kd2luKCk7CisJZnByaW50ZihzdGRlcnIsICJDYW5ub3QgY3JlYXRlIHdpbmRvd3MgLSBzY3JlZW4gdG9vIHNtYWxsXG4iKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIG12d2FkZHN0cih3X2RlbF9tc2csIDAsIDAsICJIaXQgYW55IGtleSB0byBxdWl0Iik7CisKKyAgICBtdndhZGRzdHIod19ob2xpZGF5LCAwLCAwLCAiSCBBIFAgUCBZICBIIE8gTCBJIEQgQSBZIFMiKTsKKworICAgIC8qIHNldCB1cCB0aGUgd2luZG93cyBmb3Igb3VyIHZhcmlvdXMgcmVpbmRlZXIgKi8KKworICAgIC8qIGxpbGRlZXIxICovCisgICAgbXZ3YWRkY2gobGlsZGVlcjEsIDAsIDAsIChjaHR5cGUpICdWJyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjEsIDEsIDAsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjEsIDEsIDEsIChjaHR5cGUpICc8Jyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjEsIDEsIDIsIChjaHR5cGUpICc+Jyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjEsIDEsIDMsIChjaHR5cGUpICd+Jyk7CisKKyAgICAvKiBsaWxkZWVyMiAqLworICAgIG12d2FkZGNoKGxpbGRlZXIyLCAwLCAwLCAoY2h0eXBlKSAnVicpOworICAgIG12d2FkZGNoKGxpbGRlZXIyLCAxLCAwLCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKGxpbGRlZXIyLCAxLCAxLCAoY2h0eXBlKSAnfCcpOworICAgIG12d2FkZGNoKGxpbGRlZXIyLCAxLCAyLCAoY2h0eXBlKSAnfCcpOworICAgIG12d2FkZGNoKGxpbGRlZXIyLCAxLCAzLCAoY2h0eXBlKSAnficpOworCisgICAgLyogbGlsZGVlcjMgKi8KKyAgICBtdndhZGRjaChsaWxkZWVyMywgMCwgMCwgKGNodHlwZSkgJ1YnKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMywgMSwgMCwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMywgMSwgMSwgKGNodHlwZSkgJz4nKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMywgMSwgMiwgKGNodHlwZSkgJzwnKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMiwgMSwgMywgKGNodHlwZSkgJ34nKTsKKworICAgIC8qIG1pZGRlZXIxICovCisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDAsIDIsIChjaHR5cGUpICd5Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDAsIDMsIChjaHR5cGUpICd5Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDEsIDIsIChjaHR5cGUpICcwJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDEsIDMsIChjaHR5cGUpICcoJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDEsIDQsIChjaHR5cGUpICc9Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDEsIDUsIChjaHR5cGUpICcpJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDEsIDYsIChjaHR5cGUpICd+Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDIsIDMsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKG1pZGRlZXIxLCAyLCA0LCAoY2h0eXBlKSAnLycpOworCisgICAgLyogbWlkZGVlcjIgKi8KKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMCwgMiwgKGNodHlwZSkgJ3knKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMCwgMywgKGNodHlwZSkgJ3knKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMSwgMiwgKGNodHlwZSkgJzAnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMSwgMywgKGNodHlwZSkgJygnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMSwgNCwgKGNodHlwZSkgJz0nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMSwgNSwgKGNodHlwZSkgJyknKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMSwgNiwgKGNodHlwZSkgJ34nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMiwgMywgKGNodHlwZSkgJ3wnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMiwgMiwgNSwgKGNodHlwZSkgJ3wnKTsKKworICAgIC8qIG1pZGRlZXIzICovCisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDAsIDIsIChjaHR5cGUpICd5Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDAsIDMsIChjaHR5cGUpICd5Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDEsIDIsIChjaHR5cGUpICcwJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDEsIDMsIChjaHR5cGUpICcoJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDEsIDQsIChjaHR5cGUpICc9Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDEsIDUsIChjaHR5cGUpICcpJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDEsIDYsIChjaHR5cGUpICd+Jyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDIsIDIsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjMsIDIsIDYsIChjaHR5cGUpICdcXCcpOworCisgICAgLyogYmlnZGVlcjEgKi8KKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMCwgMTcsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAwLCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMCwgMjAsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAwLCAyMSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMSwgMTgsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAxLCAyMCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMiwgMTksIChjaHR5cGUpICd8Jyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDIsIDIwLCAoY2h0eXBlKSAnXycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAzLCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMywgMTksIChjaHR5cGUpICdeJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDMsIDIwLCAoY2h0eXBlKSAnMCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAzLCAyMSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDQsIDE3LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCA0LCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgNCwgMTksIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCA0LCAyMiwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIxLCA1LCA3LCAiXn5+fn5+fn5+Ly8gIH5+VSIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMSwgNiwgNywgIiggXFxfX19fXyggLyIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMSwgNywgOCwgIiggKSAgICAvIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIxLCA4LCA5LCAiXFxcXCAgIC8iKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjEsIDksIDExLCAiXFw+Lz4iKTsKKworICAgIC8qIGJpZ2RlZXIyICovCisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDAsIDE3LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMCwgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDAsIDIwLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMCwgMjEsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDEsIDE4LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMSwgMjAsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDIsIDE5LCAoY2h0eXBlKSAnfCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAyLCAyMCwgKGNodHlwZSkgJ18nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMywgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDMsIDE5LCAoY2h0eXBlKSAnXicpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAzLCAyMCwgKGNodHlwZSkgJzAnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMywgMjEsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCA0LCAxNywgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgNCwgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDQsIDE5LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgNCwgMjIsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZHN0cihiaWdkZWVyMiwgNSwgNywgIl5+fn5+fn5+fi8vICB+flUiKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjIsIDYsIDcsICIoKCApX19fXyggLyIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMiwgNywgNywgIiggLyAgICAgIHwiKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjIsIDgsIDgsICJcXC8gICAgICB8Iik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIyLCA5LCA5LCAifD4gICAgIHw+Iik7CisKKyAgICAvKiBiaWdkZWVyMyAqLworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAwLCAxNywgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDAsIDE4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAwLCAyMCwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDAsIDIxLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAxLCAxOCwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDEsIDIwLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAyLCAxOSwgKGNodHlwZSkgJ3wnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMiwgMjAsIChjaHR5cGUpICdfJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDMsIDE4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAzLCAxOSwgKGNodHlwZSkgJ14nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMywgMjAsIChjaHR5cGUpICcwJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDMsIDIxLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgNCwgMTcsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDQsIDE4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCA0LCAxOSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDQsIDIyLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjMsIDUsIDcsICJefn5+fn5+fn4vLyAgfn5VIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIzLCA2LCA2LCAiKCAoKV9fX19fKCAvIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIzLCA3LCA2LCAiLyAvICAgICAgIC8iKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjMsIDgsIDUsICJ8LyAgICAgICAgICBcXCIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMywgOSwgNSwgIi8+ICAgICAgICAgICBcXD4iKTsKKworICAgIC8qIGJpZ2RlZXI0ICovCisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDAsIDE3LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMCwgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDAsIDIwLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMCwgMjEsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDEsIDE4LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMSwgMjAsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDIsIDE5LCAoY2h0eXBlKSAnfCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAyLCAyMCwgKGNodHlwZSkgJ18nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMywgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDMsIDE5LCAoY2h0eXBlKSAnXicpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAzLCAyMCwgKGNodHlwZSkgJzAnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMywgMjEsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCA0LCAxNywgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgNCwgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDQsIDE5LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgNCwgMjIsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZHN0cihiaWdkZWVyNCwgNSwgNywgIl5+fn5+fn5+fi8vICB+flUiKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjQsIDYsIDYsICIoIClfX19fX18oIC8iKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjQsIDcsIDUsICIoLyAgICAgICAgICBcXCIpOworICAgIG12d2FkZHN0cihiaWdkZWVyNCwgOCwgMCwgInZfX189ICAgICAgICAgICAgIC0tLS1eIik7CisKKyAgICAvKiBsb29rZGVlcjEgKi8KKyAgICBtdndhZGRzdHIobG9va2RlZXIxLCAwLCAxNiwgIlxcLyAgICAgXFwvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgMSwgMTcsICJcXFkvIFxcWS8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIxLCAyLCAxOSwgIlxcPS8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIxLCAzLCAxNywgIl5cXG8gby9eIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgNCwgMTcsICIvLyggKSIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDUsIDcsICJefn5+fn5+fn4vLyBcXE8vIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgNiwgNywgIiggXFxfX19fXyggLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDcsIDgsICIoICkgICAgLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDgsIDksICJcXFxcICAgLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDksIDExLCAiXFw+Lz4iKTsKKworICAgIC8qIGxvb2tkZWVyMiAqLworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDAsIDE2LCAiXFwvICAgICBcXC8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIyLCAxLCAxNywgIlxcWS8gXFxZLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDIsIDE5LCAiXFw9LyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDMsIDE3LCAiXlxcbyBvL14iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIyLCA0LCAxNywgIi8vKCApIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMiwgNSwgNywgIl5+fn5+fn5+fi8vIFxcTy8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIyLCA2LCA3LCAiKCggKV9fX18oIC8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIyLCA3LCA3LCAiKCAvICAgICAgfCIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDgsIDgsICJcXC8gICAgICB8Iik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMiwgOSwgOSwgInw+ICAgICB8PiIpOworCisgICAgLyogbG9va2RlZXIzICovCisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMywgMCwgMTYsICJcXC8gICAgIFxcLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDEsIDE3LCAiXFxZLyBcXFkvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMywgMiwgMTksICJcXD0vIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMywgMywgMTcsICJeXFxvIG8vXiIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDQsIDE3LCAiLy8oICkiKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCA1LCA3LCAiXn5+fn5+fn5+Ly8gXFxPLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDYsIDYsICIoICgpX19fX18oIC8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCA3LCA2LCAiLyAvICAgICAgIC8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCA4LCA1LCAifC8gICAgICAgICAgXFwiKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCA5LCA1LCAiLz4gICAgICAgICAgIFxcPiIpOworCisgICAgLyogbG9va2RlZXI0ICovCisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyNCwgMCwgMTYsICJcXC8gICAgIFxcLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjQsIDEsIDE3LCAiXFxZLyBcXFkvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyNCwgMiwgMTksICJcXD0vIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyNCwgMywgMTcsICJeXFxvIG8vXiIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjQsIDQsIDE3LCAiLy8oICkiKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXI0LCA1LCA3LCAiXn5+fn5+fn5+Ly8gXFxPLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjQsIDYsIDYsICIoIClfX19fX18oIC8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXI0LCA3LCA1LCAiKC8gICAgICAgICAgXFwiKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXI0LCA4LCAwLCAidl9fXz0gICAgICAgICAgICAgLS0tLV4iKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBjYnJlYWsoKTsKKyAgICBub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisgICAgZm9yICg7OykgeworCWNsZWFyKCk7CisJd2VyYXNlKHRyZWVzY3JuKTsKKwl0b3VjaHdpbih3X2RlbF9tc2cpOworCXRvdWNod2luKHRyZWVzY3JuKTsKKwl3ZXJhc2UodHJlZXNjcm4yKTsKKwl0b3VjaHdpbih0cmVlc2NybjIpOworCXdlcmFzZSh0cmVlc2NybjgpOworCXRvdWNod2luKHRyZWVzY3JuOCk7CisJcmVmcmVzaCgpOworCWxvb2tfb3V0KDE1MCk7CisJYm94aXQoKTsKKwlyZWZyZXNoKCk7CisJbG9va19vdXQoMTUwKTsKKwlzZWFzKCk7CisJcmVmcmVzaCgpOworCWxvb2tfb3V0KDE1MCk7CisJZ3JlZXQoKTsKKwlyZWZyZXNoKCk7CisJbG9va19vdXQoMTUwKTsKKwlmcm9td2hvKCk7CisJcmVmcmVzaCgpOworCWxvb2tfb3V0KDE1MCk7CisJdHJlZSgpOworCWxvb2tfb3V0KDE1MCk7CisJYmFsbHMoKTsKKwlsb29rX291dCgxNTApOworCXN0YXIoKTsKKwlsb29rX291dCgxNTApOworCXN0cm5nMSgpOworCXN0cm5nMigpOworCXN0cm5nMygpOworCXN0cm5nNCgpOworCXN0cm5nNSgpOworCisJLyogc2V0IHVwIHRoZSB3aW5kb3dzIGZvciBvdXIgYmxpbmtpbmcgdHJlZXMgKi8KKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisJLyogdHJlZXNjcm4zICovCisKKwlvdmVybGF5KHRyZWVzY3JuLCB0cmVlc2NybjMpOworCisJLypiYWxscyAqLworCW12d2FkZGNoKHRyZWVzY3JuMywgNCwgMTgsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCA3LCA2LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuMywgOCwgMTksICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCAxMSwgMjIsICcgJyk7CisKKwkvKnN0YXIgKi8KKwltdndhZGRjaCh0cmVlc2NybjMsIDAsIDEyLCAnKicpOworCisJLypzdHJuZzEgKi8KKwltdndhZGRjaCh0cmVlc2NybjMsIDMsIDExLCAnICcpOworCisJLypzdHJuZzIgKi8KKwltdndhZGRjaCh0cmVlc2NybjMsIDUsIDEzLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuMywgNiwgMTAsICcgJyk7CisKKwkvKnN0cm5nMyAqLworCW12d2FkZGNoKHRyZWVzY3JuMywgNywgMTYsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCA3LCAxNCwgJyAnKTsKKworCS8qc3Rybmc0ICovCisJbXZ3YWRkY2godHJlZXNjcm4zLCAxMCwgMTMsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCAxMCwgMTAsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCAxMSwgOCwgJyAnKTsKKworCS8qc3Rybmc1ICovCisJbXZ3YWRkY2godHJlZXNjcm4zLCAxMSwgMTgsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCAxMiwgMTMsICcgJyk7CisKKwkvKiB0cmVlc2NybjQgKi8KKworCW92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuNCk7CisKKwkvKmJhbGxzICovCisJbXZ3YWRkY2godHJlZXNjcm40LCAzLCA5LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNCwgNCwgMTYsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCA3LCA2LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNCwgOCwgMTksICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCAxMSwgMiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjQsIDEyLCAyMywgJyAnKTsKKworCS8qc3RhciAqLworCXdzdGFuZG91dCh0cmVlc2NybjQpOworCW12d2FkZGNoKHRyZWVzY3JuNCwgMCwgMTIsICcqJyk7CisJd3N0YW5kZW5kKHRyZWVzY3JuNCk7CisKKwkvKnN0cm5nMSAqLworCW12d2FkZGNoKHRyZWVzY3JuNCwgMywgMTMsICcgJyk7CisKKwkvKnN0cm5nMiAqLworCisJLypzdHJuZzMgKi8KKwltdndhZGRjaCh0cmVlc2NybjQsIDcsIDE1LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNCwgOCwgMTEsICcgJyk7CisKKwkvKnN0cm5nNCAqLworCW12d2FkZGNoKHRyZWVzY3JuNCwgOSwgMTYsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCAxMCwgMTIsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCAxMSwgOCwgJyAnKTsKKworCS8qc3Rybmc1ICovCisJbXZ3YWRkY2godHJlZXNjcm40LCAxMSwgMTgsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCAxMiwgMTQsICcgJyk7CisKKwkvKiB0cmVlc2NybjUgKi8KKworCW92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuNSk7CisKKwkvKmJhbGxzICovCisJbXZ3YWRkY2godHJlZXNjcm41LCAzLCAxNSwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjUsIDEwLCAyMCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjUsIDEyLCAxLCAnICcpOworCisJLypzdGFyICovCisJbXZ3YWRkY2godHJlZXNjcm41LCAwLCAxMiwgJyonKTsKKworCS8qc3RybmcxICovCisJbXZ3YWRkY2godHJlZXNjcm41LCAzLCAxMSwgJyAnKTsKKworCS8qc3RybmcyICovCisJbXZ3YWRkY2godHJlZXNjcm41LCA1LCAxMiwgJyAnKTsKKworCS8qc3RybmczICovCisJbXZ3YWRkY2godHJlZXNjcm41LCA3LCAxNCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjUsIDgsIDEwLCAnICcpOworCisJLypzdHJuZzQgKi8KKwltdndhZGRjaCh0cmVlc2NybjUsIDksIDE1LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNSwgMTAsIDExLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNSwgMTEsIDcsICcgJyk7CisKKwkvKnN0cm5nNSAqLworCW12d2FkZGNoKHRyZWVzY3JuNSwgMTEsIDE3LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNSwgMTIsIDEzLCAnICcpOworCisJLyogdHJlZXNjcm42ICovCisKKwlvdmVybGF5KHRyZWVzY3JuLCB0cmVlc2NybjYpOworCisJLypiYWxscyAqLworCW12d2FkZGNoKHRyZWVzY3JuNiwgNiwgNywgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDcsIDE4LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNiwgMTAsIDQsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm42LCAxMSwgMjMsICcgJyk7CisKKwkvKnN0YXIgKi8KKwl3c3RhbmRvdXQodHJlZXNjcm42KTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDAsIDEyLCAnKicpOworCXdzdGFuZGVuZCh0cmVlc2NybjYpOworCisJLypzdHJuZzEgKi8KKworCS8qc3RybmcyICovCisJbXZ3YWRkY2godHJlZXNjcm42LCA1LCAxMSwgJyAnKTsKKworCS8qc3RybmczICovCisJbXZ3YWRkY2godHJlZXNjcm42LCA3LCAxMywgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDgsIDksICcgJyk7CisKKwkvKnN0cm5nNCAqLworCW12d2FkZGNoKHRyZWVzY3JuNiwgOSwgMTQsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm42LCAxMCwgMTAsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm42LCAxMSwgNiwgJyAnKTsKKworCS8qc3Rybmc1ICovCisJbXZ3YWRkY2godHJlZXNjcm42LCAxMSwgMTYsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm42LCAxMiwgMTIsICcgJyk7CisKKwkvKiB0cmVlc2NybjcgKi8KKworCW92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuNyk7CisKKwkvKmJhbGxzICovCisJbXZ3YWRkY2godHJlZXNjcm43LCAzLCAxNSwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDYsIDcsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm43LCA3LCAxOCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDEwLCA0LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgMTEsIDIyLCAnICcpOworCisJLypzdGFyICovCisJbXZ3YWRkY2godHJlZXNjcm43LCAwLCAxMiwgJyonKTsKKworCS8qc3RybmcxICovCisJbXZ3YWRkY2godHJlZXNjcm43LCAzLCAxMiwgJyAnKTsKKworCS8qc3RybmcyICovCisJbXZ3YWRkY2godHJlZXNjcm43LCA1LCAxMywgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDYsIDksICcgJyk7CisKKwkvKnN0cm5nMyAqLworCW12d2FkZGNoKHRyZWVzY3JuNywgNywgMTUsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm43LCA4LCAxMSwgJyAnKTsKKworCS8qc3Rybmc0ICovCisJbXZ3YWRkY2godHJlZXNjcm43LCA5LCAxNiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDEwLCAxMiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDExLCA4LCAnICcpOworCisJLypzdHJuZzUgKi8KKwltdndhZGRjaCh0cmVlc2NybjcsIDExLCAxOCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDEyLCAxNCwgJyAnKTsKKworCWxvb2tfb3V0KDE1MCk7CisJcmVpbmRlZXIoKTsKKworCXRvdWNod2luKHdfaG9saWRheSk7CisJd3JlZnJlc2god19ob2xpZGF5KTsKKwl3cmVmcmVzaCh3X2RlbF9tc2cpOworCisJbG9va19vdXQoNTAwKTsKKwlmb3IgKGxvb3B5ID0gMDsgbG9vcHkgPCAxMDA7IGxvb3B5KyspIHsKKwkgICAgYmxpbmtpdCgpOworCX0KKworI2lmZGVmIE5PTE9PUAorCWRvbmUoMCk7CisjZW5kaWYKKyAgICB9CisgICAgLypOT1RSRUFDSEVEICovCit9CisKK3N0YXRpYyBpbnQKK2JveGl0KHZvaWQpCit7CisgICAgaW50IHggPSAwOworCisgICAgd2hpbGUgKHggPCAyMCkgeworCW12YWRkY2goeCwgNywgJ3wnKTsKKwkrK3g7CisgICAgfQorCisgICAgeCA9IDg7CisKKyAgICB3aGlsZSAoeCA8IDgwKSB7CisJbXZhZGRjaCgxOSwgeCwgJ18nKTsKKwkrK3g7CisgICAgfQorCisgICAgeCA9IDA7CisKKyAgICB3aGlsZSAoeCA8IDgwKSB7CisJbXZhZGRjaCgyMiwgeCwgJ18nKTsKKwkrK3g7CisgICAgfQorCisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorc2Vhcyh2b2lkKQoreworICAgIG12YWRkY2goNCwgMSwgJ1MnKTsKKyAgICBtdmFkZGNoKDYsIDEsICdFJyk7CisgICAgbXZhZGRjaCg4LCAxLCAnQScpOworICAgIG12YWRkY2goMTAsIDEsICdTJyk7CisgICAgbXZhZGRjaCgxMiwgMSwgJ08nKTsKKyAgICBtdmFkZGNoKDE0LCAxLCAnTicpOworICAgIG12YWRkY2goMTYsIDEsICdgJyk7CisgICAgbXZhZGRjaCgxOCwgMSwgJ1MnKTsKKworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dyZWV0KHZvaWQpCit7CisgICAgbXZhZGRjaCgzLCA1LCAnRycpOworICAgIG12YWRkY2goNSwgNSwgJ1InKTsKKyAgICBtdmFkZGNoKDcsIDUsICdFJyk7CisgICAgbXZhZGRjaCg5LCA1LCAnRScpOworICAgIG12YWRkY2goMTEsIDUsICdUJyk7CisgICAgbXZhZGRjaCgxMywgNSwgJ0knKTsKKyAgICBtdmFkZGNoKDE1LCA1LCAnTicpOworICAgIG12YWRkY2goMTcsIDUsICdHJyk7CisgICAgbXZhZGRjaCgxOSwgNSwgJ1MnKTsKKworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Zyb213aG8odm9pZCkKK3sKKyAgICBtdmFkZHN0cigyMSwgMTMsIEZST01XSE8pOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3RyZWUodm9pZCkKK3sKKyAgICBzZXRfY29sb3IodHJlZXNjcm4sIENPTE9SX0dSRUVOKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgMSwgMTEsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDIsIDExLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAzLCAxMCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNCwgOSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNSwgOSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNiwgOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNywgNywgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgOCwgNiwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgOSwgNiwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgMTAsIDUsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDExLCAzLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxMiwgMiwgKGNodHlwZSkgJy8nKTsKKworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxLCAxMywgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDIsIDEzLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgMywgMTQsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA0LCAxNSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDUsIDE1LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNiwgMTYsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA3LCAxNywgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDgsIDE4LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgOSwgMTgsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxMCwgMTksIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxMSwgMjEsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxMiwgMjIsIChjaHR5cGUpICdcXCcpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDQsIDEwLCAoY2h0eXBlKSAnXycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA0LCAxNCwgKGNodHlwZSkgJ18nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgOCwgNywgKGNodHlwZSkgJ18nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgOCwgMTcsIChjaHR5cGUpICdfJyk7CisKKyAgICBtdndhZGRzdHIodHJlZXNjcm4sIDEzLCAwLCAiLy8vLy8vLy8vLy8vIFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCIpOworCisgICAgbXZ3YWRkc3RyKHRyZWVzY3JuLCAxNCwgMTEsICJ8IHwiKTsKKyAgICBtdndhZGRzdHIodHJlZXNjcm4sIDE1LCAxMSwgInxffCIpOworCisgICAgdW5zZXRfY29sb3IodHJlZXNjcm4pOworICAgIHdyZWZyZXNoKHRyZWVzY3JuKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworCisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorYmFsbHModm9pZCkKK3sKKyAgICBvdmVybGF5KHRyZWVzY3JuLCB0cmVlc2NybjIpOworCisgICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgQ09MT1JfQkxVRSk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAzLCA5LCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMywgMTUsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA0LCA4LCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNCwgMTYsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA1LCA3LCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNSwgMTcsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA3LCA2LCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNywgMTgsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA4LCA1LCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgOCwgMTksIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMCwgNCwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEwLCAyMCwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCAyLCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDIyLCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTIsIDEsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMiwgMjMsIChjaHR5cGUpICdAJyk7CisKKyAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpOworICAgIHdyZWZyZXNoKHRyZWVzY3JuMik7CisgICAgd3JlZnJlc2god19kZWxfbXNnKTsKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzdGFyKHZvaWQpCit7CisgICAgd2F0dHJzZXQodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBDT0xPUl9ZRUxMT1cpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAwLCAxMiwgKGNodHlwZSkgJyonKTsKKyAgICB3c3RhbmRlbmQodHJlZXNjcm4yKTsKKworICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMik7CisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cm5nMSh2b2lkKQoreworICAgIHdhdHRyc2V0KHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgQ09MT1JfV0hJVEUpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAzLCAxMywgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAzLCAxMiwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDMsIDExLCAoY2h0eXBlKSAnLicpOworCisgICAgd2F0dHJvZmYodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpOworCisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cm5nMih2b2lkKQoreworICAgIHdhdHRyc2V0KHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgQ09MT1JfV0hJVEUpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA1LCAxNCwgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA1LCAxMywgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDUsIDEyLCAoY2h0eXBlKSAnLicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNSwgMTEsIChjaHR5cGUpICcsJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA2LCAxMCwgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA2LCA5LCAoY2h0eXBlKSAnOicpOworCisgICAgd2F0dHJvZmYodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpOworCisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cm5nMyh2b2lkKQoreworICAgIHdhdHRyc2V0KHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgQ09MT1JfV0hJVEUpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA3LCAxNiwgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA3LCAxNSwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDcsIDE0LCAoY2h0eXBlKSAnLicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNywgMTMsIChjaHR5cGUpICcsJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA4LCAxMiwgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA4LCAxMSwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDgsIDEwLCAoY2h0eXBlKSAnLicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgOCwgOSwgKGNodHlwZSkgJywnKTsKKworICAgIHdhdHRyb2ZmKHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgdW5zZXRfY29sb3IodHJlZXNjcm4yKTsKKworICAgIHdyZWZyZXNoKHRyZWVzY3JuMik7CisgICAgd3JlZnJlc2god19kZWxfbXNnKTsKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzdHJuZzQodm9pZCkKK3sKKyAgICB3YXR0cnNldCh0cmVlc2NybjIsIEFfQk9MRCB8IEFfQkxJTkspOworICAgIHNldF9jb2xvcih0cmVlc2NybjIsIENPTE9SX1dISVRFKTsKKworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgOSwgMTcsIChjaHR5cGUpICdcJycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgOSwgMTYsIChjaHR5cGUpICc6Jyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA5LCAxNSwgKGNodHlwZSkgJy4nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDksIDE0LCAoY2h0eXBlKSAnLCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTAsIDEzLCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEwLCAxMiwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEwLCAxMSwgKGNodHlwZSkgJy4nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEwLCAxMCwgKGNodHlwZSkgJywnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCA5LCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCA4LCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDcsIChjaHR5cGUpICcuJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMSwgNiwgKGNodHlwZSkgJywnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEyLCA1LCAoY2h0eXBlKSAnXCcnKTsKKworICAgIHdhdHRyb2ZmKHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgdW5zZXRfY29sb3IodHJlZXNjcm4yKTsKKworICAgIHdyZWZyZXNoKHRyZWVzY3JuMik7CisgICAgd3JlZnJlc2god19kZWxfbXNnKTsKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzdHJuZzUodm9pZCkKK3sKKyAgICB3YXR0cnNldCh0cmVlc2NybjIsIEFfQk9MRCB8IEFfQkxJTkspOworICAgIHNldF9jb2xvcih0cmVlc2NybjIsIENPTE9SX1dISVRFKTsKKworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDE5LCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCAxOCwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCAxNywgKGNodHlwZSkgJy4nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCAxNiwgKGNodHlwZSkgJywnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEyLCAxNSwgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMiwgMTQsIChjaHR5cGUpICc6Jyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMiwgMTMsIChjaHR5cGUpICcuJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMiwgMTIsIChjaHR5cGUpICcsJyk7CisKKyAgICB3YXR0cm9mZih0cmVlc2NybjIsIEFfQk9MRCB8IEFfQkxJTkspOworICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMik7CisKKyAgICAvKiBzYXZlIGEgZnVsbHkgbGl0IHRyZWUgKi8KKyAgICBvdmVybGF5KHRyZWVzY3JuMiwgdHJlZXNjcm4pOworCisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2JsaW5raXQodm9pZCkKK3sKKyAgICBzdGF0aWMgaW50IGN5Y2xlOworCisgICAgaWYgKGN5Y2xlID4gNCkgeworCWN5Y2xlID0gMDsKKyAgICB9CisKKyAgICB0b3VjaHdpbih0cmVlc2NybjgpOworCisgICAgc3dpdGNoIChjeWNsZSkgeworICAgIGNhc2UgMDoKKwlvdmVybGF5KHRyZWVzY3JuMywgdHJlZXNjcm44KTsKKwl3cmVmcmVzaCh0cmVlc2NybjgpOworCXdyZWZyZXNoKHdfZGVsX21zZyk7CisJYnJlYWs7CisgICAgY2FzZSAxOgorCW92ZXJsYXkodHJlZXNjcm40LCB0cmVlc2NybjgpOworCXdyZWZyZXNoKHRyZWVzY3JuOCk7CisJd3JlZnJlc2god19kZWxfbXNnKTsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJb3ZlcmxheSh0cmVlc2NybjUsIHRyZWVzY3JuOCk7CisJd3JlZnJlc2godHJlZXNjcm44KTsKKwl3cmVmcmVzaCh3X2RlbF9tc2cpOworCWJyZWFrOworICAgIGNhc2UgMzoKKwlvdmVybGF5KHRyZWVzY3JuNiwgdHJlZXNjcm44KTsKKwl3cmVmcmVzaCh0cmVlc2NybjgpOworCXdyZWZyZXNoKHdfZGVsX21zZyk7CisJYnJlYWs7CisgICAgY2FzZSA0OgorCW92ZXJsYXkodHJlZXNjcm43LCB0cmVlc2NybjgpOworCXdyZWZyZXNoKHRyZWVzY3JuOCk7CisJd3JlZnJlc2god19kZWxfbXNnKTsKKwlicmVhazsKKyAgICB9CisgICAgdG91Y2h3aW4odHJlZXNjcm44KTsKKworICAgIC8qQUxMIE9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworICAgIG92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuOCk7CisgICAgd3JlZnJlc2godHJlZXNjcm44KTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworCisgICAgKytjeWNsZTsKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorZGVlcl9zdGVwKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpCit7CisgICAgbXZ3aW4od2luLCB5LCB4KTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisgICAgbG9va19vdXQoNSk7Cit9CisKK3N0YXRpYyBpbnQKK3JlaW5kZWVyKHZvaWQpCit7CisgICAgaW50IGxvb3BlcjsKKyAgICB5X3BvcyA9IDA7CisKKyAgICBmb3IgKHhfcG9zID0gNzA7IHhfcG9zID4gNjI7IHhfcG9zLS0pIHsKKwlpZiAoeF9wb3MgPCA2MikgeworCSAgICB5X3BvcyA9IDE7CisJfQorCWZvciAobG9vcGVyID0gMDsgbG9vcGVyIDwgNDsgbG9vcGVyKyspIHsKKwkgICAgbXZ3YWRkY2goZG90ZGVlcjAsIHlfcG9zLCB4X3BvcywgKGNodHlwZSkgJy4nKTsKKwkgICAgd3JlZnJlc2goZG90ZGVlcjApOworCSAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworCSAgICB3ZXJhc2UoZG90ZGVlcjApOworCSAgICB3cmVmcmVzaChkb3RkZWVyMCk7CisJICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisJICAgIGxvb2tfb3V0KDUwKTsKKwl9CisgICAgfQorCisgICAgeV9wb3MgPSAyOworCisgICAgZm9yICg7IHhfcG9zID4gNTA7IHhfcG9zLS0pIHsKKwlmb3IgKGxvb3BlciA9IDA7IGxvb3BlciA8IDQ7IGxvb3BlcisrKSB7CisKKwkgICAgaWYgKHhfcG9zIDwgNTYpIHsKKwkJeV9wb3MgPSAzOworCisJCW12d2FkZGNoKHN0YXJkZWVyMCwgeV9wb3MsIHhfcG9zLCAoY2h0eXBlKSAnKicpOworCQl3cmVmcmVzaChzdGFyZGVlcjApOworCQl3cmVmcmVzaCh3X2RlbF9tc2cpOworCQl3ZXJhc2Uoc3RhcmRlZXIwKTsKKwkJd3JlZnJlc2goc3RhcmRlZXIwKTsKKwkJd3JlZnJlc2god19kZWxfbXNnKTsKKwkgICAgfSBlbHNlIHsKKwkJbXZ3YWRkY2goZG90ZGVlcjAsIHlfcG9zLCB4X3BvcywgKGNodHlwZSkgJyonKTsKKwkJd3JlZnJlc2goZG90ZGVlcjApOworCQl3cmVmcmVzaCh3X2RlbF9tc2cpOworCQl3ZXJhc2UoZG90ZGVlcjApOworCQl3cmVmcmVzaChkb3RkZWVyMCk7CisJCXdyZWZyZXNoKHdfZGVsX21zZyk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgeF9wb3MgPSA1ODsKKworICAgIGZvciAoeV9wb3MgPSAyOyB5X3BvcyA8IDU7IHlfcG9zKyspIHsKKworCXRvdWNod2luKGxpbGRlZXIwKTsKKwl3cmVmcmVzaChsaWxkZWVyMCk7CisJd3JlZnJlc2god19kZWxfbXNnKTsKKworCWZvciAobG9vcGVyID0gMDsgbG9vcGVyIDwgNDsgbG9vcGVyKyspIHsKKwkgICAgZGVlcl9zdGVwKGxpbGRlZXIzLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAobGlsZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChsaWxkZWVyMSwgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKGxpbGRlZXIyLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAobGlsZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisKKwkgICAgdG91Y2h3aW4obGlsZGVlcjApOworCSAgICB3cmVmcmVzaChsaWxkZWVyMCk7CisJICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisKKwkgICAgeF9wb3MgLT0gMjsKKwl9CisgICAgfQorCisgICAgeF9wb3MgPSAzNTsKKworICAgIGZvciAoeV9wb3MgPSA1OyB5X3BvcyA8IDEwOyB5X3BvcysrKSB7CisKKwl0b3VjaHdpbihtaWRkZWVyMCk7CisJd3JlZnJlc2gobWlkZGVlcjApOworCXdyZWZyZXNoKHdfZGVsX21zZyk7CisKKwlmb3IgKGxvb3BlciA9IDA7IGxvb3BlciA8IDI7IGxvb3BlcisrKSB7CisJICAgIGRlZXJfc3RlcChtaWRkZWVyMywgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKG1pZGRlZXIyLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAobWlkZGVlcjEsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChtaWRkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKG1pZGRlZXIzLCB5X3BvcywgeF9wb3MpOworCisJICAgIHRvdWNod2luKG1pZGRlZXIwKTsKKwkgICAgd3JlZnJlc2gobWlkZGVlcjApOworCSAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworCisJICAgIHhfcG9zIC09IDM7CisJfQorICAgIH0KKworICAgIGxvb2tfb3V0KDMwMCk7CisKKyAgICB5X3BvcyA9IDE7CisKKyAgICBmb3IgKHhfcG9zID0gODsgeF9wb3MgPCAxNjsgeF9wb3MrKykgeworCWRlZXJfc3RlcChiaWdkZWVyNCwgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAoYmlnZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGJpZ2RlZXIyLCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChiaWdkZWVyMSwgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAoYmlnZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGJpZ2RlZXIzLCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChiaWdkZWVyNCwgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAoYmlnZGVlcjAsIHlfcG9zLCB4X3Bvcyk7CisgICAgfQorCisgICAgLS14X3BvczsKKworICAgIGZvciAobG9vcGVyID0gMDsgbG9vcGVyIDwgNjsgbG9vcGVyKyspIHsKKwlkZWVyX3N0ZXAobG9va2RlZXI0LCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChsb29rZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGxvb2tkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAobG9va2RlZXIxLCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChsb29rZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGxvb2tkZWVyMywgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAobG9va2RlZXI0LCB5X3BvcywgeF9wb3MpOworICAgIH0KKworICAgIGRlZXJfc3RlcChsb29rZGVlcjAsIHlfcG9zLCB4X3Bvcyk7CisKKyAgICBmb3IgKDsgeV9wb3MgPCAxMDsgeV9wb3MrKykgeworCWZvciAobG9vcGVyID0gMDsgbG9vcGVyIDwgMjsgbG9vcGVyKyspIHsKKwkgICAgZGVlcl9zdGVwKGJpZ2RlZXI0LCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAoYmlnZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChiaWdkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKGJpZ2RlZXIxLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAoYmlnZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChiaWdkZWVyMywgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKGJpZ2RlZXI0LCB5X3BvcywgeF9wb3MpOworCX0KKwlkZWVyX3N0ZXAoYmlnZGVlcjAsIHlfcG9zLCB4X3Bvcyk7CisgICAgfQorCisgICAgLS15X3BvczsKKworICAgIGRlZXJfc3RlcChsb29rZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIFJFVFNJR1RZUEUKK2RvbmUoaW50IHNpZyBHQ0NfVU5VU0VEKQoreworICAgIENBVENIQUxMKGRvbmUpOworCisgICAgbW92ZShMSU5FUyAtIDEsIDApOworICAgIHJlZnJlc2goKTsKKyAgICBlbmR3aW4oKTsKKyAgICBjdXJzX3NldCgxKTsKKworI2lmIE5PX0xFQUtTCisgICAgaWYgKG15X3BhaXJzICE9IDApCisJZnJlZShteV9wYWlycyk7CisjZW5kaWYKKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3h0ZXJtLTE2Y29sb3IuZGF0IGIvdGVzdC94dGVybS0xNmNvbG9yLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ3ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC94dGVybS0xNmNvbG9yLmRhdApAQCAtMCwwICsxLDUzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogeHRlcm0tMTZjb2xvci5kYXQsdiAxLjIgMjAwNi8wNC8yMiAyMTo0MDowMCB0b20gRXhwICQKKyMgVGhpcyBpbGx1c3RyYXRlcyB0aGUgcHJlZGVmaW5lZCBjb2xvcnMgZm9yIFhGcmVlODYgeHRlcm0ncyAieHRlcm0tMTZjb2xvciIuIAorIyBJZiB5b3Ugc2V0ICRURVJNIHRvICJ4dGVybS04OGNvbG9yIiAoYW5kIGhhdmUgeHRlcm0gY29tcGlsZWQgdG8gc3VwcG9ydCB0aGUKKyMgODgtY29sb3Igb3IgMjU2LWNvbG9yIGZlYXR1cmUpLCB5b3UgY2FuIHVzZSB0aGUgbmN1cnNlcyAnZCcgc2NyZWVuIHRvCisjIG1hbmlwdWxhdGUgdGhlIGNvbG9ycyBzaG93biBpbiB0aGUgc2NyZWVuLiAgVGhlICdkJyBzY3JlZW4gaXMgbGltaXRlZCB0bworIyB0aGUgZmlyc3QgMTYgY29sb3JzLCBhbmQgeHRlcm0gaGFwcGVucyB0byB1c2UgdGhlIHNhbWUgZmlyc3QgMTYgY29sb3JzIGluCisjIHRoZSBleHRlbmRlZCBjb2xvciBtb2RlbHMgdGhhdCBzdXBwb3J0IGluaXRjLgorIworIyBUaGUgY29sb3JzIHNob3duIGFyZSBmb3IgeHRlcm0gcGF0Y2ggIzE4OS4KK3NjYWxlOjI1NQorMDoJICAwICAgMCAgIDAJCWJsYWNrCisxOgkyMDUgICAwCSAgMAkJcmVkMworMjoJICAwIDIwNQkgIDAJCWdyZWVuMworMzoJMjA1IDIwNQkgIDAJCXllbGxvdzMKKzQ6CSAzMCAxNDQgMjU1CQlEb2RnZXJCbHVlMQorNToJMjA1ICAgMCAyMDUJCW1hZ2VudGEzCis2OgkgIDAgMjA1IDIwNQkJY3lhbjMKKzc6CTIyOSAyMjkgMjI5IAkJZ3JheTkwCis4OgkxMjcgMTI3IDEyNyAJCWdyYXk1MAorOToJMjU1ICAgMCAgIDAJCXJlZAorMTA6CSAgMCAyNTUgICAwCQlncmVlbgorMTE6CTI1NSAyNTUgICAwCQl5ZWxsb3cKKzEyOgkgOTkgMTg0IDI1NQkJU3RlZWxCbHVlMQorMTM6CTI1NSAgIDAgMjU1CQltYWdlbnRhCisxNDoJICAwIDI1NSAyNTUJCWN5YW4KKzE1OgkyNTUgMjU1IDI1NQkJd2hpdGUKZGlmZiAtLWdpdCBhL3Rlc3QveHRlcm0tODhjb2xvci5kYXQgYi90ZXN0L3h0ZXJtLTg4Y29sb3IuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOGFhMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3h0ZXJtLTg4Y29sb3IuZGF0CkBAIC0wLDAgKzEsMTI1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogeHRlcm0tODhjb2xvci5kYXQsdiAxLjIgMjAwNi8wNC8yMiAyMTo0MDowMCB0b20gRXhwICQKKyMgVGhpcyBpbGx1c3RyYXRlcyB0aGUgcHJlZGVmaW5lZCBjb2xvcnMgZm9yIFhGcmVlODYgeHRlcm0ncyAieHRlcm0tMTZjb2xvciIuIAorIyBJZiB5b3Ugc2V0ICRURVJNIHRvICJ4dGVybS04OGNvbG9yIiAoYW5kIGhhdmUgeHRlcm0gY29tcGlsZWQgdG8gc3VwcG9ydCB0aGUKKyMgODgtY29sb3Igb3IgMjU2LWNvbG9yIGZlYXR1cmUpLCB5b3UgY2FuIHVzZSB0aGUgbmN1cnNlcyAnZCcgc2NyZWVuIHRvCisjIG1hbmlwdWxhdGUgdGhlIGNvbG9ycyBzaG93biBpbiB0aGUgc2NyZWVuLiAgVGhlICdkJyBzY3JlZW4gaXMgbGltaXRlZCB0bworIyB0aGUgZmlyc3QgMTYgY29sb3JzLCBhbmQgeHRlcm0gaGFwcGVucyB0byB1c2UgdGhlIHNhbWUgZmlyc3QgMTYgY29sb3JzIGluCisjIHRoZSBleHRlbmRlZCBjb2xvciBtb2RlbHMgdGhhdCBzdXBwb3J0IGluaXRjLgorIworIyBUaGUgY29sb3JzIHNob3duIGFyZSBmb3IgeHRlcm0gcGF0Y2ggIzE4OS4KK3NjYWxlOjI1NQorMDoJICAwICAgMCAgIDAJCWJsYWNrCisxOgkyMDUgICAwCSAgMAkJcmVkMworMjoJICAwIDIwNQkgIDAJCWdyZWVuMworMzoJMjA1IDIwNQkgIDAJCXllbGxvdzMKKzQ6CSAzMCAxNDQgMjU1CQlEb2RnZXJCbHVlMQorNToJMjA1ICAgMCAyMDUJCW1hZ2VudGEzCis2OgkgIDAgMjA1IDIwNQkJY3lhbjMKKzc6CTIyOSAyMjkgMjI5IAkJZ3JheTkwCis4OgkxMjcgMTI3IDEyNyAJCWdyYXk1MAorOToJMjU1ICAgMCAgIDAJCXJlZAorMTA6CSAgMCAyNTUgICAwCQlncmVlbgorMTE6CTI1NSAyNTUgICAwCQl5ZWxsb3cKKzEyOgkgOTkgMTg0IDI1NQkJU3RlZWxCbHVlMQorMTM6CTI1NSAgIDAgMjU1CQltYWdlbnRhCisxNDoJICAwIDI1NSAyNTUJCWN5YW4KKzE1OgkyNTUgMjU1IDI1NQkJd2hpdGUKKzE2OgkgIDAgICAwICAgMAorMTc6CSAgMCAgIDAgMTM5CisxODoJICAwICAgMCAyMDUKKzE5OgkgIDAgICAwIDI1NQorMjA6CSAgMCAxMzkgICAwCisyMToJICAwIDEzOSAxMzkKKzIyOgkgIDAgMTM5IDIwNQorMjM6CSAgMCAxMzkgMjU1CisyNDoJICAwIDIwNSAgIDAKKzI1OgkgIDAgMjA1IDEzOQorMjY6CSAgMCAyMDUgMjA1CisyNzoJICAwIDIwNSAyNTUKKzI4OgkgIDAgMjU1ICAgMAorMjk6CSAgMCAyNTUgMTM5CiszMDoJICAwIDI1NSAyMDUKKzMxOgkgIDAgMjU1IDI1NQorMzI6CTEzOSAgIDAgICAwCiszMzoJMTM5ICAgMCAxMzkKKzM0OgkxMzkgICAwIDIwNQorMzU6CTEzOSAgIDAgMjU1CiszNjoJMTM5IDEzOSAgIDAKKzM3OgkxMzkgMTM5IDEzOQorMzg6CTEzOSAxMzkgMjA1CiszOToJMTM5IDEzOSAyNTUKKzQwOgkxMzkgMjA1ICAgMAorNDE6CTEzOSAyMDUgMTM5Cis0MjoJMTM5IDIwNSAyMDUKKzQzOgkxMzkgMjA1IDI1NQorNDQ6CTEzOSAyNTUgICAwCis0NToJMTM5IDI1NSAxMzkKKzQ2OgkxMzkgMjU1IDIwNQorNDc6CTEzOSAyNTUgMjU1Cis0ODoJMjA1ICAgMCAgIDAKKzQ5OgkyMDUgICAwIDEzOQorNTA6CTIwNSAgIDAgMjA1Cis1MToJMjA1ICAgMCAyNTUKKzUyOgkyMDUgMTM5ICAgMAorNTM6CTIwNSAxMzkgMTM5Cis1NDoJMjA1IDEzOSAyMDUKKzU1OgkyMDUgMTM5IDI1NQorNTY6CTIwNSAyMDUgICAwCis1NzoJMjA1IDIwNSAxMzkKKzU4OgkyMDUgMjA1IDIwNQorNTk6CTIwNSAyMDUgMjU1Cis2MDoJMjA1IDI1NSAgIDAKKzYxOgkyMDUgMjU1IDEzOQorNjI6CTIwNSAyNTUgMjA1Cis2MzoJMjA1IDI1NSAyNTUKKzY0OgkyNTUgICAwICAgMAorNjU6CTI1NSAgIDAgMTM5Cis2NjoJMjU1ICAgMCAyMDUKKzY3OgkyNTUgICAwIDI1NQorNjg6CTI1NSAxMzkgICAwCis2OToJMjU1IDEzOSAxMzkKKzcwOgkyNTUgMTM5IDIwNQorNzE6CTI1NSAxMzkgMjU1Cis3MjoJMjU1IDIwNSAgIDAKKzczOgkyNTUgMjA1IDEzOQorNzQ6CTI1NSAyMDUgMjA1Cis3NToJMjU1IDIwNSAyNTUKKzc2OgkyNTUgMjU1ICAgMAorNzc6CTI1NSAyNTUgMTM5Cis3ODoJMjU1IDI1NSAyMDUKKzc5OgkyNTUgMjU1IDI1NQorODA6CSA0NiAgNDYgIDQ2Cis4MToJIDkyICA5MiAgOTIKKzgyOgkxMTMgMTEzIDExMworODM6CTEzOSAxMzkgMTM5Cis4NDoJMTYyIDE2MiAxNjIKKzg1OgkxODUgMTg1IDE4NQorODY6CTIwOCAyMDggMjA4Cis4NzoJMjMxIDIzMSAyMzEK